@aloudata/aloudata-design 3.1.1 → 3.1.2

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 (36) hide show
  1. package/dist/Drawer/index.js +2 -1
  2. package/dist/Drawer/index.js.map +1 -1
  3. package/dist/MemberPicker/components/MemberSelection.d.ts +1 -0
  4. package/dist/MemberPicker/components/MemberSelection.js +95 -82
  5. package/dist/MemberPicker/components/MemberSelection.js.map +1 -1
  6. package/dist/MemberPicker/components/Panel.d.ts +1 -0
  7. package/dist/MemberPicker/components/Panel.js +8 -1
  8. package/dist/MemberPicker/components/Panel.js.map +1 -1
  9. package/dist/MemberPicker/components/PanelWrapper.js +2 -0
  10. package/dist/MemberPicker/components/PanelWrapper.js.map +1 -1
  11. package/dist/MemberPicker/components/UserGroupSelection.d.ts +2 -1
  12. package/dist/MemberPicker/components/UserGroupSelection.js +11 -1
  13. package/dist/MemberPicker/components/UserGroupSelection.js.map +1 -1
  14. package/dist/Select/index.js +1 -1
  15. package/dist/Select/index.js.map +1 -1
  16. package/dist/aloudata-design.css +1 -1
  17. package/dist/governance/semantic.d.ts +1 -0
  18. package/dist/governance/semantic.js +2 -0
  19. package/dist/governance/semantic.json +1737 -0
  20. package/dist/theme/contract/tokenOutputContract.js +1 -0
  21. package/dist/theme/contract/tokenOutputContract.js.map +1 -1
  22. package/dist/theme/generator/neutralSourceValues.d.ts +1 -0
  23. package/dist/theme/governance/semanticGovernanceContract.d.ts +91 -0
  24. package/dist/theme/governance/semanticGovernanceContract.js +342 -0
  25. package/dist/theme/governance/semanticGovernanceContract.js.map +1 -0
  26. package/dist/theme/runtime/colorValueMode/generated/darkBaselineDeclarations.d.ts +1 -1
  27. package/dist/theme/runtime/colorValueMode/generated/darkBaselineDeclarations.js +1 -0
  28. package/dist/theme/runtime/colorValueMode/generated/darkBaselineDeclarations.js.map +1 -1
  29. package/dist/theme/runtime/colorValueMode/generated/slateDarkDeclarations.d.ts +1 -1
  30. package/dist/theme/runtime/colorValueMode/generated/slateLightDeclarations.d.ts +1 -1
  31. package/dist/theme/runtime/colorValueMode/generated/stoneDarkDeclarations.d.ts +1 -1
  32. package/dist/theme/runtime/colorValueMode/generated/stoneLightDeclarations.d.ts +1 -1
  33. package/dist/theme/runtime/colorValueMode/generated/v3BaselineDeclarations.d.ts +1 -1
  34. package/dist/theme/runtime/colorValueMode/generated/v3BaselineDeclarations.js +1 -0
  35. package/dist/theme/runtime/colorValueMode/generated/v3BaselineDeclarations.js.map +1 -1
  36. package/package.json +12 -2
