@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
package/dist/Popover.js
ADDED
|
@@ -0,0 +1,464 @@
|
|
|
1
|
+
import { dataAttr, filterDOMProps, useIsHydrated, useRenderProps } from "./utils.js";
|
|
2
|
+
import { o as usePopoverTrigger, r as PopoverTriggerContext, t as DialogTriggerContext } from "./contexts.js";
|
|
3
|
+
import { Portal, addEventListener, className, createComponent, delegateEvents, effect, getNextElement, getNextMarker, insert, memo, mergeProps, runHydrationEvents, setAttribute, spread, style, template, use } from "solid-js/web";
|
|
4
|
+
import { Show, createContext, createEffect, createMemo, createSignal, createUniqueId, onCleanup, splitProps, useContext } from "solid-js";
|
|
5
|
+
import { FocusScope, createOverlayTrigger, createPopover, useUNSAFE_PortalContext, visuallyHiddenStyles } from "@proyecto-viviana/solidaria";
|
|
6
|
+
import { createOverlayTriggerState } from "@proyecto-viviana/solid-stately";
|
|
7
|
+
//#region src/Popover.tsx
|
|
8
|
+
/**
|
|
9
|
+
* Popover component for solidaria-components
|
|
10
|
+
*
|
|
11
|
+
* A headless popover component that positions relative to a trigger element.
|
|
12
|
+
* Port of react-aria-components Popover.
|
|
13
|
+
*/
|
|
14
|
+
var _tmpl$ = /*#__PURE__*/ template(`<button type=button aria-label=Dismiss tabindex=-1>`), _tmpl$2 = /*#__PURE__*/ template(`<div><!$><!/><!$><!/><!$><!/>`), _tmpl$3 = /*#__PURE__*/ template(`<div data-testid=underlay>`), _tmpl$4 = /*#__PURE__*/ template(`<div style=display:contents>`), _tmpl$5 = /*#__PURE__*/ template(`<div>`);
|
|
15
|
+
const PopoverContext = createContext(null);
|
|
16
|
+
const PopoverGroupContext = createContext(null);
|
|
17
|
+
function PopoverDismissButton(props) {
|
|
18
|
+
return (() => {
|
|
19
|
+
var _el$ = getNextElement(_tmpl$);
|
|
20
|
+
addEventListener(_el$, "click", props.onDismiss, true);
|
|
21
|
+
effect((_$p) => style(_el$, visuallyHiddenStyles, _$p));
|
|
22
|
+
runHydrationEvents();
|
|
23
|
+
return _el$;
|
|
24
|
+
})();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* A PopoverTrigger opens a popover when a trigger element is pressed.
|
|
28
|
+
* Children should include a trigger element (e.g. Button) and the Popover.
|
|
29
|
+
*/
|
|
30
|
+
function PopoverTrigger(props) {
|
|
31
|
+
const [local] = splitProps(props, [
|
|
32
|
+
"isOpen",
|
|
33
|
+
"defaultOpen",
|
|
34
|
+
"onOpenChange"
|
|
35
|
+
]);
|
|
36
|
+
const state = createOverlayTriggerState({
|
|
37
|
+
get isOpen() {
|
|
38
|
+
return local.isOpen;
|
|
39
|
+
},
|
|
40
|
+
get defaultOpen() {
|
|
41
|
+
return local.defaultOpen;
|
|
42
|
+
},
|
|
43
|
+
onOpenChange: local.onOpenChange
|
|
44
|
+
});
|
|
45
|
+
let triggerRef = null;
|
|
46
|
+
const triggerId = createUniqueId();
|
|
47
|
+
const triggerAria = createOverlayTrigger({ type: "dialog" }, state, () => triggerRef);
|
|
48
|
+
const contextValue = createMemo(() => ({
|
|
49
|
+
state: {
|
|
50
|
+
isOpen: () => state.isOpen(),
|
|
51
|
+
open: () => state.open(),
|
|
52
|
+
close: () => state.close(),
|
|
53
|
+
toggle: () => state.toggle()
|
|
54
|
+
},
|
|
55
|
+
triggerRef: () => triggerRef,
|
|
56
|
+
setTriggerRef: (el) => {
|
|
57
|
+
if (!el) return;
|
|
58
|
+
if (!triggerRef || !triggerRef.isConnected) triggerRef = el;
|
|
59
|
+
},
|
|
60
|
+
triggerId,
|
|
61
|
+
triggerProps: triggerAria.triggerProps,
|
|
62
|
+
overlayProps: triggerAria.overlayProps,
|
|
63
|
+
trigger: "PopoverTrigger"
|
|
64
|
+
}));
|
|
65
|
+
return createComponent(PopoverTriggerContext.Provider, {
|
|
66
|
+
get value() {
|
|
67
|
+
return contextValue();
|
|
68
|
+
},
|
|
69
|
+
get children() {
|
|
70
|
+
return props.children;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A popover is an overlay element positioned relative to a trigger.
|
|
76
|
+
*/
|
|
77
|
+
function Popover(props) {
|
|
78
|
+
const [local, rest] = splitProps(props, [
|
|
79
|
+
"class",
|
|
80
|
+
"style",
|
|
81
|
+
"trigger",
|
|
82
|
+
"triggerRef",
|
|
83
|
+
"placement",
|
|
84
|
+
"containerPadding",
|
|
85
|
+
"offset",
|
|
86
|
+
"crossOffset",
|
|
87
|
+
"shouldFlip",
|
|
88
|
+
"maxHeight",
|
|
89
|
+
"boundaryElement",
|
|
90
|
+
"getTargetRect",
|
|
91
|
+
"arrowRef",
|
|
92
|
+
"scrollRef",
|
|
93
|
+
"isNonModal",
|
|
94
|
+
"isKeyboardDismissDisabled",
|
|
95
|
+
"shouldCloseOnInteractOutside",
|
|
96
|
+
"isOpen",
|
|
97
|
+
"defaultOpen",
|
|
98
|
+
"onOpenChange",
|
|
99
|
+
"autoFocus",
|
|
100
|
+
"isEntering",
|
|
101
|
+
"isExiting"
|
|
102
|
+
]);
|
|
103
|
+
let popoverRef;
|
|
104
|
+
const [groupRef, setGroupRef] = createSignal(null);
|
|
105
|
+
const isHydrated = useIsHydrated();
|
|
106
|
+
const triggerContext = useContext(PopoverTriggerContext);
|
|
107
|
+
const dialogTriggerContext = useContext(DialogTriggerContext);
|
|
108
|
+
const popoverGroupContext = useContext(PopoverGroupContext);
|
|
109
|
+
const resolvedTrigger = () => local.trigger ?? triggerContext?.trigger ?? (dialogTriggerContext ? "DialogTrigger" : void 0);
|
|
110
|
+
const isSubPopover = () => resolvedTrigger() === "SubmenuTrigger" && popoverGroupContext != null;
|
|
111
|
+
const [internalOpen, setInternalOpen] = createSignal(local.defaultOpen ?? false);
|
|
112
|
+
const isOpen = () => {
|
|
113
|
+
if (local.isOpen !== void 0) return local.isOpen;
|
|
114
|
+
if (triggerContext) return triggerContext.state.isOpen();
|
|
115
|
+
if (dialogTriggerContext) return dialogTriggerContext.state.isOpen();
|
|
116
|
+
return internalOpen();
|
|
117
|
+
};
|
|
118
|
+
const close = () => {
|
|
119
|
+
if (local.isOpen !== void 0) local.onOpenChange?.(false);
|
|
120
|
+
else if (triggerContext) {
|
|
121
|
+
triggerContext.state.close();
|
|
122
|
+
local.onOpenChange?.(false);
|
|
123
|
+
} else if (dialogTriggerContext) {
|
|
124
|
+
dialogTriggerContext.state.close();
|
|
125
|
+
local.onOpenChange?.(false);
|
|
126
|
+
} else {
|
|
127
|
+
setInternalOpen(false);
|
|
128
|
+
local.onOpenChange?.(false);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
const getTriggerRef = () => {
|
|
132
|
+
if (local.triggerRef) return local.triggerRef();
|
|
133
|
+
if (triggerContext) return triggerContext.triggerRef();
|
|
134
|
+
if (dialogTriggerContext) return dialogTriggerContext.triggerRef();
|
|
135
|
+
return null;
|
|
136
|
+
};
|
|
137
|
+
const popoverAria = createPopover({
|
|
138
|
+
triggerRef: getTriggerRef,
|
|
139
|
+
popoverRef: () => popoverRef ?? null,
|
|
140
|
+
groupRef: () => isSubPopover() ? popoverGroupContext?.() ?? null : groupRef(),
|
|
141
|
+
get placement() {
|
|
142
|
+
return local.placement;
|
|
143
|
+
},
|
|
144
|
+
get containerPadding() {
|
|
145
|
+
return local.containerPadding;
|
|
146
|
+
},
|
|
147
|
+
get offset() {
|
|
148
|
+
return local.offset ?? 8;
|
|
149
|
+
},
|
|
150
|
+
get crossOffset() {
|
|
151
|
+
return local.crossOffset;
|
|
152
|
+
},
|
|
153
|
+
get shouldFlip() {
|
|
154
|
+
return local.shouldFlip;
|
|
155
|
+
},
|
|
156
|
+
get maxHeight() {
|
|
157
|
+
return local.maxHeight;
|
|
158
|
+
},
|
|
159
|
+
get boundaryElement() {
|
|
160
|
+
return local.boundaryElement;
|
|
161
|
+
},
|
|
162
|
+
get getTargetRect() {
|
|
163
|
+
return local.getTargetRect;
|
|
164
|
+
},
|
|
165
|
+
get arrowRef() {
|
|
166
|
+
return local.arrowRef;
|
|
167
|
+
},
|
|
168
|
+
get scrollRef() {
|
|
169
|
+
return local.scrollRef;
|
|
170
|
+
},
|
|
171
|
+
get isNonModal() {
|
|
172
|
+
return local.isNonModal;
|
|
173
|
+
},
|
|
174
|
+
get isKeyboardDismissDisabled() {
|
|
175
|
+
return local.isKeyboardDismissDisabled;
|
|
176
|
+
},
|
|
177
|
+
get shouldCloseOnInteractOutside() {
|
|
178
|
+
return local.shouldCloseOnInteractOutside;
|
|
179
|
+
},
|
|
180
|
+
get trigger() {
|
|
181
|
+
return resolvedTrigger();
|
|
182
|
+
}
|
|
183
|
+
}, {
|
|
184
|
+
isOpen,
|
|
185
|
+
open: () => {
|
|
186
|
+
if (local.isOpen !== void 0) local.onOpenChange?.(true);
|
|
187
|
+
else if (triggerContext) {
|
|
188
|
+
triggerContext.state.open();
|
|
189
|
+
local.onOpenChange?.(true);
|
|
190
|
+
} else if (dialogTriggerContext) {
|
|
191
|
+
dialogTriggerContext.state.open();
|
|
192
|
+
local.onOpenChange?.(true);
|
|
193
|
+
} else {
|
|
194
|
+
setInternalOpen(true);
|
|
195
|
+
local.onOpenChange?.(true);
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
close,
|
|
199
|
+
toggle: () => {
|
|
200
|
+
if (isOpen()) close();
|
|
201
|
+
else if (local.isOpen !== void 0) local.onOpenChange?.(true);
|
|
202
|
+
else if (triggerContext) triggerContext.state.toggle();
|
|
203
|
+
else if (dialogTriggerContext) dialogTriggerContext.state.toggle();
|
|
204
|
+
else {
|
|
205
|
+
setInternalOpen(true);
|
|
206
|
+
local.onOpenChange?.(true);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
const renderValues = createMemo(() => ({
|
|
211
|
+
trigger: resolvedTrigger() ?? null,
|
|
212
|
+
placement: popoverAria.placement(),
|
|
213
|
+
isEntering: local.isEntering ?? false,
|
|
214
|
+
isExiting: local.isExiting ?? false
|
|
215
|
+
}));
|
|
216
|
+
const renderProps = useRenderProps({
|
|
217
|
+
get children() {
|
|
218
|
+
return props.children;
|
|
219
|
+
},
|
|
220
|
+
class: local.class,
|
|
221
|
+
style: local.style,
|
|
222
|
+
defaultClassName: "solidaria-Popover"
|
|
223
|
+
}, renderValues);
|
|
224
|
+
const [triggerWidth, setTriggerWidth] = createSignal();
|
|
225
|
+
const hasExplicitTriggerWidth = () => {
|
|
226
|
+
return renderProps.style()?.["--trigger-width"] != null;
|
|
227
|
+
};
|
|
228
|
+
const updateTriggerWidth = () => {
|
|
229
|
+
const trigger = getTriggerRef();
|
|
230
|
+
if (!trigger || hasExplicitTriggerWidth()) return;
|
|
231
|
+
setTriggerWidth(`${trigger.getBoundingClientRect().width}px`);
|
|
232
|
+
};
|
|
233
|
+
createEffect(() => {
|
|
234
|
+
if (!isOpen()) return;
|
|
235
|
+
updateTriggerWidth();
|
|
236
|
+
const trigger = getTriggerRef();
|
|
237
|
+
if (!trigger || hasExplicitTriggerWidth() || typeof ResizeObserver === "undefined") return;
|
|
238
|
+
const observer = new ResizeObserver(updateTriggerWidth);
|
|
239
|
+
observer.observe(trigger);
|
|
240
|
+
onCleanup(() => observer.disconnect());
|
|
241
|
+
});
|
|
242
|
+
const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
|
|
243
|
+
const overlayId = () => {
|
|
244
|
+
return rest.id ?? triggerContext?.overlayProps?.id ?? dialogTriggerContext?.overlayProps?.id;
|
|
245
|
+
};
|
|
246
|
+
const cleanPopoverProps = () => {
|
|
247
|
+
const { style: _style, ref: _ref, ...remaining } = popoverAria.popoverProps;
|
|
248
|
+
return remaining;
|
|
249
|
+
};
|
|
250
|
+
const mergedStyle = () => {
|
|
251
|
+
const ariaStyle = popoverAria.popoverProps.style;
|
|
252
|
+
const renderStyle = renderProps.style() || {};
|
|
253
|
+
return {
|
|
254
|
+
...ariaStyle,
|
|
255
|
+
...renderStyle,
|
|
256
|
+
"--trigger-width": renderStyle["--trigger-width"] ?? triggerWidth()
|
|
257
|
+
};
|
|
258
|
+
};
|
|
259
|
+
const shouldBeDialog = () => !local.isNonModal || resolvedTrigger() === "SubmenuTrigger";
|
|
260
|
+
const shouldContainFocus = () => {
|
|
261
|
+
if (!shouldBeDialog()) return false;
|
|
262
|
+
const trigger = resolvedTrigger();
|
|
263
|
+
return trigger !== "MenuTrigger" && trigger !== "SubmenuTrigger";
|
|
264
|
+
};
|
|
265
|
+
const portalContext = useUNSAFE_PortalContext();
|
|
266
|
+
const portalContainer = () => {
|
|
267
|
+
if (isSubPopover()) return popoverGroupContext?.() ?? portalContext.getContainer?.() ?? void 0;
|
|
268
|
+
return portalContext.getContainer?.() ?? void 0;
|
|
269
|
+
};
|
|
270
|
+
createEffect(() => {
|
|
271
|
+
if (!isOpen() || !shouldBeDialog()) return;
|
|
272
|
+
if ((local.autoFocus ?? true) === false) return;
|
|
273
|
+
if (!popoverRef) return;
|
|
274
|
+
if (resolvedTrigger() === "SubmenuTrigger") return;
|
|
275
|
+
let timeout;
|
|
276
|
+
let frame;
|
|
277
|
+
const focusIfNeeded = () => {
|
|
278
|
+
if (!isOpen() || !shouldBeDialog()) return;
|
|
279
|
+
if (!popoverRef || resolvedTrigger() === "SubmenuTrigger") return;
|
|
280
|
+
if (document.activeElement === popoverRef || popoverRef.contains(document.activeElement)) return;
|
|
281
|
+
popoverRef.focus();
|
|
282
|
+
};
|
|
283
|
+
const scheduleFocus = () => {
|
|
284
|
+
timeout = window.setTimeout(focusIfNeeded, 0);
|
|
285
|
+
};
|
|
286
|
+
if (typeof window.requestAnimationFrame === "function") frame = window.requestAnimationFrame(scheduleFocus);
|
|
287
|
+
else scheduleFocus();
|
|
288
|
+
onCleanup(() => {
|
|
289
|
+
if (frame !== void 0) window.cancelAnimationFrame(frame);
|
|
290
|
+
if (timeout !== void 0) window.clearTimeout(timeout);
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
createEffect(() => {
|
|
294
|
+
if (!isOpen()) return;
|
|
295
|
+
if (local.isKeyboardDismissDisabled) return;
|
|
296
|
+
const onKeyDown = (event) => {
|
|
297
|
+
if (event.key !== "Escape") return;
|
|
298
|
+
if (event.defaultPrevented) return;
|
|
299
|
+
close();
|
|
300
|
+
};
|
|
301
|
+
document.addEventListener("keydown", onKeyDown);
|
|
302
|
+
onCleanup(() => document.removeEventListener("keydown", onKeyDown));
|
|
303
|
+
});
|
|
304
|
+
const overlay = () => createComponent(PopoverContext.Provider, {
|
|
305
|
+
get value() {
|
|
306
|
+
return {
|
|
307
|
+
placement: popoverAria.placement,
|
|
308
|
+
arrowProps: () => popoverAria.arrowProps
|
|
309
|
+
};
|
|
310
|
+
},
|
|
311
|
+
get children() {
|
|
312
|
+
return createComponent(FocusScope, {
|
|
313
|
+
get contain() {
|
|
314
|
+
return shouldContainFocus();
|
|
315
|
+
},
|
|
316
|
+
restoreFocus: true,
|
|
317
|
+
get children() {
|
|
318
|
+
var _el$2 = getNextElement(_tmpl$2), _el$3 = _el$2.firstChild, [_el$4, _co$] = getNextMarker(_el$3.nextSibling), _el$5 = _el$4.nextSibling, [_el$6, _co$2] = getNextMarker(_el$5.nextSibling), _el$7 = _el$6.nextSibling, [_el$8, _co$3] = getNextMarker(_el$7.nextSibling);
|
|
319
|
+
var _ref$ = popoverRef;
|
|
320
|
+
typeof _ref$ === "function" ? use(_ref$, _el$2) : popoverRef = _el$2;
|
|
321
|
+
spread(_el$2, mergeProps(domProps, cleanPopoverProps, {
|
|
322
|
+
get id() {
|
|
323
|
+
return overlayId();
|
|
324
|
+
},
|
|
325
|
+
get role() {
|
|
326
|
+
return shouldBeDialog() ? "dialog" : void 0;
|
|
327
|
+
},
|
|
328
|
+
get tabIndex() {
|
|
329
|
+
return shouldBeDialog() ? -1 : void 0;
|
|
330
|
+
},
|
|
331
|
+
get ["class"]() {
|
|
332
|
+
return renderProps.class();
|
|
333
|
+
},
|
|
334
|
+
get style() {
|
|
335
|
+
return mergedStyle();
|
|
336
|
+
},
|
|
337
|
+
get ["data-trigger"]() {
|
|
338
|
+
return resolvedTrigger();
|
|
339
|
+
},
|
|
340
|
+
get ["data-placement"]() {
|
|
341
|
+
return popoverAria.placement();
|
|
342
|
+
},
|
|
343
|
+
get ["data-entering"]() {
|
|
344
|
+
return dataAttr(local.isEntering);
|
|
345
|
+
},
|
|
346
|
+
get ["data-exiting"]() {
|
|
347
|
+
return dataAttr(local.isExiting);
|
|
348
|
+
}
|
|
349
|
+
}), false, true);
|
|
350
|
+
insert(_el$2, createComponent(Show, {
|
|
351
|
+
get when() {
|
|
352
|
+
return !local.isNonModal;
|
|
353
|
+
},
|
|
354
|
+
get children() {
|
|
355
|
+
return createComponent(PopoverDismissButton, { onDismiss: close });
|
|
356
|
+
}
|
|
357
|
+
}), _el$4, _co$);
|
|
358
|
+
insert(_el$2, () => renderProps.renderChildren(), _el$6, _co$2);
|
|
359
|
+
insert(_el$2, createComponent(PopoverDismissButton, { onDismiss: close }), _el$8, _co$3);
|
|
360
|
+
runHydrationEvents();
|
|
361
|
+
return _el$2;
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
const underlay = () => (() => {
|
|
367
|
+
var _el$9 = getNextElement(_tmpl$3);
|
|
368
|
+
spread(_el$9, mergeProps(() => popoverAria.underlayProps, { "style": {
|
|
369
|
+
position: "fixed",
|
|
370
|
+
inset: 0
|
|
371
|
+
} }), false, false);
|
|
372
|
+
runHydrationEvents();
|
|
373
|
+
return _el$9;
|
|
374
|
+
})();
|
|
375
|
+
return createComponent(Show, {
|
|
376
|
+
get when() {
|
|
377
|
+
return memo(() => !!isHydrated())() && (isOpen() || local.isExiting);
|
|
378
|
+
},
|
|
379
|
+
get children() {
|
|
380
|
+
return createComponent(Portal, {
|
|
381
|
+
get mount() {
|
|
382
|
+
return portalContainer();
|
|
383
|
+
},
|
|
384
|
+
get children() {
|
|
385
|
+
return [createComponent(Show, {
|
|
386
|
+
get when() {
|
|
387
|
+
return memo(() => !!(!local.isNonModal && !isSubPopover()))() && isOpen();
|
|
388
|
+
},
|
|
389
|
+
get children() {
|
|
390
|
+
return underlay();
|
|
391
|
+
}
|
|
392
|
+
}), createComponent(Show, {
|
|
393
|
+
get when() {
|
|
394
|
+
return isSubPopover();
|
|
395
|
+
},
|
|
396
|
+
get fallback() {
|
|
397
|
+
return (() => {
|
|
398
|
+
var _el$0 = getNextElement(_tmpl$4);
|
|
399
|
+
use(setGroupRef, _el$0);
|
|
400
|
+
insert(_el$0, createComponent(PopoverGroupContext.Provider, {
|
|
401
|
+
value: () => groupRef(),
|
|
402
|
+
get children() {
|
|
403
|
+
return overlay();
|
|
404
|
+
}
|
|
405
|
+
}));
|
|
406
|
+
return _el$0;
|
|
407
|
+
})();
|
|
408
|
+
},
|
|
409
|
+
get children() {
|
|
410
|
+
return overlay();
|
|
411
|
+
}
|
|
412
|
+
})];
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* An arrow element that points towards the trigger.
|
|
420
|
+
*/
|
|
421
|
+
function OverlayArrow(props) {
|
|
422
|
+
const popoverContext = useContext(PopoverContext);
|
|
423
|
+
const placement = () => popoverContext?.placement() ?? null;
|
|
424
|
+
const mergedStyle = () => {
|
|
425
|
+
const currentPlacement = placement();
|
|
426
|
+
const style = {
|
|
427
|
+
position: "absolute",
|
|
428
|
+
transform: currentPlacement === "top" || currentPlacement === "bottom" ? "translateX(-50%)" : "translateY(-50%)"
|
|
429
|
+
};
|
|
430
|
+
if (currentPlacement != null) style[currentPlacement] = "100%";
|
|
431
|
+
const contextStyle = (popoverContext?.arrowProps())?.style;
|
|
432
|
+
if (typeof contextStyle?.left === "string") style.left = contextStyle.left;
|
|
433
|
+
if (typeof contextStyle?.top === "string") style.top = contextStyle.top;
|
|
434
|
+
const localStyle = props.style && !(typeof CSSStyleDeclaration !== "undefined" && props.style instanceof CSSStyleDeclaration) ? props.style : void 0;
|
|
435
|
+
return {
|
|
436
|
+
...style,
|
|
437
|
+
...localStyle
|
|
438
|
+
};
|
|
439
|
+
};
|
|
440
|
+
return (() => {
|
|
441
|
+
var _el$1 = getNextElement(_tmpl$5);
|
|
442
|
+
insert(_el$1, (() => {
|
|
443
|
+
var _c$ = memo(() => !!props.render);
|
|
444
|
+
return () => _c$() ? props.render() : props.children;
|
|
445
|
+
})());
|
|
446
|
+
effect((_p$) => {
|
|
447
|
+
var _v$ = props.class, _v$2 = mergedStyle(), _v$3 = placement();
|
|
448
|
+
_v$ !== _p$.e && className(_el$1, _p$.e = _v$);
|
|
449
|
+
_p$.t = style(_el$1, _v$2, _p$.t);
|
|
450
|
+
_v$3 !== _p$.a && setAttribute(_el$1, "data-placement", _p$.a = _v$3);
|
|
451
|
+
return _p$;
|
|
452
|
+
}, {
|
|
453
|
+
e: void 0,
|
|
454
|
+
t: void 0,
|
|
455
|
+
a: void 0
|
|
456
|
+
});
|
|
457
|
+
return _el$1;
|
|
458
|
+
})();
|
|
459
|
+
}
|
|
460
|
+
delegateEvents(["click"]);
|
|
461
|
+
//#endregion
|
|
462
|
+
export { OverlayArrow, Popover, Popover as default, PopoverContext, PopoverTrigger, PopoverTriggerContext, usePopoverTrigger };
|
|
463
|
+
|
|
464
|
+
//# sourceMappingURL=Popover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.js","names":["JSX","createContext","createEffect","createMemo","createSignal","createUniqueId","onCleanup","splitProps","useContext","Show","Portal","createOverlayTrigger","createPopover","FocusScope","useUNSAFE_PortalContext","visuallyHiddenStyles","AriaLabelingProps","Placement","PlacementAxis","createOverlayTriggerState","RenderChildren","ClassNameOrFunction","StyleOrFunction","SlotProps","useRenderProps","filterDOMProps","dataAttr","useIsHydrated","DialogTriggerContext","PopoverTriggerContext","PopoverRenderProps","trigger","placement","isEntering","isExiting","PopoverProps","children","class","style","triggerRef","Element","containerPadding","offset","crossOffset","shouldFlip","maxHeight","boundaryElement","getTargetRect","target","DOMRect","arrowRef","scrollRef","isNonModal","isKeyboardDismissDisabled","shouldCloseOnInteractOutside","element","isOpen","defaultOpen","onOpenChange","autoFocus","PopoverTriggerProps","usePopoverTrigger","PopoverTriggerContextValue","PopoverContextValue","arrowProps","HTMLAttributes","HTMLElement","PopoverContext","PopoverGroupContext","PopoverDismissButton","props","onDismiss","_el$","_$getNextElement","_tmpl$","_$addEventListener","_$effect","_$p","_$style","_$runHydrationEvents","PopoverTrigger","local","state","triggerId","triggerAria","type","contextValue","open","close","toggle","setTriggerRef","el","isConnected","triggerProps","overlayProps","_$createComponent","Provider","value","Popover","rest","popoverRef","HTMLDivElement","groupRef","setGroupRef","isHydrated","triggerContext","dialogTriggerContext","popoverGroupContext","resolvedTrigger","undefined","isSubPopover","internalOpen","setInternalOpen","getTriggerRef","popoverAria","renderValues","renderProps","defaultClassName","triggerWidth","setTriggerWidth","hasExplicitTriggerWidth","CSSProperties","Record","updateTriggerWidth","getBoundingClientRect","width","ResizeObserver","observer","observe","disconnect","domProps","global","overlayId","restId","id","cleanPopoverProps","_style","ref","_ref","remaining","popoverProps","mergedStyle","ariaStyle","renderStyle","shouldBeDialog","shouldContainFocus","portalContext","portalContainer","getContainer","timeout","frame","focusIfNeeded","document","activeElement","contains","focus","scheduleFocus","window","setTimeout","requestAnimationFrame","cancelAnimationFrame","clearTimeout","onKeyDown","event","KeyboardEvent","key","defaultPrevented","addEventListener","removeEventListener","overlay","contain","restoreFocus","_el$2","_tmpl$2","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$5","_el$6","_co$2","_el$7","_el$8","_co$3","_ref$","_$use","_$spread","_$mergeProps","role","tabIndex","data-trigger","data-placement","data-entering","data-exiting","_$insert","when","renderChildren","underlay","_el$9","_tmpl$3","underlayProps","position","inset","_$memo","mount","fallback","_el$0","_tmpl$4","OverlayArrowProps","render","OverlayArrow","popoverContext","currentPlacement","transform","contextStyle","left","top","localStyle","CSSStyleDeclaration","_el$1","_tmpl$5","_c$","_p$","_v$","_v$2","_v$3","e","_$className","t","a","_$setAttribute","_$delegateEvents"],"sources":["../src/Popover.tsx"],"sourcesContent":["/**\n * Popover component for solidaria-components\n *\n * A headless popover component that positions relative to a trigger element.\n * Port of react-aria-components Popover.\n */\n\nimport {\n type JSX,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n onCleanup,\n splitProps,\n useContext,\n Show,\n} from \"solid-js\";\nimport { Portal } from \"solid-js/web\";\nimport {\n createOverlayTrigger,\n createPopover,\n FocusScope,\n useUNSAFE_PortalContext,\n visuallyHiddenStyles,\n type AriaLabelingProps,\n type Placement,\n type PlacementAxis,\n} from \"@proyecto-viviana/solidaria\";\nimport { createOverlayTriggerState } from \"@proyecto-viviana/solid-stately\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n dataAttr,\n useIsHydrated,\n} from \"./utils\";\nimport { DialogTriggerContext, PopoverTriggerContext } from \"./contexts\";\n\nexport interface PopoverRenderProps {\n /**\n * The name of the component that triggered the popover.\n */\n trigger: string | null;\n /**\n * The placement of the popover relative to the trigger.\n */\n placement: PlacementAxis | null;\n /**\n * Whether the popover is currently entering (for animations).\n */\n isEntering: boolean;\n /**\n * Whether the popover is currently exiting (for animations).\n */\n isExiting: boolean;\n}\n\nexport interface PopoverProps extends SlotProps, AriaLabelingProps {\n /** The children of the component - can be JSX or render function. */\n children?: RenderChildren<PopoverRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<PopoverRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<PopoverRenderProps>;\n /**\n * The name of the component that triggered the popover.\n */\n trigger?: string;\n /**\n * The ref for the element which the popover positions itself with respect to.\n * Required when used standalone (not within a trigger component).\n */\n triggerRef?: () => Element | null;\n /**\n * The placement of the element with respect to its anchor element.\n * @default 'bottom'\n */\n placement?: Placement;\n /**\n * The placement padding that should be applied between the element and its\n * surrounding container.\n * @default 12\n */\n containerPadding?: number;\n /**\n * The additional offset applied along the main axis between the element and its\n * anchor element.\n * @default 8\n */\n offset?: number;\n /**\n * The additional offset applied along the cross axis between the element and its\n * anchor element.\n * @default 0\n */\n crossOffset?: number;\n /**\n * Whether the element should flip its orientation when there is insufficient room.\n * @default true\n */\n shouldFlip?: boolean;\n /**\n * The max height of the popover.\n */\n maxHeight?: number;\n /**\n * A boundary element for placement calculations.\n */\n boundaryElement?: Element;\n /**\n * Overrides the target element's bounding rectangle. Useful for positioning relative to\n * a specific point such as the mouse cursor (e.g. context menus) or text selection.\n *\n * @default target.getBoundingClientRect()\n * @param target - The target element.\n */\n getTargetRect?: (target: Element) => DOMRect | null | undefined;\n /**\n * A ref for the popover arrow element.\n */\n arrowRef?: () => Element | null;\n /**\n * A ref for the scrollable popover element.\n */\n scrollRef?: () => Element | null;\n /**\n * Whether the popover is non-modal (allows interaction outside).\n */\n isNonModal?: boolean;\n /**\n * Whether pressing Escape to close should be disabled.\n */\n isKeyboardDismissDisabled?: boolean;\n /**\n * Filter for which outside interactions should close the popover.\n */\n shouldCloseOnInteractOutside?: (element: Element) => boolean;\n /** Whether the popover is open (controlled). */\n isOpen?: boolean;\n /** Whether the popover opens by default (uncontrolled). */\n defaultOpen?: boolean;\n /** Handler called when the popover's open state changes. */\n onOpenChange?: (isOpen: boolean) => void;\n /**\n * Whether focus should move to the popover container on open.\n * @default true\n */\n autoFocus?: boolean;\n /** Whether the popover is entering (for animations). */\n isEntering?: boolean;\n /** Whether the popover is exiting (for animations). */\n isExiting?: boolean;\n}\n\nexport interface PopoverTriggerProps {\n /** The children - should include a trigger and popover content. */\n children: JSX.Element;\n /** Whether the popover is open (controlled). */\n isOpen?: boolean;\n /** Whether the popover is open by default (uncontrolled). */\n defaultOpen?: boolean;\n /** Callback when open state changes. */\n onOpenChange?: (isOpen: boolean) => void;\n}\n\nexport {\n PopoverTriggerContext,\n usePopoverTrigger,\n type PopoverTriggerContextValue,\n} from \"./contexts\";\n\ninterface PopoverContextValue {\n placement: () => PlacementAxis | null;\n arrowProps: () => JSX.HTMLAttributes<HTMLElement>;\n}\n\nexport const PopoverContext = createContext<PopoverContextValue | null>(null);\nconst PopoverGroupContext = createContext<(() => HTMLElement | null) | null>(null);\n\nfunction PopoverDismissButton(props: { onDismiss: () => void }): JSX.Element {\n return (\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n tabIndex={-1}\n onClick={props.onDismiss}\n style={visuallyHiddenStyles}\n />\n );\n}\n\n/**\n * A PopoverTrigger opens a popover when a trigger element is pressed.\n * Children should include a trigger element (e.g. Button) and the Popover.\n */\nexport function PopoverTrigger(props: PopoverTriggerProps): 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 const triggerAria = createOverlayTrigger({ type: \"dialog\" }, state, () => triggerRef);\n\n const contextValue = createMemo(() => ({\n state: {\n isOpen: () => state.isOpen(),\n open: () => state.open(),\n close: () => state.close(),\n toggle: () => state.toggle(),\n },\n triggerRef: () => triggerRef,\n setTriggerRef: (el: HTMLElement | null) => {\n if (!el) return;\n if (!triggerRef || !triggerRef.isConnected) {\n triggerRef = el;\n }\n },\n triggerId,\n triggerProps: triggerAria.triggerProps,\n overlayProps: triggerAria.overlayProps,\n trigger: \"PopoverTrigger\",\n }));\n\n return (\n <PopoverTriggerContext.Provider value={contextValue()}>\n {props.children}\n </PopoverTriggerContext.Provider>\n );\n}\n\n/**\n * A popover is an overlay element positioned relative to a trigger.\n */\nexport function Popover(props: PopoverProps): JSX.Element {\n // Note: do NOT early-return on the server. Returning `null` on the server and a\n // full <Show>/<Portal> tree on the client desyncs Solid's hydration walk (the\n // server emits no marker for the <Show>), which surfaces as \"Hydration Mismatch /\n // getNextElement\" in the parent (e.g. Picker). Instead, run the same structure on\n // both and gate the Portal on `useIsHydrated()` so the overlay only mounts on the\n // client after hydration — the server + first client render both produce an empty\n // <Show> marker, so hydration aligns.\n const [local, rest] = splitProps(props, [\n \"class\",\n \"style\",\n \"trigger\",\n \"triggerRef\",\n \"placement\",\n \"containerPadding\",\n \"offset\",\n \"crossOffset\",\n \"shouldFlip\",\n \"maxHeight\",\n \"boundaryElement\",\n \"getTargetRect\",\n \"arrowRef\",\n \"scrollRef\",\n \"isNonModal\",\n \"isKeyboardDismissDisabled\",\n \"shouldCloseOnInteractOutside\",\n \"isOpen\",\n \"defaultOpen\",\n \"onOpenChange\",\n \"autoFocus\",\n \"isEntering\",\n \"isExiting\",\n ]);\n\n let popoverRef!: HTMLDivElement;\n const [groupRef, setGroupRef] = createSignal<HTMLDivElement | null>(null);\n // False on the server and during hydration; true after onMount. Gates the Portal\n // so overlay content only ever renders client-side, post-hydration.\n const isHydrated = useIsHydrated();\n\n const triggerContext = useContext(PopoverTriggerContext);\n const dialogTriggerContext = useContext(DialogTriggerContext);\n const popoverGroupContext = useContext(PopoverGroupContext);\n const resolvedTrigger = () =>\n local.trigger ??\n triggerContext?.trigger ??\n (dialogTriggerContext ? \"DialogTrigger\" : undefined);\n const isSubPopover = () => resolvedTrigger() === \"SubmenuTrigger\" && popoverGroupContext != null;\n\n const [internalOpen, setInternalOpen] = createSignal(local.defaultOpen ?? false);\n\n const isOpen = (): boolean => {\n if (local.isOpen !== undefined) return local.isOpen;\n if (triggerContext) {\n return triggerContext.state.isOpen();\n }\n if (dialogTriggerContext) {\n return dialogTriggerContext.state.isOpen();\n }\n return internalOpen();\n };\n\n const close = () => {\n if (local.isOpen !== undefined) {\n local.onOpenChange?.(false);\n } else if (triggerContext) {\n triggerContext.state.close();\n local.onOpenChange?.(false);\n } else if (dialogTriggerContext) {\n dialogTriggerContext.state.close();\n local.onOpenChange?.(false);\n } else {\n setInternalOpen(false);\n local.onOpenChange?.(false);\n }\n };\n\n const getTriggerRef = () => {\n if (local.triggerRef) return local.triggerRef();\n if (triggerContext) return triggerContext.triggerRef();\n if (dialogTriggerContext) return dialogTriggerContext.triggerRef();\n return null;\n };\n\n const popoverAria = createPopover(\n {\n triggerRef: getTriggerRef,\n popoverRef: () => popoverRef ?? null,\n groupRef: () => (isSubPopover() ? (popoverGroupContext?.() ?? null) : groupRef()),\n get placement() {\n return local.placement;\n },\n get containerPadding() {\n return local.containerPadding;\n },\n get offset() {\n return local.offset ?? 8;\n },\n get crossOffset() {\n return local.crossOffset;\n },\n get shouldFlip() {\n return local.shouldFlip;\n },\n get maxHeight() {\n return local.maxHeight;\n },\n get boundaryElement() {\n return local.boundaryElement;\n },\n get getTargetRect() {\n return local.getTargetRect;\n },\n get arrowRef() {\n return local.arrowRef;\n },\n get scrollRef() {\n return local.scrollRef;\n },\n get isNonModal() {\n return local.isNonModal;\n },\n get isKeyboardDismissDisabled() {\n return local.isKeyboardDismissDisabled;\n },\n get shouldCloseOnInteractOutside() {\n return local.shouldCloseOnInteractOutside;\n },\n get trigger() {\n return resolvedTrigger();\n },\n },\n {\n isOpen,\n open: () => {\n if (local.isOpen !== undefined) {\n local.onOpenChange?.(true);\n } else if (triggerContext) {\n triggerContext.state.open();\n local.onOpenChange?.(true);\n } else if (dialogTriggerContext) {\n dialogTriggerContext.state.open();\n local.onOpenChange?.(true);\n } else {\n setInternalOpen(true);\n local.onOpenChange?.(true);\n }\n },\n close,\n toggle: () => {\n if (isOpen()) close();\n else if (local.isOpen !== undefined) {\n local.onOpenChange?.(true);\n } else if (triggerContext) {\n triggerContext.state.toggle();\n } else if (dialogTriggerContext) {\n dialogTriggerContext.state.toggle();\n } else {\n setInternalOpen(true);\n local.onOpenChange?.(true);\n }\n },\n },\n );\n\n const renderValues = createMemo<PopoverRenderProps>(() => ({\n trigger: resolvedTrigger() ?? null,\n placement: popoverAria.placement(),\n isEntering: local.isEntering ?? false,\n isExiting: local.isExiting ?? false,\n }));\n\n const renderProps = useRenderProps(\n {\n // Read children lazily. The popover content is gated behind\n // `<Show when={isHydrated() && …}>` below, so it must NOT be instantiated\n // during the component body. An eager `children: props.children` reads the\n // child getter at object-construction time, building the content template\n // (and walking `getNextElement`) before the gate — which the server, with\n // the gate closed, never emitted → hydration mismatch. The getter defers\n // the read until `renderChildren()` runs inside the gated overlay.\n get children() {\n return props.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-Popover\",\n },\n renderValues,\n );\n\n const [triggerWidth, setTriggerWidth] = createSignal<string | undefined>();\n const hasExplicitTriggerWidth = () => {\n const style = renderProps.style() as (JSX.CSSProperties & Record<string, unknown>) | undefined;\n return style?.[\"--trigger-width\"] != null;\n };\n const updateTriggerWidth = () => {\n const trigger = getTriggerRef();\n if (!trigger || hasExplicitTriggerWidth()) return;\n setTriggerWidth(`${trigger.getBoundingClientRect().width}px`);\n };\n createEffect(() => {\n if (!isOpen()) return;\n updateTriggerWidth();\n\n const trigger = getTriggerRef();\n if (!trigger || hasExplicitTriggerWidth() || typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver(updateTriggerWidth);\n observer.observe(trigger);\n onCleanup(() => observer.disconnect());\n });\n\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n const overlayId = () => {\n const restId = (rest as Record<string, unknown>).id as string | undefined;\n return (\n restId ??\n (triggerContext?.overlayProps?.id as string | undefined) ??\n (dialogTriggerContext?.overlayProps?.id as string | undefined)\n );\n };\n\n const cleanPopoverProps = () => {\n const {\n style: _style,\n ref: _ref,\n ...remaining\n } = popoverAria.popoverProps as Record<string, unknown>;\n return remaining;\n };\n\n const mergedStyle = (): JSX.CSSProperties => {\n const ariaStyle = (popoverAria.popoverProps as Record<string, unknown>).style as\n | JSX.CSSProperties\n | undefined;\n const renderStyle = (renderProps.style() || {}) as JSX.CSSProperties & Record<string, unknown>;\n return {\n ...ariaStyle,\n ...renderStyle,\n \"--trigger-width\": renderStyle[\"--trigger-width\"] ?? triggerWidth(),\n };\n };\n\n const shouldBeDialog = () => !local.isNonModal || resolvedTrigger() === \"SubmenuTrigger\";\n const shouldContainFocus = () => {\n if (!shouldBeDialog()) {\n return false;\n }\n\n const trigger = resolvedTrigger();\n return trigger !== \"MenuTrigger\" && trigger !== \"SubmenuTrigger\";\n };\n const portalContext = useUNSAFE_PortalContext();\n const portalContainer = () => {\n if (isSubPopover()) {\n return popoverGroupContext?.() ?? portalContext.getContainer?.() ?? undefined;\n }\n return portalContext.getContainer?.() ?? undefined;\n };\n\n // Match React Aria Components: focus the popover container only when no\n // descendant has already moved focus during mount.\n createEffect(() => {\n if (!isOpen() || !shouldBeDialog()) return;\n if ((local.autoFocus ?? true) === false) return;\n if (!popoverRef) return;\n if (resolvedTrigger() === \"SubmenuTrigger\") return;\n\n let timeout: number | undefined;\n let frame: number | undefined;\n\n const focusIfNeeded = () => {\n if (!isOpen() || !shouldBeDialog()) return;\n if (!popoverRef || resolvedTrigger() === \"SubmenuTrigger\") return;\n if (document.activeElement === popoverRef || popoverRef.contains(document.activeElement)) {\n return;\n }\n popoverRef.focus();\n };\n\n const scheduleFocus = () => {\n timeout = window.setTimeout(focusIfNeeded, 0);\n };\n\n if (typeof window.requestAnimationFrame === \"function\") {\n frame = window.requestAnimationFrame(scheduleFocus);\n } else {\n scheduleFocus();\n }\n\n onCleanup(() => {\n if (frame !== undefined) {\n window.cancelAnimationFrame(frame);\n }\n if (timeout !== undefined) {\n window.clearTimeout(timeout);\n }\n });\n });\n\n // Fallback Escape handling for environments where focus is not moved into the popover.\n createEffect(() => {\n if (!isOpen()) return;\n if (local.isKeyboardDismissDisabled) return;\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n if (event.defaultPrevented) return;\n close();\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n onCleanup(() => document.removeEventListener(\"keydown\", onKeyDown));\n });\n\n const overlay = () => (\n <PopoverContext.Provider\n value={{ placement: popoverAria.placement, arrowProps: () => popoverAria.arrowProps }}\n >\n <FocusScope contain={shouldContainFocus()} restoreFocus>\n <div\n {...domProps()}\n {...cleanPopoverProps()}\n ref={popoverRef}\n id={overlayId()}\n role={shouldBeDialog() ? \"dialog\" : undefined}\n tabIndex={shouldBeDialog() ? -1 : undefined}\n class={renderProps.class()}\n style={mergedStyle()}\n data-trigger={resolvedTrigger()}\n data-placement={popoverAria.placement()}\n data-entering={dataAttr(local.isEntering)}\n data-exiting={dataAttr(local.isExiting)}\n >\n <Show when={!local.isNonModal}>\n <PopoverDismissButton onDismiss={close} />\n </Show>\n {renderProps.renderChildren()}\n <PopoverDismissButton onDismiss={close} />\n </div>\n </FocusScope>\n </PopoverContext.Provider>\n );\n\n const underlay = () => (\n <div\n data-testid=\"underlay\"\n {...(popoverAria.underlayProps as unknown as JSX.HTMLAttributes<HTMLDivElement>)}\n style={{ position: \"fixed\", inset: 0 }}\n />\n );\n\n return (\n <Show when={isHydrated() && (isOpen() || local.isExiting)}>\n <Portal mount={portalContainer()}>\n <Show when={!local.isNonModal && !isSubPopover() && isOpen()}>{underlay()}</Show>\n <Show\n when={isSubPopover()}\n fallback={\n <div ref={setGroupRef} style={{ display: \"contents\" }}>\n <PopoverGroupContext.Provider value={() => groupRef()}>\n {overlay()}\n </PopoverGroupContext.Provider>\n </div>\n }\n >\n {overlay()}\n </Show>\n </Portal>\n </Show>\n );\n}\n\nexport interface OverlayArrowProps {\n /** The children - should be an SVG or element for the arrow. */\n children?: JSX.Element;\n /** Render function used when Solid children accessors would be ambiguous. */\n render?: () => JSX.Element;\n /** The CSS className. */\n class?: string;\n /** The inline style. */\n style?: JSX.CSSProperties;\n}\n\n/**\n * An arrow element that points towards the trigger.\n */\nexport function OverlayArrow(props: OverlayArrowProps): JSX.Element {\n const popoverContext = useContext(PopoverContext);\n const placement = () => popoverContext?.placement() ?? null;\n\n // Mirror react-aria-components' OverlayArrow: the wrapper positions itself\n // absolutely against the popover edge (`[placement]: '100%'`) and takes the\n // cross-axis offset (`left`/`top`) from the overlay's computed `arrowProps`.\n // No `aria-hidden`/`role=\"presentation\"` — upstream leaves the arrow in the\n // accessibility tree (the arrow SVG surfaces as an unlabeled `img`), matching\n // S2's `<OverlayArrow className=\"\">`. The styled layer therefore passes no\n // positioning class of its own.\n const mergedStyle = (): JSX.CSSProperties => {\n const currentPlacement = placement();\n // Mirror react-aria-components' OverlayArrow: the reported `arrowProps`\n // offset (`left`/`top`) points at the arrow's CENTER, so the wrapper must be\n // pulled back by half its size to center on that point — horizontally for\n // top/bottom placements, vertically for left/right. Omitting this shifts the\n // arrow off by half its width/height (a self-inflicted divergence).\n const style: JSX.CSSProperties = {\n position: \"absolute\",\n transform:\n currentPlacement === \"top\" || currentPlacement === \"bottom\"\n ? \"translateX(-50%)\"\n : \"translateY(-50%)\",\n };\n if (currentPlacement != null) {\n (style as Record<string, string>)[currentPlacement] = \"100%\";\n }\n\n const contextStyle = (popoverContext?.arrowProps() as Record<string, unknown> | undefined)\n ?.style as (JSX.CSSProperties & Record<string, unknown>) | undefined;\n if (typeof contextStyle?.left === \"string\") {\n style.left = contextStyle.left;\n }\n if (typeof contextStyle?.top === \"string\") {\n style.top = contextStyle.top;\n }\n\n const localStyle =\n props.style &&\n !(typeof CSSStyleDeclaration !== \"undefined\" && props.style instanceof CSSStyleDeclaration)\n ? props.style\n : undefined;\n\n return {\n ...style,\n ...localStyle,\n };\n };\n\n return (\n <div class={props.class} style={mergedStyle()} data-placement={placement()}>\n {props.render ? props.render() : props.children}\n </div>\n );\n}\n\nexport default Popover;\n"],"mappings":"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"}
|