stimeo-ui 0.17.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +106 -1
- package/README.md +19 -10
- package/dist/cable/index.d.ts +9 -8
- 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 +289 -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 +64 -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 +199 -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.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 +30 -13
- package/dist/controllers/input_mask_controller.js +411 -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 +17 -15
- package/dist/controllers/multi_select_controller.js +251 -94
- 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 +19 -8
- package/dist/controllers/pointer_drag_controller.js +249 -23
- package/dist/controllers/pointer_drag_controller.js.map +1 -1
- package/dist/controllers/popover_controller.d.ts +3 -3
- package/dist/controllers/popover_controller.js +82 -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 +2 -0
- package/dist/index.js +2451 -1312
- package/dist/index.js.map +1 -1
- package/dist/inspector/cli.d.ts +15 -11
- package/dist/inspector/cli.js +16 -3
- package/dist/inspector/cli.js.map +1 -1
- package/dist/inspector/cli_bin.js +53 -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 +7 -7
- package/dist/positioning/index.js +6 -0
- package/dist/positioning/index.js.map +1 -1
- package/package.json +10 -9
|
@@ -30,6 +30,107 @@ function isReservedArrowChord(event, allow = []) {
|
|
|
30
30
|
if (!event.key.startsWith("Arrow")) return false;
|
|
31
31
|
return event.altKey && !allow.includes("alt") || event.ctrlKey && !allow.includes("ctrl") || event.metaKey && !allow.includes("meta") || event.shiftKey && !allow.includes("shift");
|
|
32
32
|
}
|
|
33
|
+
function hasModifierChord(event) {
|
|
34
|
+
return event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function setAttributeIfChanged(element, name, value, beforeWrite) {
|
|
38
|
+
if (element.getAttribute(name) === value) return false;
|
|
39
|
+
beforeWrite?.();
|
|
40
|
+
if (value === null) element.removeAttribute(name);
|
|
41
|
+
else element.setAttribute(name, value);
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
var AuthoredMutationWatcher = class {
|
|
46
|
+
#onAuthored;
|
|
47
|
+
#claims = null;
|
|
48
|
+
#observer = null;
|
|
49
|
+
constructor(onAuthored) {
|
|
50
|
+
this.#onAuthored = onAuthored;
|
|
51
|
+
}
|
|
52
|
+
observe(root, options) {
|
|
53
|
+
this.disconnect();
|
|
54
|
+
const observer = new MutationObserver((records) => {
|
|
55
|
+
if (this.#observer !== observer) return;
|
|
56
|
+
const authored = this.#filter(records);
|
|
57
|
+
if (authored.length > 0) this.#onAuthored(authored);
|
|
58
|
+
});
|
|
59
|
+
this.#observer = observer;
|
|
60
|
+
this.#claims = { attributes: /* @__PURE__ */ new Map(), children: /* @__PURE__ */ new Map() };
|
|
61
|
+
observer.observe(root, {
|
|
62
|
+
attributes: true,
|
|
63
|
+
attributeFilter: [...options.attributes],
|
|
64
|
+
subtree: options.subtree ?? false,
|
|
65
|
+
childList: options.childList ?? false
|
|
66
|
+
});
|
|
67
|
+
if (options.ancestorAttributes) {
|
|
68
|
+
let ancestor = root.parentElement;
|
|
69
|
+
while (ancestor) {
|
|
70
|
+
observer.observe(ancestor, {
|
|
71
|
+
attributes: true,
|
|
72
|
+
attributeFilter: [...options.ancestorAttributes]
|
|
73
|
+
});
|
|
74
|
+
ancestor = ancestor.parentElement;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
claim(target, name, value) {
|
|
79
|
+
const claims = this.#claims?.attributes;
|
|
80
|
+
let attributes = claims?.get(target);
|
|
81
|
+
if (!attributes) {
|
|
82
|
+
attributes = /* @__PURE__ */ new Map();
|
|
83
|
+
claims?.set(target, attributes);
|
|
84
|
+
}
|
|
85
|
+
const pending = attributes.get(name);
|
|
86
|
+
attributes.set(name, { value, count: (pending?.count ?? 0) + 1 });
|
|
87
|
+
}
|
|
88
|
+
claimCurrent(target, name) {
|
|
89
|
+
this.claim(target, name, target.getAttribute(name));
|
|
90
|
+
}
|
|
91
|
+
claimChildList(target, added, removed) {
|
|
92
|
+
const claims = this.#claims?.children;
|
|
93
|
+
const pending = claims?.get(target) ?? { added: /* @__PURE__ */ new Map(), removed: /* @__PURE__ */ new Map() };
|
|
94
|
+
for (const node of added) pending.added.set(node, (pending.added.get(node) ?? 0) + 1);
|
|
95
|
+
for (const node of removed) pending.removed.set(node, (pending.removed.get(node) ?? 0) + 1);
|
|
96
|
+
claims?.set(target, pending);
|
|
97
|
+
}
|
|
98
|
+
take() {
|
|
99
|
+
return this.#filter(this.#observer?.takeRecords() ?? []);
|
|
100
|
+
}
|
|
101
|
+
disconnect() {
|
|
102
|
+
this.#observer?.disconnect();
|
|
103
|
+
this.#observer = null;
|
|
104
|
+
this.#claims = null;
|
|
105
|
+
}
|
|
106
|
+
#filter(records) {
|
|
107
|
+
const authored = records.filter((record) => !this.#consume(record));
|
|
108
|
+
this.#claims?.attributes.clear();
|
|
109
|
+
this.#claims?.children.clear();
|
|
110
|
+
return authored;
|
|
111
|
+
}
|
|
112
|
+
#consume(record) {
|
|
113
|
+
if (record.type === "attributes") {
|
|
114
|
+
const target = record.target;
|
|
115
|
+
const pending2 = this.#claims?.attributes.get(target)?.get(record.attributeName);
|
|
116
|
+
if (!pending2 || pending2.count === 0 || target.getAttribute(record.attributeName) !== pending2.value) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
pending2.count -= 1;
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
const pending = this.#claims?.children.get(record.target);
|
|
123
|
+
if (!pending) return false;
|
|
124
|
+
const added = [...record.addedNodes];
|
|
125
|
+
const removed = [...record.removedNodes];
|
|
126
|
+
if (added.some((node) => !pending.added.get(node)) || removed.some((node) => !pending.removed.get(node))) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
for (const node of added) pending.added.set(node, (pending.added.get(node) ?? 0) - 1);
|
|
130
|
+
for (const node of removed) pending.removed.set(node, (pending.removed.get(node) ?? 0) - 1);
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
};
|
|
33
134
|
|
|
34
135
|
function writeField(field, value) {
|
|
35
136
|
if (field.value === value) return false;
|
|
@@ -111,6 +212,9 @@ var MicrotaskCoalescer = class {
|
|
|
111
212
|
this.#queued = false;
|
|
112
213
|
this.#generation += 1;
|
|
113
214
|
}
|
|
215
|
+
get pending() {
|
|
216
|
+
return this.#queued;
|
|
217
|
+
}
|
|
114
218
|
schedule() {
|
|
115
219
|
if (!this.#active || this.#queued) return;
|
|
116
220
|
this.#queued = true;
|
|
@@ -141,6 +245,9 @@ var MorphRenderWatcher = class {
|
|
|
141
245
|
schedule() {
|
|
142
246
|
this.#pass.schedule();
|
|
143
247
|
}
|
|
248
|
+
get pending() {
|
|
249
|
+
return this.#pass.pending;
|
|
250
|
+
}
|
|
144
251
|
disconnect() {
|
|
145
252
|
this.#listeners.dispose();
|
|
146
253
|
this.#pass.cancel();
|
|
@@ -262,19 +369,19 @@ function findTypeaheadMatch(items, from, query, label = (item) => typeaheadLabel
|
|
|
262
369
|
}
|
|
263
370
|
|
|
264
371
|
var OBSERVED_ATTRIBUTES = ["aria-selected", "data-value"];
|
|
265
|
-
function setAttributeIfChanged(element, name, value) {
|
|
266
|
-
if (element.getAttribute(name) !== value) element.setAttribute(name, value);
|
|
267
|
-
}
|
|
268
372
|
var NESTED_INTERACTIVE = INTERACTIVE_HOST_SELECTOR;
|
|
269
373
|
var TreeViewController = class extends Controller {
|
|
270
374
|
#moves = new MoveCounter();
|
|
375
|
+
#connectionGeneration = 0;
|
|
271
376
|
static targets = ["item", "group", "field"];
|
|
272
377
|
static actions = ["onKeydown", "select", "toggle"];
|
|
273
378
|
static events = ["select", "toggle", "reconcile"];
|
|
274
379
|
#roving = new RovingTabindex(() => this.itemTargets);
|
|
275
380
|
#typeahead = new Typeahead();
|
|
276
381
|
#reconcile = new MorphRenderWatcher(() => this.#reconcileSelection());
|
|
277
|
-
#observer =
|
|
382
|
+
#observer = new AuthoredMutationWatcher((records) => {
|
|
383
|
+
if (this.#concernsItems(records)) this.#reconcile.schedule();
|
|
384
|
+
});
|
|
278
385
|
#settled = { item: null, value: "" };
|
|
279
386
|
#connected = false;
|
|
280
387
|
#order = [];
|
|
@@ -293,9 +400,10 @@ var TreeViewController = class extends Controller {
|
|
|
293
400
|
if (this.#focused === row && row.isConnected) this.#focused = null;
|
|
294
401
|
});
|
|
295
402
|
};
|
|
403
|
+
#listeners = new ListenerSet();
|
|
296
404
|
connect() {
|
|
297
|
-
this.element
|
|
298
|
-
this.element
|
|
405
|
+
this.#listeners.add(this.element, "focusin", this.#onFocusIn);
|
|
406
|
+
this.#listeners.add(this.element, "focusout", this.#onFocusOut);
|
|
299
407
|
this.#seedFocused();
|
|
300
408
|
this.#reconcileExpansion();
|
|
301
409
|
this.#normalizeSelection();
|
|
@@ -314,12 +422,11 @@ var TreeViewController = class extends Controller {
|
|
|
314
422
|
this.#reconcile.schedule();
|
|
315
423
|
}
|
|
316
424
|
disconnect() {
|
|
317
|
-
this
|
|
318
|
-
this.
|
|
425
|
+
this.#connectionGeneration += 1;
|
|
426
|
+
this.#listeners.dispose();
|
|
319
427
|
this.#connected = false;
|
|
320
428
|
this.#reconcile.disconnect();
|
|
321
|
-
this.#observer
|
|
322
|
-
this.#observer = null;
|
|
429
|
+
this.#observer.disconnect();
|
|
323
430
|
this.#typeahead.reset();
|
|
324
431
|
this.#order = [];
|
|
325
432
|
this.#focused = null;
|
|
@@ -337,7 +444,7 @@ var TreeViewController = class extends Controller {
|
|
|
337
444
|
const items = this.itemTargets;
|
|
338
445
|
const selected = items.find((item) => item.getAttribute("aria-selected") === "true");
|
|
339
446
|
for (const item of items) {
|
|
340
|
-
|
|
447
|
+
this.#writeSelection(item, item === selected ? "true" : "false");
|
|
341
448
|
}
|
|
342
449
|
}
|
|
343
450
|
#mirrorField(notify) {
|
|
@@ -353,7 +460,7 @@ var TreeViewController = class extends Controller {
|
|
|
353
460
|
this.#reconcileExpansion();
|
|
354
461
|
this.#normalizeSelection();
|
|
355
462
|
this.#normalizeTabStop();
|
|
356
|
-
this.#
|
|
463
|
+
this.#flushMutations();
|
|
357
464
|
this.#mirrorField(false);
|
|
358
465
|
this.#reportMove();
|
|
359
466
|
}
|
|
@@ -364,22 +471,17 @@ var TreeViewController = class extends Controller {
|
|
|
364
471
|
this.dispatch("reconcile", { detail: { item: selection.item } });
|
|
365
472
|
}
|
|
366
473
|
#observeItems() {
|
|
367
|
-
|
|
368
|
-
if (this.#concernsItems(records)) this.#reconcile.schedule();
|
|
369
|
-
});
|
|
370
|
-
observer.observe(this.element, {
|
|
474
|
+
this.#observer.observe(this.element, {
|
|
371
475
|
subtree: true,
|
|
372
|
-
attributes:
|
|
373
|
-
attributeFilter: OBSERVED_ATTRIBUTES
|
|
476
|
+
attributes: OBSERVED_ATTRIBUTES
|
|
374
477
|
});
|
|
375
|
-
this.#observer = observer;
|
|
376
478
|
}
|
|
377
479
|
#concernsItems(records) {
|
|
378
480
|
const items = new Set(this.itemTargets);
|
|
379
481
|
return records.some((record) => items.has(record.target));
|
|
380
482
|
}
|
|
381
|
-
#
|
|
382
|
-
this.#observer
|
|
483
|
+
#flushMutations() {
|
|
484
|
+
if (this.#concernsItems(this.#observer.take())) this.#reconcile.schedule();
|
|
383
485
|
}
|
|
384
486
|
itemTargetDisconnected(item) {
|
|
385
487
|
if (!this.#connected || !this.element.isConnected) return;
|
|
@@ -408,6 +510,7 @@ var TreeViewController = class extends Controller {
|
|
|
408
510
|
onKeydown(event) {
|
|
409
511
|
if (event.defaultPrevented) return;
|
|
410
512
|
if (isReservedArrowChord(event)) return;
|
|
513
|
+
if ((event.key === "Home" || event.key === "End") && hasModifierChord(event)) return;
|
|
411
514
|
if (event.isComposing) return;
|
|
412
515
|
const item = this.#ownerItem(event);
|
|
413
516
|
if (!item) return;
|
|
@@ -553,10 +656,11 @@ var TreeViewController = class extends Controller {
|
|
|
553
656
|
}
|
|
554
657
|
#select(item, reason = "user") {
|
|
555
658
|
if (this.#isDisabled(item)) return;
|
|
659
|
+
const generation = this.#connectionGeneration;
|
|
556
660
|
for (const candidate of this.itemTargets) {
|
|
557
|
-
|
|
661
|
+
this.#writeSelection(candidate, candidate === item ? "true" : "false");
|
|
558
662
|
}
|
|
559
|
-
this.#
|
|
663
|
+
this.#flushMutations();
|
|
560
664
|
const selection = this.#selection();
|
|
561
665
|
const changed = selection.item !== this.#settled.item || selection.value !== this.#settled.value;
|
|
562
666
|
this.#settled = selection;
|
|
@@ -566,7 +670,7 @@ var TreeViewController = class extends Controller {
|
|
|
566
670
|
}
|
|
567
671
|
const token = this.#moves.record();
|
|
568
672
|
this.#mirrorField(true);
|
|
569
|
-
if (!this.#moves.isLatest(token)) return;
|
|
673
|
+
if (generation !== this.#connectionGeneration || !this.#moves.isLatest(token)) return;
|
|
570
674
|
this.dispatch("select", { detail: { item, reason } });
|
|
571
675
|
}
|
|
572
676
|
#setExpanded(item, group, expanded, reason = "user") {
|
|
@@ -631,7 +735,7 @@ var TreeViewController = class extends Controller {
|
|
|
631
735
|
}
|
|
632
736
|
const selected = visible.find((item) => item.getAttribute("aria-selected") === "true");
|
|
633
737
|
const next = selected ?? visible[0];
|
|
634
|
-
this.#roving.setActive(items.
|
|
738
|
+
this.#roving.setActive(items.indexOf(next));
|
|
635
739
|
}
|
|
636
740
|
get #visibleItems() {
|
|
637
741
|
return this.itemTargets.filter((item) => {
|
|
@@ -664,6 +768,11 @@ var TreeViewController = class extends Controller {
|
|
|
664
768
|
return text;
|
|
665
769
|
});
|
|
666
770
|
}
|
|
771
|
+
#writeSelection(target, value) {
|
|
772
|
+
setAttributeIfChanged(target, "aria-selected", value, () => {
|
|
773
|
+
this.#observer.claim(target, "aria-selected", value);
|
|
774
|
+
});
|
|
775
|
+
}
|
|
667
776
|
};
|
|
668
777
|
|
|
669
778
|
export { TreeViewController };
|