@@ -1 +1 @@
1
- {"version":3,"file":"UserGroupSelection.js","names":[],"sources":["../../../src/MemberPicker/components/UserGroupSelection.tsx"],"sourcesContent":["import Breadcrumb from '../../Breadcrumb';\nimport { cn } from '../../lib/utils';\nimport _ from 'lodash';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport GetUserListContext, {\n IUserGroup,\n TUserGroupValue,\n TUserValue,\n} from '../../ConfigProvider/getUserList';\nimport Empty from '../../Empty';\nimport { ChevronLeftLine } from '../../Icon';\nimport ScrollArea from '../../ScrollArea';\nimport Spin from '../../Spin';\nimport { LocaleContext, getTranslator } from '../../locale/default';\nimport { isUserGroup } from '../utils/getUsersWithUserId';\nimport MultipleOption from './MultipleOption';\nimport SingleOption from './SingleOption';\n\ninterface IProps {\n className?: string;\n userGroupList: IUserGroup[];\n multiple?: boolean;\n onChange: (selected: boolean, userGroup: IUserGroup) => void;\n selectedUsersGroup: IUserGroup[];\n loading: boolean;\n onSearchValueChange?: (value: string) => void;\n width: number;\n lockedIds: Array<TUserValue | TUserGroupValue>;\n filterItem?: (item: IUserGroup) => boolean;\n searchValue?: string;\n renderItem?: (\n item: IUserGroup,\n context: {\n isSelected: boolean;\n disabled: boolean;\n onClick: () => void;\n onNextLevel?: () => void;\n originNode: React.ReactNode;\n },\n ) => React.ReactNode;\n}\n\nconst UserGroupSelection = ({\n className,\n userGroupList,\n multiple,\n onChange,\n selectedUsersGroup: selectedUsersGroups,\n loading,\n onSearchValueChange,\n width,\n lockedIds,\n filterItem,\n searchValue = '',\n renderItem,\n}: IProps) => {\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const { getNextLevelGroup } = useContext(GetUserListContext);\n\n const isAsync = !!getNextLevelGroup;\n\n const [groupPath, setGroupPath] = useState<IUserGroup[]>([]);\n const [asyncUserGroupList, setAsyncUserGroupList] = useState<IUserGroup[]>(\n [],\n );\n const parentGroupId = _.last(groupPath)?.groupId;\n\n useEffect(() => {\n if (!getNextLevelGroup) {\n return;\n }\n\n let ignore = false;\n getNextLevelGroup({\n parentGroupId,\n keyword: searchValue,\n }).then((userGroups) => {\n if (!ignore) {\n setAsyncUserGroupList(userGroups);\n }\n });\n\n return () => {\n ignore = true;\n };\n }, [getNextLevelGroup, parentGroupId, searchValue]);\n\n const filterUserList = useMemo(() => {\n let currentLevelGroups = asyncUserGroupList;\n\n if (!isAsync) {\n currentLevelGroups = userGroupList.filter((userGroup) => {\n if (groupPath.length === 0) {\n return !userGroup.parentId;\n }\n\n return userGroup.parentId === parentGroupId;\n });\n\n const normalizedKeyword = searchValue.trim().toLowerCase();\n currentLevelGroups = currentLevelGroups.filter((group) => {\n if (!normalizedKeyword) {\n return true;\n }\n\n return group.name.toLowerCase().includes(normalizedKeyword);\n });\n }\n\n return currentLevelGroups.filter((userGroup) => {\n if (filterItem) {\n return filterItem(userGroup);\n }\n\n return true;\n });\n }, [\n asyncUserGroupList,\n filterItem,\n groupPath.length,\n isAsync,\n parentGroupId,\n searchValue,\n userGroupList,\n ]);\n\n return (\n <div className={cn(className, 'ald-member-picker-member-list-wrap')}>\n {userGroupList.length === 0 && !loading && (\n <Empty\n title={t.MemberPicker.noData}\n size=\"small\"\n image={Empty.PRESENTED_IMAGE_SEARCH}\n className=\"ald-member-picker-member-list-empty\"\n />\n )}\n {groupPath.length !== 0 && (\n <ScrollArea className=\"ald-member-picker-breadcrumb-scroll\">\n <Breadcrumb className=\"ald-member-picker-breadcrumb\">\n <Breadcrumb.Item\n className=\"ald-member-picker-breadcrumb-item\"\n onClick={() => {\n setGroupPath([]);\n }}\n >\n <div className=\"ald-member-picker-breadcrumb-item-inner\">\n <ChevronLeftLine size={16} />\n {t.MemberPicker.userGroups}\n </div>\n </Breadcrumb.Item>\n {groupPath.map((group) => (\n <Breadcrumb.Item\n className=\"ald-member-picker-breadcrumb-item\"\n key={group.groupId}\n onClick={() => {\n setGroupPath((groups) => {\n const groupIndex = groups.findIndex(\n (tempGroup) => tempGroup.groupId === group.groupId,\n );\n return groups.filter(\n (tempGroup, index) => index <= groupIndex,\n );\n });\n }}\n >\n <div className=\"ald-member-picker-breadcrumb-item-inner\">\n {group.name}\n </div>\n </Breadcrumb.Item>\n ))}\n </Breadcrumb>\n </ScrollArea>\n )}\n <Spin\n tip=\"Loading\"\n spinning={loading}\n size=\"small\"\n className=\"ald-member-picker-user-list\"\n >\n <ScrollArea\n className={cn('ald-member-picker-member-list', {\n 'ald-member-picker-member-list-null':\n userGroupList.length === 0 && !loading,\n })}\n innerClassName=\"ald-member-picker-member-scroll\"\n >\n <div\n role=\"listbox\"\n aria-label=\"Groups\"\n aria-multiselectable={multiple || undefined}\n className=\"ald-member-picker-member-list-inner\"\n style={{ width: multiple ? width : undefined, overflow: 'hidden' }}\n >\n {filterUserList.map((userGroup) => {\n const isSelected = selectedUsersGroups.some(\n (selectUserGroup) =>\n selectUserGroup.groupId === userGroup.groupId,\n );\n\n const index = _.findIndex(lockedIds, {\n groupId: userGroup.groupId,\n type: userGroup.type,\n });\n const disabled = index !== -1;\n\n const hasNextLevel =\n userGroupList.some(\n (group) => group.parentId === userGroup.groupId,\n ) || isAsync;\n const onNextLevel = () => {\n setGroupPath((prev) => [...prev, userGroup]);\n onSearchValueChange?.('');\n };\n\n const originNode = multiple ? (\n <MultipleOption\n key={userGroup.groupId}\n user={userGroup}\n disabled={disabled}\n selected={isSelected}\n onChange={(selected, userGroup) => {\n if (isUserGroup(userGroup)) {\n onChange(selected, userGroup);\n }\n }}\n hasNextLevel={hasNextLevel}\n onNextLevel={onNextLevel}\n ></MultipleOption>\n ) : (\n <SingleOption\n key={userGroup.groupId}\n user={userGroup}\n disabled={disabled}\n selected={isSelected}\n onChange={(selected, userGroup) => {\n if (isUserGroup(userGroup)) {\n onChange(selected, userGroup);\n }\n }}\n hasNextLevel={hasNextLevel}\n onNextLevel={onNextLevel}\n ></SingleOption>\n );\n\n if (renderItem) {\n return (\n <div\n key={userGroup.groupId}\n role=\"option\"\n id={`ald-member-picker-option-${userGroup.groupId}`}\n aria-selected={isSelected}\n aria-disabled={disabled || undefined}\n >\n {renderItem(userGroup, {\n isSelected,\n disabled,\n onClick: () => {\n if (isUserGroup(userGroup) && !disabled) {\n onChange(!isSelected, userGroup);\n }\n },\n onNextLevel: hasNextLevel ? onNextLevel : undefined,\n originNode,\n })}\n </div>\n );\n }\n\n return originNode;\n })}\n </div>\n </ScrollArea>\n </Spin>\n </div>\n );\n};\n\nexport default UserGroupSelection;\n"],"mappings":"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"}
1
+ {"version":3,"file":"UserGroupSelection.js","names":[],"sources":["../../../src/MemberPicker/components/UserGroupSelection.tsx"],"sourcesContent":["import Breadcrumb from '../../Breadcrumb';\nimport { cn } from '../../lib/utils';\nimport _ from 'lodash';\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport GetUserListContext, {\n IUserGroup,\n TUserGroupValue,\n TUserValue,\n} from '../../ConfigProvider/getUserList';\nimport Empty from '../../Empty';\nimport { ChevronLeftLine, SearchLine } from '../../Icon';\nimport Input from '../../Input';\nimport ScrollArea from '../../ScrollArea';\nimport Spin from '../../Spin';\nimport { LocaleContext, getTranslator } from '../../locale/default';\nimport { isUserGroup } from '../utils/getUsersWithUserId';\nimport MultipleOption from './MultipleOption';\nimport SingleOption from './SingleOption';\n\ninterface IProps {\n className?: string;\n userGroupList: IUserGroup[];\n multiple?: boolean;\n onChange: (selected: boolean, userGroup: IUserGroup) => void;\n selectedUsersGroup: IUserGroup[];\n loading: boolean;\n onSearchValueChange?: (value: string) => void;\n width: number;\n lockedIds: Array<TUserValue | TUserGroupValue>;\n filterItem?: (item: IUserGroup) => boolean;\n searchValue?: string;\n showSearch?: boolean;\n renderItem?: (\n item: IUserGroup,\n context: {\n isSelected: boolean;\n disabled: boolean;\n onClick: () => void;\n onNextLevel?: () => void;\n originNode: React.ReactNode;\n },\n ) => React.ReactNode;\n}\n\nconst UserGroupSelection = ({\n className,\n userGroupList,\n multiple,\n onChange,\n selectedUsersGroup: selectedUsersGroups,\n loading,\n onSearchValueChange,\n width,\n lockedIds,\n filterItem,\n searchValue = '',\n showSearch,\n renderItem,\n}: IProps) => {\n const { locale } = useContext(LocaleContext);\n const t = getTranslator(locale);\n\n const { getNextLevelGroup } = useContext(GetUserListContext);\n\n const isAsync = !!getNextLevelGroup;\n\n const [groupPath, setGroupPath] = useState<IUserGroup[]>([]);\n const [asyncUserGroupList, setAsyncUserGroupList] = useState<IUserGroup[]>(\n [],\n );\n const parentGroupId = _.last(groupPath)?.groupId;\n\n useEffect(() => {\n if (!getNextLevelGroup) {\n return;\n }\n\n let ignore = false;\n getNextLevelGroup({\n parentGroupId,\n keyword: searchValue,\n }).then((userGroups) => {\n if (!ignore) {\n setAsyncUserGroupList(userGroups);\n }\n });\n\n return () => {\n ignore = true;\n };\n }, [getNextLevelGroup, parentGroupId, searchValue]);\n\n const filterUserList = useMemo(() => {\n let currentLevelGroups = asyncUserGroupList;\n\n if (!isAsync) {\n currentLevelGroups = userGroupList.filter((userGroup) => {\n if (groupPath.length === 0) {\n return !userGroup.parentId;\n }\n\n return userGroup.parentId === parentGroupId;\n });\n\n const normalizedKeyword = searchValue.trim().toLowerCase();\n currentLevelGroups = currentLevelGroups.filter((group) => {\n if (!normalizedKeyword) {\n return true;\n }\n\n return group.name.toLowerCase().includes(normalizedKeyword);\n });\n }\n\n return currentLevelGroups.filter((userGroup) => {\n if (filterItem) {\n return filterItem(userGroup);\n }\n\n return true;\n });\n }, [\n asyncUserGroupList,\n filterItem,\n groupPath.length,\n isAsync,\n parentGroupId,\n searchValue,\n userGroupList,\n ]);\n\n return (\n <div className={cn(className, 'ald-member-picker-member-list-wrap')}>\n {showSearch && (\n <Input\n prefix={<SearchLine size={16} />}\n className=\"ald-member-picker-search-input\"\n aria-label={t.InputSearch.search}\n autoFocus\n value={searchValue}\n onChange={(event) => onSearchValueChange?.(event.target.value)}\n />\n )}\n {userGroupList.length === 0 && !loading && (\n <Empty\n title={t.MemberPicker.noData}\n size=\"small\"\n image={Empty.PRESENTED_IMAGE_SEARCH}\n className=\"ald-member-picker-member-list-empty\"\n />\n )}\n {groupPath.length !== 0 && (\n <ScrollArea className=\"ald-member-picker-breadcrumb-scroll\">\n <Breadcrumb className=\"ald-member-picker-breadcrumb\">\n <Breadcrumb.Item\n className=\"ald-member-picker-breadcrumb-item\"\n onClick={() => {\n setGroupPath([]);\n }}\n >\n <div className=\"ald-member-picker-breadcrumb-item-inner\">\n <ChevronLeftLine size={16} />\n {t.MemberPicker.userGroups}\n </div>\n </Breadcrumb.Item>\n {groupPath.map((group) => (\n <Breadcrumb.Item\n className=\"ald-member-picker-breadcrumb-item\"\n key={group.groupId}\n onClick={() => {\n setGroupPath((groups) => {\n const groupIndex = groups.findIndex(\n (tempGroup) => tempGroup.groupId === group.groupId,\n );\n return groups.filter(\n (tempGroup, index) => index <= groupIndex,\n );\n });\n }}\n >\n <div className=\"ald-member-picker-breadcrumb-item-inner\">\n {group.name}\n </div>\n </Breadcrumb.Item>\n ))}\n </Breadcrumb>\n </ScrollArea>\n )}\n <Spin\n tip=\"Loading\"\n spinning={loading}\n size=\"small\"\n className=\"ald-member-picker-user-list\"\n >\n <ScrollArea\n className={cn('ald-member-picker-member-list', {\n 'ald-member-picker-member-list-null':\n userGroupList.length === 0 && !loading,\n })}\n innerClassName=\"ald-member-picker-member-scroll\"\n >\n <div\n role=\"listbox\"\n aria-label=\"Groups\"\n aria-multiselectable={multiple || undefined}\n className=\"ald-member-picker-member-list-inner\"\n style={{ width: multiple ? width : undefined, overflow: 'hidden' }}\n >\n {filterUserList.map((userGroup) => {\n const isSelected = selectedUsersGroups.some(\n (selectUserGroup) =>\n selectUserGroup.groupId === userGroup.groupId,\n );\n\n const index = _.findIndex(lockedIds, {\n groupId: userGroup.groupId,\n type: userGroup.type,\n });\n const disabled = index !== -1;\n\n const hasNextLevel =\n userGroupList.some(\n (group) => group.parentId === userGroup.groupId,\n ) || isAsync;\n const onNextLevel = () => {\n setGroupPath((prev) => [...prev, userGroup]);\n onSearchValueChange?.('');\n };\n\n const originNode = multiple ? (\n <MultipleOption\n key={userGroup.groupId}\n user={userGroup}\n disabled={disabled}\n selected={isSelected}\n onChange={(selected, userGroup) => {\n if (isUserGroup(userGroup)) {\n onChange(selected, userGroup);\n }\n }}\n hasNextLevel={hasNextLevel}\n onNextLevel={onNextLevel}\n ></MultipleOption>\n ) : (\n <SingleOption\n key={userGroup.groupId}\n user={userGroup}\n disabled={disabled}\n selected={isSelected}\n onChange={(selected, userGroup) => {\n if (isUserGroup(userGroup)) {\n onChange(selected, userGroup);\n }\n }}\n hasNextLevel={hasNextLevel}\n onNextLevel={onNextLevel}\n ></SingleOption>\n );\n\n if (renderItem) {\n return (\n <div\n key={userGroup.groupId}\n role=\"option\"\n id={`ald-member-picker-option-${userGroup.groupId}`}\n aria-selected={isSelected}\n aria-disabled={disabled || undefined}\n >\n {renderItem(userGroup, {\n isSelected,\n disabled,\n onClick: () => {\n if (isUserGroup(userGroup) && !disabled) {\n onChange(!isSelected, userGroup);\n }\n },\n onNextLevel: hasNextLevel ? onNextLevel : undefined,\n originNode,\n })}\n </div>\n );\n }\n\n return originNode;\n })}\n </div>\n </ScrollArea>\n </Spin>\n </div>\n );\n};\n\nexport default UserGroupSelection;\n"],"mappings":"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"}
@@ -133,7 +133,7 @@ var Select_default = forwardRef(function Select(props, ref) {
133
133
  keyMenuItems
134
134
  ]);
