@proyecto-viviana/solidaria 0.2.4 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/actiongroup/createActionGroup.d.ts +29 -0
- package/dist/actiongroup/createActionGroup.d.ts.map +1 -0
- package/dist/actiongroup/index.d.ts +2 -0
- package/dist/actiongroup/index.d.ts.map +1 -0
- package/dist/autocomplete/createAutocomplete.d.ts +6 -2
- package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
- package/dist/breadcrumbs/createBreadcrumbs.d.ts +2 -0
- package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
- package/dist/button/createToggleButtonGroup.d.ts +32 -0
- package/dist/button/createToggleButtonGroup.d.ts.map +1 -0
- package/dist/button/index.d.ts +2 -0
- package/dist/button/index.d.ts.map +1 -1
- package/dist/calendar/createCalendarCell.d.ts +2 -0
- package/dist/calendar/createCalendarCell.d.ts.map +1 -1
- package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
- package/dist/calendar/createRangeCalendarCell.d.ts +3 -1
- package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
- package/dist/checkbox/createCheckboxGroup.d.ts +5 -1
- package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
- package/dist/collections/index.d.ts +56 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/color/createColorArea.d.ts.map +1 -1
- package/dist/color/createColorSlider.d.ts.map +1 -1
- package/dist/color/createColorWheel.d.ts.map +1 -1
- package/dist/combobox/createComboBox.d.ts +6 -0
- package/dist/combobox/createComboBox.d.ts.map +1 -1
- package/dist/datepicker/createDatePicker.d.ts +6 -0
- package/dist/datepicker/createDatePicker.d.ts.map +1 -1
- package/dist/datepicker/createDateRangePicker.d.ts +40 -0
- package/dist/datepicker/createDateRangePicker.d.ts.map +1 -0
- package/dist/datepicker/createDateSegment.d.ts +1 -1
- package/dist/datepicker/createDateSegment.d.ts.map +1 -1
- package/dist/datepicker/createTimeSegment.d.ts +29 -0
- package/dist/datepicker/createTimeSegment.d.ts.map +1 -0
- package/dist/datepicker/index.d.ts +2 -0
- package/dist/datepicker/index.d.ts.map +1 -1
- package/dist/disclosure/createDisclosureGroup.d.ts +2 -1
- package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
- package/dist/dnd/createDrag.d.ts.map +1 -1
- package/dist/dnd/createDraggableCollection.d.ts +4 -0
- package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
- package/dist/dnd/createDraggableItem.d.ts.map +1 -1
- package/dist/dnd/createDrop.d.ts.map +1 -1
- package/dist/dnd/createDroppableCollection.d.ts +32 -1
- package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
- package/dist/dnd/createDroppableItem.d.ts.map +1 -1
- package/dist/dnd/index.d.ts +1 -1
- package/dist/dnd/index.d.ts.map +1 -1
- package/dist/grid/createGrid.d.ts.map +1 -1
- package/dist/gridlist/createGridList.d.ts.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4659 -3452
- package/dist/index.js.map +1 -7
- package/dist/index.ssr.js +4659 -3452
- package/dist/index.ssr.js.map +1 -7
- package/dist/interactions/createFocus.d.ts.map +1 -1
- package/dist/interactions/createFocusWithin.d.ts.map +1 -1
- package/dist/link/createLink.d.ts +10 -0
- package/dist/link/createLink.d.ts.map +1 -1
- package/dist/listbox/createListBox.d.ts +1 -0
- package/dist/listbox/createListBox.d.ts.map +1 -1
- package/dist/listbox/createOption.d.ts.map +1 -1
- package/dist/menu/createMenu.d.ts +1 -0
- package/dist/menu/createMenu.d.ts.map +1 -1
- package/dist/meter/createMeter.d.ts.map +1 -1
- package/dist/numberfield/createNumberField.d.ts +18 -0
- package/dist/numberfield/createNumberField.d.ts.map +1 -1
- package/dist/overlays/createModal.d.ts +16 -0
- package/dist/overlays/createModal.d.ts.map +1 -1
- package/dist/overlays/createOverlay.d.ts.map +1 -1
- package/dist/overlays/index.d.ts +1 -1
- package/dist/overlays/index.d.ts.map +1 -1
- package/dist/popover/createOverlayPosition.d.ts.map +1 -1
- package/dist/popover/createPopover.d.ts.map +1 -1
- package/dist/progress/createProgressBar.d.ts.map +1 -1
- package/dist/radio/createRadioGroup.d.ts +2 -2
- package/dist/radio/createRadioGroup.d.ts.map +1 -1
- package/dist/searchfield/createSearchField.d.ts.map +1 -1
- package/dist/select/createHiddenSelect.d.ts.map +1 -1
- package/dist/select/createSelect.d.ts.map +1 -1
- package/dist/slider/createSlider.d.ts.map +1 -1
- package/dist/table/createTable.d.ts.map +1 -1
- package/dist/tabs/createTabs.d.ts +1 -1
- package/dist/tabs/createTabs.d.ts.map +1 -1
- package/dist/tag/createTag.d.ts.map +1 -1
- package/dist/tag/createTagGroup.d.ts.map +1 -1
- package/dist/toast/createToast.d.ts +4 -0
- package/dist/toast/createToast.d.ts.map +1 -1
- package/dist/toast/createToastRegion.d.ts.map +1 -1
- package/dist/toolbar/createToolbar.d.ts.map +1 -1
- package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
- package/dist/tree/createTree.d.ts.map +1 -1
- package/dist/tree/createTreeItem.d.ts.map +1 -1
- package/dist/tree/types.d.ts +4 -0
- package/dist/tree/types.d.ts.map +1 -1
- package/dist/utils/env.d.ts +1 -1
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/platform.d.ts.map +1 -1
- package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
- package/package.json +8 -6
- package/src/actiongroup/createActionGroup.ts +324 -0
- package/src/actiongroup/index.ts +8 -0
- package/src/autocomplete/createAutocomplete.ts +32 -9
- package/src/breadcrumbs/createBreadcrumbs.ts +10 -15
- package/src/button/createButton.ts +1 -1
- package/src/button/createToggleButtonGroup.ts +128 -0
- package/src/button/index.ts +9 -0
- package/src/calendar/createCalendarCell.ts +6 -4
- package/src/calendar/createCalendarGrid.ts +27 -18
- package/src/calendar/createRangeCalendarCell.ts +26 -9
- package/src/checkbox/createCheckboxGroup.ts +21 -4
- package/src/collections/index.ts +242 -0
- package/src/color/createColorArea.ts +380 -314
- package/src/color/createColorField.ts +137 -137
- package/src/color/createColorSlider.ts +286 -197
- package/src/color/createColorSwatch.ts +40 -40
- package/src/color/createColorWheel.ts +218 -208
- package/src/color/index.ts +24 -24
- package/src/color/types.ts +116 -116
- package/src/combobox/createComboBox.ts +670 -647
- package/src/combobox/index.ts +6 -6
- package/src/datepicker/createDatePicker.ts +54 -16
- package/src/datepicker/createDateRangePicker.ts +246 -0
- package/src/datepicker/createDateSegment.ts +185 -31
- package/src/datepicker/createTimeSegment.ts +370 -0
- package/src/datepicker/index.ts +14 -0
- package/src/dialog/createDialog.ts +120 -120
- package/src/dialog/index.ts +2 -2
- package/src/dialog/types.ts +19 -19
- package/src/disclosure/createDisclosureGroup.ts +5 -2
- package/src/dnd/createDrag.ts +224 -209
- package/src/dnd/createDraggableCollection.ts +96 -63
- package/src/dnd/createDraggableItem.ts +259 -243
- package/src/dnd/createDrop.ts +322 -321
- package/src/dnd/createDroppableCollection.ts +682 -293
- package/src/dnd/createDroppableItem.ts +215 -213
- package/src/dnd/index.ts +55 -47
- package/src/dnd/types.ts +89 -89
- package/src/dnd/utils.ts +294 -294
- package/src/focus/createAutoFocus.ts +321 -321
- package/src/focus/createFocusRestore.ts +313 -313
- package/src/focus/createVirtualFocus.ts +396 -396
- package/src/form/createFormValidation.ts +224 -224
- package/src/form/index.ts +11 -11
- package/src/grid/createGrid.ts +3 -1
- package/src/gridlist/createGridList.ts +16 -0
- package/src/gridlist/createGridListItem.ts +1 -1
- package/src/i18n/NumberFormatter.ts +266 -266
- package/src/i18n/createCollator.ts +79 -79
- package/src/i18n/createDateFormatter.ts +83 -83
- package/src/i18n/createFilter.ts +131 -131
- package/src/i18n/createNumberFormatter.ts +52 -52
- package/src/i18n/index.ts +40 -40
- package/src/i18n/locale.tsx +188 -188
- package/src/i18n/utils.ts +99 -99
- package/src/index.ts +51 -0
- package/src/interactions/createFocus.ts +6 -5
- package/src/interactions/createFocusWithin.ts +6 -5
- package/src/interactions/createLongPress.ts +174 -174
- package/src/interactions/createMove.ts +289 -289
- package/src/interactions/createPress.ts +5 -5
- package/src/landmark/createLandmark.ts +377 -377
- package/src/landmark/index.ts +8 -8
- package/src/link/createLink.ts +23 -8
- package/src/listbox/createListBox.ts +308 -269
- package/src/listbox/createOption.ts +162 -151
- package/src/listbox/index.ts +12 -12
- package/src/live-announcer/announce.ts +322 -322
- package/src/live-announcer/index.ts +9 -9
- package/src/menu/createMenu.ts +405 -396
- package/src/menu/createMenuItem.ts +149 -149
- package/src/menu/createMenuTrigger.ts +88 -88
- package/src/menu/index.ts +18 -18
- package/src/meter/createMeter.ts +1 -6
- package/src/numberfield/createNumberField.ts +311 -268
- package/src/numberfield/index.ts +5 -5
- package/src/overlays/ariaHideOutside.ts +219 -219
- package/src/overlays/createInteractOutside.ts +149 -149
- package/src/overlays/createModal.tsx +238 -202
- package/src/overlays/createOverlay.ts +165 -155
- package/src/overlays/createOverlayTrigger.ts +85 -85
- package/src/overlays/createPreventScroll.ts +266 -266
- package/src/overlays/index.ts +48 -44
- package/src/popover/calculatePosition.ts +6 -6
- package/src/popover/createOverlayPosition.ts +7 -4
- package/src/popover/createPopover.ts +21 -7
- package/src/progress/createProgressBar.ts +6 -1
- package/src/radio/createRadioGroup.ts +88 -14
- package/src/searchfield/createSearchField.ts +241 -186
- package/src/searchfield/index.ts +2 -2
- package/src/select/createHiddenSelect.tsx +263 -236
- package/src/select/createSelect.ts +373 -395
- package/src/select/index.ts +14 -14
- package/src/slider/createSlider.ts +364 -349
- package/src/slider/index.ts +2 -2
- package/src/ssr/index.tsx +370 -370
- package/src/table/createTable.ts +3 -1
- package/src/table/createTableColumnHeader.ts +1 -1
- package/src/table/createTableRow.ts +1 -1
- package/src/tabs/createTabs.ts +80 -51
- package/src/tag/createTag.ts +135 -6
- package/src/tag/createTagGroup.ts +7 -2
- package/src/toast/createToast.ts +8 -2
- package/src/toast/createToastRegion.ts +0 -1
- package/src/toolbar/createToolbar.ts +75 -1
- package/src/tooltip/createTooltip.ts +79 -79
- package/src/tooltip/createTooltipTrigger.ts +226 -222
- package/src/tooltip/index.ts +6 -6
- package/src/tree/createTree.ts +261 -246
- package/src/tree/createTreeItem.ts +282 -233
- package/src/tree/createTreeSelectionCheckbox.ts +68 -68
- package/src/tree/index.ts +16 -16
- package/src/tree/types.ts +91 -87
- package/src/utils/env.ts +55 -54
- package/src/utils/platform.ts +16 -6
- package/src/visually-hidden/createVisuallyHidden.ts +139 -124
- package/src/visually-hidden/index.ts +6 -6
|
@@ -1,149 +1,149 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Detects interactions outside a given element.
|
|
3
|
-
* Based on @react-aria/interactions useInteractOutside.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { createEffect, onCleanup } from 'solid-js';
|
|
7
|
-
import { getOwnerDocument } from '../utils';
|
|
8
|
-
|
|
9
|
-
export interface InteractOutsideProps {
|
|
10
|
-
/** Reference to the element to detect interactions outside of. */
|
|
11
|
-
ref: () => Element | null;
|
|
12
|
-
/** Handler called when an interaction outside the element completes. */
|
|
13
|
-
onInteractOutside?: (e: PointerEvent) => void;
|
|
14
|
-
/** Handler called when an interaction outside the element starts. */
|
|
15
|
-
onInteractOutsideStart?: (e: PointerEvent) => void;
|
|
16
|
-
/** Whether the interact outside events should be disabled. */
|
|
17
|
-
isDisabled?: boolean;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Detects interactions outside a given element, used in components like
|
|
22
|
-
* Dialogs and Popovers so they can close when a user clicks outside them.
|
|
23
|
-
*/
|
|
24
|
-
export function createInteractOutside(props: InteractOutsideProps): void {
|
|
25
|
-
let isPointerDown = false;
|
|
26
|
-
let ignoreEmulatedMouseEvents = false;
|
|
27
|
-
|
|
28
|
-
createEffect(() => {
|
|
29
|
-
const { ref, onInteractOutside, onInteractOutsideStart, isDisabled } = props;
|
|
30
|
-
|
|
31
|
-
if (isDisabled) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const element = ref();
|
|
36
|
-
const documentObject = getOwnerDocument(element);
|
|
37
|
-
|
|
38
|
-
const onPointerDown = (e: PointerEvent) => {
|
|
39
|
-
if (onInteractOutside && isValidEvent(e, ref)) {
|
|
40
|
-
if (onInteractOutsideStart) {
|
|
41
|
-
onInteractOutsideStart(e);
|
|
42
|
-
}
|
|
43
|
-
isPointerDown = true;
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const triggerInteractOutside = (e: PointerEvent) => {
|
|
48
|
-
if (onInteractOutside) {
|
|
49
|
-
onInteractOutside(e);
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
// Use pointer events if available. Otherwise, fall back to mouse and touch events.
|
|
54
|
-
if (typeof PointerEvent !== 'undefined') {
|
|
55
|
-
const onClick = (e: PointerEvent) => {
|
|
56
|
-
if (isPointerDown && isValidEvent(e, ref)) {
|
|
57
|
-
triggerInteractOutside(e);
|
|
58
|
-
}
|
|
59
|
-
isPointerDown = false;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
// Use click instead of pointerup to avoid Android Chrome issue
|
|
63
|
-
// https://issues.chromium.org/issues/40732224
|
|
64
|
-
documentObject.addEventListener('pointerdown', onPointerDown as EventListener, true);
|
|
65
|
-
documentObject.addEventListener('click', onClick as EventListener, true);
|
|
66
|
-
|
|
67
|
-
onCleanup(() => {
|
|
68
|
-
documentObject.removeEventListener('pointerdown', onPointerDown as EventListener, true);
|
|
69
|
-
documentObject.removeEventListener('click', onClick as EventListener, true);
|
|
70
|
-
});
|
|
71
|
-
} else {
|
|
72
|
-
// Fallback for environments without PointerEvent (mainly tests)
|
|
73
|
-
const onMouseUp = (e: MouseEvent) => {
|
|
74
|
-
if (ignoreEmulatedMouseEvents) {
|
|
75
|
-
ignoreEmulatedMouseEvents = false;
|
|
76
|
-
} else if (isPointerDown && isValidEvent(e as unknown as PointerEvent, ref)) {
|
|
77
|
-
triggerInteractOutside(e as unknown as PointerEvent);
|
|
78
|
-
}
|
|
79
|
-
isPointerDown = false;
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
const onTouchEnd = (e: TouchEvent) => {
|
|
83
|
-
ignoreEmulatedMouseEvents = true;
|
|
84
|
-
if (isPointerDown && isValidEvent(e as unknown as PointerEvent, ref)) {
|
|
85
|
-
triggerInteractOutside(e as unknown as PointerEvent);
|
|
86
|
-
}
|
|
87
|
-
isPointerDown = false;
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
const onMouseDown = (e: MouseEvent) => {
|
|
91
|
-
if (onInteractOutside && isValidEvent(e as unknown as PointerEvent, ref)) {
|
|
92
|
-
if (onInteractOutsideStart) {
|
|
93
|
-
onInteractOutsideStart(e as unknown as PointerEvent);
|
|
94
|
-
}
|
|
95
|
-
isPointerDown = true;
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
const onTouchStart = (e: TouchEvent) => {
|
|
100
|
-
if (onInteractOutside && isValidEvent(e as unknown as PointerEvent, ref)) {
|
|
101
|
-
if (onInteractOutsideStart) {
|
|
102
|
-
onInteractOutsideStart(e as unknown as PointerEvent);
|
|
103
|
-
}
|
|
104
|
-
isPointerDown = true;
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
documentObject.addEventListener('mousedown', onMouseDown as EventListener, true);
|
|
109
|
-
documentObject.addEventListener('mouseup', onMouseUp as EventListener, true);
|
|
110
|
-
documentObject.addEventListener('touchstart', onTouchStart as EventListener, true);
|
|
111
|
-
documentObject.addEventListener('touchend', onTouchEnd as EventListener, true);
|
|
112
|
-
|
|
113
|
-
onCleanup(() => {
|
|
114
|
-
documentObject.removeEventListener('mousedown', onMouseDown as EventListener, true);
|
|
115
|
-
documentObject.removeEventListener('mouseup', onMouseUp as EventListener, true);
|
|
116
|
-
documentObject.removeEventListener('touchstart', onTouchStart as EventListener, true);
|
|
117
|
-
documentObject.removeEventListener('touchend', onTouchEnd as EventListener, true);
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
function isValidEvent(event: PointerEvent | MouseEvent | TouchEvent, ref: () => Element | null): boolean {
|
|
124
|
-
// Only handle primary button clicks
|
|
125
|
-
if ('button' in event && event.button > 0) {
|
|
126
|
-
return false;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
if (event.target) {
|
|
130
|
-
// If the event target is no longer in the document, ignore
|
|
131
|
-
const ownerDocument = (event.target as Element).ownerDocument;
|
|
132
|
-
if (!ownerDocument || !ownerDocument.documentElement.contains(event.target as Node)) {
|
|
133
|
-
return false;
|
|
134
|
-
}
|
|
135
|
-
// If the target is within a top layer element (e.g. toasts), ignore
|
|
136
|
-
if ((event.target as Element).closest?.('[data-solidaria-top-layer]')) {
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
const element = ref();
|
|
142
|
-
if (!element) {
|
|
143
|
-
return false;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// When the event source is inside a Shadow DOM, event.target is just the shadow root.
|
|
147
|
-
// Using event.composedPath instead means we can get the actual element inside the shadow root.
|
|
148
|
-
return !event.composedPath().includes(element);
|
|
149
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Detects interactions outside a given element.
|
|
3
|
+
* Based on @react-aria/interactions useInteractOutside.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { createEffect, onCleanup } from 'solid-js';
|
|
7
|
+
import { getOwnerDocument } from '../utils';
|
|
8
|
+
|
|
9
|
+
export interface InteractOutsideProps {
|
|
10
|
+
/** Reference to the element to detect interactions outside of. */
|
|
11
|
+
ref: () => Element | null;
|
|
12
|
+
/** Handler called when an interaction outside the element completes. */
|
|
13
|
+
onInteractOutside?: (e: PointerEvent) => void;
|
|
14
|
+
/** Handler called when an interaction outside the element starts. */
|
|
15
|
+
onInteractOutsideStart?: (e: PointerEvent) => void;
|
|
16
|
+
/** Whether the interact outside events should be disabled. */
|
|
17
|
+
isDisabled?: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Detects interactions outside a given element, used in components like
|
|
22
|
+
* Dialogs and Popovers so they can close when a user clicks outside them.
|
|
23
|
+
*/
|
|
24
|
+
export function createInteractOutside(props: InteractOutsideProps): void {
|
|
25
|
+
let isPointerDown = false;
|
|
26
|
+
let ignoreEmulatedMouseEvents = false;
|
|
27
|
+
|
|
28
|
+
createEffect(() => {
|
|
29
|
+
const { ref, onInteractOutside, onInteractOutsideStart, isDisabled } = props;
|
|
30
|
+
|
|
31
|
+
if (isDisabled) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const element = ref();
|
|
36
|
+
const documentObject = getOwnerDocument(element);
|
|
37
|
+
|
|
38
|
+
const onPointerDown = (e: PointerEvent) => {
|
|
39
|
+
if (onInteractOutside && isValidEvent(e, ref)) {
|
|
40
|
+
if (onInteractOutsideStart) {
|
|
41
|
+
onInteractOutsideStart(e);
|
|
42
|
+
}
|
|
43
|
+
isPointerDown = true;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const triggerInteractOutside = (e: PointerEvent) => {
|
|
48
|
+
if (onInteractOutside) {
|
|
49
|
+
onInteractOutside(e);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// Use pointer events if available. Otherwise, fall back to mouse and touch events.
|
|
54
|
+
if (typeof PointerEvent !== 'undefined') {
|
|
55
|
+
const onClick = (e: PointerEvent) => {
|
|
56
|
+
if (isPointerDown && isValidEvent(e, ref)) {
|
|
57
|
+
triggerInteractOutside(e);
|
|
58
|
+
}
|
|
59
|
+
isPointerDown = false;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// Use click instead of pointerup to avoid Android Chrome issue
|
|
63
|
+
// https://issues.chromium.org/issues/40732224
|
|
64
|
+
documentObject.addEventListener('pointerdown', onPointerDown as EventListener, true);
|
|
65
|
+
documentObject.addEventListener('click', onClick as EventListener, true);
|
|
66
|
+
|
|
67
|
+
onCleanup(() => {
|
|
68
|
+
documentObject.removeEventListener('pointerdown', onPointerDown as EventListener, true);
|
|
69
|
+
documentObject.removeEventListener('click', onClick as EventListener, true);
|
|
70
|
+
});
|
|
71
|
+
} else {
|
|
72
|
+
// Fallback for environments without PointerEvent (mainly tests)
|
|
73
|
+
const onMouseUp = (e: MouseEvent) => {
|
|
74
|
+
if (ignoreEmulatedMouseEvents) {
|
|
75
|
+
ignoreEmulatedMouseEvents = false;
|
|
76
|
+
} else if (isPointerDown && isValidEvent(e as unknown as PointerEvent, ref)) {
|
|
77
|
+
triggerInteractOutside(e as unknown as PointerEvent);
|
|
78
|
+
}
|
|
79
|
+
isPointerDown = false;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const onTouchEnd = (e: TouchEvent) => {
|
|
83
|
+
ignoreEmulatedMouseEvents = true;
|
|
84
|
+
if (isPointerDown && isValidEvent(e as unknown as PointerEvent, ref)) {
|
|
85
|
+
triggerInteractOutside(e as unknown as PointerEvent);
|
|
86
|
+
}
|
|
87
|
+
isPointerDown = false;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const onMouseDown = (e: MouseEvent) => {
|
|
91
|
+
if (onInteractOutside && isValidEvent(e as unknown as PointerEvent, ref)) {
|
|
92
|
+
if (onInteractOutsideStart) {
|
|
93
|
+
onInteractOutsideStart(e as unknown as PointerEvent);
|
|
94
|
+
}
|
|
95
|
+
isPointerDown = true;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const onTouchStart = (e: TouchEvent) => {
|
|
100
|
+
if (onInteractOutside && isValidEvent(e as unknown as PointerEvent, ref)) {
|
|
101
|
+
if (onInteractOutsideStart) {
|
|
102
|
+
onInteractOutsideStart(e as unknown as PointerEvent);
|
|
103
|
+
}
|
|
104
|
+
isPointerDown = true;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
documentObject.addEventListener('mousedown', onMouseDown as EventListener, true);
|
|
109
|
+
documentObject.addEventListener('mouseup', onMouseUp as EventListener, true);
|
|
110
|
+
documentObject.addEventListener('touchstart', onTouchStart as EventListener, true);
|
|
111
|
+
documentObject.addEventListener('touchend', onTouchEnd as EventListener, true);
|
|
112
|
+
|
|
113
|
+
onCleanup(() => {
|
|
114
|
+
documentObject.removeEventListener('mousedown', onMouseDown as EventListener, true);
|
|
115
|
+
documentObject.removeEventListener('mouseup', onMouseUp as EventListener, true);
|
|
116
|
+
documentObject.removeEventListener('touchstart', onTouchStart as EventListener, true);
|
|
117
|
+
documentObject.removeEventListener('touchend', onTouchEnd as EventListener, true);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function isValidEvent(event: PointerEvent | MouseEvent | TouchEvent, ref: () => Element | null): boolean {
|
|
124
|
+
// Only handle primary button clicks
|
|
125
|
+
if ('button' in event && event.button > 0) {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (event.target) {
|
|
130
|
+
// If the event target is no longer in the document, ignore
|
|
131
|
+
const ownerDocument = (event.target as Element).ownerDocument;
|
|
132
|
+
if (!ownerDocument || !ownerDocument.documentElement.contains(event.target as Node)) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
// If the target is within a top layer element (e.g. toasts), ignore
|
|
136
|
+
if ((event.target as Element).closest?.('[data-solidaria-top-layer]')) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const element = ref();
|
|
142
|
+
if (!element) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// When the event source is inside a Shadow DOM, event.target is just the shadow root.
|
|
147
|
+
// Using event.composedPath instead means we can get the actual element inside the shadow root.
|
|
148
|
+
return !event.composedPath().includes(element);
|
|
149
|
+
}
|