diff --git a/dist/index.d.ts b/dist/index.d.ts index a23c072c..3e52ff53 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,3 +1,4 @@ +export { BaseController } from "./utilities/base_controller"; export { AnchorSpyController } from "./controllers/anchor_spy_controller"; export { AppearanceController } from "./controllers/utility/appearance_controller"; export { AsyncBlockController } from "./controllers/async_block_controller"; diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map index de222363..16029e9d 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":"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"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAG3D,OAAO,EAAC,mBAAmB,EAAC,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAC,oBAAoB,EAAC,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAC,oBAAoB,EAAC,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAC,wBAAwB,EAAC,MAAM,iDAAiD,CAAC;AACzF,OAAO,EAAC,kBAAkB,EAAC,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAC,mBAAmB,EAAC,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAC,2BAA2B,EAAC,MAAM,oDAAoD,CAAC;AAC/F,OAAO,EAAC,mBAAmB,EAAC,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAC,iBAAiB,EAAC,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAC,2BAA2B,EAAC,MAAM,6CAA6C,CAAC;AACxF,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAC,qBAAqB,EAAC,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAC,yBAAyB,EAAC,MAAM,kDAAkD,CAAC;AAC3F,OAAO,EAAC,uBAAuB,EAAC,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAC,qBAAqB,EAAC,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAC,qBAAqB,EAAC,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAC,qBAAqB,EAAC,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAC,kBAAkB,EAAC,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAC,sBAAsB,EAAC,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAC,uBAAuB,EAAC,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAC,gBAAgB,EAAC,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAC,kBAAkB,EAAC,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAC,sBAAsB,EAAC,MAAM,+CAA+C,CAAC;AACrF,OAAO,EAAC,kBAAkB,EAAC,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAC,mBAAmB,EAAC,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAC,uBAAuB,EAAC,MAAM,+CAA+C,CAAC;AACtF,OAAO,EAAC,oCAAoC,EAAC,MAAM,6DAA6D,CAAC;AACjH,OAAO,EAAC,qBAAqB,EAAC,MAAM,6CAA6C,CAAC;AAClF,OAAO,EAAC,oBAAoB,EAAC,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAC,yBAAyB,EAAC,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAC,sBAAsB,EAAC,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAC,oBAAoB,EAAC,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAC,8BAA8B,EAAE,iCAAiC,EAAC,MAAM,4CAA4C,CAAC;AAC7H,OAAO,EAAC,yBAAyB,EAAC,MAAM,mDAAmD,CAAC;AAC5F,OAAO,EAAC,wBAAwB,EAAC,MAAM,kDAAkD,CAAC;AAC1F,OAAO,EAAC,kBAAkB,EAAC,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAC,qBAAqB,EAAC,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAC,sBAAsB,EAAC,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAC,gBAAgB,EAAC,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAC,mBAAmB,EAAC,MAAM,4CAA4C,CAAC;AAC/E,OAAO,EAAC,uBAAuB,EAAC,MAAM,gDAAgD,CAAC;AACvF,OAAO,EAAC,kBAAkB,EAAC,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAC,iBAAiB,EAAC,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAC,qBAAqB,EAAC,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAC,sBAAsB,EAAC,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAC,2BAA2B,EAAC,MAAM,8CAA8C,CAAC;AACzF,OAAO,EAAC,mBAAmB,EAAC,MAAM,2CAA2C,CAAC"} \ No newline at end of file diff --git a/dist/stimulus-library.js b/dist/stimulus-library.js index a560c480..5cd485b8 100644 --- a/dist/stimulus-library.js +++ b/dist/stimulus-library.js @@ -1,2 +1,2 @@ -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"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 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);this.logEvent(t,r,e),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()}},n.logEvent=function(e,t,n){if(this.application.debug){var i=console;i.groupCollapsed("%c"+this.identifier+" %c"+e+"%c","color: #3B82F6","color: #0be000","color: unset"),i.log({element:n}),i.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._checkAnchor=this._checkAnchor.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._checkAnchor(),window.addEventListener("hashchange",e._checkAnchor)})},n.disconnect=function(){window.removeEventListener("hashchange",this._checkAnchor)},n.write=function(e){null==e||e.preventDefault(),this._anchor=this._key},n._checkAnchor=function(){this.dispatch(this.el,this._key===this._anchor?"anchor-spy:active":"anchor-spy:inactive")},d(t,[{key:"_key",get:function(){return this.keyValue.replaceAll("#","")}},{key:"_anchor",get:function(){return window.location.hash.substr(1)},set:function(e){window.location.hash=e}}]),t}(b);y.values={key:String};var _=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(){var e=this;window.addEventListener("focus",this._handleVisibility),window.addEventListener("blur",this._handleVisibility),document.addEventListener("visibilitychange",this._handleVisibility),requestAnimationFrame(function(){e._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.submit=this.submit.bind(this)},n.connect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.addEventListener("change",e.submit)})},n.disconnect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.removeEventListener("change",e.submit)})},n.submit=function(){this.dispatch(this.el,"submit")},t}(b);const k=(e,t)=>{const n=e[t];return"function"==typeof n?n:(...e)=>{}},C=(e,t,n)=>{let i=e;return!0===n?i=`${t.identifier}:${e}`:"string"==typeof n&&(i=`${n}:${e}`),i},T=(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},S=(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,k(e,"appear").call(e,t),n){const n=C("appear",e,i),s=T(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s):e.isVisible&&(t=>{if(e.isVisible=!1,k(e,"disappear").call(e,t),n){const n=C("disappear",e,i),s=T(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]},L={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},x={debug:!1,logger:console};class A{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:x.debug,this.logger=null!==(r=null==t?void 0:t.logger)&&void 0!==r?r:x.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 D extends A{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=()=>{k(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{k(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 I extends A{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=>{k(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,t={})=>{const n=new I(e,t);return[n.observe,n.unobserve]},N=e=>{const t=t=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:t};k(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 H=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;N(this),requestAnimationFrame(function(){e._handler();var t=e.el;t.style.resize="none",t.style.boxSizing="border-box",t.addEventListener("input",e._handler),t.addEventListener("focus",e._handler)})},n.disconnect=function(){this.el.removeEventListener("input",this._handler),this.el.removeEventListener("focus",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),z=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(){var e=this;requestAnimationFrame(function(){e.inputTarget.addEventListener("input",e._updateCharCount),e._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);z.targets=["input","output"],z.values={min:Number,max:Number},z.classes=["error"];var F=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&&t0&&(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);se.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var oe=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){S(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);oe.values={threshold:String};var ae=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._intervalHandle=null,t}p(t,e);var n=t.prototype;return n.initialize=function(){this._interval=this._interval.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._intervalHandle=window.setInterval(e._interval,1e3*e.secondsValue)})},n.disconnect=function(){this._intervalHandle&&window.clearInterval(this._intervalHandle)},n._interval=function(){this.dispatch(this.el,"interval:action")},t}(b);ae.values={seconds:Number};var le,ce=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=S(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),ue=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&&!he)return Promise.resolve(function(){try{return Promise.resolve(Promise.resolve().then(function(){return o(require("smoothscroll-polyfill"))})).then(function(e){le||(le=!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)}},he="scrollBehavior"in document.documentElement.style;function de(e){if(!e)return null;var t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:de(e.parentElement)||document.body}var fe=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(),ue(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,ue(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);fe.values={src:String,srcSet:String,sizes:String},fe.classes=["modal","image"];var pe=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);pe.targets=["input","error"],pe.values={max:Number,message:String};var me=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){},n.connect=function(){},n.disconnect=function(){},n.play=function(e){try{return null==e||e.preventDefault(),Promise.resolve(this.mediaTarget.play()).then(function(){})}catch(e){return Promise.reject(e)}},n.pause=function(e){null==e||e.preventDefault(),this.mediaTarget.pause()},n.restart=function(e){null==e||e.preventDefault(),this.mediaTarget.currentTime=0},n.seek=function(e){null==e||e.preventDefault(),this.mediaTarget.currentTime+=5},t}(b);me.targets=["media"];var ve=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);ve.targets=["target","template"],ve.values={insertMode:String,wrapperClass:String};var ge=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);ge.targets=["password"],ge.classes=["error"];var be=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);be.targets=["password"];var ye=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);ye.targets=[],ye.values={selector:String};var _e=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),Ee=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&&(N(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);Ee.debounces=["postUpdate"];var we=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),ke=function(e){function t(){return e.apply(this,arguments)||this}return p(t,e),t.prototype.connect=function(){var e=this;requestAnimationFrame(function(){ue(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}(we);ke.values={behavior:String,block:String,inline:String};var Ce=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:de(this.el))&&ue(t,{behavior:"smooth",block:"end"}).catch(function(){return t.scrollIntoView(!1)})},t}(b);Ce.values={mode:String};var Te=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?ue(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);Te.values={selector:String,behavior:String,block:String,inline:String};var Ve=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:de(this.el))&&ue(t,{behavior:"smooth",block:"start"}).catch(function(){return t.scrollIntoView(!1)})},t}(b);Ve.values={mode:String};var Se=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);Se.values={seconds:Number};var Le=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);Le.classes=["stuck"],Le.values={mode:String};var xe=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._lastIndex=null,t._reverse=!1,t}p(t,e);var n=t.prototype;return n.initialize=function(){this.sort=this.sort.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._tableHeaders.forEach(function(t){return t.addEventListener("click",e.sort)}),e.hasStartSortValue&&e._sortByColumn(e.startSortValue)})},n.disconnect=function(){var e=this;this._tableHeaders.forEach(function(t){return t.removeEventListener("click",e.sort)})},n.sort=function(e){e.preventDefault();var t=this._indexOfHeaderCell(e.target);this._sortByColumn(t)},n._indexOfHeaderCell=function(e){return this._tableHeaders.indexOf(e)},n._sortByColumn=function(e){var t=this;this._reverse=e===this._lastIndex&&!this._reverse;var n=document.createDocumentFragment();this._tableRows.sort(function(n,i){var r,s,o=Array.from(n.cells),a=Array.from(i.cells),l=(null==(r=o[e])?void 0:r.innerText)||"",c=(null==(s=a[e])?void 0:s.innerText)||"",u=l.localeCompare(c,"en",{sensitivity:"base",numeric:!0,caseFirst:"upper"});return n.dataset.sortTop||i.dataset.sortBottom?n.dataset.sortTop&&i.dataset.sortTop?u:-1:n.dataset.sortBottom||i.dataset.sortTop?n.dataset.sortBottom&&i.dataset.sortBottom?u:1:t._reverse?u>0?-1:1:u}).forEach(function(e){return n.appendChild(e)}),this._tableBody.innerHTML="",this._tableBody.appendChild(n),this._lastIndex=e},d(t,[{key:"_tableHead",get:function(){var e=this.el.tHead;if(null==e)throw new Error("Expected table to have a element.");return e}},{key:"_tableHeaders",get:function(){var e=this._tableHead.rows;if(0==e.length)throw new Error("Expected table to have a element with at least one row.");return Array.from(e[0].cells)}},{key:"_tableBody",get:function(){return this.el.tBodies[0]}},{key:"_tableRows",get:function(){return Array.from(this._tableBody.rows)}}]),t}(b);xe.values={startSort:Number};var Ae=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this.truncate=this.truncate.bind(this),this.expand=this.expand.bind(this)},n.connect=function(){var e=this;M(this,{childList:!0,element:this._tableBody}),requestAnimationFrame(function(){e.truncate(),e.showMoreTarget.addEventListener("click",e.expand)})},n.truncate=function(e){var t=this;null==e||e.preventDefault(),this._truncated=!0,this._tableRows.length>=this._limit?(this._tableRows.slice(this._limit).forEach(function(e){e!==t.showMoreTarget&&t._hideElement(e)}),this._showElement(this.showMoreTarget)):this._hideElement(this.showMoreTarget)},n.expand=function(e){var t=this;this._truncated=!1,null==e||e.preventDefault(),this._tableRows.slice(this._limit).forEach(function(e){e!==t.showMoreTarget&&t._showElement(e)}),this._hideElement(this.showMoreTarget)},n.mutate=function(e){this._truncated&&this._reTruncate()},n._showElement=function(e){e.style.display=""},n._hideElement=function(e){e.style.display="none"},n._reTruncate=function(){var e=this;this._tableRows.slice(0,this._limit).forEach(function(t){t!==e.showMoreTarget&&e._showElement(t)}),this._tableRows.slice(this._limit).forEach(function(t){t!==e.showMoreTarget&&e._hideElement(t)}),this._showElement(this.showMoreTarget)},d(t,[{key:"_truncated",get:function(){return!!this.hasTruncatedValue&&this.truncatedValue},set:function(e){this.truncatedValue=e}},{key:"_tableBody",get:function(){return this.el.tBodies[0]}},{key:"_tableRows",get:function(){return Array.from(this._tableBody.rows)}},{key:"_limit",get:function(){return this.hasLimitValue?this.limitValue:20}}]),t}(b);Ae.targets=["showMore"],Ae.values={limit:Number,truncated:Boolean};var De=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}(we);De.values={target:String,insert:String,immediate:Boolean};var Ie=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._timeout=this._timeout.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._timeoutHandle=window.setTimeout(e._timeout,1e3*e.secondsValue)})},n.disconnect=function(){this._timeoutHandle&&window.clearTimeout(this._timeoutHandle)},n._timeout=function(){this.dispatch(this.el,"timeout")},t}(b);Ie.values={seconds:Number};var Me=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 D(this,t)})(),this.hasClickAwayValue&&this.clickAwayValue&&((e,t={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},L,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=C("click:outside",e,s),n=T(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 Ne(e){return"TURBO-FRAME"==e.nodeName}Me.targets=["toggle"],Me.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var Oe=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(Ne(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(B(e))return e.href;throw new Error("No link given to drive frame to")},t}(b);Oe.values={frameId:String,src:String,loadingMessage:String};var He=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(!Ne(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);He.values={interval:Number,poll:Boolean};var ze=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);ze.targets=["input","output"],ze.values={min:Number,max:Number},ze.classes=["error"],exports.AnchorSpyController=y,exports.AppearanceController=_,exports.AsyncBlockController=E,exports.AutoSubmitFormController=w,exports.AutosizeController=H,exports.CharCountController=z,exports.CheckboxSelectAllController=F,exports.ClipboardController=R,exports.ConfirmController=U,exports.ConfirmNavigationController=J,exports.DebugController=Y,exports.DetectDirtyController=G,exports.DetectDirtyFormController=K,exports.DisableInputsController=Q,exports.DisableWithController=X,exports.DismissableController=Z,exports.ElementSaveController=ee,exports.EmptyDomController=te,exports.EnableInputsController=ne,exports.FallbackImageController=ie,exports.FormRcController=re,exports.FormSaveController=se,exports.IntersectionController=oe,exports.IntervalController=ae,exports.LazyBlockController=ce,exports.LightboxImageController=fe,exports.LimitedSelectionCheckboxesController=pe,exports.MediaPlayerController=me,exports.NestedFormController=ve,exports.PasswordConfirmController=ge,exports.PasswordPeekController=be,exports.RemoteFormController=ye,exports.ResponsiveIframeBodyController=Ee,exports.ResponsiveIframeWrapperController=_e,exports.ScrollIntoFocusController=ke,exports.ScrollToBottomController=Ce,exports.ScrollToController=Te,exports.ScrollToTopController=Ve,exports.SelfDestructController=Se,exports.StickyController=Le,exports.TableSortController=xe,exports.TableTruncateController=Ae,exports.TeleportController=De,exports.TimeoutController=Ie,exports.ToggleClassController=Me,exports.TurboFrameRCController=Oe,exports.TurboFrameRefreshController=He,exports.WordCountController=ze; +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"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 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.metaValue=function(e){var t=document.head.querySelector('meta[name="'+e+'"]');return(null==t?void 0:t.getAttribute("content"))||null},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);this.logEvent(t,r,e),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()}},n.logEvent=function(e,t,n){if(this.application.debug){var i=console;i.groupCollapsed("%c"+this.identifier+" %c"+e+"%c","color: #3B82F6","color: #0be000","color: unset"),i.log({element:n}),i.groupEnd()}},d(t,[{key:"el",get:function(){return this.element}},{key:"isTurboPreview",get:function(){return document.documentElement.hasAttribute("data-turbo-preview")||document.documentElement.hasAttribute("data-turbolinks-preview")}},{key:"isTurbolinksPreview",get:function(){return this.isTurboPreview}},{key:"csrfToken",get:function(){return this.metaValue("csrf-token")}}]),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._checkAnchor=this._checkAnchor.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._checkAnchor(),window.addEventListener("hashchange",e._checkAnchor)})},n.disconnect=function(){window.removeEventListener("hashchange",this._checkAnchor)},n.write=function(e){null==e||e.preventDefault(),this._anchor=this._key},n._checkAnchor=function(){this.dispatch(this.el,this._key===this._anchor?"anchor-spy:active":"anchor-spy:inactive")},d(t,[{key:"_key",get:function(){return this.keyValue.replaceAll("#","")}},{key:"_anchor",get:function(){return window.location.hash.substr(1)},set:function(e){window.location.hash=e}}]),t}(b);y.values={key:String};var _=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(){var e=this;window.addEventListener("focus",this._handleVisibility),window.addEventListener("blur",this._handleVisibility),document.addEventListener("visibilitychange",this._handleVisibility),requestAnimationFrame(function(){e._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.submit=this.submit.bind(this)},n.connect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.addEventListener("change",e.submit)})},n.disconnect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.removeEventListener("change",e.submit)})},n.submit=function(){this.dispatch(this.el,"submit")},t}(b);const k=(e,t)=>{const n=e[t];return"function"==typeof n?n:(...e)=>{}},C=(e,t,n)=>{let i=e;return!0===n?i=`${t.identifier}:${e}`:"string"==typeof n&&(i=`${n}:${e}`),i},T=(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},S=(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,k(e,"appear").call(e,t),n){const n=C("appear",e,i),s=T(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s):e.isVisible&&(t=>{if(e.isVisible=!1,k(e,"disappear").call(e,t),n){const n=C("disappear",e,i),s=T(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]},L={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},x={debug:!1,logger:console};class A{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:x.debug,this.logger=null!==(r=null==t?void 0:t.logger)&&void 0!==r?r:x.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 D extends A{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=()=>{k(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{k(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 I extends A{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=>{k(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,t={})=>{const n=new I(e,t);return[n.observe,n.unobserve]},N=e=>{const t=t=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:t};k(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 H=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;N(this),requestAnimationFrame(function(){e._handler();var t=e.el;t.style.resize="none",t.style.boxSizing="border-box",t.addEventListener("input",e._handler),t.addEventListener("focus",e._handler)})},n.disconnect=function(){this.el.removeEventListener("input",this._handler),this.el.removeEventListener("focus",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),z=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(){var e=this;requestAnimationFrame(function(){e.inputTarget.addEventListener("input",e._updateCharCount),e._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);z.targets=["input","output"],z.values={min:Number,max:Number},z.classes=["error"];var F=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&&t0&&(P(r)&&"checkbox"==r.type?n[this._formIdentifier][r.name]=r.checked:P(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);se.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var oe=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.connect=function(){S(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);oe.values={threshold:String};var ae=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._intervalHandle=null,t}p(t,e);var n=t.prototype;return n.initialize=function(){this._interval=this._interval.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._intervalHandle=window.setInterval(e._interval,1e3*e.secondsValue)})},n.disconnect=function(){this._intervalHandle&&window.clearInterval(this._intervalHandle)},n._interval=function(){this.dispatch(this.el,"interval:action")},t}(b);ae.values={seconds:Number};var le,ce=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=S(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),ue=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&&!he)return Promise.resolve(function(){try{return Promise.resolve(Promise.resolve().then(function(){return o(require("smoothscroll-polyfill"))})).then(function(e){le||(le=!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)}},he="scrollBehavior"in document.documentElement.style;function de(e){if(!e)return null;var t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:de(e.parentElement)||document.body}var fe=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(),ue(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,ue(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);fe.values={src:String,srcSet:String,sizes:String},fe.classes=["modal","image"];var pe=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);pe.targets=["input","error"],pe.values={max:Number,message:String};var me=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){},n.connect=function(){},n.disconnect=function(){},n.play=function(e){try{return null==e||e.preventDefault(),Promise.resolve(this.mediaTarget.play()).then(function(){})}catch(e){return Promise.reject(e)}},n.pause=function(e){null==e||e.preventDefault(),this.mediaTarget.pause()},n.restart=function(e){null==e||e.preventDefault(),this.mediaTarget.currentTime=0},n.seek=function(e){null==e||e.preventDefault(),this.mediaTarget.currentTime+=5},t}(b);me.targets=["media"];var ve=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);ve.targets=["target","template"],ve.values={insertMode:String,wrapperClass:String};var ge=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);ge.targets=["password"],ge.classes=["error"];var be=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);be.targets=["password"];var ye=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);ye.targets=[],ye.values={selector:String};var _e=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),Ee=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&&(N(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);Ee.debounces=["postUpdate"];var we=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),ke=function(e){function t(){return e.apply(this,arguments)||this}return p(t,e),t.prototype.connect=function(){var e=this;requestAnimationFrame(function(){ue(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}(we);ke.values={behavior:String,block:String,inline:String};var Ce=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:de(this.el))&&ue(t,{behavior:"smooth",block:"end"}).catch(function(){return t.scrollIntoView(!1)})},t}(b);Ce.values={mode:String};var Te=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?ue(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);Te.values={selector:String,behavior:String,block:String,inline:String};var Ve=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:de(this.el))&&ue(t,{behavior:"smooth",block:"start"}).catch(function(){return t.scrollIntoView(!1)})},t}(b);Ve.values={mode:String};var Se=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);Se.values={seconds:Number};var Le=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);Le.classes=["stuck"],Le.values={mode:String};var xe=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._lastIndex=null,t._reverse=!1,t}p(t,e);var n=t.prototype;return n.initialize=function(){this.sort=this.sort.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._tableHeaders.forEach(function(t){return t.addEventListener("click",e.sort)}),e.hasStartSortValue&&e._sortByColumn(e.startSortValue)})},n.disconnect=function(){var e=this;this._tableHeaders.forEach(function(t){return t.removeEventListener("click",e.sort)})},n.sort=function(e){e.preventDefault();var t=this._indexOfHeaderCell(e.target);this._sortByColumn(t)},n._indexOfHeaderCell=function(e){return this._tableHeaders.indexOf(e)},n._sortByColumn=function(e){var t=this;this._reverse=e===this._lastIndex&&!this._reverse;var n=document.createDocumentFragment();this._tableRows.sort(function(n,i){var r,s,o=Array.from(n.cells),a=Array.from(i.cells),l=(null==(r=o[e])?void 0:r.innerText)||"",c=(null==(s=a[e])?void 0:s.innerText)||"",u=l.localeCompare(c,"en",{sensitivity:"base",numeric:!0,caseFirst:"upper"});return n.dataset.sortTop||i.dataset.sortBottom?n.dataset.sortTop&&i.dataset.sortTop?u:-1:n.dataset.sortBottom||i.dataset.sortTop?n.dataset.sortBottom&&i.dataset.sortBottom?u:1:t._reverse?u>0?-1:1:u}).forEach(function(e){return n.appendChild(e)}),this._tableBody.innerHTML="",this._tableBody.appendChild(n),this._lastIndex=e},d(t,[{key:"_tableHead",get:function(){var e=this.el.tHead;if(null==e)throw new Error("Expected table to have a element.");return e}},{key:"_tableHeaders",get:function(){var e=this._tableHead.rows;if(0==e.length)throw new Error("Expected table to have a element with at least one row.");return Array.from(e[0].cells)}},{key:"_tableBody",get:function(){return this.el.tBodies[0]}},{key:"_tableRows",get:function(){return Array.from(this._tableBody.rows)}}]),t}(b);xe.values={startSort:Number};var Ae=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.initialize=function(){this.truncate=this.truncate.bind(this),this.expand=this.expand.bind(this)},n.connect=function(){var e=this;M(this,{childList:!0,element:this._tableBody}),requestAnimationFrame(function(){e.truncate(),e.showMoreTarget.addEventListener("click",e.expand)})},n.truncate=function(e){var t=this;null==e||e.preventDefault(),this._truncated=!0,this._tableRows.length>=this._limit?(this._tableRows.slice(this._limit).forEach(function(e){e!==t.showMoreTarget&&t._hideElement(e)}),this._showElement(this.showMoreTarget)):this._hideElement(this.showMoreTarget)},n.expand=function(e){var t=this;this._truncated=!1,null==e||e.preventDefault(),this._tableRows.slice(this._limit).forEach(function(e){e!==t.showMoreTarget&&t._showElement(e)}),this._hideElement(this.showMoreTarget)},n.mutate=function(e){this._truncated&&this._reTruncate()},n._showElement=function(e){e.style.display=""},n._hideElement=function(e){e.style.display="none"},n._reTruncate=function(){var e=this;this._tableRows.slice(0,this._limit).forEach(function(t){t!==e.showMoreTarget&&e._showElement(t)}),this._tableRows.slice(this._limit).forEach(function(t){t!==e.showMoreTarget&&e._hideElement(t)}),this._showElement(this.showMoreTarget)},d(t,[{key:"_truncated",get:function(){return!!this.hasTruncatedValue&&this.truncatedValue},set:function(e){this.truncatedValue=e}},{key:"_tableBody",get:function(){return this.el.tBodies[0]}},{key:"_tableRows",get:function(){return Array.from(this._tableBody.rows)}},{key:"_limit",get:function(){return this.hasLimitValue?this.limitValue:20}}]),t}(b);Ae.targets=["showMore"],Ae.values={limit:Number,truncated:Boolean};var De=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}(we);De.values={target:String,insert:String,immediate:Boolean};var Ie=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._timeout=this._timeout.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._timeoutHandle=window.setTimeout(e._timeout,1e3*e.secondsValue)})},n.disconnect=function(){this._timeoutHandle&&window.clearTimeout(this._timeoutHandle)},n._timeout=function(){this.dispatch(this.el,"timeout")},t}(b);Ie.values={seconds:Number};var Me=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 D(this,t)})(),this.hasClickAwayValue&&this.clickAwayValue&&((e,t={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},L,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=C("click:outside",e,s),n=T(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 Ne(e){return"TURBO-FRAME"==e.nodeName}Me.targets=["toggle"],Me.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var Oe=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(Ne(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(B(e))return e.href;throw new Error("No link given to drive frame to")},t}(b);Oe.values={frameId:String,src:String,loadingMessage:String};var He=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(!Ne(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);He.values={interval:Number,poll:Boolean};var ze=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);ze.targets=["input","output"],ze.values={min:Number,max:Number},ze.classes=["error"],exports.AnchorSpyController=y,exports.AppearanceController=_,exports.AsyncBlockController=E,exports.AutoSubmitFormController=w,exports.AutosizeController=H,exports.BaseController=b,exports.CharCountController=z,exports.CheckboxSelectAllController=F,exports.ClipboardController=R,exports.ConfirmController=U,exports.ConfirmNavigationController=J,exports.DebugController=Y,exports.DetectDirtyController=G,exports.DetectDirtyFormController=K,exports.DisableInputsController=Q,exports.DisableWithController=X,exports.DismissableController=Z,exports.ElementSaveController=ee,exports.EmptyDomController=te,exports.EnableInputsController=ne,exports.FallbackImageController=ie,exports.FormRcController=re,exports.FormSaveController=se,exports.IntersectionController=oe,exports.IntervalController=ae,exports.LazyBlockController=ce,exports.LightboxImageController=fe,exports.LimitedSelectionCheckboxesController=pe,exports.MediaPlayerController=me,exports.NestedFormController=ve,exports.PasswordConfirmController=ge,exports.PasswordPeekController=be,exports.RemoteFormController=ye,exports.ResponsiveIframeBodyController=Ee,exports.ResponsiveIframeWrapperController=_e,exports.ScrollIntoFocusController=ke,exports.ScrollToBottomController=Ce,exports.ScrollToController=Te,exports.ScrollToTopController=Ve,exports.SelfDestructController=Se,exports.StickyController=Le,exports.TableSortController=xe,exports.TableTruncateController=Ae,exports.TeleportController=De,exports.TimeoutController=Ie,exports.ToggleClassController=Me,exports.TurboFrameRCController=Oe,exports.TurboFrameRefreshController=He,exports.WordCountController=ze; //# sourceMappingURL=stimulus-library.js.map diff --git a/dist/stimulus-library.js.map b/dist/stimulus-library.js.map index 9f09945c..867e486a 100644 --- a/dist/stimulus-library.js.map +++ b/dist/stimulus-library.js.map @@ -1 +1 @@ -{"version":3,"file":"stimulus-library.js","sources":["../src/utilities/base_controller.ts","../src/controllers/anchor_spy_controller.ts","../src/controllers/utility/appearance_controller.ts","../src/controllers/async_block_controller.ts","../src/controllers/forms/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/controllers/forms/autosize_controller.ts","../src/controllers/forms/char_count_controller.ts","../src/controllers/forms/checkbox_select_all_controller.ts","../src/controllers/clipboard_controller.ts","../src/utilities/elements.ts","../src/controllers/confirm_controller.ts","../src/controllers/confirm_navigation_controller.ts","../src/controllers/debug_controller.ts","../src/controllers/forms/detect_dirty_controller.ts","../src/controllers/forms/detect_dirty_form_controller.ts","../src/controllers/forms/disable_inputs_controller.ts","../src/controllers/disable_with_controller.ts","../src/controllers/dismissable_controller.ts","../src/controllers/element_save_controller.ts","../src/controllers/empty_dom_controller.ts","../src/controllers/forms/enable_inputs_controller.ts","../src/controllers/media/fallback_image_controller.ts","../src/controllers/forms/form_rc_controller.ts","../src/controllers/forms/form_save_controller.ts","../src/controllers/utility/intersection_controller.ts","../src/controllers/utility/interval_controller.ts","../src/controllers/lazy_block_controller.ts","../src/utilities/scroll.ts","../src/controllers/media/lightbox_image_controller.ts","../src/controllers/forms/limited_selection_checkboxes_controller.ts","../src/controllers/media/media_player_controller.ts","../src/controllers/forms/nested_form_controller.ts","../src/controllers/forms/password_confirm_controller.ts","../src/controllers/forms/password_peek_controller.ts","../src/controllers/forms/remote_form_controller.ts","../src/controllers/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/controllers/scroll/scroll_into_focus_controller.ts","../src/controllers/scroll/scroll_to_bottom_controller.ts","../src/controllers/scroll/scroll_to_controller.ts","../src/controllers/scroll/scroll_to_top_controller.ts","../src/controllers/self_destruct_controller.ts","../src/controllers/sticky_controller.ts","../src/controllers/tables/table_sort_controller.ts","../src/controllers/tables/table_truncate_controller.ts","../src/controllers/teleport_controller.ts","../src/controllers/utility/timeout_controller.ts","../src/controllers/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/controllers/turbo_frame_rc_controller.ts","../src/controllers/turbo_frame_refresh_controller.ts","../src/controllers/forms/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 this.logEvent(eventName, event, element);\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 logEvent(eventName: string, event: CustomEvent, element: HTMLElement) {\n // @ts-ignore\n if (!this.application.debug) {\n return;\n }\n let logger = console;\n logger.groupCollapsed(`%c${this.identifier} %c${eventName}%c`, \"color: #3B82F6\", \"color: #0be000\", \"color: unset\");\n logger.log({element});\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 \"logEvent\":\n case \"dispatch\":\n case \"data\":\n case \"valueDescriptorMap\":\n case \"mutate\":\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 if (/^.*?Classes$/.test(prop)) {\n return false;\n }\n\n return true;\n}\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class AnchorSpyController extends BaseController {\r\n static values = {key: String};\r\n\r\n declare readonly keyValue: string;\r\n\r\n get _key(): string {\r\n return this.keyValue.replaceAll('#', '');\r\n }\r\n\r\n get _anchor(): string {\r\n return window.location.hash.substr(1);\r\n }\r\n\r\n set _anchor(value: string) {\r\n window.location.hash = value;\r\n }\r\n\r\n initialize() {\r\n this._checkAnchor = this._checkAnchor.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._checkAnchor();\r\n window.addEventListener(\"hashchange\", this._checkAnchor);\r\n });\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"hashchange\", this._checkAnchor);\r\n }\r\n\r\n write(event?: Event) {\r\n event?.preventDefault();\r\n this._anchor = this._key;\r\n }\r\n\r\n private _checkAnchor() {\r\n if (this._key === this._anchor) {\r\n this.dispatch(this.el, \"anchor-spy:active\");\r\n } else {\r\n this.dispatch(this.el, \"anchor-spy:inactive\");\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 requestAnimationFrame(() => {\r\n this._handleVisibility();\r\n });\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 private _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n private _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/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 \"../../utilities/base_controller\";\n\nexport class AutoSubmitFormController extends BaseController {\n\n initialize() {\n this.submit = this.submit.bind(this);\n }\n\n connect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.submit));\n }\n\n disconnect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.submit));\n }\n\n private submit() {\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 \"../../utilities/base_controller\";\n\nexport class AutosizeController extends BaseController {\n\n initialize() {\n this._handler = this._handler.bind(this);\n }\n\n connect() {\n useWindowResize(this);\n requestAnimationFrame(() => {\n this._handler();\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 });\n }\n\n disconnect() {\n this.el.removeEventListener(\"input\", this._handler);\n this.el.removeEventListener(\"focus\", 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 \"../../utilities/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 requestAnimationFrame(() => {\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\n this._updateCharCount();\n });\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 '../../utilities/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 \"../utilities/base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"source\", \"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 '../utilities/base_controller';\nimport {isHTMLAnchorElement, isHTMLFormElement} 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 disconnect() {\n let element = this.el;\n if (isHTMLFormElement(element)) {\n element.removeEventListener(\"submit\", this.confirm);\n } else if (isHTMLAnchorElement(element)) {\n element.removeEventListener(\"click\", this.confirm);\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 \"../utilities/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.allowSubmit = this.allowSubmit.bind(this);\n this.confirmNavigation = this.confirmNavigation.bind(this);\n this.confirmTurboNavigation = this.confirmTurboNavigation.bind(this);\n }\n\n connect() {\n window.onbeforeunload = () => this._message;\n window.addEventListener(\"popstate\", this.confirmNavigation);\n window.addEventListener(\"submit\", this.allowSubmit);\n window.addEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\n window.addEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\n }\n\n disconnect() {\n window.removeEventListener(\"popstate\", this.confirmNavigation);\n window.onbeforeunload = null;\n window.removeEventListener(\"submit\", this.allowSubmit);\n window.removeEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\n window.removeEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\n }\n\n allowSubmit(_event: Event) {\n window.removeEventListener(\"popstate\", this.confirmNavigation);\n window.onbeforeunload = null;\n }\n\n confirmNavigation(_event: PopStateEvent) {\n return false;\n }\n\n confirmTurboNavigation(event: Event) {\n if (!confirm(this._message)) {\n event.preventDefault();\n }\n }\n\n}\n","import {BaseController} from \"../utilities/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 \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyController extends BaseController {\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._restoreElementFromLoadValue();\r\n }\r\n\r\n private _getElementValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(): boolean {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkDirty() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (this._isElementDirty()) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(): boolean {\r\n return this._getElementValue() !== this._getElementLoadValue();\r\n }\r\n\r\n private _restoreElementFromLoadValue() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (!this._elementHasCachedLoadValue() && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyFormController extends BaseController {\r\n\r\n get _formElements(): Array {\r\n return Array.from(this.el.querySelectorAll('input, select, textarea'));\r\n }\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._formElements.forEach(element => this._restoreElementFromLoadValue(element));\r\n }\r\n\r\n private _getElementValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (this._isElementDirty(element)) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return this._getElementValue(element) !== this._getElementLoadValue(element);\r\n }\r\n\r\n private _cacheElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (!this._elementHasCachedLoadValue(element) && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n\r\n private _restoreElementFromLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n this._formElements.forEach(el => this._cacheElementLoadValue(el));\r\n }\r\n\r\n private _checkDirty(): void {\r\n this._formElements.forEach(el => this._checkElementDirty(el));\r\n if (this._formElements.some(el => isDirty(el))) {\r\n this.el.setAttribute(\"data-dirty\", \"true\");\r\n } else {\r\n this.el.removeAttribute(\"data-dirty\");\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/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 '../utilities/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 \"../utilities/base_controller\";\n\nexport class DismissableController extends BaseController {\n\n dismiss() {\n this.el.remove();\n }\n\n}\n","import {BaseController} from '../utilities/base_controller';\nimport _get from \"lodash-es/get\";\nimport _set from \"lodash-es/set\";\n\nexport class ElementSaveController extends BaseController {\n\n static targets = [\n \"element\",\n ];\n static values = {\n id: String,\n attributes: String,\n restoreOnLoad: Boolean,\n };\n declare readonly hasElementTarget: boolean;\n declare readonly elementTarget: HTMLElement;\n declare readonly elementTargets: HTMLElement[];\n declare readonly idValue: string;\n declare readonly attributesValue: string;\n declare readonly hasIdValue: boolean;\n declare readonly restoreOnLoadValue: boolean;\n declare readonly hasRestoreOnLoadValue: boolean;\n\n get _id() {\n if (this.hasIdValue) {\n return this.idValue;\n }\n let elementID = this.el.id;\n\n if (elementID !== \"\") {\n return elementID;\n } else {\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. `);\n }\n }\n\n get _uniqueIdentifier() {\n const url = location.href;\n return `${url} ${this._id}`;\n }\n\n get _restoreOnLoad() {\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\n }\n\n get _element(): HTMLElement {\n return this.hasElementTarget ? this.elementTarget : this.el;\n }\n\n connect() {\n requestAnimationFrame(() => {\n if (this._restoreOnLoad) {\n this.restore();\n }\n });\n }\n\n clear(event?: Event) {\n if (event) {\n event.preventDefault();\n }\n localStorage.removeItem(this._uniqueIdentifier);\n this.dispatch(this._element, `element-save:cleared`);\n }\n\n save(event?: Event) {\n if (event) {\n event.preventDefault();\n }\n let element = this._element;\n let attributes = this.attributesValue.split(\" \");\n let data: { [idx: string]: any } = {};\n attributes.forEach((attr: string) => data[attr] = _get(element, attr));\n localStorage.setItem(this._uniqueIdentifier, JSON.stringify(data));\n this.dispatch(element, `element-save:save:success`);\n }\n\n restore(event?: Event) {\n if (event) {\n event.preventDefault();\n }\n let element = this._element;\n if (localStorage.getItem(this._uniqueIdentifier)) {\n const savedData = JSON.parse(localStorage.getItem(this._uniqueIdentifier)!); // get and parse the saved data from localStorage\n Object.keys(savedData).forEach((attr: string) => {\n _set(element as HTMLElement, attr, savedData[attr]);\n });\n this.dispatch(element, `element-save:restore:success`);\n } else {\n this.dispatch(element, `element-save:restore:empty`);\n }\n }\n\n}\n","import {useMutation} from \"stimulus-use\";\nimport {BaseController} from \"../utilities/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 \"../../utilities/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 \"../../utilities/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 '../../utilities/base_controller';\r\n\r\nexport class FormRcController extends BaseController {\r\n\r\n static targets = [\"form\"];\r\n\r\n declare readonly formTarget: HTMLFormElement;\r\n\r\n submit(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"submit\");\r\n this.formTarget.submit();\r\n }\r\n\r\n reset(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"reset\");\r\n this.formTarget.reset();\r\n }\r\n\r\n}","import {BaseController} from '../../utilities/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 \"../../utilities/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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class IntervalController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _intervalHandle: null | number = null;\r\n\r\n initialize() {\r\n this._interval = this._interval.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._intervalHandle = window.setInterval(this._interval, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._intervalHandle) {\r\n window.clearInterval(this._intervalHandle);\r\n }\r\n }\r\n\r\n _interval() {\r\n this.dispatch(this.el, \"interval:action\");\r\n }\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","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 \"../../utilities/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 \"../../utilities/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 \"../../utilities/base_controller\";\r\n\r\nexport class MediaPlayerController extends BaseController {\r\n\r\n static targets = [\"media\"];\r\n\r\n declare readonly mediaTarget: HTMLMediaElement;\r\n\r\n initialize() {\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n disconnect() {\r\n }\r\n\r\n async play(event?: Event) {\r\n event?.preventDefault();\r\n await this.mediaTarget.play();\r\n }\r\n\r\n pause(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.pause();\r\n }\r\n\r\n restart(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime = 0;\r\n }\r\n\r\n seek(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime += 5;\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 private _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 \"../../utilities/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 \"../../utilities/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 \"../../utilities/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 \"../utilities/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 \"../../utilities/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 \"../../utilities/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 \"../../utilities/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 \"../utilities/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 \"../utilities/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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableSortController extends BaseController {\r\n\r\n static values = {startSort: Number};\r\n\r\n declare readonly startSortValue: number;\r\n declare readonly hasStartSortValue: boolean;\r\n _lastIndex: number | null = null;\r\n _reverse: boolean = false;\r\n\r\n get _tableHead(): HTMLTableSectionElement {\r\n let head = (this.el as HTMLTableElement).tHead;\r\n if (head == null) {\r\n throw new Error('Expected table to have a element.');\r\n }\r\n return head;\r\n }\r\n\r\n get _tableHeaders(): HTMLTableHeaderCellElement[] {\r\n let rows = this._tableHead.rows;\r\n if (rows.length == 0) {\r\n throw new Error('Expected table to have a element with at least one row.');\r\n }\r\n return Array.from(rows[0].cells);\r\n }\r\n\r\n get _tableBody() {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n initialize() {\r\n this.sort = this.sort.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._tableHeaders.forEach(cell => cell.addEventListener(\"click\", this.sort));\r\n if (this.hasStartSortValue) {\r\n this._sortByColumn(this.startSortValue);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n this._tableHeaders.forEach(cell => cell.removeEventListener(\"click\", this.sort));\r\n }\r\n\r\n sort(event: Event) {\r\n event.preventDefault();\r\n let headerCell = event.target! as HTMLTableHeaderCellElement;\r\n let headerCellIndex = this._indexOfHeaderCell(headerCell);\r\n this._sortByColumn(headerCellIndex);\r\n }\r\n\r\n private _indexOfHeaderCell(cell: HTMLTableHeaderCellElement) {\r\n return this._tableHeaders.indexOf(cell);\r\n }\r\n\r\n private _sortByColumn(index: number) {\r\n this._reverse = index === this._lastIndex && !this._reverse;\r\n let frag = document.createDocumentFragment();\r\n let rows = this._tableRows;\r\n\r\n let newRows = rows.sort((row, otherRow) => {\r\n let cells = Array.from(row.cells);\r\n let otherCells = Array.from(otherRow.cells);\r\n\r\n // TODO: Handle colspans?\r\n let x = cells[index]?.innerText || \"\";\r\n let y = otherCells[index]?.innerText || \"\";\r\n\r\n let sortVal = x.localeCompare(y, \"en\", {sensitivity: \"base\", numeric: true, caseFirst: \"upper\"});\r\n\r\n if (row.dataset.sortTop || otherRow.dataset.sortBottom) {\r\n if (row.dataset.sortTop && otherRow.dataset.sortTop) {\r\n return sortVal;\r\n }\r\n return -1;\r\n }\r\n if (row.dataset.sortBottom || otherRow.dataset.sortTop) {\r\n if (row.dataset.sortBottom && otherRow.dataset.sortBottom) {\r\n return sortVal;\r\n }\r\n return 1;\r\n }\r\n\r\n if (this._reverse) {\r\n return sortVal > 0 ? -1 : 1;\r\n }\r\n return sortVal;\r\n });\r\n\r\n newRows.forEach(row => frag.appendChild(row));\r\n\r\n this._tableBody.innerHTML = \"\";\r\n this._tableBody.appendChild(frag);\r\n this._lastIndex = index;\r\n }\r\n\r\n}","import {useMutation} from \"stimulus-use\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableTruncateController extends BaseController {\r\n\r\n static targets = [\"showMore\"];\r\n static values = {\r\n limit: Number,\r\n truncated: Boolean,\r\n };\r\n\r\n declare readonly showMoreTarget: HTMLElement;\r\n declare limitValue: number;\r\n declare readonly hasLimitValue: boolean;\r\n declare truncatedValue: boolean;\r\n declare readonly hasTruncatedValue: boolean;\r\n\r\n get _truncated(): boolean {\r\n return this.hasTruncatedValue ? this.truncatedValue : false;\r\n }\r\n\r\n set _truncated(value) {\r\n this.truncatedValue = value;\r\n }\r\n\r\n get _tableBody(): HTMLTableSectionElement {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n get _limit(): number {\r\n return this.hasLimitValue ? this.limitValue : 20;\r\n }\r\n\r\n initialize() {\r\n this.truncate = this.truncate.bind(this);\r\n this.expand = this.expand.bind(this);\r\n }\r\n\r\n connect() {\r\n useMutation(this, {childList: true, element: this._tableBody});\r\n\r\n requestAnimationFrame(() => {\r\n this.truncate();\r\n this.showMoreTarget.addEventListener(\"click\", this.expand);\r\n });\r\n }\r\n\r\n truncate(event?: Event) {\r\n event?.preventDefault();\r\n this._truncated = true;\r\n if (this._tableRows.length >= this._limit) {\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\r\n } else {\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n }\r\n\r\n expand(event?: Event) {\r\n this._truncated = false;\r\n event?.preventDefault();\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n\r\n mutate(entries: MutationRecord[]) {\r\n if (this._truncated) {\r\n this._reTruncate();\r\n }\r\n }\r\n\r\n private _showElement(el: HTMLElement): void {\r\n el.style.display = \"\";\r\n }\r\n\r\n private _hideElement(el: HTMLElement): void {\r\n el.style.display = \"none\";\r\n }\r\n\r\n private _reTruncate() {\r\n this._tableRows.slice(0, this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TimeoutController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _timeoutHandle: null | number = null;\r\n\r\n initialize() {\r\n this._timeout = this._timeout.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._timeoutHandle = window.setTimeout(this._timeout, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n window.clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n _timeout() {\r\n this.dispatch(this.el, \"timeout\");\r\n }\r\n\r\n}","import {useClickOutside, useHover} from \"stimulus-use\";\nimport {BaseController} from \"../utilities/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 \"../utilities/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 \"../utilities/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 \"../../utilities/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 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"],"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","this","logEvent","dispatchEvent","functionName","application","debug","logger","console","groupCollapsed","identifier","groupEnd","Controller","AnchorSpyController","initialize","_checkAnchor","bind","connect","requestAnimationFrame","window","addEventListener","disconnect","removeEventListener","write","preventDefault","_anchor","_key","el","keyValue","replaceAll","location","hash","substr","value","key","String","AppearanceController","_handleVisibility","document","appear","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","errorMessage","selector","AutoSubmitFormController","submit","forEach","_this2","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","useMutation","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","_toggle","_refresh","hasSelectAllTarget","selectAllTarget","checkboxTargets","checkbox","checked","checkboxesCount","checkboxesCheckedCount","_checked","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","message","ConfirmNavigationController","allowSubmit","confirmNavigation","confirmTurboNavigation","onbeforeunload","_event","_messageValue","DebugController","testTargets","DetectDirtyController","_checkDirty","_cacheLoadValues","restore","_restoreElementFromLoadValue","_getElementValue","_getElementLoadValue","getAttribute","_cacheAttrName","defaultChecked","Array","from","option","defaultSelected","_elementHasCachedLoadValue","hasAttribute","_isElementDirty","setAttribute","removeAttribute","cacheValue","defaultValue","DetectDirtyFormController","_formElements","_checkElementDirty","_cacheElementLoadValue","_this3","some","DisableInputsController","toggle","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","href","_id","hasRestoreOnLoadValue","restoreOnLoadValue","hasElementTarget","elementTarget","restoreOnLoad","EmptyDomController","childList","checkEmpty","mutate","_children","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","emptyClasses","hasNotEmptyClass","notEmptyClasses","emptyClass","notEmptyClass","hasScopeSelectorValue","scopeSelectorValue","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormRcController","formTarget","reset","FormSaveController","_clear","_clearOnSubmit","_formIdentifier","_formData","_formID","elements","hasClearOnSubmitValue","clearOnSubmitValue","clearOnSubmit","IntersectionController","threshold","_threshold","disappear","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","IntervalController","_interval","_intervalHandle","setInterval","secondsValue","clearInterval","seconds","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","_src","srcset","_srcSet","sizes","_sizes","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","_modalClassName","showModal","hasSrcValue","srcValue","hasSrcSetValue","srcSetValue","hasSizesValue","sizesValue","hasModalClass","modalClass","hasImageClass","imageClass","srcSet","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","MediaPlayerController","play","mediaTarget","pause","restart","currentTime","seek","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","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","_selector","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","constructor","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","RegExp","substringIdentifierValueRegex","camelCase","action","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","StickyController","createMagicElement","_magicElement","_mode","intersectionRatio","hasStuckClass","stuckClass","TableSortController","sort","_tableHeaders","cell","hasStartSortValue","_sortByColumn","startSortValue","headerCellIndex","_indexOfHeaderCell","index","_reverse","_lastIndex","frag","createDocumentFragment","_tableRows","row","otherRow","cells","otherCells","x","y","sortVal","localeCompare","sensitivity","numeric","caseFirst","sortTop","sortBottom","_this4","_tableBody","head","tHead","rows","_tableHead","tBodies","startSort","TableTruncateController","truncate","expand","showMoreTarget","_truncated","_limit","_hideElement","_showElement","_reTruncate","hasTruncatedValue","truncatedValue","hasLimitValue","limitValue","limit","truncated","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","TimeoutController","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","_this5","toggled","classValue","klass","isTurboFrame","class","clickAway","initial","TurboFrameRCController","frameSrc","_getFrame","_getSrc","_setSrc","setSrc","frame","hasLoadingMessageValue","loadingMessageValue","getElementById","frameIdValue","frameId","loadingMessage","TurboFrameRefreshController","refresh","_poll","intervalValue","hasPollValue","pollValue","interval","poll","WordCountController","updateWordCount","wordCount","matches","match"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stimulus-library.js","sources":["../src/utilities/base_controller.ts","../src/controllers/anchor_spy_controller.ts","../src/controllers/utility/appearance_controller.ts","../src/controllers/async_block_controller.ts","../src/controllers/forms/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/controllers/forms/autosize_controller.ts","../src/controllers/forms/char_count_controller.ts","../src/controllers/forms/checkbox_select_all_controller.ts","../src/controllers/clipboard_controller.ts","../src/utilities/elements.ts","../src/controllers/confirm_controller.ts","../src/controllers/confirm_navigation_controller.ts","../src/controllers/debug_controller.ts","../src/controllers/forms/detect_dirty_controller.ts","../src/controllers/forms/detect_dirty_form_controller.ts","../src/controllers/forms/disable_inputs_controller.ts","../src/controllers/disable_with_controller.ts","../src/controllers/dismissable_controller.ts","../src/controllers/element_save_controller.ts","../src/controllers/empty_dom_controller.ts","../src/controllers/forms/enable_inputs_controller.ts","../src/controllers/media/fallback_image_controller.ts","../src/controllers/forms/form_rc_controller.ts","../src/controllers/forms/form_save_controller.ts","../src/controllers/utility/intersection_controller.ts","../src/controllers/utility/interval_controller.ts","../src/controllers/lazy_block_controller.ts","../src/utilities/scroll.ts","../src/controllers/media/lightbox_image_controller.ts","../src/controllers/forms/limited_selection_checkboxes_controller.ts","../src/controllers/media/media_player_controller.ts","../src/controllers/forms/nested_form_controller.ts","../src/controllers/forms/password_confirm_controller.ts","../src/controllers/forms/password_peek_controller.ts","../src/controllers/forms/remote_form_controller.ts","../src/controllers/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/controllers/scroll/scroll_into_focus_controller.ts","../src/controllers/scroll/scroll_to_bottom_controller.ts","../src/controllers/scroll/scroll_to_controller.ts","../src/controllers/scroll/scroll_to_top_controller.ts","../src/controllers/self_destruct_controller.ts","../src/controllers/sticky_controller.ts","../src/controllers/tables/table_sort_controller.ts","../src/controllers/tables/table_truncate_controller.ts","../src/controllers/teleport_controller.ts","../src/controllers/utility/timeout_controller.ts","../src/controllers/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/controllers/turbo_frame_rc_controller.ts","../src/controllers/turbo_frame_refresh_controller.ts","../src/controllers/forms/word_count_controller.ts"],"sourcesContent":["import {Context, Controller} from \"stimulus\";\r\n\r\nexport class BaseController extends Controller {\r\n\r\n constructor(context: Context) {\r\n super(context);\r\n return new Proxy(this, {\r\n get: (obj, prop) => {\r\n let returnVal = Reflect.get(obj, prop);\r\n let self = this;\r\n if (logProperty(prop.toString())) {\r\n if (typeof returnVal == \"function\") {\r\n return new Proxy(returnVal, {\r\n apply(target: any, thisArg: any, argArray?: any): any {\r\n self.log(prop.toString(), {\r\n args: argArray,\r\n });\r\n return Reflect.apply(target, thisArg, argArray);\r\n },\r\n });\r\n } else {\r\n this.log(prop.toString());\r\n }\r\n }\r\n return returnVal;\r\n },\r\n });\r\n }\r\n\r\n get el(): HTMLElement {\r\n return this.element as HTMLElement;\r\n }\r\n\r\n get isTurboPreview(): boolean {\r\n return document.documentElement.hasAttribute('data-turbo-preview') || document.documentElement.hasAttribute('data-turbolinks-preview');\r\n }\r\n\r\n get isTurbolinksPreview(): boolean {\r\n return this.isTurboPreview;\r\n }\r\n\r\n get csrfToken(): string | null {\r\n return this.metaValue('csrf-token');\r\n }\r\n\r\n metaValue(name: string): string | null {\r\n const element = document.head.querySelector(`meta[name=\"${name}\"]`);\r\n return element?.getAttribute('content') || null;\r\n }\r\n\r\n dispatch(element: HTMLElement, eventName: string, options: CustomEventInit = {}) {\r\n let mergedOptions = Object.assign({}, {bubbles: true, cancelable: true, detail: {target: element}}, options);\r\n if (!!mergedOptions.detail.target) {\r\n mergedOptions.detail.target = element;\r\n }\r\n let event = new CustomEvent(eventName, mergedOptions);\r\n this.logEvent(eventName, event, element);\r\n element.dispatchEvent(event);\r\n }\r\n\r\n log(functionName: string, args: {} = {}): void {\r\n // @ts-ignore\r\n if (!this.application.debug) {\r\n return;\r\n }\r\n let logger = console;\r\n logger.groupCollapsed(`%c${this.identifier} %c#${functionName}`, \"color: #3B82F6\", \"color: unset\");\r\n logger.log({\r\n element: this.element,\r\n ...args,\r\n });\r\n logger.groupEnd();\r\n }\r\n\r\n logEvent(eventName: string, event: CustomEvent, element: HTMLElement) {\r\n // @ts-ignore\r\n if (!this.application.debug) {\r\n return;\r\n }\r\n let logger = console;\r\n logger.groupCollapsed(`%c${this.identifier} %c${eventName}%c`, \"color: #3B82F6\", \"color: #0be000\", \"color: unset\");\r\n logger.log({element});\r\n logger.groupEnd();\r\n }\r\n\r\n}\r\n\r\nfunction logProperty(prop: string): boolean {\r\n switch (prop) {\r\n case \"application\":\r\n case \"el\":\r\n case \"element\":\r\n case \"constructor\":\r\n case \"initialize\":\r\n case \"log\":\r\n case \"logEvent\":\r\n case \"dispatch\":\r\n case \"data\":\r\n case \"valueDescriptorMap\":\r\n case \"mutate\":\r\n case \"identifier\":\r\n return false;\r\n }\r\n\r\n if (/^_.*?$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Target(s)?$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Value$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?ValueChanged$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Class$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Classes$/.test(prop)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class AnchorSpyController extends BaseController {\r\n static values = {key: String};\r\n\r\n declare readonly keyValue: string;\r\n\r\n get _key(): string {\r\n return this.keyValue.replaceAll('#', '');\r\n }\r\n\r\n get _anchor(): string {\r\n return window.location.hash.substr(1);\r\n }\r\n\r\n set _anchor(value: string) {\r\n window.location.hash = value;\r\n }\r\n\r\n initialize() {\r\n this._checkAnchor = this._checkAnchor.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._checkAnchor();\r\n window.addEventListener(\"hashchange\", this._checkAnchor);\r\n });\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"hashchange\", this._checkAnchor);\r\n }\r\n\r\n write(event?: Event) {\r\n event?.preventDefault();\r\n this._anchor = this._key;\r\n }\r\n\r\n private _checkAnchor() {\r\n if (this._key === this._anchor) {\r\n this.dispatch(this.el, \"anchor-spy:active\");\r\n } else {\r\n this.dispatch(this.el, \"anchor-spy:inactive\");\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 requestAnimationFrame(() => {\r\n this._handleVisibility();\r\n });\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 private _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n private _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class AsyncBlockController extends BaseController {\r\n static targets = [\"replace\"];\r\n static values = {endpoint: String, errorMessage: String, selector: String};\r\n\r\n declare readonly replaceTarget: HTMLElement;\r\n declare readonly hasReplaceTarget: boolean;\r\n declare readonly endpointValue: string;\r\n\r\n declare readonly hasSelectorValue: boolean;\r\n declare readonly selectorValue: string;\r\n\r\n declare readonly hasErrorMessageValue: boolean;\r\n declare readonly errorMessageValue: string;\r\n\r\n get _errorMessage(): string {\r\n return this.hasErrorMessageValue ? this.errorMessageValue : \"This content failed to load\";\r\n }\r\n\r\n // This is a simple controller to load a block of content when the page loads.\r\n // It should be used to give a quick initial response before calling out to an\r\n // an AJAX endpoint to do some expensive work.\r\n connect() {\r\n this.loadContent();\r\n }\r\n\r\n loadContent() {\r\n let self = this;\r\n let el = this.hasReplaceTarget ? this.replaceTarget : this.el;\r\n fetch(this.endpointValue)\r\n .then((response) => response.text())\r\n .then((html) => {\r\n let newEl = document.createElement(\"div\");\r\n newEl.innerHTML = html;\r\n if (this.hasSelectorValue) {\r\n let selectedContent = newEl.querySelectorAll(this.selectorValue);\r\n el.replaceWith(...selectedContent);\r\n } else {\r\n el.replaceWith(...newEl.children);\r\n }\r\n // Trigger event to show block has loaded\r\n self.dispatch(el, \"ajax:success\");\r\n })\r\n .catch(err => {\r\n el.replaceWith(this._errorMessage);\r\n self.dispatch(el, \"ajax:error\");\r\n })\r\n .finally(() => {\r\n self.dispatch(el, \"ajax:complete\");\r\n });\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class AutoSubmitFormController extends BaseController {\r\n\r\n initialize() {\r\n this.submit = this.submit.bind(this);\r\n }\r\n\r\n connect() {\r\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.submit));\r\n }\r\n\r\n disconnect() {\r\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.submit));\r\n }\r\n\r\n private submit() {\r\n // Trigger synthetic \"submit\" event on form\r\n this.dispatch((this.el), \"submit\");\r\n }\r\n}\r\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\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class AutosizeController extends BaseController {\r\n\r\n initialize() {\r\n this._handler = this._handler.bind(this);\r\n }\r\n\r\n connect() {\r\n useWindowResize(this);\r\n requestAnimationFrame(() => {\r\n this._handler();\r\n let target = this.el as HTMLTextAreaElement;\r\n target.style.resize = \"none\";\r\n target.style.boxSizing = \"border-box\";\r\n target.addEventListener(\"input\", this._handler);\r\n target.addEventListener(\"focus\", this._handler);\r\n });\r\n }\r\n\r\n disconnect() {\r\n this.el.removeEventListener(\"input\", this._handler);\r\n this.el.removeEventListener(\"focus\", this._handler);\r\n }\r\n\r\n windowResize() {\r\n this._handler();\r\n }\r\n\r\n private _handler() {\r\n this.autosize(this.el as HTMLTextAreaElement);\r\n };\r\n\r\n private autosize(element: HTMLTextAreaElement) {\r\n let offset = element.offsetHeight - element.clientHeight;\r\n element.style.height = \"auto\";\r\n element.style.height = element.scrollHeight + offset + \"px\";\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class CharCountController extends BaseController {\r\n\r\n static targets = [\"input\", \"output\"];\r\n static values = {min: Number, max: Number};\r\n static classes = [\"error\"];\r\n\r\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\r\n declare readonly outputTarget: HTMLElement;\r\n declare minValue: number;\r\n declare hasMinValue: boolean;\r\n declare maxValue: number;\r\n declare hasMaxValue: boolean;\r\n declare errorClass: string;\r\n declare hasErrorClass: boolean;\r\n\r\n initialize() {\r\n this._updateCharCount = this._updateCharCount.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\r\n this._updateCharCount();\r\n });\r\n }\r\n\r\n disconnect() {\r\n this.inputTarget.removeEventListener(\"input\", this._updateCharCount);\r\n }\r\n\r\n private _updateCharCount() {\r\n let charCount = this.inputTarget.value.length;\r\n this.outputTarget.innerText = charCount.toString();\r\n if (this.hasErrorClass) {\r\n if (this._isValidCount(charCount)) {\r\n this.outputTarget.classList.remove(this.errorClass);\r\n } else {\r\n this.outputTarget.classList.add(this.errorClass);\r\n }\r\n }\r\n }\r\n\r\n private _isValidCount(count: number) {\r\n let min = 0;\r\n let max = 99999;\r\n\r\n if (this.hasMinValue) {\r\n min = this.minValue;\r\n }\r\n\r\n if (this.hasMaxValue) {\r\n max = this.maxValue;\r\n }\r\n\r\n return count >= min && count <= max;\r\n }\r\n\r\n}\r\n","import {BaseController} from '../../utilities/base_controller';\r\n\r\nexport class CheckboxSelectAllController extends BaseController {\r\n static targets = ['selectAll', 'checkbox'];\r\n\r\n declare readonly hasSelectAllTarget: boolean;\r\n declare readonly selectAllTarget: HTMLInputElement;\r\n declare readonly checkboxTargets: HTMLInputElement[];\r\n\r\n private get _checked() {\r\n return this.checkboxTargets.filter(checkbox => checkbox.checked);\r\n }\r\n\r\n private get _unchecked() {\r\n return this.checkboxTargets.filter(checkbox => !checkbox.checked);\r\n }\r\n\r\n initialize() {\r\n this._toggle = this._toggle.bind(this);\r\n this._refresh = this._refresh.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n if (!this.hasSelectAllTarget) {\r\n return;\r\n }\r\n\r\n this.selectAllTarget.addEventListener('change', this._toggle);\r\n this.checkboxTargets.forEach(checkbox => checkbox.addEventListener('change', this._refresh));\r\n this._refresh();\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (!this.hasSelectAllTarget) {\r\n return;\r\n }\r\n\r\n this.selectAllTarget.removeEventListener('change', this._toggle);\r\n this.checkboxTargets.forEach((checkbox) => checkbox.removeEventListener('change', this._refresh));\r\n }\r\n\r\n private _toggle(event: Event) {\r\n event.preventDefault();\r\n let target = event.target as HTMLInputElement;\r\n this.checkboxTargets.forEach((checkbox) => checkbox.checked = target.checked);\r\n }\r\n\r\n private _refresh() {\r\n const checkboxesCount = this.checkboxTargets.length;\r\n const checkboxesCheckedCount = this._checked.length;\r\n\r\n this.selectAllTarget.checked = checkboxesCheckedCount > 0;\r\n this.selectAllTarget.indeterminate = checkboxesCheckedCount > 0 && checkboxesCheckedCount < checkboxesCount;\r\n }\r\n}","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"source\", \"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 {\r\n return element.nodeName == \"LINK\";\r\n}\r\n\r\nexport function isHTMLAnchorElement(element: Element): element is HTMLAnchorElement {\r\n return element.nodeName == \"A\";\r\n}\r\n\r\nexport function isHTMLFormElement(element: Element): element is HTMLFormElement {\r\n return element.nodeName == \"FORM\";\r\n}\r\n\r\nexport function isHTMLInputElement(element: Element): element is HTMLInputElement {\r\n return element.nodeName == \"INPUT\";\r\n}\r\n\r\nexport function isHTMLButtonElement(element: Element): element is HTMLButtonElement {\r\n return element.nodeName == \"BUTTON\";\r\n}\r\n\r\nexport function isHTMLSelectElement(element: Element): element is HTMLSelectElement {\r\n return element.nodeName == \"SELECT\";\r\n}\r\n\r\nexport function isHTMLImageElement(element: Element): element is HTMLImageElement {\r\n return element.nodeName == \"IMG\";\r\n}\r\n\r\nexport function isElementCheckable(element: Element): element is HTMLInputElement & { checked: boolean } {\r\n return isHTMLInputElement(element) && (element.type === \"radio\" || element.type === \"checkbox\");\r\n}\r\n","import {BaseController} from '../utilities/base_controller';\r\nimport {isHTMLAnchorElement, isHTMLFormElement} from \"../utilities/elements\";\r\n\r\nexport class ConfirmController extends BaseController {\r\n\r\n static values = {\r\n message: String,\r\n };\r\n\r\n declare readonly messageValue: string;\r\n declare readonly hasMessageValue: boolean;\r\n\r\n get _message(): string {\r\n return this.hasMessageValue ? this.messageValue : 'Are you sure?';\r\n }\r\n\r\n initialize() {\r\n this.confirm = this.confirm.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 element.addEventListener(\"submit\", this.confirm);\r\n } else if (isHTMLAnchorElement(element)) {\r\n element.addEventListener(\"click\", this.confirm);\r\n } else {\r\n throw new Error(\"Can't handle confirmation on attached element\");\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n let element = this.el;\r\n if (isHTMLFormElement(element)) {\r\n element.removeEventListener(\"submit\", this.confirm);\r\n } else if (isHTMLAnchorElement(element)) {\r\n element.removeEventListener(\"click\", this.confirm);\r\n }\r\n }\r\n\r\n confirm(event: Event) {\r\n if (!(window.confirm(this._message))) {\r\n event.preventDefault();\r\n this.dispatch(this.el, \"confirm:cancelled\");\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class ConfirmNavigationController extends BaseController {\r\n\r\n static values = {_message: String};\r\n\r\n declare readonly _messageValue: string;\r\n declare readonly hasMessageValue: boolean;\r\n\r\n get _message(): string {\r\n return this.hasMessageValue ? this._messageValue : \"Do you want to leave this page? Changes you made may not be saved\";\r\n }\r\n\r\n initialize() {\r\n this.allowSubmit = this.allowSubmit.bind(this);\r\n this.confirmNavigation = this.confirmNavigation.bind(this);\r\n this.confirmTurboNavigation = this.confirmTurboNavigation.bind(this);\r\n }\r\n\r\n connect() {\r\n window.onbeforeunload = () => this._message;\r\n window.addEventListener(\"popstate\", this.confirmNavigation);\r\n window.addEventListener(\"submit\", this.allowSubmit);\r\n window.addEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\r\n window.addEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"popstate\", this.confirmNavigation);\r\n window.onbeforeunload = null;\r\n window.removeEventListener(\"submit\", this.allowSubmit);\r\n window.removeEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\r\n window.removeEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\r\n }\r\n\r\n allowSubmit(_event: Event) {\r\n window.removeEventListener(\"popstate\", this.confirmNavigation);\r\n window.onbeforeunload = null;\r\n }\r\n\r\n confirmNavigation(_event: PopStateEvent) {\r\n return false;\r\n }\r\n\r\n confirmTurboNavigation(event: Event) {\r\n if (!confirm(this._message)) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class DebugController extends BaseController {\r\n\r\n static targets = [\"test\"];\r\n declare testTargets: HTMLElement[];\r\n\r\n connect() {\r\n console.log(\"Debug Controller\", this, this.testTargets);\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyController extends BaseController {\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._restoreElementFromLoadValue();\r\n }\r\n\r\n private _getElementValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(): boolean {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkDirty() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (this._isElementDirty()) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(): boolean {\r\n return this._getElementValue() !== this._getElementLoadValue();\r\n }\r\n\r\n private _restoreElementFromLoadValue() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (!this._elementHasCachedLoadValue() && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyFormController extends BaseController {\r\n\r\n get _formElements(): Array {\r\n return Array.from(this.el.querySelectorAll('input, select, textarea'));\r\n }\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._formElements.forEach(element => this._restoreElementFromLoadValue(element));\r\n }\r\n\r\n private _getElementValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (this._isElementDirty(element)) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return this._getElementValue(element) !== this._getElementLoadValue(element);\r\n }\r\n\r\n private _cacheElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (!this._elementHasCachedLoadValue(element) && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n\r\n private _restoreElementFromLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n this._formElements.forEach(el => this._cacheElementLoadValue(el));\r\n }\r\n\r\n private _checkDirty(): void {\r\n this._formElements.forEach(el => this._checkElementDirty(el));\r\n if (this._formElements.some(el => isDirty(el))) {\r\n this.el.setAttribute(\"data-dirty\", \"true\");\r\n } else {\r\n this.el.removeAttribute(\"data-dirty\");\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/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 '../utilities/base_controller';\r\nimport {isHTMLAnchorElement, isHTMLButtonElement, isHTMLInputElement} from \"../utilities/elements\";\r\n\r\nexport class DisableWithController extends BaseController {\r\n\r\n static values = {\r\n message: String,\r\n timeout: Number,\r\n };\r\n\r\n declare readonly messageValue: string;\r\n declare readonly hasMessageValue: boolean;\r\n declare readonly timeoutValue: number;\r\n declare readonly hasTimeoutValue: boolean;\r\n\r\n _cacheText?: string;\r\n _timeoutHandle?: ReturnType;\r\n\r\n get _message(): string {\r\n return this.hasMessageValue ? this.messageValue : 'Submitting...';\r\n }\r\n\r\n get _timeout(): number {\r\n return this.hasTimeoutValue ? this.timeoutValue : 1000;\r\n }\r\n\r\n initialize() {\r\n this.enable = this.enable.bind(this);\r\n this.disable = this.disable.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this.el.addEventListener(\"click\", this.disable);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n disable(event?: Event) {\r\n let element = this.el;\r\n\r\n if (this._isDisabled(element)) {\r\n event?.preventDefault();\r\n event?.stopImmediatePropagation();\r\n } else {\r\n this._cacheText = this._getElText(element);\r\n this._setElText(element, this._message);\r\n this._disable(element);\r\n setTimeout(this.enable, this._timeout);\r\n }\r\n }\r\n\r\n enable(event?: Event) {\r\n event?.preventDefault();\r\n let element = this.el;\r\n if (this._isDisabled(element)) {\r\n this._setElText(element, this._cacheText!);\r\n this._enable(element);\r\n }\r\n }\r\n\r\n _isDisabled(el: HTMLElement): boolean {\r\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\r\n return el.disabled;\r\n } else {\r\n return el.dataset.disabled == \"true\";\r\n }\r\n }\r\n\r\n _getElText(el: HTMLElement): string {\r\n if (isHTMLInputElement(el) && el.type == \"submit\") {\r\n return el.value;\r\n } else {\r\n return el.innerText;\r\n }\r\n }\r\n\r\n _setElText(el: HTMLElement, str: string) {\r\n if (isHTMLInputElement(el) && el.type == \"submit\") {\r\n el.value = str;\r\n } else if (isHTMLButtonElement(el) || isHTMLAnchorElement(el)) {\r\n el.innerText = str;\r\n }\r\n }\r\n\r\n _disable(el: HTMLElement) {\r\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\r\n el.disabled = true;\r\n } else {\r\n el.dataset.disabled = \"true\";\r\n }\r\n }\r\n\r\n _enable(el: HTMLElement) {\r\n if (isHTMLInputElement(el) && el.type == \"submit\" || isHTMLButtonElement(el)) {\r\n el.disabled = false;\r\n } else {\r\n el.dataset.disabled = undefined;\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class DismissableController extends BaseController {\r\n\r\n dismiss() {\r\n this.el.remove();\r\n }\r\n\r\n}\r\n","import {BaseController} from '../utilities/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\";\r\nimport {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class EmptyDomController extends BaseController {\r\n\r\n static classes = [\"empty\", \"notEmpty\"];\r\n static values = {scopeSelector: String};\r\n\r\n declare hasEmptyClass: boolean;\r\n declare emptyClass: string;\r\n declare hasNotEmptyClass: boolean;\r\n declare notEmptyClass: string;\r\n\r\n declare hasScopeSelectorValue: boolean;\r\n declare scopeSelectorValue: string;\r\n\r\n get emptyClasses(): string[] {\r\n return this.emptyClass.split(\" \");\r\n }\r\n\r\n get notEmptyClasses(): string[] {\r\n return this.notEmptyClass.split(\" \");\r\n }\r\n\r\n get _children(): Element[] {\r\n let element = this.el;\r\n if (this.hasScopeSelectorValue) {\r\n return Array.from(element.querySelectorAll(this.scopeSelectorValue));\r\n } else {\r\n return Array.from(element.children);\r\n }\r\n }\r\n\r\n connect() {\r\n useMutation(this, {element: this.el, childList: true});\r\n this.checkEmpty();\r\n }\r\n\r\n mutate(entries: MutationRecord[]) {\r\n this.checkEmpty();\r\n }\r\n\r\n checkEmpty() {\r\n let element = this.el;\r\n let children = this._children;\r\n if (children.length === 0) {\r\n this._removeNotEmptyClasses();\r\n this._addEmptyClasses();\r\n this.dispatch(element as HTMLElement, \"dom:empty\");\r\n } else {\r\n this._addNotEmptyClasses();\r\n this._removeEmptyClasses();\r\n this.dispatch(element as HTMLElement, \"dom:not-empty\", {detail: {count: children.length}});\r\n }\r\n }\r\n\r\n private _removeEmptyClasses() {\r\n if (this.hasEmptyClass) {\r\n this.el.classList.remove(...this.emptyClasses);\r\n }\r\n }\r\n\r\n private _addNotEmptyClasses() {\r\n if (this.hasNotEmptyClass) {\r\n this.el.classList.add(...this.notEmptyClasses);\r\n }\r\n }\r\n\r\n private _addEmptyClasses() {\r\n if (this.hasEmptyClass) {\r\n this.el.classList.add(...this.emptyClasses);\r\n }\r\n }\r\n\r\n private _removeNotEmptyClasses() {\r\n if (this.hasNotEmptyClass) {\r\n this.el.classList.remove(...this.notEmptyClasses);\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 \"../../utilities/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 '../../utilities/base_controller';\r\n\r\nexport class FormRcController extends BaseController {\r\n\r\n static targets = [\"form\"];\r\n\r\n declare readonly formTarget: HTMLFormElement;\r\n\r\n submit(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"submit\");\r\n this.formTarget.submit();\r\n }\r\n\r\n reset(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"reset\");\r\n this.formTarget.reset();\r\n }\r\n\r\n}","import {BaseController} from '../../utilities/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 \"../../utilities/base_controller\";\r\nimport {useIntersection} from \"stimulus-use\";\r\n\r\nexport class IntersectionController extends BaseController {\r\n\r\n static values = {threshold: String};\r\n\r\n declare readonly isVisible: boolean;\r\n declare readonly thresholdValue: string;\r\n declare readonly hasThresholdValue: boolean;\r\n\r\n get _threshold(): number[] {\r\n if (this.hasThresholdValue) {\r\n return this.thresholdValue.split(',').map(val => Number.parseFloat(val.trim())).filter(val => val >= 0 && val <= 1);\r\n } else {\r\n return [0, 1];\r\n }\r\n }\r\n\r\n connect() {\r\n useIntersection(this, {\r\n threshold: this._threshold,\r\n element: this.el,\r\n });\r\n }\r\n\r\n appear(entry: IntersectionObserverEntry) {\r\n this.dispatch(\r\n this.el,\r\n \"intersection:appear\",\r\n {\r\n detail: {\r\n element: this.el,\r\n },\r\n },\r\n );\r\n };\r\n\r\n disappear(entry: IntersectionObserverEntry) {\r\n this.dispatch(\r\n this.el,\r\n \"intersection:disappear\",\r\n {\r\n detail: {\r\n element: this.el,\r\n },\r\n },\r\n );\r\n };\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class IntervalController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _intervalHandle: null | number = null;\r\n\r\n initialize() {\r\n this._interval = this._interval.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._intervalHandle = window.setInterval(this._interval, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._intervalHandle) {\r\n window.clearInterval(this._intervalHandle);\r\n }\r\n }\r\n\r\n _interval() {\r\n this.dispatch(this.el, \"interval:action\");\r\n }\r\n\r\n}","import {useIntersection} from \"stimulus-use\";\r\nimport {AsyncBlockController} from \"./async_block_controller\";\r\n\r\nexport class LazyBlockController extends AsyncBlockController {\r\n\r\n declare observe: () => void;\r\n declare unobserve: () => void;\r\n declare isVisible: boolean;\r\n declare disappear: () => void;\r\n\r\n connect() {\r\n let element = this.el;\r\n\r\n if (\"IntersectionObserver\" in window) {\r\n [this.observe, this.unobserve] = useIntersection(this, {element, threshold: 0.3});\r\n } else {\r\n // Client doesn't support intersection observer, fallback to pre-loading\r\n this.loadContent();\r\n }\r\n }\r\n\r\n appear(entry: IntersectionObserverEntry) {\r\n if (entry.target === this.el && entry.isIntersecting) {\r\n this.loadContent();\r\n if (this.unobserve) {\r\n this.unobserve();\r\n }\r\n }\r\n }\r\n\r\n}\r\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 \"../../utilities/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 \"../../utilities/base_controller\";\r\n\r\nexport class LimitedSelectionCheckboxesController extends BaseController {\r\n\r\n static targets = [\"input\", \"error\"];\r\n static values = {max: Number, message: String};\r\n\r\n declare readonly hasErrorTarget: boolean;\r\n declare readonly errorTarget: HTMLElement;\r\n declare readonly inputTargets: HTMLInputElement[];\r\n declare readonly maxValue: number;\r\n declare readonly messageValue: string;\r\n\r\n initialize() {\r\n this.handleInputs = this.handleInputs.bind(this);\r\n }\r\n\r\n connect() {\r\n this.inputTargets.forEach((el) => el.addEventListener(\"change\", this.handleInputs));\r\n }\r\n\r\n disconnect() {\r\n this.inputTargets.forEach((el) => el.removeEventListener(\"change\", this.handleInputs));\r\n }\r\n\r\n handleInputs(event: Event) {\r\n let tickedInputs = this.inputTargets.reduce((previousValue, el) => el.checked ? previousValue + 1 : previousValue, 0);\r\n let target = event.target as HTMLInputElement;\r\n if (tickedInputs > this.maxValue) {\r\n event.preventDefault();\r\n target.checked = false;\r\n this.dispatch(target, \"change\");\r\n this.dispatch(target, \"limited-selection:too-many\");\r\n if (this.hasErrorTarget) {\r\n this.errorTarget.innerHTML = this.messageValue;\r\n }\r\n } else {\r\n this.dispatch(target, \"limited-selection:selection\");\r\n if (this.hasErrorTarget) {\r\n this.errorTarget.innerHTML = \"\";\r\n }\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class MediaPlayerController extends BaseController {\r\n\r\n static targets = [\"media\"];\r\n\r\n declare readonly mediaTarget: HTMLMediaElement;\r\n\r\n initialize() {\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n disconnect() {\r\n }\r\n\r\n async play(event?: Event) {\r\n event?.preventDefault();\r\n await this.mediaTarget.play();\r\n }\r\n\r\n pause(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.pause();\r\n }\r\n\r\n restart(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime = 0;\r\n }\r\n\r\n seek(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime += 5;\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class NestedFormController extends BaseController {\r\n static targets = ['target', 'template'];\r\n static values = {\r\n insertMode: String,\r\n wrapperClass: String,\r\n };\r\n\r\n declare readonly targetTarget: HTMLElement;\r\n declare readonly templateTarget: HTMLTemplateElement | HTMLScriptElement;\r\n\r\n declare readonly wrapperClassValue: string;\r\n declare readonly hasWrapperSelectorValue: boolean;\r\n declare readonly insertModeValue: InsertPosition;\r\n declare readonly hasInsertModeValue: boolean;\r\n\r\n get _wrapperClass() {\r\n return this.hasWrapperSelectorValue ? this.wrapperClassValue : 'nested-fields';\r\n }\r\n\r\n get _insertMode(): InsertPosition {\r\n return this.hasInsertModeValue ? this.insertModeValue : 'beforeend';\r\n }\r\n\r\n connect() {\r\n this._checkStructure();\r\n }\r\n\r\n add(event?: Event) {\r\n event?.preventDefault();\r\n\r\n const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, this._generateID());\r\n this.targetTarget.insertAdjacentHTML(this._insertMode, content);\r\n }\r\n\r\n remove(event: Event) {\r\n event.preventDefault();\r\n const wrapper: HTMLElement | null = (event.target as HTMLElement).closest(`.${this._wrapperClass}`);\r\n if (wrapper == null) {\r\n throw new Error(`#remove was clicked from outside of a child record. Could not find an ancestor with class .${this._wrapperClass}`);\r\n }\r\n\r\n if (wrapper.dataset.newRecord === 'true') {\r\n wrapper.remove();\r\n } else {\r\n wrapper.style.display = 'none';\r\n let destroyInput = wrapper.querySelector(\"input[name*='_destroy']\") as HTMLInputElement | null;\r\n if (destroyInput == null) {\r\n throw new Error(`Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.`);\r\n }\r\n\r\n destroyInput.value = \"1\";\r\n }\r\n }\r\n\r\n private _generateID(): string {\r\n return new Date().getTime().toString() + Math.random().toString().slice(2);\r\n }\r\n\r\n private _checkStructure() {\r\n let template = this.templateTarget.innerHTML;\r\n\r\n if (template.indexOf('NEW_RECORD')) {\r\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`\");\r\n }\r\n }\r\n}","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class PasswordConfirmController extends BaseController {\r\n\r\n static targets = [\"password\"];\r\n static classes = [\"error\"];\r\n\r\n declare readonly passwordTargets: HTMLInputElement[];\r\n\r\n declare readonly errorClass: string;\r\n declare readonly hasErrorClass: boolean;\r\n\r\n initialize() {\r\n this.checkPasswordsMatch = this.checkPasswordsMatch.bind(this);\r\n }\r\n\r\n connect() {\r\n this.passwordTargets.forEach((el) => el.addEventListener(\"change\", this.checkPasswordsMatch));\r\n }\r\n\r\n disconnect() {\r\n this.passwordTargets.forEach((el) => el.removeEventListener(\"change\", this.checkPasswordsMatch));\r\n }\r\n\r\n private _allPasswordsMatch(): boolean {\r\n let values = new Set(this.passwordTargets.map(el => el.value)); // Create a unique set of the password values\r\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)\r\n }\r\n\r\n private checkPasswordsMatch() {\r\n let element = this.el;\r\n if (this._allPasswordsMatch()) {\r\n this.dispatch(element, \"password-confirm:match\");\r\n if (this.hasErrorClass) {\r\n this.passwordTargets.forEach(el => el.classList.remove(this.errorClass));\r\n }\r\n } else {\r\n this.dispatch(element, \"password-confirm:no-match\");\r\n if (this.hasErrorClass) {\r\n this.passwordTargets.forEach(el => el.classList.add(this.errorClass));\r\n }\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class PasswordPeekController extends BaseController {\r\n\r\n static targets = [\"password\"];\r\n\r\n declare readonly passwordTarget: HTMLInputElement;\r\n\r\n peak(event?: Event) {\r\n event?.preventDefault();\r\n this.passwordTarget.type = \"text\";\r\n }\r\n\r\n hide(event?: Event) {\r\n event?.preventDefault();\r\n this.passwordTarget.type = \"password\";\r\n }\r\n\r\n toggle(event?: Event) {\r\n event?.preventDefault();\r\n if (this.passwordTarget.type === \"password\") {\r\n this.peak();\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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\";\r\nimport {WindowResizePayload} from \"stimulus-use/dist/use-window-resize/use-window-resize\";\r\nimport {BaseController} from \"../utilities/base_controller\";\r\n\r\ninterface ResponsiveIframeMessage {\r\n name: string,\r\n height: number,\r\n}\r\n\r\nexport class ResponsiveIframeWrapperController extends BaseController {\r\n\r\n initialize() {\r\n this.messageReceived = this.messageReceived.bind(this);\r\n }\r\n\r\n connect() {\r\n window.addEventListener(\"message\", this.messageReceived);\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"message\", this.messageReceived);\r\n }\r\n\r\n messageReceived(message: MessageEvent) {\r\n let data = message.data;\r\n if (data.hasOwnProperty(\"name\") && data.name === \"iframe-body\" && data.hasOwnProperty(\"height\")) {\r\n this.resize(data.height);\r\n }\r\n }\r\n\r\n resize(height: number) {\r\n (this.el as HTMLIFrameElement).style.height = `${height}px`;\r\n }\r\n\r\n}\r\n\r\nexport class ResponsiveIframeBodyController extends BaseController {\r\n\r\n static debounces = [\"postUpdate\"];\r\n\r\n declare observe: () => void;\r\n declare unobserve: () => void;\r\n\r\n connect() {\r\n // If this Window is inside a frame\r\n if (window.self !== window.top) {\r\n useWindowResize(this);\r\n useDebounce(this, {});\r\n this.postUpdate();\r\n } else {\r\n // Not an iframe\r\n }\r\n }\r\n\r\n windowResize(payload: WindowResizePayload) {\r\n this.postUpdate();\r\n };\r\n\r\n postUpdate() {\r\n let payload: ResponsiveIframeMessage = {name: \"iframe-body\", height: this.getHeight()};\r\n window.parent.postMessage(\r\n payload,\r\n \"*\",\r\n );\r\n }\r\n\r\n getHeight(): number {\r\n const body = document.body;\r\n const html = document.documentElement;\r\n\r\n // Get the largest height out of body and html's various height measurements\r\n return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\r\n }\r\n\r\n}\r\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 \"../../utilities/base_controller\";\r\nimport {getScrollParent, scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class ScrollToBottomController extends BaseController {\r\n\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare modeValue: \"nearest\" | \"document\";\r\n declare hasModeValue: boolean;\r\n\r\n scroll(event?: Event) {\r\n event?.preventDefault();\r\n let mode = this.hasModeValue ? this.modeValue : \"document\";\r\n let target: null | HTMLElement;\r\n if (mode == \"document\") {\r\n target = document.body;\r\n } else {\r\n target = getScrollParent(this.el);\r\n }\r\n if (target == null) {\r\n return;\r\n }\r\n scrollToElement(target!, {behavior: \"smooth\", block: \"end\"}).catch(() => target!.scrollIntoView(false));\r\n }\r\n\r\n}\r\n\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class ScrollToController extends BaseController {\r\n\r\n static values = {\r\n selector: String,\r\n behavior: String,\r\n block: String,\r\n inline: String,\r\n };\r\n\r\n declare selectorValue: string;\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 scroll() {\r\n let target = document.querySelector(this.selectorValue);\r\n if (!target) {\r\n console.warn(`Could not find target for '${this.selectorValue}'`);\r\n return;\r\n }\r\n\r\n scrollToElement(\r\n target!,\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(() => target!.scrollIntoView()); // Fallback to snap-scrolling\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {getScrollParent, scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class ScrollToTopController extends BaseController {\r\n\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare modeValue: \"nearest\" | \"document\";\r\n declare hasModeValue: boolean;\r\n\r\n scroll(event?: Event) {\r\n event?.preventDefault();\r\n let mode = this.hasModeValue ? this.modeValue : \"document\";\r\n let target: null | HTMLElement;\r\n if (mode == \"document\") {\r\n target = document.body;\r\n } else {\r\n target = getScrollParent(this.el);\r\n }\r\n if (target == null) {\r\n return;\r\n }\r\n scrollToElement(target!, {behavior: \"smooth\", block: \"start\"}).catch(() => target!.scrollIntoView(false));\r\n }\r\n\r\n}\r\n\r\n","import {BaseController} from \"../utilities/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 \"../utilities/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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableSortController extends BaseController {\r\n\r\n static values = {startSort: Number};\r\n\r\n declare readonly startSortValue: number;\r\n declare readonly hasStartSortValue: boolean;\r\n _lastIndex: number | null = null;\r\n _reverse: boolean = false;\r\n\r\n get _tableHead(): HTMLTableSectionElement {\r\n let head = (this.el as HTMLTableElement).tHead;\r\n if (head == null) {\r\n throw new Error('Expected table to have a element.');\r\n }\r\n return head;\r\n }\r\n\r\n get _tableHeaders(): HTMLTableHeaderCellElement[] {\r\n let rows = this._tableHead.rows;\r\n if (rows.length == 0) {\r\n throw new Error('Expected table to have a element with at least one row.');\r\n }\r\n return Array.from(rows[0].cells);\r\n }\r\n\r\n get _tableBody() {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n initialize() {\r\n this.sort = this.sort.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._tableHeaders.forEach(cell => cell.addEventListener(\"click\", this.sort));\r\n if (this.hasStartSortValue) {\r\n this._sortByColumn(this.startSortValue);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n this._tableHeaders.forEach(cell => cell.removeEventListener(\"click\", this.sort));\r\n }\r\n\r\n sort(event: Event) {\r\n event.preventDefault();\r\n let headerCell = event.target! as HTMLTableHeaderCellElement;\r\n let headerCellIndex = this._indexOfHeaderCell(headerCell);\r\n this._sortByColumn(headerCellIndex);\r\n }\r\n\r\n private _indexOfHeaderCell(cell: HTMLTableHeaderCellElement) {\r\n return this._tableHeaders.indexOf(cell);\r\n }\r\n\r\n private _sortByColumn(index: number) {\r\n this._reverse = index === this._lastIndex && !this._reverse;\r\n let frag = document.createDocumentFragment();\r\n let rows = this._tableRows;\r\n\r\n let newRows = rows.sort((row, otherRow) => {\r\n let cells = Array.from(row.cells);\r\n let otherCells = Array.from(otherRow.cells);\r\n\r\n // TODO: Handle colspans?\r\n let x = cells[index]?.innerText || \"\";\r\n let y = otherCells[index]?.innerText || \"\";\r\n\r\n let sortVal = x.localeCompare(y, \"en\", {sensitivity: \"base\", numeric: true, caseFirst: \"upper\"});\r\n\r\n if (row.dataset.sortTop || otherRow.dataset.sortBottom) {\r\n if (row.dataset.sortTop && otherRow.dataset.sortTop) {\r\n return sortVal;\r\n }\r\n return -1;\r\n }\r\n if (row.dataset.sortBottom || otherRow.dataset.sortTop) {\r\n if (row.dataset.sortBottom && otherRow.dataset.sortBottom) {\r\n return sortVal;\r\n }\r\n return 1;\r\n }\r\n\r\n if (this._reverse) {\r\n return sortVal > 0 ? -1 : 1;\r\n }\r\n return sortVal;\r\n });\r\n\r\n newRows.forEach(row => frag.appendChild(row));\r\n\r\n this._tableBody.innerHTML = \"\";\r\n this._tableBody.appendChild(frag);\r\n this._lastIndex = index;\r\n }\r\n\r\n}","import {useMutation} from \"stimulus-use\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableTruncateController extends BaseController {\r\n\r\n static targets = [\"showMore\"];\r\n static values = {\r\n limit: Number,\r\n truncated: Boolean,\r\n };\r\n\r\n declare readonly showMoreTarget: HTMLElement;\r\n declare limitValue: number;\r\n declare readonly hasLimitValue: boolean;\r\n declare truncatedValue: boolean;\r\n declare readonly hasTruncatedValue: boolean;\r\n\r\n get _truncated(): boolean {\r\n return this.hasTruncatedValue ? this.truncatedValue : false;\r\n }\r\n\r\n set _truncated(value) {\r\n this.truncatedValue = value;\r\n }\r\n\r\n get _tableBody(): HTMLTableSectionElement {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n get _limit(): number {\r\n return this.hasLimitValue ? this.limitValue : 20;\r\n }\r\n\r\n initialize() {\r\n this.truncate = this.truncate.bind(this);\r\n this.expand = this.expand.bind(this);\r\n }\r\n\r\n connect() {\r\n useMutation(this, {childList: true, element: this._tableBody});\r\n\r\n requestAnimationFrame(() => {\r\n this.truncate();\r\n this.showMoreTarget.addEventListener(\"click\", this.expand);\r\n });\r\n }\r\n\r\n truncate(event?: Event) {\r\n event?.preventDefault();\r\n this._truncated = true;\r\n if (this._tableRows.length >= this._limit) {\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\r\n } else {\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n }\r\n\r\n expand(event?: Event) {\r\n this._truncated = false;\r\n event?.preventDefault();\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n\r\n mutate(entries: MutationRecord[]) {\r\n if (this._truncated) {\r\n this._reTruncate();\r\n }\r\n }\r\n\r\n private _showElement(el: HTMLElement): void {\r\n el.style.display = \"\";\r\n }\r\n\r\n private _hideElement(el: HTMLElement): void {\r\n el.style.display = \"none\";\r\n }\r\n\r\n private _reTruncate() {\r\n this._tableRows.slice(0, this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\r\n }\r\n\r\n}","import {EphemeralController} from \"../utilities/ephemeral_controller\";\r\n\r\nexport class TeleportController extends EphemeralController {\r\n\r\n static values = {target: String, insert: String, immediate: Boolean};\r\n\r\n declare readonly immediateValue: boolean;\r\n declare readonly hasImmediateValue: boolean;\r\n declare readonly targetValue: string;\r\n declare readonly hasInsertValue: boolean;\r\n declare readonly insertValue: InsertPosition | \"replaceOuter\" | \"replaceInner\" | \"prepend\" | \"append\";\r\n\r\n connect() {\r\n if (!this.hasInsertValue) {\r\n throw new Error(\"`insert` value was not specified\");\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n if (this.hasImmediateValue && this.immediateValue) {\r\n this.execute();\r\n }\r\n });\r\n }\r\n\r\n execute(event?: Event) {\r\n event?.preventDefault();\r\n let element = this.el;\r\n let destination = document.querySelector(this.targetValue);\r\n\r\n if (destination == null) {\r\n this.dispatch(element, \"teleport:error\");\r\n return;\r\n }\r\n\r\n let copy = element.cloneNode(true) as HTMLElement;\r\n this.cleanup(copy);\r\n\r\n switch (this.insertValue) {\r\n case \"beforebegin\":\r\n case \"beforeend\":\r\n case \"afterend\":\r\n case \"afterbegin\":\r\n destination.insertAdjacentHTML(this.insertValue, copy.outerHTML);\r\n break;\r\n case \"replaceOuter\":\r\n destination.outerHTML = copy.outerHTML;\r\n break;\r\n case \"replaceInner\":\r\n destination.innerHTML = copy.outerHTML;\r\n break;\r\n case \"prepend\":\r\n destination.insertAdjacentHTML(\"afterbegin\", copy.outerHTML);\r\n break;\r\n case \"append\":\r\n destination.insertAdjacentHTML(\"beforeend\", copy.outerHTML);\r\n break;\r\n default:\r\n throw new Error(\"`insert` value was not specified\");\r\n\r\n }\r\n element.remove();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TimeoutController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _timeoutHandle: null | number = null;\r\n\r\n initialize() {\r\n this._timeout = this._timeout.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._timeoutHandle = window.setTimeout(this._timeout, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n window.clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n _timeout() {\r\n this.dispatch(this.el, \"timeout\");\r\n }\r\n\r\n}","import {useClickOutside, useHover} from \"stimulus-use\";\r\nimport {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport type ToggleClassMode = \"on\" | \"off\" | \"toggle\"\r\n\r\nexport class ToggleClassController extends BaseController {\r\n\r\n static targets = [\"toggle\"];\r\n static values = {\r\n class: String,\r\n mouseEnter: String,\r\n mouseLeave: String,\r\n clickAway: Boolean,\r\n initial: String,\r\n };\r\n\r\n declare readonly toggleTargets: HTMLElement[];\r\n\r\n declare readonly classValue: string;\r\n declare readonly hasClassValue: boolean;\r\n\r\n declare readonly mouseEnterValue: ToggleClassMode;\r\n declare readonly hasMouseEnterValue: boolean;\r\n\r\n declare readonly mouseLeaveValue: ToggleClassMode;\r\n declare readonly hasMouseLeaveValue: boolean;\r\n\r\n declare readonly clickAwayValue: boolean;\r\n declare readonly hasClickAwayValue: boolean;\r\n\r\n declare readonly initialValue: \"on\" | \"off\";\r\n declare readonly hasInitialValue: boolean;\r\n\r\n connect() {\r\n if (!this.hasClassValue) {\r\n throw new Error(\"data-toggle-class-class-value must not be empty\");\r\n }\r\n\r\n if (this.hasMouseEnterValue || this.hasMouseLeaveValue) {\r\n useHover(this);\r\n }\r\n\r\n if (this.hasClickAwayValue && this.clickAwayValue) {\r\n useClickOutside(this);\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n if (this.hasInitialValue) {\r\n if (this.initialValue === \"on\") {\r\n this.toggleTargets.forEach((target) => this._elementOn(target));\r\n } else {\r\n this.toggleTargets.forEach((target) => this._elementOff(target));\r\n }\r\n }\r\n });\r\n }\r\n\r\n clickOutside() {\r\n this.toggleTargets.forEach((target) => {\r\n if (this._elementWasToggled(target)) {\r\n this._elementToggleStatus(target);\r\n this._elementToggle(target);\r\n }\r\n });\r\n }\r\n\r\n mouseEnter() {\r\n if (this.hasMouseEnterValue) {\r\n switch (this.mouseEnterValue) {\r\n case \"on\":\r\n this.on();\r\n break;\r\n case \"off\":\r\n this.off();\r\n break;\r\n case \"toggle\":\r\n this.toggle();\r\n break;\r\n }\r\n }\r\n return {};\r\n }\r\n\r\n mouseLeave() {\r\n if (this.hasMouseLeaveValue) {\r\n switch (this.mouseLeaveValue) {\r\n case \"on\":\r\n this.on();\r\n break;\r\n case \"off\":\r\n this.off();\r\n break;\r\n case \"toggle\":\r\n this.toggle();\r\n break;\r\n }\r\n }\r\n return {};\r\n }\r\n\r\n on(event?: Event) {\r\n this.toggleTargets.forEach((target) => {\r\n this._elementToggleStatus(target);\r\n this._elementOn(target);\r\n });\r\n }\r\n\r\n off(event?: Event) {\r\n this.toggleTargets.forEach((target) => {\r\n this._elementToggleStatus(target);\r\n this._elementOff(target);\r\n });\r\n }\r\n\r\n toggle(event?: Event) {\r\n this.toggleTargets.forEach((target) => {\r\n this._elementToggleStatus(target);\r\n this._elementToggle(target);\r\n });\r\n }\r\n\r\n private _elementWasToggled(el: HTMLElement): boolean {\r\n return el.dataset.toggled == \"true\";\r\n }\r\n\r\n private _elementToggleStatus(el: HTMLElement) {\r\n if (this._elementWasToggled(el)) {\r\n delete el.dataset.toggled;\r\n } else {\r\n el.dataset.toggled = \"true\";\r\n }\r\n }\r\n\r\n private _elementToggle(el: HTMLElement) {\r\n let classes = this.classValue.split(\" \");\r\n classes.forEach((klass) => el.classList.toggle(klass));\r\n }\r\n\r\n private _elementOn(el: HTMLElement) {\r\n let classes = this.classValue.split(\" \");\r\n classes.forEach((klass) => el.classList.toggle(klass, true));\r\n }\r\n\r\n private _elementOff(el: HTMLElement) {\r\n let classes = this.classValue.split(\" \");\r\n classes.forEach((klass) => el.classList.toggle(klass, false));\r\n }\r\n\r\n}\r\n","export function isTurboFrame(element: HTMLElement): element is TurboFrame {\r\n return element.nodeName == \"TURBO-FRAME\";\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\nimport {isHTMLAnchorElement} from \"../utilities/elements\";\r\nimport {isTurboFrame} from \"../utilities/turbo\";\r\n\r\nexport class TurboFrameRCController extends BaseController {\r\n\r\n static values = {\r\n frameId: String,\r\n src: String,\r\n loadingMessage: String,\r\n };\r\n\r\n declare readonly frameIdValue: string;\r\n declare readonly srcValue: string;\r\n declare readonly hasSrcValue: boolean;\r\n declare readonly loadingMessageValue: string;\r\n declare readonly hasLoadingMessageValue: boolean;\r\n\r\n toggle(event?: Event) {\r\n event?.preventDefault();\r\n let frame = this._getFrame();\r\n let frameSrc = frame.src;\r\n if (frameSrc == null || frameSrc !== this._getSrc()) {\r\n this._setSrc();\r\n } else {\r\n this._clear();\r\n }\r\n }\r\n\r\n setSrc(event?: Event) {\r\n event?.preventDefault();\r\n this._setSrc();\r\n }\r\n\r\n clear(event?: Event) {\r\n event?.preventDefault();\r\n this._clear();\r\n }\r\n\r\n private _setSrc() {\r\n let frame = this._getFrame();\r\n if (this.hasLoadingMessageValue) {\r\n frame.innerHTML = this.loadingMessageValue;\r\n }\r\n frame.src = this._getSrc();\r\n }\r\n\r\n private _clear() {\r\n let frame = this._getFrame();\r\n frame.src = \"\";\r\n frame.innerHTML = \"\";\r\n }\r\n\r\n private _getFrame(): TurboFrame {\r\n let frame = document.getElementById(`${this.frameIdValue}`);\r\n if (frame == null) {\r\n throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);\r\n }\r\n if (!isTurboFrame(frame)) {\r\n throw new Error(`Element targeted by ID '${this.frameIdValue}'`);\r\n } else {\r\n return frame;\r\n }\r\n }\r\n\r\n private _getSrc(): string {\r\n let element = this.el;\r\n if (this.hasSrcValue) {\r\n return this.srcValue;\r\n } else if (isHTMLAnchorElement(element)) {\r\n return element.href;\r\n } else {\r\n throw new Error(\"No link given to drive frame to\");\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\nimport {isTurboFrame} from \"../utilities/turbo\";\r\n\r\n// noinspection SillyAssignmentJS\r\nexport class TurboFrameRefreshController extends BaseController {\r\n\r\n static values = {\r\n interval: Number,\r\n poll: Boolean,\r\n };\r\n\r\n declare readonly intervalValue: number;\r\n declare readonly pollValue: boolean;\r\n declare readonly hasPollValue: boolean;\r\n _timeoutHandle: null | ReturnType = null;\r\n\r\n get _poll(): boolean {\r\n return this.hasPollValue ? this.pollValue : false;\r\n }\r\n\r\n initialize() {\r\n this.refresh = this.refresh.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el;\r\n if (isTurboFrame(element)) {\r\n if (!!element.src) {\r\n throw new Error('The provided element has no `src` attribute.');\r\n }\r\n } else {\r\n throw new Error('Expected controller to be mounted on a element.');\r\n }\r\n if (this._poll) {\r\n requestAnimationFrame(() => this._timeoutHandle = setTimeout(() => this.refresh(), this.intervalValue));\r\n }\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n refresh(event?: Event) {\r\n event?.preventDefault();\r\n let element = this.el as TurboFrame;\r\n element.src = element.src;\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class WordCountController extends BaseController {\r\n\r\n static targets = [\"input\", \"output\"];\r\n static values = {min: Number, max: Number};\r\n static classes = [\"error\"];\r\n\r\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\r\n declare readonly outputTarget: HTMLElement;\r\n declare minValue: number;\r\n declare hasMinValue: boolean;\r\n declare maxValue: number;\r\n declare hasMaxValue: boolean;\r\n declare errorClass: string;\r\n declare hasErrorClass: boolean;\r\n\r\n initialize() {\r\n this.updateWordCount = this.updateWordCount.bind(this);\r\n }\r\n\r\n connect() {\r\n this.updateWordCount();\r\n this.inputTarget.addEventListener(\"input\", this.updateWordCount);\r\n }\r\n\r\n disconnect() {\r\n this.inputTarget.removeEventListener(\"input\", this.updateWordCount);\r\n }\r\n\r\n updateWordCount() {\r\n let wordCount = 0;\r\n let textAreaValue = this.inputTarget.value;\r\n let matches = textAreaValue.match(/\\S+/g);\r\n wordCount = (matches && matches.length) || 0;\r\n this.outputTarget.innerText = wordCount.toString();\r\n if (this.hasErrorClass) {\r\n if (this._isValidCount(wordCount)) {\r\n this.outputTarget.classList.remove(this.errorClass);\r\n } else {\r\n this.outputTarget.classList.add(this.errorClass);\r\n }\r\n }\r\n }\r\n\r\n private _isValidCount(count: number) {\r\n let min = 0;\r\n let max = 99999;\r\n\r\n if (this.hasMinValue) {\r\n min = this.minValue;\r\n }\r\n\r\n if (this.hasMaxValue) {\r\n max = this.maxValue;\r\n }\r\n\r\n return count >= min && count <= max;\r\n }\r\n\r\n}\r\n"],"names":["BaseController","context","_this","Proxy","get","obj","prop","returnVal","Reflect","self","test","logProperty","toString","apply","target","thisArg","argArray","log","args","metaValue","name","element","document","head","querySelector","getAttribute","dispatch","eventName","options","mergedOptions","Object","assign","bubbles","cancelable","detail","event","CustomEvent","this","logEvent","dispatchEvent","functionName","application","debug","logger","console","groupCollapsed","identifier","groupEnd","documentElement","hasAttribute","isTurboPreview","Controller","AnchorSpyController","initialize","_checkAnchor","bind","connect","requestAnimationFrame","window","addEventListener","disconnect","removeEventListener","write","preventDefault","_anchor","_key","el","keyValue","replaceAll","location","hash","substr","value","key","String","AppearanceController","_handleVisibility","appear","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","errorMessage","selector","AutoSubmitFormController","submit","forEach","_this2","method","controller","methodName","composeEventName","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","useMutation","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","_toggle","_refresh","hasSelectAllTarget","selectAllTarget","checkboxTargets","checkbox","checked","checkboxesCount","checkboxesCheckedCount","_checked","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","message","ConfirmNavigationController","allowSubmit","confirmNavigation","confirmTurboNavigation","onbeforeunload","_event","_messageValue","DebugController","testTargets","DetectDirtyController","_checkDirty","_cacheLoadValues","restore","_restoreElementFromLoadValue","_getElementValue","_getElementLoadValue","_cacheAttrName","defaultChecked","Array","from","option","defaultSelected","_elementHasCachedLoadValue","_isElementDirty","setAttribute","removeAttribute","cacheValue","defaultValue","DetectDirtyFormController","_formElements","_checkElementDirty","_cacheElementLoadValue","_this3","some","DisableInputsController","toggle","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","href","_id","hasRestoreOnLoadValue","restoreOnLoadValue","hasElementTarget","elementTarget","restoreOnLoad","EmptyDomController","childList","checkEmpty","mutate","_children","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","emptyClasses","hasNotEmptyClass","notEmptyClasses","emptyClass","notEmptyClass","hasScopeSelectorValue","scopeSelectorValue","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormRcController","formTarget","reset","FormSaveController","_clear","_clearOnSubmit","_formIdentifier","_formData","_formID","elements","hasClearOnSubmitValue","clearOnSubmitValue","clearOnSubmit","IntersectionController","threshold","_threshold","disappear","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","IntervalController","_interval","_intervalHandle","setInterval","secondsValue","clearInterval","seconds","LazyBlockController","smoothPolyfilled","scrollToElement","behavior","block","inline","scrollIntoView","smoothSupported","Promise","polyfill","polyfillSmooth","getScrollParent","node","overflowY","getComputedStyle","parentElement","body","LightboxImageController","open","close","_dialog","image","className","_imageClassName","_src","srcset","_srcSet","sizes","_sizes","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","_modalClassName","showModal","hasSrcValue","srcValue","hasSrcSetValue","srcSetValue","hasSizesValue","sizesValue","hasModalClass","modalClass","hasImageClass","imageClass","srcSet","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","MediaPlayerController","play","mediaTarget","pause","restart","currentTime","seek","NestedFormController","_checkStructure","content","templateTarget","replace","_generateID","targetTarget","insertAdjacentHTML","_insertMode","wrapper","closest","_wrapperClass","newRecord","destroyInput","Date","getTime","Math","random","slice","indexOf","hasWrapperSelectorValue","wrapperClassValue","hasInsertModeValue","insertModeValue","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","_selector","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","constructor","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","RegExp","substringIdentifierValueRegex","camelCase","action","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","StickyController","createMagicElement","_magicElement","_mode","intersectionRatio","hasStuckClass","stuckClass","TableSortController","sort","_tableHeaders","cell","hasStartSortValue","_sortByColumn","startSortValue","headerCellIndex","_indexOfHeaderCell","index","_reverse","_lastIndex","frag","createDocumentFragment","_tableRows","row","otherRow","cells","otherCells","x","y","sortVal","localeCompare","sensitivity","numeric","caseFirst","sortTop","sortBottom","_this4","_tableBody","tHead","rows","_tableHead","tBodies","startSort","TableTruncateController","truncate","expand","showMoreTarget","_truncated","_limit","_hideElement","_showElement","_reTruncate","hasTruncatedValue","truncatedValue","hasLimitValue","limitValue","limit","truncated","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","TimeoutController","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","_this5","toggled","classValue","klass","isTurboFrame","class","clickAway","initial","TurboFrameRCController","frameSrc","_getFrame","_getSrc","_setSrc","setSrc","frame","hasLoadingMessageValue","loadingMessageValue","getElementById","frameIdValue","frameId","loadingMessage","TurboFrameRefreshController","refresh","_poll","intervalValue","hasPollValue","pollValue","interval","poll","WordCountController","updateWordCount","wordCount","matches","match"],"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 caf7cb61..69fcd500 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"lodash-es/get";import s from"lodash-es/set";import i from"dialog-polyfill";import a from"camelcase";function r(){return(r=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"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}})}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);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(r({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 l extends n{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")}}l.values={key:String};class o extends n{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,"appearance:appear")}away(){this.dispatch(this.el,"appearance:away")}_handleVisibility(){this._documentIsActive()?this.appear():this.away()}_documentIsActive(){return"visible"==document.visibilityState&&document.hasFocus()}}class h extends n{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")})}}h.targets=["replace"],h.values={endpoint:String,errorMessage:String,selector:String};class c extends n{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(){this.dispatch(this.el,"submit")}}const d=(e,t)=>{const s=e[t];return"function"==typeof s?s:(...e)=>{}},u=(e,t,s)=>{let i=e;return!0===s?i=`${t.identifier}:${e}`:"string"==typeof s&&(i=`${s}:${e}`),i},m=(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})},g={dispatchEvent:!0,eventPrefix:!0},p=(e,t={})=>{const{dispatchEvent:s,eventPrefix:i}=Object.assign({},g,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,d(e,"appear").call(e,t),s){const s=u("appear",e,i),r=m(s,null,{controller:e,entry:t});a.dispatchEvent(r)}})(r):e.isVisible&&(t=>{if(e.isVisible=!1,d(e,"disappear").call(e,t),s){const s=u("disappear",e,i),r=m(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},f={debug:!1,logger:console};class _{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 _{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=()=>{d(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{d(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 _{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=>{d(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,t={})=>{const s=new E(e,t);return[s.observe,s.unobserve]},y=e=>{const t=t=>{const{innerWidth:s,innerHeight:i}=window,a={height:i||Infinity,width:s||Infinity,event:t};d(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]},V=(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 T extends n{initialize(){this._handler=this._handler.bind(this)}connect(){y(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 L extends n{initialize(){this._updateCharCount=this._updateCharCount.bind(this)}connect(){requestAnimationFrame(()=>{this.inputTarget.addEventListener("input",this._updateCharCount),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}}L.targets=["input","output"],L.values={min:Number,max:Number},L.classes=["error"];class k extends n{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(!x(e))throw new Error("Can't handle confirmation on attached element");e.addEventListener("click",this.confirm)}})}disconnect(){let e=this.el;C(e)?e.removeEventListener("submit",this.confirm):x(e)&&e.removeEventListener("click",this.confirm)}confirm(e){window.confirm(this._message)||(e.preventDefault(),this.dispatch(this.el,"confirm:cancelled"))}}N.values={message:String};class O extends n{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()}}O.values={_message:String};class H extends n{connect(){console.log("Debug Controller",this,this.testTargets)}}H.targets=["test"];class z extends n{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 M(e)?e.checked:e.value}_getElementLoadValue(){let e=this.el,t=e.getAttribute(this._cacheAttrName);return M(e)?null==t?e.defaultChecked:"true"==t:(null!==t||I(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);M(e)?(e.setAttribute(this._cacheAttrName,e.checked.toString()),e.checked=null==t?e.defaultChecked:"true"==t):I(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()&&M(e)?e.setAttribute(this._cacheAttrName,e.checked.toString()):e.setAttribute(this._cacheAttrName,e.value.toString())}}class $ extends n{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 M(e)?e.checked:e.value}_getElementLoadValue(e){let t=e.getAttribute(this._cacheAttrName);return M(e)?null==t?e.defaultChecked:"true"==t:(null!==t||I(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)&&M(e)?e.setAttribute(this._cacheAttrName,e.checked.toString()):e.setAttribute(this._cacheAttrName,e.value.toString())}_restoreElementFromLoadValue(e){let t=e.getAttribute(this._cacheAttrName);M(e)?(e.setAttribute(this._cacheAttrName,e.checked.toString()),e.checked=null==t?e.defaultChecked:"true"==t):I(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=>e.hasAttribute("data-dirty"))?this.el.setAttribute("data-dirty","true"):this.el.removeAttribute("data-dirty")}}class R extends n{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})}}R.targets=["disabler","disable"],R.values={clear:Boolean};class B extends n{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 A(e)&&"submit"==e.type||D(e)?e.disabled:"true"==e.dataset.disabled}_getElText(e){return A(e)&&"submit"==e.type?e.value:e.innerText}_setElText(e,t){A(e)&&"submit"==e.type?e.value=t:(D(e)||x(e))&&(e.innerText=t)}_disable(e){A(e)&&"submit"==e.type||D(e)?e.disabled=!0:e.dataset.disabled="true"}_enable(e){A(e)&&"submit"==e.type||D(e)?e.disabled=!1:e.dataset.disabled=void 0}}B.values={message:String,timeout:Number};class F extends n{dismiss(){this.el.remove()}}class q extends n{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")}}q.targets=["element"],q.values={id:String,attributes:String,restoreOnLoad:Boolean};class j extends n{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(){w(this,{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)}}j.classes=["empty","notEmpty"],j.values={scopeSelector:String};class P extends n{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})}}P.targets=["enabler","enable"],P.values={clear:Boolean};class W extends n{connect(){let e=this.el;e.onerror=()=>{this.hasPlaceholderValue?e.src=this.placeholderValue:e.style.display="none"}}}W.values={placeholder:String};class U extends n{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()}}U.targets=["form"];class J extends n{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&&(A(s)&&"checkbox"==s.type?e[this._formIdentifier][s.name]=s.checked:A(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&&(A(s)&&"checkbox"==s.type?s.checked=e[s.name]:A(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")}}J.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};class Y extends n{get _threshold(){return this.hasThresholdValue?this.thresholdValue.split(",").map(e=>Number.parseFloat(e.trim())).filter(e=>e>=0&&e<=1):[0,1]}connect(){p(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}})}}Y.values={threshold:String};class G extends n{constructor(){super(...arguments),this._intervalHandle=null}initialize(){this._interval=this._interval.bind(this)}connect(){requestAnimationFrame(()=>{this._intervalHandle=window.setInterval(this._interval,1e3*this.secondsValue)})}disconnect(){this._intervalHandle&&window.clearInterval(this._intervalHandle)}_interval(){this.dispatch(this.el,"interval:action")}}G.values={seconds:Number};class K extends h{connect(){let e=this.el;"IntersectionObserver"in window?[this.observe,this.unobserve]=p(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 X;async function Z(e,{behavior:t="smooth",block:s="start",inline:i="nearest"}={}){"smooth"!=t||Q||await async function(){const{polyfill:e}=await import("smoothscroll-polyfill");X||(X=!0,e())}(),e.scrollIntoView({behavior:t,block:s,inline:i})}function ee(e){if(!e)return null;const t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:ee(e.parentElement)||document.body}class te extends n{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(),Z(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,Z(this.el,{behavior:"smooth",block:"end"}).catch(()=>this.el.scrollIntoView(!1)))}}te.values={src:String,srcSet:String,sizes:String},te.classes=["modal","image"];class se extends n{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=""))}}se.targets=["input","error"],se.values={max:Number,message:String};class ie extends n{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}}ie.targets=["media"];class ae extends n{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`")}}ae.targets=["target","template"],ae.values={insertMode:String,wrapperClass:String};class re extends n{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)))}}re.targets=["password"],re.classes=["error"];class ne extends n{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()}}ne.targets=["password"];class le extends n{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)}}le.targets=[],le.values={selector:String};class oe extends n{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 he extends n{connect(){var e,t,s;window.self!==window.top&&(y(this),t={},null===(s=(e=this).constructor.debounces)||void 0===s||s.forEach(s=>{if("string"==typeof s&&(e[s]=V(e[s],null==t?void 0:t.wait)),"object"==typeof s){const{name:i,wait:a}=s;if(!i)return;e[i]=V(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)}}he.debounces=["postUpdate"];class ce extends n{_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 r=new RegExp(`(s|^)${this.identifier}\\..+?(s|$)`,"g");e.dataset.target=(null==(s=e.dataset.target)?void 0:s.replaceAll(r,""))||"",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(r,""))||"",delete e.dataset[a(`${this.identifier}-action`)],""==e.dataset.action&&delete e.dataset.action;let n=this.constructor.values;n&&Object.keys(n).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 de extends ce{connect(){requestAnimationFrame(()=>{Z(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()})}}de.values={behavior:String,block:String,inline:String};class ue extends n{scroll(e){let t;null==e||e.preventDefault(),t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ee(this.el),null!=t&&Z(t,{behavior:"smooth",block:"end"}).catch(()=>t.scrollIntoView(!1))}}ue.values={mode:String};class me extends n{scroll(){let 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(()=>e.scrollIntoView()):console.warn(`Could not find target for '${this.selectorValue}'`)}}me.values={selector:String,behavior:String,block:String,inline:String};class ge extends n{scroll(e){let t;null==e||e.preventDefault(),t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ee(this.el),null!=t&&Z(t,{behavior:"smooth",block:"start"}).catch(()=>t.scrollIntoView(!1))}}ge.values={mode:String};class pe extends n{constructor(){super(...arguments),this._timeout=null}connect(){requestAnimationFrame(()=>{this._timeout=setTimeout(()=>this.el.remove(),1e3*this.secondsValue)})}disconnect(){this._timeout&&clearTimeout(this._timeout)}}pe.values={seconds:Number};class ve extends n{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)}}ve.classes=["stuck"],ve.values={mode:String};class fe extends n{constructor(){super(...arguments),this._lastIndex=null,this._reverse=!1}get _tableHead(){let e=this.el.tHead;if(null==e)throw new Error("Expected table to have a element.");return e}get _tableHeaders(){let e=this._tableHead.rows;if(0==e.length)throw new Error("Expected table to have a 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}}fe.values={startSort:Number};class _e extends n{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(){w(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)}}_e.targets=["showMore"],_e.values={limit:Number,truncated:Boolean};class be extends ce{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()}}be.values={target:String,insert:String,immediate:Boolean};class Ee extends n{constructor(){super(...arguments),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")}}Ee.values={seconds:Number};class we extends n{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: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=u("click:outside",e,r),s=m(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))}}function ye(e){return"TURBO-FRAME"==e.nodeName}we.targets=["toggle"],we.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};class Ve extends n{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(ye(e))return e;throw new Error(`Element targeted by ID '${this.frameIdValue}'`)}_getSrc(){let 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")}}Ve.values={frameId:String,src:String,loadingMessage:String};class Te extends n{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(!ye(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}}Te.values={interval:Number,poll:Boolean};class Le extends n{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}}Le.targets=["input","output"],Le.values={min:Number,max:Number},Le.classes=["error"];export{l as AnchorSpyController,o as AppearanceController,h as AsyncBlockController,c as AutoSubmitFormController,T as AutosizeController,L as CharCountController,k as CheckboxSelectAllController,S as ClipboardController,N as ConfirmController,O as ConfirmNavigationController,H as DebugController,z as DetectDirtyController,$ as DetectDirtyFormController,R as DisableInputsController,B as DisableWithController,F as DismissableController,q as ElementSaveController,j as EmptyDomController,P as EnableInputsController,W as FallbackImageController,U as FormRcController,J as FormSaveController,Y as IntersectionController,G as IntervalController,K as LazyBlockController,te as LightboxImageController,se as LimitedSelectionCheckboxesController,ie as MediaPlayerController,ae as NestedFormController,re as PasswordConfirmController,ne as PasswordPeekController,le as RemoteFormController,he as ResponsiveIframeBodyController,oe as ResponsiveIframeWrapperController,de as ScrollIntoFocusController,ue as ScrollToBottomController,me as ScrollToController,ge as ScrollToTopController,pe as SelfDestructController,ve as StickyController,fe as TableSortController,_e as TableTruncateController,be as TeleportController,Ee as TimeoutController,we as ToggleClassController,Ve as TurboFrameRCController,Te as TurboFrameRefreshController,Le 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 r(){return(r=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"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}})}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(r({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 l extends n{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")}}l.values={key:String};class o extends n{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,"appearance:appear")}away(){this.dispatch(this.el,"appearance:away")}_handleVisibility(){this._documentIsActive()?this.appear():this.away()}_documentIsActive(){return"visible"==document.visibilityState&&document.hasFocus()}}class h extends n{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")})}}h.targets=["replace"],h.values={endpoint:String,errorMessage:String,selector:String};class c extends n{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(){this.dispatch(this.el,"submit")}}const d=(e,t)=>{const s=e[t];return"function"==typeof s?s:(...e)=>{}},u=(e,t,s)=>{let i=e;return!0===s?i=`${t.identifier}:${e}`:"string"==typeof s&&(i=`${s}:${e}`),i},m=(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})},g={dispatchEvent:!0,eventPrefix:!0},p=(e,t={})=>{const{dispatchEvent:s,eventPrefix:i}=Object.assign({},g,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,d(e,"appear").call(e,t),s){const s=u("appear",e,i),r=m(s,null,{controller:e,entry:t});a.dispatchEvent(r)}})(r):e.isVisible&&(t=>{if(e.isVisible=!1,d(e,"disappear").call(e,t),s){const s=u("disappear",e,i),r=m(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},f={debug:!1,logger:console};class _{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 _{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=()=>{d(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{d(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 _{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=>{d(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,t={})=>{const s=new E(e,t);return[s.observe,s.unobserve]},y=e=>{const t=t=>{const{innerWidth:s,innerHeight:i}=window,a={height:i||Infinity,width:s||Infinity,event:t};d(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]},V=(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 T extends n{initialize(){this._handler=this._handler.bind(this)}connect(){y(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 L extends n{initialize(){this._updateCharCount=this._updateCharCount.bind(this)}connect(){requestAnimationFrame(()=>{this.inputTarget.addEventListener("input",this._updateCharCount),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}}L.targets=["input","output"],L.values={min:Number,max:Number},L.classes=["error"];class k extends n{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(!x(e))throw new Error("Can't handle confirmation on attached element");e.addEventListener("click",this.confirm)}})}disconnect(){let e=this.el;C(e)?e.removeEventListener("submit",this.confirm):x(e)&&e.removeEventListener("click",this.confirm)}confirm(e){window.confirm(this._message)||(e.preventDefault(),this.dispatch(this.el,"confirm:cancelled"))}}N.values={message:String};class O extends n{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()}}O.values={_message:String};class H extends n{connect(){console.log("Debug Controller",this,this.testTargets)}}H.targets=["test"];class z extends n{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 M(e)?e.checked:e.value}_getElementLoadValue(){let e=this.el,t=e.getAttribute(this._cacheAttrName);return M(e)?null==t?e.defaultChecked:"true"==t:(null!==t||I(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);M(e)?(e.setAttribute(this._cacheAttrName,e.checked.toString()),e.checked=null==t?e.defaultChecked:"true"==t):I(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()&&M(e)?e.setAttribute(this._cacheAttrName,e.checked.toString()):e.setAttribute(this._cacheAttrName,e.value.toString())}}class $ extends n{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 M(e)?e.checked:e.value}_getElementLoadValue(e){let t=e.getAttribute(this._cacheAttrName);return M(e)?null==t?e.defaultChecked:"true"==t:(null!==t||I(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)&&M(e)?e.setAttribute(this._cacheAttrName,e.checked.toString()):e.setAttribute(this._cacheAttrName,e.value.toString())}_restoreElementFromLoadValue(e){let t=e.getAttribute(this._cacheAttrName);M(e)?(e.setAttribute(this._cacheAttrName,e.checked.toString()),e.checked=null==t?e.defaultChecked:"true"==t):I(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=>e.hasAttribute("data-dirty"))?this.el.setAttribute("data-dirty","true"):this.el.removeAttribute("data-dirty")}}class R extends n{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})}}R.targets=["disabler","disable"],R.values={clear:Boolean};class B extends n{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 A(e)&&"submit"==e.type||D(e)?e.disabled:"true"==e.dataset.disabled}_getElText(e){return A(e)&&"submit"==e.type?e.value:e.innerText}_setElText(e,t){A(e)&&"submit"==e.type?e.value=t:(D(e)||x(e))&&(e.innerText=t)}_disable(e){A(e)&&"submit"==e.type||D(e)?e.disabled=!0:e.dataset.disabled="true"}_enable(e){A(e)&&"submit"==e.type||D(e)?e.disabled=!1:e.dataset.disabled=void 0}}B.values={message:String,timeout:Number};class F extends n{dismiss(){this.el.remove()}}class q extends n{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")}}q.targets=["element"],q.values={id:String,attributes:String,restoreOnLoad:Boolean};class j extends n{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(){w(this,{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)}}j.classes=["empty","notEmpty"],j.values={scopeSelector:String};class P extends n{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})}}P.targets=["enabler","enable"],P.values={clear:Boolean};class W extends n{connect(){let e=this.el;e.onerror=()=>{this.hasPlaceholderValue?e.src=this.placeholderValue:e.style.display="none"}}}W.values={placeholder:String};class U extends n{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()}}U.targets=["form"];class J extends n{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&&(A(s)&&"checkbox"==s.type?e[this._formIdentifier][s.name]=s.checked:A(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&&(A(s)&&"checkbox"==s.type?s.checked=e[s.name]:A(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")}}J.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};class Y extends n{get _threshold(){return this.hasThresholdValue?this.thresholdValue.split(",").map(e=>Number.parseFloat(e.trim())).filter(e=>e>=0&&e<=1):[0,1]}connect(){p(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}})}}Y.values={threshold:String};class G extends n{constructor(){super(...arguments),this._intervalHandle=null}initialize(){this._interval=this._interval.bind(this)}connect(){requestAnimationFrame(()=>{this._intervalHandle=window.setInterval(this._interval,1e3*this.secondsValue)})}disconnect(){this._intervalHandle&&window.clearInterval(this._intervalHandle)}_interval(){this.dispatch(this.el,"interval:action")}}G.values={seconds:Number};class K extends h{connect(){let e=this.el;"IntersectionObserver"in window?[this.observe,this.unobserve]=p(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 X;async function Z(e,{behavior:t="smooth",block:s="start",inline:i="nearest"}={}){"smooth"!=t||Q||await async function(){const{polyfill:e}=await import("smoothscroll-polyfill");X||(X=!0,e())}(),e.scrollIntoView({behavior:t,block:s,inline:i})}function ee(e){if(!e)return null;const t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:ee(e.parentElement)||document.body}class te extends n{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(),Z(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,Z(this.el,{behavior:"smooth",block:"end"}).catch(()=>this.el.scrollIntoView(!1)))}}te.values={src:String,srcSet:String,sizes:String},te.classes=["modal","image"];class se extends n{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=""))}}se.targets=["input","error"],se.values={max:Number,message:String};class ie extends n{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}}ie.targets=["media"];class ae extends n{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`")}}ae.targets=["target","template"],ae.values={insertMode:String,wrapperClass:String};class re extends n{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)))}}re.targets=["password"],re.classes=["error"];class ne extends n{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()}}ne.targets=["password"];class le extends n{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)}}le.targets=[],le.values={selector:String};class oe extends n{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 he extends n{connect(){var e,t,s;window.self!==window.top&&(y(this),t={},null===(s=(e=this).constructor.debounces)||void 0===s||s.forEach(s=>{if("string"==typeof s&&(e[s]=V(e[s],null==t?void 0:t.wait)),"object"==typeof s){const{name:i,wait:a}=s;if(!i)return;e[i]=V(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)}}he.debounces=["postUpdate"];class ce extends n{_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 r=new RegExp(`(s|^)${this.identifier}\\..+?(s|$)`,"g");e.dataset.target=(null==(s=e.dataset.target)?void 0:s.replaceAll(r,""))||"",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(r,""))||"",delete e.dataset[a(`${this.identifier}-action`)],""==e.dataset.action&&delete e.dataset.action;let n=this.constructor.values;n&&Object.keys(n).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 de extends ce{connect(){requestAnimationFrame(()=>{Z(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()})}}de.values={behavior:String,block:String,inline:String};class ue extends n{scroll(e){let t;null==e||e.preventDefault(),t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ee(this.el),null!=t&&Z(t,{behavior:"smooth",block:"end"}).catch(()=>t.scrollIntoView(!1))}}ue.values={mode:String};class me extends n{scroll(){let 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(()=>e.scrollIntoView()):console.warn(`Could not find target for '${this.selectorValue}'`)}}me.values={selector:String,behavior:String,block:String,inline:String};class ge extends n{scroll(e){let t;null==e||e.preventDefault(),t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ee(this.el),null!=t&&Z(t,{behavior:"smooth",block:"start"}).catch(()=>t.scrollIntoView(!1))}}ge.values={mode:String};class pe extends n{constructor(){super(...arguments),this._timeout=null}connect(){requestAnimationFrame(()=>{this._timeout=setTimeout(()=>this.el.remove(),1e3*this.secondsValue)})}disconnect(){this._timeout&&clearTimeout(this._timeout)}}pe.values={seconds:Number};class ve extends n{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)}}ve.classes=["stuck"],ve.values={mode:String};class fe extends n{constructor(){super(...arguments),this._lastIndex=null,this._reverse=!1}get _tableHead(){let e=this.el.tHead;if(null==e)throw new Error("Expected table to have a element.");return e}get _tableHeaders(){let e=this._tableHead.rows;if(0==e.length)throw new Error("Expected table to have a 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}}fe.values={startSort:Number};class _e extends n{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(){w(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)}}_e.targets=["showMore"],_e.values={limit:Number,truncated:Boolean};class be extends ce{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()}}be.values={target:String,insert:String,immediate:Boolean};class Ee extends n{constructor(){super(...arguments),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")}}Ee.values={seconds:Number};class we extends n{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: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=u("click:outside",e,r),s=m(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))}}function ye(e){return"TURBO-FRAME"==e.nodeName}we.targets=["toggle"],we.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};class Ve extends n{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(ye(e))return e;throw new Error(`Element targeted by ID '${this.frameIdValue}'`)}_getSrc(){let 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")}}Ve.values={frameId:String,src:String,loadingMessage:String};class Te extends n{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(!ye(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}}Te.values={interval:Number,poll:Boolean};class Le extends n{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}}Le.targets=["input","output"],Le.values={min:Number,max:Number},Le.classes=["error"];export{l as AnchorSpyController,o as AppearanceController,h as AsyncBlockController,c as AutoSubmitFormController,T as AutosizeController,n as BaseController,L as CharCountController,k as CheckboxSelectAllController,S as ClipboardController,N as ConfirmController,O as ConfirmNavigationController,H as DebugController,z as DetectDirtyController,$ as DetectDirtyFormController,R as DisableInputsController,B as DisableWithController,F as DismissableController,q as ElementSaveController,j as EmptyDomController,P as EnableInputsController,W as FallbackImageController,U as FormRcController,J as FormSaveController,Y as IntersectionController,G as IntervalController,K as LazyBlockController,te as LightboxImageController,se as LimitedSelectionCheckboxesController,ie as MediaPlayerController,ae as NestedFormController,re as PasswordConfirmController,ne as PasswordPeekController,le as RemoteFormController,he as ResponsiveIframeBodyController,oe as ResponsiveIframeWrapperController,de as ScrollIntoFocusController,ue as ScrollToBottomController,me as ScrollToController,ge as ScrollToTopController,pe as SelfDestructController,ve as StickyController,fe as TableSortController,_e as TableTruncateController,be as TeleportController,Ee as TimeoutController,we as ToggleClassController,Ve as TurboFrameRCController,Te as TurboFrameRefreshController,Le 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 7a2086f9..13471bbc 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/utilities/base_controller.ts","../src/controllers/anchor_spy_controller.ts","../src/controllers/utility/appearance_controller.ts","../src/controllers/async_block_controller.ts","../src/controllers/forms/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/controllers/forms/autosize_controller.ts","../src/controllers/forms/char_count_controller.ts","../src/controllers/forms/checkbox_select_all_controller.ts","../src/controllers/clipboard_controller.ts","../src/utilities/elements.ts","../src/controllers/confirm_controller.ts","../src/controllers/confirm_navigation_controller.ts","../src/controllers/debug_controller.ts","../src/controllers/forms/detect_dirty_controller.ts","../src/controllers/forms/detect_dirty_form_controller.ts","../src/controllers/forms/disable_inputs_controller.ts","../src/controllers/disable_with_controller.ts","../src/controllers/dismissable_controller.ts","../src/controllers/element_save_controller.ts","../src/controllers/empty_dom_controller.ts","../src/controllers/forms/enable_inputs_controller.ts","../src/controllers/media/fallback_image_controller.ts","../src/controllers/forms/form_rc_controller.ts","../src/controllers/forms/form_save_controller.ts","../src/controllers/utility/intersection_controller.ts","../src/controllers/utility/interval_controller.ts","../src/controllers/lazy_block_controller.ts","../src/utilities/scroll.ts","../src/controllers/media/lightbox_image_controller.ts","../src/controllers/forms/limited_selection_checkboxes_controller.ts","../src/controllers/media/media_player_controller.ts","../src/controllers/forms/nested_form_controller.ts","../src/controllers/forms/password_confirm_controller.ts","../src/controllers/forms/password_peek_controller.ts","../src/controllers/forms/remote_form_controller.ts","../src/controllers/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/controllers/scroll/scroll_into_focus_controller.ts","../src/controllers/scroll/scroll_to_bottom_controller.ts","../src/controllers/scroll/scroll_to_controller.ts","../src/controllers/scroll/scroll_to_top_controller.ts","../src/controllers/self_destruct_controller.ts","../src/controllers/sticky_controller.ts","../src/controllers/tables/table_sort_controller.ts","../src/controllers/tables/table_truncate_controller.ts","../src/controllers/teleport_controller.ts","../src/controllers/utility/timeout_controller.ts","../src/controllers/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/controllers/turbo_frame_rc_controller.ts","../src/controllers/turbo_frame_refresh_controller.ts","../src/controllers/forms/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 this.logEvent(eventName, event, element);\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 logEvent(eventName: string, event: CustomEvent, element: HTMLElement) {\n // @ts-ignore\n if (!this.application.debug) {\n return;\n }\n let logger = console;\n logger.groupCollapsed(`%c${this.identifier} %c${eventName}%c`, \"color: #3B82F6\", \"color: #0be000\", \"color: unset\");\n logger.log({element});\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 \"logEvent\":\n case \"dispatch\":\n case \"data\":\n case \"valueDescriptorMap\":\n case \"mutate\":\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 if (/^.*?Classes$/.test(prop)) {\n return false;\n }\n\n return true;\n}\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class AnchorSpyController extends BaseController {\r\n static values = {key: String};\r\n\r\n declare readonly keyValue: string;\r\n\r\n get _key(): string {\r\n return this.keyValue.replaceAll('#', '');\r\n }\r\n\r\n get _anchor(): string {\r\n return window.location.hash.substr(1);\r\n }\r\n\r\n set _anchor(value: string) {\r\n window.location.hash = value;\r\n }\r\n\r\n initialize() {\r\n this._checkAnchor = this._checkAnchor.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._checkAnchor();\r\n window.addEventListener(\"hashchange\", this._checkAnchor);\r\n });\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"hashchange\", this._checkAnchor);\r\n }\r\n\r\n write(event?: Event) {\r\n event?.preventDefault();\r\n this._anchor = this._key;\r\n }\r\n\r\n private _checkAnchor() {\r\n if (this._key === this._anchor) {\r\n this.dispatch(this.el, \"anchor-spy:active\");\r\n } else {\r\n this.dispatch(this.el, \"anchor-spy:inactive\");\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 requestAnimationFrame(() => {\r\n this._handleVisibility();\r\n });\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 private _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n private _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/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 \"../../utilities/base_controller\";\n\nexport class AutoSubmitFormController extends BaseController {\n\n initialize() {\n this.submit = this.submit.bind(this);\n }\n\n connect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.submit));\n }\n\n disconnect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.submit));\n }\n\n private submit() {\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 \"../../utilities/base_controller\";\n\nexport class AutosizeController extends BaseController {\n\n initialize() {\n this._handler = this._handler.bind(this);\n }\n\n connect() {\n useWindowResize(this);\n requestAnimationFrame(() => {\n this._handler();\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 });\n }\n\n disconnect() {\n this.el.removeEventListener(\"input\", this._handler);\n this.el.removeEventListener(\"focus\", 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 \"../../utilities/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 requestAnimationFrame(() => {\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\n this._updateCharCount();\n });\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 '../../utilities/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 \"../utilities/base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"source\", \"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 '../utilities/base_controller';\nimport {isHTMLAnchorElement, isHTMLFormElement} 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 disconnect() {\n let element = this.el;\n if (isHTMLFormElement(element)) {\n element.removeEventListener(\"submit\", this.confirm);\n } else if (isHTMLAnchorElement(element)) {\n element.removeEventListener(\"click\", this.confirm);\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 \"../utilities/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.allowSubmit = this.allowSubmit.bind(this);\n this.confirmNavigation = this.confirmNavigation.bind(this);\n this.confirmTurboNavigation = this.confirmTurboNavigation.bind(this);\n }\n\n connect() {\n window.onbeforeunload = () => this._message;\n window.addEventListener(\"popstate\", this.confirmNavigation);\n window.addEventListener(\"submit\", this.allowSubmit);\n window.addEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\n window.addEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\n }\n\n disconnect() {\n window.removeEventListener(\"popstate\", this.confirmNavigation);\n window.onbeforeunload = null;\n window.removeEventListener(\"submit\", this.allowSubmit);\n window.removeEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\n window.removeEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\n }\n\n allowSubmit(_event: Event) {\n window.removeEventListener(\"popstate\", this.confirmNavigation);\n window.onbeforeunload = null;\n }\n\n confirmNavigation(_event: PopStateEvent) {\n return false;\n }\n\n confirmTurboNavigation(event: Event) {\n if (!confirm(this._message)) {\n event.preventDefault();\n }\n }\n\n}\n","import {BaseController} from \"../utilities/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 \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyController extends BaseController {\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._restoreElementFromLoadValue();\r\n }\r\n\r\n private _getElementValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(): boolean {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkDirty() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (this._isElementDirty()) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(): boolean {\r\n return this._getElementValue() !== this._getElementLoadValue();\r\n }\r\n\r\n private _restoreElementFromLoadValue() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (!this._elementHasCachedLoadValue() && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyFormController extends BaseController {\r\n\r\n get _formElements(): Array {\r\n return Array.from(this.el.querySelectorAll('input, select, textarea'));\r\n }\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._formElements.forEach(element => this._restoreElementFromLoadValue(element));\r\n }\r\n\r\n private _getElementValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (this._isElementDirty(element)) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return this._getElementValue(element) !== this._getElementLoadValue(element);\r\n }\r\n\r\n private _cacheElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (!this._elementHasCachedLoadValue(element) && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n\r\n private _restoreElementFromLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n this._formElements.forEach(el => this._cacheElementLoadValue(el));\r\n }\r\n\r\n private _checkDirty(): void {\r\n this._formElements.forEach(el => this._checkElementDirty(el));\r\n if (this._formElements.some(el => isDirty(el))) {\r\n this.el.setAttribute(\"data-dirty\", \"true\");\r\n } else {\r\n this.el.removeAttribute(\"data-dirty\");\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/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 '../utilities/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 \"../utilities/base_controller\";\n\nexport class DismissableController extends BaseController {\n\n dismiss() {\n this.el.remove();\n }\n\n}\n","import {BaseController} from '../utilities/base_controller';\nimport _get from \"lodash-es/get\";\nimport _set from \"lodash-es/set\";\n\nexport class ElementSaveController extends BaseController {\n\n static targets = [\n \"element\",\n ];\n static values = {\n id: String,\n attributes: String,\n restoreOnLoad: Boolean,\n };\n declare readonly hasElementTarget: boolean;\n declare readonly elementTarget: HTMLElement;\n declare readonly elementTargets: HTMLElement[];\n declare readonly idValue: string;\n declare readonly attributesValue: string;\n declare readonly hasIdValue: boolean;\n declare readonly restoreOnLoadValue: boolean;\n declare readonly hasRestoreOnLoadValue: boolean;\n\n get _id() {\n if (this.hasIdValue) {\n return this.idValue;\n }\n let elementID = this.el.id;\n\n if (elementID !== \"\") {\n return elementID;\n } else {\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. `);\n }\n }\n\n get _uniqueIdentifier() {\n const url = location.href;\n return `${url} ${this._id}`;\n }\n\n get _restoreOnLoad() {\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\n }\n\n get _element(): HTMLElement {\n return this.hasElementTarget ? this.elementTarget : this.el;\n }\n\n connect() {\n requestAnimationFrame(() => {\n if (this._restoreOnLoad) {\n this.restore();\n }\n });\n }\n\n clear(event?: Event) {\n if (event) {\n event.preventDefault();\n }\n localStorage.removeItem(this._uniqueIdentifier);\n this.dispatch(this._element, `element-save:cleared`);\n }\n\n save(event?: Event) {\n if (event) {\n event.preventDefault();\n }\n let element = this._element;\n let attributes = this.attributesValue.split(\" \");\n let data: { [idx: string]: any } = {};\n attributes.forEach((attr: string) => data[attr] = _get(element, attr));\n localStorage.setItem(this._uniqueIdentifier, JSON.stringify(data));\n this.dispatch(element, `element-save:save:success`);\n }\n\n restore(event?: Event) {\n if (event) {\n event.preventDefault();\n }\n let element = this._element;\n if (localStorage.getItem(this._uniqueIdentifier)) {\n const savedData = JSON.parse(localStorage.getItem(this._uniqueIdentifier)!); // get and parse the saved data from localStorage\n Object.keys(savedData).forEach((attr: string) => {\n _set(element as HTMLElement, attr, savedData[attr]);\n });\n this.dispatch(element, `element-save:restore:success`);\n } else {\n this.dispatch(element, `element-save:restore:empty`);\n }\n }\n\n}\n","import {useMutation} from \"stimulus-use\";\nimport {BaseController} from \"../utilities/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 \"../../utilities/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 \"../../utilities/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 '../../utilities/base_controller';\r\n\r\nexport class FormRcController extends BaseController {\r\n\r\n static targets = [\"form\"];\r\n\r\n declare readonly formTarget: HTMLFormElement;\r\n\r\n submit(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"submit\");\r\n this.formTarget.submit();\r\n }\r\n\r\n reset(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"reset\");\r\n this.formTarget.reset();\r\n }\r\n\r\n}","import {BaseController} from '../../utilities/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 \"../../utilities/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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class IntervalController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _intervalHandle: null | number = null;\r\n\r\n initialize() {\r\n this._interval = this._interval.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._intervalHandle = window.setInterval(this._interval, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._intervalHandle) {\r\n window.clearInterval(this._intervalHandle);\r\n }\r\n }\r\n\r\n _interval() {\r\n this.dispatch(this.el, \"interval:action\");\r\n }\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","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 \"../../utilities/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 \"../../utilities/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 \"../../utilities/base_controller\";\r\n\r\nexport class MediaPlayerController extends BaseController {\r\n\r\n static targets = [\"media\"];\r\n\r\n declare readonly mediaTarget: HTMLMediaElement;\r\n\r\n initialize() {\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n disconnect() {\r\n }\r\n\r\n async play(event?: Event) {\r\n event?.preventDefault();\r\n await this.mediaTarget.play();\r\n }\r\n\r\n pause(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.pause();\r\n }\r\n\r\n restart(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime = 0;\r\n }\r\n\r\n seek(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime += 5;\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 private _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 \"../../utilities/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 \"../../utilities/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 \"../../utilities/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 \"../utilities/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 \"../../utilities/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 \"../../utilities/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 \"../../utilities/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 \"../utilities/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 \"../utilities/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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableSortController extends BaseController {\r\n\r\n static values = {startSort: Number};\r\n\r\n declare readonly startSortValue: number;\r\n declare readonly hasStartSortValue: boolean;\r\n _lastIndex: number | null = null;\r\n _reverse: boolean = false;\r\n\r\n get _tableHead(): HTMLTableSectionElement {\r\n let head = (this.el as HTMLTableElement).tHead;\r\n if (head == null) {\r\n throw new Error('Expected table to have a element.');\r\n }\r\n return head;\r\n }\r\n\r\n get _tableHeaders(): HTMLTableHeaderCellElement[] {\r\n let rows = this._tableHead.rows;\r\n if (rows.length == 0) {\r\n throw new Error('Expected table to have a element with at least one row.');\r\n }\r\n return Array.from(rows[0].cells);\r\n }\r\n\r\n get _tableBody() {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n initialize() {\r\n this.sort = this.sort.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._tableHeaders.forEach(cell => cell.addEventListener(\"click\", this.sort));\r\n if (this.hasStartSortValue) {\r\n this._sortByColumn(this.startSortValue);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n this._tableHeaders.forEach(cell => cell.removeEventListener(\"click\", this.sort));\r\n }\r\n\r\n sort(event: Event) {\r\n event.preventDefault();\r\n let headerCell = event.target! as HTMLTableHeaderCellElement;\r\n let headerCellIndex = this._indexOfHeaderCell(headerCell);\r\n this._sortByColumn(headerCellIndex);\r\n }\r\n\r\n private _indexOfHeaderCell(cell: HTMLTableHeaderCellElement) {\r\n return this._tableHeaders.indexOf(cell);\r\n }\r\n\r\n private _sortByColumn(index: number) {\r\n this._reverse = index === this._lastIndex && !this._reverse;\r\n let frag = document.createDocumentFragment();\r\n let rows = this._tableRows;\r\n\r\n let newRows = rows.sort((row, otherRow) => {\r\n let cells = Array.from(row.cells);\r\n let otherCells = Array.from(otherRow.cells);\r\n\r\n // TODO: Handle colspans?\r\n let x = cells[index]?.innerText || \"\";\r\n let y = otherCells[index]?.innerText || \"\";\r\n\r\n let sortVal = x.localeCompare(y, \"en\", {sensitivity: \"base\", numeric: true, caseFirst: \"upper\"});\r\n\r\n if (row.dataset.sortTop || otherRow.dataset.sortBottom) {\r\n if (row.dataset.sortTop && otherRow.dataset.sortTop) {\r\n return sortVal;\r\n }\r\n return -1;\r\n }\r\n if (row.dataset.sortBottom || otherRow.dataset.sortTop) {\r\n if (row.dataset.sortBottom && otherRow.dataset.sortBottom) {\r\n return sortVal;\r\n }\r\n return 1;\r\n }\r\n\r\n if (this._reverse) {\r\n return sortVal > 0 ? -1 : 1;\r\n }\r\n return sortVal;\r\n });\r\n\r\n newRows.forEach(row => frag.appendChild(row));\r\n\r\n this._tableBody.innerHTML = \"\";\r\n this._tableBody.appendChild(frag);\r\n this._lastIndex = index;\r\n }\r\n\r\n}","import {useMutation} from \"stimulus-use\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableTruncateController extends BaseController {\r\n\r\n static targets = [\"showMore\"];\r\n static values = {\r\n limit: Number,\r\n truncated: Boolean,\r\n };\r\n\r\n declare readonly showMoreTarget: HTMLElement;\r\n declare limitValue: number;\r\n declare readonly hasLimitValue: boolean;\r\n declare truncatedValue: boolean;\r\n declare readonly hasTruncatedValue: boolean;\r\n\r\n get _truncated(): boolean {\r\n return this.hasTruncatedValue ? this.truncatedValue : false;\r\n }\r\n\r\n set _truncated(value) {\r\n this.truncatedValue = value;\r\n }\r\n\r\n get _tableBody(): HTMLTableSectionElement {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n get _limit(): number {\r\n return this.hasLimitValue ? this.limitValue : 20;\r\n }\r\n\r\n initialize() {\r\n this.truncate = this.truncate.bind(this);\r\n this.expand = this.expand.bind(this);\r\n }\r\n\r\n connect() {\r\n useMutation(this, {childList: true, element: this._tableBody});\r\n\r\n requestAnimationFrame(() => {\r\n this.truncate();\r\n this.showMoreTarget.addEventListener(\"click\", this.expand);\r\n });\r\n }\r\n\r\n truncate(event?: Event) {\r\n event?.preventDefault();\r\n this._truncated = true;\r\n if (this._tableRows.length >= this._limit) {\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\r\n } else {\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n }\r\n\r\n expand(event?: Event) {\r\n this._truncated = false;\r\n event?.preventDefault();\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n\r\n mutate(entries: MutationRecord[]) {\r\n if (this._truncated) {\r\n this._reTruncate();\r\n }\r\n }\r\n\r\n private _showElement(el: HTMLElement): void {\r\n el.style.display = \"\";\r\n }\r\n\r\n private _hideElement(el: HTMLElement): void {\r\n el.style.display = \"none\";\r\n }\r\n\r\n private _reTruncate() {\r\n this._tableRows.slice(0, this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TimeoutController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _timeoutHandle: null | number = null;\r\n\r\n initialize() {\r\n this._timeout = this._timeout.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._timeoutHandle = window.setTimeout(this._timeout, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n window.clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n _timeout() {\r\n this.dispatch(this.el, \"timeout\");\r\n }\r\n\r\n}","import {useClickOutside, useHover} from \"stimulus-use\";\nimport {BaseController} from \"../utilities/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 \"../utilities/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 \"../utilities/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 \"../../utilities/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 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"],"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","logEvent","dispatchEvent","functionName","application","debug","logger","console","groupCollapsed","identifier","groupEnd","AnchorSpyController","_key","keyValue","replaceAll","_anchor","window","location","hash","substr","value","initialize","_checkAnchor","bind","connect","requestAnimationFrame","addEventListener","disconnect","removeEventListener","write","preventDefault","key","String","AppearanceController","_handleVisibility","document","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","errorMessage","selector","AutoSubmitFormController","submit","forEach","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","useMutation","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","_checked","checkboxTargets","filter","checkbox","checked","_unchecked","_toggle","_refresh","hasSelectAllTarget","selectAllTarget","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","message","ConfirmNavigationController","_messageValue","allowSubmit","confirmNavigation","confirmTurboNavigation","onbeforeunload","_event","DebugController","testTargets","DetectDirtyController","_cacheAttrName","_checkDirty","_cacheLoadValues","restore","_restoreElementFromLoadValue","_getElementValue","_getElementLoadValue","getAttribute","defaultChecked","Array","from","option","defaultSelected","_elementHasCachedLoadValue","hasAttribute","_isElementDirty","setAttribute","removeAttribute","cacheValue","defaultValue","DetectDirtyFormController","_formElements","_checkElementDirty","_cacheElementLoadValue","some","DisableInputsController","toggle","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","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","_children","hasScopeSelectorValue","scopeSelectorValue","childList","checkEmpty","mutate","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","hasNotEmptyClass","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormRcController","formTarget","reset","FormSaveController","_formID","_formIdentifier","elements","_formData","_clearOnSubmit","hasClearOnSubmitValue","clearOnSubmitValue","_clear","clearOnSubmit","IntersectionController","_threshold","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","threshold","disappear","IntervalController","_interval","_intervalHandle","setInterval","secondsValue","clearInterval","seconds","LazyBlockController","smoothSupported","documentElement","smoothPolyfilled","scrollToElement","behavior","block","inline","async","polyfill","polyfillSmooth","scrollIntoView","getScrollParent","node","overflowY","getComputedStyle","parentElement","body","LightboxImageController","_src","hasSrcValue","srcValue","_srcSet","hasSrcSetValue","srcSetValue","srcset","_sizes","hasSizesValue","sizesValue","sizes","_modalClassName","hasModalClass","modalClass","_imageClassName","hasImageClass","imageClass","open","close","_dialog","image","className","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","showModal","srcSet","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","MediaPlayerController","mediaTarget","play","pause","restart","currentTime","seek","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","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","_selector","status","xhr","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","RegExp","substringIdentifierValueRegex","camelCase","action","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","StickyController","_mode","createMagicElement","_magicElement","intersectionRatio","hasStuckClass","stuckClass","TableSortController","_tableHead","head","tHead","_tableHeaders","rows","cells","_tableBody","tBodies","_tableRows","sort","cell","hasStartSortValue","_sortByColumn","startSortValue","headerCellIndex","_indexOfHeaderCell","index","_reverse","_lastIndex","frag","createDocumentFragment","row","otherRow","otherCells","x","y","sortVal","localeCompare","sensitivity","numeric","caseFirst","sortTop","sortBottom","startSort","TableTruncateController","_truncated","hasTruncatedValue","truncatedValue","_limit","hasLimitValue","limitValue","truncate","expand","showMoreTarget","_hideElement","_showElement","_reTruncate","limit","truncated","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","TimeoutController","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","refresh","intervalValue","interval","poll","WordCountController","updateWordCount","wordCount","matches","match"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stimulus-library.modern.js","sources":["../src/utilities/base_controller.ts","../src/controllers/anchor_spy_controller.ts","../src/controllers/utility/appearance_controller.ts","../src/controllers/async_block_controller.ts","../src/controllers/forms/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/controllers/forms/autosize_controller.ts","../src/controllers/forms/char_count_controller.ts","../src/controllers/forms/checkbox_select_all_controller.ts","../src/controllers/clipboard_controller.ts","../src/utilities/elements.ts","../src/controllers/confirm_controller.ts","../src/controllers/confirm_navigation_controller.ts","../src/controllers/debug_controller.ts","../src/controllers/forms/detect_dirty_controller.ts","../src/controllers/forms/detect_dirty_form_controller.ts","../src/controllers/forms/disable_inputs_controller.ts","../src/controllers/disable_with_controller.ts","../src/controllers/dismissable_controller.ts","../src/controllers/element_save_controller.ts","../src/controllers/empty_dom_controller.ts","../src/controllers/forms/enable_inputs_controller.ts","../src/controllers/media/fallback_image_controller.ts","../src/controllers/forms/form_rc_controller.ts","../src/controllers/forms/form_save_controller.ts","../src/controllers/utility/intersection_controller.ts","../src/controllers/utility/interval_controller.ts","../src/controllers/lazy_block_controller.ts","../src/utilities/scroll.ts","../src/controllers/media/lightbox_image_controller.ts","../src/controllers/forms/limited_selection_checkboxes_controller.ts","../src/controllers/media/media_player_controller.ts","../src/controllers/forms/nested_form_controller.ts","../src/controllers/forms/password_confirm_controller.ts","../src/controllers/forms/password_peek_controller.ts","../src/controllers/forms/remote_form_controller.ts","../src/controllers/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/controllers/scroll/scroll_into_focus_controller.ts","../src/controllers/scroll/scroll_to_bottom_controller.ts","../src/controllers/scroll/scroll_to_controller.ts","../src/controllers/scroll/scroll_to_top_controller.ts","../src/controllers/self_destruct_controller.ts","../src/controllers/sticky_controller.ts","../src/controllers/tables/table_sort_controller.ts","../src/controllers/tables/table_truncate_controller.ts","../src/controllers/teleport_controller.ts","../src/controllers/utility/timeout_controller.ts","../src/controllers/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/controllers/turbo_frame_rc_controller.ts","../src/controllers/turbo_frame_refresh_controller.ts","../src/controllers/forms/word_count_controller.ts"],"sourcesContent":["import {Context, Controller} from \"stimulus\";\r\n\r\nexport class BaseController extends Controller {\r\n\r\n constructor(context: Context) {\r\n super(context);\r\n return new Proxy(this, {\r\n get: (obj, prop) => {\r\n let returnVal = Reflect.get(obj, prop);\r\n let self = this;\r\n if (logProperty(prop.toString())) {\r\n if (typeof returnVal == \"function\") {\r\n return new Proxy(returnVal, {\r\n apply(target: any, thisArg: any, argArray?: any): any {\r\n self.log(prop.toString(), {\r\n args: argArray,\r\n });\r\n return Reflect.apply(target, thisArg, argArray);\r\n },\r\n });\r\n } else {\r\n this.log(prop.toString());\r\n }\r\n }\r\n return returnVal;\r\n },\r\n });\r\n }\r\n\r\n get el(): HTMLElement {\r\n return this.element as HTMLElement;\r\n }\r\n\r\n get isTurboPreview(): boolean {\r\n return document.documentElement.hasAttribute('data-turbo-preview') || document.documentElement.hasAttribute('data-turbolinks-preview');\r\n }\r\n\r\n get isTurbolinksPreview(): boolean {\r\n return this.isTurboPreview;\r\n }\r\n\r\n get csrfToken(): string | null {\r\n return this.metaValue('csrf-token');\r\n }\r\n\r\n metaValue(name: string): string | null {\r\n const element = document.head.querySelector(`meta[name=\"${name}\"]`);\r\n return element?.getAttribute('content') || null;\r\n }\r\n\r\n dispatch(element: HTMLElement, eventName: string, options: CustomEventInit = {}) {\r\n let mergedOptions = Object.assign({}, {bubbles: true, cancelable: true, detail: {target: element}}, options);\r\n if (!!mergedOptions.detail.target) {\r\n mergedOptions.detail.target = element;\r\n }\r\n let event = new CustomEvent(eventName, mergedOptions);\r\n this.logEvent(eventName, event, element);\r\n element.dispatchEvent(event);\r\n }\r\n\r\n log(functionName: string, args: {} = {}): void {\r\n // @ts-ignore\r\n if (!this.application.debug) {\r\n return;\r\n }\r\n let logger = console;\r\n logger.groupCollapsed(`%c${this.identifier} %c#${functionName}`, \"color: #3B82F6\", \"color: unset\");\r\n logger.log({\r\n element: this.element,\r\n ...args,\r\n });\r\n logger.groupEnd();\r\n }\r\n\r\n logEvent(eventName: string, event: CustomEvent, element: HTMLElement) {\r\n // @ts-ignore\r\n if (!this.application.debug) {\r\n return;\r\n }\r\n let logger = console;\r\n logger.groupCollapsed(`%c${this.identifier} %c${eventName}%c`, \"color: #3B82F6\", \"color: #0be000\", \"color: unset\");\r\n logger.log({element});\r\n logger.groupEnd();\r\n }\r\n\r\n}\r\n\r\nfunction logProperty(prop: string): boolean {\r\n switch (prop) {\r\n case \"application\":\r\n case \"el\":\r\n case \"element\":\r\n case \"constructor\":\r\n case \"initialize\":\r\n case \"log\":\r\n case \"logEvent\":\r\n case \"dispatch\":\r\n case \"data\":\r\n case \"valueDescriptorMap\":\r\n case \"mutate\":\r\n case \"identifier\":\r\n return false;\r\n }\r\n\r\n if (/^_.*?$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Target(s)?$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Value$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?ValueChanged$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Class$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Classes$/.test(prop)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class AnchorSpyController extends BaseController {\r\n static values = {key: String};\r\n\r\n declare readonly keyValue: string;\r\n\r\n get _key(): string {\r\n return this.keyValue.replaceAll('#', '');\r\n }\r\n\r\n get _anchor(): string {\r\n return window.location.hash.substr(1);\r\n }\r\n\r\n set _anchor(value: string) {\r\n window.location.hash = value;\r\n }\r\n\r\n initialize() {\r\n this._checkAnchor = this._checkAnchor.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._checkAnchor();\r\n window.addEventListener(\"hashchange\", this._checkAnchor);\r\n });\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"hashchange\", this._checkAnchor);\r\n }\r\n\r\n write(event?: Event) {\r\n event?.preventDefault();\r\n this._anchor = this._key;\r\n }\r\n\r\n private _checkAnchor() {\r\n if (this._key === this._anchor) {\r\n this.dispatch(this.el, \"anchor-spy:active\");\r\n } else {\r\n this.dispatch(this.el, \"anchor-spy:inactive\");\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 requestAnimationFrame(() => {\r\n this._handleVisibility();\r\n });\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 private _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n private _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class AsyncBlockController extends BaseController {\r\n static targets = [\"replace\"];\r\n static values = {endpoint: String, errorMessage: String, selector: String};\r\n\r\n declare readonly replaceTarget: HTMLElement;\r\n declare readonly hasReplaceTarget: boolean;\r\n declare readonly endpointValue: string;\r\n\r\n declare readonly hasSelectorValue: boolean;\r\n declare readonly selectorValue: string;\r\n\r\n declare readonly hasErrorMessageValue: boolean;\r\n declare readonly errorMessageValue: string;\r\n\r\n get _errorMessage(): string {\r\n return this.hasErrorMessageValue ? this.errorMessageValue : \"This content failed to load\";\r\n }\r\n\r\n // This is a simple controller to load a block of content when the page loads.\r\n // It should be used to give a quick initial response before calling out to an\r\n // an AJAX endpoint to do some expensive work.\r\n connect() {\r\n this.loadContent();\r\n }\r\n\r\n loadContent() {\r\n let self = this;\r\n let el = this.hasReplaceTarget ? this.replaceTarget : this.el;\r\n fetch(this.endpointValue)\r\n .then((response) => response.text())\r\n .then((html) => {\r\n let newEl = document.createElement(\"div\");\r\n newEl.innerHTML = html;\r\n if (this.hasSelectorValue) {\r\n let selectedContent = newEl.querySelectorAll(this.selectorValue);\r\n el.replaceWith(...selectedContent);\r\n } else {\r\n el.replaceWith(...newEl.children);\r\n }\r\n // Trigger event to show block has loaded\r\n self.dispatch(el, \"ajax:success\");\r\n })\r\n .catch(err => {\r\n el.replaceWith(this._errorMessage);\r\n self.dispatch(el, \"ajax:error\");\r\n })\r\n .finally(() => {\r\n self.dispatch(el, \"ajax:complete\");\r\n });\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class AutoSubmitFormController extends BaseController {\r\n\r\n initialize() {\r\n this.submit = this.submit.bind(this);\r\n }\r\n\r\n connect() {\r\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.submit));\r\n }\r\n\r\n disconnect() {\r\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.submit));\r\n }\r\n\r\n private submit() {\r\n // Trigger synthetic \"submit\" event on form\r\n this.dispatch((this.el), \"submit\");\r\n }\r\n}\r\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\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class AutosizeController extends BaseController {\r\n\r\n initialize() {\r\n this._handler = this._handler.bind(this);\r\n }\r\n\r\n connect() {\r\n useWindowResize(this);\r\n requestAnimationFrame(() => {\r\n this._handler();\r\n let target = this.el as HTMLTextAreaElement;\r\n target.style.resize = \"none\";\r\n target.style.boxSizing = \"border-box\";\r\n target.addEventListener(\"input\", this._handler);\r\n target.addEventListener(\"focus\", this._handler);\r\n });\r\n }\r\n\r\n disconnect() {\r\n this.el.removeEventListener(\"input\", this._handler);\r\n this.el.removeEventListener(\"focus\", this._handler);\r\n }\r\n\r\n windowResize() {\r\n this._handler();\r\n }\r\n\r\n private _handler() {\r\n this.autosize(this.el as HTMLTextAreaElement);\r\n };\r\n\r\n private autosize(element: HTMLTextAreaElement) {\r\n let offset = element.offsetHeight - element.clientHeight;\r\n element.style.height = \"auto\";\r\n element.style.height = element.scrollHeight + offset + \"px\";\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class CharCountController extends BaseController {\r\n\r\n static targets = [\"input\", \"output\"];\r\n static values = {min: Number, max: Number};\r\n static classes = [\"error\"];\r\n\r\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\r\n declare readonly outputTarget: HTMLElement;\r\n declare minValue: number;\r\n declare hasMinValue: boolean;\r\n declare maxValue: number;\r\n declare hasMaxValue: boolean;\r\n declare errorClass: string;\r\n declare hasErrorClass: boolean;\r\n\r\n initialize() {\r\n this._updateCharCount = this._updateCharCount.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\r\n this._updateCharCount();\r\n });\r\n }\r\n\r\n disconnect() {\r\n this.inputTarget.removeEventListener(\"input\", this._updateCharCount);\r\n }\r\n\r\n private _updateCharCount() {\r\n let charCount = this.inputTarget.value.length;\r\n this.outputTarget.innerText = charCount.toString();\r\n if (this.hasErrorClass) {\r\n if (this._isValidCount(charCount)) {\r\n this.outputTarget.classList.remove(this.errorClass);\r\n } else {\r\n this.outputTarget.classList.add(this.errorClass);\r\n }\r\n }\r\n }\r\n\r\n private _isValidCount(count: number) {\r\n let min = 0;\r\n let max = 99999;\r\n\r\n if (this.hasMinValue) {\r\n min = this.minValue;\r\n }\r\n\r\n if (this.hasMaxValue) {\r\n max = this.maxValue;\r\n }\r\n\r\n return count >= min && count <= max;\r\n }\r\n\r\n}\r\n","import {BaseController} from '../../utilities/base_controller';\r\n\r\nexport class CheckboxSelectAllController extends BaseController {\r\n static targets = ['selectAll', 'checkbox'];\r\n\r\n declare readonly hasSelectAllTarget: boolean;\r\n declare readonly selectAllTarget: HTMLInputElement;\r\n declare readonly checkboxTargets: HTMLInputElement[];\r\n\r\n private get _checked() {\r\n return this.checkboxTargets.filter(checkbox => checkbox.checked);\r\n }\r\n\r\n private get _unchecked() {\r\n return this.checkboxTargets.filter(checkbox => !checkbox.checked);\r\n }\r\n\r\n initialize() {\r\n this._toggle = this._toggle.bind(this);\r\n this._refresh = this._refresh.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n if (!this.hasSelectAllTarget) {\r\n return;\r\n }\r\n\r\n this.selectAllTarget.addEventListener('change', this._toggle);\r\n this.checkboxTargets.forEach(checkbox => checkbox.addEventListener('change', this._refresh));\r\n this._refresh();\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (!this.hasSelectAllTarget) {\r\n return;\r\n }\r\n\r\n this.selectAllTarget.removeEventListener('change', this._toggle);\r\n this.checkboxTargets.forEach((checkbox) => checkbox.removeEventListener('change', this._refresh));\r\n }\r\n\r\n private _toggle(event: Event) {\r\n event.preventDefault();\r\n let target = event.target as HTMLInputElement;\r\n this.checkboxTargets.forEach((checkbox) => checkbox.checked = target.checked);\r\n }\r\n\r\n private _refresh() {\r\n const checkboxesCount = this.checkboxTargets.length;\r\n const checkboxesCheckedCount = this._checked.length;\r\n\r\n this.selectAllTarget.checked = checkboxesCheckedCount > 0;\r\n this.selectAllTarget.indeterminate = checkboxesCheckedCount > 0 && checkboxesCheckedCount < checkboxesCount;\r\n }\r\n}","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"source\", \"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 {\r\n return element.nodeName == \"LINK\";\r\n}\r\n\r\nexport function isHTMLAnchorElement(element: Element): element is HTMLAnchorElement {\r\n return element.nodeName == \"A\";\r\n}\r\n\r\nexport function isHTMLFormElement(element: Element): element is HTMLFormElement {\r\n return element.nodeName == \"FORM\";\r\n}\r\n\r\nexport function isHTMLInputElement(element: Element): element is HTMLInputElement {\r\n return element.nodeName == \"INPUT\";\r\n}\r\n\r\nexport function isHTMLButtonElement(element: Element): element is HTMLButtonElement {\r\n return element.nodeName == \"BUTTON\";\r\n}\r\n\r\nexport function isHTMLSelectElement(element: Element): element is HTMLSelectElement {\r\n return element.nodeName == \"SELECT\";\r\n}\r\n\r\nexport function isHTMLImageElement(element: Element): element is HTMLImageElement {\r\n return element.nodeName == \"IMG\";\r\n}\r\n\r\nexport function isElementCheckable(element: Element): element is HTMLInputElement & { checked: boolean } {\r\n return isHTMLInputElement(element) && (element.type === \"radio\" || element.type === \"checkbox\");\r\n}\r\n","import {BaseController} from '../utilities/base_controller';\r\nimport {isHTMLAnchorElement, isHTMLFormElement} from \"../utilities/elements\";\r\n\r\nexport class ConfirmController extends BaseController {\r\n\r\n static values = {\r\n message: String,\r\n };\r\n\r\n declare readonly messageValue: string;\r\n declare readonly hasMessageValue: boolean;\r\n\r\n get _message(): string {\r\n return this.hasMessageValue ? this.messageValue : 'Are you sure?';\r\n }\r\n\r\n initialize() {\r\n this.confirm = this.confirm.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 element.addEventListener(\"submit\", this.confirm);\r\n } else if (isHTMLAnchorElement(element)) {\r\n element.addEventListener(\"click\", this.confirm);\r\n } else {\r\n throw new Error(\"Can't handle confirmation on attached element\");\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n let element = this.el;\r\n if (isHTMLFormElement(element)) {\r\n element.removeEventListener(\"submit\", this.confirm);\r\n } else if (isHTMLAnchorElement(element)) {\r\n element.removeEventListener(\"click\", this.confirm);\r\n }\r\n }\r\n\r\n confirm(event: Event) {\r\n if (!(window.confirm(this._message))) {\r\n event.preventDefault();\r\n this.dispatch(this.el, \"confirm:cancelled\");\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class ConfirmNavigationController extends BaseController {\r\n\r\n static values = {_message: String};\r\n\r\n declare readonly _messageValue: string;\r\n declare readonly hasMessageValue: boolean;\r\n\r\n get _message(): string {\r\n return this.hasMessageValue ? this._messageValue : \"Do you want to leave this page? Changes you made may not be saved\";\r\n }\r\n\r\n initialize() {\r\n this.allowSubmit = this.allowSubmit.bind(this);\r\n this.confirmNavigation = this.confirmNavigation.bind(this);\r\n this.confirmTurboNavigation = this.confirmTurboNavigation.bind(this);\r\n }\r\n\r\n connect() {\r\n window.onbeforeunload = () => this._message;\r\n window.addEventListener(\"popstate\", this.confirmNavigation);\r\n window.addEventListener(\"submit\", this.allowSubmit);\r\n window.addEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\r\n window.addEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"popstate\", this.confirmNavigation);\r\n window.onbeforeunload = null;\r\n window.removeEventListener(\"submit\", this.allowSubmit);\r\n window.removeEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\r\n window.removeEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\r\n }\r\n\r\n allowSubmit(_event: Event) {\r\n window.removeEventListener(\"popstate\", this.confirmNavigation);\r\n window.onbeforeunload = null;\r\n }\r\n\r\n confirmNavigation(_event: PopStateEvent) {\r\n return false;\r\n }\r\n\r\n confirmTurboNavigation(event: Event) {\r\n if (!confirm(this._message)) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class DebugController extends BaseController {\r\n\r\n static targets = [\"test\"];\r\n declare testTargets: HTMLElement[];\r\n\r\n connect() {\r\n console.log(\"Debug Controller\", this, this.testTargets);\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyController extends BaseController {\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._restoreElementFromLoadValue();\r\n }\r\n\r\n private _getElementValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(): boolean {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkDirty() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (this._isElementDirty()) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(): boolean {\r\n return this._getElementValue() !== this._getElementLoadValue();\r\n }\r\n\r\n private _restoreElementFromLoadValue() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (!this._elementHasCachedLoadValue() && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyFormController extends BaseController {\r\n\r\n get _formElements(): Array {\r\n return Array.from(this.el.querySelectorAll('input, select, textarea'));\r\n }\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._formElements.forEach(element => this._restoreElementFromLoadValue(element));\r\n }\r\n\r\n private _getElementValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (this._isElementDirty(element)) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return this._getElementValue(element) !== this._getElementLoadValue(element);\r\n }\r\n\r\n private _cacheElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (!this._elementHasCachedLoadValue(element) && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n\r\n private _restoreElementFromLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n this._formElements.forEach(el => this._cacheElementLoadValue(el));\r\n }\r\n\r\n private _checkDirty(): void {\r\n this._formElements.forEach(el => this._checkElementDirty(el));\r\n if (this._formElements.some(el => isDirty(el))) {\r\n this.el.setAttribute(\"data-dirty\", \"true\");\r\n } else {\r\n this.el.removeAttribute(\"data-dirty\");\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/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 '../utilities/base_controller';\r\nimport {isHTMLAnchorElement, isHTMLButtonElement, isHTMLInputElement} from \"../utilities/elements\";\r\n\r\nexport class DisableWithController extends BaseController {\r\n\r\n static values = {\r\n message: String,\r\n timeout: Number,\r\n };\r\n\r\n declare readonly messageValue: string;\r\n declare readonly hasMessageValue: boolean;\r\n declare readonly timeoutValue: number;\r\n declare readonly hasTimeoutValue: boolean;\r\n\r\n _cacheText?: string;\r\n _timeoutHandle?: ReturnType;\r\n\r\n get _message(): string {\r\n return this.hasMessageValue ? this.messageValue : 'Submitting...';\r\n }\r\n\r\n get _timeout(): number {\r\n return this.hasTimeoutValue ? this.timeoutValue : 1000;\r\n }\r\n\r\n initialize() {\r\n this.enable = this.enable.bind(this);\r\n this.disable = this.disable.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this.el.addEventListener(\"click\", this.disable);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n disable(event?: Event) {\r\n let element = this.el;\r\n\r\n if (this._isDisabled(element)) {\r\n event?.preventDefault();\r\n event?.stopImmediatePropagation();\r\n } else {\r\n this._cacheText = this._getElText(element);\r\n this._setElText(element, this._message);\r\n this._disable(element);\r\n setTimeout(this.enable, this._timeout);\r\n }\r\n }\r\n\r\n enable(event?: Event) {\r\n event?.preventDefault();\r\n let element = this.el;\r\n if (this._isDisabled(element)) {\r\n this._setElText(element, this._cacheText!);\r\n this._enable(element);\r\n }\r\n }\r\n\r\n _isDisabled(el: HTMLElement): boolean {\r\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\r\n return el.disabled;\r\n } else {\r\n return el.dataset.disabled == \"true\";\r\n }\r\n }\r\n\r\n _getElText(el: HTMLElement): string {\r\n if (isHTMLInputElement(el) && el.type == \"submit\") {\r\n return el.value;\r\n } else {\r\n return el.innerText;\r\n }\r\n }\r\n\r\n _setElText(el: HTMLElement, str: string) {\r\n if (isHTMLInputElement(el) && el.type == \"submit\") {\r\n el.value = str;\r\n } else if (isHTMLButtonElement(el) || isHTMLAnchorElement(el)) {\r\n el.innerText = str;\r\n }\r\n }\r\n\r\n _disable(el: HTMLElement) {\r\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\r\n el.disabled = true;\r\n } else {\r\n el.dataset.disabled = \"true\";\r\n }\r\n }\r\n\r\n _enable(el: HTMLElement) {\r\n if (isHTMLInputElement(el) && el.type == \"submit\" || isHTMLButtonElement(el)) {\r\n el.disabled = false;\r\n } else {\r\n el.dataset.disabled = undefined;\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class DismissableController extends BaseController {\r\n\r\n dismiss() {\r\n this.el.remove();\r\n }\r\n\r\n}\r\n","import {BaseController} from '../utilities/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\";\r\nimport {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class EmptyDomController extends BaseController {\r\n\r\n static classes = [\"empty\", \"notEmpty\"];\r\n static values = {scopeSelector: String};\r\n\r\n declare hasEmptyClass: boolean;\r\n declare emptyClass: string;\r\n declare hasNotEmptyClass: boolean;\r\n declare notEmptyClass: string;\r\n\r\n declare hasScopeSelectorValue: boolean;\r\n declare scopeSelectorValue: string;\r\n\r\n get emptyClasses(): string[] {\r\n return this.emptyClass.split(\" \");\r\n }\r\n\r\n get notEmptyClasses(): string[] {\r\n return this.notEmptyClass.split(\" \");\r\n }\r\n\r\n get _children(): Element[] {\r\n let element = this.el;\r\n if (this.hasScopeSelectorValue) {\r\n return Array.from(element.querySelectorAll(this.scopeSelectorValue));\r\n } else {\r\n return Array.from(element.children);\r\n }\r\n }\r\n\r\n connect() {\r\n useMutation(this, {element: this.el, childList: true});\r\n this.checkEmpty();\r\n }\r\n\r\n mutate(entries: MutationRecord[]) {\r\n this.checkEmpty();\r\n }\r\n\r\n checkEmpty() {\r\n let element = this.el;\r\n let children = this._children;\r\n if (children.length === 0) {\r\n this._removeNotEmptyClasses();\r\n this._addEmptyClasses();\r\n this.dispatch(element as HTMLElement, \"dom:empty\");\r\n } else {\r\n this._addNotEmptyClasses();\r\n this._removeEmptyClasses();\r\n this.dispatch(element as HTMLElement, \"dom:not-empty\", {detail: {count: children.length}});\r\n }\r\n }\r\n\r\n private _removeEmptyClasses() {\r\n if (this.hasEmptyClass) {\r\n this.el.classList.remove(...this.emptyClasses);\r\n }\r\n }\r\n\r\n private _addNotEmptyClasses() {\r\n if (this.hasNotEmptyClass) {\r\n this.el.classList.add(...this.notEmptyClasses);\r\n }\r\n }\r\n\r\n private _addEmptyClasses() {\r\n if (this.hasEmptyClass) {\r\n this.el.classList.add(...this.emptyClasses);\r\n }\r\n }\r\n\r\n private _removeNotEmptyClasses() {\r\n if (this.hasNotEmptyClass) {\r\n this.el.classList.remove(...this.notEmptyClasses);\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 \"../../utilities/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 '../../utilities/base_controller';\r\n\r\nexport class FormRcController extends BaseController {\r\n\r\n static targets = [\"form\"];\r\n\r\n declare readonly formTarget: HTMLFormElement;\r\n\r\n submit(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"submit\");\r\n this.formTarget.submit();\r\n }\r\n\r\n reset(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"reset\");\r\n this.formTarget.reset();\r\n }\r\n\r\n}","import {BaseController} from '../../utilities/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 \"../../utilities/base_controller\";\r\nimport {useIntersection} from \"stimulus-use\";\r\n\r\nexport class IntersectionController extends BaseController {\r\n\r\n static values = {threshold: String};\r\n\r\n declare readonly isVisible: boolean;\r\n declare readonly thresholdValue: string;\r\n declare readonly hasThresholdValue: boolean;\r\n\r\n get _threshold(): number[] {\r\n if (this.hasThresholdValue) {\r\n return this.thresholdValue.split(',').map(val => Number.parseFloat(val.trim())).filter(val => val >= 0 && val <= 1);\r\n } else {\r\n return [0, 1];\r\n }\r\n }\r\n\r\n connect() {\r\n useIntersection(this, {\r\n threshold: this._threshold,\r\n element: this.el,\r\n });\r\n }\r\n\r\n appear(entry: IntersectionObserverEntry) {\r\n this.dispatch(\r\n this.el,\r\n \"intersection:appear\",\r\n {\r\n detail: {\r\n element: this.el,\r\n },\r\n },\r\n );\r\n };\r\n\r\n disappear(entry: IntersectionObserverEntry) {\r\n this.dispatch(\r\n this.el,\r\n \"intersection:disappear\",\r\n {\r\n detail: {\r\n element: this.el,\r\n },\r\n },\r\n );\r\n };\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class IntervalController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _intervalHandle: null | number = null;\r\n\r\n initialize() {\r\n this._interval = this._interval.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._intervalHandle = window.setInterval(this._interval, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._intervalHandle) {\r\n window.clearInterval(this._intervalHandle);\r\n }\r\n }\r\n\r\n _interval() {\r\n this.dispatch(this.el, \"interval:action\");\r\n }\r\n\r\n}","import {useIntersection} from \"stimulus-use\";\r\nimport {AsyncBlockController} from \"./async_block_controller\";\r\n\r\nexport class LazyBlockController extends AsyncBlockController {\r\n\r\n declare observe: () => void;\r\n declare unobserve: () => void;\r\n declare isVisible: boolean;\r\n declare disappear: () => void;\r\n\r\n connect() {\r\n let element = this.el;\r\n\r\n if (\"IntersectionObserver\" in window) {\r\n [this.observe, this.unobserve] = useIntersection(this, {element, threshold: 0.3});\r\n } else {\r\n // Client doesn't support intersection observer, fallback to pre-loading\r\n this.loadContent();\r\n }\r\n }\r\n\r\n appear(entry: IntersectionObserverEntry) {\r\n if (entry.target === this.el && entry.isIntersecting) {\r\n this.loadContent();\r\n if (this.unobserve) {\r\n this.unobserve();\r\n }\r\n }\r\n }\r\n\r\n}\r\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 \"../../utilities/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 \"../../utilities/base_controller\";\r\n\r\nexport class LimitedSelectionCheckboxesController extends BaseController {\r\n\r\n static targets = [\"input\", \"error\"];\r\n static values = {max: Number, message: String};\r\n\r\n declare readonly hasErrorTarget: boolean;\r\n declare readonly errorTarget: HTMLElement;\r\n declare readonly inputTargets: HTMLInputElement[];\r\n declare readonly maxValue: number;\r\n declare readonly messageValue: string;\r\n\r\n initialize() {\r\n this.handleInputs = this.handleInputs.bind(this);\r\n }\r\n\r\n connect() {\r\n this.inputTargets.forEach((el) => el.addEventListener(\"change\", this.handleInputs));\r\n }\r\n\r\n disconnect() {\r\n this.inputTargets.forEach((el) => el.removeEventListener(\"change\", this.handleInputs));\r\n }\r\n\r\n handleInputs(event: Event) {\r\n let tickedInputs = this.inputTargets.reduce((previousValue, el) => el.checked ? previousValue + 1 : previousValue, 0);\r\n let target = event.target as HTMLInputElement;\r\n if (tickedInputs > this.maxValue) {\r\n event.preventDefault();\r\n target.checked = false;\r\n this.dispatch(target, \"change\");\r\n this.dispatch(target, \"limited-selection:too-many\");\r\n if (this.hasErrorTarget) {\r\n this.errorTarget.innerHTML = this.messageValue;\r\n }\r\n } else {\r\n this.dispatch(target, \"limited-selection:selection\");\r\n if (this.hasErrorTarget) {\r\n this.errorTarget.innerHTML = \"\";\r\n }\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class MediaPlayerController extends BaseController {\r\n\r\n static targets = [\"media\"];\r\n\r\n declare readonly mediaTarget: HTMLMediaElement;\r\n\r\n initialize() {\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n disconnect() {\r\n }\r\n\r\n async play(event?: Event) {\r\n event?.preventDefault();\r\n await this.mediaTarget.play();\r\n }\r\n\r\n pause(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.pause();\r\n }\r\n\r\n restart(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime = 0;\r\n }\r\n\r\n seek(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime += 5;\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class NestedFormController extends BaseController {\r\n static targets = ['target', 'template'];\r\n static values = {\r\n insertMode: String,\r\n wrapperClass: String,\r\n };\r\n\r\n declare readonly targetTarget: HTMLElement;\r\n declare readonly templateTarget: HTMLTemplateElement | HTMLScriptElement;\r\n\r\n declare readonly wrapperClassValue: string;\r\n declare readonly hasWrapperSelectorValue: boolean;\r\n declare readonly insertModeValue: InsertPosition;\r\n declare readonly hasInsertModeValue: boolean;\r\n\r\n get _wrapperClass() {\r\n return this.hasWrapperSelectorValue ? this.wrapperClassValue : 'nested-fields';\r\n }\r\n\r\n get _insertMode(): InsertPosition {\r\n return this.hasInsertModeValue ? this.insertModeValue : 'beforeend';\r\n }\r\n\r\n connect() {\r\n this._checkStructure();\r\n }\r\n\r\n add(event?: Event) {\r\n event?.preventDefault();\r\n\r\n const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, this._generateID());\r\n this.targetTarget.insertAdjacentHTML(this._insertMode, content);\r\n }\r\n\r\n remove(event: Event) {\r\n event.preventDefault();\r\n const wrapper: HTMLElement | null = (event.target as HTMLElement).closest(`.${this._wrapperClass}`);\r\n if (wrapper == null) {\r\n throw new Error(`#remove was clicked from outside of a child record. Could not find an ancestor with class .${this._wrapperClass}`);\r\n }\r\n\r\n if (wrapper.dataset.newRecord === 'true') {\r\n wrapper.remove();\r\n } else {\r\n wrapper.style.display = 'none';\r\n let destroyInput = wrapper.querySelector(\"input[name*='_destroy']\") as HTMLInputElement | null;\r\n if (destroyInput == null) {\r\n throw new Error(`Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.`);\r\n }\r\n\r\n destroyInput.value = \"1\";\r\n }\r\n }\r\n\r\n private _generateID(): string {\r\n return new Date().getTime().toString() + Math.random().toString().slice(2);\r\n }\r\n\r\n private _checkStructure() {\r\n let template = this.templateTarget.innerHTML;\r\n\r\n if (template.indexOf('NEW_RECORD')) {\r\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`\");\r\n }\r\n }\r\n}","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class PasswordConfirmController extends BaseController {\r\n\r\n static targets = [\"password\"];\r\n static classes = [\"error\"];\r\n\r\n declare readonly passwordTargets: HTMLInputElement[];\r\n\r\n declare readonly errorClass: string;\r\n declare readonly hasErrorClass: boolean;\r\n\r\n initialize() {\r\n this.checkPasswordsMatch = this.checkPasswordsMatch.bind(this);\r\n }\r\n\r\n connect() {\r\n this.passwordTargets.forEach((el) => el.addEventListener(\"change\", this.checkPasswordsMatch));\r\n }\r\n\r\n disconnect() {\r\n this.passwordTargets.forEach((el) => el.removeEventListener(\"change\", this.checkPasswordsMatch));\r\n }\r\n\r\n private _allPasswordsMatch(): boolean {\r\n let values = new Set(this.passwordTargets.map(el => el.value)); // Create a unique set of the password values\r\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)\r\n }\r\n\r\n private checkPasswordsMatch() {\r\n let element = this.el;\r\n if (this._allPasswordsMatch()) {\r\n this.dispatch(element, \"password-confirm:match\");\r\n if (this.hasErrorClass) {\r\n this.passwordTargets.forEach(el => el.classList.remove(this.errorClass));\r\n }\r\n } else {\r\n this.dispatch(element, \"password-confirm:no-match\");\r\n if (this.hasErrorClass) {\r\n this.passwordTargets.forEach(el => el.classList.add(this.errorClass));\r\n }\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class PasswordPeekController extends BaseController {\r\n\r\n static targets = [\"password\"];\r\n\r\n declare readonly passwordTarget: HTMLInputElement;\r\n\r\n peak(event?: Event) {\r\n event?.preventDefault();\r\n this.passwordTarget.type = \"text\";\r\n }\r\n\r\n hide(event?: Event) {\r\n event?.preventDefault();\r\n this.passwordTarget.type = \"password\";\r\n }\r\n\r\n toggle(event?: Event) {\r\n event?.preventDefault();\r\n if (this.passwordTarget.type === \"password\") {\r\n this.peak();\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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\";\r\nimport {WindowResizePayload} from \"stimulus-use/dist/use-window-resize/use-window-resize\";\r\nimport {BaseController} from \"../utilities/base_controller\";\r\n\r\ninterface ResponsiveIframeMessage {\r\n name: string,\r\n height: number,\r\n}\r\n\r\nexport class ResponsiveIframeWrapperController extends BaseController {\r\n\r\n initialize() {\r\n this.messageReceived = this.messageReceived.bind(this);\r\n }\r\n\r\n connect() {\r\n window.addEventListener(\"message\", this.messageReceived);\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"message\", this.messageReceived);\r\n }\r\n\r\n messageReceived(message: MessageEvent) {\r\n let data = message.data;\r\n if (data.hasOwnProperty(\"name\") && data.name === \"iframe-body\" && data.hasOwnProperty(\"height\")) {\r\n this.resize(data.height);\r\n }\r\n }\r\n\r\n resize(height: number) {\r\n (this.el as HTMLIFrameElement).style.height = `${height}px`;\r\n }\r\n\r\n}\r\n\r\nexport class ResponsiveIframeBodyController extends BaseController {\r\n\r\n static debounces = [\"postUpdate\"];\r\n\r\n declare observe: () => void;\r\n declare unobserve: () => void;\r\n\r\n connect() {\r\n // If this Window is inside a frame\r\n if (window.self !== window.top) {\r\n useWindowResize(this);\r\n useDebounce(this, {});\r\n this.postUpdate();\r\n } else {\r\n // Not an iframe\r\n }\r\n }\r\n\r\n windowResize(payload: WindowResizePayload) {\r\n this.postUpdate();\r\n };\r\n\r\n postUpdate() {\r\n let payload: ResponsiveIframeMessage = {name: \"iframe-body\", height: this.getHeight()};\r\n window.parent.postMessage(\r\n payload,\r\n \"*\",\r\n );\r\n }\r\n\r\n getHeight(): number {\r\n const body = document.body;\r\n const html = document.documentElement;\r\n\r\n // Get the largest height out of body and html's various height measurements\r\n return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\r\n }\r\n\r\n}\r\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 \"../../utilities/base_controller\";\r\nimport {getScrollParent, scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class ScrollToBottomController extends BaseController {\r\n\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare modeValue: \"nearest\" | \"document\";\r\n declare hasModeValue: boolean;\r\n\r\n scroll(event?: Event) {\r\n event?.preventDefault();\r\n let mode = this.hasModeValue ? this.modeValue : \"document\";\r\n let target: null | HTMLElement;\r\n if (mode == \"document\") {\r\n target = document.body;\r\n } else {\r\n target = getScrollParent(this.el);\r\n }\r\n if (target == null) {\r\n return;\r\n }\r\n scrollToElement(target!, {behavior: \"smooth\", block: \"end\"}).catch(() => target!.scrollIntoView(false));\r\n }\r\n\r\n}\r\n\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class ScrollToController extends BaseController {\r\n\r\n static values = {\r\n selector: String,\r\n behavior: String,\r\n block: String,\r\n inline: String,\r\n };\r\n\r\n declare selectorValue: string;\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 scroll() {\r\n let target = document.querySelector(this.selectorValue);\r\n if (!target) {\r\n console.warn(`Could not find target for '${this.selectorValue}'`);\r\n return;\r\n }\r\n\r\n scrollToElement(\r\n target!,\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(() => target!.scrollIntoView()); // Fallback to snap-scrolling\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {getScrollParent, scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class ScrollToTopController extends BaseController {\r\n\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare modeValue: \"nearest\" | \"document\";\r\n declare hasModeValue: boolean;\r\n\r\n scroll(event?: Event) {\r\n event?.preventDefault();\r\n let mode = this.hasModeValue ? this.modeValue : \"document\";\r\n let target: null | HTMLElement;\r\n if (mode == \"document\") {\r\n target = document.body;\r\n } else {\r\n target = getScrollParent(this.el);\r\n }\r\n if (target == null) {\r\n return;\r\n }\r\n scrollToElement(target!, {behavior: \"smooth\", block: \"start\"}).catch(() => target!.scrollIntoView(false));\r\n }\r\n\r\n}\r\n\r\n","import {BaseController} from \"../utilities/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 \"../utilities/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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableSortController extends BaseController {\r\n\r\n static values = {startSort: Number};\r\n\r\n declare readonly startSortValue: number;\r\n declare readonly hasStartSortValue: boolean;\r\n _lastIndex: number | null = null;\r\n _reverse: boolean = false;\r\n\r\n get _tableHead(): HTMLTableSectionElement {\r\n let head = (this.el as HTMLTableElement).tHead;\r\n if (head == null) {\r\n throw new Error('Expected table to have a element.');\r\n }\r\n return head;\r\n }\r\n\r\n get _tableHeaders(): HTMLTableHeaderCellElement[] {\r\n let rows = this._tableHead.rows;\r\n if (rows.length == 0) {\r\n throw new Error('Expected table to have a element with at least one row.');\r\n }\r\n return Array.from(rows[0].cells);\r\n }\r\n\r\n get _tableBody() {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n initialize() {\r\n this.sort = this.sort.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._tableHeaders.forEach(cell => cell.addEventListener(\"click\", this.sort));\r\n if (this.hasStartSortValue) {\r\n this._sortByColumn(this.startSortValue);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n this._tableHeaders.forEach(cell => cell.removeEventListener(\"click\", this.sort));\r\n }\r\n\r\n sort(event: Event) {\r\n event.preventDefault();\r\n let headerCell = event.target! as HTMLTableHeaderCellElement;\r\n let headerCellIndex = this._indexOfHeaderCell(headerCell);\r\n this._sortByColumn(headerCellIndex);\r\n }\r\n\r\n private _indexOfHeaderCell(cell: HTMLTableHeaderCellElement) {\r\n return this._tableHeaders.indexOf(cell);\r\n }\r\n\r\n private _sortByColumn(index: number) {\r\n this._reverse = index === this._lastIndex && !this._reverse;\r\n let frag = document.createDocumentFragment();\r\n let rows = this._tableRows;\r\n\r\n let newRows = rows.sort((row, otherRow) => {\r\n let cells = Array.from(row.cells);\r\n let otherCells = Array.from(otherRow.cells);\r\n\r\n // TODO: Handle colspans?\r\n let x = cells[index]?.innerText || \"\";\r\n let y = otherCells[index]?.innerText || \"\";\r\n\r\n let sortVal = x.localeCompare(y, \"en\", {sensitivity: \"base\", numeric: true, caseFirst: \"upper\"});\r\n\r\n if (row.dataset.sortTop || otherRow.dataset.sortBottom) {\r\n if (row.dataset.sortTop && otherRow.dataset.sortTop) {\r\n return sortVal;\r\n }\r\n return -1;\r\n }\r\n if (row.dataset.sortBottom || otherRow.dataset.sortTop) {\r\n if (row.dataset.sortBottom && otherRow.dataset.sortBottom) {\r\n return sortVal;\r\n }\r\n return 1;\r\n }\r\n\r\n if (this._reverse) {\r\n return sortVal > 0 ? -1 : 1;\r\n }\r\n return sortVal;\r\n });\r\n\r\n newRows.forEach(row => frag.appendChild(row));\r\n\r\n this._tableBody.innerHTML = \"\";\r\n this._tableBody.appendChild(frag);\r\n this._lastIndex = index;\r\n }\r\n\r\n}","import {useMutation} from \"stimulus-use\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableTruncateController extends BaseController {\r\n\r\n static targets = [\"showMore\"];\r\n static values = {\r\n limit: Number,\r\n truncated: Boolean,\r\n };\r\n\r\n declare readonly showMoreTarget: HTMLElement;\r\n declare limitValue: number;\r\n declare readonly hasLimitValue: boolean;\r\n declare truncatedValue: boolean;\r\n declare readonly hasTruncatedValue: boolean;\r\n\r\n get _truncated(): boolean {\r\n return this.hasTruncatedValue ? this.truncatedValue : false;\r\n }\r\n\r\n set _truncated(value) {\r\n this.truncatedValue = value;\r\n }\r\n\r\n get _tableBody(): HTMLTableSectionElement {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n get _limit(): number {\r\n return this.hasLimitValue ? this.limitValue : 20;\r\n }\r\n\r\n initialize() {\r\n this.truncate = this.truncate.bind(this);\r\n this.expand = this.expand.bind(this);\r\n }\r\n\r\n connect() {\r\n useMutation(this, {childList: true, element: this._tableBody});\r\n\r\n requestAnimationFrame(() => {\r\n this.truncate();\r\n this.showMoreTarget.addEventListener(\"click\", this.expand);\r\n });\r\n }\r\n\r\n truncate(event?: Event) {\r\n event?.preventDefault();\r\n this._truncated = true;\r\n if (this._tableRows.length >= this._limit) {\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\r\n } else {\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n }\r\n\r\n expand(event?: Event) {\r\n this._truncated = false;\r\n event?.preventDefault();\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n\r\n mutate(entries: MutationRecord[]) {\r\n if (this._truncated) {\r\n this._reTruncate();\r\n }\r\n }\r\n\r\n private _showElement(el: HTMLElement): void {\r\n el.style.display = \"\";\r\n }\r\n\r\n private _hideElement(el: HTMLElement): void {\r\n el.style.display = \"none\";\r\n }\r\n\r\n private _reTruncate() {\r\n this._tableRows.slice(0, this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\r\n }\r\n\r\n}","import {EphemeralController} from \"../utilities/ephemeral_controller\";\r\n\r\nexport class TeleportController extends EphemeralController {\r\n\r\n static values = {target: String, insert: String, immediate: Boolean};\r\n\r\n declare readonly immediateValue: boolean;\r\n declare readonly hasImmediateValue: boolean;\r\n declare readonly targetValue: string;\r\n declare readonly hasInsertValue: boolean;\r\n declare readonly insertValue: InsertPosition | \"replaceOuter\" | \"replaceInner\" | \"prepend\" | \"append\";\r\n\r\n connect() {\r\n if (!this.hasInsertValue) {\r\n throw new Error(\"`insert` value was not specified\");\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n if (this.hasImmediateValue && this.immediateValue) {\r\n this.execute();\r\n }\r\n });\r\n }\r\n\r\n execute(event?: Event) {\r\n event?.preventDefault();\r\n let element = this.el;\r\n let destination = document.querySelector(this.targetValue);\r\n\r\n if (destination == null) {\r\n this.dispatch(element, \"teleport:error\");\r\n return;\r\n }\r\n\r\n let copy = element.cloneNode(true) as HTMLElement;\r\n this.cleanup(copy);\r\n\r\n switch (this.insertValue) {\r\n case \"beforebegin\":\r\n case \"beforeend\":\r\n case \"afterend\":\r\n case \"afterbegin\":\r\n destination.insertAdjacentHTML(this.insertValue, copy.outerHTML);\r\n break;\r\n case \"replaceOuter\":\r\n destination.outerHTML = copy.outerHTML;\r\n break;\r\n case \"replaceInner\":\r\n destination.innerHTML = copy.outerHTML;\r\n break;\r\n case \"prepend\":\r\n destination.insertAdjacentHTML(\"afterbegin\", copy.outerHTML);\r\n break;\r\n case \"append\":\r\n destination.insertAdjacentHTML(\"beforeend\", copy.outerHTML);\r\n break;\r\n default:\r\n throw new Error(\"`insert` value was not specified\");\r\n\r\n }\r\n element.remove();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TimeoutController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _timeoutHandle: null | number = null;\r\n\r\n initialize() {\r\n this._timeout = this._timeout.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._timeoutHandle = window.setTimeout(this._timeout, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n window.clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n _timeout() {\r\n this.dispatch(this.el, \"timeout\");\r\n }\r\n\r\n}","import {useClickOutside, useHover} from \"stimulus-use\";\r\nimport {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport type ToggleClassMode = \"on\" | \"off\" | \"toggle\"\r\n\r\nexport class ToggleClassController extends BaseController {\r\n\r\n static targets = [\"toggle\"];\r\n static values = {\r\n class: String,\r\n mouseEnter: String,\r\n mouseLeave: String,\r\n clickAway: Boolean,\r\n initial: String,\r\n };\r\n\r\n declare readonly toggleTargets: HTMLElement[];\r\n\r\n declare readonly classValue: string;\r\n declare readonly hasClassValue: boolean;\r\n\r\n declare readonly mouseEnterValue: ToggleClassMode;\r\n declare readonly hasMouseEnterValue: boolean;\r\n\r\n declare readonly mouseLeaveValue: ToggleClassMode;\r\n declare readonly hasMouseLeaveValue: boolean;\r\n\r\n declare readonly clickAwayValue: boolean;\r\n declare readonly hasClickAwayValue: boolean;\r\n\r\n declare readonly initialValue: \"on\" | \"off\";\r\n declare readonly hasInitialValue: boolean;\r\n\r\n connect() {\r\n if (!this.hasClassValue) {\r\n throw new Error(\"data-toggle-class-class-value must not be empty\");\r\n }\r\n\r\n if (this.hasMouseEnterValue || this.hasMouseLeaveValue) {\r\n useHover(this);\r\n }\r\n\r\n if (this.hasClickAwayValue && this.clickAwayValue) {\r\n useClickOutside(this);\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n if (this.hasInitialValue) {\r\n if (this.initialValue === \"on\") {\r\n this.toggleTargets.forEach((target) => this._elementOn(target));\r\n } else {\r\n this.toggleTargets.forEach((target) => this._elementOff(target));\r\n }\r\n }\r\n });\r\n }\r\n\r\n clickOutside() {\r\n this.toggleTargets.forEach((target) => {\r\n if (this._elementWasToggled(target)) {\r\n this._elementToggleStatus(target);\r\n this._elementToggle(target);\r\n }\r\n });\r\n }\r\n\r\n mouseEnter() {\r\n if (this.hasMouseEnterValue) {\r\n switch (this.mouseEnterValue) {\r\n case \"on\":\r\n this.on();\r\n break;\r\n case \"off\":\r\n this.off();\r\n break;\r\n case \"toggle\":\r\n this.toggle();\r\n break;\r\n }\r\n }\r\n return {};\r\n }\r\n\r\n mouseLeave() {\r\n if (this.hasMouseLeaveValue) {\r\n switch (this.mouseLeaveValue) {\r\n case \"on\":\r\n this.on();\r\n break;\r\n case \"off\":\r\n this.off();\r\n break;\r\n case \"toggle\":\r\n this.toggle();\r\n break;\r\n }\r\n }\r\n return {};\r\n }\r\n\r\n on(event?: Event) {\r\n this.toggleTargets.forEach((target) => {\r\n this._elementToggleStatus(target);\r\n this._elementOn(target);\r\n });\r\n }\r\n\r\n off(event?: Event) {\r\n this.toggleTargets.forEach((target) => {\r\n this._elementToggleStatus(target);\r\n this._elementOff(target);\r\n });\r\n }\r\n\r\n toggle(event?: Event) {\r\n this.toggleTargets.forEach((target) => {\r\n this._elementToggleStatus(target);\r\n this._elementToggle(target);\r\n });\r\n }\r\n\r\n private _elementWasToggled(el: HTMLElement): boolean {\r\n return el.dataset.toggled == \"true\";\r\n }\r\n\r\n private _elementToggleStatus(el: HTMLElement) {\r\n if (this._elementWasToggled(el)) {\r\n delete el.dataset.toggled;\r\n } else {\r\n el.dataset.toggled = \"true\";\r\n }\r\n }\r\n\r\n private _elementToggle(el: HTMLElement) {\r\n let classes = this.classValue.split(\" \");\r\n classes.forEach((klass) => el.classList.toggle(klass));\r\n }\r\n\r\n private _elementOn(el: HTMLElement) {\r\n let classes = this.classValue.split(\" \");\r\n classes.forEach((klass) => el.classList.toggle(klass, true));\r\n }\r\n\r\n private _elementOff(el: HTMLElement) {\r\n let classes = this.classValue.split(\" \");\r\n classes.forEach((klass) => el.classList.toggle(klass, false));\r\n }\r\n\r\n}\r\n","export function isTurboFrame(element: HTMLElement): element is TurboFrame {\r\n return element.nodeName == \"TURBO-FRAME\";\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\nimport {isHTMLAnchorElement} from \"../utilities/elements\";\r\nimport {isTurboFrame} from \"../utilities/turbo\";\r\n\r\nexport class TurboFrameRCController extends BaseController {\r\n\r\n static values = {\r\n frameId: String,\r\n src: String,\r\n loadingMessage: String,\r\n };\r\n\r\n declare readonly frameIdValue: string;\r\n declare readonly srcValue: string;\r\n declare readonly hasSrcValue: boolean;\r\n declare readonly loadingMessageValue: string;\r\n declare readonly hasLoadingMessageValue: boolean;\r\n\r\n toggle(event?: Event) {\r\n event?.preventDefault();\r\n let frame = this._getFrame();\r\n let frameSrc = frame.src;\r\n if (frameSrc == null || frameSrc !== this._getSrc()) {\r\n this._setSrc();\r\n } else {\r\n this._clear();\r\n }\r\n }\r\n\r\n setSrc(event?: Event) {\r\n event?.preventDefault();\r\n this._setSrc();\r\n }\r\n\r\n clear(event?: Event) {\r\n event?.preventDefault();\r\n this._clear();\r\n }\r\n\r\n private _setSrc() {\r\n let frame = this._getFrame();\r\n if (this.hasLoadingMessageValue) {\r\n frame.innerHTML = this.loadingMessageValue;\r\n }\r\n frame.src = this._getSrc();\r\n }\r\n\r\n private _clear() {\r\n let frame = this._getFrame();\r\n frame.src = \"\";\r\n frame.innerHTML = \"\";\r\n }\r\n\r\n private _getFrame(): TurboFrame {\r\n let frame = document.getElementById(`${this.frameIdValue}`);\r\n if (frame == null) {\r\n throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);\r\n }\r\n if (!isTurboFrame(frame)) {\r\n throw new Error(`Element targeted by ID '${this.frameIdValue}'`);\r\n } else {\r\n return frame;\r\n }\r\n }\r\n\r\n private _getSrc(): string {\r\n let element = this.el;\r\n if (this.hasSrcValue) {\r\n return this.srcValue;\r\n } else if (isHTMLAnchorElement(element)) {\r\n return element.href;\r\n } else {\r\n throw new Error(\"No link given to drive frame to\");\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\nimport {isTurboFrame} from \"../utilities/turbo\";\r\n\r\n// noinspection SillyAssignmentJS\r\nexport class TurboFrameRefreshController extends BaseController {\r\n\r\n static values = {\r\n interval: Number,\r\n poll: Boolean,\r\n };\r\n\r\n declare readonly intervalValue: number;\r\n declare readonly pollValue: boolean;\r\n declare readonly hasPollValue: boolean;\r\n _timeoutHandle: null | ReturnType = null;\r\n\r\n get _poll(): boolean {\r\n return this.hasPollValue ? this.pollValue : false;\r\n }\r\n\r\n initialize() {\r\n this.refresh = this.refresh.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el;\r\n if (isTurboFrame(element)) {\r\n if (!!element.src) {\r\n throw new Error('The provided element has no `src` attribute.');\r\n }\r\n } else {\r\n throw new Error('Expected controller to be mounted on a element.');\r\n }\r\n if (this._poll) {\r\n requestAnimationFrame(() => this._timeoutHandle = setTimeout(() => this.refresh(), this.intervalValue));\r\n }\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n refresh(event?: Event) {\r\n event?.preventDefault();\r\n let element = this.el as TurboFrame;\r\n element.src = element.src;\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class WordCountController extends BaseController {\r\n\r\n static targets = [\"input\", \"output\"];\r\n static values = {min: Number, max: Number};\r\n static classes = [\"error\"];\r\n\r\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\r\n declare readonly outputTarget: HTMLElement;\r\n declare minValue: number;\r\n declare hasMinValue: boolean;\r\n declare maxValue: number;\r\n declare hasMaxValue: boolean;\r\n declare errorClass: string;\r\n declare hasErrorClass: boolean;\r\n\r\n initialize() {\r\n this.updateWordCount = this.updateWordCount.bind(this);\r\n }\r\n\r\n connect() {\r\n this.updateWordCount();\r\n this.inputTarget.addEventListener(\"input\", this.updateWordCount);\r\n }\r\n\r\n disconnect() {\r\n this.inputTarget.removeEventListener(\"input\", this.updateWordCount);\r\n }\r\n\r\n updateWordCount() {\r\n let wordCount = 0;\r\n let textAreaValue = this.inputTarget.value;\r\n let matches = textAreaValue.match(/\\S+/g);\r\n wordCount = (matches && matches.length) || 0;\r\n this.outputTarget.innerText = wordCount.toString();\r\n if (this.hasErrorClass) {\r\n if (this._isValidCount(wordCount)) {\r\n this.outputTarget.classList.remove(this.errorClass);\r\n } else {\r\n this.outputTarget.classList.add(this.errorClass);\r\n }\r\n }\r\n }\r\n\r\n private _isValidCount(count: number) {\r\n let min = 0;\r\n let max = 99999;\r\n\r\n if (this.hasMinValue) {\r\n min = this.minValue;\r\n }\r\n\r\n if (this.hasMaxValue) {\r\n max = this.maxValue;\r\n }\r\n\r\n return count >= min && count <= max;\r\n }\r\n\r\n}\r\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","isTurboPreview","document","documentElement","hasAttribute","isTurbolinksPreview","csrfToken","metaValue","name","head","querySelector","getAttribute","dispatch","eventName","options","mergedOptions","Object","assign","bubbles","cancelable","detail","event","CustomEvent","logEvent","dispatchEvent","functionName","application","debug","logger","console","groupCollapsed","identifier","groupEnd","AnchorSpyController","_key","keyValue","replaceAll","_anchor","window","location","hash","substr","value","initialize","_checkAnchor","bind","connect","requestAnimationFrame","addEventListener","disconnect","removeEventListener","write","preventDefault","key","String","AppearanceController","_handleVisibility","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","errorMessage","selector","AutoSubmitFormController","submit","forEach","method","controller","methodName","composeEventName","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","useMutation","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","_checked","checkboxTargets","filter","checkbox","checked","_unchecked","_toggle","_refresh","hasSelectAllTarget","selectAllTarget","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","message","ConfirmNavigationController","_messageValue","allowSubmit","confirmNavigation","confirmTurboNavigation","onbeforeunload","_event","DebugController","testTargets","DetectDirtyController","_cacheAttrName","_checkDirty","_cacheLoadValues","restore","_restoreElementFromLoadValue","_getElementValue","_getElementLoadValue","defaultChecked","Array","from","option","defaultSelected","_elementHasCachedLoadValue","_isElementDirty","setAttribute","removeAttribute","cacheValue","defaultValue","DetectDirtyFormController","_formElements","_checkElementDirty","_cacheElementLoadValue","some","DisableInputsController","toggle","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","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","_children","hasScopeSelectorValue","scopeSelectorValue","childList","checkEmpty","mutate","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","hasNotEmptyClass","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormRcController","formTarget","reset","FormSaveController","_formID","_formIdentifier","elements","_formData","_clearOnSubmit","hasClearOnSubmitValue","clearOnSubmitValue","_clear","clearOnSubmit","IntersectionController","_threshold","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","threshold","disappear","IntervalController","_interval","_intervalHandle","setInterval","secondsValue","clearInterval","seconds","LazyBlockController","smoothSupported","smoothPolyfilled","scrollToElement","behavior","block","inline","async","polyfill","polyfillSmooth","scrollIntoView","getScrollParent","node","overflowY","getComputedStyle","parentElement","body","LightboxImageController","_src","hasSrcValue","srcValue","_srcSet","hasSrcSetValue","srcSetValue","srcset","_sizes","hasSizesValue","sizesValue","sizes","_modalClassName","hasModalClass","modalClass","_imageClassName","hasImageClass","imageClass","open","close","_dialog","image","className","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","showModal","srcSet","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","MediaPlayerController","mediaTarget","play","pause","restart","currentTime","seek","NestedFormController","_wrapperClass","hasWrapperSelectorValue","wrapperClassValue","_insertMode","hasInsertModeValue","insertModeValue","_checkStructure","content","templateTarget","replace","_generateID","targetTarget","insertAdjacentHTML","wrapper","closest","newRecord","destroyInput","Date","getTime","Math","random","slice","indexOf","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","_selector","status","xhr","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","RegExp","substringIdentifierValueRegex","camelCase","action","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","StickyController","_mode","createMagicElement","_magicElement","intersectionRatio","hasStuckClass","stuckClass","TableSortController","_tableHead","tHead","_tableHeaders","rows","cells","_tableBody","tBodies","_tableRows","sort","cell","hasStartSortValue","_sortByColumn","startSortValue","headerCellIndex","_indexOfHeaderCell","index","_reverse","_lastIndex","frag","createDocumentFragment","row","otherRow","otherCells","x","y","sortVal","localeCompare","sensitivity","numeric","caseFirst","sortTop","sortBottom","startSort","TableTruncateController","_truncated","hasTruncatedValue","truncatedValue","_limit","hasLimitValue","limitValue","truncate","expand","showMoreTarget","_hideElement","_showElement","_reTruncate","limit","truncated","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","TimeoutController","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","refresh","intervalValue","interval","poll","WordCountController","updateWordCount","wordCount","matches","match"],"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 5d0067ea..104e562f 100644 --- a/dist/stimulus-library.module.js +++ b/dist/stimulus-library.module.js @@ -1,2 +1,2 @@ -import{Controller as t}from"stimulus";import e from"lodash-es/get";import n from"lodash-es/set";import i from"dialog-polyfill";import r from"camelcase";function s(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,i=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[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=t[Symbol.iterator]()).next.bind(n)}var d=function(t){function e(e){var n;return n=t.call(this,e)||this,new Proxy(c(n),{get:function(t,e){var i=Reflect.get(t,e),r=c(n);if(function(t){switch(t){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(t)||/^.*?Target(s)?$/.test(t)||/^.*?Value$/.test(t)||/^.*?ValueChanged$/.test(t)||/^.*?Class$/.test(t)||/^.*?Classes$/.test(t))}(e.toString())){if("function"==typeof i)return new Proxy(i,{apply:function(t,n,i){return r.log(e.toString(),{args:i}),Reflect.apply(t,n,i)}});n.log(e.toString())}return i}})||c(n)}l(e,t);var n=e.prototype;return n.dispatch=function(t,e,n){void 0===n&&(n={});var i=Object.assign({},{bubbles:!0,cancelable:!0,detail:{target:t}},n);i.detail.target&&(i.detail.target=t);var r=new CustomEvent(e,i);this.logEvent(e,r,t),t.dispatchEvent(r)},n.log=function(t,e){if(void 0===e&&(e={}),this.application.debug){var n=console;n.groupCollapsed("%c"+this.identifier+" %c#"+t,"color: #3B82F6","color: unset"),n.log(a({element:this.element},e)),n.groupEnd()}},n.logEvent=function(t,e,n){if(this.application.debug){var i=console;i.groupCollapsed("%c"+this.identifier+" %c"+t+"%c","color: #3B82F6","color: #0be000","color: unset"),i.log({element:n}),i.groupEnd()}},o(e,[{key:"el",get:function(){return this.element}}]),e}(t),f=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this._checkAnchor=this._checkAnchor.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t._checkAnchor(),window.addEventListener("hashchange",t._checkAnchor)})},n.disconnect=function(){window.removeEventListener("hashchange",this._checkAnchor)},n.write=function(t){null==t||t.preventDefault(),this._anchor=this._key},n._checkAnchor=function(){this.dispatch(this.el,this._key===this._anchor?"anchor-spy:active":"anchor-spy:inactive")},o(e,[{key:"_key",get:function(){return this.keyValue.replaceAll("#","")}},{key:"_anchor",get:function(){return window.location.hash.substr(1)},set:function(t){window.location.hash=t}}]),e}(d);f.values={key:String};var m=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this._handleVisibility=this._handleVisibility.bind(this)},n.connect=function(){var t=this;window.addEventListener("focus",this._handleVisibility),window.addEventListener("blur",this._handleVisibility),document.addEventListener("visibilitychange",this._handleVisibility),requestAnimationFrame(function(){t._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()},e}(d),p=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.connect=function(){this.loadContent()},n.loadContent=function(){var t=this,e=this,n=this.hasReplaceTarget?this.replaceTarget:this.el;fetch(this.endpointValue).then(function(t){return t.text()}).then(function(i){var r=document.createElement("div");if(r.innerHTML=i,t.hasSelectorValue){var s=r.querySelectorAll(t.selectorValue);n.replaceWith.apply(n,s)}else n.replaceWith.apply(n,r.children);e.dispatch(n,"ajax:success")}).catch(function(i){n.replaceWith(t._errorMessage),e.dispatch(n,"ajax:error")}).finally(function(){e.dispatch(n,"ajax:complete")})},o(e,[{key:"_errorMessage",get:function(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}}]),e}(d);p.targets=["replace"],p.values={endpoint:String,errorMessage:String,selector:String};var v=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this.submit=this.submit.bind(this)},n.connect=function(){var t=this;this.el.querySelectorAll("input, select, textarea").forEach(function(e){return e.addEventListener("change",t.submit)})},n.disconnect=function(){var t=this;this.el.querySelectorAll("input, select, textarea").forEach(function(e){return e.removeEventListener("change",t.submit)})},n.submit=function(){this.dispatch(this.el,"submit")},e}(d);const g=(t,e)=>{const n=t[e];return"function"==typeof n?n:(...t)=>{}},y=(t,e,n)=>{let i=t;return!0===n?i=`${e.identifier}:${t}`:"string"==typeof n&&(i=`${n}:${t}`),i},b=(t,e,n)=>{const{bubbles:i,cancelable:r,composed:s}=e||{bubbles:!0,cancelable:!0,composed:!0};return e&&Object.assign(n,{originalEvent:e}),new CustomEvent(t,{bubbles:i,cancelable:r,composed:s,detail:n})},_={dispatchEvent:!0,eventPrefix:!0},E=(t,e={})=>{const{dispatchEvent:n,eventPrefix:i}=Object.assign({},_,e),r=(null==e?void 0:e.element)||t.element,s=t.disconnect.bind(t),o=new IntersectionObserver(e=>{const[s]=e;s.isIntersecting?(e=>{if(t.isVisible=!0,g(t,"appear").call(t,e),n){const n=y("appear",t,i),s=b(n,null,{controller:t,entry:e});r.dispatchEvent(s)}})(s):t.isVisible&&(e=>{if(t.isVisible=!1,g(t,"disappear").call(t,e),n){const n=y("disappear",t,i),s=b(n,null,{controller:t,entry:e});r.dispatchEvent(s)}})(s)},e),a=()=>{o.observe(r)},l=()=>{o.unobserve(r)};return Object.assign(t,{isVisible:!1,disconnect(){l(),s()}}),a(),[a,l]},w={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},k={debug:!1,logger:console};class V{constructor(t,e={}){var n,i,r;this.log=(t,e)=>{this.debug&&(this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${t}`,"color: #3B82F6","color: unset"),this.logger.log(Object.assign({controllerId:this.controllerId},e)),this.logger.groupEnd())},this.debug=null!==(i=null!==(n=null==e?void 0:e.debug)&&void 0!==n?n:t.application.stimulusUseDebug)&&void 0!==i?i:k.debug,this.logger=null!==(r=null==e?void 0:e.logger)&&void 0!==r?r:k.logger,this.controller=t,this.controllerId=t.element.id||t.element.dataset.id,this.controllerInitialize=t.initialize.bind(t),this.controllerConnect=t.connect.bind(t),this.controllerDisconnect=t.disconnect.bind(t)}}class T extends V{constructor(t,e={}){super(t,e),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==e?void 0:e.element)||t.element,this.controller=t,this.enhanceController(),this.observe()}enhanceController(){const t=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),t()}})}}class L extends V{constructor(t,e={}){super(t,e),this.observe=()=>{try{this.observer.observe(this.targetElement,this.options)}catch(t){this.controller.application.handleError(t,"At a minimum, one of childList, attributes, and/or characterData must be true",{})}},this.unobserve=()=>{this.observer.disconnect()},this.mutation=t=>{g(this.controller,"mutate").call(this.controller,t),this.log("mutate",{entries:t})},this.targetElement=(null==e?void 0:e.element)||t.element,this.controller=t,this.options=e,this.observer=new MutationObserver(this.mutation),this.enhanceController(),this.observe()}enhanceController(){const t=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),t()}})}}const S=(t,e={})=>{const n=new L(t,e);return[n.observe,n.unobserve]},C=t=>{const e=e=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:e};g(t,"windowResize").call(t,r)},n=t.disconnect.bind(t),i=()=>{window.addEventListener("resize",e),e()},r=()=>{window.removeEventListener("resize",e)};return Object.assign(t,{disconnect(){r(),n()}}),i(),[i,r]},A=(t,e=200)=>{let n=null;return function(){const i=arguments,r=this,s=()=>t.apply(r,i);n&&clearTimeout(n),n=setTimeout(s,e)}};var D=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var t=this;C(this),requestAnimationFrame(function(){t._handler();var e=t.el;e.style.resize="none",e.style.boxSizing="border-box",e.addEventListener("input",t._handler),e.addEventListener("focus",t._handler)})},n.disconnect=function(){this.el.removeEventListener("input",this._handler),this.el.removeEventListener("focus",this._handler)},n.windowResize=function(){this._handler()},n._handler=function(){this.autosize(this.el)},n.autosize=function(t){var e=t.offsetHeight-t.clientHeight;t.style.height="auto",t.style.height=t.scrollHeight+e+"px"},e}(d),I=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this._updateCharCount=this._updateCharCount.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t.inputTarget.addEventListener("input",t._updateCharCount),t._updateCharCount()})},n.disconnect=function(){this.inputTarget.removeEventListener("input",this._updateCharCount)},n._updateCharCount=function(){var t=this.inputTarget.value.length;this.outputTarget.innerText=t.toString(),this.hasErrorClass&&(this._isValidCount(t)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n._isValidCount=function(t){var e=0,n=99999;return this.hasMinValue&&(e=this.minValue),this.hasMaxValue&&(n=this.maxValue),t>=e&&t<=n},e}(d);I.targets=["input","output"],I.values={min:Number,max:Number},I.classes=["error"];var x=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this._toggle=this._toggle.bind(this),this._refresh=this._refresh.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t.hasSelectAllTarget&&(t.selectAllTarget.addEventListener("change",t._toggle),t.checkboxTargets.forEach(function(e){return e.addEventListener("change",t._refresh)}),t._refresh())})},n.disconnect=function(){var t=this;this.hasSelectAllTarget&&(this.selectAllTarget.removeEventListener("change",this._toggle),this.checkboxTargets.forEach(function(e){return e.removeEventListener("change",t._refresh)}))},n._toggle=function(t){t.preventDefault();var e=t.target;this.checkboxTargets.forEach(function(t){return t.checked=e.checked})},n._refresh=function(){var t=this.checkboxTargets.length,e=this._checked.length;this.selectAllTarget.checked=e>0,this.selectAllTarget.indeterminate=e>0&&e0&&(H(r)&&"checkbox"==r.type?n[this._formIdentifier][r.name]=r.checked:H(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}}]),e}(d);Z.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var tt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.connect=function(){E(this,{threshold:this._threshold,element:this.el})},n.appear=function(t){this.dispatch(this.el,"intersection:appear",{detail:{element:this.el}})},n.disappear=function(t){this.dispatch(this.el,"intersection:disappear",{detail:{element:this.el}})},o(e,[{key:"_threshold",get:function(){return this.hasThresholdValue?this.thresholdValue.split(",").map(function(t){return Number.parseFloat(t.trim())}).filter(function(t){return t>=0&&t<=1}):[0,1]}}]),e}(d);tt.values={threshold:String};var et=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._intervalHandle=null,e}l(e,t);var n=e.prototype;return n.initialize=function(){this._interval=this._interval.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t._intervalHandle=window.setInterval(t._interval,1e3*t.secondsValue)})},n.disconnect=function(){this._intervalHandle&&window.clearInterval(this._intervalHandle)},n._interval=function(){this.dispatch(this.el,"interval:action")},e}(d);et.values={seconds:Number};var nt,it=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.connect=function(){if("IntersectionObserver"in window){var t=E(this,{element:this.el,threshold:.3});this.observe=t[0],this.unobserve=t[1]}else this.loadContent()},n.appear=function(t){t.target===this.el&&t.isIntersecting&&(this.loadContent(),this.unobserve&&this.unobserve())},e}(p),rt=function(t,e){var n=void 0===e?{}:e,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(){t.scrollIntoView({behavior:r,block:o,inline:l})},u=function(){if("smooth"==r&&!st)return Promise.resolve(function(){try{return Promise.resolve(import("smoothscroll-polyfill")).then(function(t){nt||(nt=!0,(0,t.polyfill)())})}catch(t){return Promise.reject(t)}}()).then(function(){})}();return Promise.resolve(u&&u.then?u.then(c):c())}catch(t){return Promise.reject(t)}},st="scrollBehavior"in document.documentElement.style;function ot(t){if(!t)return null;var e=getComputedStyle(t).overflowY;return"visible"!==e&&"hidden"!==e&&t.scrollHeight>=t.clientHeight?t:ot(t.parentElement)||document.body}var at=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._dialog=null,e}l(e,t);var n=e.prototype;return n.initialize=function(){this.open=this.open.bind(this),this.close=this.close.bind(this)},n.connect=function(){},n.open=function(){var t=this,e=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),e.insertAdjacentElement("afterend",this._dialog),i.registerDialog(this._dialog),this._dialog.className=this._modalClassName,this._dialog.showModal(),rt(this._dialog,{behavior:"smooth",block:"end"}).catch(function(){return t._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 t=this;this._dialog&&(this._dialog.close(),this._dialog.remove(),this._dialog=null,rt(this.el,{behavior:"smooth",block:"end"}).catch(function(){return t.el.scrollIntoView(!1)}))},o(e,[{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"}}]),e}(d);at.values={src:String,srcSet:String,sizes:String},at.classes=["modal","image"];var lt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this.handleInputs=this.handleInputs.bind(this)},n.connect=function(){var t=this;this.inputTargets.forEach(function(e){return e.addEventListener("change",t.handleInputs)})},n.disconnect=function(){var t=this;this.inputTargets.forEach(function(e){return e.removeEventListener("change",t.handleInputs)})},n.handleInputs=function(t){var e=this.inputTargets.reduce(function(t,e){return e.checked?t+1:t},0),n=t.target;e>this.maxValue?(t.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=""))},e}(d);lt.targets=["input","error"],lt.values={max:Number,message:String};var ct=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){},n.connect=function(){},n.disconnect=function(){},n.play=function(t){try{return null==t||t.preventDefault(),Promise.resolve(this.mediaTarget.play()).then(function(){})}catch(t){return Promise.reject(t)}},n.pause=function(t){null==t||t.preventDefault(),this.mediaTarget.pause()},n.restart=function(t){null==t||t.preventDefault(),this.mediaTarget.currentTime=0},n.seek=function(t){null==t||t.preventDefault(),this.mediaTarget.currentTime+=5},e}(d);ct.targets=["media"];var ut=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.connect=function(){this._checkStructure()},n.add=function(t){null==t||t.preventDefault();var e=this.templateTarget.innerHTML.replace(/NEW_RECORD/g,this._generateID());this.targetTarget.insertAdjacentHTML(this._insertMode,e)},n.remove=function(t){t.preventDefault();var e=t.target.closest("."+this._wrapperClass);if(null==e)throw new Error("#remove was clicked from outside of a child record. Could not find an ancestor with class ."+this._wrapperClass);if("true"===e.dataset.newRecord)e.remove();else{e.style.display="none";var n=e.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`")},o(e,[{key:"_wrapperClass",get:function(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}},{key:"_insertMode",get:function(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}}]),e}(d);ut.targets=["target","template"],ut.values={insertMode:String,wrapperClass:String};var ht=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this.checkPasswordsMatch=this.checkPasswordsMatch.bind(this)},n.connect=function(){var t=this;this.passwordTargets.forEach(function(e){return e.addEventListener("change",t.checkPasswordsMatch)})},n.disconnect=function(){var t=this;this.passwordTargets.forEach(function(e){return e.removeEventListener("change",t.checkPasswordsMatch)})},n._allPasswordsMatch=function(){var t=new Set(this.passwordTargets.map(function(t){return t.value}));return t.has("")||1==t.size},n.checkPasswordsMatch=function(){var t=this,e=this.el;this._allPasswordsMatch()?(this.dispatch(e,"password-confirm:match"),this.hasErrorClass&&this.passwordTargets.forEach(function(e){return e.classList.remove(t.errorClass)})):(this.dispatch(e,"password-confirm:no-match"),this.hasErrorClass&&this.passwordTargets.forEach(function(e){return e.classList.add(t.errorClass)}))},e}(d);ht.targets=["password"],ht.classes=["error"];var dt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.peak=function(t){null==t||t.preventDefault(),this.passwordTarget.type="text"},n.hide=function(t){null==t||t.preventDefault(),this.passwordTarget.type="password"},n.toggle=function(t){null==t||t.preventDefault(),"password"===this.passwordTarget.type?this.peak():this.hide()},e}(d);dt.targets=["password"];var ft=function(t){function e(){return t.apply(this,arguments)||this}return l(e,t),e.prototype.replace=function(t){var e=t.detail[0];if(e instanceof Node){var n=e.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",e)},o(e,[{key:"_selector",get:function(){return this.hasSelectorValue?this.selectorValue:'[data-controller~="'+this.identifier+'"]'}}]),e}(d);ft.targets=[],ft.values={selector:String};var mt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.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(t){var e=t.data;e.hasOwnProperty("name")&&"iframe-body"===e.name&&e.hasOwnProperty("height")&&this.resize(e.height)},n.resize=function(t){this.el.style.height=t+"px"},e}(d),pt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.connect=function(){var t,e,n;window.self!==window.top&&(C(this),e={},null===(n=(t=this).constructor.debounces)||void 0===n||n.forEach(n=>{if("string"==typeof n&&(t[n]=A(t[n],null==e?void 0:e.wait)),"object"==typeof n){const{name:i,wait:r}=n;if(!i)return;t[i]=A(t[i],r||(null==e?void 0:e.wait))}}),this.postUpdate())},n.windowResize=function(t){this.postUpdate()},n.postUpdate=function(){var t={name:"iframe-body",height:this.getHeight()};window.parent.postMessage(t,"*")},n.getHeight=function(){var t=document.body,e=document.documentElement;return Math.max(t.scrollHeight,t.offsetHeight,e.clientHeight,e.scrollHeight,e.offsetHeight)},e}(d);pt.debounces=["postUpdate"];var vt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n._cleanupSelf=function(){this.cleanup(this.el)},n.cleanup=function(t){var e,n,i,s=this;t.dataset.controller=(null==(e=t.dataset.controller)?void 0:e.replaceAll(new RegExp("(s|^)"+this.identifier+"(s|$)","g"),""))||"",""==t.dataset.controller&&delete t.dataset.controller;var o=new RegExp("(s|^)"+this.identifier+"\\..+?(s|$)","g");t.dataset.target=(null==(n=t.dataset.target)?void 0:n.replaceAll(o,""))||"",delete t.dataset[r(this.identifier+"-target")],""==t.dataset.target&&delete t.dataset.target,t.dataset.action=(null==(i=t.dataset.target)?void 0:i.replaceAll(o,""))||"",delete t.dataset[r(this.identifier+"-action")],""==t.dataset.action&&delete t.dataset.action;var a=this.constructor.values;a&&Object.keys(a).forEach(function(e){return delete t.dataset[r(s.identifier+"-"+e+"-value")]});var l=this.constructor.classes;l&&Object.keys(l).forEach(function(e){return delete t.dataset[r(s.identifier+"-"+e+"-class")]})},e}(d),gt=function(t){function e(){return t.apply(this,arguments)||this}return l(e,t),e.prototype.connect=function(){var t=this;requestAnimationFrame(function(){rt(t.el,{behavior:t.hasBehaviorValue?t.behaviorValue:"smooth",block:t.hasBlockValue?t.blockValue:"center",inline:t.hasInlineValue?t.inlineValue:"center"}).catch(function(){return t.el.scrollIntoView()}),t._cleanupSelf()})},e}(vt);gt.values={behavior:String,block:String,inline:String};var yt=function(t){function e(){return t.apply(this,arguments)||this}return l(e,t),e.prototype.scroll=function(t){var e;null==t||t.preventDefault(),null!=(e="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ot(this.el))&&rt(e,{behavior:"smooth",block:"end"}).catch(function(){return e.scrollIntoView(!1)})},e}(d);yt.values={mode:String};var bt=function(t){function e(){return t.apply(this,arguments)||this}return l(e,t),e.prototype.scroll=function(){var t=document.querySelector(this.selectorValue);t?rt(t,{behavior:this.hasBehaviorValue?this.behaviorValue:"smooth",block:this.hasBlockValue?this.blockValue:"center",inline:this.hasInlineValue?this.inlineValue:"center"}).catch(function(){return t.scrollIntoView()}):console.warn("Could not find target for '"+this.selectorValue+"'")},e}(d);bt.values={selector:String,behavior:String,block:String,inline:String};var _t=function(t){function e(){return t.apply(this,arguments)||this}return l(e,t),e.prototype.scroll=function(t){var e;null==t||t.preventDefault(),null!=(e="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ot(this.el))&&rt(e,{behavior:"smooth",block:"start"}).catch(function(){return e.scrollIntoView(!1)})},e}(d);_t.values={mode:String};var Et=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeout=null,e}l(e,t);var n=e.prototype;return n.connect=function(){var t=this;requestAnimationFrame(function(){t._timeout=setTimeout(function(){return t.el.remove()},1e3*t.secondsValue)})},n.disconnect=function(){this._timeout&&clearTimeout(this._timeout)},e}(d);Et.values={seconds:Number};var wt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._magicElement=null,e}l(e,t);var n=e.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 t=this,e=this.el;this.createMagicElement(),new IntersectionObserver(function(n){n.forEach(function(n){n.target===t._magicElement&&(0===n.intersectionRatio?e.classList.add(t.hasStuckClass?t.stuckClass:"stuck"):1===n.intersectionRatio&&e.classList.remove(t.hasStuckClass?t.stuckClass:"stuck"))})},{threshold:[0,1]}).observe(this._magicElement)},o(e,[{key:"_mode",get:function(){return this.hasModeValue?this.modeValue:"top"}}]),e}(d);wt.classes=["stuck"],wt.values={mode:String};var kt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._lastIndex=null,e._reverse=!1,e}l(e,t);var n=e.prototype;return n.initialize=function(){this.sort=this.sort.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t._tableHeaders.forEach(function(e){return e.addEventListener("click",t.sort)}),t.hasStartSortValue&&t._sortByColumn(t.startSortValue)})},n.disconnect=function(){var t=this;this._tableHeaders.forEach(function(e){return e.removeEventListener("click",t.sort)})},n.sort=function(t){t.preventDefault();var e=this._indexOfHeaderCell(t.target);this._sortByColumn(e)},n._indexOfHeaderCell=function(t){return this._tableHeaders.indexOf(t)},n._sortByColumn=function(t){var e=this;this._reverse=t===this._lastIndex&&!this._reverse;var n=document.createDocumentFragment();this._tableRows.sort(function(n,i){var r,s,o=Array.from(n.cells),a=Array.from(i.cells),l=(null==(r=o[t])?void 0:r.innerText)||"",c=(null==(s=a[t])?void 0:s.innerText)||"",u=l.localeCompare(c,"en",{sensitivity:"base",numeric:!0,caseFirst:"upper"});return n.dataset.sortTop||i.dataset.sortBottom?n.dataset.sortTop&&i.dataset.sortTop?u:-1:n.dataset.sortBottom||i.dataset.sortTop?n.dataset.sortBottom&&i.dataset.sortBottom?u:1:e._reverse?u>0?-1:1:u}).forEach(function(t){return n.appendChild(t)}),this._tableBody.innerHTML="",this._tableBody.appendChild(n),this._lastIndex=t},o(e,[{key:"_tableHead",get:function(){var t=this.el.tHead;if(null==t)throw new Error("Expected table to have a element.");return t}},{key:"_tableHeaders",get:function(){var t=this._tableHead.rows;if(0==t.length)throw new Error("Expected table to have a element with at least one row.");return Array.from(t[0].cells)}},{key:"_tableBody",get:function(){return this.el.tBodies[0]}},{key:"_tableRows",get:function(){return Array.from(this._tableBody.rows)}}]),e}(d);kt.values={startSort:Number};var Vt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this.truncate=this.truncate.bind(this),this.expand=this.expand.bind(this)},n.connect=function(){var t=this;S(this,{childList:!0,element:this._tableBody}),requestAnimationFrame(function(){t.truncate(),t.showMoreTarget.addEventListener("click",t.expand)})},n.truncate=function(t){var e=this;null==t||t.preventDefault(),this._truncated=!0,this._tableRows.length>=this._limit?(this._tableRows.slice(this._limit).forEach(function(t){t!==e.showMoreTarget&&e._hideElement(t)}),this._showElement(this.showMoreTarget)):this._hideElement(this.showMoreTarget)},n.expand=function(t){var e=this;this._truncated=!1,null==t||t.preventDefault(),this._tableRows.slice(this._limit).forEach(function(t){t!==e.showMoreTarget&&e._showElement(t)}),this._hideElement(this.showMoreTarget)},n.mutate=function(t){this._truncated&&this._reTruncate()},n._showElement=function(t){t.style.display=""},n._hideElement=function(t){t.style.display="none"},n._reTruncate=function(){var t=this;this._tableRows.slice(0,this._limit).forEach(function(e){e!==t.showMoreTarget&&t._showElement(e)}),this._tableRows.slice(this._limit).forEach(function(e){e!==t.showMoreTarget&&t._hideElement(e)}),this._showElement(this.showMoreTarget)},o(e,[{key:"_truncated",get:function(){return!!this.hasTruncatedValue&&this.truncatedValue},set:function(t){this.truncatedValue=t}},{key:"_tableBody",get:function(){return this.el.tBodies[0]}},{key:"_tableRows",get:function(){return Array.from(this._tableBody.rows)}},{key:"_limit",get:function(){return this.hasLimitValue?this.limitValue:20}}]),e}(d);Vt.targets=["showMore"],Vt.values={limit:Number,truncated:Boolean};var Tt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.connect=function(){var t=this;if(!this.hasInsertValue)throw new Error("`insert` value was not specified");requestAnimationFrame(function(){t.hasImmediateValue&&t.immediateValue&&t.execute()})},n.execute=function(t){null==t||t.preventDefault();var e=this.el,n=document.querySelector(this.targetValue);if(null!=n){var i=e.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")}e.remove()}else this.dispatch(e,"teleport:error")},e}(vt);Tt.values={target:String,insert:String,immediate:Boolean};var Lt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeoutHandle=null,e}l(e,t);var n=e.prototype;return n.initialize=function(){this._timeout=this._timeout.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t._timeoutHandle=window.setTimeout(t._timeout,1e3*t.secondsValue)})},n.disconnect=function(){this._timeoutHandle&&window.clearTimeout(this._timeoutHandle)},n._timeout=function(){this.dispatch(this.el,"timeout")},e}(d);Lt.values={seconds:Number};var St=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.connect=function(){var t=this;if(!this.hasClassValue)throw new Error("data-toggle-class-class-value must not be empty");(this.hasMouseEnterValue||this.hasMouseLeaveValue)&&((t,e={})=>{new T(this,e)})(),this.hasClickAwayValue&&this.clickAwayValue&&((t,e={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},w,e),o=r=>{const o=(null==e?void 0:e.element)||t.element;if(!(o.contains(r.target)||!function(t){const e=t.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return e.top<=n&&e.top+e.height>=0&&e.left<=i&&e.left+e.width>=0}(o)&&n)&&(t.clickOutside&&t.clickOutside(r),i)){const e=y("click:outside",t,s),n=b(e,r,{controller:t});o.dispatchEvent(n)}},a=t.disconnect.bind(t);Object.assign(t,{disconnect(){null==r||r.forEach(t=>{window.removeEventListener(t,o,!1)}),a()}}),null==r||r.forEach(t=>{window.addEventListener(t,o,!1)})})(this),requestAnimationFrame(function(){t.hasInitialValue&&t.toggleTargets.forEach("on"===t.initialValue?function(e){return t._elementOn(e)}:function(e){return t._elementOff(e)})})},n.clickOutside=function(){var t=this;this.toggleTargets.forEach(function(e){t._elementWasToggled(e)&&(t._elementToggleStatus(e),t._elementToggle(e))})},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(t){var e=this;this.toggleTargets.forEach(function(t){e._elementToggleStatus(t),e._elementOn(t)})},n.off=function(t){var e=this;this.toggleTargets.forEach(function(t){e._elementToggleStatus(t),e._elementOff(t)})},n.toggle=function(t){var e=this;this.toggleTargets.forEach(function(t){e._elementToggleStatus(t),e._elementToggle(t)})},n._elementWasToggled=function(t){return"true"==t.dataset.toggled},n._elementToggleStatus=function(t){this._elementWasToggled(t)?delete t.dataset.toggled:t.dataset.toggled="true"},n._elementToggle=function(t){this.classValue.split(" ").forEach(function(e){return t.classList.toggle(e)})},n._elementOn=function(t){this.classValue.split(" ").forEach(function(e){return t.classList.toggle(e,!0)})},n._elementOff=function(t){this.classValue.split(" ").forEach(function(e){return t.classList.toggle(e,!1)})},e}(d);function Ct(t){return"TURBO-FRAME"==t.nodeName}St.targets=["toggle"],St.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var At=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.toggle=function(t){null==t||t.preventDefault();var e=this._getFrame().src;null==e||e!==this._getSrc()?this._setSrc():this._clear()},n.setSrc=function(t){null==t||t.preventDefault(),this._setSrc()},n.clear=function(t){null==t||t.preventDefault(),this._clear()},n._setSrc=function(){var t=this._getFrame();this.hasLoadingMessageValue&&(t.innerHTML=this.loadingMessageValue),t.src=this._getSrc()},n._clear=function(){var t=this._getFrame();t.src="",t.innerHTML=""},n._getFrame=function(){var t=document.getElementById(""+this.frameIdValue);if(null==t)throw new Error("Could not find frame with ID '"+this.frameIdValue+"'");if(Ct(t))return t;throw new Error("Element targeted by ID '"+this.frameIdValue+"'")},n._getSrc=function(){var t=this.el;if(this.hasSrcValue)return this.srcValue;if(N(t))return t.href;throw new Error("No link given to drive frame to")},e}(d);At.values={frameId:String,src:String,loadingMessage:String};var Dt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeoutHandle=null,e}l(e,t);var n=e.prototype;return n.initialize=function(){this.refresh=this.refresh.bind(this)},n.connect=function(){var t=this,e=this.el;if(!Ct(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(function(){return t._timeoutHandle=setTimeout(function(){return t.refresh()},t.intervalValue)})},n.disconnect=function(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)},n.refresh=function(t){null==t||t.preventDefault();var e=this.el;e.src=e.src},o(e,[{key:"_poll",get:function(){return!!this.hasPollValue&&this.pollValue}}]),e}(d);Dt.values={interval:Number,poll:Boolean};var It=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.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 t=0,e=this.inputTarget.value.match(/\S+/g);this.outputTarget.innerText=(t=e&&e.length||0).toString(),this.hasErrorClass&&(this._isValidCount(t)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n._isValidCount=function(t){var e=0,n=99999;return this.hasMinValue&&(e=this.minValue),this.hasMaxValue&&(n=this.maxValue),t>=e&&t<=n},e}(d);It.targets=["input","output"],It.values={min:Number,max:Number},It.classes=["error"];export{f as AnchorSpyController,m as AppearanceController,p as AsyncBlockController,v as AutoSubmitFormController,D as AutosizeController,I as CharCountController,x as CheckboxSelectAllController,M as ClipboardController,F as ConfirmController,q as ConfirmNavigationController,j as DebugController,P as DetectDirtyController,W as DetectDirtyFormController,$ as DisableInputsController,U as DisableWithController,J as DismissableController,Y as ElementSaveController,G as EmptyDomController,K as EnableInputsController,Q as FallbackImageController,X as FormRcController,Z as FormSaveController,tt as IntersectionController,et as IntervalController,it as LazyBlockController,at as LightboxImageController,lt as LimitedSelectionCheckboxesController,ct as MediaPlayerController,ut as NestedFormController,ht as PasswordConfirmController,dt as PasswordPeekController,ft as RemoteFormController,pt as ResponsiveIframeBodyController,mt as ResponsiveIframeWrapperController,gt as ScrollIntoFocusController,yt as ScrollToBottomController,bt as ScrollToController,_t as ScrollToTopController,Et as SelfDestructController,wt as StickyController,kt as TableSortController,Vt as TableTruncateController,Tt as TeleportController,Lt as TimeoutController,St as ToggleClassController,At as TurboFrameRCController,Dt as TurboFrameRefreshController,It as WordCountController}; +import{Controller as t}from"stimulus";import e from"lodash-es/get";import n from"lodash-es/set";import i from"dialog-polyfill";import r from"camelcase";function s(t,e){for(var n=0;nt.length)&&(e=t.length);for(var n=0,i=new Array(e);n=t.length?{done:!0}:{done:!1,value:t[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=t[Symbol.iterator]()).next.bind(n)}var d=function(t){function e(e){var n;return n=t.call(this,e)||this,new Proxy(c(n),{get:function(t,e){var i=Reflect.get(t,e),r=c(n);if(function(t){switch(t){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(t)||/^.*?Target(s)?$/.test(t)||/^.*?Value$/.test(t)||/^.*?ValueChanged$/.test(t)||/^.*?Class$/.test(t)||/^.*?Classes$/.test(t))}(e.toString())){if("function"==typeof i)return new Proxy(i,{apply:function(t,n,i){return r.log(e.toString(),{args:i}),Reflect.apply(t,n,i)}});n.log(e.toString())}return i}})||c(n)}l(e,t);var n=e.prototype;return n.metaValue=function(t){var e=document.head.querySelector('meta[name="'+t+'"]');return(null==e?void 0:e.getAttribute("content"))||null},n.dispatch=function(t,e,n){void 0===n&&(n={});var i=Object.assign({},{bubbles:!0,cancelable:!0,detail:{target:t}},n);i.detail.target&&(i.detail.target=t);var r=new CustomEvent(e,i);this.logEvent(e,r,t),t.dispatchEvent(r)},n.log=function(t,e){if(void 0===e&&(e={}),this.application.debug){var n=console;n.groupCollapsed("%c"+this.identifier+" %c#"+t,"color: #3B82F6","color: unset"),n.log(a({element:this.element},e)),n.groupEnd()}},n.logEvent=function(t,e,n){if(this.application.debug){var i=console;i.groupCollapsed("%c"+this.identifier+" %c"+t+"%c","color: #3B82F6","color: #0be000","color: unset"),i.log({element:n}),i.groupEnd()}},o(e,[{key:"el",get:function(){return this.element}},{key:"isTurboPreview",get:function(){return document.documentElement.hasAttribute("data-turbo-preview")||document.documentElement.hasAttribute("data-turbolinks-preview")}},{key:"isTurbolinksPreview",get:function(){return this.isTurboPreview}},{key:"csrfToken",get:function(){return this.metaValue("csrf-token")}}]),e}(t),f=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this._checkAnchor=this._checkAnchor.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t._checkAnchor(),window.addEventListener("hashchange",t._checkAnchor)})},n.disconnect=function(){window.removeEventListener("hashchange",this._checkAnchor)},n.write=function(t){null==t||t.preventDefault(),this._anchor=this._key},n._checkAnchor=function(){this.dispatch(this.el,this._key===this._anchor?"anchor-spy:active":"anchor-spy:inactive")},o(e,[{key:"_key",get:function(){return this.keyValue.replaceAll("#","")}},{key:"_anchor",get:function(){return window.location.hash.substr(1)},set:function(t){window.location.hash=t}}]),e}(d);f.values={key:String};var m=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this._handleVisibility=this._handleVisibility.bind(this)},n.connect=function(){var t=this;window.addEventListener("focus",this._handleVisibility),window.addEventListener("blur",this._handleVisibility),document.addEventListener("visibilitychange",this._handleVisibility),requestAnimationFrame(function(){t._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()},e}(d),p=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.connect=function(){this.loadContent()},n.loadContent=function(){var t=this,e=this,n=this.hasReplaceTarget?this.replaceTarget:this.el;fetch(this.endpointValue).then(function(t){return t.text()}).then(function(i){var r=document.createElement("div");if(r.innerHTML=i,t.hasSelectorValue){var s=r.querySelectorAll(t.selectorValue);n.replaceWith.apply(n,s)}else n.replaceWith.apply(n,r.children);e.dispatch(n,"ajax:success")}).catch(function(i){n.replaceWith(t._errorMessage),e.dispatch(n,"ajax:error")}).finally(function(){e.dispatch(n,"ajax:complete")})},o(e,[{key:"_errorMessage",get:function(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}}]),e}(d);p.targets=["replace"],p.values={endpoint:String,errorMessage:String,selector:String};var v=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this.submit=this.submit.bind(this)},n.connect=function(){var t=this;this.el.querySelectorAll("input, select, textarea").forEach(function(e){return e.addEventListener("change",t.submit)})},n.disconnect=function(){var t=this;this.el.querySelectorAll("input, select, textarea").forEach(function(e){return e.removeEventListener("change",t.submit)})},n.submit=function(){this.dispatch(this.el,"submit")},e}(d);const g=(t,e)=>{const n=t[e];return"function"==typeof n?n:(...t)=>{}},b=(t,e,n)=>{let i=t;return!0===n?i=`${e.identifier}:${t}`:"string"==typeof n&&(i=`${n}:${t}`),i},y=(t,e,n)=>{const{bubbles:i,cancelable:r,composed:s}=e||{bubbles:!0,cancelable:!0,composed:!0};return e&&Object.assign(n,{originalEvent:e}),new CustomEvent(t,{bubbles:i,cancelable:r,composed:s,detail:n})},_={dispatchEvent:!0,eventPrefix:!0},E=(t,e={})=>{const{dispatchEvent:n,eventPrefix:i}=Object.assign({},_,e),r=(null==e?void 0:e.element)||t.element,s=t.disconnect.bind(t),o=new IntersectionObserver(e=>{const[s]=e;s.isIntersecting?(e=>{if(t.isVisible=!0,g(t,"appear").call(t,e),n){const n=b("appear",t,i),s=y(n,null,{controller:t,entry:e});r.dispatchEvent(s)}})(s):t.isVisible&&(e=>{if(t.isVisible=!1,g(t,"disappear").call(t,e),n){const n=b("disappear",t,i),s=y(n,null,{controller:t,entry:e});r.dispatchEvent(s)}})(s)},e),a=()=>{o.observe(r)},l=()=>{o.unobserve(r)};return Object.assign(t,{isVisible:!1,disconnect(){l(),s()}}),a(),[a,l]},w={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},k={debug:!1,logger:console};class V{constructor(t,e={}){var n,i,r;this.log=(t,e)=>{this.debug&&(this.logger.groupCollapsed(`%c${this.controller.identifier} %c#${t}`,"color: #3B82F6","color: unset"),this.logger.log(Object.assign({controllerId:this.controllerId},e)),this.logger.groupEnd())},this.debug=null!==(i=null!==(n=null==e?void 0:e.debug)&&void 0!==n?n:t.application.stimulusUseDebug)&&void 0!==i?i:k.debug,this.logger=null!==(r=null==e?void 0:e.logger)&&void 0!==r?r:k.logger,this.controller=t,this.controllerId=t.element.id||t.element.dataset.id,this.controllerInitialize=t.initialize.bind(t),this.controllerConnect=t.connect.bind(t),this.controllerDisconnect=t.disconnect.bind(t)}}class T extends V{constructor(t,e={}){super(t,e),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==e?void 0:e.element)||t.element,this.controller=t,this.enhanceController(),this.observe()}enhanceController(){const t=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),t()}})}}class L extends V{constructor(t,e={}){super(t,e),this.observe=()=>{try{this.observer.observe(this.targetElement,this.options)}catch(t){this.controller.application.handleError(t,"At a minimum, one of childList, attributes, and/or characterData must be true",{})}},this.unobserve=()=>{this.observer.disconnect()},this.mutation=t=>{g(this.controller,"mutate").call(this.controller,t),this.log("mutate",{entries:t})},this.targetElement=(null==e?void 0:e.element)||t.element,this.controller=t,this.options=e,this.observer=new MutationObserver(this.mutation),this.enhanceController(),this.observe()}enhanceController(){const t=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),t()}})}}const S=(t,e={})=>{const n=new L(t,e);return[n.observe,n.unobserve]},C=t=>{const e=e=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:e};g(t,"windowResize").call(t,r)},n=t.disconnect.bind(t),i=()=>{window.addEventListener("resize",e),e()},r=()=>{window.removeEventListener("resize",e)};return Object.assign(t,{disconnect(){r(),n()}}),i(),[i,r]},A=(t,e=200)=>{let n=null;return function(){const i=arguments,r=this,s=()=>t.apply(r,i);n&&clearTimeout(n),n=setTimeout(s,e)}};var D=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var t=this;C(this),requestAnimationFrame(function(){t._handler();var e=t.el;e.style.resize="none",e.style.boxSizing="border-box",e.addEventListener("input",t._handler),e.addEventListener("focus",t._handler)})},n.disconnect=function(){this.el.removeEventListener("input",this._handler),this.el.removeEventListener("focus",this._handler)},n.windowResize=function(){this._handler()},n._handler=function(){this.autosize(this.el)},n.autosize=function(t){var e=t.offsetHeight-t.clientHeight;t.style.height="auto",t.style.height=t.scrollHeight+e+"px"},e}(d),I=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this._updateCharCount=this._updateCharCount.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t.inputTarget.addEventListener("input",t._updateCharCount),t._updateCharCount()})},n.disconnect=function(){this.inputTarget.removeEventListener("input",this._updateCharCount)},n._updateCharCount=function(){var t=this.inputTarget.value.length;this.outputTarget.innerText=t.toString(),this.hasErrorClass&&(this._isValidCount(t)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n._isValidCount=function(t){var e=0,n=99999;return this.hasMinValue&&(e=this.minValue),this.hasMaxValue&&(n=this.maxValue),t>=e&&t<=n},e}(d);I.targets=["input","output"],I.values={min:Number,max:Number},I.classes=["error"];var x=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this._toggle=this._toggle.bind(this),this._refresh=this._refresh.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t.hasSelectAllTarget&&(t.selectAllTarget.addEventListener("change",t._toggle),t.checkboxTargets.forEach(function(e){return e.addEventListener("change",t._refresh)}),t._refresh())})},n.disconnect=function(){var t=this;this.hasSelectAllTarget&&(this.selectAllTarget.removeEventListener("change",this._toggle),this.checkboxTargets.forEach(function(e){return e.removeEventListener("change",t._refresh)}))},n._toggle=function(t){t.preventDefault();var e=t.target;this.checkboxTargets.forEach(function(t){return t.checked=e.checked})},n._refresh=function(){var t=this.checkboxTargets.length,e=this._checked.length;this.selectAllTarget.checked=e>0,this.selectAllTarget.indeterminate=e>0&&e0&&(H(r)&&"checkbox"==r.type?n[this._formIdentifier][r.name]=r.checked:H(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}}]),e}(d);Z.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var tt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.connect=function(){E(this,{threshold:this._threshold,element:this.el})},n.appear=function(t){this.dispatch(this.el,"intersection:appear",{detail:{element:this.el}})},n.disappear=function(t){this.dispatch(this.el,"intersection:disappear",{detail:{element:this.el}})},o(e,[{key:"_threshold",get:function(){return this.hasThresholdValue?this.thresholdValue.split(",").map(function(t){return Number.parseFloat(t.trim())}).filter(function(t){return t>=0&&t<=1}):[0,1]}}]),e}(d);tt.values={threshold:String};var et=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._intervalHandle=null,e}l(e,t);var n=e.prototype;return n.initialize=function(){this._interval=this._interval.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t._intervalHandle=window.setInterval(t._interval,1e3*t.secondsValue)})},n.disconnect=function(){this._intervalHandle&&window.clearInterval(this._intervalHandle)},n._interval=function(){this.dispatch(this.el,"interval:action")},e}(d);et.values={seconds:Number};var nt,it=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.connect=function(){if("IntersectionObserver"in window){var t=E(this,{element:this.el,threshold:.3});this.observe=t[0],this.unobserve=t[1]}else this.loadContent()},n.appear=function(t){t.target===this.el&&t.isIntersecting&&(this.loadContent(),this.unobserve&&this.unobserve())},e}(p),rt=function(t,e){var n=void 0===e?{}:e,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(){t.scrollIntoView({behavior:r,block:o,inline:l})},u=function(){if("smooth"==r&&!st)return Promise.resolve(function(){try{return Promise.resolve(import("smoothscroll-polyfill")).then(function(t){nt||(nt=!0,(0,t.polyfill)())})}catch(t){return Promise.reject(t)}}()).then(function(){})}();return Promise.resolve(u&&u.then?u.then(c):c())}catch(t){return Promise.reject(t)}},st="scrollBehavior"in document.documentElement.style;function ot(t){if(!t)return null;var e=getComputedStyle(t).overflowY;return"visible"!==e&&"hidden"!==e&&t.scrollHeight>=t.clientHeight?t:ot(t.parentElement)||document.body}var at=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._dialog=null,e}l(e,t);var n=e.prototype;return n.initialize=function(){this.open=this.open.bind(this),this.close=this.close.bind(this)},n.connect=function(){},n.open=function(){var t=this,e=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),e.insertAdjacentElement("afterend",this._dialog),i.registerDialog(this._dialog),this._dialog.className=this._modalClassName,this._dialog.showModal(),rt(this._dialog,{behavior:"smooth",block:"end"}).catch(function(){return t._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 t=this;this._dialog&&(this._dialog.close(),this._dialog.remove(),this._dialog=null,rt(this.el,{behavior:"smooth",block:"end"}).catch(function(){return t.el.scrollIntoView(!1)}))},o(e,[{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"}}]),e}(d);at.values={src:String,srcSet:String,sizes:String},at.classes=["modal","image"];var lt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this.handleInputs=this.handleInputs.bind(this)},n.connect=function(){var t=this;this.inputTargets.forEach(function(e){return e.addEventListener("change",t.handleInputs)})},n.disconnect=function(){var t=this;this.inputTargets.forEach(function(e){return e.removeEventListener("change",t.handleInputs)})},n.handleInputs=function(t){var e=this.inputTargets.reduce(function(t,e){return e.checked?t+1:t},0),n=t.target;e>this.maxValue?(t.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=""))},e}(d);lt.targets=["input","error"],lt.values={max:Number,message:String};var ct=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){},n.connect=function(){},n.disconnect=function(){},n.play=function(t){try{return null==t||t.preventDefault(),Promise.resolve(this.mediaTarget.play()).then(function(){})}catch(t){return Promise.reject(t)}},n.pause=function(t){null==t||t.preventDefault(),this.mediaTarget.pause()},n.restart=function(t){null==t||t.preventDefault(),this.mediaTarget.currentTime=0},n.seek=function(t){null==t||t.preventDefault(),this.mediaTarget.currentTime+=5},e}(d);ct.targets=["media"];var ut=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.connect=function(){this._checkStructure()},n.add=function(t){null==t||t.preventDefault();var e=this.templateTarget.innerHTML.replace(/NEW_RECORD/g,this._generateID());this.targetTarget.insertAdjacentHTML(this._insertMode,e)},n.remove=function(t){t.preventDefault();var e=t.target.closest("."+this._wrapperClass);if(null==e)throw new Error("#remove was clicked from outside of a child record. Could not find an ancestor with class ."+this._wrapperClass);if("true"===e.dataset.newRecord)e.remove();else{e.style.display="none";var n=e.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`")},o(e,[{key:"_wrapperClass",get:function(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}},{key:"_insertMode",get:function(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}}]),e}(d);ut.targets=["target","template"],ut.values={insertMode:String,wrapperClass:String};var ht=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this.checkPasswordsMatch=this.checkPasswordsMatch.bind(this)},n.connect=function(){var t=this;this.passwordTargets.forEach(function(e){return e.addEventListener("change",t.checkPasswordsMatch)})},n.disconnect=function(){var t=this;this.passwordTargets.forEach(function(e){return e.removeEventListener("change",t.checkPasswordsMatch)})},n._allPasswordsMatch=function(){var t=new Set(this.passwordTargets.map(function(t){return t.value}));return t.has("")||1==t.size},n.checkPasswordsMatch=function(){var t=this,e=this.el;this._allPasswordsMatch()?(this.dispatch(e,"password-confirm:match"),this.hasErrorClass&&this.passwordTargets.forEach(function(e){return e.classList.remove(t.errorClass)})):(this.dispatch(e,"password-confirm:no-match"),this.hasErrorClass&&this.passwordTargets.forEach(function(e){return e.classList.add(t.errorClass)}))},e}(d);ht.targets=["password"],ht.classes=["error"];var dt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.peak=function(t){null==t||t.preventDefault(),this.passwordTarget.type="text"},n.hide=function(t){null==t||t.preventDefault(),this.passwordTarget.type="password"},n.toggle=function(t){null==t||t.preventDefault(),"password"===this.passwordTarget.type?this.peak():this.hide()},e}(d);dt.targets=["password"];var ft=function(t){function e(){return t.apply(this,arguments)||this}return l(e,t),e.prototype.replace=function(t){var e=t.detail[0];if(e instanceof Node){var n=e.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",e)},o(e,[{key:"_selector",get:function(){return this.hasSelectorValue?this.selectorValue:'[data-controller~="'+this.identifier+'"]'}}]),e}(d);ft.targets=[],ft.values={selector:String};var mt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.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(t){var e=t.data;e.hasOwnProperty("name")&&"iframe-body"===e.name&&e.hasOwnProperty("height")&&this.resize(e.height)},n.resize=function(t){this.el.style.height=t+"px"},e}(d),pt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.connect=function(){var t,e,n;window.self!==window.top&&(C(this),e={},null===(n=(t=this).constructor.debounces)||void 0===n||n.forEach(n=>{if("string"==typeof n&&(t[n]=A(t[n],null==e?void 0:e.wait)),"object"==typeof n){const{name:i,wait:r}=n;if(!i)return;t[i]=A(t[i],r||(null==e?void 0:e.wait))}}),this.postUpdate())},n.windowResize=function(t){this.postUpdate()},n.postUpdate=function(){var t={name:"iframe-body",height:this.getHeight()};window.parent.postMessage(t,"*")},n.getHeight=function(){var t=document.body,e=document.documentElement;return Math.max(t.scrollHeight,t.offsetHeight,e.clientHeight,e.scrollHeight,e.offsetHeight)},e}(d);pt.debounces=["postUpdate"];var vt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n._cleanupSelf=function(){this.cleanup(this.el)},n.cleanup=function(t){var e,n,i,s=this;t.dataset.controller=(null==(e=t.dataset.controller)?void 0:e.replaceAll(new RegExp("(s|^)"+this.identifier+"(s|$)","g"),""))||"",""==t.dataset.controller&&delete t.dataset.controller;var o=new RegExp("(s|^)"+this.identifier+"\\..+?(s|$)","g");t.dataset.target=(null==(n=t.dataset.target)?void 0:n.replaceAll(o,""))||"",delete t.dataset[r(this.identifier+"-target")],""==t.dataset.target&&delete t.dataset.target,t.dataset.action=(null==(i=t.dataset.target)?void 0:i.replaceAll(o,""))||"",delete t.dataset[r(this.identifier+"-action")],""==t.dataset.action&&delete t.dataset.action;var a=this.constructor.values;a&&Object.keys(a).forEach(function(e){return delete t.dataset[r(s.identifier+"-"+e+"-value")]});var l=this.constructor.classes;l&&Object.keys(l).forEach(function(e){return delete t.dataset[r(s.identifier+"-"+e+"-class")]})},e}(d),gt=function(t){function e(){return t.apply(this,arguments)||this}return l(e,t),e.prototype.connect=function(){var t=this;requestAnimationFrame(function(){rt(t.el,{behavior:t.hasBehaviorValue?t.behaviorValue:"smooth",block:t.hasBlockValue?t.blockValue:"center",inline:t.hasInlineValue?t.inlineValue:"center"}).catch(function(){return t.el.scrollIntoView()}),t._cleanupSelf()})},e}(vt);gt.values={behavior:String,block:String,inline:String};var bt=function(t){function e(){return t.apply(this,arguments)||this}return l(e,t),e.prototype.scroll=function(t){var e;null==t||t.preventDefault(),null!=(e="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ot(this.el))&&rt(e,{behavior:"smooth",block:"end"}).catch(function(){return e.scrollIntoView(!1)})},e}(d);bt.values={mode:String};var yt=function(t){function e(){return t.apply(this,arguments)||this}return l(e,t),e.prototype.scroll=function(){var t=document.querySelector(this.selectorValue);t?rt(t,{behavior:this.hasBehaviorValue?this.behaviorValue:"smooth",block:this.hasBlockValue?this.blockValue:"center",inline:this.hasInlineValue?this.inlineValue:"center"}).catch(function(){return t.scrollIntoView()}):console.warn("Could not find target for '"+this.selectorValue+"'")},e}(d);yt.values={selector:String,behavior:String,block:String,inline:String};var _t=function(t){function e(){return t.apply(this,arguments)||this}return l(e,t),e.prototype.scroll=function(t){var e;null==t||t.preventDefault(),null!=(e="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ot(this.el))&&rt(e,{behavior:"smooth",block:"start"}).catch(function(){return e.scrollIntoView(!1)})},e}(d);_t.values={mode:String};var Et=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeout=null,e}l(e,t);var n=e.prototype;return n.connect=function(){var t=this;requestAnimationFrame(function(){t._timeout=setTimeout(function(){return t.el.remove()},1e3*t.secondsValue)})},n.disconnect=function(){this._timeout&&clearTimeout(this._timeout)},e}(d);Et.values={seconds:Number};var wt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._magicElement=null,e}l(e,t);var n=e.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 t=this,e=this.el;this.createMagicElement(),new IntersectionObserver(function(n){n.forEach(function(n){n.target===t._magicElement&&(0===n.intersectionRatio?e.classList.add(t.hasStuckClass?t.stuckClass:"stuck"):1===n.intersectionRatio&&e.classList.remove(t.hasStuckClass?t.stuckClass:"stuck"))})},{threshold:[0,1]}).observe(this._magicElement)},o(e,[{key:"_mode",get:function(){return this.hasModeValue?this.modeValue:"top"}}]),e}(d);wt.classes=["stuck"],wt.values={mode:String};var kt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._lastIndex=null,e._reverse=!1,e}l(e,t);var n=e.prototype;return n.initialize=function(){this.sort=this.sort.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t._tableHeaders.forEach(function(e){return e.addEventListener("click",t.sort)}),t.hasStartSortValue&&t._sortByColumn(t.startSortValue)})},n.disconnect=function(){var t=this;this._tableHeaders.forEach(function(e){return e.removeEventListener("click",t.sort)})},n.sort=function(t){t.preventDefault();var e=this._indexOfHeaderCell(t.target);this._sortByColumn(e)},n._indexOfHeaderCell=function(t){return this._tableHeaders.indexOf(t)},n._sortByColumn=function(t){var e=this;this._reverse=t===this._lastIndex&&!this._reverse;var n=document.createDocumentFragment();this._tableRows.sort(function(n,i){var r,s,o=Array.from(n.cells),a=Array.from(i.cells),l=(null==(r=o[t])?void 0:r.innerText)||"",c=(null==(s=a[t])?void 0:s.innerText)||"",u=l.localeCompare(c,"en",{sensitivity:"base",numeric:!0,caseFirst:"upper"});return n.dataset.sortTop||i.dataset.sortBottom?n.dataset.sortTop&&i.dataset.sortTop?u:-1:n.dataset.sortBottom||i.dataset.sortTop?n.dataset.sortBottom&&i.dataset.sortBottom?u:1:e._reverse?u>0?-1:1:u}).forEach(function(t){return n.appendChild(t)}),this._tableBody.innerHTML="",this._tableBody.appendChild(n),this._lastIndex=t},o(e,[{key:"_tableHead",get:function(){var t=this.el.tHead;if(null==t)throw new Error("Expected table to have a element.");return t}},{key:"_tableHeaders",get:function(){var t=this._tableHead.rows;if(0==t.length)throw new Error("Expected table to have a element with at least one row.");return Array.from(t[0].cells)}},{key:"_tableBody",get:function(){return this.el.tBodies[0]}},{key:"_tableRows",get:function(){return Array.from(this._tableBody.rows)}}]),e}(d);kt.values={startSort:Number};var Vt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.initialize=function(){this.truncate=this.truncate.bind(this),this.expand=this.expand.bind(this)},n.connect=function(){var t=this;S(this,{childList:!0,element:this._tableBody}),requestAnimationFrame(function(){t.truncate(),t.showMoreTarget.addEventListener("click",t.expand)})},n.truncate=function(t){var e=this;null==t||t.preventDefault(),this._truncated=!0,this._tableRows.length>=this._limit?(this._tableRows.slice(this._limit).forEach(function(t){t!==e.showMoreTarget&&e._hideElement(t)}),this._showElement(this.showMoreTarget)):this._hideElement(this.showMoreTarget)},n.expand=function(t){var e=this;this._truncated=!1,null==t||t.preventDefault(),this._tableRows.slice(this._limit).forEach(function(t){t!==e.showMoreTarget&&e._showElement(t)}),this._hideElement(this.showMoreTarget)},n.mutate=function(t){this._truncated&&this._reTruncate()},n._showElement=function(t){t.style.display=""},n._hideElement=function(t){t.style.display="none"},n._reTruncate=function(){var t=this;this._tableRows.slice(0,this._limit).forEach(function(e){e!==t.showMoreTarget&&t._showElement(e)}),this._tableRows.slice(this._limit).forEach(function(e){e!==t.showMoreTarget&&t._hideElement(e)}),this._showElement(this.showMoreTarget)},o(e,[{key:"_truncated",get:function(){return!!this.hasTruncatedValue&&this.truncatedValue},set:function(t){this.truncatedValue=t}},{key:"_tableBody",get:function(){return this.el.tBodies[0]}},{key:"_tableRows",get:function(){return Array.from(this._tableBody.rows)}},{key:"_limit",get:function(){return this.hasLimitValue?this.limitValue:20}}]),e}(d);Vt.targets=["showMore"],Vt.values={limit:Number,truncated:Boolean};var Tt=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.connect=function(){var t=this;if(!this.hasInsertValue)throw new Error("`insert` value was not specified");requestAnimationFrame(function(){t.hasImmediateValue&&t.immediateValue&&t.execute()})},n.execute=function(t){null==t||t.preventDefault();var e=this.el,n=document.querySelector(this.targetValue);if(null!=n){var i=e.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")}e.remove()}else this.dispatch(e,"teleport:error")},e}(vt);Tt.values={target:String,insert:String,immediate:Boolean};var Lt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeoutHandle=null,e}l(e,t);var n=e.prototype;return n.initialize=function(){this._timeout=this._timeout.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t._timeoutHandle=window.setTimeout(t._timeout,1e3*t.secondsValue)})},n.disconnect=function(){this._timeoutHandle&&window.clearTimeout(this._timeoutHandle)},n._timeout=function(){this.dispatch(this.el,"timeout")},e}(d);Lt.values={seconds:Number};var St=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.connect=function(){var t=this;if(!this.hasClassValue)throw new Error("data-toggle-class-class-value must not be empty");(this.hasMouseEnterValue||this.hasMouseLeaveValue)&&((t,e={})=>{new T(this,e)})(),this.hasClickAwayValue&&this.clickAwayValue&&((t,e={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},w,e),o=r=>{const o=(null==e?void 0:e.element)||t.element;if(!(o.contains(r.target)||!function(t){const e=t.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return e.top<=n&&e.top+e.height>=0&&e.left<=i&&e.left+e.width>=0}(o)&&n)&&(t.clickOutside&&t.clickOutside(r),i)){const e=b("click:outside",t,s),n=y(e,r,{controller:t});o.dispatchEvent(n)}},a=t.disconnect.bind(t);Object.assign(t,{disconnect(){null==r||r.forEach(t=>{window.removeEventListener(t,o,!1)}),a()}}),null==r||r.forEach(t=>{window.addEventListener(t,o,!1)})})(this),requestAnimationFrame(function(){t.hasInitialValue&&t.toggleTargets.forEach("on"===t.initialValue?function(e){return t._elementOn(e)}:function(e){return t._elementOff(e)})})},n.clickOutside=function(){var t=this;this.toggleTargets.forEach(function(e){t._elementWasToggled(e)&&(t._elementToggleStatus(e),t._elementToggle(e))})},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(t){var e=this;this.toggleTargets.forEach(function(t){e._elementToggleStatus(t),e._elementOn(t)})},n.off=function(t){var e=this;this.toggleTargets.forEach(function(t){e._elementToggleStatus(t),e._elementOff(t)})},n.toggle=function(t){var e=this;this.toggleTargets.forEach(function(t){e._elementToggleStatus(t),e._elementToggle(t)})},n._elementWasToggled=function(t){return"true"==t.dataset.toggled},n._elementToggleStatus=function(t){this._elementWasToggled(t)?delete t.dataset.toggled:t.dataset.toggled="true"},n._elementToggle=function(t){this.classValue.split(" ").forEach(function(e){return t.classList.toggle(e)})},n._elementOn=function(t){this.classValue.split(" ").forEach(function(e){return t.classList.toggle(e,!0)})},n._elementOff=function(t){this.classValue.split(" ").forEach(function(e){return t.classList.toggle(e,!1)})},e}(d);function Ct(t){return"TURBO-FRAME"==t.nodeName}St.targets=["toggle"],St.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var At=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.prototype;return n.toggle=function(t){null==t||t.preventDefault();var e=this._getFrame().src;null==e||e!==this._getSrc()?this._setSrc():this._clear()},n.setSrc=function(t){null==t||t.preventDefault(),this._setSrc()},n.clear=function(t){null==t||t.preventDefault(),this._clear()},n._setSrc=function(){var t=this._getFrame();this.hasLoadingMessageValue&&(t.innerHTML=this.loadingMessageValue),t.src=this._getSrc()},n._clear=function(){var t=this._getFrame();t.src="",t.innerHTML=""},n._getFrame=function(){var t=document.getElementById(""+this.frameIdValue);if(null==t)throw new Error("Could not find frame with ID '"+this.frameIdValue+"'");if(Ct(t))return t;throw new Error("Element targeted by ID '"+this.frameIdValue+"'")},n._getSrc=function(){var t=this.el;if(this.hasSrcValue)return this.srcValue;if(N(t))return t.href;throw new Error("No link given to drive frame to")},e}(d);At.values={frameId:String,src:String,loadingMessage:String};var Dt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeoutHandle=null,e}l(e,t);var n=e.prototype;return n.initialize=function(){this.refresh=this.refresh.bind(this)},n.connect=function(){var t=this,e=this.el;if(!Ct(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(function(){return t._timeoutHandle=setTimeout(function(){return t.refresh()},t.intervalValue)})},n.disconnect=function(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)},n.refresh=function(t){null==t||t.preventDefault();var e=this.el;e.src=e.src},o(e,[{key:"_poll",get:function(){return!!this.hasPollValue&&this.pollValue}}]),e}(d);Dt.values={interval:Number,poll:Boolean};var It=function(t){function e(){return t.apply(this,arguments)||this}l(e,t);var n=e.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 t=0,e=this.inputTarget.value.match(/\S+/g);this.outputTarget.innerText=(t=e&&e.length||0).toString(),this.hasErrorClass&&(this._isValidCount(t)?this.outputTarget.classList.remove(this.errorClass):this.outputTarget.classList.add(this.errorClass))},n._isValidCount=function(t){var e=0,n=99999;return this.hasMinValue&&(e=this.minValue),this.hasMaxValue&&(n=this.maxValue),t>=e&&t<=n},e}(d);It.targets=["input","output"],It.values={min:Number,max:Number},It.classes=["error"];export{f as AnchorSpyController,m as AppearanceController,p as AsyncBlockController,v as AutoSubmitFormController,D as AutosizeController,d as BaseController,I as CharCountController,x as CheckboxSelectAllController,M as ClipboardController,F as ConfirmController,q as ConfirmNavigationController,j as DebugController,P as DetectDirtyController,W as DetectDirtyFormController,$ as DisableInputsController,U as DisableWithController,J as DismissableController,Y as ElementSaveController,G as EmptyDomController,K as EnableInputsController,Q as FallbackImageController,X as FormRcController,Z as FormSaveController,tt as IntersectionController,et as IntervalController,it as LazyBlockController,at as LightboxImageController,lt as LimitedSelectionCheckboxesController,ct as MediaPlayerController,ut as NestedFormController,ht as PasswordConfirmController,dt as PasswordPeekController,ft as RemoteFormController,pt as ResponsiveIframeBodyController,mt as ResponsiveIframeWrapperController,gt as ScrollIntoFocusController,bt as ScrollToBottomController,yt as ScrollToController,_t as ScrollToTopController,Et as SelfDestructController,wt as StickyController,kt as TableSortController,Vt as TableTruncateController,Tt as TeleportController,Lt as TimeoutController,St as ToggleClassController,At as TurboFrameRCController,Dt as TurboFrameRefreshController,It 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 cd4cc40a..0b0f9ad2 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/utilities/base_controller.ts","../src/controllers/anchor_spy_controller.ts","../src/controllers/utility/appearance_controller.ts","../src/controllers/async_block_controller.ts","../src/controllers/forms/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/controllers/forms/autosize_controller.ts","../src/controllers/forms/char_count_controller.ts","../src/controllers/forms/checkbox_select_all_controller.ts","../src/controllers/clipboard_controller.ts","../src/utilities/elements.ts","../src/controllers/confirm_controller.ts","../src/controllers/confirm_navigation_controller.ts","../src/controllers/debug_controller.ts","../src/controllers/forms/detect_dirty_controller.ts","../src/controllers/forms/detect_dirty_form_controller.ts","../src/controllers/forms/disable_inputs_controller.ts","../src/controllers/disable_with_controller.ts","../src/controllers/dismissable_controller.ts","../src/controllers/element_save_controller.ts","../src/controllers/empty_dom_controller.ts","../src/controllers/forms/enable_inputs_controller.ts","../src/controllers/media/fallback_image_controller.ts","../src/controllers/forms/form_rc_controller.ts","../src/controllers/forms/form_save_controller.ts","../src/controllers/utility/intersection_controller.ts","../src/controllers/utility/interval_controller.ts","../src/controllers/lazy_block_controller.ts","../src/utilities/scroll.ts","../src/controllers/media/lightbox_image_controller.ts","../src/controllers/forms/limited_selection_checkboxes_controller.ts","../src/controllers/media/media_player_controller.ts","../src/controllers/forms/nested_form_controller.ts","../src/controllers/forms/password_confirm_controller.ts","../src/controllers/forms/password_peek_controller.ts","../src/controllers/forms/remote_form_controller.ts","../src/controllers/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/controllers/scroll/scroll_into_focus_controller.ts","../src/controllers/scroll/scroll_to_bottom_controller.ts","../src/controllers/scroll/scroll_to_controller.ts","../src/controllers/scroll/scroll_to_top_controller.ts","../src/controllers/self_destruct_controller.ts","../src/controllers/sticky_controller.ts","../src/controllers/tables/table_sort_controller.ts","../src/controllers/tables/table_truncate_controller.ts","../src/controllers/teleport_controller.ts","../src/controllers/utility/timeout_controller.ts","../src/controllers/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/controllers/turbo_frame_rc_controller.ts","../src/controllers/turbo_frame_refresh_controller.ts","../src/controllers/forms/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 this.logEvent(eventName, event, element);\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 logEvent(eventName: string, event: CustomEvent, element: HTMLElement) {\n // @ts-ignore\n if (!this.application.debug) {\n return;\n }\n let logger = console;\n logger.groupCollapsed(`%c${this.identifier} %c${eventName}%c`, \"color: #3B82F6\", \"color: #0be000\", \"color: unset\");\n logger.log({element});\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 \"logEvent\":\n case \"dispatch\":\n case \"data\":\n case \"valueDescriptorMap\":\n case \"mutate\":\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 if (/^.*?Classes$/.test(prop)) {\n return false;\n }\n\n return true;\n}\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class AnchorSpyController extends BaseController {\r\n static values = {key: String};\r\n\r\n declare readonly keyValue: string;\r\n\r\n get _key(): string {\r\n return this.keyValue.replaceAll('#', '');\r\n }\r\n\r\n get _anchor(): string {\r\n return window.location.hash.substr(1);\r\n }\r\n\r\n set _anchor(value: string) {\r\n window.location.hash = value;\r\n }\r\n\r\n initialize() {\r\n this._checkAnchor = this._checkAnchor.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._checkAnchor();\r\n window.addEventListener(\"hashchange\", this._checkAnchor);\r\n });\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"hashchange\", this._checkAnchor);\r\n }\r\n\r\n write(event?: Event) {\r\n event?.preventDefault();\r\n this._anchor = this._key;\r\n }\r\n\r\n private _checkAnchor() {\r\n if (this._key === this._anchor) {\r\n this.dispatch(this.el, \"anchor-spy:active\");\r\n } else {\r\n this.dispatch(this.el, \"anchor-spy:inactive\");\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 requestAnimationFrame(() => {\r\n this._handleVisibility();\r\n });\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 private _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n private _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/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 \"../../utilities/base_controller\";\n\nexport class AutoSubmitFormController extends BaseController {\n\n initialize() {\n this.submit = this.submit.bind(this);\n }\n\n connect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.submit));\n }\n\n disconnect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.submit));\n }\n\n private submit() {\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 \"../../utilities/base_controller\";\n\nexport class AutosizeController extends BaseController {\n\n initialize() {\n this._handler = this._handler.bind(this);\n }\n\n connect() {\n useWindowResize(this);\n requestAnimationFrame(() => {\n this._handler();\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 });\n }\n\n disconnect() {\n this.el.removeEventListener(\"input\", this._handler);\n this.el.removeEventListener(\"focus\", 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 \"../../utilities/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 requestAnimationFrame(() => {\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\n this._updateCharCount();\n });\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 '../../utilities/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 \"../utilities/base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"source\", \"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 '../utilities/base_controller';\nimport {isHTMLAnchorElement, isHTMLFormElement} 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 disconnect() {\n let element = this.el;\n if (isHTMLFormElement(element)) {\n element.removeEventListener(\"submit\", this.confirm);\n } else if (isHTMLAnchorElement(element)) {\n element.removeEventListener(\"click\", this.confirm);\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 \"../utilities/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.allowSubmit = this.allowSubmit.bind(this);\n this.confirmNavigation = this.confirmNavigation.bind(this);\n this.confirmTurboNavigation = this.confirmTurboNavigation.bind(this);\n }\n\n connect() {\n window.onbeforeunload = () => this._message;\n window.addEventListener(\"popstate\", this.confirmNavigation);\n window.addEventListener(\"submit\", this.allowSubmit);\n window.addEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\n window.addEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\n }\n\n disconnect() {\n window.removeEventListener(\"popstate\", this.confirmNavigation);\n window.onbeforeunload = null;\n window.removeEventListener(\"submit\", this.allowSubmit);\n window.removeEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\n window.removeEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\n }\n\n allowSubmit(_event: Event) {\n window.removeEventListener(\"popstate\", this.confirmNavigation);\n window.onbeforeunload = null;\n }\n\n confirmNavigation(_event: PopStateEvent) {\n return false;\n }\n\n confirmTurboNavigation(event: Event) {\n if (!confirm(this._message)) {\n event.preventDefault();\n }\n }\n\n}\n","import {BaseController} from \"../utilities/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 \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyController extends BaseController {\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._restoreElementFromLoadValue();\r\n }\r\n\r\n private _getElementValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(): boolean {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkDirty() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (this._isElementDirty()) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(): boolean {\r\n return this._getElementValue() !== this._getElementLoadValue();\r\n }\r\n\r\n private _restoreElementFromLoadValue() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (!this._elementHasCachedLoadValue() && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyFormController extends BaseController {\r\n\r\n get _formElements(): Array {\r\n return Array.from(this.el.querySelectorAll('input, select, textarea'));\r\n }\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._formElements.forEach(element => this._restoreElementFromLoadValue(element));\r\n }\r\n\r\n private _getElementValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (this._isElementDirty(element)) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return this._getElementValue(element) !== this._getElementLoadValue(element);\r\n }\r\n\r\n private _cacheElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (!this._elementHasCachedLoadValue(element) && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n\r\n private _restoreElementFromLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n this._formElements.forEach(el => this._cacheElementLoadValue(el));\r\n }\r\n\r\n private _checkDirty(): void {\r\n this._formElements.forEach(el => this._checkElementDirty(el));\r\n if (this._formElements.some(el => isDirty(el))) {\r\n this.el.setAttribute(\"data-dirty\", \"true\");\r\n } else {\r\n this.el.removeAttribute(\"data-dirty\");\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/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 '../utilities/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 \"../utilities/base_controller\";\n\nexport class DismissableController extends BaseController {\n\n dismiss() {\n this.el.remove();\n }\n\n}\n","import {BaseController} from '../utilities/base_controller';\nimport _get from \"lodash-es/get\";\nimport _set from \"lodash-es/set\";\n\nexport class ElementSaveController extends BaseController {\n\n static targets = [\n \"element\",\n ];\n static values = {\n id: String,\n attributes: String,\n restoreOnLoad: Boolean,\n };\n declare readonly hasElementTarget: boolean;\n declare readonly elementTarget: HTMLElement;\n declare readonly elementTargets: HTMLElement[];\n declare readonly idValue: string;\n declare readonly attributesValue: string;\n declare readonly hasIdValue: boolean;\n declare readonly restoreOnLoadValue: boolean;\n declare readonly hasRestoreOnLoadValue: boolean;\n\n get _id() {\n if (this.hasIdValue) {\n return this.idValue;\n }\n let elementID = this.el.id;\n\n if (elementID !== \"\") {\n return elementID;\n } else {\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. `);\n }\n }\n\n get _uniqueIdentifier() {\n const url = location.href;\n return `${url} ${this._id}`;\n }\n\n get _restoreOnLoad() {\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\n }\n\n get _element(): HTMLElement {\n return this.hasElementTarget ? this.elementTarget : this.el;\n }\n\n connect() {\n requestAnimationFrame(() => {\n if (this._restoreOnLoad) {\n this.restore();\n }\n });\n }\n\n clear(event?: Event) {\n if (event) {\n event.preventDefault();\n }\n localStorage.removeItem(this._uniqueIdentifier);\n this.dispatch(this._element, `element-save:cleared`);\n }\n\n save(event?: Event) {\n if (event) {\n event.preventDefault();\n }\n let element = this._element;\n let attributes = this.attributesValue.split(\" \");\n let data: { [idx: string]: any } = {};\n attributes.forEach((attr: string) => data[attr] = _get(element, attr));\n localStorage.setItem(this._uniqueIdentifier, JSON.stringify(data));\n this.dispatch(element, `element-save:save:success`);\n }\n\n restore(event?: Event) {\n if (event) {\n event.preventDefault();\n }\n let element = this._element;\n if (localStorage.getItem(this._uniqueIdentifier)) {\n const savedData = JSON.parse(localStorage.getItem(this._uniqueIdentifier)!); // get and parse the saved data from localStorage\n Object.keys(savedData).forEach((attr: string) => {\n _set(element as HTMLElement, attr, savedData[attr]);\n });\n this.dispatch(element, `element-save:restore:success`);\n } else {\n this.dispatch(element, `element-save:restore:empty`);\n }\n }\n\n}\n","import {useMutation} from \"stimulus-use\";\nimport {BaseController} from \"../utilities/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 \"../../utilities/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 \"../../utilities/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 '../../utilities/base_controller';\r\n\r\nexport class FormRcController extends BaseController {\r\n\r\n static targets = [\"form\"];\r\n\r\n declare readonly formTarget: HTMLFormElement;\r\n\r\n submit(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"submit\");\r\n this.formTarget.submit();\r\n }\r\n\r\n reset(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"reset\");\r\n this.formTarget.reset();\r\n }\r\n\r\n}","import {BaseController} from '../../utilities/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 \"../../utilities/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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class IntervalController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _intervalHandle: null | number = null;\r\n\r\n initialize() {\r\n this._interval = this._interval.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._intervalHandle = window.setInterval(this._interval, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._intervalHandle) {\r\n window.clearInterval(this._intervalHandle);\r\n }\r\n }\r\n\r\n _interval() {\r\n this.dispatch(this.el, \"interval:action\");\r\n }\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","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 \"../../utilities/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 \"../../utilities/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 \"../../utilities/base_controller\";\r\n\r\nexport class MediaPlayerController extends BaseController {\r\n\r\n static targets = [\"media\"];\r\n\r\n declare readonly mediaTarget: HTMLMediaElement;\r\n\r\n initialize() {\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n disconnect() {\r\n }\r\n\r\n async play(event?: Event) {\r\n event?.preventDefault();\r\n await this.mediaTarget.play();\r\n }\r\n\r\n pause(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.pause();\r\n }\r\n\r\n restart(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime = 0;\r\n }\r\n\r\n seek(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime += 5;\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 private _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 \"../../utilities/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 \"../../utilities/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 \"../../utilities/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 \"../utilities/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 \"../../utilities/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 \"../../utilities/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 \"../../utilities/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 \"../utilities/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 \"../utilities/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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableSortController extends BaseController {\r\n\r\n static values = {startSort: Number};\r\n\r\n declare readonly startSortValue: number;\r\n declare readonly hasStartSortValue: boolean;\r\n _lastIndex: number | null = null;\r\n _reverse: boolean = false;\r\n\r\n get _tableHead(): HTMLTableSectionElement {\r\n let head = (this.el as HTMLTableElement).tHead;\r\n if (head == null) {\r\n throw new Error('Expected table to have a element.');\r\n }\r\n return head;\r\n }\r\n\r\n get _tableHeaders(): HTMLTableHeaderCellElement[] {\r\n let rows = this._tableHead.rows;\r\n if (rows.length == 0) {\r\n throw new Error('Expected table to have a element with at least one row.');\r\n }\r\n return Array.from(rows[0].cells);\r\n }\r\n\r\n get _tableBody() {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n initialize() {\r\n this.sort = this.sort.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._tableHeaders.forEach(cell => cell.addEventListener(\"click\", this.sort));\r\n if (this.hasStartSortValue) {\r\n this._sortByColumn(this.startSortValue);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n this._tableHeaders.forEach(cell => cell.removeEventListener(\"click\", this.sort));\r\n }\r\n\r\n sort(event: Event) {\r\n event.preventDefault();\r\n let headerCell = event.target! as HTMLTableHeaderCellElement;\r\n let headerCellIndex = this._indexOfHeaderCell(headerCell);\r\n this._sortByColumn(headerCellIndex);\r\n }\r\n\r\n private _indexOfHeaderCell(cell: HTMLTableHeaderCellElement) {\r\n return this._tableHeaders.indexOf(cell);\r\n }\r\n\r\n private _sortByColumn(index: number) {\r\n this._reverse = index === this._lastIndex && !this._reverse;\r\n let frag = document.createDocumentFragment();\r\n let rows = this._tableRows;\r\n\r\n let newRows = rows.sort((row, otherRow) => {\r\n let cells = Array.from(row.cells);\r\n let otherCells = Array.from(otherRow.cells);\r\n\r\n // TODO: Handle colspans?\r\n let x = cells[index]?.innerText || \"\";\r\n let y = otherCells[index]?.innerText || \"\";\r\n\r\n let sortVal = x.localeCompare(y, \"en\", {sensitivity: \"base\", numeric: true, caseFirst: \"upper\"});\r\n\r\n if (row.dataset.sortTop || otherRow.dataset.sortBottom) {\r\n if (row.dataset.sortTop && otherRow.dataset.sortTop) {\r\n return sortVal;\r\n }\r\n return -1;\r\n }\r\n if (row.dataset.sortBottom || otherRow.dataset.sortTop) {\r\n if (row.dataset.sortBottom && otherRow.dataset.sortBottom) {\r\n return sortVal;\r\n }\r\n return 1;\r\n }\r\n\r\n if (this._reverse) {\r\n return sortVal > 0 ? -1 : 1;\r\n }\r\n return sortVal;\r\n });\r\n\r\n newRows.forEach(row => frag.appendChild(row));\r\n\r\n this._tableBody.innerHTML = \"\";\r\n this._tableBody.appendChild(frag);\r\n this._lastIndex = index;\r\n }\r\n\r\n}","import {useMutation} from \"stimulus-use\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableTruncateController extends BaseController {\r\n\r\n static targets = [\"showMore\"];\r\n static values = {\r\n limit: Number,\r\n truncated: Boolean,\r\n };\r\n\r\n declare readonly showMoreTarget: HTMLElement;\r\n declare limitValue: number;\r\n declare readonly hasLimitValue: boolean;\r\n declare truncatedValue: boolean;\r\n declare readonly hasTruncatedValue: boolean;\r\n\r\n get _truncated(): boolean {\r\n return this.hasTruncatedValue ? this.truncatedValue : false;\r\n }\r\n\r\n set _truncated(value) {\r\n this.truncatedValue = value;\r\n }\r\n\r\n get _tableBody(): HTMLTableSectionElement {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n get _limit(): number {\r\n return this.hasLimitValue ? this.limitValue : 20;\r\n }\r\n\r\n initialize() {\r\n this.truncate = this.truncate.bind(this);\r\n this.expand = this.expand.bind(this);\r\n }\r\n\r\n connect() {\r\n useMutation(this, {childList: true, element: this._tableBody});\r\n\r\n requestAnimationFrame(() => {\r\n this.truncate();\r\n this.showMoreTarget.addEventListener(\"click\", this.expand);\r\n });\r\n }\r\n\r\n truncate(event?: Event) {\r\n event?.preventDefault();\r\n this._truncated = true;\r\n if (this._tableRows.length >= this._limit) {\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\r\n } else {\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n }\r\n\r\n expand(event?: Event) {\r\n this._truncated = false;\r\n event?.preventDefault();\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n\r\n mutate(entries: MutationRecord[]) {\r\n if (this._truncated) {\r\n this._reTruncate();\r\n }\r\n }\r\n\r\n private _showElement(el: HTMLElement): void {\r\n el.style.display = \"\";\r\n }\r\n\r\n private _hideElement(el: HTMLElement): void {\r\n el.style.display = \"none\";\r\n }\r\n\r\n private _reTruncate() {\r\n this._tableRows.slice(0, this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TimeoutController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _timeoutHandle: null | number = null;\r\n\r\n initialize() {\r\n this._timeout = this._timeout.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._timeoutHandle = window.setTimeout(this._timeout, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n window.clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n _timeout() {\r\n this.dispatch(this.el, \"timeout\");\r\n }\r\n\r\n}","import {useClickOutside, useHover} from \"stimulus-use\";\nimport {BaseController} from \"../utilities/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 \"../utilities/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 \"../utilities/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 \"../../utilities/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 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"],"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","this","logEvent","dispatchEvent","functionName","application","debug","logger","console","groupCollapsed","identifier","groupEnd","Controller","AnchorSpyController","initialize","_checkAnchor","bind","connect","requestAnimationFrame","window","addEventListener","disconnect","removeEventListener","write","preventDefault","_anchor","_key","el","keyValue","replaceAll","location","hash","substr","value","key","String","AppearanceController","_handleVisibility","document","appear","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","errorMessage","selector","AutoSubmitFormController","submit","forEach","_this2","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","useMutation","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","_toggle","_refresh","hasSelectAllTarget","selectAllTarget","checkboxTargets","checkbox","checked","checkboxesCount","checkboxesCheckedCount","_checked","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","message","ConfirmNavigationController","allowSubmit","confirmNavigation","confirmTurboNavigation","onbeforeunload","_event","_messageValue","DebugController","testTargets","DetectDirtyController","_checkDirty","_cacheLoadValues","restore","_restoreElementFromLoadValue","_getElementValue","_getElementLoadValue","getAttribute","_cacheAttrName","defaultChecked","Array","from","option","defaultSelected","_elementHasCachedLoadValue","hasAttribute","_isElementDirty","setAttribute","removeAttribute","cacheValue","defaultValue","DetectDirtyFormController","_formElements","_checkElementDirty","_cacheElementLoadValue","_this3","some","DisableInputsController","toggle","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","href","_id","hasRestoreOnLoadValue","restoreOnLoadValue","hasElementTarget","elementTarget","restoreOnLoad","EmptyDomController","childList","checkEmpty","mutate","_children","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","emptyClasses","hasNotEmptyClass","notEmptyClasses","emptyClass","notEmptyClass","hasScopeSelectorValue","scopeSelectorValue","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormRcController","formTarget","reset","FormSaveController","_clear","_clearOnSubmit","_formIdentifier","_formData","_formID","elements","hasClearOnSubmitValue","clearOnSubmitValue","clearOnSubmit","IntersectionController","threshold","_threshold","disappear","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","IntervalController","_interval","_intervalHandle","setInterval","secondsValue","clearInterval","seconds","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","_src","srcset","_srcSet","sizes","_sizes","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","_modalClassName","showModal","hasSrcValue","srcValue","hasSrcSetValue","srcSetValue","hasSizesValue","sizesValue","hasModalClass","modalClass","hasImageClass","imageClass","srcSet","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","MediaPlayerController","play","mediaTarget","pause","restart","currentTime","seek","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","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","_selector","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","constructor","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","RegExp","substringIdentifierValueRegex","camelCase","action","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","StickyController","createMagicElement","_magicElement","_mode","intersectionRatio","hasStuckClass","stuckClass","TableSortController","sort","_tableHeaders","cell","hasStartSortValue","_sortByColumn","startSortValue","headerCellIndex","_indexOfHeaderCell","index","_reverse","_lastIndex","frag","createDocumentFragment","_tableRows","row","otherRow","cells","otherCells","x","y","sortVal","localeCompare","sensitivity","numeric","caseFirst","sortTop","sortBottom","_this4","_tableBody","head","tHead","rows","_tableHead","tBodies","startSort","TableTruncateController","truncate","expand","showMoreTarget","_truncated","_limit","_hideElement","_showElement","_reTruncate","hasTruncatedValue","truncatedValue","hasLimitValue","limitValue","limit","truncated","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","TimeoutController","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","_this5","toggled","classValue","klass","isTurboFrame","class","clickAway","initial","TurboFrameRCController","frameSrc","_getFrame","_getSrc","_setSrc","setSrc","frame","hasLoadingMessageValue","loadingMessageValue","getElementById","frameIdValue","frameId","loadingMessage","TurboFrameRefreshController","refresh","_poll","intervalValue","hasPollValue","pollValue","interval","poll","WordCountController","updateWordCount","wordCount","matches","match"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stimulus-library.module.js","sources":["../src/utilities/base_controller.ts","../src/controllers/anchor_spy_controller.ts","../src/controllers/utility/appearance_controller.ts","../src/controllers/async_block_controller.ts","../src/controllers/forms/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/controllers/forms/autosize_controller.ts","../src/controllers/forms/char_count_controller.ts","../src/controllers/forms/checkbox_select_all_controller.ts","../src/controllers/clipboard_controller.ts","../src/utilities/elements.ts","../src/controllers/confirm_controller.ts","../src/controllers/confirm_navigation_controller.ts","../src/controllers/debug_controller.ts","../src/controllers/forms/detect_dirty_controller.ts","../src/controllers/forms/detect_dirty_form_controller.ts","../src/controllers/forms/disable_inputs_controller.ts","../src/controllers/disable_with_controller.ts","../src/controllers/dismissable_controller.ts","../src/controllers/element_save_controller.ts","../src/controllers/empty_dom_controller.ts","../src/controllers/forms/enable_inputs_controller.ts","../src/controllers/media/fallback_image_controller.ts","../src/controllers/forms/form_rc_controller.ts","../src/controllers/forms/form_save_controller.ts","../src/controllers/utility/intersection_controller.ts","../src/controllers/utility/interval_controller.ts","../src/controllers/lazy_block_controller.ts","../src/utilities/scroll.ts","../src/controllers/media/lightbox_image_controller.ts","../src/controllers/forms/limited_selection_checkboxes_controller.ts","../src/controllers/media/media_player_controller.ts","../src/controllers/forms/nested_form_controller.ts","../src/controllers/forms/password_confirm_controller.ts","../src/controllers/forms/password_peek_controller.ts","../src/controllers/forms/remote_form_controller.ts","../src/controllers/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/controllers/scroll/scroll_into_focus_controller.ts","../src/controllers/scroll/scroll_to_bottom_controller.ts","../src/controllers/scroll/scroll_to_controller.ts","../src/controllers/scroll/scroll_to_top_controller.ts","../src/controllers/self_destruct_controller.ts","../src/controllers/sticky_controller.ts","../src/controllers/tables/table_sort_controller.ts","../src/controllers/tables/table_truncate_controller.ts","../src/controllers/teleport_controller.ts","../src/controllers/utility/timeout_controller.ts","../src/controllers/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/controllers/turbo_frame_rc_controller.ts","../src/controllers/turbo_frame_refresh_controller.ts","../src/controllers/forms/word_count_controller.ts"],"sourcesContent":["import {Context, Controller} from \"stimulus\";\r\n\r\nexport class BaseController extends Controller {\r\n\r\n constructor(context: Context) {\r\n super(context);\r\n return new Proxy(this, {\r\n get: (obj, prop) => {\r\n let returnVal = Reflect.get(obj, prop);\r\n let self = this;\r\n if (logProperty(prop.toString())) {\r\n if (typeof returnVal == \"function\") {\r\n return new Proxy(returnVal, {\r\n apply(target: any, thisArg: any, argArray?: any): any {\r\n self.log(prop.toString(), {\r\n args: argArray,\r\n });\r\n return Reflect.apply(target, thisArg, argArray);\r\n },\r\n });\r\n } else {\r\n this.log(prop.toString());\r\n }\r\n }\r\n return returnVal;\r\n },\r\n });\r\n }\r\n\r\n get el(): HTMLElement {\r\n return this.element as HTMLElement;\r\n }\r\n\r\n get isTurboPreview(): boolean {\r\n return document.documentElement.hasAttribute('data-turbo-preview') || document.documentElement.hasAttribute('data-turbolinks-preview');\r\n }\r\n\r\n get isTurbolinksPreview(): boolean {\r\n return this.isTurboPreview;\r\n }\r\n\r\n get csrfToken(): string | null {\r\n return this.metaValue('csrf-token');\r\n }\r\n\r\n metaValue(name: string): string | null {\r\n const element = document.head.querySelector(`meta[name=\"${name}\"]`);\r\n return element?.getAttribute('content') || null;\r\n }\r\n\r\n dispatch(element: HTMLElement, eventName: string, options: CustomEventInit = {}) {\r\n let mergedOptions = Object.assign({}, {bubbles: true, cancelable: true, detail: {target: element}}, options);\r\n if (!!mergedOptions.detail.target) {\r\n mergedOptions.detail.target = element;\r\n }\r\n let event = new CustomEvent(eventName, mergedOptions);\r\n this.logEvent(eventName, event, element);\r\n element.dispatchEvent(event);\r\n }\r\n\r\n log(functionName: string, args: {} = {}): void {\r\n // @ts-ignore\r\n if (!this.application.debug) {\r\n return;\r\n }\r\n let logger = console;\r\n logger.groupCollapsed(`%c${this.identifier} %c#${functionName}`, \"color: #3B82F6\", \"color: unset\");\r\n logger.log({\r\n element: this.element,\r\n ...args,\r\n });\r\n logger.groupEnd();\r\n }\r\n\r\n logEvent(eventName: string, event: CustomEvent, element: HTMLElement) {\r\n // @ts-ignore\r\n if (!this.application.debug) {\r\n return;\r\n }\r\n let logger = console;\r\n logger.groupCollapsed(`%c${this.identifier} %c${eventName}%c`, \"color: #3B82F6\", \"color: #0be000\", \"color: unset\");\r\n logger.log({element});\r\n logger.groupEnd();\r\n }\r\n\r\n}\r\n\r\nfunction logProperty(prop: string): boolean {\r\n switch (prop) {\r\n case \"application\":\r\n case \"el\":\r\n case \"element\":\r\n case \"constructor\":\r\n case \"initialize\":\r\n case \"log\":\r\n case \"logEvent\":\r\n case \"dispatch\":\r\n case \"data\":\r\n case \"valueDescriptorMap\":\r\n case \"mutate\":\r\n case \"identifier\":\r\n return false;\r\n }\r\n\r\n if (/^_.*?$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Target(s)?$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Value$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?ValueChanged$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Class$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Classes$/.test(prop)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class AnchorSpyController extends BaseController {\r\n static values = {key: String};\r\n\r\n declare readonly keyValue: string;\r\n\r\n get _key(): string {\r\n return this.keyValue.replaceAll('#', '');\r\n }\r\n\r\n get _anchor(): string {\r\n return window.location.hash.substr(1);\r\n }\r\n\r\n set _anchor(value: string) {\r\n window.location.hash = value;\r\n }\r\n\r\n initialize() {\r\n this._checkAnchor = this._checkAnchor.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._checkAnchor();\r\n window.addEventListener(\"hashchange\", this._checkAnchor);\r\n });\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"hashchange\", this._checkAnchor);\r\n }\r\n\r\n write(event?: Event) {\r\n event?.preventDefault();\r\n this._anchor = this._key;\r\n }\r\n\r\n private _checkAnchor() {\r\n if (this._key === this._anchor) {\r\n this.dispatch(this.el, \"anchor-spy:active\");\r\n } else {\r\n this.dispatch(this.el, \"anchor-spy:inactive\");\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 requestAnimationFrame(() => {\r\n this._handleVisibility();\r\n });\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 private _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n private _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class AsyncBlockController extends BaseController {\r\n static targets = [\"replace\"];\r\n static values = {endpoint: String, errorMessage: String, selector: String};\r\n\r\n declare readonly replaceTarget: HTMLElement;\r\n declare readonly hasReplaceTarget: boolean;\r\n declare readonly endpointValue: string;\r\n\r\n declare readonly hasSelectorValue: boolean;\r\n declare readonly selectorValue: string;\r\n\r\n declare readonly hasErrorMessageValue: boolean;\r\n declare readonly errorMessageValue: string;\r\n\r\n get _errorMessage(): string {\r\n return this.hasErrorMessageValue ? this.errorMessageValue : \"This content failed to load\";\r\n }\r\n\r\n // This is a simple controller to load a block of content when the page loads.\r\n // It should be used to give a quick initial response before calling out to an\r\n // an AJAX endpoint to do some expensive work.\r\n connect() {\r\n this.loadContent();\r\n }\r\n\r\n loadContent() {\r\n let self = this;\r\n let el = this.hasReplaceTarget ? this.replaceTarget : this.el;\r\n fetch(this.endpointValue)\r\n .then((response) => response.text())\r\n .then((html) => {\r\n let newEl = document.createElement(\"div\");\r\n newEl.innerHTML = html;\r\n if (this.hasSelectorValue) {\r\n let selectedContent = newEl.querySelectorAll(this.selectorValue);\r\n el.replaceWith(...selectedContent);\r\n } else {\r\n el.replaceWith(...newEl.children);\r\n }\r\n // Trigger event to show block has loaded\r\n self.dispatch(el, \"ajax:success\");\r\n })\r\n .catch(err => {\r\n el.replaceWith(this._errorMessage);\r\n self.dispatch(el, \"ajax:error\");\r\n })\r\n .finally(() => {\r\n self.dispatch(el, \"ajax:complete\");\r\n });\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class AutoSubmitFormController extends BaseController {\r\n\r\n initialize() {\r\n this.submit = this.submit.bind(this);\r\n }\r\n\r\n connect() {\r\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.submit));\r\n }\r\n\r\n disconnect() {\r\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.submit));\r\n }\r\n\r\n private submit() {\r\n // Trigger synthetic \"submit\" event on form\r\n this.dispatch((this.el), \"submit\");\r\n }\r\n}\r\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\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class AutosizeController extends BaseController {\r\n\r\n initialize() {\r\n this._handler = this._handler.bind(this);\r\n }\r\n\r\n connect() {\r\n useWindowResize(this);\r\n requestAnimationFrame(() => {\r\n this._handler();\r\n let target = this.el as HTMLTextAreaElement;\r\n target.style.resize = \"none\";\r\n target.style.boxSizing = \"border-box\";\r\n target.addEventListener(\"input\", this._handler);\r\n target.addEventListener(\"focus\", this._handler);\r\n });\r\n }\r\n\r\n disconnect() {\r\n this.el.removeEventListener(\"input\", this._handler);\r\n this.el.removeEventListener(\"focus\", this._handler);\r\n }\r\n\r\n windowResize() {\r\n this._handler();\r\n }\r\n\r\n private _handler() {\r\n this.autosize(this.el as HTMLTextAreaElement);\r\n };\r\n\r\n private autosize(element: HTMLTextAreaElement) {\r\n let offset = element.offsetHeight - element.clientHeight;\r\n element.style.height = \"auto\";\r\n element.style.height = element.scrollHeight + offset + \"px\";\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class CharCountController extends BaseController {\r\n\r\n static targets = [\"input\", \"output\"];\r\n static values = {min: Number, max: Number};\r\n static classes = [\"error\"];\r\n\r\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\r\n declare readonly outputTarget: HTMLElement;\r\n declare minValue: number;\r\n declare hasMinValue: boolean;\r\n declare maxValue: number;\r\n declare hasMaxValue: boolean;\r\n declare errorClass: string;\r\n declare hasErrorClass: boolean;\r\n\r\n initialize() {\r\n this._updateCharCount = this._updateCharCount.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\r\n this._updateCharCount();\r\n });\r\n }\r\n\r\n disconnect() {\r\n this.inputTarget.removeEventListener(\"input\", this._updateCharCount);\r\n }\r\n\r\n private _updateCharCount() {\r\n let charCount = this.inputTarget.value.length;\r\n this.outputTarget.innerText = charCount.toString();\r\n if (this.hasErrorClass) {\r\n if (this._isValidCount(charCount)) {\r\n this.outputTarget.classList.remove(this.errorClass);\r\n } else {\r\n this.outputTarget.classList.add(this.errorClass);\r\n }\r\n }\r\n }\r\n\r\n private _isValidCount(count: number) {\r\n let min = 0;\r\n let max = 99999;\r\n\r\n if (this.hasMinValue) {\r\n min = this.minValue;\r\n }\r\n\r\n if (this.hasMaxValue) {\r\n max = this.maxValue;\r\n }\r\n\r\n return count >= min && count <= max;\r\n }\r\n\r\n}\r\n","import {BaseController} from '../../utilities/base_controller';\r\n\r\nexport class CheckboxSelectAllController extends BaseController {\r\n static targets = ['selectAll', 'checkbox'];\r\n\r\n declare readonly hasSelectAllTarget: boolean;\r\n declare readonly selectAllTarget: HTMLInputElement;\r\n declare readonly checkboxTargets: HTMLInputElement[];\r\n\r\n private get _checked() {\r\n return this.checkboxTargets.filter(checkbox => checkbox.checked);\r\n }\r\n\r\n private get _unchecked() {\r\n return this.checkboxTargets.filter(checkbox => !checkbox.checked);\r\n }\r\n\r\n initialize() {\r\n this._toggle = this._toggle.bind(this);\r\n this._refresh = this._refresh.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n if (!this.hasSelectAllTarget) {\r\n return;\r\n }\r\n\r\n this.selectAllTarget.addEventListener('change', this._toggle);\r\n this.checkboxTargets.forEach(checkbox => checkbox.addEventListener('change', this._refresh));\r\n this._refresh();\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (!this.hasSelectAllTarget) {\r\n return;\r\n }\r\n\r\n this.selectAllTarget.removeEventListener('change', this._toggle);\r\n this.checkboxTargets.forEach((checkbox) => checkbox.removeEventListener('change', this._refresh));\r\n }\r\n\r\n private _toggle(event: Event) {\r\n event.preventDefault();\r\n let target = event.target as HTMLInputElement;\r\n this.checkboxTargets.forEach((checkbox) => checkbox.checked = target.checked);\r\n }\r\n\r\n private _refresh() {\r\n const checkboxesCount = this.checkboxTargets.length;\r\n const checkboxesCheckedCount = this._checked.length;\r\n\r\n this.selectAllTarget.checked = checkboxesCheckedCount > 0;\r\n this.selectAllTarget.indeterminate = checkboxesCheckedCount > 0 && checkboxesCheckedCount < checkboxesCount;\r\n }\r\n}","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"source\", \"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 {\r\n return element.nodeName == \"LINK\";\r\n}\r\n\r\nexport function isHTMLAnchorElement(element: Element): element is HTMLAnchorElement {\r\n return element.nodeName == \"A\";\r\n}\r\n\r\nexport function isHTMLFormElement(element: Element): element is HTMLFormElement {\r\n return element.nodeName == \"FORM\";\r\n}\r\n\r\nexport function isHTMLInputElement(element: Element): element is HTMLInputElement {\r\n return element.nodeName == \"INPUT\";\r\n}\r\n\r\nexport function isHTMLButtonElement(element: Element): element is HTMLButtonElement {\r\n return element.nodeName == \"BUTTON\";\r\n}\r\n\r\nexport function isHTMLSelectElement(element: Element): element is HTMLSelectElement {\r\n return element.nodeName == \"SELECT\";\r\n}\r\n\r\nexport function isHTMLImageElement(element: Element): element is HTMLImageElement {\r\n return element.nodeName == \"IMG\";\r\n}\r\n\r\nexport function isElementCheckable(element: Element): element is HTMLInputElement & { checked: boolean } {\r\n return isHTMLInputElement(element) && (element.type === \"radio\" || element.type === \"checkbox\");\r\n}\r\n","import {BaseController} from '../utilities/base_controller';\r\nimport {isHTMLAnchorElement, isHTMLFormElement} from \"../utilities/elements\";\r\n\r\nexport class ConfirmController extends BaseController {\r\n\r\n static values = {\r\n message: String,\r\n };\r\n\r\n declare readonly messageValue: string;\r\n declare readonly hasMessageValue: boolean;\r\n\r\n get _message(): string {\r\n return this.hasMessageValue ? this.messageValue : 'Are you sure?';\r\n }\r\n\r\n initialize() {\r\n this.confirm = this.confirm.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 element.addEventListener(\"submit\", this.confirm);\r\n } else if (isHTMLAnchorElement(element)) {\r\n element.addEventListener(\"click\", this.confirm);\r\n } else {\r\n throw new Error(\"Can't handle confirmation on attached element\");\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n let element = this.el;\r\n if (isHTMLFormElement(element)) {\r\n element.removeEventListener(\"submit\", this.confirm);\r\n } else if (isHTMLAnchorElement(element)) {\r\n element.removeEventListener(\"click\", this.confirm);\r\n }\r\n }\r\n\r\n confirm(event: Event) {\r\n if (!(window.confirm(this._message))) {\r\n event.preventDefault();\r\n this.dispatch(this.el, \"confirm:cancelled\");\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class ConfirmNavigationController extends BaseController {\r\n\r\n static values = {_message: String};\r\n\r\n declare readonly _messageValue: string;\r\n declare readonly hasMessageValue: boolean;\r\n\r\n get _message(): string {\r\n return this.hasMessageValue ? this._messageValue : \"Do you want to leave this page? Changes you made may not be saved\";\r\n }\r\n\r\n initialize() {\r\n this.allowSubmit = this.allowSubmit.bind(this);\r\n this.confirmNavigation = this.confirmNavigation.bind(this);\r\n this.confirmTurboNavigation = this.confirmTurboNavigation.bind(this);\r\n }\r\n\r\n connect() {\r\n window.onbeforeunload = () => this._message;\r\n window.addEventListener(\"popstate\", this.confirmNavigation);\r\n window.addEventListener(\"submit\", this.allowSubmit);\r\n window.addEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\r\n window.addEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"popstate\", this.confirmNavigation);\r\n window.onbeforeunload = null;\r\n window.removeEventListener(\"submit\", this.allowSubmit);\r\n window.removeEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\r\n window.removeEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\r\n }\r\n\r\n allowSubmit(_event: Event) {\r\n window.removeEventListener(\"popstate\", this.confirmNavigation);\r\n window.onbeforeunload = null;\r\n }\r\n\r\n confirmNavigation(_event: PopStateEvent) {\r\n return false;\r\n }\r\n\r\n confirmTurboNavigation(event: Event) {\r\n if (!confirm(this._message)) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class DebugController extends BaseController {\r\n\r\n static targets = [\"test\"];\r\n declare testTargets: HTMLElement[];\r\n\r\n connect() {\r\n console.log(\"Debug Controller\", this, this.testTargets);\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyController extends BaseController {\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._restoreElementFromLoadValue();\r\n }\r\n\r\n private _getElementValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(): boolean {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkDirty() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (this._isElementDirty()) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(): boolean {\r\n return this._getElementValue() !== this._getElementLoadValue();\r\n }\r\n\r\n private _restoreElementFromLoadValue() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (!this._elementHasCachedLoadValue() && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyFormController extends BaseController {\r\n\r\n get _formElements(): Array {\r\n return Array.from(this.el.querySelectorAll('input, select, textarea'));\r\n }\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._formElements.forEach(element => this._restoreElementFromLoadValue(element));\r\n }\r\n\r\n private _getElementValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (this._isElementDirty(element)) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return this._getElementValue(element) !== this._getElementLoadValue(element);\r\n }\r\n\r\n private _cacheElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (!this._elementHasCachedLoadValue(element) && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n\r\n private _restoreElementFromLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n this._formElements.forEach(el => this._cacheElementLoadValue(el));\r\n }\r\n\r\n private _checkDirty(): void {\r\n this._formElements.forEach(el => this._checkElementDirty(el));\r\n if (this._formElements.some(el => isDirty(el))) {\r\n this.el.setAttribute(\"data-dirty\", \"true\");\r\n } else {\r\n this.el.removeAttribute(\"data-dirty\");\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/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 '../utilities/base_controller';\r\nimport {isHTMLAnchorElement, isHTMLButtonElement, isHTMLInputElement} from \"../utilities/elements\";\r\n\r\nexport class DisableWithController extends BaseController {\r\n\r\n static values = {\r\n message: String,\r\n timeout: Number,\r\n };\r\n\r\n declare readonly messageValue: string;\r\n declare readonly hasMessageValue: boolean;\r\n declare readonly timeoutValue: number;\r\n declare readonly hasTimeoutValue: boolean;\r\n\r\n _cacheText?: string;\r\n _timeoutHandle?: ReturnType;\r\n\r\n get _message(): string {\r\n return this.hasMessageValue ? this.messageValue : 'Submitting...';\r\n }\r\n\r\n get _timeout(): number {\r\n return this.hasTimeoutValue ? this.timeoutValue : 1000;\r\n }\r\n\r\n initialize() {\r\n this.enable = this.enable.bind(this);\r\n this.disable = this.disable.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this.el.addEventListener(\"click\", this.disable);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n disable(event?: Event) {\r\n let element = this.el;\r\n\r\n if (this._isDisabled(element)) {\r\n event?.preventDefault();\r\n event?.stopImmediatePropagation();\r\n } else {\r\n this._cacheText = this._getElText(element);\r\n this._setElText(element, this._message);\r\n this._disable(element);\r\n setTimeout(this.enable, this._timeout);\r\n }\r\n }\r\n\r\n enable(event?: Event) {\r\n event?.preventDefault();\r\n let element = this.el;\r\n if (this._isDisabled(element)) {\r\n this._setElText(element, this._cacheText!);\r\n this._enable(element);\r\n }\r\n }\r\n\r\n _isDisabled(el: HTMLElement): boolean {\r\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\r\n return el.disabled;\r\n } else {\r\n return el.dataset.disabled == \"true\";\r\n }\r\n }\r\n\r\n _getElText(el: HTMLElement): string {\r\n if (isHTMLInputElement(el) && el.type == \"submit\") {\r\n return el.value;\r\n } else {\r\n return el.innerText;\r\n }\r\n }\r\n\r\n _setElText(el: HTMLElement, str: string) {\r\n if (isHTMLInputElement(el) && el.type == \"submit\") {\r\n el.value = str;\r\n } else if (isHTMLButtonElement(el) || isHTMLAnchorElement(el)) {\r\n el.innerText = str;\r\n }\r\n }\r\n\r\n _disable(el: HTMLElement) {\r\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\r\n el.disabled = true;\r\n } else {\r\n el.dataset.disabled = \"true\";\r\n }\r\n }\r\n\r\n _enable(el: HTMLElement) {\r\n if (isHTMLInputElement(el) && el.type == \"submit\" || isHTMLButtonElement(el)) {\r\n el.disabled = false;\r\n } else {\r\n el.dataset.disabled = undefined;\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class DismissableController extends BaseController {\r\n\r\n dismiss() {\r\n this.el.remove();\r\n }\r\n\r\n}\r\n","import {BaseController} from '../utilities/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\";\r\nimport {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class EmptyDomController extends BaseController {\r\n\r\n static classes = [\"empty\", \"notEmpty\"];\r\n static values = {scopeSelector: String};\r\n\r\n declare hasEmptyClass: boolean;\r\n declare emptyClass: string;\r\n declare hasNotEmptyClass: boolean;\r\n declare notEmptyClass: string;\r\n\r\n declare hasScopeSelectorValue: boolean;\r\n declare scopeSelectorValue: string;\r\n\r\n get emptyClasses(): string[] {\r\n return this.emptyClass.split(\" \");\r\n }\r\n\r\n get notEmptyClasses(): string[] {\r\n return this.notEmptyClass.split(\" \");\r\n }\r\n\r\n get _children(): Element[] {\r\n let element = this.el;\r\n if (this.hasScopeSelectorValue) {\r\n return Array.from(element.querySelectorAll(this.scopeSelectorValue));\r\n } else {\r\n return Array.from(element.children);\r\n }\r\n }\r\n\r\n connect() {\r\n useMutation(this, {element: this.el, childList: true});\r\n this.checkEmpty();\r\n }\r\n\r\n mutate(entries: MutationRecord[]) {\r\n this.checkEmpty();\r\n }\r\n\r\n checkEmpty() {\r\n let element = this.el;\r\n let children = this._children;\r\n if (children.length === 0) {\r\n this._removeNotEmptyClasses();\r\n this._addEmptyClasses();\r\n this.dispatch(element as HTMLElement, \"dom:empty\");\r\n } else {\r\n this._addNotEmptyClasses();\r\n this._removeEmptyClasses();\r\n this.dispatch(element as HTMLElement, \"dom:not-empty\", {detail: {count: children.length}});\r\n }\r\n }\r\n\r\n private _removeEmptyClasses() {\r\n if (this.hasEmptyClass) {\r\n this.el.classList.remove(...this.emptyClasses);\r\n }\r\n }\r\n\r\n private _addNotEmptyClasses() {\r\n if (this.hasNotEmptyClass) {\r\n this.el.classList.add(...this.notEmptyClasses);\r\n }\r\n }\r\n\r\n private _addEmptyClasses() {\r\n if (this.hasEmptyClass) {\r\n this.el.classList.add(...this.emptyClasses);\r\n }\r\n }\r\n\r\n private _removeNotEmptyClasses() {\r\n if (this.hasNotEmptyClass) {\r\n this.el.classList.remove(...this.notEmptyClasses);\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 \"../../utilities/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 '../../utilities/base_controller';\r\n\r\nexport class FormRcController extends BaseController {\r\n\r\n static targets = [\"form\"];\r\n\r\n declare readonly formTarget: HTMLFormElement;\r\n\r\n submit(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"submit\");\r\n this.formTarget.submit();\r\n }\r\n\r\n reset(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"reset\");\r\n this.formTarget.reset();\r\n }\r\n\r\n}","import {BaseController} from '../../utilities/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 \"../../utilities/base_controller\";\r\nimport {useIntersection} from \"stimulus-use\";\r\n\r\nexport class IntersectionController extends BaseController {\r\n\r\n static values = {threshold: String};\r\n\r\n declare readonly isVisible: boolean;\r\n declare readonly thresholdValue: string;\r\n declare readonly hasThresholdValue: boolean;\r\n\r\n get _threshold(): number[] {\r\n if (this.hasThresholdValue) {\r\n return this.thresholdValue.split(',').map(val => Number.parseFloat(val.trim())).filter(val => val >= 0 && val <= 1);\r\n } else {\r\n return [0, 1];\r\n }\r\n }\r\n\r\n connect() {\r\n useIntersection(this, {\r\n threshold: this._threshold,\r\n element: this.el,\r\n });\r\n }\r\n\r\n appear(entry: IntersectionObserverEntry) {\r\n this.dispatch(\r\n this.el,\r\n \"intersection:appear\",\r\n {\r\n detail: {\r\n element: this.el,\r\n },\r\n },\r\n );\r\n };\r\n\r\n disappear(entry: IntersectionObserverEntry) {\r\n this.dispatch(\r\n this.el,\r\n \"intersection:disappear\",\r\n {\r\n detail: {\r\n element: this.el,\r\n },\r\n },\r\n );\r\n };\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class IntervalController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _intervalHandle: null | number = null;\r\n\r\n initialize() {\r\n this._interval = this._interval.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._intervalHandle = window.setInterval(this._interval, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._intervalHandle) {\r\n window.clearInterval(this._intervalHandle);\r\n }\r\n }\r\n\r\n _interval() {\r\n this.dispatch(this.el, \"interval:action\");\r\n }\r\n\r\n}","import {useIntersection} from \"stimulus-use\";\r\nimport {AsyncBlockController} from \"./async_block_controller\";\r\n\r\nexport class LazyBlockController extends AsyncBlockController {\r\n\r\n declare observe: () => void;\r\n declare unobserve: () => void;\r\n declare isVisible: boolean;\r\n declare disappear: () => void;\r\n\r\n connect() {\r\n let element = this.el;\r\n\r\n if (\"IntersectionObserver\" in window) {\r\n [this.observe, this.unobserve] = useIntersection(this, {element, threshold: 0.3});\r\n } else {\r\n // Client doesn't support intersection observer, fallback to pre-loading\r\n this.loadContent();\r\n }\r\n }\r\n\r\n appear(entry: IntersectionObserverEntry) {\r\n if (entry.target === this.el && entry.isIntersecting) {\r\n this.loadContent();\r\n if (this.unobserve) {\r\n this.unobserve();\r\n }\r\n }\r\n }\r\n\r\n}\r\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 \"../../utilities/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 \"../../utilities/base_controller\";\r\n\r\nexport class LimitedSelectionCheckboxesController extends BaseController {\r\n\r\n static targets = [\"input\", \"error\"];\r\n static values = {max: Number, message: String};\r\n\r\n declare readonly hasErrorTarget: boolean;\r\n declare readonly errorTarget: HTMLElement;\r\n declare readonly inputTargets: HTMLInputElement[];\r\n declare readonly maxValue: number;\r\n declare readonly messageValue: string;\r\n\r\n initialize() {\r\n this.handleInputs = this.handleInputs.bind(this);\r\n }\r\n\r\n connect() {\r\n this.inputTargets.forEach((el) => el.addEventListener(\"change\", this.handleInputs));\r\n }\r\n\r\n disconnect() {\r\n this.inputTargets.forEach((el) => el.removeEventListener(\"change\", this.handleInputs));\r\n }\r\n\r\n handleInputs(event: Event) {\r\n let tickedInputs = this.inputTargets.reduce((previousValue, el) => el.checked ? previousValue + 1 : previousValue, 0);\r\n let target = event.target as HTMLInputElement;\r\n if (tickedInputs > this.maxValue) {\r\n event.preventDefault();\r\n target.checked = false;\r\n this.dispatch(target, \"change\");\r\n this.dispatch(target, \"limited-selection:too-many\");\r\n if (this.hasErrorTarget) {\r\n this.errorTarget.innerHTML = this.messageValue;\r\n }\r\n } else {\r\n this.dispatch(target, \"limited-selection:selection\");\r\n if (this.hasErrorTarget) {\r\n this.errorTarget.innerHTML = \"\";\r\n }\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class MediaPlayerController extends BaseController {\r\n\r\n static targets = [\"media\"];\r\n\r\n declare readonly mediaTarget: HTMLMediaElement;\r\n\r\n initialize() {\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n disconnect() {\r\n }\r\n\r\n async play(event?: Event) {\r\n event?.preventDefault();\r\n await this.mediaTarget.play();\r\n }\r\n\r\n pause(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.pause();\r\n }\r\n\r\n restart(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime = 0;\r\n }\r\n\r\n seek(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime += 5;\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class NestedFormController extends BaseController {\r\n static targets = ['target', 'template'];\r\n static values = {\r\n insertMode: String,\r\n wrapperClass: String,\r\n };\r\n\r\n declare readonly targetTarget: HTMLElement;\r\n declare readonly templateTarget: HTMLTemplateElement | HTMLScriptElement;\r\n\r\n declare readonly wrapperClassValue: string;\r\n declare readonly hasWrapperSelectorValue: boolean;\r\n declare readonly insertModeValue: InsertPosition;\r\n declare readonly hasInsertModeValue: boolean;\r\n\r\n get _wrapperClass() {\r\n return this.hasWrapperSelectorValue ? this.wrapperClassValue : 'nested-fields';\r\n }\r\n\r\n get _insertMode(): InsertPosition {\r\n return this.hasInsertModeValue ? this.insertModeValue : 'beforeend';\r\n }\r\n\r\n connect() {\r\n this._checkStructure();\r\n }\r\n\r\n add(event?: Event) {\r\n event?.preventDefault();\r\n\r\n const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, this._generateID());\r\n this.targetTarget.insertAdjacentHTML(this._insertMode, content);\r\n }\r\n\r\n remove(event: Event) {\r\n event.preventDefault();\r\n const wrapper: HTMLElement | null = (event.target as HTMLElement).closest(`.${this._wrapperClass}`);\r\n if (wrapper == null) {\r\n throw new Error(`#remove was clicked from outside of a child record. Could not find an ancestor with class .${this._wrapperClass}`);\r\n }\r\n\r\n if (wrapper.dataset.newRecord === 'true') {\r\n wrapper.remove();\r\n } else {\r\n wrapper.style.display = 'none';\r\n let destroyInput = wrapper.querySelector(\"input[name*='_destroy']\") as HTMLInputElement | null;\r\n if (destroyInput == null) {\r\n throw new Error(`Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.`);\r\n }\r\n\r\n destroyInput.value = \"1\";\r\n }\r\n }\r\n\r\n private _generateID(): string {\r\n return new Date().getTime().toString() + Math.random().toString().slice(2);\r\n }\r\n\r\n private _checkStructure() {\r\n let template = this.templateTarget.innerHTML;\r\n\r\n if (template.indexOf('NEW_RECORD')) {\r\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`\");\r\n }\r\n }\r\n}","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class PasswordConfirmController extends BaseController {\r\n\r\n static targets = [\"password\"];\r\n static classes = [\"error\"];\r\n\r\n declare readonly passwordTargets: HTMLInputElement[];\r\n\r\n declare readonly errorClass: string;\r\n declare readonly hasErrorClass: boolean;\r\n\r\n initialize() {\r\n this.checkPasswordsMatch = this.checkPasswordsMatch.bind(this);\r\n }\r\n\r\n connect() {\r\n this.passwordTargets.forEach((el) => el.addEventListener(\"change\", this.checkPasswordsMatch));\r\n }\r\n\r\n disconnect() {\r\n this.passwordTargets.forEach((el) => el.removeEventListener(\"change\", this.checkPasswordsMatch));\r\n }\r\n\r\n private _allPasswordsMatch(): boolean {\r\n let values = new Set(this.passwordTargets.map(el => el.value)); // Create a unique set of the password values\r\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)\r\n }\r\n\r\n private checkPasswordsMatch() {\r\n let element = this.el;\r\n if (this._allPasswordsMatch()) {\r\n this.dispatch(element, \"password-confirm:match\");\r\n if (this.hasErrorClass) {\r\n this.passwordTargets.forEach(el => el.classList.remove(this.errorClass));\r\n }\r\n } else {\r\n this.dispatch(element, \"password-confirm:no-match\");\r\n if (this.hasErrorClass) {\r\n this.passwordTargets.forEach(el => el.classList.add(this.errorClass));\r\n }\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class PasswordPeekController extends BaseController {\r\n\r\n static targets = [\"password\"];\r\n\r\n declare readonly passwordTarget: HTMLInputElement;\r\n\r\n peak(event?: Event) {\r\n event?.preventDefault();\r\n this.passwordTarget.type = \"text\";\r\n }\r\n\r\n hide(event?: Event) {\r\n event?.preventDefault();\r\n this.passwordTarget.type = \"password\";\r\n }\r\n\r\n toggle(event?: Event) {\r\n event?.preventDefault();\r\n if (this.passwordTarget.type === \"password\") {\r\n this.peak();\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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\";\r\nimport {WindowResizePayload} from \"stimulus-use/dist/use-window-resize/use-window-resize\";\r\nimport {BaseController} from \"../utilities/base_controller\";\r\n\r\ninterface ResponsiveIframeMessage {\r\n name: string,\r\n height: number,\r\n}\r\n\r\nexport class ResponsiveIframeWrapperController extends BaseController {\r\n\r\n initialize() {\r\n this.messageReceived = this.messageReceived.bind(this);\r\n }\r\n\r\n connect() {\r\n window.addEventListener(\"message\", this.messageReceived);\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"message\", this.messageReceived);\r\n }\r\n\r\n messageReceived(message: MessageEvent) {\r\n let data = message.data;\r\n if (data.hasOwnProperty(\"name\") && data.name === \"iframe-body\" && data.hasOwnProperty(\"height\")) {\r\n this.resize(data.height);\r\n }\r\n }\r\n\r\n resize(height: number) {\r\n (this.el as HTMLIFrameElement).style.height = `${height}px`;\r\n }\r\n\r\n}\r\n\r\nexport class ResponsiveIframeBodyController extends BaseController {\r\n\r\n static debounces = [\"postUpdate\"];\r\n\r\n declare observe: () => void;\r\n declare unobserve: () => void;\r\n\r\n connect() {\r\n // If this Window is inside a frame\r\n if (window.self !== window.top) {\r\n useWindowResize(this);\r\n useDebounce(this, {});\r\n this.postUpdate();\r\n } else {\r\n // Not an iframe\r\n }\r\n }\r\n\r\n windowResize(payload: WindowResizePayload) {\r\n this.postUpdate();\r\n };\r\n\r\n postUpdate() {\r\n let payload: ResponsiveIframeMessage = {name: \"iframe-body\", height: this.getHeight()};\r\n window.parent.postMessage(\r\n payload,\r\n \"*\",\r\n );\r\n }\r\n\r\n getHeight(): number {\r\n const body = document.body;\r\n const html = document.documentElement;\r\n\r\n // Get the largest height out of body and html's various height measurements\r\n return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\r\n }\r\n\r\n}\r\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 \"../../utilities/base_controller\";\r\nimport {getScrollParent, scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class ScrollToBottomController extends BaseController {\r\n\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare modeValue: \"nearest\" | \"document\";\r\n declare hasModeValue: boolean;\r\n\r\n scroll(event?: Event) {\r\n event?.preventDefault();\r\n let mode = this.hasModeValue ? this.modeValue : \"document\";\r\n let target: null | HTMLElement;\r\n if (mode == \"document\") {\r\n target = document.body;\r\n } else {\r\n target = getScrollParent(this.el);\r\n }\r\n if (target == null) {\r\n return;\r\n }\r\n scrollToElement(target!, {behavior: \"smooth\", block: \"end\"}).catch(() => target!.scrollIntoView(false));\r\n }\r\n\r\n}\r\n\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class ScrollToController extends BaseController {\r\n\r\n static values = {\r\n selector: String,\r\n behavior: String,\r\n block: String,\r\n inline: String,\r\n };\r\n\r\n declare selectorValue: string;\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 scroll() {\r\n let target = document.querySelector(this.selectorValue);\r\n if (!target) {\r\n console.warn(`Could not find target for '${this.selectorValue}'`);\r\n return;\r\n }\r\n\r\n scrollToElement(\r\n target!,\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(() => target!.scrollIntoView()); // Fallback to snap-scrolling\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {getScrollParent, scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class ScrollToTopController extends BaseController {\r\n\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare modeValue: \"nearest\" | \"document\";\r\n declare hasModeValue: boolean;\r\n\r\n scroll(event?: Event) {\r\n event?.preventDefault();\r\n let mode = this.hasModeValue ? this.modeValue : \"document\";\r\n let target: null | HTMLElement;\r\n if (mode == \"document\") {\r\n target = document.body;\r\n } else {\r\n target = getScrollParent(this.el);\r\n }\r\n if (target == null) {\r\n return;\r\n }\r\n scrollToElement(target!, {behavior: \"smooth\", block: \"start\"}).catch(() => target!.scrollIntoView(false));\r\n }\r\n\r\n}\r\n\r\n","import {BaseController} from \"../utilities/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 \"../utilities/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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableSortController extends BaseController {\r\n\r\n static values = {startSort: Number};\r\n\r\n declare readonly startSortValue: number;\r\n declare readonly hasStartSortValue: boolean;\r\n _lastIndex: number | null = null;\r\n _reverse: boolean = false;\r\n\r\n get _tableHead(): HTMLTableSectionElement {\r\n let head = (this.el as HTMLTableElement).tHead;\r\n if (head == null) {\r\n throw new Error('Expected table to have a element.');\r\n }\r\n return head;\r\n }\r\n\r\n get _tableHeaders(): HTMLTableHeaderCellElement[] {\r\n let rows = this._tableHead.rows;\r\n if (rows.length == 0) {\r\n throw new Error('Expected table to have a element with at least one row.');\r\n }\r\n return Array.from(rows[0].cells);\r\n }\r\n\r\n get _tableBody() {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n initialize() {\r\n this.sort = this.sort.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._tableHeaders.forEach(cell => cell.addEventListener(\"click\", this.sort));\r\n if (this.hasStartSortValue) {\r\n this._sortByColumn(this.startSortValue);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n this._tableHeaders.forEach(cell => cell.removeEventListener(\"click\", this.sort));\r\n }\r\n\r\n sort(event: Event) {\r\n event.preventDefault();\r\n let headerCell = event.target! as HTMLTableHeaderCellElement;\r\n let headerCellIndex = this._indexOfHeaderCell(headerCell);\r\n this._sortByColumn(headerCellIndex);\r\n }\r\n\r\n private _indexOfHeaderCell(cell: HTMLTableHeaderCellElement) {\r\n return this._tableHeaders.indexOf(cell);\r\n }\r\n\r\n private _sortByColumn(index: number) {\r\n this._reverse = index === this._lastIndex && !this._reverse;\r\n let frag = document.createDocumentFragment();\r\n let rows = this._tableRows;\r\n\r\n let newRows = rows.sort((row, otherRow) => {\r\n let cells = Array.from(row.cells);\r\n let otherCells = Array.from(otherRow.cells);\r\n\r\n // TODO: Handle colspans?\r\n let x = cells[index]?.innerText || \"\";\r\n let y = otherCells[index]?.innerText || \"\";\r\n\r\n let sortVal = x.localeCompare(y, \"en\", {sensitivity: \"base\", numeric: true, caseFirst: \"upper\"});\r\n\r\n if (row.dataset.sortTop || otherRow.dataset.sortBottom) {\r\n if (row.dataset.sortTop && otherRow.dataset.sortTop) {\r\n return sortVal;\r\n }\r\n return -1;\r\n }\r\n if (row.dataset.sortBottom || otherRow.dataset.sortTop) {\r\n if (row.dataset.sortBottom && otherRow.dataset.sortBottom) {\r\n return sortVal;\r\n }\r\n return 1;\r\n }\r\n\r\n if (this._reverse) {\r\n return sortVal > 0 ? -1 : 1;\r\n }\r\n return sortVal;\r\n });\r\n\r\n newRows.forEach(row => frag.appendChild(row));\r\n\r\n this._tableBody.innerHTML = \"\";\r\n this._tableBody.appendChild(frag);\r\n this._lastIndex = index;\r\n }\r\n\r\n}","import {useMutation} from \"stimulus-use\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableTruncateController extends BaseController {\r\n\r\n static targets = [\"showMore\"];\r\n static values = {\r\n limit: Number,\r\n truncated: Boolean,\r\n };\r\n\r\n declare readonly showMoreTarget: HTMLElement;\r\n declare limitValue: number;\r\n declare readonly hasLimitValue: boolean;\r\n declare truncatedValue: boolean;\r\n declare readonly hasTruncatedValue: boolean;\r\n\r\n get _truncated(): boolean {\r\n return this.hasTruncatedValue ? this.truncatedValue : false;\r\n }\r\n\r\n set _truncated(value) {\r\n this.truncatedValue = value;\r\n }\r\n\r\n get _tableBody(): HTMLTableSectionElement {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n get _limit(): number {\r\n return this.hasLimitValue ? this.limitValue : 20;\r\n }\r\n\r\n initialize() {\r\n this.truncate = this.truncate.bind(this);\r\n this.expand = this.expand.bind(this);\r\n }\r\n\r\n connect() {\r\n useMutation(this, {childList: true, element: this._tableBody});\r\n\r\n requestAnimationFrame(() => {\r\n this.truncate();\r\n this.showMoreTarget.addEventListener(\"click\", this.expand);\r\n });\r\n }\r\n\r\n truncate(event?: Event) {\r\n event?.preventDefault();\r\n this._truncated = true;\r\n if (this._tableRows.length >= this._limit) {\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\r\n } else {\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n }\r\n\r\n expand(event?: Event) {\r\n this._truncated = false;\r\n event?.preventDefault();\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n\r\n mutate(entries: MutationRecord[]) {\r\n if (this._truncated) {\r\n this._reTruncate();\r\n }\r\n }\r\n\r\n private _showElement(el: HTMLElement): void {\r\n el.style.display = \"\";\r\n }\r\n\r\n private _hideElement(el: HTMLElement): void {\r\n el.style.display = \"none\";\r\n }\r\n\r\n private _reTruncate() {\r\n this._tableRows.slice(0, this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\r\n }\r\n\r\n}","import {EphemeralController} from \"../utilities/ephemeral_controller\";\r\n\r\nexport class TeleportController extends EphemeralController {\r\n\r\n static values = {target: String, insert: String, immediate: Boolean};\r\n\r\n declare readonly immediateValue: boolean;\r\n declare readonly hasImmediateValue: boolean;\r\n declare readonly targetValue: string;\r\n declare readonly hasInsertValue: boolean;\r\n declare readonly insertValue: InsertPosition | \"replaceOuter\" | \"replaceInner\" | \"prepend\" | \"append\";\r\n\r\n connect() {\r\n if (!this.hasInsertValue) {\r\n throw new Error(\"`insert` value was not specified\");\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n if (this.hasImmediateValue && this.immediateValue) {\r\n this.execute();\r\n }\r\n });\r\n }\r\n\r\n execute(event?: Event) {\r\n event?.preventDefault();\r\n let element = this.el;\r\n let destination = document.querySelector(this.targetValue);\r\n\r\n if (destination == null) {\r\n this.dispatch(element, \"teleport:error\");\r\n return;\r\n }\r\n\r\n let copy = element.cloneNode(true) as HTMLElement;\r\n this.cleanup(copy);\r\n\r\n switch (this.insertValue) {\r\n case \"beforebegin\":\r\n case \"beforeend\":\r\n case \"afterend\":\r\n case \"afterbegin\":\r\n destination.insertAdjacentHTML(this.insertValue, copy.outerHTML);\r\n break;\r\n case \"replaceOuter\":\r\n destination.outerHTML = copy.outerHTML;\r\n break;\r\n case \"replaceInner\":\r\n destination.innerHTML = copy.outerHTML;\r\n break;\r\n case \"prepend\":\r\n destination.insertAdjacentHTML(\"afterbegin\", copy.outerHTML);\r\n break;\r\n case \"append\":\r\n destination.insertAdjacentHTML(\"beforeend\", copy.outerHTML);\r\n break;\r\n default:\r\n throw new Error(\"`insert` value was not specified\");\r\n\r\n }\r\n element.remove();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TimeoutController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _timeoutHandle: null | number = null;\r\n\r\n initialize() {\r\n this._timeout = this._timeout.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._timeoutHandle = window.setTimeout(this._timeout, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n window.clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n _timeout() {\r\n this.dispatch(this.el, \"timeout\");\r\n }\r\n\r\n}","import {useClickOutside, useHover} from \"stimulus-use\";\r\nimport {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport type ToggleClassMode = \"on\" | \"off\" | \"toggle\"\r\n\r\nexport class ToggleClassController extends BaseController {\r\n\r\n static targets = [\"toggle\"];\r\n static values = {\r\n class: String,\r\n mouseEnter: String,\r\n mouseLeave: String,\r\n clickAway: Boolean,\r\n initial: String,\r\n };\r\n\r\n declare readonly toggleTargets: HTMLElement[];\r\n\r\n declare readonly classValue: string;\r\n declare readonly hasClassValue: boolean;\r\n\r\n declare readonly mouseEnterValue: ToggleClassMode;\r\n declare readonly hasMouseEnterValue: boolean;\r\n\r\n declare readonly mouseLeaveValue: ToggleClassMode;\r\n declare readonly hasMouseLeaveValue: boolean;\r\n\r\n declare readonly clickAwayValue: boolean;\r\n declare readonly hasClickAwayValue: boolean;\r\n\r\n declare readonly initialValue: \"on\" | \"off\";\r\n declare readonly hasInitialValue: boolean;\r\n\r\n connect() {\r\n if (!this.hasClassValue) {\r\n throw new Error(\"data-toggle-class-class-value must not be empty\");\r\n }\r\n\r\n if (this.hasMouseEnterValue || this.hasMouseLeaveValue) {\r\n useHover(this);\r\n }\r\n\r\n if (this.hasClickAwayValue && this.clickAwayValue) {\r\n useClickOutside(this);\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n if (this.hasInitialValue) {\r\n if (this.initialValue === \"on\") {\r\n this.toggleTargets.forEach((target) => this._elementOn(target));\r\n } else {\r\n this.toggleTargets.forEach((target) => this._elementOff(target));\r\n }\r\n }\r\n });\r\n }\r\n\r\n clickOutside() {\r\n this.toggleTargets.forEach((target) => {\r\n if (this._elementWasToggled(target)) {\r\n this._elementToggleStatus(target);\r\n this._elementToggle(target);\r\n }\r\n });\r\n }\r\n\r\n mouseEnter() {\r\n if (this.hasMouseEnterValue) {\r\n switch (this.mouseEnterValue) {\r\n case \"on\":\r\n this.on();\r\n break;\r\n case \"off\":\r\n this.off();\r\n break;\r\n case \"toggle\":\r\n this.toggle();\r\n break;\r\n }\r\n }\r\n return {};\r\n }\r\n\r\n mouseLeave() {\r\n if (this.hasMouseLeaveValue) {\r\n switch (this.mouseLeaveValue) {\r\n case \"on\":\r\n this.on();\r\n break;\r\n case \"off\":\r\n this.off();\r\n break;\r\n case \"toggle\":\r\n this.toggle();\r\n break;\r\n }\r\n }\r\n return {};\r\n }\r\n\r\n on(event?: Event) {\r\n this.toggleTargets.forEach((target) => {\r\n this._elementToggleStatus(target);\r\n this._elementOn(target);\r\n });\r\n }\r\n\r\n off(event?: Event) {\r\n this.toggleTargets.forEach((target) => {\r\n this._elementToggleStatus(target);\r\n this._elementOff(target);\r\n });\r\n }\r\n\r\n toggle(event?: Event) {\r\n this.toggleTargets.forEach((target) => {\r\n this._elementToggleStatus(target);\r\n this._elementToggle(target);\r\n });\r\n }\r\n\r\n private _elementWasToggled(el: HTMLElement): boolean {\r\n return el.dataset.toggled == \"true\";\r\n }\r\n\r\n private _elementToggleStatus(el: HTMLElement) {\r\n if (this._elementWasToggled(el)) {\r\n delete el.dataset.toggled;\r\n } else {\r\n el.dataset.toggled = \"true\";\r\n }\r\n }\r\n\r\n private _elementToggle(el: HTMLElement) {\r\n let classes = this.classValue.split(\" \");\r\n classes.forEach((klass) => el.classList.toggle(klass));\r\n }\r\n\r\n private _elementOn(el: HTMLElement) {\r\n let classes = this.classValue.split(\" \");\r\n classes.forEach((klass) => el.classList.toggle(klass, true));\r\n }\r\n\r\n private _elementOff(el: HTMLElement) {\r\n let classes = this.classValue.split(\" \");\r\n classes.forEach((klass) => el.classList.toggle(klass, false));\r\n }\r\n\r\n}\r\n","export function isTurboFrame(element: HTMLElement): element is TurboFrame {\r\n return element.nodeName == \"TURBO-FRAME\";\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\nimport {isHTMLAnchorElement} from \"../utilities/elements\";\r\nimport {isTurboFrame} from \"../utilities/turbo\";\r\n\r\nexport class TurboFrameRCController extends BaseController {\r\n\r\n static values = {\r\n frameId: String,\r\n src: String,\r\n loadingMessage: String,\r\n };\r\n\r\n declare readonly frameIdValue: string;\r\n declare readonly srcValue: string;\r\n declare readonly hasSrcValue: boolean;\r\n declare readonly loadingMessageValue: string;\r\n declare readonly hasLoadingMessageValue: boolean;\r\n\r\n toggle(event?: Event) {\r\n event?.preventDefault();\r\n let frame = this._getFrame();\r\n let frameSrc = frame.src;\r\n if (frameSrc == null || frameSrc !== this._getSrc()) {\r\n this._setSrc();\r\n } else {\r\n this._clear();\r\n }\r\n }\r\n\r\n setSrc(event?: Event) {\r\n event?.preventDefault();\r\n this._setSrc();\r\n }\r\n\r\n clear(event?: Event) {\r\n event?.preventDefault();\r\n this._clear();\r\n }\r\n\r\n private _setSrc() {\r\n let frame = this._getFrame();\r\n if (this.hasLoadingMessageValue) {\r\n frame.innerHTML = this.loadingMessageValue;\r\n }\r\n frame.src = this._getSrc();\r\n }\r\n\r\n private _clear() {\r\n let frame = this._getFrame();\r\n frame.src = \"\";\r\n frame.innerHTML = \"\";\r\n }\r\n\r\n private _getFrame(): TurboFrame {\r\n let frame = document.getElementById(`${this.frameIdValue}`);\r\n if (frame == null) {\r\n throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);\r\n }\r\n if (!isTurboFrame(frame)) {\r\n throw new Error(`Element targeted by ID '${this.frameIdValue}'`);\r\n } else {\r\n return frame;\r\n }\r\n }\r\n\r\n private _getSrc(): string {\r\n let element = this.el;\r\n if (this.hasSrcValue) {\r\n return this.srcValue;\r\n } else if (isHTMLAnchorElement(element)) {\r\n return element.href;\r\n } else {\r\n throw new Error(\"No link given to drive frame to\");\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\nimport {isTurboFrame} from \"../utilities/turbo\";\r\n\r\n// noinspection SillyAssignmentJS\r\nexport class TurboFrameRefreshController extends BaseController {\r\n\r\n static values = {\r\n interval: Number,\r\n poll: Boolean,\r\n };\r\n\r\n declare readonly intervalValue: number;\r\n declare readonly pollValue: boolean;\r\n declare readonly hasPollValue: boolean;\r\n _timeoutHandle: null | ReturnType = null;\r\n\r\n get _poll(): boolean {\r\n return this.hasPollValue ? this.pollValue : false;\r\n }\r\n\r\n initialize() {\r\n this.refresh = this.refresh.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el;\r\n if (isTurboFrame(element)) {\r\n if (!!element.src) {\r\n throw new Error('The provided element has no `src` attribute.');\r\n }\r\n } else {\r\n throw new Error('Expected controller to be mounted on a element.');\r\n }\r\n if (this._poll) {\r\n requestAnimationFrame(() => this._timeoutHandle = setTimeout(() => this.refresh(), this.intervalValue));\r\n }\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n refresh(event?: Event) {\r\n event?.preventDefault();\r\n let element = this.el as TurboFrame;\r\n element.src = element.src;\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class WordCountController extends BaseController {\r\n\r\n static targets = [\"input\", \"output\"];\r\n static values = {min: Number, max: Number};\r\n static classes = [\"error\"];\r\n\r\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\r\n declare readonly outputTarget: HTMLElement;\r\n declare minValue: number;\r\n declare hasMinValue: boolean;\r\n declare maxValue: number;\r\n declare hasMaxValue: boolean;\r\n declare errorClass: string;\r\n declare hasErrorClass: boolean;\r\n\r\n initialize() {\r\n this.updateWordCount = this.updateWordCount.bind(this);\r\n }\r\n\r\n connect() {\r\n this.updateWordCount();\r\n this.inputTarget.addEventListener(\"input\", this.updateWordCount);\r\n }\r\n\r\n disconnect() {\r\n this.inputTarget.removeEventListener(\"input\", this.updateWordCount);\r\n }\r\n\r\n updateWordCount() {\r\n let wordCount = 0;\r\n let textAreaValue = this.inputTarget.value;\r\n let matches = textAreaValue.match(/\\S+/g);\r\n wordCount = (matches && matches.length) || 0;\r\n this.outputTarget.innerText = wordCount.toString();\r\n if (this.hasErrorClass) {\r\n if (this._isValidCount(wordCount)) {\r\n this.outputTarget.classList.remove(this.errorClass);\r\n } else {\r\n this.outputTarget.classList.add(this.errorClass);\r\n }\r\n }\r\n }\r\n\r\n private _isValidCount(count: number) {\r\n let min = 0;\r\n let max = 99999;\r\n\r\n if (this.hasMinValue) {\r\n min = this.minValue;\r\n }\r\n\r\n if (this.hasMaxValue) {\r\n max = this.maxValue;\r\n }\r\n\r\n return count >= min && count <= max;\r\n }\r\n\r\n}\r\n"],"names":["BaseController","context","_this","Proxy","get","obj","prop","returnVal","Reflect","self","test","logProperty","toString","apply","target","thisArg","argArray","log","args","metaValue","name","element","document","head","querySelector","getAttribute","dispatch","eventName","options","mergedOptions","Object","assign","bubbles","cancelable","detail","event","CustomEvent","this","logEvent","dispatchEvent","functionName","application","debug","logger","console","groupCollapsed","identifier","groupEnd","documentElement","hasAttribute","isTurboPreview","Controller","AnchorSpyController","initialize","_checkAnchor","bind","connect","requestAnimationFrame","window","addEventListener","disconnect","removeEventListener","write","preventDefault","_anchor","_key","el","keyValue","replaceAll","location","hash","substr","value","key","String","AppearanceController","_handleVisibility","appear","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","errorMessage","selector","AutoSubmitFormController","submit","forEach","_this2","method","controller","methodName","composeEventName","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","useMutation","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","_toggle","_refresh","hasSelectAllTarget","selectAllTarget","checkboxTargets","checkbox","checked","checkboxesCount","checkboxesCheckedCount","_checked","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","message","ConfirmNavigationController","allowSubmit","confirmNavigation","confirmTurboNavigation","onbeforeunload","_event","_messageValue","DebugController","testTargets","DetectDirtyController","_checkDirty","_cacheLoadValues","restore","_restoreElementFromLoadValue","_getElementValue","_getElementLoadValue","_cacheAttrName","defaultChecked","Array","from","option","defaultSelected","_elementHasCachedLoadValue","_isElementDirty","setAttribute","removeAttribute","cacheValue","defaultValue","DetectDirtyFormController","_formElements","_checkElementDirty","_cacheElementLoadValue","_this3","some","DisableInputsController","toggle","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","href","_id","hasRestoreOnLoadValue","restoreOnLoadValue","hasElementTarget","elementTarget","restoreOnLoad","EmptyDomController","childList","checkEmpty","mutate","_children","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","emptyClasses","hasNotEmptyClass","notEmptyClasses","emptyClass","notEmptyClass","hasScopeSelectorValue","scopeSelectorValue","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormRcController","formTarget","reset","FormSaveController","_clear","_clearOnSubmit","_formIdentifier","_formData","_formID","elements","hasClearOnSubmitValue","clearOnSubmitValue","clearOnSubmit","IntersectionController","threshold","_threshold","disappear","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","IntervalController","_interval","_intervalHandle","setInterval","secondsValue","clearInterval","seconds","LazyBlockController","smoothPolyfilled","scrollToElement","behavior","block","inline","scrollIntoView","smoothSupported","import","polyfill","polyfillSmooth","getScrollParent","node","overflowY","getComputedStyle","parentElement","body","LightboxImageController","open","close","_dialog","image","className","_imageClassName","_src","srcset","_srcSet","sizes","_sizes","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","_modalClassName","showModal","hasSrcValue","srcValue","hasSrcSetValue","srcSetValue","hasSizesValue","sizesValue","hasModalClass","modalClass","hasImageClass","imageClass","srcSet","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","MediaPlayerController","play","mediaTarget","pause","restart","currentTime","seek","NestedFormController","_checkStructure","content","templateTarget","replace","_generateID","targetTarget","insertAdjacentHTML","_insertMode","wrapper","closest","_wrapperClass","newRecord","destroyInput","Date","getTime","Math","random","slice","indexOf","hasWrapperSelectorValue","wrapperClassValue","hasInsertModeValue","insertModeValue","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","_selector","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","constructor","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","RegExp","substringIdentifierValueRegex","camelCase","action","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","StickyController","createMagicElement","_magicElement","_mode","intersectionRatio","hasStuckClass","stuckClass","TableSortController","sort","_tableHeaders","cell","hasStartSortValue","_sortByColumn","startSortValue","headerCellIndex","_indexOfHeaderCell","index","_reverse","_lastIndex","frag","createDocumentFragment","_tableRows","row","otherRow","cells","otherCells","x","y","sortVal","localeCompare","sensitivity","numeric","caseFirst","sortTop","sortBottom","_this4","_tableBody","tHead","rows","_tableHead","tBodies","startSort","TableTruncateController","truncate","expand","showMoreTarget","_truncated","_limit","_hideElement","_showElement","_reTruncate","hasTruncatedValue","truncatedValue","hasLimitValue","limitValue","limit","truncated","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","TimeoutController","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","_this5","toggled","classValue","klass","isTurboFrame","class","clickAway","initial","TurboFrameRCController","frameSrc","_getFrame","_getSrc","_setSrc","setSrc","frame","hasLoadingMessageValue","loadingMessageValue","getElementById","frameIdValue","frameId","loadingMessage","TurboFrameRefreshController","refresh","_poll","intervalValue","hasPollValue","pollValue","interval","poll","WordCountController","updateWordCount","wordCount","matches","match"],"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 e3511092..cdeee6cd 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("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(p(n),{get:function(e,t){var i=Reflect.get(e,t),r=p(n);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 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}})||p(n)}m(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);this.logEvent(t,r,e),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()}},n.logEvent=function(e,t,n){if(this.application.debug){var i=console;i.groupCollapsed("%c"+this.identifier+" %c"+e+"%c","color: #3B82F6","color: #0be000","color: unset"),i.log({element:n}),i.groupEnd()}},d(t,[{key:"el",get:function(){return this.element}}]),t}(t.Controller),y=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.initialize=function(){this._checkAnchor=this._checkAnchor.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._checkAnchor(),window.addEventListener("hashchange",e._checkAnchor)})},n.disconnect=function(){window.removeEventListener("hashchange",this._checkAnchor)},n.write=function(e){null==e||e.preventDefault(),this._anchor=this._key},n._checkAnchor=function(){this.dispatch(this.el,this._key===this._anchor?"anchor-spy:active":"anchor-spy:inactive")},d(t,[{key:"_key",get:function(){return this.keyValue.replaceAll("#","")}},{key:"_anchor",get:function(){return window.location.hash.substr(1)},set:function(e){window.location.hash=e}}]),t}(b);y.values={key:String};var _=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.initialize=function(){this._handleVisibility=this._handleVisibility.bind(this)},n.connect=function(){var e=this;window.addEventListener("focus",this._handleVisibility),window.addEventListener("blur",this._handleVisibility),document.addEventListener("visibilitychange",this._handleVisibility),requestAnimationFrame(function(){e._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}m(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}m(t,e);var n=t.prototype;return n.initialize=function(){this.submit=this.submit.bind(this)},n.connect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.addEventListener("change",e.submit)})},n.disconnect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.removeEventListener("change",e.submit)})},n.submit=function(){this.dispatch(this.el,"submit")},t}(b);const k=(e,t)=>{const n=e[t];return"function"==typeof n?n:(...e)=>{}},C=(e,t,n)=>{let i=e;return!0===n?i=`${t.identifier}:${e}`:"string"==typeof n&&(i=`${n}:${e}`),i},T=(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},S=(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,k(e,"appear").call(e,t),n){const n=C("appear",e,i),s=T(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s):e.isVisible&&(t=>{if(e.isVisible=!1,k(e,"disappear").call(e,t),n){const n=C("disappear",e,i),s=T(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]},L={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},A={debug:!1,logger:console};class D{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:A.debug,this.logger=null!==(r=null==t?void 0:t.logger)&&void 0!==r?r:A.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 D{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=()=>{k(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{k(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 x extends D{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=>{k(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,t={})=>{const n=new x(e,t);return[n.observe,n.unobserve]},N=e=>{const t=t=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:t};k(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 H=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var e=this;N(this),requestAnimationFrame(function(){e._handler();var t=e.el;t.style.resize="none",t.style.boxSizing="border-box",t.addEventListener("input",e._handler),t.addEventListener("focus",e._handler)})},n.disconnect=function(){this.el.removeEventListener("input",this._handler),this.el.removeEventListener("focus",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),z=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.initialize=function(){this._updateCharCount=this._updateCharCount.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e.inputTarget.addEventListener("input",e._updateCharCount),e._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);z.targets=["input","output"],z.values={min:Number,max:Number},z.classes=["error"];var F=function(e){function t(){return e.apply(this,arguments)||this}m(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&&t0&&(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);se.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var oe=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.connect=function(){S(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);oe.values={threshold:String};var ae=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._intervalHandle=null,t}m(t,e);var n=t.prototype;return n.initialize=function(){this._interval=this._interval.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._intervalHandle=window.setInterval(e._interval,1e3*e.secondsValue)})},n.disconnect=function(){this._intervalHandle&&window.clearInterval(this._intervalHandle)},n._interval=function(){this.dispatch(this.el,"interval:action")},t}(b);ae.values={seconds:Number};var le,ce=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.connect=function(){if("IntersectionObserver"in window){var e=S(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),ue=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&&!he)return Promise.resolve(function(){try{return Promise.resolve(import("smoothscroll-polyfill")).then(function(e){le||(le=!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)}},he="scrollBehavior"in document.documentElement.style;function de(e){if(!e)return null;var t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:de(e.parentElement)||document.body}var fe=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._dialog=null,t}m(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(),ue(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,ue(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);fe.values={src:String,srcSet:String,sizes:String},fe.classes=["modal","image"];var me=function(e){function t(){return e.apply(this,arguments)||this}m(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);me.targets=["input","error"],me.values={max:Number,message:String};var pe=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.initialize=function(){},n.connect=function(){},n.disconnect=function(){},n.play=function(e){try{return null==e||e.preventDefault(),Promise.resolve(this.mediaTarget.play()).then(function(){})}catch(e){return Promise.reject(e)}},n.pause=function(e){null==e||e.preventDefault(),this.mediaTarget.pause()},n.restart=function(e){null==e||e.preventDefault(),this.mediaTarget.currentTime=0},n.seek=function(e){null==e||e.preventDefault(),this.mediaTarget.currentTime+=5},t}(b);pe.targets=["media"];var ve=function(e){function t(){return e.apply(this,arguments)||this}m(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);ve.targets=["target","template"],ve.values={insertMode:String,wrapperClass:String};var ge=function(e){function t(){return e.apply(this,arguments)||this}m(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);ge.targets=["password"],ge.classes=["error"];var be=function(e){function t(){return e.apply(this,arguments)||this}m(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);be.targets=["password"];var ye=function(e){function t(){return e.apply(this,arguments)||this}return m(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);ye.targets=[],ye.values={selector:String};var _e=function(e){function t(){return e.apply(this,arguments)||this}m(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),Ee=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.connect=function(){var e,t,n;window.self!==window.top&&(N(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);Ee.debounces=["postUpdate"];var we=function(e){function t(){return e.apply(this,arguments)||this}m(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),ke=function(e){function t(){return e.apply(this,arguments)||this}return m(t,e),t.prototype.connect=function(){var e=this;requestAnimationFrame(function(){ue(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}(we);ke.values={behavior:String,block:String,inline:String};var Ce=function(e){function t(){return e.apply(this,arguments)||this}return m(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:de(this.el))&&ue(t,{behavior:"smooth",block:"end"}).catch(function(){return t.scrollIntoView(!1)})},t}(b);Ce.values={mode:String};var Te=function(e){function t(){return e.apply(this,arguments)||this}return m(t,e),t.prototype.scroll=function(){var e=document.querySelector(this.selectorValue);e?ue(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);Te.values={selector:String,behavior:String,block:String,inline:String};var Ve=function(e){function t(){return e.apply(this,arguments)||this}return m(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:de(this.el))&&ue(t,{behavior:"smooth",block:"start"}).catch(function(){return t.scrollIntoView(!1)})},t}(b);Ve.values={mode:String};var Se=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._timeout=null,t}m(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);Se.values={seconds:Number};var Le=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._magicElement=null,t}m(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);Le.classes=["stuck"],Le.values={mode:String};var Ae=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._lastIndex=null,t._reverse=!1,t}m(t,e);var n=t.prototype;return n.initialize=function(){this.sort=this.sort.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._tableHeaders.forEach(function(t){return t.addEventListener("click",e.sort)}),e.hasStartSortValue&&e._sortByColumn(e.startSortValue)})},n.disconnect=function(){var e=this;this._tableHeaders.forEach(function(t){return t.removeEventListener("click",e.sort)})},n.sort=function(e){e.preventDefault();var t=this._indexOfHeaderCell(e.target);this._sortByColumn(t)},n._indexOfHeaderCell=function(e){return this._tableHeaders.indexOf(e)},n._sortByColumn=function(e){var t=this;this._reverse=e===this._lastIndex&&!this._reverse;var n=document.createDocumentFragment();this._tableRows.sort(function(n,i){var r,s,o=Array.from(n.cells),a=Array.from(i.cells),l=(null==(r=o[e])?void 0:r.innerText)||"",c=(null==(s=a[e])?void 0:s.innerText)||"",u=l.localeCompare(c,"en",{sensitivity:"base",numeric:!0,caseFirst:"upper"});return n.dataset.sortTop||i.dataset.sortBottom?n.dataset.sortTop&&i.dataset.sortTop?u:-1:n.dataset.sortBottom||i.dataset.sortTop?n.dataset.sortBottom&&i.dataset.sortBottom?u:1:t._reverse?u>0?-1:1:u}).forEach(function(e){return n.appendChild(e)}),this._tableBody.innerHTML="",this._tableBody.appendChild(n),this._lastIndex=e},d(t,[{key:"_tableHead",get:function(){var e=this.el.tHead;if(null==e)throw new Error("Expected table to have a element.");return e}},{key:"_tableHeaders",get:function(){var e=this._tableHead.rows;if(0==e.length)throw new Error("Expected table to have a element with at least one row.");return Array.from(e[0].cells)}},{key:"_tableBody",get:function(){return this.el.tBodies[0]}},{key:"_tableRows",get:function(){return Array.from(this._tableBody.rows)}}]),t}(b);Ae.values={startSort:Number};var De=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.initialize=function(){this.truncate=this.truncate.bind(this),this.expand=this.expand.bind(this)},n.connect=function(){var e=this;M(this,{childList:!0,element:this._tableBody}),requestAnimationFrame(function(){e.truncate(),e.showMoreTarget.addEventListener("click",e.expand)})},n.truncate=function(e){var t=this;null==e||e.preventDefault(),this._truncated=!0,this._tableRows.length>=this._limit?(this._tableRows.slice(this._limit).forEach(function(e){e!==t.showMoreTarget&&t._hideElement(e)}),this._showElement(this.showMoreTarget)):this._hideElement(this.showMoreTarget)},n.expand=function(e){var t=this;this._truncated=!1,null==e||e.preventDefault(),this._tableRows.slice(this._limit).forEach(function(e){e!==t.showMoreTarget&&t._showElement(e)}),this._hideElement(this.showMoreTarget)},n.mutate=function(e){this._truncated&&this._reTruncate()},n._showElement=function(e){e.style.display=""},n._hideElement=function(e){e.style.display="none"},n._reTruncate=function(){var e=this;this._tableRows.slice(0,this._limit).forEach(function(t){t!==e.showMoreTarget&&e._showElement(t)}),this._tableRows.slice(this._limit).forEach(function(t){t!==e.showMoreTarget&&e._hideElement(t)}),this._showElement(this.showMoreTarget)},d(t,[{key:"_truncated",get:function(){return!!this.hasTruncatedValue&&this.truncatedValue},set:function(e){this.truncatedValue=e}},{key:"_tableBody",get:function(){return this.el.tBodies[0]}},{key:"_tableRows",get:function(){return Array.from(this._tableBody.rows)}},{key:"_limit",get:function(){return this.hasLimitValue?this.limitValue:20}}]),t}(b);De.targets=["showMore"],De.values={limit:Number,truncated:Boolean};var Ie=function(e){function t(){return e.apply(this,arguments)||this}m(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}(we);Ie.values={target:String,insert:String,immediate:Boolean};var xe=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._timeoutHandle=null,t}m(t,e);var n=t.prototype;return n.initialize=function(){this._timeout=this._timeout.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._timeoutHandle=window.setTimeout(e._timeout,1e3*e.secondsValue)})},n.disconnect=function(){this._timeoutHandle&&window.clearTimeout(this._timeoutHandle)},n._timeout=function(){this.dispatch(this.el,"timeout")},t}(b);xe.values={seconds:Number};var Me=function(e){function t(){return e.apply(this,arguments)||this}m(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({},L,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=C("click:outside",e,s),n=T(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 Ne(e){return"TURBO-FRAME"==e.nodeName}Me.targets=["toggle"],Me.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var Oe=function(e){function t(){return e.apply(this,arguments)||this}m(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(Ne(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(B(e))return e.href;throw new Error("No link given to drive frame to")},t}(b);Oe.values={frameId:String,src:String,loadingMessage:String};var He=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._timeoutHandle=null,t}m(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(!Ne(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);He.values={interval:Number,poll:Boolean};var ze=function(e){function t(){return e.apply(this,arguments)||this}m(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);ze.targets=["input","output"],ze.values={min:Number,max:Number},ze.classes=["error"],e.AnchorSpyController=y,e.AppearanceController=_,e.AsyncBlockController=E,e.AutoSubmitFormController=w,e.AutosizeController=H,e.CharCountController=z,e.CheckboxSelectAllController=F,e.ClipboardController=R,e.ConfirmController=U,e.ConfirmNavigationController=J,e.DebugController=Y,e.DetectDirtyController=G,e.DetectDirtyFormController=K,e.DisableInputsController=Q,e.DisableWithController=X,e.DismissableController=Z,e.ElementSaveController=ee,e.EmptyDomController=te,e.EnableInputsController=ne,e.FallbackImageController=ie,e.FormRcController=re,e.FormSaveController=se,e.IntersectionController=oe,e.IntervalController=ae,e.LazyBlockController=ce,e.LightboxImageController=fe,e.LimitedSelectionCheckboxesController=me,e.MediaPlayerController=pe,e.NestedFormController=ve,e.PasswordConfirmController=ge,e.PasswordPeekController=be,e.RemoteFormController=ye,e.ResponsiveIframeBodyController=Ee,e.ResponsiveIframeWrapperController=_e,e.ScrollIntoFocusController=ke,e.ScrollToBottomController=Ce,e.ScrollToController=Te,e.ScrollToTopController=Ve,e.SelfDestructController=Se,e.StickyController=Le,e.TableSortController=Ae,e.TableTruncateController=De,e.TeleportController=Ie,e.TimeoutController=xe,e.ToggleClassController=Me,e.TurboFrameRCController=Oe,e.TurboFrameRefreshController=He,e.WordCountController=ze}); +!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(p(n),{get:function(e,t){var i=Reflect.get(e,t),r=p(n);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 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}})||p(n)}m(t,e);var n=t.prototype;return n.metaValue=function(e){var t=document.head.querySelector('meta[name="'+e+'"]');return(null==t?void 0:t.getAttribute("content"))||null},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);this.logEvent(t,r,e),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()}},n.logEvent=function(e,t,n){if(this.application.debug){var i=console;i.groupCollapsed("%c"+this.identifier+" %c"+e+"%c","color: #3B82F6","color: #0be000","color: unset"),i.log({element:n}),i.groupEnd()}},d(t,[{key:"el",get:function(){return this.element}},{key:"isTurboPreview",get:function(){return document.documentElement.hasAttribute("data-turbo-preview")||document.documentElement.hasAttribute("data-turbolinks-preview")}},{key:"isTurbolinksPreview",get:function(){return this.isTurboPreview}},{key:"csrfToken",get:function(){return this.metaValue("csrf-token")}}]),t}(t.Controller),y=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.initialize=function(){this._checkAnchor=this._checkAnchor.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._checkAnchor(),window.addEventListener("hashchange",e._checkAnchor)})},n.disconnect=function(){window.removeEventListener("hashchange",this._checkAnchor)},n.write=function(e){null==e||e.preventDefault(),this._anchor=this._key},n._checkAnchor=function(){this.dispatch(this.el,this._key===this._anchor?"anchor-spy:active":"anchor-spy:inactive")},d(t,[{key:"_key",get:function(){return this.keyValue.replaceAll("#","")}},{key:"_anchor",get:function(){return window.location.hash.substr(1)},set:function(e){window.location.hash=e}}]),t}(b);y.values={key:String};var _=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.initialize=function(){this._handleVisibility=this._handleVisibility.bind(this)},n.connect=function(){var e=this;window.addEventListener("focus",this._handleVisibility),window.addEventListener("blur",this._handleVisibility),document.addEventListener("visibilitychange",this._handleVisibility),requestAnimationFrame(function(){e._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}m(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}m(t,e);var n=t.prototype;return n.initialize=function(){this.submit=this.submit.bind(this)},n.connect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.addEventListener("change",e.submit)})},n.disconnect=function(){var e=this;this.el.querySelectorAll("input, select, textarea").forEach(function(t){return t.removeEventListener("change",e.submit)})},n.submit=function(){this.dispatch(this.el,"submit")},t}(b);const k=(e,t)=>{const n=e[t];return"function"==typeof n?n:(...e)=>{}},C=(e,t,n)=>{let i=e;return!0===n?i=`${t.identifier}:${e}`:"string"==typeof n&&(i=`${n}:${e}`),i},T=(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},S=(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,k(e,"appear").call(e,t),n){const n=C("appear",e,i),s=T(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s):e.isVisible&&(t=>{if(e.isVisible=!1,k(e,"disappear").call(e,t),n){const n=C("disappear",e,i),s=T(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]},L={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},A={debug:!1,logger:console};class D{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:A.debug,this.logger=null!==(r=null==t?void 0:t.logger)&&void 0!==r?r:A.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 D{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=()=>{k(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{k(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 x extends D{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=>{k(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,t={})=>{const n=new x(e,t);return[n.observe,n.unobserve]},N=e=>{const t=t=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:t};k(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 H=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var e=this;N(this),requestAnimationFrame(function(){e._handler();var t=e.el;t.style.resize="none",t.style.boxSizing="border-box",t.addEventListener("input",e._handler),t.addEventListener("focus",e._handler)})},n.disconnect=function(){this.el.removeEventListener("input",this._handler),this.el.removeEventListener("focus",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),z=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.initialize=function(){this._updateCharCount=this._updateCharCount.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e.inputTarget.addEventListener("input",e._updateCharCount),e._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);z.targets=["input","output"],z.values={min:Number,max:Number},z.classes=["error"];var F=function(e){function t(){return e.apply(this,arguments)||this}m(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&&t0&&(P(r)&&"checkbox"==r.type?n[this._formIdentifier][r.name]=r.checked:P(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);se.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var oe=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.connect=function(){S(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);oe.values={threshold:String};var ae=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._intervalHandle=null,t}m(t,e);var n=t.prototype;return n.initialize=function(){this._interval=this._interval.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._intervalHandle=window.setInterval(e._interval,1e3*e.secondsValue)})},n.disconnect=function(){this._intervalHandle&&window.clearInterval(this._intervalHandle)},n._interval=function(){this.dispatch(this.el,"interval:action")},t}(b);ae.values={seconds:Number};var le,ce=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.connect=function(){if("IntersectionObserver"in window){var e=S(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),ue=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&&!he)return Promise.resolve(function(){try{return Promise.resolve(import("smoothscroll-polyfill")).then(function(e){le||(le=!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)}},he="scrollBehavior"in document.documentElement.style;function de(e){if(!e)return null;var t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:de(e.parentElement)||document.body}var fe=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._dialog=null,t}m(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(),ue(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,ue(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);fe.values={src:String,srcSet:String,sizes:String},fe.classes=["modal","image"];var me=function(e){function t(){return e.apply(this,arguments)||this}m(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);me.targets=["input","error"],me.values={max:Number,message:String};var pe=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.initialize=function(){},n.connect=function(){},n.disconnect=function(){},n.play=function(e){try{return null==e||e.preventDefault(),Promise.resolve(this.mediaTarget.play()).then(function(){})}catch(e){return Promise.reject(e)}},n.pause=function(e){null==e||e.preventDefault(),this.mediaTarget.pause()},n.restart=function(e){null==e||e.preventDefault(),this.mediaTarget.currentTime=0},n.seek=function(e){null==e||e.preventDefault(),this.mediaTarget.currentTime+=5},t}(b);pe.targets=["media"];var ve=function(e){function t(){return e.apply(this,arguments)||this}m(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);ve.targets=["target","template"],ve.values={insertMode:String,wrapperClass:String};var ge=function(e){function t(){return e.apply(this,arguments)||this}m(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);ge.targets=["password"],ge.classes=["error"];var be=function(e){function t(){return e.apply(this,arguments)||this}m(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);be.targets=["password"];var ye=function(e){function t(){return e.apply(this,arguments)||this}return m(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);ye.targets=[],ye.values={selector:String};var _e=function(e){function t(){return e.apply(this,arguments)||this}m(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),Ee=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.connect=function(){var e,t,n;window.self!==window.top&&(N(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);Ee.debounces=["postUpdate"];var we=function(e){function t(){return e.apply(this,arguments)||this}m(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),ke=function(e){function t(){return e.apply(this,arguments)||this}return m(t,e),t.prototype.connect=function(){var e=this;requestAnimationFrame(function(){ue(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}(we);ke.values={behavior:String,block:String,inline:String};var Ce=function(e){function t(){return e.apply(this,arguments)||this}return m(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:de(this.el))&&ue(t,{behavior:"smooth",block:"end"}).catch(function(){return t.scrollIntoView(!1)})},t}(b);Ce.values={mode:String};var Te=function(e){function t(){return e.apply(this,arguments)||this}return m(t,e),t.prototype.scroll=function(){var e=document.querySelector(this.selectorValue);e?ue(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);Te.values={selector:String,behavior:String,block:String,inline:String};var Ve=function(e){function t(){return e.apply(this,arguments)||this}return m(t,e),t.prototype.scroll=function(e){var t;null==e||e.preventDefault(),null!=(t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:de(this.el))&&ue(t,{behavior:"smooth",block:"start"}).catch(function(){return t.scrollIntoView(!1)})},t}(b);Ve.values={mode:String};var Se=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._timeout=null,t}m(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);Se.values={seconds:Number};var Le=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._magicElement=null,t}m(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);Le.classes=["stuck"],Le.values={mode:String};var Ae=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._lastIndex=null,t._reverse=!1,t}m(t,e);var n=t.prototype;return n.initialize=function(){this.sort=this.sort.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._tableHeaders.forEach(function(t){return t.addEventListener("click",e.sort)}),e.hasStartSortValue&&e._sortByColumn(e.startSortValue)})},n.disconnect=function(){var e=this;this._tableHeaders.forEach(function(t){return t.removeEventListener("click",e.sort)})},n.sort=function(e){e.preventDefault();var t=this._indexOfHeaderCell(e.target);this._sortByColumn(t)},n._indexOfHeaderCell=function(e){return this._tableHeaders.indexOf(e)},n._sortByColumn=function(e){var t=this;this._reverse=e===this._lastIndex&&!this._reverse;var n=document.createDocumentFragment();this._tableRows.sort(function(n,i){var r,s,o=Array.from(n.cells),a=Array.from(i.cells),l=(null==(r=o[e])?void 0:r.innerText)||"",c=(null==(s=a[e])?void 0:s.innerText)||"",u=l.localeCompare(c,"en",{sensitivity:"base",numeric:!0,caseFirst:"upper"});return n.dataset.sortTop||i.dataset.sortBottom?n.dataset.sortTop&&i.dataset.sortTop?u:-1:n.dataset.sortBottom||i.dataset.sortTop?n.dataset.sortBottom&&i.dataset.sortBottom?u:1:t._reverse?u>0?-1:1:u}).forEach(function(e){return n.appendChild(e)}),this._tableBody.innerHTML="",this._tableBody.appendChild(n),this._lastIndex=e},d(t,[{key:"_tableHead",get:function(){var e=this.el.tHead;if(null==e)throw new Error("Expected table to have a element.");return e}},{key:"_tableHeaders",get:function(){var e=this._tableHead.rows;if(0==e.length)throw new Error("Expected table to have a element with at least one row.");return Array.from(e[0].cells)}},{key:"_tableBody",get:function(){return this.el.tBodies[0]}},{key:"_tableRows",get:function(){return Array.from(this._tableBody.rows)}}]),t}(b);Ae.values={startSort:Number};var De=function(e){function t(){return e.apply(this,arguments)||this}m(t,e);var n=t.prototype;return n.initialize=function(){this.truncate=this.truncate.bind(this),this.expand=this.expand.bind(this)},n.connect=function(){var e=this;M(this,{childList:!0,element:this._tableBody}),requestAnimationFrame(function(){e.truncate(),e.showMoreTarget.addEventListener("click",e.expand)})},n.truncate=function(e){var t=this;null==e||e.preventDefault(),this._truncated=!0,this._tableRows.length>=this._limit?(this._tableRows.slice(this._limit).forEach(function(e){e!==t.showMoreTarget&&t._hideElement(e)}),this._showElement(this.showMoreTarget)):this._hideElement(this.showMoreTarget)},n.expand=function(e){var t=this;this._truncated=!1,null==e||e.preventDefault(),this._tableRows.slice(this._limit).forEach(function(e){e!==t.showMoreTarget&&t._showElement(e)}),this._hideElement(this.showMoreTarget)},n.mutate=function(e){this._truncated&&this._reTruncate()},n._showElement=function(e){e.style.display=""},n._hideElement=function(e){e.style.display="none"},n._reTruncate=function(){var e=this;this._tableRows.slice(0,this._limit).forEach(function(t){t!==e.showMoreTarget&&e._showElement(t)}),this._tableRows.slice(this._limit).forEach(function(t){t!==e.showMoreTarget&&e._hideElement(t)}),this._showElement(this.showMoreTarget)},d(t,[{key:"_truncated",get:function(){return!!this.hasTruncatedValue&&this.truncatedValue},set:function(e){this.truncatedValue=e}},{key:"_tableBody",get:function(){return this.el.tBodies[0]}},{key:"_tableRows",get:function(){return Array.from(this._tableBody.rows)}},{key:"_limit",get:function(){return this.hasLimitValue?this.limitValue:20}}]),t}(b);De.targets=["showMore"],De.values={limit:Number,truncated:Boolean};var Ie=function(e){function t(){return e.apply(this,arguments)||this}m(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}(we);Ie.values={target:String,insert:String,immediate:Boolean};var xe=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._timeoutHandle=null,t}m(t,e);var n=t.prototype;return n.initialize=function(){this._timeout=this._timeout.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e._timeoutHandle=window.setTimeout(e._timeout,1e3*e.secondsValue)})},n.disconnect=function(){this._timeoutHandle&&window.clearTimeout(this._timeoutHandle)},n._timeout=function(){this.dispatch(this.el,"timeout")},t}(b);xe.values={seconds:Number};var Me=function(e){function t(){return e.apply(this,arguments)||this}m(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({},L,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=C("click:outside",e,s),n=T(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 Ne(e){return"TURBO-FRAME"==e.nodeName}Me.targets=["toggle"],Me.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var Oe=function(e){function t(){return e.apply(this,arguments)||this}m(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(Ne(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(B(e))return e.href;throw new Error("No link given to drive frame to")},t}(b);Oe.values={frameId:String,src:String,loadingMessage:String};var He=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._timeoutHandle=null,t}m(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(!Ne(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);He.values={interval:Number,poll:Boolean};var ze=function(e){function t(){return e.apply(this,arguments)||this}m(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);ze.targets=["input","output"],ze.values={min:Number,max:Number},ze.classes=["error"],e.AnchorSpyController=y,e.AppearanceController=_,e.AsyncBlockController=E,e.AutoSubmitFormController=w,e.AutosizeController=H,e.BaseController=b,e.CharCountController=z,e.CheckboxSelectAllController=F,e.ClipboardController=R,e.ConfirmController=U,e.ConfirmNavigationController=J,e.DebugController=Y,e.DetectDirtyController=G,e.DetectDirtyFormController=K,e.DisableInputsController=Q,e.DisableWithController=X,e.DismissableController=Z,e.ElementSaveController=ee,e.EmptyDomController=te,e.EnableInputsController=ne,e.FallbackImageController=ie,e.FormRcController=re,e.FormSaveController=se,e.IntersectionController=oe,e.IntervalController=ae,e.LazyBlockController=ce,e.LightboxImageController=fe,e.LimitedSelectionCheckboxesController=me,e.MediaPlayerController=pe,e.NestedFormController=ve,e.PasswordConfirmController=ge,e.PasswordPeekController=be,e.RemoteFormController=ye,e.ResponsiveIframeBodyController=Ee,e.ResponsiveIframeWrapperController=_e,e.ScrollIntoFocusController=ke,e.ScrollToBottomController=Ce,e.ScrollToController=Te,e.ScrollToTopController=Ve,e.SelfDestructController=Se,e.StickyController=Le,e.TableSortController=Ae,e.TableTruncateController=De,e.TeleportController=Ie,e.TimeoutController=xe,e.ToggleClassController=Me,e.TurboFrameRCController=Oe,e.TurboFrameRefreshController=He,e.WordCountController=ze}); //# sourceMappingURL=stimulus-library.umd.js.map diff --git a/dist/stimulus-library.umd.js.map b/dist/stimulus-library.umd.js.map index 34f1fc91..aa7bcca7 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/utilities/base_controller.ts","../src/controllers/anchor_spy_controller.ts","../src/controllers/utility/appearance_controller.ts","../src/controllers/async_block_controller.ts","../src/controllers/forms/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/controllers/forms/autosize_controller.ts","../src/controllers/forms/char_count_controller.ts","../src/controllers/forms/checkbox_select_all_controller.ts","../src/controllers/clipboard_controller.ts","../src/utilities/elements.ts","../src/controllers/confirm_controller.ts","../src/controllers/confirm_navigation_controller.ts","../src/controllers/debug_controller.ts","../src/controllers/forms/detect_dirty_controller.ts","../src/controllers/forms/detect_dirty_form_controller.ts","../src/controllers/forms/disable_inputs_controller.ts","../src/controllers/disable_with_controller.ts","../src/controllers/dismissable_controller.ts","../src/controllers/element_save_controller.ts","../src/controllers/empty_dom_controller.ts","../src/controllers/forms/enable_inputs_controller.ts","../src/controllers/media/fallback_image_controller.ts","../src/controllers/forms/form_rc_controller.ts","../src/controllers/forms/form_save_controller.ts","../src/controllers/utility/intersection_controller.ts","../src/controllers/utility/interval_controller.ts","../src/utilities/scroll.ts","../src/controllers/lazy_block_controller.ts","../src/controllers/media/lightbox_image_controller.ts","../src/controllers/forms/limited_selection_checkboxes_controller.ts","../src/controllers/media/media_player_controller.ts","../src/controllers/forms/nested_form_controller.ts","../src/controllers/forms/password_confirm_controller.ts","../src/controllers/forms/password_peek_controller.ts","../src/controllers/forms/remote_form_controller.ts","../src/controllers/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/controllers/scroll/scroll_into_focus_controller.ts","../src/controllers/scroll/scroll_to_bottom_controller.ts","../src/controllers/scroll/scroll_to_controller.ts","../src/controllers/scroll/scroll_to_top_controller.ts","../src/controllers/self_destruct_controller.ts","../src/controllers/sticky_controller.ts","../src/controllers/tables/table_sort_controller.ts","../src/controllers/tables/table_truncate_controller.ts","../src/controllers/teleport_controller.ts","../src/controllers/utility/timeout_controller.ts","../src/controllers/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/controllers/turbo_frame_rc_controller.ts","../src/controllers/turbo_frame_refresh_controller.ts","../src/controllers/forms/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 this.logEvent(eventName, event, element);\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 logEvent(eventName: string, event: CustomEvent, element: HTMLElement) {\n // @ts-ignore\n if (!this.application.debug) {\n return;\n }\n let logger = console;\n logger.groupCollapsed(`%c${this.identifier} %c${eventName}%c`, \"color: #3B82F6\", \"color: #0be000\", \"color: unset\");\n logger.log({element});\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 \"logEvent\":\n case \"dispatch\":\n case \"data\":\n case \"valueDescriptorMap\":\n case \"mutate\":\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 if (/^.*?Classes$/.test(prop)) {\n return false;\n }\n\n return true;\n}\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class AnchorSpyController extends BaseController {\r\n static values = {key: String};\r\n\r\n declare readonly keyValue: string;\r\n\r\n get _key(): string {\r\n return this.keyValue.replaceAll('#', '');\r\n }\r\n\r\n get _anchor(): string {\r\n return window.location.hash.substr(1);\r\n }\r\n\r\n set _anchor(value: string) {\r\n window.location.hash = value;\r\n }\r\n\r\n initialize() {\r\n this._checkAnchor = this._checkAnchor.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._checkAnchor();\r\n window.addEventListener(\"hashchange\", this._checkAnchor);\r\n });\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"hashchange\", this._checkAnchor);\r\n }\r\n\r\n write(event?: Event) {\r\n event?.preventDefault();\r\n this._anchor = this._key;\r\n }\r\n\r\n private _checkAnchor() {\r\n if (this._key === this._anchor) {\r\n this.dispatch(this.el, \"anchor-spy:active\");\r\n } else {\r\n this.dispatch(this.el, \"anchor-spy:inactive\");\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 requestAnimationFrame(() => {\r\n this._handleVisibility();\r\n });\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 private _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n private _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/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 \"../../utilities/base_controller\";\n\nexport class AutoSubmitFormController extends BaseController {\n\n initialize() {\n this.submit = this.submit.bind(this);\n }\n\n connect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.submit));\n }\n\n disconnect() {\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.submit));\n }\n\n private submit() {\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 \"../../utilities/base_controller\";\n\nexport class AutosizeController extends BaseController {\n\n initialize() {\n this._handler = this._handler.bind(this);\n }\n\n connect() {\n useWindowResize(this);\n requestAnimationFrame(() => {\n this._handler();\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 });\n }\n\n disconnect() {\n this.el.removeEventListener(\"input\", this._handler);\n this.el.removeEventListener(\"focus\", 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 \"../../utilities/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 requestAnimationFrame(() => {\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\n this._updateCharCount();\n });\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 '../../utilities/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 \"../utilities/base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"source\", \"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 '../utilities/base_controller';\nimport {isHTMLAnchorElement, isHTMLFormElement} 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 disconnect() {\n let element = this.el;\n if (isHTMLFormElement(element)) {\n element.removeEventListener(\"submit\", this.confirm);\n } else if (isHTMLAnchorElement(element)) {\n element.removeEventListener(\"click\", this.confirm);\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 \"../utilities/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.allowSubmit = this.allowSubmit.bind(this);\n this.confirmNavigation = this.confirmNavigation.bind(this);\n this.confirmTurboNavigation = this.confirmTurboNavigation.bind(this);\n }\n\n connect() {\n window.onbeforeunload = () => this._message;\n window.addEventListener(\"popstate\", this.confirmNavigation);\n window.addEventListener(\"submit\", this.allowSubmit);\n window.addEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\n window.addEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\n }\n\n disconnect() {\n window.removeEventListener(\"popstate\", this.confirmNavigation);\n window.onbeforeunload = null;\n window.removeEventListener(\"submit\", this.allowSubmit);\n window.removeEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\n window.removeEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\n }\n\n allowSubmit(_event: Event) {\n window.removeEventListener(\"popstate\", this.confirmNavigation);\n window.onbeforeunload = null;\n }\n\n confirmNavigation(_event: PopStateEvent) {\n return false;\n }\n\n confirmTurboNavigation(event: Event) {\n if (!confirm(this._message)) {\n event.preventDefault();\n }\n }\n\n}\n","import {BaseController} from \"../utilities/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 \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyController extends BaseController {\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._restoreElementFromLoadValue();\r\n }\r\n\r\n private _getElementValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(): boolean {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkDirty() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (this._isElementDirty()) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(): boolean {\r\n return this._getElementValue() !== this._getElementLoadValue();\r\n }\r\n\r\n private _restoreElementFromLoadValue() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (!this._elementHasCachedLoadValue() && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyFormController extends BaseController {\r\n\r\n get _formElements(): Array {\r\n return Array.from(this.el.querySelectorAll('input, select, textarea'));\r\n }\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._formElements.forEach(element => this._restoreElementFromLoadValue(element));\r\n }\r\n\r\n private _getElementValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (this._isElementDirty(element)) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return this._getElementValue(element) !== this._getElementLoadValue(element);\r\n }\r\n\r\n private _cacheElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (!this._elementHasCachedLoadValue(element) && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n\r\n private _restoreElementFromLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n this._formElements.forEach(el => this._cacheElementLoadValue(el));\r\n }\r\n\r\n private _checkDirty(): void {\r\n this._formElements.forEach(el => this._checkElementDirty(el));\r\n if (this._formElements.some(el => isDirty(el))) {\r\n this.el.setAttribute(\"data-dirty\", \"true\");\r\n } else {\r\n this.el.removeAttribute(\"data-dirty\");\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/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 '../utilities/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 \"../utilities/base_controller\";\n\nexport class DismissableController extends BaseController {\n\n dismiss() {\n this.el.remove();\n }\n\n}\n","import {BaseController} from '../utilities/base_controller';\nimport _get from \"lodash-es/get\";\nimport _set from \"lodash-es/set\";\n\nexport class ElementSaveController extends BaseController {\n\n static targets = [\n \"element\",\n ];\n static values = {\n id: String,\n attributes: String,\n restoreOnLoad: Boolean,\n };\n declare readonly hasElementTarget: boolean;\n declare readonly elementTarget: HTMLElement;\n declare readonly elementTargets: HTMLElement[];\n declare readonly idValue: string;\n declare readonly attributesValue: string;\n declare readonly hasIdValue: boolean;\n declare readonly restoreOnLoadValue: boolean;\n declare readonly hasRestoreOnLoadValue: boolean;\n\n get _id() {\n if (this.hasIdValue) {\n return this.idValue;\n }\n let elementID = this.el.id;\n\n if (elementID !== \"\") {\n return elementID;\n } else {\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. `);\n }\n }\n\n get _uniqueIdentifier() {\n const url = location.href;\n return `${url} ${this._id}`;\n }\n\n get _restoreOnLoad() {\n return this.hasRestoreOnLoadValue ? this.restoreOnLoadValue : true;\n }\n\n get _element(): HTMLElement {\n return this.hasElementTarget ? this.elementTarget : this.el;\n }\n\n connect() {\n requestAnimationFrame(() => {\n if (this._restoreOnLoad) {\n this.restore();\n }\n });\n }\n\n clear(event?: Event) {\n if (event) {\n event.preventDefault();\n }\n localStorage.removeItem(this._uniqueIdentifier);\n this.dispatch(this._element, `element-save:cleared`);\n }\n\n save(event?: Event) {\n if (event) {\n event.preventDefault();\n }\n let element = this._element;\n let attributes = this.attributesValue.split(\" \");\n let data: { [idx: string]: any } = {};\n attributes.forEach((attr: string) => data[attr] = _get(element, attr));\n localStorage.setItem(this._uniqueIdentifier, JSON.stringify(data));\n this.dispatch(element, `element-save:save:success`);\n }\n\n restore(event?: Event) {\n if (event) {\n event.preventDefault();\n }\n let element = this._element;\n if (localStorage.getItem(this._uniqueIdentifier)) {\n const savedData = JSON.parse(localStorage.getItem(this._uniqueIdentifier)!); // get and parse the saved data from localStorage\n Object.keys(savedData).forEach((attr: string) => {\n _set(element as HTMLElement, attr, savedData[attr]);\n });\n this.dispatch(element, `element-save:restore:success`);\n } else {\n this.dispatch(element, `element-save:restore:empty`);\n }\n }\n\n}\n","import {useMutation} from \"stimulus-use\";\nimport {BaseController} from \"../utilities/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 \"../../utilities/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 \"../../utilities/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 '../../utilities/base_controller';\r\n\r\nexport class FormRcController extends BaseController {\r\n\r\n static targets = [\"form\"];\r\n\r\n declare readonly formTarget: HTMLFormElement;\r\n\r\n submit(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"submit\");\r\n this.formTarget.submit();\r\n }\r\n\r\n reset(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"reset\");\r\n this.formTarget.reset();\r\n }\r\n\r\n}","import {BaseController} from '../../utilities/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 \"../../utilities/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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class IntervalController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _intervalHandle: null | number = null;\r\n\r\n initialize() {\r\n this._interval = this._interval.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._intervalHandle = window.setInterval(this._interval, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._intervalHandle) {\r\n window.clearInterval(this._intervalHandle);\r\n }\r\n }\r\n\r\n _interval() {\r\n this.dispatch(this.el, \"interval:action\");\r\n }\r\n\r\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 \"../../utilities/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 \"../../utilities/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 \"../../utilities/base_controller\";\r\n\r\nexport class MediaPlayerController extends BaseController {\r\n\r\n static targets = [\"media\"];\r\n\r\n declare readonly mediaTarget: HTMLMediaElement;\r\n\r\n initialize() {\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n disconnect() {\r\n }\r\n\r\n async play(event?: Event) {\r\n event?.preventDefault();\r\n await this.mediaTarget.play();\r\n }\r\n\r\n pause(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.pause();\r\n }\r\n\r\n restart(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime = 0;\r\n }\r\n\r\n seek(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime += 5;\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 private _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 \"../../utilities/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 \"../../utilities/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 \"../../utilities/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 \"../utilities/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 \"../../utilities/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 \"../../utilities/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 \"../../utilities/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 \"../utilities/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 \"../utilities/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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableSortController extends BaseController {\r\n\r\n static values = {startSort: Number};\r\n\r\n declare readonly startSortValue: number;\r\n declare readonly hasStartSortValue: boolean;\r\n _lastIndex: number | null = null;\r\n _reverse: boolean = false;\r\n\r\n get _tableHead(): HTMLTableSectionElement {\r\n let head = (this.el as HTMLTableElement).tHead;\r\n if (head == null) {\r\n throw new Error('Expected table to have a element.');\r\n }\r\n return head;\r\n }\r\n\r\n get _tableHeaders(): HTMLTableHeaderCellElement[] {\r\n let rows = this._tableHead.rows;\r\n if (rows.length == 0) {\r\n throw new Error('Expected table to have a element with at least one row.');\r\n }\r\n return Array.from(rows[0].cells);\r\n }\r\n\r\n get _tableBody() {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n initialize() {\r\n this.sort = this.sort.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._tableHeaders.forEach(cell => cell.addEventListener(\"click\", this.sort));\r\n if (this.hasStartSortValue) {\r\n this._sortByColumn(this.startSortValue);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n this._tableHeaders.forEach(cell => cell.removeEventListener(\"click\", this.sort));\r\n }\r\n\r\n sort(event: Event) {\r\n event.preventDefault();\r\n let headerCell = event.target! as HTMLTableHeaderCellElement;\r\n let headerCellIndex = this._indexOfHeaderCell(headerCell);\r\n this._sortByColumn(headerCellIndex);\r\n }\r\n\r\n private _indexOfHeaderCell(cell: HTMLTableHeaderCellElement) {\r\n return this._tableHeaders.indexOf(cell);\r\n }\r\n\r\n private _sortByColumn(index: number) {\r\n this._reverse = index === this._lastIndex && !this._reverse;\r\n let frag = document.createDocumentFragment();\r\n let rows = this._tableRows;\r\n\r\n let newRows = rows.sort((row, otherRow) => {\r\n let cells = Array.from(row.cells);\r\n let otherCells = Array.from(otherRow.cells);\r\n\r\n // TODO: Handle colspans?\r\n let x = cells[index]?.innerText || \"\";\r\n let y = otherCells[index]?.innerText || \"\";\r\n\r\n let sortVal = x.localeCompare(y, \"en\", {sensitivity: \"base\", numeric: true, caseFirst: \"upper\"});\r\n\r\n if (row.dataset.sortTop || otherRow.dataset.sortBottom) {\r\n if (row.dataset.sortTop && otherRow.dataset.sortTop) {\r\n return sortVal;\r\n }\r\n return -1;\r\n }\r\n if (row.dataset.sortBottom || otherRow.dataset.sortTop) {\r\n if (row.dataset.sortBottom && otherRow.dataset.sortBottom) {\r\n return sortVal;\r\n }\r\n return 1;\r\n }\r\n\r\n if (this._reverse) {\r\n return sortVal > 0 ? -1 : 1;\r\n }\r\n return sortVal;\r\n });\r\n\r\n newRows.forEach(row => frag.appendChild(row));\r\n\r\n this._tableBody.innerHTML = \"\";\r\n this._tableBody.appendChild(frag);\r\n this._lastIndex = index;\r\n }\r\n\r\n}","import {useMutation} from \"stimulus-use\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableTruncateController extends BaseController {\r\n\r\n static targets = [\"showMore\"];\r\n static values = {\r\n limit: Number,\r\n truncated: Boolean,\r\n };\r\n\r\n declare readonly showMoreTarget: HTMLElement;\r\n declare limitValue: number;\r\n declare readonly hasLimitValue: boolean;\r\n declare truncatedValue: boolean;\r\n declare readonly hasTruncatedValue: boolean;\r\n\r\n get _truncated(): boolean {\r\n return this.hasTruncatedValue ? this.truncatedValue : false;\r\n }\r\n\r\n set _truncated(value) {\r\n this.truncatedValue = value;\r\n }\r\n\r\n get _tableBody(): HTMLTableSectionElement {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n get _limit(): number {\r\n return this.hasLimitValue ? this.limitValue : 20;\r\n }\r\n\r\n initialize() {\r\n this.truncate = this.truncate.bind(this);\r\n this.expand = this.expand.bind(this);\r\n }\r\n\r\n connect() {\r\n useMutation(this, {childList: true, element: this._tableBody});\r\n\r\n requestAnimationFrame(() => {\r\n this.truncate();\r\n this.showMoreTarget.addEventListener(\"click\", this.expand);\r\n });\r\n }\r\n\r\n truncate(event?: Event) {\r\n event?.preventDefault();\r\n this._truncated = true;\r\n if (this._tableRows.length >= this._limit) {\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\r\n } else {\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n }\r\n\r\n expand(event?: Event) {\r\n this._truncated = false;\r\n event?.preventDefault();\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n\r\n mutate(entries: MutationRecord[]) {\r\n if (this._truncated) {\r\n this._reTruncate();\r\n }\r\n }\r\n\r\n private _showElement(el: HTMLElement): void {\r\n el.style.display = \"\";\r\n }\r\n\r\n private _hideElement(el: HTMLElement): void {\r\n el.style.display = \"none\";\r\n }\r\n\r\n private _reTruncate() {\r\n this._tableRows.slice(0, this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TimeoutController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _timeoutHandle: null | number = null;\r\n\r\n initialize() {\r\n this._timeout = this._timeout.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._timeoutHandle = window.setTimeout(this._timeout, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n window.clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n _timeout() {\r\n this.dispatch(this.el, \"timeout\");\r\n }\r\n\r\n}","import {useClickOutside, useHover} from \"stimulus-use\";\nimport {BaseController} from \"../utilities/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 \"../utilities/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 \"../utilities/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 \"../../utilities/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 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"],"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","this","logEvent","dispatchEvent","functionName","application","debug","logger","console","groupCollapsed","identifier","groupEnd","Controller","AnchorSpyController","initialize","_checkAnchor","bind","connect","requestAnimationFrame","window","addEventListener","disconnect","removeEventListener","write","preventDefault","_anchor","_key","el","keyValue","replaceAll","location","hash","substr","value","key","String","AppearanceController","_handleVisibility","document","appear","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","errorMessage","selector","AutoSubmitFormController","submit","forEach","_this2","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","useMutation","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","_toggle","_refresh","hasSelectAllTarget","selectAllTarget","checkboxTargets","checkbox","checked","checkboxesCount","checkboxesCheckedCount","_checked","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","message","ConfirmNavigationController","allowSubmit","confirmNavigation","confirmTurboNavigation","onbeforeunload","_event","_messageValue","DebugController","testTargets","DetectDirtyController","_checkDirty","_cacheLoadValues","restore","_restoreElementFromLoadValue","_getElementValue","_getElementLoadValue","getAttribute","_cacheAttrName","defaultChecked","Array","from","option","defaultSelected","_elementHasCachedLoadValue","hasAttribute","_isElementDirty","setAttribute","removeAttribute","cacheValue","defaultValue","DetectDirtyFormController","_formElements","_checkElementDirty","_cacheElementLoadValue","_this3","some","DisableInputsController","toggle","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","href","_id","hasRestoreOnLoadValue","restoreOnLoadValue","hasElementTarget","elementTarget","restoreOnLoad","EmptyDomController","childList","checkEmpty","mutate","_children","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","emptyClasses","hasNotEmptyClass","notEmptyClasses","emptyClass","notEmptyClass","hasScopeSelectorValue","scopeSelectorValue","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormRcController","formTarget","reset","FormSaveController","_clear","_clearOnSubmit","_formIdentifier","_formData","_formID","elements","hasClearOnSubmitValue","clearOnSubmitValue","clearOnSubmit","IntersectionController","threshold","_threshold","disappear","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","IntervalController","_interval","_intervalHandle","setInterval","secondsValue","clearInterval","seconds","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","_src","srcset","_srcSet","sizes","_sizes","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","_modalClassName","showModal","hasSrcValue","srcValue","hasSrcSetValue","srcSetValue","hasSizesValue","sizesValue","hasModalClass","modalClass","hasImageClass","imageClass","srcSet","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","MediaPlayerController","play","mediaTarget","pause","restart","currentTime","seek","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","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","_selector","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","constructor","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","RegExp","substringIdentifierValueRegex","camelCase","action","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","StickyController","createMagicElement","_magicElement","_mode","intersectionRatio","hasStuckClass","stuckClass","TableSortController","sort","_tableHeaders","cell","hasStartSortValue","_sortByColumn","startSortValue","headerCellIndex","_indexOfHeaderCell","index","_reverse","_lastIndex","frag","createDocumentFragment","_tableRows","row","otherRow","cells","otherCells","x","y","sortVal","localeCompare","sensitivity","numeric","caseFirst","sortTop","sortBottom","_this4","_tableBody","head","tHead","rows","_tableHead","tBodies","startSort","TableTruncateController","truncate","expand","showMoreTarget","_truncated","_limit","_hideElement","_showElement","_reTruncate","hasTruncatedValue","truncatedValue","hasLimitValue","limitValue","limit","truncated","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","TimeoutController","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","_this5","toggled","classValue","klass","isTurboFrame","class","clickAway","initial","TurboFrameRCController","frameSrc","_getFrame","_getSrc","_setSrc","setSrc","frame","hasLoadingMessageValue","loadingMessageValue","getElementById","frameIdValue","frameId","loadingMessage","TurboFrameRefreshController","refresh","_poll","intervalValue","hasPollValue","pollValue","interval","poll","WordCountController","updateWordCount","wordCount","matches","match"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"stimulus-library.umd.js","sources":["../src/utilities/base_controller.ts","../src/controllers/anchor_spy_controller.ts","../src/controllers/utility/appearance_controller.ts","../src/controllers/async_block_controller.ts","../src/controllers/forms/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/controllers/forms/autosize_controller.ts","../src/controllers/forms/char_count_controller.ts","../src/controllers/forms/checkbox_select_all_controller.ts","../src/controllers/clipboard_controller.ts","../src/utilities/elements.ts","../src/controllers/confirm_controller.ts","../src/controllers/confirm_navigation_controller.ts","../src/controllers/debug_controller.ts","../src/controllers/forms/detect_dirty_controller.ts","../src/controllers/forms/detect_dirty_form_controller.ts","../src/controllers/forms/disable_inputs_controller.ts","../src/controllers/disable_with_controller.ts","../src/controllers/dismissable_controller.ts","../src/controllers/element_save_controller.ts","../src/controllers/empty_dom_controller.ts","../src/controllers/forms/enable_inputs_controller.ts","../src/controllers/media/fallback_image_controller.ts","../src/controllers/forms/form_rc_controller.ts","../src/controllers/forms/form_save_controller.ts","../src/controllers/utility/intersection_controller.ts","../src/controllers/utility/interval_controller.ts","../src/utilities/scroll.ts","../src/controllers/lazy_block_controller.ts","../src/controllers/media/lightbox_image_controller.ts","../src/controllers/forms/limited_selection_checkboxes_controller.ts","../src/controllers/media/media_player_controller.ts","../src/controllers/forms/nested_form_controller.ts","../src/controllers/forms/password_confirm_controller.ts","../src/controllers/forms/password_peek_controller.ts","../src/controllers/forms/remote_form_controller.ts","../src/controllers/responsive_iframe_controller.ts","../src/utilities/ephemeral_controller.ts","../src/controllers/scroll/scroll_into_focus_controller.ts","../src/controllers/scroll/scroll_to_bottom_controller.ts","../src/controllers/scroll/scroll_to_controller.ts","../src/controllers/scroll/scroll_to_top_controller.ts","../src/controllers/self_destruct_controller.ts","../src/controllers/sticky_controller.ts","../src/controllers/tables/table_sort_controller.ts","../src/controllers/tables/table_truncate_controller.ts","../src/controllers/teleport_controller.ts","../src/controllers/utility/timeout_controller.ts","../src/controllers/toggle_class_controller.ts","../src/utilities/turbo.ts","../src/controllers/turbo_frame_rc_controller.ts","../src/controllers/turbo_frame_refresh_controller.ts","../src/controllers/forms/word_count_controller.ts"],"sourcesContent":["import {Context, Controller} from \"stimulus\";\r\n\r\nexport class BaseController extends Controller {\r\n\r\n constructor(context: Context) {\r\n super(context);\r\n return new Proxy(this, {\r\n get: (obj, prop) => {\r\n let returnVal = Reflect.get(obj, prop);\r\n let self = this;\r\n if (logProperty(prop.toString())) {\r\n if (typeof returnVal == \"function\") {\r\n return new Proxy(returnVal, {\r\n apply(target: any, thisArg: any, argArray?: any): any {\r\n self.log(prop.toString(), {\r\n args: argArray,\r\n });\r\n return Reflect.apply(target, thisArg, argArray);\r\n },\r\n });\r\n } else {\r\n this.log(prop.toString());\r\n }\r\n }\r\n return returnVal;\r\n },\r\n });\r\n }\r\n\r\n get el(): HTMLElement {\r\n return this.element as HTMLElement;\r\n }\r\n\r\n get isTurboPreview(): boolean {\r\n return document.documentElement.hasAttribute('data-turbo-preview') || document.documentElement.hasAttribute('data-turbolinks-preview');\r\n }\r\n\r\n get isTurbolinksPreview(): boolean {\r\n return this.isTurboPreview;\r\n }\r\n\r\n get csrfToken(): string | null {\r\n return this.metaValue('csrf-token');\r\n }\r\n\r\n metaValue(name: string): string | null {\r\n const element = document.head.querySelector(`meta[name=\"${name}\"]`);\r\n return element?.getAttribute('content') || null;\r\n }\r\n\r\n dispatch(element: HTMLElement, eventName: string, options: CustomEventInit = {}) {\r\n let mergedOptions = Object.assign({}, {bubbles: true, cancelable: true, detail: {target: element}}, options);\r\n if (!!mergedOptions.detail.target) {\r\n mergedOptions.detail.target = element;\r\n }\r\n let event = new CustomEvent(eventName, mergedOptions);\r\n this.logEvent(eventName, event, element);\r\n element.dispatchEvent(event);\r\n }\r\n\r\n log(functionName: string, args: {} = {}): void {\r\n // @ts-ignore\r\n if (!this.application.debug) {\r\n return;\r\n }\r\n let logger = console;\r\n logger.groupCollapsed(`%c${this.identifier} %c#${functionName}`, \"color: #3B82F6\", \"color: unset\");\r\n logger.log({\r\n element: this.element,\r\n ...args,\r\n });\r\n logger.groupEnd();\r\n }\r\n\r\n logEvent(eventName: string, event: CustomEvent, element: HTMLElement) {\r\n // @ts-ignore\r\n if (!this.application.debug) {\r\n return;\r\n }\r\n let logger = console;\r\n logger.groupCollapsed(`%c${this.identifier} %c${eventName}%c`, \"color: #3B82F6\", \"color: #0be000\", \"color: unset\");\r\n logger.log({element});\r\n logger.groupEnd();\r\n }\r\n\r\n}\r\n\r\nfunction logProperty(prop: string): boolean {\r\n switch (prop) {\r\n case \"application\":\r\n case \"el\":\r\n case \"element\":\r\n case \"constructor\":\r\n case \"initialize\":\r\n case \"log\":\r\n case \"logEvent\":\r\n case \"dispatch\":\r\n case \"data\":\r\n case \"valueDescriptorMap\":\r\n case \"mutate\":\r\n case \"identifier\":\r\n return false;\r\n }\r\n\r\n if (/^_.*?$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Target(s)?$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Value$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?ValueChanged$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Class$/.test(prop)) {\r\n return false;\r\n }\r\n if (/^.*?Classes$/.test(prop)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class AnchorSpyController extends BaseController {\r\n static values = {key: String};\r\n\r\n declare readonly keyValue: string;\r\n\r\n get _key(): string {\r\n return this.keyValue.replaceAll('#', '');\r\n }\r\n\r\n get _anchor(): string {\r\n return window.location.hash.substr(1);\r\n }\r\n\r\n set _anchor(value: string) {\r\n window.location.hash = value;\r\n }\r\n\r\n initialize() {\r\n this._checkAnchor = this._checkAnchor.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._checkAnchor();\r\n window.addEventListener(\"hashchange\", this._checkAnchor);\r\n });\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"hashchange\", this._checkAnchor);\r\n }\r\n\r\n write(event?: Event) {\r\n event?.preventDefault();\r\n this._anchor = this._key;\r\n }\r\n\r\n private _checkAnchor() {\r\n if (this._key === this._anchor) {\r\n this.dispatch(this.el, \"anchor-spy:active\");\r\n } else {\r\n this.dispatch(this.el, \"anchor-spy:inactive\");\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 requestAnimationFrame(() => {\r\n this._handleVisibility();\r\n });\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 private _handleVisibility() {\r\n this._documentIsActive() ? this.appear() : this.away();\r\n }\r\n\r\n private _documentIsActive() {\r\n return document.visibilityState == \"visible\" && document.hasFocus();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class AsyncBlockController extends BaseController {\r\n static targets = [\"replace\"];\r\n static values = {endpoint: String, errorMessage: String, selector: String};\r\n\r\n declare readonly replaceTarget: HTMLElement;\r\n declare readonly hasReplaceTarget: boolean;\r\n declare readonly endpointValue: string;\r\n\r\n declare readonly hasSelectorValue: boolean;\r\n declare readonly selectorValue: string;\r\n\r\n declare readonly hasErrorMessageValue: boolean;\r\n declare readonly errorMessageValue: string;\r\n\r\n get _errorMessage(): string {\r\n return this.hasErrorMessageValue ? this.errorMessageValue : \"This content failed to load\";\r\n }\r\n\r\n // This is a simple controller to load a block of content when the page loads.\r\n // It should be used to give a quick initial response before calling out to an\r\n // an AJAX endpoint to do some expensive work.\r\n connect() {\r\n this.loadContent();\r\n }\r\n\r\n loadContent() {\r\n let self = this;\r\n let el = this.hasReplaceTarget ? this.replaceTarget : this.el;\r\n fetch(this.endpointValue)\r\n .then((response) => response.text())\r\n .then((html) => {\r\n let newEl = document.createElement(\"div\");\r\n newEl.innerHTML = html;\r\n if (this.hasSelectorValue) {\r\n let selectedContent = newEl.querySelectorAll(this.selectorValue);\r\n el.replaceWith(...selectedContent);\r\n } else {\r\n el.replaceWith(...newEl.children);\r\n }\r\n // Trigger event to show block has loaded\r\n self.dispatch(el, \"ajax:success\");\r\n })\r\n .catch(err => {\r\n el.replaceWith(this._errorMessage);\r\n self.dispatch(el, \"ajax:error\");\r\n })\r\n .finally(() => {\r\n self.dispatch(el, \"ajax:complete\");\r\n });\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class AutoSubmitFormController extends BaseController {\r\n\r\n initialize() {\r\n this.submit = this.submit.bind(this);\r\n }\r\n\r\n connect() {\r\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.addEventListener(\"change\", this.submit));\r\n }\r\n\r\n disconnect() {\r\n this.el.querySelectorAll(\"input, select, textarea\").forEach(el => el.removeEventListener(\"change\", this.submit));\r\n }\r\n\r\n private submit() {\r\n // Trigger synthetic \"submit\" event on form\r\n this.dispatch((this.el), \"submit\");\r\n }\r\n}\r\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\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class AutosizeController extends BaseController {\r\n\r\n initialize() {\r\n this._handler = this._handler.bind(this);\r\n }\r\n\r\n connect() {\r\n useWindowResize(this);\r\n requestAnimationFrame(() => {\r\n this._handler();\r\n let target = this.el as HTMLTextAreaElement;\r\n target.style.resize = \"none\";\r\n target.style.boxSizing = \"border-box\";\r\n target.addEventListener(\"input\", this._handler);\r\n target.addEventListener(\"focus\", this._handler);\r\n });\r\n }\r\n\r\n disconnect() {\r\n this.el.removeEventListener(\"input\", this._handler);\r\n this.el.removeEventListener(\"focus\", this._handler);\r\n }\r\n\r\n windowResize() {\r\n this._handler();\r\n }\r\n\r\n private _handler() {\r\n this.autosize(this.el as HTMLTextAreaElement);\r\n };\r\n\r\n private autosize(element: HTMLTextAreaElement) {\r\n let offset = element.offsetHeight - element.clientHeight;\r\n element.style.height = \"auto\";\r\n element.style.height = element.scrollHeight + offset + \"px\";\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class CharCountController extends BaseController {\r\n\r\n static targets = [\"input\", \"output\"];\r\n static values = {min: Number, max: Number};\r\n static classes = [\"error\"];\r\n\r\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\r\n declare readonly outputTarget: HTMLElement;\r\n declare minValue: number;\r\n declare hasMinValue: boolean;\r\n declare maxValue: number;\r\n declare hasMaxValue: boolean;\r\n declare errorClass: string;\r\n declare hasErrorClass: boolean;\r\n\r\n initialize() {\r\n this._updateCharCount = this._updateCharCount.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this.inputTarget.addEventListener(\"input\", this._updateCharCount);\r\n this._updateCharCount();\r\n });\r\n }\r\n\r\n disconnect() {\r\n this.inputTarget.removeEventListener(\"input\", this._updateCharCount);\r\n }\r\n\r\n private _updateCharCount() {\r\n let charCount = this.inputTarget.value.length;\r\n this.outputTarget.innerText = charCount.toString();\r\n if (this.hasErrorClass) {\r\n if (this._isValidCount(charCount)) {\r\n this.outputTarget.classList.remove(this.errorClass);\r\n } else {\r\n this.outputTarget.classList.add(this.errorClass);\r\n }\r\n }\r\n }\r\n\r\n private _isValidCount(count: number) {\r\n let min = 0;\r\n let max = 99999;\r\n\r\n if (this.hasMinValue) {\r\n min = this.minValue;\r\n }\r\n\r\n if (this.hasMaxValue) {\r\n max = this.maxValue;\r\n }\r\n\r\n return count >= min && count <= max;\r\n }\r\n\r\n}\r\n","import {BaseController} from '../../utilities/base_controller';\r\n\r\nexport class CheckboxSelectAllController extends BaseController {\r\n static targets = ['selectAll', 'checkbox'];\r\n\r\n declare readonly hasSelectAllTarget: boolean;\r\n declare readonly selectAllTarget: HTMLInputElement;\r\n declare readonly checkboxTargets: HTMLInputElement[];\r\n\r\n private get _checked() {\r\n return this.checkboxTargets.filter(checkbox => checkbox.checked);\r\n }\r\n\r\n private get _unchecked() {\r\n return this.checkboxTargets.filter(checkbox => !checkbox.checked);\r\n }\r\n\r\n initialize() {\r\n this._toggle = this._toggle.bind(this);\r\n this._refresh = this._refresh.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n if (!this.hasSelectAllTarget) {\r\n return;\r\n }\r\n\r\n this.selectAllTarget.addEventListener('change', this._toggle);\r\n this.checkboxTargets.forEach(checkbox => checkbox.addEventListener('change', this._refresh));\r\n this._refresh();\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (!this.hasSelectAllTarget) {\r\n return;\r\n }\r\n\r\n this.selectAllTarget.removeEventListener('change', this._toggle);\r\n this.checkboxTargets.forEach((checkbox) => checkbox.removeEventListener('change', this._refresh));\r\n }\r\n\r\n private _toggle(event: Event) {\r\n event.preventDefault();\r\n let target = event.target as HTMLInputElement;\r\n this.checkboxTargets.forEach((checkbox) => checkbox.checked = target.checked);\r\n }\r\n\r\n private _refresh() {\r\n const checkboxesCount = this.checkboxTargets.length;\r\n const checkboxesCheckedCount = this._checked.length;\r\n\r\n this.selectAllTarget.checked = checkboxesCheckedCount > 0;\r\n this.selectAllTarget.indeterminate = checkboxesCheckedCount > 0 && checkboxesCheckedCount < checkboxesCount;\r\n }\r\n}","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class ClipboardController extends BaseController {\r\n\r\n static targets = [\"source\", \"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 {\r\n return element.nodeName == \"LINK\";\r\n}\r\n\r\nexport function isHTMLAnchorElement(element: Element): element is HTMLAnchorElement {\r\n return element.nodeName == \"A\";\r\n}\r\n\r\nexport function isHTMLFormElement(element: Element): element is HTMLFormElement {\r\n return element.nodeName == \"FORM\";\r\n}\r\n\r\nexport function isHTMLInputElement(element: Element): element is HTMLInputElement {\r\n return element.nodeName == \"INPUT\";\r\n}\r\n\r\nexport function isHTMLButtonElement(element: Element): element is HTMLButtonElement {\r\n return element.nodeName == \"BUTTON\";\r\n}\r\n\r\nexport function isHTMLSelectElement(element: Element): element is HTMLSelectElement {\r\n return element.nodeName == \"SELECT\";\r\n}\r\n\r\nexport function isHTMLImageElement(element: Element): element is HTMLImageElement {\r\n return element.nodeName == \"IMG\";\r\n}\r\n\r\nexport function isElementCheckable(element: Element): element is HTMLInputElement & { checked: boolean } {\r\n return isHTMLInputElement(element) && (element.type === \"radio\" || element.type === \"checkbox\");\r\n}\r\n","import {BaseController} from '../utilities/base_controller';\r\nimport {isHTMLAnchorElement, isHTMLFormElement} from \"../utilities/elements\";\r\n\r\nexport class ConfirmController extends BaseController {\r\n\r\n static values = {\r\n message: String,\r\n };\r\n\r\n declare readonly messageValue: string;\r\n declare readonly hasMessageValue: boolean;\r\n\r\n get _message(): string {\r\n return this.hasMessageValue ? this.messageValue : 'Are you sure?';\r\n }\r\n\r\n initialize() {\r\n this.confirm = this.confirm.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 element.addEventListener(\"submit\", this.confirm);\r\n } else if (isHTMLAnchorElement(element)) {\r\n element.addEventListener(\"click\", this.confirm);\r\n } else {\r\n throw new Error(\"Can't handle confirmation on attached element\");\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n let element = this.el;\r\n if (isHTMLFormElement(element)) {\r\n element.removeEventListener(\"submit\", this.confirm);\r\n } else if (isHTMLAnchorElement(element)) {\r\n element.removeEventListener(\"click\", this.confirm);\r\n }\r\n }\r\n\r\n confirm(event: Event) {\r\n if (!(window.confirm(this._message))) {\r\n event.preventDefault();\r\n this.dispatch(this.el, \"confirm:cancelled\");\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class ConfirmNavigationController extends BaseController {\r\n\r\n static values = {_message: String};\r\n\r\n declare readonly _messageValue: string;\r\n declare readonly hasMessageValue: boolean;\r\n\r\n get _message(): string {\r\n return this.hasMessageValue ? this._messageValue : \"Do you want to leave this page? Changes you made may not be saved\";\r\n }\r\n\r\n initialize() {\r\n this.allowSubmit = this.allowSubmit.bind(this);\r\n this.confirmNavigation = this.confirmNavigation.bind(this);\r\n this.confirmTurboNavigation = this.confirmTurboNavigation.bind(this);\r\n }\r\n\r\n connect() {\r\n window.onbeforeunload = () => this._message;\r\n window.addEventListener(\"popstate\", this.confirmNavigation);\r\n window.addEventListener(\"submit\", this.allowSubmit);\r\n window.addEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\r\n window.addEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"popstate\", this.confirmNavigation);\r\n window.onbeforeunload = null;\r\n window.removeEventListener(\"submit\", this.allowSubmit);\r\n window.removeEventListener(\"turbolinks:before-visit\", this.confirmTurboNavigation);\r\n window.removeEventListener(\"turbo:before-visit\", this.confirmTurboNavigation);\r\n }\r\n\r\n allowSubmit(_event: Event) {\r\n window.removeEventListener(\"popstate\", this.confirmNavigation);\r\n window.onbeforeunload = null;\r\n }\r\n\r\n confirmNavigation(_event: PopStateEvent) {\r\n return false;\r\n }\r\n\r\n confirmTurboNavigation(event: Event) {\r\n if (!confirm(this._message)) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class DebugController extends BaseController {\r\n\r\n static targets = [\"test\"];\r\n declare testTargets: HTMLElement[];\r\n\r\n connect() {\r\n console.log(\"Debug Controller\", this, this.testTargets);\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyController extends BaseController {\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._restoreElementFromLoadValue();\r\n }\r\n\r\n private _getElementValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(): boolean | string {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(): boolean {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkDirty() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (this._isElementDirty()) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(): boolean {\r\n return this._getElementValue() !== this._getElementLoadValue();\r\n }\r\n\r\n private _restoreElementFromLoadValue() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n if (!this._elementHasCachedLoadValue() && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {isElementCheckable, isHTMLSelectElement} from \"../../utilities/elements\";\r\n\r\nexport class DetectDirtyFormController extends BaseController {\r\n\r\n get _formElements(): Array {\r\n return Array.from(this.el.querySelectorAll('input, select, textarea'));\r\n }\r\n\r\n get _cacheAttrName(): string {\r\n return 'detect-dirty-load-value';\r\n }\r\n\r\n initialize() {\r\n this._checkDirty = this._checkDirty.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n\r\n this._cacheLoadValues();\r\n this._checkDirty();\r\n element.addEventListener(\"input\", this._checkDirty);\r\n element.addEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n disconnect() {\r\n let element = this.el as HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\r\n element.removeEventListener(\"input\", this._checkDirty);\r\n element.removeEventListener(\"change\", this._checkDirty);\r\n }\r\n\r\n restore(event?: Event) {\r\n event?.preventDefault();\r\n this._formElements.forEach(element => this._restoreElementFromLoadValue(element));\r\n }\r\n\r\n private _getElementValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n return isElementCheckable(element) ? element.checked : element.value;\r\n }\r\n\r\n private _getElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean | string {\r\n let value = element.getAttribute(this._cacheAttrName);\r\n if (isElementCheckable(element)) {\r\n return value == null ? element.defaultChecked : value == \"true\";\r\n } else if (value !== null) {\r\n return value;\r\n }\r\n\r\n if (isHTMLSelectElement(element)) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return option.value;\r\n }\r\n });\r\n }\r\n\r\n return value!;\r\n }\r\n\r\n private _elementHasCachedLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return element.hasAttribute(this._cacheAttrName);\r\n }\r\n\r\n private _checkElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (this._isElementDirty(element)) {\r\n element.setAttribute('data-dirty', \"true\");\r\n } else {\r\n element.removeAttribute('data-dirty');\r\n }\r\n }\r\n\r\n private _isElementDirty(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement): boolean {\r\n return this._getElementValue(element) !== this._getElementLoadValue(element);\r\n }\r\n\r\n private _cacheElementLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n if (!this._elementHasCachedLoadValue(element) && isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n } else {\r\n element.setAttribute(this._cacheAttrName, element.value.toString());\r\n }\r\n }\r\n\r\n private _restoreElementFromLoadValue(element: HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement) {\r\n let cacheValue = element.getAttribute(this._cacheAttrName);\r\n\r\n if (isElementCheckable(element)) {\r\n element.setAttribute(this._cacheAttrName, element.checked.toString());\r\n element.checked = cacheValue == null ? element.defaultChecked : cacheValue == \"true\";\r\n } else if (isHTMLSelectElement(element)) {\r\n if (cacheValue == null) {\r\n let options = Array.from(element.options);\r\n options.forEach((option) => {\r\n if (option.defaultSelected) {\r\n element.value = option.value;\r\n return;\r\n }\r\n });\r\n } else {\r\n element.value = cacheValue;\r\n }\r\n\r\n } else {\r\n element.value = cacheValue == null ? element.defaultValue : cacheValue;\r\n }\r\n }\r\n\r\n private _cacheLoadValues(): void {\r\n this._formElements.forEach(el => this._cacheElementLoadValue(el));\r\n }\r\n\r\n private _checkDirty(): void {\r\n this._formElements.forEach(el => this._checkElementDirty(el));\r\n if (this._formElements.some(el => isDirty(el))) {\r\n this.el.setAttribute(\"data-dirty\", \"true\");\r\n } else {\r\n this.el.removeAttribute(\"data-dirty\");\r\n }\r\n }\r\n}\r\n\r\nexport function isDirty(element: HTMLElement) {\r\n return element.hasAttribute(\"data-dirty\");\r\n}\r\n","import {BaseController} from \"../../utilities/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 '../utilities/base_controller';\r\nimport {isHTMLAnchorElement, isHTMLButtonElement, isHTMLInputElement} from \"../utilities/elements\";\r\n\r\nexport class DisableWithController extends BaseController {\r\n\r\n static values = {\r\n message: String,\r\n timeout: Number,\r\n };\r\n\r\n declare readonly messageValue: string;\r\n declare readonly hasMessageValue: boolean;\r\n declare readonly timeoutValue: number;\r\n declare readonly hasTimeoutValue: boolean;\r\n\r\n _cacheText?: string;\r\n _timeoutHandle?: ReturnType;\r\n\r\n get _message(): string {\r\n return this.hasMessageValue ? this.messageValue : 'Submitting...';\r\n }\r\n\r\n get _timeout(): number {\r\n return this.hasTimeoutValue ? this.timeoutValue : 1000;\r\n }\r\n\r\n initialize() {\r\n this.enable = this.enable.bind(this);\r\n this.disable = this.disable.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this.el.addEventListener(\"click\", this.disable);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n disable(event?: Event) {\r\n let element = this.el;\r\n\r\n if (this._isDisabled(element)) {\r\n event?.preventDefault();\r\n event?.stopImmediatePropagation();\r\n } else {\r\n this._cacheText = this._getElText(element);\r\n this._setElText(element, this._message);\r\n this._disable(element);\r\n setTimeout(this.enable, this._timeout);\r\n }\r\n }\r\n\r\n enable(event?: Event) {\r\n event?.preventDefault();\r\n let element = this.el;\r\n if (this._isDisabled(element)) {\r\n this._setElText(element, this._cacheText!);\r\n this._enable(element);\r\n }\r\n }\r\n\r\n _isDisabled(el: HTMLElement): boolean {\r\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\r\n return el.disabled;\r\n } else {\r\n return el.dataset.disabled == \"true\";\r\n }\r\n }\r\n\r\n _getElText(el: HTMLElement): string {\r\n if (isHTMLInputElement(el) && el.type == \"submit\") {\r\n return el.value;\r\n } else {\r\n return el.innerText;\r\n }\r\n }\r\n\r\n _setElText(el: HTMLElement, str: string) {\r\n if (isHTMLInputElement(el) && el.type == \"submit\") {\r\n el.value = str;\r\n } else if (isHTMLButtonElement(el) || isHTMLAnchorElement(el)) {\r\n el.innerText = str;\r\n }\r\n }\r\n\r\n _disable(el: HTMLElement) {\r\n if ((isHTMLInputElement(el) && el.type == \"submit\") || isHTMLButtonElement(el)) {\r\n el.disabled = true;\r\n } else {\r\n el.dataset.disabled = \"true\";\r\n }\r\n }\r\n\r\n _enable(el: HTMLElement) {\r\n if (isHTMLInputElement(el) && el.type == \"submit\" || isHTMLButtonElement(el)) {\r\n el.disabled = false;\r\n } else {\r\n el.dataset.disabled = undefined;\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class DismissableController extends BaseController {\r\n\r\n dismiss() {\r\n this.el.remove();\r\n }\r\n\r\n}\r\n","import {BaseController} from '../utilities/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\";\r\nimport {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport class EmptyDomController extends BaseController {\r\n\r\n static classes = [\"empty\", \"notEmpty\"];\r\n static values = {scopeSelector: String};\r\n\r\n declare hasEmptyClass: boolean;\r\n declare emptyClass: string;\r\n declare hasNotEmptyClass: boolean;\r\n declare notEmptyClass: string;\r\n\r\n declare hasScopeSelectorValue: boolean;\r\n declare scopeSelectorValue: string;\r\n\r\n get emptyClasses(): string[] {\r\n return this.emptyClass.split(\" \");\r\n }\r\n\r\n get notEmptyClasses(): string[] {\r\n return this.notEmptyClass.split(\" \");\r\n }\r\n\r\n get _children(): Element[] {\r\n let element = this.el;\r\n if (this.hasScopeSelectorValue) {\r\n return Array.from(element.querySelectorAll(this.scopeSelectorValue));\r\n } else {\r\n return Array.from(element.children);\r\n }\r\n }\r\n\r\n connect() {\r\n useMutation(this, {element: this.el, childList: true});\r\n this.checkEmpty();\r\n }\r\n\r\n mutate(entries: MutationRecord[]) {\r\n this.checkEmpty();\r\n }\r\n\r\n checkEmpty() {\r\n let element = this.el;\r\n let children = this._children;\r\n if (children.length === 0) {\r\n this._removeNotEmptyClasses();\r\n this._addEmptyClasses();\r\n this.dispatch(element as HTMLElement, \"dom:empty\");\r\n } else {\r\n this._addNotEmptyClasses();\r\n this._removeEmptyClasses();\r\n this.dispatch(element as HTMLElement, \"dom:not-empty\", {detail: {count: children.length}});\r\n }\r\n }\r\n\r\n private _removeEmptyClasses() {\r\n if (this.hasEmptyClass) {\r\n this.el.classList.remove(...this.emptyClasses);\r\n }\r\n }\r\n\r\n private _addNotEmptyClasses() {\r\n if (this.hasNotEmptyClass) {\r\n this.el.classList.add(...this.notEmptyClasses);\r\n }\r\n }\r\n\r\n private _addEmptyClasses() {\r\n if (this.hasEmptyClass) {\r\n this.el.classList.add(...this.emptyClasses);\r\n }\r\n }\r\n\r\n private _removeNotEmptyClasses() {\r\n if (this.hasNotEmptyClass) {\r\n this.el.classList.remove(...this.notEmptyClasses);\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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 \"../../utilities/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 '../../utilities/base_controller';\r\n\r\nexport class FormRcController extends BaseController {\r\n\r\n static targets = [\"form\"];\r\n\r\n declare readonly formTarget: HTMLFormElement;\r\n\r\n submit(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"submit\");\r\n this.formTarget.submit();\r\n }\r\n\r\n reset(event?: Event) {\r\n event?.preventDefault();\r\n this.dispatch(this.formTarget, \"reset\");\r\n this.formTarget.reset();\r\n }\r\n\r\n}","import {BaseController} from '../../utilities/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 \"../../utilities/base_controller\";\r\nimport {useIntersection} from \"stimulus-use\";\r\n\r\nexport class IntersectionController extends BaseController {\r\n\r\n static values = {threshold: String};\r\n\r\n declare readonly isVisible: boolean;\r\n declare readonly thresholdValue: string;\r\n declare readonly hasThresholdValue: boolean;\r\n\r\n get _threshold(): number[] {\r\n if (this.hasThresholdValue) {\r\n return this.thresholdValue.split(',').map(val => Number.parseFloat(val.trim())).filter(val => val >= 0 && val <= 1);\r\n } else {\r\n return [0, 1];\r\n }\r\n }\r\n\r\n connect() {\r\n useIntersection(this, {\r\n threshold: this._threshold,\r\n element: this.el,\r\n });\r\n }\r\n\r\n appear(entry: IntersectionObserverEntry) {\r\n this.dispatch(\r\n this.el,\r\n \"intersection:appear\",\r\n {\r\n detail: {\r\n element: this.el,\r\n },\r\n },\r\n );\r\n };\r\n\r\n disappear(entry: IntersectionObserverEntry) {\r\n this.dispatch(\r\n this.el,\r\n \"intersection:disappear\",\r\n {\r\n detail: {\r\n element: this.el,\r\n },\r\n },\r\n );\r\n };\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class IntervalController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _intervalHandle: null | number = null;\r\n\r\n initialize() {\r\n this._interval = this._interval.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._intervalHandle = window.setInterval(this._interval, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._intervalHandle) {\r\n window.clearInterval(this._intervalHandle);\r\n }\r\n }\r\n\r\n _interval() {\r\n this.dispatch(this.el, \"interval:action\");\r\n }\r\n\r\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\";\r\nimport {AsyncBlockController} from \"./async_block_controller\";\r\n\r\nexport class LazyBlockController extends AsyncBlockController {\r\n\r\n declare observe: () => void;\r\n declare unobserve: () => void;\r\n declare isVisible: boolean;\r\n declare disappear: () => void;\r\n\r\n connect() {\r\n let element = this.el;\r\n\r\n if (\"IntersectionObserver\" in window) {\r\n [this.observe, this.unobserve] = useIntersection(this, {element, threshold: 0.3});\r\n } else {\r\n // Client doesn't support intersection observer, fallback to pre-loading\r\n this.loadContent();\r\n }\r\n }\r\n\r\n appear(entry: IntersectionObserverEntry) {\r\n if (entry.target === this.el && entry.isIntersecting) {\r\n this.loadContent();\r\n if (this.unobserve) {\r\n this.unobserve();\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/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 \"../../utilities/base_controller\";\r\n\r\nexport class LimitedSelectionCheckboxesController extends BaseController {\r\n\r\n static targets = [\"input\", \"error\"];\r\n static values = {max: Number, message: String};\r\n\r\n declare readonly hasErrorTarget: boolean;\r\n declare readonly errorTarget: HTMLElement;\r\n declare readonly inputTargets: HTMLInputElement[];\r\n declare readonly maxValue: number;\r\n declare readonly messageValue: string;\r\n\r\n initialize() {\r\n this.handleInputs = this.handleInputs.bind(this);\r\n }\r\n\r\n connect() {\r\n this.inputTargets.forEach((el) => el.addEventListener(\"change\", this.handleInputs));\r\n }\r\n\r\n disconnect() {\r\n this.inputTargets.forEach((el) => el.removeEventListener(\"change\", this.handleInputs));\r\n }\r\n\r\n handleInputs(event: Event) {\r\n let tickedInputs = this.inputTargets.reduce((previousValue, el) => el.checked ? previousValue + 1 : previousValue, 0);\r\n let target = event.target as HTMLInputElement;\r\n if (tickedInputs > this.maxValue) {\r\n event.preventDefault();\r\n target.checked = false;\r\n this.dispatch(target, \"change\");\r\n this.dispatch(target, \"limited-selection:too-many\");\r\n if (this.hasErrorTarget) {\r\n this.errorTarget.innerHTML = this.messageValue;\r\n }\r\n } else {\r\n this.dispatch(target, \"limited-selection:selection\");\r\n if (this.hasErrorTarget) {\r\n this.errorTarget.innerHTML = \"\";\r\n }\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class MediaPlayerController extends BaseController {\r\n\r\n static targets = [\"media\"];\r\n\r\n declare readonly mediaTarget: HTMLMediaElement;\r\n\r\n initialize() {\r\n }\r\n\r\n connect() {\r\n }\r\n\r\n disconnect() {\r\n }\r\n\r\n async play(event?: Event) {\r\n event?.preventDefault();\r\n await this.mediaTarget.play();\r\n }\r\n\r\n pause(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.pause();\r\n }\r\n\r\n restart(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime = 0;\r\n }\r\n\r\n seek(event?: Event) {\r\n event?.preventDefault();\r\n this.mediaTarget.currentTime += 5;\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class NestedFormController extends BaseController {\r\n static targets = ['target', 'template'];\r\n static values = {\r\n insertMode: String,\r\n wrapperClass: String,\r\n };\r\n\r\n declare readonly targetTarget: HTMLElement;\r\n declare readonly templateTarget: HTMLTemplateElement | HTMLScriptElement;\r\n\r\n declare readonly wrapperClassValue: string;\r\n declare readonly hasWrapperSelectorValue: boolean;\r\n declare readonly insertModeValue: InsertPosition;\r\n declare readonly hasInsertModeValue: boolean;\r\n\r\n get _wrapperClass() {\r\n return this.hasWrapperSelectorValue ? this.wrapperClassValue : 'nested-fields';\r\n }\r\n\r\n get _insertMode(): InsertPosition {\r\n return this.hasInsertModeValue ? this.insertModeValue : 'beforeend';\r\n }\r\n\r\n connect() {\r\n this._checkStructure();\r\n }\r\n\r\n add(event?: Event) {\r\n event?.preventDefault();\r\n\r\n const content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, this._generateID());\r\n this.targetTarget.insertAdjacentHTML(this._insertMode, content);\r\n }\r\n\r\n remove(event: Event) {\r\n event.preventDefault();\r\n const wrapper: HTMLElement | null = (event.target as HTMLElement).closest(`.${this._wrapperClass}`);\r\n if (wrapper == null) {\r\n throw new Error(`#remove was clicked from outside of a child record. Could not find an ancestor with class .${this._wrapperClass}`);\r\n }\r\n\r\n if (wrapper.dataset.newRecord === 'true') {\r\n wrapper.remove();\r\n } else {\r\n wrapper.style.display = 'none';\r\n let destroyInput = wrapper.querySelector(\"input[name*='_destroy']\") as HTMLInputElement | null;\r\n if (destroyInput == null) {\r\n throw new Error(`Could not find a hidden input with name '_destroy'. NestedForm cannot remove an already persisted record without it.`);\r\n }\r\n\r\n destroyInput.value = \"1\";\r\n }\r\n }\r\n\r\n private _generateID(): string {\r\n return new Date().getTime().toString() + Math.random().toString().slice(2);\r\n }\r\n\r\n private _checkStructure() {\r\n let template = this.templateTarget.innerHTML;\r\n\r\n if (template.indexOf('NEW_RECORD')) {\r\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`\");\r\n }\r\n }\r\n}","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class PasswordConfirmController extends BaseController {\r\n\r\n static targets = [\"password\"];\r\n static classes = [\"error\"];\r\n\r\n declare readonly passwordTargets: HTMLInputElement[];\r\n\r\n declare readonly errorClass: string;\r\n declare readonly hasErrorClass: boolean;\r\n\r\n initialize() {\r\n this.checkPasswordsMatch = this.checkPasswordsMatch.bind(this);\r\n }\r\n\r\n connect() {\r\n this.passwordTargets.forEach((el) => el.addEventListener(\"change\", this.checkPasswordsMatch));\r\n }\r\n\r\n disconnect() {\r\n this.passwordTargets.forEach((el) => el.removeEventListener(\"change\", this.checkPasswordsMatch));\r\n }\r\n\r\n private _allPasswordsMatch(): boolean {\r\n let values = new Set(this.passwordTargets.map(el => el.value)); // Create a unique set of the password values\r\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)\r\n }\r\n\r\n private checkPasswordsMatch() {\r\n let element = this.el;\r\n if (this._allPasswordsMatch()) {\r\n this.dispatch(element, \"password-confirm:match\");\r\n if (this.hasErrorClass) {\r\n this.passwordTargets.forEach(el => el.classList.remove(this.errorClass));\r\n }\r\n } else {\r\n this.dispatch(element, \"password-confirm:no-match\");\r\n if (this.hasErrorClass) {\r\n this.passwordTargets.forEach(el => el.classList.add(this.errorClass));\r\n }\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class PasswordPeekController extends BaseController {\r\n\r\n static targets = [\"password\"];\r\n\r\n declare readonly passwordTarget: HTMLInputElement;\r\n\r\n peak(event?: Event) {\r\n event?.preventDefault();\r\n this.passwordTarget.type = \"text\";\r\n }\r\n\r\n hide(event?: Event) {\r\n event?.preventDefault();\r\n this.passwordTarget.type = \"password\";\r\n }\r\n\r\n toggle(event?: Event) {\r\n event?.preventDefault();\r\n if (this.passwordTarget.type === \"password\") {\r\n this.peak();\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n}\r\n","import {BaseController} from \"../../utilities/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\";\r\nimport {WindowResizePayload} from \"stimulus-use/dist/use-window-resize/use-window-resize\";\r\nimport {BaseController} from \"../utilities/base_controller\";\r\n\r\ninterface ResponsiveIframeMessage {\r\n name: string,\r\n height: number,\r\n}\r\n\r\nexport class ResponsiveIframeWrapperController extends BaseController {\r\n\r\n initialize() {\r\n this.messageReceived = this.messageReceived.bind(this);\r\n }\r\n\r\n connect() {\r\n window.addEventListener(\"message\", this.messageReceived);\r\n }\r\n\r\n disconnect() {\r\n window.removeEventListener(\"message\", this.messageReceived);\r\n }\r\n\r\n messageReceived(message: MessageEvent) {\r\n let data = message.data;\r\n if (data.hasOwnProperty(\"name\") && data.name === \"iframe-body\" && data.hasOwnProperty(\"height\")) {\r\n this.resize(data.height);\r\n }\r\n }\r\n\r\n resize(height: number) {\r\n (this.el as HTMLIFrameElement).style.height = `${height}px`;\r\n }\r\n\r\n}\r\n\r\nexport class ResponsiveIframeBodyController extends BaseController {\r\n\r\n static debounces = [\"postUpdate\"];\r\n\r\n declare observe: () => void;\r\n declare unobserve: () => void;\r\n\r\n connect() {\r\n // If this Window is inside a frame\r\n if (window.self !== window.top) {\r\n useWindowResize(this);\r\n useDebounce(this, {});\r\n this.postUpdate();\r\n } else {\r\n // Not an iframe\r\n }\r\n }\r\n\r\n windowResize(payload: WindowResizePayload) {\r\n this.postUpdate();\r\n };\r\n\r\n postUpdate() {\r\n let payload: ResponsiveIframeMessage = {name: \"iframe-body\", height: this.getHeight()};\r\n window.parent.postMessage(\r\n payload,\r\n \"*\",\r\n );\r\n }\r\n\r\n getHeight(): number {\r\n const body = document.body;\r\n const html = document.documentElement;\r\n\r\n // Get the largest height out of body and html's various height measurements\r\n return Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\r\n }\r\n\r\n}\r\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 \"../../utilities/base_controller\";\r\nimport {getScrollParent, scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class ScrollToBottomController extends BaseController {\r\n\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare modeValue: \"nearest\" | \"document\";\r\n declare hasModeValue: boolean;\r\n\r\n scroll(event?: Event) {\r\n event?.preventDefault();\r\n let mode = this.hasModeValue ? this.modeValue : \"document\";\r\n let target: null | HTMLElement;\r\n if (mode == \"document\") {\r\n target = document.body;\r\n } else {\r\n target = getScrollParent(this.el);\r\n }\r\n if (target == null) {\r\n return;\r\n }\r\n scrollToElement(target!, {behavior: \"smooth\", block: \"end\"}).catch(() => target!.scrollIntoView(false));\r\n }\r\n\r\n}\r\n\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class ScrollToController extends BaseController {\r\n\r\n static values = {\r\n selector: String,\r\n behavior: String,\r\n block: String,\r\n inline: String,\r\n };\r\n\r\n declare selectorValue: string;\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 scroll() {\r\n let target = document.querySelector(this.selectorValue);\r\n if (!target) {\r\n console.warn(`Could not find target for '${this.selectorValue}'`);\r\n return;\r\n }\r\n\r\n scrollToElement(\r\n target!,\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(() => target!.scrollIntoView()); // Fallback to snap-scrolling\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\nimport {getScrollParent, scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class ScrollToTopController extends BaseController {\r\n\r\n static values = {\r\n mode: String,\r\n };\r\n\r\n declare modeValue: \"nearest\" | \"document\";\r\n declare hasModeValue: boolean;\r\n\r\n scroll(event?: Event) {\r\n event?.preventDefault();\r\n let mode = this.hasModeValue ? this.modeValue : \"document\";\r\n let target: null | HTMLElement;\r\n if (mode == \"document\") {\r\n target = document.body;\r\n } else {\r\n target = getScrollParent(this.el);\r\n }\r\n if (target == null) {\r\n return;\r\n }\r\n scrollToElement(target!, {behavior: \"smooth\", block: \"start\"}).catch(() => target!.scrollIntoView(false));\r\n }\r\n\r\n}\r\n\r\n","import {BaseController} from \"../utilities/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 \"../utilities/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 {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableSortController extends BaseController {\r\n\r\n static values = {startSort: Number};\r\n\r\n declare readonly startSortValue: number;\r\n declare readonly hasStartSortValue: boolean;\r\n _lastIndex: number | null = null;\r\n _reverse: boolean = false;\r\n\r\n get _tableHead(): HTMLTableSectionElement {\r\n let head = (this.el as HTMLTableElement).tHead;\r\n if (head == null) {\r\n throw new Error('Expected table to have a element.');\r\n }\r\n return head;\r\n }\r\n\r\n get _tableHeaders(): HTMLTableHeaderCellElement[] {\r\n let rows = this._tableHead.rows;\r\n if (rows.length == 0) {\r\n throw new Error('Expected table to have a element with at least one row.');\r\n }\r\n return Array.from(rows[0].cells);\r\n }\r\n\r\n get _tableBody() {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n initialize() {\r\n this.sort = this.sort.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._tableHeaders.forEach(cell => cell.addEventListener(\"click\", this.sort));\r\n if (this.hasStartSortValue) {\r\n this._sortByColumn(this.startSortValue);\r\n }\r\n });\r\n }\r\n\r\n disconnect() {\r\n this._tableHeaders.forEach(cell => cell.removeEventListener(\"click\", this.sort));\r\n }\r\n\r\n sort(event: Event) {\r\n event.preventDefault();\r\n let headerCell = event.target! as HTMLTableHeaderCellElement;\r\n let headerCellIndex = this._indexOfHeaderCell(headerCell);\r\n this._sortByColumn(headerCellIndex);\r\n }\r\n\r\n private _indexOfHeaderCell(cell: HTMLTableHeaderCellElement) {\r\n return this._tableHeaders.indexOf(cell);\r\n }\r\n\r\n private _sortByColumn(index: number) {\r\n this._reverse = index === this._lastIndex && !this._reverse;\r\n let frag = document.createDocumentFragment();\r\n let rows = this._tableRows;\r\n\r\n let newRows = rows.sort((row, otherRow) => {\r\n let cells = Array.from(row.cells);\r\n let otherCells = Array.from(otherRow.cells);\r\n\r\n // TODO: Handle colspans?\r\n let x = cells[index]?.innerText || \"\";\r\n let y = otherCells[index]?.innerText || \"\";\r\n\r\n let sortVal = x.localeCompare(y, \"en\", {sensitivity: \"base\", numeric: true, caseFirst: \"upper\"});\r\n\r\n if (row.dataset.sortTop || otherRow.dataset.sortBottom) {\r\n if (row.dataset.sortTop && otherRow.dataset.sortTop) {\r\n return sortVal;\r\n }\r\n return -1;\r\n }\r\n if (row.dataset.sortBottom || otherRow.dataset.sortTop) {\r\n if (row.dataset.sortBottom && otherRow.dataset.sortBottom) {\r\n return sortVal;\r\n }\r\n return 1;\r\n }\r\n\r\n if (this._reverse) {\r\n return sortVal > 0 ? -1 : 1;\r\n }\r\n return sortVal;\r\n });\r\n\r\n newRows.forEach(row => frag.appendChild(row));\r\n\r\n this._tableBody.innerHTML = \"\";\r\n this._tableBody.appendChild(frag);\r\n this._lastIndex = index;\r\n }\r\n\r\n}","import {useMutation} from \"stimulus-use\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TableTruncateController extends BaseController {\r\n\r\n static targets = [\"showMore\"];\r\n static values = {\r\n limit: Number,\r\n truncated: Boolean,\r\n };\r\n\r\n declare readonly showMoreTarget: HTMLElement;\r\n declare limitValue: number;\r\n declare readonly hasLimitValue: boolean;\r\n declare truncatedValue: boolean;\r\n declare readonly hasTruncatedValue: boolean;\r\n\r\n get _truncated(): boolean {\r\n return this.hasTruncatedValue ? this.truncatedValue : false;\r\n }\r\n\r\n set _truncated(value) {\r\n this.truncatedValue = value;\r\n }\r\n\r\n get _tableBody(): HTMLTableSectionElement {\r\n return (this.el as HTMLTableElement).tBodies[0];\r\n }\r\n\r\n get _tableRows(): HTMLTableRowElement[] {\r\n return Array.from(this._tableBody.rows);\r\n }\r\n\r\n get _limit(): number {\r\n return this.hasLimitValue ? this.limitValue : 20;\r\n }\r\n\r\n initialize() {\r\n this.truncate = this.truncate.bind(this);\r\n this.expand = this.expand.bind(this);\r\n }\r\n\r\n connect() {\r\n useMutation(this, {childList: true, element: this._tableBody});\r\n\r\n requestAnimationFrame(() => {\r\n this.truncate();\r\n this.showMoreTarget.addEventListener(\"click\", this.expand);\r\n });\r\n }\r\n\r\n truncate(event?: Event) {\r\n event?.preventDefault();\r\n this._truncated = true;\r\n if (this._tableRows.length >= this._limit) {\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\r\n } else {\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n }\r\n\r\n expand(event?: Event) {\r\n this._truncated = false;\r\n event?.preventDefault();\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._hideElement(this.showMoreTarget);\r\n }\r\n\r\n mutate(entries: MutationRecord[]) {\r\n if (this._truncated) {\r\n this._reTruncate();\r\n }\r\n }\r\n\r\n private _showElement(el: HTMLElement): void {\r\n el.style.display = \"\";\r\n }\r\n\r\n private _hideElement(el: HTMLElement): void {\r\n el.style.display = \"none\";\r\n }\r\n\r\n private _reTruncate() {\r\n this._tableRows.slice(0, this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._showElement(el);\r\n }\r\n });\r\n this._tableRows.slice(this._limit).forEach((el) => {\r\n if (el !== this.showMoreTarget) {\r\n this._hideElement(el);\r\n }\r\n });\r\n this._showElement(this.showMoreTarget);\r\n }\r\n\r\n}","import {EphemeralController} from \"../utilities/ephemeral_controller\";\r\n\r\nexport class TeleportController extends EphemeralController {\r\n\r\n static values = {target: String, insert: String, immediate: Boolean};\r\n\r\n declare readonly immediateValue: boolean;\r\n declare readonly hasImmediateValue: boolean;\r\n declare readonly targetValue: string;\r\n declare readonly hasInsertValue: boolean;\r\n declare readonly insertValue: InsertPosition | \"replaceOuter\" | \"replaceInner\" | \"prepend\" | \"append\";\r\n\r\n connect() {\r\n if (!this.hasInsertValue) {\r\n throw new Error(\"`insert` value was not specified\");\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n if (this.hasImmediateValue && this.immediateValue) {\r\n this.execute();\r\n }\r\n });\r\n }\r\n\r\n execute(event?: Event) {\r\n event?.preventDefault();\r\n let element = this.el;\r\n let destination = document.querySelector(this.targetValue);\r\n\r\n if (destination == null) {\r\n this.dispatch(element, \"teleport:error\");\r\n return;\r\n }\r\n\r\n let copy = element.cloneNode(true) as HTMLElement;\r\n this.cleanup(copy);\r\n\r\n switch (this.insertValue) {\r\n case \"beforebegin\":\r\n case \"beforeend\":\r\n case \"afterend\":\r\n case \"afterbegin\":\r\n destination.insertAdjacentHTML(this.insertValue, copy.outerHTML);\r\n break;\r\n case \"replaceOuter\":\r\n destination.outerHTML = copy.outerHTML;\r\n break;\r\n case \"replaceInner\":\r\n destination.innerHTML = copy.outerHTML;\r\n break;\r\n case \"prepend\":\r\n destination.insertAdjacentHTML(\"afterbegin\", copy.outerHTML);\r\n break;\r\n case \"append\":\r\n destination.insertAdjacentHTML(\"beforeend\", copy.outerHTML);\r\n break;\r\n default:\r\n throw new Error(\"`insert` value was not specified\");\r\n\r\n }\r\n element.remove();\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class TimeoutController extends BaseController {\r\n\r\n static values = {seconds: Number};\r\n\r\n declare readonly secondsValue: number;\r\n _timeoutHandle: null | number = null;\r\n\r\n initialize() {\r\n this._timeout = this._timeout.bind(this);\r\n }\r\n\r\n connect() {\r\n requestAnimationFrame(() => {\r\n this._timeoutHandle = window.setTimeout(this._timeout, this.secondsValue * 1000);\r\n });\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n window.clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n _timeout() {\r\n this.dispatch(this.el, \"timeout\");\r\n }\r\n\r\n}","import {useClickOutside, useHover} from \"stimulus-use\";\r\nimport {BaseController} from \"../utilities/base_controller\";\r\n\r\nexport type ToggleClassMode = \"on\" | \"off\" | \"toggle\"\r\n\r\nexport class ToggleClassController extends BaseController {\r\n\r\n static targets = [\"toggle\"];\r\n static values = {\r\n class: String,\r\n mouseEnter: String,\r\n mouseLeave: String,\r\n clickAway: Boolean,\r\n initial: String,\r\n };\r\n\r\n declare readonly toggleTargets: HTMLElement[];\r\n\r\n declare readonly classValue: string;\r\n declare readonly hasClassValue: boolean;\r\n\r\n declare readonly mouseEnterValue: ToggleClassMode;\r\n declare readonly hasMouseEnterValue: boolean;\r\n\r\n declare readonly mouseLeaveValue: ToggleClassMode;\r\n declare readonly hasMouseLeaveValue: boolean;\r\n\r\n declare readonly clickAwayValue: boolean;\r\n declare readonly hasClickAwayValue: boolean;\r\n\r\n declare readonly initialValue: \"on\" | \"off\";\r\n declare readonly hasInitialValue: boolean;\r\n\r\n connect() {\r\n if (!this.hasClassValue) {\r\n throw new Error(\"data-toggle-class-class-value must not be empty\");\r\n }\r\n\r\n if (this.hasMouseEnterValue || this.hasMouseLeaveValue) {\r\n useHover(this);\r\n }\r\n\r\n if (this.hasClickAwayValue && this.clickAwayValue) {\r\n useClickOutside(this);\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n if (this.hasInitialValue) {\r\n if (this.initialValue === \"on\") {\r\n this.toggleTargets.forEach((target) => this._elementOn(target));\r\n } else {\r\n this.toggleTargets.forEach((target) => this._elementOff(target));\r\n }\r\n }\r\n });\r\n }\r\n\r\n clickOutside() {\r\n this.toggleTargets.forEach((target) => {\r\n if (this._elementWasToggled(target)) {\r\n this._elementToggleStatus(target);\r\n this._elementToggle(target);\r\n }\r\n });\r\n }\r\n\r\n mouseEnter() {\r\n if (this.hasMouseEnterValue) {\r\n switch (this.mouseEnterValue) {\r\n case \"on\":\r\n this.on();\r\n break;\r\n case \"off\":\r\n this.off();\r\n break;\r\n case \"toggle\":\r\n this.toggle();\r\n break;\r\n }\r\n }\r\n return {};\r\n }\r\n\r\n mouseLeave() {\r\n if (this.hasMouseLeaveValue) {\r\n switch (this.mouseLeaveValue) {\r\n case \"on\":\r\n this.on();\r\n break;\r\n case \"off\":\r\n this.off();\r\n break;\r\n case \"toggle\":\r\n this.toggle();\r\n break;\r\n }\r\n }\r\n return {};\r\n }\r\n\r\n on(event?: Event) {\r\n this.toggleTargets.forEach((target) => {\r\n this._elementToggleStatus(target);\r\n this._elementOn(target);\r\n });\r\n }\r\n\r\n off(event?: Event) {\r\n this.toggleTargets.forEach((target) => {\r\n this._elementToggleStatus(target);\r\n this._elementOff(target);\r\n });\r\n }\r\n\r\n toggle(event?: Event) {\r\n this.toggleTargets.forEach((target) => {\r\n this._elementToggleStatus(target);\r\n this._elementToggle(target);\r\n });\r\n }\r\n\r\n private _elementWasToggled(el: HTMLElement): boolean {\r\n return el.dataset.toggled == \"true\";\r\n }\r\n\r\n private _elementToggleStatus(el: HTMLElement) {\r\n if (this._elementWasToggled(el)) {\r\n delete el.dataset.toggled;\r\n } else {\r\n el.dataset.toggled = \"true\";\r\n }\r\n }\r\n\r\n private _elementToggle(el: HTMLElement) {\r\n let classes = this.classValue.split(\" \");\r\n classes.forEach((klass) => el.classList.toggle(klass));\r\n }\r\n\r\n private _elementOn(el: HTMLElement) {\r\n let classes = this.classValue.split(\" \");\r\n classes.forEach((klass) => el.classList.toggle(klass, true));\r\n }\r\n\r\n private _elementOff(el: HTMLElement) {\r\n let classes = this.classValue.split(\" \");\r\n classes.forEach((klass) => el.classList.toggle(klass, false));\r\n }\r\n\r\n}\r\n","export function isTurboFrame(element: HTMLElement): element is TurboFrame {\r\n return element.nodeName == \"TURBO-FRAME\";\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\nimport {isHTMLAnchorElement} from \"../utilities/elements\";\r\nimport {isTurboFrame} from \"../utilities/turbo\";\r\n\r\nexport class TurboFrameRCController extends BaseController {\r\n\r\n static values = {\r\n frameId: String,\r\n src: String,\r\n loadingMessage: String,\r\n };\r\n\r\n declare readonly frameIdValue: string;\r\n declare readonly srcValue: string;\r\n declare readonly hasSrcValue: boolean;\r\n declare readonly loadingMessageValue: string;\r\n declare readonly hasLoadingMessageValue: boolean;\r\n\r\n toggle(event?: Event) {\r\n event?.preventDefault();\r\n let frame = this._getFrame();\r\n let frameSrc = frame.src;\r\n if (frameSrc == null || frameSrc !== this._getSrc()) {\r\n this._setSrc();\r\n } else {\r\n this._clear();\r\n }\r\n }\r\n\r\n setSrc(event?: Event) {\r\n event?.preventDefault();\r\n this._setSrc();\r\n }\r\n\r\n clear(event?: Event) {\r\n event?.preventDefault();\r\n this._clear();\r\n }\r\n\r\n private _setSrc() {\r\n let frame = this._getFrame();\r\n if (this.hasLoadingMessageValue) {\r\n frame.innerHTML = this.loadingMessageValue;\r\n }\r\n frame.src = this._getSrc();\r\n }\r\n\r\n private _clear() {\r\n let frame = this._getFrame();\r\n frame.src = \"\";\r\n frame.innerHTML = \"\";\r\n }\r\n\r\n private _getFrame(): TurboFrame {\r\n let frame = document.getElementById(`${this.frameIdValue}`);\r\n if (frame == null) {\r\n throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);\r\n }\r\n if (!isTurboFrame(frame)) {\r\n throw new Error(`Element targeted by ID '${this.frameIdValue}'`);\r\n } else {\r\n return frame;\r\n }\r\n }\r\n\r\n private _getSrc(): string {\r\n let element = this.el;\r\n if (this.hasSrcValue) {\r\n return this.srcValue;\r\n } else if (isHTMLAnchorElement(element)) {\r\n return element.href;\r\n } else {\r\n throw new Error(\"No link given to drive frame to\");\r\n }\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../utilities/base_controller\";\r\nimport {isTurboFrame} from \"../utilities/turbo\";\r\n\r\n// noinspection SillyAssignmentJS\r\nexport class TurboFrameRefreshController extends BaseController {\r\n\r\n static values = {\r\n interval: Number,\r\n poll: Boolean,\r\n };\r\n\r\n declare readonly intervalValue: number;\r\n declare readonly pollValue: boolean;\r\n declare readonly hasPollValue: boolean;\r\n _timeoutHandle: null | ReturnType = null;\r\n\r\n get _poll(): boolean {\r\n return this.hasPollValue ? this.pollValue : false;\r\n }\r\n\r\n initialize() {\r\n this.refresh = this.refresh.bind(this);\r\n }\r\n\r\n connect() {\r\n let element = this.el;\r\n if (isTurboFrame(element)) {\r\n if (!!element.src) {\r\n throw new Error('The provided element has no `src` attribute.');\r\n }\r\n } else {\r\n throw new Error('Expected controller to be mounted on a element.');\r\n }\r\n if (this._poll) {\r\n requestAnimationFrame(() => this._timeoutHandle = setTimeout(() => this.refresh(), this.intervalValue));\r\n }\r\n }\r\n\r\n disconnect() {\r\n if (this._timeoutHandle) {\r\n clearTimeout(this._timeoutHandle);\r\n }\r\n }\r\n\r\n refresh(event?: Event) {\r\n event?.preventDefault();\r\n let element = this.el as TurboFrame;\r\n element.src = element.src;\r\n }\r\n\r\n}\r\n","import {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class WordCountController extends BaseController {\r\n\r\n static targets = [\"input\", \"output\"];\r\n static values = {min: Number, max: Number};\r\n static classes = [\"error\"];\r\n\r\n declare readonly inputTarget: HTMLInputElement | HTMLTextAreaElement;\r\n declare readonly outputTarget: HTMLElement;\r\n declare minValue: number;\r\n declare hasMinValue: boolean;\r\n declare maxValue: number;\r\n declare hasMaxValue: boolean;\r\n declare errorClass: string;\r\n declare hasErrorClass: boolean;\r\n\r\n initialize() {\r\n this.updateWordCount = this.updateWordCount.bind(this);\r\n }\r\n\r\n connect() {\r\n this.updateWordCount();\r\n this.inputTarget.addEventListener(\"input\", this.updateWordCount);\r\n }\r\n\r\n disconnect() {\r\n this.inputTarget.removeEventListener(\"input\", this.updateWordCount);\r\n }\r\n\r\n updateWordCount() {\r\n let wordCount = 0;\r\n let textAreaValue = this.inputTarget.value;\r\n let matches = textAreaValue.match(/\\S+/g);\r\n wordCount = (matches && matches.length) || 0;\r\n this.outputTarget.innerText = wordCount.toString();\r\n if (this.hasErrorClass) {\r\n if (this._isValidCount(wordCount)) {\r\n this.outputTarget.classList.remove(this.errorClass);\r\n } else {\r\n this.outputTarget.classList.add(this.errorClass);\r\n }\r\n }\r\n }\r\n\r\n private _isValidCount(count: number) {\r\n let min = 0;\r\n let max = 99999;\r\n\r\n if (this.hasMinValue) {\r\n min = this.minValue;\r\n }\r\n\r\n if (this.hasMaxValue) {\r\n max = this.maxValue;\r\n }\r\n\r\n return count >= min && count <= max;\r\n }\r\n\r\n}\r\n"],"names":["BaseController","context","_this","Proxy","get","obj","prop","returnVal","Reflect","self","test","logProperty","toString","apply","target","thisArg","argArray","log","args","metaValue","name","element","document","head","querySelector","getAttribute","dispatch","eventName","options","mergedOptions","Object","assign","bubbles","cancelable","detail","event","CustomEvent","this","logEvent","dispatchEvent","functionName","application","debug","logger","console","groupCollapsed","identifier","groupEnd","documentElement","hasAttribute","isTurboPreview","Controller","AnchorSpyController","initialize","_checkAnchor","bind","connect","requestAnimationFrame","window","addEventListener","disconnect","removeEventListener","write","preventDefault","_anchor","_key","el","keyValue","replaceAll","location","hash","substr","value","key","String","AppearanceController","_handleVisibility","appear","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","errorMessage","selector","AutoSubmitFormController","submit","forEach","_this2","method","controller","methodName","composeEventName","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","useMutation","useWindowResize","callback","innerWidth","innerHeight","payload","height","Infinity","width","debounce","fn","wait","timeoutId","arguments","clearTimeout","setTimeout","AutosizeController","_handler","style","resize","boxSizing","windowResize","autosize","offset","offsetHeight","clientHeight","scrollHeight","CharCountController","_updateCharCount","inputTarget","charCount","length","outputTarget","innerText","hasErrorClass","_isValidCount","classList","remove","errorClass","add","count","min","max","hasMinValue","minValue","hasMaxValue","maxValue","Number","CheckboxSelectAllController","_toggle","_refresh","hasSelectAllTarget","selectAllTarget","checkboxTargets","checkbox","checked","checkboxesCount","checkboxesCheckedCount","_checked","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","message","ConfirmNavigationController","allowSubmit","confirmNavigation","confirmTurboNavigation","onbeforeunload","_event","_messageValue","DebugController","testTargets","DetectDirtyController","_checkDirty","_cacheLoadValues","restore","_restoreElementFromLoadValue","_getElementValue","_getElementLoadValue","_cacheAttrName","defaultChecked","Array","from","option","defaultSelected","_elementHasCachedLoadValue","_isElementDirty","setAttribute","removeAttribute","cacheValue","defaultValue","DetectDirtyFormController","_formElements","_checkElementDirty","_cacheElementLoadValue","_this3","some","DisableInputsController","toggle","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","href","_id","hasRestoreOnLoadValue","restoreOnLoadValue","hasElementTarget","elementTarget","restoreOnLoad","EmptyDomController","childList","checkEmpty","mutate","_children","_removeNotEmptyClasses","_addEmptyClasses","_addNotEmptyClasses","_removeEmptyClasses","hasEmptyClass","emptyClasses","hasNotEmptyClass","notEmptyClasses","emptyClass","notEmptyClass","hasScopeSelectorValue","scopeSelectorValue","scopeSelector","EnableInputsController","hasEnablerTarget","enablerTarget","enableTargets","FallbackImageController","onerror","hasPlaceholderValue","src","placeholderValue","display","placeholder","FormRcController","formTarget","reset","FormSaveController","_clear","_clearOnSubmit","_formIdentifier","_formData","_formID","elements","hasClearOnSubmitValue","clearOnSubmitValue","clearOnSubmit","IntersectionController","threshold","_threshold","disappear","hasThresholdValue","thresholdValue","map","val","parseFloat","trim","IntervalController","_interval","_intervalHandle","setInterval","secondsValue","clearInterval","seconds","smoothPolyfilled","LazyBlockController","scrollToElement","behavior","block","inline","scrollIntoView","smoothSupported","import","polyfill","polyfillSmooth","getScrollParent","node","overflowY","getComputedStyle","parentElement","body","LightboxImageController","open","close","_dialog","image","className","_imageClassName","_src","srcset","_srcSet","sizes","_sizes","appendChild","insertAdjacentElement","dialogPolyfill","registerDialog","_modalClassName","showModal","hasSrcValue","srcValue","hasSrcSetValue","srcSetValue","hasSizesValue","sizesValue","hasModalClass","modalClass","hasImageClass","imageClass","srcSet","LimitedSelectionCheckboxesController","handleInputs","inputTargets","tickedInputs","reduce","previousValue","hasErrorTarget","errorTarget","MediaPlayerController","play","mediaTarget","pause","restart","currentTime","seek","NestedFormController","_checkStructure","content","templateTarget","replace","_generateID","targetTarget","insertAdjacentHTML","_insertMode","wrapper","closest","_wrapperClass","newRecord","destroyInput","Date","getTime","Math","random","slice","indexOf","hasWrapperSelectorValue","wrapperClassValue","hasInsertModeValue","insertModeValue","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","values","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","_selector","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","constructor","debounces","func","postUpdate","getHeight","parent","postMessage","EphemeralController","_cleanupSelf","cleanup","RegExp","substringIdentifierValueRegex","camelCase","action","classes","ScrollIntoFocusController","hasBehaviorValue","behaviorValue","hasBlockValue","blockValue","hasInlineValue","inlineValue","ScrollToBottomController","scroll","hasModeValue","modeValue","mode","ScrollToController","warn","ScrollToTopController","SelfDestructController","StickyController","createMagicElement","_magicElement","_mode","intersectionRatio","hasStuckClass","stuckClass","TableSortController","sort","_tableHeaders","cell","hasStartSortValue","_sortByColumn","startSortValue","headerCellIndex","_indexOfHeaderCell","index","_reverse","_lastIndex","frag","createDocumentFragment","_tableRows","row","otherRow","cells","otherCells","x","y","sortVal","localeCompare","sensitivity","numeric","caseFirst","sortTop","sortBottom","_this4","_tableBody","tHead","rows","_tableHead","tBodies","startSort","TableTruncateController","truncate","expand","showMoreTarget","_truncated","_limit","_hideElement","_showElement","_reTruncate","hasTruncatedValue","truncatedValue","hasLimitValue","limitValue","limit","truncated","TeleportController","hasInsertValue","hasImmediateValue","immediateValue","execute","destination","targetValue","cloneNode","insertValue","outerHTML","insert","immediate","TimeoutController","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","_this5","toggled","classValue","klass","isTurboFrame","class","clickAway","initial","TurboFrameRCController","frameSrc","_getFrame","_getSrc","_setSrc","setSrc","frame","hasLoadingMessageValue","loadingMessageValue","getElementById","frameIdValue","frameId","loadingMessage","TurboFrameRefreshController","refresh","_poll","intervalValue","hasPollValue","pollValue","interval","poll","WordCountController","updateWordCount","wordCount","matches","match"],"mappings":"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"} \ No newline at end of file diff --git a/dist/utilities/base_controller.d.ts b/dist/utilities/base_controller.d.ts index c04fdd7b..273f631e 100644 --- a/dist/utilities/base_controller.d.ts +++ b/dist/utilities/base_controller.d.ts @@ -2,6 +2,10 @@ import { Context, Controller } from "stimulus"; export declare class BaseController extends Controller { constructor(context: Context); get el(): HTMLElement; + get isTurboPreview(): boolean; + get isTurbolinksPreview(): boolean; + get csrfToken(): string | null; + metaValue(name: string): string | null; dispatch(element: HTMLElement, eventName: string, options?: CustomEventInit): void; log(functionName: string, args?: {}): void; logEvent(eventName: string, event: CustomEvent, element: HTMLElement): void; diff --git a/dist/utilities/base_controller.d.ts.map b/dist/utilities/base_controller.d.ts.map index 76c7089c..d20c3195 100644 --- a/dist/utilities/base_controller.d.ts.map +++ b/dist/utilities/base_controller.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"base_controller.d.ts","sourceRoot":"","sources":["../../src/utilities/base_controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAE7C,qBAAa,cAAe,SAAQ,UAAU;gBAEhC,OAAO,EAAE,OAAO;IAyB5B,IAAI,EAAE,IAAI,WAAW,CAEpB;IAED,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;IAU/E,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,GAAE,EAAO,GAAG,IAAI;IAc9C,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW;CAWrE"} \ No newline at end of file +{"version":3,"file":"base_controller.d.ts","sourceRoot":"","sources":["../../src/utilities/base_controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAE7C,qBAAa,cAAe,SAAQ,UAAU;gBAEhC,OAAO,EAAE,OAAO;IAyB5B,IAAI,EAAE,IAAI,WAAW,CAEpB;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,IAAI,mBAAmB,IAAI,OAAO,CAEjC;IAED,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAKtC,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;IAU/E,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,GAAE,EAAO,GAAG,IAAI;IAc9C,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW;CAWrE"} \ No newline at end of file diff --git a/docs/docs/controllers/base_controller.mdx b/docs/docs/controllers/base_controller.mdx new file mode 100644 index 00000000..c7875a00 --- /dev/null +++ b/docs/docs/controllers/base_controller.mdx @@ -0,0 +1,60 @@ +--- +id: BaseController +title: BaseController +--- + + +## Purpose + +Provide common utilities and base functionality for all Stimulus controllers that extend this controller. + + +## Properties + +This controller provides the following properties to sub-classes. + +| Name | Purpose | Return Value | +| --- | --- | --- | +| `el` | For Typescript projects, provides a wrapper around `this.element` typecast to `HTMLElement` so that type-hinting correctly works for all DOM APIs | The controller root element, as an `HTMLElement` | +| `isTurboPreview` | Whether or not the document is currently displaying a preview from the Hotwire/Turbo cache https://turbo.hotwire.dev/handbook/building#detecting-when-a-preview-is-visible. Also works with legacy Turbolinks | `boolean` | +| `isTurbolinksPreview` | Alias for `isTurboPreview`, both methods work for both Turbolinks and Hotwire | `boolean` | +| `csrfToken` | The current Rails CSRF token, taken from the `` tag Rails inserts into the document head, if present. | `string` or `null` | + +## Methods + +This controller provides the following methods to sub-classes. + +| Name | Parameters | Purpose | Default | +| --- | --- | --- | --- | +| `dispatch` | | Dispatch a custom event | | +| | `element` | The element to dispatch the event on | | +| | `eventName` | The fully qualified name of the event. Usually follows the format `controller-identifier:event` | | +| | `options` (Optional) | The options to initialize the event with. See the options `eventInit` accepts: https://developer.mozilla.org/en-US/docs/Web/API/Event/Event | `{ bubbles: true, cancellable: true, details: { element: this.element } }` | + +| Name | Parameters | Purpose | Return value | +| --- | --- | --- | --- | +| `metaValue` | | Fetch a value from a `` tag in the `` of the document. | `string` or `null` | +| | `name` | The `name` attribute of the `meta` tag to fetch the value of | | + + +## Side Effects / Inherited Behaviour + +If [debug mode](/docs/debugging) is enabled, any controller that extends BaseController controller will automatically log calls to any actions or methods, and events dispatched with `this.dispatch`. + +If there are any getters, setters, methods or properties that should not be logged, you should name them with an underscore prefix i.e. `_foo() {}`, or `_bar = "baz"` to indicate that they are private methods. + + +## How to Use + +```typescript +import {BaseController} from "stimulus-library"; + +export default class extends BaseController { + // ... + + foo() { + this.dispatch( this.el, "my-controller:something-happened", { bubbles: true, cancellable: true, detail: { element: this.el, data: 'thing' } } ) + } + +} +``` \ No newline at end of file diff --git a/docs/sidebars.js b/docs/sidebars.js index 8f36b106..2ae9f5f5 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -12,6 +12,11 @@ module.exports = { "controllers/LazyBlockController", "controllers/TeleportController", "controllers/ToggleClassController", + ], + }, + { + "Extendable Controllers": [ + "controllers/BaseController", ] }, { diff --git a/src/index.ts b/src/index.ts index 94d909a4..625580e6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,7 @@ +// Utilities +export {BaseController} from "./utilities/base_controller"; + +// Controllers export {AnchorSpyController} from "./controllers/anchor_spy_controller"; export {AppearanceController} from "./controllers/utility/appearance_controller"; export {AsyncBlockController} from "./controllers/async_block_controller"; diff --git a/src/utilities/base_controller.ts b/src/utilities/base_controller.ts index c658dac3..79b9c813 100644 --- a/src/utilities/base_controller.ts +++ b/src/utilities/base_controller.ts @@ -31,6 +31,23 @@ export class BaseController extends Controller { return this.element as HTMLElement; } + get isTurboPreview(): boolean { + return document.documentElement.hasAttribute('data-turbo-preview') || document.documentElement.hasAttribute('data-turbolinks-preview'); + } + + get isTurbolinksPreview(): boolean { + return this.isTurboPreview; + } + + get csrfToken(): string | null { + return this.metaValue('csrf-token'); + } + + metaValue(name: string): string | null { + const element = document.head.querySelector(`meta[name="${name}"]`); + return element?.getAttribute('content') || null; + } + dispatch(element: HTMLElement, eventName: string, options: CustomEventInit = {}) { let mergedOptions = Object.assign({}, {bubbles: true, cancelable: true, detail: {target: element}}, options); if (!!mergedOptions.detail.target) {