stimulus-library 0.7.3 → 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 (356) hide show
  1. package/README.md +1 -1
  2. package/dist/controllers/ajax/async_block_controller.js +30 -0
  3. package/dist/controllers/ajax/{index.d.ts → index.js} +0 -1
  4. package/dist/controllers/ajax/lazy_block_controller.js +37 -0
  5. package/dist/controllers/ajax/load_block_controller.js +63 -0
  6. package/dist/controllers/ajax/poll_block_controller.js +35 -0
  7. package/dist/controllers/anchor_spy_controller.js +47 -0
  8. package/dist/controllers/back_link_controller.js +25 -0
  9. package/dist/controllers/clipboard_controller.js +35 -0
  10. package/dist/controllers/confirm_controller.js +33 -0
  11. package/dist/controllers/confirm_navigation_controller.js +29 -0
  12. package/dist/controllers/debug_controller.js +7 -0
  13. package/dist/controllers/disable_with_controller.js +66 -0
  14. package/dist/controllers/dismissable_controller.js +8 -0
  15. package/dist/controllers/element_save_controller.js +80 -0
  16. package/dist/controllers/empty_dom_controller.js +42 -0
  17. package/dist/controllers/equalize_controller.js +39 -0
  18. package/dist/controllers/forms/auto_submit_form_controller.js +62 -0
  19. package/dist/controllers/forms/autosize_controller.js +32 -0
  20. package/dist/controllers/forms/char_count_controller.js +37 -0
  21. package/dist/controllers/forms/checkbox_disable_inputs_controller.js +32 -0
  22. package/dist/controllers/forms/checkbox_enable_inputs_controller.js +32 -0
  23. package/dist/controllers/forms/checkbox_select_all_controller.js +35 -0
  24. package/dist/controllers/forms/checkbox_xor_controller.js +24 -0
  25. package/dist/controllers/forms/detect_dirty_controller.js +98 -0
  26. package/dist/controllers/forms/detect_dirty_form_controller.js +107 -0
  27. package/dist/controllers/forms/enable_inputs_controller.js +21 -0
  28. package/dist/controllers/forms/focus_steal_controller.js +28 -0
  29. package/dist/controllers/forms/form_rc_controller.js +47 -0
  30. package/dist/controllers/forms/form_save_controller.js +109 -0
  31. package/dist/controllers/forms/{index.d.ts → index.js} +0 -1
  32. package/dist/controllers/forms/limited_selection_checkboxes_controller.js +28 -0
  33. package/dist/controllers/forms/navigate_form_errors_controller.js +154 -0
  34. package/dist/controllers/forms/nested_form_controller.js +49 -0
  35. package/dist/controllers/forms/password_confirm_controller.js +26 -0
  36. package/dist/controllers/forms/password_peek_controller.js +21 -0
  37. package/dist/controllers/forms/remote_form_controller.js +26 -0
  38. package/dist/controllers/forms/sync_inputs_controller.js +67 -0
  39. package/dist/controllers/forms/value_warn_controller.js +45 -0
  40. package/dist/controllers/forms/word_count_controller.js +37 -0
  41. package/dist/controllers/{index.d.ts → index.js} +3 -1
  42. package/dist/controllers/media/fallback_image_controller.js +44 -0
  43. package/dist/controllers/media/{index.d.ts → index.js} +0 -1
  44. package/dist/controllers/media/lightbox_image_controller.js +71 -0
  45. package/dist/controllers/media/media_player_controller.js +31 -0
  46. package/dist/controllers/prefetch_controller.js +74 -0
  47. package/dist/controllers/print_button_controller.js +18 -0
  48. package/dist/controllers/responsive_iframe_controller.js +35 -0
  49. package/dist/controllers/scroll/{index.d.ts → index.js} +0 -1
  50. package/dist/controllers/scroll/scroll_container_controller.js +81 -0
  51. package/dist/controllers/scroll/scroll_into_focus_controller.js +20 -0
  52. package/dist/controllers/scroll/scroll_to_bottom_controller.js +37 -0
  53. package/dist/controllers/scroll/scroll_to_controller.js +22 -0
  54. package/dist/controllers/scroll/scroll_to_top_controller.js +37 -0
  55. package/dist/controllers/self_destruct_controller.js +11 -0
  56. package/dist/controllers/signal/events.js +12 -0
  57. package/dist/controllers/signal/expressions.js +54 -0
  58. package/dist/controllers/signal/{index.d.ts → index.js} +0 -1
  59. package/dist/controllers/signal/signal_action_controller.js +31 -0
  60. package/dist/controllers/signal/signal_dom_children_controller.js +40 -0
  61. package/dist/controllers/signal/signal_input_controller.js +36 -0
  62. package/dist/controllers/signal/signal_visibility_controller.js +44 -0
  63. package/dist/controllers/sticky_controller.js +44 -0
  64. package/dist/controllers/tables/{index.d.ts → index.js} +0 -1
  65. package/dist/controllers/tables/table_sort_controller.js +97 -0
  66. package/dist/controllers/tables/table_truncate_controller.js +81 -0
  67. package/dist/controllers/teleport_controller.js +48 -0
  68. package/dist/controllers/temporary_state_controller.js +65 -0
  69. package/dist/controllers/toggle_class_controller.js +115 -0
  70. package/dist/controllers/trix_modifier_controller.js +121 -0
  71. package/dist/controllers/turbo_frame_rc_controller.js +65 -0
  72. package/dist/controllers/turbo_frame_refresh_controller.js +32 -0
  73. package/dist/controllers/utility/alert_controller.js +7 -0
  74. package/dist/controllers/utility/fullscreen_controller.js +10 -0
  75. package/dist/controllers/utility/{index.d.ts → index.js} +0 -1
  76. package/dist/controllers/utility/intersection_controller.js +25 -0
  77. package/dist/controllers/utility/interval_controller.js +16 -0
  78. package/dist/controllers/utility/presence_controller.js +19 -0
  79. package/dist/controllers/utility/print_controller.js +7 -0
  80. package/dist/controllers/utility/timeout_controller.js +13 -0
  81. package/dist/controllers/utility/user_focus_controller.js +23 -0
  82. package/dist/controllers/visual/clock_controller.js +51 -0
  83. package/dist/controllers/visual/countdown_controller.js +116 -0
  84. package/dist/controllers/visual/duration_controller.js +79 -0
  85. package/dist/controllers/visual/{index.d.ts → index.js} +0 -1
  86. package/dist/controllers/visual/tabs_controller.js +79 -0
  87. package/dist/controllers/visual/time_distance_controller.js +50 -0
  88. package/dist/controllers/visual/tree_view_controller.js +92 -0
  89. package/dist/{index.d.ts → index.js} +3 -1
  90. package/dist/mixins/create_mixin.js +11 -0
  91. package/dist/mixins/{index.d.ts → index.js} +0 -1
  92. package/dist/mixins/install_class_methods.js +28 -0
  93. package/dist/mixins/use_click_outside.js +17 -0
  94. package/dist/mixins/use_event_bus.js +19 -0
  95. package/dist/mixins/use_event_listener.js +34 -0
  96. package/dist/mixins/use_fullscreen.js +42 -0
  97. package/dist/mixins/use_geolocation.js +62 -0
  98. package/dist/mixins/use_hover.js +29 -0
  99. package/dist/mixins/use_injected_html.js +37 -0
  100. package/dist/mixins/use_intersection.js +45 -0
  101. package/dist/mixins/use_interval.js +13 -0
  102. package/dist/mixins/use_localstorage.js +122 -0
  103. package/dist/mixins/use_mutation_observer.js +9 -0
  104. package/dist/mixins/use_temporary_content.js +38 -0
  105. package/dist/mixins/use_timeout.js +20 -0
  106. package/dist/mixins/use_trix_modifiers.js +71 -0
  107. package/dist/polyfills/string.replaceAll.js +13 -0
  108. package/dist/utilities/arrays.js +3 -0
  109. package/dist/utilities/base_controller.js +56 -0
  110. package/dist/utilities/elements.js +102 -0
  111. package/dist/utilities/ephemeral_controller.js +42 -0
  112. package/dist/utilities/event_bus.js +2 -0
  113. package/dist/utilities/events.js +10 -0
  114. package/dist/utilities/fetchRetry.js +22 -0
  115. package/dist/utilities/{index.d.ts → index.js} +0 -1
  116. package/dist/utilities/logging.js +82 -0
  117. package/dist/utilities/reactive.js +23 -0
  118. package/dist/utilities/request_submit.js +20 -0
  119. package/dist/utilities/scroll.js +89 -0
  120. package/dist/utilities/stimulus.js +13 -0
  121. package/dist/utilities/strings.js +5 -0
  122. package/dist/utilities/turbo.js +3 -0
  123. package/package.json +8 -18
  124. package/CHANGELOG.md +0 -499
  125. package/dist/controllers/ajax/async_block_controller.d.ts +0 -18
  126. package/dist/controllers/ajax/async_block_controller.d.ts.map +0 -1
  127. package/dist/controllers/ajax/index.d.ts.map +0 -1
  128. package/dist/controllers/ajax/lazy_block_controller.d.ts +0 -10
  129. package/dist/controllers/ajax/lazy_block_controller.d.ts.map +0 -1
  130. package/dist/controllers/ajax/load_block_controller.d.ts +0 -24
  131. package/dist/controllers/ajax/load_block_controller.d.ts.map +0 -1
  132. package/dist/controllers/ajax/poll_block_controller.d.ts +0 -16
  133. package/dist/controllers/ajax/poll_block_controller.d.ts.map +0 -1
  134. package/dist/controllers/anchor_spy_controller.d.ts +0 -21
  135. package/dist/controllers/anchor_spy_controller.d.ts.map +0 -1
  136. package/dist/controllers/back_link_controller.d.ts +0 -17
  137. package/dist/controllers/back_link_controller.d.ts.map +0 -1
  138. package/dist/controllers/clipboard_controller.d.ts +0 -19
  139. package/dist/controllers/clipboard_controller.d.ts.map +0 -1
  140. package/dist/controllers/confirm_controller.d.ts +0 -13
  141. package/dist/controllers/confirm_controller.d.ts.map +0 -1
  142. package/dist/controllers/confirm_navigation_controller.d.ts +0 -15
  143. package/dist/controllers/confirm_navigation_controller.d.ts.map +0 -1
  144. package/dist/controllers/debug_controller.d.ts +0 -7
  145. package/dist/controllers/debug_controller.d.ts.map +0 -1
  146. package/dist/controllers/disable_with_controller.d.ts +0 -20
  147. package/dist/controllers/disable_with_controller.d.ts.map +0 -1
  148. package/dist/controllers/dismissable_controller.d.ts +0 -7
  149. package/dist/controllers/dismissable_controller.d.ts.map +0 -1
  150. package/dist/controllers/element_save_controller.d.ts +0 -31
  151. package/dist/controllers/element_save_controller.d.ts.map +0 -1
  152. package/dist/controllers/empty_dom_controller.d.ts +0 -22
  153. package/dist/controllers/empty_dom_controller.d.ts.map +0 -1
  154. package/dist/controllers/forms/auto_submit_form_controller.d.ts +0 -23
  155. package/dist/controllers/forms/auto_submit_form_controller.d.ts.map +0 -1
  156. package/dist/controllers/forms/autosize_controller.d.ts +0 -9
  157. package/dist/controllers/forms/autosize_controller.d.ts.map +0 -1
  158. package/dist/controllers/forms/char_count_controller.d.ts +0 -21
  159. package/dist/controllers/forms/char_count_controller.d.ts.map +0 -1
  160. package/dist/controllers/forms/checkbox_disable_inputs_controller.d.ts +0 -17
  161. package/dist/controllers/forms/checkbox_disable_inputs_controller.d.ts.map +0 -1
  162. package/dist/controllers/forms/checkbox_enable_inputs_controller.d.ts +0 -17
  163. package/dist/controllers/forms/checkbox_enable_inputs_controller.d.ts.map +0 -1
  164. package/dist/controllers/forms/checkbox_select_all_controller.d.ts +0 -14
  165. package/dist/controllers/forms/checkbox_select_all_controller.d.ts.map +0 -1
  166. package/dist/controllers/forms/checkbox_xor_controller.d.ts +0 -9
  167. package/dist/controllers/forms/checkbox_xor_controller.d.ts.map +0 -1
  168. package/dist/controllers/forms/detect_dirty_controller.d.ts +0 -15
  169. package/dist/controllers/forms/detect_dirty_controller.d.ts.map +0 -1
  170. package/dist/controllers/forms/detect_dirty_form_controller.d.ts +0 -18
  171. package/dist/controllers/forms/detect_dirty_form_controller.d.ts.map +0 -1
  172. package/dist/controllers/forms/enable_inputs_controller.d.ts +0 -14
  173. package/dist/controllers/forms/enable_inputs_controller.d.ts.map +0 -1
  174. package/dist/controllers/forms/focus_steal_controller.d.ts +0 -12
  175. package/dist/controllers/forms/focus_steal_controller.d.ts.map +0 -1
  176. package/dist/controllers/forms/form_rc_controller.d.ts +0 -18
  177. package/dist/controllers/forms/form_rc_controller.d.ts.map +0 -1
  178. package/dist/controllers/forms/form_save_controller.d.ts +0 -32
  179. package/dist/controllers/forms/form_save_controller.d.ts.map +0 -1
  180. package/dist/controllers/forms/index.d.ts.map +0 -1
  181. package/dist/controllers/forms/limited_selection_checkboxes_controller.d.ts +0 -17
  182. package/dist/controllers/forms/limited_selection_checkboxes_controller.d.ts.map +0 -1
  183. package/dist/controllers/forms/navigate_form_errors_controller.d.ts +0 -41
  184. package/dist/controllers/forms/navigate_form_errors_controller.d.ts.map +0 -1
  185. package/dist/controllers/forms/nested_form_controller.d.ts +0 -22
  186. package/dist/controllers/forms/nested_form_controller.d.ts.map +0 -1
  187. package/dist/controllers/forms/password_confirm_controller.d.ts +0 -12
  188. package/dist/controllers/forms/password_confirm_controller.d.ts.map +0 -1
  189. package/dist/controllers/forms/password_peek_controller.d.ts +0 -9
  190. package/dist/controllers/forms/password_peek_controller.d.ts.map +0 -1
  191. package/dist/controllers/forms/remote_form_controller.d.ts +0 -14
  192. package/dist/controllers/forms/remote_form_controller.d.ts.map +0 -1
  193. package/dist/controllers/forms/sync_inputs_controller.d.ts +0 -20
  194. package/dist/controllers/forms/sync_inputs_controller.d.ts.map +0 -1
  195. package/dist/controllers/forms/value_warn_controller.d.ts +0 -31
  196. package/dist/controllers/forms/value_warn_controller.d.ts.map +0 -1
  197. package/dist/controllers/forms/word_count_controller.d.ts +0 -21
  198. package/dist/controllers/forms/word_count_controller.d.ts.map +0 -1
  199. package/dist/controllers/index.d.ts.map +0 -1
  200. package/dist/controllers/media/fallback_image_controller.d.ts +0 -20
  201. package/dist/controllers/media/fallback_image_controller.d.ts.map +0 -1
  202. package/dist/controllers/media/index.d.ts.map +0 -1
  203. package/dist/controllers/media/lightbox_image_controller.d.ts +0 -31
  204. package/dist/controllers/media/lightbox_image_controller.d.ts.map +0 -1
  205. package/dist/controllers/media/media_player_controller.d.ts +0 -10
  206. package/dist/controllers/media/media_player_controller.d.ts.map +0 -1
  207. package/dist/controllers/prefetch_controller.d.ts +0 -17
  208. package/dist/controllers/prefetch_controller.d.ts.map +0 -1
  209. package/dist/controllers/print_button_controller.d.ts +0 -8
  210. package/dist/controllers/print_button_controller.d.ts.map +0 -1
  211. package/dist/controllers/responsive_iframe_controller.d.ts +0 -17
  212. package/dist/controllers/responsive_iframe_controller.d.ts.map +0 -1
  213. package/dist/controllers/scroll/index.d.ts.map +0 -1
  214. package/dist/controllers/scroll/scroll_container_controller.d.ts +0 -22
  215. package/dist/controllers/scroll/scroll_container_controller.d.ts.map +0 -1
  216. package/dist/controllers/scroll/scroll_into_focus_controller.d.ts +0 -16
  217. package/dist/controllers/scroll/scroll_into_focus_controller.d.ts.map +0 -1
  218. package/dist/controllers/scroll/scroll_to_bottom_controller.d.ts +0 -12
  219. package/dist/controllers/scroll/scroll_to_bottom_controller.d.ts.map +0 -1
  220. package/dist/controllers/scroll/scroll_to_controller.d.ts +0 -18
  221. package/dist/controllers/scroll/scroll_to_controller.d.ts.map +0 -1
  222. package/dist/controllers/scroll/scroll_to_top_controller.d.ts +0 -12
  223. package/dist/controllers/scroll/scroll_to_top_controller.d.ts.map +0 -1
  224. package/dist/controllers/self_destruct_controller.d.ts +0 -9
  225. package/dist/controllers/self_destruct_controller.d.ts.map +0 -1
  226. package/dist/controllers/signal/events.d.ts +0 -5
  227. package/dist/controllers/signal/events.d.ts.map +0 -1
  228. package/dist/controllers/signal/expressions.d.ts +0 -2
  229. package/dist/controllers/signal/expressions.d.ts.map +0 -1
  230. package/dist/controllers/signal/index.d.ts.map +0 -1
  231. package/dist/controllers/signal/signal_action_controller.d.ts +0 -15
  232. package/dist/controllers/signal/signal_action_controller.d.ts.map +0 -1
  233. package/dist/controllers/signal/signal_dom_children_controller.d.ts +0 -17
  234. package/dist/controllers/signal/signal_dom_children_controller.d.ts.map +0 -1
  235. package/dist/controllers/signal/signal_input_controller.d.ts +0 -20
  236. package/dist/controllers/signal/signal_input_controller.d.ts.map +0 -1
  237. package/dist/controllers/signal/signal_visibility_controller.d.ts +0 -18
  238. package/dist/controllers/signal/signal_visibility_controller.d.ts.map +0 -1
  239. package/dist/controllers/sticky_controller.d.ts +0 -16
  240. package/dist/controllers/sticky_controller.d.ts.map +0 -1
  241. package/dist/controllers/tables/index.d.ts.map +0 -1
  242. package/dist/controllers/tables/table_sort_controller.d.ts +0 -20
  243. package/dist/controllers/tables/table_sort_controller.d.ts.map +0 -1
  244. package/dist/controllers/tables/table_truncate_controller.d.ts +0 -26
  245. package/dist/controllers/tables/table_truncate_controller.d.ts.map +0 -1
  246. package/dist/controllers/teleport_controller.d.ts +0 -16
  247. package/dist/controllers/teleport_controller.d.ts.map +0 -1
  248. package/dist/controllers/temporary_state_controller.d.ts +0 -27
  249. package/dist/controllers/temporary_state_controller.d.ts.map +0 -1
  250. package/dist/controllers/toggle_class_controller.d.ts +0 -36
  251. package/dist/controllers/toggle_class_controller.d.ts.map +0 -1
  252. package/dist/controllers/trix_modifier_controller.d.ts +0 -88
  253. package/dist/controllers/trix_modifier_controller.d.ts.map +0 -1
  254. package/dist/controllers/turbo_frame_rc_controller.d.ts +0 -21
  255. package/dist/controllers/turbo_frame_rc_controller.d.ts.map +0 -1
  256. package/dist/controllers/turbo_frame_refresh_controller.d.ts +0 -14
  257. package/dist/controllers/turbo_frame_refresh_controller.d.ts.map +0 -1
  258. package/dist/controllers/utility/alert_controller.d.ts +0 -9
  259. package/dist/controllers/utility/alert_controller.d.ts.map +0 -1
  260. package/dist/controllers/utility/fullscreen_controller.d.ts +0 -8
  261. package/dist/controllers/utility/fullscreen_controller.d.ts.map +0 -1
  262. package/dist/controllers/utility/index.d.ts.map +0 -1
  263. package/dist/controllers/utility/intersection_controller.d.ts +0 -14
  264. package/dist/controllers/utility/intersection_controller.d.ts.map +0 -1
  265. package/dist/controllers/utility/interval_controller.d.ts +0 -11
  266. package/dist/controllers/utility/interval_controller.d.ts.map +0 -1
  267. package/dist/controllers/utility/presence_controller.d.ts +0 -14
  268. package/dist/controllers/utility/presence_controller.d.ts.map +0 -1
  269. package/dist/controllers/utility/print_controller.d.ts +0 -5
  270. package/dist/controllers/utility/print_controller.d.ts.map +0 -1
  271. package/dist/controllers/utility/timeout_controller.d.ts +0 -10
  272. package/dist/controllers/utility/timeout_controller.d.ts.map +0 -1
  273. package/dist/controllers/utility/user_focus_controller.d.ts +0 -9
  274. package/dist/controllers/utility/user_focus_controller.d.ts.map +0 -1
  275. package/dist/controllers/visual/clock_controller.d.ts +0 -16
  276. package/dist/controllers/visual/clock_controller.d.ts.map +0 -1
  277. package/dist/controllers/visual/countdown_controller.d.ts +0 -46
  278. package/dist/controllers/visual/countdown_controller.d.ts.map +0 -1
  279. package/dist/controllers/visual/duration_controller.d.ts +0 -26
  280. package/dist/controllers/visual/duration_controller.d.ts.map +0 -1
  281. package/dist/controllers/visual/index.d.ts.map +0 -1
  282. package/dist/controllers/visual/tabs_controller.d.ts +0 -30
  283. package/dist/controllers/visual/tabs_controller.d.ts.map +0 -1
  284. package/dist/controllers/visual/time_distance_controller.d.ts +0 -16
  285. package/dist/controllers/visual/time_distance_controller.d.ts.map +0 -1
  286. package/dist/controllers/visual/tree_view_controller.d.ts +0 -26
  287. package/dist/controllers/visual/tree_view_controller.d.ts.map +0 -1
  288. package/dist/index.d.ts.map +0 -1
  289. package/dist/mixins/create_mixin.d.ts +0 -3
  290. package/dist/mixins/create_mixin.d.ts.map +0 -1
  291. package/dist/mixins/index.d.ts.map +0 -1
  292. package/dist/mixins/install_class_methods.d.ts +0 -6
  293. package/dist/mixins/install_class_methods.d.ts.map +0 -1
  294. package/dist/mixins/use_click_outside.d.ts +0 -5
  295. package/dist/mixins/use_click_outside.d.ts.map +0 -1
  296. package/dist/mixins/use_event_bus.d.ts +0 -8
  297. package/dist/mixins/use_event_bus.d.ts.map +0 -1
  298. package/dist/mixins/use_event_listener.d.ts +0 -20
  299. package/dist/mixins/use_event_listener.d.ts.map +0 -1
  300. package/dist/mixins/use_fullscreen.d.ts +0 -9
  301. package/dist/mixins/use_fullscreen.d.ts.map +0 -1
  302. package/dist/mixins/use_geolocation.d.ts +0 -19
  303. package/dist/mixins/use_geolocation.d.ts.map +0 -1
  304. package/dist/mixins/use_hover.d.ts +0 -5
  305. package/dist/mixins/use_hover.d.ts.map +0 -1
  306. package/dist/mixins/use_injected_html.d.ts +0 -11
  307. package/dist/mixins/use_injected_html.d.ts.map +0 -1
  308. package/dist/mixins/use_intersection.d.ts +0 -14
  309. package/dist/mixins/use_intersection.d.ts.map +0 -1
  310. package/dist/mixins/use_interval.d.ts +0 -3
  311. package/dist/mixins/use_interval.d.ts.map +0 -1
  312. package/dist/mixins/use_localstorage.d.ts +0 -21
  313. package/dist/mixins/use_localstorage.d.ts.map +0 -1
  314. package/dist/mixins/use_mutation_observer.d.ts +0 -3
  315. package/dist/mixins/use_mutation_observer.d.ts.map +0 -1
  316. package/dist/mixins/use_temporary_content.d.ts +0 -6
  317. package/dist/mixins/use_temporary_content.d.ts.map +0 -1
  318. package/dist/mixins/use_timeout.d.ts +0 -3
  319. package/dist/mixins/use_timeout.d.ts.map +0 -1
  320. package/dist/mixins/use_trix_modifiers.d.ts +0 -11
  321. package/dist/mixins/use_trix_modifiers.d.ts.map +0 -1
  322. package/dist/stimulus-library.cjs.js +0 -2
  323. package/dist/stimulus-library.cjs.js.map +0 -1
  324. package/dist/stimulus-library.es.js +0 -4719
  325. package/dist/stimulus-library.es.js.map +0 -1
  326. package/dist/stimulus-library.umd.js +0 -2
  327. package/dist/stimulus-library.umd.js.map +0 -1
  328. package/dist/utilities/arrays.d.ts +0 -2
  329. package/dist/utilities/arrays.d.ts.map +0 -1
  330. package/dist/utilities/base_controller.d.ts +0 -11
  331. package/dist/utilities/base_controller.d.ts.map +0 -1
  332. package/dist/utilities/elements.d.ts +0 -49
  333. package/dist/utilities/elements.d.ts.map +0 -1
  334. package/dist/utilities/ephemeral_controller.d.ts +0 -6
  335. package/dist/utilities/ephemeral_controller.d.ts.map +0 -1
  336. package/dist/utilities/event_bus.d.ts +0 -4
  337. package/dist/utilities/event_bus.d.ts.map +0 -1
  338. package/dist/utilities/events.d.ts +0 -3
  339. package/dist/utilities/events.d.ts.map +0 -1
  340. package/dist/utilities/fetchRetry.d.ts +0 -2
  341. package/dist/utilities/fetchRetry.d.ts.map +0 -1
  342. package/dist/utilities/index.d.ts.map +0 -1
  343. package/dist/utilities/logging.d.ts +0 -6
  344. package/dist/utilities/logging.d.ts.map +0 -1
  345. package/dist/utilities/reactive.d.ts +0 -2
  346. package/dist/utilities/reactive.d.ts.map +0 -1
  347. package/dist/utilities/request_submit.d.ts +0 -3
  348. package/dist/utilities/request_submit.d.ts.map +0 -1
  349. package/dist/utilities/scroll.d.ts +0 -11
  350. package/dist/utilities/scroll.d.ts.map +0 -1
  351. package/dist/utilities/stimulus.d.ts +0 -3
  352. package/dist/utilities/stimulus.d.ts.map +0 -1
  353. package/dist/utilities/strings.d.ts +0 -2
  354. package/dist/utilities/strings.d.ts.map +0 -1
  355. package/dist/utilities/turbo.d.ts +0 -2
  356. package/dist/utilities/turbo.d.ts.map +0 -1
