{"version":3,"file":"transfer-panel.mjs","sources":["../../../components/transfer/transfer-panel.tsx"],"sourcesContent":["import { Checkbox } from '@/components/checkbox'\r\nimport { CollapseTransition } from '@/components/collapse-transition'\r\nimport { Icon } from '@/components/icon'\r\nimport { Input } from '@/components/input'\r\nimport { NumberInput } from '@/components/number-input'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\nimport { VirtualList } from '@/components/virtual-list'\r\n\r\nimport {\r\n  computed,\r\n  defineComponent,\r\n  reactive,\r\n  ref,\r\n  renderSlot,\r\n  toRef,\r\n  watch,\r\n  watchEffect,\r\n} from 'vue'\r\n\r\nimport { stateProp, useIcons, useNameHelper } from '@vexip-ui/config'\r\nimport { useModifier, useRtl } from '@vexip-ui/hooks'\r\nimport { boundRange, decide } from '@vexip-ui/utils'\r\n\r\nimport type { PropType } from 'vue'\r\nimport type { VirtualListExposed } from '@/components/virtual-list'\r\nimport type { LocaleConfig } from '@vexip-ui/config'\r\nimport type { TransferOptionState } from './symbol'\r\n\r\nexport default defineComponent({\r\n  name: 'TransferPanel',\r\n  props: {\r\n    type: {\r\n      type: String as PropType<'source' | 'target'>,\r\n      default: null,\r\n    },\r\n    state: {\r\n      type: stateProp,\r\n      default: 'default',\r\n    },\r\n    selected: {\r\n      type: Set as PropType<Set<string | number>>,\r\n      default: () => new Set(),\r\n    },\r\n    paged: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    filter: {\r\n      type: Function as PropType<(value: string, options: TransferOptionState) => boolean>,\r\n      default: null,\r\n    },\r\n    disabled: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    title: {\r\n      type: String,\r\n      default: '',\r\n    },\r\n    options: {\r\n      type: Array as PropType<TransferOptionState[]>,\r\n      default: () => [],\r\n    },\r\n    emptyText: {\r\n      type: String,\r\n      default: '暂无数据',\r\n    },\r\n    optionHeight: {\r\n      type: Number,\r\n      default: 32,\r\n    },\r\n    deepState: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    loading: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    loadingIcon: {\r\n      type: [Object, Function],\r\n      default: null,\r\n    },\r\n    loadingLock: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n    loadingEffect: {\r\n      type: String,\r\n      default: null,\r\n    },\r\n    locale: {\r\n      type: Object as PropType<LocaleConfig['transfer']>,\r\n      default: () => ({}),\r\n    },\r\n  },\r\n  emits: ['update:selected', 'select', 'enter', 'switch'],\r\n  setup(props, { slots, emit }) {\r\n    const nh = useNameHelper('transfer')\r\n    const icons = useIcons()\r\n\r\n    const { isRtl } = useRtl()\r\n\r\n    const currentSelected = ref(new Set(props.selected))\r\n    const pageSize = ref(10)\r\n    const currentPage = ref(1)\r\n    const currentMark = ref<string | number | null>(null)\r\n    const currentHitting = ref(-1)\r\n    const currentFilter = ref('')\r\n    const searching = ref(false)\r\n\r\n    const header = ref<HTMLElement>()\r\n    const body = ref<HTMLElement>()\r\n    const footer = ref<HTMLElement>()\r\n    const search = ref<HTMLElement>()\r\n    const input = ref<InstanceType<typeof Input>>()\r\n    const list = ref<VirtualListExposed>()\r\n\r\n    let bodyRealHeight = 0\r\n    let lastSelected: string | number | null = null\r\n    let keyUsed = false\r\n\r\n    const { target: wrapper, modifier } = useModifier({\r\n      passive: false,\r\n      onKeyDown: (event, modifier) => {\r\n        decide(\r\n          [\r\n            [\r\n              () => modifier.up || modifier.down,\r\n              () => {\r\n                if (!keyUsed && currentHitting.value < 0) {\r\n                  keyUsed = true\r\n\r\n                  if (lastSelected) {\r\n                    currentHitting.value = props.options.findIndex(\r\n                      option => option.value === lastSelected,\r\n                    )\r\n                  } else if (list.value) {\r\n                    currentHitting.value = Math.round(list.value.scrollOffset / props.optionHeight)\r\n                  }\r\n\r\n                  currentHitting.value = currentHitting.value === -1 ? 0 : currentHitting.value\r\n                } else {\r\n                  currentHitting.value = boundRange(\r\n                    findEnabledIndex(\r\n                      currentHitting.value + (modifier.up ? -1 : 1),\r\n                      modifier.up ? -1 : 1,\r\n                    ),\r\n                    0,\r\n                    currentOptions.value.length - 1,\r\n                  )\r\n                }\r\n\r\n                if (!props.paged) {\r\n                  ensureOptionInView(currentHitting.value, modifier.up ? 'top' : 'bottom')\r\n                }\r\n              },\r\n            ],\r\n            [\r\n              () => props.paged && (modifier.left || modifier.right) && event.ctrlKey,\r\n              () => {\r\n                handlePageChange(currentPage.value + (modifier.left ? -1 : 1))\r\n                currentHitting.value = 0\r\n              },\r\n            ],\r\n            [\r\n              () =>\r\n                (props.type === 'source' && modifier.right) ||\r\n                (props.type === 'target' && modifier.left),\r\n              () => {\r\n                keyUsed = false\r\n                currentHitting.value = -1\r\n                lastSelected = null\r\n                emit('switch')\r\n              },\r\n            ],\r\n            [\r\n              () => modifier.space,\r\n              () => {\r\n                const option = currentOptions.value[currentHitting.value]\r\n\r\n                if (option) {\r\n                  currentSelected.value[currentSelected.value.has(option.value) ? 'delete' : 'add'](\r\n                    option.value,\r\n                  )\r\n                  emitSelectedChange()\r\n                }\r\n              },\r\n            ],\r\n            [() => modifier.enter, () => emit('enter')],\r\n            [\r\n              () => typeof props.filter === 'function' && !!input.value && modifier['ctrl+f'],\r\n              () => {\r\n                event.stopPropagation()\r\n                input.value!.focus()\r\n              },\r\n            ],\r\n          ],\r\n          {\r\n            beforeMatchAny: () => event.preventDefault(),\r\n            afterMatchAny: modifier.resetAll,\r\n          },\r\n        )\r\n      },\r\n    })\r\n\r\n    const className = computed(() => {\r\n      return {\r\n        [nh.be('panel')]: true,\r\n        [nh.bem('panel', props.state)]: props.state !== 'default',\r\n        [nh.bem('panel', 'disabled')]: props.disabled,\r\n      }\r\n    })\r\n    const visibleOptions = computed(() => {\r\n      const filter = props.filter\r\n      const filterValue = currentFilter.value\r\n\r\n      if (filter && filterValue) {\r\n        return props.options.filter(option => filter(filterValue, option))\r\n      }\r\n\r\n      return props.options\r\n    })\r\n    const optionSize = computed(() => visibleOptions.value.length)\r\n    const pagedOptions = computed(() => {\r\n      return visibleOptions.value.slice(\r\n        (currentPage.value - 1) * pageSize.value,\r\n        currentPage.value * pageSize.value,\r\n      )\r\n    })\r\n    const currentOptions = computed(() => (props.paged ? pagedOptions.value : visibleOptions.value))\r\n    const totalPages = computed(() => Math.ceil(optionSize.value / (pageSize.value || 1)))\r\n\r\n    watch(\r\n      () => props.selected,\r\n      value => {\r\n        currentSelected.value = value\r\n      },\r\n    )\r\n    watch(optionSize, () => {\r\n      keyUsed = false\r\n      currentHitting.value = -1\r\n      lastSelected = null\r\n    })\r\n\r\n    const partial = ref(false)\r\n    const allSelected = ref(false)\r\n\r\n    watchEffect(() => {\r\n      const options = visibleOptions.value\r\n      const selected = currentSelected.value\r\n\r\n      let hasSelected = false\r\n      let hasUnselected = false\r\n\r\n      for (let i = 0, len = optionSize.value; i < len; ++i) {\r\n        const option = options[i]\r\n\r\n        if (!option.disabled) {\r\n          if (selected.has(option.value)) {\r\n            hasSelected = true\r\n          } else {\r\n            hasUnselected = true\r\n          }\r\n        }\r\n\r\n        if (hasSelected && hasUnselected) {\r\n          break\r\n        }\r\n      }\r\n\r\n      allSelected.value = hasSelected && !hasUnselected\r\n      partial.value = !allSelected.value && selected.size > 0\r\n    })\r\n\r\n    function computePageSize() {\r\n      requestAnimationFrame(() => {\r\n        const bodyEl = body.value || list.value?.wrapper\r\n\r\n        if (bodyEl) {\r\n          const style = getComputedStyle(bodyEl)\r\n          const paddingTop = parseInt(style.paddingTop)\r\n          const paddingBottom = parseInt(style.paddingBottom)\r\n          const innerHeight = bodyEl.offsetHeight - paddingTop - paddingBottom\r\n\r\n          bodyRealHeight = innerHeight\r\n          pageSize.value = Math.floor(innerHeight / (props.optionHeight || 1))\r\n        }\r\n      })\r\n    }\r\n\r\n    function toggleSelect(option: TransferOptionState) {\r\n      if (props.disabled || option.disabled) return\r\n\r\n      if (currentMark.value && modifier.shift) {\r\n        handleRangeSelect(currentMark.value, option.value)\r\n        return\r\n      }\r\n\r\n      if (currentSelected.value.has(option.value)) {\r\n        currentSelected.value.delete(option.value)\r\n      } else {\r\n        currentSelected.value.add(option.value)\r\n      }\r\n\r\n      keyUsed = false\r\n      currentHitting.value = -1\r\n      lastSelected = option.value\r\n      currentMark.value = option.value\r\n      emitSelectedChange()\r\n    }\r\n\r\n    function handleRangeSelect(start: string | number, end: string | number) {\r\n      const options = visibleOptions.value\r\n\r\n      let startIndex = -1\r\n      let endIndex = -1\r\n\r\n      for (let i = 0, len = options.length; i < len; ++i) {\r\n        const option = options[i]\r\n\r\n        if (option.value === start) {\r\n          startIndex = i\r\n        } else if (option.value === end) {\r\n          endIndex = i\r\n        }\r\n\r\n        if (startIndex > 0 && endIndex > 0) break\r\n      }\r\n\r\n      const method = currentSelected.value.has(options[startIndex]?.value) ? 'add' : 'delete'\r\n\r\n      if (startIndex > endIndex) {\r\n        ;[startIndex, endIndex] = [endIndex, startIndex]\r\n      }\r\n\r\n      for (let i = startIndex; i <= endIndex; ++i) {\r\n        const option = options[i]\r\n\r\n        if (!option.disabled) {\r\n          currentSelected.value[method](option.value)\r\n        }\r\n      }\r\n\r\n      emitSelectedChange()\r\n    }\r\n\r\n    function toggleSelectAll(event?: Event) {\r\n      event?.preventDefault()\r\n\r\n      if (props.disabled) return\r\n\r\n      if (allSelected.value) {\r\n        for (const option of visibleOptions.value) {\r\n          !option.disabled && currentSelected.value.delete(option.value)\r\n        }\r\n      } else {\r\n        for (const option of visibleOptions.value) {\r\n          !option.disabled && currentSelected.value.add(option.value)\r\n        }\r\n      }\r\n\r\n      currentMark.value = null\r\n      emitSelectedChange()\r\n    }\r\n\r\n    function handleReverse() {\r\n      if (props.disabled) return\r\n\r\n      if (partial.value) {\r\n        const prevSelected = new Set(currentSelected.value)\r\n\r\n        for (const option of visibleOptions.value) {\r\n          if (!option.disabled) {\r\n            if (prevSelected.has(option.value)) {\r\n              currentSelected.value.delete(option.value)\r\n            } else {\r\n              currentSelected.value.add(option.value)\r\n            }\r\n          }\r\n        }\r\n\r\n        currentMark.value = null\r\n        emitSelectedChange()\r\n      } else {\r\n        toggleSelectAll()\r\n      }\r\n    }\r\n\r\n    function handleBlur() {\r\n      currentMark.value = null\r\n      modifier.resetAll()\r\n    }\r\n\r\n    function emitSelectedChange() {\r\n      emit('update:selected', currentSelected.value)\r\n      emit('select')\r\n    }\r\n\r\n    function handlePageChange(page: number) {\r\n      currentPage.value = boundRange(page, 1, totalPages.value)\r\n    }\r\n\r\n    function queryEnabledIndex(index: number, step: number) {\r\n      const options = currentOptions.value\r\n      step = step / Math.abs(step)\r\n\r\n      while (options[index]?.disabled) {\r\n        index += step\r\n\r\n        if (index < 0 || index >= options.length) break\r\n      }\r\n\r\n      return index\r\n    }\r\n\r\n    function findEnabledIndex(index: number, sign: 1 | -1 = 1) {\r\n      const options = currentOptions.value\r\n\r\n      if (options[index]?.disabled) {\r\n        index = queryEnabledIndex(index, sign)\r\n\r\n        if (sign > 0 ? index >= options.length : index < 0) {\r\n          index = queryEnabledIndex(index, -sign)\r\n\r\n          // 全禁用\r\n          if (sign > 0 ? index < 0 : index >= options.length) index = -1\r\n        }\r\n      }\r\n\r\n      return index\r\n    }\r\n\r\n    function ensureOptionInView(index: number, direction: 'top' | 'bottom') {\r\n      const option = props.options[index]\r\n\r\n      if (props.paged || !option || !list.value) return\r\n\r\n      if (direction === 'bottom') {\r\n        const target = (index + 1) * props.optionHeight\r\n\r\n        if (list.value.scrollOffset + bodyRealHeight < target) {\r\n          list.value.scrollTo((index - pageSize.value + 1) * props.optionHeight)\r\n        }\r\n      } else {\r\n        const target = index * props.optionHeight\r\n\r\n        if (list.value.scrollOffset > target) {\r\n          list.value.scrollTo(target)\r\n        }\r\n      }\r\n    }\r\n\r\n    const slotParams = reactive({\r\n      type: toRef(props, 'type'),\r\n      currentPage,\r\n      pageSize,\r\n      totalPages,\r\n      allSelected,\r\n      partial,\r\n      selected: computed(() => Array.from(currentSelected.value)),\r\n      options: computed(() => visibleOptions.value),\r\n      toggleSelectAll,\r\n      handleReverse,\r\n    })\r\n\r\n    function renderOption({ option, index }: { option: TransferOptionState, index: number }) {\r\n      const disabled = props.disabled || option.disabled\r\n      const handleCheck = (event: MouseEvent) => {\r\n        event.preventDefault()\r\n        event.stopPropagation()\r\n        toggleSelect(option)\r\n      }\r\n\r\n      return (\r\n        <li\r\n          class={{\r\n            [nh.be('option')]: true,\r\n            [nh.bem('option', 'disabled')]: disabled,\r\n            [nh.bem('option', 'hitting')]: currentHitting.value === index,\r\n          }}\r\n          role={'option'}\r\n          aria-disabled={disabled ? 'true' : undefined}\r\n          onClick={() => toggleSelect(option)}\r\n        >\r\n          {renderSlot(slots, 'option', { type: props.type, option, index }, () => [\r\n            <Checkbox\r\n              key={1}\r\n              class={nh.be('checkbox')}\r\n              state={props.deepState ? props.state : undefined}\r\n              checked={currentSelected.value.has(option.value)}\r\n              disabled={disabled}\r\n              tab-index={-1}\r\n              onClick={handleCheck}\r\n            ></Checkbox>,\r\n            <span key={2} class={nh.be('label')}>\r\n              {renderSlot(slots, 'label', { type: props.type, option, index }, () => [\r\n                option.label,\r\n              ])}\r\n            </span>,\r\n          ])}\r\n        </li>\r\n      )\r\n    }\r\n\r\n    function renderHeader() {\r\n      return (\r\n        <div ref={header} class={nh.be('header')}>\r\n          {renderSlot(slots, 'header', slotParams, () => [\r\n            <>\r\n              <Checkbox\r\n                inherit\r\n                control\r\n                class={nh.be('checkbox')}\r\n                state={props.deepState ? props.state : undefined}\r\n                checked={allSelected.value}\r\n                partial={partial.value}\r\n                disabled={props.disabled}\r\n                tab-index={-1}\r\n                onClick={toggleSelectAll}\r\n              ></Checkbox>\r\n              <div\r\n                class={[nh.be('reverse'), props.disabled && nh.bem('reverse', 'disabled')]}\r\n                title={props.locale.reverse}\r\n                onClick={handleReverse}\r\n              >\r\n                <Icon\r\n                  {...icons.value.retweet}\r\n                  scale={+(icons.value.retweet.scale || 1) * 1.2}\r\n                ></Icon>\r\n              </div>\r\n              <div class={nh.be('counter')}>\r\n                {`${currentSelected.value.size}/${visibleOptions.value.length}`}\r\n              </div>\r\n              {(props.title || slots.title) && (\r\n                <span class={nh.be('title')}>\r\n                  {renderSlot(slots, 'title', slotParams, () => [props.title])}\r\n                </span>\r\n              )}\r\n              <CollapseTransition appear horizontal fade-effect>\r\n                {props.loading && (\r\n                  <div class={nh.be('loading')}>\r\n                    <Icon\r\n                      {...icons.value.loading}\r\n                      effect={props.loadingEffect || icons.value.loading.effect}\r\n                      icon={props.loadingIcon || icons.value.loading.icon}\r\n                      label={'loading'}\r\n                    ></Icon>\r\n                  </div>\r\n                )}\r\n              </CollapseTransition>\r\n            </>,\r\n          ])}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderFilter() {\r\n      if (typeof props.filter !== 'function') return null\r\n\r\n      const stop = (e: Event) => e.stopPropagation()\r\n      // const setFilter = (value: string) => (currentFilter.value = value)\r\n\r\n      return (\r\n        <div ref={search} class={nh.be('filter')}>\r\n          <Input\r\n            ref={input}\r\n            v-model:value={currentFilter.value}\r\n            inherit\r\n            clearable\r\n            sync\r\n            disabled={props.disabled}\r\n            placeholder={searching.value ? undefined : props.locale.search}\r\n            onKeydown={stop}\r\n            onFocus={() => (searching.value = true)}\r\n            onBlur={() => (searching.value = false)}\r\n          >\r\n            {{\r\n              suffix: () => <Icon {...icons.value.search}></Icon>,\r\n            }}\r\n          </Input>\r\n        </div>\r\n      )\r\n    }\r\n\r\n    function renderBody() {\r\n      if (props.paged || slots.body) {\r\n        return (\r\n          <ResizeObserver throttle onResize={computePageSize}>\r\n            <ul ref={body} class={nh.be('body')} role={'listbox'}>\r\n              {renderSlot(slots, 'body', slotParams, () => [\r\n                pagedOptions.value.length ? (\r\n                  pagedOptions.value.map((option, index) => renderOption({ option, index }))\r\n                ) : (\r\n                  <div class={nh.be('empty')}>{props.emptyText || props.locale.empty}</div>\r\n                ),\r\n              ])}\r\n            </ul>\r\n          </ResizeObserver>\r\n        )\r\n      }\r\n\r\n      return (\r\n        <VirtualList\r\n          ref={list}\r\n          inherit\r\n          class={nh.be('body')}\r\n          items={visibleOptions.value}\r\n          item-size={props.optionHeight}\r\n          item-fixed\r\n          use-y-bar\r\n          id-key={'value'}\r\n          items-attrs={{ role: 'listbox', ariaLabel: props.type }}\r\n          onResize={computePageSize}\r\n        >\r\n          {{\r\n            default: ({ item, index }: { item: TransferOptionState, index: number }) =>\r\n              renderOption({ option: item, index }),\r\n            empty: () => <div class={nh.be('empty')}>{props.emptyText || props.locale.empty}</div>,\r\n          }}\r\n        </VirtualList>\r\n      )\r\n    }\r\n\r\n    function renderFooter() {\r\n      if (!props.paged && !slots.footer) return null\r\n\r\n      return (\r\n        <div ref={footer} class={nh.be('footer')}>\r\n          {renderSlot(slots, 'footer', slotParams, () => [\r\n            <div class={nh.be('pagination')}>\r\n              <Icon\r\n                {...(isRtl.value ? icons.value.angleRight : icons.value.angleLeft)}\r\n                class={[\r\n                  nh.be('page-plus'),\r\n                  currentPage.value <= 1 && nh.bem('page-plus', 'disabled'),\r\n                ]}\r\n                onClick={() => handlePageChange(currentPage.value - 1)}\r\n              ></Icon>\r\n              <NumberInput\r\n                inherit\r\n                value={currentPage.value}\r\n                class={nh.be('page-input')}\r\n                size={'small'}\r\n                min={1}\r\n                max={totalPages.value}\r\n                onChange={handlePageChange}\r\n              ></NumberInput>\r\n              <span style={'margin: 0 4px'}>{'/'}</span>\r\n              <span>{totalPages.value}</span>\r\n              <Icon\r\n                {...(isRtl.value ? icons.value.angleLeft : icons.value.angleRight)}\r\n                class={[\r\n                  nh.be('page-minus'),\r\n                  currentPage.value >= totalPages.value && nh.bem('page-minus', 'disabled'),\r\n                ]}\r\n                onClick={() => handlePageChange(currentPage.value + 1)}\r\n              ></Icon>\r\n            </div>,\r\n          ])}\r\n        </div>\r\n      )\r\n    }\r\n\r\n    return () => (\r\n      <div ref={wrapper} class={className.value} tabindex={0} onBlur={handleBlur}>\r\n        {renderHeader()}\r\n        {renderFilter()}\r\n        {renderBody()}\r\n        {renderFooter()}\r\n      </div>\r\n    )\r\n  },\r\n})\r\n"],"names":["defineComponent","name","props","type","String","default","state","stateProp","selected","Set","paged","Boolean","filter","Function","disabled","title","options","Array","emptyText","optionHeight","Number","deepState","loading","loadingIcon","Object","loadingLock","loadingEffect","locale","emits","setup","slots","emit","nh","useNameHelper","icons","useIcons","isRtl","useRtl","currentSelected","ref","pageSize","currentPage","currentMark","currentHitting","currentFilter","searching","header","body","footer","search","input","list","bodyRealHeight","lastSelected","keyUsed","target","wrapper","modifier","useModifier","passive","onKeyDown","event","decide","up","down","value","findIndex","option","Math","round","scrollOffset","boundRange","findEnabledIndex","currentOptions","length","ensureOptionInView","left","right","ctrlKey","handlePageChange","space","has","emitSelectedChange","enter","stopPropagation","focus","beforeMatchAny","preventDefault","afterMatchAny","resetAll","className","computed","be","bem","visibleOptions","filterValue","optionSize","pagedOptions","slice","totalPages","ceil","watch","partial","allSelected","watchEffect","hasSelected","hasUnselected","i","len","size","computePageSize","requestAnimationFrame","bodyEl","style","getComputedStyle","paddingTop","parseInt","paddingBottom","innerHeight","offsetHeight","floor","toggleSelect","shift","handleRangeSelect","delete","add","start","end","startIndex","endIndex","method","toggleSelectAll","handleReverse","prevSelected","handleBlur","page","queryEnabledIndex","index","step","abs","sign","direction","scrollTo","slotParams","reactive","toRef","from","renderOption","handleCheck","_createVNode","undefined","onClick","renderSlot","Checkbox","label","renderHeader","_Fragment","reverse","Icon","_mergeProps","retweet","scale","CollapseTransition","effect","icon","renderFilter","stop","e","Input","$event","onFocus","onBlur","suffix","renderBody","ResizeObserver","map","empty","VirtualList","role","ariaLabel","item","renderFooter","angleRight","angleLeft","NumberInput"],"mappings":"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"}