@fragments-sdk/ui 0.13.0 → 0.14.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.
- package/dist/assets/ui.css +1642 -1679
- package/dist/chart.cjs.map +1 -1
- package/dist/chart.js.map +1 -1
- package/dist/codeblock.cjs +26 -18
- package/dist/codeblock.cjs.map +1 -1
- package/dist/codeblock.js +26 -18
- package/dist/codeblock.js.map +1 -1
- package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
- package/dist/components/Accordion/Accordion.module.scss.js +8 -8
- package/dist/components/Accordion/index.cjs +7 -3
- package/dist/components/Accordion/index.cjs.map +1 -1
- package/dist/components/Accordion/index.d.ts +24 -11
- package/dist/components/Accordion/index.d.ts.map +1 -1
- package/dist/components/Accordion/index.js +7 -3
- package/dist/components/Accordion/index.js.map +1 -1
- package/dist/components/Alert/Alert.module.scss.cjs +12 -12
- package/dist/components/Alert/Alert.module.scss.js +12 -12
- package/dist/components/Alert/index.cjs +37 -15
- package/dist/components/Alert/index.cjs.map +1 -1
- package/dist/components/Alert/index.d.ts +15 -22
- package/dist/components/Alert/index.d.ts.map +1 -1
- package/dist/components/Alert/index.js +37 -15
- package/dist/components/Alert/index.js.map +1 -1
- package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
- package/dist/components/AppShell/AppShell.module.scss.js +14 -14
- package/dist/components/AppShell/index.cjs +3 -1
- package/dist/components/AppShell/index.cjs.map +1 -1
- package/dist/components/AppShell/index.d.ts.map +1 -1
- package/dist/components/AppShell/index.js +3 -1
- package/dist/components/AppShell/index.js.map +1 -1
- package/dist/components/Avatar/index.cjs +9 -1
- package/dist/components/Avatar/index.cjs.map +1 -1
- package/dist/components/Avatar/index.d.ts +2 -0
- package/dist/components/Avatar/index.d.ts.map +1 -1
- package/dist/components/Avatar/index.js +9 -1
- package/dist/components/Avatar/index.js.map +1 -1
- package/dist/components/Badge/index.cjs +4 -2
- package/dist/components/Badge/index.cjs.map +1 -1
- package/dist/components/Badge/index.d.ts +3 -0
- package/dist/components/Badge/index.d.ts.map +1 -1
- package/dist/components/Badge/index.js +4 -2
- package/dist/components/Badge/index.js.map +1 -1
- package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +11 -11
- package/dist/components/BentoGrid/BentoGrid.module.scss.js +11 -11
- package/dist/components/BentoGrid/index.cjs +8 -5
- package/dist/components/BentoGrid/index.cjs.map +1 -1
- package/dist/components/BentoGrid/index.d.ts +2 -8
- package/dist/components/BentoGrid/index.d.ts.map +1 -1
- package/dist/components/BentoGrid/index.js +8 -5
- package/dist/components/BentoGrid/index.js.map +1 -1
- package/dist/components/Box/index.cjs +12 -2
- package/dist/components/Box/index.cjs.map +1 -1
- package/dist/components/Box/index.d.ts +1 -1
- package/dist/components/Box/index.d.ts.map +1 -1
- package/dist/components/Box/index.js +12 -2
- package/dist/components/Box/index.js.map +1 -1
- package/dist/components/Breadcrumbs/index.cjs +3 -1
- package/dist/components/Breadcrumbs/index.cjs.map +1 -1
- package/dist/components/Breadcrumbs/index.d.ts +3 -1
- package/dist/components/Breadcrumbs/index.d.ts.map +1 -1
- package/dist/components/Breadcrumbs/index.js +3 -1
- package/dist/components/Breadcrumbs/index.js.map +1 -1
- package/dist/components/Button/Button.module.scss.cjs +11 -11
- package/dist/components/Button/Button.module.scss.js +11 -11
- package/dist/components/Button/index.cjs +5 -2
- package/dist/components/Button/index.cjs.map +1 -1
- package/dist/components/Button/index.d.ts +3 -3
- package/dist/components/Button/index.d.ts.map +1 -1
- package/dist/components/Button/index.js +5 -2
- package/dist/components/Button/index.js.map +1 -1
- package/dist/components/ButtonGroup/index.cjs +3 -2
- package/dist/components/ButtonGroup/index.cjs.map +1 -1
- package/dist/components/ButtonGroup/index.d.ts +1 -2
- package/dist/components/ButtonGroup/index.d.ts.map +1 -1
- package/dist/components/ButtonGroup/index.js +3 -2
- package/dist/components/ButtonGroup/index.js.map +1 -1
- package/dist/components/Card/Card.module.scss.cjs +14 -14
- package/dist/components/Card/Card.module.scss.js +14 -14
- package/dist/components/Card/index.cjs +3 -22
- package/dist/components/Card/index.cjs.map +1 -1
- package/dist/components/Card/index.d.ts +6 -11
- package/dist/components/Card/index.d.ts.map +1 -1
- package/dist/components/Card/index.js +3 -22
- package/dist/components/Card/index.js.map +1 -1
- package/dist/components/Chart/Chart.module.scss.cjs +15 -15
- package/dist/components/Chart/Chart.module.scss.js +15 -15
- package/dist/components/Chart/index.d.ts +3 -3
- package/dist/components/Chart/index.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.module.scss.cjs +10 -10
- package/dist/components/Checkbox/Checkbox.module.scss.js +10 -10
- package/dist/components/Checkbox/index.cjs +11 -4
- package/dist/components/Checkbox/index.cjs.map +1 -1
- package/dist/components/Checkbox/index.d.ts +6 -0
- package/dist/components/Checkbox/index.d.ts.map +1 -1
- package/dist/components/Checkbox/index.js +11 -4
- package/dist/components/Checkbox/index.js.map +1 -1
- package/dist/components/Chip/index.cjs +11 -3
- package/dist/components/Chip/index.cjs.map +1 -1
- package/dist/components/Chip/index.d.ts +1 -2
- package/dist/components/Chip/index.d.ts.map +1 -1
- package/dist/components/Chip/index.js +11 -3
- package/dist/components/Chip/index.js.map +1 -1
- package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +20 -20
- package/dist/components/CodeBlock/CodeBlock.module.scss.js +20 -20
- package/dist/components/CodeBlock/index.d.ts +8 -2
- package/dist/components/CodeBlock/index.d.ts.map +1 -1
- package/dist/components/Collapsible/Collapsible.module.scss.cjs +10 -10
- package/dist/components/Collapsible/Collapsible.module.scss.js +10 -10
- package/dist/components/Combobox/Combobox.module.scss.cjs +15 -15
- package/dist/components/Combobox/Combobox.module.scss.js +15 -15
- package/dist/components/Combobox/index.cjs +68 -18
- package/dist/components/Combobox/index.cjs.map +1 -1
- package/dist/components/Combobox/index.d.ts +32 -11
- package/dist/components/Combobox/index.d.ts.map +1 -1
- package/dist/components/Combobox/index.js +68 -18
- package/dist/components/Combobox/index.js.map +1 -1
- package/dist/components/Command/Command.module.scss.cjs +11 -11
- package/dist/components/Command/Command.module.scss.js +11 -11
- package/dist/components/Command/index.cjs +4 -4
- package/dist/components/Command/index.cjs.map +1 -1
- package/dist/components/Command/index.d.ts +1 -1
- package/dist/components/Command/index.d.ts.map +1 -1
- package/dist/components/Command/index.js +4 -4
- package/dist/components/Command/index.js.map +1 -1
- package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
- package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
- package/dist/components/ConversationList/index.cjs +6 -3
- package/dist/components/ConversationList/index.cjs.map +1 -1
- package/dist/components/ConversationList/index.d.ts +1 -1
- package/dist/components/ConversationList/index.d.ts.map +1 -1
- package/dist/components/ConversationList/index.js +6 -3
- package/dist/components/ConversationList/index.js.map +1 -1
- package/dist/components/DataTable/DataTable.module.scss.cjs +26 -26
- package/dist/components/DataTable/DataTable.module.scss.js +26 -26
- package/dist/components/DataTable/index.cjs +13 -4
- package/dist/components/DataTable/index.cjs.map +1 -1
- package/dist/components/DataTable/index.d.ts +7 -2
- package/dist/components/DataTable/index.d.ts.map +1 -1
- package/dist/components/DataTable/index.js +13 -4
- package/dist/components/DataTable/index.js.map +1 -1
- package/dist/components/DatePicker/DatePicker.module.scss.cjs +26 -26
- package/dist/components/DatePicker/DatePicker.module.scss.js +26 -26
- package/dist/components/DatePicker/index.d.ts +2 -2
- package/dist/components/DatePicker/index.d.ts.map +1 -1
- package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
- package/dist/components/Dialog/Dialog.module.scss.js +14 -14
- package/dist/components/Dialog/index.cjs +2 -1
- package/dist/components/Dialog/index.cjs.map +1 -1
- package/dist/components/Dialog/index.d.ts +20 -7
- package/dist/components/Dialog/index.d.ts.map +1 -1
- package/dist/components/Dialog/index.js +2 -1
- package/dist/components/Dialog/index.js.map +1 -1
- package/dist/components/Drawer/Drawer.module.scss.cjs +26 -26
- package/dist/components/Drawer/Drawer.module.scss.js +26 -26
- package/dist/components/Drawer/index.cjs +30 -3
- package/dist/components/Drawer/index.cjs.map +1 -1
- package/dist/components/Drawer/index.d.ts +3 -1
- package/dist/components/Drawer/index.d.ts.map +1 -1
- package/dist/components/Drawer/index.js +13 -3
- package/dist/components/Drawer/index.js.map +1 -1
- package/dist/components/Editor/Editor.module.scss.cjs +17 -17
- package/dist/components/Editor/Editor.module.scss.js +17 -17
- package/dist/components/Editor/index.cjs +32 -7
- package/dist/components/Editor/index.cjs.map +1 -1
- package/dist/components/Editor/index.d.ts +16 -3
- package/dist/components/Editor/index.d.ts.map +1 -1
- package/dist/components/Editor/index.js +32 -7
- package/dist/components/Editor/index.js.map +1 -1
- package/dist/components/EmptyState/EmptyState.module.scss.cjs +8 -8
- package/dist/components/EmptyState/EmptyState.module.scss.js +8 -8
- package/dist/components/EmptyState/index.cjs +12 -8
- package/dist/components/EmptyState/index.cjs.map +1 -1
- package/dist/components/EmptyState/index.d.ts +8 -12
- package/dist/components/EmptyState/index.d.ts.map +1 -1
- package/dist/components/EmptyState/index.js +12 -8
- package/dist/components/EmptyState/index.js.map +1 -1
- package/dist/components/Fieldset/index.cjs +2 -2
- package/dist/components/Fieldset/index.cjs.map +1 -1
- package/dist/components/Fieldset/index.d.ts +2 -3
- package/dist/components/Fieldset/index.d.ts.map +1 -1
- package/dist/components/Fieldset/index.js +2 -2
- package/dist/components/Fieldset/index.js.map +1 -1
- package/dist/components/Form/index.cjs +13 -13
- package/dist/components/Form/index.cjs.map +1 -1
- package/dist/components/Form/index.d.ts +5 -2
- package/dist/components/Form/index.d.ts.map +1 -1
- package/dist/components/Form/index.js +13 -13
- package/dist/components/Form/index.js.map +1 -1
- package/dist/components/Grid/Grid.module.scss.cjs +57 -57
- package/dist/components/Grid/Grid.module.scss.js +57 -57
- package/dist/components/Grid/index.cjs +7 -4
- package/dist/components/Grid/index.cjs.map +1 -1
- package/dist/components/Grid/index.d.ts +5 -3
- package/dist/components/Grid/index.d.ts.map +1 -1
- package/dist/components/Grid/index.js +7 -4
- package/dist/components/Grid/index.js.map +1 -1
- package/dist/components/Header/Header.module.scss.cjs +21 -21
- package/dist/components/Header/Header.module.scss.js +21 -21
- package/dist/components/Header/index.cjs +61 -23
- package/dist/components/Header/index.cjs.map +1 -1
- package/dist/components/Header/index.d.ts +27 -34
- package/dist/components/Header/index.d.ts.map +1 -1
- package/dist/components/Header/index.js +61 -23
- package/dist/components/Header/index.js.map +1 -1
- package/dist/components/Icon/index.cjs +11 -1
- package/dist/components/Icon/index.cjs.map +1 -1
- package/dist/components/Icon/index.d.ts +28 -9
- package/dist/components/Icon/index.d.ts.map +1 -1
- package/dist/components/Icon/index.js +11 -1
- package/dist/components/Icon/index.js.map +1 -1
- package/dist/components/Image/index.cjs +15 -4
- package/dist/components/Image/index.cjs.map +1 -1
- package/dist/components/Image/index.d.ts +7 -1
- package/dist/components/Image/index.d.ts.map +1 -1
- package/dist/components/Image/index.js +15 -4
- package/dist/components/Image/index.js.map +1 -1
- package/dist/components/Input/Input.module.scss.cjs +13 -13
- package/dist/components/Input/Input.module.scss.js +13 -13
- package/dist/components/Input/index.cjs +79 -31
- package/dist/components/Input/index.cjs.map +1 -1
- package/dist/components/Input/index.d.ts +17 -3
- package/dist/components/Input/index.d.ts.map +1 -1
- package/dist/components/Input/index.js +79 -31
- package/dist/components/Input/index.js.map +1 -1
- package/dist/components/Link/index.cjs +17 -0
- package/dist/components/Link/index.cjs.map +1 -1
- package/dist/components/Link/index.d.ts.map +1 -1
- package/dist/components/Link/index.js +17 -0
- package/dist/components/Link/index.js.map +1 -1
- package/dist/components/Listbox/Listbox.module.scss.cjs +8 -8
- package/dist/components/Listbox/Listbox.module.scss.js +8 -8
- package/dist/components/Listbox/index.cjs +10 -6
- package/dist/components/Listbox/index.cjs.map +1 -1
- package/dist/components/Listbox/index.d.ts +2 -2
- package/dist/components/Listbox/index.d.ts.map +1 -1
- package/dist/components/Listbox/index.js +10 -6
- package/dist/components/Listbox/index.js.map +1 -1
- package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
- package/dist/components/Markdown/Markdown.module.scss.js +1 -1
- package/dist/components/Markdown/index.d.ts +4 -2
- package/dist/components/Markdown/index.d.ts.map +1 -1
- package/dist/components/Menu/Menu.module.scss.cjs +13 -13
- package/dist/components/Menu/Menu.module.scss.js +13 -13
- package/dist/components/Menu/index.cjs +12 -1
- package/dist/components/Menu/index.cjs.map +1 -1
- package/dist/components/Menu/index.d.ts +9 -4
- package/dist/components/Menu/index.d.ts.map +1 -1
- package/dist/components/Menu/index.js +12 -1
- package/dist/components/Menu/index.js.map +1 -1
- package/dist/components/Message/Message.module.scss.cjs +18 -18
- package/dist/components/Message/Message.module.scss.js +18 -18
- package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +28 -28
- package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +28 -28
- package/dist/components/NavigationMenu/NavigationMenuContext.cjs.map +1 -1
- package/dist/components/NavigationMenu/NavigationMenuContext.d.ts +8 -0
- package/dist/components/NavigationMenu/NavigationMenuContext.d.ts.map +1 -1
- package/dist/components/NavigationMenu/NavigationMenuContext.js.map +1 -1
- package/dist/components/NavigationMenu/index.cjs +49 -10
- package/dist/components/NavigationMenu/index.cjs.map +1 -1
- package/dist/components/NavigationMenu/index.d.ts +5 -1
- package/dist/components/NavigationMenu/index.d.ts.map +1 -1
- package/dist/components/NavigationMenu/index.js +49 -10
- package/dist/components/NavigationMenu/index.js.map +1 -1
- package/dist/components/Pagination/index.cjs +37 -9
- package/dist/components/Pagination/index.cjs.map +1 -1
- package/dist/components/Pagination/index.d.ts +2 -3
- package/dist/components/Pagination/index.d.ts.map +1 -1
- package/dist/components/Pagination/index.js +37 -9
- package/dist/components/Pagination/index.js.map +1 -1
- package/dist/components/Popover/Popover.module.scss.cjs +10 -10
- package/dist/components/Popover/Popover.module.scss.js +10 -10
- package/dist/components/Popover/index.cjs +43 -2
- package/dist/components/Popover/index.cjs.map +1 -1
- package/dist/components/Popover/index.d.ts +16 -6
- package/dist/components/Popover/index.d.ts.map +1 -1
- package/dist/components/Popover/index.js +26 -2
- package/dist/components/Popover/index.js.map +1 -1
- package/dist/components/Progress/index.cjs +3 -1
- package/dist/components/Progress/index.cjs.map +1 -1
- package/dist/components/Progress/index.d.ts.map +1 -1
- package/dist/components/Progress/index.js +3 -1
- package/dist/components/Progress/index.js.map +1 -1
- package/dist/components/Prompt/Prompt.module.scss.cjs +14 -14
- package/dist/components/Prompt/Prompt.module.scss.js +14 -14
- package/dist/components/Prompt/index.cjs +14 -2
- package/dist/components/Prompt/index.cjs.map +1 -1
- package/dist/components/Prompt/index.d.ts +8 -5
- package/dist/components/Prompt/index.d.ts.map +1 -1
- package/dist/components/Prompt/index.js +14 -2
- package/dist/components/Prompt/index.js.map +1 -1
- package/dist/components/RadioGroup/index.cjs +14 -6
- package/dist/components/RadioGroup/index.cjs.map +1 -1
- package/dist/components/RadioGroup/index.d.ts +12 -2
- package/dist/components/RadioGroup/index.d.ts.map +1 -1
- package/dist/components/RadioGroup/index.js +14 -6
- package/dist/components/RadioGroup/index.js.map +1 -1
- package/dist/components/Select/Select.module.scss.cjs +10 -10
- package/dist/components/Select/Select.module.scss.js +10 -10
- package/dist/components/Select/index.cjs +37 -24
- package/dist/components/Select/index.cjs.map +1 -1
- package/dist/components/Select/index.d.ts +6 -2
- package/dist/components/Select/index.d.ts.map +1 -1
- package/dist/components/Select/index.js +37 -24
- package/dist/components/Select/index.js.map +1 -1
- package/dist/components/Sidebar/Sidebar.module.scss.cjs +42 -42
- package/dist/components/Sidebar/Sidebar.module.scss.js +42 -42
- package/dist/components/Sidebar/index.cjs +2 -2
- package/dist/components/Sidebar/index.cjs.map +1 -1
- package/dist/components/Sidebar/index.d.ts +3 -3
- package/dist/components/Sidebar/index.d.ts.map +1 -1
- package/dist/components/Sidebar/index.js +2 -2
- package/dist/components/Sidebar/index.js.map +1 -1
- package/dist/components/Skeleton/index.cjs +6 -3
- package/dist/components/Skeleton/index.cjs.map +1 -1
- package/dist/components/Skeleton/index.d.ts +3 -7
- package/dist/components/Skeleton/index.d.ts.map +1 -1
- package/dist/components/Skeleton/index.js +6 -3
- package/dist/components/Skeleton/index.js.map +1 -1
- package/dist/components/Slider/Slider.module.scss.cjs +13 -10
- package/dist/components/Slider/Slider.module.scss.cjs.map +1 -1
- package/dist/components/Slider/Slider.module.scss.js +13 -10
- package/dist/components/Slider/Slider.module.scss.js.map +1 -1
- package/dist/components/Slider/index.cjs +33 -1
- package/dist/components/Slider/index.cjs.map +1 -1
- package/dist/components/Slider/index.d.ts +2 -0
- package/dist/components/Slider/index.d.ts.map +1 -1
- package/dist/components/Slider/index.js +33 -1
- package/dist/components/Slider/index.js.map +1 -1
- package/dist/components/Stack/index.cjs +12 -2
- package/dist/components/Stack/index.cjs.map +1 -1
- package/dist/components/Stack/index.d.ts +3 -2
- package/dist/components/Stack/index.d.ts.map +1 -1
- package/dist/components/Stack/index.js +12 -2
- package/dist/components/Stack/index.js.map +1 -1
- package/dist/components/Table/Table.module.scss.cjs +16 -16
- package/dist/components/Table/Table.module.scss.js +16 -16
- package/dist/components/Table/index.d.ts +10 -4
- package/dist/components/Table/index.d.ts.map +1 -1
- package/dist/components/TableOfContents/index.cjs +8 -5
- package/dist/components/TableOfContents/index.cjs.map +1 -1
- package/dist/components/TableOfContents/index.d.ts +2 -2
- package/dist/components/TableOfContents/index.d.ts.map +1 -1
- package/dist/components/TableOfContents/index.js +8 -5
- package/dist/components/TableOfContents/index.js.map +1 -1
- package/dist/components/Tabs/Tabs.module.scss.cjs +9 -9
- package/dist/components/Tabs/Tabs.module.scss.js +9 -9
- package/dist/components/Tabs/index.cjs +9 -6
- package/dist/components/Tabs/index.cjs.map +1 -1
- package/dist/components/Tabs/index.d.ts +4 -1
- package/dist/components/Tabs/index.d.ts.map +1 -1
- package/dist/components/Tabs/index.js +9 -6
- package/dist/components/Tabs/index.js.map +1 -1
- package/dist/components/Textarea/index.cjs +61 -43
- package/dist/components/Textarea/index.cjs.map +1 -1
- package/dist/components/Textarea/index.d.ts +9 -1
- package/dist/components/Textarea/index.d.ts.map +1 -1
- package/dist/components/Textarea/index.js +61 -43
- package/dist/components/Textarea/index.js.map +1 -1
- package/dist/components/Theme/index.cjs +3 -1
- package/dist/components/Theme/index.cjs.map +1 -1
- package/dist/components/Theme/index.d.ts +2 -4
- package/dist/components/Theme/index.d.ts.map +1 -1
- package/dist/components/Theme/index.js +3 -1
- package/dist/components/Theme/index.js.map +1 -1
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +22 -22
- package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +22 -22
- package/dist/components/Toast/Toast.module.scss.cjs +20 -20
- package/dist/components/Toast/Toast.module.scss.js +20 -20
- package/dist/components/Toast/index.cjs +15 -14
- package/dist/components/Toast/index.cjs.map +1 -1
- package/dist/components/Toast/index.d.ts +9 -5
- package/dist/components/Toast/index.d.ts.map +1 -1
- package/dist/components/Toast/index.js +15 -14
- package/dist/components/Toast/index.js.map +1 -1
- package/dist/components/Toggle/Toggle.module.scss.cjs +11 -11
- package/dist/components/Toggle/Toggle.module.scss.js +11 -11
- package/dist/components/Toggle/index.cjs +1 -1
- package/dist/components/Toggle/index.cjs.map +1 -1
- package/dist/components/Toggle/index.js +1 -1
- package/dist/components/Toggle/index.js.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +17 -17
- package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +17 -17
- package/dist/components/ToggleGroup/index.cjs +27 -8
- package/dist/components/ToggleGroup/index.cjs.map +1 -1
- package/dist/components/ToggleGroup/index.d.ts +8 -3
- package/dist/components/ToggleGroup/index.d.ts.map +1 -1
- package/dist/components/ToggleGroup/index.js +27 -8
- package/dist/components/ToggleGroup/index.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
- package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
- package/dist/components/Tooltip/index.cjs +20 -4
- package/dist/components/Tooltip/index.cjs.map +1 -1
- package/dist/components/Tooltip/index.d.ts +3 -1
- package/dist/components/Tooltip/index.d.ts.map +1 -1
- package/dist/components/Tooltip/index.js +20 -4
- package/dist/components/Tooltip/index.js.map +1 -1
- package/dist/components/VisuallyHidden/index.cjs +10 -2
- package/dist/components/VisuallyHidden/index.cjs.map +1 -1
- package/dist/components/VisuallyHidden/index.d.ts +1 -1
- package/dist/components/VisuallyHidden/index.d.ts.map +1 -1
- package/dist/components/VisuallyHidden/index.js +10 -2
- package/dist/components/VisuallyHidden/index.js.map +1 -1
- package/dist/datepicker.cjs +8 -1
- package/dist/datepicker.cjs.map +1 -1
- package/dist/datepicker.js +8 -1
- package/dist/datepicker.js.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/markdown.cjs +5 -5
- package/dist/markdown.cjs.map +1 -1
- package/dist/markdown.js +5 -5
- package/dist/markdown.js.map +1 -1
- package/dist/table.cjs +19 -3
- package/dist/table.cjs.map +1 -1
- package/dist/table.js +19 -3
- package/dist/table.js.map +1 -1
- package/fragments.json +1 -1
- package/package.json +2 -2
- package/src/blocks/AccountSettings.block.ts +1 -1
- package/src/blocks/ActivityFeed.block.ts +1 -1
- package/src/blocks/ActivityFeedSkeleton.block.ts +1 -1
- package/src/blocks/BlogEditor.block.ts +1 -1
- package/src/blocks/ChatInterface.block.ts +1 -1
- package/src/blocks/ChatMessages.block.ts +1 -1
- package/src/blocks/CheckoutForm.block.ts +1 -1
- package/src/blocks/CommandPalette.block.ts +1 -1
- package/src/blocks/ContactForm.block.ts +1 -1
- package/src/blocks/DashboardLayout.block.ts +1 -1
- package/src/blocks/DashboardPage.block.ts +1 -1
- package/src/blocks/DashboardSkeleton.block.ts +1 -1
- package/src/blocks/DataTable.block.ts +1 -1
- package/src/blocks/EmptyState.block.ts +1 -1
- package/src/blocks/FAQSection.block.ts +1 -1
- package/src/blocks/FeatureGrid.block.ts +1 -1
- package/src/blocks/HeroSection.block.ts +1 -1
- package/src/blocks/LoginForm.block.ts +1 -1
- package/src/blocks/NavigationHeader.block.ts +1 -1
- package/src/blocks/PaginatedTable.block.ts +1 -1
- package/src/blocks/PricingComparison.block.ts +1 -1
- package/src/blocks/ProductCard.block.ts +1 -1
- package/src/blocks/RegistrationForm.block.ts +1 -1
- package/src/blocks/SettingsDrawer.block.ts +1 -1
- package/src/blocks/SettingsPanel.block.ts +1 -1
- package/src/blocks/ShoppingCart.block.ts +1 -1
- package/src/blocks/StatsCard.block.ts +1 -1
- package/src/blocks/StatsCardSkeleton.block.ts +1 -1
- package/src/blocks/TableSkeleton.block.ts +1 -1
- package/src/blocks/ThinkingStates.block.ts +1 -1
- package/src/components/Accordion/Accordion.fragment.tsx +7 -7
- package/src/components/Accordion/Accordion.module.scss +2 -2
- package/src/components/Accordion/Accordion.test.tsx +8 -5
- package/src/components/Accordion/index.tsx +33 -13
- package/src/components/Alert/Alert.fragment.tsx +5 -1
- package/src/components/Alert/Alert.module.scss +1 -1
- package/src/components/Alert/Alert.test.tsx +25 -0
- package/src/components/Alert/index.tsx +49 -30
- package/src/components/AppShell/AppShell.fragment.tsx +1 -1
- package/src/components/AppShell/AppShell.module.scss +5 -5
- package/src/components/AppShell/AppShell.test.tsx +12 -0
- package/src/components/AppShell/index.tsx +2 -0
- package/src/components/Avatar/Avatar.fragment.tsx +7 -1
- package/src/components/Avatar/Avatar.test.tsx +24 -2
- package/src/components/Avatar/index.tsx +13 -1
- package/src/components/Badge/Badge.fragment.tsx +16 -1
- package/src/components/Badge/Badge.test.tsx +8 -1
- package/src/components/Badge/index.tsx +7 -2
- package/src/components/BentoGrid/BentoGrid.fragment.tsx +3 -1
- package/src/components/BentoGrid/BentoGrid.module.scss +52 -16
- package/src/components/BentoGrid/BentoGrid.test.tsx +20 -0
- package/src/components/BentoGrid/index.tsx +9 -12
- package/src/components/Box/Box.fragment.tsx +3 -1
- package/src/components/Box/Box.test.tsx +14 -0
- package/src/components/Box/index.tsx +8 -2
- package/src/components/Breadcrumbs/Breadcrumbs.fragment.tsx +19 -1
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +13 -0
- package/src/components/Breadcrumbs/index.tsx +5 -1
- package/src/components/Button/Button.fragment.tsx +28 -6
- package/src/components/Button/Button.module.scss +3 -3
- package/src/components/Button/Button.test.tsx +11 -0
- package/src/components/Button/index.tsx +16 -6
- package/src/components/ButtonGroup/ButtonGroup.fragment.tsx +4 -2
- package/src/components/ButtonGroup/ButtonGroup.test.tsx +10 -0
- package/src/components/ButtonGroup/index.tsx +3 -3
- package/src/components/Card/Card.fragment.tsx +24 -9
- package/src/components/Card/Card.module.scss +8 -8
- package/src/components/Card/Card.test.tsx +4 -5
- package/src/components/Card/index.tsx +8 -38
- package/src/components/Chart/Chart.fragment.tsx +5 -3
- package/src/components/Chart/Chart.module.scss +1 -1
- package/src/components/Chart/index.tsx +12 -10
- package/src/components/Checkbox/Checkbox.fragment.tsx +27 -1
- package/src/components/Checkbox/Checkbox.module.scss +3 -3
- package/src/components/Checkbox/index.tsx +16 -3
- package/src/components/Chip/Chip.fragment.tsx +20 -3
- package/src/components/Chip/Chip.test.tsx +28 -0
- package/src/components/Chip/index.tsx +14 -6
- package/src/components/CodeBlock/CodeBlock.fragment.tsx +3 -1
- package/src/components/CodeBlock/CodeBlock.module.scss +9 -9
- package/src/components/CodeBlock/CodeBlock.test.tsx +21 -0
- package/src/components/CodeBlock/index.tsx +23 -9
- package/src/components/Collapsible/Collapsible.fragment.tsx +1 -1
- package/src/components/Collapsible/Collapsible.module.scss +1 -1
- package/src/components/ColorPicker/ColorPicker.fragment.tsx +1 -1
- package/src/components/Combobox/Combobox.fragment.tsx +63 -9
- package/src/components/Combobox/Combobox.module.scss +4 -7
- package/src/components/Combobox/Combobox.test.tsx +24 -3
- package/src/components/Combobox/index.tsx +117 -34
- package/src/components/Command/Command.fragment.tsx +3 -3
- package/src/components/Command/Command.module.scss +5 -5
- package/src/components/Command/Command.test.tsx +17 -0
- package/src/components/Command/index.tsx +8 -5
- package/src/components/ConversationList/ConversationList.fragment.tsx +4 -3
- package/src/components/ConversationList/ConversationList.module.scss +5 -5
- package/src/components/ConversationList/ConversationList.test.tsx +21 -0
- package/src/components/ConversationList/index.tsx +8 -4
- package/src/components/DataTable/DataTable.fragment.tsx +12 -2
- package/src/components/DataTable/DataTable.module.scss +3 -3
- package/src/components/DataTable/DataTable.test.tsx +23 -2
- package/src/components/DataTable/index.tsx +23 -5
- package/src/components/DatePicker/DatePicker.fragment.tsx +3 -1
- package/src/components/DatePicker/DatePicker.module.scss +1 -1
- package/src/components/DatePicker/DatePicker.test.tsx +17 -0
- package/src/components/DatePicker/index.tsx +9 -2
- package/src/components/Dialog/Dialog.fragment.tsx +28 -1
- package/src/components/Dialog/Dialog.module.scss +6 -6
- package/src/components/Dialog/index.tsx +25 -7
- package/src/components/Drawer/Drawer.fragment.tsx +4 -1
- package/src/components/Drawer/Drawer.module.scss +3 -3
- package/src/components/Drawer/Drawer.test.tsx +8 -0
- package/src/components/Drawer/index.tsx +15 -3
- package/src/components/Editor/Editor.fragment.tsx +10 -3
- package/src/components/Editor/Editor.module.scss +4 -4
- package/src/components/Editor/Editor.test.tsx +68 -1
- package/src/components/Editor/index.tsx +60 -9
- package/src/components/EmptyState/EmptyState.fragment.tsx +3 -1
- package/src/components/EmptyState/EmptyState.module.scss +3 -3
- package/src/components/EmptyState/EmptyState.test.tsx +18 -0
- package/src/components/EmptyState/index.tsx +16 -16
- package/src/components/Field/Field.fragment.tsx +1 -1
- package/src/components/Fieldset/Fieldset.fragment.tsx +3 -1
- package/src/components/Fieldset/Fieldset.test.tsx +14 -0
- package/src/components/Fieldset/index.tsx +3 -4
- package/src/components/Form/Form.fragment.tsx +12 -7
- package/src/components/Form/index.tsx +13 -17
- package/src/components/Grid/Grid.fragment.tsx +4 -3
- package/src/components/Grid/Grid.module.scss +3 -3
- package/src/components/Grid/index.tsx +11 -6
- package/src/components/Header/Header.fragment.tsx +31 -1
- package/src/components/Header/Header.module.scss +6 -6
- package/src/components/Header/Header.test.tsx +95 -1
- package/src/components/Header/index.tsx +95 -46
- package/src/components/Icon/Icon.fragment.tsx +21 -8
- package/src/components/Icon/Icon.test.tsx +27 -3
- package/src/components/Icon/index.tsx +39 -15
- package/src/components/Image/Image.fragment.tsx +15 -1
- package/src/components/Image/Image.test.tsx +32 -1
- package/src/components/Image/index.tsx +24 -4
- package/src/components/Input/Input.fragment.tsx +49 -1
- package/src/components/Input/Input.module.scss +4 -2
- package/src/components/Input/Input.test.tsx +3 -3
- package/src/components/Input/index.tsx +103 -37
- package/src/components/Link/Link.fragment.tsx +7 -6
- package/src/components/Link/Link.test.tsx +17 -1
- package/src/components/Link/index.tsx +22 -0
- package/src/components/List/List.fragment.tsx +1 -1
- package/src/components/Listbox/Listbox.fragment.tsx +3 -3
- package/src/components/Listbox/Listbox.module.scss +4 -4
- package/src/components/Listbox/Listbox.test.tsx +14 -0
- package/src/components/Listbox/index.tsx +12 -2
- package/src/components/Loading/Loading.fragment.tsx +1 -1
- package/src/components/Markdown/Markdown.fragment.tsx +5 -3
- package/src/components/Markdown/Markdown.module.scss +5 -5
- package/src/components/Markdown/Markdown.test.tsx +6 -0
- package/src/components/Markdown/index.tsx +12 -9
- package/src/components/Menu/Menu.fragment.tsx +19 -1
- package/src/components/Menu/Menu.module.scss +11 -11
- package/src/components/Menu/index.tsx +19 -7
- package/src/components/Message/Message.fragment.tsx +1 -1
- package/src/components/Message/Message.module.scss +3 -3
- package/src/components/NavigationMenu/NavigationMenu.fragment.tsx +9 -1
- package/src/components/NavigationMenu/NavigationMenu.module.scss +7 -7
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +48 -0
- package/src/components/NavigationMenu/NavigationMenuContext.ts +14 -0
- package/src/components/NavigationMenu/index.tsx +70 -7
- package/src/components/Pagination/Pagination.fragment.tsx +4 -1
- package/src/components/Pagination/Pagination.test.tsx +39 -0
- package/src/components/Pagination/index.tsx +36 -10
- package/src/components/Popover/Popover.fragment.tsx +18 -1
- package/src/components/Popover/Popover.module.scss +13 -13
- package/src/components/Popover/index.tsx +33 -8
- package/src/components/Progress/Progress.fragment.tsx +3 -1
- package/src/components/Progress/Progress.test.tsx +8 -0
- package/src/components/Progress/index.tsx +9 -1
- package/src/components/Prompt/Prompt.fragment.tsx +4 -1
- package/src/components/Prompt/Prompt.module.scss +3 -3
- package/src/components/Prompt/Prompt.test.tsx +19 -0
- package/src/components/Prompt/index.tsx +24 -6
- package/src/components/RadioGroup/RadioGroup.fragment.tsx +31 -1
- package/src/components/RadioGroup/index.tsx +22 -3
- package/src/components/ScrollArea/ScrollArea.fragment.tsx +1 -1
- package/src/components/Select/Select.fragment.tsx +30 -3
- package/src/components/Select/Select.module.scss +3 -3
- package/src/components/Select/index.tsx +46 -33
- package/src/components/Separator/Separator.fragment.tsx +1 -1
- package/src/components/Sidebar/Sidebar.fragment.tsx +3 -1
- package/src/components/Sidebar/Sidebar.module.scss +20 -20
- package/src/components/Sidebar/Sidebar.test.tsx +25 -0
- package/src/components/Sidebar/index.tsx +7 -7
- package/src/components/Skeleton/Skeleton.fragment.tsx +3 -1
- package/src/components/Skeleton/Skeleton.test.tsx +12 -0
- package/src/components/Skeleton/index.tsx +6 -7
- package/src/components/Slider/Slider.fragment.tsx +21 -1
- package/src/components/Slider/Slider.module.scss +31 -0
- package/src/components/Slider/Slider.test.tsx +16 -0
- package/src/components/Slider/index.tsx +40 -1
- package/src/components/Stack/Stack.fragment.tsx +3 -1
- package/src/components/Stack/index.tsx +13 -6
- package/src/components/Table/Table.fragment.tsx +43 -2
- package/src/components/Table/Table.module.scss +2 -2
- package/src/components/Table/index.tsx +23 -5
- package/src/components/TableOfContents/TableOfContents.fragment.tsx +4 -2
- package/src/components/TableOfContents/TableOfContents.test.tsx +34 -9
- package/src/components/TableOfContents/index.tsx +9 -5
- package/src/components/Tabs/Tabs.fragment.tsx +33 -8
- package/src/components/Tabs/Tabs.module.scss +8 -8
- package/src/components/Tabs/index.tsx +22 -14
- package/src/components/Text/Text.fragment.tsx +1 -1
- package/src/components/Textarea/Textarea.fragment.tsx +27 -1
- package/src/components/Textarea/index.tsx +39 -14
- package/src/components/Theme/Theme.fragment.tsx +3 -1
- package/src/components/Theme/Theme.test.tsx +11 -0
- package/src/components/Theme/index.tsx +3 -3
- package/src/components/ThinkingIndicator/ThinkingIndicator.fragment.tsx +1 -1
- package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +1 -1
- package/src/components/Toast/Toast.fragment.tsx +6 -3
- package/src/components/Toast/Toast.module.scss +8 -6
- package/src/components/Toast/index.tsx +24 -20
- package/src/components/Toggle/Toggle.fragment.tsx +1 -1
- package/src/components/Toggle/Toggle.module.scss +61 -21
- package/src/components/Toggle/index.tsx +3 -3
- package/src/components/ToggleGroup/ToggleGroup.fragment.tsx +33 -8
- package/src/components/ToggleGroup/ToggleGroup.module.scss +3 -3
- package/src/components/ToggleGroup/index.tsx +29 -9
- package/src/components/Tooltip/Tooltip.fragment.tsx +16 -1
- package/src/components/Tooltip/Tooltip.module.scss +1 -1
- package/src/components/Tooltip/index.tsx +16 -1
- package/src/components/VisuallyHidden/VisuallyHidden.fragment.tsx +3 -1
- package/src/components/VisuallyHidden/VisuallyHidden.test.tsx +12 -0
- package/src/components/VisuallyHidden/index.tsx +7 -3
- package/src/index.ts +3 -2
- package/src/tokens/_computed.scss +1 -19
- package/src/tokens/_density.scss +0 -42
- package/src/tokens/_mixins.scss +4 -0
- package/src/tokens/_variables.scss +12 -114
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
const multiContainer = "
|
|
2
|
-
const inputWrapper = "
|
|
3
|
-
const input = "
|
|
4
|
-
const chips = "
|
|
5
|
-
const chip = "
|
|
6
|
-
const chipLabel = "
|
|
7
|
-
const chipRemove = "
|
|
8
|
-
const trigger = "
|
|
9
|
-
const positioner = "
|
|
10
|
-
const popup = "
|
|
11
|
-
const item = "
|
|
12
|
-
const itemIndicator = "
|
|
13
|
-
const empty = "
|
|
14
|
-
const group = "
|
|
15
|
-
const groupLabel = "
|
|
1
|
+
const multiContainer = "_multiContainer_g9rct_1";
|
|
2
|
+
const inputWrapper = "_inputWrapper_g9rct_7";
|
|
3
|
+
const input = "_input_g9rct_7";
|
|
4
|
+
const chips = "_chips_g9rct_59";
|
|
5
|
+
const chip = "_chip_g9rct_59";
|
|
6
|
+
const chipLabel = "_chipLabel_g9rct_81";
|
|
7
|
+
const chipRemove = "_chipRemove_g9rct_87";
|
|
8
|
+
const trigger = "_trigger_g9rct_119";
|
|
9
|
+
const positioner = "_positioner_g9rct_162";
|
|
10
|
+
const popup = "_popup_g9rct_167";
|
|
11
|
+
const item = "_item_g9rct_195";
|
|
12
|
+
const itemIndicator = "_itemIndicator_g9rct_239";
|
|
13
|
+
const empty = "_empty_g9rct_252";
|
|
14
|
+
const group = "_group_g9rct_267";
|
|
15
|
+
const groupLabel = "_groupLabel_g9rct_273";
|
|
16
16
|
const styles = {
|
|
17
17
|
multiContainer,
|
|
18
18
|
inputWrapper,
|
|
@@ -96,6 +96,9 @@ const ComboboxContext = React__namespace.createContext({
|
|
|
96
96
|
itemsRef: { current: /* @__PURE__ */ new Map() },
|
|
97
97
|
itemsVersion: 0,
|
|
98
98
|
incrementItemsVersion: () => {
|
|
99
|
+
},
|
|
100
|
+
explicitTriggerCount: 0,
|
|
101
|
+
registerTrigger: () => () => {
|
|
99
102
|
}
|
|
100
103
|
});
|
|
101
104
|
function getNodeText(node) {
|
|
@@ -111,6 +114,7 @@ function ComboboxRoot({
|
|
|
111
114
|
value,
|
|
112
115
|
defaultValue,
|
|
113
116
|
onValueChange,
|
|
117
|
+
onChange,
|
|
114
118
|
multiple = false,
|
|
115
119
|
open,
|
|
116
120
|
defaultOpen,
|
|
@@ -134,15 +138,11 @@ function ComboboxRoot({
|
|
|
134
138
|
const incrementItemsVersion = React__namespace.useCallback(() => {
|
|
135
139
|
setItemsVersion((v) => v + 1);
|
|
136
140
|
}, []);
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
onValueChange == null ? void 0 : onValueChange(newValue);
|
|
143
|
-
},
|
|
144
|
-
[value, onValueChange]
|
|
145
|
-
);
|
|
141
|
+
const [explicitTriggerCount, setExplicitTriggerCount] = React__namespace.useState(0);
|
|
142
|
+
const registerTrigger = React__namespace.useCallback(() => {
|
|
143
|
+
setExplicitTriggerCount((count) => count + 1);
|
|
144
|
+
return () => setExplicitTriggerCount((count) => Math.max(0, count - 1));
|
|
145
|
+
}, []);
|
|
146
146
|
const handleOpenChange = React__namespace.useCallback(
|
|
147
147
|
(nextOpen) => {
|
|
148
148
|
onOpenChange == null ? void 0 : onOpenChange(nextOpen);
|
|
@@ -162,31 +162,79 @@ function ComboboxRoot({
|
|
|
162
162
|
return [currentValue];
|
|
163
163
|
}, [currentValue]);
|
|
164
164
|
const contextValue = React__namespace.useMemo(
|
|
165
|
-
() => ({
|
|
166
|
-
|
|
165
|
+
() => ({
|
|
166
|
+
placeholder,
|
|
167
|
+
multiple,
|
|
168
|
+
selectedValues,
|
|
169
|
+
itemsRef,
|
|
170
|
+
itemsVersion,
|
|
171
|
+
incrementItemsVersion,
|
|
172
|
+
explicitTriggerCount,
|
|
173
|
+
registerTrigger
|
|
174
|
+
}),
|
|
175
|
+
[placeholder, multiple, selectedValues, itemsVersion, incrementItemsVersion, explicitTriggerCount, registerTrigger]
|
|
167
176
|
);
|
|
177
|
+
if (multiple) {
|
|
178
|
+
const controlledValue2 = value;
|
|
179
|
+
const uncontrolledValue2 = defaultValue;
|
|
180
|
+
const emitChange2 = onChange ?? onValueChange;
|
|
181
|
+
const handleValueChange2 = (newValue) => {
|
|
182
|
+
if (controlledValue2 === void 0) {
|
|
183
|
+
setInternalValue(newValue);
|
|
184
|
+
}
|
|
185
|
+
emitChange2 == null ? void 0 : emitChange2(newValue);
|
|
186
|
+
};
|
|
187
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ComboboxContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
188
|
+
ComboboxRoot$1.ComboboxRoot,
|
|
189
|
+
{
|
|
190
|
+
value: controlledValue2,
|
|
191
|
+
defaultValue: uncontrolledValue2,
|
|
192
|
+
onValueChange: handleValueChange2,
|
|
193
|
+
open,
|
|
194
|
+
defaultOpen,
|
|
195
|
+
onOpenChange: (nextOpen) => handleOpenChange(nextOpen),
|
|
196
|
+
disabled,
|
|
197
|
+
required,
|
|
198
|
+
name,
|
|
199
|
+
multiple: true,
|
|
200
|
+
autoHighlight,
|
|
201
|
+
itemToStringLabel,
|
|
202
|
+
children
|
|
203
|
+
}
|
|
204
|
+
) });
|
|
205
|
+
}
|
|
206
|
+
const controlledValue = value;
|
|
207
|
+
const uncontrolledValue = defaultValue;
|
|
208
|
+
const emitChange = onChange ?? onValueChange;
|
|
209
|
+
const handleValueChange = (newValue) => {
|
|
210
|
+
if (controlledValue === void 0) {
|
|
211
|
+
setInternalValue(newValue);
|
|
212
|
+
}
|
|
213
|
+
emitChange == null ? void 0 : emitChange(newValue);
|
|
214
|
+
};
|
|
168
215
|
return /* @__PURE__ */ jsxRuntime.jsx(ComboboxContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
169
216
|
ComboboxRoot$1.ComboboxRoot,
|
|
170
217
|
{
|
|
171
|
-
value,
|
|
172
|
-
defaultValue,
|
|
218
|
+
value: controlledValue,
|
|
219
|
+
defaultValue: uncontrolledValue ?? null,
|
|
173
220
|
onValueChange: handleValueChange,
|
|
174
221
|
open,
|
|
175
222
|
defaultOpen,
|
|
176
|
-
onOpenChange: handleOpenChange,
|
|
223
|
+
onOpenChange: (nextOpen) => handleOpenChange(nextOpen),
|
|
177
224
|
disabled,
|
|
178
225
|
required,
|
|
179
226
|
name,
|
|
180
|
-
multiple,
|
|
227
|
+
multiple: false,
|
|
181
228
|
autoHighlight,
|
|
182
229
|
itemToStringLabel,
|
|
183
230
|
children
|
|
184
231
|
}
|
|
185
232
|
) });
|
|
186
233
|
}
|
|
187
|
-
function ComboboxInput({ className, ...htmlProps }) {
|
|
234
|
+
function ComboboxInput({ className, showTrigger = true, ...htmlProps }) {
|
|
188
235
|
const context = React__namespace.useContext(ComboboxContext);
|
|
189
236
|
const classes = [Combobox_module.default.input, className].filter(Boolean).join(" ");
|
|
237
|
+
const renderTrigger = showTrigger && context.explicitTriggerCount === 0;
|
|
190
238
|
if (context.multiple) {
|
|
191
239
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Combobox_module.default.multiContainer, children: [
|
|
192
240
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: Combobox_module.default.inputWrapper, children: [
|
|
@@ -198,7 +246,7 @@ function ComboboxInput({ className, ...htmlProps }) {
|
|
|
198
246
|
className: classes
|
|
199
247
|
}
|
|
200
248
|
),
|
|
201
|
-
/* @__PURE__ */ jsxRuntime.jsx(ComboboxTrigger$1.ComboboxTrigger, { className: Combobox_module.default.trigger, children: /* @__PURE__ */ jsxRuntime.jsx(ChevronDownIcon, {}) })
|
|
249
|
+
renderTrigger && /* @__PURE__ */ jsxRuntime.jsx(ComboboxTrigger$1.ComboboxTrigger, { className: Combobox_module.default.trigger, children: /* @__PURE__ */ jsxRuntime.jsx(ChevronDownIcon, {}) })
|
|
202
250
|
] }),
|
|
203
251
|
context.selectedValues.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(ComboboxChips.ComboboxChips, { className: Combobox_module.default.chips, children: context.selectedValues.map((chipValue) => /* @__PURE__ */ jsxRuntime.jsxs(ComboboxChip.ComboboxChip, { className: Combobox_module.default.chip, children: [
|
|
204
252
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: Combobox_module.default.chipLabel, children: context.itemsRef.current.get(chipValue) ?? chipValue }),
|
|
@@ -215,10 +263,12 @@ function ComboboxInput({ className, ...htmlProps }) {
|
|
|
215
263
|
className: classes
|
|
216
264
|
}
|
|
217
265
|
),
|
|
218
|
-
/* @__PURE__ */ jsxRuntime.jsx(ComboboxTrigger$1.ComboboxTrigger, { className: Combobox_module.default.trigger, children: /* @__PURE__ */ jsxRuntime.jsx(ChevronDownIcon, {}) })
|
|
266
|
+
renderTrigger && /* @__PURE__ */ jsxRuntime.jsx(ComboboxTrigger$1.ComboboxTrigger, { className: Combobox_module.default.trigger, children: /* @__PURE__ */ jsxRuntime.jsx(ChevronDownIcon, {}) })
|
|
219
267
|
] });
|
|
220
268
|
}
|
|
221
269
|
function ComboboxTrigger({ children, className, ...htmlProps }) {
|
|
270
|
+
const { registerTrigger } = React__namespace.useContext(ComboboxContext);
|
|
271
|
+
React__namespace.useEffect(() => registerTrigger(), [registerTrigger]);
|
|
222
272
|
const classes = [Combobox_module.default.trigger, className].filter(Boolean).join(" ");
|
|
223
273
|
return /* @__PURE__ */ jsxRuntime.jsx(ComboboxTrigger$1.ComboboxTrigger, { ...htmlProps, className: classes, children: children ?? /* @__PURE__ */ jsxRuntime.jsx(ChevronDownIcon, {}) });
|
|
224
274
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/components/Combobox/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Combobox as BaseCombobox } from '@base-ui/react/combobox';\nimport styles from './Combobox.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ComboboxProps {\n children: React.ReactNode;\n /** Controlled selected value (string for single, string[] for multiple) */\n value?: string | string[] | null;\n /** Default selected value (uncontrolled) */\n defaultValue?: string | string[];\n /** Called when selection changes */\n onValueChange?: (value: string | string[] | null) => void;\n /** Whether multiple items can be selected */\n multiple?: boolean;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n placeholder?: string;\n /** Auto-highlight first matching item while filtering */\n autoHighlight?: boolean;\n}\n\nexport interface ComboboxInputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n className?: string;\n}\n\nexport interface ComboboxTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children?: React.ReactNode;\n className?: string;\n}\n\nexport interface ComboboxContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n sideOffset?: number;\n align?: 'start' | 'center' | 'end';\n /** Maximum number of visible options before scrolling. Shows half of the next item as a scroll hint. @default 4 */\n maxVisibleItems?: number;\n}\n\nexport interface ComboboxItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n children: React.ReactNode;\n value: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxEmptyProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface ComboboxGroupProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface ComboboxGroupLabelProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction ChevronDownIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nfunction XIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\n// ============================================\n// Context for Combobox state\n// ============================================\n\ninterface ComboboxContextValue {\n placeholder?: string;\n multiple?: boolean;\n selectedValues: string[];\n itemsRef: React.MutableRefObject<Map<string, string>>;\n itemsVersion: number;\n incrementItemsVersion: () => void;\n}\n\nconst ComboboxContext = React.createContext<ComboboxContextValue>({\n selectedValues: [],\n itemsRef: { current: new Map() },\n itemsVersion: 0,\n incrementItemsVersion: () => {},\n});\n\nfunction getNodeText(node: React.ReactNode): string {\n if (node == null || typeof node === 'boolean') return '';\n if (typeof node === 'string' || typeof node === 'number') return String(node);\n if (Array.isArray(node)) return node.map(getNodeText).join('');\n if (React.isValidElement(node))\n return getNodeText((node.props as { children?: React.ReactNode }).children);\n return '';\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction ComboboxRoot({\n children,\n value,\n defaultValue,\n onValueChange,\n multiple = false,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n required,\n name,\n placeholder,\n autoHighlight = true,\n}: ComboboxProps) {\n // Track selected values for chip rendering\n const [internalValue, setInternalValue] = React.useState<string | string[] | null>(\n value ?? defaultValue ?? (multiple ? [] : null)\n );\n\n // Sync with controlled value\n React.useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value);\n }\n }, [value]);\n\n // Registry for item value → label mapping\n const itemsRef = React.useRef<Map<string, string>>(new Map());\n const [itemsVersion, setItemsVersion] = React.useState(0);\n const incrementItemsVersion = React.useCallback(() => {\n setItemsVersion((v) => v + 1);\n }, []);\n\n const handleValueChange = React.useCallback(\n (newValue: string | string[] | null) => {\n if (value === undefined) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [value, onValueChange]\n );\n\n const handleOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n onOpenChange?.(nextOpen);\n },\n [onOpenChange]\n );\n\n // Convert value → label for input display\n const itemToStringLabel = React.useCallback(\n (itemValue: string) => {\n return itemsRef.current.get(itemValue) ?? itemValue;\n },\n []\n );\n\n // Derive selected values array for chip rendering\n const currentValue = value !== undefined ? value : internalValue;\n const selectedValues = React.useMemo(() => {\n if (currentValue == null) return [];\n if (Array.isArray(currentValue)) return currentValue;\n return [currentValue];\n }, [currentValue]);\n\n const contextValue = React.useMemo(\n () => ({ placeholder, multiple, selectedValues, itemsRef, itemsVersion, incrementItemsVersion }),\n [placeholder, multiple, selectedValues, itemsVersion, incrementItemsVersion]\n );\n\n return (\n <ComboboxContext.Provider value={contextValue}>\n <BaseCombobox.Root\n value={value as any}\n defaultValue={defaultValue as any}\n onValueChange={handleValueChange as any}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={handleOpenChange as any}\n disabled={disabled}\n required={required}\n name={name}\n multiple={multiple as any}\n autoHighlight={autoHighlight}\n itemToStringLabel={itemToStringLabel}\n >\n {children}\n </BaseCombobox.Root>\n </ComboboxContext.Provider>\n );\n}\n\nfunction ComboboxInput({ className, ...htmlProps }: ComboboxInputProps) {\n const context = React.useContext(ComboboxContext);\n const classes = [styles.input, className].filter(Boolean).join(' ');\n\n if (context.multiple) {\n return (\n <div className={styles.multiContainer}>\n <div className={styles.inputWrapper}>\n <BaseCombobox.Input\n placeholder={context.selectedValues.length === 0 ? context.placeholder : undefined}\n {...htmlProps}\n className={classes}\n />\n <BaseCombobox.Trigger className={styles.trigger}>\n <ChevronDownIcon />\n </BaseCombobox.Trigger>\n </div>\n {context.selectedValues.length > 0 && (\n <BaseCombobox.Chips className={styles.chips}>\n {context.selectedValues.map((chipValue) => (\n <BaseCombobox.Chip key={chipValue} className={styles.chip}>\n <span className={styles.chipLabel}>\n {context.itemsRef.current.get(chipValue) ?? chipValue}\n </span>\n <BaseCombobox.ChipRemove className={styles.chipRemove}>\n <XIcon />\n </BaseCombobox.ChipRemove>\n </BaseCombobox.Chip>\n ))}\n </BaseCombobox.Chips>\n )}\n </div>\n );\n }\n\n return (\n <div className={styles.inputWrapper}>\n <BaseCombobox.Input\n placeholder={context.placeholder}\n {...htmlProps}\n className={classes}\n />\n <BaseCombobox.Trigger className={styles.trigger}>\n <ChevronDownIcon />\n </BaseCombobox.Trigger>\n </div>\n );\n}\n\nfunction ComboboxTrigger({ children, className, ...htmlProps }: ComboboxTriggerProps) {\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n return (\n <BaseCombobox.Trigger {...htmlProps} className={classes}>\n {children ?? <ChevronDownIcon />}\n </BaseCombobox.Trigger>\n );\n}\n\nfunction ComboboxContent({\n children,\n className,\n sideOffset = 4,\n align = 'start',\n maxVisibleItems,\n ...htmlProps\n}: ComboboxContentProps) {\n const popupClasses = [styles.popup, className].filter(Boolean).join(' ');\n\n const popupStyle = maxVisibleItems != null\n ? { '--fui-select-max-items': maxVisibleItems + 0.5, ...htmlProps.style } as React.CSSProperties\n : htmlProps.style;\n\n return (\n <BaseCombobox.Portal>\n <BaseCombobox.Positioner\n side=\"bottom\"\n sideOffset={sideOffset}\n align={align}\n className={styles.positioner}\n >\n <BaseCombobox.Popup {...htmlProps} className={popupClasses} style={popupStyle}>\n {children}\n </BaseCombobox.Popup>\n </BaseCombobox.Positioner>\n </BaseCombobox.Portal>\n );\n}\n\nfunction ComboboxItem({ children, value, disabled, className, ...htmlProps }: ComboboxItemProps) {\n const { itemsRef, incrementItemsVersion } = React.useContext(ComboboxContext);\n const classes = [styles.item, className].filter(Boolean).join(' ');\n\n // Register this item's label in the registry so the input can display it\n const label = React.useMemo(() => getNodeText(children).trim() || value, [children, value]);\n React.useEffect(() => {\n const items = itemsRef.current;\n items.set(value, label);\n incrementItemsVersion();\n return () => {\n items.delete(value);\n incrementItemsVersion();\n };\n // itemsRef is a stable ref, incrementItemsVersion is a stable callback\n }, [itemsRef, incrementItemsVersion, value, label]);\n\n return (\n <BaseCombobox.Item {...htmlProps} value={value} disabled={disabled} className={classes}>\n {children}\n <BaseCombobox.ItemIndicator className={styles.itemIndicator}>\n <CheckIcon />\n </BaseCombobox.ItemIndicator>\n </BaseCombobox.Item>\n );\n}\n\nfunction ComboboxEmpty({ children, className, ...htmlProps }: ComboboxEmptyProps) {\n const classes = [styles.empty, className].filter(Boolean).join(' ');\n return <BaseCombobox.Empty {...htmlProps} className={classes}>{children}</BaseCombobox.Empty>;\n}\n\nfunction ComboboxGroup({ children, className, ...htmlProps }: ComboboxGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseCombobox.Group {...htmlProps} className={classes}>{children}</BaseCombobox.Group>;\n}\n\nfunction ComboboxGroupLabel({ children, className, ...htmlProps }: ComboboxGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseCombobox.GroupLabel {...htmlProps} className={classes}>{children}</BaseCombobox.GroupLabel>;\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Combobox = Object.assign(ComboboxRoot, {\n Input: ComboboxInput,\n Trigger: ComboboxTrigger,\n Content: ComboboxContent,\n Item: ComboboxItem,\n ItemIndicator: BaseCombobox.ItemIndicator,\n Empty: ComboboxEmpty,\n Group: ComboboxGroup,\n GroupLabel: ComboboxGroupLabel,\n});\n\n// Re-export individual components\nexport {\n ComboboxRoot,\n ComboboxInput,\n ComboboxTrigger,\n ComboboxContent,\n ComboboxItem,\n ComboboxEmpty,\n ComboboxGroup,\n ComboboxGroupLabel,\n};\n"],"names":["jsx","jsxs","React","BaseCombobox.Root","styles","BaseCombobox.Input","BaseCombobox.Trigger","BaseCombobox.Chips","BaseCombobox.Chip","BaseCombobox.ChipRemove","BaseCombobox.Portal","BaseCombobox.Positioner","BaseCombobox.Popup","BaseCombobox.Item","BaseCombobox.ItemIndicator","BaseCombobox.Empty","BaseCombobox.Group","BaseCombobox.GroupLabel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Combobox/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Combobox as BaseCombobox } from '@base-ui/react/combobox';\nimport styles from './Combobox.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\ninterface ComboboxCommonProps {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n placeholder?: string;\n /** Auto-highlight first matching item while filtering */\n autoHighlight?: boolean;\n}\n\nexport interface ComboboxSingleProps extends ComboboxCommonProps {\n /** Whether multiple items can be selected */\n multiple?: false;\n /** Controlled selected value */\n value?: string | null;\n /** Default selected value (uncontrolled) */\n defaultValue?: string;\n /** Called when selection changes */\n onValueChange?: (value: string | null) => void;\n /** Alias for onValueChange */\n onChange?: (value: string | null) => void;\n}\n\nexport interface ComboboxMultipleProps extends ComboboxCommonProps {\n /** Whether multiple items can be selected */\n multiple: true;\n /** Controlled selected value */\n value?: string[];\n /** Default selected value (uncontrolled) */\n defaultValue?: string[];\n /** Called when selection changes */\n onValueChange?: (value: string[]) => void;\n /** Alias for onValueChange */\n onChange?: (value: string[]) => void;\n}\n\nexport type ComboboxProps = ComboboxSingleProps | ComboboxMultipleProps;\n\nexport interface ComboboxInputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n className?: string;\n /** Render the built-in chevron trigger beside the input.\n * Automatically disabled when an explicit <Combobox.Trigger /> is mounted.\n * @default true */\n showTrigger?: boolean;\n}\n\nexport interface ComboboxTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children?: React.ReactNode;\n className?: string;\n}\n\nexport interface ComboboxContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n sideOffset?: number;\n align?: 'start' | 'center' | 'end';\n /** Maximum number of visible options before scrolling. Shows half of the next item as a scroll hint. @default 4 */\n maxVisibleItems?: number;\n}\n\nexport interface ComboboxItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n children: React.ReactNode;\n value: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxEmptyProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface ComboboxGroupProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface ComboboxGroupLabelProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction ChevronDownIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nfunction XIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\n// ============================================\n// Context for Combobox state\n// ============================================\n\ninterface ComboboxContextValue {\n placeholder?: string;\n multiple?: boolean;\n selectedValues: string[];\n itemsRef: React.MutableRefObject<Map<string, string>>;\n itemsVersion: number;\n incrementItemsVersion: () => void;\n explicitTriggerCount: number;\n registerTrigger: () => () => void;\n}\n\nconst ComboboxContext = React.createContext<ComboboxContextValue>({\n selectedValues: [],\n itemsRef: { current: new Map() },\n itemsVersion: 0,\n incrementItemsVersion: () => {},\n explicitTriggerCount: 0,\n registerTrigger: () => () => {},\n});\n\nfunction getNodeText(node: React.ReactNode): string {\n if (node == null || typeof node === 'boolean') return '';\n if (typeof node === 'string' || typeof node === 'number') return String(node);\n if (Array.isArray(node)) return node.map(getNodeText).join('');\n if (React.isValidElement(node))\n return getNodeText((node.props as { children?: React.ReactNode }).children);\n return '';\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction ComboboxRoot({\n children,\n value,\n defaultValue,\n onValueChange,\n onChange,\n multiple = false,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n required,\n name,\n placeholder,\n autoHighlight = true,\n}: ComboboxProps) {\n // Track selected values for chip rendering\n const [internalValue, setInternalValue] = React.useState<string | string[] | null>(\n value ?? defaultValue ?? (multiple ? [] : null)\n );\n\n // Sync with controlled value\n React.useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value);\n }\n }, [value]);\n\n // Registry for item value → label mapping\n const itemsRef = React.useRef<Map<string, string>>(new Map());\n const [itemsVersion, setItemsVersion] = React.useState(0);\n const incrementItemsVersion = React.useCallback(() => {\n setItemsVersion((v) => v + 1);\n }, []);\n const [explicitTriggerCount, setExplicitTriggerCount] = React.useState(0);\n const registerTrigger = React.useCallback(() => {\n setExplicitTriggerCount((count) => count + 1);\n return () => setExplicitTriggerCount((count) => Math.max(0, count - 1));\n }, []);\n\n const handleOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n onOpenChange?.(nextOpen);\n },\n [onOpenChange]\n );\n\n // Convert value → label for input display\n const itemToStringLabel = React.useCallback(\n (itemValue: string) => {\n return itemsRef.current.get(itemValue) ?? itemValue;\n },\n []\n );\n\n // Derive selected values array for chip rendering\n const currentValue = value !== undefined ? value : internalValue;\n const selectedValues = React.useMemo(() => {\n if (currentValue == null) return [];\n if (Array.isArray(currentValue)) return currentValue;\n return [currentValue];\n }, [currentValue]);\n\n const contextValue = React.useMemo(\n () => ({\n placeholder,\n multiple,\n selectedValues,\n itemsRef,\n itemsVersion,\n incrementItemsVersion,\n explicitTriggerCount,\n registerTrigger,\n }),\n [placeholder, multiple, selectedValues, itemsVersion, incrementItemsVersion, explicitTriggerCount, registerTrigger]\n );\n\n if (multiple) {\n const controlledValue = value as string[] | undefined;\n const uncontrolledValue = defaultValue as string[] | undefined;\n const emitChange = (onChange ?? onValueChange) as ((value: string[]) => void) | undefined;\n const handleValueChange = (newValue: string[]) => {\n if (controlledValue === undefined) {\n setInternalValue(newValue);\n }\n emitChange?.(newValue);\n };\n\n return (\n <ComboboxContext.Provider value={contextValue}>\n <BaseCombobox.Root<string, true>\n value={controlledValue}\n defaultValue={uncontrolledValue}\n onValueChange={handleValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={(nextOpen) => handleOpenChange(nextOpen)}\n disabled={disabled}\n required={required}\n name={name}\n multiple\n autoHighlight={autoHighlight}\n itemToStringLabel={itemToStringLabel}\n >\n {children}\n </BaseCombobox.Root>\n </ComboboxContext.Provider>\n );\n }\n\n const controlledValue = value as string | null | undefined;\n const uncontrolledValue = defaultValue as string | undefined;\n const emitChange = (onChange ?? onValueChange) as ((value: string | null) => void) | undefined;\n const handleValueChange = (newValue: string | null) => {\n if (controlledValue === undefined) {\n setInternalValue(newValue);\n }\n emitChange?.(newValue);\n };\n\n return (\n <ComboboxContext.Provider value={contextValue}>\n <BaseCombobox.Root<string, false>\n value={controlledValue}\n defaultValue={uncontrolledValue ?? null}\n onValueChange={handleValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={(nextOpen) => handleOpenChange(nextOpen)}\n disabled={disabled}\n required={required}\n name={name}\n multiple={false}\n autoHighlight={autoHighlight}\n itemToStringLabel={itemToStringLabel}\n >\n {children}\n </BaseCombobox.Root>\n </ComboboxContext.Provider>\n );\n}\n\nfunction ComboboxInput({ className, showTrigger = true, ...htmlProps }: ComboboxInputProps) {\n const context = React.useContext(ComboboxContext);\n const classes = [styles.input, className].filter(Boolean).join(' ');\n const renderTrigger = showTrigger && context.explicitTriggerCount === 0;\n\n if (context.multiple) {\n return (\n <div className={styles.multiContainer}>\n <div className={styles.inputWrapper}>\n <BaseCombobox.Input\n placeholder={context.selectedValues.length === 0 ? context.placeholder : undefined}\n {...htmlProps}\n className={classes}\n />\n {renderTrigger && (\n <BaseCombobox.Trigger className={styles.trigger}>\n <ChevronDownIcon />\n </BaseCombobox.Trigger>\n )}\n </div>\n {context.selectedValues.length > 0 && (\n <BaseCombobox.Chips className={styles.chips}>\n {context.selectedValues.map((chipValue) => (\n <BaseCombobox.Chip key={chipValue} className={styles.chip}>\n <span className={styles.chipLabel}>\n {context.itemsRef.current.get(chipValue) ?? chipValue}\n </span>\n <BaseCombobox.ChipRemove className={styles.chipRemove}>\n <XIcon />\n </BaseCombobox.ChipRemove>\n </BaseCombobox.Chip>\n ))}\n </BaseCombobox.Chips>\n )}\n </div>\n );\n }\n\n return (\n <div className={styles.inputWrapper}>\n <BaseCombobox.Input\n placeholder={context.placeholder}\n {...htmlProps}\n className={classes}\n />\n {renderTrigger && (\n <BaseCombobox.Trigger className={styles.trigger}>\n <ChevronDownIcon />\n </BaseCombobox.Trigger>\n )}\n </div>\n );\n}\n\nfunction ComboboxTrigger({ children, className, ...htmlProps }: ComboboxTriggerProps) {\n const { registerTrigger } = React.useContext(ComboboxContext);\n React.useEffect(() => registerTrigger(), [registerTrigger]);\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n return (\n <BaseCombobox.Trigger {...htmlProps} className={classes}>\n {children ?? <ChevronDownIcon />}\n </BaseCombobox.Trigger>\n );\n}\n\nfunction ComboboxContent({\n children,\n className,\n sideOffset = 4,\n align = 'start',\n maxVisibleItems,\n ...htmlProps\n}: ComboboxContentProps) {\n const popupClasses = [styles.popup, className].filter(Boolean).join(' ');\n\n const popupStyle = maxVisibleItems != null\n ? { '--fui-select-max-items': maxVisibleItems + 0.5, ...htmlProps.style } as React.CSSProperties\n : htmlProps.style;\n\n return (\n <BaseCombobox.Portal>\n <BaseCombobox.Positioner\n side=\"bottom\"\n sideOffset={sideOffset}\n align={align}\n className={styles.positioner}\n >\n <BaseCombobox.Popup {...htmlProps} className={popupClasses} style={popupStyle}>\n {children}\n </BaseCombobox.Popup>\n </BaseCombobox.Positioner>\n </BaseCombobox.Portal>\n );\n}\n\nfunction ComboboxItem({ children, value, disabled, className, ...htmlProps }: ComboboxItemProps) {\n const { itemsRef, incrementItemsVersion } = React.useContext(ComboboxContext);\n const classes = [styles.item, className].filter(Boolean).join(' ');\n\n // Register this item's label in the registry so the input can display it\n const label = React.useMemo(() => getNodeText(children).trim() || value, [children, value]);\n React.useEffect(() => {\n const items = itemsRef.current;\n items.set(value, label);\n incrementItemsVersion();\n return () => {\n items.delete(value);\n incrementItemsVersion();\n };\n // itemsRef is a stable ref, incrementItemsVersion is a stable callback\n }, [itemsRef, incrementItemsVersion, value, label]);\n\n return (\n <BaseCombobox.Item {...htmlProps} value={value} disabled={disabled} className={classes}>\n {children}\n <BaseCombobox.ItemIndicator className={styles.itemIndicator}>\n <CheckIcon />\n </BaseCombobox.ItemIndicator>\n </BaseCombobox.Item>\n );\n}\n\nfunction ComboboxEmpty({ children, className, ...htmlProps }: ComboboxEmptyProps) {\n const classes = [styles.empty, className].filter(Boolean).join(' ');\n return <BaseCombobox.Empty {...htmlProps} className={classes}>{children}</BaseCombobox.Empty>;\n}\n\nfunction ComboboxGroup({ children, className, ...htmlProps }: ComboboxGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseCombobox.Group {...htmlProps} className={classes}>{children}</BaseCombobox.Group>;\n}\n\nfunction ComboboxGroupLabel({ children, className, ...htmlProps }: ComboboxGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseCombobox.GroupLabel {...htmlProps} className={classes}>{children}</BaseCombobox.GroupLabel>;\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Combobox = Object.assign(ComboboxRoot, {\n Input: ComboboxInput,\n Trigger: ComboboxTrigger,\n Content: ComboboxContent,\n Item: ComboboxItem,\n ItemIndicator: BaseCombobox.ItemIndicator,\n Empty: ComboboxEmpty,\n Group: ComboboxGroup,\n GroupLabel: ComboboxGroupLabel,\n});\n\n// Re-export individual components\nexport {\n ComboboxRoot,\n ComboboxInput,\n ComboboxTrigger,\n ComboboxContent,\n ComboboxItem,\n ComboboxEmpty,\n ComboboxGroup,\n ComboboxGroupLabel,\n};\n"],"names":["jsx","jsxs","React","controlledValue","uncontrolledValue","emitChange","handleValueChange","BaseCombobox.Root","styles","BaseCombobox.Input","BaseCombobox.Trigger","BaseCombobox.Chips","BaseCombobox.Chip","BaseCombobox.ChipRemove","BaseCombobox.Portal","BaseCombobox.Positioner","BaseCombobox.Popup","BaseCombobox.Item","BaseCombobox.ItemIndicator","BaseCombobox.Empty","BaseCombobox.Group","BaseCombobox.GroupLabel"],"mappings":"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"}
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
|
|
2
|
+
interface ComboboxCommonProps {
|
|
3
3
|
children: React.ReactNode;
|
|
4
|
-
/** Controlled selected value (string for single, string[] for multiple) */
|
|
5
|
-
value?: string | string[] | null;
|
|
6
|
-
/** Default selected value (uncontrolled) */
|
|
7
|
-
defaultValue?: string | string[];
|
|
8
|
-
/** Called when selection changes */
|
|
9
|
-
onValueChange?: (value: string | string[] | null) => void;
|
|
10
|
-
/** Whether multiple items can be selected */
|
|
11
|
-
multiple?: boolean;
|
|
12
4
|
open?: boolean;
|
|
13
5
|
defaultOpen?: boolean;
|
|
14
6
|
onOpenChange?: (open: boolean) => void;
|
|
@@ -19,8 +11,37 @@ export interface ComboboxProps {
|
|
|
19
11
|
/** Auto-highlight first matching item while filtering */
|
|
20
12
|
autoHighlight?: boolean;
|
|
21
13
|
}
|
|
14
|
+
export interface ComboboxSingleProps extends ComboboxCommonProps {
|
|
15
|
+
/** Whether multiple items can be selected */
|
|
16
|
+
multiple?: false;
|
|
17
|
+
/** Controlled selected value */
|
|
18
|
+
value?: string | null;
|
|
19
|
+
/** Default selected value (uncontrolled) */
|
|
20
|
+
defaultValue?: string;
|
|
21
|
+
/** Called when selection changes */
|
|
22
|
+
onValueChange?: (value: string | null) => void;
|
|
23
|
+
/** Alias for onValueChange */
|
|
24
|
+
onChange?: (value: string | null) => void;
|
|
25
|
+
}
|
|
26
|
+
export interface ComboboxMultipleProps extends ComboboxCommonProps {
|
|
27
|
+
/** Whether multiple items can be selected */
|
|
28
|
+
multiple: true;
|
|
29
|
+
/** Controlled selected value */
|
|
30
|
+
value?: string[];
|
|
31
|
+
/** Default selected value (uncontrolled) */
|
|
32
|
+
defaultValue?: string[];
|
|
33
|
+
/** Called when selection changes */
|
|
34
|
+
onValueChange?: (value: string[]) => void;
|
|
35
|
+
/** Alias for onValueChange */
|
|
36
|
+
onChange?: (value: string[]) => void;
|
|
37
|
+
}
|
|
38
|
+
export type ComboboxProps = ComboboxSingleProps | ComboboxMultipleProps;
|
|
22
39
|
export interface ComboboxInputProps extends React.InputHTMLAttributes<HTMLInputElement> {
|
|
23
40
|
className?: string;
|
|
41
|
+
/** Render the built-in chevron trigger beside the input.
|
|
42
|
+
* Automatically disabled when an explicit <Combobox.Trigger /> is mounted.
|
|
43
|
+
* @default true */
|
|
44
|
+
showTrigger?: boolean;
|
|
24
45
|
}
|
|
25
46
|
export interface ComboboxTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
26
47
|
children?: React.ReactNode;
|
|
@@ -47,8 +68,8 @@ export interface ComboboxGroupProps extends React.HTMLAttributes<HTMLElement> {
|
|
|
47
68
|
export interface ComboboxGroupLabelProps extends React.HTMLAttributes<HTMLElement> {
|
|
48
69
|
children: React.ReactNode;
|
|
49
70
|
}
|
|
50
|
-
declare function ComboboxRoot({ children, value, defaultValue, onValueChange, multiple, open, defaultOpen, onOpenChange, disabled, required, name, placeholder, autoHighlight, }: ComboboxProps): import("react/jsx-runtime").JSX.Element;
|
|
51
|
-
declare function ComboboxInput({ className, ...htmlProps }: ComboboxInputProps): import("react/jsx-runtime").JSX.Element;
|
|
71
|
+
declare function ComboboxRoot({ children, value, defaultValue, onValueChange, onChange, multiple, open, defaultOpen, onOpenChange, disabled, required, name, placeholder, autoHighlight, }: ComboboxProps): import("react/jsx-runtime").JSX.Element;
|
|
72
|
+
declare function ComboboxInput({ className, showTrigger, ...htmlProps }: ComboboxInputProps): import("react/jsx-runtime").JSX.Element;
|
|
52
73
|
declare function ComboboxTrigger({ children, className, ...htmlProps }: ComboboxTriggerProps): import("react/jsx-runtime").JSX.Element;
|
|
53
74
|
declare function ComboboxContent({ children, className, sideOffset, align, maxVisibleItems, ...htmlProps }: ComboboxContentProps): import("react/jsx-runtime").JSX.Element;
|
|
54
75
|
declare function ComboboxItem({ children, value, disabled, className, ...htmlProps }: ComboboxItemProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Combobox/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Combobox/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -77,6 +77,9 @@ const ComboboxContext = React.createContext({
|
|
|
77
77
|
itemsRef: { current: /* @__PURE__ */ new Map() },
|
|
78
78
|
itemsVersion: 0,
|
|
79
79
|
incrementItemsVersion: () => {
|
|
80
|
+
},
|
|
81
|
+
explicitTriggerCount: 0,
|
|
82
|
+
registerTrigger: () => () => {
|
|
80
83
|
}
|
|
81
84
|
});
|
|
82
85
|
function getNodeText(node) {
|
|
@@ -92,6 +95,7 @@ function ComboboxRoot({
|
|
|
92
95
|
value,
|
|
93
96
|
defaultValue,
|
|
94
97
|
onValueChange,
|
|
98
|
+
onChange,
|
|
95
99
|
multiple = false,
|
|
96
100
|
open,
|
|
97
101
|
defaultOpen,
|
|
@@ -115,15 +119,11 @@ function ComboboxRoot({
|
|
|
115
119
|
const incrementItemsVersion = React.useCallback(() => {
|
|
116
120
|
setItemsVersion((v) => v + 1);
|
|
117
121
|
}, []);
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
onValueChange == null ? void 0 : onValueChange(newValue);
|
|
124
|
-
},
|
|
125
|
-
[value, onValueChange]
|
|
126
|
-
);
|
|
122
|
+
const [explicitTriggerCount, setExplicitTriggerCount] = React.useState(0);
|
|
123
|
+
const registerTrigger = React.useCallback(() => {
|
|
124
|
+
setExplicitTriggerCount((count) => count + 1);
|
|
125
|
+
return () => setExplicitTriggerCount((count) => Math.max(0, count - 1));
|
|
126
|
+
}, []);
|
|
127
127
|
const handleOpenChange = React.useCallback(
|
|
128
128
|
(nextOpen) => {
|
|
129
129
|
onOpenChange == null ? void 0 : onOpenChange(nextOpen);
|
|
@@ -143,31 +143,79 @@ function ComboboxRoot({
|
|
|
143
143
|
return [currentValue];
|
|
144
144
|
}, [currentValue]);
|
|
145
145
|
const contextValue = React.useMemo(
|
|
146
|
-
() => ({
|
|
147
|
-
|
|
146
|
+
() => ({
|
|
147
|
+
placeholder,
|
|
148
|
+
multiple,
|
|
149
|
+
selectedValues,
|
|
150
|
+
itemsRef,
|
|
151
|
+
itemsVersion,
|
|
152
|
+
incrementItemsVersion,
|
|
153
|
+
explicitTriggerCount,
|
|
154
|
+
registerTrigger
|
|
155
|
+
}),
|
|
156
|
+
[placeholder, multiple, selectedValues, itemsVersion, incrementItemsVersion, explicitTriggerCount, registerTrigger]
|
|
148
157
|
);
|
|
158
|
+
if (multiple) {
|
|
159
|
+
const controlledValue2 = value;
|
|
160
|
+
const uncontrolledValue2 = defaultValue;
|
|
161
|
+
const emitChange2 = onChange ?? onValueChange;
|
|
162
|
+
const handleValueChange2 = (newValue) => {
|
|
163
|
+
if (controlledValue2 === void 0) {
|
|
164
|
+
setInternalValue(newValue);
|
|
165
|
+
}
|
|
166
|
+
emitChange2 == null ? void 0 : emitChange2(newValue);
|
|
167
|
+
};
|
|
168
|
+
return /* @__PURE__ */ jsx(ComboboxContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
|
|
169
|
+
ComboboxRoot$1,
|
|
170
|
+
{
|
|
171
|
+
value: controlledValue2,
|
|
172
|
+
defaultValue: uncontrolledValue2,
|
|
173
|
+
onValueChange: handleValueChange2,
|
|
174
|
+
open,
|
|
175
|
+
defaultOpen,
|
|
176
|
+
onOpenChange: (nextOpen) => handleOpenChange(nextOpen),
|
|
177
|
+
disabled,
|
|
178
|
+
required,
|
|
179
|
+
name,
|
|
180
|
+
multiple: true,
|
|
181
|
+
autoHighlight,
|
|
182
|
+
itemToStringLabel,
|
|
183
|
+
children
|
|
184
|
+
}
|
|
185
|
+
) });
|
|
186
|
+
}
|
|
187
|
+
const controlledValue = value;
|
|
188
|
+
const uncontrolledValue = defaultValue;
|
|
189
|
+
const emitChange = onChange ?? onValueChange;
|
|
190
|
+
const handleValueChange = (newValue) => {
|
|
191
|
+
if (controlledValue === void 0) {
|
|
192
|
+
setInternalValue(newValue);
|
|
193
|
+
}
|
|
194
|
+
emitChange == null ? void 0 : emitChange(newValue);
|
|
195
|
+
};
|
|
149
196
|
return /* @__PURE__ */ jsx(ComboboxContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
|
|
150
197
|
ComboboxRoot$1,
|
|
151
198
|
{
|
|
152
|
-
value,
|
|
153
|
-
defaultValue,
|
|
199
|
+
value: controlledValue,
|
|
200
|
+
defaultValue: uncontrolledValue ?? null,
|
|
154
201
|
onValueChange: handleValueChange,
|
|
155
202
|
open,
|
|
156
203
|
defaultOpen,
|
|
157
|
-
onOpenChange: handleOpenChange,
|
|
204
|
+
onOpenChange: (nextOpen) => handleOpenChange(nextOpen),
|
|
158
205
|
disabled,
|
|
159
206
|
required,
|
|
160
207
|
name,
|
|
161
|
-
multiple,
|
|
208
|
+
multiple: false,
|
|
162
209
|
autoHighlight,
|
|
163
210
|
itemToStringLabel,
|
|
164
211
|
children
|
|
165
212
|
}
|
|
166
213
|
) });
|
|
167
214
|
}
|
|
168
|
-
function ComboboxInput({ className, ...htmlProps }) {
|
|
215
|
+
function ComboboxInput({ className, showTrigger = true, ...htmlProps }) {
|
|
169
216
|
const context = React.useContext(ComboboxContext);
|
|
170
217
|
const classes = [styles.input, className].filter(Boolean).join(" ");
|
|
218
|
+
const renderTrigger = showTrigger && context.explicitTriggerCount === 0;
|
|
171
219
|
if (context.multiple) {
|
|
172
220
|
return /* @__PURE__ */ jsxs("div", { className: styles.multiContainer, children: [
|
|
173
221
|
/* @__PURE__ */ jsxs("div", { className: styles.inputWrapper, children: [
|
|
@@ -179,7 +227,7 @@ function ComboboxInput({ className, ...htmlProps }) {
|
|
|
179
227
|
className: classes
|
|
180
228
|
}
|
|
181
229
|
),
|
|
182
|
-
/* @__PURE__ */ jsx(ComboboxTrigger$1, { className: styles.trigger, children: /* @__PURE__ */ jsx(ChevronDownIcon, {}) })
|
|
230
|
+
renderTrigger && /* @__PURE__ */ jsx(ComboboxTrigger$1, { className: styles.trigger, children: /* @__PURE__ */ jsx(ChevronDownIcon, {}) })
|
|
183
231
|
] }),
|
|
184
232
|
context.selectedValues.length > 0 && /* @__PURE__ */ jsx(ComboboxChips, { className: styles.chips, children: context.selectedValues.map((chipValue) => /* @__PURE__ */ jsxs(ComboboxChip, { className: styles.chip, children: [
|
|
185
233
|
/* @__PURE__ */ jsx("span", { className: styles.chipLabel, children: context.itemsRef.current.get(chipValue) ?? chipValue }),
|
|
@@ -196,10 +244,12 @@ function ComboboxInput({ className, ...htmlProps }) {
|
|
|
196
244
|
className: classes
|
|
197
245
|
}
|
|
198
246
|
),
|
|
199
|
-
/* @__PURE__ */ jsx(ComboboxTrigger$1, { className: styles.trigger, children: /* @__PURE__ */ jsx(ChevronDownIcon, {}) })
|
|
247
|
+
renderTrigger && /* @__PURE__ */ jsx(ComboboxTrigger$1, { className: styles.trigger, children: /* @__PURE__ */ jsx(ChevronDownIcon, {}) })
|
|
200
248
|
] });
|
|
201
249
|
}
|
|
202
250
|
function ComboboxTrigger({ children, className, ...htmlProps }) {
|
|
251
|
+
const { registerTrigger } = React.useContext(ComboboxContext);
|
|
252
|
+
React.useEffect(() => registerTrigger(), [registerTrigger]);
|
|
203
253
|
const classes = [styles.trigger, className].filter(Boolean).join(" ");
|
|
204
254
|
return /* @__PURE__ */ jsx(ComboboxTrigger$1, { ...htmlProps, className: classes, children: children ?? /* @__PURE__ */ jsx(ChevronDownIcon, {}) });
|
|
205
255
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Combobox/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Combobox as BaseCombobox } from '@base-ui/react/combobox';\nimport styles from './Combobox.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport interface ComboboxProps {\n children: React.ReactNode;\n /** Controlled selected value (string for single, string[] for multiple) */\n value?: string | string[] | null;\n /** Default selected value (uncontrolled) */\n defaultValue?: string | string[];\n /** Called when selection changes */\n onValueChange?: (value: string | string[] | null) => void;\n /** Whether multiple items can be selected */\n multiple?: boolean;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n placeholder?: string;\n /** Auto-highlight first matching item while filtering */\n autoHighlight?: boolean;\n}\n\nexport interface ComboboxInputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n className?: string;\n}\n\nexport interface ComboboxTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children?: React.ReactNode;\n className?: string;\n}\n\nexport interface ComboboxContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n sideOffset?: number;\n align?: 'start' | 'center' | 'end';\n /** Maximum number of visible options before scrolling. Shows half of the next item as a scroll hint. @default 4 */\n maxVisibleItems?: number;\n}\n\nexport interface ComboboxItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n children: React.ReactNode;\n value: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxEmptyProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface ComboboxGroupProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface ComboboxGroupLabelProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction ChevronDownIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nfunction XIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\n// ============================================\n// Context for Combobox state\n// ============================================\n\ninterface ComboboxContextValue {\n placeholder?: string;\n multiple?: boolean;\n selectedValues: string[];\n itemsRef: React.MutableRefObject<Map<string, string>>;\n itemsVersion: number;\n incrementItemsVersion: () => void;\n}\n\nconst ComboboxContext = React.createContext<ComboboxContextValue>({\n selectedValues: [],\n itemsRef: { current: new Map() },\n itemsVersion: 0,\n incrementItemsVersion: () => {},\n});\n\nfunction getNodeText(node: React.ReactNode): string {\n if (node == null || typeof node === 'boolean') return '';\n if (typeof node === 'string' || typeof node === 'number') return String(node);\n if (Array.isArray(node)) return node.map(getNodeText).join('');\n if (React.isValidElement(node))\n return getNodeText((node.props as { children?: React.ReactNode }).children);\n return '';\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction ComboboxRoot({\n children,\n value,\n defaultValue,\n onValueChange,\n multiple = false,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n required,\n name,\n placeholder,\n autoHighlight = true,\n}: ComboboxProps) {\n // Track selected values for chip rendering\n const [internalValue, setInternalValue] = React.useState<string | string[] | null>(\n value ?? defaultValue ?? (multiple ? [] : null)\n );\n\n // Sync with controlled value\n React.useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value);\n }\n }, [value]);\n\n // Registry for item value → label mapping\n const itemsRef = React.useRef<Map<string, string>>(new Map());\n const [itemsVersion, setItemsVersion] = React.useState(0);\n const incrementItemsVersion = React.useCallback(() => {\n setItemsVersion((v) => v + 1);\n }, []);\n\n const handleValueChange = React.useCallback(\n (newValue: string | string[] | null) => {\n if (value === undefined) {\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [value, onValueChange]\n );\n\n const handleOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n onOpenChange?.(nextOpen);\n },\n [onOpenChange]\n );\n\n // Convert value → label for input display\n const itemToStringLabel = React.useCallback(\n (itemValue: string) => {\n return itemsRef.current.get(itemValue) ?? itemValue;\n },\n []\n );\n\n // Derive selected values array for chip rendering\n const currentValue = value !== undefined ? value : internalValue;\n const selectedValues = React.useMemo(() => {\n if (currentValue == null) return [];\n if (Array.isArray(currentValue)) return currentValue;\n return [currentValue];\n }, [currentValue]);\n\n const contextValue = React.useMemo(\n () => ({ placeholder, multiple, selectedValues, itemsRef, itemsVersion, incrementItemsVersion }),\n [placeholder, multiple, selectedValues, itemsVersion, incrementItemsVersion]\n );\n\n return (\n <ComboboxContext.Provider value={contextValue}>\n <BaseCombobox.Root\n value={value as any}\n defaultValue={defaultValue as any}\n onValueChange={handleValueChange as any}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={handleOpenChange as any}\n disabled={disabled}\n required={required}\n name={name}\n multiple={multiple as any}\n autoHighlight={autoHighlight}\n itemToStringLabel={itemToStringLabel}\n >\n {children}\n </BaseCombobox.Root>\n </ComboboxContext.Provider>\n );\n}\n\nfunction ComboboxInput({ className, ...htmlProps }: ComboboxInputProps) {\n const context = React.useContext(ComboboxContext);\n const classes = [styles.input, className].filter(Boolean).join(' ');\n\n if (context.multiple) {\n return (\n <div className={styles.multiContainer}>\n <div className={styles.inputWrapper}>\n <BaseCombobox.Input\n placeholder={context.selectedValues.length === 0 ? context.placeholder : undefined}\n {...htmlProps}\n className={classes}\n />\n <BaseCombobox.Trigger className={styles.trigger}>\n <ChevronDownIcon />\n </BaseCombobox.Trigger>\n </div>\n {context.selectedValues.length > 0 && (\n <BaseCombobox.Chips className={styles.chips}>\n {context.selectedValues.map((chipValue) => (\n <BaseCombobox.Chip key={chipValue} className={styles.chip}>\n <span className={styles.chipLabel}>\n {context.itemsRef.current.get(chipValue) ?? chipValue}\n </span>\n <BaseCombobox.ChipRemove className={styles.chipRemove}>\n <XIcon />\n </BaseCombobox.ChipRemove>\n </BaseCombobox.Chip>\n ))}\n </BaseCombobox.Chips>\n )}\n </div>\n );\n }\n\n return (\n <div className={styles.inputWrapper}>\n <BaseCombobox.Input\n placeholder={context.placeholder}\n {...htmlProps}\n className={classes}\n />\n <BaseCombobox.Trigger className={styles.trigger}>\n <ChevronDownIcon />\n </BaseCombobox.Trigger>\n </div>\n );\n}\n\nfunction ComboboxTrigger({ children, className, ...htmlProps }: ComboboxTriggerProps) {\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n return (\n <BaseCombobox.Trigger {...htmlProps} className={classes}>\n {children ?? <ChevronDownIcon />}\n </BaseCombobox.Trigger>\n );\n}\n\nfunction ComboboxContent({\n children,\n className,\n sideOffset = 4,\n align = 'start',\n maxVisibleItems,\n ...htmlProps\n}: ComboboxContentProps) {\n const popupClasses = [styles.popup, className].filter(Boolean).join(' ');\n\n const popupStyle = maxVisibleItems != null\n ? { '--fui-select-max-items': maxVisibleItems + 0.5, ...htmlProps.style } as React.CSSProperties\n : htmlProps.style;\n\n return (\n <BaseCombobox.Portal>\n <BaseCombobox.Positioner\n side=\"bottom\"\n sideOffset={sideOffset}\n align={align}\n className={styles.positioner}\n >\n <BaseCombobox.Popup {...htmlProps} className={popupClasses} style={popupStyle}>\n {children}\n </BaseCombobox.Popup>\n </BaseCombobox.Positioner>\n </BaseCombobox.Portal>\n );\n}\n\nfunction ComboboxItem({ children, value, disabled, className, ...htmlProps }: ComboboxItemProps) {\n const { itemsRef, incrementItemsVersion } = React.useContext(ComboboxContext);\n const classes = [styles.item, className].filter(Boolean).join(' ');\n\n // Register this item's label in the registry so the input can display it\n const label = React.useMemo(() => getNodeText(children).trim() || value, [children, value]);\n React.useEffect(() => {\n const items = itemsRef.current;\n items.set(value, label);\n incrementItemsVersion();\n return () => {\n items.delete(value);\n incrementItemsVersion();\n };\n // itemsRef is a stable ref, incrementItemsVersion is a stable callback\n }, [itemsRef, incrementItemsVersion, value, label]);\n\n return (\n <BaseCombobox.Item {...htmlProps} value={value} disabled={disabled} className={classes}>\n {children}\n <BaseCombobox.ItemIndicator className={styles.itemIndicator}>\n <CheckIcon />\n </BaseCombobox.ItemIndicator>\n </BaseCombobox.Item>\n );\n}\n\nfunction ComboboxEmpty({ children, className, ...htmlProps }: ComboboxEmptyProps) {\n const classes = [styles.empty, className].filter(Boolean).join(' ');\n return <BaseCombobox.Empty {...htmlProps} className={classes}>{children}</BaseCombobox.Empty>;\n}\n\nfunction ComboboxGroup({ children, className, ...htmlProps }: ComboboxGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseCombobox.Group {...htmlProps} className={classes}>{children}</BaseCombobox.Group>;\n}\n\nfunction ComboboxGroupLabel({ children, className, ...htmlProps }: ComboboxGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseCombobox.GroupLabel {...htmlProps} className={classes}>{children}</BaseCombobox.GroupLabel>;\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Combobox = Object.assign(ComboboxRoot, {\n Input: ComboboxInput,\n Trigger: ComboboxTrigger,\n Content: ComboboxContent,\n Item: ComboboxItem,\n ItemIndicator: BaseCombobox.ItemIndicator,\n Empty: ComboboxEmpty,\n Group: ComboboxGroup,\n GroupLabel: ComboboxGroupLabel,\n});\n\n// Re-export individual components\nexport {\n ComboboxRoot,\n ComboboxInput,\n ComboboxTrigger,\n ComboboxContent,\n ComboboxItem,\n ComboboxEmpty,\n ComboboxGroup,\n ComboboxGroupLabel,\n};\n"],"names":["BaseCombobox.Root","BaseCombobox.Input","BaseCombobox.Trigger","BaseCombobox.Chips","BaseCombobox.Chip","BaseCombobox.ChipRemove","BaseCombobox.Portal","BaseCombobox.Positioner","BaseCombobox.Popup","BaseCombobox.Item","BaseCombobox.ItemIndicator","BaseCombobox.Empty","BaseCombobox.Group","BaseCombobox.GroupLabel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Combobox/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Combobox as BaseCombobox } from '@base-ui/react/combobox';\nimport styles from './Combobox.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\ninterface ComboboxCommonProps {\n children: React.ReactNode;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n placeholder?: string;\n /** Auto-highlight first matching item while filtering */\n autoHighlight?: boolean;\n}\n\nexport interface ComboboxSingleProps extends ComboboxCommonProps {\n /** Whether multiple items can be selected */\n multiple?: false;\n /** Controlled selected value */\n value?: string | null;\n /** Default selected value (uncontrolled) */\n defaultValue?: string;\n /** Called when selection changes */\n onValueChange?: (value: string | null) => void;\n /** Alias for onValueChange */\n onChange?: (value: string | null) => void;\n}\n\nexport interface ComboboxMultipleProps extends ComboboxCommonProps {\n /** Whether multiple items can be selected */\n multiple: true;\n /** Controlled selected value */\n value?: string[];\n /** Default selected value (uncontrolled) */\n defaultValue?: string[];\n /** Called when selection changes */\n onValueChange?: (value: string[]) => void;\n /** Alias for onValueChange */\n onChange?: (value: string[]) => void;\n}\n\nexport type ComboboxProps = ComboboxSingleProps | ComboboxMultipleProps;\n\nexport interface ComboboxInputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n className?: string;\n /** Render the built-in chevron trigger beside the input.\n * Automatically disabled when an explicit <Combobox.Trigger /> is mounted.\n * @default true */\n showTrigger?: boolean;\n}\n\nexport interface ComboboxTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children?: React.ReactNode;\n className?: string;\n}\n\nexport interface ComboboxContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n sideOffset?: number;\n align?: 'start' | 'center' | 'end';\n /** Maximum number of visible options before scrolling. Shows half of the next item as a scroll hint. @default 4 */\n maxVisibleItems?: number;\n}\n\nexport interface ComboboxItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n children: React.ReactNode;\n value: string;\n disabled?: boolean;\n}\n\nexport interface ComboboxEmptyProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface ComboboxGroupProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface ComboboxGroupLabelProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction ChevronDownIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nfunction XIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n );\n}\n\n// ============================================\n// Context for Combobox state\n// ============================================\n\ninterface ComboboxContextValue {\n placeholder?: string;\n multiple?: boolean;\n selectedValues: string[];\n itemsRef: React.MutableRefObject<Map<string, string>>;\n itemsVersion: number;\n incrementItemsVersion: () => void;\n explicitTriggerCount: number;\n registerTrigger: () => () => void;\n}\n\nconst ComboboxContext = React.createContext<ComboboxContextValue>({\n selectedValues: [],\n itemsRef: { current: new Map() },\n itemsVersion: 0,\n incrementItemsVersion: () => {},\n explicitTriggerCount: 0,\n registerTrigger: () => () => {},\n});\n\nfunction getNodeText(node: React.ReactNode): string {\n if (node == null || typeof node === 'boolean') return '';\n if (typeof node === 'string' || typeof node === 'number') return String(node);\n if (Array.isArray(node)) return node.map(getNodeText).join('');\n if (React.isValidElement(node))\n return getNodeText((node.props as { children?: React.ReactNode }).children);\n return '';\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction ComboboxRoot({\n children,\n value,\n defaultValue,\n onValueChange,\n onChange,\n multiple = false,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n required,\n name,\n placeholder,\n autoHighlight = true,\n}: ComboboxProps) {\n // Track selected values for chip rendering\n const [internalValue, setInternalValue] = React.useState<string | string[] | null>(\n value ?? defaultValue ?? (multiple ? [] : null)\n );\n\n // Sync with controlled value\n React.useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value);\n }\n }, [value]);\n\n // Registry for item value → label mapping\n const itemsRef = React.useRef<Map<string, string>>(new Map());\n const [itemsVersion, setItemsVersion] = React.useState(0);\n const incrementItemsVersion = React.useCallback(() => {\n setItemsVersion((v) => v + 1);\n }, []);\n const [explicitTriggerCount, setExplicitTriggerCount] = React.useState(0);\n const registerTrigger = React.useCallback(() => {\n setExplicitTriggerCount((count) => count + 1);\n return () => setExplicitTriggerCount((count) => Math.max(0, count - 1));\n }, []);\n\n const handleOpenChange = React.useCallback(\n (nextOpen: boolean) => {\n onOpenChange?.(nextOpen);\n },\n [onOpenChange]\n );\n\n // Convert value → label for input display\n const itemToStringLabel = React.useCallback(\n (itemValue: string) => {\n return itemsRef.current.get(itemValue) ?? itemValue;\n },\n []\n );\n\n // Derive selected values array for chip rendering\n const currentValue = value !== undefined ? value : internalValue;\n const selectedValues = React.useMemo(() => {\n if (currentValue == null) return [];\n if (Array.isArray(currentValue)) return currentValue;\n return [currentValue];\n }, [currentValue]);\n\n const contextValue = React.useMemo(\n () => ({\n placeholder,\n multiple,\n selectedValues,\n itemsRef,\n itemsVersion,\n incrementItemsVersion,\n explicitTriggerCount,\n registerTrigger,\n }),\n [placeholder, multiple, selectedValues, itemsVersion, incrementItemsVersion, explicitTriggerCount, registerTrigger]\n );\n\n if (multiple) {\n const controlledValue = value as string[] | undefined;\n const uncontrolledValue = defaultValue as string[] | undefined;\n const emitChange = (onChange ?? onValueChange) as ((value: string[]) => void) | undefined;\n const handleValueChange = (newValue: string[]) => {\n if (controlledValue === undefined) {\n setInternalValue(newValue);\n }\n emitChange?.(newValue);\n };\n\n return (\n <ComboboxContext.Provider value={contextValue}>\n <BaseCombobox.Root<string, true>\n value={controlledValue}\n defaultValue={uncontrolledValue}\n onValueChange={handleValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={(nextOpen) => handleOpenChange(nextOpen)}\n disabled={disabled}\n required={required}\n name={name}\n multiple\n autoHighlight={autoHighlight}\n itemToStringLabel={itemToStringLabel}\n >\n {children}\n </BaseCombobox.Root>\n </ComboboxContext.Provider>\n );\n }\n\n const controlledValue = value as string | null | undefined;\n const uncontrolledValue = defaultValue as string | undefined;\n const emitChange = (onChange ?? onValueChange) as ((value: string | null) => void) | undefined;\n const handleValueChange = (newValue: string | null) => {\n if (controlledValue === undefined) {\n setInternalValue(newValue);\n }\n emitChange?.(newValue);\n };\n\n return (\n <ComboboxContext.Provider value={contextValue}>\n <BaseCombobox.Root<string, false>\n value={controlledValue}\n defaultValue={uncontrolledValue ?? null}\n onValueChange={handleValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={(nextOpen) => handleOpenChange(nextOpen)}\n disabled={disabled}\n required={required}\n name={name}\n multiple={false}\n autoHighlight={autoHighlight}\n itemToStringLabel={itemToStringLabel}\n >\n {children}\n </BaseCombobox.Root>\n </ComboboxContext.Provider>\n );\n}\n\nfunction ComboboxInput({ className, showTrigger = true, ...htmlProps }: ComboboxInputProps) {\n const context = React.useContext(ComboboxContext);\n const classes = [styles.input, className].filter(Boolean).join(' ');\n const renderTrigger = showTrigger && context.explicitTriggerCount === 0;\n\n if (context.multiple) {\n return (\n <div className={styles.multiContainer}>\n <div className={styles.inputWrapper}>\n <BaseCombobox.Input\n placeholder={context.selectedValues.length === 0 ? context.placeholder : undefined}\n {...htmlProps}\n className={classes}\n />\n {renderTrigger && (\n <BaseCombobox.Trigger className={styles.trigger}>\n <ChevronDownIcon />\n </BaseCombobox.Trigger>\n )}\n </div>\n {context.selectedValues.length > 0 && (\n <BaseCombobox.Chips className={styles.chips}>\n {context.selectedValues.map((chipValue) => (\n <BaseCombobox.Chip key={chipValue} className={styles.chip}>\n <span className={styles.chipLabel}>\n {context.itemsRef.current.get(chipValue) ?? chipValue}\n </span>\n <BaseCombobox.ChipRemove className={styles.chipRemove}>\n <XIcon />\n </BaseCombobox.ChipRemove>\n </BaseCombobox.Chip>\n ))}\n </BaseCombobox.Chips>\n )}\n </div>\n );\n }\n\n return (\n <div className={styles.inputWrapper}>\n <BaseCombobox.Input\n placeholder={context.placeholder}\n {...htmlProps}\n className={classes}\n />\n {renderTrigger && (\n <BaseCombobox.Trigger className={styles.trigger}>\n <ChevronDownIcon />\n </BaseCombobox.Trigger>\n )}\n </div>\n );\n}\n\nfunction ComboboxTrigger({ children, className, ...htmlProps }: ComboboxTriggerProps) {\n const { registerTrigger } = React.useContext(ComboboxContext);\n React.useEffect(() => registerTrigger(), [registerTrigger]);\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n return (\n <BaseCombobox.Trigger {...htmlProps} className={classes}>\n {children ?? <ChevronDownIcon />}\n </BaseCombobox.Trigger>\n );\n}\n\nfunction ComboboxContent({\n children,\n className,\n sideOffset = 4,\n align = 'start',\n maxVisibleItems,\n ...htmlProps\n}: ComboboxContentProps) {\n const popupClasses = [styles.popup, className].filter(Boolean).join(' ');\n\n const popupStyle = maxVisibleItems != null\n ? { '--fui-select-max-items': maxVisibleItems + 0.5, ...htmlProps.style } as React.CSSProperties\n : htmlProps.style;\n\n return (\n <BaseCombobox.Portal>\n <BaseCombobox.Positioner\n side=\"bottom\"\n sideOffset={sideOffset}\n align={align}\n className={styles.positioner}\n >\n <BaseCombobox.Popup {...htmlProps} className={popupClasses} style={popupStyle}>\n {children}\n </BaseCombobox.Popup>\n </BaseCombobox.Positioner>\n </BaseCombobox.Portal>\n );\n}\n\nfunction ComboboxItem({ children, value, disabled, className, ...htmlProps }: ComboboxItemProps) {\n const { itemsRef, incrementItemsVersion } = React.useContext(ComboboxContext);\n const classes = [styles.item, className].filter(Boolean).join(' ');\n\n // Register this item's label in the registry so the input can display it\n const label = React.useMemo(() => getNodeText(children).trim() || value, [children, value]);\n React.useEffect(() => {\n const items = itemsRef.current;\n items.set(value, label);\n incrementItemsVersion();\n return () => {\n items.delete(value);\n incrementItemsVersion();\n };\n // itemsRef is a stable ref, incrementItemsVersion is a stable callback\n }, [itemsRef, incrementItemsVersion, value, label]);\n\n return (\n <BaseCombobox.Item {...htmlProps} value={value} disabled={disabled} className={classes}>\n {children}\n <BaseCombobox.ItemIndicator className={styles.itemIndicator}>\n <CheckIcon />\n </BaseCombobox.ItemIndicator>\n </BaseCombobox.Item>\n );\n}\n\nfunction ComboboxEmpty({ children, className, ...htmlProps }: ComboboxEmptyProps) {\n const classes = [styles.empty, className].filter(Boolean).join(' ');\n return <BaseCombobox.Empty {...htmlProps} className={classes}>{children}</BaseCombobox.Empty>;\n}\n\nfunction ComboboxGroup({ children, className, ...htmlProps }: ComboboxGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseCombobox.Group {...htmlProps} className={classes}>{children}</BaseCombobox.Group>;\n}\n\nfunction ComboboxGroupLabel({ children, className, ...htmlProps }: ComboboxGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseCombobox.GroupLabel {...htmlProps} className={classes}>{children}</BaseCombobox.GroupLabel>;\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Combobox = Object.assign(ComboboxRoot, {\n Input: ComboboxInput,\n Trigger: ComboboxTrigger,\n Content: ComboboxContent,\n Item: ComboboxItem,\n ItemIndicator: BaseCombobox.ItemIndicator,\n Empty: ComboboxEmpty,\n Group: ComboboxGroup,\n GroupLabel: ComboboxGroupLabel,\n});\n\n// Re-export individual components\nexport {\n ComboboxRoot,\n ComboboxInput,\n ComboboxTrigger,\n ComboboxContent,\n ComboboxItem,\n ComboboxEmpty,\n ComboboxGroup,\n ComboboxGroupLabel,\n};\n"],"names":["controlledValue","uncontrolledValue","emitChange","handleValueChange","BaseCombobox.Root","BaseCombobox.Input","BaseCombobox.Trigger","BaseCombobox.Chips","BaseCombobox.Chip","BaseCombobox.ChipRemove","BaseCombobox.Portal","BaseCombobox.Positioner","BaseCombobox.Popup","BaseCombobox.Item","BaseCombobox.ItemIndicator","BaseCombobox.Empty","BaseCombobox.Group","BaseCombobox.GroupLabel"],"mappings":"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"}
|