@koi-design/uxd-ui 14.0.14 → 14.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/components/Select/RefSelect.mjs +45 -31
- package/es/components/Select/RefSelect.mjs.map +1 -1
- package/es/components/Table/BaseTable.mjs +1 -2
- package/es/components/Table/BaseTable.mjs.map +1 -1
- package/lib/components/Select/RefSelect.js +44 -30
- package/lib/components/Select/RefSelect.js.map +1 -1
- package/lib/components/Table/BaseTable.js +1 -2
- package/lib/components/Table/BaseTable.js.map +1 -1
- package/package.json +1 -1
- package/styles/components/modal/index.css +1 -1
- package/styles/components/modal/modal.less +4 -0
- package/styles/index.css +1 -1
- package/uxd-ui.css +1 -1
- package/uxd-ui.esm.min.mjs +6 -6
- package/uxd-ui.esm.mjs +47 -34
- package/uxd-ui.umd.js +46 -33
- package/uxd-ui.umd.min.js +4 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent, inject, shallowRef, ref, computed, watch, onMounted, onUpdated, provide, resolveComponent, openBlock, createBlock, withCtx,
|
|
1
|
+
import { defineComponent, inject, shallowRef, ref, computed, watch, onMounted, onUpdated, provide, resolveComponent, openBlock, createBlock, withCtx, renderSlot, normalizeProps, guardReactiveProps, createVNode, createElementVNode, mergeProps, createElementBlock, normalizeClass, toDisplayString, Fragment, createCommentVNode, resolveDynamicComponent, createTextVNode, withModifiers } from 'vue';
|
|
2
2
|
import '../Popup/index.mjs';
|
|
3
3
|
import { UIcon } from '../Icon/index.mjs';
|
|
4
4
|
import { UCheckbox } from '../Checkbox/index.mjs';
|
|
@@ -164,6 +164,7 @@ const _sfc_main = defineComponent({
|
|
|
164
164
|
emitChange(rowValue);
|
|
165
165
|
}
|
|
166
166
|
} else if (value !== stateValue.value && !Array.isArray(value)) {
|
|
167
|
+
console.log("onSelect", value);
|
|
167
168
|
emitChange([value]);
|
|
168
169
|
}
|
|
169
170
|
const { autoClearSearchValue = true } = props;
|
|
@@ -366,40 +367,53 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
366
367
|
"click-outside": _ctx.onClickOutside
|
|
367
368
|
}, {
|
|
368
369
|
popup: withCtx(() => [
|
|
369
|
-
|
|
370
|
-
id: _ctx.ariaId,
|
|
371
|
-
ref: "listRef",
|
|
372
|
-
"prefix-cls": _ctx.prefixCls,
|
|
370
|
+
renderSlot(_ctx.$slots, "dropdown", normalizeProps(guardReactiveProps({
|
|
373
371
|
open: _ctx.stateOpen,
|
|
374
|
-
|
|
372
|
+
options: _ctx.displayOptions,
|
|
375
373
|
multiple: _ctx.multiple,
|
|
376
|
-
|
|
377
|
-
options: _ctx.loading ? [] : _ctx.displayOptions,
|
|
374
|
+
multipleLimit: _ctx.multipleLimit,
|
|
378
375
|
values: _ctx.innerValue,
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
height: _ctx.dropdownHeight,
|
|
382
|
-
"item-height": _ctx.dropdownItemHeight,
|
|
383
|
-
size: _ctx.size,
|
|
384
|
-
"select-all": _ctx.selectAll,
|
|
385
|
-
direction: _ctx.computedDirection,
|
|
386
|
-
"title-key": _ctx.titleKey,
|
|
376
|
+
searchValue: _ctx.searchValue,
|
|
377
|
+
loading: _ctx.loading,
|
|
387
378
|
onSelect: _ctx.onOptionSelect,
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
]
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
379
|
+
onCreate: _ctx.onCreateSubmit,
|
|
380
|
+
onClose: () => _ctx.onToggleOpen(false)
|
|
381
|
+
})), () => [
|
|
382
|
+
createVNode(_component_DropdownMenu, {
|
|
383
|
+
id: _ctx.ariaId,
|
|
384
|
+
ref: "listRef",
|
|
385
|
+
"prefix-cls": _ctx.prefixCls,
|
|
386
|
+
open: _ctx.stateOpen,
|
|
387
|
+
width: _ctx.dropdownMenuWidth,
|
|
388
|
+
multiple: _ctx.multiple,
|
|
389
|
+
"multiple-limit": _ctx.multipleLimit,
|
|
390
|
+
options: _ctx.loading ? [] : _ctx.displayOptions,
|
|
391
|
+
values: _ctx.innerValue,
|
|
392
|
+
"search-value": _ctx.searchValue,
|
|
393
|
+
"default-active-first": _ctx.defaultActiveFirst,
|
|
394
|
+
height: _ctx.dropdownHeight,
|
|
395
|
+
"item-height": _ctx.dropdownItemHeight,
|
|
396
|
+
size: _ctx.size,
|
|
397
|
+
"select-all": _ctx.selectAll,
|
|
398
|
+
direction: _ctx.computedDirection,
|
|
399
|
+
"title-key": _ctx.titleKey,
|
|
400
|
+
onSelect: _ctx.onOptionSelect,
|
|
401
|
+
onClose: _cache[4] || (_cache[4] = ($event) => _ctx.onToggleOpen(false)),
|
|
402
|
+
onScrollAtTop: _ctx.onScrollAtTop,
|
|
403
|
+
onScrollAtBottom: _ctx.onScrollAtBottom,
|
|
404
|
+
onCreateSubmit: _ctx.onCreateSubmit
|
|
405
|
+
}, {
|
|
406
|
+
empty: withCtx(() => [
|
|
407
|
+
renderSlot(_ctx.$slots, "notFound", {}, () => [
|
|
408
|
+
createVNode(_component_RenderEmpty, {
|
|
409
|
+
size: "small",
|
|
410
|
+
text: _ctx.loading ? _ctx.loadingTextLocale : _ctx.notFoundText
|
|
411
|
+
}, null, 8, ["text"])
|
|
412
|
+
])
|
|
413
|
+
]),
|
|
414
|
+
_: 3
|
|
415
|
+
}, 8, ["id", "prefix-cls", "open", "width", "multiple", "multiple-limit", "options", "values", "search-value", "default-active-first", "height", "item-height", "size", "select-all", "direction", "title-key", "onSelect", "onScrollAtTop", "onScrollAtBottom", "onCreateSubmit"])
|
|
416
|
+
])
|
|
403
417
|
]),
|
|
404
418
|
default: withCtx(() => [
|
|
405
419
|
createElementVNode("div", mergeProps({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefSelect.mjs","sources":["../../../../src/components/Select/RefSelect.vue"],"sourcesContent":["<template>\n <Popup\n :prefix-cls=\"`${prefixCls}-dropdown`\"\n :placement=\"computedPlacement\"\n :visible=\"popupOpen\"\n :popup-class=\"`${dropdownMenuClass || ''} ${isEmpty ? `${prefixCls}-dropdown-empty` : ''} ${\n direction === 'rtl' ? `${prefixCls}-dropdown-rtl` : ''\n }`\"\n :popup-style=\"popupStyle\"\n transition-name=\"slide-up\"\n :click-outside=\"onClickOutside\"\n >\n <div\n ref=\"containerRef\"\n :class=\"[\n prefixCls,\n {\n [attrClass]: attrClass,\n [`${prefixCls}-${size}`]: size,\n [`${prefixCls}-variant-${variant}`]: true,\n [`${prefixCls}-single`]: !multiple,\n [`${prefixCls}-multiple`]: multiple,\n [`${prefixCls}-open`]: stateOpen,\n [`${prefixCls}-filterable`]: filterable,\n [`${prefixCls}-focused`]: stateFocused,\n [`${prefixCls}-disabled`]: disabled,\n [`${prefixCls}-clearable`]: !!clearable,\n [`${prefixCls}-with-clear`]: showClear,\n [`${prefixCls}-show-arrow`]: showArrow,\n [`${prefixCls}-loading`]: !!loading,\n [`${prefixCls}-show-prefix`]: !!prefixIcon,\n [`${prefixCls}-arrow-no-rotate`]: !arrowRotate,\n [`${prefixCls}-rtl`]: computedDirection === 'rtl'\n }\n ]\"\n v-bind=\"$attrs\"\n :style=\"attrStyle\"\n :tabindex=\"disabled ? -1 : 0\"\n @mousedown=\"onContainerMouseDown\"\n @keydown=\"onContainerKeydown\"\n >\n <span\n v-if=\"!!label\"\n :class=\"{\n [`${prefixCls}-label`]: true,\n [`${prefixCls}-label-colon`]: labelColon,\n [`${prefixCls}-label-required`]: required\n }\"\n >\n {{ label }}\n </span>\n <!-- prefix-Icon -->\n <span v-else-if=\"!!prefixIcon\" key=\"prefix\" :class=\"`${prefixCls}-prefix`\">\n <UIcon>\n <component :is=\"prefixIcon\" />\n </UIcon>\n </span>\n <Selection\n ref=\"selectionRef\"\n :disabled=\"disabled\"\n :multiple=\"multiple\"\n :open=\"stateOpen\"\n :values=\"displayValues\"\n :prefix-cls=\"prefixCls\"\n :filterable=\"filterable\"\n :search-value=\"searchValue\"\n :placeholder=\"loading ? loadingTextLocale : placeholder\"\n :max-tag-count=\"maxTagCount\"\n :max-tag-text-length=\"maxTagTextLength\"\n :max-tag-placeholder=\"maxTagPlaceholder\"\n :popover-props=\"popoverProps\"\n :max-tag-tooltip=\"maxTagTooltip\"\n :max-tag-tooltip-width=\"maxTagTooltipWidth\"\n :is-show-tag-tooltip=\"isShowTagTooltip\"\n :tag-render=\"tagRender\"\n :tag-transition-name=\"tagTransitionName\"\n :remove-icon=\"removeIcon\"\n :allow-create=\"allowCreate\"\n :title-key=\"titleKey\"\n :allow-empty-value=\"allowEmptyValue\"\n :token-with-enter=\"tokenWithEnter\"\n :trigger-search=\"triggerSearch\"\n @toggle-open=\"onToggleOpen\"\n @select=\"onSelectionSelect\"\n @create-submit=\"onCreateSubmit\"\n >\n <template #placeholder>\n <slot name=\"placeholder\">\n {{ loading ? loadingTextLocale : placeholder }}\n </slot>\n </template>\n </Selection>\n\n <!-- arrow-Icon -->\n <span v-if=\"showArrow\" key=\"arrow\" :class=\"`${prefixCls}-arrow`\">\n <UIcon :spin=\"loading\">\n <component :is=\"realSuffixIcon\" />\n </UIcon>\n </span>\n <!-- clearIcon -->\n <span v-if=\"showClear\" key=\"clear\" :class=\"`${prefixCls}-clear`\" @mousedown.prevent @click=\"onClearSelection\">\n <UIcon>\n <component :is=\"clearIcon\" v-if=\"clearIcon\" />\n <CircleX v-else />\n </UIcon>\n </span>\n </div>\n <template #popup>\n <DropdownMenu\n :id=\"ariaId\"\n ref=\"listRef\"\n :prefix-cls=\"prefixCls\"\n :open=\"stateOpen\"\n :width=\"dropdownMenuWidth\"\n :multiple=\"multiple\"\n :multiple-limit=\"multipleLimit\"\n :options=\"loading ? [] : displayOptions\"\n :values=\"innerValue\"\n :search-value=\"searchValue\"\n :default-active-first=\"defaultActiveFirst\"\n :height=\"dropdownHeight\"\n :item-height=\"dropdownItemHeight\"\n :size=\"size\"\n :select-all=\"selectAll\"\n :direction=\"computedDirection\"\n :title-key=\"titleKey\"\n @select=\"onOptionSelect\"\n @close=\"onToggleOpen(false)\"\n @scroll-at-top=\"onScrollAtTop\"\n @scroll-at-bottom=\"onScrollAtBottom\"\n @create-submit=\"onCreateSubmit\"\n >\n <template #empty>\n <slot name=\"notFound\">\n <RenderEmpty size=\"small\" :text=\"loading ? loadingTextLocale : notFoundText\" />\n </slot>\n </template>\n </DropdownMenu>\n </template>\n </Popup>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch, computed, onMounted, onUpdated, provide, inject, shallowRef } from 'vue';\nimport type { CSSProperties, PropType } from 'vue';\nimport Popup from '@uxd-ui/components/Popup';\nimport UIcon from '@uxd-ui/components/Icon';\nimport UCheckbox from '@uxd-ui/components/Checkbox';\nimport { CircleX, LoaderCircle, Search, ChevronDown } from 'lucide-vue-next';\nimport { removeLastEnabledValue, getSeparatedContent } from './utils';\nimport KeyCode from '../../utils/KeyCode';\nimport { generateUUID } from '../../utils/tools';\nimport DropdownMenu from './DropdownMenu.vue';\nimport Selection from './Selection';\nimport RenderEmpty from '../base/RenderEmpty.vue';\nimport useGlobalConfig from '../base/hooks/useGlobalConfig';\nimport useDelaySet from '../base/hooks/useDelaySet';\n// import useLock from '../base/hooks/useLock';\nimport useArrayValue, { toArray } from './hooks/useArrayValue';\nimport useOptions from './hooks/useOptions';\nimport useContainerWidth from '../base/hooks/useContainerWidth';\nimport { FormItemKey } from '../Form';\nimport { selectProps, selectEmits } from './Select.type';\nimport type { SingleValueType } from './Select.type';\nimport type { FormItemContext } from '../Form/Form.type';\n\nconst localIsValid = (val: any) => {\n return val !== null && val !== undefined;\n};\n\nexport default defineComponent({\n name: 'RefSelect',\n components: {\n Popup,\n Selection,\n DropdownMenu,\n RenderEmpty,\n UIcon,\n UCheckbox,\n CircleX,\n LoaderCircle,\n Search,\n ChevronDown\n },\n inheritAttrs: false,\n props: {\n ...selectProps,\n children: {\n type: Array as PropType<any[]>,\n default: undefined\n }\n },\n emits: selectEmits,\n setup(props, { emit, attrs }) {\n const { prefixCls, config: globalConfig } = useGlobalConfig('select');\n const ariaId = `select_${generateUUID()}`;\n const { onFieldChange } = inject<FormItemContext>(FormItemKey, {} as FormItemContext);\n\n // =================== ref ==================\n // #region\n const containerRef = shallowRef<HTMLElement | null>(null);\n const selectionRef = ref<any | null>(null);\n const listRef = ref<any | null>(null);\n // #endregion\n\n // =================== value & data ==================\n // #region\n\n const stateValue = ref(props.modelValue);\n const { toInnerValue, toOuterValue } = useArrayValue();\n const innerValue = computed<(string | number)[]>(() => toInnerValue(stateValue.value, props.allowEmptyValue ? localIsValid : undefined));\n // const innerValue = computed<(string | number)[]>(() => toInnerValue(stateValue.value));\n const searchValue = ref('');\n const setSearchValue = (val: string) => {\n searchValue.value = val;\n };\n // const activeValue = ref(null);\n // const setActiveValue = val => {\n // activeValue.value = val;\n // };\n\n const { displayOptions, getOptionsByValue, getOptionByLabel } = useOptions(props, searchValue, innerValue);\n\n watch(\n () => props.modelValue,\n (val) => {\n stateValue.value = val;\n }\n );\n\n const emitChange = (val: (string | number)[]) => {\n const _multiple = props.multiple === true;\n const value = toOuterValue(val, _multiple);\n\n if (props.modelValue === undefined) {\n stateValue.value = value;\n }\n emit('update:modelValue', value);\n const options = getOptionsByValue(val);\n emit('change', value, _multiple ? options : options[0]);\n if (onFieldChange && !props.disabledTriggerForm) {\n onFieldChange(value);\n }\n };\n // #endregion\n\n // =================== open ==================\n // #region\n const stateOpen = ref<boolean>(props.open || false);\n watch(\n () => props.open,\n (val) => {\n stateOpen.value = val || false;\n }\n );\n const noPopupContent = computed(() => !props.showEmpty && !displayOptions.value.length);\n const popupOpen = computed(() => (noPopupContent.value ? false : stateOpen.value));\n\n const computedDirection = computed(() => {\n return props.direction || globalConfig.direction || 'ltr';\n });\n const computedPlacement = computed(() => {\n if (props.placement) {\n return props.placement;\n }\n return computedDirection.value === 'rtl' ? 'bottom-end' : 'bottom-start';\n });\n\n const setOpenState = (open?: boolean) => {\n const _open = open !== undefined ? open : !stateOpen.value;\n if (stateOpen.value !== _open && !props.disabled) {\n if (props.open === undefined) {\n stateOpen.value = _open;\n }\n emit('dropdown-visible-change', _open);\n }\n };\n\n watch(\n () => props.disabled,\n () => {\n if (stateOpen.value && !!props.disabled) {\n setOpenState(false);\n }\n }\n );\n // #endregion\n\n // =================== selection ==================\n // #region\n\n const getDisplayValus = () => {\n const options = getOptionsByValue(innerValue.value);\n return options.map((x) => {\n let displayLabel;\n const displayProp = props.displayProp || 'slot';\n if (displayProp === 'slot') {\n displayLabel = x.render ? x.render() : x.label;\n } else {\n displayLabel = x[displayProp] || x.label;\n }\n return {\n ...x,\n displayLabel\n };\n });\n };\n\n const displayValues = computed(() => {\n return getDisplayValus();\n });\n\n const onSelect = (value: string | number | string[] | number[], { selected }: { selected: boolean }) => {\n if (props.disabled) {\n return;\n }\n\n if (props.multiple) {\n const _rawValue = new Set(innerValue.value);\n const values = toArray(value);\n if (selected) {\n values.forEach((v: string | number) => {\n _rawValue.add(v);\n });\n } else {\n values.forEach((v: string | number) => {\n _rawValue.delete(v);\n });\n }\n const rowValue = Array.from(_rawValue);\n if (props.sortByOption && props.options) {\n const sortValue: SingleValueType[] = [];\n props.options.forEach((o) => {\n if (rowValue.includes(o.value)) {\n sortValue.push(o.value);\n }\n });\n emitChange(sortValue);\n } else {\n emitChange(rowValue);\n }\n } else if (value !== stateValue.value && !Array.isArray(value)) {\n emitChange([value]);\n }\n\n const { autoClearSearchValue = true } = props;\n if (!props.multiple) {\n setOpenState(false);\n }\n if (!props.multiple || autoClearSearchValue) {\n setSearchValue('');\n }\n };\n\n // #endregion\n\n // =================== popup ==================\n // #region\n const { containerWidth, getContainerWidth } = useContainerWidth(containerRef);\n onMounted(() => {\n getContainerWidth();\n });\n\n onUpdated(() => {\n getContainerWidth();\n });\n\n const popupStyle = computed(() => {\n const cssStyle: CSSProperties = {};\n if (typeof props.dropdownMenuWidth === 'number') {\n cssStyle.width = `${props.dropdownMenuWidth}px`;\n cssStyle.minWidth = `${props.dropdownMenuWidth}px`;\n } else {\n cssStyle.width = `${containerWidth.value}px`;\n cssStyle.minWidth = `${containerWidth.value}px`;\n }\n return {\n ...cssStyle,\n ...props.dropdownMenuStyle\n } as CSSProperties;\n });\n // #endregion\n\n // =================== search ==================\n // #region\n\n const tokenWithEnter = computed(() => {\n return (props.tokenSeparators || []).some((token) => token === '\\n' || token === '\\r\\n');\n });\n\n const triggerSearch = (searchText: string, isCompositing: boolean) => {\n let ret = true;\n let _searchValue = searchText;\n const preSearchValue = searchValue.value;\n // setActiveValue(null);\n // handle paste auto separate, only use in multiple and tokenSeparators is set\n if (props.multiple && props.tokenSeparators) {\n const patchLabels = isCompositing ? null : getSeparatedContent(searchText, props.tokenSeparators);\n\n if (patchLabels) {\n const patchRawValues: SingleValueType[] = [];\n const restValues: string[] = [];\n patchLabels.forEach((label) => {\n const option = getOptionByLabel(label);\n if (option) {\n patchRawValues.push(option.value);\n } else {\n restValues.push(label);\n }\n });\n const newValues = [...innerValue.value, ...patchRawValues, ...(props.allowCreate ? restValues : [])];\n emitChange(newValues);\n setOpenState(false);\n ret = false;\n _searchValue = '';\n }\n }\n\n setSearchValue(_searchValue);\n if (preSearchValue !== _searchValue) {\n emit('search', _searchValue);\n }\n return ret;\n };\n\n watch(\n stateOpen,\n () => {\n if (!stateOpen.value && searchValue.value) {\n triggerSearch('', false);\n }\n },\n { immediate: true }\n );\n\n // #endregion\n\n // =================== focus/ blur ==================\n // #region\n const [stateFocused, setStateFocused] = useDelaySet();\n const _immediateFocused = ref(false);\n const onContainerFocus = (args: any) => {\n setStateFocused(true);\n if (!props.disabled && !stateFocused.value) {\n emit('focus', args);\n }\n _immediateFocused.value = true;\n };\n const onContainerBlur = (args: any) => {\n setStateFocused(false, () => {\n _immediateFocused.value = false;\n setOpenState(false);\n });\n // if (props.disabled) {\n // return;\n // }\n // if (searchValue.value && props.multiple) {\n // setSearchValue('');\n // }\n\n emit('blur', args);\n };\n\n provide('SelectContext', {\n focus: onContainerFocus,\n blur: onContainerBlur\n });\n\n const onContainerMouseDown = (e: any) => {\n setOpenState(!stateOpen.value);\n emit('mousedown', e);\n };\n\n // #endregion\n\n // =================== keyboard ==================\n // #region\n\n // const [getClearLock, setClearLock] = useLock();\n\n const onContainerKeydown = (e: KeyboardEvent) => {\n // const clearlock = getClearLock();\n const { which } = e;\n if (!stateOpen.value && which === KeyCode.Enter) {\n setOpenState(true);\n }\n // setClearLock(!!searchValue.value);\n\n if (\n which === KeyCode.BACKSPACE &&\n // !clearlock &&\n props.multiple &&\n !searchValue.value &&\n innerValue.value.length > 0\n ) {\n const removeInfo = removeLastEnabledValue(displayValues.value, innerValue.value);\n\n if (removeInfo.removedValue !== null) {\n emitChange(removeInfo.values);\n }\n }\n\n if (stateOpen.value && listRef.value) {\n (listRef.value as any).onKeydown(e);\n }\n emit('keydown', e);\n };\n\n // #endregion\n\n // =================== other ==================\n // #region\n const showClear = computed(() => {\n return props.clearable && !props.disabled && (innerValue.value.length || searchValue.value);\n });\n\n const isEmpty = computed(() => {\n return displayOptions.value.length === 0;\n });\n\n const realSuffixIcon = computed(() => {\n if (props.loading) {\n return LoaderCircle;\n }\n if (props.filterable && stateOpen.value) {\n return Search;\n }\n return props.suffixIcon || ChevronDown;\n });\n // #endregion\n\n const attrClass = computed<any>(() => attrs.class);\n const attrStyle = computed<any>(() => attrs.style);\n\n const loadingTextLocale = computed(() => {\n return props.loadingText || globalConfig.locale.select.loadingText;\n });\n\n return {\n attrClass,\n attrStyle,\n // const\n prefixCls,\n ariaId,\n // Refs\n containerRef,\n selectionRef,\n listRef,\n\n // computed\n showClear,\n isEmpty,\n realSuffixIcon,\n tokenWithEnter,\n loadingTextLocale,\n\n // datas\n popupStyle,\n searchValue,\n stateOpen,\n popupOpen,\n computedDirection,\n computedPlacement,\n innerValue,\n displayValues,\n stateFocused,\n displayOptions,\n // method\n onContainerMouseDown,\n onContainerKeydown,\n onOptionSelect: onSelect,\n onSelectionSelect: onSelect,\n onClearSelection: () => {\n emitChange([]);\n triggerSearch('', false);\n emit('clear');\n },\n triggerSearch,\n onToggleOpen: (open?: boolean) => {\n setOpenState(open);\n },\n onClickOutside: () => {\n setOpenState(false);\n },\n onCreateSubmit: (val: string) => {\n emit('create', val);\n },\n onScrollAtTop: () => {\n emit('scroll-at-top');\n },\n onScrollAtBottom: () => {\n emit('scroll-at-bottom');\n }\n };\n }\n});\n</script>\n"],"names":["_createBlock","_withCtx","_createVNode","_renderSlot","_createElementVNode","_mergeProps","_createElementBlock","_normalizeClass","_Fragment","_createCommentVNode","_resolveDynamicComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RefSelect.mjs","sources":["../../../../src/components/Select/RefSelect.vue"],"sourcesContent":["<template>\n <Popup\n :prefix-cls=\"`${prefixCls}-dropdown`\"\n :placement=\"computedPlacement\"\n :visible=\"popupOpen\"\n :popup-class=\"`${dropdownMenuClass || ''} ${isEmpty ? `${prefixCls}-dropdown-empty` : ''} ${\n direction === 'rtl' ? `${prefixCls}-dropdown-rtl` : ''\n }`\"\n :popup-style=\"popupStyle\"\n transition-name=\"slide-up\"\n :click-outside=\"onClickOutside\"\n >\n <div\n ref=\"containerRef\"\n :class=\"[\n prefixCls,\n {\n [attrClass]: attrClass,\n [`${prefixCls}-${size}`]: size,\n [`${prefixCls}-variant-${variant}`]: true,\n [`${prefixCls}-single`]: !multiple,\n [`${prefixCls}-multiple`]: multiple,\n [`${prefixCls}-open`]: stateOpen,\n [`${prefixCls}-filterable`]: filterable,\n [`${prefixCls}-focused`]: stateFocused,\n [`${prefixCls}-disabled`]: disabled,\n [`${prefixCls}-clearable`]: !!clearable,\n [`${prefixCls}-with-clear`]: showClear,\n [`${prefixCls}-show-arrow`]: showArrow,\n [`${prefixCls}-loading`]: !!loading,\n [`${prefixCls}-show-prefix`]: !!prefixIcon,\n [`${prefixCls}-arrow-no-rotate`]: !arrowRotate,\n [`${prefixCls}-rtl`]: computedDirection === 'rtl'\n }\n ]\"\n v-bind=\"$attrs\"\n :style=\"attrStyle\"\n :tabindex=\"disabled ? -1 : 0\"\n @mousedown=\"onContainerMouseDown\"\n @keydown=\"onContainerKeydown\"\n >\n <span\n v-if=\"!!label\"\n :class=\"{\n [`${prefixCls}-label`]: true,\n [`${prefixCls}-label-colon`]: labelColon,\n [`${prefixCls}-label-required`]: required\n }\"\n >\n {{ label }}\n </span>\n <!-- prefix-Icon -->\n <span v-else-if=\"!!prefixIcon\" key=\"prefix\" :class=\"`${prefixCls}-prefix`\">\n <UIcon>\n <component :is=\"prefixIcon\" />\n </UIcon>\n </span>\n <Selection\n ref=\"selectionRef\"\n :disabled=\"disabled\"\n :multiple=\"multiple\"\n :open=\"stateOpen\"\n :values=\"displayValues\"\n :prefix-cls=\"prefixCls\"\n :filterable=\"filterable\"\n :search-value=\"searchValue\"\n :placeholder=\"loading ? loadingTextLocale : placeholder\"\n :max-tag-count=\"maxTagCount\"\n :max-tag-text-length=\"maxTagTextLength\"\n :max-tag-placeholder=\"maxTagPlaceholder\"\n :popover-props=\"popoverProps\"\n :max-tag-tooltip=\"maxTagTooltip\"\n :max-tag-tooltip-width=\"maxTagTooltipWidth\"\n :is-show-tag-tooltip=\"isShowTagTooltip\"\n :tag-render=\"tagRender\"\n :tag-transition-name=\"tagTransitionName\"\n :remove-icon=\"removeIcon\"\n :allow-create=\"allowCreate\"\n :title-key=\"titleKey\"\n :allow-empty-value=\"allowEmptyValue\"\n :token-with-enter=\"tokenWithEnter\"\n :trigger-search=\"triggerSearch\"\n @toggle-open=\"onToggleOpen\"\n @select=\"onSelectionSelect\"\n @create-submit=\"onCreateSubmit\"\n >\n <template #placeholder>\n <slot name=\"placeholder\">\n {{ loading ? loadingTextLocale : placeholder }}\n </slot>\n </template>\n </Selection>\n\n <!-- arrow-Icon -->\n <span v-if=\"showArrow\" key=\"arrow\" :class=\"`${prefixCls}-arrow`\">\n <UIcon :spin=\"loading\">\n <component :is=\"realSuffixIcon\" />\n </UIcon>\n </span>\n <!-- clearIcon -->\n <span v-if=\"showClear\" key=\"clear\" :class=\"`${prefixCls}-clear`\" @mousedown.prevent @click=\"onClearSelection\">\n <UIcon>\n <component :is=\"clearIcon\" v-if=\"clearIcon\" />\n <CircleX v-else />\n </UIcon>\n </span>\n </div>\n <template #popup>\n <slot\n name=\"dropdown\"\n v-bind=\"{\n open: stateOpen,\n options: displayOptions,\n multiple,\n multipleLimit,\n values: innerValue,\n searchValue,\n loading,\n onSelect: onOptionSelect,\n onCreate: onCreateSubmit,\n onClose: () => onToggleOpen(false)\n }\"\n >\n <DropdownMenu\n :id=\"ariaId\"\n ref=\"listRef\"\n :prefix-cls=\"prefixCls\"\n :open=\"stateOpen\"\n :width=\"dropdownMenuWidth\"\n :multiple=\"multiple\"\n :multiple-limit=\"multipleLimit\"\n :options=\"loading ? [] : displayOptions\"\n :values=\"innerValue\"\n :search-value=\"searchValue\"\n :default-active-first=\"defaultActiveFirst\"\n :height=\"dropdownHeight\"\n :item-height=\"dropdownItemHeight\"\n :size=\"size\"\n :select-all=\"selectAll\"\n :direction=\"computedDirection\"\n :title-key=\"titleKey\"\n @select=\"onOptionSelect\"\n @close=\"onToggleOpen(false)\"\n @scroll-at-top=\"onScrollAtTop\"\n @scroll-at-bottom=\"onScrollAtBottom\"\n @create-submit=\"onCreateSubmit\"\n >\n <template #empty>\n <slot name=\"notFound\">\n <RenderEmpty size=\"small\" :text=\"loading ? loadingTextLocale : notFoundText\" />\n </slot>\n </template>\n </DropdownMenu>\n </slot>\n </template>\n </Popup>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch, computed, onMounted, onUpdated, provide, inject, shallowRef } from 'vue';\nimport type { CSSProperties, PropType } from 'vue';\nimport Popup from '@uxd-ui/components/Popup';\nimport UIcon from '@uxd-ui/components/Icon';\nimport UCheckbox from '@uxd-ui/components/Checkbox';\nimport { CircleX, LoaderCircle, Search, ChevronDown } from 'lucide-vue-next';\nimport { removeLastEnabledValue, getSeparatedContent } from './utils';\nimport KeyCode from '../../utils/KeyCode';\nimport { generateUUID } from '../../utils/tools';\nimport DropdownMenu from './DropdownMenu.vue';\nimport Selection from './Selection';\nimport RenderEmpty from '../base/RenderEmpty.vue';\nimport useGlobalConfig from '../base/hooks/useGlobalConfig';\nimport useDelaySet from '../base/hooks/useDelaySet';\n// import useLock from '../base/hooks/useLock';\nimport useArrayValue, { toArray } from './hooks/useArrayValue';\nimport useOptions from './hooks/useOptions';\nimport useContainerWidth from '../base/hooks/useContainerWidth';\nimport { FormItemKey } from '../Form';\nimport { selectProps, selectEmits } from './Select.type';\nimport type { SingleValueType } from './Select.type';\nimport type { FormItemContext } from '../Form/Form.type';\n\nconst localIsValid = (val: any) => {\n return val !== null && val !== undefined;\n};\n\nexport default defineComponent({\n name: 'RefSelect',\n components: {\n Popup,\n Selection,\n DropdownMenu,\n RenderEmpty,\n UIcon,\n UCheckbox,\n CircleX,\n LoaderCircle,\n Search,\n ChevronDown\n },\n inheritAttrs: false,\n props: {\n ...selectProps,\n children: {\n type: Array as PropType<any[]>,\n default: undefined\n }\n },\n emits: selectEmits,\n setup(props, { emit, attrs }) {\n const { prefixCls, config: globalConfig } = useGlobalConfig('select');\n const ariaId = `select_${generateUUID()}`;\n const { onFieldChange } = inject<FormItemContext>(FormItemKey, {} as FormItemContext);\n\n // =================== ref ==================\n // #region\n const containerRef = shallowRef<HTMLElement | null>(null);\n const selectionRef = ref<any | null>(null);\n const listRef = ref<any | null>(null);\n // #endregion\n\n // =================== value & data ==================\n // #region\n\n const stateValue = ref(props.modelValue);\n const { toInnerValue, toOuterValue } = useArrayValue();\n const innerValue = computed<(string | number)[]>(() => toInnerValue(stateValue.value, props.allowEmptyValue ? localIsValid : undefined));\n // const innerValue = computed<(string | number)[]>(() => toInnerValue(stateValue.value));\n const searchValue = ref('');\n const setSearchValue = (val: string) => {\n searchValue.value = val;\n };\n // const activeValue = ref(null);\n // const setActiveValue = val => {\n // activeValue.value = val;\n // };\n\n const { displayOptions, getOptionsByValue, getOptionByLabel } = useOptions(props, searchValue, innerValue);\n\n watch(\n () => props.modelValue,\n (val) => {\n stateValue.value = val;\n }\n );\n\n const emitChange = (val: (string | number)[]) => {\n const _multiple = props.multiple === true;\n const value = toOuterValue(val, _multiple);\n\n if (props.modelValue === undefined) {\n stateValue.value = value;\n }\n emit('update:modelValue', value);\n const options = getOptionsByValue(val);\n emit('change', value, _multiple ? options : options[0]);\n if (onFieldChange && !props.disabledTriggerForm) {\n onFieldChange(value);\n }\n };\n // #endregion\n\n // =================== open ==================\n // #region\n const stateOpen = ref<boolean>(props.open || false);\n watch(\n () => props.open,\n (val) => {\n stateOpen.value = val || false;\n }\n );\n const noPopupContent = computed(() => !props.showEmpty && !displayOptions.value.length);\n const popupOpen = computed(() => (noPopupContent.value ? false : stateOpen.value));\n\n const computedDirection = computed(() => {\n return props.direction || globalConfig.direction || 'ltr';\n });\n const computedPlacement = computed(() => {\n if (props.placement) {\n return props.placement;\n }\n return computedDirection.value === 'rtl' ? 'bottom-end' : 'bottom-start';\n });\n\n const setOpenState = (open?: boolean) => {\n const _open = open !== undefined ? open : !stateOpen.value;\n if (stateOpen.value !== _open && !props.disabled) {\n if (props.open === undefined) {\n stateOpen.value = _open;\n }\n emit('dropdown-visible-change', _open);\n }\n };\n\n watch(\n () => props.disabled,\n () => {\n if (stateOpen.value && !!props.disabled) {\n setOpenState(false);\n }\n }\n );\n // #endregion\n\n // =================== selection ==================\n // #region\n\n const getDisplayValus = () => {\n const options = getOptionsByValue(innerValue.value);\n return options.map((x) => {\n let displayLabel;\n const displayProp = props.displayProp || 'slot';\n if (displayProp === 'slot') {\n displayLabel = x.render ? x.render() : x.label;\n } else {\n displayLabel = x[displayProp] || x.label;\n }\n return {\n ...x,\n displayLabel\n };\n });\n };\n\n const displayValues = computed(() => {\n return getDisplayValus();\n });\n\n const onSelect = (value: string | number | string[] | number[], { selected }: { selected: boolean }) => {\n if (props.disabled) {\n return;\n }\n\n if (props.multiple) {\n const _rawValue = new Set(innerValue.value);\n const values = toArray(value);\n if (selected) {\n values.forEach((v: string | number) => {\n _rawValue.add(v);\n });\n } else {\n values.forEach((v: string | number) => {\n _rawValue.delete(v);\n });\n }\n const rowValue = Array.from(_rawValue);\n if (props.sortByOption && props.options) {\n const sortValue: SingleValueType[] = [];\n props.options.forEach((o) => {\n if (rowValue.includes(o.value)) {\n sortValue.push(o.value);\n }\n });\n emitChange(sortValue);\n } else {\n emitChange(rowValue);\n }\n } else if (value !== stateValue.value && !Array.isArray(value)) {\n console.log('onSelect', value);\n emitChange([value]);\n }\n\n const { autoClearSearchValue = true } = props;\n if (!props.multiple) {\n setOpenState(false);\n }\n if (!props.multiple || autoClearSearchValue) {\n setSearchValue('');\n }\n };\n\n // #endregion\n\n // =================== popup ==================\n // #region\n const { containerWidth, getContainerWidth } = useContainerWidth(containerRef);\n onMounted(() => {\n getContainerWidth();\n });\n\n onUpdated(() => {\n getContainerWidth();\n });\n\n const popupStyle = computed(() => {\n const cssStyle: CSSProperties = {};\n if (typeof props.dropdownMenuWidth === 'number') {\n cssStyle.width = `${props.dropdownMenuWidth}px`;\n cssStyle.minWidth = `${props.dropdownMenuWidth}px`;\n } else {\n cssStyle.width = `${containerWidth.value}px`;\n cssStyle.minWidth = `${containerWidth.value}px`;\n }\n return {\n ...cssStyle,\n ...props.dropdownMenuStyle\n } as CSSProperties;\n });\n // #endregion\n\n // =================== search ==================\n // #region\n\n const tokenWithEnter = computed(() => {\n return (props.tokenSeparators || []).some((token) => token === '\\n' || token === '\\r\\n');\n });\n\n const triggerSearch = (searchText: string, isCompositing: boolean) => {\n let ret = true;\n let _searchValue = searchText;\n const preSearchValue = searchValue.value;\n // setActiveValue(null);\n // handle paste auto separate, only use in multiple and tokenSeparators is set\n if (props.multiple && props.tokenSeparators) {\n const patchLabels = isCompositing ? null : getSeparatedContent(searchText, props.tokenSeparators);\n\n if (patchLabels) {\n const patchRawValues: SingleValueType[] = [];\n const restValues: string[] = [];\n patchLabels.forEach((label) => {\n const option = getOptionByLabel(label);\n if (option) {\n patchRawValues.push(option.value);\n } else {\n restValues.push(label);\n }\n });\n const newValues = [...innerValue.value, ...patchRawValues, ...(props.allowCreate ? restValues : [])];\n emitChange(newValues);\n setOpenState(false);\n ret = false;\n _searchValue = '';\n }\n }\n\n setSearchValue(_searchValue);\n if (preSearchValue !== _searchValue) {\n emit('search', _searchValue);\n }\n return ret;\n };\n\n watch(\n stateOpen,\n () => {\n if (!stateOpen.value && searchValue.value) {\n triggerSearch('', false);\n }\n },\n { immediate: true }\n );\n\n // #endregion\n\n // =================== focus/ blur ==================\n // #region\n const [stateFocused, setStateFocused] = useDelaySet();\n const _immediateFocused = ref(false);\n const onContainerFocus = (args: any) => {\n setStateFocused(true);\n if (!props.disabled && !stateFocused.value) {\n emit('focus', args);\n }\n _immediateFocused.value = true;\n };\n const onContainerBlur = (args: any) => {\n setStateFocused(false, () => {\n _immediateFocused.value = false;\n setOpenState(false);\n });\n // if (props.disabled) {\n // return;\n // }\n // if (searchValue.value && props.multiple) {\n // setSearchValue('');\n // }\n\n emit('blur', args);\n };\n\n provide('SelectContext', {\n focus: onContainerFocus,\n blur: onContainerBlur\n });\n\n const onContainerMouseDown = (e: any) => {\n setOpenState(!stateOpen.value);\n emit('mousedown', e);\n };\n\n // #endregion\n\n // =================== keyboard ==================\n // #region\n\n // const [getClearLock, setClearLock] = useLock();\n\n const onContainerKeydown = (e: KeyboardEvent) => {\n // const clearlock = getClearLock();\n const { which } = e;\n if (!stateOpen.value && which === KeyCode.Enter) {\n setOpenState(true);\n }\n // setClearLock(!!searchValue.value);\n\n if (\n which === KeyCode.BACKSPACE &&\n // !clearlock &&\n props.multiple &&\n !searchValue.value &&\n innerValue.value.length > 0\n ) {\n const removeInfo = removeLastEnabledValue(displayValues.value, innerValue.value);\n\n if (removeInfo.removedValue !== null) {\n emitChange(removeInfo.values);\n }\n }\n\n if (stateOpen.value && listRef.value) {\n (listRef.value as any).onKeydown(e);\n }\n emit('keydown', e);\n };\n\n // #endregion\n\n // =================== other ==================\n // #region\n const showClear = computed(() => {\n return props.clearable && !props.disabled && (innerValue.value.length || searchValue.value);\n });\n\n const isEmpty = computed(() => {\n return displayOptions.value.length === 0;\n });\n\n const realSuffixIcon = computed(() => {\n if (props.loading) {\n return LoaderCircle;\n }\n if (props.filterable && stateOpen.value) {\n return Search;\n }\n return props.suffixIcon || ChevronDown;\n });\n // #endregion\n\n const attrClass = computed<any>(() => attrs.class);\n const attrStyle = computed<any>(() => attrs.style);\n\n const loadingTextLocale = computed(() => {\n return props.loadingText || globalConfig.locale.select.loadingText;\n });\n\n return {\n attrClass,\n attrStyle,\n // const\n prefixCls,\n ariaId,\n // Refs\n containerRef,\n selectionRef,\n listRef,\n\n // computed\n showClear,\n isEmpty,\n realSuffixIcon,\n tokenWithEnter,\n loadingTextLocale,\n\n // datas\n popupStyle,\n searchValue,\n stateOpen,\n popupOpen,\n computedDirection,\n computedPlacement,\n innerValue,\n displayValues,\n stateFocused,\n displayOptions,\n // method\n onContainerMouseDown,\n onContainerKeydown,\n onOptionSelect: onSelect,\n onSelectionSelect: onSelect,\n onClearSelection: () => {\n emitChange([]);\n triggerSearch('', false);\n emit('clear');\n },\n triggerSearch,\n onToggleOpen: (open?: boolean) => {\n setOpenState(open);\n },\n onClickOutside: () => {\n setOpenState(false);\n },\n onCreateSubmit: (val: string) => {\n emit('create', val);\n },\n onScrollAtTop: () => {\n emit('scroll-at-top');\n },\n onScrollAtBottom: () => {\n emit('scroll-at-bottom');\n }\n };\n }\n});\n</script>\n"],"names":["_createBlock","_withCtx","_renderSlot","_createVNode","_createElementVNode","_mergeProps","_createElementBlock","_normalizeClass","_Fragment","_createCommentVNode","_resolveDynamicComponent"],"mappings":"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"}
|
|
@@ -38,10 +38,9 @@ const _sfc_main = defineComponent({
|
|
|
38
38
|
if (width.value) {
|
|
39
39
|
style.width = typeof width.value === "number" ? `${width.value}px` : width.value;
|
|
40
40
|
} else if (props.columns.some((x) => x.fixed)) {
|
|
41
|
-
style.width = "max-content";
|
|
42
41
|
style.minWidth = "100%";
|
|
43
42
|
}
|
|
44
|
-
if (props.columns.some((x) => x.ellipsis) || props.columns.some((x) => x.resizable)) {
|
|
43
|
+
if (props.columns.some((x) => x.ellipsis) || props.columns.some((x) => x.resizable) || props.columns.some((x) => x.fixed)) {
|
|
45
44
|
style.tableLayout = "fixed";
|
|
46
45
|
} else {
|
|
47
46
|
style.tableLayout = "auto";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseTable.mjs","sources":["../../../../src/components/Table/BaseTable.vue"],"sourcesContent":["<template>\n <table ref=\"tableRef\" :style=\"tableStyle\">\n <ColGroup :columns=\"columns\" :is-head-table=\"!showBody\" />\n <TableHeader v-if=\"showHeader\" :columns=\"getColumns()\" />\n <TableBody v-if=\"showBody\" :columns=\"getColumns()\" />\n </table>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, inject, ref } from 'vue';\nimport type { PropType, CSSProperties } from 'vue';\nimport ColGroup from './tableUnits/ColGroup.vue';\nimport TableHeader from './tableUnits/TableHeader.vue';\nimport TableBody from './tableUnits/TableBody.vue';\n// import useResizeObserver from '../base/hooks/useResizeObserver';\nimport type { InnerColumn, TableContext } from './Table.type';\nimport { getWidth } from './hooks/useTableResize';\n// import { debounce } from '../../utils/tools';\n\nexport default defineComponent({\n name: 'BaseTable',\n components: {\n ColGroup,\n TableHeader,\n TableBody\n },\n props: {\n showHeader: {\n type: Boolean,\n default: false\n },\n showBody: {\n type: Boolean,\n default: false\n },\n columns: {\n type: Array as PropType<InnerColumn[]>,\n default: () => [] as InnerColumn[]\n }\n },\n setup(props) {\n const {\n prefixCls,\n props: { width },\n size: { tableWidth }\n } = inject<TableContext>('tableContext', {} as TableContext);\n const tableRef = ref<HTMLElement | null>(null);\n\n const tableStyle = computed(() => {\n const style = {} as CSSProperties;\n if (width.value) {\n style.width = typeof width.value === 'number' ? `${width.value}px` : width.value;\n } else if (props.columns.some((x) => x.fixed)) {\n style.width = 'max-content';\n style.minWidth = '100%';\n }\n if (props.columns.some((x) => x.ellipsis) || props.columns.some((x) => x.resizable)) {\n style.tableLayout = 'fixed';\n } else {\n style.tableLayout = 'auto';\n }\n\n return style;\n });\n\n const getColumns = () => {\n let left = 0;\n let right = props.columns\n .filter((x) => x.fixed === 'right')\n .reduce((sum, column) => {\n const w = getWidth(column.width ?? column.minWidth, tableWidth.value);\n return sum + w;\n }, 0);\n return props.columns.map((column) => {\n const rst = {\n ...column,\n className: column.fixed\n ? `${column.className || ''} ${prefixCls.value}-fixed-column ${prefixCls.value}-fixed-column-${column.fixed}`\n : column.className\n };\n if (column.fixed === 'left') {\n rst.left = left;\n const w = getWidth(column.width ?? column.minWidth, tableWidth.value);\n left += w;\n if (column.lastLeft) {\n rst.className = `${rst.className || ''} ${prefixCls.value}-fixed-column-${column.fixed}-last`;\n }\n }\n if (column.fixed === 'right') {\n const w = getWidth(column.width ?? column.minWidth, tableWidth.value);\n right -= w;\n rst.right = right;\n if (column.firstRight) {\n rst.className = `${rst.className || ''} ${prefixCls.value}-fixed-column-${column.fixed}-first`;\n }\n }\n\n return rst;\n });\n };\n\n // const debouncedHandleResize = debounce(syncFixedTableRowHeight, 150);\n // useResizeObserver(tableRef, debouncedHandleResize);\n\n return {\n tableRef,\n prefixCls,\n tableStyle,\n getColumns\n };\n }\n});\n</script>\n"],"names":["_createElementBlock","_normalizeStyle","_createVNode","_createBlock"],"mappings":";;;;;;;AAmBA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA;AACF,EACA,OAAO;AAAA,IACL,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM;AAAC;AAClB;AACF,EACA,MAAM,OAAO;UACL;AAAA,MACJ;AAAA,MACA,OAAO,EAAE;AAAM,MACf,MAAM,EAAE;AAAW,QACjB,OAAqB,gBAAgB,EAAkB;UACrD,WAAW,IAAwB,IAAI;UAEvC,aAAa,SAAS,MAAM;YAC1B,QAAQ;UACV,MAAM,OAAO;cACT,QAAQ,OAAO,MAAM,UAAU,WAAW,GAAG,MAAM,YAAY,MAAM;AAAA,iBAClE,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG;
|
|
1
|
+
{"version":3,"file":"BaseTable.mjs","sources":["../../../../src/components/Table/BaseTable.vue"],"sourcesContent":["<template>\n <table ref=\"tableRef\" :style=\"tableStyle\">\n <ColGroup :columns=\"columns\" :is-head-table=\"!showBody\" />\n <TableHeader v-if=\"showHeader\" :columns=\"getColumns()\" />\n <TableBody v-if=\"showBody\" :columns=\"getColumns()\" />\n </table>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, inject, ref } from 'vue';\nimport type { PropType, CSSProperties } from 'vue';\nimport ColGroup from './tableUnits/ColGroup.vue';\nimport TableHeader from './tableUnits/TableHeader.vue';\nimport TableBody from './tableUnits/TableBody.vue';\n// import useResizeObserver from '../base/hooks/useResizeObserver';\nimport type { InnerColumn, TableContext } from './Table.type';\nimport { getWidth } from './hooks/useTableResize';\n// import { debounce } from '../../utils/tools';\n\nexport default defineComponent({\n name: 'BaseTable',\n components: {\n ColGroup,\n TableHeader,\n TableBody\n },\n props: {\n showHeader: {\n type: Boolean,\n default: false\n },\n showBody: {\n type: Boolean,\n default: false\n },\n columns: {\n type: Array as PropType<InnerColumn[]>,\n default: () => [] as InnerColumn[]\n }\n },\n setup(props) {\n const {\n prefixCls,\n props: { width },\n size: { tableWidth }\n } = inject<TableContext>('tableContext', {} as TableContext);\n const tableRef = ref<HTMLElement | null>(null);\n\n const tableStyle = computed(() => {\n const style = {} as CSSProperties;\n if (width.value) {\n style.width = typeof width.value === 'number' ? `${width.value}px` : width.value;\n } else if (props.columns.some((x) => x.fixed)) {\n // style.width = 'max-content';\n style.minWidth = '100%';\n }\n if (props.columns.some((x) => x.ellipsis) || props.columns.some((x) => x.resizable) || props.columns.some((x) => x.fixed)) {\n style.tableLayout = 'fixed';\n } else {\n style.tableLayout = 'auto';\n }\n\n return style;\n });\n\n const getColumns = () => {\n let left = 0;\n let right = props.columns\n .filter((x) => x.fixed === 'right')\n .reduce((sum, column) => {\n const w = getWidth(column.width ?? column.minWidth, tableWidth.value);\n return sum + w;\n }, 0);\n return props.columns.map((column) => {\n const rst = {\n ...column,\n className: column.fixed\n ? `${column.className || ''} ${prefixCls.value}-fixed-column ${prefixCls.value}-fixed-column-${column.fixed}`\n : column.className\n };\n if (column.fixed === 'left') {\n rst.left = left;\n const w = getWidth(column.width ?? column.minWidth, tableWidth.value);\n left += w;\n if (column.lastLeft) {\n rst.className = `${rst.className || ''} ${prefixCls.value}-fixed-column-${column.fixed}-last`;\n }\n }\n if (column.fixed === 'right') {\n const w = getWidth(column.width ?? column.minWidth, tableWidth.value);\n right -= w;\n rst.right = right;\n if (column.firstRight) {\n rst.className = `${rst.className || ''} ${prefixCls.value}-fixed-column-${column.fixed}-first`;\n }\n }\n\n return rst;\n });\n };\n\n // const debouncedHandleResize = debounce(syncFixedTableRowHeight, 150);\n // useResizeObserver(tableRef, debouncedHandleResize);\n\n return {\n tableRef,\n prefixCls,\n tableStyle,\n getColumns\n };\n }\n});\n</script>\n"],"names":["_createElementBlock","_normalizeStyle","_createVNode","_createBlock"],"mappings":";;;;;;;AAmBA,MAAK,YAAa,gBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA;AACF,EACA,OAAO;AAAA,IACL,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM;AAAC;AAClB;AACF,EACA,MAAM,OAAO;UACL;AAAA,MACJ;AAAA,MACA,OAAO,EAAE;AAAM,MACf,MAAM,EAAE;AAAW,QACjB,OAAqB,gBAAgB,EAAkB;UACrD,WAAW,IAAwB,IAAI;UAEvC,aAAa,SAAS,MAAM;YAC1B,QAAQ;UACV,MAAM,OAAO;cACT,QAAQ,OAAO,MAAM,UAAU,WAAW,GAAG,MAAM,YAAY,MAAM;AAAA,iBAClE,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG;cAEvC,WAAW;AAAA;UAEf,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,KAAK,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG;cACnH,cAAc;AAAA,aACf;cACC,cAAc;AAAA;aAGf;AAAA,KACR;UAEK,aAAa,MAAM;UACnB,OAAO;UACP,QAAQ,MAAM,QACf,OAAO,CAAC,MAAM,EAAE,UAAU,OAAO,EACjC,OAAO,CAAC,KAAK,WAAW;AA5DjC;cA6DgB,IAAI,UAAS,YAAO,UAAP,YAAgB,OAAO,UAAU,WAAW,KAAK;eAC7D,MAAM;AAAA,SACZ,CAAC;aACC,MAAM,QAAQ,IAAI,CAAC,WAAW;AAhE3C;cAiEc,MAAM;AAAA,UACV,GAAG;AAAA,UACH,WAAW,OAAO,QACd,GAAG,OAAO,aAAa,MAAM,UAAU,sBAAsB,UAAU,sBAAsB,OAAO,UACpG,OAAO;AAAA;YAET,OAAO,UAAU,QAAQ;cACvB,OAAO;gBACL,IAAI,UAAS,YAAO,UAAP,YAAgB,OAAO,UAAU,WAAW,KAAK;kBAC5D;cACJ,OAAO,UAAU;gBACf,YAAY,GAAG,IAAI,aAAa,MAAM,UAAU,sBAAsB,OAAO;AAAA;AACnF;YAEE,OAAO,UAAU,SAAS;gBACtB,IAAI,UAAS,YAAO,UAAP,YAAgB,OAAO,UAAU,WAAW,KAAK;mBAC3D;cACL,QAAQ;cACR,OAAO,YAAY;gBACjB,YAAY,GAAG,IAAI,aAAa,MAAM,UAAU,sBAAsB,OAAO;AAAA;AACnF;eAGK;AAAA,OACR;AAAA;WAMI;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AACF;AAEJ,CAAC;;;;;sBA9GCA,mBAIQ;IAJD,KAAI;AAAA,IAAY,OAAKC,eAAE,eAAU;AAAA;IACtCC,YAA0D;MAA/C,SAAS;MAAU,iBAAa,CAAG;;IAC3B,gCAAnBC,YAAyD;;MAAzB,SAAS;AAAU;IAClC,8BAAjBA,YAAqD;;MAAzB,SAAS;AAAU;;;;;;;"}
|
|
@@ -168,6 +168,7 @@ const _sfc_main = vue.defineComponent({
|
|
|
168
168
|
emitChange(rowValue);
|
|
169
169
|
}
|
|
170
170
|
} else if (value !== stateValue.value && !Array.isArray(value)) {
|
|
171
|
+
console.log("onSelect", value);
|
|
171
172
|
emitChange([value]);
|
|
172
173
|
}
|
|
173
174
|
const { autoClearSearchValue = true } = props;
|
|
@@ -370,40 +371,53 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
370
371
|
"click-outside": _ctx.onClickOutside
|
|
371
372
|
}, {
|
|
372
373
|
popup: vue.withCtx(() => [
|
|
373
|
-
vue.
|
|
374
|
-
id: _ctx.ariaId,
|
|
375
|
-
ref: "listRef",
|
|
376
|
-
"prefix-cls": _ctx.prefixCls,
|
|
374
|
+
vue.renderSlot(_ctx.$slots, "dropdown", vue.normalizeProps(vue.guardReactiveProps({
|
|
377
375
|
open: _ctx.stateOpen,
|
|
378
|
-
|
|
376
|
+
options: _ctx.displayOptions,
|
|
379
377
|
multiple: _ctx.multiple,
|
|
380
|
-
|
|
381
|
-
options: _ctx.loading ? [] : _ctx.displayOptions,
|
|
378
|
+
multipleLimit: _ctx.multipleLimit,
|
|
382
379
|
values: _ctx.innerValue,
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
height: _ctx.dropdownHeight,
|
|
386
|
-
"item-height": _ctx.dropdownItemHeight,
|
|
387
|
-
size: _ctx.size,
|
|
388
|
-
"select-all": _ctx.selectAll,
|
|
389
|
-
direction: _ctx.computedDirection,
|
|
390
|
-
"title-key": _ctx.titleKey,
|
|
380
|
+
searchValue: _ctx.searchValue,
|
|
381
|
+
loading: _ctx.loading,
|
|
391
382
|
onSelect: _ctx.onOptionSelect,
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
]
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
383
|
+
onCreate: _ctx.onCreateSubmit,
|
|
384
|
+
onClose: () => _ctx.onToggleOpen(false)
|
|
385
|
+
})), () => [
|
|
386
|
+
vue.createVNode(_component_DropdownMenu, {
|
|
387
|
+
id: _ctx.ariaId,
|
|
388
|
+
ref: "listRef",
|
|
389
|
+
"prefix-cls": _ctx.prefixCls,
|
|
390
|
+
open: _ctx.stateOpen,
|
|
391
|
+
width: _ctx.dropdownMenuWidth,
|
|
392
|
+
multiple: _ctx.multiple,
|
|
393
|
+
"multiple-limit": _ctx.multipleLimit,
|
|
394
|
+
options: _ctx.loading ? [] : _ctx.displayOptions,
|
|
395
|
+
values: _ctx.innerValue,
|
|
396
|
+
"search-value": _ctx.searchValue,
|
|
397
|
+
"default-active-first": _ctx.defaultActiveFirst,
|
|
398
|
+
height: _ctx.dropdownHeight,
|
|
399
|
+
"item-height": _ctx.dropdownItemHeight,
|
|
400
|
+
size: _ctx.size,
|
|
401
|
+
"select-all": _ctx.selectAll,
|
|
402
|
+
direction: _ctx.computedDirection,
|
|
403
|
+
"title-key": _ctx.titleKey,
|
|
404
|
+
onSelect: _ctx.onOptionSelect,
|
|
405
|
+
onClose: _cache[4] || (_cache[4] = ($event) => _ctx.onToggleOpen(false)),
|
|
406
|
+
onScrollAtTop: _ctx.onScrollAtTop,
|
|
407
|
+
onScrollAtBottom: _ctx.onScrollAtBottom,
|
|
408
|
+
onCreateSubmit: _ctx.onCreateSubmit
|
|
409
|
+
}, {
|
|
410
|
+
empty: vue.withCtx(() => [
|
|
411
|
+
vue.renderSlot(_ctx.$slots, "notFound", {}, () => [
|
|
412
|
+
vue.createVNode(_component_RenderEmpty, {
|
|
413
|
+
size: "small",
|
|
414
|
+
text: _ctx.loading ? _ctx.loadingTextLocale : _ctx.notFoundText
|
|
415
|
+
}, null, 8, ["text"])
|
|
416
|
+
])
|
|
417
|
+
]),
|
|
418
|
+
_: 3
|
|
419
|
+
}, 8, ["id", "prefix-cls", "open", "width", "multiple", "multiple-limit", "options", "values", "search-value", "default-active-first", "height", "item-height", "size", "select-all", "direction", "title-key", "onSelect", "onScrollAtTop", "onScrollAtBottom", "onCreateSubmit"])
|
|
420
|
+
])
|
|
407
421
|
]),
|
|
408
422
|
default: vue.withCtx(() => [
|
|
409
423
|
vue.createElementVNode("div", vue.mergeProps({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefSelect.js","sources":["../../../../src/components/Select/RefSelect.vue"],"sourcesContent":["<template>\n <Popup\n :prefix-cls=\"`${prefixCls}-dropdown`\"\n :placement=\"computedPlacement\"\n :visible=\"popupOpen\"\n :popup-class=\"`${dropdownMenuClass || ''} ${isEmpty ? `${prefixCls}-dropdown-empty` : ''} ${\n direction === 'rtl' ? `${prefixCls}-dropdown-rtl` : ''\n }`\"\n :popup-style=\"popupStyle\"\n transition-name=\"slide-up\"\n :click-outside=\"onClickOutside\"\n >\n <div\n ref=\"containerRef\"\n :class=\"[\n prefixCls,\n {\n [attrClass]: attrClass,\n [`${prefixCls}-${size}`]: size,\n [`${prefixCls}-variant-${variant}`]: true,\n [`${prefixCls}-single`]: !multiple,\n [`${prefixCls}-multiple`]: multiple,\n [`${prefixCls}-open`]: stateOpen,\n [`${prefixCls}-filterable`]: filterable,\n [`${prefixCls}-focused`]: stateFocused,\n [`${prefixCls}-disabled`]: disabled,\n [`${prefixCls}-clearable`]: !!clearable,\n [`${prefixCls}-with-clear`]: showClear,\n [`${prefixCls}-show-arrow`]: showArrow,\n [`${prefixCls}-loading`]: !!loading,\n [`${prefixCls}-show-prefix`]: !!prefixIcon,\n [`${prefixCls}-arrow-no-rotate`]: !arrowRotate,\n [`${prefixCls}-rtl`]: computedDirection === 'rtl'\n }\n ]\"\n v-bind=\"$attrs\"\n :style=\"attrStyle\"\n :tabindex=\"disabled ? -1 : 0\"\n @mousedown=\"onContainerMouseDown\"\n @keydown=\"onContainerKeydown\"\n >\n <span\n v-if=\"!!label\"\n :class=\"{\n [`${prefixCls}-label`]: true,\n [`${prefixCls}-label-colon`]: labelColon,\n [`${prefixCls}-label-required`]: required\n }\"\n >\n {{ label }}\n </span>\n <!-- prefix-Icon -->\n <span v-else-if=\"!!prefixIcon\" key=\"prefix\" :class=\"`${prefixCls}-prefix`\">\n <UIcon>\n <component :is=\"prefixIcon\" />\n </UIcon>\n </span>\n <Selection\n ref=\"selectionRef\"\n :disabled=\"disabled\"\n :multiple=\"multiple\"\n :open=\"stateOpen\"\n :values=\"displayValues\"\n :prefix-cls=\"prefixCls\"\n :filterable=\"filterable\"\n :search-value=\"searchValue\"\n :placeholder=\"loading ? loadingTextLocale : placeholder\"\n :max-tag-count=\"maxTagCount\"\n :max-tag-text-length=\"maxTagTextLength\"\n :max-tag-placeholder=\"maxTagPlaceholder\"\n :popover-props=\"popoverProps\"\n :max-tag-tooltip=\"maxTagTooltip\"\n :max-tag-tooltip-width=\"maxTagTooltipWidth\"\n :is-show-tag-tooltip=\"isShowTagTooltip\"\n :tag-render=\"tagRender\"\n :tag-transition-name=\"tagTransitionName\"\n :remove-icon=\"removeIcon\"\n :allow-create=\"allowCreate\"\n :title-key=\"titleKey\"\n :allow-empty-value=\"allowEmptyValue\"\n :token-with-enter=\"tokenWithEnter\"\n :trigger-search=\"triggerSearch\"\n @toggle-open=\"onToggleOpen\"\n @select=\"onSelectionSelect\"\n @create-submit=\"onCreateSubmit\"\n >\n <template #placeholder>\n <slot name=\"placeholder\">\n {{ loading ? loadingTextLocale : placeholder }}\n </slot>\n </template>\n </Selection>\n\n <!-- arrow-Icon -->\n <span v-if=\"showArrow\" key=\"arrow\" :class=\"`${prefixCls}-arrow`\">\n <UIcon :spin=\"loading\">\n <component :is=\"realSuffixIcon\" />\n </UIcon>\n </span>\n <!-- clearIcon -->\n <span v-if=\"showClear\" key=\"clear\" :class=\"`${prefixCls}-clear`\" @mousedown.prevent @click=\"onClearSelection\">\n <UIcon>\n <component :is=\"clearIcon\" v-if=\"clearIcon\" />\n <CircleX v-else />\n </UIcon>\n </span>\n </div>\n <template #popup>\n <DropdownMenu\n :id=\"ariaId\"\n ref=\"listRef\"\n :prefix-cls=\"prefixCls\"\n :open=\"stateOpen\"\n :width=\"dropdownMenuWidth\"\n :multiple=\"multiple\"\n :multiple-limit=\"multipleLimit\"\n :options=\"loading ? [] : displayOptions\"\n :values=\"innerValue\"\n :search-value=\"searchValue\"\n :default-active-first=\"defaultActiveFirst\"\n :height=\"dropdownHeight\"\n :item-height=\"dropdownItemHeight\"\n :size=\"size\"\n :select-all=\"selectAll\"\n :direction=\"computedDirection\"\n :title-key=\"titleKey\"\n @select=\"onOptionSelect\"\n @close=\"onToggleOpen(false)\"\n @scroll-at-top=\"onScrollAtTop\"\n @scroll-at-bottom=\"onScrollAtBottom\"\n @create-submit=\"onCreateSubmit\"\n >\n <template #empty>\n <slot name=\"notFound\">\n <RenderEmpty size=\"small\" :text=\"loading ? loadingTextLocale : notFoundText\" />\n </slot>\n </template>\n </DropdownMenu>\n </template>\n </Popup>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch, computed, onMounted, onUpdated, provide, inject, shallowRef } from 'vue';\nimport type { CSSProperties, PropType } from 'vue';\nimport Popup from '@uxd-ui/components/Popup';\nimport UIcon from '@uxd-ui/components/Icon';\nimport UCheckbox from '@uxd-ui/components/Checkbox';\nimport { CircleX, LoaderCircle, Search, ChevronDown } from 'lucide-vue-next';\nimport { removeLastEnabledValue, getSeparatedContent } from './utils';\nimport KeyCode from '../../utils/KeyCode';\nimport { generateUUID } from '../../utils/tools';\nimport DropdownMenu from './DropdownMenu.vue';\nimport Selection from './Selection';\nimport RenderEmpty from '../base/RenderEmpty.vue';\nimport useGlobalConfig from '../base/hooks/useGlobalConfig';\nimport useDelaySet from '../base/hooks/useDelaySet';\n// import useLock from '../base/hooks/useLock';\nimport useArrayValue, { toArray } from './hooks/useArrayValue';\nimport useOptions from './hooks/useOptions';\nimport useContainerWidth from '../base/hooks/useContainerWidth';\nimport { FormItemKey } from '../Form';\nimport { selectProps, selectEmits } from './Select.type';\nimport type { SingleValueType } from './Select.type';\nimport type { FormItemContext } from '../Form/Form.type';\n\nconst localIsValid = (val: any) => {\n return val !== null && val !== undefined;\n};\n\nexport default defineComponent({\n name: 'RefSelect',\n components: {\n Popup,\n Selection,\n DropdownMenu,\n RenderEmpty,\n UIcon,\n UCheckbox,\n CircleX,\n LoaderCircle,\n Search,\n ChevronDown\n },\n inheritAttrs: false,\n props: {\n ...selectProps,\n children: {\n type: Array as PropType<any[]>,\n default: undefined\n }\n },\n emits: selectEmits,\n setup(props, { emit, attrs }) {\n const { prefixCls, config: globalConfig } = useGlobalConfig('select');\n const ariaId = `select_${generateUUID()}`;\n const { onFieldChange } = inject<FormItemContext>(FormItemKey, {} as FormItemContext);\n\n // =================== ref ==================\n // #region\n const containerRef = shallowRef<HTMLElement | null>(null);\n const selectionRef = ref<any | null>(null);\n const listRef = ref<any | null>(null);\n // #endregion\n\n // =================== value & data ==================\n // #region\n\n const stateValue = ref(props.modelValue);\n const { toInnerValue, toOuterValue } = useArrayValue();\n const innerValue = computed<(string | number)[]>(() => toInnerValue(stateValue.value, props.allowEmptyValue ? localIsValid : undefined));\n // const innerValue = computed<(string | number)[]>(() => toInnerValue(stateValue.value));\n const searchValue = ref('');\n const setSearchValue = (val: string) => {\n searchValue.value = val;\n };\n // const activeValue = ref(null);\n // const setActiveValue = val => {\n // activeValue.value = val;\n // };\n\n const { displayOptions, getOptionsByValue, getOptionByLabel } = useOptions(props, searchValue, innerValue);\n\n watch(\n () => props.modelValue,\n (val) => {\n stateValue.value = val;\n }\n );\n\n const emitChange = (val: (string | number)[]) => {\n const _multiple = props.multiple === true;\n const value = toOuterValue(val, _multiple);\n\n if (props.modelValue === undefined) {\n stateValue.value = value;\n }\n emit('update:modelValue', value);\n const options = getOptionsByValue(val);\n emit('change', value, _multiple ? options : options[0]);\n if (onFieldChange && !props.disabledTriggerForm) {\n onFieldChange(value);\n }\n };\n // #endregion\n\n // =================== open ==================\n // #region\n const stateOpen = ref<boolean>(props.open || false);\n watch(\n () => props.open,\n (val) => {\n stateOpen.value = val || false;\n }\n );\n const noPopupContent = computed(() => !props.showEmpty && !displayOptions.value.length);\n const popupOpen = computed(() => (noPopupContent.value ? false : stateOpen.value));\n\n const computedDirection = computed(() => {\n return props.direction || globalConfig.direction || 'ltr';\n });\n const computedPlacement = computed(() => {\n if (props.placement) {\n return props.placement;\n }\n return computedDirection.value === 'rtl' ? 'bottom-end' : 'bottom-start';\n });\n\n const setOpenState = (open?: boolean) => {\n const _open = open !== undefined ? open : !stateOpen.value;\n if (stateOpen.value !== _open && !props.disabled) {\n if (props.open === undefined) {\n stateOpen.value = _open;\n }\n emit('dropdown-visible-change', _open);\n }\n };\n\n watch(\n () => props.disabled,\n () => {\n if (stateOpen.value && !!props.disabled) {\n setOpenState(false);\n }\n }\n );\n // #endregion\n\n // =================== selection ==================\n // #region\n\n const getDisplayValus = () => {\n const options = getOptionsByValue(innerValue.value);\n return options.map((x) => {\n let displayLabel;\n const displayProp = props.displayProp || 'slot';\n if (displayProp === 'slot') {\n displayLabel = x.render ? x.render() : x.label;\n } else {\n displayLabel = x[displayProp] || x.label;\n }\n return {\n ...x,\n displayLabel\n };\n });\n };\n\n const displayValues = computed(() => {\n return getDisplayValus();\n });\n\n const onSelect = (value: string | number | string[] | number[], { selected }: { selected: boolean }) => {\n if (props.disabled) {\n return;\n }\n\n if (props.multiple) {\n const _rawValue = new Set(innerValue.value);\n const values = toArray(value);\n if (selected) {\n values.forEach((v: string | number) => {\n _rawValue.add(v);\n });\n } else {\n values.forEach((v: string | number) => {\n _rawValue.delete(v);\n });\n }\n const rowValue = Array.from(_rawValue);\n if (props.sortByOption && props.options) {\n const sortValue: SingleValueType[] = [];\n props.options.forEach((o) => {\n if (rowValue.includes(o.value)) {\n sortValue.push(o.value);\n }\n });\n emitChange(sortValue);\n } else {\n emitChange(rowValue);\n }\n } else if (value !== stateValue.value && !Array.isArray(value)) {\n emitChange([value]);\n }\n\n const { autoClearSearchValue = true } = props;\n if (!props.multiple) {\n setOpenState(false);\n }\n if (!props.multiple || autoClearSearchValue) {\n setSearchValue('');\n }\n };\n\n // #endregion\n\n // =================== popup ==================\n // #region\n const { containerWidth, getContainerWidth } = useContainerWidth(containerRef);\n onMounted(() => {\n getContainerWidth();\n });\n\n onUpdated(() => {\n getContainerWidth();\n });\n\n const popupStyle = computed(() => {\n const cssStyle: CSSProperties = {};\n if (typeof props.dropdownMenuWidth === 'number') {\n cssStyle.width = `${props.dropdownMenuWidth}px`;\n cssStyle.minWidth = `${props.dropdownMenuWidth}px`;\n } else {\n cssStyle.width = `${containerWidth.value}px`;\n cssStyle.minWidth = `${containerWidth.value}px`;\n }\n return {\n ...cssStyle,\n ...props.dropdownMenuStyle\n } as CSSProperties;\n });\n // #endregion\n\n // =================== search ==================\n // #region\n\n const tokenWithEnter = computed(() => {\n return (props.tokenSeparators || []).some((token) => token === '\\n' || token === '\\r\\n');\n });\n\n const triggerSearch = (searchText: string, isCompositing: boolean) => {\n let ret = true;\n let _searchValue = searchText;\n const preSearchValue = searchValue.value;\n // setActiveValue(null);\n // handle paste auto separate, only use in multiple and tokenSeparators is set\n if (props.multiple && props.tokenSeparators) {\n const patchLabels = isCompositing ? null : getSeparatedContent(searchText, props.tokenSeparators);\n\n if (patchLabels) {\n const patchRawValues: SingleValueType[] = [];\n const restValues: string[] = [];\n patchLabels.forEach((label) => {\n const option = getOptionByLabel(label);\n if (option) {\n patchRawValues.push(option.value);\n } else {\n restValues.push(label);\n }\n });\n const newValues = [...innerValue.value, ...patchRawValues, ...(props.allowCreate ? restValues : [])];\n emitChange(newValues);\n setOpenState(false);\n ret = false;\n _searchValue = '';\n }\n }\n\n setSearchValue(_searchValue);\n if (preSearchValue !== _searchValue) {\n emit('search', _searchValue);\n }\n return ret;\n };\n\n watch(\n stateOpen,\n () => {\n if (!stateOpen.value && searchValue.value) {\n triggerSearch('', false);\n }\n },\n { immediate: true }\n );\n\n // #endregion\n\n // =================== focus/ blur ==================\n // #region\n const [stateFocused, setStateFocused] = useDelaySet();\n const _immediateFocused = ref(false);\n const onContainerFocus = (args: any) => {\n setStateFocused(true);\n if (!props.disabled && !stateFocused.value) {\n emit('focus', args);\n }\n _immediateFocused.value = true;\n };\n const onContainerBlur = (args: any) => {\n setStateFocused(false, () => {\n _immediateFocused.value = false;\n setOpenState(false);\n });\n // if (props.disabled) {\n // return;\n // }\n // if (searchValue.value && props.multiple) {\n // setSearchValue('');\n // }\n\n emit('blur', args);\n };\n\n provide('SelectContext', {\n focus: onContainerFocus,\n blur: onContainerBlur\n });\n\n const onContainerMouseDown = (e: any) => {\n setOpenState(!stateOpen.value);\n emit('mousedown', e);\n };\n\n // #endregion\n\n // =================== keyboard ==================\n // #region\n\n // const [getClearLock, setClearLock] = useLock();\n\n const onContainerKeydown = (e: KeyboardEvent) => {\n // const clearlock = getClearLock();\n const { which } = e;\n if (!stateOpen.value && which === KeyCode.Enter) {\n setOpenState(true);\n }\n // setClearLock(!!searchValue.value);\n\n if (\n which === KeyCode.BACKSPACE &&\n // !clearlock &&\n props.multiple &&\n !searchValue.value &&\n innerValue.value.length > 0\n ) {\n const removeInfo = removeLastEnabledValue(displayValues.value, innerValue.value);\n\n if (removeInfo.removedValue !== null) {\n emitChange(removeInfo.values);\n }\n }\n\n if (stateOpen.value && listRef.value) {\n (listRef.value as any).onKeydown(e);\n }\n emit('keydown', e);\n };\n\n // #endregion\n\n // =================== other ==================\n // #region\n const showClear = computed(() => {\n return props.clearable && !props.disabled && (innerValue.value.length || searchValue.value);\n });\n\n const isEmpty = computed(() => {\n return displayOptions.value.length === 0;\n });\n\n const realSuffixIcon = computed(() => {\n if (props.loading) {\n return LoaderCircle;\n }\n if (props.filterable && stateOpen.value) {\n return Search;\n }\n return props.suffixIcon || ChevronDown;\n });\n // #endregion\n\n const attrClass = computed<any>(() => attrs.class);\n const attrStyle = computed<any>(() => attrs.style);\n\n const loadingTextLocale = computed(() => {\n return props.loadingText || globalConfig.locale.select.loadingText;\n });\n\n return {\n attrClass,\n attrStyle,\n // const\n prefixCls,\n ariaId,\n // Refs\n containerRef,\n selectionRef,\n listRef,\n\n // computed\n showClear,\n isEmpty,\n realSuffixIcon,\n tokenWithEnter,\n loadingTextLocale,\n\n // datas\n popupStyle,\n searchValue,\n stateOpen,\n popupOpen,\n computedDirection,\n computedPlacement,\n innerValue,\n displayValues,\n stateFocused,\n displayOptions,\n // method\n onContainerMouseDown,\n onContainerKeydown,\n onOptionSelect: onSelect,\n onSelectionSelect: onSelect,\n onClearSelection: () => {\n emitChange([]);\n triggerSearch('', false);\n emit('clear');\n },\n triggerSearch,\n onToggleOpen: (open?: boolean) => {\n setOpenState(open);\n },\n onClickOutside: () => {\n setOpenState(false);\n },\n onCreateSubmit: (val: string) => {\n emit('create', val);\n },\n onScrollAtTop: () => {\n emit('scroll-at-top');\n },\n onScrollAtBottom: () => {\n emit('scroll-at-bottom');\n }\n };\n }\n});\n</script>\n"],"names":["defineComponent","Popup","Selection","DropdownMenu","RenderEmpty","UIcon","UCheckbox","CircleX","LoaderCircle","Search","ChevronDown","selectProps","selectEmits","useGlobalConfig","generateUUID","inject","FormItemKey","shallowRef","ref","useArrayValue","computed","useOptions","toArray","useContainerWidth","getSeparatedContent","useDelaySet","KeyCode","removeLastEnabledValue","_createBlock","_withCtx","_createVNode","_renderSlot","_createElementVNode","_mergeProps","_createElementBlock","_normalizeClass","_Fragment","_createCommentVNode","_resolveDynamicComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RefSelect.js","sources":["../../../../src/components/Select/RefSelect.vue"],"sourcesContent":["<template>\n <Popup\n :prefix-cls=\"`${prefixCls}-dropdown`\"\n :placement=\"computedPlacement\"\n :visible=\"popupOpen\"\n :popup-class=\"`${dropdownMenuClass || ''} ${isEmpty ? `${prefixCls}-dropdown-empty` : ''} ${\n direction === 'rtl' ? `${prefixCls}-dropdown-rtl` : ''\n }`\"\n :popup-style=\"popupStyle\"\n transition-name=\"slide-up\"\n :click-outside=\"onClickOutside\"\n >\n <div\n ref=\"containerRef\"\n :class=\"[\n prefixCls,\n {\n [attrClass]: attrClass,\n [`${prefixCls}-${size}`]: size,\n [`${prefixCls}-variant-${variant}`]: true,\n [`${prefixCls}-single`]: !multiple,\n [`${prefixCls}-multiple`]: multiple,\n [`${prefixCls}-open`]: stateOpen,\n [`${prefixCls}-filterable`]: filterable,\n [`${prefixCls}-focused`]: stateFocused,\n [`${prefixCls}-disabled`]: disabled,\n [`${prefixCls}-clearable`]: !!clearable,\n [`${prefixCls}-with-clear`]: showClear,\n [`${prefixCls}-show-arrow`]: showArrow,\n [`${prefixCls}-loading`]: !!loading,\n [`${prefixCls}-show-prefix`]: !!prefixIcon,\n [`${prefixCls}-arrow-no-rotate`]: !arrowRotate,\n [`${prefixCls}-rtl`]: computedDirection === 'rtl'\n }\n ]\"\n v-bind=\"$attrs\"\n :style=\"attrStyle\"\n :tabindex=\"disabled ? -1 : 0\"\n @mousedown=\"onContainerMouseDown\"\n @keydown=\"onContainerKeydown\"\n >\n <span\n v-if=\"!!label\"\n :class=\"{\n [`${prefixCls}-label`]: true,\n [`${prefixCls}-label-colon`]: labelColon,\n [`${prefixCls}-label-required`]: required\n }\"\n >\n {{ label }}\n </span>\n <!-- prefix-Icon -->\n <span v-else-if=\"!!prefixIcon\" key=\"prefix\" :class=\"`${prefixCls}-prefix`\">\n <UIcon>\n <component :is=\"prefixIcon\" />\n </UIcon>\n </span>\n <Selection\n ref=\"selectionRef\"\n :disabled=\"disabled\"\n :multiple=\"multiple\"\n :open=\"stateOpen\"\n :values=\"displayValues\"\n :prefix-cls=\"prefixCls\"\n :filterable=\"filterable\"\n :search-value=\"searchValue\"\n :placeholder=\"loading ? loadingTextLocale : placeholder\"\n :max-tag-count=\"maxTagCount\"\n :max-tag-text-length=\"maxTagTextLength\"\n :max-tag-placeholder=\"maxTagPlaceholder\"\n :popover-props=\"popoverProps\"\n :max-tag-tooltip=\"maxTagTooltip\"\n :max-tag-tooltip-width=\"maxTagTooltipWidth\"\n :is-show-tag-tooltip=\"isShowTagTooltip\"\n :tag-render=\"tagRender\"\n :tag-transition-name=\"tagTransitionName\"\n :remove-icon=\"removeIcon\"\n :allow-create=\"allowCreate\"\n :title-key=\"titleKey\"\n :allow-empty-value=\"allowEmptyValue\"\n :token-with-enter=\"tokenWithEnter\"\n :trigger-search=\"triggerSearch\"\n @toggle-open=\"onToggleOpen\"\n @select=\"onSelectionSelect\"\n @create-submit=\"onCreateSubmit\"\n >\n <template #placeholder>\n <slot name=\"placeholder\">\n {{ loading ? loadingTextLocale : placeholder }}\n </slot>\n </template>\n </Selection>\n\n <!-- arrow-Icon -->\n <span v-if=\"showArrow\" key=\"arrow\" :class=\"`${prefixCls}-arrow`\">\n <UIcon :spin=\"loading\">\n <component :is=\"realSuffixIcon\" />\n </UIcon>\n </span>\n <!-- clearIcon -->\n <span v-if=\"showClear\" key=\"clear\" :class=\"`${prefixCls}-clear`\" @mousedown.prevent @click=\"onClearSelection\">\n <UIcon>\n <component :is=\"clearIcon\" v-if=\"clearIcon\" />\n <CircleX v-else />\n </UIcon>\n </span>\n </div>\n <template #popup>\n <slot\n name=\"dropdown\"\n v-bind=\"{\n open: stateOpen,\n options: displayOptions,\n multiple,\n multipleLimit,\n values: innerValue,\n searchValue,\n loading,\n onSelect: onOptionSelect,\n onCreate: onCreateSubmit,\n onClose: () => onToggleOpen(false)\n }\"\n >\n <DropdownMenu\n :id=\"ariaId\"\n ref=\"listRef\"\n :prefix-cls=\"prefixCls\"\n :open=\"stateOpen\"\n :width=\"dropdownMenuWidth\"\n :multiple=\"multiple\"\n :multiple-limit=\"multipleLimit\"\n :options=\"loading ? [] : displayOptions\"\n :values=\"innerValue\"\n :search-value=\"searchValue\"\n :default-active-first=\"defaultActiveFirst\"\n :height=\"dropdownHeight\"\n :item-height=\"dropdownItemHeight\"\n :size=\"size\"\n :select-all=\"selectAll\"\n :direction=\"computedDirection\"\n :title-key=\"titleKey\"\n @select=\"onOptionSelect\"\n @close=\"onToggleOpen(false)\"\n @scroll-at-top=\"onScrollAtTop\"\n @scroll-at-bottom=\"onScrollAtBottom\"\n @create-submit=\"onCreateSubmit\"\n >\n <template #empty>\n <slot name=\"notFound\">\n <RenderEmpty size=\"small\" :text=\"loading ? loadingTextLocale : notFoundText\" />\n </slot>\n </template>\n </DropdownMenu>\n </slot>\n </template>\n </Popup>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, watch, computed, onMounted, onUpdated, provide, inject, shallowRef } from 'vue';\nimport type { CSSProperties, PropType } from 'vue';\nimport Popup from '@uxd-ui/components/Popup';\nimport UIcon from '@uxd-ui/components/Icon';\nimport UCheckbox from '@uxd-ui/components/Checkbox';\nimport { CircleX, LoaderCircle, Search, ChevronDown } from 'lucide-vue-next';\nimport { removeLastEnabledValue, getSeparatedContent } from './utils';\nimport KeyCode from '../../utils/KeyCode';\nimport { generateUUID } from '../../utils/tools';\nimport DropdownMenu from './DropdownMenu.vue';\nimport Selection from './Selection';\nimport RenderEmpty from '../base/RenderEmpty.vue';\nimport useGlobalConfig from '../base/hooks/useGlobalConfig';\nimport useDelaySet from '../base/hooks/useDelaySet';\n// import useLock from '../base/hooks/useLock';\nimport useArrayValue, { toArray } from './hooks/useArrayValue';\nimport useOptions from './hooks/useOptions';\nimport useContainerWidth from '../base/hooks/useContainerWidth';\nimport { FormItemKey } from '../Form';\nimport { selectProps, selectEmits } from './Select.type';\nimport type { SingleValueType } from './Select.type';\nimport type { FormItemContext } from '../Form/Form.type';\n\nconst localIsValid = (val: any) => {\n return val !== null && val !== undefined;\n};\n\nexport default defineComponent({\n name: 'RefSelect',\n components: {\n Popup,\n Selection,\n DropdownMenu,\n RenderEmpty,\n UIcon,\n UCheckbox,\n CircleX,\n LoaderCircle,\n Search,\n ChevronDown\n },\n inheritAttrs: false,\n props: {\n ...selectProps,\n children: {\n type: Array as PropType<any[]>,\n default: undefined\n }\n },\n emits: selectEmits,\n setup(props, { emit, attrs }) {\n const { prefixCls, config: globalConfig } = useGlobalConfig('select');\n const ariaId = `select_${generateUUID()}`;\n const { onFieldChange } = inject<FormItemContext>(FormItemKey, {} as FormItemContext);\n\n // =================== ref ==================\n // #region\n const containerRef = shallowRef<HTMLElement | null>(null);\n const selectionRef = ref<any | null>(null);\n const listRef = ref<any | null>(null);\n // #endregion\n\n // =================== value & data ==================\n // #region\n\n const stateValue = ref(props.modelValue);\n const { toInnerValue, toOuterValue } = useArrayValue();\n const innerValue = computed<(string | number)[]>(() => toInnerValue(stateValue.value, props.allowEmptyValue ? localIsValid : undefined));\n // const innerValue = computed<(string | number)[]>(() => toInnerValue(stateValue.value));\n const searchValue = ref('');\n const setSearchValue = (val: string) => {\n searchValue.value = val;\n };\n // const activeValue = ref(null);\n // const setActiveValue = val => {\n // activeValue.value = val;\n // };\n\n const { displayOptions, getOptionsByValue, getOptionByLabel } = useOptions(props, searchValue, innerValue);\n\n watch(\n () => props.modelValue,\n (val) => {\n stateValue.value = val;\n }\n );\n\n const emitChange = (val: (string | number)[]) => {\n const _multiple = props.multiple === true;\n const value = toOuterValue(val, _multiple);\n\n if (props.modelValue === undefined) {\n stateValue.value = value;\n }\n emit('update:modelValue', value);\n const options = getOptionsByValue(val);\n emit('change', value, _multiple ? options : options[0]);\n if (onFieldChange && !props.disabledTriggerForm) {\n onFieldChange(value);\n }\n };\n // #endregion\n\n // =================== open ==================\n // #region\n const stateOpen = ref<boolean>(props.open || false);\n watch(\n () => props.open,\n (val) => {\n stateOpen.value = val || false;\n }\n );\n const noPopupContent = computed(() => !props.showEmpty && !displayOptions.value.length);\n const popupOpen = computed(() => (noPopupContent.value ? false : stateOpen.value));\n\n const computedDirection = computed(() => {\n return props.direction || globalConfig.direction || 'ltr';\n });\n const computedPlacement = computed(() => {\n if (props.placement) {\n return props.placement;\n }\n return computedDirection.value === 'rtl' ? 'bottom-end' : 'bottom-start';\n });\n\n const setOpenState = (open?: boolean) => {\n const _open = open !== undefined ? open : !stateOpen.value;\n if (stateOpen.value !== _open && !props.disabled) {\n if (props.open === undefined) {\n stateOpen.value = _open;\n }\n emit('dropdown-visible-change', _open);\n }\n };\n\n watch(\n () => props.disabled,\n () => {\n if (stateOpen.value && !!props.disabled) {\n setOpenState(false);\n }\n }\n );\n // #endregion\n\n // =================== selection ==================\n // #region\n\n const getDisplayValus = () => {\n const options = getOptionsByValue(innerValue.value);\n return options.map((x) => {\n let displayLabel;\n const displayProp = props.displayProp || 'slot';\n if (displayProp === 'slot') {\n displayLabel = x.render ? x.render() : x.label;\n } else {\n displayLabel = x[displayProp] || x.label;\n }\n return {\n ...x,\n displayLabel\n };\n });\n };\n\n const displayValues = computed(() => {\n return getDisplayValus();\n });\n\n const onSelect = (value: string | number | string[] | number[], { selected }: { selected: boolean }) => {\n if (props.disabled) {\n return;\n }\n\n if (props.multiple) {\n const _rawValue = new Set(innerValue.value);\n const values = toArray(value);\n if (selected) {\n values.forEach((v: string | number) => {\n _rawValue.add(v);\n });\n } else {\n values.forEach((v: string | number) => {\n _rawValue.delete(v);\n });\n }\n const rowValue = Array.from(_rawValue);\n if (props.sortByOption && props.options) {\n const sortValue: SingleValueType[] = [];\n props.options.forEach((o) => {\n if (rowValue.includes(o.value)) {\n sortValue.push(o.value);\n }\n });\n emitChange(sortValue);\n } else {\n emitChange(rowValue);\n }\n } else if (value !== stateValue.value && !Array.isArray(value)) {\n console.log('onSelect', value);\n emitChange([value]);\n }\n\n const { autoClearSearchValue = true } = props;\n if (!props.multiple) {\n setOpenState(false);\n }\n if (!props.multiple || autoClearSearchValue) {\n setSearchValue('');\n }\n };\n\n // #endregion\n\n // =================== popup ==================\n // #region\n const { containerWidth, getContainerWidth } = useContainerWidth(containerRef);\n onMounted(() => {\n getContainerWidth();\n });\n\n onUpdated(() => {\n getContainerWidth();\n });\n\n const popupStyle = computed(() => {\n const cssStyle: CSSProperties = {};\n if (typeof props.dropdownMenuWidth === 'number') {\n cssStyle.width = `${props.dropdownMenuWidth}px`;\n cssStyle.minWidth = `${props.dropdownMenuWidth}px`;\n } else {\n cssStyle.width = `${containerWidth.value}px`;\n cssStyle.minWidth = `${containerWidth.value}px`;\n }\n return {\n ...cssStyle,\n ...props.dropdownMenuStyle\n } as CSSProperties;\n });\n // #endregion\n\n // =================== search ==================\n // #region\n\n const tokenWithEnter = computed(() => {\n return (props.tokenSeparators || []).some((token) => token === '\\n' || token === '\\r\\n');\n });\n\n const triggerSearch = (searchText: string, isCompositing: boolean) => {\n let ret = true;\n let _searchValue = searchText;\n const preSearchValue = searchValue.value;\n // setActiveValue(null);\n // handle paste auto separate, only use in multiple and tokenSeparators is set\n if (props.multiple && props.tokenSeparators) {\n const patchLabels = isCompositing ? null : getSeparatedContent(searchText, props.tokenSeparators);\n\n if (patchLabels) {\n const patchRawValues: SingleValueType[] = [];\n const restValues: string[] = [];\n patchLabels.forEach((label) => {\n const option = getOptionByLabel(label);\n if (option) {\n patchRawValues.push(option.value);\n } else {\n restValues.push(label);\n }\n });\n const newValues = [...innerValue.value, ...patchRawValues, ...(props.allowCreate ? restValues : [])];\n emitChange(newValues);\n setOpenState(false);\n ret = false;\n _searchValue = '';\n }\n }\n\n setSearchValue(_searchValue);\n if (preSearchValue !== _searchValue) {\n emit('search', _searchValue);\n }\n return ret;\n };\n\n watch(\n stateOpen,\n () => {\n if (!stateOpen.value && searchValue.value) {\n triggerSearch('', false);\n }\n },\n { immediate: true }\n );\n\n // #endregion\n\n // =================== focus/ blur ==================\n // #region\n const [stateFocused, setStateFocused] = useDelaySet();\n const _immediateFocused = ref(false);\n const onContainerFocus = (args: any) => {\n setStateFocused(true);\n if (!props.disabled && !stateFocused.value) {\n emit('focus', args);\n }\n _immediateFocused.value = true;\n };\n const onContainerBlur = (args: any) => {\n setStateFocused(false, () => {\n _immediateFocused.value = false;\n setOpenState(false);\n });\n // if (props.disabled) {\n // return;\n // }\n // if (searchValue.value && props.multiple) {\n // setSearchValue('');\n // }\n\n emit('blur', args);\n };\n\n provide('SelectContext', {\n focus: onContainerFocus,\n blur: onContainerBlur\n });\n\n const onContainerMouseDown = (e: any) => {\n setOpenState(!stateOpen.value);\n emit('mousedown', e);\n };\n\n // #endregion\n\n // =================== keyboard ==================\n // #region\n\n // const [getClearLock, setClearLock] = useLock();\n\n const onContainerKeydown = (e: KeyboardEvent) => {\n // const clearlock = getClearLock();\n const { which } = e;\n if (!stateOpen.value && which === KeyCode.Enter) {\n setOpenState(true);\n }\n // setClearLock(!!searchValue.value);\n\n if (\n which === KeyCode.BACKSPACE &&\n // !clearlock &&\n props.multiple &&\n !searchValue.value &&\n innerValue.value.length > 0\n ) {\n const removeInfo = removeLastEnabledValue(displayValues.value, innerValue.value);\n\n if (removeInfo.removedValue !== null) {\n emitChange(removeInfo.values);\n }\n }\n\n if (stateOpen.value && listRef.value) {\n (listRef.value as any).onKeydown(e);\n }\n emit('keydown', e);\n };\n\n // #endregion\n\n // =================== other ==================\n // #region\n const showClear = computed(() => {\n return props.clearable && !props.disabled && (innerValue.value.length || searchValue.value);\n });\n\n const isEmpty = computed(() => {\n return displayOptions.value.length === 0;\n });\n\n const realSuffixIcon = computed(() => {\n if (props.loading) {\n return LoaderCircle;\n }\n if (props.filterable && stateOpen.value) {\n return Search;\n }\n return props.suffixIcon || ChevronDown;\n });\n // #endregion\n\n const attrClass = computed<any>(() => attrs.class);\n const attrStyle = computed<any>(() => attrs.style);\n\n const loadingTextLocale = computed(() => {\n return props.loadingText || globalConfig.locale.select.loadingText;\n });\n\n return {\n attrClass,\n attrStyle,\n // const\n prefixCls,\n ariaId,\n // Refs\n containerRef,\n selectionRef,\n listRef,\n\n // computed\n showClear,\n isEmpty,\n realSuffixIcon,\n tokenWithEnter,\n loadingTextLocale,\n\n // datas\n popupStyle,\n searchValue,\n stateOpen,\n popupOpen,\n computedDirection,\n computedPlacement,\n innerValue,\n displayValues,\n stateFocused,\n displayOptions,\n // method\n onContainerMouseDown,\n onContainerKeydown,\n onOptionSelect: onSelect,\n onSelectionSelect: onSelect,\n onClearSelection: () => {\n emitChange([]);\n triggerSearch('', false);\n emit('clear');\n },\n triggerSearch,\n onToggleOpen: (open?: boolean) => {\n setOpenState(open);\n },\n onClickOutside: () => {\n setOpenState(false);\n },\n onCreateSubmit: (val: string) => {\n emit('create', val);\n },\n onScrollAtTop: () => {\n emit('scroll-at-top');\n },\n onScrollAtBottom: () => {\n emit('scroll-at-bottom');\n }\n };\n }\n});\n</script>\n"],"names":["defineComponent","Popup","Selection","DropdownMenu","RenderEmpty","UIcon","UCheckbox","CircleX","LoaderCircle","Search","ChevronDown","selectProps","selectEmits","useGlobalConfig","generateUUID","inject","FormItemKey","shallowRef","ref","useArrayValue","computed","useOptions","toArray","useContainerWidth","getSeparatedContent","useDelaySet","KeyCode","removeLastEnabledValue","_createBlock","_withCtx","_renderSlot","_createVNode","_createElementVNode","_mergeProps","_createElementBlock","_normalizeClass","_Fragment","_createCommentVNode","_resolveDynamicComponent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAsLA,MAAM,eAAe,CAAC,QAAa;SAC1B,QAAQ,QAAQ,QAAQ;AACjC;AAEA,MAAK,YAAaA,oBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,WACVC;AAAA,eACAC;AAAA,kBACAC;AAAA,iBACAC;AAAA,WACAC;AAAA,eACAC;AAAA,aACAC;AAAA,kBACAC;AAAA,YACAC;AAAA,iBACAC;AAAA;AACF,EACA,cAAc;AAAA,EACd,OAAO;AAAA,IACL,GAAGC;AAAA,IACH,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AACX;AACF,EACA,OAAOC;AAAA,EACP,MAAM,OAAO,EAAE,MAAM,SAAS;UACtB,EAAE,WAAW,QAAQ,iBAAiBC,2BAAgB,QAAQ;UAC9D,SAAS,UAAUC;UACnB,EAAE,kBAAkBC,WAAwBC,mBAAa,EAAqB;UAI9E,eAAeC,eAA+B,IAAI;UAClD,eAAeC,QAAgB,IAAI;UACnC,UAAUA,QAAgB,IAAI;UAM9B,aAAaA,QAAI,MAAM,UAAU;UACjC,EAAE,cAAc,iBAAiBC;UACjC,aAAaC,aAA8B,MAAM,aAAa,WAAW,OAAO,MAAM,kBAAkB,eAAe,MAAS,CAAC;UAEjI,cAAcF,QAAI,EAAE;UACpB,iBAAiB,CAAC,QAAgB;kBAC1B,QAAQ;AAAA;UAOhB,EAAE,gBAAgB,mBAAmB,qBAAqBG,sBAAW,OAAO,aAAa,UAAU;;MAGvG,MAAM,MAAM;AAAA,MACZ,CAAC,QAAQ;mBACI,QAAQ;AAAA;AACrB;UAGI,aAAa,CAAC,QAA6B;YACzC,YAAY,MAAM,aAAa;YAC/B,QAAQ,aAAa,KAAK,SAAS;UAErC,MAAM,eAAe,QAAW;mBACvB,QAAQ;AAAA;WAEhB,qBAAqB,KAAK;YACzB,UAAU,kBAAkB,GAAG;WAChC,UAAU,OAAO,YAAY,UAAU,QAAQ,EAAE;UAClD,iBAAiB,CAAC,MAAM,qBAAqB;sBACjC,KAAK;AAAA;AACrB;UAMI,YAAYH,QAAa,MAAM,QAAQ,KAAK;;MAEhD,MAAM,MAAM;AAAA,MACZ,CAAC,QAAQ;kBACG,QAAQ,OAAO;AAAA;AAC3B;UAEI,iBAAiBE,aAAS,MAAM,CAAC,MAAM,aAAa,CAAC,eAAe,MAAM,MAAM;UAChF,YAAYA,aAAS,MAAO,eAAe,QAAQ,QAAQ,UAAU,KAAM;UAE3E,oBAAoBA,aAAS,MAAM;aAChC,MAAM,aAAa,aAAa,aAAa;AAAA,KACrD;UACK,oBAAoBA,aAAS,MAAM;UACnC,MAAM,WAAW;eACZ,MAAM;AAAA;aAER,kBAAkB,UAAU,QAAQ,eAAe;AAAA,KAC3D;UAEK,eAAe,CAAC,SAAmB;YACjC,QAAQ,SAAS,SAAY,OAAO,CAAC,UAAU;UACjD,UAAU,UAAU,SAAS,CAAC,MAAM,UAAU;YAC5C,MAAM,SAAS,QAAW;oBAClB,QAAQ;AAAA;aAEf,2BAA2B,KAAK;AAAA;AACvC;;MAIA,MAAM,MAAM;AAAA,MACZ,MAAM;YACA,UAAU,SAAS,CAAC,CAAC,MAAM,UAAU;uBAC1B,KAAK;AAAA;AACpB;AACF;UAOI,kBAAkB,MAAM;YACtB,UAAU,kBAAkB,WAAW,KAAK;aAC3C,QAAQ,IAAI,CAAC,MAAM;YACpB;cACE,cAAc,MAAM,eAAe;YACrC,gBAAgB,QAAQ;yBACX,EAAE,SAAS,EAAE,WAAW,EAAE;AAAA,eACpC;yBACU,EAAE,gBAAgB,EAAE;AAAA;eAE9B;AAAA,UACL,GAAG;AAAA,UACH;AAAA;AACF,OACD;AAAA;UAGG,gBAAgBA,aAAS,MAAM;aAC5B;AAAgB,KACxB;UAEK,WAAW,CAAC,OAA8C,EAAE,eAAsC;UAClG,MAAM,UAAU;;;UAIhB,MAAM,UAAU;cACZ,YAAY,IAAI,IAAI,WAAW,KAAK;cACpC,SAASE,sBAAQ,KAAK;YACxB,UAAU;iBACL,QAAQ,CAAC,MAAuB;sBAC3B,IAAI,CAAC;AAAA,WAChB;AAAA,eACI;iBACE,QAAQ,CAAC,MAAuB;sBAC3B,OAAO,CAAC;AAAA,WACnB;AAAA;cAEG,WAAW,MAAM,KAAK,SAAS;YACjC,MAAM,gBAAgB,MAAM,SAAS;gBACjC,YAA+B;gBAC/B,QAAQ,QAAQ,CAAC,MAAM;gBACvB,SAAS,SAAS,EAAE,KAAK,GAAG;wBACpB,KAAK,EAAE,KAAK;AAAA;AACxB,WACD;qBACU,SAAS;AAAA,eACf;qBACM,QAAQ;AAAA;AACrB,iBACS,UAAU,WAAW,SAAS,CAAC,MAAM,QAAQ,KAAK,GAAG;gBACtD,IAAI,YAAY,KAAK;mBAClB,CAAC,KAAK,CAAC;AAAA;YAGd,EAAE,uBAAuB,SAAS;UACpC,CAAC,MAAM,UAAU;qBACN,KAAK;AAAA;UAEhB,CAAC,MAAM,YAAY,sBAAsB;uBAC5B,EAAE;AAAA;AACnB;UAOI,EAAE,gBAAgB,sBAAsBC,6BAAkB,YAAY;kBAClE,MAAM;;AACI,KACnB;kBAES,MAAM;;AACI,KACnB;UAEK,aAAaH,aAAS,MAAM;YAC1B,WAA0B;UAC5B,OAAO,MAAM,sBAAsB,UAAU;iBACtC,QAAQ,GAAG,MAAM;iBACjB,WAAW,GAAG,MAAM;AAAA,aACxB;iBACI,QAAQ,GAAG,eAAe;iBAC1B,WAAW,GAAG,eAAe;AAAA;aAEjC;AAAA,QACL,GAAG;AAAA,QACH,GAAG,MAAM;AAAA;AACX,KACD;UAMK,iBAAiBA,aAAS,MAAM;cAC5B,MAAM,mBAAmB,IAAI,KAAK,CAAC,UAAU,UAAU,QAAQ,UAAU,MAAM;AAAA,KACxF;UAEK,gBAAgB,CAAC,YAAoB,kBAA2B;UAChE,MAAM;UACN,eAAe;YACb,iBAAiB,YAAY;UAG/B,MAAM,YAAY,MAAM,iBAAiB;cACrC,cAAc,gBAAgB,OAAOI,4BAAoB,YAAY,MAAM,eAAe;YAE5F,aAAa;gBACT,iBAAoC;gBACpC,aAAuB;sBACjB,QAAQ,CAAC,UAAU;kBACvB,SAAS,iBAAiB,KAAK;gBACjC,QAAQ;6BACK,KAAK,OAAO,KAAK;AAAA,mBAC3B;yBACM,KAAK,KAAK;AAAA;AACvB,WACD;gBACK,YAAY,CAAC,GAAG,WAAW,OAAO,GAAG,gBAAgB,GAAI,MAAM,cAAc,aAAa,EAAG;qBACxF,SAAS;uBACP,KAAK;gBACZ;yBACS;AAAA;AACjB;qBAGa,YAAY;UACvB,mBAAmB,cAAc;aAC9B,UAAU,YAAY;AAAA;aAEtB;AAAA;;MAIP;AAAA,MACA,MAAM;YACA,CAAC,UAAU,SAAS,YAAY,OAAO;wBAC3B,IAAI,KAAK;AAAA;AACzB;AACF,MACA,EAAE,WAAW;AAAK;UAOd,CAAC,cAAc,eAAe,IAAIC;UAClC,oBAAoBP,QAAI,KAAK;UAC7B,mBAAmB,CAAC,SAAc;sBACtB,IAAI;UAChB,CAAC,MAAM,YAAY,CAAC,aAAa,OAAO;aACrC,SAAS,IAAI;AAAA;wBAEF,QAAQ;AAAA;UAEtB,kBAAkB,CAAC,SAAc;sBACrB,OAAO,MAAM;0BACT,QAAQ;qBACb,KAAK;AAAA,OACnB;WAQI,QAAQ,IAAI;AAAA;gBAGX,iBAAiB;AAAA,MACvB,OAAO;AAAA,MACP,MAAM;AAAA,KACP;UAEK,uBAAuB,CAAC,MAAW;mBAC1B,CAAC,UAAU,KAAK;WACxB,aAAa,CAAC;AAAA;UAUf,qBAAqB,CAAC,MAAqB;YAEzC,EAAE,UAAU;UACd,CAAC,UAAU,SAAS,UAAUQ,mBAAQ,OAAO;qBAClC,IAAI;AAAA;UAKjB,UAAUA,mBAAQ,aAElB,MAAM,YACN,CAAC,YAAY,SACb,WAAW,MAAM,SAAS,GAC1B;cACM,aAAaC,+BAAuB,cAAc,OAAO,WAAW,KAAK;YAE3E,WAAW,iBAAiB,MAAM;qBACzB,WAAW,MAAM;AAAA;AAC9B;UAGE,UAAU,SAAS,QAAQ,OAAO;AACnC,gBAAQ,MAAc,UAAU,CAAC;AAAA;WAE/B,WAAW,CAAC;AAAA;UAOb,YAAYP,aAAS,MAAM;aACxB,MAAM,aAAa,CAAC,MAAM,aAAa,WAAW,MAAM,UAAU,YAAY;AAAA,KACtF;UAEK,UAAUA,aAAS,MAAM;aACtB,eAAe,MAAM,WAAW;AAAA,KACxC;UAEK,iBAAiBA,aAAS,MAAM;UAChC,MAAM,SAAS;eACVZ;AAAA;UAEL,MAAM,cAAc,UAAU,OAAO;eAChCC;AAAA;aAEF,MAAM,cAAcC;AAAA,KAC5B;UAGK,YAAYU,aAAc,MAAM,MAAM,KAAK;UAC3C,YAAYA,aAAc,MAAM,MAAM,KAAK;UAE3C,oBAAoBA,aAAS,MAAM;aAChC,MAAM,eAAe,aAAa,OAAO,OAAO;AAAA,KACxD;WAEM;AAAA,MACL;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAGA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,kBAAkB,MAAM;mBACX,EAAE;sBACC,IAAI,KAAK;aAClB,OAAO;AAAA;AACd,MACA;AAAA,MACA,cAAc,CAAC,SAAmB;qBACnB,IAAI;AAAA;AACnB,MACA,gBAAgB,MAAM;qBACP,KAAK;AAAA;AACpB,MACA,gBAAgB,CAAC,QAAgB;aAC1B,UAAU,GAAG;AAAA;AACpB,MACA,eAAe,MAAM;aACd,eAAe;AAAA;AACtB,MACA,kBAAkB,MAAM;aACjB,kBAAkB;AAAA;AACzB;AACF;AAEJ,CAAC;;;;;;;;;0BAnmBCQ,gBA0JQ;IAzJL,cAAU,GAAK;IACf,WAAW;IACX,SAAS;IACT,eAAW,GAAK,0BAAiB,MAAU,eAAO,GAAM,kCAAS,MAAiC,mBAAS,WAAgB,gCAAS;AAAA,IAGpI,eAAa;IACd,mBAAgB;AAAA,IACf,iBAAe;;IAiGL,OAAKC,YACd,MA6CO;AAAA,MA7CPC,eA6CO;cA3CqB;iBAA8B;kBAA0B;uBAAoB;gBAAiC;qBAAsB;iBAAuB;kBAA6B;kBAAoC;uBAAyC,kBAAY;WAF5S,MA6CO;AAAA,QA9BLC,gBA6Be;UA5BZ,IAAI;UACL,KAAI;AAAA,UACH,cAAY;UACZ,MAAM;UACN,OAAO;UACP,UAAU;UACV,kBAAgB;UAChB,SAAS,eAAO,KAAQ;UACxB,QAAQ;UACR,gBAAc;UACd,wBAAsB;UACtB,QAAQ;UACR,eAAa;UACb,MAAM;UACN,cAAY;UACZ,WAAW;UACX,aAAW;UACX,UAAQ;UACR,SAAK,sCAAE,kBAAY;UACnB,eAAe;UACf,kBAAkB;UAClB,gBAAe;;UAEL,OAAKF,YACd,MAEO;AAAA,YAFPC,eAEO,6BAFP,MAEO;AAAA,cADLC,gBAA+E;gBAAlE,MAAK;AAAA,gBAAS,MAAM,eAAU,yBAAoB;;;;;;;;yBAzIzE,MA8FM;AAAA,MA9FNC,uBA8FM,OA9FNC,eA8FM;AAAA,QA7FJ,KAAI;AAAA,QACH,OAAK;AAAA,UAAY;;aAAgC,iBAAY;gBAAyB,kBAAa,cAAS;gBAAoB,0BAAqB,iBAAO;AAAA,gBAAyB,0BAAS,CAAa;gBAAwB,4BAAuB;gBAAwB,wBAAmB;gBAAyB,8BAAyB;gBAA0B,2BAAsB;gBAA4B,4BAAuB;gBAAwB,6BAAS,EAAiB;gBAAyB,8BAAyB;gBAAyB,8BAAyB;gBAAyB,2BAAS,EAAe;gBAAuB,+BAAS,EAAmB;gBAA0B,mCAAS,CAAsB;gBAA2B,uBAAkB,2BAAiB;AAAA;;SAqBpyB,aAAM;AAAA,QACb,OAAO;QACP,UAAU,gBAAQ;QAClB,aAAS,uCAAE;QACX,WAAO,uCAAE;;UAGA,+BADVC,uBASO;;UAPJ,OAAKC;gBAAkB,yBAAS;AAAA,gBAA+B,+BAA0B;gBAA0B,kCAA6B;;+BAM9I,UAAK,WAGS,oCAAnBD,uBAIOE;UALPC;UACAL,uBAIO;YAJwB,KAAI;AAAA,YAAU,OAAKG,sBAAK,uBAAS;AAAA;YAC9DJ,gBAEQ;mCADN,MAA8B;AAAA,kCAA9BH,gBAA8BU,4BAAd,eAAU;;;;;;QAG9BP,gBAkCY;UAjCV,KAAI;AAAA,UACH,UAAU;UACV,UAAU;UACV,MAAM;UACN,QAAQ;UACR,cAAY;UACZ,YAAY;UACZ,gBAAc;UACd,aAAa,eAAU,yBAAoB;UAC3C,iBAAe;UACf,uBAAqB;UACrB,uBAAqB;UACrB,iBAAe;UACf,mBAAiB;UACjB,yBAAuB;UACvB,uBAAqB;UACrB,cAAY;UACZ,uBAAqB;UACrB,eAAa;UACb,gBAAc;UACd,aAAW;UACX,qBAAmB;UACnB,oBAAkB;UAClB,kBAAgB;UAChB,cAAa;UACb,UAAQ;UACR,gBAAe;;UAEL,aAAWF,YACpB,MAEO;AAAA,YAFPC,eAEO,gCAFP,MAEO;AAAA,sDADF,eAAU,yBAAoB,gBAAW;;;;;QAKlDO;QACY,mCAAZH,uBAIO;UAJgB,KAAI;AAAA,UAAS,OAAKC,sBAAK,sBAAS;AAAA;UACrDJ,gBAEQ,oBAFA,MAAM;iCACZ,MAAkC;AAAA,gCAAlCH,gBAAkCU,4BAAlB,mBAAc;;;;;QAGlCD;QACY,mCAAZH,uBAKO;UALgB,KAAI;AAAA,UAAS,OAAKC,sBAAK,sBAAS;AAAA,UAAW,aAAS,4CAAV;aAAkB;UAAE,SAAK,uCAAE;;UAC1FJ,gBAGQ;iCAFN,MAA8C;AAAA,cAAb,mCAAjCH,gBAA8CU,4BAA9B,cAAS,oCACzBV,gBAAkB;;;;;;;;;;;;;;"}
|
|
@@ -42,10 +42,9 @@ const _sfc_main = vue.defineComponent({
|
|
|
42
42
|
if (width.value) {
|
|
43
43
|
style.width = typeof width.value === "number" ? `${width.value}px` : width.value;
|
|
44
44
|
} else if (props.columns.some((x) => x.fixed)) {
|
|
45
|
-
style.width = "max-content";
|
|
46
45
|
style.minWidth = "100%";
|
|
47
46
|
}
|
|
48
|
-
if (props.columns.some((x) => x.ellipsis) || props.columns.some((x) => x.resizable)) {
|
|
47
|
+
if (props.columns.some((x) => x.ellipsis) || props.columns.some((x) => x.resizable) || props.columns.some((x) => x.fixed)) {
|
|
49
48
|
style.tableLayout = "fixed";
|
|
50
49
|
} else {
|
|
51
50
|
style.tableLayout = "auto";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseTable.js","sources":["../../../../src/components/Table/BaseTable.vue"],"sourcesContent":["<template>\n <table ref=\"tableRef\" :style=\"tableStyle\">\n <ColGroup :columns=\"columns\" :is-head-table=\"!showBody\" />\n <TableHeader v-if=\"showHeader\" :columns=\"getColumns()\" />\n <TableBody v-if=\"showBody\" :columns=\"getColumns()\" />\n </table>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, inject, ref } from 'vue';\nimport type { PropType, CSSProperties } from 'vue';\nimport ColGroup from './tableUnits/ColGroup.vue';\nimport TableHeader from './tableUnits/TableHeader.vue';\nimport TableBody from './tableUnits/TableBody.vue';\n// import useResizeObserver from '../base/hooks/useResizeObserver';\nimport type { InnerColumn, TableContext } from './Table.type';\nimport { getWidth } from './hooks/useTableResize';\n// import { debounce } from '../../utils/tools';\n\nexport default defineComponent({\n name: 'BaseTable',\n components: {\n ColGroup,\n TableHeader,\n TableBody\n },\n props: {\n showHeader: {\n type: Boolean,\n default: false\n },\n showBody: {\n type: Boolean,\n default: false\n },\n columns: {\n type: Array as PropType<InnerColumn[]>,\n default: () => [] as InnerColumn[]\n }\n },\n setup(props) {\n const {\n prefixCls,\n props: { width },\n size: { tableWidth }\n } = inject<TableContext>('tableContext', {} as TableContext);\n const tableRef = ref<HTMLElement | null>(null);\n\n const tableStyle = computed(() => {\n const style = {} as CSSProperties;\n if (width.value) {\n style.width = typeof width.value === 'number' ? `${width.value}px` : width.value;\n } else if (props.columns.some((x) => x.fixed)) {\n style.width = 'max-content';\n style.minWidth = '100%';\n }\n if (props.columns.some((x) => x.ellipsis) || props.columns.some((x) => x.resizable)) {\n style.tableLayout = 'fixed';\n } else {\n style.tableLayout = 'auto';\n }\n\n return style;\n });\n\n const getColumns = () => {\n let left = 0;\n let right = props.columns\n .filter((x) => x.fixed === 'right')\n .reduce((sum, column) => {\n const w = getWidth(column.width ?? column.minWidth, tableWidth.value);\n return sum + w;\n }, 0);\n return props.columns.map((column) => {\n const rst = {\n ...column,\n className: column.fixed\n ? `${column.className || ''} ${prefixCls.value}-fixed-column ${prefixCls.value}-fixed-column-${column.fixed}`\n : column.className\n };\n if (column.fixed === 'left') {\n rst.left = left;\n const w = getWidth(column.width ?? column.minWidth, tableWidth.value);\n left += w;\n if (column.lastLeft) {\n rst.className = `${rst.className || ''} ${prefixCls.value}-fixed-column-${column.fixed}-last`;\n }\n }\n if (column.fixed === 'right') {\n const w = getWidth(column.width ?? column.minWidth, tableWidth.value);\n right -= w;\n rst.right = right;\n if (column.firstRight) {\n rst.className = `${rst.className || ''} ${prefixCls.value}-fixed-column-${column.fixed}-first`;\n }\n }\n\n return rst;\n });\n };\n\n // const debouncedHandleResize = debounce(syncFixedTableRowHeight, 150);\n // useResizeObserver(tableRef, debouncedHandleResize);\n\n return {\n tableRef,\n prefixCls,\n tableStyle,\n getColumns\n };\n }\n});\n</script>\n"],"names":["defineComponent","ColGroup","TableHeader","TableBody","inject","ref","computed","getWidth","_createElementBlock","_normalizeStyle","_createVNode","_createBlock"],"mappings":";;;;;;;;;;;AAmBA,MAAK,YAAaA,oBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,cACVC;AAAA,iBACAC;AAAA,eACAC;AAAA;AACF,EACA,OAAO;AAAA,IACL,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM;AAAC;AAClB;AACF,EACA,MAAM,OAAO;UACL;AAAA,MACJ;AAAA,MACA,OAAO,EAAE;AAAM,MACf,MAAM,EAAE;AAAW,QACjBC,WAAqB,gBAAgB,EAAkB;UACrD,WAAWC,QAAwB,IAAI;UAEvC,aAAaC,aAAS,MAAM;YAC1B,QAAQ;UACV,MAAM,OAAO;cACT,QAAQ,OAAO,MAAM,UAAU,WAAW,GAAG,MAAM,YAAY,MAAM;AAAA,iBAClE,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG;
|
|
1
|
+
{"version":3,"file":"BaseTable.js","sources":["../../../../src/components/Table/BaseTable.vue"],"sourcesContent":["<template>\n <table ref=\"tableRef\" :style=\"tableStyle\">\n <ColGroup :columns=\"columns\" :is-head-table=\"!showBody\" />\n <TableHeader v-if=\"showHeader\" :columns=\"getColumns()\" />\n <TableBody v-if=\"showBody\" :columns=\"getColumns()\" />\n </table>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, inject, ref } from 'vue';\nimport type { PropType, CSSProperties } from 'vue';\nimport ColGroup from './tableUnits/ColGroup.vue';\nimport TableHeader from './tableUnits/TableHeader.vue';\nimport TableBody from './tableUnits/TableBody.vue';\n// import useResizeObserver from '../base/hooks/useResizeObserver';\nimport type { InnerColumn, TableContext } from './Table.type';\nimport { getWidth } from './hooks/useTableResize';\n// import { debounce } from '../../utils/tools';\n\nexport default defineComponent({\n name: 'BaseTable',\n components: {\n ColGroup,\n TableHeader,\n TableBody\n },\n props: {\n showHeader: {\n type: Boolean,\n default: false\n },\n showBody: {\n type: Boolean,\n default: false\n },\n columns: {\n type: Array as PropType<InnerColumn[]>,\n default: () => [] as InnerColumn[]\n }\n },\n setup(props) {\n const {\n prefixCls,\n props: { width },\n size: { tableWidth }\n } = inject<TableContext>('tableContext', {} as TableContext);\n const tableRef = ref<HTMLElement | null>(null);\n\n const tableStyle = computed(() => {\n const style = {} as CSSProperties;\n if (width.value) {\n style.width = typeof width.value === 'number' ? `${width.value}px` : width.value;\n } else if (props.columns.some((x) => x.fixed)) {\n // style.width = 'max-content';\n style.minWidth = '100%';\n }\n if (props.columns.some((x) => x.ellipsis) || props.columns.some((x) => x.resizable) || props.columns.some((x) => x.fixed)) {\n style.tableLayout = 'fixed';\n } else {\n style.tableLayout = 'auto';\n }\n\n return style;\n });\n\n const getColumns = () => {\n let left = 0;\n let right = props.columns\n .filter((x) => x.fixed === 'right')\n .reduce((sum, column) => {\n const w = getWidth(column.width ?? column.minWidth, tableWidth.value);\n return sum + w;\n }, 0);\n return props.columns.map((column) => {\n const rst = {\n ...column,\n className: column.fixed\n ? `${column.className || ''} ${prefixCls.value}-fixed-column ${prefixCls.value}-fixed-column-${column.fixed}`\n : column.className\n };\n if (column.fixed === 'left') {\n rst.left = left;\n const w = getWidth(column.width ?? column.minWidth, tableWidth.value);\n left += w;\n if (column.lastLeft) {\n rst.className = `${rst.className || ''} ${prefixCls.value}-fixed-column-${column.fixed}-last`;\n }\n }\n if (column.fixed === 'right') {\n const w = getWidth(column.width ?? column.minWidth, tableWidth.value);\n right -= w;\n rst.right = right;\n if (column.firstRight) {\n rst.className = `${rst.className || ''} ${prefixCls.value}-fixed-column-${column.fixed}-first`;\n }\n }\n\n return rst;\n });\n };\n\n // const debouncedHandleResize = debounce(syncFixedTableRowHeight, 150);\n // useResizeObserver(tableRef, debouncedHandleResize);\n\n return {\n tableRef,\n prefixCls,\n tableStyle,\n getColumns\n };\n }\n});\n</script>\n"],"names":["defineComponent","ColGroup","TableHeader","TableBody","inject","ref","computed","getWidth","_createElementBlock","_normalizeStyle","_createVNode","_createBlock"],"mappings":";;;;;;;;;;;AAmBA,MAAK,YAAaA,oBAAa;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,cACVC;AAAA,iBACAC;AAAA,eACAC;AAAA;AACF,EACA,OAAO;AAAA,IACL,YAAY;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA;AACX,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM;AAAC;AAClB;AACF,EACA,MAAM,OAAO;UACL;AAAA,MACJ;AAAA,MACA,OAAO,EAAE;AAAM,MACf,MAAM,EAAE;AAAW,QACjBC,WAAqB,gBAAgB,EAAkB;UACrD,WAAWC,QAAwB,IAAI;UAEvC,aAAaC,aAAS,MAAM;YAC1B,QAAQ;UACV,MAAM,OAAO;cACT,QAAQ,OAAO,MAAM,UAAU,WAAW,GAAG,MAAM,YAAY,MAAM;AAAA,iBAClE,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG;cAEvC,WAAW;AAAA;UAEf,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,QAAQ,KAAK,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,QAAQ,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG;cACnH,cAAc;AAAA,aACf;cACC,cAAc;AAAA;aAGf;AAAA,KACR;UAEK,aAAa,MAAM;UACnB,OAAO;UACP,QAAQ,MAAM,QACf,OAAO,CAAC,MAAM,EAAE,UAAU,OAAO,EACjC,OAAO,CAAC,KAAK,WAAW;AA5DjC;cA6DgB,IAAIC,yBAAS,YAAO,UAAP,YAAgB,OAAO,UAAU,WAAW,KAAK;eAC7D,MAAM;AAAA,SACZ,CAAC;aACC,MAAM,QAAQ,IAAI,CAAC,WAAW;AAhE3C;cAiEc,MAAM;AAAA,UACV,GAAG;AAAA,UACH,WAAW,OAAO,QACd,GAAG,OAAO,aAAa,MAAM,UAAU,sBAAsB,UAAU,sBAAsB,OAAO,UACpG,OAAO;AAAA;YAET,OAAO,UAAU,QAAQ;cACvB,OAAO;gBACL,IAAIA,yBAAS,YAAO,UAAP,YAAgB,OAAO,UAAU,WAAW,KAAK;kBAC5D;cACJ,OAAO,UAAU;gBACf,YAAY,GAAG,IAAI,aAAa,MAAM,UAAU,sBAAsB,OAAO;AAAA;AACnF;YAEE,OAAO,UAAU,SAAS;gBACtB,IAAIA,yBAAS,YAAO,UAAP,YAAgB,OAAO,UAAU,WAAW,KAAK;mBAC3D;cACL,QAAQ;cACR,OAAO,YAAY;gBACjB,YAAY,GAAG,IAAI,aAAa,MAAM,UAAU,sBAAsB,OAAO;AAAA;AACnF;eAGK;AAAA,OACR;AAAA;WAMI;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AACF;AAEJ,CAAC;;;;;0BA9GCC,uBAIQ;IAJD,KAAI;AAAA,IAAY,OAAKC,mBAAE,eAAU;AAAA;IACtCC,gBAA0D;MAA/C,SAAS;MAAU,iBAAa,CAAG;;IAC3B,oCAAnBC,gBAAyD;;MAAzB,SAAS;AAAU;IAClC,kCAAjBA,gBAAqD;;MAAzB,SAAS;AAAU;;;;;;;"}
|