@bioturing/components 0.47.0 → 0.48.0

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 (66) hide show
  1. package/dist/components/base-menu/index.d.ts +1 -1
  2. package/dist/components/base-menu/index.d.ts.map +1 -1
  3. package/dist/components/base-menu/item.css +1 -1
  4. package/dist/components/base-menu/item.d.ts +13 -2
  5. package/dist/components/base-menu/item.d.ts.map +1 -1
  6. package/dist/components/base-menu/item.js +62 -47
  7. package/dist/components/base-menu/item.js.map +1 -1
  8. package/dist/components/base-menu/style.css +1 -1
  9. package/dist/components/combobox/component.d.ts.map +1 -1
  10. package/dist/components/combobox/component.js +121 -121
  11. package/dist/components/combobox/component.js.map +1 -1
  12. package/dist/components/combobox/style.css +1 -1
  13. package/dist/components/data-table/component.d.ts.map +1 -1
  14. package/dist/components/data-table/component.js +81 -70
  15. package/dist/components/data-table/component.js.map +1 -1
  16. package/dist/components/data-table/components/TableBody.d.ts +3 -2
  17. package/dist/components/data-table/components/TableBody.d.ts.map +1 -1
  18. package/dist/components/data-table/components/TableBody.js +107 -99
  19. package/dist/components/data-table/components/TableBody.js.map +1 -1
  20. package/dist/components/data-table/components/TableHeader.d.ts +3 -1
  21. package/dist/components/data-table/components/TableHeader.d.ts.map +1 -1
  22. package/dist/components/data-table/components/TableHeader.js +121 -93
  23. package/dist/components/data-table/components/TableHeader.js.map +1 -1
  24. package/dist/components/data-table/components/TablePagination.d.ts.map +1 -1
  25. package/dist/components/data-table/components/TablePagination.js +32 -21
  26. package/dist/components/data-table/components/TablePagination.js.map +1 -1
  27. package/dist/components/data-table/hooks.d.ts.map +1 -1
  28. package/dist/components/data-table/hooks.js +98 -84
  29. package/dist/components/data-table/hooks.js.map +1 -1
  30. package/dist/components/data-table/style.css +1 -1
  31. package/dist/components/data-table/utils.js +37 -30
  32. package/dist/components/data-table/utils.js.map +1 -1
  33. package/dist/components/dropdown-menu/component.d.ts.map +1 -1
  34. package/dist/components/dropdown-menu/component.js +121 -144
  35. package/dist/components/dropdown-menu/component.js.map +1 -1
  36. package/dist/components/dropdown-menu/index.d.ts +2 -0
  37. package/dist/components/dropdown-menu/index.d.ts.map +1 -1
  38. package/dist/components/dropdown-menu/item.d.ts +7 -15
  39. package/dist/components/dropdown-menu/item.d.ts.map +1 -1
  40. package/dist/components/dropdown-menu/item.js +132 -81
  41. package/dist/components/dropdown-menu/item.js.map +1 -1
  42. package/dist/components/dropdown-menu/radio-group.d.ts +14 -0
  43. package/dist/components/dropdown-menu/radio-group.d.ts.map +1 -0
  44. package/dist/components/dropdown-menu/radio-group.js +45 -0
  45. package/dist/components/dropdown-menu/radio-group.js.map +1 -0
  46. package/dist/components/dropdown-menu/search-mode.d.ts +4 -0
  47. package/dist/components/dropdown-menu/search-mode.d.ts.map +1 -0
  48. package/dist/components/dropdown-menu/search-mode.js +6 -0
  49. package/dist/components/dropdown-menu/search-mode.js.map +1 -0
  50. package/dist/components/dropdown-menu/style.css +1 -1
  51. package/dist/components/dropdown-menu/submenu.d.ts +25 -0
  52. package/dist/components/dropdown-menu/submenu.d.ts.map +1 -0
  53. package/dist/components/dropdown-menu/submenu.js +96 -0
  54. package/dist/components/dropdown-menu/submenu.js.map +1 -0
  55. package/dist/components/dropdown-menu/types.d.ts +85 -12
  56. package/dist/components/dropdown-menu/types.d.ts.map +1 -1
  57. package/dist/components/dropdown-menu/useDropdownMenu.d.ts +4 -8
  58. package/dist/components/dropdown-menu/useDropdownMenu.d.ts.map +1 -1
  59. package/dist/components/dropdown-menu/useDropdownMenu.js +108 -81
  60. package/dist/components/dropdown-menu/useDropdownMenu.js.map +1 -1
  61. package/dist/components/select/component.js +29 -29
  62. package/dist/components/select/component.js.map +1 -1
  63. package/dist/index.js +278 -274
  64. package/dist/index.js.map +1 -1
  65. package/dist/stats.html +1 -1
  66. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sources":["../../../src/components/select/component.tsx"],"sourcesContent":["\"use client\";\nimport { CaretDown } from \"@bioturing/assets\";\nimport {\n autoPlacement,\n autoUpdate,\n FloatingOverlay,\n offset,\n shift,\n size,\n useFloating,\n useFloatingPortalNode,\n type MiddlewareState,\n} from \"@floating-ui/react\";\nimport { default as Checkbox } from \"antd/es/checkbox\";\nimport {\n default as AntSelect,\n type SelectProps as AntSelectProps,\n type BaseOptionType,\n type DefaultOptionType,\n} from \"antd/es/select\";\nimport { toMerged } from \"es-toolkit\";\nimport React, { CSSProperties, forwardRef, useCallback, useMemo } from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport { useStableCallback } from \"@base-ui/utils/useStableCallback\";\nimport { PopupPanelSize } from \"../popup-panel/constants\";\nimport { clsx, useCls } from \"../utils\";\n\n// Import component-specific styles\nimport { Divider } from \"antd\";\nimport { CheckboxProps } from \"../checkbox\";\nimport { SelectItem } from \"./item\";\nimport \"./style.css\";\nimport { BaseSelectRef } from \"rc-select\";\nimport { useValueAsRef } from \"@base-ui/utils/useValueAsRef\";\n// SelectItem component props\n\n// Define props interface extending Ant Design's SelectProps\nexport interface SelectProps<\n ValueType = unknown,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType\n> extends AntSelectProps<ValueType, OptionType> {\n /**\n * Whether to enhance the positioner using floating-ui\n * @default false\n */\n enhancePositioner?: boolean;\n /**\n * Size of the popup panel\n * Will be ignored if enhancePositioner is false\n */\n popupSize?: string | number | PopupPanelSize;\n /**\n * Show selection summary instead of tags in multiple case\n * @default false\n */\n showSelectionSummary?: boolean;\n /**\n * Render function for the selection summary in multiple case\n * @default (value) => `${value.length} items selected`\n */\n selectionSummaryRender?: (value: ValueType) => React.ReactNode;\n /**\n * Show select all option when in multiple mode\n * @default false\n */\n showSelectAll?: boolean;\n /**\n * Render function for the select all option\n */\n selectAllRender?: (props: {\n onClick: () => void;\n checked: CheckboxProps[\"checked\"];\n indeterminate: CheckboxProps[\"indeterminate\"];\n }) => React.ReactNode;\n}\n\nexport type {\n BaseOptionType as SelectBaseOptionType,\n DefaultOptionType as SelectDefaultOptionType,\n};\n\n// Create inner function\nconst MainSelectInner = <\n ValueType = unknown,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType\n>(\n {\n mode,\n className,\n open: openProp,\n defaultOpen,\n onOpenChange,\n popupClassName,\n onDropdownVisibleChange,\n enhancePositioner,\n getPopupContainer,\n popupSize,\n popupRender,\n dropdownRender,\n classNames,\n styles = {},\n showSelectionSummary,\n selectionSummaryRender,\n value: valueProp,\n onChange: onChangeProp,\n defaultValue,\n showSelectAll,\n selectAllRender,\n options,\n ...rest\n }: SelectProps<ValueType, OptionType>,\n ref: React.Ref<React.ComponentRef<typeof AntSelect>>\n) => {\n const portalNode = useFloatingPortalNode({});\n const isMultiple = mode === \"multiple\" || mode === \"tags\";\n const [open, setOpen] = useControlledState(\n openProp,\n onOpenChange || onDropdownVisibleChange,\n defaultOpen\n );\n const cls = useCls();\n const [value, onChange] = useControlledState(\n valueProp,\n onChangeProp,\n defaultValue\n );\n\n // Stabilize render callback props used in useCallback dependencies\n const stablePopupRender = useValueAsRef(popupRender);\n const stableDropdownRender = useValueAsRef(dropdownRender);\n const stableSelectAllRender = useValueAsRef(selectAllRender);\n\n // Memoize size middleware apply function to prevent recreating on every render\n const sizeApply = useCallback(\n ({\n availableHeight,\n availableWidth,\n elements,\n }: MiddlewareState & {\n availableWidth: number;\n availableHeight: number;\n }) => {\n elements.floating.style.setProperty(\n \"--available-width\",\n availableWidth + \"px\"\n );\n elements.floating.style.setProperty(\n \"--available-height\",\n availableHeight + \"px\"\n );\n },\n []\n );\n\n // Memoize floating UI middleware array to prevent recalculating position unnecessarily\n const floatingMiddleware = useMemo(\n () => [\n offset({\n mainAxis: 4,\n }),\n autoPlacement({\n allowedPlacements: [\n \"bottom-start\",\n \"bottom-end\",\n \"bottom\",\n \"top-start\",\n \"top-end\",\n \"top\",\n ],\n }),\n shift({\n padding: 8,\n }),\n size({\n padding: 8,\n apply: sizeApply,\n }),\n ],\n [sizeApply]\n );\n\n // enhancePositioner\n const { floatingStyles, refs } = useFloating({\n placement: \"bottom-start\",\n transform: false,\n open: enhancePositioner && open,\n middleware: floatingMiddleware,\n whileElementsMounted: autoUpdate,\n });\n\n const defaultSelectionSummaryRender = useCallback(\n (v: ValueType) => {\n const count = Array.isArray(v) ? v.length : 1;\n if (isMultiple) {\n return count + ` ${count == 1 ? \"item\" : \"items\"} selected`;\n }\n return <>{v}</>;\n },\n [isMultiple]\n );\n\n // Memoize allValues calculation\n const allValues = useMemo(\n () => (Array.isArray(options) ? options.map((option) => option.value) : []),\n [options]\n );\n\n // Create stable callbacks for select all/deselect all\n const handleSelectAll = useStableCallback(() => {\n onChange(allValues as ValueType);\n });\n\n const handleDeselectAll = useStableCallback(() => {\n onChange([] as ValueType);\n });\n\n // Create stable callback for overlay click\n const handleOverlayClick = useStableCallback(() => {\n setOpen(false);\n });\n\n // Memoize floating ref callback\n const floatingRefCallback = useCallback(\n (node: HTMLElement | null) => {\n if (!node) return;\n const popupEl = node.closest(\".ds-select-dropdown\") as HTMLDivElement;\n refs.setFloating(popupEl);\n },\n [refs]\n );\n\n const dsSelectClassname = clsx(\n cls(\"select\", showSelectionSummary && \"select-selection-summary\"),\n className\n );\n\n const dsPopupClassName = clsx(\n cls(\n \"select-popup\",\n isMultiple && \"select-multiple\",\n enhancePositioner && \"select-popup-enhanced\"\n ),\n classNames?.popup?.root || popupClassName\n );\n const popupWidth =\n popupSize && typeof popupSize === \"string\" && popupSize in PopupPanelSize\n ? PopupPanelSize[popupSize as keyof typeof PopupPanelSize]\n : typeof popupSize === \"number\"\n ? popupSize + \"px\"\n : popupSize || \"fit-content\";\n const customRenderMenu = useCallback(\n (menu: React.ReactElement) => {\n const renderedMenu = stablePopupRender.current\n ? stablePopupRender.current(menu)\n : stableDropdownRender.current\n ? stableDropdownRender.current(menu)\n : menu;\n if (!showSelectAll) return renderedMenu;\n const checked = Array.isArray(value) && value.length > 0;\n const indeterminate =\n Array.isArray(value) && value.length && value.length < options.length;\n return (\n <>\n <SelectItem\n className={cls(\n \"select-item\",\n \"select-item-option\",\n checked && \"select-item-option-selected\",\n \"select-item-option-active\"\n )}\n onMouseOver={(e) => {}}\n selectAllRender={stableSelectAllRender.current}\n checked={checked}\n indeterminate={indeterminate}\n onSelectAll={handleSelectAll}\n onDeselectAll={handleDeselectAll}\n />\n <Divider />\n {renderedMenu}\n </>\n );\n },\n [\n stablePopupRender,\n stableDropdownRender,\n showSelectAll,\n value,\n options,\n cls,\n stableSelectAllRender,\n handleSelectAll,\n handleDeselectAll,\n ]\n );\n\n const refCallback = useCallback(\n (node: BaseSelectRef) => {\n if (ref) {\n if (typeof ref == \"function\") {\n ref(node);\n } else {\n ref.current = node;\n }\n }\n if (!node) return;\n refs.setReference(node?.nativeElement as HTMLElement);\n },\n [ref, refs]\n );\n\n // Memoize enhanced popup render for enhancePositioner mode\n const enhancedPopupRender = useCallback(\n (menu: React.ReactElement) => {\n return (\n <>\n <FloatingOverlay lockScroll onClick={handleOverlayClick} />\n <div ref={floatingRefCallback}>{customRenderMenu(menu)}</div>\n </>\n );\n },\n [handleOverlayClick, floatingRefCallback, customRenderMenu]\n );\n\n // Memoize final popup render\n const finalPopupRender = useCallback(\n (menu: React.ReactElement) => {\n if (!enhancePositioner) {\n return customRenderMenu(menu);\n }\n return enhancedPopupRender(menu);\n },\n [enhancePositioner, customRenderMenu, enhancedPopupRender]\n );\n\n return (\n <AntSelect\n // ref={ref}\n ref={refCallback}\n suffixIcon={<CaretDown weight=\"bold\" />}\n open={open}\n onOpenChange={setOpen}\n value={value}\n onChange={onChange}\n // for old version\n // popupClassName={dsPopupClassName}\n classNames={{\n popup: {\n root: dsPopupClassName,\n },\n ...classNames,\n }}\n {...(isMultiple\n ? {\n menuItemSelectedIcon: ({ isSelected }) => (\n <span className=\"ant-select-checkbox-indicator\">\n {isSelected ? (\n <Checkbox checked />\n ) : (\n <Checkbox checked={false} />\n )}\n </span>\n ),\n }\n : {})}\n mode={mode}\n className={dsSelectClassname}\n styles={\n enhancePositioner\n ? toMerged(styles, {\n popup: {\n root: {\n transition: \"none\",\n ...floatingStyles,\n \"--ds-select-popup-width\": popupWidth,\n } as CSSProperties,\n },\n })\n : styles\n }\n getPopupContainer={\n getPopupContainer ||\n (enhancePositioner ? () => portalNode || document.body : undefined)\n }\n popupRender={finalPopupRender}\n options={options}\n {...(showSelectionSummary\n ? {\n maxTagCount: 1,\n showSearch: false,\n labelRender: () => {\n if (selectionSummaryRender) {\n return selectionSummaryRender(value);\n }\n return defaultSelectionSummaryRender(value);\n },\n }\n : {})}\n {...rest}\n />\n );\n};\n\n// Use forwardRef with type assertion\nconst MainSelect = forwardRef(MainSelectInner) as <\n ValueType = unknown,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType\n>(\n props: SelectProps<ValueType, OptionType> & {\n ref?: React.ForwardedRef<React.ComponentRef<typeof AntSelect>>;\n }\n) => ReturnType<typeof MainSelectInner>;\n\nexport const Select = Object.assign(MainSelect, {\n Option: AntSelect.Option,\n OptGroup: AntSelect.OptGroup,\n});\n"],"names":["MainSelectInner","mode","className","openProp","defaultOpen","onOpenChange","popupClassName","onDropdownVisibleChange","enhancePositioner","getPopupContainer","popupSize","popupRender","dropdownRender","classNames","styles","showSelectionSummary","selectionSummaryRender","valueProp","onChangeProp","defaultValue","showSelectAll","selectAllRender","options","rest","ref","portalNode","useFloatingPortalNode","isMultiple","open","setOpen","useControlledState","cls","useCls","value","onChange","stablePopupRender","useValueAsRef","stableDropdownRender","stableSelectAllRender","sizeApply","useCallback","availableHeight","availableWidth","elements","floatingMiddleware","useMemo","offset","autoPlacement","shift","size","floatingStyles","refs","useFloating","autoUpdate","defaultSelectionSummaryRender","v","count","allValues","option","handleSelectAll","useStableCallback","handleDeselectAll","handleOverlayClick","floatingRefCallback","node","popupEl","dsSelectClassname","clsx","dsPopupClassName","popupWidth","PopupPanelSize","customRenderMenu","menu","renderedMenu","checked","indeterminate","jsxs","Fragment","jsx","SelectItem","e","Divider","refCallback","enhancedPopupRender","FloatingOverlay","finalPopupRender","AntSelect","CaretDown","isSelected","Checkbox","toMerged","MainSelect","forwardRef","Select"],"mappings":"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"}
