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.
- package/README.md +1 -1
- 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/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 +8 -18
- package/CHANGELOG.md +0 -499
- 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/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 -4719
- 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,154 @@
|
|
|
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 { scrollToElement } from "../../utilities/scroll";
|
|
12
|
+
import clamp from "lodash-es/clamp";
|
|
13
|
+
import { installClassMethods } from "../../mixins/install_class_methods";
|
|
14
|
+
export class NavigateFormErrorsController extends BaseController {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this._errors = [];
|
|
18
|
+
this._firstClick = false;
|
|
19
|
+
}
|
|
20
|
+
get defaultCurrentClasses() {
|
|
21
|
+
return ["currentError"];
|
|
22
|
+
}
|
|
23
|
+
get _errorCount() {
|
|
24
|
+
return this._errors.length;
|
|
25
|
+
}
|
|
26
|
+
get _previousIndex() {
|
|
27
|
+
let index = this._index - 1;
|
|
28
|
+
if (index < 0) {
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
31
|
+
return index;
|
|
32
|
+
}
|
|
33
|
+
get _nextIndex() {
|
|
34
|
+
let index = this._index + 1;
|
|
35
|
+
if (index > this._errors.length - 1) {
|
|
36
|
+
return this._errors.length - 1;
|
|
37
|
+
}
|
|
38
|
+
return index;
|
|
39
|
+
}
|
|
40
|
+
get _index() {
|
|
41
|
+
return clamp(this.hasIndexValue ? this.indexValue : 0, 0, this._errors.length);
|
|
42
|
+
}
|
|
43
|
+
get _selector() {
|
|
44
|
+
if (this.hasSelectorValue) {
|
|
45
|
+
return this.selectorValue;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
throw new Error("Expected `selectorValue` to be present");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
get _currentError() {
|
|
52
|
+
return this._errors[this._index];
|
|
53
|
+
}
|
|
54
|
+
get _otherErrors() {
|
|
55
|
+
return this._errors.filter((error, index) => index !== this._index);
|
|
56
|
+
}
|
|
57
|
+
connect() {
|
|
58
|
+
installClassMethods(this);
|
|
59
|
+
requestAnimationFrame(() => {
|
|
60
|
+
this._firstClick = true;
|
|
61
|
+
this._toggleButtons();
|
|
62
|
+
this._toggleVisibility();
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
current(event) {
|
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
68
|
+
if (this._firstClick) {
|
|
69
|
+
this._firstClick = false;
|
|
70
|
+
this._toggleButtons();
|
|
71
|
+
}
|
|
72
|
+
yield scrollToElement(this._currentError, { behavior: "smooth", block: "center", inline: "center" });
|
|
73
|
+
this._updateClasses();
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
next(event) {
|
|
77
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
78
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
79
|
+
if (this._firstClick) {
|
|
80
|
+
this._firstClick = false;
|
|
81
|
+
this._toggleButtons();
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
this.indexValue = this._nextIndex;
|
|
85
|
+
}
|
|
86
|
+
yield scrollToElement(this._currentError, { behavior: "smooth", block: "center", inline: "center" });
|
|
87
|
+
this._updateClasses();
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
previous(event) {
|
|
91
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
93
|
+
if (this._firstClick) {
|
|
94
|
+
this._firstClick = false;
|
|
95
|
+
this._toggleButtons();
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
this.indexValue = this._previousIndex;
|
|
99
|
+
}
|
|
100
|
+
yield scrollToElement(this._currentError, { behavior: "smooth", block: "center", inline: "center" });
|
|
101
|
+
this._updateClasses();
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
indexValueChanged() {
|
|
105
|
+
this._toggleButtons();
|
|
106
|
+
}
|
|
107
|
+
selectorValueChanged() {
|
|
108
|
+
this._errors = Array.from(document.querySelectorAll(this._selector));
|
|
109
|
+
this.indexValue = 0;
|
|
110
|
+
this._toggleButtons();
|
|
111
|
+
this._toggleVisibility();
|
|
112
|
+
}
|
|
113
|
+
_updateClasses() {
|
|
114
|
+
this.addCurrentClasses(this._currentError);
|
|
115
|
+
this._otherErrors.forEach((error) => this.removeCurrentClasses(error));
|
|
116
|
+
}
|
|
117
|
+
_toggleVisibility() {
|
|
118
|
+
if (this._errorCount === 0) {
|
|
119
|
+
this.el.style.display = "none";
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
this.el.style.display = "";
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
_toggleButtons() {
|
|
126
|
+
if (this.hasNextTarget) {
|
|
127
|
+
// If there is no "Current Error" button, then enable the next error button when there is only 1 error.
|
|
128
|
+
if (!this.hasCurrentTarget && this._firstClick && this.indexValue == this._errorCount - 1) {
|
|
129
|
+
this.nextTarget.removeAttribute("disabled");
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
else if (this.indexValue >= this._errorCount - 1) {
|
|
133
|
+
this.nextTarget.setAttribute("disabled", "true");
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
this.nextTarget.removeAttribute("disabled");
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (this.hasPreviousTarget) {
|
|
140
|
+
if (this.indexValue <= 0) {
|
|
141
|
+
this.previousTarget.setAttribute("disabled", "true");
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
this.previousTarget.removeAttribute("disabled");
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
NavigateFormErrorsController.values = {
|
|
150
|
+
selector: String,
|
|
151
|
+
index: Number,
|
|
152
|
+
};
|
|
153
|
+
NavigateFormErrorsController.classes = ["current"];
|
|
154
|
+
NavigateFormErrorsController.targets = ["next", "current", "previous"];
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
2
|
+
export class NestedFormController extends BaseController {
|
|
3
|
+
get _wrapperClass() {
|
|
4
|
+
return this.hasWrapperSelectorValue ? this.wrapperClassValue : 'nested-fields';
|
|
5
|
+
}
|
|
6
|
+
get _insertMode() {
|
|
7
|
+
return this.hasInsertModeValue ? this.insertModeValue : 'beforeend';
|
|
8
|
+
}
|
|
9
|
+
connect() {
|
|
10
|
+
this._checkStructure();
|
|
11
|
+
}
|
|
12
|
+
add(event) {
|
|
13
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
14
|
+
const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, this._generateID());
|
|
15
|
+
this.targetTarget.insertAdjacentHTML(this._insertMode, content);
|
|
16
|
+
}
|
|
17
|
+
remove(event) {
|
|
18
|
+
event.preventDefault();
|
|
19
|
+
const wrapper = event.target.closest(`.${this._wrapperClass}`);
|
|
20
|
+
if (wrapper == null) {
|
|
21
|
+
throw new Error(`#remove was clicked from outside of a child record. Could not find an ancestor with class .${this._wrapperClass}`);
|
|
22
|
+
}
|
|
23
|
+
if (wrapper.dataset.newRecord === 'true') {
|
|
24
|
+
wrapper.remove();
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
wrapper.style.display = 'none';
|
|
28
|
+
let destroyInput = wrapper.querySelector("input[name*='_destroy']");
|
|
29
|
+
if (destroyInput == null) {
|
|
30
|
+
throw new Error(`Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.`);
|
|
31
|
+
}
|
|
32
|
+
destroyInput.value = "1";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
_generateID() {
|
|
36
|
+
return new Date().getTime().toString() + Math.random().toString().slice(2);
|
|
37
|
+
}
|
|
38
|
+
_checkStructure() {
|
|
39
|
+
let template = this.templateTarget.innerHTML;
|
|
40
|
+
if (template.indexOf('NEW_RECORD')) {
|
|
41
|
+
throw new Error("Could not find 'NEW_RECORD' in the provided template. Please make sure you've passed `child_index: 'NEW_RECORD'` to `fields_for`");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
NestedFormController.targets = ['target', 'template'];
|
|
46
|
+
NestedFormController.values = {
|
|
47
|
+
insertMode: String,
|
|
48
|
+
wrapperClass: String,
|
|
49
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
2
|
+
import { useCollectionEventListener } from "../../mixins/use_event_listener";
|
|
3
|
+
import { installClassMethods } from "../../mixins/install_class_methods";
|
|
4
|
+
export class PasswordConfirmController extends BaseController {
|
|
5
|
+
connect() {
|
|
6
|
+
installClassMethods(this);
|
|
7
|
+
useCollectionEventListener(this, this.passwordTargets, "change", this._checkPasswordsMatch);
|
|
8
|
+
}
|
|
9
|
+
_allPasswordsMatch() {
|
|
10
|
+
let values = new Set(this.passwordTargets.map(el => el.value)); // Create a unique set of the password values
|
|
11
|
+
return values.has("") || values.size == 1; // If any of the passwords are still blank, or there is only one distinct password value (i.e. they all are the same)
|
|
12
|
+
}
|
|
13
|
+
_checkPasswordsMatch() {
|
|
14
|
+
let element = this.el;
|
|
15
|
+
if (this._allPasswordsMatch()) {
|
|
16
|
+
this.dispatchEvent(element, "password-confirm:match");
|
|
17
|
+
this.passwordTargets.forEach(el => this.removeErrorClasses(el));
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
this.dispatchEvent(element, "password-confirm:no-match");
|
|
21
|
+
this.passwordTargets.forEach(el => this.addErrorClasses(el));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
PasswordConfirmController.targets = ["password"];
|
|
26
|
+
PasswordConfirmController.classes = ["error"];
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
2
|
+
export class PasswordPeekController extends BaseController {
|
|
3
|
+
peak(event) {
|
|
4
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
5
|
+
this.passwordTarget.type = "text";
|
|
6
|
+
}
|
|
7
|
+
hide(event) {
|
|
8
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
9
|
+
this.passwordTarget.type = "password";
|
|
10
|
+
}
|
|
11
|
+
toggle(event) {
|
|
12
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
13
|
+
if (this.passwordTarget.type === "password") {
|
|
14
|
+
this.peak();
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
this.hide();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
PasswordPeekController.targets = ["password"];
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
2
|
+
export class RemoteFormController extends BaseController {
|
|
3
|
+
get _selector() {
|
|
4
|
+
return this.hasSelectorValue ? this.selectorValue : `[data-controller~="${this.identifier}"]`;
|
|
5
|
+
}
|
|
6
|
+
replace(event) {
|
|
7
|
+
const [data, status, xhr] = event.detail;
|
|
8
|
+
if (data instanceof Node) {
|
|
9
|
+
let newElement = data.querySelector(this._selector);
|
|
10
|
+
if (newElement == null) {
|
|
11
|
+
throw new Error(`expected new form DOM with [data-controller="${this.identifier}"] to be present in returned payload`);
|
|
12
|
+
}
|
|
13
|
+
let parentNode = this.el.parentNode;
|
|
14
|
+
if (parentNode == null) {
|
|
15
|
+
throw new Error('expected form to have a DOM parent, could not execute replaceChild');
|
|
16
|
+
}
|
|
17
|
+
parentNode.replaceChild(newElement, this.el);
|
|
18
|
+
this.dispatchEvent(newElement, 'remote-form:replace');
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
console.log('Unknown', data);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
RemoteFormController.targets = [];
|
|
26
|
+
RemoteFormController.values = { selector: String };
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
2
|
+
import { isHTMLInputElement, isHTMLSelectElement, isHTMLTextAreaElement, isTypeOfFormInputElement } from "../../utilities/elements";
|
|
3
|
+
import { EventBus } from "../../utilities/event_bus";
|
|
4
|
+
import { useEventListener } from "../../mixins/use_event_listener";
|
|
5
|
+
import { useEventBus } from "../../mixins/use_event_bus";
|
|
6
|
+
export class SyncInputsController extends BaseController {
|
|
7
|
+
get _eventName() {
|
|
8
|
+
return `sync:${this._key}`;
|
|
9
|
+
}
|
|
10
|
+
get _key() {
|
|
11
|
+
if (this.hasKeyValue) {
|
|
12
|
+
return this.keyValue;
|
|
13
|
+
}
|
|
14
|
+
throw new Error("Expected `keyValue` to be present");
|
|
15
|
+
}
|
|
16
|
+
get _value() {
|
|
17
|
+
let el = this.el;
|
|
18
|
+
if (isHTMLInputElement(el) && el.type === "checkbox") {
|
|
19
|
+
return el.checked;
|
|
20
|
+
}
|
|
21
|
+
else if (isHTMLInputElement(el) && el.type === "radio") {
|
|
22
|
+
return el.checked ? el.value : "";
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
return el.value;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
set _value(val) {
|
|
29
|
+
let el = this.el;
|
|
30
|
+
if (isHTMLInputElement(el) && el.type === "checkbox") {
|
|
31
|
+
el.checked = val.toString() === "true";
|
|
32
|
+
}
|
|
33
|
+
else if (isHTMLInputElement(el) && el.type === "radio") {
|
|
34
|
+
el.checked = el.value === val;
|
|
35
|
+
}
|
|
36
|
+
else if (isHTMLInputElement(el) || isHTMLTextAreaElement(el) || isHTMLSelectElement(el)) {
|
|
37
|
+
el.value = val.toString();
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
el.innerHTML = val.toString();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
connect() {
|
|
44
|
+
useEventBus(this, this._eventName, this._read);
|
|
45
|
+
requestAnimationFrame(() => {
|
|
46
|
+
if (isTypeOfFormInputElement(this.el)) {
|
|
47
|
+
this._emit();
|
|
48
|
+
useEventListener(this, this.el, "input", this._emit);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
_emit() {
|
|
53
|
+
EventBus.emit(this._eventName, { value: this._value, dispatcher: this.el });
|
|
54
|
+
}
|
|
55
|
+
_read(payload) {
|
|
56
|
+
if (payload === undefined) {
|
|
57
|
+
throw new Error("No payload received");
|
|
58
|
+
}
|
|
59
|
+
let { dispatcher, value } = payload;
|
|
60
|
+
if (dispatcher !== this.el) {
|
|
61
|
+
this._value = value;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
SyncInputsController.values = {
|
|
66
|
+
key: String,
|
|
67
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
2
|
+
import { useEventListener } from "../../mixins/use_event_listener";
|
|
3
|
+
import { installClassMethods } from "../../mixins/install_class_methods";
|
|
4
|
+
export class ValueWarnController extends BaseController {
|
|
5
|
+
get _maxMessage() {
|
|
6
|
+
return this.hasMaxMessageValue ? this.maxMessageValue : `Value must be less than ${this.maxValue}`;
|
|
7
|
+
}
|
|
8
|
+
get _minMessage() {
|
|
9
|
+
return this.hasMinMessageValue ? this.minMessageValue : `Value must be greater than ${this.minValue}`;
|
|
10
|
+
}
|
|
11
|
+
get defaultWarningHideClasses() {
|
|
12
|
+
return ["hide"];
|
|
13
|
+
}
|
|
14
|
+
connect() {
|
|
15
|
+
installClassMethods(this);
|
|
16
|
+
this.addWarningHideClasses(this.warningTarget);
|
|
17
|
+
useEventListener(this, this.inputTarget, "input", this._check);
|
|
18
|
+
this._check();
|
|
19
|
+
}
|
|
20
|
+
_check() {
|
|
21
|
+
if (this.hasMinValue && Number.parseFloat(this.inputTarget.value) < this.minValue) {
|
|
22
|
+
this.removeWarningHideClasses(this.warningTarget);
|
|
23
|
+
this.addInputWarningClasses(this.inputTarget);
|
|
24
|
+
this.warningTarget.innerText = this._minMessage;
|
|
25
|
+
}
|
|
26
|
+
else if (this.hasMaxValue && Number.parseFloat(this.inputTarget.value) > this.maxValue) {
|
|
27
|
+
this.removeWarningHideClasses(this.warningTarget);
|
|
28
|
+
this.addInputWarningClasses(this.inputTarget);
|
|
29
|
+
this.warningTarget.innerText = this._maxMessage;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
this.addWarningHideClasses(this.warningTarget);
|
|
33
|
+
this.removeInputWarningClasses(this.inputTarget);
|
|
34
|
+
this.warningTarget.innerText = "";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
ValueWarnController.classes = ["inputWarning", "warningHide"];
|
|
39
|
+
ValueWarnController.targets = ["input", "warning"];
|
|
40
|
+
ValueWarnController.values = {
|
|
41
|
+
max: Number,
|
|
42
|
+
min: Number,
|
|
43
|
+
minMessage: String,
|
|
44
|
+
maxMessage: String,
|
|
45
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
2
|
+
import { useEventListener } from "../../mixins/use_event_listener";
|
|
3
|
+
import { installClassMethods } from "../../mixins/install_class_methods";
|
|
4
|
+
export class WordCountController extends BaseController {
|
|
5
|
+
connect() {
|
|
6
|
+
installClassMethods(this);
|
|
7
|
+
this._updateWordCount();
|
|
8
|
+
useEventListener(this, this.inputTarget, "input", this._updateWordCount);
|
|
9
|
+
}
|
|
10
|
+
_updateWordCount() {
|
|
11
|
+
let wordCount = 0;
|
|
12
|
+
let textAreaValue = this.inputTarget.value;
|
|
13
|
+
let matches = textAreaValue.match(/\S+/g);
|
|
14
|
+
wordCount = (matches && matches.length) || 0;
|
|
15
|
+
this.outputTarget.innerText = wordCount.toString();
|
|
16
|
+
if (this._isValidCount(wordCount)) {
|
|
17
|
+
this.removeErrorClasses(this.outputTarget);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
this.addErrorClasses(this.outputTarget);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
_isValidCount(count) {
|
|
24
|
+
let min = 0;
|
|
25
|
+
let max = 99999;
|
|
26
|
+
if (this.hasMinValue) {
|
|
27
|
+
min = this.minValue;
|
|
28
|
+
}
|
|
29
|
+
if (this.hasMaxValue) {
|
|
30
|
+
max = this.maxValue;
|
|
31
|
+
}
|
|
32
|
+
return count >= min && count <= max;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
WordCountController.targets = ["input", "output"];
|
|
36
|
+
WordCountController.values = { min: Number, max: Number };
|
|
37
|
+
WordCountController.classes = ["error"];
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// Directories
|
|
1
2
|
export * from './ajax';
|
|
2
3
|
export * from './forms';
|
|
3
4
|
export * from './media';
|
|
@@ -6,6 +7,7 @@ export * from './signal';
|
|
|
6
7
|
export * from './tables';
|
|
7
8
|
export * from './utility';
|
|
8
9
|
export * from './visual';
|
|
10
|
+
// Controllers
|
|
9
11
|
export * from './anchor_spy_controller';
|
|
10
12
|
export * from './back_link_controller';
|
|
11
13
|
export * from './clipboard_controller';
|
|
@@ -15,6 +17,7 @@ export * from './debug_controller';
|
|
|
15
17
|
export * from './disable_with_controller';
|
|
16
18
|
export * from './dismissable_controller';
|
|
17
19
|
export * from './element_save_controller';
|
|
20
|
+
export * from './equalize_controller';
|
|
18
21
|
export * from './empty_dom_controller';
|
|
19
22
|
export * from './prefetch_controller';
|
|
20
23
|
export * from './print_button_controller';
|
|
@@ -27,4 +30,3 @@ export * from './toggle_class_controller';
|
|
|
27
30
|
export * from './trix_modifier_controller';
|
|
28
31
|
export * from './turbo_frame_rc_controller';
|
|
29
32
|
export * from './turbo_frame_refresh_controller';
|
|
30
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
2
|
+
export class FallbackImageController extends BaseController {
|
|
3
|
+
initialize() {
|
|
4
|
+
this._hasLoadedSuccessfully = this._hasLoadedSuccessfully.bind(this);
|
|
5
|
+
this._success = this._success.bind(this);
|
|
6
|
+
this._fail = this._fail.bind(this);
|
|
7
|
+
}
|
|
8
|
+
connect() {
|
|
9
|
+
let element = this.el;
|
|
10
|
+
element.onerror = this._fail;
|
|
11
|
+
if (element.complete && !this._hasLoadedSuccessfully()) {
|
|
12
|
+
this._fail();
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
this._success();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
disconnect() {
|
|
19
|
+
this.removeSuccessClasses();
|
|
20
|
+
this.removeFailClasses();
|
|
21
|
+
}
|
|
22
|
+
_success() {
|
|
23
|
+
this.addSuccessClasses();
|
|
24
|
+
}
|
|
25
|
+
_fail() {
|
|
26
|
+
let element = this.el;
|
|
27
|
+
this.addFailClasses();
|
|
28
|
+
if (this.hasPlaceholderValue && element.src !== this.placeholderValue) {
|
|
29
|
+
this.dispatchEvent(element, "fallback-image:placeholder");
|
|
30
|
+
element.src = this.placeholderValue;
|
|
31
|
+
element.onerror = this._fail;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
this.dispatchEvent(element, "fallback-image:fail");
|
|
35
|
+
element.style.display = "none";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
_hasLoadedSuccessfully() {
|
|
39
|
+
let element = this.el;
|
|
40
|
+
return element.naturalHeight > 0 && element.naturalWidth > 0;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
FallbackImageController.values = { placeholder: String };
|
|
44
|
+
FallbackImageController.classes = ["success", "fail"];
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import dialogPolyfill from "dialog-polyfill";
|
|
2
|
+
import { BaseController } from "../../utilities/base_controller";
|
|
3
|
+
import { scrollToElement } from "../../utilities/scroll";
|
|
4
|
+
import { useEventListener } from "../../mixins/use_event_listener";
|
|
5
|
+
export class LightboxImageController extends BaseController {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this._dialog = null;
|
|
9
|
+
}
|
|
10
|
+
get _src() {
|
|
11
|
+
return this.hasSrcValue ? this.srcValue : this.el.src;
|
|
12
|
+
}
|
|
13
|
+
get _srcSet() {
|
|
14
|
+
return this.hasSrcSetValue ? this.srcSetValue : this.el.srcset;
|
|
15
|
+
}
|
|
16
|
+
get _sizes() {
|
|
17
|
+
return this.hasSizesValue ? this.sizesValue : this.el.sizes;
|
|
18
|
+
}
|
|
19
|
+
get _modalClassName() {
|
|
20
|
+
return this.hasModalClass ? this.modalClass : "image-lightbox-dialog";
|
|
21
|
+
}
|
|
22
|
+
get _imageClassName() {
|
|
23
|
+
return this.hasImageClass ? this.imageClass : "image-lightbox-image";
|
|
24
|
+
}
|
|
25
|
+
initialize() {
|
|
26
|
+
this.open = this.open.bind(this);
|
|
27
|
+
this.close = this.close.bind(this);
|
|
28
|
+
}
|
|
29
|
+
connect() {
|
|
30
|
+
}
|
|
31
|
+
disconnect() {
|
|
32
|
+
this.close();
|
|
33
|
+
}
|
|
34
|
+
open() {
|
|
35
|
+
let element = this.el;
|
|
36
|
+
if (this._dialog) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
this._dialog = document.createElement("dialog");
|
|
40
|
+
let image = document.createElement("img");
|
|
41
|
+
image.className = this._imageClassName;
|
|
42
|
+
image.src = this._src;
|
|
43
|
+
image.srcset = this._srcSet;
|
|
44
|
+
image.sizes = this._sizes;
|
|
45
|
+
this._dialog.appendChild(image);
|
|
46
|
+
element.insertAdjacentElement("afterend", this._dialog);
|
|
47
|
+
dialogPolyfill.registerDialog(this._dialog);
|
|
48
|
+
this._dialog.className = this._modalClassName;
|
|
49
|
+
// @ts-ignore Experimental API
|
|
50
|
+
this._dialog.showModal();
|
|
51
|
+
scrollToElement(this._dialog, { behavior: "smooth", block: "end" }).catch(() => this._dialog.scrollIntoView(false));
|
|
52
|
+
useEventListener(this, this._dialog, "click", this.close);
|
|
53
|
+
useEventListener(this, this._dialog, "cancel", this.close);
|
|
54
|
+
useEventListener(this, this._dialog, "close", this.close);
|
|
55
|
+
}
|
|
56
|
+
close() {
|
|
57
|
+
if (this._dialog) {
|
|
58
|
+
// @ts-ignore Experimental API
|
|
59
|
+
this._dialog.close();
|
|
60
|
+
this._dialog.remove();
|
|
61
|
+
this._dialog = null;
|
|
62
|
+
scrollToElement(this.el, { behavior: "smooth", block: "end" }).catch(() => this.el.scrollIntoView(false));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
LightboxImageController.values = {
|
|
67
|
+
src: String,
|
|
68
|
+
srcSet: String,
|
|
69
|
+
sizes: String,
|
|
70
|
+
};
|
|
71
|
+
LightboxImageController.classes = ["modal", "image"];
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
export class MediaPlayerController extends BaseController {
|
|
12
|
+
play(event) {
|
|
13
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
15
|
+
yield this.mediaTarget.play();
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
pause(event) {
|
|
19
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
20
|
+
this.mediaTarget.pause();
|
|
21
|
+
}
|
|
22
|
+
restart(event) {
|
|
23
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
24
|
+
this.mediaTarget.currentTime = 0;
|
|
25
|
+
}
|
|
26
|
+
seek(event) {
|
|
27
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
28
|
+
this.mediaTarget.currentTime += 5;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
MediaPlayerController.targets = ["media"];
|