stimulus-library 0.7.5 → 0.8.0-beta

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 (357) hide show
  1. package/dist/controllers/ajax/async_block_controller.js +30 -0
  2. package/dist/controllers/ajax/{index.d.ts → index.js} +0 -1
  3. package/dist/controllers/ajax/lazy_block_controller.js +37 -0
  4. package/dist/controllers/ajax/load_block_controller.js +63 -0
  5. package/dist/controllers/ajax/poll_block_controller.js +35 -0
  6. package/dist/controllers/anchor_spy_controller.js +47 -0
  7. package/dist/controllers/back_link_controller.js +25 -0
  8. package/dist/controllers/clipboard_controller.js +35 -0
  9. package/dist/controllers/confirm_controller.js +33 -0
  10. package/dist/controllers/confirm_navigation_controller.js +29 -0
  11. package/dist/controllers/debug_controller.js +7 -0
  12. package/dist/controllers/disable_with_controller.js +66 -0
  13. package/dist/controllers/dismissable_controller.js +8 -0
  14. package/dist/controllers/element_save_controller.js +80 -0
  15. package/dist/controllers/empty_dom_controller.js +42 -0
  16. package/dist/controllers/equalize_controller.js +39 -0
  17. package/dist/controllers/forms/auto_submit_form_controller.js +62 -0
  18. package/dist/controllers/forms/autosize_controller.js +32 -0
  19. package/dist/controllers/forms/char_count_controller.js +37 -0
  20. package/dist/controllers/forms/checkbox_disable_inputs_controller.js +32 -0
  21. package/dist/controllers/forms/checkbox_enable_inputs_controller.js +32 -0
  22. package/dist/controllers/forms/checkbox_select_all_controller.js +35 -0
  23. package/dist/controllers/forms/checkbox_xor_controller.js +24 -0
  24. package/dist/controllers/forms/detect_dirty_controller.js +98 -0
  25. package/dist/controllers/forms/detect_dirty_form_controller.js +107 -0
  26. package/dist/controllers/forms/enable_inputs_controller.js +21 -0
  27. package/dist/controllers/forms/focus_steal_controller.js +28 -0
  28. package/dist/controllers/forms/form_rc_controller.js +47 -0
  29. package/dist/controllers/forms/form_save_controller.js +109 -0
  30. package/dist/controllers/forms/{index.d.ts → index.js} +0 -1
  31. package/dist/controllers/forms/limited_selection_checkboxes_controller.js +28 -0
  32. package/dist/controllers/forms/navigate_form_errors_controller.js +154 -0
  33. package/dist/controllers/forms/nested_form_controller.js +49 -0
  34. package/dist/controllers/forms/password_confirm_controller.js +26 -0
  35. package/dist/controllers/forms/password_peek_controller.js +21 -0
  36. package/dist/controllers/forms/remote_form_controller.js +26 -0
  37. package/dist/controllers/forms/sync_inputs_controller.js +67 -0
  38. package/dist/controllers/forms/value_warn_controller.js +45 -0
  39. package/dist/controllers/forms/word_count_controller.js +37 -0
  40. package/dist/controllers/{index.d.ts → index.js} +2 -1
  41. package/dist/controllers/media/fallback_image_controller.js +44 -0
  42. package/dist/controllers/media/{index.d.ts → index.js} +0 -1
  43. package/dist/controllers/media/lightbox_image_controller.js +71 -0
  44. package/dist/controllers/media/media_player_controller.js +31 -0
  45. package/dist/controllers/prefetch_controller.js +74 -0
  46. package/dist/controllers/print_button_controller.js +18 -0
  47. package/dist/controllers/responsive_iframe_controller.js +35 -0
  48. package/dist/controllers/scroll/{index.d.ts → index.js} +0 -1
  49. package/dist/controllers/scroll/scroll_container_controller.js +81 -0
  50. package/dist/controllers/scroll/scroll_into_focus_controller.js +20 -0
  51. package/dist/controllers/scroll/scroll_to_bottom_controller.js +37 -0
  52. package/dist/controllers/scroll/scroll_to_controller.js +22 -0
  53. package/dist/controllers/scroll/scroll_to_top_controller.js +37 -0
  54. package/dist/controllers/self_destruct_controller.js +11 -0
  55. package/dist/controllers/signal/events.js +12 -0
  56. package/dist/controllers/signal/expressions.js +54 -0
  57. package/dist/controllers/signal/{index.d.ts → index.js} +0 -1
  58. package/dist/controllers/signal/signal_action_controller.js +31 -0
  59. package/dist/controllers/signal/signal_dom_children_controller.js +40 -0
  60. package/dist/controllers/signal/signal_input_controller.js +36 -0
  61. package/dist/controllers/signal/signal_visibility_controller.js +44 -0
  62. package/dist/controllers/sticky_controller.js +44 -0
  63. package/dist/controllers/tables/{index.d.ts → index.js} +0 -1
  64. package/dist/controllers/tables/table_sort_controller.js +97 -0
  65. package/dist/controllers/tables/table_truncate_controller.js +81 -0
  66. package/dist/controllers/teleport_controller.js +48 -0
  67. package/dist/controllers/temporary_state_controller.js +65 -0
  68. package/dist/controllers/toggle_class_controller.js +115 -0
  69. package/dist/controllers/trix_modifier_controller.js +121 -0
  70. package/dist/controllers/turbo_frame_rc_controller.js +65 -0
  71. package/dist/controllers/turbo_frame_refresh_controller.js +32 -0
  72. package/dist/controllers/utility/alert_controller.js +7 -0
  73. package/dist/controllers/utility/fullscreen_controller.js +10 -0
  74. package/dist/controllers/utility/{index.d.ts → index.js} +0 -1
  75. package/dist/controllers/utility/intersection_controller.js +25 -0
  76. package/dist/controllers/utility/interval_controller.js +16 -0
  77. package/dist/controllers/utility/presence_controller.js +19 -0
  78. package/dist/controllers/utility/print_controller.js +7 -0
  79. package/dist/controllers/utility/timeout_controller.js +13 -0
  80. package/dist/controllers/utility/user_focus_controller.js +23 -0
  81. package/dist/controllers/visual/clock_controller.js +51 -0
  82. package/dist/controllers/visual/countdown_controller.js +116 -0
  83. package/dist/controllers/visual/duration_controller.js +79 -0
  84. package/dist/controllers/visual/{index.d.ts → index.js} +0 -1
  85. package/dist/controllers/visual/tabs_controller.js +79 -0
  86. package/dist/controllers/visual/time_distance_controller.js +50 -0
  87. package/dist/controllers/visual/tree_view_controller.js +92 -0
  88. package/dist/{index.d.ts → index.js} +3 -1
  89. package/dist/mixins/create_mixin.js +11 -0
  90. package/dist/mixins/{index.d.ts → index.js} +0 -1
  91. package/dist/mixins/install_class_methods.js +28 -0
  92. package/dist/mixins/use_click_outside.js +17 -0
  93. package/dist/mixins/use_event_bus.js +19 -0
  94. package/dist/mixins/use_event_listener.js +34 -0
  95. package/dist/mixins/use_fullscreen.js +42 -0
  96. package/dist/mixins/use_geolocation.js +62 -0
  97. package/dist/mixins/use_hover.js +29 -0
  98. package/dist/mixins/use_injected_html.js +37 -0
  99. package/dist/mixins/use_intersection.js +45 -0
  100. package/dist/mixins/use_interval.js +13 -0
  101. package/dist/mixins/use_localstorage.js +122 -0
  102. package/dist/mixins/use_mutation_observer.js +9 -0
  103. package/dist/mixins/use_temporary_content.js +38 -0
  104. package/dist/mixins/use_timeout.js +20 -0
  105. package/dist/mixins/use_trix_modifiers.js +71 -0
  106. package/dist/polyfills/string.replaceAll.js +13 -0
  107. package/dist/utilities/arrays.js +3 -0
  108. package/dist/utilities/base_controller.js +56 -0
  109. package/dist/utilities/elements.js +102 -0
  110. package/dist/utilities/ephemeral_controller.js +42 -0
  111. package/dist/utilities/event_bus.js +2 -0
  112. package/dist/utilities/events.js +10 -0
  113. package/dist/utilities/fetchRetry.js +22 -0
  114. package/dist/utilities/{index.d.ts → index.js} +0 -1
  115. package/dist/utilities/logging.js +82 -0
  116. package/dist/utilities/reactive.js +23 -0
  117. package/dist/utilities/request_submit.js +20 -0
  118. package/dist/utilities/scroll.js +89 -0
  119. package/dist/utilities/stimulus.js +13 -0
  120. package/dist/utilities/strings.js +5 -0
  121. package/dist/utilities/turbo.js +3 -0
  122. package/package.json +13 -20
  123. package/CHANGELOG.md +0 -513
  124. package/dist/controllers/ajax/async_block_controller.d.ts +0 -18
  125. package/dist/controllers/ajax/async_block_controller.d.ts.map +0 -1
  126. package/dist/controllers/ajax/index.d.ts.map +0 -1
  127. package/dist/controllers/ajax/lazy_block_controller.d.ts +0 -10
  128. package/dist/controllers/ajax/lazy_block_controller.d.ts.map +0 -1
  129. package/dist/controllers/ajax/load_block_controller.d.ts +0 -24
  130. package/dist/controllers/ajax/load_block_controller.d.ts.map +0 -1
  131. package/dist/controllers/ajax/poll_block_controller.d.ts +0 -16
  132. package/dist/controllers/ajax/poll_block_controller.d.ts.map +0 -1
  133. package/dist/controllers/anchor_spy_controller.d.ts +0 -21
  134. package/dist/controllers/anchor_spy_controller.d.ts.map +0 -1
  135. package/dist/controllers/back_link_controller.d.ts +0 -17
  136. package/dist/controllers/back_link_controller.d.ts.map +0 -1
  137. package/dist/controllers/clipboard_controller.d.ts +0 -19
  138. package/dist/controllers/clipboard_controller.d.ts.map +0 -1
  139. package/dist/controllers/confirm_controller.d.ts +0 -13
  140. package/dist/controllers/confirm_controller.d.ts.map +0 -1
  141. package/dist/controllers/confirm_navigation_controller.d.ts +0 -15
  142. package/dist/controllers/confirm_navigation_controller.d.ts.map +0 -1
  143. package/dist/controllers/debug_controller.d.ts +0 -7
  144. package/dist/controllers/debug_controller.d.ts.map +0 -1
  145. package/dist/controllers/disable_with_controller.d.ts +0 -20
  146. package/dist/controllers/disable_with_controller.d.ts.map +0 -1
  147. package/dist/controllers/dismissable_controller.d.ts +0 -7
  148. package/dist/controllers/dismissable_controller.d.ts.map +0 -1
  149. package/dist/controllers/element_save_controller.d.ts +0 -31
  150. package/dist/controllers/element_save_controller.d.ts.map +0 -1
  151. package/dist/controllers/empty_dom_controller.d.ts +0 -22
  152. package/dist/controllers/empty_dom_controller.d.ts.map +0 -1
  153. package/dist/controllers/equalize_controller.d.ts +0 -16
  154. package/dist/controllers/equalize_controller.d.ts.map +0 -1
  155. package/dist/controllers/forms/auto_submit_form_controller.d.ts +0 -23
  156. package/dist/controllers/forms/auto_submit_form_controller.d.ts.map +0 -1
  157. package/dist/controllers/forms/autosize_controller.d.ts +0 -9
  158. package/dist/controllers/forms/autosize_controller.d.ts.map +0 -1
  159. package/dist/controllers/forms/char_count_controller.d.ts +0 -21
  160. package/dist/controllers/forms/char_count_controller.d.ts.map +0 -1
  161. package/dist/controllers/forms/checkbox_disable_inputs_controller.d.ts +0 -17
  162. package/dist/controllers/forms/checkbox_disable_inputs_controller.d.ts.map +0 -1
  163. package/dist/controllers/forms/checkbox_enable_inputs_controller.d.ts +0 -17
  164. package/dist/controllers/forms/checkbox_enable_inputs_controller.d.ts.map +0 -1
  165. package/dist/controllers/forms/checkbox_select_all_controller.d.ts +0 -14
  166. package/dist/controllers/forms/checkbox_select_all_controller.d.ts.map +0 -1
  167. package/dist/controllers/forms/checkbox_xor_controller.d.ts +0 -9
  168. package/dist/controllers/forms/checkbox_xor_controller.d.ts.map +0 -1
  169. package/dist/controllers/forms/detect_dirty_controller.d.ts +0 -15
  170. package/dist/controllers/forms/detect_dirty_controller.d.ts.map +0 -1
  171. package/dist/controllers/forms/detect_dirty_form_controller.d.ts +0 -18
  172. package/dist/controllers/forms/detect_dirty_form_controller.d.ts.map +0 -1
  173. package/dist/controllers/forms/enable_inputs_controller.d.ts +0 -14
  174. package/dist/controllers/forms/enable_inputs_controller.d.ts.map +0 -1
  175. package/dist/controllers/forms/focus_steal_controller.d.ts +0 -12
  176. package/dist/controllers/forms/focus_steal_controller.d.ts.map +0 -1
  177. package/dist/controllers/forms/form_rc_controller.d.ts +0 -18
  178. package/dist/controllers/forms/form_rc_controller.d.ts.map +0 -1
  179. package/dist/controllers/forms/form_save_controller.d.ts +0 -32
  180. package/dist/controllers/forms/form_save_controller.d.ts.map +0 -1
  181. package/dist/controllers/forms/index.d.ts.map +0 -1
  182. package/dist/controllers/forms/limited_selection_checkboxes_controller.d.ts +0 -17
  183. package/dist/controllers/forms/limited_selection_checkboxes_controller.d.ts.map +0 -1
  184. package/dist/controllers/forms/navigate_form_errors_controller.d.ts +0 -41
  185. package/dist/controllers/forms/navigate_form_errors_controller.d.ts.map +0 -1
  186. package/dist/controllers/forms/nested_form_controller.d.ts +0 -22
  187. package/dist/controllers/forms/nested_form_controller.d.ts.map +0 -1
  188. package/dist/controllers/forms/password_confirm_controller.d.ts +0 -12
  189. package/dist/controllers/forms/password_confirm_controller.d.ts.map +0 -1
  190. package/dist/controllers/forms/password_peek_controller.d.ts +0 -9
  191. package/dist/controllers/forms/password_peek_controller.d.ts.map +0 -1
  192. package/dist/controllers/forms/remote_form_controller.d.ts +0 -14
  193. package/dist/controllers/forms/remote_form_controller.d.ts.map +0 -1
  194. package/dist/controllers/forms/sync_inputs_controller.d.ts +0 -20
  195. package/dist/controllers/forms/sync_inputs_controller.d.ts.map +0 -1
  196. package/dist/controllers/forms/value_warn_controller.d.ts +0 -31
  197. package/dist/controllers/forms/value_warn_controller.d.ts.map +0 -1
  198. package/dist/controllers/forms/word_count_controller.d.ts +0 -21
  199. package/dist/controllers/forms/word_count_controller.d.ts.map +0 -1
  200. package/dist/controllers/index.d.ts.map +0 -1
  201. package/dist/controllers/media/fallback_image_controller.d.ts +0 -20
  202. package/dist/controllers/media/fallback_image_controller.d.ts.map +0 -1
  203. package/dist/controllers/media/index.d.ts.map +0 -1
  204. package/dist/controllers/media/lightbox_image_controller.d.ts +0 -31
  205. package/dist/controllers/media/lightbox_image_controller.d.ts.map +0 -1
  206. package/dist/controllers/media/media_player_controller.d.ts +0 -10
  207. package/dist/controllers/media/media_player_controller.d.ts.map +0 -1
  208. package/dist/controllers/prefetch_controller.d.ts +0 -17
  209. package/dist/controllers/prefetch_controller.d.ts.map +0 -1
  210. package/dist/controllers/print_button_controller.d.ts +0 -8
  211. package/dist/controllers/print_button_controller.d.ts.map +0 -1
  212. package/dist/controllers/responsive_iframe_controller.d.ts +0 -17
  213. package/dist/controllers/responsive_iframe_controller.d.ts.map +0 -1
  214. package/dist/controllers/scroll/index.d.ts.map +0 -1
  215. package/dist/controllers/scroll/scroll_container_controller.d.ts +0 -22
  216. package/dist/controllers/scroll/scroll_container_controller.d.ts.map +0 -1
  217. package/dist/controllers/scroll/scroll_into_focus_controller.d.ts +0 -16
  218. package/dist/controllers/scroll/scroll_into_focus_controller.d.ts.map +0 -1
  219. package/dist/controllers/scroll/scroll_to_bottom_controller.d.ts +0 -12
  220. package/dist/controllers/scroll/scroll_to_bottom_controller.d.ts.map +0 -1
  221. package/dist/controllers/scroll/scroll_to_controller.d.ts +0 -18
  222. package/dist/controllers/scroll/scroll_to_controller.d.ts.map +0 -1
  223. package/dist/controllers/scroll/scroll_to_top_controller.d.ts +0 -12
  224. package/dist/controllers/scroll/scroll_to_top_controller.d.ts.map +0 -1
  225. package/dist/controllers/self_destruct_controller.d.ts +0 -9
  226. package/dist/controllers/self_destruct_controller.d.ts.map +0 -1
  227. package/dist/controllers/signal/events.d.ts +0 -5
  228. package/dist/controllers/signal/events.d.ts.map +0 -1
  229. package/dist/controllers/signal/expressions.d.ts +0 -2
  230. package/dist/controllers/signal/expressions.d.ts.map +0 -1
  231. package/dist/controllers/signal/index.d.ts.map +0 -1
  232. package/dist/controllers/signal/signal_action_controller.d.ts +0 -15
  233. package/dist/controllers/signal/signal_action_controller.d.ts.map +0 -1
  234. package/dist/controllers/signal/signal_dom_children_controller.d.ts +0 -17
  235. package/dist/controllers/signal/signal_dom_children_controller.d.ts.map +0 -1
  236. package/dist/controllers/signal/signal_input_controller.d.ts +0 -20
  237. package/dist/controllers/signal/signal_input_controller.d.ts.map +0 -1
  238. package/dist/controllers/signal/signal_visibility_controller.d.ts +0 -18
  239. package/dist/controllers/signal/signal_visibility_controller.d.ts.map +0 -1
  240. package/dist/controllers/sticky_controller.d.ts +0 -16
  241. package/dist/controllers/sticky_controller.d.ts.map +0 -1
  242. package/dist/controllers/tables/index.d.ts.map +0 -1
  243. package/dist/controllers/tables/table_sort_controller.d.ts +0 -20
  244. package/dist/controllers/tables/table_sort_controller.d.ts.map +0 -1
  245. package/dist/controllers/tables/table_truncate_controller.d.ts +0 -26
  246. package/dist/controllers/tables/table_truncate_controller.d.ts.map +0 -1
  247. package/dist/controllers/teleport_controller.d.ts +0 -16
  248. package/dist/controllers/teleport_controller.d.ts.map +0 -1
  249. package/dist/controllers/temporary_state_controller.d.ts +0 -27
  250. package/dist/controllers/temporary_state_controller.d.ts.map +0 -1
  251. package/dist/controllers/toggle_class_controller.d.ts +0 -36
  252. package/dist/controllers/toggle_class_controller.d.ts.map +0 -1
  253. package/dist/controllers/trix_modifier_controller.d.ts +0 -88
  254. package/dist/controllers/trix_modifier_controller.d.ts.map +0 -1
  255. package/dist/controllers/turbo_frame_rc_controller.d.ts +0 -21
  256. package/dist/controllers/turbo_frame_rc_controller.d.ts.map +0 -1
  257. package/dist/controllers/turbo_frame_refresh_controller.d.ts +0 -14
  258. package/dist/controllers/turbo_frame_refresh_controller.d.ts.map +0 -1
  259. package/dist/controllers/utility/alert_controller.d.ts +0 -9
  260. package/dist/controllers/utility/alert_controller.d.ts.map +0 -1
  261. package/dist/controllers/utility/fullscreen_controller.d.ts +0 -8
  262. package/dist/controllers/utility/fullscreen_controller.d.ts.map +0 -1
  263. package/dist/controllers/utility/index.d.ts.map +0 -1
  264. package/dist/controllers/utility/intersection_controller.d.ts +0 -14
  265. package/dist/controllers/utility/intersection_controller.d.ts.map +0 -1
  266. package/dist/controllers/utility/interval_controller.d.ts +0 -11
  267. package/dist/controllers/utility/interval_controller.d.ts.map +0 -1
  268. package/dist/controllers/utility/presence_controller.d.ts +0 -14
  269. package/dist/controllers/utility/presence_controller.d.ts.map +0 -1
  270. package/dist/controllers/utility/print_controller.d.ts +0 -5
  271. package/dist/controllers/utility/print_controller.d.ts.map +0 -1
  272. package/dist/controllers/utility/timeout_controller.d.ts +0 -10
  273. package/dist/controllers/utility/timeout_controller.d.ts.map +0 -1
  274. package/dist/controllers/utility/user_focus_controller.d.ts +0 -9
  275. package/dist/controllers/utility/user_focus_controller.d.ts.map +0 -1
  276. package/dist/controllers/visual/clock_controller.d.ts +0 -16
  277. package/dist/controllers/visual/clock_controller.d.ts.map +0 -1
  278. package/dist/controllers/visual/countdown_controller.d.ts +0 -46
  279. package/dist/controllers/visual/countdown_controller.d.ts.map +0 -1
  280. package/dist/controllers/visual/duration_controller.d.ts +0 -26
  281. package/dist/controllers/visual/duration_controller.d.ts.map +0 -1
  282. package/dist/controllers/visual/index.d.ts.map +0 -1
  283. package/dist/controllers/visual/tabs_controller.d.ts +0 -30
  284. package/dist/controllers/visual/tabs_controller.d.ts.map +0 -1
  285. package/dist/controllers/visual/time_distance_controller.d.ts +0 -16
  286. package/dist/controllers/visual/time_distance_controller.d.ts.map +0 -1
  287. package/dist/controllers/visual/tree_view_controller.d.ts +0 -26
  288. package/dist/controllers/visual/tree_view_controller.d.ts.map +0 -1
  289. package/dist/index.d.ts.map +0 -1
  290. package/dist/mixins/create_mixin.d.ts +0 -3
  291. package/dist/mixins/create_mixin.d.ts.map +0 -1
  292. package/dist/mixins/index.d.ts.map +0 -1
  293. package/dist/mixins/install_class_methods.d.ts +0 -6
  294. package/dist/mixins/install_class_methods.d.ts.map +0 -1
  295. package/dist/mixins/use_click_outside.d.ts +0 -5
  296. package/dist/mixins/use_click_outside.d.ts.map +0 -1
  297. package/dist/mixins/use_event_bus.d.ts +0 -8
  298. package/dist/mixins/use_event_bus.d.ts.map +0 -1
  299. package/dist/mixins/use_event_listener.d.ts +0 -20
  300. package/dist/mixins/use_event_listener.d.ts.map +0 -1
  301. package/dist/mixins/use_fullscreen.d.ts +0 -9
  302. package/dist/mixins/use_fullscreen.d.ts.map +0 -1
  303. package/dist/mixins/use_geolocation.d.ts +0 -19
  304. package/dist/mixins/use_geolocation.d.ts.map +0 -1
  305. package/dist/mixins/use_hover.d.ts +0 -5
  306. package/dist/mixins/use_hover.d.ts.map +0 -1
  307. package/dist/mixins/use_injected_html.d.ts +0 -11
  308. package/dist/mixins/use_injected_html.d.ts.map +0 -1
  309. package/dist/mixins/use_intersection.d.ts +0 -14
  310. package/dist/mixins/use_intersection.d.ts.map +0 -1
  311. package/dist/mixins/use_interval.d.ts +0 -3
  312. package/dist/mixins/use_interval.d.ts.map +0 -1
  313. package/dist/mixins/use_localstorage.d.ts +0 -21
  314. package/dist/mixins/use_localstorage.d.ts.map +0 -1
  315. package/dist/mixins/use_mutation_observer.d.ts +0 -3
  316. package/dist/mixins/use_mutation_observer.d.ts.map +0 -1
  317. package/dist/mixins/use_temporary_content.d.ts +0 -6
  318. package/dist/mixins/use_temporary_content.d.ts.map +0 -1
  319. package/dist/mixins/use_timeout.d.ts +0 -3
  320. package/dist/mixins/use_timeout.d.ts.map +0 -1
  321. package/dist/mixins/use_trix_modifiers.d.ts +0 -11
  322. package/dist/mixins/use_trix_modifiers.d.ts.map +0 -1
  323. package/dist/stimulus-library.cjs.js +0 -2
  324. package/dist/stimulus-library.cjs.js.map +0 -1
  325. package/dist/stimulus-library.es.js +0 -5094
  326. package/dist/stimulus-library.es.js.map +0 -1
  327. package/dist/stimulus-library.umd.js +0 -2
  328. package/dist/stimulus-library.umd.js.map +0 -1
  329. package/dist/utilities/arrays.d.ts +0 -2
  330. package/dist/utilities/arrays.d.ts.map +0 -1
  331. package/dist/utilities/base_controller.d.ts +0 -11
  332. package/dist/utilities/base_controller.d.ts.map +0 -1
  333. package/dist/utilities/elements.d.ts +0 -49
  334. package/dist/utilities/elements.d.ts.map +0 -1
  335. package/dist/utilities/ephemeral_controller.d.ts +0 -6
  336. package/dist/utilities/ephemeral_controller.d.ts.map +0 -1
  337. package/dist/utilities/event_bus.d.ts +0 -4
  338. package/dist/utilities/event_bus.d.ts.map +0 -1
  339. package/dist/utilities/events.d.ts +0 -3
  340. package/dist/utilities/events.d.ts.map +0 -1
  341. package/dist/utilities/fetchRetry.d.ts +0 -2
  342. package/dist/utilities/fetchRetry.d.ts.map +0 -1
  343. package/dist/utilities/index.d.ts.map +0 -1
  344. package/dist/utilities/logging.d.ts +0 -6
  345. package/dist/utilities/logging.d.ts.map +0 -1
  346. package/dist/utilities/reactive.d.ts +0 -2
  347. package/dist/utilities/reactive.d.ts.map +0 -1
  348. package/dist/utilities/request_submit.d.ts +0 -3
  349. package/dist/utilities/request_submit.d.ts.map +0 -1
  350. package/dist/utilities/scroll.d.ts +0 -11
  351. package/dist/utilities/scroll.d.ts.map +0 -1
  352. package/dist/utilities/stimulus.d.ts +0 -3
  353. package/dist/utilities/stimulus.d.ts.map +0 -1
  354. package/dist/utilities/strings.d.ts +0 -2
  355. package/dist/utilities/strings.d.ts.map +0 -1
  356. package/dist/utilities/turbo.d.ts +0 -2
  357. package/dist/utilities/turbo.d.ts.map +0 -1
