@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/DateField.tsx
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import {
|
|
9
9
|
type JSX,
|
|
10
|
+
type Context,
|
|
10
11
|
createContext,
|
|
11
12
|
createEffect,
|
|
12
13
|
createMemo,
|
|
@@ -14,14 +15,25 @@ import {
|
|
|
14
15
|
onCleanup,
|
|
15
16
|
splitProps,
|
|
16
17
|
useContext,
|
|
17
|
-
|
|
18
|
+
Index,
|
|
18
19
|
Show,
|
|
19
20
|
} from "solid-js";
|
|
20
21
|
import {
|
|
21
22
|
createDateField,
|
|
22
23
|
createDateSegment,
|
|
24
|
+
createFocusRing,
|
|
25
|
+
createHover,
|
|
26
|
+
createVisuallyHidden,
|
|
27
|
+
mergeProps,
|
|
23
28
|
type AriaDateFieldProps,
|
|
24
29
|
} from "@proyecto-viviana/solidaria";
|
|
30
|
+
import {
|
|
31
|
+
parseDate,
|
|
32
|
+
parseDateTime,
|
|
33
|
+
toCalendarDate,
|
|
34
|
+
toCalendarDateTime,
|
|
35
|
+
toLocalTimeZone,
|
|
36
|
+
} from "@internationalized/date";
|
|
25
37
|
import {
|
|
26
38
|
createDateFieldState,
|
|
27
39
|
access,
|
|
@@ -39,8 +51,9 @@ import {
|
|
|
39
51
|
useRenderProps,
|
|
40
52
|
dataAttr,
|
|
41
53
|
useIsHydrated,
|
|
54
|
+
Provider,
|
|
42
55
|
} from "./utils";
|
|
43
|
-
import {
|
|
56
|
+
import { TextContext } from "./Text";
|
|
44
57
|
import { FormContext, type FormProps } from "./Form";
|
|
45
58
|
import {
|
|
46
59
|
DateRangePickerContext,
|
|
@@ -92,12 +105,20 @@ export interface DateInputProps extends SlotProps {
|
|
|
92
105
|
}
|
|
93
106
|
|
|
94
107
|
export interface DateSegmentRenderProps {
|
|
108
|
+
/** Whether the segment is hovered. */
|
|
109
|
+
isHovered: boolean;
|
|
95
110
|
/** Whether the segment is focused. */
|
|
96
111
|
isFocused: boolean;
|
|
97
|
-
/** Whether the segment is
|
|
98
|
-
|
|
112
|
+
/** Whether the segment is keyboard focused. */
|
|
113
|
+
isFocusVisible: boolean;
|
|
99
114
|
/** Whether the segment is a placeholder. */
|
|
100
115
|
isPlaceholder: boolean;
|
|
116
|
+
/** Whether the segment is read only. */
|
|
117
|
+
isReadOnly: boolean;
|
|
118
|
+
/** Whether the segment is disabled. */
|
|
119
|
+
isDisabled: boolean;
|
|
120
|
+
/** Whether the segment is invalid. */
|
|
121
|
+
isInvalid: boolean;
|
|
101
122
|
/** The segment type. */
|
|
102
123
|
type: DateSegmentType["type"];
|
|
103
124
|
/** The text to display. */
|
|
@@ -120,6 +141,10 @@ export interface DateFieldContextValue {
|
|
|
120
141
|
aria: {
|
|
121
142
|
labelProps: Record<string, unknown>;
|
|
122
143
|
inputProps: Record<string, unknown>;
|
|
144
|
+
// The hidden validation <input> props (native type/required/onChange). Only
|
|
145
|
+
// the standalone DateField provides these; DatePicker/DateRangePicker manage
|
|
146
|
+
// their own hidden inputs, so this stays optional and its <input> is gated.
|
|
147
|
+
hiddenInputProps?: Record<string, unknown>;
|
|
123
148
|
descriptionProps: Record<string, unknown>;
|
|
124
149
|
errorMessageProps: Record<string, unknown>;
|
|
125
150
|
};
|
|
@@ -275,14 +300,37 @@ function DateFieldInner<T extends DateValue = CalendarDate>(
|
|
|
275
300
|
);
|
|
276
301
|
|
|
277
302
|
const [fieldRef, setFieldRef] = createSignal<HTMLDivElement | null>(null);
|
|
303
|
+
// Ref to the hidden validation <input> (the DateInput's `<Input>` sibling).
|
|
304
|
+
// RAC's DateField creates this ref, passes it to useDateField, and threads it
|
|
305
|
+
// onto the <Input> via InputContext so useFormReset/useFormValidation target
|
|
306
|
+
// that element. We mirror that: create it here, hand it to createDateField
|
|
307
|
+
// below, and attach it to the same input through the context getter.
|
|
308
|
+
const [validationInputRef, setValidationInputRef] =
|
|
309
|
+
createSignal<HTMLInputElement | null>(null);
|
|
278
310
|
|
|
279
311
|
const state = createDateFieldState(stateProps);
|
|
280
312
|
|
|
281
313
|
const fieldAria = createDateField(
|
|
282
314
|
() => ({
|
|
283
315
|
...(rest as Record<string, unknown>),
|
|
316
|
+
// RAC threads the same props into both useDateFieldState and useDateField;
|
|
317
|
+
// these live in `stateProps` here, so forward them so the field hook can
|
|
318
|
+
// build aria-disabled and the native validation <input> (type/required).
|
|
319
|
+
// access() unwraps the MaybeAccessor state-prop declarations.
|
|
320
|
+
isDisabled: access(stateProps.isDisabled),
|
|
321
|
+
isReadOnly: access(stateProps.isReadOnly),
|
|
322
|
+
isRequired: access(stateProps.isRequired),
|
|
323
|
+
// Mirror RAC DateField: validationBehavior ?? formValidationBehavior ??
|
|
324
|
+
// 'native'. withFormValidationBehavior already folds the form default into
|
|
325
|
+
// stateProps.validationBehavior; the last `?? 'native'` is the standalone
|
|
326
|
+
// default that flips the hidden input to type="text".
|
|
327
|
+
validationBehavior: stateProps.validationBehavior ?? "native",
|
|
284
328
|
description: stateProps.description,
|
|
285
329
|
errorMessage: stateProps.errorMessage,
|
|
330
|
+
// Form-reset + native constraint validation are wired onto this input by
|
|
331
|
+
// createDateField (see its createFormReset/createFormValidation calls),
|
|
332
|
+
// exactly as RAC's useDateField wires them onto props.inputRef.
|
|
333
|
+
inputRef: () => validationInputRef() ?? undefined,
|
|
286
334
|
}),
|
|
287
335
|
state as unknown as DateFieldState<DateValue>,
|
|
288
336
|
fieldRef,
|
|
@@ -304,27 +352,57 @@ function DateFieldInner<T extends DateValue = CalendarDate>(
|
|
|
304
352
|
renderValues,
|
|
305
353
|
);
|
|
306
354
|
|
|
307
|
-
const
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
355
|
+
const textSlots = {
|
|
356
|
+
slots: {
|
|
357
|
+
get description() {
|
|
358
|
+
return fieldAria.descriptionProps;
|
|
359
|
+
},
|
|
360
|
+
get errorMessage() {
|
|
361
|
+
return fieldAria.errorMessageProps;
|
|
362
|
+
},
|
|
363
|
+
},
|
|
364
|
+
};
|
|
311
365
|
|
|
312
366
|
return (
|
|
313
367
|
<DateFieldStateContext.Provider value={state as unknown as DateFieldState<DateValue>}>
|
|
314
368
|
<DateFieldContext.Provider
|
|
315
369
|
value={{
|
|
316
370
|
state: state as unknown as DateFieldState<DateValue>,
|
|
371
|
+
// Read through getters so consumers see the LIVE memo values, not a
|
|
372
|
+
// snapshot frozen at first render. `createDescription` appends the
|
|
373
|
+
// value-description id via a deferred effect; the group's
|
|
374
|
+
// aria-describedby only picks it up if the props stay reactive here.
|
|
317
375
|
aria: {
|
|
318
|
-
labelProps
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
376
|
+
get labelProps() {
|
|
377
|
+
return fieldAria.labelProps;
|
|
378
|
+
},
|
|
379
|
+
// The segment group props (role="group", aria-labelledby, unicode-bidi
|
|
380
|
+
// isolate style, arrow-key nav, focus-within handlers) are routed to the
|
|
381
|
+
// DateInput element — mirroring RAC, where useDateField.fieldProps is
|
|
382
|
+
// published through GroupContext and consumed by the DateInput <Group>.
|
|
383
|
+
// The outer wrapper stays roleless.
|
|
384
|
+
get inputProps() {
|
|
385
|
+
return fieldAria.fieldProps;
|
|
386
|
+
},
|
|
387
|
+
// The REAL hidden validation input props (type/hidden/required/onChange
|
|
388
|
+
// under native validation). Rendered as the DateInput's <input> sibling.
|
|
389
|
+
// Thread the validation-input ref through here — mirroring RAC's
|
|
390
|
+
// `[InputContext, {...inputProps, ref: inputRef}]` — so createDateField's
|
|
391
|
+
// form-reset/validation wiring resolves to the mounted element.
|
|
392
|
+
get hiddenInputProps() {
|
|
393
|
+
return mergeProps(fieldAria.inputProps, { ref: setValidationInputRef });
|
|
394
|
+
},
|
|
395
|
+
get descriptionProps() {
|
|
396
|
+
return fieldAria.descriptionProps;
|
|
397
|
+
},
|
|
398
|
+
get errorMessageProps() {
|
|
399
|
+
return fieldAria.errorMessageProps;
|
|
400
|
+
},
|
|
322
401
|
},
|
|
323
402
|
}}
|
|
324
403
|
>
|
|
325
404
|
<div
|
|
326
405
|
ref={setFieldRef}
|
|
327
|
-
{...fieldAria.fieldProps}
|
|
328
406
|
class={renderProps.class()}
|
|
329
407
|
style={renderProps.style()}
|
|
330
408
|
data-disabled={dataAttr(state.isDisabled())}
|
|
@@ -332,31 +410,125 @@ function DateFieldInner<T extends DateValue = CalendarDate>(
|
|
|
332
410
|
data-required={dataAttr(state.isRequired())}
|
|
333
411
|
data-invalid={dataAttr(state.isInvalid())}
|
|
334
412
|
>
|
|
335
|
-
{
|
|
413
|
+
<Provider values={[[TextContext, textSlots]] as Array<[Context<unknown>, unknown]>}>
|
|
414
|
+
{local.children as JSX.Element}
|
|
415
|
+
</Provider>
|
|
336
416
|
</div>
|
|
337
|
-
|
|
338
|
-
<HiddenDateInput
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
/>
|
|
354
|
-
</Show>
|
|
417
|
+
{/*
|
|
418
|
+
RAC renders <HiddenDateInput> UNCONDITIONALLY at the DateField root
|
|
419
|
+
(react-aria-components DateField.mjs). It is NOT a validation input — it
|
|
420
|
+
is a clipped, aria-hidden, tabIndex={-1} native date input that mirrors
|
|
421
|
+
the value for browser autofill. Its `form=""` detaches it from form
|
|
422
|
+
submission (the DateInput's <Input> above is what submits), so it never
|
|
423
|
+
double-counts in FormData. It renders regardless of `name` — hence no
|
|
424
|
+
<Show> gate — which is why it appears in the focus trail as the trailing
|
|
425
|
+
tabindex="-1" element.
|
|
426
|
+
*/}
|
|
427
|
+
<RootHiddenDateInput
|
|
428
|
+
autoComplete={(rest as Record<string, unknown>).autoComplete as string | undefined}
|
|
429
|
+
name={(rest as Record<string, unknown>).name as string | undefined}
|
|
430
|
+
isDisabled={state.isDisabled()}
|
|
431
|
+
state={state as unknown as DateFieldState<DateValue>}
|
|
432
|
+
/>
|
|
355
433
|
</DateFieldContext.Provider>
|
|
356
434
|
</DateFieldStateContext.Provider>
|
|
357
435
|
);
|
|
358
436
|
}
|
|
359
437
|
|
|
438
|
+
const HIDDEN_DATE_SEGMENTS: readonly string[] = ["day", "month", "year"];
|
|
439
|
+
const HIDDEN_TIME_SEGMENTS: readonly string[] = ["hour", "minute", "second"];
|
|
440
|
+
const HIDDEN_GRANULARITY_MAP: Record<string, number> = { hour: 1, minute: 2, second: 3 };
|
|
441
|
+
|
|
442
|
+
interface RootHiddenDateInputProps {
|
|
443
|
+
autoComplete?: string;
|
|
444
|
+
name?: string;
|
|
445
|
+
isDisabled?: boolean;
|
|
446
|
+
state: DateFieldState<DateValue>;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* The always-rendered hidden date input at the DateField root — a faithful port
|
|
451
|
+
* of react-aria-components' HiddenDateInput (private/HiddenDateInput.mjs). It is
|
|
452
|
+
* NOT a validation input: it is a clipped, aria-hidden, tabIndex={-1} native
|
|
453
|
+
* date input that mirrors the current value for browser autofill. `form=""`
|
|
454
|
+
* detaches it from form submission (the DateInput's <Input> submits), so it
|
|
455
|
+
* never double-counts in FormData. RAC renders it unconditionally, which is why
|
|
456
|
+
* it appears as the trailing tabindex="-1" element in the focus trail.
|
|
457
|
+
*/
|
|
458
|
+
function RootHiddenDateInput(props: RootHiddenDateInputProps): JSX.Element {
|
|
459
|
+
// RAC uses useVisuallyHidden with position:fixed/top:0/left:0 to keep the
|
|
460
|
+
// clipped input from scrolling the page.
|
|
461
|
+
const { visuallyHiddenProps } = createVisuallyHidden(() => ({
|
|
462
|
+
style: { position: "fixed", top: "0", left: "0" },
|
|
463
|
+
}));
|
|
464
|
+
|
|
465
|
+
const granularity = () => props.state.granularity ?? "day";
|
|
466
|
+
const inputStep = () => {
|
|
467
|
+
const g = granularity();
|
|
468
|
+
if (g === "second") return 1;
|
|
469
|
+
if (g === "hour") return 3600;
|
|
470
|
+
return 60;
|
|
471
|
+
};
|
|
472
|
+
const inputType = () => (granularity() === "day" ? "date" : "datetime-local");
|
|
473
|
+
const dateValue = () => {
|
|
474
|
+
const value = props.state.value();
|
|
475
|
+
if (!value) return "";
|
|
476
|
+
if (granularity() === "day") return toCalendarDate(value).toString();
|
|
477
|
+
return toCalendarDateTime(
|
|
478
|
+
"timeZone" in value ? toLocalTimeZone(value) : value,
|
|
479
|
+
).toString();
|
|
480
|
+
};
|
|
481
|
+
|
|
482
|
+
const onChange: JSX.EventHandler<HTMLInputElement, Event> = (event) => {
|
|
483
|
+
const targetString = (event.currentTarget.value ?? "").toString();
|
|
484
|
+
if (!targetString) return;
|
|
485
|
+
try {
|
|
486
|
+
const g = granularity();
|
|
487
|
+
const targetValue = (g === "day" ? parseDate(targetString) : parseDateTime(targetString)) as
|
|
488
|
+
unknown as Record<string, number>;
|
|
489
|
+
let timeSegments = HIDDEN_TIME_SEGMENTS;
|
|
490
|
+
if (HIDDEN_TIME_SEGMENTS.includes(g)) {
|
|
491
|
+
timeSegments = HIDDEN_TIME_SEGMENTS.slice(0, HIDDEN_GRANULARITY_MAP[g]);
|
|
492
|
+
}
|
|
493
|
+
const state = props.state as unknown as {
|
|
494
|
+
setSegment?: (type: string, value: number) => void;
|
|
495
|
+
setValue: (value: unknown) => void;
|
|
496
|
+
};
|
|
497
|
+
// Only DateFieldState (not DatePickerState) exposes setSegment; validate
|
|
498
|
+
// each parsed segment before committing the new value, mirroring RAC.
|
|
499
|
+
if (typeof state.setSegment === "function") {
|
|
500
|
+
for (const type in targetValue) {
|
|
501
|
+
if (HIDDEN_DATE_SEGMENTS.includes(type)) state.setSegment(type, targetValue[type]);
|
|
502
|
+
if (timeSegments.includes(type)) state.setSegment(type, targetValue[type]);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
state.setValue(targetValue);
|
|
506
|
+
} catch {
|
|
507
|
+
// ignore unparseable autofill values
|
|
508
|
+
}
|
|
509
|
+
};
|
|
510
|
+
|
|
511
|
+
return (
|
|
512
|
+
<div
|
|
513
|
+
{...(visuallyHiddenProps() as unknown as Record<string, unknown>)}
|
|
514
|
+
aria-hidden="true"
|
|
515
|
+
data-testid="hidden-dateinput-container"
|
|
516
|
+
>
|
|
517
|
+
<input
|
|
518
|
+
tabIndex={-1}
|
|
519
|
+
autocomplete={props.autoComplete}
|
|
520
|
+
disabled={props.isDisabled}
|
|
521
|
+
type={inputType()}
|
|
522
|
+
form=""
|
|
523
|
+
name={props.name}
|
|
524
|
+
step={inputStep()}
|
|
525
|
+
value={dateValue()}
|
|
526
|
+
onChange={onChange}
|
|
527
|
+
/>
|
|
528
|
+
</div>
|
|
529
|
+
);
|
|
530
|
+
}
|
|
531
|
+
|
|
360
532
|
/**
|
|
361
533
|
* The input area containing date segments.
|
|
362
534
|
*/
|
|
@@ -380,6 +552,20 @@ export function DateInput(props: DateInputProps): JSX.Element {
|
|
|
380
552
|
renderValues,
|
|
381
553
|
);
|
|
382
554
|
|
|
555
|
+
// The group props (role="group", aria-labelledby, unicode-bidi:isolate,
|
|
556
|
+
// arrow-key nav, focus-within handlers) carry the field's own `style` and
|
|
557
|
+
// focus handlers. Merge — not clobber — so the group keeps its unicode-bidi
|
|
558
|
+
// isolation and the local isFocused signal chains onto the field's
|
|
559
|
+
// focusWithin handlers. Solid onFocus/onBlur do not bubble, so track focus
|
|
560
|
+
// via onFocusIn/onFocusOut.
|
|
561
|
+
const inputDivProps = createMemo(() =>
|
|
562
|
+
mergeProps(aria.inputProps, {
|
|
563
|
+
onFocusIn: () => setIsFocused(true),
|
|
564
|
+
onFocusOut: () => setIsFocused(false),
|
|
565
|
+
style: renderProps.style(),
|
|
566
|
+
}),
|
|
567
|
+
);
|
|
568
|
+
|
|
383
569
|
createEffect(() => {
|
|
384
570
|
const element = inputRef();
|
|
385
571
|
const handler = props.onPointerDownCapture;
|
|
@@ -395,16 +581,41 @@ export function DateInput(props: DateInputProps): JSX.Element {
|
|
|
395
581
|
<DateFieldContext.Provider value={context as DateFieldContextValue}>
|
|
396
582
|
<div
|
|
397
583
|
ref={setInputRef}
|
|
398
|
-
{...
|
|
584
|
+
{...inputDivProps()}
|
|
399
585
|
class={renderProps.class()}
|
|
400
|
-
style={renderProps.style()}
|
|
401
586
|
data-disabled={dataAttr(state.isDisabled())}
|
|
402
587
|
data-focused={dataAttr(isFocused())}
|
|
403
|
-
onFocusIn={() => setIsFocused(true)}
|
|
404
|
-
onFocusOut={() => setIsFocused(false)}
|
|
405
588
|
>
|
|
406
|
-
|
|
589
|
+
{/*
|
|
590
|
+
<Index> keys by position, not identity, so each DateSegment instance
|
|
591
|
+
stays alive across keystrokes (state.segments() re-mints segment
|
|
592
|
+
objects every edit). A stable Proxy forwards property reads to the
|
|
593
|
+
live per-index accessor so the child stays reactive.
|
|
594
|
+
*/}
|
|
595
|
+
<Index each={state.segments()}>
|
|
596
|
+
{(segment) => {
|
|
597
|
+
const liveSegment = new Proxy({} as DateSegmentType, {
|
|
598
|
+
get: (_t, key) => (segment() as unknown as Record<PropertyKey, unknown>)[key],
|
|
599
|
+
has: (_t, key) => key in (segment() as object),
|
|
600
|
+
});
|
|
601
|
+
return props.children?.(liveSegment);
|
|
602
|
+
}}
|
|
603
|
+
</Index>
|
|
407
604
|
</div>
|
|
605
|
+
{/*
|
|
606
|
+
The hidden validation input, sibling of the group — mirrors RAC's
|
|
607
|
+
DateInputInner `<><Group/><Input/></>`. Under native validation
|
|
608
|
+
(default) `useDateField` publishes it as `type="text" hidden required`
|
|
609
|
+
so browser constraint validation fires; under aria validation it stays
|
|
610
|
+
`type="hidden"`. Both carry the ISO value string. Only the standalone
|
|
611
|
+
DateField supplies these props; inside a DatePicker/DateRangePicker the
|
|
612
|
+
field is presentation and its owner renders the hidden input instead.
|
|
613
|
+
*/}
|
|
614
|
+
<Show when={aria.hiddenInputProps}>
|
|
615
|
+
{(hiddenInputProps) => (
|
|
616
|
+
<input {...(hiddenInputProps() as JSX.InputHTMLAttributes<HTMLInputElement>)} />
|
|
617
|
+
)}
|
|
618
|
+
</Show>
|
|
408
619
|
</DateFieldContext.Provider>
|
|
409
620
|
);
|
|
410
621
|
}
|
|
@@ -416,19 +627,41 @@ export function DateSegment(props: DateSegmentProps): JSX.Element {
|
|
|
416
627
|
const { state } = useDateFieldContext();
|
|
417
628
|
const [segmentRef, setSegmentRef] = createSignal<HTMLElement | null>(null);
|
|
418
629
|
|
|
419
|
-
const segmentAria = createDateSegment(
|
|
630
|
+
const segmentAria = createDateSegment(
|
|
631
|
+
{
|
|
632
|
+
get segment() {
|
|
633
|
+
return props.segment;
|
|
634
|
+
},
|
|
635
|
+
},
|
|
636
|
+
state,
|
|
637
|
+
segmentRef,
|
|
638
|
+
);
|
|
639
|
+
|
|
640
|
+
// Mirror upstream DateSegment: focus/focus-visible come from useFocusRing()
|
|
641
|
+
// and hover from useHover({isDisabled: field disabled || literal segment}).
|
|
642
|
+
// Literals never hover; the field being disabled suppresses hover entirely.
|
|
643
|
+
const { isFocused, isFocusVisible, focusProps } = createFocusRing();
|
|
644
|
+
const { isHovered, hoverProps } = createHover(() => ({
|
|
645
|
+
isDisabled: state.isDisabled() || props.segment.type === "literal",
|
|
646
|
+
}));
|
|
420
647
|
|
|
421
648
|
const renderValues = createMemo<DateSegmentRenderProps>(() => ({
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
649
|
+
isHovered: isHovered(),
|
|
650
|
+
isFocused: isFocused(),
|
|
651
|
+
isFocusVisible: isFocusVisible(),
|
|
652
|
+
isPlaceholder: props.segment.isPlaceholder,
|
|
653
|
+
isReadOnly: state.isReadOnly(),
|
|
654
|
+
isDisabled: state.isDisabled(),
|
|
655
|
+
isInvalid: state.isInvalid(),
|
|
425
656
|
type: props.segment.type,
|
|
426
|
-
text:
|
|
657
|
+
text: props.segment.text,
|
|
427
658
|
}));
|
|
428
659
|
|
|
429
660
|
const renderProps = useRenderProps(
|
|
430
661
|
{
|
|
431
|
-
children
|
|
662
|
+
get children() {
|
|
663
|
+
return props.children;
|
|
664
|
+
},
|
|
432
665
|
class: props.class,
|
|
433
666
|
style: props.style,
|
|
434
667
|
defaultClassName: "solidaria-DateSegment",
|
|
@@ -441,19 +674,37 @@ export function DateSegment(props: DateSegmentProps): JSX.Element {
|
|
|
441
674
|
if (typeof props.children === "function") {
|
|
442
675
|
return renderProps.renderChildren();
|
|
443
676
|
}
|
|
444
|
-
return
|
|
677
|
+
return props.segment.text;
|
|
445
678
|
};
|
|
446
679
|
|
|
680
|
+
// Mirror upstream's `mergeProps(filterDOMProps(otherProps), segmentProps,
|
|
681
|
+
// focusProps, hoverProps)`: the segment's behavior/style props (caretColor +
|
|
682
|
+
// RTL direction) chain with the focus-ring and hover handlers so neither
|
|
683
|
+
// clobbers the other.
|
|
684
|
+
const segmentElementProps = createMemo(() =>
|
|
685
|
+
mergeProps(
|
|
686
|
+
segmentAria.segmentProps,
|
|
687
|
+
focusProps as Record<string, unknown>,
|
|
688
|
+
hoverProps as Record<string, unknown>,
|
|
689
|
+
{
|
|
690
|
+
style: renderProps.style(),
|
|
691
|
+
},
|
|
692
|
+
),
|
|
693
|
+
);
|
|
694
|
+
|
|
447
695
|
return (
|
|
448
696
|
<span
|
|
449
697
|
ref={setSegmentRef}
|
|
450
|
-
{...
|
|
698
|
+
{...segmentElementProps()}
|
|
451
699
|
class={renderProps.class()}
|
|
452
|
-
|
|
453
|
-
data-
|
|
454
|
-
data-
|
|
455
|
-
data-
|
|
700
|
+
data-placeholder={props.segment.isPlaceholder || undefined}
|
|
701
|
+
data-invalid={state.isInvalid() || undefined}
|
|
702
|
+
data-readonly={state.isReadOnly() || undefined}
|
|
703
|
+
data-disabled={state.isDisabled() || undefined}
|
|
456
704
|
data-type={props.segment.type}
|
|
705
|
+
data-hovered={isHovered() || undefined}
|
|
706
|
+
data-focused={isFocused() || undefined}
|
|
707
|
+
data-focus-visible={isFocusVisible() || undefined}
|
|
457
708
|
>
|
|
458
709
|
{getChildren()}
|
|
459
710
|
</span>
|
|
@@ -482,9 +733,9 @@ export interface DateFieldDescriptionProps {
|
|
|
482
733
|
export function DateFieldDescription(props: DateFieldDescriptionProps): JSX.Element {
|
|
483
734
|
const { aria } = useDateFieldContext();
|
|
484
735
|
return (
|
|
485
|
-
<
|
|
736
|
+
<span {...aria.descriptionProps} class={props.class}>
|
|
486
737
|
{props.children}
|
|
487
|
-
</
|
|
738
|
+
</span>
|
|
488
739
|
);
|
|
489
740
|
}
|
|
490
741
|
|
|
@@ -496,9 +747,9 @@ export interface DateFieldErrorMessageProps {
|
|
|
496
747
|
export function DateFieldErrorMessage(props: DateFieldErrorMessageProps): JSX.Element {
|
|
497
748
|
const { aria } = useDateFieldContext();
|
|
498
749
|
return (
|
|
499
|
-
<
|
|
750
|
+
<span {...aria.errorMessageProps} class={props.class}>
|
|
500
751
|
{props.children}
|
|
501
|
-
</
|
|
752
|
+
</span>
|
|
502
753
|
);
|
|
503
754
|
}
|
|
504
755
|
|