@fragments-sdk/ui 0.11.1 → 0.13.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/README.md +15 -0
- package/dist/assets/ui.css +25 -18
- package/dist/blocks/AccountSettings.block.d.ts +1 -1
- package/dist/blocks/ActivityFeed.block.d.ts +1 -1
- package/dist/blocks/ActivityFeedSkeleton.block.d.ts +1 -1
- package/dist/blocks/BlogEditor.block.d.ts +1 -1
- package/dist/blocks/ChatInterface.block.d.ts +1 -1
- package/dist/blocks/ChatMessages.block.d.ts +1 -1
- package/dist/blocks/CheckoutForm.block.d.ts +1 -1
- package/dist/blocks/CommandPalette.block.d.ts +1 -1
- package/dist/blocks/ContactForm.block.d.ts +1 -1
- package/dist/blocks/DashboardLayout.block.d.ts +1 -1
- package/dist/blocks/DashboardPage.block.d.ts +1 -1
- package/dist/blocks/DashboardSkeleton.block.d.ts +1 -1
- package/dist/blocks/DataTable.block.d.ts +1 -1
- package/dist/blocks/EmptyState.block.d.ts +1 -1
- package/dist/blocks/FAQSection.block.d.ts +1 -1
- package/dist/blocks/FeatureGrid.block.d.ts +1 -1
- package/dist/blocks/HeroSection.block.d.ts +1 -1
- package/dist/blocks/LoginForm.block.d.ts +1 -1
- package/dist/blocks/NavigationHeader.block.d.ts +1 -1
- package/dist/blocks/PaginatedTable.block.d.ts +1 -1
- package/dist/blocks/PricingComparison.block.d.ts +1 -1
- package/dist/blocks/ProductCard.block.d.ts +1 -1
- package/dist/blocks/RegistrationForm.block.d.ts +1 -1
- package/dist/blocks/SettingsDrawer.block.d.ts +1 -1
- package/dist/blocks/SettingsPanel.block.d.ts +1 -1
- package/dist/blocks/ShoppingCart.block.d.ts +1 -1
- package/dist/blocks/StatsCard.block.d.ts +1 -1
- package/dist/blocks/StatsCardSkeleton.block.d.ts +1 -1
- package/dist/blocks/TableSkeleton.block.d.ts +1 -1
- package/dist/blocks/ThinkingStates.block.d.ts +1 -1
- package/dist/codeblock.cjs +7 -1
- package/dist/codeblock.cjs.map +1 -1
- package/dist/codeblock.js +7 -1
- package/dist/codeblock.js.map +1 -1
- package/dist/components/Accordion/index.cjs +11 -4
- package/dist/components/Accordion/index.cjs.map +1 -1
- package/dist/components/Accordion/index.d.ts +3 -3
- package/dist/components/Accordion/index.d.ts.map +1 -1
- package/dist/components/Accordion/index.js +11 -4
- package/dist/components/Accordion/index.js.map +1 -1
- package/dist/components/Alert/index.cjs.map +1 -1
- package/dist/components/Alert/index.d.ts +7 -0
- package/dist/components/Alert/index.d.ts.map +1 -1
- package/dist/components/Alert/index.js.map +1 -1
- package/dist/components/Avatar/index.cjs.map +1 -1
- package/dist/components/Avatar/index.d.ts +4 -0
- package/dist/components/Avatar/index.d.ts.map +1 -1
- package/dist/components/Avatar/index.js.map +1 -1
- package/dist/components/Badge/index.cjs.map +1 -1
- package/dist/components/Badge/index.d.ts +12 -0
- package/dist/components/Badge/index.d.ts.map +1 -1
- package/dist/components/Badge/index.js.map +1 -1
- package/dist/components/Button/index.cjs +9 -1
- package/dist/components/Button/index.cjs.map +1 -1
- package/dist/components/Button/index.d.ts +14 -1
- package/dist/components/Button/index.d.ts.map +1 -1
- package/dist/components/Button/index.js +9 -1
- package/dist/components/Button/index.js.map +1 -1
- package/dist/components/Card/index.cjs +2 -1
- package/dist/components/Card/index.cjs.map +1 -1
- package/dist/components/Card/index.d.ts +12 -2
- package/dist/components/Card/index.d.ts.map +1 -1
- package/dist/components/Card/index.js +2 -1
- package/dist/components/Card/index.js.map +1 -1
- package/dist/components/Checkbox/index.cjs.map +1 -1
- package/dist/components/Checkbox/index.d.ts +6 -1
- package/dist/components/Checkbox/index.d.ts.map +1 -1
- package/dist/components/Checkbox/index.js.map +1 -1
- package/dist/components/Chip/index.cjs +2 -1
- package/dist/components/Chip/index.cjs.map +1 -1
- package/dist/components/Chip/index.d.ts +10 -3
- package/dist/components/Chip/index.d.ts.map +1 -1
- package/dist/components/Chip/index.js +2 -1
- package/dist/components/Chip/index.js.map +1 -1
- package/dist/components/CodeBlock/index.d.ts +1 -1
- package/dist/components/CodeBlock/index.d.ts.map +1 -1
- package/dist/components/Collapsible/index.cjs +45 -10
- package/dist/components/Collapsible/index.cjs.map +1 -1
- package/dist/components/Collapsible/index.d.ts +6 -12
- package/dist/components/Collapsible/index.d.ts.map +1 -1
- package/dist/components/Collapsible/index.js +45 -10
- package/dist/components/Collapsible/index.js.map +1 -1
- package/dist/components/Combobox/index.cjs +18 -9
- package/dist/components/Combobox/index.cjs.map +1 -1
- package/dist/components/Combobox/index.d.ts +8 -12
- package/dist/components/Combobox/index.d.ts.map +1 -1
- package/dist/components/Combobox/index.js +18 -9
- package/dist/components/Combobox/index.js.map +1 -1
- package/dist/components/Command/index.cjs +54 -21
- package/dist/components/Command/index.cjs.map +1 -1
- package/dist/components/Command/index.d.ts +2 -2
- package/dist/components/Command/index.d.ts.map +1 -1
- package/dist/components/Command/index.js +54 -21
- package/dist/components/Command/index.js.map +1 -1
- package/dist/components/DataTable/index.cjs +13 -1
- package/dist/components/DataTable/index.cjs.map +1 -1
- package/dist/components/DataTable/index.d.ts.map +1 -1
- package/dist/components/DataTable/index.js +13 -1
- package/dist/components/DataTable/index.js.map +1 -1
- package/dist/components/DatePicker/index.d.ts +2 -3
- package/dist/components/DatePicker/index.d.ts.map +1 -1
- package/dist/components/Dialog/index.cjs +12 -9
- package/dist/components/Dialog/index.cjs.map +1 -1
- package/dist/components/Dialog/index.d.ts +20 -12
- package/dist/components/Dialog/index.d.ts.map +1 -1
- package/dist/components/Dialog/index.js +12 -9
- package/dist/components/Dialog/index.js.map +1 -1
- package/dist/components/Drawer/index.cjs +12 -9
- package/dist/components/Drawer/index.cjs.map +1 -1
- package/dist/components/Drawer/index.d.ts +22 -12
- package/dist/components/Drawer/index.d.ts.map +1 -1
- package/dist/components/Drawer/index.js +12 -9
- package/dist/components/Drawer/index.js.map +1 -1
- package/dist/components/Grid/index.cjs +4 -1
- package/dist/components/Grid/index.cjs.map +1 -1
- package/dist/components/Grid/index.d.ts +6 -2
- package/dist/components/Grid/index.d.ts.map +1 -1
- package/dist/components/Grid/index.js +4 -1
- package/dist/components/Grid/index.js.map +1 -1
- package/dist/components/Input/index.cjs.map +1 -1
- package/dist/components/Input/index.d.ts +15 -1
- package/dist/components/Input/index.d.ts.map +1 -1
- package/dist/components/Input/index.js.map +1 -1
- package/dist/components/Menu/index.cjs +30 -16
- package/dist/components/Menu/index.cjs.map +1 -1
- package/dist/components/Menu/index.d.ts +17 -25
- package/dist/components/Menu/index.d.ts.map +1 -1
- package/dist/components/Menu/index.js +30 -16
- package/dist/components/Menu/index.js.map +1 -1
- package/dist/components/NavigationMenu/NavigationMenuContext.cjs.map +1 -1
- package/dist/components/NavigationMenu/NavigationMenuContext.d.ts +1 -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 +43 -11
- package/dist/components/NavigationMenu/index.cjs.map +1 -1
- package/dist/components/NavigationMenu/index.d.ts.map +1 -1
- package/dist/components/NavigationMenu/index.js +43 -11
- package/dist/components/NavigationMenu/index.js.map +1 -1
- package/dist/components/NavigationMenu/useNavigationMenu.cjs +2 -0
- package/dist/components/NavigationMenu/useNavigationMenu.cjs.map +1 -1
- package/dist/components/NavigationMenu/useNavigationMenu.d.ts +1 -0
- package/dist/components/NavigationMenu/useNavigationMenu.d.ts.map +1 -1
- package/dist/components/NavigationMenu/useNavigationMenu.js +2 -0
- package/dist/components/NavigationMenu/useNavigationMenu.js.map +1 -1
- package/dist/components/Popover/index.cjs +11 -10
- package/dist/components/Popover/index.cjs.map +1 -1
- package/dist/components/Popover/index.d.ts +17 -12
- package/dist/components/Popover/index.d.ts.map +1 -1
- package/dist/components/Popover/index.js +11 -10
- package/dist/components/Popover/index.js.map +1 -1
- package/dist/components/RadioGroup/index.cjs.map +1 -1
- package/dist/components/RadioGroup/index.d.ts +4 -0
- package/dist/components/RadioGroup/index.d.ts.map +1 -1
- package/dist/components/RadioGroup/index.js.map +1 -1
- package/dist/components/Select/index.cjs +7 -6
- package/dist/components/Select/index.cjs.map +1 -1
- package/dist/components/Select/index.d.ts +20 -9
- package/dist/components/Select/index.d.ts.map +1 -1
- package/dist/components/Select/index.js +7 -6
- package/dist/components/Select/index.js.map +1 -1
- package/dist/components/Sidebar/index.cjs +71 -24
- package/dist/components/Sidebar/index.cjs.map +1 -1
- package/dist/components/Sidebar/index.d.ts +21 -33
- package/dist/components/Sidebar/index.d.ts.map +1 -1
- package/dist/components/Sidebar/index.js +71 -24
- package/dist/components/Sidebar/index.js.map +1 -1
- package/dist/components/Slider/index.cjs +3 -1
- package/dist/components/Slider/index.cjs.map +1 -1
- package/dist/components/Slider/index.d.ts +10 -0
- package/dist/components/Slider/index.d.ts.map +1 -1
- package/dist/components/Slider/index.js +3 -1
- package/dist/components/Slider/index.js.map +1 -1
- package/dist/components/Stack/index.cjs +6 -0
- package/dist/components/Stack/index.cjs.map +1 -1
- package/dist/components/Stack/index.d.ts +12 -6
- package/dist/components/Stack/index.d.ts.map +1 -1
- package/dist/components/Stack/index.js +6 -0
- package/dist/components/Stack/index.js.map +1 -1
- package/dist/components/Tabs/index.cjs.map +1 -1
- package/dist/components/Tabs/index.d.ts +13 -1
- package/dist/components/Tabs/index.d.ts.map +1 -1
- package/dist/components/Tabs/index.js.map +1 -1
- package/dist/components/Text/Text.module.scss.cjs +44 -32
- package/dist/components/Text/Text.module.scss.cjs.map +1 -1
- package/dist/components/Text/Text.module.scss.js +44 -32
- package/dist/components/Text/Text.module.scss.js.map +1 -1
- package/dist/components/Text/index.cjs.map +1 -1
- package/dist/components/Text/index.d.ts +18 -3
- package/dist/components/Text/index.d.ts.map +1 -1
- package/dist/components/Text/index.js.map +1 -1
- package/dist/components/Theme/index.cjs.map +1 -1
- package/dist/components/Theme/index.d.ts +12 -0
- package/dist/components/Theme/index.d.ts.map +1 -1
- package/dist/components/Theme/index.js.map +1 -1
- package/dist/components/Toggle/index.cjs +2 -1
- package/dist/components/Toggle/index.cjs.map +1 -1
- package/dist/components/Toggle/index.d.ts +9 -0
- package/dist/components/Toggle/index.d.ts.map +1 -1
- package/dist/components/Toggle/index.js +2 -1
- package/dist/components/Toggle/index.js.map +1 -1
- package/dist/components/ToggleGroup/index.cjs +4 -1
- package/dist/components/ToggleGroup/index.cjs.map +1 -1
- package/dist/components/ToggleGroup/index.d.ts +13 -4
- package/dist/components/ToggleGroup/index.d.ts.map +1 -1
- package/dist/components/ToggleGroup/index.js +4 -1
- package/dist/components/ToggleGroup/index.js.map +1 -1
- package/dist/components/Tooltip/index.cjs +20 -10
- package/dist/components/Tooltip/index.cjs.map +1 -1
- package/dist/components/Tooltip/index.d.ts +5 -1
- package/dist/components/Tooltip/index.d.ts.map +1 -1
- package/dist/components/Tooltip/index.js +20 -10
- package/dist/components/Tooltip/index.js.map +1 -1
- package/dist/datepicker.cjs +24 -10
- package/dist/datepicker.cjs.map +1 -1
- package/dist/datepicker.js +24 -10
- package/dist/datepicker.js.map +1 -1
- package/dist/index.cjs +4 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/css-warning.cjs +18 -0
- package/dist/utils/css-warning.cjs.map +1 -0
- package/dist/utils/css-warning.d.ts +2 -0
- package/dist/utils/css-warning.d.ts.map +1 -0
- package/dist/utils/css-warning.js +18 -0
- package/dist/utils/css-warning.js.map +1 -0
- package/fragments.json +1 -1
- package/package.json +2 -2
- package/src/components/Accordion/Accordion.test.tsx +33 -0
- package/src/components/Accordion/index.tsx +10 -3
- package/src/components/Alert/index.tsx +7 -0
- package/src/components/Avatar/index.tsx +4 -0
- package/src/components/Badge/Badge.fragment.tsx +10 -2
- package/src/components/Badge/index.tsx +12 -0
- package/src/components/Button/Button.fragment.tsx +12 -2
- package/src/components/Button/Button.test.tsx +16 -0
- package/src/components/Button/index.tsx +27 -2
- package/src/components/Card/Card.fragment.tsx +14 -2
- package/src/components/Card/Card.test.tsx +5 -0
- package/src/components/Card/index.tsx +15 -2
- package/src/components/Checkbox/index.tsx +6 -1
- package/src/components/Chip/Chip.fragment.tsx +12 -2
- package/src/components/Chip/Chip.test.tsx +5 -0
- package/src/components/Chip/index.tsx +14 -4
- package/src/components/CodeBlock/index.tsx +13 -2
- package/src/components/Collapsible/Collapsible.test.tsx +41 -0
- package/src/components/Collapsible/index.tsx +53 -16
- package/src/components/Combobox/Combobox.test.tsx +55 -0
- package/src/components/Combobox/index.tsx +23 -17
- package/src/components/Command/Command.test.tsx +93 -0
- package/src/components/Command/index.tsx +61 -18
- package/src/components/DataTable/DataTable.test.tsx +11 -2
- package/src/components/DataTable/index.tsx +22 -2
- package/src/components/DatePicker/DatePicker.test.tsx +79 -0
- package/src/components/DatePicker/index.tsx +29 -14
- package/src/components/Dialog/Dialog.test.tsx +23 -0
- package/src/components/Dialog/index.tsx +27 -16
- package/src/components/Drawer/Drawer.test.tsx +27 -0
- package/src/components/Drawer/index.tsx +29 -16
- package/src/components/Grid/Grid.fragment.tsx +14 -2
- package/src/components/Grid/Grid.test.tsx +6 -0
- package/src/components/Grid/index.tsx +12 -3
- package/src/components/Input/index.tsx +15 -1
- package/src/components/Menu/index.tsx +35 -30
- package/src/components/NavigationMenu/NavigationMenu.fragment.tsx +1 -1
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +40 -4
- package/src/components/NavigationMenu/NavigationMenuContext.ts +3 -0
- package/src/components/NavigationMenu/index.tsx +49 -13
- package/src/components/NavigationMenu/useNavigationMenu.ts +4 -0
- package/src/components/Popover/Popover.test.tsx +23 -0
- package/src/components/Popover/index.tsx +24 -18
- package/src/components/RadioGroup/index.tsx +4 -0
- package/src/components/Select/Select.test.tsx +41 -0
- package/src/components/Select/index.tsx +24 -12
- package/src/components/Sidebar/Sidebar.test.tsx +83 -4
- package/src/components/Sidebar/index.tsx +87 -45
- package/src/components/Slider/Slider.fragment.tsx +5 -1
- package/src/components/Slider/Slider.test.tsx +6 -0
- package/src/components/Slider/index.tsx +13 -1
- package/src/components/Stack/Stack.fragment.tsx +22 -2
- package/src/components/Stack/Stack.test.tsx +6 -0
- package/src/components/Stack/index.tsx +20 -6
- package/src/components/Tabs/index.tsx +13 -1
- package/src/components/Text/Text.fragment.tsx +10 -8
- package/src/components/Text/Text.module.scss +8 -2
- package/src/components/Text/Text.test.tsx +15 -0
- package/src/components/Text/index.tsx +18 -3
- package/src/components/Theme/index.tsx +12 -0
- package/src/components/Toggle/Toggle.fragment.tsx +5 -1
- package/src/components/Toggle/Toggle.test.tsx +19 -0
- package/src/components/Toggle/index.tsx +11 -1
- package/src/components/ToggleGroup/ToggleGroup.fragment.tsx +5 -2
- package/src/components/ToggleGroup/ToggleGroup.test.tsx +20 -0
- package/src/components/ToggleGroup/index.tsx +15 -4
- package/src/components/Tooltip/Tooltip.test.tsx +17 -0
- package/src/components/Tooltip/index.tsx +58 -34
- package/src/index.ts +6 -0
- package/src/tokens/_seeds.scss +5 -3
- package/src/tokens/_variables.scss +2 -0
- package/src/utils/css-warning.ts +29 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Select as BaseSelect } from '@base-ui/react/select';\nimport styles from './Select.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport type SelectValue = string;\n\nexport interface SelectOption {\n value: SelectValue;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n children: React.ReactNode;\n value?: SelectValue | null;\n defaultValue?: SelectValue;\n onValueChange?: (value: SelectValue | null) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n placeholder?: string;\n}\n\nexport interface SelectTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {\n children?: React.ReactNode;\n placeholder?: string;\n}\n\nexport interface SelectContentProps 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 SelectItemProps {\n children: React.ReactNode;\n value: SelectValue;\n disabled?: boolean;\n className?: string;\n}\n\nexport interface SelectGroupProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface SelectGroupLabelProps {\n children: React.ReactNode;\n className?: string;\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\n// ============================================\n// Context for Select state\n// ============================================\n\ninterface SelectContextValue {\n placeholder?: string;\n value?: SelectValue | null;\n itemsRef: React.MutableRefObject<Map<SelectValue, React.ReactNode>>;\n // Version counter to trigger re-renders when items register\n itemsVersion: number;\n incrementItemsVersion: () => void;\n}\n\nconst SelectContext = React.createContext<SelectContextValue>({\n itemsRef: { current: new Map() },\n itemsVersion: 0,\n incrementItemsVersion: () => {},\n});\n\n// ============================================\n// Components\n// ============================================\n\nfunction SelectRoot({\n children,\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n required,\n name,\n placeholder,\n}: SelectProps) {\n // Track current value for controlled and uncontrolled modes\n const [internalValue, setInternalValue] = React.useState<SelectValue | null | undefined>(\n value ?? defaultValue ?? null\n );\n\n // Registry for item children - allows trigger to render selected item's content\n const itemsRef = React.useRef<Map<SelectValue, React.ReactNode>>(new Map());\n\n // Version counter to trigger trigger re-render when items register\n const [itemsVersion, setItemsVersion] = React.useState(0);\n const incrementItemsVersion = React.useCallback(() => {\n setItemsVersion((v) => v + 1);\n }, []);\n\n // Sync internal value with controlled value\n React.useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value);\n }\n }, [value]);\n\n const handleValueChange = React.useCallback(\n (newValue: SelectValue | null) => {\n if (value === undefined) {\n // Uncontrolled mode\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [value, onValueChange]\n );\n\n const contextValue = React.useMemo(\n () => ({\n placeholder,\n value: value !== undefined ? value : internalValue,\n itemsRef,\n itemsVersion,\n incrementItemsVersion,\n }),\n [placeholder, value, internalValue, itemsVersion, incrementItemsVersion]\n );\n\n return (\n <SelectContext.Provider value={contextValue}>\n <BaseSelect.Root\n value={value}\n defaultValue={defaultValue}\n onValueChange={handleValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n disabled={disabled}\n required={required}\n name={name}\n >\n {children}\n </BaseSelect.Root>\n </SelectContext.Provider>\n );\n}\n\nfunction SelectTrigger({ children, placeholder, className, ...htmlProps }: SelectTriggerProps) {\n const context = React.useContext(SelectContext);\n const placeholderText = placeholder ?? context.placeholder;\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n // Get the selected item's children from the registry\n // Note: itemsVersion in context ensures we re-render when items register\n const selectedContent = context.value != null\n ? context.itemsRef.current.get(context.value)\n : null;\n\n // Determine what to show in the value area\n \n const _version = context.itemsVersion; // Force dependency on itemsVersion for re-render\n const displayContent = selectedContent ?? (\n placeholderText ? <span className={styles.placeholder}>{placeholderText}</span> : null\n );\n\n return (\n <BaseSelect.Trigger {...htmlProps} className={classes}>\n {children ?? (\n <>\n <span className={styles.value}>{displayContent}</span>\n <BaseSelect.Icon className={styles.icon}>\n <ChevronDownIcon />\n </BaseSelect.Icon>\n </>\n )}\n </BaseSelect.Trigger>\n );\n}\n\nfunction SelectContent({\n children,\n className,\n sideOffset = 4,\n align = 'start',\n maxVisibleItems,\n ...htmlProps\n}: SelectContentProps) {\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 <BaseSelect.Portal>\n <BaseSelect.Positioner\n sideOffset={sideOffset}\n align={align}\n className={styles.positioner}\n >\n <BaseSelect.Popup {...htmlProps} className={popupClasses} style={popupStyle}>\n {children}\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n );\n}\n\nfunction SelectItem({ children, value, disabled, className }: SelectItemProps) {\n const { itemsRef, incrementItemsVersion } = React.useContext(SelectContext);\n const classes = [styles.item, className].filter(Boolean).join(' ');\n\n // Register this item's children in the registry so the trigger can display them\n React.useEffect(() => {\n const items = itemsRef.current;\n items.set(value, children);\n // Trigger re-render of trigger to show the registered content\n incrementItemsVersion();\n return () => {\n items.delete(value);\n };\n }, [itemsRef, incrementItemsVersion, value, children]);\n\n return (\n <BaseSelect.Item value={value} disabled={disabled} className={classes}>\n <BaseSelect.ItemText>{children}</BaseSelect.ItemText>\n <BaseSelect.ItemIndicator className={styles.itemIndicator}>\n <CheckIcon />\n </BaseSelect.ItemIndicator>\n </BaseSelect.Item>\n );\n}\n\nfunction SelectGroup({ children, className }: SelectGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseSelect.Group className={classes}>{children}</BaseSelect.Group>;\n}\n\nfunction SelectGroupLabel({ children, className }: SelectGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseSelect.GroupLabel className={classes}>{children}</BaseSelect.GroupLabel>;\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Select = Object.assign(SelectRoot, {\n Trigger: SelectTrigger,\n Content: SelectContent,\n Item: SelectItem,\n Group: SelectGroup,\n GroupLabel: SelectGroupLabel,\n});\n\n// Re-export individual components\nexport {\n SelectRoot,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectGroup,\n SelectGroupLabel,\n};\n"],"names":["jsx","React","BaseSelect","styles","jsxs","Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAkEA,SAAS,kBAAkB;AACzB,SACEA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACf,eAAY;AAAA,MAEZ,UAAAA,2BAAAA,IAAC,YAAA,EAAS,QAAO,iBAAA,CAAiB;AAAA,IAAA;AAAA,EAAA;AAGxC;AAEA,SAAS,YAAY;AACnB,SACEA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACf,eAAY;AAAA,MAEZ,UAAAA,2BAAAA,IAAC,YAAA,EAAS,QAAO,iBAAA,CAAiB;AAAA,IAAA;AAAA,EAAA;AAGxC;AAeA,MAAM,gBAAgBC,iBAAM,cAAkC;AAAA,EAC5D,UAAU,EAAE,SAAS,oBAAI,MAAI;AAAA,EAC7B,cAAc;AAAA,EACd,uBAAuB,MAAM;AAAA,EAAC;AAChC,CAAC;AAMD,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgB;AAEd,QAAM,CAAC,eAAe,gBAAgB,IAAIA,iBAAM;AAAA,IAC9C,SAAS,gBAAgB;AAAA,EAAA;AAI3B,QAAM,WAAWA,iBAAM,OAA0C,oBAAI,KAAK;AAG1E,QAAM,CAAC,cAAc,eAAe,IAAIA,iBAAM,SAAS,CAAC;AACxD,QAAM,wBAAwBA,iBAAM,YAAY,MAAM;AACpD,oBAAgB,CAAC,MAAM,IAAI,CAAC;AAAA,EAC9B,GAAG,CAAA,CAAE;AAGLA,mBAAM,UAAU,MAAM;AACpB,QAAI,UAAU,QAAW;AACvB,uBAAiB,KAAK;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,oBAAoBA,iBAAM;AAAA,IAC9B,CAAC,aAAiC;AAChC,UAAI,UAAU,QAAW;AAEvB,yBAAiB,QAAQ;AAAA,MAC3B;AACA,qDAAgB;AAAA,IAClB;AAAA,IACA,CAAC,OAAO,aAAa;AAAA,EAAA;AAGvB,QAAM,eAAeA,iBAAM;AAAA,IACzB,OAAO;AAAA,MACL;AAAA,MACA,OAAO,UAAU,SAAY,QAAQ;AAAA,MACrC;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,CAAC,aAAa,OAAO,eAAe,cAAc,qBAAqB;AAAA,EAAA;AAGzE,SACED,2BAAAA,IAAC,cAAc,UAAd,EAAuB,OAAO,cAC7B,UAAAA,2BAAAA;AAAAA,IAACE,OAAAA,OAAW;AAAA,IAAX;AAAA,MACC;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;AAEA,SAAS,cAAc,EAAE,UAAU,aAAa,WAAW,GAAG,aAAiC;AAC7F,QAAM,UAAUD,iBAAM,WAAW,aAAa;AAC9C,QAAM,kBAAkB,eAAe,QAAQ;AAE/C,QAAM,UAAU,CAACE,cAAAA,QAAO,SAAS,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAIpE,QAAM,kBAAkB,QAAQ,SAAS,OACrC,QAAQ,SAAS,QAAQ,IAAI,QAAQ,KAAK,IAC1C;AAIa,UAAQ;AACzB,QAAM,iBAAiB,oBACrB,kBAAkBH,2BAAAA,IAAC,UAAK,WAAWG,cAAAA,QAAO,aAAc,UAAA,gBAAA,CAAgB,IAAU;AAGpF,SACEH,2BAAAA,IAACE,OAAAA,OAAW,SAAX,EAAoB,GAAG,WAAW,WAAW,SAC3C,UAAA,YACCE,2BAAAA,KAAAC,WAAAA,UAAA,EACE,UAAA;AAAA,IAAAL,2BAAAA,IAAC,QAAA,EAAK,WAAWG,cAAAA,QAAO,OAAQ,UAAA,gBAAe;AAAA,IAC/CH,2BAAAA,IAACE,OAAAA,OAAW,MAAX,EAAgB,WAAWC,cAAAA,QAAO,MACjC,UAAAH,2BAAAA,IAAC,iBAAA,CAAA,CAAgB,EAAA,CACnB;AAAA,EAAA,EAAA,CACF,EAAA,CAEJ;AAEJ;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAAuB;AACrB,QAAM,eAAe,CAACG,cAAAA,QAAO,OAAO,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEvE,QAAM,aAAa,mBAAmB,OAClC,EAAE,0BAA0B,kBAAkB,KAAK,GAAG,UAAU,MAAA,IAChE,UAAU;AAEd,SACEH,2BAAAA,IAACE,OAAAA,OAAW,QAAX,EACC,UAAAF,2BAAAA;AAAAA,IAACE,OAAAA,OAAW;AAAA,IAAX;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAWC,cAAAA,QAAO;AAAA,MAElB,UAAAH,2BAAAA,IAACE,cAAW,OAAX,EAAkB,GAAG,WAAW,WAAW,cAAc,OAAO,YAC9D,SAAA,CACH;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AAEA,SAAS,WAAW,EAAE,UAAU,OAAO,UAAU,aAA8B;AAC7E,QAAM,EAAE,UAAU,sBAAA,IAA0BD,iBAAM,WAAW,aAAa;AAC1E,QAAM,UAAU,CAACE,cAAAA,QAAO,MAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAGjEF,mBAAM,UAAU,MAAM;AACpB,UAAM,QAAQ,SAAS;AACvB,UAAM,IAAI,OAAO,QAAQ;AAEzB,0BAAA;AACA,WAAO,MAAM;AACX,YAAM,OAAO,KAAK;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,UAAU,uBAAuB,OAAO,QAAQ,CAAC;AAErD,yCACGC,OAAAA,OAAW,MAAX,EAAgB,OAAc,UAAoB,WAAW,SAC5D,UAAA;AAAA,IAAAF,2BAAAA,IAACE,OAAAA,OAAW,UAAX,EAAqB,SAAA,CAAS;AAAA,IAC/BF,2BAAAA,IAACE,OAAAA,OAAW,eAAX,EAAyB,WAAWC,cAAAA,QAAO,eAC1C,UAAAH,2BAAAA,IAAC,WAAA,CAAA,CAAU,EAAA,CACb;AAAA,EAAA,GACF;AAEJ;AAEA,SAAS,YAAY,EAAE,UAAU,aAA+B;AAC9D,QAAM,UAAU,CAACG,cAAAA,QAAO,OAAO,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAClE,wCAAQD,OAAAA,OAAW,OAAX,EAAiB,WAAW,SAAU,UAAS;AACzD;AAEA,SAAS,iBAAiB,EAAE,UAAU,aAAoC;AACxE,QAAM,UAAU,CAACC,cAAAA,QAAO,YAAY,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACvE,wCAAQD,OAAAA,OAAW,YAAX,EAAsB,WAAW,SAAU,UAAS;AAC9D;AAMO,MAAM,SAAS,OAAO,OAAO,YAAY;AAAA,EAC9C,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,YAAY;AACd,CAAC;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Select as BaseSelect } from '@base-ui/react/select';\nimport styles from './Select.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport type SelectValue = string;\n\nexport interface SelectOption {\n value: SelectValue;\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Select dropdown for choosing from a list of options.\n * @see https://usefragments.com/components/select\n */\nexport interface SelectProps {\n children: React.ReactNode;\n /** Controlled selected value */\n value?: SelectValue | null;\n /** Default value for uncontrolled usage */\n defaultValue?: SelectValue;\n /** Called when selection changes */\n onValueChange?: (value: SelectValue | null) => void;\n /** Controlled open state */\n open?: boolean;\n /** Default open state */\n defaultOpen?: boolean;\n /** Called when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Whether the select is non-interactive */\n disabled?: boolean;\n /** Whether a selection is required */\n required?: boolean;\n /** Form field name */\n name?: string;\n /** Placeholder text when no value is selected */\n placeholder?: string;\n}\n\nexport interface SelectTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {\n children?: React.ReactNode;\n placeholder?: string;\n}\n\nexport interface SelectContentProps 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 SelectItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n children: React.ReactNode;\n value: SelectValue;\n disabled?: boolean;\n}\n\nexport interface SelectGroupProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface SelectGroupLabelProps 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\n// ============================================\n// Context for Select state\n// ============================================\n\ninterface SelectContextValue {\n placeholder?: string;\n value?: SelectValue | null;\n itemsRef: React.MutableRefObject<Map<SelectValue, React.ReactNode>>;\n // Version counter to trigger re-renders when items register\n itemsVersion: number;\n incrementItemsVersion: () => void;\n}\n\nconst SelectContext = React.createContext<SelectContextValue>({\n itemsRef: { current: new Map() },\n itemsVersion: 0,\n incrementItemsVersion: () => {},\n});\n\n// ============================================\n// Components\n// ============================================\n\nfunction SelectRoot({\n children,\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n required,\n name,\n placeholder,\n}: SelectProps) {\n // Track current value for controlled and uncontrolled modes\n const [internalValue, setInternalValue] = React.useState<SelectValue | null | undefined>(\n value ?? defaultValue ?? null\n );\n\n // Registry for item children - allows trigger to render selected item's content\n const itemsRef = React.useRef<Map<SelectValue, React.ReactNode>>(new Map());\n\n // Version counter to trigger trigger re-render when items register\n const [itemsVersion, setItemsVersion] = React.useState(0);\n const incrementItemsVersion = React.useCallback(() => {\n setItemsVersion((v) => v + 1);\n }, []);\n\n // Sync internal value with controlled value\n React.useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value);\n }\n }, [value]);\n\n const handleValueChange = React.useCallback(\n (newValue: SelectValue | null) => {\n if (value === undefined) {\n // Uncontrolled mode\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [value, onValueChange]\n );\n\n const contextValue = React.useMemo(\n () => ({\n placeholder,\n value: value !== undefined ? value : internalValue,\n itemsRef,\n itemsVersion,\n incrementItemsVersion,\n }),\n [placeholder, value, internalValue, itemsVersion, incrementItemsVersion]\n );\n\n return (\n <SelectContext.Provider value={contextValue}>\n <BaseSelect.Root\n value={value}\n defaultValue={defaultValue}\n onValueChange={handleValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n disabled={disabled}\n required={required}\n name={name}\n >\n {children}\n </BaseSelect.Root>\n </SelectContext.Provider>\n );\n}\n\nfunction SelectTrigger({ children, placeholder, className, ...htmlProps }: SelectTriggerProps) {\n const context = React.useContext(SelectContext);\n const placeholderText = placeholder ?? context.placeholder;\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n // Get the selected item's children from the registry\n // Note: itemsVersion in context ensures we re-render when items register\n const selectedContent = context.value != null\n ? context.itemsRef.current.get(context.value)\n : null;\n\n // Determine what to show in the value area\n \n const _version = context.itemsVersion; // Force dependency on itemsVersion for re-render\n const displayContent = selectedContent ?? (\n placeholderText ? <span className={styles.placeholder}>{placeholderText}</span> : null\n );\n\n return (\n <BaseSelect.Trigger {...htmlProps} className={classes}>\n {children ?? (\n <>\n <span className={styles.value}>{displayContent}</span>\n <BaseSelect.Icon className={styles.icon}>\n <ChevronDownIcon />\n </BaseSelect.Icon>\n </>\n )}\n </BaseSelect.Trigger>\n );\n}\n\nfunction SelectContent({\n children,\n className,\n sideOffset = 4,\n align = 'start',\n maxVisibleItems,\n ...htmlProps\n}: SelectContentProps) {\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 <BaseSelect.Portal>\n <BaseSelect.Positioner\n sideOffset={sideOffset}\n align={align}\n className={styles.positioner}\n >\n <BaseSelect.Popup {...htmlProps} className={popupClasses} style={popupStyle}>\n {children}\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n );\n}\n\nfunction SelectItem({ children, value, disabled, className, ...htmlProps }: SelectItemProps) {\n const { itemsRef, incrementItemsVersion } = React.useContext(SelectContext);\n const classes = [styles.item, className].filter(Boolean).join(' ');\n\n // Register this item's children in the registry so the trigger can display them\n React.useEffect(() => {\n const items = itemsRef.current;\n items.set(value, children);\n // Trigger re-render of trigger to show the registered content\n incrementItemsVersion();\n return () => {\n items.delete(value);\n incrementItemsVersion();\n };\n }, [itemsRef, incrementItemsVersion, value, children]);\n\n return (\n <BaseSelect.Item {...htmlProps} value={value} disabled={disabled} className={classes}>\n <BaseSelect.ItemText>{children}</BaseSelect.ItemText>\n <BaseSelect.ItemIndicator className={styles.itemIndicator}>\n <CheckIcon />\n </BaseSelect.ItemIndicator>\n </BaseSelect.Item>\n );\n}\n\nfunction SelectGroup({ children, className, ...htmlProps }: SelectGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseSelect.Group {...htmlProps} className={classes}>{children}</BaseSelect.Group>;\n}\n\nfunction SelectGroupLabel({ children, className, ...htmlProps }: SelectGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseSelect.GroupLabel {...htmlProps} className={classes}>{children}</BaseSelect.GroupLabel>;\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Select = Object.assign(SelectRoot, {\n Trigger: SelectTrigger,\n Content: SelectContent,\n Item: SelectItem,\n Group: SelectGroup,\n GroupLabel: SelectGroupLabel,\n});\n\n// Re-export individual components\nexport {\n SelectRoot,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectGroup,\n SelectGroupLabel,\n};\n"],"names":["jsx","React","BaseSelect","styles","jsxs","Fragment"],"mappings":"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"}
|
|
@@ -5,17 +5,31 @@ export interface SelectOption {
|
|
|
5
5
|
label: string;
|
|
6
6
|
disabled?: boolean;
|
|
7
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Select dropdown for choosing from a list of options.
|
|
10
|
+
* @see https://usefragments.com/components/select
|
|
11
|
+
*/
|
|
8
12
|
export interface SelectProps {
|
|
9
13
|
children: React.ReactNode;
|
|
14
|
+
/** Controlled selected value */
|
|
10
15
|
value?: SelectValue | null;
|
|
16
|
+
/** Default value for uncontrolled usage */
|
|
11
17
|
defaultValue?: SelectValue;
|
|
18
|
+
/** Called when selection changes */
|
|
12
19
|
onValueChange?: (value: SelectValue | null) => void;
|
|
20
|
+
/** Controlled open state */
|
|
13
21
|
open?: boolean;
|
|
22
|
+
/** Default open state */
|
|
14
23
|
defaultOpen?: boolean;
|
|
24
|
+
/** Called when open state changes */
|
|
15
25
|
onOpenChange?: (open: boolean) => void;
|
|
26
|
+
/** Whether the select is non-interactive */
|
|
16
27
|
disabled?: boolean;
|
|
28
|
+
/** Whether a selection is required */
|
|
17
29
|
required?: boolean;
|
|
30
|
+
/** Form field name */
|
|
18
31
|
name?: string;
|
|
32
|
+
/** Placeholder text when no value is selected */
|
|
19
33
|
placeholder?: string;
|
|
20
34
|
}
|
|
21
35
|
export interface SelectTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {
|
|
@@ -29,26 +43,23 @@ export interface SelectContentProps extends React.HTMLAttributes<HTMLDivElement>
|
|
|
29
43
|
/** Maximum number of visible options before scrolling. Shows half of the next item as a scroll hint. @default 4 */
|
|
30
44
|
maxVisibleItems?: number;
|
|
31
45
|
}
|
|
32
|
-
export interface SelectItemProps {
|
|
46
|
+
export interface SelectItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
|
|
33
47
|
children: React.ReactNode;
|
|
34
48
|
value: SelectValue;
|
|
35
49
|
disabled?: boolean;
|
|
36
|
-
className?: string;
|
|
37
50
|
}
|
|
38
|
-
export interface SelectGroupProps {
|
|
51
|
+
export interface SelectGroupProps extends React.HTMLAttributes<HTMLElement> {
|
|
39
52
|
children: React.ReactNode;
|
|
40
|
-
className?: string;
|
|
41
53
|
}
|
|
42
|
-
export interface SelectGroupLabelProps {
|
|
54
|
+
export interface SelectGroupLabelProps extends React.HTMLAttributes<HTMLElement> {
|
|
43
55
|
children: React.ReactNode;
|
|
44
|
-
className?: string;
|
|
45
56
|
}
|
|
46
57
|
declare function SelectRoot({ children, value, defaultValue, onValueChange, open, defaultOpen, onOpenChange, disabled, required, name, placeholder, }: SelectProps): import("react/jsx-runtime").JSX.Element;
|
|
47
58
|
declare function SelectTrigger({ children, placeholder, className, ...htmlProps }: SelectTriggerProps): import("react/jsx-runtime").JSX.Element;
|
|
48
59
|
declare function SelectContent({ children, className, sideOffset, align, maxVisibleItems, ...htmlProps }: SelectContentProps): import("react/jsx-runtime").JSX.Element;
|
|
49
|
-
declare function SelectItem({ children, value, disabled, className }: SelectItemProps): import("react/jsx-runtime").JSX.Element;
|
|
50
|
-
declare function SelectGroup({ children, className }: SelectGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
51
|
-
declare function SelectGroupLabel({ children, className }: SelectGroupLabelProps): import("react/jsx-runtime").JSX.Element;
|
|
60
|
+
declare function SelectItem({ children, value, disabled, className, ...htmlProps }: SelectItemProps): import("react/jsx-runtime").JSX.Element;
|
|
61
|
+
declare function SelectGroup({ children, className, ...htmlProps }: SelectGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
62
|
+
declare function SelectGroupLabel({ children, className, ...htmlProps }: SelectGroupLabelProps): import("react/jsx-runtime").JSX.Element;
|
|
52
63
|
export declare const Select: typeof SelectRoot & {
|
|
53
64
|
Trigger: typeof SelectTrigger;
|
|
54
65
|
Content: typeof SelectContent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Select/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACpD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAmB,SAAQ,KAAK,CAAC,cAAc,CAAC,iBAAiB,CAAC;IACjF,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAmB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC9E,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,mHAAmH;IACnH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Select/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -137,7 +137,7 @@ function SelectContent({
|
|
|
137
137
|
}
|
|
138
138
|
) });
|
|
139
139
|
}
|
|
140
|
-
function SelectItem({ children, value, disabled, className }) {
|
|
140
|
+
function SelectItem({ children, value, disabled, className, ...htmlProps }) {
|
|
141
141
|
const { itemsRef, incrementItemsVersion } = React.useContext(SelectContext);
|
|
142
142
|
const classes = [styles.item, className].filter(Boolean).join(" ");
|
|
143
143
|
React.useEffect(() => {
|
|
@@ -146,20 +146,21 @@ function SelectItem({ children, value, disabled, className }) {
|
|
|
146
146
|
incrementItemsVersion();
|
|
147
147
|
return () => {
|
|
148
148
|
items.delete(value);
|
|
149
|
+
incrementItemsVersion();
|
|
149
150
|
};
|
|
150
151
|
}, [itemsRef, incrementItemsVersion, value, children]);
|
|
151
|
-
return /* @__PURE__ */ jsxs(Select$1.Item, { value, disabled, className: classes, children: [
|
|
152
|
+
return /* @__PURE__ */ jsxs(Select$1.Item, { ...htmlProps, value, disabled, className: classes, children: [
|
|
152
153
|
/* @__PURE__ */ jsx(Select$1.ItemText, { children }),
|
|
153
154
|
/* @__PURE__ */ jsx(Select$1.ItemIndicator, { className: styles.itemIndicator, children: /* @__PURE__ */ jsx(CheckIcon, {}) })
|
|
154
155
|
] });
|
|
155
156
|
}
|
|
156
|
-
function SelectGroup({ children, className }) {
|
|
157
|
+
function SelectGroup({ children, className, ...htmlProps }) {
|
|
157
158
|
const classes = [styles.group, className].filter(Boolean).join(" ");
|
|
158
|
-
return /* @__PURE__ */ jsx(Select$1.Group, { className: classes, children });
|
|
159
|
+
return /* @__PURE__ */ jsx(Select$1.Group, { ...htmlProps, className: classes, children });
|
|
159
160
|
}
|
|
160
|
-
function SelectGroupLabel({ children, className }) {
|
|
161
|
+
function SelectGroupLabel({ children, className, ...htmlProps }) {
|
|
161
162
|
const classes = [styles.groupLabel, className].filter(Boolean).join(" ");
|
|
162
|
-
return /* @__PURE__ */ jsx(Select$1.GroupLabel, { className: classes, children });
|
|
163
|
+
return /* @__PURE__ */ jsx(Select$1.GroupLabel, { ...htmlProps, className: classes, children });
|
|
163
164
|
}
|
|
164
165
|
const Select = Object.assign(SelectRoot, {
|
|
165
166
|
Trigger: SelectTrigger,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Select as BaseSelect } from '@base-ui/react/select';\nimport styles from './Select.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport type SelectValue = string;\n\nexport interface SelectOption {\n value: SelectValue;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n children: React.ReactNode;\n value?: SelectValue | null;\n defaultValue?: SelectValue;\n onValueChange?: (value: SelectValue | null) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n placeholder?: string;\n}\n\nexport interface SelectTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {\n children?: React.ReactNode;\n placeholder?: string;\n}\n\nexport interface SelectContentProps 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 SelectItemProps {\n children: React.ReactNode;\n value: SelectValue;\n disabled?: boolean;\n className?: string;\n}\n\nexport interface SelectGroupProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface SelectGroupLabelProps {\n children: React.ReactNode;\n className?: string;\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\n// ============================================\n// Context for Select state\n// ============================================\n\ninterface SelectContextValue {\n placeholder?: string;\n value?: SelectValue | null;\n itemsRef: React.MutableRefObject<Map<SelectValue, React.ReactNode>>;\n // Version counter to trigger re-renders when items register\n itemsVersion: number;\n incrementItemsVersion: () => void;\n}\n\nconst SelectContext = React.createContext<SelectContextValue>({\n itemsRef: { current: new Map() },\n itemsVersion: 0,\n incrementItemsVersion: () => {},\n});\n\n// ============================================\n// Components\n// ============================================\n\nfunction SelectRoot({\n children,\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n required,\n name,\n placeholder,\n}: SelectProps) {\n // Track current value for controlled and uncontrolled modes\n const [internalValue, setInternalValue] = React.useState<SelectValue | null | undefined>(\n value ?? defaultValue ?? null\n );\n\n // Registry for item children - allows trigger to render selected item's content\n const itemsRef = React.useRef<Map<SelectValue, React.ReactNode>>(new Map());\n\n // Version counter to trigger trigger re-render when items register\n const [itemsVersion, setItemsVersion] = React.useState(0);\n const incrementItemsVersion = React.useCallback(() => {\n setItemsVersion((v) => v + 1);\n }, []);\n\n // Sync internal value with controlled value\n React.useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value);\n }\n }, [value]);\n\n const handleValueChange = React.useCallback(\n (newValue: SelectValue | null) => {\n if (value === undefined) {\n // Uncontrolled mode\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [value, onValueChange]\n );\n\n const contextValue = React.useMemo(\n () => ({\n placeholder,\n value: value !== undefined ? value : internalValue,\n itemsRef,\n itemsVersion,\n incrementItemsVersion,\n }),\n [placeholder, value, internalValue, itemsVersion, incrementItemsVersion]\n );\n\n return (\n <SelectContext.Provider value={contextValue}>\n <BaseSelect.Root\n value={value}\n defaultValue={defaultValue}\n onValueChange={handleValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n disabled={disabled}\n required={required}\n name={name}\n >\n {children}\n </BaseSelect.Root>\n </SelectContext.Provider>\n );\n}\n\nfunction SelectTrigger({ children, placeholder, className, ...htmlProps }: SelectTriggerProps) {\n const context = React.useContext(SelectContext);\n const placeholderText = placeholder ?? context.placeholder;\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n // Get the selected item's children from the registry\n // Note: itemsVersion in context ensures we re-render when items register\n const selectedContent = context.value != null\n ? context.itemsRef.current.get(context.value)\n : null;\n\n // Determine what to show in the value area\n \n const _version = context.itemsVersion; // Force dependency on itemsVersion for re-render\n const displayContent = selectedContent ?? (\n placeholderText ? <span className={styles.placeholder}>{placeholderText}</span> : null\n );\n\n return (\n <BaseSelect.Trigger {...htmlProps} className={classes}>\n {children ?? (\n <>\n <span className={styles.value}>{displayContent}</span>\n <BaseSelect.Icon className={styles.icon}>\n <ChevronDownIcon />\n </BaseSelect.Icon>\n </>\n )}\n </BaseSelect.Trigger>\n );\n}\n\nfunction SelectContent({\n children,\n className,\n sideOffset = 4,\n align = 'start',\n maxVisibleItems,\n ...htmlProps\n}: SelectContentProps) {\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 <BaseSelect.Portal>\n <BaseSelect.Positioner\n sideOffset={sideOffset}\n align={align}\n className={styles.positioner}\n >\n <BaseSelect.Popup {...htmlProps} className={popupClasses} style={popupStyle}>\n {children}\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n );\n}\n\nfunction SelectItem({ children, value, disabled, className }: SelectItemProps) {\n const { itemsRef, incrementItemsVersion } = React.useContext(SelectContext);\n const classes = [styles.item, className].filter(Boolean).join(' ');\n\n // Register this item's children in the registry so the trigger can display them\n React.useEffect(() => {\n const items = itemsRef.current;\n items.set(value, children);\n // Trigger re-render of trigger to show the registered content\n incrementItemsVersion();\n return () => {\n items.delete(value);\n };\n }, [itemsRef, incrementItemsVersion, value, children]);\n\n return (\n <BaseSelect.Item value={value} disabled={disabled} className={classes}>\n <BaseSelect.ItemText>{children}</BaseSelect.ItemText>\n <BaseSelect.ItemIndicator className={styles.itemIndicator}>\n <CheckIcon />\n </BaseSelect.ItemIndicator>\n </BaseSelect.Item>\n );\n}\n\nfunction SelectGroup({ children, className }: SelectGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseSelect.Group className={classes}>{children}</BaseSelect.Group>;\n}\n\nfunction SelectGroupLabel({ children, className }: SelectGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseSelect.GroupLabel className={classes}>{children}</BaseSelect.GroupLabel>;\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Select = Object.assign(SelectRoot, {\n Trigger: SelectTrigger,\n Content: SelectContent,\n Item: SelectItem,\n Group: SelectGroup,\n GroupLabel: SelectGroupLabel,\n});\n\n// Re-export individual components\nexport {\n SelectRoot,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectGroup,\n SelectGroupLabel,\n};\n"],"names":["BaseSelect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Select as BaseSelect } from '@base-ui/react/select';\nimport styles from './Select.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport type SelectValue = string;\n\nexport interface SelectOption {\n value: SelectValue;\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Select dropdown for choosing from a list of options.\n * @see https://usefragments.com/components/select\n */\nexport interface SelectProps {\n children: React.ReactNode;\n /** Controlled selected value */\n value?: SelectValue | null;\n /** Default value for uncontrolled usage */\n defaultValue?: SelectValue;\n /** Called when selection changes */\n onValueChange?: (value: SelectValue | null) => void;\n /** Controlled open state */\n open?: boolean;\n /** Default open state */\n defaultOpen?: boolean;\n /** Called when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Whether the select is non-interactive */\n disabled?: boolean;\n /** Whether a selection is required */\n required?: boolean;\n /** Form field name */\n name?: string;\n /** Placeholder text when no value is selected */\n placeholder?: string;\n}\n\nexport interface SelectTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {\n children?: React.ReactNode;\n placeholder?: string;\n}\n\nexport interface SelectContentProps 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 SelectItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n children: React.ReactNode;\n value: SelectValue;\n disabled?: boolean;\n}\n\nexport interface SelectGroupProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface SelectGroupLabelProps 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\n// ============================================\n// Context for Select state\n// ============================================\n\ninterface SelectContextValue {\n placeholder?: string;\n value?: SelectValue | null;\n itemsRef: React.MutableRefObject<Map<SelectValue, React.ReactNode>>;\n // Version counter to trigger re-renders when items register\n itemsVersion: number;\n incrementItemsVersion: () => void;\n}\n\nconst SelectContext = React.createContext<SelectContextValue>({\n itemsRef: { current: new Map() },\n itemsVersion: 0,\n incrementItemsVersion: () => {},\n});\n\n// ============================================\n// Components\n// ============================================\n\nfunction SelectRoot({\n children,\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n required,\n name,\n placeholder,\n}: SelectProps) {\n // Track current value for controlled and uncontrolled modes\n const [internalValue, setInternalValue] = React.useState<SelectValue | null | undefined>(\n value ?? defaultValue ?? null\n );\n\n // Registry for item children - allows trigger to render selected item's content\n const itemsRef = React.useRef<Map<SelectValue, React.ReactNode>>(new Map());\n\n // Version counter to trigger trigger re-render when items register\n const [itemsVersion, setItemsVersion] = React.useState(0);\n const incrementItemsVersion = React.useCallback(() => {\n setItemsVersion((v) => v + 1);\n }, []);\n\n // Sync internal value with controlled value\n React.useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value);\n }\n }, [value]);\n\n const handleValueChange = React.useCallback(\n (newValue: SelectValue | null) => {\n if (value === undefined) {\n // Uncontrolled mode\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [value, onValueChange]\n );\n\n const contextValue = React.useMemo(\n () => ({\n placeholder,\n value: value !== undefined ? value : internalValue,\n itemsRef,\n itemsVersion,\n incrementItemsVersion,\n }),\n [placeholder, value, internalValue, itemsVersion, incrementItemsVersion]\n );\n\n return (\n <SelectContext.Provider value={contextValue}>\n <BaseSelect.Root\n value={value}\n defaultValue={defaultValue}\n onValueChange={handleValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n disabled={disabled}\n required={required}\n name={name}\n >\n {children}\n </BaseSelect.Root>\n </SelectContext.Provider>\n );\n}\n\nfunction SelectTrigger({ children, placeholder, className, ...htmlProps }: SelectTriggerProps) {\n const context = React.useContext(SelectContext);\n const placeholderText = placeholder ?? context.placeholder;\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n // Get the selected item's children from the registry\n // Note: itemsVersion in context ensures we re-render when items register\n const selectedContent = context.value != null\n ? context.itemsRef.current.get(context.value)\n : null;\n\n // Determine what to show in the value area\n \n const _version = context.itemsVersion; // Force dependency on itemsVersion for re-render\n const displayContent = selectedContent ?? (\n placeholderText ? <span className={styles.placeholder}>{placeholderText}</span> : null\n );\n\n return (\n <BaseSelect.Trigger {...htmlProps} className={classes}>\n {children ?? (\n <>\n <span className={styles.value}>{displayContent}</span>\n <BaseSelect.Icon className={styles.icon}>\n <ChevronDownIcon />\n </BaseSelect.Icon>\n </>\n )}\n </BaseSelect.Trigger>\n );\n}\n\nfunction SelectContent({\n children,\n className,\n sideOffset = 4,\n align = 'start',\n maxVisibleItems,\n ...htmlProps\n}: SelectContentProps) {\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 <BaseSelect.Portal>\n <BaseSelect.Positioner\n sideOffset={sideOffset}\n align={align}\n className={styles.positioner}\n >\n <BaseSelect.Popup {...htmlProps} className={popupClasses} style={popupStyle}>\n {children}\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n );\n}\n\nfunction SelectItem({ children, value, disabled, className, ...htmlProps }: SelectItemProps) {\n const { itemsRef, incrementItemsVersion } = React.useContext(SelectContext);\n const classes = [styles.item, className].filter(Boolean).join(' ');\n\n // Register this item's children in the registry so the trigger can display them\n React.useEffect(() => {\n const items = itemsRef.current;\n items.set(value, children);\n // Trigger re-render of trigger to show the registered content\n incrementItemsVersion();\n return () => {\n items.delete(value);\n incrementItemsVersion();\n };\n }, [itemsRef, incrementItemsVersion, value, children]);\n\n return (\n <BaseSelect.Item {...htmlProps} value={value} disabled={disabled} className={classes}>\n <BaseSelect.ItemText>{children}</BaseSelect.ItemText>\n <BaseSelect.ItemIndicator className={styles.itemIndicator}>\n <CheckIcon />\n </BaseSelect.ItemIndicator>\n </BaseSelect.Item>\n );\n}\n\nfunction SelectGroup({ children, className, ...htmlProps }: SelectGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseSelect.Group {...htmlProps} className={classes}>{children}</BaseSelect.Group>;\n}\n\nfunction SelectGroupLabel({ children, className, ...htmlProps }: SelectGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseSelect.GroupLabel {...htmlProps} className={classes}>{children}</BaseSelect.GroupLabel>;\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Select = Object.assign(SelectRoot, {\n Trigger: SelectTrigger,\n Content: SelectContent,\n Item: SelectItem,\n Group: SelectGroup,\n GroupLabel: SelectGroupLabel,\n});\n\n// Re-export individual components\nexport {\n SelectRoot,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectGroup,\n SelectGroupLabel,\n};\n"],"names":["BaseSelect"],"mappings":"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"}
|
|
@@ -26,6 +26,13 @@ function _interopNamespaceDefault(e) {
|
|
|
26
26
|
return Object.freeze(n);
|
|
27
27
|
}
|
|
28
28
|
const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
|
|
29
|
+
function composeEventHandlers(userHandler, internalHandler) {
|
|
30
|
+
return (event) => {
|
|
31
|
+
userHandler == null ? void 0 : userHandler(event);
|
|
32
|
+
if (event.defaultPrevented) return;
|
|
33
|
+
internalHandler(event);
|
|
34
|
+
};
|
|
35
|
+
}
|
|
29
36
|
function MenuIcon() {
|
|
30
37
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
31
38
|
"svg",
|
|
@@ -370,16 +377,26 @@ function SidebarRoot({
|
|
|
370
377
|
);
|
|
371
378
|
return /* @__PURE__ */ jsxRuntime.jsx(SidebarContext.Provider, { value: contextValue, children: content });
|
|
372
379
|
}
|
|
373
|
-
function SidebarHeader({
|
|
380
|
+
function SidebarHeader({
|
|
381
|
+
children,
|
|
382
|
+
collapsedContent,
|
|
383
|
+
className,
|
|
384
|
+
...htmlProps
|
|
385
|
+
}) {
|
|
374
386
|
const { collapsed, isMobile } = useSidebarContext();
|
|
375
387
|
const isCollapsed = collapsed && !isMobile;
|
|
376
388
|
const classes = [Sidebar_module.default.header, className].filter(Boolean).join(" ");
|
|
377
389
|
const content = isCollapsed && collapsedContent ? collapsedContent : children;
|
|
378
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes, children: content });
|
|
390
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlProps, className: classes, children: content });
|
|
379
391
|
}
|
|
380
|
-
function SidebarNav({
|
|
392
|
+
function SidebarNav({
|
|
393
|
+
children,
|
|
394
|
+
"aria-label": ariaLabel = "Main navigation",
|
|
395
|
+
className,
|
|
396
|
+
...htmlProps
|
|
397
|
+
}) {
|
|
381
398
|
const classes = [Sidebar_module.default.nav, className].filter(Boolean).join(" ");
|
|
382
|
-
return /* @__PURE__ */ jsxRuntime.jsx("nav", { className: classes, "aria-label": ariaLabel, children: /* @__PURE__ */ jsxRuntime.jsx(index$2.ScrollArea, { orientation: "vertical", showFades: true, className: Sidebar_module.default.navScrollArea, children }) });
|
|
399
|
+
return /* @__PURE__ */ jsxRuntime.jsx("nav", { ...htmlProps, className: classes, "aria-label": ariaLabel, children: /* @__PURE__ */ jsxRuntime.jsx(index$2.ScrollArea, { orientation: "vertical", showFades: true, className: Sidebar_module.default.navScrollArea, children }) });
|
|
383
400
|
}
|
|
384
401
|
function SidebarSection({
|
|
385
402
|
children,
|
|
@@ -387,7 +404,8 @@ function SidebarSection({
|
|
|
387
404
|
action,
|
|
388
405
|
collapsible: isCollapsibleProp = false,
|
|
389
406
|
defaultOpen = true,
|
|
390
|
-
className
|
|
407
|
+
className,
|
|
408
|
+
...htmlProps
|
|
391
409
|
}) {
|
|
392
410
|
const { collapsed, isMobile } = useSidebarContext();
|
|
393
411
|
const classes = [
|
|
@@ -398,7 +416,7 @@ function SidebarSection({
|
|
|
398
416
|
const showAction = action && (!collapsed || isMobile);
|
|
399
417
|
const isCollapsible = isCollapsibleProp && showLabel;
|
|
400
418
|
if (!isCollapsible) {
|
|
401
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classes, role: "group", "aria-label": label, children: [
|
|
419
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ...htmlProps, className: classes, role: "group", "aria-label": label, children: [
|
|
402
420
|
(showLabel || showAction) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Sidebar_module.default.sectionHeader, children: [
|
|
403
421
|
showLabel && /* @__PURE__ */ jsxRuntime.jsx("div", { className: Sidebar_module.default.sectionLabel, children: label }),
|
|
404
422
|
showAction && /* @__PURE__ */ jsxRuntime.jsx("div", { className: Sidebar_module.default.sectionActionWrapper, children: action })
|
|
@@ -406,7 +424,7 @@ function SidebarSection({
|
|
|
406
424
|
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: Sidebar_module.default.sectionList, children })
|
|
407
425
|
] });
|
|
408
426
|
}
|
|
409
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes, role: "group", "aria-label": label, children: /* @__PURE__ */ jsxRuntime.jsxs(index$1.Collapsible, { defaultOpen, className: Sidebar_module.default.sectionCollapsible, children: [
|
|
427
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlProps, className: classes, role: "group", "aria-label": label, children: /* @__PURE__ */ jsxRuntime.jsxs(index$1.Collapsible, { defaultOpen, className: Sidebar_module.default.sectionCollapsible, children: [
|
|
410
428
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: Sidebar_module.default.sectionHeader, children: [
|
|
411
429
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
412
430
|
index$1.Collapsible.Trigger,
|
|
@@ -425,15 +443,17 @@ function SidebarSectionAction({
|
|
|
425
443
|
children,
|
|
426
444
|
onClick,
|
|
427
445
|
"aria-label": ariaLabel,
|
|
428
|
-
className
|
|
446
|
+
className,
|
|
447
|
+
...htmlProps
|
|
429
448
|
}) {
|
|
430
449
|
const classes = [Sidebar_module.default.sectionAction, className].filter(Boolean).join(" ");
|
|
431
450
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
432
451
|
"button",
|
|
433
452
|
{
|
|
434
453
|
type: "button",
|
|
454
|
+
...htmlProps,
|
|
435
455
|
className: classes,
|
|
436
|
-
onClick,
|
|
456
|
+
onClick: (event) => onClick == null ? void 0 : onClick(event),
|
|
437
457
|
"aria-label": ariaLabel,
|
|
438
458
|
children
|
|
439
459
|
}
|
|
@@ -506,11 +526,16 @@ function SidebarItem({
|
|
|
506
526
|
};
|
|
507
527
|
let itemElement;
|
|
508
528
|
if (asChild && React__namespace.isValidElement(children)) {
|
|
529
|
+
const childProps = children.props;
|
|
509
530
|
itemElement = React__namespace.cloneElement(children, {
|
|
510
531
|
...itemProps,
|
|
511
532
|
...rest,
|
|
533
|
+
onClick: composeEventHandlers(
|
|
534
|
+
childProps.onClick,
|
|
535
|
+
(event) => handleClick(event)
|
|
536
|
+
),
|
|
512
537
|
// Merge classNames
|
|
513
|
-
className: [classes,
|
|
538
|
+
className: [classes, childProps.className].filter(Boolean).join(" "),
|
|
514
539
|
children: itemContent
|
|
515
540
|
});
|
|
516
541
|
} else if (href) {
|
|
@@ -564,11 +589,17 @@ function SidebarSubItem({
|
|
|
564
589
|
function SidebarSubmenu({ children }) {
|
|
565
590
|
return /* @__PURE__ */ jsxRuntime.jsx("li", { className: Sidebar_module.default.submenuWrapper, children: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: Sidebar_module.default.submenu, children }) });
|
|
566
591
|
}
|
|
567
|
-
function SidebarFooter({ children, className }) {
|
|
592
|
+
function SidebarFooter({ children, className, ...htmlProps }) {
|
|
568
593
|
const classes = [Sidebar_module.default.footer, className].filter(Boolean).join(" ");
|
|
569
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes, children });
|
|
594
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlProps, className: classes, children });
|
|
570
595
|
}
|
|
571
|
-
function SidebarTrigger({
|
|
596
|
+
function SidebarTrigger({
|
|
597
|
+
children,
|
|
598
|
+
"aria-label": ariaLabel = "Toggle navigation",
|
|
599
|
+
className,
|
|
600
|
+
onClick,
|
|
601
|
+
...htmlProps
|
|
602
|
+
}) {
|
|
572
603
|
const { open, setOpen, isMobile, sidebarId } = useSidebarContext();
|
|
573
604
|
if (!isMobile) {
|
|
574
605
|
return null;
|
|
@@ -577,9 +608,10 @@ function SidebarTrigger({ children, "aria-label": ariaLabel = "Toggle navigation
|
|
|
577
608
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
578
609
|
"button",
|
|
579
610
|
{
|
|
611
|
+
...htmlProps,
|
|
580
612
|
type: "button",
|
|
581
613
|
className: classes,
|
|
582
|
-
onClick: () => setOpen(!open),
|
|
614
|
+
onClick: composeEventHandlers(onClick, () => setOpen(!open)),
|
|
583
615
|
"aria-label": ariaLabel,
|
|
584
616
|
"aria-expanded": open,
|
|
585
617
|
"aria-controls": sidebarId,
|
|
@@ -587,7 +619,7 @@ function SidebarTrigger({ children, "aria-label": ariaLabel = "Toggle navigation
|
|
|
587
619
|
}
|
|
588
620
|
);
|
|
589
621
|
}
|
|
590
|
-
function SidebarOverlay({ className }) {
|
|
622
|
+
function SidebarOverlay({ className, onClick, ...htmlProps }) {
|
|
591
623
|
const { open, setOpen, isMobile } = useSidebarContext();
|
|
592
624
|
if (!isMobile || !open) {
|
|
593
625
|
return null;
|
|
@@ -596,14 +628,20 @@ function SidebarOverlay({ className }) {
|
|
|
596
628
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
597
629
|
"div",
|
|
598
630
|
{
|
|
631
|
+
...htmlProps,
|
|
599
632
|
className: classes,
|
|
600
|
-
onClick: () => setOpen(false),
|
|
633
|
+
onClick: composeEventHandlers(onClick, () => setOpen(false)),
|
|
601
634
|
"aria-hidden": "true",
|
|
602
635
|
"data-state": open ? "open" : "closed"
|
|
603
636
|
}
|
|
604
637
|
);
|
|
605
638
|
}
|
|
606
|
-
function SidebarCollapseToggle({
|
|
639
|
+
function SidebarCollapseToggle({
|
|
640
|
+
"aria-label": ariaLabel,
|
|
641
|
+
className,
|
|
642
|
+
onClick,
|
|
643
|
+
...htmlProps
|
|
644
|
+
}) {
|
|
607
645
|
const { collapsed, setCollapsed, isMobile, collapsible, hasIcons } = useSidebarContext();
|
|
608
646
|
if (isMobile || collapsible === "none") {
|
|
609
647
|
return null;
|
|
@@ -618,15 +656,22 @@ function SidebarCollapseToggle({ "aria-label": ariaLabel, className }) {
|
|
|
618
656
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
619
657
|
"button",
|
|
620
658
|
{
|
|
659
|
+
...htmlProps,
|
|
621
660
|
type: "button",
|
|
622
661
|
className: classes,
|
|
623
|
-
onClick: () => setCollapsed(!collapsed),
|
|
662
|
+
onClick: composeEventHandlers(onClick, () => setCollapsed(!collapsed)),
|
|
624
663
|
"aria-label": label,
|
|
625
664
|
children: /* @__PURE__ */ jsxRuntime.jsx(CollapsePanelIcon, {})
|
|
626
665
|
}
|
|
627
666
|
);
|
|
628
667
|
}
|
|
629
|
-
function SidebarRail({
|
|
668
|
+
function SidebarRail({
|
|
669
|
+
className,
|
|
670
|
+
onClick,
|
|
671
|
+
title,
|
|
672
|
+
"aria-label": ariaLabel,
|
|
673
|
+
...htmlProps
|
|
674
|
+
}) {
|
|
630
675
|
const { collapsed, setCollapsed, isMobile, collapsible } = useSidebarContext();
|
|
631
676
|
if (isMobile || collapsible === "none") {
|
|
632
677
|
return null;
|
|
@@ -639,24 +684,26 @@ function SidebarRail({ className }) {
|
|
|
639
684
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
640
685
|
"button",
|
|
641
686
|
{
|
|
687
|
+
...htmlProps,
|
|
642
688
|
type: "button",
|
|
643
689
|
className: classes,
|
|
644
|
-
onClick: () => setCollapsed(!collapsed),
|
|
645
|
-
"aria-label": collapsed ? "Expand sidebar" : "Collapse sidebar",
|
|
646
|
-
title: collapsed ? "Expand sidebar" : "Collapse sidebar"
|
|
690
|
+
onClick: composeEventHandlers(onClick, () => setCollapsed(!collapsed)),
|
|
691
|
+
"aria-label": ariaLabel ?? (collapsed ? "Expand sidebar" : "Collapse sidebar"),
|
|
692
|
+
title: title ?? (collapsed ? "Expand sidebar" : "Collapse sidebar")
|
|
647
693
|
}
|
|
648
694
|
);
|
|
649
695
|
}
|
|
650
696
|
function SidebarMenuSkeleton({
|
|
651
697
|
count = 5,
|
|
652
698
|
showIcon = true,
|
|
653
|
-
className
|
|
699
|
+
className,
|
|
700
|
+
...htmlProps
|
|
654
701
|
}) {
|
|
655
702
|
const { collapsed, isMobile } = useSidebarContext();
|
|
656
703
|
const isCollapsed = collapsed && !isMobile;
|
|
657
704
|
const classes = [Sidebar_module.default.menuSkeleton, className].filter(Boolean).join(" ");
|
|
658
705
|
const labelWidths = ["64%", "72%", "68%", "79%", "74%", "66%", "83%", "70%"];
|
|
659
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes, "aria-hidden": "true", children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Sidebar_module.default.skeletonItem, children: [
|
|
706
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlProps, className: classes, "aria-hidden": "true", children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Sidebar_module.default.skeletonItem, children: [
|
|
660
707
|
showIcon && /* @__PURE__ */ jsxRuntime.jsx(index.Skeleton, { variant: "avatar", size: "sm" }),
|
|
661
708
|
!isCollapsed && /* @__PURE__ */ jsxRuntime.jsx(
|
|
662
709
|
index.Skeleton,
|