@proyecto-viviana/solidaria-components 0.3.2 → 0.4.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/ActionBar.js +184 -0
- package/dist/ActionBar.js.map +1 -0
- package/dist/ActionBar.jsx +128 -0
- package/dist/ActionBar.jsx.map +1 -0
- package/dist/ActionGroup.js +179 -0
- package/dist/ActionGroup.js.map +1 -0
- package/dist/ActionGroup.jsx +129 -0
- package/dist/ActionGroup.jsx.map +1 -0
- package/dist/Alert.js +111 -0
- package/dist/Alert.js.map +1 -0
- package/dist/Alert.jsx +82 -0
- package/dist/Alert.jsx.map +1 -0
- package/dist/Autocomplete.js +130 -0
- package/dist/Autocomplete.js.map +1 -0
- package/dist/Autocomplete.jsx +116 -0
- package/dist/Autocomplete.jsx.map +1 -0
- package/dist/Breadcrumbs.d.ts.map +1 -1
- package/dist/Breadcrumbs.js +334 -0
- package/dist/Breadcrumbs.js.map +1 -0
- package/dist/Breadcrumbs.jsx +266 -0
- package/dist/Breadcrumbs.jsx.map +1 -0
- package/dist/Button.d.ts.map +1 -1
- package/dist/Button.js +348 -0
- package/dist/Button.js.map +1 -0
- package/dist/Button.jsx +314 -0
- package/dist/Button.jsx.map +1 -0
- package/dist/Calendar.d.ts +4 -4
- package/dist/Calendar.d.ts.map +1 -1
- package/dist/Calendar.js +538 -0
- package/dist/Calendar.js.map +1 -0
- package/dist/Calendar.jsx +333 -0
- package/dist/Calendar.jsx.map +1 -0
- package/dist/CalendarPicker.d.ts +33 -0
- package/dist/CalendarPicker.d.ts.map +1 -0
- package/dist/CalendarPicker.js +44 -0
- package/dist/CalendarPicker.js.map +1 -0
- package/dist/CalendarPicker.jsx +44 -0
- package/dist/CalendarPicker.jsx.map +1 -0
- package/dist/Checkbox.d.ts +83 -4
- package/dist/Checkbox.d.ts.map +1 -1
- package/dist/Checkbox.js +923 -0
- package/dist/Checkbox.js.map +1 -0
- package/dist/Checkbox.jsx +707 -0
- package/dist/Checkbox.jsx.map +1 -0
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +202 -0
- package/dist/Collection.js.map +1 -0
- package/dist/Collection.jsx +152 -0
- package/dist/Collection.jsx.map +1 -0
- package/dist/Color.d.ts.map +1 -1
- package/dist/Color.js +1720 -0
- package/dist/Color.js.map +1 -0
- package/dist/Color.jsx +1344 -0
- package/dist/Color.jsx.map +1 -0
- package/dist/ColorEditor.js +208 -0
- package/dist/ColorEditor.js.map +1 -0
- package/dist/ColorEditor.jsx +120 -0
- package/dist/ColorEditor.jsx.map +1 -0
- package/dist/ComboBox.d.ts +4 -4
- package/dist/ComboBox.d.ts.map +1 -1
- package/dist/ComboBox.js +992 -0
- package/dist/ComboBox.js.map +1 -0
- package/dist/ComboBox.jsx +714 -0
- package/dist/ComboBox.jsx.map +1 -0
- package/dist/ContextualHelpTrigger.js +146 -0
- package/dist/ContextualHelpTrigger.js.map +1 -0
- package/dist/ContextualHelpTrigger.jsx +109 -0
- package/dist/ContextualHelpTrigger.jsx.map +1 -0
- package/dist/DateField.d.ts +3 -3
- package/dist/DateField.d.ts.map +1 -1
- package/dist/DateField.js +4 -0
- package/dist/DateField.jsx +4 -0
- package/dist/DateField2.js +499 -0
- package/dist/DateField2.js.map +1 -0
- package/dist/DateField2.jsx +317 -0
- package/dist/DateField2.jsx.map +1 -0
- package/dist/DatePicker.d.ts +4 -4
- package/dist/DatePicker.d.ts.map +1 -1
- package/dist/DatePicker.js +991 -0
- package/dist/DatePicker.js.map +1 -0
- package/dist/DatePicker.jsx +682 -0
- package/dist/DatePicker.jsx.map +1 -0
- package/dist/Dialog.d.ts.map +1 -1
- package/dist/Dialog.js +337 -0
- package/dist/Dialog.js.map +1 -0
- package/dist/Dialog.jsx +192 -0
- package/dist/Dialog.jsx.map +1 -0
- package/dist/Disclosure.d.ts.map +1 -1
- package/dist/Disclosure.js +328 -0
- package/dist/Disclosure.js.map +1 -0
- package/dist/Disclosure.jsx +230 -0
- package/dist/Disclosure.jsx.map +1 -0
- package/dist/DragAndDrop.d.ts.map +1 -1
- package/dist/DragAndDrop.js +176 -0
- package/dist/DragAndDrop.js.map +1 -0
- package/dist/DragAndDrop.jsx +160 -0
- package/dist/DragAndDrop.jsx.map +1 -0
- package/dist/DropZone.d.ts.map +1 -1
- package/dist/DropZone.js +189 -0
- package/dist/DropZone.js.map +1 -0
- package/dist/DropZone.jsx +144 -0
- package/dist/DropZone.jsx.map +1 -0
- package/dist/FieldError.js +66 -0
- package/dist/FieldError.js.map +1 -0
- package/dist/FieldError.jsx +47 -0
- package/dist/FieldError.jsx.map +1 -0
- package/dist/FileTrigger.js +79 -0
- package/dist/FileTrigger.js.map +1 -0
- package/dist/FileTrigger.jsx +49 -0
- package/dist/FileTrigger.jsx.map +1 -0
- package/dist/Focusable.js +70 -0
- package/dist/Focusable.js.map +1 -0
- package/dist/Focusable.jsx +69 -0
- package/dist/Focusable.jsx.map +1 -0
- package/dist/Form.js +99 -0
- package/dist/Form.js.map +1 -0
- package/dist/Form.jsx +73 -0
- package/dist/Form.jsx.map +1 -0
- package/dist/GridList.d.ts +34 -2
- package/dist/GridList.d.ts.map +1 -1
- package/dist/GridList.js +723 -0
- package/dist/GridList.js.map +1 -0
- package/dist/GridList.jsx +552 -0
- package/dist/GridList.jsx.map +1 -0
- package/dist/HiddenTimeInput.js +104 -0
- package/dist/HiddenTimeInput.js.map +1 -0
- package/dist/HiddenTimeInput.jsx +69 -0
- package/dist/HiddenTimeInput.jsx.map +1 -0
- package/dist/Icon.d.ts.map +1 -1
- package/dist/Icon.js +127 -0
- package/dist/Icon.js.map +1 -0
- package/dist/Icon.jsx +72 -0
- package/dist/Icon.jsx.map +1 -0
- package/dist/Keyboard.js +30 -0
- package/dist/Keyboard.js.map +1 -0
- package/dist/Keyboard.jsx +24 -0
- package/dist/Keyboard.jsx.map +1 -0
- package/dist/Landmark.js +134 -0
- package/dist/Landmark.js.map +1 -0
- package/dist/Landmark.jsx +118 -0
- package/dist/Landmark.jsx.map +1 -0
- package/dist/Link.d.ts.map +1 -1
- package/dist/Link.js +219 -0
- package/dist/Link.js.map +1 -0
- package/dist/Link.jsx +189 -0
- package/dist/Link.jsx.map +1 -0
- package/dist/ListBox.d.ts.map +1 -1
- package/dist/ListBox.js +670 -0
- package/dist/ListBox.js.map +1 -0
- package/dist/ListBox.jsx +508 -0
- package/dist/ListBox.jsx.map +1 -0
- package/dist/Menu.d.ts +27 -9
- package/dist/Menu.d.ts.map +1 -1
- package/dist/Menu.js +1254 -0
- package/dist/Menu.js.map +1 -0
- package/dist/Menu.jsx +1042 -0
- package/dist/Menu.jsx.map +1 -0
- package/dist/Meter.d.ts.map +1 -1
- package/dist/Meter.js +123 -0
- package/dist/Meter.js.map +1 -0
- package/dist/Meter.jsx +107 -0
- package/dist/Meter.jsx.map +1 -0
- package/dist/Modal.d.ts.map +1 -1
- package/dist/Modal.js +380 -0
- package/dist/Modal.js.map +1 -0
- package/dist/Modal.jsx +314 -0
- package/dist/Modal.jsx.map +1 -0
- package/dist/NumberField.d.ts +3 -3
- package/dist/NumberField.d.ts.map +1 -1
- package/dist/NumberField.js +573 -0
- package/dist/NumberField.js.map +1 -0
- package/dist/NumberField.jsx +443 -0
- package/dist/NumberField.jsx.map +1 -0
- package/dist/Popover.d.ts +10 -2
- package/dist/Popover.d.ts.map +1 -1
- package/dist/Popover.js +464 -0
- package/dist/Popover.js.map +1 -0
- package/dist/Popover.jsx +333 -0
- package/dist/Popover.jsx.map +1 -0
- package/dist/Pressable.js +69 -0
- package/dist/Pressable.js.map +1 -0
- package/dist/Pressable.jsx +68 -0
- package/dist/Pressable.jsx.map +1 -0
- package/dist/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar.js +130 -0
- package/dist/ProgressBar.js.map +1 -0
- package/dist/ProgressBar.jsx +114 -0
- package/dist/ProgressBar.jsx.map +1 -0
- package/dist/RadioGroup.d.ts +82 -4
- package/dist/RadioGroup.d.ts.map +1 -1
- package/dist/RadioGroup.js +931 -0
- package/dist/RadioGroup.js.map +1 -0
- package/dist/RadioGroup.jsx +681 -0
- package/dist/RadioGroup.jsx.map +1 -0
- package/dist/RangeCalendar.d.ts.map +1 -1
- package/dist/RangeCalendar.js +410 -0
- package/dist/RangeCalendar.js.map +1 -0
- package/dist/RangeCalendar.jsx +253 -0
- package/dist/RangeCalendar.jsx.map +1 -0
- package/dist/RouterProvider.js +118 -0
- package/dist/RouterProvider.js.map +1 -0
- package/dist/RouterProvider.jsx +112 -0
- package/dist/RouterProvider.jsx.map +1 -0
- package/dist/SearchField.d.ts +2 -2
- package/dist/SearchField.d.ts.map +1 -1
- package/dist/SearchField.js +643 -0
- package/dist/SearchField.js.map +1 -0
- package/dist/SearchField.jsx +526 -0
- package/dist/SearchField.jsx.map +1 -0
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js +1031 -0
- package/dist/Select.js.map +1 -0
- package/dist/Select.jsx +744 -0
- package/dist/Select.jsx.map +1 -0
- package/dist/SelectionIndicator.d.ts.map +1 -1
- package/dist/SelectionIndicator.js +86 -0
- package/dist/SelectionIndicator.js.map +1 -0
- package/dist/SelectionIndicator.jsx +50 -0
- package/dist/SelectionIndicator.jsx.map +1 -0
- package/dist/Separator.js +97 -0
- package/dist/Separator.js.map +1 -0
- package/dist/Separator.jsx +85 -0
- package/dist/Separator.jsx.map +1 -0
- package/dist/SharedElementTransition.d.ts.map +1 -1
- package/dist/SharedElementTransition.js +165 -0
- package/dist/SharedElementTransition.js.map +1 -0
- package/dist/SharedElementTransition.jsx +138 -0
- package/dist/SharedElementTransition.jsx.map +1 -0
- package/dist/Slider.d.ts +33 -1
- package/dist/Slider.d.ts.map +1 -1
- package/dist/Slider.js +515 -0
- package/dist/Slider.js.map +1 -0
- package/dist/Slider.jsx +403 -0
- package/dist/Slider.jsx.map +1 -0
- package/dist/StepList.js +198 -0
- package/dist/StepList.js.map +1 -0
- package/dist/StepList.jsx +141 -0
- package/dist/StepList.jsx.map +1 -0
- package/dist/Switch.d.ts +65 -2
- package/dist/Switch.d.ts.map +1 -1
- package/dist/Switch.js +534 -0
- package/dist/Switch.js.map +1 -0
- package/dist/Switch.jsx +393 -0
- package/dist/Switch.jsx.map +1 -0
- package/dist/Table.d.ts +48 -0
- package/dist/Table.d.ts.map +1 -1
- package/dist/Table.js +1759 -0
- package/dist/Table.js.map +1 -0
- package/dist/Table.jsx +1348 -0
- package/dist/Table.jsx.map +1 -0
- package/dist/Tabs.d.ts +0 -4
- package/dist/Tabs.d.ts.map +1 -1
- package/dist/Tabs.js +595 -0
- package/dist/Tabs.js.map +1 -0
- package/dist/Tabs.jsx +367 -0
- package/dist/Tabs.jsx.map +1 -0
- package/dist/TagGroup.d.ts.map +1 -1
- package/dist/TagGroup.js +378 -0
- package/dist/TagGroup.js.map +1 -0
- package/dist/TagGroup.jsx +270 -0
- package/dist/TagGroup.jsx.map +1 -0
- package/dist/Text.d.ts +18 -6
- package/dist/Text.d.ts.map +1 -1
- package/dist/Text.js +42 -0
- package/dist/Text.js.map +1 -0
- package/dist/Text.jsx +35 -0
- package/dist/Text.jsx.map +1 -0
- package/dist/TextField.d.ts +6 -6
- package/dist/TextField.d.ts.map +1 -1
- package/dist/TextField.js +436 -0
- package/dist/TextField.js.map +1 -0
- package/dist/TextField.jsx +403 -0
- package/dist/TextField.jsx.map +1 -0
- package/dist/TimeField.d.ts +3 -3
- package/dist/TimeField.d.ts.map +1 -1
- package/dist/TimeField.js +372 -0
- package/dist/TimeField.js.map +1 -0
- package/dist/TimeField.jsx +224 -0
- package/dist/TimeField.jsx.map +1 -0
- package/dist/Toast.d.ts +14 -0
- package/dist/Toast.d.ts.map +1 -1
- package/dist/Toast.js +551 -0
- package/dist/Toast.js.map +1 -0
- package/dist/Toast.jsx +361 -0
- package/dist/Toast.jsx.map +1 -0
- package/dist/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButton.js +123 -0
- package/dist/ToggleButton.js.map +1 -0
- package/dist/ToggleButton.jsx +88 -0
- package/dist/ToggleButton.jsx.map +1 -0
- package/dist/ToggleButtonGroup.d.ts.map +1 -1
- package/dist/ToggleButtonGroup.js +114 -0
- package/dist/ToggleButtonGroup.js.map +1 -0
- package/dist/ToggleButtonGroup.jsx +85 -0
- package/dist/ToggleButtonGroup.jsx.map +1 -0
- package/dist/Toolbar.js +112 -0
- package/dist/Toolbar.js.map +1 -0
- package/dist/Toolbar.jsx +92 -0
- package/dist/Toolbar.jsx.map +1 -0
- package/dist/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip.js +539 -0
- package/dist/Tooltip.js.map +1 -0
- package/dist/Tooltip.jsx +465 -0
- package/dist/Tooltip.jsx.map +1 -0
- package/dist/Tree.d.ts +14 -2
- package/dist/Tree.d.ts.map +1 -1
- package/dist/Tree.js +1424 -0
- package/dist/Tree.js.map +1 -0
- package/dist/Tree.jsx +1172 -0
- package/dist/Tree.jsx.map +1 -0
- package/dist/Virtualizer.d.ts +16 -2
- package/dist/Virtualizer.d.ts.map +1 -1
- package/dist/Virtualizer.js +2 -0
- package/dist/Virtualizer.jsx +2 -0
- package/dist/Virtualizer2.js +751 -0
- package/dist/Virtualizer2.js.map +1 -0
- package/dist/Virtualizer2.jsx +730 -0
- package/dist/Virtualizer2.jsx.map +1 -0
- package/dist/VirtualizerLayouts.d.ts +18 -0
- package/dist/VirtualizerLayouts.d.ts.map +1 -1
- package/dist/VisuallyHidden.js +42 -0
- package/dist/VisuallyHidden.js.map +1 -0
- package/dist/VisuallyHidden.jsx +35 -0
- package/dist/VisuallyHidden.jsx.map +1 -0
- package/dist/contexts.js +33 -0
- package/dist/contexts.js.map +1 -0
- package/dist/contexts.jsx +33 -0
- package/dist/contexts.jsx.map +1 -0
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +70 -23932
- package/dist/index.jsx +70 -18337
- package/dist/useDragAndDrop.js +2 -0
- package/dist/useDragAndDrop.jsx +2 -0
- package/dist/useDragAndDrop2.js +395 -0
- package/dist/useDragAndDrop2.js.map +1 -0
- package/dist/useDragAndDrop2.jsx +395 -0
- package/dist/useDragAndDrop2.jsx.map +1 -0
- package/dist/utils.d.ts +83 -11
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +285 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.jsx +277 -0
- package/dist/utils.jsx.map +1 -0
- package/dist/virtualizer/Layout.js +144 -0
- package/dist/virtualizer/Layout.js.map +1 -0
- package/dist/virtualizer/Layout.jsx +144 -0
- package/dist/virtualizer/Layout.jsx.map +1 -0
- package/package.json +401 -4
- package/src/Breadcrumbs.tsx +3 -1
- package/src/Button.tsx +22 -2
- package/src/Calendar.tsx +27 -10
- package/src/CalendarPicker.tsx +73 -0
- package/src/Checkbox.tsx +539 -3
- package/src/Collection.tsx +9 -3
- package/src/Color.tsx +42 -14
- package/src/ComboBox.tsx +50 -6
- package/src/DateField.tsx +20 -2
- package/src/DatePicker.tsx +57 -5
- package/src/Dialog.tsx +13 -5
- package/src/Disclosure.tsx +3 -1
- package/src/DragAndDrop.tsx +3 -1
- package/src/DropZone.tsx +3 -1
- package/src/GridList.tsx +125 -24
- package/src/Icon.tsx +3 -1
- package/src/Link.tsx +3 -1
- package/src/ListBox.tsx +31 -4
- package/src/Menu.tsx +252 -128
- package/src/Meter.tsx +3 -1
- package/src/Modal.tsx +100 -52
- package/src/NumberField.tsx +51 -8
- package/src/Popover.tsx +40 -10
- package/src/ProgressBar.tsx +3 -1
- package/src/RadioGroup.tsx +468 -4
- package/src/RangeCalendar.tsx +3 -1
- package/src/SearchField.tsx +27 -3
- package/src/Select.tsx +22 -7
- package/src/SelectionIndicator.tsx +3 -1
- package/src/SharedElementTransition.tsx +3 -1
- package/src/Slider.tsx +159 -13
- package/src/Switch.tsx +395 -2
- package/src/Table.tsx +409 -95
- package/src/Tabs.tsx +16 -45
- package/src/TagGroup.tsx +3 -1
- package/src/Text.tsx +31 -10
- package/src/TextField.tsx +43 -5
- package/src/TimeField.tsx +20 -2
- package/src/Toast.tsx +79 -14
- package/src/ToggleButton.tsx +3 -1
- package/src/ToggleButtonGroup.tsx +3 -1
- package/src/Tooltip.tsx +3 -1
- package/src/Tree.tsx +77 -9
- package/src/Virtualizer.tsx +180 -31
- package/src/VirtualizerLayouts.ts +45 -10
- package/src/index.ts +50 -0
- package/src/utils.tsx +243 -27
- package/dist/index.js.map +0 -1
- package/dist/index.jsx.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.jsx","names":["mergeProps"],"sources":["../src/Menu.tsx"],"sourcesContent":["/**\n * Menu component for solidaria-components\n *\n * A pre-wired headless menu that combines state + aria hooks.\n * Port of react-aria-components/src/Menu.tsx\n */\n\nimport {\n type JSX,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n onCleanup,\n splitProps,\n useContext,\n For,\n Show,\n} from \"solid-js\";\nimport {\n createMenu,\n createMenuItem,\n createMenuTrigger,\n createFocusRing,\n createHover,\n createButton,\n createInteractOutside,\n createScrollIntoViewOnFocus,\n mergeProps,\n FocusScope,\n type AriaMenuProps,\n type AriaMenuItemProps,\n type AriaMenuTriggerProps,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n createSelectionState,\n createMenuState,\n createMenuTriggerState,\n type MenuState,\n type MenuStateProps,\n type OverlayTriggerState,\n type Key,\n type DropTarget,\n type SelectionMode,\n type SelectionStateProps,\n} from \"@proyecto-viviana/solid-stately\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\nimport { SharedElementTransition } from \"./SharedElementTransition\";\nimport { type DragAndDropHooks } from \"./useDragAndDrop\";\nimport {\n CollectionRendererContext,\n Section,\n Header,\n Group,\n type CollectionEntry,\n type CollectionRendererContextValue,\n type SectionProps,\n useCollectionRenderer,\n flattenCollectionEntries,\n isCollectionSection,\n} from \"./Collection\";\nimport { useVirtualizerContext } from \"./Virtualizer\";\nimport {\n getNormalizedDropTargetKey,\n mergePersistedKeysIntoVirtualRange,\n useDndPersistedKeys,\n useRenderDropIndicator,\n} from \"./DragAndDrop\";\nimport { PopoverTriggerContext } from \"./contexts\";\n\nexport interface MenuRenderProps {\n /** Whether the menu is focused. */\n isFocused: boolean;\n /** Whether the menu is open. */\n isOpen: boolean;\n /** Whether the menu has no items. */\n isEmpty: boolean;\n}\n\nexport interface MenuProps<T>\n extends\n Omit<AriaMenuProps<T>, \"children\">,\n SlotProps,\n Pick<\n MenuStateProps<T>,\n | \"selectionMode\"\n | \"selectionBehavior\"\n | \"disallowEmptySelection\"\n | \"selectedKeys\"\n | \"defaultSelectedKeys\"\n | \"onSelectionChange\"\n | \"allowDuplicateSelectionEvents\"\n > {\n /** The items to render in the menu. */\n items?: CollectionEntry<T>[];\n /** Function to get the key from an item. */\n getKey?: (item: T) => Key;\n /** Function to get the text value from an item. */\n getTextValue?: (item: T) => string;\n /** Function to check if an item is disabled. */\n getDisabled?: (item: T) => boolean;\n /** Keys of disabled items. */\n disabledKeys?: Iterable<Key>;\n /** Whether disabled items can still receive focus. */\n disabledBehavior?: \"selection\" | \"all\";\n /** Handler called when an item is activated, with the activated item's value. */\n onAction?: (key: Key, value: T) => void;\n /** Handler called when the menu should close. */\n onClose?: () => void;\n /** The children of the component. A function may be provided to render each item. */\n children?: JSX.Element | ((item: T) => JSX.Element);\n /** Internal lazy static children accessor used when collection children need menu context. */\n staticChildren?: () => JSX.Element | undefined;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<MenuRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<MenuRenderProps>;\n /** Content to display when the menu has no items. */\n renderEmptyState?: () => JSX.Element;\n /** Whether the menu should close when an item is selected. */\n shouldCloseOnSelect?: boolean;\n /** Ref for the menu element. */\n ref?: RefLike<HTMLDivElement>;\n /** Custom renderer for the menu element. */\n render?: (props: JSX.HTMLAttributes<HTMLDivElement>, renderProps: MenuRenderProps) => JSX.Element;\n /** Drag and drop hooks from `useDragAndDrop`. */\n dragAndDropHooks?: DragAndDropHooks<T>;\n}\n\nexport interface MenuItemRenderProps {\n /** Whether the item is selected. */\n isSelected: boolean;\n /** The parent menu selection mode. */\n selectionMode: SelectionMode;\n /** Whether the item is focused. */\n isFocused: boolean;\n /** Whether the item has keyboard focus. */\n isFocusVisible: boolean;\n /** Whether the item is pressed. */\n isPressed: boolean;\n /** Whether the item is hovered. */\n isHovered: boolean;\n /** Whether the item is disabled. */\n isDisabled: boolean;\n /** Whether the item opens a submenu. */\n hasSubmenu: boolean;\n /** Whether the submenu is currently open. */\n isOpen: boolean;\n /**\n * Internal: props (carrying the slot `id` the item's `aria-describedby`\n * references) for the item's description text element. Threaded to the styled\n * `Text slot=\"description\"` so it receives the id — mirrors upstream's\n * `TextContext` description-slot delegation.\n */\n descriptionProps?: JSX.HTMLAttributes<HTMLElement>;\n /**\n * Internal: props (id + `aria-hidden`) for the item's keyboard-shortcut\n * element, threaded to the styled `Keyboard`.\n */\n keyboardShortcutProps?: JSX.HTMLAttributes<HTMLElement>;\n}\n\nexport interface MenuItemProps<T>\n extends Omit<AriaMenuItemProps, \"children\" | \"key\" | \"id\">, SlotProps {\n /** The unique key for the item. */\n id: Key;\n /** The item value. */\n item?: T;\n /** The children of the item. A function may be provided to receive render props. */\n children?: RenderChildren<MenuItemRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<MenuItemRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<MenuItemRenderProps>;\n /** The text value of the item (for typeahead). */\n textValue?: string;\n /** Handler called when the item is activated. */\n onAction?: () => void;\n /** A URL to link to. Turns the menu item into a link. */\n href?: string;\n /** The target window for the link. */\n target?: string;\n /** The relationship between the linked resource and the current page. */\n rel?: string;\n /** Causes the browser to download the linked URL. */\n download?: boolean | string;\n /** Handler called when hover starts. */\n onHoverStart?: () => void;\n /** Handler called when hover ends. */\n onHoverEnd?: () => void;\n /** Handler called when hover state changes. */\n onHoverChange?: (isHovered: boolean) => void;\n /** Ref for the menu item element (a `<div>`, or an `<a>` for link items). */\n ref?: RefLike<HTMLElement>;\n /** Custom renderer for the menu item element. */\n render?: (\n props: JSX.HTMLAttributes<HTMLElement>,\n renderProps: MenuItemRenderProps,\n ) => JSX.Element;\n}\n\nexport interface MenuTriggerRenderProps {\n /** Whether the menu is open. */\n isOpen: boolean;\n /** Whether the trigger is focused. */\n isFocused: boolean;\n /** Whether the trigger has keyboard focus. */\n isFocusVisible: boolean;\n /** Whether the trigger is pressed. */\n isPressed: boolean;\n /** Whether the trigger is hovered. */\n isHovered: boolean;\n /** Whether the trigger is disabled. */\n isDisabled: boolean;\n}\n\nexport interface MenuTriggerProps extends Omit<AriaMenuTriggerProps, \"children\">, SlotProps {\n /** The children of the trigger (typically a Button and Menu). */\n children: JSX.Element;\n /** Whether the menu trigger is disabled. */\n isDisabled?: boolean;\n /** Whether the menu is open by default. */\n defaultOpen?: boolean;\n /** Whether the menu is open (controlled). */\n isOpen?: boolean;\n /** Handler called when the open state changes. */\n onOpenChange?: (isOpen: boolean) => void;\n}\n\nexport interface SubmenuTriggerProps extends SlotProps {\n /** The trigger item followed by submenu content. */\n children: JSX.Element;\n /** Delay before opening the submenu on hover. */\n delay?: number;\n /** Whether the submenu is open (controlled). */\n isOpen?: boolean;\n /** Whether the submenu is open by default. */\n defaultOpen?: boolean;\n /** Handler called when the submenu open state changes. */\n onOpenChange?: (isOpen: boolean) => void;\n}\n\ninterface MenuContextValue<T> {\n state: MenuState<T>;\n isDisabled: () => boolean;\n dragAndDropHooks?: DragAndDropHooks<T>;\n dragState?: unknown;\n dropState?: unknown;\n}\n\ntype MenuSelectionEvent = { shiftKey?: boolean; ctrlKey?: boolean; metaKey?: boolean };\n\ninterface MenuTriggerContextValue {\n state: OverlayTriggerState;\n triggerProps: JSX.HTMLAttributes<HTMLElement>;\n menuProps: JSX.HTMLAttributes<HTMLElement>;\n isPressed?: () => boolean;\n onPressStart?: (e: { pointerType?: string }) => void;\n}\n\ninterface MenuItemContextValue {\n props?: () => JSX.HTMLAttributes<HTMLElement>;\n closeOnSelect?: boolean;\n onAction?: () => void;\n setItemRef?: (el: HTMLElement | null) => void;\n}\n\ninterface StaticMenuCollectionItem {\n id: Key;\n textValue?: string;\n isDisabled?: boolean;\n}\n\ninterface StaticMenuCollectionContextValue {\n registerItem(item: StaticMenuCollectionItem): void;\n unregisterItem(id: Key): void;\n}\n\ninterface MenuSectionSelectionContextValue {\n selectionMode: () => SelectionMode;\n isSelected(key: Key): boolean;\n isDisabled(key: Key): boolean;\n select(key: Key, event?: MenuSelectionEvent): void;\n shouldCloseOnSelect(): boolean | undefined;\n}\n\ninterface MenuSectionSelectionRegistryContextValue {\n registerItem(key: Key, selection: MenuSectionSelectionContextValue): void;\n unregisterItem(key: Key, selection: MenuSectionSelectionContextValue): void;\n selectItem(key: Key, event?: MenuSelectionEvent): boolean;\n}\n\ninterface MenuItemCloseRegistryContextValue {\n registerItem(key: Key, shouldCloseOnSelect: () => boolean | undefined): void;\n unregisterItem(key: Key, shouldCloseOnSelect: () => boolean | undefined): void;\n shouldCloseOnSelect(key: Key | null): boolean | undefined;\n}\n\nexport const MenuContext = createContext<MenuContextValue<unknown> | null>(null);\nexport const MenuStateContext = createContext<MenuState<unknown> | null>(null);\nexport const MenuTriggerContext = createContext<MenuTriggerContextValue | null>(null);\nexport const RootMenuTriggerStateContext = createContext<OverlayTriggerState | null>(null);\nconst MenuItemContext = createContext<MenuItemContextValue | null>(null);\nconst StaticMenuCollectionContext = createContext<StaticMenuCollectionContextValue | null>(null);\nconst MenuSectionSelectionContext = createContext<MenuSectionSelectionContextValue | null>(null);\nconst MenuSectionSelectionRegistryContext =\n createContext<MenuSectionSelectionRegistryContextValue | null>(null);\nconst MenuItemCloseRegistryContext = createContext<MenuItemCloseRegistryContextValue | null>(null);\n\ntype RefLike<T> = ((el: T) => void) | { current?: T | null } | undefined;\n\nfunction assignRef<T>(ref: RefLike<T>, el: T): void {\n if (!ref) return;\n if (typeof ref === \"function\") ref(el);\n else ref.current = el;\n}\n\nfunction resolveBoolean(value: unknown): boolean {\n return typeof value === \"function\" ? Boolean((value as () => unknown)()) : Boolean(value);\n}\n\n/**\n * A menu trigger wraps a button and menu, handling the open/close state.\n */\nexport function MenuTrigger(props: MenuTriggerProps): JSX.Element {\n const [local, stateProps] = splitProps(props, [\"slot\"]);\n\n const state = createMenuTriggerState({\n get isOpen() {\n return stateProps.isOpen;\n },\n get defaultOpen() {\n return stateProps.defaultOpen;\n },\n get onOpenChange() {\n return stateProps.onOpenChange;\n },\n });\n\n const [isMousePressed, setMousePressed] = createSignal(false);\n const onPressStart = (e: { pointerType?: string }) => {\n if (e.pointerType !== \"mouse\" || typeof document === \"undefined\") {\n return;\n }\n\n setMousePressed(true);\n document.addEventListener(\n \"pointerup\",\n () => {\n setMousePressed(false);\n },\n { once: true, capture: true },\n );\n };\n\n const menuTrigger = createMenuTrigger(\n {\n get isDisabled() {\n return stateProps.isDisabled;\n },\n },\n state,\n );\n\n return (\n <RootMenuTriggerStateContext.Provider value={state}>\n <MenuTriggerContext.Provider\n value={{\n state,\n get triggerProps() {\n return menuTrigger.menuTriggerProps;\n },\n get menuProps() {\n return menuTrigger.menuProps;\n },\n isPressed: isMousePressed,\n onPressStart,\n }}\n >\n {props.children}\n </MenuTriggerContext.Provider>\n </RootMenuTriggerStateContext.Provider>\n );\n}\n\nexport function SubmenuTrigger(props: SubmenuTriggerProps): JSX.Element {\n const children = () =>\n (Array.isArray(props.children) ? props.children : [props.children]) as JSX.Element[];\n const trigger = () => children()[0];\n const content = () => children()[1];\n const parentMenuItemContext = useContext(MenuItemContext);\n const state = createMenuTriggerState({\n get isOpen() {\n return props.isOpen;\n },\n get defaultOpen() {\n return props.defaultOpen;\n },\n get onOpenChange() {\n return props.onOpenChange;\n },\n });\n\n let triggerRef: HTMLElement | null = null;\n const triggerId = createUniqueId();\n const menuId = createUniqueId();\n let hoverTimeout: number | undefined;\n let hasPointerHover = false;\n const delay = () => props.delay ?? 200;\n\n const clearHoverTimeout = () => {\n if (hoverTimeout != null) {\n window.clearTimeout(hoverTimeout);\n hoverTimeout = undefined;\n }\n };\n\n const openSubmenu = () => {\n clearHoverTimeout();\n state.open();\n };\n\n const queueOpenSubmenu = () => {\n clearHoverTimeout();\n const open = () => state.open();\n if (typeof queueMicrotask === \"function\") {\n queueMicrotask(open);\n } else {\n Promise.resolve().then(open);\n }\n };\n\n const scheduleOpen = () => {\n clearHoverTimeout();\n hoverTimeout = window.setTimeout(() => {\n hoverTimeout = undefined;\n state.open();\n }, delay());\n };\n\n const schedulePointerOpen = (event: PointerEvent) => {\n hasPointerHover = true;\n if (event.isTrusted === false) {\n queueOpenSubmenu();\n return;\n }\n\n scheduleOpen();\n };\n\n const openFromMouseHover = () => {\n if (state.isOpen()) {\n return;\n }\n\n if (hasPointerHover) {\n scheduleOpen();\n } else {\n queueOpenSubmenu();\n }\n };\n\n onCleanup(clearHoverTimeout);\n\n const menuTriggerContext = createMemo<MenuTriggerContextValue>(() => ({\n state,\n triggerProps: {},\n menuProps: {\n id: menuId,\n \"aria-labelledby\": triggerId,\n },\n }));\n\n const popoverTriggerContext = createMemo(() => ({\n state: {\n isOpen: () => state.isOpen(),\n open: () => state.open(),\n close: () => state.close(),\n toggle: () => state.toggle(),\n },\n triggerRef: () => triggerRef,\n setTriggerRef: (el: HTMLElement | null) => {\n triggerRef = el;\n },\n triggerId,\n trigger: \"SubmenuTrigger\",\n }));\n\n const itemContext = createMemo<MenuItemContextValue>(() => ({\n closeOnSelect: false,\n onAction: () => openSubmenu(),\n setItemRef: (el) => {\n triggerRef = el;\n },\n props: () => ({\n id: triggerId,\n \"aria-haspopup\": \"menu\",\n get \"aria-expanded\"() {\n return state.isOpen() || undefined;\n },\n get \"aria-controls\"() {\n return state.isOpen() ? menuId : undefined;\n },\n onPointerEnter: (event: PointerEvent) => {\n if (event.pointerType === \"touch\") return;\n schedulePointerOpen(event);\n },\n onPointerOver: (event: PointerEvent) => {\n if (event.pointerType === \"touch\") return;\n schedulePointerOpen(event);\n },\n onMouseEnter: openFromMouseHover,\n onMouseOver: openFromMouseHover,\n onKeyDown: (event: KeyboardEvent) => {\n if (event.key === \"ArrowRight\" || event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openSubmenu();\n } else if (event.key === \"ArrowLeft\" && state.isOpen()) {\n event.preventDefault();\n state.close();\n }\n },\n }),\n }));\n\n return (\n <PopoverTriggerContext.Provider value={popoverTriggerContext()}>\n <MenuTriggerContext.Provider value={menuTriggerContext()}>\n <MenuItemContext.Provider value={{ ...parentMenuItemContext, ...itemContext() }}>\n {trigger()}\n </MenuItemContext.Provider>\n {content()}\n </MenuTriggerContext.Provider>\n </PopoverTriggerContext.Provider>\n );\n}\n\n/**\n * A button that opens a menu.\n */\nexport interface MenuButtonProps\n extends SlotProps, Omit<JSX.HTMLAttributes<HTMLButtonElement>, \"class\" | \"style\" | \"children\"> {\n /** The children of the button. A function may be provided to receive render props. */\n children?: RenderChildren<MenuTriggerRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<MenuTriggerRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<MenuTriggerRenderProps>;\n /** Whether the button is disabled. */\n isDisabled?: boolean;\n}\n\nexport interface MenuSectionProps\n extends\n SectionProps,\n Pick<\n SelectionStateProps,\n | \"selectionMode\"\n | \"selectionBehavior\"\n | \"disallowEmptySelection\"\n | \"selectedKeys\"\n | \"defaultSelectedKeys\"\n | \"onSelectionChange\"\n | \"disabledKeys\"\n | \"disabledBehavior\"\n | \"allowDuplicateSelectionEvents\"\n > {\n /** Whether menu items in this section should close the menu when selected. */\n shouldCloseOnSelect?: boolean;\n}\n\nexport function MenuButton(props: MenuButtonProps): JSX.Element {\n const [local, domProps] = splitProps(props, [\"class\", \"style\", \"slot\", \"isDisabled\", \"children\"]);\n\n const context = useContext(MenuTriggerContext);\n if (!context) {\n throw new Error(\"MenuButton must be used within a MenuTrigger\");\n }\n const { state } = context;\n\n const buttonAria = createButton({\n get isDisabled() {\n return local.isDisabled;\n },\n onPressStart(e) {\n context.onPressStart?.(e);\n },\n onPress() {\n state.toggle();\n },\n });\n\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n\n const { isHovered, hoverProps } = createHover({\n get isDisabled() {\n return local.isDisabled;\n },\n });\n\n const renderValues = createMemo<MenuTriggerRenderProps>(() => ({\n isOpen: state.isOpen(),\n isFocused: isFocused(),\n isFocusVisible: isFocusVisible(),\n isPressed: context.isPressed?.() || buttonAria.isPressed(),\n isHovered: isHovered(),\n isDisabled: !!local.isDisabled,\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-MenuButton\",\n },\n renderValues,\n );\n\n const resolvedTriggerProps = () => context.triggerProps as Record<string, unknown>;\n const cleanTriggerProps = () => {\n const {\n ref: _ref1,\n \"aria-haspopup\": _ariaHasPopup,\n \"aria-expanded\": _ariaExpanded,\n \"aria-controls\": _ariaControls,\n \"aria-disabled\": _ariaDisabled,\n ...rest\n } = resolvedTriggerProps();\n return rest;\n };\n const cleanButtonProps = () => {\n const { ref: _ref2, ...rest } = buttonAria.buttonProps as Record<string, unknown>;\n return rest;\n };\n const cleanFocusProps = () => {\n const { ref: _ref3, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n const cleanHoverProps = () => {\n const { ref: _ref4, ...rest } = hoverProps as Record<string, unknown>;\n return rest;\n };\n\n return (\n <button\n {...domProps}\n {...cleanTriggerProps()}\n {...cleanButtonProps()}\n {...cleanFocusProps()}\n {...cleanHoverProps()}\n type=\"button\"\n class={renderProps.class()}\n style={renderProps.style()}\n aria-haspopup={resolvedTriggerProps()[\"aria-haspopup\"] as \"menu\" | \"listbox\" | undefined}\n aria-expanded={resolvedTriggerProps()[\"aria-expanded\"] as boolean | undefined}\n aria-controls={resolvedTriggerProps()[\"aria-controls\"] as string | undefined}\n aria-disabled={resolvedTriggerProps()[\"aria-disabled\"] as boolean | undefined}\n data-open={state.isOpen() || undefined}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n data-pressed={context.isPressed?.() || buttonAria.isPressed() || undefined}\n data-hovered={isHovered() || undefined}\n data-disabled={local.isDisabled || undefined}\n >\n {renderProps.renderChildren()}\n </button>\n );\n}\n\n/**\n * A menu displays a list of actions or options for the user to choose from.\n */\nexport function Menu<T>(props: MenuProps<T>): JSX.Element {\n const [local, stateProps, ariaProps] = splitProps(\n props,\n [\"children\", \"class\", \"style\", \"render\", \"slot\", \"renderEmptyState\", \"ref\", \"staticChildren\"],\n [\n \"items\",\n \"getKey\",\n \"getTextValue\",\n \"getDisabled\",\n \"disabledKeys\",\n \"disabledBehavior\",\n \"selectionMode\",\n \"selectionBehavior\",\n \"disallowEmptySelection\",\n \"selectedKeys\",\n \"defaultSelectedKeys\",\n \"onSelectionChange\",\n \"allowDuplicateSelectionEvents\",\n \"onAction\",\n \"onClose\",\n \"shouldCloseOnSelect\",\n \"dragAndDropHooks\",\n ],\n );\n\n const triggerContext = useContext(MenuTriggerContext);\n\n const [menuRef, setMenuRef] = createSignal<HTMLDivElement | null>(null);\n const [staticItems, setStaticItems] = createSignal<StaticMenuCollectionItem[]>([]);\n const staticItemMap = new Map<Key, StaticMenuCollectionItem>();\n const sectionSelectionMap = new Map<Key, MenuSectionSelectionContextValue>();\n const itemCloseMap = new Map<Key, () => boolean | undefined>();\n const usesStaticChildren = () => local.staticChildren != null || stateProps.items == null;\n\n const syncStaticItems = () => {\n setStaticItems(Array.from(staticItemMap.values()));\n };\n\n const staticCollectionContext: StaticMenuCollectionContextValue = {\n registerItem(item) {\n const previous = staticItemMap.get(item.id);\n if (\n previous &&\n previous.textValue === item.textValue &&\n previous.isDisabled === item.isDisabled\n ) {\n return;\n }\n\n staticItemMap.set(item.id, item);\n syncStaticItems();\n },\n unregisterItem(id) {\n if (staticItemMap.delete(id)) {\n syncStaticItems();\n }\n },\n };\n const sectionSelectionRegistry: MenuSectionSelectionRegistryContextValue = {\n registerItem(key, selection) {\n sectionSelectionMap.set(key, selection);\n },\n unregisterItem(key, selection) {\n if (sectionSelectionMap.get(key) === selection) {\n sectionSelectionMap.delete(key);\n }\n },\n selectItem(key, event) {\n const selection = sectionSelectionMap.get(key);\n if (!selection || selection.selectionMode() === \"none\") {\n return false;\n }\n\n selection.select(key, event);\n return true;\n },\n };\n const itemCloseRegistry: MenuItemCloseRegistryContextValue = {\n registerItem(key, shouldCloseOnSelect) {\n itemCloseMap.set(key, shouldCloseOnSelect);\n },\n unregisterItem(key, shouldCloseOnSelect) {\n if (itemCloseMap.get(key) === shouldCloseOnSelect) {\n itemCloseMap.delete(key);\n }\n },\n shouldCloseOnSelect(key) {\n return key == null ? undefined : itemCloseMap.get(key)?.();\n },\n };\n const handleAction = (key: Key, value?: T) => {\n sectionSelectionRegistry.selectItem(key);\n // Forward the activated item's value, which `createMenuState` sets from the\n // collection node. For dynamic collections this is the user's data item.\n // Static children are modeled with an internal item descriptor that upstream\n // RAC does not expose as `value` (MenuItem only carries `value` for dynamic\n // collections), so it is suppressed there to match.\n stateProps.onAction?.(key, (usesStaticChildren() ? undefined : value) as T);\n };\n\n const flatItems = createMemo<T[]>(() => {\n return flattenCollectionEntries(stateProps.items ?? []);\n });\n\n const hasSections = createMemo(() =>\n (stateProps.items ?? []).some((item) => isCollectionSection(item)),\n );\n\n const state = createMenuState<T>({\n get items() {\n return usesStaticChildren() ? (staticItems() as T[]) : flatItems();\n },\n get getKey() {\n return usesStaticChildren()\n ? (item: T) => (item as StaticMenuCollectionItem).id\n : stateProps.getKey;\n },\n get getTextValue() {\n return usesStaticChildren()\n ? (item: T) =>\n (item as StaticMenuCollectionItem).textValue ??\n String((item as StaticMenuCollectionItem).id)\n : stateProps.getTextValue;\n },\n get getDisabled() {\n return usesStaticChildren()\n ? (item: T) => Boolean((item as StaticMenuCollectionItem).isDisabled)\n : stateProps.getDisabled;\n },\n get disabledKeys() {\n return stateProps.disabledKeys;\n },\n get disabledBehavior() {\n return stateProps.disabledBehavior;\n },\n get selectionMode() {\n return stateProps.selectionMode;\n },\n get selectionBehavior() {\n return stateProps.selectionBehavior;\n },\n get disallowEmptySelection() {\n return stateProps.disallowEmptySelection;\n },\n get selectedKeys() {\n return stateProps.selectedKeys;\n },\n get defaultSelectedKeys() {\n return stateProps.defaultSelectedKeys;\n },\n get onSelectionChange() {\n return stateProps.onSelectionChange;\n },\n get allowDuplicateSelectionEvents() {\n return stateProps.allowDuplicateSelectionEvents;\n },\n get onAction() {\n return handleAction;\n },\n get onClose() {\n return stateProps.onClose ?? (() => triggerContext?.state.close());\n },\n });\n\n const resolveDisabled = (): boolean => {\n const disabled = ariaProps.isDisabled;\n if (typeof disabled === \"function\") {\n return (disabled as () => boolean)();\n }\n return !!disabled;\n };\n\n const { menuProps, labelProps } = createMenu(\n {\n get isDisabled() {\n return resolveDisabled();\n },\n get label() {\n return ariaProps.label;\n },\n get onAction() {\n return handleAction;\n },\n get onClose() {\n return stateProps.onClose ?? (() => triggerContext?.state.close());\n },\n get shouldCloseOnSelect() {\n return (\n itemCloseRegistry.shouldCloseOnSelect(state.focusedKey()) ??\n stateProps.shouldCloseOnSelect\n );\n },\n get \"aria-label\"() {\n return ariaProps[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return ariaProps[\"aria-labelledby\"];\n },\n get \"aria-describedby\"() {\n return ariaProps[\"aria-describedby\"];\n },\n },\n state,\n );\n\n // Reveal the activedescendant-focused item on keyboard navigation. The menu\n // keeps real DOM focus on itself, so the browser won't natively scroll an\n // off-screen focused item into view the way roving tabindex would.\n createScrollIntoViewOnFocus({\n focusedKey: () => state.focusedKey(),\n isActive: () => state.isFocused(),\n ref: () => menuRef(),\n });\n\n const { isFocused, focusProps } = createFocusRing();\n\n createInteractOutside({\n ref: () => menuRef(),\n onInteractOutside: () => {\n if (triggerContext?.state.isOpen()) {\n triggerContext.state.close();\n }\n },\n get isDisabled() {\n return !triggerContext?.state.isOpen();\n },\n });\n\n const renderValues = createMemo<MenuRenderProps>(() => ({\n isFocused: state.isFocused() || isFocused(),\n isOpen: triggerContext?.state.isOpen() ?? true,\n isEmpty: state.collection().size === 0,\n }));\n\n const renderProps = useRenderProps(\n {\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-Menu\",\n },\n renderValues,\n );\n\n const cleanMenuProps = () => {\n const { ref: _ref1, ...rest } = menuProps as Record<string, unknown>;\n return rest;\n };\n const cleanTriggerMenuProps = () => {\n if (!triggerContext) return {};\n const { ref: _ref2, ...rest } = triggerContext.menuProps as Record<string, unknown>;\n return rest;\n };\n const cleanFocusProps = () => {\n const { ref: _ref3, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n const domProps = createMemo(() =>\n filterDOMProps(ariaProps as Record<string, unknown>, { global: true }),\n );\n const cleanLabelProps = () => {\n const { ref: _ref4, ...rest } = labelProps as Record<string, unknown>;\n return rest;\n };\n const setResolvedMenuRef = (el: HTMLDivElement): void => {\n setMenuRef(el);\n assignRef(local.ref, el);\n };\n\n // If inside a MenuTrigger, only render when open\n // If standalone (no trigger context), always render\n const shouldRender = () => (triggerContext ? triggerContext.state.isOpen() : true);\n const parentCollectionRenderer = useCollectionRenderer<unknown>();\n const virtualizer = useVirtualizerContext();\n const getItemNodes = createMemo(() =>\n Array.from(state.collection()).filter((node) => node.type === \"item\"),\n );\n const getDropTargetByIndex = (\n index: number,\n position: \"before\" | \"after\" | \"on\",\n ): DropTarget | null => {\n const node = getItemNodes()[index];\n if (!node) return null;\n return { type: \"item\", key: node.key, dropPosition: position };\n };\n const hasDroppableDnd = createMemo(() => {\n const hooks = stateProps.dragAndDropHooks;\n return Boolean(\n hooks?.useDroppableCollectionState &&\n hooks.useDroppableCollection &&\n (hooks.dropTargetDelegate ||\n parentCollectionRenderer?.dropTargetDelegate ||\n hooks.ListDropTargetDelegate),\n );\n });\n const hasDraggableDnd = createMemo(() => {\n const hooks = stateProps.dragAndDropHooks;\n return Boolean(hooks?.useDraggableCollectionState && hooks.useDraggableCollection);\n });\n const dragState = createMemo(() => {\n if (!hasDraggableDnd()) return undefined;\n return stateProps.dragAndDropHooks?.useDraggableCollectionState?.({\n items: flatItems(),\n });\n });\n const dropState = createMemo(() => {\n if (!hasDroppableDnd()) return undefined;\n return stateProps.dragAndDropHooks?.useDroppableCollectionState?.({});\n });\n const persistedKeys = useDndPersistedKeys(\n { focusedKey: state.focusedKey },\n stateProps.dragAndDropHooks,\n dropState(),\n state.collection(),\n );\n const virtualRange = createMemo(() => {\n if (!virtualizer || !parentCollectionRenderer?.isVirtualized || hasSections()) return null;\n const dynamicItems = stateProps.items ?? [];\n const baseRange = virtualizer.getVisibleRange(dynamicItems.length);\n const itemNodes = getItemNodes();\n const persistedIndexes = Array.from(persistedKeys())\n .map((key) => itemNodes.findIndex((node) => node.key === key))\n .filter((index) => index >= 0);\n const dropTarget = dropState()?.target;\n const normalizedDropKey = getNormalizedDropTargetKey(dropTarget, state.collection());\n const focusedKey = state.focusedKey();\n const focusedIndex =\n focusedKey != null ? itemNodes.findIndex((node) => node.key === focusedKey) : -1;\n const forceIncludeIndexes = [\n dropTarget?.type === \"item\" ? itemNodes.findIndex((node) => node.key === dropTarget.key) : -1,\n normalizedDropKey != null\n ? itemNodes.findIndex((node) => node.key === normalizedDropKey)\n : -1,\n dropTarget?.type === \"item\" ? -1 : focusedIndex,\n ].filter((index) => index >= 0);\n return mergePersistedKeysIntoVirtualRange(\n baseRange,\n persistedIndexes,\n dynamicItems.length,\n virtualizer,\n 80,\n {\n forceIncludeIndexes,\n forceIncludeMaxSpan: 320,\n },\n );\n });\n const visibleItems = createMemo(() => {\n const range = virtualRange();\n const items = stateProps.items ?? [];\n if (!range) return items;\n return items.slice(range.start, range.end);\n });\n createEffect(() => {\n if (!hasDraggableDnd()) return;\n const hooks = stateProps.dragAndDropHooks;\n const activeDragState = dragState();\n if (!hooks?.useDraggableCollection || !activeDragState) return;\n hooks.useDraggableCollection({}, activeDragState, () => menuRef());\n });\n const droppableCollection = createMemo(() => {\n if (!hasDroppableDnd()) return undefined;\n const hooks = stateProps.dragAndDropHooks;\n const activeDropState = dropState();\n if (!hooks?.useDroppableCollection || !activeDropState) return undefined;\n const resolveDirection = (): \"ltr\" | \"rtl\" => {\n const menuEl = menuRef();\n if (\n menuEl &&\n typeof window !== \"undefined\" &&\n typeof window.getComputedStyle === \"function\"\n ) {\n const dir = window.getComputedStyle(menuEl).direction;\n if (dir === \"rtl\") return \"rtl\";\n }\n return typeof document !== \"undefined\" && document.dir === \"rtl\" ? \"rtl\" : \"ltr\";\n };\n const dropTargetDelegate =\n hooks.dropTargetDelegate ??\n parentCollectionRenderer?.dropTargetDelegate ??\n (hooks.ListDropTargetDelegate\n ? new hooks.ListDropTargetDelegate(\n () => state.collection(),\n () => menuRef(),\n { layout: \"stack\", orientation: \"vertical\", direction: resolveDirection() },\n )\n : undefined);\n if (!dropTargetDelegate) return undefined;\n return hooks.useDroppableCollection(\n {\n dropTargetDelegate,\n keyboardDelegate: {\n getFirstKey: () => state.collection().getFirstKey(),\n getLastKey: () => state.collection().getLastKey(),\n getKeyBelow: (key) => state.collection().getKeyAfter(key),\n getKeyAbove: (key) => state.collection().getKeyBefore(key),\n getKeyPageBelow: (key) => state.collection().getKeyAfter(key),\n getKeyPageAbove: (key) => state.collection().getKeyBefore(key),\n },\n },\n activeDropState,\n () => menuRef(),\n );\n });\n const isRootDropTarget = createMemo(() => {\n return Boolean(dropState()?.target?.type === \"root\");\n });\n const dndRenderDropIndicator = createMemo(() =>\n useRenderDropIndicator(stateProps.dragAndDropHooks, dropState()),\n );\n const dndDropIndicator = (index: number, position: \"before\" | \"after\" | \"on\") => {\n const target = getDropTargetByIndex(index, position);\n if (!target || target.type !== \"item\") return undefined;\n return dndRenderDropIndicator()?.(target);\n };\n const sectionedRenderEntries = createMemo(() => {\n let globalIndex = 0;\n return (stateProps.items ?? []).map((entry) => {\n if (isCollectionSection(entry)) {\n const sectionItems = entry.items.map((item) => ({\n item,\n index: globalIndex++,\n }));\n return {\n type: \"section\" as const,\n section: entry,\n items: sectionItems,\n };\n }\n const indexedItem = {\n item: entry as T,\n index: globalIndex++,\n };\n return {\n type: \"item\" as const,\n item: indexedItem,\n };\n });\n });\n const renderDynamicItem = (item: T) =>\n typeof local.children === \"function\" ? local.children(item) : undefined;\n const resolveStaticChild = (child: unknown): JSX.Element | undefined => {\n return typeof child === \"function\"\n ? (child as () => JSX.Element | undefined)()\n : (child as JSX.Element | undefined);\n };\n const renderStaticChildren = () => {\n const staticChildren = (local.staticChildren?.() ?? local.children) as unknown;\n if (Array.isArray(staticChildren)) {\n return staticChildren.map(resolveStaticChild);\n }\n return resolveStaticChild(staticChildren);\n };\n const collectionRenderer = createMemo<CollectionRendererContextValue<unknown>>(() => ({\n ...parentCollectionRenderer,\n renderItem: (item) => renderDynamicItem(item as T),\n renderDropIndicator: (index, position) =>\n dndDropIndicator(index, position) ??\n parentCollectionRenderer?.renderDropIndicator?.(index, position),\n }));\n const menuItemContextValue = createMemo<MenuItemContextValue>(() =>\n stateProps.shouldCloseOnSelect !== undefined\n ? { closeOnSelect: stateProps.shouldCloseOnSelect }\n : {},\n );\n const menuListChildren = () => (\n <SharedElementTransition>\n {state.collection().size === 0 && !usesStaticChildren() && local.renderEmptyState ? (\n <div role=\"presentation\" data-empty-state>\n <div role=\"menuitem\" style={{ display: \"contents\" }}>\n {local.renderEmptyState()}\n </div>\n </div>\n ) : usesStaticChildren() ? (\n renderStaticChildren()\n ) : hasSections() ? (\n <For each={sectionedRenderEntries()}>\n {(entry) =>\n entry.type === \"section\" ? (\n <div role=\"presentation\" data-section-wrapper>\n <Section class=\"solidaria-Menu-section\">\n {entry.section.title != null && (\n <Header class=\"solidaria-Menu-sectionHeader\">{entry.section.title}</Header>\n )}\n <Group class=\"solidaria-Menu-sectionGroup\">\n <div role=\"group\" aria-label={entry.section[\"aria-label\"]}>\n <For each={entry.items}>\n {(indexedItem) => (\n <>\n {collectionRenderer().renderDropIndicator?.(\n indexedItem.index,\n \"before\",\n )}\n {collectionRenderer().renderDropIndicator?.(indexedItem.index, \"on\")}\n {renderDynamicItem(indexedItem.item)}\n {collectionRenderer().renderDropIndicator?.(indexedItem.index, \"after\")}\n </>\n )}\n </For>\n </div>\n </Group>\n </Section>\n </div>\n ) : (\n <>\n {collectionRenderer().renderDropIndicator?.(entry.item.index, \"before\")}\n {collectionRenderer().renderDropIndicator?.(entry.item.index, \"on\")}\n {renderDynamicItem(entry.item.item)}\n {collectionRenderer().renderDropIndicator?.(entry.item.index, \"after\")}\n </>\n )\n }\n </For>\n ) : (\n <>\n {virtualRange()?.offsetTop ? (\n <div\n role=\"presentation\"\n aria-hidden=\"true\"\n style={{ height: `${virtualRange()!.offsetTop}px` }}\n data-virtualizer-spacer=\"top\"\n />\n ) : null}\n <For each={visibleItems()}>\n {(item, index) => {\n const itemIndex = () => (virtualRange()?.start ?? 0) + index();\n const beforeIndicator = () =>\n collectionRenderer().renderDropIndicator?.(itemIndex(), \"before\");\n const onIndicator = () =>\n collectionRenderer().renderDropIndicator?.(itemIndex(), \"on\");\n const afterIndicator = () =>\n collectionRenderer().renderDropIndicator?.(itemIndex(), \"after\");\n return (\n <>\n {beforeIndicator()}\n {onIndicator()}\n {renderDynamicItem(item as T)}\n {afterIndicator()}\n </>\n );\n }}\n </For>\n {virtualRange()?.offsetBottom ? (\n <div\n role=\"presentation\"\n aria-hidden=\"true\"\n style={{ height: `${virtualRange()!.offsetBottom}px` }}\n data-virtualizer-spacer=\"bottom\"\n />\n ) : null}\n </>\n )}\n </SharedElementTransition>\n );\n const menuListProps = () =>\n ({\n ref: setResolvedMenuRef,\n ...mergeProps(\n domProps(),\n cleanMenuProps(),\n cleanTriggerMenuProps(),\n cleanFocusProps(),\n (droppableCollection()?.collectionProps as Record<string, unknown> | undefined) ?? {},\n ),\n class: renderProps.class(),\n style: renderProps.style(),\n slot: local.slot,\n \"data-focused\": state.isFocused() || undefined,\n \"data-disabled\": resolveDisabled() || undefined,\n \"data-empty\": state.collection().size === 0 || undefined,\n \"data-drop-target\": isRootDropTarget() || undefined,\n children: menuListChildren(),\n }) as JSX.HTMLAttributes<HTMLDivElement>;\n\n // Only use FocusScope when inside a MenuTrigger (for popover behavior)\n // Standalone menus don't need focus restoration\n const menuContent = () => (\n <MenuContext.Provider\n value={\n {\n state,\n isDisabled: resolveDisabled,\n dragAndDropHooks: stateProps.dragAndDropHooks,\n dragState: dragState(),\n dropState: dropState(),\n } as MenuContextValue<unknown>\n }\n >\n <MenuStateContext.Provider value={state}>\n <MenuSectionSelectionRegistryContext.Provider value={sectionSelectionRegistry}>\n <MenuItemCloseRegistryContext.Provider value={itemCloseRegistry}>\n <StaticMenuCollectionContext.Provider\n value={usesStaticChildren() ? staticCollectionContext : null}\n >\n <MenuItemContext.Provider value={menuItemContextValue()}>\n <CollectionRendererContext.Provider value={collectionRenderer()}>\n <>\n <Show when={ariaProps.label}>\n <span {...cleanLabelProps()}>{ariaProps.label as JSX.Element}</span>\n </Show>\n {local.render ? (\n local.render(menuListProps(), renderValues())\n ) : (\n <div\n ref={setResolvedMenuRef}\n {...mergeProps(\n domProps(),\n cleanMenuProps(),\n cleanTriggerMenuProps(),\n cleanFocusProps(),\n (droppableCollection()?.collectionProps as\n | Record<string, unknown>\n | undefined) ?? {},\n )}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n data-focused={state.isFocused() || undefined}\n data-disabled={resolveDisabled() || undefined}\n data-empty={state.collection().size === 0 || undefined}\n data-drop-target={isRootDropTarget() || undefined}\n >\n {menuListChildren()}\n </div>\n )}\n </>\n </CollectionRendererContext.Provider>\n </MenuItemContext.Provider>\n </StaticMenuCollectionContext.Provider>\n </MenuItemCloseRegistryContext.Provider>\n </MenuSectionSelectionRegistryContext.Provider>\n </MenuStateContext.Provider>\n </MenuContext.Provider>\n );\n\n return (\n <Show when={shouldRender()}>\n <Show when={triggerContext} fallback={menuContent()}>\n <FocusScope restoreFocus autoFocus>\n {menuContent()}\n </FocusScope>\n </Show>\n </Show>\n );\n}\n\n/**\n * An item in a menu.\n */\nexport function MenuItem<T>(props: MenuItemProps<T>): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\n \"class\",\n \"style\",\n \"render\",\n \"slot\",\n \"id\",\n \"item\",\n \"textValue\",\n \"onAction\",\n \"href\",\n \"target\",\n \"rel\",\n \"download\",\n \"onHoverStart\",\n \"onHoverEnd\",\n \"onHoverChange\",\n \"ref\",\n ]);\n\n const context = useContext(MenuStateContext);\n if (!context) {\n throw new Error(\"MenuItem must be used within a Menu\");\n }\n const state = context as MenuState<T>;\n const menuContext = useContext(MenuContext) as MenuContextValue<T> | null;\n const itemContext = useContext(MenuItemContext);\n const staticCollection = useContext(StaticMenuCollectionContext);\n const sectionSelection = useContext(MenuSectionSelectionContext);\n const sectionSelectionRegistry = useContext(MenuSectionSelectionRegistryContext);\n const itemCloseRegistry = useContext(MenuItemCloseRegistryContext);\n // Tracks the focusable menuitem element (the <div>, or the <a> for link\n // items) so roving focus can be moved onto it imperatively.\n const [ref, setRef] = createSignal<HTMLElement | null>(null);\n const contextProps = () => itemContext?.props?.() ?? {};\n const combinedOnAction = () => {\n local.onAction?.();\n itemContext?.onAction?.();\n };\n const itemCloseOnSelect = () =>\n ariaProps.closeOnSelect ??\n sectionSelection?.shouldCloseOnSelect() ??\n itemContext?.closeOnSelect;\n const activeSectionSelection = () =>\n sectionSelection && sectionSelection.selectionMode() !== \"none\" ? sectionSelection : null;\n let registeredStaticKey: Key | null = null;\n let registeredSectionSelectionKey: Key | null = null;\n let registeredSectionSelection: MenuSectionSelectionContextValue | null = null;\n let registeredCloseKey: Key | null = null;\n let registeredCloseAccessor: (() => boolean | undefined) | null = null;\n\n const unregisterSectionSelection = () => {\n if (registeredSectionSelectionKey != null && registeredSectionSelection) {\n sectionSelectionRegistry?.unregisterItem(\n registeredSectionSelectionKey,\n registeredSectionSelection,\n );\n registeredSectionSelectionKey = null;\n registeredSectionSelection = null;\n }\n };\n\n createEffect(() => {\n if (!staticCollection) return;\n\n if (registeredStaticKey != null && registeredStaticKey !== local.id) {\n staticCollection.unregisterItem(registeredStaticKey);\n }\n\n registeredStaticKey = local.id;\n staticCollection.registerItem({\n id: local.id,\n textValue: local.textValue ?? ariaProps[\"aria-label\"],\n isDisabled:\n resolveBoolean(ariaProps.isDisabled) || (sectionSelection?.isDisabled(local.id) ?? false),\n });\n });\n\n onCleanup(() => {\n if (registeredStaticKey != null) {\n staticCollection?.unregisterItem(registeredStaticKey);\n }\n });\n\n createEffect(() => {\n const selection = activeSectionSelection();\n if (!sectionSelectionRegistry || !selection) {\n unregisterSectionSelection();\n return;\n }\n\n if (registeredSectionSelectionKey === local.id && registeredSectionSelection === selection) {\n return;\n }\n\n unregisterSectionSelection();\n registeredSectionSelectionKey = local.id;\n registeredSectionSelection = selection;\n sectionSelectionRegistry.registerItem(local.id, selection);\n });\n\n onCleanup(unregisterSectionSelection);\n\n const unregisterItemClose = () => {\n if (registeredCloseKey != null && registeredCloseAccessor) {\n itemCloseRegistry?.unregisterItem(registeredCloseKey, registeredCloseAccessor);\n registeredCloseKey = null;\n registeredCloseAccessor = null;\n }\n };\n\n createEffect(() => {\n if (!itemCloseRegistry) {\n unregisterItemClose();\n return;\n }\n\n if (registeredCloseKey === local.id && registeredCloseAccessor === itemCloseOnSelect) {\n return;\n }\n\n unregisterItemClose();\n registeredCloseKey = local.id;\n registeredCloseAccessor = itemCloseOnSelect;\n itemCloseRegistry.registerItem(local.id, itemCloseOnSelect);\n });\n\n onCleanup(unregisterItemClose);\n\n const itemAria = createMenuItem<T>(\n {\n key: local.id,\n get id() {\n return contextProps().id as string | undefined;\n },\n get isDisabled() {\n return Boolean(\n ariaProps.isDisabled ||\n sectionSelection?.isDisabled(local.id) ||\n menuContext?.isDisabled(),\n );\n },\n get \"aria-label\"() {\n return ariaProps[\"aria-label\"] ?? local.textValue;\n },\n get \"aria-controls\"() {\n return contextProps()[\"aria-controls\"] as string | undefined;\n },\n get \"aria-haspopup\"() {\n return contextProps()[\"aria-haspopup\"] as string | boolean | undefined;\n },\n get \"aria-expanded\"() {\n return contextProps()[\"aria-expanded\"] as boolean | \"true\" | \"false\" | undefined;\n },\n get onAction() {\n return combinedOnAction;\n },\n get closeOnSelect() {\n return itemCloseOnSelect();\n },\n get href() {\n return local.href;\n },\n get target() {\n return local.target;\n },\n get rel() {\n return local.rel;\n },\n get download() {\n return local.download;\n },\n },\n state,\n () => ref(),\n );\n\n const { isHovered, hoverProps } = createHover({\n get isDisabled() {\n return itemAria.isDisabled();\n },\n onHoverStart: local.onHoverStart,\n onHoverEnd: local.onHoverEnd,\n onHoverChange: local.onHoverChange,\n });\n\n const renderValues = createMemo<MenuItemRenderProps>(() => {\n const selection = activeSectionSelection();\n return {\n isSelected: selection?.isSelected(local.id) ?? itemAria.isSelected(),\n selectionMode: selection?.selectionMode() ?? itemAria.selectionMode(),\n isFocused: itemAria.isFocused(),\n isFocusVisible: itemAria.isFocusVisible(),\n isPressed: itemAria.isPressed(),\n isHovered: isHovered(),\n isDisabled: itemAria.isDisabled(),\n hasSubmenu: Boolean(contextProps()[\"aria-haspopup\"]),\n isOpen: contextProps()[\"aria-expanded\"] === true,\n descriptionProps: itemAria.descriptionProps,\n keyboardShortcutProps: itemAria.keyboardShortcutProps,\n };\n });\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-Menu-item\",\n },\n renderValues,\n );\n const hasPrimitiveLabel = () => {\n return typeof props.children === \"string\" || typeof props.children === \"number\";\n };\n\n const cleanItemProps = () => {\n // Keep `aria-describedby`: the headless emits it (via `createSlotId`) only\n // when a description/keyboard element is actually rendered, so it points at\n // the styled `Text slot=\"description\"` + `Keyboard` ids threaded through\n // `renderValues` below — restoring upstream's two-context description\n // delegation. `createSlotId` clears it to `undefined` on description-less\n // items, so nothing dangles.\n const { ref: _ref1, ...rest } = itemAria.menuItemProps as Record<string, unknown>;\n if (!hasPrimitiveLabel() && rest[\"aria-label\"] == null) {\n delete rest[\"aria-labelledby\"];\n }\n const selection = activeSectionSelection();\n const selectionMode = selection?.selectionMode();\n if (selectionMode) {\n rest.role =\n selectionMode === \"single\"\n ? \"menuitemradio\"\n : selectionMode === \"multiple\"\n ? \"menuitemcheckbox\"\n : \"menuitem\";\n if (selectionMode !== \"none\") {\n rest[\"aria-checked\"] = selection?.isSelected(local.id) ?? false;\n } else {\n delete rest[\"aria-checked\"];\n }\n rest[\"data-selected\"] = selection?.isSelected(local.id) || undefined;\n }\n return rest;\n };\n const cleanHoverProps = () => {\n const { ref: _ref2, ...rest } = hoverProps as Record<string, unknown>;\n return rest;\n };\n const domProps = createMemo(() =>\n filterDOMProps(ariaProps as Record<string, unknown>, { global: true }),\n );\n const draggableItem = createMemo(() => {\n if (!menuContext?.dragAndDropHooks?.useDraggableItem || !menuContext.dragState)\n return undefined;\n return menuContext.dragAndDropHooks.useDraggableItem(\n {\n key: local.id as string | number,\n },\n menuContext.dragState as Parameters<NonNullable<DragAndDropHooks<T>[\"useDraggableItem\"]>>[1],\n );\n });\n const droppableItem = createMemo(() => {\n if (!menuContext?.dragAndDropHooks?.useDroppableItem || !menuContext.dropState)\n return undefined;\n return menuContext.dragAndDropHooks.useDroppableItem(\n {\n key: local.id as string | number,\n },\n menuContext.dropState as Parameters<NonNullable<DragAndDropHooks<T>[\"useDroppableItem\"]>>[1],\n () => ref(),\n );\n });\n\n const isLink = () => !!local.href;\n\n const cleanItemPropsForLink = () => {\n const all = cleanItemProps();\n const { href: _href, target: _target, rel: _rel, download: _download, ...rest } = all;\n return rest;\n };\n\n const linkDomProps = () => {\n const all = cleanItemProps();\n const result: Record<string, unknown> = {};\n if (all.href !== undefined) result.href = all.href;\n if (all.target !== undefined) result.target = all.target;\n if (all.rel !== undefined) result.rel = all.rel;\n if (all.download !== undefined) result.download = all.download;\n return result;\n };\n\n const dataAttrs = () => {\n const selection = activeSectionSelection();\n return {\n \"data-focused\": itemAria.isFocused() || undefined,\n \"data-focus-visible\": itemAria.isFocusVisible() || undefined,\n \"data-pressed\": itemAria.isPressed() || undefined,\n \"data-hovered\": isHovered() || undefined,\n \"data-disabled\": itemAria.isDisabled() || undefined,\n \"data-selected\": (selection?.isSelected(local.id) ?? itemAria.isSelected()) || undefined,\n \"data-has-submenu\": Boolean(contextProps()[\"aria-haspopup\"]) || undefined,\n \"data-open\": contextProps()[\"aria-expanded\"] === true || undefined,\n \"data-dragging\": draggableItem()?.isDragging || undefined,\n \"data-drop-target\": droppableItem()?.isDropTarget || undefined,\n };\n };\n\n const childContent = () =>\n hasPrimitiveLabel() ? (\n <span {...itemAria.labelProps}>{renderProps.renderChildren()}</span>\n ) : (\n renderProps.renderChildren()\n );\n const setResolvedItemRef = (el: HTMLElement | null) => {\n setRef(el);\n itemContext?.setItemRef?.(el);\n if (el) assignRef(local.ref, el);\n };\n const menuItemProps = () =>\n ({\n ref: setResolvedItemRef,\n ...mergeProps(\n cleanItemProps(),\n contextProps() as Record<string, unknown>,\n domProps(),\n cleanHoverProps(),\n (draggableItem()?.dragProps as Record<string, unknown> | undefined) ?? {},\n (droppableItem()?.dropProps as Record<string, unknown> | undefined) ?? {},\n ),\n class: renderProps.class(),\n style: renderProps.style(),\n ...dataAttrs(),\n children: childContent(),\n }) as JSX.HTMLAttributes<HTMLElement>;\n const linkMenuItemProps = () =>\n ({\n ...mergeProps(\n cleanItemPropsForLink(),\n contextProps() as Record<string, unknown>,\n domProps(),\n cleanHoverProps(),\n linkDomProps(),\n (draggableItem()?.dragProps as Record<string, unknown> | undefined) ?? {},\n (droppableItem()?.dropProps as Record<string, unknown> | undefined) ?? {},\n ),\n class: renderProps.class(),\n style: renderProps.style(),\n ...dataAttrs(),\n children: childContent(),\n }) as JSX.HTMLAttributes<HTMLElement>;\n\n if (local.render && !isLink()) {\n return local.render(menuItemProps(), renderValues());\n }\n\n return (\n <Show\n when={isLink()}\n fallback={\n <div\n ref={(el) => {\n setRef(el);\n itemContext?.setItemRef?.(el);\n assignRef(local.ref, el);\n }}\n {...mergeProps(\n cleanItemProps(),\n contextProps() as Record<string, unknown>,\n domProps(),\n cleanHoverProps(),\n (draggableItem()?.dragProps as Record<string, unknown> | undefined) ?? {},\n (droppableItem()?.dropProps as Record<string, unknown> | undefined) ?? {},\n )}\n class={renderProps.class()}\n style={renderProps.style()}\n {...dataAttrs()}\n >\n {childContent()}\n </div>\n }\n >\n {local.render ? (\n local.render(linkMenuItemProps(), renderValues())\n ) : (\n // Upstream renders the link menuitem as a bare <a role=\"menuitem\"> (no\n // presentation wrapper); the <div> root makes the wrapper unnecessary.\n <a\n ref={(el) => {\n setRef(el);\n itemContext?.setItemRef?.(el);\n assignRef(local.ref, el);\n }}\n {...mergeProps(\n cleanItemPropsForLink(),\n contextProps() as Record<string, unknown>,\n domProps(),\n cleanHoverProps(),\n linkDomProps(),\n (draggableItem()?.dragProps as Record<string, unknown> | undefined) ?? {},\n (droppableItem()?.dropProps as Record<string, unknown> | undefined) ?? {},\n )}\n class={renderProps.class()}\n style={renderProps.style()}\n {...dataAttrs()}\n >\n {childContent()}\n </a>\n )}\n </Show>\n );\n}\n\n/**\n * Section primitive alias for Menu composition parity.\n */\nexport function MenuSection(props: MenuSectionProps): JSX.Element {\n const [selectionProps, sectionProps] = splitProps(props, [\n \"selectionMode\",\n \"selectionBehavior\",\n \"disallowEmptySelection\",\n \"selectedKeys\",\n \"defaultSelectedKeys\",\n \"onSelectionChange\",\n \"disabledKeys\",\n \"disabledBehavior\",\n \"allowDuplicateSelectionEvents\",\n \"shouldCloseOnSelect\",\n ]);\n\n const selectionState = createSelectionState({\n get selectionMode() {\n return selectionProps.selectionMode ?? \"none\";\n },\n get selectionBehavior() {\n return selectionProps.selectionBehavior;\n },\n get disallowEmptySelection() {\n return selectionProps.disallowEmptySelection;\n },\n get selectedKeys() {\n return selectionProps.selectionMode ? selectionProps.selectedKeys : undefined;\n },\n get defaultSelectedKeys() {\n return selectionProps.selectionMode ? selectionProps.defaultSelectedKeys : undefined;\n },\n get onSelectionChange() {\n return selectionProps.selectionMode ? selectionProps.onSelectionChange : undefined;\n },\n get disabledKeys() {\n return selectionProps.disabledKeys;\n },\n get disabledBehavior() {\n return selectionProps.disabledBehavior;\n },\n get allowDuplicateSelectionEvents() {\n return selectionProps.allowDuplicateSelectionEvents;\n },\n });\n\n const sectionSelection: MenuSectionSelectionContextValue = {\n selectionMode: selectionState.selectionMode,\n isSelected: selectionState.isSelected,\n isDisabled: selectionState.isDisabled,\n select(key, event) {\n selectionState.select(key, event);\n },\n shouldCloseOnSelect() {\n return selectionProps.shouldCloseOnSelect;\n },\n };\n\n return (\n <MenuSectionSelectionContext.Provider value={sectionSelection}>\n <Section {...sectionProps} />\n </MenuSectionSelectionContext.Provider>\n );\n}\n\nMenu.Item = MenuItem;\n"],"mappings":"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"}
|
package/dist/Meter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Meter.d.ts","sourceRoot":"","sources":["../src/Meter.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAyC,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,SAAS,EAGf,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,UAAW,SAAQ,cAAc,EAAE,SAAS;IAC3D,yFAAyF;IACzF,QAAQ,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC5C,yCAAyC;IACzC,KAAK,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IAC9C,wCAAwC;IACxC,KAAK,CAAC,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;CAC3C;AAED,eAAO,MAAM,YAAY,+CAAyC,CAAC;AAWnE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"Meter.d.ts","sourceRoot":"","sources":["../src/Meter.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAyC,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,SAAS,EAGf,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,UAAW,SAAQ,cAAc,EAAE,SAAS;IAC3D,yFAAyF;IACzF,QAAQ,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC5C,yCAAyC;IACzC,KAAK,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IAC9C,wCAAwC;IACxC,KAAK,CAAC,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;CAC3C;AAED,eAAO,MAAM,YAAY,+CAAyC,CAAC;AAWnE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,CAAC,OAAO,CA+EpD"}
|
package/dist/Meter.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { filterDOMProps, useRenderProps } from "./utils.js";
|
|
2
|
+
import { getNextElement, insert, mergeProps, runHydrationEvents, spread, template } from "solid-js/web";
|
|
3
|
+
import { createContext, createMemo, splitProps } from "solid-js";
|
|
4
|
+
import { createMeter } from "@proyecto-viviana/solidaria";
|
|
5
|
+
//#region src/Meter.tsx
|
|
6
|
+
/**
|
|
7
|
+
* Meter component for solidaria-components
|
|
8
|
+
*
|
|
9
|
+
* Pre-wired headless meter component that combines aria hooks.
|
|
10
|
+
* Port of react-aria-components/src/Meter.tsx
|
|
11
|
+
*
|
|
12
|
+
* Meters represent a quantity within a known range, or a fractional value.
|
|
13
|
+
* Unlike progress bars, meters represent a current value rather than progress toward a goal.
|
|
14
|
+
*/
|
|
15
|
+
var _tmpl$ = /*#__PURE__*/ template(`<div>`);
|
|
16
|
+
const MeterContext = createContext(null);
|
|
17
|
+
function clamp(value, min, max) {
|
|
18
|
+
return Math.min(Math.max(value, min), max);
|
|
19
|
+
}
|
|
20
|
+
function getSafeRange(min, max) {
|
|
21
|
+
const range = max - min;
|
|
22
|
+
return Number.isFinite(range) && range > 0 ? range : 1;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A meter represents a quantity within a known range, or a fractional value.
|
|
26
|
+
* Unlike progress bars, meters represent a current value rather than progress toward a goal.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```tsx
|
|
30
|
+
* <Meter value={75}>
|
|
31
|
+
* {({ percentage, valueText }) => (
|
|
32
|
+
* <>
|
|
33
|
+
* <Label>Storage space</Label>
|
|
34
|
+
* <span>{valueText}</span>
|
|
35
|
+
* <div class="bar" style={{ width: `${percentage}%` }} />
|
|
36
|
+
* </>
|
|
37
|
+
* )}
|
|
38
|
+
* </Meter>
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
function Meter(props) {
|
|
42
|
+
const [local, ariaProps] = splitProps(props, [
|
|
43
|
+
"children",
|
|
44
|
+
"class",
|
|
45
|
+
"style",
|
|
46
|
+
"slot"
|
|
47
|
+
]);
|
|
48
|
+
const value = () => ariaProps.value ?? 0;
|
|
49
|
+
const minValue = () => ariaProps.minValue ?? 0;
|
|
50
|
+
const maxValue = () => ariaProps.maxValue ?? 100;
|
|
51
|
+
const meterAria = createMeter({
|
|
52
|
+
get value() {
|
|
53
|
+
return ariaProps.value;
|
|
54
|
+
},
|
|
55
|
+
get minValue() {
|
|
56
|
+
return ariaProps.minValue;
|
|
57
|
+
},
|
|
58
|
+
get maxValue() {
|
|
59
|
+
return ariaProps.maxValue;
|
|
60
|
+
},
|
|
61
|
+
get valueLabel() {
|
|
62
|
+
return ariaProps.valueLabel;
|
|
63
|
+
},
|
|
64
|
+
get formatOptions() {
|
|
65
|
+
return ariaProps.formatOptions;
|
|
66
|
+
},
|
|
67
|
+
get label() {
|
|
68
|
+
return ariaProps.label;
|
|
69
|
+
},
|
|
70
|
+
get "aria-label"() {
|
|
71
|
+
return ariaProps["aria-label"];
|
|
72
|
+
},
|
|
73
|
+
get "aria-labelledby"() {
|
|
74
|
+
return ariaProps["aria-labelledby"];
|
|
75
|
+
},
|
|
76
|
+
get "aria-describedby"() {
|
|
77
|
+
return ariaProps["aria-describedby"];
|
|
78
|
+
},
|
|
79
|
+
get "aria-details"() {
|
|
80
|
+
return ariaProps["aria-details"];
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
const percentage = createMemo(() => {
|
|
84
|
+
return (clamp(value(), minValue(), maxValue()) - minValue()) / getSafeRange(minValue(), maxValue()) * 100;
|
|
85
|
+
});
|
|
86
|
+
const valueText = createMemo(() => {
|
|
87
|
+
return meterAria.meterProps["aria-valuetext"];
|
|
88
|
+
});
|
|
89
|
+
const renderValues = createMemo(() => ({
|
|
90
|
+
percentage: percentage(),
|
|
91
|
+
valueText: valueText()
|
|
92
|
+
}));
|
|
93
|
+
const renderProps = useRenderProps({
|
|
94
|
+
get children() {
|
|
95
|
+
return props.children;
|
|
96
|
+
},
|
|
97
|
+
class: local.class,
|
|
98
|
+
style: local.style,
|
|
99
|
+
defaultClassName: "solidaria-Meter"
|
|
100
|
+
}, renderValues);
|
|
101
|
+
const domProps = createMemo(() => filterDOMProps(ariaProps, { global: true }));
|
|
102
|
+
return (() => {
|
|
103
|
+
var _el$ = getNextElement(_tmpl$);
|
|
104
|
+
spread(_el$, mergeProps(domProps, () => meterAria.meterProps, {
|
|
105
|
+
get ["class"]() {
|
|
106
|
+
return renderProps.class();
|
|
107
|
+
},
|
|
108
|
+
get style() {
|
|
109
|
+
return renderProps.style();
|
|
110
|
+
},
|
|
111
|
+
get slot() {
|
|
112
|
+
return local.slot;
|
|
113
|
+
}
|
|
114
|
+
}), false, true);
|
|
115
|
+
insert(_el$, () => renderProps.renderChildren());
|
|
116
|
+
runHydrationEvents();
|
|
117
|
+
return _el$;
|
|
118
|
+
})();
|
|
119
|
+
}
|
|
120
|
+
//#endregion
|
|
121
|
+
export { Meter, MeterContext };
|
|
122
|
+
|
|
123
|
+
//# sourceMappingURL=Meter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Meter.js","names":["JSX","createContext","createMemo","splitProps","createMeter","AriaMeterProps","RenderChildren","ClassNameOrFunction","StyleOrFunction","SlotProps","useRenderProps","filterDOMProps","MeterRenderProps","percentage","valueText","MeterProps","children","class","style","MeterContext","clamp","value","min","max","Math","getSafeRange","range","Number","isFinite","Meter","props","Element","local","ariaProps","minValue","maxValue","meterAria","valueLabel","formatOptions","label","aria-label","aria-labelledby","aria-describedby","aria-details","clampedValue","meterProps","renderValues","renderProps","defaultClassName","domProps","global","_el$","_$getNextElement","_tmpl$","_$spread","_$mergeProps","slot","_$insert","renderChildren","_$runHydrationEvents"],"sources":["../src/Meter.tsx"],"sourcesContent":["/**\n * Meter component for solidaria-components\n *\n * Pre-wired headless meter component that combines aria hooks.\n * Port of react-aria-components/src/Meter.tsx\n *\n * Meters represent a quantity within a known range, or a fractional value.\n * Unlike progress bars, meters represent a current value rather than progress toward a goal.\n */\n\nimport { type JSX, createContext, createMemo, splitProps } from \"solid-js\";\nimport { createMeter, type AriaMeterProps } from \"@proyecto-viviana/solidaria\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\n\nexport interface MeterRenderProps {\n /** The value as a percentage between the minimum and maximum (0-100). */\n percentage: number;\n /** A formatted version of the value. */\n valueText: string | undefined;\n}\n\nexport interface MeterProps extends AriaMeterProps, SlotProps {\n /** The children of the component. A function may be provided to receive render props. */\n children?: RenderChildren<MeterRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<MeterRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<MeterRenderProps>;\n}\n\nexport const MeterContext = createContext<MeterProps | null>(null);\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction getSafeRange(min: number, max: number): number {\n const range = max - min;\n return Number.isFinite(range) && range > 0 ? range : 1;\n}\n\n/**\n * A meter represents a quantity within a known range, or a fractional value.\n * Unlike progress bars, meters represent a current value rather than progress toward a goal.\n *\n * @example\n * ```tsx\n * <Meter value={75}>\n * {({ percentage, valueText }) => (\n * <>\n * <Label>Storage space</Label>\n * <span>{valueText}</span>\n * <div class=\"bar\" style={{ width: `${percentage}%` }} />\n * </>\n * )}\n * </Meter>\n * ```\n */\nexport function Meter(props: MeterProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\"children\", \"class\", \"style\", \"slot\"]);\n\n const value = () => ariaProps.value ?? 0;\n const minValue = () => ariaProps.minValue ?? 0;\n const maxValue = () => ariaProps.maxValue ?? 100;\n\n const meterAria = createMeter({\n get value() {\n return ariaProps.value;\n },\n get minValue() {\n return ariaProps.minValue;\n },\n get maxValue() {\n return ariaProps.maxValue;\n },\n get valueLabel() {\n return ariaProps.valueLabel;\n },\n get formatOptions() {\n return ariaProps.formatOptions;\n },\n get label() {\n return ariaProps.label;\n },\n get \"aria-label\"() {\n return ariaProps[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return ariaProps[\"aria-labelledby\"];\n },\n get \"aria-describedby\"() {\n return ariaProps[\"aria-describedby\"];\n },\n get \"aria-details\"() {\n return ariaProps[\"aria-details\"];\n },\n });\n\n const percentage = createMemo(() => {\n const clampedValue = clamp(value(), minValue(), maxValue());\n return ((clampedValue - minValue()) / getSafeRange(minValue(), maxValue())) * 100;\n });\n\n const valueText = createMemo(() => {\n return meterAria.meterProps[\"aria-valuetext\"] as string | undefined;\n });\n\n const renderValues = createMemo<MeterRenderProps>(() => ({\n percentage: percentage(),\n valueText: valueText(),\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-Meter\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() => filterDOMProps(ariaProps, { global: true }));\n\n return (\n <div\n {...domProps()}\n {...meterAria.meterProps}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n >\n {renderProps.renderChildren()}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAqCA,MAAamB,eAAelB,cAAiC,IAAI;AAEjE,SAASmB,MAAMC,OAAeC,KAAaC,KAAqB;CAC9D,OAAOC,KAAKF,IAAIE,KAAKD,IAAIF,OAAOC,GAAG,GAAGC,GAAG;AAC3C;AAEA,SAASE,aAAaH,KAAaC,KAAqB;CACtD,MAAMG,QAAQH,MAAMD;CACpB,OAAOK,OAAOC,SAASF,KAAK,KAAKA,QAAQ,IAAIA,QAAQ;AACvD;;;;;;;;;;;;;;;;;;AAmBA,SAAgBG,MAAMC,OAAgC;CACpD,MAAM,CAACE,OAAOC,aAAa9B,WAAW2B,OAAO;EAAC;EAAY;EAAS;EAAS;CAAM,CAAC;CAEnF,MAAMT,cAAcY,UAAUZ,SAAS;CACvC,MAAMa,iBAAiBD,UAAUC,YAAY;CAC7C,MAAMC,iBAAiBF,UAAUE,YAAY;CAE7C,MAAMC,YAAYhC,YAAY;EAC5B,IAAIiB,QAAQ;GACV,OAAOY,UAAUZ;EACnB;EACA,IAAIa,WAAW;GACb,OAAOD,UAAUC;EACnB;EACA,IAAIC,WAAW;GACb,OAAOF,UAAUE;EACnB;EACA,IAAIE,aAAa;GACf,OAAOJ,UAAUI;EACnB;EACA,IAAIC,gBAAgB;GAClB,OAAOL,UAAUK;EACnB;EACA,IAAIC,QAAQ;GACV,OAAON,UAAUM;EACnB;EACA,IAAI,eAAe;GACjB,OAAON,UAAU;EACnB;EACA,IAAI,oBAAoB;GACtB,OAAOA,UAAU;EACnB;EACA,IAAI,qBAAqB;GACvB,OAAOA,UAAU;EACnB;EACA,IAAI,iBAAiB;GACnB,OAAOA,UAAU;EACnB;CACF,CAAC;CAED,MAAMpB,aAAaX,iBAAiB;EAElC,QADqBkB,MAAMC,MAAM,GAAGa,SAAS,GAAGC,SAAS,CAChDS,IAAeV,SAAS,KAAKT,aAAaS,SAAS,GAAGC,SAAS,CAAC,IAAK;CAChF,CAAC;CAED,MAAMrB,YAAYZ,iBAAiB;EACjC,OAAOkC,UAAUS,WAAW;CAC9B,CAAC;CAED,MAAMC,eAAe5C,kBAAoC;EACvDW,YAAYA,WAAW;EACvBC,WAAWA,UAAU;CACvB,EAAE;CAEF,MAAMiC,cAAcrC,eAClB;EACE,IAAIM,WAAW;GACb,OAAOc,MAAMd;EACf;EACAC,OAAOe,MAAMf;EACbC,OAAOc,MAAMd;EACb8B,kBAAkB;CACpB,GACAF,YACF;CAEA,MAAMG,WAAW/C,iBAAiBS,eAAesB,WAAW,EAAEiB,QAAQ,KAAK,CAAC,CAAC;CAE7E,cAAA;EAAA,IAAAC,OAAAC,eAAAC,MAAA;EAAAC,OAAAH,MAAAI,WAEQN,gBACAb,UAAUS,YAAU;GAAA,KAAA,WAAA;IAAA,OACjBE,YAAY9B,MAAM;GAAC;GAAA,IAC1BC,QAAK;IAAA,OAAE6B,YAAY7B,MAAM;GAAC;GAAA,IAC1BsC,OAAI;IAAA,OAAExB,MAAMwB;GAAI;EAAA,CAAA,GAAA,OAAA,IAAA;EAAAC,OAAAN,YAEfJ,YAAYW,eAAe,CAAC;EAAAC,mBAAA;EAAA,OAAAR;CAAA,EAAA,CAAA;AAGnC"}
|
package/dist/Meter.jsx
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { filterDOMProps, useRenderProps } from "./utils.jsx";
|
|
2
|
+
import { createContext, createMemo, splitProps } from "solid-js";
|
|
3
|
+
import { createMeter } from "@proyecto-viviana/solidaria";
|
|
4
|
+
//#region src/Meter.tsx
|
|
5
|
+
/**
|
|
6
|
+
* Meter component for solidaria-components
|
|
7
|
+
*
|
|
8
|
+
* Pre-wired headless meter component that combines aria hooks.
|
|
9
|
+
* Port of react-aria-components/src/Meter.tsx
|
|
10
|
+
*
|
|
11
|
+
* Meters represent a quantity within a known range, or a fractional value.
|
|
12
|
+
* Unlike progress bars, meters represent a current value rather than progress toward a goal.
|
|
13
|
+
*/
|
|
14
|
+
const MeterContext = createContext(null);
|
|
15
|
+
function clamp(value, min, max) {
|
|
16
|
+
return Math.min(Math.max(value, min), max);
|
|
17
|
+
}
|
|
18
|
+
function getSafeRange(min, max) {
|
|
19
|
+
const range = max - min;
|
|
20
|
+
return Number.isFinite(range) && range > 0 ? range : 1;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A meter represents a quantity within a known range, or a fractional value.
|
|
24
|
+
* Unlike progress bars, meters represent a current value rather than progress toward a goal.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* <Meter value={75}>
|
|
29
|
+
* {({ percentage, valueText }) => (
|
|
30
|
+
* <>
|
|
31
|
+
* <Label>Storage space</Label>
|
|
32
|
+
* <span>{valueText}</span>
|
|
33
|
+
* <div class="bar" style={{ width: `${percentage}%` }} />
|
|
34
|
+
* </>
|
|
35
|
+
* )}
|
|
36
|
+
* </Meter>
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
function Meter(props) {
|
|
40
|
+
const [local, ariaProps] = splitProps(props, [
|
|
41
|
+
"children",
|
|
42
|
+
"class",
|
|
43
|
+
"style",
|
|
44
|
+
"slot"
|
|
45
|
+
]);
|
|
46
|
+
const value = () => ariaProps.value ?? 0;
|
|
47
|
+
const minValue = () => ariaProps.minValue ?? 0;
|
|
48
|
+
const maxValue = () => ariaProps.maxValue ?? 100;
|
|
49
|
+
const meterAria = createMeter({
|
|
50
|
+
get value() {
|
|
51
|
+
return ariaProps.value;
|
|
52
|
+
},
|
|
53
|
+
get minValue() {
|
|
54
|
+
return ariaProps.minValue;
|
|
55
|
+
},
|
|
56
|
+
get maxValue() {
|
|
57
|
+
return ariaProps.maxValue;
|
|
58
|
+
},
|
|
59
|
+
get valueLabel() {
|
|
60
|
+
return ariaProps.valueLabel;
|
|
61
|
+
},
|
|
62
|
+
get formatOptions() {
|
|
63
|
+
return ariaProps.formatOptions;
|
|
64
|
+
},
|
|
65
|
+
get label() {
|
|
66
|
+
return ariaProps.label;
|
|
67
|
+
},
|
|
68
|
+
get "aria-label"() {
|
|
69
|
+
return ariaProps["aria-label"];
|
|
70
|
+
},
|
|
71
|
+
get "aria-labelledby"() {
|
|
72
|
+
return ariaProps["aria-labelledby"];
|
|
73
|
+
},
|
|
74
|
+
get "aria-describedby"() {
|
|
75
|
+
return ariaProps["aria-describedby"];
|
|
76
|
+
},
|
|
77
|
+
get "aria-details"() {
|
|
78
|
+
return ariaProps["aria-details"];
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
const percentage = createMemo(() => {
|
|
82
|
+
return (clamp(value(), minValue(), maxValue()) - minValue()) / getSafeRange(minValue(), maxValue()) * 100;
|
|
83
|
+
});
|
|
84
|
+
const valueText = createMemo(() => {
|
|
85
|
+
return meterAria.meterProps["aria-valuetext"];
|
|
86
|
+
});
|
|
87
|
+
const renderValues = createMemo(() => ({
|
|
88
|
+
percentage: percentage(),
|
|
89
|
+
valueText: valueText()
|
|
90
|
+
}));
|
|
91
|
+
const renderProps = useRenderProps({
|
|
92
|
+
get children() {
|
|
93
|
+
return props.children;
|
|
94
|
+
},
|
|
95
|
+
class: local.class,
|
|
96
|
+
style: local.style,
|
|
97
|
+
defaultClassName: "solidaria-Meter"
|
|
98
|
+
}, renderValues);
|
|
99
|
+
const domProps = createMemo(() => filterDOMProps(ariaProps, { global: true }));
|
|
100
|
+
return <div {...domProps()} {...meterAria.meterProps} class={renderProps.class()} style={renderProps.style()} slot={local.slot}>
|
|
101
|
+
{renderProps.renderChildren()}
|
|
102
|
+
</div>;
|
|
103
|
+
}
|
|
104
|
+
//#endregion
|
|
105
|
+
export { Meter, MeterContext };
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=Meter.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Meter.jsx","names":[],"sources":["../src/Meter.tsx"],"sourcesContent":["/**\n * Meter component for solidaria-components\n *\n * Pre-wired headless meter component that combines aria hooks.\n * Port of react-aria-components/src/Meter.tsx\n *\n * Meters represent a quantity within a known range, or a fractional value.\n * Unlike progress bars, meters represent a current value rather than progress toward a goal.\n */\n\nimport { type JSX, createContext, createMemo, splitProps } from \"solid-js\";\nimport { createMeter, type AriaMeterProps } from \"@proyecto-viviana/solidaria\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\n\nexport interface MeterRenderProps {\n /** The value as a percentage between the minimum and maximum (0-100). */\n percentage: number;\n /** A formatted version of the value. */\n valueText: string | undefined;\n}\n\nexport interface MeterProps extends AriaMeterProps, SlotProps {\n /** The children of the component. A function may be provided to receive render props. */\n children?: RenderChildren<MeterRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<MeterRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<MeterRenderProps>;\n}\n\nexport const MeterContext = createContext<MeterProps | null>(null);\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction getSafeRange(min: number, max: number): number {\n const range = max - min;\n return Number.isFinite(range) && range > 0 ? range : 1;\n}\n\n/**\n * A meter represents a quantity within a known range, or a fractional value.\n * Unlike progress bars, meters represent a current value rather than progress toward a goal.\n *\n * @example\n * ```tsx\n * <Meter value={75}>\n * {({ percentage, valueText }) => (\n * <>\n * <Label>Storage space</Label>\n * <span>{valueText}</span>\n * <div class=\"bar\" style={{ width: `${percentage}%` }} />\n * </>\n * )}\n * </Meter>\n * ```\n */\nexport function Meter(props: MeterProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\"children\", \"class\", \"style\", \"slot\"]);\n\n const value = () => ariaProps.value ?? 0;\n const minValue = () => ariaProps.minValue ?? 0;\n const maxValue = () => ariaProps.maxValue ?? 100;\n\n const meterAria = createMeter({\n get value() {\n return ariaProps.value;\n },\n get minValue() {\n return ariaProps.minValue;\n },\n get maxValue() {\n return ariaProps.maxValue;\n },\n get valueLabel() {\n return ariaProps.valueLabel;\n },\n get formatOptions() {\n return ariaProps.formatOptions;\n },\n get label() {\n return ariaProps.label;\n },\n get \"aria-label\"() {\n return ariaProps[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return ariaProps[\"aria-labelledby\"];\n },\n get \"aria-describedby\"() {\n return ariaProps[\"aria-describedby\"];\n },\n get \"aria-details\"() {\n return ariaProps[\"aria-details\"];\n },\n });\n\n const percentage = createMemo(() => {\n const clampedValue = clamp(value(), minValue(), maxValue());\n return ((clampedValue - minValue()) / getSafeRange(minValue(), maxValue())) * 100;\n });\n\n const valueText = createMemo(() => {\n return meterAria.meterProps[\"aria-valuetext\"] as string | undefined;\n });\n\n const renderValues = createMemo<MeterRenderProps>(() => ({\n percentage: percentage(),\n valueText: valueText(),\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-Meter\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() => filterDOMProps(ariaProps, { global: true }));\n\n return (\n <div\n {...domProps()}\n {...meterAria.meterProps}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n >\n {renderProps.renderChildren()}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAqCA,MAAa,eAAe,cAAiC,IAAI;AAEjE,SAAS,MAAM,OAAe,KAAa,KAAqB;CAC9D,OAAO,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG,GAAG;AAC3C;AAEA,SAAS,aAAa,KAAa,KAAqB;CACtD,MAAM,QAAQ,MAAM;CACpB,OAAO,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI,QAAQ;AACvD;;;;;;;;;;;;;;;;;;AAmBA,SAAgB,MAAM,OAAgC;CACpD,MAAM,CAAC,OAAO,aAAa,WAAW,OAAO;EAAC;EAAY;EAAS;EAAS;CAAM,CAAC;CAEnF,MAAM,cAAc,UAAU,SAAS;CACvC,MAAM,iBAAiB,UAAU,YAAY;CAC7C,MAAM,iBAAiB,UAAU,YAAY;CAE7C,MAAM,YAAY,YAAY;EAC5B,IAAI,QAAQ;GACV,OAAO,UAAU;EACnB;EACA,IAAI,WAAW;GACb,OAAO,UAAU;EACnB;EACA,IAAI,WAAW;GACb,OAAO,UAAU;EACnB;EACA,IAAI,aAAa;GACf,OAAO,UAAU;EACnB;EACA,IAAI,gBAAgB;GAClB,OAAO,UAAU;EACnB;EACA,IAAI,QAAQ;GACV,OAAO,UAAU;EACnB;EACA,IAAI,eAAe;GACjB,OAAO,UAAU;EACnB;EACA,IAAI,oBAAoB;GACtB,OAAO,UAAU;EACnB;EACA,IAAI,qBAAqB;GACvB,OAAO,UAAU;EACnB;EACA,IAAI,iBAAiB;GACnB,OAAO,UAAU;EACnB;CACF,CAAC;CAED,MAAM,aAAa,iBAAiB;EAElC,QADqB,MAAM,MAAM,GAAG,SAAS,GAAG,SAAS,CACrC,IAAI,SAAS,KAAK,aAAa,SAAS,GAAG,SAAS,CAAC,IAAK;CAChF,CAAC;CAED,MAAM,YAAY,iBAAiB;EACjC,OAAO,UAAU,WAAW;CAC9B,CAAC;CAED,MAAM,eAAe,kBAAoC;EACvD,YAAY,WAAW;EACvB,WAAW,UAAU;CACvB,EAAE;CAEF,MAAM,cAAc,eAClB;EACE,IAAI,WAAW;GACb,OAAO,MAAM;EACf;EACA,OAAO,MAAM;EACb,OAAO,MAAM;EACb,kBAAkB;CACpB,GACA,YACF;CAEA,MAAM,WAAW,iBAAiB,eAAe,WAAW,EAAE,QAAQ,KAAK,CAAC,CAAC;CAE7E,OACE,CAAC,QACK,SAAS,OACT,UAAU,YACd,OAAO,YAAY,MAAM,GACzB,OAAO,YAAY,MAAM,GACzB,MAAM,MAAM,MACb;OACE,YAAY,eAAe,EAAE;IAChC,EAAE;AAEN"}
|
package/dist/Modal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../src/Modal.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,GAAG,EAST,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../src/Modal.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,GAAG,EAST,MAAM,UAAU,CAAC;AAUlB,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EAKrB,MAAM,SAAS,CAAC;AACjB,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AAiCpB,MAAM,WAAW,gBAAgB;IAC/B,gEAAgE;IAChE,UAAU,EAAE,OAAO,CAAC;IACpB,+DAA+D;IAC/D,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC5C,yCAAyC;IACzC,KAAK,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IAC9C,wCAAwC;IACxC,KAAK,CAAC,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;IAC1C,8CAA8C;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,oDAAoD;IACpD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gDAAgD;IAChD,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,sDAAsD;IACtD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qDAAqD;IACrD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAW,SAAQ,iBAAiB;CAAG;AAExD,OAAO,EAAE,0BAA0B,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,eAAO,MAAM,YAAY,wDAA6B,CAAC;AAEvD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CA+LlE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,CAAC,OAAO,CAIpD;AAqQD,eAAe,KAAK,CAAC"}
|