stimulus-library 0.6.5 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/controllers/ajax/async_block_controller.d.ts +17 -17
  3. package/dist/controllers/ajax/index.d.ts +4 -4
  4. package/dist/controllers/ajax/lazy_block_controller.d.ts +9 -9
  5. package/dist/controllers/ajax/load_block_controller.d.ts +23 -23
  6. package/dist/controllers/ajax/poll_block_controller.d.ts +15 -15
  7. package/dist/controllers/anchor_spy_controller.d.ts +20 -20
  8. package/dist/controllers/back_link_controller.d.ts +16 -16
  9. package/dist/controllers/clipboard_controller.d.ts +18 -18
  10. package/dist/controllers/confirm_controller.d.ts +12 -12
  11. package/dist/controllers/confirm_navigation_controller.d.ts +14 -14
  12. package/dist/controllers/debug_controller.d.ts +6 -6
  13. package/dist/controllers/disable_with_controller.d.ts +19 -22
  14. package/dist/controllers/disable_with_controller.d.ts.map +1 -1
  15. package/dist/controllers/dismissable_controller.d.ts +6 -6
  16. package/dist/controllers/element_save_controller.d.ts +30 -25
  17. package/dist/controllers/element_save_controller.d.ts.map +1 -1
  18. package/dist/controllers/empty_dom_controller.d.ts +21 -21
  19. package/dist/controllers/forms/auto_submit_form_controller.d.ts +22 -21
  20. package/dist/controllers/forms/auto_submit_form_controller.d.ts.map +1 -1
  21. package/dist/controllers/forms/autosize_controller.d.ts +8 -8
  22. package/dist/controllers/forms/char_count_controller.d.ts +20 -20
  23. package/dist/controllers/forms/checkbox_disable_inputs_controller.d.ts +16 -16
  24. package/dist/controllers/forms/checkbox_enable_inputs_controller.d.ts +16 -16
  25. package/dist/controllers/forms/checkbox_select_all_controller.d.ts +13 -13
  26. package/dist/controllers/forms/checkbox_xor_controller.d.ts +8 -8
  27. package/dist/controllers/forms/detect_dirty_controller.d.ts +14 -14
  28. package/dist/controllers/forms/detect_dirty_form_controller.d.ts +17 -17
  29. package/dist/controllers/forms/enable_inputs_controller.d.ts +13 -13
  30. package/dist/controllers/forms/focus_steal_controller.d.ts +11 -11
  31. package/dist/controllers/forms/form_rc_controller.d.ts +17 -17
  32. package/dist/controllers/forms/form_save_controller.d.ts +31 -31
  33. package/dist/controllers/forms/index.d.ts +22 -22
  34. package/dist/controllers/forms/limited_selection_checkboxes_controller.d.ts +16 -16
  35. package/dist/controllers/forms/navigate_form_errors_controller.d.ts +40 -40
  36. package/dist/controllers/forms/nested_form_controller.d.ts +21 -21
  37. package/dist/controllers/forms/password_confirm_controller.d.ts +11 -11
  38. package/dist/controllers/forms/password_peek_controller.d.ts +8 -8
  39. package/dist/controllers/forms/remote_form_controller.d.ts +13 -13
  40. package/dist/controllers/forms/sync_inputs_controller.d.ts +19 -19
  41. package/dist/controllers/forms/value_warn_controller.d.ts +30 -30
  42. package/dist/controllers/forms/word_count_controller.d.ts +20 -20
  43. package/dist/controllers/index.d.ts +29 -29
  44. package/dist/controllers/media/fallback_image_controller.d.ts +19 -19
  45. package/dist/controllers/media/index.d.ts +3 -3
  46. package/dist/controllers/media/lightbox_image_controller.d.ts +30 -30
  47. package/dist/controllers/media/media_player_controller.d.ts +9 -9
  48. package/dist/controllers/prefetch_controller.d.ts +16 -16
  49. package/dist/controllers/prefetch_controller.d.ts.map +1 -1
  50. package/dist/controllers/print_button_controller.d.ts +7 -7
  51. package/dist/controllers/responsive_iframe_controller.d.ts +16 -16
  52. package/dist/controllers/scroll/index.d.ts +5 -5
  53. package/dist/controllers/scroll/scroll_container_controller.d.ts +21 -21
  54. package/dist/controllers/scroll/scroll_into_focus_controller.d.ts +15 -15
  55. package/dist/controllers/scroll/scroll_to_bottom_controller.d.ts +11 -11
  56. package/dist/controllers/scroll/scroll_to_controller.d.ts +17 -17
  57. package/dist/controllers/scroll/scroll_to_top_controller.d.ts +11 -11
  58. package/dist/controllers/self_destruct_controller.d.ts +8 -8
  59. package/dist/controllers/signal/events.d.ts +3 -3
  60. package/dist/controllers/signal/expressions.d.ts +1 -1
  61. package/dist/controllers/signal/index.d.ts +3 -3
  62. package/dist/controllers/signal/signal_action_controller.d.ts +14 -14
  63. package/dist/controllers/signal/signal_input_controller.d.ts +19 -19
  64. package/dist/controllers/signal/signal_visibility_controller.d.ts +17 -17
  65. package/dist/controllers/sticky_controller.d.ts +15 -15
  66. package/dist/controllers/tables/index.d.ts +2 -2
  67. package/dist/controllers/tables/table_sort_controller.d.ts +19 -19
  68. package/dist/controllers/tables/table_truncate_controller.d.ts +25 -25
  69. package/dist/controllers/teleport_controller.d.ts +15 -15
  70. package/dist/controllers/temporary_state_controller.d.ts +26 -26
  71. package/dist/controllers/toggle_class_controller.d.ts +35 -35
  72. package/dist/controllers/trix_modifier_controller.d.ts +87 -87
  73. package/dist/controllers/turbo_frame_rc_controller.d.ts +20 -20
  74. package/dist/controllers/turbo_frame_refresh_controller.d.ts +13 -13
  75. package/dist/controllers/utility/alert_controller.d.ts +8 -8
  76. package/dist/controllers/utility/fullscreen_controller.d.ts +7 -7
  77. package/dist/controllers/utility/index.d.ts +8 -8
  78. package/dist/controllers/utility/intersection_controller.d.ts +13 -13
  79. package/dist/controllers/utility/intersection_controller.d.ts.map +1 -1
  80. package/dist/controllers/utility/interval_controller.d.ts +10 -10
  81. package/dist/controllers/utility/presence_controller.d.ts +13 -13
  82. package/dist/controllers/utility/print_controller.d.ts +4 -4
  83. package/dist/controllers/utility/timeout_controller.d.ts +9 -9
  84. package/dist/controllers/utility/user_focus_controller.d.ts +8 -8
  85. package/dist/controllers/visual/clock_controller.d.ts +15 -15
  86. package/dist/controllers/visual/countdown_controller.d.ts +45 -45
  87. package/dist/controllers/visual/duration_controller.d.ts +25 -25
  88. package/dist/controllers/visual/index.d.ts +6 -6
  89. package/dist/controllers/visual/tabs_controller.d.ts +29 -29
  90. package/dist/controllers/visual/time_distance_controller.d.ts +15 -15
  91. package/dist/controllers/visual/tree_view_controller.d.ts +25 -25
  92. package/dist/controllers/visual/tree_view_controller.d.ts.map +1 -1
  93. package/dist/index.d.ts +3 -3
  94. package/dist/mixins/create_mixin.d.ts +2 -2
  95. package/dist/mixins/index.d.ts +8 -7
  96. package/dist/mixins/index.d.ts.map +1 -1
  97. package/dist/mixins/install_class_methods.d.ts +5 -5
  98. package/dist/mixins/install_class_methods.d.ts.map +1 -1
  99. package/dist/mixins/use_click_outside.d.ts +4 -4
  100. package/dist/mixins/use_event_bus.d.ts +7 -7
  101. package/dist/mixins/use_event_listener.d.ts +19 -19
  102. package/dist/mixins/use_fullscreen.d.ts +8 -8
  103. package/dist/mixins/use_geolocation.d.ts +18 -18
  104. package/dist/mixins/use_hover.d.ts +4 -4
  105. package/dist/mixins/use_injected_html.d.ts +10 -10
  106. package/dist/mixins/use_intersection.d.ts +13 -13
  107. package/dist/mixins/use_interval.d.ts +2 -2
  108. package/dist/mixins/use_localstorage.d.ts +20 -14
  109. package/dist/mixins/use_localstorage.d.ts.map +1 -1
  110. package/dist/mixins/use_mutation_observer.d.ts +2 -2
  111. package/dist/mixins/use_temporary_content.d.ts +6 -0
  112. package/dist/mixins/use_temporary_content.d.ts.map +1 -0
  113. package/dist/mixins/use_timeout.d.ts +2 -2
  114. package/dist/mixins/use_trix_modifiers.d.ts +10 -10
  115. package/dist/stimulus-library.cjs.js +1 -1
  116. package/dist/stimulus-library.cjs.js.map +1 -1
  117. package/dist/stimulus-library.es.js +300 -225
  118. package/dist/stimulus-library.es.js.map +1 -1
  119. package/dist/stimulus-library.umd.js +1 -1
  120. package/dist/stimulus-library.umd.js.map +1 -1
  121. package/dist/utilities/arrays.d.ts +1 -1
  122. package/dist/utilities/base_controller.d.ts +10 -13
  123. package/dist/utilities/base_controller.d.ts.map +1 -1
  124. package/dist/utilities/elements.d.ts +48 -20
  125. package/dist/utilities/elements.d.ts.map +1 -1
  126. package/dist/utilities/ephemeral_controller.d.ts +5 -5
  127. package/dist/utilities/event_bus.d.ts +3 -3
  128. package/dist/utilities/events.d.ts +3 -0
  129. package/dist/utilities/events.d.ts.map +1 -0
  130. package/dist/utilities/fetchRetry.d.ts +1 -1
  131. package/dist/utilities/index.d.ts +7 -7
  132. package/dist/utilities/logging.d.ts +6 -0
  133. package/dist/utilities/logging.d.ts.map +1 -0
  134. package/dist/utilities/reactive.d.ts +1 -1
  135. package/dist/utilities/request_submit.d.ts +2 -2
  136. package/dist/utilities/scroll.d.ts +10 -10
  137. package/dist/utilities/stimulus.d.ts +2 -2
  138. package/dist/utilities/strings.d.ts +1 -1
  139. package/dist/utilities/turbo.d.ts +1 -1
  140. package/package.json +3 -3
