stimulus-library 0.7.5 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/controllers/ajax/async_block_controller.js +30 -0
- package/dist/controllers/ajax/{index.d.ts → index.js} +0 -1
- package/dist/controllers/ajax/lazy_block_controller.js +37 -0
- package/dist/controllers/ajax/load_block_controller.js +63 -0
- package/dist/controllers/ajax/poll_block_controller.js +35 -0
- package/dist/controllers/anchor_spy_controller.js +47 -0
- package/dist/controllers/back_link_controller.js +25 -0
- package/dist/controllers/clipboard_controller.js +35 -0
- package/dist/controllers/confirm_controller.js +33 -0
- package/dist/controllers/confirm_navigation_controller.js +29 -0
- package/dist/controllers/debug_controller.js +7 -0
- package/dist/controllers/disable_with_controller.js +66 -0
- package/dist/controllers/dismissable_controller.js +8 -0
- package/dist/controllers/element_save_controller.js +80 -0
- package/dist/controllers/empty_dom_controller.js +42 -0
- package/dist/controllers/equalize_controller.js +39 -0
- package/dist/controllers/forms/auto_submit_form_controller.js +62 -0
- package/dist/controllers/forms/autosize_controller.js +32 -0
- package/dist/controllers/forms/char_count_controller.js +37 -0
- package/dist/controllers/forms/checkbox_disable_inputs_controller.js +32 -0
- package/dist/controllers/forms/checkbox_enable_inputs_controller.js +32 -0
- package/dist/controllers/forms/checkbox_select_all_controller.js +35 -0
- package/dist/controllers/forms/checkbox_xor_controller.js +24 -0
- package/dist/controllers/forms/detect_dirty_controller.js +98 -0
- package/dist/controllers/forms/detect_dirty_form_controller.js +107 -0
- package/dist/controllers/forms/enable_inputs_controller.js +21 -0
- package/dist/controllers/forms/focus_steal_controller.js +28 -0
- package/dist/controllers/forms/form_rc_controller.js +47 -0
- package/dist/controllers/forms/form_save_controller.js +109 -0
- package/dist/controllers/forms/{index.d.ts → index.js} +0 -1
- package/dist/controllers/forms/limited_selection_checkboxes_controller.js +28 -0
- package/dist/controllers/forms/navigate_form_errors_controller.js +154 -0
- package/dist/controllers/forms/nested_form_controller.js +49 -0
- package/dist/controllers/forms/password_confirm_controller.js +26 -0
- package/dist/controllers/forms/password_peek_controller.js +21 -0
- package/dist/controllers/forms/remote_form_controller.js +26 -0
- package/dist/controllers/forms/sync_inputs_controller.js +67 -0
- package/dist/controllers/forms/value_warn_controller.js +45 -0
- package/dist/controllers/forms/word_count_controller.js +37 -0
- package/dist/controllers/{index.d.ts → index.js} +3 -1
- package/dist/controllers/media/fallback_image_controller.js +44 -0
- package/dist/controllers/media/{index.d.ts → index.js} +0 -1
- package/dist/controllers/media/lightbox_image_controller.js +71 -0
- package/dist/controllers/media/media_player_controller.js +31 -0
- package/dist/controllers/persisted_dismissable_controller.js +19 -0
- package/dist/controllers/prefetch_controller.js +74 -0
- package/dist/controllers/print_button_controller.js +18 -0
- package/dist/controllers/responsive_iframe_controller.js +35 -0
- package/dist/controllers/scroll/{index.d.ts → index.js} +0 -1
- package/dist/controllers/scroll/scroll_container_controller.js +81 -0
- package/dist/controllers/scroll/scroll_into_focus_controller.js +20 -0
- package/dist/controllers/scroll/scroll_to_bottom_controller.js +37 -0
- package/dist/controllers/scroll/scroll_to_controller.js +22 -0
- package/dist/controllers/scroll/scroll_to_top_controller.js +37 -0
- package/dist/controllers/self_destruct_controller.js +11 -0
- package/dist/controllers/signal/events.js +12 -0
- package/dist/controllers/signal/expressions.js +54 -0
- package/dist/controllers/signal/{index.d.ts → index.js} +0 -1
- package/dist/controllers/signal/signal_action_controller.js +31 -0
- package/dist/controllers/signal/signal_dom_children_controller.js +40 -0
- package/dist/controllers/signal/signal_input_controller.js +36 -0
- package/dist/controllers/signal/signal_visibility_controller.js +44 -0
- package/dist/controllers/sticky_controller.js +44 -0
- package/dist/controllers/tables/{index.d.ts → index.js} +0 -1
- package/dist/controllers/tables/table_sort_controller.js +97 -0
- package/dist/controllers/tables/table_truncate_controller.js +81 -0
- package/dist/controllers/teleport_controller.js +48 -0
- package/dist/controllers/temporary_state_controller.js +65 -0
- package/dist/controllers/toggle_class_controller.js +115 -0
- package/dist/controllers/trix_modifier_controller.js +121 -0
- package/dist/controllers/turbo_frame_rc_controller.js +65 -0
- package/dist/controllers/turbo_frame_refresh_controller.js +32 -0
- package/dist/controllers/utility/alert_controller.js +7 -0
- package/dist/controllers/utility/fullscreen_controller.js +10 -0
- package/dist/controllers/utility/{index.d.ts → index.js} +0 -1
- package/dist/controllers/utility/intersection_controller.js +25 -0
- package/dist/controllers/utility/interval_controller.js +16 -0
- package/dist/controllers/utility/presence_controller.js +19 -0
- package/dist/controllers/utility/print_controller.js +7 -0
- package/dist/controllers/utility/timeout_controller.js +13 -0
- package/dist/controllers/utility/user_focus_controller.js +23 -0
- package/dist/controllers/visual/clock_controller.js +51 -0
- package/dist/controllers/visual/countdown_controller.js +116 -0
- package/dist/controllers/visual/duration_controller.js +79 -0
- package/dist/controllers/visual/{index.d.ts → index.js} +0 -1
- package/dist/controllers/visual/tabs_controller.js +79 -0
- package/dist/controllers/visual/time_distance_controller.js +50 -0
- package/dist/controllers/visual/tree_view_controller.js +92 -0
- package/dist/{index.d.ts → index.js} +3 -1
- package/dist/mixins/create_mixin.js +11 -0
- package/dist/mixins/{index.d.ts → index.js} +0 -1
- package/dist/mixins/install_class_methods.js +28 -0
- package/dist/mixins/use_click_outside.js +17 -0
- package/dist/mixins/use_event_bus.js +19 -0
- package/dist/mixins/use_event_listener.js +34 -0
- package/dist/mixins/use_fullscreen.js +42 -0
- package/dist/mixins/use_geolocation.js +62 -0
- package/dist/mixins/use_hover.js +29 -0
- package/dist/mixins/use_injected_html.js +37 -0
- package/dist/mixins/use_intersection.js +45 -0
- package/dist/mixins/use_interval.js +13 -0
- package/dist/mixins/use_localstorage.js +122 -0
- package/dist/mixins/use_mutation_observer.js +9 -0
- package/dist/mixins/use_temporary_content.js +38 -0
- package/dist/mixins/use_timeout.js +20 -0
- package/dist/mixins/use_trix_modifiers.js +71 -0
- package/dist/polyfills/string.replaceAll.js +13 -0
- package/dist/utilities/arrays.js +3 -0
- package/dist/utilities/base_controller.js +56 -0
- package/dist/utilities/elements.js +102 -0
- package/dist/utilities/ephemeral_controller.js +42 -0
- package/dist/utilities/event_bus.js +2 -0
- package/dist/utilities/events.js +10 -0
- package/dist/utilities/fetchRetry.js +22 -0
- package/dist/utilities/{index.d.ts → index.js} +0 -1
- package/dist/utilities/logging.js +82 -0
- package/dist/utilities/reactive.js +23 -0
- package/dist/utilities/request_submit.js +20 -0
- package/dist/utilities/scroll.js +89 -0
- package/dist/utilities/stimulus.js +13 -0
- package/dist/utilities/strings.js +5 -0
- package/dist/utilities/turbo.js +3 -0
- package/package.json +17 -24
- package/CHANGELOG.md +0 -513
- package/dist/controllers/ajax/async_block_controller.d.ts +0 -18
- package/dist/controllers/ajax/async_block_controller.d.ts.map +0 -1
- package/dist/controllers/ajax/index.d.ts.map +0 -1
- package/dist/controllers/ajax/lazy_block_controller.d.ts +0 -10
- package/dist/controllers/ajax/lazy_block_controller.d.ts.map +0 -1
- package/dist/controllers/ajax/load_block_controller.d.ts +0 -24
- package/dist/controllers/ajax/load_block_controller.d.ts.map +0 -1
- package/dist/controllers/ajax/poll_block_controller.d.ts +0 -16
- package/dist/controllers/ajax/poll_block_controller.d.ts.map +0 -1
- package/dist/controllers/anchor_spy_controller.d.ts +0 -21
- package/dist/controllers/anchor_spy_controller.d.ts.map +0 -1
- package/dist/controllers/back_link_controller.d.ts +0 -17
- package/dist/controllers/back_link_controller.d.ts.map +0 -1
- package/dist/controllers/clipboard_controller.d.ts +0 -19
- package/dist/controllers/clipboard_controller.d.ts.map +0 -1
- package/dist/controllers/confirm_controller.d.ts +0 -13
- package/dist/controllers/confirm_controller.d.ts.map +0 -1
- package/dist/controllers/confirm_navigation_controller.d.ts +0 -15
- package/dist/controllers/confirm_navigation_controller.d.ts.map +0 -1
- package/dist/controllers/debug_controller.d.ts +0 -7
- package/dist/controllers/debug_controller.d.ts.map +0 -1
- package/dist/controllers/disable_with_controller.d.ts +0 -20
- package/dist/controllers/disable_with_controller.d.ts.map +0 -1
- package/dist/controllers/dismissable_controller.d.ts +0 -7
- package/dist/controllers/dismissable_controller.d.ts.map +0 -1
- package/dist/controllers/element_save_controller.d.ts +0 -31
- package/dist/controllers/element_save_controller.d.ts.map +0 -1
- package/dist/controllers/empty_dom_controller.d.ts +0 -22
- package/dist/controllers/empty_dom_controller.d.ts.map +0 -1
- package/dist/controllers/equalize_controller.d.ts +0 -16
- package/dist/controllers/equalize_controller.d.ts.map +0 -1
- package/dist/controllers/forms/auto_submit_form_controller.d.ts +0 -23
- package/dist/controllers/forms/auto_submit_form_controller.d.ts.map +0 -1
- package/dist/controllers/forms/autosize_controller.d.ts +0 -9
- package/dist/controllers/forms/autosize_controller.d.ts.map +0 -1
- package/dist/controllers/forms/char_count_controller.d.ts +0 -21
- package/dist/controllers/forms/char_count_controller.d.ts.map +0 -1
- package/dist/controllers/forms/checkbox_disable_inputs_controller.d.ts +0 -17
- package/dist/controllers/forms/checkbox_disable_inputs_controller.d.ts.map +0 -1
- package/dist/controllers/forms/checkbox_enable_inputs_controller.d.ts +0 -17
- package/dist/controllers/forms/checkbox_enable_inputs_controller.d.ts.map +0 -1
- package/dist/controllers/forms/checkbox_select_all_controller.d.ts +0 -14
- package/dist/controllers/forms/checkbox_select_all_controller.d.ts.map +0 -1
- package/dist/controllers/forms/checkbox_xor_controller.d.ts +0 -9
- package/dist/controllers/forms/checkbox_xor_controller.d.ts.map +0 -1
- package/dist/controllers/forms/detect_dirty_controller.d.ts +0 -15
- package/dist/controllers/forms/detect_dirty_controller.d.ts.map +0 -1
- package/dist/controllers/forms/detect_dirty_form_controller.d.ts +0 -18
- package/dist/controllers/forms/detect_dirty_form_controller.d.ts.map +0 -1
- package/dist/controllers/forms/enable_inputs_controller.d.ts +0 -14
- package/dist/controllers/forms/enable_inputs_controller.d.ts.map +0 -1
- package/dist/controllers/forms/focus_steal_controller.d.ts +0 -12
- package/dist/controllers/forms/focus_steal_controller.d.ts.map +0 -1
- package/dist/controllers/forms/form_rc_controller.d.ts +0 -18
- package/dist/controllers/forms/form_rc_controller.d.ts.map +0 -1
- package/dist/controllers/forms/form_save_controller.d.ts +0 -32
- package/dist/controllers/forms/form_save_controller.d.ts.map +0 -1
- package/dist/controllers/forms/index.d.ts.map +0 -1
- package/dist/controllers/forms/limited_selection_checkboxes_controller.d.ts +0 -17
- package/dist/controllers/forms/limited_selection_checkboxes_controller.d.ts.map +0 -1
- package/dist/controllers/forms/navigate_form_errors_controller.d.ts +0 -41
- package/dist/controllers/forms/navigate_form_errors_controller.d.ts.map +0 -1
- package/dist/controllers/forms/nested_form_controller.d.ts +0 -22
- package/dist/controllers/forms/nested_form_controller.d.ts.map +0 -1
- package/dist/controllers/forms/password_confirm_controller.d.ts +0 -12
- package/dist/controllers/forms/password_confirm_controller.d.ts.map +0 -1
- package/dist/controllers/forms/password_peek_controller.d.ts +0 -9
- package/dist/controllers/forms/password_peek_controller.d.ts.map +0 -1
- package/dist/controllers/forms/remote_form_controller.d.ts +0 -14
- package/dist/controllers/forms/remote_form_controller.d.ts.map +0 -1
- package/dist/controllers/forms/sync_inputs_controller.d.ts +0 -20
- package/dist/controllers/forms/sync_inputs_controller.d.ts.map +0 -1
- package/dist/controllers/forms/value_warn_controller.d.ts +0 -31
- package/dist/controllers/forms/value_warn_controller.d.ts.map +0 -1
- package/dist/controllers/forms/word_count_controller.d.ts +0 -21
- package/dist/controllers/forms/word_count_controller.d.ts.map +0 -1
- package/dist/controllers/index.d.ts.map +0 -1
- package/dist/controllers/media/fallback_image_controller.d.ts +0 -20
- package/dist/controllers/media/fallback_image_controller.d.ts.map +0 -1
- package/dist/controllers/media/index.d.ts.map +0 -1
- package/dist/controllers/media/lightbox_image_controller.d.ts +0 -31
- package/dist/controllers/media/lightbox_image_controller.d.ts.map +0 -1
- package/dist/controllers/media/media_player_controller.d.ts +0 -10
- package/dist/controllers/media/media_player_controller.d.ts.map +0 -1
- package/dist/controllers/prefetch_controller.d.ts +0 -17
- package/dist/controllers/prefetch_controller.d.ts.map +0 -1
- package/dist/controllers/print_button_controller.d.ts +0 -8
- package/dist/controllers/print_button_controller.d.ts.map +0 -1
- package/dist/controllers/responsive_iframe_controller.d.ts +0 -17
- package/dist/controllers/responsive_iframe_controller.d.ts.map +0 -1
- package/dist/controllers/scroll/index.d.ts.map +0 -1
- package/dist/controllers/scroll/scroll_container_controller.d.ts +0 -22
- package/dist/controllers/scroll/scroll_container_controller.d.ts.map +0 -1
- package/dist/controllers/scroll/scroll_into_focus_controller.d.ts +0 -16
- package/dist/controllers/scroll/scroll_into_focus_controller.d.ts.map +0 -1
- package/dist/controllers/scroll/scroll_to_bottom_controller.d.ts +0 -12
- package/dist/controllers/scroll/scroll_to_bottom_controller.d.ts.map +0 -1
- package/dist/controllers/scroll/scroll_to_controller.d.ts +0 -18
- package/dist/controllers/scroll/scroll_to_controller.d.ts.map +0 -1
- package/dist/controllers/scroll/scroll_to_top_controller.d.ts +0 -12
- package/dist/controllers/scroll/scroll_to_top_controller.d.ts.map +0 -1
- package/dist/controllers/self_destruct_controller.d.ts +0 -9
- package/dist/controllers/self_destruct_controller.d.ts.map +0 -1
- package/dist/controllers/signal/events.d.ts +0 -5
- package/dist/controllers/signal/events.d.ts.map +0 -1
- package/dist/controllers/signal/expressions.d.ts +0 -2
- package/dist/controllers/signal/expressions.d.ts.map +0 -1
- package/dist/controllers/signal/index.d.ts.map +0 -1
- package/dist/controllers/signal/signal_action_controller.d.ts +0 -15
- package/dist/controllers/signal/signal_action_controller.d.ts.map +0 -1
- package/dist/controllers/signal/signal_dom_children_controller.d.ts +0 -17
- package/dist/controllers/signal/signal_dom_children_controller.d.ts.map +0 -1
- package/dist/controllers/signal/signal_input_controller.d.ts +0 -20
- package/dist/controllers/signal/signal_input_controller.d.ts.map +0 -1
- package/dist/controllers/signal/signal_visibility_controller.d.ts +0 -18
- package/dist/controllers/signal/signal_visibility_controller.d.ts.map +0 -1
- package/dist/controllers/sticky_controller.d.ts +0 -16
- package/dist/controllers/sticky_controller.d.ts.map +0 -1
- package/dist/controllers/tables/index.d.ts.map +0 -1
- package/dist/controllers/tables/table_sort_controller.d.ts +0 -20
- package/dist/controllers/tables/table_sort_controller.d.ts.map +0 -1
- package/dist/controllers/tables/table_truncate_controller.d.ts +0 -26
- package/dist/controllers/tables/table_truncate_controller.d.ts.map +0 -1
- package/dist/controllers/teleport_controller.d.ts +0 -16
- package/dist/controllers/teleport_controller.d.ts.map +0 -1
- package/dist/controllers/temporary_state_controller.d.ts +0 -27
- package/dist/controllers/temporary_state_controller.d.ts.map +0 -1
- package/dist/controllers/toggle_class_controller.d.ts +0 -36
- package/dist/controllers/toggle_class_controller.d.ts.map +0 -1
- package/dist/controllers/trix_modifier_controller.d.ts +0 -88
- package/dist/controllers/trix_modifier_controller.d.ts.map +0 -1
- package/dist/controllers/turbo_frame_rc_controller.d.ts +0 -21
- package/dist/controllers/turbo_frame_rc_controller.d.ts.map +0 -1
- package/dist/controllers/turbo_frame_refresh_controller.d.ts +0 -14
- package/dist/controllers/turbo_frame_refresh_controller.d.ts.map +0 -1
- package/dist/controllers/utility/alert_controller.d.ts +0 -9
- package/dist/controllers/utility/alert_controller.d.ts.map +0 -1
- package/dist/controllers/utility/fullscreen_controller.d.ts +0 -8
- package/dist/controllers/utility/fullscreen_controller.d.ts.map +0 -1
- package/dist/controllers/utility/index.d.ts.map +0 -1
- package/dist/controllers/utility/intersection_controller.d.ts +0 -14
- package/dist/controllers/utility/intersection_controller.d.ts.map +0 -1
- package/dist/controllers/utility/interval_controller.d.ts +0 -11
- package/dist/controllers/utility/interval_controller.d.ts.map +0 -1
- package/dist/controllers/utility/presence_controller.d.ts +0 -14
- package/dist/controllers/utility/presence_controller.d.ts.map +0 -1
- package/dist/controllers/utility/print_controller.d.ts +0 -5
- package/dist/controllers/utility/print_controller.d.ts.map +0 -1
- package/dist/controllers/utility/timeout_controller.d.ts +0 -10
- package/dist/controllers/utility/timeout_controller.d.ts.map +0 -1
- package/dist/controllers/utility/user_focus_controller.d.ts +0 -9
- package/dist/controllers/utility/user_focus_controller.d.ts.map +0 -1
- package/dist/controllers/visual/clock_controller.d.ts +0 -16
- package/dist/controllers/visual/clock_controller.d.ts.map +0 -1
- package/dist/controllers/visual/countdown_controller.d.ts +0 -46
- package/dist/controllers/visual/countdown_controller.d.ts.map +0 -1
- package/dist/controllers/visual/duration_controller.d.ts +0 -26
- package/dist/controllers/visual/duration_controller.d.ts.map +0 -1
- package/dist/controllers/visual/index.d.ts.map +0 -1
- package/dist/controllers/visual/tabs_controller.d.ts +0 -30
- package/dist/controllers/visual/tabs_controller.d.ts.map +0 -1
- package/dist/controllers/visual/time_distance_controller.d.ts +0 -16
- package/dist/controllers/visual/time_distance_controller.d.ts.map +0 -1
- package/dist/controllers/visual/tree_view_controller.d.ts +0 -26
- package/dist/controllers/visual/tree_view_controller.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/mixins/create_mixin.d.ts +0 -3
- package/dist/mixins/create_mixin.d.ts.map +0 -1
- package/dist/mixins/index.d.ts.map +0 -1
- package/dist/mixins/install_class_methods.d.ts +0 -6
- package/dist/mixins/install_class_methods.d.ts.map +0 -1
- package/dist/mixins/use_click_outside.d.ts +0 -5
- package/dist/mixins/use_click_outside.d.ts.map +0 -1
- package/dist/mixins/use_event_bus.d.ts +0 -8
- package/dist/mixins/use_event_bus.d.ts.map +0 -1
- package/dist/mixins/use_event_listener.d.ts +0 -20
- package/dist/mixins/use_event_listener.d.ts.map +0 -1
- package/dist/mixins/use_fullscreen.d.ts +0 -9
- package/dist/mixins/use_fullscreen.d.ts.map +0 -1
- package/dist/mixins/use_geolocation.d.ts +0 -19
- package/dist/mixins/use_geolocation.d.ts.map +0 -1
- package/dist/mixins/use_hover.d.ts +0 -5
- package/dist/mixins/use_hover.d.ts.map +0 -1
- package/dist/mixins/use_injected_html.d.ts +0 -11
- package/dist/mixins/use_injected_html.d.ts.map +0 -1
- package/dist/mixins/use_intersection.d.ts +0 -14
- package/dist/mixins/use_intersection.d.ts.map +0 -1
- package/dist/mixins/use_interval.d.ts +0 -3
- package/dist/mixins/use_interval.d.ts.map +0 -1
- package/dist/mixins/use_localstorage.d.ts +0 -21
- package/dist/mixins/use_localstorage.d.ts.map +0 -1
- package/dist/mixins/use_mutation_observer.d.ts +0 -3
- package/dist/mixins/use_mutation_observer.d.ts.map +0 -1
- package/dist/mixins/use_temporary_content.d.ts +0 -6
- package/dist/mixins/use_temporary_content.d.ts.map +0 -1
- package/dist/mixins/use_timeout.d.ts +0 -3
- package/dist/mixins/use_timeout.d.ts.map +0 -1
- package/dist/mixins/use_trix_modifiers.d.ts +0 -11
- package/dist/mixins/use_trix_modifiers.d.ts.map +0 -1
- package/dist/stimulus-library.cjs.js +0 -2
- package/dist/stimulus-library.cjs.js.map +0 -1
- package/dist/stimulus-library.es.js +0 -5094
- package/dist/stimulus-library.es.js.map +0 -1
- package/dist/stimulus-library.umd.js +0 -2
- package/dist/stimulus-library.umd.js.map +0 -1
- package/dist/utilities/arrays.d.ts +0 -2
- package/dist/utilities/arrays.d.ts.map +0 -1
- package/dist/utilities/base_controller.d.ts +0 -11
- package/dist/utilities/base_controller.d.ts.map +0 -1
- package/dist/utilities/elements.d.ts +0 -49
- package/dist/utilities/elements.d.ts.map +0 -1
- package/dist/utilities/ephemeral_controller.d.ts +0 -6
- package/dist/utilities/ephemeral_controller.d.ts.map +0 -1
- package/dist/utilities/event_bus.d.ts +0 -4
- package/dist/utilities/event_bus.d.ts.map +0 -1
- package/dist/utilities/events.d.ts +0 -3
- package/dist/utilities/events.d.ts.map +0 -1
- package/dist/utilities/fetchRetry.d.ts +0 -2
- package/dist/utilities/fetchRetry.d.ts.map +0 -1
- package/dist/utilities/index.d.ts.map +0 -1
- package/dist/utilities/logging.d.ts +0 -6
- package/dist/utilities/logging.d.ts.map +0 -1
- package/dist/utilities/reactive.d.ts +0 -2
- package/dist/utilities/reactive.d.ts.map +0 -1
- package/dist/utilities/request_submit.d.ts +0 -3
- package/dist/utilities/request_submit.d.ts.map +0 -1
- package/dist/utilities/scroll.d.ts +0 -11
- package/dist/utilities/scroll.d.ts.map +0 -1
- package/dist/utilities/stimulus.d.ts +0 -3
- package/dist/utilities/stimulus.d.ts.map +0 -1
- package/dist/utilities/strings.d.ts +0 -2
- package/dist/utilities/strings.d.ts.map +0 -1
- package/dist/utilities/turbo.d.ts +0 -2
- package/dist/utilities/turbo.d.ts.map +0 -1
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { BaseController } from "../utilities/base_controller";
|
|
2
|
+
import { useEventListener } from "../mixins/use_event_listener";
|
|
3
|
+
import { warn } from "../utilities/logging";
|
|
4
|
+
export class PrefetchController extends BaseController {
|
|
5
|
+
get _mode() {
|
|
6
|
+
return this.hasModeValue ? this.modeValue : "mouseover";
|
|
7
|
+
}
|
|
8
|
+
get _supportsPrefetch() {
|
|
9
|
+
var _a, _b;
|
|
10
|
+
const link = document.createElement('link');
|
|
11
|
+
return ((_a = link.relList) === null || _a === void 0 ? void 0 : _a.supports) && ((_b = link.relList) === null || _b === void 0 ? void 0 : _b.supports('prefetch'));
|
|
12
|
+
}
|
|
13
|
+
get _href() {
|
|
14
|
+
return this.el.href;
|
|
15
|
+
}
|
|
16
|
+
get _existingPrefetch() {
|
|
17
|
+
return (document.head.querySelectorAll(`link[rel="prefetch"][href="${this._href}"]`) || []).length > 0;
|
|
18
|
+
}
|
|
19
|
+
get _connectionSuitable() {
|
|
20
|
+
// @ts-ignore
|
|
21
|
+
const connection = navigator.connection;
|
|
22
|
+
// no way to know what network state is. Allow prefetching
|
|
23
|
+
if (!connection) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
// Don't prefetch if network conditions are poor or user has enabled data-saving mode
|
|
27
|
+
if (connection) {
|
|
28
|
+
// @ts-ignore Experimental API
|
|
29
|
+
if (connection.saveData) {
|
|
30
|
+
warn(this, 'Data Saving is enabled');
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
// @ts-ignore Experimental API
|
|
34
|
+
if (/2g/.test(connection.effectiveType)) {
|
|
35
|
+
warn(this, "Network is too slow");
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
connect() {
|
|
42
|
+
if (!this._supportsPrefetch) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
switch (this._mode) {
|
|
46
|
+
case "intersect":
|
|
47
|
+
this._setupObserver();
|
|
48
|
+
break;
|
|
49
|
+
case "mouseover":
|
|
50
|
+
useEventListener(this, this.el, "mouseover", this.prefetch, { once: true });
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
throw new Error(`'${this._mode}' is not a supported prefetch mode`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
_setupObserver() {
|
|
57
|
+
const observer = new IntersectionObserver(([entry], observer) => {
|
|
58
|
+
if (entry.isIntersecting) {
|
|
59
|
+
this.prefetch();
|
|
60
|
+
observer.unobserve(entry.target);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
observer.observe(this.element);
|
|
64
|
+
}
|
|
65
|
+
prefetch() {
|
|
66
|
+
if (this._existingPrefetch || !this._connectionSuitable) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const link = document.createElement('link');
|
|
70
|
+
Object.assign(link, { rel: 'prefetch', href: this._href, as: 'document' });
|
|
71
|
+
document.head.appendChild(link);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
PrefetchController.values = { mode: String };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { PrintController } from "./utility/print_controller";
|
|
2
|
+
import { useEventListener } from "../mixins/use_event_listener";
|
|
3
|
+
import { installClassMethods } from "../mixins/install_class_methods";
|
|
4
|
+
export class PrintButtonController extends PrintController {
|
|
5
|
+
get defaultUnsupportedClasses() {
|
|
6
|
+
return ["unsupported"];
|
|
7
|
+
}
|
|
8
|
+
connect() {
|
|
9
|
+
installClassMethods(this);
|
|
10
|
+
if (!("print" in window)) {
|
|
11
|
+
this.addUnsupportedClasses();
|
|
12
|
+
}
|
|
13
|
+
useEventListener(this, this.el, 'click', this.print);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
PrintButtonController.classes = [
|
|
17
|
+
'unsupported',
|
|
18
|
+
];
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { BaseController } from "../utilities/base_controller";
|
|
2
|
+
import { useEventListener } from "../mixins/use_event_listener";
|
|
3
|
+
export class ResponsiveIframeWrapperController extends BaseController {
|
|
4
|
+
connect() {
|
|
5
|
+
useEventListener(this, window, "message", this.messageReceived);
|
|
6
|
+
}
|
|
7
|
+
messageReceived(message) {
|
|
8
|
+
let data = message.data;
|
|
9
|
+
if (data.hasOwnProperty("name") && data.name === "iframe-body" && data.hasOwnProperty("height")) {
|
|
10
|
+
this.resize(data.height);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
resize(height) {
|
|
14
|
+
this.el.style.height = `${height}px`;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class ResponsiveIframeBodyController extends BaseController {
|
|
18
|
+
connect() {
|
|
19
|
+
// If this Window is inside a frame
|
|
20
|
+
if (window.self !== window.top) {
|
|
21
|
+
useEventListener(this, window, "resize", this.postUpdate, { debounce: 200 });
|
|
22
|
+
this.postUpdate();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
postUpdate() {
|
|
26
|
+
let payload = { name: "iframe-body", height: this.getHeight() };
|
|
27
|
+
window.parent.postMessage(payload, "*");
|
|
28
|
+
}
|
|
29
|
+
getHeight() {
|
|
30
|
+
const body = document.body;
|
|
31
|
+
const html = document.documentElement;
|
|
32
|
+
// Get the largest height out of body and html's various height measurements
|
|
33
|
+
return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
11
|
+
import { scrollAbsoluteBottom, scrollAbsoluteLeft, scrollAbsoluteTop, scrollDown, scrollLeft, scrollRight, scrollUp } from "../../utilities/scroll";
|
|
12
|
+
export class ScrollContainerController extends BaseController {
|
|
13
|
+
get _increment() {
|
|
14
|
+
return this.hasIncrementValue ? this.incrementValue : 50;
|
|
15
|
+
}
|
|
16
|
+
get _behaviour() {
|
|
17
|
+
if (this.hasBehaviourValue) {
|
|
18
|
+
if (["auto", "smooth"].includes(this.behaviourValue)) {
|
|
19
|
+
return this.behaviourValue;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
throw new Error(`'${this.behaviourValue}' is not a recognised scroll behaviour`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return "auto";
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
scrollTop(event) {
|
|
30
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
32
|
+
yield scrollAbsoluteTop(this.el, { behavior: this._behaviour });
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
scrollBottom(event) {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
38
|
+
yield scrollAbsoluteBottom(this.el, { behavior: this._behaviour });
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
scrollLeft(event) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
44
|
+
yield scrollAbsoluteLeft(this.el, { behavior: this._behaviour });
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
scrollRight(event) {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
50
|
+
yield scrollAbsoluteLeft(this.el, { behavior: this._behaviour });
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
up(event) {
|
|
54
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
55
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
56
|
+
yield scrollUp(this.el, this._increment, { behavior: this._behaviour });
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
down(event) {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
62
|
+
yield scrollDown(this.el, this._increment, { behavior: this._behaviour });
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
left(event) {
|
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
68
|
+
yield scrollLeft(this.el, this._increment, { behavior: this._behaviour });
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
right(event) {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
74
|
+
yield scrollRight(this.el, this._increment, { behavior: this._behaviour });
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
ScrollContainerController.values = {
|
|
79
|
+
behaviour: String,
|
|
80
|
+
increment: Number,
|
|
81
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { EphemeralController } from "../../utilities/ephemeral_controller";
|
|
2
|
+
import { scrollToElement } from "../../utilities/scroll";
|
|
3
|
+
export class ScrollIntoFocusController extends EphemeralController {
|
|
4
|
+
connect() {
|
|
5
|
+
requestAnimationFrame(() => {
|
|
6
|
+
// Attempt smooth scrolling, with polyfill
|
|
7
|
+
scrollToElement(this.el, {
|
|
8
|
+
behavior: this.hasBehaviorValue ? this.behaviorValue : "smooth",
|
|
9
|
+
block: this.hasBlockValue ? this.blockValue : "center",
|
|
10
|
+
inline: this.hasInlineValue ? this.inlineValue : "center",
|
|
11
|
+
}).catch(() => this.el.scrollIntoView()); // Fallback to snap-scrolling
|
|
12
|
+
this._cleanupSelf();
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
ScrollIntoFocusController.values = {
|
|
17
|
+
behavior: String,
|
|
18
|
+
block: String,
|
|
19
|
+
inline: String,
|
|
20
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
11
|
+
import { getScrollParent, scrollAbsoluteBottom } from "../../utilities/scroll";
|
|
12
|
+
export class ScrollToBottomController extends BaseController {
|
|
13
|
+
get _mode() {
|
|
14
|
+
return this.hasModeValue ? this.modeValue : "document";
|
|
15
|
+
}
|
|
16
|
+
get _scrollTarget() {
|
|
17
|
+
let target;
|
|
18
|
+
if (this._mode == "document") {
|
|
19
|
+
target = window;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
target = getScrollParent(this.el);
|
|
23
|
+
}
|
|
24
|
+
return target;
|
|
25
|
+
}
|
|
26
|
+
scroll(event) {
|
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
29
|
+
if (this._scrollTarget) {
|
|
30
|
+
yield scrollAbsoluteBottom(this._scrollTarget);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
ScrollToBottomController.values = {
|
|
36
|
+
mode: String,
|
|
37
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
2
|
+
import { scrollToElement } from "../../utilities/scroll";
|
|
3
|
+
export class ScrollToController extends BaseController {
|
|
4
|
+
scroll() {
|
|
5
|
+
let target = document.querySelector(this.selectorValue);
|
|
6
|
+
if (!target) {
|
|
7
|
+
console.warn(`Could not find target for '${this.selectorValue}'`);
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
scrollToElement(target, {
|
|
11
|
+
behavior: this.hasBehaviorValue ? this.behaviorValue : "smooth",
|
|
12
|
+
block: this.hasBlockValue ? this.blockValue : "center",
|
|
13
|
+
inline: this.hasInlineValue ? this.inlineValue : "center",
|
|
14
|
+
}).catch(() => target.scrollIntoView()); // Fallback to snap-scrolling
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
ScrollToController.values = {
|
|
18
|
+
selector: String,
|
|
19
|
+
behavior: String,
|
|
20
|
+
block: String,
|
|
21
|
+
inline: String,
|
|
22
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
11
|
+
import { getScrollParent, scrollAbsoluteTop } from "../../utilities/scroll";
|
|
12
|
+
export class ScrollToTopController extends BaseController {
|
|
13
|
+
get _mode() {
|
|
14
|
+
return this.hasModeValue ? this.modeValue : "document";
|
|
15
|
+
}
|
|
16
|
+
get _scrollTarget() {
|
|
17
|
+
let target;
|
|
18
|
+
if (this._mode == "document") {
|
|
19
|
+
target = window;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
target = getScrollParent(this.el);
|
|
23
|
+
}
|
|
24
|
+
return target;
|
|
25
|
+
}
|
|
26
|
+
scroll(event) {
|
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
29
|
+
if (this._scrollTarget) {
|
|
30
|
+
yield scrollAbsoluteTop(this._scrollTarget);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
ScrollToTopController.values = {
|
|
36
|
+
mode: String,
|
|
37
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BaseController } from "../utilities/base_controller";
|
|
2
|
+
import { useTimeout } from "../mixins/use_timeout";
|
|
3
|
+
export class SelfDestructController extends BaseController {
|
|
4
|
+
connect() {
|
|
5
|
+
requestAnimationFrame(() => {
|
|
6
|
+
// Only start countdown on first paint
|
|
7
|
+
useTimeout(this, () => this.el.remove(), this.secondsValue * 1000);
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
SelfDestructController.values = { seconds: Number };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function signalEventName(name, type) {
|
|
2
|
+
return `signal:${type}:${name}`;
|
|
3
|
+
}
|
|
4
|
+
export function signalConnectEvent(name) {
|
|
5
|
+
return signalEventName(name, 'connect');
|
|
6
|
+
}
|
|
7
|
+
export function signalValueEvent(name) {
|
|
8
|
+
return signalEventName(name, 'value');
|
|
9
|
+
}
|
|
10
|
+
export function signalVisibilityEvent(name, action) {
|
|
11
|
+
return signalEventName(`${name}:${action}`, 'visibility');
|
|
12
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export function extractPredicates(expressionString) {
|
|
2
|
+
expressionString = expressionString.trim();
|
|
3
|
+
let andExpression = expressionString.includes("&&");
|
|
4
|
+
let orExpression = expressionString.includes("||");
|
|
5
|
+
let groupings = expressionString.includes("(") || expressionString.includes(")");
|
|
6
|
+
if (andExpression && orExpression) {
|
|
7
|
+
throw new Error("Cannot have both && and || in the same expression.");
|
|
8
|
+
}
|
|
9
|
+
if (groupings) {
|
|
10
|
+
throw new Error("Cannot have logical groupings `(>3 && <= 9) || (>1 && <2)` in the expression. Only supports simple expressions like `>1 && <3`");
|
|
11
|
+
}
|
|
12
|
+
let expressions = expressionString.split(andExpression ? "&&" : "||");
|
|
13
|
+
if (andExpression) {
|
|
14
|
+
return expressions.map(ex => _predicateForExpression(ex));
|
|
15
|
+
}
|
|
16
|
+
else if (orExpression) {
|
|
17
|
+
return expressions.map(ex => _predicateForExpression(ex));
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
return [_predicateForExpression(expressionString)];
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function _predicateForExpression(expression) {
|
|
24
|
+
let operators = [">=", "<=", "==", "!=", ">", "<"];
|
|
25
|
+
let operator = operators.find(part => expression.includes(part));
|
|
26
|
+
if (!operator) {
|
|
27
|
+
throw new Error(`Could not find operator in expression: ${expression}`);
|
|
28
|
+
}
|
|
29
|
+
let expressionValue = expression.split(operator)[1].trim();
|
|
30
|
+
let isNumber = /^-?\d*(\.\d+)?$/.test(expressionValue);
|
|
31
|
+
if (isNumber) {
|
|
32
|
+
expressionValue = parseFloat(expressionValue);
|
|
33
|
+
}
|
|
34
|
+
if (expressionValue === "") {
|
|
35
|
+
throw new Error(`Could not find a value in expression: ${expression}`);
|
|
36
|
+
}
|
|
37
|
+
let notEmpty = (signalValue) => signalValue !== "";
|
|
38
|
+
switch (operator) {
|
|
39
|
+
case ">":
|
|
40
|
+
return (signalValue) => isNumber && notEmpty(signalValue) && signalValue > expressionValue;
|
|
41
|
+
case "<":
|
|
42
|
+
return (signalValue) => isNumber && notEmpty(signalValue) && signalValue < expressionValue;
|
|
43
|
+
case ">=":
|
|
44
|
+
return (signalValue) => isNumber && notEmpty(signalValue) && signalValue >= expressionValue;
|
|
45
|
+
case "<=":
|
|
46
|
+
return (signalValue) => isNumber && notEmpty(signalValue) && signalValue <= expressionValue;
|
|
47
|
+
case "==":
|
|
48
|
+
return (signalValue) => notEmpty(signalValue) && signalValue == expressionValue;
|
|
49
|
+
case "!=":
|
|
50
|
+
return (signalValue) => notEmpty(signalValue) && signalValue != expressionValue;
|
|
51
|
+
default:
|
|
52
|
+
throw new Error(`Unknown operator ${operator}`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
2
|
+
import { extractPredicates } from "./expressions";
|
|
3
|
+
import { useEventBus } from "../../mixins/use_event_bus";
|
|
4
|
+
import { EventBus } from "../../utilities";
|
|
5
|
+
import { signalConnectEvent, signalEventName, signalValueEvent } from "./events";
|
|
6
|
+
export class SignalActionController extends BaseController {
|
|
7
|
+
get _predicates() {
|
|
8
|
+
return extractPredicates(this.whenValue);
|
|
9
|
+
}
|
|
10
|
+
connect() {
|
|
11
|
+
EventBus.emit(signalConnectEvent(this.nameValue));
|
|
12
|
+
useEventBus(this, signalValueEvent(this.nameValue), this._onSignal);
|
|
13
|
+
}
|
|
14
|
+
_onSignal(payload) {
|
|
15
|
+
let value = payload.value;
|
|
16
|
+
if (!this.hasWhenValue) {
|
|
17
|
+
this.dispatchEvent(this.el, signalEventName(this.nameValue, 'match'));
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (this._predicates.every(predicate => predicate(value))) {
|
|
21
|
+
this.dispatchEvent(this.el, signalEventName(this.nameValue, 'match'), { detail: { element: this.el, value } });
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
this.dispatchEvent(this.el, signalEventName(this.nameValue, 'no-match'), { detail: { element: this.el, value } });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
SignalActionController.values = {
|
|
29
|
+
name: String,
|
|
30
|
+
when: String,
|
|
31
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
2
|
+
import { EventBus } from "../../utilities";
|
|
3
|
+
import { signalConnectEvent, signalValueEvent } from "./events";
|
|
4
|
+
import { useMutationObserver } from "../../mixins/use_mutation_observer";
|
|
5
|
+
import { useEventBus } from "../../mixins/use_event_bus";
|
|
6
|
+
export class SignalDomChildrenController extends BaseController {
|
|
7
|
+
get _children() {
|
|
8
|
+
if (this.hasScopeSelectorValue) {
|
|
9
|
+
return Array.from(this.el.querySelectorAll(this.scopeSelectorValue));
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
return Array.from(this.el.children);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
get _name() {
|
|
16
|
+
if (this.hasNameValue) {
|
|
17
|
+
return this.nameValue;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
throw new Error("SignalEmptyDomController requires a nameValue to be provided");
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
connect() {
|
|
24
|
+
useEventBus(this, signalConnectEvent(this._name), this.emitChildCount);
|
|
25
|
+
EventBus.emit(signalConnectEvent(this._name));
|
|
26
|
+
useMutationObserver(this, this.el, this.mutate, { childList: true });
|
|
27
|
+
this.emitChildCount();
|
|
28
|
+
}
|
|
29
|
+
mutate(entries) {
|
|
30
|
+
this.emitChildCount();
|
|
31
|
+
}
|
|
32
|
+
emitChildCount() {
|
|
33
|
+
let childCount = this._children.length;
|
|
34
|
+
EventBus.emit(signalValueEvent(this._name), { element: this.el, value: childCount.toString() });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
SignalDomChildrenController.values = {
|
|
38
|
+
name: String,
|
|
39
|
+
scopeSelector: String,
|
|
40
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
2
|
+
import { EventBus } from "../../utilities/event_bus";
|
|
3
|
+
import { useEventListeners } from "../../mixins/use_event_listener";
|
|
4
|
+
import { getAllRadiosInGroup, isHTMLInputElement } from "../../utilities";
|
|
5
|
+
import { signalConnectEvent, signalValueEvent } from "./events";
|
|
6
|
+
import { useEventBus } from "../../mixins/use_event_bus";
|
|
7
|
+
export class SignalInputController extends BaseController {
|
|
8
|
+
get _debounceTimeout() {
|
|
9
|
+
return this.hasDebounceIntervalValue ? this.debounceIntervalValue : 1;
|
|
10
|
+
}
|
|
11
|
+
get _name() {
|
|
12
|
+
return this.hasNameValue ? this.nameValue : this.element.name;
|
|
13
|
+
}
|
|
14
|
+
connect() {
|
|
15
|
+
useEventBus(this, signalConnectEvent(this._name), () => this.emitValue());
|
|
16
|
+
useEventListeners(this, this.el, ["input", "change"], this.emitValue, { debounce: this._debounceTimeout || undefined });
|
|
17
|
+
requestAnimationFrame(() => this.emitValue());
|
|
18
|
+
}
|
|
19
|
+
emitValue() {
|
|
20
|
+
var _a;
|
|
21
|
+
let value = this.el.value;
|
|
22
|
+
if (isHTMLInputElement(this.el) && this.el.type === "checkbox") {
|
|
23
|
+
value = this.el.checked ? "true" : "false";
|
|
24
|
+
}
|
|
25
|
+
else if (isHTMLInputElement(this.el) && this.el.type === "radio") {
|
|
26
|
+
let selectedValue = (_a = getAllRadiosInGroup(this.el).find(el => el.checked)) === null || _a === void 0 ? void 0 : _a.value;
|
|
27
|
+
value = selectedValue ? selectedValue : "";
|
|
28
|
+
}
|
|
29
|
+
this.dispatchEvent(this.el, signalValueEvent(this._name), { detail: { value } });
|
|
30
|
+
EventBus.emit(signalValueEvent(this._name), { element: this.el, value });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
SignalInputController.values = {
|
|
34
|
+
name: String,
|
|
35
|
+
debounceInterval: Number,
|
|
36
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
2
|
+
import { useEventBus } from "../../mixins/use_event_bus";
|
|
3
|
+
import { extractPredicates } from "./expressions";
|
|
4
|
+
import { signalConnectEvent, signalValueEvent, signalVisibilityEvent } from "./events";
|
|
5
|
+
import { EventBus } from "../../utilities";
|
|
6
|
+
import { installClassMethods } from "../../mixins/install_class_methods";
|
|
7
|
+
export class SignalVisibilityController extends BaseController {
|
|
8
|
+
get _predicates() {
|
|
9
|
+
return extractPredicates(this.showValue);
|
|
10
|
+
}
|
|
11
|
+
get defaultHideClasses() {
|
|
12
|
+
return ["hide"];
|
|
13
|
+
}
|
|
14
|
+
connect() {
|
|
15
|
+
installClassMethods(this);
|
|
16
|
+
EventBus.emit(signalConnectEvent(this.nameValue));
|
|
17
|
+
useEventBus(this, signalValueEvent(this.nameValue), this._onSignal);
|
|
18
|
+
}
|
|
19
|
+
_onSignal(payload) {
|
|
20
|
+
let value = payload.value;
|
|
21
|
+
if (this.showValue == "default") {
|
|
22
|
+
if (value == "") {
|
|
23
|
+
this.removeHideClasses(this.el);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this.addHideClasses(this.el);
|
|
27
|
+
}
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (this._predicates.every(predicate => predicate(value))) {
|
|
31
|
+
this.dispatchEvent(this.el, signalVisibilityEvent(this.nameValue, "show"), { detail: { predicate: this.showValue, value } });
|
|
32
|
+
this.removeHideClasses(this.el);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
this.dispatchEvent(this.el, signalVisibilityEvent(this.nameValue, "hide"), { detail: { predicate: this.showValue, value } });
|
|
36
|
+
this.addHideClasses(this.el);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
SignalVisibilityController.values = {
|
|
41
|
+
name: String,
|
|
42
|
+
show: String,
|
|
43
|
+
};
|
|
44
|
+
SignalVisibilityController.classes = ['hide'];
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { BaseController } from "../utilities/base_controller";
|
|
2
|
+
import { useInjectedElement } from "../mixins/use_injected_html";
|
|
3
|
+
export class StickyController extends BaseController {
|
|
4
|
+
constructor() {
|
|
5
|
+
super(...arguments);
|
|
6
|
+
this._magicElement = null;
|
|
7
|
+
}
|
|
8
|
+
get defaultStuckClasses() {
|
|
9
|
+
return ["stuck"];
|
|
10
|
+
}
|
|
11
|
+
get _mode() {
|
|
12
|
+
if (this.hasModeValue) {
|
|
13
|
+
if (!['top', 'bottom'].includes(this.modeValue)) {
|
|
14
|
+
throw new Error(`The modeValue provided '${this.modeValue}' is not one of the recognised configuration options`);
|
|
15
|
+
}
|
|
16
|
+
if (this.modeValue === 'top') {
|
|
17
|
+
return 'beforebegin';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return "afterend";
|
|
21
|
+
}
|
|
22
|
+
connect() {
|
|
23
|
+
this._magicElement = document.createElement("div");
|
|
24
|
+
useInjectedElement(this, this.el, this._mode, this._magicElement);
|
|
25
|
+
const observer = new IntersectionObserver(entries => {
|
|
26
|
+
entries.forEach(entry => {
|
|
27
|
+
if (entry.target !== this._magicElement) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (entry.intersectionRatio === 0) {
|
|
31
|
+
this.addStuckClasses();
|
|
32
|
+
}
|
|
33
|
+
else if (entry.intersectionRatio === 1) {
|
|
34
|
+
this.removeStuckClasses();
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}, {
|
|
38
|
+
threshold: [0, 1],
|
|
39
|
+
});
|
|
40
|
+
observer.observe(this._magicElement);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
StickyController.classes = ["stuck"];
|
|
44
|
+
StickyController.values = { mode: String };
|