@@ -0,0 +1,62 @@
1
+ import { reactive } from "../utilities/reactive";
2
+ import { useMixin } from "./create_mixin";
3
+ export function useGeolocation(controller, options = {}, update, error) {
4
+ // Ensure passed functions are bound to the correct controller scope
5
+ if (update) {
6
+ update = update.bind(controller);
7
+ }
8
+ if (error) {
9
+ error = error.bind(controller);
10
+ }
11
+ // Default options to pass to the navigator.geolocation.watchPosition() method
12
+ const { enableHighAccuracy = true, maximumAge = 30000, timeout = 27000, } = options;
13
+ const isSupported = navigator && 'geolocation' in navigator;
14
+ // Create a reactive object to store the geolocation data
15
+ const values = reactive({
16
+ locatedAt: null,
17
+ error: null,
18
+ coords: {
19
+ accuracy: 0,
20
+ latitude: Infinity,
21
+ longitude: Infinity,
22
+ altitude: null,
23
+ altitudeAccuracy: null,
24
+ heading: null,
25
+ speed: null,
26
+ },
27
+ teardown: () => {
28
+ if (watcher) {
29
+ navigator.geolocation.clearWatch(watcher);
30
+ watcher = null;
31
+ }
32
+ },
33
+ });
34
+ let setup = () => {
35
+ if (isSupported) {
36
+ watcher = navigator.geolocation.watchPosition((position) => {
37
+ // Update reactive values
38
+ values.locatedAt = position.timestamp;
39
+ values.coords = position.coords;
40
+ values.error = null;
41
+ // Fire user callback if provided
42
+ if (update) {
43
+ update(position);
44
+ }
45
+ }, (err) => {
46
+ // Update reactive values
47
+ values.error = err;
48
+ // Fire user callback if provided
49
+ if (error) {
50
+ error(err);
51
+ }
52
+ }, {
53
+ enableHighAccuracy,
54
+ maximumAge,
55
+ timeout,
56
+ });
57
+ }
58
+ };
59
+ let watcher = null;
60
+ useMixin(controller, setup, values.teardown);
61
+ return values;
62
+ }
@@ -0,0 +1,29 @@
1
+ import { useEventListener } from "../mixins/use_event_listener";
2
+ import { useMixin } from "./create_mixin";
3
+ export function useHover(controller, element, enter, leave) {
4
+ let teardownEnter = null;
5
+ let teardownLeave = null;
6
+ if (enter) {
7
+ enter = enter.bind(controller);
8
+ let { teardown: _teardownEnter } = useEventListener(controller, element, "mouseenter", enter);
9
+ teardownEnter = _teardownEnter;
10
+ }
11
+ if (leave) {
12
+ leave = leave.bind(controller);
13
+ let { teardown: _teardownLeave } = useEventListener(controller, element, "mouseleave", leave);
14
+ teardownLeave = _teardownLeave;
15
+ }
16
+ let setup = () => void 0;
17
+ let teardown = () => {
18
+ if (teardownEnter) {
19
+ teardownEnter();
20
+ }
21
+ if (teardownLeave) {
22
+ teardownLeave();
23
+ }
24
+ };
25
+ useMixin(controller, setup, teardown);
26
+ return {
27
+ teardown,
28
+ };
29
+ }
@@ -0,0 +1,37 @@
1
+ import { useMixin } from "./create_mixin";
2
+ export function useInjectedFragment(controller, targetElement, insertPosition, fragment, options = {}) {
3
+ let nodes = Array.from(fragment.childNodes);
4
+ let setup = () => {
5
+ let parent = targetElement.parentElement;
6
+ if (["beforebegin", "afterend"].includes(insertPosition) && parent == null) {
7
+ throw new Error("Cannot insert beforebegin into a node with no parent");
8
+ }
9
+ switch (insertPosition) {
10
+ case 'beforeend':
11
+ targetElement.append(fragment);
12
+ break;
13
+ case "afterbegin":
14
+ targetElement.prepend(fragment);
15
+ break;
16
+ case "beforebegin":
17
+ parent.insertBefore(fragment, targetElement);
18
+ break;
19
+ case "afterend":
20
+ parent.insertBefore(fragment, targetElement);
21
+ break;
22
+ }
23
+ };
24
+ let teardown = options.cleanup ? () => nodes.forEach(node => node.remove()) : () => void 0;
25
+ useMixin(controller, setup, teardown);
26
+ return [nodes, teardown];
27
+ }
28
+ export function useInjectedHTML(controller, targetElement, insertPosition, html, options = {}) {
29
+ const fragment = document.createRange().createContextualFragment(html);
30
+ return useInjectedFragment(controller, targetElement, insertPosition, fragment, options);
31
+ }
32
+ export function useInjectedElement(controller, targetElement, insertPosition, element, options = {}) {
33
+ const fragment = new DocumentFragment();
34
+ fragment.append(element);
35
+ let [nodes, teardown] = useInjectedFragment(controller, targetElement, insertPosition, fragment, options);
36
+ return [nodes[0], teardown];
37
+ }
@@ -0,0 +1,45 @@
1
+ import { useMixin } from "./create_mixin";
2
+ export function useIntersectionObserver(controller, handler, options) {
3
+ handler = handler.bind(controller);
4
+ let observer = new IntersectionObserver(handler, options);
5
+ let teardown = () => {
6
+ observer === null || observer === void 0 ? void 0 : observer.disconnect();
7
+ observer = null;
8
+ };
9
+ let observe = (element) => observer === null || observer === void 0 ? void 0 : observer.observe(element);
10
+ let unobserve = (element) => observer === null || observer === void 0 ? void 0 : observer.unobserve(element);
11
+ return {
12
+ observer,
13
+ teardown,
14
+ observe,
15
+ unobserve,
16
+ };
17
+ }
18
+ export function useIntersection(controller, element, appear, disappear, options) {
19
+ if (appear) {
20
+ appear = appear.bind(controller);
21
+ }
22
+ if (disappear) {
23
+ disappear = disappear.bind(controller);
24
+ }
25
+ let opts = options !== null && options !== void 0 ? options : {};
26
+ let processEntries = (entries) => {
27
+ entries.forEach((entry) => {
28
+ if (entry.isIntersecting) {
29
+ appear && appear(entry);
30
+ }
31
+ else {
32
+ disappear && disappear(entry);
33
+ }
34
+ });
35
+ };
36
+ let { observer, observe, unobserve, teardown } = useIntersectionObserver(controller, processEntries, opts);
37
+ let setup = () => observe(element);
38
+ useMixin(controller, setup, teardown);
39
+ return {
40
+ observer,
41
+ observe: () => observe(element),
42
+ unobserve: () => unobserve(element),
43
+ teardown,
44
+ };
45
+ }
@@ -0,0 +1,13 @@
1
+ import { useMixin } from "./create_mixin";
2
+ export function useInterval(controller, handler, interval) {
3
+ handler = handler.bind(controller);
4
+ let intervalHandle = null;
5
+ let setup = () => intervalHandle = setInterval(handler, interval);
6
+ let teardown = () => {
7
+ if (intervalHandle !== null) {
8
+ clearInterval(intervalHandle);
9
+ }
10
+ };
11
+ useMixin(controller, setup, teardown);
12
+ return teardown;
13
+ }
@@ -0,0 +1,122 @@
1
+ import { reactive } from "../utilities/reactive";
2
+ export const StorageSerializers = {
3
+ boolean: {
4
+ deserialize: (v) => v === 'true',
5
+ serialize: (v) => String(v),
6
+ isEmpty: (v) => v === '' || v === null,
7
+ },
8
+ object: {
9
+ deserialize: (v) => JSON.parse(v),
10
+ serialize: (v) => JSON.stringify(v),
11
+ isEmpty: (v) => {
12
+ const values = Object.values(JSON.parse(v));
13
+ return values.length === 0 || values.every(v => v === '' || v === null);
14
+ },
15
+ },
16
+ number: {
17
+ deserialize: (v) => Number.parseFloat(v),
18
+ serialize: (v) => String(v),
19
+ isEmpty: (v) => v === '' || v === null,
20
+ },
21
+ any: {
22
+ deserialize: (v) => v,
23
+ serialize: (v) => String(v),
24
+ isEmpty: (v) => v === '' || v === null,
25
+ },
26
+ string: {
27
+ deserialize: (v) => v,
28
+ serialize: (v) => String(v),
29
+ isEmpty: (v) => v === '' || v === null,
30
+ },
31
+ map: {
32
+ deserialize: (v) => new Map(JSON.parse(v)),
33
+ serialize: (v) => JSON.stringify(Array.from(v.entries())),
34
+ isEmpty: (v) => {
35
+ const values = Array.from(v.values());
36
+ return values.length === 0 || values.every(v => v === '' || v === null);
37
+ },
38
+ },
39
+ set: {
40
+ deserialize: (v) => new Set(JSON.parse(v)),
41
+ serialize: (v) => JSON.stringify(Array.from(v.entries())),
42
+ isEmpty: (v) => {
43
+ const values = Array.from(v.values());
44
+ return values.length === 0 || values.every(v => v === '' || v === null);
45
+ },
46
+ },
47
+ };
48
+ export function useLocalStorage(controller, key, defaultValue, opts = { writeDefaults: true }) {
49
+ let type;
50
+ let { writeDefaults } = opts;
51
+ if (defaultValue == null) {
52
+ type = 'any';
53
+ }
54
+ else if (defaultValue instanceof Set) {
55
+ type = 'set';
56
+ }
57
+ else if (defaultValue instanceof Map) {
58
+ type = 'map';
59
+ }
60
+ else if (typeof defaultValue === 'boolean') {
61
+ type = 'boolean';
62
+ }
63
+ else if (typeof defaultValue === 'string') {
64
+ type = 'string';
65
+ }
66
+ else if (typeof defaultValue === 'object') {
67
+ type = 'object';
68
+ }
69
+ else if (Array.isArray(defaultValue)) {
70
+ type = 'object';
71
+ }
72
+ else if (!Number.isNaN(defaultValue)) {
73
+ type = 'number';
74
+ }
75
+ else {
76
+ type = 'any';
77
+ }
78
+ let data = reactive({
79
+ value: defaultValue,
80
+ });
81
+ let storage = localStorage;
82
+ const serializer = StorageSerializers[type];
83
+ const read = () => {
84
+ const rawValue = storage.getItem(key);
85
+ if (rawValue == null) {
86
+ data.value = defaultValue;
87
+ if (writeDefaults && defaultValue !== null) {
88
+ storage.setItem(key, serializer.serialize(defaultValue));
89
+ }
90
+ }
91
+ else {
92
+ data.value = serializer.deserialize(rawValue);
93
+ }
94
+ return data.value;
95
+ };
96
+ const write = (value) => {
97
+ storage.setItem(key, serializer.serialize(value));
98
+ data.value = value;
99
+ };
100
+ const clear = () => {
101
+ storage.removeItem(key);
102
+ data.value = defaultValue;
103
+ return data.value;
104
+ };
105
+ const isEmpty = () => {
106
+ let rawValue = storage.getItem(key);
107
+ return serializer.isEmpty(rawValue);
108
+ };
109
+ read();
110
+ return {
111
+ get value() {
112
+ return read();
113
+ },
114
+ set value(value) {
115
+ write(value);
116
+ },
117
+ read,
118
+ clear,
119
+ write,
120
+ isEmpty,
121
+ };
122
+ }
@@ -0,0 +1,9 @@
1
+ import { useMixin } from "./create_mixin";
2
+ export function useMutationObserver(controller, element, handler, options) {
3
+ handler = handler.bind(controller);
4
+ let observer = new MutationObserver(handler);
5
+ let setup = () => observer.observe(element, options);
6
+ let teardown = () => observer.disconnect();
7
+ useMixin(controller, setup, teardown);
8
+ return teardown;
9
+ }
@@ -0,0 +1,38 @@
1
+ import { useMixin } from "./create_mixin";
2
+ import { useTimeout } from "./use_timeout";
3
+ import { isHTMLInputElement } from "../utilities/elements";
4
+ export function useTemporaryContent(controller, target, content, timeout, teardownCallback) {
5
+ const setContent = (element, text) => {
6
+ if (isHTMLInputElement(element)) {
7
+ element.value = text;
8
+ }
9
+ else {
10
+ element.textContent = text;
11
+ }
12
+ };
13
+ const getContent = (element) => {
14
+ return isHTMLInputElement(element) ? element.value : element.innerHTML;
15
+ };
16
+ let cleanupTimeout = () => void 0;
17
+ let originalText = getContent(target);
18
+ const teardown = () => {
19
+ setContent(target, originalText);
20
+ cleanupTimeout();
21
+ if (teardownCallback) {
22
+ teardownCallback.call(controller);
23
+ }
24
+ };
25
+ const setup = () => {
26
+ setContent(target, content);
27
+ if (timeout !== undefined) {
28
+ cleanupTimeout = useTimeout(controller, teardown, timeout);
29
+ }
30
+ };
31
+ useMixin(controller, setup, teardown);
32
+ return {
33
+ teardown,
34
+ update(newContent) {
35
+ setContent(target, newContent);
36
+ },
37
+ };
38
+ }
@@ -0,0 +1,20 @@
1
+ import { useMixin } from "./create_mixin";
2
+ export function useTimeout(controller, handler, timeout) {
3
+ let controllerDisconnect;
4
+ let timeoutHandle = null;
5
+ handler = handler.bind(controller);
6
+ let newHandler = () => {
7
+ handler();
8
+ timeoutHandle = null;
9
+ Object.assign(controller, { disconnect: controllerDisconnect });
10
+ };
11
+ let setup = () => timeoutHandle = setTimeout(newHandler, timeout);
12
+ let teardown = () => {
13
+ if (timeoutHandle !== null) {
14
+ clearTimeout(timeoutHandle);
15
+ timeoutHandle = null;
16
+ }
17
+ };
18
+ controllerDisconnect = useMixin(controller, setup, teardown);
19
+ return teardown;
20
+ }
@@ -0,0 +1,71 @@
1
+ import { controllerMethod } from "../utilities/stimulus";
2
+ import { Controller } from "@hotwired/stimulus";
3
+ export class TrixComposableController extends Controller {
4
+ }
5
+ export function useTrixModifiers(controller) {
6
+ // keep a copy of the lifecycle function of the controller
7
+ const controllerDisconnect = controller.disconnect.bind(controller);
8
+ let observing = false;
9
+ let observerCallback = (entries, observer) => {
10
+ entries.forEach(mutation => {
11
+ if (mutation.type === 'childList' && Array.from(mutation.addedNodes).some((el) => el.tagName === 'TRIX-TOOLBAR')) {
12
+ attemptSetup();
13
+ observer.disconnect();
14
+ }
15
+ });
16
+ };
17
+ let pasteHandler = (event) => controllerMethod(controller, 'pasteEvent').call(controller, event);
18
+ let observer = new MutationObserver(observerCallback);
19
+ let attemptSetup = () => {
20
+ if (controller.element.tagName !== 'TRIX-EDITOR') {
21
+ throw new Error('Expected controller to be mounted on an instance of <trix-editor>');
22
+ }
23
+ let editor = controller.element;
24
+ let editorParent = controller.element.parentElement;
25
+ if (editorParent == null) {
26
+ throw new Error('Could not traverse DOM tree from <trix-editor>');
27
+ }
28
+ editor.addEventListener('trix-paste', pasteHandler);
29
+ let toolbar = editorParent.querySelector('trix-toolbar');
30
+ if (!observing && !toolbar) {
31
+ // toolbar is not in the DOM yet, wait for it to arrive before running setup
32
+ observing = true;
33
+ observer.observe(editorParent, { childList: true });
34
+ return;
35
+ }
36
+ else if (!toolbar) {
37
+ // Fallback, in case this runs twice, or mutation observer logic fails
38
+ throw new Error('Could not find an instance of <trix-toolbar> that is a sibling of this <trix-editor>');
39
+ }
40
+ else {
41
+ // Do not need MutationObserver, all elements are present and correct
42
+ observer.disconnect();
43
+ }
44
+ controllerMethod(controller, 'install').call(controller, { toolbar, editor });
45
+ };
46
+ let teardown = () => {
47
+ if (controller.element.tagName !== 'TRIX-EDITOR') {
48
+ throw new Error('Expected controller to be mounted on an instance of <trix-editor>');
49
+ }
50
+ let editor = controller.element;
51
+ let editorParent = controller.element.parentElement;
52
+ if (editorParent == null) {
53
+ throw new Error('Could not traverse DOM tree from <trix-editor>');
54
+ }
55
+ editor.removeEventListener('trix-paste', pasteHandler);
56
+ let toolbar = editorParent.querySelector('trix-toolbar');
57
+ if (!toolbar) {
58
+ throw new Error('Could not find <trix-toolbar> that is a sibling of this <trix-editor> element');
59
+ }
60
+ controllerMethod(controller, 'uninstall').call(controller, { toolbar, editor });
61
+ };
62
+ attemptSetup();
63
+ Object.assign(controller, {
64
+ disconnect() {
65
+ observer.disconnect();
66
+ teardown();
67
+ controllerMethod(controller, 'uninstall').call({ toolbar, editor: controller.element });
68
+ controllerDisconnect();
69
+ },
70
+ });
71
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ // @ts-ignore
3
+ if (!String.prototype.replaceAll) {
4
+ // @ts-ignore
5
+ String.prototype.replaceAll = function (str, newStr) {
6
+ // If a regex pattern
7
+ if (Object.prototype.toString.call(str).toLowerCase() === '[object regexp]') {
8
+ return this.replace(str, newStr);
9
+ }
10
+ // If a string
11
+ return this.replace(new RegExp(str, 'g'), newStr);
12
+ };
13
+ }
@@ -0,0 +1,3 @@
1
+ export function wrapArray(x) {
2
+ return Array.isArray(x) ? x : [x];
3
+ }
@@ -0,0 +1,56 @@
1
+ import { Controller } from "@hotwired/stimulus";
2
+ import { log, logProperty } from "./logging";
3
+ import { dispatchEvent } from "./events";
4
+ export class BaseController extends Controller {
5
+ constructor(context) {
6
+ super(context);
7
+ // @ts-ignore
8
+ if (!this.application.debug) {
9
+ return this;
10
+ }
11
+ return new Proxy(this, {
12
+ get: (obj, prop) => {
13
+ let returnVal = Reflect.get(obj, prop);
14
+ let self = this;
15
+ if ("logFormattedMessage" in this.application) {
16
+ return returnVal;
17
+ }
18
+ if (logProperty(prop.toString())) {
19
+ if (typeof returnVal == "function") {
20
+ return new Proxy(returnVal, {
21
+ apply(target, thisArg, argArray) {
22
+ log(self, prop.toString(), {
23
+ args: argArray,
24
+ });
25
+ return Reflect.apply(target, thisArg, argArray);
26
+ },
27
+ });
28
+ }
29
+ else {
30
+ log(this, prop.toString());
31
+ }
32
+ }
33
+ return returnVal;
34
+ },
35
+ });
36
+ }
37
+ get el() {
38
+ return this.element;
39
+ }
40
+ get isTurboPreview() {
41
+ return document.documentElement.hasAttribute('data-turbo-preview') || document.documentElement.hasAttribute('data-turbolinks-preview');
42
+ }
43
+ get isTurbolinksPreview() {
44
+ return this.isTurboPreview;
45
+ }
46
+ get csrfToken() {
47
+ return this.metaValue('csrf-token');
48
+ }
49
+ metaValue(name) {
50
+ const element = document.head.querySelector(`meta[name="${name}"]`);
51
+ return (element === null || element === void 0 ? void 0 : element.getAttribute('content')) || null;
52
+ }
53
+ dispatchEvent(element, eventName, options = {}) {
54
+ dispatchEvent(this, element, eventName, options);
55
+ }
56
+ }
@@ -0,0 +1,102 @@
1
+ export function isHTMLLinkElement(element) {
2
+ return element.nodeName == "LINK";
3
+ }
4
+ export function isHTMLAnchorElement(element) {
5
+ return element.nodeName == "A";
6
+ }
7
+ export function isHTMLFormElement(element) {
8
+ return element.nodeName == "FORM";
9
+ }
10
+ export function isHTMLInputElement(element) {
11
+ return element.nodeName == "INPUT";
12
+ }
13
+ export function isHTMLLabelElement(element) {
14
+ return element.nodeName == "LABEL";
15
+ }
16
+ export function isHTMLTextAreaElement(element) {
17
+ return element.nodeName == "TEXTAREA";
18
+ }
19
+ export function isHTMLButtonElement(element) {
20
+ return element.nodeName == "BUTTON";
21
+ }
22
+ export function isHTMLSelectElement(element) {
23
+ return element.nodeName == "SELECT";
24
+ }
25
+ export function isHTMLImageElement(element) {
26
+ return element.nodeName == "IMG";
27
+ }
28
+ export function isHTMLButtonInputElement(element) {
29
+ return element.nodeName == "INPUT" && element.type == "button";
30
+ }
31
+ export function isHTMLSubmitInputElement(element) {
32
+ return element.nodeName == "INPUT" && element.type == "submit";
33
+ }
34
+ export function isHTMLResetInputElement(element) {
35
+ return element.nodeName == "INPUT" && element.type == "reset";
36
+ }
37
+ export function isHTMLButtonButtonElement(element) {
38
+ return element.nodeName == "BUTTON" && element.type == "button";
39
+ }
40
+ export function isHTMLSubmitButtonElement(element) {
41
+ return element.nodeName == "BUTTON" && element.type == "submit";
42
+ }
43
+ export function isHTMLResetButtonElement(element) {
44
+ return element.nodeName == "BUTTON" && element.type == "reset";
45
+ }
46
+ export function isTypeOfResetButtonElement(element) {
47
+ return isHTMLResetButtonElement(element) || isHTMLResetInputElement(element);
48
+ }
49
+ export function isTypeOfSubmitButtonElement(element) {
50
+ return isHTMLSubmitButtonElement(element) || isHTMLSubmitInputElement(element);
51
+ }
52
+ export function isTypeOfButtonableElement(element) {
53
+ return isTypeOfResetButtonElement(element) || isTypeOfSubmitButtonElement(element) || isHTMLButtonButtonElement(element);
54
+ }
55
+ export function isElementCheckable(element) {
56
+ return isHTMLInputElement(element) && (element.type === "radio" || element.type === "checkbox");
57
+ }
58
+ export function isTypeOfFormInputElement(element) {
59
+ return isHTMLInputElement(element) || isHTMLSelectElement(element) || isHTMLTextAreaElement(element);
60
+ }
61
+ export function createHiddenButton(type) {
62
+ let button = document.createElement('button');
63
+ button.type = type;
64
+ button.style.display = 'none';
65
+ button.dataset.sythentic = 'true';
66
+ return button;
67
+ }
68
+ export function createHiddenInput(name, value) {
69
+ let input = document.createElement('input');
70
+ input.type = 'hidden';
71
+ input.name = name;
72
+ input.value = value;
73
+ return input;
74
+ }
75
+ export function insertElement(targetElement, insertPosition, element) {
76
+ let createdElement = targetElement.insertAdjacentElement(insertPosition, element);
77
+ if (!createdElement) {
78
+ throw new Error(`Failed to insert element ${element.nodeName} into ${targetElement.nodeName}`);
79
+ }
80
+ return createdElement;
81
+ }
82
+ export function insertHiddenInput(name, value, targetElement, insertPosition) {
83
+ return insertElement(targetElement, insertPosition, createHiddenInput(name, value));
84
+ }
85
+ export function insertHiddenButton(type, targetElement, insertPosition) {
86
+ return insertElement(targetElement, insertPosition, createHiddenButton(type));
87
+ }
88
+ export function getAllRadiosInGroup(radio) {
89
+ let parent = radio.form || document;
90
+ return Array.from(parent.querySelectorAll(`input[type="radio"][name="${radio.name}"]`));
91
+ }
92
+ export function getOtherRadiosInGroup(radio) {
93
+ return getAllRadiosInGroup(radio).filter((r) => r !== radio);
94
+ }
95
+ export function isElementInViewport(el) {
96
+ const rect = el.getBoundingClientRect();
97
+ const windowHeight = window.innerHeight || document.documentElement.clientHeight;
98
+ const windowWidth = window.innerWidth || document.documentElement.clientWidth;
99
+ const vertInView = rect.top <= windowHeight && rect.top + rect.height >= 0;
100
+ const horInView = rect.left <= windowWidth && rect.left + rect.width >= 0;
101
+ return vertInView && horInView;
102
+ }
@@ -0,0 +1,42 @@
1
+ import camelCase from "lodash-es/camelCase";
2
+ import { BaseController } from "./base_controller";
3
+ import '../polyfills/string.replaceAll';
4
+ export class EphemeralController extends BaseController {
5
+ _cleanupSelf() {
6
+ this.cleanup(this.el);
7
+ }
8
+ cleanup(element) {
9
+ var _a, _b, _c;
10
+ // @ts-ignore
11
+ element.dataset.controller = ((_a = element.dataset.controller) === null || _a === void 0 ? void 0 : _a.replaceAll(new RegExp(`(\\s|^)${this.identifier}(\\s|$)`, "g"), "")) || "";
12
+ if (element.dataset.controller == "") {
13
+ // If there are no controllers left, remove the attribute
14
+ delete element.dataset.controller;
15
+ }
16
+ let substringIdentifierValueRegex = new RegExp(`(\\s|^)${this.identifier}\\..+?(\\s|$)`, "g");
17
+ // @ts-ignore
18
+ element.dataset.target = ((_b = element.dataset.target) === null || _b === void 0 ? void 0 : _b.replaceAll(substringIdentifierValueRegex, "")) || "";
19
+ delete element.dataset[camelCase(`${this.identifier}-target`)];
20
+ if (element.dataset.target == "") {
21
+ // If there are no targets left, remove the attribute
22
+ delete element.dataset.target;
23
+ }
24
+ // @ts-ignore
25
+ element.dataset.action = ((_c = element.dataset.target) === null || _c === void 0 ? void 0 : _c.replaceAll(substringIdentifierValueRegex, "")) || "";
26
+ delete element.dataset[camelCase(`${this.identifier}-action`)];
27
+ if (element.dataset.action == "") {
28
+ // If there are no actions left, remove the attribute
29
+ delete element.dataset.action;
30
+ }
31
+ // @ts-ignore
32
+ let values = this.constructor.values;
33
+ if (values) {
34
+ Object.keys(values).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-value`)]);
35
+ }
36
+ // @ts-ignore
37
+ let classes = this.constructor.classes;
38
+ if (classes) {
39
+ Object.keys(classes).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-class`)]);
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,2 @@
1
+ import mitt from 'mitt';
2
+ export const EventBus = mitt();