stimeo-ui 0.16.0 → 0.17.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.
Files changed (328) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +8 -1
  3. package/dist/cable/index.d.ts +79 -23
  4. package/dist/cable/index.js +363 -436
  5. package/dist/cable/index.js.map +1 -1
  6. package/dist/controllers/accordion_controller.d.ts +4 -2
  7. package/dist/controllers/accordion_controller.js +166 -55
  8. package/dist/controllers/accordion_controller.js.map +1 -1
  9. package/dist/controllers/alert_dialog_controller.d.ts +12 -2
  10. package/dist/controllers/alert_dialog_controller.js +862 -221
  11. package/dist/controllers/alert_dialog_controller.js.map +1 -1
  12. package/dist/controllers/announcer_controller.d.ts +35 -5
  13. package/dist/controllers/announcer_controller.js +135 -198
  14. package/dist/controllers/announcer_controller.js.map +1 -1
  15. package/dist/controllers/aspect_ratio_controller.js +0 -10
  16. package/dist/controllers/aspect_ratio_controller.js.map +1 -1
  17. package/dist/controllers/auto_submit_controller.d.ts +30 -6
  18. package/dist/controllers/auto_submit_controller.js +271 -127
  19. package/dist/controllers/auto_submit_controller.js.map +1 -1
  20. package/dist/controllers/avatar_controller.js +171 -105
  21. package/dist/controllers/avatar_controller.js.map +1 -1
  22. package/dist/controllers/breadcrumb_controller.js +0 -130
  23. package/dist/controllers/breadcrumb_controller.js.map +1 -1
  24. package/dist/controllers/bulk_select_controller.d.ts +18 -0
  25. package/dist/controllers/bulk_select_controller.js +262 -52
  26. package/dist/controllers/bulk_select_controller.js.map +1 -1
  27. package/dist/controllers/calendar_controller.d.ts +24 -5
  28. package/dist/controllers/calendar_controller.js +175 -209
  29. package/dist/controllers/calendar_controller.js.map +1 -1
  30. package/dist/controllers/carousel_controller.d.ts +34 -7
  31. package/dist/controllers/carousel_controller.js +461 -399
  32. package/dist/controllers/carousel_controller.js.map +1 -1
  33. package/dist/controllers/character_counter_controller.d.ts +17 -1
  34. package/dist/controllers/character_counter_controller.js +246 -156
  35. package/dist/controllers/character_counter_controller.js.map +1 -1
  36. package/dist/controllers/checkbox_controller.d.ts +7 -2
  37. package/dist/controllers/checkbox_controller.js +32 -74
  38. package/dist/controllers/checkbox_controller.js.map +1 -1
  39. package/dist/controllers/clipboard_controller.d.ts +16 -5
  40. package/dist/controllers/clipboard_controller.js +168 -147
  41. package/dist/controllers/clipboard_controller.js.map +1 -1
  42. package/dist/controllers/collapsible_controller.d.ts +16 -4
  43. package/dist/controllers/collapsible_controller.js +301 -120
  44. package/dist/controllers/collapsible_controller.js.map +1 -1
  45. package/dist/controllers/color_picker_controller.d.ts +18 -6
  46. package/dist/controllers/color_picker_controller.js +149 -139
  47. package/dist/controllers/color_picker_controller.js.map +1 -1
  48. package/dist/controllers/combobox_controller.d.ts +23 -5
  49. package/dist/controllers/combobox_controller.js +360 -133
  50. package/dist/controllers/combobox_controller.js.map +1 -1
  51. package/dist/controllers/command_palette_controller.d.ts +45 -14
  52. package/dist/controllers/command_palette_controller.js +970 -358
  53. package/dist/controllers/command_palette_controller.js.map +1 -1
  54. package/dist/controllers/conditional_fields_controller.d.ts +15 -2
  55. package/dist/controllers/conditional_fields_controller.js +166 -124
  56. package/dist/controllers/conditional_fields_controller.js.map +1 -1
  57. package/dist/controllers/confirm_controller.d.ts +49 -12
  58. package/dist/controllers/confirm_controller.js +939 -248
  59. package/dist/controllers/confirm_controller.js.map +1 -1
  60. package/dist/controllers/context_menu_controller.d.ts +31 -4
  61. package/dist/controllers/context_menu_controller.js +256 -128
  62. package/dist/controllers/context_menu_controller.js.map +1 -1
  63. package/dist/controllers/count_up_controller.d.ts +13 -1
  64. package/dist/controllers/count_up_controller.js +73 -21
  65. package/dist/controllers/count_up_controller.js.map +1 -1
  66. package/dist/controllers/countdown_controller.d.ts +45 -1
  67. package/dist/controllers/countdown_controller.js +183 -148
  68. package/dist/controllers/countdown_controller.js.map +1 -1
  69. package/dist/controllers/currency_input_controller.d.ts +21 -2
  70. package/dist/controllers/currency_input_controller.js +134 -158
  71. package/dist/controllers/currency_input_controller.js.map +1 -1
  72. package/dist/controllers/data_grid_controller.d.ts +15 -4
  73. package/dist/controllers/data_grid_controller.js +114 -186
  74. package/dist/controllers/data_grid_controller.js.map +1 -1
  75. package/dist/controllers/date_range_picker_controller.d.ts +30 -5
  76. package/dist/controllers/date_range_picker_controller.js +288 -206
  77. package/dist/controllers/date_range_picker_controller.js.map +1 -1
  78. package/dist/controllers/dialog_controller.d.ts +13 -1
  79. package/dist/controllers/dialog_controller.js +858 -223
  80. package/dist/controllers/dialog_controller.js.map +1 -1
  81. package/dist/controllers/direct_upload_controller.d.ts +24 -7
  82. package/dist/controllers/direct_upload_controller.js +73 -153
  83. package/dist/controllers/direct_upload_controller.js.map +1 -1
  84. package/dist/controllers/dirty_form_controller.js +14 -48
  85. package/dist/controllers/dirty_form_controller.js.map +1 -1
  86. package/dist/controllers/dismissible_controller.d.ts +19 -0
  87. package/dist/controllers/dismissible_controller.js +175 -21
  88. package/dist/controllers/dismissible_controller.js.map +1 -1
  89. package/dist/controllers/drawer_controller.d.ts +39 -11
  90. package/dist/controllers/drawer_controller.js +933 -341
  91. package/dist/controllers/drawer_controller.js.map +1 -1
  92. package/dist/controllers/dropdown_controller.d.ts +31 -1
  93. package/dist/controllers/dropdown_controller.js +312 -82
  94. package/dist/controllers/dropdown_controller.js.map +1 -1
  95. package/dist/controllers/editable_controller.d.ts +12 -1
  96. package/dist/controllers/editable_controller.js +158 -68
  97. package/dist/controllers/editable_controller.js.map +1 -1
  98. package/dist/controllers/empty_state_controller.js +67 -53
  99. package/dist/controllers/empty_state_controller.js.map +1 -1
  100. package/dist/controllers/file_dropzone_controller.d.ts +60 -18
  101. package/dist/controllers/file_dropzone_controller.js +311 -207
  102. package/dist/controllers/file_dropzone_controller.js.map +1 -1
  103. package/dist/controllers/filter_controller.js +67 -39
  104. package/dist/controllers/filter_controller.js.map +1 -1
  105. package/dist/controllers/flash_controller.d.ts +31 -8
  106. package/dist/controllers/flash_controller.js +172 -314
  107. package/dist/controllers/flash_controller.js.map +1 -1
  108. package/dist/controllers/focus_controller.d.ts +12 -3
  109. package/dist/controllers/focus_controller.js +654 -240
  110. package/dist/controllers/focus_controller.js.map +1 -1
  111. package/dist/controllers/form_field_controller.js +147 -132
  112. package/dist/controllers/form_field_controller.js.map +1 -1
  113. package/dist/controllers/form_validation_controller.js +13 -86
  114. package/dist/controllers/form_validation_controller.js.map +1 -1
  115. package/dist/controllers/frame_loading_controller.d.ts +41 -9
  116. package/dist/controllers/frame_loading_controller.js +264 -213
  117. package/dist/controllers/frame_loading_controller.js.map +1 -1
  118. package/dist/controllers/highlight_controller.d.ts +22 -2
  119. package/dist/controllers/highlight_controller.js +107 -75
  120. package/dist/controllers/highlight_controller.js.map +1 -1
  121. package/dist/controllers/hover_card_controller.d.ts +56 -3
  122. package/dist/controllers/hover_card_controller.js +309 -118
  123. package/dist/controllers/hover_card_controller.js.map +1 -1
  124. package/dist/controllers/idle_controller.d.ts +42 -1
  125. package/dist/controllers/idle_controller.js +267 -101
  126. package/dist/controllers/idle_controller.js.map +1 -1
  127. package/dist/controllers/input_mask_controller.js +71 -72
  128. package/dist/controllers/input_mask_controller.js.map +1 -1
  129. package/dist/controllers/intersection_controller.d.ts +32 -13
  130. package/dist/controllers/intersection_controller.js +147 -106
  131. package/dist/controllers/intersection_controller.js.map +1 -1
  132. package/dist/controllers/lazy_frame_controller.d.ts +16 -0
  133. package/dist/controllers/lazy_frame_controller.js +9 -65
  134. package/dist/controllers/lazy_frame_controller.js.map +1 -1
  135. package/dist/controllers/listbox_controller.d.ts +34 -2
  136. package/dist/controllers/listbox_controller.js +306 -204
  137. package/dist/controllers/listbox_controller.js.map +1 -1
  138. package/dist/controllers/local_time_controller.d.ts +1 -1
  139. package/dist/controllers/local_time_controller.js +54 -64
  140. package/dist/controllers/local_time_controller.js.map +1 -1
  141. package/dist/controllers/masonry_controller.d.ts +11 -3
  142. package/dist/controllers/masonry_controller.js +70 -93
  143. package/dist/controllers/masonry_controller.js.map +1 -1
  144. package/dist/controllers/menu_controller.d.ts +32 -7
  145. package/dist/controllers/menu_controller.js +214 -156
  146. package/dist/controllers/menu_controller.js.map +1 -1
  147. package/dist/controllers/menubar_controller.d.ts +4 -4
  148. package/dist/controllers/menubar_controller.js +170 -329
  149. package/dist/controllers/menubar_controller.js.map +1 -1
  150. package/dist/controllers/meter_controller.d.ts +20 -0
  151. package/dist/controllers/meter_controller.js +151 -67
  152. package/dist/controllers/meter_controller.js.map +1 -1
  153. package/dist/controllers/multi_select_controller.d.ts +32 -4
  154. package/dist/controllers/multi_select_controller.js +593 -358
  155. package/dist/controllers/multi_select_controller.js.map +1 -1
  156. package/dist/controllers/navigation_menu_controller.d.ts +8 -1
  157. package/dist/controllers/navigation_menu_controller.js +124 -232
  158. package/dist/controllers/navigation_menu_controller.js.map +1 -1
  159. package/dist/controllers/nested_form_controller.d.ts +10 -0
  160. package/dist/controllers/nested_form_controller.js +352 -182
  161. package/dist/controllers/nested_form_controller.js.map +1 -1
  162. package/dist/controllers/network_status_controller.d.ts +23 -0
  163. package/dist/controllers/network_status_controller.js +242 -54
  164. package/dist/controllers/network_status_controller.js.map +1 -1
  165. package/dist/controllers/number_input_controller.d.ts +26 -2
  166. package/dist/controllers/number_input_controller.js +320 -263
  167. package/dist/controllers/number_input_controller.js.map +1 -1
  168. package/dist/controllers/optimistic_controller.js +16 -76
  169. package/dist/controllers/optimistic_controller.js.map +1 -1
  170. package/dist/controllers/otp_controller.d.ts +20 -4
  171. package/dist/controllers/otp_controller.js +198 -193
  172. package/dist/controllers/otp_controller.js.map +1 -1
  173. package/dist/controllers/overflow_indicator_controller.d.ts +5 -0
  174. package/dist/controllers/overflow_indicator_controller.js +116 -113
  175. package/dist/controllers/overflow_indicator_controller.js.map +1 -1
  176. package/dist/controllers/overflow_menu_controller.d.ts +48 -11
  177. package/dist/controllers/overflow_menu_controller.js +343 -283
  178. package/dist/controllers/overflow_menu_controller.js.map +1 -1
  179. package/dist/controllers/pagination_controller.d.ts +35 -6
  180. package/dist/controllers/pagination_controller.js +295 -119
  181. package/dist/controllers/pagination_controller.js.map +1 -1
  182. package/dist/controllers/password_reveal_controller.d.ts +45 -8
  183. package/dist/controllers/password_reveal_controller.js +389 -121
  184. package/dist/controllers/password_reveal_controller.js.map +1 -1
  185. package/dist/controllers/password_strength_controller.d.ts +14 -5
  186. package/dist/controllers/password_strength_controller.js +99 -153
  187. package/dist/controllers/password_strength_controller.js.map +1 -1
  188. package/dist/controllers/persist_controller.d.ts +11 -4
  189. package/dist/controllers/persist_controller.js +237 -103
  190. package/dist/controllers/persist_controller.js.map +1 -1
  191. package/dist/controllers/pointer_drag_controller.d.ts +19 -7
  192. package/dist/controllers/pointer_drag_controller.js +185 -165
  193. package/dist/controllers/pointer_drag_controller.js.map +1 -1
  194. package/dist/controllers/popover_controller.d.ts +38 -2
  195. package/dist/controllers/popover_controller.js +236 -97
  196. package/dist/controllers/popover_controller.js.map +1 -1
  197. package/dist/controllers/portal_controller.d.ts +44 -4
  198. package/dist/controllers/portal_controller.js +209 -76
  199. package/dist/controllers/portal_controller.js.map +1 -1
  200. package/dist/controllers/preview_guard_controller.d.ts +10 -4
  201. package/dist/controllers/preview_guard_controller.js +232 -116
  202. package/dist/controllers/preview_guard_controller.js.map +1 -1
  203. package/dist/controllers/progress_controller.d.ts +11 -0
  204. package/dist/controllers/progress_controller.js +125 -56
  205. package/dist/controllers/progress_controller.js.map +1 -1
  206. package/dist/controllers/radio_group_controller.d.ts +14 -5
  207. package/dist/controllers/radio_group_controller.js +117 -137
  208. package/dist/controllers/radio_group_controller.js.map +1 -1
  209. package/dist/controllers/range_slider_controller.d.ts +43 -3
  210. package/dist/controllers/range_slider_controller.js +192 -105
  211. package/dist/controllers/range_slider_controller.js.map +1 -1
  212. package/dist/controllers/rating_controller.d.ts +20 -4
  213. package/dist/controllers/rating_controller.js +418 -207
  214. package/dist/controllers/rating_controller.js.map +1 -1
  215. package/dist/controllers/read_more_controller.d.ts +2 -0
  216. package/dist/controllers/read_more_controller.js +134 -63
  217. package/dist/controllers/read_more_controller.js.map +1 -1
  218. package/dist/controllers/reading_progress_controller.d.ts +1 -1
  219. package/dist/controllers/reading_progress_controller.js +147 -135
  220. package/dist/controllers/reading_progress_controller.js.map +1 -1
  221. package/dist/controllers/relative_time_controller.d.ts +18 -4
  222. package/dist/controllers/relative_time_controller.js +145 -110
  223. package/dist/controllers/relative_time_controller.js.map +1 -1
  224. package/dist/controllers/reset_on_restore_controller.d.ts +85 -0
  225. package/dist/controllers/{reset_before_cache_controller.js → reset_on_restore_controller.js} +97 -38
  226. package/dist/controllers/reset_on_restore_controller.js.map +1 -0
  227. package/dist/controllers/resizable_controller.d.ts +28 -2
  228. package/dist/controllers/resizable_controller.js +255 -139
  229. package/dist/controllers/resizable_controller.js.map +1 -1
  230. package/dist/controllers/roving_controller.js +39 -84
  231. package/dist/controllers/roving_controller.js.map +1 -1
  232. package/dist/controllers/scroll_area_controller.d.ts +7 -3
  233. package/dist/controllers/scroll_area_controller.js +428 -225
  234. package/dist/controllers/scroll_area_controller.js.map +1 -1
  235. package/dist/controllers/scroll_restore_controller.js +0 -53
  236. package/dist/controllers/scroll_restore_controller.js.map +1 -1
  237. package/dist/controllers/scroll_visibility_controller.d.ts +28 -12
  238. package/dist/controllers/scroll_visibility_controller.js +395 -145
  239. package/dist/controllers/scroll_visibility_controller.js.map +1 -1
  240. package/dist/controllers/scrollspy_controller.d.ts +6 -1
  241. package/dist/controllers/scrollspy_controller.js +181 -242
  242. package/dist/controllers/scrollspy_controller.js.map +1 -1
  243. package/dist/controllers/separator_controller.d.ts +19 -4
  244. package/dist/controllers/separator_controller.js +267 -140
  245. package/dist/controllers/separator_controller.js.map +1 -1
  246. package/dist/controllers/sidebar_controller.d.ts +64 -7
  247. package/dist/controllers/sidebar_controller.js +1023 -386
  248. package/dist/controllers/sidebar_controller.js.map +1 -1
  249. package/dist/controllers/skeleton_controller.d.ts +23 -0
  250. package/dist/controllers/skeleton_controller.js +248 -97
  251. package/dist/controllers/skeleton_controller.js.map +1 -1
  252. package/dist/controllers/slider_controller.d.ts +27 -1
  253. package/dist/controllers/slider_controller.js +159 -79
  254. package/dist/controllers/slider_controller.js.map +1 -1
  255. package/dist/controllers/smart_sticky_header_controller.d.ts +21 -3
  256. package/dist/controllers/smart_sticky_header_controller.js +162 -63
  257. package/dist/controllers/smart_sticky_header_controller.js.map +1 -1
  258. package/dist/controllers/sortable_controller.js +0 -112
  259. package/dist/controllers/sortable_controller.js.map +1 -1
  260. package/dist/controllers/spinner_controller.d.ts +39 -4
  261. package/dist/controllers/spinner_controller.js +277 -169
  262. package/dist/controllers/spinner_controller.js.map +1 -1
  263. package/dist/controllers/step_indicator_controller.d.ts +5 -0
  264. package/dist/controllers/step_indicator_controller.js +99 -46
  265. package/dist/controllers/step_indicator_controller.js.map +1 -1
  266. package/dist/controllers/stepper_controller.d.ts +12 -3
  267. package/dist/controllers/stepper_controller.js +114 -73
  268. package/dist/controllers/stepper_controller.js.map +1 -1
  269. package/dist/controllers/stick_to_bottom_controller.d.ts +6 -0
  270. package/dist/controllers/stick_to_bottom_controller.js +262 -138
  271. package/dist/controllers/stick_to_bottom_controller.js.map +1 -1
  272. package/dist/controllers/sticky_observer_controller.d.ts +11 -0
  273. package/dist/controllers/sticky_observer_controller.js +214 -49
  274. package/dist/controllers/sticky_observer_controller.js.map +1 -1
  275. package/dist/controllers/submit_once_controller.d.ts +23 -8
  276. package/dist/controllers/submit_once_controller.js +294 -205
  277. package/dist/controllers/submit_once_controller.js.map +1 -1
  278. package/dist/controllers/switch_controller.d.ts +12 -1
  279. package/dist/controllers/switch_controller.js +33 -60
  280. package/dist/controllers/switch_controller.js.map +1 -1
  281. package/dist/controllers/tabs_controller.d.ts +2 -2
  282. package/dist/controllers/tabs_controller.js +35 -29
  283. package/dist/controllers/tabs_controller.js.map +1 -1
  284. package/dist/controllers/tags_input_controller.d.ts +12 -0
  285. package/dist/controllers/tags_input_controller.js +136 -145
  286. package/dist/controllers/tags_input_controller.js.map +1 -1
  287. package/dist/controllers/textarea_autosize_controller.d.ts +10 -0
  288. package/dist/controllers/textarea_autosize_controller.js +71 -58
  289. package/dist/controllers/textarea_autosize_controller.js.map +1 -1
  290. package/dist/controllers/theme_controller.d.ts +21 -9
  291. package/dist/controllers/theme_controller.js +130 -112
  292. package/dist/controllers/theme_controller.js.map +1 -1
  293. package/dist/controllers/time_picker_controller.d.ts +18 -1
  294. package/dist/controllers/time_picker_controller.js +146 -80
  295. package/dist/controllers/time_picker_controller.js.map +1 -1
  296. package/dist/controllers/toast_controller.d.ts +36 -11
  297. package/dist/controllers/toast_controller.js +186 -297
  298. package/dist/controllers/toast_controller.js.map +1 -1
  299. package/dist/controllers/toggle_group_controller.d.ts +12 -3
  300. package/dist/controllers/toggle_group_controller.js +95 -136
  301. package/dist/controllers/toggle_group_controller.js.map +1 -1
  302. package/dist/controllers/toolbar_controller.js +68 -98
  303. package/dist/controllers/toolbar_controller.js.map +1 -1
  304. package/dist/controllers/tooltip_controller.d.ts +45 -3
  305. package/dist/controllers/tooltip_controller.js +158 -124
  306. package/dist/controllers/tooltip_controller.js.map +1 -1
  307. package/dist/controllers/transition_controller.d.ts +22 -4
  308. package/dist/controllers/transition_controller.js +123 -119
  309. package/dist/controllers/transition_controller.js.map +1 -1
  310. package/dist/controllers/tree_view_controller.d.ts +21 -11
  311. package/dist/controllers/tree_view_controller.js +150 -345
  312. package/dist/controllers/tree_view_controller.js.map +1 -1
  313. package/dist/index.d.ts +8 -5
  314. package/dist/index.js +6370 -9346
  315. package/dist/index.js.map +1 -1
  316. package/dist/inspector/cli.d.ts +23 -3
  317. package/dist/inspector/cli.js +92 -37
  318. package/dist/inspector/cli.js.map +1 -1
  319. package/dist/inspector/cli_bin.js +92 -56
  320. package/dist/inspector/cli_bin.js.map +1 -1
  321. package/dist/inspector/examples.json +8 -8
  322. package/dist/inspector/manifest.json +787 -100
  323. package/dist/positioning/index.d.ts +8 -0
  324. package/dist/positioning/index.js +148 -47
  325. package/dist/positioning/index.js.map +1 -1
  326. package/package.json +6 -6
  327. package/dist/controllers/reset_before_cache_controller.d.ts +0 -76
  328. package/dist/controllers/reset_before_cache_controller.js.map +0 -1