@@ -0,0 +1,16 @@
1
+ import { BaseController } from "../../utilities/base_controller";
2
+ import { useInterval } from "../../mixins/use_interval";
3
+ export class IntervalController extends BaseController {
4
+ connect() {
5
+ if (!this.hasSecondsValue) {
6
+ throw new Error('Expected `secondsValue` to be present');
7
+ }
8
+ requestAnimationFrame(() => {
9
+ useInterval(this, this._interval, this.secondsValue * 1000);
10
+ });
11
+ }
12
+ _interval() {
13
+ this.dispatchEvent(this.el, "interval:action");
14
+ }
15
+ }
16
+ IntervalController.values = { seconds: Number };
@@ -0,0 +1,19 @@
1
+ import { BaseController } from "../../utilities/base_controller";
2
+ export class PresenceController extends BaseController {
3
+ get name() {
4
+ return this.hasNameValue ? this.nameValue : ``;
5
+ }
6
+ get _addedEventName() {
7
+ return [this.name, 'presence', 'added'].filter(el => !!el).join(':');
8
+ }
9
+ get _removedEventName() {
10
+ return [this.name, 'presence', 'removed'].filter(el => !!el).join(':');
11
+ }
12
+ connect() {
13
+ this.dispatchEvent(this.el, this._addedEventName);
14
+ }
15
+ disconnect() {
16
+ this.dispatchEvent(this.el, this._removedEventName);
17
+ }
18
+ }
19
+ PresenceController.values = { name: String };
@@ -0,0 +1,7 @@
1
+ import { BaseController } from '../../utilities/base_controller';
2
+ export class PrintController extends BaseController {
3
+ print(event) {
4
+ event === null || event === void 0 ? void 0 : event.preventDefault();
5
+ window.print();
6
+ }
7
+ }
@@ -0,0 +1,13 @@
1
+ import { BaseController } from "../../utilities/base_controller";
2
+ import { useTimeout } from "../../mixins/use_timeout";
3
+ export class TimeoutController extends BaseController {
4
+ connect() {
5
+ requestAnimationFrame(() => {
6
+ useTimeout(this, this._timeout, this.secondsValue * 1000);
7
+ });
8
+ }
9
+ _timeout() {
10
+ this.dispatchEvent(this.el, "timeout");
11
+ }
12
+ }
13
+ TimeoutController.values = { seconds: Number };
@@ -0,0 +1,23 @@
1
+ import { BaseController } from "../../utilities/base_controller";
2
+ import { useEventListener } from "../../mixins/use_event_listener";
3
+ export class UserFocusController extends BaseController {
4
+ connect() {
5
+ useEventListener(this, window, ["focus", "blur"], this._handleVisibility);
6
+ useEventListener(this, document, "visibilitychange", this._handleVisibility);
7
+ requestAnimationFrame(() => {
8
+ this._handleVisibility();
9
+ });
10
+ }
11
+ appear() {
12
+ this.dispatchEvent(this.el, "user-focus:active");
13
+ }
14
+ away() {
15
+ this.dispatchEvent(this.el, "user-focus:away");
16
+ }
17
+ _handleVisibility() {
18
+ this._documentIsActive() ? this.appear() : this.away();
19
+ }
20
+ _documentIsActive() {
21
+ return document.visibilityState == "visible" && document.hasFocus();
22
+ }
23
+ }
@@ -0,0 +1,51 @@
1
+ import { BaseController } from "../../utilities/base_controller";
2
+ import { useInterval } from "../../mixins/use_interval";
3
+ export class ClockController extends BaseController {
4
+ get _tickInterval() {
5
+ if (this.hasMillisecondsTarget) {
6
+ return 1; // 1 ms
7
+ }
8
+ else if (this.hasSecondsTarget) {
9
+ return 1000; // 1 seconds
10
+ }
11
+ else if (this.hasMinutesTarget) {
12
+ return 15000; // 15 seconds
13
+ }
14
+ else {
15
+ return 300000; // Every 5 minutes
16
+ }
17
+ }
18
+ connect() {
19
+ requestAnimationFrame(() => {
20
+ useInterval(this, this._tick, this._tickInterval);
21
+ });
22
+ }
23
+ _tick() {
24
+ let current = new Date();
25
+ if (this.hasHoursTarget) {
26
+ this.hoursTarget.innerHTML = current
27
+ .getHours()
28
+ .toString()
29
+ .padStart(2, "0");
30
+ }
31
+ if (this.hasMinutesTarget) {
32
+ this.minutesTarget.innerHTML = current
33
+ .getMinutes()
34
+ .toString()
35
+ .padStart(2, "0");
36
+ }
37
+ if (this.hasSecondsTarget) {
38
+ this.secondsTarget.innerHTML = current
39
+ .getSeconds()
40
+ .toString()
41
+ .padStart(2, "0");
42
+ }
43
+ if (this.hasMillisecondsTarget) {
44
+ this.millisecondsTarget.innerHTML = current
45
+ .getMilliseconds()
46
+ .toString()
47
+ .padStart(3, "0");
48
+ }
49
+ }
50
+ }
51
+ ClockController.targets = ["hours", "minutes", "seconds", "milliseconds"];
@@ -0,0 +1,116 @@
1
+ import intervalToDuration from "date-fns/intervalToDuration";
2
+ import isPast from "date-fns/isPast";
3
+ import { BaseController } from "../../utilities/base_controller";
4
+ export class CountdownController extends BaseController {
5
+ constructor() {
6
+ super(...arguments);
7
+ // Instance Data
8
+ this._interval = null;
9
+ }
10
+ get _removeUnused() {
11
+ return this.hasRemoveUnusedValue ? this.removeUnusedValue : false;
12
+ }
13
+ get _deadlineDate() {
14
+ return new Date(this.deadlineValue);
15
+ }
16
+ connect() {
17
+ this._interval = setInterval(this._tick.bind(this), 1000);
18
+ this.addCountingDownClasses();
19
+ }
20
+ disconnect() {
21
+ this._clearTick();
22
+ this.removeCountingDownClasses();
23
+ this.removeEndedClasses();
24
+ }
25
+ deadlineValueChanged() {
26
+ // Countdown had previously ended, restart ticking. Updating mid-tick will just work.
27
+ if (this._interval == null) {
28
+ this._interval = setInterval(this._tick.bind(this), 1000);
29
+ }
30
+ }
31
+ _tick() {
32
+ try {
33
+ const now = new Date();
34
+ let distance = {};
35
+ if (isPast(this._deadlineDate)) {
36
+ distance = { years: 0, months: 0, days: 0, hours: 0, minutes: 0, seconds: 0 };
37
+ // Countdown has ended, stop ticking
38
+ this._clearTick();
39
+ this.removeCountingDownClasses();
40
+ this.addEndedClasses();
41
+ this.dispatchEvent(this.el, "countdown:ended");
42
+ }
43
+ else {
44
+ distance = intervalToDuration({ start: this._deadlineDate, end: now });
45
+ }
46
+ if (this.hasYearsTarget) {
47
+ this._updateTarget(this.yearsTarget, this._years(distance));
48
+ }
49
+ if (this.hasMonthsTarget) {
50
+ this._updateTarget(this.monthsTarget, this._months(distance));
51
+ }
52
+ if (this.hasDaysTarget) {
53
+ this._updateTarget(this.daysTarget, this._days(distance));
54
+ }
55
+ if (this.hasHoursTarget) {
56
+ this._updateTarget(this.hoursTarget, this._hours(distance));
57
+ }
58
+ if (this.hasMinutesTarget) {
59
+ this._updateTarget(this.minutesTarget, this._minutes(distance));
60
+ }
61
+ if (this.hasSecondsTarget) {
62
+ this._updateTarget(this.secondsTarget, this._seconds(distance));
63
+ }
64
+ }
65
+ catch (e) {
66
+ console.error(e);
67
+ this._clearTick();
68
+ }
69
+ }
70
+ _clearTick() {
71
+ if (this._interval) {
72
+ clearInterval(this._interval);
73
+ this._interval = null;
74
+ }
75
+ }
76
+ _updateTarget(target, value) {
77
+ this._removeTargetIfUnused(target, value);
78
+ target.innerHTML = value.toString();
79
+ }
80
+ _removeTargetIfUnused(target, value) {
81
+ if (this._removeUnused) {
82
+ if (value === 0 && target.dataset.unused) {
83
+ if (Number.parseInt(target.dataset.unused) > Date.now() + 1500) {
84
+ target.remove();
85
+ }
86
+ }
87
+ else if (value == 0) {
88
+ target.dataset.unused = Date.now().toString();
89
+ }
90
+ else {
91
+ target.dataset.unused = undefined;
92
+ }
93
+ }
94
+ }
95
+ _years(duration) {
96
+ return duration.years || 0;
97
+ }
98
+ _months(duration) {
99
+ return duration.months || 0;
100
+ }
101
+ _days(duration) {
102
+ return duration.days || 0;
103
+ }
104
+ _hours(duration) {
105
+ return duration.hours || 0;
106
+ }
107
+ _minutes(duration) {
108
+ return duration.minutes || 0;
109
+ }
110
+ _seconds(duration) {
111
+ return duration.seconds || 0;
112
+ }
113
+ }
114
+ CountdownController.values = { deadline: String, removeUnused: Boolean };
115
+ CountdownController.targets = ["years", "months", "days", "hours", "minutes", "seconds"];
116
+ CountdownController.classes = ["countingDown", "ended"];
@@ -0,0 +1,79 @@
1
+ import formatDuration from "date-fns/formatDuration";
2
+ import intervalToDuration from "date-fns/intervalToDuration";
3
+ import toDate from "date-fns/toDate";
4
+ import { BaseController } from "../../utilities/base_controller";
5
+ import { useInterval } from "../../mixins/use_interval";
6
+ export class DurationController extends BaseController {
7
+ get _format() {
8
+ return [
9
+ "years",
10
+ "months",
11
+ "weeks",
12
+ "days",
13
+ "hours",
14
+ ...(this._minutes ? ["minutes"] : []),
15
+ ...(this._seconds ? ["seconds"] : []),
16
+ ];
17
+ }
18
+ get _output() {
19
+ let { years, months, weeks, days, hours, minutes, seconds } = this._duration;
20
+ years || (years = 0);
21
+ months || (months = 0);
22
+ weeks || (weeks = 0);
23
+ days || (days = 0);
24
+ hours || (hours = 0);
25
+ minutes || (minutes = 0);
26
+ seconds || (seconds = 0);
27
+ let largeDenominators = [years, months, weeks, days, hours];
28
+ if (!this._minutes && !this._seconds && largeDenominators.every((x) => x === 0)) {
29
+ minutes = minutes + seconds / 60.0;
30
+ return `${(minutes / 60).toFixed(1)} hours`;
31
+ }
32
+ return formatDuration(this._duration, { format: this._format, delimiter: ", " });
33
+ }
34
+ get _seconds() {
35
+ return this.hasSecondsValue ? this.secondsValue : true;
36
+ }
37
+ get _minutes() {
38
+ return this.hasMinutesValue ? this.minutesValue : true;
39
+ }
40
+ get _timestamp() {
41
+ if (this.hasTimestampValue) {
42
+ return toDate(this.timestampValue * 1000);
43
+ }
44
+ else {
45
+ throw new Error("Expected `timestampValue` to be present");
46
+ }
47
+ }
48
+ get _duration() {
49
+ return intervalToDuration({ start: new Date(), end: this._timestamp });
50
+ }
51
+ get _tickInterval() {
52
+ if (this._seconds) {
53
+ return 1000; // 1 seconds
54
+ }
55
+ else if (this._minutes) {
56
+ return 15000; // 15 seconds
57
+ }
58
+ else {
59
+ return 120000; // 2 minutes
60
+ }
61
+ }
62
+ connect() {
63
+ this._clearInterval = useInterval(this, this._update, this._tickInterval);
64
+ this._update();
65
+ }
66
+ _update() {
67
+ try {
68
+ this.el.innerHTML = this._output;
69
+ }
70
+ catch (_a) {
71
+ this._clearInterval();
72
+ }
73
+ }
74
+ }
75
+ DurationController.values = {
76
+ timestamp: Number,
77
+ minutes: Boolean,
78
+ seconds: Boolean,
79
+ };
@@ -4,4 +4,3 @@ export * from './duration_controller';
4
4
  export * from './tabs_controller';
