stimeo-ui 0.16.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/CHANGELOG.md +136 -0
  2. package/README.md +27 -11
  3. package/dist/cable/index.d.ts +88 -31
  4. package/dist/cable/index.js +384 -449
  5. package/dist/cable/index.js.map +1 -1
  6. package/dist/coerce-JtZVNG5h.d.ts +20 -0
  7. package/dist/controllers/accordion_controller.d.ts +4 -2
  8. package/dist/controllers/accordion_controller.js +174 -55
  9. package/dist/controllers/accordion_controller.js.map +1 -1
  10. package/dist/controllers/alert_dialog_controller.d.ts +12 -2
  11. package/dist/controllers/alert_dialog_controller.js +903 -235
  12. package/dist/controllers/alert_dialog_controller.js.map +1 -1
  13. package/dist/controllers/announcer_controller.d.ts +37 -5
  14. package/dist/controllers/announcer_controller.js +238 -205
  15. package/dist/controllers/announcer_controller.js.map +1 -1
  16. package/dist/controllers/aspect_ratio_controller.js +0 -10
  17. package/dist/controllers/aspect_ratio_controller.js.map +1 -1
  18. package/dist/controllers/auto_submit_controller.d.ts +30 -6
  19. package/dist/controllers/auto_submit_controller.js +414 -145
  20. package/dist/controllers/auto_submit_controller.js.map +1 -1
  21. package/dist/controllers/avatar_controller.js +185 -107
  22. package/dist/controllers/avatar_controller.js.map +1 -1
  23. package/dist/controllers/breadcrumb_controller.js +0 -130
  24. package/dist/controllers/breadcrumb_controller.js.map +1 -1
  25. package/dist/controllers/bulk_select_controller.d.ts +21 -3
  26. package/dist/controllers/bulk_select_controller.js +282 -58
  27. package/dist/controllers/bulk_select_controller.js.map +1 -1
  28. package/dist/controllers/calendar_controller.d.ts +38 -16
  29. package/dist/controllers/calendar_controller.js +228 -260
  30. package/dist/controllers/calendar_controller.js.map +1 -1
  31. package/dist/controllers/carousel_controller.d.ts +43 -12
  32. package/dist/controllers/carousel_controller.js +536 -436
  33. package/dist/controllers/carousel_controller.js.map +1 -1
  34. package/dist/controllers/character_counter_controller.d.ts +44 -7
  35. package/dist/controllers/character_counter_controller.js +493 -207
  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 +38 -74
  39. package/dist/controllers/checkbox_controller.js.map +1 -1
  40. package/dist/controllers/clipboard_controller.d.ts +16 -5
  41. package/dist/controllers/clipboard_controller.js +261 -149
  42. package/dist/controllers/clipboard_controller.js.map +1 -1
  43. package/dist/controllers/collapsible_controller.d.ts +17 -5
  44. package/dist/controllers/collapsible_controller.js +304 -120
  45. package/dist/controllers/collapsible_controller.js.map +1 -1
  46. package/dist/controllers/color_picker_controller.d.ts +18 -6
  47. package/dist/controllers/color_picker_controller.js +178 -146
  48. package/dist/controllers/color_picker_controller.js.map +1 -1
  49. package/dist/controllers/combobox_controller.d.ts +24 -6
  50. package/dist/controllers/combobox_controller.js +522 -156
  51. package/dist/controllers/combobox_controller.js.map +1 -1
  52. package/dist/controllers/command_palette_controller.d.ts +51 -20
  53. package/dist/controllers/command_palette_controller.js +1156 -395
  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 +300 -171
  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 +980 -262
  60. package/dist/controllers/confirm_controller.js.map +1 -1
  61. package/dist/controllers/context_menu_controller.d.ts +80 -18
  62. package/dist/controllers/context_menu_controller.js +346 -153
  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 +47 -3
  68. package/dist/controllers/countdown_controller.js +281 -158
  69. package/dist/controllers/countdown_controller.js.map +1 -1
  70. package/dist/controllers/currency_input_controller.d.ts +93 -10
  71. package/dist/controllers/currency_input_controller.js +575 -225
  72. package/dist/controllers/currency_input_controller.js.map +1 -1
  73. package/dist/controllers/data_grid_controller.d.ts +25 -12
  74. package/dist/controllers/data_grid_controller.js +248 -214
  75. package/dist/controllers/data_grid_controller.js.map +1 -1
  76. package/dist/controllers/date_range_picker_controller.d.ts +42 -14
  77. package/dist/controllers/date_range_picker_controller.js +338 -235
  78. package/dist/controllers/date_range_picker_controller.js.map +1 -1
  79. package/dist/controllers/dialog_controller.d.ts +17 -6
  80. package/dist/controllers/dialog_controller.js +899 -237
  81. package/dist/controllers/dialog_controller.js.map +1 -1
  82. package/dist/controllers/direct_upload_controller.d.ts +25 -8
  83. package/dist/controllers/direct_upload_controller.js +97 -167
  84. package/dist/controllers/direct_upload_controller.js.map +1 -1
  85. package/dist/controllers/dirty_form_controller.d.ts +6 -1
  86. package/dist/controllers/dirty_form_controller.js +72 -69
  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 +196 -24
  90. package/dist/controllers/dismissible_controller.js.map +1 -1
  91. package/dist/controllers/drawer_controller.d.ts +39 -11
  92. package/dist/controllers/drawer_controller.js +974 -355
  93. package/dist/controllers/drawer_controller.js.map +1 -1
  94. package/dist/controllers/dropdown_controller.d.ts +31 -1
  95. package/dist/controllers/dropdown_controller.js +339 -96
  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 +315 -88
  99. package/dist/controllers/editable_controller.js.map +1 -1
  100. package/dist/controllers/empty_state_controller.js +79 -58
  101. package/dist/controllers/empty_state_controller.js.map +1 -1
  102. package/dist/controllers/file_dropzone_controller.d.ts +63 -18
  103. package/dist/controllers/file_dropzone_controller.js +322 -211
  104. package/dist/controllers/file_dropzone_controller.js.map +1 -1
  105. package/dist/controllers/filter_controller.js +77 -42
  106. package/dist/controllers/filter_controller.js.map +1 -1
  107. package/dist/controllers/flash_controller.d.ts +35 -12
  108. package/dist/controllers/flash_controller.js +238 -347
  109. package/dist/controllers/flash_controller.js.map +1 -1
  110. package/dist/controllers/focus_controller.d.ts +15 -6
  111. package/dist/controllers/focus_controller.js +679 -240
  112. package/dist/controllers/focus_controller.js.map +1 -1
  113. package/dist/controllers/form_field_controller.js +156 -132
  114. package/dist/controllers/form_field_controller.js.map +1 -1
  115. package/dist/controllers/form_validation_controller.d.ts +3 -3
  116. package/dist/controllers/form_validation_controller.js +31 -97
  117. package/dist/controllers/form_validation_controller.js.map +1 -1
  118. package/dist/controllers/frame_loading_controller.d.ts +47 -14
  119. package/dist/controllers/frame_loading_controller.js +275 -217
  120. package/dist/controllers/frame_loading_controller.js.map +1 -1
  121. package/dist/controllers/highlight_controller.d.ts +27 -6
  122. package/dist/controllers/highlight_controller.js +107 -75
  123. package/dist/controllers/highlight_controller.js.map +1 -1
  124. package/dist/controllers/hover_card_controller.d.ts +60 -4
  125. package/dist/controllers/hover_card_controller.js +327 -130
  126. package/dist/controllers/hover_card_controller.js.map +1 -1
  127. package/dist/controllers/idle_controller.d.ts +48 -6
  128. package/dist/controllers/idle_controller.js +271 -101
  129. package/dist/controllers/idle_controller.js.map +1 -1
  130. package/dist/controllers/input_mask_controller.d.ts +30 -13
  131. package/dist/controllers/input_mask_controller.js +483 -97
  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 +150 -106
  135. package/dist/controllers/intersection_controller.js.map +1 -1
  136. package/dist/controllers/lazy_frame_controller.d.ts +19 -2
  137. package/dist/controllers/lazy_frame_controller.js +24 -68
  138. package/dist/controllers/lazy_frame_controller.js.map +1 -1
  139. package/dist/controllers/listbox_controller.d.ts +44 -9
  140. package/dist/controllers/listbox_controller.js +523 -240
  141. package/dist/controllers/listbox_controller.js.map +1 -1
  142. package/dist/controllers/local_time_controller.d.ts +9 -7
  143. package/dist/controllers/local_time_controller.js +102 -77
  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 +80 -96
  147. package/dist/controllers/masonry_controller.js.map +1 -1
  148. package/dist/controllers/menu_controller.d.ts +55 -11
  149. package/dist/controllers/menu_controller.js +302 -188
  150. package/dist/controllers/menu_controller.js.map +1 -1
  151. package/dist/controllers/menubar_controller.d.ts +51 -9
  152. package/dist/controllers/menubar_controller.js +232 -345
  153. package/dist/controllers/menubar_controller.js.map +1 -1
  154. package/dist/controllers/meter_controller.d.ts +33 -20
  155. package/dist/controllers/meter_controller.js +417 -87
  156. package/dist/controllers/meter_controller.js.map +1 -1
  157. package/dist/controllers/multi_select_controller.d.ts +48 -18
  158. package/dist/controllers/multi_select_controller.js +785 -393
  159. package/dist/controllers/multi_select_controller.js.map +1 -1
  160. package/dist/controllers/navigation_menu_controller.d.ts +27 -6
  161. package/dist/controllers/navigation_menu_controller.js +190 -250
  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 +396 -192
  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 +268 -62
  168. package/dist/controllers/network_status_controller.js.map +1 -1
  169. package/dist/controllers/number_input_controller.d.ts +50 -8
  170. package/dist/controllers/number_input_controller.js +610 -303
  171. package/dist/controllers/number_input_controller.js.map +1 -1
  172. package/dist/controllers/optimistic_controller.d.ts +8 -5
  173. package/dist/controllers/optimistic_controller.js +45 -87
  174. package/dist/controllers/optimistic_controller.js.map +1 -1
  175. package/dist/controllers/otp_controller.d.ts +55 -8
  176. package/dist/controllers/otp_controller.js +658 -255
  177. package/dist/controllers/otp_controller.js.map +1 -1
  178. package/dist/controllers/overflow_indicator_controller.d.ts +5 -0
  179. package/dist/controllers/overflow_indicator_controller.js +122 -113
  180. package/dist/controllers/overflow_indicator_controller.js.map +1 -1
  181. package/dist/controllers/overflow_menu_controller.d.ts +58 -20
  182. package/dist/controllers/overflow_menu_controller.js +470 -295
  183. package/dist/controllers/overflow_menu_controller.js.map +1 -1
  184. package/dist/controllers/pagination_controller.d.ts +37 -7
  185. package/dist/controllers/pagination_controller.js +332 -123
  186. package/dist/controllers/pagination_controller.js.map +1 -1
  187. package/dist/controllers/password_reveal_controller.d.ts +46 -8
  188. package/dist/controllers/password_reveal_controller.js +392 -121
  189. package/dist/controllers/password_reveal_controller.js.map +1 -1
  190. package/dist/controllers/password_strength_controller.d.ts +15 -6
  191. package/dist/controllers/password_strength_controller.js +111 -158
  192. package/dist/controllers/password_strength_controller.js.map +1 -1
  193. package/dist/controllers/persist_controller.d.ts +11 -4
  194. package/dist/controllers/persist_controller.js +165 -111
  195. package/dist/controllers/persist_controller.js.map +1 -1
  196. package/dist/controllers/pointer_drag_controller.d.ts +35 -12
  197. package/dist/controllers/pointer_drag_controller.js +434 -188
  198. package/dist/controllers/pointer_drag_controller.js.map +1 -1
  199. package/dist/controllers/popover_controller.d.ts +41 -5
  200. package/dist/controllers/popover_controller.js +269 -113
  201. package/dist/controllers/popover_controller.js.map +1 -1
  202. package/dist/controllers/portal_controller.d.ts +44 -4
  203. package/dist/controllers/portal_controller.js +215 -76
  204. package/dist/controllers/portal_controller.js.map +1 -1
  205. package/dist/controllers/preview_guard_controller.d.ts +10 -4
  206. package/dist/controllers/preview_guard_controller.js +243 -116
  207. package/dist/controllers/preview_guard_controller.js.map +1 -1
  208. package/dist/controllers/progress_controller.d.ts +20 -19
  209. package/dist/controllers/progress_controller.js +391 -78
  210. package/dist/controllers/progress_controller.js.map +1 -1
  211. package/dist/controllers/radio_group_controller.d.ts +21 -9
  212. package/dist/controllers/radio_group_controller.js +278 -211
  213. package/dist/controllers/radio_group_controller.js.map +1 -1
  214. package/dist/controllers/range_slider_controller.d.ts +47 -6
  215. package/dist/controllers/range_slider_controller.js +220 -113
  216. package/dist/controllers/range_slider_controller.js.map +1 -1
  217. package/dist/controllers/rating_controller.d.ts +20 -4
  218. package/dist/controllers/rating_controller.js +458 -211
  219. package/dist/controllers/rating_controller.js.map +1 -1
  220. package/dist/controllers/read_more_controller.d.ts +2 -0
  221. package/dist/controllers/read_more_controller.js +138 -63
  222. package/dist/controllers/read_more_controller.js.map +1 -1
  223. package/dist/controllers/reading_progress_controller.d.ts +1 -1
  224. package/dist/controllers/reading_progress_controller.js +166 -137
  225. package/dist/controllers/reading_progress_controller.js.map +1 -1
  226. package/dist/controllers/relative_time_controller.d.ts +20 -6
  227. package/dist/controllers/relative_time_controller.js +211 -112
  228. package/dist/controllers/relative_time_controller.js.map +1 -1
  229. package/dist/controllers/reset_on_restore_controller.d.ts +85 -0
  230. package/dist/controllers/{reset_before_cache_controller.js → reset_on_restore_controller.js} +103 -38
  231. package/dist/controllers/reset_on_restore_controller.js.map +1 -0
  232. package/dist/controllers/resizable_controller.d.ts +31 -2
  233. package/dist/controllers/resizable_controller.js +299 -150
  234. package/dist/controllers/resizable_controller.js.map +1 -1
  235. package/dist/controllers/roving_controller.d.ts +3 -3
  236. package/dist/controllers/roving_controller.js +49 -88
  237. package/dist/controllers/roving_controller.js.map +1 -1
  238. package/dist/controllers/scroll_area_controller.d.ts +7 -3
  239. package/dist/controllers/scroll_area_controller.js +490 -246
  240. package/dist/controllers/scroll_area_controller.js.map +1 -1
  241. package/dist/controllers/scroll_restore_controller.d.ts +3 -3
  242. package/dist/controllers/scroll_restore_controller.js +14 -55
  243. package/dist/controllers/scroll_restore_controller.js.map +1 -1
  244. package/dist/controllers/scroll_visibility_controller.d.ts +28 -12
  245. package/dist/controllers/scroll_visibility_controller.js +432 -149
  246. package/dist/controllers/scroll_visibility_controller.js.map +1 -1
  247. package/dist/controllers/scrollspy_controller.d.ts +6 -1
  248. package/dist/controllers/scrollspy_controller.js +193 -248
  249. package/dist/controllers/scrollspy_controller.js.map +1 -1
  250. package/dist/controllers/separator_controller.d.ts +20 -5
  251. package/dist/controllers/separator_controller.js +285 -142
  252. package/dist/controllers/separator_controller.js.map +1 -1
  253. package/dist/controllers/sidebar_controller.d.ts +65 -8
  254. package/dist/controllers/sidebar_controller.js +1069 -404
  255. package/dist/controllers/sidebar_controller.js.map +1 -1
  256. package/dist/controllers/skeleton_controller.d.ts +23 -0
  257. package/dist/controllers/skeleton_controller.js +259 -101
  258. package/dist/controllers/skeleton_controller.js.map +1 -1
  259. package/dist/controllers/slider_controller.d.ts +29 -2
  260. package/dist/controllers/slider_controller.js +187 -86
  261. package/dist/controllers/slider_controller.js.map +1 -1
  262. package/dist/controllers/smart_sticky_header_controller.d.ts +22 -4
  263. package/dist/controllers/smart_sticky_header_controller.js +173 -66
  264. package/dist/controllers/smart_sticky_header_controller.js.map +1 -1
  265. package/dist/controllers/sortable_controller.d.ts +4 -4
  266. package/dist/controllers/sortable_controller.js +26 -125
  267. package/dist/controllers/sortable_controller.js.map +1 -1
  268. package/dist/controllers/spinner_controller.d.ts +39 -4
  269. package/dist/controllers/spinner_controller.js +288 -173
  270. package/dist/controllers/spinner_controller.js.map +1 -1
  271. package/dist/controllers/step_indicator_controller.d.ts +9 -4
  272. package/dist/controllers/step_indicator_controller.js +105 -46
  273. package/dist/controllers/step_indicator_controller.js.map +1 -1
  274. package/dist/controllers/stepper_controller.d.ts +14 -6
  275. package/dist/controllers/stepper_controller.js +120 -73
  276. package/dist/controllers/stepper_controller.js.map +1 -1
  277. package/dist/controllers/stick_to_bottom_controller.d.ts +9 -1
  278. package/dist/controllers/stick_to_bottom_controller.js +275 -140
  279. package/dist/controllers/stick_to_bottom_controller.js.map +1 -1
  280. package/dist/controllers/sticky_observer_controller.d.ts +11 -0
  281. package/dist/controllers/sticky_observer_controller.js +220 -49
  282. package/dist/controllers/sticky_observer_controller.js.map +1 -1
  283. package/dist/controllers/submit_once_controller.d.ts +24 -8
  284. package/dist/controllers/submit_once_controller.js +376 -227
  285. package/dist/controllers/submit_once_controller.js.map +1 -1
  286. package/dist/controllers/switch_controller.d.ts +18 -4
  287. package/dist/controllers/switch_controller.js +201 -84
  288. package/dist/controllers/switch_controller.js.map +1 -1
  289. package/dist/controllers/tabs_controller.d.ts +9 -6
  290. package/dist/controllers/tabs_controller.js +41 -30
  291. package/dist/controllers/tabs_controller.js.map +1 -1
  292. package/dist/controllers/tags_input_controller.d.ts +16 -3
  293. package/dist/controllers/tags_input_controller.js +293 -173
  294. package/dist/controllers/tags_input_controller.js.map +1 -1
  295. package/dist/controllers/textarea_autosize_controller.d.ts +11 -1
  296. package/dist/controllers/textarea_autosize_controller.js +108 -74
  297. package/dist/controllers/textarea_autosize_controller.js.map +1 -1
  298. package/dist/controllers/theme_controller.d.ts +24 -11
  299. package/dist/controllers/theme_controller.js +140 -116
  300. package/dist/controllers/theme_controller.js.map +1 -1
  301. package/dist/controllers/time_picker_controller.d.ts +55 -5
  302. package/dist/controllers/time_picker_controller.js +331 -127
  303. package/dist/controllers/time_picker_controller.js.map +1 -1
  304. package/dist/controllers/toast_controller.d.ts +40 -16
  305. package/dist/controllers/toast_controller.js +244 -324
  306. package/dist/controllers/toast_controller.js.map +1 -1
  307. package/dist/controllers/toggle_group_controller.d.ts +14 -6
  308. package/dist/controllers/toggle_group_controller.js +252 -191
  309. package/dist/controllers/toggle_group_controller.js.map +1 -1
  310. package/dist/controllers/toolbar_controller.d.ts +8 -6
  311. package/dist/controllers/toolbar_controller.js +219 -120
  312. package/dist/controllers/toolbar_controller.js.map +1 -1
  313. package/dist/controllers/tooltip_controller.d.ts +49 -4
  314. package/dist/controllers/tooltip_controller.js +158 -124
  315. package/dist/controllers/tooltip_controller.js.map +1 -1
  316. package/dist/controllers/transition_controller.d.ts +22 -4
  317. package/dist/controllers/transition_controller.js +123 -119
  318. package/dist/controllers/transition_controller.js.map +1 -1
  319. package/dist/controllers/tree_view_controller.d.ts +22 -12
  320. package/dist/controllers/tree_view_controller.js +283 -369
  321. package/dist/controllers/tree_view_controller.js.map +1 -1
  322. package/dist/index.d.ts +10 -5
  323. package/dist/index.js +8573 -10410
  324. package/dist/index.js.map +1 -1
  325. package/dist/inspector/cli.d.ts +38 -14
  326. package/dist/inspector/cli.js +108 -40
  327. package/dist/inspector/cli.js.map +1 -1
  328. package/dist/inspector/cli_bin.js +145 -64
  329. package/dist/inspector/cli_bin.js.map +1 -1
  330. package/dist/inspector/examples.json +20 -20
  331. package/dist/inspector/manifest.json +802 -101
  332. package/dist/positioning/index.d.ts +15 -7
  333. package/dist/positioning/index.js +154 -47
  334. package/dist/positioning/index.js.map +1 -1
  335. package/package.json +11 -10
  336. package/dist/controllers/reset_before_cache_controller.d.ts +0 -76
  337. package/dist/controllers/reset_before_cache_controller.js.map +0 -1