@@ -1,69 +1,47 @@
1
1
  import { Controller } from '@hotwired/stimulus';
2
2
 
3
- // src/controllers/pointer_drag_controller.ts
4
-
5
- // src/utils/arrow_step.ts
6
3
  function isReservedArrowChord(event, allow = []) {
7
4
  if (!event.key.startsWith("Arrow")) return false;
8
5
  return event.altKey && !allow.includes("alt") || event.ctrlKey && !allow.includes("ctrl") || event.metaKey && !allow.includes("meta") || event.shiftKey && !allow.includes("shift");
9
6
  }
10
7
 
11
- // src/utils/detach_gate.ts
12
8
  var DetachGate = class _DetachGate {
13
- /** Set while a probe is queued, waiting for a reconnect to cancel it. */
14
9
  #pending = false;
15
- /**
16
- * True while a probe is queued — the last disconnect was ambiguous and no
17
- * reconnect has cancelled it yet. Read it from `connect()` to tell the
18
- * reconnect half of an in-page move from a first connect: a controller whose
19
- * initialisation restarts a measurement (a min-duration floor, an elapsed
20
- * counter) must skip it for the move, where nothing actually restarted.
21
- */
22
10
  get pending() {
23
11
  return this.#pending;
24
12
  }
25
- /**
26
- * True when the disconnect is definitely a real detach — the element left
27
- * the document, or `data-controller` no longer lists the identifier. False
28
- * means ambiguous (in-page move or observed-root exit), NOT "alive".
29
- */
30
13
  static isDetached(host) {
31
- if (!host.element.isConnected) return true;
32
- const tokens = (host.element.getAttribute("data-controller") ?? "").split(/\s+/);
33
- return !tokens.includes(host.identifier);
34
- }
35
- /**
36
- * Call from `disconnect()`: runs `teardown` synchronously on a definite
37
- * detach (fast path), otherwise defers it one microtask — a reconnect
38
- * ({@link cancel} from `connect()`) keeps the state, no reconnect runs it.
39
- * One microtask is the whole probe window: Stimulus reconnects a moved
40
- * element within the same mutation batch, before the checkpoint drains.
41
- */
14
+ return !host.element.isConnected || !_DetachGate.#listed(host);
15
+ }
42
16
  disconnected(host, teardown) {
43
- if (_DetachGate.isDetached(host)) {
17
+ const carried = _DetachGate.#carried(host);
18
+ if (!carried && _DetachGate.isDetached(host)) {
44
19
  this.#pending = false;
45
20
  teardown();
46
21
  return;
47
22
  }
48
23
  this.#pending = true;
49
- queueMicrotask(() => {
24
+ const probe = () => {
50
25
  if (!this.#pending) return;
51
26
  this.#pending = false;
52
27
  teardown();
53
- });
28
+ };
29
+ if (carried) setTimeout(probe, 0);
30
+ else queueMicrotask(probe);
31
+ }
32
+ static #carried(host) {
33
+ const element = host.element;
34
+ return !element.isConnected && element.closest("[data-turbo-permanent]") !== null && _DetachGate.#listed(host);
35
+ }
36
+ static #listed(host) {
37
+ const tokens = (host.element.getAttribute("data-controller") ?? "").split(/\s+/);
38
+ return tokens.includes(host.identifier);
54
39
  }