1
+ {"version":3,"file":"component.js","sources":["../../../src/components/select/component.tsx"],"sourcesContent":["\"use client\";\nimport { CaretDown } from \"@bioturing/assets\";\nimport {\n autoPlacement,\n autoUpdate,\n FloatingOverlay,\n offset,\n shift,\n size,\n useFloating,\n useFloatingPortalNode,\n type MiddlewareState,\n} from \"@floating-ui/react\";\nimport { default as Checkbox } from \"antd/es/checkbox\";\nimport {\n default as AntSelect,\n type SelectProps as AntSelectProps,\n type BaseOptionType,\n type DefaultOptionType,\n} from \"antd/es/select\";\nimport { toMerged } from \"es-toolkit\";\nimport React, { CSSProperties, forwardRef, useCallback, useMemo } from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport { useStableCallback } from \"@base-ui/utils/useStableCallback\";\nimport { PopupPanelSize } from \"../popup-panel/constants\";\nimport { clsx, useCls } from \"../utils\";\n\n// Import component-specific styles\nimport { Divider } from \"antd\";\nimport { CheckboxProps } from \"../checkbox\";\nimport { SelectItem } from \"./item\";\nimport \"./style.css\";\nimport { BaseSelectRef } from \"rc-select\";\nimport { useValueAsRef } from \"@base-ui/utils/useValueAsRef\";\n// SelectItem component props\n\n// Define props interface extending Ant Design's SelectProps\nexport interface SelectProps<\n ValueType = unknown,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType\n> extends AntSelectProps<ValueType, OptionType> {\n /**\n * Whether to enhance the positioner using floating-ui\n * @default false\n */\n enhancePositioner?: boolean;\n /**\n * Size of the popup panel\n * Will be ignored if enhancePositioner is false\n */\n popupSize?: string | number | PopupPanelSize;\n /**\n * Show selection summary instead of tags in multiple case\n * @default false\n */\n showSelectionSummary?: boolean;\n /**\n * Render function for the selection summary in multiple case\n * @default (value) => `${value.length} items selected`\n */\n selectionSummaryRender?: (value: ValueType) => React.ReactNode;\n /**\n * Show select all option when in multiple mode\n * @default false\n */\n showSelectAll?: boolean;\n /**\n * Render function for the select all option\n */\n selectAllRender?: (props: {\n onClick: () => void;\n checked: CheckboxProps[\"checked\"];\n indeterminate: CheckboxProps[\"indeterminate\"];\n }) => React.ReactNode;\n}\n\nexport type {\n BaseOptionType as SelectBaseOptionType,\n DefaultOptionType as SelectDefaultOptionType,\n};\n\n// Create inner function\nconst MainSelectInner = <\n ValueType = unknown,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType\n>(\n {\n mode,\n className,\n open: openProp,\n defaultOpen,\n onOpenChange,\n popupClassName,\n onDropdownVisibleChange,\n enhancePositioner,\n getPopupContainer,\n popupSize,\n popupRender,\n dropdownRender,\n classNames,\n styles = {},\n showSelectionSummary,\n selectionSummaryRender,\n value: valueProp,\n onChange: onChangeProp,\n defaultValue,\n showSelectAll,\n selectAllRender,\n options,\n ...rest\n }: SelectProps<ValueType, OptionType>,\n ref: React.Ref<React.ComponentRef<typeof AntSelect>>\n) => {\n const portalNode = useFloatingPortalNode({});\n const isMultiple = mode === \"multiple\" || mode === \"tags\";\n const [open, setOpen] = useControlledState(\n openProp,\n onOpenChange || onDropdownVisibleChange,\n defaultOpen\n );\n const cls = useCls();\n const [value, onChange] = useControlledState(\n valueProp,\n onChangeProp,\n defaultValue\n );\n\n // Stabilize render callback props used in useCallback dependencies\n const stablePopupRender = useValueAsRef(popupRender);\n const stableDropdownRender = useValueAsRef(dropdownRender);\n const stableSelectAllRender = useValueAsRef(selectAllRender);\n\n // Memoize size middleware apply function to prevent recreating on every render\n const sizeApply = useCallback(\n ({\n availableHeight,\n availableWidth,\n elements,\n }: MiddlewareState & {\n availableWidth: number;\n availableHeight: number;\n }) => {\n elements.floating.style.setProperty(\n \"--available-width\",\n availableWidth + \"px\"\n );\n elements.floating.style.setProperty(\n \"--available-height\",\n availableHeight + \"px\"\n );\n },\n []\n );\n\n // Memoize floating UI middleware array to prevent recalculating position unnecessarily\n const floatingMiddleware = useMemo(\n () => [\n offset({\n mainAxis: 4,\n }),\n autoPlacement({\n allowedPlacements: [\n \"bottom-start\",\n \"bottom-end\",\n \"bottom\",\n \"top-start\",\n \"top-end\",\n \"top\",\n ],\n }),\n shift({\n padding: 8,\n }),\n size({\n padding: 8,\n apply: sizeApply,\n }),\n ],\n [sizeApply]\n );\n\n // enhancePositioner\n const { floatingStyles, refs } = useFloating({\n placement: \"bottom-start\",\n transform: false,\n open: enhancePositioner && open,\n middleware: floatingMiddleware,\n whileElementsMounted: autoUpdate,\n });\n\n const defaultSelectionSummaryRender = useCallback(\n (v: ValueType) => {\n const count = Array.isArray(v) ? v.length : 1;\n if (isMultiple) {\n return count + ` ${count == 1 ? \"item\" : \"items\"} selected`;\n }\n return <>{v}</>;\n },\n [isMultiple]\n );\n\n // Memoize allValues calculation\n const allValues = useMemo(\n () => (Array.isArray(options) ? options.map((option) => option.value) : []),\n [options]\n );\n\n // Create stable callbacks for select all/deselect all\n const handleSelectAll = useStableCallback(() => {\n onChange(allValues as ValueType);\n });\n\n const handleDeselectAll = useStableCallback(() => {\n onChange([] as ValueType);\n });\n\n // Create stable callback for overlay click\n const handleOverlayClick = useStableCallback(() => {\n setOpen(false);\n });\n\n // Memoize floating ref callback\n const floatingRefCallback = useCallback(\n (node: HTMLElement | null) => {\n if (!node) return;\n const popupEl = node.closest(\".ds-select-dropdown\") as HTMLDivElement;\n refs.setFloating(popupEl);\n },\n [refs]\n );\n\n const dsSelectClassname = clsx(\n cls(\"select\", showSelectionSummary && \"select-selection-summary\"),\n className\n );\n\n const dsPopupClassName = clsx(\n cls(\n \"select-popup\",\n isMultiple && \"select-multiple\",\n enhancePositioner && \"select-popup-enhanced\"\n ),\n classNames?.popup?.root || popupClassName\n );\n const popupWidth =\n popupSize && typeof popupSize === \"string\" && popupSize in PopupPanelSize\n ? PopupPanelSize[popupSize as keyof typeof PopupPanelSize]\n : typeof popupSize === \"number\"\n ? popupSize + \"px\"\n : popupSize || \"fit-content\";\n const customRenderMenu = useCallback(\n (menu: React.ReactElement) => {\n const renderedMenu = stablePopupRender.current\n ? stablePopupRender.current(menu)\n : stableDropdownRender.current\n ? stableDropdownRender.current(menu)\n : menu;\n if (!showSelectAll) return renderedMenu;\n const checked = Array.isArray(value) && value.length > 0;\n const indeterminate =\n Array.isArray(value) && value.length && value.length < options.length;\n return (\n <>\n <SelectItem\n className={cls(\n \"select-item\",\n \"select-item-option\",\n checked && \"select-item-option-selected\",\n \"select-item-option-active\"\n )}\n onMouseOver={(e) => {}}\n selectAllRender={stableSelectAllRender.current}\n checked={checked}\n indeterminate={indeterminate}\n onSelectAll={handleSelectAll}\n onDeselectAll={handleDeselectAll}\n />\n <Divider />\n {renderedMenu}\n </>\n );\n },\n [\n stablePopupRender,\n stableDropdownRender,\n showSelectAll,\n value,\n options,\n cls,\n stableSelectAllRender,\n handleSelectAll,\n handleDeselectAll,\n ]\n );\n\n const refCallback = useCallback(\n (node: BaseSelectRef) => {\n if (ref) {\n if (typeof ref == \"function\") {\n ref(node);\n } else {\n ref.current = node;\n }\n }\n if (!node) return;\n refs.setReference(node?.nativeElement as HTMLElement);\n },\n [ref, refs]\n );\n\n // Memoize enhanced popup render for enhancePositioner mode\n const enhancedPopupRender = useCallback(\n (menu: React.ReactElement) => {\n return (\n <>\n <FloatingOverlay lockScroll onClick={handleOverlayClick} />\n <div ref={floatingRefCallback}>{customRenderMenu(menu)}</div>\n </>\n );\n },\n [handleOverlayClick, floatingRefCallback, customRenderMenu]\n );\n\n // Memoize final popup render\n const finalPopupRender = useCallback(\n (menu: React.ReactElement) => {\n if (!enhancePositioner) {\n return customRenderMenu(menu);\n }\n return enhancedPopupRender(menu);\n },\n [enhancePositioner, customRenderMenu, enhancedPopupRender]\n );\n\n return (\n <AntSelect\n // ref={ref}\n ref={refCallback}\n suffixIcon={<CaretDown weight=\"bold\" />}\n open={open}\n onOpenChange={setOpen}\n value={value}\n onChange={onChange}\n // for old version\n // popupClassName={dsPopupClassName}\n classNames={{\n popup: {\n root: dsPopupClassName,\n },\n ...classNames,\n }}\n {...(isMultiple\n ? {\n menuItemSelectedIcon: ({ isSelected, disabled }) => (\n <span className=\"ant-select-checkbox-indicator\">\n {isSelected ? (\n <Checkbox checked disabled={disabled} />\n ) : (\n <Checkbox checked={false} disabled={disabled} />\n )}\n </span>\n ),\n }\n : {})}\n mode={mode}\n className={dsSelectClassname}\n styles={\n enhancePositioner\n ? toMerged(styles, {\n popup: {\n root: {\n transition: \"none\",\n ...floatingStyles,\n \"--ds-select-popup-width\": popupWidth,\n } as CSSProperties,\n },\n })\n : styles\n }\n getPopupContainer={\n getPopupContainer ||\n (enhancePositioner ? () => portalNode || document.body : undefined)\n }\n popupRender={finalPopupRender}\n options={options}\n {...(showSelectionSummary\n ? {\n maxTagCount: 1,\n showSearch: false,\n labelRender: () => {\n if (selectionSummaryRender) {\n return selectionSummaryRender(value);\n }\n return defaultSelectionSummaryRender(value);\n },\n }\n : {})}\n {...rest}\n />\n );\n};\n\n// Use forwardRef with type assertion\nconst MainSelect = forwardRef(MainSelectInner) as <\n ValueType = unknown,\n OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType\n>(\n props: SelectProps<ValueType, OptionType> & {\n ref?: React.ForwardedRef<React.ComponentRef<typeof AntSelect>>;\n }\n) => ReturnType<typeof MainSelectInner>;\n\nexport const Select = Object.assign(MainSelect, {\n Option: AntSelect.Option,\n OptGroup: AntSelect.OptGroup,\n});\n"],"names":["MainSelectInner","mode","className","openProp","defaultOpen","onOpenChange","popupClassName","onDropdownVisibleChange","enhancePositioner","getPopupContainer","popupSize","popupRender","dropdownRender","classNames","styles","showSelectionSummary","selectionSummaryRender","valueProp","onChangeProp","defaultValue","showSelectAll","selectAllRender","options","rest","ref","portalNode","useFloatingPortalNode","isMultiple","open","setOpen","useControlledState","cls","useCls","value","onChange","stablePopupRender","useValueAsRef","stableDropdownRender","stableSelectAllRender","sizeApply","useCallback","availableHeight","availableWidth","elements","floatingMiddleware","useMemo","offset","autoPlacement","shift","size","floatingStyles","refs","useFloating","autoUpdate","defaultSelectionSummaryRender","v","count","allValues","option","handleSelectAll","useStableCallback","handleDeselectAll","handleOverlayClick","floatingRefCallback","node","popupEl","dsSelectClassname","clsx","dsPopupClassName","popupWidth","PopupPanelSize","customRenderMenu","menu","renderedMenu","checked","indeterminate","jsxs","Fragment","jsx","SelectItem","e","Divider","refCallback","enhancedPopupRender","FloatingOverlay","finalPopupRender","AntSelect","CaretDown","isSelected","disabled","Checkbox","toMerged","MainSelect","forwardRef","Select"],"mappings":"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"}