stimeo-ui 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/CHANGELOG.md +106 -1
  2. package/README.md +19 -10
  3. package/dist/cable/index.d.ts +9 -8
  4. package/dist/cable/index.js +22 -14
  5. package/dist/cable/index.js.map +1 -1
  6. package/dist/coerce-JtZVNG5h.d.ts +20 -0
  7. package/dist/controllers/accordion_controller.js +14 -6
  8. package/dist/controllers/accordion_controller.js.map +1 -1
  9. package/dist/controllers/alert_dialog_controller.js +145 -118
  10. package/dist/controllers/alert_dialog_controller.js.map +1 -1
  11. package/dist/controllers/announcer_controller.d.ts +5 -3
  12. package/dist/controllers/announcer_controller.js +113 -17
  13. package/dist/controllers/announcer_controller.js.map +1 -1
  14. package/dist/controllers/auto_submit_controller.js +185 -60
  15. package/dist/controllers/auto_submit_controller.js.map +1 -1
  16. package/dist/controllers/avatar_controller.js +55 -43
  17. package/dist/controllers/avatar_controller.js.map +1 -1
  18. package/dist/controllers/breadcrumb_controller.js.map +1 -1
  19. package/dist/controllers/bulk_select_controller.d.ts +3 -3
  20. package/dist/controllers/bulk_select_controller.js +64 -50
  21. package/dist/controllers/bulk_select_controller.js.map +1 -1
  22. package/dist/controllers/calendar_controller.d.ts +15 -12
  23. package/dist/controllers/calendar_controller.js +55 -53
  24. package/dist/controllers/calendar_controller.js.map +1 -1
  25. package/dist/controllers/carousel_controller.d.ts +9 -5
  26. package/dist/controllers/carousel_controller.js +124 -86
  27. package/dist/controllers/carousel_controller.js.map +1 -1
  28. package/dist/controllers/character_counter_controller.d.ts +27 -6
  29. package/dist/controllers/character_counter_controller.js +291 -95
  30. package/dist/controllers/character_counter_controller.js.map +1 -1
  31. package/dist/controllers/checkbox_controller.js +6 -0
  32. package/dist/controllers/checkbox_controller.js.map +1 -1
  33. package/dist/controllers/clipboard_controller.js +118 -27
  34. package/dist/controllers/clipboard_controller.js.map +1 -1
  35. package/dist/controllers/collapsible_controller.d.ts +1 -1
  36. package/dist/controllers/collapsible_controller.js +52 -49
  37. package/dist/controllers/collapsible_controller.js.map +1 -1
  38. package/dist/controllers/color_picker_controller.js +29 -7
  39. package/dist/controllers/color_picker_controller.js.map +1 -1
  40. package/dist/controllers/combobox_controller.d.ts +1 -1
  41. package/dist/controllers/combobox_controller.js +210 -71
  42. package/dist/controllers/combobox_controller.js.map +1 -1
  43. package/dist/controllers/command_palette_controller.d.ts +9 -9
  44. package/dist/controllers/command_palette_controller.js +289 -140
  45. package/dist/controllers/command_palette_controller.js.map +1 -1
  46. package/dist/controllers/conditional_fields_controller.js +145 -58
  47. package/dist/controllers/conditional_fields_controller.js.map +1 -1
  48. package/dist/controllers/confirm_controller.js +145 -118
  49. package/dist/controllers/confirm_controller.js.map +1 -1
  50. package/dist/controllers/context_menu_controller.d.ts +49 -14
  51. package/dist/controllers/context_menu_controller.js +138 -73
  52. package/dist/controllers/context_menu_controller.js.map +1 -1
  53. package/dist/controllers/count_up_controller.js.map +1 -1
  54. package/dist/controllers/countdown_controller.d.ts +2 -2
  55. package/dist/controllers/countdown_controller.js +109 -21
  56. package/dist/controllers/countdown_controller.js.map +1 -1
  57. package/dist/controllers/currency_input_controller.d.ts +75 -11
  58. package/dist/controllers/currency_input_controller.js +446 -72
  59. package/dist/controllers/currency_input_controller.js.map +1 -1
  60. package/dist/controllers/data_grid_controller.d.ts +10 -8
  61. package/dist/controllers/data_grid_controller.js +134 -28
  62. package/dist/controllers/data_grid_controller.js.map +1 -1
  63. package/dist/controllers/date_range_picker_controller.d.ts +12 -9
  64. package/dist/controllers/date_range_picker_controller.js +93 -72
  65. package/dist/controllers/date_range_picker_controller.js.map +1 -1
  66. package/dist/controllers/dialog_controller.d.ts +4 -5
  67. package/dist/controllers/dialog_controller.js +145 -118
  68. package/dist/controllers/dialog_controller.js.map +1 -1
  69. package/dist/controllers/direct_upload_controller.d.ts +1 -1
  70. package/dist/controllers/direct_upload_controller.js +24 -14
  71. package/dist/controllers/direct_upload_controller.js.map +1 -1
  72. package/dist/controllers/dirty_form_controller.d.ts +6 -1
  73. package/dist/controllers/dirty_form_controller.js +68 -31
  74. package/dist/controllers/dirty_form_controller.js.map +1 -1
  75. package/dist/controllers/dismissible_controller.js +64 -46
  76. package/dist/controllers/dismissible_controller.js.map +1 -1
  77. package/dist/controllers/drawer_controller.js +145 -118
  78. package/dist/controllers/drawer_controller.js.map +1 -1
  79. package/dist/controllers/dropdown_controller.js +76 -63
  80. package/dist/controllers/dropdown_controller.js.map +1 -1
  81. package/dist/controllers/editable_controller.js +199 -62
  82. package/dist/controllers/editable_controller.js.map +1 -1
  83. package/dist/controllers/empty_state_controller.js +13 -6
  84. package/dist/controllers/empty_state_controller.js.map +1 -1
  85. package/dist/controllers/file_dropzone_controller.d.ts +3 -0
  86. package/dist/controllers/file_dropzone_controller.js +55 -48
  87. package/dist/controllers/file_dropzone_controller.js.map +1 -1
  88. package/dist/controllers/filter_controller.js +9 -2
  89. package/dist/controllers/filter_controller.js.map +1 -1
  90. package/dist/controllers/flash_controller.d.ts +4 -4
  91. package/dist/controllers/flash_controller.js +66 -33
  92. package/dist/controllers/flash_controller.js.map +1 -1
  93. package/dist/controllers/focus_controller.d.ts +3 -3
  94. package/dist/controllers/focus_controller.js +39 -14
  95. package/dist/controllers/focus_controller.js.map +1 -1
  96. package/dist/controllers/form_field_controller.js +52 -43
  97. package/dist/controllers/form_field_controller.js.map +1 -1
  98. package/dist/controllers/form_validation_controller.d.ts +3 -3
  99. package/dist/controllers/form_validation_controller.js +18 -11
  100. package/dist/controllers/form_validation_controller.js.map +1 -1
  101. package/dist/controllers/frame_loading_controller.d.ts +13 -12
  102. package/dist/controllers/frame_loading_controller.js +55 -48
  103. package/dist/controllers/frame_loading_controller.js.map +1 -1
  104. package/dist/controllers/highlight_controller.d.ts +5 -4
  105. package/dist/controllers/highlight_controller.js.map +1 -1
  106. package/dist/controllers/hover_card_controller.d.ts +4 -1
  107. package/dist/controllers/hover_card_controller.js +67 -61
  108. package/dist/controllers/hover_card_controller.js.map +1 -1
  109. package/dist/controllers/idle_controller.d.ts +6 -5
  110. package/dist/controllers/idle_controller.js +10 -6
  111. package/dist/controllers/idle_controller.js.map +1 -1
  112. package/dist/controllers/input_mask_controller.d.ts +30 -13
  113. package/dist/controllers/input_mask_controller.js +411 -24
  114. package/dist/controllers/input_mask_controller.js.map +1 -1
  115. package/dist/controllers/intersection_controller.js +3 -0
  116. package/dist/controllers/intersection_controller.js.map +1 -1
  117. package/dist/controllers/lazy_frame_controller.d.ts +3 -2
  118. package/dist/controllers/lazy_frame_controller.js +15 -3
  119. package/dist/controllers/lazy_frame_controller.js.map +1 -1
  120. package/dist/controllers/listbox_controller.d.ts +10 -7
  121. package/dist/controllers/listbox_controller.js +260 -79
  122. package/dist/controllers/listbox_controller.js.map +1 -1
  123. package/dist/controllers/local_time_controller.d.ts +8 -6
  124. package/dist/controllers/local_time_controller.js +48 -13
  125. package/dist/controllers/local_time_controller.js.map +1 -1
  126. package/dist/controllers/masonry_controller.js +11 -4
  127. package/dist/controllers/masonry_controller.js.map +1 -1
  128. package/dist/controllers/menu_controller.d.ts +24 -5
  129. package/dist/controllers/menu_controller.js +138 -82
  130. package/dist/controllers/menu_controller.js.map +1 -1
  131. package/dist/controllers/menubar_controller.d.ts +49 -7
  132. package/dist/controllers/menubar_controller.js +65 -19
  133. package/dist/controllers/menubar_controller.js.map +1 -1
  134. package/dist/controllers/meter_controller.d.ts +13 -20
  135. package/dist/controllers/meter_controller.js +270 -24
  136. package/dist/controllers/meter_controller.js.map +1 -1
  137. package/dist/controllers/multi_select_controller.d.ts +17 -15
  138. package/dist/controllers/multi_select_controller.js +251 -94
  139. package/dist/controllers/multi_select_controller.js.map +1 -1
  140. package/dist/controllers/navigation_menu_controller.d.ts +19 -5
  141. package/dist/controllers/navigation_menu_controller.js +67 -19
  142. package/dist/controllers/navigation_menu_controller.js.map +1 -1
  143. package/dist/controllers/nested_form_controller.js +98 -64
  144. package/dist/controllers/nested_form_controller.js.map +1 -1
  145. package/dist/controllers/network_status_controller.js +70 -52
  146. package/dist/controllers/network_status_controller.js.map +1 -1
  147. package/dist/controllers/number_input_controller.d.ts +24 -6
  148. package/dist/controllers/number_input_controller.js +344 -94
  149. package/dist/controllers/number_input_controller.js.map +1 -1
  150. package/dist/controllers/optimistic_controller.d.ts +8 -5
  151. package/dist/controllers/optimistic_controller.js +29 -11
  152. package/dist/controllers/optimistic_controller.js.map +1 -1
  153. package/dist/controllers/otp_controller.d.ts +35 -4
  154. package/dist/controllers/otp_controller.js +502 -104
  155. package/dist/controllers/otp_controller.js.map +1 -1
  156. package/dist/controllers/overflow_indicator_controller.js +6 -0
  157. package/dist/controllers/overflow_indicator_controller.js.map +1 -1
  158. package/dist/controllers/overflow_menu_controller.d.ts +10 -9
  159. package/dist/controllers/overflow_menu_controller.js +136 -21
  160. package/dist/controllers/overflow_menu_controller.js.map +1 -1
  161. package/dist/controllers/pagination_controller.d.ts +3 -2
  162. package/dist/controllers/pagination_controller.js +47 -14
  163. package/dist/controllers/pagination_controller.js.map +1 -1
  164. package/dist/controllers/password_reveal_controller.d.ts +5 -4
  165. package/dist/controllers/password_reveal_controller.js +52 -49
  166. package/dist/controllers/password_reveal_controller.js.map +1 -1
  167. package/dist/controllers/password_strength_controller.d.ts +1 -1
  168. package/dist/controllers/password_strength_controller.js +13 -6
  169. package/dist/controllers/password_strength_controller.js.map +1 -1
  170. package/dist/controllers/persist_controller.js +48 -128
  171. package/dist/controllers/persist_controller.js.map +1 -1
  172. package/dist/controllers/pointer_drag_controller.d.ts +19 -8
  173. package/dist/controllers/pointer_drag_controller.js +249 -23
  174. package/dist/controllers/pointer_drag_controller.js.map +1 -1
  175. package/dist/controllers/popover_controller.d.ts +3 -3
  176. package/dist/controllers/popover_controller.js +82 -65
  177. package/dist/controllers/popover_controller.js.map +1 -1
  178. package/dist/controllers/portal_controller.js +6 -0
  179. package/dist/controllers/portal_controller.js.map +1 -1
  180. package/dist/controllers/preview_guard_controller.js +14 -3
  181. package/dist/controllers/preview_guard_controller.js.map +1 -1
  182. package/dist/controllers/progress_controller.d.ts +9 -19
  183. package/dist/controllers/progress_controller.js +271 -27
  184. package/dist/controllers/progress_controller.js.map +1 -1
  185. package/dist/controllers/radio_group_controller.d.ts +11 -8
  186. package/dist/controllers/radio_group_controller.js +167 -80
  187. package/dist/controllers/radio_group_controller.js.map +1 -1
  188. package/dist/controllers/range_slider_controller.d.ts +4 -3
  189. package/dist/controllers/range_slider_controller.js +27 -7
  190. package/dist/controllers/range_slider_controller.js.map +1 -1
  191. package/dist/controllers/rating_controller.js +93 -57
  192. package/dist/controllers/rating_controller.js.map +1 -1
  193. package/dist/controllers/read_more_controller.js +10 -6
  194. package/dist/controllers/read_more_controller.js.map +1 -1
  195. package/dist/controllers/reading_progress_controller.js +22 -5
  196. package/dist/controllers/reading_progress_controller.js.map +1 -1
  197. package/dist/controllers/relative_time_controller.d.ts +4 -4
  198. package/dist/controllers/relative_time_controller.js +75 -11
  199. package/dist/controllers/relative_time_controller.js.map +1 -1
  200. package/dist/controllers/reset_on_restore_controller.d.ts +3 -3
  201. package/dist/controllers/reset_on_restore_controller.js +6 -0
  202. package/dist/controllers/reset_on_restore_controller.js.map +1 -1
  203. package/dist/controllers/resizable_controller.d.ts +3 -0
  204. package/dist/controllers/resizable_controller.js +55 -22
  205. package/dist/controllers/resizable_controller.js.map +1 -1
  206. package/dist/controllers/roving_controller.d.ts +3 -3
  207. package/dist/controllers/roving_controller.js +10 -4
  208. package/dist/controllers/roving_controller.js.map +1 -1
  209. package/dist/controllers/scroll_area_controller.js +129 -88
  210. package/dist/controllers/scroll_area_controller.js.map +1 -1
  211. package/dist/controllers/scroll_restore_controller.d.ts +3 -3
  212. package/dist/controllers/scroll_restore_controller.js +14 -2
  213. package/dist/controllers/scroll_restore_controller.js.map +1 -1
  214. package/dist/controllers/scroll_visibility_controller.js +93 -60
  215. package/dist/controllers/scroll_visibility_controller.js.map +1 -1
  216. package/dist/controllers/scrollspy_controller.js +11 -5
  217. package/dist/controllers/scrollspy_controller.js.map +1 -1
  218. package/dist/controllers/separator_controller.d.ts +1 -1
  219. package/dist/controllers/separator_controller.js +59 -43
  220. package/dist/controllers/separator_controller.js.map +1 -1
  221. package/dist/controllers/sidebar_controller.d.ts +1 -1
  222. package/dist/controllers/sidebar_controller.js +150 -122
  223. package/dist/controllers/sidebar_controller.js.map +1 -1
  224. package/dist/controllers/skeleton_controller.js +55 -48
  225. package/dist/controllers/skeleton_controller.js.map +1 -1
  226. package/dist/controllers/slider_controller.d.ts +2 -1
  227. package/dist/controllers/slider_controller.js +27 -6
  228. package/dist/controllers/slider_controller.js.map +1 -1
  229. package/dist/controllers/smart_sticky_header_controller.d.ts +1 -1
  230. package/dist/controllers/smart_sticky_header_controller.js +13 -5
  231. package/dist/controllers/smart_sticky_header_controller.js.map +1 -1
  232. package/dist/controllers/sortable_controller.d.ts +4 -4
  233. package/dist/controllers/sortable_controller.js +27 -14
  234. package/dist/controllers/sortable_controller.js.map +1 -1
  235. package/dist/controllers/spinner_controller.js +55 -48
  236. package/dist/controllers/spinner_controller.js.map +1 -1
  237. package/dist/controllers/step_indicator_controller.d.ts +4 -4
  238. package/dist/controllers/step_indicator_controller.js +6 -0
  239. package/dist/controllers/step_indicator_controller.js.map +1 -1
  240. package/dist/controllers/stepper_controller.d.ts +2 -3
  241. package/dist/controllers/stepper_controller.js +6 -0
  242. package/dist/controllers/stepper_controller.js.map +1 -1
  243. package/dist/controllers/stick_to_bottom_controller.d.ts +3 -1
  244. package/dist/controllers/stick_to_bottom_controller.js +19 -8
  245. package/dist/controllers/stick_to_bottom_controller.js.map +1 -1
  246. package/dist/controllers/sticky_observer_controller.js +49 -43
  247. package/dist/controllers/sticky_observer_controller.js.map +1 -1
  248. package/dist/controllers/submit_once_controller.d.ts +2 -1
  249. package/dist/controllers/submit_once_controller.js +145 -85
  250. package/dist/controllers/submit_once_controller.js.map +1 -1
  251. package/dist/controllers/switch_controller.d.ts +7 -4
  252. package/dist/controllers/switch_controller.js +172 -28
  253. package/dist/controllers/switch_controller.js.map +1 -1
  254. package/dist/controllers/tabs_controller.d.ts +7 -4
  255. package/dist/controllers/tabs_controller.js +6 -1
  256. package/dist/controllers/tabs_controller.js.map +1 -1
  257. package/dist/controllers/tags_input_controller.d.ts +4 -3
  258. package/dist/controllers/tags_input_controller.js +157 -28
  259. package/dist/controllers/tags_input_controller.js.map +1 -1
  260. package/dist/controllers/textarea_autosize_controller.d.ts +1 -1
  261. package/dist/controllers/textarea_autosize_controller.js +40 -19
  262. package/dist/controllers/textarea_autosize_controller.js.map +1 -1
  263. package/dist/controllers/theme_controller.d.ts +3 -2
  264. package/dist/controllers/theme_controller.js +10 -4
  265. package/dist/controllers/theme_controller.js.map +1 -1
  266. package/dist/controllers/time_picker_controller.d.ts +38 -5
  267. package/dist/controllers/time_picker_controller.js +192 -54
  268. package/dist/controllers/time_picker_controller.js.map +1 -1
  269. package/dist/controllers/toast_controller.d.ts +4 -5
  270. package/dist/controllers/toast_controller.js +58 -27
  271. package/dist/controllers/toast_controller.js.map +1 -1
  272. package/dist/controllers/toggle_group_controller.d.ts +2 -3
  273. package/dist/controllers/toggle_group_controller.js +158 -56
  274. package/dist/controllers/toggle_group_controller.js.map +1 -1
  275. package/dist/controllers/toolbar_controller.d.ts +8 -6
  276. package/dist/controllers/toolbar_controller.js +150 -21
  277. package/dist/controllers/toolbar_controller.js.map +1 -1
  278. package/dist/controllers/tooltip_controller.d.ts +4 -1
  279. package/dist/controllers/tooltip_controller.js.map +1 -1
  280. package/dist/controllers/transition_controller.js.map +1 -1
  281. package/dist/controllers/tree_view_controller.d.ts +1 -1
  282. package/dist/controllers/tree_view_controller.js +134 -25
  283. package/dist/controllers/tree_view_controller.js.map +1 -1
  284. package/dist/index.d.ts +2 -0
  285. package/dist/index.js +2451 -1312
  286. package/dist/index.js.map +1 -1
  287. package/dist/inspector/cli.d.ts +15 -11
  288. package/dist/inspector/cli.js +16 -3
  289. package/dist/inspector/cli.js.map +1 -1
  290. package/dist/inspector/cli_bin.js +53 -8
  291. package/dist/inspector/cli_bin.js.map +1 -1
  292. package/dist/inspector/examples.json +13 -13
  293. package/dist/inspector/manifest.json +19 -5
  294. package/dist/positioning/index.d.ts +7 -7
  295. package/dist/positioning/index.js +6 -0
  296. package/dist/positioning/index.js.map +1 -1
  297. package/package.json +10 -9
