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,13 +1,9 @@
|
|
|
1
1
|
import { Controller } from '@hotwired/stimulus';
|
|
2
2
|
|
|
3
|
-
// src/controllers/slider_controller.ts
|
|
4
|
-
|
|
5
|
-
// src/utils/logical_scroll.ts
|
|
6
3
|
function isRtl(element) {
|
|
7
4
|
return window.getComputedStyle(element).direction === "rtl";
|
|
8
5
|
}
|
|
9
6
|
|
|
10
|
-
// src/utils/arrow_step.ts
|
|
11
7
|
function logicalArrowKey(key, element) {
|
|
12
8
|
if (key !== "ArrowRight" && key !== "ArrowLeft") return key;
|
|
13
9
|
if (!isRtl(element)) return key;
|
|
@@ -17,8 +13,17 @@ function isReservedArrowChord(event, allow = []) {
|
|
|
17
13
|
if (!event.key.startsWith("Arrow")) return false;
|
|
18
14
|
return event.altKey && !allow.includes("alt") || event.ctrlKey && !allow.includes("ctrl") || event.metaKey && !allow.includes("meta") || event.shiftKey && !allow.includes("shift");
|
|
19
15
|
}
|
|
16
|
+
function hasModifierChord(event) {
|
|
17
|
+
return event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function setAttributeIfChanged(element, name, value, beforeWrite) {
|
|
21
|
+
if (element.getAttribute(name) === value) return false;
|
|
22
|
+
if (value === null) element.removeAttribute(name);
|
|
23
|
+
else element.setAttribute(name, value);
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
20
26
|
|
|
21
|
-
// src/utils/field_mirror.ts
|
|
22
27
|
function writeField(field, value) {
|
|
23
28
|
if (field.value === value) return false;
|
|
24
29
|
field.value = value;
|
|
@@ -28,27 +33,36 @@ function commitField(target) {
|
|
|
28
33
|
target.dispatchEvent(new Event("change", { bubbles: true }));
|
|
29
34
|
}
|
|
30
35
|
|
|
31
|
-
|
|
36
|
+
var ListenerSet = class {
|
|
37
|
+
#abort = new AbortController();
|
|
38
|
+
add(target, type, handler, options) {
|
|
39
|
+
target.addEventListener(type, handler, { ...options, signal: this.#abort.signal });
|
|
40
|
+
}
|
|
41
|
+
dispose() {
|
|
42
|
+
this.#abort.abort();
|
|
43
|
+
this.#abort = new AbortController();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
32
47
|
var MicrotaskCoalescer = class {
|
|
33
48
|
#run;
|
|
34
49
|
#queued = false;
|
|
35
50
|
#active = false;
|
|
36
51
|
#generation = 0;
|
|
37
|
-
/** @param run - the single reconciliation pass, invoked at most once per batch. */
|
|
38
52
|
constructor(run) {
|
|
39
53
|
this.#run = run;
|
|
40
54
|
}
|
|
41
|
-
/** Opens the window in which {@link schedule} is honoured; call from `connect()`. */
|
|
42
55
|
activate() {
|
|
43
56
|
this.#active = true;
|
|
44
57
|
}
|
|
45
|
-
/** Closes the window and drops any pending pass; call from `disconnect()`. */
|
|
46
58
|
cancel() {
|
|
47
59
|
this.#active = false;
|
|
48
60
|
this.#queued = false;
|
|
49
61
|
this.#generation += 1;
|
|
50
62
|
}
|
|
51
|
-
|
|
63
|
+
get pending() {
|
|
64
|
+
return this.#queued;
|
|
65
|
+
}
|
|
52
66
|
schedule() {
|
|
53
67
|
if (!this.#active || this.#queued) return;
|
|
54
68
|
this.#queued = true;
|
|
@@ -61,7 +75,90 @@ var MicrotaskCoalescer = class {
|
|
|
61
75
|
}
|
|
62
76
|
};
|
|
63
77
|
|
|
64
|
-
|
|
78
|
+
var MorphRenderWatcher = class {
|
|
79
|
+
#listeners = new ListenerSet();
|
|
80
|
+
#pass;
|
|
81
|
+
#element = null;
|
|
82
|
+
#onMorph = () => this.#pass.schedule();
|
|
83
|
+
constructor(run) {
|
|
84
|
+
this.#pass = new MicrotaskCoalescer(run);
|
|
85
|
+
}
|
|
86
|
+
observe(element) {
|
|
87
|
+
if (this.#element === element) return;
|
|
88
|
+
this.disconnect();
|
|
89
|
+
this.#element = element;
|
|
90
|
+
this.#pass.activate();
|
|
91
|
+
this.#listeners.add(element, "turbo:morph-element", this.#onMorph);
|
|
92
|
+
}
|
|
93
|
+
schedule() {
|
|
94
|
+
this.#pass.schedule();
|
|
95
|
+
}
|
|
96
|
+
get pending() {
|
|
97
|
+
return this.#pass.pending;
|
|
98
|
+
}
|
|
99
|
+
disconnect() {
|
|
100
|
+
this.#listeners.dispose();
|
|
101
|
+
this.#pass.cancel();
|
|
102
|
+
this.#element = null;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
var MoveCounter = class {
|
|
107
|
+
#sequence = 0;
|
|
108
|
+
record() {
|
|
109
|
+
this.#sequence += 1;
|
|
110
|
+
return this.#sequence;
|
|
111
|
+
}
|
|
112
|
+
isLatest(token) {
|
|
113
|
+
return token === this.#sequence;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
var NUMBER_BOUNDS = {
|
|
118
|
+
finite: { finite: true },
|
|
119
|
+
positive: { finite: true, exclusiveMin: 0 }};
|
|
120
|
+
function matchesNumberBounds(value, bounds) {
|
|
121
|
+
if (!Number.isFinite(value)) {
|
|
122
|
+
const direction = value === Infinity ? "positive" : value === -Infinity ? "negative" : null;
|
|
123
|
+
if (direction === null) return false;
|
|
124
|
+
if (bounds.allowInfinity !== "both" && bounds.allowInfinity !== direction) return false;
|
|
125
|
+
}
|
|
126
|
+
if (bounds.min !== void 0 && value < bounds.min) return false;
|
|
127
|
+
if (bounds.max !== void 0 && value > bounds.max) return false;
|
|
128
|
+
if (bounds.exclusiveMin !== void 0 && value <= bounds.exclusiveMin) return false;
|
|
129
|
+
if (bounds.integer && !Number.isInteger(value)) return false;
|
|
130
|
+
if (bounds.allowedValues !== void 0 && !bounds.allowedValues.includes(value)) return false;
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function readNumber(raw, fallback, bounds) {
|
|
135
|
+
return matchesNumberBounds(raw, bounds) ? raw : fallback;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
var NumberValueReader = class {
|
|
139
|
+
#lastRejected = /* @__PURE__ */ new Map();
|
|
140
|
+
read(owner, name, raw, fallback, bounds) {
|
|
141
|
+
const resolved = readNumber(raw, fallback, bounds);
|
|
142
|
+
if (matchesNumberBounds(raw, bounds)) {
|
|
143
|
+
this.#lastRejected.delete(name);
|
|
144
|
+
return resolved;
|
|
145
|
+
}
|
|
146
|
+
const attribute = `data-${owner.identifier}-${name.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}-value`;
|
|
147
|
+
const literal = owner.element.getAttribute(attribute);
|
|
148
|
+
if (literal === null) {
|
|
149
|
+
this.#lastRejected.delete(name);
|
|
150
|
+
return resolved;
|
|
151
|
+
}
|
|
152
|
+
if (this.#lastRejected.get(name) !== literal) {
|
|
153
|
+
this.#lastRejected.set(name, literal);
|
|
154
|
+
console.warn(
|
|
155
|
+
`Stimeo UI: "${owner.identifier}" has an invalid number Value "${name}" declaration ${JSON.stringify(literal)}; using ${fallback}.`
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
return resolved;
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
|
|
65
162
|
var OwnedPointerSession = class {
|
|
66
163
|
#pointerId;
|
|
67
164
|
#owner;
|
|
@@ -81,7 +178,6 @@ var OwnedPointerSession = class {
|
|
|
81
178
|
} catch {
|
|
82
179
|
}
|
|
83
180
|
}
|
|
84
|
-
/** Releases capture and listeners, then reports the end exactly once. */
|
|
85
181
|
end() {
|
|
86
182
|
this.#finish("teardown");
|
|
87
183
|
}
|
|
@@ -106,11 +202,10 @@ var OwnedPointerSession = class {
|
|
|
106
202
|
};
|
|
107
203
|
};
|
|
108
204
|
|
|
109
|
-
// src/utils/range.ts
|
|
110
205
|
function rangeFraction(value, min, max) {
|
|
111
206
|
const span = max - min;
|
|
112
207
|
if (!(span > 0)) return 0;
|
|
113
|
-
const clamped =
|
|
208
|
+
const clamped = clampRange(value, min, max);
|
|
114
209
|
let fraction;
|
|
115
210
|
if (Number.isFinite(span)) {
|
|
116
211
|
fraction = (clamped - min) / span;
|
|
@@ -121,8 +216,10 @@ function rangeFraction(value, min, max) {
|
|
|
121
216
|
if (!Number.isFinite(fraction)) return 0;
|
|
122
217
|
return Math.min(1, Math.max(0, fraction));
|
|
123
218
|
}
|
|
219
|
+
function clampRange(value, min, max) {
|
|
220
|
+
return Math.min(max, Math.max(min, value));
|
|
221
|
+
}
|
|
124
222
|
|
|
125
|
-
// src/utils/stepped_value.ts
|
|
126
223
|
function effectiveStep(step) {
|
|
127
224
|
return Number.isFinite(step) && step > 0 ? step : 1;
|
|
128
225
|
}
|
|
@@ -228,9 +325,11 @@ function finiteFallback(min, max) {
|
|
|
228
325
|
return 0;
|
|
229
326
|
}
|
|
230
327
|
|
|
231
|
-
// src/controllers/slider_controller.ts
|
|
232
328
|
var FRACTION_PROPERTY = "--stimeo--slider-fraction";
|
|
233
|
-
var SliderController = class extends Controller {
|
|
329
|
+
var SliderController = class _SliderController extends Controller {
|
|
330
|
+
#numbers = new NumberValueReader();
|
|
331
|
+
#moves = new MoveCounter();
|
|
332
|
+
#move = 0;
|
|
234
333
|
static targets = ["track", "thumb", "field"];
|
|
235
334
|
static values = {
|
|
236
335
|
min: { type: Number, default: 0 },
|
|
@@ -239,81 +338,71 @@ var SliderController = class extends Controller {
|
|
|
239
338
|
value: { type: Number, default: 0 },
|
|
240
339
|
logicalTrack: { type: Boolean, default: false }
|
|
241
340
|
};
|
|
341
|
+
static valueConstraints = {
|
|
342
|
+
min: NUMBER_BOUNDS.finite,
|
|
343
|
+
max: NUMBER_BOUNDS.finite,
|
|
344
|
+
step: NUMBER_BOUNDS.positive,
|
|
345
|
+
value: NUMBER_BOUNDS.finite
|
|
346
|
+
};
|
|
242
347
|
static actions = ["onKeydown", "onPointerDown"];
|
|
243
348
|
static events = ["change", "reconcile"];
|
|
244
|
-
/** One initiating pointer owns each live drag and its stable target snapshot. */
|
|
245
349
|
#drag = null;
|
|
246
|
-
/**
|
|
247
|
-
* The value last published: taken on connect, then moved by each user commit
|
|
248
|
-
* and by each repaint that reports a page-driven move.
|
|
249
|
-
*/
|
|
250
350
|
#settled = 0;
|
|
251
|
-
|
|
252
|
-
#
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
return this.logicalTrackValue && isRtl(this.element);
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Renders the normalized value as the starting position without writing it
|
|
259
|
-
* back, and takes it as the baseline, so connecting reports nothing.
|
|
260
|
-
*/
|
|
351
|
+
#repaint = new MorphRenderWatcher(() => this.#render());
|
|
352
|
+
get #directionElement() {
|
|
353
|
+
return this.hasTrackTarget ? this.trackTarget : this.element;
|
|
354
|
+
}
|
|
261
355
|
connect() {
|
|
262
|
-
this.#repaint.
|
|
356
|
+
this.#repaint.observe(this.element);
|
|
263
357
|
this.#settled = this.#currentValue();
|
|
264
358
|
this.#render();
|
|
265
359
|
}
|
|
266
|
-
/** Cancels any active pointer drag so document listeners never leak. */
|
|
267
360
|
disconnect() {
|
|
268
|
-
this.#repaint.
|
|
361
|
+
this.#repaint.disconnect();
|
|
269
362
|
this.#endDrag();
|
|
270
363
|
}
|
|
271
|
-
/** Repaints a minimum changed by application code or a Turbo morph. */
|
|
272
364
|
minValueChanged() {
|
|
273
365
|
this.#repaint.schedule();
|
|
274
366
|
}
|
|
275
|
-
/** Repaints a maximum changed by application code or a Turbo morph. */
|
|
276
367
|
maxValueChanged() {
|
|
277
368
|
this.#repaint.schedule();
|
|
278
369
|
}
|
|
279
|
-
/** Repaints a step changed by application code or a Turbo morph. */
|
|
280
370
|
stepValueChanged() {
|
|
281
371
|
this.#repaint.schedule();
|
|
282
372
|
}
|
|
283
|
-
/** Repaints a value changed by application code or a Turbo morph. */
|
|
284
373
|
valueValueChanged() {
|
|
285
374
|
this.#repaint.schedule();
|
|
286
375
|
}
|
|
287
|
-
/** Hydrates a thumb inserted or replaced at runtime with the current ARIA state. */
|
|
288
376
|
thumbTargetConnected(thumb) {
|
|
289
377
|
const value = this.#currentValue();
|
|
290
378
|
this.#renderThumb(thumb, value);
|
|
291
|
-
this.#renderFraction(value);
|
|
292
379
|
if (this.#drag && this.#drag.thumb === null) {
|
|
293
380
|
this.#drag.thumb = thumb;
|
|
294
381
|
thumb.focus();
|
|
295
382
|
}
|
|
296
383
|
this.#repaint.schedule();
|
|
297
384
|
}
|
|
298
|
-
/** Fills a form field inserted or replaced at runtime on the next repaint. */
|
|
299
385
|
fieldTargetConnected() {
|
|
300
386
|
this.#repaint.schedule();
|
|
301
387
|
}
|
|
302
|
-
|
|
388
|
+
fieldTargetDisconnected() {
|
|
389
|
+
this.#repaint.schedule();
|
|
390
|
+
}
|
|
303
391
|
thumbTargetDisconnected(thumb) {
|
|
304
392
|
if (this.#drag?.thumb === thumb) this.#drag.thumb = null;
|
|
393
|
+
this.#repaint.schedule();
|
|
305
394
|
}
|
|
306
|
-
/** Ends a gesture whose geometry target disappeared or ceased being a target. */
|
|
307
395
|
trackTargetDisconnected(track) {
|
|
308
396
|
if (this.#drag?.track === track) this.#endDrag();
|
|
309
397
|
}
|
|
310
|
-
/** Handles keyboard stepping per the APG slider model. */
|
|
311
398
|
onKeydown(event) {
|
|
312
399
|
if (isReservedArrowChord(event)) return;
|
|
400
|
+
if ((event.key === "Home" || event.key === "End" || event.key === "PageUp" || event.key === "PageDown") && hasModifierChord(event))
|
|
401
|
+
return;
|
|
313
402
|
let next = null;
|
|
314
|
-
const declared = this
|
|
403
|
+
const declared = this.#safeValue;
|
|
315
404
|
const range = this.#steppedRange;
|
|
316
|
-
switch (this
|
|
405
|
+
switch (this.logicalTrackValue ? logicalArrowKey(event.key, this.#directionElement) : event.key) {
|
|
317
406
|
case "ArrowRight":
|
|
318
407
|
case "ArrowUp":
|
|
319
408
|
next = stepSteppedValue(declared, 1, range);
|
|
@@ -329,10 +418,10 @@ var SliderController = class extends Controller {
|
|
|
329
418
|
next = stepSteppedValue(declared, -10, range);
|
|
330
419
|
break;
|
|
331
420
|
case "Home":
|
|
332
|
-
next = this
|
|
421
|
+
next = this.#safeMin;
|
|
333
422
|
break;
|
|
334
423
|
case "End":
|
|
335
|
-
next = this
|
|
424
|
+
next = this.#safeMax;
|
|
336
425
|
break;
|
|
337
426
|
default:
|
|
338
427
|
return;
|
|
@@ -340,12 +429,11 @@ var SliderController = class extends Controller {
|
|
|
340
429
|
event.preventDefault();
|
|
341
430
|
this.#commit(next);
|
|
342
431
|
}
|
|
343
|
-
/** Begins a pointer drag: sets the value and tracks subsequent movement. */
|
|
344
432
|
onPointerDown(event) {
|
|
345
433
|
if (event.button !== 0 || this.#drag || !this.hasTrackTarget || !this.hasThumbTarget) return;
|
|
346
434
|
const track = this.trackTarget;
|
|
347
435
|
const thumb = this.thumbTarget;
|
|
348
|
-
const mirrored = this
|
|
436
|
+
const mirrored = this.logicalTrackValue && isRtl(track);
|
|
349
437
|
const value = this.#valueFromClientX(event.clientX, mirrored, track);
|
|
350
438
|
if (value === null) return;
|
|
351
439
|
event.preventDefault();
|
|
@@ -367,96 +455,109 @@ var SliderController = class extends Controller {
|
|
|
367
455
|
});
|
|
368
456
|
this.#drag = drag;
|
|
369
457
|
}
|
|
370
|
-
/** Maps a pointer X coordinate to a raw value using a stable track snapshot. */
|
|
371
458
|
#valueFromClientX(clientX, mirrored, track) {
|
|
372
459
|
const rect = track.getBoundingClientRect();
|
|
373
460
|
if (rect.width === 0) return null;
|
|
374
461
|
const offset = (clientX - rect.left) / rect.width;
|
|
375
462
|
const fraction = mirrored ? 1 - offset : offset;
|
|
376
|
-
return this
|
|
377
|
-
}
|
|
378
|
-
/**
|
|
379
|
-
* Stores the normalized value the user moved to, renders it synchronously for
|
|
380
|
-
* responsive input, and reports it as `change` when it differs from the value
|
|
381
|
-
* last published. The comparison is with the value last published, not with
|
|
382
|
-
* the value the move started from, so a page write no repaint has published
|
|
383
|
-
* yet is reported once, as this change, and a move that ends where the value
|
|
384
|
-
* was last published reports nothing. The baseline moves before either report
|
|
385
|
-
* goes out, so the repaint the Value write schedules — and any move a
|
|
386
|
-
* subscriber makes while the report is dispatched — is measured from this
|
|
387
|
-
* value.
|
|
388
|
-
*/
|
|
463
|
+
return this.#safeMin + fraction * (this.#safeMax - this.#safeMin);
|
|
464
|
+
}
|
|
389
465
|
#commit(raw) {
|
|
390
466
|
const value = snapSteppedValue(raw, this.#steppedRange);
|
|
391
467
|
const reported = this.#settled;
|
|
392
468
|
this.#settled = value;
|
|
469
|
+
if (value !== reported) this.#move = this.#moves.record();
|
|
470
|
+
const move = this.#move;
|
|
393
471
|
if (!Object.is(this.valueValue, value)) this.valueValue = value;
|
|
394
472
|
this.#renderValue(value);
|
|
395
473
|
this.#mirrorField(value, true);
|
|
474
|
+
if (!this.#moves.isLatest(move)) return;
|
|
396
475
|
if (value !== reported) this.dispatch("change", { detail: { value } });
|
|
397
476
|
}
|
|
398
|
-
/** Mirrors `value` into the optional form field, reporting only a user's move. */
|
|
399
477
|
#mirrorField(value, notify) {
|
|
400
478
|
if (!this.hasFieldTarget) return;
|
|
401
479
|
if (writeField(this.fieldTarget, String(value)) && notify) commitField(this.fieldTarget);
|
|
402
480
|
}
|
|
403
|
-
/**
|
|
404
|
-
* Reflects the normalized current Value without writing it back. A published
|
|
405
|
-
* value that moved from the last one is reported once as `reconcile`; the
|
|
406
|
-
* field follows without a native `change`.
|
|
407
|
-
*
|
|
408
|
-
* @stimeoRenderRoot
|
|
409
|
-
*/
|
|
410
481
|
#render() {
|
|
411
482
|
const value = this.#currentValue();
|
|
412
483
|
this.#renderValue(value);
|
|
413
484
|
this.#mirrorField(value, false);
|
|
414
485
|
if (value === this.#settled) return;
|
|
415
486
|
this.#settled = value;
|
|
487
|
+
this.#move = this.#moves.record();
|
|
416
488
|
this.dispatch("reconcile", { detail: { value } });
|
|
417
489
|
}
|
|
418
|
-
/** Reflects one normalized value on the current target and CSS output. */
|
|
419
490
|
#renderValue(value) {
|
|
420
491
|
if (this.hasThumbTarget) {
|
|
421
492
|
this.#renderThumb(this.thumbTarget, value);
|
|
422
493
|
}
|
|
423
494
|
this.#renderFraction(value);
|
|
424
495
|
}
|
|
425
|
-
/** Writes only ARIA values that differ, including on a replacement target. */
|
|
426
496
|
#renderThumb(thumb, value) {
|
|
427
497
|
const attributes = {
|
|
428
|
-
"aria-valuemin": String(this
|
|
429
|
-
"aria-valuemax": String(this
|
|
498
|
+
"aria-valuemin": String(this.#safeMin),
|
|
499
|
+
"aria-valuemax": String(this.#safeMax),
|
|
430
500
|
"aria-valuenow": String(value)
|
|
431
501
|
};
|
|
432
502
|
for (const [name, next] of Object.entries(attributes)) {
|
|
433
|
-
|
|
503
|
+
setAttributeIfChanged(thumb, name, next);
|
|
434
504
|
}
|
|
435
505
|
}
|
|
436
|
-
/** Writes the behavior-only positioning hook only when its value changed. */
|
|
437
506
|
#renderFraction(value) {
|
|
438
|
-
const fraction = rangeFraction(value, this
|
|
507
|
+
const fraction = rangeFraction(value, this.#safeMin, this.#safeMax);
|
|
439
508
|
const next = String(fraction);
|
|
440
509
|
if (this.element.style.getPropertyValue(FRACTION_PROPERTY) !== next) {
|
|
441
510
|
this.element.style.setProperty(FRACTION_PROPERTY, next);
|
|
442
511
|
}
|
|
443
512
|
}
|
|
444
|
-
/** Current normalized value derived from the live declarative inputs. */
|
|
445
513
|
#currentValue() {
|
|
446
|
-
return snapSteppedValue(this
|
|
514
|
+
return snapSteppedValue(this.#safeValue, this.#steppedRange);
|
|
447
515
|
}
|
|
448
|
-
/** Shared range configuration; finite endpoints remain allowed off the grid. */
|
|
449
516
|
get #steppedRange() {
|
|
450
|
-
return { min: this
|
|
517
|
+
return { min: this.#safeMin, max: this.#safeMax, step: this.#safeStep };
|
|
451
518
|
}
|
|
452
|
-
/** Ends the current pointer session without dispatching another change. */
|
|
453
519
|
#endDrag() {
|
|
454
520
|
const drag = this.#drag;
|
|
455
521
|
this.#drag = null;
|
|
456
522
|
drag?.pointer?.end();
|
|
457
523
|
}
|
|
524
|
+
get #safeMin() {
|
|
525
|
+
return this.#numbers.read(
|
|
526
|
+
this,
|
|
527
|
+
"min",
|
|
528
|
+
this.minValue,
|
|
529
|
+
_SliderController.values.min.default,
|
|
530
|
+
_SliderController.valueConstraints.min
|
|
531
|
+
);
|
|
532
|
+
}
|
|
533
|
+
get #safeMax() {
|
|
534
|
+
return this.#numbers.read(
|
|
535
|
+
this,
|
|
536
|
+
"max",
|
|
537
|
+
this.maxValue,
|
|
538
|
+
_SliderController.values.max.default,
|
|
539
|
+
_SliderController.valueConstraints.max
|
|
540
|
+
);
|
|
541
|
+
}
|
|
542
|
+
get #safeStep() {
|
|
543
|
+
return this.#numbers.read(
|
|
544
|
+
this,
|
|
545
|
+
"step",
|
|
546
|
+
this.stepValue,
|
|
547
|
+
_SliderController.values.step.default,
|
|
548
|
+
_SliderController.valueConstraints.step
|
|
549
|
+
);
|
|
550
|
+
}
|
|
551
|
+
get #safeValue() {
|
|
552
|
+
return this.#numbers.read(
|
|
553
|
+
this,
|
|
554
|
+
"value",
|
|
555
|
+
this.valueValue,
|
|
556
|
+
this.#safeMin,
|
|
557
|
+
_SliderController.valueConstraints.value
|
|
558
|
+
);
|
|
559
|
+
}
|
|
458
560
|
};
|
|
459
561
|
|
|
460
562
|
export { SliderController };
|
|
461
|
-
//# sourceMappingURL=slider_controller.js.map
|
|
462
563
|
//# sourceMappingURL=slider_controller.js.map
|