@hkyhy/marsun-components-core 0.1.30 → 0.1.32

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.
Files changed (42) hide show
  1. package/dist/components/Filter/FilterCascader/index.d.ts +40 -0
  2. package/dist/components/Filter/FilterCascader/index.js +328 -0
  3. package/dist/components/Filter/FilterCascader/index.js.map +1 -0
  4. package/dist/components/Filter/FilterCascader/style.module.scss.js +14 -0
  5. package/dist/components/Filter/FilterCascader/style.module.scss.js.map +1 -0
  6. package/dist/components/Filter/FilterPopover/index.d.ts +2 -0
  7. package/dist/components/Filter/FilterPopover/index.js +22 -21
  8. package/dist/components/Filter/FilterPopover/index.js.map +1 -1
  9. package/dist/components/Filter/FilterSelect/index.d.ts +6 -0
  10. package/dist/components/Filter/FilterSelect/index.js +201 -197
  11. package/dist/components/Filter/FilterSelect/index.js.map +1 -1
  12. package/dist/components/Filter/FilterSelect/style.module.scss.js +16 -15
  13. package/dist/components/Filter/FilterSelect/style.module.scss.js.map +1 -1
  14. package/dist/components/Filter/FilterTreeSelect/index.d.ts +6 -0
  15. package/dist/components/Filter/FilterTreeSelect/index.js +220 -203
  16. package/dist/components/Filter/FilterTreeSelect/index.js.map +1 -1
  17. package/dist/components/Filter/FilterTreeSelect/style.module.scss.js +15 -14
  18. package/dist/components/Filter/FilterTreeSelect/style.module.scss.js.map +1 -1
  19. package/dist/components/Filter/FilterTrigger/index.d.ts +3 -0
  20. package/dist/components/Filter/FilterTrigger/index.js +57 -44
  21. package/dist/components/Filter/FilterTrigger/index.js.map +1 -1
  22. package/dist/components/Filter/FilterTrigger/style.module.scss.js +5 -4
  23. package/dist/components/Filter/FilterTrigger/style.module.scss.js.map +1 -1
  24. package/dist/components/Filter/index.d.ts +3 -0
  25. package/dist/components/Table/ColumnConfigPanel.d.ts +13 -0
  26. package/dist/components/Table/ColumnConfigPanel.js +260 -0
  27. package/dist/components/Table/ColumnConfigPanel.js.map +1 -0
  28. package/dist/components/Table/Table.d.ts +16 -2
  29. package/dist/components/Table/Table.js +106 -28
  30. package/dist/components/Table/Table.js.map +1 -1
  31. package/dist/components/Table/columnConfig.module.scss.js +38 -0
  32. package/dist/components/Table/columnConfig.module.scss.js.map +1 -0
  33. package/dist/components/Table/columnConfigTypes.d.ts +22 -0
  34. package/dist/components/Table/columnConfigUtils.d.ts +25 -0
  35. package/dist/components/Table/columnConfigUtils.js +141 -0
  36. package/dist/components/Table/columnConfigUtils.js.map +1 -0
  37. package/dist/components/Table/index.d.ts +2 -1
  38. package/dist/index.js +258 -251
  39. package/dist/index.js.map +1 -1
  40. package/dist/marsun-components-core.css +1 -1
  41. package/dist/styles/global.css +1 -1
  42. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterSelect/index.tsx"],"sourcesContent":["import { Check, X } from '@/components/Icons';\nimport { Checkbox, Input, Space } from 'antd';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport PersonOptionRow from '../../Form/PersonOptionRow';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps, FilterLoadDataContext, FilterOption, PersonOption } from '../types';\nimport { resolveFilterVisible } from '../types';\nimport { useFilterFieldBridge, useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { Search } = Input;\n\nfunction formatPersonValueLabel(opt: PersonOption): string {\n const parts = [opt.label];\n if (opt.departmentName) parts.push(opt.departmentName);\n return parts.join(' · ');\n}\n\nfunction matchPersonOptionSearch(opt: PersonOption, keyword: string): boolean {\n const lower = keyword.toLowerCase();\n return [opt.label, opt.departmentName, opt.email, opt.phone, opt.employeeId]\n .filter(Boolean)\n .some((s) => String(s).toLowerCase().includes(lower));\n}\n\ntype FilterSelectValue = string | number | (string | number)[] | undefined;\n\nexport type { FilterSelectValue };\n\nfunction arraysEqual(a?: (string | number)[], b?: (string | number)[]): boolean {\n if (!a?.length && !b?.length) return true;\n if (!a || !b || a.length !== b.length) return false;\n const sortedA = [...a].map(String).sort();\n const sortedB = [...b].map(String).sort();\n return sortedA.every((v, i) => v === sortedB[i]);\n}\n\ninterface FilterSelectProps extends BaseFilterProps {\n /** 静态选项;与 loadData 二选一(同时存在时以 options 为准) */\n options?: FilterOption[];\n /** 按依赖值动态拉取选项 */\n loadData?: (ctx: FilterLoadDataContext) => Promise<FilterOption[]>;\n /** loadData 是否启用;默认 true */\n enabled?: boolean;\n value?: FilterSelectValue;\n onChange?: (value: FilterSelectValue) => void;\n /** 默认值:与默认值相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValue?: string | number;\n /** 多选默认值:与默认集合相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValues?: (string | number)[];\n /** 为 true 时,value 等于默认仍展示在「您已选择」并保持选中态 */\n showDefaultAsSelected?: boolean;\n placeholder?: string;\n searchable?: boolean;\n /** 是否多选 */\n multiple?: boolean;\n /** 多选至少保留项数;达到下限时不允许移除已选标签 */\n minSelection?: number;\n /** 人员选项:展示部门与联系方式 */\n variant?: 'default' | 'person';\n /**\n * 面板内嵌从属条件(与 search 同层:search 下方、选项列表上方)。\n * 禁止再嵌 Filter*(双重 Popover)。\n */\n panelExtra?: React.ReactNode;\n /** 面板宽度;有 panelExtra 时默认 460 */\n panelWidth?: number;\n}\n\nfunction toMultiArray(value: FilterSelectValue): (string | number)[] {\n if (Array.isArray(value)) return value;\n if (value != null && value !== '') return [value];\n return [];\n}\n\nfunction toDisplayValue(\n value: FilterSelectValue,\n defaultValue: string | number | undefined,\n defaultValues: (string | number)[] | undefined,\n multiple: boolean,\n showDefaultAsSelected: boolean,\n): string | number | (string | number)[] | undefined {\n if (multiple) {\n const arr = toMultiArray(value);\n // 等于默认集合时:对外视为「未筛选」(不亮 trigger / 不进「您已选择」)\n if (!showDefaultAsSelected && defaultValues?.length && arraysEqual(arr, defaultValues)) {\n return [];\n }\n return arr;\n }\n if (!showDefaultAsSelected && defaultValue !== undefined && value === defaultValue) {\n return undefined;\n }\n return value;\n}\n\n/** 草稿/面板用真实 value,避免 defaultValues 折叠成 [] 后全选勾选丢失 */\nfunction toDraftValue(\n value: FilterSelectValue,\n defaultValue: string | number | undefined,\n defaultValues: (string | number)[] | undefined,\n multiple: boolean,\n): string | number | (string | number)[] | undefined {\n if (multiple) return toMultiArray(value);\n return toDisplayValue(value, defaultValue, defaultValues, false, true);\n}\n\nfunction formatValueLabel(\n displayVal: string | number | (string | number)[] | undefined,\n options: FilterOption[],\n multiple: boolean,\n isPersonVariant: boolean,\n defaultValues?: (string | number)[],\n): string {\n if (multiple) {\n const arr = (displayVal as (string | number)[]) || [];\n if (!arr.length) return '';\n // 全选默认集合时用「全部」,避免「您已选择」被几十个厂名撑满\n if (defaultValues?.length && arraysEqual(arr, defaultValues)) {\n return '全部';\n }\n return arr\n .map((v) => options.find((o) => String(o.value) === String(v))?.label ?? String(v))\n .join('、');\n }\n if (displayVal == null) return '';\n const opt = options.find((o) => String(o.value) === String(displayVal));\n if (!opt) return String(displayVal);\n return isPersonVariant ? formatPersonValueLabel(opt as PersonOption) : opt.label;\n}\n\nconst FilterSelect: React.FC<FilterSelectProps> = ({\n filterKey,\n label,\n options: optionsProp,\n loadData,\n enabled = true,\n value,\n onChange,\n defaultValue,\n defaultValues,\n showDefaultAsSelected = false,\n searchable = false,\n multiple = false,\n minSelection,\n variant = 'default',\n active,\n hidden,\n display,\n dependsOn,\n clearOnDepsChange = true,\n panelExtra,\n panelWidth,\n}) => {\n const isPersonVariant = variant === 'person';\n const [open, setOpen] = useState(false);\n const [searchText, setSearchText] = useState('');\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const resolvedPanelWidth = panelWidth ?? (panelExtra ? 460 : undefined);\n\n const { resolvedLabel, values, depsKey } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => onChangeRef.current?.(undefined),\n });\n\n const [loadedOptions, setLoadedOptions] = useState<FilterOption[]>([]);\n const loadDataRef = useRef(loadData);\n loadDataRef.current = loadData;\n\n useEffect(() => {\n if (!loadDataRef.current || optionsProp != null || !enabled) return;\n let cancelled = false;\n (async () => {\n try {\n const next = await loadDataRef.current!({ values });\n if (!cancelled) setLoadedOptions(next ?? []);\n } catch {\n if (!cancelled) setLoadedOptions([]);\n }\n })();\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [depsKey, enabled, optionsProp, loadData]);\n\n const options = optionsProp ?? loadedOptions;\n\n const displayValue = toDisplayValue(\n value,\n defaultValue,\n defaultValues,\n multiple,\n showDefaultAsSelected,\n );\n const [localValue, setLocalValue] = useState<string | number | (string | number)[] | undefined>(\n () => toDraftValue(value, defaultValue, defaultValues, multiple) ?? (multiple ? [] : undefined),\n );\n\n // ── 自动注册到 CommonFilter ──\n const registerFn = useFilterRegister();\n const handleRemove = useMemo(() => {\n const selectedArr = Array.isArray(displayValue)\n ? displayValue\n : displayValue != null && displayValue !== ''\n ? [displayValue]\n : [];\n const canRemove = !multiple || minSelection == null || selectedArr.length > minSelection;\n return () => {\n if (!canRemove) return;\n onChangeRef.current?.(undefined);\n };\n }, [displayValue, minSelection, multiple]);\n\n const revertToCommitted = () => {\n setLocalValue(\n toDraftValue(value, defaultValue, defaultValues, multiple) ?? (multiple ? [] : undefined),\n );\n setSearchText('');\n };\n\n // 同步外部 value 到内部 localValue(多选用真实 value,保留 defaultValues 全选勾选)\n useEffect(() => {\n const nextDraft = toDraftValue(value, defaultValue, defaultValues, multiple);\n setLocalValue(nextDraft ?? (multiple ? [] : undefined));\n const nextDisplay = toDisplayValue(\n value,\n defaultValue,\n defaultValues,\n multiple,\n showDefaultAsSelected,\n );\n if (\n nextDisplay === undefined ||\n nextDisplay === null ||\n (Array.isArray(nextDisplay) && nextDisplay.length === 0)\n ) {\n setSearchText('');\n }\n }, [value, defaultValue, defaultValues, multiple, showDefaultAsSelected]);\n\n const committedValueLabel = useMemo(\n () => formatValueLabel(displayValue, options, multiple, isPersonVariant, defaultValues),\n [options, displayValue, multiple, isPersonVariant, defaultValues],\n );\n\n useEffect(() => {\n if (!registerFn) return;\n const ctx = { filterKey, label: resolvedLabel, value };\n if (!resolveFilterVisible({ display, hidden }, ctx)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (committedValueLabel) {\n const selectedArr = Array.isArray(displayValue)\n ? displayValue\n : displayValue != null && displayValue !== ''\n ? [displayValue]\n : [];\n const removable = !multiple || minSelection == null || selectedArr.length > minSelection;\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel: committedValueLabel,\n onRemove: handleRemove,\n removable,\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [committedValueLabel, filterKey, resolvedLabel, hidden, display, handleRemove]);\n\n const visibilityCtx = { filterKey, label: resolvedLabel, value };\n if (!resolveFilterVisible({ display, hidden }, visibilityCtx)) return null;\n\n const filteredOptions = searchText\n ? options.filter((opt) =>\n isPersonVariant\n ? matchPersonOptionSearch(opt as PersonOption, searchText)\n : opt.label.toLowerCase().includes(searchText.toLowerCase()),\n )\n : options;\n\n const handleConfirm = () => {\n onChange?.(localValue as FilterSelectValue);\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen && multiple) {\n revertToCommitted();\n }\n setOpen(nextOpen);\n };\n\n const handleClickOption = (optVal: string | number) => {\n if (!multiple) {\n const isDefaultOption = defaultValue !== undefined && optVal === defaultValue;\n let next: string | number | undefined;\n if (localValue === optVal || isDefaultOption) {\n next = undefined;\n } else {\n next = optVal;\n }\n setLocalValue(next);\n onChange?.(next);\n setOpen(false);\n }\n };\n\n const handleToggleMulti = (optVal: string | number) => {\n const arr = (localValue as (string | number)[]) || [];\n const has = arr.some((v) => String(v) === String(optVal));\n if (has && minSelection != null && arr.length <= minSelection) {\n return;\n }\n const next = has ? arr.filter((v) => String(v) !== String(optVal)) : [...arr, optVal];\n setLocalValue(next);\n };\n\n const localMultiArr = (Array.isArray(localValue) ? localValue : []) as (string | number)[];\n const filteredSelectedCount = filteredOptions.filter((opt) =>\n localMultiArr.some((v) => String(v) === String(opt.value)),\n ).length;\n const allFilteredSelected =\n filteredOptions.length > 0 && filteredSelectedCount === filteredOptions.length;\n const someFilteredSelected = filteredSelectedCount > 0 && !allFilteredSelected;\n\n const handleToggleAll = (checked: boolean) => {\n const arr = localMultiArr;\n const filteredVals = filteredOptions.map((o) => o.value);\n if (checked) {\n const seen = new Set(arr.map(String));\n const next = [...arr];\n for (const v of filteredVals) {\n if (!seen.has(String(v))) {\n next.push(v);\n seen.add(String(v));\n }\n }\n setLocalValue(next);\n return;\n }\n const removeSet = new Set(filteredVals.map(String));\n let next = arr.filter((v) => !removeSet.has(String(v)));\n if (minSelection != null && next.length < minSelection) {\n next = arr.slice(0, minSelection);\n }\n setLocalValue(next);\n };\n\n const isActive = multiple\n ? Array.isArray(displayValue) && displayValue.length > 0\n : displayValue != null && displayValue !== '';\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={active || isActive}\n open={open}\n onOpenChange={handleOpenChange}\n width={resolvedPanelWidth}\n onConfirm={multiple ? handleConfirm : undefined}\n onReset={multiple ? handleDiscardDraft : undefined}\n >\n {searchable && (\n <Search\n placeholder={`搜索${resolvedLabel}`}\n allowClear\n size=\"middle\"\n className={classNames('filter-select-search', styles['filter-select-search'])}\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n />\n )}\n {panelExtra ? (\n <div\n className={classNames('filter-select-panel-extra', styles['filter-select-panel-extra'])}\n >\n {panelExtra}\n </div>\n ) : null}\n\n <div className={classNames('filter-select-options', styles['filter-select-options'])}>\n {multiple && filteredOptions.length > 0 && (\n <div\n className={classNames(\n 'filter-select-option',\n styles['filter-select-option'],\n 'filter-select-select-all',\n styles['filter-select-select-all'],\n )}\n onClick={() => handleToggleAll(!allFilteredSelected)}\n >\n <Checkbox\n checked={allFilteredSelected}\n indeterminate={someFilteredSelected}\n onChange={(e) => handleToggleAll(e.target.checked)}\n onClick={(e) => e.stopPropagation()}\n />\n <span>全选</span>\n </div>\n )}\n {filteredOptions.map((opt) => (\n <div\n key={String(opt.value)}\n className={classNames(\n 'filter-select-option',\n styles['filter-select-option'],\n !multiple &&\n localValue === opt.value &&\n classNames(\n 'filter-select-option-selected',\n styles['filter-select-option-selected'],\n ),\n )}\n onClick={() => (multiple ? handleToggleMulti(opt.value) : handleClickOption(opt.value))}\n >\n {multiple && (\n <Checkbox\n checked={localMultiArr.some((v) => String(v) === String(opt.value))}\n onChange={() => handleToggleMulti(opt.value)}\n onClick={(e) => e.stopPropagation()}\n />\n )}\n {isPersonVariant ? (\n <PersonOptionRow option={opt as PersonOption} />\n ) : (\n <span>{opt.label}</span>\n )}\n {!multiple && !isPersonVariant && localValue === opt.value && (\n <Check\n className={classNames(\n 'filter-select-option-check',\n styles['filter-select-option-check'],\n )}\n />\n )}\n </div>\n ))}\n {filteredOptions.length === 0 && (\n <div className={classNames('filter-select-empty', styles['filter-select-empty'])}>\n 暂无数据\n </div>\n )}\n </div>\n\n {multiple && localMultiArr.length > 0 && (\n <div\n className={classNames('filter-select-selected-bar', styles['filter-select-selected-bar'])}\n >\n <div\n className={classNames(\n 'filter-select-selected-label',\n styles['filter-select-selected-label'],\n )}\n >\n 已选:\n </div>\n <div\n className={classNames(\n 'filter-select-selected-tags',\n styles['filter-select-selected-tags'],\n )}\n >\n <Space size={[4, 4]} wrap>\n {localMultiArr.map((v) => {\n const opt = options.find((o) => String(o.value) === String(v));\n const tagRemovable = minSelection == null || localMultiArr.length > minSelection;\n return (\n <span\n key={String(v)}\n className={classNames(\n 'filter-select-selected-tag',\n styles['filter-select-selected-tag'],\n !tagRemovable && styles['filter-select-selected-tag-disabled'],\n )}\n onClick={() => tagRemovable && handleToggleMulti(v)}\n >\n {opt?.label ?? String(v)}\n <X\n className={classNames(\n 'filter-select-selected-remove',\n styles['filter-select-selected-remove'],\n !tagRemovable && styles['filter-select-selected-remove-disabled'],\n )}\n />\n </span>\n );\n })}\n </Space>\n </div>\n </div>\n )}\n </FilterPopover>\n );\n};\n\nexport default FilterSelect;\nexport type { FilterSelectProps };\n"],"names":["Search","Input","formatPersonValueLabel","opt","parts","matchPersonOptionSearch","keyword","lower","s","arraysEqual","a","b","sortedA","sortedB","v","toMultiArray","value","toDisplayValue","defaultValue","defaultValues","multiple","showDefaultAsSelected","arr","toDraftValue","formatValueLabel","displayVal","options","isPersonVariant","_a","o","FilterSelect","filterKey","label","optionsProp","loadData","enabled","onChange","searchable","minSelection","variant","active","hidden","display","dependsOn","clearOnDepsChange","panelExtra","panelWidth","open","setOpen","useState","searchText","setSearchText","onChangeRef","useRef","resolvedPanelWidth","resolvedLabel","values","depsKey","useFilterFieldBridge","loadedOptions","setLoadedOptions","loadDataRef","useEffect","cancelled","next","displayValue","localValue","setLocalValue","registerFn","useFilterRegister","handleRemove","useMemo","selectedArr","canRemove","revertToCommitted","nextDraft","nextDisplay","committedValueLabel","resolveFilterVisible","removable","filteredOptions","handleConfirm","handleDiscardDraft","handleOpenChange","nextOpen","handleClickOption","optVal","isDefaultOption","handleToggleMulti","has","localMultiArr","filteredSelectedCount","allFilteredSelected","someFilteredSelected","handleToggleAll","checked","filteredVals","seen","removeSet","isActive","jsxs","FilterPopover","jsx","classNames","styles","Checkbox","e","PersonOptionRow","Check","Space","tagRemovable","X"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterSelect/index.tsx"],"sourcesContent":["import { Check, X } from '@/components/Icons';\nimport { Empty } from '@/components/Empty';\nimport { Checkbox, Input, Space, Spin } from 'antd';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport PersonOptionRow from '../../Form/PersonOptionRow';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps, FilterLoadDataContext, FilterOption, PersonOption } from '../types';\nimport { resolveFilterVisible } from '../types';\nimport { useFilterFieldBridge, useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { Search } = Input;\n\nfunction formatPersonValueLabel(opt: PersonOption): string {\n const parts = [opt.label];\n if (opt.departmentName) parts.push(opt.departmentName);\n return parts.join(' · ');\n}\n\nfunction matchPersonOptionSearch(opt: PersonOption, keyword: string): boolean {\n const lower = keyword.toLowerCase();\n return [opt.label, opt.departmentName, opt.email, opt.phone, opt.employeeId]\n .filter(Boolean)\n .some((s) => String(s).toLowerCase().includes(lower));\n}\n\ntype FilterSelectValue = string | number | (string | number)[] | undefined;\n\nexport type { FilterSelectValue };\n\nfunction arraysEqual(a?: (string | number)[], b?: (string | number)[]): boolean {\n if (!a?.length && !b?.length) return true;\n if (!a || !b || a.length !== b.length) return false;\n const sortedA = [...a].map(String).sort();\n const sortedB = [...b].map(String).sort();\n return sortedA.every((v, i) => v === sortedB[i]);\n}\n\ninterface FilterSelectProps extends BaseFilterProps {\n /** 静态选项;与 loadData 二选一(同时存在时以 options 为准) */\n options?: FilterOption[];\n /** 按依赖值动态拉取选项 */\n loadData?: (ctx: FilterLoadDataContext) => Promise<FilterOption[]>;\n /** loadData 是否启用;默认 true */\n enabled?: boolean;\n value?: FilterSelectValue;\n onChange?: (value: FilterSelectValue) => void;\n /** 默认值:与默认值相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValue?: string | number;\n /** 多选默认值:与默认集合相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValues?: (string | number)[];\n /** 为 true 时,value 等于默认仍展示在「您已选择」并保持选中态 */\n showDefaultAsSelected?: boolean;\n placeholder?: string;\n searchable?: boolean;\n /** 是否多选 */\n multiple?: boolean;\n /** 多选至少保留项数;达到下限时不允许移除已选标签 */\n minSelection?: number;\n /** 人员选项:展示部门与联系方式 */\n variant?: 'default' | 'person';\n /**\n * 面板内嵌从属条件(与 search 同层:search 下方、选项列表上方)。\n * 禁止再嵌 Filter*(双重 Popover)。\n */\n panelExtra?: React.ReactNode;\n /** 面板宽度;有 panelExtra 时默认 460 */\n panelWidth?: number;\n /**\n * 选项加载中:Filter Item(Trigger)显示 Loader2 spin;\n * 面板列表区显示 Spin,不渲染空态。\n * 与内部 loadData loading 取或。\n */\n loading?: boolean;\n}\n\nfunction toMultiArray(value: FilterSelectValue): (string | number)[] {\n if (Array.isArray(value)) return value;\n if (value != null && value !== '') return [value];\n return [];\n}\n\nfunction toDisplayValue(\n value: FilterSelectValue,\n defaultValue: string | number | undefined,\n defaultValues: (string | number)[] | undefined,\n multiple: boolean,\n showDefaultAsSelected: boolean,\n): string | number | (string | number)[] | undefined {\n if (multiple) {\n const arr = toMultiArray(value);\n // 等于默认集合时:对外视为「未筛选」(不亮 trigger / 不进「您已选择」)\n if (!showDefaultAsSelected && defaultValues?.length && arraysEqual(arr, defaultValues)) {\n return [];\n }\n return arr;\n }\n if (!showDefaultAsSelected && defaultValue !== undefined && value === defaultValue) {\n return undefined;\n }\n return value;\n}\n\n/** 草稿/面板用真实 value,避免 defaultValues 折叠成 [] 后全选勾选丢失 */\nfunction toDraftValue(\n value: FilterSelectValue,\n defaultValue: string | number | undefined,\n defaultValues: (string | number)[] | undefined,\n multiple: boolean,\n): string | number | (string | number)[] | undefined {\n if (multiple) return toMultiArray(value);\n return toDisplayValue(value, defaultValue, defaultValues, false, true);\n}\n\nfunction formatValueLabel(\n displayVal: string | number | (string | number)[] | undefined,\n options: FilterOption[],\n multiple: boolean,\n isPersonVariant: boolean,\n defaultValues?: (string | number)[],\n): string {\n if (multiple) {\n const arr = (displayVal as (string | number)[]) || [];\n if (!arr.length) return '';\n // 全选默认集合时用「全部」,避免「您已选择」被几十个厂名撑满\n if (defaultValues?.length && arraysEqual(arr, defaultValues)) {\n return '全部';\n }\n return arr\n .map((v) => options.find((o) => String(o.value) === String(v))?.label ?? String(v))\n .join('、');\n }\n if (displayVal == null) return '';\n const opt = options.find((o) => String(o.value) === String(displayVal));\n if (!opt) return String(displayVal);\n return isPersonVariant ? formatPersonValueLabel(opt as PersonOption) : opt.label;\n}\n\nconst FilterSelect: React.FC<FilterSelectProps> = ({\n filterKey,\n label,\n options: optionsProp,\n loadData,\n enabled = true,\n value,\n onChange,\n defaultValue,\n defaultValues,\n showDefaultAsSelected = false,\n searchable = false,\n multiple = false,\n minSelection,\n variant = 'default',\n active,\n hidden,\n display,\n dependsOn,\n clearOnDepsChange = true,\n panelExtra,\n panelWidth,\n loading: loadingProp = false,\n}) => {\n const isPersonVariant = variant === 'person';\n const [open, setOpen] = useState(false);\n const [searchText, setSearchText] = useState('');\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const resolvedPanelWidth = panelWidth ?? (panelExtra ? 460 : undefined);\n\n const { resolvedLabel, values, depsKey } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => onChangeRef.current?.(undefined),\n });\n\n const [loadedOptions, setLoadedOptions] = useState<FilterOption[]>([]);\n const [loadDataLoading, setLoadDataLoading] = useState(false);\n const loadDataRef = useRef(loadData);\n loadDataRef.current = loadData;\n\n useEffect(() => {\n if (!loadDataRef.current || optionsProp != null || !enabled) return;\n let cancelled = false;\n setLoadDataLoading(true);\n (async () => {\n try {\n const next = await loadDataRef.current!({ values });\n if (!cancelled) setLoadedOptions(next ?? []);\n } catch {\n if (!cancelled) setLoadedOptions([]);\n } finally {\n if (!cancelled) setLoadDataLoading(false);\n }\n })();\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [depsKey, enabled, optionsProp, loadData]);\n\n const options = optionsProp ?? loadedOptions;\n const optionsLoading = loadingProp || loadDataLoading;\n\n const displayValue = toDisplayValue(\n value,\n defaultValue,\n defaultValues,\n multiple,\n showDefaultAsSelected,\n );\n const [localValue, setLocalValue] = useState<string | number | (string | number)[] | undefined>(\n () => toDraftValue(value, defaultValue, defaultValues, multiple) ?? (multiple ? [] : undefined),\n );\n\n // ── 自动注册到 CommonFilter ──\n const registerFn = useFilterRegister();\n const handleRemove = useMemo(() => {\n const selectedArr = Array.isArray(displayValue)\n ? displayValue\n : displayValue != null && displayValue !== ''\n ? [displayValue]\n : [];\n const canRemove = !multiple || minSelection == null || selectedArr.length > minSelection;\n return () => {\n if (!canRemove) return;\n onChangeRef.current?.(undefined);\n };\n }, [displayValue, minSelection, multiple]);\n\n const revertToCommitted = () => {\n setLocalValue(\n toDraftValue(value, defaultValue, defaultValues, multiple) ?? (multiple ? [] : undefined),\n );\n setSearchText('');\n };\n\n // 同步外部 value 到内部 localValue(多选用真实 value,保留 defaultValues 全选勾选)\n useEffect(() => {\n const nextDraft = toDraftValue(value, defaultValue, defaultValues, multiple);\n setLocalValue(nextDraft ?? (multiple ? [] : undefined));\n const nextDisplay = toDisplayValue(\n value,\n defaultValue,\n defaultValues,\n multiple,\n showDefaultAsSelected,\n );\n if (\n nextDisplay === undefined ||\n nextDisplay === null ||\n (Array.isArray(nextDisplay) && nextDisplay.length === 0)\n ) {\n setSearchText('');\n }\n }, [value, defaultValue, defaultValues, multiple, showDefaultAsSelected]);\n\n const committedValueLabel = useMemo(\n () => formatValueLabel(displayValue, options, multiple, isPersonVariant, defaultValues),\n [options, displayValue, multiple, isPersonVariant, defaultValues],\n );\n\n useEffect(() => {\n if (!registerFn) return;\n const ctx = { filterKey, label: resolvedLabel, value };\n if (!resolveFilterVisible({ display, hidden }, ctx)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (committedValueLabel) {\n const selectedArr = Array.isArray(displayValue)\n ? displayValue\n : displayValue != null && displayValue !== ''\n ? [displayValue]\n : [];\n const removable = !multiple || minSelection == null || selectedArr.length > minSelection;\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel: committedValueLabel,\n onRemove: handleRemove,\n removable,\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [committedValueLabel, filterKey, resolvedLabel, hidden, display, handleRemove]);\n\n const visibilityCtx = { filterKey, label: resolvedLabel, value };\n if (!resolveFilterVisible({ display, hidden }, visibilityCtx)) return null;\n\n const filteredOptions = searchText\n ? options.filter((opt) =>\n isPersonVariant\n ? matchPersonOptionSearch(opt as PersonOption, searchText)\n : opt.label.toLowerCase().includes(searchText.toLowerCase()),\n )\n : options;\n\n const handleConfirm = () => {\n onChange?.(localValue as FilterSelectValue);\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen && multiple) {\n revertToCommitted();\n }\n setOpen(nextOpen);\n };\n\n const handleClickOption = (optVal: string | number) => {\n if (!multiple) {\n const isDefaultOption = defaultValue !== undefined && optVal === defaultValue;\n let next: string | number | undefined;\n if (localValue === optVal || isDefaultOption) {\n next = undefined;\n } else {\n next = optVal;\n }\n setLocalValue(next);\n onChange?.(next);\n setOpen(false);\n }\n };\n\n const handleToggleMulti = (optVal: string | number) => {\n const arr = (localValue as (string | number)[]) || [];\n const has = arr.some((v) => String(v) === String(optVal));\n if (has && minSelection != null && arr.length <= minSelection) {\n return;\n }\n const next = has ? arr.filter((v) => String(v) !== String(optVal)) : [...arr, optVal];\n setLocalValue(next);\n };\n\n const localMultiArr = (Array.isArray(localValue) ? localValue : []) as (string | number)[];\n const filteredSelectedCount = filteredOptions.filter((opt) =>\n localMultiArr.some((v) => String(v) === String(opt.value)),\n ).length;\n const allFilteredSelected =\n filteredOptions.length > 0 && filteredSelectedCount === filteredOptions.length;\n const someFilteredSelected = filteredSelectedCount > 0 && !allFilteredSelected;\n\n const handleToggleAll = (checked: boolean) => {\n const arr = localMultiArr;\n const filteredVals = filteredOptions.map((o) => o.value);\n if (checked) {\n const seen = new Set(arr.map(String));\n const next = [...arr];\n for (const v of filteredVals) {\n if (!seen.has(String(v))) {\n next.push(v);\n seen.add(String(v));\n }\n }\n setLocalValue(next);\n return;\n }\n const removeSet = new Set(filteredVals.map(String));\n let next = arr.filter((v) => !removeSet.has(String(v)));\n if (minSelection != null && next.length < minSelection) {\n next = arr.slice(0, minSelection);\n }\n setLocalValue(next);\n };\n\n const isActive = multiple\n ? Array.isArray(displayValue) && displayValue.length > 0\n : displayValue != null && displayValue !== '';\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={active || isActive}\n loading={optionsLoading}\n open={open}\n onOpenChange={handleOpenChange}\n width={resolvedPanelWidth}\n onConfirm={multiple ? handleConfirm : undefined}\n onReset={multiple ? handleDiscardDraft : undefined}\n >\n {searchable && (\n <Search\n placeholder={`搜索${resolvedLabel}`}\n allowClear\n size=\"middle\"\n className={classNames('filter-select-search', styles['filter-select-search'])}\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n />\n )}\n {panelExtra ? (\n <div\n className={classNames('filter-select-panel-extra', styles['filter-select-panel-extra'])}\n >\n {panelExtra}\n </div>\n ) : null}\n\n <div className={classNames('filter-select-options', styles['filter-select-options'])}>\n {optionsLoading ? (\n <div className={classNames('filter-select-loading', styles['filter-select-loading'])}>\n <Spin size=\"small\" />\n </div>\n ) : filteredOptions.length === 0 ? (\n <div className={classNames('filter-select-empty', styles['filter-select-empty'])}>\n <Empty iconType=\"simple\" description=\"暂无数据\" />\n </div>\n ) : (\n <>\n {multiple && filteredOptions.length > 0 && (\n <div\n className={classNames(\n 'filter-select-option',\n styles['filter-select-option'],\n 'filter-select-select-all',\n styles['filter-select-select-all'],\n )}\n onClick={() => handleToggleAll(!allFilteredSelected)}\n >\n <Checkbox\n checked={allFilteredSelected}\n indeterminate={someFilteredSelected}\n onChange={(e) => handleToggleAll(e.target.checked)}\n onClick={(e) => e.stopPropagation()}\n />\n <span>全选</span>\n </div>\n )}\n {filteredOptions.map((opt) => (\n <div\n key={String(opt.value)}\n className={classNames(\n 'filter-select-option',\n styles['filter-select-option'],\n !multiple &&\n localValue === opt.value &&\n classNames(\n 'filter-select-option-selected',\n styles['filter-select-option-selected'],\n ),\n )}\n onClick={() =>\n multiple ? handleToggleMulti(opt.value) : handleClickOption(opt.value)\n }\n >\n {multiple && (\n <Checkbox\n checked={localMultiArr.some((v) => String(v) === String(opt.value))}\n onChange={() => handleToggleMulti(opt.value)}\n onClick={(e) => e.stopPropagation()}\n />\n )}\n {isPersonVariant ? (\n <PersonOptionRow option={opt as PersonOption} />\n ) : (\n <span>{opt.label}</span>\n )}\n {!multiple && !isPersonVariant && localValue === opt.value && (\n <Check\n className={classNames(\n 'filter-select-option-check',\n styles['filter-select-option-check'],\n )}\n />\n )}\n </div>\n ))}\n </>\n )}\n </div>\n\n {multiple && localMultiArr.length > 0 && (\n <div\n className={classNames('filter-select-selected-bar', styles['filter-select-selected-bar'])}\n >\n <div\n className={classNames(\n 'filter-select-selected-label',\n styles['filter-select-selected-label'],\n )}\n >\n 已选:\n </div>\n <div\n className={classNames(\n 'filter-select-selected-tags',\n styles['filter-select-selected-tags'],\n )}\n >\n <Space size={[4, 4]} wrap>\n {localMultiArr.map((v) => {\n const opt = options.find((o) => String(o.value) === String(v));\n const tagRemovable = minSelection == null || localMultiArr.length > minSelection;\n return (\n <span\n key={String(v)}\n className={classNames(\n 'filter-select-selected-tag',\n styles['filter-select-selected-tag'],\n !tagRemovable && styles['filter-select-selected-tag-disabled'],\n )}\n onClick={() => tagRemovable && handleToggleMulti(v)}\n >\n {opt?.label ?? String(v)}\n <X\n className={classNames(\n 'filter-select-selected-remove',\n styles['filter-select-selected-remove'],\n !tagRemovable && styles['filter-select-selected-remove-disabled'],\n )}\n />\n </span>\n );\n })}\n </Space>\n </div>\n </div>\n )}\n </FilterPopover>\n );\n};\n\nexport default FilterSelect;\nexport type { FilterSelectProps };\n"],"names":["Search","Input","formatPersonValueLabel","opt","parts","matchPersonOptionSearch","keyword","lower","s","arraysEqual","a","b","sortedA","sortedB","v","i","toMultiArray","value","toDisplayValue","defaultValue","defaultValues","multiple","showDefaultAsSelected","arr","toDraftValue","formatValueLabel","displayVal","options","isPersonVariant","_a","o","FilterSelect","filterKey","label","optionsProp","loadData","enabled","onChange","searchable","minSelection","variant","active","hidden","display","dependsOn","clearOnDepsChange","panelExtra","panelWidth","loadingProp","open","setOpen","useState","searchText","setSearchText","onChangeRef","useRef","resolvedPanelWidth","resolvedLabel","values","depsKey","useFilterFieldBridge","loadedOptions","setLoadedOptions","loadDataLoading","setLoadDataLoading","loadDataRef","useEffect","cancelled","next","optionsLoading","displayValue","localValue","setLocalValue","registerFn","useFilterRegister","handleRemove","useMemo","selectedArr","canRemove","revertToCommitted","nextDraft","nextDisplay","committedValueLabel","resolveFilterVisible","removable","filteredOptions","handleConfirm","handleDiscardDraft","handleOpenChange","nextOpen","handleClickOption","optVal","isDefaultOption","handleToggleMulti","has","localMultiArr","filteredSelectedCount","allFilteredSelected","someFilteredSelected","handleToggleAll","checked","filteredVals","seen","removeSet","isActive","jsxs","FilterPopover","jsx","classNames","styles","Spin","Empty","Fragment","Checkbox","e","PersonOptionRow","Check","Space","tagRemovable","X"],"mappings":";;;;;;;;;;;AAYA,MAAM,EAAE,QAAAA,OAAWC;AAEnB,SAASC,GAAuBC,GAA2B;AACzD,QAAMC,IAAQ,CAACD,EAAI,KAAK;AACxB,SAAIA,EAAI,kBAAgBC,EAAM,KAAKD,EAAI,cAAc,GAC9CC,EAAM,KAAK,KAAK;AACzB;AAEA,SAASC,GAAwBF,GAAmBG,GAA0B;AAC5E,QAAMC,IAAQD,EAAQ,YAAA;AACtB,SAAO,CAACH,EAAI,OAAOA,EAAI,gBAAgBA,EAAI,OAAOA,EAAI,OAAOA,EAAI,UAAU,EACxE,OAAO,OAAO,EACd,KAAK,CAACK,MAAM,OAAOA,CAAC,EAAE,YAAA,EAAc,SAASD,CAAK,CAAC;AACxD;AAMA,SAASE,GAAYC,GAAyBC,GAAkC;AAC9E,MAAI,EAACD,KAAA,QAAAA,EAAG,WAAU,EAACC,KAAA,QAAAA,EAAG,QAAQ,QAAO;AACrC,MAAI,CAACD,KAAK,CAACC,KAAKD,EAAE,WAAWC,EAAE,OAAQ,QAAO;AAC9C,QAAMC,IAAU,CAAC,GAAGF,CAAC,EAAE,IAAI,MAAM,EAAE,KAAA,GAC7BG,IAAU,CAAC,GAAGF,CAAC,EAAE,IAAI,MAAM,EAAE,KAAA;AACnC,SAAOC,EAAQ,MAAM,CAACE,GAAGC,MAAMD,MAAMD,EAAQE,CAAC,CAAC;AACjD;AAwCA,SAASC,GAAaC,GAA+C;AACnE,SAAI,MAAM,QAAQA,CAAK,IAAUA,IAC7BA,KAAS,QAAQA,MAAU,KAAW,CAACA,CAAK,IACzC,CAAA;AACT;AAEA,SAASC,EACPD,GACAE,GACAC,GACAC,GACAC,GACmD;AACnD,MAAID,GAAU;AACZ,UAAME,IAAMP,GAAaC,CAAK;AAE9B,WAAI,CAACK,MAAyBF,KAAA,QAAAA,EAAe,WAAUX,GAAYc,GAAKH,CAAa,IAC5E,CAAA,IAEFG;AAAA,EACT;AACA,MAAI,GAACD,KAAyBH,MAAiB,UAAaF,MAAUE;AAGtE,WAAOF;AACT;AAGA,SAASO,EACPP,GACAE,GACAC,GACAC,GACmD;AACnD,SAAIA,IAAiBL,GAAaC,CAAK,IAChCC,EAAeD,GAAOE,GAAcC,GAAe,IAAO,EAAI;AACvE;AAEA,SAASK,GACPC,GACAC,GACAN,GACAO,GACAR,GACQ;AACR,MAAIC,GAAU;AACZ,UAAME,IAAOG,KAAsC,CAAA;AACnD,WAAKH,EAAI,SAELH,KAAA,QAAAA,EAAe,UAAUX,GAAYc,GAAKH,CAAa,IAClD,OAEFG,EACJ,IAAI,CAACT,MAAA;;AAAM,eAAAe,IAAAF,EAAQ,KAAK,CAACG,MAAM,OAAOA,EAAE,KAAK,MAAM,OAAOhB,CAAC,CAAC,MAAjD,gBAAAe,EAAoD,UAAS,OAAOf,CAAC;AAAA,KAAC,EACjF,KAAK,GAAG,IAPa;AAAA,EAQ1B;AACA,MAAIY,KAAc,KAAM,QAAO;AAC/B,QAAMvB,IAAMwB,EAAQ,KAAK,CAACG,MAAM,OAAOA,EAAE,KAAK,MAAM,OAAOJ,CAAU,CAAC;AACtE,SAAKvB,IACEyB,IAAkB1B,GAAuBC,CAAmB,IAAIA,EAAI,QAD1D,OAAOuB,CAAU;AAEpC;AAEA,MAAMK,KAA4C,CAAC;AAAA,EACjD,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAASC;AAAA,EACT,UAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,OAAAnB;AAAA,EACA,UAAAoB;AAAA,EACA,cAAAlB;AAAA,EACA,eAAAC;AAAA,EACA,uBAAAE,IAAwB;AAAA,EACxB,YAAAgB,KAAa;AAAA,EACb,UAAAjB,IAAW;AAAA,EACX,cAAAkB;AAAA,EACA,SAAAC,KAAU;AAAA,EACV,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,mBAAAC,KAAoB;AAAA,EACpB,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAASC,KAAc;AACzB,MAAM;AACJ,QAAMpB,IAAkBY,OAAY,UAC9B,CAACS,IAAMC,CAAO,IAAIC,EAAS,EAAK,GAChC,CAACC,GAAYC,CAAa,IAAIF,EAAS,EAAE,GAEzCG,IAAcC,GAAOlB,CAAQ;AACnC,EAAAiB,EAAY,UAAUjB;AAEtB,QAAMmB,KAAqBT,OAAeD,IAAa,MAAM,SAEvD,EAAE,eAAAW,GAAe,QAAAC,IAAQ,SAAAC,GAAA,IAAYC,GAAqB;AAAA,IAC9D,WAAA5B;AAAA,IACA,OAAAf;AAAA,IACA,OAAAgB;AAAA,IACA,WAAAW;AAAA,IACA,mBAAAC;AAAA,IACA,aAAa,MAAA;;AAAM,cAAAhB,IAAAyB,EAAY,YAAZ,gBAAAzB,EAAA,KAAAyB,GAAsB;AAAA;AAAA,EAAS,CACnD,GAEK,CAACO,IAAeC,CAAgB,IAAIX,EAAyB,CAAA,CAAE,GAC/D,CAACY,IAAiBC,CAAkB,IAAIb,EAAS,EAAK,GACtDc,IAAcV,GAAOpB,CAAQ;AACnC,EAAA8B,EAAY,UAAU9B,GAEtB+B,EAAU,MAAM;AACd,QAAI,CAACD,EAAY,WAAW/B,KAAe,QAAQ,CAACE,EAAS;AAC7D,QAAI+B,IAAY;AAChB,WAAAH,EAAmB,EAAI,IACtB,YAAY;AACX,UAAI;AACF,cAAMI,IAAO,MAAMH,EAAY,QAAS,EAAE,QAAAP,IAAQ;AAClD,QAAKS,KAAWL,EAAiBM,KAAQ,CAAA,CAAE;AAAA,MAC7C,QAAQ;AACN,QAAKD,KAAWL,EAAiB,EAAE;AAAA,MACrC,UAAA;AACE,QAAKK,KAAWH,EAAmB,EAAK;AAAA,MAC1C;AAAA,IACF,GAAA,GACO,MAAM;AACX,MAAAG,IAAY;AAAA,IACd;AAAA,EAEF,GAAG,CAACR,IAASvB,GAASF,GAAaC,CAAQ,CAAC;AAE5C,QAAMR,IAAUO,KAAe2B,IACzBQ,IAAiBrB,MAAee,IAEhCO,IAAepD;AAAA,IACnBD;AAAA,IACAE;AAAA,IACAC;AAAA,IACAC;AAAA,IACAC;AAAA,EAAA,GAEI,CAACiD,GAAYC,CAAa,IAAIrB;AAAA,IAClC,MAAM3B,EAAaP,GAAOE,GAAcC,GAAeC,CAAQ,MAAMA,IAAW,CAAA,IAAK;AAAA,EAAA,GAIjFoD,IAAaC,GAAA,GACbC,IAAeC,GAAQ,MAAM;AACjC,UAAMC,IAAc,MAAM,QAAQP,CAAY,IAC1CA,IACAA,KAAgB,QAAQA,MAAiB,KACvC,CAACA,CAAY,IACb,CAAA,GACAQ,IAAY,CAACzD,KAAYkB,KAAgB,QAAQsC,EAAY,SAAStC;AAC5E,WAAO,MAAM;;AACX,MAAKuC,OACLjD,IAAAyB,EAAY,YAAZ,QAAAzB,EAAA,KAAAyB,GAAsB;AAAA,IACxB;AAAA,EACF,GAAG,CAACgB,GAAc/B,GAAclB,CAAQ,CAAC,GAEnC0D,IAAoB,MAAM;AAC9B,IAAAP;AAAA,MACEhD,EAAaP,GAAOE,GAAcC,GAAeC,CAAQ,MAAMA,IAAW,CAAA,IAAK;AAAA,IAAA,GAEjFgC,EAAc,EAAE;AAAA,EAClB;AAGA,EAAAa,EAAU,MAAM;AACd,UAAMc,IAAYxD,EAAaP,GAAOE,GAAcC,GAAeC,CAAQ;AAC3E,IAAAmD,EAAcQ,MAAc3D,IAAW,CAAA,IAAK,OAAU;AACtD,UAAM4D,IAAc/D;AAAA,MAClBD;AAAA,MACAE;AAAA,MACAC;AAAA,MACAC;AAAA,MACAC;AAAA,IAAA;AAEF,KAEE2D,KAAgB,QACf,MAAM,QAAQA,CAAW,KAAKA,EAAY,WAAW,MAEtD5B,EAAc,EAAE;AAAA,EAEpB,GAAG,CAACpC,GAAOE,GAAcC,GAAeC,GAAUC,CAAqB,CAAC;AAExE,QAAM4D,IAAsBN;AAAA,IAC1B,MAAMnD,GAAiB6C,GAAc3C,GAASN,GAAUO,GAAiBR,CAAa;AAAA,IACtF,CAACO,GAAS2C,GAAcjD,GAAUO,GAAiBR,CAAa;AAAA,EAAA;AA8BlE,MA3BA8C,EAAU,MAAM;AACd,QAAI,CAACO,EAAY;AAEjB,QAAI,CAACU,GAAqB,EAAE,SAAAxC,GAAS,QAAAD,EAAA,GADzB,EAAE,WAAAV,GAAW,OAAOyB,GAAe,OAAAxC,EAAA,CACG,GAAG;AACnD,MAAAwD,EAAW,WAAWzC,CAAS;AAC/B;AAAA,IACF;AACA,QAAIkD,GAAqB;AACvB,YAAML,IAAc,MAAM,QAAQP,CAAY,IAC1CA,IACAA,KAAgB,QAAQA,MAAiB,KACvC,CAACA,CAAY,IACb,CAAA,GACAc,IAAY,CAAC/D,KAAYkB,KAAgB,QAAQsC,EAAY,SAAStC;AAC5E,MAAAkC,EAAW,SAASzC,GAAW;AAAA,QAC7B,OAAOyB;AAAA,QACP,YAAYyB;AAAA,QACZ,UAAUP;AAAA,QACV,WAAAS;AAAA,MAAA,CACD;AAAA,IACH;AACE,MAAAX,EAAW,WAAWzC,CAAS;AAAA,EAGnC,GAAG,CAACkD,GAAqBlD,GAAWyB,GAAef,GAAQC,GAASgC,CAAY,CAAC,GAG7E,CAACQ,GAAqB,EAAE,SAAAxC,GAAS,QAAAD,KADf,EAAE,WAAAV,GAAW,OAAOyB,GAAe,OAAAxC,EAAA,CACG,EAAG,QAAO;AAEtE,QAAMoE,IAAkBjC,IACpBzB,EAAQ;AAAA,IAAO,CAACxB,MACdyB,IACIvB,GAAwBF,GAAqBiD,CAAU,IACvDjD,EAAI,MAAM,YAAA,EAAc,SAASiD,EAAW,aAAa;AAAA,EAAA,IAE/DzB,GAEE2D,KAAgB,MAAM;AAC1B,IAAAjD,KAAA,QAAAA,EAAWkC,IACXrB,EAAQ,EAAK;AAAA,EACf,GAEMqC,KAAqB,MAAM;AAC/B,IAAAR,EAAA,GACA7B,EAAQ,EAAK;AAAA,EACf,GAEMsC,KAAmB,CAACC,MAAsB;AAC9C,IAAI,CAACA,KAAYpE,KACf0D,EAAA,GAEF7B,EAAQuC,CAAQ;AAAA,EAClB,GAEMC,KAAoB,CAACC,MAA4B;AACrD,QAAI,CAACtE,GAAU;AACb,YAAMuE,IAAkBzE,MAAiB,UAAawE,MAAWxE;AACjE,UAAIiD;AACJ,MAAIG,MAAeoB,KAAUC,IAC3BxB,IAAO,SAEPA,IAAOuB,GAETnB,EAAcJ,CAAI,GAClB/B,KAAA,QAAAA,EAAW+B,IACXlB,EAAQ,EAAK;AAAA,IACf;AAAA,EACF,GAEM2C,IAAoB,CAACF,MAA4B;AACrD,UAAMpE,IAAOgD,KAAsC,CAAA,GAC7CuB,IAAMvE,EAAI,KAAK,CAACT,MAAM,OAAOA,CAAC,MAAM,OAAO6E,CAAM,CAAC;AACxD,QAAIG,KAAOvD,KAAgB,QAAQhB,EAAI,UAAUgB;AAC/C;AAEF,UAAM6B,IAAO0B,IAAMvE,EAAI,OAAO,CAACT,MAAM,OAAOA,CAAC,MAAM,OAAO6E,CAAM,CAAC,IAAI,CAAC,GAAGpE,GAAKoE,CAAM;AACpF,IAAAnB,EAAcJ,CAAI;AAAA,EACpB,GAEM2B,IAAiB,MAAM,QAAQxB,CAAU,IAAIA,IAAa,CAAA,GAC1DyB,IAAwBX,EAAgB;AAAA,IAAO,CAAClF,MACpD4F,EAAc,KAAK,CAACjF,MAAM,OAAOA,CAAC,MAAM,OAAOX,EAAI,KAAK,CAAC;AAAA,EAAA,EACzD,QACI8F,IACJZ,EAAgB,SAAS,KAAKW,MAA0BX,EAAgB,QACpEa,KAAuBF,IAAwB,KAAK,CAACC,GAErDE,IAAkB,CAACC,MAAqB;AAC5C,UAAM7E,IAAMwE,GACNM,IAAehB,EAAgB,IAAI,CAACvD,MAAMA,EAAE,KAAK;AACvD,QAAIsE,GAAS;AACX,YAAME,IAAO,IAAI,IAAI/E,EAAI,IAAI,MAAM,CAAC,GAC9B6C,KAAO,CAAC,GAAG7C,CAAG;AACpB,iBAAWT,KAAKuF;AACd,QAAKC,EAAK,IAAI,OAAOxF,CAAC,CAAC,MACrBsD,GAAK,KAAKtD,CAAC,GACXwF,EAAK,IAAI,OAAOxF,CAAC,CAAC;AAGtB,MAAA0D,EAAcJ,EAAI;AAClB;AAAA,IACF;AACA,UAAMmC,IAAY,IAAI,IAAIF,EAAa,IAAI,MAAM,CAAC;AAClD,QAAIjC,IAAO7C,EAAI,OAAO,CAACT,MAAM,CAACyF,EAAU,IAAI,OAAOzF,CAAC,CAAC,CAAC;AACtD,IAAIyB,KAAgB,QAAQ6B,EAAK,SAAS7B,MACxC6B,IAAO7C,EAAI,MAAM,GAAGgB,CAAY,IAElCiC,EAAcJ,CAAI;AAAA,EACpB,GAEMoC,KAAWnF,IACb,MAAM,QAAQiD,CAAY,KAAKA,EAAa,SAAS,IACrDA,KAAgB,QAAQA,MAAiB;AAE7C,SACE,gBAAAmC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAOjD;AAAA,MACP,QAAQhB,MAAU+D;AAAA,MAClB,SAASnC;AAAA,MACT,MAAApB;AAAA,MACA,cAAcuC;AAAA,MACd,OAAOhC;AAAA,MACP,WAAWnC,IAAWiE,KAAgB;AAAA,MACtC,SAASjE,IAAWkE,KAAqB;AAAA,MAExC,UAAA;AAAA,QAAAjD,MACC,gBAAAqE;AAAA,UAAC3G;AAAA,UAAA;AAAA,YACC,aAAa,KAAKyD,CAAa;AAAA,YAC/B,YAAU;AAAA,YACV,MAAK;AAAA,YACL,WAAWmD,EAAW,wBAAwBC,EAAO,sBAAsB,CAAC;AAAA,YAC5E,OAAOzD;AAAA,YACP,UAAU,CAAC,MAAMC,EAAc,EAAE,OAAO,KAAK;AAAA,UAAA;AAAA,QAAA;AAAA,QAGhDP,IACC,gBAAA6D;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWC,EAAW,6BAA6BC,EAAO,2BAA2B,CAAC;AAAA,YAErF,UAAA/D;AAAA,UAAA;AAAA,QAAA,IAED;AAAA,QAEJ,gBAAA6D,EAAC,SAAI,WAAWC,EAAW,yBAAyBC,EAAO,uBAAuB,CAAC,GAChF,UAAAxC,sBACE,OAAA,EAAI,WAAWuC,EAAW,yBAAyBC,EAAO,uBAAuB,CAAC,GACjF,4BAACC,IAAA,EAAK,MAAK,SAAQ,GACrB,IACEzB,EAAgB,WAAW,sBAC5B,OAAA,EAAI,WAAWuB,EAAW,uBAAuBC,EAAO,qBAAqB,CAAC,GAC7E,4BAACE,IAAA,EAAM,UAAS,UAAS,aAAY,OAAA,CAAO,EAAA,CAC9C,IAEA,gBAAAN,EAAAO,IAAA,EACG,UAAA;AAAA,UAAA3F,KAAYgE,EAAgB,SAAS,KACpC,gBAAAoB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWG;AAAA,gBACT;AAAA,gBACAC,EAAO,sBAAsB;AAAA,gBAC7B;AAAA,gBACAA,EAAO,0BAA0B;AAAA,cAAA;AAAA,cAEnC,SAAS,MAAMV,EAAgB,CAACF,CAAmB;AAAA,cAEnD,UAAA;AAAA,gBAAA,gBAAAU;AAAA,kBAACM;AAAA,kBAAA;AAAA,oBACC,SAAShB;AAAA,oBACT,eAAeC;AAAA,oBACf,UAAU,CAAC,MAAMC,EAAgB,EAAE,OAAO,OAAO;AAAA,oBACjD,SAAS,CAAC,MAAM,EAAE,gBAAA;AAAA,kBAAgB;AAAA,gBAAA;AAAA,gBAEpC,gBAAAQ,EAAC,UAAK,UAAA,KAAA,CAAE;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGXtB,EAAgB,IAAI,CAAClF,MACpB,gBAAAsG;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAWG;AAAA,gBACT;AAAA,gBACAC,EAAO,sBAAsB;AAAA,gBAC7B,CAACxF,KACCkD,MAAepE,EAAI,SACnByG;AAAA,kBACE;AAAA,kBACAC,EAAO,+BAA+B;AAAA,gBAAA;AAAA,cACxC;AAAA,cAEJ,SAAS,MACPxF,IAAWwE,EAAkB1F,EAAI,KAAK,IAAIuF,GAAkBvF,EAAI,KAAK;AAAA,cAGtE,UAAA;AAAA,gBAAAkB,KACC,gBAAAsF;AAAA,kBAACM;AAAA,kBAAA;AAAA,oBACC,SAASlB,EAAc,KAAK,CAACjF,MAAM,OAAOA,CAAC,MAAM,OAAOX,EAAI,KAAK,CAAC;AAAA,oBAClE,UAAU,MAAM0F,EAAkB1F,EAAI,KAAK;AAAA,oBAC3C,SAAS,CAAC+G,MAAMA,EAAE,gBAAA;AAAA,kBAAgB;AAAA,gBAAA;AAAA,gBAGrCtF,sBACEuF,IAAA,EAAgB,QAAQhH,GAAqB,IAE9C,gBAAAwG,EAAC,QAAA,EAAM,UAAAxG,EAAI,MAAA,CAAM;AAAA,gBAElB,CAACkB,KAAY,CAACO,KAAmB2C,MAAepE,EAAI,SACnD,gBAAAwG;AAAA,kBAACS;AAAA,kBAAA;AAAA,oBACC,WAAWR;AAAA,sBACT;AAAA,sBACAC,EAAO,4BAA4B;AAAA,oBAAA;AAAA,kBACrC;AAAA,gBAAA;AAAA,cACF;AAAA,YAAA;AAAA,YAjCG,OAAO1G,EAAI,KAAK;AAAA,UAAA,CAoCxB;AAAA,QAAA,EAAA,CACH,EAAA,CAEJ;AAAA,QAECkB,KAAY0E,EAAc,SAAS,KAClC,gBAAAU;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWG,EAAW,8BAA8BC,EAAO,4BAA4B,CAAC;AAAA,YAExF,UAAA;AAAA,cAAA,gBAAAF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAWC;AAAA,oBACT;AAAA,oBACAC,EAAO,8BAA8B;AAAA,kBAAA;AAAA,kBAExC,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGD,gBAAAF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAWC;AAAA,oBACT;AAAA,oBACAC,EAAO,6BAA6B;AAAA,kBAAA;AAAA,kBAGtC,UAAA,gBAAAF,EAACU,IAAA,EAAM,MAAM,CAAC,GAAG,CAAC,GAAG,MAAI,IACtB,UAAAtB,EAAc,IAAI,CAACjF,MAAM;AACxB,0BAAMX,IAAMwB,EAAQ,KAAK,CAACG,MAAM,OAAOA,EAAE,KAAK,MAAM,OAAOhB,CAAC,CAAC,GACvDwG,IAAe/E,KAAgB,QAAQwD,EAAc,SAASxD;AACpE,2BACE,gBAAAkE;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBAEC,WAAWG;AAAA,0BACT;AAAA,0BACAC,EAAO,4BAA4B;AAAA,0BACnC,CAACS,KAAgBT,EAAO,qCAAqC;AAAA,wBAAA;AAAA,wBAE/D,SAAS,MAAMS,KAAgBzB,EAAkB/E,CAAC;AAAA,wBAEjD,UAAA;AAAA,2BAAAX,KAAA,gBAAAA,EAAK,UAAS,OAAOW,CAAC;AAAA,0BACvB,gBAAA6F;AAAA,4BAACY;AAAA,4BAAA;AAAA,8BACC,WAAWX;AAAA,gCACT;AAAA,gCACAC,EAAO,+BAA+B;AAAA,gCACtC,CAACS,KAAgBT,EAAO,wCAAwC;AAAA,8BAAA;AAAA,4BAClE;AAAA,0BAAA;AAAA,wBACF;AAAA,sBAAA;AAAA,sBAfK,OAAO/F,CAAC;AAAA,oBAAA;AAAA,kBAkBnB,CAAC,EAAA,CACH;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAIR;"}
@@ -1,19 +1,20 @@
1
1
  const e = {
2
- "filter-select-search": "_filter-select-search_1lhta_1",
3
- "filter-select-panel-extra": "_filter-select-panel-extra_1lhta_5",
4
- "filter-select-options": "_filter-select-options_1lhta_9",
5
- "filter-select-option": "_filter-select-option_1lhta_9",
6
- "filter-select-option-selected": "_filter-select-option-selected_1lhta_27",
7
- "filter-select-option-check": "_filter-select-option-check_1lhta_32",
8
- "filter-select-empty": "_filter-select-empty_1lhta_38",
9
- "filter-select-select-all": "_filter-select-select-all_1lhta_46",
10
- "filter-select-selected-bar": "_filter-select-selected-bar_1lhta_54",
11
- "filter-select-selected-label": "_filter-select-selected-label_1lhta_61",
12
- "filter-select-selected-tags": "_filter-select-selected-tags_1lhta_67",
13
- "filter-select-selected-tag": "_filter-select-selected-tag_1lhta_67",
14
- "filter-select-selected-tag-disabled": "_filter-select-selected-tag-disabled_1lhta_85",
15
- "filter-select-selected-remove": "_filter-select-selected-remove_1lhta_90",
16
- "filter-select-selected-remove-disabled": "_filter-select-selected-remove-disabled_1lhta_94"
2
+ "filter-select-search": "_filter-select-search_18zbc_1",
3
+ "filter-select-panel-extra": "_filter-select-panel-extra_18zbc_5",
4
+ "filter-select-options": "_filter-select-options_18zbc_9",
5
+ "filter-select-option": "_filter-select-option_18zbc_9",
6
+ "filter-select-option-selected": "_filter-select-option-selected_18zbc_27",
7
+ "filter-select-option-check": "_filter-select-option-check_18zbc_32",
8
+ "filter-select-empty": "_filter-select-empty_18zbc_38",
9
+ "filter-select-loading": "_filter-select-loading_18zbc_46",
10
+ "filter-select-select-all": "_filter-select-select-all_18zbc_54",
11
+ "filter-select-selected-bar": "_filter-select-selected-bar_18zbc_62",
12
+ "filter-select-selected-label": "_filter-select-selected-label_18zbc_69",
13
+ "filter-select-selected-tags": "_filter-select-selected-tags_18zbc_75",
14
+ "filter-select-selected-tag": "_filter-select-selected-tag_18zbc_75",
15
+ "filter-select-selected-tag-disabled": "_filter-select-selected-tag-disabled_18zbc_93",
16
+ "filter-select-selected-remove": "_filter-select-selected-remove_18zbc_98",
17
+ "filter-select-selected-remove-disabled": "_filter-select-selected-remove-disabled_18zbc_102"
17
18
  };
18
19
  export {
19
20
  e as default
@@ -1 +1 @@
1
- {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
@@ -34,6 +34,12 @@ export interface FilterTreeSelectProps extends BaseFilterProps {
34
34
  panelExtra?: React.ReactNode;
35
35
  /** 面板宽度;有 panelExtra 时默认 460 */
36
36
  panelWidth?: number;
37
+ /**
38
+ * 选项加载中:Filter Item(Trigger)显示 Loader2 spin;
39
+ * 面板列表区显示 Spin,不渲染空态。
40
+ * 与内部 fetchUrl / loadData loading 取或。
41
+ */
42
+ loading?: boolean;
37
43
  }
38
44
  declare const FilterTreeSelect: React.FC<FilterTreeSelectProps>;
39
45
  export default FilterTreeSelect;