stimeo-ui 0.17.0 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +136 -2
- package/README.md +19 -10
- package/dist/cable/index.d.ts +11 -9
- package/dist/cable/index.js +22 -14
- package/dist/cable/index.js.map +1 -1
- package/dist/coerce-JtZVNG5h.d.ts +20 -0
- package/dist/controllers/accordion_controller.js +14 -6
- package/dist/controllers/accordion_controller.js.map +1 -1
- package/dist/controllers/alert_dialog_controller.js +145 -118
- package/dist/controllers/alert_dialog_controller.js.map +1 -1
- package/dist/controllers/announcer_controller.d.ts +5 -3
- package/dist/controllers/announcer_controller.js +113 -17
- package/dist/controllers/announcer_controller.js.map +1 -1
- package/dist/controllers/auto_submit_controller.js +185 -60
- package/dist/controllers/auto_submit_controller.js.map +1 -1
- package/dist/controllers/avatar_controller.js +55 -43
- package/dist/controllers/avatar_controller.js.map +1 -1
- package/dist/controllers/breadcrumb_controller.js.map +1 -1
- package/dist/controllers/bulk_select_controller.d.ts +3 -3
- package/dist/controllers/bulk_select_controller.js +64 -50
- package/dist/controllers/bulk_select_controller.js.map +1 -1
- package/dist/controllers/calendar_controller.d.ts +15 -12
- package/dist/controllers/calendar_controller.js +55 -53
- package/dist/controllers/calendar_controller.js.map +1 -1
- package/dist/controllers/carousel_controller.d.ts +9 -5
- package/dist/controllers/carousel_controller.js +124 -86
- package/dist/controllers/carousel_controller.js.map +1 -1
- package/dist/controllers/character_counter_controller.d.ts +27 -6
- package/dist/controllers/character_counter_controller.js +291 -95
- package/dist/controllers/character_counter_controller.js.map +1 -1
- package/dist/controllers/checkbox_controller.js +6 -0
- package/dist/controllers/checkbox_controller.js.map +1 -1
- package/dist/controllers/clipboard_controller.js +118 -27
- package/dist/controllers/clipboard_controller.js.map +1 -1
- package/dist/controllers/collapsible_controller.d.ts +1 -1
- package/dist/controllers/collapsible_controller.js +52 -49
- package/dist/controllers/collapsible_controller.js.map +1 -1
- package/dist/controllers/color_picker_controller.js +29 -7
- package/dist/controllers/color_picker_controller.js.map +1 -1
- package/dist/controllers/combobox_controller.d.ts +1 -1
- package/dist/controllers/combobox_controller.js +210 -71
- package/dist/controllers/combobox_controller.js.map +1 -1
- package/dist/controllers/command_palette_controller.d.ts +9 -9
- package/dist/controllers/command_palette_controller.js +290 -140
- package/dist/controllers/command_palette_controller.js.map +1 -1
- package/dist/controllers/conditional_fields_controller.js +145 -58
- package/dist/controllers/conditional_fields_controller.js.map +1 -1
- package/dist/controllers/confirm_controller.js +145 -118
- package/dist/controllers/confirm_controller.js.map +1 -1
- package/dist/controllers/context_menu_controller.d.ts +49 -14
- package/dist/controllers/context_menu_controller.js +138 -73
- package/dist/controllers/context_menu_controller.js.map +1 -1
- package/dist/controllers/count_up_controller.js.map +1 -1
- package/dist/controllers/countdown_controller.d.ts +2 -2
- package/dist/controllers/countdown_controller.js +109 -21
- package/dist/controllers/countdown_controller.js.map +1 -1
- package/dist/controllers/currency_input_controller.d.ts +75 -11
- package/dist/controllers/currency_input_controller.js +446 -72
- package/dist/controllers/currency_input_controller.js.map +1 -1
- package/dist/controllers/data_grid_controller.d.ts +10 -8
- package/dist/controllers/data_grid_controller.js +134 -28
- package/dist/controllers/data_grid_controller.js.map +1 -1
- package/dist/controllers/date_range_picker_controller.d.ts +12 -9
- package/dist/controllers/date_range_picker_controller.js +93 -72
- package/dist/controllers/date_range_picker_controller.js.map +1 -1
- package/dist/controllers/dialog_controller.d.ts +4 -5
- package/dist/controllers/dialog_controller.js +145 -118
- package/dist/controllers/dialog_controller.js.map +1 -1
- package/dist/controllers/direct_upload_controller.d.ts +1 -1
- package/dist/controllers/direct_upload_controller.js +24 -14
- package/dist/controllers/direct_upload_controller.js.map +1 -1
- package/dist/controllers/dirty_form_controller.d.ts +6 -1
- package/dist/controllers/dirty_form_controller.js +68 -31
- package/dist/controllers/dirty_form_controller.js.map +1 -1
- package/dist/controllers/dismissible_controller.js +66 -46
- package/dist/controllers/dismissible_controller.js.map +1 -1
- package/dist/controllers/drawer_controller.js +145 -118
- package/dist/controllers/drawer_controller.js.map +1 -1
- package/dist/controllers/dropdown_controller.js +76 -63
- package/dist/controllers/dropdown_controller.js.map +1 -1
- package/dist/controllers/editable_controller.js +200 -62
- package/dist/controllers/editable_controller.js.map +1 -1
- package/dist/controllers/empty_state_controller.js +13 -6
- package/dist/controllers/empty_state_controller.js.map +1 -1
- package/dist/controllers/file_dropzone_controller.d.ts +3 -0
- package/dist/controllers/file_dropzone_controller.js +55 -48
- package/dist/controllers/file_dropzone_controller.js.map +1 -1
- package/dist/controllers/filter_controller.js +9 -2
- package/dist/controllers/filter_controller.js.map +1 -1
- package/dist/controllers/flash_controller.d.ts +4 -4
- package/dist/controllers/flash_controller.js +66 -33
- package/dist/controllers/flash_controller.js.map +1 -1
- package/dist/controllers/focus_controller.d.ts +3 -3
- package/dist/controllers/focus_controller.js +39 -14
- package/dist/controllers/focus_controller.js.map +1 -1
- package/dist/controllers/form_field_controller.d.ts +2 -1
- package/dist/controllers/form_field_controller.js +52 -43
- package/dist/controllers/form_field_controller.js.map +1 -1
- package/dist/controllers/form_validation_controller.d.ts +3 -3
- package/dist/controllers/form_validation_controller.js +18 -11
- package/dist/controllers/form_validation_controller.js.map +1 -1
- package/dist/controllers/frame_loading_controller.d.ts +13 -12
- package/dist/controllers/frame_loading_controller.js +55 -48
- package/dist/controllers/frame_loading_controller.js.map +1 -1
- package/dist/controllers/highlight_controller.d.ts +5 -4
- package/dist/controllers/highlight_controller.js.map +1 -1
- package/dist/controllers/hover_card_controller.d.ts +4 -1
- package/dist/controllers/hover_card_controller.js +67 -61
- package/dist/controllers/hover_card_controller.js.map +1 -1
- package/dist/controllers/idle_controller.d.ts +6 -5
- package/dist/controllers/idle_controller.js +10 -6
- package/dist/controllers/idle_controller.js.map +1 -1
- package/dist/controllers/input_mask_controller.d.ts +31 -13
- package/dist/controllers/input_mask_controller.js +434 -24
- package/dist/controllers/input_mask_controller.js.map +1 -1
- package/dist/controllers/intersection_controller.js +3 -0
- package/dist/controllers/intersection_controller.js.map +1 -1
- package/dist/controllers/lazy_frame_controller.d.ts +3 -2
- package/dist/controllers/lazy_frame_controller.js +15 -3
- package/dist/controllers/lazy_frame_controller.js.map +1 -1
- package/dist/controllers/listbox_controller.d.ts +10 -7
- package/dist/controllers/listbox_controller.js +260 -79
- package/dist/controllers/listbox_controller.js.map +1 -1
- package/dist/controllers/local_time_controller.d.ts +8 -6
- package/dist/controllers/local_time_controller.js +48 -13
- package/dist/controllers/local_time_controller.js.map +1 -1
- package/dist/controllers/masonry_controller.js +11 -4
- package/dist/controllers/masonry_controller.js.map +1 -1
- package/dist/controllers/menu_controller.d.ts +24 -5
- package/dist/controllers/menu_controller.js +138 -82
- package/dist/controllers/menu_controller.js.map +1 -1
- package/dist/controllers/menubar_controller.d.ts +49 -7
- package/dist/controllers/menubar_controller.js +65 -19
- package/dist/controllers/menubar_controller.js.map +1 -1
- package/dist/controllers/meter_controller.d.ts +13 -20
- package/dist/controllers/meter_controller.js +270 -24
- package/dist/controllers/meter_controller.js.map +1 -1
- package/dist/controllers/multi_select_controller.d.ts +19 -16
- package/dist/controllers/multi_select_controller.js +272 -95
- package/dist/controllers/multi_select_controller.js.map +1 -1
- package/dist/controllers/navigation_menu_controller.d.ts +19 -5
- package/dist/controllers/navigation_menu_controller.js +67 -19
- package/dist/controllers/navigation_menu_controller.js.map +1 -1
- package/dist/controllers/nested_form_controller.js +98 -64
- package/dist/controllers/nested_form_controller.js.map +1 -1
- package/dist/controllers/network_status_controller.js +70 -52
- package/dist/controllers/network_status_controller.js.map +1 -1
- package/dist/controllers/number_input_controller.d.ts +24 -6
- package/dist/controllers/number_input_controller.js +344 -94
- package/dist/controllers/number_input_controller.js.map +1 -1
- package/dist/controllers/optimistic_controller.d.ts +8 -5
- package/dist/controllers/optimistic_controller.js +29 -11
- package/dist/controllers/optimistic_controller.js.map +1 -1
- package/dist/controllers/otp_controller.d.ts +35 -4
- package/dist/controllers/otp_controller.js +502 -104
- package/dist/controllers/otp_controller.js.map +1 -1
- package/dist/controllers/overflow_indicator_controller.js +6 -0
- package/dist/controllers/overflow_indicator_controller.js.map +1 -1
- package/dist/controllers/overflow_menu_controller.d.ts +10 -9
- package/dist/controllers/overflow_menu_controller.js +136 -21
- package/dist/controllers/overflow_menu_controller.js.map +1 -1
- package/dist/controllers/pagination_controller.d.ts +3 -2
- package/dist/controllers/pagination_controller.js +47 -14
- package/dist/controllers/pagination_controller.js.map +1 -1
- package/dist/controllers/password_reveal_controller.d.ts +5 -4
- package/dist/controllers/password_reveal_controller.js +52 -49
- package/dist/controllers/password_reveal_controller.js.map +1 -1
- package/dist/controllers/password_strength_controller.d.ts +1 -1
- package/dist/controllers/password_strength_controller.js +13 -6
- package/dist/controllers/password_strength_controller.js.map +1 -1
- package/dist/controllers/persist_controller.js +48 -128
- package/dist/controllers/persist_controller.js.map +1 -1
- package/dist/controllers/pointer_drag_controller.d.ts +20 -8
- package/dist/controllers/pointer_drag_controller.js +255 -24
- package/dist/controllers/pointer_drag_controller.js.map +1 -1
- package/dist/controllers/popover_controller.d.ts +9 -5
- package/dist/controllers/popover_controller.js +91 -65
- package/dist/controllers/popover_controller.js.map +1 -1
- package/dist/controllers/portal_controller.js +6 -0
- package/dist/controllers/portal_controller.js.map +1 -1
- package/dist/controllers/preview_guard_controller.js +14 -3
- package/dist/controllers/preview_guard_controller.js.map +1 -1
- package/dist/controllers/progress_controller.d.ts +9 -19
- package/dist/controllers/progress_controller.js +271 -27
- package/dist/controllers/progress_controller.js.map +1 -1
- package/dist/controllers/radio_group_controller.d.ts +11 -8
- package/dist/controllers/radio_group_controller.js +167 -80
- package/dist/controllers/radio_group_controller.js.map +1 -1
- package/dist/controllers/range_slider_controller.d.ts +4 -3
- package/dist/controllers/range_slider_controller.js +27 -7
- package/dist/controllers/range_slider_controller.js.map +1 -1
- package/dist/controllers/rating_controller.js +93 -57
- package/dist/controllers/rating_controller.js.map +1 -1
- package/dist/controllers/read_more_controller.js +10 -6
- package/dist/controllers/read_more_controller.js.map +1 -1
- package/dist/controllers/reading_progress_controller.js +22 -5
- package/dist/controllers/reading_progress_controller.js.map +1 -1
- package/dist/controllers/relative_time_controller.d.ts +4 -4
- package/dist/controllers/relative_time_controller.js +75 -11
- package/dist/controllers/relative_time_controller.js.map +1 -1
- package/dist/controllers/reset_on_restore_controller.d.ts +3 -3
- package/dist/controllers/reset_on_restore_controller.js +6 -0
- package/dist/controllers/reset_on_restore_controller.js.map +1 -1
- package/dist/controllers/resizable_controller.d.ts +3 -0
- package/dist/controllers/resizable_controller.js +55 -22
- package/dist/controllers/resizable_controller.js.map +1 -1
- package/dist/controllers/roving_controller.d.ts +3 -3
- package/dist/controllers/roving_controller.js +10 -4
- package/dist/controllers/roving_controller.js.map +1 -1
- package/dist/controllers/scroll_area_controller.js +129 -88
- package/dist/controllers/scroll_area_controller.js.map +1 -1
- package/dist/controllers/scroll_restore_controller.d.ts +3 -3
- package/dist/controllers/scroll_restore_controller.js +14 -2
- package/dist/controllers/scroll_restore_controller.js.map +1 -1
- package/dist/controllers/scroll_visibility_controller.js +93 -60
- package/dist/controllers/scroll_visibility_controller.js.map +1 -1
- package/dist/controllers/scrollspy_controller.js +11 -5
- package/dist/controllers/scrollspy_controller.js.map +1 -1
- package/dist/controllers/separator_controller.d.ts +1 -1
- package/dist/controllers/separator_controller.js +59 -43
- package/dist/controllers/separator_controller.js.map +1 -1
- package/dist/controllers/sidebar_controller.d.ts +1 -1
- package/dist/controllers/sidebar_controller.js +150 -122
- package/dist/controllers/sidebar_controller.js.map +1 -1
- package/dist/controllers/skeleton_controller.js +55 -48
- package/dist/controllers/skeleton_controller.js.map +1 -1
- package/dist/controllers/slider_controller.d.ts +2 -1
- package/dist/controllers/slider_controller.js +27 -6
- package/dist/controllers/slider_controller.js.map +1 -1
- package/dist/controllers/smart_sticky_header_controller.d.ts +1 -1
- package/dist/controllers/smart_sticky_header_controller.js +13 -5
- package/dist/controllers/smart_sticky_header_controller.js.map +1 -1
- package/dist/controllers/sortable_controller.d.ts +4 -4
- package/dist/controllers/sortable_controller.js +27 -14
- package/dist/controllers/sortable_controller.js.map +1 -1
- package/dist/controllers/spinner_controller.js +55 -48
- package/dist/controllers/spinner_controller.js.map +1 -1
- package/dist/controllers/step_indicator_controller.d.ts +4 -4
- package/dist/controllers/step_indicator_controller.js +6 -0
- package/dist/controllers/step_indicator_controller.js.map +1 -1
- package/dist/controllers/stepper_controller.d.ts +2 -3
- package/dist/controllers/stepper_controller.js +6 -0
- package/dist/controllers/stepper_controller.js.map +1 -1
- package/dist/controllers/stick_to_bottom_controller.d.ts +3 -1
- package/dist/controllers/stick_to_bottom_controller.js +19 -8
- package/dist/controllers/stick_to_bottom_controller.js.map +1 -1
- package/dist/controllers/sticky_observer_controller.js +49 -43
- package/dist/controllers/sticky_observer_controller.js.map +1 -1
- package/dist/controllers/submit_once_controller.d.ts +2 -1
- package/dist/controllers/submit_once_controller.js +145 -85
- package/dist/controllers/submit_once_controller.js.map +1 -1
- package/dist/controllers/switch_controller.d.ts +7 -4
- package/dist/controllers/switch_controller.js +172 -28
- package/dist/controllers/switch_controller.js.map +1 -1
- package/dist/controllers/tabs_controller.d.ts +7 -4
- package/dist/controllers/tabs_controller.js +6 -1
- package/dist/controllers/tabs_controller.js.map +1 -1
- package/dist/controllers/tags_input_controller.d.ts +4 -3
- package/dist/controllers/tags_input_controller.js +157 -28
- package/dist/controllers/tags_input_controller.js.map +1 -1
- package/dist/controllers/textarea_autosize_controller.d.ts +1 -1
- package/dist/controllers/textarea_autosize_controller.js +40 -19
- package/dist/controllers/textarea_autosize_controller.js.map +1 -1
- package/dist/controllers/theme_controller.d.ts +3 -2
- package/dist/controllers/theme_controller.js +10 -4
- package/dist/controllers/theme_controller.js.map +1 -1
- package/dist/controllers/time_picker_controller.d.ts +38 -5
- package/dist/controllers/time_picker_controller.js +192 -54
- package/dist/controllers/time_picker_controller.js.map +1 -1
- package/dist/controllers/toast_controller.d.ts +4 -5
- package/dist/controllers/toast_controller.js +58 -27
- package/dist/controllers/toast_controller.js.map +1 -1
- package/dist/controllers/toggle_group_controller.d.ts +2 -3
- package/dist/controllers/toggle_group_controller.js +158 -56
- package/dist/controllers/toggle_group_controller.js.map +1 -1
- package/dist/controllers/toolbar_controller.d.ts +8 -6
- package/dist/controllers/toolbar_controller.js +150 -21
- package/dist/controllers/toolbar_controller.js.map +1 -1
- package/dist/controllers/tooltip_controller.d.ts +4 -1
- package/dist/controllers/tooltip_controller.js.map +1 -1
- package/dist/controllers/transition_controller.js.map +1 -1
- package/dist/controllers/tree_view_controller.d.ts +1 -1
- package/dist/controllers/tree_view_controller.js +134 -25
- package/dist/controllers/tree_view_controller.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +2515 -1315
- package/dist/index.js.map +1 -1
- package/dist/inspector/cli.d.ts +25 -12
- package/dist/inspector/cli.js +21 -3
- package/dist/inspector/cli.js.map +1 -1
- package/dist/inspector/cli_bin.d.ts +1 -1
- package/dist/inspector/cli_bin.js +62 -8
- package/dist/inspector/cli_bin.js.map +1 -1
- package/dist/inspector/examples.json +13 -13
- package/dist/inspector/manifest.json +19 -5
- package/dist/positioning/index.d.ts +9 -8
- package/dist/positioning/index.js +6 -0
- package/dist/positioning/index.js.map +1 -1
- package/package.json +11 -10
|
@@ -4,6 +4,9 @@ function isReservedArrowChord(event, allow = []) {
|
|
|
4
4
|
if (!event.key.startsWith("Arrow")) return false;
|
|
5
5
|
return event.altKey && !allow.includes("alt") || event.ctrlKey && !allow.includes("ctrl") || event.metaKey && !allow.includes("meta") || event.shiftKey && !allow.includes("shift");
|
|
6
6
|
}
|
|
7
|
+
function hasModifierChord(event) {
|
|
8
|
+
return event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
|
|
9
|
+
}
|
|
7
10
|
|
|
8
11
|
var DetachGate = class _DetachGate {
|
|
9
12
|
#pending = false;
|
|
@@ -50,6 +53,33 @@ function ownerOf(candidates, node) {
|
|
|
50
53
|
return candidates[ownerIndex(candidates, node)] ?? null;
|
|
51
54
|
}
|
|
52
55
|
|
|
56
|
+
function unslotted(element) {
|
|
57
|
+
return element.assignedSlot === null && element.parentElement?.shadowRoot != null;
|
|
58
|
+
}
|
|
59
|
+
function flatTreeParent(element) {
|
|
60
|
+
if (unslotted(element)) return null;
|
|
61
|
+
const parent = element.assignedSlot ?? element.parentNode;
|
|
62
|
+
if (parent instanceof ShadowRoot) return parent.host;
|
|
63
|
+
return parent instanceof Element ? parent : null;
|
|
64
|
+
}
|
|
65
|
+
function flatTreeContains(ancestor, element) {
|
|
66
|
+
for (let node = element; node; node = flatTreeParent(node)) {
|
|
67
|
+
if (node === ancestor) return true;
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
function closestInFlatTree(element, selector) {
|
|
72
|
+
for (let node = element; node; node = flatTreeParent(node)) {
|
|
73
|
+
if (node.matches(selector)) return node;
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
function deepActiveElement(ownerDocument) {
|
|
78
|
+
let active = ownerDocument.activeElement;
|
|
79
|
+
while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;
|
|
80
|
+
return active;
|
|
81
|
+
}
|
|
82
|
+
|
|
53
83
|
var ListenerSet = class {
|
|
54
84
|
#abort = new AbortController();
|
|
55
85
|
add(target, type, handler, options) {
|
|
@@ -77,6 +107,9 @@ var MicrotaskCoalescer = class {
|
|
|
77
107
|
this.#queued = false;
|
|
78
108
|
this.#generation += 1;
|
|
79
109
|
}
|
|
110
|
+
get pending() {
|
|
111
|
+
return this.#queued;
|
|
112
|
+
}
|
|
80
113
|
schedule() {
|
|
81
114
|
if (!this.#active || this.#queued) return;
|
|
82
115
|
this.#queued = true;
|
|
@@ -107,6 +140,9 @@ var MorphRenderWatcher = class {
|
|
|
107
140
|
schedule() {
|
|
108
141
|
this.#pass.schedule();
|
|
109
142
|
}
|
|
143
|
+
get pending() {
|
|
144
|
+
return this.#pass.pending;
|
|
145
|
+
}
|
|
110
146
|
disconnect() {
|
|
111
147
|
this.#listeners.dispose();
|
|
112
148
|
this.#pass.cancel();
|
|
@@ -202,6 +238,143 @@ var OwnedPointerSession = class {
|
|
|
202
238
|
};
|
|
203
239
|
};
|
|
204
240
|
|
|
241
|
+
function setAttributeIfChanged(element, name, value, beforeWrite) {
|
|
242
|
+
if (element.getAttribute(name) === value) return false;
|
|
243
|
+
if (value === null) element.removeAttribute(name);
|
|
244
|
+
else element.setAttribute(name, value);
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
function queryOpenDescendants(root, selector) {
|
|
249
|
+
const matches = [];
|
|
250
|
+
const roots = [root];
|
|
251
|
+
for (const scope of roots) {
|
|
252
|
+
matches.push(...scope.querySelectorAll(selector));
|
|
253
|
+
if (scope.nodeType === Node.ELEMENT_NODE) {
|
|
254
|
+
const shadow = scope.shadowRoot;
|
|
255
|
+
if (shadow) roots.push(shadow);
|
|
256
|
+
}
|
|
257
|
+
for (const element of scope.querySelectorAll("*")) {
|
|
258
|
+
if (element.shadowRoot) roots.push(element.shadowRoot);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return matches;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
function sharedRegistry(key, create) {
|
|
265
|
+
const symbol = Symbol.for(key);
|
|
266
|
+
const scope = globalThis;
|
|
267
|
+
const existing = scope[symbol];
|
|
268
|
+
if (existing !== void 0) return existing;
|
|
269
|
+
const registry = create();
|
|
270
|
+
Object.defineProperty(globalThis, symbol, { value: registry });
|
|
271
|
+
return registry;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
function holdsFocus(element) {
|
|
275
|
+
return element.matches(":focus") || deepActiveElement(element.ownerDocument) === element;
|
|
276
|
+
}
|
|
277
|
+
var TabindexLoan = class _TabindexLoan {
|
|
278
|
+
static #registry = sharedRegistry(
|
|
279
|
+
"stimeo-ui.tabindex-loan.registry.v1",
|
|
280
|
+
() => ({ stacks: /* @__PURE__ */ new WeakMap(), names: /* @__PURE__ */ new Set() })
|
|
281
|
+
);
|
|
282
|
+
#value;
|
|
283
|
+
#record;
|
|
284
|
+
#preserveFocus;
|
|
285
|
+
#lent = /* @__PURE__ */ new Set();
|
|
286
|
+
constructor(value, owner, options = {}) {
|
|
287
|
+
this.#value = value;
|
|
288
|
+
this.#record = `data-${owner}-tabindex-loan`;
|
|
289
|
+
this.#preserveFocus = options.preserveFocus === true;
|
|
290
|
+
_TabindexLoan.#registry.names.add(this.#record);
|
|
291
|
+
}
|
|
292
|
+
lend(element, options = {}) {
|
|
293
|
+
const stack = this.#stack(element);
|
|
294
|
+
const current = element.getAttribute("tabindex");
|
|
295
|
+
const held = stack.find((hold) => hold.loan === this) ?? stack.find(
|
|
296
|
+
(hold) => hold.loan === null && hold.record === this.#record && hold.value === this.#value
|
|
297
|
+
);
|
|
298
|
+
const linked = stack.at(-1)?.value === current;
|
|
299
|
+
if (!held && options.onlyIfUnfocusable && (current !== null || element.tabIndex >= 0)) return;
|
|
300
|
+
if (!held && current !== null && !linked) return;
|
|
301
|
+
this.#lent.add(element);
|
|
302
|
+
if (held) held.loan = this;
|
|
303
|
+
else stack.push({ loan: this, record: this.#record, value: this.#value, linked });
|
|
304
|
+
this.#mark(element, stack);
|
|
305
|
+
if (current === null || !held && current !== this.#value) {
|
|
306
|
+
element.setAttribute("tabindex", this.#value);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return(element) {
|
|
310
|
+
const stack = this.#stack(element);
|
|
311
|
+
const hold = stack.find((held) => held.loan === this) ?? stack.find(
|
|
312
|
+
(held) => held.loan === null && held.record === this.#record && held.value === this.#value
|
|
313
|
+
);
|
|
314
|
+
if (!hold) return false;
|
|
315
|
+
if (!this.#release(element, stack, hold, this.#preserveFocus)) {
|
|
316
|
+
hold.loan = this;
|
|
317
|
+
this.#lent.add(element);
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
this.#lent.delete(element);
|
|
321
|
+
return true;
|
|
322
|
+
}
|
|
323
|
+
returnAll() {
|
|
324
|
+
for (const element of Array.from(this.#lent)) this.return(element);
|
|
325
|
+
}
|
|
326
|
+
reclaim(element) {
|
|
327
|
+
if (element.getAttribute(this.#record) !== this.#value) return;
|
|
328
|
+
const stack = this.#stack(element);
|
|
329
|
+
const hold = stack.find((held) => held.loan === null && held.record === this.#record);
|
|
330
|
+
if (hold && !holdsFocus(element)) this.#release(element, stack, hold);
|
|
331
|
+
}
|
|
332
|
+
reclaimWithin(root) {
|
|
333
|
+
for (const element of queryOpenDescendants(root, `[${this.#record}]`)) {
|
|
334
|
+
this.reclaim(element);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
#stack(element) {
|
|
338
|
+
const stacks = _TabindexLoan.#registry.stacks;
|
|
339
|
+
const stack = stacks.get(element) ?? this.#seed(element);
|
|
340
|
+
stacks.set(element, stack);
|
|
341
|
+
return stack;
|
|
342
|
+
}
|
|
343
|
+
#seed(element) {
|
|
344
|
+
const current = element.getAttribute("tabindex");
|
|
345
|
+
const holds = [];
|
|
346
|
+
for (const record of _TabindexLoan.#registry.names) {
|
|
347
|
+
const value = element.getAttribute(record);
|
|
348
|
+
if (value !== null) holds.push({ loan: null, record, value, linked: true });
|
|
349
|
+
}
|
|
350
|
+
holds.sort((one, other) => Number(one.value === current) - Number(other.value === current));
|
|
351
|
+
for (const [index, hold] of holds.entries()) hold.linked = index > 0;
|
|
352
|
+
return holds;
|
|
353
|
+
}
|
|
354
|
+
#release(element, stack, hold, preserveFocus = false) {
|
|
355
|
+
const current = element.getAttribute("tabindex");
|
|
356
|
+
const index = stack.indexOf(hold);
|
|
357
|
+
const owns = current === hold.value && !stack.slice(index + 1).some((above2) => above2.value === current);
|
|
358
|
+
if (owns && preserveFocus && holdsFocus(element)) return false;
|
|
359
|
+
stack.splice(index, 1);
|
|
360
|
+
const above = stack[index];
|
|
361
|
+
if (above) above.linked &&= hold.linked;
|
|
362
|
+
this.#mark(element, stack);
|
|
363
|
+
if (!owns) return true;
|
|
364
|
+
const below = hold.linked ? stack[index - 1] : void 0;
|
|
365
|
+
if (!below) element.removeAttribute("tabindex");
|
|
366
|
+
else if (below.value !== current) element.setAttribute("tabindex", below.value);
|
|
367
|
+
return true;
|
|
368
|
+
}
|
|
369
|
+
#mark(element, stack) {
|
|
370
|
+
const records = /* @__PURE__ */ new Map([[this.#record, null]]);
|
|
371
|
+
for (const hold of stack) records.set(hold.record, hold.value);
|
|
372
|
+
for (const [name, recorded] of records) {
|
|
373
|
+
setAttributeIfChanged(element, name, recorded);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
|
|
205
378
|
var TransientHooks = class {
|
|
206
379
|
#attributes;
|
|
207
380
|
constructor(options) {
|
|
@@ -232,9 +405,14 @@ var PointerDragController = class _PointerDragController extends Controller {
|
|
|
232
405
|
static actions = ["reset"];
|
|
233
406
|
static events = ["start", "move", "end", "cancel"];
|
|
234
407
|
static #TOUCH_ACTION_MARKER = "data-pointer-drag-touch-action";
|
|
235
|
-
|
|
408
|
+
#tabindex = new TabindexLoan("0", this.identifier, { preserveFocus: true });
|
|
236
409
|
#pointer = null;
|
|
237
410
|
#keyboard = null;
|
|
411
|
+
#connected = false;
|
|
412
|
+
#keyboardFocusSession = null;
|
|
413
|
+
#listeners = new ListenerSet();
|
|
414
|
+
#shadowFocus = new ListenerSet();
|
|
415
|
+
#keyboardFocus = new MicrotaskCoalescer(() => this.#settleKeyboardFocus());
|
|
238
416
|
#followBase = { x: 0, y: 0 };
|
|
239
417
|
#gestureFollows = false;
|
|
240
418
|
#followOutput = null;
|
|
@@ -244,19 +422,30 @@ var PointerDragController = class _PointerDragController extends Controller {
|
|
|
244
422
|
this.#reflectSession();
|
|
245
423
|
});
|
|
246
424
|
connect() {
|
|
425
|
+
this.#connected = true;
|
|
247
426
|
this.#morphRender.observe(this.element);
|
|
248
427
|
if (!this.#pointer && !this.#keyboard) this.#followOutput = null;
|
|
249
428
|
this.#gate.cancel();
|
|
250
429
|
if (!this.#pointer) TRANSIENT_DRAG.reset(this.element);
|
|
251
430
|
if (!this.#keyboard) TRANSIENT_GRAB.reset(this.element);
|
|
252
|
-
this.element
|
|
253
|
-
this.element
|
|
431
|
+
this.#listeners.add(this.element, "pointerdown", this.#onPointerDown);
|
|
432
|
+
this.#listeners.add(this.element, "keydown", this.#onKeydown);
|
|
433
|
+
this.#listeners.add(this.element, "focusout", this.#onFocusout);
|
|
434
|
+
this.#listeners.add(this.element, "focusin", this.#onFocusin);
|
|
435
|
+
this.#keyboardFocus.activate();
|
|
254
436
|
if (!this.hasHandleTarget) this.#prepareHandle(this.element);
|
|
437
|
+
if (this.#keyboard) {
|
|
438
|
+
this.#watchShadowFocus(this.#keyboard.handle);
|
|
439
|
+
this.#checkKeyboardFocus(this.#keyboard);
|
|
440
|
+
}
|
|
255
441
|
}
|
|
256
442
|
disconnect() {
|
|
443
|
+
this.#connected = false;
|
|
257
444
|
this.#morphRender.disconnect();
|
|
258
|
-
this.
|
|
259
|
-
this.
|
|
445
|
+
this.#listeners.dispose();
|
|
446
|
+
this.#shadowFocus.dispose();
|
|
447
|
+
this.#keyboardFocus.cancel();
|
|
448
|
+
this.#keyboardFocusSession = null;
|
|
260
449
|
if (this.#pointer || this.#keyboard) {
|
|
261
450
|
this.#gate.disconnected(this, () => this.#teardown());
|
|
262
451
|
return;
|
|
@@ -264,9 +453,11 @@ var PointerDragController = class _PointerDragController extends Controller {
|
|
|
264
453
|
this.#teardown();
|
|
265
454
|
}
|
|
266
455
|
reset() {
|
|
456
|
+
const follows = this.#pointer || this.#keyboard ? this.#gestureFollows : this.followValue;
|
|
267
457
|
const live = this.#pointer?.started ? this.#pointer.pointerType : this.#keyboard ? "keyboard" : null;
|
|
268
458
|
if (this.#pointer || this.#keyboard) this.#teardownSessions();
|
|
269
459
|
if (live) this.#dispatchCancel(live);
|
|
460
|
+
if (!follows) return;
|
|
270
461
|
this.#followBase = { x: 0, y: 0 };
|
|
271
462
|
this.#applyFollow(0, 0);
|
|
272
463
|
}
|
|
@@ -276,7 +467,9 @@ var PointerDragController = class _PointerDragController extends Controller {
|
|
|
276
467
|
}
|
|
277
468
|
handleTargetDisconnected(handle) {
|
|
278
469
|
this.#restoreHandle(handle);
|
|
279
|
-
if (this
|
|
470
|
+
if (!this.#connected) return;
|
|
471
|
+
if (this.element.contains(handle) && (this.handleTargets.includes(handle) || DetachGate.isDetached(this)))
|
|
472
|
+
return;
|
|
280
473
|
const interrupted = this.#pointer?.handle === handle && this.#pointer.started ? this.#pointer.pointerType : this.#keyboard?.handle === handle ? "keyboard" : null;
|
|
281
474
|
if (this.#pointer?.handle === handle) this.#endPointerSession();
|
|
282
475
|
if (this.#keyboard?.handle === handle) this.#clearKeyboardSession();
|
|
@@ -298,7 +491,8 @@ var PointerDragController = class _PointerDragController extends Controller {
|
|
|
298
491
|
}
|
|
299
492
|
this.#teardownSessions();
|
|
300
493
|
}
|
|
301
|
-
#onPointerDown = (
|
|
494
|
+
#onPointerDown = (rawEvent) => {
|
|
495
|
+
const event = rawEvent;
|
|
302
496
|
if (this.disabledValue || this.#pointer || this.#keyboard || event.button !== 0) return;
|
|
303
497
|
const handle = this.#handleFor(event.target);
|
|
304
498
|
if (!handle) return;
|
|
@@ -353,13 +547,14 @@ var PointerDragController = class _PointerDragController extends Controller {
|
|
|
353
547
|
}
|
|
354
548
|
this.#dispatchCancel(pointerType);
|
|
355
549
|
}
|
|
356
|
-
#onKeydown = (
|
|
550
|
+
#onKeydown = (rawEvent) => {
|
|
551
|
+
const event = rawEvent;
|
|
357
552
|
if (this.disabledValue) return;
|
|
358
553
|
const handle = this.#handleFor(event.target);
|
|
359
554
|
if (!handle) return;
|
|
360
555
|
if (event.defaultPrevented) return;
|
|
361
556
|
if (event.isComposing) return;
|
|
362
|
-
if (this.#ownsNativeKeys(event.target, handle)) return;
|
|
557
|
+
if (this.#ownsNativeKeys(event.composedPath()[0] ?? event.target, handle)) return;
|
|
363
558
|
if (isReservedArrowChord(event)) return;
|
|
364
559
|
if (event.key === "Escape") {
|
|
365
560
|
if (this.#pointer?.started) {
|
|
@@ -383,6 +578,7 @@ var PointerDragController = class _PointerDragController extends Controller {
|
|
|
383
578
|
}
|
|
384
579
|
if (!this.#keyboard) return;
|
|
385
580
|
if (event.key === "Home" || event.key === "End") {
|
|
581
|
+
if (hasModifierChord(event)) return;
|
|
386
582
|
event.preventDefault();
|
|
387
583
|
return;
|
|
388
584
|
}
|
|
@@ -404,9 +600,50 @@ var PointerDragController = class _PointerDragController extends Controller {
|
|
|
404
600
|
}
|
|
405
601
|
});
|
|
406
602
|
};
|
|
603
|
+
#onFocusin = () => {
|
|
604
|
+
const session = this.#keyboard;
|
|
605
|
+
if (session) {
|
|
606
|
+
this.#watchShadowFocus(session.handle);
|
|
607
|
+
this.#checkKeyboardFocus(session);
|
|
608
|
+
}
|
|
609
|
+
};
|
|
610
|
+
#watchShadowFocus(handle) {
|
|
611
|
+
const tree = handle.getRootNode();
|
|
612
|
+
let active = tree.activeElement;
|
|
613
|
+
while (active?.shadowRoot) {
|
|
614
|
+
const shadow = active.shadowRoot;
|
|
615
|
+
this.#shadowFocus.add(shadow, "focusin", this.#onFocusin);
|
|
616
|
+
active = shadow.activeElement;
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
#onFocusout = (rawEvent) => {
|
|
620
|
+
const destination = rawEvent.relatedTarget;
|
|
621
|
+
const session = this.#keyboard;
|
|
622
|
+
if (session && this.#handleFor(destination) === session.handle && !this.#ownsNativeKeys(destination, session.handle)) {
|
|
623
|
+
return;
|
|
624
|
+
}
|
|
625
|
+
this.#checkKeyboardFocus(this.#keyboard);
|
|
626
|
+
};
|
|
627
|
+
#checkKeyboardFocus(session) {
|
|
628
|
+
this.#keyboardFocusSession = session;
|
|
629
|
+
this.#keyboardFocus.schedule();
|
|
630
|
+
}
|
|
631
|
+
#settleKeyboardFocus() {
|
|
632
|
+
const session = this.#keyboardFocusSession;
|
|
633
|
+
this.#keyboardFocusSession = null;
|
|
634
|
+
if (!session || this.#keyboard !== session || !this.element.isConnected) return;
|
|
635
|
+
const tree = session.handle.getRootNode();
|
|
636
|
+
const active = tree.activeElement ?? null;
|
|
637
|
+
if (this.#handleFor(active) === session.handle && !this.#ownsNativeKeys(active, session.handle)) {
|
|
638
|
+
return;
|
|
639
|
+
}
|
|
640
|
+
this.#clearKeyboardSession();
|
|
641
|
+
this.#dispatchCancel("keyboard");
|
|
642
|
+
}
|
|
407
643
|
#grabKeyboard(handle) {
|
|
408
644
|
this.#beginGesture();
|
|
409
645
|
this.#keyboard = { handle, dx: 0, dy: 0 };
|
|
646
|
+
this.#watchShadowFocus(handle);
|
|
410
647
|
this.element.setAttribute("data-grabbed", "true");
|
|
411
648
|
handle.setAttribute("data-grabbed", "true");
|
|
412
649
|
this.dispatch("start", { detail: { x: 0, y: 0, pointerType: "keyboard" } });
|
|
@@ -442,14 +679,17 @@ var PointerDragController = class _PointerDragController extends Controller {
|
|
|
442
679
|
this.#pointer?.pointer?.end();
|
|
443
680
|
}
|
|
444
681
|
#clearKeyboardSession() {
|
|
682
|
+
this.#shadowFocus.dispose();
|
|
445
683
|
this.#keyboard?.handle.removeAttribute("data-grabbed");
|
|
446
684
|
this.#keyboard = null;
|
|
685
|
+
this.#keyboardFocusSession = null;
|
|
447
686
|
this.element.removeAttribute("data-grabbed");
|
|
448
687
|
}
|
|
449
688
|
#teardown() {
|
|
450
689
|
const interrupted = this.#pointer?.started ? this.#pointer.pointerType : this.#keyboard ? "keyboard" : null;
|
|
451
690
|
this.#teardownSessions();
|
|
452
691
|
for (const handle of this.#handles()) this.#restoreHandle(handle);
|
|
692
|
+
this.#tabindex.returnAll();
|
|
453
693
|
if (interrupted) this.#followReset();
|
|
454
694
|
if (interrupted && this.element.isConnected) this.#dispatchCancel(interrupted);
|
|
455
695
|
}
|
|
@@ -530,14 +770,13 @@ var PointerDragController = class _PointerDragController extends Controller {
|
|
|
530
770
|
handle.style.touchAction = lent;
|
|
531
771
|
handle.setAttribute(_PointerDragController.#TOUCH_ACTION_MARKER, "true");
|
|
532
772
|
}
|
|
533
|
-
|
|
534
|
-
handle.setAttribute("tabindex", "0");
|
|
535
|
-
handle.setAttribute(_PointerDragController.#TABINDEX_MARKER, "true");
|
|
536
|
-
}
|
|
773
|
+
this.#tabindex.lend(handle, { onlyIfUnfocusable: true });
|
|
537
774
|
}
|
|
538
775
|
#ownsNativeKeys(target, handle) {
|
|
539
|
-
|
|
540
|
-
|
|
776
|
+
let element = target;
|
|
777
|
+
while (element.shadowRoot?.activeElement) element = element.shadowRoot.activeElement;
|
|
778
|
+
const owner = closestInFlatTree(element, NATIVE_KEY_OWNERS);
|
|
779
|
+
return owner !== null && owner !== handle && flatTreeContains(handle, owner);
|
|
541
780
|
}
|
|
542
781
|
#restoreHandle(handle) {
|
|
543
782
|
if (handle.hasAttribute(_PointerDragController.#TOUCH_ACTION_MARKER)) {
|
|
@@ -546,15 +785,7 @@ var PointerDragController = class _PointerDragController extends Controller {
|
|
|
546
785
|
}
|
|
547
786
|
handle.removeAttribute(_PointerDragController.#TOUCH_ACTION_MARKER);
|
|
548
787
|
}
|
|
549
|
-
|
|
550
|
-
const ours = handle.getAttribute("tabindex") === "0";
|
|
551
|
-
if (ours && document.activeElement !== handle) {
|
|
552
|
-
handle.removeAttribute("tabindex");
|
|
553
|
-
handle.removeAttribute(_PointerDragController.#TABINDEX_MARKER);
|
|
554
|
-
return;
|
|
555
|
-
}
|
|
556
|
-
if (!ours) handle.removeAttribute(_PointerDragController.#TABINDEX_MARKER);
|
|
557
|
-
}
|
|
788
|
+
this.#tabindex.return(handle);
|
|
558
789
|
}
|
|
559
790
|
get #safeThreshold() {
|
|
560
791
|
return this.#numbers.read(
|