135
135
  const displayMenu = useDisplayMenu(selectMenu, onSearch ? filterOption || noOpFilter : filterOption, innerSearchValue);
136
- const useStandardOptionCollection = !menu && !dropdownRender && (!showSearch || !multiple) && !(options || []).some((option) => option.children?.length);
136
+ const useStandardOptionCollection = !menu && !dropdownRender && !showSearch && !(options || []).some((option) => option.children?.length);
137
137
  const collectionMenuItems = useMemo(() => {
138
138
  if (!showSearch) return keyMenuItems;
139
139
  const query = innerSearchValue || "";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/Select/index.tsx"],"sourcesContent":["import React, { forwardRef, useCallback, useContext, useMemo } from 'react';\nimport {\n BaseSelectRef,\n DefaultOptionType,\n DisplayInfoType,\n DraftValueType,\n ISelectProps,\n LabelInValueType,\n RawValueType,\n} from './interface';\n\nimport useOptions, { isRawValue } from './hooks/useOptions';\nimport useMergedState from 'rc-util/es/hooks/useMergedState';\nimport { noOpFilter, toArray } from './utils/commonUtil';\nimport useCache from './hooks/useCache';\nimport BaseSelect, { BaseSelectProps, isMultiple } from './BaseSelect';\nimport { MenuInfo } from '../Menu';\nimport { injectPropsWithOption } from './utils/valueUtil';\nimport useDisplayMenu from './hooks/useDisplayMenu';\nimport { toString } from './utils/commonUtil';\nimport DisabledContext from '../ConfigProvider/DisabledContext';\nimport {\n createSelectOptionCollection,\n SelectOptionCollection,\n} from './components/OptionCollection';\n\nexport default forwardRef(function Select(\n props: ISelectProps,\n ref: React.Ref<BaseSelectRef>,\n) {\n const {\n value,\n defaultValue,\n mode,\n menu,\n options,\n onChange,\n onSelect,\n onSearch,\n onDeselect,\n labelInValue,\n filterOption,\n searchValue,\n optionLabelProp,\n listHeight = 256,\n disabled: customDisabled,\n showSearch,\n dropdownRender,\n } = props;\n\n // =========================== Values ===========================\n const [internalValue, setInternalValue] = useMergedState(defaultValue, {\n value,\n });\n const disabled = useContext(DisabledContext);\n const mergedDisabled = customDisabled ?? disabled;\n const parsedOptions = useOptions({\n menu,\n options,\n value: internalValue,\n optionLabelProp,\n listHeight,\n });\n const { menu: mergedMenu, keyMenuItems } = parsedOptions;\n const multiple = isMultiple(mode);\n // ============================== SearchValue ==============================\n const [innerSearchValue, setInnerSearchValue] = useMergedState<\n string | undefined\n >(undefined, {\n value: searchValue,\n });\n // ========================= Wrap Value =========================\n const convert2LabelValues = React.useCallback(\n (draftValues: DraftValueType) => {\n // Convert to array\n const valueList = toArray(draftValues);\n\n // Convert to labelInValue type\n return valueList.map((val) => {\n let rawValue: RawValueType;\n let rawLabel: React.ReactNode;\n let rawDisabled: boolean | undefined;\n\n if (isRawValue(val)) {\n rawValue = val;\n } else {\n rawLabel = val.label;\n // @ts-ignore val.key是为了兼容存在key的情况\n rawValue = (val.value as RawValueType) ?? (val.key as RawValueType);\n }\n\n const menuItem = keyMenuItems.get(toString(rawValue));\n if (menuItem) {\n // Fill missing props\n if (rawLabel === undefined) {\n if (optionLabelProp) {\n rawLabel = menuItem[optionLabelProp] || menuItem.label;\n } else {\n rawLabel = menuItem.label;\n }\n }\n rawDisabled = menuItem.disabled;\n }\n\n return {\n label: rawLabel,\n value: rawValue,\n disabled: rawDisabled,\n };\n });\n },\n [keyMenuItems, optionLabelProp],\n );\n\n // Merged value with LabelValueType\n const rawLabeledValues = React.useMemo(() => {\n const values = convert2LabelValues(internalValue);\n\n return values;\n }, [internalValue, convert2LabelValues]);\n\n // Fill label with cache to avoid option remove\n const [mergedValues, getMixedOption] = useCache(\n rawLabeledValues,\n keyMenuItems,\n );\n\n const displayValues = React.useMemo(() => {\n // `null` need show as placeholder instead\n if (!mode && mergedValues.length === 1) {\n const firstValue = mergedValues[0];\n if (\n firstValue.value === null &&\n (firstValue.label === null || firstValue.label === undefined)\n ) {\n return [] as LabelInValueType[];\n }\n }\n\n return mergedValues.map((item) => ({\n ...item,\n label: item.label ?? item.value,\n }));\n }, [mode, mergedValues]);\n\n // =========================== Change ===========================\n const triggerChange = useCallback(\n (values: DraftValueType) => {\n const labeledValues = convert2LabelValues(values);\n setInternalValue(labeledValues);\n\n if (\n onChange &&\n // Trigger event only when value changed\n (labeledValues.length !== mergedValues.length ||\n labeledValues.some(\n (newVal, index) => mergedValues[index]?.value !== newVal?.value,\n ))\n ) {\n const returnValues = labelInValue\n ? labeledValues\n : labeledValues.map((v) => v.value);\n const returnOptions = labeledValues.map((v) =>\n injectPropsWithOption(getMixedOption(v.value)),\n );\n\n onChange(\n // Value\n multiple ? returnValues : returnValues[0],\n // Option\n multiple ? returnOptions : returnOptions[0],\n );\n }\n },\n [\n convert2LabelValues,\n setInternalValue,\n onChange,\n mergedValues,\n labelInValue,\n multiple,\n getMixedOption,\n ],\n );\n // ========================= OptionList =========================\n const triggerSelect = (\n val: RawValueType,\n selected: boolean,\n type?: DisplayInfoType,\n ) => {\n const getSelectEnt = (): [\n RawValueType | LabelInValueType,\n DefaultOptionType,\n ] => {\n const option = getMixedOption(val);\n\n return [\n labelInValue\n ? {\n label: option.label,\n value: val,\n }\n : val,\n injectPropsWithOption(option),\n ];\n };\n\n if (selected && onSelect) {\n const [wrappedValue, option] = getSelectEnt();\n onSelect(wrappedValue, option);\n } else if (!selected && onDeselect && type !== 'clear') {\n const [wrappedValue, option] = getSelectEnt();\n onDeselect(wrappedValue, option);\n }\n };\n // Used for OptionList selection\n const onOptionSelect = (val: RawValueType) => {\n // Get the original value from keyMenuItems to preserve the type (number/string)\n const menuItem = keyMenuItems.get(toString(val));\n const originalValue = menuItem?.value !== undefined ? menuItem.value : val;\n\n const selected = displayValues.find(\n (item) => toString(item.value) === toString(val),\n );\n if (isMultiple(mode)) {\n if (!selected) {\n triggerSelect(originalValue, true, 'add');\n } else {\n triggerSelect(originalValue, false, 'remove');\n }\n } else {\n triggerSelect(originalValue, true, 'add');\n }\n };\n // ======================= Display Change =======================\n // BaseSelect display values change\n const onDisplayValuesChange: BaseSelectProps['onDisplayValuesChange'] = (\n nextValues,\n info,\n ) => {\n triggerChange(nextValues);\n const { type, values } = info;\n\n if (type === 'remove' || type === 'clear') {\n values.forEach((item) => {\n triggerSelect(item.value, false, type);\n });\n }\n };\n const handleSearch = (value: string) => {\n setInnerSearchValue(value);\n if (onSearch) {\n onSearch(value);\n }\n };\n\n const selectMenu = useMemo(() => {\n return {\n ...mergedMenu,\n items: mergedMenu?.items || [],\n onClick: (menuInfo: MenuInfo) => {\n // Get the original value from keyMenuItems to preserve the type (number/string)\n const menuItem = keyMenuItems.get(menuInfo.key);\n const originalValue =\n menuItem?.value !== undefined ? menuItem.value : menuInfo.key;\n\n if (mode && isMultiple(mode)) {\n if (\n displayValues.find((item) => toString(item.value) === menuInfo.key)\n ) {\n triggerChange(\n displayValues\n .filter((item) => toString(item.value) !== menuInfo.key)\n .map((item) => item.value),\n );\n } else {\n triggerChange([...displayValues, originalValue]);\n }\n } else {\n triggerChange(originalValue);\n }\n mergedMenu?.onClick?.(menuInfo);\n },\n };\n }, [mergedMenu, mode, displayValues, triggerChange, keyMenuItems]);\n\n const displayMenu = useDisplayMenu(\n selectMenu,\n // 如果用户接管了搜索,则默认不做搜索过滤\n onSearch ? filterOption || noOpFilter : filterOption,\n innerSearchValue,\n );\n\n // Flat standard options use the private collection. Menu-shaped,\n // searchable, custom popup, and nested inputs remain on the legacy path.\n const useStandardOptionCollection =\n !menu &&\n !dropdownRender &&\n (!showSearch || !multiple) &&\n !(options || []).some((option) => option.children?.length);\n const collectionMenuItems = useMemo(() => {\n if (!showSearch) {\n return keyMenuItems;\n }\n\n const query = innerSearchValue || '';\n return new Map(\n Array.from(keyMenuItems).filter(([, option]) => {\n if (onSearch && !filterOption) {\n return true;\n }\n if (filterOption) {\n return filterOption(query, option);\n }\n return String(option.label ?? option.value)\n .toLocaleLowerCase()\n .includes(query.toLocaleLowerCase());\n }),\n );\n }, [filterOption, innerSearchValue, keyMenuItems, onSearch, showSearch]);\n const collectionId = React.useId().replace(/:/g, '');\n const optionCollection = useMemo<SelectOptionCollection | undefined>(() => {\n if (!useStandardOptionCollection) {\n return undefined;\n }\n\n return createSelectOptionCollection(\n `ald-select-listbox-${collectionId}`,\n collectionMenuItems,\n );\n }, [collectionId, collectionMenuItems, useStandardOptionCollection]);\n\n const onCollectionOptionSelect = useCallback(\n (value: RawValueType) => {\n const menuItem = keyMenuItems.get(toString(value));\n const originalValue =\n menuItem?.value !== undefined ? menuItem.value : value;\n\n const selected = displayValues.some(\n (item) => toString(item.value) === toString(originalValue),\n );\n if (multiple) {\n triggerChange(\n selected\n ? displayValues\n .filter(\n (item) => toString(item.value) !== toString(originalValue),\n )\n .map((item) => item.value)\n : [...displayValues.map((item) => item.value), originalValue],\n );\n } else {\n triggerChange(originalValue);\n }\n onOptionSelect(originalValue);\n },\n [displayValues, keyMenuItems, multiple, onOptionSelect, triggerChange],\n );\n\n return (\n <BaseSelect\n {...props}\n ref={ref}\n disabled={mergedDisabled}\n displayValues={displayValues}\n onDisplayValuesChange={onDisplayValuesChange}\n setInnerSearchValue={handleSearch}\n innerSearchValue={\n searchValue === undefined ? innerSearchValue : searchValue\n }\n onOptionSelect={onOptionSelect}\n menu={selectMenu}\n displayMenu={displayMenu}\n optionCollection={optionCollection}\n onCollectionOptionSelect={onCollectionOptionSelect}\n ></BaseSelect>\n );\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/Select/index.tsx"],"sourcesContent":["import React, { forwardRef, useCallback, useContext, useMemo } from 'react';\nimport {\n BaseSelectRef,\n DefaultOptionType,\n DisplayInfoType,\n DraftValueType,\n ISelectProps,\n LabelInValueType,\n RawValueType,\n} from './interface';\n\nimport useOptions, { isRawValue } from './hooks/useOptions';\nimport useMergedState from 'rc-util/es/hooks/useMergedState';\nimport { noOpFilter, toArray } from './utils/commonUtil';\nimport useCache from './hooks/useCache';\nimport BaseSelect, { BaseSelectProps, isMultiple } from './BaseSelect';\nimport { MenuInfo } from '../Menu';\nimport { injectPropsWithOption } from './utils/valueUtil';\nimport useDisplayMenu from './hooks/useDisplayMenu';\nimport { toString } from './utils/commonUtil';\nimport DisabledContext from '../ConfigProvider/DisabledContext';\nimport {\n createSelectOptionCollection,\n SelectOptionCollection,\n} from './components/OptionCollection';\n\nexport default forwardRef(function Select(\n props: ISelectProps,\n ref: React.Ref<BaseSelectRef>,\n) {\n const {\n value,\n defaultValue,\n mode,\n menu,\n options,\n onChange,\n onSelect,\n onSearch,\n onDeselect,\n labelInValue,\n filterOption,\n searchValue,\n optionLabelProp,\n listHeight = 256,\n disabled: customDisabled,\n showSearch,\n dropdownRender,\n } = props;\n\n // =========================== Values ===========================\n const [internalValue, setInternalValue] = useMergedState(defaultValue, {\n value,\n });\n const disabled = useContext(DisabledContext);\n const mergedDisabled = customDisabled ?? disabled;\n const parsedOptions = useOptions({\n menu,\n options,\n value: internalValue,\n optionLabelProp,\n listHeight,\n });\n const { menu: mergedMenu, keyMenuItems } = parsedOptions;\n const multiple = isMultiple(mode);\n // ============================== SearchValue ==============================\n const [innerSearchValue, setInnerSearchValue] = useMergedState<\n string | undefined\n >(undefined, {\n value: searchValue,\n });\n // ========================= Wrap Value =========================\n const convert2LabelValues = React.useCallback(\n (draftValues: DraftValueType) => {\n // Convert to array\n const valueList = toArray(draftValues);\n\n // Convert to labelInValue type\n return valueList.map((val) => {\n let rawValue: RawValueType;\n let rawLabel: React.ReactNode;\n let rawDisabled: boolean | undefined;\n\n if (isRawValue(val)) {\n rawValue = val;\n } else {\n rawLabel = val.label;\n // @ts-ignore val.key是为了兼容存在key的情况\n rawValue = (val.value as RawValueType) ?? (val.key as RawValueType);\n }\n\n const menuItem = keyMenuItems.get(toString(rawValue));\n if (menuItem) {\n // Fill missing props\n if (rawLabel === undefined) {\n if (optionLabelProp) {\n rawLabel = menuItem[optionLabelProp] || menuItem.label;\n } else {\n rawLabel = menuItem.label;\n }\n }\n rawDisabled = menuItem.disabled;\n }\n\n return {\n label: rawLabel,\n value: rawValue,\n disabled: rawDisabled,\n };\n });\n },\n [keyMenuItems, optionLabelProp],\n );\n\n // Merged value with LabelValueType\n const rawLabeledValues = React.useMemo(() => {\n const values = convert2LabelValues(internalValue);\n\n return values;\n }, [internalValue, convert2LabelValues]);\n\n // Fill label with cache to avoid option remove\n const [mergedValues, getMixedOption] = useCache(\n rawLabeledValues,\n keyMenuItems,\n );\n\n const displayValues = React.useMemo(() => {\n // `null` need show as placeholder instead\n if (!mode && mergedValues.length === 1) {\n const firstValue = mergedValues[0];\n if (\n firstValue.value === null &&\n (firstValue.label === null || firstValue.label === undefined)\n ) {\n return [] as LabelInValueType[];\n }\n }\n\n return mergedValues.map((item) => ({\n ...item,\n label: item.label ?? item.value,\n }));\n }, [mode, mergedValues]);\n\n // =========================== Change ===========================\n const triggerChange = useCallback(\n (values: DraftValueType) => {\n const labeledValues = convert2LabelValues(values);\n setInternalValue(labeledValues);\n\n if (\n onChange &&\n // Trigger event only when value changed\n (labeledValues.length !== mergedValues.length ||\n labeledValues.some(\n (newVal, index) => mergedValues[index]?.value !== newVal?.value,\n ))\n ) {\n const returnValues = labelInValue\n ? labeledValues\n : labeledValues.map((v) => v.value);\n const returnOptions = labeledValues.map((v) =>\n injectPropsWithOption(getMixedOption(v.value)),\n );\n\n onChange(\n // Value\n multiple ? returnValues : returnValues[0],\n // Option\n multiple ? returnOptions : returnOptions[0],\n );\n }\n },\n [\n convert2LabelValues,\n setInternalValue,\n onChange,\n mergedValues,\n labelInValue,\n multiple,\n getMixedOption,\n ],\n );\n // ========================= OptionList =========================\n const triggerSelect = (\n val: RawValueType,\n selected: boolean,\n type?: DisplayInfoType,\n ) => {\n const getSelectEnt = (): [\n RawValueType | LabelInValueType,\n DefaultOptionType,\n ] => {\n const option = getMixedOption(val);\n\n return [\n labelInValue\n ? {\n label: option.label,\n value: val,\n }\n : val,\n injectPropsWithOption(option),\n ];\n };\n\n if (selected && onSelect) {\n const [wrappedValue, option] = getSelectEnt();\n onSelect(wrappedValue, option);\n } else if (!selected && onDeselect && type !== 'clear') {\n const [wrappedValue, option] = getSelectEnt();\n onDeselect(wrappedValue, option);\n }\n };\n // Used for OptionList selection\n const onOptionSelect = (val: RawValueType) => {\n // Get the original value from keyMenuItems to preserve the type (number/string)\n const menuItem = keyMenuItems.get(toString(val));\n const originalValue = menuItem?.value !== undefined ? menuItem.value : val;\n\n const selected = displayValues.find(\n (item) => toString(item.value) === toString(val),\n );\n if (isMultiple(mode)) {\n if (!selected) {\n triggerSelect(originalValue, true, 'add');\n } else {\n triggerSelect(originalValue, false, 'remove');\n }\n } else {\n triggerSelect(originalValue, true, 'add');\n }\n };\n // ======================= Display Change =======================\n // BaseSelect display values change\n const onDisplayValuesChange: BaseSelectProps['onDisplayValuesChange'] = (\n nextValues,\n info,\n ) => {\n triggerChange(nextValues);\n const { type, values } = info;\n\n if (type === 'remove' || type === 'clear') {\n values.forEach((item) => {\n triggerSelect(item.value, false, type);\n });\n }\n };\n const handleSearch = (value: string) => {\n setInnerSearchValue(value);\n if (onSearch) {\n onSearch(value);\n }\n };\n\n const selectMenu = useMemo(() => {\n return {\n ...mergedMenu,\n items: mergedMenu?.items || [],\n onClick: (menuInfo: MenuInfo) => {\n // Get the original value from keyMenuItems to preserve the type (number/string)\n const menuItem = keyMenuItems.get(menuInfo.key);\n const originalValue =\n menuItem?.value !== undefined ? menuItem.value : menuInfo.key;\n\n if (mode && isMultiple(mode)) {\n if (\n displayValues.find((item) => toString(item.value) === menuInfo.key)\n ) {\n triggerChange(\n displayValues\n .filter((item) => toString(item.value) !== menuInfo.key)\n .map((item) => item.value),\n );\n } else {\n triggerChange([...displayValues, originalValue]);\n }\n } else {\n triggerChange(originalValue);\n }\n mergedMenu?.onClick?.(menuInfo);\n },\n };\n }, [mergedMenu, mode, displayValues, triggerChange, keyMenuItems]);\n\n const displayMenu = useDisplayMenu(\n selectMenu,\n // 如果用户接管了搜索,则默认不做搜索过滤\n onSearch ? filterOption || noOpFilter : filterOption,\n innerSearchValue,\n );\n\n // Flat standard options use the private collection. Menu-shaped,\n // searchable, custom popup, and nested inputs remain on the legacy path.\n const useStandardOptionCollection =\n !menu &&\n !dropdownRender &&\n !showSearch &&\n !(options || []).some((option) => option.children?.length);\n const collectionMenuItems = useMemo(() => {\n if (!showSearch) {\n return keyMenuItems;\n }\n\n const query = innerSearchValue || '';\n return new Map(\n Array.from(keyMenuItems).filter(([, option]) => {\n if (onSearch && !filterOption) {\n return true;\n }\n if (filterOption) {\n return filterOption(query, option);\n }\n return String(option.label ?? option.value)\n .toLocaleLowerCase()\n .includes(query.toLocaleLowerCase());\n }),\n );\n }, [filterOption, innerSearchValue, keyMenuItems, onSearch, showSearch]);\n const collectionId = React.useId().replace(/:/g, '');\n const optionCollection = useMemo<SelectOptionCollection | undefined>(() => {\n if (!useStandardOptionCollection) {\n return undefined;\n }\n\n return createSelectOptionCollection(\n `ald-select-listbox-${collectionId}`,\n collectionMenuItems,\n );\n }, [collectionId, collectionMenuItems, useStandardOptionCollection]);\n\n const onCollectionOptionSelect = useCallback(\n (value: RawValueType) => {\n const menuItem = keyMenuItems.get(toString(value));\n const originalValue =\n menuItem?.value !== undefined ? menuItem.value : value;\n\n const selected = displayValues.some(\n (item) => toString(item.value) === toString(originalValue),\n );\n if (multiple) {\n triggerChange(\n selected\n ? displayValues\n .filter(\n (item) => toString(item.value) !== toString(originalValue),\n )\n .map((item) => item.value)\n : [...displayValues.map((item) => item.value), originalValue],\n );\n } else {\n triggerChange(originalValue);\n }\n onOptionSelect(originalValue);\n },\n [displayValues, keyMenuItems, multiple, onOptionSelect, triggerChange],\n );\n\n return (\n <BaseSelect\n {...props}\n ref={ref}\n disabled={mergedDisabled}\n displayValues={displayValues}\n onDisplayValuesChange={onDisplayValuesChange}\n setInnerSearchValue={handleSearch}\n innerSearchValue={\n searchValue === undefined ? innerSearchValue : searchValue\n }\n onOptionSelect={onOptionSelect}\n menu={selectMenu}\n displayMenu={displayMenu}\n optionCollection={optionCollection}\n onCollectionOptionSelect={onCollectionOptionSelect}\n ></BaseSelect>\n );\n});\n"],"mappings":"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"}