@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":"ToggleButton.js","names":["JSX","createContext","createMemo","splitProps","useContext","createToggleButton","createToggleButtonGroupItem","createFocusRing","createHover","mergeProps","AriaToggleButtonProps","Key","RenderChildren","ClassNameOrFunction","StyleOrFunction","SlotProps","useRenderProps","filterDOMProps","useToggleButtonGroupStateContext","RefLike","el","T","current","assignRef","ref","ToggleButtonRenderProps","isHovered","isPressed","isFocused","isFocusVisible","isDisabled","isSelected","ToggleButtonProps","Omit","toggleKey","id","children","class","style","HTMLButtonElement","ToggleButtonContext","resolveDisabledValue","ToggleButton","props","Element","contextProps","mergedProps","local","ariaProps","groupState","groupKey","standaloneAriaProps","toggleAria","focusProps","hoverProps","renderValues","renderProps","defaultClassName","domProps","filtered","global","Record","onClick","cleanButtonProps","_ref1","rest","buttonProps","cleanFocusProps","_ref2","cleanHoverProps","_ref3","_el$","_$getNextElement","_tmpl$","_$use","_$spread","_$mergeProps","slot","data-pressed","undefined","data-hovered","data-focused","data-focus-visible","data-disabled","data-selected","_$insert","renderChildren","_$runHydrationEvents"],"sources":["../src/ToggleButton.tsx"],"sourcesContent":["/**\n * ToggleButton component for solidaria-components\n *\n * A pre-wired headless toggle button that combines pressed + selected state.\n * Port direction: react-aria-components/src/ToggleButton.tsx\n */\n\nimport { type JSX, createContext, createMemo, splitProps, useContext } from \"solid-js\";\nimport {\n createToggleButton,\n createToggleButtonGroupItem,\n createFocusRing,\n createHover,\n mergeProps,\n type AriaToggleButtonProps,\n} from \"@proyecto-viviana/solidaria\";\nimport type { Key } 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 { useToggleButtonGroupStateContext } from \"./ToggleButtonGroup\";\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\") {\n ref(el);\n } else {\n ref.current = el;\n }\n}\n\nexport interface ToggleButtonRenderProps {\n isHovered: boolean;\n isPressed: boolean;\n isFocused: boolean;\n isFocusVisible: boolean;\n isDisabled: boolean;\n isSelected: boolean;\n}\n\nexport interface ToggleButtonProps extends Omit<AriaToggleButtonProps, \"children\">, SlotProps {\n /** Key used when inside ToggleButtonGroup selection state. */\n toggleKey?: Key;\n /** Preferred group key prop, parity with RAC item id usage. */\n id?: Key;\n children?: RenderChildren<ToggleButtonRenderProps>;\n class?: ClassNameOrFunction<ToggleButtonRenderProps>;\n style?: StyleOrFunction<ToggleButtonRenderProps>;\n /** Ref for the underlying button element. */\n ref?: RefLike<HTMLButtonElement>;\n}\n\nexport const ToggleButtonContext = createContext<ToggleButtonProps | null>(null);\n\nfunction resolveDisabledValue(isDisabled: AriaToggleButtonProps[\"isDisabled\"]): boolean {\n if (typeof isDisabled === \"function\") {\n return isDisabled();\n }\n return !!isDisabled;\n}\n\nexport function ToggleButton(props: ToggleButtonProps): JSX.Element {\n const contextProps = useContext(ToggleButtonContext);\n const mergedProps = (contextProps ? mergeProps(contextProps, props) : props) as ToggleButtonProps;\n\n const [local, ariaProps] = splitProps(mergedProps, [\n \"children\",\n \"class\",\n \"style\",\n \"ref\",\n \"slot\",\n \"toggleKey\",\n \"id\",\n ]);\n const groupState = useToggleButtonGroupStateContext();\n const groupKey = local.id ?? local.toggleKey;\n const standaloneAriaProps = mergeProps<AriaToggleButtonProps>(ariaProps, {\n get id() {\n return local.id;\n },\n });\n\n const toggleAria =\n groupState && groupKey != null\n ? createToggleButtonGroupItem(\n {\n ...ariaProps,\n id: groupKey,\n },\n groupState,\n )\n : createToggleButton(standaloneAriaProps);\n\n const isDisabled = () => resolveDisabledValue(ariaProps.isDisabled) || !!groupState?.isDisabled;\n\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n const { isHovered, hoverProps } = createHover({\n get isDisabled() {\n return isDisabled();\n },\n });\n\n const renderValues = createMemo<ToggleButtonRenderProps>(() => ({\n isHovered: isHovered(),\n isPressed: toggleAria.isPressed(),\n isFocused: isFocused(),\n isFocusVisible: isFocusVisible(),\n isDisabled: isDisabled(),\n isSelected: toggleAria.isSelected(),\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return local.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-ToggleButton\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() => {\n const filtered = filterDOMProps(ariaProps, { global: true });\n delete (filtered as Record<string, unknown>).onClick;\n delete (filtered as Record<string, unknown>).id;\n return filtered;\n });\n\n const cleanButtonProps = () => {\n const { ref: _ref1, ...rest } = toggleAria.buttonProps as Record<string, unknown>;\n return rest;\n };\n const cleanFocusProps = () => {\n const { ref: _ref2, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n const cleanHoverProps = () => {\n const { ref: _ref3, ...rest } = hoverProps as Record<string, unknown>;\n return rest;\n };\n\n return (\n <button\n {...domProps()}\n {...cleanButtonProps()}\n {...cleanFocusProps()}\n {...cleanHoverProps()}\n class={renderProps.class()}\n style={renderProps.style()}\n ref={(el) => assignRef(local.ref, el)}\n slot={local.slot}\n data-pressed={toggleAria.isPressed() || undefined}\n data-hovered={isHovered() || undefined}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n data-disabled={isDisabled() || undefined}\n data-selected={toggleAria.isSelected() || undefined}\n >\n {renderProps.renderChildren()}\n </button>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { filterDOMProps, useRenderProps } from "./utils.jsx";
|
|
2
|
+
import { useToggleButtonGroupStateContext } from "./ToggleButtonGroup.jsx";
|
|
3
|
+
import { createContext, createMemo, splitProps, useContext } from "solid-js";
|
|
4
|
+
import { createFocusRing, createHover, createToggleButton, createToggleButtonGroupItem, mergeProps as mergeProps$1 } from "@proyecto-viviana/solidaria";
|
|
5
|
+
//#region src/ToggleButton.tsx
|
|
6
|
+
/**
|
|
7
|
+
* ToggleButton component for solidaria-components
|
|
8
|
+
*
|
|
9
|
+
* A pre-wired headless toggle button that combines pressed + selected state.
|
|
10
|
+
* Port direction: react-aria-components/src/ToggleButton.tsx
|
|
11
|
+
*/
|
|
12
|
+
function assignRef(ref, el) {
|
|
13
|
+
if (!ref) return;
|
|
14
|
+
if (typeof ref === "function") ref(el);
|
|
15
|
+
else ref.current = el;
|
|
16
|
+
}
|
|
17
|
+
const ToggleButtonContext = createContext(null);
|
|
18
|
+
function resolveDisabledValue(isDisabled) {
|
|
19
|
+
if (typeof isDisabled === "function") return isDisabled();
|
|
20
|
+
return !!isDisabled;
|
|
21
|
+
}
|
|
22
|
+
function ToggleButton(props) {
|
|
23
|
+
const contextProps = useContext(ToggleButtonContext);
|
|
24
|
+
const [local, ariaProps] = splitProps(contextProps ? mergeProps$1(contextProps, props) : props, [
|
|
25
|
+
"children",
|
|
26
|
+
"class",
|
|
27
|
+
"style",
|
|
28
|
+
"ref",
|
|
29
|
+
"slot",
|
|
30
|
+
"toggleKey",
|
|
31
|
+
"id"
|
|
32
|
+
]);
|
|
33
|
+
const groupState = useToggleButtonGroupStateContext();
|
|
34
|
+
const groupKey = local.id ?? local.toggleKey;
|
|
35
|
+
const standaloneAriaProps = mergeProps$1(ariaProps, { get id() {
|
|
36
|
+
return local.id;
|
|
37
|
+
} });
|
|
38
|
+
const toggleAria = groupState && groupKey != null ? createToggleButtonGroupItem({
|
|
39
|
+
...ariaProps,
|
|
40
|
+
id: groupKey
|
|
41
|
+
}, groupState) : createToggleButton(standaloneAriaProps);
|
|
42
|
+
const isDisabled = () => resolveDisabledValue(ariaProps.isDisabled) || !!groupState?.isDisabled;
|
|
43
|
+
const { isFocused, isFocusVisible, focusProps } = createFocusRing();
|
|
44
|
+
const { isHovered, hoverProps } = createHover({ get isDisabled() {
|
|
45
|
+
return isDisabled();
|
|
46
|
+
} });
|
|
47
|
+
const renderValues = createMemo(() => ({
|
|
48
|
+
isHovered: isHovered(),
|
|
49
|
+
isPressed: toggleAria.isPressed(),
|
|
50
|
+
isFocused: isFocused(),
|
|
51
|
+
isFocusVisible: isFocusVisible(),
|
|
52
|
+
isDisabled: isDisabled(),
|
|
53
|
+
isSelected: toggleAria.isSelected()
|
|
54
|
+
}));
|
|
55
|
+
const renderProps = useRenderProps({
|
|
56
|
+
get children() {
|
|
57
|
+
return local.children;
|
|
58
|
+
},
|
|
59
|
+
class: local.class,
|
|
60
|
+
style: local.style,
|
|
61
|
+
defaultClassName: "solidaria-ToggleButton"
|
|
62
|
+
}, renderValues);
|
|
63
|
+
const domProps = createMemo(() => {
|
|
64
|
+
const filtered = filterDOMProps(ariaProps, { global: true });
|
|
65
|
+
delete filtered.onClick;
|
|
66
|
+
delete filtered.id;
|
|
67
|
+
return filtered;
|
|
68
|
+
});
|
|
69
|
+
const cleanButtonProps = () => {
|
|
70
|
+
const { ref: _ref1, ...rest } = toggleAria.buttonProps;
|
|
71
|
+
return rest;
|
|
72
|
+
};
|
|
73
|
+
const cleanFocusProps = () => {
|
|
74
|
+
const { ref: _ref2, ...rest } = focusProps;
|
|
75
|
+
return rest;
|
|
76
|
+
};
|
|
77
|
+
const cleanHoverProps = () => {
|
|
78
|
+
const { ref: _ref3, ...rest } = hoverProps;
|
|
79
|
+
return rest;
|
|
80
|
+
};
|
|
81
|
+
return <button {...domProps()} {...cleanButtonProps()} {...cleanFocusProps()} {...cleanHoverProps()} class={renderProps.class()} style={renderProps.style()} ref={(el) => assignRef(local.ref, el)} slot={local.slot} data-pressed={toggleAria.isPressed() || void 0} data-hovered={isHovered() || void 0} data-focused={isFocused() || void 0} data-focus-visible={isFocusVisible() || void 0} data-disabled={isDisabled() || void 0} data-selected={toggleAria.isSelected() || void 0}>
|
|
82
|
+
{renderProps.renderChildren()}
|
|
83
|
+
</button>;
|
|
84
|
+
}
|
|
85
|
+
//#endregion
|
|
86
|
+
export { ToggleButton, ToggleButtonContext };
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=ToggleButton.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToggleButton.jsx","names":["mergeProps"],"sources":["../src/ToggleButton.tsx"],"sourcesContent":["/**\n * ToggleButton component for solidaria-components\n *\n * A pre-wired headless toggle button that combines pressed + selected state.\n * Port direction: react-aria-components/src/ToggleButton.tsx\n */\n\nimport { type JSX, createContext, createMemo, splitProps, useContext } from \"solid-js\";\nimport {\n createToggleButton,\n createToggleButtonGroupItem,\n createFocusRing,\n createHover,\n mergeProps,\n type AriaToggleButtonProps,\n} from \"@proyecto-viviana/solidaria\";\nimport type { Key } 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 { useToggleButtonGroupStateContext } from \"./ToggleButtonGroup\";\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\") {\n ref(el);\n } else {\n ref.current = el;\n }\n}\n\nexport interface ToggleButtonRenderProps {\n isHovered: boolean;\n isPressed: boolean;\n isFocused: boolean;\n isFocusVisible: boolean;\n isDisabled: boolean;\n isSelected: boolean;\n}\n\nexport interface ToggleButtonProps extends Omit<AriaToggleButtonProps, \"children\">, SlotProps {\n /** Key used when inside ToggleButtonGroup selection state. */\n toggleKey?: Key;\n /** Preferred group key prop, parity with RAC item id usage. */\n id?: Key;\n children?: RenderChildren<ToggleButtonRenderProps>;\n class?: ClassNameOrFunction<ToggleButtonRenderProps>;\n style?: StyleOrFunction<ToggleButtonRenderProps>;\n /** Ref for the underlying button element. */\n ref?: RefLike<HTMLButtonElement>;\n}\n\nexport const ToggleButtonContext = createContext<ToggleButtonProps | null>(null);\n\nfunction resolveDisabledValue(isDisabled: AriaToggleButtonProps[\"isDisabled\"]): boolean {\n if (typeof isDisabled === \"function\") {\n return isDisabled();\n }\n return !!isDisabled;\n}\n\nexport function ToggleButton(props: ToggleButtonProps): JSX.Element {\n const contextProps = useContext(ToggleButtonContext);\n const mergedProps = (contextProps ? mergeProps(contextProps, props) : props) as ToggleButtonProps;\n\n const [local, ariaProps] = splitProps(mergedProps, [\n \"children\",\n \"class\",\n \"style\",\n \"ref\",\n \"slot\",\n \"toggleKey\",\n \"id\",\n ]);\n const groupState = useToggleButtonGroupStateContext();\n const groupKey = local.id ?? local.toggleKey;\n const standaloneAriaProps = mergeProps<AriaToggleButtonProps>(ariaProps, {\n get id() {\n return local.id;\n },\n });\n\n const toggleAria =\n groupState && groupKey != null\n ? createToggleButtonGroupItem(\n {\n ...ariaProps,\n id: groupKey,\n },\n groupState,\n )\n : createToggleButton(standaloneAriaProps);\n\n const isDisabled = () => resolveDisabledValue(ariaProps.isDisabled) || !!groupState?.isDisabled;\n\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n const { isHovered, hoverProps } = createHover({\n get isDisabled() {\n return isDisabled();\n },\n });\n\n const renderValues = createMemo<ToggleButtonRenderProps>(() => ({\n isHovered: isHovered(),\n isPressed: toggleAria.isPressed(),\n isFocused: isFocused(),\n isFocusVisible: isFocusVisible(),\n isDisabled: isDisabled(),\n isSelected: toggleAria.isSelected(),\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return local.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-ToggleButton\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() => {\n const filtered = filterDOMProps(ariaProps, { global: true });\n delete (filtered as Record<string, unknown>).onClick;\n delete (filtered as Record<string, unknown>).id;\n return filtered;\n });\n\n const cleanButtonProps = () => {\n const { ref: _ref1, ...rest } = toggleAria.buttonProps as Record<string, unknown>;\n return rest;\n };\n const cleanFocusProps = () => {\n const { ref: _ref2, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n const cleanHoverProps = () => {\n const { ref: _ref3, ...rest } = hoverProps as Record<string, unknown>;\n return rest;\n };\n\n return (\n <button\n {...domProps()}\n {...cleanButtonProps()}\n {...cleanFocusProps()}\n {...cleanHoverProps()}\n class={renderProps.class()}\n style={renderProps.style()}\n ref={(el) => assignRef(local.ref, el)}\n slot={local.slot}\n data-pressed={toggleAria.isPressed() || undefined}\n data-hovered={isHovered() || undefined}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n data-disabled={isDisabled() || undefined}\n data-selected={toggleAria.isSelected() || undefined}\n >\n {renderProps.renderChildren()}\n </button>\n );\n}\n"],"mappings":";;;;;;;;;;;AA6BA,SAAS,UAAa,KAAiB,IAAa;CAClD,IAAI,CAAC,KAAK;CACV,IAAI,OAAO,QAAQ,YACjB,IAAI,EAAE;MAEN,IAAI,UAAU;AAElB;AAuBA,MAAa,sBAAsB,cAAwC,IAAI;AAE/E,SAAS,qBAAqB,YAA0D;CACtF,IAAI,OAAO,eAAe,YACxB,OAAO,WAAW;CAEpB,OAAO,CAAC,CAAC;AACX;AAEA,SAAgB,aAAa,OAAuC;CAClE,MAAM,eAAe,WAAW,mBAAmB;CAGnD,MAAM,CAAC,OAAO,aAAa,WAFN,eAAeA,aAAW,cAAc,KAAK,IAAI,OAEnB;EACjD;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,MAAM,aAAa,iCAAiC;CACpD,MAAM,WAAW,MAAM,MAAM,MAAM;CACnC,MAAM,sBAAsBA,aAAkC,WAAW,EACvE,IAAI,KAAK;EACP,OAAO,MAAM;CACf,EACF,CAAC;CAED,MAAM,aACJ,cAAc,YAAY,OACtB,4BACE;EACE,GAAG;EACH,IAAI;CACN,GACA,UACF,IACA,mBAAmB,mBAAmB;CAE5C,MAAM,mBAAmB,qBAAqB,UAAU,UAAU,KAAK,CAAC,CAAC,YAAY;CAErF,MAAM,EAAE,WAAW,gBAAgB,eAAe,gBAAgB;CAClE,MAAM,EAAE,WAAW,eAAe,YAAY,EAC5C,IAAI,aAAa;EACf,OAAO,WAAW;CACpB,EACF,CAAC;CAED,MAAM,eAAe,kBAA2C;EAC9D,WAAW,UAAU;EACrB,WAAW,WAAW,UAAU;EAChC,WAAW,UAAU;EACrB,gBAAgB,eAAe;EAC/B,YAAY,WAAW;EACvB,YAAY,WAAW,WAAW;CACpC,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;EAChC,MAAM,WAAW,eAAe,WAAW,EAAE,QAAQ,KAAK,CAAC;EAC3D,OAAQ,SAAqC;EAC7C,OAAQ,SAAqC;EAC7C,OAAO;CACT,CAAC;CAED,MAAM,yBAAyB;EAC7B,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS,WAAW;EAC3C,OAAO;CACT;CACA,MAAM,wBAAwB;EAC5B,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS;EAChC,OAAO;CACT;CACA,MAAM,wBAAwB;EAC5B,MAAM,EAAE,KAAK,OAAO,GAAG,SAAS;EAChC,OAAO;CACT;CAEA,OACE,CAAC,WACK,SAAS,OACT,iBAAiB,OACjB,gBAAgB,OAChB,gBAAgB,GACpB,OAAO,YAAY,MAAM,GACzB,OAAO,YAAY,MAAM,GACzB,MAAM,OAAO,UAAU,MAAM,KAAK,EAAE,GACpC,MAAM,MAAM,MACZ,cAAc,WAAW,UAAU,KAAK,KAAA,GACxC,cAAc,UAAU,KAAK,KAAA,GAC7B,cAAc,UAAU,KAAK,KAAA,GAC7B,oBAAoB,eAAe,KAAK,KAAA,GACxC,eAAe,WAAW,KAAK,KAAA,GAC/B,eAAe,WAAW,WAAW,KAAK,KAAA,GAC3C;OACE,YAAY,eAAe,EAAE;IAChC,EAAE;AAEN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToggleButtonGroup.d.ts","sourceRoot":"","sources":["../src/ToggleButtonGroup.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAqD,MAAM,UAAU,CAAC;AAEvF,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,EAGf,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC;IACvC,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,WAAW,sBACf,SACE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,mBAAmB,CAAC,EAC9F,SAAS;IACX,aAAa,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IACtC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7B,mBAAmB,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IACpC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAC7C,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,cAAc,CAAC,4BAA4B,CAAC,CAAC;IACxD,KAAK,CAAC,EAAE,mBAAmB,CAAC,4BAA4B,CAAC,CAAC;IAC1D,KAAK,CAAC,EAAE,eAAe,CAAC,4BAA4B,CAAC,CAAC;CACvD;AAED,eAAO,MAAM,wBAAwB,2DAAqD,CAAC;AAC3F,eAAO,MAAM,6BAA6B,qDAA+C,CAAC;AAC1F,eAAO,MAAM,uBAAuB,qDAAgC,CAAC;AACrE,MAAM,MAAM,kCAAkC,GAAG,gBAAgB,CAAC;AAElE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"ToggleButtonGroup.d.ts","sourceRoot":"","sources":["../src/ToggleButtonGroup.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAqD,MAAM,UAAU,CAAC;AAEvF,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,EAGf,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,YAAY,GAAG,UAAU,CAAC;IACvC,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED,MAAM,WAAW,sBACf,SACE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,mBAAmB,CAAC,EAC9F,SAAS;IACX,aAAa,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IACtC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,YAAY,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7B,mBAAmB,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IACpC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAC7C,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,cAAc,CAAC,4BAA4B,CAAC,CAAC;IACxD,KAAK,CAAC,EAAE,mBAAmB,CAAC,4BAA4B,CAAC,CAAC;IAC1D,KAAK,CAAC,EAAE,eAAe,CAAC,4BAA4B,CAAC,CAAC;CACvD;AAED,eAAO,MAAM,wBAAwB,2DAAqD,CAAC;AAC3F,eAAO,MAAM,6BAA6B,qDAA+C,CAAC;AAC1F,eAAO,MAAM,uBAAuB,qDAAgC,CAAC;AACrE,MAAM,MAAM,kCAAkC,GAAG,gBAAgB,CAAC;AAElE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAwF5E;AAED,wBAAgB,gCAAgC,IAAI,gBAAgB,GAAG,IAAI,CAE1E"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { filterDOMProps, useRenderProps } from "./utils.js";
|
|
2
|
+
import { createComponent, getNextElement, insert, mergeProps, runHydrationEvents, spread, template, use } from "solid-js/web";
|
|
3
|
+
import { createContext, createMemo, splitProps, useContext } from "solid-js";
|
|
4
|
+
import { createToggleButtonGroup, mergeProps as mergeProps$2 } from "@proyecto-viviana/solidaria";
|
|
5
|
+
import { createToggleGroupState } from "@proyecto-viviana/solid-stately";
|
|
6
|
+
//#region src/ToggleButtonGroup.tsx
|
|
7
|
+
/**
|
|
8
|
+
* ToggleButtonGroup component for solidaria-components.
|
|
9
|
+
*
|
|
10
|
+
* Groups toggle buttons with single/multiple selection state.
|
|
11
|
+
* Parity target: react-aria-components/src/ToggleButtonGroup.tsx
|
|
12
|
+
*/
|
|
13
|
+
var _tmpl$ = /*#__PURE__*/ template(`<div>`);
|
|
14
|
+
const ToggleButtonGroupContext = createContext(null);
|
|
15
|
+
const ToggleButtonGroupStateContext = createContext(null);
|
|
16
|
+
const ToggleGroupStateContext = ToggleButtonGroupStateContext;
|
|
17
|
+
function ToggleButtonGroup(props) {
|
|
18
|
+
const [local, domProps] = splitProps(props, [
|
|
19
|
+
"selectionMode",
|
|
20
|
+
"disallowEmptySelection",
|
|
21
|
+
"selectedKeys",
|
|
22
|
+
"defaultSelectedKeys",
|
|
23
|
+
"onSelectionChange",
|
|
24
|
+
"orientation",
|
|
25
|
+
"isDisabled",
|
|
26
|
+
"children",
|
|
27
|
+
"class",
|
|
28
|
+
"style",
|
|
29
|
+
"ref",
|
|
30
|
+
"slot",
|
|
31
|
+
"aria-label",
|
|
32
|
+
"aria-labelledby"
|
|
33
|
+
]);
|
|
34
|
+
const state = createToggleGroupState(() => ({
|
|
35
|
+
selectionMode: local.selectionMode,
|
|
36
|
+
disallowEmptySelection: local.disallowEmptySelection,
|
|
37
|
+
selectedKeys: local.selectedKeys,
|
|
38
|
+
defaultSelectedKeys: local.defaultSelectedKeys,
|
|
39
|
+
onSelectionChange: local.onSelectionChange,
|
|
40
|
+
isDisabled: !!local.isDisabled
|
|
41
|
+
}));
|
|
42
|
+
const { groupProps } = createToggleButtonGroup({
|
|
43
|
+
get orientation() {
|
|
44
|
+
return local.orientation;
|
|
45
|
+
},
|
|
46
|
+
get isDisabled() {
|
|
47
|
+
return !!local.isDisabled;
|
|
48
|
+
},
|
|
49
|
+
get "aria-label"() {
|
|
50
|
+
return local["aria-label"];
|
|
51
|
+
},
|
|
52
|
+
get "aria-labelledby"() {
|
|
53
|
+
return local["aria-labelledby"];
|
|
54
|
+
}
|
|
55
|
+
}, state);
|
|
56
|
+
const renderProps = useRenderProps({
|
|
57
|
+
get children() {
|
|
58
|
+
return local.children;
|
|
59
|
+
},
|
|
60
|
+
class: local.class,
|
|
61
|
+
style: local.style,
|
|
62
|
+
defaultClassName: "solidaria-ToggleButtonGroup"
|
|
63
|
+
}, () => ({
|
|
64
|
+
orientation: local.orientation ?? "horizontal",
|
|
65
|
+
isDisabled: !!local.isDisabled,
|
|
66
|
+
state
|
|
67
|
+
}));
|
|
68
|
+
const filteredDomProps = createMemo(() => filterDOMProps(domProps, { global: true }));
|
|
69
|
+
const mergedGroupProps = createMemo(() => mergeProps$2(filteredDomProps(), groupProps));
|
|
70
|
+
return (() => {
|
|
71
|
+
var _el$ = getNextElement(_tmpl$);
|
|
72
|
+
use((el) => {
|
|
73
|
+
if (!local.ref) return;
|
|
74
|
+
if (typeof local.ref === "function") local.ref(el);
|
|
75
|
+
}, _el$);
|
|
76
|
+
spread(_el$, mergeProps(() => mergedGroupProps(), {
|
|
77
|
+
get ["class"]() {
|
|
78
|
+
return renderProps.class();
|
|
79
|
+
},
|
|
80
|
+
get style() {
|
|
81
|
+
return renderProps.style();
|
|
82
|
+
},
|
|
83
|
+
get slot() {
|
|
84
|
+
return local.slot;
|
|
85
|
+
},
|
|
86
|
+
get ["data-orientation"]() {
|
|
87
|
+
return local.orientation ?? "horizontal";
|
|
88
|
+
},
|
|
89
|
+
get ["data-disabled"]() {
|
|
90
|
+
return local.isDisabled || void 0;
|
|
91
|
+
}
|
|
92
|
+
}), false, true);
|
|
93
|
+
insert(_el$, createComponent(ToggleButtonGroupContext.Provider, {
|
|
94
|
+
value: props,
|
|
95
|
+
get children() {
|
|
96
|
+
return createComponent(ToggleButtonGroupStateContext.Provider, {
|
|
97
|
+
value: state,
|
|
98
|
+
get children() {
|
|
99
|
+
return renderProps.renderChildren();
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}));
|
|
104
|
+
runHydrationEvents();
|
|
105
|
+
return _el$;
|
|
106
|
+
})();
|
|
107
|
+
}
|
|
108
|
+
function useToggleButtonGroupStateContext() {
|
|
109
|
+
return useContext(ToggleButtonGroupStateContext);
|
|
110
|
+
}
|
|
111
|
+
//#endregion
|
|
112
|
+
export { ToggleButtonGroup, ToggleButtonGroupContext, ToggleButtonGroupStateContext, ToggleGroupStateContext, useToggleButtonGroupStateContext };
|
|
113
|
+
|
|
114
|
+
//# sourceMappingURL=ToggleButtonGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToggleButtonGroup.js","names":["JSX","createContext","createMemo","splitProps","useContext","createToggleButtonGroup","mergeProps","createToggleGroupState","Key","ToggleGroupState","ClassNameOrFunction","StyleOrFunction","RenderChildren","SlotProps","useRenderProps","filterDOMProps","ToggleButtonGroupRenderProps","orientation","isDisabled","state","ToggleButtonGroupProps","Omit","HTMLAttributes","HTMLDivElement","selectionMode","disallowEmptySelection","selectedKeys","Iterable","defaultSelectedKeys","onSelectionChange","keys","Set","children","class","style","ToggleButtonGroupContext","ToggleButtonGroupStateContext","ToggleGroupStateContext","ToggleButtonGroupStateContextValue","ToggleButtonGroup","props","Element","local","domProps","groupProps","aria-label","aria-labelledby","renderProps","defaultClassName","filteredDomProps","global","mergedGroupProps","Record","_el$","_$getNextElement","_tmpl$","_$use","el","ref","_$spread","_$mergeProps","slot","data-orientation","data-disabled","undefined","_$insert","_$createComponent","Provider","value","renderChildren","_$runHydrationEvents","useToggleButtonGroupStateContext"],"sources":["../src/ToggleButtonGroup.tsx"],"sourcesContent":["/**\n * ToggleButtonGroup component for solidaria-components.\n *\n * Groups toggle buttons with single/multiple selection state.\n * Parity target: react-aria-components/src/ToggleButtonGroup.tsx\n */\n\nimport { type JSX, createContext, createMemo, splitProps, useContext } from \"solid-js\";\nimport { createToggleButtonGroup, mergeProps } from \"@proyecto-viviana/solidaria\";\nimport {\n createToggleGroupState,\n type Key,\n type ToggleGroupState,\n} from \"@proyecto-viviana/solid-stately\";\nimport {\n type ClassNameOrFunction,\n type StyleOrFunction,\n type RenderChildren,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\n\nexport interface ToggleButtonGroupRenderProps {\n orientation: \"horizontal\" | \"vertical\";\n isDisabled: boolean;\n state: ToggleGroupState;\n}\n\nexport interface ToggleButtonGroupProps\n extends\n Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\" | \"style\" | \"onSelectionChange\">,\n SlotProps {\n selectionMode?: \"single\" | \"multiple\";\n disallowEmptySelection?: boolean;\n selectedKeys?: Iterable<Key>;\n defaultSelectedKeys?: Iterable<Key>;\n onSelectionChange?: (keys: Set<Key>) => void;\n orientation?: \"horizontal\" | \"vertical\";\n isDisabled?: boolean;\n children?: RenderChildren<ToggleButtonGroupRenderProps>;\n class?: ClassNameOrFunction<ToggleButtonGroupRenderProps>;\n style?: StyleOrFunction<ToggleButtonGroupRenderProps>;\n}\n\nexport const ToggleButtonGroupContext = createContext<ToggleButtonGroupProps | null>(null);\nexport const ToggleButtonGroupStateContext = createContext<ToggleGroupState | null>(null);\nexport const ToggleGroupStateContext = ToggleButtonGroupStateContext;\nexport type ToggleButtonGroupStateContextValue = ToggleGroupState;\n\nexport function ToggleButtonGroup(props: ToggleButtonGroupProps): JSX.Element {\n const [local, domProps] = splitProps(props, [\n \"selectionMode\",\n \"disallowEmptySelection\",\n \"selectedKeys\",\n \"defaultSelectedKeys\",\n \"onSelectionChange\",\n \"orientation\",\n \"isDisabled\",\n \"children\",\n \"class\",\n \"style\",\n \"ref\",\n \"slot\",\n \"aria-label\",\n \"aria-labelledby\",\n ]);\n\n const state = createToggleGroupState(() => ({\n selectionMode: local.selectionMode,\n disallowEmptySelection: local.disallowEmptySelection,\n selectedKeys: local.selectedKeys,\n defaultSelectedKeys: local.defaultSelectedKeys,\n onSelectionChange: local.onSelectionChange,\n isDisabled: !!local.isDisabled,\n }));\n\n const { groupProps } = createToggleButtonGroup(\n {\n get orientation() {\n return local.orientation;\n },\n get isDisabled() {\n return !!local.isDisabled;\n },\n get \"aria-label\"() {\n return local[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return local[\"aria-labelledby\"];\n },\n },\n state,\n );\n\n const renderProps = useRenderProps(\n {\n get children() {\n return local.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-ToggleButtonGroup\",\n },\n () => ({\n orientation: local.orientation ?? \"horizontal\",\n isDisabled: !!local.isDisabled,\n state,\n }),\n );\n\n const filteredDomProps = createMemo(() => filterDOMProps(domProps, { global: true }));\n const mergedGroupProps = createMemo(() =>\n mergeProps(filteredDomProps(), groupProps as Record<string, unknown>),\n );\n\n return (\n <div\n {...(mergedGroupProps() as JSX.HTMLAttributes<HTMLDivElement>)}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n data-orientation={local.orientation ?? \"horizontal\"}\n data-disabled={local.isDisabled || undefined}\n ref={(el) => {\n if (!local.ref) return;\n if (typeof local.ref === \"function\") {\n local.ref(el);\n }\n }}\n >\n <ToggleButtonGroupContext.Provider value={props}>\n <ToggleButtonGroupStateContext.Provider value={state}>\n {renderProps.renderChildren()}\n </ToggleButtonGroupStateContext.Provider>\n </ToggleButtonGroupContext.Provider>\n </div>\n );\n}\n\nexport function useToggleButtonGroupStateContext(): ToggleGroupState | null {\n return useContext(ToggleButtonGroupStateContext);\n}\n"],"mappings":";;;;;;;;;;;;;AA6CA,MAAamC,2BAA2BlC,cAA6C,IAAI;AACzF,MAAamC,gCAAgCnC,cAAuC,IAAI;AACxF,MAAaoC,0BAA0BD;AAGvC,SAAgBG,kBAAkBC,OAA4C;CAC5E,MAAM,CAACE,OAAOC,YAAYxC,WAAWqC,OAAO;EAC1C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CAAiB,CAClB;CAED,MAAMrB,QAAQZ,8BAA8B;EAC1CiB,eAAekB,MAAMlB;EACrBC,wBAAwBiB,MAAMjB;EAC9BC,cAAcgB,MAAMhB;EACpBE,qBAAqBc,MAAMd;EAC3BC,mBAAmBa,MAAMb;EACzBX,YAAY,CAAC,CAACwB,MAAMxB;CACtB,EAAE;CAEF,MAAM,EAAE0B,eAAevC,wBACrB;EACE,IAAIY,cAAc;GAChB,OAAOyB,MAAMzB;EACf;EACA,IAAIC,aAAa;GACf,OAAO,CAAC,CAACwB,MAAMxB;EACjB;EACA,IAAI,eAAe;GACjB,OAAOwB,MAAM;EACf;EACA,IAAI,oBAAoB;GACtB,OAAOA,MAAM;EACf;CACF,GACAvB,KACF;CAEA,MAAM4B,cAAcjC,eAClB;EACE,IAAIkB,WAAW;GACb,OAAOU,MAAMV;EACf;EACAC,OAAOS,MAAMT;EACbC,OAAOQ,MAAMR;EACbc,kBAAkB;CACpB,UACO;EACL/B,aAAayB,MAAMzB,eAAe;EAClCC,YAAY,CAAC,CAACwB,MAAMxB;EACpBC;CACF,EACF;CAEA,MAAM8B,mBAAmB/C,iBAAiBa,eAAe4B,UAAU,EAAEO,QAAQ,KAAK,CAAC,CAAC;CACpF,MAAMC,mBAAmBjD,iBACvBI,aAAW2C,iBAAiB,GAAGL,UAAqC,CACtE;CAEA,cAAA;EAAA,IAAAS,OAAAC,eAAAC,MAAA;EAAAC,KAQUC,OAAO;GACX,IAAI,CAACf,MAAMgB,KAAK;GAChB,IAAI,OAAOhB,MAAMgB,QAAQ,YACvBhB,MAAMgB,IAAID,EAAE;EAEhB,GAACJ,IAAA;EAAAM,OAAAN,MAAAO,iBAXIT,iBAAiB,GAAuC;GAAA,KAAA,WAAA;IAAA,OACtDJ,YAAYd,MAAM;GAAC;GAAA,IAC1BC,QAAK;IAAA,OAAEa,YAAYb,MAAM;GAAC;GAAA,IAC1B2B,OAAI;IAAA,OAAEnB,MAAMmB;GAAI;GAAA,KAAA,sBAAA;IAAA,OACEnB,MAAMzB,eAAe;GAAY;GAAA,KAAA,mBAAA;IAAA,OACpCyB,MAAMxB,cAAc8C,KAAAA;GAAS;EAAA,CAAA,GAAA,OAAA,IAAA;EAAAC,OAAAZ,MAAAa,gBAQ3C/B,yBAAyBgC,UAAQ;GAACC,OAAO5B;GAAK,IAAAR,WAAA;IAAA,OAAAkC,gBAC5C9B,8BAA8B+B,UAAQ;KAACC,OAAOjD;KAAK,IAAAa,WAAA;MAAA,OACjDe,YAAYsB,eAAe;KAAC;IAAA,CAAA;GAAA;EAAA,CAAA,CAAA;EAAAC,mBAAA;EAAA,OAAAjB;CAAA,EAAA,CAAA;AAKvC;AAEA,SAAgBkB,mCAA4D;CAC1E,OAAOnE,WAAWgC,6BAA6B;AACjD"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { filterDOMProps, useRenderProps } from "./utils.jsx";
|
|
2
|
+
import { createContext, createMemo, splitProps, useContext } from "solid-js";
|
|
3
|
+
import { createToggleButtonGroup, mergeProps as mergeProps$1 } from "@proyecto-viviana/solidaria";
|
|
4
|
+
import { createToggleGroupState } from "@proyecto-viviana/solid-stately";
|
|
5
|
+
//#region src/ToggleButtonGroup.tsx
|
|
6
|
+
/**
|
|
7
|
+
* ToggleButtonGroup component for solidaria-components.
|
|
8
|
+
*
|
|
9
|
+
* Groups toggle buttons with single/multiple selection state.
|
|
10
|
+
* Parity target: react-aria-components/src/ToggleButtonGroup.tsx
|
|
11
|
+
*/
|
|
12
|
+
const ToggleButtonGroupContext = createContext(null);
|
|
13
|
+
const ToggleButtonGroupStateContext = createContext(null);
|
|
14
|
+
const ToggleGroupStateContext = ToggleButtonGroupStateContext;
|
|
15
|
+
function ToggleButtonGroup(props) {
|
|
16
|
+
const [local, domProps] = splitProps(props, [
|
|
17
|
+
"selectionMode",
|
|
18
|
+
"disallowEmptySelection",
|
|
19
|
+
"selectedKeys",
|
|
20
|
+
"defaultSelectedKeys",
|
|
21
|
+
"onSelectionChange",
|
|
22
|
+
"orientation",
|
|
23
|
+
"isDisabled",
|
|
24
|
+
"children",
|
|
25
|
+
"class",
|
|
26
|
+
"style",
|
|
27
|
+
"ref",
|
|
28
|
+
"slot",
|
|
29
|
+
"aria-label",
|
|
30
|
+
"aria-labelledby"
|
|
31
|
+
]);
|
|
32
|
+
const state = createToggleGroupState(() => ({
|
|
33
|
+
selectionMode: local.selectionMode,
|
|
34
|
+
disallowEmptySelection: local.disallowEmptySelection,
|
|
35
|
+
selectedKeys: local.selectedKeys,
|
|
36
|
+
defaultSelectedKeys: local.defaultSelectedKeys,
|
|
37
|
+
onSelectionChange: local.onSelectionChange,
|
|
38
|
+
isDisabled: !!local.isDisabled
|
|
39
|
+
}));
|
|
40
|
+
const { groupProps } = createToggleButtonGroup({
|
|
41
|
+
get orientation() {
|
|
42
|
+
return local.orientation;
|
|
43
|
+
},
|
|
44
|
+
get isDisabled() {
|
|
45
|
+
return !!local.isDisabled;
|
|
46
|
+
},
|
|
47
|
+
get "aria-label"() {
|
|
48
|
+
return local["aria-label"];
|
|
49
|
+
},
|
|
50
|
+
get "aria-labelledby"() {
|
|
51
|
+
return local["aria-labelledby"];
|
|
52
|
+
}
|
|
53
|
+
}, state);
|
|
54
|
+
const renderProps = useRenderProps({
|
|
55
|
+
get children() {
|
|
56
|
+
return local.children;
|
|
57
|
+
},
|
|
58
|
+
class: local.class,
|
|
59
|
+
style: local.style,
|
|
60
|
+
defaultClassName: "solidaria-ToggleButtonGroup"
|
|
61
|
+
}, () => ({
|
|
62
|
+
orientation: local.orientation ?? "horizontal",
|
|
63
|
+
isDisabled: !!local.isDisabled,
|
|
64
|
+
state
|
|
65
|
+
}));
|
|
66
|
+
const filteredDomProps = createMemo(() => filterDOMProps(domProps, { global: true }));
|
|
67
|
+
const mergedGroupProps = createMemo(() => mergeProps$1(filteredDomProps(), groupProps));
|
|
68
|
+
return <div {...mergedGroupProps()} class={renderProps.class()} style={renderProps.style()} slot={local.slot} data-orientation={local.orientation ?? "horizontal"} data-disabled={local.isDisabled || void 0} ref={(el) => {
|
|
69
|
+
if (!local.ref) return;
|
|
70
|
+
if (typeof local.ref === "function") local.ref(el);
|
|
71
|
+
}}>
|
|
72
|
+
<ToggleButtonGroupContext.Provider value={props}>
|
|
73
|
+
<ToggleButtonGroupStateContext.Provider value={state}>
|
|
74
|
+
{renderProps.renderChildren()}
|
|
75
|
+
</ToggleButtonGroupStateContext.Provider>
|
|
76
|
+
</ToggleButtonGroupContext.Provider>
|
|
77
|
+
</div>;
|
|
78
|
+
}
|
|
79
|
+
function useToggleButtonGroupStateContext() {
|
|
80
|
+
return useContext(ToggleButtonGroupStateContext);
|
|
81
|
+
}
|
|
82
|
+
//#endregion
|
|
83
|
+
export { ToggleButtonGroup, ToggleButtonGroupContext, ToggleButtonGroupStateContext, ToggleGroupStateContext, useToggleButtonGroupStateContext };
|
|
84
|
+
|
|
85
|
+
//# sourceMappingURL=ToggleButtonGroup.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToggleButtonGroup.jsx","names":["mergeProps"],"sources":["../src/ToggleButtonGroup.tsx"],"sourcesContent":["/**\n * ToggleButtonGroup component for solidaria-components.\n *\n * Groups toggle buttons with single/multiple selection state.\n * Parity target: react-aria-components/src/ToggleButtonGroup.tsx\n */\n\nimport { type JSX, createContext, createMemo, splitProps, useContext } from \"solid-js\";\nimport { createToggleButtonGroup, mergeProps } from \"@proyecto-viviana/solidaria\";\nimport {\n createToggleGroupState,\n type Key,\n type ToggleGroupState,\n} from \"@proyecto-viviana/solid-stately\";\nimport {\n type ClassNameOrFunction,\n type StyleOrFunction,\n type RenderChildren,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\n\nexport interface ToggleButtonGroupRenderProps {\n orientation: \"horizontal\" | \"vertical\";\n isDisabled: boolean;\n state: ToggleGroupState;\n}\n\nexport interface ToggleButtonGroupProps\n extends\n Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\" | \"style\" | \"onSelectionChange\">,\n SlotProps {\n selectionMode?: \"single\" | \"multiple\";\n disallowEmptySelection?: boolean;\n selectedKeys?: Iterable<Key>;\n defaultSelectedKeys?: Iterable<Key>;\n onSelectionChange?: (keys: Set<Key>) => void;\n orientation?: \"horizontal\" | \"vertical\";\n isDisabled?: boolean;\n children?: RenderChildren<ToggleButtonGroupRenderProps>;\n class?: ClassNameOrFunction<ToggleButtonGroupRenderProps>;\n style?: StyleOrFunction<ToggleButtonGroupRenderProps>;\n}\n\nexport const ToggleButtonGroupContext = createContext<ToggleButtonGroupProps | null>(null);\nexport const ToggleButtonGroupStateContext = createContext<ToggleGroupState | null>(null);\nexport const ToggleGroupStateContext = ToggleButtonGroupStateContext;\nexport type ToggleButtonGroupStateContextValue = ToggleGroupState;\n\nexport function ToggleButtonGroup(props: ToggleButtonGroupProps): JSX.Element {\n const [local, domProps] = splitProps(props, [\n \"selectionMode\",\n \"disallowEmptySelection\",\n \"selectedKeys\",\n \"defaultSelectedKeys\",\n \"onSelectionChange\",\n \"orientation\",\n \"isDisabled\",\n \"children\",\n \"class\",\n \"style\",\n \"ref\",\n \"slot\",\n \"aria-label\",\n \"aria-labelledby\",\n ]);\n\n const state = createToggleGroupState(() => ({\n selectionMode: local.selectionMode,\n disallowEmptySelection: local.disallowEmptySelection,\n selectedKeys: local.selectedKeys,\n defaultSelectedKeys: local.defaultSelectedKeys,\n onSelectionChange: local.onSelectionChange,\n isDisabled: !!local.isDisabled,\n }));\n\n const { groupProps } = createToggleButtonGroup(\n {\n get orientation() {\n return local.orientation;\n },\n get isDisabled() {\n return !!local.isDisabled;\n },\n get \"aria-label\"() {\n return local[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return local[\"aria-labelledby\"];\n },\n },\n state,\n );\n\n const renderProps = useRenderProps(\n {\n get children() {\n return local.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-ToggleButtonGroup\",\n },\n () => ({\n orientation: local.orientation ?? \"horizontal\",\n isDisabled: !!local.isDisabled,\n state,\n }),\n );\n\n const filteredDomProps = createMemo(() => filterDOMProps(domProps, { global: true }));\n const mergedGroupProps = createMemo(() =>\n mergeProps(filteredDomProps(), groupProps as Record<string, unknown>),\n );\n\n return (\n <div\n {...(mergedGroupProps() as JSX.HTMLAttributes<HTMLDivElement>)}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n data-orientation={local.orientation ?? \"horizontal\"}\n data-disabled={local.isDisabled || undefined}\n ref={(el) => {\n if (!local.ref) return;\n if (typeof local.ref === \"function\") {\n local.ref(el);\n }\n }}\n >\n <ToggleButtonGroupContext.Provider value={props}>\n <ToggleButtonGroupStateContext.Provider value={state}>\n {renderProps.renderChildren()}\n </ToggleButtonGroupStateContext.Provider>\n </ToggleButtonGroupContext.Provider>\n </div>\n );\n}\n\nexport function useToggleButtonGroupStateContext(): ToggleGroupState | null {\n return useContext(ToggleButtonGroupStateContext);\n}\n"],"mappings":";;;;;;;;;;;AA6CA,MAAa,2BAA2B,cAA6C,IAAI;AACzF,MAAa,gCAAgC,cAAuC,IAAI;AACxF,MAAa,0BAA0B;AAGvC,SAAgB,kBAAkB,OAA4C;CAC5E,MAAM,CAAC,OAAO,YAAY,WAAW,OAAO;EAC1C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,QAAQ,8BAA8B;EAC1C,eAAe,MAAM;EACrB,wBAAwB,MAAM;EAC9B,cAAc,MAAM;EACpB,qBAAqB,MAAM;EAC3B,mBAAmB,MAAM;EACzB,YAAY,CAAC,CAAC,MAAM;CACtB,EAAE;CAEF,MAAM,EAAE,eAAe,wBACrB;EACE,IAAI,cAAc;GAChB,OAAO,MAAM;EACf;EACA,IAAI,aAAa;GACf,OAAO,CAAC,CAAC,MAAM;EACjB;EACA,IAAI,eAAe;GACjB,OAAO,MAAM;EACf;EACA,IAAI,oBAAoB;GACtB,OAAO,MAAM;EACf;CACF,GACA,KACF;CAEA,MAAM,cAAc,eAClB;EACE,IAAI,WAAW;GACb,OAAO,MAAM;EACf;EACA,OAAO,MAAM;EACb,OAAO,MAAM;EACb,kBAAkB;CACpB,UACO;EACL,aAAa,MAAM,eAAe;EAClC,YAAY,CAAC,CAAC,MAAM;EACpB;CACF,EACF;CAEA,MAAM,mBAAmB,iBAAiB,eAAe,UAAU,EAAE,QAAQ,KAAK,CAAC,CAAC;CACpF,MAAM,mBAAmB,iBACvBA,aAAW,iBAAiB,GAAG,UAAqC,CACtE;CAEA,OACE,CAAC,QACM,iBAAiB,GACtB,OAAO,YAAY,MAAM,GACzB,OAAO,YAAY,MAAM,GACzB,MAAM,MAAM,MACZ,kBAAkB,MAAM,eAAe,cACvC,eAAe,MAAM,cAAc,KAAA,GACnC,MAAM,OAAO;EACX,IAAI,CAAC,MAAM,KAAK;EAChB,IAAI,OAAO,MAAM,QAAQ,YACvB,MAAM,IAAI,EAAE;CAEhB,GACD;MACC,CAAC,yBAAyB,SAAS,OAAO,OAAO;QAC/C,CAAC,8BAA8B,SAAS,OAAO,OAAO;WACnD,YAAY,eAAe,EAAE;QAChC,EAAE,8BAA8B,SAAS;MAC3C,EAAE,yBAAyB,SAAS;IACtC,EAAE;AAEN;AAEA,SAAgB,mCAA4D;CAC1E,OAAO,WAAW,6BAA6B;AACjD"}
|
package/dist/Toolbar.js
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { filterDOMProps } from "./utils.js";
|
|
2
|
+
import { getNextElement, insert, mergeProps, runHydrationEvents, spread, template, use } from "solid-js/web";
|
|
3
|
+
import { createContext, createMemo, splitProps, useContext } from "solid-js";
|
|
4
|
+
import { createToolbar } from "@proyecto-viviana/solidaria";
|
|
5
|
+
//#region src/Toolbar.tsx
|
|
6
|
+
/**
|
|
7
|
+
* Toolbar component for solidaria-components
|
|
8
|
+
*
|
|
9
|
+
* Pre-wired headless toolbar component that combines aria hooks.
|
|
10
|
+
* Port of react-aria-components/src/Toolbar.tsx
|
|
11
|
+
*/
|
|
12
|
+
var _tmpl$ = /*#__PURE__*/ template(`<div>`);
|
|
13
|
+
const ToolbarContext = createContext(null);
|
|
14
|
+
/**
|
|
15
|
+
* A toolbar is a container for a set of interactive controls,
|
|
16
|
+
* such as buttons, checkboxes, or links, with arrow key navigation.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <Toolbar aria-label="Text formatting">
|
|
21
|
+
* <Button>Bold</Button>
|
|
22
|
+
* <Button>Italic</Button>
|
|
23
|
+
* <Button>Underline</Button>
|
|
24
|
+
* </Toolbar>
|
|
25
|
+
*
|
|
26
|
+
* // With render props
|
|
27
|
+
* <Toolbar orientation="vertical">
|
|
28
|
+
* {({ orientation }) => (
|
|
29
|
+
* <div data-orientation={orientation}>
|
|
30
|
+
* <Button>Cut</Button>
|
|
31
|
+
* <Button>Copy</Button>
|
|
32
|
+
* <Button>Paste</Button>
|
|
33
|
+
* </div>
|
|
34
|
+
* )}
|
|
35
|
+
* </Toolbar>
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
function Toolbar(props) {
|
|
39
|
+
const [local, ariaProps, domProps] = splitProps(props, [
|
|
40
|
+
"class",
|
|
41
|
+
"style",
|
|
42
|
+
"slot",
|
|
43
|
+
"children",
|
|
44
|
+
"ref"
|
|
45
|
+
], [
|
|
46
|
+
"orientation",
|
|
47
|
+
"aria-label",
|
|
48
|
+
"aria-labelledby"
|
|
49
|
+
]);
|
|
50
|
+
const ctx = useContext(ToolbarContext);
|
|
51
|
+
const slotProps = () => {
|
|
52
|
+
if (ctx?.slots && local.slot) return ctx.slots[local.slot] || {};
|
|
53
|
+
return {};
|
|
54
|
+
};
|
|
55
|
+
const { toolbarProps, orientation } = createToolbar({
|
|
56
|
+
get orientation() {
|
|
57
|
+
return ariaProps.orientation;
|
|
58
|
+
},
|
|
59
|
+
get "aria-label"() {
|
|
60
|
+
return ariaProps["aria-label"] ?? slotProps()["aria-label"];
|
|
61
|
+
},
|
|
62
|
+
get "aria-labelledby"() {
|
|
63
|
+
return ariaProps["aria-labelledby"];
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
const renderValues = createMemo(() => ({ orientation: orientation() }));
|
|
67
|
+
const resolvedClass = createMemo(() => {
|
|
68
|
+
const cls = local.class;
|
|
69
|
+
if (typeof cls === "function") return cls(renderValues());
|
|
70
|
+
return cls ?? "solidaria-Toolbar";
|
|
71
|
+
});
|
|
72
|
+
const resolvedStyle = createMemo(() => {
|
|
73
|
+
const style = local.style;
|
|
74
|
+
if (typeof style === "function") return style(renderValues());
|
|
75
|
+
return style;
|
|
76
|
+
});
|
|
77
|
+
const resolvedChildren = createMemo(() => {
|
|
78
|
+
const children = props.children;
|
|
79
|
+
if (typeof children === "function") return children(renderValues());
|
|
80
|
+
return children;
|
|
81
|
+
});
|
|
82
|
+
const filteredDOMProps = createMemo(() => filterDOMProps(domProps, { global: true }));
|
|
83
|
+
return (() => {
|
|
84
|
+
var _el$ = getNextElement(_tmpl$);
|
|
85
|
+
use((el) => {
|
|
86
|
+
if (!local.ref) return;
|
|
87
|
+
if (typeof local.ref === "function") local.ref(el);
|
|
88
|
+
else local.ref.current = el;
|
|
89
|
+
}, _el$);
|
|
90
|
+
spread(_el$, mergeProps(filteredDOMProps, toolbarProps, {
|
|
91
|
+
get ["class"]() {
|
|
92
|
+
return resolvedClass();
|
|
93
|
+
},
|
|
94
|
+
get style() {
|
|
95
|
+
return resolvedStyle();
|
|
96
|
+
},
|
|
97
|
+
get slot() {
|
|
98
|
+
return local.slot;
|
|
99
|
+
},
|
|
100
|
+
get ["data-orientation"]() {
|
|
101
|
+
return orientation();
|
|
102
|
+
}
|
|
103
|
+
}), false, true);
|
|
104
|
+
insert(_el$, resolvedChildren);
|
|
105
|
+
runHydrationEvents();
|
|
106
|
+
return _el$;
|
|
107
|
+
})();
|
|
108
|
+
}
|
|
109
|
+
//#endregion
|
|
110
|
+
export { Toolbar, ToolbarContext };
|
|
111
|
+
|
|
112
|
+
//# sourceMappingURL=Toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toolbar.js","names":["JSX","ParentProps","createContext","createMemo","splitProps","useContext","createToolbar","AriaToolbarProps","Orientation","SlotProps","filterDOMProps","ToolbarRenderProps","orientation","ToolbarProps","class","renderProps","style","CSSProperties","key","ref","el","HTMLDivElement","current","ToolbarContextValue","slots","name","Record","ToolbarContext","Toolbar","props","Element","local","ariaProps","domProps","ctx","slotProps","slot","toolbarProps","aria-label","aria-labelledby","renderValues","resolvedClass","cls","resolvedStyle","resolvedChildren","children","filteredDOMProps","global","_el$","_$getNextElement","_tmpl$","_$use","_$spread","_$mergeProps","data-orientation","_$insert","_$runHydrationEvents"],"sources":["../src/Toolbar.tsx"],"sourcesContent":["/**\n * Toolbar component for solidaria-components\n *\n * Pre-wired headless toolbar component that combines aria hooks.\n * Port of react-aria-components/src/Toolbar.tsx\n */\n\nimport {\n type JSX,\n type ParentProps,\n createContext,\n createMemo,\n splitProps,\n useContext,\n} from \"solid-js\";\nimport {\n createToolbar,\n type AriaToolbarProps,\n type Orientation,\n} from \"@proyecto-viviana/solidaria\";\nimport { type SlotProps, filterDOMProps } from \"./utils\";\n\nexport interface ToolbarRenderProps {\n /** The orientation of the toolbar. */\n orientation: Orientation;\n}\n\nexport interface ToolbarProps extends AriaToolbarProps, ParentProps, SlotProps {\n /** The CSS className for the element. A function may be provided to receive render props. */\n class?: string | ((renderProps: ToolbarRenderProps) => string);\n /** The inline style for the element. A function may be provided to receive render props. */\n style?: JSX.CSSProperties | ((renderProps: ToolbarRenderProps) => JSX.CSSProperties);\n /** Additional data-* attributes. */\n [key: `data-${string}`]: string | undefined;\n /** Ref for the toolbar element. */\n ref?: ((el: HTMLDivElement) => void) | { current?: HTMLDivElement | null };\n}\n\nexport interface ToolbarContextValue {\n slots?: {\n [name: string]: Record<string, unknown>;\n };\n}\n\nexport const ToolbarContext = createContext<ToolbarContextValue | null>(null);\n\n/**\n * A toolbar is a container for a set of interactive controls,\n * such as buttons, checkboxes, or links, with arrow key navigation.\n *\n * @example\n * ```tsx\n * <Toolbar aria-label=\"Text formatting\">\n * <Button>Bold</Button>\n * <Button>Italic</Button>\n * <Button>Underline</Button>\n * </Toolbar>\n *\n * // With render props\n * <Toolbar orientation=\"vertical\">\n * {({ orientation }) => (\n * <div data-orientation={orientation}>\n * <Button>Cut</Button>\n * <Button>Copy</Button>\n * <Button>Paste</Button>\n * </div>\n * )}\n * </Toolbar>\n * ```\n */\nexport function Toolbar(props: ToolbarProps): JSX.Element {\n const [local, ariaProps, domProps] = splitProps(\n props,\n [\"class\", \"style\", \"slot\", \"children\", \"ref\"],\n [\"orientation\", \"aria-label\", \"aria-labelledby\"],\n );\n\n const ctx = useContext(ToolbarContext);\n const slotProps = () => {\n if (ctx?.slots && local.slot) {\n return ctx.slots[local.slot] || {};\n }\n return {};\n };\n\n const { toolbarProps, orientation } = createToolbar({\n get orientation() {\n return ariaProps.orientation;\n },\n get \"aria-label\"() {\n return (\n (ariaProps[\"aria-label\"] as string | undefined) ??\n (slotProps()[\"aria-label\"] as string | undefined)\n );\n },\n get \"aria-labelledby\"() {\n return ariaProps[\"aria-labelledby\"] as string | undefined;\n },\n });\n\n const renderValues = createMemo<ToolbarRenderProps>(() => ({\n orientation: orientation(),\n }));\n\n const resolvedClass = createMemo(() => {\n const cls = local.class;\n if (typeof cls === \"function\") {\n return cls(renderValues());\n }\n return cls ?? \"solidaria-Toolbar\";\n });\n\n const resolvedStyle = createMemo(() => {\n const style = local.style;\n if (typeof style === \"function\") {\n return style(renderValues());\n }\n return style;\n });\n\n const resolvedChildren = createMemo(() => {\n const children = props.children;\n if (typeof children === \"function\") {\n return (children as (props: ToolbarRenderProps) => JSX.Element)(renderValues());\n }\n return children;\n });\n\n const filteredDOMProps = createMemo(() => filterDOMProps(domProps, { global: true }));\n\n return (\n <div\n {...filteredDOMProps()}\n {...toolbarProps}\n class={resolvedClass()}\n style={resolvedStyle()}\n slot={local.slot}\n data-orientation={orientation()}\n ref={(el) => {\n if (!local.ref) return;\n if (typeof local.ref === \"function\") {\n local.ref(el);\n } else {\n local.ref.current = el;\n }\n }}\n >\n {resolvedChildren()}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;AA4CA,MAAa2B,iBAAiBzB,cAA0C,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;AA0B5E,SAAgB0B,QAAQC,OAAkC;CACxD,MAAM,CAACE,OAAOC,WAAWC,YAAY7B,WACnCyB,OACA;EAAC;EAAS;EAAS;EAAQ;EAAY;CAAK,GAC5C;EAAC;EAAe;EAAc;CAAiB,CACjD;CAEA,MAAMK,MAAM7B,WAAWsB,cAAc;CACrC,MAAMQ,kBAAkB;EACtB,IAAID,KAAKV,SAASO,MAAMK,MACtB,OAAOF,IAAIV,MAAMO,MAAMK,SAAS,CAAC;EAEnC,OAAO,CAAC;CACV;CAEA,MAAM,EAAEC,cAAczB,gBAAgBN,cAAc;EAClD,IAAIM,cAAc;GAChB,OAAOoB,UAAUpB;EACnB;EACA,IAAI,eAAe;GACjB,OACGoB,UAAU,iBACVG,UAAU,CAAC,CAAC;EAEjB;EACA,IAAI,oBAAoB;GACtB,OAAOH,UAAU;EACnB;CACF,CAAC;CAED,MAAMQ,eAAerC,kBAAsC,EACzDS,aAAaA,YAAY,EAC3B,EAAE;CAEF,MAAM6B,gBAAgBtC,iBAAiB;EACrC,MAAMuC,MAAMX,MAAMjB;EAClB,IAAI,OAAO4B,QAAQ,YACjB,OAAOA,IAAIF,aAAa,CAAC;EAE3B,OAAOE,OAAO;CAChB,CAAC;CAED,MAAMC,gBAAgBxC,iBAAiB;EACrC,MAAMa,QAAQe,MAAMf;EACpB,IAAI,OAAOA,UAAU,YACnB,OAAOA,MAAMwB,aAAa,CAAC;EAE7B,OAAOxB;CACT,CAAC;CAED,MAAM4B,mBAAmBzC,iBAAiB;EACxC,MAAM0C,WAAWhB,MAAMgB;EACvB,IAAI,OAAOA,aAAa,YACtB,OAAQA,SAAwDL,aAAa,CAAC;EAEhF,OAAOK;CACT,CAAC;CAED,MAAMC,mBAAmB3C,iBAAiBO,eAAeuB,UAAU,EAAEc,QAAQ,KAAK,CAAC,CAAC;CAEpF,cAAA;EAAA,IAAAC,OAAAC,eAAAC,MAAA;EAAAC,KAQU/B,OAAO;GACX,IAAI,CAACW,MAAMZ,KAAK;GAChB,IAAI,OAAOY,MAAMZ,QAAQ,YACvBY,MAAMZ,IAAIC,EAAE;QAEZW,MAAMZ,IAAIG,UAAUF;EAExB,GAAC4B,IAAA;EAAAI,OAAAJ,MAAAK,WAbGP,kBACAT,cAAY;GAAA,KAAA,WAAA;IAAA,OACTI,cAAc;GAAC;GAAA,IACtBzB,QAAK;IAAA,OAAE2B,cAAc;GAAC;GAAA,IACtBP,OAAI;IAAA,OAAEL,MAAMK;GAAI;GAAA,KAAA,sBAAA;IAAA,OACExB,YAAY;GAAC;EAAA,CAAA,GAAA,OAAA,IAAA;EAAA2C,OAAAP,MAU9BJ,gBAAgB;EAAAY,mBAAA;EAAA,OAAAR;CAAA,EAAA,CAAA;AAGvB"}
|
package/dist/Toolbar.jsx
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { filterDOMProps } from "./utils.jsx";
|
|
2
|
+
import { createContext, createMemo, splitProps, useContext } from "solid-js";
|
|
3
|
+
import { createToolbar } from "@proyecto-viviana/solidaria";
|
|
4
|
+
//#region src/Toolbar.tsx
|
|
5
|
+
/**
|
|
6
|
+
* Toolbar component for solidaria-components
|
|
7
|
+
*
|
|
8
|
+
* Pre-wired headless toolbar component that combines aria hooks.
|
|
9
|
+
* Port of react-aria-components/src/Toolbar.tsx
|
|
10
|
+
*/
|
|
11
|
+
const ToolbarContext = createContext(null);
|
|
12
|
+
/**
|
|
13
|
+
* A toolbar is a container for a set of interactive controls,
|
|
14
|
+
* such as buttons, checkboxes, or links, with arrow key navigation.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* <Toolbar aria-label="Text formatting">
|
|
19
|
+
* <Button>Bold</Button>
|
|
20
|
+
* <Button>Italic</Button>
|
|
21
|
+
* <Button>Underline</Button>
|
|
22
|
+
* </Toolbar>
|
|
23
|
+
*
|
|
24
|
+
* // With render props
|
|
25
|
+
* <Toolbar orientation="vertical">
|
|
26
|
+
* {({ orientation }) => (
|
|
27
|
+
* <div data-orientation={orientation}>
|
|
28
|
+
* <Button>Cut</Button>
|
|
29
|
+
* <Button>Copy</Button>
|
|
30
|
+
* <Button>Paste</Button>
|
|
31
|
+
* </div>
|
|
32
|
+
* )}
|
|
33
|
+
* </Toolbar>
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
function Toolbar(props) {
|
|
37
|
+
const [local, ariaProps, domProps] = splitProps(props, [
|
|
38
|
+
"class",
|
|
39
|
+
"style",
|
|
40
|
+
"slot",
|
|
41
|
+
"children",
|
|
42
|
+
"ref"
|
|
43
|
+
], [
|
|
44
|
+
"orientation",
|
|
45
|
+
"aria-label",
|
|
46
|
+
"aria-labelledby"
|
|
47
|
+
]);
|
|
48
|
+
const ctx = useContext(ToolbarContext);
|
|
49
|
+
const slotProps = () => {
|
|
50
|
+
if (ctx?.slots && local.slot) return ctx.slots[local.slot] || {};
|
|
51
|
+
return {};
|
|
52
|
+
};
|
|
53
|
+
const { toolbarProps, orientation } = createToolbar({
|
|
54
|
+
get orientation() {
|
|
55
|
+
return ariaProps.orientation;
|
|
56
|
+
},
|
|
57
|
+
get "aria-label"() {
|
|
58
|
+
return ariaProps["aria-label"] ?? slotProps()["aria-label"];
|
|
59
|
+
},
|
|
60
|
+
get "aria-labelledby"() {
|
|
61
|
+
return ariaProps["aria-labelledby"];
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
const renderValues = createMemo(() => ({ orientation: orientation() }));
|
|
65
|
+
const resolvedClass = createMemo(() => {
|
|
66
|
+
const cls = local.class;
|
|
67
|
+
if (typeof cls === "function") return cls(renderValues());
|
|
68
|
+
return cls ?? "solidaria-Toolbar";
|
|
69
|
+
});
|
|
70
|
+
const resolvedStyle = createMemo(() => {
|
|
71
|
+
const style = local.style;
|
|
72
|
+
if (typeof style === "function") return style(renderValues());
|
|
73
|
+
return style;
|
|
74
|
+
});
|
|
75
|
+
const resolvedChildren = createMemo(() => {
|
|
76
|
+
const children = props.children;
|
|
77
|
+
if (typeof children === "function") return children(renderValues());
|
|
78
|
+
return children;
|
|
79
|
+
});
|
|
80
|
+
const filteredDOMProps = createMemo(() => filterDOMProps(domProps, { global: true }));
|
|
81
|
+
return <div {...filteredDOMProps()} {...toolbarProps} class={resolvedClass()} style={resolvedStyle()} slot={local.slot} data-orientation={orientation()} ref={(el) => {
|
|
82
|
+
if (!local.ref) return;
|
|
83
|
+
if (typeof local.ref === "function") local.ref(el);
|
|
84
|
+
else local.ref.current = el;
|
|
85
|
+
}}>
|
|
86
|
+
{resolvedChildren()}
|
|
87
|
+
</div>;
|
|
88
|
+
}
|
|
89
|
+
//#endregion
|
|
90
|
+
export { Toolbar, ToolbarContext };
|
|
91
|
+
|
|
92
|
+
//# sourceMappingURL=Toolbar.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toolbar.jsx","names":[],"sources":["../src/Toolbar.tsx"],"sourcesContent":["/**\n * Toolbar component for solidaria-components\n *\n * Pre-wired headless toolbar component that combines aria hooks.\n * Port of react-aria-components/src/Toolbar.tsx\n */\n\nimport {\n type JSX,\n type ParentProps,\n createContext,\n createMemo,\n splitProps,\n useContext,\n} from \"solid-js\";\nimport {\n createToolbar,\n type AriaToolbarProps,\n type Orientation,\n} from \"@proyecto-viviana/solidaria\";\nimport { type SlotProps, filterDOMProps } from \"./utils\";\n\nexport interface ToolbarRenderProps {\n /** The orientation of the toolbar. */\n orientation: Orientation;\n}\n\nexport interface ToolbarProps extends AriaToolbarProps, ParentProps, SlotProps {\n /** The CSS className for the element. A function may be provided to receive render props. */\n class?: string | ((renderProps: ToolbarRenderProps) => string);\n /** The inline style for the element. A function may be provided to receive render props. */\n style?: JSX.CSSProperties | ((renderProps: ToolbarRenderProps) => JSX.CSSProperties);\n /** Additional data-* attributes. */\n [key: `data-${string}`]: string | undefined;\n /** Ref for the toolbar element. */\n ref?: ((el: HTMLDivElement) => void) | { current?: HTMLDivElement | null };\n}\n\nexport interface ToolbarContextValue {\n slots?: {\n [name: string]: Record<string, unknown>;\n };\n}\n\nexport const ToolbarContext = createContext<ToolbarContextValue | null>(null);\n\n/**\n * A toolbar is a container for a set of interactive controls,\n * such as buttons, checkboxes, or links, with arrow key navigation.\n *\n * @example\n * ```tsx\n * <Toolbar aria-label=\"Text formatting\">\n * <Button>Bold</Button>\n * <Button>Italic</Button>\n * <Button>Underline</Button>\n * </Toolbar>\n *\n * // With render props\n * <Toolbar orientation=\"vertical\">\n * {({ orientation }) => (\n * <div data-orientation={orientation}>\n * <Button>Cut</Button>\n * <Button>Copy</Button>\n * <Button>Paste</Button>\n * </div>\n * )}\n * </Toolbar>\n * ```\n */\nexport function Toolbar(props: ToolbarProps): JSX.Element {\n const [local, ariaProps, domProps] = splitProps(\n props,\n [\"class\", \"style\", \"slot\", \"children\", \"ref\"],\n [\"orientation\", \"aria-label\", \"aria-labelledby\"],\n );\n\n const ctx = useContext(ToolbarContext);\n const slotProps = () => {\n if (ctx?.slots && local.slot) {\n return ctx.slots[local.slot] || {};\n }\n return {};\n };\n\n const { toolbarProps, orientation } = createToolbar({\n get orientation() {\n return ariaProps.orientation;\n },\n get \"aria-label\"() {\n return (\n (ariaProps[\"aria-label\"] as string | undefined) ??\n (slotProps()[\"aria-label\"] as string | undefined)\n );\n },\n get \"aria-labelledby\"() {\n return ariaProps[\"aria-labelledby\"] as string | undefined;\n },\n });\n\n const renderValues = createMemo<ToolbarRenderProps>(() => ({\n orientation: orientation(),\n }));\n\n const resolvedClass = createMemo(() => {\n const cls = local.class;\n if (typeof cls === \"function\") {\n return cls(renderValues());\n }\n return cls ?? \"solidaria-Toolbar\";\n });\n\n const resolvedStyle = createMemo(() => {\n const style = local.style;\n if (typeof style === \"function\") {\n return style(renderValues());\n }\n return style;\n });\n\n const resolvedChildren = createMemo(() => {\n const children = props.children;\n if (typeof children === \"function\") {\n return (children as (props: ToolbarRenderProps) => JSX.Element)(renderValues());\n }\n return children;\n });\n\n const filteredDOMProps = createMemo(() => filterDOMProps(domProps, { global: true }));\n\n return (\n <div\n {...filteredDOMProps()}\n {...toolbarProps}\n class={resolvedClass()}\n style={resolvedStyle()}\n slot={local.slot}\n data-orientation={orientation()}\n ref={(el) => {\n if (!local.ref) return;\n if (typeof local.ref === \"function\") {\n local.ref(el);\n } else {\n local.ref.current = el;\n }\n }}\n >\n {resolvedChildren()}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;AA4CA,MAAa,iBAAiB,cAA0C,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;AA0B5E,SAAgB,QAAQ,OAAkC;CACxD,MAAM,CAAC,OAAO,WAAW,YAAY,WACnC,OACA;EAAC;EAAS;EAAS;EAAQ;EAAY;CAAK,GAC5C;EAAC;EAAe;EAAc;CAAiB,CACjD;CAEA,MAAM,MAAM,WAAW,cAAc;CACrC,MAAM,kBAAkB;EACtB,IAAI,KAAK,SAAS,MAAM,MACtB,OAAO,IAAI,MAAM,MAAM,SAAS,CAAC;EAEnC,OAAO,CAAC;CACV;CAEA,MAAM,EAAE,cAAc,gBAAgB,cAAc;EAClD,IAAI,cAAc;GAChB,OAAO,UAAU;EACnB;EACA,IAAI,eAAe;GACjB,OACG,UAAU,iBACV,UAAU,CAAC,CAAC;EAEjB;EACA,IAAI,oBAAoB;GACtB,OAAO,UAAU;EACnB;CACF,CAAC;CAED,MAAM,eAAe,kBAAsC,EACzD,aAAa,YAAY,EAC3B,EAAE;CAEF,MAAM,gBAAgB,iBAAiB;EACrC,MAAM,MAAM,MAAM;EAClB,IAAI,OAAO,QAAQ,YACjB,OAAO,IAAI,aAAa,CAAC;EAE3B,OAAO,OAAO;CAChB,CAAC;CAED,MAAM,gBAAgB,iBAAiB;EACrC,MAAM,QAAQ,MAAM;EACpB,IAAI,OAAO,UAAU,YACnB,OAAO,MAAM,aAAa,CAAC;EAE7B,OAAO;CACT,CAAC;CAED,MAAM,mBAAmB,iBAAiB;EACxC,MAAM,WAAW,MAAM;EACvB,IAAI,OAAO,aAAa,YACtB,OAAQ,SAAwD,aAAa,CAAC;EAEhF,OAAO;CACT,CAAC;CAED,MAAM,mBAAmB,iBAAiB,eAAe,UAAU,EAAE,QAAQ,KAAK,CAAC,CAAC;CAEpF,OACE,CAAC,QACK,iBAAiB,OACjB,cACJ,OAAO,cAAc,GACrB,OAAO,cAAc,GACrB,MAAM,MAAM,MACZ,kBAAkB,YAAY,GAC9B,MAAM,OAAO;EACX,IAAI,CAAC,MAAM,KAAK;EAChB,IAAI,OAAO,MAAM,QAAQ,YACvB,MAAM,IAAI,EAAE;OAEZ,MAAM,IAAI,UAAU;CAExB,GACD;OACE,iBAAiB,EAAE;IACtB,EAAE;AAEN"}
|
package/dist/Tooltip.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../src/Tooltip.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../src/Tooltip.tsx"],"names":[],"mappings":"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"}
|