stimeo-ui 0.15.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 (332) hide show
  1. package/CHANGELOG.md +209 -0
  2. package/README.md +128 -1
  3. package/dist/cable/index.d.ts +79 -23
  4. package/dist/cable/index.js +392 -417
  5. package/dist/cable/index.js.map +1 -1
  6. package/dist/controllers/accordion_controller.d.ts +34 -5
  7. package/dist/controllers/accordion_controller.js +228 -28
  8. package/dist/controllers/accordion_controller.js.map +1 -1
  9. package/dist/controllers/alert_dialog_controller.d.ts +20 -9
  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 +38 -7
  13. package/dist/controllers/announcer_controller.js +135 -191
  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 +295 -110
  19. package/dist/controllers/auto_submit_controller.js.map +1 -1
  20. package/dist/controllers/avatar_controller.js +172 -106
  21. package/dist/controllers/avatar_controller.js.map +1 -1
  22. package/dist/controllers/breadcrumb_controller.d.ts +10 -7
  23. package/dist/controllers/breadcrumb_controller.js +0 -129
  24. package/dist/controllers/breadcrumb_controller.js.map +1 -1
  25. package/dist/controllers/bulk_select_controller.d.ts +22 -4
  26. package/dist/controllers/bulk_select_controller.js +264 -53
  27. package/dist/controllers/bulk_select_controller.js.map +1 -1
  28. package/dist/controllers/calendar_controller.d.ts +109 -28
  29. package/dist/controllers/calendar_controller.js +346 -180
  30. package/dist/controllers/calendar_controller.js.map +1 -1
  31. package/dist/controllers/carousel_controller.d.ts +99 -27
  32. package/dist/controllers/carousel_controller.js +587 -300
  33. package/dist/controllers/carousel_controller.js.map +1 -1
  34. package/dist/controllers/character_counter_controller.d.ts +18 -2
  35. package/dist/controllers/character_counter_controller.js +271 -143
  36. package/dist/controllers/character_counter_controller.js.map +1 -1
  37. package/dist/controllers/checkbox_controller.d.ts +7 -2
  38. package/dist/controllers/checkbox_controller.js +77 -75
  39. package/dist/controllers/checkbox_controller.js.map +1 -1
  40. package/dist/controllers/clipboard_controller.d.ts +44 -7
  41. package/dist/controllers/clipboard_controller.js +187 -108
  42. package/dist/controllers/clipboard_controller.js.map +1 -1
  43. package/dist/controllers/collapsible_controller.d.ts +41 -5
  44. package/dist/controllers/collapsible_controller.js +374 -108
  45. package/dist/controllers/collapsible_controller.js.map +1 -1
  46. package/dist/controllers/color_picker_controller.d.ts +47 -14
  47. package/dist/controllers/color_picker_controller.js +183 -127
  48. package/dist/controllers/color_picker_controller.js.map +1 -1
  49. package/dist/controllers/combobox_controller.d.ts +33 -6
  50. package/dist/controllers/combobox_controller.js +426 -109
  51. package/dist/controllers/combobox_controller.js.map +1 -1
  52. package/dist/controllers/command_palette_controller.d.ts +45 -14
  53. package/dist/controllers/command_palette_controller.js +994 -350
  54. package/dist/controllers/command_palette_controller.js.map +1 -1
  55. package/dist/controllers/conditional_fields_controller.d.ts +15 -2
  56. package/dist/controllers/conditional_fields_controller.js +212 -125
  57. package/dist/controllers/conditional_fields_controller.js.map +1 -1
  58. package/dist/controllers/confirm_controller.d.ts +49 -12
  59. package/dist/controllers/confirm_controller.js +939 -245
  60. package/dist/controllers/confirm_controller.js.map +1 -1
  61. package/dist/controllers/context_menu_controller.d.ts +36 -3
  62. package/dist/controllers/context_menu_controller.js +275 -127
  63. package/dist/controllers/context_menu_controller.js.map +1 -1
  64. package/dist/controllers/count_up_controller.d.ts +13 -1
  65. package/dist/controllers/count_up_controller.js +73 -21
  66. package/dist/controllers/count_up_controller.js.map +1 -1
  67. package/dist/controllers/countdown_controller.d.ts +75 -2
  68. package/dist/controllers/countdown_controller.js +235 -97
  69. package/dist/controllers/countdown_controller.js.map +1 -1
  70. package/dist/controllers/currency_input_controller.d.ts +93 -15
  71. package/dist/controllers/currency_input_controller.js +241 -118
  72. package/dist/controllers/currency_input_controller.js.map +1 -1
  73. package/dist/controllers/data_grid_controller.d.ts +78 -22
  74. package/dist/controllers/data_grid_controller.js +229 -135
  75. package/dist/controllers/data_grid_controller.js.map +1 -1
  76. package/dist/controllers/date_range_picker_controller.d.ts +64 -11
  77. package/dist/controllers/date_range_picker_controller.js +359 -165
  78. package/dist/controllers/date_range_picker_controller.js.map +1 -1
  79. package/dist/controllers/dialog_controller.d.ts +22 -3
  80. package/dist/controllers/dialog_controller.js +887 -225
  81. package/dist/controllers/dialog_controller.js.map +1 -1
  82. package/dist/controllers/direct_upload_controller.d.ts +24 -7
  83. package/dist/controllers/direct_upload_controller.js +80 -142
  84. package/dist/controllers/direct_upload_controller.js.map +1 -1
  85. package/dist/controllers/dirty_form_controller.d.ts +2 -2
  86. package/dist/controllers/dirty_form_controller.js +26 -47
  87. package/dist/controllers/dirty_form_controller.js.map +1 -1
  88. package/dist/controllers/dismissible_controller.d.ts +19 -0
  89. package/dist/controllers/dismissible_controller.js +175 -20
  90. package/dist/controllers/dismissible_controller.js.map +1 -1
  91. package/dist/controllers/drawer_controller.d.ts +52 -16
  92. package/dist/controllers/drawer_controller.js +963 -336
  93. package/dist/controllers/drawer_controller.js.map +1 -1
  94. package/dist/controllers/dropdown_controller.d.ts +39 -3
  95. package/dist/controllers/dropdown_controller.js +342 -85
  96. package/dist/controllers/dropdown_controller.js.map +1 -1
  97. package/dist/controllers/editable_controller.d.ts +12 -1
  98. package/dist/controllers/editable_controller.js +182 -58
  99. package/dist/controllers/editable_controller.js.map +1 -1
  100. package/dist/controllers/empty_state_controller.js +67 -53
  101. package/dist/controllers/empty_state_controller.js.map +1 -1
  102. package/dist/controllers/file_dropzone_controller.d.ts +60 -18
  103. package/dist/controllers/file_dropzone_controller.js +426 -229
  104. package/dist/controllers/file_dropzone_controller.js.map +1 -1
  105. package/dist/controllers/filter_controller.d.ts +10 -4
  106. package/dist/controllers/filter_controller.js +78 -36
  107. package/dist/controllers/filter_controller.js.map +1 -1
  108. package/dist/controllers/flash_controller.d.ts +57 -14
  109. package/dist/controllers/flash_controller.js +328 -211
  110. package/dist/controllers/flash_controller.js.map +1 -1
  111. package/dist/controllers/focus_controller.d.ts +12 -3
  112. package/dist/controllers/focus_controller.js +654 -239
  113. package/dist/controllers/focus_controller.js.map +1 -1
  114. package/dist/controllers/form_field_controller.js +153 -136
  115. package/dist/controllers/form_field_controller.js.map +1 -1
  116. package/dist/controllers/form_validation_controller.js +29 -96
  117. package/dist/controllers/form_validation_controller.js.map +1 -1
  118. package/dist/controllers/frame_loading_controller.d.ts +41 -9
  119. package/dist/controllers/frame_loading_controller.js +263 -198
  120. package/dist/controllers/frame_loading_controller.js.map +1 -1
  121. package/dist/controllers/highlight_controller.d.ts +22 -2
  122. package/dist/controllers/highlight_controller.js +119 -70
  123. package/dist/controllers/highlight_controller.js.map +1 -1
  124. package/dist/controllers/hover_card_controller.d.ts +65 -4
  125. package/dist/controllers/hover_card_controller.js +335 -118
  126. package/dist/controllers/hover_card_controller.js.map +1 -1
  127. package/dist/controllers/idle_controller.d.ts +58 -4
  128. package/dist/controllers/idle_controller.js +316 -65
  129. package/dist/controllers/idle_controller.js.map +1 -1
  130. package/dist/controllers/input_mask_controller.d.ts +5 -2
  131. package/dist/controllers/input_mask_controller.js +116 -61
  132. package/dist/controllers/input_mask_controller.js.map +1 -1
  133. package/dist/controllers/intersection_controller.d.ts +32 -13
  134. package/dist/controllers/intersection_controller.js +147 -103
  135. package/dist/controllers/intersection_controller.js.map +1 -1
  136. package/dist/controllers/lazy_frame_controller.d.ts +16 -0
  137. package/dist/controllers/lazy_frame_controller.js +9 -56
  138. package/dist/controllers/lazy_frame_controller.js.map +1 -1
  139. package/dist/controllers/listbox_controller.d.ts +84 -10
  140. package/dist/controllers/listbox_controller.js +413 -153
  141. package/dist/controllers/listbox_controller.js.map +1 -1
  142. package/dist/controllers/local_time_controller.d.ts +1 -1
  143. package/dist/controllers/local_time_controller.js +54 -64
  144. package/dist/controllers/local_time_controller.js.map +1 -1
  145. package/dist/controllers/masonry_controller.d.ts +11 -3
  146. package/dist/controllers/masonry_controller.js +70 -95
  147. package/dist/controllers/masonry_controller.js.map +1 -1
  148. package/dist/controllers/menu_controller.d.ts +40 -9
  149. package/dist/controllers/menu_controller.js +254 -167
  150. package/dist/controllers/menu_controller.js.map +1 -1
  151. package/dist/controllers/menubar_controller.d.ts +15 -4
  152. package/dist/controllers/menubar_controller.js +206 -331
  153. package/dist/controllers/menubar_controller.js.map +1 -1
  154. package/dist/controllers/meter_controller.d.ts +20 -0
  155. package/dist/controllers/meter_controller.js +159 -71
  156. package/dist/controllers/meter_controller.js.map +1 -1
  157. package/dist/controllers/multi_select_controller.d.ts +50 -7
  158. package/dist/controllers/multi_select_controller.js +797 -388
  159. package/dist/controllers/multi_select_controller.js.map +1 -1
  160. package/dist/controllers/navigation_menu_controller.d.ts +19 -1
  161. package/dist/controllers/navigation_menu_controller.js +156 -231
  162. package/dist/controllers/navigation_menu_controller.js.map +1 -1
  163. package/dist/controllers/nested_form_controller.d.ts +10 -0
  164. package/dist/controllers/nested_form_controller.js +373 -174
  165. package/dist/controllers/nested_form_controller.js.map +1 -1
  166. package/dist/controllers/network_status_controller.d.ts +23 -0
  167. package/dist/controllers/network_status_controller.js +241 -45
  168. package/dist/controllers/network_status_controller.js.map +1 -1
  169. package/dist/controllers/number_input_controller.d.ts +62 -10
  170. package/dist/controllers/number_input_controller.js +387 -227
  171. package/dist/controllers/number_input_controller.js.map +1 -1
  172. package/dist/controllers/optimistic_controller.js +28 -75
  173. package/dist/controllers/optimistic_controller.js.map +1 -1
  174. package/dist/controllers/otp_controller.d.ts +38 -7
  175. package/dist/controllers/otp_controller.js +344 -196
  176. package/dist/controllers/otp_controller.js.map +1 -1
  177. package/dist/controllers/overflow_indicator_controller.d.ts +13 -12
  178. package/dist/controllers/overflow_indicator_controller.js +167 -93
  179. package/dist/controllers/overflow_indicator_controller.js.map +1 -1
  180. package/dist/controllers/overflow_menu_controller.d.ts +66 -9
  181. package/dist/controllers/overflow_menu_controller.js +408 -277
  182. package/dist/controllers/overflow_menu_controller.js.map +1 -1
  183. package/dist/controllers/pagination_controller.d.ts +52 -15
  184. package/dist/controllers/pagination_controller.js +342 -120
  185. package/dist/controllers/pagination_controller.js.map +1 -1
  186. package/dist/controllers/password_reveal_controller.d.ts +60 -9
  187. package/dist/controllers/password_reveal_controller.js +424 -99
  188. package/dist/controllers/password_reveal_controller.js.map +1 -1
  189. package/dist/controllers/password_strength_controller.d.ts +14 -5
  190. package/dist/controllers/password_strength_controller.js +99 -153
  191. package/dist/controllers/password_strength_controller.js.map +1 -1
  192. package/dist/controllers/persist_controller.d.ts +11 -4
  193. package/dist/controllers/persist_controller.js +252 -96
  194. package/dist/controllers/persist_controller.js.map +1 -1
  195. package/dist/controllers/pointer_drag_controller.d.ts +19 -7
  196. package/dist/controllers/pointer_drag_controller.js +263 -164
  197. package/dist/controllers/pointer_drag_controller.js.map +1 -1
  198. package/dist/controllers/popover_controller.d.ts +46 -4
  199. package/dist/controllers/popover_controller.js +267 -94
  200. package/dist/controllers/popover_controller.js.map +1 -1
  201. package/dist/controllers/portal_controller.d.ts +44 -4
  202. package/dist/controllers/portal_controller.js +209 -72
  203. package/dist/controllers/portal_controller.js.map +1 -1
  204. package/dist/controllers/preview_guard_controller.d.ts +10 -4
  205. package/dist/controllers/preview_guard_controller.js +243 -112
  206. package/dist/controllers/preview_guard_controller.js.map +1 -1
  207. package/dist/controllers/progress_controller.d.ts +11 -0
  208. package/dist/controllers/progress_controller.js +132 -59
  209. package/dist/controllers/progress_controller.js.map +1 -1
  210. package/dist/controllers/radio_group_controller.d.ts +19 -8
  211. package/dist/controllers/radio_group_controller.js +138 -133
  212. package/dist/controllers/radio_group_controller.js.map +1 -1
  213. package/dist/controllers/range_slider_controller.d.ts +92 -4
  214. package/dist/controllers/range_slider_controller.js +245 -112
  215. package/dist/controllers/range_slider_controller.js.map +1 -1
  216. package/dist/controllers/rating_controller.d.ts +33 -6
  217. package/dist/controllers/rating_controller.js +429 -194
  218. package/dist/controllers/rating_controller.js.map +1 -1
  219. package/dist/controllers/read_more_controller.d.ts +26 -2
  220. package/dist/controllers/read_more_controller.js +185 -47
  221. package/dist/controllers/read_more_controller.js.map +1 -1
  222. package/dist/controllers/reading_progress_controller.d.ts +1 -1
  223. package/dist/controllers/reading_progress_controller.js +147 -135
  224. package/dist/controllers/reading_progress_controller.js.map +1 -1
  225. package/dist/controllers/relative_time_controller.d.ts +18 -4
  226. package/dist/controllers/relative_time_controller.js +145 -110
  227. package/dist/controllers/relative_time_controller.js.map +1 -1
  228. package/dist/controllers/reset_on_restore_controller.d.ts +85 -0
  229. package/dist/controllers/{reset_before_cache_controller.js → reset_on_restore_controller.js} +97 -38
  230. package/dist/controllers/reset_on_restore_controller.js.map +1 -0
  231. package/dist/controllers/resizable_controller.d.ts +44 -4
  232. package/dist/controllers/resizable_controller.js +294 -118
  233. package/dist/controllers/resizable_controller.js.map +1 -1
  234. package/dist/controllers/roving_controller.js +39 -84
  235. package/dist/controllers/roving_controller.js.map +1 -1
  236. package/dist/controllers/scroll_area_controller.d.ts +7 -3
  237. package/dist/controllers/scroll_area_controller.js +428 -221
  238. package/dist/controllers/scroll_area_controller.js.map +1 -1
  239. package/dist/controllers/scroll_restore_controller.js +0 -53
  240. package/dist/controllers/scroll_restore_controller.js.map +1 -1
  241. package/dist/controllers/scroll_visibility_controller.d.ts +28 -12
  242. package/dist/controllers/scroll_visibility_controller.js +395 -146
  243. package/dist/controllers/scroll_visibility_controller.js.map +1 -1
  244. package/dist/controllers/scrollspy_controller.d.ts +9 -3
  245. package/dist/controllers/scrollspy_controller.js +181 -236
  246. package/dist/controllers/scrollspy_controller.js.map +1 -1
  247. package/dist/controllers/separator_controller.d.ts +59 -17
  248. package/dist/controllers/separator_controller.js +288 -132
  249. package/dist/controllers/separator_controller.js.map +1 -1
  250. package/dist/controllers/sidebar_controller.d.ts +81 -7
  251. package/dist/controllers/sidebar_controller.js +1071 -375
  252. package/dist/controllers/sidebar_controller.js.map +1 -1
  253. package/dist/controllers/skeleton_controller.d.ts +23 -0
  254. package/dist/controllers/skeleton_controller.js +248 -92
  255. package/dist/controllers/skeleton_controller.js.map +1 -1
  256. package/dist/controllers/slider_controller.d.ts +72 -8
  257. package/dist/controllers/slider_controller.js +211 -96
  258. package/dist/controllers/slider_controller.js.map +1 -1
  259. package/dist/controllers/smart_sticky_header_controller.d.ts +21 -3
  260. package/dist/controllers/smart_sticky_header_controller.js +163 -54
  261. package/dist/controllers/smart_sticky_header_controller.js.map +1 -1
  262. package/dist/controllers/sortable_controller.js +13 -110
  263. package/dist/controllers/sortable_controller.js.map +1 -1
  264. package/dist/controllers/spinner_controller.d.ts +39 -4
  265. package/dist/controllers/spinner_controller.js +277 -161
  266. package/dist/controllers/spinner_controller.js.map +1 -1
  267. package/dist/controllers/step_indicator_controller.d.ts +24 -17
  268. package/dist/controllers/step_indicator_controller.js +107 -53
  269. package/dist/controllers/step_indicator_controller.js.map +1 -1
  270. package/dist/controllers/stepper_controller.d.ts +43 -9
  271. package/dist/controllers/stepper_controller.js +171 -48
  272. package/dist/controllers/stepper_controller.js.map +1 -1
  273. package/dist/controllers/stick_to_bottom_controller.d.ts +25 -0
  274. package/dist/controllers/stick_to_bottom_controller.js +310 -116
  275. package/dist/controllers/stick_to_bottom_controller.js.map +1 -1
  276. package/dist/controllers/sticky_observer_controller.d.ts +11 -0
  277. package/dist/controllers/sticky_observer_controller.js +214 -49
  278. package/dist/controllers/sticky_observer_controller.js.map +1 -1
  279. package/dist/controllers/submit_once_controller.d.ts +22 -6
  280. package/dist/controllers/submit_once_controller.js +294 -192
  281. package/dist/controllers/submit_once_controller.js.map +1 -1
  282. package/dist/controllers/switch_controller.d.ts +40 -7
  283. package/dist/controllers/switch_controller.js +107 -43
  284. package/dist/controllers/switch_controller.js.map +1 -1
  285. package/dist/controllers/tabs_controller.d.ts +13 -1
  286. package/dist/controllers/tabs_controller.js +50 -25
  287. package/dist/controllers/tabs_controller.js.map +1 -1
  288. package/dist/controllers/tags_input_controller.d.ts +27 -3
  289. package/dist/controllers/tags_input_controller.js +290 -149
  290. package/dist/controllers/tags_input_controller.js.map +1 -1
  291. package/dist/controllers/textarea_autosize_controller.d.ts +10 -0
  292. package/dist/controllers/textarea_autosize_controller.js +71 -58
  293. package/dist/controllers/textarea_autosize_controller.js.map +1 -1
  294. package/dist/controllers/theme_controller.d.ts +37 -8
  295. package/dist/controllers/theme_controller.js +148 -80
  296. package/dist/controllers/theme_controller.js.map +1 -1
  297. package/dist/controllers/time_picker_controller.d.ts +18 -1
  298. package/dist/controllers/time_picker_controller.js +162 -81
  299. package/dist/controllers/time_picker_controller.js.map +1 -1
  300. package/dist/controllers/toast_controller.d.ts +85 -23
  301. package/dist/controllers/toast_controller.js +365 -193
  302. package/dist/controllers/toast_controller.js.map +1 -1
  303. package/dist/controllers/toggle_group_controller.d.ts +60 -9
  304. package/dist/controllers/toggle_group_controller.js +194 -99
  305. package/dist/controllers/toggle_group_controller.js.map +1 -1
  306. package/dist/controllers/toolbar_controller.js +92 -90
  307. package/dist/controllers/toolbar_controller.js.map +1 -1
  308. package/dist/controllers/tooltip_controller.d.ts +52 -2
  309. package/dist/controllers/tooltip_controller.js +185 -125
  310. package/dist/controllers/tooltip_controller.js.map +1 -1
  311. package/dist/controllers/transition_controller.d.ts +22 -4
  312. package/dist/controllers/transition_controller.js +123 -115
  313. package/dist/controllers/transition_controller.js.map +1 -1
  314. package/dist/controllers/tree_view_controller.d.ts +59 -18
  315. package/dist/controllers/tree_view_controller.js +248 -290
  316. package/dist/controllers/tree_view_controller.js.map +1 -1
  317. package/dist/index.d.ts +33 -3
  318. package/dist/index.js +8649 -8572
  319. package/dist/index.js.map +1 -1
  320. package/dist/inspector/cli.d.ts +95 -9
  321. package/dist/inspector/cli.js +343 -77
  322. package/dist/inspector/cli.js.map +1 -1
  323. package/dist/inspector/cli_bin.js +390 -96
  324. package/dist/inspector/cli_bin.js.map +1 -1
  325. package/dist/inspector/examples.json +45 -45
  326. package/dist/inspector/manifest.json +1308 -155
  327. package/dist/positioning/index.d.ts +8 -0
  328. package/dist/positioning/index.js +148 -45
  329. package/dist/positioning/index.js.map +1 -1
  330. package/package.json +7 -7
  331. package/dist/controllers/reset_before_cache_controller.d.ts +0 -76
  332. package/dist/controllers/reset_before_cache_controller.js.map +0 -1
