@proyecto-viviana/solidaria-components 0.3.2 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ActionBar.d.ts.map +1 -1
- package/dist/ActionBar.js +175 -0
- package/dist/ActionBar.js.map +1 -0
- package/dist/ActionBar.jsx +119 -0
- package/dist/ActionBar.jsx.map +1 -0
- package/dist/ActionGroup.d.ts.map +1 -1
- package/dist/ActionGroup.js +179 -0
- package/dist/ActionGroup.js.map +1 -0
- package/dist/ActionGroup.jsx +129 -0
- package/dist/ActionGroup.jsx.map +1 -0
- package/dist/Alert.js +111 -0
- package/dist/Alert.js.map +1 -0
- package/dist/Alert.jsx +82 -0
- package/dist/Alert.jsx.map +1 -0
- package/dist/Autocomplete.d.ts +2 -2
- package/dist/Autocomplete.d.ts.map +1 -1
- package/dist/Autocomplete.js +130 -0
- package/dist/Autocomplete.js.map +1 -0
- package/dist/Autocomplete.jsx +116 -0
- package/dist/Autocomplete.jsx.map +1 -0
- package/dist/Breadcrumbs.d.ts.map +1 -1
- package/dist/Breadcrumbs.js +333 -0
- package/dist/Breadcrumbs.js.map +1 -0
- package/dist/Breadcrumbs.jsx +261 -0
- package/dist/Breadcrumbs.jsx.map +1 -0
- package/dist/Button.d.ts.map +1 -1
- package/dist/Button.js +348 -0
- package/dist/Button.js.map +1 -0
- package/dist/Button.jsx +314 -0
- package/dist/Button.jsx.map +1 -0
- package/dist/Calendar.d.ts +4 -4
- package/dist/Calendar.d.ts.map +1 -1
- package/dist/Calendar.js +573 -0
- package/dist/Calendar.js.map +1 -0
- package/dist/Calendar.jsx +342 -0
- package/dist/Calendar.jsx.map +1 -0
- package/dist/CalendarPicker.d.ts +33 -0
- package/dist/CalendarPicker.d.ts.map +1 -0
- package/dist/CalendarPicker.js +44 -0
- package/dist/CalendarPicker.js.map +1 -0
- package/dist/CalendarPicker.jsx +44 -0
- package/dist/CalendarPicker.jsx.map +1 -0
- package/dist/Checkbox.d.ts +83 -4
- package/dist/Checkbox.d.ts.map +1 -1
- package/dist/Checkbox.js +923 -0
- package/dist/Checkbox.js.map +1 -0
- package/dist/Checkbox.jsx +707 -0
- package/dist/Checkbox.jsx.map +1 -0
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +202 -0
- package/dist/Collection.js.map +1 -0
- package/dist/Collection.jsx +152 -0
- package/dist/Collection.jsx.map +1 -0
- package/dist/Color.d.ts.map +1 -1
- package/dist/Color.js +1717 -0
- package/dist/Color.js.map +1 -0
- package/dist/Color.jsx +1340 -0
- package/dist/Color.jsx.map +1 -0
- package/dist/ColorEditor.js +208 -0
- package/dist/ColorEditor.js.map +1 -0
- package/dist/ColorEditor.jsx +120 -0
- package/dist/ColorEditor.jsx.map +1 -0
- package/dist/ComboBox.d.ts +8 -4
- package/dist/ComboBox.d.ts.map +1 -1
- package/dist/ComboBox.js +1000 -0
- package/dist/ComboBox.js.map +1 -0
- package/dist/ComboBox.jsx +724 -0
- package/dist/ComboBox.jsx.map +1 -0
- package/dist/ContextualHelpTrigger.js +146 -0
- package/dist/ContextualHelpTrigger.js.map +1 -0
- package/dist/ContextualHelpTrigger.jsx +109 -0
- package/dist/ContextualHelpTrigger.jsx.map +1 -0
- package/dist/DateField.d.ts +14 -5
- package/dist/DateField.d.ts.map +1 -1
- package/dist/DateField.js +4 -0
- package/dist/DateField.jsx +4 -0
- package/dist/DateField2.js +502 -0
- package/dist/DateField2.js.map +1 -0
- package/dist/DateField2.jsx +354 -0
- package/dist/DateField2.jsx.map +1 -0
- package/dist/DatePicker.d.ts +46 -7
- package/dist/DatePicker.d.ts.map +1 -1
- package/dist/DatePicker.js +7 -0
- package/dist/DatePicker.jsx +7 -0
- package/dist/DatePicker2.js +1171 -0
- package/dist/DatePicker2.js.map +1 -0
- package/dist/DatePicker2.jsx +820 -0
- package/dist/DatePicker2.jsx.map +1 -0
- package/dist/DateRangePickerContext.d.ts +2 -0
- package/dist/DateRangePickerContext.d.ts.map +1 -1
- package/dist/Dialog.d.ts.map +1 -1
- package/dist/Dialog.js +337 -0
- package/dist/Dialog.js.map +1 -0
- package/dist/Dialog.jsx +192 -0
- package/dist/Dialog.jsx.map +1 -0
- package/dist/Disclosure.d.ts.map +1 -1
- package/dist/Disclosure.js +331 -0
- package/dist/Disclosure.js.map +1 -0
- package/dist/Disclosure.jsx +230 -0
- package/dist/Disclosure.jsx.map +1 -0
- package/dist/DragAndDrop.d.ts.map +1 -1
- package/dist/DragAndDrop.js +176 -0
- package/dist/DragAndDrop.js.map +1 -0
- package/dist/DragAndDrop.jsx +160 -0
- package/dist/DragAndDrop.jsx.map +1 -0
- package/dist/DropZone.d.ts.map +1 -1
- package/dist/DropZone.js +189 -0
- package/dist/DropZone.js.map +1 -0
- package/dist/DropZone.jsx +144 -0
- package/dist/DropZone.jsx.map +1 -0
- package/dist/FieldError.js +66 -0
- package/dist/FieldError.js.map +1 -0
- package/dist/FieldError.jsx +47 -0
- package/dist/FieldError.jsx.map +1 -0
- package/dist/FileTrigger.js +79 -0
- package/dist/FileTrigger.js.map +1 -0
- package/dist/FileTrigger.jsx +49 -0
- package/dist/FileTrigger.jsx.map +1 -0
- package/dist/Focusable.js +70 -0
- package/dist/Focusable.js.map +1 -0
- package/dist/Focusable.jsx +69 -0
- package/dist/Focusable.jsx.map +1 -0
- package/dist/Form.js +99 -0
- package/dist/Form.js.map +1 -0
- package/dist/Form.jsx +73 -0
- package/dist/Form.jsx.map +1 -0
- package/dist/GridList.d.ts +34 -2
- package/dist/GridList.d.ts.map +1 -1
- package/dist/GridList.js +723 -0
- package/dist/GridList.js.map +1 -0
- package/dist/GridList.jsx +552 -0
- package/dist/GridList.jsx.map +1 -0
- package/dist/Icon.d.ts.map +1 -1
- package/dist/Icon.js +127 -0
- package/dist/Icon.js.map +1 -0
- package/dist/Icon.jsx +72 -0
- package/dist/Icon.jsx.map +1 -0
- package/dist/Keyboard.js +30 -0
- package/dist/Keyboard.js.map +1 -0
- package/dist/Keyboard.jsx +24 -0
- package/dist/Keyboard.jsx.map +1 -0
- package/dist/Landmark.js +134 -0
- package/dist/Landmark.js.map +1 -0
- package/dist/Landmark.jsx +118 -0
- package/dist/Landmark.jsx.map +1 -0
- package/dist/Link.d.ts.map +1 -1
- package/dist/Link.js +219 -0
- package/dist/Link.js.map +1 -0
- package/dist/Link.jsx +189 -0
- package/dist/Link.jsx.map +1 -0
- package/dist/ListBox.d.ts +2 -2
- package/dist/ListBox.d.ts.map +1 -1
- package/dist/ListBox.js +831 -0
- package/dist/ListBox.js.map +1 -0
- package/dist/ListBox.jsx +644 -0
- package/dist/ListBox.jsx.map +1 -0
- package/dist/Menu.d.ts +27 -9
- package/dist/Menu.d.ts.map +1 -1
- package/dist/Menu.js +1254 -0
- package/dist/Menu.js.map +1 -0
- package/dist/Menu.jsx +1042 -0
- package/dist/Menu.jsx.map +1 -0
- package/dist/Meter.d.ts.map +1 -1
- package/dist/Meter.js +123 -0
- package/dist/Meter.js.map +1 -0
- package/dist/Meter.jsx +107 -0
- package/dist/Meter.jsx.map +1 -0
- package/dist/Modal.d.ts.map +1 -1
- package/dist/Modal.js +382 -0
- package/dist/Modal.js.map +1 -0
- package/dist/Modal.jsx +314 -0
- package/dist/Modal.jsx.map +1 -0
- package/dist/NumberField.d.ts +3 -3
- package/dist/NumberField.d.ts.map +1 -1
- package/dist/NumberField.js +573 -0
- package/dist/NumberField.js.map +1 -0
- package/dist/NumberField.jsx +443 -0
- package/dist/NumberField.jsx.map +1 -0
- package/dist/Popover.d.ts +10 -2
- package/dist/Popover.d.ts.map +1 -1
- package/dist/Popover.js +471 -0
- package/dist/Popover.js.map +1 -0
- package/dist/Popover.jsx +354 -0
- package/dist/Popover.jsx.map +1 -0
- package/dist/Pressable.js +69 -0
- package/dist/Pressable.js.map +1 -0
- package/dist/Pressable.jsx +68 -0
- package/dist/Pressable.jsx.map +1 -0
- package/dist/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar.js +130 -0
- package/dist/ProgressBar.js.map +1 -0
- package/dist/ProgressBar.jsx +114 -0
- package/dist/ProgressBar.jsx.map +1 -0
- package/dist/RadioGroup.d.ts +82 -4
- package/dist/RadioGroup.d.ts.map +1 -1
- package/dist/RadioGroup.js +931 -0
- package/dist/RadioGroup.js.map +1 -0
- package/dist/RadioGroup.jsx +681 -0
- package/dist/RadioGroup.jsx.map +1 -0
- package/dist/RangeCalendar.d.ts.map +1 -1
- package/dist/RangeCalendar.js +546 -0
- package/dist/RangeCalendar.js.map +1 -0
- package/dist/RangeCalendar.jsx +323 -0
- package/dist/RangeCalendar.jsx.map +1 -0
- package/dist/RouterProvider.js +118 -0
- package/dist/RouterProvider.js.map +1 -0
- package/dist/RouterProvider.jsx +112 -0
- package/dist/RouterProvider.jsx.map +1 -0
- package/dist/SearchField.d.ts +2 -2
- package/dist/SearchField.d.ts.map +1 -1
- package/dist/SearchField.js +667 -0
- package/dist/SearchField.js.map +1 -0
- package/dist/SearchField.jsx +550 -0
- package/dist/SearchField.jsx.map +1 -0
- package/dist/Select.d.ts +7 -0
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js +1044 -0
- package/dist/Select.js.map +1 -0
- package/dist/Select.jsx +759 -0
- package/dist/Select.jsx.map +1 -0
- package/dist/SelectionIndicator.d.ts.map +1 -1
- package/dist/SelectionIndicator.js +86 -0
- package/dist/SelectionIndicator.js.map +1 -0
- package/dist/SelectionIndicator.jsx +50 -0
- package/dist/SelectionIndicator.jsx.map +1 -0
- package/dist/Separator.js +97 -0
- package/dist/Separator.js.map +1 -0
- package/dist/Separator.jsx +85 -0
- package/dist/Separator.jsx.map +1 -0
- package/dist/SharedElementTransition.d.ts.map +1 -1
- package/dist/SharedElementTransition.js +167 -0
- package/dist/SharedElementTransition.js.map +1 -0
- package/dist/SharedElementTransition.jsx +140 -0
- package/dist/SharedElementTransition.jsx.map +1 -0
- package/dist/Slider.d.ts +33 -1
- package/dist/Slider.d.ts.map +1 -1
- package/dist/Slider.js +515 -0
- package/dist/Slider.js.map +1 -0
- package/dist/Slider.jsx +403 -0
- package/dist/Slider.jsx.map +1 -0
- package/dist/StepList.d.ts.map +1 -1
- package/dist/StepList.js +191 -0
- package/dist/StepList.js.map +1 -0
- package/dist/StepList.jsx +136 -0
- package/dist/StepList.jsx.map +1 -0
- package/dist/Switch.d.ts +65 -2
- package/dist/Switch.d.ts.map +1 -1
- package/dist/Switch.js +534 -0
- package/dist/Switch.js.map +1 -0
- package/dist/Switch.jsx +393 -0
- package/dist/Switch.jsx.map +1 -0
- package/dist/Table.d.ts +50 -0
- package/dist/Table.d.ts.map +1 -1
- package/dist/Table.js +1766 -0
- package/dist/Table.js.map +1 -0
- package/dist/Table.jsx +1355 -0
- package/dist/Table.jsx.map +1 -0
- package/dist/Tabs.d.ts +0 -4
- package/dist/Tabs.d.ts.map +1 -1
- package/dist/Tabs.js +598 -0
- package/dist/Tabs.js.map +1 -0
- package/dist/Tabs.jsx +367 -0
- package/dist/Tabs.jsx.map +1 -0
- package/dist/TagGroup.d.ts +3 -1
- package/dist/TagGroup.d.ts.map +1 -1
- package/dist/TagGroup.js +382 -0
- package/dist/TagGroup.js.map +1 -0
- package/dist/TagGroup.jsx +273 -0
- package/dist/TagGroup.jsx.map +1 -0
- package/dist/Text.d.ts +18 -6
- package/dist/Text.d.ts.map +1 -1
- package/dist/Text.js +42 -0
- package/dist/Text.js.map +1 -0
- package/dist/Text.jsx +35 -0
- package/dist/Text.jsx.map +1 -0
- package/dist/TextField.d.ts +6 -6
- package/dist/TextField.d.ts.map +1 -1
- package/dist/TextField.js +439 -0
- package/dist/TextField.js.map +1 -0
- package/dist/TextField.jsx +406 -0
- package/dist/TextField.jsx.map +1 -0
- package/dist/TimeField.d.ts +17 -53
- package/dist/TimeField.d.ts.map +1 -1
- package/dist/TimeField.js +278 -0
- package/dist/TimeField.js.map +1 -0
- package/dist/TimeField.jsx +218 -0
- package/dist/TimeField.jsx.map +1 -0
- package/dist/Toast.d.ts +14 -0
- package/dist/Toast.d.ts.map +1 -1
- package/dist/Toast.js +551 -0
- package/dist/Toast.js.map +1 -0
- package/dist/Toast.jsx +361 -0
- package/dist/Toast.jsx.map +1 -0
- package/dist/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButton.js +123 -0
- package/dist/ToggleButton.js.map +1 -0
- package/dist/ToggleButton.jsx +88 -0
- package/dist/ToggleButton.jsx.map +1 -0
- package/dist/ToggleButtonGroup.d.ts.map +1 -1
- package/dist/ToggleButtonGroup.js +114 -0
- package/dist/ToggleButtonGroup.js.map +1 -0
- package/dist/ToggleButtonGroup.jsx +85 -0
- package/dist/ToggleButtonGroup.jsx.map +1 -0
- package/dist/Toolbar.js +112 -0
- package/dist/Toolbar.js.map +1 -0
- package/dist/Toolbar.jsx +92 -0
- package/dist/Toolbar.jsx.map +1 -0
- package/dist/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip.js +539 -0
- package/dist/Tooltip.js.map +1 -0
- package/dist/Tooltip.jsx +465 -0
- package/dist/Tooltip.jsx.map +1 -0
- package/dist/Tree.d.ts +14 -2
- package/dist/Tree.d.ts.map +1 -1
- package/dist/Tree.js +1424 -0
- package/dist/Tree.js.map +1 -0
- package/dist/Tree.jsx +1172 -0
- package/dist/Tree.jsx.map +1 -0
- package/dist/Virtualizer.d.ts +16 -2
- package/dist/Virtualizer.d.ts.map +1 -1
- package/dist/Virtualizer.js +2 -0
- package/dist/Virtualizer.jsx +2 -0
- package/dist/Virtualizer2.js +751 -0
- package/dist/Virtualizer2.js.map +1 -0
- package/dist/Virtualizer2.jsx +730 -0
- package/dist/Virtualizer2.jsx.map +1 -0
- package/dist/VirtualizerLayouts.d.ts +18 -0
- package/dist/VirtualizerLayouts.d.ts.map +1 -1
- package/dist/VisuallyHidden.js +42 -0
- package/dist/VisuallyHidden.js.map +1 -0
- package/dist/VisuallyHidden.jsx +35 -0
- package/dist/VisuallyHidden.jsx.map +1 -0
- package/dist/contexts.js +33 -0
- package/dist/contexts.js.map +1 -0
- package/dist/contexts.jsx +33 -0
- package/dist/contexts.jsx.map +1 -0
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +69 -23932
- package/dist/index.jsx +69 -18337
- package/dist/useDragAndDrop.d.ts +0 -8
- package/dist/useDragAndDrop.d.ts.map +1 -1
- package/dist/useDragAndDrop.js +2 -0
- package/dist/useDragAndDrop.jsx +2 -0
- package/dist/useDragAndDrop2.js +399 -0
- package/dist/useDragAndDrop2.js.map +1 -0
- package/dist/useDragAndDrop2.jsx +399 -0
- package/dist/useDragAndDrop2.jsx.map +1 -0
- package/dist/utils.d.ts +84 -11
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +285 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.jsx +277 -0
- package/dist/utils.jsx.map +1 -0
- package/dist/virtualizer/Layout.js +144 -0
- package/dist/virtualizer/Layout.js.map +1 -0
- package/dist/virtualizer/Layout.jsx +144 -0
- package/dist/virtualizer/Layout.jsx.map +1 -0
- package/package.json +395 -4
- package/src/ActionBar.tsx +10 -12
- package/src/ActionGroup.tsx +5 -3
- package/src/Autocomplete.tsx +14 -9
- package/src/Breadcrumbs.tsx +58 -39
- package/src/Button.tsx +22 -2
- package/src/Calendar.tsx +57 -11
- package/src/CalendarPicker.tsx +73 -0
- package/src/Checkbox.tsx +539 -3
- package/src/Collection.tsx +9 -3
- package/src/Color.tsx +84 -41
- package/src/ComboBox.tsx +97 -21
- package/src/DateField.tsx +304 -53
- package/src/DatePicker.tsx +402 -62
- package/src/DateRangePickerContext.tsx +2 -0
- package/src/Dialog.tsx +13 -5
- package/src/Disclosure.tsx +7 -1
- package/src/DragAndDrop.tsx +3 -1
- package/src/DropZone.tsx +3 -1
- package/src/GridList.tsx +133 -26
- package/src/Icon.tsx +3 -1
- package/src/Link.tsx +3 -1
- package/src/ListBox.tsx +354 -25
- package/src/Menu.tsx +252 -128
- package/src/Meter.tsx +3 -1
- package/src/Modal.tsx +120 -56
- package/src/NumberField.tsx +51 -8
- package/src/Popover.tsx +68 -17
- package/src/ProgressBar.tsx +3 -1
- package/src/RadioGroup.tsx +468 -4
- package/src/RangeCalendar.tsx +123 -2
- package/src/SearchField.tsx +80 -4
- package/src/Select.tsx +122 -26
- package/src/SelectionIndicator.tsx +3 -1
- package/src/SharedElementTransition.tsx +95 -37
- package/src/Slider.tsx +159 -13
- package/src/StepList.tsx +0 -7
- package/src/Switch.tsx +395 -2
- package/src/Table.tsx +428 -99
- package/src/Tabs.tsx +17 -45
- package/src/TagGroup.tsx +29 -7
- package/src/Text.tsx +31 -10
- package/src/TextField.tsx +44 -6
- package/src/TimeField.tsx +127 -192
- package/src/Toast.tsx +79 -14
- package/src/ToggleButton.tsx +3 -1
- package/src/ToggleButtonGroup.tsx +3 -1
- package/src/Tooltip.tsx +3 -1
- package/src/Tree.tsx +91 -13
- package/src/Virtualizer.tsx +180 -31
- package/src/VirtualizerLayouts.ts +45 -10
- package/src/index.ts +51 -8
- package/src/useDragAndDrop.ts +8 -10
- package/src/utils.tsx +246 -30
- package/dist/HiddenTimeInput.d.ts +0 -25
- package/dist/HiddenTimeInput.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.jsx.map +0 -1
- package/src/HiddenTimeInput.tsx +0 -133
package/src/Breadcrumbs.tsx
CHANGED
|
@@ -196,7 +196,20 @@ export function Breadcrumbs<T>(props: BreadcrumbsProps<T>): JSX.Element {
|
|
|
196
196
|
setStaticItemCount,
|
|
197
197
|
}}
|
|
198
198
|
>
|
|
199
|
-
|
|
199
|
+
{/*
|
|
200
|
+
Faithful to react-aria-components Breadcrumbs: the accessible name (navProps'
|
|
201
|
+
aria-label) sits directly on the <ol> (role="list"), with NO wrapping <nav>
|
|
202
|
+
landmark (react-spectrum/packages/react-aria-components/src/Breadcrumbs.tsx
|
|
203
|
+
renders `<dom.ol {...mergeProps(DOMProps, navProps)} style={props.style}>`).
|
|
204
|
+
The <ol> carries ONLY the consumer's class/style — no hard-coded inline
|
|
205
|
+
layout reset. An inline reset would beat the styled layer's class (inline
|
|
206
|
+
wins over class), which is exactly what broke S2 parity: the solid-spectrum
|
|
207
|
+
`wrapperStyles` class supplies display:flex / list-style:none / padding:0 /
|
|
208
|
+
marginStart and deliberately leaves align-items at its `normal` default, so
|
|
209
|
+
a hard-coded inline `align-items:center` + `margin:0` clobbered the
|
|
210
|
+
wrapper's margin and diverged from S2 (whose <ol> has neither).
|
|
211
|
+
*/}
|
|
212
|
+
<ol
|
|
200
213
|
{...navProps}
|
|
201
214
|
{...domProps()}
|
|
202
215
|
ref={(element) => assignRef(local.ref, element)}
|
|
@@ -204,39 +217,29 @@ export function Breadcrumbs<T>(props: BreadcrumbsProps<T>): JSX.Element {
|
|
|
204
217
|
style={renderProps.style()}
|
|
205
218
|
data-disabled={isDisabled() || undefined}
|
|
206
219
|
>
|
|
207
|
-
<
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
margin: 0,
|
|
213
|
-
padding: 0,
|
|
214
|
-
}}
|
|
220
|
+
<Show
|
|
221
|
+
when={hasCollectionItems()}
|
|
222
|
+
fallback={
|
|
223
|
+
<StaticBreadcrumbItems>{local.children as JSX.Element}</StaticBreadcrumbItems>
|
|
224
|
+
}
|
|
215
225
|
>
|
|
216
|
-
<
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
</li>
|
|
234
|
-
);
|
|
235
|
-
}}
|
|
236
|
-
</For>
|
|
237
|
-
</Show>
|
|
238
|
-
</ol>
|
|
239
|
-
</nav>
|
|
226
|
+
<For each={items()}>
|
|
227
|
+
{(item, index) => {
|
|
228
|
+
const itemKey = getItemKey(item, index());
|
|
229
|
+
const isLast = () => index() === items().length - 1;
|
|
230
|
+
const renderItem = local.children as ((item: T) => JSX.Element) | undefined;
|
|
231
|
+
|
|
232
|
+
return (
|
|
233
|
+
<li style={{ display: "flex", "align-items": "center" }}>
|
|
234
|
+
<BreadcrumbItemContext.Provider value={{ itemKey, isLast }}>
|
|
235
|
+
{renderItem?.(item)}
|
|
236
|
+
</BreadcrumbItemContext.Provider>
|
|
237
|
+
</li>
|
|
238
|
+
);
|
|
239
|
+
}}
|
|
240
|
+
</For>
|
|
241
|
+
</Show>
|
|
242
|
+
</ol>
|
|
240
243
|
</BreadcrumbsContext.Provider>
|
|
241
244
|
);
|
|
242
245
|
}
|
|
@@ -277,6 +280,18 @@ export function BreadcrumbItem(props: BreadcrumbItemProps): JSX.Element {
|
|
|
277
280
|
staticIndex === context.staticItemCount() - 1);
|
|
278
281
|
const itemKey = () => itemContext?.itemKey ?? ariaProps.id ?? null;
|
|
279
282
|
|
|
283
|
+
// Mirror react-aria-components' Link: render an <a> only when there is an
|
|
284
|
+
// href on an enabled, non-current item; otherwise fall back to a <span
|
|
285
|
+
// role="link"> (via createLink). A styled layer may force the element type
|
|
286
|
+
// (S2 renders the current item as a plain <div>), which takes precedence.
|
|
287
|
+
const elementType = () =>
|
|
288
|
+
ariaProps.elementType ?? (ariaProps.href && !isDisabled() && !isCurrent() ? "a" : "span");
|
|
289
|
+
// The current breadcrumb is the current page and is non-interactive: S2
|
|
290
|
+
// renders it as a plain element with no link role. createLink only omits
|
|
291
|
+
// role="link" for an <a>, so treat the current item as an "a" purely for the
|
|
292
|
+
// role decision while still rendering the resolved element type above.
|
|
293
|
+
const linkElementType = () => (isCurrent() ? "a" : elementType());
|
|
294
|
+
|
|
280
295
|
const handlePress = (e: PressEvent) => {
|
|
281
296
|
ariaProps.onPress?.(e);
|
|
282
297
|
const key = itemKey();
|
|
@@ -285,7 +300,7 @@ export function BreadcrumbItem(props: BreadcrumbItemProps): JSX.Element {
|
|
|
285
300
|
}
|
|
286
301
|
};
|
|
287
302
|
|
|
288
|
-
const
|
|
303
|
+
const itemAria = createBreadcrumbItem({
|
|
289
304
|
get id() {
|
|
290
305
|
return ariaProps.id;
|
|
291
306
|
},
|
|
@@ -305,7 +320,7 @@ export function BreadcrumbItem(props: BreadcrumbItemProps): JSX.Element {
|
|
|
305
320
|
return ariaProps.rel;
|
|
306
321
|
},
|
|
307
322
|
get elementType() {
|
|
308
|
-
return
|
|
323
|
+
return linkElementType();
|
|
309
324
|
},
|
|
310
325
|
get onPress() {
|
|
311
326
|
return handlePress;
|
|
@@ -354,20 +369,23 @@ export function BreadcrumbItem(props: BreadcrumbItemProps): JSX.Element {
|
|
|
354
369
|
},
|
|
355
370
|
});
|
|
356
371
|
|
|
372
|
+
const isPressed = itemAria.isPressed;
|
|
357
373
|
const { isFocused, isFocusVisible, focusProps } = createFocusRing();
|
|
358
374
|
const { isHovered, hoverProps } = createHover({
|
|
359
375
|
get isDisabled() {
|
|
360
376
|
return isDisabled();
|
|
361
377
|
},
|
|
362
378
|
});
|
|
379
|
+
// Read itemAria.itemProps fresh inside the memo (do NOT destructure it above):
|
|
380
|
+
// the reactive getter re-runs createBreadcrumbItem → createLink each time this
|
|
381
|
+
// memo re-evaluates, so role/tabIndex track elementType once isCurrent settles.
|
|
363
382
|
const mergedItemProps = createMemo(() =>
|
|
364
383
|
mergeProps(
|
|
365
|
-
itemProps as Record<string, unknown>,
|
|
384
|
+
itemAria.itemProps as Record<string, unknown>,
|
|
366
385
|
focusProps as Record<string, unknown>,
|
|
367
386
|
hoverProps as Record<string, unknown>,
|
|
368
387
|
),
|
|
369
388
|
);
|
|
370
|
-
const elementType = () => ariaProps.elementType ?? "a";
|
|
371
389
|
|
|
372
390
|
const renderValues = createMemo<BreadcrumbItemRenderProps>(() => ({
|
|
373
391
|
isCurrent: isCurrent(),
|
|
@@ -380,7 +398,9 @@ export function BreadcrumbItem(props: BreadcrumbItemProps): JSX.Element {
|
|
|
380
398
|
|
|
381
399
|
const renderProps = useRenderProps(
|
|
382
400
|
{
|
|
383
|
-
children
|
|
401
|
+
get children() {
|
|
402
|
+
return props.children;
|
|
403
|
+
},
|
|
384
404
|
class: local.class,
|
|
385
405
|
style: local.style,
|
|
386
406
|
defaultClassName: "solidaria-BreadcrumbItem",
|
|
@@ -399,7 +419,6 @@ export function BreadcrumbItem(props: BreadcrumbItemProps): JSX.Element {
|
|
|
399
419
|
component={elementType()}
|
|
400
420
|
{...mergedItemProps()}
|
|
401
421
|
ref={(element: HTMLElement) => assignRef(local.ref, element)}
|
|
402
|
-
href={isCurrent() ? undefined : (mergedItemProps() as { href?: string }).href}
|
|
403
422
|
aria-current={isCurrent() ? (ariaProps["aria-current"] ?? "page") : undefined}
|
|
404
423
|
aria-disabled={isDisabled() || isCurrent() || undefined}
|
|
405
424
|
class={renderProps.class()}
|
package/src/Button.tsx
CHANGED
|
@@ -36,6 +36,12 @@ import {
|
|
|
36
36
|
import { DialogTriggerContext, PopoverTriggerContext } from "./contexts";
|
|
37
37
|
import { ProgressBarContext } from "./ProgressBar";
|
|
38
38
|
|
|
39
|
+
// Events preserved when `isPending` is true (for tooltips and other overlays),
|
|
40
|
+
// mirroring RAC Button's `PRESERVED_EVENT_PATTERN`. Every other `on*` handler
|
|
41
|
+
// is stripped so a pending-but-focusable button cannot be activated.
|
|
42
|
+
const pendingPreservedEventPattern =
|
|
43
|
+
/Focus|Blur|Hover|Pointer(Enter|Leave|Over|Out)|Mouse(Enter|Leave|Over|Out)/;
|
|
44
|
+
|
|
39
45
|
type RefLike<T> = ((el: T) => void) | { current?: T | null } | undefined;
|
|
40
46
|
|
|
41
47
|
function assignRef<T>(ref: RefLike<T>, el: T): void {
|
|
@@ -294,8 +300,17 @@ export function Button(props: ButtonProps): JSX.Element {
|
|
|
294
300
|
get onClick() {
|
|
295
301
|
return resolvePending() ? undefined : ariaProps.onClick;
|
|
296
302
|
},
|
|
303
|
+
// Mirror React Aria's RAC `Button`: `useButton` is called with the base
|
|
304
|
+
// `isDisabled` WITHOUT `isPending`, so a pending-focusable button stays a
|
|
305
|
+
// non-disabled native `<button>` — keeping `useFocusable`'s always-on
|
|
306
|
+
// `tabIndex={0}` (the Safari focus workaround) and no native `disabled`
|
|
307
|
+
// attribute. The pending "disabled" semantics are layered ON TOP:
|
|
308
|
+
// `aria-disabled="true"` below and `disablePendingInteractions` stripping
|
|
309
|
+
// the press handlers post-hoc (RAC's `useDisableInteractions`). Folding
|
|
310
|
+
// `isPending` in here instead would make the focusable hook drop
|
|
311
|
+
// `tabIndex`, diverging from upstream's pending button (D4).
|
|
297
312
|
get isDisabled() {
|
|
298
|
-
return resolveDisabled()
|
|
313
|
+
return resolveDisabled();
|
|
299
314
|
},
|
|
300
315
|
}),
|
|
301
316
|
);
|
|
@@ -447,7 +462,12 @@ export function Button(props: ButtonProps): JSX.Element {
|
|
|
447
462
|
|
|
448
463
|
const next = { ...props };
|
|
449
464
|
for (const key of Object.keys(next)) {
|
|
450
|
-
|
|
465
|
+
// Mirror RAC's `useDisableInteractions`: when pending, strip every event
|
|
466
|
+
// handler except the ones overlays/tooltips still need — focus/blur,
|
|
467
|
+
// hover, and pointer/mouse enter-leave-over-out. Press handlers
|
|
468
|
+
// (click/pointerdown/keydown/…) are removed so the focusable button
|
|
469
|
+
// cannot be activated while pending.
|
|
470
|
+
if (key.startsWith("on") && !pendingPreservedEventPattern.test(key)) {
|
|
451
471
|
next[key] = undefined;
|
|
452
472
|
}
|
|
453
473
|
}
|
package/src/Calendar.tsx
CHANGED
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
createCalendarState,
|
|
31
31
|
type CalendarState,
|
|
32
32
|
type CalendarStateProps,
|
|
33
|
+
type CalendarSelectionMode,
|
|
33
34
|
type CalendarDate,
|
|
34
35
|
type DateValue,
|
|
35
36
|
endOfMonth,
|
|
@@ -69,10 +70,13 @@ export interface CalendarRenderProps {
|
|
|
69
70
|
isInvalid: boolean;
|
|
70
71
|
}
|
|
71
72
|
|
|
72
|
-
export interface CalendarProps<
|
|
73
|
+
export interface CalendarProps<
|
|
74
|
+
T extends DateValue = DateValue,
|
|
75
|
+
M extends CalendarSelectionMode = "single",
|
|
76
|
+
>
|
|
73
77
|
extends
|
|
74
78
|
Omit<AriaCalendarProps, "id" | "isDisabled" | "isReadOnly">,
|
|
75
|
-
Omit<CalendarStateProps<T>, "locale">,
|
|
79
|
+
Omit<CalendarStateProps<T, M>, "locale">,
|
|
76
80
|
SlotProps {
|
|
77
81
|
/** The children of the component. */
|
|
78
82
|
children?: JSX.Element;
|
|
@@ -207,7 +211,10 @@ export function useCalendarContext(): CalendarState<DateValue> {
|
|
|
207
211
|
* </Calendar>
|
|
208
212
|
* ```
|
|
209
213
|
*/
|
|
210
|
-
export function Calendar<
|
|
214
|
+
export function Calendar<
|
|
215
|
+
T extends DateValue = CalendarDate,
|
|
216
|
+
M extends CalendarSelectionMode = "single",
|
|
217
|
+
>(props: CalendarProps<T, M>): JSX.Element {
|
|
211
218
|
const inheritedState = useContext(CalendarContext);
|
|
212
219
|
|
|
213
220
|
// Use hydration-safe pattern for client-only rendering
|
|
@@ -227,9 +234,10 @@ export function Calendar<T extends DateValue = CalendarDate>(props: CalendarProp
|
|
|
227
234
|
);
|
|
228
235
|
}
|
|
229
236
|
|
|
230
|
-
function CalendarWithState<
|
|
231
|
-
|
|
232
|
-
|
|
237
|
+
function CalendarWithState<
|
|
238
|
+
T extends DateValue = CalendarDate,
|
|
239
|
+
M extends CalendarSelectionMode = "single",
|
|
240
|
+
>(props: CalendarProps<T, M> & { state: CalendarState<DateValue> }): JSX.Element {
|
|
233
241
|
const [local, stateProps, rest] = splitProps(
|
|
234
242
|
props,
|
|
235
243
|
["children", "class", "style", "slot", "state", "ref"],
|
|
@@ -237,6 +245,7 @@ function CalendarWithState<T extends DateValue = CalendarDate>(
|
|
|
237
245
|
"value",
|
|
238
246
|
"defaultValue",
|
|
239
247
|
"onChange",
|
|
248
|
+
"selectionMode",
|
|
240
249
|
"minValue",
|
|
241
250
|
"maxValue",
|
|
242
251
|
"isDisabled",
|
|
@@ -296,6 +305,17 @@ function CalendarWithState<T extends DateValue = CalendarDate>(
|
|
|
296
305
|
<h2>{String(calendarAria.calendarProps["aria-label"] ?? "")}</h2>
|
|
297
306
|
</VisuallyHidden>
|
|
298
307
|
{props.children}
|
|
308
|
+
{/* For touch screen readers, a visually hidden next button after the month
|
|
309
|
+
* grid so it's easy to navigate after reaching the end without going all
|
|
310
|
+
* the way back to the start. Mirrors react-aria-components Calendar. */}
|
|
311
|
+
<VisuallyHidden>
|
|
312
|
+
<button
|
|
313
|
+
aria-label={String(calendarAria.nextButtonProps["aria-label"] ?? "")}
|
|
314
|
+
disabled={Boolean(calendarAria.nextButtonProps.disabled)}
|
|
315
|
+
onClick={() => state().focusNextPage()}
|
|
316
|
+
tabIndex={-1}
|
|
317
|
+
/>
|
|
318
|
+
</VisuallyHidden>
|
|
299
319
|
</div>
|
|
300
320
|
);
|
|
301
321
|
}
|
|
@@ -303,7 +323,10 @@ function CalendarWithState<T extends DateValue = CalendarDate>(
|
|
|
303
323
|
/**
|
|
304
324
|
* Internal Calendar component that renders after client mount.
|
|
305
325
|
*/
|
|
306
|
-
function CalendarInner<
|
|
326
|
+
function CalendarInner<
|
|
327
|
+
T extends DateValue = CalendarDate,
|
|
328
|
+
M extends CalendarSelectionMode = "single",
|
|
329
|
+
>(props: CalendarProps<T, M>): JSX.Element {
|
|
307
330
|
const [local, stateProps, rest] = splitProps(
|
|
308
331
|
props,
|
|
309
332
|
["children", "class", "style", "slot", "ref"],
|
|
@@ -311,6 +334,7 @@ function CalendarInner<T extends DateValue = CalendarDate>(props: CalendarProps<
|
|
|
311
334
|
"value",
|
|
312
335
|
"defaultValue",
|
|
313
336
|
"onChange",
|
|
337
|
+
"selectionMode",
|
|
314
338
|
"minValue",
|
|
315
339
|
"maxValue",
|
|
316
340
|
"isDisabled",
|
|
@@ -333,7 +357,7 @@ function CalendarInner<T extends DateValue = CalendarDate>(props: CalendarProps<
|
|
|
333
357
|
);
|
|
334
358
|
|
|
335
359
|
// Create calendar state
|
|
336
|
-
const state = createCalendarState(stateProps);
|
|
360
|
+
const state = createCalendarState<T, M>(stateProps);
|
|
337
361
|
|
|
338
362
|
// Create calendar ARIA props
|
|
339
363
|
const calendarAria = createCalendar(
|
|
@@ -374,6 +398,18 @@ function CalendarInner<T extends DateValue = CalendarDate>(props: CalendarProps<
|
|
|
374
398
|
<h2>{String(calendarAria.calendarProps["aria-label"] ?? "")}</h2>
|
|
375
399
|
</VisuallyHidden>
|
|
376
400
|
{props.children}
|
|
401
|
+
{/* For touch screen readers, a visually hidden next button after the
|
|
402
|
+
* month grid so it's easy to navigate after reaching the end without
|
|
403
|
+
* going all the way back to the start. Mirrors react-aria-components
|
|
404
|
+
* Calendar. */}
|
|
405
|
+
<VisuallyHidden>
|
|
406
|
+
<button
|
|
407
|
+
aria-label={String(calendarAria.nextButtonProps["aria-label"] ?? "")}
|
|
408
|
+
disabled={Boolean(calendarAria.nextButtonProps.disabled)}
|
|
409
|
+
onClick={() => state.focusNextPage()}
|
|
410
|
+
tabIndex={-1}
|
|
411
|
+
/>
|
|
412
|
+
</VisuallyHidden>
|
|
377
413
|
</div>
|
|
378
414
|
</CalendarContext.Provider>
|
|
379
415
|
);
|
|
@@ -398,7 +434,9 @@ export function CalendarHeading(props: CalendarHeadingProps): JSX.Element {
|
|
|
398
434
|
}));
|
|
399
435
|
const renderProps = useRenderProps(
|
|
400
436
|
{
|
|
401
|
-
children
|
|
437
|
+
get children() {
|
|
438
|
+
return props.children;
|
|
439
|
+
},
|
|
402
440
|
class: props.class,
|
|
403
441
|
style: props.style,
|
|
404
442
|
defaultClassName: "solidaria-CalendarHeading",
|
|
@@ -440,12 +478,18 @@ export function CalendarButton(props: CalendarButtonProps): JSX.Element {
|
|
|
440
478
|
return calendarAria.nextButtonProps;
|
|
441
479
|
});
|
|
442
480
|
|
|
481
|
+
const isDisabled = () => props.isDisabled || state.isDisabled();
|
|
482
|
+
|
|
443
483
|
return (
|
|
444
484
|
<button
|
|
445
485
|
{...buttonProps()}
|
|
446
486
|
class={props.class ?? "solidaria-CalendarButton"}
|
|
447
487
|
style={props.style}
|
|
448
|
-
disabled={
|
|
488
|
+
disabled={isDisabled()}
|
|
489
|
+
// Mirror useFocusable: always set an explicit tabIndex on an enabled
|
|
490
|
+
// focusable button (0), and drop it entirely when disabled — so the
|
|
491
|
+
// nav buttons appear in the roving tab order exactly as upstream does.
|
|
492
|
+
tabindex={isDisabled() ? undefined : 0}
|
|
449
493
|
>
|
|
450
494
|
{props.children}
|
|
451
495
|
</button>
|
|
@@ -625,7 +669,9 @@ export function CalendarCell(props: CalendarCellProps): JSX.Element {
|
|
|
625
669
|
|
|
626
670
|
const renderProps = useRenderProps(
|
|
627
671
|
{
|
|
628
|
-
children
|
|
672
|
+
get children() {
|
|
673
|
+
return props.children;
|
|
674
|
+
},
|
|
629
675
|
class: props.class,
|
|
630
676
|
style: props.style,
|
|
631
677
|
defaultClassName: "solidaria-CalendarCell",
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CalendarMonthPicker / CalendarYearPicker components for solidaria-components
|
|
3
|
+
*
|
|
4
|
+
* Headless month/year "jump-to" pickers shared by Calendar and RangeCalendar.
|
|
5
|
+
* Each reads whichever calendar state context is present and renders through a
|
|
6
|
+
* child function, mirroring the single context-agnostic components upstream.
|
|
7
|
+
* Port of react-aria-components/src/Calendar.tsx (CalendarMonthPicker /
|
|
8
|
+
* CalendarYearPicker).
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { type JSX, useContext } from "solid-js";
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
createCalendarMonthPicker,
|
|
15
|
+
createCalendarYearPicker,
|
|
16
|
+
type CalendarMonthPickerProps as AriaCalendarMonthPickerProps,
|
|
17
|
+
type CalendarMonthPickerAria,
|
|
18
|
+
type CalendarYearPickerProps as AriaCalendarYearPickerProps,
|
|
19
|
+
type CalendarYearPickerAria,
|
|
20
|
+
} from "@proyecto-viviana/solidaria";
|
|
21
|
+
|
|
22
|
+
import { CalendarContext } from "./Calendar";
|
|
23
|
+
import { RangeCalendarContext } from "./RangeCalendar";
|
|
24
|
+
|
|
25
|
+
export type {
|
|
26
|
+
CalendarMonthPickerAria,
|
|
27
|
+
CalendarMonthPickerItem,
|
|
28
|
+
CalendarYearPickerAria,
|
|
29
|
+
CalendarYearPickerItem,
|
|
30
|
+
CalendarYearPickerFormatOptions,
|
|
31
|
+
} from "@proyecto-viviana/solidaria";
|
|
32
|
+
|
|
33
|
+
export interface CalendarMonthPickerProps extends AriaCalendarMonthPickerProps {
|
|
34
|
+
/** A function that renders the month picker from its accessible props. */
|
|
35
|
+
children: (renderProps: CalendarMonthPickerAria) => JSX.Element;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* A CalendarMonthPicker renders the list of months in the focused year so the
|
|
40
|
+
* user can jump the calendar's focus to a different month. It works within both
|
|
41
|
+
* a Calendar and a RangeCalendar.
|
|
42
|
+
*/
|
|
43
|
+
export function CalendarMonthPicker(props: CalendarMonthPickerProps): JSX.Element {
|
|
44
|
+
const calendarState = useContext(CalendarContext);
|
|
45
|
+
const rangeCalendarState = useContext(RangeCalendarContext);
|
|
46
|
+
const state = calendarState ?? rangeCalendarState;
|
|
47
|
+
if (!state) {
|
|
48
|
+
throw new Error("CalendarMonthPicker must be used within a Calendar or RangeCalendar");
|
|
49
|
+
}
|
|
50
|
+
const aria = createCalendarMonthPicker(props, state);
|
|
51
|
+
return props.children(aria);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface CalendarYearPickerProps extends AriaCalendarYearPickerProps {
|
|
55
|
+
/** A function that renders the year picker from its accessible props. */
|
|
56
|
+
children: (renderProps: CalendarYearPickerAria) => JSX.Element;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* A CalendarYearPicker renders a sliding window of years so the user can jump
|
|
61
|
+
* the calendar's focus to a different year. It works within both a Calendar and
|
|
62
|
+
* a RangeCalendar.
|
|
63
|
+
*/
|
|
64
|
+
export function CalendarYearPicker(props: CalendarYearPickerProps): JSX.Element {
|
|
65
|
+
const calendarState = useContext(CalendarContext);
|
|
66
|
+
const rangeCalendarState = useContext(RangeCalendarContext);
|
|
67
|
+
const state = calendarState ?? rangeCalendarState;
|
|
68
|
+
if (!state) {
|
|
69
|
+
throw new Error("CalendarYearPicker must be used within a Calendar or RangeCalendar");
|
|
70
|
+
}
|
|
71
|
+
const aria = createCalendarYearPicker(props, state);
|
|
72
|
+
return props.children(aria);
|
|
73
|
+
}
|