55
- /**
56
- * Disarms a pending probe. Call from `connect()` (the reconnect that proves
57
- * an in-page move) and from the head of any teardown path not routed through
58
- * {@link disconnected} (disabled-toggle, Escape), so an orphaned probe can
59
- * never run the teardown a second time.
60
- */
61
40
  cancel() {
62
41
  this.#pending = false;
63
42
  }
64
43
  };
65
44
 
66
- // src/utils/event_owner.ts
67
45
  function ownerIndex(candidates, node) {
68
46
  if (!(node instanceof Node)) return -1;
69
47
  return candidates.findIndex((candidate) => candidate.contains(node));
@@ -72,7 +50,115 @@ function ownerOf(candidates, node) {
72
50
  return candidates[ownerIndex(candidates, node)] ?? null;
73
51
  }
74
52
 
75
- // src/utils/owned_pointer_session.ts
53
+ var ListenerSet = class {
54
+ #abort = new AbortController();
55
+ add(target, type, handler, options) {
56
+ target.addEventListener(type, handler, { ...options, signal: this.#abort.signal });
57
+ }
58
+ dispose() {
59
+ this.#abort.abort();
60
+ this.#abort = new AbortController();
61
+ }
62
+ };
63
+
64
+ var MicrotaskCoalescer = class {
65
+ #run;
66
+ #queued = false;
67
+ #active = false;
68
+ #generation = 0;
69
+ constructor(run) {
70
+ this.#run = run;
71
+ }
72
+ activate() {
73
+ this.#active = true;
74
+ }
75
+ cancel() {
76
+ this.#active = false;
77
+ this.#queued = false;
78
+ this.#generation += 1;
79
+ }
80
+ schedule() {
81
+ if (!this.#active || this.#queued) return;
82
+ this.#queued = true;
83
+ const generation = this.#generation;
84
+ queueMicrotask(() => {
85
+ if (generation !== this.#generation || !this.#queued || !this.#active) return;
86
+ this.#queued = false;
87
+ this.#run();
88
+ });
89
+ }
90
+ };
91
+
92
+ var MorphRenderWatcher = class {
93
+ #listeners = new ListenerSet();
94
+ #pass;
95
+ #element = null;
96
+ #onMorph = () => this.#pass.schedule();
97
+ constructor(run) {
98
+ this.#pass = new MicrotaskCoalescer(run);
99
+ }
100
+ observe(element) {
101
+ if (this.#element === element) return;
102
+ this.disconnect();
103
+ this.#element = element;
104
+ this.#pass.activate();
105
+ this.#listeners.add(element, "turbo:morph-element", this.#onMorph);
106
+ }
107
+ schedule() {
108
+ this.#pass.schedule();
109
+ }
110
+ disconnect() {
111
+ this.#listeners.dispose();
112
+ this.#pass.cancel();
113
+ this.#element = null;
114
+ }
115
+ };
116
+
117
+ var NUMBER_BOUNDS = {
118
+ nonNegative: { finite: true, min: 0 },
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
+
76
162
  var OwnedPointerSession = class {
77
163
  #pointerId;
78
164
  #owner;
@@ -92,7 +178,6 @@ var OwnedPointerSession = class {
92
178
  } catch {
93
179
  }
94
180
  }
95
- /** Releases capture and listeners, then reports the end exactly once. */
96
181
  end() {
97
182
  this.#finish("teardown");
98
183
  }
@@ -117,23 +202,21 @@ var OwnedPointerSession = class {
117
202
  };
118
203
  };
119
204
 
120
- // src/utils/transient_hooks.ts
121
205
  var TransientHooks = class {
122
206
  #attributes;
123
207
  constructor(options) {
124
208
  this.#attributes = options.attributes;
125
209
  }
126
- /** Drops the declared hooks from `element`; what it carries besides stays. */
127
210
  reset(element) {
128
211
  for (const attribute of this.#attributes) element.removeAttribute(attribute);
129
212
  }
130
213
  };
131
214
 
132
- // src/controllers/pointer_drag_controller.ts
133
215
  var TRANSIENT_DRAG = new TransientHooks({ attributes: ["data-dragging"] });
134
216
  var TRANSIENT_GRAB = new TransientHooks({ attributes: ["data-grabbed"] });
135
217
  var NATIVE_KEY_OWNERS = "input, textarea, select, button, a[href], summary, [contenteditable]";
136
218
  var PointerDragController = class _PointerDragController extends Controller {
219
+ #numbers = new NumberValueReader();
137
220
  static targets = ["handle"];
138
221
  static values = {
139
222
  axis: { type: String, default: "both" },
@@ -142,30 +225,36 @@ var PointerDragController = class _PointerDragController extends Controller {
142
225
  disabled: { type: Boolean, default: false },
143
226
  follow: { type: Boolean, default: false }
144
227
  };
228
+ static valueConstraints = {
229
+ threshold: NUMBER_BOUNDS.nonNegative,
230
+ keyboardStep: NUMBER_BOUNDS.positive
231
+ };
145
232
  static actions = ["reset"];
146
233
  static events = ["start", "move", "end", "cancel"];
147
- /** Marker attribute recording that this controller set the touch-action. */
148
234
  static #TOUCH_ACTION_MARKER = "data-pointer-drag-touch-action";
149
- /** Marker attribute recording that this controller set `tabindex`. */
150
235
  static #TABINDEX_MARKER = "data-pointer-drag-tabindex";
151
236
  #pointer = null;
152
237
  #keyboard = null;
153
- /** Committed follow offset from past drops; a new drag's deltas add onto it. */
154
238
  #followBase = { x: 0, y: 0 };
155
- /** Decides whether a mid-session disconnect() is an in-page move or a detach. */
239
+ #gestureFollows = false;
240
+ #followOutput = null;
156
241
  #gate = new DetachGate();
242
+ #morphRender = new MorphRenderWatcher(() => {
243
+ for (const handle of this.#handles()) this.#prepareHandle(handle);
244
+ this.#reflectSession();
245
+ });
157
246
  connect() {
247
+ this.#morphRender.observe(this.element);
248
+ if (!this.#pointer && !this.#keyboard) this.#followOutput = null;
158
249
  this.#gate.cancel();
159
250
  if (!this.#pointer) TRANSIENT_DRAG.reset(this.element);
160
251
  if (!this.#keyboard) TRANSIENT_GRAB.reset(this.element);
161
- if (this.followValue && !this.#pointer && !this.#keyboard) {
162
- this.#followBase = this.#parseFollowBase();
163
- }
164
252
  this.element.addEventListener("pointerdown", this.#onPointerDown);
165
253
  this.element.addEventListener("keydown", this.#onKeydown);
166
254
  if (!this.hasHandleTarget) this.#prepareHandle(this.element);
167
255
  }
168
256
  disconnect() {
257
+ this.#morphRender.disconnect();
169
258
  this.element.removeEventListener("pointerdown", this.#onPointerDown);
170
259
  this.element.removeEventListener("keydown", this.#onKeydown);
171
260
  if (this.#pointer || this.#keyboard) {
@@ -174,16 +263,6 @@ var PointerDragController = class _PointerDragController extends Controller {
174
263
  }
175
264
  this.#teardown();
176
265
  }
177
- /**
178
- * Returns the element to its origin: drops the committed follow offset and the
179
- * inline `translate` that carries it.
180
- *
181
- * In follow mode the inline `translate` belongs to this controller, and the
182
- * committed offset lives in a field the DOM cannot reach — so a consumer that
183
- * wants the element back at the start, or that has written a position of its
184
- * own, needs this to make the two agree again. An in-flight drag is cancelled
185
- * first, or its deltas would land on top of the offset just cleared.
186
- */
187
266
  reset() {
188
267
  const live = this.#pointer?.started ? this.#pointer.pointerType : this.#keyboard ? "keyboard" : null;
189
268
  if (this.#pointer || this.#keyboard) this.#teardownSessions();
@@ -204,13 +283,6 @@ var PointerDragController = class _PointerDragController extends Controller {
204
283
  if (!this.hasHandleTarget) this.#prepareHandle(this.element);
205
284
  if (interrupted) this.#dispatchCancel(interrupted);
206
285
  }
207
- /**
208
- * Re-derives the handles' touch-action when the axis changes.
209
- *
210
- * Two layers, like the `tabindex` loan: the marker says the value was once
211
- * ours, and the current inline value says it still is. A consumer that wrote
212
- * its own `touch-action` after connect keeps it.
213
- */
214
286
  axisValueChanged(_value, previousValue) {
215
287
  const lent = this.#touchActionFor(previousValue ?? this.axisValue);
216
288
  for (const handle of this.#handles()) {
@@ -219,7 +291,6 @@ var PointerDragController = class _PointerDragController extends Controller {
219
291
  handle.style.touchAction = this.#touchActionForAxis();
220
292
  }
221
293
  }
222
- /** Cancels any in-flight session when the controller is disabled mid-drag. */
223
294
  disabledValueChanged() {
224
295
  if (!this.disabledValue) return;
225
296
  if (this.#pointer?.started || this.#keyboard) {
@@ -227,17 +298,13 @@ var PointerDragController = class _PointerDragController extends Controller {
227
298
  }
228
299
  this.#teardownSessions();
229
300
  }
230
- /**
231
- * Arms a pointer drag on a handle; `start` waits for the threshold.
232
- *
233
- * @stimeoRuntimeOnly `disabled` decides whether this one pointer press starts a gesture.
234
- */
235
301
  #onPointerDown = (event) => {
236
302
  if (this.disabledValue || this.#pointer || this.#keyboard || event.button !== 0) return;
237
303
  const handle = this.#handleFor(event.target);
238
304
  if (!handle) return;
239
305
  event.preventDefault();
240
306
  handle.focus();
307
+ this.#beginGesture();
241
308
  const session = {
242
309
  pointer: null,
243
310
  handle,
@@ -254,18 +321,13 @@ var PointerDragController = class _PointerDragController extends Controller {
254
321
  });
255
322
  this.#pointer = session;
256
323
  };
257
- /**
258
- * Applies one tracked move: threshold, hooks, follow offset, events.
259
- *
260
- * @stimeoRuntimeOnly `threshold` decides when this one pointer move starts the drag.
261
- */
262
324
  #trackMove(session, event) {
263
325
  const [dx, dy] = this.#filterAxis(
264
326
  event.clientX - session.originX,
265
327
  event.clientY - session.originY
266
328
  );
267
329
  if (!session.started) {
268
- if (Math.hypot(dx, dy) < this.thresholdValue) return;
330
+ if (Math.hypot(dx, dy) < this.#safeThreshold) return;
269
331
  session.started = true;
270
332
  this.element.setAttribute("data-dragging", "true");
271
333
  this.dispatch("start", {
@@ -279,13 +341,6 @@ var PointerDragController = class _PointerDragController extends Controller {
279
341
  detail: { dx, dy, x: event.clientX, y: event.clientY, pointerType: session.pointerType }
280
342
  });
281
343
  }
282
- /**
283
- * Closes the session and reports only the outcome the caller does not own.
284
- *
285
- * A teardown (detach, Escape, mid-drag disable, `reset`) is announced by the
286
- * path that asked for it, so this one stays silent; `pointerup` below the
287
- * threshold was a plain click, and `pointercancel` is an OS gesture takeover.
288
- */
289
344
  #finishPointer(session, kind) {
290
345
  const { started, dx, dy, pointerType } = session;
291
346
  this.#pointer = null;
@@ -298,12 +353,6 @@ var PointerDragController = class _PointerDragController extends Controller {
298
353
  }
299
354
  this.#dispatchCancel(pointerType);
300
355
  }
301
- /**
302
- * Keyboard alternative: Space/Enter grab & drop, arrows move, Escape cancels.
303
- *
304
- * @stimeoRuntimeOnly `disabled` decides whether this one key is taken and `keyboardStep` is the
305
- * distance of one keyboard move.
306
- */
307
356
  #onKeydown = (event) => {
308
357
  if (this.disabledValue) return;
309
358
  const handle = this.#handleFor(event.target);
@@ -355,8 +404,8 @@ var PointerDragController = class _PointerDragController extends Controller {
355
404
  }
356
405
  });
357
406
  };
358
- /** Enters the grabbed mode: `data-grabbed` on element + handle, then `start`. */
359
407
  #grabKeyboard(handle) {
408
+ this.#beginGesture();
360
409
  this.#keyboard = { handle, dx: 0, dy: 0 };
361
410
  this.element.setAttribute("data-grabbed", "true");
362
411
  handle.setAttribute("data-grabbed", "true");
@@ -369,9 +418,8 @@ var PointerDragController = class _PointerDragController extends Controller {
369
418
  this.#followCommit(session.dx, session.dy);
370
419
  this.dispatch("end", { detail: { dx: session.dx, dy: session.dy, pointerType: "keyboard" } });
371
420
  }
372
- /** Maps an arrow key to a raw (unfiltered) `keyboardStep` delta. */
373
421
  #keyboardDelta(key) {
374
- const step = this.keyboardStepValue;
422
+ const step = this.#safeKeyboardStep;
375
423
  switch (key) {
376
424
  case "ArrowRight":
377
425
  return [step, 0];
@@ -385,17 +433,11 @@ var PointerDragController = class _PointerDragController extends Controller {
385
433
  return null;
386
434
  }
387
435
  }
388
- /**
389
- * Zeroes the delta on the locked axis (`axis` = x | y | both).
390
- *
391
- * @stimeoRuntimeOnly `axis` filters the offset of one move to the allowed direction.
392
- */
393
436
  #filterAxis(dx, dy) {
394
437
  if (this.axisValue === "x") return [dx, 0];
395
438
  if (this.axisValue === "y") return [0, dy];
396
439
  return [dx, dy];
397
440
  }
398
- /** Silently closes a live pointer session; the caller announces the outcome. */
399
441
  #endPointerSession() {
400
442
  this.#pointer?.pointer?.end();
401
443
  }
@@ -404,28 +446,13 @@ var PointerDragController = class _PointerDragController extends Controller {
404
446
  this.#keyboard = null;
405
447
  this.element.removeAttribute("data-grabbed");
406
448
  }
407
- /**
408
- * Full teardown for a controller whose element is going away or lost its
409
- * controller. Into a dead (detached) tree it is silent — consumers restore
410
- * from their own `connect()`, not from a cancel event. But a detach that
411
- * KEEPS the element (Turbo morph, `data-controller` removed) leaves the
412
- * consumers alive and listening: an in-flight session must end in `cancel`
413
- * there, or a composer like sortable strands its one-at-a-time session
414
- * bookkeeping forever.
415
- */
416
449
  #teardown() {
417
- this.#gate.cancel();
418
450
  const interrupted = this.#pointer?.started ? this.#pointer.pointerType : this.#keyboard ? "keyboard" : null;
419
451
  this.#teardownSessions();
420
452
  for (const handle of this.#handles()) this.#restoreHandle(handle);
421
- this.#followReset();
453
+ if (interrupted) this.#followReset();
422
454
  if (interrupted && this.element.isConnected) this.#dispatchCancel(interrupted);
423
455
  }
424
- /**
425
- * Silently tears down whatever session is live (disconnect / disabled /
426
- * Escape). Composed from the two single-session teardowns so pointer and
427
- * keyboard cleanup cannot diverge as either path evolves.
428
- */
429
456
  #teardownSessions() {
430
457
  this.#endPointerSession();
431
458
  this.#clearKeyboardSession();
@@ -434,63 +461,52 @@ var PointerDragController = class _PointerDragController extends Controller {
434
461
  this.#followReset();
435
462
  this.dispatch("cancel", { detail: { pointerType } });
436
463
  }
437
- /**
438
- * Applies the in-flight offset to the element's `translate` (follow only).
439
- *
440
- * @stimeoRuntimeOnly `follow` decides whether this one move writes the offset as a translate; the
441
- * offset itself comes from the gesture.
442
- */
464
+ #beginGesture() {
465
+ this.#gestureFollows = this.followValue;
466
+ if (this.#gestureFollows) this.#followBase = this.#parseFollowBase();
467
+ }
443
468
  #followMove(dx, dy) {
444
- if (!this.followValue) return;
469
+ if (!this.#gestureFollows) return;
445
470
  this.#applyFollow(this.#followBase.x + dx, this.#followBase.y + dy);
446
471
  }
447
- /**
448
- * Folds a drop's deltas into the committed base offset (follow only).
449
- *
450
- * @stimeoRuntimeOnly `follow` decides whether the end of this one gesture keeps the offset as a
451
- * translate.
452
- */
453
472
  #followCommit(dx, dy) {
454
- if (!this.followValue) return;
473
+ if (!this.#gestureFollows) return;
455
474
  this.#followBase = { x: this.#followBase.x + dx, y: this.#followBase.y + dy };
456
475
  this.#applyFollow(this.#followBase.x, this.#followBase.y);
457
476
  }
458
- /**
459
- * Snaps back to the committed position (follow only) — the cancel contract.
460
- *
461
- * @stimeoRuntimeOnly `follow` decides whether cancelling this one gesture clears the translate it
462
- * wrote.
463
- */
464
477
  #followReset() {
465
- if (!this.followValue) return;
478
+ if (!this.#gestureFollows) return;
466
479
  this.#applyFollow(this.#followBase.x, this.#followBase.y);
467
480
  }
468
- /**
469
- * Writes the offset as the standalone CSS `translate` property — independent
470
- * of `transform`, so an authored transform (scale, rotate…) is never
471
- * clobbered. At the origin the property is removed to keep the DOM clean.
472
- */
481
+ #reflectSession() {
482
+ if (this.#pointer?.started) this.element.setAttribute("data-dragging", "true");
483
+ else this.element.removeAttribute("data-dragging");
484
+ if (this.#keyboard) {
485
+ this.element.setAttribute("data-grabbed", "true");
486
+ this.#keyboard.handle.setAttribute("data-grabbed", "true");
487
+ } else {
488
+ this.element.removeAttribute("data-grabbed");
489
+ for (const handle of this.#handles()) handle.removeAttribute("data-grabbed");
490
+ }
491
+ const follows = this.#pointer || this.#keyboard ? this.#gestureFollows : this.followValue;
492
+ if (follows && this.#followOutput) {
493
+ this.#applyFollow(this.#followOutput.x, this.#followOutput.y);
494
+ }
495
+ }
473
496
  #applyFollow(x, y) {
497
+ this.#followOutput = { x, y };
474
498
  if (x === 0 && y === 0) this.element.style.removeProperty("translate");
475
499
  else this.element.style.setProperty("translate", `${x}px ${y}px`);
476
500
  }
477
- /**
478
- * Reads a committed follow offset back from the inline `translate`. Only the
479
- * controller's own `<x>px <y>px` shape is recognized; anything else (an
480
- * authored percentage, `none`, an empty string) starts the base at 0 — follow
481
- * mode owns this property, per the class contract.
482
- */
483
501
  #parseFollowBase() {
484
502
  const raw = this.element.style.getPropertyValue("translate").trim();
485
503
  const match = /^(-?\d+(?:\.\d+)?)px(?:\s+(-?\d+(?:\.\d+)?)px)?$/.exec(raw);
486
504
  if (!match) return { x: 0, y: 0 };
487
505
  return { x: Number(match[1]), y: Number(match[2] ?? "0") };
488
506
  }
489
- /** The active handles: the `handle` targets, else the element itself. */
490
507
  #handles() {
491
508
  return this.hasHandleTarget ? this.handleTargets : [this.element];
492
509
  }
493
- /** Resolves the handle owning an event target (the handle or a descendant). */
494
510
  #handleFor(target) {
495
511
  return ownerOf(this.#handles(), target);
496
512
  }
@@ -499,25 +515,14 @@ var PointerDragController = class _PointerDragController extends Controller {
499
515
  if (type === "touch" || type === "pen") return type;
500
516
  return "mouse";
501
517
  }
502
- /** `touch-action` that lets the page keep panning on the locked axis only. */
503
518
  #touchActionForAxis() {
504
519
  return this.#touchActionFor(this.axisValue);
505
520
  }
506
- /** The `touch-action` an `axis` declaration lends, for any axis value. */
507
521
  #touchActionFor(axis) {
508
522
  if (axis === "x") return "pan-y";
509
523
  if (axis === "y") return "pan-x";
510
524
  return "none";
511
525
  }
512
- /**
513
- * Establishes the handle contract: a `touch-action` derived from `axis`
514
- * (marker-guarded so an authored inline value wins and reconnects stay
515
- * idempotent) and focusability for the keyboard path (`tabindex="0"` only when
516
- * the author supplied none — prefer a real `<button>` handle). Both additions
517
- * are marker-owned so `#restoreHandle` reverts them symmetrically on teardown.
518
- *
519
- * @stimeoRenderRoot
520
- */
521
526
  #prepareHandle(handle) {
522
527
  const lent = this.#touchActionForAxis();
523
528
  const marked = handle.hasAttribute(_PointerDragController.#TOUCH_ACTION_MARKER);
@@ -530,12 +535,10 @@ var PointerDragController = class _PointerDragController extends Controller {
530
535
  handle.setAttribute(_PointerDragController.#TABINDEX_MARKER, "true");
531
536
  }
532
537
  }
533
- /** Whether the key belongs to a native control or editing surface in the handle. */
534
538
  #ownsNativeKeys(target, handle) {
535
539
  const owner = target?.closest(NATIVE_KEY_OWNERS) ?? null;
536
540
  return owner !== null && owner !== handle && handle.contains(owner);
537
541
  }
538
- /** Reverts the marker-owned touch-action + tabindex (authored values untouched). */
539
542
  #restoreHandle(handle) {
540
543
  if (handle.hasAttribute(_PointerDragController.#TOUCH_ACTION_MARKER)) {
541
544
  if (handle.style.touchAction === this.#touchActionForAxis()) {
@@ -553,8 +556,25 @@ var PointerDragController = class _PointerDragController extends Controller {
553
556
  if (!ours) handle.removeAttribute(_PointerDragController.#TABINDEX_MARKER);
554
557
  }
555
558
  }
559
+ get #safeThreshold() {
560
+ return this.#numbers.read(
561
+ this,
562
+ "threshold",
563
+ this.thresholdValue,
564
+ _PointerDragController.values.threshold.default,
565
+ _PointerDragController.valueConstraints.threshold
566
+ );
567
+ }
568
+ get #safeKeyboardStep() {
569
+ return this.#numbers.read(
570
+ this,
571
+ "keyboardStep",
572
+ this.keyboardStepValue,
573
+ _PointerDragController.values.keyboardStep.default,
574
+ _PointerDragController.valueConstraints.keyboardStep
575
+ );
576
+ }
556
577
  };
557
578
 
558
579
  export { PointerDragController };
559
- //# sourceMappingURL=pointer_drag_controller.js.map
560
580
  //# sourceMappingURL=pointer_drag_controller.js.map