@proyecto-viviana/solidaria-components 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ActionBar.js +184 -0
- package/dist/ActionBar.js.map +1 -0
- package/dist/ActionBar.jsx +128 -0
- package/dist/ActionBar.jsx.map +1 -0
- package/dist/ActionGroup.js +179 -0
- package/dist/ActionGroup.js.map +1 -0
- package/dist/ActionGroup.jsx +129 -0
- package/dist/ActionGroup.jsx.map +1 -0
- package/dist/Alert.js +111 -0
- package/dist/Alert.js.map +1 -0
- package/dist/Alert.jsx +82 -0
- package/dist/Alert.jsx.map +1 -0
- package/dist/Autocomplete.js +130 -0
- package/dist/Autocomplete.js.map +1 -0
- package/dist/Autocomplete.jsx +116 -0
- package/dist/Autocomplete.jsx.map +1 -0
- package/dist/Breadcrumbs.d.ts.map +1 -1
- package/dist/Breadcrumbs.js +334 -0
- package/dist/Breadcrumbs.js.map +1 -0
- package/dist/Breadcrumbs.jsx +266 -0
- package/dist/Breadcrumbs.jsx.map +1 -0
- package/dist/Button.d.ts.map +1 -1
- package/dist/Button.js +348 -0
- package/dist/Button.js.map +1 -0
- package/dist/Button.jsx +314 -0
- package/dist/Button.jsx.map +1 -0
- package/dist/Calendar.d.ts +4 -4
- package/dist/Calendar.d.ts.map +1 -1
- package/dist/Calendar.js +538 -0
- package/dist/Calendar.js.map +1 -0
- package/dist/Calendar.jsx +333 -0
- package/dist/Calendar.jsx.map +1 -0
- package/dist/CalendarPicker.d.ts +33 -0
- package/dist/CalendarPicker.d.ts.map +1 -0
- package/dist/CalendarPicker.js +44 -0
- package/dist/CalendarPicker.js.map +1 -0
- package/dist/CalendarPicker.jsx +44 -0
- package/dist/CalendarPicker.jsx.map +1 -0
- package/dist/Checkbox.d.ts +83 -4
- package/dist/Checkbox.d.ts.map +1 -1
- package/dist/Checkbox.js +923 -0
- package/dist/Checkbox.js.map +1 -0
- package/dist/Checkbox.jsx +707 -0
- package/dist/Checkbox.jsx.map +1 -0
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +202 -0
- package/dist/Collection.js.map +1 -0
- package/dist/Collection.jsx +152 -0
- package/dist/Collection.jsx.map +1 -0
- package/dist/Color.d.ts.map +1 -1
- package/dist/Color.js +1720 -0
- package/dist/Color.js.map +1 -0
- package/dist/Color.jsx +1344 -0
- package/dist/Color.jsx.map +1 -0
- package/dist/ColorEditor.js +208 -0
- package/dist/ColorEditor.js.map +1 -0
- package/dist/ColorEditor.jsx +120 -0
- package/dist/ColorEditor.jsx.map +1 -0
- package/dist/ComboBox.d.ts +4 -4
- package/dist/ComboBox.d.ts.map +1 -1
- package/dist/ComboBox.js +992 -0
- package/dist/ComboBox.js.map +1 -0
- package/dist/ComboBox.jsx +714 -0
- package/dist/ComboBox.jsx.map +1 -0
- package/dist/ContextualHelpTrigger.js +146 -0
- package/dist/ContextualHelpTrigger.js.map +1 -0
- package/dist/ContextualHelpTrigger.jsx +109 -0
- package/dist/ContextualHelpTrigger.jsx.map +1 -0
- package/dist/DateField.d.ts +3 -3
- package/dist/DateField.d.ts.map +1 -1
- package/dist/DateField.js +4 -0
- package/dist/DateField.jsx +4 -0
- package/dist/DateField2.js +499 -0
- package/dist/DateField2.js.map +1 -0
- package/dist/DateField2.jsx +317 -0
- package/dist/DateField2.jsx.map +1 -0
- package/dist/DatePicker.d.ts +4 -4
- package/dist/DatePicker.d.ts.map +1 -1
- package/dist/DatePicker.js +991 -0
- package/dist/DatePicker.js.map +1 -0
- package/dist/DatePicker.jsx +682 -0
- package/dist/DatePicker.jsx.map +1 -0
- package/dist/Dialog.d.ts.map +1 -1
- package/dist/Dialog.js +337 -0
- package/dist/Dialog.js.map +1 -0
- package/dist/Dialog.jsx +192 -0
- package/dist/Dialog.jsx.map +1 -0
- package/dist/Disclosure.d.ts.map +1 -1
- package/dist/Disclosure.js +328 -0
- package/dist/Disclosure.js.map +1 -0
- package/dist/Disclosure.jsx +230 -0
- package/dist/Disclosure.jsx.map +1 -0
- package/dist/DragAndDrop.d.ts.map +1 -1
- package/dist/DragAndDrop.js +176 -0
- package/dist/DragAndDrop.js.map +1 -0
- package/dist/DragAndDrop.jsx +160 -0
- package/dist/DragAndDrop.jsx.map +1 -0
- package/dist/DropZone.d.ts.map +1 -1
- package/dist/DropZone.js +189 -0
- package/dist/DropZone.js.map +1 -0
- package/dist/DropZone.jsx +144 -0
- package/dist/DropZone.jsx.map +1 -0
- package/dist/FieldError.js +66 -0
- package/dist/FieldError.js.map +1 -0
- package/dist/FieldError.jsx +47 -0
- package/dist/FieldError.jsx.map +1 -0
- package/dist/FileTrigger.js +79 -0
- package/dist/FileTrigger.js.map +1 -0
- package/dist/FileTrigger.jsx +49 -0
- package/dist/FileTrigger.jsx.map +1 -0
- package/dist/Focusable.js +70 -0
- package/dist/Focusable.js.map +1 -0
- package/dist/Focusable.jsx +69 -0
- package/dist/Focusable.jsx.map +1 -0
- package/dist/Form.js +99 -0
- package/dist/Form.js.map +1 -0
- package/dist/Form.jsx +73 -0
- package/dist/Form.jsx.map +1 -0
- package/dist/GridList.d.ts +34 -2
- package/dist/GridList.d.ts.map +1 -1
- package/dist/GridList.js +723 -0
- package/dist/GridList.js.map +1 -0
- package/dist/GridList.jsx +552 -0
- package/dist/GridList.jsx.map +1 -0
- package/dist/HiddenTimeInput.js +104 -0
- package/dist/HiddenTimeInput.js.map +1 -0
- package/dist/HiddenTimeInput.jsx +69 -0
- package/dist/HiddenTimeInput.jsx.map +1 -0
- package/dist/Icon.d.ts.map +1 -1
- package/dist/Icon.js +127 -0
- package/dist/Icon.js.map +1 -0
- package/dist/Icon.jsx +72 -0
- package/dist/Icon.jsx.map +1 -0
- package/dist/Keyboard.js +30 -0
- package/dist/Keyboard.js.map +1 -0
- package/dist/Keyboard.jsx +24 -0
- package/dist/Keyboard.jsx.map +1 -0
- package/dist/Landmark.js +134 -0
- package/dist/Landmark.js.map +1 -0
- package/dist/Landmark.jsx +118 -0
- package/dist/Landmark.jsx.map +1 -0
- package/dist/Link.d.ts.map +1 -1
- package/dist/Link.js +219 -0
- package/dist/Link.js.map +1 -0
- package/dist/Link.jsx +189 -0
- package/dist/Link.jsx.map +1 -0
- package/dist/ListBox.d.ts.map +1 -1
- package/dist/ListBox.js +670 -0
- package/dist/ListBox.js.map +1 -0
- package/dist/ListBox.jsx +508 -0
- package/dist/ListBox.jsx.map +1 -0
- package/dist/Menu.d.ts +27 -9
- package/dist/Menu.d.ts.map +1 -1
- package/dist/Menu.js +1254 -0
- package/dist/Menu.js.map +1 -0
- package/dist/Menu.jsx +1042 -0
- package/dist/Menu.jsx.map +1 -0
- package/dist/Meter.d.ts.map +1 -1
- package/dist/Meter.js +123 -0
- package/dist/Meter.js.map +1 -0
- package/dist/Meter.jsx +107 -0
- package/dist/Meter.jsx.map +1 -0
- package/dist/Modal.d.ts.map +1 -1
- package/dist/Modal.js +380 -0
- package/dist/Modal.js.map +1 -0
- package/dist/Modal.jsx +314 -0
- package/dist/Modal.jsx.map +1 -0
- package/dist/NumberField.d.ts +3 -3
- package/dist/NumberField.d.ts.map +1 -1
- package/dist/NumberField.js +573 -0
- package/dist/NumberField.js.map +1 -0
- package/dist/NumberField.jsx +443 -0
- package/dist/NumberField.jsx.map +1 -0
- package/dist/Popover.d.ts +10 -2
- package/dist/Popover.d.ts.map +1 -1
- package/dist/Popover.js +464 -0
- package/dist/Popover.js.map +1 -0
- package/dist/Popover.jsx +333 -0
- package/dist/Popover.jsx.map +1 -0
- package/dist/Pressable.js +69 -0
- package/dist/Pressable.js.map +1 -0
- package/dist/Pressable.jsx +68 -0
- package/dist/Pressable.jsx.map +1 -0
- package/dist/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar.js +130 -0
- package/dist/ProgressBar.js.map +1 -0
- package/dist/ProgressBar.jsx +114 -0
- package/dist/ProgressBar.jsx.map +1 -0
- package/dist/RadioGroup.d.ts +82 -4
- package/dist/RadioGroup.d.ts.map +1 -1
- package/dist/RadioGroup.js +931 -0
- package/dist/RadioGroup.js.map +1 -0
- package/dist/RadioGroup.jsx +681 -0
- package/dist/RadioGroup.jsx.map +1 -0
- package/dist/RangeCalendar.d.ts.map +1 -1
- package/dist/RangeCalendar.js +410 -0
- package/dist/RangeCalendar.js.map +1 -0
- package/dist/RangeCalendar.jsx +253 -0
- package/dist/RangeCalendar.jsx.map +1 -0
- package/dist/RouterProvider.js +118 -0
- package/dist/RouterProvider.js.map +1 -0
- package/dist/RouterProvider.jsx +112 -0
- package/dist/RouterProvider.jsx.map +1 -0
- package/dist/SearchField.d.ts +2 -2
- package/dist/SearchField.d.ts.map +1 -1
- package/dist/SearchField.js +643 -0
- package/dist/SearchField.js.map +1 -0
- package/dist/SearchField.jsx +526 -0
- package/dist/SearchField.jsx.map +1 -0
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js +1031 -0
- package/dist/Select.js.map +1 -0
- package/dist/Select.jsx +744 -0
- package/dist/Select.jsx.map +1 -0
- package/dist/SelectionIndicator.d.ts.map +1 -1
- package/dist/SelectionIndicator.js +86 -0
- package/dist/SelectionIndicator.js.map +1 -0
- package/dist/SelectionIndicator.jsx +50 -0
- package/dist/SelectionIndicator.jsx.map +1 -0
- package/dist/Separator.js +97 -0
- package/dist/Separator.js.map +1 -0
- package/dist/Separator.jsx +85 -0
- package/dist/Separator.jsx.map +1 -0
- package/dist/SharedElementTransition.d.ts.map +1 -1
- package/dist/SharedElementTransition.js +165 -0
- package/dist/SharedElementTransition.js.map +1 -0
- package/dist/SharedElementTransition.jsx +138 -0
- package/dist/SharedElementTransition.jsx.map +1 -0
- package/dist/Slider.d.ts +33 -1
- package/dist/Slider.d.ts.map +1 -1
- package/dist/Slider.js +515 -0
- package/dist/Slider.js.map +1 -0
- package/dist/Slider.jsx +403 -0
- package/dist/Slider.jsx.map +1 -0
- package/dist/StepList.js +198 -0
- package/dist/StepList.js.map +1 -0
- package/dist/StepList.jsx +141 -0
- package/dist/StepList.jsx.map +1 -0
- package/dist/Switch.d.ts +65 -2
- package/dist/Switch.d.ts.map +1 -1
- package/dist/Switch.js +534 -0
- package/dist/Switch.js.map +1 -0
- package/dist/Switch.jsx +393 -0
- package/dist/Switch.jsx.map +1 -0
- package/dist/Table.d.ts +48 -0
- package/dist/Table.d.ts.map +1 -1
- package/dist/Table.js +1759 -0
- package/dist/Table.js.map +1 -0
- package/dist/Table.jsx +1348 -0
- package/dist/Table.jsx.map +1 -0
- package/dist/Tabs.d.ts +0 -4
- package/dist/Tabs.d.ts.map +1 -1
- package/dist/Tabs.js +595 -0
- package/dist/Tabs.js.map +1 -0
- package/dist/Tabs.jsx +367 -0
- package/dist/Tabs.jsx.map +1 -0
- package/dist/TagGroup.d.ts.map +1 -1
- package/dist/TagGroup.js +378 -0
- package/dist/TagGroup.js.map +1 -0
- package/dist/TagGroup.jsx +270 -0
- package/dist/TagGroup.jsx.map +1 -0
- package/dist/Text.d.ts +18 -6
- package/dist/Text.d.ts.map +1 -1
- package/dist/Text.js +42 -0
- package/dist/Text.js.map +1 -0
- package/dist/Text.jsx +35 -0
- package/dist/Text.jsx.map +1 -0
- package/dist/TextField.d.ts +6 -6
- package/dist/TextField.d.ts.map +1 -1
- package/dist/TextField.js +436 -0
- package/dist/TextField.js.map +1 -0
- package/dist/TextField.jsx +403 -0
- package/dist/TextField.jsx.map +1 -0
- package/dist/TimeField.d.ts +3 -3
- package/dist/TimeField.d.ts.map +1 -1
- package/dist/TimeField.js +372 -0
- package/dist/TimeField.js.map +1 -0
- package/dist/TimeField.jsx +224 -0
- package/dist/TimeField.jsx.map +1 -0
- package/dist/Toast.d.ts +14 -0
- package/dist/Toast.d.ts.map +1 -1
- package/dist/Toast.js +551 -0
- package/dist/Toast.js.map +1 -0
- package/dist/Toast.jsx +361 -0
- package/dist/Toast.jsx.map +1 -0
- package/dist/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButton.js +123 -0
- package/dist/ToggleButton.js.map +1 -0
- package/dist/ToggleButton.jsx +88 -0
- package/dist/ToggleButton.jsx.map +1 -0
- package/dist/ToggleButtonGroup.d.ts.map +1 -1
- package/dist/ToggleButtonGroup.js +114 -0
- package/dist/ToggleButtonGroup.js.map +1 -0
- package/dist/ToggleButtonGroup.jsx +85 -0
- package/dist/ToggleButtonGroup.jsx.map +1 -0
- package/dist/Toolbar.js +112 -0
- package/dist/Toolbar.js.map +1 -0
- package/dist/Toolbar.jsx +92 -0
- package/dist/Toolbar.jsx.map +1 -0
- package/dist/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip.js +539 -0
- package/dist/Tooltip.js.map +1 -0
- package/dist/Tooltip.jsx +465 -0
- package/dist/Tooltip.jsx.map +1 -0
- package/dist/Tree.d.ts +14 -2
- package/dist/Tree.d.ts.map +1 -1
- package/dist/Tree.js +1424 -0
- package/dist/Tree.js.map +1 -0
- package/dist/Tree.jsx +1172 -0
- package/dist/Tree.jsx.map +1 -0
- package/dist/Virtualizer.d.ts +16 -2
- package/dist/Virtualizer.d.ts.map +1 -1
- package/dist/Virtualizer.js +2 -0
- package/dist/Virtualizer.jsx +2 -0
- package/dist/Virtualizer2.js +751 -0
- package/dist/Virtualizer2.js.map +1 -0
- package/dist/Virtualizer2.jsx +730 -0
- package/dist/Virtualizer2.jsx.map +1 -0
- package/dist/VirtualizerLayouts.d.ts +18 -0
- package/dist/VirtualizerLayouts.d.ts.map +1 -1
- package/dist/VisuallyHidden.js +42 -0
- package/dist/VisuallyHidden.js.map +1 -0
- package/dist/VisuallyHidden.jsx +35 -0
- package/dist/VisuallyHidden.jsx.map +1 -0
- package/dist/contexts.js +33 -0
- package/dist/contexts.js.map +1 -0
- package/dist/contexts.jsx +33 -0
- package/dist/contexts.jsx.map +1 -0
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +70 -23932
- package/dist/index.jsx +70 -18337
- package/dist/useDragAndDrop.js +2 -0
- package/dist/useDragAndDrop.jsx +2 -0
- package/dist/useDragAndDrop2.js +395 -0
- package/dist/useDragAndDrop2.js.map +1 -0
- package/dist/useDragAndDrop2.jsx +395 -0
- package/dist/useDragAndDrop2.jsx.map +1 -0
- package/dist/utils.d.ts +83 -11
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +285 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.jsx +277 -0
- package/dist/utils.jsx.map +1 -0
- package/dist/virtualizer/Layout.js +144 -0
- package/dist/virtualizer/Layout.js.map +1 -0
- package/dist/virtualizer/Layout.jsx +144 -0
- package/dist/virtualizer/Layout.jsx.map +1 -0
- package/package.json +401 -4
- package/src/Breadcrumbs.tsx +3 -1
- package/src/Button.tsx +22 -2
- package/src/Calendar.tsx +27 -10
- package/src/CalendarPicker.tsx +73 -0
- package/src/Checkbox.tsx +539 -3
- package/src/Collection.tsx +9 -3
- package/src/Color.tsx +42 -14
- package/src/ComboBox.tsx +50 -6
- package/src/DateField.tsx +20 -2
- package/src/DatePicker.tsx +57 -5
- package/src/Dialog.tsx +13 -5
- package/src/Disclosure.tsx +3 -1
- package/src/DragAndDrop.tsx +3 -1
- package/src/DropZone.tsx +3 -1
- package/src/GridList.tsx +125 -24
- package/src/Icon.tsx +3 -1
- package/src/Link.tsx +3 -1
- package/src/ListBox.tsx +31 -4
- package/src/Menu.tsx +252 -128
- package/src/Meter.tsx +3 -1
- package/src/Modal.tsx +100 -52
- package/src/NumberField.tsx +51 -8
- package/src/Popover.tsx +40 -10
- package/src/ProgressBar.tsx +3 -1
- package/src/RadioGroup.tsx +468 -4
- package/src/RangeCalendar.tsx +3 -1
- package/src/SearchField.tsx +27 -3
- package/src/Select.tsx +22 -7
- package/src/SelectionIndicator.tsx +3 -1
- package/src/SharedElementTransition.tsx +3 -1
- package/src/Slider.tsx +159 -13
- package/src/Switch.tsx +395 -2
- package/src/Table.tsx +409 -95
- package/src/Tabs.tsx +16 -45
- package/src/TagGroup.tsx +3 -1
- package/src/Text.tsx +31 -10
- package/src/TextField.tsx +43 -5
- package/src/TimeField.tsx +20 -2
- package/src/Toast.tsx +79 -14
- package/src/ToggleButton.tsx +3 -1
- package/src/ToggleButtonGroup.tsx +3 -1
- package/src/Tooltip.tsx +3 -1
- package/src/Tree.tsx +77 -9
- package/src/Virtualizer.tsx +180 -31
- package/src/VirtualizerLayouts.ts +45 -10
- package/src/index.ts +50 -0
- package/src/utils.tsx +243 -27
- package/dist/index.js.map +0 -1
- package/dist/index.jsx.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePicker.jsx","names":[],"sources":["../src/DatePicker.tsx"],"sourcesContent":["/**\n * DatePicker component for solidaria-components\n *\n * Pre-wired headless date picker component that combines a date field with a calendar popup.\n * Port of react-aria-components/src/DatePicker.tsx\n */\n\nimport {\n type JSX,\n type Context,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n onCleanup,\n splitProps,\n useContext,\n Show,\n} from \"solid-js\";\nimport { Portal } from \"solid-js/web\";\nimport {\n createDatePicker,\n createDateRangePicker,\n createPopover,\n FocusScope,\n useUNSAFE_PortalContext,\n type AriaDatePickerProps,\n type AriaDateRangePickerProps,\n type DatePickerState as AriaDatePickerState,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n createDateFieldState,\n createCalendarState,\n createRangeCalendarState,\n createDatePickerState,\n access,\n type DateFieldState,\n type DatePickerState,\n type CalendarStateProps,\n type CalendarState,\n type RangeCalendarState,\n type DateFieldStateProps,\n type DatePickerStateOptions,\n type CalendarDate,\n type DateValue,\n type RangeCalendarStateProps,\n type RangeValue,\n} from \"@proyecto-viviana/solid-stately\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n dataAttr,\n useIsHydrated,\n Provider,\n} from \"./utils\";\nimport { TextContext } from \"./Text\";\nimport { DateFieldContext } from \"./DateField\";\nimport { CalendarContext } from \"./Calendar\";\nimport { RangeCalendarContext } from \"./RangeCalendar\";\nimport { HiddenDateInput } from \"./HiddenDateInput\";\nimport { FormContext, type FormProps } from \"./Form\";\nimport {\n DateRangePickerContext,\n useDateRangePickerContext,\n type DateRangePickerContextValue,\n type DateRangePickerFieldContextValue,\n} from \"./DateRangePickerContext\";\n\nexport interface DatePickerRenderProps {\n /** Whether the picker is disabled. */\n isDisabled: boolean;\n /** Whether the picker is read-only. */\n isReadOnly: boolean;\n /** Whether the picker is required. */\n isRequired: boolean;\n /** Whether the picker is invalid. */\n isInvalid: boolean;\n /** Whether the calendar is open. */\n isOpen: boolean;\n}\n\nexport interface DateRangePickerRenderProps extends Omit<DatePickerRenderProps, \"isInvalid\"> {\n isInvalid: boolean;\n}\n\nexport interface DatePickerContextValue {\n fieldState: DateFieldState<DateValue>;\n datePickerState: DatePickerState<DateValue>;\n calendarState: CalendarState<DateValue>;\n overlayState: {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n };\n triggerRef: () => HTMLElement | null;\n setTriggerRef: (element: HTMLElement | null) => void;\n pickerAria: ReturnType<typeof createDatePicker>;\n}\n\nexport type DatePickerProps<T extends DateValue = DateValue> = Omit<\n AriaDatePickerProps,\n \"id\" | \"isDisabled\" | \"isReadOnly\" | \"isRequired\" | \"minValue\" | \"maxValue\"\n> &\n Omit<DateFieldStateProps<T>, \"locale\"> &\n SlotProps & {\n /** The children of the component. */\n children?: JSX.Element;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<DatePickerRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<DatePickerRenderProps>;\n /** The locale to use for formatting. */\n locale?: string;\n /** Whether the calendar should close when a date is selected. */\n shouldCloseOnSelect?: boolean;\n /** Whether the overlay is open by default (uncontrolled). */\n defaultOpen?: boolean;\n /** Whether the overlay is open (controlled). */\n isOpen?: boolean;\n /** Callback when the overlay open state changes. */\n onOpenChange?: (isOpen: boolean) => void;\n /** The name for the hidden date input used in HTML form submission. */\n name?: string;\n /** The associated form id for the hidden date input. */\n form?: string;\n /** The number of months to display in the calendar popover. */\n visibleMonths?: number;\n /** Controls whether calendar paging advances by one month or by the visible month range. */\n pageBehavior?: CalendarStateProps<T>[\"pageBehavior\"];\n /** Determines how visible months align around the initial focused date. */\n selectionAlignment?: CalendarStateProps<T>[\"selectionAlignment\"];\n /** A function that determines whether a date is disabled. */\n isDateDisabled?: (date: DateValue) => boolean;\n };\n\nexport interface DateRangePickerProps<T extends DateValue = DateValue>\n extends\n Omit<AriaDateRangePickerProps, \"id\" | \"isDisabled\" | \"isReadOnly\">,\n Omit<RangeCalendarStateProps<T>, \"locale\">,\n SlotProps {\n children?: JSX.Element;\n class?: ClassNameOrFunction<DateRangePickerRenderProps>;\n style?: StyleOrFunction<DateRangePickerRenderProps>;\n locale?: string;\n shouldCloseOnSelect?: boolean;\n /** Whether the overlay is open by default (uncontrolled). */\n defaultOpen?: boolean;\n /** Whether the overlay is open (controlled). */\n isOpen?: boolean;\n /** Callback when the overlay open state changes. */\n onOpenChange?: (isOpen: boolean) => void;\n /** The granularity of the date/time fields. */\n granularity?: \"day\" | \"hour\" | \"minute\" | \"second\";\n /** Whether to show the hour in 12 or 24 hour format. */\n hourCycle?: 12 | 24;\n /** Whether to hide the time zone in date/time fields. */\n hideTimeZone?: boolean;\n /** The placeholder date used to determine segment structure. */\n placeholderValue?: DateValue;\n /** The name for the start date input used in HTML form submission. */\n startName?: string;\n /** The name for the end date input used in HTML form submission. */\n endName?: string;\n /** The associated form id for the hidden start/end date inputs. */\n form?: string;\n /** Controls whether native or ARIA validation should be used. */\n validationBehavior?: \"native\" | \"aria\";\n}\n\nexport interface DatePickerButtonRenderProps {\n /** Whether the button is disabled. */\n isDisabled: boolean;\n /** Whether the calendar is open. */\n isOpen: boolean;\n}\n\nexport interface DatePickerButtonProps extends SlotProps {\n /** The children of the component. */\n children?: RenderChildren<DatePickerButtonRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<DatePickerButtonRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<DatePickerButtonRenderProps>;\n /** Whether the button is disabled. */\n isDisabled?: boolean;\n}\n\nexport interface DateRangePickerButtonProps extends DatePickerButtonProps {}\n\nexport const DatePickerContext = createContext<DatePickerContextValue | null>(null);\nexport const DatePickerStateContext = createContext<DateFieldState<DateValue> | null>(null);\nexport const DateRangePickerStateContext = createContext<RangeCalendarState<DateValue> | null>(\n null,\n);\nexport { DateRangePickerContext, useDateRangePickerContext } from \"./DateRangePickerContext\";\nexport type {\n DateRangePickerContextValue,\n DateRangePickerFieldContextValue,\n} from \"./DateRangePickerContext\";\n\nfunction withFormValidationBehavior<P extends object>(props: P, formContext: FormProps | null): P {\n if (!formContext?.validationBehavior) {\n return props;\n }\n\n return new Proxy(props, {\n get(target, property, receiver) {\n const localValue = Reflect.get(target, property, receiver);\n if (property === \"validationBehavior\" && localValue === undefined) {\n return formContext.validationBehavior;\n }\n\n return localValue;\n },\n has(target, property) {\n return (\n Reflect.has(target, property) ||\n (property === \"validationBehavior\" && formContext.validationBehavior !== undefined)\n );\n },\n ownKeys(target) {\n const keys = new Set(Reflect.ownKeys(target));\n if (formContext.validationBehavior !== undefined) {\n keys.add(\"validationBehavior\");\n }\n\n return Array.from(keys);\n },\n getOwnPropertyDescriptor(target, property) {\n const descriptor = Reflect.getOwnPropertyDescriptor(target, property);\n if (descriptor) {\n return descriptor;\n }\n\n if (property === \"validationBehavior\" && formContext.validationBehavior !== undefined) {\n return {\n enumerable: true,\n configurable: true,\n get: () => formContext.validationBehavior,\n };\n }\n\n return undefined;\n },\n });\n}\n\nexport function useDatePickerContext(): DatePickerContextValue {\n const context = useContext(DatePickerContext);\n if (!context) {\n throw new Error(\"DatePicker components must be used within a DatePicker\");\n }\n return context;\n}\n\n/**\n * A date picker combines a DateField and a Calendar popover.\n *\n * @example\n * ```tsx\n * <DatePicker label=\"Event date\">\n * <Label>Event date</Label>\n * <Group>\n * <DateInput>\n * {(segment) => <DateSegment segment={segment} />}\n * </DateInput>\n * <DatePickerButton>📅</DatePickerButton>\n * </Group>\n * <Popover>\n * <Dialog>\n * <Calendar>\n * <CalendarGrid>\n * {(date) => <CalendarCell date={date} />}\n * </CalendarGrid>\n * </Calendar>\n * </Dialog>\n * </Popover>\n * </DatePicker>\n * ```\n */\nexport function DatePicker<T extends DateValue = CalendarDate>(\n props: DatePickerProps<T>,\n): JSX.Element {\n // Use hydration-safe pattern for client-only rendering\n const isHydrated = useIsHydrated();\n const formContext = useContext(FormContext);\n\n return (\n <Show\n when={isHydrated()}\n fallback={\n <div class=\"solidaria-DatePicker solidaria-DatePicker--placeholder\" aria-hidden=\"true\" />\n }\n >\n <DatePickerInner {...props} __formContext={formContext} />\n </Show>\n );\n}\n\ntype DatePickerInnerProps<T extends DateValue = DateValue> = DatePickerProps<T> & {\n __formContext?: FormProps | null;\n};\n\n/**\n * Internal DatePicker component that renders after client mount.\n */\nfunction DatePickerInner<T extends DateValue = CalendarDate>(\n props: DatePickerInnerProps<T>,\n): JSX.Element {\n const formContext = props.__formContext ?? useContext(FormContext);\n const mergedProps = withFormValidationBehavior(props, formContext);\n const [local, stateProps, rest] = splitProps(\n mergedProps,\n [\"children\", \"class\", \"style\", \"slot\", \"shouldCloseOnSelect\", \"__formContext\"],\n [\n \"value\",\n \"defaultValue\",\n \"onChange\",\n \"isOpen\",\n \"defaultOpen\",\n \"onOpenChange\",\n \"minValue\",\n \"maxValue\",\n \"isInvalid\",\n \"isDisabled\",\n \"isReadOnly\",\n \"isRequired\",\n \"locale\",\n \"granularity\",\n \"hourCycle\",\n \"hideTimeZone\",\n \"placeholderValue\",\n \"shouldForceLeadingZeros\",\n \"createCalendar\",\n \"validationState\",\n \"validationBehavior\",\n \"validate\",\n \"description\",\n \"errorMessage\",\n \"isDateUnavailable\",\n \"firstDayOfWeek\",\n \"visibleMonths\",\n \"pageBehavior\",\n \"selectionAlignment\",\n \"isDateDisabled\",\n ],\n );\n\n const [triggerRef, setTriggerRef] = createSignal<HTMLElement | null>(null);\n const [fieldRef, setFieldRef] = createSignal<HTMLDivElement | null>(null);\n\n // Unified state using createDatePickerState as single source of truth.\n // Use getters here so controlled props keep tracking after splitProps.\n const datePickerStateProps = {\n get value() {\n return stateProps.value;\n },\n get defaultValue() {\n return stateProps.defaultValue;\n },\n get onChange() {\n return stateProps.onChange;\n },\n get minValue() {\n return stateProps.minValue;\n },\n get maxValue() {\n return stateProps.maxValue;\n },\n get isDisabled() {\n return stateProps.isDisabled;\n },\n get isReadOnly() {\n return stateProps.isReadOnly;\n },\n get isRequired() {\n return stateProps.isRequired;\n },\n get granularity() {\n return stateProps.granularity;\n },\n get hourCycle() {\n return stateProps.hourCycle;\n },\n get hideTimeZone() {\n return stateProps.hideTimeZone;\n },\n get placeholderValue() {\n return stateProps.placeholderValue;\n },\n get shouldCloseOnSelect() {\n return local.shouldCloseOnSelect;\n },\n get defaultOpen() {\n return stateProps.defaultOpen;\n },\n get isOpen() {\n return stateProps.isOpen;\n },\n get onOpenChange() {\n return stateProps.onOpenChange;\n },\n get isDateUnavailable() {\n return stateProps.isDateUnavailable;\n },\n get validationState() {\n return stateProps.validationState;\n },\n } satisfies DatePickerStateOptions<T>;\n const datePickerState = createDatePickerState<T>(datePickerStateProps);\n\n const overlayState = {\n get isOpen() {\n return datePickerState.isOpen();\n },\n open: datePickerState.open,\n close: datePickerState.close,\n toggle: () => datePickerState.setOpen(!datePickerState.isOpen()),\n };\n\n // Create field state synced through datePickerState\n const fieldState = createDateFieldState<T>({\n ...stateProps,\n value: () => datePickerState.value(),\n onChange: (value) => {\n datePickerState.setValue(value);\n },\n });\n\n // Create calendar state synced through datePickerState\n const calendarState = createCalendarState<T>({\n value: () => datePickerState.value(),\n onChange: (value) => {\n if (!value) {\n return;\n }\n datePickerState.setDateValue(value);\n },\n minValue: stateProps.minValue,\n maxValue: stateProps.maxValue,\n isDisabled: stateProps.isDisabled,\n isReadOnly: stateProps.isReadOnly,\n locale: stateProps.locale,\n createCalendar: stateProps.createCalendar as CalendarStateProps<T>[\"createCalendar\"],\n isDateUnavailable: stateProps.isDateUnavailable,\n firstDayOfWeek: stateProps.firstDayOfWeek as 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined,\n visibleMonths: stateProps.visibleMonths,\n pageBehavior: stateProps.pageBehavior,\n selectionAlignment: stateProps.selectionAlignment,\n isDateDisabled: stateProps.isDateDisabled,\n });\n\n // Create date picker ARIA props\n const pickerAria = createDatePicker(\n () => ({\n ...(rest as Record<string, unknown>),\n description: stateProps.description,\n errorMessage: stateProps.errorMessage,\n }),\n fieldState as unknown as DateFieldState<DateValue>,\n overlayState as AriaDatePickerState,\n calendarState as unknown as CalendarState<DateValue>,\n );\n\n const contextValue: DatePickerContextValue = {\n fieldState: fieldState as unknown as DateFieldState<DateValue>,\n datePickerState: datePickerState as unknown as DatePickerState<DateValue>,\n calendarState: calendarState as unknown as CalendarState<DateValue>,\n overlayState,\n triggerRef,\n setTriggerRef: (element) => {\n if (!element) return;\n const current = triggerRef();\n if (!current || !current.isConnected) {\n setTriggerRef(() => element);\n }\n },\n pickerAria,\n };\n\n const isInvalid = createMemo(\n () =>\n fieldState.isInvalid() ||\n datePickerState.builtinValidation().isInvalid ||\n Boolean(stateProps.isInvalid),\n );\n\n const renderValues = createMemo<DatePickerRenderProps>(() => ({\n isDisabled: fieldState.isDisabled(),\n isReadOnly: fieldState.isReadOnly(),\n isRequired: fieldState.isRequired(),\n isInvalid: isInvalid(),\n isOpen: overlayState.isOpen,\n }));\n\n const renderProps = useRenderProps(\n {\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-DatePicker\",\n },\n renderValues,\n );\n\n const validationBehavior = () =>\n (stateProps as { validationBehavior?: \"aria\" | \"native\" }).validationBehavior ??\n formContext?.validationBehavior ??\n \"native\";\n\n return (\n <DatePickerStateContext.Provider value={fieldState as unknown as DateFieldState<DateValue>}>\n <DatePickerContext.Provider value={contextValue}>\n {/* Also provide DateFieldContext so DateInput/DateSegment work inside DatePicker */}\n <DateFieldContext.Provider\n value={{\n state: fieldState as unknown as DateFieldState<DateValue>,\n aria: {\n labelProps: pickerAria.labelProps,\n inputProps: pickerAria.fieldProps,\n descriptionProps: pickerAria.descriptionProps,\n errorMessageProps: pickerAria.errorMessageProps,\n },\n }}\n >\n <CalendarContext.Provider value={calendarState as unknown as CalendarState<DateValue>}>\n <div\n ref={setFieldRef}\n {...pickerAria.groupProps}\n class={renderProps.class()}\n style={renderProps.style()}\n data-disabled={dataAttr(fieldState.isDisabled())}\n data-readonly={dataAttr(fieldState.isReadOnly())}\n data-required={dataAttr(fieldState.isRequired())}\n data-invalid={dataAttr(isInvalid())}\n data-open={dataAttr(overlayState.isOpen)}\n >\n <Provider\n values={\n [\n [\n TextContext,\n {\n slots: {\n get description() {\n return pickerAria.descriptionProps;\n },\n get errorMessage() {\n return pickerAria.errorMessageProps;\n },\n },\n },\n ],\n ] as Array<[Context<unknown>, unknown]>\n }\n >\n {props.children}\n </Provider>\n </div>\n <Show when={(rest as Record<string, unknown>).name}>\n <HiddenDateInput\n name={(rest as Record<string, unknown>).name as string | undefined}\n form={(rest as Record<string, unknown>).form as string | undefined}\n value={() => datePickerState.value()}\n autoComplete={(rest as Record<string, unknown>).autoComplete as string | undefined}\n isDisabled={fieldState.isDisabled()}\n isRequired={fieldState.isRequired()}\n validationBehavior={validationBehavior()}\n validationState={fieldState}\n focus={() => {\n fieldRef()?.querySelector<HTMLElement>('[role=\"spinbutton\"]')?.focus();\n }}\n minValue={() => access(stateProps.minValue) as DateValue | undefined}\n maxValue={() => access(stateProps.maxValue) as DateValue | undefined}\n granularity={datePickerState.granularity}\n />\n </Show>\n </CalendarContext.Provider>\n </DateFieldContext.Provider>\n </DatePickerContext.Provider>\n </DatePickerStateContext.Provider>\n );\n}\n\nexport function DateRangePicker<T extends DateValue = CalendarDate>(\n props: DateRangePickerProps<T>,\n): JSX.Element {\n const isHydrated = useIsHydrated();\n return (\n <Show\n when={isHydrated()}\n fallback={\n <div\n class=\"solidaria-DateRangePicker solidaria-DateRangePicker--placeholder\"\n aria-hidden=\"true\"\n />\n }\n >\n <DateRangePickerInner {...props} />\n </Show>\n );\n}\n\nfunction DateRangePickerInner<T extends DateValue = CalendarDate>(\n props: DateRangePickerProps<T>,\n): JSX.Element {\n const [local, overlayProps, stateProps, rest] = splitProps(\n props,\n [\"children\", \"class\", \"style\", \"slot\", \"shouldCloseOnSelect\"],\n [\"defaultOpen\", \"isOpen\", \"onOpenChange\"],\n [\n \"value\",\n \"defaultValue\",\n \"onChange\",\n \"minValue\",\n \"maxValue\",\n \"isDisabled\",\n \"isReadOnly\",\n \"focusedValue\",\n \"defaultFocusedValue\",\n \"onFocusChange\",\n \"locale\",\n \"granularity\",\n \"hourCycle\",\n \"hideTimeZone\",\n \"placeholderValue\",\n \"createCalendar\",\n \"isDateUnavailable\",\n \"visibleMonths\",\n \"isDateDisabled\",\n \"validationState\",\n \"allowsNonContiguousRanges\",\n \"firstDayOfWeek\",\n \"pageBehavior\",\n \"selectionAlignment\",\n ],\n );\n\n const [internalOpen, setInternalOpen] = createSignal(overlayProps.defaultOpen ?? false);\n const isOpen = () => access(overlayProps.isOpen) ?? internalOpen();\n const setOpen = (open: boolean) => {\n if (access(overlayProps.isOpen) === undefined) {\n setInternalOpen(open);\n }\n overlayProps.onOpenChange?.(open);\n };\n\n let triggerRef: HTMLElement | null = null;\n const overlayState = {\n get isOpen() {\n return isOpen();\n },\n open: () => setOpen(true),\n close: () => setOpen(false),\n toggle: () => setOpen(!isOpen()),\n };\n\n const [internalRangeValue, setInternalRangeValue] = createSignal<RangeValue<T> | null>(\n stateProps.defaultValue ?? null,\n );\n const currentRangeValue = createMemo<RangeValue<T> | null>(() => {\n const controlled = access(stateProps.value);\n return controlled !== undefined ? controlled : internalRangeValue();\n });\n const setCommittedRangeValue = (value: RangeValue<T> | null) => {\n if (access(stateProps.value) === undefined) {\n setInternalRangeValue(() => value);\n }\n stateProps.onChange?.(value);\n };\n\n const calendarState = createRangeCalendarState({\n ...stateProps,\n value: currentRangeValue,\n onChange: (value) => {\n setCommittedRangeValue(value);\n if (local.shouldCloseOnSelect !== false && value?.start && value?.end) {\n setOpen(false);\n }\n },\n });\n\n const isInvalid = createMemo(\n () =>\n Boolean((rest as { isInvalid?: boolean }).isInvalid) ||\n calendarState.validationState() === \"invalid\",\n );\n const isRequired = createMemo(() => Boolean((rest as { isRequired?: boolean }).isRequired));\n const [startFieldValue, setStartFieldValue] = createSignal<T | null>(\n currentRangeValue()?.start ?? null,\n );\n const [endFieldValue, setEndFieldValue] = createSignal<T | null>(\n currentRangeValue()?.end ?? null,\n );\n const rangeGranularity = createMemo<\"day\" | \"hour\" | \"minute\" | \"second\">(() => {\n if (stateProps.granularity) {\n return stateProps.granularity;\n }\n const value = currentRangeValue()?.start ?? currentRangeValue()?.end;\n if (value && \"hour\" in value) {\n return \"second\" in value ? \"second\" : \"minute\";\n }\n return \"day\";\n });\n\n createEffect(() => {\n const value = currentRangeValue();\n setStartFieldValue(() => value?.start ?? null);\n setEndFieldValue(() => value?.end ?? null);\n });\n\n const setRangeFieldValue = (part: \"start\" | \"end\", nextValue: T | null) => {\n if (part === \"start\") {\n setStartFieldValue(() => nextValue);\n } else {\n setEndFieldValue(() => nextValue);\n }\n\n const nextStart = part === \"start\" ? nextValue : startFieldValue();\n const nextEnd = part === \"end\" ? nextValue : endFieldValue();\n\n setCommittedRangeValue(\n nextStart && nextEnd ? ({ start: nextStart, end: nextEnd } as RangeValue<T>) : null,\n );\n };\n\n const rangeFieldStateProps = {\n minValue: stateProps.minValue,\n maxValue: stateProps.maxValue,\n isDisabled: stateProps.isDisabled,\n isReadOnly: stateProps.isReadOnly,\n isRequired,\n locale: access(stateProps.locale),\n granularity: rangeGranularity(),\n hourCycle: stateProps.hourCycle,\n hideTimeZone: stateProps.hideTimeZone,\n placeholderValue: stateProps.placeholderValue,\n validationState: () => (isInvalid() ? \"invalid\" : access(stateProps.validationState)),\n // The range picker's isDateUnavailable is anchor-aware (date, anchorDate),\n // but a text field has no range anchor, so adapt it to the field's 1-arg form\n // by always passing a null anchor (checks raw per-date availability).\n isDateUnavailable: stateProps.isDateUnavailable\n ? (date: DateValue) => stateProps.isDateUnavailable!(date, null)\n : undefined,\n } satisfies Partial<DateFieldStateProps<T>>;\n\n const startFieldState = createDateFieldState<T>({\n ...rangeFieldStateProps,\n value: startFieldValue,\n onChange: (value) => setRangeFieldValue(\"start\", value),\n });\n\n const endFieldState = createDateFieldState<T>({\n ...rangeFieldStateProps,\n value: endFieldValue,\n onChange: (value) => setRangeFieldValue(\"end\", value),\n });\n\n const pickerAria = createDateRangePicker(\n () => ({\n ...(rest as Record<string, unknown>),\n description: (props as { description?: string }).description,\n errorMessage: (props as { errorMessage?: string }).errorMessage,\n }),\n calendarState as unknown as RangeCalendarState<DateValue>,\n overlayState as AriaDatePickerState,\n );\n\n const startFieldContext: DateRangePickerFieldContextValue = {\n state: startFieldState as unknown as DateFieldState<DateValue>,\n aria: {\n labelProps: {},\n get inputProps() {\n return pickerAria.startInputProps;\n },\n get descriptionProps() {\n return pickerAria.descriptionProps;\n },\n get errorMessageProps() {\n return pickerAria.errorMessageProps;\n },\n },\n };\n\n const endFieldContext: DateRangePickerFieldContextValue = {\n state: endFieldState as unknown as DateFieldState<DateValue>,\n aria: {\n labelProps: {},\n get inputProps() {\n return pickerAria.endInputProps;\n },\n get descriptionProps() {\n return pickerAria.descriptionProps;\n },\n get errorMessageProps() {\n return pickerAria.errorMessageProps;\n },\n },\n };\n\n const contextValue: DateRangePickerContextValue = {\n calendarState: calendarState as unknown as RangeCalendarState<DateValue>,\n startFieldState: startFieldState as unknown as DateFieldState<DateValue>,\n endFieldState: endFieldState as unknown as DateFieldState<DateValue>,\n startFieldContext,\n endFieldContext,\n overlayState,\n triggerRef: () => triggerRef,\n setTriggerRef: (element) => {\n if (!element) return;\n if (!triggerRef || !triggerRef.isConnected) triggerRef = element;\n },\n pickerAria,\n };\n\n const renderValues = createMemo<DateRangePickerRenderProps>(() => ({\n isDisabled: calendarState.isDisabled(),\n isReadOnly: calendarState.isReadOnly(),\n isRequired: isRequired(),\n isInvalid: isInvalid(),\n isOpen: overlayState.isOpen,\n }));\n\n const renderProps = useRenderProps(\n {\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-DateRangePicker\",\n },\n renderValues,\n );\n\n return (\n <DateRangePickerStateContext.Provider\n value={calendarState as unknown as RangeCalendarState<DateValue>}\n >\n <DateRangePickerContext.Provider value={contextValue}>\n <RangeCalendarContext.Provider\n value={calendarState as unknown as RangeCalendarState<DateValue>}\n >\n <div\n {...pickerAria.groupProps}\n class={renderProps.class()}\n style={renderProps.style()}\n data-disabled={dataAttr(calendarState.isDisabled())}\n data-readonly={dataAttr(calendarState.isReadOnly())}\n data-required={dataAttr(isRequired())}\n data-invalid={dataAttr(isInvalid())}\n data-open={dataAttr(overlayState.isOpen)}\n >\n <Provider\n values={\n [\n [\n TextContext,\n {\n slots: {\n get description() {\n return pickerAria.descriptionProps;\n },\n get errorMessage() {\n return pickerAria.errorMessageProps;\n },\n },\n },\n ],\n ] as Array<[Context<unknown>, unknown]>\n }\n >\n {props.children}\n </Provider>\n </div>\n <Show when={(rest as Record<string, unknown>).startName}>\n <HiddenDateInput\n name={(rest as Record<string, unknown>).startName as string | undefined}\n form={(rest as Record<string, unknown>).form as string | undefined}\n value={() => currentRangeValue()?.start ?? null}\n isDisabled={access(stateProps.isDisabled) ?? false}\n minValue={() => access(stateProps.minValue) as DateValue | undefined}\n maxValue={() => access(stateProps.maxValue) as DateValue | undefined}\n granularity={rangeGranularity()}\n />\n </Show>\n <Show when={(rest as Record<string, unknown>).endName}>\n <HiddenDateInput\n name={(rest as Record<string, unknown>).endName as string | undefined}\n form={(rest as Record<string, unknown>).form as string | undefined}\n value={() => currentRangeValue()?.end ?? null}\n isDisabled={access(stateProps.isDisabled) ?? false}\n minValue={() => access(stateProps.minValue) as DateValue | undefined}\n maxValue={() => access(stateProps.maxValue) as DateValue | undefined}\n granularity={rangeGranularity()}\n />\n </Show>\n </RangeCalendarContext.Provider>\n </DateRangePickerContext.Provider>\n </DateRangePickerStateContext.Provider>\n );\n}\n\n/**\n * A button that opens the date picker calendar.\n */\nexport function DatePickerButton(props: DatePickerButtonProps): JSX.Element {\n const context = useDatePickerContext();\n\n const renderValues = createMemo<DatePickerButtonRenderProps>(() => ({\n isDisabled: context.fieldState.isDisabled() || (props.isDisabled ?? false),\n isOpen: context.overlayState.isOpen,\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: props.class,\n style: props.style,\n defaultClassName: \"solidaria-DatePickerButton\",\n },\n renderValues,\n );\n\n // Determine children content - avoid Show for SSR hydration compatibility\n const getChildren = () => {\n if (typeof props.children === \"function\") {\n return renderProps.renderChildren();\n }\n return props.children ?? \"📅\";\n };\n\n return (\n <button\n ref={(el) => {\n context.setTriggerRef(el);\n }}\n {...context.pickerAria.buttonProps}\n class={renderProps.class()}\n style={renderProps.style()}\n disabled={context.fieldState.isDisabled() || props.isDisabled}\n data-disabled={dataAttr(context.fieldState.isDisabled() || props.isDisabled)}\n data-open={dataAttr(context.overlayState.isOpen)}\n >\n {getChildren()}\n </button>\n );\n}\n\nexport function DateRangePickerButton(props: DateRangePickerButtonProps): JSX.Element {\n const context = useDateRangePickerContext();\n\n const renderValues = createMemo<DatePickerButtonRenderProps>(() => ({\n isDisabled: context.calendarState.isDisabled() || (props.isDisabled ?? false),\n isOpen: context.overlayState.isOpen,\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: props.class,\n style: props.style,\n defaultClassName: \"solidaria-DateRangePickerButton\",\n },\n renderValues,\n );\n\n const getChildren = () => {\n if (typeof props.children === \"function\") {\n return renderProps.renderChildren();\n }\n return props.children ?? \"📅\";\n };\n\n return (\n <button\n ref={(el) => context.setTriggerRef(el)}\n {...context.pickerAria.buttonProps}\n class={renderProps.class()}\n style={renderProps.style()}\n disabled={context.calendarState.isDisabled() || props.isDisabled}\n data-disabled={dataAttr(context.calendarState.isDisabled() || props.isDisabled)}\n data-open={dataAttr(context.overlayState.isOpen)}\n >\n {getChildren()}\n </button>\n );\n}\n\nexport interface DatePickerContentProps extends SlotProps {\n /** The children of the component. */\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\nexport interface DateRangePickerContentProps extends DatePickerContentProps {}\n\nexport interface DatePickerLabelProps {\n children?: JSX.Element;\n class?: string;\n}\n\nexport function DatePickerLabel(props: DatePickerLabelProps): JSX.Element {\n const context = useDatePickerContext();\n return (\n <span {...context.pickerAria.labelProps} class={props.class}>\n {props.children}\n </span>\n );\n}\n\nexport interface DatePickerDescriptionProps {\n children?: JSX.Element;\n class?: string;\n}\n\nexport function DatePickerDescription(props: DatePickerDescriptionProps): JSX.Element {\n const context = useDatePickerContext();\n return (\n <p {...context.pickerAria.descriptionProps} class={props.class}>\n {props.children}\n </p>\n );\n}\n\nexport interface DatePickerErrorMessageProps {\n children?: JSX.Element;\n class?: string;\n}\n\nexport function DatePickerErrorMessage(props: DatePickerErrorMessageProps): JSX.Element {\n const context = useDatePickerContext();\n return (\n <p {...context.pickerAria.errorMessageProps} class={props.class}>\n {props.children}\n </p>\n );\n}\n\nexport interface DateRangePickerLabelProps {\n children?: JSX.Element;\n class?: string;\n}\n\nexport function DateRangePickerLabel(props: DateRangePickerLabelProps): JSX.Element {\n const context = useDateRangePickerContext();\n return (\n <span {...context.pickerAria.labelProps} class={props.class}>\n {props.children}\n </span>\n );\n}\n\nexport interface DateRangePickerDescriptionProps {\n children?: JSX.Element;\n class?: string;\n}\n\nexport function DateRangePickerDescription(props: DateRangePickerDescriptionProps): JSX.Element {\n const context = useDateRangePickerContext();\n return (\n <p {...context.pickerAria.descriptionProps} class={props.class}>\n {props.children}\n </p>\n );\n}\n\nexport interface DateRangePickerErrorMessageProps {\n children?: JSX.Element;\n class?: string;\n}\n\nexport function DateRangePickerErrorMessage(props: DateRangePickerErrorMessageProps): JSX.Element {\n const context = useDateRangePickerContext();\n return (\n <p {...context.pickerAria.errorMessageProps} class={props.class}>\n {props.children}\n </p>\n );\n}\n\nfunction createEscapeDismissFallback(isOpen: () => boolean, close: () => void): void {\n createEffect(() => {\n if (!isOpen() || typeof document === \"undefined\") return;\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\" || event.defaultPrevented || event.isComposing) return;\n close();\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n onCleanup(() => document.removeEventListener(\"keydown\", onKeyDown));\n });\n}\n\n/**\n * The content area of the date picker (typically contains a Calendar).\n */\nexport function DatePickerContent(props: DatePickerContentProps): JSX.Element {\n const context = useDatePickerContext();\n const portalContext = useUNSAFE_PortalContext();\n let contentRef: HTMLDivElement | undefined;\n const portalContainer = () => portalContext.getContainer?.() ?? undefined;\n\n const popoverAria = createPopover(\n {\n triggerRef: () => context.triggerRef()?.parentElement ?? context.triggerRef(),\n popoverRef: () => contentRef ?? null,\n placement: \"bottom start\",\n offset: 8,\n isNonModal: false,\n isKeyboardDismissDisabled: false,\n },\n {\n isOpen: () => context.overlayState.isOpen,\n open: context.overlayState.open,\n close: context.overlayState.close,\n toggle: context.overlayState.toggle,\n },\n );\n\n createEscapeDismissFallback(() => context.overlayState.isOpen, context.overlayState.close);\n\n const cleanPopoverProps = () => {\n const {\n style: _style,\n ref: _ref,\n ...rest\n } = popoverAria.popoverProps as Record<string, unknown>;\n return rest;\n };\n\n const mergedStyle = (): JSX.CSSProperties => {\n const popoverStyle = (popoverAria.popoverProps as Record<string, unknown>).style as\n | JSX.CSSProperties\n | undefined;\n return {\n ...popoverStyle,\n ...props.style,\n };\n };\n\n // Return focus to trigger when overlay closes\n createEffect(() => {\n const open = context.overlayState.isOpen;\n if (!open) {\n requestAnimationFrame(() => context.triggerRef()?.focus());\n }\n });\n\n return (\n <Show when={context.overlayState.isOpen}>\n <Portal mount={portalContainer()}>\n <FocusScope contain restoreFocus>\n <div\n ref={contentRef}\n {...cleanPopoverProps()}\n {...context.pickerAria.dialogProps}\n tabIndex={-1}\n class={props.class ?? \"solidaria-DatePickerContent\"}\n style={mergedStyle()}\n data-placement={popoverAria.placement() ?? undefined}\n >\n {props.children}\n </div>\n </FocusScope>\n </Portal>\n </Show>\n );\n}\n\nexport function DateRangePickerContent(props: DateRangePickerContentProps): JSX.Element {\n const context = useDateRangePickerContext();\n const portalContext = useUNSAFE_PortalContext();\n let contentRef: HTMLDivElement | undefined;\n const portalContainer = () => portalContext.getContainer?.() ?? undefined;\n\n const popoverAria = createPopover(\n {\n triggerRef: () => context.triggerRef()?.parentElement ?? context.triggerRef(),\n popoverRef: () => contentRef ?? null,\n placement: \"bottom start\",\n offset: 8,\n isNonModal: false,\n isKeyboardDismissDisabled: false,\n },\n {\n isOpen: () => context.overlayState.isOpen,\n open: context.overlayState.open,\n close: context.overlayState.close,\n toggle: context.overlayState.toggle,\n },\n );\n\n createEscapeDismissFallback(() => context.overlayState.isOpen, context.overlayState.close);\n\n const cleanPopoverProps = () => {\n const {\n style: _style,\n ref: _ref,\n ...rest\n } = popoverAria.popoverProps as Record<string, unknown>;\n return rest;\n };\n\n const mergedStyle = (): JSX.CSSProperties => {\n const popoverStyle = (popoverAria.popoverProps as Record<string, unknown>).style as\n | JSX.CSSProperties\n | undefined;\n return {\n ...popoverStyle,\n ...props.style,\n };\n };\n\n // Return focus to trigger when overlay closes\n createEffect(() => {\n const open = context.overlayState.isOpen;\n if (!open) {\n requestAnimationFrame(() => context.triggerRef()?.focus());\n }\n });\n\n return (\n <Show when={context.overlayState.isOpen}>\n <Portal mount={portalContainer()}>\n <FocusScope contain restoreFocus>\n <div\n ref={contentRef}\n {...cleanPopoverProps()}\n {...context.pickerAria.dialogProps}\n tabIndex={-1}\n class={props.class ?? \"solidaria-DateRangePickerContent\"}\n style={mergedStyle()}\n data-placement={popoverAria.placement() ?? undefined}\n >\n {props.children}\n </div>\n </FocusScope>\n </Portal>\n </Show>\n );\n}\n\nexport { HiddenDateInput } from \"./HiddenDateInput\";\nexport type { HiddenDateInputProps } from \"./HiddenDateInput\";\n\n// DatePickerContextValue is already exported at declaration\n"],"mappings":"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"}
|
package/dist/Dialog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../src/Dialog.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,GAAG,EAST,MAAM,UAAU,CAAC;AAClB,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../src/Dialog.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,GAAG,EAST,MAAM,UAAU,CAAC;AAClB,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAC;AAOrC,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,SAAS,EAGf,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,iBAAiB;IAChC,mCAAmC;IACnC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,SAAS;IACtF,qEAAqE;IACrE,QAAQ,CAAC,EAAE,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAC7C,yCAAyC;IACzC,KAAK,CAAC,EAAE,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;IAC/C,wCAAwC;IACxC,KAAK,CAAC,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;IAC3C,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,yEAAyE;IACzE,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;IACtB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wCAAwC;IACxC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,aAAa,uDAAiD,CAAC;AAE5E,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CA+EpE;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,OAAO,CA+FtD;AAED,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;IACtB,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO,CA2DxD;AAGD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,CAAC"}
|
package/dist/Dialog.js
ADDED
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
import { DEFAULT_SLOT, filterDOMProps, useRenderProps } from "./utils.js";
|
|
2
|
+
import { a as useOverlayTriggerState, i as useDialogTrigger, t as DialogTriggerContext } from "./contexts.js";
|
|
3
|
+
import { ButtonContext } from "./Button.js";
|
|
4
|
+
import { className, createComponent, effect, getNextElement, insert, mergeProps, runHydrationEvents, setAttribute, spread, template, use } from "solid-js/web";
|
|
5
|
+
import { Match, Switch, createContext, createEffect, createMemo, createUniqueId, splitProps, useContext } from "solid-js";
|
|
6
|
+
import { createDialog, createOverlayTrigger, focusSafely } from "@proyecto-viviana/solidaria";
|
|
7
|
+
import { createOverlayTriggerState } from "@proyecto-viviana/solid-stately";
|
|
8
|
+
//#region src/Dialog.tsx
|
|
9
|
+
/**
|
|
10
|
+
* Dialog component for solidaria-components
|
|
11
|
+
*
|
|
12
|
+
* A headless dialog component that combines ARIA hooks.
|
|
13
|
+
* Port of react-aria-components Dialog.
|
|
14
|
+
*/
|
|
15
|
+
var _tmpl$ = /*#__PURE__*/ template(`<section>`), _tmpl$2 = /*#__PURE__*/ template(`<h1>`), _tmpl$3 = /*#__PURE__*/ template(`<h2>`), _tmpl$4 = /*#__PURE__*/ template(`<h3>`), _tmpl$5 = /*#__PURE__*/ template(`<h4>`), _tmpl$6 = /*#__PURE__*/ template(`<h5>`), _tmpl$7 = /*#__PURE__*/ template(`<h6>`);
|
|
16
|
+
const DialogContext = createContext(null);
|
|
17
|
+
/**
|
|
18
|
+
* A DialogTrigger opens a dialog when a trigger element is pressed.
|
|
19
|
+
* Children should include a trigger element (e.g. Button) and the dialog content.
|
|
20
|
+
*/
|
|
21
|
+
function DialogTrigger(props) {
|
|
22
|
+
const [local] = splitProps(props, [
|
|
23
|
+
"isOpen",
|
|
24
|
+
"defaultOpen",
|
|
25
|
+
"onOpenChange"
|
|
26
|
+
]);
|
|
27
|
+
const state = createOverlayTriggerState({
|
|
28
|
+
get isOpen() {
|
|
29
|
+
return local.isOpen;
|
|
30
|
+
},
|
|
31
|
+
get defaultOpen() {
|
|
32
|
+
return local.defaultOpen;
|
|
33
|
+
},
|
|
34
|
+
onOpenChange: local.onOpenChange
|
|
35
|
+
});
|
|
36
|
+
let triggerRef = null;
|
|
37
|
+
const triggerId = createUniqueId();
|
|
38
|
+
const triggerAria = createOverlayTrigger({ type: "dialog" }, state, () => triggerRef);
|
|
39
|
+
const restoreFocusToTrigger = () => {
|
|
40
|
+
const trigger = triggerRef;
|
|
41
|
+
if (!trigger?.isConnected) return;
|
|
42
|
+
const win = trigger.ownerDocument.defaultView ?? window;
|
|
43
|
+
win.requestAnimationFrame(() => {
|
|
44
|
+
win.requestAnimationFrame(() => {
|
|
45
|
+
if (trigger.isConnected && !state.isOpen()) focusSafely(trigger);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
const stateWithFocusRestore = {
|
|
50
|
+
isOpen: state.isOpen,
|
|
51
|
+
setOpen: (isOpen) => {
|
|
52
|
+
state.setOpen(isOpen);
|
|
53
|
+
if (!isOpen) restoreFocusToTrigger();
|
|
54
|
+
},
|
|
55
|
+
open: state.open,
|
|
56
|
+
close: () => {
|
|
57
|
+
state.close();
|
|
58
|
+
restoreFocusToTrigger();
|
|
59
|
+
},
|
|
60
|
+
toggle: () => {
|
|
61
|
+
const wasOpen = state.isOpen();
|
|
62
|
+
state.toggle();
|
|
63
|
+
if (wasOpen) restoreFocusToTrigger();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const setTriggerRef = (el) => {
|
|
67
|
+
if (!el) return;
|
|
68
|
+
if (!triggerRef || !triggerRef.isConnected) triggerRef = el;
|
|
69
|
+
};
|
|
70
|
+
const contextValue = createMemo(() => ({
|
|
71
|
+
state: stateWithFocusRestore,
|
|
72
|
+
triggerRef: () => triggerRef,
|
|
73
|
+
setTriggerRef,
|
|
74
|
+
triggerId,
|
|
75
|
+
triggerProps: triggerAria.triggerProps,
|
|
76
|
+
overlayProps: triggerAria.overlayProps
|
|
77
|
+
}));
|
|
78
|
+
return createComponent(DialogTriggerContext.Provider, {
|
|
79
|
+
get value() {
|
|
80
|
+
return contextValue();
|
|
81
|
+
},
|
|
82
|
+
get children() {
|
|
83
|
+
return props.children;
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* A dialog is an overlay shown above other content in an application.
|
|
89
|
+
*/
|
|
90
|
+
function Dialog(props) {
|
|
91
|
+
const [local, ariaProps, rest] = splitProps(props, [
|
|
92
|
+
"class",
|
|
93
|
+
"style",
|
|
94
|
+
"slot",
|
|
95
|
+
"onClose"
|
|
96
|
+
], [
|
|
97
|
+
"role",
|
|
98
|
+
"aria-label",
|
|
99
|
+
"aria-labelledby",
|
|
100
|
+
"aria-describedby"
|
|
101
|
+
]);
|
|
102
|
+
let dialogRef;
|
|
103
|
+
const triggerContext = useContext(DialogTriggerContext);
|
|
104
|
+
const { dialogProps, titleProps } = createDialog({
|
|
105
|
+
get role() {
|
|
106
|
+
return ariaProps.role;
|
|
107
|
+
},
|
|
108
|
+
get "aria-label"() {
|
|
109
|
+
return ariaProps["aria-label"];
|
|
110
|
+
},
|
|
111
|
+
get "aria-labelledby"() {
|
|
112
|
+
return ariaProps["aria-labelledby"];
|
|
113
|
+
},
|
|
114
|
+
get "aria-describedby"() {
|
|
115
|
+
return ariaProps["aria-describedby"];
|
|
116
|
+
}
|
|
117
|
+
}, () => dialogRef);
|
|
118
|
+
const titleId = () => titleProps()?.id;
|
|
119
|
+
const overlayState = useOverlayTriggerState();
|
|
120
|
+
const close = () => {
|
|
121
|
+
local.onClose?.();
|
|
122
|
+
if (overlayState) {
|
|
123
|
+
overlayState.close();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
triggerContext?.state.close();
|
|
127
|
+
};
|
|
128
|
+
createEffect(() => {
|
|
129
|
+
if (!dialogRef || ariaProps["aria-label"] || ariaProps["aria-labelledby"]) return;
|
|
130
|
+
const labelledBy = dialogRef.getAttribute("aria-labelledby");
|
|
131
|
+
if (labelledBy && dialogRef.ownerDocument.getElementById(labelledBy)) return;
|
|
132
|
+
const trigger = triggerContext?.triggerRef();
|
|
133
|
+
if (trigger?.id) dialogRef.setAttribute("aria-labelledby", trigger.id);
|
|
134
|
+
});
|
|
135
|
+
const renderValues = createMemo(() => ({ close }));
|
|
136
|
+
const renderProps = useRenderProps({
|
|
137
|
+
get children() {
|
|
138
|
+
return props.children;
|
|
139
|
+
},
|
|
140
|
+
class: local.class,
|
|
141
|
+
style: local.style,
|
|
142
|
+
defaultClassName: "solidaria-Dialog"
|
|
143
|
+
}, renderValues);
|
|
144
|
+
const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
|
|
145
|
+
return createComponent(DialogContext.Provider, {
|
|
146
|
+
get value() {
|
|
147
|
+
return {
|
|
148
|
+
close,
|
|
149
|
+
titleId: titleId()
|
|
150
|
+
};
|
|
151
|
+
},
|
|
152
|
+
get children() {
|
|
153
|
+
var _el$ = getNextElement(_tmpl$);
|
|
154
|
+
var _ref$ = dialogRef;
|
|
155
|
+
typeof _ref$ === "function" ? use(_ref$, _el$) : dialogRef = _el$;
|
|
156
|
+
spread(_el$, mergeProps(dialogProps, domProps, {
|
|
157
|
+
get ["class"]() {
|
|
158
|
+
return renderProps.class();
|
|
159
|
+
},
|
|
160
|
+
get style() {
|
|
161
|
+
return renderProps.style();
|
|
162
|
+
},
|
|
163
|
+
get slot() {
|
|
164
|
+
return local.slot;
|
|
165
|
+
}
|
|
166
|
+
}), false, true);
|
|
167
|
+
insert(_el$, createComponent(ButtonContext.Provider, {
|
|
168
|
+
value: { slots: {
|
|
169
|
+
[DEFAULT_SLOT]: {},
|
|
170
|
+
close: { onPress: () => close() }
|
|
171
|
+
} },
|
|
172
|
+
get children() {
|
|
173
|
+
return renderProps.renderChildren();
|
|
174
|
+
}
|
|
175
|
+
}));
|
|
176
|
+
runHydrationEvents();
|
|
177
|
+
return _el$;
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Heading element for dialog title.
|
|
183
|
+
* When rendered inside a Dialog, automatically gets the titleProps.
|
|
184
|
+
*/
|
|
185
|
+
function Heading(props) {
|
|
186
|
+
const dialogContext = useContext(DialogContext);
|
|
187
|
+
const level = () => props.level ?? 2;
|
|
188
|
+
const id = () => dialogContext?.titleId;
|
|
189
|
+
let headingRef;
|
|
190
|
+
createEffect(() => {
|
|
191
|
+
const el = headingRef;
|
|
192
|
+
if (!el) return;
|
|
193
|
+
const contextId = id();
|
|
194
|
+
if (contextId) {
|
|
195
|
+
el.id = contextId;
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (!el.id) {
|
|
199
|
+
const labelledBy = el.closest("[role=\"dialog\"],[role=\"alertdialog\"]")?.getAttribute("aria-labelledby");
|
|
200
|
+
if (labelledBy && !el.ownerDocument.getElementById(labelledBy)) el.id = labelledBy;
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
return createComponent(Switch, { get children() {
|
|
204
|
+
return [
|
|
205
|
+
createComponent(Match, {
|
|
206
|
+
get when() {
|
|
207
|
+
return level() === 1;
|
|
208
|
+
},
|
|
209
|
+
get children() {
|
|
210
|
+
var _el$2 = getNextElement(_tmpl$2);
|
|
211
|
+
var _ref$2 = headingRef;
|
|
212
|
+
typeof _ref$2 === "function" ? use(_ref$2, _el$2) : headingRef = _el$2;
|
|
213
|
+
insert(_el$2, () => props.children);
|
|
214
|
+
effect((_p$) => {
|
|
215
|
+
var _v$ = id(), _v$2 = props.class;
|
|
216
|
+
_v$ !== _p$.e && setAttribute(_el$2, "id", _p$.e = _v$);
|
|
217
|
+
_v$2 !== _p$.t && className(_el$2, _p$.t = _v$2);
|
|
218
|
+
return _p$;
|
|
219
|
+
}, {
|
|
220
|
+
e: void 0,
|
|
221
|
+
t: void 0
|
|
222
|
+
});
|
|
223
|
+
return _el$2;
|
|
224
|
+
}
|
|
225
|
+
}),
|
|
226
|
+
createComponent(Match, {
|
|
227
|
+
get when() {
|
|
228
|
+
return level() === 2;
|
|
229
|
+
},
|
|
230
|
+
get children() {
|
|
231
|
+
var _el$3 = getNextElement(_tmpl$3);
|
|
232
|
+
var _ref$3 = headingRef;
|
|
233
|
+
typeof _ref$3 === "function" ? use(_ref$3, _el$3) : headingRef = _el$3;
|
|
234
|
+
insert(_el$3, () => props.children);
|
|
235
|
+
effect((_p$) => {
|
|
236
|
+
var _v$3 = id(), _v$4 = props.class;
|
|
237
|
+
_v$3 !== _p$.e && setAttribute(_el$3, "id", _p$.e = _v$3);
|
|
238
|
+
_v$4 !== _p$.t && className(_el$3, _p$.t = _v$4);
|
|
239
|
+
return _p$;
|
|
240
|
+
}, {
|
|
241
|
+
e: void 0,
|
|
242
|
+
t: void 0
|
|
243
|
+
});
|
|
244
|
+
return _el$3;
|
|
245
|
+
}
|
|
246
|
+
}),
|
|
247
|
+
createComponent(Match, {
|
|
248
|
+
get when() {
|
|
249
|
+
return level() === 3;
|
|
250
|
+
},
|
|
251
|
+
get children() {
|
|
252
|
+
var _el$4 = getNextElement(_tmpl$4);
|
|
253
|
+
var _ref$4 = headingRef;
|
|
254
|
+
typeof _ref$4 === "function" ? use(_ref$4, _el$4) : headingRef = _el$4;
|
|
255
|
+
insert(_el$4, () => props.children);
|
|
256
|
+
effect((_p$) => {
|
|
257
|
+
var _v$5 = id(), _v$6 = props.class;
|
|
258
|
+
_v$5 !== _p$.e && setAttribute(_el$4, "id", _p$.e = _v$5);
|
|
259
|
+
_v$6 !== _p$.t && className(_el$4, _p$.t = _v$6);
|
|
260
|
+
return _p$;
|
|
261
|
+
}, {
|
|
262
|
+
e: void 0,
|
|
263
|
+
t: void 0
|
|
264
|
+
});
|
|
265
|
+
return _el$4;
|
|
266
|
+
}
|
|
267
|
+
}),
|
|
268
|
+
createComponent(Match, {
|
|
269
|
+
get when() {
|
|
270
|
+
return level() === 4;
|
|
271
|
+
},
|
|
272
|
+
get children() {
|
|
273
|
+
var _el$5 = getNextElement(_tmpl$5);
|
|
274
|
+
var _ref$5 = headingRef;
|
|
275
|
+
typeof _ref$5 === "function" ? use(_ref$5, _el$5) : headingRef = _el$5;
|
|
276
|
+
insert(_el$5, () => props.children);
|
|
277
|
+
effect((_p$) => {
|
|
278
|
+
var _v$7 = id(), _v$8 = props.class;
|
|
279
|
+
_v$7 !== _p$.e && setAttribute(_el$5, "id", _p$.e = _v$7);
|
|
280
|
+
_v$8 !== _p$.t && className(_el$5, _p$.t = _v$8);
|
|
281
|
+
return _p$;
|
|
282
|
+
}, {
|
|
283
|
+
e: void 0,
|
|
284
|
+
t: void 0
|
|
285
|
+
});
|
|
286
|
+
return _el$5;
|
|
287
|
+
}
|
|
288
|
+
}),
|
|
289
|
+
createComponent(Match, {
|
|
290
|
+
get when() {
|
|
291
|
+
return level() === 5;
|
|
292
|
+
},
|
|
293
|
+
get children() {
|
|
294
|
+
var _el$6 = getNextElement(_tmpl$6);
|
|
295
|
+
var _ref$6 = headingRef;
|
|
296
|
+
typeof _ref$6 === "function" ? use(_ref$6, _el$6) : headingRef = _el$6;
|
|
297
|
+
insert(_el$6, () => props.children);
|
|
298
|
+
effect((_p$) => {
|
|
299
|
+
var _v$9 = id(), _v$0 = props.class;
|
|
300
|
+
_v$9 !== _p$.e && setAttribute(_el$6, "id", _p$.e = _v$9);
|
|
301
|
+
_v$0 !== _p$.t && className(_el$6, _p$.t = _v$0);
|
|
302
|
+
return _p$;
|
|
303
|
+
}, {
|
|
304
|
+
e: void 0,
|
|
305
|
+
t: void 0
|
|
306
|
+
});
|
|
307
|
+
return _el$6;
|
|
308
|
+
}
|
|
309
|
+
}),
|
|
310
|
+
createComponent(Match, {
|
|
311
|
+
get when() {
|
|
312
|
+
return level() === 6;
|
|
313
|
+
},
|
|
314
|
+
get children() {
|
|
315
|
+
var _el$7 = getNextElement(_tmpl$7);
|
|
316
|
+
var _ref$7 = headingRef;
|
|
317
|
+
typeof _ref$7 === "function" ? use(_ref$7, _el$7) : headingRef = _el$7;
|
|
318
|
+
insert(_el$7, () => props.children);
|
|
319
|
+
effect((_p$) => {
|
|
320
|
+
var _v$1 = id(), _v$10 = props.class;
|
|
321
|
+
_v$1 !== _p$.e && setAttribute(_el$7, "id", _p$.e = _v$1);
|
|
322
|
+
_v$10 !== _p$.t && className(_el$7, _p$.t = _v$10);
|
|
323
|
+
return _p$;
|
|
324
|
+
}, {
|
|
325
|
+
e: void 0,
|
|
326
|
+
t: void 0
|
|
327
|
+
});
|
|
328
|
+
return _el$7;
|
|
329
|
+
}
|
|
330
|
+
})
|
|
331
|
+
];
|
|
332
|
+
} });
|
|
333
|
+
}
|
|
334
|
+
//#endregion
|
|
335
|
+
export { Dialog, DialogContext, Heading as DialogHeading, Heading, DialogTrigger, DialogTriggerContext, useDialogTrigger };
|
|
336
|
+
|
|
337
|
+
//# sourceMappingURL=Dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dialog.js","names":["JSX","createContext","createEffect","createMemo","createUniqueId","splitProps","useContext","Switch","Match","createDialog","createOverlayTrigger","focusSafely","AriaDialogProps","createOverlayTriggerState","OverlayTriggerState","DialogTriggerContext","useOverlayTriggerState","ButtonContext","DEFAULT_SLOT","RenderChildren","ClassNameOrFunction","StyleOrFunction","SlotProps","useRenderProps","filterDOMProps","DialogRenderProps","close","DialogProps","Omit","children","class","style","onClose","DialogTriggerProps","Element","isOpen","defaultOpen","onOpenChange","DialogContextValue","titleId","DialogContext","useDialogTrigger","DialogTrigger","props","local","state","triggerRef","HTMLElement","triggerId","triggerAria","type","restoreFocusToTrigger","trigger","isConnected","win","ownerDocument","defaultView","window","requestAnimationFrame","stateWithFocusRestore","setOpen","open","toggle","wasOpen","setTriggerRef","el","contextValue","triggerProps","overlayProps","_$createComponent","Provider","value","Dialog","ariaProps","rest","dialogRef","triggerContext","dialogProps","titleProps","role","aria-label","aria-labelledby","aria-describedby","id","overlayState","labelledBy","getAttribute","getElementById","setAttribute","renderValues","renderProps","defaultClassName","domProps","Record","global","_el$","_$getNextElement","_tmpl$","_ref$","_$use","_$spread","_$mergeProps","slot","_$insert","slots","onPress","renderChildren","_$runHydrationEvents","HeadingProps","level","Heading","dialogContext","headingRef","HTMLHeadingElement","contextId","dialog","closest","when","_el$2","_tmpl$2","_ref$2","_$effect","_p$","_v$","_v$2","e","_$setAttribute","t","_$className","undefined","_el$3","_tmpl$3","_ref$3","_v$3","_v$4","_el$4","_tmpl$4","_ref$4","_v$5","_v$6","_el$5","_tmpl$5","_ref$5","_v$7","_v$8","_el$6","_tmpl$6","_ref$6","_v$9","_v$0","_el$7","_tmpl$7","_ref$7","_v$1","_v$10","DialogHeading"],"sources":["../src/Dialog.tsx"],"sourcesContent":["/**\n * Dialog component for solidaria-components\n *\n * A headless dialog component that combines ARIA hooks.\n * Port of react-aria-components Dialog.\n */\n\nimport {\n type JSX,\n createContext,\n createEffect,\n createMemo,\n createUniqueId,\n splitProps,\n useContext,\n Switch,\n Match,\n} from \"solid-js\";\nimport {\n createDialog,\n createOverlayTrigger,\n focusSafely,\n type AriaDialogProps,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n createOverlayTriggerState,\n type OverlayTriggerState,\n} from \"@proyecto-viviana/solid-stately\";\nimport { DialogTriggerContext, useOverlayTriggerState } from \"./contexts\";\nimport { ButtonContext } from \"./Button\";\nimport {\n DEFAULT_SLOT,\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\n\nexport interface DialogRenderProps {\n /** Function to close the dialog */\n close: () => void;\n}\n\nexport interface DialogProps extends Omit<AriaDialogProps, \"class\" | \"style\">, SlotProps {\n /** The children of the component - can be JSX or render function. */\n children?: RenderChildren<DialogRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<DialogRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<DialogRenderProps>;\n /** Callback when dialog should close */\n onClose?: () => void;\n}\n\nexport interface DialogTriggerProps {\n /** The children - should include a trigger and modal/popover content. */\n children: JSX.Element;\n /** Whether the dialog is open (controlled). */\n isOpen?: boolean;\n /** Whether the dialog is open by default (uncontrolled). */\n defaultOpen?: boolean;\n /** Callback when open state changes. */\n onOpenChange?: (isOpen: boolean) => void;\n}\n\ninterface DialogContextValue {\n close: () => void;\n titleId?: string;\n}\n\nexport const DialogContext = createContext<DialogContextValue | null>(null);\n\nexport { DialogTriggerContext, useDialogTrigger } from \"./contexts\";\n\n/**\n * A DialogTrigger opens a dialog when a trigger element is pressed.\n * Children should include a trigger element (e.g. Button) and the dialog content.\n */\nexport function DialogTrigger(props: DialogTriggerProps): JSX.Element {\n const [local] = splitProps(props, [\"isOpen\", \"defaultOpen\", \"onOpenChange\"]);\n\n const state = createOverlayTriggerState({\n get isOpen() {\n return local.isOpen;\n },\n get defaultOpen() {\n return local.defaultOpen;\n },\n onOpenChange: local.onOpenChange,\n });\n\n let triggerRef: HTMLElement | null = null;\n const triggerId = createUniqueId();\n\n // Create overlay trigger props so registered trigger components can expose\n // the same expanded/controls relationship as React Aria DialogTrigger.\n const triggerAria = createOverlayTrigger({ type: \"dialog\" }, state, () => triggerRef);\n\n const restoreFocusToTrigger = () => {\n const trigger = triggerRef;\n if (!trigger?.isConnected) return;\n\n const win = trigger.ownerDocument.defaultView ?? window;\n win.requestAnimationFrame(() => {\n win.requestAnimationFrame(() => {\n if (trigger.isConnected && !state.isOpen()) {\n focusSafely(trigger);\n }\n });\n });\n };\n\n const stateWithFocusRestore: OverlayTriggerState = {\n isOpen: state.isOpen,\n setOpen: (isOpen) => {\n state.setOpen(isOpen);\n if (!isOpen) {\n restoreFocusToTrigger();\n }\n },\n open: state.open,\n close: () => {\n state.close();\n restoreFocusToTrigger();\n },\n toggle: () => {\n const wasOpen = state.isOpen();\n state.toggle();\n if (wasOpen) {\n restoreFocusToTrigger();\n }\n },\n };\n\n const setTriggerRef = (el: HTMLElement | null) => {\n if (!el) return;\n if (!triggerRef || !triggerRef.isConnected) {\n triggerRef = el;\n }\n };\n\n // Context value - memoized to avoid unnecessary re-renders\n const contextValue = createMemo(() => ({\n state: stateWithFocusRestore,\n triggerRef: () => triggerRef,\n setTriggerRef,\n triggerId,\n triggerProps: triggerAria.triggerProps,\n overlayProps: triggerAria.overlayProps,\n }));\n\n // In SolidJS, we simply render children directly within the provider\n return (\n <DialogTriggerContext.Provider value={contextValue()}>\n {props.children}\n </DialogTriggerContext.Provider>\n );\n}\n\n/**\n * A dialog is an overlay shown above other content in an application.\n */\nexport function Dialog(props: DialogProps): JSX.Element {\n const [local, ariaProps, rest] = splitProps(\n props,\n [\"class\", \"style\", \"slot\", \"onClose\"],\n [\"role\", \"aria-label\", \"aria-labelledby\", \"aria-describedby\"],\n );\n\n let dialogRef!: HTMLElement;\n\n // Get trigger context for aria-labelledby fallback\n const triggerContext = useContext(DialogTriggerContext);\n\n // createDialog returns dialogProps AND titleProps (with the id for the Heading)\n const { dialogProps, titleProps } = createDialog(\n {\n get role() {\n return ariaProps.role;\n },\n get \"aria-label\"() {\n return ariaProps[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return ariaProps[\"aria-labelledby\"];\n },\n get \"aria-describedby\"() {\n return ariaProps[\"aria-describedby\"];\n },\n },\n () => dialogRef,\n );\n\n // Get titleId from titleProps - this links Dialog's aria-labelledby to Heading's id\n const titleId = () => titleProps()?.id as string | undefined;\n\n // Get close function from OverlayTriggerState context or onClose prop\n const overlayState = useOverlayTriggerState();\n\n const close = () => {\n local.onClose?.();\n if (overlayState) {\n overlayState.close();\n return;\n }\n triggerContext?.state.close();\n };\n\n createEffect(() => {\n if (!dialogRef || ariaProps[\"aria-label\"] || ariaProps[\"aria-labelledby\"]) return;\n const labelledBy = dialogRef.getAttribute(\"aria-labelledby\");\n if (labelledBy && dialogRef.ownerDocument.getElementById(labelledBy)) return;\n\n const trigger = triggerContext?.triggerRef();\n if (trigger?.id) {\n dialogRef.setAttribute(\"aria-labelledby\", trigger.id);\n }\n });\n\n const renderValues = createMemo<DialogRenderProps>(() => ({\n close,\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-Dialog\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n\n return (\n <DialogContext.Provider value={{ close, titleId: titleId() }}>\n <section\n {...dialogProps()}\n {...domProps()}\n ref={dialogRef}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n >\n <ButtonContext.Provider\n value={{ slots: { [DEFAULT_SLOT]: {}, close: { onPress: () => close() } } }}\n >\n {renderProps.renderChildren()}\n </ButtonContext.Provider>\n </section>\n </DialogContext.Provider>\n );\n}\n\nexport interface HeadingProps {\n /** The children of the heading. */\n children: JSX.Element;\n /** The CSS className. */\n class?: string;\n /** The heading level (1-6). Defaults to 2. */\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n /** The slot to render into. */\n slot?: string;\n}\n\n/**\n * Heading element for dialog title.\n * When rendered inside a Dialog, automatically gets the titleProps.\n */\nexport function Heading(props: HeadingProps): JSX.Element {\n const dialogContext = useContext(DialogContext);\n const level = () => props.level ?? 2;\n const id = () => dialogContext?.titleId;\n let headingRef: HTMLHeadingElement | undefined;\n\n createEffect(() => {\n const el = headingRef;\n if (!el) return;\n\n const contextId = id();\n if (contextId) {\n el.id = contextId;\n return;\n }\n\n if (!el.id) {\n const dialog = el.closest('[role=\"dialog\"],[role=\"alertdialog\"]');\n const labelledBy = dialog?.getAttribute(\"aria-labelledby\");\n if (labelledBy && !el.ownerDocument.getElementById(labelledBy)) {\n el.id = labelledBy;\n }\n }\n });\n\n return (\n <Switch>\n <Match when={level() === 1}>\n <h1 ref={headingRef} id={id()} class={props.class}>\n {props.children}\n </h1>\n </Match>\n <Match when={level() === 2}>\n <h2 ref={headingRef} id={id()} class={props.class}>\n {props.children}\n </h2>\n </Match>\n <Match when={level() === 3}>\n <h3 ref={headingRef} id={id()} class={props.class}>\n {props.children}\n </h3>\n </Match>\n <Match when={level() === 4}>\n <h4 ref={headingRef} id={id()} class={props.class}>\n {props.children}\n </h4>\n </Match>\n <Match when={level() === 5}>\n <h5 ref={headingRef} id={id()} class={props.class}>\n {props.children}\n </h5>\n </Match>\n <Match when={level() === 6}>\n <h6 ref={headingRef} id={id()} class={props.class}>\n {props.children}\n </h6>\n </Match>\n </Switch>\n );\n}\n\n// Keep backward compatibility\nexport { Heading as DialogHeading };\n"],"mappings":"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"}
|