@@ -21,6 +21,78 @@ var __publicField = (obj, key, value) => {
21
21
  import { Controller } from "stimulus";
22
22
  import { camelCase, debounce, upperFirst, clamp, get, set } from "lodash-es";
23
23
  import { isPast, intervalToDuration, formatDuration, toDate, formatDistanceToNow } from "date-fns";
24
+ function logProperty(prop) {
25
+ switch (prop) {
26
+ case "application":
27
+ case "el":
28
+ case "element":
29
+ case "constructor":
30
+ case "initialize":
31
+ case "log":
32
+ case "logEvent":
33
+ case "dispatch":
34
+ case "data":
35
+ case "valueDescriptorMap":
36
+ case "mutate":
37
+ case "identifier":
38
+ return false;
39
+ }
40
+ if (/^_.*?$/.test(prop)) {
41
+ return false;
42
+ }
43
+ if (/^.*?Target(s)?$/.test(prop)) {
44
+ return false;
45
+ }
46
+ if (/^.*?Value$/.test(prop)) {
47
+ return false;
48
+ }
49
+ if (/^.*?ValueChanged$/.test(prop)) {
50
+ return false;
51
+ }
52
+ if (/^.*?Class$/.test(prop)) {
53
+ return false;
54
+ }
55
+ if (/^.*?Classes$/.test(prop)) {
56
+ return false;
57
+ }
58
+ if (/^.*?ClassesPresent$/.test(prop)) {
59
+ return false;
60
+ }
61
+ return true;
62
+ }
63
+ function log(controller, functionName, args = {}) {
64
+ if (!controller.application.debug) {
65
+ return;
66
+ }
67
+ let logger = console;
68
+ logger.groupCollapsed(`%c${controller.identifier} %c#${functionName}`, "color: #3B82F6", "color: unset");
69
+ logger.log(__spreadValues({
70
+ element: controller.element,
71
+ controller
72
+ }, args));
73
+ logger.groupEnd();
74
+ }
75
+ function warn(controller, warning, args = {}) {
76
+ if (!controller.application.debug) {
77
+ return;
78
+ }
79
+ let logger = console;
80
+ logger.groupCollapsed(`%c${controller.identifier} %c#${warning}`, "color: F39B1AFF", "color: unset");
81
+ logger.warn(__spreadValues({
82
+ element: controller.element,
83
+ controller
84
+ }, args));
85
+ logger.groupEnd();
86
+ }
87
+ function logEvent(controller, eventName, event, element) {
88
+ if (!controller.application.debug) {
89
+ return;
90
+ }
91
+ let logger = console;
92
+ logger.groupCollapsed(`%c${controller.identifier} %c${eventName}%c`, "color: #3B82F6", "color: #0be000", "color: unset");
93
+ logger.log({ element });
94
+ logger.groupEnd();
95
+ }
24
96
  class BaseController extends Controller {
25
97
  constructor(context) {
26
98
  super(context);
@@ -35,14 +107,14 @@ class BaseController extends Controller {
35
107
  if (typeof returnVal == "function") {
36
108
  return new Proxy(returnVal, {
37
109
  apply(target, thisArg, argArray) {
38
- self.log(prop.toString(), {
110
+ log(self, prop.toString(), {
39
111
  args: argArray
40
112
  });
41
113
  return Reflect.apply(target, thisArg, argArray);
42
114
  }
43
115
  });
44
116
  } else {
45
- this.log(prop.toString());
117
+ log(this, prop.toString());
46
118
  }
47
119
  }
48
120
  return returnVal;
@@ -65,87 +137,9 @@ class BaseController extends Controller {
65
137
  const element = document.head.querySelector(`meta[name="${name}"]`);
66
138
  return (element == null ? void 0 : element.getAttribute("content")) || null;
67
139
  }
68
- dispatch(element, eventName, options = {}) {
69
- let mergedOptions = Object.assign({}, { bubbles: true, cancelable: true, detail: { target: element, element } }, options);
70
- if (!!mergedOptions.detail.target) {
71
- mergedOptions.detail.target = element;
72
- }
73
- let event = new CustomEvent(eventName, mergedOptions);
74
- this.logEvent(eventName, event, element);
75
- element.dispatchEvent(event);
76
- }
77
- log(functionName, args = {}) {
78
- if (!this.application.debug) {
79
- return;
80
- }
81
- let logger = console;
82
- logger.groupCollapsed(`%c${this.identifier} %c#${functionName}`, "color: #3B82F6", "color: unset");
83
- logger.log(__spreadValues({
84
- element: this.element,
85
- controller: this
86
- }, args));
87
- logger.groupEnd();
88
- }
89
- warn(warning, args = {}) {
90
- if (!this.application.debug) {
91
- return;
92
- }
93
- let logger = console;
94
- logger.groupCollapsed(`%c${this.identifier} %c#${warning}`, "color: F39B1AFF", "color: unset");
95
- logger.warn(__spreadValues({
96
- element: this.element,
97
- controller: this
98
- }, args));
99
- logger.groupEnd();
100
- }
101
- logEvent(eventName, event, element) {
102
- if (!this.application.debug) {
103
- return;
104
- }
105
- let logger = console;
106
- logger.groupCollapsed(`%c${this.identifier} %c${eventName}%c`, "color: #3B82F6", "color: #0be000", "color: unset");
107
- logger.log({ element });
108
- logger.groupEnd();
109
- }
110
- }
111
- function logProperty(prop) {
112
- switch (prop) {
113
- case "application":
114
- case "el":
115
- case "element":
116
- case "constructor":
117
- case "initialize":
118
- case "log":
119
- case "logEvent":
120
- case "dispatch":
121
- case "data":
122
- case "valueDescriptorMap":
123
- case "mutate":
124
- case "identifier":
125
- return false;
126
- }
127
- if (/^_.*?$/.test(prop)) {
128
- return false;
129
- }
130
- if (/^.*?Target(s)?$/.test(prop)) {
131
- return false;
132
- }
133
- if (/^.*?Value$/.test(prop)) {
134
- return false;
135
- }
136
- if (/^.*?ValueChanged$/.test(prop)) {
137
- return false;
138
- }
139
- if (/^.*?Class$/.test(prop)) {
140
- return false;
141
- }
142
- if (/^.*?Classes$/.test(prop)) {
143
- return false;
144
- }
145
- if (/^.*?ClassesPresent$/.test(prop)) {
146
- return false;
140
+ dispatchEvent(element, eventName, options = {}) {
141
+ this.dispatchEvent(element, eventName, options);
147
142
  }
148
- return true;
149
143
  }
150
144
  class EphemeralController extends BaseController {
151
145
  _cleanupSelf() {
@@ -299,6 +293,9 @@ function isHTMLFormElement(element) {
299
293
  function isHTMLInputElement(element) {
300
294
  return element.nodeName == "INPUT";
301
295
  }
296
+ function isHTMLLabelElement(element) {
297
+ return element.nodeName == "LABEL";
298
+ }
302
299
  function isHTMLTextAreaElement(element) {
303
300
  return element.nodeName == "TEXTAREA";
304
301
  }
@@ -311,6 +308,33 @@ function isHTMLSelectElement(element) {
311
308
  function isHTMLImageElement(element) {
312
309
  return element.nodeName == "IMG";
313
310
  }
311
+ function isHTMLButtonInputElement(element) {
312
+ return element.nodeName == "INPUT" && element.type == "button";
313
+ }
314
+ function isHTMLSubmitInputElement(element) {
315
+ return element.nodeName == "INPUT" && element.type == "submit";
316
+ }
317
+ function isHTMLResetInputElement(element) {
318
+ return element.nodeName == "INPUT" && element.type == "reset";
319
+ }
320
+ function isHTMLButtonButtonElement(element) {
321
+ return element.nodeName == "BUTTON" && element.type == "button";
322
+ }
323
+ function isHTMLSubmitButtonElement(element) {
324
+ return element.nodeName == "BUTTON" && element.type == "submit";
325
+ }
326
+ function isHTMLResetButtonElement(element) {
327
+ return element.nodeName == "BUTTON" && element.type == "reset";
328
+ }
329
+ function isTypeOfResetButtonElement(element) {
330
+ return isHTMLResetButtonElement(element) || isHTMLResetInputElement(element);
331
+ }
332
+ function isTypeOfSubmitButtonElement(element) {
333
+ return isHTMLSubmitButtonElement(element) || isHTMLSubmitInputElement(element);
334
+ }
335
+ function isTypeOfButtonableElement(element) {
336
+ return isTypeOfResetButtonElement(element) || isTypeOfSubmitButtonElement(element) || isHTMLButtonButtonElement(element);
337
+ }
314
338
  function isElementCheckable(element) {
315
339
  return isHTMLInputElement(element) && (element.type === "radio" || element.type === "checkbox");
316
340
  }
@@ -566,109 +590,130 @@ function useInjectedElement(controller, targetElement, insertPosition, element,
566
590
  let [nodes, teardown] = useInjectedFragment(controller, targetElement, insertPosition, fragment, options);
567
591
  return [nodes[0], teardown];
568
592
  }
593
+ function useInterval(controller, handler, interval) {
594
+ handler = handler.bind(controller);
595
+ let intervalHandle = null;
596
+ let setup = () => intervalHandle = setInterval(handler, interval);
597
+ let teardown = () => {
598
+ if (intervalHandle !== null) {
599
+ clearInterval(intervalHandle);
600
+ }
601
+ };
602
+ useMixin(controller, setup, teardown);
603
+ return teardown;
604
+ }
569
605
  const StorageSerializers = {
570
606
  boolean: {
571
- read: (v) => v === "true",
572
- write: (v) => String(v)
607
+ deserialize: (v) => v === "true",
608
+ serialize: (v) => String(v),
609
+ isEmpty: (v) => v === "" || v === null
573
610
  },
574
611
  object: {
575
- read: (v) => JSON.parse(v),
576
- write: (v) => JSON.stringify(v)
612
+ deserialize: (v) => JSON.parse(v),
613
+ serialize: (v) => JSON.stringify(v),
614
+ isEmpty: (v) => {
615
+ const values = Object.values(JSON.parse(v));
616
+ return values.length === 0 || values.every((v2) => v2 === "" || v2 === null);
617
+ }
577
618
  },
578
619
  number: {
579
- read: (v) => Number.parseFloat(v),
580
- write: (v) => String(v)
620
+ deserialize: (v) => Number.parseFloat(v),
621
+ serialize: (v) => String(v),
622
+ isEmpty: (v) => v === "" || v === null
581
623
  },
582
624
  any: {
583
- read: (v) => v,
584
- write: (v) => String(v)
625
+ deserialize: (v) => v,
626
+ serialize: (v) => String(v),
627
+ isEmpty: (v) => v === "" || v === null
585
628
  },
586
629
  string: {
587
- read: (v) => v,
588
- write: (v) => String(v)
630
+ deserialize: (v) => v,
631
+ serialize: (v) => String(v),
632
+ isEmpty: (v) => v === "" || v === null
589
633
  },
590
634
  map: {
591
- read: (v) => new Map(JSON.parse(v)),
592
- write: (v) => JSON.stringify(Array.from(v.entries()))
635
+ deserialize: (v) => new Map(JSON.parse(v)),
636
+ serialize: (v) => JSON.stringify(Array.from(v.entries())),
637
+ isEmpty: (v) => {
638
+ const values = Array.from(v.values());
639
+ return values.length === 0 || values.every((v2) => v2 === "" || v2 === null);
640
+ }
593
641
  },
594
642
  set: {
595
- read: (v) => new Set(JSON.parse(v)),
596
- write: (v) => JSON.stringify(Array.from(v.entries()))
643
+ deserialize: (v) => new Set(JSON.parse(v)),
644
+ serialize: (v) => JSON.stringify(Array.from(v.entries())),
645
+ isEmpty: (v) => {
646
+ const values = Array.from(v.values());
647
+ return values.length === 0 || values.every((v2) => v2 === "" || v2 === null);
648
+ }
597
649
  }
598
650
  };
599
- function useLocalStorage(controller, key, defaultValue, opts) {
600
- let type = "any";
651
+ function useLocalStorage(controller, key, defaultValue, opts = { writeDefaults: true }) {
652
+ let type;
601
653
  let { writeDefaults } = opts;
602
654
  if (defaultValue == null) {
603
655
  type = "any";
604
- }
605
- if (defaultValue instanceof Set) {
656
+ } else if (defaultValue instanceof Set) {
606
657
  type = "set";
607
- }
608
- if (defaultValue instanceof Map) {
658
+ } else if (defaultValue instanceof Map) {
609
659
  type = "map";
610
- }
611
- if (typeof defaultValue === "boolean") {
660
+ } else if (typeof defaultValue === "boolean") {
612
661
  type = "boolean";
613
- }
614
- if (typeof defaultValue === "string") {
662
+ } else if (typeof defaultValue === "string") {
615
663
  type = "string";
616
- }
617
- if (typeof defaultValue === "object") {
664
+ } else if (typeof defaultValue === "object") {
618
665
  type = "object";
619
- }
620
- if (Array.isArray(defaultValue)) {
666
+ } else if (Array.isArray(defaultValue)) {
621
667
  type = "object";
622
- }
623
- if (!Number.isNaN(defaultValue)) {
668
+ } else if (!Number.isNaN(defaultValue)) {
624
669
  type = "number";
670
+ } else {
671
+ type = "any";
625
672
  }
626
673
  let data = reactive({
627
674
  value: defaultValue
628
675
  });
629
676
  let storage = localStorage;
630
677
  const serializer = StorageSerializers[type];
631
- const read = (event) => {
632
- if (event && event.key !== key) {
633
- return;
634
- }
635
- try {
636
- const rawValue = event ? event.newValue : storage.getItem(key);
637
- if (rawValue == null) {
638
- data.value = defaultValue;
639
- if (writeDefaults && defaultValue !== null) {
640
- storage.setItem(key, serializer.write(defaultValue));
641
- }
642
- } else {
643
- data.value = serializer.read(rawValue);
678
+ const read = () => {
679
+ const rawValue = storage.getItem(key);
680
+ if (rawValue == null) {
681
+ data.value = defaultValue;
682
+ if (writeDefaults && defaultValue !== null) {
683
+ storage.setItem(key, serializer.serialize(defaultValue));
644
684
  }
645
- } catch (e) {
685
+ } else {
686
+ data.value = serializer.deserialize(rawValue);
646
687
  }
688
+ return data.value;
689
+ };
690
+ const write = (value) => {
691
+ storage.setItem(key, serializer.serialize(value));
692
+ data.value = value;
693
+ };
694
+ const clear = () => {
695
+ storage.removeItem(key);
696
+ data.value = defaultValue;
697
+ return data.value;
698
+ };
699
+ const isEmpty = () => {
700
+ let rawValue = storage.getItem(key);
701
+ return serializer.isEmpty(rawValue);
647
702
  };
648
703
  read();
649
704
  return {
650
705
  get value() {
651
- return data.value;
706
+ return read();
652
707
  },
653
708
  set value(value) {
654
- data.value = value;
655
- storage.setItem(key, serializer.write(value));
709
+ write(value);
656
710
  },
657
- read
711
+ read,
712
+ clear,
713
+ write,
714
+ isEmpty
658
715
  };
659
716
  }
660
- function useInterval(controller, handler, interval) {
661
- handler = handler.bind(controller);
662
- let intervalHandle = null;
663
- let setup = () => intervalHandle = setInterval(handler, interval);
664
- let teardown = () => {
665
- if (intervalHandle !== null) {
666
- clearInterval(intervalHandle);
667
- }
668
- };
669
- useMixin(controller, setup, teardown);
670
- return teardown;
671
- }
672
717
  function useTimeout(controller, handler, timeout) {
673
718
  let controllerDisconnect;
674
719
  let timeoutHandle = null;
@@ -688,6 +733,40 @@ function useTimeout(controller, handler, timeout) {
688
733
  controllerDisconnect = useMixin(controller, setup, teardown);
689
734
  return teardown;
690
735
  }
736
+ function useTemporaryContent(controller, target, content, timeout, teardownCallback) {
737
+ const setContent = (element, text) => {
738
+ if (isHTMLInputElement(element)) {
739
+ element.value = text;
740
+ } else {
741
+ element.textContent = text;
742
+ }
743
+ };
744
+ const getContent = (element) => {
745
+ return isHTMLInputElement(element) ? element.value : element.innerHTML;
746
+ };
747
+ let cleanupTimeout = () => void 0;
748
+ let originalText = getContent(target);
749
+ const teardown = () => {
750
+ setContent(target, originalText);
751
+ cleanupTimeout();
752
+ if (teardownCallback) {
753
+ teardownCallback.call(controller);
754
+ }
755
+ };
756
+ const setup = () => {
757
+ setContent(target, content);
758
+ if (timeout !== void 0) {
759
+ cleanupTimeout = useTimeout(controller, teardown, timeout);
760
+ }
761
+ };
762
+ useMixin(controller, setup, teardown);
763
+ return {
764
+ teardown,
765
+ update(newContent) {
766
+ setContent(target, newContent);
767
+ }
768
+ };
769
+ }
691
770
  async function fetchRetry(n, input, init) {
692
771
  try {
693
772
  return await fetch(input, init);
@@ -713,7 +792,7 @@ class LoadBlockController extends BaseController {
713
792
  let el = this.hasReplaceTarget ? this.replaceTarget : this.el;
714
793
  let failure = () => {
715
794
  el.replaceWith(this._errorMessage);
716
- self.dispatch(el, "ajax:error");
795
+ self.dispatchEvent(el, "ajax:error");
717
796
  };
718
797
  try {
719
798
  let response = await fetchRetry(this._maxRetries, this.endpointValue);
@@ -729,11 +808,11 @@ class LoadBlockController extends BaseController {
729
808
  } else {
730
809
  el.replaceWith(...newEl.children);
731
810
  }
732
- self.dispatch(el, "ajax:success");
811
+ self.dispatchEvent(el, "ajax:success");
733
812
  } catch (e) {
734
813
  failure();
735
814
  } finally {
736
- self.dispatch(el, "ajax:complete");
815
+ self.dispatchEvent(el, "ajax:complete");
737
816
  }
738
817
  }
739
818
  }
@@ -845,18 +924,22 @@ __publicField(PollBlockController, "values", {
845
924
  seconds: Number
846
925
  });
847
926
  class AutoSubmitFormController extends BaseController {
848
- get _eventMode() {
927
+ get _eventModes() {
849
928
  if (this.hasEventModeValue) {
850
- if (!["change", "input", "debounced"].includes(this.eventModeValue)) {
929
+ let modes = this.eventModeValue.split(" ").map((mode) => mode.trim());
930
+ if (modes.length === 1 && modes[0] === "debounced") {
931
+ return ["change", "input"];
932
+ }
933
+ if (!modes.every((mode) => ["change", "input"].includes(mode))) {
851
934
  throw new Error(`The modeValue provided '${this.eventModeValue}' is not one of the recognised configuration options`);
852
935
  }
853
- return this.eventModeValue;
936
+ return modes;
854
937
  } else {
855
- return "change";
938
+ return ["change"];
856
939
  }
857
940
  }
858
941
  get _debounceTimeout() {
859
- return this.hasDebounceIntervalValue ? this.debounceIntervalValue : 1e3;
942
+ return this.hasDebounceIntervalValue ? this.debounceIntervalValue : -1;
860
943
  }
861
944
  get _mode() {
862
945
  if (this.hasSubmitModeValue) {
@@ -874,13 +957,18 @@ class AutoSubmitFormController extends BaseController {
874
957
  return inputTypes.map((type) => type.concat(ignore)).join(",");
875
958
  }
876
959
  get inputElements() {
877
- return this.element.querySelectorAll(this._cssSelector);
960
+ let subElements = Array.from(this.element.querySelectorAll(this._cssSelector));
961
+ subElements = subElements.filter((el) => !this._ancestorIsTrix(el));
962
+ return subElements;
878
963
  }
879
964
  connect() {
880
965
  this.inputElements.forEach((el) => {
881
- return useEventListener(this, el, this._eventMode == "change" ? "change" : "input", this.submit, { debounce: this._eventMode == "debounced" ? this._debounceTimeout : void 0 });
966
+ return useEventListener(this, el, this._eventModes, this.submit, { debounce: this._debounceTimeout && this._debounceTimeout > 0 ? this._debounceTimeout : void 0 });
882
967
  });
883
968
  }
969
+ _ancestorIsTrix(element) {
970
+ return element.closest("trix-toolbar") !== null && element.closest("trix-editor") !== null;
971
+ }
884
972
  submit() {
885
973
  let el = this.el;
886
974
  if (this._mode == "request") {
@@ -948,12 +1036,10 @@ function addMethodsForClassDefinition(controller, name) {
948
1036
  [`remove${pascalCase(name)}Classes`]: (element = defaultElement) => element.classList.remove(...classOrDefault()),
949
1037
  [`${name}ClassesPresent`]: (element = defaultElement) => classOrDefault().every((klass) => element.classList.contains(klass))
950
1038
  };
951
- console.log(methods);
952
1039
  Object.assign(controller, methods);
953
1040
  }
954
1041
  function installClassMethods(controller) {
955
1042
  let classes = controller.constructor.classes || [];
956
- console.log(classes);
957
1043
  classes.forEach((classDefinition) => addMethodsForClassDefinition(controller, classDefinition));
958
1044
  }
959
1045
  class CharCountController extends BaseController {
@@ -1097,7 +1183,7 @@ class CheckboxXORController extends BaseController {
1097
1183
  if (target.checked) {
1098
1184
  others.forEach((checkbox) => {
1099
1185
  checkbox.checked = false;
1100
- this.dispatch(this.el, "change");
1186
+ this.dispatchEvent(this.el, "change");
1101
1187
  });
1102
1188
  }
1103
1189
  }
@@ -1433,7 +1519,7 @@ class FormSaveController extends BaseController {
1433
1519
  }
1434
1520
  _clear() {
1435
1521
  localStorage.removeItem(this._formIdentifier);
1436
- this.dispatch(this.el, `form-save:cleared`);
1522
+ this.dispatchEvent(this.el, `form-save:cleared`);
1437
1523
  }
1438
1524
  clear(event) {
1439
1525
  event == null ? void 0 : event.preventDefault();
@@ -1443,7 +1529,7 @@ class FormSaveController extends BaseController {
1443
1529
  event.preventDefault();
1444
1530
  let data = this._formData;
1445
1531
  localStorage.setItem(this._formIdentifier, JSON.stringify(data[this._formIdentifier]));
1446
- this.dispatch(this.el, `form-save:save:success`);
1532
+ this.dispatchEvent(this.el, `form-save:save:success`);
1447
1533
  }
1448
1534
  restore(event) {
1449
1535
  event == null ? void 0 : event.preventDefault();
@@ -1463,9 +1549,9 @@ class FormSaveController extends BaseController {
1463
1549
  }
1464
1550
  }
1465
1551
  }
1466
- this.dispatch(this.el, `form-save:restore:success`);
1552
+ this.dispatchEvent(this.el, `form-save:restore:success`);
1467
1553
  } else {
1468
- this.dispatch(this.el, `form-save:restore:empty`);
1554
+ this.dispatchEvent(this.el, `form-save:restore:empty`);
1469
1555
  }
1470
1556
  }
1471
1557
  }
@@ -1484,13 +1570,13 @@ class LimitedSelectionCheckboxesController extends BaseController {
1484
1570
  if (tickedInputs > this.maxValue) {
1485
1571
  event.preventDefault();
1486
1572
  target.checked = false;
1487
- this.dispatch(target, "change");
1488
- this.dispatch(target, "limited-selection:too-many");
1573
+ this.dispatchEvent(target, "change");
1574
+ this.dispatchEvent(target, "limited-selection:too-many");
1489
1575
  if (this.hasErrorTarget && this.hasMessageValue) {
1490
1576
  this.errorTarget.innerHTML = this.messageValue;
1491
1577
  }
1492
1578
  } else {
1493
- this.dispatch(target, "limited-selection:selection");
1579
+ this.dispatchEvent(target, "limited-selection:selection");
1494
1580
  if (this.hasErrorTarget) {
1495
1581
  this.errorTarget.innerHTML = "";
1496
1582
  }
@@ -1685,10 +1771,10 @@ class PasswordConfirmController extends BaseController {
1685
1771
  _checkPasswordsMatch() {
1686
1772
  let element = this.el;
1687
1773
  if (this._allPasswordsMatch()) {
1688
- this.dispatch(element, "password-confirm:match");
1774
+ this.dispatchEvent(element, "password-confirm:match");
1689
1775
  this.passwordTargets.forEach((el) => this.removeErrorClasses(el));
1690
1776
  } else {
1691
- this.dispatch(element, "password-confirm:no-match");
1777
+ this.dispatchEvent(element, "password-confirm:no-match");
1692
1778
  this.passwordTargets.forEach((el) => this.addErrorClasses(el));
1693
1779
  }
1694
1780
  }
@@ -1730,7 +1816,7 @@ class RemoteFormController extends BaseController {
1730
1816
  throw new Error("expected form to have a DOM parent, could not execute replaceChild");
1731
1817
  }
1732
1818
  parentNode.replaceChild(newElement, this.el);
1733
- this.dispatch(newElement, "remote-form:replace");
1819
+ this.dispatchEvent(newElement, "remote-form:replace");
1734
1820
  } else {
1735
1821
  console.log("Unknown", data);
1736
1822
  }
@@ -1908,11 +1994,11 @@ class FallbackImageController extends BaseController {
1908
1994
  let element = this.el;
1909
1995
  this.addFailClasses();
1910
1996
  if (this.hasPlaceholderValue && element.src !== this.placeholderValue) {
1911
- this.dispatch(element, "fallback-image:placeholder");
1997
+ this.dispatchEvent(element, "fallback-image:placeholder");
1912
1998
  element.src = this.placeholderValue;
1913
1999
  element.onerror = this._fail;
1914
2000
  } else {
1915
- this.dispatch(element, "fallback-image:fail");
2001
+ this.dispatchEvent(element, "fallback-image:fail");
1916
2002
  element.style.display = "none";
1917
2003
  }
1918
2004
  }
@@ -2781,13 +2867,13 @@ class SignalActionController extends BaseController {
2781
2867
  _onSignal(payload) {
2782
2868
  let value = payload.value;
2783
2869
  if (!this.hasWhenValue) {
2784
- this.dispatch(this.el, signalEventName(this.nameValue, "match"));
2870
+ this.dispatchEvent(this.el, signalEventName(this.nameValue, "match"));
2785
2871
  return;
2786
2872
  }
2787
2873
  if (this._predicates.every((predicate) => predicate(value))) {
2788
- this.dispatch(this.el, signalEventName(this.nameValue, "match"), { detail: { element: this.el, value } });
2874
+ this.dispatchEvent(this.el, signalEventName(this.nameValue, "match"), { detail: { element: this.el, value } });
2789
2875
  } else {
2790
- this.dispatch(this.el, signalEventName(this.nameValue, "no-match"), { detail: { element: this.el, value } });
2876
+ this.dispatchEvent(this.el, signalEventName(this.nameValue, "no-match"), { detail: { element: this.el, value } });
2791
2877
  }
2792
2878
  }
2793
2879
  }
@@ -3050,6 +3136,15 @@ class FullscreenController extends BaseController {
3050
3136
  this.toggle = toggle;
3051
3137
  }
3052
3138
  }
3139
+ function dispatchEvent(controller, element, eventName, options = {}) {
3140
+ let mergedOptions = Object.assign({}, { bubbles: true, cancelable: true, detail: { target: element } }, options);
3141
+ if (!!mergedOptions.detail.target) {
3142
+ mergedOptions.detail.target = element;
3143
+ }
3144
+ let event = new CustomEvent(eventName, mergedOptions);
3145
+ logEvent(controller, eventName, event, element);
3146
+ element.dispatchEvent(event);
3147
+ }
3053
3148
  class IntersectionController extends BaseController {
3054
3149
  get _threshold() {
3055
3150
  if (this.hasThresholdValue) {
@@ -3062,10 +3157,10 @@ class IntersectionController extends BaseController {
3062
3157
  useIntersection(this, this.el, this.appear, this.disappear, { threshold: this._threshold });
3063
3158
  }
3064
3159
  appear(entry) {
3065
- this.dispatch(this.el, "intersection:appear");
3160
+ dispatchEvent(this, this.el, "intersection:appear");
3066
3161
  }
3067
3162
  disappear(entry) {
3068
- this.dispatch(this.el, "intersection:disappear");
3163
+ dispatchEvent(this, this.el, "intersection:disappear");
3069
3164
  }
3070
3165
  }
3071
3166
  __publicField(IntersectionController, "values", { threshold: String });
@@ -3079,7 +3174,7 @@ class IntervalController extends BaseController {
3079
3174
  });
3080
3175
  }
3081
3176
  _interval() {
3082
- this.dispatch(this.el, "interval:action");
3177
+ this.dispatchEvent(this.el, "interval:action");
3083
3178
  }
3084
3179
  }
3085
3180
  __publicField(IntervalController, "values", { seconds: Number });
@@ -3094,10 +3189,10 @@ class PresenceController extends BaseController {
3094
3189
  return [this.name, "presence", "removed"].filter((el) => !!el).join(":");
3095
3190
  }
3096
3191
  connect() {
3097
- this.dispatch(this.el, this._addedEventName);
3192
+ this.dispatchEvent(this.el, this._addedEventName);
3098
3193
  }
3099
3194
  disconnect() {
3100
- this.dispatch(this.el, this._removedEventName);
3195
+ this.dispatchEvent(this.el, this._removedEventName);
3101
3196
  }
3102
3197
  }
3103
3198
  __publicField(PresenceController, "values", { name: String });
@@ -3114,7 +3209,7 @@ class TimeoutController extends BaseController {
3114
3209
  });
3115
3210
  }
3116
3211
  _timeout() {
3117
- this.dispatch(this.el, "timeout");
3212
+ this.dispatchEvent(this.el, "timeout");
3118
3213
  }
3119
3214
  }
3120
3215
  __publicField(TimeoutController, "values", { seconds: Number });
@@ -3127,10 +3222,10 @@ class UserFocusController extends BaseController {
3127
3222
  });
3128
3223
  }
3129
3224
  appear() {
3130
- this.dispatch(this.el, "user-focus:active");
3225
+ this.dispatchEvent(this.el, "user-focus:active");
3131
3226
  }
3132
3227
  away() {
3133
- this.dispatch(this.el, "user-focus:away");
3228
+ this.dispatchEvent(this.el, "user-focus:away");
3134
3229
  }
3135
3230
  _handleVisibility() {
3136
3231
  this._documentIsActive() ? this.appear() : this.away();
@@ -3207,7 +3302,7 @@ class CountdownController extends BaseController {
3207
3302
  this._clearTick();
3208
3303
  this.removeCountingDownClasses();
3209
3304
  this.addEndedClasses();
3210
- this.dispatch(this.el, "countdown:ended");
3305
+ this.dispatchEvent(this.el, "countdown:ended");
3211
3306
  } else {
3212
3307
  distance = intervalToDuration({ start: this._deadlineDate, end: now });
3213
3308
  }
@@ -3539,7 +3634,6 @@ class TreeViewController extends BaseController {
3539
3634
  return el.querySelectorAll("ul, ol").length > 0;
3540
3635
  }
3541
3636
  mutate(entries) {
3542
- console.log("mutate", entries);
3543
3637
  for (const mutation of entries) {
3544
3638
  if (mutation.type === "childList") {
3545
3639
  Array.from(mutation.addedNodes || []).forEach((el) => this._setupNode(el));
@@ -3581,11 +3675,11 @@ class AnchorSpyController extends BaseController {
3581
3675
  }
3582
3676
  _checkAnchor() {
3583
3677
  if (this._key === this._anchor) {
3584
- this.dispatch(this.el, "anchor-spy:active");
3678
+ this.dispatchEvent(this.el, "anchor-spy:active");
3585
3679
  this.addActiveClasses(this.el);
3586
3680
  this.removeInactiveClasses(this.el);
3587
3681
  } else {
3588
- this.dispatch(this.el, "anchor-spy:inactive");
3682
+ this.dispatchEvent(this.el, "anchor-spy:inactive");
3589
3683
  this.addInactiveClasses(this.el);
3590
3684
  this.removeActiveClasses(this.el);
3591
3685
  }
@@ -3669,7 +3763,7 @@ class ConfirmController extends BaseController {
3669
3763
  confirm(event) {
3670
3764
  if (!window.confirm(this._message)) {
3671
3765
  event.preventDefault();
3672
- this.dispatch(this.el, "confirm:cancelled");
3766
+ this.dispatchEvent(this.el, "confirm:cancelled");
3673
3767
  }
3674
3768
  }
3675
3769
  }
@@ -3710,10 +3804,6 @@ class DebugController extends BaseController {
3710
3804
  }
3711
3805
  __publicField(DebugController, "targets", ["test"]);
3712
3806
  class DisableWithController extends BaseController {
3713
- constructor() {
3714
- super(...arguments);
3715
- __publicField(this, "_cacheText");
3716
- }
3717
3807
  get _message() {
3718
3808
  return this.hasMessageValue ? this.messageValue : "Submitting...";
3719
3809
  }
@@ -3732,44 +3822,27 @@ class DisableWithController extends BaseController {
3732
3822
  event == null ? void 0 : event.preventDefault();
3733
3823
  event == null ? void 0 : event.stopImmediatePropagation();
3734
3824
  } else {
3735
- this._cacheText = this._getElText(element);
3736
- this._setElText(element, this._message);
3737
3825
  this._disable();
3738
- useTimeout(this, this.enable, this._timeout);
3826
+ useTemporaryContent(this, element, this._message, this._timeout, this._enable);
3739
3827
  }
3740
3828
  }
3741
3829
  enable(event) {
3742
3830
  event == null ? void 0 : event.preventDefault();
3743
3831
  let element = this.el;
3744
3832
  if (this._isDisabled(element)) {
3745
- this._setElText(element, this._cacheText);
3746
3833
  this._enable();
3747
3834
  }
3748
3835
  }
3749
3836
  _isDisabled(el) {
3750
- if (isHTMLInputElement(el) && el.type == "submit" || isHTMLButtonElement(el)) {
3837
+ if (isTypeOfButtonableElement(el)) {
3751
3838
  return el.disabled;
3752
3839
  } else {
3753
3840
  return el.dataset.disabled == "true";
3754
3841
  }
3755
3842
  }
3756
- _getElText(el) {
3757
- if (isHTMLInputElement(el) && el.type == "submit") {
3758
- return el.value;
3759
- } else {
3760
- return el.innerText;
3761
- }
3762
- }
3763
- _setElText(el, str) {
3764
- if (isHTMLInputElement(el) && el.type == "submit") {
3765
- el.value = str;
3766
- } else if (isHTMLButtonElement(el) || isHTMLAnchorElement(el)) {
3767
- el.innerText = str;
3768
- }
3769
- }
3770
3843
  _disable() {
3771
3844
  let el = this.el;
3772
- if (isHTMLInputElement(el) && el.type == "submit" || isHTMLButtonElement(el)) {
3845
+ if (isTypeOfButtonableElement(el)) {
3773
3846
  el.disabled = true;
3774
3847
  } else {
3775
3848
  el.dataset.disabled = "true";
@@ -3777,7 +3850,7 @@ class DisableWithController extends BaseController {
3777
3850
  }
3778
3851
  _enable() {
3779
3852
  let el = this.el;
3780
- if (isHTMLInputElement(el) && el.type == "submit" || isHTMLButtonElement(el)) {
3853
+ if (isTypeOfButtonableElement(el)) {
3781
3854
  el.disabled = false;
3782
3855
  } else {
3783
3856
  el.dataset.disabled = void 0;
@@ -3817,7 +3890,11 @@ class ElementSaveController extends BaseController {
3817
3890
  get _element() {
3818
3891
  return this.hasElementTarget ? this.elementTarget : this.el;
3819
3892
  }
3893
+ initialize() {
3894
+ this.save = debounce(this.save.bind(this), 300);
3895
+ }
3820
3896
  connect() {
3897
+ this._store = useLocalStorage(this, this._uniqueIdentifier, {});
3821
3898
  requestAnimationFrame(() => {
3822
3899
  if (this._restoreOnLoad) {
3823
3900
  this.restore();
@@ -3828,8 +3905,8 @@ class ElementSaveController extends BaseController {
3828
3905
  if (event) {
3829
3906
  event.preventDefault();
3830
3907
  }
3831
- localStorage.removeItem(this._uniqueIdentifier);
3832
- this.dispatch(this._element, `element-save:cleared`);
3908
+ this._store.clear();
3909
+ this.dispatchEvent(this._element, `element-save:cleared`);
3833
3910
  }
3834
3911
  save(event) {
3835
3912
  if (event) {
@@ -3839,22 +3916,20 @@ class ElementSaveController extends BaseController {
3839
3916
  let attributes = this.attributesValue.split(" ");
3840
3917
  let data = {};
3841
3918
  attributes.forEach((attr) => data[attr] = get(element, attr));
3842
- localStorage.setItem(this._uniqueIdentifier, JSON.stringify(data));
3843
- this.dispatch(element, `element-save:save:success`);
3919
+ this._store.value = data;
3920
+ this.dispatchEvent(element, `element-save:save:success`);
3844
3921
  }
3845
3922
  restore(event) {
3846
3923
  if (event) {
3847
3924
  event.preventDefault();
3848
3925
  }
3849
3926
  let element = this._element;
3850
- if (localStorage.getItem(this._uniqueIdentifier)) {
3851
- const savedData = JSON.parse(localStorage.getItem(this._uniqueIdentifier));
3852
- Object.keys(savedData).forEach((attr) => {
3853
- set(element, attr, savedData[attr]);
3854
- });
3855
- this.dispatch(element, `element-save:restore:success`);
3927
+ if (!this._store.isEmpty()) {
3928
+ const savedData = this._store.value;
3929
+ Object.keys(savedData).forEach((attr) => set(element, attr, savedData[attr]));
3930
+ this.dispatchEvent(element, `element-save:restore:success`);
3856
3931
  } else {
3857
- this.dispatch(element, `element-save:restore:empty`);
3932
+ this.dispatchEvent(element, `element-save:restore:empty`);
3858
3933
  }
3859
3934
  }
3860
3935
  }
@@ -3892,11 +3967,11 @@ class EmptyDomController extends BaseController {
3892
3967
  if (children.length === 0) {
3893
3968
  this.removeNotEmptyClasses();
3894
3969
  this.addEmptyClasses();
3895
- this.dispatch(element, "dom:empty");
3970
+ this.dispatchEvent(element, "dom:empty");
3896
3971
  } else {
3897
3972
  this.addNotEmptyClasses();
3898
3973
  this.removeEmptyClasses();
3899
- this.dispatch(element, "dom:not-empty", { detail: { count: children.length } });
3974
+ this.dispatchEvent(element, "dom:not-empty", { detail: { count: children.length } });
3900
3975
  }
3901
3976
  }
3902
3977
  }
@@ -3925,11 +4000,11 @@ class PrefetchController extends BaseController {
3925
4000
  }
3926
4001
  if (connection) {
3927
4002
  if (connection.saveData) {
3928
- this.warn("Data Saving is enabled");
4003
+ warn(this, "Data Saving is enabled");
3929
4004
  return false;
3930
4005
  }
3931
4006
  if (/2g/.test(connection.effectiveType)) {
3932
- this.warn("Network is too slow");
4007
+ warn(this, "Network is too slow");
3933
4008
  return false;
3934
4009
  }
3935
4010
  }
@@ -4080,7 +4155,7 @@ class TeleportController extends EphemeralController {
4080
4155
  let element = this.el;
4081
4156
  let destination = document.querySelector(this.targetValue);
4082
4157
  if (destination == null) {
4083
- this.dispatch(element, "teleport:error");
4158
+ this.dispatchEvent(element, "teleport:error");
4084
4159
  return;
4085
4160
  }
4086
4161
  let copy = element.cloneNode(true);
@@ -4581,5 +4656,5 @@ __publicField(TurboFrameRefreshController, "values", {
4581
4656
  interval: Number,
4582
4657
  poll: Boolean
4583
4658
  });
4584
- export { AlertController, AnchorSpyController, AsyncBlockController, AutoSubmitFormController, AutosizeController, BackLinkController, BaseController, CharCountController, CheckboxDisableInputsController, CheckboxEnableInputsController, CheckboxSelectAllController, CheckboxXORController, ClipboardController, ClockController, ConfirmController, ConfirmNavigationController, CountdownController, DebugController, DetectDirtyController, DetectDirtyFormController, DisableWithController, DismissableController, DurationController, ElementSaveController, EmptyDomController, EnableInputsController, EphemeralController, EventBus, FallbackImageController, FocusStealController, FormRcController, FormSaveController, FullscreenController, IntersectionController, IntervalController, LazyBlockController, LightboxImageController, LimitedSelectionCheckboxesController, LoadBlockController, MediaPlayerController, NavigateFormErrorsController, NestedFormController, PasswordConfirmController, PasswordPeekController, PollBlockController, PrefetchController, PresenceController, PrintButtonController, PrintController, RemoteFormController, RemoveController, ResponsiveIframeBodyController, ResponsiveIframeWrapperController, ScrollContainerController, ScrollIntoFocusController, ScrollToBottomController, ScrollToController, ScrollToTopController, SelfDestructController, SignalActionController, SignalInputController, SignalVisibilityController, StickyController, StorageSerializers, SyncInputsController, TableSortController, TableTruncateController, TabsController, TeleportController, TemporaryStateController, TimeDistanceController, TimeoutController, ToggleClassController, TreeViewController, TrixModifierController, TurboFrameRCController, TurboFrameRefreshController, UserFocusController, ValueWarnController, WordCountController, applyTemporaryClass, applyTemporaryState, createHiddenButton, createHiddenInput, getAllRadiosInGroup, getOtherRadiosInGroup, getScrollParent, insertElement, insertHiddenButton, insertHiddenInput, isDirty, isElementCheckable, isElementInViewport, isFormDirty, isHTMLAnchorElement, isHTMLButtonElement, isHTMLFormElement, isHTMLImageElement, isHTMLInputElement, isHTMLLinkElement, isHTMLSelectElement, isHTMLTextAreaElement, isTurboFrame, isTypeOfFormInputElement, requestReset, requestSubmit, scrollAbsoluteBottom, scrollAbsoluteLeft, scrollAbsoluteRight, scrollAbsoluteTop, scrollDown, scrollLeft, scrollRight, scrollToElement, scrollUp, useCollectionEventListener, useCollectionEventListeners, useEventListener, useEventListeners, useFullscreen, useGeolocation, useInjectedElement, useInjectedFragment, useInjectedHTML, useInterval, useLocalStorage, useTimeout };
4659
+ export { AlertController, AnchorSpyController, AsyncBlockController, AutoSubmitFormController, AutosizeController, BackLinkController, BaseController, CharCountController, CheckboxDisableInputsController, CheckboxEnableInputsController, CheckboxSelectAllController, CheckboxXORController, ClipboardController, ClockController, ConfirmController, ConfirmNavigationController, CountdownController, DebugController, DetectDirtyController, DetectDirtyFormController, DisableWithController, DismissableController, DurationController, ElementSaveController, EmptyDomController, EnableInputsController, EphemeralController, EventBus, FallbackImageController, FocusStealController, FormRcController, FormSaveController, FullscreenController, IntersectionController, IntervalController, LazyBlockController, LightboxImageController, LimitedSelectionCheckboxesController, LoadBlockController, MediaPlayerController, NavigateFormErrorsController, NestedFormController, PasswordConfirmController, PasswordPeekController, PollBlockController, PrefetchController, PresenceController, PrintButtonController, PrintController, RemoteFormController, RemoveController, ResponsiveIframeBodyController, ResponsiveIframeWrapperController, ScrollContainerController, ScrollIntoFocusController, ScrollToBottomController, ScrollToController, ScrollToTopController, SelfDestructController, SignalActionController, SignalInputController, SignalVisibilityController, StickyController, StorageSerializers, SyncInputsController, TableSortController, TableTruncateController, TabsController, TeleportController, TemporaryStateController, TimeDistanceController, TimeoutController, ToggleClassController, TreeViewController, TrixModifierController, TurboFrameRCController, TurboFrameRefreshController, UserFocusController, ValueWarnController, WordCountController, applyTemporaryClass, applyTemporaryState, createHiddenButton, createHiddenInput, getAllRadiosInGroup, getOtherRadiosInGroup, getScrollParent, insertElement, insertHiddenButton, insertHiddenInput, isDirty, isElementCheckable, isElementInViewport, isFormDirty, isHTMLAnchorElement, isHTMLButtonButtonElement, isHTMLButtonElement, isHTMLButtonInputElement, isHTMLFormElement, isHTMLImageElement, isHTMLInputElement, isHTMLLabelElement, isHTMLLinkElement, isHTMLResetButtonElement, isHTMLResetInputElement, isHTMLSelectElement, isHTMLSubmitButtonElement, isHTMLSubmitInputElement, isHTMLTextAreaElement, isTurboFrame, isTypeOfButtonableElement, isTypeOfFormInputElement, isTypeOfResetButtonElement, isTypeOfSubmitButtonElement, requestReset, requestSubmit, scrollAbsoluteBottom, scrollAbsoluteLeft, scrollAbsoluteRight, scrollAbsoluteTop, scrollDown, scrollLeft, scrollRight, scrollToElement, scrollUp, useCollectionEventListener, useCollectionEventListeners, useEventListener, useEventListeners, useFullscreen, useGeolocation, useInjectedElement, useInjectedFragment, useInjectedHTML, useInterval, useLocalStorage, useTemporaryContent, useTimeout };
4585
4660
  //# sourceMappingURL=stimulus-library.es.js.map