@proyecto-viviana/solidaria-components 0.5.0 → 0.7.0-rc.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/LICENSE-APACHE-2.0 +201 -0
- package/NOTICE +91 -0
- package/README.md +4 -7
- package/dist/ActionBar.d.ts +2 -10
- package/dist/ActionBar.d.ts.map +1 -1
- package/dist/ActionBar.js +95 -59
- package/dist/ActionBar.js.map +1 -1
- package/dist/ActionBar.jsx +42 -15
- package/dist/ActionBar.jsx.map +1 -1
- package/dist/ActionGroup.d.ts +1 -12
- package/dist/ActionGroup.d.ts.map +1 -1
- package/dist/ActionGroup.js +66 -44
- package/dist/ActionGroup.js.map +1 -1
- package/dist/ActionGroup.jsx +25 -10
- package/dist/ActionGroup.jsx.map +1 -1
- package/dist/Alert.d.ts +4 -1
- package/dist/Alert.d.ts.map +1 -1
- package/dist/Alert.js +25 -17
- package/dist/Alert.js.map +1 -1
- package/dist/Alert.jsx +9 -5
- package/dist/Alert.jsx.map +1 -1
- package/dist/Autocomplete.d.ts +2 -9
- package/dist/Autocomplete.d.ts.map +1 -1
- package/dist/Autocomplete.js +18 -5
- package/dist/Autocomplete.js.map +1 -1
- package/dist/Autocomplete.jsx +20 -7
- package/dist/Autocomplete.jsx.map +1 -1
- package/dist/Breadcrumbs.d.ts +2 -7
- package/dist/Breadcrumbs.d.ts.map +1 -1
- package/dist/Breadcrumbs.js +71 -51
- package/dist/Breadcrumbs.js.map +1 -1
- package/dist/Breadcrumbs.jsx +25 -12
- package/dist/Breadcrumbs.jsx.map +1 -1
- package/dist/Button.d.ts +1 -7
- package/dist/Button.d.ts.map +1 -1
- package/dist/Button.js +125 -72
- package/dist/Button.js.map +1 -1
- package/dist/Button.jsx +105 -43
- package/dist/Button.jsx.map +1 -1
- package/dist/Calendar.d.ts +1 -7
- package/dist/Calendar.d.ts.map +1 -1
- package/dist/Calendar.js +297 -221
- package/dist/Calendar.js.map +1 -1
- package/dist/Calendar.jsx +52 -32
- package/dist/Calendar.jsx.map +1 -1
- package/dist/CalendarPicker.d.ts +1 -10
- package/dist/CalendarPicker.d.ts.map +1 -1
- package/dist/CalendarPicker.js +12 -0
- package/dist/CalendarPicker.js.map +1 -1
- package/dist/CalendarPicker.jsx +12 -0
- package/dist/CalendarPicker.jsx.map +1 -1
- package/dist/Checkbox.d.ts +2 -7
- package/dist/Checkbox.d.ts.map +1 -1
- package/dist/Checkbox.js +332 -270
- package/dist/Checkbox.js.map +1 -1
- package/dist/Checkbox.jsx +70 -77
- package/dist/Checkbox.jsx.map +1 -1
- package/dist/Collection.d.ts +33 -7
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +128 -74
- package/dist/Collection.js.map +1 -1
- package/dist/Collection.jsx +46 -7
- package/dist/Collection.jsx.map +1 -1
- package/dist/Color.d.ts +15 -20
- package/dist/Color.d.ts.map +1 -1
- package/dist/Color.js +572 -334
- package/dist/Color.js.map +1 -1
- package/dist/Color.jsx +205 -85
- package/dist/Color.jsx.map +1 -1
- package/dist/ColorEditor.d.ts +3 -1
- package/dist/ColorEditor.d.ts.map +1 -1
- package/dist/ColorEditor.js +147 -124
- package/dist/ColorEditor.js.map +1 -1
- package/dist/ColorEditor.jsx +4 -1
- package/dist/ColorEditor.jsx.map +1 -1
- package/dist/ComboBox.d.ts +31 -10
- package/dist/ComboBox.d.ts.map +1 -1
- package/dist/ComboBox.js +539 -274
- package/dist/ComboBox.js.map +1 -1
- package/dist/ComboBox.jsx +213 -70
- package/dist/ComboBox.jsx.map +1 -1
- package/dist/ContextualHelpTrigger.d.ts +1 -7
- package/dist/ContextualHelpTrigger.d.ts.map +1 -1
- package/dist/ContextualHelpTrigger.js +102 -72
- package/dist/ContextualHelpTrigger.js.map +1 -1
- package/dist/ContextualHelpTrigger.jsx +36 -16
- package/dist/ContextualHelpTrigger.jsx.map +1 -1
- package/dist/DateField.d.ts +2 -7
- package/dist/DateField.d.ts.map +1 -1
- package/dist/DateField.js +0 -2
- package/dist/DateField.jsx +0 -2
- package/dist/DateField2.js +194 -179
- package/dist/DateField2.js.map +1 -1
- package/dist/DateField2.jsx +58 -55
- package/dist/DateField2.jsx.map +1 -1
- package/dist/DatePicker.d.ts +7 -7
- package/dist/DatePicker.d.ts.map +1 -1
- package/dist/DatePicker.js +2 -2
- package/dist/DatePicker.jsx +2 -2
- package/dist/DatePicker2.js +357 -435
- package/dist/DatePicker2.js.map +1 -1
- package/dist/DatePicker2.jsx +109 -178
- package/dist/DatePicker2.jsx.map +1 -1
- package/dist/DateRangePickerContext.d.ts +7 -0
- package/dist/DateRangePickerContext.d.ts.map +1 -1
- package/dist/Dialog.d.ts +4 -9
- package/dist/Dialog.d.ts.map +1 -1
- package/dist/Dialog.js +168 -101
- package/dist/Dialog.js.map +1 -1
- package/dist/Dialog.jsx +75 -27
- package/dist/Dialog.jsx.map +1 -1
- package/dist/Disclosure.d.ts +1 -9
- package/dist/Disclosure.d.ts.map +1 -1
- package/dist/Disclosure.js +121 -79
- package/dist/Disclosure.js.map +1 -1
- package/dist/Disclosure.jsx +32 -19
- package/dist/Disclosure.jsx.map +1 -1
- package/dist/DragAndDrop.d.ts +9 -6
- package/dist/DragAndDrop.d.ts.map +1 -1
- package/dist/DragAndDrop.js +37 -22
- package/dist/DragAndDrop.js.map +1 -1
- package/dist/DragAndDrop.jsx +20 -4
- package/dist/DragAndDrop.jsx.map +1 -1
- package/dist/DragPreview.d.ts +1 -1
- package/dist/DragPreview.d.ts.map +1 -1
- package/dist/DropZone.d.ts +1 -7
- package/dist/DropZone.d.ts.map +1 -1
- package/dist/DropZone.js +74 -40
- package/dist/DropZone.js.map +1 -1
- package/dist/DropZone.jsx +24 -8
- package/dist/DropZone.jsx.map +1 -1
- package/dist/ElementTag.d.ts +9 -20
- package/dist/ElementTag.d.ts.map +1 -1
- package/dist/ElementTag.js +8 -210
- package/dist/ElementTag.js.map +1 -1
- package/dist/ElementTag.jsx +8 -57
- package/dist/ElementTag.jsx.map +1 -1
- package/dist/FieldError.d.ts +8 -7
- package/dist/FieldError.d.ts.map +1 -1
- package/dist/FieldError.js +33 -13
- package/dist/FieldError.js.map +1 -1
- package/dist/FieldError.jsx +20 -5
- package/dist/FieldError.jsx.map +1 -1
- package/dist/FileTrigger.d.ts +1 -7
- package/dist/FileTrigger.d.ts.map +1 -1
- package/dist/FileTrigger.js +30 -12
- package/dist/FileTrigger.js.map +1 -1
- package/dist/FileTrigger.jsx +15 -2
- package/dist/FileTrigger.jsx.map +1 -1
- package/dist/Focusable.d.ts +2 -8
- package/dist/Focusable.d.ts.map +1 -1
- package/dist/Focusable.js +23 -6
- package/dist/Focusable.js.map +1 -1
- package/dist/Focusable.jsx +22 -5
- package/dist/Focusable.jsx.map +1 -1
- package/dist/Form.d.ts +9 -8
- package/dist/Form.d.ts.map +1 -1
- package/dist/Form.js +66 -43
- package/dist/Form.js.map +1 -1
- package/dist/Form.jsx +36 -16
- package/dist/Form.jsx.map +1 -1
- package/dist/GridList.d.ts +5 -10
- package/dist/GridList.d.ts.map +1 -1
- package/dist/GridList.js +372 -243
- package/dist/GridList.js.map +1 -1
- package/dist/GridList.jsx +177 -99
- package/dist/GridList.jsx.map +1 -1
- package/dist/HiddenDateInput.d.ts +1 -7
- package/dist/HiddenDateInput.d.ts.map +1 -1
- package/dist/Icon.d.ts +4 -1
- package/dist/Icon.d.ts.map +1 -1
- package/dist/Icon.js +41 -37
- package/dist/Icon.js.map +1 -1
- package/dist/Icon.jsx +7 -3
- package/dist/Icon.jsx.map +1 -1
- package/dist/Keyboard.d.ts +1 -7
- package/dist/Keyboard.d.ts.map +1 -1
- package/dist/Keyboard.js +24 -11
- package/dist/Keyboard.js.map +1 -1
- package/dist/Keyboard.jsx +15 -2
- package/dist/Keyboard.jsx.map +1 -1
- package/dist/Label.d.ts +20 -0
- package/dist/Label.d.ts.map +1 -0
- package/dist/Label.js +60 -0
- package/dist/Label.js.map +1 -0
- package/dist/Label.jsx +47 -0
- package/dist/Label.jsx.map +1 -0
- package/dist/Landmark.d.ts +4 -1
- package/dist/Landmark.d.ts.map +1 -1
- package/dist/Landmark.js +10 -4
- package/dist/Landmark.js.map +1 -1
- package/dist/Landmark.jsx +5 -1
- package/dist/Landmark.jsx.map +1 -1
- package/dist/Link.d.ts +2 -7
- package/dist/Link.d.ts.map +1 -1
- package/dist/Link.js +56 -36
- package/dist/Link.js.map +1 -1
- package/dist/Link.jsx +52 -10
- package/dist/Link.jsx.map +1 -1
- package/dist/ListBox.d.ts +17 -13
- package/dist/ListBox.d.ts.map +1 -1
- package/dist/ListBox.js +647 -348
- package/dist/ListBox.js.map +1 -1
- package/dist/ListBox.jsx +339 -236
- package/dist/ListBox.jsx.map +1 -1
- package/dist/ListDropTargetDelegate.d.ts +3 -0
- package/dist/ListDropTargetDelegate.d.ts.map +1 -1
- package/dist/Menu.d.ts +39 -30
- package/dist/Menu.d.ts.map +1 -1
- package/dist/Menu.js +547 -368
- package/dist/Menu.js.map +1 -1
- package/dist/Menu.jsx +328 -230
- package/dist/Menu.jsx.map +1 -1
- package/dist/Meter.d.ts +6 -13
- package/dist/Meter.d.ts.map +1 -1
- package/dist/Meter.js +55 -18
- package/dist/Meter.js.map +1 -1
- package/dist/Meter.jsx +33 -8
- package/dist/Meter.jsx.map +1 -1
- package/dist/Modal.d.ts +1 -7
- package/dist/Modal.d.ts.map +1 -1
- package/dist/Modal.js +104 -56
- package/dist/Modal.js.map +1 -1
- package/dist/Modal.jsx +68 -38
- package/dist/Modal.jsx.map +1 -1
- package/dist/NumberField.d.ts +4 -7
- package/dist/NumberField.d.ts.map +1 -1
- package/dist/NumberField.js +243 -124
- package/dist/NumberField.js.map +1 -1
- package/dist/NumberField.jsx +115 -26
- package/dist/NumberField.jsx.map +1 -1
- package/dist/Popover.d.ts +15 -7
- package/dist/Popover.d.ts.map +1 -1
- package/dist/Popover.js +370 -181
- package/dist/Popover.js.map +1 -1
- package/dist/Popover.jsx +215 -82
- package/dist/Popover.jsx.map +1 -1
- package/dist/Pressable.d.ts +2 -8
- package/dist/Pressable.d.ts.map +1 -1
- package/dist/Pressable.js +23 -6
- package/dist/Pressable.js.map +1 -1
- package/dist/Pressable.jsx +22 -5
- package/dist/Pressable.jsx.map +1 -1
- package/dist/PreviewTrigger.d.ts +24 -0
- package/dist/PreviewTrigger.d.ts.map +1 -0
- package/dist/PreviewTrigger.js +128 -0
- package/dist/PreviewTrigger.js.map +1 -0
- package/dist/PreviewTrigger.jsx +117 -0
- package/dist/PreviewTrigger.jsx.map +1 -0
- package/dist/ProgressBar.d.ts +1 -7
- package/dist/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar.js +34 -14
- package/dist/ProgressBar.js.map +1 -1
- package/dist/ProgressBar.jsx +17 -3
- package/dist/ProgressBar.jsx.map +1 -1
- package/dist/RadioGroup.d.ts +2 -7
- package/dist/RadioGroup.d.ts.map +1 -1
- package/dist/RadioGroup.js +388 -269
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RadioGroup.jsx +110 -99
- package/dist/RadioGroup.jsx.map +1 -1
- package/dist/RangeCalendar.d.ts +3 -7
- package/dist/RangeCalendar.d.ts.map +1 -1
- package/dist/RangeCalendar.js +271 -202
- package/dist/RangeCalendar.js.map +1 -1
- package/dist/RangeCalendar.jsx +56 -37
- package/dist/RangeCalendar.jsx.map +1 -1
- package/dist/RouterProvider.d.ts +3 -9
- package/dist/RouterProvider.d.ts.map +1 -1
- package/dist/RouterProvider.js +15 -14
- package/dist/RouterProvider.js.map +1 -1
- package/dist/RouterProvider.jsx +14 -13
- package/dist/RouterProvider.jsx.map +1 -1
- package/dist/SearchField.d.ts +4 -7
- package/dist/SearchField.d.ts.map +1 -1
- package/dist/SearchField.js +191 -164
- package/dist/SearchField.js.map +1 -1
- package/dist/SearchField.jsx +69 -62
- package/dist/SearchField.jsx.map +1 -1
- package/dist/Select.d.ts +5 -10
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js +565 -359
- package/dist/Select.js.map +1 -1
- package/dist/Select.jsx +281 -161
- package/dist/Select.jsx.map +1 -1
- package/dist/SelectionIndicator.d.ts +1 -4
- package/dist/SelectionIndicator.d.ts.map +1 -1
- package/dist/SelectionIndicator.js +29 -13
- package/dist/SelectionIndicator.js.map +1 -1
- package/dist/SelectionIndicator.jsx +18 -4
- package/dist/SelectionIndicator.jsx.map +1 -1
- package/dist/Separator.d.ts +1 -7
- package/dist/Separator.d.ts.map +1 -1
- package/dist/Separator.js +22 -6
- package/dist/Separator.js.map +1 -1
- package/dist/Separator.jsx +16 -3
- package/dist/Separator.jsx.map +1 -1
- package/dist/SharedElementTransition.d.ts +1 -10
- package/dist/SharedElementTransition.d.ts.map +1 -1
- package/dist/SharedElementTransition.js +68 -40
- package/dist/SharedElementTransition.js.map +1 -1
- package/dist/SharedElementTransition.jsx +49 -25
- package/dist/SharedElementTransition.jsx.map +1 -1
- package/dist/Slider.d.ts +2 -8
- package/dist/Slider.d.ts.map +1 -1
- package/dist/Slider.js +155 -97
- package/dist/Slider.js.map +1 -1
- package/dist/Slider.jsx +25 -12
- package/dist/Slider.jsx.map +1 -1
- package/dist/StepList.d.ts +1 -7
- package/dist/StepList.d.ts.map +1 -1
- package/dist/StepList.js +112 -68
- package/dist/StepList.js.map +1 -1
- package/dist/StepList.jsx +58 -20
- package/dist/StepList.jsx.map +1 -1
- package/dist/Switch.d.ts +2 -9
- package/dist/Switch.d.ts.map +1 -1
- package/dist/Switch.js +164 -114
- package/dist/Switch.js.map +1 -1
- package/dist/Switch.jsx +26 -13
- package/dist/Switch.jsx.map +1 -1
- package/dist/Table.d.ts +2 -1
- package/dist/Table.d.ts.map +1 -1
- package/dist/Table.js +689 -592
- package/dist/Table.js.map +1 -1
- package/dist/Table.jsx +317 -237
- package/dist/Table.jsx.map +1 -1
- package/dist/Tabs.d.ts +2 -7
- package/dist/Tabs.d.ts.map +1 -1
- package/dist/Tabs.js +278 -293
- package/dist/Tabs.js.map +1 -1
- package/dist/Tabs.jsx +68 -66
- package/dist/Tabs.jsx.map +1 -1
- package/dist/TagGroup.d.ts +4 -11
- package/dist/TagGroup.d.ts.map +1 -1
- package/dist/TagGroup.js +153 -115
- package/dist/TagGroup.js.map +1 -1
- package/dist/TagGroup.jsx +37 -24
- package/dist/TagGroup.jsx.map +1 -1
- package/dist/Text.d.ts +3 -3
- package/dist/Text.d.ts.map +1 -1
- package/dist/Text.js +24 -7
- package/dist/Text.js.map +1 -1
- package/dist/Text.jsx +17 -5
- package/dist/Text.jsx.map +1 -1
- package/dist/TextField.d.ts +3 -16
- package/dist/TextField.d.ts.map +1 -1
- package/dist/TextField.js +104 -129
- package/dist/TextField.js.map +1 -1
- package/dist/TextField.jsx +76 -102
- package/dist/TextField.jsx.map +1 -1
- package/dist/TimeField.d.ts +2 -15
- package/dist/TimeField.d.ts.map +1 -1
- package/dist/TimeField.js +86 -102
- package/dist/TimeField.js.map +1 -1
- package/dist/TimeField.jsx +32 -49
- package/dist/TimeField.jsx.map +1 -1
- package/dist/Toast.d.ts +10 -13
- package/dist/Toast.d.ts.map +1 -1
- package/dist/Toast.js +209 -108
- package/dist/Toast.js.map +1 -1
- package/dist/Toast.jsx +127 -22
- package/dist/Toast.jsx.map +1 -1
- package/dist/ToggleButton.d.ts +1 -7
- package/dist/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButton.js +57 -35
- package/dist/ToggleButton.js.map +1 -1
- package/dist/ToggleButton.jsx +26 -12
- package/dist/ToggleButton.jsx.map +1 -1
- package/dist/ToggleButtonGroup.d.ts +1 -7
- package/dist/ToggleButtonGroup.d.ts.map +1 -1
- package/dist/ToggleButtonGroup.js +59 -44
- package/dist/ToggleButtonGroup.js.map +1 -1
- package/dist/ToggleButtonGroup.jsx +25 -12
- package/dist/ToggleButtonGroup.jsx.map +1 -1
- package/dist/TokenField.d.ts +52 -0
- package/dist/TokenField.d.ts.map +1 -0
- package/dist/TokenField.js +301 -0
- package/dist/TokenField.js.map +1 -0
- package/dist/TokenField.jsx +197 -0
- package/dist/TokenField.jsx.map +1 -0
- package/dist/Toolbar.d.ts +2 -7
- package/dist/Toolbar.d.ts.map +1 -1
- package/dist/Toolbar.js +35 -16
- package/dist/Toolbar.js.map +1 -1
- package/dist/Toolbar.jsx +15 -2
- package/dist/Toolbar.jsx.map +1 -1
- package/dist/Tooltip.d.ts +2 -7
- package/dist/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip.js +105 -68
- package/dist/Tooltip.js.map +1 -1
- package/dist/Tooltip.jsx +60 -36
- package/dist/Tooltip.jsx.map +1 -1
- package/dist/Tree.d.ts +8 -11
- package/dist/Tree.d.ts.map +1 -1
- package/dist/Tree.js +486 -339
- package/dist/Tree.js.map +1 -1
- package/dist/Tree.jsx +155 -107
- package/dist/Tree.jsx.map +1 -1
- package/dist/Virtualizer.d.ts +39 -9
- package/dist/Virtualizer.d.ts.map +1 -1
- package/dist/Virtualizer.js +2 -2
- package/dist/Virtualizer.jsx +2 -2
- package/dist/Virtualizer2.js +491 -136
- package/dist/Virtualizer2.js.map +1 -1
- package/dist/Virtualizer2.jsx +455 -122
- package/dist/Virtualizer2.jsx.map +1 -1
- package/dist/VirtualizerLayouts.d.ts +55 -2
- package/dist/VirtualizerLayouts.d.ts.map +1 -1
- package/dist/VisuallyHidden.d.ts +4 -3
- package/dist/VisuallyHidden.d.ts.map +1 -1
- package/dist/VisuallyHidden.js +18 -11
- package/dist/VisuallyHidden.js.map +1 -1
- package/dist/VisuallyHidden.jsx +15 -9
- package/dist/VisuallyHidden.jsx.map +1 -1
- package/dist/contexts.d.ts +25 -0
- package/dist/contexts.d.ts.map +1 -1
- package/dist/contexts.js +3 -0
- package/dist/contexts.js.map +1 -1
- package/dist/contexts.jsx +3 -0
- package/dist/contexts.jsx.map +1 -1
- package/dist/index.d.ts +11 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -11
- package/dist/index.jsx +14 -11
- package/dist/intl/index.d.ts +16 -0
- package/dist/intl/index.d.ts.map +1 -0
- package/dist/intl.js +212 -0
- package/dist/intl.js.map +1 -0
- package/dist/intl.jsx +212 -0
- package/dist/intl.jsx.map +1 -0
- package/dist/useDragAndDrop.d.ts +4 -2
- package/dist/useDragAndDrop.d.ts.map +1 -1
- package/dist/useDragAndDrop2.js +39 -21
- package/dist/useDragAndDrop2.js.map +1 -1
- package/dist/useDragAndDrop2.jsx +39 -21
- package/dist/useDragAndDrop2.jsx.map +1 -1
- package/dist/utils.d.ts +28 -9
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +96 -24
- package/dist/utils.js.map +1 -1
- package/dist/utils.jsx +81 -24
- package/dist/utils.jsx.map +1 -1
- package/dist/virtualizer/Layout.d.ts +9 -0
- package/dist/virtualizer/Layout.d.ts.map +1 -1
- package/dist/virtualizer/Layout.js +23 -2
- package/dist/virtualizer/Layout.js.map +1 -1
- package/dist/virtualizer/Layout.jsx +23 -2
- package/dist/virtualizer/Layout.jsx.map +1 -1
- package/package.json +29 -10
- package/src/ActionBar.tsx +50 -24
- package/src/ActionGroup.tsx +31 -19
- package/src/Alert.tsx +10 -4
- package/src/Autocomplete.tsx +24 -15
- package/src/Breadcrumbs.tsx +32 -16
- package/src/Button.tsx +182 -67
- package/src/Calendar.tsx +65 -47
- package/src/CalendarPicker.tsx +16 -1
- package/src/Checkbox.tsx +84 -116
- package/src/Collection.tsx +84 -3
- package/src/Color.tsx +282 -104
- package/src/ColorEditor.tsx +5 -1
- package/src/ComboBox.tsx +384 -109
- package/src/ContextualHelpTrigger.tsx +47 -41
- package/src/DateField.tsx +74 -106
- package/src/DatePicker.tsx +156 -352
- package/src/DateRangePickerContext.tsx +8 -0
- package/src/Dialog.tsx +105 -38
- package/src/Disclosure.tsx +29 -19
- package/src/DragAndDrop.tsx +43 -8
- package/src/DragPreview.tsx +20 -1
- package/src/DropZone.tsx +32 -18
- package/src/ElementTag.tsx +14 -104
- package/src/FieldError.tsx +39 -7
- package/src/FileTrigger.tsx +18 -3
- package/src/Focusable.tsx +27 -6
- package/src/Form.tsx +57 -11
- package/src/GridList.tsx +233 -141
- package/src/HiddenDateInput.tsx +19 -3
- package/src/Icon.tsx +8 -2
- package/src/Keyboard.tsx +18 -2
- package/src/Label.tsx +77 -0
- package/src/Landmark.tsx +6 -1
- package/src/Link.tsx +65 -19
- package/src/ListBox.tsx +645 -468
- package/src/ListDropTargetDelegate.ts +4 -0
- package/src/Menu.tsx +512 -349
- package/src/Meter.tsx +42 -8
- package/src/Modal.tsx +85 -42
- package/src/NumberField.tsx +161 -48
- package/src/Popover.tsx +424 -148
- package/src/Pressable.tsx +27 -6
- package/src/PreviewTrigger.tsx +171 -0
- package/src/ProgressBar.tsx +25 -3
- package/src/RadioGroup.tsx +230 -161
- package/src/RangeCalendar.tsx +75 -63
- package/src/RouterProvider.tsx +24 -14
- package/src/SearchField.tsx +118 -121
- package/src/Select.tsx +454 -274
- package/src/SelectionIndicator.tsx +21 -3
- package/src/Separator.tsx +17 -1
- package/src/SharedElementTransition.tsx +115 -97
- package/src/Slider.tsx +35 -17
- package/src/StepList.tsx +71 -32
- package/src/Switch.tsx +45 -29
- package/src/Table.tsx +446 -380
- package/src/Tabs.tsx +132 -155
- package/src/TagGroup.tsx +53 -40
- package/src/Text.tsx +23 -6
- package/src/TextField.tsx +118 -159
- package/src/TimeField.tsx +34 -95
- package/src/Toast.tsx +141 -67
- package/src/ToggleButton.tsx +33 -15
- package/src/ToggleButtonGroup.tsx +27 -9
- package/src/TokenField.tsx +379 -0
- package/src/Toolbar.tsx +19 -9
- package/src/Tooltip.tsx +126 -84
- package/src/Tree.tsx +233 -173
- package/src/Virtualizer.tsx +400 -138
- package/src/VirtualizerLayouts.ts +211 -26
- package/src/VisuallyHidden.tsx +22 -8
- package/src/contexts.ts +13 -0
- package/src/index.ts +32 -11
- package/src/intl/ar-AE.json +6 -0
- package/src/intl/bg-BG.json +6 -0
- package/src/intl/cs-CZ.json +6 -0
- package/src/intl/da-DK.json +6 -0
- package/src/intl/de-DE.json +6 -0
- package/src/intl/el-GR.json +6 -0
- package/src/intl/en-US.json +6 -0
- package/src/intl/es-ES.json +6 -0
- package/src/intl/et-EE.json +6 -0
- package/src/intl/fi-FI.json +6 -0
- package/src/intl/fr-FR.json +6 -0
- package/src/intl/he-IL.json +6 -0
- package/src/intl/hr-HR.json +6 -0
- package/src/intl/hu-HU.json +6 -0
- package/src/intl/index.ts +125 -0
- package/src/intl/it-IT.json +6 -0
- package/src/intl/ja-JP.json +6 -0
- package/src/intl/ko-KR.json +6 -0
- package/src/intl/lt-LT.json +6 -0
- package/src/intl/lv-LV.json +6 -0
- package/src/intl/nb-NO.json +6 -0
- package/src/intl/nl-NL.json +6 -0
- package/src/intl/pl-PL.json +6 -0
- package/src/intl/pt-BR.json +6 -0
- package/src/intl/pt-PT.json +6 -0
- package/src/intl/ro-RO.json +6 -0
- package/src/intl/ru-RU.json +6 -0
- package/src/intl/sk-SK.json +6 -0
- package/src/intl/sl-SI.json +6 -0
- package/src/intl/sr-SP.json +6 -0
- package/src/intl/sv-SE.json +6 -0
- package/src/intl/tr-TR.json +6 -0
- package/src/intl/uk-UA.json +6 -0
- package/src/intl/zh-CN.json +6 -0
- package/src/intl/zh-TW.json +6 -0
- package/src/useDragAndDrop.ts +30 -32
- package/src/utils.tsx +124 -68
- package/src/virtualizer/Layout.ts +29 -0
package/dist/Tabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","names":["Accessor","JSX","createContext","createEffect","createMemo","createSignal","splitProps","useContext","For","Show","onCleanup","createTabList","createTab","createTabPanel","createFocusRing","createHover","AriaTabListProps","AriaTabProps","AriaTabPanelProps","createTabListState","TabListState","Key","TabOrientation","KeyboardActivation","RenderChildren","ClassNameOrFunction","StyleOrFunction","SlotProps","useRenderProps","filterDOMProps","SelectionIndicator","SelectionIndicatorContext","SelectionIndicatorContextValue","SharedElementTransition","SelectionIndicatorProps","SelectionIndicatorRenderProps","TabsRenderProps","orientation","isDisabled","TabsProps","items","T","getKey","item","getTextValue","getDisabled","disabledKeys","Iterable","selectedKey","defaultSelectedKey","onSelectionChange","key","keyboardActivation","children","class","style","ref","RefLike","HTMLDivElement","TabListRenderProps","TabListProps","Omit","Element","TabRenderProps","isSelected","isFocused","isFocusVisible","isPressed","isHovered","TabProps","id","TabPanelRenderProps","isInert","isEntering","isExiting","state","TabPanelProps","shouldForceMount","TabPanelsProps","CSSProperties","TabsContextValue","setTabListItems","registerTab","tab","RegisteredTab","unregisterTab","el","current","assignRef","element","TabsContext","TabsStateContext","textValue","CollectionItemLike","label","collectionItemKey","Error","staticTabText","String","Tabs","props","local","stateProps","rest","tabListItems","undefined","registeredTabs","setRegisteredTabs","effectiveItems","renderValues","renderProps","defaultClassName","domProps","Record","global","contextValue","next","filter","push","_$createComponent","Provider","value","_el$","_$getNextElement","_tmpl$","_$use","_$spread","_$mergeProps","data-orientation","data-disabled","_$insert","_$runHydrationEvents","TabList","collectionProps","ariaProps","context","when","fallback","_tmpl$2","ctx","TabListInner","slot","renderItem","child","args","length","renderedChildren","tabListProps","handleKeyDown","e","KeyboardEvent","onKeyDown","handleFocus","FocusEvent","onFocusIn","handleBlur","onFocusOut","_el$3","$$focusout","$$focusin","$$keydown","_c$","_$memo","each","_$effect","_p$","_v$","role","_v$2","_v$3","_v$4","_v$5","_v$6","_v$7","_v$8","_v$9","_$setAttribute","t","a","o","i","n","_$className","s","_$style","h","r","Tab","tabsContext","_tmpl$3","TabInner","tabRef","tabAria","aria-label","aria-labelledby","hoverProps","selectionIndicatorContext","_el$5","_ref$","tabProps","aria-selected","aria-disabled","aria-controls","tabIndex","onMouseDown","onPointerDown","onClick","onFocus","onBlur","data-selected","data-focused","data-focus-visible","data-pressed","data-hovered","renderChildrenStable","TabPanels","previousSelectedKey","panelSize","setPanelSize","width","height","transition","window","getComputedStyle","shouldMeasureWidth","test","shouldMeasureHeight","selectedPanel","querySelector","HTMLElement","offsetWidth","offsetHeight","mergedStyle","_el$6","TabPanel","tabPanelProps","focusProps","Boolean","shouldRender","_el$7","_$addEventListener","renderChildren","_v$0","_v$1","_v$10","_v$11","_v$12","_v$13","_v$14","_v$15","_v$16","_v$17","_v$18","_v$19","_v$20","_v$21","_v$22","_v$23","d","l","u","_$setProperty","c","w","m","f","List","Panels","Panel","_$delegateEvents"],"sources":["../src/Tabs.tsx"],"sourcesContent":["/**\n * Tabs component for solidaria-components\n *\n * A pre-wired headless tabs component that combines state + aria hooks.\n * Port of react-aria-components/src/Tabs.tsx\n */\n\nimport {\n type Accessor,\n type JSX,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n splitProps,\n useContext,\n For,\n Show,\n onCleanup,\n} from \"solid-js\";\nimport {\n createTabList,\n createTab,\n createTabPanel,\n createFocusRing,\n createHover,\n type AriaTabListProps,\n type AriaTabProps,\n type AriaTabPanelProps,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n createTabListState,\n type TabListState,\n type Key,\n type TabOrientation,\n type KeyboardActivation,\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 {\n SelectionIndicator,\n SelectionIndicatorContext,\n type SelectionIndicatorContextValue,\n} from \"./SelectionIndicator\";\nimport { SharedElementTransition } from \"./SharedElementTransition\";\n\nexport {\n SelectionIndicator,\n SelectionIndicatorContext,\n type SelectionIndicatorProps,\n type SelectionIndicatorRenderProps,\n} from \"./SelectionIndicator\";\n\nexport interface TabsRenderProps {\n /** The orientation of the tabs. */\n orientation: TabOrientation;\n /** Whether the tabs are disabled. */\n isDisabled: boolean;\n}\n\nexport interface TabsProps<T> extends SlotProps {\n /** The items to render in the tab list. */\n items?: 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 tabs. */\n disabledKeys?: Iterable<Key>;\n /** The currently selected tab key (controlled). */\n selectedKey?: Key | null;\n /** The default selected tab key (uncontrolled). */\n defaultSelectedKey?: Key;\n /** Handler for tab selection changes. */\n onSelectionChange?: (key: Key) => void;\n /** Whether the tabs are disabled. */\n isDisabled?: boolean;\n /** The keyboard activation mode. */\n keyboardActivation?: KeyboardActivation;\n /** The orientation of the tabs. */\n orientation?: TabOrientation;\n /** The children of the component. */\n children?: RenderChildren<TabsRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabsRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabsRenderProps>;\n /** Ref for the root tabs element. */\n ref?: RefLike<HTMLDivElement>;\n}\n\nexport interface TabListRenderProps {\n /** The orientation of the tab list. */\n orientation: TabOrientation;\n /** Whether the tab list is disabled. */\n isDisabled: boolean;\n}\n\nexport interface TabListProps<T> extends Omit<AriaTabListProps, \"children\">, SlotProps {\n /** Items to render in the tab list. */\n items?: T[];\n /** The children of the tab list - static tabs or a render function for each item. */\n children?: JSX.Element | ((item: T) => JSX.Element);\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabListRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabListRenderProps>;\n}\n\nexport interface TabRenderProps {\n /** Whether the tab is selected. */\n isSelected: boolean;\n /** Whether the tab is focused. */\n isFocused: boolean;\n /** Whether the tab has visible focus ring. */\n isFocusVisible: boolean;\n /** Whether the tab is pressed. */\n isPressed: boolean;\n /** Whether the tab is hovered. */\n isHovered: boolean;\n /** Whether the tab is disabled. */\n isDisabled: boolean;\n}\n\nexport interface TabProps extends Omit<AriaTabProps, \"key\">, SlotProps {\n /** The unique key for the tab. */\n id: Key;\n /** The children of the tab. */\n children?: RenderChildren<TabRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabRenderProps>;\n}\n\nexport interface TabPanelRenderProps {\n /** Whether the panel is the selected one. */\n isSelected: boolean;\n /** Whether the panel is focused. */\n isFocused: boolean;\n /** Whether the panel has visible focus ring. */\n isFocusVisible: boolean;\n /** Whether the panel is non-interactive while force mounted. */\n isInert: boolean;\n /** Whether the panel is currently entering. */\n isEntering: boolean;\n /** Whether the panel is currently exiting. */\n isExiting: boolean;\n /** State of the tab list. */\n state: TabListState<unknown> | null;\n}\n\nexport interface TabPanelProps extends AriaTabPanelProps, SlotProps {\n /** The children of the tab panel. */\n children?: RenderChildren<TabPanelRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabPanelRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabPanelRenderProps>;\n /** Whether to keep the panel mounted when not selected. */\n shouldForceMount?: boolean;\n}\n\nexport interface TabPanelsProps extends SlotProps {\n /** The grouped tab panels. */\n children?: JSX.Element;\n /** The CSS className for the element. */\n class?: string;\n /** The inline style for the element. */\n style?: JSX.CSSProperties;\n}\n\ninterface TabsContextValue<T> {\n state: TabListState<T>;\n items: Accessor<T[]>;\n setTabListItems(items: T[] | undefined): void;\n registerTab(tab: RegisteredTab): void;\n unregisterTab(id: Key): void;\n}\n\ntype RefLike<T> = ((el: T) => void) | { current?: T | null } | undefined;\n\nfunction assignRef<T>(ref: RefLike<T>, element: T): void {\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(element);\n } else if (typeof ref === \"object\" && \"current\" in ref) {\n ref.current = element;\n }\n}\n\nexport const TabsContext = createContext<TabsContextValue<unknown> | null>(null);\nexport const TabsStateContext = createContext<TabListState<unknown> | null>(null);\n\ninterface RegisteredTab {\n id: Key;\n textValue?: string;\n isDisabled?: boolean;\n}\n\ninterface CollectionItemLike {\n id?: Key;\n key?: Key;\n label?: string;\n textValue?: string;\n isDisabled?: boolean;\n}\n\nfunction collectionItemKey<T>(item: T): Key {\n const tab = item as CollectionItemLike;\n const key = tab.id ?? tab.key;\n if (key == null) {\n throw new Error(\"Tabs collection items require an id or key.\");\n }\n return key;\n}\n\nfunction staticTabText(tab: RegisteredTab): string {\n return tab.textValue ?? String(tab.id);\n}\n\n/**\n * Tabs provide a way to organize content into multiple sections, with only one section visible at a time.\n */\nexport function Tabs<T>(props: TabsProps<T>): JSX.Element {\n const [local, stateProps, rest] = splitProps(\n props,\n [\"class\", \"style\", \"slot\", \"ref\"],\n [\n \"items\",\n \"getKey\",\n \"getTextValue\",\n \"getDisabled\",\n \"disabledKeys\",\n \"selectedKey\",\n \"defaultSelectedKey\",\n \"onSelectionChange\",\n \"isDisabled\",\n \"keyboardActivation\",\n \"orientation\",\n ],\n );\n\n const [tabListItems, setTabListItems] = createSignal<T[] | undefined>(undefined);\n const [registeredTabs, setRegisteredTabs] = createSignal<RegisteredTab[]>([]);\n const effectiveItems = createMemo<T[]>(() => {\n if (stateProps.items) return stateProps.items;\n if (tabListItems()) return tabListItems() ?? [];\n return registeredTabs() as T[];\n });\n\n // Create tab list state\n const state = createTabListState<T>({\n get items() {\n return effectiveItems();\n },\n get getKey() {\n return stateProps.getKey ?? collectionItemKey;\n },\n get getTextValue() {\n return (\n stateProps.getTextValue ??\n ((item: T) => {\n const tab = item as RegisteredTab & CollectionItemLike;\n return tab.textValue ?? tab.label ?? staticTabText(tab);\n })\n );\n },\n get getDisabled() {\n return (\n stateProps.getDisabled ??\n ((item: T) => {\n const tab = item as RegisteredTab & CollectionItemLike;\n return tab.isDisabled ?? false;\n })\n );\n },\n get disabledKeys() {\n return stateProps.disabledKeys;\n },\n get selectedKey() {\n return stateProps.selectedKey;\n },\n get defaultSelectedKey() {\n return stateProps.defaultSelectedKey;\n },\n get onSelectionChange() {\n return stateProps.onSelectionChange;\n },\n get isDisabled() {\n return stateProps.isDisabled;\n },\n get keyboardActivation() {\n return stateProps.keyboardActivation;\n },\n get orientation() {\n return stateProps.orientation;\n },\n });\n\n const renderValues = createMemo<TabsRenderProps>(() => ({\n orientation: state.orientation(),\n isDisabled: state.isDisabled(),\n }));\n\n const renderProps = useRenderProps(\n {\n class: local.class,\n style: local.style,\n get children() {\n return props.children;\n },\n defaultClassName: \"solidaria-Tabs\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n\n const contextValue: TabsContextValue<T> = {\n state,\n items: effectiveItems,\n setTabListItems(items) {\n setTabListItems(() => items);\n },\n registerTab(tab) {\n setRegisteredTabs((current) => {\n const next = current.filter((item) => item.id !== tab.id);\n next.push(tab);\n return next;\n });\n },\n unregisterTab(id) {\n setRegisteredTabs((current) => current.filter((item) => item.id !== id));\n },\n };\n\n return (\n <TabsContext.Provider value={contextValue as TabsContextValue<unknown>}>\n <TabsStateContext.Provider value={state}>\n <div\n {...domProps()}\n ref={(element) => assignRef(local.ref, element)}\n class={renderProps.class()}\n style={renderProps.style()}\n data-orientation={state.orientation()}\n data-disabled={state.isDisabled() || undefined}\n >\n {props.children as JSX.Element}\n </div>\n </TabsStateContext.Provider>\n </TabsContext.Provider>\n );\n}\n\n/**\n * A TabList contains Tab elements that represent the available tabs.\n */\nexport function TabList<T>(props: TabListProps<T>): JSX.Element {\n const [local, collectionProps, ariaProps] = splitProps(\n props,\n [\"class\", \"style\", \"slot\"],\n [\"items\"],\n );\n\n const context = useContext(TabsContext);\n\n return (\n <Show when={context} fallback={<div class=\"solidaria-TabList\" role=\"tablist\" />}>\n {(ctx) => (\n <TabListInner\n context={ctx()}\n local={local}\n items={collectionProps.items}\n ariaProps={ariaProps}\n children={props.children}\n />\n )}\n </Show>\n );\n}\n\n/** Inner TabList component that has access to context */\nfunction TabListInner<T>(props: {\n context: TabsContextValue<unknown>;\n local: {\n class?: ClassNameOrFunction<TabListRenderProps>;\n style?: StyleOrFunction<TabListRenderProps>;\n slot?: string;\n };\n ariaProps: Omit<TabListProps<T>, \"children\" | \"class\" | \"style\" | \"slot\" | \"items\">;\n items?: T[];\n children?: JSX.Element | ((item: T) => JSX.Element);\n}): JSX.Element {\n const state = props.context.state as TabListState<T>;\n const items = props.context.items as Accessor<T[]>;\n const renderItem = createMemo(() => {\n if (typeof props.children !== \"function\") {\n return undefined;\n }\n\n const child = props.children as (...args: unknown[]) => JSX.Element;\n if (child.length === 0 && props.items === undefined) {\n return undefined;\n }\n\n return props.children as (item: T) => JSX.Element;\n });\n const renderedChildren = createMemo(() => {\n if (renderItem() || typeof props.children !== \"function\") {\n return props.children as JSX.Element;\n }\n\n return (props.children as () => JSX.Element)();\n });\n\n createEffect(() => {\n props.context.setTabListItems(props.items as unknown[] | undefined);\n });\n\n onCleanup(() => {\n props.context.setTabListItems(undefined);\n });\n\n // Create tab list aria props\n const { tabListProps } = createTabList<T>(props.ariaProps as AriaTabListProps, state);\n\n const renderValues = createMemo<TabListRenderProps>(() => ({\n orientation: state.orientation(),\n isDisabled: state.isDisabled(),\n }));\n\n const renderProps = useRenderProps(\n {\n class: props.local.class,\n style: props.local.style,\n defaultClassName: \"solidaria-TabList\",\n },\n renderValues,\n );\n\n const handleKeyDown = (e: KeyboardEvent) => {\n tabListProps.onKeyDown(e);\n };\n\n const handleFocus = (e: FocusEvent) => {\n tabListProps.onFocusIn(e);\n };\n\n const handleBlur = (e: FocusEvent) => {\n tabListProps.onFocusOut(e);\n };\n\n return (\n <div\n role={tabListProps.role}\n aria-orientation={tabListProps[\"aria-orientation\"]}\n aria-label={tabListProps[\"aria-label\"]}\n aria-labelledby={tabListProps[\"aria-labelledby\"]}\n aria-describedby={tabListProps[\"aria-describedby\"]}\n class={renderProps.class()}\n style={renderProps.style()}\n onKeyDown={handleKeyDown}\n onFocusIn={handleFocus}\n onFocusOut={handleBlur}\n data-orientation={state.orientation()}\n data-disabled={state.isDisabled() || undefined}\n >\n {renderItem() ? (\n <SharedElementTransition>\n <For each={(props.items ?? items()) as T[]}>{(item) => renderItem()?.(item)}</For>\n </SharedElementTransition>\n ) : (\n renderedChildren()\n )}\n </div>\n );\n}\n\n/**\n * A Tab represents an individual tab in a TabList.\n */\nexport function Tab(props: TabProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\"class\", \"style\", \"slot\", \"id\"]);\n\n const context = useContext(TabsStateContext);\n const tabsContext = useContext(TabsContext);\n\n return (\n <Show when={context} fallback={<div class=\"solidaria-Tab\" role=\"tab\" />}>\n {(state) => (\n <TabInner\n state={state()}\n tabsContext={tabsContext}\n local={local}\n ariaProps={ariaProps}\n children={props.children}\n />\n )}\n </Show>\n );\n}\n\n/** Inner Tab component that has access to context */\nfunction TabInner(props: {\n state: TabListState<unknown>;\n tabsContext: TabsContextValue<unknown> | null;\n local: {\n class?: ClassNameOrFunction<TabRenderProps>;\n style?: StyleOrFunction<TabRenderProps>;\n slot?: string;\n id: Key;\n };\n ariaProps: Omit<TabProps, \"children\" | \"class\" | \"style\" | \"slot\" | \"id\">;\n children?: RenderChildren<TabRenderProps>;\n}): JSX.Element {\n let tabRef: HTMLDivElement | undefined;\n const textValue = () => {\n if (props.ariaProps[\"aria-label\"]) return props.ariaProps[\"aria-label\"];\n return typeof props.children === \"string\" ? props.children : undefined;\n };\n\n createEffect(() => {\n props.tabsContext?.registerTab({\n id: props.local.id,\n textValue: textValue(),\n isDisabled: props.ariaProps.isDisabled,\n });\n });\n\n onCleanup(() => {\n props.tabsContext?.unregisterTab(props.local.id);\n });\n\n // Create tab aria props\n const tabAria = createTab<unknown>(\n {\n key: props.local.id,\n get isDisabled() {\n return props.ariaProps.isDisabled;\n },\n get \"aria-label\"() {\n return props.ariaProps[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return props.ariaProps[\"aria-labelledby\"];\n },\n },\n props.state,\n () => tabRef ?? null,\n );\n\n const { isHovered, hoverProps } = createHover({\n get isDisabled() {\n return tabAria.isDisabled();\n },\n });\n\n const renderValues = createMemo<TabRenderProps>(() => ({\n isSelected: tabAria.isSelected(),\n isFocused: tabAria.isFocused(),\n isFocusVisible: tabAria.isFocusVisible(),\n isPressed: tabAria.isPressed(),\n isHovered: isHovered(),\n isDisabled: tabAria.isDisabled(),\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: props.local.class,\n style: props.local.style,\n defaultClassName: \"solidaria-Tab\",\n },\n renderValues,\n );\n\n const selectionIndicatorContext = createMemo<SelectionIndicatorContextValue>(() => ({\n isSelected: tabAria.isSelected,\n }));\n\n return (\n <SelectionIndicatorContext.Provider value={selectionIndicatorContext()}>\n <div\n ref={tabRef}\n id={tabAria.tabProps.id}\n role={tabAria.tabProps.role}\n aria-selected={tabAria.isSelected()}\n aria-disabled={tabAria.isDisabled() || undefined}\n aria-controls={tabAria.isSelected() ? tabAria.tabProps[\"aria-controls\"] : undefined}\n aria-label={tabAria.tabProps[\"aria-label\"]}\n aria-labelledby={tabAria.tabProps[\"aria-labelledby\"]}\n tabIndex={tabAria.tabProps.tabIndex}\n class={renderProps.class()}\n style={renderProps.style()}\n onKeyDown={tabAria.tabProps.onKeyDown}\n onMouseDown={tabAria.tabProps.onMouseDown}\n onPointerDown={tabAria.tabProps.onPointerDown}\n onClick={tabAria.tabProps.onClick}\n onFocus={tabAria.tabProps.onFocus}\n onFocusIn={tabAria.tabProps.onFocusIn}\n onBlur={tabAria.tabProps.onBlur}\n {...hoverProps}\n data-selected={tabAria.isSelected() || undefined}\n data-focused={tabAria.isFocused() || undefined}\n data-focus-visible={tabAria.isFocusVisible() || undefined}\n data-pressed={tabAria.isPressed() || undefined}\n data-hovered={isHovered() || undefined}\n data-disabled={tabAria.isDisabled() || undefined}\n >\n {renderProps.renderChildrenStable()}\n </div>\n </SelectionIndicatorContext.Provider>\n );\n}\n\n/**\n * Groups multiple TabPanel elements.\n */\nexport function TabPanels(props: TabPanelsProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"class\", \"style\", \"slot\", \"children\"]);\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n const state = useContext(TabsStateContext);\n let ref: HTMLDivElement | undefined;\n let previousSelectedKey: Key | null | undefined = undefined;\n const [panelSize, setPanelSize] = createSignal<{ width?: string; height?: string }>({});\n\n createEffect(() => {\n const selectedKey = state?.selectedKey() ?? null;\n if (!ref) {\n previousSelectedKey = selectedKey;\n return;\n }\n\n if (previousSelectedKey === undefined) {\n previousSelectedKey = selectedKey;\n return;\n }\n\n if (previousSelectedKey === selectedKey) return;\n previousSelectedKey = selectedKey;\n\n const transition = window.getComputedStyle(ref).transition;\n const shouldMeasureWidth = /width|inline-size|all/.test(transition);\n const shouldMeasureHeight = /height|block-size|all/.test(transition);\n if (!shouldMeasureWidth && !shouldMeasureHeight) return;\n\n const selectedPanel = ref.querySelector<HTMLElement>('[role=\"tabpanel\"]:not([hidden])');\n if (!selectedPanel) return;\n\n setPanelSize({\n width: shouldMeasureWidth ? `${selectedPanel.offsetWidth}px` : undefined,\n height: shouldMeasureHeight ? `${selectedPanel.offsetHeight}px` : undefined,\n });\n });\n\n const mergedStyle = (): JSX.CSSProperties =>\n ({\n ...local.style,\n ...(panelSize().width ? { \"--tab-panel-width\": panelSize().width } : {}),\n ...(panelSize().height ? { \"--tab-panel-height\": panelSize().height } : {}),\n }) as JSX.CSSProperties;\n\n return (\n <div\n {...domProps()}\n ref={(el) => {\n ref = el;\n }}\n class={local.class ?? \"solidaria-TabPanels\"}\n style={mergedStyle()}\n >\n {local.children}\n </div>\n );\n}\n\n/**\n * A TabPanel displays the content for a selected Tab.\n */\nexport function TabPanel(props: TabPanelProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\"class\", \"style\", \"slot\", \"shouldForceMount\"]);\n\n // Get state from context (may be null for SSR scenarios)\n const state = useContext(TabsStateContext);\n\n // Create tab panel aria props\n const { tabPanelProps, isSelected } = createTabPanel<unknown>(ariaProps, state);\n\n // Create focus ring for the panel\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n const isInert = () =>\n Boolean(local.shouldForceMount && ariaProps.id !== undefined && !isSelected());\n const isEntering = () => false;\n const isExiting = () => false;\n\n const renderValues = createMemo<TabPanelRenderProps>(() => ({\n isSelected: isSelected(),\n isFocused: isFocused(),\n isFocusVisible: isFocusVisible(),\n isInert: isInert(),\n isEntering: isEntering(),\n isExiting: isExiting(),\n state,\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-TabPanel\",\n },\n renderValues,\n );\n\n // Determine if we should render the panel\n // If no id is provided, render when any tab is selected (shared panel pattern)\n // If id is provided, render when that specific tab is selected\n const shouldRender = () => {\n if (local.shouldForceMount) return true;\n if (ariaProps.id === undefined) {\n return state ? state.selectedKey() !== null : true;\n }\n return isSelected();\n };\n\n return (\n <Show when={shouldRender()}>\n <div\n id={tabPanelProps.id}\n role={tabPanelProps.role}\n aria-labelledby={tabPanelProps[\"aria-labelledby\"]}\n aria-label={tabPanelProps[\"aria-label\"]}\n aria-describedby={tabPanelProps[\"aria-describedby\"]}\n tabIndex={tabPanelProps.tabIndex}\n class={renderProps.class()}\n style={renderProps.style()}\n onFocus={focusProps.onFocus}\n onBlur={focusProps.onBlur}\n data-selected={isSelected() || undefined}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n inert={isInert() ? true : undefined}\n data-inert={isInert() || undefined}\n data-entering={isEntering() || undefined}\n data-exiting={isExiting() || undefined}\n hidden={\n ariaProps.id !== undefined && !isSelected() && !local.shouldForceMount ? true : undefined\n }\n >\n {renderProps.renderChildren()}\n </div>\n </Show>\n );\n}\n\nTabs.List = TabList;\nTabs.Tab = Tab;\nTabs.Panels = TabPanels;\nTabs.Panel = TabPanel;\nTabs.SelectionIndicator = SelectionIndicator;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tabs.js","names":["<TabsContext value={contextValue as TabsContextValue<unknown>}>\n <TabsStateContext value={state}>\n <div\n {...domProps()}\n ref={(element) => assignRef(local.ref, element)}\n class={renderProps.class()}\n style={renderProps.style()}\n data-orientation={state.orientation()}\n data-disabled={dataAttr(state.isDisabled())}\n >\n {props.children as JSX.Element}\n </div>\n </TabsStateContext>\n </TabsContext>","value={contextValue as TabsContextValue<unknown>}","<TabsStateContext value={state}>\n <div\n {...domProps()}\n ref={(element) => assignRef(local.ref, element)}\n class={renderProps.class()}\n style={renderProps.style()}\n data-orientation={state.orientation()}\n data-disabled={dataAttr(state.isDisabled())}\n >\n {props.children as JSX.Element}\n </div>\n </TabsStateContext>","value={state}","ref={(element) => assignRef(local.ref, element)}","{props.children as JSX.Element}","<div\n {...domProps()}\n ref={(element) => assignRef(local.ref, element)}\n class={renderProps.class()}\n style={renderProps.style()}\n data-orientation={state.orientation()}\n data-disabled={dataAttr(state.isDisabled())}\n >\n {props.children as JSX.Element}\n </div>","<div class=\"solidaria-TabList\" role=\"tablist\" />","<SharedElementTransition>\n <For each={(collectionProps.items ?? items()) as T[]}>\n {(item) => (children as (item: T) => JSX.Element)(item)}\n </For>\n </SharedElementTransition>","<For each={(collectionProps.items ?? items()) as T[]}>\n {(item) => (children as (item: T) => JSX.Element)(item)}\n </For>","{renderChildren()}","aria-orientation={tabListProps[\"aria-orientation\"]}","aria-label={tabListProps[\"aria-label\"]}","aria-labelledby={tabListProps[\"aria-labelledby\"]}","aria-describedby={tabListProps[\"aria-describedby\"]}","class={renderProps.class()}","style={renderProps.style()}","data-orientation={state.orientation()}","data-disabled={dataAttr(state.isDisabled())}","<div\n role={tabListProps.role}\n aria-orientation={tabListProps[\"aria-orientation\"]}\n aria-label={tabListProps[\"aria-label\"]}\n aria-labelledby={tabListProps[\"aria-labelledby\"]}\n aria-describedby={tabListProps[\"aria-describedby\"]}\n class={renderProps.class()}\n style={renderProps.style()}\n onKeyDown={handleKeyDown}\n onFocusIn={handleFocus}\n onFocusOut={handleBlur}\n data-orientation={state.orientation()}\n data-disabled={dataAttr(state.isDisabled())}\n >\n {renderChildren()}\n </div>","<div class=\"solidaria-Tab\" role=\"tab\" />","ref={setTabRef}","<SelectionIndicatorContext value={selectionIndicatorContext()}>\n {renderProps.renderChildrenStable()}\n </SelectionIndicatorContext>","<div\n ref={setTabRef}\n id={tabAria.tabProps.id}\n role={tabAria.tabProps.role}\n aria-selected={ariaTrueFalse(tabAria.isSelected())}\n aria-disabled={attrTrue(tabAria.isDisabled())}\n aria-controls={tabAria.isSelected() ? tabAria.tabProps[\"aria-controls\"] : undefined}\n aria-label={tabAria.tabProps[\"aria-label\"]}\n aria-labelledby={tabAria.tabProps[\"aria-labelledby\"]}\n tabindex={tabAria.tabProps.tabIndex}\n class={renderProps.class()}\n style={renderProps.style()}\n onKeyDown={tabAria.tabProps.onKeyDown}\n onMouseDown={tabAria.tabProps.onMouseDown}\n onPointerDown={tabAria.tabProps.onPointerDown}\n onClick={tabAria.tabProps.onClick}\n onFocus={tabAria.tabProps.onFocus}\n onFocusIn={tabAria.tabProps.onFocusIn}\n onBlur={tabAria.tabProps.onBlur}\n {...hoverProps}\n data-selected={dataAttr(tabAria.isSelected())}\n data-focused={dataAttr(tabAria.isFocused())}\n data-focus-visible={dataAttr(tabAria.isFocusVisible())}\n data-pressed={dataAttr(tabAria.isPressed())}\n data-hovered={dataAttr(isHovered())}\n data-disabled={dataAttr(tabAria.isDisabled())}\n >\n <SelectionIndicatorContext value={selectionIndicatorContext()}>\n {renderProps.renderChildrenStable()}\n </SelectionIndicatorContext>\n </div>","ref={(el) => {\n ref = el;\n }}","{local.children}","<div\n {...domProps()}\n ref={(el) => {\n ref = el;\n }}\n class={local.class ?? \"solidaria-TabPanels\"}\n style={mergedStyle()}\n >\n {local.children}\n </div>","<Show when={shouldRender()}>\n <div\n ref={setPanelRef}\n id={tabPanelProps.id}\n role={tabPanelProps.role}\n aria-labelledby={tabPanelProps[\"aria-labelledby\"]}\n aria-label={tabPanelProps[\"aria-label\"]}\n aria-describedby={tabPanelProps[\"aria-describedby\"]}\n tabindex={tabPanelProps.tabIndex}\n class={renderProps.class()}\n style={renderProps.style()}\n onFocus={focusProps.onFocus}\n onBlur={focusProps.onBlur}\n data-selected={dataAttr(isSelected())}\n data-focused={dataAttr(isFocused())}\n data-focus-visible={dataAttr(isFocusVisible())}\n inert={isInert() ? true : undefined}\n data-inert={dataAttr(isInert())}\n data-entering={dataAttr(isEntering())}\n data-exiting={dataAttr(isExiting())}\n hidden={\n ariaProps.id !== undefined && !isSelected() && !local.shouldForceMount ? true : undefined\n }\n >\n {renderProps.renderChildren()}\n </div>\n </Show>","ref={setPanelRef}","{renderProps.renderChildren()}","role={tabPanelProps.role}","aria-labelledby={tabPanelProps[\"aria-labelledby\"]}","aria-label={tabPanelProps[\"aria-label\"]}","aria-describedby={tabPanelProps[\"aria-describedby\"]}","tabindex={tabPanelProps.tabIndex}","data-selected={dataAttr(isSelected())}","data-focused={dataAttr(isFocused())}","data-focus-visible={dataAttr(isFocusVisible())}","inert={isInert() ? true : undefined}","data-inert={dataAttr(isInert())}","data-entering={dataAttr(isEntering())}","data-exiting={dataAttr(isExiting())}","hidden={\n ariaProps.id !== undefined && !isSelected() && !local.shouldForceMount ? true : undefined\n }","<div\n ref={setPanelRef}\n id={tabPanelProps.id}\n role={tabPanelProps.role}\n aria-labelledby={tabPanelProps[\"aria-labelledby\"]}\n aria-label={tabPanelProps[\"aria-label\"]}\n aria-describedby={tabPanelProps[\"aria-describedby\"]}\n tabindex={tabPanelProps.tabIndex}\n class={renderProps.class()}\n style={renderProps.style()}\n onFocus={focusProps.onFocus}\n onBlur={focusProps.onBlur}\n data-selected={dataAttr(isSelected())}\n data-focused={dataAttr(isFocused())}\n data-focus-visible={dataAttr(isFocusVisible())}\n inert={isInert() ? true : undefined}\n data-inert={dataAttr(isInert())}\n data-entering={dataAttr(isEntering())}\n data-exiting={dataAttr(isExiting())}\n hidden={\n ariaProps.id !== undefined && !isSelected() && !local.shouldForceMount ? true : undefined\n }\n >\n {renderProps.renderChildren()}\n </div>"],"sources":["../src/Tabs.tsx"],"sourcesContent":["/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/Tabs.tsx\n\n/**\n * Tabs component for solidaria-components\n *\n * A pre-wired headless tabs component that combines state + aria hooks.\n * Port of react-aria-components/src/Tabs.tsx\n */\n\nimport {\n createContext,\n createEffect,\n createMemo,\n createSignal,\n useContext,\n For,\n Show,\n onCleanup,\n sharedConfig,\n createTrackedEffect,\n} from \"solid-js\";\nimport type { Accessor } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport {\n createTabList,\n createTab,\n createTabPanel,\n createFocusRing,\n createHover,\n type AriaTabListProps,\n type AriaTabProps,\n type AriaTabPanelProps,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n createTabListState,\n type TabListState,\n type Key,\n type TabOrientation,\n type KeyboardActivation,\n} from \"@proyecto-viviana/solid-stately\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n dataAttr,\n ariaTrueFalse,\n attrTrue,\n} from \"./utils\";\nimport {\n SelectionIndicator,\n SelectionIndicatorContext,\n type SelectionIndicatorContextValue,\n} from \"./SelectionIndicator\";\nimport { SharedElementTransition } from \"./SharedElementTransition\";\nimport { splitProps } from \"@proyecto-viviana/solidaria/utils\";\n\nexport {\n SelectionIndicator,\n SelectionIndicatorContext,\n type SelectionIndicatorProps,\n type SelectionIndicatorRenderProps,\n} from \"./SelectionIndicator\";\n\nexport interface TabsRenderProps {\n /** The orientation of the tabs. */\n orientation: TabOrientation;\n /** Whether the tabs are disabled. */\n isDisabled: boolean;\n}\n\nexport interface TabsProps<T> extends SlotProps {\n /** The items to render in the tab list. */\n items?: 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 tabs. */\n disabledKeys?: Iterable<Key>;\n /** The currently selected tab key (controlled). */\n selectedKey?: Key | null;\n /** The default selected tab key (uncontrolled). */\n defaultSelectedKey?: Key;\n /** Handler for tab selection changes. */\n onSelectionChange?: (key: Key) => void;\n /** Whether the tabs are disabled. */\n isDisabled?: boolean;\n /** The keyboard activation mode. */\n keyboardActivation?: KeyboardActivation;\n /** The orientation of the tabs. */\n orientation?: TabOrientation;\n /** The children of the component. */\n children?: RenderChildren<TabsRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabsRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabsRenderProps>;\n /** Ref for the root tabs element. */\n ref?: RefLike<HTMLDivElement>;\n}\n\nexport interface TabListRenderProps {\n /** The orientation of the tab list. */\n orientation: TabOrientation;\n /** Whether the tab list is disabled. */\n isDisabled: boolean;\n}\n\nexport interface TabListProps<T> extends Omit<AriaTabListProps, \"children\">, SlotProps {\n /** Items to render in the tab list. */\n items?: T[];\n /** The children of the tab list - static tabs or a render function for each item. */\n children?: JSX.Element | ((item: T) => JSX.Element);\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabListRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabListRenderProps>;\n}\n\nexport interface TabRenderProps {\n /** Whether the tab is selected. */\n isSelected: boolean;\n /** Whether the tab is focused. */\n isFocused: boolean;\n /** Whether the tab has visible focus ring. */\n isFocusVisible: boolean;\n /** Whether the tab is pressed. */\n isPressed: boolean;\n /** Whether the tab is hovered. */\n isHovered: boolean;\n /** Whether the tab is disabled. */\n isDisabled: boolean;\n}\n\nexport interface TabProps extends Omit<AriaTabProps, \"key\">, SlotProps {\n /** The unique key for the tab. */\n id: Key;\n /** The children of the tab. */\n children?: RenderChildren<TabRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabRenderProps>;\n}\n\nexport interface TabPanelRenderProps {\n /** Whether the panel is the selected one. */\n isSelected: boolean;\n /** Whether the panel is focused. */\n isFocused: boolean;\n /** Whether the panel has visible focus ring. */\n isFocusVisible: boolean;\n /** Whether the panel is non-interactive while force mounted. */\n isInert: boolean;\n /** Whether the panel is currently entering. */\n isEntering: boolean;\n /** Whether the panel is currently exiting. */\n isExiting: boolean;\n /** State of the tab list. */\n state: TabListState<unknown> | null;\n}\n\nexport interface TabPanelProps extends AriaTabPanelProps, SlotProps {\n /** The children of the tab panel. */\n children?: RenderChildren<TabPanelRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabPanelRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabPanelRenderProps>;\n /** Whether to keep the panel mounted when not selected. */\n shouldForceMount?: boolean;\n}\n\nexport interface TabPanelsProps extends SlotProps {\n /** The grouped tab panels. */\n children?: JSX.Element;\n /** The CSS className for the element. */\n class?: string;\n /** The inline style for the element. */\n style?: JSX.CSSProperties;\n}\n\ninterface TabsContextValue<T> {\n state: TabListState<T>;\n items: Accessor<T[]>;\n setTabListItems(items: T[] | undefined): void;\n registerTab(tab: RegisteredTab): void;\n unregisterTab(id: Key): void;\n}\n\ntype RefLike<T> = ((el: T) => void) | { current?: T | null } | undefined;\n\nfunction assignRef<T>(ref: RefLike<T>, element: T): void {\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(element);\n } else if (typeof ref === \"object\" && \"current\" in ref) {\n ref.current = element;\n }\n}\n\nexport const TabsContext = createContext<TabsContextValue<unknown> | null>(null);\nexport const TabsStateContext = createContext<TabListState<unknown> | null>(null);\n\ninterface RegisteredTab {\n id: Key;\n textValue?: string;\n isDisabled?: boolean;\n}\n\ninterface CollectionItemLike {\n id?: Key;\n key?: Key;\n label?: string;\n textValue?: string;\n isDisabled?: boolean;\n}\n\nfunction collectionItemKey<T>(item: T): Key {\n const tab = item as CollectionItemLike;\n const key = tab.id ?? tab.key;\n if (key == null) {\n throw new Error(\"Tabs collection items require an id or key.\");\n }\n return key;\n}\n\nfunction staticTabText(tab: RegisteredTab): string {\n return tab.textValue ?? String(tab.id);\n}\n\n/**\n * Tabs provide a way to organize content into multiple sections, with only one section visible at a time.\n */\nexport function Tabs<T>(props: TabsProps<T>): JSX.Element {\n const [local, stateProps, rest] = splitProps(\n props,\n [\"class\", \"style\", \"slot\", \"ref\"],\n [\n \"items\",\n \"getKey\",\n \"getTextValue\",\n \"getDisabled\",\n \"disabledKeys\",\n \"selectedKey\",\n \"defaultSelectedKey\",\n \"onSelectionChange\",\n \"isDisabled\",\n \"keyboardActivation\",\n \"orientation\",\n ],\n );\n\n const [tabListItems, setTabListItems] = createSignal<T[] | undefined>(undefined, {\n ownedWrite: true,\n });\n const [registeredTabs, setRegisteredTabs] = createSignal<RegisteredTab[]>([], {\n ownedWrite: true,\n });\n const effectiveItems = createMemo<T[]>(() => {\n if (stateProps.items) return stateProps.items;\n if (tabListItems()) return tabListItems() ?? [];\n return registeredTabs() as T[];\n });\n\n // Create tab list state\n const state = createTabListState<T>({\n get items() {\n return effectiveItems();\n },\n get getKey() {\n return stateProps.getKey ?? collectionItemKey;\n },\n get getTextValue() {\n return (\n stateProps.getTextValue ??\n ((item: T) => {\n const tab = item as RegisteredTab & CollectionItemLike;\n return tab.textValue ?? tab.label ?? staticTabText(tab);\n })\n );\n },\n get getDisabled() {\n return (\n stateProps.getDisabled ??\n ((item: T) => {\n const tab = item as RegisteredTab & CollectionItemLike;\n return tab.isDisabled ?? false;\n })\n );\n },\n get disabledKeys() {\n return stateProps.disabledKeys;\n },\n get selectedKey() {\n return stateProps.selectedKey;\n },\n get defaultSelectedKey() {\n return stateProps.defaultSelectedKey;\n },\n get onSelectionChange() {\n return stateProps.onSelectionChange;\n },\n get isDisabled() {\n return stateProps.isDisabled;\n },\n get keyboardActivation() {\n return stateProps.keyboardActivation;\n },\n get orientation() {\n return stateProps.orientation;\n },\n });\n\n const renderValues = createMemo<TabsRenderProps>(() => ({\n orientation: state.orientation(),\n isDisabled: state.isDisabled(),\n }));\n\n const renderProps = useRenderProps(\n {\n class: local.class,\n style: local.style,\n get children() {\n return props.children;\n },\n defaultClassName: \"solidaria-Tabs\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n\n const contextValue: TabsContextValue<T> = {\n state,\n items: effectiveItems,\n setTabListItems(items) {\n setTabListItems(() => items);\n },\n registerTab(tab) {\n setRegisteredTabs((current) => {\n const next = current.filter((item) => item.id !== tab.id);\n next.push(tab);\n return next;\n });\n },\n unregisterTab(id) {\n setRegisteredTabs((current) => current.filter((item) => item.id !== id));\n },\n };\n\n return (\n <TabsContext value={contextValue as TabsContextValue<unknown>}>\n <TabsStateContext value={state}>\n <div\n {...domProps()}\n ref={(element) => assignRef(local.ref, element)}\n class={renderProps.class()}\n style={renderProps.style()}\n data-orientation={state.orientation()}\n data-disabled={dataAttr(state.isDisabled())}\n >\n {props.children as JSX.Element}\n </div>\n </TabsStateContext>\n </TabsContext>\n );\n}\n\n/**\n * A TabList contains Tab elements that represent the available tabs.\n */\nexport function TabList<T>(props: TabListProps<T>): JSX.Element {\n const [local, collectionProps, ariaProps] = splitProps(\n props,\n [\"class\", \"style\", \"slot\"],\n [\"items\"],\n );\n\n const context = useContext(TabsContext);\n\n if (!context) {\n return <div class=\"solidaria-TabList\" role=\"tablist\" />;\n }\n\n const state = context.state as TabListState<T>;\n const items = context.items as Accessor<T[]>;\n\n createEffect(\n () => collectionProps.items as unknown[] | undefined,\n (items) => {\n context.setTabListItems(items);\n },\n );\n\n onCleanup(() => {\n context.setTabListItems(undefined);\n });\n\n // Create tab list aria props\n const { tabListProps } = createTabList<T>(ariaProps as AriaTabListProps, state);\n\n const renderValues = createMemo<TabListRenderProps>(() => ({\n orientation: state.orientation(),\n isDisabled: state.isDisabled(),\n }));\n\n const renderProps = useRenderProps(\n {\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-TabList\",\n },\n renderValues,\n );\n\n const handleKeyDown = (e: KeyboardEvent) => {\n tabListProps.onKeyDown(e);\n };\n\n const handleFocus = (e: FocusEvent) => {\n tabListProps.onFocusIn(e);\n };\n\n const handleBlur = (e: FocusEvent) => {\n tabListProps.onFocusOut(e);\n };\n\n const renderChildren = () => {\n const children = props.children;\n const isItemRenderer =\n typeof children === \"function\" && (children as (...args: unknown[]) => unknown).length > 0;\n\n if (isItemRenderer) {\n return (\n <SharedElementTransition>\n <For each={(collectionProps.items ?? items()) as T[]}>\n {(item) => (children as (item: T) => JSX.Element)(item)}\n </For>\n </SharedElementTransition>\n );\n }\n\n return children as JSX.Element;\n };\n\n return (\n <div\n role={tabListProps.role}\n aria-orientation={tabListProps[\"aria-orientation\"]}\n aria-label={tabListProps[\"aria-label\"]}\n aria-labelledby={tabListProps[\"aria-labelledby\"]}\n aria-describedby={tabListProps[\"aria-describedby\"]}\n class={renderProps.class()}\n style={renderProps.style()}\n onKeyDown={handleKeyDown}\n onFocusIn={handleFocus}\n onFocusOut={handleBlur}\n data-orientation={state.orientation()}\n data-disabled={dataAttr(state.isDisabled())}\n >\n {renderChildren()}\n </div>\n );\n}\n\n/**\n * A Tab represents an individual tab in a TabList.\n */\nexport function Tab(props: TabProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\"class\", \"style\", \"slot\", \"id\"]);\n\n const context = useContext(TabsStateContext);\n const tabsContext = useContext(TabsContext);\n\n if (!context) {\n return <div class=\"solidaria-Tab\" role=\"tab\" />;\n }\n\n const [tabRef, setTabRef] = createSignal<HTMLDivElement | null>(null);\n const textValue = () => {\n if (ariaProps[\"aria-label\"]) return ariaProps[\"aria-label\"];\n return typeof props.children === \"string\" ? props.children : undefined;\n };\n\n createEffect(\n () => ({\n id: local.id,\n textValue: textValue(),\n isDisabled: ariaProps.isDisabled,\n }),\n (tab) => {\n tabsContext?.registerTab(tab);\n },\n );\n\n onCleanup(() => {\n tabsContext?.unregisterTab(local.id);\n });\n\n // Create tab aria props\n const tabAria = createTab<unknown>(\n {\n key: local.id,\n get isDisabled() {\n return ariaProps.isDisabled;\n },\n get \"aria-label\"() {\n return ariaProps[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return ariaProps[\"aria-labelledby\"];\n },\n },\n context,\n tabRef,\n );\n\n const { isHovered, hoverProps } = createHover({\n get isDisabled() {\n return tabAria.isDisabled();\n },\n });\n\n const renderValues = createMemo<TabRenderProps>(() => ({\n isSelected: tabAria.isSelected(),\n isFocused: tabAria.isFocused(),\n isFocusVisible: tabAria.isFocusVisible(),\n isPressed: tabAria.isPressed(),\n isHovered: isHovered(),\n isDisabled: tabAria.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-Tab\",\n },\n renderValues,\n );\n\n const selectionIndicatorContext = createMemo<SelectionIndicatorContextValue>(() => ({\n isSelected: tabAria.isSelected,\n }));\n\n return (\n <div\n ref={setTabRef}\n id={tabAria.tabProps.id}\n role={tabAria.tabProps.role}\n aria-selected={ariaTrueFalse(tabAria.isSelected())}\n aria-disabled={attrTrue(tabAria.isDisabled())}\n aria-controls={tabAria.isSelected() ? tabAria.tabProps[\"aria-controls\"] : undefined}\n aria-label={tabAria.tabProps[\"aria-label\"]}\n aria-labelledby={tabAria.tabProps[\"aria-labelledby\"]}\n tabindex={tabAria.tabProps.tabIndex}\n class={renderProps.class()}\n style={renderProps.style()}\n onKeyDown={tabAria.tabProps.onKeyDown}\n onMouseDown={tabAria.tabProps.onMouseDown}\n onPointerDown={tabAria.tabProps.onPointerDown}\n onClick={tabAria.tabProps.onClick}\n onFocus={tabAria.tabProps.onFocus}\n onFocusIn={tabAria.tabProps.onFocusIn}\n onBlur={tabAria.tabProps.onBlur}\n {...hoverProps}\n data-selected={dataAttr(tabAria.isSelected())}\n data-focused={dataAttr(tabAria.isFocused())}\n data-focus-visible={dataAttr(tabAria.isFocusVisible())}\n data-pressed={dataAttr(tabAria.isPressed())}\n data-hovered={dataAttr(isHovered())}\n data-disabled={dataAttr(tabAria.isDisabled())}\n >\n <SelectionIndicatorContext value={selectionIndicatorContext()}>\n {renderProps.renderChildrenStable()}\n </SelectionIndicatorContext>\n </div>\n );\n}\n\n/**\n * Groups multiple TabPanel elements.\n */\nexport function TabPanels(props: TabPanelsProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"class\", \"style\", \"slot\", \"children\"]);\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n const state = useContext(TabsStateContext);\n let ref: HTMLDivElement | undefined;\n let previousSelectedKey: Key | null | undefined = undefined;\n const [panelSize, setPanelSize] = createSignal<{ width?: string; height?: string }>({});\n\n createTrackedEffect(() => {\n const selectedKey = state?.selectedKey() ?? null;\n if (!ref) {\n previousSelectedKey = selectedKey;\n return;\n }\n\n if (previousSelectedKey === undefined) {\n previousSelectedKey = selectedKey;\n return;\n }\n\n if (previousSelectedKey === selectedKey) return;\n previousSelectedKey = selectedKey;\n\n const transition = window.getComputedStyle(ref).transition;\n const shouldMeasureWidth = /width|inline-size|all/.test(transition);\n const shouldMeasureHeight = /height|block-size|all/.test(transition);\n if (!shouldMeasureWidth && !shouldMeasureHeight) return;\n\n const selectedPanel = ref.querySelector<HTMLElement>('[role=\"tabpanel\"]:not([hidden])');\n if (!selectedPanel) return;\n\n setPanelSize({\n width: shouldMeasureWidth ? `${selectedPanel.offsetWidth}px` : undefined,\n height: shouldMeasureHeight ? `${selectedPanel.offsetHeight}px` : undefined,\n });\n });\n\n const mergedStyle = (): JSX.CSSProperties =>\n ({\n ...local.style,\n ...(panelSize().width ? { \"--tab-panel-width\": panelSize().width } : {}),\n ...(panelSize().height ? { \"--tab-panel-height\": panelSize().height } : {}),\n }) as JSX.CSSProperties;\n\n return (\n <div\n {...domProps()}\n ref={(el) => {\n ref = el;\n }}\n class={local.class ?? \"solidaria-TabPanels\"}\n style={mergedStyle()}\n >\n {local.children}\n </div>\n );\n}\n\n/**\n * A TabPanel displays the content for a selected Tab.\n */\nexport function TabPanel(props: TabPanelProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\"class\", \"style\", \"slot\", \"shouldForceMount\"]);\n const [panelRef, setPanelRef] = createSignal<HTMLDivElement>();\n\n // Get state from context (may be null for SSR scenarios)\n const state = useContext(TabsStateContext);\n\n // Create tab panel aria props\n const { tabPanelProps, isSelected } = createTabPanel<unknown>(ariaProps, state, panelRef);\n\n // Create focus ring for the panel\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n const isInert = () =>\n Boolean(local.shouldForceMount && ariaProps.id !== undefined && !isSelected());\n const isEntering = () => false;\n const isExiting = () => false;\n\n const renderValues = createMemo<TabPanelRenderProps>(() => ({\n isSelected: isSelected(),\n isFocused: isFocused(),\n isFocusVisible: isFocusVisible(),\n isInert: isInert(),\n isEntering: isEntering(),\n isExiting: isExiting(),\n state,\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-TabPanel\",\n },\n renderValues,\n );\n\n // Determine if we should render the panel\n // If no id is provided, render when any tab is selected (shared panel pattern)\n // If id is provided, render when that specific tab is selected\n const shouldRender = () => {\n if (local.shouldForceMount) return true;\n if (ariaProps.id === undefined) {\n return state ? state.selectedKey() !== null : true;\n }\n return isSelected();\n };\n\n return (\n <Show when={shouldRender()}>\n <div\n ref={setPanelRef}\n id={tabPanelProps.id}\n role={tabPanelProps.role}\n aria-labelledby={tabPanelProps[\"aria-labelledby\"]}\n aria-label={tabPanelProps[\"aria-label\"]}\n aria-describedby={tabPanelProps[\"aria-describedby\"]}\n tabindex={tabPanelProps.tabIndex}\n class={renderProps.class()}\n style={renderProps.style()}\n onFocus={focusProps.onFocus}\n onBlur={focusProps.onBlur}\n data-selected={dataAttr(isSelected())}\n data-focused={dataAttr(isFocused())}\n data-focus-visible={dataAttr(isFocusVisible())}\n inert={isInert() ? true : undefined}\n data-inert={dataAttr(isInert())}\n data-entering={dataAttr(isEntering())}\n data-exiting={dataAttr(isExiting())}\n hidden={\n ariaProps.id !== undefined && !isSelected() && !local.shouldForceMount ? true : undefined\n }\n >\n {renderProps.renderChildren()}\n </div>\n </Show>\n );\n}\n\nTabs.List = TabList;\nTabs.Tab = Tab;\nTabs.Panels = TabPanels;\nTabs.Panel = TabPanel;\nTabs.SelectionIndicator = SelectionIndicator;\n"],"mappings":"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"}
|
package/dist/Tabs.jsx
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2022 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/Tabs.tsx
|
|
13
|
+
import { ariaTrueFalse, attrTrue, dataAttr, filterDOMProps, useRenderProps } from "./utils.jsx";
|
|
2
14
|
import { SharedElementTransition } from "./SharedElementTransition.jsx";
|
|
3
15
|
import { SelectionIndicator, SelectionIndicatorContext } from "./SelectionIndicator.jsx";
|
|
4
|
-
import { For, Show, createContext, createEffect, createMemo, createSignal,
|
|
16
|
+
import { For, Show, createContext, createEffect, createMemo, createSignal, createTrackedEffect, onCleanup, useContext } from "solid-js";
|
|
5
17
|
import { createFocusRing, createHover, createTab, createTabList, createTabPanel } from "@proyecto-viviana/solidaria";
|
|
18
|
+
import { splitProps } from "@proyecto-viviana/solidaria/utils";
|
|
6
19
|
import { createTabListState } from "@proyecto-viviana/solid-stately";
|
|
7
20
|
//#region src/Tabs.tsx
|
|
8
21
|
/**
|
|
@@ -11,7 +24,7 @@ import { createTabListState } from "@proyecto-viviana/solid-stately";
|
|
|
11
24
|
* A pre-wired headless tabs component that combines state + aria hooks.
|
|
12
25
|
* Port of react-aria-components/src/Tabs.tsx
|
|
13
26
|
*/
|
|
14
|
-
function assignRef(ref, element) {
|
|
27
|
+
function assignRef$1(ref, element) {
|
|
15
28
|
if (!ref) return;
|
|
16
29
|
if (typeof ref === "function") ref(element);
|
|
17
30
|
else if (typeof ref === "object" && "current" in ref) ref.current = element;
|
|
@@ -49,8 +62,8 @@ function Tabs(props) {
|
|
|
49
62
|
"keyboardActivation",
|
|
50
63
|
"orientation"
|
|
51
64
|
]);
|
|
52
|
-
const [tabListItems, setTabListItems] = createSignal(void 0);
|
|
53
|
-
const [registeredTabs, setRegisteredTabs] = createSignal([]);
|
|
65
|
+
const [tabListItems, setTabListItems] = createSignal(void 0, { ownedWrite: true });
|
|
66
|
+
const [registeredTabs, setRegisteredTabs] = createSignal([], { ownedWrite: true });
|
|
54
67
|
const effectiveItems = createMemo(() => {
|
|
55
68
|
if (stateProps.items) return stateProps.items;
|
|
56
69
|
if (tabListItems()) return tabListItems() ?? [];
|
|
@@ -126,13 +139,13 @@ function Tabs(props) {
|
|
|
126
139
|
setRegisteredTabs((current) => current.filter((item) => item.id !== id));
|
|
127
140
|
}
|
|
128
141
|
};
|
|
129
|
-
return <TabsContext
|
|
130
|
-
<TabsStateContext
|
|
131
|
-
<div {...domProps()} ref={(element) => assignRef(local.ref, element)} class={renderProps.class()} style={renderProps.style()} data-orientation={state.orientation()} data-disabled={state.isDisabled()
|
|
142
|
+
return <TabsContext value={contextValue}>
|
|
143
|
+
<TabsStateContext value={state}>
|
|
144
|
+
<div {...domProps()} ref={(element) => assignRef$1(local.ref, element)} class={renderProps.class()} style={renderProps.style()} data-orientation={state.orientation()} data-disabled={dataAttr(state.isDisabled())}>
|
|
132
145
|
{props.children}
|
|
133
146
|
</div>
|
|
134
|
-
</TabsStateContext
|
|
135
|
-
</TabsContext
|
|
147
|
+
</TabsStateContext>
|
|
148
|
+
</TabsContext>;
|
|
136
149
|
}
|
|
137
150
|
/**
|
|
138
151
|
* A TabList contains Tab elements that represent the available tabs.
|
|
@@ -144,37 +157,23 @@ function TabList(props) {
|
|
|
144
157
|
"slot"
|
|
145
158
|
], ["items"]);
|
|
146
159
|
const context = useContext(TabsContext);
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
function TabListInner(props) {
|
|
153
|
-
const state = props.context.state;
|
|
154
|
-
const items = props.context.items;
|
|
155
|
-
const renderItem = createMemo(() => {
|
|
156
|
-
if (typeof props.children !== "function") return;
|
|
157
|
-
if (props.children.length === 0 && props.items === void 0) return;
|
|
158
|
-
return props.children;
|
|
159
|
-
});
|
|
160
|
-
const renderedChildren = createMemo(() => {
|
|
161
|
-
if (renderItem() || typeof props.children !== "function") return props.children;
|
|
162
|
-
return props.children();
|
|
163
|
-
});
|
|
164
|
-
createEffect(() => {
|
|
165
|
-
props.context.setTabListItems(props.items);
|
|
160
|
+
if (!context) return <div class="solidaria-TabList" role="tablist" />;
|
|
161
|
+
const state = context.state;
|
|
162
|
+
const items = context.items;
|
|
163
|
+
createEffect(() => collectionProps.items, (items) => {
|
|
164
|
+
context.setTabListItems(items);
|
|
166
165
|
});
|
|
167
166
|
onCleanup(() => {
|
|
168
|
-
|
|
167
|
+
context.setTabListItems(void 0);
|
|
169
168
|
});
|
|
170
|
-
const { tabListProps } = createTabList(
|
|
169
|
+
const { tabListProps } = createTabList(ariaProps, state);
|
|
171
170
|
const renderValues = createMemo(() => ({
|
|
172
171
|
orientation: state.orientation(),
|
|
173
172
|
isDisabled: state.isDisabled()
|
|
174
173
|
}));
|
|
175
174
|
const renderProps = useRenderProps({
|
|
176
|
-
class:
|
|
177
|
-
style:
|
|
175
|
+
class: local.class,
|
|
176
|
+
style: local.style,
|
|
178
177
|
defaultClassName: "solidaria-TabList"
|
|
179
178
|
}, renderValues);
|
|
180
179
|
const handleKeyDown = (e) => {
|
|
@@ -186,10 +185,17 @@ function TabListInner(props) {
|
|
|
186
185
|
const handleBlur = (e) => {
|
|
187
186
|
tabListProps.onFocusOut(e);
|
|
188
187
|
};
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
188
|
+
const renderChildren = () => {
|
|
189
|
+
const children = props.children;
|
|
190
|
+
if (typeof children === "function" && children.length > 0) return <SharedElementTransition>
|
|
191
|
+
<For each={collectionProps.items ?? items()}>
|
|
192
|
+
{(item) => children(item)}
|
|
193
|
+
</For>
|
|
194
|
+
</SharedElementTransition>;
|
|
195
|
+
return children;
|
|
196
|
+
};
|
|
197
|
+
return <div role={tabListProps.role} aria-orientation={tabListProps["aria-orientation"]} aria-label={tabListProps["aria-label"]} aria-labelledby={tabListProps["aria-labelledby"]} aria-describedby={tabListProps["aria-describedby"]} class={renderProps.class()} style={renderProps.style()} onKeyDown={handleKeyDown} onFocusIn={handleFocus} onFocusOut={handleBlur} data-orientation={state.orientation()} data-disabled={dataAttr(state.isDisabled())}>
|
|
198
|
+
{renderChildren()}
|
|
193
199
|
</div>;
|
|
194
200
|
}
|
|
195
201
|
/**
|
|
@@ -204,39 +210,34 @@ function Tab(props) {
|
|
|
204
210
|
]);
|
|
205
211
|
const context = useContext(TabsStateContext);
|
|
206
212
|
const tabsContext = useContext(TabsContext);
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
</Show>;
|
|
210
|
-
}
|
|
211
|
-
/** Inner Tab component that has access to context */
|
|
212
|
-
function TabInner(props) {
|
|
213
|
-
let tabRef;
|
|
213
|
+
if (!context) return <div class="solidaria-Tab" role="tab" />;
|
|
214
|
+
const [tabRef, setTabRef] = createSignal(null);
|
|
214
215
|
const textValue = () => {
|
|
215
|
-
if (
|
|
216
|
+
if (ariaProps["aria-label"]) return ariaProps["aria-label"];
|
|
216
217
|
return typeof props.children === "string" ? props.children : void 0;
|
|
217
218
|
};
|
|
218
|
-
createEffect(() => {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
219
|
+
createEffect(() => ({
|
|
220
|
+
id: local.id,
|
|
221
|
+
textValue: textValue(),
|
|
222
|
+
isDisabled: ariaProps.isDisabled
|
|
223
|
+
}), (tab) => {
|
|
224
|
+
tabsContext?.registerTab(tab);
|
|
224
225
|
});
|
|
225
226
|
onCleanup(() => {
|
|
226
|
-
|
|
227
|
+
tabsContext?.unregisterTab(local.id);
|
|
227
228
|
});
|
|
228
229
|
const tabAria = createTab({
|
|
229
|
-
key:
|
|
230
|
+
key: local.id,
|
|
230
231
|
get isDisabled() {
|
|
231
|
-
return
|
|
232
|
+
return ariaProps.isDisabled;
|
|
232
233
|
},
|
|
233
234
|
get "aria-label"() {
|
|
234
|
-
return
|
|
235
|
+
return ariaProps["aria-label"];
|
|
235
236
|
},
|
|
236
237
|
get "aria-labelledby"() {
|
|
237
|
-
return
|
|
238
|
+
return ariaProps["aria-labelledby"];
|
|
238
239
|
}
|
|
239
|
-
},
|
|
240
|
+
}, context, tabRef);
|
|
240
241
|
const { isHovered, hoverProps } = createHover({ get isDisabled() {
|
|
241
242
|
return tabAria.isDisabled();
|
|
242
243
|
} });
|
|
@@ -252,16 +253,16 @@ function TabInner(props) {
|
|
|
252
253
|
get children() {
|
|
253
254
|
return props.children;
|
|
254
255
|
},
|
|
255
|
-
class:
|
|
256
|
-
style:
|
|
256
|
+
class: local.class,
|
|
257
|
+
style: local.style,
|
|
257
258
|
defaultClassName: "solidaria-Tab"
|
|
258
259
|
}, renderValues);
|
|
259
260
|
const selectionIndicatorContext = createMemo(() => ({ isSelected: tabAria.isSelected }));
|
|
260
|
-
return <
|
|
261
|
-
<
|
|
261
|
+
return <div ref={setTabRef} id={tabAria.tabProps.id} role={tabAria.tabProps.role} aria-selected={ariaTrueFalse(tabAria.isSelected())} aria-disabled={attrTrue(tabAria.isDisabled())} aria-controls={tabAria.isSelected() ? tabAria.tabProps["aria-controls"] : void 0} aria-label={tabAria.tabProps["aria-label"]} aria-labelledby={tabAria.tabProps["aria-labelledby"]} tabindex={tabAria.tabProps.tabIndex} class={renderProps.class()} style={renderProps.style()} onKeyDown={tabAria.tabProps.onKeyDown} onMouseDown={tabAria.tabProps.onMouseDown} onPointerDown={tabAria.tabProps.onPointerDown} onClick={tabAria.tabProps.onClick} onFocus={tabAria.tabProps.onFocus} onFocusIn={tabAria.tabProps.onFocusIn} onBlur={tabAria.tabProps.onBlur} {...hoverProps} data-selected={dataAttr(tabAria.isSelected())} data-focused={dataAttr(tabAria.isFocused())} data-focus-visible={dataAttr(tabAria.isFocusVisible())} data-pressed={dataAttr(tabAria.isPressed())} data-hovered={dataAttr(isHovered())} data-disabled={dataAttr(tabAria.isDisabled())}>
|
|
262
|
+
<SelectionIndicatorContext value={selectionIndicatorContext()}>
|
|
262
263
|
{renderProps.renderChildrenStable()}
|
|
263
|
-
</
|
|
264
|
-
</
|
|
264
|
+
</SelectionIndicatorContext>
|
|
265
|
+
</div>;
|
|
265
266
|
}
|
|
266
267
|
/**
|
|
267
268
|
* Groups multiple TabPanel elements.
|
|
@@ -278,7 +279,7 @@ function TabPanels(props) {
|
|
|
278
279
|
let ref;
|
|
279
280
|
let previousSelectedKey = void 0;
|
|
280
281
|
const [panelSize, setPanelSize] = createSignal({});
|
|
281
|
-
|
|
282
|
+
createTrackedEffect(() => {
|
|
282
283
|
const selectedKey = state?.selectedKey() ?? null;
|
|
283
284
|
if (!ref) {
|
|
284
285
|
previousSelectedKey = selectedKey;
|
|
@@ -322,8 +323,9 @@ function TabPanel(props) {
|
|
|
322
323
|
"slot",
|
|
323
324
|
"shouldForceMount"
|
|
324
325
|
]);
|
|
326
|
+
const [panelRef, setPanelRef] = createSignal();
|
|
325
327
|
const state = useContext(TabsStateContext);
|
|
326
|
-
const { tabPanelProps, isSelected } = createTabPanel(ariaProps, state);
|
|
328
|
+
const { tabPanelProps, isSelected } = createTabPanel(ariaProps, state, panelRef);
|
|
327
329
|
const { isFocused, isFocusVisible, focusProps } = createFocusRing();
|
|
328
330
|
const isInert = () => Boolean(local.shouldForceMount && ariaProps.id !== void 0 && !isSelected());
|
|
329
331
|
const isEntering = () => false;
|
|
@@ -351,7 +353,7 @@ function TabPanel(props) {
|
|
|
351
353
|
return isSelected();
|
|
352
354
|
};
|
|
353
355
|
return <Show when={shouldRender()}>
|
|
354
|
-
<div id={tabPanelProps.id} role={tabPanelProps.role} aria-labelledby={tabPanelProps["aria-labelledby"]} aria-label={tabPanelProps["aria-label"]} aria-describedby={tabPanelProps["aria-describedby"]}
|
|
356
|
+
<div ref={setPanelRef} id={tabPanelProps.id} role={tabPanelProps.role} aria-labelledby={tabPanelProps["aria-labelledby"]} aria-label={tabPanelProps["aria-label"]} aria-describedby={tabPanelProps["aria-describedby"]} tabindex={tabPanelProps.tabIndex} class={renderProps.class()} style={renderProps.style()} onFocus={focusProps.onFocus} onBlur={focusProps.onBlur} data-selected={dataAttr(isSelected())} data-focused={dataAttr(isFocused())} data-focus-visible={dataAttr(isFocusVisible())} inert={isInert() ? true : void 0} data-inert={dataAttr(isInert())} data-entering={dataAttr(isEntering())} data-exiting={dataAttr(isExiting())} hidden={ariaProps.id !== void 0 && !isSelected() && !local.shouldForceMount ? true : void 0}>
|
|
355
357
|
{renderProps.renderChildren()}
|
|
356
358
|
</div>
|
|
357
359
|
</Show>;
|
package/dist/Tabs.jsx.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.jsx","names":["tab"],"sources":["../src/Tabs.tsx"],"sourcesContent":["/**\n * Tabs component for solidaria-components\n *\n * A pre-wired headless tabs component that combines state + aria hooks.\n * Port of react-aria-components/src/Tabs.tsx\n */\n\nimport {\n type Accessor,\n type JSX,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n splitProps,\n useContext,\n For,\n Show,\n onCleanup,\n} from \"solid-js\";\nimport {\n createTabList,\n createTab,\n createTabPanel,\n createFocusRing,\n createHover,\n type AriaTabListProps,\n type AriaTabProps,\n type AriaTabPanelProps,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n createTabListState,\n type TabListState,\n type Key,\n type TabOrientation,\n type KeyboardActivation,\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 {\n SelectionIndicator,\n SelectionIndicatorContext,\n type SelectionIndicatorContextValue,\n} from \"./SelectionIndicator\";\nimport { SharedElementTransition } from \"./SharedElementTransition\";\n\nexport {\n SelectionIndicator,\n SelectionIndicatorContext,\n type SelectionIndicatorProps,\n type SelectionIndicatorRenderProps,\n} from \"./SelectionIndicator\";\n\nexport interface TabsRenderProps {\n /** The orientation of the tabs. */\n orientation: TabOrientation;\n /** Whether the tabs are disabled. */\n isDisabled: boolean;\n}\n\nexport interface TabsProps<T> extends SlotProps {\n /** The items to render in the tab list. */\n items?: 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 tabs. */\n disabledKeys?: Iterable<Key>;\n /** The currently selected tab key (controlled). */\n selectedKey?: Key | null;\n /** The default selected tab key (uncontrolled). */\n defaultSelectedKey?: Key;\n /** Handler for tab selection changes. */\n onSelectionChange?: (key: Key) => void;\n /** Whether the tabs are disabled. */\n isDisabled?: boolean;\n /** The keyboard activation mode. */\n keyboardActivation?: KeyboardActivation;\n /** The orientation of the tabs. */\n orientation?: TabOrientation;\n /** The children of the component. */\n children?: RenderChildren<TabsRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabsRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabsRenderProps>;\n /** Ref for the root tabs element. */\n ref?: RefLike<HTMLDivElement>;\n}\n\nexport interface TabListRenderProps {\n /** The orientation of the tab list. */\n orientation: TabOrientation;\n /** Whether the tab list is disabled. */\n isDisabled: boolean;\n}\n\nexport interface TabListProps<T> extends Omit<AriaTabListProps, \"children\">, SlotProps {\n /** Items to render in the tab list. */\n items?: T[];\n /** The children of the tab list - static tabs or a render function for each item. */\n children?: JSX.Element | ((item: T) => JSX.Element);\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabListRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabListRenderProps>;\n}\n\nexport interface TabRenderProps {\n /** Whether the tab is selected. */\n isSelected: boolean;\n /** Whether the tab is focused. */\n isFocused: boolean;\n /** Whether the tab has visible focus ring. */\n isFocusVisible: boolean;\n /** Whether the tab is pressed. */\n isPressed: boolean;\n /** Whether the tab is hovered. */\n isHovered: boolean;\n /** Whether the tab is disabled. */\n isDisabled: boolean;\n}\n\nexport interface TabProps extends Omit<AriaTabProps, \"key\">, SlotProps {\n /** The unique key for the tab. */\n id: Key;\n /** The children of the tab. */\n children?: RenderChildren<TabRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabRenderProps>;\n}\n\nexport interface TabPanelRenderProps {\n /** Whether the panel is the selected one. */\n isSelected: boolean;\n /** Whether the panel is focused. */\n isFocused: boolean;\n /** Whether the panel has visible focus ring. */\n isFocusVisible: boolean;\n /** Whether the panel is non-interactive while force mounted. */\n isInert: boolean;\n /** Whether the panel is currently entering. */\n isEntering: boolean;\n /** Whether the panel is currently exiting. */\n isExiting: boolean;\n /** State of the tab list. */\n state: TabListState<unknown> | null;\n}\n\nexport interface TabPanelProps extends AriaTabPanelProps, SlotProps {\n /** The children of the tab panel. */\n children?: RenderChildren<TabPanelRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabPanelRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabPanelRenderProps>;\n /** Whether to keep the panel mounted when not selected. */\n shouldForceMount?: boolean;\n}\n\nexport interface TabPanelsProps extends SlotProps {\n /** The grouped tab panels. */\n children?: JSX.Element;\n /** The CSS className for the element. */\n class?: string;\n /** The inline style for the element. */\n style?: JSX.CSSProperties;\n}\n\ninterface TabsContextValue<T> {\n state: TabListState<T>;\n items: Accessor<T[]>;\n setTabListItems(items: T[] | undefined): void;\n registerTab(tab: RegisteredTab): void;\n unregisterTab(id: Key): void;\n}\n\ntype RefLike<T> = ((el: T) => void) | { current?: T | null } | undefined;\n\nfunction assignRef<T>(ref: RefLike<T>, element: T): void {\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(element);\n } else if (typeof ref === \"object\" && \"current\" in ref) {\n ref.current = element;\n }\n}\n\nexport const TabsContext = createContext<TabsContextValue<unknown> | null>(null);\nexport const TabsStateContext = createContext<TabListState<unknown> | null>(null);\n\ninterface RegisteredTab {\n id: Key;\n textValue?: string;\n isDisabled?: boolean;\n}\n\ninterface CollectionItemLike {\n id?: Key;\n key?: Key;\n label?: string;\n textValue?: string;\n isDisabled?: boolean;\n}\n\nfunction collectionItemKey<T>(item: T): Key {\n const tab = item as CollectionItemLike;\n const key = tab.id ?? tab.key;\n if (key == null) {\n throw new Error(\"Tabs collection items require an id or key.\");\n }\n return key;\n}\n\nfunction staticTabText(tab: RegisteredTab): string {\n return tab.textValue ?? String(tab.id);\n}\n\n/**\n * Tabs provide a way to organize content into multiple sections, with only one section visible at a time.\n */\nexport function Tabs<T>(props: TabsProps<T>): JSX.Element {\n const [local, stateProps, rest] = splitProps(\n props,\n [\"class\", \"style\", \"slot\", \"ref\"],\n [\n \"items\",\n \"getKey\",\n \"getTextValue\",\n \"getDisabled\",\n \"disabledKeys\",\n \"selectedKey\",\n \"defaultSelectedKey\",\n \"onSelectionChange\",\n \"isDisabled\",\n \"keyboardActivation\",\n \"orientation\",\n ],\n );\n\n const [tabListItems, setTabListItems] = createSignal<T[] | undefined>(undefined);\n const [registeredTabs, setRegisteredTabs] = createSignal<RegisteredTab[]>([]);\n const effectiveItems = createMemo<T[]>(() => {\n if (stateProps.items) return stateProps.items;\n if (tabListItems()) return tabListItems() ?? [];\n return registeredTabs() as T[];\n });\n\n // Create tab list state\n const state = createTabListState<T>({\n get items() {\n return effectiveItems();\n },\n get getKey() {\n return stateProps.getKey ?? collectionItemKey;\n },\n get getTextValue() {\n return (\n stateProps.getTextValue ??\n ((item: T) => {\n const tab = item as RegisteredTab & CollectionItemLike;\n return tab.textValue ?? tab.label ?? staticTabText(tab);\n })\n );\n },\n get getDisabled() {\n return (\n stateProps.getDisabled ??\n ((item: T) => {\n const tab = item as RegisteredTab & CollectionItemLike;\n return tab.isDisabled ?? false;\n })\n );\n },\n get disabledKeys() {\n return stateProps.disabledKeys;\n },\n get selectedKey() {\n return stateProps.selectedKey;\n },\n get defaultSelectedKey() {\n return stateProps.defaultSelectedKey;\n },\n get onSelectionChange() {\n return stateProps.onSelectionChange;\n },\n get isDisabled() {\n return stateProps.isDisabled;\n },\n get keyboardActivation() {\n return stateProps.keyboardActivation;\n },\n get orientation() {\n return stateProps.orientation;\n },\n });\n\n const renderValues = createMemo<TabsRenderProps>(() => ({\n orientation: state.orientation(),\n isDisabled: state.isDisabled(),\n }));\n\n const renderProps = useRenderProps(\n {\n class: local.class,\n style: local.style,\n get children() {\n return props.children;\n },\n defaultClassName: \"solidaria-Tabs\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n\n const contextValue: TabsContextValue<T> = {\n state,\n items: effectiveItems,\n setTabListItems(items) {\n setTabListItems(() => items);\n },\n registerTab(tab) {\n setRegisteredTabs((current) => {\n const next = current.filter((item) => item.id !== tab.id);\n next.push(tab);\n return next;\n });\n },\n unregisterTab(id) {\n setRegisteredTabs((current) => current.filter((item) => item.id !== id));\n },\n };\n\n return (\n <TabsContext.Provider value={contextValue as TabsContextValue<unknown>}>\n <TabsStateContext.Provider value={state}>\n <div\n {...domProps()}\n ref={(element) => assignRef(local.ref, element)}\n class={renderProps.class()}\n style={renderProps.style()}\n data-orientation={state.orientation()}\n data-disabled={state.isDisabled() || undefined}\n >\n {props.children as JSX.Element}\n </div>\n </TabsStateContext.Provider>\n </TabsContext.Provider>\n );\n}\n\n/**\n * A TabList contains Tab elements that represent the available tabs.\n */\nexport function TabList<T>(props: TabListProps<T>): JSX.Element {\n const [local, collectionProps, ariaProps] = splitProps(\n props,\n [\"class\", \"style\", \"slot\"],\n [\"items\"],\n );\n\n const context = useContext(TabsContext);\n\n return (\n <Show when={context} fallback={<div class=\"solidaria-TabList\" role=\"tablist\" />}>\n {(ctx) => (\n <TabListInner\n context={ctx()}\n local={local}\n items={collectionProps.items}\n ariaProps={ariaProps}\n children={props.children}\n />\n )}\n </Show>\n );\n}\n\n/** Inner TabList component that has access to context */\nfunction TabListInner<T>(props: {\n context: TabsContextValue<unknown>;\n local: {\n class?: ClassNameOrFunction<TabListRenderProps>;\n style?: StyleOrFunction<TabListRenderProps>;\n slot?: string;\n };\n ariaProps: Omit<TabListProps<T>, \"children\" | \"class\" | \"style\" | \"slot\" | \"items\">;\n items?: T[];\n children?: JSX.Element | ((item: T) => JSX.Element);\n}): JSX.Element {\n const state = props.context.state as TabListState<T>;\n const items = props.context.items as Accessor<T[]>;\n const renderItem = createMemo(() => {\n if (typeof props.children !== \"function\") {\n return undefined;\n }\n\n const child = props.children as (...args: unknown[]) => JSX.Element;\n if (child.length === 0 && props.items === undefined) {\n return undefined;\n }\n\n return props.children as (item: T) => JSX.Element;\n });\n const renderedChildren = createMemo(() => {\n if (renderItem() || typeof props.children !== \"function\") {\n return props.children as JSX.Element;\n }\n\n return (props.children as () => JSX.Element)();\n });\n\n createEffect(() => {\n props.context.setTabListItems(props.items as unknown[] | undefined);\n });\n\n onCleanup(() => {\n props.context.setTabListItems(undefined);\n });\n\n // Create tab list aria props\n const { tabListProps } = createTabList<T>(props.ariaProps as AriaTabListProps, state);\n\n const renderValues = createMemo<TabListRenderProps>(() => ({\n orientation: state.orientation(),\n isDisabled: state.isDisabled(),\n }));\n\n const renderProps = useRenderProps(\n {\n class: props.local.class,\n style: props.local.style,\n defaultClassName: \"solidaria-TabList\",\n },\n renderValues,\n );\n\n const handleKeyDown = (e: KeyboardEvent) => {\n tabListProps.onKeyDown(e);\n };\n\n const handleFocus = (e: FocusEvent) => {\n tabListProps.onFocusIn(e);\n };\n\n const handleBlur = (e: FocusEvent) => {\n tabListProps.onFocusOut(e);\n };\n\n return (\n <div\n role={tabListProps.role}\n aria-orientation={tabListProps[\"aria-orientation\"]}\n aria-label={tabListProps[\"aria-label\"]}\n aria-labelledby={tabListProps[\"aria-labelledby\"]}\n aria-describedby={tabListProps[\"aria-describedby\"]}\n class={renderProps.class()}\n style={renderProps.style()}\n onKeyDown={handleKeyDown}\n onFocusIn={handleFocus}\n onFocusOut={handleBlur}\n data-orientation={state.orientation()}\n data-disabled={state.isDisabled() || undefined}\n >\n {renderItem() ? (\n <SharedElementTransition>\n <For each={(props.items ?? items()) as T[]}>{(item) => renderItem()?.(item)}</For>\n </SharedElementTransition>\n ) : (\n renderedChildren()\n )}\n </div>\n );\n}\n\n/**\n * A Tab represents an individual tab in a TabList.\n */\nexport function Tab(props: TabProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\"class\", \"style\", \"slot\", \"id\"]);\n\n const context = useContext(TabsStateContext);\n const tabsContext = useContext(TabsContext);\n\n return (\n <Show when={context} fallback={<div class=\"solidaria-Tab\" role=\"tab\" />}>\n {(state) => (\n <TabInner\n state={state()}\n tabsContext={tabsContext}\n local={local}\n ariaProps={ariaProps}\n children={props.children}\n />\n )}\n </Show>\n );\n}\n\n/** Inner Tab component that has access to context */\nfunction TabInner(props: {\n state: TabListState<unknown>;\n tabsContext: TabsContextValue<unknown> | null;\n local: {\n class?: ClassNameOrFunction<TabRenderProps>;\n style?: StyleOrFunction<TabRenderProps>;\n slot?: string;\n id: Key;\n };\n ariaProps: Omit<TabProps, \"children\" | \"class\" | \"style\" | \"slot\" | \"id\">;\n children?: RenderChildren<TabRenderProps>;\n}): JSX.Element {\n let tabRef: HTMLDivElement | undefined;\n const textValue = () => {\n if (props.ariaProps[\"aria-label\"]) return props.ariaProps[\"aria-label\"];\n return typeof props.children === \"string\" ? props.children : undefined;\n };\n\n createEffect(() => {\n props.tabsContext?.registerTab({\n id: props.local.id,\n textValue: textValue(),\n isDisabled: props.ariaProps.isDisabled,\n });\n });\n\n onCleanup(() => {\n props.tabsContext?.unregisterTab(props.local.id);\n });\n\n // Create tab aria props\n const tabAria = createTab<unknown>(\n {\n key: props.local.id,\n get isDisabled() {\n return props.ariaProps.isDisabled;\n },\n get \"aria-label\"() {\n return props.ariaProps[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return props.ariaProps[\"aria-labelledby\"];\n },\n },\n props.state,\n () => tabRef ?? null,\n );\n\n const { isHovered, hoverProps } = createHover({\n get isDisabled() {\n return tabAria.isDisabled();\n },\n });\n\n const renderValues = createMemo<TabRenderProps>(() => ({\n isSelected: tabAria.isSelected(),\n isFocused: tabAria.isFocused(),\n isFocusVisible: tabAria.isFocusVisible(),\n isPressed: tabAria.isPressed(),\n isHovered: isHovered(),\n isDisabled: tabAria.isDisabled(),\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: props.local.class,\n style: props.local.style,\n defaultClassName: \"solidaria-Tab\",\n },\n renderValues,\n );\n\n const selectionIndicatorContext = createMemo<SelectionIndicatorContextValue>(() => ({\n isSelected: tabAria.isSelected,\n }));\n\n return (\n <SelectionIndicatorContext.Provider value={selectionIndicatorContext()}>\n <div\n ref={tabRef}\n id={tabAria.tabProps.id}\n role={tabAria.tabProps.role}\n aria-selected={tabAria.isSelected()}\n aria-disabled={tabAria.isDisabled() || undefined}\n aria-controls={tabAria.isSelected() ? tabAria.tabProps[\"aria-controls\"] : undefined}\n aria-label={tabAria.tabProps[\"aria-label\"]}\n aria-labelledby={tabAria.tabProps[\"aria-labelledby\"]}\n tabIndex={tabAria.tabProps.tabIndex}\n class={renderProps.class()}\n style={renderProps.style()}\n onKeyDown={tabAria.tabProps.onKeyDown}\n onMouseDown={tabAria.tabProps.onMouseDown}\n onPointerDown={tabAria.tabProps.onPointerDown}\n onClick={tabAria.tabProps.onClick}\n onFocus={tabAria.tabProps.onFocus}\n onFocusIn={tabAria.tabProps.onFocusIn}\n onBlur={tabAria.tabProps.onBlur}\n {...hoverProps}\n data-selected={tabAria.isSelected() || undefined}\n data-focused={tabAria.isFocused() || undefined}\n data-focus-visible={tabAria.isFocusVisible() || undefined}\n data-pressed={tabAria.isPressed() || undefined}\n data-hovered={isHovered() || undefined}\n data-disabled={tabAria.isDisabled() || undefined}\n >\n {renderProps.renderChildrenStable()}\n </div>\n </SelectionIndicatorContext.Provider>\n );\n}\n\n/**\n * Groups multiple TabPanel elements.\n */\nexport function TabPanels(props: TabPanelsProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"class\", \"style\", \"slot\", \"children\"]);\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n const state = useContext(TabsStateContext);\n let ref: HTMLDivElement | undefined;\n let previousSelectedKey: Key | null | undefined = undefined;\n const [panelSize, setPanelSize] = createSignal<{ width?: string; height?: string }>({});\n\n createEffect(() => {\n const selectedKey = state?.selectedKey() ?? null;\n if (!ref) {\n previousSelectedKey = selectedKey;\n return;\n }\n\n if (previousSelectedKey === undefined) {\n previousSelectedKey = selectedKey;\n return;\n }\n\n if (previousSelectedKey === selectedKey) return;\n previousSelectedKey = selectedKey;\n\n const transition = window.getComputedStyle(ref).transition;\n const shouldMeasureWidth = /width|inline-size|all/.test(transition);\n const shouldMeasureHeight = /height|block-size|all/.test(transition);\n if (!shouldMeasureWidth && !shouldMeasureHeight) return;\n\n const selectedPanel = ref.querySelector<HTMLElement>('[role=\"tabpanel\"]:not([hidden])');\n if (!selectedPanel) return;\n\n setPanelSize({\n width: shouldMeasureWidth ? `${selectedPanel.offsetWidth}px` : undefined,\n height: shouldMeasureHeight ? `${selectedPanel.offsetHeight}px` : undefined,\n });\n });\n\n const mergedStyle = (): JSX.CSSProperties =>\n ({\n ...local.style,\n ...(panelSize().width ? { \"--tab-panel-width\": panelSize().width } : {}),\n ...(panelSize().height ? { \"--tab-panel-height\": panelSize().height } : {}),\n }) as JSX.CSSProperties;\n\n return (\n <div\n {...domProps()}\n ref={(el) => {\n ref = el;\n }}\n class={local.class ?? \"solidaria-TabPanels\"}\n style={mergedStyle()}\n >\n {local.children}\n </div>\n );\n}\n\n/**\n * A TabPanel displays the content for a selected Tab.\n */\nexport function TabPanel(props: TabPanelProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\"class\", \"style\", \"slot\", \"shouldForceMount\"]);\n\n // Get state from context (may be null for SSR scenarios)\n const state = useContext(TabsStateContext);\n\n // Create tab panel aria props\n const { tabPanelProps, isSelected } = createTabPanel<unknown>(ariaProps, state);\n\n // Create focus ring for the panel\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n const isInert = () =>\n Boolean(local.shouldForceMount && ariaProps.id !== undefined && !isSelected());\n const isEntering = () => false;\n const isExiting = () => false;\n\n const renderValues = createMemo<TabPanelRenderProps>(() => ({\n isSelected: isSelected(),\n isFocused: isFocused(),\n isFocusVisible: isFocusVisible(),\n isInert: isInert(),\n isEntering: isEntering(),\n isExiting: isExiting(),\n state,\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-TabPanel\",\n },\n renderValues,\n );\n\n // Determine if we should render the panel\n // If no id is provided, render when any tab is selected (shared panel pattern)\n // If id is provided, render when that specific tab is selected\n const shouldRender = () => {\n if (local.shouldForceMount) return true;\n if (ariaProps.id === undefined) {\n return state ? state.selectedKey() !== null : true;\n }\n return isSelected();\n };\n\n return (\n <Show when={shouldRender()}>\n <div\n id={tabPanelProps.id}\n role={tabPanelProps.role}\n aria-labelledby={tabPanelProps[\"aria-labelledby\"]}\n aria-label={tabPanelProps[\"aria-label\"]}\n aria-describedby={tabPanelProps[\"aria-describedby\"]}\n tabIndex={tabPanelProps.tabIndex}\n class={renderProps.class()}\n style={renderProps.style()}\n onFocus={focusProps.onFocus}\n onBlur={focusProps.onBlur}\n data-selected={isSelected() || undefined}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n inert={isInert() ? true : undefined}\n data-inert={isInert() || undefined}\n data-entering={isEntering() || undefined}\n data-exiting={isExiting() || undefined}\n hidden={\n ariaProps.id !== undefined && !isSelected() && !local.shouldForceMount ? true : undefined\n }\n >\n {renderProps.renderChildren()}\n </div>\n </Show>\n );\n}\n\nTabs.List = TabList;\nTabs.Tab = Tab;\nTabs.Panels = TabPanels;\nTabs.Panel = TabPanel;\nTabs.SelectionIndicator = SelectionIndicator;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tabs.jsx","names":["assignRef","tab"],"sources":["../src/Tabs.tsx"],"sourcesContent":["/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/Tabs.tsx\n\n/**\n * Tabs component for solidaria-components\n *\n * A pre-wired headless tabs component that combines state + aria hooks.\n * Port of react-aria-components/src/Tabs.tsx\n */\n\nimport {\n createContext,\n createEffect,\n createMemo,\n createSignal,\n useContext,\n For,\n Show,\n onCleanup,\n sharedConfig,\n createTrackedEffect,\n} from \"solid-js\";\nimport type { Accessor } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport {\n createTabList,\n createTab,\n createTabPanel,\n createFocusRing,\n createHover,\n type AriaTabListProps,\n type AriaTabProps,\n type AriaTabPanelProps,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n createTabListState,\n type TabListState,\n type Key,\n type TabOrientation,\n type KeyboardActivation,\n} from \"@proyecto-viviana/solid-stately\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n dataAttr,\n ariaTrueFalse,\n attrTrue,\n} from \"./utils\";\nimport {\n SelectionIndicator,\n SelectionIndicatorContext,\n type SelectionIndicatorContextValue,\n} from \"./SelectionIndicator\";\nimport { SharedElementTransition } from \"./SharedElementTransition\";\nimport { splitProps } from \"@proyecto-viviana/solidaria/utils\";\n\nexport {\n SelectionIndicator,\n SelectionIndicatorContext,\n type SelectionIndicatorProps,\n type SelectionIndicatorRenderProps,\n} from \"./SelectionIndicator\";\n\nexport interface TabsRenderProps {\n /** The orientation of the tabs. */\n orientation: TabOrientation;\n /** Whether the tabs are disabled. */\n isDisabled: boolean;\n}\n\nexport interface TabsProps<T> extends SlotProps {\n /** The items to render in the tab list. */\n items?: 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 tabs. */\n disabledKeys?: Iterable<Key>;\n /** The currently selected tab key (controlled). */\n selectedKey?: Key | null;\n /** The default selected tab key (uncontrolled). */\n defaultSelectedKey?: Key;\n /** Handler for tab selection changes. */\n onSelectionChange?: (key: Key) => void;\n /** Whether the tabs are disabled. */\n isDisabled?: boolean;\n /** The keyboard activation mode. */\n keyboardActivation?: KeyboardActivation;\n /** The orientation of the tabs. */\n orientation?: TabOrientation;\n /** The children of the component. */\n children?: RenderChildren<TabsRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabsRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabsRenderProps>;\n /** Ref for the root tabs element. */\n ref?: RefLike<HTMLDivElement>;\n}\n\nexport interface TabListRenderProps {\n /** The orientation of the tab list. */\n orientation: TabOrientation;\n /** Whether the tab list is disabled. */\n isDisabled: boolean;\n}\n\nexport interface TabListProps<T> extends Omit<AriaTabListProps, \"children\">, SlotProps {\n /** Items to render in the tab list. */\n items?: T[];\n /** The children of the tab list - static tabs or a render function for each item. */\n children?: JSX.Element | ((item: T) => JSX.Element);\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabListRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabListRenderProps>;\n}\n\nexport interface TabRenderProps {\n /** Whether the tab is selected. */\n isSelected: boolean;\n /** Whether the tab is focused. */\n isFocused: boolean;\n /** Whether the tab has visible focus ring. */\n isFocusVisible: boolean;\n /** Whether the tab is pressed. */\n isPressed: boolean;\n /** Whether the tab is hovered. */\n isHovered: boolean;\n /** Whether the tab is disabled. */\n isDisabled: boolean;\n}\n\nexport interface TabProps extends Omit<AriaTabProps, \"key\">, SlotProps {\n /** The unique key for the tab. */\n id: Key;\n /** The children of the tab. */\n children?: RenderChildren<TabRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabRenderProps>;\n}\n\nexport interface TabPanelRenderProps {\n /** Whether the panel is the selected one. */\n isSelected: boolean;\n /** Whether the panel is focused. */\n isFocused: boolean;\n /** Whether the panel has visible focus ring. */\n isFocusVisible: boolean;\n /** Whether the panel is non-interactive while force mounted. */\n isInert: boolean;\n /** Whether the panel is currently entering. */\n isEntering: boolean;\n /** Whether the panel is currently exiting. */\n isExiting: boolean;\n /** State of the tab list. */\n state: TabListState<unknown> | null;\n}\n\nexport interface TabPanelProps extends AriaTabPanelProps, SlotProps {\n /** The children of the tab panel. */\n children?: RenderChildren<TabPanelRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<TabPanelRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<TabPanelRenderProps>;\n /** Whether to keep the panel mounted when not selected. */\n shouldForceMount?: boolean;\n}\n\nexport interface TabPanelsProps extends SlotProps {\n /** The grouped tab panels. */\n children?: JSX.Element;\n /** The CSS className for the element. */\n class?: string;\n /** The inline style for the element. */\n style?: JSX.CSSProperties;\n}\n\ninterface TabsContextValue<T> {\n state: TabListState<T>;\n items: Accessor<T[]>;\n setTabListItems(items: T[] | undefined): void;\n registerTab(tab: RegisteredTab): void;\n unregisterTab(id: Key): void;\n}\n\ntype RefLike<T> = ((el: T) => void) | { current?: T | null } | undefined;\n\nfunction assignRef<T>(ref: RefLike<T>, element: T): void {\n if (!ref) return;\n if (typeof ref === \"function\") {\n ref(element);\n } else if (typeof ref === \"object\" && \"current\" in ref) {\n ref.current = element;\n }\n}\n\nexport const TabsContext = createContext<TabsContextValue<unknown> | null>(null);\nexport const TabsStateContext = createContext<TabListState<unknown> | null>(null);\n\ninterface RegisteredTab {\n id: Key;\n textValue?: string;\n isDisabled?: boolean;\n}\n\ninterface CollectionItemLike {\n id?: Key;\n key?: Key;\n label?: string;\n textValue?: string;\n isDisabled?: boolean;\n}\n\nfunction collectionItemKey<T>(item: T): Key {\n const tab = item as CollectionItemLike;\n const key = tab.id ?? tab.key;\n if (key == null) {\n throw new Error(\"Tabs collection items require an id or key.\");\n }\n return key;\n}\n\nfunction staticTabText(tab: RegisteredTab): string {\n return tab.textValue ?? String(tab.id);\n}\n\n/**\n * Tabs provide a way to organize content into multiple sections, with only one section visible at a time.\n */\nexport function Tabs<T>(props: TabsProps<T>): JSX.Element {\n const [local, stateProps, rest] = splitProps(\n props,\n [\"class\", \"style\", \"slot\", \"ref\"],\n [\n \"items\",\n \"getKey\",\n \"getTextValue\",\n \"getDisabled\",\n \"disabledKeys\",\n \"selectedKey\",\n \"defaultSelectedKey\",\n \"onSelectionChange\",\n \"isDisabled\",\n \"keyboardActivation\",\n \"orientation\",\n ],\n );\n\n const [tabListItems, setTabListItems] = createSignal<T[] | undefined>(undefined, {\n ownedWrite: true,\n });\n const [registeredTabs, setRegisteredTabs] = createSignal<RegisteredTab[]>([], {\n ownedWrite: true,\n });\n const effectiveItems = createMemo<T[]>(() => {\n if (stateProps.items) return stateProps.items;\n if (tabListItems()) return tabListItems() ?? [];\n return registeredTabs() as T[];\n });\n\n // Create tab list state\n const state = createTabListState<T>({\n get items() {\n return effectiveItems();\n },\n get getKey() {\n return stateProps.getKey ?? collectionItemKey;\n },\n get getTextValue() {\n return (\n stateProps.getTextValue ??\n ((item: T) => {\n const tab = item as RegisteredTab & CollectionItemLike;\n return tab.textValue ?? tab.label ?? staticTabText(tab);\n })\n );\n },\n get getDisabled() {\n return (\n stateProps.getDisabled ??\n ((item: T) => {\n const tab = item as RegisteredTab & CollectionItemLike;\n return tab.isDisabled ?? false;\n })\n );\n },\n get disabledKeys() {\n return stateProps.disabledKeys;\n },\n get selectedKey() {\n return stateProps.selectedKey;\n },\n get defaultSelectedKey() {\n return stateProps.defaultSelectedKey;\n },\n get onSelectionChange() {\n return stateProps.onSelectionChange;\n },\n get isDisabled() {\n return stateProps.isDisabled;\n },\n get keyboardActivation() {\n return stateProps.keyboardActivation;\n },\n get orientation() {\n return stateProps.orientation;\n },\n });\n\n const renderValues = createMemo<TabsRenderProps>(() => ({\n orientation: state.orientation(),\n isDisabled: state.isDisabled(),\n }));\n\n const renderProps = useRenderProps(\n {\n class: local.class,\n style: local.style,\n get children() {\n return props.children;\n },\n defaultClassName: \"solidaria-Tabs\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n\n const contextValue: TabsContextValue<T> = {\n state,\n items: effectiveItems,\n setTabListItems(items) {\n setTabListItems(() => items);\n },\n registerTab(tab) {\n setRegisteredTabs((current) => {\n const next = current.filter((item) => item.id !== tab.id);\n next.push(tab);\n return next;\n });\n },\n unregisterTab(id) {\n setRegisteredTabs((current) => current.filter((item) => item.id !== id));\n },\n };\n\n return (\n <TabsContext value={contextValue as TabsContextValue<unknown>}>\n <TabsStateContext value={state}>\n <div\n {...domProps()}\n ref={(element) => assignRef(local.ref, element)}\n class={renderProps.class()}\n style={renderProps.style()}\n data-orientation={state.orientation()}\n data-disabled={dataAttr(state.isDisabled())}\n >\n {props.children as JSX.Element}\n </div>\n </TabsStateContext>\n </TabsContext>\n );\n}\n\n/**\n * A TabList contains Tab elements that represent the available tabs.\n */\nexport function TabList<T>(props: TabListProps<T>): JSX.Element {\n const [local, collectionProps, ariaProps] = splitProps(\n props,\n [\"class\", \"style\", \"slot\"],\n [\"items\"],\n );\n\n const context = useContext(TabsContext);\n\n if (!context) {\n return <div class=\"solidaria-TabList\" role=\"tablist\" />;\n }\n\n const state = context.state as TabListState<T>;\n const items = context.items as Accessor<T[]>;\n\n createEffect(\n () => collectionProps.items as unknown[] | undefined,\n (items) => {\n context.setTabListItems(items);\n },\n );\n\n onCleanup(() => {\n context.setTabListItems(undefined);\n });\n\n // Create tab list aria props\n const { tabListProps } = createTabList<T>(ariaProps as AriaTabListProps, state);\n\n const renderValues = createMemo<TabListRenderProps>(() => ({\n orientation: state.orientation(),\n isDisabled: state.isDisabled(),\n }));\n\n const renderProps = useRenderProps(\n {\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-TabList\",\n },\n renderValues,\n );\n\n const handleKeyDown = (e: KeyboardEvent) => {\n tabListProps.onKeyDown(e);\n };\n\n const handleFocus = (e: FocusEvent) => {\n tabListProps.onFocusIn(e);\n };\n\n const handleBlur = (e: FocusEvent) => {\n tabListProps.onFocusOut(e);\n };\n\n const renderChildren = () => {\n const children = props.children;\n const isItemRenderer =\n typeof children === \"function\" && (children as (...args: unknown[]) => unknown).length > 0;\n\n if (isItemRenderer) {\n return (\n <SharedElementTransition>\n <For each={(collectionProps.items ?? items()) as T[]}>\n {(item) => (children as (item: T) => JSX.Element)(item)}\n </For>\n </SharedElementTransition>\n );\n }\n\n return children as JSX.Element;\n };\n\n return (\n <div\n role={tabListProps.role}\n aria-orientation={tabListProps[\"aria-orientation\"]}\n aria-label={tabListProps[\"aria-label\"]}\n aria-labelledby={tabListProps[\"aria-labelledby\"]}\n aria-describedby={tabListProps[\"aria-describedby\"]}\n class={renderProps.class()}\n style={renderProps.style()}\n onKeyDown={handleKeyDown}\n onFocusIn={handleFocus}\n onFocusOut={handleBlur}\n data-orientation={state.orientation()}\n data-disabled={dataAttr(state.isDisabled())}\n >\n {renderChildren()}\n </div>\n );\n}\n\n/**\n * A Tab represents an individual tab in a TabList.\n */\nexport function Tab(props: TabProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\"class\", \"style\", \"slot\", \"id\"]);\n\n const context = useContext(TabsStateContext);\n const tabsContext = useContext(TabsContext);\n\n if (!context) {\n return <div class=\"solidaria-Tab\" role=\"tab\" />;\n }\n\n const [tabRef, setTabRef] = createSignal<HTMLDivElement | null>(null);\n const textValue = () => {\n if (ariaProps[\"aria-label\"]) return ariaProps[\"aria-label\"];\n return typeof props.children === \"string\" ? props.children : undefined;\n };\n\n createEffect(\n () => ({\n id: local.id,\n textValue: textValue(),\n isDisabled: ariaProps.isDisabled,\n }),\n (tab) => {\n tabsContext?.registerTab(tab);\n },\n );\n\n onCleanup(() => {\n tabsContext?.unregisterTab(local.id);\n });\n\n // Create tab aria props\n const tabAria = createTab<unknown>(\n {\n key: local.id,\n get isDisabled() {\n return ariaProps.isDisabled;\n },\n get \"aria-label\"() {\n return ariaProps[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return ariaProps[\"aria-labelledby\"];\n },\n },\n context,\n tabRef,\n );\n\n const { isHovered, hoverProps } = createHover({\n get isDisabled() {\n return tabAria.isDisabled();\n },\n });\n\n const renderValues = createMemo<TabRenderProps>(() => ({\n isSelected: tabAria.isSelected(),\n isFocused: tabAria.isFocused(),\n isFocusVisible: tabAria.isFocusVisible(),\n isPressed: tabAria.isPressed(),\n isHovered: isHovered(),\n isDisabled: tabAria.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-Tab\",\n },\n renderValues,\n );\n\n const selectionIndicatorContext = createMemo<SelectionIndicatorContextValue>(() => ({\n isSelected: tabAria.isSelected,\n }));\n\n return (\n <div\n ref={setTabRef}\n id={tabAria.tabProps.id}\n role={tabAria.tabProps.role}\n aria-selected={ariaTrueFalse(tabAria.isSelected())}\n aria-disabled={attrTrue(tabAria.isDisabled())}\n aria-controls={tabAria.isSelected() ? tabAria.tabProps[\"aria-controls\"] : undefined}\n aria-label={tabAria.tabProps[\"aria-label\"]}\n aria-labelledby={tabAria.tabProps[\"aria-labelledby\"]}\n tabindex={tabAria.tabProps.tabIndex}\n class={renderProps.class()}\n style={renderProps.style()}\n onKeyDown={tabAria.tabProps.onKeyDown}\n onMouseDown={tabAria.tabProps.onMouseDown}\n onPointerDown={tabAria.tabProps.onPointerDown}\n onClick={tabAria.tabProps.onClick}\n onFocus={tabAria.tabProps.onFocus}\n onFocusIn={tabAria.tabProps.onFocusIn}\n onBlur={tabAria.tabProps.onBlur}\n {...hoverProps}\n data-selected={dataAttr(tabAria.isSelected())}\n data-focused={dataAttr(tabAria.isFocused())}\n data-focus-visible={dataAttr(tabAria.isFocusVisible())}\n data-pressed={dataAttr(tabAria.isPressed())}\n data-hovered={dataAttr(isHovered())}\n data-disabled={dataAttr(tabAria.isDisabled())}\n >\n <SelectionIndicatorContext value={selectionIndicatorContext()}>\n {renderProps.renderChildrenStable()}\n </SelectionIndicatorContext>\n </div>\n );\n}\n\n/**\n * Groups multiple TabPanel elements.\n */\nexport function TabPanels(props: TabPanelsProps): JSX.Element {\n const [local, rest] = splitProps(props, [\"class\", \"style\", \"slot\", \"children\"]);\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n const state = useContext(TabsStateContext);\n let ref: HTMLDivElement | undefined;\n let previousSelectedKey: Key | null | undefined = undefined;\n const [panelSize, setPanelSize] = createSignal<{ width?: string; height?: string }>({});\n\n createTrackedEffect(() => {\n const selectedKey = state?.selectedKey() ?? null;\n if (!ref) {\n previousSelectedKey = selectedKey;\n return;\n }\n\n if (previousSelectedKey === undefined) {\n previousSelectedKey = selectedKey;\n return;\n }\n\n if (previousSelectedKey === selectedKey) return;\n previousSelectedKey = selectedKey;\n\n const transition = window.getComputedStyle(ref).transition;\n const shouldMeasureWidth = /width|inline-size|all/.test(transition);\n const shouldMeasureHeight = /height|block-size|all/.test(transition);\n if (!shouldMeasureWidth && !shouldMeasureHeight) return;\n\n const selectedPanel = ref.querySelector<HTMLElement>('[role=\"tabpanel\"]:not([hidden])');\n if (!selectedPanel) return;\n\n setPanelSize({\n width: shouldMeasureWidth ? `${selectedPanel.offsetWidth}px` : undefined,\n height: shouldMeasureHeight ? `${selectedPanel.offsetHeight}px` : undefined,\n });\n });\n\n const mergedStyle = (): JSX.CSSProperties =>\n ({\n ...local.style,\n ...(panelSize().width ? { \"--tab-panel-width\": panelSize().width } : {}),\n ...(panelSize().height ? { \"--tab-panel-height\": panelSize().height } : {}),\n }) as JSX.CSSProperties;\n\n return (\n <div\n {...domProps()}\n ref={(el) => {\n ref = el;\n }}\n class={local.class ?? \"solidaria-TabPanels\"}\n style={mergedStyle()}\n >\n {local.children}\n </div>\n );\n}\n\n/**\n * A TabPanel displays the content for a selected Tab.\n */\nexport function TabPanel(props: TabPanelProps): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\"class\", \"style\", \"slot\", \"shouldForceMount\"]);\n const [panelRef, setPanelRef] = createSignal<HTMLDivElement>();\n\n // Get state from context (may be null for SSR scenarios)\n const state = useContext(TabsStateContext);\n\n // Create tab panel aria props\n const { tabPanelProps, isSelected } = createTabPanel<unknown>(ariaProps, state, panelRef);\n\n // Create focus ring for the panel\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n const isInert = () =>\n Boolean(local.shouldForceMount && ariaProps.id !== undefined && !isSelected());\n const isEntering = () => false;\n const isExiting = () => false;\n\n const renderValues = createMemo<TabPanelRenderProps>(() => ({\n isSelected: isSelected(),\n isFocused: isFocused(),\n isFocusVisible: isFocusVisible(),\n isInert: isInert(),\n isEntering: isEntering(),\n isExiting: isExiting(),\n state,\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-TabPanel\",\n },\n renderValues,\n );\n\n // Determine if we should render the panel\n // If no id is provided, render when any tab is selected (shared panel pattern)\n // If id is provided, render when that specific tab is selected\n const shouldRender = () => {\n if (local.shouldForceMount) return true;\n if (ariaProps.id === undefined) {\n return state ? state.selectedKey() !== null : true;\n }\n return isSelected();\n };\n\n return (\n <Show when={shouldRender()}>\n <div\n ref={setPanelRef}\n id={tabPanelProps.id}\n role={tabPanelProps.role}\n aria-labelledby={tabPanelProps[\"aria-labelledby\"]}\n aria-label={tabPanelProps[\"aria-label\"]}\n aria-describedby={tabPanelProps[\"aria-describedby\"]}\n tabindex={tabPanelProps.tabIndex}\n class={renderProps.class()}\n style={renderProps.style()}\n onFocus={focusProps.onFocus}\n onBlur={focusProps.onBlur}\n data-selected={dataAttr(isSelected())}\n data-focused={dataAttr(isFocused())}\n data-focus-visible={dataAttr(isFocusVisible())}\n inert={isInert() ? true : undefined}\n data-inert={dataAttr(isInert())}\n data-entering={dataAttr(isEntering())}\n data-exiting={dataAttr(isExiting())}\n hidden={\n ariaProps.id !== undefined && !isSelected() && !local.shouldForceMount ? true : undefined\n }\n >\n {renderProps.renderChildren()}\n </div>\n </Show>\n );\n}\n\nTabs.List = TabList;\nTabs.Tab = Tab;\nTabs.Panels = TabPanels;\nTabs.Panel = TabPanel;\nTabs.SelectionIndicator = SelectionIndicator;\n"],"mappings":"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"}
|