@@ -36,6 +36,104 @@ function isReservedArrowChord(event, allow = []) {
36
36
  return event.altKey && !allow.includes("alt") || event.ctrlKey && !allow.includes("ctrl") || event.metaKey && !allow.includes("meta") || event.shiftKey && !allow.includes("shift");
37
37
  }
38
38
 
39
+ function setAttributeIfChanged(element, name, value, beforeWrite) {
40
+ if (element.getAttribute(name) === value) return false;
41
+ beforeWrite?.();
42
+ if (value === null) element.removeAttribute(name);
43
+ else element.setAttribute(name, value);
44
+ return true;
45
+ }
46
+
47
+ var AuthoredMutationWatcher = class {
48
+ #onAuthored;
49
+ #claims = null;
50
+ #observer = null;
51
+ constructor(onAuthored) {
52
+ this.#onAuthored = onAuthored;
53
+ }
54
+ observe(root, options) {
55
+ this.disconnect();
56
+ const observer = new MutationObserver((records) => {
57
+ if (this.#observer !== observer) return;
58
+ const authored = this.#filter(records);
59
+ if (authored.length > 0) this.#onAuthored(authored);
60
+ });
61
+ this.#observer = observer;
62
+ this.#claims = { attributes: /* @__PURE__ */ new Map(), children: /* @__PURE__ */ new Map() };
63
+ observer.observe(root, {
64
+ attributes: true,
65
+ attributeFilter: [...options.attributes],
66
+ subtree: options.subtree ?? false,
67
+ childList: options.childList ?? false
68
+ });
69
+ if (options.ancestorAttributes) {
70
+ let ancestor = root.parentElement;
71
+ while (ancestor) {
72
+ observer.observe(ancestor, {
73
+ attributes: true,
74
+ attributeFilter: [...options.ancestorAttributes]
75
+ });
76
+ ancestor = ancestor.parentElement;
77
+ }
78
+ }
79
+ }
80
+ claim(target, name, value) {
81
+ const claims = this.#claims?.attributes;
82
+ let attributes = claims?.get(target);
83
+ if (!attributes) {
84
+ attributes = /* @__PURE__ */ new Map();
85
+ claims?.set(target, attributes);
86
+ }
87
+ const pending = attributes.get(name);
88
+ attributes.set(name, { value, count: (pending?.count ?? 0) + 1 });
89
+ }
90
+ claimCurrent(target, name) {
91
+ this.claim(target, name, target.getAttribute(name));
92
+ }
93
+ claimChildList(target, added, removed) {
94
+ const claims = this.#claims?.children;
95
+ const pending = claims?.get(target) ?? { added: /* @__PURE__ */ new Map(), removed: /* @__PURE__ */ new Map() };
96
+ for (const node of added) pending.added.set(node, (pending.added.get(node) ?? 0) + 1);
97
+ for (const node of removed) pending.removed.set(node, (pending.removed.get(node) ?? 0) + 1);
98
+ claims?.set(target, pending);
99
+ }
100
+ take() {
101
+ return this.#filter(this.#observer?.takeRecords() ?? []);
102
+ }
103
+ disconnect() {
104
+ this.#observer?.disconnect();
105
+ this.#observer = null;
106
+ this.#claims = null;
107
+ }
108
+ #filter(records) {
109
+ const authored = records.filter((record) => !this.#consume(record));
110
+ this.#claims?.attributes.clear();
111
+ this.#claims?.children.clear();
112
+ return authored;
113
+ }
114
+ #consume(record) {
115
+ if (record.type === "attributes") {
116
+ const target = record.target;
117
+ const pending2 = this.#claims?.attributes.get(target)?.get(record.attributeName);
118
+ if (!pending2 || pending2.count === 0 || target.getAttribute(record.attributeName) !== pending2.value) {
119
+ return false;
120
+ }
121
+ pending2.count -= 1;
122
+ return true;
123
+ }
124
+ const pending = this.#claims?.children.get(record.target);
125
+ if (!pending) return false;
126
+ const added = [...record.addedNodes];
127
+ const removed = [...record.removedNodes];
128
+ if (added.some((node) => !pending.added.get(node)) || removed.some((node) => !pending.removed.get(node))) {
129
+ return false;
130
+ }
131
+ for (const node of added) pending.added.set(node, (pending.added.get(node) ?? 0) - 1);
132
+ for (const node of removed) pending.removed.set(node, (pending.removed.get(node) ?? 0) - 1);
133
+ return true;
134
+ }
135
+ };
136
+
39
137
  function writeFields(container, values, { name, form = "" }) {
40
138
  const current = [...container.children];
41
139
  const submits = current.length === values.length && current.every(
@@ -101,6 +199,9 @@ var MicrotaskCoalescer = class {
101
199
  this.#queued = false;
102
200
  this.#generation += 1;
103
201
  }
202
+ get pending() {
203
+ return this.#queued;
204
+ }
104
205
  schedule() {
105
206
  if (!this.#active || this.#queued) return;
106
207
  this.#queued = true;
@@ -131,6 +232,9 @@ var MorphRenderWatcher = class {
131
232
  schedule() {
132
233
  this.#pass.schedule();
133
234
  }
235
+ get pending() {
236
+ return this.#pass.pending;
237
+ }
134
238
  disconnect() {
135
239
  this.#listeners.dispose();
136
240
  this.#pass.cancel();
@@ -155,9 +259,6 @@ function targetSelector(identifier, name) {
155
259
 
156
260
  var SORT_CYCLE = ["none", "ascending", "descending"];
157
261
  var OBSERVED_ATTRIBUTES = ["aria-selected", "data-value"];
158
- function setAttributeIfChanged(element, name, value) {
159
- if (element.getAttribute(name) !== value) element.setAttribute(name, value);
160
- }
161
262
  function sameSelection(a, b) {
162
263
  if (a.size !== b.size) return false;
163
264
  for (const [row, value] of a) {
@@ -172,6 +273,7 @@ function nextSortDirection(current) {
172
273
  }
173
274
  var DataGridController = class extends Controller {
174
275
  #moves = new MoveCounter();
276
+ #connectionGeneration = 0;
175
277
  #stopHolder = null;
176
278
  static targets = ["columnHeader", "row", "cell", "fields"];
177
279
  static values = {
@@ -182,7 +284,9 @@ var DataGridController = class extends Controller {
182
284
  static actions = ["onKeydown", "sort", "toggleSelect"];
183
285
  static events = ["selectionchange", "sort", "reconcile"];
184
286
  #reconcile = new MorphRenderWatcher(() => this.#reconcileRows());
185
- #observer = null;
287
+ #observer = new AuthoredMutationWatcher((records) => {
288
+ if (this.#concernsRows(records)) this.#reconcile.schedule();
289
+ });
186
290
  #settled = /* @__PURE__ */ new Map();
187
291
  connect() {
188
292
  this.#restoreBaseline();
@@ -191,9 +295,9 @@ var DataGridController = class extends Controller {
191
295
  this.#observeRows();
192
296
  }
193
297
  disconnect() {
298
+ this.#connectionGeneration += 1;
194
299
  this.#reconcile.disconnect();
195
- this.#observer?.disconnect();
196
- this.#observer = null;
300
+ this.#observer.disconnect();
197
301
  }
198
302
  #restoreBaseline() {
199
303
  const cells = this.#navigableCells();
@@ -204,7 +308,7 @@ var DataGridController = class extends Controller {
204
308
  this.#syncSelectable();
205
309
  const pageWrote = this.#takePageRecords();
206
310
  this.#normalizeSelection();
207
- this.#dropOwnRecords(pageWrote);
311
+ this.#flushMutations(pageWrote);
208
312
  this.#mirrorFields(false);
209
313
  }
210
314
  #reconcileRows() {
@@ -253,16 +357,16 @@ var DataGridController = class extends Controller {
253
357
  #normalizeSelection() {
254
358
  const rows = this.rowTargets;
255
359
  if (this.selectionValue === "none") {
256
- for (const row of rows) row.removeAttribute("aria-selected");
360
+ for (const row of rows) this.#writeSelection(row, null);
257
361
  return;
258
362
  }
259
363
  const single = this.selectionValue === "single";
260
364
  const first = rows.find((row) => row.getAttribute("aria-selected") === "true");
261
365
  for (const row of rows) {
262
366
  if (single) {
263
- setAttributeIfChanged(row, "aria-selected", row === first ? "true" : "false");
367
+ this.#writeSelection(row, row === first ? "true" : "false");
264
368
  } else if (row.getAttribute("aria-selected") !== "true") {
265
- setAttributeIfChanged(row, "aria-selected", "false");
369
+ this.#writeSelection(row, "false");
266
370
  }
267
371
  }
268
372
  }
@@ -303,6 +407,9 @@ var DataGridController = class extends Controller {
303
407
  if (event.defaultPrevented) return;
304
408
  if (isReservedArrowChord(event)) return;
305
409
  if (event.isComposing) return;
410
+ if ((event.key === "Home" || event.key === "End") && (event.altKey || event.metaKey || event.shiftKey)) {
411
+ return;
412
+ }
306
413
  const cell = event.currentTarget;
307
414
  if (this.#claimedByDescendant(event, cell)) return;
308
415
  const matrix = this.#matrix();
@@ -369,15 +476,16 @@ var DataGridController = class extends Controller {
369
476
  this.dispatch("sort", { detail: { column: header, direction, reason: "user" } });
370
477
  }
371
478
  #toggleRow(row, reason = "user") {
479
+ const generation = this.#connectionGeneration;
372
480
  const selected = row.getAttribute("aria-selected") === "true";
373
481
  const pageWrote = this.#takePageRecords();
374
482
  if (this.selectionValue === "single") {
375
483
  for (const other of this.rowTargets) {
376
- if (other !== row) setAttributeIfChanged(other, "aria-selected", "false");
484
+ if (other !== row) this.#writeSelection(other, "false");
377
485
  }
378
486
  }
379
- row.setAttribute("aria-selected", selected ? "false" : "true");
380
- this.#dropOwnRecords(pageWrote);
487
+ this.#writeSelection(row, selected ? "false" : "true");
488
+ this.#flushMutations(pageWrote);
381
489
  const selection = this.#selection();
382
490
  const changed = !sameSelection(selection, this.#settled);
383
491
  this.#settled = selection;
@@ -387,7 +495,7 @@ var DataGridController = class extends Controller {
387
495
  }
388
496
  const token = this.#moves.record();
389
497
  this.#mirrorFields(true);
390
- if (!this.#moves.isLatest(token)) return;
498
+ if (generation !== this.#connectionGeneration || !this.#moves.isLatest(token)) return;
391
499
  this.dispatch("selectionchange", { detail: { rows: [...selection.keys()], reason } });
392
500
  }
393
501
  #selection() {
@@ -396,27 +504,22 @@ var DataGridController = class extends Controller {
396
504
  );
397
505
  }
398
506
  #observeRows() {
399
- const observer = new MutationObserver((records) => {
400
- if (this.#concernsRows(records)) this.#reconcile.schedule();
401
- });
402
- observer.observe(this.element, {
507
+ this.#observer.observe(this.element, {
403
508
  subtree: true,
404
- attributes: true,
405
- attributeFilter: OBSERVED_ATTRIBUTES
509
+ attributes: OBSERVED_ATTRIBUTES
406
510
  });
407
- this.#observer = observer;
408
511
  }
409
512
  #takePageRecords() {
410
- const records = this.#observer?.takeRecords() ?? [];
513
+ const records = this.#observer.take();
411
514
  return records.length > 0 && this.#concernsRows(records);
412
515
  }
413
516
  #concernsRows(records) {
414
517
  const rows = new Set(this.rowTargets);
415
518
  return records.some((record) => rows.has(record.target));
416
519
  }
417
- #dropOwnRecords(pageWrote) {
418
- this.#observer?.takeRecords();
419
- if (pageWrote) this.#reconcile.schedule();
520
+ #flushMutations(pageWrote) {
521
+ const authored = this.#concernsRows(this.#observer.take());
522
+ if (pageWrote || authored) this.#reconcile.schedule();
420
523
  }
421
524
  #mirrorFields(notify) {
422
525
  if (!this.hasFieldsTarget) return;
@@ -430,9 +533,7 @@ var DataGridController = class extends Controller {
430
533
  this.#stopHolder = cell;
431
534
  for (const candidate of cells ?? this.#navigableCells()) {
432
535
  const wanted = candidate === cell ? "0" : "-1";
433
- if (candidate.getAttribute("tabindex") !== wanted) {
434
- candidate.setAttribute("tabindex", wanted);
435
- }
536
+ setAttributeIfChanged(candidate, "tabindex", wanted);
436
537
  }
437
538
  if (focus) cell.focus();
438
539
  }
@@ -460,6 +561,11 @@ var DataGridController = class extends Controller {
460
561
  if (!cells || cells.length === 0) return void 0;
461
562
  return cells[Math.min(col, cells.length - 1)];
462
563
  }
564
+ #writeSelection(target, value) {
565
+ setAttributeIfChanged(target, "aria-selected", value, () => {
566
+ this.#observer.claim(target, "aria-selected", value);
567
+ });
568
+ }
463
569
  };
464
570
 
465
571
  export { DataGridController };