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
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
import { Controller } from '@hotwired/stimulus';
|
|
2
2
|
|
|
3
|
+
function setAttributeIfChanged(element, name, value, beforeWrite) {
|
|
4
|
+
if (element.getAttribute(name) === value) return false;
|
|
5
|
+
if (value === null) element.removeAttribute(name);
|
|
6
|
+
else element.setAttribute(name, value);
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
|
|
3
10
|
function sharedRegistry(key, create) {
|
|
4
11
|
const symbol = Symbol.for(key);
|
|
5
12
|
const scope = globalThis;
|
|
6
13
|
const existing = scope[symbol];
|
|
7
14
|
if (existing !== void 0) return existing;
|
|
8
|
-
const
|
|
9
|
-
Object.defineProperty(globalThis, symbol, { value:
|
|
10
|
-
return
|
|
15
|
+
const registry2 = create();
|
|
16
|
+
Object.defineProperty(globalThis, symbol, { value: registry2 });
|
|
17
|
+
return registry2;
|
|
11
18
|
}
|
|
12
19
|
|
|
20
|
+
var registry = sharedRegistry(
|
|
21
|
+
"stimeo-ui.attribute-lease.registry.v1",
|
|
22
|
+
() => ({ stacks: /* @__PURE__ */ new WeakMap(), names: /* @__PURE__ */ new Map() })
|
|
23
|
+
);
|
|
13
24
|
function isAttributeValue(value) {
|
|
14
25
|
return value === null || typeof value === "string";
|
|
15
26
|
}
|
|
@@ -26,24 +37,46 @@ function readLeaseRecord(element, record) {
|
|
|
26
37
|
return void 0;
|
|
27
38
|
}
|
|
28
39
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
);
|
|
40
|
+
function attributeStack(element, attribute) {
|
|
41
|
+
const byAttribute = registry.stacks.get(element) ?? /* @__PURE__ */ new Map();
|
|
42
|
+
registry.stacks.set(element, byAttribute);
|
|
43
|
+
const known = byAttribute.get(attribute);
|
|
44
|
+
if (known) return known;
|
|
45
|
+
const found = [];
|
|
46
|
+
for (const record of registry.names.get(attribute) ?? []) {
|
|
47
|
+
const read = readLeaseRecord(element, record);
|
|
48
|
+
if (read) found.push({ ...read, record });
|
|
49
|
+
}
|
|
50
|
+
const depth = ({ beneath }) => beneath.filter((name) => found.some((other) => other.record === name)).length;
|
|
51
|
+
const stack = found.sort((one, other) => depth(one) - depth(other)).map(({ record, written, original, linked }, index) => ({
|
|
52
|
+
lease: null,
|
|
53
|
+
record,
|
|
54
|
+
written,
|
|
55
|
+
original,
|
|
56
|
+
linked: linked && index > 0
|
|
57
|
+
}));
|
|
58
|
+
byAttribute.set(attribute, stack);
|
|
59
|
+
return stack;
|
|
60
|
+
}
|
|
61
|
+
function findHold(stack, lease, record) {
|
|
62
|
+
return stack.find((held) => held.lease === lease) ?? stack.find((held) => held.lease === null && held.record === record);
|
|
63
|
+
}
|
|
64
|
+
var AttributeLease = class {
|
|
34
65
|
#attribute;
|
|
35
66
|
#record;
|
|
36
67
|
#base;
|
|
68
|
+
#preserveAuthor;
|
|
37
69
|
#held = /* @__PURE__ */ new Set();
|
|
38
70
|
constructor(attribute, owner, options = {}) {
|
|
39
71
|
this.#attribute = attribute;
|
|
40
72
|
this.#record = `data-${owner}-${attribute}-lease`;
|
|
41
73
|
this.#base = options.base === true;
|
|
42
|
-
|
|
74
|
+
this.#preserveAuthor = options.preserveAuthor === true;
|
|
75
|
+
const names = registry.names;
|
|
43
76
|
names.set(attribute, (names.get(attribute) ?? /* @__PURE__ */ new Set()).add(this.#record));
|
|
44
77
|
}
|
|
45
78
|
write(element, value) {
|
|
46
|
-
const stack = this.#
|
|
79
|
+
const stack = attributeStack(element, this.#attribute);
|
|
47
80
|
const hold = this.#take(stack) ?? this.#acquire(element, stack);
|
|
48
81
|
this.#held.add(element);
|
|
49
82
|
const shows = !this.#covered(element, stack, hold);
|
|
@@ -53,8 +86,8 @@ var AttributeLease = class _AttributeLease {
|
|
|
53
86
|
}
|
|
54
87
|
return(element) {
|
|
55
88
|
const held = this.#held.delete(element);
|
|
56
|
-
const known =
|
|
57
|
-
const stack = held || known || element.hasAttribute(this.#record) ? this.#
|
|
89
|
+
const known = registry.stacks.get(element)?.has(this.#attribute);
|
|
90
|
+
const stack = held || known || element.hasAttribute(this.#record) ? attributeStack(element, this.#attribute) : [];
|
|
58
91
|
const hold = this.#take(stack);
|
|
59
92
|
if (!hold) return false;
|
|
60
93
|
const carries = element.getAttribute(this.#attribute) === hold.written;
|
|
@@ -72,31 +105,8 @@ var AttributeLease = class _AttributeLease {
|
|
|
72
105
|
returnAll() {
|
|
73
106
|
for (const element of Array.from(this.#held)) this.return(element);
|
|
74
107
|
}
|
|
75
|
-
#stack(element) {
|
|
76
|
-
const stacks = _AttributeLease.#registry.stacks;
|
|
77
|
-
const byAttribute = stacks.get(element) ?? /* @__PURE__ */ new Map();
|
|
78
|
-
stacks.set(element, byAttribute);
|
|
79
|
-
const stack = byAttribute.get(this.#attribute) ?? this.#seed(element);
|
|
80
|
-
byAttribute.set(this.#attribute, stack);
|
|
81
|
-
return stack;
|
|
82
|
-
}
|
|
83
|
-
#seed(element) {
|
|
84
|
-
const found = [];
|
|
85
|
-
for (const record of _AttributeLease.#registry.names.get(this.#attribute) ?? []) {
|
|
86
|
-
const read = readLeaseRecord(element, record);
|
|
87
|
-
if (read) found.push({ ...read, record });
|
|
88
|
-
}
|
|
89
|
-
const depth = ({ beneath }) => beneath.filter((name) => found.some((other) => other.record === name)).length;
|
|
90
|
-
return found.sort((one, other) => depth(one) - depth(other)).map(({ record, written, original, linked }, index) => ({
|
|
91
|
-
lease: null,
|
|
92
|
-
record,
|
|
93
|
-
written,
|
|
94
|
-
original,
|
|
95
|
-
linked: linked && index > 0
|
|
96
|
-
}));
|
|
97
|
-
}
|
|
98
108
|
#take(stack) {
|
|
99
|
-
const hold = stack
|
|
109
|
+
const hold = findHold(stack, this, this.#record);
|
|
100
110
|
if (hold) hold.lease = this;
|
|
101
111
|
return hold;
|
|
102
112
|
}
|
|
@@ -105,7 +115,7 @@ var AttributeLease = class _AttributeLease {
|
|
|
105
115
|
const top = stack.at(-1);
|
|
106
116
|
const bottom = stack[0];
|
|
107
117
|
const over = top?.written === current ? top : void 0;
|
|
108
|
-
const from = this.#base ? bottom : over;
|
|
118
|
+
const from = this.#base ? this.#preserveAuthor && !stack.some((held) => held.written === current) ? void 0 : bottom : over;
|
|
109
119
|
const hold = {
|
|
110
120
|
lease: this,
|
|
111
121
|
record: this.#record,
|
|
@@ -135,15 +145,11 @@ var AttributeLease = class _AttributeLease {
|
|
|
135
145
|
);
|
|
136
146
|
});
|
|
137
147
|
for (const [name, recorded] of records) {
|
|
138
|
-
|
|
139
|
-
if (recorded === null) element.removeAttribute(name);
|
|
140
|
-
else element.setAttribute(name, recorded);
|
|
148
|
+
setAttributeIfChanged(element, name, recorded);
|
|
141
149
|
}
|
|
142
150
|
}
|
|
143
151
|
#reflect(element, value) {
|
|
144
|
-
|
|
145
|
-
if (value === null) element.removeAttribute(this.#attribute);
|
|
146
|
-
else element.setAttribute(this.#attribute, value);
|
|
152
|
+
setAttributeIfChanged(element, this.#attribute, value);
|
|
147
153
|
}
|
|
148
154
|
};
|
|
149
155
|
|
|
@@ -234,6 +240,44 @@ function firstTabStop(root) {
|
|
|
234
240
|
function hasTabStop(root) {
|
|
235
241
|
return firstTabStop(root) !== null;
|
|
236
242
|
}
|
|
243
|
+
function deepActiveElement(ownerDocument) {
|
|
244
|
+
let active = ownerDocument.activeElement;
|
|
245
|
+
while (active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;
|
|
246
|
+
return active;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
var ListenerSet = class {
|
|
250
|
+
#abort = new AbortController();
|
|
251
|
+
add(target, type, handler, options) {
|
|
252
|
+
target.addEventListener(type, handler, { ...options, signal: this.#abort.signal });
|
|
253
|
+
}
|
|
254
|
+
dispose() {
|
|
255
|
+
this.#abort.abort();
|
|
256
|
+
this.#abort = new AbortController();
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
var FontLoadWatcher = class {
|
|
261
|
+
#listeners = new ListenerSet();
|
|
262
|
+
#onSettled;
|
|
263
|
+
#fonts = null;
|
|
264
|
+
constructor(run) {
|
|
265
|
+
this.#onSettled = () => run();
|
|
266
|
+
}
|
|
267
|
+
observe(element) {
|
|
268
|
+
const fonts = element.ownerDocument.fonts ?? null;
|
|
269
|
+
if (fonts === this.#fonts) return;
|
|
270
|
+
this.disconnect();
|
|
271
|
+
if (!fonts) return;
|
|
272
|
+
this.#fonts = fonts;
|
|
273
|
+
this.#listeners.add(fonts, "loadingdone", this.#onSettled);
|
|
274
|
+
this.#listeners.add(fonts, "loadingerror", this.#onSettled);
|
|
275
|
+
}
|
|
276
|
+
disconnect() {
|
|
277
|
+
this.#listeners.dispose();
|
|
278
|
+
this.#fonts = null;
|
|
279
|
+
}
|
|
280
|
+
};
|
|
237
281
|
|
|
238
282
|
var FrameCoalescer = class {
|
|
239
283
|
#frame = null;
|
|
@@ -319,17 +363,6 @@ function logicalScrollMetrics(element, horizontal) {
|
|
|
319
363
|
return { position: Math.min(max, Math.max(0, position)), max };
|
|
320
364
|
}
|
|
321
365
|
|
|
322
|
-
var ListenerSet = class {
|
|
323
|
-
#abort = new AbortController();
|
|
324
|
-
add(target, type, handler, options) {
|
|
325
|
-
target.addEventListener(type, handler, { ...options, signal: this.#abort.signal });
|
|
326
|
-
}
|
|
327
|
-
dispose() {
|
|
328
|
-
this.#abort.abort();
|
|
329
|
-
this.#abort = new AbortController();
|
|
330
|
-
}
|
|
331
|
-
};
|
|
332
|
-
|
|
333
366
|
var MicrotaskCoalescer = class {
|
|
334
367
|
#run;
|
|
335
368
|
#queued = false;
|
|
@@ -346,6 +379,9 @@ var MicrotaskCoalescer = class {
|
|
|
346
379
|
this.#queued = false;
|
|
347
380
|
this.#generation += 1;
|
|
348
381
|
}
|
|
382
|
+
get pending() {
|
|
383
|
+
return this.#queued;
|
|
384
|
+
}
|
|
349
385
|
schedule() {
|
|
350
386
|
if (!this.#active || this.#queued) return;
|
|
351
387
|
this.#queued = true;
|
|
@@ -376,6 +412,9 @@ var MorphRenderWatcher = class {
|
|
|
376
412
|
schedule() {
|
|
377
413
|
this.#pass.schedule();
|
|
378
414
|
}
|
|
415
|
+
get pending() {
|
|
416
|
+
return this.#pass.pending;
|
|
417
|
+
}
|
|
379
418
|
disconnect() {
|
|
380
419
|
this.#listeners.dispose();
|
|
381
420
|
this.#pass.cancel();
|
|
@@ -512,9 +551,7 @@ var StylePropertyLease = class _StylePropertyLease {
|
|
|
512
551
|
);
|
|
513
552
|
});
|
|
514
553
|
for (const [name, recorded] of records) {
|
|
515
|
-
|
|
516
|
-
if (recorded === null) element.removeAttribute(name);
|
|
517
|
-
else element.setAttribute(name, recorded);
|
|
554
|
+
setAttributeIfChanged(element, name, recorded);
|
|
518
555
|
}
|
|
519
556
|
}
|
|
520
557
|
#carries(element, hold) {
|
|
@@ -547,6 +584,9 @@ function queryOpenDescendants(root, selector) {
|
|
|
547
584
|
return matches;
|
|
548
585
|
}
|
|
549
586
|
|
|
587
|
+
function holdsFocus(element) {
|
|
588
|
+
return element.matches(":focus") || deepActiveElement(element.ownerDocument) === element;
|
|
589
|
+
}
|
|
550
590
|
var TabindexLoan = class _TabindexLoan {
|
|
551
591
|
static #registry = sharedRegistry(
|
|
552
592
|
"stimeo-ui.tabindex-loan.registry.v1",
|
|
@@ -554,19 +594,22 @@ var TabindexLoan = class _TabindexLoan {
|
|
|
554
594
|
);
|
|
555
595
|
#value;
|
|
556
596
|
#record;
|
|
597
|
+
#preserveFocus;
|
|
557
598
|
#lent = /* @__PURE__ */ new Set();
|
|
558
|
-
constructor(value, owner) {
|
|
599
|
+
constructor(value, owner, options = {}) {
|
|
559
600
|
this.#value = value;
|
|
560
601
|
this.#record = `data-${owner}-tabindex-loan`;
|
|
602
|
+
this.#preserveFocus = options.preserveFocus === true;
|
|
561
603
|
_TabindexLoan.#registry.names.add(this.#record);
|
|
562
604
|
}
|
|
563
|
-
lend(element) {
|
|
605
|
+
lend(element, options = {}) {
|
|
564
606
|
const stack = this.#stack(element);
|
|
565
607
|
const current = element.getAttribute("tabindex");
|
|
566
608
|
const held = stack.find((hold) => hold.loan === this) ?? stack.find(
|
|
567
609
|
(hold) => hold.loan === null && hold.record === this.#record && hold.value === this.#value
|
|
568
610
|
);
|
|
569
611
|
const linked = stack.at(-1)?.value === current;
|
|
612
|
+
if (!held && options.onlyIfUnfocusable && (current !== null || element.tabIndex >= 0)) return;
|
|
570
613
|
if (!held && current !== null && !linked) return;
|
|
571
614
|
this.#lent.add(element);
|
|
572
615
|
if (held) held.loan = this;
|
|
@@ -576,19 +619,28 @@ var TabindexLoan = class _TabindexLoan {
|
|
|
576
619
|
element.setAttribute("tabindex", this.#value);
|
|
577
620
|
}
|
|
578
621
|
}
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
622
|
+
return(element) {
|
|
623
|
+
const stack = this.#stack(element);
|
|
624
|
+
const hold = stack.find((held) => held.loan === this) ?? stack.find(
|
|
625
|
+
(held) => held.loan === null && held.record === this.#record && held.value === this.#value
|
|
626
|
+
);
|
|
627
|
+
if (!hold) return false;
|
|
628
|
+
if (!this.#release(element, stack, hold, this.#preserveFocus)) {
|
|
629
|
+
hold.loan = this;
|
|
630
|
+
this.#lent.add(element);
|
|
631
|
+
return false;
|
|
584
632
|
}
|
|
585
|
-
this.#lent.
|
|
633
|
+
this.#lent.delete(element);
|
|
634
|
+
return true;
|
|
635
|
+
}
|
|
636
|
+
returnAll() {
|
|
637
|
+
for (const element of Array.from(this.#lent)) this.return(element);
|
|
586
638
|
}
|
|
587
639
|
reclaim(element) {
|
|
588
640
|
if (element.getAttribute(this.#record) !== this.#value) return;
|
|
589
641
|
const stack = this.#stack(element);
|
|
590
642
|
const hold = stack.find((held) => held.loan === null && held.record === this.#record);
|
|
591
|
-
if (hold && !element
|
|
643
|
+
if (hold && !holdsFocus(element)) this.#release(element, stack, hold);
|
|
592
644
|
}
|
|
593
645
|
reclaimWithin(root) {
|
|
594
646
|
for (const element of queryOpenDescendants(root, `[${this.#record}]`)) {
|
|
@@ -612,26 +664,26 @@ var TabindexLoan = class _TabindexLoan {
|
|
|
612
664
|
for (const [index, hold] of holds.entries()) hold.linked = index > 0;
|
|
613
665
|
return holds;
|
|
614
666
|
}
|
|
615
|
-
#release(element, stack, hold) {
|
|
667
|
+
#release(element, stack, hold, preserveFocus = false) {
|
|
616
668
|
const current = element.getAttribute("tabindex");
|
|
617
669
|
const index = stack.indexOf(hold);
|
|
618
670
|
const owns = current === hold.value && !stack.slice(index + 1).some((above2) => above2.value === current);
|
|
671
|
+
if (owns && preserveFocus && holdsFocus(element)) return false;
|
|
619
672
|
stack.splice(index, 1);
|
|
620
673
|
const above = stack[index];
|
|
621
674
|
if (above) above.linked &&= hold.linked;
|
|
622
675
|
this.#mark(element, stack);
|
|
623
|
-
if (!owns) return;
|
|
676
|
+
if (!owns) return true;
|
|
624
677
|
const below = hold.linked ? stack[index - 1] : void 0;
|
|
625
678
|
if (!below) element.removeAttribute("tabindex");
|
|
626
679
|
else if (below.value !== current) element.setAttribute("tabindex", below.value);
|
|
680
|
+
return true;
|
|
627
681
|
}
|
|
628
682
|
#mark(element, stack) {
|
|
629
683
|
const records = /* @__PURE__ */ new Map([[this.#record, null]]);
|
|
630
684
|
for (const hold of stack) records.set(hold.record, hold.value);
|
|
631
685
|
for (const [name, recorded] of records) {
|
|
632
|
-
|
|
633
|
-
if (recorded === null) element.removeAttribute(name);
|
|
634
|
-
else element.setAttribute(name, recorded);
|
|
686
|
+
setAttributeIfChanged(element, name, recorded);
|
|
635
687
|
}
|
|
636
688
|
}
|
|
637
689
|
};
|
|
@@ -654,12 +706,12 @@ var ScrollAreaController = class extends Controller {
|
|
|
654
706
|
this.identifier
|
|
655
707
|
);
|
|
656
708
|
#viewport = null;
|
|
709
|
+
#viewportListeners = new ListenerSet();
|
|
657
710
|
#content = null;
|
|
658
711
|
#nameSources = null;
|
|
659
712
|
#nameGraph = null;
|
|
660
713
|
#observedNameIds = /* @__PURE__ */ new Set();
|
|
661
714
|
#observedNameSources = [];
|
|
662
|
-
#fonts = null;
|
|
663
715
|
#frames = new FrameCoalescer();
|
|
664
716
|
#overflowing = false;
|
|
665
717
|
#lastEdge = null;
|
|
@@ -671,17 +723,18 @@ var ScrollAreaController = class extends Controller {
|
|
|
671
723
|
#onFontsSettled = () => {
|
|
672
724
|
this.#refresh();
|
|
673
725
|
};
|
|
726
|
+
#fonts = new FontLoadWatcher(this.#onFontsSettled);
|
|
674
727
|
connect() {
|
|
675
728
|
this.#rebind.observe(this.element);
|
|
676
729
|
this.#layout.observeViewport();
|
|
677
|
-
this.#
|
|
730
|
+
this.#fonts.observe(this.element);
|
|
678
731
|
this.#syncViewport();
|
|
679
732
|
}
|
|
680
733
|
disconnect() {
|
|
681
734
|
this.#rebind.disconnect();
|
|
682
735
|
if (this.#viewport) this.#unbindViewport(this.#viewport);
|
|
683
736
|
this.#layout.disconnect();
|
|
684
|
-
this.#
|
|
737
|
+
this.#fonts.disconnect();
|
|
685
738
|
this.#clearHostState();
|
|
686
739
|
}
|
|
687
740
|
orientationValueChanged() {
|
|
@@ -705,7 +758,7 @@ var ScrollAreaController = class extends Controller {
|
|
|
705
758
|
this.#clearHostState();
|
|
706
759
|
return;
|
|
707
760
|
}
|
|
708
|
-
|
|
761
|
+
this.#viewportListeners.add(next, "scroll", this.#onScroll, { passive: true });
|
|
709
762
|
this.#layout.observeDescendantLoads(next);
|
|
710
763
|
this.#layout.observe(next);
|
|
711
764
|
this.#bindContentObserver(next);
|
|
@@ -739,7 +792,7 @@ var ScrollAreaController = class extends Controller {
|
|
|
739
792
|
}
|
|
740
793
|
#unbindViewport(viewport) {
|
|
741
794
|
this.#frames.cancel();
|
|
742
|
-
|
|
795
|
+
this.#viewportListeners.dispose();
|
|
743
796
|
this.#layout.unobserveDescendantLoads();
|
|
744
797
|
this.#layout.unobserve(viewport);
|
|
745
798
|
this.#content?.disconnect();
|
|
@@ -935,18 +988,6 @@ var ScrollAreaController = class extends Controller {
|
|
|
935
988
|
this.#observedNameIds.clear();
|
|
936
989
|
this.#observedNameSources = [];
|
|
937
990
|
}
|
|
938
|
-
#bindFonts() {
|
|
939
|
-
const fonts = this.element.ownerDocument.fonts;
|
|
940
|
-
if (!fonts || this.#fonts === fonts) return;
|
|
941
|
-
this.#fonts = fonts;
|
|
942
|
-
fonts.addEventListener("loadingdone", this.#onFontsSettled);
|
|
943
|
-
fonts.addEventListener("loadingerror", this.#onFontsSettled);
|
|
944
|
-
}
|
|
945
|
-
#unbindFonts() {
|
|
946
|
-
this.#fonts?.removeEventListener("loadingdone", this.#onFontsSettled);
|
|
947
|
-
this.#fonts?.removeEventListener("loadingerror", this.#onFontsSettled);
|
|
948
|
-
this.#fonts = null;
|
|
949
|
-
}
|
|
950
991
|
};
|
|
951
992
|
|
|
952
993
|
export { ScrollAreaController };
|