5
5
  export * from './time_distance_controller';
6
6
  export * from './tree_view_controller';
7
- //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,79 @@
1
+ import { BaseController } from "../../utilities/base_controller";
2
+ import clamp from "lodash-es/clamp";
3
+ import { useCollectionEventListener } from "../../mixins/use_event_listener";
4
+ export class TabsController extends BaseController {
5
+ get defaultHideClasses() {
6
+ return ["hide"];
7
+ }
8
+ get defaultActiveClasses() {
9
+ return ["is-active"];
10
+ }
11
+ get _currentTab() {
12
+ return this.hasCurrentTabValue ? this.currentTabValue : 0;
13
+ }
14
+ get _equalize() {
15
+ return this.hasEqualizeValue ? this.equalizeValue : false;
16
+ }
17
+ connect() {
18
+ useCollectionEventListener(this, this.linkTargets, "click", this.switchTabs);
19
+ if (this._equalize) {
20
+ this._setMinHeight();
21
+ }
22
+ this.currentTabValue = this._currentTab;
23
+ }
24
+ switchTabs(event) {
25
+ event.preventDefault();
26
+ this.currentTabValue = this.linkTargets.indexOf(event.currentTarget);
27
+ }
28
+ currentTabValueChanged() {
29
+ let index = this._currentTab;
30
+ index = this._clampIndex(index);
31
+ this._selectTab(index);
32
+ }
33
+ _selectTab(index) {
34
+ index = this._clampIndex(index);
35
+ let links = this.linkTargets;
36
+ let panels = this.contentTargets;
37
+ let activePanel = panels[index];
38
+ let activeLink = links[index];
39
+ let otherPanels = [...panels.slice(0, index), ...panels.slice(index + 1)];
40
+ let otherLinks = [...links.slice(0, index), ...links.slice(index + 1)];
41
+ this.addActiveClasses(activeLink);
42
+ activeLink.setAttribute('aria-selected', "true");
43
+ this.addActiveClasses(activePanel);
44
+ this.removeHideClasses(activePanel);
45
+ otherLinks.forEach((link) => {
46
+ link.removeAttribute('aria-selected');
47
+ this.removeActiveClasses(link);
48
+ });
49
+ otherPanels.forEach((panel) => {
50
+ this.removeActiveClasses(panel);
51
+ this.addHideClasses(panel);
52
+ });
53
+ }
54
+ _clampIndex(index) {
55
+ return clamp(index, 0, this.contentTargets.length - 1);
56
+ }
57
+ _setMinHeight() {
58
+ let minHeight = 0;
59
+ // determine the minimum height
60
+ this.contentTargets.forEach((content) => {
61
+ let hidden = content.hasAttribute("tab-hidden");
62
+ if (hidden) {
63
+ this.removeHideClasses(content);
64
+ }
65
+ let height = content.offsetHeight;
66
+ if (height > minHeight) {
67
+ minHeight = height;
68
+ }
69
+ if (hidden) {
70
+ this.addHideClasses(content);
71
+ }
72
+ });
73
+ // apply to all tabs
74
+ this.contentTargets.forEach((content) => content.style.minHeight = minHeight + "px");
75
+ }
76
+ }
77
+ TabsController.values = { currentTab: Number, equalize: Boolean };
78
+ TabsController.targets = ["link", "content"];
79
+ TabsController.classes = ["active", "hide"];
@@ -0,0 +1,50 @@
1
+ import formatDistanceToNow from "date-fns/formatDistanceToNow";
2
+ import intervalToDuration from "date-fns/intervalToDuration";
3
+ import isPast from "date-fns/isPast";
4
+ import toDate from "date-fns/toDate";
5
+ import { BaseController } from "../../utilities/base_controller";
6
+ import { useTimeout } from "../../mixins/use_timeout";
7
+ export class TimeDistanceController extends BaseController {
8
+ get _duration() {
9
+ return isPast(this._timestamp) ? intervalToDuration({ start: this._timestamp, end: new Date() }) : intervalToDuration({ start: new Date(), end: this._timestamp });
10
+ }
11
+ get _nextUpdate() {
12
+ let duration = this._duration;
13
+ if (duration.years && duration.years > 0) {
14
+ return null;
15
+ }
16
+ else if (duration.months && duration.months > 0) {
17
+ return null;
18
+ }
19
+ else if (duration.days && duration.days > 0) {
20
+ return null;
21
+ }
22
+ else if (duration.hours && duration.hours > 0) {
23
+ return 1800000; // Update every 30 mins
24
+ }
25
+ else {
26
+ return 30000; // Update every 30 seconds
27
+ }
28
+ }
29
+ timestampValueChanged() {
30
+ this._timestamp = toDate(this.timestampValue * 1000);
31
+ }
32
+ connect() {
33
+ if (!this.hasTimestampValue) {
34
+ throw new Error("Expected `timestampValue` to be present");
35
+ }
36
+ this._update();
37
+ }
38
+ _update() {
39
+ this.el.innerHTML = formatDistanceToNow(this._timestamp, {
40
+ addSuffix: true,
41
+ includeSeconds: true,
42
+ });
43
+ if (this._nextUpdate) {
44
+ useTimeout(this, this._update, this._nextUpdate);
45
+ }
46
+ }
47
+ }
48
+ TimeDistanceController.values = {
49
+ timestamp: Number,
50
+ };
@@ -0,0 +1,92 @@
1
+ import { useMutationObserver } from "../../mixins/use_mutation_observer";
2
+ import { BaseController } from "../../utilities/base_controller";
3
+ import { installClassMethods } from "../../mixins/install_class_methods";
4
+ export class TreeViewController extends BaseController {
5
+ get defaultActiveClasses() {
6
+ return ["active"];
7
+ }
8
+ get defaultCollapsedClasses() {
9
+ return ["collapsed"];
10
+ }
11
+ initialize() {
12
+ this._nodeClicked = this._nodeClicked.bind(this);
13
+ }
14
+ connect() {
15
+ installClassMethods(this);
16
+ useMutationObserver(this, this.el, this.mutate, { subtree: true, childList: true });
17
+ this._setup();
18
+ }
19
+ disconnect() {
20
+ this._teardown();
21
+ }
22
+ _setup() {
23
+ this._setupNode(this.el);
24
+ }
25
+ _setupNode(el) {
26
+ const process = (e) => {
27
+ let parent = e.parentElement;
28
+ if (parent) {
29
+ if (!this._nodeActive(parent)) {
30
+ this._hideNode(parent);
31
+ }
32
+ parent.removeEventListener("click", this._nodeClicked);
33
+ parent.addEventListener("click", this._nodeClicked);
34
+ }
35
+ };
36
+ if (el.tagName === 'UL' || el.tagName === 'OL') {
37
+ process(el);
38
+ }
39
+ el.querySelectorAll("ul, ol").forEach(e => process(e));
40
+ }
41
+ _teardown() {
42
+ this.el.querySelectorAll("ul, ol, li").forEach((el) => this._teardownNode(el));
43
+ }
44
+ _teardownNode(el) {
45
+ [el, ...Array.from(el.querySelectorAll('ul, ol, li'))].forEach((x) => {
46
+ x.removeEventListener("click", this._nodeClicked);
47
+ this.removeActiveClasses(x);
48
+ this.removeCollapsedClasses(x);
49
+ });
50
+ }
51
+ _nodeClicked(event) {
52
+ if (event) {
53
+ event.stopImmediatePropagation();
54
+ }
55
+ let el = event.target;
56
+ if (!el || !this._hasNested(el)) {
57
+ return;
58
+ }
59
+ if (this._nodeActive(el)) {
60
+ this._hideNode(el);
61
+ }
62
+ else {
63
+ this._showNode(el);
64
+ }
65
+ }
66
+ _nodeActive(el) {
67
+ return this.activeClassesPresent(el);
68
+ }
69
+ _showNode(el) {
70
+ this.removeCollapsedClasses(el);
71
+ this.addActiveClasses(el);
72
+ }
73
+ _hideNode(el) {
74
+ this.removeActiveClasses(el);
75
+ this.addCollapsedClasses(el);
76
+ }
77
+ _hasNested(el) {
78
+ return el.querySelectorAll("ul, ol").length > 0;
79
+ }
80
+ mutate(entries) {
81
+ for (const mutation of entries) {
82
+ if (mutation.type === "childList") {
83
+ Array.from(mutation.addedNodes || []).forEach(el => this._setupNode(el));
84
+ Array.from(mutation.removedNodes || []).forEach(el => this._teardownNode(el));
85
+ }
86
+ }
87
+ }
88
+ }
89
+ TreeViewController.classes = [
90
+ "active",
91
+ "collapsed",
92
+ ];
@@ -1,4 +1,6 @@
1
+ // Utilities
1
2
  export * from "./utilities";