@@ -28,6 +28,11 @@ type Trigger = HTMLInputElement | HTMLSelectElement;
28
28
  * another region being hidden in the same pass — the controller root temporarily
29
29
  * receives `tabindex="-1"` and focus.
30
30
  *
31
+ * An element that stops being a region gets back what this controller wrote on
32
+ * it: `aria-hidden`, `data-visible`, the `hidden` a declared condition set, and
33
+ * the marked `disabled` of each control no hidden region still covers. The
34
+ * `hidden` of a region without a condition and every authored `disabled` stay.
35
+ *
31
36
  * `change` and `reconcile` dispatch `{ region, visible }`.
32
37
  *
33
38
  * @remarks
@@ -71,8 +76,16 @@ declare class ConditionalFieldsController extends Controller<HTMLElement> {
71
76
  triggerTargetDisconnected(): void;
72
77
  /** Initializes a region target inserted or restored at runtime. */
73
78
  regionTargetConnected(): void;
74
- /** Reconciles the remaining region set after a target leaves. */
75
- regionTargetDisconnected(): void;
79
+ /**
80
+ * Queues a departed region for the return of its written state and reconciles the rest.
81
+ *
82
+ * The return is queued rather than immediate because teardown reports every
83
+ * region as disconnected, and a disconnected controller leaves its derived state
84
+ * in the DOM. The pass that drains the queue skips an element that is still a
85
+ * region, which drops what teardown queued, and keeps a departure queued before
86
+ * a disconnect for the pass after the reconnect.
87
+ */
88
+ regionTargetDisconnected(region: HTMLElement): void;
76
89
  /** Reconciles when application code or a morph changes the match policy. */
77
90
  matchValueChanged(): void;
78
91
  /** Reconciles control ownership when hidden controls become enabled or excluded. */
@@ -1,14 +1,10 @@
1
1
  import { Controller } from '@hotwired/stimulus';
2
2
 
3
- // src/controllers/conditional_fields_controller.ts
4
-
5
- // src/utils/event_owner.ts
6
3
  function ownerIndex(candidates, node) {
7
4
  if (!(node instanceof Node)) return -1;
8
5
  return candidates.findIndex((candidate) => candidate.contains(node));
9
6
  }
10
7
 
11
- // src/utils/focus_candidate.ts
12
8
  function inheritsFieldsetDisabled(control) {
13
9
  let fieldset = control.closest("fieldset[disabled]");
14
10
  while (fieldset) {
@@ -18,59 +14,92 @@ function inheritsFieldsetDisabled(control) {
18
14
  }
19
15
  return false;
20
16
  }
17
+ function unslotted(element) {
18
+ return element.assignedSlot === null && element.parentElement?.shadowRoot != null;
19
+ }
20
+ function flatTreeParent(element) {
21
+ if (unslotted(element)) return null;
22
+ const parent = element.assignedSlot ?? element.parentNode;
23
+ if (parent instanceof ShadowRoot) return parent.host;
24
+ return parent instanceof Element ? parent : null;
25
+ }
21
26
  function canTakeFocus(element) {
22
- if (element.closest("[hidden], [inert]")) return false;
27
+ for (let node = element; node; node = flatTreeParent(node)) {
28
+ if (unslotted(node) || node.matches("[hidden], [inert]")) return false;
29
+ }
23
30
  if (element instanceof HTMLInputElement && element.type === "hidden") return false;
24
31
  if (!("disabled" in element)) return true;
25
32
  if (element.disabled) return false;
26
33
  return !inheritsFieldsetDisabled(element);
27
34
  }
28
35
 
29
- // src/utils/listener_set.ts
36
+ var FormResetWatcher = class {
37
+ #owns;
38
+ #onReset;
39
+ #frames = /* @__PURE__ */ new Set();
40
+ #generation = 0;
41
+ constructor(owns, onReset) {
42
+ this.#owns = owns;
43
+ this.#onReset = onReset;
44
+ }
45
+ observe() {
46
+ document.addEventListener("reset", this.#handleReset, true);
47
+ }
48
+ disconnect() {
49
+ document.removeEventListener("reset", this.#handleReset, true);
50
+ this.#generation += 1;
51
+ for (const frame of this.#frames) cancelAnimationFrame(frame);
52
+ this.#frames.clear();
53
+ }
54
+ #handleReset = (event) => {
55
+ const form = event.target;
56
+ if (!(form instanceof HTMLFormElement) || !this.#owns(form)) return;
57
+ const generation = this.#generation;
58
+ queueMicrotask(() => {
59
+ if (generation !== this.#generation) return;
60
+ if (event.eventPhase === Event.NONE) {
61
+ this.#settle(event);
62
+ return;
63
+ }
64
+ const frame = requestAnimationFrame(() => {
65
+ this.#frames.delete(frame);
66
+ this.#settle(event);
67
+ });
68
+ this.#frames.add(frame);
69
+ });
70
+ };
71
+ #settle(event) {
72
+ if (!event.defaultPrevented) this.#onReset();
73
+ }
74
+ };
75
+
30
76
  var ListenerSet = class {
31
- /** The generation every `add` joins until the next `dispose()`. */
32
77
  #abort = new AbortController();
33
- /**
34
- * Attaches `handler` to the open generation, exactly as the caller spelled it.
35
- *
36
- * The set supplies the signal, so `options` carries everything else the DOM
37
- * accepts — `capture` included, which has to match at release time and no
38
- * longer has a second place to drift from.
39
- */
40
78
  add(target, type, handler, options) {
41
79
  target.addEventListener(type, handler, { ...options, signal: this.#abort.signal });
42
80
  }
43
- /**
44
- * Releases every listener of the open generation, synchronously, and opens the
45
- * next one. Idempotent, and safe before anything has been added.
46
- */
47
81
  dispose() {
48
82
  this.#abort.abort();
49
83
  this.#abort = new AbortController();
50
84
  }
51
85
  };
52
86
 
53
- // src/utils/microtask_coalescer.ts
54
87
  var MicrotaskCoalescer = class {
55
88
  #run;
56
89
  #queued = false;
57
90
  #active = false;
58
91
  #generation = 0;
59
- /** @param run - the single reconciliation pass, invoked at most once per batch. */
60
92
  constructor(run) {
61
93
  this.#run = run;
62
94
  }
63
- /** Opens the window in which {@link schedule} is honoured; call from `connect()`. */
64
95
  activate() {
65
96
  this.#active = true;
66
97
  }
67
- /** Closes the window and drops any pending pass; call from `disconnect()`. */
68
98
  cancel() {
69
99
  this.#active = false;
70
100
  this.#queued = false;
71
101
  this.#generation += 1;
72
102
  }
73
- /** Requests one pass after the batch settles. Idempotent; inert outside the window. */
74
103
  schedule() {
75
104
  if (!this.#active || this.#queued) return;
76
105
  this.#queued = true;
@@ -83,68 +112,148 @@ var MicrotaskCoalescer = class {
83
112
  }
84
113
  };
85
114
 
86
- // src/utils/before_cache_reset.ts
87
- var BeforeCacheReset = class _BeforeCacheReset {
88
- /** Every subscribed instance, iterated by the one shared document listener. */
89
- static #subscribers = /* @__PURE__ */ new Set();
90
- /** The shared listener; installed while at least one instance is subscribed. */
91
- static #onBeforeCache = () => {
92
- for (const subscriber of _BeforeCacheReset.#subscribers) subscriber.#rewind();
93
- };
94
- #rewind;
95
- /** @param rewind - the pass that returns this controller's state to its initial form. */
96
- constructor(rewind) {
97
- this.#rewind = rewind;
115
+ var MorphRenderWatcher = class {
116
+ #listeners = new ListenerSet();
117
+ #pass;
118
+ #element = null;
119
+ #onMorph = () => this.#pass.schedule();
120
+ constructor(run) {
121
+ this.#pass = new MicrotaskCoalescer(run);
98
122
  }
99
- /** Subscribes to `turbo:before-cache`; call from `connect()`. Idempotent. */
100
- activate() {
101
- const first = _BeforeCacheReset.#subscribers.size === 0;
102
- _BeforeCacheReset.#subscribers.add(this);
103
- if (first) {
104
- document.addEventListener("turbo:before-cache", _BeforeCacheReset.#onBeforeCache);
105
- }
123
+ observe(element) {
124
+ if (this.#element === element) return;
125
+ this.disconnect();
126
+ this.#element = element;
127
+ this.#pass.activate();
128
+ this.#listeners.add(element, "turbo:morph-element", this.#onMorph);
129
+ }
130
+ schedule() {
131
+ this.#pass.schedule();
106
132
  }
107
- /** Unsubscribes; call from `disconnect()`. Safe when never subscribed. */
108
- deactivate() {
109
- _BeforeCacheReset.#subscribers.delete(this);
110
- if (_BeforeCacheReset.#subscribers.size > 0) return;
111
- document.removeEventListener("turbo:before-cache", _BeforeCacheReset.#onBeforeCache);
133
+ disconnect() {
134
+ this.#listeners.dispose();
135
+ this.#pass.cancel();
136
+ this.#element = null;
112
137
  }
113
138
  };
114
139
 
115
- // src/utils/tabindex_loan.ts
116
- var TabindexLoan = class {
140
+ function queryOpenDescendants(root, selector) {
141
+ const matches = [];
142
+ const roots = [root];
143
+ for (const scope of roots) {
144
+ matches.push(...scope.querySelectorAll(selector));
145
+ if (scope.nodeType === Node.ELEMENT_NODE) {
146
+ const shadow = scope.shadowRoot;
147
+ if (shadow) roots.push(shadow);
148
+ }
149
+ for (const element of scope.querySelectorAll("*")) {
150
+ if (element.shadowRoot) roots.push(element.shadowRoot);
151
+ }
152
+ }
153
+ return matches;
154
+ }
155
+
156
+ function sharedRegistry(key, create) {
157
+ const symbol = Symbol.for(key);
158
+ const scope = globalThis;
159
+ const existing = scope[symbol];
160
+ if (existing !== void 0) return existing;
161
+ const registry = create();
162
+ Object.defineProperty(globalThis, symbol, { value: registry });
163
+ return registry;
164
+ }
165
+
166
+ var TabindexLoan = class _TabindexLoan {
167
+ static #registry = sharedRegistry(
168
+ "stimeo-ui.tabindex-loan.registry.v1",
169
+ () => ({ stacks: /* @__PURE__ */ new WeakMap(), names: /* @__PURE__ */ new Set() })
170
+ );
117
171
  #value;
172
+ #record;
118
173
  #lent = /* @__PURE__ */ new Set();
119
- /** Returns live loans before Turbo can copy them into its page snapshot. */
120
- #beforeCache = new BeforeCacheReset(() => this.returnAll());
121
- /**
122
- * @param value - the `tabindex` to lend. `"-1"` (the default) is
123
- * programmatically focusable but not a Tab stop; `"0"` is a real Tab stop,
124
- * which a scroll region with no focusable content of its own needs.
125
- */
126
- constructor(value = "-1") {
174
+ constructor(value, owner) {
127
175
  this.#value = value;
176
+ this.#record = `data-${owner}-tabindex-loan`;
177
+ _TabindexLoan.#registry.names.add(this.#record);
128
178
  }
129
- /** Lends `element` the value; no-ops when it already carries a `tabindex`. */
130
179
  lend(element) {
131
- if (element.hasAttribute("tabindex")) return;
132
- element.setAttribute("tabindex", this.#value);
180
+ const stack = this.#stack(element);
181
+ const current = element.getAttribute("tabindex");
182
+ const held = stack.find((hold) => hold.loan === this) ?? stack.find(
183
+ (hold) => hold.loan === null && hold.record === this.#record && hold.value === this.#value
184
+ );
185
+ const linked = stack.at(-1)?.value === current;
186
+ if (!held && current !== null && !linked) return;
133
187
  this.#lent.add(element);
134
- this.#beforeCache.activate();
188
+ if (held) held.loan = this;
189
+ else stack.push({ loan: this, record: this.#record, value: this.#value, linked });
190
+ this.#mark(element, stack);
191
+ if (current === null || !held && current !== this.#value) {
192
+ element.setAttribute("tabindex", this.#value);
193
+ }
135
194
  }
136
- /** Takes back every loan whose value is still the one that was lent. */
137
195
  returnAll() {
138
196
  for (const element of this.#lent) {
139
- if (element.getAttribute("tabindex") === this.#value) element.removeAttribute("tabindex");
197
+ const stack = this.#stack(element);
198
+ const hold = stack.find((held) => held.loan === this);
199
+ if (hold) this.#release(element, stack, hold);
140
200
  }
141
201
  this.#lent.clear();
142
- this.#beforeCache.deactivate();
202
+ }
203
+ reclaim(element) {
204
+ if (element.getAttribute(this.#record) !== this.#value) return;
205
+ const stack = this.#stack(element);
206
+ const hold = stack.find((held) => held.loan === null && held.record === this.#record);
207
+ if (hold && !element.matches(":focus")) this.#release(element, stack, hold);
208
+ }
209
+ reclaimWithin(root) {
210
+ for (const element of queryOpenDescendants(root, `[${this.#record}]`)) {
211
+ this.reclaim(element);
212
+ }
213
+ }
214
+ #stack(element) {
215
+ const stacks = _TabindexLoan.#registry.stacks;
216
+ const stack = stacks.get(element) ?? this.#seed(element);
217
+ stacks.set(element, stack);
218
+ return stack;
219
+ }
220
+ #seed(element) {
221
+ const current = element.getAttribute("tabindex");
222
+ const holds = [];
223
+ for (const record of _TabindexLoan.#registry.names) {
224
+ const value = element.getAttribute(record);
225
+ if (value !== null) holds.push({ loan: null, record, value, linked: true });
226
+ }
227
+ holds.sort((one, other) => Number(one.value === current) - Number(other.value === current));
228
+ for (const [index, hold] of holds.entries()) hold.linked = index > 0;
229
+ return holds;
230
+ }
231
+ #release(element, stack, hold) {
232
+ const current = element.getAttribute("tabindex");
233
+ const index = stack.indexOf(hold);
234
+ const owns = current === hold.value && !stack.slice(index + 1).some((above2) => above2.value === current);
235
+ stack.splice(index, 1);
236
+ const above = stack[index];
237
+ if (above) above.linked &&= hold.linked;
238
+ this.#mark(element, stack);
239
+ if (!owns) return;
240
+ const below = hold.linked ? stack[index - 1] : void 0;
241
+ if (!below) element.removeAttribute("tabindex");
242
+ else if (below.value !== current) element.setAttribute("tabindex", below.value);
243
+ }
244
+ #mark(element, stack) {
245
+ const records = /* @__PURE__ */ new Map([[this.#record, null]]);
246
+ for (const hold of stack) records.set(hold.record, hold.value);
247
+ for (const [name, recorded] of records) {
248
+ if (element.getAttribute(name) === recorded) continue;
249
+ if (recorded === null) element.removeAttribute(name);
250
+ else element.setAttribute(name, recorded);
251
+ }
143
252
  }
144
253
  };
145
254
 
146
- // src/controllers/conditional_fields_controller.ts
147
255
  var DISABLED_MARKER = "data-conditional-disabled";
256
+ var CONTROLS = "input, textarea, select, button";
148
257
  var OBSERVED_ATTRIBUTES = [
149
258
  "hidden",
150
259
  "aria-hidden",
@@ -167,19 +276,19 @@ var ConditionalFieldsController = class extends Controller {
167
276
  };
168
277
  static actions = ["evaluate"];
169
278
  static events = ["change", "reconcile"];
170
- /** Logical state last committed for each current region; rebuilt on every connect. */
171
279
  #lastVisible = /* @__PURE__ */ new WeakMap();
172
- /** Controller writes awaiting an observer callback, separated from authored morphs. */
173
280
  #internalWrites = /* @__PURE__ */ new WeakMap();
174
281
  #observing = false;
175
- /** Coalesces one target/morph/mutation batch into one full DOM reconciliation. */
176
- #reconcile = new MicrotaskCoalescer(() => this.#reconcileDom());
282
+ #departed = /* @__PURE__ */ new Set();
283
+ #concealed = /* @__PURE__ */ new WeakSet();
284
+ #reconcile = new MorphRenderWatcher(() => this.#reconcileDom());
177
285
  #listeners = new ListenerSet();
178
- /** Provides the last-resort focus landmark without claiming an authored tabindex. */
179
- #rootTabindex = new TabindexLoan();
180
- /** Watches retained targets and controls whose declarative or reflected state changed. */
286
+ #formReset = new FormResetWatcher(
287
+ (form) => this.#hasTriggerOwnedBy(form),
288
+ () => this.#reconcile.schedule()
289
+ );
290
+ #rootTabindex = new TabindexLoan("-1", this.identifier);
181
291
  #observer = new MutationObserver((records) => this.#onMutations(records));
182
- /** Evaluates only events whose source is one of this instance's live trigger targets. */
183
292
  #onTriggerInput = (event) => {
184
293
  const target = event.target;
185
294
  const triggers = this.triggerTargets;
@@ -187,25 +296,12 @@ var ConditionalFieldsController = class extends Controller {
187
296
  this.#commitChange(triggers);
188
297
  }
189
298
  };
190
- /** Reconciles property-only retained-element changes after Turbo morphs. */
191
- #onMorph = () => {
192
- this.#reconcile.schedule();
193
- };
194
- /** Reconciles the settled defaults after a non-cancelled owning form reset. */
195
- #onReset = (event) => {
196
- const form = event.target;
197
- if (form instanceof HTMLFormElement && this.#hasTriggerOwnedBy(form)) {
198
- queueMicrotask(() => {
199
- if (!event.defaultPrevented) this.#reconcile.schedule();
200
- });
201
- }
202
- };
203
- /** Reflects initial live state and opens every retained-DOM reconciliation path. */
204
299
  connect() {
300
+ this.#rootTabindex.reclaim(this.element);
205
301
  this.#lastVisible = /* @__PURE__ */ new WeakMap();
206
302
  this.#internalWrites = /* @__PURE__ */ new WeakMap();
207
- this.#reconcile.activate();
208
303
  this.#settle();
304
+ this.#reconcile.observe(this.element);
209
305
  this.#observer.observe(this.element, {
210
306
  attributes: true,
211
307
  attributeFilter: OBSERVED_ATTRIBUTES,
@@ -215,54 +311,46 @@ var ConditionalFieldsController = class extends Controller {
215
311
  this.#observing = true;
216
312
  this.#listeners.add(this.element, "change", this.#onTriggerInput);
217
313
  this.#listeners.add(this.element, "input", this.#onTriggerInput);
218
- this.#listeners.add(this.element, "turbo:morph-element", this.#onMorph);
219
- document.addEventListener("reset", this.#onReset, true);
314
+ this.#formReset.observe();
220
315
  }
221
- /** Releases all external resources and returns the temporary focus landmark loan. */
222
316
  disconnect() {
223
- this.#reconcile.cancel();
317
+ this.#reconcile.disconnect();
224
318
  this.#observing = false;
225
319
  this.#observer.disconnect();
226
320
  this.#listeners.dispose();
227
- document.removeEventListener("reset", this.#onReset, true);
321
+ this.#formReset.disconnect();
228
322
  this.#rootTabindex.returnAll();
229
323
  }
230
- /** Reconciles after a trigger target is inserted or restored. */
231
324
  triggerTargetConnected() {
232
325
  this.#reconcile.schedule();
233
326
  }
234
- /** Reconciles after a trigger target is removed or replaced. */
235
327
  triggerTargetDisconnected() {
236
328
  this.#reconcile.schedule();
237
329
  }
238
- /** Initializes a region target inserted or restored at runtime. */
239
330
  regionTargetConnected() {
240
331
  this.#reconcile.schedule();
241
332
  }
242
- /** Reconciles the remaining region set after a target leaves. */
243
- regionTargetDisconnected() {
333
+ regionTargetDisconnected(region) {
334
+ this.#departed.add(region);
244
335
  this.#reconcile.schedule();
245
336
  }
246
- /** Reconciles when application code or a morph changes the match policy. */
247
337
  matchValueChanged() {
248
338
  this.#reconcile.schedule();
249
339
  }
250
- /** Reconciles control ownership when hidden controls become enabled or excluded. */
251
340
  disableHiddenValueChanged() {
252
341
  this.#reconcile.schedule();
253
342
  }
254
- /** Re-evaluates every region and repairs all reflected DOM state. */
255
343
  evaluate() {
256
344
  this.#commitChange();
257
345
  }
258
- /**
259
- * Computes one settled plan, shows destinations before hiding sources, and then
260
- * returns logical transitions in DOM order after every region is internally coherent.
261
- */
262
346
  #settle(triggers = this.triggerTargets) {
263
347
  const regions = this.regionTargets;
264
348
  const plan = /* @__PURE__ */ new Map();
265
349
  for (const region of regions) plan.set(region, this.#isVisible(region, triggers));
350
+ for (const departed of this.#departed) {
351
+ if (!plan.has(departed)) this.#release(departed, plan);
352
+ }
353
+ this.#departed.clear();
266
354
  const changed = /* @__PURE__ */ new Set();
267
355
  const applicationOrder = [
268
356
  ...regions.filter((region) => plan.get(region) === true),
@@ -276,19 +364,16 @@ var ConditionalFieldsController = class extends Controller {
276
364
  }
277
365
  return regions.filter((region) => changed.has(region)).map((region) => ({ region, visible: plan.get(region) === true }));
278
366
  }
279
- /** Reports logical transitions caused by user input or the public action. */
280
367
  #commitChange(triggers = this.triggerTargets) {
281
368
  for (const detail of this.#settle(triggers)) {
282
369
  this.dispatch("change", { detail });
283
370
  }
284
371
  }
285
- /** Reports logical transitions derived from DOM, lifecycle, reset, or Value state. */
286
372
  #reconcileDom() {
287
373
  for (const detail of this.#settle()) {
288
374
  this.dispatch("reconcile", { detail });
289
375
  }
290
376
  }
291
- /** Applies one planned state while keeping event history separate from DOM repair. */
292
377
  #applyRegion(region, visible, plan) {
293
378
  const previous = this.#lastVisible.get(region) ?? !region.hidden;
294
379
  const changed = visible !== previous;
@@ -298,17 +383,16 @@ var ConditionalFieldsController = class extends Controller {
298
383
  this.#syncRegionControls(region, visible);
299
384
  return changed;
300
385
  }
301
- /** Reflects visibility idempotently, recording writes so the observer ignores its own work. */
302
386
  #syncRegionState(region, visible) {
387
+ if (!visible && this.#predicateFor(region) !== null) this.#concealed.add(region);
388
+ else this.#concealed.delete(region);
303
389
  this.#writeAttribute(region, "hidden", visible ? null : "");
304
390
  this.#writeAttribute(region, "aria-hidden", visible ? null : "true");
305
391
  this.#writeAttribute(region, "data-visible", visible ? "true" : null);
306
392
  }
307
- /** Enables/disables descendant controls, touching only state carrying our marker. */
308
393
  #syncRegionControls(region, visible) {
309
394
  const shouldDisable = !visible && this.disableHiddenValue;
310
- const controls = region.querySelectorAll("input, textarea, select, button");
311
- for (const control of controls) {
395
+ for (const control of region.querySelectorAll(CONTROLS)) {
312
396
  const marked = control.hasAttribute(DISABLED_MARKER);
313
397
  if (shouldDisable) {
314
398
  if (!control.disabled) {
@@ -318,18 +402,30 @@ var ConditionalFieldsController = class extends Controller {
318
402
  this.#writeAttribute(control, DISABLED_MARKER, "true");
319
403
  }
320
404
  } else if (marked) {
321
- this.#writeAttribute(control, "disabled", null);
322
- this.#writeAttribute(control, DISABLED_MARKER, null);
405
+ this.#enable(control);
406
+ }
407
+ }
408
+ }
409
+ #enable(control) {
410
+ this.#writeAttribute(control, "disabled", null);
411
+ this.#writeAttribute(control, DISABLED_MARKER, null);
412
+ }
413
+ #release(element, plan) {
414
+ this.#lastVisible.delete(element);
415
+ if (this.#concealed.delete(element)) this.#writeAttribute(element, "hidden", null);
416
+ this.#writeAttribute(element, "aria-hidden", null);
417
+ this.#writeAttribute(element, "data-visible", null);
418
+ for (const control of element.querySelectorAll(CONTROLS)) {
419
+ if (control.hasAttribute(DISABLED_MARKER) && this.#survivesPlan(control, plan)) {
420
+ this.#enable(control);
323
421
  }
324
422
  }
325
423
  }
326
- /** Whether a region's declared condition holds across `triggers` per `match`. */
327
424
  #isVisible(region, triggers) {
328
425
  const predicate = this.#predicateFor(region);
329
426
  if (predicate === null) return !region.hidden;
330
427
  return triggers.length > 0 && (this.matchValue === "all" ? triggers.every(predicate) : triggers.some(predicate));
331
428
  }
332
- /** Builds the deterministic per-trigger predicate from the region's condition. */
333
429
  #predicateFor(region) {
334
430
  if (region.hasAttribute("data-when-checked")) {
335
431
  return (trigger) => this.#isChecked(trigger);
@@ -346,19 +442,16 @@ var ConditionalFieldsController = class extends Controller {
346
442
  #isChecked(trigger) {
347
443
  return trigger instanceof HTMLInputElement && trigger.checked;
348
444
  }
349
- /** A trigger has a value when a radio/checkbox is selected, or its control value matches. */
350
445
  #matchesValue(trigger, wanted) {
351
446
  if (trigger instanceof HTMLInputElement && (trigger.type === "checkbox" || trigger.type === "radio")) {
352
447
  return trigger.checked && trigger.value === wanted;
353
448
  }
354
449
  return trigger.value === wanted;
355
450
  }
356
- /** Moves focus to the first safe trigger, or to the controller landmark as a fallback. */
357
451
  #retreatFocus(region, plan) {
358
452
  const active = document.activeElement;
359
453
  if (active && region.contains(active)) this.#moveFocus(plan);
360
454
  }
361
- /** Moves focus after the caller establishes that the active node is being hidden. */
362
455
  #moveFocus(plan) {
363
456
  const destination = this.triggerTargets.find(
364
457
  (trigger) => canTakeFocus(trigger) && this.#survivesPlan(trigger, plan)
@@ -371,11 +464,9 @@ var ConditionalFieldsController = class extends Controller {
371
464
  this.#rootTabindex.lend(this.element);
372
465
  this.element.focus();
373
466
  }
374
- /** Whether a focus candidate sits outside every region this pass will hide. */
375
467
  #survivesPlan(candidate, plan) {
376
468
  return [...plan].every(([region, visible]) => visible || !region.contains(candidate));
377
469
  }
378
- /** Records one idempotent attribute write before MutationObserver sees it. */
379
470
  #writeAttribute(element, name, value) {
380
471
  if (element.getAttribute(name) !== value) {
381
472
  if (this.#observing) {
@@ -390,7 +481,6 @@ var ConditionalFieldsController = class extends Controller {
390
481
  else element.setAttribute(name, value);
391
482
  }
392
483
  }
393
- /** Separates authored records from controller writes and queues one relevant repair. */
394
484
  #onMutations(records) {
395
485
  const triggers = this.triggerTargets;
396
486
  const regions = this.regionTargets;
@@ -420,16 +510,13 @@ var ConditionalFieldsController = class extends Controller {
420
510
  }
421
511
  if (needsReconcile) this.#reconcile.schedule();
422
512
  }
423
- /** Whether an authored mutation target belongs to a trigger, region, or managed control. */
424
513
  #elementAffectsState(target, triggers, regions) {
425
514
  return ownerIndex(triggers, target) !== -1 || ownerIndex(regions, target) !== -1;
426
515
  }
427
- /** Whether a form owns at least one current trigger, including `form=` associations. */
428
516
  #hasTriggerOwnedBy(form) {
429
517
  return this.triggerTargets.some((trigger) => trigger.form === form);
430
518
  }
431
519
  };
432
520
 
433
521
  export { ConditionalFieldsController };
434
- //# sourceMappingURL=conditional_fields_controller.js.map
435
522
  //# sourceMappingURL=conditional_fields_controller.js.map