diff --git a/dist/appearance_controller.d.ts b/dist/appearance_controller.d.ts index 577d25d6..f588873b 100644 --- a/dist/appearance_controller.d.ts +++ b/dist/appearance_controller.d.ts @@ -1,11 +1,11 @@ -import { BaseController } from "./base_controller"; -export declare class AppearanceController extends BaseController { - initialize(): void; - connect(): void; - disconnect(): void; - appear(): void; - away(): void; - _handleVisibility(): void; - _documentIsActive(): boolean; -} +import { BaseController } from "./base_controller"; +export declare class AppearanceController extends BaseController { + initialize(): void; + connect(): void; + disconnect(): void; + appear(): void; + away(): void; + _handleVisibility(): void; + _documentIsActive(): boolean; +} //# sourceMappingURL=appearance_controller.d.ts.map \ No newline at end of file diff --git a/dist/async_block_controller.d.ts b/dist/async_block_controller.d.ts index 87d135f4..018396ce 100644 --- a/dist/async_block_controller.d.ts +++ b/dist/async_block_controller.d.ts @@ -1,20 +1,20 @@ -import { BaseController } from "./base_controller"; -export declare class AsyncBlockController extends BaseController { - static targets: string[]; - static values: { - endpoint: StringConstructor; - errorMessage: StringConstructor; - selector: StringConstructor; - }; - readonly replaceTarget: HTMLElement; - readonly hasReplaceTarget: boolean; - readonly endpointValue: string; - readonly hasSelectorValue: boolean; - readonly selectorValue: string; - readonly hasErrorMessageValue: boolean; - readonly errorMessageValue: string; - get _errorMessage(): string; - connect(): void; - loadContent(): void; -} +import { BaseController } from "./base_controller"; +export declare class AsyncBlockController extends BaseController { + static targets: string[]; + static values: { + endpoint: StringConstructor; + errorMessage: StringConstructor; + selector: StringConstructor; + }; + readonly replaceTarget: HTMLElement; + readonly hasReplaceTarget: boolean; + readonly endpointValue: string; + readonly hasSelectorValue: boolean; + readonly selectorValue: string; + readonly hasErrorMessageValue: boolean; + readonly errorMessageValue: string; + get _errorMessage(): string; + connect(): void; + loadContent(): void; +} //# sourceMappingURL=async_block_controller.d.ts.map \ No newline at end of file diff --git a/dist/auto_submit_form_controller.d.ts b/dist/auto_submit_form_controller.d.ts index d05e1c59..2616d16f 100644 --- a/dist/auto_submit_form_controller.d.ts +++ b/dist/auto_submit_form_controller.d.ts @@ -1,8 +1,8 @@ -import { BaseController } from "./base_controller"; -export declare class AutoSubmitFormController extends BaseController { - initialize(): void; - connect(): void; - disconnect(): void; - private handler; -} +import { BaseController } from "./base_controller"; +export declare class AutoSubmitFormController extends BaseController { + initialize(): void; + connect(): void; + disconnect(): void; + private handler; +} //# sourceMappingURL=auto_submit_form_controller.d.ts.map \ No newline at end of file diff --git a/dist/autosize_controller.d.ts b/dist/autosize_controller.d.ts index 7037c3b5..b817e32c 100644 --- a/dist/autosize_controller.d.ts +++ b/dist/autosize_controller.d.ts @@ -1,9 +1,9 @@ -import { BaseController } from "./base_controller"; -export declare class AutosizeController extends BaseController { - initialize(): void; - connect(): void; - windowResize(): void; - private _handler; - private autosize; -} +import { BaseController } from "./base_controller"; +export declare class AutosizeController extends BaseController { + initialize(): void; + connect(): void; + windowResize(): void; + private _handler; + private autosize; +} //# sourceMappingURL=autosize_controller.d.ts.map \ No newline at end of file diff --git a/dist/base_controller.d.ts b/dist/base_controller.d.ts index ba079624..1adb2b7c 100644 --- a/dist/base_controller.d.ts +++ b/dist/base_controller.d.ts @@ -1,8 +1,8 @@ -import { Context, Controller } from "stimulus"; -export declare class BaseController extends Controller { - constructor(context: Context); - get el(): HTMLElement; - dispatch(element: HTMLElement, eventName: string, options?: CustomEventInit): void; - log(functionName: string, args?: {}): void; -} +import { Context, Controller } from "stimulus"; +export declare class BaseController extends Controller { + constructor(context: Context); + get el(): HTMLElement; + dispatch(element: HTMLElement, eventName: string, options?: CustomEventInit): void; + log(functionName: string, args?: {}): void; +} //# sourceMappingURL=base_controller.d.ts.map \ No newline at end of file diff --git a/dist/char_count_controller.d.ts b/dist/char_count_controller.d.ts index 2c9eea79..5405d24c 100644 --- a/dist/char_count_controller.d.ts +++ b/dist/char_count_controller.d.ts @@ -1,23 +1,23 @@ -import { BaseController } from "./base_controller"; -export declare class CharCountController extends BaseController { - static targets: string[]; - static values: { - min: NumberConstructor; - max: NumberConstructor; - }; - static classes: string[]; - readonly inputTarget: HTMLInputElement | HTMLTextAreaElement; - readonly outputTarget: HTMLElement; - minValue: number; - hasMinValue: boolean; - maxValue: number; - hasMaxValue: boolean; - errorClass: string; - hasErrorClass: boolean; - initialize(): void; - connect(): void; - disconnect(): void; - private _updateCharCount; - private _isValidCount; -} +import { BaseController } from "./base_controller"; +export declare class CharCountController extends BaseController { + static targets: string[]; + static values: { + min: NumberConstructor; + max: NumberConstructor; + }; + static classes: string[]; + readonly inputTarget: HTMLInputElement | HTMLTextAreaElement; + readonly outputTarget: HTMLElement; + minValue: number; + hasMinValue: boolean; + maxValue: number; + hasMaxValue: boolean; + errorClass: string; + hasErrorClass: boolean; + initialize(): void; + connect(): void; + disconnect(): void; + private _updateCharCount; + private _isValidCount; +} //# sourceMappingURL=char_count_controller.d.ts.map \ No newline at end of file diff --git a/dist/checkbox_select_all_controller.d.ts b/dist/checkbox_select_all_controller.d.ts index 9346a5d3..d02bbbc6 100644 --- a/dist/checkbox_select_all_controller.d.ts +++ b/dist/checkbox_select_all_controller.d.ts @@ -1,15 +1,15 @@ -import { BaseController } from './base_controller'; -export declare class CheckboxSelectAllController extends BaseController { - static targets: string[]; - readonly hasSelectAllTarget: boolean; - readonly selectAllTarget: HTMLInputElement; - readonly checkboxTargets: HTMLInputElement[]; - private get checked(); - private get unchecked(); - initialize(): void; - connect(): void; - disconnect(): void; - private toggle; - private refresh; -} +import { BaseController } from './base_controller'; +export declare class CheckboxSelectAllController extends BaseController { + static targets: string[]; + readonly hasSelectAllTarget: boolean; + readonly selectAllTarget: HTMLInputElement; + readonly checkboxTargets: HTMLInputElement[]; + private get checked(); + private get unchecked(); + initialize(): void; + connect(): void; + disconnect(): void; + private toggle; + private refresh; +} //# sourceMappingURL=checkbox_select_all_controller.d.ts.map \ No newline at end of file diff --git a/dist/clipboard_controller.d.ts b/dist/clipboard_controller.d.ts index 2c2affbe..b9de3123 100644 --- a/dist/clipboard_controller.d.ts +++ b/dist/clipboard_controller.d.ts @@ -1,19 +1,19 @@ -import { BaseController } from "./base_controller"; -export declare class ClipboardController extends BaseController { - static targets: string[]; - static values: { - removeUnused: BooleanConstructor; - }; - readonly sourceTarget: HTMLElement; - readonly copyTarget: HTMLElement; - readonly hasCopyTarget: boolean; - readonly fallbackTarget: HTMLElement; - readonly hasFallbackTarget: boolean; - readonly hasRemoveUnusedValue: boolean; - readonly removeUnusedValue: boolean; - supported: boolean; - connect(): void; - select(event: MouseEvent): void; - copy(event: ClipboardEvent): void; -} +import { BaseController } from "./base_controller"; +export declare class ClipboardController extends BaseController { + static targets: string[]; + static values: { + removeUnused: BooleanConstructor; + }; + readonly sourceTarget: HTMLElement; + readonly copyTarget: HTMLElement; + readonly hasCopyTarget: boolean; + readonly fallbackTarget: HTMLElement; + readonly hasFallbackTarget: boolean; + readonly hasRemoveUnusedValue: boolean; + readonly removeUnusedValue: boolean; + supported: boolean; + connect(): void; + select(event: MouseEvent): void; + copy(event: ClipboardEvent): void; +} //# sourceMappingURL=clipboard_controller.d.ts.map \ No newline at end of file diff --git a/dist/confirm_controller.d.ts b/dist/confirm_controller.d.ts index 53ec3ab9..4db359fd 100644 --- a/dist/confirm_controller.d.ts +++ b/dist/confirm_controller.d.ts @@ -1,13 +1,13 @@ -import { BaseController } from './base_controller'; -export declare class ConfirmController extends BaseController { - static values: { - message: StringConstructor; - }; - readonly messageValue: string; - readonly hasMessageValue: boolean; - get message(): string; - initialize(): void; - connect(): void; - confirm(event: Event): void; -} +import { BaseController } from './base_controller'; +export declare class ConfirmController extends BaseController { + static values: { + message: StringConstructor; + }; + readonly messageValue: string; + readonly hasMessageValue: boolean; + get message(): string; + initialize(): void; + connect(): void; + confirm(event: Event): void; +} //# sourceMappingURL=confirm_controller.d.ts.map \ No newline at end of file diff --git a/dist/confirm_navigation_controller.d.ts b/dist/confirm_navigation_controller.d.ts index 00563ea5..6a1fc67a 100644 --- a/dist/confirm_navigation_controller.d.ts +++ b/dist/confirm_navigation_controller.d.ts @@ -1,14 +1,14 @@ -import { BaseController } from "./base_controller"; -export declare class ConfirmNavigationController extends BaseController { - static values: { - _message: StringConstructor; - }; - readonly _messageValue: string; - readonly hasMessageValue: boolean; - get _message(): string; - initialize(): void; - connect(): void; - handlePopstate(_event: PopStateEvent): boolean; - handleTurboNavigation(event: Event): void; -} +import { BaseController } from "./base_controller"; +export declare class ConfirmNavigationController extends BaseController { + static values: { + _message: StringConstructor; + }; + readonly _messageValue: string; + readonly hasMessageValue: boolean; + get _message(): string; + initialize(): void; + connect(): void; + handlePopstate(_event: PopStateEvent): boolean; + handleTurboNavigation(event: Event): void; +} //# sourceMappingURL=confirm_navigation_controller.d.ts.map \ No newline at end of file diff --git a/dist/debug_controller.d.ts b/dist/debug_controller.d.ts index 6a6e8a2d..2d77d43f 100644 --- a/dist/debug_controller.d.ts +++ b/dist/debug_controller.d.ts @@ -1,7 +1,7 @@ -import { BaseController } from "./base_controller"; -export declare class DebugController extends BaseController { - static targets: string[]; - testTargets: HTMLElement[]; - connect(): void; -} +import { BaseController } from "./base_controller"; +export declare class DebugController extends BaseController { + static targets: string[]; + testTargets: HTMLElement[]; + connect(): void; +} //# sourceMappingURL=debug_controller.d.ts.map \ No newline at end of file diff --git a/dist/detect_dirty_controller.d.ts b/dist/detect_dirty_controller.d.ts index 78126bb2..921dec66 100644 --- a/dist/detect_dirty_controller.d.ts +++ b/dist/detect_dirty_controller.d.ts @@ -1,11 +1,11 @@ -import { BaseController } from "./base_controller"; -export declare class DetectDirtyController extends BaseController { - loadValue: null | string | boolean; - initialize(): void; - connect(): void; - disconnect(): void; - restore(): void; - private checkDirty; -} -export declare function isDirty(element: HTMLElement): boolean; +import { BaseController } from "./base_controller"; +export declare class DetectDirtyController extends BaseController { + loadValue: null | string | boolean; + initialize(): void; + connect(): void; + disconnect(): void; + restore(): void; + private checkDirty; +} +export declare function isDirty(element: HTMLElement): boolean; //# sourceMappingURL=detect_dirty_controller.d.ts.map \ No newline at end of file diff --git a/dist/disable_inputs_controller.d.ts b/dist/disable_inputs_controller.d.ts index af84c1fb..c052812e 100644 --- a/dist/disable_inputs_controller.d.ts +++ b/dist/disable_inputs_controller.d.ts @@ -1,17 +1,17 @@ -import { BaseController } from "./base_controller"; -export declare class DisableInputsController extends BaseController { - static targets: string[]; - static values: { - clear: BooleanConstructor; - }; - readonly hasDisablerTarget: boolean; - readonly disablerTarget: HTMLInputElement; - readonly disableTargets: Array; - readonly clearValue: boolean; - readonly hasClearValue: boolean; - connect(): void; - toggle(): void; - disableInputs(): void; - enableInputs(): void; -} +import { BaseController } from "./base_controller"; +export declare class DisableInputsController extends BaseController { + static targets: string[]; + static values: { + clear: BooleanConstructor; + }; + readonly hasDisablerTarget: boolean; + readonly disablerTarget: HTMLInputElement; + readonly disableTargets: Array; + readonly clearValue: boolean; + readonly hasClearValue: boolean; + connect(): void; + toggle(): void; + disableInputs(): void; + enableInputs(): void; +} //# sourceMappingURL=disable_inputs_controller.d.ts.map \ No newline at end of file diff --git a/dist/dismissable_controller.d.ts b/dist/dismissable_controller.d.ts index b6d4308a..a0adfba2 100644 --- a/dist/dismissable_controller.d.ts +++ b/dist/dismissable_controller.d.ts @@ -1,5 +1,5 @@ -import { BaseController } from "./base_controller"; -export declare class DismissableController extends BaseController { - dismiss(): void; -} +import { BaseController } from "./base_controller"; +export declare class DismissableController extends BaseController { + dismiss(): void; +} //# sourceMappingURL=dismissable_controller.d.ts.map \ No newline at end of file diff --git a/dist/element_save_controller.d.ts b/dist/element_save_controller.d.ts new file mode 100644 index 00000000..d4085d51 --- /dev/null +++ b/dist/element_save_controller.d.ts @@ -0,0 +1,26 @@ +import { BaseController } from './base_controller'; +export declare class ElementSaveController extends BaseController { + static targets: string[]; + static values: { + id: StringConstructor; + attributes: StringConstructor; + restoreOnLoad: BooleanConstructor; + }; + readonly hasElementTarget: boolean; + readonly elementTarget: HTMLElement; + readonly elementTargets: HTMLElement[]; + readonly idValue: string; + readonly attributesValue: string; + readonly hasIdValue: boolean; + readonly restoreOnLoadValue: boolean; + readonly hasRestoreOnLoadValue: boolean; + get _id(): string; + get _uniqueIdentifier(): string; + get _restoreOnLoad(): boolean; + get _element(): HTMLElement; + connect(): void; + clear(event?: Event): void; + save(event?: Event): void; + restore(event?: Event): void; +} +//# sourceMappingURL=element_save_controller.d.ts.map \ No newline at end of file diff --git a/dist/element_save_controller.d.ts.map b/dist/element_save_controller.d.ts.map new file mode 100644 index 00000000..c09890ce --- /dev/null +++ b/dist/element_save_controller.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"element_save_controller.d.ts","sourceRoot":"","sources":["../src/element_save_controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;AAIjD,qBAAa,qBAAsB,SAAQ,cAAc;IAEvD,MAAM,CAAC,OAAO,WAEZ;IACF,MAAM,CAAC,MAAM;;;;MAIX;IACF,SAAiB,gBAAgB,EAAE,OAAO,CAAC;IAC3C,SAAiB,aAAa,EAAE,WAAW,CAAC;IAC5C,SAAiB,cAAc,EAAE,WAAW,EAAE,CAAC;IAC/C,SAAiB,OAAO,EAAE,MAAM,CAAC;IACjC,SAAiB,eAAe,EAAE,MAAM,CAAC;IACzC,SAAiB,UAAU,EAAE,OAAO,CAAC;IACrC,SAAiB,kBAAkB,EAAE,OAAO,CAAC;IAC7C,SAAiB,qBAAqB,EAAE,OAAO,CAAC;IAEhD,IAAI,GAAG,WAWN;IAED,IAAI,iBAAiB,WAGpB;IAED,IAAI,cAAc,YAEjB;IAED,IAAI,QAAQ,IAAI,WAAW,CAE1B;IAED,OAAO;IAQP,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK;IAQnB,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK;IAYlB,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK;CAgBtB"} \ No newline at end of file diff --git a/dist/empty_dom_controller.d.ts b/dist/empty_dom_controller.d.ts index a602225c..b0e7a5fb 100644 --- a/dist/empty_dom_controller.d.ts +++ b/dist/empty_dom_controller.d.ts @@ -1,24 +1,24 @@ -import { BaseController } from "./base_controller"; -export declare class EmptyDomController extends BaseController { - static classes: string[]; - static values: { - scopeSelector: StringConstructor; - }; - hasEmptyClass: boolean; - emptyClass: string; - hasNotEmptyClass: boolean; - notEmptyClass: string; - hasScopeSelectorValue: boolean; - scopeSelectorValue: string; - get emptyClasses(): string[]; - get notEmptyClasses(): string[]; - get children(): Element[]; - connect(): void; - mutate(entries: MutationRecord[]): void; - checkEmpty(): void; - private _removeEmptyClasses; - private _addNotEmptyClasses; - private _addEmptyClasses; - private _removeNotEmptyClasses; -} +import { BaseController } from "./base_controller"; +export declare class EmptyDomController extends BaseController { + static classes: string[]; + static values: { + scopeSelector: StringConstructor; + }; + hasEmptyClass: boolean; + emptyClass: string; + hasNotEmptyClass: boolean; + notEmptyClass: string; + hasScopeSelectorValue: boolean; + scopeSelectorValue: string; + get emptyClasses(): string[]; + get notEmptyClasses(): string[]; + get children(): Element[]; + connect(): void; + mutate(entries: MutationRecord[]): void; + checkEmpty(): void; + private _removeEmptyClasses; + private _addNotEmptyClasses; + private _addEmptyClasses; + private _removeNotEmptyClasses; +} //# sourceMappingURL=empty_dom_controller.d.ts.map \ No newline at end of file diff --git a/dist/enable_inputs_controller.d.ts b/dist/enable_inputs_controller.d.ts index ba8ae573..bec3aaf7 100644 --- a/dist/enable_inputs_controller.d.ts +++ b/dist/enable_inputs_controller.d.ts @@ -1,17 +1,17 @@ -import { BaseController } from "./base_controller"; -export declare class EnableInputsController extends BaseController { - static targets: string[]; - static values: { - clear: BooleanConstructor; - }; - readonly hasEnablerTarget: boolean; - readonly enablerTarget: HTMLInputElement; - readonly enableTargets: Array; - readonly clearValue: boolean; - readonly hasClearValue: boolean; - connect(): void; - toggle(): void; - disableInputs(): void; - enableInputs(): void; -} +import { BaseController } from "./base_controller"; +export declare class EnableInputsController extends BaseController { + static targets: string[]; + static values: { + clear: BooleanConstructor; + }; + readonly hasEnablerTarget: boolean; + readonly enablerTarget: HTMLInputElement; + readonly enableTargets: Array; + readonly clearValue: boolean; + readonly hasClearValue: boolean; + connect(): void; + toggle(): void; + disableInputs(): void; + enableInputs(): void; +} //# sourceMappingURL=enable_inputs_controller.d.ts.map \ No newline at end of file diff --git a/dist/fallback_image_controller.d.ts b/dist/fallback_image_controller.d.ts index 2202cdff..6961a6ed 100644 --- a/dist/fallback_image_controller.d.ts +++ b/dist/fallback_image_controller.d.ts @@ -1,10 +1,10 @@ -import { BaseController } from "./base_controller"; -export declare class FallbackImageController extends BaseController { - static values: { - placeholder: StringConstructor; - }; - readonly placeholderValue: string; - readonly hasPlaceholderValue: boolean; - connect(): void; -} +import { BaseController } from "./base_controller"; +export declare class FallbackImageController extends BaseController { + static values: { + placeholder: StringConstructor; + }; + readonly placeholderValue: string; + readonly hasPlaceholderValue: boolean; + connect(): void; +} //# sourceMappingURL=fallback_image_controller.d.ts.map \ No newline at end of file diff --git a/dist/form_save_controller.d.ts b/dist/form_save_controller.d.ts index 1eb77caa..e9cdb1d7 100644 --- a/dist/form_save_controller.d.ts +++ b/dist/form_save_controller.d.ts @@ -1,34 +1,34 @@ -import { BaseController } from './base_controller'; -interface FormSavePayload { - [idx: string]: { - [idx: string]: string | boolean; - }; -} -export declare class FormSaveController extends BaseController { - static values: { - id: StringConstructor; - restoreOnLoad: BooleanConstructor; - clearOnSubmit: BooleanConstructor; - }; - readonly idValue: string; - readonly hasIdValue: boolean; - readonly restoreOnLoadValue: boolean; - readonly hasRestoreOnLoadValue: boolean; - readonly clearOnSubmitValue: boolean; - readonly hasClearOnSubmitValue: boolean; - get formID(): string; - get formIdentifier(): string; - get formElements(): HTMLFormControlsCollection; - get formData(): FormSavePayload; - get restoreOnLoad(): boolean; - get clearOnSubmit(): boolean; - initialize(): void; - connect(): void; - disconnect(): void; - _clear(): void; - clear(event?: Event): void; - save(event: Event): void; - restore(event?: Event): void; -} -export {}; +import { BaseController } from './base_controller'; +interface FormSavePayload { + [idx: string]: { + [idx: string]: string | boolean; + }; +} +export declare class FormSaveController extends BaseController { + static values: { + id: StringConstructor; + restoreOnLoad: BooleanConstructor; + clearOnSubmit: BooleanConstructor; + }; + readonly idValue: string; + readonly hasIdValue: boolean; + readonly restoreOnLoadValue: boolean; + readonly hasRestoreOnLoadValue: boolean; + readonly clearOnSubmitValue: boolean; + readonly hasClearOnSubmitValue: boolean; + get formID(): string; + get formIdentifier(): string; + get formElements(): HTMLFormControlsCollection; + get formData(): FormSavePayload; + get restoreOnLoad(): boolean; + get clearOnSubmit(): boolean; + initialize(): void; + connect(): void; + disconnect(): void; + _clear(): void; + clear(event?: Event): void; + save(event: Event): void; + restore(event?: Event): void; +} +export {}; //# sourceMappingURL=form_save_controller.d.ts.map \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts index d2483d37..f43fdf93 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -12,6 +12,7 @@ export { DetectDirtyController } from "./detect_dirty_controller"; export { DisableInputsController } from "./disable_inputs_controller"; export { DisableWithController } from "./disable_with_controller"; export { DismissableController } from "./dismissable_controller"; +export { ElementSaveController } from "./element_save_controller"; export { EmptyDomController } from "./empty_dom_controller"; export { EnableInputsController } from "./enable_inputs_controller"; export { FallbackImageController } from "./fallback_image_controller"; diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map index 9c466b66..58963e2c 100644 --- a/dist/index.d.ts.map +++ b/dist/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAC,oBAAoB,EAAC,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAC,wBAAwB,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAC,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAC,2BAA2B,EAAC,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAC,mBAAmB,EAAC,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAC,2BAA2B,EAAC,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAC,uBAAuB,EAAC,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAC,qBAAqB,EAAC,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAC,kBAAkB,EAAC,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAC,sBAAsB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAC,uBAAuB,EAAC,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAC,kBAAkB,EAAC,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAC,sBAAsB,EAAC,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAC,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAC,uBAAuB,EAAC,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAC,oCAAoC,EAAC,MAAM,2CAA2C,CAAC;AAC/F,OAAO,EAAC,oBAAoB,EAAC,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAC,yBAAyB,EAAC,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAC,sBAAsB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAC,oBAAoB,EAAC,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAC,8BAA8B,EAAE,iCAAiC,EAAC,MAAM,gCAAgC,CAAC;AACjH,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAC,wBAAwB,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,kBAAkB,EAAC,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAC,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAC,sBAAsB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAC,sBAAsB,EAAC,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAC,2BAA2B,EAAC,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAC,mBAAmB,EAAC,MAAM,yBAAyB,CAAC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAC,oBAAoB,EAAC,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAC,wBAAwB,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAC,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAC,2BAA2B,EAAC,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAC,mBAAmB,EAAC,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAC,2BAA2B,EAAC,MAAM,iCAAiC,CAAC;AAC5E,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAC,uBAAuB,EAAC,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAC,qBAAqB,EAAC,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAC,kBAAkB,EAAC,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAC,sBAAsB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAC,uBAAuB,EAAC,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAC,kBAAkB,EAAC,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAC,sBAAsB,EAAC,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAC,mBAAmB,EAAC,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAC,uBAAuB,EAAC,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAC,oCAAoC,EAAC,MAAM,2CAA2C,CAAC;AAC/F,OAAO,EAAC,oBAAoB,EAAC,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAC,yBAAyB,EAAC,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAC,sBAAsB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAC,oBAAoB,EAAC,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAC,8BAA8B,EAAE,iCAAiC,EAAC,MAAM,gCAAgC,CAAC;AACjH,OAAO,EAAC,yBAAyB,EAAC,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAC,wBAAwB,EAAC,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAC,kBAAkB,EAAC,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAC,qBAAqB,EAAC,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAC,sBAAsB,EAAC,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAC,kBAAkB,EAAC,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAC,sBAAsB,EAAC,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAC,2BAA2B,EAAC,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAC,mBAAmB,EAAC,MAAM,yBAAyB,CAAC"} \ No newline at end of file diff --git a/dist/intersection_controller.d.ts b/dist/intersection_controller.d.ts index 21343c6d..ab891163 100644 --- a/dist/intersection_controller.d.ts +++ b/dist/intersection_controller.d.ts @@ -1,14 +1,14 @@ -import { BaseController } from "./base_controller"; -export declare class IntersectionController extends BaseController { - static values: { - threshold: StringConstructor; - }; - readonly isVisible: boolean; - readonly thresholdValue: string; - readonly hasThresholdValue: boolean; - get threshold(): number[]; - connect(): void; - appear(entry: IntersectionObserverEntry): void; - disappear(entry: IntersectionObserverEntry): void; -} +import { BaseController } from "./base_controller"; +export declare class IntersectionController extends BaseController { + static values: { + threshold: StringConstructor; + }; + readonly isVisible: boolean; + readonly thresholdValue: string; + readonly hasThresholdValue: boolean; + get threshold(): number[]; + connect(): void; + appear(entry: IntersectionObserverEntry): void; + disappear(entry: IntersectionObserverEntry): void; +} //# sourceMappingURL=intersection_controller.d.ts.map \ No newline at end of file diff --git a/dist/lazy_block_controller.d.ts b/dist/lazy_block_controller.d.ts index fbbce134..49927584 100644 --- a/dist/lazy_block_controller.d.ts +++ b/dist/lazy_block_controller.d.ts @@ -1,10 +1,10 @@ -import { AsyncBlockController } from "./async_block_controller"; -export declare class LazyBlockController extends AsyncBlockController { - observe: () => void; - unobserve: () => void; - isVisible: boolean; - disappear: () => void; - connect(): void; - appear(entry: IntersectionObserverEntry): void; -} +import { AsyncBlockController } from "./async_block_controller"; +export declare class LazyBlockController extends AsyncBlockController { + observe: () => void; + unobserve: () => void; + isVisible: boolean; + disappear: () => void; + connect(): void; + appear(entry: IntersectionObserverEntry): void; +} //# sourceMappingURL=lazy_block_controller.d.ts.map \ No newline at end of file diff --git a/dist/lightbox_image_controller.d.ts b/dist/lightbox_image_controller.d.ts index e9f0da7d..8a0e260b 100644 --- a/dist/lightbox_image_controller.d.ts +++ b/dist/lightbox_image_controller.d.ts @@ -1,30 +1,30 @@ -import { BaseController } from "./base_controller"; -export declare class LightboxImageController extends BaseController { - static values: { - src: StringConstructor; - srcSet: StringConstructor; - sizes: StringConstructor; - }; - static classes: string[]; - readonly hasModalClass: boolean; - readonly modalClass: string; - readonly hasImageClass: boolean; - readonly imageClass: string; - readonly hasSrcValue: boolean; - readonly srcValue: string; - readonly hasSrcSetValue: boolean; - readonly srcSetValue: string; - readonly hasSizesValue: boolean; - readonly sizesValue: string; - _dialog: HTMLDialogElement | null; - get src(): string; - get srcSet(): string; - get sizes(): string; - get modalClassName(): string; - get imageClassName(): string; - initialize(): void; - connect(): void; - open(): void; - close(): void; -} +import { BaseController } from "./base_controller"; +export declare class LightboxImageController extends BaseController { + static values: { + src: StringConstructor; + srcSet: StringConstructor; + sizes: StringConstructor; + }; + static classes: string[]; + readonly hasModalClass: boolean; + readonly modalClass: string; + readonly hasImageClass: boolean; + readonly imageClass: string; + readonly hasSrcValue: boolean; + readonly srcValue: string; + readonly hasSrcSetValue: boolean; + readonly srcSetValue: string; + readonly hasSizesValue: boolean; + readonly sizesValue: string; + _dialog: HTMLDialogElement | null; + get src(): string; + get srcSet(): string; + get sizes(): string; + get modalClassName(): string; + get imageClassName(): string; + initialize(): void; + connect(): void; + open(): void; + close(): void; +} //# sourceMappingURL=lightbox_image_controller.d.ts.map \ No newline at end of file diff --git a/dist/limited_selection_checkboxes_controller.d.ts b/dist/limited_selection_checkboxes_controller.d.ts index e1cf3b47..47942c37 100644 --- a/dist/limited_selection_checkboxes_controller.d.ts +++ b/dist/limited_selection_checkboxes_controller.d.ts @@ -1,18 +1,18 @@ -import { BaseController } from "./base_controller"; -export declare class LimitedSelectionCheckboxesController extends BaseController { - static targets: string[]; - static values: { - max: NumberConstructor; - message: StringConstructor; - }; - readonly hasErrorTarget: boolean; - readonly errorTarget: HTMLElement; - readonly inputTargets: HTMLInputElement[]; - readonly maxValue: number; - readonly messageValue: string; - initialize(): void; - connect(): void; - disconnect(): void; - handleInputs(event: Event): void; -} +import { BaseController } from "./base_controller"; +export declare class LimitedSelectionCheckboxesController extends BaseController { + static targets: string[]; + static values: { + max: NumberConstructor; + message: StringConstructor; + }; + readonly hasErrorTarget: boolean; + readonly errorTarget: HTMLElement; + readonly inputTargets: HTMLInputElement[]; + readonly maxValue: number; + readonly messageValue: string; + initialize(): void; + connect(): void; + disconnect(): void; + handleInputs(event: Event): void; +} //# sourceMappingURL=limited_selection_checkboxes_controller.d.ts.map \ No newline at end of file diff --git a/dist/nested_form_controller.d.ts b/dist/nested_form_controller.d.ts index 2272d0f4..c5fbbf50 100644 --- a/dist/nested_form_controller.d.ts +++ b/dist/nested_form_controller.d.ts @@ -1,22 +1,22 @@ -import { BaseController } from "./base_controller"; -export declare class NestedFormController extends BaseController { - static targets: string[]; - static values: { - insertMode: StringConstructor; - wrapperClass: StringConstructor; - }; - readonly targetTarget: HTMLElement; - readonly templateTarget: HTMLTemplateElement | HTMLScriptElement; - readonly wrapperClassValue: string; - readonly hasWrapperSelectorValue: boolean; - readonly insertModeValue: InsertPosition; - readonly hasInsertModeValue: boolean; - get wrapperClass(): string; - get insertMode(): InsertPosition; - connect(): void; - add(event?: Event): void; - remove(event: Event): void; - generateID(): string; - private checkStructure; -} +import { BaseController } from "./base_controller"; +export declare class NestedFormController extends BaseController { + static targets: string[]; + static values: { + insertMode: StringConstructor; + wrapperClass: StringConstructor; + }; + readonly targetTarget: HTMLElement; + readonly templateTarget: HTMLTemplateElement | HTMLScriptElement; + readonly wrapperClassValue: string; + readonly hasWrapperSelectorValue: boolean; + readonly insertModeValue: InsertPosition; + readonly hasInsertModeValue: boolean; + get wrapperClass(): string; + get insertMode(): InsertPosition; + connect(): void; + add(event?: Event): void; + remove(event: Event): void; + generateID(): string; + private checkStructure; +} //# sourceMappingURL=nested_form_controller.d.ts.map \ No newline at end of file diff --git a/dist/password_confirm_controller.d.ts b/dist/password_confirm_controller.d.ts index 3aa07565..a4416ae2 100644 --- a/dist/password_confirm_controller.d.ts +++ b/dist/password_confirm_controller.d.ts @@ -1,14 +1,14 @@ -import { BaseController } from "./base_controller"; -export declare class PasswordConfirmController extends BaseController { - static targets: string[]; - static classes: string[]; - readonly passwordTargets: HTMLInputElement[]; - readonly errorClass: string; - readonly hasErrorClass: boolean; - initialize(): void; - connect(): void; - disconnect(): void; - private allPasswordsMatch; - private checkPasswordsMatch; -} +import { BaseController } from "./base_controller"; +export declare class PasswordConfirmController extends BaseController { + static targets: string[]; + static classes: string[]; + readonly passwordTargets: HTMLInputElement[]; + readonly errorClass: string; + readonly hasErrorClass: boolean; + initialize(): void; + connect(): void; + disconnect(): void; + private allPasswordsMatch; + private checkPasswordsMatch; +} //# sourceMappingURL=password_confirm_controller.d.ts.map \ No newline at end of file diff --git a/dist/password_peek_controller.d.ts b/dist/password_peek_controller.d.ts index 3a538ecd..55b679e9 100644 --- a/dist/password_peek_controller.d.ts +++ b/dist/password_peek_controller.d.ts @@ -1,9 +1,9 @@ -import { BaseController } from "./base_controller"; -export declare class PasswordPeekController extends BaseController { - static targets: string[]; - readonly passwordTarget: HTMLInputElement; - peak(event?: Event): void; - hide(event?: Event): void; - toggle(event?: Event): void; -} +import { BaseController } from "./base_controller"; +export declare class PasswordPeekController extends BaseController { + static targets: string[]; + readonly passwordTarget: HTMLInputElement; + peak(event?: Event): void; + hide(event?: Event): void; + toggle(event?: Event): void; +} //# sourceMappingURL=password_peek_controller.d.ts.map \ No newline at end of file diff --git a/dist/responsive_iframe_controller.d.ts b/dist/responsive_iframe_controller.d.ts index 31175f04..88ef4e6f 100644 --- a/dist/responsive_iframe_controller.d.ts +++ b/dist/responsive_iframe_controller.d.ts @@ -1,24 +1,24 @@ -import { WindowResizePayload } from "stimulus-use/dist/use-window-resize/use-window-resize"; -import { BaseController } from "./base_controller"; -interface ResponsiveIframeMessage { - name: string; - height: number; -} -export declare class ResponsiveIframeWrapperController extends BaseController { - initialize(): void; - connect(): void; - disconnect(): void; - messageReceived(message: MessageEvent): void; - resize(height: number): void; -} -export declare class ResponsiveIframeBodyController extends BaseController { - static debounces: string[]; - observe: () => void; - unobserve: () => void; - connect(): void; - windowResize(payload: WindowResizePayload): void; - postUpdate(): void; - getHeight(): number; -} -export {}; +import { WindowResizePayload } from "stimulus-use/dist/use-window-resize/use-window-resize"; +import { BaseController } from "./base_controller"; +interface ResponsiveIframeMessage { + name: string; + height: number; +} +export declare class ResponsiveIframeWrapperController extends BaseController { + initialize(): void; + connect(): void; + disconnect(): void; + messageReceived(message: MessageEvent): void; + resize(height: number): void; +} +export declare class ResponsiveIframeBodyController extends BaseController { + static debounces: string[]; + observe: () => void; + unobserve: () => void; + connect(): void; + windowResize(payload: WindowResizePayload): void; + postUpdate(): void; + getHeight(): number; +} +export {}; //# sourceMappingURL=responsive_iframe_controller.d.ts.map \ No newline at end of file diff --git a/dist/scroll_into_focus_controller.d.ts b/dist/scroll_into_focus_controller.d.ts index 0fce693a..dacab36a 100644 --- a/dist/scroll_into_focus_controller.d.ts +++ b/dist/scroll_into_focus_controller.d.ts @@ -1,16 +1,16 @@ -import { EphemeralController } from "./utilities/ephemeral_controller"; -export declare class ScrollIntoFocusController extends EphemeralController { - static values: { - behavior: StringConstructor; - block: StringConstructor; - inline: StringConstructor; - }; - behaviorValue: ScrollBehavior; - hasBehaviorValue: boolean; - blockValue: ScrollLogicalPosition; - hasBlockValue: boolean; - inlineValue: ScrollLogicalPosition; - hasInlineValue: boolean; - connect(): void; -} +import { EphemeralController } from "./utilities/ephemeral_controller"; +export declare class ScrollIntoFocusController extends EphemeralController { + static values: { + behavior: StringConstructor; + block: StringConstructor; + inline: StringConstructor; + }; + behaviorValue: ScrollBehavior; + hasBehaviorValue: boolean; + blockValue: ScrollLogicalPosition; + hasBlockValue: boolean; + inlineValue: ScrollLogicalPosition; + hasInlineValue: boolean; + connect(): void; +} //# sourceMappingURL=scroll_into_focus_controller.d.ts.map \ No newline at end of file diff --git a/dist/scroll_to_bottom_controller.d.ts b/dist/scroll_to_bottom_controller.d.ts index 1545847e..468714c3 100644 --- a/dist/scroll_to_bottom_controller.d.ts +++ b/dist/scroll_to_bottom_controller.d.ts @@ -1,10 +1,10 @@ -import { BaseController } from "./base_controller"; -export declare class ScrollToBottomController extends BaseController { - static values: { - mode: StringConstructor; - }; - modeValue: "nearest" | "document"; - hasModeValue: boolean; - scroll(event?: Event): void; -} +import { BaseController } from "./base_controller"; +export declare class ScrollToBottomController extends BaseController { + static values: { + mode: StringConstructor; + }; + modeValue: "nearest" | "document"; + hasModeValue: boolean; + scroll(event?: Event): void; +} //# sourceMappingURL=scroll_to_bottom_controller.d.ts.map \ No newline at end of file diff --git a/dist/scroll_to_controller.d.ts b/dist/scroll_to_controller.d.ts index 532a45c6..c41a73f8 100644 --- a/dist/scroll_to_controller.d.ts +++ b/dist/scroll_to_controller.d.ts @@ -1,18 +1,18 @@ -import { BaseController } from "./base_controller"; -export declare class ScrollToController extends BaseController { - static values: { - selector: StringConstructor; - behavior: StringConstructor; - block: StringConstructor; - inline: StringConstructor; - }; - selectorValue: string; - behaviorValue: ScrollBehavior; - hasBehaviorValue: boolean; - blockValue: ScrollLogicalPosition; - hasBlockValue: boolean; - inlineValue: ScrollLogicalPosition; - hasInlineValue: boolean; - scroll(): void; -} +import { BaseController } from "./base_controller"; +export declare class ScrollToController extends BaseController { + static values: { + selector: StringConstructor; + behavior: StringConstructor; + block: StringConstructor; + inline: StringConstructor; + }; + selectorValue: string; + behaviorValue: ScrollBehavior; + hasBehaviorValue: boolean; + blockValue: ScrollLogicalPosition; + hasBlockValue: boolean; + inlineValue: ScrollLogicalPosition; + hasInlineValue: boolean; + scroll(): void; +} //# sourceMappingURL=scroll_to_controller.d.ts.map \ No newline at end of file diff --git a/dist/scroll_to_top_controller.d.ts b/dist/scroll_to_top_controller.d.ts index 67f20fa3..2ebf7f0b 100644 --- a/dist/scroll_to_top_controller.d.ts +++ b/dist/scroll_to_top_controller.d.ts @@ -1,10 +1,10 @@ -import { BaseController } from "./base_controller"; -export declare class ScrollToTopController extends BaseController { - static values: { - mode: StringConstructor; - }; - modeValue: "nearest" | "document"; - hasModeValue: boolean; - scroll(event?: Event): void; -} +import { BaseController } from "./base_controller"; +export declare class ScrollToTopController extends BaseController { + static values: { + mode: StringConstructor; + }; + modeValue: "nearest" | "document"; + hasModeValue: boolean; + scroll(event?: Event): void; +} //# sourceMappingURL=scroll_to_top_controller.d.ts.map \ No newline at end of file diff --git a/dist/self_destruct_controller.d.ts b/dist/self_destruct_controller.d.ts index cf629c55..24835487 100644 --- a/dist/self_destruct_controller.d.ts +++ b/dist/self_destruct_controller.d.ts @@ -1,11 +1,11 @@ -import { BaseController } from "./base_controller"; -export declare class SelfDestructController extends BaseController { - static values: { - seconds: NumberConstructor; - }; - readonly secondsValue: number; - timeout: null | ReturnType; - connect(): void; - disconnect(): void; -} +import { BaseController } from "./base_controller"; +export declare class SelfDestructController extends BaseController { + static values: { + seconds: NumberConstructor; + }; + readonly secondsValue: number; + timeout: null | ReturnType; + connect(): void; + disconnect(): void; +} //# sourceMappingURL=self_destruct_controller.d.ts.map \ No newline at end of file diff --git a/dist/sticky_controller.d.ts b/dist/sticky_controller.d.ts index d1b555aa..d428f4b4 100644 --- a/dist/sticky_controller.d.ts +++ b/dist/sticky_controller.d.ts @@ -1,16 +1,16 @@ -import { BaseController } from "./base_controller"; -export declare class StickyController extends BaseController { - static classes: string[]; - static values: { - mode: StringConstructor; - }; - readonly hasStuckClass: boolean; - readonly stuckClass: string; - readonly hasModeValue: "top" | "bottom"; - readonly modeValue: "top" | "bottom"; - _magicElement: HTMLDivElement | null; - get _mode(): "top" | "bottom"; - createMagicElement(): void; - connect(): void; -} +import { BaseController } from "./base_controller"; +export declare class StickyController extends BaseController { + static classes: string[]; + static values: { + mode: StringConstructor; + }; + readonly hasStuckClass: boolean; + readonly stuckClass: string; + readonly hasModeValue: "top" | "bottom"; + readonly modeValue: "top" | "bottom"; + _magicElement: HTMLDivElement | null; + get _mode(): "top" | "bottom"; + createMagicElement(): void; + connect(): void; +} //# sourceMappingURL=sticky_controller.d.ts.map \ No newline at end of file diff --git a/dist/stimulus-library.js b/dist/stimulus-library.js index 1277c43e..c14a28a3 100644 --- a/dist/stimulus-library.js +++ b/dist/stimulus-library.js @@ -1,2 +1,2 @@ -var e=require("stimulus"),t=require("dialog-polyfill"),n=require("camelcase");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function r(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(n){if("default"!==n){var i=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,i.get?i:{enumerable:!0,get:function(){return e[n]}})}}),t.default=e,t}var s=i(t),o=i(n);function a(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,i=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}var p=function(e){function t(t){var n;return n=e.call(this,t)||this,new Proxy(h(n),{get:function(e,t){var i=Reflect.get(e,t),r=h(n);if(function(e){switch(e){case"application":case"el":case"element":case"constructor":case"initialize":case"log":case"dispatch":case"data":case"valueDescriptorMap":case"identifier":return!1}return!(/^_.*?$/.test(e)||/^.*?Target(s)?$/.test(e)||/^.*?Value$/.test(e)||/^.*?ValueChanged$/.test(e)||/^.*?Class$/.test(e))}(t.toString())){if("function"==typeof i)return new Proxy(i,{apply:function(e,n,i){return r.log(t.toString(),{args:i}),Reflect.apply(e,n,i)}});n.log(t.toString())}return i}})||h(n)}u(t,e);var n=t.prototype;return n.dispatch=function(e,t,n){void 0===n&&(n={});var i=Object.assign({},{bubbles:!0,cancelable:!0,detail:{target:e}},n);i.detail.target&&(i.detail.target=e);var r=new CustomEvent(t,i);e.dispatchEvent(r)},n.log=function(e,t){if(void 0===t&&(t={}),this.application.debug){var n=console;n.groupCollapsed("%c"+this.identifier+" %c#"+e,"color: #3B82F6","color: unset"),n.log(c({element:this.element},t)),n.groupEnd()}},l(t,[{key:"el",get:function(){return this.element}}]),t}(e.Controller),m=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this._handleVisibility=this._handleVisibility.bind(this)},n.connect=function(){window.addEventListener("focus",this._handleVisibility),window.addEventListener("blur",this._handleVisibility),document.addEventListener("visibilitychange",this._handleVisibility),this._handleVisibility()},n.disconnect=function(){window.removeEventListener("focus",this._handleVisibility),window.removeEventListener("blur",this._handleVisibility),document.removeEventListener("visibilitychange",this._handleVisibility)},n.appear=function(){this.dispatch(this.el,"appearance:appear")},n.away=function(){this.dispatch(this.el,"appearance:away")},n._handleVisibility=function(){this._documentIsActive()?this.appear():this.away()},n._documentIsActive=function(){return"visible"==document.visibilityState&&document.hasFocus()},t}(p),g=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){this.loadContent()},n.loadContent=function(){var e=this,t=this,n=this.hasReplaceTarget?this.replaceTarget:this.el;fetch(this.endpointValue).then(function(e){return e.text()}).then(function(i){var r=document.createElement("div");if(r.innerHTML=i,e.hasSelectorValue){var s=r.querySelectorAll(e.selectorValue);n.replaceWith.apply(n,s)}else n.replaceWith.apply(n,r.children);t.dispatch(n,"ajax:success")}).catch(function(i){n.replaceWith(e._errorMessage),t.dispatch(n,"ajax:error")}).finally(function(){t.dispatch(n,"ajax:complete")})},l(t,[{key:"_errorMessage",get:function(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}}]),t}(p);g.targets=["replace"],g.values={endpoint:String,errorMessage:String,selector:String};var v=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this.handler=this.handler.bind(this)},n.connect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.addEventListener("change",e.handler)})},n.disconnect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.removeEventListener("change",e.handler)})},n.handler=function(e){this.dispatch(this.el,"submit")},t}(p);const b=(e,t)=>{const n=e[t];return"function"==typeof n?n:(...e)=>{}},y=(e,t,n)=>{let i=e;return!0===n?i=`${t.identifier}:${e}`:"string"==typeof n&&(i=`${n}:${e}`),i},E=(e,t,n)=>{const{bubbles:i,cancelable:r,composed:s}=t||{bubbles:!0,cancelable:!0,composed:!0};return t&&Object.assign(n,{originalEvent:t}),new CustomEvent(e,{bubbles:i,cancelable:r,composed:s,detail:n})},w={dispatchEvent:!0,eventPrefix:!0},C=(e,t={})=>{const{dispatchEvent:n,eventPrefix:i}=Object.assign({},w,t),r=(null==t?void 0:t.element)||e.element,s=e.disconnect.bind(e),o=new IntersectionObserver(t=>{const[s]=t;s.isIntersecting?(t=>{if(e.isVisible=!0,b(e,"appear").call(e,t),n){const n=y("appear",e,i),s=E(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s):e.isVisible&&(t=>{if(e.isVisible=!1,b(e,"disappear").call(e,t),n){const n=y("disappear",e,i),s=E(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s)},t),a=()=>{o.observe(r)},l=()=>{o.unobserve(r)};return Object.assign(e,{isVisible:!1,disconnect(){l(),s()}}),a(),[a,l]},k={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},V={debug:!1,logger:console};class T{constructor(e,t={}){var n,i,r;this.log=(e,t)=>{this.debug&&(this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${e}`,"color: #3B82F6","color: unset"),this.logger.log(Object.assign({controllerId:this.controllerId},t)),this.logger.groupEnd())},this.debug=null!==(i=null!==(n=null==t?void 0:t.debug)&&void 0!==n?n:e.application.stimulusUseDebug)&&void 0!==i?i:V.debug,this.logger=null!==(r=null==t?void 0:t.logger)&&void 0!==r?r:V.logger,this.controller=e,this.controllerId=e.element.id||e.element.dataset.id,this.controllerInitialize=e.initialize.bind(e),this.controllerConnect=e.connect.bind(e),this.controllerDisconnect=e.disconnect.bind(e)}}class S extends T{constructor(e,t={}){super(e,t),this.observe=()=>{this.targetElement.addEventListener("mouseenter",this.onEnter),this.targetElement.addEventListener("mouseleave",this.onLeave)},this.unobserve=()=>{this.targetElement.removeEventListener("mouseenter",this.onEnter),this.targetElement.removeEventListener("mouseleave",this.onLeave)},this.onEnter=()=>{b(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{b(this.controller,"mouseLeave").call(this.controller),this.log("mouseLeave",{hover:!1})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}class _ extends T{constructor(e,t={}){super(e,t),this.observe=()=>{try{this.observer.observe(this.targetElement,this.options)}catch(e){this.controller.application.handleError(e,"At a minimum, one of childList, attributes, and/or characterData must be true",{})}},this.unobserve=()=>{this.observer.disconnect()},this.mutation=e=>{b(this.controller,"mutate").call(this.controller,e),this.log("mutate",{entries:e})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.options=t,this.observer=new MutationObserver(this.mutation),this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}const x=e=>{const t=t=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:t};b(e,"windowResize").call(e,r)},n=e.disconnect.bind(e),i=()=>{window.addEventListener("resize",t),t()},r=()=>{window.removeEventListener("resize",t)};return Object.assign(e,{disconnect(){r(),n()}}),i(),[i,r]},L=(e,t=200)=>{let n=null;return function(){const i=arguments,r=this,s=()=>e.apply(r,i);n&&clearTimeout(n),n=setTimeout(s,t)}};var I=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var e=this.el;e.style.resize="none",e.style.boxSizing="border-box",e.addEventListener("input",this._handler),e.addEventListener("focus",this._handler),x(this),requestAnimationFrame(this._handler)},n.windowResize=function(){this._handler()},n._handler=function(){this.autosize(this.el)},n.autosize=function(e){var t=e.offsetHeight-e.clientHeight;e.style.height="auto",e.style.height=e.scrollHeight+t+"px"},t}(p),D=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this._updateCharCount=this._updateCharCount.bind(this)},n.connect=function(){this._updateCharCount(),this.inputTarget.addEventListener("input",this._updateCharCount)},n.disconnect=function(){this.inputTarget.removeEventListener("input",this._updateCharCount)},n._updateCharCount=function(){var e=this.inputTarget.value.length;this.outputTarget.innerText=e.toString(),this.hasErrorClass&&(this._isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n._isValidCount=function(e){var t=0,n=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(n=this.maxValue),e>=t&&e<=n},t}(p);D.targets=["input","output"],D.values={min:Number,max:Number},D.classes=["error"];var M=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this.toggle=this.toggle.bind(this),this.refresh=this.refresh.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e.hasSelectAllTarget&&(e.selectAllTarget.addEventListener("change",e.toggle),e.checkboxTargets.forEach(function(t){return t.addEventListener("change",e.refresh)}),e.refresh())})},n.disconnect=function(){var e=this;this.hasSelectAllTarget&&(this.selectAllTarget.removeEventListener("change",this.toggle),this.checkboxTargets.forEach(function(t){return t.removeEventListener("change",e.refresh)}))},n.toggle=function(e){e.preventDefault();var t=e.target;this.checkboxTargets.forEach(function(e){return e.checked=t.checked})},n.refresh=function(){var e=this.checkboxTargets.length,t=this.checked.length;this.selectAllTarget.checked=t>0,this.selectAllTarget.indeterminate=t>0&&t{new _(this,t)})(0,{element:this.el,childList:!0}),this.checkEmpty()},n.mutate=function(e){this.checkEmpty()},n.checkEmpty=function(){var e=this.el,t=this.children;0===t.length?(this._removeNotEmptyClasses(),this._addEmptyClasses(),this.dispatch(e,"dom:empty")):(this._addNotEmptyClasses(),this._removeEmptyClasses(),this.dispatch(e,"dom:not-empty",{detail:{count:t.length}}))},n._removeEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).remove.apply(e,this.emptyClasses)},n._addNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).add.apply(e,this.notEmptyClasses)},n._addEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).add.apply(e,this.emptyClasses)},n._removeNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).remove.apply(e,this.notEmptyClasses)},l(t,[{key:"emptyClasses",get:function(){return this.emptyClass.split(" ")}},{key:"notEmptyClasses",get:function(){return this.notEmptyClass.split(" ")}},{key:"children",get:function(){var e=this.el;return Array.from(this.hasScopeSelectorValue?e.querySelectorAll(this.scopeSelectorValue):e.children)}}]),t}(p);J.classes=["empty","notEmpty"],J.values={scopeSelector:String};var Y=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasEnablerTarget&&this.enablerTarget.checked?this.enableInputs():this.disableInputs()},n.disableInputs=function(){var e=this.hasClearValue&&this.clearValue;this.enableTargets.forEach(function(t,n){e&&(t.value=""),t.disabled=!0})},n.enableInputs=function(){this.enableTargets.forEach(function(e,t){e.disabled=!1})},t}(p);Y.targets=["enabler","enable"],Y.values={clear:Boolean};var G=function(e){function t(){return e.apply(this,arguments)||this}return u(t,e),t.prototype.connect=function(){var e=this,t=this.el;t.onerror=function(){e.hasPlaceholderValue?t.src=e.placeholderValue:t.style.display="none"}},t}(p);G.values={placeholder:String};var K=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this._clear=this._clear.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){if(!N(e.el))throw new Error("Expected controller to be mounted on a form element.");e.restoreOnLoad&&e.restore(),e.clearOnSubmit&&e.el.addEventListener("submit",e._clear)})},n.disconnect=function(){this.clearOnSubmit&&this.el.removeEventListener("submit",this._clear)},n._clear=function(){localStorage.removeItem(this.formIdentifier),this.dispatch(this.el,"form-save:cleared")},n.clear=function(e){null==e||e.preventDefault(),this._clear()},n.save=function(e){e.preventDefault(),localStorage.setItem(this.formIdentifier,JSON.stringify(this.formData[this.formIdentifier])),this.dispatch(this.el,"form-save:save:success")},n.restore=function(e){if(null==e||e.preventDefault(),localStorage.getItem(this.formIdentifier)){for(var t,n=JSON.parse(localStorage.getItem(this.formIdentifier)),i=f(this.formElements);!(t=i()).done;){var r=t.value;r.name in n&&(z(r)&&"checkbox"==r.type?r.checked=n[r.name]:z(r)&&"radio"==r.type?r.value==n[r.name]&&(r.checked=!0):r.value=n[r.name])}this.dispatch(this.el,"form-save:restore:success")}else this.dispatch(this.el,"form-save:restore:empty")},l(t,[{key:"formID",get:function(){if(this.hasIdValue)return this.idValue;var e=this.el.id;if(""!==e)return e;throw new Error("No ID value to uniquely identify this form. Please either specify data-"+this.identifier+"-id-value or give this form an 'id' attribute. ")}},{key:"formIdentifier",get:function(){return location.href+" "+this.formID}},{key:"formElements",get:function(){return this.el.elements}},{key:"formData",get:function(){for(var e,t,n=((e={})[this.formIdentifier]={},e),i=f(this.formElements);!(t=i()).done;){var r=t.value;r.name.length>0&&(z(r)&&"checkbox"==r.type?n[this.formIdentifier][r.name]=r.checked:z(r)&&"radio"==r.type?r.checked&&(n[this.formIdentifier][r.name]=r.value):n[this.formIdentifier][r.name]=r.value)}return n}},{key:"restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"clearOnSubmit",get:function(){return!this.hasClearOnSubmitValue||this.clearOnSubmitValue}}]),t}(p);K.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var Q=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){C(this,{threshold:this.threshold,element:this.el})},n.appear=function(e){this.dispatch(this.el,"intersection:appear",{detail:{element:this.el}})},n.disappear=function(e){this.dispatch(this.el,"intersection:disappear",{detail:{element:this.el}})},l(t,[{key:"threshold",get:function(){return this.hasThresholdValue?this.thresholdValue.split(",").map(function(e){return Number.parseFloat(e.trim())}).filter(function(e){return e>=0&&e<=1}):[0,1]}}]),t}(p);Q.values={threshold:String};var X,Z=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){if("IntersectionObserver"in window){var e=C(this,{element:this.el,threshold:.3});this.observe=e[0],this.unobserve=e[1]}else this.loadContent()},n.appear=function(e){e.target===this.el&&e.isIntersecting&&(this.loadContent(),this.unobserve&&this.unobserve())},t}(g),ee=function(e,t){var n=void 0===t?{}:t,i=n.behavior,s=void 0===i?"smooth":i,o=n.block,a=void 0===o?"start":o,l=n.inline,c=void 0===l?"nearest":l;try{var u=function(){e.scrollIntoView({behavior:s,block:a,inline:c})},h=function(){if("smooth"==s&&!te)return Promise.resolve(function(){try{return Promise.resolve(Promise.resolve().then(function(){return r(require("smoothscroll-polyfill"))})).then(function(e){X||(X=!0,(0,e.polyfill)())})}catch(e){return Promise.reject(e)}}()).then(function(){})}();return Promise.resolve(h&&h.then?h.then(u):u())}catch(e){return Promise.reject(e)}},te="scrollBehavior"in document.documentElement.style;function ne(e){if(!e)return null;var t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:ne(e.parentElement)||document.body}var ie=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._dialog=null,t}u(t,e);var n=t.prototype;return n.initialize=function(){this.open=this.open.bind(this),this.close=this.close.bind(this)},n.connect=function(){},n.open=function(){var e=this,t=this.el;if(!this._dialog){this._dialog=document.createElement("dialog");var n=document.createElement("img");n.className=this.imageClassName,n.src=this.src,n.srcset=this.srcSet,n.sizes=this.sizes,this._dialog.appendChild(n),t.insertAdjacentElement("afterend",this._dialog),s.default.registerDialog(this._dialog),this._dialog.className=this.modalClassName,this._dialog.showModal(),ee(this._dialog,{behavior:"smooth",block:"end"}).catch(function(){return e._dialog.scrollIntoView(!1)}),this._dialog.addEventListener("click",this.close),this._dialog.addEventListener("cancel",this.close),this._dialog.addEventListener("close",this.close)}},n.close=function(){var e=this;this._dialog&&(this._dialog.close(),this._dialog.remove(),this._dialog=null,ee(this.el,{behavior:"smooth",block:"end"}).catch(function(){return e.el.scrollIntoView(!1)}))},l(t,[{key:"src",get:function(){return this.hasSrcValue?this.srcValue:this.el.src}},{key:"srcSet",get:function(){return this.hasSrcSetValue?this.srcSetValue:this.el.srcset}},{key:"sizes",get:function(){return this.hasSizesValue?this.sizesValue:this.el.sizes}},{key:"modalClassName",get:function(){return this.hasModalClass?this.modalClass:"image-lightbox-dialog"}},{key:"imageClassName",get:function(){return this.hasImageClass?this.imageClass:"image-lightbox-image"}}]),t}(p);ie.values={src:String,srcSet:String,sizes:String},ie.classes=["modal","image"];var re=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this.handleInputs=this.handleInputs.bind(this)},n.connect=function(){var e=this;this.inputTargets.forEach(function(t){return t.addEventListener("change",e.handleInputs)})},n.disconnect=function(){var e=this;this.inputTargets.forEach(function(t){return t.removeEventListener("change",e.handleInputs)})},n.handleInputs=function(e){var t=this.inputTargets.reduce(function(e,t){return t.checked?e+1:e},0),n=e.target;t>this.maxValue?(e.preventDefault(),n.checked=!1,this.dispatch(n,"change"),this.dispatch(n,"limited-selection:too-many"),this.hasErrorTarget&&(this.errorTarget.innerHTML=this.messageValue)):(this.dispatch(n,"limited-selection:selection"),this.hasErrorTarget&&(this.errorTarget.innerHTML=""))},t}(p);re.targets=["input","error"],re.values={max:Number,message:String};var se=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){this.checkStructure()},n.add=function(e){null==e||e.preventDefault();var t=this.templateTarget.innerHTML.replace(/NEW_RECORD/g,this.generateID());this.targetTarget.insertAdjacentHTML(this.insertMode,t)},n.remove=function(e){e.preventDefault();var t=e.target.closest("."+this.wrapperClass);if(null==t)throw new Error("#remove was clicked from outside of a child record. Could not find an ancestor with class ."+this.wrapperClass);if("true"===t.dataset.newRecord)t.remove();else{t.style.display="none";var n=t.querySelector("input[name*='_destroy']");if(null==n)throw new Error("Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.");n.value="1"}},n.generateID=function(){return(new Date).getTime().toString()+Math.random().toString().slice(2)},n.checkStructure=function(){if(this.templateTarget.innerHTML.indexOf("NEW_RECORD"))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`")},l(t,[{key:"wrapperClass",get:function(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}},{key:"insertMode",get:function(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}}]),t}(p);se.targets=["target","template"],se.values={insertMode:String,wrapperClass:String};var oe=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this.checkPasswordsMatch=this.checkPasswordsMatch.bind(this)},n.connect=function(){var e=this;this.passwordTargets.forEach(function(t){return t.addEventListener("change",e.checkPasswordsMatch)})},n.disconnect=function(){var e=this;this.passwordTargets.forEach(function(t){return t.removeEventListener("change",e.checkPasswordsMatch)})},n.allPasswordsMatch=function(){var e=new Set(this.passwordTargets.map(function(e){return e.value}));return e.has("")||1==e.size},n.checkPasswordsMatch=function(){var e=this,t=this.el;this.allPasswordsMatch()?(this.dispatch(t,"password-confirm:match"),this.hasErrorClass&&this.passwordTargets.forEach(function(t){return t.classList.remove(e.errorClass)})):(this.dispatch(t,"password-confirm:no-match"),this.hasErrorClass&&this.passwordTargets.forEach(function(t){return t.classList.add(e.errorClass)}))},t}(p);oe.targets=["password"],oe.classes=["error"];var ae=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.peak=function(e){null==e||e.preventDefault(),this.passwordTarget.type="text"},n.hide=function(e){null==e||e.preventDefault(),this.passwordTarget.type="password"},n.toggle=function(e){null==e||e.preventDefault(),"password"===this.passwordTarget.type?this.peak():this.hide()},t}(p);ae.targets=["password"];var le=function(e){function t(){return e.apply(this,arguments)||this}return u(t,e),t.prototype.replace=function(e){var t=e.detail[0];if(t instanceof Node){var n=t.querySelector(this.selector);if(null==n)throw new Error('expected new form DOM with [data-controller="'+this.identifier+'"] to be present in returned payload');var i=this.el.parentNode;if(null==i)throw new Error("expected form to have a DOM parent, could not execute replaceChild");i.replaceChild(n,this.el)}else console.log("Unknown",t)},l(t,[{key:"selector",get:function(){return this.hasSelectorValue?this.selectorValue:'[data-controller~="'+this.identifier+'"]'}}]),t}(p);le.targets=[],le.values={selector:String};var ce=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this.messageReceived=this.messageReceived.bind(this)},n.connect=function(){window.addEventListener("message",this.messageReceived)},n.disconnect=function(){window.removeEventListener("message",this.messageReceived)},n.messageReceived=function(e){var t=e.data;t.hasOwnProperty("name")&&"iframe-body"===t.name&&t.hasOwnProperty("height")&&this.resize(t.height)},n.resize=function(e){this.el.style.height=e+"px"},t}(p),ue=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){var e,t,n;window.self!==window.top&&(x(this),t={},null===(n=(e=this).constructor.debounces)||void 0===n||n.forEach(n=>{if("string"==typeof n&&(e[n]=L(e[n],null==t?void 0:t.wait)),"object"==typeof n){const{name:i,wait:r}=n;if(!i)return;e[i]=L(e[i],r||(null==t?void 0:t.wait))}}),this.postUpdate())},n.windowResize=function(e){this.postUpdate()},n.postUpdate=function(){var e={name:"iframe-body",height:this.getHeight()};window.parent.postMessage(e,"*")},n.getHeight=function(){var e=document.body,t=document.documentElement;return Math.max(e.scrollHeight,e.offsetHeight,t.clientHeight,t.scrollHeight,t.offsetHeight)},t}(p);ue.debounces=["postUpdate"];var he=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n._cleanupSelf=function(){this.cleanup(this.el)},n.cleanup=function(e){var t,n,i,r=this;e.dataset.controller=(null==(t=e.dataset.controller)?void 0:t.replaceAll(new RegExp("(s|^)"+this.identifier+"(s|$)","g"),""))||"",""==e.dataset.controller&&delete e.dataset.controller;var s=new RegExp("(s|^)"+this.identifier+"\\..+?(s|$)","g");e.dataset.target=(null==(n=e.dataset.target)?void 0:n.replaceAll(s,""))||"",delete e.dataset[o.default(this.identifier+"-target")],""==e.dataset.target&&delete e.dataset.target,e.dataset.action=(null==(i=e.dataset.target)?void 0:i.replaceAll(s,""))||"",delete e.dataset[o.default(this.identifier+"-action")],""==e.dataset.action&&delete e.dataset.action;var a=this.constructor.values;a&&Object.keys(a).forEach(function(t){return delete e.dataset[o.default(r.identifier+"-"+t+"-value")]});var l=this.constructor.classes;l&&Object.keys(l).forEach(function(t){return delete e.dataset[o.default(r.identifier+"-"+t+"-class")]})},t}(p),de=function(e){function t(){return e.apply(this,arguments)||this}return u(t,e),t.prototype.connect=function(){var e=this;requestAnimationFrame(function(){ee(e.el,{behavior:e.hasBehaviorValue?e.behaviorValue:"smooth",block:e.hasBlockValue?e.blockValue:"center",inline:e.hasInlineValue?e.inlineValue:"center"}).catch(function(){return e.el.scrollIntoView()}),e._cleanupSelf()})},t}(he);de.values={behavior:String,block:String,inline:String};var fe=function(e){function t(){return e.apply(this,arguments)||this}return u(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ne(this.el))&&ee(t,{behavior:"smooth",block:"end"}).catch(function(){return t.scrollIntoView(!1)})},t}(p);fe.values={mode:String};var pe=function(e){function t(){return e.apply(this,arguments)||this}return u(t,e),t.prototype.scroll=function(){var e=document.querySelector(this.selectorValue);e?ee(e,{behavior:this.hasBehaviorValue?this.behaviorValue:"smooth",block:this.hasBlockValue?this.blockValue:"center",inline:this.hasInlineValue?this.inlineValue:"center"}).catch(function(){return e.scrollIntoView()}):console.warn("Could not find target for '"+this.selectorValue+"'")},t}(p);pe.values={selector:String,behavior:String,block:String,inline:String};var me=function(e){function t(){return e.apply(this,arguments)||this}return u(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ne(this.el))&&ee(t,{behavior:"smooth",block:"start"}).catch(function(){return t.scrollIntoView(!1)})},t}(p);me.values={mode:String};var ge=function(e){function t(){var t;return(t=e.apply(this,arguments)||this).timeout=null,t}u(t,e);var n=t.prototype;return n.connect=function(){var e=this;requestAnimationFrame(function(){e.timeout=setTimeout(function(){return e.el.remove()},1e3*e.secondsValue)})},n.disconnect=function(){this.timeout&&clearTimeout(this.timeout)},t}(p);ge.values={seconds:Number};var ve=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._magicElement=null,t}u(t,e);var n=t.prototype;return n.createMagicElement=function(){if(null===this._magicElement)switch(this._magicElement=document.createElement("div"),this._mode){case"top":this.el.insertAdjacentElement("beforebegin",this._magicElement);break;case"bottom":this.el.insertAdjacentElement("afterend",this._magicElement)}},n.connect=function(){var e=this,t=this.el;this.createMagicElement(),new IntersectionObserver(function(n){n.forEach(function(n){n.target===e._magicElement&&(0===n.intersectionRatio?t.classList.add(e.hasStuckClass?e.stuckClass:"stuck"):1===n.intersectionRatio&&t.classList.remove(e.hasStuckClass?e.stuckClass:"stuck"))})},{threshold:[0,1]}).observe(this._magicElement)},l(t,[{key:"_mode",get:function(){return this.hasModeValue?this.modeValue:"top"}}]),t}(p);ve.classes=["stuck"],ve.values={mode:String};var be=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){var e=this;if(!this.hasInsertValue)throw new Error("`insert` value was not specified");requestAnimationFrame(function(){e.hasImmediateValue&&e.immediateValue&&e.execute()})},n.execute=function(e){null==e||e.preventDefault();var t=this.el,n=document.querySelector(this.targetValue);if(null!=n){var i=t.cloneNode(!0);switch(this.cleanup(i),this.insertValue){case"beforebegin":case"beforeend":case"afterend":case"afterbegin":n.insertAdjacentHTML(this.insertValue,i.outerHTML);break;case"replaceOuter":n.outerHTML=i.outerHTML;break;case"replaceInner":n.innerHTML=i.outerHTML;break;case"prepend":n.insertAdjacentHTML("afterbegin",i.outerHTML);break;case"append":n.insertAdjacentHTML("beforeend",i.outerHTML);break;default:throw new Error("`insert` value was not specified")}t.remove()}else this.dispatch(t,"teleport:error")},t}(he);be.values={target:String,insert:String,immediate:Boolean};var ye=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){var e=this;if(!this.hasClassValue)throw new Error("data-toggle-class-class-value must not be empty");(this.hasMouseEnterValue||this.hasMouseLeaveValue)&&((e,t={})=>{new S(this,t)})(),this.hasClickAwayValue&&this.clickAwayValue&&((e,t={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},k,t),o=r=>{const o=(null==t?void 0:t.element)||e.element;if(!(o.contains(r.target)||!function(e){const t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return t.top<=n&&t.top+t.height>=0&&t.left<=i&&t.left+t.width>=0}(o)&&n)&&(e.clickOutside&&e.clickOutside(r),i)){const t=y("click:outside",e,s),n=E(t,r,{controller:e});o.dispatchEvent(n)}},a=e.disconnect.bind(e);Object.assign(e,{disconnect(){null==r||r.forEach(e=>{window.removeEventListener(e,o,!1)}),a()}}),null==r||r.forEach(e=>{window.addEventListener(e,o,!1)})})(this),requestAnimationFrame(function(){e.hasInitialValue&&e.toggleTargets.forEach("on"===e.initialValue?function(t){return e.elementOn(t)}:function(t){return e.elementOff(t)})})},n.clickOutside=function(){var e=this;this.toggleTargets.forEach(function(t){e.elementWasToggled(t)&&(e.elementToggleStatus(t),e.elementToggle(t))})},n.mouseEnter=function(){if(this.hasMouseEnterValue)switch(this.mouseEnterValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}},n.mouseLeave=function(){if(this.hasMouseLeaveValue)switch(this.mouseLeaveValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}},n.on=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementOn(e)})},n.off=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementOff(e)})},n.toggle=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementToggle(e)})},n.elementWasToggled=function(e){return"true"==e.dataset.toggled},n.elementToggleStatus=function(e){this.elementWasToggled(e)?delete e.dataset.toggled:e.dataset.toggled="true"},n.elementToggle=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t)})},n.elementOn=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t,!0)})},n.elementOff=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t,!1)})},t}(p);function Ee(e){return"TURBO-FRAME"==e.nodeName}ye.targets=["toggle"],ye.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var we=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.toggle=function(e){null==e||e.preventDefault();var t=this._getFrame().src;null==t||t!==this._getSrc()?this._setSrc():this._clear()},n.setSrc=function(e){null==e||e.preventDefault(),this._setSrc()},n.clear=function(e){null==e||e.preventDefault(),this._clear()},n._setSrc=function(){var e=this._getFrame();this.hasLoadingMessageValue&&(e.innerHTML=this.loadingMessageValue),e.src=this._getSrc()},n._clear=function(){var e=this._getFrame();e.src="",e.innerHTML=""},n._getFrame=function(){var e=document.getElementById(""+this.frameIdValue);if(null==e)throw new Error("Could not find frame with ID '"+this.frameIdValue+"'");if(Ee(e))return e;throw new Error("Element targeted by ID '"+this.frameIdValue+"'")},n._getSrc=function(){var e=this.el;if(this.hasSrcValue)return this.srcValue;if(A(e))return e.href;throw new Error("No link given to drive frame to")},t}(p);we.values={frameId:String,src:String,loadingMessage:String};var Ce=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._timeoutHandle=null,t}u(t,e);var n=t.prototype;return n.initialize=function(){this.refresh=this.refresh.bind(this)},n.connect=function(){var e=this,t=this.el;if(!Ee(t))throw new Error("Expected controller to be mounted on a element.");if(t.src)throw new Error("The provided element has no `src` attribute.");this.poll&&requestAnimationFrame(function(){return e._timeoutHandle=setTimeout(function(){return e.refresh()},e.intervalValue)})},n.disconnect=function(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)},n.refresh=function(e){null==e||e.preventDefault();var t=this.el;t.src=t.src},l(t,[{key:"poll",get:function(){return!!this.hasPollValue&&this.pollValue}}]),t}(p);Ce.values={interval:Number,poll:Boolean};var ke=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this.updateWordCount=this.updateWordCount.bind(this)},n.connect=function(){this.updateWordCount(),this.inputTarget.addEventListener("input",this.updateWordCount)},n.disconnect=function(){this.inputTarget.removeEventListener("input",this.updateWordCount)},n.updateWordCount=function(){var e=0,t=this.inputTarget.value.match(/\S+/g);this.outputTarget.innerText=(e=t&&t.length||0).toString(),this.hasErrorClass&&(this.isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n.isValidCount=function(e){var t=0,n=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(n=this.maxValue),e>=t&&e<=n},t}(p);ke.targets=["input","output"],ke.values={min:Number,max:Number},ke.classes=["error"],exports.AppearanceController=m,exports.AsyncBlockController=g,exports.AutoSubmitFormController=v,exports.AutosizeController=I,exports.CharCountController=D,exports.CheckboxSelectAllController=M,exports.ClipboardController=O,exports.ConfirmController=R,exports.ConfirmNavigationController=F,exports.DebugController=q,exports.DetectDirtyController=B,exports.DisableInputsController=W,exports.DisableWithController=$,exports.DismissableController=U,exports.EmptyDomController=J,exports.EnableInputsController=Y,exports.FallbackImageController=G,exports.FormSaveController=K,exports.IntersectionController=Q,exports.LazyBlockController=Z,exports.LightboxImageController=ie,exports.LimitedSelectionCheckboxesController=re,exports.NestedFormController=se,exports.PasswordConfirmController=oe,exports.PasswordPeekController=ae,exports.RemoteFormController=le,exports.ResponsiveIframeBodyController=ue,exports.ResponsiveIframeWrapperController=ce,exports.ScrollIntoFocusController=de,exports.ScrollToBottomController=fe,exports.ScrollToController=pe,exports.ScrollToTopController=me,exports.SelfDestructController=ge,exports.StickyController=ve,exports.TeleportController=be,exports.ToggleClassController=ye,exports.TurboFrameRCController=we,exports.TurboFrameRefreshController=Ce,exports.WordCountController=ke; +var e=require("stimulus"),t=require("lodash-es/get"),n=require("lodash-es/set"),i=require("dialog-polyfill"),r=require("camelcase");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(n){if("default"!==n){var i=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,i.get?i:{enumerable:!0,get:function(){return e[n]}})}}),t.default=e,t}var a=s(t),l=s(n),c=s(i),u=s(r);function h(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,i=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}var b=function(e){function t(t){var n;return n=e.call(this,t)||this,new Proxy(m(n),{get:function(e,t){var i=Reflect.get(e,t),r=m(n);if(function(e){switch(e){case"application":case"el":case"element":case"constructor":case"initialize":case"log":case"dispatch":case"data":case"valueDescriptorMap":case"identifier":return!1}return!(/^_.*?$/.test(e)||/^.*?Target(s)?$/.test(e)||/^.*?Value$/.test(e)||/^.*?ValueChanged$/.test(e)||/^.*?Class$/.test(e))}(t.toString())){if("function"==typeof i)return new Proxy(i,{apply:function(e,n,i){return r.log(t.toString(),{args:i}),Reflect.apply(e,n,i)}});n.log(t.toString())}return i}})||m(n)}p(t,e);var n=t.prototype;return n.dispatch=function(e,t,n){void 0===n&&(n={});var i=Object.assign({},{bubbles:!0,cancelable:!0,detail:{target:e}},n);i.detail.target&&(i.detail.target=e);var r=new CustomEvent(t,i);e.dispatchEvent(r)},n.log=function(e,t){if(void 0===t&&(t={}),this.application.debug){var n=console;n.groupCollapsed("%c"+this.identifier+" %c#"+e,"color: #3B82F6","color: unset"),n.log(f({element:this.element},t)),n.groupEnd()}},d(t,[{key:"el",get:function(){return this.element}}]),t}(e.Controller),y=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this._handleVisibility=this._handleVisibility.bind(this)},n.connect=function(){window.addEventListener("focus",this._handleVisibility),window.addEventListener("blur",this._handleVisibility),document.addEventListener("visibilitychange",this._handleVisibility),this._handleVisibility()},n.disconnect=function(){window.removeEventListener("focus",this._handleVisibility),window.removeEventListener("blur",this._handleVisibility),document.removeEventListener("visibilitychange",this._handleVisibility)},n.appear=function(){this.dispatch(this.el,"appearance:appear")},n.away=function(){this.dispatch(this.el,"appearance:away")},n._handleVisibility=function(){this._documentIsActive()?this.appear():this.away()},n._documentIsActive=function(){return"visible"==document.visibilityState&&document.hasFocus()},t}(b),E=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){this.loadContent()},n.loadContent=function(){var e=this,t=this,n=this.hasReplaceTarget?this.replaceTarget:this.el;fetch(this.endpointValue).then(function(e){return e.text()}).then(function(i){var r=document.createElement("div");if(r.innerHTML=i,e.hasSelectorValue){var s=r.querySelectorAll(e.selectorValue);n.replaceWith.apply(n,s)}else n.replaceWith.apply(n,r.children);t.dispatch(n,"ajax:success")}).catch(function(i){n.replaceWith(e._errorMessage),t.dispatch(n,"ajax:error")}).finally(function(){t.dispatch(n,"ajax:complete")})},d(t,[{key:"_errorMessage",get:function(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}}]),t}(b);E.targets=["replace"],E.values={endpoint:String,errorMessage:String,selector:String};var w=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this.handler=this.handler.bind(this)},n.connect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.addEventListener("change",e.handler)})},n.disconnect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.removeEventListener("change",e.handler)})},n.handler=function(e){this.dispatch(this.el,"submit")},t}(b);const C=(e,t)=>{const n=e[t];return"function"==typeof n?n:(...e)=>{}},k=(e,t,n)=>{let i=e;return!0===n?i=`${t.identifier}:${e}`:"string"==typeof n&&(i=`${n}:${e}`),i},V=(e,t,n)=>{const{bubbles:i,cancelable:r,composed:s}=t||{bubbles:!0,cancelable:!0,composed:!0};return t&&Object.assign(n,{originalEvent:t}),new CustomEvent(e,{bubbles:i,cancelable:r,composed:s,detail:n})},_={dispatchEvent:!0,eventPrefix:!0},T=(e,t={})=>{const{dispatchEvent:n,eventPrefix:i}=Object.assign({},_,t),r=(null==t?void 0:t.element)||e.element,s=e.disconnect.bind(e),o=new IntersectionObserver(t=>{const[s]=t;s.isIntersecting?(t=>{if(e.isVisible=!0,C(e,"appear").call(e,t),n){const n=k("appear",e,i),s=V(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s):e.isVisible&&(t=>{if(e.isVisible=!1,C(e,"disappear").call(e,t),n){const n=k("disappear",e,i),s=V(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s)},t),a=()=>{o.observe(r)},l=()=>{o.unobserve(r)};return Object.assign(e,{isVisible:!1,disconnect(){l(),s()}}),a(),[a,l]},S={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},L={debug:!1,logger:console};class x{constructor(e,t={}){var n,i,r;this.log=(e,t)=>{this.debug&&(this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${e}`,"color: #3B82F6","color: unset"),this.logger.log(Object.assign({controllerId:this.controllerId},t)),this.logger.groupEnd())},this.debug=null!==(i=null!==(n=null==t?void 0:t.debug)&&void 0!==n?n:e.application.stimulusUseDebug)&&void 0!==i?i:L.debug,this.logger=null!==(r=null==t?void 0:t.logger)&&void 0!==r?r:L.logger,this.controller=e,this.controllerId=e.element.id||e.element.dataset.id,this.controllerInitialize=e.initialize.bind(e),this.controllerConnect=e.connect.bind(e),this.controllerDisconnect=e.disconnect.bind(e)}}class I extends x{constructor(e,t={}){super(e,t),this.observe=()=>{this.targetElement.addEventListener("mouseenter",this.onEnter),this.targetElement.addEventListener("mouseleave",this.onLeave)},this.unobserve=()=>{this.targetElement.removeEventListener("mouseenter",this.onEnter),this.targetElement.removeEventListener("mouseleave",this.onLeave)},this.onEnter=()=>{C(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{C(this.controller,"mouseLeave").call(this.controller),this.log("mouseLeave",{hover:!1})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}class D extends x{constructor(e,t={}){super(e,t),this.observe=()=>{try{this.observer.observe(this.targetElement,this.options)}catch(e){this.controller.application.handleError(e,"At a minimum, one of childList, attributes, and/or characterData must be true",{})}},this.unobserve=()=>{this.observer.disconnect()},this.mutation=e=>{C(this.controller,"mutate").call(this.controller,e),this.log("mutate",{entries:e})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.options=t,this.observer=new MutationObserver(this.mutation),this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}const O=e=>{const t=t=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:t};C(e,"windowResize").call(e,r)},n=e.disconnect.bind(e),i=()=>{window.addEventListener("resize",t),t()},r=()=>{window.removeEventListener("resize",t)};return Object.assign(e,{disconnect(){r(),n()}}),i(),[i,r]},M=(e,t=200)=>{let n=null;return function(){const i=arguments,r=this,s=()=>e.apply(r,i);n&&clearTimeout(n),n=setTimeout(s,t)}};var A=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var e=this.el;e.style.resize="none",e.style.boxSizing="border-box",e.addEventListener("input",this._handler),e.addEventListener("focus",this._handler),O(this),requestAnimationFrame(this._handler)},n.windowResize=function(){this._handler()},n._handler=function(){this.autosize(this.el)},n.autosize=function(e){var t=e.offsetHeight-e.clientHeight;e.style.height="auto",e.style.height=e.scrollHeight+t+"px"},t}(b),N=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this._updateCharCount=this._updateCharCount.bind(this)},n.connect=function(){this._updateCharCount(),this.inputTarget.addEventListener("input",this._updateCharCount)},n.disconnect=function(){this.inputTarget.removeEventListener("input",this._updateCharCount)},n._updateCharCount=function(){var e=this.inputTarget.value.length;this.outputTarget.innerText=e.toString(),this.hasErrorClass&&(this._isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n._isValidCount=function(e){var t=0,n=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(n=this.maxValue),e>=t&&e<=n},t}(b);N.targets=["input","output"],N.values={min:Number,max:Number},N.classes=["error"];var z=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this.toggle=this.toggle.bind(this),this.refresh=this.refresh.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e.hasSelectAllTarget&&(e.selectAllTarget.addEventListener("change",e.toggle),e.checkboxTargets.forEach(function(t){return t.addEventListener("change",e.refresh)}),e.refresh())})},n.disconnect=function(){var e=this;this.hasSelectAllTarget&&(this.selectAllTarget.removeEventListener("change",this.toggle),this.checkboxTargets.forEach(function(t){return t.removeEventListener("change",e.refresh)}))},n.toggle=function(e){e.preventDefault();var t=e.target;this.checkboxTargets.forEach(function(e){return e.checked=t.checked})},n.refresh=function(){var e=this.checkboxTargets.length,t=this.checked.length;this.selectAllTarget.checked=t>0,this.selectAllTarget.indeterminate=t>0&&t{new D(this,t)})(0,{element:this.el,childList:!0}),this.checkEmpty()},n.mutate=function(e){this.checkEmpty()},n.checkEmpty=function(){var e=this.el,t=this.children;0===t.length?(this._removeNotEmptyClasses(),this._addEmptyClasses(),this.dispatch(e,"dom:empty")):(this._addNotEmptyClasses(),this._removeEmptyClasses(),this.dispatch(e,"dom:not-empty",{detail:{count:t.length}}))},n._removeEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).remove.apply(e,this.emptyClasses)},n._addNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).add.apply(e,this.notEmptyClasses)},n._addEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).add.apply(e,this.emptyClasses)},n._removeNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).remove.apply(e,this.notEmptyClasses)},d(t,[{key:"emptyClasses",get:function(){return this.emptyClass.split(" ")}},{key:"notEmptyClasses",get:function(){return this.notEmptyClass.split(" ")}},{key:"children",get:function(){var e=this.el;return Array.from(this.hasScopeSelectorValue?e.querySelectorAll(this.scopeSelectorValue):e.children)}}]),t}(b);X.classes=["empty","notEmpty"],X.values={scopeSelector:String};var Z=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasEnablerTarget&&this.enablerTarget.checked?this.enableInputs():this.disableInputs()},n.disableInputs=function(){var e=this.hasClearValue&&this.clearValue;this.enableTargets.forEach(function(t,n){e&&(t.value=""),t.disabled=!0})},n.enableInputs=function(){this.enableTargets.forEach(function(e,t){e.disabled=!1})},t}(b);Z.targets=["enabler","enable"],Z.values={clear:Boolean};var ee=function(e){function t(){return e.apply(this,arguments)||this}return p(t,e),t.prototype.connect=function(){var e=this,t=this.el;t.onerror=function(){e.hasPlaceholderValue?t.src=e.placeholderValue:t.style.display="none"}},t}(b);ee.values={placeholder:String};var te=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this._clear=this._clear.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){if(!j(e.el))throw new Error("Expected controller to be mounted on a form element.");e.restoreOnLoad&&e.restore(),e.clearOnSubmit&&e.el.addEventListener("submit",e._clear)})},n.disconnect=function(){this.clearOnSubmit&&this.el.removeEventListener("submit",this._clear)},n._clear=function(){localStorage.removeItem(this.formIdentifier),this.dispatch(this.el,"form-save:cleared")},n.clear=function(e){null==e||e.preventDefault(),this._clear()},n.save=function(e){e.preventDefault(),localStorage.setItem(this.formIdentifier,JSON.stringify(this.formData[this.formIdentifier])),this.dispatch(this.el,"form-save:save:success")},n.restore=function(e){if(null==e||e.preventDefault(),localStorage.getItem(this.formIdentifier)){for(var t,n=JSON.parse(localStorage.getItem(this.formIdentifier)),i=v(this.formElements);!(t=i()).done;){var r=t.value;r.name in n&&(R(r)&&"checkbox"==r.type?r.checked=n[r.name]:R(r)&&"radio"==r.type?r.value==n[r.name]&&(r.checked=!0):r.value=n[r.name])}this.dispatch(this.el,"form-save:restore:success")}else this.dispatch(this.el,"form-save:restore:empty")},d(t,[{key:"formID",get:function(){if(this.hasIdValue)return this.idValue;var e=this.el.id;if(""!==e)return e;throw new Error("No ID value to uniquely identify this form. Please either specify data-"+this.identifier+"-id-value or give this form an 'id' attribute. ")}},{key:"formIdentifier",get:function(){return location.href+" "+this.formID}},{key:"formElements",get:function(){return this.el.elements}},{key:"formData",get:function(){for(var e,t,n=((e={})[this.formIdentifier]={},e),i=v(this.formElements);!(t=i()).done;){var r=t.value;r.name.length>0&&(R(r)&&"checkbox"==r.type?n[this.formIdentifier][r.name]=r.checked:R(r)&&"radio"==r.type?r.checked&&(n[this.formIdentifier][r.name]=r.value):n[this.formIdentifier][r.name]=r.value)}return n}},{key:"restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"clearOnSubmit",get:function(){return!this.hasClearOnSubmitValue||this.clearOnSubmitValue}}]),t}(b);te.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var ne=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){T(this,{threshold:this.threshold,element:this.el})},n.appear=function(e){this.dispatch(this.el,"intersection:appear",{detail:{element:this.el}})},n.disappear=function(e){this.dispatch(this.el,"intersection:disappear",{detail:{element:this.el}})},d(t,[{key:"threshold",get:function(){return this.hasThresholdValue?this.thresholdValue.split(",").map(function(e){return Number.parseFloat(e.trim())}).filter(function(e){return e>=0&&e<=1}):[0,1]}}]),t}(b);ne.values={threshold:String};var ie,re=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){if("IntersectionObserver"in window){var e=T(this,{element:this.el,threshold:.3});this.observe=e[0],this.unobserve=e[1]}else this.loadContent()},n.appear=function(e){e.target===this.el&&e.isIntersecting&&(this.loadContent(),this.unobserve&&this.unobserve())},t}(E),se=function(e,t){var n=void 0===t?{}:t,i=n.behavior,r=void 0===i?"smooth":i,s=n.block,a=void 0===s?"start":s,l=n.inline,c=void 0===l?"nearest":l;try{var u=function(){e.scrollIntoView({behavior:r,block:a,inline:c})},h=function(){if("smooth"==r&&!oe)return Promise.resolve(function(){try{return Promise.resolve(Promise.resolve().then(function(){return o(require("smoothscroll-polyfill"))})).then(function(e){ie||(ie=!0,(0,e.polyfill)())})}catch(e){return Promise.reject(e)}}()).then(function(){})}();return Promise.resolve(h&&h.then?h.then(u):u())}catch(e){return Promise.reject(e)}},oe="scrollBehavior"in document.documentElement.style;function ae(e){if(!e)return null;var t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:ae(e.parentElement)||document.body}var le=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._dialog=null,t}p(t,e);var n=t.prototype;return n.initialize=function(){this.open=this.open.bind(this),this.close=this.close.bind(this)},n.connect=function(){},n.open=function(){var e=this,t=this.el;if(!this._dialog){this._dialog=document.createElement("dialog");var n=document.createElement("img");n.className=this.imageClassName,n.src=this.src,n.srcset=this.srcSet,n.sizes=this.sizes,this._dialog.appendChild(n),t.insertAdjacentElement("afterend",this._dialog),c.default.registerDialog(this._dialog),this._dialog.className=this.modalClassName,this._dialog.showModal(),se(this._dialog,{behavior:"smooth",block:"end"}).catch(function(){return e._dialog.scrollIntoView(!1)}),this._dialog.addEventListener("click",this.close),this._dialog.addEventListener("cancel",this.close),this._dialog.addEventListener("close",this.close)}},n.close=function(){var e=this;this._dialog&&(this._dialog.close(),this._dialog.remove(),this._dialog=null,se(this.el,{behavior:"smooth",block:"end"}).catch(function(){return e.el.scrollIntoView(!1)}))},d(t,[{key:"src",get:function(){return this.hasSrcValue?this.srcValue:this.el.src}},{key:"srcSet",get:function(){return this.hasSrcSetValue?this.srcSetValue:this.el.srcset}},{key:"sizes",get:function(){return this.hasSizesValue?this.sizesValue:this.el.sizes}},{key:"modalClassName",get:function(){return this.hasModalClass?this.modalClass:"image-lightbox-dialog"}},{key:"imageClassName",get:function(){return this.hasImageClass?this.imageClass:"image-lightbox-image"}}]),t}(b);le.values={src:String,srcSet:String,sizes:String},le.classes=["modal","image"];var ce=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this.handleInputs=this.handleInputs.bind(this)},n.connect=function(){var e=this;this.inputTargets.forEach(function(t){return t.addEventListener("change",e.handleInputs)})},n.disconnect=function(){var e=this;this.inputTargets.forEach(function(t){return t.removeEventListener("change",e.handleInputs)})},n.handleInputs=function(e){var t=this.inputTargets.reduce(function(e,t){return t.checked?e+1:e},0),n=e.target;t>this.maxValue?(e.preventDefault(),n.checked=!1,this.dispatch(n,"change"),this.dispatch(n,"limited-selection:too-many"),this.hasErrorTarget&&(this.errorTarget.innerHTML=this.messageValue)):(this.dispatch(n,"limited-selection:selection"),this.hasErrorTarget&&(this.errorTarget.innerHTML=""))},t}(b);ce.targets=["input","error"],ce.values={max:Number,message:String};var ue=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){this.checkStructure()},n.add=function(e){null==e||e.preventDefault();var t=this.templateTarget.innerHTML.replace(/NEW_RECORD/g,this.generateID());this.targetTarget.insertAdjacentHTML(this.insertMode,t)},n.remove=function(e){e.preventDefault();var t=e.target.closest("."+this.wrapperClass);if(null==t)throw new Error("#remove was clicked from outside of a child record. Could not find an ancestor with class ."+this.wrapperClass);if("true"===t.dataset.newRecord)t.remove();else{t.style.display="none";var n=t.querySelector("input[name*='_destroy']");if(null==n)throw new Error("Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.");n.value="1"}},n.generateID=function(){return(new Date).getTime().toString()+Math.random().toString().slice(2)},n.checkStructure=function(){if(this.templateTarget.innerHTML.indexOf("NEW_RECORD"))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`")},d(t,[{key:"wrapperClass",get:function(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}},{key:"insertMode",get:function(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}}]),t}(b);ue.targets=["target","template"],ue.values={insertMode:String,wrapperClass:String};var he=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this.checkPasswordsMatch=this.checkPasswordsMatch.bind(this)},n.connect=function(){var e=this;this.passwordTargets.forEach(function(t){return t.addEventListener("change",e.checkPasswordsMatch)})},n.disconnect=function(){var e=this;this.passwordTargets.forEach(function(t){return t.removeEventListener("change",e.checkPasswordsMatch)})},n.allPasswordsMatch=function(){var e=new Set(this.passwordTargets.map(function(e){return e.value}));return e.has("")||1==e.size},n.checkPasswordsMatch=function(){var e=this,t=this.el;this.allPasswordsMatch()?(this.dispatch(t,"password-confirm:match"),this.hasErrorClass&&this.passwordTargets.forEach(function(t){return t.classList.remove(e.errorClass)})):(this.dispatch(t,"password-confirm:no-match"),this.hasErrorClass&&this.passwordTargets.forEach(function(t){return t.classList.add(e.errorClass)}))},t}(b);he.targets=["password"],he.classes=["error"];var de=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.peak=function(e){null==e||e.preventDefault(),this.passwordTarget.type="text"},n.hide=function(e){null==e||e.preventDefault(),this.passwordTarget.type="password"},n.toggle=function(e){null==e||e.preventDefault(),"password"===this.passwordTarget.type?this.peak():this.hide()},t}(b);de.targets=["password"];var fe=function(e){function t(){return e.apply(this,arguments)||this}return p(t,e),t.prototype.replace=function(e){var t=e.detail[0];if(t instanceof Node){var n=t.querySelector(this.selector);if(null==n)throw new Error('expected new form DOM with [data-controller="'+this.identifier+'"] to be present in returned payload');var i=this.el.parentNode;if(null==i)throw new Error("expected form to have a DOM parent, could not execute replaceChild");i.replaceChild(n,this.el)}else console.log("Unknown",t)},d(t,[{key:"selector",get:function(){return this.hasSelectorValue?this.selectorValue:'[data-controller~="'+this.identifier+'"]'}}]),t}(b);fe.targets=[],fe.values={selector:String};var pe=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this.messageReceived=this.messageReceived.bind(this)},n.connect=function(){window.addEventListener("message",this.messageReceived)},n.disconnect=function(){window.removeEventListener("message",this.messageReceived)},n.messageReceived=function(e){var t=e.data;t.hasOwnProperty("name")&&"iframe-body"===t.name&&t.hasOwnProperty("height")&&this.resize(t.height)},n.resize=function(e){this.el.style.height=e+"px"},t}(b),me=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){var e,t,n;window.self!==window.top&&(O(this),t={},null===(n=(e=this).constructor.debounces)||void 0===n||n.forEach(n=>{if("string"==typeof n&&(e[n]=M(e[n],null==t?void 0:t.wait)),"object"==typeof n){const{name:i,wait:r}=n;if(!i)return;e[i]=M(e[i],r||(null==t?void 0:t.wait))}}),this.postUpdate())},n.windowResize=function(e){this.postUpdate()},n.postUpdate=function(){var e={name:"iframe-body",height:this.getHeight()};window.parent.postMessage(e,"*")},n.getHeight=function(){var e=document.body,t=document.documentElement;return Math.max(e.scrollHeight,e.offsetHeight,t.clientHeight,t.scrollHeight,t.offsetHeight)},t}(b);me.debounces=["postUpdate"];var ge=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n._cleanupSelf=function(){this.cleanup(this.el)},n.cleanup=function(e){var t,n,i,r=this;e.dataset.controller=(null==(t=e.dataset.controller)?void 0:t.replaceAll(new RegExp("(s|^)"+this.identifier+"(s|$)","g"),""))||"",""==e.dataset.controller&&delete e.dataset.controller;var s=new RegExp("(s|^)"+this.identifier+"\\..+?(s|$)","g");e.dataset.target=(null==(n=e.dataset.target)?void 0:n.replaceAll(s,""))||"",delete e.dataset[u.default(this.identifier+"-target")],""==e.dataset.target&&delete e.dataset.target,e.dataset.action=(null==(i=e.dataset.target)?void 0:i.replaceAll(s,""))||"",delete e.dataset[u.default(this.identifier+"-action")],""==e.dataset.action&&delete e.dataset.action;var o=this.constructor.values;o&&Object.keys(o).forEach(function(t){return delete e.dataset[u.default(r.identifier+"-"+t+"-value")]});var a=this.constructor.classes;a&&Object.keys(a).forEach(function(t){return delete e.dataset[u.default(r.identifier+"-"+t+"-class")]})},t}(b),ve=function(e){function t(){return e.apply(this,arguments)||this}return p(t,e),t.prototype.connect=function(){var e=this;requestAnimationFrame(function(){se(e.el,{behavior:e.hasBehaviorValue?e.behaviorValue:"smooth",block:e.hasBlockValue?e.blockValue:"center",inline:e.hasInlineValue?e.inlineValue:"center"}).catch(function(){return e.el.scrollIntoView()}),e._cleanupSelf()})},t}(ge);ve.values={behavior:String,block:String,inline:String};var be=function(e){function t(){return e.apply(this,arguments)||this}return p(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ae(this.el))&&se(t,{behavior:"smooth",block:"end"}).catch(function(){return t.scrollIntoView(!1)})},t}(b);be.values={mode:String};var ye=function(e){function t(){return e.apply(this,arguments)||this}return p(t,e),t.prototype.scroll=function(){var e=document.querySelector(this.selectorValue);e?se(e,{behavior:this.hasBehaviorValue?this.behaviorValue:"smooth",block:this.hasBlockValue?this.blockValue:"center",inline:this.hasInlineValue?this.inlineValue:"center"}).catch(function(){return e.scrollIntoView()}):console.warn("Could not find target for '"+this.selectorValue+"'")},t}(b);ye.values={selector:String,behavior:String,block:String,inline:String};var Ee=function(e){function t(){return e.apply(this,arguments)||this}return p(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ae(this.el))&&se(t,{behavior:"smooth",block:"start"}).catch(function(){return t.scrollIntoView(!1)})},t}(b);Ee.values={mode:String};var we=function(e){function t(){var t;return(t=e.apply(this,arguments)||this).timeout=null,t}p(t,e);var n=t.prototype;return n.connect=function(){var e=this;requestAnimationFrame(function(){e.timeout=setTimeout(function(){return e.el.remove()},1e3*e.secondsValue)})},n.disconnect=function(){this.timeout&&clearTimeout(this.timeout)},t}(b);we.values={seconds:Number};var Ce=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._magicElement=null,t}p(t,e);var n=t.prototype;return n.createMagicElement=function(){if(null===this._magicElement)switch(this._magicElement=document.createElement("div"),this._mode){case"top":this.el.insertAdjacentElement("beforebegin",this._magicElement);break;case"bottom":this.el.insertAdjacentElement("afterend",this._magicElement)}},n.connect=function(){var e=this,t=this.el;this.createMagicElement(),new IntersectionObserver(function(n){n.forEach(function(n){n.target===e._magicElement&&(0===n.intersectionRatio?t.classList.add(e.hasStuckClass?e.stuckClass:"stuck"):1===n.intersectionRatio&&t.classList.remove(e.hasStuckClass?e.stuckClass:"stuck"))})},{threshold:[0,1]}).observe(this._magicElement)},d(t,[{key:"_mode",get:function(){return this.hasModeValue?this.modeValue:"top"}}]),t}(b);Ce.classes=["stuck"],Ce.values={mode:String};var ke=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){var e=this;if(!this.hasInsertValue)throw new Error("`insert` value was not specified");requestAnimationFrame(function(){e.hasImmediateValue&&e.immediateValue&&e.execute()})},n.execute=function(e){null==e||e.preventDefault();var t=this.el,n=document.querySelector(this.targetValue);if(null!=n){var i=t.cloneNode(!0);switch(this.cleanup(i),this.insertValue){case"beforebegin":case"beforeend":case"afterend":case"afterbegin":n.insertAdjacentHTML(this.insertValue,i.outerHTML);break;case"replaceOuter":n.outerHTML=i.outerHTML;break;case"replaceInner":n.innerHTML=i.outerHTML;break;case"prepend":n.insertAdjacentHTML("afterbegin",i.outerHTML);break;case"append":n.insertAdjacentHTML("beforeend",i.outerHTML);break;default:throw new Error("`insert` value was not specified")}t.remove()}else this.dispatch(t,"teleport:error")},t}(ge);ke.values={target:String,insert:String,immediate:Boolean};var Ve=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){var e=this;if(!this.hasClassValue)throw new Error("data-toggle-class-class-value must not be empty");(this.hasMouseEnterValue||this.hasMouseLeaveValue)&&((e,t={})=>{new I(this,t)})(),this.hasClickAwayValue&&this.clickAwayValue&&((e,t={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},S,t),o=r=>{const o=(null==t?void 0:t.element)||e.element;if(!(o.contains(r.target)||!function(e){const t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return t.top<=n&&t.top+t.height>=0&&t.left<=i&&t.left+t.width>=0}(o)&&n)&&(e.clickOutside&&e.clickOutside(r),i)){const t=k("click:outside",e,s),n=V(t,r,{controller:e});o.dispatchEvent(n)}},a=e.disconnect.bind(e);Object.assign(e,{disconnect(){null==r||r.forEach(e=>{window.removeEventListener(e,o,!1)}),a()}}),null==r||r.forEach(e=>{window.addEventListener(e,o,!1)})})(this),requestAnimationFrame(function(){e.hasInitialValue&&e.toggleTargets.forEach("on"===e.initialValue?function(t){return e.elementOn(t)}:function(t){return e.elementOff(t)})})},n.clickOutside=function(){var e=this;this.toggleTargets.forEach(function(t){e.elementWasToggled(t)&&(e.elementToggleStatus(t),e.elementToggle(t))})},n.mouseEnter=function(){if(this.hasMouseEnterValue)switch(this.mouseEnterValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}},n.mouseLeave=function(){if(this.hasMouseLeaveValue)switch(this.mouseLeaveValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}},n.on=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementOn(e)})},n.off=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementOff(e)})},n.toggle=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementToggle(e)})},n.elementWasToggled=function(e){return"true"==e.dataset.toggled},n.elementToggleStatus=function(e){this.elementWasToggled(e)?delete e.dataset.toggled:e.dataset.toggled="true"},n.elementToggle=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t)})},n.elementOn=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t,!0)})},n.elementOff=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t,!1)})},t}(b);function _e(e){return"TURBO-FRAME"==e.nodeName}Ve.targets=["toggle"],Ve.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var Te=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.toggle=function(e){null==e||e.preventDefault();var t=this._getFrame().src;null==t||t!==this._getSrc()?this._setSrc():this._clear()},n.setSrc=function(e){null==e||e.preventDefault(),this._setSrc()},n.clear=function(e){null==e||e.preventDefault(),this._clear()},n._setSrc=function(){var e=this._getFrame();this.hasLoadingMessageValue&&(e.innerHTML=this.loadingMessageValue),e.src=this._getSrc()},n._clear=function(){var e=this._getFrame();e.src="",e.innerHTML=""},n._getFrame=function(){var e=document.getElementById(""+this.frameIdValue);if(null==e)throw new Error("Could not find frame with ID '"+this.frameIdValue+"'");if(_e(e))return e;throw new Error("Element targeted by ID '"+this.frameIdValue+"'")},n._getSrc=function(){var e=this.el;if(this.hasSrcValue)return this.srcValue;if(H(e))return e.href;throw new Error("No link given to drive frame to")},t}(b);Te.values={frameId:String,src:String,loadingMessage:String};var Se=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._timeoutHandle=null,t}p(t,e);var n=t.prototype;return n.initialize=function(){this.refresh=this.refresh.bind(this)},n.connect=function(){var e=this,t=this.el;if(!_e(t))throw new Error("Expected controller to be mounted on a element.");if(t.src)throw new Error("The provided element has no `src` attribute.");this.poll&&requestAnimationFrame(function(){return e._timeoutHandle=setTimeout(function(){return e.refresh()},e.intervalValue)})},n.disconnect=function(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)},n.refresh=function(e){null==e||e.preventDefault();var t=this.el;t.src=t.src},d(t,[{key:"poll",get:function(){return!!this.hasPollValue&&this.pollValue}}]),t}(b);Se.values={interval:Number,poll:Boolean};var Le=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this.updateWordCount=this.updateWordCount.bind(this)},n.connect=function(){this.updateWordCount(),this.inputTarget.addEventListener("input",this.updateWordCount)},n.disconnect=function(){this.inputTarget.removeEventListener("input",this.updateWordCount)},n.updateWordCount=function(){var e=0,t=this.inputTarget.value.match(/\S+/g);this.outputTarget.innerText=(e=t&&t.length||0).toString(),this.hasErrorClass&&(this.isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n.isValidCount=function(e){var t=0,n=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(n=this.maxValue),e>=t&&e<=n},t}(b);Le.targets=["input","output"],Le.values={min:Number,max:Number},Le.classes=["error"],exports.AppearanceController=y,exports.AsyncBlockController=E,exports.AutoSubmitFormController=w,exports.AutosizeController=A,exports.CharCountController=N,exports.CheckboxSelectAllController=z,exports.ClipboardController=P,exports.ConfirmController=W,exports.ConfirmNavigationController=$,exports.DebugController=U,exports.DetectDirtyController=J,exports.DisableInputsController=Y,exports.DisableWithController=G,exports.DismissableController=K,exports.ElementSaveController=Q,exports.EmptyDomController=X,exports.EnableInputsController=Z,exports.FallbackImageController=ee,exports.FormSaveController=te,exports.IntersectionController=ne,exports.LazyBlockController=re,exports.LightboxImageController=le,exports.LimitedSelectionCheckboxesController=ce,exports.NestedFormController=ue,exports.PasswordConfirmController=he,exports.PasswordPeekController=de,exports.RemoteFormController=fe,exports.ResponsiveIframeBodyController=me,exports.ResponsiveIframeWrapperController=pe,exports.ScrollIntoFocusController=ve,exports.ScrollToBottomController=be,exports.ScrollToController=ye,exports.ScrollToTopController=Ee,exports.SelfDestructController=we,exports.StickyController=Ce,exports.TeleportController=ke,exports.ToggleClassController=Ve,exports.TurboFrameRCController=Te,exports.TurboFrameRefreshController=Se,exports.WordCountController=Le; //# sourceMappingURL=stimulus-library.js.map diff --git a/dist/stimulus-library.js.map b/dist/stimulus-library.js.map index 39cb44df..eb88106a 100644 --- a/dist/stimulus-library.js.map +++ b/dist/stimulus-library.js.map @@ -1 +1 @@ -{"version":3,"file":"stimulus-library.js","sources":["../src/base_controller.ts","../src/appearance_controller.ts","../src/async_block_controller.ts","../src/auto_submit_form_controller.ts","../node_modules/stimulus-use/dist/support/index.js","../node_modules/stimulus-use/dist/use-intersection/use-intersection.js","../node_modules/stimulus-use/dist/use-click-outside/use-click-outside.js","../node_modules/stimulus-use/dist/stimulus_use.js","../node_modules/stimulus-use/dist/use-hover/use-hover.js","../node_modules/stimulus-use/dist/use-mutation/use-mutation.js","../node_modules/stimulus-use/dist/use-window-resize/use-window-resize.js","../node_modules/stimulus-use/dist/use-debounce/use-debounce.js","../src/autosize_controller.ts","../src/char_count_controller.ts","../src/checkbox_select_all_controller.ts","../src/clipboard_controller.ts","../src/utilities/elements.ts","../src/confirm_controller.ts","../src/confirm_navigation_controller.ts","../src/debug_controller.ts","../src/detect_dirty_controller.ts","../src/disable_inputs_controller.ts","../src/disable_with_controller.ts","../src/dismissable_controller.ts","../src/empty_dom_controller.ts","../src/enable_inputs_controller.ts","../src/fallback_image_controller.ts","../src/form_save_controller.ts","../src/intersection_controller.ts","../src/lazy_block_controller.ts","../src/utilities/scroll.ts","../src/lightbox_image_controller.ts","../src/limited_selection_checkboxes_controller.ts","../src/nested_form_controller.ts","../src/password_confirm_controller.ts","../src/password_peek_controller.ts","../src/remote_form_controller.ts","../src/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/scroll_into_focus_controller.ts","../src/scroll_to_bottom_controller.ts","../src/scroll_to_controller.ts","../src/scroll_to_top_controller.ts","../src/self_destruct_controller.ts","../src/sticky_controller.ts","../src/teleport_controller.ts","../src/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/turbo_frame_rc_controller.ts","../src/turbo_frame_refresh_controller.ts","../src/word_count_controller.ts"],"sourcesContent":["import {Context, Controller} from \"stimulus\";\n\nexport class BaseController extends Controller {\n\n constructor(context: Context) {\n super(context);\n return new Proxy(this, {\n get: (obj, prop) => {\n let returnVal = Reflect.get(obj, prop);\n let self = this;\n if (logProperty(prop.toString())) {\n if (typeof returnVal == \"function\") {\n return new Proxy(returnVal, {\n apply(target: any, thisArg: any, argArray?: any): any {\n self.log(prop.toString(), {\n args: argArray,\n });\n return Reflect.apply(target, thisArg, argArray);\n },\n });\n } else {\n this.log(prop.toString());\n }\n }\n return returnVal;\n },\n });\n }\n\n get el(): HTMLElement {\n return this.element as HTMLElement;\n }\n\n dispatch(element: HTMLElement, eventName: string, options: CustomEventInit = {}) {\n let mergedOptions = Object.assign({}, {bubbles: true, cancelable: true, detail: {target: element}}, options);\n if (!!mergedOptions.detail.target) {\n mergedOptions.detail.target = element;\n }\n let event = new CustomEvent(eventName, mergedOptions);\n element.dispatchEvent(event);\n }\n\n log(functionName: string, args: {} = {}): void {\n // @ts-ignore\n if (!this.application.debug) {\n return;\n }\n let logger = console;\n logger.groupCollapsed(`%c${this.identifier} %c#${functionName}`, \"color: #3B82F6\", \"color: unset\");\n logger.log({\n element: this.element,\n ...args,\n });\n logger.groupEnd();\n }\n\n}\n\nfunction logProperty(prop: string): boolean {\n switch (prop) {\n case \"application\":\n case \"el\":\n case \"element\":\n case \"constructor\":\n case \"initialize\":\n case \"log\":\n case \"dispatch\":\n case \"data\":\n case \"valueDescriptorMap\":\n case \"identifier\":\n return false;\n }\n\n if (/^_.*?$/.test(prop)) {\n return false;\n }\n if (/^.*?Target(s)?$/.test(prop)) {\n return false;\n }\n if (/^.*?Value$/.test(prop)) {\n return false;\n }\n if (/^.*?ValueChanged$/.test(prop)) {\n return false;\n }\n if (/^.*?Class$/.test(prop)) {\n return false;\n }\n\n return true;\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class AppearanceController extends BaseController {\r\n\r\n initialize() {\r\n this._handleVisibility = this._handleVisibility.bind(this);\r\n }\r\n\r\n connect() {\r\n window.addEventListener(\"focus\", this._handleVisibility);\r\n window.addEventListener(\"blur\", this._handleVisibility);\r\n document.addEventListener(\"visibilitychange\", this._handleVisibility);\r\n this._handleVisibility();\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"focus\", this._handleVisibility);\r\n window.removeEventListener(\"blur\", this._handleVisibility);\r\n document.removeEventListener(\"visibilitychange\", this._handleVisibility);\r\n }\r\n\r\n appear() {\r\n this.dispatch(this.el, \"appearance:appear\");\r\n }\r\n\r\n away() {\r\n this.dispatch(this.el, \"appearance:away\");\r\n }\r\n\r\n _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\n\nexport class AsyncBlockController extends BaseController {\n static targets = [\"replace\"];\n static values = {endpoint: String, errorMessage: String, selector: String};\n\n declare readonly replaceTarget: HTMLElement;\n declare readonly hasReplaceTarget: boolean;\n declare readonly endpointValue: string;\n\n declare readonly hasSelectorValue: boolean;\n declare readonly selectorValue: string;\n\n declare readonly hasErrorMessageValue: boolean;\n declare readonly errorMessageValue: string;\n\n get _errorMessage(): string {\n return this.hasErrorMessageValue ? this.errorMessageValue : \"This content failed to load\";\n }\n\n // This is a simple controller to load a block of content when the page loads.\n // It should be used to give a quick initial response before calling out to an\n // an AJAX endpoint to do some expensive work.\n connect() {\n this.loadContent();\n }\n\n loadContent() {\n let self = this;\n let el = this.hasReplaceTarget ? this.replaceTarget : this.el;\n fetch(this.endpointValue)\n .then((response) => response.text())\n .then((html) => {\n let newEl = document.createElement(\"div\");\n newEl.innerHTML = html;\n if (this.hasSelectorValue) {\n let selectedContent = newEl.querySelectorAll(this.selectorValue);\n el.replaceWith(...selectedContent);\n } else {\n el.replaceWith(...newEl.children);\n }\n // Trigger event to show block has loaded\n self.dispatch(el, \"ajax:success\");\n })\n .catch(err => {\n el.replaceWith(this._errorMessage);\n self.dispatch(el, \"ajax:error\");\n })\n .finally(() => {\n self.dispatch(el, \"ajax:complete\");\n });\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class AutoSubmitFormController extends BaseController {\n\n initialize() {\n this.handler = this.handler.bind(this);\n }\n\n connect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.handler));\n }\n\n disconnect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.handler));\n }\n\n private handler(e: Event) {\n // Trigger synthetic \"submit\" event on form\n this.dispatch((this.el), \"submit\");\n }\n}\n","export const method = (controller, methodName) => {\n const method = controller[methodName];\n if (typeof method == 'function') {\n return method;\n }\n else {\n return (...args) => { };\n }\n};\nexport const composeEventName = (name, controller, eventPrefix) => {\n let composedName = name;\n if (eventPrefix === true) {\n composedName = `${controller.identifier}:${name}`;\n }\n else if (typeof eventPrefix === 'string') {\n composedName = `${eventPrefix}:${name}`;\n }\n return composedName;\n};\nexport const extendedEvent = (type, event, detail) => {\n const { bubbles, cancelable, composed } = event || { bubbles: true, cancelable: true, composed: true };\n if (event) {\n Object.assign(detail, { originalEvent: event });\n }\n const customEvent = new CustomEvent(type, {\n bubbles,\n cancelable,\n composed,\n detail,\n });\n return customEvent;\n};\nexport function isElementInViewport(el) {\n const rect = el.getBoundingClientRect();\n const windowHeight = (window.innerHeight || document.documentElement.clientHeight);\n const windowWidth = (window.innerWidth || document.documentElement.clientWidth);\n const vertInView = (rect.top <= windowHeight) && ((rect.top + rect.height) >= 0);\n const horInView = (rect.left <= windowWidth) && ((rect.left + rect.width) >= 0);\n return (vertInView && horInView);\n}\n//# sourceMappingURL=index.js.map","import { method, extendedEvent, composeEventName } from '../support/index';\nconst defaultOptions = {\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useIntersection = (controller, options = {}) => {\n const { dispatchEvent, eventPrefix } = Object.assign({}, defaultOptions, options);\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n const callback = (entries) => {\n const [entry] = entries;\n if (entry.isIntersecting) {\n dispatchAppear(entry);\n }\n else if (controller.isVisible) {\n dispatchDisappear(entry);\n }\n };\n const dispatchAppear = (entry) => {\n controller.isVisible = true;\n method(controller, 'appear').call(controller, entry);\n // emit a custom \"appear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('appear', controller, eventPrefix);\n const appearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(appearEvent);\n }\n };\n const dispatchDisappear = (entry) => {\n controller.isVisible = false;\n method(controller, 'disappear').call(controller, entry);\n // emit a custom \"disappear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('disappear', controller, eventPrefix);\n const disappearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(disappearEvent);\n }\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observer = new IntersectionObserver(callback, options);\n const observe = () => {\n observer.observe(targetElement);\n };\n const unobserve = () => {\n observer.unobserve(targetElement);\n };\n Object.assign(controller, {\n isVisible: false,\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-intersection.js.map","import { composeEventName, extendedEvent, isElementInViewport } from '../support/index';\nconst defaultOptions = {\n events: ['click', 'touchend'],\n onlyVisible: true,\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useClickOutside = (controller, options = {}) => {\n const { onlyVisible, dispatchEvent, events, eventPrefix } = Object.assign({}, defaultOptions, options);\n const onEvent = (event) => {\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n if (targetElement.contains(event.target) || (!isElementInViewport(targetElement) && onlyVisible)) {\n return;\n }\n // call the clickOutside method of the Stimulus controller\n if (controller.clickOutside) {\n controller.clickOutside(event);\n }\n // emit a custom event\n if (dispatchEvent) {\n const eventName = composeEventName('click:outside', controller, eventPrefix);\n const clickOutsideEvent = extendedEvent(eventName, event, { controller });\n targetElement.dispatchEvent(clickOutsideEvent);\n }\n };\n const observe = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.addEventListener(event, onEvent, false);\n });\n };\n const unobserve = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.removeEventListener(event, onEvent, false);\n });\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-click-outside.js.map","const defaultOptions = {\n debug: false,\n logger: console\n};\nexport class StimulusUse {\n constructor(controller, options = {}) {\n var _a, _b, _c;\n this.log = (functionName, args) => {\n if (!this.debug)\n return;\n this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${functionName}`, 'color: #3B82F6', 'color: unset');\n this.logger.log(Object.assign({ controllerId: this.controllerId }, args));\n this.logger.groupEnd();\n };\n this.debug = (_b = (_a = options === null || options === void 0 ? void 0 : options.debug) !== null && _a !== void 0 ? _a : controller.application.stimulusUseDebug) !== null && _b !== void 0 ? _b : defaultOptions.debug;\n this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : defaultOptions.logger;\n this.controller = controller;\n this.controllerId = controller.element.id || controller.element.dataset.id;\n // make copies of lifecycle functions\n this.controllerInitialize = controller.initialize.bind(controller);\n this.controllerConnect = controller.connect.bind(controller);\n this.controllerDisconnect = controller.disconnect.bind(controller);\n }\n}\n//# sourceMappingURL=stimulus_use.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseHover extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n this.targetElement.addEventListener('mouseenter', this.onEnter);\n this.targetElement.addEventListener('mouseleave', this.onLeave);\n };\n this.unobserve = () => {\n this.targetElement.removeEventListener('mouseenter', this.onEnter);\n this.targetElement.removeEventListener('mouseleave', this.onLeave);\n };\n this.onEnter = () => {\n method(this.controller, 'mouseEnter').call(this.controller);\n this.log('mouseEnter', { hover: true });\n };\n this.onLeave = () => {\n method(this.controller, 'mouseLeave').call(this.controller);\n this.log('mouseLeave', { hover: false });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useHover = (controller, options = {}) => {\n const observer = new UseHover(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-hover.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseMutation extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n try {\n this.observer.observe(this.targetElement, this.options);\n }\n catch (error) {\n this.controller.application.handleError(error, \"At a minimum, one of childList, attributes, and/or characterData must be true\", {});\n }\n };\n this.unobserve = () => {\n this.observer.disconnect();\n };\n this.mutation = (entries) => {\n method(this.controller, 'mutate').call(this.controller, entries);\n this.log('mutate', { entries });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.options = options;\n this.observer = new MutationObserver(this.mutation);\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useMutation = (controller, options = {}) => {\n const observer = new UseMutation(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-mutation.js.map","import { method } from '../support/index';\nexport const useWindowResize = (controller) => {\n const callback = (event) => {\n const { innerWidth, innerHeight } = window;\n const payload = {\n height: innerHeight || Infinity,\n width: innerWidth || Infinity,\n event\n };\n method(controller, 'windowResize').call(controller, payload);\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observe = () => {\n window.addEventListener('resize', callback);\n callback();\n };\n const unobserve = () => {\n window.removeEventListener('resize', callback);\n };\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-window-resize.js.map","import { Controller } from 'stimulus';\nclass DebounceController extends Controller {\n}\nDebounceController.debounces = [];\nconst defaultWait = 200;\nconst debounce = (fn, wait = defaultWait) => {\n let timeoutId = null;\n return function () {\n const args = arguments;\n const context = this;\n const callback = () => fn.apply(context, args);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(callback, wait);\n };\n};\nexport const useDebounce = (controller, options) => {\n var _a;\n const constructor = controller.constructor;\n (_a = constructor.debounces) === null || _a === void 0 ? void 0 : _a.forEach((func) => {\n if (typeof func === \"string\") {\n controller[func] = debounce(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n }\n if (typeof func === \"object\") {\n const { name, wait } = func;\n if (!name)\n return;\n controller[name] = debounce(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n }\n });\n};\n//# sourceMappingURL=use-debounce.js.map","import {useWindowResize} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class AutosizeController extends BaseController {\n\n initialize() {\n this._handler = this._handler.bind(this);\n }\n\n connect() {\n let target = this.el as HTMLTextAreaElement;\n target.style.resize = \"none\";\n target.style.boxSizing = \"border-box\";\n target.addEventListener(\"input\", this._handler);\n target.addEventListener(\"focus\", this._handler);\n useWindowResize(this);\n requestAnimationFrame(this._handler);\n }\n\n windowResize() {\n this._handler();\n }\n\n private _handler() {\n this.autosize(this.el as HTMLTextAreaElement);\n };\n\n private autosize(element: HTMLTextAreaElement) {\n let offset = element.offsetHeight - element.clientHeight;\n element.style.height = \"auto\";\n element.style.height = element.scrollHeight + offset + \"px\";\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class CharCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this._updateCharCount = this._updateCharCount.bind(this);\n }\n\n connect() {\n this._updateCharCount();\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this._updateCharCount);\n }\n\n private _updateCharCount() {\n let charCount = this.inputTarget.value.length;\n this.outputTarget.innerText = charCount.toString();\n if (this.hasErrorClass) {\n if (this._isValidCount(charCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n private _isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n","import {BaseController} from './base_controller';\n\nexport class CheckboxSelectAllController extends BaseController {\n static targets = ['selectAll', 'checkbox'];\n\n declare readonly hasSelectAllTarget: boolean;\n declare readonly selectAllTarget: HTMLInputElement;\n declare readonly checkboxTargets: HTMLInputElement[];\n\n private get checked() {\n return this.checkboxTargets.filter(checkbox => checkbox.checked);\n }\n\n private get unchecked() {\n return this.checkboxTargets.filter(checkbox => !checkbox.checked);\n }\n\n initialize() {\n this.toggle = this.toggle.bind(this);\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.addEventListener('change', this.toggle);\n this.checkboxTargets.forEach(checkbox => checkbox.addEventListener('change', this.refresh));\n this.refresh();\n });\n }\n\n disconnect() {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.removeEventListener('change', this.toggle);\n this.checkboxTargets.forEach((checkbox) => checkbox.removeEventListener('change', this.refresh));\n }\n\n private toggle(event: Event) {\n event.preventDefault();\n let target = event.target as HTMLInputElement;\n this.checkboxTargets.forEach((checkbox) => checkbox.checked = target.checked);\n }\n\n private refresh() {\n const checkboxesCount = this.checkboxTargets.length;\n const checkboxesCheckedCount = this.checked.length;\n\n this.selectAllTarget.checked = checkboxesCheckedCount > 0;\n this.selectAllTarget.indeterminate = checkboxesCheckedCount > 0 && checkboxesCheckedCount < checkboxesCount;\n }\n}","import {BaseController} from \"./base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"button\", \"copy\", \"fallback\"];\r\n static values = {removeUnused: Boolean};\r\n\r\n declare readonly sourceTarget: HTMLElement;\r\n declare readonly copyTarget: HTMLElement;\r\n declare readonly hasCopyTarget: boolean;\r\n declare readonly fallbackTarget: HTMLElement;\r\n declare readonly hasFallbackTarget: boolean;\r\n\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n declare readonly removeUnusedValue: boolean;\r\n\r\n supported = false;\r\n\r\n connect() {\r\n this.supported = document.queryCommandSupported(\"copy\");\r\n\r\n if (this.hasRemoveUnusedValue && this.removeUnusedValue) {\r\n if (this.supported && this.hasFallbackTarget) {\r\n this.fallbackTarget.remove();\r\n } else if (this.hasCopyTarget) {\r\n this.copyTarget.remove();\r\n }\r\n }\r\n }\r\n\r\n select(event: MouseEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n }\r\n\r\n copy(event: ClipboardEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n if (this.supported) {\r\n document.execCommand(\"copy\");\r\n }\r\n }\r\n}\r\n","export function isHTMLLinkElement(element: Element): element is HTMLLinkElement {\n return element.nodeName == \"LINK\";\n}\n\nexport function isHTMLAnchorElement(element: Element): element is HTMLAnchorElement {\n return element.nodeName == \"A\";\n}\n\nexport function isHTMLFormElement(element: Element): element is HTMLFormElement {\n return element.nodeName == \"FORM\";\n}\n\nexport function isHTMLInputElement(element: Element): element is HTMLInputElement {\n return element.nodeName == \"INPUT\";\n}\n\nexport function isHTMLButtonElement(element: Element): element is HTMLButtonElement {\n return element.nodeName == \"BUTTON\";\n}\n\nexport function isHTMLSelectElement(element: Element): element is HTMLSelectElement {\n return element.nodeName == \"SELECT\";\n}\n\nexport function isHTMLImageElement(element: Element): element is HTMLImageElement {\n return element.nodeName == \"IMG\";\n}\n\nexport function isElementCheckable(element: Element): element is HTMLInputElement & { checked: boolean } {\n return isHTMLInputElement(element) && (element.type === \"radio\" || element.type === \"checkbox\");\n}\n","import {BaseController} from './base_controller';\nimport {isHTMLFormElement, isHTMLAnchorElement} from \"./utilities/elements\";\n\nexport class ConfirmController extends BaseController {\n\n static values = {\n message: String,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get message(): string {\n return this.hasMessageValue ? this.messageValue : 'Are you sure?';\n }\n\n initialize() {\n this.confirm = this.confirm.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n let element = this.el;\n if (isHTMLFormElement(element)) {\n element.addEventListener(\"submit\", this.confirm);\n } else if (isHTMLAnchorElement(element)) {\n element.addEventListener(\"click\", this.confirm);\n } else {\n throw new Error(\"Can't handle confirmation on attached element\");\n }\n });\n }\n\n confirm(event: Event) {\n if (!(window.confirm(this.message))) {\n event.preventDefault();\n this.dispatch(this.el, \"confirm:cancelled\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class ConfirmNavigationController extends BaseController {\n\n static values = {_message: String};\n\n declare readonly _messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get _message(): string {\n return this.hasMessageValue ? this._messageValue : \"Do you want to leave this page? Changes you made may not be saved\";\n }\n\n initialize() {\n this.handlePopstate = this.handlePopstate.bind(this);\n this.handleTurboNavigation = this.handleTurboNavigation.bind(this);\n }\n\n connect() {\n window.onbeforeunload = () => this._message;\n window.addEventListener(\"popstate\", this.handlePopstate);\n window.addEventListener(\"submit\", () => {\n window.removeEventListener(\"popstate\", this.handlePopstate);\n window.onbeforeunload = null;\n });\n window.addEventListener(\"turbolinks:before-visit\", this.handleTurboNavigation);\n window.addEventListener(\"turbo:before-visit\", this.handleTurboNavigation);\n }\n\n handlePopstate(_event: PopStateEvent) {\n return false;\n }\n\n handleTurboNavigation(event: Event) {\n if (!confirm(this._message)) {\n event.preventDefault();\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DebugController extends BaseController {\n\n static targets = [\"test\"];\n declare testTargets: HTMLElement[];\n\n connect() {\n console.log(\"Debug Controller\", this, this.testTargets);\n }\n}\n","import {BaseController} from \"./base_controller\";\nimport {isElementCheckable, isHTMLSelectElement} from \"./utilities/elements\";\n\nexport class DetectDirtyController extends BaseController {\n\n loadValue: null | string | boolean = null;\n\n initialize() {\n this.checkDirty = this.checkDirty.bind(this);\n }\n\n connect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n this.loadValue = element.checked;\n } else {\n this.loadValue = element.value;\n }\n this.checkDirty();\n element.addEventListener(\"input\", this.checkDirty);\n element.addEventListener(\"change\", this.checkDirty);\n }\n\n disconnect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n element.removeEventListener(\"input\", this.checkDirty);\n element.removeEventListener(\"change\", this.checkDirty);\n }\n\n restore() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n element.checked = element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n options.forEach((option) => {\n option.selected = option.value == this.loadValue;\n });\n } else {\n options.forEach((option) => option.selected = option.defaultSelected);\n }\n Array.from(element.options).forEach(option => option.selected = option.defaultSelected);\n } else {\n element.value = element.defaultValue;\n }\n }\n\n private checkDirty(_event?: Event) {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\n let dirty: boolean;\n if (isElementCheckable(element)) {\n dirty = element.checked != element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n dirty = element.value != this.loadValue;\n } else {\n dirty = options.some((option) => option.selected != option.defaultSelected);\n }\n } else {\n dirty = element.value != element.defaultValue;\n }\n\n if (dirty) {\n element.setAttribute(\"data-dirty\", \"true\");\n } else {\n element.removeAttribute(\"data-dirty\");\n }\n }\n\n}\n\nexport function isDirty(element: HTMLElement) {\n return element.hasAttribute(\"data-dirty\");\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class DisableInputsController extends BaseController {\r\n\r\n static targets = [\"disabler\", \"disable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasDisablerTarget: boolean;\r\n declare readonly disablerTarget: HTMLInputElement;\r\n declare readonly disableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasDisablerTarget && this.disablerTarget.checked) {\r\n this.disableInputs();\r\n } else {\r\n this.enableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.disableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.disableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from './base_controller';\nimport {isHTMLAnchorElement, isHTMLButtonElement, isHTMLInputElement} from \"./utilities/elements\";\n\nexport class DisableWithController extends BaseController {\n\n static values = {\n message: String,\n timeout: Number,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n declare readonly timeoutValue: number;\n declare readonly hasTimeoutValue: boolean;\n\n _cacheText?: string;\n _timeoutHandle?: ReturnType;\n\n get _message(): string {\n return this.hasMessageValue ? this.messageValue : 'Submitting...';\n }\n\n get _timeout(): number {\n return this.hasTimeoutValue ? this.timeoutValue : 1000;\n }\n\n initialize() {\n this.enable = this.enable.bind(this);\n this.disable = this.disable.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n this.el.addEventListener(\"click\", this.disable);\n });\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n disable(event?: Event) {\n let element = this.el;\n\n if (this._isDisabled(element)) {\n event?.preventDefault();\n event?.stopImmediatePropagation();\n } else {\n this._cacheText = this._getElText(element);\n this._setElText(element, this._message);\n this._disable(element);\n setTimeout(this.enable, this._timeout);\n }\n }\n\n enable(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n if (this._isDisabled(element)) {\n this._setElText(element, this._cacheText!);\n this._enable(element);\n }\n }\n\n _isDisabled(el: HTMLElement): boolean {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n return el.disabled;\n } else {\n return el.dataset.disabled == \"true\";\n }\n }\n\n _getElText(el: HTMLElement): string {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n return el.value;\n } else {\n return el.innerText;\n }\n }\n\n _setElText(el: HTMLElement, str: string) {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n el.value = str;\n } else if (isHTMLButtonElement(el) || isHTMLAnchorElement(el)) {\n el.innerText = str;\n }\n }\n\n _disable(el: HTMLElement) {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n el.disabled = true;\n } else {\n el.dataset.disabled = \"true\";\n }\n }\n\n _enable(el: HTMLElement) {\n if (isHTMLInputElement(el) && el.type == \"submit\" || isHTMLButtonElement(el)) {\n el.disabled = false;\n } else {\n el.dataset.disabled = undefined;\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DismissableController extends BaseController {\n\n dismiss() {\n this.el.remove();\n }\n\n}\n","import {useMutation} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class EmptyDomController extends BaseController {\n\n static classes = [\"empty\", \"notEmpty\"];\n static values = {scopeSelector: String};\n\n declare hasEmptyClass: boolean;\n declare emptyClass: string;\n declare hasNotEmptyClass: boolean;\n declare notEmptyClass: string;\n\n declare hasScopeSelectorValue: boolean;\n declare scopeSelectorValue: string;\n\n get emptyClasses(): string[] {\n return this.emptyClass.split(\" \");\n }\n\n get notEmptyClasses(): string[] {\n return this.notEmptyClass.split(\" \");\n }\n\n get children(): Element[] {\n let element = this.el;\n if (this.hasScopeSelectorValue) {\n return Array.from(element.querySelectorAll(this.scopeSelectorValue));\n } else {\n return Array.from(element.children);\n }\n }\n\n connect() {\n useMutation(this, {element: this.el, childList: true});\n this.checkEmpty();\n }\n\n mutate(entries: MutationRecord[]) {\n this.checkEmpty();\n }\n\n checkEmpty() {\n let element = this.el;\n let children = this.children;\n if (children.length === 0) {\n this._removeNotEmptyClasses();\n this._addEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:empty\");\n } else {\n this._addNotEmptyClasses();\n this._removeEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:not-empty\", {detail: {count: children.length}});\n }\n }\n\n private _removeEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.remove(...this.emptyClasses);\n }\n }\n\n private _addNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.add(...this.notEmptyClasses);\n }\n }\n\n private _addEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.add(...this.emptyClasses);\n }\n }\n\n private _removeNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.remove(...this.notEmptyClasses);\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class EnableInputsController extends BaseController {\r\n\r\n static targets = [\"enabler\", \"enable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasEnablerTarget: boolean;\r\n declare readonly enablerTarget: HTMLInputElement;\r\n declare readonly enableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasEnablerTarget && this.enablerTarget.checked) {\r\n this.enableInputs();\r\n } else {\r\n this.disableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.enableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.enableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class FallbackImageController extends BaseController {\r\n\r\n static values = {placeholder: String};\r\n\r\n declare readonly placeholderValue: string;\r\n declare readonly hasPlaceholderValue: boolean;\r\n\r\n connect() {\r\n let element = this.el as HTMLImageElement;\r\n\r\n element.onerror = () => {\r\n if (this.hasPlaceholderValue) {\r\n element.src = this.placeholderValue;\r\n } else {\r\n element.style.display = \"none\";\r\n }\r\n };\r\n }\r\n\r\n}\r\n","import {BaseController} from './base_controller';\r\nimport {isHTMLFormElement, isHTMLInputElement} from \"./utilities/elements\";\r\n\r\ninterface FormSavePayload {\r\n [idx: string]: {\r\n [idx: string]: string | boolean\r\n }\r\n}\r\n\r\nexport class FormSaveController extends BaseController {\r\n\r\n static values = {\r\n id: String,\r\n restoreOnLoad: Boolean,\r\n clearOnSubmit: Boolean,\r\n };\r\n\r\n declare readonly idValue: string;\r\n declare readonly hasIdValue: boolean;\r\n declare readonly restoreOnLoadValue: boolean;\r\n declare readonly hasRestoreOnLoadValue: boolean;\r\n declare readonly clearOnSubmitValue: boolean;\r\n declare readonly hasClearOnSubmitValue: boolean;\r\n\r\n get formID() {\r\n if (this.hasIdValue) {\r\n return this.idValue;\r\n }\r\n let elementID = (this.el as HTMLFormElement).id;\r\n\r\n if (elementID !== \"\") {\r\n return elementID;\r\n } else {\r\n throw new Error(`No ID value to uniquely identify this form. Please either specify data-${this.identifier}-id-value or give this form an 'id' attribute. `);\r\n }\r\n }\r\n\r\n get formIdentifier() {\r\n const url = location.href;\r\n return `${url} ${this.formID}`;\r\n }\r\n\r\n get formElements() {\r\n return (this.el as HTMLFormElement).elements;\r\n }\r\n\r\n get formData(): FormSavePayload {\r\n let data: FormSavePayload = {[this.formIdentifier]: {}};\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name.length > 0) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n data[this.formIdentifier][el.name] = el.checked;\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.checked) {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n } else {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n get restoreOnLoad() {\r\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\r\n }\r\n\r\n get clearOnSubmit() {\r\n return this.hasClearOnSubmitValue ? this.clearOnSubmitValue : true;\r\n }\r\n\r\n initialize() {\r\n this._clear = this._clear.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n let element = this.el;\r\n if (!isHTMLFormElement(element)) {\r\n throw new Error('Expected controller to be mounted on a form element.');\r\n }\r\n\r\n if (this.restoreOnLoad) {\r\n this.restore();\r\n }\r\n if (this.clearOnSubmit) {\r\n this.el.addEventListener('submit', this._clear);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.clearOnSubmit) {\r\n this.el.removeEventListener('submit', this._clear);\r\n }\r\n }\r\n\r\n _clear() {\r\n localStorage.removeItem(this.formIdentifier);\r\n this.dispatch(this.el, `form-save:cleared`);\r\n }\r\n\r\n clear(event?: Event) {\r\n event?.preventDefault();\r\n this._clear();\r\n }\r\n\r\n save(event: Event) {\r\n event.preventDefault();\r\n let data = this.formData;\r\n localStorage.setItem(this.formIdentifier, JSON.stringify(data[this.formIdentifier]));\r\n this.dispatch(this.el, `form-save:save:success`);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n if (localStorage.getItem(this.formIdentifier)) {\r\n const savedData = JSON.parse(localStorage.getItem(this.formIdentifier)!); // get and parse the saved data from localStorage\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name in savedData) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n el.checked = savedData[el.name];\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.value == savedData[el.name]) {\r\n el.checked = true;\r\n }\r\n } else {\r\n el.value = savedData[el.name];\r\n }\r\n }\r\n }\r\n this.dispatch(this.el, `form-save:restore:success`);\r\n } else {\r\n this.dispatch(this.el, `form-save:restore:empty`);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {useIntersection} from \"stimulus-use\";\n\nexport class IntersectionController extends BaseController {\n\n static values = {threshold: String};\n\n declare readonly isVisible: boolean;\n declare readonly thresholdValue: string;\n declare readonly hasThresholdValue: boolean;\n\n get threshold(): number[] {\n if (this.hasThresholdValue) {\n return this.thresholdValue.split(',').map(val => Number.parseFloat(val.trim())).filter(val => val >= 0 && val <= 1);\n } else {\n return [0, 1];\n }\n }\n\n connect() {\n useIntersection(this, {\n threshold: this.threshold,\n element: this.el,\n });\n }\n\n appear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:appear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n disappear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:disappear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n}\n","import {useIntersection} from \"stimulus-use\";\nimport {AsyncBlockController} from \"./async_block_controller\";\n\nexport class LazyBlockController extends AsyncBlockController {\n\n declare observe: () => void;\n declare unobserve: () => void;\n declare isVisible: boolean;\n declare disappear: () => void;\n\n connect() {\n let element = this.el;\n\n if (\"IntersectionObserver\" in window) {\n [this.observe, this.unobserve] = useIntersection(this, {element, threshold: 0.3});\n } else {\n // Client doesn't support intersection observer, fallback to pre-loading\n this.loadContent();\n }\n }\n\n appear(entry: IntersectionObserverEntry) {\n if (entry.target === this.el && entry.isIntersecting) {\n this.loadContent();\n if (this.unobserve) {\n this.unobserve();\n }\n }\n }\n\n}\n","const smoothSupported = \"scrollBehavior\" in document.documentElement.style;\r\nlet smoothPolyfilled: boolean;\r\n\r\nexport async function scrollToElement(element: Element, {behavior = \"smooth\", block = \"start\", inline = \"nearest\"}: ScrollIntoViewOptions = {}) {\r\n if (behavior == \"smooth\" && !smoothSupported) {\r\n await polyfillSmooth();\r\n }\r\n element.scrollIntoView({behavior, block, inline});\r\n}\r\n\r\nasync function polyfillSmooth() {\r\n const {polyfill} = await import(/* webpackChunkName: \"smoothscroll-polyfill\" */ \"smoothscroll-polyfill\");\r\n if (smoothPolyfilled) {\r\n return;\r\n }\r\n smoothPolyfilled = true;\r\n polyfill();\r\n}\r\n\r\nexport function getScrollParent(node: HTMLElement | null): HTMLElement | null {\r\n if (!node) {\r\n return null;\r\n }\r\n const overflowY = getComputedStyle(node).overflowY;\r\n const isScrollable = overflowY !== \"visible\" && overflowY !== \"hidden\";\r\n\r\n if (isScrollable && node.scrollHeight >= node.clientHeight) {\r\n return node;\r\n }\r\n\r\n return getScrollParent(node.parentElement) || document.body;\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\nimport dialogPolyfill from \"dialog-polyfill\";\r\n\r\nexport class LightboxImageController extends BaseController {\r\n\r\n static values = {\r\n src: String,\r\n srcSet: String,\r\n sizes: String,\r\n };\r\n static classes = [\"modal\", \"image\"];\r\n\r\n declare readonly hasModalClass: boolean;\r\n declare readonly modalClass: string;\r\n declare readonly hasImageClass: boolean;\r\n declare readonly imageClass: string;\r\n declare readonly hasSrcValue: boolean;\r\n declare readonly srcValue: string;\r\n declare readonly hasSrcSetValue: boolean;\r\n declare readonly srcSetValue: string;\r\n declare readonly hasSizesValue: boolean;\r\n declare readonly sizesValue: string;\r\n _dialog: HTMLDialogElement | null = null;\r\n\r\n get src(): string {\r\n return this.hasSrcValue ? this.srcValue : (this.el as HTMLImageElement).src;\r\n }\r\n\r\n get srcSet(): string {\r\n return this.hasSrcSetValue ? this.srcSetValue : (this.el as HTMLImageElement).srcset;\r\n }\r\n\r\n get sizes(): string {\r\n return this.hasSizesValue ? this.sizesValue : (this.el as HTMLImageElement).sizes;\r\n }\r\n\r\n get modalClassName() {\r\n return this.hasModalClass ? this.modalClass : \"image-lightbox-dialog\";\r\n }\r\n\r\n get imageClassName() {\r\n return this.hasImageClass ? this.imageClass : \"image-lightbox-image\";\r\n }\r\n\r\n initialize() {\r\n this.open = this.open.bind(this);\r\n this.close = this.close.bind(this);\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n open() {\r\n let element = this.el as HTMLImageElement;\r\n if (this._dialog) {\r\n return;\r\n }\r\n this._dialog = document.createElement(\"dialog\");\r\n\r\n let image = document.createElement(\"img\") as HTMLImageElement;\r\n image.className = this.imageClassName;\r\n image.src = this.src;\r\n image.srcset = this.srcSet;\r\n image.sizes = this.sizes;\r\n this._dialog.appendChild(image);\r\n\r\n element.insertAdjacentElement(\"afterend\", this._dialog);\r\n dialogPolyfill.registerDialog(this._dialog);\r\n this._dialog.className = this.modalClassName;\r\n this._dialog.showModal();\r\n scrollToElement(this._dialog, {behavior: \"smooth\", block: \"end\"}).catch(() => this._dialog!.scrollIntoView(false));\r\n this._dialog.addEventListener(\"click\", this.close);\r\n this._dialog.addEventListener(\"cancel\", this.close);\r\n this._dialog.addEventListener(\"close\", this.close);\r\n }\r\n\r\n close() {\r\n if (this._dialog) {\r\n this._dialog.close();\r\n this._dialog.remove();\r\n this._dialog = null;\r\n scrollToElement(this.el, {behavior: \"smooth\", block: \"end\"}).catch(() => this.el.scrollIntoView(false));\r\n }\r\n }\r\n\r\n} ","import {BaseController} from \"./base_controller\";\n\nexport class LimitedSelectionCheckboxesController extends BaseController {\n\n static targets = [\"input\", \"error\"];\n static values = {max: Number, message: String};\n\n declare readonly hasErrorTarget: boolean;\n declare readonly errorTarget: HTMLElement;\n declare readonly inputTargets: HTMLInputElement[];\n declare readonly maxValue: number;\n declare readonly messageValue: string;\n\n initialize() {\n this.handleInputs = this.handleInputs.bind(this);\n }\n\n connect() {\n this.inputTargets.forEach((el) => el.addEventListener(\"change\", this.handleInputs));\n }\n\n disconnect() {\n this.inputTargets.forEach((el) => el.removeEventListener(\"change\", this.handleInputs));\n }\n\n handleInputs(event: Event) {\n let tickedInputs = this.inputTargets.reduce((previousValue, el) => el.checked ? previousValue + 1 : previousValue, 0);\n let target = event.target as HTMLInputElement;\n if (tickedInputs > this.maxValue) {\n event.preventDefault();\n target.checked = false;\n this.dispatch(target, \"change\");\n this.dispatch(target, \"limited-selection:too-many\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = this.messageValue;\n }\n } else {\n this.dispatch(target, \"limited-selection:selection\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = \"\";\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class NestedFormController extends BaseController {\n static targets = ['target', 'template'];\n static values = {\n insertMode: String,\n wrapperClass: String,\n };\n\n declare readonly targetTarget: HTMLElement;\n declare readonly templateTarget: HTMLTemplateElement | HTMLScriptElement;\n\n declare readonly wrapperClassValue: string;\n declare readonly hasWrapperSelectorValue: boolean;\n declare readonly insertModeValue: InsertPosition;\n declare readonly hasInsertModeValue: boolean;\n\n get wrapperClass() {\n return this.hasWrapperSelectorValue ? this.wrapperClassValue : 'nested-fields';\n }\n\n get insertMode(): InsertPosition {\n return this.hasInsertModeValue ? this.insertModeValue : 'beforeend';\n }\n\n connect() {\n this.checkStructure();\n }\n\n add(event?: Event) {\n event?.preventDefault();\n\n const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, this.generateID());\n this.targetTarget.insertAdjacentHTML(this.insertMode, content);\n }\n\n remove(event: Event) {\n event.preventDefault();\n const wrapper: HTMLElement | null = (event.target as HTMLElement).closest(`.${this.wrapperClass}`);\n if (wrapper == null) {\n throw new Error(`#remove was clicked from outside of a child record. Could not find an ancestor with class .${this.wrapperClass}`);\n }\n\n if (wrapper.dataset.newRecord === 'true') {\n wrapper.remove();\n } else {\n wrapper.style.display = 'none';\n let destroyInput = wrapper.querySelector(\"input[name*='_destroy']\") as HTMLInputElement | null;\n if (destroyInput == null) {\n throw new Error(`Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.`);\n }\n\n destroyInput.value = \"1\";\n }\n }\n\n generateID(): string {\n return new Date().getTime().toString() + Math.random().toString().slice(2);\n }\n\n private checkStructure() {\n let template = this.templateTarget.innerHTML;\n\n if (template.indexOf('NEW_RECORD')) {\n 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`\");\n }\n }\n}","import {BaseController} from \"./base_controller\";\n\nexport class PasswordConfirmController extends BaseController {\n\n static targets = [\"password\"];\n static classes = [\"error\"];\n\n declare readonly passwordTargets: HTMLInputElement[];\n\n declare readonly errorClass: string;\n declare readonly hasErrorClass: boolean;\n\n initialize() {\n this.checkPasswordsMatch = this.checkPasswordsMatch.bind(this);\n }\n\n connect() {\n this.passwordTargets.forEach((el) => el.addEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n disconnect() {\n this.passwordTargets.forEach((el) => el.removeEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n private allPasswordsMatch(): boolean {\n let values = new Set(this.passwordTargets.map(el => el.value)); // Create a unique set of the password values\n 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)\n }\n\n private checkPasswordsMatch() {\n let element = this.el;\n if (this.allPasswordsMatch()) {\n this.dispatch(element, \"password-confirm:match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.remove(this.errorClass));\n }\n } else {\n this.dispatch(element, \"password-confirm:no-match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.add(this.errorClass));\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class PasswordPeekController extends BaseController {\n\n static targets = [\"password\"];\n\n declare readonly passwordTarget: HTMLInputElement;\n\n peak(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"text\";\n }\n\n hide(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"password\";\n }\n\n toggle(event?: Event) {\n event?.preventDefault();\n if (this.passwordTarget.type === \"password\") {\n this.peak();\n } else {\n this.hide();\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class RemoteFormController extends BaseController {\r\n static targets = [];\r\n\r\n static values = {selector: String};\r\n\r\n declare readonly hasSelectorValue: boolean;\r\n declare readonly selectorValue: string;\r\n\r\n get selector(): string {\r\n return this.hasSelectorValue ? this.selectorValue : `[data-controller~=\"${this.identifier}\"]`;\r\n }\r\n\r\n replace(event: { detail: [Element, any, XMLHttpRequest] }) {\r\n const [data, status, xhr] = event.detail;\r\n if (data instanceof Node) {\r\n let new_element = data.querySelector(this.selector);\r\n\r\n if (new_element == null) {\r\n throw new Error(`expected new form DOM with [data-controller=\"${this.identifier}\"] to be present in returned payload`);\r\n }\r\n\r\n let parentNode = this.el.parentNode;\r\n if (parentNode == null) {\r\n throw new Error('expected form to have a DOM parent, could not execute replaceChild');\r\n }\r\n parentNode.replaceChild(new_element, this.el);\r\n } else {\r\n console.log('Unknown', data);\r\n }\r\n }\r\n}\r\n","import {useDebounce, useWindowResize} from \"stimulus-use\";\nimport {WindowResizePayload} from \"stimulus-use/dist/use-window-resize/use-window-resize\";\nimport {BaseController} from \"./base_controller\";\n\ninterface ResponsiveIframeMessage {\n name: string,\n height: number,\n}\n\nexport class ResponsiveIframeWrapperController extends BaseController {\n\n initialize() {\n this.messageReceived = this.messageReceived.bind(this);\n }\n\n connect() {\n window.addEventListener(\"message\", this.messageReceived);\n }\n\n disconnect() {\n window.removeEventListener(\"message\", this.messageReceived);\n }\n\n messageReceived(message: MessageEvent) {\n let data = message.data;\n if (data.hasOwnProperty(\"name\") && data.name === \"iframe-body\" && data.hasOwnProperty(\"height\")) {\n this.resize(data.height);\n }\n }\n\n resize(height: number) {\n (this.el as HTMLIFrameElement).style.height = `${height}px`;\n }\n\n}\n\nexport class ResponsiveIframeBodyController extends BaseController {\n\n static debounces = [\"postUpdate\"];\n\n declare observe: () => void;\n declare unobserve: () => void;\n\n connect() {\n // If this Window is inside a frame\n if (window.self !== window.top) {\n useWindowResize(this);\n useDebounce(this, {});\n this.postUpdate();\n } else {\n // Not an iframe\n }\n }\n\n windowResize(payload: WindowResizePayload) {\n this.postUpdate();\n };\n\n postUpdate() {\n let payload: ResponsiveIframeMessage = {name: \"iframe-body\", height: this.getHeight()};\n window.parent.postMessage(\n payload,\n \"*\",\n );\n }\n\n getHeight(): number {\n const body = document.body;\n const html = document.documentElement;\n\n // Get the largest height out of body and html's various height measurements\n return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n }\n\n}\n","import camelCase from \"camelcase\";\r\nimport {BaseController} from \"../base_controller\";\r\n\r\nexport class EphemeralController extends BaseController {\r\n\r\n _cleanupSelf() {\r\n this.cleanup(this.el);\r\n }\r\n\r\n cleanup(element: HTMLElement) {\r\n element.dataset.controller = element.dataset.controller?.replaceAll(new RegExp(`(\\s|^)${this.identifier}(\\s|$)`, \"g\"), \"\") || \"\";\r\n if (element.dataset.controller == \"\") {\r\n // If there are no controllers left, remove the attribute\r\n delete element.dataset.controller;\r\n }\r\n\r\n let substringIdentifierValueRegex = new RegExp(`(\\s|^)${this.identifier}\\\\..+?(\\s|$)`, \"g\");\r\n element.dataset.target = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-target`)];\r\n if (element.dataset.target == \"\") {\r\n // If there are no targets left, remove the attribute\r\n delete element.dataset.target;\r\n }\r\n\r\n element.dataset.action = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-action`)];\r\n if (element.dataset.action == \"\") {\r\n // If there are no actions left, remove the attribute\r\n delete element.dataset.action;\r\n }\r\n\r\n // @ts-ignore\r\n let values = this.constructor.values;\r\n if (values) {\r\n Object.keys(values).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-value`)]);\r\n }\r\n\r\n // @ts-ignore\r\n let classes = this.constructor.classes;\r\n if (classes) {\r\n Object.keys(classes).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-class`)]);\r\n }\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\n\r\nexport class ScrollIntoFocusController extends EphemeralController {\r\n\r\n static values = {\r\n behavior: String,\r\n block: String,\r\n inline: String,\r\n };\r\n\r\n declare behaviorValue: ScrollBehavior;\r\n declare hasBehaviorValue: boolean;\r\n declare blockValue: ScrollLogicalPosition;\r\n declare hasBlockValue: boolean;\r\n declare inlineValue: ScrollLogicalPosition;\r\n declare hasInlineValue: boolean;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Attempt smooth scrolling, with polyfill\r\n scrollToElement(\r\n this.el,\r\n {\r\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\r\n block: this.hasBlockValue ? this.blockValue : \"center\",\r\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\r\n },\r\n ).catch(() => this.el.scrollIntoView()); // Fallback to snap-scrolling\r\n this._cleanupSelf();\r\n });\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToBottomController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"end\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\nimport {scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToController extends BaseController {\n\n static values = {\n selector: String,\n behavior: String,\n block: String,\n inline: String,\n };\n\n declare selectorValue: string;\n declare behaviorValue: ScrollBehavior;\n declare hasBehaviorValue: boolean;\n declare blockValue: ScrollLogicalPosition;\n declare hasBlockValue: boolean;\n declare inlineValue: ScrollLogicalPosition;\n declare hasInlineValue: boolean;\n\n scroll() {\n let target = document.querySelector(this.selectorValue);\n if (!target) {\n console.warn(`Could not find target for '${this.selectorValue}'`);\n return;\n }\n\n scrollToElement(\n target!,\n {\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\n block: this.hasBlockValue ? this.blockValue : \"center\",\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\n },\n ).catch(() => target!.scrollIntoView()); // Fallback to snap-scrolling\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToTopController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"start\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class SelfDestructController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n timeout: null | ReturnType = null;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Only start countdown on first paint\r\n this.timeout = setTimeout(() => this.el.remove(), this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.timeout) {\r\n clearTimeout(this.timeout);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class StickyController extends BaseController {\r\n\r\n static classes = [\"stuck\"];\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare readonly hasStuckClass: boolean;\r\n declare readonly stuckClass: string;\r\n declare readonly hasModeValue: \"top\" | \"bottom\";\r\n declare readonly modeValue: \"top\" | \"bottom\";\r\n\r\n _magicElement: HTMLDivElement | null = null;\r\n\r\n get _mode(): \"top\" | \"bottom\" {\r\n return this.hasModeValue ? this.modeValue : \"top\";\r\n }\r\n\r\n createMagicElement() {\r\n // Magic element placed next to the sticky el that acts as an external border.\r\n // When the magic element is off the page, we know that the sticky el is \"stuck\"\r\n if (this._magicElement !== null) {\r\n return;\r\n }\r\n\r\n this._magicElement = document.createElement(\"div\");\r\n switch (this._mode) {\r\n case \"top\":\r\n this.el.insertAdjacentElement(\"beforebegin\", this._magicElement);\r\n break;\r\n case \"bottom\":\r\n this.el.insertAdjacentElement(\"afterend\", this._magicElement);\r\n break;\r\n }\r\n }\r\n\r\n connect() {\r\n let element = this.el;\r\n this.createMagicElement();\r\n\r\n const observer = new IntersectionObserver(entries => {\r\n entries.forEach(entry => {\r\n if (entry.target !== this._magicElement) {\r\n return;\r\n }\r\n if (entry.intersectionRatio === 0) {\r\n element.classList.add(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n } else if (entry.intersectionRatio === 1) {\r\n element.classList.remove(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n }\r\n });\r\n\r\n }, {\r\n threshold: [0, 1],\r\n });\r\n observer.observe(this._magicElement!);\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\n\nexport class TeleportController extends EphemeralController {\n\n static values = {target: String, insert: String, immediate: Boolean};\n\n declare readonly immediateValue: boolean;\n declare readonly hasImmediateValue: boolean;\n declare readonly targetValue: string;\n declare readonly hasInsertValue: boolean;\n declare readonly insertValue: InsertPosition | \"replaceOuter\" | \"replaceInner\" | \"prepend\" | \"append\";\n\n connect() {\n if (!this.hasInsertValue) {\n throw new Error(\"`insert` value was not specified\");\n }\n\n requestAnimationFrame(() => {\n if (this.hasImmediateValue && this.immediateValue) {\n this.execute();\n }\n });\n }\n\n execute(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n let destination = document.querySelector(this.targetValue);\n\n if (destination == null) {\n this.dispatch(element, \"teleport:error\");\n return;\n }\n\n let copy = element.cloneNode(true) as HTMLElement;\n this.cleanup(copy);\n\n switch (this.insertValue) {\n case \"beforebegin\":\n case \"beforeend\":\n case \"afterend\":\n case \"afterbegin\":\n destination.insertAdjacentHTML(this.insertValue, copy.outerHTML);\n break;\n case \"replaceOuter\":\n destination.outerHTML = copy.outerHTML;\n break;\n case \"replaceInner\":\n destination.innerHTML = copy.outerHTML;\n break;\n case \"prepend\":\n destination.insertAdjacentHTML(\"afterbegin\", copy.outerHTML);\n break;\n case \"append\":\n destination.insertAdjacentHTML(\"beforeend\", copy.outerHTML);\n break;\n default:\n throw new Error(\"`insert` value was not specified\");\n\n }\n element.remove();\n }\n\n}\n","import {useClickOutside, useHover} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport type ToggleClassMode = \"on\" | \"off\" | \"toggle\"\n\nexport class ToggleClassController extends BaseController {\n\n static targets = [\"toggle\"];\n static values = {\n class: String,\n mouseEnter: String,\n mouseLeave: String,\n clickAway: Boolean,\n initial: String,\n };\n\n declare readonly toggleTargets: HTMLElement[];\n\n declare readonly classValue: string;\n declare readonly hasClassValue: boolean;\n\n declare readonly mouseEnterValue: ToggleClassMode;\n declare readonly hasMouseEnterValue: boolean;\n\n declare readonly mouseLeaveValue: ToggleClassMode;\n declare readonly hasMouseLeaveValue: boolean;\n\n declare readonly clickAwayValue: boolean;\n declare readonly hasClickAwayValue: boolean;\n\n declare readonly initialValue: \"on\" | \"off\";\n declare readonly hasInitialValue: boolean;\n\n connect() {\n if (!this.hasClassValue) {\n throw new Error(\"data-toggle-class-class-value must not be empty\");\n }\n\n if (this.hasMouseEnterValue || this.hasMouseLeaveValue) {\n useHover(this);\n }\n\n if (this.hasClickAwayValue && this.clickAwayValue) {\n useClickOutside(this);\n }\n\n requestAnimationFrame(() => {\n if (this.hasInitialValue) {\n if (this.initialValue === \"on\") {\n this.toggleTargets.forEach((target) => this.elementOn(target));\n } else {\n this.toggleTargets.forEach((target) => this.elementOff(target));\n }\n }\n });\n }\n\n clickOutside() {\n this.toggleTargets.forEach((target) => {\n if (this.elementWasToggled(target)) {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n }\n });\n }\n\n mouseEnter() {\n if (this.hasMouseEnterValue) {\n switch (this.mouseEnterValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n mouseLeave() {\n if (this.hasMouseLeaveValue) {\n switch (this.mouseLeaveValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n on(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOn(target);\n });\n }\n\n off(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOff(target);\n });\n }\n\n toggle(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n });\n }\n\n private elementWasToggled(el: HTMLElement): boolean {\n return el.dataset.toggled == \"true\";\n }\n\n private elementToggleStatus(el: HTMLElement) {\n if (this.elementWasToggled(el)) {\n delete el.dataset.toggled;\n } else {\n el.dataset.toggled = \"true\";\n }\n }\n\n private elementToggle(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass));\n }\n\n private elementOn(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, true));\n }\n\n private elementOff(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, false));\n }\n\n}\n","export function isTurboFrame(element: HTMLElement): element is TurboFrame {\r\n return element.nodeName == \"TURBO-FRAME\";\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {isHTMLAnchorElement} from \"./utilities/elements\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\nexport class TurboFrameRCController extends BaseController {\n\n static values = {\n frameId: String,\n src: String,\n loadingMessage: String,\n };\n\n declare readonly frameIdValue: string;\n declare readonly srcValue: string;\n declare readonly hasSrcValue: boolean;\n declare readonly loadingMessageValue: string;\n declare readonly hasLoadingMessageValue: boolean;\n\n toggle(event?: Event) {\n event?.preventDefault();\n let frame = this._getFrame();\n let frameSrc = frame.src;\n if (frameSrc == null || frameSrc !== this._getSrc()) {\n this._setSrc();\n } else {\n this._clear();\n }\n }\n\n setSrc(event?: Event) {\n event?.preventDefault();\n this._setSrc();\n }\n\n clear(event?: Event) {\n event?.preventDefault();\n this._clear();\n }\n\n private _setSrc() {\n let frame = this._getFrame();\n if (this.hasLoadingMessageValue) {\n frame.innerHTML = this.loadingMessageValue;\n }\n frame.src = this._getSrc();\n }\n\n private _clear() {\n let frame = this._getFrame();\n frame.src = \"\";\n frame.innerHTML = \"\";\n }\n\n private _getFrame(): TurboFrame {\n let frame = document.getElementById(`${this.frameIdValue}`);\n if (frame == null) {\n throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);\n }\n if (!isTurboFrame(frame)) {\n throw new Error(`Element targeted by ID '${this.frameIdValue}'`);\n } else {\n return frame;\n }\n }\n\n private _getSrc(): string {\n let element = this.el;\n if (this.hasSrcValue) {\n return this.srcValue;\n } else if (isHTMLAnchorElement(element)) {\n return element.href;\n } else {\n throw new Error(\"No link given to drive frame to\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\n// noinspection SillyAssignmentJS\nexport class TurboFrameRefreshController extends BaseController {\n\n static values = {\n interval: Number,\n poll: Boolean,\n };\n\n declare readonly intervalValue: number;\n declare readonly pollValue: boolean;\n declare readonly hasPollValue: boolean;\n _timeoutHandle: null | ReturnType = null;\n\n get poll(): boolean {\n return this.hasPollValue ? this.pollValue : false;\n }\n\n initialize() {\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n let element = this.el;\n if (isTurboFrame(element)) {\n if (!!element.src) {\n throw new Error('The provided element has no `src` attribute.');\n }\n } else {\n throw new Error('Expected controller to be mounted on a element.');\n }\n if (this.poll) {\n requestAnimationFrame(() => this._timeoutHandle = setTimeout(() => this.refresh(), this.intervalValue));\n }\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n refresh(event?: Event) {\n event?.preventDefault();\n let element = this.el as TurboFrame;\n element.src = element.src;\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class WordCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this.updateWordCount = this.updateWordCount.bind(this);\n }\n\n connect() {\n this.updateWordCount();\n this.inputTarget.addEventListener(\"input\", this.updateWordCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this.updateWordCount);\n }\n\n updateWordCount() {\n let wordCount = 0;\n let textAreaValue = this.inputTarget.value;\n let matches = textAreaValue.match(/\\S+/g);\n wordCount = (matches && matches.length) || 0;\n this.outputTarget.innerText = wordCount.toString();\n if (this.hasErrorClass) {\n if (this.isValidCount(wordCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n"],"names":["BaseController","context","_this","Proxy","get","obj","prop","returnVal","Reflect","self","test","logProperty","toString","apply","target","thisArg","argArray","log","args","dispatch","element","eventName","options","mergedOptions","Object","assign","bubbles","cancelable","detail","event","CustomEvent","dispatchEvent","functionName","this","application","debug","logger","console","groupCollapsed","identifier","groupEnd","Controller","AppearanceController","initialize","_handleVisibility","bind","connect","window","addEventListener","document","disconnect","removeEventListener","appear","el","away","_documentIsActive","visibilityState","hasFocus","AsyncBlockController","loadContent","hasReplaceTarget","replaceTarget","fetch","endpointValue","then","response","text","html","newEl","createElement","innerHTML","hasSelectorValue","selectedContent","querySelectorAll","selectorValue","replaceWith","children","err","_errorMessage","hasErrorMessageValue","errorMessageValue","endpoint","String","errorMessage","selector","AutoSubmitFormController","handler","forEach","_this2","e","method","controller","methodName","composeEventName","name","eventPrefix","composedName","extendedEvent","type","composed","originalEvent","defaultOptions","useIntersection","targetElement","controllerDisconnect","observer","IntersectionObserver","entries","entry","isIntersecting","isVisible","call","appearEvent","dispatchAppear","disappearEvent","dispatchDisappear","observe","unobserve","[object Object]","events","onlyVisible","StimulusUse","_a","_b","_c","controllerId","stimulusUseDebug","id","dataset","controllerInitialize","controllerConnect","UseHover","super","onEnter","onLeave","hover","enhanceController","UseMutation","error","handleError","mutation","MutationObserver","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","requestAnimationFrame","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","value","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","toggle","refresh","hasSelectAllTarget","selectAllTarget","checkboxTargets","checkbox","preventDefault","checked","checkboxesCount","checkboxesCheckedCount","indeterminate","filter","ClipboardController","supported","queryCommandSupported","hasRemoveUnusedValue","removeUnusedValue","hasFallbackTarget","fallbackTarget","hasCopyTarget","copyTarget","select","sourceTarget","copy","execCommand","isHTMLAnchorElement","nodeName","isHTMLFormElement","isHTMLInputElement","isHTMLButtonElement","isHTMLSelectElement","isElementCheckable","removeUnused","Boolean","ConfirmController","confirm","Error","message","hasMessageValue","messageValue","ConfirmNavigationController","handlePopstate","handleTurboNavigation","onbeforeunload","_message","_event","_messageValue","DebugController","testTargets","DetectDirtyController","checkDirty","loadValue","restore","defaultChecked","Array","from","every","option","defaultSelected","selected","defaultValue","dirty","some","setAttribute","removeAttribute","DisableInputsController","hasDisablerTarget","disablerTarget","disableInputs","enableInputs","shouldClear","hasClearValue","clearValue","disableTargets","_","disabled","clear","DisableWithController","enable","disable","_timeoutHandle","_isDisabled","stopImmediatePropagation","_cacheText","_getElText","_setElText","_disable","_timeout","_enable","str","undefined","hasTimeoutValue","timeoutValue","timeout","DismissableController","dismiss","EmptyDomController","useMutation","childList","checkEmpty","mutate","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","emptyClasses","hasNotEmptyClass","notEmptyClasses","emptyClass","split","notEmptyClass","hasScopeSelectorValue","scopeSelectorValue","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormSaveController","_clear","restoreOnLoad","clearOnSubmit","localStorage","removeItem","formIdentifier","save","setItem","JSON","stringify","formData","getItem","savedData","parse","formElements","hasIdValue","idValue","elementID","location","href","formID","elements","data","hasRestoreOnLoadValue","restoreOnLoadValue","hasClearOnSubmitValue","clearOnSubmitValue","IntersectionController","threshold","disappear","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","LazyBlockController","smoothPolyfilled","scrollToElement","behavior","block","inline","scrollIntoView","smoothSupported","Promise","polyfill","polyfillSmooth","documentElement","getScrollParent","node","overflowY","getComputedStyle","parentElement","body","LightboxImageController","open","close","_dialog","image","className","imageClassName","srcset","srcSet","sizes","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","modalClassName","showModal","_this3","hasSrcValue","srcValue","hasSrcSetValue","srcSetValue","hasSizesValue","sizesValue","hasModalClass","modalClass","hasImageClass","imageClass","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","NestedFormController","checkStructure","content","templateTarget","replace","generateID","targetTarget","insertAdjacentHTML","insertMode","wrapper","closest","wrapperClass","newRecord","destroyInput","querySelector","Date","getTime","Math","random","slice","indexOf","hasWrapperSelectorValue","wrapperClassValue","hasInsertModeValue","insertModeValue","PasswordConfirmController","checkPasswordsMatch","passwordTargets","allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","constructor","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","keys","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","secondsValue","seconds","StickyController","createMagicElement","_magicElement","_mode","intersectionRatio","hasStuckClass","stuckClass","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","ToggleClassController","hasClassValue","hasMouseEnterValue","hasMouseLeaveValue","useHover","hasClickAwayValue","clickAwayValue","onEvent","contains","rect","getBoundingClientRect","windowHeight","windowWidth","clientWidth","left","isElementInViewport","clickOutside","clickOutsideEvent","useClickOutside","hasInitialValue","toggleTargets","initialValue","elementOn","elementOff","elementWasToggled","elementToggleStatus","elementToggle","mouseEnter","mouseEnterValue","on","off","mouseLeave","mouseLeaveValue","_this4","_this5","toggled","classValue","klass","isTurboFrame","class","clickAway","initial","TurboFrameRCController","frameSrc","_getFrame","_getSrc","_setSrc","setSrc","frame","hasLoadingMessageValue","loadingMessageValue","getElementById","frameIdValue","frameId","loadingMessage","TurboFrameRefreshController","poll","intervalValue","hasPollValue","pollValue","interval","WordCountController","updateWordCount","wordCount","matches","match","isValidCount"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stimulus-library.js","sources":["../src/base_controller.ts","../src/appearance_controller.ts","../src/async_block_controller.ts","../src/auto_submit_form_controller.ts","../node_modules/stimulus-use/dist/support/index.js","../node_modules/stimulus-use/dist/use-intersection/use-intersection.js","../node_modules/stimulus-use/dist/use-click-outside/use-click-outside.js","../node_modules/stimulus-use/dist/stimulus_use.js","../node_modules/stimulus-use/dist/use-hover/use-hover.js","../node_modules/stimulus-use/dist/use-mutation/use-mutation.js","../node_modules/stimulus-use/dist/use-window-resize/use-window-resize.js","../node_modules/stimulus-use/dist/use-debounce/use-debounce.js","../src/autosize_controller.ts","../src/char_count_controller.ts","../src/checkbox_select_all_controller.ts","../src/clipboard_controller.ts","../src/utilities/elements.ts","../src/confirm_controller.ts","../src/confirm_navigation_controller.ts","../src/debug_controller.ts","../src/detect_dirty_controller.ts","../src/disable_inputs_controller.ts","../src/disable_with_controller.ts","../src/dismissable_controller.ts","../src/element_save_controller.ts","../src/empty_dom_controller.ts","../src/enable_inputs_controller.ts","../src/fallback_image_controller.ts","../src/form_save_controller.ts","../src/intersection_controller.ts","../src/lazy_block_controller.ts","../src/utilities/scroll.ts","../src/lightbox_image_controller.ts","../src/limited_selection_checkboxes_controller.ts","../src/nested_form_controller.ts","../src/password_confirm_controller.ts","../src/password_peek_controller.ts","../src/remote_form_controller.ts","../src/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/scroll_into_focus_controller.ts","../src/scroll_to_bottom_controller.ts","../src/scroll_to_controller.ts","../src/scroll_to_top_controller.ts","../src/self_destruct_controller.ts","../src/sticky_controller.ts","../src/teleport_controller.ts","../src/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/turbo_frame_rc_controller.ts","../src/turbo_frame_refresh_controller.ts","../src/word_count_controller.ts"],"sourcesContent":["import {Context, Controller} from \"stimulus\";\n\nexport class BaseController extends Controller {\n\n constructor(context: Context) {\n super(context);\n return new Proxy(this, {\n get: (obj, prop) => {\n let returnVal = Reflect.get(obj, prop);\n let self = this;\n if (logProperty(prop.toString())) {\n if (typeof returnVal == \"function\") {\n return new Proxy(returnVal, {\n apply(target: any, thisArg: any, argArray?: any): any {\n self.log(prop.toString(), {\n args: argArray,\n });\n return Reflect.apply(target, thisArg, argArray);\n },\n });\n } else {\n this.log(prop.toString());\n }\n }\n return returnVal;\n },\n });\n }\n\n get el(): HTMLElement {\n return this.element as HTMLElement;\n }\n\n dispatch(element: HTMLElement, eventName: string, options: CustomEventInit = {}) {\n let mergedOptions = Object.assign({}, {bubbles: true, cancelable: true, detail: {target: element}}, options);\n if (!!mergedOptions.detail.target) {\n mergedOptions.detail.target = element;\n }\n let event = new CustomEvent(eventName, mergedOptions);\n element.dispatchEvent(event);\n }\n\n log(functionName: string, args: {} = {}): void {\n // @ts-ignore\n if (!this.application.debug) {\n return;\n }\n let logger = console;\n logger.groupCollapsed(`%c${this.identifier} %c#${functionName}`, \"color: #3B82F6\", \"color: unset\");\n logger.log({\n element: this.element,\n ...args,\n });\n logger.groupEnd();\n }\n\n}\n\nfunction logProperty(prop: string): boolean {\n switch (prop) {\n case \"application\":\n case \"el\":\n case \"element\":\n case \"constructor\":\n case \"initialize\":\n case \"log\":\n case \"dispatch\":\n case \"data\":\n case \"valueDescriptorMap\":\n case \"identifier\":\n return false;\n }\n\n if (/^_.*?$/.test(prop)) {\n return false;\n }\n if (/^.*?Target(s)?$/.test(prop)) {\n return false;\n }\n if (/^.*?Value$/.test(prop)) {\n return false;\n }\n if (/^.*?ValueChanged$/.test(prop)) {\n return false;\n }\n if (/^.*?Class$/.test(prop)) {\n return false;\n }\n\n return true;\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class AppearanceController extends BaseController {\r\n\r\n initialize() {\r\n this._handleVisibility = this._handleVisibility.bind(this);\r\n }\r\n\r\n connect() {\r\n window.addEventListener(\"focus\", this._handleVisibility);\r\n window.addEventListener(\"blur\", this._handleVisibility);\r\n document.addEventListener(\"visibilitychange\", this._handleVisibility);\r\n this._handleVisibility();\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"focus\", this._handleVisibility);\r\n window.removeEventListener(\"blur\", this._handleVisibility);\r\n document.removeEventListener(\"visibilitychange\", this._handleVisibility);\r\n }\r\n\r\n appear() {\r\n this.dispatch(this.el, \"appearance:appear\");\r\n }\r\n\r\n away() {\r\n this.dispatch(this.el, \"appearance:away\");\r\n }\r\n\r\n _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\n\nexport class AsyncBlockController extends BaseController {\n static targets = [\"replace\"];\n static values = {endpoint: String, errorMessage: String, selector: String};\n\n declare readonly replaceTarget: HTMLElement;\n declare readonly hasReplaceTarget: boolean;\n declare readonly endpointValue: string;\n\n declare readonly hasSelectorValue: boolean;\n declare readonly selectorValue: string;\n\n declare readonly hasErrorMessageValue: boolean;\n declare readonly errorMessageValue: string;\n\n get _errorMessage(): string {\n return this.hasErrorMessageValue ? this.errorMessageValue : \"This content failed to load\";\n }\n\n // This is a simple controller to load a block of content when the page loads.\n // It should be used to give a quick initial response before calling out to an\n // an AJAX endpoint to do some expensive work.\n connect() {\n this.loadContent();\n }\n\n loadContent() {\n let self = this;\n let el = this.hasReplaceTarget ? this.replaceTarget : this.el;\n fetch(this.endpointValue)\n .then((response) => response.text())\n .then((html) => {\n let newEl = document.createElement(\"div\");\n newEl.innerHTML = html;\n if (this.hasSelectorValue) {\n let selectedContent = newEl.querySelectorAll(this.selectorValue);\n el.replaceWith(...selectedContent);\n } else {\n el.replaceWith(...newEl.children);\n }\n // Trigger event to show block has loaded\n self.dispatch(el, \"ajax:success\");\n })\n .catch(err => {\n el.replaceWith(this._errorMessage);\n self.dispatch(el, \"ajax:error\");\n })\n .finally(() => {\n self.dispatch(el, \"ajax:complete\");\n });\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class AutoSubmitFormController extends BaseController {\n\n initialize() {\n this.handler = this.handler.bind(this);\n }\n\n connect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.handler));\n }\n\n disconnect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.handler));\n }\n\n private handler(e: Event) {\n // Trigger synthetic \"submit\" event on form\n this.dispatch((this.el), \"submit\");\n }\n}\n","export const method = (controller, methodName) => {\n const method = controller[methodName];\n if (typeof method == 'function') {\n return method;\n }\n else {\n return (...args) => { };\n }\n};\nexport const composeEventName = (name, controller, eventPrefix) => {\n let composedName = name;\n if (eventPrefix === true) {\n composedName = `${controller.identifier}:${name}`;\n }\n else if (typeof eventPrefix === 'string') {\n composedName = `${eventPrefix}:${name}`;\n }\n return composedName;\n};\nexport const extendedEvent = (type, event, detail) => {\n const { bubbles, cancelable, composed } = event || { bubbles: true, cancelable: true, composed: true };\n if (event) {\n Object.assign(detail, { originalEvent: event });\n }\n const customEvent = new CustomEvent(type, {\n bubbles,\n cancelable,\n composed,\n detail,\n });\n return customEvent;\n};\nexport function isElementInViewport(el) {\n const rect = el.getBoundingClientRect();\n const windowHeight = (window.innerHeight || document.documentElement.clientHeight);\n const windowWidth = (window.innerWidth || document.documentElement.clientWidth);\n const vertInView = (rect.top <= windowHeight) && ((rect.top + rect.height) >= 0);\n const horInView = (rect.left <= windowWidth) && ((rect.left + rect.width) >= 0);\n return (vertInView && horInView);\n}\n//# sourceMappingURL=index.js.map","import { method, extendedEvent, composeEventName } from '../support/index';\nconst defaultOptions = {\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useIntersection = (controller, options = {}) => {\n const { dispatchEvent, eventPrefix } = Object.assign({}, defaultOptions, options);\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n const callback = (entries) => {\n const [entry] = entries;\n if (entry.isIntersecting) {\n dispatchAppear(entry);\n }\n else if (controller.isVisible) {\n dispatchDisappear(entry);\n }\n };\n const dispatchAppear = (entry) => {\n controller.isVisible = true;\n method(controller, 'appear').call(controller, entry);\n // emit a custom \"appear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('appear', controller, eventPrefix);\n const appearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(appearEvent);\n }\n };\n const dispatchDisappear = (entry) => {\n controller.isVisible = false;\n method(controller, 'disappear').call(controller, entry);\n // emit a custom \"disappear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('disappear', controller, eventPrefix);\n const disappearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(disappearEvent);\n }\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observer = new IntersectionObserver(callback, options);\n const observe = () => {\n observer.observe(targetElement);\n };\n const unobserve = () => {\n observer.unobserve(targetElement);\n };\n Object.assign(controller, {\n isVisible: false,\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-intersection.js.map","import { composeEventName, extendedEvent, isElementInViewport } from '../support/index';\nconst defaultOptions = {\n events: ['click', 'touchend'],\n onlyVisible: true,\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useClickOutside = (controller, options = {}) => {\n const { onlyVisible, dispatchEvent, events, eventPrefix } = Object.assign({}, defaultOptions, options);\n const onEvent = (event) => {\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n if (targetElement.contains(event.target) || (!isElementInViewport(targetElement) && onlyVisible)) {\n return;\n }\n // call the clickOutside method of the Stimulus controller\n if (controller.clickOutside) {\n controller.clickOutside(event);\n }\n // emit a custom event\n if (dispatchEvent) {\n const eventName = composeEventName('click:outside', controller, eventPrefix);\n const clickOutsideEvent = extendedEvent(eventName, event, { controller });\n targetElement.dispatchEvent(clickOutsideEvent);\n }\n };\n const observe = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.addEventListener(event, onEvent, false);\n });\n };\n const unobserve = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.removeEventListener(event, onEvent, false);\n });\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-click-outside.js.map","const defaultOptions = {\n debug: false,\n logger: console\n};\nexport class StimulusUse {\n constructor(controller, options = {}) {\n var _a, _b, _c;\n this.log = (functionName, args) => {\n if (!this.debug)\n return;\n this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${functionName}`, 'color: #3B82F6', 'color: unset');\n this.logger.log(Object.assign({ controllerId: this.controllerId }, args));\n this.logger.groupEnd();\n };\n this.debug = (_b = (_a = options === null || options === void 0 ? void 0 : options.debug) !== null && _a !== void 0 ? _a : controller.application.stimulusUseDebug) !== null && _b !== void 0 ? _b : defaultOptions.debug;\n this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : defaultOptions.logger;\n this.controller = controller;\n this.controllerId = controller.element.id || controller.element.dataset.id;\n // make copies of lifecycle functions\n this.controllerInitialize = controller.initialize.bind(controller);\n this.controllerConnect = controller.connect.bind(controller);\n this.controllerDisconnect = controller.disconnect.bind(controller);\n }\n}\n//# sourceMappingURL=stimulus_use.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseHover extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n this.targetElement.addEventListener('mouseenter', this.onEnter);\n this.targetElement.addEventListener('mouseleave', this.onLeave);\n };\n this.unobserve = () => {\n this.targetElement.removeEventListener('mouseenter', this.onEnter);\n this.targetElement.removeEventListener('mouseleave', this.onLeave);\n };\n this.onEnter = () => {\n method(this.controller, 'mouseEnter').call(this.controller);\n this.log('mouseEnter', { hover: true });\n };\n this.onLeave = () => {\n method(this.controller, 'mouseLeave').call(this.controller);\n this.log('mouseLeave', { hover: false });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useHover = (controller, options = {}) => {\n const observer = new UseHover(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-hover.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseMutation extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n try {\n this.observer.observe(this.targetElement, this.options);\n }\n catch (error) {\n this.controller.application.handleError(error, \"At a minimum, one of childList, attributes, and/or characterData must be true\", {});\n }\n };\n this.unobserve = () => {\n this.observer.disconnect();\n };\n this.mutation = (entries) => {\n method(this.controller, 'mutate').call(this.controller, entries);\n this.log('mutate', { entries });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.options = options;\n this.observer = new MutationObserver(this.mutation);\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useMutation = (controller, options = {}) => {\n const observer = new UseMutation(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-mutation.js.map","import { method } from '../support/index';\nexport const useWindowResize = (controller) => {\n const callback = (event) => {\n const { innerWidth, innerHeight } = window;\n const payload = {\n height: innerHeight || Infinity,\n width: innerWidth || Infinity,\n event\n };\n method(controller, 'windowResize').call(controller, payload);\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observe = () => {\n window.addEventListener('resize', callback);\n callback();\n };\n const unobserve = () => {\n window.removeEventListener('resize', callback);\n };\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-window-resize.js.map","import { Controller } from 'stimulus';\nclass DebounceController extends Controller {\n}\nDebounceController.debounces = [];\nconst defaultWait = 200;\nconst debounce = (fn, wait = defaultWait) => {\n let timeoutId = null;\n return function () {\n const args = arguments;\n const context = this;\n const callback = () => fn.apply(context, args);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(callback, wait);\n };\n};\nexport const useDebounce = (controller, options) => {\n var _a;\n const constructor = controller.constructor;\n (_a = constructor.debounces) === null || _a === void 0 ? void 0 : _a.forEach((func) => {\n if (typeof func === \"string\") {\n controller[func] = debounce(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n }\n if (typeof func === \"object\") {\n const { name, wait } = func;\n if (!name)\n return;\n controller[name] = debounce(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n }\n });\n};\n//# sourceMappingURL=use-debounce.js.map","import {useWindowResize} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class AutosizeController extends BaseController {\n\n initialize() {\n this._handler = this._handler.bind(this);\n }\n\n connect() {\n let target = this.el as HTMLTextAreaElement;\n target.style.resize = \"none\";\n target.style.boxSizing = \"border-box\";\n target.addEventListener(\"input\", this._handler);\n target.addEventListener(\"focus\", this._handler);\n useWindowResize(this);\n requestAnimationFrame(this._handler);\n }\n\n windowResize() {\n this._handler();\n }\n\n private _handler() {\n this.autosize(this.el as HTMLTextAreaElement);\n };\n\n private autosize(element: HTMLTextAreaElement) {\n let offset = element.offsetHeight - element.clientHeight;\n element.style.height = \"auto\";\n element.style.height = element.scrollHeight + offset + \"px\";\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class CharCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this._updateCharCount = this._updateCharCount.bind(this);\n }\n\n connect() {\n this._updateCharCount();\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this._updateCharCount);\n }\n\n private _updateCharCount() {\n let charCount = this.inputTarget.value.length;\n this.outputTarget.innerText = charCount.toString();\n if (this.hasErrorClass) {\n if (this._isValidCount(charCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n private _isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n","import {BaseController} from './base_controller';\n\nexport class CheckboxSelectAllController extends BaseController {\n static targets = ['selectAll', 'checkbox'];\n\n declare readonly hasSelectAllTarget: boolean;\n declare readonly selectAllTarget: HTMLInputElement;\n declare readonly checkboxTargets: HTMLInputElement[];\n\n private get checked() {\n return this.checkboxTargets.filter(checkbox => checkbox.checked);\n }\n\n private get unchecked() {\n return this.checkboxTargets.filter(checkbox => !checkbox.checked);\n }\n\n initialize() {\n this.toggle = this.toggle.bind(this);\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.addEventListener('change', this.toggle);\n this.checkboxTargets.forEach(checkbox => checkbox.addEventListener('change', this.refresh));\n this.refresh();\n });\n }\n\n disconnect() {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.removeEventListener('change', this.toggle);\n this.checkboxTargets.forEach((checkbox) => checkbox.removeEventListener('change', this.refresh));\n }\n\n private toggle(event: Event) {\n event.preventDefault();\n let target = event.target as HTMLInputElement;\n this.checkboxTargets.forEach((checkbox) => checkbox.checked = target.checked);\n }\n\n private refresh() {\n const checkboxesCount = this.checkboxTargets.length;\n const checkboxesCheckedCount = this.checked.length;\n\n this.selectAllTarget.checked = checkboxesCheckedCount > 0;\n this.selectAllTarget.indeterminate = checkboxesCheckedCount > 0 && checkboxesCheckedCount < checkboxesCount;\n }\n}","import {BaseController} from \"./base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"button\", \"copy\", \"fallback\"];\r\n static values = {removeUnused: Boolean};\r\n\r\n declare readonly sourceTarget: HTMLElement;\r\n declare readonly copyTarget: HTMLElement;\r\n declare readonly hasCopyTarget: boolean;\r\n declare readonly fallbackTarget: HTMLElement;\r\n declare readonly hasFallbackTarget: boolean;\r\n\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n declare readonly removeUnusedValue: boolean;\r\n\r\n supported = false;\r\n\r\n connect() {\r\n this.supported = document.queryCommandSupported(\"copy\");\r\n\r\n if (this.hasRemoveUnusedValue && this.removeUnusedValue) {\r\n if (this.supported && this.hasFallbackTarget) {\r\n this.fallbackTarget.remove();\r\n } else if (this.hasCopyTarget) {\r\n this.copyTarget.remove();\r\n }\r\n }\r\n }\r\n\r\n select(event: MouseEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n }\r\n\r\n copy(event: ClipboardEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n if (this.supported) {\r\n document.execCommand(\"copy\");\r\n }\r\n }\r\n}\r\n","export function isHTMLLinkElement(element: Element): element is HTMLLinkElement {\n return element.nodeName == \"LINK\";\n}\n\nexport function isHTMLAnchorElement(element: Element): element is HTMLAnchorElement {\n return element.nodeName == \"A\";\n}\n\nexport function isHTMLFormElement(element: Element): element is HTMLFormElement {\n return element.nodeName == \"FORM\";\n}\n\nexport function isHTMLInputElement(element: Element): element is HTMLInputElement {\n return element.nodeName == \"INPUT\";\n}\n\nexport function isHTMLButtonElement(element: Element): element is HTMLButtonElement {\n return element.nodeName == \"BUTTON\";\n}\n\nexport function isHTMLSelectElement(element: Element): element is HTMLSelectElement {\n return element.nodeName == \"SELECT\";\n}\n\nexport function isHTMLImageElement(element: Element): element is HTMLImageElement {\n return element.nodeName == \"IMG\";\n}\n\nexport function isElementCheckable(element: Element): element is HTMLInputElement & { checked: boolean } {\n return isHTMLInputElement(element) && (element.type === \"radio\" || element.type === \"checkbox\");\n}\n","import {BaseController} from './base_controller';\nimport {isHTMLFormElement, isHTMLAnchorElement} from \"./utilities/elements\";\n\nexport class ConfirmController extends BaseController {\n\n static values = {\n message: String,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get message(): string {\n return this.hasMessageValue ? this.messageValue : 'Are you sure?';\n }\n\n initialize() {\n this.confirm = this.confirm.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n let element = this.el;\n if (isHTMLFormElement(element)) {\n element.addEventListener(\"submit\", this.confirm);\n } else if (isHTMLAnchorElement(element)) {\n element.addEventListener(\"click\", this.confirm);\n } else {\n throw new Error(\"Can't handle confirmation on attached element\");\n }\n });\n }\n\n confirm(event: Event) {\n if (!(window.confirm(this.message))) {\n event.preventDefault();\n this.dispatch(this.el, \"confirm:cancelled\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class ConfirmNavigationController extends BaseController {\n\n static values = {_message: String};\n\n declare readonly _messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get _message(): string {\n return this.hasMessageValue ? this._messageValue : \"Do you want to leave this page? Changes you made may not be saved\";\n }\n\n initialize() {\n this.handlePopstate = this.handlePopstate.bind(this);\n this.handleTurboNavigation = this.handleTurboNavigation.bind(this);\n }\n\n connect() {\n window.onbeforeunload = () => this._message;\n window.addEventListener(\"popstate\", this.handlePopstate);\n window.addEventListener(\"submit\", () => {\n window.removeEventListener(\"popstate\", this.handlePopstate);\n window.onbeforeunload = null;\n });\n window.addEventListener(\"turbolinks:before-visit\", this.handleTurboNavigation);\n window.addEventListener(\"turbo:before-visit\", this.handleTurboNavigation);\n }\n\n handlePopstate(_event: PopStateEvent) {\n return false;\n }\n\n handleTurboNavigation(event: Event) {\n if (!confirm(this._message)) {\n event.preventDefault();\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DebugController extends BaseController {\n\n static targets = [\"test\"];\n declare testTargets: HTMLElement[];\n\n connect() {\n console.log(\"Debug Controller\", this, this.testTargets);\n }\n}\n","import {BaseController} from \"./base_controller\";\nimport {isElementCheckable, isHTMLSelectElement} from \"./utilities/elements\";\n\nexport class DetectDirtyController extends BaseController {\n\n loadValue: null | string | boolean = null;\n\n initialize() {\n this.checkDirty = this.checkDirty.bind(this);\n }\n\n connect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n this.loadValue = element.checked;\n } else {\n this.loadValue = element.value;\n }\n this.checkDirty();\n element.addEventListener(\"input\", this.checkDirty);\n element.addEventListener(\"change\", this.checkDirty);\n }\n\n disconnect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n element.removeEventListener(\"input\", this.checkDirty);\n element.removeEventListener(\"change\", this.checkDirty);\n }\n\n restore() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n element.checked = element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n options.forEach((option) => {\n option.selected = option.value == this.loadValue;\n });\n } else {\n options.forEach((option) => option.selected = option.defaultSelected);\n }\n Array.from(element.options).forEach(option => option.selected = option.defaultSelected);\n } else {\n element.value = element.defaultValue;\n }\n }\n\n private checkDirty(_event?: Event) {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\n let dirty: boolean;\n if (isElementCheckable(element)) {\n dirty = element.checked != element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n dirty = element.value != this.loadValue;\n } else {\n dirty = options.some((option) => option.selected != option.defaultSelected);\n }\n } else {\n dirty = element.value != element.defaultValue;\n }\n\n if (dirty) {\n element.setAttribute(\"data-dirty\", \"true\");\n } else {\n element.removeAttribute(\"data-dirty\");\n }\n }\n\n}\n\nexport function isDirty(element: HTMLElement) {\n return element.hasAttribute(\"data-dirty\");\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class DisableInputsController extends BaseController {\r\n\r\n static targets = [\"disabler\", \"disable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasDisablerTarget: boolean;\r\n declare readonly disablerTarget: HTMLInputElement;\r\n declare readonly disableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasDisablerTarget && this.disablerTarget.checked) {\r\n this.disableInputs();\r\n } else {\r\n this.enableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.disableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.disableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from './base_controller';\nimport {isHTMLAnchorElement, isHTMLButtonElement, isHTMLInputElement} from \"./utilities/elements\";\n\nexport class DisableWithController extends BaseController {\n\n static values = {\n message: String,\n timeout: Number,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n declare readonly timeoutValue: number;\n declare readonly hasTimeoutValue: boolean;\n\n _cacheText?: string;\n _timeoutHandle?: ReturnType;\n\n get _message(): string {\n return this.hasMessageValue ? this.messageValue : 'Submitting...';\n }\n\n get _timeout(): number {\n return this.hasTimeoutValue ? this.timeoutValue : 1000;\n }\n\n initialize() {\n this.enable = this.enable.bind(this);\n this.disable = this.disable.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n this.el.addEventListener(\"click\", this.disable);\n });\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n disable(event?: Event) {\n let element = this.el;\n\n if (this._isDisabled(element)) {\n event?.preventDefault();\n event?.stopImmediatePropagation();\n } else {\n this._cacheText = this._getElText(element);\n this._setElText(element, this._message);\n this._disable(element);\n setTimeout(this.enable, this._timeout);\n }\n }\n\n enable(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n if (this._isDisabled(element)) {\n this._setElText(element, this._cacheText!);\n this._enable(element);\n }\n }\n\n _isDisabled(el: HTMLElement): boolean {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n return el.disabled;\n } else {\n return el.dataset.disabled == \"true\";\n }\n }\n\n _getElText(el: HTMLElement): string {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n return el.value;\n } else {\n return el.innerText;\n }\n }\n\n _setElText(el: HTMLElement, str: string) {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n el.value = str;\n } else if (isHTMLButtonElement(el) || isHTMLAnchorElement(el)) {\n el.innerText = str;\n }\n }\n\n _disable(el: HTMLElement) {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n el.disabled = true;\n } else {\n el.dataset.disabled = \"true\";\n }\n }\n\n _enable(el: HTMLElement) {\n if (isHTMLInputElement(el) && el.type == \"submit\" || isHTMLButtonElement(el)) {\n el.disabled = false;\n } else {\n el.dataset.disabled = undefined;\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DismissableController extends BaseController {\n\n dismiss() {\n this.el.remove();\n }\n\n}\n","import {BaseController} from './base_controller';\r\nimport _get from \"lodash-es/get\";\r\nimport _set from \"lodash-es/set\";\r\n\r\nexport class ElementSaveController extends BaseController {\r\n\r\n static targets = [\r\n \"element\",\r\n ];\r\n static values = {\r\n id: String,\r\n attributes: String,\r\n restoreOnLoad: Boolean,\r\n };\r\n declare readonly hasElementTarget: boolean;\r\n declare readonly elementTarget: HTMLElement;\r\n declare readonly elementTargets: HTMLElement[];\r\n declare readonly idValue: string;\r\n declare readonly attributesValue: string;\r\n declare readonly hasIdValue: boolean;\r\n declare readonly restoreOnLoadValue: boolean;\r\n declare readonly hasRestoreOnLoadValue: boolean;\r\n\r\n get _id() {\r\n if (this.hasIdValue) {\r\n return this.idValue;\r\n }\r\n let elementID = this.el.id;\r\n\r\n if (elementID !== \"\") {\r\n return elementID;\r\n } else {\r\n throw new Error(`No ID value to uniquely identify this element. Please either specify data-${this.identifier}-id-value or give this element an 'id' attribute. `);\r\n }\r\n }\r\n\r\n get _uniqueIdentifier() {\r\n const url = location.href;\r\n return `${url} ${this._id}`;\r\n }\r\n\r\n get _restoreOnLoad() {\r\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\r\n }\r\n\r\n get _element(): HTMLElement {\r\n return this.hasElementTarget ? this.elementTarget : this.el;\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n if (this._restoreOnLoad) {\r\n this.restore();\r\n }\r\n });\r\n }\r\n\r\n clear(event?: Event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n localStorage.removeItem(this._uniqueIdentifier);\r\n this.dispatch(this._element, `element-save:cleared`);\r\n }\r\n\r\n save(event?: Event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n let element = this._element;\r\n let attributes = this.attributesValue.split(\" \");\r\n let data: { [idx: string]: any } = {};\r\n attributes.forEach((attr: string) => data[attr] = _get(element, attr));\r\n localStorage.setItem(this._uniqueIdentifier, JSON.stringify(data));\r\n this.dispatch(element, `element-save:save:success`);\r\n }\r\n\r\n restore(event?: Event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n let element = this._element;\r\n if (localStorage.getItem(this._uniqueIdentifier)) {\r\n const savedData = JSON.parse(localStorage.getItem(this._uniqueIdentifier)!); // get and parse the saved data from localStorage\r\n Object.keys(savedData).forEach((attr: string) => {\r\n _set(element as HTMLElement, attr, savedData[attr]);\r\n });\r\n this.dispatch(element, `element-save:restore:success`);\r\n } else {\r\n this.dispatch(element, `element-save:restore:empty`);\r\n }\r\n }\r\n\r\n}\r\n","import {useMutation} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class EmptyDomController extends BaseController {\n\n static classes = [\"empty\", \"notEmpty\"];\n static values = {scopeSelector: String};\n\n declare hasEmptyClass: boolean;\n declare emptyClass: string;\n declare hasNotEmptyClass: boolean;\n declare notEmptyClass: string;\n\n declare hasScopeSelectorValue: boolean;\n declare scopeSelectorValue: string;\n\n get emptyClasses(): string[] {\n return this.emptyClass.split(\" \");\n }\n\n get notEmptyClasses(): string[] {\n return this.notEmptyClass.split(\" \");\n }\n\n get children(): Element[] {\n let element = this.el;\n if (this.hasScopeSelectorValue) {\n return Array.from(element.querySelectorAll(this.scopeSelectorValue));\n } else {\n return Array.from(element.children);\n }\n }\n\n connect() {\n useMutation(this, {element: this.el, childList: true});\n this.checkEmpty();\n }\n\n mutate(entries: MutationRecord[]) {\n this.checkEmpty();\n }\n\n checkEmpty() {\n let element = this.el;\n let children = this.children;\n if (children.length === 0) {\n this._removeNotEmptyClasses();\n this._addEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:empty\");\n } else {\n this._addNotEmptyClasses();\n this._removeEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:not-empty\", {detail: {count: children.length}});\n }\n }\n\n private _removeEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.remove(...this.emptyClasses);\n }\n }\n\n private _addNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.add(...this.notEmptyClasses);\n }\n }\n\n private _addEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.add(...this.emptyClasses);\n }\n }\n\n private _removeNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.remove(...this.notEmptyClasses);\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class EnableInputsController extends BaseController {\r\n\r\n static targets = [\"enabler\", \"enable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasEnablerTarget: boolean;\r\n declare readonly enablerTarget: HTMLInputElement;\r\n declare readonly enableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasEnablerTarget && this.enablerTarget.checked) {\r\n this.enableInputs();\r\n } else {\r\n this.disableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.enableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.enableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class FallbackImageController extends BaseController {\r\n\r\n static values = {placeholder: String};\r\n\r\n declare readonly placeholderValue: string;\r\n declare readonly hasPlaceholderValue: boolean;\r\n\r\n connect() {\r\n let element = this.el as HTMLImageElement;\r\n\r\n element.onerror = () => {\r\n if (this.hasPlaceholderValue) {\r\n element.src = this.placeholderValue;\r\n } else {\r\n element.style.display = \"none\";\r\n }\r\n };\r\n }\r\n\r\n}\r\n","import {BaseController} from './base_controller';\r\nimport {isHTMLFormElement, isHTMLInputElement} from \"./utilities/elements\";\r\n\r\ninterface FormSavePayload {\r\n [idx: string]: {\r\n [idx: string]: string | boolean\r\n }\r\n}\r\n\r\nexport class FormSaveController extends BaseController {\r\n\r\n static values = {\r\n id: String,\r\n restoreOnLoad: Boolean,\r\n clearOnSubmit: Boolean,\r\n };\r\n\r\n declare readonly idValue: string;\r\n declare readonly hasIdValue: boolean;\r\n declare readonly restoreOnLoadValue: boolean;\r\n declare readonly hasRestoreOnLoadValue: boolean;\r\n declare readonly clearOnSubmitValue: boolean;\r\n declare readonly hasClearOnSubmitValue: boolean;\r\n\r\n get formID() {\r\n if (this.hasIdValue) {\r\n return this.idValue;\r\n }\r\n let elementID = (this.el as HTMLFormElement).id;\r\n\r\n if (elementID !== \"\") {\r\n return elementID;\r\n } else {\r\n throw new Error(`No ID value to uniquely identify this form. Please either specify data-${this.identifier}-id-value or give this form an 'id' attribute. `);\r\n }\r\n }\r\n\r\n get formIdentifier() {\r\n const url = location.href;\r\n return `${url} ${this.formID}`;\r\n }\r\n\r\n get formElements() {\r\n return (this.el as HTMLFormElement).elements;\r\n }\r\n\r\n get formData(): FormSavePayload {\r\n let data: FormSavePayload = {[this.formIdentifier]: {}};\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name.length > 0) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n data[this.formIdentifier][el.name] = el.checked;\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.checked) {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n } else {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n get restoreOnLoad() {\r\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\r\n }\r\n\r\n get clearOnSubmit() {\r\n return this.hasClearOnSubmitValue ? this.clearOnSubmitValue : true;\r\n }\r\n\r\n initialize() {\r\n this._clear = this._clear.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n let element = this.el;\r\n if (!isHTMLFormElement(element)) {\r\n throw new Error('Expected controller to be mounted on a form element.');\r\n }\r\n\r\n if (this.restoreOnLoad) {\r\n this.restore();\r\n }\r\n if (this.clearOnSubmit) {\r\n this.el.addEventListener('submit', this._clear);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.clearOnSubmit) {\r\n this.el.removeEventListener('submit', this._clear);\r\n }\r\n }\r\n\r\n _clear() {\r\n localStorage.removeItem(this.formIdentifier);\r\n this.dispatch(this.el, `form-save:cleared`);\r\n }\r\n\r\n clear(event?: Event) {\r\n event?.preventDefault();\r\n this._clear();\r\n }\r\n\r\n save(event: Event) {\r\n event.preventDefault();\r\n let data = this.formData;\r\n localStorage.setItem(this.formIdentifier, JSON.stringify(data[this.formIdentifier]));\r\n this.dispatch(this.el, `form-save:save:success`);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n if (localStorage.getItem(this.formIdentifier)) {\r\n const savedData = JSON.parse(localStorage.getItem(this.formIdentifier)!); // get and parse the saved data from localStorage\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name in savedData) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n el.checked = savedData[el.name];\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.value == savedData[el.name]) {\r\n el.checked = true;\r\n }\r\n } else {\r\n el.value = savedData[el.name];\r\n }\r\n }\r\n }\r\n this.dispatch(this.el, `form-save:restore:success`);\r\n } else {\r\n this.dispatch(this.el, `form-save:restore:empty`);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {useIntersection} from \"stimulus-use\";\n\nexport class IntersectionController extends BaseController {\n\n static values = {threshold: String};\n\n declare readonly isVisible: boolean;\n declare readonly thresholdValue: string;\n declare readonly hasThresholdValue: boolean;\n\n get threshold(): number[] {\n if (this.hasThresholdValue) {\n return this.thresholdValue.split(',').map(val => Number.parseFloat(val.trim())).filter(val => val >= 0 && val <= 1);\n } else {\n return [0, 1];\n }\n }\n\n connect() {\n useIntersection(this, {\n threshold: this.threshold,\n element: this.el,\n });\n }\n\n appear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:appear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n disappear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:disappear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n}\n","import {useIntersection} from \"stimulus-use\";\nimport {AsyncBlockController} from \"./async_block_controller\";\n\nexport class LazyBlockController extends AsyncBlockController {\n\n declare observe: () => void;\n declare unobserve: () => void;\n declare isVisible: boolean;\n declare disappear: () => void;\n\n connect() {\n let element = this.el;\n\n if (\"IntersectionObserver\" in window) {\n [this.observe, this.unobserve] = useIntersection(this, {element, threshold: 0.3});\n } else {\n // Client doesn't support intersection observer, fallback to pre-loading\n this.loadContent();\n }\n }\n\n appear(entry: IntersectionObserverEntry) {\n if (entry.target === this.el && entry.isIntersecting) {\n this.loadContent();\n if (this.unobserve) {\n this.unobserve();\n }\n }\n }\n\n}\n","const smoothSupported = \"scrollBehavior\" in document.documentElement.style;\r\nlet smoothPolyfilled: boolean;\r\n\r\nexport async function scrollToElement(element: Element, {behavior = \"smooth\", block = \"start\", inline = \"nearest\"}: ScrollIntoViewOptions = {}) {\r\n if (behavior == \"smooth\" && !smoothSupported) {\r\n await polyfillSmooth();\r\n }\r\n element.scrollIntoView({behavior, block, inline});\r\n}\r\n\r\nasync function polyfillSmooth() {\r\n const {polyfill} = await import(/* webpackChunkName: \"smoothscroll-polyfill\" */ \"smoothscroll-polyfill\");\r\n if (smoothPolyfilled) {\r\n return;\r\n }\r\n smoothPolyfilled = true;\r\n polyfill();\r\n}\r\n\r\nexport function getScrollParent(node: HTMLElement | null): HTMLElement | null {\r\n if (!node) {\r\n return null;\r\n }\r\n const overflowY = getComputedStyle(node).overflowY;\r\n const isScrollable = overflowY !== \"visible\" && overflowY !== \"hidden\";\r\n\r\n if (isScrollable && node.scrollHeight >= node.clientHeight) {\r\n return node;\r\n }\r\n\r\n return getScrollParent(node.parentElement) || document.body;\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\nimport dialogPolyfill from \"dialog-polyfill\";\r\n\r\nexport class LightboxImageController extends BaseController {\r\n\r\n static values = {\r\n src: String,\r\n srcSet: String,\r\n sizes: String,\r\n };\r\n static classes = [\"modal\", \"image\"];\r\n\r\n declare readonly hasModalClass: boolean;\r\n declare readonly modalClass: string;\r\n declare readonly hasImageClass: boolean;\r\n declare readonly imageClass: string;\r\n declare readonly hasSrcValue: boolean;\r\n declare readonly srcValue: string;\r\n declare readonly hasSrcSetValue: boolean;\r\n declare readonly srcSetValue: string;\r\n declare readonly hasSizesValue: boolean;\r\n declare readonly sizesValue: string;\r\n _dialog: HTMLDialogElement | null = null;\r\n\r\n get src(): string {\r\n return this.hasSrcValue ? this.srcValue : (this.el as HTMLImageElement).src;\r\n }\r\n\r\n get srcSet(): string {\r\n return this.hasSrcSetValue ? this.srcSetValue : (this.el as HTMLImageElement).srcset;\r\n }\r\n\r\n get sizes(): string {\r\n return this.hasSizesValue ? this.sizesValue : (this.el as HTMLImageElement).sizes;\r\n }\r\n\r\n get modalClassName() {\r\n return this.hasModalClass ? this.modalClass : \"image-lightbox-dialog\";\r\n }\r\n\r\n get imageClassName() {\r\n return this.hasImageClass ? this.imageClass : \"image-lightbox-image\";\r\n }\r\n\r\n initialize() {\r\n this.open = this.open.bind(this);\r\n this.close = this.close.bind(this);\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n open() {\r\n let element = this.el as HTMLImageElement;\r\n if (this._dialog) {\r\n return;\r\n }\r\n this._dialog = document.createElement(\"dialog\");\r\n\r\n let image = document.createElement(\"img\") as HTMLImageElement;\r\n image.className = this.imageClassName;\r\n image.src = this.src;\r\n image.srcset = this.srcSet;\r\n image.sizes = this.sizes;\r\n this._dialog.appendChild(image);\r\n\r\n element.insertAdjacentElement(\"afterend\", this._dialog);\r\n dialogPolyfill.registerDialog(this._dialog);\r\n this._dialog.className = this.modalClassName;\r\n this._dialog.showModal();\r\n scrollToElement(this._dialog, {behavior: \"smooth\", block: \"end\"}).catch(() => this._dialog!.scrollIntoView(false));\r\n this._dialog.addEventListener(\"click\", this.close);\r\n this._dialog.addEventListener(\"cancel\", this.close);\r\n this._dialog.addEventListener(\"close\", this.close);\r\n }\r\n\r\n close() {\r\n if (this._dialog) {\r\n this._dialog.close();\r\n this._dialog.remove();\r\n this._dialog = null;\r\n scrollToElement(this.el, {behavior: \"smooth\", block: \"end\"}).catch(() => this.el.scrollIntoView(false));\r\n }\r\n }\r\n\r\n} ","import {BaseController} from \"./base_controller\";\n\nexport class LimitedSelectionCheckboxesController extends BaseController {\n\n static targets = [\"input\", \"error\"];\n static values = {max: Number, message: String};\n\n declare readonly hasErrorTarget: boolean;\n declare readonly errorTarget: HTMLElement;\n declare readonly inputTargets: HTMLInputElement[];\n declare readonly maxValue: number;\n declare readonly messageValue: string;\n\n initialize() {\n this.handleInputs = this.handleInputs.bind(this);\n }\n\n connect() {\n this.inputTargets.forEach((el) => el.addEventListener(\"change\", this.handleInputs));\n }\n\n disconnect() {\n this.inputTargets.forEach((el) => el.removeEventListener(\"change\", this.handleInputs));\n }\n\n handleInputs(event: Event) {\n let tickedInputs = this.inputTargets.reduce((previousValue, el) => el.checked ? previousValue + 1 : previousValue, 0);\n let target = event.target as HTMLInputElement;\n if (tickedInputs > this.maxValue) {\n event.preventDefault();\n target.checked = false;\n this.dispatch(target, \"change\");\n this.dispatch(target, \"limited-selection:too-many\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = this.messageValue;\n }\n } else {\n this.dispatch(target, \"limited-selection:selection\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = \"\";\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class NestedFormController extends BaseController {\n static targets = ['target', 'template'];\n static values = {\n insertMode: String,\n wrapperClass: String,\n };\n\n declare readonly targetTarget: HTMLElement;\n declare readonly templateTarget: HTMLTemplateElement | HTMLScriptElement;\n\n declare readonly wrapperClassValue: string;\n declare readonly hasWrapperSelectorValue: boolean;\n declare readonly insertModeValue: InsertPosition;\n declare readonly hasInsertModeValue: boolean;\n\n get wrapperClass() {\n return this.hasWrapperSelectorValue ? this.wrapperClassValue : 'nested-fields';\n }\n\n get insertMode(): InsertPosition {\n return this.hasInsertModeValue ? this.insertModeValue : 'beforeend';\n }\n\n connect() {\n this.checkStructure();\n }\n\n add(event?: Event) {\n event?.preventDefault();\n\n const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, this.generateID());\n this.targetTarget.insertAdjacentHTML(this.insertMode, content);\n }\n\n remove(event: Event) {\n event.preventDefault();\n const wrapper: HTMLElement | null = (event.target as HTMLElement).closest(`.${this.wrapperClass}`);\n if (wrapper == null) {\n throw new Error(`#remove was clicked from outside of a child record. Could not find an ancestor with class .${this.wrapperClass}`);\n }\n\n if (wrapper.dataset.newRecord === 'true') {\n wrapper.remove();\n } else {\n wrapper.style.display = 'none';\n let destroyInput = wrapper.querySelector(\"input[name*='_destroy']\") as HTMLInputElement | null;\n if (destroyInput == null) {\n throw new Error(`Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.`);\n }\n\n destroyInput.value = \"1\";\n }\n }\n\n generateID(): string {\n return new Date().getTime().toString() + Math.random().toString().slice(2);\n }\n\n private checkStructure() {\n let template = this.templateTarget.innerHTML;\n\n if (template.indexOf('NEW_RECORD')) {\n 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`\");\n }\n }\n}","import {BaseController} from \"./base_controller\";\n\nexport class PasswordConfirmController extends BaseController {\n\n static targets = [\"password\"];\n static classes = [\"error\"];\n\n declare readonly passwordTargets: HTMLInputElement[];\n\n declare readonly errorClass: string;\n declare readonly hasErrorClass: boolean;\n\n initialize() {\n this.checkPasswordsMatch = this.checkPasswordsMatch.bind(this);\n }\n\n connect() {\n this.passwordTargets.forEach((el) => el.addEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n disconnect() {\n this.passwordTargets.forEach((el) => el.removeEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n private allPasswordsMatch(): boolean {\n let values = new Set(this.passwordTargets.map(el => el.value)); // Create a unique set of the password values\n 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)\n }\n\n private checkPasswordsMatch() {\n let element = this.el;\n if (this.allPasswordsMatch()) {\n this.dispatch(element, \"password-confirm:match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.remove(this.errorClass));\n }\n } else {\n this.dispatch(element, \"password-confirm:no-match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.add(this.errorClass));\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class PasswordPeekController extends BaseController {\n\n static targets = [\"password\"];\n\n declare readonly passwordTarget: HTMLInputElement;\n\n peak(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"text\";\n }\n\n hide(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"password\";\n }\n\n toggle(event?: Event) {\n event?.preventDefault();\n if (this.passwordTarget.type === \"password\") {\n this.peak();\n } else {\n this.hide();\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class RemoteFormController extends BaseController {\r\n static targets = [];\r\n\r\n static values = {selector: String};\r\n\r\n declare readonly hasSelectorValue: boolean;\r\n declare readonly selectorValue: string;\r\n\r\n get selector(): string {\r\n return this.hasSelectorValue ? this.selectorValue : `[data-controller~=\"${this.identifier}\"]`;\r\n }\r\n\r\n replace(event: { detail: [Element, any, XMLHttpRequest] }) {\r\n const [data, status, xhr] = event.detail;\r\n if (data instanceof Node) {\r\n let new_element = data.querySelector(this.selector);\r\n\r\n if (new_element == null) {\r\n throw new Error(`expected new form DOM with [data-controller=\"${this.identifier}\"] to be present in returned payload`);\r\n }\r\n\r\n let parentNode = this.el.parentNode;\r\n if (parentNode == null) {\r\n throw new Error('expected form to have a DOM parent, could not execute replaceChild');\r\n }\r\n parentNode.replaceChild(new_element, this.el);\r\n } else {\r\n console.log('Unknown', data);\r\n }\r\n }\r\n}\r\n","import {useDebounce, useWindowResize} from \"stimulus-use\";\nimport {WindowResizePayload} from \"stimulus-use/dist/use-window-resize/use-window-resize\";\nimport {BaseController} from \"./base_controller\";\n\ninterface ResponsiveIframeMessage {\n name: string,\n height: number,\n}\n\nexport class ResponsiveIframeWrapperController extends BaseController {\n\n initialize() {\n this.messageReceived = this.messageReceived.bind(this);\n }\n\n connect() {\n window.addEventListener(\"message\", this.messageReceived);\n }\n\n disconnect() {\n window.removeEventListener(\"message\", this.messageReceived);\n }\n\n messageReceived(message: MessageEvent) {\n let data = message.data;\n if (data.hasOwnProperty(\"name\") && data.name === \"iframe-body\" && data.hasOwnProperty(\"height\")) {\n this.resize(data.height);\n }\n }\n\n resize(height: number) {\n (this.el as HTMLIFrameElement).style.height = `${height}px`;\n }\n\n}\n\nexport class ResponsiveIframeBodyController extends BaseController {\n\n static debounces = [\"postUpdate\"];\n\n declare observe: () => void;\n declare unobserve: () => void;\n\n connect() {\n // If this Window is inside a frame\n if (window.self !== window.top) {\n useWindowResize(this);\n useDebounce(this, {});\n this.postUpdate();\n } else {\n // Not an iframe\n }\n }\n\n windowResize(payload: WindowResizePayload) {\n this.postUpdate();\n };\n\n postUpdate() {\n let payload: ResponsiveIframeMessage = {name: \"iframe-body\", height: this.getHeight()};\n window.parent.postMessage(\n payload,\n \"*\",\n );\n }\n\n getHeight(): number {\n const body = document.body;\n const html = document.documentElement;\n\n // Get the largest height out of body and html's various height measurements\n return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n }\n\n}\n","import camelCase from \"camelcase\";\r\nimport {BaseController} from \"../base_controller\";\r\n\r\nexport class EphemeralController extends BaseController {\r\n\r\n _cleanupSelf() {\r\n this.cleanup(this.el);\r\n }\r\n\r\n cleanup(element: HTMLElement) {\r\n element.dataset.controller = element.dataset.controller?.replaceAll(new RegExp(`(\\s|^)${this.identifier}(\\s|$)`, \"g\"), \"\") || \"\";\r\n if (element.dataset.controller == \"\") {\r\n // If there are no controllers left, remove the attribute\r\n delete element.dataset.controller;\r\n }\r\n\r\n let substringIdentifierValueRegex = new RegExp(`(\\s|^)${this.identifier}\\\\..+?(\\s|$)`, \"g\");\r\n element.dataset.target = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-target`)];\r\n if (element.dataset.target == \"\") {\r\n // If there are no targets left, remove the attribute\r\n delete element.dataset.target;\r\n }\r\n\r\n element.dataset.action = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-action`)];\r\n if (element.dataset.action == \"\") {\r\n // If there are no actions left, remove the attribute\r\n delete element.dataset.action;\r\n }\r\n\r\n // @ts-ignore\r\n let values = this.constructor.values;\r\n if (values) {\r\n Object.keys(values).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-value`)]);\r\n }\r\n\r\n // @ts-ignore\r\n let classes = this.constructor.classes;\r\n if (classes) {\r\n Object.keys(classes).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-class`)]);\r\n }\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\n\r\nexport class ScrollIntoFocusController extends EphemeralController {\r\n\r\n static values = {\r\n behavior: String,\r\n block: String,\r\n inline: String,\r\n };\r\n\r\n declare behaviorValue: ScrollBehavior;\r\n declare hasBehaviorValue: boolean;\r\n declare blockValue: ScrollLogicalPosition;\r\n declare hasBlockValue: boolean;\r\n declare inlineValue: ScrollLogicalPosition;\r\n declare hasInlineValue: boolean;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Attempt smooth scrolling, with polyfill\r\n scrollToElement(\r\n this.el,\r\n {\r\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\r\n block: this.hasBlockValue ? this.blockValue : \"center\",\r\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\r\n },\r\n ).catch(() => this.el.scrollIntoView()); // Fallback to snap-scrolling\r\n this._cleanupSelf();\r\n });\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToBottomController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"end\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\nimport {scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToController extends BaseController {\n\n static values = {\n selector: String,\n behavior: String,\n block: String,\n inline: String,\n };\n\n declare selectorValue: string;\n declare behaviorValue: ScrollBehavior;\n declare hasBehaviorValue: boolean;\n declare blockValue: ScrollLogicalPosition;\n declare hasBlockValue: boolean;\n declare inlineValue: ScrollLogicalPosition;\n declare hasInlineValue: boolean;\n\n scroll() {\n let target = document.querySelector(this.selectorValue);\n if (!target) {\n console.warn(`Could not find target for '${this.selectorValue}'`);\n return;\n }\n\n scrollToElement(\n target!,\n {\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\n block: this.hasBlockValue ? this.blockValue : \"center\",\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\n },\n ).catch(() => target!.scrollIntoView()); // Fallback to snap-scrolling\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToTopController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"start\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class SelfDestructController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n timeout: null | ReturnType = null;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Only start countdown on first paint\r\n this.timeout = setTimeout(() => this.el.remove(), this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.timeout) {\r\n clearTimeout(this.timeout);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class StickyController extends BaseController {\r\n\r\n static classes = [\"stuck\"];\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare readonly hasStuckClass: boolean;\r\n declare readonly stuckClass: string;\r\n declare readonly hasModeValue: \"top\" | \"bottom\";\r\n declare readonly modeValue: \"top\" | \"bottom\";\r\n\r\n _magicElement: HTMLDivElement | null = null;\r\n\r\n get _mode(): \"top\" | \"bottom\" {\r\n return this.hasModeValue ? this.modeValue : \"top\";\r\n }\r\n\r\n createMagicElement() {\r\n // Magic element placed next to the sticky el that acts as an external border.\r\n // When the magic element is off the page, we know that the sticky el is \"stuck\"\r\n if (this._magicElement !== null) {\r\n return;\r\n }\r\n\r\n this._magicElement = document.createElement(\"div\");\r\n switch (this._mode) {\r\n case \"top\":\r\n this.el.insertAdjacentElement(\"beforebegin\", this._magicElement);\r\n break;\r\n case \"bottom\":\r\n this.el.insertAdjacentElement(\"afterend\", this._magicElement);\r\n break;\r\n }\r\n }\r\n\r\n connect() {\r\n let element = this.el;\r\n this.createMagicElement();\r\n\r\n const observer = new IntersectionObserver(entries => {\r\n entries.forEach(entry => {\r\n if (entry.target !== this._magicElement) {\r\n return;\r\n }\r\n if (entry.intersectionRatio === 0) {\r\n element.classList.add(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n } else if (entry.intersectionRatio === 1) {\r\n element.classList.remove(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n }\r\n });\r\n\r\n }, {\r\n threshold: [0, 1],\r\n });\r\n observer.observe(this._magicElement!);\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\n\nexport class TeleportController extends EphemeralController {\n\n static values = {target: String, insert: String, immediate: Boolean};\n\n declare readonly immediateValue: boolean;\n declare readonly hasImmediateValue: boolean;\n declare readonly targetValue: string;\n declare readonly hasInsertValue: boolean;\n declare readonly insertValue: InsertPosition | \"replaceOuter\" | \"replaceInner\" | \"prepend\" | \"append\";\n\n connect() {\n if (!this.hasInsertValue) {\n throw new Error(\"`insert` value was not specified\");\n }\n\n requestAnimationFrame(() => {\n if (this.hasImmediateValue && this.immediateValue) {\n this.execute();\n }\n });\n }\n\n execute(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n let destination = document.querySelector(this.targetValue);\n\n if (destination == null) {\n this.dispatch(element, \"teleport:error\");\n return;\n }\n\n let copy = element.cloneNode(true) as HTMLElement;\n this.cleanup(copy);\n\n switch (this.insertValue) {\n case \"beforebegin\":\n case \"beforeend\":\n case \"afterend\":\n case \"afterbegin\":\n destination.insertAdjacentHTML(this.insertValue, copy.outerHTML);\n break;\n case \"replaceOuter\":\n destination.outerHTML = copy.outerHTML;\n break;\n case \"replaceInner\":\n destination.innerHTML = copy.outerHTML;\n break;\n case \"prepend\":\n destination.insertAdjacentHTML(\"afterbegin\", copy.outerHTML);\n break;\n case \"append\":\n destination.insertAdjacentHTML(\"beforeend\", copy.outerHTML);\n break;\n default:\n throw new Error(\"`insert` value was not specified\");\n\n }\n element.remove();\n }\n\n}\n","import {useClickOutside, useHover} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport type ToggleClassMode = \"on\" | \"off\" | \"toggle\"\n\nexport class ToggleClassController extends BaseController {\n\n static targets = [\"toggle\"];\n static values = {\n class: String,\n mouseEnter: String,\n mouseLeave: String,\n clickAway: Boolean,\n initial: String,\n };\n\n declare readonly toggleTargets: HTMLElement[];\n\n declare readonly classValue: string;\n declare readonly hasClassValue: boolean;\n\n declare readonly mouseEnterValue: ToggleClassMode;\n declare readonly hasMouseEnterValue: boolean;\n\n declare readonly mouseLeaveValue: ToggleClassMode;\n declare readonly hasMouseLeaveValue: boolean;\n\n declare readonly clickAwayValue: boolean;\n declare readonly hasClickAwayValue: boolean;\n\n declare readonly initialValue: \"on\" | \"off\";\n declare readonly hasInitialValue: boolean;\n\n connect() {\n if (!this.hasClassValue) {\n throw new Error(\"data-toggle-class-class-value must not be empty\");\n }\n\n if (this.hasMouseEnterValue || this.hasMouseLeaveValue) {\n useHover(this);\n }\n\n if (this.hasClickAwayValue && this.clickAwayValue) {\n useClickOutside(this);\n }\n\n requestAnimationFrame(() => {\n if (this.hasInitialValue) {\n if (this.initialValue === \"on\") {\n this.toggleTargets.forEach((target) => this.elementOn(target));\n } else {\n this.toggleTargets.forEach((target) => this.elementOff(target));\n }\n }\n });\n }\n\n clickOutside() {\n this.toggleTargets.forEach((target) => {\n if (this.elementWasToggled(target)) {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n }\n });\n }\n\n mouseEnter() {\n if (this.hasMouseEnterValue) {\n switch (this.mouseEnterValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n mouseLeave() {\n if (this.hasMouseLeaveValue) {\n switch (this.mouseLeaveValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n on(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOn(target);\n });\n }\n\n off(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOff(target);\n });\n }\n\n toggle(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n });\n }\n\n private elementWasToggled(el: HTMLElement): boolean {\n return el.dataset.toggled == \"true\";\n }\n\n private elementToggleStatus(el: HTMLElement) {\n if (this.elementWasToggled(el)) {\n delete el.dataset.toggled;\n } else {\n el.dataset.toggled = \"true\";\n }\n }\n\n private elementToggle(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass));\n }\n\n private elementOn(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, true));\n }\n\n private elementOff(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, false));\n }\n\n}\n","export function isTurboFrame(element: HTMLElement): element is TurboFrame {\r\n return element.nodeName == \"TURBO-FRAME\";\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {isHTMLAnchorElement} from \"./utilities/elements\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\nexport class TurboFrameRCController extends BaseController {\n\n static values = {\n frameId: String,\n src: String,\n loadingMessage: String,\n };\n\n declare readonly frameIdValue: string;\n declare readonly srcValue: string;\n declare readonly hasSrcValue: boolean;\n declare readonly loadingMessageValue: string;\n declare readonly hasLoadingMessageValue: boolean;\n\n toggle(event?: Event) {\n event?.preventDefault();\n let frame = this._getFrame();\n let frameSrc = frame.src;\n if (frameSrc == null || frameSrc !== this._getSrc()) {\n this._setSrc();\n } else {\n this._clear();\n }\n }\n\n setSrc(event?: Event) {\n event?.preventDefault();\n this._setSrc();\n }\n\n clear(event?: Event) {\n event?.preventDefault();\n this._clear();\n }\n\n private _setSrc() {\n let frame = this._getFrame();\n if (this.hasLoadingMessageValue) {\n frame.innerHTML = this.loadingMessageValue;\n }\n frame.src = this._getSrc();\n }\n\n private _clear() {\n let frame = this._getFrame();\n frame.src = \"\";\n frame.innerHTML = \"\";\n }\n\n private _getFrame(): TurboFrame {\n let frame = document.getElementById(`${this.frameIdValue}`);\n if (frame == null) {\n throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);\n }\n if (!isTurboFrame(frame)) {\n throw new Error(`Element targeted by ID '${this.frameIdValue}'`);\n } else {\n return frame;\n }\n }\n\n private _getSrc(): string {\n let element = this.el;\n if (this.hasSrcValue) {\n return this.srcValue;\n } else if (isHTMLAnchorElement(element)) {\n return element.href;\n } else {\n throw new Error(\"No link given to drive frame to\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\n// noinspection SillyAssignmentJS\nexport class TurboFrameRefreshController extends BaseController {\n\n static values = {\n interval: Number,\n poll: Boolean,\n };\n\n declare readonly intervalValue: number;\n declare readonly pollValue: boolean;\n declare readonly hasPollValue: boolean;\n _timeoutHandle: null | ReturnType = null;\n\n get poll(): boolean {\n return this.hasPollValue ? this.pollValue : false;\n }\n\n initialize() {\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n let element = this.el;\n if (isTurboFrame(element)) {\n if (!!element.src) {\n throw new Error('The provided element has no `src` attribute.');\n }\n } else {\n throw new Error('Expected controller to be mounted on a element.');\n }\n if (this.poll) {\n requestAnimationFrame(() => this._timeoutHandle = setTimeout(() => this.refresh(), this.intervalValue));\n }\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n refresh(event?: Event) {\n event?.preventDefault();\n let element = this.el as TurboFrame;\n element.src = element.src;\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class WordCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this.updateWordCount = this.updateWordCount.bind(this);\n }\n\n connect() {\n this.updateWordCount();\n this.inputTarget.addEventListener(\"input\", this.updateWordCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this.updateWordCount);\n }\n\n updateWordCount() {\n let wordCount = 0;\n let textAreaValue = this.inputTarget.value;\n let matches = textAreaValue.match(/\\S+/g);\n wordCount = (matches && matches.length) || 0;\n this.outputTarget.innerText = wordCount.toString();\n if (this.hasErrorClass) {\n if (this.isValidCount(wordCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n"],"names":["BaseController","context","_this","Proxy","get","obj","prop","returnVal","Reflect","self","test","logProperty","toString","apply","target","thisArg","argArray","log","args","dispatch","element","eventName","options","mergedOptions","Object","assign","bubbles","cancelable","detail","event","CustomEvent","dispatchEvent","functionName","this","application","debug","logger","console","groupCollapsed","identifier","groupEnd","Controller","AppearanceController","initialize","_handleVisibility","bind","connect","window","addEventListener","document","disconnect","removeEventListener","appear","el","away","_documentIsActive","visibilityState","hasFocus","AsyncBlockController","loadContent","hasReplaceTarget","replaceTarget","fetch","endpointValue","then","response","text","html","newEl","createElement","innerHTML","hasSelectorValue","selectedContent","querySelectorAll","selectorValue","replaceWith","children","err","_errorMessage","hasErrorMessageValue","errorMessageValue","endpoint","String","errorMessage","selector","AutoSubmitFormController","handler","forEach","_this2","e","method","controller","methodName","composeEventName","name","eventPrefix","composedName","extendedEvent","type","composed","originalEvent","defaultOptions","useIntersection","targetElement","controllerDisconnect","observer","IntersectionObserver","entries","entry","isIntersecting","isVisible","call","appearEvent","dispatchAppear","disappearEvent","dispatchDisappear","observe","unobserve","[object Object]","events","onlyVisible","StimulusUse","_a","_b","_c","controllerId","stimulusUseDebug","id","dataset","controllerInitialize","controllerConnect","UseHover","super","onEnter","onLeave","hover","enhanceController","UseMutation","error","handleError","mutation","MutationObserver","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","requestAnimationFrame","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","value","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","toggle","refresh","hasSelectAllTarget","selectAllTarget","checkboxTargets","checkbox","preventDefault","checked","checkboxesCount","checkboxesCheckedCount","indeterminate","filter","ClipboardController","supported","queryCommandSupported","hasRemoveUnusedValue","removeUnusedValue","hasFallbackTarget","fallbackTarget","hasCopyTarget","copyTarget","select","sourceTarget","copy","execCommand","isHTMLAnchorElement","nodeName","isHTMLFormElement","isHTMLInputElement","isHTMLButtonElement","isHTMLSelectElement","isElementCheckable","removeUnused","Boolean","ConfirmController","confirm","Error","message","hasMessageValue","messageValue","ConfirmNavigationController","handlePopstate","handleTurboNavigation","onbeforeunload","_message","_event","_messageValue","DebugController","testTargets","DetectDirtyController","checkDirty","loadValue","restore","defaultChecked","Array","from","every","option","defaultSelected","selected","defaultValue","dirty","some","setAttribute","removeAttribute","DisableInputsController","hasDisablerTarget","disablerTarget","disableInputs","enableInputs","shouldClear","hasClearValue","clearValue","disableTargets","_","disabled","clear","DisableWithController","enable","disable","_timeoutHandle","_isDisabled","stopImmediatePropagation","_cacheText","_getElText","_setElText","_disable","_timeout","_enable","str","undefined","hasTimeoutValue","timeoutValue","timeout","DismissableController","dismiss","ElementSaveController","_restoreOnLoad","localStorage","removeItem","_uniqueIdentifier","_element","save","attributes","attributesValue","split","data","attr","_get","setItem","JSON","stringify","getItem","savedData","parse","keys","_set","hasIdValue","idValue","elementID","location","href","_id","hasRestoreOnLoadValue","restoreOnLoadValue","hasElementTarget","elementTarget","restoreOnLoad","EmptyDomController","useMutation","childList","checkEmpty","mutate","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","emptyClasses","hasNotEmptyClass","notEmptyClasses","emptyClass","notEmptyClass","hasScopeSelectorValue","scopeSelectorValue","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormSaveController","_clear","clearOnSubmit","formIdentifier","formData","formElements","formID","elements","hasClearOnSubmitValue","clearOnSubmitValue","IntersectionController","threshold","disappear","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","LazyBlockController","smoothPolyfilled","scrollToElement","behavior","block","inline","scrollIntoView","smoothSupported","Promise","polyfill","polyfillSmooth","documentElement","getScrollParent","node","overflowY","getComputedStyle","parentElement","body","LightboxImageController","open","close","_dialog","image","className","imageClassName","srcset","srcSet","sizes","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","modalClassName","showModal","_this3","hasSrcValue","srcValue","hasSrcSetValue","srcSetValue","hasSizesValue","sizesValue","hasModalClass","modalClass","hasImageClass","imageClass","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","NestedFormController","checkStructure","content","templateTarget","replace","generateID","targetTarget","insertAdjacentHTML","insertMode","wrapper","closest","wrapperClass","newRecord","destroyInput","querySelector","Date","getTime","Math","random","slice","indexOf","hasWrapperSelectorValue","wrapperClassValue","hasInsertModeValue","insertModeValue","PasswordConfirmController","checkPasswordsMatch","passwordTargets","allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","constructor","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","secondsValue","seconds","StickyController","createMagicElement","_magicElement","_mode","intersectionRatio","hasStuckClass","stuckClass","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","ToggleClassController","hasClassValue","hasMouseEnterValue","hasMouseLeaveValue","useHover","hasClickAwayValue","clickAwayValue","onEvent","contains","rect","getBoundingClientRect","windowHeight","windowWidth","clientWidth","left","isElementInViewport","clickOutside","clickOutsideEvent","useClickOutside","hasInitialValue","toggleTargets","initialValue","elementOn","elementOff","elementWasToggled","elementToggleStatus","elementToggle","mouseEnter","mouseEnterValue","on","off","mouseLeave","mouseLeaveValue","_this4","_this5","toggled","classValue","klass","isTurboFrame","class","clickAway","initial","TurboFrameRCController","frameSrc","_getFrame","_getSrc","_setSrc","setSrc","frame","hasLoadingMessageValue","loadingMessageValue","getElementById","frameIdValue","frameId","loadingMessage","TurboFrameRefreshController","poll","intervalValue","hasPollValue","pollValue","interval","WordCountController","updateWordCount","wordCount","matches","match","isValidCount"],"mappings":"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"} \ No newline at end of file diff --git a/dist/stimulus-library.modern.js b/dist/stimulus-library.modern.js index b2ab1b64..4840d013 100644 --- a/dist/stimulus-library.modern.js +++ b/dist/stimulus-library.modern.js @@ -1,2 +1,2 @@ -import{Controller as e}from"stimulus";import t from"dialog-polyfill";import s from"camelcase";function i(){return(i=Object.assign||function(e){for(var t=1;t{let s=Reflect.get(e,t),i=this;if(function(e){switch(e){case"application":case"el":case"element":case"constructor":case"initialize":case"log":case"dispatch":case"data":case"valueDescriptorMap":case"identifier":return!1}return!(/^_.*?$/.test(e)||/^.*?Target(s)?$/.test(e)||/^.*?Value$/.test(e)||/^.*?ValueChanged$/.test(e)||/^.*?Class$/.test(e))}(t.toString())){if("function"==typeof s)return new Proxy(s,{apply:(e,s,a)=>(i.log(t.toString(),{args:a}),Reflect.apply(e,s,a))});this.log(t.toString())}return s}})}get el(){return this.element}dispatch(e,t,s={}){let i=Object.assign({},{bubbles:!0,cancelable:!0,detail:{target:e}},s);i.detail.target&&(i.detail.target=e);let a=new CustomEvent(t,i);e.dispatchEvent(a)}log(e,t={}){if(!this.application.debug)return;let s=console;s.groupCollapsed(`%c${this.identifier} %c#${e}`,"color: #3B82F6","color: unset"),s.log(i({element:this.element},t)),s.groupEnd()}}class n extends a{initialize(){this._handleVisibility=this._handleVisibility.bind(this)}connect(){window.addEventListener("focus",this._handleVisibility),window.addEventListener("blur",this._handleVisibility),document.addEventListener("visibilitychange",this._handleVisibility),this._handleVisibility()}disconnect(){window.removeEventListener("focus",this._handleVisibility),window.removeEventListener("blur",this._handleVisibility),document.removeEventListener("visibilitychange",this._handleVisibility)}appear(){this.dispatch(this.el,"appearance:appear")}away(){this.dispatch(this.el,"appearance:away")}_handleVisibility(){this._documentIsActive()?this.appear():this.away()}_documentIsActive(){return"visible"==document.visibilityState&&document.hasFocus()}}class r extends a{get _errorMessage(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}connect(){this.loadContent()}loadContent(){let e=this,t=this.hasReplaceTarget?this.replaceTarget:this.el;fetch(this.endpointValue).then(e=>e.text()).then(s=>{let i=document.createElement("div");if(i.innerHTML=s,this.hasSelectorValue){let e=i.querySelectorAll(this.selectorValue);t.replaceWith(...e)}else t.replaceWith(...i.children);e.dispatch(t,"ajax:success")}).catch(s=>{t.replaceWith(this._errorMessage),e.dispatch(t,"ajax:error")}).finally(()=>{e.dispatch(t,"ajax:complete")})}}r.targets=["replace"],r.values={endpoint:String,errorMessage:String,selector:String};class l extends a{initialize(){this.handler=this.handler.bind(this)}connect(){this.el.querySelectorAll("input, select, textarea").forEach(e=>e.addEventListener("change",this.handler))}disconnect(){this.el.querySelectorAll("input, select, textarea").forEach(e=>e.removeEventListener("change",this.handler))}handler(e){this.dispatch(this.el,"submit")}}const o=(e,t)=>{const s=e[t];return"function"==typeof s?s:(...e)=>{}},h=(e,t,s)=>{let i=e;return!0===s?i=`${t.identifier}:${e}`:"string"==typeof s&&(i=`${s}:${e}`),i},c=(e,t,s)=>{const{bubbles:i,cancelable:a,composed:n}=t||{bubbles:!0,cancelable:!0,composed:!0};return t&&Object.assign(s,{originalEvent:t}),new CustomEvent(e,{bubbles:i,cancelable:a,composed:n,detail:s})},d={dispatchEvent:!0,eventPrefix:!0},u=(e,t={})=>{const{dispatchEvent:s,eventPrefix:i}=Object.assign({},d,t),a=(null==t?void 0:t.element)||e.element,n=e.disconnect.bind(e),r=new IntersectionObserver(t=>{const[n]=t;n.isIntersecting?(t=>{if(e.isVisible=!0,o(e,"appear").call(e,t),s){const s=h("appear",e,i),n=c(s,null,{controller:e,entry:t});a.dispatchEvent(n)}})(n):e.isVisible&&(t=>{if(e.isVisible=!1,o(e,"disappear").call(e,t),s){const s=h("disappear",e,i),n=c(s,null,{controller:e,entry:t});a.dispatchEvent(n)}})(n)},t),l=()=>{r.observe(a)},u=()=>{r.unobserve(a)};return Object.assign(e,{isVisible:!1,disconnect(){u(),n()}}),l(),[l,u]},g={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},m={debug:!1,logger:console};class p{constructor(e,t={}){var s,i,a;this.log=(e,t)=>{this.debug&&(this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${e}`,"color: #3B82F6","color: unset"),this.logger.log(Object.assign({controllerId:this.controllerId},t)),this.logger.groupEnd())},this.debug=null!==(i=null!==(s=null==t?void 0:t.debug)&&void 0!==s?s:e.application.stimulusUseDebug)&&void 0!==i?i:m.debug,this.logger=null!==(a=null==t?void 0:t.logger)&&void 0!==a?a:m.logger,this.controller=e,this.controllerId=e.element.id||e.element.dataset.id,this.controllerInitialize=e.initialize.bind(e),this.controllerConnect=e.connect.bind(e),this.controllerDisconnect=e.disconnect.bind(e)}}class f extends p{constructor(e,t={}){super(e,t),this.observe=()=>{this.targetElement.addEventListener("mouseenter",this.onEnter),this.targetElement.addEventListener("mouseleave",this.onLeave)},this.unobserve=()=>{this.targetElement.removeEventListener("mouseenter",this.onEnter),this.targetElement.removeEventListener("mouseleave",this.onLeave)},this.onEnter=()=>{o(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{o(this.controller,"mouseLeave").call(this.controller),this.log("mouseLeave",{hover:!1})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}class v extends p{constructor(e,t={}){super(e,t),this.observe=()=>{try{this.observer.observe(this.targetElement,this.options)}catch(e){this.controller.application.handleError(e,"At a minimum, one of childList, attributes, and/or characterData must be true",{})}},this.unobserve=()=>{this.observer.disconnect()},this.mutation=e=>{o(this.controller,"mutate").call(this.controller,e),this.log("mutate",{entries:e})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.options=t,this.observer=new MutationObserver(this.mutation),this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}const b=e=>{const t=t=>{const{innerWidth:s,innerHeight:i}=window,a={height:i||Infinity,width:s||Infinity,event:t};o(e,"windowResize").call(e,a)},s=e.disconnect.bind(e),i=()=>{window.addEventListener("resize",t),t()},a=()=>{window.removeEventListener("resize",t)};return Object.assign(e,{disconnect(){a(),s()}}),i(),[i,a]},E=(e,t=200)=>{let s=null;return function(){const i=arguments,a=this,n=()=>e.apply(a,i);s&&clearTimeout(s),s=setTimeout(n,t)}};class w extends a{initialize(){this._handler=this._handler.bind(this)}connect(){let e=this.el;e.style.resize="none",e.style.boxSizing="border-box",e.addEventListener("input",this._handler),e.addEventListener("focus",this._handler),b(this),requestAnimationFrame(this._handler)}windowResize(){this._handler()}_handler(){this.autosize(this.el)}autosize(e){let t=e.offsetHeight-e.clientHeight;e.style.height="auto",e.style.height=e.scrollHeight+t+"px"}}class y extends a{initialize(){this._updateCharCount=this._updateCharCount.bind(this)}connect(){this._updateCharCount(),this.inputTarget.addEventListener("input",this._updateCharCount)}disconnect(){this.inputTarget.removeEventListener("input",this._updateCharCount)}_updateCharCount(){let e=this.inputTarget.value.length;this.outputTarget.innerText=e.toString(),this.hasErrorClass&&(this._isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))}_isValidCount(e){let t=0,s=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(s=this.maxValue),e>=t&&e<=s}}y.targets=["input","output"],y.values={min:Number,max:Number},y.classes=["error"];class V extends a{get checked(){return this.checkboxTargets.filter(e=>e.checked)}get unchecked(){return this.checkboxTargets.filter(e=>!e.checked)}initialize(){this.toggle=this.toggle.bind(this),this.refresh=this.refresh.bind(this)}connect(){requestAnimationFrame(()=>{this.hasSelectAllTarget&&(this.selectAllTarget.addEventListener("change",this.toggle),this.checkboxTargets.forEach(e=>e.addEventListener("change",this.refresh)),this.refresh())})}disconnect(){this.hasSelectAllTarget&&(this.selectAllTarget.removeEventListener("change",this.toggle),this.checkboxTargets.forEach(e=>e.removeEventListener("change",this.refresh)))}toggle(e){e.preventDefault();let t=e.target;this.checkboxTargets.forEach(e=>e.checked=t.checked)}refresh(){const e=this.checkboxTargets.length,t=this.checked.length;this.selectAllTarget.checked=t>0,this.selectAllTarget.indeterminate=t>0&&t{let e=this.el;if(C(e))e.addEventListener("submit",this.confirm);else{if(!_(e))throw new Error("Can't handle confirmation on attached element");e.addEventListener("click",this.confirm)}})}confirm(e){window.confirm(this.message)||(e.preventDefault(),this.dispatch(this.el,"confirm:cancelled"))}}I.values={message:String};class M extends a{get _message(){return this.hasMessageValue?this._messageValue:"Do you want to leave this page? Changes you made may not be saved"}initialize(){this.handlePopstate=this.handlePopstate.bind(this),this.handleTurboNavigation=this.handleTurboNavigation.bind(this)}connect(){window.onbeforeunload=()=>this._message,window.addEventListener("popstate",this.handlePopstate),window.addEventListener("submit",()=>{window.removeEventListener("popstate",this.handlePopstate),window.onbeforeunload=null}),window.addEventListener("turbolinks:before-visit",this.handleTurboNavigation),window.addEventListener("turbo:before-visit",this.handleTurboNavigation)}handlePopstate(e){return!1}handleTurboNavigation(e){confirm(this._message)||e.preventDefault()}}M.values={_message:String};class D extends a{connect(){console.log("Debug Controller",this,this.testTargets)}}D.targets=["test"];class O extends a{constructor(){super(...arguments),this.loadValue=null}initialize(){this.checkDirty=this.checkDirty.bind(this)}connect(){let e=this.el;this.loadValue=L(e)?e.checked:e.value,this.checkDirty(),e.addEventListener("input",this.checkDirty),e.addEventListener("change",this.checkDirty)}disconnect(){let e=this.el;e.removeEventListener("input",this.checkDirty),e.removeEventListener("change",this.checkDirty)}restore(){let e=this.el;if(L(e))e.checked=e.defaultChecked;else if(k(e)){let t=Array.from(e.options);t.every(e=>!e.defaultSelected)?t.forEach(e=>{e.selected=e.value==this.loadValue}):t.forEach(e=>e.selected=e.defaultSelected),Array.from(e.options).forEach(e=>e.selected=e.defaultSelected)}else e.value=e.defaultValue}checkDirty(e){let t,s=this.el;if(L(s))t=s.checked!=s.defaultChecked;else if(k(s)){let e=Array.from(s.options);t=e.every(e=>!e.defaultSelected)?s.value!=this.loadValue:e.some(e=>e.selected!=e.defaultSelected)}else t=s.value!=s.defaultValue;t?s.setAttribute("data-dirty","true"):s.removeAttribute("data-dirty")}}class A extends a{connect(){this.toggle()}toggle(){this.hasDisablerTarget&&this.disablerTarget.checked?this.disableInputs():this.enableInputs()}disableInputs(){let e=this.hasClearValue&&this.clearValue;this.disableTargets.forEach((t,s)=>{e&&(t.value=""),t.disabled=!0})}enableInputs(){this.disableTargets.forEach((e,t)=>{e.disabled=!1})}}A.targets=["disabler","disable"],A.values={clear:Boolean};class N extends a{get _message(){return this.hasMessageValue?this.messageValue:"Submitting..."}get _timeout(){return this.hasTimeoutValue?this.timeoutValue:1e3}initialize(){this.enable=this.enable.bind(this),this.disable=this.disable.bind(this)}connect(){requestAnimationFrame(()=>{this.el.addEventListener("click",this.disable)})}disconnect(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)}disable(e){let t=this.el;this._isDisabled(t)?(null==e||e.preventDefault(),null==e||e.stopImmediatePropagation()):(this._cacheText=this._getElText(t),this._setElText(t,this._message),this._disable(t),setTimeout(this.enable,this._timeout))}enable(e){null==e||e.preventDefault();let t=this.el;this._isDisabled(t)&&(this._setElText(t,this._cacheText),this._enable(t))}_isDisabled(e){return S(e)&&"submit"==e.type||x(e)?e.disabled:"true"==e.dataset.disabled}_getElText(e){return S(e)&&"submit"==e.type?e.value:e.innerText}_setElText(e,t){S(e)&&"submit"==e.type?e.value=t:(x(e)||_(e))&&(e.innerText=t)}_disable(e){S(e)&&"submit"==e.type||x(e)?e.disabled=!0:e.dataset.disabled="true"}_enable(e){S(e)&&"submit"==e.type||x(e)?e.disabled=!1:e.dataset.disabled=void 0}}N.values={message:String,timeout:Number};class H extends a{dismiss(){this.el.remove()}}class z extends a{get emptyClasses(){return this.emptyClass.split(" ")}get notEmptyClasses(){return this.notEmptyClass.split(" ")}get children(){let e=this.el;return Array.from(this.hasScopeSelectorValue?e.querySelectorAll(this.scopeSelectorValue):e.children)}connect(){((e,t={})=>{new v(this,t)})(0,{element:this.el,childList:!0}),this.checkEmpty()}mutate(e){this.checkEmpty()}checkEmpty(){let e=this.el,t=this.children;0===t.length?(this._removeNotEmptyClasses(),this._addEmptyClasses(),this.dispatch(e,"dom:empty")):(this._addNotEmptyClasses(),this._removeEmptyClasses(),this.dispatch(e,"dom:not-empty",{detail:{count:t.length}}))}_removeEmptyClasses(){this.hasEmptyClass&&this.el.classList.remove(...this.emptyClasses)}_addNotEmptyClasses(){this.hasNotEmptyClass&&this.el.classList.add(...this.notEmptyClasses)}_addEmptyClasses(){this.hasEmptyClass&&this.el.classList.add(...this.emptyClasses)}_removeNotEmptyClasses(){this.hasNotEmptyClass&&this.el.classList.remove(...this.notEmptyClasses)}}z.classes=["empty","notEmpty"],z.values={scopeSelector:String};class $ extends a{connect(){this.toggle()}toggle(){this.hasEnablerTarget&&this.enablerTarget.checked?this.enableInputs():this.disableInputs()}disableInputs(){let e=this.hasClearValue&&this.clearValue;this.enableTargets.forEach((t,s)=>{e&&(t.value=""),t.disabled=!0})}enableInputs(){this.enableTargets.forEach((e,t)=>{e.disabled=!1})}}$.targets=["enabler","enable"],$.values={clear:Boolean};class R extends a{connect(){let e=this.el;e.onerror=()=>{this.hasPlaceholderValue?e.src=this.placeholderValue:e.style.display="none"}}}R.values={placeholder:String};class P extends a{get formID(){if(this.hasIdValue)return this.idValue;let e=this.el.id;if(""!==e)return e;throw new Error(`No ID value to uniquely identify this form. Please either specify data-${this.identifier}-id-value or give this form an 'id' attribute. `)}get formIdentifier(){return`${location.href} ${this.formID}`}get formElements(){return this.el.elements}get formData(){let e={[this.formIdentifier]:{}};for(const t of this.formElements){let s=t;s.name.length>0&&(S(s)&&"checkbox"==s.type?e[this.formIdentifier][s.name]=s.checked:S(s)&&"radio"==s.type?s.checked&&(e[this.formIdentifier][s.name]=s.value):e[this.formIdentifier][s.name]=s.value)}return e}get restoreOnLoad(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}get clearOnSubmit(){return!this.hasClearOnSubmitValue||this.clearOnSubmitValue}initialize(){this._clear=this._clear.bind(this)}connect(){requestAnimationFrame(()=>{if(!C(this.el))throw new Error("Expected controller to be mounted on a form element.");this.restoreOnLoad&&this.restore(),this.clearOnSubmit&&this.el.addEventListener("submit",this._clear)})}disconnect(){this.clearOnSubmit&&this.el.removeEventListener("submit",this._clear)}_clear(){localStorage.removeItem(this.formIdentifier),this.dispatch(this.el,"form-save:cleared")}clear(e){null==e||e.preventDefault(),this._clear()}save(e){e.preventDefault(),localStorage.setItem(this.formIdentifier,JSON.stringify(this.formData[this.formIdentifier])),this.dispatch(this.el,"form-save:save:success")}restore(e){if(null==e||e.preventDefault(),localStorage.getItem(this.formIdentifier)){const e=JSON.parse(localStorage.getItem(this.formIdentifier));for(const t of this.formElements){let s=t;s.name in e&&(S(s)&&"checkbox"==s.type?s.checked=e[s.name]:S(s)&&"radio"==s.type?s.value==e[s.name]&&(s.checked=!0):s.value=e[s.name])}this.dispatch(this.el,"form-save:restore:success")}else this.dispatch(this.el,"form-save:restore:empty")}}P.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};class j extends a{get threshold(){return this.hasThresholdValue?this.thresholdValue.split(",").map(e=>Number.parseFloat(e.trim())).filter(e=>e>=0&&e<=1):[0,1]}connect(){u(this,{threshold:this.threshold,element:this.el})}appear(e){this.dispatch(this.el,"intersection:appear",{detail:{element:this.el}})}disappear(e){this.dispatch(this.el,"intersection:disappear",{detail:{element:this.el}})}}j.values={threshold:String};class F extends r{connect(){let e=this.el;"IntersectionObserver"in window?[this.observe,this.unobserve]=u(this,{element:e,threshold:.3}):this.loadContent()}appear(e){e.target===this.el&&e.isIntersecting&&(this.loadContent(),this.unobserve&&this.unobserve())}}const q="scrollBehavior"in document.documentElement.style;let W;async function B(e,{behavior:t="smooth",block:s="start",inline:i="nearest"}={}){"smooth"!=t||q||await async function(){const{polyfill:e}=await import("smoothscroll-polyfill");W||(W=!0,e())}(),e.scrollIntoView({behavior:t,block:s,inline:i})}function U(e){if(!e)return null;const t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:U(e.parentElement)||document.body}class J extends a{constructor(){super(...arguments),this._dialog=null}get src(){return this.hasSrcValue?this.srcValue:this.el.src}get srcSet(){return this.hasSrcSetValue?this.srcSetValue:this.el.srcset}get sizes(){return this.hasSizesValue?this.sizesValue:this.el.sizes}get modalClassName(){return this.hasModalClass?this.modalClass:"image-lightbox-dialog"}get imageClassName(){return this.hasImageClass?this.imageClass:"image-lightbox-image"}initialize(){this.open=this.open.bind(this),this.close=this.close.bind(this)}connect(){}open(){let e=this.el;if(this._dialog)return;this._dialog=document.createElement("dialog");let s=document.createElement("img");s.className=this.imageClassName,s.src=this.src,s.srcset=this.srcSet,s.sizes=this.sizes,this._dialog.appendChild(s),e.insertAdjacentElement("afterend",this._dialog),t.registerDialog(this._dialog),this._dialog.className=this.modalClassName,this._dialog.showModal(),B(this._dialog,{behavior:"smooth",block:"end"}).catch(()=>this._dialog.scrollIntoView(!1)),this._dialog.addEventListener("click",this.close),this._dialog.addEventListener("cancel",this.close),this._dialog.addEventListener("close",this.close)}close(){this._dialog&&(this._dialog.close(),this._dialog.remove(),this._dialog=null,B(this.el,{behavior:"smooth",block:"end"}).catch(()=>this.el.scrollIntoView(!1)))}}J.values={src:String,srcSet:String,sizes:String},J.classes=["modal","image"];class Y extends a{initialize(){this.handleInputs=this.handleInputs.bind(this)}connect(){this.inputTargets.forEach(e=>e.addEventListener("change",this.handleInputs))}disconnect(){this.inputTargets.forEach(e=>e.removeEventListener("change",this.handleInputs))}handleInputs(e){let t=this.inputTargets.reduce((e,t)=>t.checked?e+1:e,0),s=e.target;t>this.maxValue?(e.preventDefault(),s.checked=!1,this.dispatch(s,"change"),this.dispatch(s,"limited-selection:too-many"),this.hasErrorTarget&&(this.errorTarget.innerHTML=this.messageValue)):(this.dispatch(s,"limited-selection:selection"),this.hasErrorTarget&&(this.errorTarget.innerHTML=""))}}Y.targets=["input","error"],Y.values={max:Number,message:String};class G extends a{get wrapperClass(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}get insertMode(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}connect(){this.checkStructure()}add(e){null==e||e.preventDefault();const t=this.templateTarget.innerHTML.replace(/NEW_RECORD/g,this.generateID());this.targetTarget.insertAdjacentHTML(this.insertMode,t)}remove(e){e.preventDefault();const t=e.target.closest(`.${this.wrapperClass}`);if(null==t)throw new Error(`#remove was clicked from outside of a child record. Could not find an ancestor with class .${this.wrapperClass}`);if("true"===t.dataset.newRecord)t.remove();else{t.style.display="none";let e=t.querySelector("input[name*='_destroy']");if(null==e)throw new Error("Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.");e.value="1"}}generateID(){return(new Date).getTime().toString()+Math.random().toString().slice(2)}checkStructure(){if(this.templateTarget.innerHTML.indexOf("NEW_RECORD"))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`")}}G.targets=["target","template"],G.values={insertMode:String,wrapperClass:String};class K extends a{initialize(){this.checkPasswordsMatch=this.checkPasswordsMatch.bind(this)}connect(){this.passwordTargets.forEach(e=>e.addEventListener("change",this.checkPasswordsMatch))}disconnect(){this.passwordTargets.forEach(e=>e.removeEventListener("change",this.checkPasswordsMatch))}allPasswordsMatch(){let e=new Set(this.passwordTargets.map(e=>e.value));return e.has("")||1==e.size}checkPasswordsMatch(){let e=this.el;this.allPasswordsMatch()?(this.dispatch(e,"password-confirm:match"),this.hasErrorClass&&this.passwordTargets.forEach(e=>e.classList.remove(this.errorClass))):(this.dispatch(e,"password-confirm:no-match"),this.hasErrorClass&&this.passwordTargets.forEach(e=>e.classList.add(this.errorClass)))}}K.targets=["password"],K.classes=["error"];class Q extends a{peak(e){null==e||e.preventDefault(),this.passwordTarget.type="text"}hide(e){null==e||e.preventDefault(),this.passwordTarget.type="password"}toggle(e){null==e||e.preventDefault(),"password"===this.passwordTarget.type?this.peak():this.hide()}}Q.targets=["password"];class X extends a{get selector(){return this.hasSelectorValue?this.selectorValue:`[data-controller~="${this.identifier}"]`}replace(e){const[t,s,i]=e.detail;if(t instanceof Node){let e=t.querySelector(this.selector);if(null==e)throw new Error(`expected new form DOM with [data-controller="${this.identifier}"] to be present in returned payload`);let s=this.el.parentNode;if(null==s)throw new Error("expected form to have a DOM parent, could not execute replaceChild");s.replaceChild(e,this.el)}else console.log("Unknown",t)}}X.targets=[],X.values={selector:String};class Z extends a{initialize(){this.messageReceived=this.messageReceived.bind(this)}connect(){window.addEventListener("message",this.messageReceived)}disconnect(){window.removeEventListener("message",this.messageReceived)}messageReceived(e){let t=e.data;t.hasOwnProperty("name")&&"iframe-body"===t.name&&t.hasOwnProperty("height")&&this.resize(t.height)}resize(e){this.el.style.height=`${e}px`}}class ee extends a{connect(){var e,t,s;window.self!==window.top&&(b(this),t={},null===(s=(e=this).constructor.debounces)||void 0===s||s.forEach(s=>{if("string"==typeof s&&(e[s]=E(e[s],null==t?void 0:t.wait)),"object"==typeof s){const{name:i,wait:a}=s;if(!i)return;e[i]=E(e[i],a||(null==t?void 0:t.wait))}}),this.postUpdate())}windowResize(e){this.postUpdate()}postUpdate(){let e={name:"iframe-body",height:this.getHeight()};window.parent.postMessage(e,"*")}getHeight(){const e=document.body,t=document.documentElement;return Math.max(e.scrollHeight,e.offsetHeight,t.clientHeight,t.scrollHeight,t.offsetHeight)}}ee.debounces=["postUpdate"];class te extends a{_cleanupSelf(){this.cleanup(this.el)}cleanup(e){var t,i,a;e.dataset.controller=(null==(t=e.dataset.controller)?void 0:t.replaceAll(new RegExp(`(s|^)${this.identifier}(s|$)`,"g"),""))||"",""==e.dataset.controller&&delete e.dataset.controller;let n=new RegExp(`(s|^)${this.identifier}\\..+?(s|$)`,"g");e.dataset.target=(null==(i=e.dataset.target)?void 0:i.replaceAll(n,""))||"",delete e.dataset[s(`${this.identifier}-target`)],""==e.dataset.target&&delete e.dataset.target,e.dataset.action=(null==(a=e.dataset.target)?void 0:a.replaceAll(n,""))||"",delete e.dataset[s(`${this.identifier}-action`)],""==e.dataset.action&&delete e.dataset.action;let r=this.constructor.values;r&&Object.keys(r).forEach(t=>delete e.dataset[s(`${this.identifier}-${t}-value`)]);let l=this.constructor.classes;l&&Object.keys(l).forEach(t=>delete e.dataset[s(`${this.identifier}-${t}-class`)])}}class se extends te{connect(){requestAnimationFrame(()=>{B(this.el,{behavior:this.hasBehaviorValue?this.behaviorValue:"smooth",block:this.hasBlockValue?this.blockValue:"center",inline:this.hasInlineValue?this.inlineValue:"center"}).catch(()=>this.el.scrollIntoView()),this._cleanupSelf()})}}se.values={behavior:String,block:String,inline:String};class ie extends a{scroll(e){let t;null==e||e.preventDefault(),t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:U(this.el),null!=t&&B(t,{behavior:"smooth",block:"end"}).catch(()=>t.scrollIntoView(!1))}}ie.values={mode:String};class ae extends a{scroll(){let e=document.querySelector(this.selectorValue);e?B(e,{behavior:this.hasBehaviorValue?this.behaviorValue:"smooth",block:this.hasBlockValue?this.blockValue:"center",inline:this.hasInlineValue?this.inlineValue:"center"}).catch(()=>e.scrollIntoView()):console.warn(`Could not find target for '${this.selectorValue}'`)}}ae.values={selector:String,behavior:String,block:String,inline:String};class ne extends a{scroll(e){let t;null==e||e.preventDefault(),t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:U(this.el),null!=t&&B(t,{behavior:"smooth",block:"start"}).catch(()=>t.scrollIntoView(!1))}}ne.values={mode:String};class re extends a{constructor(){super(...arguments),this.timeout=null}connect(){requestAnimationFrame(()=>{this.timeout=setTimeout(()=>this.el.remove(),1e3*this.secondsValue)})}disconnect(){this.timeout&&clearTimeout(this.timeout)}}re.values={seconds:Number};class le extends a{constructor(){super(...arguments),this._magicElement=null}get _mode(){return this.hasModeValue?this.modeValue:"top"}createMagicElement(){if(null===this._magicElement)switch(this._magicElement=document.createElement("div"),this._mode){case"top":this.el.insertAdjacentElement("beforebegin",this._magicElement);break;case"bottom":this.el.insertAdjacentElement("afterend",this._magicElement)}}connect(){let e=this.el;this.createMagicElement(),new IntersectionObserver(t=>{t.forEach(t=>{t.target===this._magicElement&&(0===t.intersectionRatio?e.classList.add(this.hasStuckClass?this.stuckClass:"stuck"):1===t.intersectionRatio&&e.classList.remove(this.hasStuckClass?this.stuckClass:"stuck"))})},{threshold:[0,1]}).observe(this._magicElement)}}le.classes=["stuck"],le.values={mode:String};class oe extends te{connect(){if(!this.hasInsertValue)throw new Error("`insert` value was not specified");requestAnimationFrame(()=>{this.hasImmediateValue&&this.immediateValue&&this.execute()})}execute(e){null==e||e.preventDefault();let t=this.el,s=document.querySelector(this.targetValue);if(null==s)return void this.dispatch(t,"teleport:error");let i=t.cloneNode(!0);switch(this.cleanup(i),this.insertValue){case"beforebegin":case"beforeend":case"afterend":case"afterbegin":s.insertAdjacentHTML(this.insertValue,i.outerHTML);break;case"replaceOuter":s.outerHTML=i.outerHTML;break;case"replaceInner":s.innerHTML=i.outerHTML;break;case"prepend":s.insertAdjacentHTML("afterbegin",i.outerHTML);break;case"append":s.insertAdjacentHTML("beforeend",i.outerHTML);break;default:throw new Error("`insert` value was not specified")}t.remove()}}oe.values={target:String,insert:String,immediate:Boolean};class he extends a{connect(){if(!this.hasClassValue)throw new Error("data-toggle-class-class-value must not be empty");(this.hasMouseEnterValue||this.hasMouseLeaveValue)&&((e,t={})=>{new f(this,t)})(),this.hasClickAwayValue&&this.clickAwayValue&&((e,t={})=>{const{onlyVisible:s,dispatchEvent:i,events:a,eventPrefix:n}=Object.assign({},g,t),r=a=>{const r=(null==t?void 0:t.element)||e.element;if(!(r.contains(a.target)||!function(e){const t=e.getBoundingClientRect(),s=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return t.top<=s&&t.top+t.height>=0&&t.left<=i&&t.left+t.width>=0}(r)&&s)&&(e.clickOutside&&e.clickOutside(a),i)){const t=h("click:outside",e,n),s=c(t,a,{controller:e});r.dispatchEvent(s)}},l=e.disconnect.bind(e);Object.assign(e,{disconnect(){null==a||a.forEach(e=>{window.removeEventListener(e,r,!1)}),l()}}),null==a||a.forEach(e=>{window.addEventListener(e,r,!1)})})(this),requestAnimationFrame(()=>{this.hasInitialValue&&this.toggleTargets.forEach("on"===this.initialValue?e=>this.elementOn(e):e=>this.elementOff(e))})}clickOutside(){this.toggleTargets.forEach(e=>{this.elementWasToggled(e)&&(this.elementToggleStatus(e),this.elementToggle(e))})}mouseEnter(){if(this.hasMouseEnterValue)switch(this.mouseEnterValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}}mouseLeave(){if(this.hasMouseLeaveValue)switch(this.mouseLeaveValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}}on(e){this.toggleTargets.forEach(e=>{this.elementToggleStatus(e),this.elementOn(e)})}off(e){this.toggleTargets.forEach(e=>{this.elementToggleStatus(e),this.elementOff(e)})}toggle(e){this.toggleTargets.forEach(e=>{this.elementToggleStatus(e),this.elementToggle(e)})}elementWasToggled(e){return"true"==e.dataset.toggled}elementToggleStatus(e){this.elementWasToggled(e)?delete e.dataset.toggled:e.dataset.toggled="true"}elementToggle(e){this.classValue.split(" ").forEach(t=>e.classList.toggle(t))}elementOn(e){this.classValue.split(" ").forEach(t=>e.classList.toggle(t,!0))}elementOff(e){this.classValue.split(" ").forEach(t=>e.classList.toggle(t,!1))}}function ce(e){return"TURBO-FRAME"==e.nodeName}he.targets=["toggle"],he.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};class de extends a{toggle(e){null==e||e.preventDefault();let t=this._getFrame().src;null==t||t!==this._getSrc()?this._setSrc():this._clear()}setSrc(e){null==e||e.preventDefault(),this._setSrc()}clear(e){null==e||e.preventDefault(),this._clear()}_setSrc(){let e=this._getFrame();this.hasLoadingMessageValue&&(e.innerHTML=this.loadingMessageValue),e.src=this._getSrc()}_clear(){let e=this._getFrame();e.src="",e.innerHTML=""}_getFrame(){let e=document.getElementById(`${this.frameIdValue}`);if(null==e)throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);if(ce(e))return e;throw new Error(`Element targeted by ID '${this.frameIdValue}'`)}_getSrc(){let e=this.el;if(this.hasSrcValue)return this.srcValue;if(_(e))return e.href;throw new Error("No link given to drive frame to")}}de.values={frameId:String,src:String,loadingMessage:String};class ue extends a{constructor(){super(...arguments),this._timeoutHandle=null}get poll(){return!!this.hasPollValue&&this.pollValue}initialize(){this.refresh=this.refresh.bind(this)}connect(){let e=this.el;if(!ce(e))throw new Error("Expected controller to be mounted on a element.");if(e.src)throw new Error("The provided element has no `src` attribute.");this.poll&&requestAnimationFrame(()=>this._timeoutHandle=setTimeout(()=>this.refresh(),this.intervalValue))}disconnect(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)}refresh(e){null==e||e.preventDefault();let t=this.el;t.src=t.src}}ue.values={interval:Number,poll:Boolean};class ge extends a{initialize(){this.updateWordCount=this.updateWordCount.bind(this)}connect(){this.updateWordCount(),this.inputTarget.addEventListener("input",this.updateWordCount)}disconnect(){this.inputTarget.removeEventListener("input",this.updateWordCount)}updateWordCount(){let e=0,t=this.inputTarget.value.match(/\S+/g);e=t&&t.length||0,this.outputTarget.innerText=e.toString(),this.hasErrorClass&&(this.isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))}isValidCount(e){let t=0,s=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(s=this.maxValue),e>=t&&e<=s}}ge.targets=["input","output"],ge.values={min:Number,max:Number},ge.classes=["error"];export{n as AppearanceController,r as AsyncBlockController,l as AutoSubmitFormController,w as AutosizeController,y as CharCountController,V as CheckboxSelectAllController,T as ClipboardController,I as ConfirmController,M as ConfirmNavigationController,D as DebugController,O as DetectDirtyController,A as DisableInputsController,N as DisableWithController,H as DismissableController,z as EmptyDomController,$ as EnableInputsController,R as FallbackImageController,P as FormSaveController,j as IntersectionController,F as LazyBlockController,J as LightboxImageController,Y as LimitedSelectionCheckboxesController,G as NestedFormController,K as PasswordConfirmController,Q as PasswordPeekController,X as RemoteFormController,ee as ResponsiveIframeBodyController,Z as ResponsiveIframeWrapperController,se as ScrollIntoFocusController,ie as ScrollToBottomController,ae as ScrollToController,ne as ScrollToTopController,re as SelfDestructController,le as StickyController,oe as TeleportController,he as ToggleClassController,de as TurboFrameRCController,ue as TurboFrameRefreshController,ge as WordCountController}; +import{Controller as e}from"stimulus";import t from"lodash-es/get";import s from"lodash-es/set";import i from"dialog-polyfill";import a from"camelcase";function n(){return(n=Object.assign||function(e){for(var t=1;t{let s=Reflect.get(e,t),i=this;if(function(e){switch(e){case"application":case"el":case"element":case"constructor":case"initialize":case"log":case"dispatch":case"data":case"valueDescriptorMap":case"identifier":return!1}return!(/^_.*?$/.test(e)||/^.*?Target(s)?$/.test(e)||/^.*?Value$/.test(e)||/^.*?ValueChanged$/.test(e)||/^.*?Class$/.test(e))}(t.toString())){if("function"==typeof s)return new Proxy(s,{apply:(e,s,a)=>(i.log(t.toString(),{args:a}),Reflect.apply(e,s,a))});this.log(t.toString())}return s}})}get el(){return this.element}dispatch(e,t,s={}){let i=Object.assign({},{bubbles:!0,cancelable:!0,detail:{target:e}},s);i.detail.target&&(i.detail.target=e);let a=new CustomEvent(t,i);e.dispatchEvent(a)}log(e,t={}){if(!this.application.debug)return;let s=console;s.groupCollapsed(`%c${this.identifier} %c#${e}`,"color: #3B82F6","color: unset"),s.log(n({element:this.element},t)),s.groupEnd()}}class l extends r{initialize(){this._handleVisibility=this._handleVisibility.bind(this)}connect(){window.addEventListener("focus",this._handleVisibility),window.addEventListener("blur",this._handleVisibility),document.addEventListener("visibilitychange",this._handleVisibility),this._handleVisibility()}disconnect(){window.removeEventListener("focus",this._handleVisibility),window.removeEventListener("blur",this._handleVisibility),document.removeEventListener("visibilitychange",this._handleVisibility)}appear(){this.dispatch(this.el,"appearance:appear")}away(){this.dispatch(this.el,"appearance:away")}_handleVisibility(){this._documentIsActive()?this.appear():this.away()}_documentIsActive(){return"visible"==document.visibilityState&&document.hasFocus()}}class o extends r{get _errorMessage(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}connect(){this.loadContent()}loadContent(){let e=this,t=this.hasReplaceTarget?this.replaceTarget:this.el;fetch(this.endpointValue).then(e=>e.text()).then(s=>{let i=document.createElement("div");if(i.innerHTML=s,this.hasSelectorValue){let e=i.querySelectorAll(this.selectorValue);t.replaceWith(...e)}else t.replaceWith(...i.children);e.dispatch(t,"ajax:success")}).catch(s=>{t.replaceWith(this._errorMessage),e.dispatch(t,"ajax:error")}).finally(()=>{e.dispatch(t,"ajax:complete")})}}o.targets=["replace"],o.values={endpoint:String,errorMessage:String,selector:String};class h extends r{initialize(){this.handler=this.handler.bind(this)}connect(){this.el.querySelectorAll("input, select, textarea").forEach(e=>e.addEventListener("change",this.handler))}disconnect(){this.el.querySelectorAll("input, select, textarea").forEach(e=>e.removeEventListener("change",this.handler))}handler(e){this.dispatch(this.el,"submit")}}const c=(e,t)=>{const s=e[t];return"function"==typeof s?s:(...e)=>{}},d=(e,t,s)=>{let i=e;return!0===s?i=`${t.identifier}:${e}`:"string"==typeof s&&(i=`${s}:${e}`),i},u=(e,t,s)=>{const{bubbles:i,cancelable:a,composed:n}=t||{bubbles:!0,cancelable:!0,composed:!0};return t&&Object.assign(s,{originalEvent:t}),new CustomEvent(e,{bubbles:i,cancelable:a,composed:n,detail:s})},m={dispatchEvent:!0,eventPrefix:!0},g=(e,t={})=>{const{dispatchEvent:s,eventPrefix:i}=Object.assign({},m,t),a=(null==t?void 0:t.element)||e.element,n=e.disconnect.bind(e),r=new IntersectionObserver(t=>{const[n]=t;n.isIntersecting?(t=>{if(e.isVisible=!0,c(e,"appear").call(e,t),s){const s=d("appear",e,i),n=u(s,null,{controller:e,entry:t});a.dispatchEvent(n)}})(n):e.isVisible&&(t=>{if(e.isVisible=!1,c(e,"disappear").call(e,t),s){const s=d("disappear",e,i),n=u(s,null,{controller:e,entry:t});a.dispatchEvent(n)}})(n)},t),l=()=>{r.observe(a)},o=()=>{r.unobserve(a)};return Object.assign(e,{isVisible:!1,disconnect(){o(),n()}}),l(),[l,o]},p={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},f={debug:!1,logger:console};class v{constructor(e,t={}){var s,i,a;this.log=(e,t)=>{this.debug&&(this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${e}`,"color: #3B82F6","color: unset"),this.logger.log(Object.assign({controllerId:this.controllerId},t)),this.logger.groupEnd())},this.debug=null!==(i=null!==(s=null==t?void 0:t.debug)&&void 0!==s?s:e.application.stimulusUseDebug)&&void 0!==i?i:f.debug,this.logger=null!==(a=null==t?void 0:t.logger)&&void 0!==a?a:f.logger,this.controller=e,this.controllerId=e.element.id||e.element.dataset.id,this.controllerInitialize=e.initialize.bind(e),this.controllerConnect=e.connect.bind(e),this.controllerDisconnect=e.disconnect.bind(e)}}class b extends v{constructor(e,t={}){super(e,t),this.observe=()=>{this.targetElement.addEventListener("mouseenter",this.onEnter),this.targetElement.addEventListener("mouseleave",this.onLeave)},this.unobserve=()=>{this.targetElement.removeEventListener("mouseenter",this.onEnter),this.targetElement.removeEventListener("mouseleave",this.onLeave)},this.onEnter=()=>{c(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{c(this.controller,"mouseLeave").call(this.controller),this.log("mouseLeave",{hover:!1})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}class E extends v{constructor(e,t={}){super(e,t),this.observe=()=>{try{this.observer.observe(this.targetElement,this.options)}catch(e){this.controller.application.handleError(e,"At a minimum, one of childList, attributes, and/or characterData must be true",{})}},this.unobserve=()=>{this.observer.disconnect()},this.mutation=e=>{c(this.controller,"mutate").call(this.controller,e),this.log("mutate",{entries:e})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.options=t,this.observer=new MutationObserver(this.mutation),this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}const w=e=>{const t=t=>{const{innerWidth:s,innerHeight:i}=window,a={height:i||Infinity,width:s||Infinity,event:t};c(e,"windowResize").call(e,a)},s=e.disconnect.bind(e),i=()=>{window.addEventListener("resize",t),t()},a=()=>{window.removeEventListener("resize",t)};return Object.assign(e,{disconnect(){a(),s()}}),i(),[i,a]},y=(e,t=200)=>{let s=null;return function(){const i=arguments,a=this,n=()=>e.apply(a,i);s&&clearTimeout(s),s=setTimeout(n,t)}};class V extends r{initialize(){this._handler=this._handler.bind(this)}connect(){let e=this.el;e.style.resize="none",e.style.boxSizing="border-box",e.addEventListener("input",this._handler),e.addEventListener("focus",this._handler),w(this),requestAnimationFrame(this._handler)}windowResize(){this._handler()}_handler(){this.autosize(this.el)}autosize(e){let t=e.offsetHeight-e.clientHeight;e.style.height="auto",e.style.height=e.scrollHeight+t+"px"}}class _ extends r{initialize(){this._updateCharCount=this._updateCharCount.bind(this)}connect(){this._updateCharCount(),this.inputTarget.addEventListener("input",this._updateCharCount)}disconnect(){this.inputTarget.removeEventListener("input",this._updateCharCount)}_updateCharCount(){let e=this.inputTarget.value.length;this.outputTarget.innerText=e.toString(),this.hasErrorClass&&(this._isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))}_isValidCount(e){let t=0,s=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(s=this.maxValue),e>=t&&e<=s}}_.targets=["input","output"],_.values={min:Number,max:Number},_.classes=["error"];class T extends r{get checked(){return this.checkboxTargets.filter(e=>e.checked)}get unchecked(){return this.checkboxTargets.filter(e=>!e.checked)}initialize(){this.toggle=this.toggle.bind(this),this.refresh=this.refresh.bind(this)}connect(){requestAnimationFrame(()=>{this.hasSelectAllTarget&&(this.selectAllTarget.addEventListener("change",this.toggle),this.checkboxTargets.forEach(e=>e.addEventListener("change",this.refresh)),this.refresh())})}disconnect(){this.hasSelectAllTarget&&(this.selectAllTarget.removeEventListener("change",this.toggle),this.checkboxTargets.forEach(e=>e.removeEventListener("change",this.refresh)))}toggle(e){e.preventDefault();let t=e.target;this.checkboxTargets.forEach(e=>e.checked=t.checked)}refresh(){const e=this.checkboxTargets.length,t=this.checked.length;this.selectAllTarget.checked=t>0,this.selectAllTarget.indeterminate=t>0&&t{let e=this.el;if(x(e))e.addEventListener("submit",this.confirm);else{if(!C(e))throw new Error("Can't handle confirmation on attached element");e.addEventListener("click",this.confirm)}})}confirm(e){window.confirm(this.message)||(e.preventDefault(),this.dispatch(this.el,"confirm:cancelled"))}}D.values={message:String};class O extends r{get _message(){return this.hasMessageValue?this._messageValue:"Do you want to leave this page? Changes you made may not be saved"}initialize(){this.handlePopstate=this.handlePopstate.bind(this),this.handleTurboNavigation=this.handleTurboNavigation.bind(this)}connect(){window.onbeforeunload=()=>this._message,window.addEventListener("popstate",this.handlePopstate),window.addEventListener("submit",()=>{window.removeEventListener("popstate",this.handlePopstate),window.onbeforeunload=null}),window.addEventListener("turbolinks:before-visit",this.handleTurboNavigation),window.addEventListener("turbo:before-visit",this.handleTurboNavigation)}handlePopstate(e){return!1}handleTurboNavigation(e){confirm(this._message)||e.preventDefault()}}O.values={_message:String};class N extends r{connect(){console.log("Debug Controller",this,this.testTargets)}}N.targets=["test"];class A extends r{constructor(){super(...arguments),this.loadValue=null}initialize(){this.checkDirty=this.checkDirty.bind(this)}connect(){let e=this.el;this.loadValue=M(e)?e.checked:e.value,this.checkDirty(),e.addEventListener("input",this.checkDirty),e.addEventListener("change",this.checkDirty)}disconnect(){let e=this.el;e.removeEventListener("input",this.checkDirty),e.removeEventListener("change",this.checkDirty)}restore(){let e=this.el;if(M(e))e.checked=e.defaultChecked;else if(I(e)){let t=Array.from(e.options);t.every(e=>!e.defaultSelected)?t.forEach(e=>{e.selected=e.value==this.loadValue}):t.forEach(e=>e.selected=e.defaultSelected),Array.from(e.options).forEach(e=>e.selected=e.defaultSelected)}else e.value=e.defaultValue}checkDirty(e){let t,s=this.el;if(M(s))t=s.checked!=s.defaultChecked;else if(I(s)){let e=Array.from(s.options);t=e.every(e=>!e.defaultSelected)?s.value!=this.loadValue:e.some(e=>e.selected!=e.defaultSelected)}else t=s.value!=s.defaultValue;t?s.setAttribute("data-dirty","true"):s.removeAttribute("data-dirty")}}class H extends r{connect(){this.toggle()}toggle(){this.hasDisablerTarget&&this.disablerTarget.checked?this.disableInputs():this.enableInputs()}disableInputs(){let e=this.hasClearValue&&this.clearValue;this.disableTargets.forEach((t,s)=>{e&&(t.value=""),t.disabled=!0})}enableInputs(){this.disableTargets.forEach((e,t)=>{e.disabled=!1})}}H.targets=["disabler","disable"],H.values={clear:Boolean};class z extends r{get _message(){return this.hasMessageValue?this.messageValue:"Submitting..."}get _timeout(){return this.hasTimeoutValue?this.timeoutValue:1e3}initialize(){this.enable=this.enable.bind(this),this.disable=this.disable.bind(this)}connect(){requestAnimationFrame(()=>{this.el.addEventListener("click",this.disable)})}disconnect(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)}disable(e){let t=this.el;this._isDisabled(t)?(null==e||e.preventDefault(),null==e||e.stopImmediatePropagation()):(this._cacheText=this._getElText(t),this._setElText(t,this._message),this._disable(t),setTimeout(this.enable,this._timeout))}enable(e){null==e||e.preventDefault();let t=this.el;this._isDisabled(t)&&(this._setElText(t,this._cacheText),this._enable(t))}_isDisabled(e){return L(e)&&"submit"==e.type||k(e)?e.disabled:"true"==e.dataset.disabled}_getElText(e){return L(e)&&"submit"==e.type?e.value:e.innerText}_setElText(e,t){L(e)&&"submit"==e.type?e.value=t:(k(e)||C(e))&&(e.innerText=t)}_disable(e){L(e)&&"submit"==e.type||k(e)?e.disabled=!0:e.dataset.disabled="true"}_enable(e){L(e)&&"submit"==e.type||k(e)?e.disabled=!1:e.dataset.disabled=void 0}}z.values={message:String,timeout:Number};class $ extends r{dismiss(){this.el.remove()}}class R extends r{get _id(){if(this.hasIdValue)return this.idValue;let e=this.el.id;if(""!==e)return e;throw new Error(`No ID value to uniquely identify this element. Please either specify data-${this.identifier}-id-value or give this element an 'id' attribute. `)}get _uniqueIdentifier(){return`${location.href} ${this._id}`}get _restoreOnLoad(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}get _element(){return this.hasElementTarget?this.elementTarget:this.el}connect(){requestAnimationFrame(()=>{this._restoreOnLoad&&this.restore()})}clear(e){e&&e.preventDefault(),localStorage.removeItem(this._uniqueIdentifier),this.dispatch(this._element,"element-save:cleared")}save(e){e&&e.preventDefault();let s=this._element,i=this.attributesValue.split(" "),a={};i.forEach(e=>a[e]=t(s,e)),localStorage.setItem(this._uniqueIdentifier,JSON.stringify(a)),this.dispatch(s,"element-save:save:success")}restore(e){e&&e.preventDefault();let t=this._element;if(localStorage.getItem(this._uniqueIdentifier)){const e=JSON.parse(localStorage.getItem(this._uniqueIdentifier));Object.keys(e).forEach(i=>{s(t,i,e[i])}),this.dispatch(t,"element-save:restore:success")}else this.dispatch(t,"element-save:restore:empty")}}R.targets=["element"],R.values={id:String,attributes:String,restoreOnLoad:Boolean};class P extends r{get emptyClasses(){return this.emptyClass.split(" ")}get notEmptyClasses(){return this.notEmptyClass.split(" ")}get children(){let e=this.el;return Array.from(this.hasScopeSelectorValue?e.querySelectorAll(this.scopeSelectorValue):e.children)}connect(){((e,t={})=>{new E(this,t)})(0,{element:this.el,childList:!0}),this.checkEmpty()}mutate(e){this.checkEmpty()}checkEmpty(){let e=this.el,t=this.children;0===t.length?(this._removeNotEmptyClasses(),this._addEmptyClasses(),this.dispatch(e,"dom:empty")):(this._addNotEmptyClasses(),this._removeEmptyClasses(),this.dispatch(e,"dom:not-empty",{detail:{count:t.length}}))}_removeEmptyClasses(){this.hasEmptyClass&&this.el.classList.remove(...this.emptyClasses)}_addNotEmptyClasses(){this.hasNotEmptyClass&&this.el.classList.add(...this.notEmptyClasses)}_addEmptyClasses(){this.hasEmptyClass&&this.el.classList.add(...this.emptyClasses)}_removeNotEmptyClasses(){this.hasNotEmptyClass&&this.el.classList.remove(...this.notEmptyClasses)}}P.classes=["empty","notEmpty"],P.values={scopeSelector:String};class q extends r{connect(){this.toggle()}toggle(){this.hasEnablerTarget&&this.enablerTarget.checked?this.enableInputs():this.disableInputs()}disableInputs(){let e=this.hasClearValue&&this.clearValue;this.enableTargets.forEach((t,s)=>{e&&(t.value=""),t.disabled=!0})}enableInputs(){this.enableTargets.forEach((e,t)=>{e.disabled=!1})}}q.targets=["enabler","enable"],q.values={clear:Boolean};class j extends r{connect(){let e=this.el;e.onerror=()=>{this.hasPlaceholderValue?e.src=this.placeholderValue:e.style.display="none"}}}j.values={placeholder:String};class F extends r{get formID(){if(this.hasIdValue)return this.idValue;let e=this.el.id;if(""!==e)return e;throw new Error(`No ID value to uniquely identify this form. Please either specify data-${this.identifier}-id-value or give this form an 'id' attribute. `)}get formIdentifier(){return`${location.href} ${this.formID}`}get formElements(){return this.el.elements}get formData(){let e={[this.formIdentifier]:{}};for(const t of this.formElements){let s=t;s.name.length>0&&(L(s)&&"checkbox"==s.type?e[this.formIdentifier][s.name]=s.checked:L(s)&&"radio"==s.type?s.checked&&(e[this.formIdentifier][s.name]=s.value):e[this.formIdentifier][s.name]=s.value)}return e}get restoreOnLoad(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}get clearOnSubmit(){return!this.hasClearOnSubmitValue||this.clearOnSubmitValue}initialize(){this._clear=this._clear.bind(this)}connect(){requestAnimationFrame(()=>{if(!x(this.el))throw new Error("Expected controller to be mounted on a form element.");this.restoreOnLoad&&this.restore(),this.clearOnSubmit&&this.el.addEventListener("submit",this._clear)})}disconnect(){this.clearOnSubmit&&this.el.removeEventListener("submit",this._clear)}_clear(){localStorage.removeItem(this.formIdentifier),this.dispatch(this.el,"form-save:cleared")}clear(e){null==e||e.preventDefault(),this._clear()}save(e){e.preventDefault(),localStorage.setItem(this.formIdentifier,JSON.stringify(this.formData[this.formIdentifier])),this.dispatch(this.el,"form-save:save:success")}restore(e){if(null==e||e.preventDefault(),localStorage.getItem(this.formIdentifier)){const e=JSON.parse(localStorage.getItem(this.formIdentifier));for(const t of this.formElements){let s=t;s.name in e&&(L(s)&&"checkbox"==s.type?s.checked=e[s.name]:L(s)&&"radio"==s.type?s.value==e[s.name]&&(s.checked=!0):s.value=e[s.name])}this.dispatch(this.el,"form-save:restore:success")}else this.dispatch(this.el,"form-save:restore:empty")}}F.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};class B extends r{get threshold(){return this.hasThresholdValue?this.thresholdValue.split(",").map(e=>Number.parseFloat(e.trim())).filter(e=>e>=0&&e<=1):[0,1]}connect(){g(this,{threshold:this.threshold,element:this.el})}appear(e){this.dispatch(this.el,"intersection:appear",{detail:{element:this.el}})}disappear(e){this.dispatch(this.el,"intersection:disappear",{detail:{element:this.el}})}}B.values={threshold:String};class W extends o{connect(){let e=this.el;"IntersectionObserver"in window?[this.observe,this.unobserve]=g(this,{element:e,threshold:.3}):this.loadContent()}appear(e){e.target===this.el&&e.isIntersecting&&(this.loadContent(),this.unobserve&&this.unobserve())}}const U="scrollBehavior"in document.documentElement.style;let J;async function Y(e,{behavior:t="smooth",block:s="start",inline:i="nearest"}={}){"smooth"!=t||U||await async function(){const{polyfill:e}=await import("smoothscroll-polyfill");J||(J=!0,e())}(),e.scrollIntoView({behavior:t,block:s,inline:i})}function G(e){if(!e)return null;const t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:G(e.parentElement)||document.body}class K extends r{constructor(){super(...arguments),this._dialog=null}get src(){return this.hasSrcValue?this.srcValue:this.el.src}get srcSet(){return this.hasSrcSetValue?this.srcSetValue:this.el.srcset}get sizes(){return this.hasSizesValue?this.sizesValue:this.el.sizes}get modalClassName(){return this.hasModalClass?this.modalClass:"image-lightbox-dialog"}get imageClassName(){return this.hasImageClass?this.imageClass:"image-lightbox-image"}initialize(){this.open=this.open.bind(this),this.close=this.close.bind(this)}connect(){}open(){let e=this.el;if(this._dialog)return;this._dialog=document.createElement("dialog");let t=document.createElement("img");t.className=this.imageClassName,t.src=this.src,t.srcset=this.srcSet,t.sizes=this.sizes,this._dialog.appendChild(t),e.insertAdjacentElement("afterend",this._dialog),i.registerDialog(this._dialog),this._dialog.className=this.modalClassName,this._dialog.showModal(),Y(this._dialog,{behavior:"smooth",block:"end"}).catch(()=>this._dialog.scrollIntoView(!1)),this._dialog.addEventListener("click",this.close),this._dialog.addEventListener("cancel",this.close),this._dialog.addEventListener("close",this.close)}close(){this._dialog&&(this._dialog.close(),this._dialog.remove(),this._dialog=null,Y(this.el,{behavior:"smooth",block:"end"}).catch(()=>this.el.scrollIntoView(!1)))}}K.values={src:String,srcSet:String,sizes:String},K.classes=["modal","image"];class Q extends r{initialize(){this.handleInputs=this.handleInputs.bind(this)}connect(){this.inputTargets.forEach(e=>e.addEventListener("change",this.handleInputs))}disconnect(){this.inputTargets.forEach(e=>e.removeEventListener("change",this.handleInputs))}handleInputs(e){let t=this.inputTargets.reduce((e,t)=>t.checked?e+1:e,0),s=e.target;t>this.maxValue?(e.preventDefault(),s.checked=!1,this.dispatch(s,"change"),this.dispatch(s,"limited-selection:too-many"),this.hasErrorTarget&&(this.errorTarget.innerHTML=this.messageValue)):(this.dispatch(s,"limited-selection:selection"),this.hasErrorTarget&&(this.errorTarget.innerHTML=""))}}Q.targets=["input","error"],Q.values={max:Number,message:String};class X extends r{get wrapperClass(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}get insertMode(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}connect(){this.checkStructure()}add(e){null==e||e.preventDefault();const t=this.templateTarget.innerHTML.replace(/NEW_RECORD/g,this.generateID());this.targetTarget.insertAdjacentHTML(this.insertMode,t)}remove(e){e.preventDefault();const t=e.target.closest(`.${this.wrapperClass}`);if(null==t)throw new Error(`#remove was clicked from outside of a child record. Could not find an ancestor with class .${this.wrapperClass}`);if("true"===t.dataset.newRecord)t.remove();else{t.style.display="none";let e=t.querySelector("input[name*='_destroy']");if(null==e)throw new Error("Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.");e.value="1"}}generateID(){return(new Date).getTime().toString()+Math.random().toString().slice(2)}checkStructure(){if(this.templateTarget.innerHTML.indexOf("NEW_RECORD"))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`")}}X.targets=["target","template"],X.values={insertMode:String,wrapperClass:String};class Z extends r{initialize(){this.checkPasswordsMatch=this.checkPasswordsMatch.bind(this)}connect(){this.passwordTargets.forEach(e=>e.addEventListener("change",this.checkPasswordsMatch))}disconnect(){this.passwordTargets.forEach(e=>e.removeEventListener("change",this.checkPasswordsMatch))}allPasswordsMatch(){let e=new Set(this.passwordTargets.map(e=>e.value));return e.has("")||1==e.size}checkPasswordsMatch(){let e=this.el;this.allPasswordsMatch()?(this.dispatch(e,"password-confirm:match"),this.hasErrorClass&&this.passwordTargets.forEach(e=>e.classList.remove(this.errorClass))):(this.dispatch(e,"password-confirm:no-match"),this.hasErrorClass&&this.passwordTargets.forEach(e=>e.classList.add(this.errorClass)))}}Z.targets=["password"],Z.classes=["error"];class ee extends r{peak(e){null==e||e.preventDefault(),this.passwordTarget.type="text"}hide(e){null==e||e.preventDefault(),this.passwordTarget.type="password"}toggle(e){null==e||e.preventDefault(),"password"===this.passwordTarget.type?this.peak():this.hide()}}ee.targets=["password"];class te extends r{get selector(){return this.hasSelectorValue?this.selectorValue:`[data-controller~="${this.identifier}"]`}replace(e){const[t,s,i]=e.detail;if(t instanceof Node){let e=t.querySelector(this.selector);if(null==e)throw new Error(`expected new form DOM with [data-controller="${this.identifier}"] to be present in returned payload`);let s=this.el.parentNode;if(null==s)throw new Error("expected form to have a DOM parent, could not execute replaceChild");s.replaceChild(e,this.el)}else console.log("Unknown",t)}}te.targets=[],te.values={selector:String};class se extends r{initialize(){this.messageReceived=this.messageReceived.bind(this)}connect(){window.addEventListener("message",this.messageReceived)}disconnect(){window.removeEventListener("message",this.messageReceived)}messageReceived(e){let t=e.data;t.hasOwnProperty("name")&&"iframe-body"===t.name&&t.hasOwnProperty("height")&&this.resize(t.height)}resize(e){this.el.style.height=`${e}px`}}class ie extends r{connect(){var e,t,s;window.self!==window.top&&(w(this),t={},null===(s=(e=this).constructor.debounces)||void 0===s||s.forEach(s=>{if("string"==typeof s&&(e[s]=y(e[s],null==t?void 0:t.wait)),"object"==typeof s){const{name:i,wait:a}=s;if(!i)return;e[i]=y(e[i],a||(null==t?void 0:t.wait))}}),this.postUpdate())}windowResize(e){this.postUpdate()}postUpdate(){let e={name:"iframe-body",height:this.getHeight()};window.parent.postMessage(e,"*")}getHeight(){const e=document.body,t=document.documentElement;return Math.max(e.scrollHeight,e.offsetHeight,t.clientHeight,t.scrollHeight,t.offsetHeight)}}ie.debounces=["postUpdate"];class ae extends r{_cleanupSelf(){this.cleanup(this.el)}cleanup(e){var t,s,i;e.dataset.controller=(null==(t=e.dataset.controller)?void 0:t.replaceAll(new RegExp(`(s|^)${this.identifier}(s|$)`,"g"),""))||"",""==e.dataset.controller&&delete e.dataset.controller;let n=new RegExp(`(s|^)${this.identifier}\\..+?(s|$)`,"g");e.dataset.target=(null==(s=e.dataset.target)?void 0:s.replaceAll(n,""))||"",delete e.dataset[a(`${this.identifier}-target`)],""==e.dataset.target&&delete e.dataset.target,e.dataset.action=(null==(i=e.dataset.target)?void 0:i.replaceAll(n,""))||"",delete e.dataset[a(`${this.identifier}-action`)],""==e.dataset.action&&delete e.dataset.action;let r=this.constructor.values;r&&Object.keys(r).forEach(t=>delete e.dataset[a(`${this.identifier}-${t}-value`)]);let l=this.constructor.classes;l&&Object.keys(l).forEach(t=>delete e.dataset[a(`${this.identifier}-${t}-class`)])}}class ne extends ae{connect(){requestAnimationFrame(()=>{Y(this.el,{behavior:this.hasBehaviorValue?this.behaviorValue:"smooth",block:this.hasBlockValue?this.blockValue:"center",inline:this.hasInlineValue?this.inlineValue:"center"}).catch(()=>this.el.scrollIntoView()),this._cleanupSelf()})}}ne.values={behavior:String,block:String,inline:String};class re extends r{scroll(e){let t;null==e||e.preventDefault(),t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:G(this.el),null!=t&&Y(t,{behavior:"smooth",block:"end"}).catch(()=>t.scrollIntoView(!1))}}re.values={mode:String};class le extends r{scroll(){let e=document.querySelector(this.selectorValue);e?Y(e,{behavior:this.hasBehaviorValue?this.behaviorValue:"smooth",block:this.hasBlockValue?this.blockValue:"center",inline:this.hasInlineValue?this.inlineValue:"center"}).catch(()=>e.scrollIntoView()):console.warn(`Could not find target for '${this.selectorValue}'`)}}le.values={selector:String,behavior:String,block:String,inline:String};class oe extends r{scroll(e){let t;null==e||e.preventDefault(),t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:G(this.el),null!=t&&Y(t,{behavior:"smooth",block:"start"}).catch(()=>t.scrollIntoView(!1))}}oe.values={mode:String};class he extends r{constructor(){super(...arguments),this.timeout=null}connect(){requestAnimationFrame(()=>{this.timeout=setTimeout(()=>this.el.remove(),1e3*this.secondsValue)})}disconnect(){this.timeout&&clearTimeout(this.timeout)}}he.values={seconds:Number};class ce extends r{constructor(){super(...arguments),this._magicElement=null}get _mode(){return this.hasModeValue?this.modeValue:"top"}createMagicElement(){if(null===this._magicElement)switch(this._magicElement=document.createElement("div"),this._mode){case"top":this.el.insertAdjacentElement("beforebegin",this._magicElement);break;case"bottom":this.el.insertAdjacentElement("afterend",this._magicElement)}}connect(){let e=this.el;this.createMagicElement(),new IntersectionObserver(t=>{t.forEach(t=>{t.target===this._magicElement&&(0===t.intersectionRatio?e.classList.add(this.hasStuckClass?this.stuckClass:"stuck"):1===t.intersectionRatio&&e.classList.remove(this.hasStuckClass?this.stuckClass:"stuck"))})},{threshold:[0,1]}).observe(this._magicElement)}}ce.classes=["stuck"],ce.values={mode:String};class de extends ae{connect(){if(!this.hasInsertValue)throw new Error("`insert` value was not specified");requestAnimationFrame(()=>{this.hasImmediateValue&&this.immediateValue&&this.execute()})}execute(e){null==e||e.preventDefault();let t=this.el,s=document.querySelector(this.targetValue);if(null==s)return void this.dispatch(t,"teleport:error");let i=t.cloneNode(!0);switch(this.cleanup(i),this.insertValue){case"beforebegin":case"beforeend":case"afterend":case"afterbegin":s.insertAdjacentHTML(this.insertValue,i.outerHTML);break;case"replaceOuter":s.outerHTML=i.outerHTML;break;case"replaceInner":s.innerHTML=i.outerHTML;break;case"prepend":s.insertAdjacentHTML("afterbegin",i.outerHTML);break;case"append":s.insertAdjacentHTML("beforeend",i.outerHTML);break;default:throw new Error("`insert` value was not specified")}t.remove()}}de.values={target:String,insert:String,immediate:Boolean};class ue extends r{connect(){if(!this.hasClassValue)throw new Error("data-toggle-class-class-value must not be empty");(this.hasMouseEnterValue||this.hasMouseLeaveValue)&&((e,t={})=>{new b(this,t)})(),this.hasClickAwayValue&&this.clickAwayValue&&((e,t={})=>{const{onlyVisible:s,dispatchEvent:i,events:a,eventPrefix:n}=Object.assign({},p,t),r=a=>{const r=(null==t?void 0:t.element)||e.element;if(!(r.contains(a.target)||!function(e){const t=e.getBoundingClientRect(),s=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return t.top<=s&&t.top+t.height>=0&&t.left<=i&&t.left+t.width>=0}(r)&&s)&&(e.clickOutside&&e.clickOutside(a),i)){const t=d("click:outside",e,n),s=u(t,a,{controller:e});r.dispatchEvent(s)}},l=e.disconnect.bind(e);Object.assign(e,{disconnect(){null==a||a.forEach(e=>{window.removeEventListener(e,r,!1)}),l()}}),null==a||a.forEach(e=>{window.addEventListener(e,r,!1)})})(this),requestAnimationFrame(()=>{this.hasInitialValue&&this.toggleTargets.forEach("on"===this.initialValue?e=>this.elementOn(e):e=>this.elementOff(e))})}clickOutside(){this.toggleTargets.forEach(e=>{this.elementWasToggled(e)&&(this.elementToggleStatus(e),this.elementToggle(e))})}mouseEnter(){if(this.hasMouseEnterValue)switch(this.mouseEnterValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}}mouseLeave(){if(this.hasMouseLeaveValue)switch(this.mouseLeaveValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}}on(e){this.toggleTargets.forEach(e=>{this.elementToggleStatus(e),this.elementOn(e)})}off(e){this.toggleTargets.forEach(e=>{this.elementToggleStatus(e),this.elementOff(e)})}toggle(e){this.toggleTargets.forEach(e=>{this.elementToggleStatus(e),this.elementToggle(e)})}elementWasToggled(e){return"true"==e.dataset.toggled}elementToggleStatus(e){this.elementWasToggled(e)?delete e.dataset.toggled:e.dataset.toggled="true"}elementToggle(e){this.classValue.split(" ").forEach(t=>e.classList.toggle(t))}elementOn(e){this.classValue.split(" ").forEach(t=>e.classList.toggle(t,!0))}elementOff(e){this.classValue.split(" ").forEach(t=>e.classList.toggle(t,!1))}}function me(e){return"TURBO-FRAME"==e.nodeName}ue.targets=["toggle"],ue.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};class ge extends r{toggle(e){null==e||e.preventDefault();let t=this._getFrame().src;null==t||t!==this._getSrc()?this._setSrc():this._clear()}setSrc(e){null==e||e.preventDefault(),this._setSrc()}clear(e){null==e||e.preventDefault(),this._clear()}_setSrc(){let e=this._getFrame();this.hasLoadingMessageValue&&(e.innerHTML=this.loadingMessageValue),e.src=this._getSrc()}_clear(){let e=this._getFrame();e.src="",e.innerHTML=""}_getFrame(){let e=document.getElementById(`${this.frameIdValue}`);if(null==e)throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);if(me(e))return e;throw new Error(`Element targeted by ID '${this.frameIdValue}'`)}_getSrc(){let e=this.el;if(this.hasSrcValue)return this.srcValue;if(C(e))return e.href;throw new Error("No link given to drive frame to")}}ge.values={frameId:String,src:String,loadingMessage:String};class pe extends r{constructor(){super(...arguments),this._timeoutHandle=null}get poll(){return!!this.hasPollValue&&this.pollValue}initialize(){this.refresh=this.refresh.bind(this)}connect(){let e=this.el;if(!me(e))throw new Error("Expected controller to be mounted on a element.");if(e.src)throw new Error("The provided element has no `src` attribute.");this.poll&&requestAnimationFrame(()=>this._timeoutHandle=setTimeout(()=>this.refresh(),this.intervalValue))}disconnect(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)}refresh(e){null==e||e.preventDefault();let t=this.el;t.src=t.src}}pe.values={interval:Number,poll:Boolean};class fe extends r{initialize(){this.updateWordCount=this.updateWordCount.bind(this)}connect(){this.updateWordCount(),this.inputTarget.addEventListener("input",this.updateWordCount)}disconnect(){this.inputTarget.removeEventListener("input",this.updateWordCount)}updateWordCount(){let e=0,t=this.inputTarget.value.match(/\S+/g);e=t&&t.length||0,this.outputTarget.innerText=e.toString(),this.hasErrorClass&&(this.isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))}isValidCount(e){let t=0,s=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(s=this.maxValue),e>=t&&e<=s}}fe.targets=["input","output"],fe.values={min:Number,max:Number},fe.classes=["error"];export{l as AppearanceController,o as AsyncBlockController,h as AutoSubmitFormController,V as AutosizeController,_ as CharCountController,T as CheckboxSelectAllController,S as ClipboardController,D as ConfirmController,O as ConfirmNavigationController,N as DebugController,A as DetectDirtyController,H as DisableInputsController,z as DisableWithController,$ as DismissableController,R as ElementSaveController,P as EmptyDomController,q as EnableInputsController,j as FallbackImageController,F as FormSaveController,B as IntersectionController,W as LazyBlockController,K as LightboxImageController,Q as LimitedSelectionCheckboxesController,X as NestedFormController,Z as PasswordConfirmController,ee as PasswordPeekController,te as RemoteFormController,ie as ResponsiveIframeBodyController,se as ResponsiveIframeWrapperController,ne as ScrollIntoFocusController,re as ScrollToBottomController,le as ScrollToController,oe as ScrollToTopController,he as SelfDestructController,ce as StickyController,de as TeleportController,ue as ToggleClassController,ge as TurboFrameRCController,pe as TurboFrameRefreshController,fe as WordCountController}; //# sourceMappingURL=stimulus-library.modern.js.map diff --git a/dist/stimulus-library.modern.js.map b/dist/stimulus-library.modern.js.map index b6e3a651..f2987d26 100644 --- a/dist/stimulus-library.modern.js.map +++ b/dist/stimulus-library.modern.js.map @@ -1 +1 @@ -{"version":3,"file":"stimulus-library.modern.js","sources":["../src/base_controller.ts","../src/appearance_controller.ts","../src/async_block_controller.ts","../src/auto_submit_form_controller.ts","../node_modules/stimulus-use/dist/support/index.js","../node_modules/stimulus-use/dist/use-intersection/use-intersection.js","../node_modules/stimulus-use/dist/use-click-outside/use-click-outside.js","../node_modules/stimulus-use/dist/stimulus_use.js","../node_modules/stimulus-use/dist/use-hover/use-hover.js","../node_modules/stimulus-use/dist/use-mutation/use-mutation.js","../node_modules/stimulus-use/dist/use-window-resize/use-window-resize.js","../node_modules/stimulus-use/dist/use-debounce/use-debounce.js","../src/autosize_controller.ts","../src/char_count_controller.ts","../src/checkbox_select_all_controller.ts","../src/clipboard_controller.ts","../src/utilities/elements.ts","../src/confirm_controller.ts","../src/confirm_navigation_controller.ts","../src/debug_controller.ts","../src/detect_dirty_controller.ts","../src/disable_inputs_controller.ts","../src/disable_with_controller.ts","../src/dismissable_controller.ts","../src/empty_dom_controller.ts","../src/enable_inputs_controller.ts","../src/fallback_image_controller.ts","../src/form_save_controller.ts","../src/intersection_controller.ts","../src/lazy_block_controller.ts","../src/utilities/scroll.ts","../src/lightbox_image_controller.ts","../src/limited_selection_checkboxes_controller.ts","../src/nested_form_controller.ts","../src/password_confirm_controller.ts","../src/password_peek_controller.ts","../src/remote_form_controller.ts","../src/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/scroll_into_focus_controller.ts","../src/scroll_to_bottom_controller.ts","../src/scroll_to_controller.ts","../src/scroll_to_top_controller.ts","../src/self_destruct_controller.ts","../src/sticky_controller.ts","../src/teleport_controller.ts","../src/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/turbo_frame_rc_controller.ts","../src/turbo_frame_refresh_controller.ts","../src/word_count_controller.ts"],"sourcesContent":["import {Context, Controller} from \"stimulus\";\n\nexport class BaseController extends Controller {\n\n constructor(context: Context) {\n super(context);\n return new Proxy(this, {\n get: (obj, prop) => {\n let returnVal = Reflect.get(obj, prop);\n let self = this;\n if (logProperty(prop.toString())) {\n if (typeof returnVal == \"function\") {\n return new Proxy(returnVal, {\n apply(target: any, thisArg: any, argArray?: any): any {\n self.log(prop.toString(), {\n args: argArray,\n });\n return Reflect.apply(target, thisArg, argArray);\n },\n });\n } else {\n this.log(prop.toString());\n }\n }\n return returnVal;\n },\n });\n }\n\n get el(): HTMLElement {\n return this.element as HTMLElement;\n }\n\n dispatch(element: HTMLElement, eventName: string, options: CustomEventInit = {}) {\n let mergedOptions = Object.assign({}, {bubbles: true, cancelable: true, detail: {target: element}}, options);\n if (!!mergedOptions.detail.target) {\n mergedOptions.detail.target = element;\n }\n let event = new CustomEvent(eventName, mergedOptions);\n element.dispatchEvent(event);\n }\n\n log(functionName: string, args: {} = {}): void {\n // @ts-ignore\n if (!this.application.debug) {\n return;\n }\n let logger = console;\n logger.groupCollapsed(`%c${this.identifier} %c#${functionName}`, \"color: #3B82F6\", \"color: unset\");\n logger.log({\n element: this.element,\n ...args,\n });\n logger.groupEnd();\n }\n\n}\n\nfunction logProperty(prop: string): boolean {\n switch (prop) {\n case \"application\":\n case \"el\":\n case \"element\":\n case \"constructor\":\n case \"initialize\":\n case \"log\":\n case \"dispatch\":\n case \"data\":\n case \"valueDescriptorMap\":\n case \"identifier\":\n return false;\n }\n\n if (/^_.*?$/.test(prop)) {\n return false;\n }\n if (/^.*?Target(s)?$/.test(prop)) {\n return false;\n }\n if (/^.*?Value$/.test(prop)) {\n return false;\n }\n if (/^.*?ValueChanged$/.test(prop)) {\n return false;\n }\n if (/^.*?Class$/.test(prop)) {\n return false;\n }\n\n return true;\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class AppearanceController extends BaseController {\r\n\r\n initialize() {\r\n this._handleVisibility = this._handleVisibility.bind(this);\r\n }\r\n\r\n connect() {\r\n window.addEventListener(\"focus\", this._handleVisibility);\r\n window.addEventListener(\"blur\", this._handleVisibility);\r\n document.addEventListener(\"visibilitychange\", this._handleVisibility);\r\n this._handleVisibility();\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"focus\", this._handleVisibility);\r\n window.removeEventListener(\"blur\", this._handleVisibility);\r\n document.removeEventListener(\"visibilitychange\", this._handleVisibility);\r\n }\r\n\r\n appear() {\r\n this.dispatch(this.el, \"appearance:appear\");\r\n }\r\n\r\n away() {\r\n this.dispatch(this.el, \"appearance:away\");\r\n }\r\n\r\n _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\n\nexport class AsyncBlockController extends BaseController {\n static targets = [\"replace\"];\n static values = {endpoint: String, errorMessage: String, selector: String};\n\n declare readonly replaceTarget: HTMLElement;\n declare readonly hasReplaceTarget: boolean;\n declare readonly endpointValue: string;\n\n declare readonly hasSelectorValue: boolean;\n declare readonly selectorValue: string;\n\n declare readonly hasErrorMessageValue: boolean;\n declare readonly errorMessageValue: string;\n\n get _errorMessage(): string {\n return this.hasErrorMessageValue ? this.errorMessageValue : \"This content failed to load\";\n }\n\n // This is a simple controller to load a block of content when the page loads.\n // It should be used to give a quick initial response before calling out to an\n // an AJAX endpoint to do some expensive work.\n connect() {\n this.loadContent();\n }\n\n loadContent() {\n let self = this;\n let el = this.hasReplaceTarget ? this.replaceTarget : this.el;\n fetch(this.endpointValue)\n .then((response) => response.text())\n .then((html) => {\n let newEl = document.createElement(\"div\");\n newEl.innerHTML = html;\n if (this.hasSelectorValue) {\n let selectedContent = newEl.querySelectorAll(this.selectorValue);\n el.replaceWith(...selectedContent);\n } else {\n el.replaceWith(...newEl.children);\n }\n // Trigger event to show block has loaded\n self.dispatch(el, \"ajax:success\");\n })\n .catch(err => {\n el.replaceWith(this._errorMessage);\n self.dispatch(el, \"ajax:error\");\n })\n .finally(() => {\n self.dispatch(el, \"ajax:complete\");\n });\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class AutoSubmitFormController extends BaseController {\n\n initialize() {\n this.handler = this.handler.bind(this);\n }\n\n connect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.handler));\n }\n\n disconnect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.handler));\n }\n\n private handler(e: Event) {\n // Trigger synthetic \"submit\" event on form\n this.dispatch((this.el), \"submit\");\n }\n}\n","export const method = (controller, methodName) => {\n const method = controller[methodName];\n if (typeof method == 'function') {\n return method;\n }\n else {\n return (...args) => { };\n }\n};\nexport const composeEventName = (name, controller, eventPrefix) => {\n let composedName = name;\n if (eventPrefix === true) {\n composedName = `${controller.identifier}:${name}`;\n }\n else if (typeof eventPrefix === 'string') {\n composedName = `${eventPrefix}:${name}`;\n }\n return composedName;\n};\nexport const extendedEvent = (type, event, detail) => {\n const { bubbles, cancelable, composed } = event || { bubbles: true, cancelable: true, composed: true };\n if (event) {\n Object.assign(detail, { originalEvent: event });\n }\n const customEvent = new CustomEvent(type, {\n bubbles,\n cancelable,\n composed,\n detail,\n });\n return customEvent;\n};\nexport function isElementInViewport(el) {\n const rect = el.getBoundingClientRect();\n const windowHeight = (window.innerHeight || document.documentElement.clientHeight);\n const windowWidth = (window.innerWidth || document.documentElement.clientWidth);\n const vertInView = (rect.top <= windowHeight) && ((rect.top + rect.height) >= 0);\n const horInView = (rect.left <= windowWidth) && ((rect.left + rect.width) >= 0);\n return (vertInView && horInView);\n}\n//# sourceMappingURL=index.js.map","import { method, extendedEvent, composeEventName } from '../support/index';\nconst defaultOptions = {\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useIntersection = (controller, options = {}) => {\n const { dispatchEvent, eventPrefix } = Object.assign({}, defaultOptions, options);\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n const callback = (entries) => {\n const [entry] = entries;\n if (entry.isIntersecting) {\n dispatchAppear(entry);\n }\n else if (controller.isVisible) {\n dispatchDisappear(entry);\n }\n };\n const dispatchAppear = (entry) => {\n controller.isVisible = true;\n method(controller, 'appear').call(controller, entry);\n // emit a custom \"appear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('appear', controller, eventPrefix);\n const appearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(appearEvent);\n }\n };\n const dispatchDisappear = (entry) => {\n controller.isVisible = false;\n method(controller, 'disappear').call(controller, entry);\n // emit a custom \"disappear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('disappear', controller, eventPrefix);\n const disappearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(disappearEvent);\n }\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observer = new IntersectionObserver(callback, options);\n const observe = () => {\n observer.observe(targetElement);\n };\n const unobserve = () => {\n observer.unobserve(targetElement);\n };\n Object.assign(controller, {\n isVisible: false,\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-intersection.js.map","import { composeEventName, extendedEvent, isElementInViewport } from '../support/index';\nconst defaultOptions = {\n events: ['click', 'touchend'],\n onlyVisible: true,\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useClickOutside = (controller, options = {}) => {\n const { onlyVisible, dispatchEvent, events, eventPrefix } = Object.assign({}, defaultOptions, options);\n const onEvent = (event) => {\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n if (targetElement.contains(event.target) || (!isElementInViewport(targetElement) && onlyVisible)) {\n return;\n }\n // call the clickOutside method of the Stimulus controller\n if (controller.clickOutside) {\n controller.clickOutside(event);\n }\n // emit a custom event\n if (dispatchEvent) {\n const eventName = composeEventName('click:outside', controller, eventPrefix);\n const clickOutsideEvent = extendedEvent(eventName, event, { controller });\n targetElement.dispatchEvent(clickOutsideEvent);\n }\n };\n const observe = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.addEventListener(event, onEvent, false);\n });\n };\n const unobserve = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.removeEventListener(event, onEvent, false);\n });\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-click-outside.js.map","const defaultOptions = {\n debug: false,\n logger: console\n};\nexport class StimulusUse {\n constructor(controller, options = {}) {\n var _a, _b, _c;\n this.log = (functionName, args) => {\n if (!this.debug)\n return;\n this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${functionName}`, 'color: #3B82F6', 'color: unset');\n this.logger.log(Object.assign({ controllerId: this.controllerId }, args));\n this.logger.groupEnd();\n };\n this.debug = (_b = (_a = options === null || options === void 0 ? void 0 : options.debug) !== null && _a !== void 0 ? _a : controller.application.stimulusUseDebug) !== null && _b !== void 0 ? _b : defaultOptions.debug;\n this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : defaultOptions.logger;\n this.controller = controller;\n this.controllerId = controller.element.id || controller.element.dataset.id;\n // make copies of lifecycle functions\n this.controllerInitialize = controller.initialize.bind(controller);\n this.controllerConnect = controller.connect.bind(controller);\n this.controllerDisconnect = controller.disconnect.bind(controller);\n }\n}\n//# sourceMappingURL=stimulus_use.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseHover extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n this.targetElement.addEventListener('mouseenter', this.onEnter);\n this.targetElement.addEventListener('mouseleave', this.onLeave);\n };\n this.unobserve = () => {\n this.targetElement.removeEventListener('mouseenter', this.onEnter);\n this.targetElement.removeEventListener('mouseleave', this.onLeave);\n };\n this.onEnter = () => {\n method(this.controller, 'mouseEnter').call(this.controller);\n this.log('mouseEnter', { hover: true });\n };\n this.onLeave = () => {\n method(this.controller, 'mouseLeave').call(this.controller);\n this.log('mouseLeave', { hover: false });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useHover = (controller, options = {}) => {\n const observer = new UseHover(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-hover.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseMutation extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n try {\n this.observer.observe(this.targetElement, this.options);\n }\n catch (error) {\n this.controller.application.handleError(error, \"At a minimum, one of childList, attributes, and/or characterData must be true\", {});\n }\n };\n this.unobserve = () => {\n this.observer.disconnect();\n };\n this.mutation = (entries) => {\n method(this.controller, 'mutate').call(this.controller, entries);\n this.log('mutate', { entries });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.options = options;\n this.observer = new MutationObserver(this.mutation);\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useMutation = (controller, options = {}) => {\n const observer = new UseMutation(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-mutation.js.map","import { method } from '../support/index';\nexport const useWindowResize = (controller) => {\n const callback = (event) => {\n const { innerWidth, innerHeight } = window;\n const payload = {\n height: innerHeight || Infinity,\n width: innerWidth || Infinity,\n event\n };\n method(controller, 'windowResize').call(controller, payload);\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observe = () => {\n window.addEventListener('resize', callback);\n callback();\n };\n const unobserve = () => {\n window.removeEventListener('resize', callback);\n };\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-window-resize.js.map","import { Controller } from 'stimulus';\nclass DebounceController extends Controller {\n}\nDebounceController.debounces = [];\nconst defaultWait = 200;\nconst debounce = (fn, wait = defaultWait) => {\n let timeoutId = null;\n return function () {\n const args = arguments;\n const context = this;\n const callback = () => fn.apply(context, args);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(callback, wait);\n };\n};\nexport const useDebounce = (controller, options) => {\n var _a;\n const constructor = controller.constructor;\n (_a = constructor.debounces) === null || _a === void 0 ? void 0 : _a.forEach((func) => {\n if (typeof func === \"string\") {\n controller[func] = debounce(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n }\n if (typeof func === \"object\") {\n const { name, wait } = func;\n if (!name)\n return;\n controller[name] = debounce(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n }\n });\n};\n//# sourceMappingURL=use-debounce.js.map","import {useWindowResize} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class AutosizeController extends BaseController {\n\n initialize() {\n this._handler = this._handler.bind(this);\n }\n\n connect() {\n let target = this.el as HTMLTextAreaElement;\n target.style.resize = \"none\";\n target.style.boxSizing = \"border-box\";\n target.addEventListener(\"input\", this._handler);\n target.addEventListener(\"focus\", this._handler);\n useWindowResize(this);\n requestAnimationFrame(this._handler);\n }\n\n windowResize() {\n this._handler();\n }\n\n private _handler() {\n this.autosize(this.el as HTMLTextAreaElement);\n };\n\n private autosize(element: HTMLTextAreaElement) {\n let offset = element.offsetHeight - element.clientHeight;\n element.style.height = \"auto\";\n element.style.height = element.scrollHeight + offset + \"px\";\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class CharCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this._updateCharCount = this._updateCharCount.bind(this);\n }\n\n connect() {\n this._updateCharCount();\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this._updateCharCount);\n }\n\n private _updateCharCount() {\n let charCount = this.inputTarget.value.length;\n this.outputTarget.innerText = charCount.toString();\n if (this.hasErrorClass) {\n if (this._isValidCount(charCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n private _isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n","import {BaseController} from './base_controller';\n\nexport class CheckboxSelectAllController extends BaseController {\n static targets = ['selectAll', 'checkbox'];\n\n declare readonly hasSelectAllTarget: boolean;\n declare readonly selectAllTarget: HTMLInputElement;\n declare readonly checkboxTargets: HTMLInputElement[];\n\n private get checked() {\n return this.checkboxTargets.filter(checkbox => checkbox.checked);\n }\n\n private get unchecked() {\n return this.checkboxTargets.filter(checkbox => !checkbox.checked);\n }\n\n initialize() {\n this.toggle = this.toggle.bind(this);\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.addEventListener('change', this.toggle);\n this.checkboxTargets.forEach(checkbox => checkbox.addEventListener('change', this.refresh));\n this.refresh();\n });\n }\n\n disconnect() {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.removeEventListener('change', this.toggle);\n this.checkboxTargets.forEach((checkbox) => checkbox.removeEventListener('change', this.refresh));\n }\n\n private toggle(event: Event) {\n event.preventDefault();\n let target = event.target as HTMLInputElement;\n this.checkboxTargets.forEach((checkbox) => checkbox.checked = target.checked);\n }\n\n private refresh() {\n const checkboxesCount = this.checkboxTargets.length;\n const checkboxesCheckedCount = this.checked.length;\n\n this.selectAllTarget.checked = checkboxesCheckedCount > 0;\n this.selectAllTarget.indeterminate = checkboxesCheckedCount > 0 && checkboxesCheckedCount < checkboxesCount;\n }\n}","import {BaseController} from \"./base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"button\", \"copy\", \"fallback\"];\r\n static values = {removeUnused: Boolean};\r\n\r\n declare readonly sourceTarget: HTMLElement;\r\n declare readonly copyTarget: HTMLElement;\r\n declare readonly hasCopyTarget: boolean;\r\n declare readonly fallbackTarget: HTMLElement;\r\n declare readonly hasFallbackTarget: boolean;\r\n\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n declare readonly removeUnusedValue: boolean;\r\n\r\n supported = false;\r\n\r\n connect() {\r\n this.supported = document.queryCommandSupported(\"copy\");\r\n\r\n if (this.hasRemoveUnusedValue && this.removeUnusedValue) {\r\n if (this.supported && this.hasFallbackTarget) {\r\n this.fallbackTarget.remove();\r\n } else if (this.hasCopyTarget) {\r\n this.copyTarget.remove();\r\n }\r\n }\r\n }\r\n\r\n select(event: MouseEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n }\r\n\r\n copy(event: ClipboardEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n if (this.supported) {\r\n document.execCommand(\"copy\");\r\n }\r\n }\r\n}\r\n","export function isHTMLLinkElement(element: Element): element is HTMLLinkElement {\n return element.nodeName == \"LINK\";\n}\n\nexport function isHTMLAnchorElement(element: Element): element is HTMLAnchorElement {\n return element.nodeName == \"A\";\n}\n\nexport function isHTMLFormElement(element: Element): element is HTMLFormElement {\n return element.nodeName == \"FORM\";\n}\n\nexport function isHTMLInputElement(element: Element): element is HTMLInputElement {\n return element.nodeName == \"INPUT\";\n}\n\nexport function isHTMLButtonElement(element: Element): element is HTMLButtonElement {\n return element.nodeName == \"BUTTON\";\n}\n\nexport function isHTMLSelectElement(element: Element): element is HTMLSelectElement {\n return element.nodeName == \"SELECT\";\n}\n\nexport function isHTMLImageElement(element: Element): element is HTMLImageElement {\n return element.nodeName == \"IMG\";\n}\n\nexport function isElementCheckable(element: Element): element is HTMLInputElement & { checked: boolean } {\n return isHTMLInputElement(element) && (element.type === \"radio\" || element.type === \"checkbox\");\n}\n","import {BaseController} from './base_controller';\nimport {isHTMLFormElement, isHTMLAnchorElement} from \"./utilities/elements\";\n\nexport class ConfirmController extends BaseController {\n\n static values = {\n message: String,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get message(): string {\n return this.hasMessageValue ? this.messageValue : 'Are you sure?';\n }\n\n initialize() {\n this.confirm = this.confirm.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n let element = this.el;\n if (isHTMLFormElement(element)) {\n element.addEventListener(\"submit\", this.confirm);\n } else if (isHTMLAnchorElement(element)) {\n element.addEventListener(\"click\", this.confirm);\n } else {\n throw new Error(\"Can't handle confirmation on attached element\");\n }\n });\n }\n\n confirm(event: Event) {\n if (!(window.confirm(this.message))) {\n event.preventDefault();\n this.dispatch(this.el, \"confirm:cancelled\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class ConfirmNavigationController extends BaseController {\n\n static values = {_message: String};\n\n declare readonly _messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get _message(): string {\n return this.hasMessageValue ? this._messageValue : \"Do you want to leave this page? Changes you made may not be saved\";\n }\n\n initialize() {\n this.handlePopstate = this.handlePopstate.bind(this);\n this.handleTurboNavigation = this.handleTurboNavigation.bind(this);\n }\n\n connect() {\n window.onbeforeunload = () => this._message;\n window.addEventListener(\"popstate\", this.handlePopstate);\n window.addEventListener(\"submit\", () => {\n window.removeEventListener(\"popstate\", this.handlePopstate);\n window.onbeforeunload = null;\n });\n window.addEventListener(\"turbolinks:before-visit\", this.handleTurboNavigation);\n window.addEventListener(\"turbo:before-visit\", this.handleTurboNavigation);\n }\n\n handlePopstate(_event: PopStateEvent) {\n return false;\n }\n\n handleTurboNavigation(event: Event) {\n if (!confirm(this._message)) {\n event.preventDefault();\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DebugController extends BaseController {\n\n static targets = [\"test\"];\n declare testTargets: HTMLElement[];\n\n connect() {\n console.log(\"Debug Controller\", this, this.testTargets);\n }\n}\n","import {BaseController} from \"./base_controller\";\nimport {isElementCheckable, isHTMLSelectElement} from \"./utilities/elements\";\n\nexport class DetectDirtyController extends BaseController {\n\n loadValue: null | string | boolean = null;\n\n initialize() {\n this.checkDirty = this.checkDirty.bind(this);\n }\n\n connect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n this.loadValue = element.checked;\n } else {\n this.loadValue = element.value;\n }\n this.checkDirty();\n element.addEventListener(\"input\", this.checkDirty);\n element.addEventListener(\"change\", this.checkDirty);\n }\n\n disconnect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n element.removeEventListener(\"input\", this.checkDirty);\n element.removeEventListener(\"change\", this.checkDirty);\n }\n\n restore() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n element.checked = element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n options.forEach((option) => {\n option.selected = option.value == this.loadValue;\n });\n } else {\n options.forEach((option) => option.selected = option.defaultSelected);\n }\n Array.from(element.options).forEach(option => option.selected = option.defaultSelected);\n } else {\n element.value = element.defaultValue;\n }\n }\n\n private checkDirty(_event?: Event) {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\n let dirty: boolean;\n if (isElementCheckable(element)) {\n dirty = element.checked != element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n dirty = element.value != this.loadValue;\n } else {\n dirty = options.some((option) => option.selected != option.defaultSelected);\n }\n } else {\n dirty = element.value != element.defaultValue;\n }\n\n if (dirty) {\n element.setAttribute(\"data-dirty\", \"true\");\n } else {\n element.removeAttribute(\"data-dirty\");\n }\n }\n\n}\n\nexport function isDirty(element: HTMLElement) {\n return element.hasAttribute(\"data-dirty\");\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class DisableInputsController extends BaseController {\r\n\r\n static targets = [\"disabler\", \"disable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasDisablerTarget: boolean;\r\n declare readonly disablerTarget: HTMLInputElement;\r\n declare readonly disableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasDisablerTarget && this.disablerTarget.checked) {\r\n this.disableInputs();\r\n } else {\r\n this.enableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.disableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.disableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from './base_controller';\nimport {isHTMLAnchorElement, isHTMLButtonElement, isHTMLInputElement} from \"./utilities/elements\";\n\nexport class DisableWithController extends BaseController {\n\n static values = {\n message: String,\n timeout: Number,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n declare readonly timeoutValue: number;\n declare readonly hasTimeoutValue: boolean;\n\n _cacheText?: string;\n _timeoutHandle?: ReturnType;\n\n get _message(): string {\n return this.hasMessageValue ? this.messageValue : 'Submitting...';\n }\n\n get _timeout(): number {\n return this.hasTimeoutValue ? this.timeoutValue : 1000;\n }\n\n initialize() {\n this.enable = this.enable.bind(this);\n this.disable = this.disable.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n this.el.addEventListener(\"click\", this.disable);\n });\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n disable(event?: Event) {\n let element = this.el;\n\n if (this._isDisabled(element)) {\n event?.preventDefault();\n event?.stopImmediatePropagation();\n } else {\n this._cacheText = this._getElText(element);\n this._setElText(element, this._message);\n this._disable(element);\n setTimeout(this.enable, this._timeout);\n }\n }\n\n enable(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n if (this._isDisabled(element)) {\n this._setElText(element, this._cacheText!);\n this._enable(element);\n }\n }\n\n _isDisabled(el: HTMLElement): boolean {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n return el.disabled;\n } else {\n return el.dataset.disabled == \"true\";\n }\n }\n\n _getElText(el: HTMLElement): string {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n return el.value;\n } else {\n return el.innerText;\n }\n }\n\n _setElText(el: HTMLElement, str: string) {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n el.value = str;\n } else if (isHTMLButtonElement(el) || isHTMLAnchorElement(el)) {\n el.innerText = str;\n }\n }\n\n _disable(el: HTMLElement) {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n el.disabled = true;\n } else {\n el.dataset.disabled = \"true\";\n }\n }\n\n _enable(el: HTMLElement) {\n if (isHTMLInputElement(el) && el.type == \"submit\" || isHTMLButtonElement(el)) {\n el.disabled = false;\n } else {\n el.dataset.disabled = undefined;\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DismissableController extends BaseController {\n\n dismiss() {\n this.el.remove();\n }\n\n}\n","import {useMutation} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class EmptyDomController extends BaseController {\n\n static classes = [\"empty\", \"notEmpty\"];\n static values = {scopeSelector: String};\n\n declare hasEmptyClass: boolean;\n declare emptyClass: string;\n declare hasNotEmptyClass: boolean;\n declare notEmptyClass: string;\n\n declare hasScopeSelectorValue: boolean;\n declare scopeSelectorValue: string;\n\n get emptyClasses(): string[] {\n return this.emptyClass.split(\" \");\n }\n\n get notEmptyClasses(): string[] {\n return this.notEmptyClass.split(\" \");\n }\n\n get children(): Element[] {\n let element = this.el;\n if (this.hasScopeSelectorValue) {\n return Array.from(element.querySelectorAll(this.scopeSelectorValue));\n } else {\n return Array.from(element.children);\n }\n }\n\n connect() {\n useMutation(this, {element: this.el, childList: true});\n this.checkEmpty();\n }\n\n mutate(entries: MutationRecord[]) {\n this.checkEmpty();\n }\n\n checkEmpty() {\n let element = this.el;\n let children = this.children;\n if (children.length === 0) {\n this._removeNotEmptyClasses();\n this._addEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:empty\");\n } else {\n this._addNotEmptyClasses();\n this._removeEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:not-empty\", {detail: {count: children.length}});\n }\n }\n\n private _removeEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.remove(...this.emptyClasses);\n }\n }\n\n private _addNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.add(...this.notEmptyClasses);\n }\n }\n\n private _addEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.add(...this.emptyClasses);\n }\n }\n\n private _removeNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.remove(...this.notEmptyClasses);\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class EnableInputsController extends BaseController {\r\n\r\n static targets = [\"enabler\", \"enable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasEnablerTarget: boolean;\r\n declare readonly enablerTarget: HTMLInputElement;\r\n declare readonly enableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasEnablerTarget && this.enablerTarget.checked) {\r\n this.enableInputs();\r\n } else {\r\n this.disableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.enableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.enableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class FallbackImageController extends BaseController {\r\n\r\n static values = {placeholder: String};\r\n\r\n declare readonly placeholderValue: string;\r\n declare readonly hasPlaceholderValue: boolean;\r\n\r\n connect() {\r\n let element = this.el as HTMLImageElement;\r\n\r\n element.onerror = () => {\r\n if (this.hasPlaceholderValue) {\r\n element.src = this.placeholderValue;\r\n } else {\r\n element.style.display = \"none\";\r\n }\r\n };\r\n }\r\n\r\n}\r\n","import {BaseController} from './base_controller';\r\nimport {isHTMLFormElement, isHTMLInputElement} from \"./utilities/elements\";\r\n\r\ninterface FormSavePayload {\r\n [idx: string]: {\r\n [idx: string]: string | boolean\r\n }\r\n}\r\n\r\nexport class FormSaveController extends BaseController {\r\n\r\n static values = {\r\n id: String,\r\n restoreOnLoad: Boolean,\r\n clearOnSubmit: Boolean,\r\n };\r\n\r\n declare readonly idValue: string;\r\n declare readonly hasIdValue: boolean;\r\n declare readonly restoreOnLoadValue: boolean;\r\n declare readonly hasRestoreOnLoadValue: boolean;\r\n declare readonly clearOnSubmitValue: boolean;\r\n declare readonly hasClearOnSubmitValue: boolean;\r\n\r\n get formID() {\r\n if (this.hasIdValue) {\r\n return this.idValue;\r\n }\r\n let elementID = (this.el as HTMLFormElement).id;\r\n\r\n if (elementID !== \"\") {\r\n return elementID;\r\n } else {\r\n throw new Error(`No ID value to uniquely identify this form. Please either specify data-${this.identifier}-id-value or give this form an 'id' attribute. `);\r\n }\r\n }\r\n\r\n get formIdentifier() {\r\n const url = location.href;\r\n return `${url} ${this.formID}`;\r\n }\r\n\r\n get formElements() {\r\n return (this.el as HTMLFormElement).elements;\r\n }\r\n\r\n get formData(): FormSavePayload {\r\n let data: FormSavePayload = {[this.formIdentifier]: {}};\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name.length > 0) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n data[this.formIdentifier][el.name] = el.checked;\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.checked) {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n } else {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n get restoreOnLoad() {\r\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\r\n }\r\n\r\n get clearOnSubmit() {\r\n return this.hasClearOnSubmitValue ? this.clearOnSubmitValue : true;\r\n }\r\n\r\n initialize() {\r\n this._clear = this._clear.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n let element = this.el;\r\n if (!isHTMLFormElement(element)) {\r\n throw new Error('Expected controller to be mounted on a form element.');\r\n }\r\n\r\n if (this.restoreOnLoad) {\r\n this.restore();\r\n }\r\n if (this.clearOnSubmit) {\r\n this.el.addEventListener('submit', this._clear);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.clearOnSubmit) {\r\n this.el.removeEventListener('submit', this._clear);\r\n }\r\n }\r\n\r\n _clear() {\r\n localStorage.removeItem(this.formIdentifier);\r\n this.dispatch(this.el, `form-save:cleared`);\r\n }\r\n\r\n clear(event?: Event) {\r\n event?.preventDefault();\r\n this._clear();\r\n }\r\n\r\n save(event: Event) {\r\n event.preventDefault();\r\n let data = this.formData;\r\n localStorage.setItem(this.formIdentifier, JSON.stringify(data[this.formIdentifier]));\r\n this.dispatch(this.el, `form-save:save:success`);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n if (localStorage.getItem(this.formIdentifier)) {\r\n const savedData = JSON.parse(localStorage.getItem(this.formIdentifier)!); // get and parse the saved data from localStorage\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name in savedData) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n el.checked = savedData[el.name];\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.value == savedData[el.name]) {\r\n el.checked = true;\r\n }\r\n } else {\r\n el.value = savedData[el.name];\r\n }\r\n }\r\n }\r\n this.dispatch(this.el, `form-save:restore:success`);\r\n } else {\r\n this.dispatch(this.el, `form-save:restore:empty`);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {useIntersection} from \"stimulus-use\";\n\nexport class IntersectionController extends BaseController {\n\n static values = {threshold: String};\n\n declare readonly isVisible: boolean;\n declare readonly thresholdValue: string;\n declare readonly hasThresholdValue: boolean;\n\n get threshold(): number[] {\n if (this.hasThresholdValue) {\n return this.thresholdValue.split(',').map(val => Number.parseFloat(val.trim())).filter(val => val >= 0 && val <= 1);\n } else {\n return [0, 1];\n }\n }\n\n connect() {\n useIntersection(this, {\n threshold: this.threshold,\n element: this.el,\n });\n }\n\n appear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:appear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n disappear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:disappear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n}\n","import {useIntersection} from \"stimulus-use\";\nimport {AsyncBlockController} from \"./async_block_controller\";\n\nexport class LazyBlockController extends AsyncBlockController {\n\n declare observe: () => void;\n declare unobserve: () => void;\n declare isVisible: boolean;\n declare disappear: () => void;\n\n connect() {\n let element = this.el;\n\n if (\"IntersectionObserver\" in window) {\n [this.observe, this.unobserve] = useIntersection(this, {element, threshold: 0.3});\n } else {\n // Client doesn't support intersection observer, fallback to pre-loading\n this.loadContent();\n }\n }\n\n appear(entry: IntersectionObserverEntry) {\n if (entry.target === this.el && entry.isIntersecting) {\n this.loadContent();\n if (this.unobserve) {\n this.unobserve();\n }\n }\n }\n\n}\n","const smoothSupported = \"scrollBehavior\" in document.documentElement.style;\r\nlet smoothPolyfilled: boolean;\r\n\r\nexport async function scrollToElement(element: Element, {behavior = \"smooth\", block = \"start\", inline = \"nearest\"}: ScrollIntoViewOptions = {}) {\r\n if (behavior == \"smooth\" && !smoothSupported) {\r\n await polyfillSmooth();\r\n }\r\n element.scrollIntoView({behavior, block, inline});\r\n}\r\n\r\nasync function polyfillSmooth() {\r\n const {polyfill} = await import(/* webpackChunkName: \"smoothscroll-polyfill\" */ \"smoothscroll-polyfill\");\r\n if (smoothPolyfilled) {\r\n return;\r\n }\r\n smoothPolyfilled = true;\r\n polyfill();\r\n}\r\n\r\nexport function getScrollParent(node: HTMLElement | null): HTMLElement | null {\r\n if (!node) {\r\n return null;\r\n }\r\n const overflowY = getComputedStyle(node).overflowY;\r\n const isScrollable = overflowY !== \"visible\" && overflowY !== \"hidden\";\r\n\r\n if (isScrollable && node.scrollHeight >= node.clientHeight) {\r\n return node;\r\n }\r\n\r\n return getScrollParent(node.parentElement) || document.body;\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\nimport dialogPolyfill from \"dialog-polyfill\";\r\n\r\nexport class LightboxImageController extends BaseController {\r\n\r\n static values = {\r\n src: String,\r\n srcSet: String,\r\n sizes: String,\r\n };\r\n static classes = [\"modal\", \"image\"];\r\n\r\n declare readonly hasModalClass: boolean;\r\n declare readonly modalClass: string;\r\n declare readonly hasImageClass: boolean;\r\n declare readonly imageClass: string;\r\n declare readonly hasSrcValue: boolean;\r\n declare readonly srcValue: string;\r\n declare readonly hasSrcSetValue: boolean;\r\n declare readonly srcSetValue: string;\r\n declare readonly hasSizesValue: boolean;\r\n declare readonly sizesValue: string;\r\n _dialog: HTMLDialogElement | null = null;\r\n\r\n get src(): string {\r\n return this.hasSrcValue ? this.srcValue : (this.el as HTMLImageElement).src;\r\n }\r\n\r\n get srcSet(): string {\r\n return this.hasSrcSetValue ? this.srcSetValue : (this.el as HTMLImageElement).srcset;\r\n }\r\n\r\n get sizes(): string {\r\n return this.hasSizesValue ? this.sizesValue : (this.el as HTMLImageElement).sizes;\r\n }\r\n\r\n get modalClassName() {\r\n return this.hasModalClass ? this.modalClass : \"image-lightbox-dialog\";\r\n }\r\n\r\n get imageClassName() {\r\n return this.hasImageClass ? this.imageClass : \"image-lightbox-image\";\r\n }\r\n\r\n initialize() {\r\n this.open = this.open.bind(this);\r\n this.close = this.close.bind(this);\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n open() {\r\n let element = this.el as HTMLImageElement;\r\n if (this._dialog) {\r\n return;\r\n }\r\n this._dialog = document.createElement(\"dialog\");\r\n\r\n let image = document.createElement(\"img\") as HTMLImageElement;\r\n image.className = this.imageClassName;\r\n image.src = this.src;\r\n image.srcset = this.srcSet;\r\n image.sizes = this.sizes;\r\n this._dialog.appendChild(image);\r\n\r\n element.insertAdjacentElement(\"afterend\", this._dialog);\r\n dialogPolyfill.registerDialog(this._dialog);\r\n this._dialog.className = this.modalClassName;\r\n this._dialog.showModal();\r\n scrollToElement(this._dialog, {behavior: \"smooth\", block: \"end\"}).catch(() => this._dialog!.scrollIntoView(false));\r\n this._dialog.addEventListener(\"click\", this.close);\r\n this._dialog.addEventListener(\"cancel\", this.close);\r\n this._dialog.addEventListener(\"close\", this.close);\r\n }\r\n\r\n close() {\r\n if (this._dialog) {\r\n this._dialog.close();\r\n this._dialog.remove();\r\n this._dialog = null;\r\n scrollToElement(this.el, {behavior: \"smooth\", block: \"end\"}).catch(() => this.el.scrollIntoView(false));\r\n }\r\n }\r\n\r\n} ","import {BaseController} from \"./base_controller\";\n\nexport class LimitedSelectionCheckboxesController extends BaseController {\n\n static targets = [\"input\", \"error\"];\n static values = {max: Number, message: String};\n\n declare readonly hasErrorTarget: boolean;\n declare readonly errorTarget: HTMLElement;\n declare readonly inputTargets: HTMLInputElement[];\n declare readonly maxValue: number;\n declare readonly messageValue: string;\n\n initialize() {\n this.handleInputs = this.handleInputs.bind(this);\n }\n\n connect() {\n this.inputTargets.forEach((el) => el.addEventListener(\"change\", this.handleInputs));\n }\n\n disconnect() {\n this.inputTargets.forEach((el) => el.removeEventListener(\"change\", this.handleInputs));\n }\n\n handleInputs(event: Event) {\n let tickedInputs = this.inputTargets.reduce((previousValue, el) => el.checked ? previousValue + 1 : previousValue, 0);\n let target = event.target as HTMLInputElement;\n if (tickedInputs > this.maxValue) {\n event.preventDefault();\n target.checked = false;\n this.dispatch(target, \"change\");\n this.dispatch(target, \"limited-selection:too-many\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = this.messageValue;\n }\n } else {\n this.dispatch(target, \"limited-selection:selection\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = \"\";\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class NestedFormController extends BaseController {\n static targets = ['target', 'template'];\n static values = {\n insertMode: String,\n wrapperClass: String,\n };\n\n declare readonly targetTarget: HTMLElement;\n declare readonly templateTarget: HTMLTemplateElement | HTMLScriptElement;\n\n declare readonly wrapperClassValue: string;\n declare readonly hasWrapperSelectorValue: boolean;\n declare readonly insertModeValue: InsertPosition;\n declare readonly hasInsertModeValue: boolean;\n\n get wrapperClass() {\n return this.hasWrapperSelectorValue ? this.wrapperClassValue : 'nested-fields';\n }\n\n get insertMode(): InsertPosition {\n return this.hasInsertModeValue ? this.insertModeValue : 'beforeend';\n }\n\n connect() {\n this.checkStructure();\n }\n\n add(event?: Event) {\n event?.preventDefault();\n\n const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, this.generateID());\n this.targetTarget.insertAdjacentHTML(this.insertMode, content);\n }\n\n remove(event: Event) {\n event.preventDefault();\n const wrapper: HTMLElement | null = (event.target as HTMLElement).closest(`.${this.wrapperClass}`);\n if (wrapper == null) {\n throw new Error(`#remove was clicked from outside of a child record. Could not find an ancestor with class .${this.wrapperClass}`);\n }\n\n if (wrapper.dataset.newRecord === 'true') {\n wrapper.remove();\n } else {\n wrapper.style.display = 'none';\n let destroyInput = wrapper.querySelector(\"input[name*='_destroy']\") as HTMLInputElement | null;\n if (destroyInput == null) {\n throw new Error(`Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.`);\n }\n\n destroyInput.value = \"1\";\n }\n }\n\n generateID(): string {\n return new Date().getTime().toString() + Math.random().toString().slice(2);\n }\n\n private checkStructure() {\n let template = this.templateTarget.innerHTML;\n\n if (template.indexOf('NEW_RECORD')) {\n 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`\");\n }\n }\n}","import {BaseController} from \"./base_controller\";\n\nexport class PasswordConfirmController extends BaseController {\n\n static targets = [\"password\"];\n static classes = [\"error\"];\n\n declare readonly passwordTargets: HTMLInputElement[];\n\n declare readonly errorClass: string;\n declare readonly hasErrorClass: boolean;\n\n initialize() {\n this.checkPasswordsMatch = this.checkPasswordsMatch.bind(this);\n }\n\n connect() {\n this.passwordTargets.forEach((el) => el.addEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n disconnect() {\n this.passwordTargets.forEach((el) => el.removeEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n private allPasswordsMatch(): boolean {\n let values = new Set(this.passwordTargets.map(el => el.value)); // Create a unique set of the password values\n 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)\n }\n\n private checkPasswordsMatch() {\n let element = this.el;\n if (this.allPasswordsMatch()) {\n this.dispatch(element, \"password-confirm:match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.remove(this.errorClass));\n }\n } else {\n this.dispatch(element, \"password-confirm:no-match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.add(this.errorClass));\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class PasswordPeekController extends BaseController {\n\n static targets = [\"password\"];\n\n declare readonly passwordTarget: HTMLInputElement;\n\n peak(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"text\";\n }\n\n hide(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"password\";\n }\n\n toggle(event?: Event) {\n event?.preventDefault();\n if (this.passwordTarget.type === \"password\") {\n this.peak();\n } else {\n this.hide();\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class RemoteFormController extends BaseController {\r\n static targets = [];\r\n\r\n static values = {selector: String};\r\n\r\n declare readonly hasSelectorValue: boolean;\r\n declare readonly selectorValue: string;\r\n\r\n get selector(): string {\r\n return this.hasSelectorValue ? this.selectorValue : `[data-controller~=\"${this.identifier}\"]`;\r\n }\r\n\r\n replace(event: { detail: [Element, any, XMLHttpRequest] }) {\r\n const [data, status, xhr] = event.detail;\r\n if (data instanceof Node) {\r\n let new_element = data.querySelector(this.selector);\r\n\r\n if (new_element == null) {\r\n throw new Error(`expected new form DOM with [data-controller=\"${this.identifier}\"] to be present in returned payload`);\r\n }\r\n\r\n let parentNode = this.el.parentNode;\r\n if (parentNode == null) {\r\n throw new Error('expected form to have a DOM parent, could not execute replaceChild');\r\n }\r\n parentNode.replaceChild(new_element, this.el);\r\n } else {\r\n console.log('Unknown', data);\r\n }\r\n }\r\n}\r\n","import {useDebounce, useWindowResize} from \"stimulus-use\";\nimport {WindowResizePayload} from \"stimulus-use/dist/use-window-resize/use-window-resize\";\nimport {BaseController} from \"./base_controller\";\n\ninterface ResponsiveIframeMessage {\n name: string,\n height: number,\n}\n\nexport class ResponsiveIframeWrapperController extends BaseController {\n\n initialize() {\n this.messageReceived = this.messageReceived.bind(this);\n }\n\n connect() {\n window.addEventListener(\"message\", this.messageReceived);\n }\n\n disconnect() {\n window.removeEventListener(\"message\", this.messageReceived);\n }\n\n messageReceived(message: MessageEvent) {\n let data = message.data;\n if (data.hasOwnProperty(\"name\") && data.name === \"iframe-body\" && data.hasOwnProperty(\"height\")) {\n this.resize(data.height);\n }\n }\n\n resize(height: number) {\n (this.el as HTMLIFrameElement).style.height = `${height}px`;\n }\n\n}\n\nexport class ResponsiveIframeBodyController extends BaseController {\n\n static debounces = [\"postUpdate\"];\n\n declare observe: () => void;\n declare unobserve: () => void;\n\n connect() {\n // If this Window is inside a frame\n if (window.self !== window.top) {\n useWindowResize(this);\n useDebounce(this, {});\n this.postUpdate();\n } else {\n // Not an iframe\n }\n }\n\n windowResize(payload: WindowResizePayload) {\n this.postUpdate();\n };\n\n postUpdate() {\n let payload: ResponsiveIframeMessage = {name: \"iframe-body\", height: this.getHeight()};\n window.parent.postMessage(\n payload,\n \"*\",\n );\n }\n\n getHeight(): number {\n const body = document.body;\n const html = document.documentElement;\n\n // Get the largest height out of body and html's various height measurements\n return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n }\n\n}\n","import camelCase from \"camelcase\";\r\nimport {BaseController} from \"../base_controller\";\r\n\r\nexport class EphemeralController extends BaseController {\r\n\r\n _cleanupSelf() {\r\n this.cleanup(this.el);\r\n }\r\n\r\n cleanup(element: HTMLElement) {\r\n element.dataset.controller = element.dataset.controller?.replaceAll(new RegExp(`(\\s|^)${this.identifier}(\\s|$)`, \"g\"), \"\") || \"\";\r\n if (element.dataset.controller == \"\") {\r\n // If there are no controllers left, remove the attribute\r\n delete element.dataset.controller;\r\n }\r\n\r\n let substringIdentifierValueRegex = new RegExp(`(\\s|^)${this.identifier}\\\\..+?(\\s|$)`, \"g\");\r\n element.dataset.target = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-target`)];\r\n if (element.dataset.target == \"\") {\r\n // If there are no targets left, remove the attribute\r\n delete element.dataset.target;\r\n }\r\n\r\n element.dataset.action = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-action`)];\r\n if (element.dataset.action == \"\") {\r\n // If there are no actions left, remove the attribute\r\n delete element.dataset.action;\r\n }\r\n\r\n // @ts-ignore\r\n let values = this.constructor.values;\r\n if (values) {\r\n Object.keys(values).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-value`)]);\r\n }\r\n\r\n // @ts-ignore\r\n let classes = this.constructor.classes;\r\n if (classes) {\r\n Object.keys(classes).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-class`)]);\r\n }\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\n\r\nexport class ScrollIntoFocusController extends EphemeralController {\r\n\r\n static values = {\r\n behavior: String,\r\n block: String,\r\n inline: String,\r\n };\r\n\r\n declare behaviorValue: ScrollBehavior;\r\n declare hasBehaviorValue: boolean;\r\n declare blockValue: ScrollLogicalPosition;\r\n declare hasBlockValue: boolean;\r\n declare inlineValue: ScrollLogicalPosition;\r\n declare hasInlineValue: boolean;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Attempt smooth scrolling, with polyfill\r\n scrollToElement(\r\n this.el,\r\n {\r\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\r\n block: this.hasBlockValue ? this.blockValue : \"center\",\r\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\r\n },\r\n ).catch(() => this.el.scrollIntoView()); // Fallback to snap-scrolling\r\n this._cleanupSelf();\r\n });\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToBottomController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"end\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\nimport {scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToController extends BaseController {\n\n static values = {\n selector: String,\n behavior: String,\n block: String,\n inline: String,\n };\n\n declare selectorValue: string;\n declare behaviorValue: ScrollBehavior;\n declare hasBehaviorValue: boolean;\n declare blockValue: ScrollLogicalPosition;\n declare hasBlockValue: boolean;\n declare inlineValue: ScrollLogicalPosition;\n declare hasInlineValue: boolean;\n\n scroll() {\n let target = document.querySelector(this.selectorValue);\n if (!target) {\n console.warn(`Could not find target for '${this.selectorValue}'`);\n return;\n }\n\n scrollToElement(\n target!,\n {\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\n block: this.hasBlockValue ? this.blockValue : \"center\",\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\n },\n ).catch(() => target!.scrollIntoView()); // Fallback to snap-scrolling\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToTopController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"start\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class SelfDestructController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n timeout: null | ReturnType = null;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Only start countdown on first paint\r\n this.timeout = setTimeout(() => this.el.remove(), this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.timeout) {\r\n clearTimeout(this.timeout);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class StickyController extends BaseController {\r\n\r\n static classes = [\"stuck\"];\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare readonly hasStuckClass: boolean;\r\n declare readonly stuckClass: string;\r\n declare readonly hasModeValue: \"top\" | \"bottom\";\r\n declare readonly modeValue: \"top\" | \"bottom\";\r\n\r\n _magicElement: HTMLDivElement | null = null;\r\n\r\n get _mode(): \"top\" | \"bottom\" {\r\n return this.hasModeValue ? this.modeValue : \"top\";\r\n }\r\n\r\n createMagicElement() {\r\n // Magic element placed next to the sticky el that acts as an external border.\r\n // When the magic element is off the page, we know that the sticky el is \"stuck\"\r\n if (this._magicElement !== null) {\r\n return;\r\n }\r\n\r\n this._magicElement = document.createElement(\"div\");\r\n switch (this._mode) {\r\n case \"top\":\r\n this.el.insertAdjacentElement(\"beforebegin\", this._magicElement);\r\n break;\r\n case \"bottom\":\r\n this.el.insertAdjacentElement(\"afterend\", this._magicElement);\r\n break;\r\n }\r\n }\r\n\r\n connect() {\r\n let element = this.el;\r\n this.createMagicElement();\r\n\r\n const observer = new IntersectionObserver(entries => {\r\n entries.forEach(entry => {\r\n if (entry.target !== this._magicElement) {\r\n return;\r\n }\r\n if (entry.intersectionRatio === 0) {\r\n element.classList.add(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n } else if (entry.intersectionRatio === 1) {\r\n element.classList.remove(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n }\r\n });\r\n\r\n }, {\r\n threshold: [0, 1],\r\n });\r\n observer.observe(this._magicElement!);\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\n\nexport class TeleportController extends EphemeralController {\n\n static values = {target: String, insert: String, immediate: Boolean};\n\n declare readonly immediateValue: boolean;\n declare readonly hasImmediateValue: boolean;\n declare readonly targetValue: string;\n declare readonly hasInsertValue: boolean;\n declare readonly insertValue: InsertPosition | \"replaceOuter\" | \"replaceInner\" | \"prepend\" | \"append\";\n\n connect() {\n if (!this.hasInsertValue) {\n throw new Error(\"`insert` value was not specified\");\n }\n\n requestAnimationFrame(() => {\n if (this.hasImmediateValue && this.immediateValue) {\n this.execute();\n }\n });\n }\n\n execute(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n let destination = document.querySelector(this.targetValue);\n\n if (destination == null) {\n this.dispatch(element, \"teleport:error\");\n return;\n }\n\n let copy = element.cloneNode(true) as HTMLElement;\n this.cleanup(copy);\n\n switch (this.insertValue) {\n case \"beforebegin\":\n case \"beforeend\":\n case \"afterend\":\n case \"afterbegin\":\n destination.insertAdjacentHTML(this.insertValue, copy.outerHTML);\n break;\n case \"replaceOuter\":\n destination.outerHTML = copy.outerHTML;\n break;\n case \"replaceInner\":\n destination.innerHTML = copy.outerHTML;\n break;\n case \"prepend\":\n destination.insertAdjacentHTML(\"afterbegin\", copy.outerHTML);\n break;\n case \"append\":\n destination.insertAdjacentHTML(\"beforeend\", copy.outerHTML);\n break;\n default:\n throw new Error(\"`insert` value was not specified\");\n\n }\n element.remove();\n }\n\n}\n","import {useClickOutside, useHover} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport type ToggleClassMode = \"on\" | \"off\" | \"toggle\"\n\nexport class ToggleClassController extends BaseController {\n\n static targets = [\"toggle\"];\n static values = {\n class: String,\n mouseEnter: String,\n mouseLeave: String,\n clickAway: Boolean,\n initial: String,\n };\n\n declare readonly toggleTargets: HTMLElement[];\n\n declare readonly classValue: string;\n declare readonly hasClassValue: boolean;\n\n declare readonly mouseEnterValue: ToggleClassMode;\n declare readonly hasMouseEnterValue: boolean;\n\n declare readonly mouseLeaveValue: ToggleClassMode;\n declare readonly hasMouseLeaveValue: boolean;\n\n declare readonly clickAwayValue: boolean;\n declare readonly hasClickAwayValue: boolean;\n\n declare readonly initialValue: \"on\" | \"off\";\n declare readonly hasInitialValue: boolean;\n\n connect() {\n if (!this.hasClassValue) {\n throw new Error(\"data-toggle-class-class-value must not be empty\");\n }\n\n if (this.hasMouseEnterValue || this.hasMouseLeaveValue) {\n useHover(this);\n }\n\n if (this.hasClickAwayValue && this.clickAwayValue) {\n useClickOutside(this);\n }\n\n requestAnimationFrame(() => {\n if (this.hasInitialValue) {\n if (this.initialValue === \"on\") {\n this.toggleTargets.forEach((target) => this.elementOn(target));\n } else {\n this.toggleTargets.forEach((target) => this.elementOff(target));\n }\n }\n });\n }\n\n clickOutside() {\n this.toggleTargets.forEach((target) => {\n if (this.elementWasToggled(target)) {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n }\n });\n }\n\n mouseEnter() {\n if (this.hasMouseEnterValue) {\n switch (this.mouseEnterValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n mouseLeave() {\n if (this.hasMouseLeaveValue) {\n switch (this.mouseLeaveValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n on(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOn(target);\n });\n }\n\n off(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOff(target);\n });\n }\n\n toggle(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n });\n }\n\n private elementWasToggled(el: HTMLElement): boolean {\n return el.dataset.toggled == \"true\";\n }\n\n private elementToggleStatus(el: HTMLElement) {\n if (this.elementWasToggled(el)) {\n delete el.dataset.toggled;\n } else {\n el.dataset.toggled = \"true\";\n }\n }\n\n private elementToggle(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass));\n }\n\n private elementOn(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, true));\n }\n\n private elementOff(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, false));\n }\n\n}\n","export function isTurboFrame(element: HTMLElement): element is TurboFrame {\r\n return element.nodeName == \"TURBO-FRAME\";\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {isHTMLAnchorElement} from \"./utilities/elements\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\nexport class TurboFrameRCController extends BaseController {\n\n static values = {\n frameId: String,\n src: String,\n loadingMessage: String,\n };\n\n declare readonly frameIdValue: string;\n declare readonly srcValue: string;\n declare readonly hasSrcValue: boolean;\n declare readonly loadingMessageValue: string;\n declare readonly hasLoadingMessageValue: boolean;\n\n toggle(event?: Event) {\n event?.preventDefault();\n let frame = this._getFrame();\n let frameSrc = frame.src;\n if (frameSrc == null || frameSrc !== this._getSrc()) {\n this._setSrc();\n } else {\n this._clear();\n }\n }\n\n setSrc(event?: Event) {\n event?.preventDefault();\n this._setSrc();\n }\n\n clear(event?: Event) {\n event?.preventDefault();\n this._clear();\n }\n\n private _setSrc() {\n let frame = this._getFrame();\n if (this.hasLoadingMessageValue) {\n frame.innerHTML = this.loadingMessageValue;\n }\n frame.src = this._getSrc();\n }\n\n private _clear() {\n let frame = this._getFrame();\n frame.src = \"\";\n frame.innerHTML = \"\";\n }\n\n private _getFrame(): TurboFrame {\n let frame = document.getElementById(`${this.frameIdValue}`);\n if (frame == null) {\n throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);\n }\n if (!isTurboFrame(frame)) {\n throw new Error(`Element targeted by ID '${this.frameIdValue}'`);\n } else {\n return frame;\n }\n }\n\n private _getSrc(): string {\n let element = this.el;\n if (this.hasSrcValue) {\n return this.srcValue;\n } else if (isHTMLAnchorElement(element)) {\n return element.href;\n } else {\n throw new Error(\"No link given to drive frame to\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\n// noinspection SillyAssignmentJS\nexport class TurboFrameRefreshController extends BaseController {\n\n static values = {\n interval: Number,\n poll: Boolean,\n };\n\n declare readonly intervalValue: number;\n declare readonly pollValue: boolean;\n declare readonly hasPollValue: boolean;\n _timeoutHandle: null | ReturnType = null;\n\n get poll(): boolean {\n return this.hasPollValue ? this.pollValue : false;\n }\n\n initialize() {\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n let element = this.el;\n if (isTurboFrame(element)) {\n if (!!element.src) {\n throw new Error('The provided element has no `src` attribute.');\n }\n } else {\n throw new Error('Expected controller to be mounted on a element.');\n }\n if (this.poll) {\n requestAnimationFrame(() => this._timeoutHandle = setTimeout(() => this.refresh(), this.intervalValue));\n }\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n refresh(event?: Event) {\n event?.preventDefault();\n let element = this.el as TurboFrame;\n element.src = element.src;\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class WordCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this.updateWordCount = this.updateWordCount.bind(this);\n }\n\n connect() {\n this.updateWordCount();\n this.inputTarget.addEventListener(\"input\", this.updateWordCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this.updateWordCount);\n }\n\n updateWordCount() {\n let wordCount = 0;\n let textAreaValue = this.inputTarget.value;\n let matches = textAreaValue.match(/\\S+/g);\n wordCount = (matches && matches.length) || 0;\n this.outputTarget.innerText = wordCount.toString();\n if (this.hasErrorClass) {\n if (this.isValidCount(wordCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n"],"names":["BaseController","Controller","constructor","context","super","Proxy","this","get","obj","prop","returnVal","Reflect","self","test","logProperty","toString","apply","target","thisArg","argArray","log","args","el","element","dispatch","eventName","options","mergedOptions","Object","assign","bubbles","cancelable","detail","event","CustomEvent","dispatchEvent","functionName","application","debug","logger","console","groupCollapsed","identifier","groupEnd","AppearanceController","initialize","_handleVisibility","bind","connect","window","addEventListener","document","disconnect","removeEventListener","appear","away","_documentIsActive","visibilityState","hasFocus","AsyncBlockController","_errorMessage","hasErrorMessageValue","errorMessageValue","loadContent","hasReplaceTarget","replaceTarget","fetch","endpointValue","then","response","text","html","newEl","createElement","innerHTML","hasSelectorValue","selectedContent","querySelectorAll","selectorValue","replaceWith","children","catch","err","finally","endpoint","String","errorMessage","selector","AutoSubmitFormController","handler","forEach","e","method","controller","methodName","composeEventName","name","eventPrefix","composedName","extendedEvent","type","composed","originalEvent","defaultOptions","useIntersection","targetElement","controllerDisconnect","observer","IntersectionObserver","entries","entry","isIntersecting","isVisible","call","appearEvent","dispatchAppear","disappearEvent","dispatchDisappear","observe","unobserve","[object Object]","events","onlyVisible","StimulusUse","_a","_b","_c","controllerId","stimulusUseDebug","id","dataset","controllerInitialize","controllerConnect","UseHover","onEnter","onLeave","hover","enhanceController","UseMutation","error","handleError","mutation","MutationObserver","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","requestAnimationFrame","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","value","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","checked","checkboxTargets","filter","checkbox","unchecked","toggle","refresh","hasSelectAllTarget","selectAllTarget","preventDefault","checkboxesCount","checkboxesCheckedCount","indeterminate","ClipboardController","supported","queryCommandSupported","hasRemoveUnusedValue","removeUnusedValue","hasFallbackTarget","fallbackTarget","hasCopyTarget","copyTarget","select","sourceTarget","copy","execCommand","isHTMLAnchorElement","nodeName","isHTMLFormElement","isHTMLInputElement","isHTMLButtonElement","isHTMLSelectElement","isElementCheckable","removeUnused","Boolean","ConfirmController","message","hasMessageValue","messageValue","confirm","Error","ConfirmNavigationController","_message","_messageValue","handlePopstate","handleTurboNavigation","onbeforeunload","_event","DebugController","testTargets","DetectDirtyController","checkDirty","loadValue","restore","defaultChecked","Array","from","every","option","defaultSelected","selected","defaultValue","dirty","some","setAttribute","removeAttribute","DisableInputsController","hasDisablerTarget","disablerTarget","disableInputs","enableInputs","shouldClear","hasClearValue","clearValue","disableTargets","_","disabled","clear","DisableWithController","_timeout","hasTimeoutValue","timeoutValue","enable","disable","_timeoutHandle","_isDisabled","stopImmediatePropagation","_cacheText","_getElText","_setElText","_disable","_enable","str","undefined","timeout","DismissableController","dismiss","EmptyDomController","emptyClasses","emptyClass","split","notEmptyClasses","notEmptyClass","hasScopeSelectorValue","scopeSelectorValue","useMutation","childList","checkEmpty","mutate","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","hasNotEmptyClass","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormSaveController","formID","hasIdValue","idValue","elementID","formIdentifier","location","href","formElements","elements","formData","data","restoreOnLoad","hasRestoreOnLoadValue","restoreOnLoadValue","clearOnSubmit","hasClearOnSubmitValue","clearOnSubmitValue","_clear","localStorage","removeItem","save","setItem","JSON","stringify","getItem","savedData","parse","IntersectionController","threshold","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","disappear","LazyBlockController","smoothSupported","documentElement","smoothPolyfilled","scrollToElement","behavior","block","inline","async","polyfill","polyfillSmooth","scrollIntoView","getScrollParent","node","overflowY","getComputedStyle","parentElement","body","LightboxImageController","hasSrcValue","srcValue","srcSet","hasSrcSetValue","srcSetValue","srcset","sizes","hasSizesValue","sizesValue","modalClassName","hasModalClass","modalClass","imageClassName","hasImageClass","imageClass","open","close","_dialog","image","className","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","showModal","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","NestedFormController","wrapperClass","hasWrapperSelectorValue","wrapperClassValue","insertMode","hasInsertModeValue","insertModeValue","checkStructure","content","templateTarget","replace","generateID","targetTarget","insertAdjacentHTML","wrapper","closest","newRecord","destroyInput","querySelector","Date","getTime","Math","random","slice","indexOf","PasswordConfirmController","checkPasswordsMatch","passwordTargets","allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","status","xhr","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","keys","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","secondsValue","seconds","StickyController","_mode","createMagicElement","_magicElement","intersectionRatio","hasStuckClass","stuckClass","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","ToggleClassController","hasClassValue","hasMouseEnterValue","hasMouseLeaveValue","useHover","hasClickAwayValue","clickAwayValue","onEvent","contains","rect","getBoundingClientRect","windowHeight","windowWidth","clientWidth","left","isElementInViewport","clickOutside","clickOutsideEvent","useClickOutside","hasInitialValue","toggleTargets","initialValue","elementOn","elementOff","elementWasToggled","elementToggleStatus","elementToggle","mouseEnter","mouseEnterValue","on","off","mouseLeave","mouseLeaveValue","toggled","classValue","klass","isTurboFrame","class","clickAway","initial","TurboFrameRCController","frameSrc","_getFrame","_getSrc","_setSrc","setSrc","frame","hasLoadingMessageValue","loadingMessageValue","getElementById","frameIdValue","frameId","loadingMessage","TurboFrameRefreshController","poll","hasPollValue","pollValue","intervalValue","interval","WordCountController","updateWordCount","wordCount","matches","match","isValidCount"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stimulus-library.modern.js","sources":["../src/base_controller.ts","../src/appearance_controller.ts","../src/async_block_controller.ts","../src/auto_submit_form_controller.ts","../node_modules/stimulus-use/dist/support/index.js","../node_modules/stimulus-use/dist/use-intersection/use-intersection.js","../node_modules/stimulus-use/dist/use-click-outside/use-click-outside.js","../node_modules/stimulus-use/dist/stimulus_use.js","../node_modules/stimulus-use/dist/use-hover/use-hover.js","../node_modules/stimulus-use/dist/use-mutation/use-mutation.js","../node_modules/stimulus-use/dist/use-window-resize/use-window-resize.js","../node_modules/stimulus-use/dist/use-debounce/use-debounce.js","../src/autosize_controller.ts","../src/char_count_controller.ts","../src/checkbox_select_all_controller.ts","../src/clipboard_controller.ts","../src/utilities/elements.ts","../src/confirm_controller.ts","../src/confirm_navigation_controller.ts","../src/debug_controller.ts","../src/detect_dirty_controller.ts","../src/disable_inputs_controller.ts","../src/disable_with_controller.ts","../src/dismissable_controller.ts","../src/element_save_controller.ts","../src/empty_dom_controller.ts","../src/enable_inputs_controller.ts","../src/fallback_image_controller.ts","../src/form_save_controller.ts","../src/intersection_controller.ts","../src/lazy_block_controller.ts","../src/utilities/scroll.ts","../src/lightbox_image_controller.ts","../src/limited_selection_checkboxes_controller.ts","../src/nested_form_controller.ts","../src/password_confirm_controller.ts","../src/password_peek_controller.ts","../src/remote_form_controller.ts","../src/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/scroll_into_focus_controller.ts","../src/scroll_to_bottom_controller.ts","../src/scroll_to_controller.ts","../src/scroll_to_top_controller.ts","../src/self_destruct_controller.ts","../src/sticky_controller.ts","../src/teleport_controller.ts","../src/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/turbo_frame_rc_controller.ts","../src/turbo_frame_refresh_controller.ts","../src/word_count_controller.ts"],"sourcesContent":["import {Context, Controller} from \"stimulus\";\n\nexport class BaseController extends Controller {\n\n constructor(context: Context) {\n super(context);\n return new Proxy(this, {\n get: (obj, prop) => {\n let returnVal = Reflect.get(obj, prop);\n let self = this;\n if (logProperty(prop.toString())) {\n if (typeof returnVal == \"function\") {\n return new Proxy(returnVal, {\n apply(target: any, thisArg: any, argArray?: any): any {\n self.log(prop.toString(), {\n args: argArray,\n });\n return Reflect.apply(target, thisArg, argArray);\n },\n });\n } else {\n this.log(prop.toString());\n }\n }\n return returnVal;\n },\n });\n }\n\n get el(): HTMLElement {\n return this.element as HTMLElement;\n }\n\n dispatch(element: HTMLElement, eventName: string, options: CustomEventInit = {}) {\n let mergedOptions = Object.assign({}, {bubbles: true, cancelable: true, detail: {target: element}}, options);\n if (!!mergedOptions.detail.target) {\n mergedOptions.detail.target = element;\n }\n let event = new CustomEvent(eventName, mergedOptions);\n element.dispatchEvent(event);\n }\n\n log(functionName: string, args: {} = {}): void {\n // @ts-ignore\n if (!this.application.debug) {\n return;\n }\n let logger = console;\n logger.groupCollapsed(`%c${this.identifier} %c#${functionName}`, \"color: #3B82F6\", \"color: unset\");\n logger.log({\n element: this.element,\n ...args,\n });\n logger.groupEnd();\n }\n\n}\n\nfunction logProperty(prop: string): boolean {\n switch (prop) {\n case \"application\":\n case \"el\":\n case \"element\":\n case \"constructor\":\n case \"initialize\":\n case \"log\":\n case \"dispatch\":\n case \"data\":\n case \"valueDescriptorMap\":\n case \"identifier\":\n return false;\n }\n\n if (/^_.*?$/.test(prop)) {\n return false;\n }\n if (/^.*?Target(s)?$/.test(prop)) {\n return false;\n }\n if (/^.*?Value$/.test(prop)) {\n return false;\n }\n if (/^.*?ValueChanged$/.test(prop)) {\n return false;\n }\n if (/^.*?Class$/.test(prop)) {\n return false;\n }\n\n return true;\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class AppearanceController extends BaseController {\r\n\r\n initialize() {\r\n this._handleVisibility = this._handleVisibility.bind(this);\r\n }\r\n\r\n connect() {\r\n window.addEventListener(\"focus\", this._handleVisibility);\r\n window.addEventListener(\"blur\", this._handleVisibility);\r\n document.addEventListener(\"visibilitychange\", this._handleVisibility);\r\n this._handleVisibility();\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"focus\", this._handleVisibility);\r\n window.removeEventListener(\"blur\", this._handleVisibility);\r\n document.removeEventListener(\"visibilitychange\", this._handleVisibility);\r\n }\r\n\r\n appear() {\r\n this.dispatch(this.el, \"appearance:appear\");\r\n }\r\n\r\n away() {\r\n this.dispatch(this.el, \"appearance:away\");\r\n }\r\n\r\n _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\n\nexport class AsyncBlockController extends BaseController {\n static targets = [\"replace\"];\n static values = {endpoint: String, errorMessage: String, selector: String};\n\n declare readonly replaceTarget: HTMLElement;\n declare readonly hasReplaceTarget: boolean;\n declare readonly endpointValue: string;\n\n declare readonly hasSelectorValue: boolean;\n declare readonly selectorValue: string;\n\n declare readonly hasErrorMessageValue: boolean;\n declare readonly errorMessageValue: string;\n\n get _errorMessage(): string {\n return this.hasErrorMessageValue ? this.errorMessageValue : \"This content failed to load\";\n }\n\n // This is a simple controller to load a block of content when the page loads.\n // It should be used to give a quick initial response before calling out to an\n // an AJAX endpoint to do some expensive work.\n connect() {\n this.loadContent();\n }\n\n loadContent() {\n let self = this;\n let el = this.hasReplaceTarget ? this.replaceTarget : this.el;\n fetch(this.endpointValue)\n .then((response) => response.text())\n .then((html) => {\n let newEl = document.createElement(\"div\");\n newEl.innerHTML = html;\n if (this.hasSelectorValue) {\n let selectedContent = newEl.querySelectorAll(this.selectorValue);\n el.replaceWith(...selectedContent);\n } else {\n el.replaceWith(...newEl.children);\n }\n // Trigger event to show block has loaded\n self.dispatch(el, \"ajax:success\");\n })\n .catch(err => {\n el.replaceWith(this._errorMessage);\n self.dispatch(el, \"ajax:error\");\n })\n .finally(() => {\n self.dispatch(el, \"ajax:complete\");\n });\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class AutoSubmitFormController extends BaseController {\n\n initialize() {\n this.handler = this.handler.bind(this);\n }\n\n connect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.handler));\n }\n\n disconnect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.handler));\n }\n\n private handler(e: Event) {\n // Trigger synthetic \"submit\" event on form\n this.dispatch((this.el), \"submit\");\n }\n}\n","export const method = (controller, methodName) => {\n const method = controller[methodName];\n if (typeof method == 'function') {\n return method;\n }\n else {\n return (...args) => { };\n }\n};\nexport const composeEventName = (name, controller, eventPrefix) => {\n let composedName = name;\n if (eventPrefix === true) {\n composedName = `${controller.identifier}:${name}`;\n }\n else if (typeof eventPrefix === 'string') {\n composedName = `${eventPrefix}:${name}`;\n }\n return composedName;\n};\nexport const extendedEvent = (type, event, detail) => {\n const { bubbles, cancelable, composed } = event || { bubbles: true, cancelable: true, composed: true };\n if (event) {\n Object.assign(detail, { originalEvent: event });\n }\n const customEvent = new CustomEvent(type, {\n bubbles,\n cancelable,\n composed,\n detail,\n });\n return customEvent;\n};\nexport function isElementInViewport(el) {\n const rect = el.getBoundingClientRect();\n const windowHeight = (window.innerHeight || document.documentElement.clientHeight);\n const windowWidth = (window.innerWidth || document.documentElement.clientWidth);\n const vertInView = (rect.top <= windowHeight) && ((rect.top + rect.height) >= 0);\n const horInView = (rect.left <= windowWidth) && ((rect.left + rect.width) >= 0);\n return (vertInView && horInView);\n}\n//# sourceMappingURL=index.js.map","import { method, extendedEvent, composeEventName } from '../support/index';\nconst defaultOptions = {\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useIntersection = (controller, options = {}) => {\n const { dispatchEvent, eventPrefix } = Object.assign({}, defaultOptions, options);\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n const callback = (entries) => {\n const [entry] = entries;\n if (entry.isIntersecting) {\n dispatchAppear(entry);\n }\n else if (controller.isVisible) {\n dispatchDisappear(entry);\n }\n };\n const dispatchAppear = (entry) => {\n controller.isVisible = true;\n method(controller, 'appear').call(controller, entry);\n // emit a custom \"appear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('appear', controller, eventPrefix);\n const appearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(appearEvent);\n }\n };\n const dispatchDisappear = (entry) => {\n controller.isVisible = false;\n method(controller, 'disappear').call(controller, entry);\n // emit a custom \"disappear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('disappear', controller, eventPrefix);\n const disappearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(disappearEvent);\n }\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observer = new IntersectionObserver(callback, options);\n const observe = () => {\n observer.observe(targetElement);\n };\n const unobserve = () => {\n observer.unobserve(targetElement);\n };\n Object.assign(controller, {\n isVisible: false,\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-intersection.js.map","import { composeEventName, extendedEvent, isElementInViewport } from '../support/index';\nconst defaultOptions = {\n events: ['click', 'touchend'],\n onlyVisible: true,\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useClickOutside = (controller, options = {}) => {\n const { onlyVisible, dispatchEvent, events, eventPrefix } = Object.assign({}, defaultOptions, options);\n const onEvent = (event) => {\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n if (targetElement.contains(event.target) || (!isElementInViewport(targetElement) && onlyVisible)) {\n return;\n }\n // call the clickOutside method of the Stimulus controller\n if (controller.clickOutside) {\n controller.clickOutside(event);\n }\n // emit a custom event\n if (dispatchEvent) {\n const eventName = composeEventName('click:outside', controller, eventPrefix);\n const clickOutsideEvent = extendedEvent(eventName, event, { controller });\n targetElement.dispatchEvent(clickOutsideEvent);\n }\n };\n const observe = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.addEventListener(event, onEvent, false);\n });\n };\n const unobserve = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.removeEventListener(event, onEvent, false);\n });\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-click-outside.js.map","const defaultOptions = {\n debug: false,\n logger: console\n};\nexport class StimulusUse {\n constructor(controller, options = {}) {\n var _a, _b, _c;\n this.log = (functionName, args) => {\n if (!this.debug)\n return;\n this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${functionName}`, 'color: #3B82F6', 'color: unset');\n this.logger.log(Object.assign({ controllerId: this.controllerId }, args));\n this.logger.groupEnd();\n };\n this.debug = (_b = (_a = options === null || options === void 0 ? void 0 : options.debug) !== null && _a !== void 0 ? _a : controller.application.stimulusUseDebug) !== null && _b !== void 0 ? _b : defaultOptions.debug;\n this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : defaultOptions.logger;\n this.controller = controller;\n this.controllerId = controller.element.id || controller.element.dataset.id;\n // make copies of lifecycle functions\n this.controllerInitialize = controller.initialize.bind(controller);\n this.controllerConnect = controller.connect.bind(controller);\n this.controllerDisconnect = controller.disconnect.bind(controller);\n }\n}\n//# sourceMappingURL=stimulus_use.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseHover extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n this.targetElement.addEventListener('mouseenter', this.onEnter);\n this.targetElement.addEventListener('mouseleave', this.onLeave);\n };\n this.unobserve = () => {\n this.targetElement.removeEventListener('mouseenter', this.onEnter);\n this.targetElement.removeEventListener('mouseleave', this.onLeave);\n };\n this.onEnter = () => {\n method(this.controller, 'mouseEnter').call(this.controller);\n this.log('mouseEnter', { hover: true });\n };\n this.onLeave = () => {\n method(this.controller, 'mouseLeave').call(this.controller);\n this.log('mouseLeave', { hover: false });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useHover = (controller, options = {}) => {\n const observer = new UseHover(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-hover.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseMutation extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n try {\n this.observer.observe(this.targetElement, this.options);\n }\n catch (error) {\n this.controller.application.handleError(error, \"At a minimum, one of childList, attributes, and/or characterData must be true\", {});\n }\n };\n this.unobserve = () => {\n this.observer.disconnect();\n };\n this.mutation = (entries) => {\n method(this.controller, 'mutate').call(this.controller, entries);\n this.log('mutate', { entries });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.options = options;\n this.observer = new MutationObserver(this.mutation);\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useMutation = (controller, options = {}) => {\n const observer = new UseMutation(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-mutation.js.map","import { method } from '../support/index';\nexport const useWindowResize = (controller) => {\n const callback = (event) => {\n const { innerWidth, innerHeight } = window;\n const payload = {\n height: innerHeight || Infinity,\n width: innerWidth || Infinity,\n event\n };\n method(controller, 'windowResize').call(controller, payload);\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observe = () => {\n window.addEventListener('resize', callback);\n callback();\n };\n const unobserve = () => {\n window.removeEventListener('resize', callback);\n };\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-window-resize.js.map","import { Controller } from 'stimulus';\nclass DebounceController extends Controller {\n}\nDebounceController.debounces = [];\nconst defaultWait = 200;\nconst debounce = (fn, wait = defaultWait) => {\n let timeoutId = null;\n return function () {\n const args = arguments;\n const context = this;\n const callback = () => fn.apply(context, args);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(callback, wait);\n };\n};\nexport const useDebounce = (controller, options) => {\n var _a;\n const constructor = controller.constructor;\n (_a = constructor.debounces) === null || _a === void 0 ? void 0 : _a.forEach((func) => {\n if (typeof func === \"string\") {\n controller[func] = debounce(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n }\n if (typeof func === \"object\") {\n const { name, wait } = func;\n if (!name)\n return;\n controller[name] = debounce(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n }\n });\n};\n//# sourceMappingURL=use-debounce.js.map","import {useWindowResize} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class AutosizeController extends BaseController {\n\n initialize() {\n this._handler = this._handler.bind(this);\n }\n\n connect() {\n let target = this.el as HTMLTextAreaElement;\n target.style.resize = \"none\";\n target.style.boxSizing = \"border-box\";\n target.addEventListener(\"input\", this._handler);\n target.addEventListener(\"focus\", this._handler);\n useWindowResize(this);\n requestAnimationFrame(this._handler);\n }\n\n windowResize() {\n this._handler();\n }\n\n private _handler() {\n this.autosize(this.el as HTMLTextAreaElement);\n };\n\n private autosize(element: HTMLTextAreaElement) {\n let offset = element.offsetHeight - element.clientHeight;\n element.style.height = \"auto\";\n element.style.height = element.scrollHeight + offset + \"px\";\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class CharCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this._updateCharCount = this._updateCharCount.bind(this);\n }\n\n connect() {\n this._updateCharCount();\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this._updateCharCount);\n }\n\n private _updateCharCount() {\n let charCount = this.inputTarget.value.length;\n this.outputTarget.innerText = charCount.toString();\n if (this.hasErrorClass) {\n if (this._isValidCount(charCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n private _isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n","import {BaseController} from './base_controller';\n\nexport class CheckboxSelectAllController extends BaseController {\n static targets = ['selectAll', 'checkbox'];\n\n declare readonly hasSelectAllTarget: boolean;\n declare readonly selectAllTarget: HTMLInputElement;\n declare readonly checkboxTargets: HTMLInputElement[];\n\n private get checked() {\n return this.checkboxTargets.filter(checkbox => checkbox.checked);\n }\n\n private get unchecked() {\n return this.checkboxTargets.filter(checkbox => !checkbox.checked);\n }\n\n initialize() {\n this.toggle = this.toggle.bind(this);\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.addEventListener('change', this.toggle);\n this.checkboxTargets.forEach(checkbox => checkbox.addEventListener('change', this.refresh));\n this.refresh();\n });\n }\n\n disconnect() {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.removeEventListener('change', this.toggle);\n this.checkboxTargets.forEach((checkbox) => checkbox.removeEventListener('change', this.refresh));\n }\n\n private toggle(event: Event) {\n event.preventDefault();\n let target = event.target as HTMLInputElement;\n this.checkboxTargets.forEach((checkbox) => checkbox.checked = target.checked);\n }\n\n private refresh() {\n const checkboxesCount = this.checkboxTargets.length;\n const checkboxesCheckedCount = this.checked.length;\n\n this.selectAllTarget.checked = checkboxesCheckedCount > 0;\n this.selectAllTarget.indeterminate = checkboxesCheckedCount > 0 && checkboxesCheckedCount < checkboxesCount;\n }\n}","import {BaseController} from \"./base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"button\", \"copy\", \"fallback\"];\r\n static values = {removeUnused: Boolean};\r\n\r\n declare readonly sourceTarget: HTMLElement;\r\n declare readonly copyTarget: HTMLElement;\r\n declare readonly hasCopyTarget: boolean;\r\n declare readonly fallbackTarget: HTMLElement;\r\n declare readonly hasFallbackTarget: boolean;\r\n\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n declare readonly removeUnusedValue: boolean;\r\n\r\n supported = false;\r\n\r\n connect() {\r\n this.supported = document.queryCommandSupported(\"copy\");\r\n\r\n if (this.hasRemoveUnusedValue && this.removeUnusedValue) {\r\n if (this.supported && this.hasFallbackTarget) {\r\n this.fallbackTarget.remove();\r\n } else if (this.hasCopyTarget) {\r\n this.copyTarget.remove();\r\n }\r\n }\r\n }\r\n\r\n select(event: MouseEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n }\r\n\r\n copy(event: ClipboardEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n if (this.supported) {\r\n document.execCommand(\"copy\");\r\n }\r\n }\r\n}\r\n","export function isHTMLLinkElement(element: Element): element is HTMLLinkElement {\n return element.nodeName == \"LINK\";\n}\n\nexport function isHTMLAnchorElement(element: Element): element is HTMLAnchorElement {\n return element.nodeName == \"A\";\n}\n\nexport function isHTMLFormElement(element: Element): element is HTMLFormElement {\n return element.nodeName == \"FORM\";\n}\n\nexport function isHTMLInputElement(element: Element): element is HTMLInputElement {\n return element.nodeName == \"INPUT\";\n}\n\nexport function isHTMLButtonElement(element: Element): element is HTMLButtonElement {\n return element.nodeName == \"BUTTON\";\n}\n\nexport function isHTMLSelectElement(element: Element): element is HTMLSelectElement {\n return element.nodeName == \"SELECT\";\n}\n\nexport function isHTMLImageElement(element: Element): element is HTMLImageElement {\n return element.nodeName == \"IMG\";\n}\n\nexport function isElementCheckable(element: Element): element is HTMLInputElement & { checked: boolean } {\n return isHTMLInputElement(element) && (element.type === \"radio\" || element.type === \"checkbox\");\n}\n","import {BaseController} from './base_controller';\nimport {isHTMLFormElement, isHTMLAnchorElement} from \"./utilities/elements\";\n\nexport class ConfirmController extends BaseController {\n\n static values = {\n message: String,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get message(): string {\n return this.hasMessageValue ? this.messageValue : 'Are you sure?';\n }\n\n initialize() {\n this.confirm = this.confirm.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n let element = this.el;\n if (isHTMLFormElement(element)) {\n element.addEventListener(\"submit\", this.confirm);\n } else if (isHTMLAnchorElement(element)) {\n element.addEventListener(\"click\", this.confirm);\n } else {\n throw new Error(\"Can't handle confirmation on attached element\");\n }\n });\n }\n\n confirm(event: Event) {\n if (!(window.confirm(this.message))) {\n event.preventDefault();\n this.dispatch(this.el, \"confirm:cancelled\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class ConfirmNavigationController extends BaseController {\n\n static values = {_message: String};\n\n declare readonly _messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get _message(): string {\n return this.hasMessageValue ? this._messageValue : \"Do you want to leave this page? Changes you made may not be saved\";\n }\n\n initialize() {\n this.handlePopstate = this.handlePopstate.bind(this);\n this.handleTurboNavigation = this.handleTurboNavigation.bind(this);\n }\n\n connect() {\n window.onbeforeunload = () => this._message;\n window.addEventListener(\"popstate\", this.handlePopstate);\n window.addEventListener(\"submit\", () => {\n window.removeEventListener(\"popstate\", this.handlePopstate);\n window.onbeforeunload = null;\n });\n window.addEventListener(\"turbolinks:before-visit\", this.handleTurboNavigation);\n window.addEventListener(\"turbo:before-visit\", this.handleTurboNavigation);\n }\n\n handlePopstate(_event: PopStateEvent) {\n return false;\n }\n\n handleTurboNavigation(event: Event) {\n if (!confirm(this._message)) {\n event.preventDefault();\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DebugController extends BaseController {\n\n static targets = [\"test\"];\n declare testTargets: HTMLElement[];\n\n connect() {\n console.log(\"Debug Controller\", this, this.testTargets);\n }\n}\n","import {BaseController} from \"./base_controller\";\nimport {isElementCheckable, isHTMLSelectElement} from \"./utilities/elements\";\n\nexport class DetectDirtyController extends BaseController {\n\n loadValue: null | string | boolean = null;\n\n initialize() {\n this.checkDirty = this.checkDirty.bind(this);\n }\n\n connect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n this.loadValue = element.checked;\n } else {\n this.loadValue = element.value;\n }\n this.checkDirty();\n element.addEventListener(\"input\", this.checkDirty);\n element.addEventListener(\"change\", this.checkDirty);\n }\n\n disconnect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n element.removeEventListener(\"input\", this.checkDirty);\n element.removeEventListener(\"change\", this.checkDirty);\n }\n\n restore() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n element.checked = element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n options.forEach((option) => {\n option.selected = option.value == this.loadValue;\n });\n } else {\n options.forEach((option) => option.selected = option.defaultSelected);\n }\n Array.from(element.options).forEach(option => option.selected = option.defaultSelected);\n } else {\n element.value = element.defaultValue;\n }\n }\n\n private checkDirty(_event?: Event) {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\n let dirty: boolean;\n if (isElementCheckable(element)) {\n dirty = element.checked != element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n dirty = element.value != this.loadValue;\n } else {\n dirty = options.some((option) => option.selected != option.defaultSelected);\n }\n } else {\n dirty = element.value != element.defaultValue;\n }\n\n if (dirty) {\n element.setAttribute(\"data-dirty\", \"true\");\n } else {\n element.removeAttribute(\"data-dirty\");\n }\n }\n\n}\n\nexport function isDirty(element: HTMLElement) {\n return element.hasAttribute(\"data-dirty\");\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class DisableInputsController extends BaseController {\r\n\r\n static targets = [\"disabler\", \"disable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasDisablerTarget: boolean;\r\n declare readonly disablerTarget: HTMLInputElement;\r\n declare readonly disableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasDisablerTarget && this.disablerTarget.checked) {\r\n this.disableInputs();\r\n } else {\r\n this.enableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.disableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.disableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from './base_controller';\nimport {isHTMLAnchorElement, isHTMLButtonElement, isHTMLInputElement} from \"./utilities/elements\";\n\nexport class DisableWithController extends BaseController {\n\n static values = {\n message: String,\n timeout: Number,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n declare readonly timeoutValue: number;\n declare readonly hasTimeoutValue: boolean;\n\n _cacheText?: string;\n _timeoutHandle?: ReturnType;\n\n get _message(): string {\n return this.hasMessageValue ? this.messageValue : 'Submitting...';\n }\n\n get _timeout(): number {\n return this.hasTimeoutValue ? this.timeoutValue : 1000;\n }\n\n initialize() {\n this.enable = this.enable.bind(this);\n this.disable = this.disable.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n this.el.addEventListener(\"click\", this.disable);\n });\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n disable(event?: Event) {\n let element = this.el;\n\n if (this._isDisabled(element)) {\n event?.preventDefault();\n event?.stopImmediatePropagation();\n } else {\n this._cacheText = this._getElText(element);\n this._setElText(element, this._message);\n this._disable(element);\n setTimeout(this.enable, this._timeout);\n }\n }\n\n enable(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n if (this._isDisabled(element)) {\n this._setElText(element, this._cacheText!);\n this._enable(element);\n }\n }\n\n _isDisabled(el: HTMLElement): boolean {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n return el.disabled;\n } else {\n return el.dataset.disabled == \"true\";\n }\n }\n\n _getElText(el: HTMLElement): string {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n return el.value;\n } else {\n return el.innerText;\n }\n }\n\n _setElText(el: HTMLElement, str: string) {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n el.value = str;\n } else if (isHTMLButtonElement(el) || isHTMLAnchorElement(el)) {\n el.innerText = str;\n }\n }\n\n _disable(el: HTMLElement) {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n el.disabled = true;\n } else {\n el.dataset.disabled = \"true\";\n }\n }\n\n _enable(el: HTMLElement) {\n if (isHTMLInputElement(el) && el.type == \"submit\" || isHTMLButtonElement(el)) {\n el.disabled = false;\n } else {\n el.dataset.disabled = undefined;\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DismissableController extends BaseController {\n\n dismiss() {\n this.el.remove();\n }\n\n}\n","import {BaseController} from './base_controller';\r\nimport _get from \"lodash-es/get\";\r\nimport _set from \"lodash-es/set\";\r\n\r\nexport class ElementSaveController extends BaseController {\r\n\r\n static targets = [\r\n \"element\",\r\n ];\r\n static values = {\r\n id: String,\r\n attributes: String,\r\n restoreOnLoad: Boolean,\r\n };\r\n declare readonly hasElementTarget: boolean;\r\n declare readonly elementTarget: HTMLElement;\r\n declare readonly elementTargets: HTMLElement[];\r\n declare readonly idValue: string;\r\n declare readonly attributesValue: string;\r\n declare readonly hasIdValue: boolean;\r\n declare readonly restoreOnLoadValue: boolean;\r\n declare readonly hasRestoreOnLoadValue: boolean;\r\n\r\n get _id() {\r\n if (this.hasIdValue) {\r\n return this.idValue;\r\n }\r\n let elementID = this.el.id;\r\n\r\n if (elementID !== \"\") {\r\n return elementID;\r\n } else {\r\n throw new Error(`No ID value to uniquely identify this element. Please either specify data-${this.identifier}-id-value or give this element an 'id' attribute. `);\r\n }\r\n }\r\n\r\n get _uniqueIdentifier() {\r\n const url = location.href;\r\n return `${url} ${this._id}`;\r\n }\r\n\r\n get _restoreOnLoad() {\r\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\r\n }\r\n\r\n get _element(): HTMLElement {\r\n return this.hasElementTarget ? this.elementTarget : this.el;\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n if (this._restoreOnLoad) {\r\n this.restore();\r\n }\r\n });\r\n }\r\n\r\n clear(event?: Event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n localStorage.removeItem(this._uniqueIdentifier);\r\n this.dispatch(this._element, `element-save:cleared`);\r\n }\r\n\r\n save(event?: Event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n let element = this._element;\r\n let attributes = this.attributesValue.split(\" \");\r\n let data: { [idx: string]: any } = {};\r\n attributes.forEach((attr: string) => data[attr] = _get(element, attr));\r\n localStorage.setItem(this._uniqueIdentifier, JSON.stringify(data));\r\n this.dispatch(element, `element-save:save:success`);\r\n }\r\n\r\n restore(event?: Event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n let element = this._element;\r\n if (localStorage.getItem(this._uniqueIdentifier)) {\r\n const savedData = JSON.parse(localStorage.getItem(this._uniqueIdentifier)!); // get and parse the saved data from localStorage\r\n Object.keys(savedData).forEach((attr: string) => {\r\n _set(element as HTMLElement, attr, savedData[attr]);\r\n });\r\n this.dispatch(element, `element-save:restore:success`);\r\n } else {\r\n this.dispatch(element, `element-save:restore:empty`);\r\n }\r\n }\r\n\r\n}\r\n","import {useMutation} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class EmptyDomController extends BaseController {\n\n static classes = [\"empty\", \"notEmpty\"];\n static values = {scopeSelector: String};\n\n declare hasEmptyClass: boolean;\n declare emptyClass: string;\n declare hasNotEmptyClass: boolean;\n declare notEmptyClass: string;\n\n declare hasScopeSelectorValue: boolean;\n declare scopeSelectorValue: string;\n\n get emptyClasses(): string[] {\n return this.emptyClass.split(\" \");\n }\n\n get notEmptyClasses(): string[] {\n return this.notEmptyClass.split(\" \");\n }\n\n get children(): Element[] {\n let element = this.el;\n if (this.hasScopeSelectorValue) {\n return Array.from(element.querySelectorAll(this.scopeSelectorValue));\n } else {\n return Array.from(element.children);\n }\n }\n\n connect() {\n useMutation(this, {element: this.el, childList: true});\n this.checkEmpty();\n }\n\n mutate(entries: MutationRecord[]) {\n this.checkEmpty();\n }\n\n checkEmpty() {\n let element = this.el;\n let children = this.children;\n if (children.length === 0) {\n this._removeNotEmptyClasses();\n this._addEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:empty\");\n } else {\n this._addNotEmptyClasses();\n this._removeEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:not-empty\", {detail: {count: children.length}});\n }\n }\n\n private _removeEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.remove(...this.emptyClasses);\n }\n }\n\n private _addNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.add(...this.notEmptyClasses);\n }\n }\n\n private _addEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.add(...this.emptyClasses);\n }\n }\n\n private _removeNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.remove(...this.notEmptyClasses);\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class EnableInputsController extends BaseController {\r\n\r\n static targets = [\"enabler\", \"enable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasEnablerTarget: boolean;\r\n declare readonly enablerTarget: HTMLInputElement;\r\n declare readonly enableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasEnablerTarget && this.enablerTarget.checked) {\r\n this.enableInputs();\r\n } else {\r\n this.disableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.enableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.enableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class FallbackImageController extends BaseController {\r\n\r\n static values = {placeholder: String};\r\n\r\n declare readonly placeholderValue: string;\r\n declare readonly hasPlaceholderValue: boolean;\r\n\r\n connect() {\r\n let element = this.el as HTMLImageElement;\r\n\r\n element.onerror = () => {\r\n if (this.hasPlaceholderValue) {\r\n element.src = this.placeholderValue;\r\n } else {\r\n element.style.display = \"none\";\r\n }\r\n };\r\n }\r\n\r\n}\r\n","import {BaseController} from './base_controller';\r\nimport {isHTMLFormElement, isHTMLInputElement} from \"./utilities/elements\";\r\n\r\ninterface FormSavePayload {\r\n [idx: string]: {\r\n [idx: string]: string | boolean\r\n }\r\n}\r\n\r\nexport class FormSaveController extends BaseController {\r\n\r\n static values = {\r\n id: String,\r\n restoreOnLoad: Boolean,\r\n clearOnSubmit: Boolean,\r\n };\r\n\r\n declare readonly idValue: string;\r\n declare readonly hasIdValue: boolean;\r\n declare readonly restoreOnLoadValue: boolean;\r\n declare readonly hasRestoreOnLoadValue: boolean;\r\n declare readonly clearOnSubmitValue: boolean;\r\n declare readonly hasClearOnSubmitValue: boolean;\r\n\r\n get formID() {\r\n if (this.hasIdValue) {\r\n return this.idValue;\r\n }\r\n let elementID = (this.el as HTMLFormElement).id;\r\n\r\n if (elementID !== \"\") {\r\n return elementID;\r\n } else {\r\n throw new Error(`No ID value to uniquely identify this form. Please either specify data-${this.identifier}-id-value or give this form an 'id' attribute. `);\r\n }\r\n }\r\n\r\n get formIdentifier() {\r\n const url = location.href;\r\n return `${url} ${this.formID}`;\r\n }\r\n\r\n get formElements() {\r\n return (this.el as HTMLFormElement).elements;\r\n }\r\n\r\n get formData(): FormSavePayload {\r\n let data: FormSavePayload = {[this.formIdentifier]: {}};\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name.length > 0) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n data[this.formIdentifier][el.name] = el.checked;\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.checked) {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n } else {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n get restoreOnLoad() {\r\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\r\n }\r\n\r\n get clearOnSubmit() {\r\n return this.hasClearOnSubmitValue ? this.clearOnSubmitValue : true;\r\n }\r\n\r\n initialize() {\r\n this._clear = this._clear.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n let element = this.el;\r\n if (!isHTMLFormElement(element)) {\r\n throw new Error('Expected controller to be mounted on a form element.');\r\n }\r\n\r\n if (this.restoreOnLoad) {\r\n this.restore();\r\n }\r\n if (this.clearOnSubmit) {\r\n this.el.addEventListener('submit', this._clear);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.clearOnSubmit) {\r\n this.el.removeEventListener('submit', this._clear);\r\n }\r\n }\r\n\r\n _clear() {\r\n localStorage.removeItem(this.formIdentifier);\r\n this.dispatch(this.el, `form-save:cleared`);\r\n }\r\n\r\n clear(event?: Event) {\r\n event?.preventDefault();\r\n this._clear();\r\n }\r\n\r\n save(event: Event) {\r\n event.preventDefault();\r\n let data = this.formData;\r\n localStorage.setItem(this.formIdentifier, JSON.stringify(data[this.formIdentifier]));\r\n this.dispatch(this.el, `form-save:save:success`);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n if (localStorage.getItem(this.formIdentifier)) {\r\n const savedData = JSON.parse(localStorage.getItem(this.formIdentifier)!); // get and parse the saved data from localStorage\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name in savedData) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n el.checked = savedData[el.name];\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.value == savedData[el.name]) {\r\n el.checked = true;\r\n }\r\n } else {\r\n el.value = savedData[el.name];\r\n }\r\n }\r\n }\r\n this.dispatch(this.el, `form-save:restore:success`);\r\n } else {\r\n this.dispatch(this.el, `form-save:restore:empty`);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {useIntersection} from \"stimulus-use\";\n\nexport class IntersectionController extends BaseController {\n\n static values = {threshold: String};\n\n declare readonly isVisible: boolean;\n declare readonly thresholdValue: string;\n declare readonly hasThresholdValue: boolean;\n\n get threshold(): number[] {\n if (this.hasThresholdValue) {\n return this.thresholdValue.split(',').map(val => Number.parseFloat(val.trim())).filter(val => val >= 0 && val <= 1);\n } else {\n return [0, 1];\n }\n }\n\n connect() {\n useIntersection(this, {\n threshold: this.threshold,\n element: this.el,\n });\n }\n\n appear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:appear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n disappear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:disappear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n}\n","import {useIntersection} from \"stimulus-use\";\nimport {AsyncBlockController} from \"./async_block_controller\";\n\nexport class LazyBlockController extends AsyncBlockController {\n\n declare observe: () => void;\n declare unobserve: () => void;\n declare isVisible: boolean;\n declare disappear: () => void;\n\n connect() {\n let element = this.el;\n\n if (\"IntersectionObserver\" in window) {\n [this.observe, this.unobserve] = useIntersection(this, {element, threshold: 0.3});\n } else {\n // Client doesn't support intersection observer, fallback to pre-loading\n this.loadContent();\n }\n }\n\n appear(entry: IntersectionObserverEntry) {\n if (entry.target === this.el && entry.isIntersecting) {\n this.loadContent();\n if (this.unobserve) {\n this.unobserve();\n }\n }\n }\n\n}\n","const smoothSupported = \"scrollBehavior\" in document.documentElement.style;\r\nlet smoothPolyfilled: boolean;\r\n\r\nexport async function scrollToElement(element: Element, {behavior = \"smooth\", block = \"start\", inline = \"nearest\"}: ScrollIntoViewOptions = {}) {\r\n if (behavior == \"smooth\" && !smoothSupported) {\r\n await polyfillSmooth();\r\n }\r\n element.scrollIntoView({behavior, block, inline});\r\n}\r\n\r\nasync function polyfillSmooth() {\r\n const {polyfill} = await import(/* webpackChunkName: \"smoothscroll-polyfill\" */ \"smoothscroll-polyfill\");\r\n if (smoothPolyfilled) {\r\n return;\r\n }\r\n smoothPolyfilled = true;\r\n polyfill();\r\n}\r\n\r\nexport function getScrollParent(node: HTMLElement | null): HTMLElement | null {\r\n if (!node) {\r\n return null;\r\n }\r\n const overflowY = getComputedStyle(node).overflowY;\r\n const isScrollable = overflowY !== \"visible\" && overflowY !== \"hidden\";\r\n\r\n if (isScrollable && node.scrollHeight >= node.clientHeight) {\r\n return node;\r\n }\r\n\r\n return getScrollParent(node.parentElement) || document.body;\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\nimport dialogPolyfill from \"dialog-polyfill\";\r\n\r\nexport class LightboxImageController extends BaseController {\r\n\r\n static values = {\r\n src: String,\r\n srcSet: String,\r\n sizes: String,\r\n };\r\n static classes = [\"modal\", \"image\"];\r\n\r\n declare readonly hasModalClass: boolean;\r\n declare readonly modalClass: string;\r\n declare readonly hasImageClass: boolean;\r\n declare readonly imageClass: string;\r\n declare readonly hasSrcValue: boolean;\r\n declare readonly srcValue: string;\r\n declare readonly hasSrcSetValue: boolean;\r\n declare readonly srcSetValue: string;\r\n declare readonly hasSizesValue: boolean;\r\n declare readonly sizesValue: string;\r\n _dialog: HTMLDialogElement | null = null;\r\n\r\n get src(): string {\r\n return this.hasSrcValue ? this.srcValue : (this.el as HTMLImageElement).src;\r\n }\r\n\r\n get srcSet(): string {\r\n return this.hasSrcSetValue ? this.srcSetValue : (this.el as HTMLImageElement).srcset;\r\n }\r\n\r\n get sizes(): string {\r\n return this.hasSizesValue ? this.sizesValue : (this.el as HTMLImageElement).sizes;\r\n }\r\n\r\n get modalClassName() {\r\n return this.hasModalClass ? this.modalClass : \"image-lightbox-dialog\";\r\n }\r\n\r\n get imageClassName() {\r\n return this.hasImageClass ? this.imageClass : \"image-lightbox-image\";\r\n }\r\n\r\n initialize() {\r\n this.open = this.open.bind(this);\r\n this.close = this.close.bind(this);\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n open() {\r\n let element = this.el as HTMLImageElement;\r\n if (this._dialog) {\r\n return;\r\n }\r\n this._dialog = document.createElement(\"dialog\");\r\n\r\n let image = document.createElement(\"img\") as HTMLImageElement;\r\n image.className = this.imageClassName;\r\n image.src = this.src;\r\n image.srcset = this.srcSet;\r\n image.sizes = this.sizes;\r\n this._dialog.appendChild(image);\r\n\r\n element.insertAdjacentElement(\"afterend\", this._dialog);\r\n dialogPolyfill.registerDialog(this._dialog);\r\n this._dialog.className = this.modalClassName;\r\n this._dialog.showModal();\r\n scrollToElement(this._dialog, {behavior: \"smooth\", block: \"end\"}).catch(() => this._dialog!.scrollIntoView(false));\r\n this._dialog.addEventListener(\"click\", this.close);\r\n this._dialog.addEventListener(\"cancel\", this.close);\r\n this._dialog.addEventListener(\"close\", this.close);\r\n }\r\n\r\n close() {\r\n if (this._dialog) {\r\n this._dialog.close();\r\n this._dialog.remove();\r\n this._dialog = null;\r\n scrollToElement(this.el, {behavior: \"smooth\", block: \"end\"}).catch(() => this.el.scrollIntoView(false));\r\n }\r\n }\r\n\r\n} ","import {BaseController} from \"./base_controller\";\n\nexport class LimitedSelectionCheckboxesController extends BaseController {\n\n static targets = [\"input\", \"error\"];\n static values = {max: Number, message: String};\n\n declare readonly hasErrorTarget: boolean;\n declare readonly errorTarget: HTMLElement;\n declare readonly inputTargets: HTMLInputElement[];\n declare readonly maxValue: number;\n declare readonly messageValue: string;\n\n initialize() {\n this.handleInputs = this.handleInputs.bind(this);\n }\n\n connect() {\n this.inputTargets.forEach((el) => el.addEventListener(\"change\", this.handleInputs));\n }\n\n disconnect() {\n this.inputTargets.forEach((el) => el.removeEventListener(\"change\", this.handleInputs));\n }\n\n handleInputs(event: Event) {\n let tickedInputs = this.inputTargets.reduce((previousValue, el) => el.checked ? previousValue + 1 : previousValue, 0);\n let target = event.target as HTMLInputElement;\n if (tickedInputs > this.maxValue) {\n event.preventDefault();\n target.checked = false;\n this.dispatch(target, \"change\");\n this.dispatch(target, \"limited-selection:too-many\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = this.messageValue;\n }\n } else {\n this.dispatch(target, \"limited-selection:selection\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = \"\";\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class NestedFormController extends BaseController {\n static targets = ['target', 'template'];\n static values = {\n insertMode: String,\n wrapperClass: String,\n };\n\n declare readonly targetTarget: HTMLElement;\n declare readonly templateTarget: HTMLTemplateElement | HTMLScriptElement;\n\n declare readonly wrapperClassValue: string;\n declare readonly hasWrapperSelectorValue: boolean;\n declare readonly insertModeValue: InsertPosition;\n declare readonly hasInsertModeValue: boolean;\n\n get wrapperClass() {\n return this.hasWrapperSelectorValue ? this.wrapperClassValue : 'nested-fields';\n }\n\n get insertMode(): InsertPosition {\n return this.hasInsertModeValue ? this.insertModeValue : 'beforeend';\n }\n\n connect() {\n this.checkStructure();\n }\n\n add(event?: Event) {\n event?.preventDefault();\n\n const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, this.generateID());\n this.targetTarget.insertAdjacentHTML(this.insertMode, content);\n }\n\n remove(event: Event) {\n event.preventDefault();\n const wrapper: HTMLElement | null = (event.target as HTMLElement).closest(`.${this.wrapperClass}`);\n if (wrapper == null) {\n throw new Error(`#remove was clicked from outside of a child record. Could not find an ancestor with class .${this.wrapperClass}`);\n }\n\n if (wrapper.dataset.newRecord === 'true') {\n wrapper.remove();\n } else {\n wrapper.style.display = 'none';\n let destroyInput = wrapper.querySelector(\"input[name*='_destroy']\") as HTMLInputElement | null;\n if (destroyInput == null) {\n throw new Error(`Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.`);\n }\n\n destroyInput.value = \"1\";\n }\n }\n\n generateID(): string {\n return new Date().getTime().toString() + Math.random().toString().slice(2);\n }\n\n private checkStructure() {\n let template = this.templateTarget.innerHTML;\n\n if (template.indexOf('NEW_RECORD')) {\n 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`\");\n }\n }\n}","import {BaseController} from \"./base_controller\";\n\nexport class PasswordConfirmController extends BaseController {\n\n static targets = [\"password\"];\n static classes = [\"error\"];\n\n declare readonly passwordTargets: HTMLInputElement[];\n\n declare readonly errorClass: string;\n declare readonly hasErrorClass: boolean;\n\n initialize() {\n this.checkPasswordsMatch = this.checkPasswordsMatch.bind(this);\n }\n\n connect() {\n this.passwordTargets.forEach((el) => el.addEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n disconnect() {\n this.passwordTargets.forEach((el) => el.removeEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n private allPasswordsMatch(): boolean {\n let values = new Set(this.passwordTargets.map(el => el.value)); // Create a unique set of the password values\n 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)\n }\n\n private checkPasswordsMatch() {\n let element = this.el;\n if (this.allPasswordsMatch()) {\n this.dispatch(element, \"password-confirm:match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.remove(this.errorClass));\n }\n } else {\n this.dispatch(element, \"password-confirm:no-match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.add(this.errorClass));\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class PasswordPeekController extends BaseController {\n\n static targets = [\"password\"];\n\n declare readonly passwordTarget: HTMLInputElement;\n\n peak(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"text\";\n }\n\n hide(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"password\";\n }\n\n toggle(event?: Event) {\n event?.preventDefault();\n if (this.passwordTarget.type === \"password\") {\n this.peak();\n } else {\n this.hide();\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class RemoteFormController extends BaseController {\r\n static targets = [];\r\n\r\n static values = {selector: String};\r\n\r\n declare readonly hasSelectorValue: boolean;\r\n declare readonly selectorValue: string;\r\n\r\n get selector(): string {\r\n return this.hasSelectorValue ? this.selectorValue : `[data-controller~=\"${this.identifier}\"]`;\r\n }\r\n\r\n replace(event: { detail: [Element, any, XMLHttpRequest] }) {\r\n const [data, status, xhr] = event.detail;\r\n if (data instanceof Node) {\r\n let new_element = data.querySelector(this.selector);\r\n\r\n if (new_element == null) {\r\n throw new Error(`expected new form DOM with [data-controller=\"${this.identifier}\"] to be present in returned payload`);\r\n }\r\n\r\n let parentNode = this.el.parentNode;\r\n if (parentNode == null) {\r\n throw new Error('expected form to have a DOM parent, could not execute replaceChild');\r\n }\r\n parentNode.replaceChild(new_element, this.el);\r\n } else {\r\n console.log('Unknown', data);\r\n }\r\n }\r\n}\r\n","import {useDebounce, useWindowResize} from \"stimulus-use\";\nimport {WindowResizePayload} from \"stimulus-use/dist/use-window-resize/use-window-resize\";\nimport {BaseController} from \"./base_controller\";\n\ninterface ResponsiveIframeMessage {\n name: string,\n height: number,\n}\n\nexport class ResponsiveIframeWrapperController extends BaseController {\n\n initialize() {\n this.messageReceived = this.messageReceived.bind(this);\n }\n\n connect() {\n window.addEventListener(\"message\", this.messageReceived);\n }\n\n disconnect() {\n window.removeEventListener(\"message\", this.messageReceived);\n }\n\n messageReceived(message: MessageEvent) {\n let data = message.data;\n if (data.hasOwnProperty(\"name\") && data.name === \"iframe-body\" && data.hasOwnProperty(\"height\")) {\n this.resize(data.height);\n }\n }\n\n resize(height: number) {\n (this.el as HTMLIFrameElement).style.height = `${height}px`;\n }\n\n}\n\nexport class ResponsiveIframeBodyController extends BaseController {\n\n static debounces = [\"postUpdate\"];\n\n declare observe: () => void;\n declare unobserve: () => void;\n\n connect() {\n // If this Window is inside a frame\n if (window.self !== window.top) {\n useWindowResize(this);\n useDebounce(this, {});\n this.postUpdate();\n } else {\n // Not an iframe\n }\n }\n\n windowResize(payload: WindowResizePayload) {\n this.postUpdate();\n };\n\n postUpdate() {\n let payload: ResponsiveIframeMessage = {name: \"iframe-body\", height: this.getHeight()};\n window.parent.postMessage(\n payload,\n \"*\",\n );\n }\n\n getHeight(): number {\n const body = document.body;\n const html = document.documentElement;\n\n // Get the largest height out of body and html's various height measurements\n return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n }\n\n}\n","import camelCase from \"camelcase\";\r\nimport {BaseController} from \"../base_controller\";\r\n\r\nexport class EphemeralController extends BaseController {\r\n\r\n _cleanupSelf() {\r\n this.cleanup(this.el);\r\n }\r\n\r\n cleanup(element: HTMLElement) {\r\n element.dataset.controller = element.dataset.controller?.replaceAll(new RegExp(`(\\s|^)${this.identifier}(\\s|$)`, \"g\"), \"\") || \"\";\r\n if (element.dataset.controller == \"\") {\r\n // If there are no controllers left, remove the attribute\r\n delete element.dataset.controller;\r\n }\r\n\r\n let substringIdentifierValueRegex = new RegExp(`(\\s|^)${this.identifier}\\\\..+?(\\s|$)`, \"g\");\r\n element.dataset.target = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-target`)];\r\n if (element.dataset.target == \"\") {\r\n // If there are no targets left, remove the attribute\r\n delete element.dataset.target;\r\n }\r\n\r\n element.dataset.action = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-action`)];\r\n if (element.dataset.action == \"\") {\r\n // If there are no actions left, remove the attribute\r\n delete element.dataset.action;\r\n }\r\n\r\n // @ts-ignore\r\n let values = this.constructor.values;\r\n if (values) {\r\n Object.keys(values).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-value`)]);\r\n }\r\n\r\n // @ts-ignore\r\n let classes = this.constructor.classes;\r\n if (classes) {\r\n Object.keys(classes).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-class`)]);\r\n }\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\n\r\nexport class ScrollIntoFocusController extends EphemeralController {\r\n\r\n static values = {\r\n behavior: String,\r\n block: String,\r\n inline: String,\r\n };\r\n\r\n declare behaviorValue: ScrollBehavior;\r\n declare hasBehaviorValue: boolean;\r\n declare blockValue: ScrollLogicalPosition;\r\n declare hasBlockValue: boolean;\r\n declare inlineValue: ScrollLogicalPosition;\r\n declare hasInlineValue: boolean;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Attempt smooth scrolling, with polyfill\r\n scrollToElement(\r\n this.el,\r\n {\r\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\r\n block: this.hasBlockValue ? this.blockValue : \"center\",\r\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\r\n },\r\n ).catch(() => this.el.scrollIntoView()); // Fallback to snap-scrolling\r\n this._cleanupSelf();\r\n });\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToBottomController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"end\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\nimport {scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToController extends BaseController {\n\n static values = {\n selector: String,\n behavior: String,\n block: String,\n inline: String,\n };\n\n declare selectorValue: string;\n declare behaviorValue: ScrollBehavior;\n declare hasBehaviorValue: boolean;\n declare blockValue: ScrollLogicalPosition;\n declare hasBlockValue: boolean;\n declare inlineValue: ScrollLogicalPosition;\n declare hasInlineValue: boolean;\n\n scroll() {\n let target = document.querySelector(this.selectorValue);\n if (!target) {\n console.warn(`Could not find target for '${this.selectorValue}'`);\n return;\n }\n\n scrollToElement(\n target!,\n {\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\n block: this.hasBlockValue ? this.blockValue : \"center\",\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\n },\n ).catch(() => target!.scrollIntoView()); // Fallback to snap-scrolling\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToTopController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"start\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class SelfDestructController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n timeout: null | ReturnType = null;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Only start countdown on first paint\r\n this.timeout = setTimeout(() => this.el.remove(), this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.timeout) {\r\n clearTimeout(this.timeout);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class StickyController extends BaseController {\r\n\r\n static classes = [\"stuck\"];\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare readonly hasStuckClass: boolean;\r\n declare readonly stuckClass: string;\r\n declare readonly hasModeValue: \"top\" | \"bottom\";\r\n declare readonly modeValue: \"top\" | \"bottom\";\r\n\r\n _magicElement: HTMLDivElement | null = null;\r\n\r\n get _mode(): \"top\" | \"bottom\" {\r\n return this.hasModeValue ? this.modeValue : \"top\";\r\n }\r\n\r\n createMagicElement() {\r\n // Magic element placed next to the sticky el that acts as an external border.\r\n // When the magic element is off the page, we know that the sticky el is \"stuck\"\r\n if (this._magicElement !== null) {\r\n return;\r\n }\r\n\r\n this._magicElement = document.createElement(\"div\");\r\n switch (this._mode) {\r\n case \"top\":\r\n this.el.insertAdjacentElement(\"beforebegin\", this._magicElement);\r\n break;\r\n case \"bottom\":\r\n this.el.insertAdjacentElement(\"afterend\", this._magicElement);\r\n break;\r\n }\r\n }\r\n\r\n connect() {\r\n let element = this.el;\r\n this.createMagicElement();\r\n\r\n const observer = new IntersectionObserver(entries => {\r\n entries.forEach(entry => {\r\n if (entry.target !== this._magicElement) {\r\n return;\r\n }\r\n if (entry.intersectionRatio === 0) {\r\n element.classList.add(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n } else if (entry.intersectionRatio === 1) {\r\n element.classList.remove(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n }\r\n });\r\n\r\n }, {\r\n threshold: [0, 1],\r\n });\r\n observer.observe(this._magicElement!);\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\n\nexport class TeleportController extends EphemeralController {\n\n static values = {target: String, insert: String, immediate: Boolean};\n\n declare readonly immediateValue: boolean;\n declare readonly hasImmediateValue: boolean;\n declare readonly targetValue: string;\n declare readonly hasInsertValue: boolean;\n declare readonly insertValue: InsertPosition | \"replaceOuter\" | \"replaceInner\" | \"prepend\" | \"append\";\n\n connect() {\n if (!this.hasInsertValue) {\n throw new Error(\"`insert` value was not specified\");\n }\n\n requestAnimationFrame(() => {\n if (this.hasImmediateValue && this.immediateValue) {\n this.execute();\n }\n });\n }\n\n execute(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n let destination = document.querySelector(this.targetValue);\n\n if (destination == null) {\n this.dispatch(element, \"teleport:error\");\n return;\n }\n\n let copy = element.cloneNode(true) as HTMLElement;\n this.cleanup(copy);\n\n switch (this.insertValue) {\n case \"beforebegin\":\n case \"beforeend\":\n case \"afterend\":\n case \"afterbegin\":\n destination.insertAdjacentHTML(this.insertValue, copy.outerHTML);\n break;\n case \"replaceOuter\":\n destination.outerHTML = copy.outerHTML;\n break;\n case \"replaceInner\":\n destination.innerHTML = copy.outerHTML;\n break;\n case \"prepend\":\n destination.insertAdjacentHTML(\"afterbegin\", copy.outerHTML);\n break;\n case \"append\":\n destination.insertAdjacentHTML(\"beforeend\", copy.outerHTML);\n break;\n default:\n throw new Error(\"`insert` value was not specified\");\n\n }\n element.remove();\n }\n\n}\n","import {useClickOutside, useHover} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport type ToggleClassMode = \"on\" | \"off\" | \"toggle\"\n\nexport class ToggleClassController extends BaseController {\n\n static targets = [\"toggle\"];\n static values = {\n class: String,\n mouseEnter: String,\n mouseLeave: String,\n clickAway: Boolean,\n initial: String,\n };\n\n declare readonly toggleTargets: HTMLElement[];\n\n declare readonly classValue: string;\n declare readonly hasClassValue: boolean;\n\n declare readonly mouseEnterValue: ToggleClassMode;\n declare readonly hasMouseEnterValue: boolean;\n\n declare readonly mouseLeaveValue: ToggleClassMode;\n declare readonly hasMouseLeaveValue: boolean;\n\n declare readonly clickAwayValue: boolean;\n declare readonly hasClickAwayValue: boolean;\n\n declare readonly initialValue: \"on\" | \"off\";\n declare readonly hasInitialValue: boolean;\n\n connect() {\n if (!this.hasClassValue) {\n throw new Error(\"data-toggle-class-class-value must not be empty\");\n }\n\n if (this.hasMouseEnterValue || this.hasMouseLeaveValue) {\n useHover(this);\n }\n\n if (this.hasClickAwayValue && this.clickAwayValue) {\n useClickOutside(this);\n }\n\n requestAnimationFrame(() => {\n if (this.hasInitialValue) {\n if (this.initialValue === \"on\") {\n this.toggleTargets.forEach((target) => this.elementOn(target));\n } else {\n this.toggleTargets.forEach((target) => this.elementOff(target));\n }\n }\n });\n }\n\n clickOutside() {\n this.toggleTargets.forEach((target) => {\n if (this.elementWasToggled(target)) {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n }\n });\n }\n\n mouseEnter() {\n if (this.hasMouseEnterValue) {\n switch (this.mouseEnterValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n mouseLeave() {\n if (this.hasMouseLeaveValue) {\n switch (this.mouseLeaveValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n on(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOn(target);\n });\n }\n\n off(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOff(target);\n });\n }\n\n toggle(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n });\n }\n\n private elementWasToggled(el: HTMLElement): boolean {\n return el.dataset.toggled == \"true\";\n }\n\n private elementToggleStatus(el: HTMLElement) {\n if (this.elementWasToggled(el)) {\n delete el.dataset.toggled;\n } else {\n el.dataset.toggled = \"true\";\n }\n }\n\n private elementToggle(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass));\n }\n\n private elementOn(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, true));\n }\n\n private elementOff(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, false));\n }\n\n}\n","export function isTurboFrame(element: HTMLElement): element is TurboFrame {\r\n return element.nodeName == \"TURBO-FRAME\";\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {isHTMLAnchorElement} from \"./utilities/elements\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\nexport class TurboFrameRCController extends BaseController {\n\n static values = {\n frameId: String,\n src: String,\n loadingMessage: String,\n };\n\n declare readonly frameIdValue: string;\n declare readonly srcValue: string;\n declare readonly hasSrcValue: boolean;\n declare readonly loadingMessageValue: string;\n declare readonly hasLoadingMessageValue: boolean;\n\n toggle(event?: Event) {\n event?.preventDefault();\n let frame = this._getFrame();\n let frameSrc = frame.src;\n if (frameSrc == null || frameSrc !== this._getSrc()) {\n this._setSrc();\n } else {\n this._clear();\n }\n }\n\n setSrc(event?: Event) {\n event?.preventDefault();\n this._setSrc();\n }\n\n clear(event?: Event) {\n event?.preventDefault();\n this._clear();\n }\n\n private _setSrc() {\n let frame = this._getFrame();\n if (this.hasLoadingMessageValue) {\n frame.innerHTML = this.loadingMessageValue;\n }\n frame.src = this._getSrc();\n }\n\n private _clear() {\n let frame = this._getFrame();\n frame.src = \"\";\n frame.innerHTML = \"\";\n }\n\n private _getFrame(): TurboFrame {\n let frame = document.getElementById(`${this.frameIdValue}`);\n if (frame == null) {\n throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);\n }\n if (!isTurboFrame(frame)) {\n throw new Error(`Element targeted by ID '${this.frameIdValue}'`);\n } else {\n return frame;\n }\n }\n\n private _getSrc(): string {\n let element = this.el;\n if (this.hasSrcValue) {\n return this.srcValue;\n } else if (isHTMLAnchorElement(element)) {\n return element.href;\n } else {\n throw new Error(\"No link given to drive frame to\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\n// noinspection SillyAssignmentJS\nexport class TurboFrameRefreshController extends BaseController {\n\n static values = {\n interval: Number,\n poll: Boolean,\n };\n\n declare readonly intervalValue: number;\n declare readonly pollValue: boolean;\n declare readonly hasPollValue: boolean;\n _timeoutHandle: null | ReturnType = null;\n\n get poll(): boolean {\n return this.hasPollValue ? this.pollValue : false;\n }\n\n initialize() {\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n let element = this.el;\n if (isTurboFrame(element)) {\n if (!!element.src) {\n throw new Error('The provided element has no `src` attribute.');\n }\n } else {\n throw new Error('Expected controller to be mounted on a element.');\n }\n if (this.poll) {\n requestAnimationFrame(() => this._timeoutHandle = setTimeout(() => this.refresh(), this.intervalValue));\n }\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n refresh(event?: Event) {\n event?.preventDefault();\n let element = this.el as TurboFrame;\n element.src = element.src;\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class WordCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this.updateWordCount = this.updateWordCount.bind(this);\n }\n\n connect() {\n this.updateWordCount();\n this.inputTarget.addEventListener(\"input\", this.updateWordCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this.updateWordCount);\n }\n\n updateWordCount() {\n let wordCount = 0;\n let textAreaValue = this.inputTarget.value;\n let matches = textAreaValue.match(/\\S+/g);\n wordCount = (matches && matches.length) || 0;\n this.outputTarget.innerText = wordCount.toString();\n if (this.hasErrorClass) {\n if (this.isValidCount(wordCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n"],"names":["BaseController","Controller","constructor","context","super","Proxy","this","get","obj","prop","returnVal","Reflect","self","test","logProperty","toString","apply","target","thisArg","argArray","log","args","el","element","dispatch","eventName","options","mergedOptions","Object","assign","bubbles","cancelable","detail","event","CustomEvent","dispatchEvent","functionName","application","debug","logger","console","groupCollapsed","identifier","groupEnd","AppearanceController","initialize","_handleVisibility","bind","connect","window","addEventListener","document","disconnect","removeEventListener","appear","away","_documentIsActive","visibilityState","hasFocus","AsyncBlockController","_errorMessage","hasErrorMessageValue","errorMessageValue","loadContent","hasReplaceTarget","replaceTarget","fetch","endpointValue","then","response","text","html","newEl","createElement","innerHTML","hasSelectorValue","selectedContent","querySelectorAll","selectorValue","replaceWith","children","catch","err","finally","endpoint","String","errorMessage","selector","AutoSubmitFormController","handler","forEach","e","method","controller","methodName","composeEventName","name","eventPrefix","composedName","extendedEvent","type","composed","originalEvent","defaultOptions","useIntersection","targetElement","controllerDisconnect","observer","IntersectionObserver","entries","entry","isIntersecting","isVisible","call","appearEvent","dispatchAppear","disappearEvent","dispatchDisappear","observe","unobserve","[object Object]","events","onlyVisible","StimulusUse","_a","_b","_c","controllerId","stimulusUseDebug","id","dataset","controllerInitialize","controllerConnect","UseHover","onEnter","onLeave","hover","enhanceController","UseMutation","error","handleError","mutation","MutationObserver","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","requestAnimationFrame","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","value","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","checked","checkboxTargets","filter","checkbox","unchecked","toggle","refresh","hasSelectAllTarget","selectAllTarget","preventDefault","checkboxesCount","checkboxesCheckedCount","indeterminate","ClipboardController","supported","queryCommandSupported","hasRemoveUnusedValue","removeUnusedValue","hasFallbackTarget","fallbackTarget","hasCopyTarget","copyTarget","select","sourceTarget","copy","execCommand","isHTMLAnchorElement","nodeName","isHTMLFormElement","isHTMLInputElement","isHTMLButtonElement","isHTMLSelectElement","isElementCheckable","removeUnused","Boolean","ConfirmController","message","hasMessageValue","messageValue","confirm","Error","ConfirmNavigationController","_message","_messageValue","handlePopstate","handleTurboNavigation","onbeforeunload","_event","DebugController","testTargets","DetectDirtyController","checkDirty","loadValue","restore","defaultChecked","Array","from","every","option","defaultSelected","selected","defaultValue","dirty","some","setAttribute","removeAttribute","DisableInputsController","hasDisablerTarget","disablerTarget","disableInputs","enableInputs","shouldClear","hasClearValue","clearValue","disableTargets","_","disabled","clear","DisableWithController","_timeout","hasTimeoutValue","timeoutValue","enable","disable","_timeoutHandle","_isDisabled","stopImmediatePropagation","_cacheText","_getElText","_setElText","_disable","_enable","str","undefined","timeout","DismissableController","dismiss","ElementSaveController","_id","hasIdValue","idValue","elementID","_uniqueIdentifier","location","href","_restoreOnLoad","hasRestoreOnLoadValue","restoreOnLoadValue","_element","hasElementTarget","elementTarget","localStorage","removeItem","save","attributes","attributesValue","split","data","attr","_get","setItem","JSON","stringify","getItem","savedData","parse","keys","_set","restoreOnLoad","EmptyDomController","emptyClasses","emptyClass","notEmptyClasses","notEmptyClass","hasScopeSelectorValue","scopeSelectorValue","useMutation","childList","checkEmpty","mutate","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","hasNotEmptyClass","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormSaveController","formID","formIdentifier","formElements","elements","formData","clearOnSubmit","hasClearOnSubmitValue","clearOnSubmitValue","_clear","IntersectionController","threshold","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","disappear","LazyBlockController","smoothSupported","documentElement","smoothPolyfilled","scrollToElement","behavior","block","inline","async","polyfill","polyfillSmooth","scrollIntoView","getScrollParent","node","overflowY","getComputedStyle","parentElement","body","LightboxImageController","hasSrcValue","srcValue","srcSet","hasSrcSetValue","srcSetValue","srcset","sizes","hasSizesValue","sizesValue","modalClassName","hasModalClass","modalClass","imageClassName","hasImageClass","imageClass","open","close","_dialog","image","className","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","showModal","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","NestedFormController","wrapperClass","hasWrapperSelectorValue","wrapperClassValue","insertMode","hasInsertModeValue","insertModeValue","checkStructure","content","templateTarget","replace","generateID","targetTarget","insertAdjacentHTML","wrapper","closest","newRecord","destroyInput","querySelector","Date","getTime","Math","random","slice","indexOf","PasswordConfirmController","checkPasswordsMatch","passwordTargets","allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","status","xhr","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","secondsValue","seconds","StickyController","_mode","createMagicElement","_magicElement","intersectionRatio","hasStuckClass","stuckClass","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","ToggleClassController","hasClassValue","hasMouseEnterValue","hasMouseLeaveValue","useHover","hasClickAwayValue","clickAwayValue","onEvent","contains","rect","getBoundingClientRect","windowHeight","windowWidth","clientWidth","left","isElementInViewport","clickOutside","clickOutsideEvent","useClickOutside","hasInitialValue","toggleTargets","initialValue","elementOn","elementOff","elementWasToggled","elementToggleStatus","elementToggle","mouseEnter","mouseEnterValue","on","off","mouseLeave","mouseLeaveValue","toggled","classValue","klass","isTurboFrame","class","clickAway","initial","TurboFrameRCController","frameSrc","_getFrame","_getSrc","_setSrc","setSrc","frame","hasLoadingMessageValue","loadingMessageValue","getElementById","frameIdValue","frameId","loadingMessage","TurboFrameRefreshController","poll","hasPollValue","pollValue","intervalValue","interval","WordCountController","updateWordCount","wordCount","matches","match","isValidCount"],"mappings":"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"} \ No newline at end of file diff --git a/dist/stimulus-library.module.js b/dist/stimulus-library.module.js index 6493ea2a..ed1283be 100644 --- a/dist/stimulus-library.module.js +++ b/dist/stimulus-library.module.js @@ -1,2 +1,2 @@ -import{Controller as e}from"stimulus";import t from"dialog-polyfill";import n from"camelcase";function i(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,i=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}var u=function(e){function t(t){var n;return n=e.call(this,t)||this,new Proxy(a(n),{get:function(e,t){var i=Reflect.get(e,t),r=a(n);if(function(e){switch(e){case"application":case"el":case"element":case"constructor":case"initialize":case"log":case"dispatch":case"data":case"valueDescriptorMap":case"identifier":return!1}return!(/^_.*?$/.test(e)||/^.*?Target(s)?$/.test(e)||/^.*?Value$/.test(e)||/^.*?ValueChanged$/.test(e)||/^.*?Class$/.test(e))}(t.toString())){if("function"==typeof i)return new Proxy(i,{apply:function(e,n,i){return r.log(t.toString(),{args:i}),Reflect.apply(e,n,i)}});n.log(t.toString())}return i}})||a(n)}o(t,e);var n=t.prototype;return n.dispatch=function(e,t,n){void 0===n&&(n={});var i=Object.assign({},{bubbles:!0,cancelable:!0,detail:{target:e}},n);i.detail.target&&(i.detail.target=e);var r=new CustomEvent(t,i);e.dispatchEvent(r)},n.log=function(e,t){if(void 0===t&&(t={}),this.application.debug){var n=console;n.groupCollapsed("%c"+this.identifier+" %c#"+e,"color: #3B82F6","color: unset"),n.log(s({element:this.element},t)),n.groupEnd()}},r(t,[{key:"el",get:function(){return this.element}}]),t}(e),h=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.initialize=function(){this._handleVisibility=this._handleVisibility.bind(this)},n.connect=function(){window.addEventListener("focus",this._handleVisibility),window.addEventListener("blur",this._handleVisibility),document.addEventListener("visibilitychange",this._handleVisibility),this._handleVisibility()},n.disconnect=function(){window.removeEventListener("focus",this._handleVisibility),window.removeEventListener("blur",this._handleVisibility),document.removeEventListener("visibilitychange",this._handleVisibility)},n.appear=function(){this.dispatch(this.el,"appearance:appear")},n.away=function(){this.dispatch(this.el,"appearance:away")},n._handleVisibility=function(){this._documentIsActive()?this.appear():this.away()},n._documentIsActive=function(){return"visible"==document.visibilityState&&document.hasFocus()},t}(u),d=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.connect=function(){this.loadContent()},n.loadContent=function(){var e=this,t=this,n=this.hasReplaceTarget?this.replaceTarget:this.el;fetch(this.endpointValue).then(function(e){return e.text()}).then(function(i){var r=document.createElement("div");if(r.innerHTML=i,e.hasSelectorValue){var s=r.querySelectorAll(e.selectorValue);n.replaceWith.apply(n,s)}else n.replaceWith.apply(n,r.children);t.dispatch(n,"ajax:success")}).catch(function(i){n.replaceWith(e._errorMessage),t.dispatch(n,"ajax:error")}).finally(function(){t.dispatch(n,"ajax:complete")})},r(t,[{key:"_errorMessage",get:function(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}}]),t}(u);d.targets=["replace"],d.values={endpoint:String,errorMessage:String,selector:String};var f=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.initialize=function(){this.handler=this.handler.bind(this)},n.connect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.addEventListener("change",e.handler)})},n.disconnect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.removeEventListener("change",e.handler)})},n.handler=function(e){this.dispatch(this.el,"submit")},t}(u);const p=(e,t)=>{const n=e[t];return"function"==typeof n?n:(...e)=>{}},m=(e,t,n)=>{let i=e;return!0===n?i=`${t.identifier}:${e}`:"string"==typeof n&&(i=`${n}:${e}`),i},g=(e,t,n)=>{const{bubbles:i,cancelable:r,composed:s}=t||{bubbles:!0,cancelable:!0,composed:!0};return t&&Object.assign(n,{originalEvent:t}),new CustomEvent(e,{bubbles:i,cancelable:r,composed:s,detail:n})},v={dispatchEvent:!0,eventPrefix:!0},b=(e,t={})=>{const{dispatchEvent:n,eventPrefix:i}=Object.assign({},v,t),r=(null==t?void 0:t.element)||e.element,s=e.disconnect.bind(e),o=new IntersectionObserver(t=>{const[s]=t;s.isIntersecting?(t=>{if(e.isVisible=!0,p(e,"appear").call(e,t),n){const n=m("appear",e,i),s=g(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s):e.isVisible&&(t=>{if(e.isVisible=!1,p(e,"disappear").call(e,t),n){const n=m("disappear",e,i),s=g(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s)},t),a=()=>{o.observe(r)},l=()=>{o.unobserve(r)};return Object.assign(e,{isVisible:!1,disconnect(){l(),s()}}),a(),[a,l]},y={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},E={debug:!1,logger:console};class w{constructor(e,t={}){var n,i,r;this.log=(e,t)=>{this.debug&&(this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${e}`,"color: #3B82F6","color: unset"),this.logger.log(Object.assign({controllerId:this.controllerId},t)),this.logger.groupEnd())},this.debug=null!==(i=null!==(n=null==t?void 0:t.debug)&&void 0!==n?n:e.application.stimulusUseDebug)&&void 0!==i?i:E.debug,this.logger=null!==(r=null==t?void 0:t.logger)&&void 0!==r?r:E.logger,this.controller=e,this.controllerId=e.element.id||e.element.dataset.id,this.controllerInitialize=e.initialize.bind(e),this.controllerConnect=e.connect.bind(e),this.controllerDisconnect=e.disconnect.bind(e)}}class V extends w{constructor(e,t={}){super(e,t),this.observe=()=>{this.targetElement.addEventListener("mouseenter",this.onEnter),this.targetElement.addEventListener("mouseleave",this.onLeave)},this.unobserve=()=>{this.targetElement.removeEventListener("mouseenter",this.onEnter),this.targetElement.removeEventListener("mouseleave",this.onLeave)},this.onEnter=()=>{p(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{p(this.controller,"mouseLeave").call(this.controller),this.log("mouseLeave",{hover:!1})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}class k extends w{constructor(e,t={}){super(e,t),this.observe=()=>{try{this.observer.observe(this.targetElement,this.options)}catch(e){this.controller.application.handleError(e,"At a minimum, one of childList, attributes, and/or characterData must be true",{})}},this.unobserve=()=>{this.observer.disconnect()},this.mutation=e=>{p(this.controller,"mutate").call(this.controller,e),this.log("mutate",{entries:e})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.options=t,this.observer=new MutationObserver(this.mutation),this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}const T=e=>{const t=t=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:t};p(e,"windowResize").call(e,r)},n=e.disconnect.bind(e),i=()=>{window.addEventListener("resize",t),t()},r=()=>{window.removeEventListener("resize",t)};return Object.assign(e,{disconnect(){r(),n()}}),i(),[i,r]},_=(e,t=200)=>{let n=null;return function(){const i=arguments,r=this,s=()=>e.apply(r,i);n&&clearTimeout(n),n=setTimeout(s,t)}};var S=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var e=this.el;e.style.resize="none",e.style.boxSizing="border-box",e.addEventListener("input",this._handler),e.addEventListener("focus",this._handler),T(this),requestAnimationFrame(this._handler)},n.windowResize=function(){this._handler()},n._handler=function(){this.autosize(this.el)},n.autosize=function(e){var t=e.offsetHeight-e.clientHeight;e.style.height="auto",e.style.height=e.scrollHeight+t+"px"},t}(u),C=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.initialize=function(){this._updateCharCount=this._updateCharCount.bind(this)},n.connect=function(){this._updateCharCount(),this.inputTarget.addEventListener("input",this._updateCharCount)},n.disconnect=function(){this.inputTarget.removeEventListener("input",this._updateCharCount)},n._updateCharCount=function(){var e=this.inputTarget.value.length;this.outputTarget.innerText=e.toString(),this.hasErrorClass&&(this._isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n._isValidCount=function(e){var t=0,n=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(n=this.maxValue),e>=t&&e<=n},t}(u);C.targets=["input","output"],C.values={min:Number,max:Number},C.classes=["error"];var L=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.initialize=function(){this.toggle=this.toggle.bind(this),this.refresh=this.refresh.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e.hasSelectAllTarget&&(e.selectAllTarget.addEventListener("change",e.toggle),e.checkboxTargets.forEach(function(t){return t.addEventListener("change",e.refresh)}),e.refresh())})},n.disconnect=function(){var e=this;this.hasSelectAllTarget&&(this.selectAllTarget.removeEventListener("change",this.toggle),this.checkboxTargets.forEach(function(t){return t.removeEventListener("change",e.refresh)}))},n.toggle=function(e){e.preventDefault();var t=e.target;this.checkboxTargets.forEach(function(e){return e.checked=t.checked})},n.refresh=function(){var e=this.checkboxTargets.length,t=this.checked.length;this.selectAllTarget.checked=t>0,this.selectAllTarget.indeterminate=t>0&&t{new k(this,t)})(0,{element:this.el,childList:!0}),this.checkEmpty()},n.mutate=function(e){this.checkEmpty()},n.checkEmpty=function(){var e=this.el,t=this.children;0===t.length?(this._removeNotEmptyClasses(),this._addEmptyClasses(),this.dispatch(e,"dom:empty")):(this._addNotEmptyClasses(),this._removeEmptyClasses(),this.dispatch(e,"dom:not-empty",{detail:{count:t.length}}))},n._removeEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).remove.apply(e,this.emptyClasses)},n._addNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).add.apply(e,this.notEmptyClasses)},n._addEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).add.apply(e,this.emptyClasses)},n._removeNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).remove.apply(e,this.notEmptyClasses)},r(t,[{key:"emptyClasses",get:function(){return this.emptyClass.split(" ")}},{key:"notEmptyClasses",get:function(){return this.notEmptyClass.split(" ")}},{key:"children",get:function(){var e=this.el;return Array.from(this.hasScopeSelectorValue?e.querySelectorAll(this.scopeSelectorValue):e.children)}}]),t}(u);W.classes=["empty","notEmpty"],W.values={scopeSelector:String};var B=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasEnablerTarget&&this.enablerTarget.checked?this.enableInputs():this.disableInputs()},n.disableInputs=function(){var e=this.hasClearValue&&this.clearValue;this.enableTargets.forEach(function(t,n){e&&(t.value=""),t.disabled=!0})},n.enableInputs=function(){this.enableTargets.forEach(function(e,t){e.disabled=!1})},t}(u);B.targets=["enabler","enable"],B.values={clear:Boolean};var $=function(e){function t(){return e.apply(this,arguments)||this}return o(t,e),t.prototype.connect=function(){var e=this,t=this.el;t.onerror=function(){e.hasPlaceholderValue?t.src=e.placeholderValue:t.style.display="none"}},t}(u);$.values={placeholder:String};var U=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.initialize=function(){this._clear=this._clear.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){if(!x(e.el))throw new Error("Expected controller to be mounted on a form element.");e.restoreOnLoad&&e.restore(),e.clearOnSubmit&&e.el.addEventListener("submit",e._clear)})},n.disconnect=function(){this.clearOnSubmit&&this.el.removeEventListener("submit",this._clear)},n._clear=function(){localStorage.removeItem(this.formIdentifier),this.dispatch(this.el,"form-save:cleared")},n.clear=function(e){null==e||e.preventDefault(),this._clear()},n.save=function(e){e.preventDefault(),localStorage.setItem(this.formIdentifier,JSON.stringify(this.formData[this.formIdentifier])),this.dispatch(this.el,"form-save:save:success")},n.restore=function(e){if(null==e||e.preventDefault(),localStorage.getItem(this.formIdentifier)){for(var t,n=JSON.parse(localStorage.getItem(this.formIdentifier)),i=c(this.formElements);!(t=i()).done;){var r=t.value;r.name in n&&(D(r)&&"checkbox"==r.type?r.checked=n[r.name]:D(r)&&"radio"==r.type?r.value==n[r.name]&&(r.checked=!0):r.value=n[r.name])}this.dispatch(this.el,"form-save:restore:success")}else this.dispatch(this.el,"form-save:restore:empty")},r(t,[{key:"formID",get:function(){if(this.hasIdValue)return this.idValue;var e=this.el.id;if(""!==e)return e;throw new Error("No ID value to uniquely identify this form. Please either specify data-"+this.identifier+"-id-value or give this form an 'id' attribute. ")}},{key:"formIdentifier",get:function(){return location.href+" "+this.formID}},{key:"formElements",get:function(){return this.el.elements}},{key:"formData",get:function(){for(var e,t,n=((e={})[this.formIdentifier]={},e),i=c(this.formElements);!(t=i()).done;){var r=t.value;r.name.length>0&&(D(r)&&"checkbox"==r.type?n[this.formIdentifier][r.name]=r.checked:D(r)&&"radio"==r.type?r.checked&&(n[this.formIdentifier][r.name]=r.value):n[this.formIdentifier][r.name]=r.value)}return n}},{key:"restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"clearOnSubmit",get:function(){return!this.hasClearOnSubmitValue||this.clearOnSubmitValue}}]),t}(u);U.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var J=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.connect=function(){b(this,{threshold:this.threshold,element:this.el})},n.appear=function(e){this.dispatch(this.el,"intersection:appear",{detail:{element:this.el}})},n.disappear=function(e){this.dispatch(this.el,"intersection:disappear",{detail:{element:this.el}})},r(t,[{key:"threshold",get:function(){return this.hasThresholdValue?this.thresholdValue.split(",").map(function(e){return Number.parseFloat(e.trim())}).filter(function(e){return e>=0&&e<=1}):[0,1]}}]),t}(u);J.values={threshold:String};var Y,G=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.connect=function(){if("IntersectionObserver"in window){var e=b(this,{element:this.el,threshold:.3});this.observe=e[0],this.unobserve=e[1]}else this.loadContent()},n.appear=function(e){e.target===this.el&&e.isIntersecting&&(this.loadContent(),this.unobserve&&this.unobserve())},t}(d),K=function(e,t){var n=void 0===t?{}:t,i=n.behavior,r=void 0===i?"smooth":i,s=n.block,o=void 0===s?"start":s,a=n.inline,l=void 0===a?"nearest":a;try{var c=function(){e.scrollIntoView({behavior:r,block:o,inline:l})},u=function(){if("smooth"==r&&!Q)return Promise.resolve(function(){try{return Promise.resolve(import("smoothscroll-polyfill")).then(function(e){Y||(Y=!0,(0,e.polyfill)())})}catch(e){return Promise.reject(e)}}()).then(function(){})}();return Promise.resolve(u&&u.then?u.then(c):c())}catch(e){return Promise.reject(e)}},Q="scrollBehavior"in document.documentElement.style;function X(e){if(!e)return null;var t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:X(e.parentElement)||document.body}var Z=function(e){function n(){var t;return(t=e.apply(this,arguments)||this)._dialog=null,t}o(n,e);var i=n.prototype;return i.initialize=function(){this.open=this.open.bind(this),this.close=this.close.bind(this)},i.connect=function(){},i.open=function(){var e=this,n=this.el;if(!this._dialog){this._dialog=document.createElement("dialog");var i=document.createElement("img");i.className=this.imageClassName,i.src=this.src,i.srcset=this.srcSet,i.sizes=this.sizes,this._dialog.appendChild(i),n.insertAdjacentElement("afterend",this._dialog),t.registerDialog(this._dialog),this._dialog.className=this.modalClassName,this._dialog.showModal(),K(this._dialog,{behavior:"smooth",block:"end"}).catch(function(){return e._dialog.scrollIntoView(!1)}),this._dialog.addEventListener("click",this.close),this._dialog.addEventListener("cancel",this.close),this._dialog.addEventListener("close",this.close)}},i.close=function(){var e=this;this._dialog&&(this._dialog.close(),this._dialog.remove(),this._dialog=null,K(this.el,{behavior:"smooth",block:"end"}).catch(function(){return e.el.scrollIntoView(!1)}))},r(n,[{key:"src",get:function(){return this.hasSrcValue?this.srcValue:this.el.src}},{key:"srcSet",get:function(){return this.hasSrcSetValue?this.srcSetValue:this.el.srcset}},{key:"sizes",get:function(){return this.hasSizesValue?this.sizesValue:this.el.sizes}},{key:"modalClassName",get:function(){return this.hasModalClass?this.modalClass:"image-lightbox-dialog"}},{key:"imageClassName",get:function(){return this.hasImageClass?this.imageClass:"image-lightbox-image"}}]),n}(u);Z.values={src:String,srcSet:String,sizes:String},Z.classes=["modal","image"];var ee=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.initialize=function(){this.handleInputs=this.handleInputs.bind(this)},n.connect=function(){var e=this;this.inputTargets.forEach(function(t){return t.addEventListener("change",e.handleInputs)})},n.disconnect=function(){var e=this;this.inputTargets.forEach(function(t){return t.removeEventListener("change",e.handleInputs)})},n.handleInputs=function(e){var t=this.inputTargets.reduce(function(e,t){return t.checked?e+1:e},0),n=e.target;t>this.maxValue?(e.preventDefault(),n.checked=!1,this.dispatch(n,"change"),this.dispatch(n,"limited-selection:too-many"),this.hasErrorTarget&&(this.errorTarget.innerHTML=this.messageValue)):(this.dispatch(n,"limited-selection:selection"),this.hasErrorTarget&&(this.errorTarget.innerHTML=""))},t}(u);ee.targets=["input","error"],ee.values={max:Number,message:String};var te=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.connect=function(){this.checkStructure()},n.add=function(e){null==e||e.preventDefault();var t=this.templateTarget.innerHTML.replace(/NEW_RECORD/g,this.generateID());this.targetTarget.insertAdjacentHTML(this.insertMode,t)},n.remove=function(e){e.preventDefault();var t=e.target.closest("."+this.wrapperClass);if(null==t)throw new Error("#remove was clicked from outside of a child record. Could not find an ancestor with class ."+this.wrapperClass);if("true"===t.dataset.newRecord)t.remove();else{t.style.display="none";var n=t.querySelector("input[name*='_destroy']");if(null==n)throw new Error("Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.");n.value="1"}},n.generateID=function(){return(new Date).getTime().toString()+Math.random().toString().slice(2)},n.checkStructure=function(){if(this.templateTarget.innerHTML.indexOf("NEW_RECORD"))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`")},r(t,[{key:"wrapperClass",get:function(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}},{key:"insertMode",get:function(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}}]),t}(u);te.targets=["target","template"],te.values={insertMode:String,wrapperClass:String};var ne=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.initialize=function(){this.checkPasswordsMatch=this.checkPasswordsMatch.bind(this)},n.connect=function(){var e=this;this.passwordTargets.forEach(function(t){return t.addEventListener("change",e.checkPasswordsMatch)})},n.disconnect=function(){var e=this;this.passwordTargets.forEach(function(t){return t.removeEventListener("change",e.checkPasswordsMatch)})},n.allPasswordsMatch=function(){var e=new Set(this.passwordTargets.map(function(e){return e.value}));return e.has("")||1==e.size},n.checkPasswordsMatch=function(){var e=this,t=this.el;this.allPasswordsMatch()?(this.dispatch(t,"password-confirm:match"),this.hasErrorClass&&this.passwordTargets.forEach(function(t){return t.classList.remove(e.errorClass)})):(this.dispatch(t,"password-confirm:no-match"),this.hasErrorClass&&this.passwordTargets.forEach(function(t){return t.classList.add(e.errorClass)}))},t}(u);ne.targets=["password"],ne.classes=["error"];var ie=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.peak=function(e){null==e||e.preventDefault(),this.passwordTarget.type="text"},n.hide=function(e){null==e||e.preventDefault(),this.passwordTarget.type="password"},n.toggle=function(e){null==e||e.preventDefault(),"password"===this.passwordTarget.type?this.peak():this.hide()},t}(u);ie.targets=["password"];var re=function(e){function t(){return e.apply(this,arguments)||this}return o(t,e),t.prototype.replace=function(e){var t=e.detail[0];if(t instanceof Node){var n=t.querySelector(this.selector);if(null==n)throw new Error('expected new form DOM with [data-controller="'+this.identifier+'"] to be present in returned payload');var i=this.el.parentNode;if(null==i)throw new Error("expected form to have a DOM parent, could not execute replaceChild");i.replaceChild(n,this.el)}else console.log("Unknown",t)},r(t,[{key:"selector",get:function(){return this.hasSelectorValue?this.selectorValue:'[data-controller~="'+this.identifier+'"]'}}]),t}(u);re.targets=[],re.values={selector:String};var se=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.initialize=function(){this.messageReceived=this.messageReceived.bind(this)},n.connect=function(){window.addEventListener("message",this.messageReceived)},n.disconnect=function(){window.removeEventListener("message",this.messageReceived)},n.messageReceived=function(e){var t=e.data;t.hasOwnProperty("name")&&"iframe-body"===t.name&&t.hasOwnProperty("height")&&this.resize(t.height)},n.resize=function(e){this.el.style.height=e+"px"},t}(u),oe=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.connect=function(){var e,t,n;window.self!==window.top&&(T(this),t={},null===(n=(e=this).constructor.debounces)||void 0===n||n.forEach(n=>{if("string"==typeof n&&(e[n]=_(e[n],null==t?void 0:t.wait)),"object"==typeof n){const{name:i,wait:r}=n;if(!i)return;e[i]=_(e[i],r||(null==t?void 0:t.wait))}}),this.postUpdate())},n.windowResize=function(e){this.postUpdate()},n.postUpdate=function(){var e={name:"iframe-body",height:this.getHeight()};window.parent.postMessage(e,"*")},n.getHeight=function(){var e=document.body,t=document.documentElement;return Math.max(e.scrollHeight,e.offsetHeight,t.clientHeight,t.scrollHeight,t.offsetHeight)},t}(u);oe.debounces=["postUpdate"];var ae=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var i=t.prototype;return i._cleanupSelf=function(){this.cleanup(this.el)},i.cleanup=function(e){var t,i,r,s=this;e.dataset.controller=(null==(t=e.dataset.controller)?void 0:t.replaceAll(new RegExp("(s|^)"+this.identifier+"(s|$)","g"),""))||"",""==e.dataset.controller&&delete e.dataset.controller;var o=new RegExp("(s|^)"+this.identifier+"\\..+?(s|$)","g");e.dataset.target=(null==(i=e.dataset.target)?void 0:i.replaceAll(o,""))||"",delete e.dataset[n(this.identifier+"-target")],""==e.dataset.target&&delete e.dataset.target,e.dataset.action=(null==(r=e.dataset.target)?void 0:r.replaceAll(o,""))||"",delete e.dataset[n(this.identifier+"-action")],""==e.dataset.action&&delete e.dataset.action;var a=this.constructor.values;a&&Object.keys(a).forEach(function(t){return delete e.dataset[n(s.identifier+"-"+t+"-value")]});var l=this.constructor.classes;l&&Object.keys(l).forEach(function(t){return delete e.dataset[n(s.identifier+"-"+t+"-class")]})},t}(u),le=function(e){function t(){return e.apply(this,arguments)||this}return o(t,e),t.prototype.connect=function(){var e=this;requestAnimationFrame(function(){K(e.el,{behavior:e.hasBehaviorValue?e.behaviorValue:"smooth",block:e.hasBlockValue?e.blockValue:"center",inline:e.hasInlineValue?e.inlineValue:"center"}).catch(function(){return e.el.scrollIntoView()}),e._cleanupSelf()})},t}(ae);le.values={behavior:String,block:String,inline:String};var ce=function(e){function t(){return e.apply(this,arguments)||this}return o(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:X(this.el))&&K(t,{behavior:"smooth",block:"end"}).catch(function(){return t.scrollIntoView(!1)})},t}(u);ce.values={mode:String};var ue=function(e){function t(){return e.apply(this,arguments)||this}return o(t,e),t.prototype.scroll=function(){var e=document.querySelector(this.selectorValue);e?K(e,{behavior:this.hasBehaviorValue?this.behaviorValue:"smooth",block:this.hasBlockValue?this.blockValue:"center",inline:this.hasInlineValue?this.inlineValue:"center"}).catch(function(){return e.scrollIntoView()}):console.warn("Could not find target for '"+this.selectorValue+"'")},t}(u);ue.values={selector:String,behavior:String,block:String,inline:String};var he=function(e){function t(){return e.apply(this,arguments)||this}return o(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:X(this.el))&&K(t,{behavior:"smooth",block:"start"}).catch(function(){return t.scrollIntoView(!1)})},t}(u);he.values={mode:String};var de=function(e){function t(){var t;return(t=e.apply(this,arguments)||this).timeout=null,t}o(t,e);var n=t.prototype;return n.connect=function(){var e=this;requestAnimationFrame(function(){e.timeout=setTimeout(function(){return e.el.remove()},1e3*e.secondsValue)})},n.disconnect=function(){this.timeout&&clearTimeout(this.timeout)},t}(u);de.values={seconds:Number};var fe=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._magicElement=null,t}o(t,e);var n=t.prototype;return n.createMagicElement=function(){if(null===this._magicElement)switch(this._magicElement=document.createElement("div"),this._mode){case"top":this.el.insertAdjacentElement("beforebegin",this._magicElement);break;case"bottom":this.el.insertAdjacentElement("afterend",this._magicElement)}},n.connect=function(){var e=this,t=this.el;this.createMagicElement(),new IntersectionObserver(function(n){n.forEach(function(n){n.target===e._magicElement&&(0===n.intersectionRatio?t.classList.add(e.hasStuckClass?e.stuckClass:"stuck"):1===n.intersectionRatio&&t.classList.remove(e.hasStuckClass?e.stuckClass:"stuck"))})},{threshold:[0,1]}).observe(this._magicElement)},r(t,[{key:"_mode",get:function(){return this.hasModeValue?this.modeValue:"top"}}]),t}(u);fe.classes=["stuck"],fe.values={mode:String};var pe=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.connect=function(){var e=this;if(!this.hasInsertValue)throw new Error("`insert` value was not specified");requestAnimationFrame(function(){e.hasImmediateValue&&e.immediateValue&&e.execute()})},n.execute=function(e){null==e||e.preventDefault();var t=this.el,n=document.querySelector(this.targetValue);if(null!=n){var i=t.cloneNode(!0);switch(this.cleanup(i),this.insertValue){case"beforebegin":case"beforeend":case"afterend":case"afterbegin":n.insertAdjacentHTML(this.insertValue,i.outerHTML);break;case"replaceOuter":n.outerHTML=i.outerHTML;break;case"replaceInner":n.innerHTML=i.outerHTML;break;case"prepend":n.insertAdjacentHTML("afterbegin",i.outerHTML);break;case"append":n.insertAdjacentHTML("beforeend",i.outerHTML);break;default:throw new Error("`insert` value was not specified")}t.remove()}else this.dispatch(t,"teleport:error")},t}(ae);pe.values={target:String,insert:String,immediate:Boolean};var me=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.connect=function(){var e=this;if(!this.hasClassValue)throw new Error("data-toggle-class-class-value must not be empty");(this.hasMouseEnterValue||this.hasMouseLeaveValue)&&((e,t={})=>{new V(this,t)})(),this.hasClickAwayValue&&this.clickAwayValue&&((e,t={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},y,t),o=r=>{const o=(null==t?void 0:t.element)||e.element;if(!(o.contains(r.target)||!function(e){const t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return t.top<=n&&t.top+t.height>=0&&t.left<=i&&t.left+t.width>=0}(o)&&n)&&(e.clickOutside&&e.clickOutside(r),i)){const t=m("click:outside",e,s),n=g(t,r,{controller:e});o.dispatchEvent(n)}},a=e.disconnect.bind(e);Object.assign(e,{disconnect(){null==r||r.forEach(e=>{window.removeEventListener(e,o,!1)}),a()}}),null==r||r.forEach(e=>{window.addEventListener(e,o,!1)})})(this),requestAnimationFrame(function(){e.hasInitialValue&&e.toggleTargets.forEach("on"===e.initialValue?function(t){return e.elementOn(t)}:function(t){return e.elementOff(t)})})},n.clickOutside=function(){var e=this;this.toggleTargets.forEach(function(t){e.elementWasToggled(t)&&(e.elementToggleStatus(t),e.elementToggle(t))})},n.mouseEnter=function(){if(this.hasMouseEnterValue)switch(this.mouseEnterValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}},n.mouseLeave=function(){if(this.hasMouseLeaveValue)switch(this.mouseLeaveValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}},n.on=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementOn(e)})},n.off=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementOff(e)})},n.toggle=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementToggle(e)})},n.elementWasToggled=function(e){return"true"==e.dataset.toggled},n.elementToggleStatus=function(e){this.elementWasToggled(e)?delete e.dataset.toggled:e.dataset.toggled="true"},n.elementToggle=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t)})},n.elementOn=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t,!0)})},n.elementOff=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t,!1)})},t}(u);function ge(e){return"TURBO-FRAME"==e.nodeName}me.targets=["toggle"],me.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var ve=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.toggle=function(e){null==e||e.preventDefault();var t=this._getFrame().src;null==t||t!==this._getSrc()?this._setSrc():this._clear()},n.setSrc=function(e){null==e||e.preventDefault(),this._setSrc()},n.clear=function(e){null==e||e.preventDefault(),this._clear()},n._setSrc=function(){var e=this._getFrame();this.hasLoadingMessageValue&&(e.innerHTML=this.loadingMessageValue),e.src=this._getSrc()},n._clear=function(){var e=this._getFrame();e.src="",e.innerHTML=""},n._getFrame=function(){var e=document.getElementById(""+this.frameIdValue);if(null==e)throw new Error("Could not find frame with ID '"+this.frameIdValue+"'");if(ge(e))return e;throw new Error("Element targeted by ID '"+this.frameIdValue+"'")},n._getSrc=function(){var e=this.el;if(this.hasSrcValue)return this.srcValue;if(M(e))return e.href;throw new Error("No link given to drive frame to")},t}(u);ve.values={frameId:String,src:String,loadingMessage:String};var be=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._timeoutHandle=null,t}o(t,e);var n=t.prototype;return n.initialize=function(){this.refresh=this.refresh.bind(this)},n.connect=function(){var e=this,t=this.el;if(!ge(t))throw new Error("Expected controller to be mounted on a element.");if(t.src)throw new Error("The provided element has no `src` attribute.");this.poll&&requestAnimationFrame(function(){return e._timeoutHandle=setTimeout(function(){return e.refresh()},e.intervalValue)})},n.disconnect=function(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)},n.refresh=function(e){null==e||e.preventDefault();var t=this.el;t.src=t.src},r(t,[{key:"poll",get:function(){return!!this.hasPollValue&&this.pollValue}}]),t}(u);be.values={interval:Number,poll:Boolean};var ye=function(e){function t(){return e.apply(this,arguments)||this}o(t,e);var n=t.prototype;return n.initialize=function(){this.updateWordCount=this.updateWordCount.bind(this)},n.connect=function(){this.updateWordCount(),this.inputTarget.addEventListener("input",this.updateWordCount)},n.disconnect=function(){this.inputTarget.removeEventListener("input",this.updateWordCount)},n.updateWordCount=function(){var e=0,t=this.inputTarget.value.match(/\S+/g);this.outputTarget.innerText=(e=t&&t.length||0).toString(),this.hasErrorClass&&(this.isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n.isValidCount=function(e){var t=0,n=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(n=this.maxValue),e>=t&&e<=n},t}(u);ye.targets=["input","output"],ye.values={min:Number,max:Number},ye.classes=["error"];export{h as AppearanceController,d as AsyncBlockController,f as AutoSubmitFormController,S as AutosizeController,C as CharCountController,L as CheckboxSelectAllController,I as ClipboardController,H as ConfirmController,z as ConfirmNavigationController,P as DebugController,j as DetectDirtyController,R as DisableInputsController,F as DisableWithController,q as DismissableController,W as EmptyDomController,B as EnableInputsController,$ as FallbackImageController,U as FormSaveController,J as IntersectionController,G as LazyBlockController,Z as LightboxImageController,ee as LimitedSelectionCheckboxesController,te as NestedFormController,ne as PasswordConfirmController,ie as PasswordPeekController,re as RemoteFormController,oe as ResponsiveIframeBodyController,se as ResponsiveIframeWrapperController,le as ScrollIntoFocusController,ce as ScrollToBottomController,ue as ScrollToController,he as ScrollToTopController,de as SelfDestructController,fe as StickyController,pe as TeleportController,me as ToggleClassController,ve as TurboFrameRCController,be as TurboFrameRefreshController,ye as WordCountController}; +import{Controller as e}from"stimulus";import t from"lodash-es/get";import n from"lodash-es/set";import i from"dialog-polyfill";import r from"camelcase";function s(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,i=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}var d=function(e){function t(t){var n;return n=e.call(this,t)||this,new Proxy(c(n),{get:function(e,t){var i=Reflect.get(e,t),r=c(n);if(function(e){switch(e){case"application":case"el":case"element":case"constructor":case"initialize":case"log":case"dispatch":case"data":case"valueDescriptorMap":case"identifier":return!1}return!(/^_.*?$/.test(e)||/^.*?Target(s)?$/.test(e)||/^.*?Value$/.test(e)||/^.*?ValueChanged$/.test(e)||/^.*?Class$/.test(e))}(t.toString())){if("function"==typeof i)return new Proxy(i,{apply:function(e,n,i){return r.log(t.toString(),{args:i}),Reflect.apply(e,n,i)}});n.log(t.toString())}return i}})||c(n)}l(t,e);var n=t.prototype;return n.dispatch=function(e,t,n){void 0===n&&(n={});var i=Object.assign({},{bubbles:!0,cancelable:!0,detail:{target:e}},n);i.detail.target&&(i.detail.target=e);var r=new CustomEvent(t,i);e.dispatchEvent(r)},n.log=function(e,t){if(void 0===t&&(t={}),this.application.debug){var n=console;n.groupCollapsed("%c"+this.identifier+" %c#"+e,"color: #3B82F6","color: unset"),n.log(o({element:this.element},t)),n.groupEnd()}},a(t,[{key:"el",get:function(){return this.element}}]),t}(e),f=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.initialize=function(){this._handleVisibility=this._handleVisibility.bind(this)},n.connect=function(){window.addEventListener("focus",this._handleVisibility),window.addEventListener("blur",this._handleVisibility),document.addEventListener("visibilitychange",this._handleVisibility),this._handleVisibility()},n.disconnect=function(){window.removeEventListener("focus",this._handleVisibility),window.removeEventListener("blur",this._handleVisibility),document.removeEventListener("visibilitychange",this._handleVisibility)},n.appear=function(){this.dispatch(this.el,"appearance:appear")},n.away=function(){this.dispatch(this.el,"appearance:away")},n._handleVisibility=function(){this._documentIsActive()?this.appear():this.away()},n._documentIsActive=function(){return"visible"==document.visibilityState&&document.hasFocus()},t}(d),p=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.connect=function(){this.loadContent()},n.loadContent=function(){var e=this,t=this,n=this.hasReplaceTarget?this.replaceTarget:this.el;fetch(this.endpointValue).then(function(e){return e.text()}).then(function(i){var r=document.createElement("div");if(r.innerHTML=i,e.hasSelectorValue){var s=r.querySelectorAll(e.selectorValue);n.replaceWith.apply(n,s)}else n.replaceWith.apply(n,r.children);t.dispatch(n,"ajax:success")}).catch(function(i){n.replaceWith(e._errorMessage),t.dispatch(n,"ajax:error")}).finally(function(){t.dispatch(n,"ajax:complete")})},a(t,[{key:"_errorMessage",get:function(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}}]),t}(d);p.targets=["replace"],p.values={endpoint:String,errorMessage:String,selector:String};var m=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.initialize=function(){this.handler=this.handler.bind(this)},n.connect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.addEventListener("change",e.handler)})},n.disconnect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.removeEventListener("change",e.handler)})},n.handler=function(e){this.dispatch(this.el,"submit")},t}(d);const g=(e,t)=>{const n=e[t];return"function"==typeof n?n:(...e)=>{}},v=(e,t,n)=>{let i=e;return!0===n?i=`${t.identifier}:${e}`:"string"==typeof n&&(i=`${n}:${e}`),i},b=(e,t,n)=>{const{bubbles:i,cancelable:r,composed:s}=t||{bubbles:!0,cancelable:!0,composed:!0};return t&&Object.assign(n,{originalEvent:t}),new CustomEvent(e,{bubbles:i,cancelable:r,composed:s,detail:n})},y={dispatchEvent:!0,eventPrefix:!0},E=(e,t={})=>{const{dispatchEvent:n,eventPrefix:i}=Object.assign({},y,t),r=(null==t?void 0:t.element)||e.element,s=e.disconnect.bind(e),a=new IntersectionObserver(t=>{const[s]=t;s.isIntersecting?(t=>{if(e.isVisible=!0,g(e,"appear").call(e,t),n){const n=v("appear",e,i),s=b(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s):e.isVisible&&(t=>{if(e.isVisible=!1,g(e,"disappear").call(e,t),n){const n=v("disappear",e,i),s=b(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s)},t),o=()=>{a.observe(r)},l=()=>{a.unobserve(r)};return Object.assign(e,{isVisible:!1,disconnect(){l(),s()}}),o(),[o,l]},w={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},V={debug:!1,logger:console};class _{constructor(e,t={}){var n,i,r;this.log=(e,t)=>{this.debug&&(this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${e}`,"color: #3B82F6","color: unset"),this.logger.log(Object.assign({controllerId:this.controllerId},t)),this.logger.groupEnd())},this.debug=null!==(i=null!==(n=null==t?void 0:t.debug)&&void 0!==n?n:e.application.stimulusUseDebug)&&void 0!==i?i:V.debug,this.logger=null!==(r=null==t?void 0:t.logger)&&void 0!==r?r:V.logger,this.controller=e,this.controllerId=e.element.id||e.element.dataset.id,this.controllerInitialize=e.initialize.bind(e),this.controllerConnect=e.connect.bind(e),this.controllerDisconnect=e.disconnect.bind(e)}}class k extends _{constructor(e,t={}){super(e,t),this.observe=()=>{this.targetElement.addEventListener("mouseenter",this.onEnter),this.targetElement.addEventListener("mouseleave",this.onLeave)},this.unobserve=()=>{this.targetElement.removeEventListener("mouseenter",this.onEnter),this.targetElement.removeEventListener("mouseleave",this.onLeave)},this.onEnter=()=>{g(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{g(this.controller,"mouseLeave").call(this.controller),this.log("mouseLeave",{hover:!1})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}class T extends _{constructor(e,t={}){super(e,t),this.observe=()=>{try{this.observer.observe(this.targetElement,this.options)}catch(e){this.controller.application.handleError(e,"At a minimum, one of childList, attributes, and/or characterData must be true",{})}},this.unobserve=()=>{this.observer.disconnect()},this.mutation=e=>{g(this.controller,"mutate").call(this.controller,e),this.log("mutate",{entries:e})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.options=t,this.observer=new MutationObserver(this.mutation),this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}const S=e=>{const t=t=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:t};g(e,"windowResize").call(e,r)},n=e.disconnect.bind(e),i=()=>{window.addEventListener("resize",t),t()},r=()=>{window.removeEventListener("resize",t)};return Object.assign(e,{disconnect(){r(),n()}}),i(),[i,r]},C=(e,t=200)=>{let n=null;return function(){const i=arguments,r=this,s=()=>e.apply(r,i);n&&clearTimeout(n),n=setTimeout(s,t)}};var L=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var e=this.el;e.style.resize="none",e.style.boxSizing="border-box",e.addEventListener("input",this._handler),e.addEventListener("focus",this._handler),S(this),requestAnimationFrame(this._handler)},n.windowResize=function(){this._handler()},n._handler=function(){this.autosize(this.el)},n.autosize=function(e){var t=e.offsetHeight-e.clientHeight;e.style.height="auto",e.style.height=e.scrollHeight+t+"px"},t}(d),I=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.initialize=function(){this._updateCharCount=this._updateCharCount.bind(this)},n.connect=function(){this._updateCharCount(),this.inputTarget.addEventListener("input",this._updateCharCount)},n.disconnect=function(){this.inputTarget.removeEventListener("input",this._updateCharCount)},n._updateCharCount=function(){var e=this.inputTarget.value.length;this.outputTarget.innerText=e.toString(),this.hasErrorClass&&(this._isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n._isValidCount=function(e){var t=0,n=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(n=this.maxValue),e>=t&&e<=n},t}(d);I.targets=["input","output"],I.values={min:Number,max:Number},I.classes=["error"];var M=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.initialize=function(){this.toggle=this.toggle.bind(this),this.refresh=this.refresh.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e.hasSelectAllTarget&&(e.selectAllTarget.addEventListener("change",e.toggle),e.checkboxTargets.forEach(function(t){return t.addEventListener("change",e.refresh)}),e.refresh())})},n.disconnect=function(){var e=this;this.hasSelectAllTarget&&(this.selectAllTarget.removeEventListener("change",this.toggle),this.checkboxTargets.forEach(function(t){return t.removeEventListener("change",e.refresh)}))},n.toggle=function(e){e.preventDefault();var t=e.target;this.checkboxTargets.forEach(function(e){return e.checked=t.checked})},n.refresh=function(){var e=this.checkboxTargets.length,t=this.checked.length;this.selectAllTarget.checked=t>0,this.selectAllTarget.indeterminate=t>0&&t{new T(this,t)})(0,{element:this.el,childList:!0}),this.checkEmpty()},n.mutate=function(e){this.checkEmpty()},n.checkEmpty=function(){var e=this.el,t=this.children;0===t.length?(this._removeNotEmptyClasses(),this._addEmptyClasses(),this.dispatch(e,"dom:empty")):(this._addNotEmptyClasses(),this._removeEmptyClasses(),this.dispatch(e,"dom:not-empty",{detail:{count:t.length}}))},n._removeEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).remove.apply(e,this.emptyClasses)},n._addNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).add.apply(e,this.notEmptyClasses)},n._addEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).add.apply(e,this.emptyClasses)},n._removeNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).remove.apply(e,this.notEmptyClasses)},a(t,[{key:"emptyClasses",get:function(){return this.emptyClass.split(" ")}},{key:"notEmptyClasses",get:function(){return this.notEmptyClass.split(" ")}},{key:"children",get:function(){var e=this.el;return Array.from(this.hasScopeSelectorValue?e.querySelectorAll(this.scopeSelectorValue):e.children)}}]),t}(d);U.classes=["empty","notEmpty"],U.values={scopeSelector:String};var J=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasEnablerTarget&&this.enablerTarget.checked?this.enableInputs():this.disableInputs()},n.disableInputs=function(){var e=this.hasClearValue&&this.clearValue;this.enableTargets.forEach(function(t,n){e&&(t.value=""),t.disabled=!0})},n.enableInputs=function(){this.enableTargets.forEach(function(e,t){e.disabled=!1})},t}(d);J.targets=["enabler","enable"],J.values={clear:Boolean};var Y=function(e){function t(){return e.apply(this,arguments)||this}return l(t,e),t.prototype.connect=function(){var e=this,t=this.el;t.onerror=function(){e.hasPlaceholderValue?t.src=e.placeholderValue:t.style.display="none"}},t}(d);Y.values={placeholder:String};var G=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.initialize=function(){this._clear=this._clear.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){if(!D(e.el))throw new Error("Expected controller to be mounted on a form element.");e.restoreOnLoad&&e.restore(),e.clearOnSubmit&&e.el.addEventListener("submit",e._clear)})},n.disconnect=function(){this.clearOnSubmit&&this.el.removeEventListener("submit",this._clear)},n._clear=function(){localStorage.removeItem(this.formIdentifier),this.dispatch(this.el,"form-save:cleared")},n.clear=function(e){null==e||e.preventDefault(),this._clear()},n.save=function(e){e.preventDefault(),localStorage.setItem(this.formIdentifier,JSON.stringify(this.formData[this.formIdentifier])),this.dispatch(this.el,"form-save:save:success")},n.restore=function(e){if(null==e||e.preventDefault(),localStorage.getItem(this.formIdentifier)){for(var t,n=JSON.parse(localStorage.getItem(this.formIdentifier)),i=h(this.formElements);!(t=i()).done;){var r=t.value;r.name in n&&(A(r)&&"checkbox"==r.type?r.checked=n[r.name]:A(r)&&"radio"==r.type?r.value==n[r.name]&&(r.checked=!0):r.value=n[r.name])}this.dispatch(this.el,"form-save:restore:success")}else this.dispatch(this.el,"form-save:restore:empty")},a(t,[{key:"formID",get:function(){if(this.hasIdValue)return this.idValue;var e=this.el.id;if(""!==e)return e;throw new Error("No ID value to uniquely identify this form. Please either specify data-"+this.identifier+"-id-value or give this form an 'id' attribute. ")}},{key:"formIdentifier",get:function(){return location.href+" "+this.formID}},{key:"formElements",get:function(){return this.el.elements}},{key:"formData",get:function(){for(var e,t,n=((e={})[this.formIdentifier]={},e),i=h(this.formElements);!(t=i()).done;){var r=t.value;r.name.length>0&&(A(r)&&"checkbox"==r.type?n[this.formIdentifier][r.name]=r.checked:A(r)&&"radio"==r.type?r.checked&&(n[this.formIdentifier][r.name]=r.value):n[this.formIdentifier][r.name]=r.value)}return n}},{key:"restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"clearOnSubmit",get:function(){return!this.hasClearOnSubmitValue||this.clearOnSubmitValue}}]),t}(d);G.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var K=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.connect=function(){E(this,{threshold:this.threshold,element:this.el})},n.appear=function(e){this.dispatch(this.el,"intersection:appear",{detail:{element:this.el}})},n.disappear=function(e){this.dispatch(this.el,"intersection:disappear",{detail:{element:this.el}})},a(t,[{key:"threshold",get:function(){return this.hasThresholdValue?this.thresholdValue.split(",").map(function(e){return Number.parseFloat(e.trim())}).filter(function(e){return e>=0&&e<=1}):[0,1]}}]),t}(d);K.values={threshold:String};var Q,X=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.connect=function(){if("IntersectionObserver"in window){var e=E(this,{element:this.el,threshold:.3});this.observe=e[0],this.unobserve=e[1]}else this.loadContent()},n.appear=function(e){e.target===this.el&&e.isIntersecting&&(this.loadContent(),this.unobserve&&this.unobserve())},t}(p),Z=function(e,t){var n=void 0===t?{}:t,i=n.behavior,r=void 0===i?"smooth":i,s=n.block,a=void 0===s?"start":s,o=n.inline,l=void 0===o?"nearest":o;try{var c=function(){e.scrollIntoView({behavior:r,block:a,inline:l})},u=function(){if("smooth"==r&&!ee)return Promise.resolve(function(){try{return Promise.resolve(import("smoothscroll-polyfill")).then(function(e){Q||(Q=!0,(0,e.polyfill)())})}catch(e){return Promise.reject(e)}}()).then(function(){})}();return Promise.resolve(u&&u.then?u.then(c):c())}catch(e){return Promise.reject(e)}},ee="scrollBehavior"in document.documentElement.style;function te(e){if(!e)return null;var t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:te(e.parentElement)||document.body}var ne=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._dialog=null,t}l(t,e);var n=t.prototype;return n.initialize=function(){this.open=this.open.bind(this),this.close=this.close.bind(this)},n.connect=function(){},n.open=function(){var e=this,t=this.el;if(!this._dialog){this._dialog=document.createElement("dialog");var n=document.createElement("img");n.className=this.imageClassName,n.src=this.src,n.srcset=this.srcSet,n.sizes=this.sizes,this._dialog.appendChild(n),t.insertAdjacentElement("afterend",this._dialog),i.registerDialog(this._dialog),this._dialog.className=this.modalClassName,this._dialog.showModal(),Z(this._dialog,{behavior:"smooth",block:"end"}).catch(function(){return e._dialog.scrollIntoView(!1)}),this._dialog.addEventListener("click",this.close),this._dialog.addEventListener("cancel",this.close),this._dialog.addEventListener("close",this.close)}},n.close=function(){var e=this;this._dialog&&(this._dialog.close(),this._dialog.remove(),this._dialog=null,Z(this.el,{behavior:"smooth",block:"end"}).catch(function(){return e.el.scrollIntoView(!1)}))},a(t,[{key:"src",get:function(){return this.hasSrcValue?this.srcValue:this.el.src}},{key:"srcSet",get:function(){return this.hasSrcSetValue?this.srcSetValue:this.el.srcset}},{key:"sizes",get:function(){return this.hasSizesValue?this.sizesValue:this.el.sizes}},{key:"modalClassName",get:function(){return this.hasModalClass?this.modalClass:"image-lightbox-dialog"}},{key:"imageClassName",get:function(){return this.hasImageClass?this.imageClass:"image-lightbox-image"}}]),t}(d);ne.values={src:String,srcSet:String,sizes:String},ne.classes=["modal","image"];var ie=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.initialize=function(){this.handleInputs=this.handleInputs.bind(this)},n.connect=function(){var e=this;this.inputTargets.forEach(function(t){return t.addEventListener("change",e.handleInputs)})},n.disconnect=function(){var e=this;this.inputTargets.forEach(function(t){return t.removeEventListener("change",e.handleInputs)})},n.handleInputs=function(e){var t=this.inputTargets.reduce(function(e,t){return t.checked?e+1:e},0),n=e.target;t>this.maxValue?(e.preventDefault(),n.checked=!1,this.dispatch(n,"change"),this.dispatch(n,"limited-selection:too-many"),this.hasErrorTarget&&(this.errorTarget.innerHTML=this.messageValue)):(this.dispatch(n,"limited-selection:selection"),this.hasErrorTarget&&(this.errorTarget.innerHTML=""))},t}(d);ie.targets=["input","error"],ie.values={max:Number,message:String};var re=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.connect=function(){this.checkStructure()},n.add=function(e){null==e||e.preventDefault();var t=this.templateTarget.innerHTML.replace(/NEW_RECORD/g,this.generateID());this.targetTarget.insertAdjacentHTML(this.insertMode,t)},n.remove=function(e){e.preventDefault();var t=e.target.closest("."+this.wrapperClass);if(null==t)throw new Error("#remove was clicked from outside of a child record. Could not find an ancestor with class ."+this.wrapperClass);if("true"===t.dataset.newRecord)t.remove();else{t.style.display="none";var n=t.querySelector("input[name*='_destroy']");if(null==n)throw new Error("Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.");n.value="1"}},n.generateID=function(){return(new Date).getTime().toString()+Math.random().toString().slice(2)},n.checkStructure=function(){if(this.templateTarget.innerHTML.indexOf("NEW_RECORD"))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`")},a(t,[{key:"wrapperClass",get:function(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}},{key:"insertMode",get:function(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}}]),t}(d);re.targets=["target","template"],re.values={insertMode:String,wrapperClass:String};var se=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.initialize=function(){this.checkPasswordsMatch=this.checkPasswordsMatch.bind(this)},n.connect=function(){var e=this;this.passwordTargets.forEach(function(t){return t.addEventListener("change",e.checkPasswordsMatch)})},n.disconnect=function(){var e=this;this.passwordTargets.forEach(function(t){return t.removeEventListener("change",e.checkPasswordsMatch)})},n.allPasswordsMatch=function(){var e=new Set(this.passwordTargets.map(function(e){return e.value}));return e.has("")||1==e.size},n.checkPasswordsMatch=function(){var e=this,t=this.el;this.allPasswordsMatch()?(this.dispatch(t,"password-confirm:match"),this.hasErrorClass&&this.passwordTargets.forEach(function(t){return t.classList.remove(e.errorClass)})):(this.dispatch(t,"password-confirm:no-match"),this.hasErrorClass&&this.passwordTargets.forEach(function(t){return t.classList.add(e.errorClass)}))},t}(d);se.targets=["password"],se.classes=["error"];var ae=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.peak=function(e){null==e||e.preventDefault(),this.passwordTarget.type="text"},n.hide=function(e){null==e||e.preventDefault(),this.passwordTarget.type="password"},n.toggle=function(e){null==e||e.preventDefault(),"password"===this.passwordTarget.type?this.peak():this.hide()},t}(d);ae.targets=["password"];var oe=function(e){function t(){return e.apply(this,arguments)||this}return l(t,e),t.prototype.replace=function(e){var t=e.detail[0];if(t instanceof Node){var n=t.querySelector(this.selector);if(null==n)throw new Error('expected new form DOM with [data-controller="'+this.identifier+'"] to be present in returned payload');var i=this.el.parentNode;if(null==i)throw new Error("expected form to have a DOM parent, could not execute replaceChild");i.replaceChild(n,this.el)}else console.log("Unknown",t)},a(t,[{key:"selector",get:function(){return this.hasSelectorValue?this.selectorValue:'[data-controller~="'+this.identifier+'"]'}}]),t}(d);oe.targets=[],oe.values={selector:String};var le=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.initialize=function(){this.messageReceived=this.messageReceived.bind(this)},n.connect=function(){window.addEventListener("message",this.messageReceived)},n.disconnect=function(){window.removeEventListener("message",this.messageReceived)},n.messageReceived=function(e){var t=e.data;t.hasOwnProperty("name")&&"iframe-body"===t.name&&t.hasOwnProperty("height")&&this.resize(t.height)},n.resize=function(e){this.el.style.height=e+"px"},t}(d),ce=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.connect=function(){var e,t,n;window.self!==window.top&&(S(this),t={},null===(n=(e=this).constructor.debounces)||void 0===n||n.forEach(n=>{if("string"==typeof n&&(e[n]=C(e[n],null==t?void 0:t.wait)),"object"==typeof n){const{name:i,wait:r}=n;if(!i)return;e[i]=C(e[i],r||(null==t?void 0:t.wait))}}),this.postUpdate())},n.windowResize=function(e){this.postUpdate()},n.postUpdate=function(){var e={name:"iframe-body",height:this.getHeight()};window.parent.postMessage(e,"*")},n.getHeight=function(){var e=document.body,t=document.documentElement;return Math.max(e.scrollHeight,e.offsetHeight,t.clientHeight,t.scrollHeight,t.offsetHeight)},t}(d);ce.debounces=["postUpdate"];var ue=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n._cleanupSelf=function(){this.cleanup(this.el)},n.cleanup=function(e){var t,n,i,s=this;e.dataset.controller=(null==(t=e.dataset.controller)?void 0:t.replaceAll(new RegExp("(s|^)"+this.identifier+"(s|$)","g"),""))||"",""==e.dataset.controller&&delete e.dataset.controller;var a=new RegExp("(s|^)"+this.identifier+"\\..+?(s|$)","g");e.dataset.target=(null==(n=e.dataset.target)?void 0:n.replaceAll(a,""))||"",delete e.dataset[r(this.identifier+"-target")],""==e.dataset.target&&delete e.dataset.target,e.dataset.action=(null==(i=e.dataset.target)?void 0:i.replaceAll(a,""))||"",delete e.dataset[r(this.identifier+"-action")],""==e.dataset.action&&delete e.dataset.action;var o=this.constructor.values;o&&Object.keys(o).forEach(function(t){return delete e.dataset[r(s.identifier+"-"+t+"-value")]});var l=this.constructor.classes;l&&Object.keys(l).forEach(function(t){return delete e.dataset[r(s.identifier+"-"+t+"-class")]})},t}(d),he=function(e){function t(){return e.apply(this,arguments)||this}return l(t,e),t.prototype.connect=function(){var e=this;requestAnimationFrame(function(){Z(e.el,{behavior:e.hasBehaviorValue?e.behaviorValue:"smooth",block:e.hasBlockValue?e.blockValue:"center",inline:e.hasInlineValue?e.inlineValue:"center"}).catch(function(){return e.el.scrollIntoView()}),e._cleanupSelf()})},t}(ue);he.values={behavior:String,block:String,inline:String};var de=function(e){function t(){return e.apply(this,arguments)||this}return l(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:te(this.el))&&Z(t,{behavior:"smooth",block:"end"}).catch(function(){return t.scrollIntoView(!1)})},t}(d);de.values={mode:String};var fe=function(e){function t(){return e.apply(this,arguments)||this}return l(t,e),t.prototype.scroll=function(){var e=document.querySelector(this.selectorValue);e?Z(e,{behavior:this.hasBehaviorValue?this.behaviorValue:"smooth",block:this.hasBlockValue?this.blockValue:"center",inline:this.hasInlineValue?this.inlineValue:"center"}).catch(function(){return e.scrollIntoView()}):console.warn("Could not find target for '"+this.selectorValue+"'")},t}(d);fe.values={selector:String,behavior:String,block:String,inline:String};var pe=function(e){function t(){return e.apply(this,arguments)||this}return l(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:te(this.el))&&Z(t,{behavior:"smooth",block:"start"}).catch(function(){return t.scrollIntoView(!1)})},t}(d);pe.values={mode:String};var me=function(e){function t(){var t;return(t=e.apply(this,arguments)||this).timeout=null,t}l(t,e);var n=t.prototype;return n.connect=function(){var e=this;requestAnimationFrame(function(){e.timeout=setTimeout(function(){return e.el.remove()},1e3*e.secondsValue)})},n.disconnect=function(){this.timeout&&clearTimeout(this.timeout)},t}(d);me.values={seconds:Number};var ge=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._magicElement=null,t}l(t,e);var n=t.prototype;return n.createMagicElement=function(){if(null===this._magicElement)switch(this._magicElement=document.createElement("div"),this._mode){case"top":this.el.insertAdjacentElement("beforebegin",this._magicElement);break;case"bottom":this.el.insertAdjacentElement("afterend",this._magicElement)}},n.connect=function(){var e=this,t=this.el;this.createMagicElement(),new IntersectionObserver(function(n){n.forEach(function(n){n.target===e._magicElement&&(0===n.intersectionRatio?t.classList.add(e.hasStuckClass?e.stuckClass:"stuck"):1===n.intersectionRatio&&t.classList.remove(e.hasStuckClass?e.stuckClass:"stuck"))})},{threshold:[0,1]}).observe(this._magicElement)},a(t,[{key:"_mode",get:function(){return this.hasModeValue?this.modeValue:"top"}}]),t}(d);ge.classes=["stuck"],ge.values={mode:String};var ve=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.connect=function(){var e=this;if(!this.hasInsertValue)throw new Error("`insert` value was not specified");requestAnimationFrame(function(){e.hasImmediateValue&&e.immediateValue&&e.execute()})},n.execute=function(e){null==e||e.preventDefault();var t=this.el,n=document.querySelector(this.targetValue);if(null!=n){var i=t.cloneNode(!0);switch(this.cleanup(i),this.insertValue){case"beforebegin":case"beforeend":case"afterend":case"afterbegin":n.insertAdjacentHTML(this.insertValue,i.outerHTML);break;case"replaceOuter":n.outerHTML=i.outerHTML;break;case"replaceInner":n.innerHTML=i.outerHTML;break;case"prepend":n.insertAdjacentHTML("afterbegin",i.outerHTML);break;case"append":n.insertAdjacentHTML("beforeend",i.outerHTML);break;default:throw new Error("`insert` value was not specified")}t.remove()}else this.dispatch(t,"teleport:error")},t}(ue);ve.values={target:String,insert:String,immediate:Boolean};var be=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.connect=function(){var e=this;if(!this.hasClassValue)throw new Error("data-toggle-class-class-value must not be empty");(this.hasMouseEnterValue||this.hasMouseLeaveValue)&&((e,t={})=>{new k(this,t)})(),this.hasClickAwayValue&&this.clickAwayValue&&((e,t={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},w,t),a=r=>{const a=(null==t?void 0:t.element)||e.element;if(!(a.contains(r.target)||!function(e){const t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return t.top<=n&&t.top+t.height>=0&&t.left<=i&&t.left+t.width>=0}(a)&&n)&&(e.clickOutside&&e.clickOutside(r),i)){const t=v("click:outside",e,s),n=b(t,r,{controller:e});a.dispatchEvent(n)}},o=e.disconnect.bind(e);Object.assign(e,{disconnect(){null==r||r.forEach(e=>{window.removeEventListener(e,a,!1)}),o()}}),null==r||r.forEach(e=>{window.addEventListener(e,a,!1)})})(this),requestAnimationFrame(function(){e.hasInitialValue&&e.toggleTargets.forEach("on"===e.initialValue?function(t){return e.elementOn(t)}:function(t){return e.elementOff(t)})})},n.clickOutside=function(){var e=this;this.toggleTargets.forEach(function(t){e.elementWasToggled(t)&&(e.elementToggleStatus(t),e.elementToggle(t))})},n.mouseEnter=function(){if(this.hasMouseEnterValue)switch(this.mouseEnterValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}},n.mouseLeave=function(){if(this.hasMouseLeaveValue)switch(this.mouseLeaveValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}},n.on=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementOn(e)})},n.off=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementOff(e)})},n.toggle=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementToggle(e)})},n.elementWasToggled=function(e){return"true"==e.dataset.toggled},n.elementToggleStatus=function(e){this.elementWasToggled(e)?delete e.dataset.toggled:e.dataset.toggled="true"},n.elementToggle=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t)})},n.elementOn=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t,!0)})},n.elementOff=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t,!1)})},t}(d);function ye(e){return"TURBO-FRAME"==e.nodeName}be.targets=["toggle"],be.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var Ee=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.toggle=function(e){null==e||e.preventDefault();var t=this._getFrame().src;null==t||t!==this._getSrc()?this._setSrc():this._clear()},n.setSrc=function(e){null==e||e.preventDefault(),this._setSrc()},n.clear=function(e){null==e||e.preventDefault(),this._clear()},n._setSrc=function(){var e=this._getFrame();this.hasLoadingMessageValue&&(e.innerHTML=this.loadingMessageValue),e.src=this._getSrc()},n._clear=function(){var e=this._getFrame();e.src="",e.innerHTML=""},n._getFrame=function(){var e=document.getElementById(""+this.frameIdValue);if(null==e)throw new Error("Could not find frame with ID '"+this.frameIdValue+"'");if(ye(e))return e;throw new Error("Element targeted by ID '"+this.frameIdValue+"'")},n._getSrc=function(){var e=this.el;if(this.hasSrcValue)return this.srcValue;if(x(e))return e.href;throw new Error("No link given to drive frame to")},t}(d);Ee.values={frameId:String,src:String,loadingMessage:String};var we=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._timeoutHandle=null,t}l(t,e);var n=t.prototype;return n.initialize=function(){this.refresh=this.refresh.bind(this)},n.connect=function(){var e=this,t=this.el;if(!ye(t))throw new Error("Expected controller to be mounted on a element.");if(t.src)throw new Error("The provided element has no `src` attribute.");this.poll&&requestAnimationFrame(function(){return e._timeoutHandle=setTimeout(function(){return e.refresh()},e.intervalValue)})},n.disconnect=function(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)},n.refresh=function(e){null==e||e.preventDefault();var t=this.el;t.src=t.src},a(t,[{key:"poll",get:function(){return!!this.hasPollValue&&this.pollValue}}]),t}(d);we.values={interval:Number,poll:Boolean};var Ve=function(e){function t(){return e.apply(this,arguments)||this}l(t,e);var n=t.prototype;return n.initialize=function(){this.updateWordCount=this.updateWordCount.bind(this)},n.connect=function(){this.updateWordCount(),this.inputTarget.addEventListener("input",this.updateWordCount)},n.disconnect=function(){this.inputTarget.removeEventListener("input",this.updateWordCount)},n.updateWordCount=function(){var e=0,t=this.inputTarget.value.match(/\S+/g);this.outputTarget.innerText=(e=t&&t.length||0).toString(),this.hasErrorClass&&(this.isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n.isValidCount=function(e){var t=0,n=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(n=this.maxValue),e>=t&&e<=n},t}(d);Ve.targets=["input","output"],Ve.values={min:Number,max:Number},Ve.classes=["error"];export{f as AppearanceController,p as AsyncBlockController,m as AutoSubmitFormController,L as AutosizeController,I as CharCountController,M as CheckboxSelectAllController,O as ClipboardController,P as ConfirmController,j as ConfirmNavigationController,R as DebugController,q as DetectDirtyController,F as DisableInputsController,B as DisableWithController,W as DismissableController,$ as ElementSaveController,U as EmptyDomController,J as EnableInputsController,Y as FallbackImageController,G as FormSaveController,K as IntersectionController,X as LazyBlockController,ne as LightboxImageController,ie as LimitedSelectionCheckboxesController,re as NestedFormController,se as PasswordConfirmController,ae as PasswordPeekController,oe as RemoteFormController,ce as ResponsiveIframeBodyController,le as ResponsiveIframeWrapperController,he as ScrollIntoFocusController,de as ScrollToBottomController,fe as ScrollToController,pe as ScrollToTopController,me as SelfDestructController,ge as StickyController,ve as TeleportController,be as ToggleClassController,Ee as TurboFrameRCController,we as TurboFrameRefreshController,Ve as WordCountController}; //# sourceMappingURL=stimulus-library.module.js.map diff --git a/dist/stimulus-library.module.js.map b/dist/stimulus-library.module.js.map index 70e12b7d..d863a360 100644 --- a/dist/stimulus-library.module.js.map +++ b/dist/stimulus-library.module.js.map @@ -1 +1 @@ -{"version":3,"file":"stimulus-library.module.js","sources":["../src/base_controller.ts","../src/appearance_controller.ts","../src/async_block_controller.ts","../src/auto_submit_form_controller.ts","../node_modules/stimulus-use/dist/support/index.js","../node_modules/stimulus-use/dist/use-intersection/use-intersection.js","../node_modules/stimulus-use/dist/use-click-outside/use-click-outside.js","../node_modules/stimulus-use/dist/stimulus_use.js","../node_modules/stimulus-use/dist/use-hover/use-hover.js","../node_modules/stimulus-use/dist/use-mutation/use-mutation.js","../node_modules/stimulus-use/dist/use-window-resize/use-window-resize.js","../node_modules/stimulus-use/dist/use-debounce/use-debounce.js","../src/autosize_controller.ts","../src/char_count_controller.ts","../src/checkbox_select_all_controller.ts","../src/clipboard_controller.ts","../src/utilities/elements.ts","../src/confirm_controller.ts","../src/confirm_navigation_controller.ts","../src/debug_controller.ts","../src/detect_dirty_controller.ts","../src/disable_inputs_controller.ts","../src/disable_with_controller.ts","../src/dismissable_controller.ts","../src/empty_dom_controller.ts","../src/enable_inputs_controller.ts","../src/fallback_image_controller.ts","../src/form_save_controller.ts","../src/intersection_controller.ts","../src/lazy_block_controller.ts","../src/utilities/scroll.ts","../src/lightbox_image_controller.ts","../src/limited_selection_checkboxes_controller.ts","../src/nested_form_controller.ts","../src/password_confirm_controller.ts","../src/password_peek_controller.ts","../src/remote_form_controller.ts","../src/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/scroll_into_focus_controller.ts","../src/scroll_to_bottom_controller.ts","../src/scroll_to_controller.ts","../src/scroll_to_top_controller.ts","../src/self_destruct_controller.ts","../src/sticky_controller.ts","../src/teleport_controller.ts","../src/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/turbo_frame_rc_controller.ts","../src/turbo_frame_refresh_controller.ts","../src/word_count_controller.ts"],"sourcesContent":["import {Context, Controller} from \"stimulus\";\n\nexport class BaseController extends Controller {\n\n constructor(context: Context) {\n super(context);\n return new Proxy(this, {\n get: (obj, prop) => {\n let returnVal = Reflect.get(obj, prop);\n let self = this;\n if (logProperty(prop.toString())) {\n if (typeof returnVal == \"function\") {\n return new Proxy(returnVal, {\n apply(target: any, thisArg: any, argArray?: any): any {\n self.log(prop.toString(), {\n args: argArray,\n });\n return Reflect.apply(target, thisArg, argArray);\n },\n });\n } else {\n this.log(prop.toString());\n }\n }\n return returnVal;\n },\n });\n }\n\n get el(): HTMLElement {\n return this.element as HTMLElement;\n }\n\n dispatch(element: HTMLElement, eventName: string, options: CustomEventInit = {}) {\n let mergedOptions = Object.assign({}, {bubbles: true, cancelable: true, detail: {target: element}}, options);\n if (!!mergedOptions.detail.target) {\n mergedOptions.detail.target = element;\n }\n let event = new CustomEvent(eventName, mergedOptions);\n element.dispatchEvent(event);\n }\n\n log(functionName: string, args: {} = {}): void {\n // @ts-ignore\n if (!this.application.debug) {\n return;\n }\n let logger = console;\n logger.groupCollapsed(`%c${this.identifier} %c#${functionName}`, \"color: #3B82F6\", \"color: unset\");\n logger.log({\n element: this.element,\n ...args,\n });\n logger.groupEnd();\n }\n\n}\n\nfunction logProperty(prop: string): boolean {\n switch (prop) {\n case \"application\":\n case \"el\":\n case \"element\":\n case \"constructor\":\n case \"initialize\":\n case \"log\":\n case \"dispatch\":\n case \"data\":\n case \"valueDescriptorMap\":\n case \"identifier\":\n return false;\n }\n\n if (/^_.*?$/.test(prop)) {\n return false;\n }\n if (/^.*?Target(s)?$/.test(prop)) {\n return false;\n }\n if (/^.*?Value$/.test(prop)) {\n return false;\n }\n if (/^.*?ValueChanged$/.test(prop)) {\n return false;\n }\n if (/^.*?Class$/.test(prop)) {\n return false;\n }\n\n return true;\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class AppearanceController extends BaseController {\r\n\r\n initialize() {\r\n this._handleVisibility = this._handleVisibility.bind(this);\r\n }\r\n\r\n connect() {\r\n window.addEventListener(\"focus\", this._handleVisibility);\r\n window.addEventListener(\"blur\", this._handleVisibility);\r\n document.addEventListener(\"visibilitychange\", this._handleVisibility);\r\n this._handleVisibility();\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"focus\", this._handleVisibility);\r\n window.removeEventListener(\"blur\", this._handleVisibility);\r\n document.removeEventListener(\"visibilitychange\", this._handleVisibility);\r\n }\r\n\r\n appear() {\r\n this.dispatch(this.el, \"appearance:appear\");\r\n }\r\n\r\n away() {\r\n this.dispatch(this.el, \"appearance:away\");\r\n }\r\n\r\n _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\n\nexport class AsyncBlockController extends BaseController {\n static targets = [\"replace\"];\n static values = {endpoint: String, errorMessage: String, selector: String};\n\n declare readonly replaceTarget: HTMLElement;\n declare readonly hasReplaceTarget: boolean;\n declare readonly endpointValue: string;\n\n declare readonly hasSelectorValue: boolean;\n declare readonly selectorValue: string;\n\n declare readonly hasErrorMessageValue: boolean;\n declare readonly errorMessageValue: string;\n\n get _errorMessage(): string {\n return this.hasErrorMessageValue ? this.errorMessageValue : \"This content failed to load\";\n }\n\n // This is a simple controller to load a block of content when the page loads.\n // It should be used to give a quick initial response before calling out to an\n // an AJAX endpoint to do some expensive work.\n connect() {\n this.loadContent();\n }\n\n loadContent() {\n let self = this;\n let el = this.hasReplaceTarget ? this.replaceTarget : this.el;\n fetch(this.endpointValue)\n .then((response) => response.text())\n .then((html) => {\n let newEl = document.createElement(\"div\");\n newEl.innerHTML = html;\n if (this.hasSelectorValue) {\n let selectedContent = newEl.querySelectorAll(this.selectorValue);\n el.replaceWith(...selectedContent);\n } else {\n el.replaceWith(...newEl.children);\n }\n // Trigger event to show block has loaded\n self.dispatch(el, \"ajax:success\");\n })\n .catch(err => {\n el.replaceWith(this._errorMessage);\n self.dispatch(el, \"ajax:error\");\n })\n .finally(() => {\n self.dispatch(el, \"ajax:complete\");\n });\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class AutoSubmitFormController extends BaseController {\n\n initialize() {\n this.handler = this.handler.bind(this);\n }\n\n connect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.handler));\n }\n\n disconnect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.handler));\n }\n\n private handler(e: Event) {\n // Trigger synthetic \"submit\" event on form\n this.dispatch((this.el), \"submit\");\n }\n}\n","export const method = (controller, methodName) => {\n const method = controller[methodName];\n if (typeof method == 'function') {\n return method;\n }\n else {\n return (...args) => { };\n }\n};\nexport const composeEventName = (name, controller, eventPrefix) => {\n let composedName = name;\n if (eventPrefix === true) {\n composedName = `${controller.identifier}:${name}`;\n }\n else if (typeof eventPrefix === 'string') {\n composedName = `${eventPrefix}:${name}`;\n }\n return composedName;\n};\nexport const extendedEvent = (type, event, detail) => {\n const { bubbles, cancelable, composed } = event || { bubbles: true, cancelable: true, composed: true };\n if (event) {\n Object.assign(detail, { originalEvent: event });\n }\n const customEvent = new CustomEvent(type, {\n bubbles,\n cancelable,\n composed,\n detail,\n });\n return customEvent;\n};\nexport function isElementInViewport(el) {\n const rect = el.getBoundingClientRect();\n const windowHeight = (window.innerHeight || document.documentElement.clientHeight);\n const windowWidth = (window.innerWidth || document.documentElement.clientWidth);\n const vertInView = (rect.top <= windowHeight) && ((rect.top + rect.height) >= 0);\n const horInView = (rect.left <= windowWidth) && ((rect.left + rect.width) >= 0);\n return (vertInView && horInView);\n}\n//# sourceMappingURL=index.js.map","import { method, extendedEvent, composeEventName } from '../support/index';\nconst defaultOptions = {\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useIntersection = (controller, options = {}) => {\n const { dispatchEvent, eventPrefix } = Object.assign({}, defaultOptions, options);\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n const callback = (entries) => {\n const [entry] = entries;\n if (entry.isIntersecting) {\n dispatchAppear(entry);\n }\n else if (controller.isVisible) {\n dispatchDisappear(entry);\n }\n };\n const dispatchAppear = (entry) => {\n controller.isVisible = true;\n method(controller, 'appear').call(controller, entry);\n // emit a custom \"appear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('appear', controller, eventPrefix);\n const appearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(appearEvent);\n }\n };\n const dispatchDisappear = (entry) => {\n controller.isVisible = false;\n method(controller, 'disappear').call(controller, entry);\n // emit a custom \"disappear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('disappear', controller, eventPrefix);\n const disappearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(disappearEvent);\n }\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observer = new IntersectionObserver(callback, options);\n const observe = () => {\n observer.observe(targetElement);\n };\n const unobserve = () => {\n observer.unobserve(targetElement);\n };\n Object.assign(controller, {\n isVisible: false,\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-intersection.js.map","import { composeEventName, extendedEvent, isElementInViewport } from '../support/index';\nconst defaultOptions = {\n events: ['click', 'touchend'],\n onlyVisible: true,\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useClickOutside = (controller, options = {}) => {\n const { onlyVisible, dispatchEvent, events, eventPrefix } = Object.assign({}, defaultOptions, options);\n const onEvent = (event) => {\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n if (targetElement.contains(event.target) || (!isElementInViewport(targetElement) && onlyVisible)) {\n return;\n }\n // call the clickOutside method of the Stimulus controller\n if (controller.clickOutside) {\n controller.clickOutside(event);\n }\n // emit a custom event\n if (dispatchEvent) {\n const eventName = composeEventName('click:outside', controller, eventPrefix);\n const clickOutsideEvent = extendedEvent(eventName, event, { controller });\n targetElement.dispatchEvent(clickOutsideEvent);\n }\n };\n const observe = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.addEventListener(event, onEvent, false);\n });\n };\n const unobserve = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.removeEventListener(event, onEvent, false);\n });\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-click-outside.js.map","const defaultOptions = {\n debug: false,\n logger: console\n};\nexport class StimulusUse {\n constructor(controller, options = {}) {\n var _a, _b, _c;\n this.log = (functionName, args) => {\n if (!this.debug)\n return;\n this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${functionName}`, 'color: #3B82F6', 'color: unset');\n this.logger.log(Object.assign({ controllerId: this.controllerId }, args));\n this.logger.groupEnd();\n };\n this.debug = (_b = (_a = options === null || options === void 0 ? void 0 : options.debug) !== null && _a !== void 0 ? _a : controller.application.stimulusUseDebug) !== null && _b !== void 0 ? _b : defaultOptions.debug;\n this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : defaultOptions.logger;\n this.controller = controller;\n this.controllerId = controller.element.id || controller.element.dataset.id;\n // make copies of lifecycle functions\n this.controllerInitialize = controller.initialize.bind(controller);\n this.controllerConnect = controller.connect.bind(controller);\n this.controllerDisconnect = controller.disconnect.bind(controller);\n }\n}\n//# sourceMappingURL=stimulus_use.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseHover extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n this.targetElement.addEventListener('mouseenter', this.onEnter);\n this.targetElement.addEventListener('mouseleave', this.onLeave);\n };\n this.unobserve = () => {\n this.targetElement.removeEventListener('mouseenter', this.onEnter);\n this.targetElement.removeEventListener('mouseleave', this.onLeave);\n };\n this.onEnter = () => {\n method(this.controller, 'mouseEnter').call(this.controller);\n this.log('mouseEnter', { hover: true });\n };\n this.onLeave = () => {\n method(this.controller, 'mouseLeave').call(this.controller);\n this.log('mouseLeave', { hover: false });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useHover = (controller, options = {}) => {\n const observer = new UseHover(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-hover.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseMutation extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n try {\n this.observer.observe(this.targetElement, this.options);\n }\n catch (error) {\n this.controller.application.handleError(error, \"At a minimum, one of childList, attributes, and/or characterData must be true\", {});\n }\n };\n this.unobserve = () => {\n this.observer.disconnect();\n };\n this.mutation = (entries) => {\n method(this.controller, 'mutate').call(this.controller, entries);\n this.log('mutate', { entries });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.options = options;\n this.observer = new MutationObserver(this.mutation);\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useMutation = (controller, options = {}) => {\n const observer = new UseMutation(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-mutation.js.map","import { method } from '../support/index';\nexport const useWindowResize = (controller) => {\n const callback = (event) => {\n const { innerWidth, innerHeight } = window;\n const payload = {\n height: innerHeight || Infinity,\n width: innerWidth || Infinity,\n event\n };\n method(controller, 'windowResize').call(controller, payload);\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observe = () => {\n window.addEventListener('resize', callback);\n callback();\n };\n const unobserve = () => {\n window.removeEventListener('resize', callback);\n };\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-window-resize.js.map","import { Controller } from 'stimulus';\nclass DebounceController extends Controller {\n}\nDebounceController.debounces = [];\nconst defaultWait = 200;\nconst debounce = (fn, wait = defaultWait) => {\n let timeoutId = null;\n return function () {\n const args = arguments;\n const context = this;\n const callback = () => fn.apply(context, args);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(callback, wait);\n };\n};\nexport const useDebounce = (controller, options) => {\n var _a;\n const constructor = controller.constructor;\n (_a = constructor.debounces) === null || _a === void 0 ? void 0 : _a.forEach((func) => {\n if (typeof func === \"string\") {\n controller[func] = debounce(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n }\n if (typeof func === \"object\") {\n const { name, wait } = func;\n if (!name)\n return;\n controller[name] = debounce(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n }\n });\n};\n//# sourceMappingURL=use-debounce.js.map","import {useWindowResize} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class AutosizeController extends BaseController {\n\n initialize() {\n this._handler = this._handler.bind(this);\n }\n\n connect() {\n let target = this.el as HTMLTextAreaElement;\n target.style.resize = \"none\";\n target.style.boxSizing = \"border-box\";\n target.addEventListener(\"input\", this._handler);\n target.addEventListener(\"focus\", this._handler);\n useWindowResize(this);\n requestAnimationFrame(this._handler);\n }\n\n windowResize() {\n this._handler();\n }\n\n private _handler() {\n this.autosize(this.el as HTMLTextAreaElement);\n };\n\n private autosize(element: HTMLTextAreaElement) {\n let offset = element.offsetHeight - element.clientHeight;\n element.style.height = \"auto\";\n element.style.height = element.scrollHeight + offset + \"px\";\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class CharCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this._updateCharCount = this._updateCharCount.bind(this);\n }\n\n connect() {\n this._updateCharCount();\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this._updateCharCount);\n }\n\n private _updateCharCount() {\n let charCount = this.inputTarget.value.length;\n this.outputTarget.innerText = charCount.toString();\n if (this.hasErrorClass) {\n if (this._isValidCount(charCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n private _isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n","import {BaseController} from './base_controller';\n\nexport class CheckboxSelectAllController extends BaseController {\n static targets = ['selectAll', 'checkbox'];\n\n declare readonly hasSelectAllTarget: boolean;\n declare readonly selectAllTarget: HTMLInputElement;\n declare readonly checkboxTargets: HTMLInputElement[];\n\n private get checked() {\n return this.checkboxTargets.filter(checkbox => checkbox.checked);\n }\n\n private get unchecked() {\n return this.checkboxTargets.filter(checkbox => !checkbox.checked);\n }\n\n initialize() {\n this.toggle = this.toggle.bind(this);\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.addEventListener('change', this.toggle);\n this.checkboxTargets.forEach(checkbox => checkbox.addEventListener('change', this.refresh));\n this.refresh();\n });\n }\n\n disconnect() {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.removeEventListener('change', this.toggle);\n this.checkboxTargets.forEach((checkbox) => checkbox.removeEventListener('change', this.refresh));\n }\n\n private toggle(event: Event) {\n event.preventDefault();\n let target = event.target as HTMLInputElement;\n this.checkboxTargets.forEach((checkbox) => checkbox.checked = target.checked);\n }\n\n private refresh() {\n const checkboxesCount = this.checkboxTargets.length;\n const checkboxesCheckedCount = this.checked.length;\n\n this.selectAllTarget.checked = checkboxesCheckedCount > 0;\n this.selectAllTarget.indeterminate = checkboxesCheckedCount > 0 && checkboxesCheckedCount < checkboxesCount;\n }\n}","import {BaseController} from \"./base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"button\", \"copy\", \"fallback\"];\r\n static values = {removeUnused: Boolean};\r\n\r\n declare readonly sourceTarget: HTMLElement;\r\n declare readonly copyTarget: HTMLElement;\r\n declare readonly hasCopyTarget: boolean;\r\n declare readonly fallbackTarget: HTMLElement;\r\n declare readonly hasFallbackTarget: boolean;\r\n\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n declare readonly removeUnusedValue: boolean;\r\n\r\n supported = false;\r\n\r\n connect() {\r\n this.supported = document.queryCommandSupported(\"copy\");\r\n\r\n if (this.hasRemoveUnusedValue && this.removeUnusedValue) {\r\n if (this.supported && this.hasFallbackTarget) {\r\n this.fallbackTarget.remove();\r\n } else if (this.hasCopyTarget) {\r\n this.copyTarget.remove();\r\n }\r\n }\r\n }\r\n\r\n select(event: MouseEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n }\r\n\r\n copy(event: ClipboardEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n if (this.supported) {\r\n document.execCommand(\"copy\");\r\n }\r\n }\r\n}\r\n","export function isHTMLLinkElement(element: Element): element is HTMLLinkElement {\n return element.nodeName == \"LINK\";\n}\n\nexport function isHTMLAnchorElement(element: Element): element is HTMLAnchorElement {\n return element.nodeName == \"A\";\n}\n\nexport function isHTMLFormElement(element: Element): element is HTMLFormElement {\n return element.nodeName == \"FORM\";\n}\n\nexport function isHTMLInputElement(element: Element): element is HTMLInputElement {\n return element.nodeName == \"INPUT\";\n}\n\nexport function isHTMLButtonElement(element: Element): element is HTMLButtonElement {\n return element.nodeName == \"BUTTON\";\n}\n\nexport function isHTMLSelectElement(element: Element): element is HTMLSelectElement {\n return element.nodeName == \"SELECT\";\n}\n\nexport function isHTMLImageElement(element: Element): element is HTMLImageElement {\n return element.nodeName == \"IMG\";\n}\n\nexport function isElementCheckable(element: Element): element is HTMLInputElement & { checked: boolean } {\n return isHTMLInputElement(element) && (element.type === \"radio\" || element.type === \"checkbox\");\n}\n","import {BaseController} from './base_controller';\nimport {isHTMLFormElement, isHTMLAnchorElement} from \"./utilities/elements\";\n\nexport class ConfirmController extends BaseController {\n\n static values = {\n message: String,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get message(): string {\n return this.hasMessageValue ? this.messageValue : 'Are you sure?';\n }\n\n initialize() {\n this.confirm = this.confirm.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n let element = this.el;\n if (isHTMLFormElement(element)) {\n element.addEventListener(\"submit\", this.confirm);\n } else if (isHTMLAnchorElement(element)) {\n element.addEventListener(\"click\", this.confirm);\n } else {\n throw new Error(\"Can't handle confirmation on attached element\");\n }\n });\n }\n\n confirm(event: Event) {\n if (!(window.confirm(this.message))) {\n event.preventDefault();\n this.dispatch(this.el, \"confirm:cancelled\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class ConfirmNavigationController extends BaseController {\n\n static values = {_message: String};\n\n declare readonly _messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get _message(): string {\n return this.hasMessageValue ? this._messageValue : \"Do you want to leave this page? Changes you made may not be saved\";\n }\n\n initialize() {\n this.handlePopstate = this.handlePopstate.bind(this);\n this.handleTurboNavigation = this.handleTurboNavigation.bind(this);\n }\n\n connect() {\n window.onbeforeunload = () => this._message;\n window.addEventListener(\"popstate\", this.handlePopstate);\n window.addEventListener(\"submit\", () => {\n window.removeEventListener(\"popstate\", this.handlePopstate);\n window.onbeforeunload = null;\n });\n window.addEventListener(\"turbolinks:before-visit\", this.handleTurboNavigation);\n window.addEventListener(\"turbo:before-visit\", this.handleTurboNavigation);\n }\n\n handlePopstate(_event: PopStateEvent) {\n return false;\n }\n\n handleTurboNavigation(event: Event) {\n if (!confirm(this._message)) {\n event.preventDefault();\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DebugController extends BaseController {\n\n static targets = [\"test\"];\n declare testTargets: HTMLElement[];\n\n connect() {\n console.log(\"Debug Controller\", this, this.testTargets);\n }\n}\n","import {BaseController} from \"./base_controller\";\nimport {isElementCheckable, isHTMLSelectElement} from \"./utilities/elements\";\n\nexport class DetectDirtyController extends BaseController {\n\n loadValue: null | string | boolean = null;\n\n initialize() {\n this.checkDirty = this.checkDirty.bind(this);\n }\n\n connect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n this.loadValue = element.checked;\n } else {\n this.loadValue = element.value;\n }\n this.checkDirty();\n element.addEventListener(\"input\", this.checkDirty);\n element.addEventListener(\"change\", this.checkDirty);\n }\n\n disconnect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n element.removeEventListener(\"input\", this.checkDirty);\n element.removeEventListener(\"change\", this.checkDirty);\n }\n\n restore() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n element.checked = element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n options.forEach((option) => {\n option.selected = option.value == this.loadValue;\n });\n } else {\n options.forEach((option) => option.selected = option.defaultSelected);\n }\n Array.from(element.options).forEach(option => option.selected = option.defaultSelected);\n } else {\n element.value = element.defaultValue;\n }\n }\n\n private checkDirty(_event?: Event) {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\n let dirty: boolean;\n if (isElementCheckable(element)) {\n dirty = element.checked != element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n dirty = element.value != this.loadValue;\n } else {\n dirty = options.some((option) => option.selected != option.defaultSelected);\n }\n } else {\n dirty = element.value != element.defaultValue;\n }\n\n if (dirty) {\n element.setAttribute(\"data-dirty\", \"true\");\n } else {\n element.removeAttribute(\"data-dirty\");\n }\n }\n\n}\n\nexport function isDirty(element: HTMLElement) {\n return element.hasAttribute(\"data-dirty\");\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class DisableInputsController extends BaseController {\r\n\r\n static targets = [\"disabler\", \"disable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasDisablerTarget: boolean;\r\n declare readonly disablerTarget: HTMLInputElement;\r\n declare readonly disableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasDisablerTarget && this.disablerTarget.checked) {\r\n this.disableInputs();\r\n } else {\r\n this.enableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.disableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.disableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from './base_controller';\nimport {isHTMLAnchorElement, isHTMLButtonElement, isHTMLInputElement} from \"./utilities/elements\";\n\nexport class DisableWithController extends BaseController {\n\n static values = {\n message: String,\n timeout: Number,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n declare readonly timeoutValue: number;\n declare readonly hasTimeoutValue: boolean;\n\n _cacheText?: string;\n _timeoutHandle?: ReturnType;\n\n get _message(): string {\n return this.hasMessageValue ? this.messageValue : 'Submitting...';\n }\n\n get _timeout(): number {\n return this.hasTimeoutValue ? this.timeoutValue : 1000;\n }\n\n initialize() {\n this.enable = this.enable.bind(this);\n this.disable = this.disable.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n this.el.addEventListener(\"click\", this.disable);\n });\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n disable(event?: Event) {\n let element = this.el;\n\n if (this._isDisabled(element)) {\n event?.preventDefault();\n event?.stopImmediatePropagation();\n } else {\n this._cacheText = this._getElText(element);\n this._setElText(element, this._message);\n this._disable(element);\n setTimeout(this.enable, this._timeout);\n }\n }\n\n enable(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n if (this._isDisabled(element)) {\n this._setElText(element, this._cacheText!);\n this._enable(element);\n }\n }\n\n _isDisabled(el: HTMLElement): boolean {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n return el.disabled;\n } else {\n return el.dataset.disabled == \"true\";\n }\n }\n\n _getElText(el: HTMLElement): string {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n return el.value;\n } else {\n return el.innerText;\n }\n }\n\n _setElText(el: HTMLElement, str: string) {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n el.value = str;\n } else if (isHTMLButtonElement(el) || isHTMLAnchorElement(el)) {\n el.innerText = str;\n }\n }\n\n _disable(el: HTMLElement) {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n el.disabled = true;\n } else {\n el.dataset.disabled = \"true\";\n }\n }\n\n _enable(el: HTMLElement) {\n if (isHTMLInputElement(el) && el.type == \"submit\" || isHTMLButtonElement(el)) {\n el.disabled = false;\n } else {\n el.dataset.disabled = undefined;\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DismissableController extends BaseController {\n\n dismiss() {\n this.el.remove();\n }\n\n}\n","import {useMutation} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class EmptyDomController extends BaseController {\n\n static classes = [\"empty\", \"notEmpty\"];\n static values = {scopeSelector: String};\n\n declare hasEmptyClass: boolean;\n declare emptyClass: string;\n declare hasNotEmptyClass: boolean;\n declare notEmptyClass: string;\n\n declare hasScopeSelectorValue: boolean;\n declare scopeSelectorValue: string;\n\n get emptyClasses(): string[] {\n return this.emptyClass.split(\" \");\n }\n\n get notEmptyClasses(): string[] {\n return this.notEmptyClass.split(\" \");\n }\n\n get children(): Element[] {\n let element = this.el;\n if (this.hasScopeSelectorValue) {\n return Array.from(element.querySelectorAll(this.scopeSelectorValue));\n } else {\n return Array.from(element.children);\n }\n }\n\n connect() {\n useMutation(this, {element: this.el, childList: true});\n this.checkEmpty();\n }\n\n mutate(entries: MutationRecord[]) {\n this.checkEmpty();\n }\n\n checkEmpty() {\n let element = this.el;\n let children = this.children;\n if (children.length === 0) {\n this._removeNotEmptyClasses();\n this._addEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:empty\");\n } else {\n this._addNotEmptyClasses();\n this._removeEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:not-empty\", {detail: {count: children.length}});\n }\n }\n\n private _removeEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.remove(...this.emptyClasses);\n }\n }\n\n private _addNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.add(...this.notEmptyClasses);\n }\n }\n\n private _addEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.add(...this.emptyClasses);\n }\n }\n\n private _removeNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.remove(...this.notEmptyClasses);\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class EnableInputsController extends BaseController {\r\n\r\n static targets = [\"enabler\", \"enable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasEnablerTarget: boolean;\r\n declare readonly enablerTarget: HTMLInputElement;\r\n declare readonly enableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasEnablerTarget && this.enablerTarget.checked) {\r\n this.enableInputs();\r\n } else {\r\n this.disableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.enableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.enableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class FallbackImageController extends BaseController {\r\n\r\n static values = {placeholder: String};\r\n\r\n declare readonly placeholderValue: string;\r\n declare readonly hasPlaceholderValue: boolean;\r\n\r\n connect() {\r\n let element = this.el as HTMLImageElement;\r\n\r\n element.onerror = () => {\r\n if (this.hasPlaceholderValue) {\r\n element.src = this.placeholderValue;\r\n } else {\r\n element.style.display = \"none\";\r\n }\r\n };\r\n }\r\n\r\n}\r\n","import {BaseController} from './base_controller';\r\nimport {isHTMLFormElement, isHTMLInputElement} from \"./utilities/elements\";\r\n\r\ninterface FormSavePayload {\r\n [idx: string]: {\r\n [idx: string]: string | boolean\r\n }\r\n}\r\n\r\nexport class FormSaveController extends BaseController {\r\n\r\n static values = {\r\n id: String,\r\n restoreOnLoad: Boolean,\r\n clearOnSubmit: Boolean,\r\n };\r\n\r\n declare readonly idValue: string;\r\n declare readonly hasIdValue: boolean;\r\n declare readonly restoreOnLoadValue: boolean;\r\n declare readonly hasRestoreOnLoadValue: boolean;\r\n declare readonly clearOnSubmitValue: boolean;\r\n declare readonly hasClearOnSubmitValue: boolean;\r\n\r\n get formID() {\r\n if (this.hasIdValue) {\r\n return this.idValue;\r\n }\r\n let elementID = (this.el as HTMLFormElement).id;\r\n\r\n if (elementID !== \"\") {\r\n return elementID;\r\n } else {\r\n throw new Error(`No ID value to uniquely identify this form. Please either specify data-${this.identifier}-id-value or give this form an 'id' attribute. `);\r\n }\r\n }\r\n\r\n get formIdentifier() {\r\n const url = location.href;\r\n return `${url} ${this.formID}`;\r\n }\r\n\r\n get formElements() {\r\n return (this.el as HTMLFormElement).elements;\r\n }\r\n\r\n get formData(): FormSavePayload {\r\n let data: FormSavePayload = {[this.formIdentifier]: {}};\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name.length > 0) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n data[this.formIdentifier][el.name] = el.checked;\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.checked) {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n } else {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n get restoreOnLoad() {\r\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\r\n }\r\n\r\n get clearOnSubmit() {\r\n return this.hasClearOnSubmitValue ? this.clearOnSubmitValue : true;\r\n }\r\n\r\n initialize() {\r\n this._clear = this._clear.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n let element = this.el;\r\n if (!isHTMLFormElement(element)) {\r\n throw new Error('Expected controller to be mounted on a form element.');\r\n }\r\n\r\n if (this.restoreOnLoad) {\r\n this.restore();\r\n }\r\n if (this.clearOnSubmit) {\r\n this.el.addEventListener('submit', this._clear);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.clearOnSubmit) {\r\n this.el.removeEventListener('submit', this._clear);\r\n }\r\n }\r\n\r\n _clear() {\r\n localStorage.removeItem(this.formIdentifier);\r\n this.dispatch(this.el, `form-save:cleared`);\r\n }\r\n\r\n clear(event?: Event) {\r\n event?.preventDefault();\r\n this._clear();\r\n }\r\n\r\n save(event: Event) {\r\n event.preventDefault();\r\n let data = this.formData;\r\n localStorage.setItem(this.formIdentifier, JSON.stringify(data[this.formIdentifier]));\r\n this.dispatch(this.el, `form-save:save:success`);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n if (localStorage.getItem(this.formIdentifier)) {\r\n const savedData = JSON.parse(localStorage.getItem(this.formIdentifier)!); // get and parse the saved data from localStorage\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name in savedData) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n el.checked = savedData[el.name];\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.value == savedData[el.name]) {\r\n el.checked = true;\r\n }\r\n } else {\r\n el.value = savedData[el.name];\r\n }\r\n }\r\n }\r\n this.dispatch(this.el, `form-save:restore:success`);\r\n } else {\r\n this.dispatch(this.el, `form-save:restore:empty`);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {useIntersection} from \"stimulus-use\";\n\nexport class IntersectionController extends BaseController {\n\n static values = {threshold: String};\n\n declare readonly isVisible: boolean;\n declare readonly thresholdValue: string;\n declare readonly hasThresholdValue: boolean;\n\n get threshold(): number[] {\n if (this.hasThresholdValue) {\n return this.thresholdValue.split(',').map(val => Number.parseFloat(val.trim())).filter(val => val >= 0 && val <= 1);\n } else {\n return [0, 1];\n }\n }\n\n connect() {\n useIntersection(this, {\n threshold: this.threshold,\n element: this.el,\n });\n }\n\n appear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:appear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n disappear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:disappear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n}\n","import {useIntersection} from \"stimulus-use\";\nimport {AsyncBlockController} from \"./async_block_controller\";\n\nexport class LazyBlockController extends AsyncBlockController {\n\n declare observe: () => void;\n declare unobserve: () => void;\n declare isVisible: boolean;\n declare disappear: () => void;\n\n connect() {\n let element = this.el;\n\n if (\"IntersectionObserver\" in window) {\n [this.observe, this.unobserve] = useIntersection(this, {element, threshold: 0.3});\n } else {\n // Client doesn't support intersection observer, fallback to pre-loading\n this.loadContent();\n }\n }\n\n appear(entry: IntersectionObserverEntry) {\n if (entry.target === this.el && entry.isIntersecting) {\n this.loadContent();\n if (this.unobserve) {\n this.unobserve();\n }\n }\n }\n\n}\n","const smoothSupported = \"scrollBehavior\" in document.documentElement.style;\r\nlet smoothPolyfilled: boolean;\r\n\r\nexport async function scrollToElement(element: Element, {behavior = \"smooth\", block = \"start\", inline = \"nearest\"}: ScrollIntoViewOptions = {}) {\r\n if (behavior == \"smooth\" && !smoothSupported) {\r\n await polyfillSmooth();\r\n }\r\n element.scrollIntoView({behavior, block, inline});\r\n}\r\n\r\nasync function polyfillSmooth() {\r\n const {polyfill} = await import(/* webpackChunkName: \"smoothscroll-polyfill\" */ \"smoothscroll-polyfill\");\r\n if (smoothPolyfilled) {\r\n return;\r\n }\r\n smoothPolyfilled = true;\r\n polyfill();\r\n}\r\n\r\nexport function getScrollParent(node: HTMLElement | null): HTMLElement | null {\r\n if (!node) {\r\n return null;\r\n }\r\n const overflowY = getComputedStyle(node).overflowY;\r\n const isScrollable = overflowY !== \"visible\" && overflowY !== \"hidden\";\r\n\r\n if (isScrollable && node.scrollHeight >= node.clientHeight) {\r\n return node;\r\n }\r\n\r\n return getScrollParent(node.parentElement) || document.body;\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\nimport dialogPolyfill from \"dialog-polyfill\";\r\n\r\nexport class LightboxImageController extends BaseController {\r\n\r\n static values = {\r\n src: String,\r\n srcSet: String,\r\n sizes: String,\r\n };\r\n static classes = [\"modal\", \"image\"];\r\n\r\n declare readonly hasModalClass: boolean;\r\n declare readonly modalClass: string;\r\n declare readonly hasImageClass: boolean;\r\n declare readonly imageClass: string;\r\n declare readonly hasSrcValue: boolean;\r\n declare readonly srcValue: string;\r\n declare readonly hasSrcSetValue: boolean;\r\n declare readonly srcSetValue: string;\r\n declare readonly hasSizesValue: boolean;\r\n declare readonly sizesValue: string;\r\n _dialog: HTMLDialogElement | null = null;\r\n\r\n get src(): string {\r\n return this.hasSrcValue ? this.srcValue : (this.el as HTMLImageElement).src;\r\n }\r\n\r\n get srcSet(): string {\r\n return this.hasSrcSetValue ? this.srcSetValue : (this.el as HTMLImageElement).srcset;\r\n }\r\n\r\n get sizes(): string {\r\n return this.hasSizesValue ? this.sizesValue : (this.el as HTMLImageElement).sizes;\r\n }\r\n\r\n get modalClassName() {\r\n return this.hasModalClass ? this.modalClass : \"image-lightbox-dialog\";\r\n }\r\n\r\n get imageClassName() {\r\n return this.hasImageClass ? this.imageClass : \"image-lightbox-image\";\r\n }\r\n\r\n initialize() {\r\n this.open = this.open.bind(this);\r\n this.close = this.close.bind(this);\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n open() {\r\n let element = this.el as HTMLImageElement;\r\n if (this._dialog) {\r\n return;\r\n }\r\n this._dialog = document.createElement(\"dialog\");\r\n\r\n let image = document.createElement(\"img\") as HTMLImageElement;\r\n image.className = this.imageClassName;\r\n image.src = this.src;\r\n image.srcset = this.srcSet;\r\n image.sizes = this.sizes;\r\n this._dialog.appendChild(image);\r\n\r\n element.insertAdjacentElement(\"afterend\", this._dialog);\r\n dialogPolyfill.registerDialog(this._dialog);\r\n this._dialog.className = this.modalClassName;\r\n this._dialog.showModal();\r\n scrollToElement(this._dialog, {behavior: \"smooth\", block: \"end\"}).catch(() => this._dialog!.scrollIntoView(false));\r\n this._dialog.addEventListener(\"click\", this.close);\r\n this._dialog.addEventListener(\"cancel\", this.close);\r\n this._dialog.addEventListener(\"close\", this.close);\r\n }\r\n\r\n close() {\r\n if (this._dialog) {\r\n this._dialog.close();\r\n this._dialog.remove();\r\n this._dialog = null;\r\n scrollToElement(this.el, {behavior: \"smooth\", block: \"end\"}).catch(() => this.el.scrollIntoView(false));\r\n }\r\n }\r\n\r\n} ","import {BaseController} from \"./base_controller\";\n\nexport class LimitedSelectionCheckboxesController extends BaseController {\n\n static targets = [\"input\", \"error\"];\n static values = {max: Number, message: String};\n\n declare readonly hasErrorTarget: boolean;\n declare readonly errorTarget: HTMLElement;\n declare readonly inputTargets: HTMLInputElement[];\n declare readonly maxValue: number;\n declare readonly messageValue: string;\n\n initialize() {\n this.handleInputs = this.handleInputs.bind(this);\n }\n\n connect() {\n this.inputTargets.forEach((el) => el.addEventListener(\"change\", this.handleInputs));\n }\n\n disconnect() {\n this.inputTargets.forEach((el) => el.removeEventListener(\"change\", this.handleInputs));\n }\n\n handleInputs(event: Event) {\n let tickedInputs = this.inputTargets.reduce((previousValue, el) => el.checked ? previousValue + 1 : previousValue, 0);\n let target = event.target as HTMLInputElement;\n if (tickedInputs > this.maxValue) {\n event.preventDefault();\n target.checked = false;\n this.dispatch(target, \"change\");\n this.dispatch(target, \"limited-selection:too-many\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = this.messageValue;\n }\n } else {\n this.dispatch(target, \"limited-selection:selection\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = \"\";\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class NestedFormController extends BaseController {\n static targets = ['target', 'template'];\n static values = {\n insertMode: String,\n wrapperClass: String,\n };\n\n declare readonly targetTarget: HTMLElement;\n declare readonly templateTarget: HTMLTemplateElement | HTMLScriptElement;\n\n declare readonly wrapperClassValue: string;\n declare readonly hasWrapperSelectorValue: boolean;\n declare readonly insertModeValue: InsertPosition;\n declare readonly hasInsertModeValue: boolean;\n\n get wrapperClass() {\n return this.hasWrapperSelectorValue ? this.wrapperClassValue : 'nested-fields';\n }\n\n get insertMode(): InsertPosition {\n return this.hasInsertModeValue ? this.insertModeValue : 'beforeend';\n }\n\n connect() {\n this.checkStructure();\n }\n\n add(event?: Event) {\n event?.preventDefault();\n\n const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, this.generateID());\n this.targetTarget.insertAdjacentHTML(this.insertMode, content);\n }\n\n remove(event: Event) {\n event.preventDefault();\n const wrapper: HTMLElement | null = (event.target as HTMLElement).closest(`.${this.wrapperClass}`);\n if (wrapper == null) {\n throw new Error(`#remove was clicked from outside of a child record. Could not find an ancestor with class .${this.wrapperClass}`);\n }\n\n if (wrapper.dataset.newRecord === 'true') {\n wrapper.remove();\n } else {\n wrapper.style.display = 'none';\n let destroyInput = wrapper.querySelector(\"input[name*='_destroy']\") as HTMLInputElement | null;\n if (destroyInput == null) {\n throw new Error(`Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.`);\n }\n\n destroyInput.value = \"1\";\n }\n }\n\n generateID(): string {\n return new Date().getTime().toString() + Math.random().toString().slice(2);\n }\n\n private checkStructure() {\n let template = this.templateTarget.innerHTML;\n\n if (template.indexOf('NEW_RECORD')) {\n 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`\");\n }\n }\n}","import {BaseController} from \"./base_controller\";\n\nexport class PasswordConfirmController extends BaseController {\n\n static targets = [\"password\"];\n static classes = [\"error\"];\n\n declare readonly passwordTargets: HTMLInputElement[];\n\n declare readonly errorClass: string;\n declare readonly hasErrorClass: boolean;\n\n initialize() {\n this.checkPasswordsMatch = this.checkPasswordsMatch.bind(this);\n }\n\n connect() {\n this.passwordTargets.forEach((el) => el.addEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n disconnect() {\n this.passwordTargets.forEach((el) => el.removeEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n private allPasswordsMatch(): boolean {\n let values = new Set(this.passwordTargets.map(el => el.value)); // Create a unique set of the password values\n 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)\n }\n\n private checkPasswordsMatch() {\n let element = this.el;\n if (this.allPasswordsMatch()) {\n this.dispatch(element, \"password-confirm:match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.remove(this.errorClass));\n }\n } else {\n this.dispatch(element, \"password-confirm:no-match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.add(this.errorClass));\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class PasswordPeekController extends BaseController {\n\n static targets = [\"password\"];\n\n declare readonly passwordTarget: HTMLInputElement;\n\n peak(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"text\";\n }\n\n hide(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"password\";\n }\n\n toggle(event?: Event) {\n event?.preventDefault();\n if (this.passwordTarget.type === \"password\") {\n this.peak();\n } else {\n this.hide();\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class RemoteFormController extends BaseController {\r\n static targets = [];\r\n\r\n static values = {selector: String};\r\n\r\n declare readonly hasSelectorValue: boolean;\r\n declare readonly selectorValue: string;\r\n\r\n get selector(): string {\r\n return this.hasSelectorValue ? this.selectorValue : `[data-controller~=\"${this.identifier}\"]`;\r\n }\r\n\r\n replace(event: { detail: [Element, any, XMLHttpRequest] }) {\r\n const [data, status, xhr] = event.detail;\r\n if (data instanceof Node) {\r\n let new_element = data.querySelector(this.selector);\r\n\r\n if (new_element == null) {\r\n throw new Error(`expected new form DOM with [data-controller=\"${this.identifier}\"] to be present in returned payload`);\r\n }\r\n\r\n let parentNode = this.el.parentNode;\r\n if (parentNode == null) {\r\n throw new Error('expected form to have a DOM parent, could not execute replaceChild');\r\n }\r\n parentNode.replaceChild(new_element, this.el);\r\n } else {\r\n console.log('Unknown', data);\r\n }\r\n }\r\n}\r\n","import {useDebounce, useWindowResize} from \"stimulus-use\";\nimport {WindowResizePayload} from \"stimulus-use/dist/use-window-resize/use-window-resize\";\nimport {BaseController} from \"./base_controller\";\n\ninterface ResponsiveIframeMessage {\n name: string,\n height: number,\n}\n\nexport class ResponsiveIframeWrapperController extends BaseController {\n\n initialize() {\n this.messageReceived = this.messageReceived.bind(this);\n }\n\n connect() {\n window.addEventListener(\"message\", this.messageReceived);\n }\n\n disconnect() {\n window.removeEventListener(\"message\", this.messageReceived);\n }\n\n messageReceived(message: MessageEvent) {\n let data = message.data;\n if (data.hasOwnProperty(\"name\") && data.name === \"iframe-body\" && data.hasOwnProperty(\"height\")) {\n this.resize(data.height);\n }\n }\n\n resize(height: number) {\n (this.el as HTMLIFrameElement).style.height = `${height}px`;\n }\n\n}\n\nexport class ResponsiveIframeBodyController extends BaseController {\n\n static debounces = [\"postUpdate\"];\n\n declare observe: () => void;\n declare unobserve: () => void;\n\n connect() {\n // If this Window is inside a frame\n if (window.self !== window.top) {\n useWindowResize(this);\n useDebounce(this, {});\n this.postUpdate();\n } else {\n // Not an iframe\n }\n }\n\n windowResize(payload: WindowResizePayload) {\n this.postUpdate();\n };\n\n postUpdate() {\n let payload: ResponsiveIframeMessage = {name: \"iframe-body\", height: this.getHeight()};\n window.parent.postMessage(\n payload,\n \"*\",\n );\n }\n\n getHeight(): number {\n const body = document.body;\n const html = document.documentElement;\n\n // Get the largest height out of body and html's various height measurements\n return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n }\n\n}\n","import camelCase from \"camelcase\";\r\nimport {BaseController} from \"../base_controller\";\r\n\r\nexport class EphemeralController extends BaseController {\r\n\r\n _cleanupSelf() {\r\n this.cleanup(this.el);\r\n }\r\n\r\n cleanup(element: HTMLElement) {\r\n element.dataset.controller = element.dataset.controller?.replaceAll(new RegExp(`(\\s|^)${this.identifier}(\\s|$)`, \"g\"), \"\") || \"\";\r\n if (element.dataset.controller == \"\") {\r\n // If there are no controllers left, remove the attribute\r\n delete element.dataset.controller;\r\n }\r\n\r\n let substringIdentifierValueRegex = new RegExp(`(\\s|^)${this.identifier}\\\\..+?(\\s|$)`, \"g\");\r\n element.dataset.target = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-target`)];\r\n if (element.dataset.target == \"\") {\r\n // If there are no targets left, remove the attribute\r\n delete element.dataset.target;\r\n }\r\n\r\n element.dataset.action = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-action`)];\r\n if (element.dataset.action == \"\") {\r\n // If there are no actions left, remove the attribute\r\n delete element.dataset.action;\r\n }\r\n\r\n // @ts-ignore\r\n let values = this.constructor.values;\r\n if (values) {\r\n Object.keys(values).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-value`)]);\r\n }\r\n\r\n // @ts-ignore\r\n let classes = this.constructor.classes;\r\n if (classes) {\r\n Object.keys(classes).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-class`)]);\r\n }\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\n\r\nexport class ScrollIntoFocusController extends EphemeralController {\r\n\r\n static values = {\r\n behavior: String,\r\n block: String,\r\n inline: String,\r\n };\r\n\r\n declare behaviorValue: ScrollBehavior;\r\n declare hasBehaviorValue: boolean;\r\n declare blockValue: ScrollLogicalPosition;\r\n declare hasBlockValue: boolean;\r\n declare inlineValue: ScrollLogicalPosition;\r\n declare hasInlineValue: boolean;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Attempt smooth scrolling, with polyfill\r\n scrollToElement(\r\n this.el,\r\n {\r\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\r\n block: this.hasBlockValue ? this.blockValue : \"center\",\r\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\r\n },\r\n ).catch(() => this.el.scrollIntoView()); // Fallback to snap-scrolling\r\n this._cleanupSelf();\r\n });\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToBottomController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"end\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\nimport {scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToController extends BaseController {\n\n static values = {\n selector: String,\n behavior: String,\n block: String,\n inline: String,\n };\n\n declare selectorValue: string;\n declare behaviorValue: ScrollBehavior;\n declare hasBehaviorValue: boolean;\n declare blockValue: ScrollLogicalPosition;\n declare hasBlockValue: boolean;\n declare inlineValue: ScrollLogicalPosition;\n declare hasInlineValue: boolean;\n\n scroll() {\n let target = document.querySelector(this.selectorValue);\n if (!target) {\n console.warn(`Could not find target for '${this.selectorValue}'`);\n return;\n }\n\n scrollToElement(\n target!,\n {\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\n block: this.hasBlockValue ? this.blockValue : \"center\",\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\n },\n ).catch(() => target!.scrollIntoView()); // Fallback to snap-scrolling\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToTopController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"start\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class SelfDestructController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n timeout: null | ReturnType = null;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Only start countdown on first paint\r\n this.timeout = setTimeout(() => this.el.remove(), this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.timeout) {\r\n clearTimeout(this.timeout);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class StickyController extends BaseController {\r\n\r\n static classes = [\"stuck\"];\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare readonly hasStuckClass: boolean;\r\n declare readonly stuckClass: string;\r\n declare readonly hasModeValue: \"top\" | \"bottom\";\r\n declare readonly modeValue: \"top\" | \"bottom\";\r\n\r\n _magicElement: HTMLDivElement | null = null;\r\n\r\n get _mode(): \"top\" | \"bottom\" {\r\n return this.hasModeValue ? this.modeValue : \"top\";\r\n }\r\n\r\n createMagicElement() {\r\n // Magic element placed next to the sticky el that acts as an external border.\r\n // When the magic element is off the page, we know that the sticky el is \"stuck\"\r\n if (this._magicElement !== null) {\r\n return;\r\n }\r\n\r\n this._magicElement = document.createElement(\"div\");\r\n switch (this._mode) {\r\n case \"top\":\r\n this.el.insertAdjacentElement(\"beforebegin\", this._magicElement);\r\n break;\r\n case \"bottom\":\r\n this.el.insertAdjacentElement(\"afterend\", this._magicElement);\r\n break;\r\n }\r\n }\r\n\r\n connect() {\r\n let element = this.el;\r\n this.createMagicElement();\r\n\r\n const observer = new IntersectionObserver(entries => {\r\n entries.forEach(entry => {\r\n if (entry.target !== this._magicElement) {\r\n return;\r\n }\r\n if (entry.intersectionRatio === 0) {\r\n element.classList.add(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n } else if (entry.intersectionRatio === 1) {\r\n element.classList.remove(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n }\r\n });\r\n\r\n }, {\r\n threshold: [0, 1],\r\n });\r\n observer.observe(this._magicElement!);\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\n\nexport class TeleportController extends EphemeralController {\n\n static values = {target: String, insert: String, immediate: Boolean};\n\n declare readonly immediateValue: boolean;\n declare readonly hasImmediateValue: boolean;\n declare readonly targetValue: string;\n declare readonly hasInsertValue: boolean;\n declare readonly insertValue: InsertPosition | \"replaceOuter\" | \"replaceInner\" | \"prepend\" | \"append\";\n\n connect() {\n if (!this.hasInsertValue) {\n throw new Error(\"`insert` value was not specified\");\n }\n\n requestAnimationFrame(() => {\n if (this.hasImmediateValue && this.immediateValue) {\n this.execute();\n }\n });\n }\n\n execute(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n let destination = document.querySelector(this.targetValue);\n\n if (destination == null) {\n this.dispatch(element, \"teleport:error\");\n return;\n }\n\n let copy = element.cloneNode(true) as HTMLElement;\n this.cleanup(copy);\n\n switch (this.insertValue) {\n case \"beforebegin\":\n case \"beforeend\":\n case \"afterend\":\n case \"afterbegin\":\n destination.insertAdjacentHTML(this.insertValue, copy.outerHTML);\n break;\n case \"replaceOuter\":\n destination.outerHTML = copy.outerHTML;\n break;\n case \"replaceInner\":\n destination.innerHTML = copy.outerHTML;\n break;\n case \"prepend\":\n destination.insertAdjacentHTML(\"afterbegin\", copy.outerHTML);\n break;\n case \"append\":\n destination.insertAdjacentHTML(\"beforeend\", copy.outerHTML);\n break;\n default:\n throw new Error(\"`insert` value was not specified\");\n\n }\n element.remove();\n }\n\n}\n","import {useClickOutside, useHover} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport type ToggleClassMode = \"on\" | \"off\" | \"toggle\"\n\nexport class ToggleClassController extends BaseController {\n\n static targets = [\"toggle\"];\n static values = {\n class: String,\n mouseEnter: String,\n mouseLeave: String,\n clickAway: Boolean,\n initial: String,\n };\n\n declare readonly toggleTargets: HTMLElement[];\n\n declare readonly classValue: string;\n declare readonly hasClassValue: boolean;\n\n declare readonly mouseEnterValue: ToggleClassMode;\n declare readonly hasMouseEnterValue: boolean;\n\n declare readonly mouseLeaveValue: ToggleClassMode;\n declare readonly hasMouseLeaveValue: boolean;\n\n declare readonly clickAwayValue: boolean;\n declare readonly hasClickAwayValue: boolean;\n\n declare readonly initialValue: \"on\" | \"off\";\n declare readonly hasInitialValue: boolean;\n\n connect() {\n if (!this.hasClassValue) {\n throw new Error(\"data-toggle-class-class-value must not be empty\");\n }\n\n if (this.hasMouseEnterValue || this.hasMouseLeaveValue) {\n useHover(this);\n }\n\n if (this.hasClickAwayValue && this.clickAwayValue) {\n useClickOutside(this);\n }\n\n requestAnimationFrame(() => {\n if (this.hasInitialValue) {\n if (this.initialValue === \"on\") {\n this.toggleTargets.forEach((target) => this.elementOn(target));\n } else {\n this.toggleTargets.forEach((target) => this.elementOff(target));\n }\n }\n });\n }\n\n clickOutside() {\n this.toggleTargets.forEach((target) => {\n if (this.elementWasToggled(target)) {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n }\n });\n }\n\n mouseEnter() {\n if (this.hasMouseEnterValue) {\n switch (this.mouseEnterValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n mouseLeave() {\n if (this.hasMouseLeaveValue) {\n switch (this.mouseLeaveValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n on(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOn(target);\n });\n }\n\n off(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOff(target);\n });\n }\n\n toggle(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n });\n }\n\n private elementWasToggled(el: HTMLElement): boolean {\n return el.dataset.toggled == \"true\";\n }\n\n private elementToggleStatus(el: HTMLElement) {\n if (this.elementWasToggled(el)) {\n delete el.dataset.toggled;\n } else {\n el.dataset.toggled = \"true\";\n }\n }\n\n private elementToggle(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass));\n }\n\n private elementOn(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, true));\n }\n\n private elementOff(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, false));\n }\n\n}\n","export function isTurboFrame(element: HTMLElement): element is TurboFrame {\r\n return element.nodeName == \"TURBO-FRAME\";\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {isHTMLAnchorElement} from \"./utilities/elements\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\nexport class TurboFrameRCController extends BaseController {\n\n static values = {\n frameId: String,\n src: String,\n loadingMessage: String,\n };\n\n declare readonly frameIdValue: string;\n declare readonly srcValue: string;\n declare readonly hasSrcValue: boolean;\n declare readonly loadingMessageValue: string;\n declare readonly hasLoadingMessageValue: boolean;\n\n toggle(event?: Event) {\n event?.preventDefault();\n let frame = this._getFrame();\n let frameSrc = frame.src;\n if (frameSrc == null || frameSrc !== this._getSrc()) {\n this._setSrc();\n } else {\n this._clear();\n }\n }\n\n setSrc(event?: Event) {\n event?.preventDefault();\n this._setSrc();\n }\n\n clear(event?: Event) {\n event?.preventDefault();\n this._clear();\n }\n\n private _setSrc() {\n let frame = this._getFrame();\n if (this.hasLoadingMessageValue) {\n frame.innerHTML = this.loadingMessageValue;\n }\n frame.src = this._getSrc();\n }\n\n private _clear() {\n let frame = this._getFrame();\n frame.src = \"\";\n frame.innerHTML = \"\";\n }\n\n private _getFrame(): TurboFrame {\n let frame = document.getElementById(`${this.frameIdValue}`);\n if (frame == null) {\n throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);\n }\n if (!isTurboFrame(frame)) {\n throw new Error(`Element targeted by ID '${this.frameIdValue}'`);\n } else {\n return frame;\n }\n }\n\n private _getSrc(): string {\n let element = this.el;\n if (this.hasSrcValue) {\n return this.srcValue;\n } else if (isHTMLAnchorElement(element)) {\n return element.href;\n } else {\n throw new Error(\"No link given to drive frame to\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\n// noinspection SillyAssignmentJS\nexport class TurboFrameRefreshController extends BaseController {\n\n static values = {\n interval: Number,\n poll: Boolean,\n };\n\n declare readonly intervalValue: number;\n declare readonly pollValue: boolean;\n declare readonly hasPollValue: boolean;\n _timeoutHandle: null | ReturnType = null;\n\n get poll(): boolean {\n return this.hasPollValue ? this.pollValue : false;\n }\n\n initialize() {\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n let element = this.el;\n if (isTurboFrame(element)) {\n if (!!element.src) {\n throw new Error('The provided element has no `src` attribute.');\n }\n } else {\n throw new Error('Expected controller to be mounted on a element.');\n }\n if (this.poll) {\n requestAnimationFrame(() => this._timeoutHandle = setTimeout(() => this.refresh(), this.intervalValue));\n }\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n refresh(event?: Event) {\n event?.preventDefault();\n let element = this.el as TurboFrame;\n element.src = element.src;\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class WordCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this.updateWordCount = this.updateWordCount.bind(this);\n }\n\n connect() {\n this.updateWordCount();\n this.inputTarget.addEventListener(\"input\", this.updateWordCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this.updateWordCount);\n }\n\n updateWordCount() {\n let wordCount = 0;\n let textAreaValue = this.inputTarget.value;\n let matches = textAreaValue.match(/\\S+/g);\n wordCount = (matches && matches.length) || 0;\n this.outputTarget.innerText = wordCount.toString();\n if (this.hasErrorClass) {\n if (this.isValidCount(wordCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n"],"names":["BaseController","context","_this","Proxy","get","obj","prop","returnVal","Reflect","self","test","logProperty","toString","apply","target","thisArg","argArray","log","args","dispatch","element","eventName","options","mergedOptions","Object","assign","bubbles","cancelable","detail","event","CustomEvent","dispatchEvent","functionName","this","application","debug","logger","console","groupCollapsed","identifier","groupEnd","Controller","AppearanceController","initialize","_handleVisibility","bind","connect","window","addEventListener","document","disconnect","removeEventListener","appear","el","away","_documentIsActive","visibilityState","hasFocus","AsyncBlockController","loadContent","hasReplaceTarget","replaceTarget","fetch","endpointValue","then","response","text","html","newEl","createElement","innerHTML","hasSelectorValue","selectedContent","querySelectorAll","selectorValue","replaceWith","children","err","_errorMessage","hasErrorMessageValue","errorMessageValue","endpoint","String","errorMessage","selector","AutoSubmitFormController","handler","forEach","_this2","e","method","controller","methodName","composeEventName","name","eventPrefix","composedName","extendedEvent","type","composed","originalEvent","defaultOptions","useIntersection","targetElement","controllerDisconnect","observer","IntersectionObserver","entries","entry","isIntersecting","isVisible","call","appearEvent","dispatchAppear","disappearEvent","dispatchDisappear","observe","unobserve","[object Object]","events","onlyVisible","StimulusUse","_a","_b","_c","controllerId","stimulusUseDebug","id","dataset","controllerInitialize","controllerConnect","UseHover","super","onEnter","onLeave","hover","enhanceController","UseMutation","error","handleError","mutation","MutationObserver","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","requestAnimationFrame","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","value","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","toggle","refresh","hasSelectAllTarget","selectAllTarget","checkboxTargets","checkbox","preventDefault","checked","checkboxesCount","checkboxesCheckedCount","indeterminate","filter","ClipboardController","supported","queryCommandSupported","hasRemoveUnusedValue","removeUnusedValue","hasFallbackTarget","fallbackTarget","hasCopyTarget","copyTarget","select","sourceTarget","copy","execCommand","isHTMLAnchorElement","nodeName","isHTMLFormElement","isHTMLInputElement","isHTMLButtonElement","isHTMLSelectElement","isElementCheckable","removeUnused","Boolean","ConfirmController","confirm","Error","message","hasMessageValue","messageValue","ConfirmNavigationController","handlePopstate","handleTurboNavigation","onbeforeunload","_message","_event","_messageValue","DebugController","testTargets","DetectDirtyController","checkDirty","loadValue","restore","defaultChecked","Array","from","every","option","defaultSelected","selected","defaultValue","dirty","some","setAttribute","removeAttribute","DisableInputsController","hasDisablerTarget","disablerTarget","disableInputs","enableInputs","shouldClear","hasClearValue","clearValue","disableTargets","_","disabled","clear","DisableWithController","enable","disable","_timeoutHandle","_isDisabled","stopImmediatePropagation","_cacheText","_getElText","_setElText","_disable","_timeout","_enable","str","undefined","hasTimeoutValue","timeoutValue","timeout","DismissableController","dismiss","EmptyDomController","useMutation","childList","checkEmpty","mutate","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","emptyClasses","hasNotEmptyClass","notEmptyClasses","emptyClass","split","notEmptyClass","hasScopeSelectorValue","scopeSelectorValue","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormSaveController","_clear","restoreOnLoad","clearOnSubmit","localStorage","removeItem","formIdentifier","save","setItem","JSON","stringify","formData","getItem","savedData","parse","formElements","hasIdValue","idValue","elementID","location","href","formID","elements","data","hasRestoreOnLoadValue","restoreOnLoadValue","hasClearOnSubmitValue","clearOnSubmitValue","IntersectionController","threshold","disappear","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","LazyBlockController","smoothPolyfilled","scrollToElement","behavior","block","inline","scrollIntoView","smoothSupported","import","polyfill","polyfillSmooth","documentElement","getScrollParent","node","overflowY","getComputedStyle","parentElement","body","LightboxImageController","open","close","_dialog","image","className","imageClassName","srcset","srcSet","sizes","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","modalClassName","showModal","_this3","hasSrcValue","srcValue","hasSrcSetValue","srcSetValue","hasSizesValue","sizesValue","hasModalClass","modalClass","hasImageClass","imageClass","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","NestedFormController","checkStructure","content","templateTarget","replace","generateID","targetTarget","insertAdjacentHTML","insertMode","wrapper","closest","wrapperClass","newRecord","destroyInput","querySelector","Date","getTime","Math","random","slice","indexOf","hasWrapperSelectorValue","wrapperClassValue","hasInsertModeValue","insertModeValue","PasswordConfirmController","checkPasswordsMatch","passwordTargets","allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","constructor","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","keys","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","secondsValue","seconds","StickyController","createMagicElement","_magicElement","_mode","intersectionRatio","hasStuckClass","stuckClass","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","ToggleClassController","hasClassValue","hasMouseEnterValue","hasMouseLeaveValue","useHover","hasClickAwayValue","clickAwayValue","onEvent","contains","rect","getBoundingClientRect","windowHeight","windowWidth","clientWidth","left","isElementInViewport","clickOutside","clickOutsideEvent","useClickOutside","hasInitialValue","toggleTargets","initialValue","elementOn","elementOff","elementWasToggled","elementToggleStatus","elementToggle","mouseEnter","mouseEnterValue","on","off","mouseLeave","mouseLeaveValue","_this4","_this5","toggled","classValue","klass","isTurboFrame","class","clickAway","initial","TurboFrameRCController","frameSrc","_getFrame","_getSrc","_setSrc","setSrc","frame","hasLoadingMessageValue","loadingMessageValue","getElementById","frameIdValue","frameId","loadingMessage","TurboFrameRefreshController","poll","intervalValue","hasPollValue","pollValue","interval","WordCountController","updateWordCount","wordCount","matches","match","isValidCount"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stimulus-library.module.js","sources":["../src/base_controller.ts","../src/appearance_controller.ts","../src/async_block_controller.ts","../src/auto_submit_form_controller.ts","../node_modules/stimulus-use/dist/support/index.js","../node_modules/stimulus-use/dist/use-intersection/use-intersection.js","../node_modules/stimulus-use/dist/use-click-outside/use-click-outside.js","../node_modules/stimulus-use/dist/stimulus_use.js","../node_modules/stimulus-use/dist/use-hover/use-hover.js","../node_modules/stimulus-use/dist/use-mutation/use-mutation.js","../node_modules/stimulus-use/dist/use-window-resize/use-window-resize.js","../node_modules/stimulus-use/dist/use-debounce/use-debounce.js","../src/autosize_controller.ts","../src/char_count_controller.ts","../src/checkbox_select_all_controller.ts","../src/clipboard_controller.ts","../src/utilities/elements.ts","../src/confirm_controller.ts","../src/confirm_navigation_controller.ts","../src/debug_controller.ts","../src/detect_dirty_controller.ts","../src/disable_inputs_controller.ts","../src/disable_with_controller.ts","../src/dismissable_controller.ts","../src/element_save_controller.ts","../src/empty_dom_controller.ts","../src/enable_inputs_controller.ts","../src/fallback_image_controller.ts","../src/form_save_controller.ts","../src/intersection_controller.ts","../src/lazy_block_controller.ts","../src/utilities/scroll.ts","../src/lightbox_image_controller.ts","../src/limited_selection_checkboxes_controller.ts","../src/nested_form_controller.ts","../src/password_confirm_controller.ts","../src/password_peek_controller.ts","../src/remote_form_controller.ts","../src/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/scroll_into_focus_controller.ts","../src/scroll_to_bottom_controller.ts","../src/scroll_to_controller.ts","../src/scroll_to_top_controller.ts","../src/self_destruct_controller.ts","../src/sticky_controller.ts","../src/teleport_controller.ts","../src/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/turbo_frame_rc_controller.ts","../src/turbo_frame_refresh_controller.ts","../src/word_count_controller.ts"],"sourcesContent":["import {Context, Controller} from \"stimulus\";\n\nexport class BaseController extends Controller {\n\n constructor(context: Context) {\n super(context);\n return new Proxy(this, {\n get: (obj, prop) => {\n let returnVal = Reflect.get(obj, prop);\n let self = this;\n if (logProperty(prop.toString())) {\n if (typeof returnVal == \"function\") {\n return new Proxy(returnVal, {\n apply(target: any, thisArg: any, argArray?: any): any {\n self.log(prop.toString(), {\n args: argArray,\n });\n return Reflect.apply(target, thisArg, argArray);\n },\n });\n } else {\n this.log(prop.toString());\n }\n }\n return returnVal;\n },\n });\n }\n\n get el(): HTMLElement {\n return this.element as HTMLElement;\n }\n\n dispatch(element: HTMLElement, eventName: string, options: CustomEventInit = {}) {\n let mergedOptions = Object.assign({}, {bubbles: true, cancelable: true, detail: {target: element}}, options);\n if (!!mergedOptions.detail.target) {\n mergedOptions.detail.target = element;\n }\n let event = new CustomEvent(eventName, mergedOptions);\n element.dispatchEvent(event);\n }\n\n log(functionName: string, args: {} = {}): void {\n // @ts-ignore\n if (!this.application.debug) {\n return;\n }\n let logger = console;\n logger.groupCollapsed(`%c${this.identifier} %c#${functionName}`, \"color: #3B82F6\", \"color: unset\");\n logger.log({\n element: this.element,\n ...args,\n });\n logger.groupEnd();\n }\n\n}\n\nfunction logProperty(prop: string): boolean {\n switch (prop) {\n case \"application\":\n case \"el\":\n case \"element\":\n case \"constructor\":\n case \"initialize\":\n case \"log\":\n case \"dispatch\":\n case \"data\":\n case \"valueDescriptorMap\":\n case \"identifier\":\n return false;\n }\n\n if (/^_.*?$/.test(prop)) {\n return false;\n }\n if (/^.*?Target(s)?$/.test(prop)) {\n return false;\n }\n if (/^.*?Value$/.test(prop)) {\n return false;\n }\n if (/^.*?ValueChanged$/.test(prop)) {\n return false;\n }\n if (/^.*?Class$/.test(prop)) {\n return false;\n }\n\n return true;\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class AppearanceController extends BaseController {\r\n\r\n initialize() {\r\n this._handleVisibility = this._handleVisibility.bind(this);\r\n }\r\n\r\n connect() {\r\n window.addEventListener(\"focus\", this._handleVisibility);\r\n window.addEventListener(\"blur\", this._handleVisibility);\r\n document.addEventListener(\"visibilitychange\", this._handleVisibility);\r\n this._handleVisibility();\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"focus\", this._handleVisibility);\r\n window.removeEventListener(\"blur\", this._handleVisibility);\r\n document.removeEventListener(\"visibilitychange\", this._handleVisibility);\r\n }\r\n\r\n appear() {\r\n this.dispatch(this.el, \"appearance:appear\");\r\n }\r\n\r\n away() {\r\n this.dispatch(this.el, \"appearance:away\");\r\n }\r\n\r\n _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\n\nexport class AsyncBlockController extends BaseController {\n static targets = [\"replace\"];\n static values = {endpoint: String, errorMessage: String, selector: String};\n\n declare readonly replaceTarget: HTMLElement;\n declare readonly hasReplaceTarget: boolean;\n declare readonly endpointValue: string;\n\n declare readonly hasSelectorValue: boolean;\n declare readonly selectorValue: string;\n\n declare readonly hasErrorMessageValue: boolean;\n declare readonly errorMessageValue: string;\n\n get _errorMessage(): string {\n return this.hasErrorMessageValue ? this.errorMessageValue : \"This content failed to load\";\n }\n\n // This is a simple controller to load a block of content when the page loads.\n // It should be used to give a quick initial response before calling out to an\n // an AJAX endpoint to do some expensive work.\n connect() {\n this.loadContent();\n }\n\n loadContent() {\n let self = this;\n let el = this.hasReplaceTarget ? this.replaceTarget : this.el;\n fetch(this.endpointValue)\n .then((response) => response.text())\n .then((html) => {\n let newEl = document.createElement(\"div\");\n newEl.innerHTML = html;\n if (this.hasSelectorValue) {\n let selectedContent = newEl.querySelectorAll(this.selectorValue);\n el.replaceWith(...selectedContent);\n } else {\n el.replaceWith(...newEl.children);\n }\n // Trigger event to show block has loaded\n self.dispatch(el, \"ajax:success\");\n })\n .catch(err => {\n el.replaceWith(this._errorMessage);\n self.dispatch(el, \"ajax:error\");\n })\n .finally(() => {\n self.dispatch(el, \"ajax:complete\");\n });\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class AutoSubmitFormController extends BaseController {\n\n initialize() {\n this.handler = this.handler.bind(this);\n }\n\n connect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.handler));\n }\n\n disconnect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.handler));\n }\n\n private handler(e: Event) {\n // Trigger synthetic \"submit\" event on form\n this.dispatch((this.el), \"submit\");\n }\n}\n","export const method = (controller, methodName) => {\n const method = controller[methodName];\n if (typeof method == 'function') {\n return method;\n }\n else {\n return (...args) => { };\n }\n};\nexport const composeEventName = (name, controller, eventPrefix) => {\n let composedName = name;\n if (eventPrefix === true) {\n composedName = `${controller.identifier}:${name}`;\n }\n else if (typeof eventPrefix === 'string') {\n composedName = `${eventPrefix}:${name}`;\n }\n return composedName;\n};\nexport const extendedEvent = (type, event, detail) => {\n const { bubbles, cancelable, composed } = event || { bubbles: true, cancelable: true, composed: true };\n if (event) {\n Object.assign(detail, { originalEvent: event });\n }\n const customEvent = new CustomEvent(type, {\n bubbles,\n cancelable,\n composed,\n detail,\n });\n return customEvent;\n};\nexport function isElementInViewport(el) {\n const rect = el.getBoundingClientRect();\n const windowHeight = (window.innerHeight || document.documentElement.clientHeight);\n const windowWidth = (window.innerWidth || document.documentElement.clientWidth);\n const vertInView = (rect.top <= windowHeight) && ((rect.top + rect.height) >= 0);\n const horInView = (rect.left <= windowWidth) && ((rect.left + rect.width) >= 0);\n return (vertInView && horInView);\n}\n//# sourceMappingURL=index.js.map","import { method, extendedEvent, composeEventName } from '../support/index';\nconst defaultOptions = {\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useIntersection = (controller, options = {}) => {\n const { dispatchEvent, eventPrefix } = Object.assign({}, defaultOptions, options);\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n const callback = (entries) => {\n const [entry] = entries;\n if (entry.isIntersecting) {\n dispatchAppear(entry);\n }\n else if (controller.isVisible) {\n dispatchDisappear(entry);\n }\n };\n const dispatchAppear = (entry) => {\n controller.isVisible = true;\n method(controller, 'appear').call(controller, entry);\n // emit a custom \"appear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('appear', controller, eventPrefix);\n const appearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(appearEvent);\n }\n };\n const dispatchDisappear = (entry) => {\n controller.isVisible = false;\n method(controller, 'disappear').call(controller, entry);\n // emit a custom \"disappear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('disappear', controller, eventPrefix);\n const disappearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(disappearEvent);\n }\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observer = new IntersectionObserver(callback, options);\n const observe = () => {\n observer.observe(targetElement);\n };\n const unobserve = () => {\n observer.unobserve(targetElement);\n };\n Object.assign(controller, {\n isVisible: false,\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-intersection.js.map","import { composeEventName, extendedEvent, isElementInViewport } from '../support/index';\nconst defaultOptions = {\n events: ['click', 'touchend'],\n onlyVisible: true,\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useClickOutside = (controller, options = {}) => {\n const { onlyVisible, dispatchEvent, events, eventPrefix } = Object.assign({}, defaultOptions, options);\n const onEvent = (event) => {\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n if (targetElement.contains(event.target) || (!isElementInViewport(targetElement) && onlyVisible)) {\n return;\n }\n // call the clickOutside method of the Stimulus controller\n if (controller.clickOutside) {\n controller.clickOutside(event);\n }\n // emit a custom event\n if (dispatchEvent) {\n const eventName = composeEventName('click:outside', controller, eventPrefix);\n const clickOutsideEvent = extendedEvent(eventName, event, { controller });\n targetElement.dispatchEvent(clickOutsideEvent);\n }\n };\n const observe = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.addEventListener(event, onEvent, false);\n });\n };\n const unobserve = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.removeEventListener(event, onEvent, false);\n });\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-click-outside.js.map","const defaultOptions = {\n debug: false,\n logger: console\n};\nexport class StimulusUse {\n constructor(controller, options = {}) {\n var _a, _b, _c;\n this.log = (functionName, args) => {\n if (!this.debug)\n return;\n this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${functionName}`, 'color: #3B82F6', 'color: unset');\n this.logger.log(Object.assign({ controllerId: this.controllerId }, args));\n this.logger.groupEnd();\n };\n this.debug = (_b = (_a = options === null || options === void 0 ? void 0 : options.debug) !== null && _a !== void 0 ? _a : controller.application.stimulusUseDebug) !== null && _b !== void 0 ? _b : defaultOptions.debug;\n this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : defaultOptions.logger;\n this.controller = controller;\n this.controllerId = controller.element.id || controller.element.dataset.id;\n // make copies of lifecycle functions\n this.controllerInitialize = controller.initialize.bind(controller);\n this.controllerConnect = controller.connect.bind(controller);\n this.controllerDisconnect = controller.disconnect.bind(controller);\n }\n}\n//# sourceMappingURL=stimulus_use.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseHover extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n this.targetElement.addEventListener('mouseenter', this.onEnter);\n this.targetElement.addEventListener('mouseleave', this.onLeave);\n };\n this.unobserve = () => {\n this.targetElement.removeEventListener('mouseenter', this.onEnter);\n this.targetElement.removeEventListener('mouseleave', this.onLeave);\n };\n this.onEnter = () => {\n method(this.controller, 'mouseEnter').call(this.controller);\n this.log('mouseEnter', { hover: true });\n };\n this.onLeave = () => {\n method(this.controller, 'mouseLeave').call(this.controller);\n this.log('mouseLeave', { hover: false });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useHover = (controller, options = {}) => {\n const observer = new UseHover(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-hover.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseMutation extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n try {\n this.observer.observe(this.targetElement, this.options);\n }\n catch (error) {\n this.controller.application.handleError(error, \"At a minimum, one of childList, attributes, and/or characterData must be true\", {});\n }\n };\n this.unobserve = () => {\n this.observer.disconnect();\n };\n this.mutation = (entries) => {\n method(this.controller, 'mutate').call(this.controller, entries);\n this.log('mutate', { entries });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.options = options;\n this.observer = new MutationObserver(this.mutation);\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useMutation = (controller, options = {}) => {\n const observer = new UseMutation(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-mutation.js.map","import { method } from '../support/index';\nexport const useWindowResize = (controller) => {\n const callback = (event) => {\n const { innerWidth, innerHeight } = window;\n const payload = {\n height: innerHeight || Infinity,\n width: innerWidth || Infinity,\n event\n };\n method(controller, 'windowResize').call(controller, payload);\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observe = () => {\n window.addEventListener('resize', callback);\n callback();\n };\n const unobserve = () => {\n window.removeEventListener('resize', callback);\n };\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-window-resize.js.map","import { Controller } from 'stimulus';\nclass DebounceController extends Controller {\n}\nDebounceController.debounces = [];\nconst defaultWait = 200;\nconst debounce = (fn, wait = defaultWait) => {\n let timeoutId = null;\n return function () {\n const args = arguments;\n const context = this;\n const callback = () => fn.apply(context, args);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(callback, wait);\n };\n};\nexport const useDebounce = (controller, options) => {\n var _a;\n const constructor = controller.constructor;\n (_a = constructor.debounces) === null || _a === void 0 ? void 0 : _a.forEach((func) => {\n if (typeof func === \"string\") {\n controller[func] = debounce(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n }\n if (typeof func === \"object\") {\n const { name, wait } = func;\n if (!name)\n return;\n controller[name] = debounce(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n }\n });\n};\n//# sourceMappingURL=use-debounce.js.map","import {useWindowResize} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class AutosizeController extends BaseController {\n\n initialize() {\n this._handler = this._handler.bind(this);\n }\n\n connect() {\n let target = this.el as HTMLTextAreaElement;\n target.style.resize = \"none\";\n target.style.boxSizing = \"border-box\";\n target.addEventListener(\"input\", this._handler);\n target.addEventListener(\"focus\", this._handler);\n useWindowResize(this);\n requestAnimationFrame(this._handler);\n }\n\n windowResize() {\n this._handler();\n }\n\n private _handler() {\n this.autosize(this.el as HTMLTextAreaElement);\n };\n\n private autosize(element: HTMLTextAreaElement) {\n let offset = element.offsetHeight - element.clientHeight;\n element.style.height = \"auto\";\n element.style.height = element.scrollHeight + offset + \"px\";\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class CharCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this._updateCharCount = this._updateCharCount.bind(this);\n }\n\n connect() {\n this._updateCharCount();\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this._updateCharCount);\n }\n\n private _updateCharCount() {\n let charCount = this.inputTarget.value.length;\n this.outputTarget.innerText = charCount.toString();\n if (this.hasErrorClass) {\n if (this._isValidCount(charCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n private _isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n","import {BaseController} from './base_controller';\n\nexport class CheckboxSelectAllController extends BaseController {\n static targets = ['selectAll', 'checkbox'];\n\n declare readonly hasSelectAllTarget: boolean;\n declare readonly selectAllTarget: HTMLInputElement;\n declare readonly checkboxTargets: HTMLInputElement[];\n\n private get checked() {\n return this.checkboxTargets.filter(checkbox => checkbox.checked);\n }\n\n private get unchecked() {\n return this.checkboxTargets.filter(checkbox => !checkbox.checked);\n }\n\n initialize() {\n this.toggle = this.toggle.bind(this);\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.addEventListener('change', this.toggle);\n this.checkboxTargets.forEach(checkbox => checkbox.addEventListener('change', this.refresh));\n this.refresh();\n });\n }\n\n disconnect() {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.removeEventListener('change', this.toggle);\n this.checkboxTargets.forEach((checkbox) => checkbox.removeEventListener('change', this.refresh));\n }\n\n private toggle(event: Event) {\n event.preventDefault();\n let target = event.target as HTMLInputElement;\n this.checkboxTargets.forEach((checkbox) => checkbox.checked = target.checked);\n }\n\n private refresh() {\n const checkboxesCount = this.checkboxTargets.length;\n const checkboxesCheckedCount = this.checked.length;\n\n this.selectAllTarget.checked = checkboxesCheckedCount > 0;\n this.selectAllTarget.indeterminate = checkboxesCheckedCount > 0 && checkboxesCheckedCount < checkboxesCount;\n }\n}","import {BaseController} from \"./base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"button\", \"copy\", \"fallback\"];\r\n static values = {removeUnused: Boolean};\r\n\r\n declare readonly sourceTarget: HTMLElement;\r\n declare readonly copyTarget: HTMLElement;\r\n declare readonly hasCopyTarget: boolean;\r\n declare readonly fallbackTarget: HTMLElement;\r\n declare readonly hasFallbackTarget: boolean;\r\n\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n declare readonly removeUnusedValue: boolean;\r\n\r\n supported = false;\r\n\r\n connect() {\r\n this.supported = document.queryCommandSupported(\"copy\");\r\n\r\n if (this.hasRemoveUnusedValue && this.removeUnusedValue) {\r\n if (this.supported && this.hasFallbackTarget) {\r\n this.fallbackTarget.remove();\r\n } else if (this.hasCopyTarget) {\r\n this.copyTarget.remove();\r\n }\r\n }\r\n }\r\n\r\n select(event: MouseEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n }\r\n\r\n copy(event: ClipboardEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n if (this.supported) {\r\n document.execCommand(\"copy\");\r\n }\r\n }\r\n}\r\n","export function isHTMLLinkElement(element: Element): element is HTMLLinkElement {\n return element.nodeName == \"LINK\";\n}\n\nexport function isHTMLAnchorElement(element: Element): element is HTMLAnchorElement {\n return element.nodeName == \"A\";\n}\n\nexport function isHTMLFormElement(element: Element): element is HTMLFormElement {\n return element.nodeName == \"FORM\";\n}\n\nexport function isHTMLInputElement(element: Element): element is HTMLInputElement {\n return element.nodeName == \"INPUT\";\n}\n\nexport function isHTMLButtonElement(element: Element): element is HTMLButtonElement {\n return element.nodeName == \"BUTTON\";\n}\n\nexport function isHTMLSelectElement(element: Element): element is HTMLSelectElement {\n return element.nodeName == \"SELECT\";\n}\n\nexport function isHTMLImageElement(element: Element): element is HTMLImageElement {\n return element.nodeName == \"IMG\";\n}\n\nexport function isElementCheckable(element: Element): element is HTMLInputElement & { checked: boolean } {\n return isHTMLInputElement(element) && (element.type === \"radio\" || element.type === \"checkbox\");\n}\n","import {BaseController} from './base_controller';\nimport {isHTMLFormElement, isHTMLAnchorElement} from \"./utilities/elements\";\n\nexport class ConfirmController extends BaseController {\n\n static values = {\n message: String,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get message(): string {\n return this.hasMessageValue ? this.messageValue : 'Are you sure?';\n }\n\n initialize() {\n this.confirm = this.confirm.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n let element = this.el;\n if (isHTMLFormElement(element)) {\n element.addEventListener(\"submit\", this.confirm);\n } else if (isHTMLAnchorElement(element)) {\n element.addEventListener(\"click\", this.confirm);\n } else {\n throw new Error(\"Can't handle confirmation on attached element\");\n }\n });\n }\n\n confirm(event: Event) {\n if (!(window.confirm(this.message))) {\n event.preventDefault();\n this.dispatch(this.el, \"confirm:cancelled\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class ConfirmNavigationController extends BaseController {\n\n static values = {_message: String};\n\n declare readonly _messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get _message(): string {\n return this.hasMessageValue ? this._messageValue : \"Do you want to leave this page? Changes you made may not be saved\";\n }\n\n initialize() {\n this.handlePopstate = this.handlePopstate.bind(this);\n this.handleTurboNavigation = this.handleTurboNavigation.bind(this);\n }\n\n connect() {\n window.onbeforeunload = () => this._message;\n window.addEventListener(\"popstate\", this.handlePopstate);\n window.addEventListener(\"submit\", () => {\n window.removeEventListener(\"popstate\", this.handlePopstate);\n window.onbeforeunload = null;\n });\n window.addEventListener(\"turbolinks:before-visit\", this.handleTurboNavigation);\n window.addEventListener(\"turbo:before-visit\", this.handleTurboNavigation);\n }\n\n handlePopstate(_event: PopStateEvent) {\n return false;\n }\n\n handleTurboNavigation(event: Event) {\n if (!confirm(this._message)) {\n event.preventDefault();\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DebugController extends BaseController {\n\n static targets = [\"test\"];\n declare testTargets: HTMLElement[];\n\n connect() {\n console.log(\"Debug Controller\", this, this.testTargets);\n }\n}\n","import {BaseController} from \"./base_controller\";\nimport {isElementCheckable, isHTMLSelectElement} from \"./utilities/elements\";\n\nexport class DetectDirtyController extends BaseController {\n\n loadValue: null | string | boolean = null;\n\n initialize() {\n this.checkDirty = this.checkDirty.bind(this);\n }\n\n connect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n this.loadValue = element.checked;\n } else {\n this.loadValue = element.value;\n }\n this.checkDirty();\n element.addEventListener(\"input\", this.checkDirty);\n element.addEventListener(\"change\", this.checkDirty);\n }\n\n disconnect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n element.removeEventListener(\"input\", this.checkDirty);\n element.removeEventListener(\"change\", this.checkDirty);\n }\n\n restore() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n element.checked = element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n options.forEach((option) => {\n option.selected = option.value == this.loadValue;\n });\n } else {\n options.forEach((option) => option.selected = option.defaultSelected);\n }\n Array.from(element.options).forEach(option => option.selected = option.defaultSelected);\n } else {\n element.value = element.defaultValue;\n }\n }\n\n private checkDirty(_event?: Event) {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\n let dirty: boolean;\n if (isElementCheckable(element)) {\n dirty = element.checked != element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n dirty = element.value != this.loadValue;\n } else {\n dirty = options.some((option) => option.selected != option.defaultSelected);\n }\n } else {\n dirty = element.value != element.defaultValue;\n }\n\n if (dirty) {\n element.setAttribute(\"data-dirty\", \"true\");\n } else {\n element.removeAttribute(\"data-dirty\");\n }\n }\n\n}\n\nexport function isDirty(element: HTMLElement) {\n return element.hasAttribute(\"data-dirty\");\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class DisableInputsController extends BaseController {\r\n\r\n static targets = [\"disabler\", \"disable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasDisablerTarget: boolean;\r\n declare readonly disablerTarget: HTMLInputElement;\r\n declare readonly disableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasDisablerTarget && this.disablerTarget.checked) {\r\n this.disableInputs();\r\n } else {\r\n this.enableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.disableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.disableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from './base_controller';\nimport {isHTMLAnchorElement, isHTMLButtonElement, isHTMLInputElement} from \"./utilities/elements\";\n\nexport class DisableWithController extends BaseController {\n\n static values = {\n message: String,\n timeout: Number,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n declare readonly timeoutValue: number;\n declare readonly hasTimeoutValue: boolean;\n\n _cacheText?: string;\n _timeoutHandle?: ReturnType;\n\n get _message(): string {\n return this.hasMessageValue ? this.messageValue : 'Submitting...';\n }\n\n get _timeout(): number {\n return this.hasTimeoutValue ? this.timeoutValue : 1000;\n }\n\n initialize() {\n this.enable = this.enable.bind(this);\n this.disable = this.disable.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n this.el.addEventListener(\"click\", this.disable);\n });\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n disable(event?: Event) {\n let element = this.el;\n\n if (this._isDisabled(element)) {\n event?.preventDefault();\n event?.stopImmediatePropagation();\n } else {\n this._cacheText = this._getElText(element);\n this._setElText(element, this._message);\n this._disable(element);\n setTimeout(this.enable, this._timeout);\n }\n }\n\n enable(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n if (this._isDisabled(element)) {\n this._setElText(element, this._cacheText!);\n this._enable(element);\n }\n }\n\n _isDisabled(el: HTMLElement): boolean {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n return el.disabled;\n } else {\n return el.dataset.disabled == \"true\";\n }\n }\n\n _getElText(el: HTMLElement): string {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n return el.value;\n } else {\n return el.innerText;\n }\n }\n\n _setElText(el: HTMLElement, str: string) {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n el.value = str;\n } else if (isHTMLButtonElement(el) || isHTMLAnchorElement(el)) {\n el.innerText = str;\n }\n }\n\n _disable(el: HTMLElement) {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n el.disabled = true;\n } else {\n el.dataset.disabled = \"true\";\n }\n }\n\n _enable(el: HTMLElement) {\n if (isHTMLInputElement(el) && el.type == \"submit\" || isHTMLButtonElement(el)) {\n el.disabled = false;\n } else {\n el.dataset.disabled = undefined;\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DismissableController extends BaseController {\n\n dismiss() {\n this.el.remove();\n }\n\n}\n","import {BaseController} from './base_controller';\r\nimport _get from \"lodash-es/get\";\r\nimport _set from \"lodash-es/set\";\r\n\r\nexport class ElementSaveController extends BaseController {\r\n\r\n static targets = [\r\n \"element\",\r\n ];\r\n static values = {\r\n id: String,\r\n attributes: String,\r\n restoreOnLoad: Boolean,\r\n };\r\n declare readonly hasElementTarget: boolean;\r\n declare readonly elementTarget: HTMLElement;\r\n declare readonly elementTargets: HTMLElement[];\r\n declare readonly idValue: string;\r\n declare readonly attributesValue: string;\r\n declare readonly hasIdValue: boolean;\r\n declare readonly restoreOnLoadValue: boolean;\r\n declare readonly hasRestoreOnLoadValue: boolean;\r\n\r\n get _id() {\r\n if (this.hasIdValue) {\r\n return this.idValue;\r\n }\r\n let elementID = this.el.id;\r\n\r\n if (elementID !== \"\") {\r\n return elementID;\r\n } else {\r\n throw new Error(`No ID value to uniquely identify this element. Please either specify data-${this.identifier}-id-value or give this element an 'id' attribute. `);\r\n }\r\n }\r\n\r\n get _uniqueIdentifier() {\r\n const url = location.href;\r\n return `${url} ${this._id}`;\r\n }\r\n\r\n get _restoreOnLoad() {\r\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\r\n }\r\n\r\n get _element(): HTMLElement {\r\n return this.hasElementTarget ? this.elementTarget : this.el;\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n if (this._restoreOnLoad) {\r\n this.restore();\r\n }\r\n });\r\n }\r\n\r\n clear(event?: Event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n localStorage.removeItem(this._uniqueIdentifier);\r\n this.dispatch(this._element, `element-save:cleared`);\r\n }\r\n\r\n save(event?: Event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n let element = this._element;\r\n let attributes = this.attributesValue.split(\" \");\r\n let data: { [idx: string]: any } = {};\r\n attributes.forEach((attr: string) => data[attr] = _get(element, attr));\r\n localStorage.setItem(this._uniqueIdentifier, JSON.stringify(data));\r\n this.dispatch(element, `element-save:save:success`);\r\n }\r\n\r\n restore(event?: Event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n let element = this._element;\r\n if (localStorage.getItem(this._uniqueIdentifier)) {\r\n const savedData = JSON.parse(localStorage.getItem(this._uniqueIdentifier)!); // get and parse the saved data from localStorage\r\n Object.keys(savedData).forEach((attr: string) => {\r\n _set(element as HTMLElement, attr, savedData[attr]);\r\n });\r\n this.dispatch(element, `element-save:restore:success`);\r\n } else {\r\n this.dispatch(element, `element-save:restore:empty`);\r\n }\r\n }\r\n\r\n}\r\n","import {useMutation} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class EmptyDomController extends BaseController {\n\n static classes = [\"empty\", \"notEmpty\"];\n static values = {scopeSelector: String};\n\n declare hasEmptyClass: boolean;\n declare emptyClass: string;\n declare hasNotEmptyClass: boolean;\n declare notEmptyClass: string;\n\n declare hasScopeSelectorValue: boolean;\n declare scopeSelectorValue: string;\n\n get emptyClasses(): string[] {\n return this.emptyClass.split(\" \");\n }\n\n get notEmptyClasses(): string[] {\n return this.notEmptyClass.split(\" \");\n }\n\n get children(): Element[] {\n let element = this.el;\n if (this.hasScopeSelectorValue) {\n return Array.from(element.querySelectorAll(this.scopeSelectorValue));\n } else {\n return Array.from(element.children);\n }\n }\n\n connect() {\n useMutation(this, {element: this.el, childList: true});\n this.checkEmpty();\n }\n\n mutate(entries: MutationRecord[]) {\n this.checkEmpty();\n }\n\n checkEmpty() {\n let element = this.el;\n let children = this.children;\n if (children.length === 0) {\n this._removeNotEmptyClasses();\n this._addEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:empty\");\n } else {\n this._addNotEmptyClasses();\n this._removeEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:not-empty\", {detail: {count: children.length}});\n }\n }\n\n private _removeEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.remove(...this.emptyClasses);\n }\n }\n\n private _addNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.add(...this.notEmptyClasses);\n }\n }\n\n private _addEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.add(...this.emptyClasses);\n }\n }\n\n private _removeNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.remove(...this.notEmptyClasses);\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class EnableInputsController extends BaseController {\r\n\r\n static targets = [\"enabler\", \"enable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasEnablerTarget: boolean;\r\n declare readonly enablerTarget: HTMLInputElement;\r\n declare readonly enableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasEnablerTarget && this.enablerTarget.checked) {\r\n this.enableInputs();\r\n } else {\r\n this.disableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.enableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.enableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class FallbackImageController extends BaseController {\r\n\r\n static values = {placeholder: String};\r\n\r\n declare readonly placeholderValue: string;\r\n declare readonly hasPlaceholderValue: boolean;\r\n\r\n connect() {\r\n let element = this.el as HTMLImageElement;\r\n\r\n element.onerror = () => {\r\n if (this.hasPlaceholderValue) {\r\n element.src = this.placeholderValue;\r\n } else {\r\n element.style.display = \"none\";\r\n }\r\n };\r\n }\r\n\r\n}\r\n","import {BaseController} from './base_controller';\r\nimport {isHTMLFormElement, isHTMLInputElement} from \"./utilities/elements\";\r\n\r\ninterface FormSavePayload {\r\n [idx: string]: {\r\n [idx: string]: string | boolean\r\n }\r\n}\r\n\r\nexport class FormSaveController extends BaseController {\r\n\r\n static values = {\r\n id: String,\r\n restoreOnLoad: Boolean,\r\n clearOnSubmit: Boolean,\r\n };\r\n\r\n declare readonly idValue: string;\r\n declare readonly hasIdValue: boolean;\r\n declare readonly restoreOnLoadValue: boolean;\r\n declare readonly hasRestoreOnLoadValue: boolean;\r\n declare readonly clearOnSubmitValue: boolean;\r\n declare readonly hasClearOnSubmitValue: boolean;\r\n\r\n get formID() {\r\n if (this.hasIdValue) {\r\n return this.idValue;\r\n }\r\n let elementID = (this.el as HTMLFormElement).id;\r\n\r\n if (elementID !== \"\") {\r\n return elementID;\r\n } else {\r\n throw new Error(`No ID value to uniquely identify this form. Please either specify data-${this.identifier}-id-value or give this form an 'id' attribute. `);\r\n }\r\n }\r\n\r\n get formIdentifier() {\r\n const url = location.href;\r\n return `${url} ${this.formID}`;\r\n }\r\n\r\n get formElements() {\r\n return (this.el as HTMLFormElement).elements;\r\n }\r\n\r\n get formData(): FormSavePayload {\r\n let data: FormSavePayload = {[this.formIdentifier]: {}};\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name.length > 0) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n data[this.formIdentifier][el.name] = el.checked;\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.checked) {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n } else {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n get restoreOnLoad() {\r\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\r\n }\r\n\r\n get clearOnSubmit() {\r\n return this.hasClearOnSubmitValue ? this.clearOnSubmitValue : true;\r\n }\r\n\r\n initialize() {\r\n this._clear = this._clear.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n let element = this.el;\r\n if (!isHTMLFormElement(element)) {\r\n throw new Error('Expected controller to be mounted on a form element.');\r\n }\r\n\r\n if (this.restoreOnLoad) {\r\n this.restore();\r\n }\r\n if (this.clearOnSubmit) {\r\n this.el.addEventListener('submit', this._clear);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.clearOnSubmit) {\r\n this.el.removeEventListener('submit', this._clear);\r\n }\r\n }\r\n\r\n _clear() {\r\n localStorage.removeItem(this.formIdentifier);\r\n this.dispatch(this.el, `form-save:cleared`);\r\n }\r\n\r\n clear(event?: Event) {\r\n event?.preventDefault();\r\n this._clear();\r\n }\r\n\r\n save(event: Event) {\r\n event.preventDefault();\r\n let data = this.formData;\r\n localStorage.setItem(this.formIdentifier, JSON.stringify(data[this.formIdentifier]));\r\n this.dispatch(this.el, `form-save:save:success`);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n if (localStorage.getItem(this.formIdentifier)) {\r\n const savedData = JSON.parse(localStorage.getItem(this.formIdentifier)!); // get and parse the saved data from localStorage\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name in savedData) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n el.checked = savedData[el.name];\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.value == savedData[el.name]) {\r\n el.checked = true;\r\n }\r\n } else {\r\n el.value = savedData[el.name];\r\n }\r\n }\r\n }\r\n this.dispatch(this.el, `form-save:restore:success`);\r\n } else {\r\n this.dispatch(this.el, `form-save:restore:empty`);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {useIntersection} from \"stimulus-use\";\n\nexport class IntersectionController extends BaseController {\n\n static values = {threshold: String};\n\n declare readonly isVisible: boolean;\n declare readonly thresholdValue: string;\n declare readonly hasThresholdValue: boolean;\n\n get threshold(): number[] {\n if (this.hasThresholdValue) {\n return this.thresholdValue.split(',').map(val => Number.parseFloat(val.trim())).filter(val => val >= 0 && val <= 1);\n } else {\n return [0, 1];\n }\n }\n\n connect() {\n useIntersection(this, {\n threshold: this.threshold,\n element: this.el,\n });\n }\n\n appear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:appear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n disappear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:disappear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n}\n","import {useIntersection} from \"stimulus-use\";\nimport {AsyncBlockController} from \"./async_block_controller\";\n\nexport class LazyBlockController extends AsyncBlockController {\n\n declare observe: () => void;\n declare unobserve: () => void;\n declare isVisible: boolean;\n declare disappear: () => void;\n\n connect() {\n let element = this.el;\n\n if (\"IntersectionObserver\" in window) {\n [this.observe, this.unobserve] = useIntersection(this, {element, threshold: 0.3});\n } else {\n // Client doesn't support intersection observer, fallback to pre-loading\n this.loadContent();\n }\n }\n\n appear(entry: IntersectionObserverEntry) {\n if (entry.target === this.el && entry.isIntersecting) {\n this.loadContent();\n if (this.unobserve) {\n this.unobserve();\n }\n }\n }\n\n}\n","const smoothSupported = \"scrollBehavior\" in document.documentElement.style;\r\nlet smoothPolyfilled: boolean;\r\n\r\nexport async function scrollToElement(element: Element, {behavior = \"smooth\", block = \"start\", inline = \"nearest\"}: ScrollIntoViewOptions = {}) {\r\n if (behavior == \"smooth\" && !smoothSupported) {\r\n await polyfillSmooth();\r\n }\r\n element.scrollIntoView({behavior, block, inline});\r\n}\r\n\r\nasync function polyfillSmooth() {\r\n const {polyfill} = await import(/* webpackChunkName: \"smoothscroll-polyfill\" */ \"smoothscroll-polyfill\");\r\n if (smoothPolyfilled) {\r\n return;\r\n }\r\n smoothPolyfilled = true;\r\n polyfill();\r\n}\r\n\r\nexport function getScrollParent(node: HTMLElement | null): HTMLElement | null {\r\n if (!node) {\r\n return null;\r\n }\r\n const overflowY = getComputedStyle(node).overflowY;\r\n const isScrollable = overflowY !== \"visible\" && overflowY !== \"hidden\";\r\n\r\n if (isScrollable && node.scrollHeight >= node.clientHeight) {\r\n return node;\r\n }\r\n\r\n return getScrollParent(node.parentElement) || document.body;\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\nimport dialogPolyfill from \"dialog-polyfill\";\r\n\r\nexport class LightboxImageController extends BaseController {\r\n\r\n static values = {\r\n src: String,\r\n srcSet: String,\r\n sizes: String,\r\n };\r\n static classes = [\"modal\", \"image\"];\r\n\r\n declare readonly hasModalClass: boolean;\r\n declare readonly modalClass: string;\r\n declare readonly hasImageClass: boolean;\r\n declare readonly imageClass: string;\r\n declare readonly hasSrcValue: boolean;\r\n declare readonly srcValue: string;\r\n declare readonly hasSrcSetValue: boolean;\r\n declare readonly srcSetValue: string;\r\n declare readonly hasSizesValue: boolean;\r\n declare readonly sizesValue: string;\r\n _dialog: HTMLDialogElement | null = null;\r\n\r\n get src(): string {\r\n return this.hasSrcValue ? this.srcValue : (this.el as HTMLImageElement).src;\r\n }\r\n\r\n get srcSet(): string {\r\n return this.hasSrcSetValue ? this.srcSetValue : (this.el as HTMLImageElement).srcset;\r\n }\r\n\r\n get sizes(): string {\r\n return this.hasSizesValue ? this.sizesValue : (this.el as HTMLImageElement).sizes;\r\n }\r\n\r\n get modalClassName() {\r\n return this.hasModalClass ? this.modalClass : \"image-lightbox-dialog\";\r\n }\r\n\r\n get imageClassName() {\r\n return this.hasImageClass ? this.imageClass : \"image-lightbox-image\";\r\n }\r\n\r\n initialize() {\r\n this.open = this.open.bind(this);\r\n this.close = this.close.bind(this);\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n open() {\r\n let element = this.el as HTMLImageElement;\r\n if (this._dialog) {\r\n return;\r\n }\r\n this._dialog = document.createElement(\"dialog\");\r\n\r\n let image = document.createElement(\"img\") as HTMLImageElement;\r\n image.className = this.imageClassName;\r\n image.src = this.src;\r\n image.srcset = this.srcSet;\r\n image.sizes = this.sizes;\r\n this._dialog.appendChild(image);\r\n\r\n element.insertAdjacentElement(\"afterend\", this._dialog);\r\n dialogPolyfill.registerDialog(this._dialog);\r\n this._dialog.className = this.modalClassName;\r\n this._dialog.showModal();\r\n scrollToElement(this._dialog, {behavior: \"smooth\", block: \"end\"}).catch(() => this._dialog!.scrollIntoView(false));\r\n this._dialog.addEventListener(\"click\", this.close);\r\n this._dialog.addEventListener(\"cancel\", this.close);\r\n this._dialog.addEventListener(\"close\", this.close);\r\n }\r\n\r\n close() {\r\n if (this._dialog) {\r\n this._dialog.close();\r\n this._dialog.remove();\r\n this._dialog = null;\r\n scrollToElement(this.el, {behavior: \"smooth\", block: \"end\"}).catch(() => this.el.scrollIntoView(false));\r\n }\r\n }\r\n\r\n} ","import {BaseController} from \"./base_controller\";\n\nexport class LimitedSelectionCheckboxesController extends BaseController {\n\n static targets = [\"input\", \"error\"];\n static values = {max: Number, message: String};\n\n declare readonly hasErrorTarget: boolean;\n declare readonly errorTarget: HTMLElement;\n declare readonly inputTargets: HTMLInputElement[];\n declare readonly maxValue: number;\n declare readonly messageValue: string;\n\n initialize() {\n this.handleInputs = this.handleInputs.bind(this);\n }\n\n connect() {\n this.inputTargets.forEach((el) => el.addEventListener(\"change\", this.handleInputs));\n }\n\n disconnect() {\n this.inputTargets.forEach((el) => el.removeEventListener(\"change\", this.handleInputs));\n }\n\n handleInputs(event: Event) {\n let tickedInputs = this.inputTargets.reduce((previousValue, el) => el.checked ? previousValue + 1 : previousValue, 0);\n let target = event.target as HTMLInputElement;\n if (tickedInputs > this.maxValue) {\n event.preventDefault();\n target.checked = false;\n this.dispatch(target, \"change\");\n this.dispatch(target, \"limited-selection:too-many\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = this.messageValue;\n }\n } else {\n this.dispatch(target, \"limited-selection:selection\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = \"\";\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class NestedFormController extends BaseController {\n static targets = ['target', 'template'];\n static values = {\n insertMode: String,\n wrapperClass: String,\n };\n\n declare readonly targetTarget: HTMLElement;\n declare readonly templateTarget: HTMLTemplateElement | HTMLScriptElement;\n\n declare readonly wrapperClassValue: string;\n declare readonly hasWrapperSelectorValue: boolean;\n declare readonly insertModeValue: InsertPosition;\n declare readonly hasInsertModeValue: boolean;\n\n get wrapperClass() {\n return this.hasWrapperSelectorValue ? this.wrapperClassValue : 'nested-fields';\n }\n\n get insertMode(): InsertPosition {\n return this.hasInsertModeValue ? this.insertModeValue : 'beforeend';\n }\n\n connect() {\n this.checkStructure();\n }\n\n add(event?: Event) {\n event?.preventDefault();\n\n const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, this.generateID());\n this.targetTarget.insertAdjacentHTML(this.insertMode, content);\n }\n\n remove(event: Event) {\n event.preventDefault();\n const wrapper: HTMLElement | null = (event.target as HTMLElement).closest(`.${this.wrapperClass}`);\n if (wrapper == null) {\n throw new Error(`#remove was clicked from outside of a child record. Could not find an ancestor with class .${this.wrapperClass}`);\n }\n\n if (wrapper.dataset.newRecord === 'true') {\n wrapper.remove();\n } else {\n wrapper.style.display = 'none';\n let destroyInput = wrapper.querySelector(\"input[name*='_destroy']\") as HTMLInputElement | null;\n if (destroyInput == null) {\n throw new Error(`Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.`);\n }\n\n destroyInput.value = \"1\";\n }\n }\n\n generateID(): string {\n return new Date().getTime().toString() + Math.random().toString().slice(2);\n }\n\n private checkStructure() {\n let template = this.templateTarget.innerHTML;\n\n if (template.indexOf('NEW_RECORD')) {\n 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`\");\n }\n }\n}","import {BaseController} from \"./base_controller\";\n\nexport class PasswordConfirmController extends BaseController {\n\n static targets = [\"password\"];\n static classes = [\"error\"];\n\n declare readonly passwordTargets: HTMLInputElement[];\n\n declare readonly errorClass: string;\n declare readonly hasErrorClass: boolean;\n\n initialize() {\n this.checkPasswordsMatch = this.checkPasswordsMatch.bind(this);\n }\n\n connect() {\n this.passwordTargets.forEach((el) => el.addEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n disconnect() {\n this.passwordTargets.forEach((el) => el.removeEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n private allPasswordsMatch(): boolean {\n let values = new Set(this.passwordTargets.map(el => el.value)); // Create a unique set of the password values\n 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)\n }\n\n private checkPasswordsMatch() {\n let element = this.el;\n if (this.allPasswordsMatch()) {\n this.dispatch(element, \"password-confirm:match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.remove(this.errorClass));\n }\n } else {\n this.dispatch(element, \"password-confirm:no-match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.add(this.errorClass));\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class PasswordPeekController extends BaseController {\n\n static targets = [\"password\"];\n\n declare readonly passwordTarget: HTMLInputElement;\n\n peak(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"text\";\n }\n\n hide(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"password\";\n }\n\n toggle(event?: Event) {\n event?.preventDefault();\n if (this.passwordTarget.type === \"password\") {\n this.peak();\n } else {\n this.hide();\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class RemoteFormController extends BaseController {\r\n static targets = [];\r\n\r\n static values = {selector: String};\r\n\r\n declare readonly hasSelectorValue: boolean;\r\n declare readonly selectorValue: string;\r\n\r\n get selector(): string {\r\n return this.hasSelectorValue ? this.selectorValue : `[data-controller~=\"${this.identifier}\"]`;\r\n }\r\n\r\n replace(event: { detail: [Element, any, XMLHttpRequest] }) {\r\n const [data, status, xhr] = event.detail;\r\n if (data instanceof Node) {\r\n let new_element = data.querySelector(this.selector);\r\n\r\n if (new_element == null) {\r\n throw new Error(`expected new form DOM with [data-controller=\"${this.identifier}\"] to be present in returned payload`);\r\n }\r\n\r\n let parentNode = this.el.parentNode;\r\n if (parentNode == null) {\r\n throw new Error('expected form to have a DOM parent, could not execute replaceChild');\r\n }\r\n parentNode.replaceChild(new_element, this.el);\r\n } else {\r\n console.log('Unknown', data);\r\n }\r\n }\r\n}\r\n","import {useDebounce, useWindowResize} from \"stimulus-use\";\nimport {WindowResizePayload} from \"stimulus-use/dist/use-window-resize/use-window-resize\";\nimport {BaseController} from \"./base_controller\";\n\ninterface ResponsiveIframeMessage {\n name: string,\n height: number,\n}\n\nexport class ResponsiveIframeWrapperController extends BaseController {\n\n initialize() {\n this.messageReceived = this.messageReceived.bind(this);\n }\n\n connect() {\n window.addEventListener(\"message\", this.messageReceived);\n }\n\n disconnect() {\n window.removeEventListener(\"message\", this.messageReceived);\n }\n\n messageReceived(message: MessageEvent) {\n let data = message.data;\n if (data.hasOwnProperty(\"name\") && data.name === \"iframe-body\" && data.hasOwnProperty(\"height\")) {\n this.resize(data.height);\n }\n }\n\n resize(height: number) {\n (this.el as HTMLIFrameElement).style.height = `${height}px`;\n }\n\n}\n\nexport class ResponsiveIframeBodyController extends BaseController {\n\n static debounces = [\"postUpdate\"];\n\n declare observe: () => void;\n declare unobserve: () => void;\n\n connect() {\n // If this Window is inside a frame\n if (window.self !== window.top) {\n useWindowResize(this);\n useDebounce(this, {});\n this.postUpdate();\n } else {\n // Not an iframe\n }\n }\n\n windowResize(payload: WindowResizePayload) {\n this.postUpdate();\n };\n\n postUpdate() {\n let payload: ResponsiveIframeMessage = {name: \"iframe-body\", height: this.getHeight()};\n window.parent.postMessage(\n payload,\n \"*\",\n );\n }\n\n getHeight(): number {\n const body = document.body;\n const html = document.documentElement;\n\n // Get the largest height out of body and html's various height measurements\n return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n }\n\n}\n","import camelCase from \"camelcase\";\r\nimport {BaseController} from \"../base_controller\";\r\n\r\nexport class EphemeralController extends BaseController {\r\n\r\n _cleanupSelf() {\r\n this.cleanup(this.el);\r\n }\r\n\r\n cleanup(element: HTMLElement) {\r\n element.dataset.controller = element.dataset.controller?.replaceAll(new RegExp(`(\\s|^)${this.identifier}(\\s|$)`, \"g\"), \"\") || \"\";\r\n if (element.dataset.controller == \"\") {\r\n // If there are no controllers left, remove the attribute\r\n delete element.dataset.controller;\r\n }\r\n\r\n let substringIdentifierValueRegex = new RegExp(`(\\s|^)${this.identifier}\\\\..+?(\\s|$)`, \"g\");\r\n element.dataset.target = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-target`)];\r\n if (element.dataset.target == \"\") {\r\n // If there are no targets left, remove the attribute\r\n delete element.dataset.target;\r\n }\r\n\r\n element.dataset.action = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-action`)];\r\n if (element.dataset.action == \"\") {\r\n // If there are no actions left, remove the attribute\r\n delete element.dataset.action;\r\n }\r\n\r\n // @ts-ignore\r\n let values = this.constructor.values;\r\n if (values) {\r\n Object.keys(values).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-value`)]);\r\n }\r\n\r\n // @ts-ignore\r\n let classes = this.constructor.classes;\r\n if (classes) {\r\n Object.keys(classes).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-class`)]);\r\n }\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\n\r\nexport class ScrollIntoFocusController extends EphemeralController {\r\n\r\n static values = {\r\n behavior: String,\r\n block: String,\r\n inline: String,\r\n };\r\n\r\n declare behaviorValue: ScrollBehavior;\r\n declare hasBehaviorValue: boolean;\r\n declare blockValue: ScrollLogicalPosition;\r\n declare hasBlockValue: boolean;\r\n declare inlineValue: ScrollLogicalPosition;\r\n declare hasInlineValue: boolean;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Attempt smooth scrolling, with polyfill\r\n scrollToElement(\r\n this.el,\r\n {\r\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\r\n block: this.hasBlockValue ? this.blockValue : \"center\",\r\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\r\n },\r\n ).catch(() => this.el.scrollIntoView()); // Fallback to snap-scrolling\r\n this._cleanupSelf();\r\n });\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToBottomController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"end\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\nimport {scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToController extends BaseController {\n\n static values = {\n selector: String,\n behavior: String,\n block: String,\n inline: String,\n };\n\n declare selectorValue: string;\n declare behaviorValue: ScrollBehavior;\n declare hasBehaviorValue: boolean;\n declare blockValue: ScrollLogicalPosition;\n declare hasBlockValue: boolean;\n declare inlineValue: ScrollLogicalPosition;\n declare hasInlineValue: boolean;\n\n scroll() {\n let target = document.querySelector(this.selectorValue);\n if (!target) {\n console.warn(`Could not find target for '${this.selectorValue}'`);\n return;\n }\n\n scrollToElement(\n target!,\n {\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\n block: this.hasBlockValue ? this.blockValue : \"center\",\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\n },\n ).catch(() => target!.scrollIntoView()); // Fallback to snap-scrolling\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToTopController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"start\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class SelfDestructController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n timeout: null | ReturnType = null;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Only start countdown on first paint\r\n this.timeout = setTimeout(() => this.el.remove(), this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.timeout) {\r\n clearTimeout(this.timeout);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class StickyController extends BaseController {\r\n\r\n static classes = [\"stuck\"];\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare readonly hasStuckClass: boolean;\r\n declare readonly stuckClass: string;\r\n declare readonly hasModeValue: \"top\" | \"bottom\";\r\n declare readonly modeValue: \"top\" | \"bottom\";\r\n\r\n _magicElement: HTMLDivElement | null = null;\r\n\r\n get _mode(): \"top\" | \"bottom\" {\r\n return this.hasModeValue ? this.modeValue : \"top\";\r\n }\r\n\r\n createMagicElement() {\r\n // Magic element placed next to the sticky el that acts as an external border.\r\n // When the magic element is off the page, we know that the sticky el is \"stuck\"\r\n if (this._magicElement !== null) {\r\n return;\r\n }\r\n\r\n this._magicElement = document.createElement(\"div\");\r\n switch (this._mode) {\r\n case \"top\":\r\n this.el.insertAdjacentElement(\"beforebegin\", this._magicElement);\r\n break;\r\n case \"bottom\":\r\n this.el.insertAdjacentElement(\"afterend\", this._magicElement);\r\n break;\r\n }\r\n }\r\n\r\n connect() {\r\n let element = this.el;\r\n this.createMagicElement();\r\n\r\n const observer = new IntersectionObserver(entries => {\r\n entries.forEach(entry => {\r\n if (entry.target !== this._magicElement) {\r\n return;\r\n }\r\n if (entry.intersectionRatio === 0) {\r\n element.classList.add(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n } else if (entry.intersectionRatio === 1) {\r\n element.classList.remove(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n }\r\n });\r\n\r\n }, {\r\n threshold: [0, 1],\r\n });\r\n observer.observe(this._magicElement!);\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\n\nexport class TeleportController extends EphemeralController {\n\n static values = {target: String, insert: String, immediate: Boolean};\n\n declare readonly immediateValue: boolean;\n declare readonly hasImmediateValue: boolean;\n declare readonly targetValue: string;\n declare readonly hasInsertValue: boolean;\n declare readonly insertValue: InsertPosition | \"replaceOuter\" | \"replaceInner\" | \"prepend\" | \"append\";\n\n connect() {\n if (!this.hasInsertValue) {\n throw new Error(\"`insert` value was not specified\");\n }\n\n requestAnimationFrame(() => {\n if (this.hasImmediateValue && this.immediateValue) {\n this.execute();\n }\n });\n }\n\n execute(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n let destination = document.querySelector(this.targetValue);\n\n if (destination == null) {\n this.dispatch(element, \"teleport:error\");\n return;\n }\n\n let copy = element.cloneNode(true) as HTMLElement;\n this.cleanup(copy);\n\n switch (this.insertValue) {\n case \"beforebegin\":\n case \"beforeend\":\n case \"afterend\":\n case \"afterbegin\":\n destination.insertAdjacentHTML(this.insertValue, copy.outerHTML);\n break;\n case \"replaceOuter\":\n destination.outerHTML = copy.outerHTML;\n break;\n case \"replaceInner\":\n destination.innerHTML = copy.outerHTML;\n break;\n case \"prepend\":\n destination.insertAdjacentHTML(\"afterbegin\", copy.outerHTML);\n break;\n case \"append\":\n destination.insertAdjacentHTML(\"beforeend\", copy.outerHTML);\n break;\n default:\n throw new Error(\"`insert` value was not specified\");\n\n }\n element.remove();\n }\n\n}\n","import {useClickOutside, useHover} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport type ToggleClassMode = \"on\" | \"off\" | \"toggle\"\n\nexport class ToggleClassController extends BaseController {\n\n static targets = [\"toggle\"];\n static values = {\n class: String,\n mouseEnter: String,\n mouseLeave: String,\n clickAway: Boolean,\n initial: String,\n };\n\n declare readonly toggleTargets: HTMLElement[];\n\n declare readonly classValue: string;\n declare readonly hasClassValue: boolean;\n\n declare readonly mouseEnterValue: ToggleClassMode;\n declare readonly hasMouseEnterValue: boolean;\n\n declare readonly mouseLeaveValue: ToggleClassMode;\n declare readonly hasMouseLeaveValue: boolean;\n\n declare readonly clickAwayValue: boolean;\n declare readonly hasClickAwayValue: boolean;\n\n declare readonly initialValue: \"on\" | \"off\";\n declare readonly hasInitialValue: boolean;\n\n connect() {\n if (!this.hasClassValue) {\n throw new Error(\"data-toggle-class-class-value must not be empty\");\n }\n\n if (this.hasMouseEnterValue || this.hasMouseLeaveValue) {\n useHover(this);\n }\n\n if (this.hasClickAwayValue && this.clickAwayValue) {\n useClickOutside(this);\n }\n\n requestAnimationFrame(() => {\n if (this.hasInitialValue) {\n if (this.initialValue === \"on\") {\n this.toggleTargets.forEach((target) => this.elementOn(target));\n } else {\n this.toggleTargets.forEach((target) => this.elementOff(target));\n }\n }\n });\n }\n\n clickOutside() {\n this.toggleTargets.forEach((target) => {\n if (this.elementWasToggled(target)) {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n }\n });\n }\n\n mouseEnter() {\n if (this.hasMouseEnterValue) {\n switch (this.mouseEnterValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n mouseLeave() {\n if (this.hasMouseLeaveValue) {\n switch (this.mouseLeaveValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n on(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOn(target);\n });\n }\n\n off(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOff(target);\n });\n }\n\n toggle(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n });\n }\n\n private elementWasToggled(el: HTMLElement): boolean {\n return el.dataset.toggled == \"true\";\n }\n\n private elementToggleStatus(el: HTMLElement) {\n if (this.elementWasToggled(el)) {\n delete el.dataset.toggled;\n } else {\n el.dataset.toggled = \"true\";\n }\n }\n\n private elementToggle(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass));\n }\n\n private elementOn(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, true));\n }\n\n private elementOff(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, false));\n }\n\n}\n","export function isTurboFrame(element: HTMLElement): element is TurboFrame {\r\n return element.nodeName == \"TURBO-FRAME\";\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {isHTMLAnchorElement} from \"./utilities/elements\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\nexport class TurboFrameRCController extends BaseController {\n\n static values = {\n frameId: String,\n src: String,\n loadingMessage: String,\n };\n\n declare readonly frameIdValue: string;\n declare readonly srcValue: string;\n declare readonly hasSrcValue: boolean;\n declare readonly loadingMessageValue: string;\n declare readonly hasLoadingMessageValue: boolean;\n\n toggle(event?: Event) {\n event?.preventDefault();\n let frame = this._getFrame();\n let frameSrc = frame.src;\n if (frameSrc == null || frameSrc !== this._getSrc()) {\n this._setSrc();\n } else {\n this._clear();\n }\n }\n\n setSrc(event?: Event) {\n event?.preventDefault();\n this._setSrc();\n }\n\n clear(event?: Event) {\n event?.preventDefault();\n this._clear();\n }\n\n private _setSrc() {\n let frame = this._getFrame();\n if (this.hasLoadingMessageValue) {\n frame.innerHTML = this.loadingMessageValue;\n }\n frame.src = this._getSrc();\n }\n\n private _clear() {\n let frame = this._getFrame();\n frame.src = \"\";\n frame.innerHTML = \"\";\n }\n\n private _getFrame(): TurboFrame {\n let frame = document.getElementById(`${this.frameIdValue}`);\n if (frame == null) {\n throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);\n }\n if (!isTurboFrame(frame)) {\n throw new Error(`Element targeted by ID '${this.frameIdValue}'`);\n } else {\n return frame;\n }\n }\n\n private _getSrc(): string {\n let element = this.el;\n if (this.hasSrcValue) {\n return this.srcValue;\n } else if (isHTMLAnchorElement(element)) {\n return element.href;\n } else {\n throw new Error(\"No link given to drive frame to\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\n// noinspection SillyAssignmentJS\nexport class TurboFrameRefreshController extends BaseController {\n\n static values = {\n interval: Number,\n poll: Boolean,\n };\n\n declare readonly intervalValue: number;\n declare readonly pollValue: boolean;\n declare readonly hasPollValue: boolean;\n _timeoutHandle: null | ReturnType = null;\n\n get poll(): boolean {\n return this.hasPollValue ? this.pollValue : false;\n }\n\n initialize() {\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n let element = this.el;\n if (isTurboFrame(element)) {\n if (!!element.src) {\n throw new Error('The provided element has no `src` attribute.');\n }\n } else {\n throw new Error('Expected controller to be mounted on a element.');\n }\n if (this.poll) {\n requestAnimationFrame(() => this._timeoutHandle = setTimeout(() => this.refresh(), this.intervalValue));\n }\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n refresh(event?: Event) {\n event?.preventDefault();\n let element = this.el as TurboFrame;\n element.src = element.src;\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class WordCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this.updateWordCount = this.updateWordCount.bind(this);\n }\n\n connect() {\n this.updateWordCount();\n this.inputTarget.addEventListener(\"input\", this.updateWordCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this.updateWordCount);\n }\n\n updateWordCount() {\n let wordCount = 0;\n let textAreaValue = this.inputTarget.value;\n let matches = textAreaValue.match(/\\S+/g);\n wordCount = (matches && matches.length) || 0;\n this.outputTarget.innerText = wordCount.toString();\n if (this.hasErrorClass) {\n if (this.isValidCount(wordCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n"],"names":["BaseController","context","_this","Proxy","get","obj","prop","returnVal","Reflect","self","test","logProperty","toString","apply","target","thisArg","argArray","log","args","dispatch","element","eventName","options","mergedOptions","Object","assign","bubbles","cancelable","detail","event","CustomEvent","dispatchEvent","functionName","this","application","debug","logger","console","groupCollapsed","identifier","groupEnd","Controller","AppearanceController","initialize","_handleVisibility","bind","connect","window","addEventListener","document","disconnect","removeEventListener","appear","el","away","_documentIsActive","visibilityState","hasFocus","AsyncBlockController","loadContent","hasReplaceTarget","replaceTarget","fetch","endpointValue","then","response","text","html","newEl","createElement","innerHTML","hasSelectorValue","selectedContent","querySelectorAll","selectorValue","replaceWith","children","err","_errorMessage","hasErrorMessageValue","errorMessageValue","endpoint","String","errorMessage","selector","AutoSubmitFormController","handler","forEach","_this2","e","method","controller","methodName","composeEventName","name","eventPrefix","composedName","extendedEvent","type","composed","originalEvent","defaultOptions","useIntersection","targetElement","controllerDisconnect","observer","IntersectionObserver","entries","entry","isIntersecting","isVisible","call","appearEvent","dispatchAppear","disappearEvent","dispatchDisappear","observe","unobserve","[object Object]","events","onlyVisible","StimulusUse","_a","_b","_c","controllerId","stimulusUseDebug","id","dataset","controllerInitialize","controllerConnect","UseHover","super","onEnter","onLeave","hover","enhanceController","UseMutation","error","handleError","mutation","MutationObserver","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","requestAnimationFrame","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","value","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","toggle","refresh","hasSelectAllTarget","selectAllTarget","checkboxTargets","checkbox","preventDefault","checked","checkboxesCount","checkboxesCheckedCount","indeterminate","filter","ClipboardController","supported","queryCommandSupported","hasRemoveUnusedValue","removeUnusedValue","hasFallbackTarget","fallbackTarget","hasCopyTarget","copyTarget","select","sourceTarget","copy","execCommand","isHTMLAnchorElement","nodeName","isHTMLFormElement","isHTMLInputElement","isHTMLButtonElement","isHTMLSelectElement","isElementCheckable","removeUnused","Boolean","ConfirmController","confirm","Error","message","hasMessageValue","messageValue","ConfirmNavigationController","handlePopstate","handleTurboNavigation","onbeforeunload","_message","_event","_messageValue","DebugController","testTargets","DetectDirtyController","checkDirty","loadValue","restore","defaultChecked","Array","from","every","option","defaultSelected","selected","defaultValue","dirty","some","setAttribute","removeAttribute","DisableInputsController","hasDisablerTarget","disablerTarget","disableInputs","enableInputs","shouldClear","hasClearValue","clearValue","disableTargets","_","disabled","clear","DisableWithController","enable","disable","_timeoutHandle","_isDisabled","stopImmediatePropagation","_cacheText","_getElText","_setElText","_disable","_timeout","_enable","str","undefined","hasTimeoutValue","timeoutValue","timeout","DismissableController","dismiss","ElementSaveController","_restoreOnLoad","localStorage","removeItem","_uniqueIdentifier","_element","save","attributes","attributesValue","split","data","attr","_get","setItem","JSON","stringify","getItem","savedData","parse","keys","_set","hasIdValue","idValue","elementID","location","href","_id","hasRestoreOnLoadValue","restoreOnLoadValue","hasElementTarget","elementTarget","restoreOnLoad","EmptyDomController","useMutation","childList","checkEmpty","mutate","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","emptyClasses","hasNotEmptyClass","notEmptyClasses","emptyClass","notEmptyClass","hasScopeSelectorValue","scopeSelectorValue","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormSaveController","_clear","clearOnSubmit","formIdentifier","formData","formElements","formID","elements","hasClearOnSubmitValue","clearOnSubmitValue","IntersectionController","threshold","disappear","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","LazyBlockController","smoothPolyfilled","scrollToElement","behavior","block","inline","scrollIntoView","smoothSupported","import","polyfill","polyfillSmooth","documentElement","getScrollParent","node","overflowY","getComputedStyle","parentElement","body","LightboxImageController","open","close","_dialog","image","className","imageClassName","srcset","srcSet","sizes","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","modalClassName","showModal","_this3","hasSrcValue","srcValue","hasSrcSetValue","srcSetValue","hasSizesValue","sizesValue","hasModalClass","modalClass","hasImageClass","imageClass","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","NestedFormController","checkStructure","content","templateTarget","replace","generateID","targetTarget","insertAdjacentHTML","insertMode","wrapper","closest","wrapperClass","newRecord","destroyInput","querySelector","Date","getTime","Math","random","slice","indexOf","hasWrapperSelectorValue","wrapperClassValue","hasInsertModeValue","insertModeValue","PasswordConfirmController","checkPasswordsMatch","passwordTargets","allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","constructor","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","secondsValue","seconds","StickyController","createMagicElement","_magicElement","_mode","intersectionRatio","hasStuckClass","stuckClass","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","ToggleClassController","hasClassValue","hasMouseEnterValue","hasMouseLeaveValue","useHover","hasClickAwayValue","clickAwayValue","onEvent","contains","rect","getBoundingClientRect","windowHeight","windowWidth","clientWidth","left","isElementInViewport","clickOutside","clickOutsideEvent","useClickOutside","hasInitialValue","toggleTargets","initialValue","elementOn","elementOff","elementWasToggled","elementToggleStatus","elementToggle","mouseEnter","mouseEnterValue","on","off","mouseLeave","mouseLeaveValue","_this4","_this5","toggled","classValue","klass","isTurboFrame","class","clickAway","initial","TurboFrameRCController","frameSrc","_getFrame","_getSrc","_setSrc","setSrc","frame","hasLoadingMessageValue","loadingMessageValue","getElementById","frameIdValue","frameId","loadingMessage","TurboFrameRefreshController","poll","intervalValue","hasPollValue","pollValue","interval","WordCountController","updateWordCount","wordCount","matches","match","isValidCount"],"mappings":"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"} \ No newline at end of file diff --git a/dist/stimulus-library.umd.js b/dist/stimulus-library.umd.js index 36210e89..363443d8 100644 --- a/dist/stimulus-library.umd.js +++ b/dist/stimulus-library.umd.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("stimulus"),require("dialog-polyfill"),require("camelcase")):"function"==typeof define&&define.amd?define(["exports","stimulus","dialog-polyfill","camelcase"],t):t((e||self).stimulusLibrary={},e.stimulus,e.dialogPolyfill,e.camelcase)}(this,function(e,t,n,i){function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=r(n),o=r(i);function a(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,i=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}var p=function(e){function t(t){var n;return n=e.call(this,t)||this,new Proxy(h(n),{get:function(e,t){var i=Reflect.get(e,t),r=h(n);if(function(e){switch(e){case"application":case"el":case"element":case"constructor":case"initialize":case"log":case"dispatch":case"data":case"valueDescriptorMap":case"identifier":return!1}return!(/^_.*?$/.test(e)||/^.*?Target(s)?$/.test(e)||/^.*?Value$/.test(e)||/^.*?ValueChanged$/.test(e)||/^.*?Class$/.test(e))}(t.toString())){if("function"==typeof i)return new Proxy(i,{apply:function(e,n,i){return r.log(t.toString(),{args:i}),Reflect.apply(e,n,i)}});n.log(t.toString())}return i}})||h(n)}u(t,e);var n=t.prototype;return n.dispatch=function(e,t,n){void 0===n&&(n={});var i=Object.assign({},{bubbles:!0,cancelable:!0,detail:{target:e}},n);i.detail.target&&(i.detail.target=e);var r=new CustomEvent(t,i);e.dispatchEvent(r)},n.log=function(e,t){if(void 0===t&&(t={}),this.application.debug){var n=console;n.groupCollapsed("%c"+this.identifier+" %c#"+e,"color: #3B82F6","color: unset"),n.log(c({element:this.element},t)),n.groupEnd()}},l(t,[{key:"el",get:function(){return this.element}}]),t}(t.Controller),m=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this._handleVisibility=this._handleVisibility.bind(this)},n.connect=function(){window.addEventListener("focus",this._handleVisibility),window.addEventListener("blur",this._handleVisibility),document.addEventListener("visibilitychange",this._handleVisibility),this._handleVisibility()},n.disconnect=function(){window.removeEventListener("focus",this._handleVisibility),window.removeEventListener("blur",this._handleVisibility),document.removeEventListener("visibilitychange",this._handleVisibility)},n.appear=function(){this.dispatch(this.el,"appearance:appear")},n.away=function(){this.dispatch(this.el,"appearance:away")},n._handleVisibility=function(){this._documentIsActive()?this.appear():this.away()},n._documentIsActive=function(){return"visible"==document.visibilityState&&document.hasFocus()},t}(p),g=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){this.loadContent()},n.loadContent=function(){var e=this,t=this,n=this.hasReplaceTarget?this.replaceTarget:this.el;fetch(this.endpointValue).then(function(e){return e.text()}).then(function(i){var r=document.createElement("div");if(r.innerHTML=i,e.hasSelectorValue){var s=r.querySelectorAll(e.selectorValue);n.replaceWith.apply(n,s)}else n.replaceWith.apply(n,r.children);t.dispatch(n,"ajax:success")}).catch(function(i){n.replaceWith(e._errorMessage),t.dispatch(n,"ajax:error")}).finally(function(){t.dispatch(n,"ajax:complete")})},l(t,[{key:"_errorMessage",get:function(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}}]),t}(p);g.targets=["replace"],g.values={endpoint:String,errorMessage:String,selector:String};var v=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this.handler=this.handler.bind(this)},n.connect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.addEventListener("change",e.handler)})},n.disconnect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.removeEventListener("change",e.handler)})},n.handler=function(e){this.dispatch(this.el,"submit")},t}(p);const b=(e,t)=>{const n=e[t];return"function"==typeof n?n:(...e)=>{}},y=(e,t,n)=>{let i=e;return!0===n?i=`${t.identifier}:${e}`:"string"==typeof n&&(i=`${n}:${e}`),i},E=(e,t,n)=>{const{bubbles:i,cancelable:r,composed:s}=t||{bubbles:!0,cancelable:!0,composed:!0};return t&&Object.assign(n,{originalEvent:t}),new CustomEvent(e,{bubbles:i,cancelable:r,composed:s,detail:n})},w={dispatchEvent:!0,eventPrefix:!0},C=(e,t={})=>{const{dispatchEvent:n,eventPrefix:i}=Object.assign({},w,t),r=(null==t?void 0:t.element)||e.element,s=e.disconnect.bind(e),o=new IntersectionObserver(t=>{const[s]=t;s.isIntersecting?(t=>{if(e.isVisible=!0,b(e,"appear").call(e,t),n){const n=y("appear",e,i),s=E(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s):e.isVisible&&(t=>{if(e.isVisible=!1,b(e,"disappear").call(e,t),n){const n=y("disappear",e,i),s=E(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s)},t),a=()=>{o.observe(r)},l=()=>{o.unobserve(r)};return Object.assign(e,{isVisible:!1,disconnect(){l(),s()}}),a(),[a,l]},k={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},T={debug:!1,logger:console};class V{constructor(e,t={}){var n,i,r;this.log=(e,t)=>{this.debug&&(this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${e}`,"color: #3B82F6","color: unset"),this.logger.log(Object.assign({controllerId:this.controllerId},t)),this.logger.groupEnd())},this.debug=null!==(i=null!==(n=null==t?void 0:t.debug)&&void 0!==n?n:e.application.stimulusUseDebug)&&void 0!==i?i:T.debug,this.logger=null!==(r=null==t?void 0:t.logger)&&void 0!==r?r:T.logger,this.controller=e,this.controllerId=e.element.id||e.element.dataset.id,this.controllerInitialize=e.initialize.bind(e),this.controllerConnect=e.connect.bind(e),this.controllerDisconnect=e.disconnect.bind(e)}}class S extends V{constructor(e,t={}){super(e,t),this.observe=()=>{this.targetElement.addEventListener("mouseenter",this.onEnter),this.targetElement.addEventListener("mouseleave",this.onLeave)},this.unobserve=()=>{this.targetElement.removeEventListener("mouseenter",this.onEnter),this.targetElement.removeEventListener("mouseleave",this.onLeave)},this.onEnter=()=>{b(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{b(this.controller,"mouseLeave").call(this.controller),this.log("mouseLeave",{hover:!1})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}class _ extends V{constructor(e,t={}){super(e,t),this.observe=()=>{try{this.observer.observe(this.targetElement,this.options)}catch(e){this.controller.application.handleError(e,"At a minimum, one of childList, attributes, and/or characterData must be true",{})}},this.unobserve=()=>{this.observer.disconnect()},this.mutation=e=>{b(this.controller,"mutate").call(this.controller,e),this.log("mutate",{entries:e})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.options=t,this.observer=new MutationObserver(this.mutation),this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}const L=e=>{const t=t=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:t};b(e,"windowResize").call(e,r)},n=e.disconnect.bind(e),i=()=>{window.addEventListener("resize",t),t()},r=()=>{window.removeEventListener("resize",t)};return Object.assign(e,{disconnect(){r(),n()}}),i(),[i,r]},I=(e,t=200)=>{let n=null;return function(){const i=arguments,r=this,s=()=>e.apply(r,i);n&&clearTimeout(n),n=setTimeout(s,t)}};var x=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var e=this.el;e.style.resize="none",e.style.boxSizing="border-box",e.addEventListener("input",this._handler),e.addEventListener("focus",this._handler),L(this),requestAnimationFrame(this._handler)},n.windowResize=function(){this._handler()},n._handler=function(){this.autosize(this.el)},n.autosize=function(e){var t=e.offsetHeight-e.clientHeight;e.style.height="auto",e.style.height=e.scrollHeight+t+"px"},t}(p),D=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this._updateCharCount=this._updateCharCount.bind(this)},n.connect=function(){this._updateCharCount(),this.inputTarget.addEventListener("input",this._updateCharCount)},n.disconnect=function(){this.inputTarget.removeEventListener("input",this._updateCharCount)},n._updateCharCount=function(){var e=this.inputTarget.value.length;this.outputTarget.innerText=e.toString(),this.hasErrorClass&&(this._isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n._isValidCount=function(e){var t=0,n=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(n=this.maxValue),e>=t&&e<=n},t}(p);D.targets=["input","output"],D.values={min:Number,max:Number},D.classes=["error"];var M=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this.toggle=this.toggle.bind(this),this.refresh=this.refresh.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e.hasSelectAllTarget&&(e.selectAllTarget.addEventListener("change",e.toggle),e.checkboxTargets.forEach(function(t){return t.addEventListener("change",e.refresh)}),e.refresh())})},n.disconnect=function(){var e=this;this.hasSelectAllTarget&&(this.selectAllTarget.removeEventListener("change",this.toggle),this.checkboxTargets.forEach(function(t){return t.removeEventListener("change",e.refresh)}))},n.toggle=function(e){e.preventDefault();var t=e.target;this.checkboxTargets.forEach(function(e){return e.checked=t.checked})},n.refresh=function(){var e=this.checkboxTargets.length,t=this.checked.length;this.selectAllTarget.checked=t>0,this.selectAllTarget.indeterminate=t>0&&t{new _(this,t)})(0,{element:this.el,childList:!0}),this.checkEmpty()},n.mutate=function(e){this.checkEmpty()},n.checkEmpty=function(){var e=this.el,t=this.children;0===t.length?(this._removeNotEmptyClasses(),this._addEmptyClasses(),this.dispatch(e,"dom:empty")):(this._addNotEmptyClasses(),this._removeEmptyClasses(),this.dispatch(e,"dom:not-empty",{detail:{count:t.length}}))},n._removeEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).remove.apply(e,this.emptyClasses)},n._addNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).add.apply(e,this.notEmptyClasses)},n._addEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).add.apply(e,this.emptyClasses)},n._removeNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).remove.apply(e,this.notEmptyClasses)},l(t,[{key:"emptyClasses",get:function(){return this.emptyClass.split(" ")}},{key:"notEmptyClasses",get:function(){return this.notEmptyClass.split(" ")}},{key:"children",get:function(){var e=this.el;return Array.from(this.hasScopeSelectorValue?e.querySelectorAll(this.scopeSelectorValue):e.children)}}]),t}(p);J.classes=["empty","notEmpty"],J.values={scopeSelector:String};var Y=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasEnablerTarget&&this.enablerTarget.checked?this.enableInputs():this.disableInputs()},n.disableInputs=function(){var e=this.hasClearValue&&this.clearValue;this.enableTargets.forEach(function(t,n){e&&(t.value=""),t.disabled=!0})},n.enableInputs=function(){this.enableTargets.forEach(function(e,t){e.disabled=!1})},t}(p);Y.targets=["enabler","enable"],Y.values={clear:Boolean};var G=function(e){function t(){return e.apply(this,arguments)||this}return u(t,e),t.prototype.connect=function(){var e=this,t=this.el;t.onerror=function(){e.hasPlaceholderValue?t.src=e.placeholderValue:t.style.display="none"}},t}(p);G.values={placeholder:String};var K=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this._clear=this._clear.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){if(!N(e.el))throw new Error("Expected controller to be mounted on a form element.");e.restoreOnLoad&&e.restore(),e.clearOnSubmit&&e.el.addEventListener("submit",e._clear)})},n.disconnect=function(){this.clearOnSubmit&&this.el.removeEventListener("submit",this._clear)},n._clear=function(){localStorage.removeItem(this.formIdentifier),this.dispatch(this.el,"form-save:cleared")},n.clear=function(e){null==e||e.preventDefault(),this._clear()},n.save=function(e){e.preventDefault(),localStorage.setItem(this.formIdentifier,JSON.stringify(this.formData[this.formIdentifier])),this.dispatch(this.el,"form-save:save:success")},n.restore=function(e){if(null==e||e.preventDefault(),localStorage.getItem(this.formIdentifier)){for(var t,n=JSON.parse(localStorage.getItem(this.formIdentifier)),i=f(this.formElements);!(t=i()).done;){var r=t.value;r.name in n&&(z(r)&&"checkbox"==r.type?r.checked=n[r.name]:z(r)&&"radio"==r.type?r.value==n[r.name]&&(r.checked=!0):r.value=n[r.name])}this.dispatch(this.el,"form-save:restore:success")}else this.dispatch(this.el,"form-save:restore:empty")},l(t,[{key:"formID",get:function(){if(this.hasIdValue)return this.idValue;var e=this.el.id;if(""!==e)return e;throw new Error("No ID value to uniquely identify this form. Please either specify data-"+this.identifier+"-id-value or give this form an 'id' attribute. ")}},{key:"formIdentifier",get:function(){return location.href+" "+this.formID}},{key:"formElements",get:function(){return this.el.elements}},{key:"formData",get:function(){for(var e,t,n=((e={})[this.formIdentifier]={},e),i=f(this.formElements);!(t=i()).done;){var r=t.value;r.name.length>0&&(z(r)&&"checkbox"==r.type?n[this.formIdentifier][r.name]=r.checked:z(r)&&"radio"==r.type?r.checked&&(n[this.formIdentifier][r.name]=r.value):n[this.formIdentifier][r.name]=r.value)}return n}},{key:"restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"clearOnSubmit",get:function(){return!this.hasClearOnSubmitValue||this.clearOnSubmitValue}}]),t}(p);K.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var Q=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){C(this,{threshold:this.threshold,element:this.el})},n.appear=function(e){this.dispatch(this.el,"intersection:appear",{detail:{element:this.el}})},n.disappear=function(e){this.dispatch(this.el,"intersection:disappear",{detail:{element:this.el}})},l(t,[{key:"threshold",get:function(){return this.hasThresholdValue?this.thresholdValue.split(",").map(function(e){return Number.parseFloat(e.trim())}).filter(function(e){return e>=0&&e<=1}):[0,1]}}]),t}(p);Q.values={threshold:String};var X,Z=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){if("IntersectionObserver"in window){var e=C(this,{element:this.el,threshold:.3});this.observe=e[0],this.unobserve=e[1]}else this.loadContent()},n.appear=function(e){e.target===this.el&&e.isIntersecting&&(this.loadContent(),this.unobserve&&this.unobserve())},t}(g),ee=function(e,t){var n=void 0===t?{}:t,i=n.behavior,r=void 0===i?"smooth":i,s=n.block,o=void 0===s?"start":s,a=n.inline,l=void 0===a?"nearest":a;try{var c=function(){e.scrollIntoView({behavior:r,block:o,inline:l})},u=function(){if("smooth"==r&&!te)return Promise.resolve(function(){try{return Promise.resolve(import("smoothscroll-polyfill")).then(function(e){X||(X=!0,(0,e.polyfill)())})}catch(e){return Promise.reject(e)}}()).then(function(){})}();return Promise.resolve(u&&u.then?u.then(c):c())}catch(e){return Promise.reject(e)}},te="scrollBehavior"in document.documentElement.style;function ne(e){if(!e)return null;var t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:ne(e.parentElement)||document.body}var ie=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._dialog=null,t}u(t,e);var n=t.prototype;return n.initialize=function(){this.open=this.open.bind(this),this.close=this.close.bind(this)},n.connect=function(){},n.open=function(){var e=this,t=this.el;if(!this._dialog){this._dialog=document.createElement("dialog");var n=document.createElement("img");n.className=this.imageClassName,n.src=this.src,n.srcset=this.srcSet,n.sizes=this.sizes,this._dialog.appendChild(n),t.insertAdjacentElement("afterend",this._dialog),s.default.registerDialog(this._dialog),this._dialog.className=this.modalClassName,this._dialog.showModal(),ee(this._dialog,{behavior:"smooth",block:"end"}).catch(function(){return e._dialog.scrollIntoView(!1)}),this._dialog.addEventListener("click",this.close),this._dialog.addEventListener("cancel",this.close),this._dialog.addEventListener("close",this.close)}},n.close=function(){var e=this;this._dialog&&(this._dialog.close(),this._dialog.remove(),this._dialog=null,ee(this.el,{behavior:"smooth",block:"end"}).catch(function(){return e.el.scrollIntoView(!1)}))},l(t,[{key:"src",get:function(){return this.hasSrcValue?this.srcValue:this.el.src}},{key:"srcSet",get:function(){return this.hasSrcSetValue?this.srcSetValue:this.el.srcset}},{key:"sizes",get:function(){return this.hasSizesValue?this.sizesValue:this.el.sizes}},{key:"modalClassName",get:function(){return this.hasModalClass?this.modalClass:"image-lightbox-dialog"}},{key:"imageClassName",get:function(){return this.hasImageClass?this.imageClass:"image-lightbox-image"}}]),t}(p);ie.values={src:String,srcSet:String,sizes:String},ie.classes=["modal","image"];var re=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this.handleInputs=this.handleInputs.bind(this)},n.connect=function(){var e=this;this.inputTargets.forEach(function(t){return t.addEventListener("change",e.handleInputs)})},n.disconnect=function(){var e=this;this.inputTargets.forEach(function(t){return t.removeEventListener("change",e.handleInputs)})},n.handleInputs=function(e){var t=this.inputTargets.reduce(function(e,t){return t.checked?e+1:e},0),n=e.target;t>this.maxValue?(e.preventDefault(),n.checked=!1,this.dispatch(n,"change"),this.dispatch(n,"limited-selection:too-many"),this.hasErrorTarget&&(this.errorTarget.innerHTML=this.messageValue)):(this.dispatch(n,"limited-selection:selection"),this.hasErrorTarget&&(this.errorTarget.innerHTML=""))},t}(p);re.targets=["input","error"],re.values={max:Number,message:String};var se=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){this.checkStructure()},n.add=function(e){null==e||e.preventDefault();var t=this.templateTarget.innerHTML.replace(/NEW_RECORD/g,this.generateID());this.targetTarget.insertAdjacentHTML(this.insertMode,t)},n.remove=function(e){e.preventDefault();var t=e.target.closest("."+this.wrapperClass);if(null==t)throw new Error("#remove was clicked from outside of a child record. Could not find an ancestor with class ."+this.wrapperClass);if("true"===t.dataset.newRecord)t.remove();else{t.style.display="none";var n=t.querySelector("input[name*='_destroy']");if(null==n)throw new Error("Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.");n.value="1"}},n.generateID=function(){return(new Date).getTime().toString()+Math.random().toString().slice(2)},n.checkStructure=function(){if(this.templateTarget.innerHTML.indexOf("NEW_RECORD"))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`")},l(t,[{key:"wrapperClass",get:function(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}},{key:"insertMode",get:function(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}}]),t}(p);se.targets=["target","template"],se.values={insertMode:String,wrapperClass:String};var oe=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this.checkPasswordsMatch=this.checkPasswordsMatch.bind(this)},n.connect=function(){var e=this;this.passwordTargets.forEach(function(t){return t.addEventListener("change",e.checkPasswordsMatch)})},n.disconnect=function(){var e=this;this.passwordTargets.forEach(function(t){return t.removeEventListener("change",e.checkPasswordsMatch)})},n.allPasswordsMatch=function(){var e=new Set(this.passwordTargets.map(function(e){return e.value}));return e.has("")||1==e.size},n.checkPasswordsMatch=function(){var e=this,t=this.el;this.allPasswordsMatch()?(this.dispatch(t,"password-confirm:match"),this.hasErrorClass&&this.passwordTargets.forEach(function(t){return t.classList.remove(e.errorClass)})):(this.dispatch(t,"password-confirm:no-match"),this.hasErrorClass&&this.passwordTargets.forEach(function(t){return t.classList.add(e.errorClass)}))},t}(p);oe.targets=["password"],oe.classes=["error"];var ae=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.peak=function(e){null==e||e.preventDefault(),this.passwordTarget.type="text"},n.hide=function(e){null==e||e.preventDefault(),this.passwordTarget.type="password"},n.toggle=function(e){null==e||e.preventDefault(),"password"===this.passwordTarget.type?this.peak():this.hide()},t}(p);ae.targets=["password"];var le=function(e){function t(){return e.apply(this,arguments)||this}return u(t,e),t.prototype.replace=function(e){var t=e.detail[0];if(t instanceof Node){var n=t.querySelector(this.selector);if(null==n)throw new Error('expected new form DOM with [data-controller="'+this.identifier+'"] to be present in returned payload');var i=this.el.parentNode;if(null==i)throw new Error("expected form to have a DOM parent, could not execute replaceChild");i.replaceChild(n,this.el)}else console.log("Unknown",t)},l(t,[{key:"selector",get:function(){return this.hasSelectorValue?this.selectorValue:'[data-controller~="'+this.identifier+'"]'}}]),t}(p);le.targets=[],le.values={selector:String};var ce=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this.messageReceived=this.messageReceived.bind(this)},n.connect=function(){window.addEventListener("message",this.messageReceived)},n.disconnect=function(){window.removeEventListener("message",this.messageReceived)},n.messageReceived=function(e){var t=e.data;t.hasOwnProperty("name")&&"iframe-body"===t.name&&t.hasOwnProperty("height")&&this.resize(t.height)},n.resize=function(e){this.el.style.height=e+"px"},t}(p),ue=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){var e,t,n;window.self!==window.top&&(L(this),t={},null===(n=(e=this).constructor.debounces)||void 0===n||n.forEach(n=>{if("string"==typeof n&&(e[n]=I(e[n],null==t?void 0:t.wait)),"object"==typeof n){const{name:i,wait:r}=n;if(!i)return;e[i]=I(e[i],r||(null==t?void 0:t.wait))}}),this.postUpdate())},n.windowResize=function(e){this.postUpdate()},n.postUpdate=function(){var e={name:"iframe-body",height:this.getHeight()};window.parent.postMessage(e,"*")},n.getHeight=function(){var e=document.body,t=document.documentElement;return Math.max(e.scrollHeight,e.offsetHeight,t.clientHeight,t.scrollHeight,t.offsetHeight)},t}(p);ue.debounces=["postUpdate"];var he=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n._cleanupSelf=function(){this.cleanup(this.el)},n.cleanup=function(e){var t,n,i,r=this;e.dataset.controller=(null==(t=e.dataset.controller)?void 0:t.replaceAll(new RegExp("(s|^)"+this.identifier+"(s|$)","g"),""))||"",""==e.dataset.controller&&delete e.dataset.controller;var s=new RegExp("(s|^)"+this.identifier+"\\..+?(s|$)","g");e.dataset.target=(null==(n=e.dataset.target)?void 0:n.replaceAll(s,""))||"",delete e.dataset[o.default(this.identifier+"-target")],""==e.dataset.target&&delete e.dataset.target,e.dataset.action=(null==(i=e.dataset.target)?void 0:i.replaceAll(s,""))||"",delete e.dataset[o.default(this.identifier+"-action")],""==e.dataset.action&&delete e.dataset.action;var a=this.constructor.values;a&&Object.keys(a).forEach(function(t){return delete e.dataset[o.default(r.identifier+"-"+t+"-value")]});var l=this.constructor.classes;l&&Object.keys(l).forEach(function(t){return delete e.dataset[o.default(r.identifier+"-"+t+"-class")]})},t}(p),de=function(e){function t(){return e.apply(this,arguments)||this}return u(t,e),t.prototype.connect=function(){var e=this;requestAnimationFrame(function(){ee(e.el,{behavior:e.hasBehaviorValue?e.behaviorValue:"smooth",block:e.hasBlockValue?e.blockValue:"center",inline:e.hasInlineValue?e.inlineValue:"center"}).catch(function(){return e.el.scrollIntoView()}),e._cleanupSelf()})},t}(he);de.values={behavior:String,block:String,inline:String};var fe=function(e){function t(){return e.apply(this,arguments)||this}return u(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ne(this.el))&&ee(t,{behavior:"smooth",block:"end"}).catch(function(){return t.scrollIntoView(!1)})},t}(p);fe.values={mode:String};var pe=function(e){function t(){return e.apply(this,arguments)||this}return u(t,e),t.prototype.scroll=function(){var e=document.querySelector(this.selectorValue);e?ee(e,{behavior:this.hasBehaviorValue?this.behaviorValue:"smooth",block:this.hasBlockValue?this.blockValue:"center",inline:this.hasInlineValue?this.inlineValue:"center"}).catch(function(){return e.scrollIntoView()}):console.warn("Could not find target for '"+this.selectorValue+"'")},t}(p);pe.values={selector:String,behavior:String,block:String,inline:String};var me=function(e){function t(){return e.apply(this,arguments)||this}return u(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ne(this.el))&&ee(t,{behavior:"smooth",block:"start"}).catch(function(){return t.scrollIntoView(!1)})},t}(p);me.values={mode:String};var ge=function(e){function t(){var t;return(t=e.apply(this,arguments)||this).timeout=null,t}u(t,e);var n=t.prototype;return n.connect=function(){var e=this;requestAnimationFrame(function(){e.timeout=setTimeout(function(){return e.el.remove()},1e3*e.secondsValue)})},n.disconnect=function(){this.timeout&&clearTimeout(this.timeout)},t}(p);ge.values={seconds:Number};var ve=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._magicElement=null,t}u(t,e);var n=t.prototype;return n.createMagicElement=function(){if(null===this._magicElement)switch(this._magicElement=document.createElement("div"),this._mode){case"top":this.el.insertAdjacentElement("beforebegin",this._magicElement);break;case"bottom":this.el.insertAdjacentElement("afterend",this._magicElement)}},n.connect=function(){var e=this,t=this.el;this.createMagicElement(),new IntersectionObserver(function(n){n.forEach(function(n){n.target===e._magicElement&&(0===n.intersectionRatio?t.classList.add(e.hasStuckClass?e.stuckClass:"stuck"):1===n.intersectionRatio&&t.classList.remove(e.hasStuckClass?e.stuckClass:"stuck"))})},{threshold:[0,1]}).observe(this._magicElement)},l(t,[{key:"_mode",get:function(){return this.hasModeValue?this.modeValue:"top"}}]),t}(p);ve.classes=["stuck"],ve.values={mode:String};var be=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){var e=this;if(!this.hasInsertValue)throw new Error("`insert` value was not specified");requestAnimationFrame(function(){e.hasImmediateValue&&e.immediateValue&&e.execute()})},n.execute=function(e){null==e||e.preventDefault();var t=this.el,n=document.querySelector(this.targetValue);if(null!=n){var i=t.cloneNode(!0);switch(this.cleanup(i),this.insertValue){case"beforebegin":case"beforeend":case"afterend":case"afterbegin":n.insertAdjacentHTML(this.insertValue,i.outerHTML);break;case"replaceOuter":n.outerHTML=i.outerHTML;break;case"replaceInner":n.innerHTML=i.outerHTML;break;case"prepend":n.insertAdjacentHTML("afterbegin",i.outerHTML);break;case"append":n.insertAdjacentHTML("beforeend",i.outerHTML);break;default:throw new Error("`insert` value was not specified")}t.remove()}else this.dispatch(t,"teleport:error")},t}(he);be.values={target:String,insert:String,immediate:Boolean};var ye=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.connect=function(){var e=this;if(!this.hasClassValue)throw new Error("data-toggle-class-class-value must not be empty");(this.hasMouseEnterValue||this.hasMouseLeaveValue)&&((e,t={})=>{new S(this,t)})(),this.hasClickAwayValue&&this.clickAwayValue&&((e,t={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},k,t),o=r=>{const o=(null==t?void 0:t.element)||e.element;if(!(o.contains(r.target)||!function(e){const t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return t.top<=n&&t.top+t.height>=0&&t.left<=i&&t.left+t.width>=0}(o)&&n)&&(e.clickOutside&&e.clickOutside(r),i)){const t=y("click:outside",e,s),n=E(t,r,{controller:e});o.dispatchEvent(n)}},a=e.disconnect.bind(e);Object.assign(e,{disconnect(){null==r||r.forEach(e=>{window.removeEventListener(e,o,!1)}),a()}}),null==r||r.forEach(e=>{window.addEventListener(e,o,!1)})})(this),requestAnimationFrame(function(){e.hasInitialValue&&e.toggleTargets.forEach("on"===e.initialValue?function(t){return e.elementOn(t)}:function(t){return e.elementOff(t)})})},n.clickOutside=function(){var e=this;this.toggleTargets.forEach(function(t){e.elementWasToggled(t)&&(e.elementToggleStatus(t),e.elementToggle(t))})},n.mouseEnter=function(){if(this.hasMouseEnterValue)switch(this.mouseEnterValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}},n.mouseLeave=function(){if(this.hasMouseLeaveValue)switch(this.mouseLeaveValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}},n.on=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementOn(e)})},n.off=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementOff(e)})},n.toggle=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementToggle(e)})},n.elementWasToggled=function(e){return"true"==e.dataset.toggled},n.elementToggleStatus=function(e){this.elementWasToggled(e)?delete e.dataset.toggled:e.dataset.toggled="true"},n.elementToggle=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t)})},n.elementOn=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t,!0)})},n.elementOff=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t,!1)})},t}(p);function Ee(e){return"TURBO-FRAME"==e.nodeName}ye.targets=["toggle"],ye.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var we=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.toggle=function(e){null==e||e.preventDefault();var t=this._getFrame().src;null==t||t!==this._getSrc()?this._setSrc():this._clear()},n.setSrc=function(e){null==e||e.preventDefault(),this._setSrc()},n.clear=function(e){null==e||e.preventDefault(),this._clear()},n._setSrc=function(){var e=this._getFrame();this.hasLoadingMessageValue&&(e.innerHTML=this.loadingMessageValue),e.src=this._getSrc()},n._clear=function(){var e=this._getFrame();e.src="",e.innerHTML=""},n._getFrame=function(){var e=document.getElementById(""+this.frameIdValue);if(null==e)throw new Error("Could not find frame with ID '"+this.frameIdValue+"'");if(Ee(e))return e;throw new Error("Element targeted by ID '"+this.frameIdValue+"'")},n._getSrc=function(){var e=this.el;if(this.hasSrcValue)return this.srcValue;if(A(e))return e.href;throw new Error("No link given to drive frame to")},t}(p);we.values={frameId:String,src:String,loadingMessage:String};var Ce=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._timeoutHandle=null,t}u(t,e);var n=t.prototype;return n.initialize=function(){this.refresh=this.refresh.bind(this)},n.connect=function(){var e=this,t=this.el;if(!Ee(t))throw new Error("Expected controller to be mounted on a element.");if(t.src)throw new Error("The provided element has no `src` attribute.");this.poll&&requestAnimationFrame(function(){return e._timeoutHandle=setTimeout(function(){return e.refresh()},e.intervalValue)})},n.disconnect=function(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)},n.refresh=function(e){null==e||e.preventDefault();var t=this.el;t.src=t.src},l(t,[{key:"poll",get:function(){return!!this.hasPollValue&&this.pollValue}}]),t}(p);Ce.values={interval:Number,poll:Boolean};var ke=function(e){function t(){return e.apply(this,arguments)||this}u(t,e);var n=t.prototype;return n.initialize=function(){this.updateWordCount=this.updateWordCount.bind(this)},n.connect=function(){this.updateWordCount(),this.inputTarget.addEventListener("input",this.updateWordCount)},n.disconnect=function(){this.inputTarget.removeEventListener("input",this.updateWordCount)},n.updateWordCount=function(){var e=0,t=this.inputTarget.value.match(/\S+/g);this.outputTarget.innerText=(e=t&&t.length||0).toString(),this.hasErrorClass&&(this.isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n.isValidCount=function(e){var t=0,n=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(n=this.maxValue),e>=t&&e<=n},t}(p);ke.targets=["input","output"],ke.values={min:Number,max:Number},ke.classes=["error"],e.AppearanceController=m,e.AsyncBlockController=g,e.AutoSubmitFormController=v,e.AutosizeController=x,e.CharCountController=D,e.CheckboxSelectAllController=M,e.ClipboardController=O,e.ConfirmController=j,e.ConfirmNavigationController=F,e.DebugController=q,e.DetectDirtyController=B,e.DisableInputsController=W,e.DisableWithController=$,e.DismissableController=U,e.EmptyDomController=J,e.EnableInputsController=Y,e.FallbackImageController=G,e.FormSaveController=K,e.IntersectionController=Q,e.LazyBlockController=Z,e.LightboxImageController=ie,e.LimitedSelectionCheckboxesController=re,e.NestedFormController=se,e.PasswordConfirmController=oe,e.PasswordPeekController=ae,e.RemoteFormController=le,e.ResponsiveIframeBodyController=ue,e.ResponsiveIframeWrapperController=ce,e.ScrollIntoFocusController=de,e.ScrollToBottomController=fe,e.ScrollToController=pe,e.ScrollToTopController=me,e.SelfDestructController=ge,e.StickyController=ve,e.TeleportController=be,e.ToggleClassController=ye,e.TurboFrameRCController=we,e.TurboFrameRefreshController=Ce,e.WordCountController=ke}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("stimulus"),require("lodash-es/get"),require("lodash-es/set"),require("dialog-polyfill"),require("camelcase")):"function"==typeof define&&define.amd?define(["exports","stimulus","lodash-es/get","lodash-es/set","dialog-polyfill","camelcase"],t):t((e||self).stimulusLibrary={},e.stimulus,e._get,e._set,e.dialogPolyfill,e.camelcase)}(this,function(e,t,n,i,r,s){function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=o(n),l=o(i),c=o(r),u=o(s);function h(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,i=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}var b=function(e){function t(t){var n;return n=e.call(this,t)||this,new Proxy(m(n),{get:function(e,t){var i=Reflect.get(e,t),r=m(n);if(function(e){switch(e){case"application":case"el":case"element":case"constructor":case"initialize":case"log":case"dispatch":case"data":case"valueDescriptorMap":case"identifier":return!1}return!(/^_.*?$/.test(e)||/^.*?Target(s)?$/.test(e)||/^.*?Value$/.test(e)||/^.*?ValueChanged$/.test(e)||/^.*?Class$/.test(e))}(t.toString())){if("function"==typeof i)return new Proxy(i,{apply:function(e,n,i){return r.log(t.toString(),{args:i}),Reflect.apply(e,n,i)}});n.log(t.toString())}return i}})||m(n)}p(t,e);var n=t.prototype;return n.dispatch=function(e,t,n){void 0===n&&(n={});var i=Object.assign({},{bubbles:!0,cancelable:!0,detail:{target:e}},n);i.detail.target&&(i.detail.target=e);var r=new CustomEvent(t,i);e.dispatchEvent(r)},n.log=function(e,t){if(void 0===t&&(t={}),this.application.debug){var n=console;n.groupCollapsed("%c"+this.identifier+" %c#"+e,"color: #3B82F6","color: unset"),n.log(f({element:this.element},t)),n.groupEnd()}},d(t,[{key:"el",get:function(){return this.element}}]),t}(t.Controller),y=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this._handleVisibility=this._handleVisibility.bind(this)},n.connect=function(){window.addEventListener("focus",this._handleVisibility),window.addEventListener("blur",this._handleVisibility),document.addEventListener("visibilitychange",this._handleVisibility),this._handleVisibility()},n.disconnect=function(){window.removeEventListener("focus",this._handleVisibility),window.removeEventListener("blur",this._handleVisibility),document.removeEventListener("visibilitychange",this._handleVisibility)},n.appear=function(){this.dispatch(this.el,"appearance:appear")},n.away=function(){this.dispatch(this.el,"appearance:away")},n._handleVisibility=function(){this._documentIsActive()?this.appear():this.away()},n._documentIsActive=function(){return"visible"==document.visibilityState&&document.hasFocus()},t}(b),E=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){this.loadContent()},n.loadContent=function(){var e=this,t=this,n=this.hasReplaceTarget?this.replaceTarget:this.el;fetch(this.endpointValue).then(function(e){return e.text()}).then(function(i){var r=document.createElement("div");if(r.innerHTML=i,e.hasSelectorValue){var s=r.querySelectorAll(e.selectorValue);n.replaceWith.apply(n,s)}else n.replaceWith.apply(n,r.children);t.dispatch(n,"ajax:success")}).catch(function(i){n.replaceWith(e._errorMessage),t.dispatch(n,"ajax:error")}).finally(function(){t.dispatch(n,"ajax:complete")})},d(t,[{key:"_errorMessage",get:function(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}}]),t}(b);E.targets=["replace"],E.values={endpoint:String,errorMessage:String,selector:String};var w=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this.handler=this.handler.bind(this)},n.connect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.addEventListener("change",e.handler)})},n.disconnect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.removeEventListener("change",e.handler)})},n.handler=function(e){this.dispatch(this.el,"submit")},t}(b);const C=(e,t)=>{const n=e[t];return"function"==typeof n?n:(...e)=>{}},k=(e,t,n)=>{let i=e;return!0===n?i=`${t.identifier}:${e}`:"string"==typeof n&&(i=`${n}:${e}`),i},V=(e,t,n)=>{const{bubbles:i,cancelable:r,composed:s}=t||{bubbles:!0,cancelable:!0,composed:!0};return t&&Object.assign(n,{originalEvent:t}),new CustomEvent(e,{bubbles:i,cancelable:r,composed:s,detail:n})},T={dispatchEvent:!0,eventPrefix:!0},_=(e,t={})=>{const{dispatchEvent:n,eventPrefix:i}=Object.assign({},T,t),r=(null==t?void 0:t.element)||e.element,s=e.disconnect.bind(e),o=new IntersectionObserver(t=>{const[s]=t;s.isIntersecting?(t=>{if(e.isVisible=!0,C(e,"appear").call(e,t),n){const n=k("appear",e,i),s=V(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s):e.isVisible&&(t=>{if(e.isVisible=!1,C(e,"disappear").call(e,t),n){const n=k("disappear",e,i),s=V(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s)},t),a=()=>{o.observe(r)},l=()=>{o.unobserve(r)};return Object.assign(e,{isVisible:!1,disconnect(){l(),s()}}),a(),[a,l]},S={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},L={debug:!1,logger:console};class I{constructor(e,t={}){var n,i,r;this.log=(e,t)=>{this.debug&&(this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${e}`,"color: #3B82F6","color: unset"),this.logger.log(Object.assign({controllerId:this.controllerId},t)),this.logger.groupEnd())},this.debug=null!==(i=null!==(n=null==t?void 0:t.debug)&&void 0!==n?n:e.application.stimulusUseDebug)&&void 0!==i?i:L.debug,this.logger=null!==(r=null==t?void 0:t.logger)&&void 0!==r?r:L.logger,this.controller=e,this.controllerId=e.element.id||e.element.dataset.id,this.controllerInitialize=e.initialize.bind(e),this.controllerConnect=e.connect.bind(e),this.controllerDisconnect=e.disconnect.bind(e)}}class x extends I{constructor(e,t={}){super(e,t),this.observe=()=>{this.targetElement.addEventListener("mouseenter",this.onEnter),this.targetElement.addEventListener("mouseleave",this.onLeave)},this.unobserve=()=>{this.targetElement.removeEventListener("mouseenter",this.onEnter),this.targetElement.removeEventListener("mouseleave",this.onLeave)},this.onEnter=()=>{C(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{C(this.controller,"mouseLeave").call(this.controller),this.log("mouseLeave",{hover:!1})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}class D extends I{constructor(e,t={}){super(e,t),this.observe=()=>{try{this.observer.observe(this.targetElement,this.options)}catch(e){this.controller.application.handleError(e,"At a minimum, one of childList, attributes, and/or characterData must be true",{})}},this.unobserve=()=>{this.observer.disconnect()},this.mutation=e=>{C(this.controller,"mutate").call(this.controller,e),this.log("mutate",{entries:e})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.options=t,this.observer=new MutationObserver(this.mutation),this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}const M=e=>{const t=t=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:t};C(e,"windowResize").call(e,r)},n=e.disconnect.bind(e),i=()=>{window.addEventListener("resize",t),t()},r=()=>{window.removeEventListener("resize",t)};return Object.assign(e,{disconnect(){r(),n()}}),i(),[i,r]},O=(e,t=200)=>{let n=null;return function(){const i=arguments,r=this,s=()=>e.apply(r,i);n&&clearTimeout(n),n=setTimeout(s,t)}};var A=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var e=this.el;e.style.resize="none",e.style.boxSizing="border-box",e.addEventListener("input",this._handler),e.addEventListener("focus",this._handler),M(this),requestAnimationFrame(this._handler)},n.windowResize=function(){this._handler()},n._handler=function(){this.autosize(this.el)},n.autosize=function(e){var t=e.offsetHeight-e.clientHeight;e.style.height="auto",e.style.height=e.scrollHeight+t+"px"},t}(b),N=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this._updateCharCount=this._updateCharCount.bind(this)},n.connect=function(){this._updateCharCount(),this.inputTarget.addEventListener("input",this._updateCharCount)},n.disconnect=function(){this.inputTarget.removeEventListener("input",this._updateCharCount)},n._updateCharCount=function(){var e=this.inputTarget.value.length;this.outputTarget.innerText=e.toString(),this.hasErrorClass&&(this._isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n._isValidCount=function(e){var t=0,n=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(n=this.maxValue),e>=t&&e<=n},t}(b);N.targets=["input","output"],N.values={min:Number,max:Number},N.classes=["error"];var z=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this.toggle=this.toggle.bind(this),this.refresh=this.refresh.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e.hasSelectAllTarget&&(e.selectAllTarget.addEventListener("change",e.toggle),e.checkboxTargets.forEach(function(t){return t.addEventListener("change",e.refresh)}),e.refresh())})},n.disconnect=function(){var e=this;this.hasSelectAllTarget&&(this.selectAllTarget.removeEventListener("change",this.toggle),this.checkboxTargets.forEach(function(t){return t.removeEventListener("change",e.refresh)}))},n.toggle=function(e){e.preventDefault();var t=e.target;this.checkboxTargets.forEach(function(e){return e.checked=t.checked})},n.refresh=function(){var e=this.checkboxTargets.length,t=this.checked.length;this.selectAllTarget.checked=t>0,this.selectAllTarget.indeterminate=t>0&&t{new D(this,t)})(0,{element:this.el,childList:!0}),this.checkEmpty()},n.mutate=function(e){this.checkEmpty()},n.checkEmpty=function(){var e=this.el,t=this.children;0===t.length?(this._removeNotEmptyClasses(),this._addEmptyClasses(),this.dispatch(e,"dom:empty")):(this._addNotEmptyClasses(),this._removeEmptyClasses(),this.dispatch(e,"dom:not-empty",{detail:{count:t.length}}))},n._removeEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).remove.apply(e,this.emptyClasses)},n._addNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).add.apply(e,this.notEmptyClasses)},n._addEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).add.apply(e,this.emptyClasses)},n._removeNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).remove.apply(e,this.notEmptyClasses)},d(t,[{key:"emptyClasses",get:function(){return this.emptyClass.split(" ")}},{key:"notEmptyClasses",get:function(){return this.notEmptyClass.split(" ")}},{key:"children",get:function(){var e=this.el;return Array.from(this.hasScopeSelectorValue?e.querySelectorAll(this.scopeSelectorValue):e.children)}}]),t}(b);X.classes=["empty","notEmpty"],X.values={scopeSelector:String};var Z=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasEnablerTarget&&this.enablerTarget.checked?this.enableInputs():this.disableInputs()},n.disableInputs=function(){var e=this.hasClearValue&&this.clearValue;this.enableTargets.forEach(function(t,n){e&&(t.value=""),t.disabled=!0})},n.enableInputs=function(){this.enableTargets.forEach(function(e,t){e.disabled=!1})},t}(b);Z.targets=["enabler","enable"],Z.values={clear:Boolean};var ee=function(e){function t(){return e.apply(this,arguments)||this}return p(t,e),t.prototype.connect=function(){var e=this,t=this.el;t.onerror=function(){e.hasPlaceholderValue?t.src=e.placeholderValue:t.style.display="none"}},t}(b);ee.values={placeholder:String};var te=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this._clear=this._clear.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){if(!R(e.el))throw new Error("Expected controller to be mounted on a form element.");e.restoreOnLoad&&e.restore(),e.clearOnSubmit&&e.el.addEventListener("submit",e._clear)})},n.disconnect=function(){this.clearOnSubmit&&this.el.removeEventListener("submit",this._clear)},n._clear=function(){localStorage.removeItem(this.formIdentifier),this.dispatch(this.el,"form-save:cleared")},n.clear=function(e){null==e||e.preventDefault(),this._clear()},n.save=function(e){e.preventDefault(),localStorage.setItem(this.formIdentifier,JSON.stringify(this.formData[this.formIdentifier])),this.dispatch(this.el,"form-save:save:success")},n.restore=function(e){if(null==e||e.preventDefault(),localStorage.getItem(this.formIdentifier)){for(var t,n=JSON.parse(localStorage.getItem(this.formIdentifier)),i=v(this.formElements);!(t=i()).done;){var r=t.value;r.name in n&&(j(r)&&"checkbox"==r.type?r.checked=n[r.name]:j(r)&&"radio"==r.type?r.value==n[r.name]&&(r.checked=!0):r.value=n[r.name])}this.dispatch(this.el,"form-save:restore:success")}else this.dispatch(this.el,"form-save:restore:empty")},d(t,[{key:"formID",get:function(){if(this.hasIdValue)return this.idValue;var e=this.el.id;if(""!==e)return e;throw new Error("No ID value to uniquely identify this form. Please either specify data-"+this.identifier+"-id-value or give this form an 'id' attribute. ")}},{key:"formIdentifier",get:function(){return location.href+" "+this.formID}},{key:"formElements",get:function(){return this.el.elements}},{key:"formData",get:function(){for(var e,t,n=((e={})[this.formIdentifier]={},e),i=v(this.formElements);!(t=i()).done;){var r=t.value;r.name.length>0&&(j(r)&&"checkbox"==r.type?n[this.formIdentifier][r.name]=r.checked:j(r)&&"radio"==r.type?r.checked&&(n[this.formIdentifier][r.name]=r.value):n[this.formIdentifier][r.name]=r.value)}return n}},{key:"restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"clearOnSubmit",get:function(){return!this.hasClearOnSubmitValue||this.clearOnSubmitValue}}]),t}(b);te.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var ne=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){_(this,{threshold:this.threshold,element:this.el})},n.appear=function(e){this.dispatch(this.el,"intersection:appear",{detail:{element:this.el}})},n.disappear=function(e){this.dispatch(this.el,"intersection:disappear",{detail:{element:this.el}})},d(t,[{key:"threshold",get:function(){return this.hasThresholdValue?this.thresholdValue.split(",").map(function(e){return Number.parseFloat(e.trim())}).filter(function(e){return e>=0&&e<=1}):[0,1]}}]),t}(b);ne.values={threshold:String};var ie,re=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){if("IntersectionObserver"in window){var e=_(this,{element:this.el,threshold:.3});this.observe=e[0],this.unobserve=e[1]}else this.loadContent()},n.appear=function(e){e.target===this.el&&e.isIntersecting&&(this.loadContent(),this.unobserve&&this.unobserve())},t}(E),se=function(e,t){var n=void 0===t?{}:t,i=n.behavior,r=void 0===i?"smooth":i,s=n.block,o=void 0===s?"start":s,a=n.inline,l=void 0===a?"nearest":a;try{var c=function(){e.scrollIntoView({behavior:r,block:o,inline:l})},u=function(){if("smooth"==r&&!oe)return Promise.resolve(function(){try{return Promise.resolve(import("smoothscroll-polyfill")).then(function(e){ie||(ie=!0,(0,e.polyfill)())})}catch(e){return Promise.reject(e)}}()).then(function(){})}();return Promise.resolve(u&&u.then?u.then(c):c())}catch(e){return Promise.reject(e)}},oe="scrollBehavior"in document.documentElement.style;function ae(e){if(!e)return null;var t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:ae(e.parentElement)||document.body}var le=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._dialog=null,t}p(t,e);var n=t.prototype;return n.initialize=function(){this.open=this.open.bind(this),this.close=this.close.bind(this)},n.connect=function(){},n.open=function(){var e=this,t=this.el;if(!this._dialog){this._dialog=document.createElement("dialog");var n=document.createElement("img");n.className=this.imageClassName,n.src=this.src,n.srcset=this.srcSet,n.sizes=this.sizes,this._dialog.appendChild(n),t.insertAdjacentElement("afterend",this._dialog),c.default.registerDialog(this._dialog),this._dialog.className=this.modalClassName,this._dialog.showModal(),se(this._dialog,{behavior:"smooth",block:"end"}).catch(function(){return e._dialog.scrollIntoView(!1)}),this._dialog.addEventListener("click",this.close),this._dialog.addEventListener("cancel",this.close),this._dialog.addEventListener("close",this.close)}},n.close=function(){var e=this;this._dialog&&(this._dialog.close(),this._dialog.remove(),this._dialog=null,se(this.el,{behavior:"smooth",block:"end"}).catch(function(){return e.el.scrollIntoView(!1)}))},d(t,[{key:"src",get:function(){return this.hasSrcValue?this.srcValue:this.el.src}},{key:"srcSet",get:function(){return this.hasSrcSetValue?this.srcSetValue:this.el.srcset}},{key:"sizes",get:function(){return this.hasSizesValue?this.sizesValue:this.el.sizes}},{key:"modalClassName",get:function(){return this.hasModalClass?this.modalClass:"image-lightbox-dialog"}},{key:"imageClassName",get:function(){return this.hasImageClass?this.imageClass:"image-lightbox-image"}}]),t}(b);le.values={src:String,srcSet:String,sizes:String},le.classes=["modal","image"];var ce=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this.handleInputs=this.handleInputs.bind(this)},n.connect=function(){var e=this;this.inputTargets.forEach(function(t){return t.addEventListener("change",e.handleInputs)})},n.disconnect=function(){var e=this;this.inputTargets.forEach(function(t){return t.removeEventListener("change",e.handleInputs)})},n.handleInputs=function(e){var t=this.inputTargets.reduce(function(e,t){return t.checked?e+1:e},0),n=e.target;t>this.maxValue?(e.preventDefault(),n.checked=!1,this.dispatch(n,"change"),this.dispatch(n,"limited-selection:too-many"),this.hasErrorTarget&&(this.errorTarget.innerHTML=this.messageValue)):(this.dispatch(n,"limited-selection:selection"),this.hasErrorTarget&&(this.errorTarget.innerHTML=""))},t}(b);ce.targets=["input","error"],ce.values={max:Number,message:String};var ue=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){this.checkStructure()},n.add=function(e){null==e||e.preventDefault();var t=this.templateTarget.innerHTML.replace(/NEW_RECORD/g,this.generateID());this.targetTarget.insertAdjacentHTML(this.insertMode,t)},n.remove=function(e){e.preventDefault();var t=e.target.closest("."+this.wrapperClass);if(null==t)throw new Error("#remove was clicked from outside of a child record. Could not find an ancestor with class ."+this.wrapperClass);if("true"===t.dataset.newRecord)t.remove();else{t.style.display="none";var n=t.querySelector("input[name*='_destroy']");if(null==n)throw new Error("Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.");n.value="1"}},n.generateID=function(){return(new Date).getTime().toString()+Math.random().toString().slice(2)},n.checkStructure=function(){if(this.templateTarget.innerHTML.indexOf("NEW_RECORD"))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`")},d(t,[{key:"wrapperClass",get:function(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}},{key:"insertMode",get:function(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}}]),t}(b);ue.targets=["target","template"],ue.values={insertMode:String,wrapperClass:String};var he=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this.checkPasswordsMatch=this.checkPasswordsMatch.bind(this)},n.connect=function(){var e=this;this.passwordTargets.forEach(function(t){return t.addEventListener("change",e.checkPasswordsMatch)})},n.disconnect=function(){var e=this;this.passwordTargets.forEach(function(t){return t.removeEventListener("change",e.checkPasswordsMatch)})},n.allPasswordsMatch=function(){var e=new Set(this.passwordTargets.map(function(e){return e.value}));return e.has("")||1==e.size},n.checkPasswordsMatch=function(){var e=this,t=this.el;this.allPasswordsMatch()?(this.dispatch(t,"password-confirm:match"),this.hasErrorClass&&this.passwordTargets.forEach(function(t){return t.classList.remove(e.errorClass)})):(this.dispatch(t,"password-confirm:no-match"),this.hasErrorClass&&this.passwordTargets.forEach(function(t){return t.classList.add(e.errorClass)}))},t}(b);he.targets=["password"],he.classes=["error"];var de=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.peak=function(e){null==e||e.preventDefault(),this.passwordTarget.type="text"},n.hide=function(e){null==e||e.preventDefault(),this.passwordTarget.type="password"},n.toggle=function(e){null==e||e.preventDefault(),"password"===this.passwordTarget.type?this.peak():this.hide()},t}(b);de.targets=["password"];var fe=function(e){function t(){return e.apply(this,arguments)||this}return p(t,e),t.prototype.replace=function(e){var t=e.detail[0];if(t instanceof Node){var n=t.querySelector(this.selector);if(null==n)throw new Error('expected new form DOM with [data-controller="'+this.identifier+'"] to be present in returned payload');var i=this.el.parentNode;if(null==i)throw new Error("expected form to have a DOM parent, could not execute replaceChild");i.replaceChild(n,this.el)}else console.log("Unknown",t)},d(t,[{key:"selector",get:function(){return this.hasSelectorValue?this.selectorValue:'[data-controller~="'+this.identifier+'"]'}}]),t}(b);fe.targets=[],fe.values={selector:String};var pe=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this.messageReceived=this.messageReceived.bind(this)},n.connect=function(){window.addEventListener("message",this.messageReceived)},n.disconnect=function(){window.removeEventListener("message",this.messageReceived)},n.messageReceived=function(e){var t=e.data;t.hasOwnProperty("name")&&"iframe-body"===t.name&&t.hasOwnProperty("height")&&this.resize(t.height)},n.resize=function(e){this.el.style.height=e+"px"},t}(b),me=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){var e,t,n;window.self!==window.top&&(M(this),t={},null===(n=(e=this).constructor.debounces)||void 0===n||n.forEach(n=>{if("string"==typeof n&&(e[n]=O(e[n],null==t?void 0:t.wait)),"object"==typeof n){const{name:i,wait:r}=n;if(!i)return;e[i]=O(e[i],r||(null==t?void 0:t.wait))}}),this.postUpdate())},n.windowResize=function(e){this.postUpdate()},n.postUpdate=function(){var e={name:"iframe-body",height:this.getHeight()};window.parent.postMessage(e,"*")},n.getHeight=function(){var e=document.body,t=document.documentElement;return Math.max(e.scrollHeight,e.offsetHeight,t.clientHeight,t.scrollHeight,t.offsetHeight)},t}(b);me.debounces=["postUpdate"];var ge=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n._cleanupSelf=function(){this.cleanup(this.el)},n.cleanup=function(e){var t,n,i,r=this;e.dataset.controller=(null==(t=e.dataset.controller)?void 0:t.replaceAll(new RegExp("(s|^)"+this.identifier+"(s|$)","g"),""))||"",""==e.dataset.controller&&delete e.dataset.controller;var s=new RegExp("(s|^)"+this.identifier+"\\..+?(s|$)","g");e.dataset.target=(null==(n=e.dataset.target)?void 0:n.replaceAll(s,""))||"",delete e.dataset[u.default(this.identifier+"-target")],""==e.dataset.target&&delete e.dataset.target,e.dataset.action=(null==(i=e.dataset.target)?void 0:i.replaceAll(s,""))||"",delete e.dataset[u.default(this.identifier+"-action")],""==e.dataset.action&&delete e.dataset.action;var o=this.constructor.values;o&&Object.keys(o).forEach(function(t){return delete e.dataset[u.default(r.identifier+"-"+t+"-value")]});var a=this.constructor.classes;a&&Object.keys(a).forEach(function(t){return delete e.dataset[u.default(r.identifier+"-"+t+"-class")]})},t}(b),ve=function(e){function t(){return e.apply(this,arguments)||this}return p(t,e),t.prototype.connect=function(){var e=this;requestAnimationFrame(function(){se(e.el,{behavior:e.hasBehaviorValue?e.behaviorValue:"smooth",block:e.hasBlockValue?e.blockValue:"center",inline:e.hasInlineValue?e.inlineValue:"center"}).catch(function(){return e.el.scrollIntoView()}),e._cleanupSelf()})},t}(ge);ve.values={behavior:String,block:String,inline:String};var be=function(e){function t(){return e.apply(this,arguments)||this}return p(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ae(this.el))&&se(t,{behavior:"smooth",block:"end"}).catch(function(){return t.scrollIntoView(!1)})},t}(b);be.values={mode:String};var ye=function(e){function t(){return e.apply(this,arguments)||this}return p(t,e),t.prototype.scroll=function(){var e=document.querySelector(this.selectorValue);e?se(e,{behavior:this.hasBehaviorValue?this.behaviorValue:"smooth",block:this.hasBlockValue?this.blockValue:"center",inline:this.hasInlineValue?this.inlineValue:"center"}).catch(function(){return e.scrollIntoView()}):console.warn("Could not find target for '"+this.selectorValue+"'")},t}(b);ye.values={selector:String,behavior:String,block:String,inline:String};var Ee=function(e){function t(){return e.apply(this,arguments)||this}return p(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ae(this.el))&&se(t,{behavior:"smooth",block:"start"}).catch(function(){return t.scrollIntoView(!1)})},t}(b);Ee.values={mode:String};var we=function(e){function t(){var t;return(t=e.apply(this,arguments)||this).timeout=null,t}p(t,e);var n=t.prototype;return n.connect=function(){var e=this;requestAnimationFrame(function(){e.timeout=setTimeout(function(){return e.el.remove()},1e3*e.secondsValue)})},n.disconnect=function(){this.timeout&&clearTimeout(this.timeout)},t}(b);we.values={seconds:Number};var Ce=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._magicElement=null,t}p(t,e);var n=t.prototype;return n.createMagicElement=function(){if(null===this._magicElement)switch(this._magicElement=document.createElement("div"),this._mode){case"top":this.el.insertAdjacentElement("beforebegin",this._magicElement);break;case"bottom":this.el.insertAdjacentElement("afterend",this._magicElement)}},n.connect=function(){var e=this,t=this.el;this.createMagicElement(),new IntersectionObserver(function(n){n.forEach(function(n){n.target===e._magicElement&&(0===n.intersectionRatio?t.classList.add(e.hasStuckClass?e.stuckClass:"stuck"):1===n.intersectionRatio&&t.classList.remove(e.hasStuckClass?e.stuckClass:"stuck"))})},{threshold:[0,1]}).observe(this._magicElement)},d(t,[{key:"_mode",get:function(){return this.hasModeValue?this.modeValue:"top"}}]),t}(b);Ce.classes=["stuck"],Ce.values={mode:String};var ke=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){var e=this;if(!this.hasInsertValue)throw new Error("`insert` value was not specified");requestAnimationFrame(function(){e.hasImmediateValue&&e.immediateValue&&e.execute()})},n.execute=function(e){null==e||e.preventDefault();var t=this.el,n=document.querySelector(this.targetValue);if(null!=n){var i=t.cloneNode(!0);switch(this.cleanup(i),this.insertValue){case"beforebegin":case"beforeend":case"afterend":case"afterbegin":n.insertAdjacentHTML(this.insertValue,i.outerHTML);break;case"replaceOuter":n.outerHTML=i.outerHTML;break;case"replaceInner":n.innerHTML=i.outerHTML;break;case"prepend":n.insertAdjacentHTML("afterbegin",i.outerHTML);break;case"append":n.insertAdjacentHTML("beforeend",i.outerHTML);break;default:throw new Error("`insert` value was not specified")}t.remove()}else this.dispatch(t,"teleport:error")},t}(ge);ke.values={target:String,insert:String,immediate:Boolean};var Ve=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){var e=this;if(!this.hasClassValue)throw new Error("data-toggle-class-class-value must not be empty");(this.hasMouseEnterValue||this.hasMouseLeaveValue)&&((e,t={})=>{new x(this,t)})(),this.hasClickAwayValue&&this.clickAwayValue&&((e,t={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},S,t),o=r=>{const o=(null==t?void 0:t.element)||e.element;if(!(o.contains(r.target)||!function(e){const t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return t.top<=n&&t.top+t.height>=0&&t.left<=i&&t.left+t.width>=0}(o)&&n)&&(e.clickOutside&&e.clickOutside(r),i)){const t=k("click:outside",e,s),n=V(t,r,{controller:e});o.dispatchEvent(n)}},a=e.disconnect.bind(e);Object.assign(e,{disconnect(){null==r||r.forEach(e=>{window.removeEventListener(e,o,!1)}),a()}}),null==r||r.forEach(e=>{window.addEventListener(e,o,!1)})})(this),requestAnimationFrame(function(){e.hasInitialValue&&e.toggleTargets.forEach("on"===e.initialValue?function(t){return e.elementOn(t)}:function(t){return e.elementOff(t)})})},n.clickOutside=function(){var e=this;this.toggleTargets.forEach(function(t){e.elementWasToggled(t)&&(e.elementToggleStatus(t),e.elementToggle(t))})},n.mouseEnter=function(){if(this.hasMouseEnterValue)switch(this.mouseEnterValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}},n.mouseLeave=function(){if(this.hasMouseLeaveValue)switch(this.mouseLeaveValue){case"on":this.on();break;case"off":this.off();break;case"toggle":this.toggle()}return{}},n.on=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementOn(e)})},n.off=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementOff(e)})},n.toggle=function(e){var t=this;this.toggleTargets.forEach(function(e){t.elementToggleStatus(e),t.elementToggle(e)})},n.elementWasToggled=function(e){return"true"==e.dataset.toggled},n.elementToggleStatus=function(e){this.elementWasToggled(e)?delete e.dataset.toggled:e.dataset.toggled="true"},n.elementToggle=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t)})},n.elementOn=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t,!0)})},n.elementOff=function(e){this.classValue.split(" ").forEach(function(t){return e.classList.toggle(t,!1)})},t}(b);function Te(e){return"TURBO-FRAME"==e.nodeName}Ve.targets=["toggle"],Ve.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var _e=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.toggle=function(e){null==e||e.preventDefault();var t=this._getFrame().src;null==t||t!==this._getSrc()?this._setSrc():this._clear()},n.setSrc=function(e){null==e||e.preventDefault(),this._setSrc()},n.clear=function(e){null==e||e.preventDefault(),this._clear()},n._setSrc=function(){var e=this._getFrame();this.hasLoadingMessageValue&&(e.innerHTML=this.loadingMessageValue),e.src=this._getSrc()},n._clear=function(){var e=this._getFrame();e.src="",e.innerHTML=""},n._getFrame=function(){var e=document.getElementById(""+this.frameIdValue);if(null==e)throw new Error("Could not find frame with ID '"+this.frameIdValue+"'");if(Te(e))return e;throw new Error("Element targeted by ID '"+this.frameIdValue+"'")},n._getSrc=function(){var e=this.el;if(this.hasSrcValue)return this.srcValue;if(P(e))return e.href;throw new Error("No link given to drive frame to")},t}(b);_e.values={frameId:String,src:String,loadingMessage:String};var Se=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._timeoutHandle=null,t}p(t,e);var n=t.prototype;return n.initialize=function(){this.refresh=this.refresh.bind(this)},n.connect=function(){var e=this,t=this.el;if(!Te(t))throw new Error("Expected controller to be mounted on a element.");if(t.src)throw new Error("The provided element has no `src` attribute.");this.poll&&requestAnimationFrame(function(){return e._timeoutHandle=setTimeout(function(){return e.refresh()},e.intervalValue)})},n.disconnect=function(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)},n.refresh=function(e){null==e||e.preventDefault();var t=this.el;t.src=t.src},d(t,[{key:"poll",get:function(){return!!this.hasPollValue&&this.pollValue}}]),t}(b);Se.values={interval:Number,poll:Boolean};var Le=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this.updateWordCount=this.updateWordCount.bind(this)},n.connect=function(){this.updateWordCount(),this.inputTarget.addEventListener("input",this.updateWordCount)},n.disconnect=function(){this.inputTarget.removeEventListener("input",this.updateWordCount)},n.updateWordCount=function(){var e=0,t=this.inputTarget.value.match(/\S+/g);this.outputTarget.innerText=(e=t&&t.length||0).toString(),this.hasErrorClass&&(this.isValidCount(e)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n.isValidCount=function(e){var t=0,n=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(n=this.maxValue),e>=t&&e<=n},t}(b);Le.targets=["input","output"],Le.values={min:Number,max:Number},Le.classes=["error"],e.AppearanceController=y,e.AsyncBlockController=E,e.AutoSubmitFormController=w,e.AutosizeController=A,e.CharCountController=N,e.CheckboxSelectAllController=z,e.ClipboardController=H,e.ConfirmController=W,e.ConfirmNavigationController=$,e.DebugController=U,e.DetectDirtyController=J,e.DisableInputsController=Y,e.DisableWithController=G,e.DismissableController=K,e.ElementSaveController=Q,e.EmptyDomController=X,e.EnableInputsController=Z,e.FallbackImageController=ee,e.FormSaveController=te,e.IntersectionController=ne,e.LazyBlockController=re,e.LightboxImageController=le,e.LimitedSelectionCheckboxesController=ce,e.NestedFormController=ue,e.PasswordConfirmController=he,e.PasswordPeekController=de,e.RemoteFormController=fe,e.ResponsiveIframeBodyController=me,e.ResponsiveIframeWrapperController=pe,e.ScrollIntoFocusController=ve,e.ScrollToBottomController=be,e.ScrollToController=ye,e.ScrollToTopController=Ee,e.SelfDestructController=we,e.StickyController=Ce,e.TeleportController=ke,e.ToggleClassController=Ve,e.TurboFrameRCController=_e,e.TurboFrameRefreshController=Se,e.WordCountController=Le}); //# sourceMappingURL=stimulus-library.umd.js.map diff --git a/dist/stimulus-library.umd.js.map b/dist/stimulus-library.umd.js.map index 437ac2f4..50c494c9 100644 --- a/dist/stimulus-library.umd.js.map +++ b/dist/stimulus-library.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"stimulus-library.umd.js","sources":["../src/base_controller.ts","../src/appearance_controller.ts","../src/async_block_controller.ts","../src/auto_submit_form_controller.ts","../node_modules/stimulus-use/dist/support/index.js","../node_modules/stimulus-use/dist/use-intersection/use-intersection.js","../node_modules/stimulus-use/dist/use-click-outside/use-click-outside.js","../node_modules/stimulus-use/dist/stimulus_use.js","../node_modules/stimulus-use/dist/use-hover/use-hover.js","../node_modules/stimulus-use/dist/use-mutation/use-mutation.js","../node_modules/stimulus-use/dist/use-window-resize/use-window-resize.js","../node_modules/stimulus-use/dist/use-debounce/use-debounce.js","../src/autosize_controller.ts","../src/char_count_controller.ts","../src/checkbox_select_all_controller.ts","../src/clipboard_controller.ts","../src/utilities/elements.ts","../src/confirm_controller.ts","../src/confirm_navigation_controller.ts","../src/debug_controller.ts","../src/detect_dirty_controller.ts","../src/disable_inputs_controller.ts","../src/disable_with_controller.ts","../src/dismissable_controller.ts","../src/empty_dom_controller.ts","../src/enable_inputs_controller.ts","../src/fallback_image_controller.ts","../src/form_save_controller.ts","../src/intersection_controller.ts","../src/utilities/scroll.ts","../src/lazy_block_controller.ts","../src/lightbox_image_controller.ts","../src/limited_selection_checkboxes_controller.ts","../src/nested_form_controller.ts","../src/password_confirm_controller.ts","../src/password_peek_controller.ts","../src/remote_form_controller.ts","../src/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/scroll_into_focus_controller.ts","../src/scroll_to_bottom_controller.ts","../src/scroll_to_controller.ts","../src/scroll_to_top_controller.ts","../src/self_destruct_controller.ts","../src/sticky_controller.ts","../src/teleport_controller.ts","../src/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/turbo_frame_rc_controller.ts","../src/turbo_frame_refresh_controller.ts","../src/word_count_controller.ts"],"sourcesContent":["import {Context, Controller} from \"stimulus\";\n\nexport class BaseController extends Controller {\n\n constructor(context: Context) {\n super(context);\n return new Proxy(this, {\n get: (obj, prop) => {\n let returnVal = Reflect.get(obj, prop);\n let self = this;\n if (logProperty(prop.toString())) {\n if (typeof returnVal == \"function\") {\n return new Proxy(returnVal, {\n apply(target: any, thisArg: any, argArray?: any): any {\n self.log(prop.toString(), {\n args: argArray,\n });\n return Reflect.apply(target, thisArg, argArray);\n },\n });\n } else {\n this.log(prop.toString());\n }\n }\n return returnVal;\n },\n });\n }\n\n get el(): HTMLElement {\n return this.element as HTMLElement;\n }\n\n dispatch(element: HTMLElement, eventName: string, options: CustomEventInit = {}) {\n let mergedOptions = Object.assign({}, {bubbles: true, cancelable: true, detail: {target: element}}, options);\n if (!!mergedOptions.detail.target) {\n mergedOptions.detail.target = element;\n }\n let event = new CustomEvent(eventName, mergedOptions);\n element.dispatchEvent(event);\n }\n\n log(functionName: string, args: {} = {}): void {\n // @ts-ignore\n if (!this.application.debug) {\n return;\n }\n let logger = console;\n logger.groupCollapsed(`%c${this.identifier} %c#${functionName}`, \"color: #3B82F6\", \"color: unset\");\n logger.log({\n element: this.element,\n ...args,\n });\n logger.groupEnd();\n }\n\n}\n\nfunction logProperty(prop: string): boolean {\n switch (prop) {\n case \"application\":\n case \"el\":\n case \"element\":\n case \"constructor\":\n case \"initialize\":\n case \"log\":\n case \"dispatch\":\n case \"data\":\n case \"valueDescriptorMap\":\n case \"identifier\":\n return false;\n }\n\n if (/^_.*?$/.test(prop)) {\n return false;\n }\n if (/^.*?Target(s)?$/.test(prop)) {\n return false;\n }\n if (/^.*?Value$/.test(prop)) {\n return false;\n }\n if (/^.*?ValueChanged$/.test(prop)) {\n return false;\n }\n if (/^.*?Class$/.test(prop)) {\n return false;\n }\n\n return true;\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class AppearanceController extends BaseController {\r\n\r\n initialize() {\r\n this._handleVisibility = this._handleVisibility.bind(this);\r\n }\r\n\r\n connect() {\r\n window.addEventListener(\"focus\", this._handleVisibility);\r\n window.addEventListener(\"blur\", this._handleVisibility);\r\n document.addEventListener(\"visibilitychange\", this._handleVisibility);\r\n this._handleVisibility();\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"focus\", this._handleVisibility);\r\n window.removeEventListener(\"blur\", this._handleVisibility);\r\n document.removeEventListener(\"visibilitychange\", this._handleVisibility);\r\n }\r\n\r\n appear() {\r\n this.dispatch(this.el, \"appearance:appear\");\r\n }\r\n\r\n away() {\r\n this.dispatch(this.el, \"appearance:away\");\r\n }\r\n\r\n _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\n\nexport class AsyncBlockController extends BaseController {\n static targets = [\"replace\"];\n static values = {endpoint: String, errorMessage: String, selector: String};\n\n declare readonly replaceTarget: HTMLElement;\n declare readonly hasReplaceTarget: boolean;\n declare readonly endpointValue: string;\n\n declare readonly hasSelectorValue: boolean;\n declare readonly selectorValue: string;\n\n declare readonly hasErrorMessageValue: boolean;\n declare readonly errorMessageValue: string;\n\n get _errorMessage(): string {\n return this.hasErrorMessageValue ? this.errorMessageValue : \"This content failed to load\";\n }\n\n // This is a simple controller to load a block of content when the page loads.\n // It should be used to give a quick initial response before calling out to an\n // an AJAX endpoint to do some expensive work.\n connect() {\n this.loadContent();\n }\n\n loadContent() {\n let self = this;\n let el = this.hasReplaceTarget ? this.replaceTarget : this.el;\n fetch(this.endpointValue)\n .then((response) => response.text())\n .then((html) => {\n let newEl = document.createElement(\"div\");\n newEl.innerHTML = html;\n if (this.hasSelectorValue) {\n let selectedContent = newEl.querySelectorAll(this.selectorValue);\n el.replaceWith(...selectedContent);\n } else {\n el.replaceWith(...newEl.children);\n }\n // Trigger event to show block has loaded\n self.dispatch(el, \"ajax:success\");\n })\n .catch(err => {\n el.replaceWith(this._errorMessage);\n self.dispatch(el, \"ajax:error\");\n })\n .finally(() => {\n self.dispatch(el, \"ajax:complete\");\n });\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class AutoSubmitFormController extends BaseController {\n\n initialize() {\n this.handler = this.handler.bind(this);\n }\n\n connect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.handler));\n }\n\n disconnect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.handler));\n }\n\n private handler(e: Event) {\n // Trigger synthetic \"submit\" event on form\n this.dispatch((this.el), \"submit\");\n }\n}\n","export const method = (controller, methodName) => {\n const method = controller[methodName];\n if (typeof method == 'function') {\n return method;\n }\n else {\n return (...args) => { };\n }\n};\nexport const composeEventName = (name, controller, eventPrefix) => {\n let composedName = name;\n if (eventPrefix === true) {\n composedName = `${controller.identifier}:${name}`;\n }\n else if (typeof eventPrefix === 'string') {\n composedName = `${eventPrefix}:${name}`;\n }\n return composedName;\n};\nexport const extendedEvent = (type, event, detail) => {\n const { bubbles, cancelable, composed } = event || { bubbles: true, cancelable: true, composed: true };\n if (event) {\n Object.assign(detail, { originalEvent: event });\n }\n const customEvent = new CustomEvent(type, {\n bubbles,\n cancelable,\n composed,\n detail,\n });\n return customEvent;\n};\nexport function isElementInViewport(el) {\n const rect = el.getBoundingClientRect();\n const windowHeight = (window.innerHeight || document.documentElement.clientHeight);\n const windowWidth = (window.innerWidth || document.documentElement.clientWidth);\n const vertInView = (rect.top <= windowHeight) && ((rect.top + rect.height) >= 0);\n const horInView = (rect.left <= windowWidth) && ((rect.left + rect.width) >= 0);\n return (vertInView && horInView);\n}\n//# sourceMappingURL=index.js.map","import { method, extendedEvent, composeEventName } from '../support/index';\nconst defaultOptions = {\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useIntersection = (controller, options = {}) => {\n const { dispatchEvent, eventPrefix } = Object.assign({}, defaultOptions, options);\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n const callback = (entries) => {\n const [entry] = entries;\n if (entry.isIntersecting) {\n dispatchAppear(entry);\n }\n else if (controller.isVisible) {\n dispatchDisappear(entry);\n }\n };\n const dispatchAppear = (entry) => {\n controller.isVisible = true;\n method(controller, 'appear').call(controller, entry);\n // emit a custom \"appear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('appear', controller, eventPrefix);\n const appearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(appearEvent);\n }\n };\n const dispatchDisappear = (entry) => {\n controller.isVisible = false;\n method(controller, 'disappear').call(controller, entry);\n // emit a custom \"disappear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('disappear', controller, eventPrefix);\n const disappearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(disappearEvent);\n }\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observer = new IntersectionObserver(callback, options);\n const observe = () => {\n observer.observe(targetElement);\n };\n const unobserve = () => {\n observer.unobserve(targetElement);\n };\n Object.assign(controller, {\n isVisible: false,\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-intersection.js.map","import { composeEventName, extendedEvent, isElementInViewport } from '../support/index';\nconst defaultOptions = {\n events: ['click', 'touchend'],\n onlyVisible: true,\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useClickOutside = (controller, options = {}) => {\n const { onlyVisible, dispatchEvent, events, eventPrefix } = Object.assign({}, defaultOptions, options);\n const onEvent = (event) => {\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n if (targetElement.contains(event.target) || (!isElementInViewport(targetElement) && onlyVisible)) {\n return;\n }\n // call the clickOutside method of the Stimulus controller\n if (controller.clickOutside) {\n controller.clickOutside(event);\n }\n // emit a custom event\n if (dispatchEvent) {\n const eventName = composeEventName('click:outside', controller, eventPrefix);\n const clickOutsideEvent = extendedEvent(eventName, event, { controller });\n targetElement.dispatchEvent(clickOutsideEvent);\n }\n };\n const observe = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.addEventListener(event, onEvent, false);\n });\n };\n const unobserve = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.removeEventListener(event, onEvent, false);\n });\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-click-outside.js.map","const defaultOptions = {\n debug: false,\n logger: console\n};\nexport class StimulusUse {\n constructor(controller, options = {}) {\n var _a, _b, _c;\n this.log = (functionName, args) => {\n if (!this.debug)\n return;\n this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${functionName}`, 'color: #3B82F6', 'color: unset');\n this.logger.log(Object.assign({ controllerId: this.controllerId }, args));\n this.logger.groupEnd();\n };\n this.debug = (_b = (_a = options === null || options === void 0 ? void 0 : options.debug) !== null && _a !== void 0 ? _a : controller.application.stimulusUseDebug) !== null && _b !== void 0 ? _b : defaultOptions.debug;\n this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : defaultOptions.logger;\n this.controller = controller;\n this.controllerId = controller.element.id || controller.element.dataset.id;\n // make copies of lifecycle functions\n this.controllerInitialize = controller.initialize.bind(controller);\n this.controllerConnect = controller.connect.bind(controller);\n this.controllerDisconnect = controller.disconnect.bind(controller);\n }\n}\n//# sourceMappingURL=stimulus_use.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseHover extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n this.targetElement.addEventListener('mouseenter', this.onEnter);\n this.targetElement.addEventListener('mouseleave', this.onLeave);\n };\n this.unobserve = () => {\n this.targetElement.removeEventListener('mouseenter', this.onEnter);\n this.targetElement.removeEventListener('mouseleave', this.onLeave);\n };\n this.onEnter = () => {\n method(this.controller, 'mouseEnter').call(this.controller);\n this.log('mouseEnter', { hover: true });\n };\n this.onLeave = () => {\n method(this.controller, 'mouseLeave').call(this.controller);\n this.log('mouseLeave', { hover: false });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useHover = (controller, options = {}) => {\n const observer = new UseHover(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-hover.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseMutation extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n try {\n this.observer.observe(this.targetElement, this.options);\n }\n catch (error) {\n this.controller.application.handleError(error, \"At a minimum, one of childList, attributes, and/or characterData must be true\", {});\n }\n };\n this.unobserve = () => {\n this.observer.disconnect();\n };\n this.mutation = (entries) => {\n method(this.controller, 'mutate').call(this.controller, entries);\n this.log('mutate', { entries });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.options = options;\n this.observer = new MutationObserver(this.mutation);\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useMutation = (controller, options = {}) => {\n const observer = new UseMutation(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-mutation.js.map","import { method } from '../support/index';\nexport const useWindowResize = (controller) => {\n const callback = (event) => {\n const { innerWidth, innerHeight } = window;\n const payload = {\n height: innerHeight || Infinity,\n width: innerWidth || Infinity,\n event\n };\n method(controller, 'windowResize').call(controller, payload);\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observe = () => {\n window.addEventListener('resize', callback);\n callback();\n };\n const unobserve = () => {\n window.removeEventListener('resize', callback);\n };\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-window-resize.js.map","import { Controller } from 'stimulus';\nclass DebounceController extends Controller {\n}\nDebounceController.debounces = [];\nconst defaultWait = 200;\nconst debounce = (fn, wait = defaultWait) => {\n let timeoutId = null;\n return function () {\n const args = arguments;\n const context = this;\n const callback = () => fn.apply(context, args);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(callback, wait);\n };\n};\nexport const useDebounce = (controller, options) => {\n var _a;\n const constructor = controller.constructor;\n (_a = constructor.debounces) === null || _a === void 0 ? void 0 : _a.forEach((func) => {\n if (typeof func === \"string\") {\n controller[func] = debounce(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n }\n if (typeof func === \"object\") {\n const { name, wait } = func;\n if (!name)\n return;\n controller[name] = debounce(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n }\n });\n};\n//# sourceMappingURL=use-debounce.js.map","import {useWindowResize} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class AutosizeController extends BaseController {\n\n initialize() {\n this._handler = this._handler.bind(this);\n }\n\n connect() {\n let target = this.el as HTMLTextAreaElement;\n target.style.resize = \"none\";\n target.style.boxSizing = \"border-box\";\n target.addEventListener(\"input\", this._handler);\n target.addEventListener(\"focus\", this._handler);\n useWindowResize(this);\n requestAnimationFrame(this._handler);\n }\n\n windowResize() {\n this._handler();\n }\n\n private _handler() {\n this.autosize(this.el as HTMLTextAreaElement);\n };\n\n private autosize(element: HTMLTextAreaElement) {\n let offset = element.offsetHeight - element.clientHeight;\n element.style.height = \"auto\";\n element.style.height = element.scrollHeight + offset + \"px\";\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class CharCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this._updateCharCount = this._updateCharCount.bind(this);\n }\n\n connect() {\n this._updateCharCount();\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this._updateCharCount);\n }\n\n private _updateCharCount() {\n let charCount = this.inputTarget.value.length;\n this.outputTarget.innerText = charCount.toString();\n if (this.hasErrorClass) {\n if (this._isValidCount(charCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n private _isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n","import {BaseController} from './base_controller';\n\nexport class CheckboxSelectAllController extends BaseController {\n static targets = ['selectAll', 'checkbox'];\n\n declare readonly hasSelectAllTarget: boolean;\n declare readonly selectAllTarget: HTMLInputElement;\n declare readonly checkboxTargets: HTMLInputElement[];\n\n private get checked() {\n return this.checkboxTargets.filter(checkbox => checkbox.checked);\n }\n\n private get unchecked() {\n return this.checkboxTargets.filter(checkbox => !checkbox.checked);\n }\n\n initialize() {\n this.toggle = this.toggle.bind(this);\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.addEventListener('change', this.toggle);\n this.checkboxTargets.forEach(checkbox => checkbox.addEventListener('change', this.refresh));\n this.refresh();\n });\n }\n\n disconnect() {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.removeEventListener('change', this.toggle);\n this.checkboxTargets.forEach((checkbox) => checkbox.removeEventListener('change', this.refresh));\n }\n\n private toggle(event: Event) {\n event.preventDefault();\n let target = event.target as HTMLInputElement;\n this.checkboxTargets.forEach((checkbox) => checkbox.checked = target.checked);\n }\n\n private refresh() {\n const checkboxesCount = this.checkboxTargets.length;\n const checkboxesCheckedCount = this.checked.length;\n\n this.selectAllTarget.checked = checkboxesCheckedCount > 0;\n this.selectAllTarget.indeterminate = checkboxesCheckedCount > 0 && checkboxesCheckedCount < checkboxesCount;\n }\n}","import {BaseController} from \"./base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"button\", \"copy\", \"fallback\"];\r\n static values = {removeUnused: Boolean};\r\n\r\n declare readonly sourceTarget: HTMLElement;\r\n declare readonly copyTarget: HTMLElement;\r\n declare readonly hasCopyTarget: boolean;\r\n declare readonly fallbackTarget: HTMLElement;\r\n declare readonly hasFallbackTarget: boolean;\r\n\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n declare readonly removeUnusedValue: boolean;\r\n\r\n supported = false;\r\n\r\n connect() {\r\n this.supported = document.queryCommandSupported(\"copy\");\r\n\r\n if (this.hasRemoveUnusedValue && this.removeUnusedValue) {\r\n if (this.supported && this.hasFallbackTarget) {\r\n this.fallbackTarget.remove();\r\n } else if (this.hasCopyTarget) {\r\n this.copyTarget.remove();\r\n }\r\n }\r\n }\r\n\r\n select(event: MouseEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n }\r\n\r\n copy(event: ClipboardEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n if (this.supported) {\r\n document.execCommand(\"copy\");\r\n }\r\n }\r\n}\r\n","export function isHTMLLinkElement(element: Element): element is HTMLLinkElement {\n return element.nodeName == \"LINK\";\n}\n\nexport function isHTMLAnchorElement(element: Element): element is HTMLAnchorElement {\n return element.nodeName == \"A\";\n}\n\nexport function isHTMLFormElement(element: Element): element is HTMLFormElement {\n return element.nodeName == \"FORM\";\n}\n\nexport function isHTMLInputElement(element: Element): element is HTMLInputElement {\n return element.nodeName == \"INPUT\";\n}\n\nexport function isHTMLButtonElement(element: Element): element is HTMLButtonElement {\n return element.nodeName == \"BUTTON\";\n}\n\nexport function isHTMLSelectElement(element: Element): element is HTMLSelectElement {\n return element.nodeName == \"SELECT\";\n}\n\nexport function isHTMLImageElement(element: Element): element is HTMLImageElement {\n return element.nodeName == \"IMG\";\n}\n\nexport function isElementCheckable(element: Element): element is HTMLInputElement & { checked: boolean } {\n return isHTMLInputElement(element) && (element.type === \"radio\" || element.type === \"checkbox\");\n}\n","import {BaseController} from './base_controller';\nimport {isHTMLFormElement, isHTMLAnchorElement} from \"./utilities/elements\";\n\nexport class ConfirmController extends BaseController {\n\n static values = {\n message: String,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get message(): string {\n return this.hasMessageValue ? this.messageValue : 'Are you sure?';\n }\n\n initialize() {\n this.confirm = this.confirm.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n let element = this.el;\n if (isHTMLFormElement(element)) {\n element.addEventListener(\"submit\", this.confirm);\n } else if (isHTMLAnchorElement(element)) {\n element.addEventListener(\"click\", this.confirm);\n } else {\n throw new Error(\"Can't handle confirmation on attached element\");\n }\n });\n }\n\n confirm(event: Event) {\n if (!(window.confirm(this.message))) {\n event.preventDefault();\n this.dispatch(this.el, \"confirm:cancelled\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class ConfirmNavigationController extends BaseController {\n\n static values = {_message: String};\n\n declare readonly _messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get _message(): string {\n return this.hasMessageValue ? this._messageValue : \"Do you want to leave this page? Changes you made may not be saved\";\n }\n\n initialize() {\n this.handlePopstate = this.handlePopstate.bind(this);\n this.handleTurboNavigation = this.handleTurboNavigation.bind(this);\n }\n\n connect() {\n window.onbeforeunload = () => this._message;\n window.addEventListener(\"popstate\", this.handlePopstate);\n window.addEventListener(\"submit\", () => {\n window.removeEventListener(\"popstate\", this.handlePopstate);\n window.onbeforeunload = null;\n });\n window.addEventListener(\"turbolinks:before-visit\", this.handleTurboNavigation);\n window.addEventListener(\"turbo:before-visit\", this.handleTurboNavigation);\n }\n\n handlePopstate(_event: PopStateEvent) {\n return false;\n }\n\n handleTurboNavigation(event: Event) {\n if (!confirm(this._message)) {\n event.preventDefault();\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DebugController extends BaseController {\n\n static targets = [\"test\"];\n declare testTargets: HTMLElement[];\n\n connect() {\n console.log(\"Debug Controller\", this, this.testTargets);\n }\n}\n","import {BaseController} from \"./base_controller\";\nimport {isElementCheckable, isHTMLSelectElement} from \"./utilities/elements\";\n\nexport class DetectDirtyController extends BaseController {\n\n loadValue: null | string | boolean = null;\n\n initialize() {\n this.checkDirty = this.checkDirty.bind(this);\n }\n\n connect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n this.loadValue = element.checked;\n } else {\n this.loadValue = element.value;\n }\n this.checkDirty();\n element.addEventListener(\"input\", this.checkDirty);\n element.addEventListener(\"change\", this.checkDirty);\n }\n\n disconnect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n element.removeEventListener(\"input\", this.checkDirty);\n element.removeEventListener(\"change\", this.checkDirty);\n }\n\n restore() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n element.checked = element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n options.forEach((option) => {\n option.selected = option.value == this.loadValue;\n });\n } else {\n options.forEach((option) => option.selected = option.defaultSelected);\n }\n Array.from(element.options).forEach(option => option.selected = option.defaultSelected);\n } else {\n element.value = element.defaultValue;\n }\n }\n\n private checkDirty(_event?: Event) {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\n let dirty: boolean;\n if (isElementCheckable(element)) {\n dirty = element.checked != element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n dirty = element.value != this.loadValue;\n } else {\n dirty = options.some((option) => option.selected != option.defaultSelected);\n }\n } else {\n dirty = element.value != element.defaultValue;\n }\n\n if (dirty) {\n element.setAttribute(\"data-dirty\", \"true\");\n } else {\n element.removeAttribute(\"data-dirty\");\n }\n }\n\n}\n\nexport function isDirty(element: HTMLElement) {\n return element.hasAttribute(\"data-dirty\");\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class DisableInputsController extends BaseController {\r\n\r\n static targets = [\"disabler\", \"disable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasDisablerTarget: boolean;\r\n declare readonly disablerTarget: HTMLInputElement;\r\n declare readonly disableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasDisablerTarget && this.disablerTarget.checked) {\r\n this.disableInputs();\r\n } else {\r\n this.enableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.disableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.disableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from './base_controller';\nimport {isHTMLAnchorElement, isHTMLButtonElement, isHTMLInputElement} from \"./utilities/elements\";\n\nexport class DisableWithController extends BaseController {\n\n static values = {\n message: String,\n timeout: Number,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n declare readonly timeoutValue: number;\n declare readonly hasTimeoutValue: boolean;\n\n _cacheText?: string;\n _timeoutHandle?: ReturnType;\n\n get _message(): string {\n return this.hasMessageValue ? this.messageValue : 'Submitting...';\n }\n\n get _timeout(): number {\n return this.hasTimeoutValue ? this.timeoutValue : 1000;\n }\n\n initialize() {\n this.enable = this.enable.bind(this);\n this.disable = this.disable.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n this.el.addEventListener(\"click\", this.disable);\n });\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n disable(event?: Event) {\n let element = this.el;\n\n if (this._isDisabled(element)) {\n event?.preventDefault();\n event?.stopImmediatePropagation();\n } else {\n this._cacheText = this._getElText(element);\n this._setElText(element, this._message);\n this._disable(element);\n setTimeout(this.enable, this._timeout);\n }\n }\n\n enable(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n if (this._isDisabled(element)) {\n this._setElText(element, this._cacheText!);\n this._enable(element);\n }\n }\n\n _isDisabled(el: HTMLElement): boolean {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n return el.disabled;\n } else {\n return el.dataset.disabled == \"true\";\n }\n }\n\n _getElText(el: HTMLElement): string {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n return el.value;\n } else {\n return el.innerText;\n }\n }\n\n _setElText(el: HTMLElement, str: string) {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n el.value = str;\n } else if (isHTMLButtonElement(el) || isHTMLAnchorElement(el)) {\n el.innerText = str;\n }\n }\n\n _disable(el: HTMLElement) {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n el.disabled = true;\n } else {\n el.dataset.disabled = \"true\";\n }\n }\n\n _enable(el: HTMLElement) {\n if (isHTMLInputElement(el) && el.type == \"submit\" || isHTMLButtonElement(el)) {\n el.disabled = false;\n } else {\n el.dataset.disabled = undefined;\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DismissableController extends BaseController {\n\n dismiss() {\n this.el.remove();\n }\n\n}\n","import {useMutation} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class EmptyDomController extends BaseController {\n\n static classes = [\"empty\", \"notEmpty\"];\n static values = {scopeSelector: String};\n\n declare hasEmptyClass: boolean;\n declare emptyClass: string;\n declare hasNotEmptyClass: boolean;\n declare notEmptyClass: string;\n\n declare hasScopeSelectorValue: boolean;\n declare scopeSelectorValue: string;\n\n get emptyClasses(): string[] {\n return this.emptyClass.split(\" \");\n }\n\n get notEmptyClasses(): string[] {\n return this.notEmptyClass.split(\" \");\n }\n\n get children(): Element[] {\n let element = this.el;\n if (this.hasScopeSelectorValue) {\n return Array.from(element.querySelectorAll(this.scopeSelectorValue));\n } else {\n return Array.from(element.children);\n }\n }\n\n connect() {\n useMutation(this, {element: this.el, childList: true});\n this.checkEmpty();\n }\n\n mutate(entries: MutationRecord[]) {\n this.checkEmpty();\n }\n\n checkEmpty() {\n let element = this.el;\n let children = this.children;\n if (children.length === 0) {\n this._removeNotEmptyClasses();\n this._addEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:empty\");\n } else {\n this._addNotEmptyClasses();\n this._removeEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:not-empty\", {detail: {count: children.length}});\n }\n }\n\n private _removeEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.remove(...this.emptyClasses);\n }\n }\n\n private _addNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.add(...this.notEmptyClasses);\n }\n }\n\n private _addEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.add(...this.emptyClasses);\n }\n }\n\n private _removeNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.remove(...this.notEmptyClasses);\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class EnableInputsController extends BaseController {\r\n\r\n static targets = [\"enabler\", \"enable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasEnablerTarget: boolean;\r\n declare readonly enablerTarget: HTMLInputElement;\r\n declare readonly enableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasEnablerTarget && this.enablerTarget.checked) {\r\n this.enableInputs();\r\n } else {\r\n this.disableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.enableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.enableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class FallbackImageController extends BaseController {\r\n\r\n static values = {placeholder: String};\r\n\r\n declare readonly placeholderValue: string;\r\n declare readonly hasPlaceholderValue: boolean;\r\n\r\n connect() {\r\n let element = this.el as HTMLImageElement;\r\n\r\n element.onerror = () => {\r\n if (this.hasPlaceholderValue) {\r\n element.src = this.placeholderValue;\r\n } else {\r\n element.style.display = \"none\";\r\n }\r\n };\r\n }\r\n\r\n}\r\n","import {BaseController} from './base_controller';\r\nimport {isHTMLFormElement, isHTMLInputElement} from \"./utilities/elements\";\r\n\r\ninterface FormSavePayload {\r\n [idx: string]: {\r\n [idx: string]: string | boolean\r\n }\r\n}\r\n\r\nexport class FormSaveController extends BaseController {\r\n\r\n static values = {\r\n id: String,\r\n restoreOnLoad: Boolean,\r\n clearOnSubmit: Boolean,\r\n };\r\n\r\n declare readonly idValue: string;\r\n declare readonly hasIdValue: boolean;\r\n declare readonly restoreOnLoadValue: boolean;\r\n declare readonly hasRestoreOnLoadValue: boolean;\r\n declare readonly clearOnSubmitValue: boolean;\r\n declare readonly hasClearOnSubmitValue: boolean;\r\n\r\n get formID() {\r\n if (this.hasIdValue) {\r\n return this.idValue;\r\n }\r\n let elementID = (this.el as HTMLFormElement).id;\r\n\r\n if (elementID !== \"\") {\r\n return elementID;\r\n } else {\r\n throw new Error(`No ID value to uniquely identify this form. Please either specify data-${this.identifier}-id-value or give this form an 'id' attribute. `);\r\n }\r\n }\r\n\r\n get formIdentifier() {\r\n const url = location.href;\r\n return `${url} ${this.formID}`;\r\n }\r\n\r\n get formElements() {\r\n return (this.el as HTMLFormElement).elements;\r\n }\r\n\r\n get formData(): FormSavePayload {\r\n let data: FormSavePayload = {[this.formIdentifier]: {}};\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name.length > 0) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n data[this.formIdentifier][el.name] = el.checked;\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.checked) {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n } else {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n get restoreOnLoad() {\r\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\r\n }\r\n\r\n get clearOnSubmit() {\r\n return this.hasClearOnSubmitValue ? this.clearOnSubmitValue : true;\r\n }\r\n\r\n initialize() {\r\n this._clear = this._clear.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n let element = this.el;\r\n if (!isHTMLFormElement(element)) {\r\n throw new Error('Expected controller to be mounted on a form element.');\r\n }\r\n\r\n if (this.restoreOnLoad) {\r\n this.restore();\r\n }\r\n if (this.clearOnSubmit) {\r\n this.el.addEventListener('submit', this._clear);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.clearOnSubmit) {\r\n this.el.removeEventListener('submit', this._clear);\r\n }\r\n }\r\n\r\n _clear() {\r\n localStorage.removeItem(this.formIdentifier);\r\n this.dispatch(this.el, `form-save:cleared`);\r\n }\r\n\r\n clear(event?: Event) {\r\n event?.preventDefault();\r\n this._clear();\r\n }\r\n\r\n save(event: Event) {\r\n event.preventDefault();\r\n let data = this.formData;\r\n localStorage.setItem(this.formIdentifier, JSON.stringify(data[this.formIdentifier]));\r\n this.dispatch(this.el, `form-save:save:success`);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n if (localStorage.getItem(this.formIdentifier)) {\r\n const savedData = JSON.parse(localStorage.getItem(this.formIdentifier)!); // get and parse the saved data from localStorage\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name in savedData) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n el.checked = savedData[el.name];\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.value == savedData[el.name]) {\r\n el.checked = true;\r\n }\r\n } else {\r\n el.value = savedData[el.name];\r\n }\r\n }\r\n }\r\n this.dispatch(this.el, `form-save:restore:success`);\r\n } else {\r\n this.dispatch(this.el, `form-save:restore:empty`);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {useIntersection} from \"stimulus-use\";\n\nexport class IntersectionController extends BaseController {\n\n static values = {threshold: String};\n\n declare readonly isVisible: boolean;\n declare readonly thresholdValue: string;\n declare readonly hasThresholdValue: boolean;\n\n get threshold(): number[] {\n if (this.hasThresholdValue) {\n return this.thresholdValue.split(',').map(val => Number.parseFloat(val.trim())).filter(val => val >= 0 && val <= 1);\n } else {\n return [0, 1];\n }\n }\n\n connect() {\n useIntersection(this, {\n threshold: this.threshold,\n element: this.el,\n });\n }\n\n appear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:appear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n disappear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:disappear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n}\n","const smoothSupported = \"scrollBehavior\" in document.documentElement.style;\r\nlet smoothPolyfilled: boolean;\r\n\r\nexport async function scrollToElement(element: Element, {behavior = \"smooth\", block = \"start\", inline = \"nearest\"}: ScrollIntoViewOptions = {}) {\r\n if (behavior == \"smooth\" && !smoothSupported) {\r\n await polyfillSmooth();\r\n }\r\n element.scrollIntoView({behavior, block, inline});\r\n}\r\n\r\nasync function polyfillSmooth() {\r\n const {polyfill} = await import(/* webpackChunkName: \"smoothscroll-polyfill\" */ \"smoothscroll-polyfill\");\r\n if (smoothPolyfilled) {\r\n return;\r\n }\r\n smoothPolyfilled = true;\r\n polyfill();\r\n}\r\n\r\nexport function getScrollParent(node: HTMLElement | null): HTMLElement | null {\r\n if (!node) {\r\n return null;\r\n }\r\n const overflowY = getComputedStyle(node).overflowY;\r\n const isScrollable = overflowY !== \"visible\" && overflowY !== \"hidden\";\r\n\r\n if (isScrollable && node.scrollHeight >= node.clientHeight) {\r\n return node;\r\n }\r\n\r\n return getScrollParent(node.parentElement) || document.body;\r\n}\r\n","import {useIntersection} from \"stimulus-use\";\nimport {AsyncBlockController} from \"./async_block_controller\";\n\nexport class LazyBlockController extends AsyncBlockController {\n\n declare observe: () => void;\n declare unobserve: () => void;\n declare isVisible: boolean;\n declare disappear: () => void;\n\n connect() {\n let element = this.el;\n\n if (\"IntersectionObserver\" in window) {\n [this.observe, this.unobserve] = useIntersection(this, {element, threshold: 0.3});\n } else {\n // Client doesn't support intersection observer, fallback to pre-loading\n this.loadContent();\n }\n }\n\n appear(entry: IntersectionObserverEntry) {\n if (entry.target === this.el && entry.isIntersecting) {\n this.loadContent();\n if (this.unobserve) {\n this.unobserve();\n }\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\nimport dialogPolyfill from \"dialog-polyfill\";\r\n\r\nexport class LightboxImageController extends BaseController {\r\n\r\n static values = {\r\n src: String,\r\n srcSet: String,\r\n sizes: String,\r\n };\r\n static classes = [\"modal\", \"image\"];\r\n\r\n declare readonly hasModalClass: boolean;\r\n declare readonly modalClass: string;\r\n declare readonly hasImageClass: boolean;\r\n declare readonly imageClass: string;\r\n declare readonly hasSrcValue: boolean;\r\n declare readonly srcValue: string;\r\n declare readonly hasSrcSetValue: boolean;\r\n declare readonly srcSetValue: string;\r\n declare readonly hasSizesValue: boolean;\r\n declare readonly sizesValue: string;\r\n _dialog: HTMLDialogElement | null = null;\r\n\r\n get src(): string {\r\n return this.hasSrcValue ? this.srcValue : (this.el as HTMLImageElement).src;\r\n }\r\n\r\n get srcSet(): string {\r\n return this.hasSrcSetValue ? this.srcSetValue : (this.el as HTMLImageElement).srcset;\r\n }\r\n\r\n get sizes(): string {\r\n return this.hasSizesValue ? this.sizesValue : (this.el as HTMLImageElement).sizes;\r\n }\r\n\r\n get modalClassName() {\r\n return this.hasModalClass ? this.modalClass : \"image-lightbox-dialog\";\r\n }\r\n\r\n get imageClassName() {\r\n return this.hasImageClass ? this.imageClass : \"image-lightbox-image\";\r\n }\r\n\r\n initialize() {\r\n this.open = this.open.bind(this);\r\n this.close = this.close.bind(this);\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n open() {\r\n let element = this.el as HTMLImageElement;\r\n if (this._dialog) {\r\n return;\r\n }\r\n this._dialog = document.createElement(\"dialog\");\r\n\r\n let image = document.createElement(\"img\") as HTMLImageElement;\r\n image.className = this.imageClassName;\r\n image.src = this.src;\r\n image.srcset = this.srcSet;\r\n image.sizes = this.sizes;\r\n this._dialog.appendChild(image);\r\n\r\n element.insertAdjacentElement(\"afterend\", this._dialog);\r\n dialogPolyfill.registerDialog(this._dialog);\r\n this._dialog.className = this.modalClassName;\r\n this._dialog.showModal();\r\n scrollToElement(this._dialog, {behavior: \"smooth\", block: \"end\"}).catch(() => this._dialog!.scrollIntoView(false));\r\n this._dialog.addEventListener(\"click\", this.close);\r\n this._dialog.addEventListener(\"cancel\", this.close);\r\n this._dialog.addEventListener(\"close\", this.close);\r\n }\r\n\r\n close() {\r\n if (this._dialog) {\r\n this._dialog.close();\r\n this._dialog.remove();\r\n this._dialog = null;\r\n scrollToElement(this.el, {behavior: \"smooth\", block: \"end\"}).catch(() => this.el.scrollIntoView(false));\r\n }\r\n }\r\n\r\n} ","import {BaseController} from \"./base_controller\";\n\nexport class LimitedSelectionCheckboxesController extends BaseController {\n\n static targets = [\"input\", \"error\"];\n static values = {max: Number, message: String};\n\n declare readonly hasErrorTarget: boolean;\n declare readonly errorTarget: HTMLElement;\n declare readonly inputTargets: HTMLInputElement[];\n declare readonly maxValue: number;\n declare readonly messageValue: string;\n\n initialize() {\n this.handleInputs = this.handleInputs.bind(this);\n }\n\n connect() {\n this.inputTargets.forEach((el) => el.addEventListener(\"change\", this.handleInputs));\n }\n\n disconnect() {\n this.inputTargets.forEach((el) => el.removeEventListener(\"change\", this.handleInputs));\n }\n\n handleInputs(event: Event) {\n let tickedInputs = this.inputTargets.reduce((previousValue, el) => el.checked ? previousValue + 1 : previousValue, 0);\n let target = event.target as HTMLInputElement;\n if (tickedInputs > this.maxValue) {\n event.preventDefault();\n target.checked = false;\n this.dispatch(target, \"change\");\n this.dispatch(target, \"limited-selection:too-many\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = this.messageValue;\n }\n } else {\n this.dispatch(target, \"limited-selection:selection\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = \"\";\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class NestedFormController extends BaseController {\n static targets = ['target', 'template'];\n static values = {\n insertMode: String,\n wrapperClass: String,\n };\n\n declare readonly targetTarget: HTMLElement;\n declare readonly templateTarget: HTMLTemplateElement | HTMLScriptElement;\n\n declare readonly wrapperClassValue: string;\n declare readonly hasWrapperSelectorValue: boolean;\n declare readonly insertModeValue: InsertPosition;\n declare readonly hasInsertModeValue: boolean;\n\n get wrapperClass() {\n return this.hasWrapperSelectorValue ? this.wrapperClassValue : 'nested-fields';\n }\n\n get insertMode(): InsertPosition {\n return this.hasInsertModeValue ? this.insertModeValue : 'beforeend';\n }\n\n connect() {\n this.checkStructure();\n }\n\n add(event?: Event) {\n event?.preventDefault();\n\n const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, this.generateID());\n this.targetTarget.insertAdjacentHTML(this.insertMode, content);\n }\n\n remove(event: Event) {\n event.preventDefault();\n const wrapper: HTMLElement | null = (event.target as HTMLElement).closest(`.${this.wrapperClass}`);\n if (wrapper == null) {\n throw new Error(`#remove was clicked from outside of a child record. Could not find an ancestor with class .${this.wrapperClass}`);\n }\n\n if (wrapper.dataset.newRecord === 'true') {\n wrapper.remove();\n } else {\n wrapper.style.display = 'none';\n let destroyInput = wrapper.querySelector(\"input[name*='_destroy']\") as HTMLInputElement | null;\n if (destroyInput == null) {\n throw new Error(`Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.`);\n }\n\n destroyInput.value = \"1\";\n }\n }\n\n generateID(): string {\n return new Date().getTime().toString() + Math.random().toString().slice(2);\n }\n\n private checkStructure() {\n let template = this.templateTarget.innerHTML;\n\n if (template.indexOf('NEW_RECORD')) {\n 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`\");\n }\n }\n}","import {BaseController} from \"./base_controller\";\n\nexport class PasswordConfirmController extends BaseController {\n\n static targets = [\"password\"];\n static classes = [\"error\"];\n\n declare readonly passwordTargets: HTMLInputElement[];\n\n declare readonly errorClass: string;\n declare readonly hasErrorClass: boolean;\n\n initialize() {\n this.checkPasswordsMatch = this.checkPasswordsMatch.bind(this);\n }\n\n connect() {\n this.passwordTargets.forEach((el) => el.addEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n disconnect() {\n this.passwordTargets.forEach((el) => el.removeEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n private allPasswordsMatch(): boolean {\n let values = new Set(this.passwordTargets.map(el => el.value)); // Create a unique set of the password values\n 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)\n }\n\n private checkPasswordsMatch() {\n let element = this.el;\n if (this.allPasswordsMatch()) {\n this.dispatch(element, \"password-confirm:match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.remove(this.errorClass));\n }\n } else {\n this.dispatch(element, \"password-confirm:no-match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.add(this.errorClass));\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class PasswordPeekController extends BaseController {\n\n static targets = [\"password\"];\n\n declare readonly passwordTarget: HTMLInputElement;\n\n peak(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"text\";\n }\n\n hide(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"password\";\n }\n\n toggle(event?: Event) {\n event?.preventDefault();\n if (this.passwordTarget.type === \"password\") {\n this.peak();\n } else {\n this.hide();\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class RemoteFormController extends BaseController {\r\n static targets = [];\r\n\r\n static values = {selector: String};\r\n\r\n declare readonly hasSelectorValue: boolean;\r\n declare readonly selectorValue: string;\r\n\r\n get selector(): string {\r\n return this.hasSelectorValue ? this.selectorValue : `[data-controller~=\"${this.identifier}\"]`;\r\n }\r\n\r\n replace(event: { detail: [Element, any, XMLHttpRequest] }) {\r\n const [data, status, xhr] = event.detail;\r\n if (data instanceof Node) {\r\n let new_element = data.querySelector(this.selector);\r\n\r\n if (new_element == null) {\r\n throw new Error(`expected new form DOM with [data-controller=\"${this.identifier}\"] to be present in returned payload`);\r\n }\r\n\r\n let parentNode = this.el.parentNode;\r\n if (parentNode == null) {\r\n throw new Error('expected form to have a DOM parent, could not execute replaceChild');\r\n }\r\n parentNode.replaceChild(new_element, this.el);\r\n } else {\r\n console.log('Unknown', data);\r\n }\r\n }\r\n}\r\n","import {useDebounce, useWindowResize} from \"stimulus-use\";\nimport {WindowResizePayload} from \"stimulus-use/dist/use-window-resize/use-window-resize\";\nimport {BaseController} from \"./base_controller\";\n\ninterface ResponsiveIframeMessage {\n name: string,\n height: number,\n}\n\nexport class ResponsiveIframeWrapperController extends BaseController {\n\n initialize() {\n this.messageReceived = this.messageReceived.bind(this);\n }\n\n connect() {\n window.addEventListener(\"message\", this.messageReceived);\n }\n\n disconnect() {\n window.removeEventListener(\"message\", this.messageReceived);\n }\n\n messageReceived(message: MessageEvent) {\n let data = message.data;\n if (data.hasOwnProperty(\"name\") && data.name === \"iframe-body\" && data.hasOwnProperty(\"height\")) {\n this.resize(data.height);\n }\n }\n\n resize(height: number) {\n (this.el as HTMLIFrameElement).style.height = `${height}px`;\n }\n\n}\n\nexport class ResponsiveIframeBodyController extends BaseController {\n\n static debounces = [\"postUpdate\"];\n\n declare observe: () => void;\n declare unobserve: () => void;\n\n connect() {\n // If this Window is inside a frame\n if (window.self !== window.top) {\n useWindowResize(this);\n useDebounce(this, {});\n this.postUpdate();\n } else {\n // Not an iframe\n }\n }\n\n windowResize(payload: WindowResizePayload) {\n this.postUpdate();\n };\n\n postUpdate() {\n let payload: ResponsiveIframeMessage = {name: \"iframe-body\", height: this.getHeight()};\n window.parent.postMessage(\n payload,\n \"*\",\n );\n }\n\n getHeight(): number {\n const body = document.body;\n const html = document.documentElement;\n\n // Get the largest height out of body and html's various height measurements\n return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n }\n\n}\n","import camelCase from \"camelcase\";\r\nimport {BaseController} from \"../base_controller\";\r\n\r\nexport class EphemeralController extends BaseController {\r\n\r\n _cleanupSelf() {\r\n this.cleanup(this.el);\r\n }\r\n\r\n cleanup(element: HTMLElement) {\r\n element.dataset.controller = element.dataset.controller?.replaceAll(new RegExp(`(\\s|^)${this.identifier}(\\s|$)`, \"g\"), \"\") || \"\";\r\n if (element.dataset.controller == \"\") {\r\n // If there are no controllers left, remove the attribute\r\n delete element.dataset.controller;\r\n }\r\n\r\n let substringIdentifierValueRegex = new RegExp(`(\\s|^)${this.identifier}\\\\..+?(\\s|$)`, \"g\");\r\n element.dataset.target = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-target`)];\r\n if (element.dataset.target == \"\") {\r\n // If there are no targets left, remove the attribute\r\n delete element.dataset.target;\r\n }\r\n\r\n element.dataset.action = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-action`)];\r\n if (element.dataset.action == \"\") {\r\n // If there are no actions left, remove the attribute\r\n delete element.dataset.action;\r\n }\r\n\r\n // @ts-ignore\r\n let values = this.constructor.values;\r\n if (values) {\r\n Object.keys(values).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-value`)]);\r\n }\r\n\r\n // @ts-ignore\r\n let classes = this.constructor.classes;\r\n if (classes) {\r\n Object.keys(classes).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-class`)]);\r\n }\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\n\r\nexport class ScrollIntoFocusController extends EphemeralController {\r\n\r\n static values = {\r\n behavior: String,\r\n block: String,\r\n inline: String,\r\n };\r\n\r\n declare behaviorValue: ScrollBehavior;\r\n declare hasBehaviorValue: boolean;\r\n declare blockValue: ScrollLogicalPosition;\r\n declare hasBlockValue: boolean;\r\n declare inlineValue: ScrollLogicalPosition;\r\n declare hasInlineValue: boolean;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Attempt smooth scrolling, with polyfill\r\n scrollToElement(\r\n this.el,\r\n {\r\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\r\n block: this.hasBlockValue ? this.blockValue : \"center\",\r\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\r\n },\r\n ).catch(() => this.el.scrollIntoView()); // Fallback to snap-scrolling\r\n this._cleanupSelf();\r\n });\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToBottomController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"end\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\nimport {scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToController extends BaseController {\n\n static values = {\n selector: String,\n behavior: String,\n block: String,\n inline: String,\n };\n\n declare selectorValue: string;\n declare behaviorValue: ScrollBehavior;\n declare hasBehaviorValue: boolean;\n declare blockValue: ScrollLogicalPosition;\n declare hasBlockValue: boolean;\n declare inlineValue: ScrollLogicalPosition;\n declare hasInlineValue: boolean;\n\n scroll() {\n let target = document.querySelector(this.selectorValue);\n if (!target) {\n console.warn(`Could not find target for '${this.selectorValue}'`);\n return;\n }\n\n scrollToElement(\n target!,\n {\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\n block: this.hasBlockValue ? this.blockValue : \"center\",\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\n },\n ).catch(() => target!.scrollIntoView()); // Fallback to snap-scrolling\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToTopController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"start\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class SelfDestructController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n timeout: null | ReturnType = null;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Only start countdown on first paint\r\n this.timeout = setTimeout(() => this.el.remove(), this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.timeout) {\r\n clearTimeout(this.timeout);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class StickyController extends BaseController {\r\n\r\n static classes = [\"stuck\"];\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare readonly hasStuckClass: boolean;\r\n declare readonly stuckClass: string;\r\n declare readonly hasModeValue: \"top\" | \"bottom\";\r\n declare readonly modeValue: \"top\" | \"bottom\";\r\n\r\n _magicElement: HTMLDivElement | null = null;\r\n\r\n get _mode(): \"top\" | \"bottom\" {\r\n return this.hasModeValue ? this.modeValue : \"top\";\r\n }\r\n\r\n createMagicElement() {\r\n // Magic element placed next to the sticky el that acts as an external border.\r\n // When the magic element is off the page, we know that the sticky el is \"stuck\"\r\n if (this._magicElement !== null) {\r\n return;\r\n }\r\n\r\n this._magicElement = document.createElement(\"div\");\r\n switch (this._mode) {\r\n case \"top\":\r\n this.el.insertAdjacentElement(\"beforebegin\", this._magicElement);\r\n break;\r\n case \"bottom\":\r\n this.el.insertAdjacentElement(\"afterend\", this._magicElement);\r\n break;\r\n }\r\n }\r\n\r\n connect() {\r\n let element = this.el;\r\n this.createMagicElement();\r\n\r\n const observer = new IntersectionObserver(entries => {\r\n entries.forEach(entry => {\r\n if (entry.target !== this._magicElement) {\r\n return;\r\n }\r\n if (entry.intersectionRatio === 0) {\r\n element.classList.add(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n } else if (entry.intersectionRatio === 1) {\r\n element.classList.remove(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n }\r\n });\r\n\r\n }, {\r\n threshold: [0, 1],\r\n });\r\n observer.observe(this._magicElement!);\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\n\nexport class TeleportController extends EphemeralController {\n\n static values = {target: String, insert: String, immediate: Boolean};\n\n declare readonly immediateValue: boolean;\n declare readonly hasImmediateValue: boolean;\n declare readonly targetValue: string;\n declare readonly hasInsertValue: boolean;\n declare readonly insertValue: InsertPosition | \"replaceOuter\" | \"replaceInner\" | \"prepend\" | \"append\";\n\n connect() {\n if (!this.hasInsertValue) {\n throw new Error(\"`insert` value was not specified\");\n }\n\n requestAnimationFrame(() => {\n if (this.hasImmediateValue && this.immediateValue) {\n this.execute();\n }\n });\n }\n\n execute(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n let destination = document.querySelector(this.targetValue);\n\n if (destination == null) {\n this.dispatch(element, \"teleport:error\");\n return;\n }\n\n let copy = element.cloneNode(true) as HTMLElement;\n this.cleanup(copy);\n\n switch (this.insertValue) {\n case \"beforebegin\":\n case \"beforeend\":\n case \"afterend\":\n case \"afterbegin\":\n destination.insertAdjacentHTML(this.insertValue, copy.outerHTML);\n break;\n case \"replaceOuter\":\n destination.outerHTML = copy.outerHTML;\n break;\n case \"replaceInner\":\n destination.innerHTML = copy.outerHTML;\n break;\n case \"prepend\":\n destination.insertAdjacentHTML(\"afterbegin\", copy.outerHTML);\n break;\n case \"append\":\n destination.insertAdjacentHTML(\"beforeend\", copy.outerHTML);\n break;\n default:\n throw new Error(\"`insert` value was not specified\");\n\n }\n element.remove();\n }\n\n}\n","import {useClickOutside, useHover} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport type ToggleClassMode = \"on\" | \"off\" | \"toggle\"\n\nexport class ToggleClassController extends BaseController {\n\n static targets = [\"toggle\"];\n static values = {\n class: String,\n mouseEnter: String,\n mouseLeave: String,\n clickAway: Boolean,\n initial: String,\n };\n\n declare readonly toggleTargets: HTMLElement[];\n\n declare readonly classValue: string;\n declare readonly hasClassValue: boolean;\n\n declare readonly mouseEnterValue: ToggleClassMode;\n declare readonly hasMouseEnterValue: boolean;\n\n declare readonly mouseLeaveValue: ToggleClassMode;\n declare readonly hasMouseLeaveValue: boolean;\n\n declare readonly clickAwayValue: boolean;\n declare readonly hasClickAwayValue: boolean;\n\n declare readonly initialValue: \"on\" | \"off\";\n declare readonly hasInitialValue: boolean;\n\n connect() {\n if (!this.hasClassValue) {\n throw new Error(\"data-toggle-class-class-value must not be empty\");\n }\n\n if (this.hasMouseEnterValue || this.hasMouseLeaveValue) {\n useHover(this);\n }\n\n if (this.hasClickAwayValue && this.clickAwayValue) {\n useClickOutside(this);\n }\n\n requestAnimationFrame(() => {\n if (this.hasInitialValue) {\n if (this.initialValue === \"on\") {\n this.toggleTargets.forEach((target) => this.elementOn(target));\n } else {\n this.toggleTargets.forEach((target) => this.elementOff(target));\n }\n }\n });\n }\n\n clickOutside() {\n this.toggleTargets.forEach((target) => {\n if (this.elementWasToggled(target)) {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n }\n });\n }\n\n mouseEnter() {\n if (this.hasMouseEnterValue) {\n switch (this.mouseEnterValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n mouseLeave() {\n if (this.hasMouseLeaveValue) {\n switch (this.mouseLeaveValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n on(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOn(target);\n });\n }\n\n off(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOff(target);\n });\n }\n\n toggle(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n });\n }\n\n private elementWasToggled(el: HTMLElement): boolean {\n return el.dataset.toggled == \"true\";\n }\n\n private elementToggleStatus(el: HTMLElement) {\n if (this.elementWasToggled(el)) {\n delete el.dataset.toggled;\n } else {\n el.dataset.toggled = \"true\";\n }\n }\n\n private elementToggle(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass));\n }\n\n private elementOn(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, true));\n }\n\n private elementOff(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, false));\n }\n\n}\n","export function isTurboFrame(element: HTMLElement): element is TurboFrame {\r\n return element.nodeName == \"TURBO-FRAME\";\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {isHTMLAnchorElement} from \"./utilities/elements\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\nexport class TurboFrameRCController extends BaseController {\n\n static values = {\n frameId: String,\n src: String,\n loadingMessage: String,\n };\n\n declare readonly frameIdValue: string;\n declare readonly srcValue: string;\n declare readonly hasSrcValue: boolean;\n declare readonly loadingMessageValue: string;\n declare readonly hasLoadingMessageValue: boolean;\n\n toggle(event?: Event) {\n event?.preventDefault();\n let frame = this._getFrame();\n let frameSrc = frame.src;\n if (frameSrc == null || frameSrc !== this._getSrc()) {\n this._setSrc();\n } else {\n this._clear();\n }\n }\n\n setSrc(event?: Event) {\n event?.preventDefault();\n this._setSrc();\n }\n\n clear(event?: Event) {\n event?.preventDefault();\n this._clear();\n }\n\n private _setSrc() {\n let frame = this._getFrame();\n if (this.hasLoadingMessageValue) {\n frame.innerHTML = this.loadingMessageValue;\n }\n frame.src = this._getSrc();\n }\n\n private _clear() {\n let frame = this._getFrame();\n frame.src = \"\";\n frame.innerHTML = \"\";\n }\n\n private _getFrame(): TurboFrame {\n let frame = document.getElementById(`${this.frameIdValue}`);\n if (frame == null) {\n throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);\n }\n if (!isTurboFrame(frame)) {\n throw new Error(`Element targeted by ID '${this.frameIdValue}'`);\n } else {\n return frame;\n }\n }\n\n private _getSrc(): string {\n let element = this.el;\n if (this.hasSrcValue) {\n return this.srcValue;\n } else if (isHTMLAnchorElement(element)) {\n return element.href;\n } else {\n throw new Error(\"No link given to drive frame to\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\n// noinspection SillyAssignmentJS\nexport class TurboFrameRefreshController extends BaseController {\n\n static values = {\n interval: Number,\n poll: Boolean,\n };\n\n declare readonly intervalValue: number;\n declare readonly pollValue: boolean;\n declare readonly hasPollValue: boolean;\n _timeoutHandle: null | ReturnType = null;\n\n get poll(): boolean {\n return this.hasPollValue ? this.pollValue : false;\n }\n\n initialize() {\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n let element = this.el;\n if (isTurboFrame(element)) {\n if (!!element.src) {\n throw new Error('The provided element has no `src` attribute.');\n }\n } else {\n throw new Error('Expected controller to be mounted on a element.');\n }\n if (this.poll) {\n requestAnimationFrame(() => this._timeoutHandle = setTimeout(() => this.refresh(), this.intervalValue));\n }\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n refresh(event?: Event) {\n event?.preventDefault();\n let element = this.el as TurboFrame;\n element.src = element.src;\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class WordCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this.updateWordCount = this.updateWordCount.bind(this);\n }\n\n connect() {\n this.updateWordCount();\n this.inputTarget.addEventListener(\"input\", this.updateWordCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this.updateWordCount);\n }\n\n updateWordCount() {\n let wordCount = 0;\n let textAreaValue = this.inputTarget.value;\n let matches = textAreaValue.match(/\\S+/g);\n wordCount = (matches && matches.length) || 0;\n this.outputTarget.innerText = wordCount.toString();\n if (this.hasErrorClass) {\n if (this.isValidCount(wordCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n"],"names":["BaseController","context","_this","Proxy","get","obj","prop","returnVal","Reflect","self","test","logProperty","toString","apply","target","thisArg","argArray","log","args","dispatch","element","eventName","options","mergedOptions","Object","assign","bubbles","cancelable","detail","event","CustomEvent","dispatchEvent","functionName","this","application","debug","logger","console","groupCollapsed","identifier","groupEnd","Controller","AppearanceController","initialize","_handleVisibility","bind","connect","window","addEventListener","document","disconnect","removeEventListener","appear","el","away","_documentIsActive","visibilityState","hasFocus","AsyncBlockController","loadContent","hasReplaceTarget","replaceTarget","fetch","endpointValue","then","response","text","html","newEl","createElement","innerHTML","hasSelectorValue","selectedContent","querySelectorAll","selectorValue","replaceWith","children","err","_errorMessage","hasErrorMessageValue","errorMessageValue","endpoint","String","errorMessage","selector","AutoSubmitFormController","handler","forEach","_this2","e","method","controller","methodName","composeEventName","name","eventPrefix","composedName","extendedEvent","type","composed","originalEvent","defaultOptions","useIntersection","targetElement","controllerDisconnect","observer","IntersectionObserver","entries","entry","isIntersecting","isVisible","call","appearEvent","dispatchAppear","disappearEvent","dispatchDisappear","observe","unobserve","[object Object]","events","onlyVisible","StimulusUse","_a","_b","_c","controllerId","stimulusUseDebug","id","dataset","controllerInitialize","controllerConnect","UseHover","super","onEnter","onLeave","hover","enhanceController","UseMutation","error","handleError","mutation","MutationObserver","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","requestAnimationFrame","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","value","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","toggle","refresh","hasSelectAllTarget","selectAllTarget","checkboxTargets","checkbox","preventDefault","checked","checkboxesCount","checkboxesCheckedCount","indeterminate","filter","ClipboardController","supported","queryCommandSupported","hasRemoveUnusedValue","removeUnusedValue","hasFallbackTarget","fallbackTarget","hasCopyTarget","copyTarget","select","sourceTarget","copy","execCommand","isHTMLAnchorElement","nodeName","isHTMLFormElement","isHTMLInputElement","isHTMLButtonElement","isHTMLSelectElement","isElementCheckable","removeUnused","Boolean","ConfirmController","confirm","Error","message","hasMessageValue","messageValue","ConfirmNavigationController","handlePopstate","handleTurboNavigation","onbeforeunload","_message","_event","_messageValue","DebugController","testTargets","DetectDirtyController","checkDirty","loadValue","restore","defaultChecked","Array","from","every","option","defaultSelected","selected","defaultValue","dirty","some","setAttribute","removeAttribute","DisableInputsController","hasDisablerTarget","disablerTarget","disableInputs","enableInputs","shouldClear","hasClearValue","clearValue","disableTargets","_","disabled","clear","DisableWithController","enable","disable","_timeoutHandle","_isDisabled","stopImmediatePropagation","_cacheText","_getElText","_setElText","_disable","_timeout","_enable","str","undefined","hasTimeoutValue","timeoutValue","timeout","DismissableController","dismiss","EmptyDomController","useMutation","childList","checkEmpty","mutate","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","emptyClasses","hasNotEmptyClass","notEmptyClasses","emptyClass","split","notEmptyClass","hasScopeSelectorValue","scopeSelectorValue","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormSaveController","_clear","restoreOnLoad","clearOnSubmit","localStorage","removeItem","formIdentifier","save","setItem","JSON","stringify","formData","getItem","savedData","parse","formElements","hasIdValue","idValue","elementID","location","href","formID","elements","data","hasRestoreOnLoadValue","restoreOnLoadValue","hasClearOnSubmitValue","clearOnSubmitValue","IntersectionController","threshold","disappear","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","smoothPolyfilled","LazyBlockController","scrollToElement","behavior","block","inline","scrollIntoView","smoothSupported","import","polyfill","polyfillSmooth","documentElement","getScrollParent","node","overflowY","getComputedStyle","parentElement","body","LightboxImageController","open","close","_dialog","image","className","imageClassName","srcset","srcSet","sizes","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","modalClassName","showModal","_this3","hasSrcValue","srcValue","hasSrcSetValue","srcSetValue","hasSizesValue","sizesValue","hasModalClass","modalClass","hasImageClass","imageClass","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","NestedFormController","checkStructure","content","templateTarget","replace","generateID","targetTarget","insertAdjacentHTML","insertMode","wrapper","closest","wrapperClass","newRecord","destroyInput","querySelector","Date","getTime","Math","random","slice","indexOf","hasWrapperSelectorValue","wrapperClassValue","hasInsertModeValue","insertModeValue","PasswordConfirmController","checkPasswordsMatch","passwordTargets","allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","constructor","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","keys","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","secondsValue","seconds","StickyController","createMagicElement","_magicElement","_mode","intersectionRatio","hasStuckClass","stuckClass","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","ToggleClassController","hasClassValue","hasMouseEnterValue","hasMouseLeaveValue","useHover","hasClickAwayValue","clickAwayValue","onEvent","contains","rect","getBoundingClientRect","windowHeight","windowWidth","clientWidth","left","isElementInViewport","clickOutside","clickOutsideEvent","useClickOutside","hasInitialValue","toggleTargets","initialValue","elementOn","elementOff","elementWasToggled","elementToggleStatus","elementToggle","mouseEnter","mouseEnterValue","on","off","mouseLeave","mouseLeaveValue","_this4","_this5","toggled","classValue","klass","isTurboFrame","class","clickAway","initial","TurboFrameRCController","frameSrc","_getFrame","_getSrc","_setSrc","setSrc","frame","hasLoadingMessageValue","loadingMessageValue","getElementById","frameIdValue","frameId","loadingMessage","TurboFrameRefreshController","poll","intervalValue","hasPollValue","pollValue","interval","WordCountController","updateWordCount","wordCount","matches","match","isValidCount"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stimulus-library.umd.js","sources":["../src/base_controller.ts","../src/appearance_controller.ts","../src/async_block_controller.ts","../src/auto_submit_form_controller.ts","../node_modules/stimulus-use/dist/support/index.js","../node_modules/stimulus-use/dist/use-intersection/use-intersection.js","../node_modules/stimulus-use/dist/use-click-outside/use-click-outside.js","../node_modules/stimulus-use/dist/stimulus_use.js","../node_modules/stimulus-use/dist/use-hover/use-hover.js","../node_modules/stimulus-use/dist/use-mutation/use-mutation.js","../node_modules/stimulus-use/dist/use-window-resize/use-window-resize.js","../node_modules/stimulus-use/dist/use-debounce/use-debounce.js","../src/autosize_controller.ts","../src/char_count_controller.ts","../src/checkbox_select_all_controller.ts","../src/clipboard_controller.ts","../src/utilities/elements.ts","../src/confirm_controller.ts","../src/confirm_navigation_controller.ts","../src/debug_controller.ts","../src/detect_dirty_controller.ts","../src/disable_inputs_controller.ts","../src/disable_with_controller.ts","../src/dismissable_controller.ts","../src/element_save_controller.ts","../src/empty_dom_controller.ts","../src/enable_inputs_controller.ts","../src/fallback_image_controller.ts","../src/form_save_controller.ts","../src/intersection_controller.ts","../src/utilities/scroll.ts","../src/lazy_block_controller.ts","../src/lightbox_image_controller.ts","../src/limited_selection_checkboxes_controller.ts","../src/nested_form_controller.ts","../src/password_confirm_controller.ts","../src/password_peek_controller.ts","../src/remote_form_controller.ts","../src/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/scroll_into_focus_controller.ts","../src/scroll_to_bottom_controller.ts","../src/scroll_to_controller.ts","../src/scroll_to_top_controller.ts","../src/self_destruct_controller.ts","../src/sticky_controller.ts","../src/teleport_controller.ts","../src/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/turbo_frame_rc_controller.ts","../src/turbo_frame_refresh_controller.ts","../src/word_count_controller.ts"],"sourcesContent":["import {Context, Controller} from \"stimulus\";\n\nexport class BaseController extends Controller {\n\n constructor(context: Context) {\n super(context);\n return new Proxy(this, {\n get: (obj, prop) => {\n let returnVal = Reflect.get(obj, prop);\n let self = this;\n if (logProperty(prop.toString())) {\n if (typeof returnVal == \"function\") {\n return new Proxy(returnVal, {\n apply(target: any, thisArg: any, argArray?: any): any {\n self.log(prop.toString(), {\n args: argArray,\n });\n return Reflect.apply(target, thisArg, argArray);\n },\n });\n } else {\n this.log(prop.toString());\n }\n }\n return returnVal;\n },\n });\n }\n\n get el(): HTMLElement {\n return this.element as HTMLElement;\n }\n\n dispatch(element: HTMLElement, eventName: string, options: CustomEventInit = {}) {\n let mergedOptions = Object.assign({}, {bubbles: true, cancelable: true, detail: {target: element}}, options);\n if (!!mergedOptions.detail.target) {\n mergedOptions.detail.target = element;\n }\n let event = new CustomEvent(eventName, mergedOptions);\n element.dispatchEvent(event);\n }\n\n log(functionName: string, args: {} = {}): void {\n // @ts-ignore\n if (!this.application.debug) {\n return;\n }\n let logger = console;\n logger.groupCollapsed(`%c${this.identifier} %c#${functionName}`, \"color: #3B82F6\", \"color: unset\");\n logger.log({\n element: this.element,\n ...args,\n });\n logger.groupEnd();\n }\n\n}\n\nfunction logProperty(prop: string): boolean {\n switch (prop) {\n case \"application\":\n case \"el\":\n case \"element\":\n case \"constructor\":\n case \"initialize\":\n case \"log\":\n case \"dispatch\":\n case \"data\":\n case \"valueDescriptorMap\":\n case \"identifier\":\n return false;\n }\n\n if (/^_.*?$/.test(prop)) {\n return false;\n }\n if (/^.*?Target(s)?$/.test(prop)) {\n return false;\n }\n if (/^.*?Value$/.test(prop)) {\n return false;\n }\n if (/^.*?ValueChanged$/.test(prop)) {\n return false;\n }\n if (/^.*?Class$/.test(prop)) {\n return false;\n }\n\n return true;\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class AppearanceController extends BaseController {\r\n\r\n initialize() {\r\n this._handleVisibility = this._handleVisibility.bind(this);\r\n }\r\n\r\n connect() {\r\n window.addEventListener(\"focus\", this._handleVisibility);\r\n window.addEventListener(\"blur\", this._handleVisibility);\r\n document.addEventListener(\"visibilitychange\", this._handleVisibility);\r\n this._handleVisibility();\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"focus\", this._handleVisibility);\r\n window.removeEventListener(\"blur\", this._handleVisibility);\r\n document.removeEventListener(\"visibilitychange\", this._handleVisibility);\r\n }\r\n\r\n appear() {\r\n this.dispatch(this.el, \"appearance:appear\");\r\n }\r\n\r\n away() {\r\n this.dispatch(this.el, \"appearance:away\");\r\n }\r\n\r\n _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\n\nexport class AsyncBlockController extends BaseController {\n static targets = [\"replace\"];\n static values = {endpoint: String, errorMessage: String, selector: String};\n\n declare readonly replaceTarget: HTMLElement;\n declare readonly hasReplaceTarget: boolean;\n declare readonly endpointValue: string;\n\n declare readonly hasSelectorValue: boolean;\n declare readonly selectorValue: string;\n\n declare readonly hasErrorMessageValue: boolean;\n declare readonly errorMessageValue: string;\n\n get _errorMessage(): string {\n return this.hasErrorMessageValue ? this.errorMessageValue : \"This content failed to load\";\n }\n\n // This is a simple controller to load a block of content when the page loads.\n // It should be used to give a quick initial response before calling out to an\n // an AJAX endpoint to do some expensive work.\n connect() {\n this.loadContent();\n }\n\n loadContent() {\n let self = this;\n let el = this.hasReplaceTarget ? this.replaceTarget : this.el;\n fetch(this.endpointValue)\n .then((response) => response.text())\n .then((html) => {\n let newEl = document.createElement(\"div\");\n newEl.innerHTML = html;\n if (this.hasSelectorValue) {\n let selectedContent = newEl.querySelectorAll(this.selectorValue);\n el.replaceWith(...selectedContent);\n } else {\n el.replaceWith(...newEl.children);\n }\n // Trigger event to show block has loaded\n self.dispatch(el, \"ajax:success\");\n })\n .catch(err => {\n el.replaceWith(this._errorMessage);\n self.dispatch(el, \"ajax:error\");\n })\n .finally(() => {\n self.dispatch(el, \"ajax:complete\");\n });\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class AutoSubmitFormController extends BaseController {\n\n initialize() {\n this.handler = this.handler.bind(this);\n }\n\n connect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.handler));\n }\n\n disconnect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.handler));\n }\n\n private handler(e: Event) {\n // Trigger synthetic \"submit\" event on form\n this.dispatch((this.el), \"submit\");\n }\n}\n","export const method = (controller, methodName) => {\n const method = controller[methodName];\n if (typeof method == 'function') {\n return method;\n }\n else {\n return (...args) => { };\n }\n};\nexport const composeEventName = (name, controller, eventPrefix) => {\n let composedName = name;\n if (eventPrefix === true) {\n composedName = `${controller.identifier}:${name}`;\n }\n else if (typeof eventPrefix === 'string') {\n composedName = `${eventPrefix}:${name}`;\n }\n return composedName;\n};\nexport const extendedEvent = (type, event, detail) => {\n const { bubbles, cancelable, composed } = event || { bubbles: true, cancelable: true, composed: true };\n if (event) {\n Object.assign(detail, { originalEvent: event });\n }\n const customEvent = new CustomEvent(type, {\n bubbles,\n cancelable,\n composed,\n detail,\n });\n return customEvent;\n};\nexport function isElementInViewport(el) {\n const rect = el.getBoundingClientRect();\n const windowHeight = (window.innerHeight || document.documentElement.clientHeight);\n const windowWidth = (window.innerWidth || document.documentElement.clientWidth);\n const vertInView = (rect.top <= windowHeight) && ((rect.top + rect.height) >= 0);\n const horInView = (rect.left <= windowWidth) && ((rect.left + rect.width) >= 0);\n return (vertInView && horInView);\n}\n//# sourceMappingURL=index.js.map","import { method, extendedEvent, composeEventName } from '../support/index';\nconst defaultOptions = {\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useIntersection = (controller, options = {}) => {\n const { dispatchEvent, eventPrefix } = Object.assign({}, defaultOptions, options);\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n const callback = (entries) => {\n const [entry] = entries;\n if (entry.isIntersecting) {\n dispatchAppear(entry);\n }\n else if (controller.isVisible) {\n dispatchDisappear(entry);\n }\n };\n const dispatchAppear = (entry) => {\n controller.isVisible = true;\n method(controller, 'appear').call(controller, entry);\n // emit a custom \"appear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('appear', controller, eventPrefix);\n const appearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(appearEvent);\n }\n };\n const dispatchDisappear = (entry) => {\n controller.isVisible = false;\n method(controller, 'disappear').call(controller, entry);\n // emit a custom \"disappear\" event\n if (dispatchEvent) {\n const eventName = composeEventName('disappear', controller, eventPrefix);\n const disappearEvent = extendedEvent(eventName, null, { controller, entry });\n targetElement.dispatchEvent(disappearEvent);\n }\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observer = new IntersectionObserver(callback, options);\n const observe = () => {\n observer.observe(targetElement);\n };\n const unobserve = () => {\n observer.unobserve(targetElement);\n };\n Object.assign(controller, {\n isVisible: false,\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-intersection.js.map","import { composeEventName, extendedEvent, isElementInViewport } from '../support/index';\nconst defaultOptions = {\n events: ['click', 'touchend'],\n onlyVisible: true,\n dispatchEvent: true,\n eventPrefix: true,\n};\nexport const useClickOutside = (controller, options = {}) => {\n const { onlyVisible, dispatchEvent, events, eventPrefix } = Object.assign({}, defaultOptions, options);\n const onEvent = (event) => {\n const targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n if (targetElement.contains(event.target) || (!isElementInViewport(targetElement) && onlyVisible)) {\n return;\n }\n // call the clickOutside method of the Stimulus controller\n if (controller.clickOutside) {\n controller.clickOutside(event);\n }\n // emit a custom event\n if (dispatchEvent) {\n const eventName = composeEventName('click:outside', controller, eventPrefix);\n const clickOutsideEvent = extendedEvent(eventName, event, { controller });\n targetElement.dispatchEvent(clickOutsideEvent);\n }\n };\n const observe = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.addEventListener(event, onEvent, false);\n });\n };\n const unobserve = () => {\n events === null || events === void 0 ? void 0 : events.forEach(event => {\n window.removeEventListener(event, onEvent, false);\n });\n };\n // keep a copy of the current disconnect() function of the controller\n // to support composing several behaviors\n const controllerDisconnect = controller.disconnect.bind(controller);\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-click-outside.js.map","const defaultOptions = {\n debug: false,\n logger: console\n};\nexport class StimulusUse {\n constructor(controller, options = {}) {\n var _a, _b, _c;\n this.log = (functionName, args) => {\n if (!this.debug)\n return;\n this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${functionName}`, 'color: #3B82F6', 'color: unset');\n this.logger.log(Object.assign({ controllerId: this.controllerId }, args));\n this.logger.groupEnd();\n };\n this.debug = (_b = (_a = options === null || options === void 0 ? void 0 : options.debug) !== null && _a !== void 0 ? _a : controller.application.stimulusUseDebug) !== null && _b !== void 0 ? _b : defaultOptions.debug;\n this.logger = (_c = options === null || options === void 0 ? void 0 : options.logger) !== null && _c !== void 0 ? _c : defaultOptions.logger;\n this.controller = controller;\n this.controllerId = controller.element.id || controller.element.dataset.id;\n // make copies of lifecycle functions\n this.controllerInitialize = controller.initialize.bind(controller);\n this.controllerConnect = controller.connect.bind(controller);\n this.controllerDisconnect = controller.disconnect.bind(controller);\n }\n}\n//# sourceMappingURL=stimulus_use.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseHover extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n this.targetElement.addEventListener('mouseenter', this.onEnter);\n this.targetElement.addEventListener('mouseleave', this.onLeave);\n };\n this.unobserve = () => {\n this.targetElement.removeEventListener('mouseenter', this.onEnter);\n this.targetElement.removeEventListener('mouseleave', this.onLeave);\n };\n this.onEnter = () => {\n method(this.controller, 'mouseEnter').call(this.controller);\n this.log('mouseEnter', { hover: true });\n };\n this.onLeave = () => {\n method(this.controller, 'mouseLeave').call(this.controller);\n this.log('mouseLeave', { hover: false });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useHover = (controller, options = {}) => {\n const observer = new UseHover(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-hover.js.map","import { StimulusUse } from '../stimulus_use';\nimport { method } from '../support/index';\nexport class UseMutation extends StimulusUse {\n constructor(controller, options = {}) {\n super(controller, options);\n this.observe = () => {\n try {\n this.observer.observe(this.targetElement, this.options);\n }\n catch (error) {\n this.controller.application.handleError(error, \"At a minimum, one of childList, attributes, and/or characterData must be true\", {});\n }\n };\n this.unobserve = () => {\n this.observer.disconnect();\n };\n this.mutation = (entries) => {\n method(this.controller, 'mutate').call(this.controller, entries);\n this.log('mutate', { entries });\n };\n this.targetElement = (options === null || options === void 0 ? void 0 : options.element) || controller.element;\n this.controller = controller;\n this.options = options;\n this.observer = new MutationObserver(this.mutation);\n this.enhanceController();\n this.observe();\n }\n enhanceController() {\n const controllerDisconnect = this.controller.disconnect.bind(this.controller);\n const disconnect = () => {\n this.unobserve();\n controllerDisconnect();\n };\n Object.assign(this.controller, { disconnect });\n }\n}\nexport const useMutation = (controller, options = {}) => {\n const observer = new UseMutation(controller, options);\n return [observer.observe, observer.unobserve];\n};\n//# sourceMappingURL=use-mutation.js.map","import { method } from '../support/index';\nexport const useWindowResize = (controller) => {\n const callback = (event) => {\n const { innerWidth, innerHeight } = window;\n const payload = {\n height: innerHeight || Infinity,\n width: innerWidth || Infinity,\n event\n };\n method(controller, 'windowResize').call(controller, payload);\n };\n const controllerDisconnect = controller.disconnect.bind(controller);\n const observe = () => {\n window.addEventListener('resize', callback);\n callback();\n };\n const unobserve = () => {\n window.removeEventListener('resize', callback);\n };\n Object.assign(controller, {\n disconnect() {\n unobserve();\n controllerDisconnect();\n },\n });\n observe();\n return [observe, unobserve];\n};\n//# sourceMappingURL=use-window-resize.js.map","import { Controller } from 'stimulus';\nclass DebounceController extends Controller {\n}\nDebounceController.debounces = [];\nconst defaultWait = 200;\nconst debounce = (fn, wait = defaultWait) => {\n let timeoutId = null;\n return function () {\n const args = arguments;\n const context = this;\n const callback = () => fn.apply(context, args);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(callback, wait);\n };\n};\nexport const useDebounce = (controller, options) => {\n var _a;\n const constructor = controller.constructor;\n (_a = constructor.debounces) === null || _a === void 0 ? void 0 : _a.forEach((func) => {\n if (typeof func === \"string\") {\n controller[func] = debounce(controller[func], options === null || options === void 0 ? void 0 : options.wait);\n }\n if (typeof func === \"object\") {\n const { name, wait } = func;\n if (!name)\n return;\n controller[name] = debounce(controller[name], wait || (options === null || options === void 0 ? void 0 : options.wait));\n }\n });\n};\n//# sourceMappingURL=use-debounce.js.map","import {useWindowResize} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class AutosizeController extends BaseController {\n\n initialize() {\n this._handler = this._handler.bind(this);\n }\n\n connect() {\n let target = this.el as HTMLTextAreaElement;\n target.style.resize = \"none\";\n target.style.boxSizing = \"border-box\";\n target.addEventListener(\"input\", this._handler);\n target.addEventListener(\"focus\", this._handler);\n useWindowResize(this);\n requestAnimationFrame(this._handler);\n }\n\n windowResize() {\n this._handler();\n }\n\n private _handler() {\n this.autosize(this.el as HTMLTextAreaElement);\n };\n\n private autosize(element: HTMLTextAreaElement) {\n let offset = element.offsetHeight - element.clientHeight;\n element.style.height = \"auto\";\n element.style.height = element.scrollHeight + offset + \"px\";\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class CharCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this._updateCharCount = this._updateCharCount.bind(this);\n }\n\n connect() {\n this._updateCharCount();\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this._updateCharCount);\n }\n\n private _updateCharCount() {\n let charCount = this.inputTarget.value.length;\n this.outputTarget.innerText = charCount.toString();\n if (this.hasErrorClass) {\n if (this._isValidCount(charCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n private _isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n","import {BaseController} from './base_controller';\n\nexport class CheckboxSelectAllController extends BaseController {\n static targets = ['selectAll', 'checkbox'];\n\n declare readonly hasSelectAllTarget: boolean;\n declare readonly selectAllTarget: HTMLInputElement;\n declare readonly checkboxTargets: HTMLInputElement[];\n\n private get checked() {\n return this.checkboxTargets.filter(checkbox => checkbox.checked);\n }\n\n private get unchecked() {\n return this.checkboxTargets.filter(checkbox => !checkbox.checked);\n }\n\n initialize() {\n this.toggle = this.toggle.bind(this);\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.addEventListener('change', this.toggle);\n this.checkboxTargets.forEach(checkbox => checkbox.addEventListener('change', this.refresh));\n this.refresh();\n });\n }\n\n disconnect() {\n if (!this.hasSelectAllTarget) {\n return;\n }\n\n this.selectAllTarget.removeEventListener('change', this.toggle);\n this.checkboxTargets.forEach((checkbox) => checkbox.removeEventListener('change', this.refresh));\n }\n\n private toggle(event: Event) {\n event.preventDefault();\n let target = event.target as HTMLInputElement;\n this.checkboxTargets.forEach((checkbox) => checkbox.checked = target.checked);\n }\n\n private refresh() {\n const checkboxesCount = this.checkboxTargets.length;\n const checkboxesCheckedCount = this.checked.length;\n\n this.selectAllTarget.checked = checkboxesCheckedCount > 0;\n this.selectAllTarget.indeterminate = checkboxesCheckedCount > 0 && checkboxesCheckedCount < checkboxesCount;\n }\n}","import {BaseController} from \"./base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"button\", \"copy\", \"fallback\"];\r\n static values = {removeUnused: Boolean};\r\n\r\n declare readonly sourceTarget: HTMLElement;\r\n declare readonly copyTarget: HTMLElement;\r\n declare readonly hasCopyTarget: boolean;\r\n declare readonly fallbackTarget: HTMLElement;\r\n declare readonly hasFallbackTarget: boolean;\r\n\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n declare readonly removeUnusedValue: boolean;\r\n\r\n supported = false;\r\n\r\n connect() {\r\n this.supported = document.queryCommandSupported(\"copy\");\r\n\r\n if (this.hasRemoveUnusedValue && this.removeUnusedValue) {\r\n if (this.supported && this.hasFallbackTarget) {\r\n this.fallbackTarget.remove();\r\n } else if (this.hasCopyTarget) {\r\n this.copyTarget.remove();\r\n }\r\n }\r\n }\r\n\r\n select(event: MouseEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n }\r\n\r\n copy(event: ClipboardEvent) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n (this.sourceTarget as HTMLInputElement | HTMLTextAreaElement).select();\r\n if (this.supported) {\r\n document.execCommand(\"copy\");\r\n }\r\n }\r\n}\r\n","export function isHTMLLinkElement(element: Element): element is HTMLLinkElement {\n return element.nodeName == \"LINK\";\n}\n\nexport function isHTMLAnchorElement(element: Element): element is HTMLAnchorElement {\n return element.nodeName == \"A\";\n}\n\nexport function isHTMLFormElement(element: Element): element is HTMLFormElement {\n return element.nodeName == \"FORM\";\n}\n\nexport function isHTMLInputElement(element: Element): element is HTMLInputElement {\n return element.nodeName == \"INPUT\";\n}\n\nexport function isHTMLButtonElement(element: Element): element is HTMLButtonElement {\n return element.nodeName == \"BUTTON\";\n}\n\nexport function isHTMLSelectElement(element: Element): element is HTMLSelectElement {\n return element.nodeName == \"SELECT\";\n}\n\nexport function isHTMLImageElement(element: Element): element is HTMLImageElement {\n return element.nodeName == \"IMG\";\n}\n\nexport function isElementCheckable(element: Element): element is HTMLInputElement & { checked: boolean } {\n return isHTMLInputElement(element) && (element.type === \"radio\" || element.type === \"checkbox\");\n}\n","import {BaseController} from './base_controller';\nimport {isHTMLFormElement, isHTMLAnchorElement} from \"./utilities/elements\";\n\nexport class ConfirmController extends BaseController {\n\n static values = {\n message: String,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get message(): string {\n return this.hasMessageValue ? this.messageValue : 'Are you sure?';\n }\n\n initialize() {\n this.confirm = this.confirm.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n let element = this.el;\n if (isHTMLFormElement(element)) {\n element.addEventListener(\"submit\", this.confirm);\n } else if (isHTMLAnchorElement(element)) {\n element.addEventListener(\"click\", this.confirm);\n } else {\n throw new Error(\"Can't handle confirmation on attached element\");\n }\n });\n }\n\n confirm(event: Event) {\n if (!(window.confirm(this.message))) {\n event.preventDefault();\n this.dispatch(this.el, \"confirm:cancelled\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class ConfirmNavigationController extends BaseController {\n\n static values = {_message: String};\n\n declare readonly _messageValue: string;\n declare readonly hasMessageValue: boolean;\n\n get _message(): string {\n return this.hasMessageValue ? this._messageValue : \"Do you want to leave this page? Changes you made may not be saved\";\n }\n\n initialize() {\n this.handlePopstate = this.handlePopstate.bind(this);\n this.handleTurboNavigation = this.handleTurboNavigation.bind(this);\n }\n\n connect() {\n window.onbeforeunload = () => this._message;\n window.addEventListener(\"popstate\", this.handlePopstate);\n window.addEventListener(\"submit\", () => {\n window.removeEventListener(\"popstate\", this.handlePopstate);\n window.onbeforeunload = null;\n });\n window.addEventListener(\"turbolinks:before-visit\", this.handleTurboNavigation);\n window.addEventListener(\"turbo:before-visit\", this.handleTurboNavigation);\n }\n\n handlePopstate(_event: PopStateEvent) {\n return false;\n }\n\n handleTurboNavigation(event: Event) {\n if (!confirm(this._message)) {\n event.preventDefault();\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DebugController extends BaseController {\n\n static targets = [\"test\"];\n declare testTargets: HTMLElement[];\n\n connect() {\n console.log(\"Debug Controller\", this, this.testTargets);\n }\n}\n","import {BaseController} from \"./base_controller\";\nimport {isElementCheckable, isHTMLSelectElement} from \"./utilities/elements\";\n\nexport class DetectDirtyController extends BaseController {\n\n loadValue: null | string | boolean = null;\n\n initialize() {\n this.checkDirty = this.checkDirty.bind(this);\n }\n\n connect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n this.loadValue = element.checked;\n } else {\n this.loadValue = element.value;\n }\n this.checkDirty();\n element.addEventListener(\"input\", this.checkDirty);\n element.addEventListener(\"change\", this.checkDirty);\n }\n\n disconnect() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n element.removeEventListener(\"input\", this.checkDirty);\n element.removeEventListener(\"change\", this.checkDirty);\n }\n\n restore() {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n if (isElementCheckable(element)) {\n element.checked = element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n options.forEach((option) => {\n option.selected = option.value == this.loadValue;\n });\n } else {\n options.forEach((option) => option.selected = option.defaultSelected);\n }\n Array.from(element.options).forEach(option => option.selected = option.defaultSelected);\n } else {\n element.value = element.defaultValue;\n }\n }\n\n private checkDirty(_event?: Event) {\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\n let dirty: boolean;\n if (isElementCheckable(element)) {\n dirty = element.checked != element.defaultChecked;\n } else if (isHTMLSelectElement(element)) {\n let options = Array.from(element.options);\n if (options.every(option => !option.defaultSelected)) {\n dirty = element.value != this.loadValue;\n } else {\n dirty = options.some((option) => option.selected != option.defaultSelected);\n }\n } else {\n dirty = element.value != element.defaultValue;\n }\n\n if (dirty) {\n element.setAttribute(\"data-dirty\", \"true\");\n } else {\n element.removeAttribute(\"data-dirty\");\n }\n }\n\n}\n\nexport function isDirty(element: HTMLElement) {\n return element.hasAttribute(\"data-dirty\");\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class DisableInputsController extends BaseController {\r\n\r\n static targets = [\"disabler\", \"disable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasDisablerTarget: boolean;\r\n declare readonly disablerTarget: HTMLInputElement;\r\n declare readonly disableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasDisablerTarget && this.disablerTarget.checked) {\r\n this.disableInputs();\r\n } else {\r\n this.enableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.disableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.disableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from './base_controller';\nimport {isHTMLAnchorElement, isHTMLButtonElement, isHTMLInputElement} from \"./utilities/elements\";\n\nexport class DisableWithController extends BaseController {\n\n static values = {\n message: String,\n timeout: Number,\n };\n\n declare readonly messageValue: string;\n declare readonly hasMessageValue: boolean;\n declare readonly timeoutValue: number;\n declare readonly hasTimeoutValue: boolean;\n\n _cacheText?: string;\n _timeoutHandle?: ReturnType;\n\n get _message(): string {\n return this.hasMessageValue ? this.messageValue : 'Submitting...';\n }\n\n get _timeout(): number {\n return this.hasTimeoutValue ? this.timeoutValue : 1000;\n }\n\n initialize() {\n this.enable = this.enable.bind(this);\n this.disable = this.disable.bind(this);\n }\n\n connect() {\n requestAnimationFrame(() => {\n this.el.addEventListener(\"click\", this.disable);\n });\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n disable(event?: Event) {\n let element = this.el;\n\n if (this._isDisabled(element)) {\n event?.preventDefault();\n event?.stopImmediatePropagation();\n } else {\n this._cacheText = this._getElText(element);\n this._setElText(element, this._message);\n this._disable(element);\n setTimeout(this.enable, this._timeout);\n }\n }\n\n enable(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n if (this._isDisabled(element)) {\n this._setElText(element, this._cacheText!);\n this._enable(element);\n }\n }\n\n _isDisabled(el: HTMLElement): boolean {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n return el.disabled;\n } else {\n return el.dataset.disabled == \"true\";\n }\n }\n\n _getElText(el: HTMLElement): string {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n return el.value;\n } else {\n return el.innerText;\n }\n }\n\n _setElText(el: HTMLElement, str: string) {\n if (isHTMLInputElement(el) && el.type == \"submit\") {\n el.value = str;\n } else if (isHTMLButtonElement(el) || isHTMLAnchorElement(el)) {\n el.innerText = str;\n }\n }\n\n _disable(el: HTMLElement) {\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\n el.disabled = true;\n } else {\n el.dataset.disabled = \"true\";\n }\n }\n\n _enable(el: HTMLElement) {\n if (isHTMLInputElement(el) && el.type == \"submit\" || isHTMLButtonElement(el)) {\n el.disabled = false;\n } else {\n el.dataset.disabled = undefined;\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class DismissableController extends BaseController {\n\n dismiss() {\n this.el.remove();\n }\n\n}\n","import {BaseController} from './base_controller';\r\nimport _get from \"lodash-es/get\";\r\nimport _set from \"lodash-es/set\";\r\n\r\nexport class ElementSaveController extends BaseController {\r\n\r\n static targets = [\r\n \"element\",\r\n ];\r\n static values = {\r\n id: String,\r\n attributes: String,\r\n restoreOnLoad: Boolean,\r\n };\r\n declare readonly hasElementTarget: boolean;\r\n declare readonly elementTarget: HTMLElement;\r\n declare readonly elementTargets: HTMLElement[];\r\n declare readonly idValue: string;\r\n declare readonly attributesValue: string;\r\n declare readonly hasIdValue: boolean;\r\n declare readonly restoreOnLoadValue: boolean;\r\n declare readonly hasRestoreOnLoadValue: boolean;\r\n\r\n get _id() {\r\n if (this.hasIdValue) {\r\n return this.idValue;\r\n }\r\n let elementID = this.el.id;\r\n\r\n if (elementID !== \"\") {\r\n return elementID;\r\n } else {\r\n throw new Error(`No ID value to uniquely identify this element. Please either specify data-${this.identifier}-id-value or give this element an 'id' attribute. `);\r\n }\r\n }\r\n\r\n get _uniqueIdentifier() {\r\n const url = location.href;\r\n return `${url} ${this._id}`;\r\n }\r\n\r\n get _restoreOnLoad() {\r\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\r\n }\r\n\r\n get _element(): HTMLElement {\r\n return this.hasElementTarget ? this.elementTarget : this.el;\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n if (this._restoreOnLoad) {\r\n this.restore();\r\n }\r\n });\r\n }\r\n\r\n clear(event?: Event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n localStorage.removeItem(this._uniqueIdentifier);\r\n this.dispatch(this._element, `element-save:cleared`);\r\n }\r\n\r\n save(event?: Event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n let element = this._element;\r\n let attributes = this.attributesValue.split(\" \");\r\n let data: { [idx: string]: any } = {};\r\n attributes.forEach((attr: string) => data[attr] = _get(element, attr));\r\n localStorage.setItem(this._uniqueIdentifier, JSON.stringify(data));\r\n this.dispatch(element, `element-save:save:success`);\r\n }\r\n\r\n restore(event?: Event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n let element = this._element;\r\n if (localStorage.getItem(this._uniqueIdentifier)) {\r\n const savedData = JSON.parse(localStorage.getItem(this._uniqueIdentifier)!); // get and parse the saved data from localStorage\r\n Object.keys(savedData).forEach((attr: string) => {\r\n _set(element as HTMLElement, attr, savedData[attr]);\r\n });\r\n this.dispatch(element, `element-save:restore:success`);\r\n } else {\r\n this.dispatch(element, `element-save:restore:empty`);\r\n }\r\n }\r\n\r\n}\r\n","import {useMutation} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport class EmptyDomController extends BaseController {\n\n static classes = [\"empty\", \"notEmpty\"];\n static values = {scopeSelector: String};\n\n declare hasEmptyClass: boolean;\n declare emptyClass: string;\n declare hasNotEmptyClass: boolean;\n declare notEmptyClass: string;\n\n declare hasScopeSelectorValue: boolean;\n declare scopeSelectorValue: string;\n\n get emptyClasses(): string[] {\n return this.emptyClass.split(\" \");\n }\n\n get notEmptyClasses(): string[] {\n return this.notEmptyClass.split(\" \");\n }\n\n get children(): Element[] {\n let element = this.el;\n if (this.hasScopeSelectorValue) {\n return Array.from(element.querySelectorAll(this.scopeSelectorValue));\n } else {\n return Array.from(element.children);\n }\n }\n\n connect() {\n useMutation(this, {element: this.el, childList: true});\n this.checkEmpty();\n }\n\n mutate(entries: MutationRecord[]) {\n this.checkEmpty();\n }\n\n checkEmpty() {\n let element = this.el;\n let children = this.children;\n if (children.length === 0) {\n this._removeNotEmptyClasses();\n this._addEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:empty\");\n } else {\n this._addNotEmptyClasses();\n this._removeEmptyClasses();\n this.dispatch(element as HTMLElement, \"dom:not-empty\", {detail: {count: children.length}});\n }\n }\n\n private _removeEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.remove(...this.emptyClasses);\n }\n }\n\n private _addNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.add(...this.notEmptyClasses);\n }\n }\n\n private _addEmptyClasses() {\n if (this.hasEmptyClass) {\n this.el.classList.add(...this.emptyClasses);\n }\n }\n\n private _removeNotEmptyClasses() {\n if (this.hasNotEmptyClass) {\n this.el.classList.remove(...this.notEmptyClasses);\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class EnableInputsController extends BaseController {\r\n\r\n static targets = [\"enabler\", \"enable\"];\r\n\r\n static values = {\r\n clear: Boolean,\r\n };\r\n\r\n declare readonly hasEnablerTarget: boolean;\r\n declare readonly enablerTarget: HTMLInputElement;\r\n declare readonly enableTargets: Array;\r\n declare readonly clearValue: boolean;\r\n declare readonly hasClearValue: boolean;\r\n\r\n connect() {\r\n this.toggle();\r\n }\r\n\r\n toggle() {\r\n if (this.hasEnablerTarget && this.enablerTarget.checked) {\r\n this.enableInputs();\r\n } else {\r\n this.disableInputs();\r\n }\r\n }\r\n\r\n disableInputs() {\r\n let shouldClear = this.hasClearValue && this.clearValue;\r\n this.enableTargets.forEach((el, _) => {\r\n if (shouldClear) {\r\n el.value = \"\";\r\n }\r\n el.disabled = true;\r\n });\r\n }\r\n\r\n enableInputs() {\r\n this.enableTargets.forEach((el, _) => {\r\n el.disabled = false;\r\n });\r\n }\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class FallbackImageController extends BaseController {\r\n\r\n static values = {placeholder: String};\r\n\r\n declare readonly placeholderValue: string;\r\n declare readonly hasPlaceholderValue: boolean;\r\n\r\n connect() {\r\n let element = this.el as HTMLImageElement;\r\n\r\n element.onerror = () => {\r\n if (this.hasPlaceholderValue) {\r\n element.src = this.placeholderValue;\r\n } else {\r\n element.style.display = \"none\";\r\n }\r\n };\r\n }\r\n\r\n}\r\n","import {BaseController} from './base_controller';\r\nimport {isHTMLFormElement, isHTMLInputElement} from \"./utilities/elements\";\r\n\r\ninterface FormSavePayload {\r\n [idx: string]: {\r\n [idx: string]: string | boolean\r\n }\r\n}\r\n\r\nexport class FormSaveController extends BaseController {\r\n\r\n static values = {\r\n id: String,\r\n restoreOnLoad: Boolean,\r\n clearOnSubmit: Boolean,\r\n };\r\n\r\n declare readonly idValue: string;\r\n declare readonly hasIdValue: boolean;\r\n declare readonly restoreOnLoadValue: boolean;\r\n declare readonly hasRestoreOnLoadValue: boolean;\r\n declare readonly clearOnSubmitValue: boolean;\r\n declare readonly hasClearOnSubmitValue: boolean;\r\n\r\n get formID() {\r\n if (this.hasIdValue) {\r\n return this.idValue;\r\n }\r\n let elementID = (this.el as HTMLFormElement).id;\r\n\r\n if (elementID !== \"\") {\r\n return elementID;\r\n } else {\r\n throw new Error(`No ID value to uniquely identify this form. Please either specify data-${this.identifier}-id-value or give this form an 'id' attribute. `);\r\n }\r\n }\r\n\r\n get formIdentifier() {\r\n const url = location.href;\r\n return `${url} ${this.formID}`;\r\n }\r\n\r\n get formElements() {\r\n return (this.el as HTMLFormElement).elements;\r\n }\r\n\r\n get formData(): FormSavePayload {\r\n let data: FormSavePayload = {[this.formIdentifier]: {}};\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name.length > 0) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n data[this.formIdentifier][el.name] = el.checked;\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.checked) {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n } else {\r\n data[this.formIdentifier][el.name] = el.value;\r\n }\r\n }\r\n }\r\n return data;\r\n }\r\n\r\n get restoreOnLoad() {\r\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\r\n }\r\n\r\n get clearOnSubmit() {\r\n return this.hasClearOnSubmitValue ? this.clearOnSubmitValue : true;\r\n }\r\n\r\n initialize() {\r\n this._clear = this._clear.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n let element = this.el;\r\n if (!isHTMLFormElement(element)) {\r\n throw new Error('Expected controller to be mounted on a form element.');\r\n }\r\n\r\n if (this.restoreOnLoad) {\r\n this.restore();\r\n }\r\n if (this.clearOnSubmit) {\r\n this.el.addEventListener('submit', this._clear);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.clearOnSubmit) {\r\n this.el.removeEventListener('submit', this._clear);\r\n }\r\n }\r\n\r\n _clear() {\r\n localStorage.removeItem(this.formIdentifier);\r\n this.dispatch(this.el, `form-save:cleared`);\r\n }\r\n\r\n clear(event?: Event) {\r\n event?.preventDefault();\r\n this._clear();\r\n }\r\n\r\n save(event: Event) {\r\n event.preventDefault();\r\n let data = this.formData;\r\n localStorage.setItem(this.formIdentifier, JSON.stringify(data[this.formIdentifier]));\r\n this.dispatch(this.el, `form-save:save:success`);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n if (localStorage.getItem(this.formIdentifier)) {\r\n const savedData = JSON.parse(localStorage.getItem(this.formIdentifier)!); // get and parse the saved data from localStorage\r\n for (const element of this.formElements) {\r\n let el = element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\r\n if (el.name in savedData) {\r\n if (isHTMLInputElement(el) && el.type == \"checkbox\") {\r\n el.checked = savedData[el.name];\r\n } else if (isHTMLInputElement(el) && el.type == \"radio\") {\r\n if (el.value == savedData[el.name]) {\r\n el.checked = true;\r\n }\r\n } else {\r\n el.value = savedData[el.name];\r\n }\r\n }\r\n }\r\n this.dispatch(this.el, `form-save:restore:success`);\r\n } else {\r\n this.dispatch(this.el, `form-save:restore:empty`);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {useIntersection} from \"stimulus-use\";\n\nexport class IntersectionController extends BaseController {\n\n static values = {threshold: String};\n\n declare readonly isVisible: boolean;\n declare readonly thresholdValue: string;\n declare readonly hasThresholdValue: boolean;\n\n get threshold(): number[] {\n if (this.hasThresholdValue) {\n return this.thresholdValue.split(',').map(val => Number.parseFloat(val.trim())).filter(val => val >= 0 && val <= 1);\n } else {\n return [0, 1];\n }\n }\n\n connect() {\n useIntersection(this, {\n threshold: this.threshold,\n element: this.el,\n });\n }\n\n appear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:appear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n disappear(entry: IntersectionObserverEntry) {\n this.dispatch(\n this.el,\n \"intersection:disappear\",\n {\n detail: {\n element: this.el,\n },\n },\n );\n };\n\n}\n","const smoothSupported = \"scrollBehavior\" in document.documentElement.style;\r\nlet smoothPolyfilled: boolean;\r\n\r\nexport async function scrollToElement(element: Element, {behavior = \"smooth\", block = \"start\", inline = \"nearest\"}: ScrollIntoViewOptions = {}) {\r\n if (behavior == \"smooth\" && !smoothSupported) {\r\n await polyfillSmooth();\r\n }\r\n element.scrollIntoView({behavior, block, inline});\r\n}\r\n\r\nasync function polyfillSmooth() {\r\n const {polyfill} = await import(/* webpackChunkName: \"smoothscroll-polyfill\" */ \"smoothscroll-polyfill\");\r\n if (smoothPolyfilled) {\r\n return;\r\n }\r\n smoothPolyfilled = true;\r\n polyfill();\r\n}\r\n\r\nexport function getScrollParent(node: HTMLElement | null): HTMLElement | null {\r\n if (!node) {\r\n return null;\r\n }\r\n const overflowY = getComputedStyle(node).overflowY;\r\n const isScrollable = overflowY !== \"visible\" && overflowY !== \"hidden\";\r\n\r\n if (isScrollable && node.scrollHeight >= node.clientHeight) {\r\n return node;\r\n }\r\n\r\n return getScrollParent(node.parentElement) || document.body;\r\n}\r\n","import {useIntersection} from \"stimulus-use\";\nimport {AsyncBlockController} from \"./async_block_controller\";\n\nexport class LazyBlockController extends AsyncBlockController {\n\n declare observe: () => void;\n declare unobserve: () => void;\n declare isVisible: boolean;\n declare disappear: () => void;\n\n connect() {\n let element = this.el;\n\n if (\"IntersectionObserver\" in window) {\n [this.observe, this.unobserve] = useIntersection(this, {element, threshold: 0.3});\n } else {\n // Client doesn't support intersection observer, fallback to pre-loading\n this.loadContent();\n }\n }\n\n appear(entry: IntersectionObserverEntry) {\n if (entry.target === this.el && entry.isIntersecting) {\n this.loadContent();\n if (this.unobserve) {\n this.unobserve();\n }\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\nimport dialogPolyfill from \"dialog-polyfill\";\r\n\r\nexport class LightboxImageController extends BaseController {\r\n\r\n static values = {\r\n src: String,\r\n srcSet: String,\r\n sizes: String,\r\n };\r\n static classes = [\"modal\", \"image\"];\r\n\r\n declare readonly hasModalClass: boolean;\r\n declare readonly modalClass: string;\r\n declare readonly hasImageClass: boolean;\r\n declare readonly imageClass: string;\r\n declare readonly hasSrcValue: boolean;\r\n declare readonly srcValue: string;\r\n declare readonly hasSrcSetValue: boolean;\r\n declare readonly srcSetValue: string;\r\n declare readonly hasSizesValue: boolean;\r\n declare readonly sizesValue: string;\r\n _dialog: HTMLDialogElement | null = null;\r\n\r\n get src(): string {\r\n return this.hasSrcValue ? this.srcValue : (this.el as HTMLImageElement).src;\r\n }\r\n\r\n get srcSet(): string {\r\n return this.hasSrcSetValue ? this.srcSetValue : (this.el as HTMLImageElement).srcset;\r\n }\r\n\r\n get sizes(): string {\r\n return this.hasSizesValue ? this.sizesValue : (this.el as HTMLImageElement).sizes;\r\n }\r\n\r\n get modalClassName() {\r\n return this.hasModalClass ? this.modalClass : \"image-lightbox-dialog\";\r\n }\r\n\r\n get imageClassName() {\r\n return this.hasImageClass ? this.imageClass : \"image-lightbox-image\";\r\n }\r\n\r\n initialize() {\r\n this.open = this.open.bind(this);\r\n this.close = this.close.bind(this);\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n open() {\r\n let element = this.el as HTMLImageElement;\r\n if (this._dialog) {\r\n return;\r\n }\r\n this._dialog = document.createElement(\"dialog\");\r\n\r\n let image = document.createElement(\"img\") as HTMLImageElement;\r\n image.className = this.imageClassName;\r\n image.src = this.src;\r\n image.srcset = this.srcSet;\r\n image.sizes = this.sizes;\r\n this._dialog.appendChild(image);\r\n\r\n element.insertAdjacentElement(\"afterend\", this._dialog);\r\n dialogPolyfill.registerDialog(this._dialog);\r\n this._dialog.className = this.modalClassName;\r\n this._dialog.showModal();\r\n scrollToElement(this._dialog, {behavior: \"smooth\", block: \"end\"}).catch(() => this._dialog!.scrollIntoView(false));\r\n this._dialog.addEventListener(\"click\", this.close);\r\n this._dialog.addEventListener(\"cancel\", this.close);\r\n this._dialog.addEventListener(\"close\", this.close);\r\n }\r\n\r\n close() {\r\n if (this._dialog) {\r\n this._dialog.close();\r\n this._dialog.remove();\r\n this._dialog = null;\r\n scrollToElement(this.el, {behavior: \"smooth\", block: \"end\"}).catch(() => this.el.scrollIntoView(false));\r\n }\r\n }\r\n\r\n} ","import {BaseController} from \"./base_controller\";\n\nexport class LimitedSelectionCheckboxesController extends BaseController {\n\n static targets = [\"input\", \"error\"];\n static values = {max: Number, message: String};\n\n declare readonly hasErrorTarget: boolean;\n declare readonly errorTarget: HTMLElement;\n declare readonly inputTargets: HTMLInputElement[];\n declare readonly maxValue: number;\n declare readonly messageValue: string;\n\n initialize() {\n this.handleInputs = this.handleInputs.bind(this);\n }\n\n connect() {\n this.inputTargets.forEach((el) => el.addEventListener(\"change\", this.handleInputs));\n }\n\n disconnect() {\n this.inputTargets.forEach((el) => el.removeEventListener(\"change\", this.handleInputs));\n }\n\n handleInputs(event: Event) {\n let tickedInputs = this.inputTargets.reduce((previousValue, el) => el.checked ? previousValue + 1 : previousValue, 0);\n let target = event.target as HTMLInputElement;\n if (tickedInputs > this.maxValue) {\n event.preventDefault();\n target.checked = false;\n this.dispatch(target, \"change\");\n this.dispatch(target, \"limited-selection:too-many\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = this.messageValue;\n }\n } else {\n this.dispatch(target, \"limited-selection:selection\");\n if (this.hasErrorTarget) {\n this.errorTarget.innerHTML = \"\";\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class NestedFormController extends BaseController {\n static targets = ['target', 'template'];\n static values = {\n insertMode: String,\n wrapperClass: String,\n };\n\n declare readonly targetTarget: HTMLElement;\n declare readonly templateTarget: HTMLTemplateElement | HTMLScriptElement;\n\n declare readonly wrapperClassValue: string;\n declare readonly hasWrapperSelectorValue: boolean;\n declare readonly insertModeValue: InsertPosition;\n declare readonly hasInsertModeValue: boolean;\n\n get wrapperClass() {\n return this.hasWrapperSelectorValue ? this.wrapperClassValue : 'nested-fields';\n }\n\n get insertMode(): InsertPosition {\n return this.hasInsertModeValue ? this.insertModeValue : 'beforeend';\n }\n\n connect() {\n this.checkStructure();\n }\n\n add(event?: Event) {\n event?.preventDefault();\n\n const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, this.generateID());\n this.targetTarget.insertAdjacentHTML(this.insertMode, content);\n }\n\n remove(event: Event) {\n event.preventDefault();\n const wrapper: HTMLElement | null = (event.target as HTMLElement).closest(`.${this.wrapperClass}`);\n if (wrapper == null) {\n throw new Error(`#remove was clicked from outside of a child record. Could not find an ancestor with class .${this.wrapperClass}`);\n }\n\n if (wrapper.dataset.newRecord === 'true') {\n wrapper.remove();\n } else {\n wrapper.style.display = 'none';\n let destroyInput = wrapper.querySelector(\"input[name*='_destroy']\") as HTMLInputElement | null;\n if (destroyInput == null) {\n throw new Error(`Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.`);\n }\n\n destroyInput.value = \"1\";\n }\n }\n\n generateID(): string {\n return new Date().getTime().toString() + Math.random().toString().slice(2);\n }\n\n private checkStructure() {\n let template = this.templateTarget.innerHTML;\n\n if (template.indexOf('NEW_RECORD')) {\n 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`\");\n }\n }\n}","import {BaseController} from \"./base_controller\";\n\nexport class PasswordConfirmController extends BaseController {\n\n static targets = [\"password\"];\n static classes = [\"error\"];\n\n declare readonly passwordTargets: HTMLInputElement[];\n\n declare readonly errorClass: string;\n declare readonly hasErrorClass: boolean;\n\n initialize() {\n this.checkPasswordsMatch = this.checkPasswordsMatch.bind(this);\n }\n\n connect() {\n this.passwordTargets.forEach((el) => el.addEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n disconnect() {\n this.passwordTargets.forEach((el) => el.removeEventListener(\"change\", this.checkPasswordsMatch));\n }\n\n private allPasswordsMatch(): boolean {\n let values = new Set(this.passwordTargets.map(el => el.value)); // Create a unique set of the password values\n 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)\n }\n\n private checkPasswordsMatch() {\n let element = this.el;\n if (this.allPasswordsMatch()) {\n this.dispatch(element, \"password-confirm:match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.remove(this.errorClass));\n }\n } else {\n this.dispatch(element, \"password-confirm:no-match\");\n if (this.hasErrorClass) {\n this.passwordTargets.forEach(el => el.classList.add(this.errorClass));\n }\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class PasswordPeekController extends BaseController {\n\n static targets = [\"password\"];\n\n declare readonly passwordTarget: HTMLInputElement;\n\n peak(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"text\";\n }\n\n hide(event?: Event) {\n event?.preventDefault();\n this.passwordTarget.type = \"password\";\n }\n\n toggle(event?: Event) {\n event?.preventDefault();\n if (this.passwordTarget.type === \"password\") {\n this.peak();\n } else {\n this.hide();\n }\n }\n}\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class RemoteFormController extends BaseController {\r\n static targets = [];\r\n\r\n static values = {selector: String};\r\n\r\n declare readonly hasSelectorValue: boolean;\r\n declare readonly selectorValue: string;\r\n\r\n get selector(): string {\r\n return this.hasSelectorValue ? this.selectorValue : `[data-controller~=\"${this.identifier}\"]`;\r\n }\r\n\r\n replace(event: { detail: [Element, any, XMLHttpRequest] }) {\r\n const [data, status, xhr] = event.detail;\r\n if (data instanceof Node) {\r\n let new_element = data.querySelector(this.selector);\r\n\r\n if (new_element == null) {\r\n throw new Error(`expected new form DOM with [data-controller=\"${this.identifier}\"] to be present in returned payload`);\r\n }\r\n\r\n let parentNode = this.el.parentNode;\r\n if (parentNode == null) {\r\n throw new Error('expected form to have a DOM parent, could not execute replaceChild');\r\n }\r\n parentNode.replaceChild(new_element, this.el);\r\n } else {\r\n console.log('Unknown', data);\r\n }\r\n }\r\n}\r\n","import {useDebounce, useWindowResize} from \"stimulus-use\";\nimport {WindowResizePayload} from \"stimulus-use/dist/use-window-resize/use-window-resize\";\nimport {BaseController} from \"./base_controller\";\n\ninterface ResponsiveIframeMessage {\n name: string,\n height: number,\n}\n\nexport class ResponsiveIframeWrapperController extends BaseController {\n\n initialize() {\n this.messageReceived = this.messageReceived.bind(this);\n }\n\n connect() {\n window.addEventListener(\"message\", this.messageReceived);\n }\n\n disconnect() {\n window.removeEventListener(\"message\", this.messageReceived);\n }\n\n messageReceived(message: MessageEvent) {\n let data = message.data;\n if (data.hasOwnProperty(\"name\") && data.name === \"iframe-body\" && data.hasOwnProperty(\"height\")) {\n this.resize(data.height);\n }\n }\n\n resize(height: number) {\n (this.el as HTMLIFrameElement).style.height = `${height}px`;\n }\n\n}\n\nexport class ResponsiveIframeBodyController extends BaseController {\n\n static debounces = [\"postUpdate\"];\n\n declare observe: () => void;\n declare unobserve: () => void;\n\n connect() {\n // If this Window is inside a frame\n if (window.self !== window.top) {\n useWindowResize(this);\n useDebounce(this, {});\n this.postUpdate();\n } else {\n // Not an iframe\n }\n }\n\n windowResize(payload: WindowResizePayload) {\n this.postUpdate();\n };\n\n postUpdate() {\n let payload: ResponsiveIframeMessage = {name: \"iframe-body\", height: this.getHeight()};\n window.parent.postMessage(\n payload,\n \"*\",\n );\n }\n\n getHeight(): number {\n const body = document.body;\n const html = document.documentElement;\n\n // Get the largest height out of body and html's various height measurements\n return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n }\n\n}\n","import camelCase from \"camelcase\";\r\nimport {BaseController} from \"../base_controller\";\r\n\r\nexport class EphemeralController extends BaseController {\r\n\r\n _cleanupSelf() {\r\n this.cleanup(this.el);\r\n }\r\n\r\n cleanup(element: HTMLElement) {\r\n element.dataset.controller = element.dataset.controller?.replaceAll(new RegExp(`(\\s|^)${this.identifier}(\\s|$)`, \"g\"), \"\") || \"\";\r\n if (element.dataset.controller == \"\") {\r\n // If there are no controllers left, remove the attribute\r\n delete element.dataset.controller;\r\n }\r\n\r\n let substringIdentifierValueRegex = new RegExp(`(\\s|^)${this.identifier}\\\\..+?(\\s|$)`, \"g\");\r\n element.dataset.target = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-target`)];\r\n if (element.dataset.target == \"\") {\r\n // If there are no targets left, remove the attribute\r\n delete element.dataset.target;\r\n }\r\n\r\n element.dataset.action = element.dataset.target?.replaceAll(substringIdentifierValueRegex, \"\") || \"\";\r\n delete element.dataset[camelCase(`${this.identifier}-action`)];\r\n if (element.dataset.action == \"\") {\r\n // If there are no actions left, remove the attribute\r\n delete element.dataset.action;\r\n }\r\n\r\n // @ts-ignore\r\n let values = this.constructor.values;\r\n if (values) {\r\n Object.keys(values).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-value`)]);\r\n }\r\n\r\n // @ts-ignore\r\n let classes = this.constructor.classes;\r\n if (classes) {\r\n Object.keys(classes).forEach(val => delete element.dataset[camelCase(`${this.identifier}-${val}-class`)]);\r\n }\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\r\nimport {scrollToElement} from \"./utilities/scroll\";\r\n\r\nexport class ScrollIntoFocusController extends EphemeralController {\r\n\r\n static values = {\r\n behavior: String,\r\n block: String,\r\n inline: String,\r\n };\r\n\r\n declare behaviorValue: ScrollBehavior;\r\n declare hasBehaviorValue: boolean;\r\n declare blockValue: ScrollLogicalPosition;\r\n declare hasBlockValue: boolean;\r\n declare inlineValue: ScrollLogicalPosition;\r\n declare hasInlineValue: boolean;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Attempt smooth scrolling, with polyfill\r\n scrollToElement(\r\n this.el,\r\n {\r\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\r\n block: this.hasBlockValue ? this.blockValue : \"center\",\r\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\r\n },\r\n ).catch(() => this.el.scrollIntoView()); // Fallback to snap-scrolling\r\n this._cleanupSelf();\r\n });\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToBottomController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"end\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\nimport {scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToController extends BaseController {\n\n static values = {\n selector: String,\n behavior: String,\n block: String,\n inline: String,\n };\n\n declare selectorValue: string;\n declare behaviorValue: ScrollBehavior;\n declare hasBehaviorValue: boolean;\n declare blockValue: ScrollLogicalPosition;\n declare hasBlockValue: boolean;\n declare inlineValue: ScrollLogicalPosition;\n declare hasInlineValue: boolean;\n\n scroll() {\n let target = document.querySelector(this.selectorValue);\n if (!target) {\n console.warn(`Could not find target for '${this.selectorValue}'`);\n return;\n }\n\n scrollToElement(\n target!,\n {\n behavior: this.hasBehaviorValue ? this.behaviorValue : \"smooth\",\n block: this.hasBlockValue ? this.blockValue : \"center\",\n inline: this.hasInlineValue ? this.inlineValue : \"center\",\n },\n ).catch(() => target!.scrollIntoView()); // Fallback to snap-scrolling\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {getScrollParent, scrollToElement} from \"./utilities/scroll\";\n\nexport class ScrollToTopController extends BaseController {\n\n static values = {\n mode: String,\n };\n\n declare modeValue: \"nearest\" | \"document\";\n declare hasModeValue: boolean;\n\n scroll(event?: Event) {\n event?.preventDefault();\n let mode = this.hasModeValue ? this.modeValue : \"document\";\n let target: null | HTMLElement;\n if (mode == \"document\") {\n target = document.body;\n } else {\n target = getScrollParent(this.el);\n }\n if (target == null) {\n return;\n }\n scrollToElement(target!, {behavior: \"smooth\", block: \"start\"}).catch(() => target!.scrollIntoView(false));\n }\n\n}\n\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class SelfDestructController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n timeout: null | ReturnType = null;\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n // Only start countdown on first paint\r\n this.timeout = setTimeout(() => this.el.remove(), this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this.timeout) {\r\n clearTimeout(this.timeout);\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"./base_controller\";\r\n\r\nexport class StickyController extends BaseController {\r\n\r\n static classes = [\"stuck\"];\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare readonly hasStuckClass: boolean;\r\n declare readonly stuckClass: string;\r\n declare readonly hasModeValue: \"top\" | \"bottom\";\r\n declare readonly modeValue: \"top\" | \"bottom\";\r\n\r\n _magicElement: HTMLDivElement | null = null;\r\n\r\n get _mode(): \"top\" | \"bottom\" {\r\n return this.hasModeValue ? this.modeValue : \"top\";\r\n }\r\n\r\n createMagicElement() {\r\n // Magic element placed next to the sticky el that acts as an external border.\r\n // When the magic element is off the page, we know that the sticky el is \"stuck\"\r\n if (this._magicElement !== null) {\r\n return;\r\n }\r\n\r\n this._magicElement = document.createElement(\"div\");\r\n switch (this._mode) {\r\n case \"top\":\r\n this.el.insertAdjacentElement(\"beforebegin\", this._magicElement);\r\n break;\r\n case \"bottom\":\r\n this.el.insertAdjacentElement(\"afterend\", this._magicElement);\r\n break;\r\n }\r\n }\r\n\r\n connect() {\r\n let element = this.el;\r\n this.createMagicElement();\r\n\r\n const observer = new IntersectionObserver(entries => {\r\n entries.forEach(entry => {\r\n if (entry.target !== this._magicElement) {\r\n return;\r\n }\r\n if (entry.intersectionRatio === 0) {\r\n element.classList.add(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n } else if (entry.intersectionRatio === 1) {\r\n element.classList.remove(this.hasStuckClass ? this.stuckClass : \"stuck\");\r\n }\r\n });\r\n\r\n }, {\r\n threshold: [0, 1],\r\n });\r\n observer.observe(this._magicElement!);\r\n }\r\n\r\n}\r\n","import {EphemeralController} from \"./utilities/ephemeral_controller\";\n\nexport class TeleportController extends EphemeralController {\n\n static values = {target: String, insert: String, immediate: Boolean};\n\n declare readonly immediateValue: boolean;\n declare readonly hasImmediateValue: boolean;\n declare readonly targetValue: string;\n declare readonly hasInsertValue: boolean;\n declare readonly insertValue: InsertPosition | \"replaceOuter\" | \"replaceInner\" | \"prepend\" | \"append\";\n\n connect() {\n if (!this.hasInsertValue) {\n throw new Error(\"`insert` value was not specified\");\n }\n\n requestAnimationFrame(() => {\n if (this.hasImmediateValue && this.immediateValue) {\n this.execute();\n }\n });\n }\n\n execute(event?: Event) {\n event?.preventDefault();\n let element = this.el;\n let destination = document.querySelector(this.targetValue);\n\n if (destination == null) {\n this.dispatch(element, \"teleport:error\");\n return;\n }\n\n let copy = element.cloneNode(true) as HTMLElement;\n this.cleanup(copy);\n\n switch (this.insertValue) {\n case \"beforebegin\":\n case \"beforeend\":\n case \"afterend\":\n case \"afterbegin\":\n destination.insertAdjacentHTML(this.insertValue, copy.outerHTML);\n break;\n case \"replaceOuter\":\n destination.outerHTML = copy.outerHTML;\n break;\n case \"replaceInner\":\n destination.innerHTML = copy.outerHTML;\n break;\n case \"prepend\":\n destination.insertAdjacentHTML(\"afterbegin\", copy.outerHTML);\n break;\n case \"append\":\n destination.insertAdjacentHTML(\"beforeend\", copy.outerHTML);\n break;\n default:\n throw new Error(\"`insert` value was not specified\");\n\n }\n element.remove();\n }\n\n}\n","import {useClickOutside, useHover} from \"stimulus-use\";\nimport {BaseController} from \"./base_controller\";\n\nexport type ToggleClassMode = \"on\" | \"off\" | \"toggle\"\n\nexport class ToggleClassController extends BaseController {\n\n static targets = [\"toggle\"];\n static values = {\n class: String,\n mouseEnter: String,\n mouseLeave: String,\n clickAway: Boolean,\n initial: String,\n };\n\n declare readonly toggleTargets: HTMLElement[];\n\n declare readonly classValue: string;\n declare readonly hasClassValue: boolean;\n\n declare readonly mouseEnterValue: ToggleClassMode;\n declare readonly hasMouseEnterValue: boolean;\n\n declare readonly mouseLeaveValue: ToggleClassMode;\n declare readonly hasMouseLeaveValue: boolean;\n\n declare readonly clickAwayValue: boolean;\n declare readonly hasClickAwayValue: boolean;\n\n declare readonly initialValue: \"on\" | \"off\";\n declare readonly hasInitialValue: boolean;\n\n connect() {\n if (!this.hasClassValue) {\n throw new Error(\"data-toggle-class-class-value must not be empty\");\n }\n\n if (this.hasMouseEnterValue || this.hasMouseLeaveValue) {\n useHover(this);\n }\n\n if (this.hasClickAwayValue && this.clickAwayValue) {\n useClickOutside(this);\n }\n\n requestAnimationFrame(() => {\n if (this.hasInitialValue) {\n if (this.initialValue === \"on\") {\n this.toggleTargets.forEach((target) => this.elementOn(target));\n } else {\n this.toggleTargets.forEach((target) => this.elementOff(target));\n }\n }\n });\n }\n\n clickOutside() {\n this.toggleTargets.forEach((target) => {\n if (this.elementWasToggled(target)) {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n }\n });\n }\n\n mouseEnter() {\n if (this.hasMouseEnterValue) {\n switch (this.mouseEnterValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n mouseLeave() {\n if (this.hasMouseLeaveValue) {\n switch (this.mouseLeaveValue) {\n case \"on\":\n this.on();\n break;\n case \"off\":\n this.off();\n break;\n case \"toggle\":\n this.toggle();\n break;\n }\n }\n return {};\n }\n\n on(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOn(target);\n });\n }\n\n off(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementOff(target);\n });\n }\n\n toggle(event?: Event) {\n this.toggleTargets.forEach((target) => {\n this.elementToggleStatus(target);\n this.elementToggle(target);\n });\n }\n\n private elementWasToggled(el: HTMLElement): boolean {\n return el.dataset.toggled == \"true\";\n }\n\n private elementToggleStatus(el: HTMLElement) {\n if (this.elementWasToggled(el)) {\n delete el.dataset.toggled;\n } else {\n el.dataset.toggled = \"true\";\n }\n }\n\n private elementToggle(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass));\n }\n\n private elementOn(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, true));\n }\n\n private elementOff(el: HTMLElement) {\n let classes = this.classValue.split(\" \");\n classes.forEach((klass) => el.classList.toggle(klass, false));\n }\n\n}\n","export function isTurboFrame(element: HTMLElement): element is TurboFrame {\r\n return element.nodeName == \"TURBO-FRAME\";\r\n}\r\n","import {BaseController} from \"./base_controller\";\nimport {isHTMLAnchorElement} from \"./utilities/elements\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\nexport class TurboFrameRCController extends BaseController {\n\n static values = {\n frameId: String,\n src: String,\n loadingMessage: String,\n };\n\n declare readonly frameIdValue: string;\n declare readonly srcValue: string;\n declare readonly hasSrcValue: boolean;\n declare readonly loadingMessageValue: string;\n declare readonly hasLoadingMessageValue: boolean;\n\n toggle(event?: Event) {\n event?.preventDefault();\n let frame = this._getFrame();\n let frameSrc = frame.src;\n if (frameSrc == null || frameSrc !== this._getSrc()) {\n this._setSrc();\n } else {\n this._clear();\n }\n }\n\n setSrc(event?: Event) {\n event?.preventDefault();\n this._setSrc();\n }\n\n clear(event?: Event) {\n event?.preventDefault();\n this._clear();\n }\n\n private _setSrc() {\n let frame = this._getFrame();\n if (this.hasLoadingMessageValue) {\n frame.innerHTML = this.loadingMessageValue;\n }\n frame.src = this._getSrc();\n }\n\n private _clear() {\n let frame = this._getFrame();\n frame.src = \"\";\n frame.innerHTML = \"\";\n }\n\n private _getFrame(): TurboFrame {\n let frame = document.getElementById(`${this.frameIdValue}`);\n if (frame == null) {\n throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);\n }\n if (!isTurboFrame(frame)) {\n throw new Error(`Element targeted by ID '${this.frameIdValue}'`);\n } else {\n return frame;\n }\n }\n\n private _getSrc(): string {\n let element = this.el;\n if (this.hasSrcValue) {\n return this.srcValue;\n } else if (isHTMLAnchorElement(element)) {\n return element.href;\n } else {\n throw new Error(\"No link given to drive frame to\");\n }\n }\n\n}\n","import {BaseController} from \"./base_controller\";\nimport {isTurboFrame} from \"./utilities/turbo\";\n\n// noinspection SillyAssignmentJS\nexport class TurboFrameRefreshController extends BaseController {\n\n static values = {\n interval: Number,\n poll: Boolean,\n };\n\n declare readonly intervalValue: number;\n declare readonly pollValue: boolean;\n declare readonly hasPollValue: boolean;\n _timeoutHandle: null | ReturnType = null;\n\n get poll(): boolean {\n return this.hasPollValue ? this.pollValue : false;\n }\n\n initialize() {\n this.refresh = this.refresh.bind(this);\n }\n\n connect() {\n let element = this.el;\n if (isTurboFrame(element)) {\n if (!!element.src) {\n throw new Error('The provided element has no `src` attribute.');\n }\n } else {\n throw new Error('Expected controller to be mounted on a element.');\n }\n if (this.poll) {\n requestAnimationFrame(() => this._timeoutHandle = setTimeout(() => this.refresh(), this.intervalValue));\n }\n }\n\n disconnect() {\n if (this._timeoutHandle) {\n clearTimeout(this._timeoutHandle);\n }\n }\n\n refresh(event?: Event) {\n event?.preventDefault();\n let element = this.el as TurboFrame;\n element.src = element.src;\n }\n\n}\n","import {BaseController} from \"./base_controller\";\n\nexport class WordCountController extends BaseController {\n\n static targets = [\"input\", \"output\"];\n static values = {min: Number, max: Number};\n static classes = [\"error\"];\n\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\n declare readonly outputTarget: HTMLElement;\n declare minValue: number;\n declare hasMinValue: boolean;\n declare maxValue: number;\n declare hasMaxValue: boolean;\n declare errorClass: string;\n declare hasErrorClass: boolean;\n\n initialize() {\n this.updateWordCount = this.updateWordCount.bind(this);\n }\n\n connect() {\n this.updateWordCount();\n this.inputTarget.addEventListener(\"input\", this.updateWordCount);\n }\n\n disconnect() {\n this.inputTarget.removeEventListener(\"input\", this.updateWordCount);\n }\n\n updateWordCount() {\n let wordCount = 0;\n let textAreaValue = this.inputTarget.value;\n let matches = textAreaValue.match(/\\S+/g);\n wordCount = (matches && matches.length) || 0;\n this.outputTarget.innerText = wordCount.toString();\n if (this.hasErrorClass) {\n if (this.isValidCount(wordCount)) {\n this.outputTarget.classList.remove(this.errorClass);\n } else {\n this.outputTarget.classList.add(this.errorClass);\n }\n }\n }\n\n isValidCount(count: number) {\n let min = 0;\n let max = 99999;\n\n if (this.hasMinValue) {\n min = this.minValue;\n }\n\n if (this.hasMaxValue) {\n max = this.maxValue;\n }\n\n return count >= min && count <= max;\n }\n\n}\n"],"names":["BaseController","context","_this","Proxy","get","obj","prop","returnVal","Reflect","self","test","logProperty","toString","apply","target","thisArg","argArray","log","args","dispatch","element","eventName","options","mergedOptions","Object","assign","bubbles","cancelable","detail","event","CustomEvent","dispatchEvent","functionName","this","application","debug","logger","console","groupCollapsed","identifier","groupEnd","Controller","AppearanceController","initialize","_handleVisibility","bind","connect","window","addEventListener","document","disconnect","removeEventListener","appear","el","away","_documentIsActive","visibilityState","hasFocus","AsyncBlockController","loadContent","hasReplaceTarget","replaceTarget","fetch","endpointValue","then","response","text","html","newEl","createElement","innerHTML","hasSelectorValue","selectedContent","querySelectorAll","selectorValue","replaceWith","children","err","_errorMessage","hasErrorMessageValue","errorMessageValue","endpoint","String","errorMessage","selector","AutoSubmitFormController","handler","forEach","_this2","e","method","controller","methodName","composeEventName","name","eventPrefix","composedName","extendedEvent","type","composed","originalEvent","defaultOptions","useIntersection","targetElement","controllerDisconnect","observer","IntersectionObserver","entries","entry","isIntersecting","isVisible","call","appearEvent","dispatchAppear","disappearEvent","dispatchDisappear","observe","unobserve","[object Object]","events","onlyVisible","StimulusUse","_a","_b","_c","controllerId","stimulusUseDebug","id","dataset","controllerInitialize","controllerConnect","UseHover","super","onEnter","onLeave","hover","enhanceController","UseMutation","error","handleError","mutation","MutationObserver","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","requestAnimationFrame","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","value","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","toggle","refresh","hasSelectAllTarget","selectAllTarget","checkboxTargets","checkbox","preventDefault","checked","checkboxesCount","checkboxesCheckedCount","indeterminate","filter","ClipboardController","supported","queryCommandSupported","hasRemoveUnusedValue","removeUnusedValue","hasFallbackTarget","fallbackTarget","hasCopyTarget","copyTarget","select","sourceTarget","copy","execCommand","isHTMLAnchorElement","nodeName","isHTMLFormElement","isHTMLInputElement","isHTMLButtonElement","isHTMLSelectElement","isElementCheckable","removeUnused","Boolean","ConfirmController","confirm","Error","message","hasMessageValue","messageValue","ConfirmNavigationController","handlePopstate","handleTurboNavigation","onbeforeunload","_message","_event","_messageValue","DebugController","testTargets","DetectDirtyController","checkDirty","loadValue","restore","defaultChecked","Array","from","every","option","defaultSelected","selected","defaultValue","dirty","some","setAttribute","removeAttribute","DisableInputsController","hasDisablerTarget","disablerTarget","disableInputs","enableInputs","shouldClear","hasClearValue","clearValue","disableTargets","_","disabled","clear","DisableWithController","enable","disable","_timeoutHandle","_isDisabled","stopImmediatePropagation","_cacheText","_getElText","_setElText","_disable","_timeout","_enable","str","undefined","hasTimeoutValue","timeoutValue","timeout","DismissableController","dismiss","ElementSaveController","_restoreOnLoad","localStorage","removeItem","_uniqueIdentifier","_element","save","attributes","attributesValue","split","data","attr","_get","setItem","JSON","stringify","getItem","savedData","parse","keys","_set","hasIdValue","idValue","elementID","location","href","_id","hasRestoreOnLoadValue","restoreOnLoadValue","hasElementTarget","elementTarget","restoreOnLoad","EmptyDomController","useMutation","childList","checkEmpty","mutate","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","emptyClasses","hasNotEmptyClass","notEmptyClasses","emptyClass","notEmptyClass","hasScopeSelectorValue","scopeSelectorValue","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormSaveController","_clear","clearOnSubmit","formIdentifier","formData","formElements","formID","elements","hasClearOnSubmitValue","clearOnSubmitValue","IntersectionController","threshold","disappear","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","smoothPolyfilled","LazyBlockController","scrollToElement","behavior","block","inline","scrollIntoView","smoothSupported","import","polyfill","polyfillSmooth","documentElement","getScrollParent","node","overflowY","getComputedStyle","parentElement","body","LightboxImageController","open","close","_dialog","image","className","imageClassName","srcset","srcSet","sizes","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","modalClassName","showModal","_this3","hasSrcValue","srcValue","hasSrcSetValue","srcSetValue","hasSizesValue","sizesValue","hasModalClass","modalClass","hasImageClass","imageClass","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","NestedFormController","checkStructure","content","templateTarget","replace","generateID","targetTarget","insertAdjacentHTML","insertMode","wrapper","closest","wrapperClass","newRecord","destroyInput","querySelector","Date","getTime","Math","random","slice","indexOf","hasWrapperSelectorValue","wrapperClassValue","hasInsertModeValue","insertModeValue","PasswordConfirmController","checkPasswordsMatch","passwordTargets","allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","constructor","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","secondsValue","seconds","StickyController","createMagicElement","_magicElement","_mode","intersectionRatio","hasStuckClass","stuckClass","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","ToggleClassController","hasClassValue","hasMouseEnterValue","hasMouseLeaveValue","useHover","hasClickAwayValue","clickAwayValue","onEvent","contains","rect","getBoundingClientRect","windowHeight","windowWidth","clientWidth","left","isElementInViewport","clickOutside","clickOutsideEvent","useClickOutside","hasInitialValue","toggleTargets","initialValue","elementOn","elementOff","elementWasToggled","elementToggleStatus","elementToggle","mouseEnter","mouseEnterValue","on","off","mouseLeave","mouseLeaveValue","_this4","_this5","toggled","classValue","klass","isTurboFrame","class","clickAway","initial","TurboFrameRCController","frameSrc","_getFrame","_getSrc","_setSrc","setSrc","frame","hasLoadingMessageValue","loadingMessageValue","getElementById","frameIdValue","frameId","loadingMessage","TurboFrameRefreshController","poll","intervalValue","hasPollValue","pollValue","interval","WordCountController","updateWordCount","wordCount","matches","match","isValidCount"],"mappings":"ihEAEaA,cAEX,WAAYC,SAEV,OADAC,cAAMD,aACKE,WAAY,CACrBC,IAAK,SAACC,EAAKC,GACT,IAAIC,EAAYC,QAAQJ,IAAIC,EAAKC,GAC7BG,OACJ,GAgDR,SAAqBH,GACnB,OAAQA,GACN,IAAK,cACL,IAAK,KACL,IAAK,UACL,IAAK,cACL,IAAK,aACL,IAAK,MACL,IAAK,WACL,IAAK,OACL,IAAK,qBACL,IAAK,aACH,SAGJ,QAAI,SAASI,KAAKJ,IAGd,kBAAkBI,KAAKJ,IAGvB,aAAaI,KAAKJ,IAGlB,oBAAoBI,KAAKJ,IAGzB,aAAaI,KAAKJ,IA3EZK,CAAYL,EAAKM,YAAa,CAChC,GAAwB,mBAAbL,EACT,WAAWJ,MAAMI,EAAW,CAC1BM,eAAMC,EAAaC,EAAcC,GAI/B,OAHAP,EAAKQ,IAAIX,EAAKM,WAAY,CACxBM,KAAMF,IAEDR,QAAQK,MAAMC,EAAQC,EAASC,MAI1Cd,EAAKe,IAAIX,EAAKM,YAGlB,OAAOL,kBAtBf,2BA+BEY,SAAA,SAASC,EAAsBC,EAAmBC,YAAAA,IAAAA,EAA2B,IAC3E,IAAIC,EAAgBC,OAAOC,OAAO,GAAI,CAACC,SAAS,EAAMC,YAAY,EAAMC,OAAQ,CAACd,OAAQM,IAAWE,GAC9FC,EAAcK,OAAOd,SACzBS,EAAcK,OAAOd,OAASM,GAEhC,IAAIS,EAAQ,IAAIC,YAAYT,EAAWE,GACvCH,EAAQW,cAAcF,MAGxBZ,IAAA,SAAIe,EAAsBd,GAExB,YAFwBA,IAAAA,EAAW,IAE9Be,KAAKC,YAAYC,MAAtB,CAGA,IAAIC,EAASC,QACbD,EAAOE,oBAAoBL,KAAKM,kBAAiBP,EAAgB,iBAAkB,gBACnFI,EAAOnB,OACLG,QAASa,KAAKb,SACXF,IAELkB,EAAOI,2CAvBP,YAAYpB,eA5BoBqB,cCAvBC,kGAEXC,WAAA,WACEV,KAAKW,kBAAoBX,KAAKW,kBAAkBC,KAAKZ,SAGvDa,QAAA,WACEC,OAAOC,iBAAiB,QAASf,KAAKW,mBACtCG,OAAOC,iBAAiB,OAAQf,KAAKW,mBACrCK,SAASD,iBAAiB,mBAAoBf,KAAKW,mBACnDX,KAAKW,uBAGPM,WAAA,WACEH,OAAOI,oBAAoB,QAASlB,KAAKW,mBACzCG,OAAOI,oBAAoB,OAAQlB,KAAKW,mBACxCK,SAASE,oBAAoB,mBAAoBlB,KAAKW,sBAGxDQ,OAAA,WACEnB,KAAKd,SAASc,KAAKoB,GAAI,wBAGzBC,KAAA,WACErB,KAAKd,SAASc,KAAKoB,GAAI,sBAGzBT,kBAAA,WACEX,KAAKsB,oBAAsBtB,KAAKmB,SAAWnB,KAAKqB,UAGlDC,kBAAA,WACE,MAAmC,WAA5BN,SAASO,iBAAgCP,SAASQ,eAhCnBzD,GCA7B0D,kGAqBXZ,QAAA,WACEb,KAAK0B,iBAGPA,YAAA,sBACMlD,EAAOwB,KACPoB,EAAKpB,KAAK2B,iBAAmB3B,KAAK4B,cAAgB5B,KAAKoB,GAC3DS,MAAM7B,KAAK8B,eACVC,KAAK,SAACC,UAAaA,EAASC,SAC5BF,KAAK,SAACG,GACL,IAAIC,EAAQnB,SAASoB,cAAc,OAEnC,GADAD,EAAME,UAAYH,EACdjE,EAAKqE,iBAAkB,CACzB,IAAIC,EAAkBJ,EAAMK,iBAAiBvE,EAAKwE,eAClDrB,EAAGsB,kBAAHtB,EAAkBmB,QAElBnB,EAAGsB,kBAAHtB,EAAkBe,EAAMQ,UAG1BnE,EAAKU,SAASkC,EAAI,wBAEb,SAAAwB,GACLxB,EAAGsB,YAAYzE,EAAK4E,eACpBrE,EAAKU,SAASkC,EAAI,wBAEX,WACP5C,EAAKU,SAASkC,EAAI,6DAhCpB,YAAY0B,qBAAuB9C,KAAK+C,kBAAoB,qCAftBhF,GACjC0D,UAAU,CAAC,WACXA,SAAS,CAACuB,SAAUC,OAAQC,aAAcD,OAAQE,SAAUF,YCFxDG,kGAEX1C,WAAA,WACEV,KAAKqD,QAAUrD,KAAKqD,QAAQzC,KAAKZ,SAGnCa,QAAA,sBACEb,KAAKoB,GAAGoB,iBAAiB,2BAA2Bc,QAAQ,SAAAlC,UAAMA,EAAGL,iBAAiB,SAAU9C,EAAKoF,cAGvGpC,WAAA,sBACEjB,KAAKoB,GAAGoB,iBAAiB,2BAA2Bc,QAAQ,SAAAlC,UAAMA,EAAGF,oBAAoB,SAAUqC,EAAKF,cAGlGA,QAAA,SAAQG,GAEdxD,KAAKd,SAAUc,KAAKoB,GAAK,cAhBiBrD,GCFvC,MAAM0F,EAAS,CAACC,EAAYC,KAC/B,MAAMF,EAASC,EAAWC,GAC1B,MAAqB,mBAAVF,EACAA,EAGA,IAAIxE,QAGN2E,EAAmB,CAACC,EAAMH,EAAYI,KAC/C,IAAIC,EAAeF,EAOnB,OANoB,IAAhBC,EACAC,EAAe,GAAGL,EAAWpD,cAAcuD,IAEf,iBAAhBC,IACZC,EAAe,GAAGD,KAAeD,KAE9BE,GAEEC,EAAgB,CAACC,EAAMrE,EAAOD,KACvC,MAAMF,QAAEA,EAAOC,WAAEA,EAAUwE,SAAEA,GAAatE,GAAS,CAAEH,SAAS,EAAMC,YAAY,EAAMwE,UAAU,GAUhG,OATItE,GACAL,OAAOC,OAAOG,EAAQ,CAAEwE,cAAevE,IAEvB,IAAIC,YAAYoE,EAAM,CACtCxE,QAAAA,EACAC,WAAAA,EACAwE,SAAAA,EACAvE,OAAAA,KC3BFyE,EAAiB,CACnBtE,eAAe,EACfgE,aAAa,GAEJO,EAAkB,CAACX,EAAYrE,EAAU,MAClD,MAAMS,cAAEA,EAAagE,YAAEA,GAAgBvE,OAAOC,OAAO,GAAI4E,EAAgB/E,GACnEiF,GAAiBjF,MAAAA,OAAyC,EAASA,EAAQF,UAAYuE,EAAWvE,QAgClGoF,EAAuBb,EAAWzC,WAAWL,KAAK8C,GAClDc,EAAW,IAAIC,qBAhCHC,IACd,MAAOC,GAASD,EACZC,EAAMC,eAOS,CAACD,IAIpB,GAHAjB,EAAWmB,WAAY,EACvBpB,EAAOC,EAAY,UAAUoB,KAAKpB,EAAYiB,GAE1C7E,EAAe,CACf,MAAMV,EAAYwE,EAAiB,SAAUF,EAAYI,GACnDiB,EAAcf,EAAc5E,EAAW,KAAM,CAAEsE,WAAAA,EAAYiB,MAAAA,IACjEL,EAAcxE,cAAciF,KAb5BC,CAAeL,GAEVjB,EAAWmB,WAcE,CAACF,IAIvB,GAHAjB,EAAWmB,WAAY,EACvBpB,EAAOC,EAAY,aAAaoB,KAAKpB,EAAYiB,GAE7C7E,EAAe,CACf,MAAMV,EAAYwE,EAAiB,YAAaF,EAAYI,GACtDmB,EAAiBjB,EAAc5E,EAAW,KAAM,CAAEsE,WAAAA,EAAYiB,MAAAA,IACpEL,EAAcxE,cAAcmF,KApB5BC,CAAkBP,IA0B0BtF,GAC9C8F,EAAU,KACZX,EAASW,QAAQb,IAEfc,EAAY,KACdZ,EAASY,UAAUd,IAUvB,OARA/E,OAAOC,OAAOkE,EAAY,CACtBmB,WAAW,EACXQ,aACID,IACAb,OAGRY,IACO,CAACA,EAASC,ICtDfhB,EAAiB,CACnBkB,OAAQ,CAAC,QAAS,YAClBC,aAAa,EACbzF,eAAe,EACfgE,aAAa,GCLXM,EAAiB,CACnBlE,OAAO,EACPC,OAAQC,SAEL,MAAMoF,EACTH,YAAY3B,EAAYrE,EAAU,IAC9B,IAAIoG,EAAIC,EAAIC,EACZ3F,KAAKhB,IAAM,CAACe,EAAcd,KACjBe,KAAKE,QAEVF,KAAKG,OAAOE,eAAe,KAAKL,KAAK0D,WAAWpD,iBAAiBP,IAAgB,iBAAkB,gBACnGC,KAAKG,OAAOnB,IAAIO,OAAOC,OAAO,CAAEoG,aAAc5F,KAAK4F,cAAgB3G,IACnEe,KAAKG,OAAOI,aAEhBP,KAAKE,MAAmK,QAA1JwF,EAAgF,QAA1ED,EAAKpG,MAAAA,OAAyC,EAASA,EAAQa,aAA0B,IAAPuF,EAAgBA,EAAK/B,EAAWzD,YAAY4F,wBAAqC,IAAPH,EAAgBA,EAAKtB,EAAelE,MACpNF,KAAKG,OAAqF,QAA3EwF,EAAKtG,MAAAA,OAAyC,EAASA,EAAQc,cAA2B,IAAPwF,EAAgBA,EAAKvB,EAAejE,OACtIH,KAAK0D,WAAaA,EAClB1D,KAAK4F,aAAelC,EAAWvE,QAAQ2G,IAAMpC,EAAWvE,QAAQ4G,QAAQD,GAExE9F,KAAKgG,qBAAuBtC,EAAWhD,WAAWE,KAAK8C,GACvD1D,KAAKiG,kBAAoBvC,EAAW7C,QAAQD,KAAK8C,GACjD1D,KAAKuE,qBAAuBb,EAAWzC,WAAWL,KAAK8C,ICnBxD,MAAMwC,UAAiBV,EAC1BH,YAAY3B,EAAYrE,EAAU,IAC9B8G,MAAMzC,EAAYrE,GAClBW,KAAKmF,QAAU,KACXnF,KAAKsE,cAAcvD,iBAAiB,aAAcf,KAAKoG,SACvDpG,KAAKsE,cAAcvD,iBAAiB,aAAcf,KAAKqG,UAE3DrG,KAAKoF,UAAY,KACbpF,KAAKsE,cAAcpD,oBAAoB,aAAclB,KAAKoG,SAC1DpG,KAAKsE,cAAcpD,oBAAoB,aAAclB,KAAKqG,UAE9DrG,KAAKoG,QAAU,KACX3C,EAAOzD,KAAK0D,WAAY,cAAcoB,KAAK9E,KAAK0D,YAChD1D,KAAKhB,IAAI,aAAc,CAAEsH,OAAO,KAEpCtG,KAAKqG,QAAU,KACX5C,EAAOzD,KAAK0D,WAAY,cAAcoB,KAAK9E,KAAK0D,YAChD1D,KAAKhB,IAAI,aAAc,CAAEsH,OAAO,KAEpCtG,KAAKsE,eAAiBjF,MAAAA,OAAyC,EAASA,EAAQF,UAAYuE,EAAWvE,QACvGa,KAAK0D,WAAaA,EAClB1D,KAAKuG,oBACLvG,KAAKmF,UAETE,oBACI,MAAMd,EAAuBvE,KAAK0D,WAAWzC,WAAWL,KAAKZ,KAAK0D,YAKlEnE,OAAOC,OAAOQ,KAAK0D,WAAY,CAAEzC,WAJd,KACfjB,KAAKoF,YACLb,QC5BL,MAAMiC,UAAoBhB,EAC7BH,YAAY3B,EAAYrE,EAAU,IAC9B8G,MAAMzC,EAAYrE,GAClBW,KAAKmF,QAAU,KACX,IACInF,KAAKwE,SAASW,QAAQnF,KAAKsE,cAAetE,KAAKX,SAEnD,MAAOoH,GACHzG,KAAK0D,WAAWzD,YAAYyG,YAAYD,EAAO,gFAAiF,MAGxIzG,KAAKoF,UAAY,KACbpF,KAAKwE,SAASvD,cAElBjB,KAAK2G,SAAYjC,IACbjB,EAAOzD,KAAK0D,WAAY,UAAUoB,KAAK9E,KAAK0D,WAAYgB,GACxD1E,KAAKhB,IAAI,SAAU,CAAE0F,QAAAA,KAEzB1E,KAAKsE,eAAiBjF,MAAAA,OAAyC,EAASA,EAAQF,UAAYuE,EAAWvE,QACvGa,KAAK0D,WAAaA,EAClB1D,KAAKX,QAAUA,EACfW,KAAKwE,SAAW,IAAIoC,iBAAiB5G,KAAK2G,UAC1C3G,KAAKuG,oBACLvG,KAAKmF,UAETE,oBACI,MAAMd,EAAuBvE,KAAK0D,WAAWzC,WAAWL,KAAKZ,KAAK0D,YAKlEnE,OAAOC,OAAOQ,KAAK0D,WAAY,CAAEzC,WAJd,KACfjB,KAAKoF,YACLb,QAKL,MCnCMsC,EAAmBnD,IAC5B,MAAMoD,EAAYlH,IACd,MAAMmH,WAAEA,EAAUC,YAAEA,GAAgBlG,OAC9BmG,EAAU,CACZC,OAAQF,GAAeG,SACvBC,MAAOL,GAAcI,SACrBvH,MAAAA,GAEJ6D,EAAOC,EAAY,gBAAgBoB,KAAKpB,EAAYuD,IAElD1C,EAAuBb,EAAWzC,WAAWL,KAAK8C,GAClDyB,EAAU,KACZrE,OAAOC,iBAAiB,SAAU+F,GAClCA,KAEE1B,EAAY,KACdtE,OAAOI,oBAAoB,SAAU4F,IASzC,OAPAvH,OAAOC,OAAOkE,EAAY,CACtB2B,aACID,IACAb,OAGRY,IACO,CAACA,EAASC,ICrBfiC,EAAW,CAACC,EAAIC,EADF,OAEhB,IAAIC,EAAY,KAChB,OAAO,WACH,MAAMvI,EAAOwI,UACPzJ,EAAUgC,KACV8G,EAAW,IAAMQ,EAAG1I,MAAMZ,EAASiB,GACrCuI,GACAE,aAAaF,GAEjBA,EAAYG,WAAWb,EAAUS,SCX5BK,kGAEXlH,WAAA,WACEV,KAAK6H,SAAW7H,KAAK6H,SAASjH,KAAKZ,SAGrCa,QAAA,WACE,IAAIhC,EAASmB,KAAKoB,GAClBvC,EAAOiJ,MAAMC,OAAS,OACtBlJ,EAAOiJ,MAAME,UAAY,aACzBnJ,EAAOkC,iBAAiB,QAASf,KAAK6H,UACtChJ,EAAOkC,iBAAiB,QAASf,KAAK6H,UACtChB,EAAgB7G,MAChBiI,sBAAsBjI,KAAK6H,aAG7BK,aAAA,WACElI,KAAK6H,cAGCA,SAAA,WACN7H,KAAKmI,SAASnI,KAAKoB,OAGb+G,SAAA,SAAShJ,GACf,IAAIiJ,EAASjJ,EAAQkJ,aAAelJ,EAAQmJ,aAC5CnJ,EAAQ2I,MAAMZ,OAAS,OACvB/H,EAAQ2I,MAAMZ,OAAS/H,EAAQoJ,aAAeH,EAAS,SA3BnBrK,GCD3ByK,kGAeX9H,WAAA,WACEV,KAAKyI,iBAAmBzI,KAAKyI,iBAAiB7H,KAAKZ,SAGrDa,QAAA,WACEb,KAAKyI,mBACLzI,KAAK0I,YAAY3H,iBAAiB,QAASf,KAAKyI,qBAGlDxH,WAAA,WACEjB,KAAK0I,YAAYxH,oBAAoB,QAASlB,KAAKyI,qBAG7CA,iBAAA,WACN,IAAIE,EAAY3I,KAAK0I,YAAYE,MAAMC,OACvC7I,KAAK8I,aAAaC,UAAYJ,EAAUhK,WACpCqB,KAAKgJ,gBACHhJ,KAAKiJ,cAAcN,GACrB3I,KAAK8I,aAAaI,UAAUC,OAAOnJ,KAAKoJ,YAExCpJ,KAAK8I,aAAaI,UAAUG,IAAIrJ,KAAKoJ,gBAKnCH,cAAA,SAAcK,GACpB,IAAIC,EAAM,EACNC,EAAM,MAUV,OARIxJ,KAAKyJ,cACPF,EAAMvJ,KAAK0J,UAGT1J,KAAK2J,cACPH,EAAMxJ,KAAK4J,UAGNN,GAASC,GAAOD,GAASE,MApDKzL,GAEhCyK,UAAU,CAAC,QAAS,UACpBA,SAAS,CAACe,IAAKM,OAAQL,IAAKK,QAC5BrB,UAAU,CAAC,aCJPsB,kGAeXpJ,WAAA,WACEV,KAAK+J,OAAS/J,KAAK+J,OAAOnJ,KAAKZ,MAC/BA,KAAKgK,QAAUhK,KAAKgK,QAAQpJ,KAAKZ,SAGnCa,QAAA,sBACEoH,sBAAsB,WACfhK,EAAKgM,qBAIVhM,EAAKiM,gBAAgBnJ,iBAAiB,SAAU9C,EAAK8L,QACrD9L,EAAKkM,gBAAgB7G,QAAQ,SAAA8G,UAAYA,EAASrJ,iBAAiB,SAAU9C,EAAK+L,WAClF/L,EAAK+L,gBAIT/I,WAAA,sBACOjB,KAAKiK,qBAIVjK,KAAKkK,gBAAgBhJ,oBAAoB,SAAUlB,KAAK+J,QACxD/J,KAAKmK,gBAAgB7G,QAAQ,SAAC8G,UAAaA,EAASlJ,oBAAoB,SAAUqC,EAAKyG,eAGjFD,OAAA,SAAOnK,GACbA,EAAMyK,iBACN,IAAIxL,EAASe,EAAMf,OACnBmB,KAAKmK,gBAAgB7G,QAAQ,SAAC8G,UAAaA,EAASE,QAAUzL,EAAOyL,aAG/DN,QAAA,WACN,IAAMO,EAAkBvK,KAAKmK,gBAAgBtB,OACvC2B,EAAyBxK,KAAKsK,QAAQzB,OAE5C7I,KAAKkK,gBAAgBI,QAAUE,EAAyB,EACxDxK,KAAKkK,gBAAgBO,cAAgBD,EAAyB,GAAKA,EAAyBD,sCA5C5F,YAAYJ,gBAAgBO,OAAO,SAAAN,UAAYA,EAASE,4CAIxD,YAAYH,gBAAgBO,OAAO,SAAAN,UAAaA,EAASE,iBAZZvM,GACxC+L,UAAU,CAAC,YAAa,gBCDpBa,cAAb,sEAcc,WAdd,2BAgBE9J,QAAA,WACEb,KAAK4K,UAAY5J,SAAS6J,sBAAsB,QAE5C7K,KAAK8K,sBAAwB9K,KAAK+K,oBAChC/K,KAAK4K,WAAa5K,KAAKgL,kBACzBhL,KAAKiL,eAAe9B,SACXnJ,KAAKkL,eACdlL,KAAKmL,WAAWhC,aAKtBiC,OAAA,SAAOxL,GACDA,GACFA,EAAMyK,iBAEPrK,KAAKqL,aAAwDD,YAGhEE,KAAA,SAAK1L,GACCA,GACFA,EAAMyK,iBAEPrK,KAAKqL,aAAwDD,SAC1DpL,KAAK4K,WACP5J,SAASuK,YAAY,YAzCcxN,YCEzByN,EAAoBrM,GAClC,MAA2B,KAApBA,EAAQsM,kBAGDC,EAAkBvM,GAChC,MAA2B,QAApBA,EAAQsM,kBAGDE,EAAmBxM,GACjC,MAA2B,SAApBA,EAAQsM,kBAGDG,EAAoBzM,GAClC,MAA2B,UAApBA,EAAQsM,kBAGDI,EAAoB1M,GAClC,MAA2B,UAApBA,EAAQsM,kBAODK,EAAmB3M,GACjC,OAAOwM,EAAmBxM,KAA8B,UAAjBA,EAAQ8E,MAAqC,aAAjB9E,EAAQ8E,MDzBpE0G,UAAU,CAAC,SAAU,OAAQ,YAC7BA,SAAS,CAACoB,aAAcC,aEFpBC,kGAaXvL,WAAA,WACEV,KAAKkM,QAAUlM,KAAKkM,QAAQtL,KAAKZ,SAGnCa,QAAA,sBACEoH,sBAAsB,WACpB,IAAI9I,EAAUlB,EAAKmD,GACnB,GAAIsK,EAAkBvM,GACpBA,EAAQ4B,iBAAiB,SAAU9C,EAAKiO,kBAC/BV,EAAoBrM,GAG7B,UAAUgN,MAAM,iDAFhBhN,EAAQ4B,iBAAiB,QAAS9C,EAAKiO,eAO7CA,QAAA,SAAQtM,GACAkB,OAAOoL,QAAQlM,KAAKoM,WACxBxM,EAAMyK,iBACNrK,KAAKd,SAASc,KAAKoB,GAAI,0DAvBzB,YAAYiL,gBAAkBrM,KAAKsM,aAAe,uBAVfvO,GAE9BkO,SAAS,CACdG,QAASnJ,YCJAsJ,kGAWX7L,WAAA,WACEV,KAAKwM,eAAiBxM,KAAKwM,eAAe5L,KAAKZ,MAC/CA,KAAKyM,sBAAwBzM,KAAKyM,sBAAsB7L,KAAKZ,SAG/Da,QAAA,sBACEC,OAAO4L,eAAiB,kBAAMzO,EAAK0O,UACnC7L,OAAOC,iBAAiB,WAAYf,KAAKwM,gBACzC1L,OAAOC,iBAAiB,SAAU,WAChCD,OAAOI,oBAAoB,WAAYjD,EAAKuO,gBAC5C1L,OAAO4L,eAAiB,OAE1B5L,OAAOC,iBAAiB,0BAA2Bf,KAAKyM,uBACxD3L,OAAOC,iBAAiB,qBAAsBf,KAAKyM,0BAGrDD,eAAA,SAAeI,GACb,YAGFH,sBAAA,SAAsB7M,GACfsM,QAAQlM,KAAK2M,WAChB/M,EAAMyK,sDAzBR,YAAYgC,gBAAkBrM,KAAK6M,cAAgB,2EARN9O,GAExCwO,SAAS,CAACI,SAAU1J,YCFhB6J,0FAKXjM,QAAA,WACET,QAAQpB,IAAI,mBAAoBgB,KAAMA,KAAK+M,iBANVhP,GAE5B+O,UAAU,CAAC,YCDPE,cAAb,qEAEuC,cAFvC,2BAIEtM,WAAA,WACEV,KAAKiN,WAAajN,KAAKiN,WAAWrM,KAAKZ,SAGzCa,QAAA,WACE,IAAI1B,EAAUa,KAAKoB,GAEjBpB,KAAKkN,UADHpB,EAAmB3M,GACJA,EAAQmL,QAERnL,EAAQyJ,MAE3B5I,KAAKiN,aACL9N,EAAQ4B,iBAAiB,QAASf,KAAKiN,YACvC9N,EAAQ4B,iBAAiB,SAAUf,KAAKiN,eAG1ChM,WAAA,WACE,IAAI9B,EAAUa,KAAKoB,GACnBjC,EAAQ+B,oBAAoB,QAASlB,KAAKiN,YAC1C9N,EAAQ+B,oBAAoB,SAAUlB,KAAKiN,eAG7CE,QAAA,sBACMhO,EAAUa,KAAKoB,GACnB,GAAI0K,EAAmB3M,GACrBA,EAAQmL,QAAUnL,EAAQiO,uBACjBvB,EAAoB1M,GAAU,CACvC,IAAIE,EAAUgO,MAAMC,KAAKnO,EAAQE,SAC7BA,EAAQkO,MAAM,SAAAC,UAAWA,EAAOC,kBAClCpO,EAAQiE,QAAQ,SAACkK,GACfA,EAAOE,SAAWF,EAAO5E,OAASrF,EAAK2J,YAGzC7N,EAAQiE,QAAQ,SAACkK,UAAWA,EAAOE,SAAWF,EAAOC,kBAEvDJ,MAAMC,KAAKnO,EAAQE,SAASiE,QAAQ,SAAAkK,UAAUA,EAAOE,SAAWF,EAAOC,uBAEvEtO,EAAQyJ,MAAQzJ,EAAQwO,gBAIpBV,WAAA,SAAWL,GACjB,IAEIgB,EAFAzO,EAAUa,KAAKoB,GAGnB,GAAI0K,EAAmB3M,GACrByO,EAAQzO,EAAQmL,SAAWnL,EAAQiO,uBAC1BvB,EAAoB1M,GAAU,CACvC,IAAIE,EAAUgO,MAAMC,KAAKnO,EAAQE,SAE/BuO,EADEvO,EAAQkO,MAAM,SAAAC,UAAWA,EAAOC,kBAC1BtO,EAAQyJ,OAAS5I,KAAKkN,UAEtB7N,EAAQwO,KAAK,SAACL,UAAWA,EAAOE,UAAYF,EAAOC,uBAG7DG,EAAQzO,EAAQyJ,OAASzJ,EAAQwO,aAG/BC,EACFzO,EAAQ2O,aAAa,aAAc,QAEnC3O,EAAQ4O,gBAAgB,kBAjEahQ,GCD9BiQ,kGAcXnN,QAAA,WACEb,KAAK+J,YAGPA,OAAA,WACM/J,KAAKiO,mBAAqBjO,KAAKkO,eAAe5D,QAChDtK,KAAKmO,gBAELnO,KAAKoO,kBAITD,cAAA,WACE,IAAIE,EAAcrO,KAAKsO,eAAiBtO,KAAKuO,WAC7CvO,KAAKwO,eAAelL,QAAQ,SAAClC,EAAIqN,GAC3BJ,IACFjN,EAAGwH,MAAQ,IAEbxH,EAAGsN,UAAW,OAIlBN,aAAA,WACEpO,KAAKwO,eAAelL,QAAQ,SAAClC,EAAIqN,GAC/BrN,EAAGsN,UAAW,QAtCyB3Q,GAEpCiQ,UAAU,CAAC,WAAY,WAEvBA,SAAS,CACdW,MAAO3C,aCJE4C,kGAuBXlO,WAAA,WACEV,KAAK6O,OAAS7O,KAAK6O,OAAOjO,KAAKZ,MAC/BA,KAAK8O,QAAU9O,KAAK8O,QAAQlO,KAAKZ,SAGnCa,QAAA,sBACEoH,sBAAsB,WACpBhK,EAAKmD,GAAGL,iBAAiB,QAAS9C,EAAK6Q,cAI3C7N,WAAA,WACMjB,KAAK+O,gBACPrH,aAAa1H,KAAK+O,mBAItBD,QAAA,SAAQlP,GACN,IAAIT,EAAUa,KAAKoB,GAEfpB,KAAKgP,YAAY7P,UACnBS,GAAAA,EAAOyK,uBACPzK,GAAAA,EAAOqP,6BAEPjP,KAAKkP,WAAalP,KAAKmP,WAAWhQ,GAClCa,KAAKoP,WAAWjQ,EAASa,KAAK2M,UAC9B3M,KAAKqP,SAASlQ,GACdwI,WAAW3H,KAAK6O,OAAQ7O,KAAKsP,cAIjCT,OAAA,SAAOjP,SACLA,GAAAA,EAAOyK,iBACP,IAAIlL,EAAUa,KAAKoB,GACfpB,KAAKgP,YAAY7P,KACnBa,KAAKoP,WAAWjQ,EAASa,KAAKkP,YAC9BlP,KAAKuP,QAAQpQ,OAIjB6P,YAAA,SAAY5N,GACV,OAAKuK,EAAmBvK,IAAkB,UAAXA,EAAG6C,MAAqB2H,EAAoBxK,GAClEA,EAAGsN,SAEoB,QAAvBtN,EAAG2E,QAAQ2I,YAItBS,WAAA,SAAW/N,GACT,OAAIuK,EAAmBvK,IAAkB,UAAXA,EAAG6C,KACxB7C,EAAGwH,MAEHxH,EAAG2H,aAIdqG,WAAA,SAAWhO,EAAiBoO,GACtB7D,EAAmBvK,IAAkB,UAAXA,EAAG6C,KAC/B7C,EAAGwH,MAAQ4G,GACF5D,EAAoBxK,IAAOoK,EAAoBpK,MACxDA,EAAG2H,UAAYyG,MAInBH,SAAA,SAASjO,GACFuK,EAAmBvK,IAAkB,UAAXA,EAAG6C,MAAqB2H,EAAoBxK,GACzEA,EAAGsN,UAAW,EAEdtN,EAAG2E,QAAQ2I,SAAW,UAI1Ba,QAAA,SAAQnO,GACFuK,EAAmBvK,IAAkB,UAAXA,EAAG6C,MAAoB2H,EAAoBxK,GACvEA,EAAGsN,UAAW,EAEdtN,EAAG2E,QAAQ2I,cAAWe,uCAnFxB,YAAYpD,gBAAkBrM,KAAKsM,aAAe,iDAIlD,YAAYoD,gBAAkB1P,KAAK2P,aAAe,WApBX5R,GAElC6Q,SAAS,CACdxC,QAASnJ,OACT2M,QAAS/F,YCLAgG,0FAEXC,QAAA,WACE9P,KAAKoB,GAAG+H,aAH+BpL,GCE9BgS,kGA6CXlP,QAAA,sBACEoH,sBAAsB,WAChBhK,EAAK+R,gBACP/R,EAAKkP,eAKXwB,MAAA,SAAM/O,GACAA,GACFA,EAAMyK,iBAER4F,aAAaC,WAAWlQ,KAAKmQ,mBAC7BnQ,KAAKd,SAASc,KAAKoQ,oCAGrBC,KAAA,SAAKzQ,GACCA,GACFA,EAAMyK,iBAER,IAAIlL,EAAUa,KAAKoQ,SACfE,EAAatQ,KAAKuQ,gBAAgBC,MAAM,KACxCC,EAA+B,GACnCH,EAAWhN,QAAQ,SAACoN,UAAiBD,EAAKC,GAAQC,UAAKxR,EAASuR,KAChET,aAAaW,QAAQ5Q,KAAKmQ,kBAAmBU,KAAKC,UAAUL,IAC5DzQ,KAAKd,SAASC,kCAGhBgO,QAAA,SAAQvN,GACFA,GACFA,EAAMyK,iBAER,IAAIlL,EAAUa,KAAKoQ,SACnB,GAAIH,aAAac,QAAQ/Q,KAAKmQ,mBAAoB,CAChD,IAAMa,EAAYH,KAAKI,MAAMhB,aAAac,QAAQ/Q,KAAKmQ,oBACvD5Q,OAAO2R,KAAKF,GAAW1N,QAAQ,SAACoN,GAC9BS,UAAKhS,EAAwBuR,EAAMM,EAAUN,MAE/C1Q,KAAKd,SAASC,uCAEda,KAAKd,SAASC,gEAjEhB,GAAIa,KAAKoR,WACP,YAAYC,QAEd,IAAIC,EAAYtR,KAAKoB,GAAG0E,GAExB,GAAkB,KAAdwL,EACF,OAAOA,EAEP,UAAUnF,mFAAmFnM,KAAKM,2GAMpG,OADYiR,SAASC,SACJxR,KAAKyR,2CAItB,YAAYC,uBAAwB1R,KAAK2R,oDAIzC,YAAYC,iBAAmB5R,KAAK6R,cAAgB7R,KAAKoB,UA1ClBrD,GAElCgS,UAAU,CACf,WAEKA,SAAS,CACdjK,GAAI7C,OACJqN,WAAYrN,OACZ6O,cAAe9F,aCTN+F,kGA8BXlR,QAAA,WhBGyB,EAAC6C,EAAYrE,EAAU,MAC7B,IAAImH,EgBHTxG,KhBGiCX,IgBH7C2S,CAAYhS,EAAM,CAACb,QAASa,KAAKoB,GAAI6Q,WAAW,IAChDjS,KAAKkS,gBAGPC,OAAA,SAAOzN,GACL1E,KAAKkS,gBAGPA,WAAA,WACE,IAAI/S,EAAUa,KAAKoB,GACfuB,EAAW3C,KAAK2C,SACI,IAApBA,EAASkG,QACX7I,KAAKoS,yBACLpS,KAAKqS,mBACLrS,KAAKd,SAASC,EAAwB,eAEtCa,KAAKsS,sBACLtS,KAAKuS,sBACLvS,KAAKd,SAASC,EAAwB,gBAAiB,CAACQ,OAAQ,CAAC2J,MAAO3G,EAASkG,cAI7E0J,oBAAA,iBACFvS,KAAKwS,uBACFpR,GAAG8H,WAAUC,eAAUnJ,KAAKyS,iBAI7BH,oBAAA,iBACFtS,KAAK0S,0BACFtR,GAAG8H,WAAUG,YAAOrJ,KAAK2S,oBAI1BN,iBAAA,iBACFrS,KAAKwS,uBACFpR,GAAG8H,WAAUG,YAAOrJ,KAAKyS,iBAI1BL,uBAAA,iBACFpS,KAAK0S,0BACFtR,GAAG8H,WAAUC,eAAUnJ,KAAK2S,0DA3DnC,YAAYC,WAAWpC,MAAM,6CAI7B,YAAYqC,cAAcrC,MAAM,sCAIhC,IAAIrR,EAAUa,KAAKoB,GACnB,OACSiM,MAAMC,KADXtN,KAAK8S,sBACW3T,EAAQqD,iBAAiBxC,KAAK+S,oBAE9B5T,EAAQwD,iBA1BQ5E,GAE/BgU,UAAU,CAAC,QAAS,YACpBA,SAAS,CAACiB,cAAe/P,YCJrBgQ,kGAcXpS,QAAA,WACEb,KAAK+J,YAGPA,OAAA,WACM/J,KAAKkT,kBAAoBlT,KAAKmT,cAAc7I,QAC9CtK,KAAKoO,eAELpO,KAAKmO,mBAITA,cAAA,WACE,IAAIE,EAAcrO,KAAKsO,eAAiBtO,KAAKuO,WAC7CvO,KAAKoT,cAAc9P,QAAQ,SAAClC,EAAIqN,GAC1BJ,IACFjN,EAAGwH,MAAQ,IAEbxH,EAAGsN,UAAW,OAIlBN,aAAA,WACEpO,KAAKoT,cAAc9P,QAAQ,SAAClC,EAAIqN,GAC9BrN,EAAGsN,UAAW,QAtCwB3Q,GAEnCkV,UAAU,CAAC,UAAW,UAEtBA,SAAS,CACdtE,MAAO3C,aCLEqH,2FAOXxS,QAAA,sBACM1B,EAAUa,KAAKoB,GAEnBjC,EAAQmU,QAAU,WACZrV,EAAKsV,oBACPpU,EAAQqU,IAAMvV,EAAKwV,iBAEnBtU,EAAQ2I,MAAM4L,QAAU,YAda3V,GAEpCsV,UAAS,CAACM,YAAa1Q,YCKnB2Q,mGAgEXlT,WAAA,WACEV,KAAK6T,OAAS7T,KAAK6T,OAAOjT,KAAKZ,SAGjCa,QAAA,sBACEoH,sBAAsB,WAEpB,IAAKyD,EADSzN,EAAKmD,IAEjB,UAAU+K,MAAM,wDAGdlO,EAAK6T,eACP7T,EAAKkP,UAEHlP,EAAK6V,eACP7V,EAAKmD,GAAGL,iBAAiB,SAAU9C,EAAK4V,aAK9C5S,WAAA,WACMjB,KAAK8T,eACP9T,KAAKoB,GAAGF,oBAAoB,SAAUlB,KAAK6T,WAI/CA,OAAA,WACE5D,aAAaC,WAAWlQ,KAAK+T,gBAC7B/T,KAAKd,SAASc,KAAKoB,2BAGrBuN,MAAA,SAAM/O,SACJA,GAAAA,EAAOyK,iBACPrK,KAAK6T,YAGPxD,KAAA,SAAKzQ,GACHA,EAAMyK,iBAEN4F,aAAaW,QAAQ5Q,KAAK+T,eAAgBlD,KAAKC,UADpC9Q,KAAKgU,SAC8ChU,KAAK+T,kBACnE/T,KAAKd,SAASc,KAAKoB,gCAGrB+L,QAAA,SAAQvN,GAEN,SADAA,GAAAA,EAAOyK,iBACH4F,aAAac,QAAQ/Q,KAAK+T,gBAAiB,CAE7C,IADA,MAAM/C,EAAYH,KAAKI,MAAMhB,aAAac,QAAQ/Q,KAAK+T,qBACjC/T,KAAKiU,6BAAc,KACnC7S,UACAA,EAAGyC,QAAQmN,IACTrF,EAAmBvK,IAAkB,YAAXA,EAAG6C,KAC/B7C,EAAGkJ,QAAU0G,EAAU5P,EAAGyC,MACjB8H,EAAmBvK,IAAkB,SAAXA,EAAG6C,KAClC7C,EAAGwH,OAASoI,EAAU5P,EAAGyC,QAC3BzC,EAAGkJ,SAAU,GAGflJ,EAAGwH,MAAQoI,EAAU5P,EAAGyC,OAI9B7D,KAAKd,SAASc,KAAKoB,qCAEnBpB,KAAKd,SAASc,KAAKoB,iEA/GrB,GAAIpB,KAAKoR,WACP,YAAYC,QAEd,IAAIC,EAAatR,KAAKoB,GAAuB0E,GAE7C,GAAkB,KAAdwL,EACF,OAAOA,EAEP,UAAUnF,gFAAgFnM,KAAKM,qGAMjG,OADYiR,SAASC,SACJxR,KAAKkU,4CAItB,YAAa9S,GAAuB+S,0CAKpC,YADI1D,UAA0BzQ,KAAK+T,gBAAiB,UAC9B/T,KAAKiU,6BAAc,KACnC7S,UACAA,EAAGyC,KAAKgF,OAAS,IACf8C,EAAmBvK,IAAkB,YAAXA,EAAG6C,KAC/BwM,EAAKzQ,KAAK+T,gBAAgB3S,EAAGyC,MAAQzC,EAAGkJ,QAC/BqB,EAAmBvK,IAAkB,SAAXA,EAAG6C,KAClC7C,EAAGkJ,UACLmG,EAAKzQ,KAAK+T,gBAAgB3S,EAAGyC,MAAQzC,EAAGwH,OAG1C6H,EAAKzQ,KAAK+T,gBAAgB3S,EAAGyC,MAAQzC,EAAGwH,OAI9C,OAAO6H,wCAIP,YAAYiB,uBAAwB1R,KAAK2R,yDAIzC,YAAYyC,uBAAwBpU,KAAKqU,0BA7DLtW,GAE/B6V,UAAS,CACd9N,GAAI7C,OACJ6O,cAAe9F,QACf8H,cAAe9H,aCXNsI,mGAgBXzT,QAAA,WACEwD,EAAgBrE,KAAM,CACpBuU,UAAWvU,KAAKuU,UAChBpV,QAASa,KAAKoB,QAIlBD,OAAA,SAAOwD,GACL3E,KAAKd,SACHc,KAAKoB,GACL,sBACA,CACEzB,OAAQ,CACNR,QAASa,KAAKoB,SAMtBoT,UAAA,SAAU7P,GACR3E,KAAKd,SACHc,KAAKoB,GACL,yBACA,CACEzB,OAAQ,CACNR,QAASa,KAAKoB,4CAhCpB,OAAIpB,KAAKyU,uBACKC,eAAelE,MAAM,KAAKmE,IAAI,SAAAC,UAAO/K,OAAOgL,WAAWD,EAAIE,UAASpK,OAAO,SAAAkK,UAAOA,GAAO,GAAKA,GAAO,IAE1G,CAAC,EAAG,UAZ2B7W,GAEnCuW,UAAS,CAACC,UAAWtR,YCJ1B8R,GCESC,mGAOXnU,QAAA,WAGE,GAAI,yBAA0BC,OAAQ,OACHuD,EAAgBrE,KAAM,CAACb,QAH5Ca,KAAKoB,GAGgDmT,UAAW,KAA3EvU,KAAKmF,aAASnF,KAAKoF,oBAGpBpF,KAAK0B,iBAITP,OAAA,SAAOwD,GACDA,EAAM9F,SAAWmB,KAAKoB,IAAMuD,EAAMC,iBACpC5E,KAAK0B,cACD1B,KAAKoF,WACPpF,KAAKoF,iBAtB4B3D,GDAnBwT,YAAgB9V,sBAAsG,SAAnF+V,SAAAA,aAAW,eAAUC,MAAAA,aAAQ,cAASC,OAAAA,aAAS,iCAItGjW,EAAQkW,eAAe,CAACH,SAAAA,EAAUC,MAAAA,EAAOC,OAAAA,qBAHzB,UAAZF,IAAyBI,gEAOJC,OAAuD,2CAC5ER,KAGJA,IAAmB,GACnBS,IALOA,kDANCC,0EAFV,oCAHMH,GAAkB,mBAAoBtU,SAAS0U,gBAAgB5N,eAmBrD6N,GAAgBC,GAC9B,IAAKA,EACH,YAEF,IAAMC,EAAYC,iBAAiBF,GAAMC,UAGzC,MAFmC,YAAdA,GAAyC,WAAdA,GAE5BD,EAAKrN,cAAgBqN,EAAKtN,aACrCsN,EAGFD,GAAgBC,EAAKG,gBAAkB/U,SAASgV,SE1B5CC,eAAb,mEAmBsC,cAnBtC,2BAyCEvV,WAAA,WACEV,KAAKkW,KAAOlW,KAAKkW,KAAKtV,KAAKZ,MAC3BA,KAAKmW,MAAQnW,KAAKmW,MAAMvV,KAAKZ,SAG/Ba,QAAA,eAGAqV,KAAA,sBACM/W,EAAUa,KAAKoB,GACnB,IAAIpB,KAAKoW,QAAT,CAGApW,KAAKoW,QAAUpV,SAASoB,cAAc,UAEtC,IAAIiU,EAAQrV,SAASoB,cAAc,OACnCiU,EAAMC,UAAYtW,KAAKuW,eACvBF,EAAM7C,IAAMxT,KAAKwT,IACjB6C,EAAMG,OAASxW,KAAKyW,OACpBJ,EAAMK,MAAQ1W,KAAK0W,MACnB1W,KAAKoW,QAAQO,YAAYN,GAEzBlX,EAAQyX,sBAAsB,WAAY5W,KAAKoW,SAC/CS,UAAeC,eAAe9W,KAAKoW,SACnCpW,KAAKoW,QAAQE,UAAYtW,KAAK+W,eAC9B/W,KAAKoW,QAAQY,YACb/B,GAAgBjV,KAAKoW,QAAS,CAAClB,SAAU,SAAUC,MAAO,cAAc,kBAAM5R,EAAK6S,QAASf,gBAAe,KAC3GrV,KAAKoW,QAAQrV,iBAAiB,QAASf,KAAKmW,OAC5CnW,KAAKoW,QAAQrV,iBAAiB,SAAUf,KAAKmW,OAC7CnW,KAAKoW,QAAQrV,iBAAiB,QAASf,KAAKmW,WAG9CA,MAAA,sBACMnW,KAAKoW,UACPpW,KAAKoW,QAAQD,QACbnW,KAAKoW,QAAQjN,SACbnJ,KAAKoW,QAAU,KACfnB,GAAgBjV,KAAKoB,GAAI,CAAC8T,SAAU,SAAUC,MAAO,cAAc,kBAAM8B,EAAK7V,GAAGiU,gBAAe,sCAxDlG,YAAY6B,YAAclX,KAAKmX,SAAYnX,KAAKoB,GAAwBoS,mCAIxE,YAAY4D,eAAiBpX,KAAKqX,YAAerX,KAAKoB,GAAwBoV,qCAI9E,YAAYc,cAAgBtX,KAAKuX,WAAcvX,KAAKoB,GAAwBsV,6CAI5E,YAAYc,cAAgBxX,KAAKyX,WAAa,+DAI9C,YAAYC,cAAgB1X,KAAK2X,WAAa,8BAtCL5Z,GAEpCkY,UAAS,CACdzC,IAAKvQ,OACLwT,OAAQxT,OACRyT,MAAOzT,QAEFgT,WAAU,CAAC,QAAS,aCThB2B,mGAWXlX,WAAA,WACEV,KAAK6X,aAAe7X,KAAK6X,aAAajX,KAAKZ,SAG7Ca,QAAA,sBACEb,KAAK8X,aAAaxU,QAAQ,SAAClC,UAAOA,EAAGL,iBAAiB,SAAU9C,EAAK4Z,mBAGvE5W,WAAA,sBACEjB,KAAK8X,aAAaxU,QAAQ,SAAClC,UAAOA,EAAGF,oBAAoB,SAAUqC,EAAKsU,mBAG1EA,aAAA,SAAajY,GACX,IAAImY,EAAe/X,KAAK8X,aAAaE,OAAO,SAACC,EAAe7W,UAAOA,EAAGkJ,QAAU2N,EAAgB,EAAIA,GAAe,GAC/GpZ,EAASe,EAAMf,OACfkZ,EAAe/X,KAAK4J,UACtBhK,EAAMyK,iBACNxL,EAAOyL,SAAU,EACjBtK,KAAKd,SAASL,EAAQ,UACtBmB,KAAKd,SAASL,EAAQ,8BAClBmB,KAAKkY,iBACPlY,KAAKmY,YAAY9V,UAAYrC,KAAKsM,gBAGpCtM,KAAKd,SAASL,EAAQ,+BAClBmB,KAAKkY,iBACPlY,KAAKmY,YAAY9V,UAAY,SArCqBtE,GAEjD6Z,WAAU,CAAC,QAAS,SACpBA,UAAS,CAACpO,IAAKK,OAAQuC,QAASnJ,YCH5BmV,mGAuBXvX,QAAA,WACEb,KAAKqY,oBAGPhP,IAAA,SAAIzJ,SACFA,GAAAA,EAAOyK,iBAEP,IAAMiO,EAAUtY,KAAKuY,eAAelW,UAAUmW,QAAQ,cAAexY,KAAKyY,cAC1EzY,KAAK0Y,aAAaC,mBAAmB3Y,KAAK4Y,WAAYN,MAGxDnP,OAAA,SAAOvJ,GACLA,EAAMyK,iBACN,IAAMwO,EAA+BjZ,EAAMf,OAAuBia,YAAY9Y,KAAK+Y,cACnF,GAAe,MAAXF,EACF,UAAU1M,oGAAoGnM,KAAK+Y,cAGrH,GAAkC,SAA9BF,EAAQ9S,QAAQiT,UAClBH,EAAQ1P,aACH,CACL0P,EAAQ/Q,MAAM4L,QAAU,OACxB,IAAIuF,EAAeJ,EAAQK,cAAc,2BACzC,GAAoB,MAAhBD,EACF,UAAU9M,8HAGZ8M,EAAarQ,MAAQ,QAIzB6P,WAAA,WACE,WAAWU,MAAOC,UAAUza,WAAa0a,KAAKC,SAAS3a,WAAW4a,MAAM,MAGlElB,eAAA,WAGN,GAFerY,KAAKuY,eAAelW,UAEtBmX,QAAQ,cACnB,UAAUrN,MAAM,6KA9ClB,YAAYsN,wBAA0BzZ,KAAK0Z,kBAAoB,mDAI/D,YAAYC,mBAAqB3Z,KAAK4Z,gBAAkB,mBApBlB7b,GACjCqa,WAAU,CAAC,SAAU,YACrBA,UAAS,CACdQ,WAAY3V,OACZ8V,aAAc9V,YCJL4W,mGAUXnZ,WAAA,WACEV,KAAK8Z,oBAAsB9Z,KAAK8Z,oBAAoBlZ,KAAKZ,SAG3Da,QAAA,sBACEb,KAAK+Z,gBAAgBzW,QAAQ,SAAClC,UAAOA,EAAGL,iBAAiB,SAAU9C,EAAK6b,0BAG1E7Y,WAAA,sBACEjB,KAAK+Z,gBAAgBzW,QAAQ,SAAClC,UAAOA,EAAGF,oBAAoB,SAAUqC,EAAKuW,0BAGrEE,kBAAA,WACN,IAAIC,EAAS,IAAIC,IAAIla,KAAK+Z,gBAAgBpF,IAAI,SAAAvT,UAAMA,EAAGwH,SACvD,OAAOqR,EAAOE,IAAI,KAAsB,GAAfF,EAAOG,QAG1BN,oBAAA,sBACF3a,EAAUa,KAAKoB,GACfpB,KAAKga,qBACPha,KAAKd,SAASC,EAAS,0BACnBa,KAAKgJ,eACPhJ,KAAK+Z,gBAAgBzW,QAAQ,SAAAlC,UAAMA,EAAG8H,UAAUC,OAAO8N,EAAK7N,gBAG9DpJ,KAAKd,SAASC,EAAS,6BACnBa,KAAKgJ,eACPhJ,KAAK+Z,gBAAgBzW,QAAQ,SAAAlC,UAAMA,EAAG8H,UAAUG,IAAI4N,EAAK7N,mBArClBrL,GAEtC8b,WAAU,CAAC,YACXA,WAAU,CAAC,aCHPQ,mGAMXC,KAAA,SAAK1a,SACHA,GAAAA,EAAOyK,iBACPrK,KAAKua,eAAetW,KAAO,UAG7BuW,KAAA,SAAK5a,SACHA,GAAAA,EAAOyK,iBACPrK,KAAKua,eAAetW,KAAO,cAG7B8F,OAAA,SAAOnK,SACLA,GAAAA,EAAOyK,iBAC0B,aAA7BrK,KAAKua,eAAetW,KACtBjE,KAAKsa,OAELta,KAAKwa,WArBiCzc,GAEnCsc,WAAU,CAAC,gBCFPI,2FAYXjC,QAAA,SAAQ5Y,OACC6Q,EAAqB7Q,EAAMD,UAClC,GAAI8Q,aAAgBiK,KAAM,CACxB,IAAIC,EAAclK,EAAKyI,cAAclZ,KAAKmD,UAE1C,GAAmB,MAAfwX,EACF,UAAUxO,sDAAsDnM,KAAKM,mDAGvE,IAAIsa,EAAa5a,KAAKoB,GAAGwZ,WACzB,GAAkB,MAAdA,EACF,UAAUzO,MAAM,sEAElByO,EAAWC,aAAaF,EAAa3a,KAAKoB,SAE1ChB,QAAQpB,IAAI,UAAWyR,wCAlBzB,YAAYnO,iBAAmBtC,KAAKyC,oCAAsCzC,KAAKM,uBATzCvC,GACjC0c,WAAU,GAEVA,UAAS,CAACtX,SAAUF,YCIhB6X,mGAEXpa,WAAA,WACEV,KAAK+a,gBAAkB/a,KAAK+a,gBAAgBna,KAAKZ,SAGnDa,QAAA,WACEC,OAAOC,iBAAiB,UAAWf,KAAK+a,oBAG1C9Z,WAAA,WACEH,OAAOI,oBAAoB,UAAWlB,KAAK+a,oBAG7CA,gBAAA,SAAgB3O,GACd,IAAIqE,EAAOrE,EAAQqE,KACfA,EAAKuK,eAAe,SAAyB,gBAAdvK,EAAK5M,MAA0B4M,EAAKuK,eAAe,WACpFhb,KAAK+H,OAAO0I,EAAKvJ,WAIrBa,OAAA,SAAOb,GACJlH,KAAKoB,GAAyB0G,MAAMZ,OAAYA,WAtBEnJ,GA2B1Ckd,mGAOXpa,QAAA,W3B1ByB,IAAC6C,EAAYrE,EAChCoG,E2B2BA3E,OAAOtC,OAASsC,OAAOoa,MACzBrU,EAAgB7G,M3B7BkBX,E2B8BhB,G3B3Ba,QAAhCoG,GAHuB/B,E2B8BV1D,M3B5BiBmb,YACbC,iBAA8B,IAAP3V,GAAyBA,EAAGnC,QAAS+X,IAI1E,GAHoB,iBAATA,IACP3X,EAAW2X,GAAQhU,EAAS3D,EAAW2X,GAAOhc,MAAAA,OAAyC,EAASA,EAAQkI,OAExF,iBAAT8T,EAAmB,CAC1B,MAAMxX,KAAEA,EAAI0D,KAAEA,GAAS8T,EACvB,IAAKxX,EACD,OACJH,EAAWG,GAAQwD,EAAS3D,EAAWG,GAAO0D,IAASlI,MAAAA,OAAyC,EAASA,EAAQkI,U2BoBvHvH,KAAKsb,iBAMTpT,aAAA,SAAajB,GACXjH,KAAKsb,gBAGPA,WAAA,WACE,IAAIrU,EAAmC,CAACpD,KAAM,cAAeqD,OAAQlH,KAAKub,aAC1Eza,OAAO0a,OAAOC,YACZxU,EACA,QAIJsU,UAAA,WACE,IAAMvF,EAAOhV,SAASgV,KAChB9T,EAAOlB,SAAS0U,gBAGtB,OAAO2D,KAAK7P,IAAIwM,EAAKzN,aAAcyN,EAAK3N,aAAcnG,EAAKoG,aAAcpG,EAAKqG,aAAcrG,EAAKmG,kBAnCjDtK,GAE3Ckd,aAAY,CAAC,kBCnCTS,mGAEXC,aAAA,WACE3b,KAAK4b,QAAQ5b,KAAKoB,OAGpBwa,QAAA,SAAQzc,oBACNA,EAAQ4G,QAAQrC,qBAAavE,EAAQ4G,QAAQrC,qBAAYmY,WAAW,IAAIC,eAAgB9b,KAAKM,mBAAoB,KAAM,MAAO,GAC5F,IAA9BnB,EAAQ4G,QAAQrC,mBAEXvE,EAAQ4G,QAAQrC,WAGzB,IAAIqY,EAAgC,IAAID,eAAgB9b,KAAKM,yBAA0B,KACvFnB,EAAQ4G,QAAQlH,iBAASM,EAAQ4G,QAAQlH,iBAAQgd,WAAWE,EAA+B,MAAO,UAC3F5c,EAAQ4G,QAAQiW,UAAahc,KAAKM,uBACX,IAA1BnB,EAAQ4G,QAAQlH,eAEXM,EAAQ4G,QAAQlH,OAGzBM,EAAQ4G,QAAQkW,iBAAS9c,EAAQ4G,QAAQlH,iBAAQgd,WAAWE,EAA+B,MAAO,UAC3F5c,EAAQ4G,QAAQiW,UAAahc,KAAKM,uBACX,IAA1BnB,EAAQ4G,QAAQkW,eAEX9c,EAAQ4G,QAAQkW,OAIzB,IAAIhC,EAASja,KAAKmb,YAAYlB,OAC1BA,GACF1a,OAAO2R,KAAK+I,GAAQ3W,QAAQ,SAAAsR,iBAAczV,EAAQ4G,QAAQiW,UAAa/d,EAAKqC,eAAcsU,eAI5F,IAAIsH,EAAUlc,KAAKmb,YAAYe,QAC3BA,GACF3c,OAAO2R,KAAKgL,GAAS5Y,QAAQ,SAAAsR,iBAAczV,EAAQ4G,QAAQiW,UAAa/d,EAAKqC,eAAcsU,mBArCxD7W,GCA5Boe,2FAeXtb,QAAA,sBACEoH,sBAAsB,WAEpBgN,GACEhX,EAAKmD,GACL,CACE8T,SAAUjX,EAAKme,iBAAmBne,EAAKoe,cAAgB,SACvDlH,MAAOlX,EAAKqe,cAAgBre,EAAKse,WAAa,SAC9CnH,OAAQnX,EAAKue,eAAiBve,EAAKwe,YAAc,iBAE7C,kBAAMxe,EAAKmD,GAAGiU,mBACtBpX,EAAK0d,qBA1BoCD,IAEtCS,UAAS,CACdjH,SAAUjS,OACVkS,MAAOlS,OACPmS,OAAQnS,YCLCyZ,2FASXC,OAAA,SAAO/c,GAEL,IACIf,QAFJe,GAAAA,EAAOyK,iBAQO,OAJZxL,EADU,aAFDmB,KAAK4c,aAAe5c,KAAK6c,UAAY,YAGrC7b,SAASgV,KAETL,GAAgB3V,KAAKoB,MAKhC6T,GAAgBpW,EAAS,CAACqW,SAAU,SAAUC,MAAO,cAAc,kBAAMtW,EAAQwW,gBAAe,SArBtDtX,GAErC2e,UAAS,CACdI,KAAM7Z,YCHG8Z,2FAiBXJ,OAAA,WACE,IAAI9d,EAASmC,SAASkY,cAAclZ,KAAKyC,eACpC5D,EAKLoW,GACEpW,EACA,CACEqW,SAAUlV,KAAKoc,iBAAmBpc,KAAKqc,cAAgB,SACvDlH,MAAOnV,KAAKsc,cAAgBtc,KAAKuc,WAAa,SAC9CnH,OAAQpV,KAAKwc,eAAiBxc,KAAKyc,YAAc,iBAE7C,kBAAM5d,EAAQwW,mBAXpBjV,QAAQ4c,mCAAmChd,KAAKyC,uBApBd1E,GAE/Bgf,UAAS,CACd5Z,SAAUF,OACViS,SAAUjS,OACVkS,MAAOlS,OACPmS,OAAQnS,YCNCga,2FASXN,OAAA,SAAO/c,GAEL,IACIf,QAFJe,GAAAA,EAAOyK,iBAQO,OAJZxL,EADU,aAFDmB,KAAK4c,aAAe5c,KAAK6c,UAAY,YAGrC7b,SAASgV,KAETL,GAAgB3V,KAAKoB,MAKhC6T,GAAgBpW,EAAS,CAACqW,SAAU,SAAUC,MAAO,gBAAgB,kBAAMtW,EAAQwW,gBAAe,SArB3DtX,GAElCkf,UAAS,CACdH,KAAM7Z,YCJGia,eAAb,mEAKyD,cALzD,2BAOErc,QAAA,sBACEoH,sBAAsB,WAEpB1E,EAAKqM,QAAUjI,WAAW,kBAAMpE,EAAKnC,GAAG+H,UAA8B,IAApB5F,EAAK4Z,mBAI3Dlc,WAAA,WACMjB,KAAK4P,SACPlI,aAAa1H,KAAK4P,aAhBoB7R,GAEnCmf,UAAS,CAACE,QAASvT,YCFfwT,eAAb,yEAYyC,cAZzC,2BAkBEC,mBAAA,WAGE,GAA2B,OAAvBtd,KAAKud,cAKT,OADAvd,KAAKud,cAAgBvc,SAASoB,cAAc,OACpCpC,KAAKwd,OACX,IAAK,MACHxd,KAAKoB,GAAGwV,sBAAsB,cAAe5W,KAAKud,eAClD,MACF,IAAK,SACHvd,KAAKoB,GAAGwV,sBAAsB,WAAY5W,KAAKud,mBAKrD1c,QAAA,sBACM1B,EAAUa,KAAKoB,GACnBpB,KAAKsd,qBAEY,IAAI7Y,qBAAqB,SAAAC,GACxCA,EAAQpB,QAAQ,SAAAqB,GACVA,EAAM9F,SAAW0E,EAAKga,gBAGM,IAA5B5Y,EAAM8Y,kBACRte,EAAQ+J,UAAUG,IAAI9F,EAAKma,cAAgBna,EAAKoa,WAAa,SACxB,IAA5BhZ,EAAM8Y,mBACfte,EAAQ+J,UAAUC,OAAO5F,EAAKma,cAAgBna,EAAKoa,WAAa,aAInE,CACDpJ,UAAW,CAAC,EAAG,KAERpP,QAAQnF,KAAKud,iDAxCtB,YAAYX,aAAe5c,KAAK6c,UAAY,aAfV9e,GAE7Bsf,WAAU,CAAC,SACXA,UAAS,CACdP,KAAM7Z,YCJG2a,mGAUX/c,QAAA,sBACE,IAAKb,KAAK6d,eACR,UAAU1R,MAAM,oCAGlBlE,sBAAsB,WAChBhK,EAAK6f,mBAAqB7f,EAAK8f,gBACjC9f,EAAK+f,eAKXA,QAAA,SAAQpe,SACNA,GAAAA,EAAOyK,iBACP,IAAIlL,EAAUa,KAAKoB,GACf6c,EAAcjd,SAASkY,cAAclZ,KAAKke,aAE9C,GAAmB,MAAfD,EAAJ,CAKA,IAAI3S,EAAOnM,EAAQgf,WAAU,GAG7B,OAFAne,KAAK4b,QAAQtQ,GAELtL,KAAKoe,aACX,IAAK,cACL,IAAK,YACL,IAAK,WACL,IAAK,aACHH,EAAYtF,mBAAmB3Y,KAAKoe,YAAa9S,EAAK+S,WACtD,MACF,IAAK,eACHJ,EAAYI,UAAY/S,EAAK+S,UAC7B,MACF,IAAK,eACHJ,EAAY5b,UAAYiJ,EAAK+S,UAC7B,MACF,IAAK,UACHJ,EAAYtF,mBAAmB,aAAcrN,EAAK+S,WAClD,MACF,IAAK,SACHJ,EAAYtF,mBAAmB,YAAarN,EAAK+S,WACjD,MACF,QACE,UAAUlS,MAAM,oCAGpBhN,EAAQgK,cA9BNnJ,KAAKd,SAASC,EAAS,sBA5BWuc,IAE/BkC,UAAS,CAAC/e,OAAQoE,OAAQqb,OAAQrb,OAAQsb,UAAWvS,aCCjDwS,mGA4BX3d,QAAA,sBACE,IAAKb,KAAKye,cACR,UAAUtS,MAAM,oDAGdnM,KAAK0e,oBAAsB1e,KAAK2e,qBvCHhB,EAACjb,EAAYrE,EAAU,MAC1B,IAAI6G,EuCGVlG,KvCH+BX,IuCGxCuf,GAGE5e,KAAK6e,mBAAqB7e,KAAK8e,gBzCnCR,EAACpb,EAAYrE,EAAU,MAClD,MAAMkG,YAAEA,EAAWzF,cAAEA,EAAawF,OAAEA,EAAMxB,YAAEA,GAAgBvE,OAAOC,OAAO,GAAI4E,EAAgB/E,GACxF0f,EAAWnf,IACb,MAAM0E,GAAiBjF,MAAAA,OAAyC,EAASA,EAAQF,UAAYuE,EAAWvE,QACxG,KAAImF,EAAc0a,SAASpf,EAAMf,UFqBlC,SAA6BuC,GAChC,MAAM6d,EAAO7d,EAAG8d,wBACVC,EAAgBre,OAAOkG,aAAehG,SAAS0U,gBAAgBpN,aAC/D8W,EAAete,OAAOiG,YAAc/F,SAAS0U,gBAAgB2J,YAGnE,OAFoBJ,EAAK/D,KAAOiE,GAAmBF,EAAK/D,IAAM+D,EAAK/X,QAAW,GAC3D+X,EAAKK,MAAQF,GAAkBH,EAAKK,KAAOL,EAAK7X,OAAU,EE1B3BmY,CAAoBjb,IAAkBiB,KAIhF7B,EAAW8b,cACX9b,EAAW8b,aAAa5f,GAGxBE,GAAe,CACf,MAAMV,EAAYwE,EAAiB,gBAAiBF,EAAYI,GAC1D2b,EAAoBzb,EAAc5E,EAAWQ,EAAO,CAAE8D,WAAAA,IAC5DY,EAAcxE,cAAc2f,KAe9Blb,EAAuBb,EAAWzC,WAAWL,KAAK8C,GACxDnE,OAAOC,OAAOkE,EAAY,CACtB2B,aARAC,MAAAA,GAAgDA,EAAOhC,QAAQ1D,IAC3DkB,OAAOI,oBAAoBtB,EAAOmf,GAAS,KAS3Cxa,OAfJe,MAAAA,GAAgDA,EAAOhC,QAAQ1D,IAC3DkB,OAAOC,iBAAiBnB,EAAOmf,GAAS,MyCgB9CW,CAAgB1f,MAGlBiI,sBAAsB,WAChBhK,EAAK0hB,iBAEL1hB,EAAK2hB,cAActc,QADK,OAAtBrF,EAAK4hB,aACoB,SAAChhB,UAAWZ,EAAK6hB,UAAUjhB,IAE3B,SAACA,UAAWZ,EAAK8hB,WAAWlhB,UAM/D2gB,aAAA,sBACExf,KAAK4f,cAActc,QAAQ,SAACzE,GACtB0E,EAAKyc,kBAAkBnhB,KACzB0E,EAAK0c,oBAAoBphB,GACzB0E,EAAK2c,cAAcrhB,SAKzBshB,WAAA,WACE,GAAIngB,KAAK0e,mBACP,OAAQ1e,KAAKogB,iBACX,IAAK,KACHpgB,KAAKqgB,KACL,MACF,IAAK,MACHrgB,KAAKsgB,MACL,MACF,IAAK,SACHtgB,KAAK+J,SAIX,MAAO,MAGTwW,WAAA,WACE,GAAIvgB,KAAK2e,mBACP,OAAQ3e,KAAKwgB,iBACX,IAAK,KACHxgB,KAAKqgB,KACL,MACF,IAAK,MACHrgB,KAAKsgB,MACL,MACF,IAAK,SACHtgB,KAAK+J,SAIX,MAAO,MAGTsW,GAAA,SAAGzgB,cACDI,KAAK4f,cAActc,QAAQ,SAACzE,GAC1BoY,EAAKgJ,oBAAoBphB,GACzBoY,EAAK6I,UAAUjhB,QAInByhB,IAAA,SAAI1gB,cACFI,KAAK4f,cAActc,QAAQ,SAACzE,GAC1B4hB,EAAKR,oBAAoBphB,GACzB4hB,EAAKV,WAAWlhB,QAIpBkL,OAAA,SAAOnK,cACLI,KAAK4f,cAActc,QAAQ,SAACzE,GAC1B6hB,EAAKT,oBAAoBphB,GACzB6hB,EAAKR,cAAcrhB,QAIfmhB,kBAAA,SAAkB5e,GACxB,MAA6B,QAAtBA,EAAG2E,QAAQ4a,WAGZV,oBAAA,SAAoB7e,GACtBpB,KAAKggB,kBAAkB5e,UAClBA,EAAG2E,QAAQ4a,QAElBvf,EAAG2E,QAAQ4a,QAAU,UAIjBT,cAAA,SAAc9e,GACNpB,KAAK4gB,WAAWpQ,MAAM,KAC5BlN,QAAQ,SAACud,UAAUzf,EAAG8H,UAAUa,OAAO8W,QAGzCf,UAAA,SAAU1e,GACFpB,KAAK4gB,WAAWpQ,MAAM,KAC5BlN,QAAQ,SAACud,UAAUzf,EAAG8H,UAAUa,OAAO8W,GAAO,QAGhDd,WAAA,SAAW3e,GACHpB,KAAK4gB,WAAWpQ,MAAM,KAC5BlN,QAAQ,SAACud,UAAUzf,EAAG8H,UAAUa,OAAO8W,GAAO,SA5If9iB,YCL3B+iB,GAAa3hB,GAC3B,MAA2B,eAApBA,EAAQsM,SDMR+S,WAAU,CAAC,UACXA,UAAS,CACduC,MAAO9d,OACPkd,WAAYld,OACZsd,WAAYtd,OACZ+d,UAAWhV,QACXiV,QAAShe,YETAie,mGAcXnX,OAAA,SAAOnK,SACLA,GAAAA,EAAOyK,iBACP,IACI8W,EADQnhB,KAAKohB,YACI5N,IACL,MAAZ2N,GAAoBA,IAAanhB,KAAKqhB,UACxCrhB,KAAKshB,UAELthB,KAAK6T,YAIT0N,OAAA,SAAO3hB,SACLA,GAAAA,EAAOyK,iBACPrK,KAAKshB,aAGP3S,MAAA,SAAM/O,SACJA,GAAAA,EAAOyK,iBACPrK,KAAK6T,YAGCyN,QAAA,WACN,IAAIE,EAAQxhB,KAAKohB,YACbphB,KAAKyhB,yBACPD,EAAMnf,UAAYrC,KAAK0hB,qBAEzBF,EAAMhO,IAAMxT,KAAKqhB,aAGXxN,OAAA,WACN,IAAI2N,EAAQxhB,KAAKohB,YACjBI,EAAMhO,IAAM,GACZgO,EAAMnf,UAAY,MAGZ+e,UAAA,WACN,IAAII,EAAQxgB,SAAS2gB,kBAAkB3hB,KAAK4hB,cAC5C,GAAa,MAATJ,EACF,UAAUrV,uCAAuCnM,KAAK4hB,kBAExD,GAAKd,GAAaU,GAGhB,OAAOA,EAFP,UAAUrV,iCAAiCnM,KAAK4hB,qBAM5CP,QAAA,WACN,IAAIliB,EAAUa,KAAKoB,GACnB,GAAIpB,KAAKkX,YACP,YAAYC,YACH3L,EAAoBrM,GAC7B,OAAOA,EAAQqS,KAEf,UAAUrF,MAAM,uCApEsBpO,GAEnCmjB,UAAS,CACdW,QAAS5e,OACTuQ,IAAKvQ,OACL6e,eAAgB7e,YCLP8e,eAAb,0EAUgE,cAVhE,2BAgBErhB,WAAA,WACEV,KAAKgK,QAAUhK,KAAKgK,QAAQpJ,KAAKZ,SAGnCa,QAAA,sBACM1B,EAAUa,KAAKoB,GACnB,IAAI0f,GAAa3hB,GAKf,UAAUgN,MAAM,iEAJhB,GAAMhN,EAAQqU,IACZ,UAAUrH,MAAM,8DAKhBnM,KAAKgiB,MACP/Z,sBAAsB,kBAAM1E,EAAKwL,eAAiBpH,WAAW,kBAAMpE,EAAKyG,WAAWzG,EAAK0e,oBAI5FhhB,WAAA,WACMjB,KAAK+O,gBACPrH,aAAa1H,KAAK+O,mBAItB/E,QAAA,SAAQpK,SACNA,GAAAA,EAAOyK,iBACP,IAAIlL,EAAUa,KAAKoB,GACnBjC,EAAQqU,IAAMrU,EAAQqU,qCA9BtB,aAAY0O,cAAeliB,KAAKmiB,iBAbapkB,GAExCgkB,UAAS,CACdK,SAAUvY,OACVmY,KAAMhW,aCNGqW,mGAeX3hB,WAAA,WACEV,KAAKsiB,gBAAkBtiB,KAAKsiB,gBAAgB1hB,KAAKZ,SAGnDa,QAAA,WACEb,KAAKsiB,kBACLtiB,KAAK0I,YAAY3H,iBAAiB,QAASf,KAAKsiB,oBAGlDrhB,WAAA,WACEjB,KAAK0I,YAAYxH,oBAAoB,QAASlB,KAAKsiB,oBAGrDA,gBAAA,WACE,IAAIC,EAAY,EAEZC,EADgBxiB,KAAK0I,YAAYE,MACT6Z,MAAM,QAElCziB,KAAK8I,aAAaC,WADlBwZ,EAAaC,GAAWA,EAAQ3Z,QAAW,GACHlK,WACpCqB,KAAKgJ,gBACHhJ,KAAK0iB,aAAaH,GACpBviB,KAAK8I,aAAaI,UAAUC,OAAOnJ,KAAKoJ,YAExCpJ,KAAK8I,aAAaI,UAAUG,IAAIrJ,KAAKoJ,gBAK3CsZ,aAAA,SAAapZ,GACX,IAAIC,EAAM,EACNC,EAAM,MAUV,OARIxJ,KAAKyJ,cACPF,EAAMvJ,KAAK0J,UAGT1J,KAAK2J,cACPH,EAAMxJ,KAAK4J,UAGNN,GAASC,GAAOD,GAASE,MAvDKzL,GAEhCskB,WAAU,CAAC,QAAS,UACpBA,UAAS,CAAC9Y,IAAKM,OAAQL,IAAKK,QAC5BwY,WAAU,CAAC"} \ No newline at end of file diff --git a/dist/teleport_controller.d.ts b/dist/teleport_controller.d.ts index e370ef47..dd3e44c9 100644 --- a/dist/teleport_controller.d.ts +++ b/dist/teleport_controller.d.ts @@ -1,16 +1,16 @@ -import { EphemeralController } from "./utilities/ephemeral_controller"; -export declare class TeleportController extends EphemeralController { - static values: { - target: StringConstructor; - insert: StringConstructor; - immediate: BooleanConstructor; - }; - readonly immediateValue: boolean; - readonly hasImmediateValue: boolean; - readonly targetValue: string; - readonly hasInsertValue: boolean; - readonly insertValue: InsertPosition | "replaceOuter" | "replaceInner" | "prepend" | "append"; - connect(): void; - execute(event?: Event): void; -} +import { EphemeralController } from "./utilities/ephemeral_controller"; +export declare class TeleportController extends EphemeralController { + static values: { + target: StringConstructor; + insert: StringConstructor; + immediate: BooleanConstructor; + }; + readonly immediateValue: boolean; + readonly hasImmediateValue: boolean; + readonly targetValue: string; + readonly hasInsertValue: boolean; + readonly insertValue: InsertPosition | "replaceOuter" | "replaceInner" | "prepend" | "append"; + connect(): void; + execute(event?: Event): void; +} //# sourceMappingURL=teleport_controller.d.ts.map \ No newline at end of file diff --git a/dist/toggle_class_controller.d.ts b/dist/toggle_class_controller.d.ts index 830a6983..94148124 100644 --- a/dist/toggle_class_controller.d.ts +++ b/dist/toggle_class_controller.d.ts @@ -1,36 +1,36 @@ -import { BaseController } from "./base_controller"; -export declare type ToggleClassMode = "on" | "off" | "toggle"; -export declare class ToggleClassController extends BaseController { - static targets: string[]; - static values: { - class: StringConstructor; - mouseEnter: StringConstructor; - mouseLeave: StringConstructor; - clickAway: BooleanConstructor; - initial: StringConstructor; - }; - readonly toggleTargets: HTMLElement[]; - readonly classValue: string; - readonly hasClassValue: boolean; - readonly mouseEnterValue: ToggleClassMode; - readonly hasMouseEnterValue: boolean; - readonly mouseLeaveValue: ToggleClassMode; - readonly hasMouseLeaveValue: boolean; - readonly clickAwayValue: boolean; - readonly hasClickAwayValue: boolean; - readonly initialValue: "on" | "off"; - readonly hasInitialValue: boolean; - connect(): void; - clickOutside(): void; - mouseEnter(): {}; - mouseLeave(): {}; - on(event?: Event): void; - off(event?: Event): void; - toggle(event?: Event): void; - private elementWasToggled; - private elementToggleStatus; - private elementToggle; - private elementOn; - private elementOff; -} +import { BaseController } from "./base_controller"; +export declare type ToggleClassMode = "on" | "off" | "toggle"; +export declare class ToggleClassController extends BaseController { + static targets: string[]; + static values: { + class: StringConstructor; + mouseEnter: StringConstructor; + mouseLeave: StringConstructor; + clickAway: BooleanConstructor; + initial: StringConstructor; + }; + readonly toggleTargets: HTMLElement[]; + readonly classValue: string; + readonly hasClassValue: boolean; + readonly mouseEnterValue: ToggleClassMode; + readonly hasMouseEnterValue: boolean; + readonly mouseLeaveValue: ToggleClassMode; + readonly hasMouseLeaveValue: boolean; + readonly clickAwayValue: boolean; + readonly hasClickAwayValue: boolean; + readonly initialValue: "on" | "off"; + readonly hasInitialValue: boolean; + connect(): void; + clickOutside(): void; + mouseEnter(): {}; + mouseLeave(): {}; + on(event?: Event): void; + off(event?: Event): void; + toggle(event?: Event): void; + private elementWasToggled; + private elementToggleStatus; + private elementToggle; + private elementOn; + private elementOff; +} //# sourceMappingURL=toggle_class_controller.d.ts.map \ No newline at end of file diff --git a/dist/turbo_frame_rc_controller.d.ts b/dist/turbo_frame_rc_controller.d.ts index 4f9de8d9..09f09c59 100644 --- a/dist/turbo_frame_rc_controller.d.ts +++ b/dist/turbo_frame_rc_controller.d.ts @@ -1,21 +1,21 @@ -import { BaseController } from "./base_controller"; -export declare class TurboFrameRCController extends BaseController { - static values: { - frameId: StringConstructor; - src: StringConstructor; - loadingMessage: StringConstructor; - }; - readonly frameIdValue: string; - readonly srcValue: string; - readonly hasSrcValue: boolean; - readonly loadingMessageValue: string; - readonly hasLoadingMessageValue: boolean; - toggle(event?: Event): void; - setSrc(event?: Event): void; - clear(event?: Event): void; - private _setSrc; - private _clear; - private _getFrame; - private _getSrc; -} +import { BaseController } from "./base_controller"; +export declare class TurboFrameRCController extends BaseController { + static values: { + frameId: StringConstructor; + src: StringConstructor; + loadingMessage: StringConstructor; + }; + readonly frameIdValue: string; + readonly srcValue: string; + readonly hasSrcValue: boolean; + readonly loadingMessageValue: string; + readonly hasLoadingMessageValue: boolean; + toggle(event?: Event): void; + setSrc(event?: Event): void; + clear(event?: Event): void; + private _setSrc; + private _clear; + private _getFrame; + private _getSrc; +} //# sourceMappingURL=turbo_frame_rc_controller.d.ts.map \ No newline at end of file diff --git a/dist/utilities/ephemeral_controller.d.ts b/dist/utilities/ephemeral_controller.d.ts index d19285d0..971c3dd0 100644 --- a/dist/utilities/ephemeral_controller.d.ts +++ b/dist/utilities/ephemeral_controller.d.ts @@ -1,6 +1,6 @@ -import { BaseController } from "../base_controller"; -export declare class EphemeralController extends BaseController { - _cleanupSelf(): void; - cleanup(element: HTMLElement): void; -} +import { BaseController } from "../base_controller"; +export declare class EphemeralController extends BaseController { + _cleanupSelf(): void; + cleanup(element: HTMLElement): void; +} //# sourceMappingURL=ephemeral_controller.d.ts.map \ No newline at end of file diff --git a/dist/utilities/scroll.d.ts b/dist/utilities/scroll.d.ts index e712d918..1d757399 100644 --- a/dist/utilities/scroll.d.ts +++ b/dist/utilities/scroll.d.ts @@ -1,3 +1,3 @@ -export declare function scrollToElement(element: Element, { behavior, block, inline }?: ScrollIntoViewOptions): Promise; -export declare function getScrollParent(node: HTMLElement | null): HTMLElement | null; +export declare function scrollToElement(element: Element, { behavior, block, inline }?: ScrollIntoViewOptions): Promise; +export declare function getScrollParent(node: HTMLElement | null): HTMLElement | null; //# sourceMappingURL=scroll.d.ts.map \ No newline at end of file diff --git a/dist/utilities/turbo.d.ts b/dist/utilities/turbo.d.ts index de075661..7af6f3dc 100644 --- a/dist/utilities/turbo.d.ts +++ b/dist/utilities/turbo.d.ts @@ -1,2 +1,2 @@ -export declare function isTurboFrame(element: HTMLElement): element is TurboFrame; +export declare function isTurboFrame(element: HTMLElement): element is TurboFrame; //# sourceMappingURL=turbo.d.ts.map \ No newline at end of file diff --git a/dist/word_count_controller.d.ts b/dist/word_count_controller.d.ts index 3baa2ca9..8ff353cf 100644 --- a/dist/word_count_controller.d.ts +++ b/dist/word_count_controller.d.ts @@ -1,23 +1,23 @@ -import { BaseController } from "./base_controller"; -export declare class WordCountController extends BaseController { - static targets: string[]; - static values: { - min: NumberConstructor; - max: NumberConstructor; - }; - static classes: string[]; - readonly inputTarget: HTMLInputElement | HTMLTextAreaElement; - readonly outputTarget: HTMLElement; - minValue: number; - hasMinValue: boolean; - maxValue: number; - hasMaxValue: boolean; - errorClass: string; - hasErrorClass: boolean; - initialize(): void; - connect(): void; - disconnect(): void; - updateWordCount(): void; - isValidCount(count: number): boolean; -} +import { BaseController } from "./base_controller"; +export declare class WordCountController extends BaseController { + static targets: string[]; + static values: { + min: NumberConstructor; + max: NumberConstructor; + }; + static classes: string[]; + readonly inputTarget: HTMLInputElement | HTMLTextAreaElement; + readonly outputTarget: HTMLElement; + minValue: number; + hasMinValue: boolean; + maxValue: number; + hasMaxValue: boolean; + errorClass: string; + hasErrorClass: boolean; + initialize(): void; + connect(): void; + disconnect(): void; + updateWordCount(): void; + isValidCount(count: number): boolean; +} //# sourceMappingURL=word_count_controller.d.ts.map \ No newline at end of file diff --git a/package.json b/package.json index 1c876e20..bfd4014e 100644 --- a/package.json +++ b/package.json @@ -37,9 +37,11 @@ "test:treeshake": "agadoo dist stimulus-library.js" }, "dependencies": { + "@types/lodash-es": "^4.17.4", "@types/smoothscroll-polyfill": "^0.3.1", "camelcase": "^6.2.0", "dialog-polyfill": "^0.5.6", + "lodash-es": "^4.17.21", "smoothscroll-polyfill": "^0.4.4" }, "peerDependencies": { diff --git a/playground/controllers/element_save_controller.html b/playground/controllers/element_save_controller.html new file mode 100644 index 00000000..371dc575 --- /dev/null +++ b/playground/controllers/element_save_controller.html @@ -0,0 +1,27 @@ + + + + + + + Stimulus Library Playground + + + + +
+
+

Stimulus Library

+
+ Back + + + + +
+
+
+ + + + diff --git a/playground/index.html b/playground/index.html index 1fc1bed0..3ea675cc 100644 --- a/playground/index.html +++ b/playground/index.html @@ -27,6 +27,7 @@

Stimulus Library

+ diff --git a/playground/index.js b/playground/index.js index 59a55140..b58b425f 100644 --- a/playground/index.js +++ b/playground/index.js @@ -14,6 +14,7 @@ import { DisableWithController, DismissableController, EmptyDomController, + ElementSaveController, EnableInputsController, FallbackImageController, FormSaveController, @@ -51,6 +52,7 @@ application.register("disable-inputs", DisableInputsController); application.register("disable-with", DisableWithController); application.register("dismissable", DismissableController); application.register("empty-dom", EmptyDomController); +application.register("element-save", ElementSaveController); application.register("enable-inputs", EnableInputsController); application.register("fallback-image", FallbackImageController); application.register("form-save", FormSaveController); diff --git a/src/element_save_controller.ts b/src/element_save_controller.ts new file mode 100644 index 00000000..95799846 --- /dev/null +++ b/src/element_save_controller.ts @@ -0,0 +1,94 @@ +import {BaseController} from './base_controller'; +import _get from "lodash-es/get"; +import _set from "lodash-es/set"; + +export class ElementSaveController extends BaseController { + + static targets = [ + "element", + ]; + static values = { + id: String, + attributes: String, + restoreOnLoad: Boolean, + }; + declare readonly hasElementTarget: boolean; + declare readonly elementTarget: HTMLElement; + declare readonly elementTargets: HTMLElement[]; + declare readonly idValue: string; + declare readonly attributesValue: string; + declare readonly hasIdValue: boolean; + declare readonly restoreOnLoadValue: boolean; + declare readonly hasRestoreOnLoadValue: boolean; + + get _id() { + if (this.hasIdValue) { + return this.idValue; + } + let elementID = this.el.id; + + if (elementID !== "") { + return elementID; + } else { + throw new Error(`No ID value to uniquely identify this element. Please either specify data-${this.identifier}-id-value or give this element an 'id' attribute. `); + } + } + + get _uniqueIdentifier() { + const url = location.href; + return `${url} ${this._id}`; + } + + get _restoreOnLoad() { + return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true; + } + + get _element(): HTMLElement { + return this.hasElementTarget ? this.elementTarget : this.el; + } + + connect() { + requestAnimationFrame(() => { + if (this._restoreOnLoad) { + this.restore(); + } + }); + } + + clear(event?: Event) { + if (event) { + event.preventDefault(); + } + localStorage.removeItem(this._uniqueIdentifier); + this.dispatch(this._element, `element-save:cleared`); + } + + save(event?: Event) { + if (event) { + event.preventDefault(); + } + let element = this._element; + let attributes = this.attributesValue.split(" "); + let data: { [idx: string]: any } = {}; + attributes.forEach((attr: string) => data[attr] = _get(element, attr)); + localStorage.setItem(this._uniqueIdentifier, JSON.stringify(data)); + this.dispatch(element, `element-save:save:success`); + } + + restore(event?: Event) { + if (event) { + event.preventDefault(); + } + let element = this._element; + if (localStorage.getItem(this._uniqueIdentifier)) { + const savedData = JSON.parse(localStorage.getItem(this._uniqueIdentifier)!); // get and parse the saved data from localStorage + Object.keys(savedData).forEach((attr: string) => { + _set(element as HTMLElement, attr, savedData[attr]); + }); + this.dispatch(element, `element-save:restore:success`); + } else { + this.dispatch(element, `element-save:restore:empty`); + } + } + +} diff --git a/src/index.ts b/src/index.ts index db49b755..2ac214b2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,6 +12,7 @@ export {DetectDirtyController} from "./detect_dirty_controller"; export {DisableInputsController} from "./disable_inputs_controller"; export {DisableWithController} from "./disable_with_controller"; export {DismissableController} from "./dismissable_controller"; +export {ElementSaveController} from "./element_save_controller"; export {EmptyDomController} from "./empty_dom_controller"; export {EnableInputsController} from "./enable_inputs_controller"; export {FallbackImageController} from "./fallback_image_controller"; diff --git a/yarn.lock b/yarn.lock index b26be874..b1021e36 100644 --- a/yarn.lock +++ b/yarn.lock @@ -992,6 +992,18 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/lodash-es@^4.17.4": + version "4.17.4" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.4.tgz#b2e440d2bf8a93584a9fd798452ec497986c9b97" + integrity sha512-BBz79DCJbD2CVYZH67MBeHZRX++HF+5p8Mo5MzjZi64Wac39S3diedJYHZtScbRVf4DjZyN6LzA0SB0zy+HSSQ== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.14.168" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" + integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== + "@types/minimist@^1.2.0": version "1.2.1" resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" @@ -2690,6 +2702,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"