3
+ // Mixins
2
4
  export * from "./mixins";
5
+ // Controllers
3
6
  export * from "./controllers";
4
- //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,11 @@
1
+ export function useMixin(controller, setup, teardown) {
2
+ const controllerDisconnect = controller.disconnect.bind(controller);
3
+ setup();
4
+ Object.assign(controller, {
5
+ disconnect() {
6
+ teardown();
7
+ controllerDisconnect();
8
+ },
9
+ });
10
+ return controllerDisconnect;
11
+ }
@@ -6,4 +6,3 @@ export * from './use_interval';
6
6
  export * from './use_localstorage';
7
7
  export * from './use_temporary_content';
8
8
  export * from './use_timeout';
9
- //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,28 @@
1
+ import { Controller } from "@hotwired/stimulus";
2
+ import { controllerMethod } from "../utilities/stimulus";
3
+ import { pascalCase } from "../utilities/strings";
4
+ export class InstallClassMethodComposableController extends Controller {
5
+ }
6
+ function addMethodsForClassDefinition(controller, name) {
7
+ let defaultElement = controller.element;
8
+ let hasClass = () => controller[`has${pascalCase(name)}Class`] == true;
9
+ let classes = () => controller[`${name}Classes`];
10
+ let defaultClasses = () => controllerMethod(controller, `default${pascalCase(name)}Classes`).call(controller) || [];
11
+ let classOrDefault = () => hasClass() ? classes() : defaultClasses();
12
+ if (controller[`${name}Classes`] == undefined) {
13
+ Object.defineProperty(controller, `${name}Classes`, {
14
+ get: () => hasClass() ? controller[`${name}Class`].split(' ') : defaultClasses(),
15
+ });
16
+ }
17
+ let methods = {
18
+ [`add${pascalCase(name)}Classes`]: (element = defaultElement) => element.classList.add(...classOrDefault()),
19
+ [`remove${pascalCase(name)}Classes`]: (element = defaultElement) => element.classList.remove(...classOrDefault()),
20
+ [`${name}ClassesPresent`]: (element = defaultElement) => classOrDefault().every((klass) => element.classList.contains(klass)),
21
+ };
22
+ Object.assign(controller, methods);
23
+ }
24
+ export function installClassMethods(controller) {
25
+ // @ts-ignore
26
+ let classes = controller.constructor.classes || [];
27
+ classes.forEach((classDefinition) => addMethodsForClassDefinition(controller, classDefinition));
28
+ }
@@ -0,0 +1,17 @@
1
+ import { isElementInViewport } from "../utilities/elements";
2
+ import { useEventListener } from "../mixins/use_event_listener";
3
+ import { useMixin } from "./create_mixin";
4
+ export function useClickOutside(controller, element, callback) {
5
+ callback = callback.bind(controller);
6
+ const handler = (event) => {
7
+ if (element.contains(event.target) || (!isElementInViewport(element))) {
8
+ return;
9
+ }
10
+ callback(event);
11
+ };
12
+ let { teardown } = useEventListener(controller, window, ["click", "touchend"], handler);
13
+ useMixin(controller, () => void 0, teardown);
14
+ return {
15
+ teardown,
16
+ };
17
+ }
@@ -0,0 +1,19 @@
1
+ import debounce from "lodash-es/debounce";
2
+ import { EventBus } from "../utilities/event_bus";
3
+ import { wrapArray } from "../utilities/arrays";
4
+ import { useMixin } from "./create_mixin";
5
+ export function useEventBus(controller, eventNameOrNames, handler, opts) {
6
+ let options = opts;
7
+ if (options === null || options === void 0 ? void 0 : options.debounce) {
8
+ handler = debounce(handler.bind(controller), options.debounce);
9
+ delete options.debounce;
10
+ }
11
+ else {
12
+ handler = handler.bind(controller);
13
+ }
14
+ let eventNames = wrapArray(eventNameOrNames);
15
+ let setup = () => eventNames.forEach(eventName => EventBus.on(eventName, handler));
16
+ let teardown = () => eventNames.forEach(eventName => EventBus.off(eventName, handler));
17
+ useMixin(controller, setup, teardown);
18
+ return { setup, teardown };
19
+ }