stimeo-ui 0.16.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 +136 -0
- package/README.md +27 -11
- package/dist/cable/index.d.ts +88 -31
- package/dist/cable/index.js +384 -449
- package/dist/cable/index.js.map +1 -1
- package/dist/coerce-JtZVNG5h.d.ts +20 -0
- package/dist/controllers/accordion_controller.d.ts +4 -2
- package/dist/controllers/accordion_controller.js +174 -55
- package/dist/controllers/accordion_controller.js.map +1 -1
- package/dist/controllers/alert_dialog_controller.d.ts +12 -2
- package/dist/controllers/alert_dialog_controller.js +903 -235
- package/dist/controllers/alert_dialog_controller.js.map +1 -1
- package/dist/controllers/announcer_controller.d.ts +37 -5
- package/dist/controllers/announcer_controller.js +238 -205
- package/dist/controllers/announcer_controller.js.map +1 -1
- package/dist/controllers/aspect_ratio_controller.js +0 -10
- package/dist/controllers/aspect_ratio_controller.js.map +1 -1
- package/dist/controllers/auto_submit_controller.d.ts +30 -6
- package/dist/controllers/auto_submit_controller.js +414 -145
- package/dist/controllers/auto_submit_controller.js.map +1 -1
- package/dist/controllers/avatar_controller.js +185 -107
- package/dist/controllers/avatar_controller.js.map +1 -1
- package/dist/controllers/breadcrumb_controller.js +0 -130
- package/dist/controllers/breadcrumb_controller.js.map +1 -1
- package/dist/controllers/bulk_select_controller.d.ts +21 -3
- package/dist/controllers/bulk_select_controller.js +282 -58
- package/dist/controllers/bulk_select_controller.js.map +1 -1
- package/dist/controllers/calendar_controller.d.ts +38 -16
- package/dist/controllers/calendar_controller.js +228 -260
- package/dist/controllers/calendar_controller.js.map +1 -1
- package/dist/controllers/carousel_controller.d.ts +43 -12
- package/dist/controllers/carousel_controller.js +536 -436
- package/dist/controllers/carousel_controller.js.map +1 -1
- package/dist/controllers/character_counter_controller.d.ts +44 -7
- package/dist/controllers/character_counter_controller.js +493 -207
- package/dist/controllers/character_counter_controller.js.map +1 -1
- package/dist/controllers/checkbox_controller.d.ts +7 -2
- package/dist/controllers/checkbox_controller.js +38 -74
- package/dist/controllers/checkbox_controller.js.map +1 -1
- package/dist/controllers/clipboard_controller.d.ts +16 -5
- package/dist/controllers/clipboard_controller.js +261 -149
- package/dist/controllers/clipboard_controller.js.map +1 -1
- package/dist/controllers/collapsible_controller.d.ts +17 -5
- package/dist/controllers/collapsible_controller.js +304 -120
- package/dist/controllers/collapsible_controller.js.map +1 -1
- package/dist/controllers/color_picker_controller.d.ts +18 -6
- package/dist/controllers/color_picker_controller.js +178 -146
- package/dist/controllers/color_picker_controller.js.map +1 -1
- package/dist/controllers/combobox_controller.d.ts +24 -6
- package/dist/controllers/combobox_controller.js +522 -156
- package/dist/controllers/combobox_controller.js.map +1 -1
- package/dist/controllers/command_palette_controller.d.ts +51 -20
- package/dist/controllers/command_palette_controller.js +1156 -395
- package/dist/controllers/command_palette_controller.js.map +1 -1
- package/dist/controllers/conditional_fields_controller.d.ts +15 -2
- package/dist/controllers/conditional_fields_controller.js +300 -171
- package/dist/controllers/conditional_fields_controller.js.map +1 -1
- package/dist/controllers/confirm_controller.d.ts +49 -12
- package/dist/controllers/confirm_controller.js +980 -262
- package/dist/controllers/confirm_controller.js.map +1 -1
- package/dist/controllers/context_menu_controller.d.ts +80 -18
- package/dist/controllers/context_menu_controller.js +346 -153
- package/dist/controllers/context_menu_controller.js.map +1 -1
- package/dist/controllers/count_up_controller.d.ts +13 -1
- package/dist/controllers/count_up_controller.js +73 -21
- package/dist/controllers/count_up_controller.js.map +1 -1
- package/dist/controllers/countdown_controller.d.ts +47 -3
- package/dist/controllers/countdown_controller.js +281 -158
- package/dist/controllers/countdown_controller.js.map +1 -1
- package/dist/controllers/currency_input_controller.d.ts +93 -10
- package/dist/controllers/currency_input_controller.js +575 -225
- package/dist/controllers/currency_input_controller.js.map +1 -1
- package/dist/controllers/data_grid_controller.d.ts +25 -12
- package/dist/controllers/data_grid_controller.js +248 -214
- package/dist/controllers/data_grid_controller.js.map +1 -1
- package/dist/controllers/date_range_picker_controller.d.ts +42 -14
- package/dist/controllers/date_range_picker_controller.js +338 -235
- package/dist/controllers/date_range_picker_controller.js.map +1 -1
- package/dist/controllers/dialog_controller.d.ts +17 -6
- package/dist/controllers/dialog_controller.js +899 -237
- package/dist/controllers/dialog_controller.js.map +1 -1
- package/dist/controllers/direct_upload_controller.d.ts +25 -8
- package/dist/controllers/direct_upload_controller.js +97 -167
- 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 +72 -69
- package/dist/controllers/dirty_form_controller.js.map +1 -1
- package/dist/controllers/dismissible_controller.d.ts +19 -0
- package/dist/controllers/dismissible_controller.js +196 -24
- package/dist/controllers/dismissible_controller.js.map +1 -1
- package/dist/controllers/drawer_controller.d.ts +39 -11
- package/dist/controllers/drawer_controller.js +974 -355
- package/dist/controllers/drawer_controller.js.map +1 -1
- package/dist/controllers/dropdown_controller.d.ts +31 -1
- package/dist/controllers/dropdown_controller.js +339 -96
- package/dist/controllers/dropdown_controller.js.map +1 -1
- package/dist/controllers/editable_controller.d.ts +12 -1
- package/dist/controllers/editable_controller.js +315 -88
- package/dist/controllers/editable_controller.js.map +1 -1
- package/dist/controllers/empty_state_controller.js +79 -58
- package/dist/controllers/empty_state_controller.js.map +1 -1
- package/dist/controllers/file_dropzone_controller.d.ts +63 -18
- package/dist/controllers/file_dropzone_controller.js +322 -211
- package/dist/controllers/file_dropzone_controller.js.map +1 -1
- package/dist/controllers/filter_controller.js +77 -42
- package/dist/controllers/filter_controller.js.map +1 -1
- package/dist/controllers/flash_controller.d.ts +35 -12
- package/dist/controllers/flash_controller.js +238 -347
- package/dist/controllers/flash_controller.js.map +1 -1
- package/dist/controllers/focus_controller.d.ts +15 -6
- package/dist/controllers/focus_controller.js +679 -240
- package/dist/controllers/focus_controller.js.map +1 -1
- package/dist/controllers/form_field_controller.js +156 -132
- 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 +31 -97
- package/dist/controllers/form_validation_controller.js.map +1 -1
- package/dist/controllers/frame_loading_controller.d.ts +47 -14
- package/dist/controllers/frame_loading_controller.js +275 -217
- package/dist/controllers/frame_loading_controller.js.map +1 -1
- package/dist/controllers/highlight_controller.d.ts +27 -6
- package/dist/controllers/highlight_controller.js +107 -75
- package/dist/controllers/highlight_controller.js.map +1 -1
- package/dist/controllers/hover_card_controller.d.ts +60 -4
- package/dist/controllers/hover_card_controller.js +327 -130
- package/dist/controllers/hover_card_controller.js.map +1 -1
- package/dist/controllers/idle_controller.d.ts +48 -6
- package/dist/controllers/idle_controller.js +271 -101
- 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 +483 -97
- package/dist/controllers/input_mask_controller.js.map +1 -1
- package/dist/controllers/intersection_controller.d.ts +32 -13
- package/dist/controllers/intersection_controller.js +150 -106
- package/dist/controllers/intersection_controller.js.map +1 -1
- package/dist/controllers/lazy_frame_controller.d.ts +19 -2
- package/dist/controllers/lazy_frame_controller.js +24 -68
- package/dist/controllers/lazy_frame_controller.js.map +1 -1
- package/dist/controllers/listbox_controller.d.ts +44 -9
- package/dist/controllers/listbox_controller.js +523 -240
- package/dist/controllers/listbox_controller.js.map +1 -1
- package/dist/controllers/local_time_controller.d.ts +9 -7
- package/dist/controllers/local_time_controller.js +102 -77
- package/dist/controllers/local_time_controller.js.map +1 -1
- package/dist/controllers/masonry_controller.d.ts +11 -3
- package/dist/controllers/masonry_controller.js +80 -96
- package/dist/controllers/masonry_controller.js.map +1 -1
- package/dist/controllers/menu_controller.d.ts +55 -11
- package/dist/controllers/menu_controller.js +302 -188
- package/dist/controllers/menu_controller.js.map +1 -1
- package/dist/controllers/menubar_controller.d.ts +51 -9
- package/dist/controllers/menubar_controller.js +232 -345
- package/dist/controllers/menubar_controller.js.map +1 -1
- package/dist/controllers/meter_controller.d.ts +33 -20
- package/dist/controllers/meter_controller.js +417 -87
- package/dist/controllers/meter_controller.js.map +1 -1
- package/dist/controllers/multi_select_controller.d.ts +48 -18
- package/dist/controllers/multi_select_controller.js +785 -393
- package/dist/controllers/multi_select_controller.js.map +1 -1
- package/dist/controllers/navigation_menu_controller.d.ts +27 -6
- package/dist/controllers/navigation_menu_controller.js +190 -250
- package/dist/controllers/navigation_menu_controller.js.map +1 -1
- package/dist/controllers/nested_form_controller.d.ts +10 -0
- package/dist/controllers/nested_form_controller.js +396 -192
- package/dist/controllers/nested_form_controller.js.map +1 -1
- package/dist/controllers/network_status_controller.d.ts +23 -0
- package/dist/controllers/network_status_controller.js +268 -62
- package/dist/controllers/network_status_controller.js.map +1 -1
- package/dist/controllers/number_input_controller.d.ts +50 -8
- package/dist/controllers/number_input_controller.js +610 -303
- 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 +45 -87
- package/dist/controllers/optimistic_controller.js.map +1 -1
- package/dist/controllers/otp_controller.d.ts +55 -8
- package/dist/controllers/otp_controller.js +658 -255
- package/dist/controllers/otp_controller.js.map +1 -1
- package/dist/controllers/overflow_indicator_controller.d.ts +5 -0
- package/dist/controllers/overflow_indicator_controller.js +122 -113
- package/dist/controllers/overflow_indicator_controller.js.map +1 -1
- package/dist/controllers/overflow_menu_controller.d.ts +58 -20
- package/dist/controllers/overflow_menu_controller.js +470 -295
- package/dist/controllers/overflow_menu_controller.js.map +1 -1
- package/dist/controllers/pagination_controller.d.ts +37 -7
- package/dist/controllers/pagination_controller.js +332 -123
- package/dist/controllers/pagination_controller.js.map +1 -1
- package/dist/controllers/password_reveal_controller.d.ts +46 -8
- package/dist/controllers/password_reveal_controller.js +392 -121
- package/dist/controllers/password_reveal_controller.js.map +1 -1
- package/dist/controllers/password_strength_controller.d.ts +15 -6
- package/dist/controllers/password_strength_controller.js +111 -158
- package/dist/controllers/password_strength_controller.js.map +1 -1
- package/dist/controllers/persist_controller.d.ts +11 -4
- package/dist/controllers/persist_controller.js +165 -111
- package/dist/controllers/persist_controller.js.map +1 -1
- package/dist/controllers/pointer_drag_controller.d.ts +35 -12
- package/dist/controllers/pointer_drag_controller.js +434 -188
- package/dist/controllers/pointer_drag_controller.js.map +1 -1
- package/dist/controllers/popover_controller.d.ts +41 -5
- package/dist/controllers/popover_controller.js +269 -113
- package/dist/controllers/popover_controller.js.map +1 -1
- package/dist/controllers/portal_controller.d.ts +44 -4
- package/dist/controllers/portal_controller.js +215 -76
- package/dist/controllers/portal_controller.js.map +1 -1
- package/dist/controllers/preview_guard_controller.d.ts +10 -4
- package/dist/controllers/preview_guard_controller.js +243 -116
- package/dist/controllers/preview_guard_controller.js.map +1 -1
- package/dist/controllers/progress_controller.d.ts +20 -19
- package/dist/controllers/progress_controller.js +391 -78
- package/dist/controllers/progress_controller.js.map +1 -1
- package/dist/controllers/radio_group_controller.d.ts +21 -9
- package/dist/controllers/radio_group_controller.js +278 -211
- package/dist/controllers/radio_group_controller.js.map +1 -1
- package/dist/controllers/range_slider_controller.d.ts +47 -6
- package/dist/controllers/range_slider_controller.js +220 -113
- package/dist/controllers/range_slider_controller.js.map +1 -1
- package/dist/controllers/rating_controller.d.ts +20 -4
- package/dist/controllers/rating_controller.js +458 -211
- package/dist/controllers/rating_controller.js.map +1 -1
- package/dist/controllers/read_more_controller.d.ts +2 -0
- package/dist/controllers/read_more_controller.js +138 -63
- package/dist/controllers/read_more_controller.js.map +1 -1
- package/dist/controllers/reading_progress_controller.d.ts +1 -1
- package/dist/controllers/reading_progress_controller.js +166 -137
- package/dist/controllers/reading_progress_controller.js.map +1 -1
- package/dist/controllers/relative_time_controller.d.ts +20 -6
- package/dist/controllers/relative_time_controller.js +211 -112
- package/dist/controllers/relative_time_controller.js.map +1 -1
- package/dist/controllers/reset_on_restore_controller.d.ts +85 -0
- package/dist/controllers/{reset_before_cache_controller.js → reset_on_restore_controller.js} +103 -38
- package/dist/controllers/reset_on_restore_controller.js.map +1 -0
- package/dist/controllers/resizable_controller.d.ts +31 -2
- package/dist/controllers/resizable_controller.js +299 -150
- package/dist/controllers/resizable_controller.js.map +1 -1
- package/dist/controllers/roving_controller.d.ts +3 -3
- package/dist/controllers/roving_controller.js +49 -88
- package/dist/controllers/roving_controller.js.map +1 -1
- package/dist/controllers/scroll_area_controller.d.ts +7 -3
- package/dist/controllers/scroll_area_controller.js +490 -246
- 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 -55
- package/dist/controllers/scroll_restore_controller.js.map +1 -1
- package/dist/controllers/scroll_visibility_controller.d.ts +28 -12
- package/dist/controllers/scroll_visibility_controller.js +432 -149
- package/dist/controllers/scroll_visibility_controller.js.map +1 -1
- package/dist/controllers/scrollspy_controller.d.ts +6 -1
- package/dist/controllers/scrollspy_controller.js +193 -248
- package/dist/controllers/scrollspy_controller.js.map +1 -1
- package/dist/controllers/separator_controller.d.ts +20 -5
- package/dist/controllers/separator_controller.js +285 -142
- package/dist/controllers/separator_controller.js.map +1 -1
- package/dist/controllers/sidebar_controller.d.ts +65 -8
- package/dist/controllers/sidebar_controller.js +1069 -404
- package/dist/controllers/sidebar_controller.js.map +1 -1
- package/dist/controllers/skeleton_controller.d.ts +23 -0
- package/dist/controllers/skeleton_controller.js +259 -101
- package/dist/controllers/skeleton_controller.js.map +1 -1
- package/dist/controllers/slider_controller.d.ts +29 -2
- package/dist/controllers/slider_controller.js +187 -86
- package/dist/controllers/slider_controller.js.map +1 -1
- package/dist/controllers/smart_sticky_header_controller.d.ts +22 -4
- package/dist/controllers/smart_sticky_header_controller.js +173 -66
- 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 +26 -125
- package/dist/controllers/sortable_controller.js.map +1 -1
- package/dist/controllers/spinner_controller.d.ts +39 -4
- package/dist/controllers/spinner_controller.js +288 -173
- package/dist/controllers/spinner_controller.js.map +1 -1
- package/dist/controllers/step_indicator_controller.d.ts +9 -4
- package/dist/controllers/step_indicator_controller.js +105 -46
- package/dist/controllers/step_indicator_controller.js.map +1 -1
- package/dist/controllers/stepper_controller.d.ts +14 -6
- package/dist/controllers/stepper_controller.js +120 -73
- package/dist/controllers/stepper_controller.js.map +1 -1
- package/dist/controllers/stick_to_bottom_controller.d.ts +9 -1
- package/dist/controllers/stick_to_bottom_controller.js +275 -140
- package/dist/controllers/stick_to_bottom_controller.js.map +1 -1
- package/dist/controllers/sticky_observer_controller.d.ts +11 -0
- package/dist/controllers/sticky_observer_controller.js +220 -49
- package/dist/controllers/sticky_observer_controller.js.map +1 -1
- package/dist/controllers/submit_once_controller.d.ts +24 -8
- package/dist/controllers/submit_once_controller.js +376 -227
- package/dist/controllers/submit_once_controller.js.map +1 -1
- package/dist/controllers/switch_controller.d.ts +18 -4
- package/dist/controllers/switch_controller.js +201 -84
- package/dist/controllers/switch_controller.js.map +1 -1
- package/dist/controllers/tabs_controller.d.ts +9 -6
- package/dist/controllers/tabs_controller.js +41 -30
- package/dist/controllers/tabs_controller.js.map +1 -1
- package/dist/controllers/tags_input_controller.d.ts +16 -3
- package/dist/controllers/tags_input_controller.js +293 -173
- package/dist/controllers/tags_input_controller.js.map +1 -1
- package/dist/controllers/textarea_autosize_controller.d.ts +11 -1
- package/dist/controllers/textarea_autosize_controller.js +108 -74
- package/dist/controllers/textarea_autosize_controller.js.map +1 -1
- package/dist/controllers/theme_controller.d.ts +24 -11
- package/dist/controllers/theme_controller.js +140 -116
- package/dist/controllers/theme_controller.js.map +1 -1
- package/dist/controllers/time_picker_controller.d.ts +55 -5
- package/dist/controllers/time_picker_controller.js +331 -127
- package/dist/controllers/time_picker_controller.js.map +1 -1
- package/dist/controllers/toast_controller.d.ts +40 -16
- package/dist/controllers/toast_controller.js +244 -324
- package/dist/controllers/toast_controller.js.map +1 -1
- package/dist/controllers/toggle_group_controller.d.ts +14 -6
- package/dist/controllers/toggle_group_controller.js +252 -191
- 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 +219 -120
- package/dist/controllers/toolbar_controller.js.map +1 -1
- package/dist/controllers/tooltip_controller.d.ts +49 -4
- package/dist/controllers/tooltip_controller.js +158 -124
- package/dist/controllers/tooltip_controller.js.map +1 -1
- package/dist/controllers/transition_controller.d.ts +22 -4
- package/dist/controllers/transition_controller.js +123 -119
- package/dist/controllers/transition_controller.js.map +1 -1
- package/dist/controllers/tree_view_controller.d.ts +22 -12
- package/dist/controllers/tree_view_controller.js +283 -369
- package/dist/controllers/tree_view_controller.js.map +1 -1
- package/dist/index.d.ts +10 -5
- package/dist/index.js +8573 -10410
- package/dist/index.js.map +1 -1
- package/dist/inspector/cli.d.ts +38 -14
- package/dist/inspector/cli.js +108 -40
- package/dist/inspector/cli.js.map +1 -1
- package/dist/inspector/cli_bin.js +145 -64
- package/dist/inspector/cli_bin.js.map +1 -1
- package/dist/inspector/examples.json +20 -20
- package/dist/inspector/manifest.json +802 -101
- package/dist/positioning/index.d.ts +15 -7
- package/dist/positioning/index.js +154 -47
- package/dist/positioning/index.js.map +1 -1
- package/package.json +11 -10
- package/dist/controllers/reset_before_cache_controller.d.ts +0 -76
- package/dist/controllers/reset_before_cache_controller.js.map +0 -1
|
@@ -1,121 +1,275 @@
|
|
|
1
1
|
import { Controller } from '@hotwired/stimulus';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
var ListenerSet = class {
|
|
4
|
+
#abort = new AbortController();
|
|
5
|
+
add(target, type, handler, options) {
|
|
6
|
+
target.addEventListener(type, handler, { ...options, signal: this.#abort.signal });
|
|
7
|
+
}
|
|
8
|
+
dispose() {
|
|
9
|
+
this.#abort.abort();
|
|
10
|
+
this.#abort = new AbortController();
|
|
11
|
+
}
|
|
12
|
+
};
|
|
4
13
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
};
|
|
13
|
-
#rewind;
|
|
14
|
-
/** @param rewind - the pass that returns this controller's state to its initial form. */
|
|
15
|
-
constructor(rewind) {
|
|
16
|
-
this.#rewind = rewind;
|
|
14
|
+
var MicrotaskCoalescer = class {
|
|
15
|
+
#run;
|
|
16
|
+
#queued = false;
|
|
17
|
+
#active = false;
|
|
18
|
+
#generation = 0;
|
|
19
|
+
constructor(run) {
|
|
20
|
+
this.#run = run;
|
|
17
21
|
}
|
|
18
|
-
/** Subscribes to `turbo:before-cache`; call from `connect()`. Idempotent. */
|
|
19
22
|
activate() {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
this.#active = true;
|
|
24
|
+
}
|
|
25
|
+
cancel() {
|
|
26
|
+
this.#active = false;
|
|
27
|
+
this.#queued = false;
|
|
28
|
+
this.#generation += 1;
|
|
25
29
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
get pending() {
|
|
31
|
+
return this.#queued;
|
|
32
|
+
}
|
|
33
|
+
schedule() {
|
|
34
|
+
if (!this.#active || this.#queued) return;
|
|
35
|
+
this.#queued = true;
|
|
36
|
+
const generation = this.#generation;
|
|
37
|
+
queueMicrotask(() => {
|
|
38
|
+
if (generation !== this.#generation || !this.#queued || !this.#active) return;
|
|
39
|
+
this.#queued = false;
|
|
40
|
+
this.#run();
|
|
41
|
+
});
|
|
31
42
|
}
|
|
32
43
|
};
|
|
33
44
|
|
|
34
|
-
|
|
35
|
-
|
|
45
|
+
var MorphRenderWatcher = class {
|
|
46
|
+
#listeners = new ListenerSet();
|
|
47
|
+
#pass;
|
|
48
|
+
#element = null;
|
|
49
|
+
#onMorph = () => this.#pass.schedule();
|
|
50
|
+
constructor(run) {
|
|
51
|
+
this.#pass = new MicrotaskCoalescer(run);
|
|
52
|
+
}
|
|
53
|
+
observe(element) {
|
|
54
|
+
if (this.#element === element) return;
|
|
55
|
+
this.disconnect();
|
|
56
|
+
this.#element = element;
|
|
57
|
+
this.#pass.activate();
|
|
58
|
+
this.#listeners.add(element, "turbo:morph-element", this.#onMorph);
|
|
59
|
+
}
|
|
60
|
+
schedule() {
|
|
61
|
+
this.#pass.schedule();
|
|
62
|
+
}
|
|
63
|
+
get pending() {
|
|
64
|
+
return this.#pass.pending;
|
|
65
|
+
}
|
|
66
|
+
disconnect() {
|
|
67
|
+
this.#listeners.dispose();
|
|
68
|
+
this.#pass.cancel();
|
|
69
|
+
this.#element = null;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
function setAttributeIfChanged(element, name, value, beforeWrite) {
|
|
74
|
+
if (element.getAttribute(name) === value) return false;
|
|
75
|
+
if (value === null) element.removeAttribute(name);
|
|
76
|
+
else element.setAttribute(name, value);
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function sharedRegistry(key, create) {
|
|
81
|
+
const symbol = Symbol.for(key);
|
|
82
|
+
const scope = globalThis;
|
|
83
|
+
const existing = scope[symbol];
|
|
84
|
+
if (existing !== void 0) return existing;
|
|
85
|
+
const registry = create();
|
|
86
|
+
Object.defineProperty(globalThis, symbol, { value: registry });
|
|
87
|
+
return registry;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
var StylePropertyLease = class _StylePropertyLease {
|
|
91
|
+
static #registry = sharedRegistry(
|
|
92
|
+
"stimeo-ui.style-property-lease.registry.v1",
|
|
93
|
+
() => ({ stacks: /* @__PURE__ */ new WeakMap(), names: /* @__PURE__ */ new Map() })
|
|
94
|
+
);
|
|
36
95
|
#property;
|
|
37
|
-
#
|
|
38
|
-
|
|
39
|
-
constructor(property) {
|
|
96
|
+
#record;
|
|
97
|
+
#held = /* @__PURE__ */ new Set();
|
|
98
|
+
constructor(property, owner) {
|
|
40
99
|
this.#property = property;
|
|
100
|
+
this.#record = `data-${owner}-style-${property}-lease`;
|
|
101
|
+
const names = _StylePropertyLease.#registry.names;
|
|
102
|
+
names.set(property, (names.get(property) ?? /* @__PURE__ */ new Set()).add(this.#record));
|
|
41
103
|
}
|
|
42
|
-
/** Writes or removes the leased declaration while preserving its authored value. */
|
|
43
104
|
write(element, value, priority = "") {
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
writtenValue: value,
|
|
53
|
-
writtenPriority: value === null ? "" : priority
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
this.#reflect(element, value, priority);
|
|
105
|
+
const stack = this.#stack(element);
|
|
106
|
+
const hold = this.#take(stack) ?? this.#acquire(element, stack);
|
|
107
|
+
this.#held.add(element);
|
|
108
|
+
const shows = !this.#covered(element, stack, hold);
|
|
109
|
+
hold.writtenValue = value;
|
|
110
|
+
hold.writtenPriority = value === null ? "" : priority;
|
|
111
|
+
this.#mark(element, stack);
|
|
112
|
+
if (shows) this.#show(element, value, hold.writtenPriority);
|
|
57
113
|
}
|
|
58
|
-
/** Returns one lease without overwriting a later consumer declaration. */
|
|
59
114
|
return(element) {
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
this.#
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
115
|
+
const held = this.#held.delete(element);
|
|
116
|
+
const known = _StylePropertyLease.#registry.stacks.get(element)?.has(this.#property);
|
|
117
|
+
const stack = held || known || element.hasAttribute(this.#record) ? this.#stack(element) : [];
|
|
118
|
+
const hold = this.#take(stack);
|
|
119
|
+
if (!hold) return;
|
|
120
|
+
const owns = this.#carries(element, hold) && !this.#covered(element, stack, hold);
|
|
121
|
+
const index = stack.indexOf(hold);
|
|
122
|
+
stack.splice(index, 1);
|
|
123
|
+
const above = stack[index];
|
|
124
|
+
if (above) above.linked &&= hold.linked;
|
|
125
|
+
this.#mark(element, stack);
|
|
126
|
+
if (!owns) return;
|
|
127
|
+
const below = hold.linked ? stack[index - 1] : void 0;
|
|
128
|
+
if (below) this.#show(element, below.writtenValue, below.writtenPriority);
|
|
129
|
+
else this.#show(element, hold.originalValue, hold.originalPriority);
|
|
68
130
|
}
|
|
69
|
-
/** Returns every outstanding declaration lease. */
|
|
70
131
|
returnAll() {
|
|
71
|
-
for (const element of Array.from(this.#
|
|
132
|
+
for (const element of Array.from(this.#held)) this.return(element);
|
|
72
133
|
}
|
|
73
|
-
|
|
74
|
-
|
|
134
|
+
#recorded(element, name) {
|
|
135
|
+
try {
|
|
136
|
+
const parsed = JSON.parse(element.getAttribute(name) ?? "null");
|
|
137
|
+
if (!Array.isArray(parsed)) return null;
|
|
138
|
+
const [originalValue, originalPriority, writtenValue, writtenPriority, ...rest] = parsed;
|
|
139
|
+
if (typeof originalValue !== "string" || typeof originalPriority !== "string") return null;
|
|
140
|
+
if (typeof writtenValue !== "string" && writtenValue !== null) return null;
|
|
141
|
+
if (typeof writtenPriority !== "string") return null;
|
|
142
|
+
const linked = rest[0] !== false;
|
|
143
|
+
const beneath = linked ? rest : rest.slice(1);
|
|
144
|
+
if (!beneath.every((under) => typeof under === "string")) return null;
|
|
145
|
+
return { originalValue, originalPriority, writtenValue, writtenPriority, linked, beneath };
|
|
146
|
+
} catch {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
#stack(element) {
|
|
151
|
+
const stacks = _StylePropertyLease.#registry.stacks;
|
|
152
|
+
const byProperty = stacks.get(element) ?? /* @__PURE__ */ new Map();
|
|
153
|
+
stacks.set(element, byProperty);
|
|
154
|
+
const stack = byProperty.get(this.#property) ?? this.#seed(element);
|
|
155
|
+
byProperty.set(this.#property, stack);
|
|
156
|
+
return stack;
|
|
157
|
+
}
|
|
158
|
+
#seed(element) {
|
|
159
|
+
const found = [];
|
|
160
|
+
for (const record of _StylePropertyLease.#registry.names.get(this.#property) ?? []) {
|
|
161
|
+
const read = this.#recorded(element, record);
|
|
162
|
+
if (read) found.push({ ...read, record });
|
|
163
|
+
}
|
|
164
|
+
const depth = ({ beneath }) => beneath.filter((name) => found.some((other) => other.record === name)).length;
|
|
165
|
+
return found.sort((one, other) => depth(one) - depth(other)).map((entry, index) => ({
|
|
166
|
+
lease: null,
|
|
167
|
+
record: entry.record,
|
|
168
|
+
writtenValue: entry.writtenValue,
|
|
169
|
+
writtenPriority: entry.writtenPriority,
|
|
170
|
+
originalValue: entry.originalValue,
|
|
171
|
+
originalPriority: entry.originalPriority,
|
|
172
|
+
linked: entry.linked && index > 0
|
|
173
|
+
}));
|
|
174
|
+
}
|
|
175
|
+
#take(stack) {
|
|
176
|
+
const hold = stack.find((held) => held.lease === this) ?? stack.find((held) => held.lease === null && held.record === this.#record);
|
|
177
|
+
if (hold) hold.lease = this;
|
|
178
|
+
return hold;
|
|
179
|
+
}
|
|
180
|
+
#acquire(element, stack) {
|
|
181
|
+
const top = stack.at(-1);
|
|
182
|
+
const over = top && this.#carries(element, top) ? top : void 0;
|
|
75
183
|
const style = element.style;
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
184
|
+
const hold = {
|
|
185
|
+
lease: this,
|
|
186
|
+
record: this.#record,
|
|
187
|
+
writtenValue: null,
|
|
188
|
+
writtenPriority: "",
|
|
189
|
+
originalValue: over ? over.originalValue : style.getPropertyValue(this.#property),
|
|
190
|
+
originalPriority: over ? over.originalPriority : style.getPropertyPriority(this.#property),
|
|
191
|
+
linked: over !== void 0
|
|
192
|
+
};
|
|
193
|
+
stack.push(hold);
|
|
194
|
+
return hold;
|
|
195
|
+
}
|
|
196
|
+
#covered(element, stack, hold) {
|
|
197
|
+
return stack.slice(stack.indexOf(hold) + 1).some((above) => this.#carries(element, above));
|
|
198
|
+
}
|
|
199
|
+
#mark(element, stack) {
|
|
200
|
+
const records = /* @__PURE__ */ new Map([[this.#record, null]]);
|
|
201
|
+
stack.forEach((hold, index) => {
|
|
202
|
+
const names = stack.slice(0, index).map((under) => under.record);
|
|
203
|
+
const beneath = [...new Set(names.reverse())].filter((name) => name !== hold.record);
|
|
204
|
+
const marker = hold.linked || beneath.length === 0 ? [] : [false];
|
|
205
|
+
const { originalValue, originalPriority, writtenValue, writtenPriority } = hold;
|
|
206
|
+
records.set(
|
|
207
|
+
hold.record,
|
|
208
|
+
(writtenValue ?? "") === originalValue && writtenPriority === originalPriority && beneath.length === 0 && index === stack.length - 1 ? null : JSON.stringify([
|
|
209
|
+
originalValue,
|
|
210
|
+
originalPriority,
|
|
211
|
+
writtenValue,
|
|
212
|
+
writtenPriority,
|
|
213
|
+
...marker,
|
|
214
|
+
...beneath
|
|
215
|
+
])
|
|
216
|
+
);
|
|
217
|
+
});
|
|
218
|
+
for (const [name, recorded] of records) {
|
|
219
|
+
setAttributeIfChanged(element, name, recorded);
|
|
80
220
|
}
|
|
81
|
-
|
|
82
|
-
|
|
221
|
+
}
|
|
222
|
+
#carries(element, hold) {
|
|
223
|
+
return this.#holds(element, hold.writtenValue ?? "", hold.writtenPriority);
|
|
224
|
+
}
|
|
225
|
+
#holds(element, value, priority) {
|
|
226
|
+
const style = element.style;
|
|
227
|
+
return style.getPropertyValue(this.#property) === value && style.getPropertyPriority(this.#property) === priority;
|
|
228
|
+
}
|
|
229
|
+
#show(element, value, priority) {
|
|
230
|
+
if (this.#holds(element, value ?? "", priority)) return;
|
|
231
|
+
if (value === null) element.style.removeProperty(this.#property);
|
|
232
|
+
else element.style.setProperty(this.#property, value, priority);
|
|
83
233
|
}
|
|
84
234
|
};
|
|
85
235
|
|
|
86
|
-
// src/utils/transient_hooks.ts
|
|
87
236
|
var TransientHooks = class {
|
|
88
237
|
#attributes;
|
|
89
238
|
constructor(options) {
|
|
90
239
|
this.#attributes = options.attributes;
|
|
91
240
|
}
|
|
92
|
-
/** Drops the declared hooks from `element`; what it carries besides stays. */
|
|
93
241
|
reset(element) {
|
|
94
242
|
for (const attribute of this.#attributes) element.removeAttribute(attribute);
|
|
95
243
|
}
|
|
96
244
|
};
|
|
97
245
|
|
|
98
|
-
// src/controllers/preview_guard_controller.ts
|
|
99
246
|
var TRANSIENT = new TransientHooks({ attributes: ["data-preview-hidden"] });
|
|
247
|
+
var CONTENT_RECORD = "content";
|
|
100
248
|
var PreviewGuardController = class extends Controller {
|
|
101
249
|
static values = {
|
|
102
250
|
placeholder: { type: String, default: "" }
|
|
103
251
|
};
|
|
104
252
|
static events = ["hide", "show"];
|
|
105
|
-
#visibility = new StylePropertyLease("visibility");
|
|
106
|
-
#beforeCache = new BeforeCacheReset(() => this.#restore());
|
|
253
|
+
#visibility = new StylePropertyLease("visibility", this.identifier);
|
|
107
254
|
#observer = null;
|
|
108
255
|
#connected = false;
|
|
109
256
|
#hidden = false;
|
|
110
|
-
/** Child nodes a placeholder displaced; non-null marks that content — not visibility — was swapped. */
|
|
111
257
|
#savedNodes = null;
|
|
112
|
-
/** The descendant that held focus when the guard went up, so show can hand it back. */
|
|
113
258
|
#focused = null;
|
|
259
|
+
#morphRender = new MorphRenderWatcher(() => {
|
|
260
|
+
this.#sync();
|
|
261
|
+
if (this.#hidden) this.#reguard();
|
|
262
|
+
});
|
|
114
263
|
connect() {
|
|
264
|
+
this.#morphRender.observe(this.element);
|
|
115
265
|
this.#connected = true;
|
|
116
|
-
if (this.#hidden)
|
|
117
|
-
|
|
118
|
-
|
|
266
|
+
if (this.#hidden) {
|
|
267
|
+
this.#reguard();
|
|
268
|
+
} else {
|
|
269
|
+
if (this.element.hasAttribute("data-preview-hidden")) this.#restoreRecordedContent();
|
|
270
|
+
this.#visibility.return(this.element);
|
|
271
|
+
TRANSIENT.reset(this.element);
|
|
272
|
+
}
|
|
119
273
|
if (typeof MutationObserver !== "undefined") {
|
|
120
274
|
this.#observer = new MutationObserver(() => this.#sync());
|
|
121
275
|
this.#observer.observe(document.documentElement, {
|
|
@@ -126,24 +280,15 @@ var PreviewGuardController = class extends Controller {
|
|
|
126
280
|
this.#sync();
|
|
127
281
|
}
|
|
128
282
|
disconnect() {
|
|
283
|
+
this.#morphRender.disconnect();
|
|
129
284
|
this.#connected = false;
|
|
130
|
-
this.#beforeCache.deactivate();
|
|
131
285
|
this.#observer?.disconnect();
|
|
132
286
|
this.#observer = null;
|
|
133
287
|
}
|
|
134
|
-
/**
|
|
135
|
-
* Re-guards to match a `placeholder` changed at runtime — the value is the content on
|
|
136
|
-
* display while the guard is up, so a morph that swaps it must not leave the old one.
|
|
137
|
-
*/
|
|
138
288
|
placeholderValueChanged() {
|
|
139
289
|
if (!this.#connected || !this.#hidden) return;
|
|
140
290
|
this.#reguard();
|
|
141
291
|
}
|
|
142
|
-
/**
|
|
143
|
-
* Reflects the current `data-turbo-preview` state onto the element.
|
|
144
|
-
*
|
|
145
|
-
* @stimeoRenderRoot
|
|
146
|
-
*/
|
|
147
292
|
#sync() {
|
|
148
293
|
const previewing = document.documentElement.hasAttribute("data-turbo-preview");
|
|
149
294
|
if (previewing && !this.#hidden) this.#hide();
|
|
@@ -154,30 +299,33 @@ var PreviewGuardController = class extends Controller {
|
|
|
154
299
|
this.#applyGuard();
|
|
155
300
|
this.dispatch("hide", { detail: {} });
|
|
156
301
|
}
|
|
157
|
-
/** Puts the guard up in the form the current `placeholder` calls for. */
|
|
158
302
|
#applyGuard() {
|
|
159
303
|
this.#hidden = true;
|
|
160
304
|
if (this.placeholderValue === "") {
|
|
161
305
|
this.#visibility.write(this.element, "hidden");
|
|
162
306
|
} else {
|
|
307
|
+
this.element.setAttribute(this.#contentRecord, JSON.stringify(this.element.innerHTML));
|
|
163
308
|
this.#savedNodes = document.createDocumentFragment();
|
|
164
309
|
this.#savedNodes.append(...this.element.childNodes);
|
|
165
310
|
this.element.textContent = this.placeholderValue;
|
|
166
311
|
}
|
|
167
312
|
this.element.setAttribute("data-preview-hidden", "true");
|
|
168
313
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
314
|
+
get #contentRecord() {
|
|
315
|
+
return `data-${this.identifier}-${CONTENT_RECORD}`;
|
|
316
|
+
}
|
|
317
|
+
#restoreRecordedContent() {
|
|
318
|
+
const raw = this.element.getAttribute(this.#contentRecord) ?? "null";
|
|
319
|
+
this.element.removeAttribute(this.#contentRecord);
|
|
320
|
+
let content = null;
|
|
321
|
+
try {
|
|
322
|
+
content = JSON.parse(raw);
|
|
323
|
+
} catch {
|
|
324
|
+
}
|
|
325
|
+
if (typeof content === "string") this.element.innerHTML = content;
|
|
326
|
+
}
|
|
180
327
|
#reguard() {
|
|
328
|
+
this.element.setAttribute("data-preview-hidden", "true");
|
|
181
329
|
if (this.#savedNodes && this.placeholderValue !== "") {
|
|
182
330
|
this.element.textContent = this.placeholderValue;
|
|
183
331
|
return;
|
|
@@ -191,46 +339,26 @@ var PreviewGuardController = class extends Controller {
|
|
|
191
339
|
this.#restore();
|
|
192
340
|
this.dispatch("show", { detail: {} });
|
|
193
341
|
}
|
|
194
|
-
/** Reverts the guard and hands focus back. Used by show and by the snapshot rewind. */
|
|
195
342
|
#restore() {
|
|
196
343
|
this.#revert();
|
|
197
344
|
this.#refocus();
|
|
198
345
|
}
|
|
199
|
-
/**
|
|
200
|
-
* Puts the element back the way the guard found it.
|
|
201
|
-
*
|
|
202
|
-
* Every step is a no-op on an element this controller never guarded: the lease returns
|
|
203
|
-
* only declarations it recorded, and the hook is removed whether or not it is there.
|
|
204
|
-
*/
|
|
205
346
|
#revert() {
|
|
206
347
|
this.#hidden = false;
|
|
207
348
|
if (this.#savedNodes) {
|
|
208
349
|
this.element.textContent = "";
|
|
209
350
|
this.element.append(this.#savedNodes);
|
|
210
351
|
this.#savedNodes = null;
|
|
352
|
+
this.element.removeAttribute(this.#contentRecord);
|
|
211
353
|
} else {
|
|
212
354
|
this.#visibility.return(this.element);
|
|
213
355
|
}
|
|
214
356
|
this.element.removeAttribute("data-preview-hidden");
|
|
215
357
|
}
|
|
216
|
-
/**
|
|
217
|
-
* The focused element the guard is about to make unfocusable, if any.
|
|
218
|
-
*
|
|
219
|
-
* The element itself counts as well as its descendants: guarding takes focus either way
|
|
220
|
-
* — a `visibility: hidden` subtree cannot hold it, and a placeholder displaces the nodes
|
|
221
|
-
* outright — so the browser drops focus to `<body>` the moment the guard goes up.
|
|
222
|
-
*/
|
|
223
358
|
#focusedInside() {
|
|
224
359
|
const active = document.activeElement;
|
|
225
360
|
return active instanceof HTMLElement && this.element.contains(active) ? active : null;
|
|
226
361
|
}
|
|
227
|
-
/**
|
|
228
|
-
* Hands focus back to the element the guard took it from.
|
|
229
|
-
*
|
|
230
|
-
* Only when that element is still in the document and focus has not moved on since —
|
|
231
|
-
* anything else is the user's or another controller's, and putting it back would be
|
|
232
|
-
* taking it.
|
|
233
|
-
*/
|
|
234
362
|
#refocus() {
|
|
235
363
|
const target = this.#focused;
|
|
236
364
|
this.#focused = null;
|
|
@@ -240,5 +368,4 @@ var PreviewGuardController = class extends Controller {
|
|
|
240
368
|
};
|
|
241
369
|
|
|
242
370
|
export { PreviewGuardController };
|
|
243
|
-
//# sourceMappingURL=preview_guard_controller.js.map
|
|
244
371
|
//# sourceMappingURL=preview_guard_controller.js.map
|