@@ -1,128 +1,285 @@
1
1
  import { Controller } from '@hotwired/stimulus';
2
2
 
3
- // src/controllers/hover_card_controller.ts
3
+ function setAttributeIfChanged(element, name, value, beforeWrite) {
4
+ if (element.getAttribute(name) === value) return false;
5
+ if (value === null) element.removeAttribute(name);
6
+ else element.setAttribute(name, value);
7
+ return true;
8
+ }
9
+
10
+ function sharedRegistry(key, create) {
11
+ const symbol = Symbol.for(key);
12
+ const scope = globalThis;
13
+ const existing = scope[symbol];
14
+ if (existing !== void 0) return existing;
15
+ const registry2 = create();
16
+ Object.defineProperty(globalThis, symbol, { value: registry2 });
17
+ return registry2;
18
+ }
19
+
20
+ var registry = sharedRegistry(
21
+ "stimeo-ui.attribute-lease.registry.v1",
22
+ () => ({ stacks: /* @__PURE__ */ new WeakMap(), names: /* @__PURE__ */ new Map() })
23
+ );
24
+ function isAttributeValue(value) {
25
+ return value === null || typeof value === "string";
26
+ }
27
+ function readLeaseRecord(element, record) {
28
+ try {
29
+ const parsed = JSON.parse(element.getAttribute(record) ?? "null");
30
+ if (!Array.isArray(parsed)) return void 0;
31
+ const [original, written, ...rest] = parsed;
32
+ const linked = rest[0] !== false;
33
+ const beneath = linked ? rest : rest.slice(1);
34
+ if (!beneath.every((under) => typeof under === "string")) return void 0;
35
+ return isAttributeValue(original) && isAttributeValue(written) ? { original, written, linked, beneath } : void 0;
36
+ } catch {
37
+ return void 0;
38
+ }
39
+ }
40
+ function attributeStack(element, attribute) {
41
+ const byAttribute = registry.stacks.get(element) ?? /* @__PURE__ */ new Map();
42
+ registry.stacks.set(element, byAttribute);
43
+ const known = byAttribute.get(attribute);
44
+ if (known) return known;
45
+ const found = [];
46
+ for (const record of registry.names.get(attribute) ?? []) {
47
+ const read = readLeaseRecord(element, record);
48
+ if (read) found.push({ ...read, record });
49
+ }
50
+ const depth = ({ beneath }) => beneath.filter((name) => found.some((other) => other.record === name)).length;
51
+ const stack = found.sort((one, other) => depth(one) - depth(other)).map(({ record, written, original, linked }, index) => ({
52
+ lease: null,
53
+ record,
54
+ written,
55
+ original,
56
+ linked: linked && index > 0
57
+ }));
58
+ byAttribute.set(attribute, stack);
59
+ return stack;
60
+ }
61
+ function findHold(stack, lease, record) {
62
+ return stack.find((held) => held.lease === lease) ?? stack.find((held) => held.lease === null && held.record === record);
63
+ }
64
+ var AttributeLease = class {
65
+ #attribute;
66
+ #record;
67
+ #base;
68
+ #preserveAuthor;
69
+ #held = /* @__PURE__ */ new Set();
70
+ constructor(attribute, owner, options = {}) {
71
+ this.#attribute = attribute;
72
+ this.#record = `data-${owner}-${attribute}-lease`;
73
+ this.#base = options.base === true;
74
+ this.#preserveAuthor = options.preserveAuthor === true;
75
+ const names = registry.names;
76
+ names.set(attribute, (names.get(attribute) ?? /* @__PURE__ */ new Set()).add(this.#record));
77
+ }
78
+ write(element, value) {
79
+ const stack = attributeStack(element, this.#attribute);
80
+ const hold = this.#take(stack) ?? this.#acquire(element, stack);
81
+ this.#held.add(element);
82
+ const shows = !this.#covered(element, stack, hold);
83
+ hold.written = value;
84
+ this.#mark(element, stack);
85
+ if (shows) this.#reflect(element, value);
86
+ }
87
+ return(element) {
88
+ const held = this.#held.delete(element);
89
+ const known = registry.stacks.get(element)?.has(this.#attribute);
90
+ const stack = held || known || element.hasAttribute(this.#record) ? attributeStack(element, this.#attribute) : [];
91
+ const hold = this.#take(stack);
92
+ if (!hold) return false;
93
+ const carries = element.getAttribute(this.#attribute) === hold.written;
94
+ const owns = carries && !this.#covered(element, stack, hold);
95
+ const index = stack.indexOf(hold);
96
+ stack.splice(index, 1);
97
+ const above = stack[index];
98
+ if (above) above.linked &&= hold.linked;
99
+ this.#mark(element, stack);
100
+ if (!owns) return true;
101
+ const below = hold.linked ? stack[index - 1] : void 0;
102
+ this.#reflect(element, below ? below.written : hold.original);
103
+ return true;
104
+ }
105
+ returnAll() {
106
+ for (const element of Array.from(this.#held)) this.return(element);
107
+ }
108
+ #take(stack) {
109
+ const hold = findHold(stack, this, this.#record);
110
+ if (hold) hold.lease = this;
111
+ return hold;
112
+ }
113
+ #acquire(element, stack) {
114
+ const current = element.getAttribute(this.#attribute);
115
+ const top = stack.at(-1);
116
+ const bottom = stack[0];
117
+ const over = top?.written === current ? top : void 0;
118
+ const from = this.#base ? this.#preserveAuthor && !stack.some((held) => held.written === current) ? void 0 : bottom : over;
119
+ const hold = {
120
+ lease: this,
121
+ record: this.#record,
122
+ written: current,
123
+ original: from ? from.original : current,
124
+ linked: !this.#base && over !== void 0
125
+ };
126
+ if (this.#base && bottom) {
127
+ bottom.linked = true;
128
+ stack.unshift(hold);
129
+ } else stack.push(hold);
130
+ return hold;
131
+ }
132
+ #covered(element, stack, hold) {
133
+ const current = element.getAttribute(this.#attribute);
134
+ return stack.slice(stack.indexOf(hold) + 1).some((above) => above.written === current);
135
+ }
136
+ #mark(element, stack) {
137
+ const records = /* @__PURE__ */ new Map([[this.#record, null]]);
138
+ stack.forEach((hold, index) => {
139
+ const names = stack.slice(0, index).map((under) => under.record);
140
+ const beneath = [...new Set(names.reverse())].filter((name) => name !== hold.record);
141
+ const marker = hold.linked || beneath.length === 0 ? [] : [false];
142
+ records.set(
143
+ hold.record,
144
+ hold.written === hold.original && beneath.length === 0 && index === stack.length - 1 ? null : JSON.stringify([hold.original, hold.written, ...marker, ...beneath])
145
+ );
146
+ });
147
+ for (const [name, recorded] of records) {
148
+ setAttributeIfChanged(element, name, recorded);
149
+ }
150
+ }
151
+ #reflect(element, value) {
152
+ setAttributeIfChanged(element, this.#attribute, value);
153
+ }
154
+ };
4
155
 
5
- // src/utils/escape_layer.ts
6
156
  var EscapeLayer = class _EscapeLayer {
7
- static #registries = /* @__PURE__ */ new WeakMap();
8
- #ownerDocument = null;
9
- /** Dismissal callback while active; `null` when inactive. */
10
- #onDismiss = null;
11
- /** Live predicate deciding whether the layer claims a press; `null` = always. */
12
- #claims = null;
13
- /**
14
- * Activates this layer at the top of its document's Escape stack, installing
15
- * the document's shared resolver listener if this is its first layer.
16
- * Re-activating an already-active layer moves it to the top.
17
- */
157
+ static #registries = sharedRegistry(
158
+ "stimeo-ui.escape-layer.registry.v1",
159
+ () => /* @__PURE__ */ new WeakMap()
160
+ );
161
+ #active = null;
18
162
  activate(ownerDocument = document, options) {
19
163
  this.deactivate();
20
- let registry = _EscapeLayer.#registries.get(ownerDocument);
21
- if (!registry) {
22
- registry = _EscapeLayer.#createRegistry();
23
- _EscapeLayer.#registries.set(ownerDocument, registry);
24
- ownerDocument.addEventListener("keydown", registry.onKeydown);
164
+ let registry2 = _EscapeLayer.#registries.get(ownerDocument);
165
+ if (!registry2) {
166
+ registry2 = _EscapeLayer.#createRegistry();
167
+ _EscapeLayer.#registries.set(ownerDocument, registry2);
168
+ ownerDocument.addEventListener("keydown", registry2.onKeydown);
25
169
  }
26
- registry.stack.push(this);
27
- this.#ownerDocument = ownerDocument;
28
- this.#onDismiss = options.onDismiss;
29
- this.#claims = options.claims ?? null;
30
- }
31
- /**
32
- * Removes this layer from its document's Escape stack, uninstalling the
33
- * shared listener when the stack empties. Safe to call when inactive.
34
- */
170
+ const entry = { onDismiss: options.onDismiss, claims: options.claims ?? null };
171
+ registry2.stack.push(entry);
172
+ this.#active = { document: ownerDocument, entry };
173
+ }
35
174
  deactivate() {
36
- const ownerDocument = this.#ownerDocument;
37
- if (!ownerDocument) return;
38
- const registry = _EscapeLayer.#registries.get(ownerDocument);
39
- if (registry) {
40
- const index = registry.stack.lastIndexOf(this);
41
- if (index >= 0) registry.stack.splice(index, 1);
42
- if (registry.stack.length === 0) {
43
- ownerDocument.removeEventListener("keydown", registry.onKeydown);
44
- _EscapeLayer.#registries.delete(ownerDocument);
175
+ const active = this.#active;
176
+ if (!active) return;
177
+ const registry2 = _EscapeLayer.#registries.get(active.document);
178
+ if (registry2) {
179
+ const index = registry2.stack.lastIndexOf(active.entry);
180
+ if (index >= 0) registry2.stack.splice(index, 1);
181
+ if (registry2.stack.length === 0) {
182
+ active.document.removeEventListener("keydown", registry2.onKeydown);
183
+ _EscapeLayer.#registries.delete(active.document);
45
184
  }
46
185
  }
47
- this.#ownerDocument = null;
48
- this.#onDismiss = null;
49
- this.#claims = null;
50
- }
51
- /**
52
- * Whether this active layer would own a press right now: it is the topmost
53
- * layer whose {@link EscapeLayerOptions.claims} passes. Exposed for tests
54
- * and diagnostics — production dismissal goes through the shared listener.
55
- */
186
+ this.#active = null;
187
+ }
56
188
  get ownsEscape() {
57
- const ownerDocument = this.#ownerDocument;
58
- if (!ownerDocument) return false;
59
- const registry = _EscapeLayer.#registries.get(ownerDocument);
60
- if (!registry) return false;
61
- return _EscapeLayer.#resolveOwner(registry.stack) === this;
189
+ const active = this.#active;
190
+ if (!active) return false;
191
+ const registry2 = _EscapeLayer.#registries.get(active.document);
192
+ if (!registry2) return false;
193
+ return _EscapeLayer.#resolveOwner(registry2.stack) === active.entry;
62
194
  }
63
- /** Builds a document's registry with its shared resolver listener. */
64
195
  static #createRegistry() {
65
- const registry = {
196
+ const registry2 = {
66
197
  stack: [],
67
198
  onKeydown: (event) => {
68
199
  if (event.key !== "Escape" || event.defaultPrevented || event.isComposing) return;
69
- const owner = _EscapeLayer.#resolveOwner(registry.stack);
200
+ const owner = _EscapeLayer.#resolveOwner(registry2.stack);
70
201
  if (!owner) return;
71
202
  event.preventDefault();
72
- owner.#onDismiss?.();
203
+ owner.onDismiss();
73
204
  }
74
205
  };
75
- return registry;
206
+ return registry2;
76
207
  }
77
- /** The topmost stack layer whose claims predicate passes, or `null`. */
78
208
  static #resolveOwner(stack) {
79
209
  for (let index = stack.length - 1; index >= 0; index--) {
80
210
  const layer = stack[index];
81
211
  if (!layer) continue;
82
- if (layer.#claims && !layer.#claims()) continue;
212
+ if (layer.claims && !layer.claims()) continue;
83
213
  return layer;
84
214
  }
85
215
  return null;
86
216
  }
87
217
  };
88
218
 
89
- // src/utils/safe_timeout.ts
219
+ var MAX_TIMER_DELAY_MS = 2147483647;
220
+
221
+ var NUMBER_BOUNDS = {
222
+ timer: { finite: true, min: 0, max: MAX_TIMER_DELAY_MS }};
223
+ function matchesNumberBounds(value, bounds) {
224
+ if (!Number.isFinite(value)) {
225
+ const direction = value === Infinity ? "positive" : value === -Infinity ? "negative" : null;
226
+ if (direction === null) return false;
227
+ if (bounds.allowInfinity !== "both" && bounds.allowInfinity !== direction) return false;
228
+ }
229
+ if (bounds.min !== void 0 && value < bounds.min) return false;
230
+ if (bounds.max !== void 0 && value > bounds.max) return false;
231
+ if (bounds.exclusiveMin !== void 0 && value <= bounds.exclusiveMin) return false;
232
+ if (bounds.integer && !Number.isInteger(value)) return false;
233
+ if (bounds.allowedValues !== void 0 && !bounds.allowedValues.includes(value)) return false;
234
+ return true;
235
+ }
236
+
237
+ function readNumber(raw, fallback, bounds) {
238
+ return matchesNumberBounds(raw, bounds) ? raw : fallback;
239
+ }
240
+
241
+ var NumberValueReader = class {
242
+ #lastRejected = /* @__PURE__ */ new Map();
243
+ read(owner, name, raw, fallback, bounds) {
244
+ const resolved = readNumber(raw, fallback, bounds);
245
+ if (matchesNumberBounds(raw, bounds)) {
246
+ this.#lastRejected.delete(name);
247
+ return resolved;
248
+ }
249
+ const attribute = `data-${owner.identifier}-${name.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}-value`;
250
+ const literal = owner.element.getAttribute(attribute);
251
+ if (literal === null) {
252
+ this.#lastRejected.delete(name);
253
+ return resolved;
254
+ }
255
+ if (this.#lastRejected.get(name) !== literal) {
256
+ this.#lastRejected.set(name, literal);
257
+ console.warn(
258
+ `Stimeo UI: "${owner.identifier}" has an invalid number Value "${name}" declaration ${JSON.stringify(literal)}; using ${fallback}.`
259
+ );
260
+ }
261
+ return resolved;
262
+ }
263
+ };
264
+
90
265
  var TimerRegistry = class {
91
- /** Live timer ids that have not yet been cleared (or, for timeouts, fired). */
92
266
  ids = /* @__PURE__ */ new Set();
93
- /**
94
- * Cancels a single tracked timer.
95
- *
96
- * No-ops if the id is unknown (already cleared, fired, or never owned by this
97
- * registry), so callers can clear defensively without guarding.
98
- */
99
267
  clear(id) {
100
268
  if (this.ids.delete(id)) {
101
269
  this.cancel(id);
102
270
  }
103
271
  }
104
- /**
105
- * Cancels every tracked timer. Call this from a controller's `disconnect()`
106
- * to guarantee no timer outlives the element.
107
- */
108
272
  clearAll() {
109
273
  for (const id of this.ids) {
110
274
  this.cancel(id);
111
275
  }
112
276
  this.ids.clear();
113
277
  }
114
- /** Number of timers currently tracked (pending). */
115
278
  get size() {
116
279
  return this.ids.size;
117
280
  }
118
281
  };
119
282
  var SafeTimeout = class extends TimerRegistry {
120
- /**
121
- * Schedules `callback` after `delay` ms and returns the timer id.
122
- *
123
- * The id is removed from the registry automatically when the timeout fires,
124
- * so {@link TimerRegistry.size | size} reflects only still-pending timers.
125
- */
126
283
  set(callback, delay) {
127
284
  const id = this.schedule(() => {
128
285
  this.ids.delete(id);
@@ -139,7 +296,6 @@ var SafeTimeout = class extends TimerRegistry {
139
296
  }
140
297
  };
141
298
 
142
- // src/utils/scroll_dismiss.ts
143
299
  function observeScrollDismiss(element, onScroll) {
144
300
  const targets = [...scrollParents(element), window];
145
301
  const handler = () => onScroll();
@@ -164,7 +320,6 @@ function isScrollable(element) {
164
320
  return /auto|scroll|overlay/.test(style.overflow + style.overflowX + style.overflowY);
165
321
  }
166
322
 
167
- // src/utils/state_reason.ts
168
323
  var FOCUS_EVENTS = /* @__PURE__ */ new Set(["blur", "focus", "focusin", "focusout"]);
169
324
  var POINTER_EVENTS = /* @__PURE__ */ new Set(["mouseenter", "mouseleave", "pointerenter", "pointerleave"]);
170
325
  function stateReasonFor(event) {
@@ -174,129 +329,171 @@ function stateReasonFor(event) {
174
329
  return "user";
175
330
  }
176
331
 
177
- // src/controllers/hover_card_controller.ts
178
- var HoverCardController = class extends Controller {
332
+ var HoverCardController = class _HoverCardController extends Controller {
333
+ #numbers = new NumberValueReader();
179
334
  static targets = ["trigger", "card"];
180
335
  static values = {
181
336
  openDelay: { type: Number, default: 300 },
182
337
  closeDelay: { type: Number, default: 200 },
183
338
  closeOnScroll: { type: Boolean, default: false }
184
339
  };
340
+ static valueConstraints = {
341
+ openDelay: NUMBER_BOUNDS.timer,
342
+ closeDelay: NUMBER_BOUNDS.timer
343
+ };
185
344
  static actions = ["close", "open"];
186
345
  static events = ["close", "open"];
187
- /** Pending open/close timers, with their IDs reset on every lifecycle boundary. */
188
346
  #timers = new SafeTimeout();
189
- /** Escape-stack membership while open; the shared resolver dismisses via it. */
190
347
  #escapeLayer = new EscapeLayer();
348
+ #expanded = new AttributeLease("aria-expanded", this.identifier);
191
349
  #pendingOpen = null;
192
350
  #pendingClose = null;
193
- /** Cleanup for the dismiss-on-scroll listeners while open, or `null`. */
194
351
  #stopScrollDismiss = null;
195
- /** Whether state moves are reported: set once `connect()` settled the baseline. */
352
+ #shownCard = null;
353
+ #connected = false;
196
354
  #reporting = false;
197
- /** Starts closed and discards any stale pending state from a prior connection. */
198
355
  connect() {
199
- this.#cancelOpen();
200
- this.#cancelClose();
356
+ this.#cancelTimers();
201
357
  this.#conceal("api");
358
+ this.#connected = true;
202
359
  this.#reporting = true;
203
360
  }
204
- /** Clears timers, the Escape-stack membership, and scroll listeners so nothing outlives the element. */
205
361
  disconnect() {
362
+ this.#connected = false;
206
363
  this.#reporting = false;
207
- this.#cancelOpen();
208
- this.#cancelClose();
209
- this.#escapeLayer.deactivate();
210
- this.#stopScrollDismiss?.();
211
- this.#stopScrollDismiss = null;
364
+ this.#cancelTimers();
365
+ this.#release();
366
+ }
367
+ closeOnScrollValueChanged() {
368
+ if (this.#shownCard) this.#syncScrollDismiss();
369
+ }
370
+ cardTargetDisconnected(card) {
371
+ if (card !== this.#shownCard) return;
372
+ if (this.cardTargets.includes(card)) return;
373
+ this.#cancelTimers();
374
+ this.#release();
375
+ card.hidden = true;
376
+ card.setAttribute("data-state", "closed");
377
+ this.#reflectClosed();
378
+ }
379
+ triggerTargetConnected() {
380
+ if (this.#connected) this.#reflectTrigger();
381
+ }
382
+ triggerTargetDisconnected(trigger) {
383
+ if (!this.triggerTargets.includes(trigger)) this.#expanded.return(trigger);
384
+ if (this.#connected) this.#reflectTrigger();
212
385
  }
213
- /** Opens the card, after `openDelay` ms (or immediately at 0). Cancels a pending close. */
214
386
  open(event) {
215
387
  const reason = stateReasonFor(event);
216
388
  this.#cancelClose();
217
389
  if (this.#isOpen || this.#pendingOpen !== null) return;
218
- if (this.openDelayValue <= 0) {
390
+ if (this.#safeOpenDelay <= 0) {
219
391
  this.#reveal(reason);
220
392
  return;
221
393
  }
222
394
  this.#pendingOpen = this.#timers.set(() => {
223
395
  this.#pendingOpen = null;
224
396
  this.#reveal(reason);
225
- }, this.openDelayValue);
226
- }
227
- /**
228
- * Schedules the card to close after `closeDelay`. Cancels a pending open. The
229
- * delayed callback re-checks whether focus has landed inside the controller
230
- * (e.g. a link in the card) and, if so, aborts the close — covering keyboard
231
- * traversal that the pointer-only hoverable bridge cannot.
232
- */
397
+ }, this.#safeOpenDelay);
398
+ }
233
399
  close(event) {
234
400
  const reason = stateReasonFor(event);
235
401
  this.#cancelOpen();
236
- if (!this.#isOpen || this.#pendingClose !== null) return;
402
+ if (!this.#closable || this.#pendingClose !== null) return;
237
403
  this.#pendingClose = this.#timers.set(() => {
238
404
  this.#pendingClose = null;
239
405
  if (this.element.contains(document.activeElement)) return;
240
406
  this.#conceal(reason);
241
- }, this.closeDelayValue);
242
- }
243
- /**
244
- * Reveals the card, reflects state, reports a move, and joins the Escape stack.
245
- *
246
- * @stimeoRuntimeOnly `closeOnScroll` decides whether this reveal wires the scroll dismissal; what
247
- * is shown does not depend on it.
248
- */
407
+ }, this.#safeCloseDelay);
408
+ }
249
409
  #reveal(reason) {
250
410
  if (!this.hasCardTarget) return;
411
+ const card = this.cardTarget;
251
412
  const was = this.#isOpen;
252
- this.cardTarget.hidden = false;
253
- this.cardTarget.setAttribute("data-state", "open");
254
- if (this.hasTriggerTarget) this.triggerTarget.setAttribute("aria-expanded", "true");
413
+ card.hidden = false;
414
+ card.setAttribute("data-state", "open");
415
+ if (this.hasTriggerTarget) this.#expanded.write(this.triggerTarget, "true");
416
+ this.#shownCard = card;
255
417
  if (!was && this.#reporting) this.dispatch("open", { detail: { reason }, cancelable: false });
418
+ if (this.#shownCard !== card) return;
256
419
  this.#escapeLayer.activate(document, { onDismiss: () => this.#dismiss("escape") });
257
- if (this.closeOnScrollValue && !this.#stopScrollDismiss) {
258
- this.#stopScrollDismiss = observeScrollDismiss(this.element, () => this.#dismiss("scroll"));
259
- }
420
+ this.#syncScrollDismiss();
260
421
  }
261
- /** Hides the card, reflects state, reports a move, and leaves the Escape stack. */
262
422
  #conceal(reason) {
263
423
  const was = this.#isOpen;
264
- this.#escapeLayer.deactivate();
265
- this.#stopScrollDismiss?.();
266
- this.#stopScrollDismiss = null;
424
+ this.#release();
425
+ this.#reflectClosed();
426
+ if (was && this.#reporting) this.dispatch("close", { detail: { reason }, cancelable: false });
427
+ }
428
+ #reflectClosed() {
267
429
  if (this.hasCardTarget) {
268
430
  this.cardTarget.hidden = true;
269
431
  this.cardTarget.setAttribute("data-state", "closed");
270
432
  }
271
- if (this.hasTriggerTarget) this.triggerTarget.setAttribute("aria-expanded", "false");
272
- if (was && this.#reporting) this.dispatch("close", { detail: { reason }, cancelable: false });
433
+ if (this.hasTriggerTarget) this.#expanded.write(this.triggerTarget, "false");
434
+ }
435
+ #reflectTrigger() {
436
+ if (this.hasTriggerTarget) this.#expanded.write(this.triggerTarget, String(this.#isOpen));
437
+ }
438
+ #release() {
439
+ this.#shownCard = null;
440
+ this.#escapeLayer.deactivate();
441
+ this.#stopScrollDismiss?.();
442
+ this.#stopScrollDismiss = null;
443
+ }
444
+ #syncScrollDismiss() {
445
+ if (this.closeOnScrollValue) {
446
+ this.#stopScrollDismiss ??= observeScrollDismiss(this.element, () => this.#dismiss("scroll"));
447
+ return;
448
+ }
449
+ this.#stopScrollDismiss?.();
450
+ this.#stopScrollDismiss = null;
273
451
  }
274
- /** Cancels pending timers and conceals immediately (shared Escape path). */
275
452
  #dismiss(reason) {
453
+ this.#cancelTimers();
454
+ this.#conceal(reason);
455
+ }
456
+ #cancelTimers() {
276
457
  this.#cancelOpen();
277
458
  this.#cancelClose();
278
- this.#conceal(reason);
279
459
  }
280
- /** Cancels any pending open timer. */
281
460
  #cancelOpen() {
282
461
  if (this.#pendingOpen !== null) {
283
462
  this.#timers.clear(this.#pendingOpen);
284
463
  this.#pendingOpen = null;
285
464
  }
286
465
  }
287
- /** Cancels any pending close timer. */
288
466
  #cancelClose() {
289
467
  if (this.#pendingClose !== null) {
290
468
  this.#timers.clear(this.#pendingClose);
291
469
  this.#pendingClose = null;
292
470
  }
293
471
  }
294
- /** Whether the card is currently visible. */
295
472
  get #isOpen() {
296
473
  return this.hasCardTarget && !this.cardTarget.hidden;
297
474
  }
475
+ get #closable() {
476
+ return this.#isOpen || this.#shownCard !== null;
477
+ }
478
+ get #safeOpenDelay() {
479
+ return this.#numbers.read(
480
+ this,
481
+ "openDelay",
482
+ this.openDelayValue,
483
+ _HoverCardController.values.openDelay.default,
484
+ _HoverCardController.valueConstraints.openDelay
485
+ );
486
+ }
487
+ get #safeCloseDelay() {
488
+ return this.#numbers.read(
489
+ this,
490
+ "closeDelay",
491
+ this.closeDelayValue,
492
+ _HoverCardController.values.closeDelay.default,
493
+ _HoverCardController.valueConstraints.closeDelay
494
+ );
495
+ }
298
496
  };
299
497
 
300
498
  export { HoverCardController };
301
- //# sourceMappingURL=hover_card_controller.js.map
302
499
  //# sourceMappingURL=hover_card_controller.js.map