stimulus-library 0.3.16 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/README.md +43 -43
- package/dist/controllers/ajax/async_block_controller.d.ts +18 -18
- package/dist/controllers/ajax/lazy_block_controller.d.ts +9 -9
- package/dist/controllers/ajax/load_block_controller.d.ts +19 -19
- package/dist/controllers/ajax/poll_block_controller.d.ts +16 -16
- package/dist/controllers/anchor_spy_controller.d.ts +15 -15
- package/dist/controllers/back_link_controller.d.ts +19 -19
- package/dist/controllers/clipboard_controller.d.ts +18 -18
- package/dist/controllers/confirm_controller.d.ts +13 -13
- package/dist/controllers/confirm_navigation_controller.d.ts +15 -15
- package/dist/controllers/debug_controller.d.ts +6 -6
- package/dist/controllers/disable_with_controller.d.ts +25 -25
- package/dist/controllers/dismissable_controller.d.ts +6 -6
- package/dist/controllers/element_save_controller.d.ts +25 -25
- package/dist/controllers/empty_dom_controller.d.ts +29 -29
- package/dist/controllers/forms/auto_submit_form_controller.d.ts +15 -13
- package/dist/controllers/forms/auto_submit_form_controller.d.ts.map +1 -1
- package/dist/controllers/forms/autosize_controller.d.ts +9 -9
- package/dist/controllers/forms/char_count_controller.d.ts +26 -26
- package/dist/controllers/forms/checkbox_select_all_controller.d.ts +14 -14
- package/dist/controllers/forms/detect_dirty_controller.d.ts +16 -16
- package/dist/controllers/forms/detect_dirty_form_controller.d.ts +19 -19
- package/dist/controllers/forms/disable_inputs_controller.d.ts +16 -16
- package/dist/controllers/forms/enable_inputs_controller.d.ts +16 -16
- package/dist/controllers/forms/form_rc_controller.d.ts +13 -7
- package/dist/controllers/forms/form_rc_controller.d.ts.map +1 -1
- package/dist/controllers/forms/form_save_controller.d.ts +33 -33
- package/dist/controllers/forms/limited_selection_checkboxes_controller.d.ts +17 -17
- package/dist/controllers/forms/navigate_form_errors_controller.d.ts +34 -34
- package/dist/controllers/forms/nested_form_controller.d.ts +21 -21
- package/dist/controllers/forms/password_confirm_controller.d.ts +17 -17
- package/dist/controllers/forms/password_peek_controller.d.ts +8 -8
- package/dist/controllers/forms/remote_form_controller.d.ts +13 -13
- package/dist/controllers/forms/remote_form_controller.d.ts.map +1 -1
- package/dist/controllers/forms/sync_inputs_controller.d.ts +21 -21
- package/dist/controllers/forms/value_warn_controller.d.ts +39 -39
- package/dist/controllers/forms/word_count_controller.d.ts +26 -26
- package/dist/controllers/media/fallback_image_controller.d.ts +27 -27
- package/dist/controllers/media/lightbox_image_controller.d.ts +29 -29
- package/dist/controllers/media/lightbox_image_controller.d.ts.map +1 -1
- package/dist/controllers/media/media_player_controller.d.ts +12 -12
- package/dist/controllers/prefetch_controller.d.ts +18 -18
- package/dist/controllers/prefetch_controller.d.ts.map +1 -1
- package/dist/controllers/responsive_iframe_controller.d.ts +23 -23
- package/dist/controllers/scroll/scroll_container_controller.d.ts +21 -21
- package/dist/controllers/scroll/scroll_into_focus_controller.d.ts +15 -15
- package/dist/controllers/scroll/scroll_to_bottom_controller.d.ts +11 -11
- package/dist/controllers/scroll/scroll_to_controller.d.ts +17 -17
- package/dist/controllers/scroll/scroll_to_top_controller.d.ts +11 -11
- package/dist/controllers/self_destruct_controller.d.ts +10 -10
- package/dist/controllers/sticky_controller.d.ts +19 -19
- package/dist/controllers/tables/table_sort_controller.d.ts +20 -20
- package/dist/controllers/tables/table_truncate_controller.d.ts +26 -26
- package/dist/controllers/teleport_controller.d.ts +15 -15
- package/dist/controllers/temporary_state_controller.d.ts +28 -28
- package/dist/controllers/toggle_class_controller.d.ts +35 -35
- package/dist/controllers/turbo_frame_rc_controller.d.ts +20 -20
- package/dist/controllers/turbo_frame_refresh_controller.d.ts +16 -16
- package/dist/controllers/utility/intersection_controller.d.ts +13 -13
- package/dist/controllers/utility/interval_controller.d.ts +13 -13
- package/dist/controllers/utility/presence_controller.d.ts +5 -5
- package/dist/controllers/utility/timeout_controller.d.ts +12 -12
- package/dist/controllers/utility/user_focus_controller.d.ts +10 -10
- package/dist/controllers/visual/clock_controller.d.ts +18 -18
- package/dist/controllers/visual/countdown_controller.d.ts +53 -53
- package/dist/controllers/visual/duration_controller.d.ts +27 -27
- package/dist/controllers/visual/tabs_controller.d.ts +37 -37
- package/dist/controllers/visual/time_distance_controller.d.ts +18 -18
- package/dist/controllers/visual/tree_view_controller.d.ts +29 -29
- package/dist/index.d.ts +66 -66
- package/dist/stimulus-library.cjs.js +2 -0
- package/dist/stimulus-library.cjs.js.map +1 -0
- package/dist/stimulus-library.es.js +2 -0
- package/dist/stimulus-library.es.js.map +1 -0
- package/dist/stimulus-library.umd.js +1 -1
- package/dist/stimulus-library.umd.js.map +1 -1
- package/dist/utilities/base_controller.d.ts +13 -13
- package/dist/utilities/base_controller.d.ts.map +1 -1
- package/dist/utilities/elements.d.ts +13 -12
- package/dist/utilities/elements.d.ts.map +1 -1
- package/dist/utilities/ephemeral_controller.d.ts +5 -5
- package/dist/utilities/event_bus.d.ts +3 -3
- package/dist/utilities/requestSubmit.d.ts +3 -0
- package/dist/utilities/requestSubmit.d.ts.map +1 -0
- package/dist/utilities/scroll.d.ts +10 -10
- package/dist/utilities/turbo.d.ts +1 -1
- package/package.json +18 -11
- package/dist/stimulus-library.js +0 -2
- package/dist/stimulus-library.js.map +0 -1
- package/dist/stimulus-library.modern.js +0 -2
- package/dist/stimulus-library.modern.js.map +0 -1
- package/dist/stimulus-library.module.js +0 -2
- package/dist/stimulus-library.module.js.map +0 -1
- package/tsconfig.json +0 -27
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Controller as e}from"stimulus";import t from"camelcase";import{isPast as s,intervalToDuration as i,formatDuration as a,toDate as r,formatDistanceToNow as n}from"date-fns";import{get as l,set as o,clamp as h,camelCase as c}from"lodash-es";import u from"dialog-polyfill";import d from"mitt";function m(){return(m=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var i in s)Object.prototype.hasOwnProperty.call(s,i)&&(e[i]=s[i])}return e}).apply(this,arguments)}class g extends e{constructor(e){return super(e),this.application.debug?new Proxy(this,{get:(e,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"logEvent":case"dispatch":case"data":case"valueDescriptorMap":case"mutate":case"identifier":return!1}return!(/^_.*?$/.test(e)||/^.*?Target(s)?$/.test(e)||/^.*?Value$/.test(e)||/^.*?ValueChanged$/.test(e)||/^.*?Class$/.test(e)||/^.*?Classes$/.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}}):this}get el(){return this.element}get isTurboPreview(){return document.documentElement.hasAttribute("data-turbo-preview")||document.documentElement.hasAttribute("data-turbolinks-preview")}get isTurbolinksPreview(){return this.isTurboPreview}get csrfToken(){return this.metaValue("csrf-token")}metaValue(e){const t=document.head.querySelector(`meta[name="${e}"]`);return(null==t?void 0:t.getAttribute("content"))||null}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);this.logEvent(t,a,e),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(m({element:this.element},t)),s.groupEnd()}warn(e,t={}){if(!this.application.debug)return;let s=console;s.groupCollapsed(`%c${this.identifier} %c#${e}`,"color: F39B1AFF","color: unset"),s.warn(m({element:this.element},t)),s.groupEnd()}logEvent(e,t,s){if(!this.application.debug)return;let i=console;i.groupCollapsed(`%c${this.identifier} %c${e}%c`,"color: #3B82F6","color: #0be000","color: unset"),i.log({element:s}),i.groupEnd()}}class _ extends g{_cleanupSelf(){this.cleanup(this.el)}cleanup(e){var s,i,a;e.dataset.controller=(null==(s=e.dataset.controller)?void 0:s.replaceAll(new RegExp(`(s|^)${this.identifier}(s|$)`,"g"),""))||"",""==e.dataset.controller&&delete e.dataset.controller;let r=new RegExp(`(s|^)${this.identifier}\\..+?(s|$)`,"g");e.dataset.target=(null==(i=e.dataset.target)?void 0:i.replaceAll(r,""))||"",delete e.dataset[t(`${this.identifier}-target`)],""==e.dataset.target&&delete e.dataset.target,e.dataset.action=(null==(a=e.dataset.target)?void 0:a.replaceAll(r,""))||"",delete e.dataset[t(`${this.identifier}-action`)],""==e.dataset.action&&delete e.dataset.action;let n=this.constructor.values;n&&Object.keys(n).forEach(s=>delete e.dataset[t(`${this.identifier}-${s}-value`)]);let l=this.constructor.classes;l&&Object.keys(l).forEach(s=>delete e.dataset[t(`${this.identifier}-${s}-class`)])}}class v extends g{get _key(){return this.keyValue.replaceAll("#","")}get _anchor(){return window.location.hash.substr(1)}set _anchor(e){window.location.hash=e}initialize(){this._checkAnchor=this._checkAnchor.bind(this)}connect(){requestAnimationFrame(()=>{this._checkAnchor(),window.addEventListener("hashchange",this._checkAnchor)})}disconnect(){window.removeEventListener("hashchange",this._checkAnchor)}write(e){null==e||e.preventDefault(),this._anchor=this._key}_checkAnchor(){this.dispatch(this.el,this._key===this._anchor?"anchor-spy:active":"anchor-spy:inactive")}}v.values={key:String};class p extends g{get _errorMessage(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}connect(){}async loadContent(e=null){null==e||e.preventDefault();let t=this,s=this.hasReplaceTarget?this.replaceTarget:this.el,i=()=>{s.replaceWith(this._errorMessage),t.dispatch(s,"ajax:error")};try{let e=await fetch(this.endpointValue);e.ok||i();let a=await e.text(),r=document.createElement("div");if(r.innerHTML=a,this.hasSelectorValue){let e=r.querySelectorAll(this.selectorValue);s.replaceWith(...e)}else s.replaceWith(...r.children);t.dispatch(s,"ajax:success")}catch(e){i()}finally{t.dispatch(s,"ajax:complete")}}}p.targets=["replace"],p.values={endpoint:String,errorMessage:String,selector:String};class f extends p{get _errorMessage(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}async connect(){await this.loadContent()}}f.targets=["replace"],f.values={endpoint:String,errorMessage:String,selector:String};class b extends g{get _mode(){if(this.hasModeValue){if(!["direct","request"].includes(this.modeValue))throw new Error(`The modeValue provided '${this.modeValue}' is not one of the recognised configuration options`);return this.modeValue}return"request"}initialize(){this.submit=this.submit.bind(this)}connect(){this.el.querySelectorAll("input, select, textarea").forEach(e=>e.addEventListener("change",this.submit))}disconnect(){this.el.querySelectorAll("input, select, textarea").forEach(e=>e.removeEventListener("change",this.submit))}submit(){let e=this.el;e.requestSubmit&&"request"==this._mode?e.requestSubmit():this.el.dataset.remote?this.dispatch(this.el,"submit"):(this.dispatch(this.el,"submit"),e.submit())}}b.values={mode:String};const E=(e,t)=>{const s=e[t];return"function"==typeof s?s:(...e)=>{}},w=(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:r}=t||{bubbles:!0,cancelable:!0,composed:!0};return t&&Object.assign(s,{originalEvent:t}),new CustomEvent(e,{bubbles:i,cancelable:a,composed:r,detail:s})},y={dispatchEvent:!0,eventPrefix:!0},T=(e,t={})=>{const{dispatchEvent:s,eventPrefix:i}=Object.assign({},y,t),a=(null==t?void 0:t.element)||e.element,r=e.disconnect.bind(e),n=new IntersectionObserver(t=>{const[r]=t;r.isIntersecting?(t=>{if(e.isVisible=!0,E(e,"appear").call(e,t),s){const s=w("appear",e,i),r=C(s,null,{controller:e,entry:t});a.dispatchEvent(r)}})(r):e.isVisible&&(t=>{if(e.isVisible=!1,E(e,"disappear").call(e,t),s){const s=w("disappear",e,i),r=C(s,null,{controller:e,entry:t});a.dispatchEvent(r)}})(r)},t),l=()=>{n.observe(a)},o=()=>{n.unobserve(a)};return Object.assign(e,{isVisible:!1,disconnect(){o(),r()}}),l(),[l,o]},V={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},L={debug:!1,logger:console,dispatchEvent:!0,eventPrefix:!0};class k{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({controllerId:this.controllerId,...t}),this.logger.groupEnd())},this.dispatch=(e,t={})=>{if(this.dispatchEvent){const{event:s,...i}=t,a=this.extendedEvent(e,s||null,i);this.targetElement.dispatchEvent(a),this.log("dispatchEvent",{eventName:a.type,...i})}},this.call=(e,t={})=>{const s=this.controller[e];if("function"==typeof s)return s.call(this.controller,t)},this.extendedEvent=(e,t,s)=>{const{bubbles:i,cancelable:a,composed:r}=t||{bubbles:!0,cancelable:!0,composed:!0};return t&&Object.assign(s,{originalEvent:t}),new CustomEvent(this.composeEventName(e),{bubbles:i,cancelable:a,composed:r,detail:s})},this.composeEventName=e=>{let t=e;return!0===this.eventPrefix?t=`${this.controller.identifier}:${e}`:"string"==typeof this.eventPrefix&&(t=`${this.eventPrefix}:${e}`),t},this.debug=null!==(i=null!==(s=null==t?void 0:t.debug)&&void 0!==s?s:e.application.stimulusUseDebug)&&void 0!==i?i:L.debug,this.logger=null!==(a=null==t?void 0:t.logger)&&void 0!==a?a:L.logger,this.controller=e,this.controllerId=e.element.id||e.element.dataset.id,this.targetElement=(null==t?void 0:t.element)||e.element;const{dispatchEvent:r,eventPrefix:n}=Object.assign({},L,t);Object.assign(this,{dispatchEvent:r,eventPrefix:n}),this.controllerInitialize=e.initialize.bind(e),this.controllerConnect=e.connect.bind(e),this.controllerDisconnect=e.disconnect.bind(e)}}class S extends k{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=e=>{this.call("mouseEnter",e),this.log("mouseEnter",{hover:!0}),this.dispatch("mouseEnter",{hover:!1})},this.onLeave=e=>{this.call("mouseLeave",e),this.log("mouseLeave",{hover:!1}),this.dispatch("mouseLeave",{hover:!1})},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 x extends k{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=>{this.call("mutate",e),this.log("mutate",{entries:e}),this.dispatch("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 A=(e,t={})=>{const s=new x(e,t);return[s.observe,s.unobserve]},D=e=>{const t=t=>{const{innerWidth:s,innerHeight:i}=window,a={height:i||Infinity,width:s||Infinity,event:t};E(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]};(class extends e{}).debounces=[];const H=(e,t=200)=>{let s=null;return function(){const i=arguments,a=this,r=()=>e.apply(a,i);s&&clearTimeout(s),s=setTimeout(r,t)}};class I extends g{initialize(){this._handler=this._handler.bind(this)}connect(){D(this),requestAnimationFrame(()=>{this._handler();let e=this.el;e.style.resize="none",e.style.boxSizing="border-box",e.addEventListener("input",this._handler),e.addEventListener("focus",this._handler)})}disconnect(){this.el.removeEventListener("input",this._handler),this.el.removeEventListener("focus",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 N extends g{constructor(...e){super(...e),this._timeoutHandle=null}get _pages(){return this.hasPagesValue?Math.abs(this.pagesValue):1}get _timeout(){return this.hasTimeoutValue?this.timeoutValue:1500}initialize(){this.goBack=this.goBack.bind(this),this.fallback=this.fallback.bind(this)}connect(){this.el.addEventListener("click",this.goBack)}disconnect(){this.el.removeEventListener("click",this.goBack),this._timeoutHandle&&clearTimeout(this._timeoutHandle)}goBack(e){null==e||e.preventDefault(),history.go(-this._pages),this.el.href&&(this._timeoutHandle=setTimeout(this.fallback,this._timeout))}fallback(){window.location.href=this.el.href}}N.values={timeout:Number,pages:Number};class M extends g{get _errorClasses(){return this.errorClass.split(" ")}get _defaultErrorClasses(){return[]}initialize(){this._updateCharCount=this._updateCharCount.bind(this)}connect(){requestAnimationFrame(()=>{this.inputTarget.addEventListener("input",this._updateCharCount),this._updateCharCount()})}disconnect(){this.inputTarget.removeEventListener("input",this._updateCharCount)}_addErrorClasses(e=this.el){this.hasErrorClass?e.classList.add(...this._errorClasses):e.classList.add(...this._defaultErrorClasses)}_removeErrorClasses(e=this.el){this.hasErrorClass?e.classList.remove(...this._errorClasses):e.classList.remove(...this._defaultErrorClasses)}_updateCharCount(){let e=this.inputTarget.value.length;this.outputTarget.innerText=e.toString(),this.hasErrorClass&&(this._isValidCount(e)?this._removeErrorClasses(this.outputTarget):this._addErrorClasses(this.outputTarget))}_isValidCount(e){let t=0,s=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(s=this.maxValue),e>=t&&e<=s}}M.targets=["input","output"],M.values={min:Number,max:Number},M.classes=["error"];class O extends g{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<e}}O.targets=["selectAll","checkbox"];class z extends g{constructor(...e){super(...e),this._supported=!1}connect(){this._supported=document.queryCommandSupported("copy"),this.hasRemoveUnusedValue&&this.removeUnusedValue&&(this._supported&&this.hasFallbackTarget?this.fallbackTarget.remove():this.hasCopyTarget&&this.copyTarget.remove())}select(e){e&&e.preventDefault(),this.sourceTarget.select()}copy(e){e&&e.preventDefault(),this.sourceTarget.select(),this._supported&&document.execCommand("copy")}}z.targets=["source","button","copy","fallback"],z.values={removeUnused:Boolean};class B extends g{constructor(...e){super(...e),this._intervalHandle=null}get _tickInterval(){return this.hasMillisecondsTarget?1:this.hasSecondsTarget?1e3:this.hasMinutesTarget?15e3:3e5}initialize(){this._tick=this._tick.bind(this)}connect(){requestAnimationFrame(()=>{this._intervalHandle=window.setInterval(this._tick,this._tickInterval)})}disconnect(){this._intervalHandle&&window.clearInterval(this._intervalHandle)}_tick(){let e=new Date;this.hasHoursTarget&&(this.hoursTarget.innerHTML=e.getHours().toString().padStart(2,"0")),this.hasMinutesTarget&&(this.minutesTarget.innerHTML=e.getMinutes().toString().padStart(2,"0")),this.hasSecondsTarget&&(this.secondsTarget.innerHTML=e.getSeconds().toString().padStart(2,"0")),this.hasMillisecondsTarget&&(this.millisecondsTarget.innerHTML=e.getMilliseconds().toString().padStart(3,"0"))}}function $(e){return"A"==e.nodeName}function q(e){return"FORM"==e.nodeName}function F(e){return"INPUT"==e.nodeName}function W(e){return"TEXTAREA"==e.nodeName}function R(e){return"BUTTON"==e.nodeName}function P(e){return"SELECT"==e.nodeName}function j(e){return F(e)&&("radio"===e.type||"checkbox"===e.type)}function U(e){return F(e)||P(e)||W(e)}B.targets=["hours","minutes","seconds","milliseconds"];class J extends g{get _message(){return this.hasMessageValue?this.messageValue:"Are you sure?"}initialize(){this.confirm=this.confirm.bind(this)}connect(){requestAnimationFrame(()=>{let e=this.el;if(q(e))e.addEventListener("submit",this.confirm);else{if(!$(e))throw new Error("Can't handle confirmation on attached element");e.addEventListener("click",this.confirm)}})}disconnect(){let e=this.el;q(e)?e.removeEventListener("submit",this.confirm):$(e)&&e.removeEventListener("click",this.confirm)}confirm(e){window.confirm(this._message)||(e.preventDefault(),this.dispatch(this.el,"confirm:cancelled"))}}J.values={message:String};class Y extends g{get _message(){return this.hasMessageValue?this.messageValue:"Do you want to leave this page? Changes you made may not be saved"}initialize(){this.allowSubmit=this.allowSubmit.bind(this),this.confirmNavigation=this.confirmNavigation.bind(this),this.confirmTurboNavigation=this.confirmTurboNavigation.bind(this)}connect(){window.onbeforeunload=()=>this._message,window.addEventListener("popstate",this.confirmNavigation),window.addEventListener("submit",this.allowSubmit),window.addEventListener("turbolinks:before-visit",this.confirmTurboNavigation),window.addEventListener("turbo:before-visit",this.confirmTurboNavigation)}disconnect(){window.removeEventListener("popstate",this.confirmNavigation),window.onbeforeunload=null,window.removeEventListener("submit",this.allowSubmit),window.removeEventListener("turbolinks:before-visit",this.confirmTurboNavigation),window.removeEventListener("turbo:before-visit",this.confirmTurboNavigation)}allowSubmit(e){window.removeEventListener("popstate",this.confirmNavigation),window.onbeforeunload=null}confirmNavigation(e){return!1}confirmTurboNavigation(e){confirm(this._message)||e.preventDefault()}}Y.values={message:String};class K extends g{constructor(...e){super(...e),this._interval=null}get _removeUnused(){return!!this.hasRemoveUnusedValue&&this.removeUnusedValue}get _endedClasses(){return this.endedClass.split(" ")}get _defaultEndedClasses(){return[]}get _countingDownClasses(){return this.countingDownClass.split(" ")}get _defaultCountingDownClasses(){return[]}get _deadlineDate(){return new Date(this.deadlineValue)}connect(){this._interval=setInterval(this._tick.bind(this),1e3),this._addCountingDownClasses()}disconnect(){this._clearTick(),this._removeCountingDownClasses(),this._removeEndedClasses()}deadlineValueChanged(){null==this._interval&&(this._interval=setInterval(this._tick.bind(this),1e3))}_tick(){try{const e=new Date;let t={};s(this._deadlineDate)?(t={years:0,months:0,days:0,hours:0,minutes:0,seconds:0},this._clearTick(),this._removeCountingDownClasses(),this._addEndedClasses(),this.dispatch(this.el,"countdown:ended")):t=i({start:this._deadlineDate,end:e}),this.hasYearsTarget&&this._updateTarget(this.yearsTarget,this._years(t)),this.hasMonthsTarget&&this._updateTarget(this.monthsTarget,this._months(t)),this.hasDaysTarget&&this._updateTarget(this.daysTarget,this._days(t)),this.hasHoursTarget&&this._updateTarget(this.hoursTarget,this._hours(t)),this.hasMinutesTarget&&this._updateTarget(this.minutesTarget,this._minutes(t)),this.hasSecondsTarget&&this._updateTarget(this.secondsTarget,this._seconds(t))}catch(e){console.error(e),this._clearTick()}}_clearTick(){this._interval&&(clearInterval(this._interval),this._interval=null)}_updateTarget(e,t){this._removeTargetIfUnused(e,t),e.innerHTML=t.toString()}_removeTargetIfUnused(e,t){this._removeUnused&&(0===t&&e.dataset.unused?Number.parseInt(e.dataset.unused)>Date.now()+1500&&e.remove():e.dataset.unused=0==t?Date.now().toString():void 0)}_years(e){return e.years||0}_months(e){return e.months||0}_days(e){return e.days||0}_hours(e){return e.hours||0}_minutes(e){return e.minutes||0}_seconds(e){return e.seconds||0}_addEndedClasses(e=this.el){this.hasEndedClass?e.classList.add(...this._endedClasses):e.classList.add(...this._defaultEndedClasses)}_removeEndedClasses(e=this.el){this.hasEndedClass?e.classList.remove(...this._endedClasses):e.classList.remove(...this._defaultEndedClasses)}_addCountingDownClasses(e=this.el){this.hasCountingDownClass?e.classList.add(...this._countingDownClasses):e.classList.add(...this._defaultCountingDownClasses)}_removeCountingDownClasses(e=this.el){this.hasCountingDownClass?e.classList.remove(...this._countingDownClasses):e.classList.remove(...this._defaultCountingDownClasses)}}K.values={deadline:String,removeUnused:Boolean},K.targets=["years","months","days","hours","minutes","seconds"],K.classes=["countingDown","ended"];class X extends g{connect(){console.log("Debug Controller",this,this.testTargets)}}X.targets=["test"];class G extends g{get _cacheAttrName(){return"detect-dirty-load-value"}initialize(){this._checkDirty=this._checkDirty.bind(this)}connect(){let e=this.el;this._cacheLoadValues(),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(e){null==e||e.preventDefault(),this._restoreElementFromLoadValue()}_getElementValue(){let e=this.el;return j(e)?e.checked:e.value}_getElementLoadValue(){let e=this.el,t=e.getAttribute(this._cacheAttrName);return j(e)?null==t?e.defaultChecked:"true"==t:(null!==t||P(e)&&Array.from(e.options).forEach(t=>{if(t.defaultSelected)return e.value=t.value,t.value}),t)}_elementHasCachedLoadValue(){return this.el.hasAttribute(this._cacheAttrName)}_checkDirty(){let e=this.el;this._isElementDirty()?e.setAttribute("data-dirty","true"):e.removeAttribute("data-dirty")}_isElementDirty(){return this._getElementValue()!==this._getElementLoadValue()}_restoreElementFromLoadValue(){let e=this.el,t=e.getAttribute(this._cacheAttrName);j(e)?(e.setAttribute(this._cacheAttrName,e.checked.toString()),e.checked=null==t?e.defaultChecked:"true"==t):P(e)?null==t?Array.from(e.options).forEach(t=>{t.defaultSelected&&(e.value=t.value)}):e.value=t:e.value=null==t?e.defaultValue:t}_cacheLoadValues(){let e=this.el;!this._elementHasCachedLoadValue()&&j(e)?e.setAttribute(this._cacheAttrName,e.checked.toString()):e.setAttribute(this._cacheAttrName,e.value.toString())}}function Q(e){return e.hasAttribute("data-dirty")}class Z extends g{get _formElements(){return Array.from(this.el.querySelectorAll("input, select, textarea"))}get _cacheAttrName(){return"detect-dirty-load-value"}initialize(){this._checkDirty=this._checkDirty.bind(this)}connect(){let e=this.el;this._cacheLoadValues(),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(e){null==e||e.preventDefault(),this._formElements.forEach(e=>this._restoreElementFromLoadValue(e))}_getElementValue(e){return j(e)?e.checked:e.value}_getElementLoadValue(e){let t=e.getAttribute(this._cacheAttrName);return j(e)?null==t?e.defaultChecked:"true"==t:(null!==t||P(e)&&Array.from(e.options).forEach(t=>{if(t.defaultSelected)return e.value=t.value,t.value}),t)}_elementHasCachedLoadValue(e){return e.hasAttribute(this._cacheAttrName)}_checkElementDirty(e){this._isElementDirty(e)?e.setAttribute("data-dirty","true"):e.removeAttribute("data-dirty")}_isElementDirty(e){return this._getElementValue(e)!==this._getElementLoadValue(e)}_cacheElementLoadValue(e){!this._elementHasCachedLoadValue(e)&&j(e)?e.setAttribute(this._cacheAttrName,e.checked.toString()):e.setAttribute(this._cacheAttrName,e.value.toString())}_restoreElementFromLoadValue(e){let t=e.getAttribute(this._cacheAttrName);j(e)?(e.setAttribute(this._cacheAttrName,e.checked.toString()),e.checked=null==t?e.defaultChecked:"true"==t):P(e)?null==t?Array.from(e.options).forEach(t=>{t.defaultSelected&&(e.value=t.value)}):e.value=t:e.value=null==t?e.defaultValue:t}_cacheLoadValues(){this._formElements.forEach(e=>this._cacheElementLoadValue(e))}_checkDirty(){this._formElements.forEach(e=>this._checkElementDirty(e)),this._formElements.some(e=>ee(e))?this.el.setAttribute("data-dirty","true"):this.el.removeAttribute("data-dirty")}}function ee(e){return e.hasAttribute("data-dirty")}class te extends g{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})}}te.targets=["disabler","disable"],te.values={clear:Boolean};class se extends g{constructor(...e){super(...e),this._cacheText=void 0,this._timeoutHandle=void 0}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),this._enable=this._enable.bind(this),this._disable=this._disable.bind(this)}connect(){requestAnimationFrame(()=>{this.el.addEventListener("click",this.disable),window.addEventListener("turbo:load",this._enable),window.addEventListener("turbolinks:load",this._enable)})}disconnect(){this._timeoutHandle&&clearTimeout(this._timeoutHandle),this.el.removeEventListener("click",this.disable),window.addEventListener("turbo:load",this._enable),window.addEventListener("turbolinks:load",this._enable)}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(),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())}_isDisabled(e){return F(e)&&"submit"==e.type||R(e)?e.disabled:"true"==e.dataset.disabled}_getElText(e){return F(e)&&"submit"==e.type?e.value:e.innerText}_setElText(e,t){F(e)&&"submit"==e.type?e.value=t:(R(e)||$(e))&&(e.innerText=t)}_disable(){let e=this.el;F(e)&&"submit"==e.type||R(e)?e.disabled=!0:e.dataset.disabled="true"}_enable(){let e=this.el;F(e)&&"submit"==e.type||R(e)?e.disabled=!1:e.dataset.disabled=void 0}}se.values={message:String,timeout:Number};class ie extends g{dismiss(){this.el.remove()}}class ae extends ie{}class re extends g{constructor(...e){super(...e),this._intervalHandle=null}get _format(){return["years","months","weeks","days","hours",...this._minutes?["minutes"]:[],...this._seconds?["seconds"]:[]]}get _output(){let{years:e,months:t,weeks:s,days:i,hours:r,minutes:n,seconds:l}=this._duration;return e||(e=0),t||(t=0),s||(s=0),i||(i=0),r||(r=0),n||(n=0),l||(l=0),this._minutes||this._seconds||![e,t,s,i,r].every(e=>0===e)?a(this._duration,{format:this._format,delimiter:", "}):(n+=l/60,`${(n/60).toFixed(1)} hours`)}get _seconds(){return!this.hasSecondsValue||this.secondsValue}get _minutes(){return!this.hasMinutesValue||this.minutesValue}get _timestamp(){if(this.hasTimestampValue)return r(1e3*this.timestampValue);throw new Error("Expected `timestampValue` to be present")}get _duration(){return i({start:new Date,end:this._timestamp})}get _tickInterval(){return this._seconds?1e3:this._minutes?15e3:12e4}initialize(){this._update=this._update.bind(this)}connect(){this._intervalHandle=window.setInterval(this._update,this._tickInterval),this._update()}disconnect(){this._intervalHandle&&window.clearInterval(this._intervalHandle)}_update(){try{this.el.innerHTML=this._output}catch(e){this._intervalHandle&&window.clearInterval(this._intervalHandle)}}}re.values={timestamp:Number,minutes:Boolean,seconds:Boolean};class ne extends g{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 t=this._element,s=this.attributesValue.split(" "),i={};s.forEach(e=>i[e]=l(t,e)),localStorage.setItem(this._uniqueIdentifier,JSON.stringify(i)),this.dispatch(t,"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(s=>{o(t,s,e[s])}),this.dispatch(t,"element-save:restore:success")}else this.dispatch(t,"element-save:restore:empty")}}ne.targets=["element"],ne.values={id:String,attributes:String,restoreOnLoad:Boolean};class le extends g{get _container(){return this.hasContainerTarget?this.containerTarget:this.el}get _notEmptyClasses(){return this.notEmptyClass.split(" ")}get _defaultNotEmptyClasses(){return[]}get _emptyClasses(){return this.emptyClass.split(" ")}get _defaultEmptyClasses(){return[]}get _children(){let e=this._container;return Array.from(this.hasScopeSelectorValue?e.querySelectorAll(this.scopeSelectorValue):e.children)}connect(){A(this,{element:this._container,childList:!0}),this.checkEmpty()}mutate(e){this.checkEmpty()}checkEmpty(){let e=this._container,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}}))}_addNotEmptyClasses(e=this.el){this.hasNotEmptyClass?e.classList.add(...this._notEmptyClasses):e.classList.add(...this._defaultNotEmptyClasses)}_removeNotEmptyClasses(e=this.el){this.hasNotEmptyClass?e.classList.remove(...this._notEmptyClasses):e.classList.remove(...this._defaultNotEmptyClasses)}_addEmptyClasses(e=this.el){this.hasEmptyClass?e.classList.add(...this._emptyClasses):e.classList.add(...this._defaultEmptyClasses)}_removeEmptyClasses(e=this.el){this.hasEmptyClass?e.classList.remove(...this._emptyClasses):e.classList.remove(...this._defaultEmptyClasses)}}le.targets=["container"],le.classes=["empty","notEmpty"],le.values={scopeSelector:String};class oe extends g{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})}}oe.targets=["enabler","enable"],oe.values={clear:Boolean};class he extends g{get _successClasses(){return this.successClass.split(" ")}get _defaultSuccessClasses(){return[]}get _failClasses(){return this.failClass.split(" ")}get _defaultFailClasses(){return[]}initialize(){this._hasLoadedSuccessfully=this._hasLoadedSuccessfully.bind(this),this._success=this._success.bind(this),this._fail=this._fail.bind(this)}connect(){let e=this.el;e.onerror=this._fail,e.complete&&!this._hasLoadedSuccessfully()?this._fail():this._success()}disconnect(){this._removeSuccessClasses(),this._removeFailClasses()}_success(){this._addSuccessClasses()}_fail(){let e=this.el;this._addFailClasses(),this.hasPlaceholderValue&&e.src!==this.placeholderValue?(this.dispatch(e,"fallback-image:placeholder"),e.src=this.placeholderValue,e.onerror=this._fail):(this.dispatch(e,"fallback-image:fail"),e.style.display="none")}_hasLoadedSuccessfully(){let e=this.el;return e.naturalHeight>0&&e.naturalWidth>0}_addFailClasses(e=this.el){this.hasFailClass?e.classList.add(...this._failClasses):e.classList.add(...this._defaultFailClasses)}_removeFailClasses(e=this.el){this.hasFailClass?e.classList.remove(...this._failClasses):e.classList.remove(...this._defaultFailClasses)}_addSuccessClasses(e=this.el){this.hasSuccessClass?e.classList.add(...this._successClasses):e.classList.add(...this._defaultSuccessClasses)}_removeSuccessClasses(e=this.el){this.hasSuccessClass?e.classList.remove(...this._successClasses):e.classList.remove(...this._defaultSuccessClasses)}}he.values={placeholder:String},he.classes=["success","fail"];class ce extends g{submit(e){null==e||e.preventDefault(),this.dispatch(this.formTarget,"submit"),this.formTarget.submit()}reset(e){null==e||e.preventDefault(),this.dispatch(this.formTarget,"reset"),this.formTarget.reset()}}ce.targets=["form"];class ue extends g{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&&(F(s)&&"checkbox"==s.type?e[this._formIdentifier][s.name]=s.checked:F(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(!q(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&&(F(s)&&"checkbox"==s.type?s.checked=e[s.name]:F(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")}}ue.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};class de extends g{get _threshold(){return this.hasThresholdValue?this.thresholdValue.split(",").map(e=>Number.parseFloat(e.trim())).filter(e=>e>=0&&e<=1):[0,1]}connect(){T(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}})}}de.values={threshold:String};class me extends g{constructor(...e){super(...e),this._intervalHandle=null}initialize(){this._interval=this._interval.bind(this)}connect(){if(!this.hasSecondsValue)throw new Error("Expected `secondsValue` to be present");requestAnimationFrame(()=>{this._intervalHandle=window.setInterval(this._interval,1e3*this.secondsValue)})}disconnect(){this._intervalHandle&&window.clearInterval(this._intervalHandle)}_interval(){this.dispatch(this.el,"interval:action")}}me.values={seconds:Number};class ge extends p{async connect(){let e=this.el;"IntersectionObserver"in window?[this.observe,this.unobserve]=T(this,{element:e,threshold:.3}):await this.loadContent()}async appear(e){e.target===this.el&&e.isIntersecting&&(await this.loadContent(),this.unobserve&&this.unobserve())}}const _e="scrollBehavior"in document.documentElement.style;let ve;async function pe(e,{behavior:t="smooth",block:s="start",inline:i="nearest"}={}){"smooth"!=t||_e||await we(),e.scrollIntoView({behavior:t,block:s,inline:i})}async function fe(e,{behavior:t="smooth"}={}){"smooth"!=t||_e||await we(),e.scrollTo({top:0,left:0,behavior:t})}async function be(e,{behavior:t="smooth"}={}){"smooth"!=t||_e||await we(),e==window?e.scrollTo({top:document.body.scrollHeight,left:0,behavior:t}):e.scrollTo({top:e.scrollHeight,left:0,behavior:t})}async function Ee(e,{behavior:t="smooth"}={}){"smooth"!=t||_e||await we(),e.scrollTo({left:0,behavior:t})}async function we(){const{polyfill:e}=await import("smoothscroll-polyfill");ve||(ve=!0,e())}function Ce(e){if(!e)return null;if(e==document.body)return window;const t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:Ce(e.parentElement)||document.body}class ye extends g{constructor(...e){super(...e),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),u.registerDialog(this._dialog),this._dialog.className=this._modalClassName,this._dialog.showModal(),pe(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,pe(this.el,{behavior:"smooth",block:"end"}).catch(()=>this.el.scrollIntoView(!1)))}}ye.values={src:String,srcSet:String,sizes:String},ye.classes=["modal","image"];class Te extends g{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=""))}}Te.targets=["input","error"],Te.values={max:Number,message:String};class Ve extends g{initialize(){}connect(){}disconnect(){}async play(e){null==e||e.preventDefault(),await this.mediaTarget.play()}pause(e){null==e||e.preventDefault(),this.mediaTarget.pause()}restart(e){null==e||e.preventDefault(),this.mediaTarget.currentTime=0}seek(e){null==e||e.preventDefault(),this.mediaTarget.currentTime+=5}}Ve.targets=["media"];class Le extends g{constructor(...e){super(...e),this._errors=[],this._firstClick=!1}get _errorCount(){return this._errors.length}get _previousIndex(){let e=this._index-1;return e<0?0:e}get _nextIndex(){let e=this._index+1;return e>this._errors.length-1?this._errors.length-1:e}get _index(){return h(this.hasIndexValue?this.indexValue:0,0,this._errors.length)}get _selector(){if(this.hasSelectorValue)return this.selectorValue;throw new Error("Expected `selectorValue` to be present")}get _currentError(){return this._errors[this._index]}connect(){requestAnimationFrame(()=>{this._firstClick=!0,this._toggleButtons(),this._toggleVisibility()})}async current(e){null==e||e.preventDefault(),this._firstClick&&(this._firstClick=!1,this._toggleButtons()),await pe(this._currentError,{behavior:"smooth",block:"center",inline:"center"})}async next(e){null==e||e.preventDefault(),this._firstClick?(this._firstClick=!1,this._toggleButtons()):this.indexValue=this._nextIndex,await pe(this._currentError,{behavior:"smooth",block:"center",inline:"center"})}async previous(e){null==e||e.preventDefault(),this._firstClick?(this._firstClick=!1,this._toggleButtons()):this.indexValue=this._previousIndex,await pe(this._currentError,{behavior:"smooth",block:"center",inline:"center"})}indexValueChanged(){this._toggleButtons()}selectorValueChanged(){this._errors=Array.from(document.querySelectorAll(this._selector)),this.indexValue=0,this._toggleButtons(),this._toggleVisibility()}_toggleVisibility(){this.el.style.display=0===this._errorCount?"none":""}_toggleButtons(){if(this.hasNextTarget){if(!this.hasCurrentTarget&&this._firstClick&&this.indexValue==this._errorCount-1)return void this.nextTarget.removeAttribute("disabled");this.indexValue>=this._errorCount-1?this.nextTarget.setAttribute("disabled","true"):this.nextTarget.removeAttribute("disabled")}this.hasPreviousTarget&&(this.indexValue<=0?this.previousTarget.setAttribute("disabled","true"):this.previousTarget.removeAttribute("disabled"))}}Le.values={selector:String,index:Number},Le.targets=["next","current","previous"];class ke extends g{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`")}}ke.targets=["target","template"],ke.values={insertMode:String,wrapperClass:String};class Se extends g{get _errorClasses(){return this.errorClass.split(" ")}get _defaultErrorClasses(){return[]}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))}_addErrorClasses(e=this.el){this.hasErrorClass?e.classList.add(...this._errorClasses):e.classList.add(...this._defaultErrorClasses)}_removeErrorClasses(e=this.el){this.hasErrorClass?e.classList.remove(...this._errorClasses):e.classList.remove(...this._defaultErrorClasses)}_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=>this._removeErrorClasses(e))):(this.dispatch(e,"password-confirm:no-match"),this.hasErrorClass&&this.passwordTargets.forEach(e=>this._addErrorClasses(e)))}}Se.targets=["password"],Se.classes=["error"];class xe extends g{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()}}xe.targets=["password"];class Ae extends p{constructor(...e){super(...e),this._intervalHandle=null}initialize(){this._timeout=this._timeout.bind(this)}connect(){requestAnimationFrame(()=>{this._timeout(),this._intervalHandle=window.setInterval(this._timeout,1e3*this.secondsValue)})}disconnect(){this._intervalHandle&&window.clearInterval(this._intervalHandle)}async _timeout(){await this.loadContent()}}Ae.targets=["replace"],Ae.values={endpoint:String,errorMessage:String,selector:String,seconds:Number};class De extends g{get _mode(){return this.hasModeValue?this.modeValue:"mouseover"}get _supportsPrefetch(){var e,t;const s=document.createElement("link");return(null==(e=s.relList)?void 0:e.supports)&&(null==(t=s.relList)?void 0:t.supports("prefetch"))}get _href(){return this.el.href}get _existingPrefetch(){return(document.head.querySelectorAll(`link[rel="prefetch"][href="${this._href}"]`)||[]).length>0}get _connectionSuitable(){const e=navigator.connection;if(!e)return!0;if(e){if(e.saveData)return this.warn("Data Saving is enabled"),!1;if(/2g/.test(e.effectiveType))return this.warn("Network is too slow"),!1}return!0}initialize(){this.prefetch=this.prefetch.bind(this)}connect(){if(this._supportsPrefetch)switch(this._mode){case"intersect":this._setupObserver();break;case"mouseover":this.el.addEventListener("mouseover",this.prefetch,{once:!0});break;default:throw new Error(`'${this._mode}' is not a supported prefetch mode`)}}disconnect(){this.el.removeEventListener("mouseover",this.prefetch)}_setupObserver(){new IntersectionObserver(([e],t)=>{e.isIntersecting&&(this.prefetch(),t.unobserve(e.target))}).observe(this.element)}prefetch(){if(this._existingPrefetch||!this._connectionSuitable)return;const e=document.createElement("link");Object.assign(e,{rel:"prefetch",href:this._href,as:"document"}),document.head.appendChild(e)}}De.values={mode:String};class He extends g{connect(){this.dispatch(this.el,"presence:added")}disconnect(){this.dispatch(this.el,"presence:removed")}}class Ie extends g{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)}}Ie.targets=[],Ie.values={selector:String};class Ne extends g{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 Me extends g{connect(){var e,t,s;window.self!==window.top&&(D(this),t={},null===(s=(e=this).constructor.debounces)||void 0===s||s.forEach(s=>{if("string"==typeof s&&(e[s]=H(e[s],null==t?void 0:t.wait)),"object"==typeof s){const{name:i,wait:a}=s;if(!i)return;e[i]=H(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)}}Me.debounces=["postUpdate"];class Oe extends g{get _increment(){return this.hasIncrementValue?this.incrementValue:50}get _behaviour(){if(this.hasBehaviourValue){if(["auto","smooth"].includes(this.behaviourValue))return this.behaviourValue;throw new Error(`'${this.behaviourValue}' is not a recognised scroll behaviour`)}return"auto"}async scrollTop(e){null==e||e.preventDefault(),await fe(this.el,{behavior:this._behaviour})}async scrollBottom(e){null==e||e.preventDefault(),await be(this.el,{behavior:this._behaviour})}async scrollLeft(e){null==e||e.preventDefault(),await Ee(this.el,{behavior:this._behaviour})}async scrollRight(e){null==e||e.preventDefault(),await Ee(this.el,{behavior:this._behaviour})}async up(e){null==e||e.preventDefault(),await async function(e,t,{behavior:s="smooth"}={}){"smooth"!=s||_e||await we(),e.scrollBy({top:-t,left:0,behavior:s})}(this.el,this._increment,{behavior:this._behaviour})}async down(e){null==e||e.preventDefault(),await async function(e,t,{behavior:s="smooth"}={}){"smooth"!=s||_e||await we(),e.scrollBy({top:t,left:0,behavior:s})}(this.el,this._increment,{behavior:this._behaviour})}async left(e){null==e||e.preventDefault(),await async function(e,t,{behavior:s="smooth"}={}){"smooth"!=s||_e||await we(),e.scrollBy({top:0,left:-t,behavior:s})}(this.el,this._increment,{behavior:this._behaviour})}async right(e){null==e||e.preventDefault(),await async function(e,t,{behavior:s="smooth"}={}){"smooth"!=s||_e||await we(),e.scrollBy({top:0,left:t,behavior:s})}(this.el,this._increment,{behavior:this._behaviour})}}Oe.values={behaviour:String,increment:Number};class ze extends _{connect(){requestAnimationFrame(()=>{pe(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()})}}ze.values={behavior:String,block:String,inline:String};class Be extends g{get _mode(){return this.hasModeValue?this.modeValue:"document"}get _scrollTarget(){let e;return e="document"==this._mode?window:Ce(this.el),e}async scroll(e){null==e||e.preventDefault(),this._scrollTarget&&await be(this._scrollTarget)}}Be.values={mode:String};class $e extends g{scroll(){let e=document.querySelector(this.selectorValue);e?pe(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}'`)}}$e.values={selector:String,behavior:String,block:String,inline:String};class qe extends g{get _mode(){return this.hasModeValue?this.modeValue:"document"}get _scrollTarget(){let e;return e="document"==this._mode?window:Ce(this.el),e}async scroll(e){null==e||e.preventDefault(),this._scrollTarget&&await fe(this._scrollTarget)}}qe.values={mode:String};class Fe extends g{constructor(...e){super(...e),this._timeout=null}connect(){requestAnimationFrame(()=>{this._timeout=setTimeout(()=>this.el.remove(),1e3*this.secondsValue)})}disconnect(){this._timeout&&clearTimeout(this._timeout)}}Fe.values={seconds:Number};class We extends g{constructor(...e){super(...e),this._magicElement=null}get _stuckClasses(){return this.stuckClass.split(" ")}get _defaultStuckClasses(){return["stuck"]}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(){this.createMagicElement(),new IntersectionObserver(e=>{e.forEach(e=>{e.target===this._magicElement&&(0===e.intersectionRatio?this._addStuckClasses():1===e.intersectionRatio&&this._removeStuckClasses())})},{threshold:[0,1]}).observe(this._magicElement)}_addStuckClasses(e=this.el){this.hasStuckClass?e.classList.add(...this._stuckClasses):e.classList.add(...this._defaultStuckClasses)}_removeStuckClasses(e=this.el){this.hasStuckClass?e.classList.remove(...this._stuckClasses):e.classList.remove(...this._defaultStuckClasses)}}We.classes=["stuck"],We.values={mode:String};const Re=d();class Pe extends g{get _eventName(){return`sync:${this._key}`}get _key(){if(this.hasKeyValue)return this.keyValue;throw new Error("Expected `keyValue` to be present")}get _value(){let e=this.el;return F(e)&&"checkbox"===e.type?e.checked:F(e)&&"radio"===e.type?e.checked?e.value:"":e.value}set _value(e){let t=this.el;F(t)&&"checkbox"===t.type?t.checked="true"===e.toString():F(t)&&"radio"===t.type?t.checked=t.value===e:F(t)||W(t)||P(t)?t.value=e.toString():t.innerHTML=e.toString()}initialize(){this._read=this._read.bind(this),this._emit=this._emit.bind(this)}connect(){Re.on(this._eventName,this._read),requestAnimationFrame(()=>{U(this.el)&&(this._emit(),this.el.addEventListener("input",this._emit))})}disconnect(){Re.off(this._eventName,this._read),U(this.el)&&this.el.removeEventListener("input",this._emit)}_emit(){Re.emit(this._eventName,{value:this._value,dispatcher:this.el})}_read(e){if(void 0===e)throw new Error("No payload received");let{dispatcher:t,value:s}=e;t!==this.el&&(this._value=s)}}Pe.values={key:String};class je extends g{constructor(...e){super(...e),this._lastIndex=null,this._reverse=!1}get _tableHead(){let e=this.el.tHead;if(null==e)throw new Error("Expected table to have a <thead> element.");return e}get _tableHeaders(){let e=this._tableHead.rows;if(0==e.length)throw new Error("Expected table to have a <thead> element with at least one row.");return Array.from(e[0].cells)}get _tableBody(){return this.el.tBodies[0]}get _tableRows(){return Array.from(this._tableBody.rows)}initialize(){this.sort=this.sort.bind(this)}connect(){requestAnimationFrame(()=>{this._tableHeaders.forEach(e=>e.addEventListener("click",this.sort)),this.hasStartSortValue&&this._sortByColumn(this.startSortValue)})}disconnect(){this._tableHeaders.forEach(e=>e.removeEventListener("click",this.sort))}sort(e){e.preventDefault();let t=this._indexOfHeaderCell(e.target);this._sortByColumn(t)}_indexOfHeaderCell(e){return this._tableHeaders.indexOf(e)}_sortByColumn(e){this._reverse=e===this._lastIndex&&!this._reverse;let t=document.createDocumentFragment();this._tableRows.sort((t,s)=>{var i,a;let r=Array.from(t.cells),n=Array.from(s.cells),l=(null==(i=r[e])?void 0:i.innerText)||"",o=(null==(a=n[e])?void 0:a.innerText)||"",h=l.localeCompare(o,"en",{sensitivity:"base",numeric:!0,caseFirst:"upper"});return t.dataset.sortTop||s.dataset.sortBottom?t.dataset.sortTop&&s.dataset.sortTop?h:-1:t.dataset.sortBottom||s.dataset.sortTop?t.dataset.sortBottom&&s.dataset.sortBottom?h:1:this._reverse?h>0?-1:1:h}).forEach(e=>t.appendChild(e)),this._tableBody.innerHTML="",this._tableBody.appendChild(t),this._lastIndex=e}}je.values={startSort:Number};class Ue extends g{get _truncated(){return!!this.hasTruncatedValue&&this.truncatedValue}set _truncated(e){this.truncatedValue=e}get _tableBody(){return this.el.tBodies[0]}get _tableRows(){return Array.from(this._tableBody.rows)}get _limit(){return this.hasLimitValue?this.limitValue:20}initialize(){this.truncate=this.truncate.bind(this),this.expand=this.expand.bind(this)}connect(){A(this,{childList:!0,element:this._tableBody}),requestAnimationFrame(()=>{this.truncate(),this.showMoreTarget.addEventListener("click",this.expand)})}truncate(e){null==e||e.preventDefault(),this._truncated=!0,this._tableRows.length>=this._limit?(this._tableRows.slice(this._limit).forEach(e=>{e!==this.showMoreTarget&&this._hideElement(e)}),this._showElement(this.showMoreTarget)):this._hideElement(this.showMoreTarget)}expand(e){this._truncated=!1,null==e||e.preventDefault(),this._tableRows.slice(this._limit).forEach(e=>{e!==this.showMoreTarget&&this._showElement(e)}),this._hideElement(this.showMoreTarget)}mutate(e){this._truncated&&this._reTruncate()}_showElement(e){e.style.display=""}_hideElement(e){e.style.display="none"}_reTruncate(){this._tableRows.slice(0,this._limit).forEach(e=>{e!==this.showMoreTarget&&this._showElement(e)}),this._tableRows.slice(this._limit).forEach(e=>{e!==this.showMoreTarget&&this._hideElement(e)}),this._showElement(this.showMoreTarget)}}Ue.targets=["showMore"],Ue.values={limit:Number,truncated:Boolean};class Je extends g{get _hideClasses(){return this.hideClass.split(" ")}get _defaultHideClasses(){return["hide"]}get _activeClasses(){return this.activeClass.split(" ")}get _defaultActiveClasses(){return["is-active"]}get _currentTab(){return this.hasCurrentTabValue?this.currentTabValue:0}get _equalize(){return!!this.hasEqualizeValue&&this.equalizeValue}initialize(){this.switchTabs=this.switchTabs.bind(this)}connect(){this.linkTargets.forEach(e=>e.addEventListener("click",this.switchTabs)),this._equalize&&this._setMinHeight(),this.currentTabValue=this._currentTab}disconnect(){this.linkTargets.forEach(e=>e.removeEventListener("click",this.switchTabs))}switchTabs(e){e.preventDefault(),this.currentTabValue=this.linkTargets.indexOf(e.currentTarget)}currentTabValueChanged(){let e=this._currentTab;e=this._clampIndex(e),this._selectTab(e)}_selectTab(e){e=this._clampIndex(e);let t=this.linkTargets,s=this.contentTargets,i=s[e],a=t[e],r=[...s.slice(0,e),...s.slice(e+1)],n=[...t.slice(0,e),...t.slice(e+1)];this._addActiveClasses(a),a.setAttribute("aria-selected","true"),this._addActiveClasses(i),this._removeHideClasses(i),n.forEach(e=>{e.removeAttribute("aria-selected"),this._removeActiveClasses(e)}),r.forEach(e=>{this._removeActiveClasses(e),this._addHideClasses(e)})}_clampIndex(e){return h(e,0,this.contentTargets.length-1)}_setMinHeight(){let e=0;this.contentTargets.forEach(t=>{let s=t.hasAttribute("tab-hidden");s&&this._removeHideClasses(t);let i=t.offsetHeight;i>e&&(e=i),s&&this._addHideClasses(t)}),this.contentTargets.forEach(t=>t.style.minHeight=e+"px")}_addHideClasses(e=this.el){e.setAttribute("tab-hidden","true"),this.hasHideClass?e.classList.add(...this._hideClasses):e.classList.add(...this._defaultHideClasses)}_removeHideClasses(e=this.el){e.removeAttribute("tab-hidden"),this.hasHideClass?e.classList.remove(...this._hideClasses):e.classList.remove(...this._defaultHideClasses)}_addActiveClasses(e=this.el){this.hasActiveClass?e.classList.add(...this._activeClasses):e.classList.add(...this._defaultActiveClasses)}_removeActiveClasses(e=this.el){this.hasActiveClass?e.classList.remove(...this._activeClasses):e.classList.remove(...this._defaultActiveClasses)}}Je.values={currentTab:Number,equalize:Boolean},Je.targets=["link","content"],Je.classes=["active","hide"];class Ye extends _{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()}}Ye.values={target:String,insert:String,immediate:Boolean};class Ke extends _{constructor(...e){super(...e),this._timeout=null,this._previousState={}}get _value(){if(this.hasValueValue)return this.valueValue;throw new Error("Expected `valueValue` to be present")}get _attribute(){if(this.hasAttributeValue)return this.attributeValue;throw new Error("Expected `attributeValue` to be present")}get _seconds(){if(this.hasSecondsValue)return 1e3*this.secondsValue;throw new Error("Expected `secondsValue` to be present")}initialize(){this.setState=this.setState.bind(this),this.removeState=this.removeState.bind(this)}connect(){this.setState(),this._timeout=setTimeout(this.removeState,this._seconds)}disconnect(){this.removeState(),this._timeout&&clearTimeout(this._timeout)}setState(){this._previousState[this._attribute]=l(this.el,this._attribute),o(this.el,this._attribute,this.valueValue)}removeState(){o(this.el,this._attribute,this._previousState[this._attribute])}}function Xe(e,t,s,i,a="temporary-state"){var r;e.dataset.controller&&null!=(r=e.dataset.controller)&&r.includes(a)||(e.dataset.controller=(e.dataset.controller||` ${a} `).trim().replaceAll(" "," ")),e[c(`${a}-attribute-value`)]=t,e[c(`${a}-seconds-value`)]=i.toString()}function Ge(e,t,s){Xe(e,"className",0,s)}Ke.values={attribute:String,seconds:Number,value:String};class Qe extends g{constructor(...e){super(...e),this._timeout=null}get _duration(){return s(this._timestamp)?i({start:this._timestamp,end:new Date}):i({start:new Date,end:this._timestamp})}get _nextUpdate(){let e=this._duration;return e.years&&e.years>0||e.months&&e.months>0||e.days&&e.days>0?null:e.hours&&e.hours>0?18e5:3e4}timestampValueChanged(){this._timestamp=r(1e3*this.timestampValue)}initialize(){this._update=this._update.bind(this)}connect(){if(!this.hasTimestampValue)throw new Error("Expected `timestampValue` to be present");this._update()}disconnect(){this._timeout&&window.clearTimeout(this._timeout)}_update(){this.el.innerHTML=n(this._timestamp,{addSuffix:!0,includeSeconds:!0}),this._nextUpdate&&(this._timeout=window.setTimeout(this._update,this._nextUpdate))}}Qe.values={timestamp:Number};class Ze extends g{constructor(...e){super(...e),this._timeoutHandle=null}initialize(){this._timeout=this._timeout.bind(this)}connect(){requestAnimationFrame(()=>{this._timeoutHandle=window.setTimeout(this._timeout,1e3*this.secondsValue)})}disconnect(){this._timeoutHandle&&window.clearTimeout(this._timeoutHandle)}_timeout(){this.dispatch(this.el,"timeout")}}Ze.values={seconds:Number};class et extends g{connect(){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:s,dispatchEvent:i,events:a,eventPrefix:r}=Object.assign({},V,t),n=a=>{const n=(null==t?void 0:t.element)||e.element;if(!(n.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}(n)&&s)&&(e.clickOutside&&e.clickOutside(a),i)){const t=w("click:outside",e,r),s=C(t,a,{controller:e});n.dispatchEvent(s)}},l=e.disconnect.bind(e);Object.assign(e,{disconnect(){null==a||a.forEach(e=>{window.removeEventListener(e,n,!1)}),l()}}),null==a||a.forEach(e=>{window.addEventListener(e,n,!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))}}et.targets=["toggle"],et.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};class tt extends g{get _collapsedClasses(){return this.hasCollapsedClass?this.collapsedClass.split(" "):this._defaultCollapsedClasses}get _defaultCollapsedClasses(){return["collapsed"]}get _activeClasses(){return this.hasActiveClass?this.activeClass.split(" "):this._defaultActiveClasses}get _defaultActiveClasses(){return["active"]}initialize(){this._nodeClicked=this._nodeClicked.bind(this)}connect(){this._setup(),A(this,{subtree:!0,childList:!0})}disconnect(){this._teardown()}_setup(){this._setupNode(this.el)}_setupNode(e){const t=e=>{let t=e.parentElement;t&&(this._nodeActive(t)||this._hideNode(t),t.removeEventListener("click",this._nodeClicked),t.addEventListener("click",this._nodeClicked))};"UL"!==e.tagName&&"OL"!==e.tagName||t(e),e.querySelectorAll("ul, ol").forEach(e=>t(e))}_teardown(){this.el.querySelectorAll("ul, ol, li").forEach(e=>this._teardownNode(e))}_teardownNode(e){[e,...Array.from(e.querySelectorAll("ul, ol, li"))].forEach(e=>{e.removeEventListener("click",this._nodeClicked),this._removeActiveClasses(e),this._removeCollapsedClasses(e)})}_nodeClicked(e){e&&e.stopImmediatePropagation();let t=e.target;t&&this._hasNested(t)&&(this._nodeActive(t)?this._hideNode(t):this._showNode(t))}_nodeActive(e){return this._activeClasses.every(t=>e.classList.contains(t))}_showNode(e){this._removeCollapsedClasses(e),this._addActiveClasses(e)}_hideNode(e){this._removeActiveClasses(e),this._addCollapsedClasses(e)}_hasNested(e){return e.querySelectorAll("ul, ol").length>0}mutate(e){for(const t of e)"childList"===t.type&&(Array.from(t.addedNodes||[]).forEach(e=>this._setupNode(e)),Array.from(t.removedNodes||[]).forEach(e=>this._teardownNode(e)))}_addCollapsedClasses(e=this.el){this.hasCollapsedClass?e.classList.add(...this._collapsedClasses):e.classList.add(...this._defaultCollapsedClasses)}_removeCollapsedClasses(e=this.el){this.hasCollapsedClass?e.classList.remove(...this._collapsedClasses):e.classList.remove(...this._defaultCollapsedClasses)}_addActiveClasses(e=this.el){this.hasActiveClass?e.classList.add(...this._activeClasses):e.classList.add(...this._defaultActiveClasses)}_removeActiveClasses(e=this.el){this.hasActiveClass?e.classList.remove(...this._activeClasses):e.classList.remove(...this._defaultActiveClasses)}}function st(e){return"TURBO-FRAME"==e.nodeName}tt.classes=["active","collapsed"];class it extends g{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(st(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")}}it.values={frameId:String,src:String,loadingMessage:String};class at extends g{constructor(...e){super(...e),this._timeoutHandle=null}get _poll(){return!!this.hasPollValue&&this.pollValue}initialize(){this.refresh=this.refresh.bind(this)}connect(){let e=this.el;if(!st(e))throw new Error("Expected controller to be mounted on a <turbo-frame> element.");if(e.src)throw new Error("The provided <turbo-frame> 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}}at.values={interval:Number,poll:Boolean};class rt extends g{initialize(){this._handleVisibility=this._handleVisibility.bind(this)}connect(){window.addEventListener("focus",this._handleVisibility),window.addEventListener("blur",this._handleVisibility),document.addEventListener("visibilitychange",this._handleVisibility),requestAnimationFrame(()=>{this._handleVisibility()})}disconnect(){window.removeEventListener("focus",this._handleVisibility),window.removeEventListener("blur",this._handleVisibility),document.removeEventListener("visibilitychange",this._handleVisibility)}appear(){this.dispatch(this.el,"user-focus:active")}away(){this.dispatch(this.el,"user-focus:away")}_handleVisibility(){this._documentIsActive()?this.appear():this.away()}_documentIsActive(){return"visible"==document.visibilityState&&document.hasFocus()}}class nt extends g{get _maxMessage(){return this.hasMaxMessageValue?this.maxMessageValue:`Value must be less than ${this.maxValue}`}get _minMessage(){return this.hasMinMessageValue?this.minMessageValue:`Value must be greater than ${this.minValue}`}get _warningHideClasses(){return this.warningHideClass.split(" ")}get _defaultWarningHideClasses(){return["hide"]}get _inputWarningClasses(){return this.inputWarningClass.split(" ")}get _defaultInputWarningClasses(){return[""]}initialize(){this._check=this._check.bind(this)}connect(){this._addWarningHideClasses(this.warningTarget),this.inputTarget.addEventListener("input",this._check),this._check()}disconnect(){this.inputTarget.removeEventListener("input",this._check)}_check(){this.hasMinValue&&Number.parseFloat(this.inputTarget.value)<this.minValue?(this._removeWarningHideClasses(this.warningTarget),this._addInputWarningClasses(this.inputTarget),this.warningTarget.innerText=this._minMessage):this.hasMaxValue&&Number.parseFloat(this.inputTarget.value)>this.maxValue?(this._removeWarningHideClasses(this.warningTarget),this._addInputWarningClasses(this.inputTarget),this.warningTarget.innerText=this._maxMessage):(this._addWarningHideClasses(this.warningTarget),this._removeInputWarningClasses(this.inputTarget),this.warningTarget.innerText="")}_addWarningHideClasses(e=this.el){this.hasWarningHideClass?e.classList.add(...this._warningHideClasses):e.classList.add(...this._defaultWarningHideClasses)}_removeWarningHideClasses(e=this.el){this.hasWarningHideClass?e.classList.remove(...this._warningHideClasses):e.classList.remove(...this._defaultWarningHideClasses)}_addInputWarningClasses(e=this.el){this.hasInputWarningClass?e.classList.add(...this._inputWarningClasses):e.classList.add(...this._defaultInputWarningClasses)}_removeInputWarningClasses(e=this.el){this.hasInputWarningClass?e.classList.remove(...this._inputWarningClasses):e.classList.remove(...this._defaultInputWarningClasses)}}nt.classes=["inputWarning","warningHide"],nt.targets=["input","warning"],nt.values={max:Number,min:Number,minMessage:String,maxMessage:String};class lt extends g{get _errorClasses(){return this.errorClass.split(" ")}get _defaultErrorClasses(){return[]}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._removeErrorClasses(this.outputTarget):this._addErrorClasses(this.outputTarget))}_addErrorClasses(e=this.el){this.hasErrorClass?e.classList.add(...this._errorClasses):e.classList.add(...this._defaultErrorClasses)}_removeErrorClasses(e=this.el){this.hasErrorClass?e.classList.remove(...this._errorClasses):e.classList.remove(...this._defaultErrorClasses)}_isValidCount(e){let t=0,s=99999;return this.hasMinValue&&(t=this.minValue),this.hasMaxValue&&(s=this.maxValue),e>=t&&e<=s}}lt.targets=["input","output"],lt.values={min:Number,max:Number},lt.classes=["error"];export{v as AnchorSpyController,f as AsyncBlockController,b as AutoSubmitFormController,I as AutosizeController,N as BackLinkController,g as BaseController,M as CharCountController,O as CheckboxSelectAllController,z as ClipboardController,B as ClockController,J as ConfirmController,Y as ConfirmNavigationController,K as CountdownController,X as DebugController,G as DetectDirtyController,Z as DetectDirtyFormController,te as DisableInputsController,se as DisableWithController,ie as DismissableController,re as DurationController,ne as ElementSaveController,le as EmptyDomController,oe as EnableInputsController,_ as EphemeralController,he as FallbackImageController,ce as FormRcController,ue as FormSaveController,de as IntersectionController,me as IntervalController,ge as LazyBlockController,ye as LightboxImageController,Te as LimitedSelectionCheckboxesController,p as LoadBlockController,Ve as MediaPlayerController,Le as NavigateFormErrorsController,ke as NestedFormController,Se as PasswordConfirmController,xe as PasswordPeekController,Ae as PollBlockController,De as PrefetchController,He as PresenceController,Ie as RemoteFormController,ae as RemoveController,Me as ResponsiveIframeBodyController,Ne as ResponsiveIframeWrapperController,Oe as ScrollContainerController,ze as ScrollIntoFocusController,Be as ScrollToBottomController,$e as ScrollToController,qe as ScrollToTopController,Fe as SelfDestructController,We as StickyController,Pe as SyncInputsController,je as TableSortController,Ue as TableTruncateController,Je as TabsController,Ye as TeleportController,Ke as TemporaryStateController,Qe as TimeDistanceController,Ze as TimeoutController,et as ToggleClassController,tt as TreeViewController,it as TurboFrameRCController,at as TurboFrameRefreshController,rt as UserFocusController,nt as ValueWarnController,lt as WordCountController,Ge as applyTemporaryClass,Xe as applyTemporaryState,Q as isDirty,ee as isFormDirty};
|
|
2
|
-
//# sourceMappingURL=stimulus-library.modern.js.map
|