From 91269eabc911895420d4d6877bdf8e2a2c9cf470 Mon Sep 17 00:00:00 2001 From: Dylan Clarke Date: Mon, 26 Apr 2021 22:34:30 +0100 Subject: [PATCH] feat: TimeDistanceController - Controller that shows the distance in words between the current time and a specific UNIX timestamp. Updates intelligently according to time distance from current. (#24) --- .../visual/time_distance_controller.d.ts | 19 ++++++ .../visual/time_distance_controller.d.ts.map | 1 + dist/index.d.ts | 1 + dist/index.d.ts.map | 2 +- dist/stimulus-library.js | 2 +- dist/stimulus-library.js.map | 2 +- dist/stimulus-library.modern.js | 2 +- dist/stimulus-library.modern.js.map | 2 +- dist/stimulus-library.module.js | 2 +- dist/stimulus-library.module.js.map | 2 +- dist/stimulus-library.umd.js | 2 +- dist/stimulus-library.umd.js.map | 2 +- .../controllers/time_distance_controller.mdx | 65 ++++++++++++++++++ docs/sidebars.js | 1 + .../visual/time_distance_controller.ts | 66 +++++++++++++++++++ src/index.ts | 1 + 16 files changed, 163 insertions(+), 9 deletions(-) create mode 100644 dist/controllers/visual/time_distance_controller.d.ts create mode 100644 dist/controllers/visual/time_distance_controller.d.ts.map create mode 100644 docs/docs/controllers/time_distance_controller.mdx create mode 100644 src/controllers/visual/time_distance_controller.ts diff --git a/dist/controllers/visual/time_distance_controller.d.ts b/dist/controllers/visual/time_distance_controller.d.ts new file mode 100644 index 00000000..f5fea305 --- /dev/null +++ b/dist/controllers/visual/time_distance_controller.d.ts @@ -0,0 +1,19 @@ +import { BaseController } from "../../utilities/base_controller"; +import { Duration } from "date-fns"; +export declare class TimeDistanceController extends BaseController { + static values: { + timestamp: NumberConstructor; + }; + timestampValue: number; + readonly hasTimestampValue: boolean; + _timeout: number | null; + _timestamp: Date; + get _duration(): Duration; + get _nextUpdate(): number | null; + timestampValueChanged(): void; + initialize(): void; + connect(): void; + disconnect(): void; + _update(): void; +} +//# sourceMappingURL=time_distance_controller.d.ts.map \ No newline at end of file diff --git a/dist/controllers/visual/time_distance_controller.d.ts.map b/dist/controllers/visual/time_distance_controller.d.ts.map new file mode 100644 index 00000000..53862b0c --- /dev/null +++ b/dist/controllers/visual/time_distance_controller.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"time_distance_controller.d.ts","sourceRoot":"","sources":["../../../src/controllers/visual/time_distance_controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAC,QAAQ,EAA0D,MAAM,UAAU,CAAC;AAE3F,qBAAa,sBAAuB,SAAQ,cAAc;IACxD,MAAM,CAAC,MAAM;;MAEX;IAEM,cAAc,EAAE,MAAM,CAAC;IAC/B,SAAiB,iBAAiB,EAAE,OAAO,CAAC;IAE5C,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IACvB,UAAU,EAAE,IAAI,CAAC;IAEzB,IAAI,SAAS,IAAI,QAAQ,CAExB;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,IAAI,CAc/B;IAED,qBAAqB;IAIrB,UAAU;IAIV,OAAO;IAOP,UAAU;IAMV,OAAO;CAUR"} \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts index a1523367..a84e86ab 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -44,6 +44,7 @@ export { StickyController } from "./controllers/sticky_controller"; export { TableSortController } from "./controllers/tables/table_sort_controller"; export { TableTruncateController } from "./controllers/tables/table_truncate_controller"; export { TeleportController } from "./controllers/teleport_controller"; +export { TimeDistanceController } from "./controllers/visual/time_distance_controller"; export { TimeoutController } from "./controllers/utility/timeout_controller"; export { ToggleClassController } from "./controllers/toggle_class_controller"; export { TurboFrameRCController } from "./controllers/turbo_frame_rc_controller"; diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map index 3aecd8d4..e4176f14 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":"AACA,OAAO,EAAC,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAC,mBAAmB,EAAC,MAAM,kCAAkC,CAAC;AAGrE,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,mBAAmB,EAAC,MAAM,2CAA2C,CAAC;AAC9E,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,4BAA4B,EAAC,MAAM,qDAAqD,CAAC;AACjG,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 +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/stimulus-library.js b/dist/stimulus-library.js index 6433ae05..7bc61b60 100644 --- a/dist/stimulus-library.js +++ b/dist/stimulus-library.js @@ -1,2 +1,2 @@ -var e=require("stimulus"),t=require("camelcase"),n=require("date-fns"),i=require("lodash-es"),r=require("dialog-polyfill");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(r);function u(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 v=function(e){function t(t){var n;return n=e.call(this,t)||this,new Proxy(f(n),{get:function(e,t){var i=Reflect.get(e,t),r=f(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}})||f(n)}d(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(h({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()}},c(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),g=function(e){function t(){return e.apply(this,arguments)||this}d(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[a.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[a.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[a.default(r.identifier+"-"+t+"-value")]});var l=this.constructor.classes;l&&Object.keys(l).forEach(function(t){return delete e.dataset[a.default(r.identifier+"-"+t+"-class")]})},t}(v),_=function(e){function t(){return e.apply(this,arguments)||this}d(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")},c(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}(v);_.values={key:String};var y=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v),b=function(e){function t(){return e.apply(this,arguments)||this}d(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")})},c(t,[{key:"_errorMessage",get:function(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}}]),t}(v);b.targets=["replace"],b.values={endpoint:String,errorMessage:String,selector:String};var E=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v);const w=(e,t)=>{const n=e[t];return"function"==typeof n?n:(...e)=>{}},k=(e,t,n)=>{let i=e;return!0===n?i=`${t.identifier}:${e}`:"string"==typeof n&&(i=`${n}:${e}`),i},C=(e,t,n)=>{const{bubbles:i,cancelable:r,composed:s}=t||{bubbles:!0,cancelable:!0,composed:!0};return t&&Object.assign(n,{originalEvent:t}),new CustomEvent(e,{bubbles:i,cancelable:r,composed:s,detail:n})},T={dispatchEvent:!0,eventPrefix:!0},V=(e,t={})=>{const{dispatchEvent:n,eventPrefix:i}=Object.assign({},T,t),r=(null==t?void 0:t.element)||e.element,s=e.disconnect.bind(e),o=new IntersectionObserver(t=>{const[s]=t;s.isIntersecting?(t=>{if(e.isVisible=!0,w(e,"appear").call(e,t),n){const n=k("appear",e,i),s=C(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s):e.isVisible&&(t=>{if(e.isVisible=!1,w(e,"disappear").call(e,t),n){const n=k("disappear",e,i),s=C(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]},x={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},S={debug:!1,logger:console};class L{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:S.debug,this.logger=null!==(r=null==t?void 0:t.logger)&&void 0!==r?r:S.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 A extends L{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=()=>{w(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{w(this.controller,"mouseLeave").call(this.controller),this.log("mouseLeave",{hover:!1})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}class D extends L{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=>{w(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 I=(e,t={})=>{const n=new D(e,t);return[n.observe,n.unobserve]},M=e=>{const t=t=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:t};w(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]},N=(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 O=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var e=this;M(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}(v),H=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v);H.targets=["input","output"],H.values={min:Number,max:Number},H.classes=["error"];var P=function(e){function t(){return e.apply(this,arguments)||this}d(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&&tDate.now()+1500&&e.remove():e.dataset.unused=0==t?Date.now().toString():void 0)},i._years=function(e){return e.years||0},i._months=function(e){return e.months||0},i._days=function(e){return e.days||0},i._hours=function(e){return e.hours||0},i._minutes=function(e){return e.minutes||0},i._seconds=function(e){return e.seconds||0},c(t,[{key:"_removeUnused",get:function(){return!!this.hasRemoveUnusedValue&&this.removeUnusedValue}},{key:"endedClasses",get:function(){return this.endedClass.split(" ")}},{key:"countingDownClasses",get:function(){return this.countingDownClass.split(" ")}},{key:"_deadlineDate",get:function(){return new Date(this.deadlineValue)}}]),t}(v);J.values={deadline:String,removeUnused:Boolean},J.targets=["years","months","days","hours","minutes","seconds"],J.classes=["countingDown","ended"];var Y=function(e){function t(){return e.apply(this,arguments)||this}return d(t,e),t.prototype.connect=function(){console.log("Debug Controller",this,this.testTargets)},t}(v);Y.targets=["test"];var G=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.initialize=function(){this._checkDirty=this._checkDirty.bind(this)},n.connect=function(){var e=this.el;this._cacheLoadValues(),this._checkDirty(),e.addEventListener("input",this._checkDirty),e.addEventListener("change",this._checkDirty)},n.disconnect=function(){var e=this.el;e.removeEventListener("input",this._checkDirty),e.removeEventListener("change",this._checkDirty)},n.restore=function(e){null==e||e.preventDefault(),this._restoreElementFromLoadValue()},n._getElementValue=function(){var e=this.el;return W(e)?e.checked:e.value},n._getElementLoadValue=function(){var e=this.el,t=e.getAttribute(this._cacheAttrName);return W(e)?null==t?e.defaultChecked:"true"==t:(null!==t||j(e)&&Array.from(e.options).forEach(function(t){if(t.defaultSelected)return e.value=t.value,t.value}),t)},n._elementHasCachedLoadValue=function(){return this.el.hasAttribute(this._cacheAttrName)},n._checkDirty=function(){var e=this.el;this._isElementDirty()?e.setAttribute("data-dirty","true"):e.removeAttribute("data-dirty")},n._isElementDirty=function(){return this._getElementValue()!==this._getElementLoadValue()},n._restoreElementFromLoadValue=function(){var e=this.el,t=e.getAttribute(this._cacheAttrName);W(e)?(e.setAttribute(this._cacheAttrName,e.checked.toString()),e.checked=null==t?e.defaultChecked:"true"==t):j(e)?null==t?Array.from(e.options).forEach(function(t){t.defaultSelected&&(e.value=t.value)}):e.value=t:e.value=null==t?e.defaultValue:t},n._cacheLoadValues=function(){var e=this.el;!this._elementHasCachedLoadValue()&&W(e)?e.setAttribute(this._cacheAttrName,e.checked.toString()):e.setAttribute(this._cacheAttrName,e.value.toString())},c(t,[{key:"_cacheAttrName",get:function(){return"detect-dirty-load-value"}}]),t}(v),K=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.initialize=function(){this._checkDirty=this._checkDirty.bind(this)},n.connect=function(){var e=this.el;this._cacheLoadValues(),this._checkDirty(),e.addEventListener("input",this._checkDirty),e.addEventListener("change",this._checkDirty)},n.disconnect=function(){var e=this.el;e.removeEventListener("input",this._checkDirty),e.removeEventListener("change",this._checkDirty)},n.restore=function(e){var t=this;null==e||e.preventDefault(),this._formElements.forEach(function(e){return t._restoreElementFromLoadValue(e)})},n._getElementValue=function(e){return W(e)?e.checked:e.value},n._getElementLoadValue=function(e){var t=e.getAttribute(this._cacheAttrName);return W(e)?null==t?e.defaultChecked:"true"==t:(null!==t||j(e)&&Array.from(e.options).forEach(function(t){if(t.defaultSelected)return e.value=t.value,t.value}),t)},n._elementHasCachedLoadValue=function(e){return e.hasAttribute(this._cacheAttrName)},n._checkElementDirty=function(e){this._isElementDirty(e)?e.setAttribute("data-dirty","true"):e.removeAttribute("data-dirty")},n._isElementDirty=function(e){return this._getElementValue(e)!==this._getElementLoadValue(e)},n._cacheElementLoadValue=function(e){!this._elementHasCachedLoadValue(e)&&W(e)?e.setAttribute(this._cacheAttrName,e.checked.toString()):e.setAttribute(this._cacheAttrName,e.value.toString())},n._restoreElementFromLoadValue=function(e){var t=e.getAttribute(this._cacheAttrName);W(e)?(e.setAttribute(this._cacheAttrName,e.checked.toString()),e.checked=null==t?e.defaultChecked:"true"==t):j(e)?null==t?Array.from(e.options).forEach(function(t){t.defaultSelected&&(e.value=t.value)}):e.value=t:e.value=null==t?e.defaultValue:t},n._cacheLoadValues=function(){var e=this;this._formElements.forEach(function(t){return e._cacheElementLoadValue(t)})},n._checkDirty=function(){var e=this;this._formElements.forEach(function(t){return e._checkElementDirty(t)}),this._formElements.some(function(e){return e.hasAttribute("data-dirty")})?this.el.setAttribute("data-dirty","true"):this.el.removeAttribute("data-dirty")},c(t,[{key:"_formElements",get:function(){return Array.from(this.el.querySelectorAll("input, select, textarea"))}},{key:"_cacheAttrName",get:function(){return"detect-dirty-load-value"}}]),t}(v),Q=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasDisablerTarget&&this.disablerTarget.checked?this.disableInputs():this.enableInputs()},n.disableInputs=function(){var e=this.hasClearValue&&this.clearValue;this.disableTargets.forEach(function(t,n){e&&(t.value=""),t.disabled=!0})},n.enableInputs=function(){this.disableTargets.forEach(function(e,t){e.disabled=!1})},t}(v);Q.targets=["disabler","disable"],Q.values={clear:Boolean};var X=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.initialize=function(){this.enable=this.enable.bind(this),this.disable=this.disable.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e.el.addEventListener("click",e.disable)})},n.disconnect=function(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)},n.disable=function(e){var 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))},n.enable=function(e){null==e||e.preventDefault();var t=this.el;this._isDisabled(t)&&(this._setElText(t,this._cacheText),this._enable(t))},n._isDisabled=function(e){return R(e)&&"submit"==e.type||q(e)?e.disabled:"true"==e.dataset.disabled},n._getElText=function(e){return R(e)&&"submit"==e.type?e.value:e.innerText},n._setElText=function(e,t){R(e)&&"submit"==e.type?e.value=t:(q(e)||z(e))&&(e.innerText=t)},n._disable=function(e){R(e)&&"submit"==e.type||q(e)?e.disabled=!0:e.dataset.disabled="true"},n._enable=function(e){R(e)&&"submit"==e.type||q(e)?e.disabled=!1:e.dataset.disabled=void 0},c(t,[{key:"_message",get:function(){return this.hasMessageValue?this.messageValue:"Submitting..."}},{key:"_timeout",get:function(){return this.hasTimeoutValue?this.timeoutValue:1e3}}]),t}(v);X.values={message:String,timeout:Number};var Z=function(e){function t(){return e.apply(this,arguments)||this}return d(t,e),t.prototype.dismiss=function(){this.el.remove()},t}(v),ee=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.connect=function(){var e=this;requestAnimationFrame(function(){e._restoreOnLoad&&e.restore()})},n.clear=function(e){e&&e.preventDefault(),localStorage.removeItem(this._uniqueIdentifier),this.dispatch(this._element,"element-save:cleared")},n.save=function(e){e&&e.preventDefault();var t=this._element,n=this.attributesValue.split(" "),r={};n.forEach(function(e){return r[e]=i.get(t,e)}),localStorage.setItem(this._uniqueIdentifier,JSON.stringify(r)),this.dispatch(t,"element-save:save:success")},n.restore=function(e){e&&e.preventDefault();var t=this._element;if(localStorage.getItem(this._uniqueIdentifier)){var n=JSON.parse(localStorage.getItem(this._uniqueIdentifier));Object.keys(n).forEach(function(e){i.set(t,e,n[e])}),this.dispatch(t,"element-save:restore:success")}else this.dispatch(t,"element-save:restore:empty")},c(t,[{key:"_id",get:function(){if(this.hasIdValue)return this.idValue;var e=this.el.id;if(""!==e)return e;throw new Error("No ID value to uniquely identify this element. Please either specify data-"+this.identifier+"-id-value or give this element an 'id' attribute. ")}},{key:"_uniqueIdentifier",get:function(){return location.href+" "+this._id}},{key:"_restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"_element",get:function(){return this.hasElementTarget?this.elementTarget:this.el}}]),t}(v);ee.targets=["element"],ee.values={id:String,attributes:String,restoreOnLoad:Boolean};var te=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.connect=function(){I(this,{element:this.el,childList:!0}),this.checkEmpty()},n.mutate=function(e){this.checkEmpty()},n.checkEmpty=function(){var e=this.el,t=this._children;0===t.length?(this._removeNotEmptyClasses(),this._addEmptyClasses(),this.dispatch(e,"dom:empty")):(this._addNotEmptyClasses(),this._removeEmptyClasses(),this.dispatch(e,"dom:not-empty",{detail:{count:t.length}}))},n._removeEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).remove.apply(e,this.emptyClasses)},n._addNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).add.apply(e,this.notEmptyClasses)},n._addEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).add.apply(e,this.emptyClasses)},n._removeNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).remove.apply(e,this.notEmptyClasses)},c(t,[{key:"emptyClasses",get:function(){return this.emptyClass.split(" ")}},{key:"notEmptyClasses",get:function(){return this.notEmptyClass.split(" ")}},{key:"_children",get:function(){var e=this.el;return Array.from(this.hasScopeSelectorValue?e.querySelectorAll(this.scopeSelectorValue):e.children)}}]),t}(v);te.classes=["empty","notEmpty"],te.values={scopeSelector:String};var ne=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasEnablerTarget&&this.enablerTarget.checked?this.enableInputs():this.disableInputs()},n.disableInputs=function(){var e=this.hasClearValue&&this.clearValue;this.enableTargets.forEach(function(t,n){e&&(t.value=""),t.disabled=!0})},n.enableInputs=function(){this.enableTargets.forEach(function(e,t){e.disabled=!1})},t}(v);ne.targets=["enabler","enable"],ne.values={clear:Boolean};var ie=function(e){function t(){return e.apply(this,arguments)||this}return d(t,e),t.prototype.connect=function(){var e=this,t=this.el;t.onerror=function(){e.hasPlaceholderValue?t.src=e.placeholderValue:t.style.display="none"}},t}(v);ie.values={placeholder:String};var re=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.submit=function(e){null==e||e.preventDefault(),this.dispatch(this.formTarget,"submit"),this.formTarget.submit()},n.reset=function(e){null==e||e.preventDefault(),this.dispatch(this.formTarget,"reset"),this.formTarget.reset()},t}(v);re.targets=["form"];var se=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.initialize=function(){this._clear=this._clear.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){if(!B(e.el))throw new Error("Expected controller to be mounted on a form element.");e._restoreOnLoad&&e.restore(),e._clearOnSubmit&&e.el.addEventListener("submit",e._clear)})},n.disconnect=function(){this._clearOnSubmit&&this.el.removeEventListener("submit",this._clear)},n._clear=function(){localStorage.removeItem(this._formIdentifier),this.dispatch(this.el,"form-save:cleared")},n.clear=function(e){null==e||e.preventDefault(),this._clear()},n.save=function(e){e.preventDefault(),localStorage.setItem(this._formIdentifier,JSON.stringify(this._formData[this._formIdentifier])),this.dispatch(this.el,"form-save:save:success")},n.restore=function(e){if(null==e||e.preventDefault(),localStorage.getItem(this._formIdentifier)){for(var t,n=JSON.parse(localStorage.getItem(this._formIdentifier)),i=m(this._formElements);!(t=i()).done;){var r=t.value;r.name in n&&(R(r)&&"checkbox"==r.type?r.checked=n[r.name]:R(r)&&"radio"==r.type?r.value==n[r.name]&&(r.checked=!0):r.value=n[r.name])}this.dispatch(this.el,"form-save:restore:success")}else this.dispatch(this.el,"form-save:restore:empty")},c(t,[{key:"_formID",get:function(){if(this.hasIdValue)return this.idValue;var e=this.el.id;if(""!==e)return e;throw new Error("No ID value to uniquely identify this form. Please either specify data-"+this.identifier+"-id-value or give this form an 'id' attribute. ")}},{key:"_formIdentifier",get:function(){return location.href+" "+this._formID}},{key:"_formElements",get:function(){return this.el.elements}},{key:"_formData",get:function(){for(var e,t,n=((e={})[this._formIdentifier]={},e),i=m(this._formElements);!(t=i()).done;){var r=t.value;r.name.length>0&&(R(r)&&"checkbox"==r.type?n[this._formIdentifier][r.name]=r.checked:R(r)&&"radio"==r.type?r.checked&&(n[this._formIdentifier][r.name]=r.value):n[this._formIdentifier][r.name]=r.value)}return n}},{key:"_restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"_clearOnSubmit",get:function(){return!this.hasClearOnSubmitValue||this.clearOnSubmitValue}}]),t}(v);se.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var oe=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.connect=function(){V(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}})},c(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}(v);oe.values={threshold:String};var ae=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._intervalHandle=null,t}d(t,e);var n=t.prototype;return n.initialize=function(){this._interval=this._interval.bind(this)},n.connect=function(){var e=this;if(!this.hasSecondsValue)throw new Error("Expected `secondsValue` to be present");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}(v);ae.values={seconds:Number};var le,ue=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.connect=function(){if("IntersectionObserver"in window){var e=V(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}(b),ce=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,u=void 0===l?"nearest":l;try{var c=function(){e.scrollIntoView({behavior:r,block:a,inline:u})},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(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}d(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),l.default.registerDialog(this._dialog),this._dialog.className=this._modalClassName,this._dialog.showModal(),ce(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,ce(this.el,{behavior:"smooth",block:"end"}).catch(function(){return e.el.scrollIntoView(!1)}))},c(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}(v);fe.values={src:String,srcSet:String,sizes:String},fe.classes=["modal","image"];var pe=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v);pe.targets=["input","error"],pe.values={max:Number,message:String};var me=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v);me.targets=["media"];var ve=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._errors=[],t}d(t,e);var n=t.prototype;return n.connect=function(){this.hasIndexValue||(this.indexValue=-1),this._toggleButtons(),this.el.style.display=0===this._errorCount?"none":""},n.current=function(){try{return Promise.resolve(ce(this._currentError)).then(function(){})}catch(e){return Promise.reject(e)}},n.next=function(){try{var e=this,t=function(){e._index0&&(e.indexValue-=1)},n=function(){if(e._previousError)return Promise.resolve(ce(e._previousError)).then(function(){})}();return Promise.resolve(n&&n.then?n.then(t):t())}catch(e){return Promise.reject(e)}},n.indexValueChanged=function(){this._toggleButtons()},n.selectorValueChanged=function(){this._errors=Array.from(document.querySelectorAll(this._selector))},n._toggleButtons=function(){this.hasNextTarget&&(this.indexValue>=this._errorCount-1?this.nextTarget.setAttribute("disabled","true"):this.nextTarget.removeAttribute("disabled")),this.hasPreviousTarget&&(this.indexValue<=0?this.previousTarget.setAttribute("disabled","true"):this.previousTarget.removeAttribute("disabled"))},c(t,[{key:"_errorCount",get:function(){return this._errors.length}},{key:"_previousIndex",get:function(){var e=this._index-1;return e<0?null:e}},{key:"_nextIndex",get:function(){var e=this._index+1;return e>this._errors.length-1?null:e}},{key:"_index",get:function(){return Math.min(this.hasIndexValue?this.indexValue:0,this._errors.length)}},{key:"_selector",get:function(){if(this.hasSelectorValue)return this.selectorValue;throw new Error("Expected `selectorValue` to be present")}},{key:"_previousError",get:function(){return this._previousIndex?this._errors[this._previousIndex]:null}},{key:"_currentError",get:function(){return this._errors[this._index]}},{key:"_nextError",get:function(){return this._nextIndex?this._errors[this._nextIndex]:null}}]),t}(v);ve.values={selector:String,index:Number},ve.targets=["next","current","previous"];var ge=function(e){function t(){return e.apply(this,arguments)||this}d(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`")},c(t,[{key:"_wrapperClass",get:function(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}},{key:"_insertMode",get:function(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}}]),t}(v);ge.targets=["target","template"],ge.values={insertMode:String,wrapperClass:String};var _e=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v);_e.targets=["password"],_e.classes=["error"];var ye=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v);ye.targets=["password"];var be=function(e){function t(){return e.apply(this,arguments)||this}return d(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)},c(t,[{key:"_selector",get:function(){return this.hasSelectorValue?this.selectorValue:'[data-controller~="'+this.identifier+'"]'}}]),t}(v);be.targets=[],be.values={selector:String};var Ee=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v),we=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.connect=function(){var e,t,n;window.self!==window.top&&(M(this),t={},null===(n=(e=this).constructor.debounces)||void 0===n||n.forEach(n=>{if("string"==typeof n&&(e[n]=N(e[n],null==t?void 0:t.wait)),"object"==typeof n){const{name:i,wait:r}=n;if(!i)return;e[i]=N(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}(v);we.debounces=["postUpdate"];var ke=function(e){function t(){return e.apply(this,arguments)||this}return d(t,e),t.prototype.connect=function(){var e=this;requestAnimationFrame(function(){ce(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}(g);ke.values={behavior:String,block:String,inline:String};var Ce=function(e){function t(){return e.apply(this,arguments)||this}return d(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))&&ce(t,{behavior:"smooth",block:"end"}).catch(function(){return t.scrollIntoView(!1)})},t}(v);Ce.values={mode:String};var Te=function(e){function t(){return e.apply(this,arguments)||this}return d(t,e),t.prototype.scroll=function(){var e=document.querySelector(this.selectorValue);e?ce(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}(v);Te.values={selector:String,behavior:String,block:String,inline:String};var Ve=function(e){function t(){return e.apply(this,arguments)||this}return d(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))&&ce(t,{behavior:"smooth",block:"start"}).catch(function(){return t.scrollIntoView(!1)})},t}(v);Ve.values={mode:String};var xe=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._timeout=null,t}d(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}(v);xe.values={seconds:Number};var Se=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._magicElement=null,t}d(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)},c(t,[{key:"_mode",get:function(){return this.hasModeValue?this.modeValue:"top"}}]),t}(v);Se.classes=["stuck"],Se.values={mode:String};var Le=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._lastIndex=null,t._reverse=!1,t}d(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)||"",u=(null==(s=a[e])?void 0:s.innerText)||"",c=l.localeCompare(u,"en",{sensitivity:"base",numeric:!0,caseFirst:"upper"});return n.dataset.sortTop||i.dataset.sortBottom?n.dataset.sortTop&&i.dataset.sortTop?c:-1:n.dataset.sortBottom||i.dataset.sortTop?n.dataset.sortBottom&&i.dataset.sortBottom?c:1:t._reverse?c>0?-1:1:c}).forEach(function(e){return n.appendChild(e)}),this._tableBody.innerHTML="",this._tableBody.appendChild(n),this._lastIndex=e},c(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}(v);Le.values={startSort:Number};var Ae=function(e){function t(){return e.apply(this,arguments)||this}d(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;I(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)},c(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}(v);Ae.targets=["showMore"],Ae.values={limit:Number,truncated:Boolean};var De=function(e){function t(){return e.apply(this,arguments)||this}d(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}(g);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}d(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}(v);Ie.values={seconds:Number};var Me=function(e){function t(){return e.apply(this,arguments)||this}d(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 A(this,t)})(),this.hasClickAwayValue&&this.clickAwayValue&&((e,t={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},x,t),o=r=>{const o=(null==t?void 0:t.element)||e.element;if(!(o.contains(r.target)||!function(e){const t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return t.top<=n&&t.top+t.height>=0&&t.left<=i&&t.left+t.width>=0}(o)&&n)&&(e.clickOutside&&e.clickOutside(r),i)){const t=k("click:outside",e,s),n=C(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}(v);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}d(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(z(e))return e.href;throw new Error("No link given to drive frame to")},t}(v);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}d(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},c(t,[{key:"_poll",get:function(){return!!this.hasPollValue&&this.pollValue}}]),t}(v);He.values={interval:Number,poll:Boolean};var Pe=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v);Pe.targets=["input","output"],Pe.values={min:Number,max:Number},Pe.classes=["error"],exports.AnchorSpyController=_,exports.AppearanceController=y,exports.AsyncBlockController=b,exports.AutoSubmitFormController=E,exports.AutosizeController=O,exports.BaseController=v,exports.CharCountController=H,exports.CheckboxSelectAllController=P,exports.ClipboardController=F,exports.ConfirmController=U,exports.ConfirmNavigationController=$,exports.CountdownController=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.EphemeralController=g,exports.FallbackImageController=ie,exports.FormRcController=re,exports.FormSaveController=se,exports.IntersectionController=oe,exports.IntervalController=ae,exports.LazyBlockController=ue,exports.LightboxImageController=fe,exports.LimitedSelectionCheckboxesController=pe,exports.MediaPlayerController=me,exports.NavigateFormErrorsController=ve,exports.NestedFormController=ge,exports.PasswordConfirmController=_e,exports.PasswordPeekController=ye,exports.RemoteFormController=be,exports.ResponsiveIframeBodyController=we,exports.ResponsiveIframeWrapperController=Ee,exports.ScrollIntoFocusController=ke,exports.ScrollToBottomController=Ce,exports.ScrollToController=Te,exports.ScrollToTopController=Ve,exports.SelfDestructController=xe,exports.StickyController=Se,exports.TableSortController=Le,exports.TableTruncateController=Ae,exports.TeleportController=De,exports.TimeoutController=Ie,exports.ToggleClassController=Me,exports.TurboFrameRCController=Oe,exports.TurboFrameRefreshController=He,exports.WordCountController=Pe; +var t=require("stimulus"),e=require("camelcase"),n=require("date-fns"),i=require("lodash-es"),r=require("dialog-polyfill");function s(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}function o(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach(function(n){if("default"!==n){var i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,i.get?i:{enumerable:!0,get:function(){return t[n]}})}}),e.default=t,e}var a=s(e),l=s(r);function u(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 v=function(t){function e(e){var n;return n=t.call(this,e)||this,new Proxy(f(n),{get:function(t,e){var i=Reflect.get(t,e),r=f(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}})||f(n)}d(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(h({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()}},c(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.Controller),g=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n._cleanupSelf=function(){this.cleanup(this.el)},n.cleanup=function(t){var e,n,i,r=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 s=new RegExp("(s|^)"+this.identifier+"\\..+?(s|$)","g");t.dataset.target=(null==(n=t.dataset.target)?void 0:n.replaceAll(s,""))||"",delete t.dataset[a.default(this.identifier+"-target")],""==t.dataset.target&&delete t.dataset.target,t.dataset.action=(null==(i=t.dataset.target)?void 0:i.replaceAll(s,""))||"",delete t.dataset[a.default(this.identifier+"-action")],""==t.dataset.action&&delete t.dataset.action;var o=this.constructor.values;o&&Object.keys(o).forEach(function(e){return delete t.dataset[a.default(r.identifier+"-"+e+"-value")]});var l=this.constructor.classes;l&&Object.keys(l).forEach(function(e){return delete t.dataset[a.default(r.identifier+"-"+e+"-class")]})},e}(v),_=function(t){function e(){return t.apply(this,arguments)||this}d(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")},c(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}(v);_.values={key:String};var y=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v),b=function(t){function e(){return t.apply(this,arguments)||this}d(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")})},c(e,[{key:"_errorMessage",get:function(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}}]),e}(v);b.targets=["replace"],b.values={endpoint:String,errorMessage:String,selector:String};var E=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);const w=(t,e)=>{const n=t[e];return"function"==typeof n?n:(...t)=>{}},T=(t,e,n)=>{let i=t;return!0===n?i=`${e.identifier}:${t}`:"string"==typeof n&&(i=`${n}:${t}`),i},k=(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})},C={dispatchEvent:!0,eventPrefix:!0},V=(t,e={})=>{const{dispatchEvent:n,eventPrefix:i}=Object.assign({},C,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,w(t,"appear").call(t,e),n){const n=T("appear",t,i),s=k(n,null,{controller:t,entry:e});r.dispatchEvent(s)}})(s):t.isVisible&&(e=>{if(t.isVisible=!1,w(t,"disappear").call(t,e),n){const n=T("disappear",t,i),s=k(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]},x={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},S={debug:!1,logger:console};class L{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:S.debug,this.logger=null!==(r=null==e?void 0:e.logger)&&void 0!==r?r:S.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 D extends L{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=()=>{w(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{w(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 A extends L{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=>{w(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 I=(t,e={})=>{const n=new A(t,e);return[n.observe,n.unobserve]},M=t=>{const e=e=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:e};w(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]},N=(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 O=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var t=this;M(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}(v),H=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);H.targets=["input","output"],H.values={min:Number,max:Number},H.classes=["error"];var P=function(t){function e(){return t.apply(this,arguments)||this}d(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&&eDate.now()+1500&&t.remove():t.dataset.unused=0==e?Date.now().toString():void 0)},i._years=function(t){return t.years||0},i._months=function(t){return t.months||0},i._days=function(t){return t.days||0},i._hours=function(t){return t.hours||0},i._minutes=function(t){return t.minutes||0},i._seconds=function(t){return t.seconds||0},c(e,[{key:"_removeUnused",get:function(){return!!this.hasRemoveUnusedValue&&this.removeUnusedValue}},{key:"endedClasses",get:function(){return this.endedClass.split(" ")}},{key:"countingDownClasses",get:function(){return this.countingDownClass.split(" ")}},{key:"_deadlineDate",get:function(){return new Date(this.deadlineValue)}}]),e}(v);J.values={deadline:String,removeUnused:Boolean},J.targets=["years","months","days","hours","minutes","seconds"],J.classes=["countingDown","ended"];var Y=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.connect=function(){console.log("Debug Controller",this,this.testTargets)},e}(v);Y.targets=["test"];var G=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.initialize=function(){this._checkDirty=this._checkDirty.bind(this)},n.connect=function(){var t=this.el;this._cacheLoadValues(),this._checkDirty(),t.addEventListener("input",this._checkDirty),t.addEventListener("change",this._checkDirty)},n.disconnect=function(){var t=this.el;t.removeEventListener("input",this._checkDirty),t.removeEventListener("change",this._checkDirty)},n.restore=function(t){null==t||t.preventDefault(),this._restoreElementFromLoadValue()},n._getElementValue=function(){var t=this.el;return U(t)?t.checked:t.value},n._getElementLoadValue=function(){var t=this.el,e=t.getAttribute(this._cacheAttrName);return U(t)?null==e?t.defaultChecked:"true"==e:(null!==e||j(t)&&Array.from(t.options).forEach(function(e){if(e.defaultSelected)return t.value=e.value,e.value}),e)},n._elementHasCachedLoadValue=function(){return this.el.hasAttribute(this._cacheAttrName)},n._checkDirty=function(){var t=this.el;this._isElementDirty()?t.setAttribute("data-dirty","true"):t.removeAttribute("data-dirty")},n._isElementDirty=function(){return this._getElementValue()!==this._getElementLoadValue()},n._restoreElementFromLoadValue=function(){var t=this.el,e=t.getAttribute(this._cacheAttrName);U(t)?(t.setAttribute(this._cacheAttrName,t.checked.toString()),t.checked=null==e?t.defaultChecked:"true"==e):j(t)?null==e?Array.from(t.options).forEach(function(e){e.defaultSelected&&(t.value=e.value)}):t.value=e:t.value=null==e?t.defaultValue:e},n._cacheLoadValues=function(){var t=this.el;!this._elementHasCachedLoadValue()&&U(t)?t.setAttribute(this._cacheAttrName,t.checked.toString()):t.setAttribute(this._cacheAttrName,t.value.toString())},c(e,[{key:"_cacheAttrName",get:function(){return"detect-dirty-load-value"}}]),e}(v),K=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.initialize=function(){this._checkDirty=this._checkDirty.bind(this)},n.connect=function(){var t=this.el;this._cacheLoadValues(),this._checkDirty(),t.addEventListener("input",this._checkDirty),t.addEventListener("change",this._checkDirty)},n.disconnect=function(){var t=this.el;t.removeEventListener("input",this._checkDirty),t.removeEventListener("change",this._checkDirty)},n.restore=function(t){var e=this;null==t||t.preventDefault(),this._formElements.forEach(function(t){return e._restoreElementFromLoadValue(t)})},n._getElementValue=function(t){return U(t)?t.checked:t.value},n._getElementLoadValue=function(t){var e=t.getAttribute(this._cacheAttrName);return U(t)?null==e?t.defaultChecked:"true"==e:(null!==e||j(t)&&Array.from(t.options).forEach(function(e){if(e.defaultSelected)return t.value=e.value,e.value}),e)},n._elementHasCachedLoadValue=function(t){return t.hasAttribute(this._cacheAttrName)},n._checkElementDirty=function(t){this._isElementDirty(t)?t.setAttribute("data-dirty","true"):t.removeAttribute("data-dirty")},n._isElementDirty=function(t){return this._getElementValue(t)!==this._getElementLoadValue(t)},n._cacheElementLoadValue=function(t){!this._elementHasCachedLoadValue(t)&&U(t)?t.setAttribute(this._cacheAttrName,t.checked.toString()):t.setAttribute(this._cacheAttrName,t.value.toString())},n._restoreElementFromLoadValue=function(t){var e=t.getAttribute(this._cacheAttrName);U(t)?(t.setAttribute(this._cacheAttrName,t.checked.toString()),t.checked=null==e?t.defaultChecked:"true"==e):j(t)?null==e?Array.from(t.options).forEach(function(e){e.defaultSelected&&(t.value=e.value)}):t.value=e:t.value=null==e?t.defaultValue:e},n._cacheLoadValues=function(){var t=this;this._formElements.forEach(function(e){return t._cacheElementLoadValue(e)})},n._checkDirty=function(){var t=this;this._formElements.forEach(function(e){return t._checkElementDirty(e)}),this._formElements.some(function(t){return t.hasAttribute("data-dirty")})?this.el.setAttribute("data-dirty","true"):this.el.removeAttribute("data-dirty")},c(e,[{key:"_formElements",get:function(){return Array.from(this.el.querySelectorAll("input, select, textarea"))}},{key:"_cacheAttrName",get:function(){return"detect-dirty-load-value"}}]),e}(v),Q=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasDisablerTarget&&this.disablerTarget.checked?this.disableInputs():this.enableInputs()},n.disableInputs=function(){var t=this.hasClearValue&&this.clearValue;this.disableTargets.forEach(function(e,n){t&&(e.value=""),e.disabled=!0})},n.enableInputs=function(){this.disableTargets.forEach(function(t,e){t.disabled=!1})},e}(v);Q.targets=["disabler","disable"],Q.values={clear:Boolean};var X=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.initialize=function(){this.enable=this.enable.bind(this),this.disable=this.disable.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t.el.addEventListener("click",t.disable)})},n.disconnect=function(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)},n.disable=function(t){var e=this.el;this._isDisabled(e)?(null==t||t.preventDefault(),null==t||t.stopImmediatePropagation()):(this._cacheText=this._getElText(e),this._setElText(e,this._message),this._disable(e),setTimeout(this.enable,this._timeout))},n.enable=function(t){null==t||t.preventDefault();var e=this.el;this._isDisabled(e)&&(this._setElText(e,this._cacheText),this._enable(e))},n._isDisabled=function(t){return R(t)&&"submit"==t.type||q(t)?t.disabled:"true"==t.dataset.disabled},n._getElText=function(t){return R(t)&&"submit"==t.type?t.value:t.innerText},n._setElText=function(t,e){R(t)&&"submit"==t.type?t.value=e:(q(t)||F(t))&&(t.innerText=e)},n._disable=function(t){R(t)&&"submit"==t.type||q(t)?t.disabled=!0:t.dataset.disabled="true"},n._enable=function(t){R(t)&&"submit"==t.type||q(t)?t.disabled=!1:t.dataset.disabled=void 0},c(e,[{key:"_message",get:function(){return this.hasMessageValue?this.messageValue:"Submitting..."}},{key:"_timeout",get:function(){return this.hasTimeoutValue?this.timeoutValue:1e3}}]),e}(v);X.values={message:String,timeout:Number};var Z=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.dismiss=function(){this.el.remove()},e}(v),tt=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){var t=this;requestAnimationFrame(function(){t._restoreOnLoad&&t.restore()})},n.clear=function(t){t&&t.preventDefault(),localStorage.removeItem(this._uniqueIdentifier),this.dispatch(this._element,"element-save:cleared")},n.save=function(t){t&&t.preventDefault();var e=this._element,n=this.attributesValue.split(" "),r={};n.forEach(function(t){return r[t]=i.get(e,t)}),localStorage.setItem(this._uniqueIdentifier,JSON.stringify(r)),this.dispatch(e,"element-save:save:success")},n.restore=function(t){t&&t.preventDefault();var e=this._element;if(localStorage.getItem(this._uniqueIdentifier)){var n=JSON.parse(localStorage.getItem(this._uniqueIdentifier));Object.keys(n).forEach(function(t){i.set(e,t,n[t])}),this.dispatch(e,"element-save:restore:success")}else this.dispatch(e,"element-save:restore:empty")},c(e,[{key:"_id",get:function(){if(this.hasIdValue)return this.idValue;var t=this.el.id;if(""!==t)return t;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. ")}},{key:"_uniqueIdentifier",get:function(){return location.href+" "+this._id}},{key:"_restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"_element",get:function(){return this.hasElementTarget?this.elementTarget:this.el}}]),e}(v);tt.targets=["element"],tt.values={id:String,attributes:String,restoreOnLoad:Boolean};var et=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){I(this,{element:this.el,childList:!0}),this.checkEmpty()},n.mutate=function(t){this.checkEmpty()},n.checkEmpty=function(){var t=this.el,e=this._children;0===e.length?(this._removeNotEmptyClasses(),this._addEmptyClasses(),this.dispatch(t,"dom:empty")):(this._addNotEmptyClasses(),this._removeEmptyClasses(),this.dispatch(t,"dom:not-empty",{detail:{count:e.length}}))},n._removeEmptyClasses=function(){var t;this.hasEmptyClass&&(t=this.el.classList).remove.apply(t,this.emptyClasses)},n._addNotEmptyClasses=function(){var t;this.hasNotEmptyClass&&(t=this.el.classList).add.apply(t,this.notEmptyClasses)},n._addEmptyClasses=function(){var t;this.hasEmptyClass&&(t=this.el.classList).add.apply(t,this.emptyClasses)},n._removeNotEmptyClasses=function(){var t;this.hasNotEmptyClass&&(t=this.el.classList).remove.apply(t,this.notEmptyClasses)},c(e,[{key:"emptyClasses",get:function(){return this.emptyClass.split(" ")}},{key:"notEmptyClasses",get:function(){return this.notEmptyClass.split(" ")}},{key:"_children",get:function(){var t=this.el;return Array.from(this.hasScopeSelectorValue?t.querySelectorAll(this.scopeSelectorValue):t.children)}}]),e}(v);et.classes=["empty","notEmpty"],et.values={scopeSelector:String};var nt=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasEnablerTarget&&this.enablerTarget.checked?this.enableInputs():this.disableInputs()},n.disableInputs=function(){var t=this.hasClearValue&&this.clearValue;this.enableTargets.forEach(function(e,n){t&&(e.value=""),e.disabled=!0})},n.enableInputs=function(){this.enableTargets.forEach(function(t,e){t.disabled=!1})},e}(v);nt.targets=["enabler","enable"],nt.values={clear:Boolean};var it=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.connect=function(){var t=this,e=this.el;e.onerror=function(){t.hasPlaceholderValue?e.src=t.placeholderValue:e.style.display="none"}},e}(v);it.values={placeholder:String};var rt=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.submit=function(t){null==t||t.preventDefault(),this.dispatch(this.formTarget,"submit"),this.formTarget.submit()},n.reset=function(t){null==t||t.preventDefault(),this.dispatch(this.formTarget,"reset"),this.formTarget.reset()},e}(v);rt.targets=["form"];var st=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.initialize=function(){this._clear=this._clear.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){if(!B(t.el))throw new Error("Expected controller to be mounted on a form element.");t._restoreOnLoad&&t.restore(),t._clearOnSubmit&&t.el.addEventListener("submit",t._clear)})},n.disconnect=function(){this._clearOnSubmit&&this.el.removeEventListener("submit",this._clear)},n._clear=function(){localStorage.removeItem(this._formIdentifier),this.dispatch(this.el,"form-save:cleared")},n.clear=function(t){null==t||t.preventDefault(),this._clear()},n.save=function(t){t.preventDefault(),localStorage.setItem(this._formIdentifier,JSON.stringify(this._formData[this._formIdentifier])),this.dispatch(this.el,"form-save:save:success")},n.restore=function(t){if(null==t||t.preventDefault(),localStorage.getItem(this._formIdentifier)){for(var e,n=JSON.parse(localStorage.getItem(this._formIdentifier)),i=m(this._formElements);!(e=i()).done;){var r=e.value;r.name in n&&(R(r)&&"checkbox"==r.type?r.checked=n[r.name]:R(r)&&"radio"==r.type?r.value==n[r.name]&&(r.checked=!0):r.value=n[r.name])}this.dispatch(this.el,"form-save:restore:success")}else this.dispatch(this.el,"form-save:restore:empty")},c(e,[{key:"_formID",get:function(){if(this.hasIdValue)return this.idValue;var t=this.el.id;if(""!==t)return t;throw new Error("No ID value to uniquely identify this form. Please either specify data-"+this.identifier+"-id-value or give this form an 'id' attribute. ")}},{key:"_formIdentifier",get:function(){return location.href+" "+this._formID}},{key:"_formElements",get:function(){return this.el.elements}},{key:"_formData",get:function(){for(var t,e,n=((t={})[this._formIdentifier]={},t),i=m(this._formElements);!(e=i()).done;){var r=e.value;r.name.length>0&&(R(r)&&"checkbox"==r.type?n[this._formIdentifier][r.name]=r.checked:R(r)&&"radio"==r.type?r.checked&&(n[this._formIdentifier][r.name]=r.value):n[this._formIdentifier][r.name]=r.value)}return n}},{key:"_restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"_clearOnSubmit",get:function(){return!this.hasClearOnSubmitValue||this.clearOnSubmitValue}}]),e}(v);st.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var ot=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){V(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}})},c(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}(v);ot.values={threshold:String};var at=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._intervalHandle=null,e}d(e,t);var n=e.prototype;return n.initialize=function(){this._interval=this._interval.bind(this)},n.connect=function(){var t=this;if(!this.hasSecondsValue)throw new Error("Expected `secondsValue` to be present");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}(v);at.values={seconds:Number};var lt,ut=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){if("IntersectionObserver"in window){var t=V(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}(b),ct=function(t,e){var n=void 0===e?{}:e,i=n.behavior,r=void 0===i?"smooth":i,s=n.block,a=void 0===s?"start":s,l=n.inline,u=void 0===l?"nearest":l;try{var c=function(){t.scrollIntoView({behavior:r,block:a,inline:u})},h=function(){if("smooth"==r&&!ht)return Promise.resolve(function(){try{return Promise.resolve(Promise.resolve().then(function(){return o(require("smoothscroll-polyfill"))})).then(function(t){lt||(lt=!0,(0,t.polyfill)())})}catch(t){return Promise.reject(t)}}()).then(function(){})}();return Promise.resolve(h&&h.then?h.then(c):c())}catch(t){return Promise.reject(t)}},ht="scrollBehavior"in document.documentElement.style;function dt(t){if(!t)return null;var e=getComputedStyle(t).overflowY;return"visible"!==e&&"hidden"!==e&&t.scrollHeight>=t.clientHeight?t:dt(t.parentElement)||document.body}var ft=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._dialog=null,e}d(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),l.default.registerDialog(this._dialog),this._dialog.className=this._modalClassName,this._dialog.showModal(),ct(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,ct(this.el,{behavior:"smooth",block:"end"}).catch(function(){return t.el.scrollIntoView(!1)}))},c(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}(v);ft.values={src:String,srcSet:String,sizes:String},ft.classes=["modal","image"];var pt=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);pt.targets=["input","error"],pt.values={max:Number,message:String};var mt=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);mt.targets=["media"];var vt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._errors=[],e}d(e,t);var n=e.prototype;return n.connect=function(){this.hasIndexValue||(this.indexValue=-1),this._toggleButtons(),this.el.style.display=0===this._errorCount?"none":""},n.current=function(){try{return Promise.resolve(ct(this._currentError)).then(function(){})}catch(t){return Promise.reject(t)}},n.next=function(){try{var t=this,e=function(){t._index0&&(t.indexValue-=1)},n=function(){if(t._previousError)return Promise.resolve(ct(t._previousError)).then(function(){})}();return Promise.resolve(n&&n.then?n.then(e):e())}catch(t){return Promise.reject(t)}},n.indexValueChanged=function(){this._toggleButtons()},n.selectorValueChanged=function(){this._errors=Array.from(document.querySelectorAll(this._selector))},n._toggleButtons=function(){this.hasNextTarget&&(this.indexValue>=this._errorCount-1?this.nextTarget.setAttribute("disabled","true"):this.nextTarget.removeAttribute("disabled")),this.hasPreviousTarget&&(this.indexValue<=0?this.previousTarget.setAttribute("disabled","true"):this.previousTarget.removeAttribute("disabled"))},c(e,[{key:"_errorCount",get:function(){return this._errors.length}},{key:"_previousIndex",get:function(){var t=this._index-1;return t<0?null:t}},{key:"_nextIndex",get:function(){var t=this._index+1;return t>this._errors.length-1?null:t}},{key:"_index",get:function(){return Math.min(this.hasIndexValue?this.indexValue:0,this._errors.length)}},{key:"_selector",get:function(){if(this.hasSelectorValue)return this.selectorValue;throw new Error("Expected `selectorValue` to be present")}},{key:"_previousError",get:function(){return this._previousIndex?this._errors[this._previousIndex]:null}},{key:"_currentError",get:function(){return this._errors[this._index]}},{key:"_nextError",get:function(){return this._nextIndex?this._errors[this._nextIndex]:null}}]),e}(v);vt.values={selector:String,index:Number},vt.targets=["next","current","previous"];var gt=function(t){function e(){return t.apply(this,arguments)||this}d(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`")},c(e,[{key:"_wrapperClass",get:function(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}},{key:"_insertMode",get:function(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}}]),e}(v);gt.targets=["target","template"],gt.values={insertMode:String,wrapperClass:String};var _t=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);_t.targets=["password"],_t.classes=["error"];var yt=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);yt.targets=["password"];var bt=function(t){function e(){return t.apply(this,arguments)||this}return d(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)},c(e,[{key:"_selector",get:function(){return this.hasSelectorValue?this.selectorValue:'[data-controller~="'+this.identifier+'"]'}}]),e}(v);bt.targets=[],bt.values={selector:String};var Et=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v),wt=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){var t,e,n;window.self!==window.top&&(M(this),e={},null===(n=(t=this).constructor.debounces)||void 0===n||n.forEach(n=>{if("string"==typeof n&&(t[n]=N(t[n],null==e?void 0:e.wait)),"object"==typeof n){const{name:i,wait:r}=n;if(!i)return;t[i]=N(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}(v);wt.debounces=["postUpdate"];var Tt=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.connect=function(){var t=this;requestAnimationFrame(function(){ct(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}(g);Tt.values={behavior:String,block:String,inline:String};var kt=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.scroll=function(t){var e;null==t||t.preventDefault(),null!=(e="document"==(this.hasModeValue?this.modeValue:"document")?document.body:dt(this.el))&&ct(e,{behavior:"smooth",block:"end"}).catch(function(){return e.scrollIntoView(!1)})},e}(v);kt.values={mode:String};var Ct=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.scroll=function(){var t=document.querySelector(this.selectorValue);t?ct(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}(v);Ct.values={selector:String,behavior:String,block:String,inline:String};var Vt=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.scroll=function(t){var e;null==t||t.preventDefault(),null!=(e="document"==(this.hasModeValue?this.modeValue:"document")?document.body:dt(this.el))&&ct(e,{behavior:"smooth",block:"start"}).catch(function(){return e.scrollIntoView(!1)})},e}(v);Vt.values={mode:String};var xt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeout=null,e}d(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}(v);xt.values={seconds:Number};var St=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._magicElement=null,e}d(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)},c(e,[{key:"_mode",get:function(){return this.hasModeValue?this.modeValue:"top"}}]),e}(v);St.classes=["stuck"],St.values={mode:String};var Lt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._lastIndex=null,e._reverse=!1,e}d(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)||"",u=(null==(s=a[t])?void 0:s.innerText)||"",c=l.localeCompare(u,"en",{sensitivity:"base",numeric:!0,caseFirst:"upper"});return n.dataset.sortTop||i.dataset.sortBottom?n.dataset.sortTop&&i.dataset.sortTop?c:-1:n.dataset.sortBottom||i.dataset.sortTop?n.dataset.sortBottom&&i.dataset.sortBottom?c:1:e._reverse?c>0?-1:1:c}).forEach(function(t){return n.appendChild(t)}),this._tableBody.innerHTML="",this._tableBody.appendChild(n),this._lastIndex=t},c(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}(v);Lt.values={startSort:Number};var Dt=function(t){function e(){return t.apply(this,arguments)||this}d(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;I(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)},c(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}(v);Dt.targets=["showMore"],Dt.values={limit:Number,truncated:Boolean};var At=function(t){function e(){return t.apply(this,arguments)||this}d(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}(g);At.values={target:String,insert:String,immediate:Boolean};var It=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeout=null,e}d(e,t);var i=e.prototype;return i.timestampValueChanged=function(){this._timestamp=n.toDate(1e3*this.timestampValue)},i.initialize=function(){this._update=this._update.bind(this)},i.connect=function(){if(!this.hasTimestampValue)throw new Error("Expected `timestampValue` to be present");this._update()},i.disconnect=function(){this._timeout&&window.clearTimeout(this._timeout)},i._update=function(){this.el.innerHTML=n.formatDistanceToNow(this._timestamp,{addSuffix:!0,includeSeconds:!0}),this._nextUpdate&&(this._timeout=window.setTimeout(this._update,this._nextUpdate))},c(e,[{key:"_duration",get:function(){return n.isPast(this._timestamp)?n.intervalToDuration({start:this._timestamp,end:new Date}):n.intervalToDuration({start:new Date,end:this._timestamp})}},{key:"_nextUpdate",get:function(){var t=this._duration;return t.years&&t.years>0||t.months&&t.months>0||t.days&&t.days>0?null:t.hours&&t.hours>0?18e5:3e4}}]),e}(v);It.values={timestamp:Number};var Mt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeoutHandle=null,e}d(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}(v);Mt.values={seconds:Number};var Nt=function(t){function e(){return t.apply(this,arguments)||this}d(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 D(this,e)})(),this.hasClickAwayValue&&this.clickAwayValue&&((t,e={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},x,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=T("click:outside",t,s),n=k(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}(v);function Ot(t){return"TURBO-FRAME"==t.nodeName}Nt.targets=["toggle"],Nt.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var Ht=function(t){function e(){return t.apply(this,arguments)||this}d(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(Ot(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(F(t))return t.href;throw new Error("No link given to drive frame to")},e}(v);Ht.values={frameId:String,src:String,loadingMessage:String};var Pt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeoutHandle=null,e}d(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(!Ot(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},c(e,[{key:"_poll",get:function(){return!!this.hasPollValue&&this.pollValue}}]),e}(v);Pt.values={interval:Number,poll:Boolean};var zt=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);zt.targets=["input","output"],zt.values={min:Number,max:Number},zt.classes=["error"],exports.AnchorSpyController=_,exports.AppearanceController=y,exports.AsyncBlockController=b,exports.AutoSubmitFormController=E,exports.AutosizeController=O,exports.BaseController=v,exports.CharCountController=H,exports.CheckboxSelectAllController=P,exports.ClipboardController=z,exports.ConfirmController=W,exports.ConfirmNavigationController=$,exports.CountdownController=J,exports.DebugController=Y,exports.DetectDirtyController=G,exports.DetectDirtyFormController=K,exports.DisableInputsController=Q,exports.DisableWithController=X,exports.DismissableController=Z,exports.ElementSaveController=tt,exports.EmptyDomController=et,exports.EnableInputsController=nt,exports.EphemeralController=g,exports.FallbackImageController=it,exports.FormRcController=rt,exports.FormSaveController=st,exports.IntersectionController=ot,exports.IntervalController=at,exports.LazyBlockController=ut,exports.LightboxImageController=ft,exports.LimitedSelectionCheckboxesController=pt,exports.MediaPlayerController=mt,exports.NavigateFormErrorsController=vt,exports.NestedFormController=gt,exports.PasswordConfirmController=_t,exports.PasswordPeekController=yt,exports.RemoteFormController=bt,exports.ResponsiveIframeBodyController=wt,exports.ResponsiveIframeWrapperController=Et,exports.ScrollIntoFocusController=Tt,exports.ScrollToBottomController=kt,exports.ScrollToController=Ct,exports.ScrollToTopController=Vt,exports.SelfDestructController=xt,exports.StickyController=St,exports.TableSortController=Lt,exports.TableTruncateController=Dt,exports.TeleportController=At,exports.TimeDistanceController=It,exports.TimeoutController=Mt,exports.ToggleClassController=Nt,exports.TurboFrameRCController=Ht,exports.TurboFrameRefreshController=Pt,exports.WordCountController=zt; //# sourceMappingURL=stimulus-library.js.map diff --git a/dist/stimulus-library.js.map b/dist/stimulus-library.js.map index c94cac20..1e5d1d16 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/utilities/ephemeral_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/visual/countdown_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/navigate_form_errors_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/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 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 {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 {Duration, intervalToDuration, isPast} from \"date-fns\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class CountdownController extends BaseController {\r\n\r\n static values = {deadline: String, removeUnused: Boolean};\r\n static targets = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\r\n static classes = [\"countingDown\", \"ended\"];\r\n\r\n // Values\r\n declare readonly deadlineValue: string;\r\n declare readonly removeUnusedValue: boolean;\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n // Targets\r\n declare readonly hasYearsTarget: boolean;\r\n declare readonly yearsTarget: HTMLElement;\r\n declare readonly hasMonthsTarget: boolean;\r\n declare readonly monthsTarget: HTMLElement;\r\n declare readonly hasDaysTarget: boolean;\r\n declare readonly daysTarget: HTMLElement;\r\n declare readonly hasHoursTarget: boolean;\r\n declare readonly hoursTarget: HTMLElement;\r\n declare readonly hasMinutesTarget: boolean;\r\n declare readonly minutesTarget: HTMLElement;\r\n declare readonly hasSecondsTarget: boolean;\r\n declare readonly secondsTarget: HTMLElement;\r\n // Classes\r\n declare readonly countingDownClass: string;\r\n declare readonly hasCountingDownClass: boolean;\r\n declare readonly endedClass: string;\r\n declare readonly hasEndedClass: boolean;\r\n // Instance Data\r\n _interval: null | ReturnType = null;\r\n\r\n get _removeUnused(): boolean {\r\n return this.hasRemoveUnusedValue ? this.removeUnusedValue : false;\r\n }\r\n\r\n get endedClasses(): string[] {\r\n return this.endedClass.split(' ');\r\n }\r\n\r\n get countingDownClasses(): string[] {\r\n return this.countingDownClass.split(' ');\r\n }\r\n\r\n get _deadlineDate() {\r\n return new Date(this.deadlineValue);\r\n }\r\n\r\n connect() {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.add(...this.countingDownClasses);\r\n }\r\n }\r\n\r\n disconnect() {\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.remove(...this.endedClasses);\r\n }\r\n }\r\n\r\n deadlineValueChanged() {\r\n // Countdown had previously ended, restart ticking. Updating mid-tick will just work.\r\n if (this._interval == null) {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n }\r\n }\r\n\r\n _tick() {\r\n try {\r\n const now = new Date();\r\n let distance: Duration = {};\r\n\r\n if (isPast(this._deadlineDate)) {\r\n distance = {years: 0, months: 0, days: 0, hours: 0, minutes: 0, seconds: 0};\r\n // Countdown has ended, stop ticking\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.add(...this.endedClasses);\r\n }\r\n this.dispatch(this.el, \"countdown:ended\");\r\n } else {\r\n distance = intervalToDuration({start: this._deadlineDate, end: now});\r\n }\r\n\r\n if (this.hasYearsTarget) {\r\n this._updateTarget(this.yearsTarget, this._years(distance));\r\n }\r\n if (this.hasMonthsTarget) {\r\n this._updateTarget(this.monthsTarget, this._months(distance));\r\n }\r\n if (this.hasDaysTarget) {\r\n this._updateTarget(this.daysTarget, this._days(distance));\r\n }\r\n if (this.hasHoursTarget) {\r\n this._updateTarget(this.hoursTarget, this._hours(distance));\r\n }\r\n if (this.hasMinutesTarget) {\r\n this._updateTarget(this.minutesTarget, this._minutes(distance));\r\n }\r\n if (this.hasSecondsTarget) {\r\n this._updateTarget(this.secondsTarget, this._seconds(distance));\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n this._clearTick();\r\n }\r\n }\r\n\r\n _clearTick() {\r\n if (this._interval) {\r\n clearInterval(this._interval);\r\n this._interval = null;\r\n }\r\n }\r\n\r\n _updateTarget(target: HTMLElement, value: number) {\r\n this._removeTargetIfUnused(target, value);\r\n target.innerHTML = value.toString();\r\n }\r\n\r\n _removeTargetIfUnused(target: HTMLElement, value: number) {\r\n if (this._removeUnused) {\r\n if (value === 0 && target.dataset.unused) {\r\n if (Number.parseInt(target.dataset.unused) > Date.now() + 1500) {\r\n target.remove();\r\n }\r\n } else if (value == 0) {\r\n target.dataset.unused = Date.now().toString();\r\n } else {\r\n target.dataset.unused = undefined;\r\n }\r\n }\r\n }\r\n\r\n _years(duration: Duration): number {\r\n return duration.years || 0;\r\n }\r\n\r\n _months(duration: Duration): number {\r\n return duration.months || 0;\r\n }\r\n\r\n _days(duration: Duration): number {\r\n return duration.days || 0;\r\n }\r\n\r\n _hours(duration: Duration): number {\r\n return duration.hours || 0;\r\n }\r\n\r\n _minutes(duration: Duration): number {\r\n return duration.minutes || 0;\r\n }\r\n\r\n _seconds(duration: Duration): number {\r\n return duration.seconds || 0;\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 as _get, set as _set} from \"lodash-es\";\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 declare readonly hasSecondsValue: boolean;\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 if (!this.hasSecondsValue) {\r\n throw new Error('Expected `secondsValue` to be present')\r\n }\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\nimport {scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class NavigateFormErrorsController extends BaseController {\r\n static values = {\r\n selector: String,\r\n index: Number,\r\n };\r\n\r\n static targets = [\"next\", \"current\", \"previous\"];\r\n\r\n declare readonly hasNextTarget: boolean;\r\n declare readonly nextTarget: HTMLElement;\r\n declare readonly hasPreviousTarget: boolean;\r\n declare readonly previousTarget: HTMLElement;\r\n declare readonly hasCurrentTarget: boolean;\r\n declare readonly currentTarget: HTMLElement;\r\n\r\n declare selectorValue: string;\r\n declare readonly hasSelectorValue: boolean;\r\n declare indexValue: number;\r\n declare readonly hasIndexValue: boolean;\r\n\r\n _errors: HTMLElement[] = [];\r\n\r\n get _errorCount(): number {\r\n return this._errors.length;\r\n }\r\n\r\n get _previousIndex(): number | null {\r\n let index = this._index - 1;\r\n if (index < 0) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _nextIndex(): number | null {\r\n let index = this._index + 1;\r\n if (index > this._errors.length - 1) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _index(): number {\r\n return Math.min(\r\n this.hasIndexValue ? this.indexValue : 0,\r\n this._errors.length,\r\n );\r\n }\r\n\r\n get _selector(): string {\r\n if (this.hasSelectorValue) {\r\n return this.selectorValue;\r\n } else {\r\n throw new Error(\"Expected `selectorValue` to be present\");\r\n }\r\n }\r\n\r\n get _previousError(): HTMLElement | null {\r\n return this._previousIndex ? this._errors[this._previousIndex] : null;\r\n }\r\n\r\n get _currentError(): HTMLElement {\r\n return this._errors[this._index];\r\n }\r\n\r\n get _nextError(): HTMLElement | null {\r\n return this._nextIndex ? this._errors[this._nextIndex] : null;\r\n }\r\n\r\n connect() {\r\n if (!this.hasIndexValue) {\r\n this.indexValue = -1;\r\n }\r\n this._toggleButtons();\r\n\r\n if (this._errorCount === 0) {\r\n this.el.style.display = \"none\";\r\n } else {\r\n this.el.style.display = \"\";\r\n }\r\n }\r\n\r\n async current() {\r\n await scrollToElement(this._currentError);\r\n }\r\n\r\n async next() {\r\n if (this._nextError) {\r\n await scrollToElement(this._nextError);\r\n }\r\n if (this._index < this._errorCount - 1) {\r\n this.indexValue += 1;\r\n }\r\n }\r\n\r\n async previous() {\r\n if (this._previousError) {\r\n await scrollToElement(this._previousError);\r\n }\r\n if (this._index > 0) {\r\n this.indexValue -= 1;\r\n }\r\n }\r\n\r\n indexValueChanged() {\r\n this._toggleButtons();\r\n }\r\n\r\n selectorValueChanged() {\r\n this._errors = Array.from(document.querySelectorAll(this._selector));\r\n }\r\n\r\n private _toggleButtons() {\r\n if (this.hasNextTarget) {\r\n if (this.indexValue >= this._errorCount - 1) {\r\n this.nextTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.nextTarget.removeAttribute(\"disabled\");\r\n }\r\n }\r\n if (this.hasPreviousTarget) {\r\n if (this.indexValue <= 0) {\r\n this.previousTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.previousTarget.removeAttribute(\"disabled\");\r\n }\r\n }\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 {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","EphemeralController","_cleanupSelf","cleanup","el","dataset","controller","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","values","constructor","keys","forEach","val","classes","AnchorSpyController","initialize","_checkAnchor","bind","connect","requestAnimationFrame","window","addEventListener","disconnect","removeEventListener","write","preventDefault","_anchor","_key","keyValue","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","_this2","method","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","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","CountdownController","_interval","setInterval","_tick","hasCountingDownClass","countingDownClasses","_clearTick","hasEndedClass","endedClasses","deadlineValueChanged","now","Date","distance","isPast","_deadlineDate","years","months","days","hours","minutes","seconds","intervalToDuration","start","end","hasYearsTarget","_updateTarget","yearsTarget","_years","hasMonthsTarget","monthsTarget","_months","hasDaysTarget","daysTarget","_days","hasHoursTarget","hoursTarget","_hours","hasMinutesTarget","minutesTarget","_minutes","hasSecondsTarget","secondsTarget","_seconds","e","clearInterval","_removeTargetIfUnused","_removeUnused","unused","parseInt","undefined","duration","endedClass","split","countingDownClass","deadlineValue","deadline","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","hasTimeoutValue","timeoutValue","timeout","DismissableController","dismiss","ElementSaveController","_restoreOnLoad","localStorage","removeItem","_uniqueIdentifier","_element","save","attributes","attributesValue","data","attr","_get","setItem","JSON","stringify","getItem","savedData","parse","_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","parseFloat","trim","IntervalController","hasSecondsValue","_intervalHandle","secondsValue","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","NavigateFormErrorsController","hasIndexValue","indexValue","_toggleButtons","_errorCount","current","_currentError","next","_this5","_index","_nextError","previous","_this7","_previousError","indexValueChanged","selectorValueChanged","_errors","_selector","hasNextTarget","nextTarget","hasPreviousTarget","previousTarget","index","Math","_previousIndex","_nextIndex","NestedFormController","_checkStructure","content","templateTarget","replace","_generateID","targetTarget","insertAdjacentHTML","_insertMode","wrapper","closest","_wrapperClass","newRecord","destroyInput","getTime","random","slice","indexOf","hasWrapperSelectorValue","wrapperClassValue","hasInsertModeValue","insertModeValue","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","debounces","func","postUpdate","getHeight","parent","postMessage","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","_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","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/utilities/ephemeral_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/visual/countdown_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/navigate_form_errors_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/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/visual/time_distance_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 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 {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 {Duration, intervalToDuration, isPast} from \"date-fns\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class CountdownController extends BaseController {\r\n\r\n static values = {deadline: String, removeUnused: Boolean};\r\n static targets = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\r\n static classes = [\"countingDown\", \"ended\"];\r\n\r\n // Values\r\n declare readonly deadlineValue: string;\r\n declare readonly removeUnusedValue: boolean;\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n // Targets\r\n declare readonly hasYearsTarget: boolean;\r\n declare readonly yearsTarget: HTMLElement;\r\n declare readonly hasMonthsTarget: boolean;\r\n declare readonly monthsTarget: HTMLElement;\r\n declare readonly hasDaysTarget: boolean;\r\n declare readonly daysTarget: HTMLElement;\r\n declare readonly hasHoursTarget: boolean;\r\n declare readonly hoursTarget: HTMLElement;\r\n declare readonly hasMinutesTarget: boolean;\r\n declare readonly minutesTarget: HTMLElement;\r\n declare readonly hasSecondsTarget: boolean;\r\n declare readonly secondsTarget: HTMLElement;\r\n // Classes\r\n declare readonly countingDownClass: string;\r\n declare readonly hasCountingDownClass: boolean;\r\n declare readonly endedClass: string;\r\n declare readonly hasEndedClass: boolean;\r\n // Instance Data\r\n _interval: null | ReturnType = null;\r\n\r\n get _removeUnused(): boolean {\r\n return this.hasRemoveUnusedValue ? this.removeUnusedValue : false;\r\n }\r\n\r\n get endedClasses(): string[] {\r\n return this.endedClass.split(' ');\r\n }\r\n\r\n get countingDownClasses(): string[] {\r\n return this.countingDownClass.split(' ');\r\n }\r\n\r\n get _deadlineDate() {\r\n return new Date(this.deadlineValue);\r\n }\r\n\r\n connect() {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.add(...this.countingDownClasses);\r\n }\r\n }\r\n\r\n disconnect() {\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.remove(...this.endedClasses);\r\n }\r\n }\r\n\r\n deadlineValueChanged() {\r\n // Countdown had previously ended, restart ticking. Updating mid-tick will just work.\r\n if (this._interval == null) {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n }\r\n }\r\n\r\n _tick() {\r\n try {\r\n const now = new Date();\r\n let distance: Duration = {};\r\n\r\n if (isPast(this._deadlineDate)) {\r\n distance = {years: 0, months: 0, days: 0, hours: 0, minutes: 0, seconds: 0};\r\n // Countdown has ended, stop ticking\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.add(...this.endedClasses);\r\n }\r\n this.dispatch(this.el, \"countdown:ended\");\r\n } else {\r\n distance = intervalToDuration({start: this._deadlineDate, end: now});\r\n }\r\n\r\n if (this.hasYearsTarget) {\r\n this._updateTarget(this.yearsTarget, this._years(distance));\r\n }\r\n if (this.hasMonthsTarget) {\r\n this._updateTarget(this.monthsTarget, this._months(distance));\r\n }\r\n if (this.hasDaysTarget) {\r\n this._updateTarget(this.daysTarget, this._days(distance));\r\n }\r\n if (this.hasHoursTarget) {\r\n this._updateTarget(this.hoursTarget, this._hours(distance));\r\n }\r\n if (this.hasMinutesTarget) {\r\n this._updateTarget(this.minutesTarget, this._minutes(distance));\r\n }\r\n if (this.hasSecondsTarget) {\r\n this._updateTarget(this.secondsTarget, this._seconds(distance));\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n this._clearTick();\r\n }\r\n }\r\n\r\n _clearTick() {\r\n if (this._interval) {\r\n clearInterval(this._interval);\r\n this._interval = null;\r\n }\r\n }\r\n\r\n _updateTarget(target: HTMLElement, value: number) {\r\n this._removeTargetIfUnused(target, value);\r\n target.innerHTML = value.toString();\r\n }\r\n\r\n _removeTargetIfUnused(target: HTMLElement, value: number) {\r\n if (this._removeUnused) {\r\n if (value === 0 && target.dataset.unused) {\r\n if (Number.parseInt(target.dataset.unused) > Date.now() + 1500) {\r\n target.remove();\r\n }\r\n } else if (value == 0) {\r\n target.dataset.unused = Date.now().toString();\r\n } else {\r\n target.dataset.unused = undefined;\r\n }\r\n }\r\n }\r\n\r\n _years(duration: Duration): number {\r\n return duration.years || 0;\r\n }\r\n\r\n _months(duration: Duration): number {\r\n return duration.months || 0;\r\n }\r\n\r\n _days(duration: Duration): number {\r\n return duration.days || 0;\r\n }\r\n\r\n _hours(duration: Duration): number {\r\n return duration.hours || 0;\r\n }\r\n\r\n _minutes(duration: Duration): number {\r\n return duration.minutes || 0;\r\n }\r\n\r\n _seconds(duration: Duration): number {\r\n return duration.seconds || 0;\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 as _get, set as _set} from \"lodash-es\";\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 declare readonly hasSecondsValue: boolean;\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 if (!this.hasSecondsValue) {\r\n throw new Error('Expected `secondsValue` to be present')\r\n }\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\nimport {scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class NavigateFormErrorsController extends BaseController {\r\n static values = {\r\n selector: String,\r\n index: Number,\r\n };\r\n\r\n static targets = [\"next\", \"current\", \"previous\"];\r\n\r\n declare readonly hasNextTarget: boolean;\r\n declare readonly nextTarget: HTMLElement;\r\n declare readonly hasPreviousTarget: boolean;\r\n declare readonly previousTarget: HTMLElement;\r\n declare readonly hasCurrentTarget: boolean;\r\n declare readonly currentTarget: HTMLElement;\r\n\r\n declare selectorValue: string;\r\n declare readonly hasSelectorValue: boolean;\r\n declare indexValue: number;\r\n declare readonly hasIndexValue: boolean;\r\n\r\n _errors: HTMLElement[] = [];\r\n\r\n get _errorCount(): number {\r\n return this._errors.length;\r\n }\r\n\r\n get _previousIndex(): number | null {\r\n let index = this._index - 1;\r\n if (index < 0) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _nextIndex(): number | null {\r\n let index = this._index + 1;\r\n if (index > this._errors.length - 1) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _index(): number {\r\n return Math.min(\r\n this.hasIndexValue ? this.indexValue : 0,\r\n this._errors.length,\r\n );\r\n }\r\n\r\n get _selector(): string {\r\n if (this.hasSelectorValue) {\r\n return this.selectorValue;\r\n } else {\r\n throw new Error(\"Expected `selectorValue` to be present\");\r\n }\r\n }\r\n\r\n get _previousError(): HTMLElement | null {\r\n return this._previousIndex ? this._errors[this._previousIndex] : null;\r\n }\r\n\r\n get _currentError(): HTMLElement {\r\n return this._errors[this._index];\r\n }\r\n\r\n get _nextError(): HTMLElement | null {\r\n return this._nextIndex ? this._errors[this._nextIndex] : null;\r\n }\r\n\r\n connect() {\r\n if (!this.hasIndexValue) {\r\n this.indexValue = -1;\r\n }\r\n this._toggleButtons();\r\n\r\n if (this._errorCount === 0) {\r\n this.el.style.display = \"none\";\r\n } else {\r\n this.el.style.display = \"\";\r\n }\r\n }\r\n\r\n async current() {\r\n await scrollToElement(this._currentError);\r\n }\r\n\r\n async next() {\r\n if (this._nextError) {\r\n await scrollToElement(this._nextError);\r\n }\r\n if (this._index < this._errorCount - 1) {\r\n this.indexValue += 1;\r\n }\r\n }\r\n\r\n async previous() {\r\n if (this._previousError) {\r\n await scrollToElement(this._previousError);\r\n }\r\n if (this._index > 0) {\r\n this.indexValue -= 1;\r\n }\r\n }\r\n\r\n indexValueChanged() {\r\n this._toggleButtons();\r\n }\r\n\r\n selectorValueChanged() {\r\n this._errors = Array.from(document.querySelectorAll(this._selector));\r\n }\r\n\r\n private _toggleButtons() {\r\n if (this.hasNextTarget) {\r\n if (this.indexValue >= this._errorCount - 1) {\r\n this.nextTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.nextTarget.removeAttribute(\"disabled\");\r\n }\r\n }\r\n if (this.hasPreviousTarget) {\r\n if (this.indexValue <= 0) {\r\n this.previousTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.previousTarget.removeAttribute(\"disabled\");\r\n }\r\n }\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 {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\nimport {Duration, formatDistanceToNow, intervalToDuration, isPast, toDate} from \"date-fns\";\r\n\r\nexport class TimeDistanceController extends BaseController {\r\n static values = {\r\n timestamp: Number,\r\n };\r\n\r\n declare timestampValue: number;\r\n declare readonly hasTimestampValue: boolean;\r\n\r\n _timeout: number | null = null;\r\n declare _timestamp: Date;\r\n\r\n get _duration(): Duration {\r\n return isPast(this._timestamp) ? intervalToDuration({start: this._timestamp, end: new Date()}) : intervalToDuration({start: new Date(), end: this._timestamp});\r\n }\r\n\r\n get _nextUpdate(): number | null {\r\n let duration = this._duration;\r\n\r\n if (duration.years && duration.years > 0) {\r\n return null;\r\n } else if (duration.months && duration.months > 0) {\r\n return null;\r\n } else if (duration.days && duration.days > 0) {\r\n return null;\r\n } else if (duration.hours && duration.hours > 0) {\r\n return 1800000; // Update every 30 mins\r\n } else {\r\n return 30000; // Update every 30 seconds\r\n }\r\n }\r\n\r\n timestampValueChanged() {\r\n this._timestamp = toDate(this.timestampValue * 1000);\r\n }\r\n\r\n initialize() {\r\n this._update = this._update.bind(this);\r\n }\r\n\r\n connect() {\r\n if (!this.hasTimestampValue) {\r\n throw new Error(\"Expected `timestampValue` to be present\");\r\n }\r\n this._update();\r\n }\r\n\r\n disconnect() {\r\n if (this._timeout) {\r\n window.clearTimeout(this._timeout);\r\n }\r\n }\r\n\r\n _update() {\r\n this.el.innerHTML = formatDistanceToNow(this._timestamp, {\r\n addSuffix: true,\r\n includeSeconds: true,\r\n });\r\n\r\n if (this._nextUpdate) {\r\n this._timeout = window.setTimeout(this._update, this._nextUpdate);\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","EphemeralController","_cleanupSelf","cleanup","el","dataset","controller","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","values","constructor","keys","forEach","val","classes","AnchorSpyController","initialize","_checkAnchor","bind","connect","requestAnimationFrame","window","addEventListener","disconnect","removeEventListener","write","preventDefault","_anchor","_key","keyValue","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","_this2","method","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","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","CountdownController","_interval","setInterval","_tick","hasCountingDownClass","countingDownClasses","_clearTick","hasEndedClass","endedClasses","deadlineValueChanged","now","Date","distance","isPast","_deadlineDate","years","months","days","hours","minutes","seconds","intervalToDuration","start","end","hasYearsTarget","_updateTarget","yearsTarget","_years","hasMonthsTarget","monthsTarget","_months","hasDaysTarget","daysTarget","_days","hasHoursTarget","hoursTarget","_hours","hasMinutesTarget","minutesTarget","_minutes","hasSecondsTarget","secondsTarget","_seconds","e","clearInterval","_removeTargetIfUnused","_removeUnused","unused","parseInt","undefined","duration","endedClass","split","countingDownClass","deadlineValue","deadline","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","hasTimeoutValue","timeoutValue","timeout","DismissableController","dismiss","ElementSaveController","_restoreOnLoad","localStorage","removeItem","_uniqueIdentifier","_element","save","attributes","attributesValue","data","attr","_get","setItem","JSON","stringify","getItem","savedData","parse","_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","parseFloat","trim","IntervalController","hasSecondsValue","_intervalHandle","secondsValue","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","NavigateFormErrorsController","hasIndexValue","indexValue","_toggleButtons","_errorCount","current","_currentError","next","_this5","_index","_nextError","previous","_this7","_previousError","indexValueChanged","selectorValueChanged","_errors","_selector","hasNextTarget","nextTarget","hasPreviousTarget","previousTarget","index","Math","_previousIndex","_nextIndex","NestedFormController","_checkStructure","content","templateTarget","replace","_generateID","targetTarget","insertAdjacentHTML","_insertMode","wrapper","closest","_wrapperClass","newRecord","destroyInput","getTime","random","slice","indexOf","hasWrapperSelectorValue","wrapperClassValue","hasInsertModeValue","insertModeValue","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","debounces","func","postUpdate","getHeight","parent","postMessage","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","_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","TimeDistanceController","timestampValueChanged","_timestamp","toDate","timestampValue","_update","hasTimestampValue","formatDistanceToNow","addSuffix","includeSeconds","_nextUpdate","_duration","timestamp","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","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 b1758824..f3efe142 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"camelcase";import{isPast as s,intervalToDuration as i}from"date-fns";import{get as r,set as a}from"lodash-es";import n from"dialog-polyfill";function l(){return(l=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,r)=>(i.log(t.toString(),{args:r}),Reflect.apply(e,s,r))});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 r=new CustomEvent(t,i);this.logEvent(t,r,e),e.dispatchEvent(r)}log(e,t={}){if(!this.application.debug)return;let s=console;s.groupCollapsed(`%c${this.identifier} %c#${e}`,"color: #3B82F6","color: unset"),s.log(l({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 h extends o{_cleanupSelf(){this.cleanup(this.el)}cleanup(e){var s,i,r;e.dataset.controller=(null==(s=e.dataset.controller)?void 0:s.replaceAll(new RegExp(`(s|^)${this.identifier}(s|$)`,"g"),""))||"",""==e.dataset.controller&&delete e.dataset.controller;let a=new RegExp(`(s|^)${this.identifier}\\..+?(s|$)`,"g");e.dataset.target=(null==(i=e.dataset.target)?void 0:i.replaceAll(a,""))||"",delete e.dataset[t(`${this.identifier}-target`)],""==e.dataset.target&&delete e.dataset.target,e.dataset.action=(null==(r=e.dataset.target)?void 0:r.replaceAll(a,""))||"",delete e.dataset[t(`${this.identifier}-action`)],""==e.dataset.action&&delete e.dataset.action;let n=this.constructor.values;n&&Object.keys(n).forEach(s=>delete e.dataset[t(`${this.identifier}-${s}-value`)]);let l=this.constructor.classes;l&&Object.keys(l).forEach(s=>delete e.dataset[t(`${this.identifier}-${s}-class`)])}}class c extends o{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")}}c.values={key:String};class u extends o{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 d extends o{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")})}}d.targets=["replace"],d.values={endpoint:String,errorMessage:String,selector:String};class m extends o{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 g=(e,t)=>{const s=e[t];return"function"==typeof s?s:(...e)=>{}},p=(e,t,s)=>{let i=e;return!0===s?i=`${t.identifier}:${e}`:"string"==typeof s&&(i=`${s}:${e}`),i},v=(e,t,s)=>{const{bubbles:i,cancelable:r,composed:a}=t||{bubbles:!0,cancelable:!0,composed:!0};return t&&Object.assign(s,{originalEvent:t}),new CustomEvent(e,{bubbles:i,cancelable:r,composed:a,detail:s})},_={dispatchEvent:!0,eventPrefix:!0},f=(e,t={})=>{const{dispatchEvent:s,eventPrefix:i}=Object.assign({},_,t),r=(null==t?void 0:t.element)||e.element,a=e.disconnect.bind(e),n=new IntersectionObserver(t=>{const[a]=t;a.isIntersecting?(t=>{if(e.isVisible=!0,g(e,"appear").call(e,t),s){const s=p("appear",e,i),a=v(s,null,{controller:e,entry:t});r.dispatchEvent(a)}})(a):e.isVisible&&(t=>{if(e.isVisible=!1,g(e,"disappear").call(e,t),s){const s=p("disappear",e,i),a=v(s,null,{controller:e,entry:t});r.dispatchEvent(a)}})(a)},t),l=()=>{n.observe(r)},o=()=>{n.unobserve(r)};return Object.assign(e,{isVisible:!1,disconnect(){o(),a()}}),l(),[l,o]},b={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},E={debug:!1,logger:console};class w{constructor(e,t={}){var s,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!==(s=null==t?void 0:t.debug)&&void 0!==s?s:e.application.stimulusUseDebug)&&void 0!==i?i:E.debug,this.logger=null!==(r=null==t?void 0:t.logger)&&void 0!==r?r:E.logger,this.controller=e,this.controllerId=e.element.id||e.element.dataset.id,this.controllerInitialize=e.initialize.bind(e),this.controllerConnect=e.connect.bind(e),this.controllerDisconnect=e.disconnect.bind(e)}}class y extends w{constructor(e,t={}){super(e,t),this.observe=()=>{this.targetElement.addEventListener("mouseenter",this.onEnter),this.targetElement.addEventListener("mouseleave",this.onLeave)},this.unobserve=()=>{this.targetElement.removeEventListener("mouseenter",this.onEnter),this.targetElement.removeEventListener("mouseleave",this.onLeave)},this.onEnter=()=>{g(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{g(this.controller,"mouseLeave").call(this.controller),this.log("mouseLeave",{hover:!1})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}class T extends w{constructor(e,t={}){super(e,t),this.observe=()=>{try{this.observer.observe(this.targetElement,this.options)}catch(e){this.controller.application.handleError(e,"At a minimum, one of childList, attributes, and/or characterData must be true",{})}},this.unobserve=()=>{this.observer.disconnect()},this.mutation=e=>{g(this.controller,"mutate").call(this.controller,e),this.log("mutate",{entries:e})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.options=t,this.observer=new MutationObserver(this.mutation),this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}const V=(e,t={})=>{const s=new T(e,t);return[s.observe,s.unobserve]},x=e=>{const t=t=>{const{innerWidth:s,innerHeight:i}=window,r={height:i||Infinity,width:s||Infinity,event:t};g(e,"windowResize").call(e,r)},s=e.disconnect.bind(e),i=()=>{window.addEventListener("resize",t),t()},r=()=>{window.removeEventListener("resize",t)};return Object.assign(e,{disconnect(){r(),s()}}),i(),[i,r]},C=(e,t=200)=>{let s=null;return function(){const i=arguments,r=this,a=()=>e.apply(r,i);s&&clearTimeout(s),s=setTimeout(a,t)}};class L extends o{initialize(){this._handler=this._handler.bind(this)}connect(){x(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 k extends o{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}}k.targets=["input","output"],k.values={min:Number,max:Number},k.classes=["error"];class S extends o{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(I(e))e.addEventListener("submit",this.confirm);else{if(!D(e))throw new Error("Can't handle confirmation on attached element");e.addEventListener("click",this.confirm)}})}disconnect(){let e=this.el;I(e)?e.removeEventListener("submit",this.confirm):D(e)&&e.removeEventListener("click",this.confirm)}confirm(e){window.confirm(this._message)||(e.preventDefault(),this.dispatch(this.el,"confirm:cancelled"))}}z.values={message:String};class B extends o{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()}}B.values={_message:String};class $ extends o{constructor(){super(...arguments),this._interval=null}get _removeUnused(){return!!this.hasRemoveUnusedValue&&this.removeUnusedValue}get endedClasses(){return this.endedClass.split(" ")}get countingDownClasses(){return this.countingDownClass.split(" ")}get _deadlineDate(){return new Date(this.deadlineValue)}connect(){this._interval=setInterval(this._tick.bind(this),1e3),this.hasCountingDownClass&&this.el.classList.add(...this.countingDownClasses)}disconnect(){this._clearTick(),this.hasCountingDownClass&&this.el.classList.remove(...this.countingDownClasses),this.hasEndedClass&&this.el.classList.remove(...this.endedClasses)}deadlineValueChanged(){null==this._interval&&(this._interval=setInterval(this._tick.bind(this),1e3))}_tick(){try{const e=new Date;let t={};s(this._deadlineDate)?(t={years:0,months:0,days:0,hours:0,minutes:0,seconds:0},this._clearTick(),this.hasCountingDownClass&&this.el.classList.remove(...this.countingDownClasses),this.hasEndedClass&&this.el.classList.add(...this.endedClasses),this.dispatch(this.el,"countdown:ended")):t=i({start:this._deadlineDate,end:e}),this.hasYearsTarget&&this._updateTarget(this.yearsTarget,this._years(t)),this.hasMonthsTarget&&this._updateTarget(this.monthsTarget,this._months(t)),this.hasDaysTarget&&this._updateTarget(this.daysTarget,this._days(t)),this.hasHoursTarget&&this._updateTarget(this.hoursTarget,this._hours(t)),this.hasMinutesTarget&&this._updateTarget(this.minutesTarget,this._minutes(t)),this.hasSecondsTarget&&this._updateTarget(this.secondsTarget,this._seconds(t))}catch(e){console.error(e),this._clearTick()}}_clearTick(){this._interval&&(clearInterval(this._interval),this._interval=null)}_updateTarget(e,t){this._removeTargetIfUnused(e,t),e.innerHTML=t.toString()}_removeTargetIfUnused(e,t){this._removeUnused&&(0===t&&e.dataset.unused?Number.parseInt(e.dataset.unused)>Date.now()+1500&&e.remove():e.dataset.unused=0==t?Date.now().toString():void 0)}_years(e){return e.years||0}_months(e){return e.months||0}_days(e){return e.days||0}_hours(e){return e.hours||0}_minutes(e){return e.minutes||0}_seconds(e){return e.seconds||0}}$.values={deadline:String,removeUnused:Boolean},$.targets=["years","months","days","hours","minutes","seconds"],$.classes=["countingDown","ended"];class R extends o{connect(){console.log("Debug Controller",this,this.testTargets)}}R.targets=["test"];class q extends o{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 H(e)?e.checked:e.value}_getElementLoadValue(){let e=this.el,t=e.getAttribute(this._cacheAttrName);return H(e)?null==t?e.defaultChecked:"true"==t:(null!==t||O(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);H(e)?(e.setAttribute(this._cacheAttrName,e.checked.toString()),e.checked=null==t?e.defaultChecked:"true"==t):O(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()&&H(e)?e.setAttribute(this._cacheAttrName,e.checked.toString()):e.setAttribute(this._cacheAttrName,e.value.toString())}}class F extends o{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 H(e)?e.checked:e.value}_getElementLoadValue(e){let t=e.getAttribute(this._cacheAttrName);return H(e)?null==t?e.defaultChecked:"true"==t:(null!==t||O(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)&&H(e)?e.setAttribute(this._cacheAttrName,e.checked.toString()):e.setAttribute(this._cacheAttrName,e.value.toString())}_restoreElementFromLoadValue(e){let t=e.getAttribute(this._cacheAttrName);H(e)?(e.setAttribute(this._cacheAttrName,e.checked.toString()),e.checked=null==t?e.defaultChecked:"true"==t):O(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 P extends o{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})}}P.targets=["disabler","disable"],P.values={clear:Boolean};class j extends o{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 M(e)&&"submit"==e.type||N(e)?e.disabled:"true"==e.dataset.disabled}_getElText(e){return M(e)&&"submit"==e.type?e.value:e.innerText}_setElText(e,t){M(e)&&"submit"==e.type?e.value=t:(N(e)||D(e))&&(e.innerText=t)}_disable(e){M(e)&&"submit"==e.type||N(e)?e.disabled=!0:e.dataset.disabled="true"}_enable(e){M(e)&&"submit"==e.type||N(e)?e.disabled=!1:e.dataset.disabled=void 0}}j.values={message:String,timeout:Number};class W extends o{dismiss(){this.el.remove()}}class U extends o{get _id(){if(this.hasIdValue)return this.idValue;let e=this.el.id;if(""!==e)return e;throw new Error(`No ID value to uniquely identify this element. Please either specify data-${this.identifier}-id-value or give this element an 'id' attribute. `)}get _uniqueIdentifier(){return`${location.href} ${this._id}`}get _restoreOnLoad(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}get _element(){return this.hasElementTarget?this.elementTarget:this.el}connect(){requestAnimationFrame(()=>{this._restoreOnLoad&&this.restore()})}clear(e){e&&e.preventDefault(),localStorage.removeItem(this._uniqueIdentifier),this.dispatch(this._element,"element-save:cleared")}save(e){e&&e.preventDefault();let t=this._element,s=this.attributesValue.split(" "),i={};s.forEach(e=>i[e]=r(t,e)),localStorage.setItem(this._uniqueIdentifier,JSON.stringify(i)),this.dispatch(t,"element-save:save:success")}restore(e){e&&e.preventDefault();let t=this._element;if(localStorage.getItem(this._uniqueIdentifier)){const e=JSON.parse(localStorage.getItem(this._uniqueIdentifier));Object.keys(e).forEach(s=>{a(t,s,e[s])}),this.dispatch(t,"element-save:restore:success")}else this.dispatch(t,"element-save:restore:empty")}}U.targets=["element"],U.values={id:String,attributes:String,restoreOnLoad:Boolean};class J extends o{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(){V(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 Y extends o{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})}}Y.targets=["enabler","enable"],Y.values={clear:Boolean};class G extends o{connect(){let e=this.el;e.onerror=()=>{this.hasPlaceholderValue?e.src=this.placeholderValue:e.style.display="none"}}}G.values={placeholder:String};class K extends o{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()}}K.targets=["form"];class Q extends o{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&&(M(s)&&"checkbox"==s.type?e[this._formIdentifier][s.name]=s.checked:M(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(!I(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&&(M(s)&&"checkbox"==s.type?s.checked=e[s.name]:M(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")}}Q.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};class X extends o{get _threshold(){return this.hasThresholdValue?this.thresholdValue.split(",").map(e=>Number.parseFloat(e.trim())).filter(e=>e>=0&&e<=1):[0,1]}connect(){f(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}})}}X.values={threshold:String};class Z extends o{constructor(){super(...arguments),this._intervalHandle=null}initialize(){this._interval=this._interval.bind(this)}connect(){if(!this.hasSecondsValue)throw new Error("Expected `secondsValue` to be present");requestAnimationFrame(()=>{this._intervalHandle=window.setInterval(this._interval,1e3*this.secondsValue)})}disconnect(){this._intervalHandle&&window.clearInterval(this._intervalHandle)}_interval(){this.dispatch(this.el,"interval:action")}}Z.values={seconds:Number};class ee extends d{connect(){let e=this.el;"IntersectionObserver"in window?[this.observe,this.unobserve]=f(this,{element:e,threshold:.3}):this.loadContent()}appear(e){e.target===this.el&&e.isIntersecting&&(this.loadContent(),this.unobserve&&this.unobserve())}}const te="scrollBehavior"in document.documentElement.style;let se;async function ie(e,{behavior:t="smooth",block:s="start",inline:i="nearest"}={}){"smooth"!=t||te||await async function(){const{polyfill:e}=await import("smoothscroll-polyfill");se||(se=!0,e())}(),e.scrollIntoView({behavior:t,block:s,inline:i})}function re(e){if(!e)return null;const t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:re(e.parentElement)||document.body}class ae extends o{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),n.registerDialog(this._dialog),this._dialog.className=this._modalClassName,this._dialog.showModal(),ie(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,ie(this.el,{behavior:"smooth",block:"end"}).catch(()=>this.el.scrollIntoView(!1)))}}ae.values={src:String,srcSet:String,sizes:String},ae.classes=["modal","image"];class ne extends o{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=""))}}ne.targets=["input","error"],ne.values={max:Number,message:String};class le extends o{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}}le.targets=["media"];class oe extends o{constructor(){super(...arguments),this._errors=[]}get _errorCount(){return this._errors.length}get _previousIndex(){let e=this._index-1;return e<0?null:e}get _nextIndex(){let e=this._index+1;return e>this._errors.length-1?null:e}get _index(){return Math.min(this.hasIndexValue?this.indexValue:0,this._errors.length)}get _selector(){if(this.hasSelectorValue)return this.selectorValue;throw new Error("Expected `selectorValue` to be present")}get _previousError(){return this._previousIndex?this._errors[this._previousIndex]:null}get _currentError(){return this._errors[this._index]}get _nextError(){return this._nextIndex?this._errors[this._nextIndex]:null}connect(){this.hasIndexValue||(this.indexValue=-1),this._toggleButtons(),this.el.style.display=0===this._errorCount?"none":""}async current(){await ie(this._currentError)}async next(){this._nextError&&await ie(this._nextError),this._index0&&(this.indexValue-=1)}indexValueChanged(){this._toggleButtons()}selectorValueChanged(){this._errors=Array.from(document.querySelectorAll(this._selector))}_toggleButtons(){this.hasNextTarget&&(this.indexValue>=this._errorCount-1?this.nextTarget.setAttribute("disabled","true"):this.nextTarget.removeAttribute("disabled")),this.hasPreviousTarget&&(this.indexValue<=0?this.previousTarget.setAttribute("disabled","true"):this.previousTarget.removeAttribute("disabled"))}}oe.values={selector:String,index:Number},oe.targets=["next","current","previous"];class he extends o{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`")}}he.targets=["target","template"],he.values={insertMode:String,wrapperClass:String};class ce extends o{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)))}}ce.targets=["password"],ce.classes=["error"];class ue extends o{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()}}ue.targets=["password"];class de extends o{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)}}de.targets=[],de.values={selector:String};class me extends o{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 ge extends o{connect(){var e,t,s;window.self!==window.top&&(x(this),t={},null===(s=(e=this).constructor.debounces)||void 0===s||s.forEach(s=>{if("string"==typeof s&&(e[s]=C(e[s],null==t?void 0:t.wait)),"object"==typeof s){const{name:i,wait:r}=s;if(!i)return;e[i]=C(e[i],r||(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)}}ge.debounces=["postUpdate"];class pe extends h{connect(){requestAnimationFrame(()=>{ie(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()})}}pe.values={behavior:String,block:String,inline:String};class ve extends o{scroll(e){let t;null==e||e.preventDefault(),t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:re(this.el),null!=t&&ie(t,{behavior:"smooth",block:"end"}).catch(()=>t.scrollIntoView(!1))}}ve.values={mode:String};class _e extends o{scroll(){let e=document.querySelector(this.selectorValue);e?ie(e,{behavior:this.hasBehaviorValue?this.behaviorValue:"smooth",block:this.hasBlockValue?this.blockValue:"center",inline:this.hasInlineValue?this.inlineValue:"center"}).catch(()=>e.scrollIntoView()):console.warn(`Could not find target for '${this.selectorValue}'`)}}_e.values={selector:String,behavior:String,block:String,inline:String};class fe extends o{scroll(e){let t;null==e||e.preventDefault(),t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:re(this.el),null!=t&&ie(t,{behavior:"smooth",block:"start"}).catch(()=>t.scrollIntoView(!1))}}fe.values={mode:String};class be extends o{constructor(){super(...arguments),this._timeout=null}connect(){requestAnimationFrame(()=>{this._timeout=setTimeout(()=>this.el.remove(),1e3*this.secondsValue)})}disconnect(){this._timeout&&clearTimeout(this._timeout)}}be.values={seconds:Number};class Ee extends o{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)}}Ee.classes=["stuck"],Ee.values={mode:String};class we extends o{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,r;let a=Array.from(t.cells),n=Array.from(s.cells),l=(null==(i=a[e])?void 0:i.innerText)||"",o=(null==(r=n[e])?void 0:r.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}}we.values={startSort:Number};class ye extends o{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(){V(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)}}ye.targets=["showMore"],ye.values={limit:Number,truncated:Boolean};class Te extends h{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()}}Te.values={target:String,insert:String,immediate:Boolean};class Ve extends o{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")}}Ve.values={seconds:Number};class xe extends o{connect(){if(!this.hasClassValue)throw new Error("data-toggle-class-class-value must not be empty");(this.hasMouseEnterValue||this.hasMouseLeaveValue)&&((e,t={})=>{new y(this,t)})(),this.hasClickAwayValue&&this.clickAwayValue&&((e,t={})=>{const{onlyVisible:s,dispatchEvent:i,events:r,eventPrefix:a}=Object.assign({},b,t),n=r=>{const n=(null==t?void 0:t.element)||e.element;if(!(n.contains(r.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(r),i)){const t=p("click:outside",e,a),s=v(t,r,{controller:e});n.dispatchEvent(s)}},l=e.disconnect.bind(e);Object.assign(e,{disconnect(){null==r||r.forEach(e=>{window.removeEventListener(e,n,!1)}),l()}}),null==r||r.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 Ce(e){return"TURBO-FRAME"==e.nodeName}xe.targets=["toggle"],xe.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};class Le extends o{toggle(e){null==e||e.preventDefault();let t=this._getFrame().src;null==t||t!==this._getSrc()?this._setSrc():this._clear()}setSrc(e){null==e||e.preventDefault(),this._setSrc()}clear(e){null==e||e.preventDefault(),this._clear()}_setSrc(){let e=this._getFrame();this.hasLoadingMessageValue&&(e.innerHTML=this.loadingMessageValue),e.src=this._getSrc()}_clear(){let e=this._getFrame();e.src="",e.innerHTML=""}_getFrame(){let e=document.getElementById(`${this.frameIdValue}`);if(null==e)throw new Error(`Could not find frame with ID '${this.frameIdValue}'`);if(Ce(e))return e;throw new Error(`Element targeted by ID '${this.frameIdValue}'`)}_getSrc(){let e=this.el;if(this.hasSrcValue)return this.srcValue;if(D(e))return e.href;throw new Error("No link given to drive frame to")}}Le.values={frameId:String,src:String,loadingMessage:String};class ke extends o{constructor(){super(...arguments),this._timeoutHandle=null}get _poll(){return!!this.hasPollValue&&this.pollValue}initialize(){this.refresh=this.refresh.bind(this)}connect(){let e=this.el;if(!Ce(e))throw new Error("Expected controller to be mounted on a element.");if(e.src)throw new Error("The provided element has no `src` attribute.");this._poll&&requestAnimationFrame(()=>this._timeoutHandle=setTimeout(()=>this.refresh(),this.intervalValue))}disconnect(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)}refresh(e){null==e||e.preventDefault();let t=this.el;t.src=t.src}}ke.values={interval:Number,poll:Boolean};class Se extends o{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}}Se.targets=["input","output"],Se.values={min:Number,max:Number},Se.classes=["error"];export{c as AnchorSpyController,u as AppearanceController,d as AsyncBlockController,m as AutoSubmitFormController,L as AutosizeController,o as BaseController,k as CharCountController,S as CheckboxSelectAllController,A as ClipboardController,z as ConfirmController,B as ConfirmNavigationController,$ as CountdownController,R as DebugController,q as DetectDirtyController,F as DetectDirtyFormController,P as DisableInputsController,j as DisableWithController,W as DismissableController,U as ElementSaveController,J as EmptyDomController,Y as EnableInputsController,h as EphemeralController,G as FallbackImageController,K as FormRcController,Q as FormSaveController,X as IntersectionController,Z as IntervalController,ee as LazyBlockController,ae as LightboxImageController,ne as LimitedSelectionCheckboxesController,le as MediaPlayerController,oe as NavigateFormErrorsController,he as NestedFormController,ce as PasswordConfirmController,ue as PasswordPeekController,de as RemoteFormController,ge as ResponsiveIframeBodyController,me as ResponsiveIframeWrapperController,pe as ScrollIntoFocusController,ve as ScrollToBottomController,_e as ScrollToController,fe as ScrollToTopController,be as SelfDestructController,Ee as StickyController,we as TableSortController,ye as TableTruncateController,Te as TeleportController,Ve as TimeoutController,xe as ToggleClassController,Le as TurboFrameRCController,ke as TurboFrameRefreshController,Se as WordCountController}; +import{Controller as e}from"stimulus";import t from"camelcase";import{isPast as s,intervalToDuration as i,toDate as r,formatDistanceToNow as a}from"date-fns";import{get as n,set as l}from"lodash-es";import o from"dialog-polyfill";function h(){return(h=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,r)=>(i.log(t.toString(),{args:r}),Reflect.apply(e,s,r))});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 r=new CustomEvent(t,i);this.logEvent(t,r,e),e.dispatchEvent(r)}log(e,t={}){if(!this.application.debug)return;let s=console;s.groupCollapsed(`%c${this.identifier} %c#${e}`,"color: #3B82F6","color: unset"),s.log(h({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 u extends c{_cleanupSelf(){this.cleanup(this.el)}cleanup(e){var s,i,r;e.dataset.controller=(null==(s=e.dataset.controller)?void 0:s.replaceAll(new RegExp(`(s|^)${this.identifier}(s|$)`,"g"),""))||"",""==e.dataset.controller&&delete e.dataset.controller;let a=new RegExp(`(s|^)${this.identifier}\\..+?(s|$)`,"g");e.dataset.target=(null==(i=e.dataset.target)?void 0:i.replaceAll(a,""))||"",delete e.dataset[t(`${this.identifier}-target`)],""==e.dataset.target&&delete e.dataset.target,e.dataset.action=(null==(r=e.dataset.target)?void 0:r.replaceAll(a,""))||"",delete e.dataset[t(`${this.identifier}-action`)],""==e.dataset.action&&delete e.dataset.action;let n=this.constructor.values;n&&Object.keys(n).forEach(s=>delete e.dataset[t(`${this.identifier}-${s}-value`)]);let l=this.constructor.classes;l&&Object.keys(l).forEach(s=>delete e.dataset[t(`${this.identifier}-${s}-class`)])}}class d extends c{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")}}d.values={key:String};class m extends c{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 g extends c{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")})}}g.targets=["replace"],g.values={endpoint:String,errorMessage:String,selector:String};class p extends c{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 _=(e,t)=>{const s=e[t];return"function"==typeof s?s:(...e)=>{}},v=(e,t,s)=>{let i=e;return!0===s?i=`${t.identifier}:${e}`:"string"==typeof s&&(i=`${s}:${e}`),i},f=(e,t,s)=>{const{bubbles:i,cancelable:r,composed:a}=t||{bubbles:!0,cancelable:!0,composed:!0};return t&&Object.assign(s,{originalEvent:t}),new CustomEvent(e,{bubbles:i,cancelable:r,composed:a,detail:s})},b={dispatchEvent:!0,eventPrefix:!0},E=(e,t={})=>{const{dispatchEvent:s,eventPrefix:i}=Object.assign({},b,t),r=(null==t?void 0:t.element)||e.element,a=e.disconnect.bind(e),n=new IntersectionObserver(t=>{const[a]=t;a.isIntersecting?(t=>{if(e.isVisible=!0,_(e,"appear").call(e,t),s){const s=v("appear",e,i),a=f(s,null,{controller:e,entry:t});r.dispatchEvent(a)}})(a):e.isVisible&&(t=>{if(e.isVisible=!1,_(e,"disappear").call(e,t),s){const s=v("disappear",e,i),a=f(s,null,{controller:e,entry:t});r.dispatchEvent(a)}})(a)},t),l=()=>{n.observe(r)},o=()=>{n.unobserve(r)};return Object.assign(e,{isVisible:!1,disconnect(){o(),a()}}),l(),[l,o]},w={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},y={debug:!1,logger:console};class T{constructor(e,t={}){var s,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!==(s=null==t?void 0:t.debug)&&void 0!==s?s:e.application.stimulusUseDebug)&&void 0!==i?i:y.debug,this.logger=null!==(r=null==t?void 0:t.logger)&&void 0!==r?r:y.logger,this.controller=e,this.controllerId=e.element.id||e.element.dataset.id,this.controllerInitialize=e.initialize.bind(e),this.controllerConnect=e.connect.bind(e),this.controllerDisconnect=e.disconnect.bind(e)}}class V extends T{constructor(e,t={}){super(e,t),this.observe=()=>{this.targetElement.addEventListener("mouseenter",this.onEnter),this.targetElement.addEventListener("mouseleave",this.onLeave)},this.unobserve=()=>{this.targetElement.removeEventListener("mouseenter",this.onEnter),this.targetElement.removeEventListener("mouseleave",this.onLeave)},this.onEnter=()=>{_(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{_(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 T{constructor(e,t={}){super(e,t),this.observe=()=>{try{this.observer.observe(this.targetElement,this.options)}catch(e){this.controller.application.handleError(e,"At a minimum, one of childList, attributes, and/or characterData must be true",{})}},this.unobserve=()=>{this.observer.disconnect()},this.mutation=e=>{_(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 C=(e,t={})=>{const s=new x(e,t);return[s.observe,s.unobserve]},L=e=>{const t=t=>{const{innerWidth:s,innerHeight:i}=window,r={height:i||Infinity,width:s||Infinity,event:t};_(e,"windowResize").call(e,r)},s=e.disconnect.bind(e),i=()=>{window.addEventListener("resize",t),t()},r=()=>{window.removeEventListener("resize",t)};return Object.assign(e,{disconnect(){r(),s()}}),i(),[i,r]},k=(e,t=200)=>{let s=null;return function(){const i=arguments,r=this,a=()=>e.apply(r,i);s&&clearTimeout(s),s=setTimeout(a,t)}};class S extends c{initialize(){this._handler=this._handler.bind(this)}connect(){L(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 A extends c{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}}A.targets=["input","output"],A.values={min:Number,max:Number},A.classes=["error"];class D extends c{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(N(e))e.addEventListener("submit",this.confirm);else{if(!M(e))throw new Error("Can't handle confirmation on attached element");e.addEventListener("click",this.confirm)}})}disconnect(){let e=this.el;N(e)?e.removeEventListener("submit",this.confirm):M(e)&&e.removeEventListener("click",this.confirm)}confirm(e){window.confirm(this._message)||(e.preventDefault(),this.dispatch(this.el,"confirm:cancelled"))}}$.values={message:String};class R extends c{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()}}R.values={_message:String};class q extends c{constructor(){super(...arguments),this._interval=null}get _removeUnused(){return!!this.hasRemoveUnusedValue&&this.removeUnusedValue}get endedClasses(){return this.endedClass.split(" ")}get countingDownClasses(){return this.countingDownClass.split(" ")}get _deadlineDate(){return new Date(this.deadlineValue)}connect(){this._interval=setInterval(this._tick.bind(this),1e3),this.hasCountingDownClass&&this.el.classList.add(...this.countingDownClasses)}disconnect(){this._clearTick(),this.hasCountingDownClass&&this.el.classList.remove(...this.countingDownClasses),this.hasEndedClass&&this.el.classList.remove(...this.endedClasses)}deadlineValueChanged(){null==this._interval&&(this._interval=setInterval(this._tick.bind(this),1e3))}_tick(){try{const e=new Date;let t={};s(this._deadlineDate)?(t={years:0,months:0,days:0,hours:0,minutes:0,seconds:0},this._clearTick(),this.hasCountingDownClass&&this.el.classList.remove(...this.countingDownClasses),this.hasEndedClass&&this.el.classList.add(...this.endedClasses),this.dispatch(this.el,"countdown:ended")):t=i({start:this._deadlineDate,end:e}),this.hasYearsTarget&&this._updateTarget(this.yearsTarget,this._years(t)),this.hasMonthsTarget&&this._updateTarget(this.monthsTarget,this._months(t)),this.hasDaysTarget&&this._updateTarget(this.daysTarget,this._days(t)),this.hasHoursTarget&&this._updateTarget(this.hoursTarget,this._hours(t)),this.hasMinutesTarget&&this._updateTarget(this.minutesTarget,this._minutes(t)),this.hasSecondsTarget&&this._updateTarget(this.secondsTarget,this._seconds(t))}catch(e){console.error(e),this._clearTick()}}_clearTick(){this._interval&&(clearInterval(this._interval),this._interval=null)}_updateTarget(e,t){this._removeTargetIfUnused(e,t),e.innerHTML=t.toString()}_removeTargetIfUnused(e,t){this._removeUnused&&(0===t&&e.dataset.unused?Number.parseInt(e.dataset.unused)>Date.now()+1500&&e.remove():e.dataset.unused=0==t?Date.now().toString():void 0)}_years(e){return e.years||0}_months(e){return e.months||0}_days(e){return e.days||0}_hours(e){return e.hours||0}_minutes(e){return e.minutes||0}_seconds(e){return e.seconds||0}}q.values={deadline:String,removeUnused:Boolean},q.targets=["years","months","days","hours","minutes","seconds"],q.classes=["countingDown","ended"];class F extends c{connect(){console.log("Debug Controller",this,this.testTargets)}}F.targets=["test"];class P extends c{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 B(e)?e.checked:e.value}_getElementLoadValue(){let e=this.el,t=e.getAttribute(this._cacheAttrName);return B(e)?null==t?e.defaultChecked:"true"==t:(null!==t||z(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);B(e)?(e.setAttribute(this._cacheAttrName,e.checked.toString()),e.checked=null==t?e.defaultChecked:"true"==t):z(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()&&B(e)?e.setAttribute(this._cacheAttrName,e.checked.toString()):e.setAttribute(this._cacheAttrName,e.value.toString())}}class j extends c{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 B(e)?e.checked:e.value}_getElementLoadValue(e){let t=e.getAttribute(this._cacheAttrName);return B(e)?null==t?e.defaultChecked:"true"==t:(null!==t||z(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)&&B(e)?e.setAttribute(this._cacheAttrName,e.checked.toString()):e.setAttribute(this._cacheAttrName,e.value.toString())}_restoreElementFromLoadValue(e){let t=e.getAttribute(this._cacheAttrName);B(e)?(e.setAttribute(this._cacheAttrName,e.checked.toString()),e.checked=null==t?e.defaultChecked:"true"==t):z(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 U extends c{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})}}U.targets=["disabler","disable"],U.values={clear:Boolean};class W extends c{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 O(e)&&"submit"==e.type||H(e)?e.disabled:"true"==e.dataset.disabled}_getElText(e){return O(e)&&"submit"==e.type?e.value:e.innerText}_setElText(e,t){O(e)&&"submit"==e.type?e.value=t:(H(e)||M(e))&&(e.innerText=t)}_disable(e){O(e)&&"submit"==e.type||H(e)?e.disabled=!0:e.dataset.disabled="true"}_enable(e){O(e)&&"submit"==e.type||H(e)?e.disabled=!1:e.dataset.disabled=void 0}}W.values={message:String,timeout:Number};class J extends c{dismiss(){this.el.remove()}}class Y extends c{get _id(){if(this.hasIdValue)return this.idValue;let e=this.el.id;if(""!==e)return e;throw new Error(`No ID value to uniquely identify this element. Please either specify data-${this.identifier}-id-value or give this element an 'id' attribute. `)}get _uniqueIdentifier(){return`${location.href} ${this._id}`}get _restoreOnLoad(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}get _element(){return this.hasElementTarget?this.elementTarget:this.el}connect(){requestAnimationFrame(()=>{this._restoreOnLoad&&this.restore()})}clear(e){e&&e.preventDefault(),localStorage.removeItem(this._uniqueIdentifier),this.dispatch(this._element,"element-save:cleared")}save(e){e&&e.preventDefault();let t=this._element,s=this.attributesValue.split(" "),i={};s.forEach(e=>i[e]=n(t,e)),localStorage.setItem(this._uniqueIdentifier,JSON.stringify(i)),this.dispatch(t,"element-save:save:success")}restore(e){e&&e.preventDefault();let t=this._element;if(localStorage.getItem(this._uniqueIdentifier)){const e=JSON.parse(localStorage.getItem(this._uniqueIdentifier));Object.keys(e).forEach(s=>{l(t,s,e[s])}),this.dispatch(t,"element-save:restore:success")}else this.dispatch(t,"element-save:restore:empty")}}Y.targets=["element"],Y.values={id:String,attributes:String,restoreOnLoad:Boolean};class G extends c{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(){C(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)}}G.classes=["empty","notEmpty"],G.values={scopeSelector:String};class K extends c{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})}}K.targets=["enabler","enable"],K.values={clear:Boolean};class Q extends c{connect(){let e=this.el;e.onerror=()=>{this.hasPlaceholderValue?e.src=this.placeholderValue:e.style.display="none"}}}Q.values={placeholder:String};class X extends c{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()}}X.targets=["form"];class Z extends c{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&&(O(s)&&"checkbox"==s.type?e[this._formIdentifier][s.name]=s.checked:O(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(!N(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&&(O(s)&&"checkbox"==s.type?s.checked=e[s.name]:O(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")}}Z.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};class ee extends c{get _threshold(){return this.hasThresholdValue?this.thresholdValue.split(",").map(e=>Number.parseFloat(e.trim())).filter(e=>e>=0&&e<=1):[0,1]}connect(){E(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}})}}ee.values={threshold:String};class te extends c{constructor(){super(...arguments),this._intervalHandle=null}initialize(){this._interval=this._interval.bind(this)}connect(){if(!this.hasSecondsValue)throw new Error("Expected `secondsValue` to be present");requestAnimationFrame(()=>{this._intervalHandle=window.setInterval(this._interval,1e3*this.secondsValue)})}disconnect(){this._intervalHandle&&window.clearInterval(this._intervalHandle)}_interval(){this.dispatch(this.el,"interval:action")}}te.values={seconds:Number};class se extends g{connect(){let e=this.el;"IntersectionObserver"in window?[this.observe,this.unobserve]=E(this,{element:e,threshold:.3}):this.loadContent()}appear(e){e.target===this.el&&e.isIntersecting&&(this.loadContent(),this.unobserve&&this.unobserve())}}const ie="scrollBehavior"in document.documentElement.style;let re;async function ae(e,{behavior:t="smooth",block:s="start",inline:i="nearest"}={}){"smooth"!=t||ie||await async function(){const{polyfill:e}=await import("smoothscroll-polyfill");re||(re=!0,e())}(),e.scrollIntoView({behavior:t,block:s,inline:i})}function ne(e){if(!e)return null;const t=getComputedStyle(e).overflowY;return"visible"!==t&&"hidden"!==t&&e.scrollHeight>=e.clientHeight?e:ne(e.parentElement)||document.body}class le extends c{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),o.registerDialog(this._dialog),this._dialog.className=this._modalClassName,this._dialog.showModal(),ae(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,ae(this.el,{behavior:"smooth",block:"end"}).catch(()=>this.el.scrollIntoView(!1)))}}le.values={src:String,srcSet:String,sizes:String},le.classes=["modal","image"];class oe extends c{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=""))}}oe.targets=["input","error"],oe.values={max:Number,message:String};class he extends c{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}}he.targets=["media"];class ce extends c{constructor(){super(...arguments),this._errors=[]}get _errorCount(){return this._errors.length}get _previousIndex(){let e=this._index-1;return e<0?null:e}get _nextIndex(){let e=this._index+1;return e>this._errors.length-1?null:e}get _index(){return Math.min(this.hasIndexValue?this.indexValue:0,this._errors.length)}get _selector(){if(this.hasSelectorValue)return this.selectorValue;throw new Error("Expected `selectorValue` to be present")}get _previousError(){return this._previousIndex?this._errors[this._previousIndex]:null}get _currentError(){return this._errors[this._index]}get _nextError(){return this._nextIndex?this._errors[this._nextIndex]:null}connect(){this.hasIndexValue||(this.indexValue=-1),this._toggleButtons(),this.el.style.display=0===this._errorCount?"none":""}async current(){await ae(this._currentError)}async next(){this._nextError&&await ae(this._nextError),this._index0&&(this.indexValue-=1)}indexValueChanged(){this._toggleButtons()}selectorValueChanged(){this._errors=Array.from(document.querySelectorAll(this._selector))}_toggleButtons(){this.hasNextTarget&&(this.indexValue>=this._errorCount-1?this.nextTarget.setAttribute("disabled","true"):this.nextTarget.removeAttribute("disabled")),this.hasPreviousTarget&&(this.indexValue<=0?this.previousTarget.setAttribute("disabled","true"):this.previousTarget.removeAttribute("disabled"))}}ce.values={selector:String,index:Number},ce.targets=["next","current","previous"];class ue extends c{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`")}}ue.targets=["target","template"],ue.values={insertMode:String,wrapperClass:String};class de extends c{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)))}}de.targets=["password"],de.classes=["error"];class me extends c{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()}}me.targets=["password"];class ge extends c{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)}}ge.targets=[],ge.values={selector:String};class pe extends c{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 _e extends c{connect(){var e,t,s;window.self!==window.top&&(L(this),t={},null===(s=(e=this).constructor.debounces)||void 0===s||s.forEach(s=>{if("string"==typeof s&&(e[s]=k(e[s],null==t?void 0:t.wait)),"object"==typeof s){const{name:i,wait:r}=s;if(!i)return;e[i]=k(e[i],r||(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)}}_e.debounces=["postUpdate"];class ve extends u{connect(){requestAnimationFrame(()=>{ae(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()})}}ve.values={behavior:String,block:String,inline:String};class fe extends c{scroll(e){let t;null==e||e.preventDefault(),t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ne(this.el),null!=t&&ae(t,{behavior:"smooth",block:"end"}).catch(()=>t.scrollIntoView(!1))}}fe.values={mode:String};class be extends c{scroll(){let e=document.querySelector(this.selectorValue);e?ae(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}'`)}}be.values={selector:String,behavior:String,block:String,inline:String};class Ee extends c{scroll(e){let t;null==e||e.preventDefault(),t="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ne(this.el),null!=t&&ae(t,{behavior:"smooth",block:"start"}).catch(()=>t.scrollIntoView(!1))}}Ee.values={mode:String};class we extends c{constructor(){super(...arguments),this._timeout=null}connect(){requestAnimationFrame(()=>{this._timeout=setTimeout(()=>this.el.remove(),1e3*this.secondsValue)})}disconnect(){this._timeout&&clearTimeout(this._timeout)}}we.values={seconds:Number};class ye extends c{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)}}ye.classes=["stuck"],ye.values={mode:String};class Te extends c{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,r;let a=Array.from(t.cells),n=Array.from(s.cells),l=(null==(i=a[e])?void 0:i.innerText)||"",o=(null==(r=n[e])?void 0:r.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}}Te.values={startSort:Number};class Ve extends c{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(){C(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)}}Ve.targets=["showMore"],Ve.values={limit:Number,truncated:Boolean};class xe extends u{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()}}xe.values={target:String,insert:String,immediate:Boolean};class Ce extends c{constructor(){super(...arguments),this._timeout=null}get _duration(){return s(this._timestamp)?i({start:this._timestamp,end:new Date}):i({start:new Date,end:this._timestamp})}get _nextUpdate(){let e=this._duration;return e.years&&e.years>0||e.months&&e.months>0||e.days&&e.days>0?null:e.hours&&e.hours>0?18e5:3e4}timestampValueChanged(){this._timestamp=r(1e3*this.timestampValue)}initialize(){this._update=this._update.bind(this)}connect(){if(!this.hasTimestampValue)throw new Error("Expected `timestampValue` to be present");this._update()}disconnect(){this._timeout&&window.clearTimeout(this._timeout)}_update(){this.el.innerHTML=a(this._timestamp,{addSuffix:!0,includeSeconds:!0}),this._nextUpdate&&(this._timeout=window.setTimeout(this._update,this._nextUpdate))}}Ce.values={timestamp:Number};class Le extends c{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")}}Le.values={seconds:Number};class ke extends c{connect(){if(!this.hasClassValue)throw new Error("data-toggle-class-class-value must not be empty");(this.hasMouseEnterValue||this.hasMouseLeaveValue)&&((e,t={})=>{new V(this,t)})(),this.hasClickAwayValue&&this.clickAwayValue&&((e,t={})=>{const{onlyVisible:s,dispatchEvent:i,events:r,eventPrefix:a}=Object.assign({},w,t),n=r=>{const n=(null==t?void 0:t.element)||e.element;if(!(n.contains(r.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(r),i)){const t=v("click:outside",e,a),s=f(t,r,{controller:e});n.dispatchEvent(s)}},l=e.disconnect.bind(e);Object.assign(e,{disconnect(){null==r||r.forEach(e=>{window.removeEventListener(e,n,!1)}),l()}}),null==r||r.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 Se(e){return"TURBO-FRAME"==e.nodeName}ke.targets=["toggle"],ke.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};class Ae extends c{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(Se(e))return e;throw new Error(`Element targeted by ID '${this.frameIdValue}'`)}_getSrc(){let e=this.el;if(this.hasSrcValue)return this.srcValue;if(M(e))return e.href;throw new Error("No link given to drive frame to")}}Ae.values={frameId:String,src:String,loadingMessage:String};class De extends c{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(!Se(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}}De.values={interval:Number,poll:Boolean};class Ie extends c{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}}Ie.targets=["input","output"],Ie.values={min:Number,max:Number},Ie.classes=["error"];export{d as AnchorSpyController,m as AppearanceController,g as AsyncBlockController,p as AutoSubmitFormController,S as AutosizeController,c as BaseController,A as CharCountController,D as CheckboxSelectAllController,I as ClipboardController,$ as ConfirmController,R as ConfirmNavigationController,q as CountdownController,F as DebugController,P as DetectDirtyController,j as DetectDirtyFormController,U as DisableInputsController,W as DisableWithController,J as DismissableController,Y as ElementSaveController,G as EmptyDomController,K as EnableInputsController,u as EphemeralController,Q as FallbackImageController,X as FormRcController,Z as FormSaveController,ee as IntersectionController,te as IntervalController,se as LazyBlockController,le as LightboxImageController,oe as LimitedSelectionCheckboxesController,he as MediaPlayerController,ce as NavigateFormErrorsController,ue as NestedFormController,de as PasswordConfirmController,me as PasswordPeekController,ge as RemoteFormController,_e as ResponsiveIframeBodyController,pe as ResponsiveIframeWrapperController,ve as ScrollIntoFocusController,fe as ScrollToBottomController,be as ScrollToController,Ee as ScrollToTopController,we as SelfDestructController,ye as StickyController,Te as TableSortController,Ve as TableTruncateController,xe as TeleportController,Ce as TimeDistanceController,Le as TimeoutController,ke as ToggleClassController,Ae as TurboFrameRCController,De as TurboFrameRefreshController,Ie 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 e49353c9..4daabe44 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/utilities/ephemeral_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/visual/countdown_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/navigate_form_errors_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/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 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 {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 {Duration, intervalToDuration, isPast} from \"date-fns\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class CountdownController extends BaseController {\r\n\r\n static values = {deadline: String, removeUnused: Boolean};\r\n static targets = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\r\n static classes = [\"countingDown\", \"ended\"];\r\n\r\n // Values\r\n declare readonly deadlineValue: string;\r\n declare readonly removeUnusedValue: boolean;\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n // Targets\r\n declare readonly hasYearsTarget: boolean;\r\n declare readonly yearsTarget: HTMLElement;\r\n declare readonly hasMonthsTarget: boolean;\r\n declare readonly monthsTarget: HTMLElement;\r\n declare readonly hasDaysTarget: boolean;\r\n declare readonly daysTarget: HTMLElement;\r\n declare readonly hasHoursTarget: boolean;\r\n declare readonly hoursTarget: HTMLElement;\r\n declare readonly hasMinutesTarget: boolean;\r\n declare readonly minutesTarget: HTMLElement;\r\n declare readonly hasSecondsTarget: boolean;\r\n declare readonly secondsTarget: HTMLElement;\r\n // Classes\r\n declare readonly countingDownClass: string;\r\n declare readonly hasCountingDownClass: boolean;\r\n declare readonly endedClass: string;\r\n declare readonly hasEndedClass: boolean;\r\n // Instance Data\r\n _interval: null | ReturnType = null;\r\n\r\n get _removeUnused(): boolean {\r\n return this.hasRemoveUnusedValue ? this.removeUnusedValue : false;\r\n }\r\n\r\n get endedClasses(): string[] {\r\n return this.endedClass.split(' ');\r\n }\r\n\r\n get countingDownClasses(): string[] {\r\n return this.countingDownClass.split(' ');\r\n }\r\n\r\n get _deadlineDate() {\r\n return new Date(this.deadlineValue);\r\n }\r\n\r\n connect() {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.add(...this.countingDownClasses);\r\n }\r\n }\r\n\r\n disconnect() {\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.remove(...this.endedClasses);\r\n }\r\n }\r\n\r\n deadlineValueChanged() {\r\n // Countdown had previously ended, restart ticking. Updating mid-tick will just work.\r\n if (this._interval == null) {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n }\r\n }\r\n\r\n _tick() {\r\n try {\r\n const now = new Date();\r\n let distance: Duration = {};\r\n\r\n if (isPast(this._deadlineDate)) {\r\n distance = {years: 0, months: 0, days: 0, hours: 0, minutes: 0, seconds: 0};\r\n // Countdown has ended, stop ticking\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.add(...this.endedClasses);\r\n }\r\n this.dispatch(this.el, \"countdown:ended\");\r\n } else {\r\n distance = intervalToDuration({start: this._deadlineDate, end: now});\r\n }\r\n\r\n if (this.hasYearsTarget) {\r\n this._updateTarget(this.yearsTarget, this._years(distance));\r\n }\r\n if (this.hasMonthsTarget) {\r\n this._updateTarget(this.monthsTarget, this._months(distance));\r\n }\r\n if (this.hasDaysTarget) {\r\n this._updateTarget(this.daysTarget, this._days(distance));\r\n }\r\n if (this.hasHoursTarget) {\r\n this._updateTarget(this.hoursTarget, this._hours(distance));\r\n }\r\n if (this.hasMinutesTarget) {\r\n this._updateTarget(this.minutesTarget, this._minutes(distance));\r\n }\r\n if (this.hasSecondsTarget) {\r\n this._updateTarget(this.secondsTarget, this._seconds(distance));\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n this._clearTick();\r\n }\r\n }\r\n\r\n _clearTick() {\r\n if (this._interval) {\r\n clearInterval(this._interval);\r\n this._interval = null;\r\n }\r\n }\r\n\r\n _updateTarget(target: HTMLElement, value: number) {\r\n this._removeTargetIfUnused(target, value);\r\n target.innerHTML = value.toString();\r\n }\r\n\r\n _removeTargetIfUnused(target: HTMLElement, value: number) {\r\n if (this._removeUnused) {\r\n if (value === 0 && target.dataset.unused) {\r\n if (Number.parseInt(target.dataset.unused) > Date.now() + 1500) {\r\n target.remove();\r\n }\r\n } else if (value == 0) {\r\n target.dataset.unused = Date.now().toString();\r\n } else {\r\n target.dataset.unused = undefined;\r\n }\r\n }\r\n }\r\n\r\n _years(duration: Duration): number {\r\n return duration.years || 0;\r\n }\r\n\r\n _months(duration: Duration): number {\r\n return duration.months || 0;\r\n }\r\n\r\n _days(duration: Duration): number {\r\n return duration.days || 0;\r\n }\r\n\r\n _hours(duration: Duration): number {\r\n return duration.hours || 0;\r\n }\r\n\r\n _minutes(duration: Duration): number {\r\n return duration.minutes || 0;\r\n }\r\n\r\n _seconds(duration: Duration): number {\r\n return duration.seconds || 0;\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 as _get, set as _set} from \"lodash-es\";\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 declare readonly hasSecondsValue: boolean;\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 if (!this.hasSecondsValue) {\r\n throw new Error('Expected `secondsValue` to be present')\r\n }\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\nimport {scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class NavigateFormErrorsController extends BaseController {\r\n static values = {\r\n selector: String,\r\n index: Number,\r\n };\r\n\r\n static targets = [\"next\", \"current\", \"previous\"];\r\n\r\n declare readonly hasNextTarget: boolean;\r\n declare readonly nextTarget: HTMLElement;\r\n declare readonly hasPreviousTarget: boolean;\r\n declare readonly previousTarget: HTMLElement;\r\n declare readonly hasCurrentTarget: boolean;\r\n declare readonly currentTarget: HTMLElement;\r\n\r\n declare selectorValue: string;\r\n declare readonly hasSelectorValue: boolean;\r\n declare indexValue: number;\r\n declare readonly hasIndexValue: boolean;\r\n\r\n _errors: HTMLElement[] = [];\r\n\r\n get _errorCount(): number {\r\n return this._errors.length;\r\n }\r\n\r\n get _previousIndex(): number | null {\r\n let index = this._index - 1;\r\n if (index < 0) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _nextIndex(): number | null {\r\n let index = this._index + 1;\r\n if (index > this._errors.length - 1) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _index(): number {\r\n return Math.min(\r\n this.hasIndexValue ? this.indexValue : 0,\r\n this._errors.length,\r\n );\r\n }\r\n\r\n get _selector(): string {\r\n if (this.hasSelectorValue) {\r\n return this.selectorValue;\r\n } else {\r\n throw new Error(\"Expected `selectorValue` to be present\");\r\n }\r\n }\r\n\r\n get _previousError(): HTMLElement | null {\r\n return this._previousIndex ? this._errors[this._previousIndex] : null;\r\n }\r\n\r\n get _currentError(): HTMLElement {\r\n return this._errors[this._index];\r\n }\r\n\r\n get _nextError(): HTMLElement | null {\r\n return this._nextIndex ? this._errors[this._nextIndex] : null;\r\n }\r\n\r\n connect() {\r\n if (!this.hasIndexValue) {\r\n this.indexValue = -1;\r\n }\r\n this._toggleButtons();\r\n\r\n if (this._errorCount === 0) {\r\n this.el.style.display = \"none\";\r\n } else {\r\n this.el.style.display = \"\";\r\n }\r\n }\r\n\r\n async current() {\r\n await scrollToElement(this._currentError);\r\n }\r\n\r\n async next() {\r\n if (this._nextError) {\r\n await scrollToElement(this._nextError);\r\n }\r\n if (this._index < this._errorCount - 1) {\r\n this.indexValue += 1;\r\n }\r\n }\r\n\r\n async previous() {\r\n if (this._previousError) {\r\n await scrollToElement(this._previousError);\r\n }\r\n if (this._index > 0) {\r\n this.indexValue -= 1;\r\n }\r\n }\r\n\r\n indexValueChanged() {\r\n this._toggleButtons();\r\n }\r\n\r\n selectorValueChanged() {\r\n this._errors = Array.from(document.querySelectorAll(this._selector));\r\n }\r\n\r\n private _toggleButtons() {\r\n if (this.hasNextTarget) {\r\n if (this.indexValue >= this._errorCount - 1) {\r\n this.nextTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.nextTarget.removeAttribute(\"disabled\");\r\n }\r\n }\r\n if (this.hasPreviousTarget) {\r\n if (this.indexValue <= 0) {\r\n this.previousTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.previousTarget.removeAttribute(\"disabled\");\r\n }\r\n }\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 {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","EphemeralController","_cleanupSelf","cleanup","dataset","controller","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","values","keys","forEach","val","classes","AnchorSpyController","_key","keyValue","_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","method","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","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","CountdownController","_removeUnused","endedClasses","endedClass","split","countingDownClasses","countingDownClass","_deadlineDate","Date","deadlineValue","_interval","setInterval","_tick","hasCountingDownClass","_clearTick","hasEndedClass","deadlineValueChanged","now","distance","isPast","years","months","days","hours","minutes","seconds","intervalToDuration","start","end","hasYearsTarget","_updateTarget","yearsTarget","_years","hasMonthsTarget","monthsTarget","_months","hasDaysTarget","daysTarget","_days","hasHoursTarget","hoursTarget","_hours","hasMinutesTarget","minutesTarget","_minutes","hasSecondsTarget","secondsTarget","_seconds","e","clearInterval","_removeTargetIfUnused","unused","parseInt","undefined","duration","deadline","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","timeout","DismissableController","dismiss","ElementSaveController","_id","hasIdValue","idValue","elementID","_uniqueIdentifier","href","_restoreOnLoad","hasRestoreOnLoadValue","restoreOnLoadValue","_element","hasElementTarget","elementTarget","localStorage","removeItem","save","attributes","attributesValue","data","attr","_get","setItem","JSON","stringify","getItem","savedData","parse","_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","parseFloat","trim","threshold","disappear","IntervalController","hasSecondsValue","_intervalHandle","secondsValue","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","NavigateFormErrorsController","_errorCount","_errors","_previousIndex","index","_index","_nextIndex","Math","hasIndexValue","indexValue","_selector","_previousError","_currentError","_nextError","_toggleButtons","indexValueChanged","selectorValueChanged","hasNextTarget","nextTarget","hasPreviousTarget","previousTarget","NestedFormController","_wrapperClass","hasWrapperSelectorValue","wrapperClassValue","_insertMode","hasInsertModeValue","insertModeValue","_checkStructure","content","templateTarget","replace","_generateID","targetTarget","insertAdjacentHTML","wrapper","closest","newRecord","destroyInput","getTime","random","slice","indexOf","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","status","xhr","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","debounces","func","postUpdate","getHeight","parent","postMessage","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","_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/utilities/ephemeral_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/visual/countdown_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/navigate_form_errors_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/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/visual/time_distance_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 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 {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 {Duration, intervalToDuration, isPast} from \"date-fns\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class CountdownController extends BaseController {\r\n\r\n static values = {deadline: String, removeUnused: Boolean};\r\n static targets = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\r\n static classes = [\"countingDown\", \"ended\"];\r\n\r\n // Values\r\n declare readonly deadlineValue: string;\r\n declare readonly removeUnusedValue: boolean;\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n // Targets\r\n declare readonly hasYearsTarget: boolean;\r\n declare readonly yearsTarget: HTMLElement;\r\n declare readonly hasMonthsTarget: boolean;\r\n declare readonly monthsTarget: HTMLElement;\r\n declare readonly hasDaysTarget: boolean;\r\n declare readonly daysTarget: HTMLElement;\r\n declare readonly hasHoursTarget: boolean;\r\n declare readonly hoursTarget: HTMLElement;\r\n declare readonly hasMinutesTarget: boolean;\r\n declare readonly minutesTarget: HTMLElement;\r\n declare readonly hasSecondsTarget: boolean;\r\n declare readonly secondsTarget: HTMLElement;\r\n // Classes\r\n declare readonly countingDownClass: string;\r\n declare readonly hasCountingDownClass: boolean;\r\n declare readonly endedClass: string;\r\n declare readonly hasEndedClass: boolean;\r\n // Instance Data\r\n _interval: null | ReturnType = null;\r\n\r\n get _removeUnused(): boolean {\r\n return this.hasRemoveUnusedValue ? this.removeUnusedValue : false;\r\n }\r\n\r\n get endedClasses(): string[] {\r\n return this.endedClass.split(' ');\r\n }\r\n\r\n get countingDownClasses(): string[] {\r\n return this.countingDownClass.split(' ');\r\n }\r\n\r\n get _deadlineDate() {\r\n return new Date(this.deadlineValue);\r\n }\r\n\r\n connect() {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.add(...this.countingDownClasses);\r\n }\r\n }\r\n\r\n disconnect() {\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.remove(...this.endedClasses);\r\n }\r\n }\r\n\r\n deadlineValueChanged() {\r\n // Countdown had previously ended, restart ticking. Updating mid-tick will just work.\r\n if (this._interval == null) {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n }\r\n }\r\n\r\n _tick() {\r\n try {\r\n const now = new Date();\r\n let distance: Duration = {};\r\n\r\n if (isPast(this._deadlineDate)) {\r\n distance = {years: 0, months: 0, days: 0, hours: 0, minutes: 0, seconds: 0};\r\n // Countdown has ended, stop ticking\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.add(...this.endedClasses);\r\n }\r\n this.dispatch(this.el, \"countdown:ended\");\r\n } else {\r\n distance = intervalToDuration({start: this._deadlineDate, end: now});\r\n }\r\n\r\n if (this.hasYearsTarget) {\r\n this._updateTarget(this.yearsTarget, this._years(distance));\r\n }\r\n if (this.hasMonthsTarget) {\r\n this._updateTarget(this.monthsTarget, this._months(distance));\r\n }\r\n if (this.hasDaysTarget) {\r\n this._updateTarget(this.daysTarget, this._days(distance));\r\n }\r\n if (this.hasHoursTarget) {\r\n this._updateTarget(this.hoursTarget, this._hours(distance));\r\n }\r\n if (this.hasMinutesTarget) {\r\n this._updateTarget(this.minutesTarget, this._minutes(distance));\r\n }\r\n if (this.hasSecondsTarget) {\r\n this._updateTarget(this.secondsTarget, this._seconds(distance));\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n this._clearTick();\r\n }\r\n }\r\n\r\n _clearTick() {\r\n if (this._interval) {\r\n clearInterval(this._interval);\r\n this._interval = null;\r\n }\r\n }\r\n\r\n _updateTarget(target: HTMLElement, value: number) {\r\n this._removeTargetIfUnused(target, value);\r\n target.innerHTML = value.toString();\r\n }\r\n\r\n _removeTargetIfUnused(target: HTMLElement, value: number) {\r\n if (this._removeUnused) {\r\n if (value === 0 && target.dataset.unused) {\r\n if (Number.parseInt(target.dataset.unused) > Date.now() + 1500) {\r\n target.remove();\r\n }\r\n } else if (value == 0) {\r\n target.dataset.unused = Date.now().toString();\r\n } else {\r\n target.dataset.unused = undefined;\r\n }\r\n }\r\n }\r\n\r\n _years(duration: Duration): number {\r\n return duration.years || 0;\r\n }\r\n\r\n _months(duration: Duration): number {\r\n return duration.months || 0;\r\n }\r\n\r\n _days(duration: Duration): number {\r\n return duration.days || 0;\r\n }\r\n\r\n _hours(duration: Duration): number {\r\n return duration.hours || 0;\r\n }\r\n\r\n _minutes(duration: Duration): number {\r\n return duration.minutes || 0;\r\n }\r\n\r\n _seconds(duration: Duration): number {\r\n return duration.seconds || 0;\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 as _get, set as _set} from \"lodash-es\";\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 declare readonly hasSecondsValue: boolean;\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 if (!this.hasSecondsValue) {\r\n throw new Error('Expected `secondsValue` to be present')\r\n }\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\nimport {scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class NavigateFormErrorsController extends BaseController {\r\n static values = {\r\n selector: String,\r\n index: Number,\r\n };\r\n\r\n static targets = [\"next\", \"current\", \"previous\"];\r\n\r\n declare readonly hasNextTarget: boolean;\r\n declare readonly nextTarget: HTMLElement;\r\n declare readonly hasPreviousTarget: boolean;\r\n declare readonly previousTarget: HTMLElement;\r\n declare readonly hasCurrentTarget: boolean;\r\n declare readonly currentTarget: HTMLElement;\r\n\r\n declare selectorValue: string;\r\n declare readonly hasSelectorValue: boolean;\r\n declare indexValue: number;\r\n declare readonly hasIndexValue: boolean;\r\n\r\n _errors: HTMLElement[] = [];\r\n\r\n get _errorCount(): number {\r\n return this._errors.length;\r\n }\r\n\r\n get _previousIndex(): number | null {\r\n let index = this._index - 1;\r\n if (index < 0) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _nextIndex(): number | null {\r\n let index = this._index + 1;\r\n if (index > this._errors.length - 1) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _index(): number {\r\n return Math.min(\r\n this.hasIndexValue ? this.indexValue : 0,\r\n this._errors.length,\r\n );\r\n }\r\n\r\n get _selector(): string {\r\n if (this.hasSelectorValue) {\r\n return this.selectorValue;\r\n } else {\r\n throw new Error(\"Expected `selectorValue` to be present\");\r\n }\r\n }\r\n\r\n get _previousError(): HTMLElement | null {\r\n return this._previousIndex ? this._errors[this._previousIndex] : null;\r\n }\r\n\r\n get _currentError(): HTMLElement {\r\n return this._errors[this._index];\r\n }\r\n\r\n get _nextError(): HTMLElement | null {\r\n return this._nextIndex ? this._errors[this._nextIndex] : null;\r\n }\r\n\r\n connect() {\r\n if (!this.hasIndexValue) {\r\n this.indexValue = -1;\r\n }\r\n this._toggleButtons();\r\n\r\n if (this._errorCount === 0) {\r\n this.el.style.display = \"none\";\r\n } else {\r\n this.el.style.display = \"\";\r\n }\r\n }\r\n\r\n async current() {\r\n await scrollToElement(this._currentError);\r\n }\r\n\r\n async next() {\r\n if (this._nextError) {\r\n await scrollToElement(this._nextError);\r\n }\r\n if (this._index < this._errorCount - 1) {\r\n this.indexValue += 1;\r\n }\r\n }\r\n\r\n async previous() {\r\n if (this._previousError) {\r\n await scrollToElement(this._previousError);\r\n }\r\n if (this._index > 0) {\r\n this.indexValue -= 1;\r\n }\r\n }\r\n\r\n indexValueChanged() {\r\n this._toggleButtons();\r\n }\r\n\r\n selectorValueChanged() {\r\n this._errors = Array.from(document.querySelectorAll(this._selector));\r\n }\r\n\r\n private _toggleButtons() {\r\n if (this.hasNextTarget) {\r\n if (this.indexValue >= this._errorCount - 1) {\r\n this.nextTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.nextTarget.removeAttribute(\"disabled\");\r\n }\r\n }\r\n if (this.hasPreviousTarget) {\r\n if (this.indexValue <= 0) {\r\n this.previousTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.previousTarget.removeAttribute(\"disabled\");\r\n }\r\n }\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 {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\nimport {Duration, formatDistanceToNow, intervalToDuration, isPast, toDate} from \"date-fns\";\r\n\r\nexport class TimeDistanceController extends BaseController {\r\n static values = {\r\n timestamp: Number,\r\n };\r\n\r\n declare timestampValue: number;\r\n declare readonly hasTimestampValue: boolean;\r\n\r\n _timeout: number | null = null;\r\n declare _timestamp: Date;\r\n\r\n get _duration(): Duration {\r\n return isPast(this._timestamp) ? intervalToDuration({start: this._timestamp, end: new Date()}) : intervalToDuration({start: new Date(), end: this._timestamp});\r\n }\r\n\r\n get _nextUpdate(): number | null {\r\n let duration = this._duration;\r\n\r\n if (duration.years && duration.years > 0) {\r\n return null;\r\n } else if (duration.months && duration.months > 0) {\r\n return null;\r\n } else if (duration.days && duration.days > 0) {\r\n return null;\r\n } else if (duration.hours && duration.hours > 0) {\r\n return 1800000; // Update every 30 mins\r\n } else {\r\n return 30000; // Update every 30 seconds\r\n }\r\n }\r\n\r\n timestampValueChanged() {\r\n this._timestamp = toDate(this.timestampValue * 1000);\r\n }\r\n\r\n initialize() {\r\n this._update = this._update.bind(this);\r\n }\r\n\r\n connect() {\r\n if (!this.hasTimestampValue) {\r\n throw new Error(\"Expected `timestampValue` to be present\");\r\n }\r\n this._update();\r\n }\r\n\r\n disconnect() {\r\n if (this._timeout) {\r\n window.clearTimeout(this._timeout);\r\n }\r\n }\r\n\r\n _update() {\r\n this.el.innerHTML = formatDistanceToNow(this._timestamp, {\r\n addSuffix: true,\r\n includeSeconds: true,\r\n });\r\n\r\n if (this._nextUpdate) {\r\n this._timeout = window.setTimeout(this._update, this._nextUpdate);\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","EphemeralController","_cleanupSelf","cleanup","dataset","controller","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","values","keys","forEach","val","classes","AnchorSpyController","_key","keyValue","_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","method","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","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","CountdownController","_removeUnused","endedClasses","endedClass","split","countingDownClasses","countingDownClass","_deadlineDate","Date","deadlineValue","_interval","setInterval","_tick","hasCountingDownClass","_clearTick","hasEndedClass","deadlineValueChanged","now","distance","isPast","years","months","days","hours","minutes","seconds","intervalToDuration","start","end","hasYearsTarget","_updateTarget","yearsTarget","_years","hasMonthsTarget","monthsTarget","_months","hasDaysTarget","daysTarget","_days","hasHoursTarget","hoursTarget","_hours","hasMinutesTarget","minutesTarget","_minutes","hasSecondsTarget","secondsTarget","_seconds","e","clearInterval","_removeTargetIfUnused","unused","parseInt","undefined","duration","deadline","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","timeout","DismissableController","dismiss","ElementSaveController","_id","hasIdValue","idValue","elementID","_uniqueIdentifier","href","_restoreOnLoad","hasRestoreOnLoadValue","restoreOnLoadValue","_element","hasElementTarget","elementTarget","localStorage","removeItem","save","attributes","attributesValue","data","attr","_get","setItem","JSON","stringify","getItem","savedData","parse","_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","parseFloat","trim","threshold","disappear","IntervalController","hasSecondsValue","_intervalHandle","secondsValue","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","NavigateFormErrorsController","_errorCount","_errors","_previousIndex","index","_index","_nextIndex","Math","hasIndexValue","indexValue","_selector","_previousError","_currentError","_nextError","_toggleButtons","indexValueChanged","selectorValueChanged","hasNextTarget","nextTarget","hasPreviousTarget","previousTarget","NestedFormController","_wrapperClass","hasWrapperSelectorValue","wrapperClassValue","_insertMode","hasInsertModeValue","insertModeValue","_checkStructure","content","templateTarget","replace","_generateID","targetTarget","insertAdjacentHTML","wrapper","closest","newRecord","destroyInput","getTime","random","slice","indexOf","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","status","xhr","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","debounces","func","postUpdate","getHeight","parent","postMessage","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","_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","TimeDistanceController","_duration","_timestamp","_nextUpdate","timestampValueChanged","toDate","timestampValue","_update","hasTimestampValue","formatDistanceToNow","addSuffix","includeSeconds","timestamp","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 b87549c4..a7735424 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"camelcase";import{isPast as n,intervalToDuration as i}from"date-fns";import{get as r,set as s}from"lodash-es";import o from"dialog-polyfill";function a(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 m=function(t){function e(e){var n;return n=t.call(this,e)||this,new Proxy(h(n),{get:function(t,e){var i=Reflect.get(t,e),r=h(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}})||h(n)}c(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(u({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()}},l(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),p=function(t){function n(){return t.apply(this,arguments)||this}c(n,t);var i=n.prototype;return i._cleanupSelf=function(){this.cleanup(this.el)},i.cleanup=function(t){var n,i,r,s=this;t.dataset.controller=(null==(n=t.dataset.controller)?void 0:n.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==(i=t.dataset.target)?void 0:i.replaceAll(o,""))||"",delete t.dataset[e(this.identifier+"-target")],""==t.dataset.target&&delete t.dataset.target,t.dataset.action=(null==(r=t.dataset.target)?void 0:r.replaceAll(o,""))||"",delete t.dataset[e(this.identifier+"-action")],""==t.dataset.action&&delete t.dataset.action;var a=this.constructor.values;a&&Object.keys(a).forEach(function(n){return delete t.dataset[e(s.identifier+"-"+n+"-value")]});var l=this.constructor.classes;l&&Object.keys(l).forEach(function(n){return delete t.dataset[e(s.identifier+"-"+n+"-class")]})},n}(m),v=function(t){function e(){return t.apply(this,arguments)||this}c(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")},l(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}(m);v.values={key:String};var g=function(t){function e(){return t.apply(this,arguments)||this}c(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}(m),_=function(t){function e(){return t.apply(this,arguments)||this}c(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")})},l(e,[{key:"_errorMessage",get:function(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}}]),e}(m);_.targets=["replace"],_.values={endpoint:String,errorMessage:String,selector:String};var y=function(t){function e(){return t.apply(this,arguments)||this}c(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}(m);const b=(t,e)=>{const n=t[e];return"function"==typeof n?n:(...t)=>{}},E=(t,e,n)=>{let i=t;return!0===n?i=`${e.identifier}:${t}`:"string"==typeof n&&(i=`${n}:${t}`),i},w=(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})},k={dispatchEvent:!0,eventPrefix:!0},T=(t,e={})=>{const{dispatchEvent:n,eventPrefix:i}=Object.assign({},k,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,b(t,"appear").call(t,e),n){const n=E("appear",t,i),s=w(n,null,{controller:t,entry:e});r.dispatchEvent(s)}})(s):t.isVisible&&(e=>{if(t.isVisible=!1,b(t,"disappear").call(t,e),n){const n=E("disappear",t,i),s=w(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]},V={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},C={debug:!1,logger:console};class S{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:C.debug,this.logger=null!==(r=null==e?void 0:e.logger)&&void 0!==r?r:C.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 L extends S{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=()=>{b(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{b(this.controller,"mouseLeave").call(this.controller),this.log("mouseLeave",{hover:!1})},this.targetElement=(null==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 x extends S{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=>{b(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 A=(t,e={})=>{const n=new x(t,e);return[n.observe,n.unobserve]},D=t=>{const e=e=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:e};b(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]},I=(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 M=function(t){function e(){return t.apply(this,arguments)||this}c(e,t);var n=e.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var t=this;D(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}(m),N=function(t){function e(){return t.apply(this,arguments)||this}c(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}(m);N.targets=["input","output"],N.values={min:Number,max:Number},N.classes=["error"];var O=function(t){function e(){return t.apply(this,arguments)||this}c(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&&eDate.now()+1500&&t.remove():t.dataset.unused=0==e?Date.now().toString():void 0)},r._years=function(t){return t.years||0},r._months=function(t){return t.months||0},r._days=function(t){return t.days||0},r._hours=function(t){return t.hours||0},r._minutes=function(t){return t.minutes||0},r._seconds=function(t){return t.seconds||0},l(e,[{key:"_removeUnused",get:function(){return!!this.hasRemoveUnusedValue&&this.removeUnusedValue}},{key:"endedClasses",get:function(){return this.endedClass.split(" ")}},{key:"countingDownClasses",get:function(){return this.countingDownClass.split(" ")}},{key:"_deadlineDate",get:function(){return new Date(this.deadlineValue)}}]),e}(m);W.values={deadline:String,removeUnused:Boolean},W.targets=["years","months","days","hours","minutes","seconds"],W.classes=["countingDown","ended"];var $=function(t){function e(){return t.apply(this,arguments)||this}return c(e,t),e.prototype.connect=function(){console.log("Debug Controller",this,this.testTargets)},e}(m);$.targets=["test"];var J=function(t){function e(){return t.apply(this,arguments)||this}c(e,t);var n=e.prototype;return n.initialize=function(){this._checkDirty=this._checkDirty.bind(this)},n.connect=function(){var t=this.el;this._cacheLoadValues(),this._checkDirty(),t.addEventListener("input",this._checkDirty),t.addEventListener("change",this._checkDirty)},n.disconnect=function(){var t=this.el;t.removeEventListener("input",this._checkDirty),t.removeEventListener("change",this._checkDirty)},n.restore=function(t){null==t||t.preventDefault(),this._restoreElementFromLoadValue()},n._getElementValue=function(){var t=this.el;return q(t)?t.checked:t.value},n._getElementLoadValue=function(){var t=this.el,e=t.getAttribute(this._cacheAttrName);return q(t)?null==e?t.defaultChecked:"true"==e:(null!==e||j(t)&&Array.from(t.options).forEach(function(e){if(e.defaultSelected)return t.value=e.value,e.value}),e)},n._elementHasCachedLoadValue=function(){return this.el.hasAttribute(this._cacheAttrName)},n._checkDirty=function(){var t=this.el;this._isElementDirty()?t.setAttribute("data-dirty","true"):t.removeAttribute("data-dirty")},n._isElementDirty=function(){return this._getElementValue()!==this._getElementLoadValue()},n._restoreElementFromLoadValue=function(){var t=this.el,e=t.getAttribute(this._cacheAttrName);q(t)?(t.setAttribute(this._cacheAttrName,t.checked.toString()),t.checked=null==e?t.defaultChecked:"true"==e):j(t)?null==e?Array.from(t.options).forEach(function(e){e.defaultSelected&&(t.value=e.value)}):t.value=e:t.value=null==e?t.defaultValue:e},n._cacheLoadValues=function(){var t=this.el;!this._elementHasCachedLoadValue()&&q(t)?t.setAttribute(this._cacheAttrName,t.checked.toString()):t.setAttribute(this._cacheAttrName,t.value.toString())},l(e,[{key:"_cacheAttrName",get:function(){return"detect-dirty-load-value"}}]),e}(m),Y=function(t){function e(){return t.apply(this,arguments)||this}c(e,t);var n=e.prototype;return n.initialize=function(){this._checkDirty=this._checkDirty.bind(this)},n.connect=function(){var t=this.el;this._cacheLoadValues(),this._checkDirty(),t.addEventListener("input",this._checkDirty),t.addEventListener("change",this._checkDirty)},n.disconnect=function(){var t=this.el;t.removeEventListener("input",this._checkDirty),t.removeEventListener("change",this._checkDirty)},n.restore=function(t){var e=this;null==t||t.preventDefault(),this._formElements.forEach(function(t){return e._restoreElementFromLoadValue(t)})},n._getElementValue=function(t){return q(t)?t.checked:t.value},n._getElementLoadValue=function(t){var e=t.getAttribute(this._cacheAttrName);return q(t)?null==e?t.defaultChecked:"true"==e:(null!==e||j(t)&&Array.from(t.options).forEach(function(e){if(e.defaultSelected)return t.value=e.value,e.value}),e)},n._elementHasCachedLoadValue=function(t){return t.hasAttribute(this._cacheAttrName)},n._checkElementDirty=function(t){this._isElementDirty(t)?t.setAttribute("data-dirty","true"):t.removeAttribute("data-dirty")},n._isElementDirty=function(t){return this._getElementValue(t)!==this._getElementLoadValue(t)},n._cacheElementLoadValue=function(t){!this._elementHasCachedLoadValue(t)&&q(t)?t.setAttribute(this._cacheAttrName,t.checked.toString()):t.setAttribute(this._cacheAttrName,t.value.toString())},n._restoreElementFromLoadValue=function(t){var e=t.getAttribute(this._cacheAttrName);q(t)?(t.setAttribute(this._cacheAttrName,t.checked.toString()),t.checked=null==e?t.defaultChecked:"true"==e):j(t)?null==e?Array.from(t.options).forEach(function(e){e.defaultSelected&&(t.value=e.value)}):t.value=e:t.value=null==e?t.defaultValue:e},n._cacheLoadValues=function(){var t=this;this._formElements.forEach(function(e){return t._cacheElementLoadValue(e)})},n._checkDirty=function(){var t=this;this._formElements.forEach(function(e){return t._checkElementDirty(e)}),this._formElements.some(function(t){return t.hasAttribute("data-dirty")})?this.el.setAttribute("data-dirty","true"):this.el.removeAttribute("data-dirty")},l(e,[{key:"_formElements",get:function(){return Array.from(this.el.querySelectorAll("input, select, textarea"))}},{key:"_cacheAttrName",get:function(){return"detect-dirty-load-value"}}]),e}(m),G=function(t){function e(){return t.apply(this,arguments)||this}c(e,t);var n=e.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasDisablerTarget&&this.disablerTarget.checked?this.disableInputs():this.enableInputs()},n.disableInputs=function(){var t=this.hasClearValue&&this.clearValue;this.disableTargets.forEach(function(e,n){t&&(e.value=""),e.disabled=!0})},n.enableInputs=function(){this.disableTargets.forEach(function(t,e){t.disabled=!1})},e}(m);G.targets=["disabler","disable"],G.values={clear:Boolean};var K=function(t){function e(){return t.apply(this,arguments)||this}c(e,t);var n=e.prototype;return n.initialize=function(){this.enable=this.enable.bind(this),this.disable=this.disable.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t.el.addEventListener("click",t.disable)})},n.disconnect=function(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)},n.disable=function(t){var e=this.el;this._isDisabled(e)?(null==t||t.preventDefault(),null==t||t.stopImmediatePropagation()):(this._cacheText=this._getElText(e),this._setElText(e,this._message),this._disable(e),setTimeout(this.enable,this._timeout))},n.enable=function(t){null==t||t.preventDefault();var e=this.el;this._isDisabled(e)&&(this._setElText(e,this._cacheText),this._enable(e))},n._isDisabled=function(t){return B(t)&&"submit"==t.type||R(t)?t.disabled:"true"==t.dataset.disabled},n._getElText=function(t){return B(t)&&"submit"==t.type?t.value:t.innerText},n._setElText=function(t,e){B(t)&&"submit"==t.type?t.value=e:(R(t)||z(t))&&(t.innerText=e)},n._disable=function(t){B(t)&&"submit"==t.type||R(t)?t.disabled=!0:t.dataset.disabled="true"},n._enable=function(t){B(t)&&"submit"==t.type||R(t)?t.disabled=!1:t.dataset.disabled=void 0},l(e,[{key:"_message",get:function(){return this.hasMessageValue?this.messageValue:"Submitting..."}},{key:"_timeout",get:function(){return this.hasTimeoutValue?this.timeoutValue:1e3}}]),e}(m);K.values={message:String,timeout:Number};var Q=function(t){function e(){return t.apply(this,arguments)||this}return c(e,t),e.prototype.dismiss=function(){this.el.remove()},e}(m),X=function(t){function e(){return t.apply(this,arguments)||this}c(e,t);var n=e.prototype;return n.connect=function(){var t=this;requestAnimationFrame(function(){t._restoreOnLoad&&t.restore()})},n.clear=function(t){t&&t.preventDefault(),localStorage.removeItem(this._uniqueIdentifier),this.dispatch(this._element,"element-save:cleared")},n.save=function(t){t&&t.preventDefault();var e=this._element,n=this.attributesValue.split(" "),i={};n.forEach(function(t){return i[t]=r(e,t)}),localStorage.setItem(this._uniqueIdentifier,JSON.stringify(i)),this.dispatch(e,"element-save:save:success")},n.restore=function(t){t&&t.preventDefault();var e=this._element;if(localStorage.getItem(this._uniqueIdentifier)){var n=JSON.parse(localStorage.getItem(this._uniqueIdentifier));Object.keys(n).forEach(function(t){s(e,t,n[t])}),this.dispatch(e,"element-save:restore:success")}else this.dispatch(e,"element-save:restore:empty")},l(e,[{key:"_id",get:function(){if(this.hasIdValue)return this.idValue;var t=this.el.id;if(""!==t)return t;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. ")}},{key:"_uniqueIdentifier",get:function(){return location.href+" "+this._id}},{key:"_restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"_element",get:function(){return this.hasElementTarget?this.elementTarget:this.el}}]),e}(m);X.targets=["element"],X.values={id:String,attributes:String,restoreOnLoad:Boolean};var Z=function(t){function e(){return t.apply(this,arguments)||this}c(e,t);var n=e.prototype;return n.connect=function(){A(this,{element:this.el,childList:!0}),this.checkEmpty()},n.mutate=function(t){this.checkEmpty()},n.checkEmpty=function(){var t=this.el,e=this._children;0===e.length?(this._removeNotEmptyClasses(),this._addEmptyClasses(),this.dispatch(t,"dom:empty")):(this._addNotEmptyClasses(),this._removeEmptyClasses(),this.dispatch(t,"dom:not-empty",{detail:{count:e.length}}))},n._removeEmptyClasses=function(){var t;this.hasEmptyClass&&(t=this.el.classList).remove.apply(t,this.emptyClasses)},n._addNotEmptyClasses=function(){var t;this.hasNotEmptyClass&&(t=this.el.classList).add.apply(t,this.notEmptyClasses)},n._addEmptyClasses=function(){var t;this.hasEmptyClass&&(t=this.el.classList).add.apply(t,this.emptyClasses)},n._removeNotEmptyClasses=function(){var t;this.hasNotEmptyClass&&(t=this.el.classList).remove.apply(t,this.notEmptyClasses)},l(e,[{key:"emptyClasses",get:function(){return this.emptyClass.split(" ")}},{key:"notEmptyClasses",get:function(){return this.notEmptyClass.split(" ")}},{key:"_children",get:function(){var t=this.el;return Array.from(this.hasScopeSelectorValue?t.querySelectorAll(this.scopeSelectorValue):t.children)}}]),e}(m);Z.classes=["empty","notEmpty"],Z.values={scopeSelector:String};var tt=function(t){function e(){return t.apply(this,arguments)||this}c(e,t);var n=e.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasEnablerTarget&&this.enablerTarget.checked?this.enableInputs():this.disableInputs()},n.disableInputs=function(){var t=this.hasClearValue&&this.clearValue;this.enableTargets.forEach(function(e,n){t&&(e.value=""),e.disabled=!0})},n.enableInputs=function(){this.enableTargets.forEach(function(t,e){t.disabled=!1})},e}(m);tt.targets=["enabler","enable"],tt.values={clear:Boolean};var et=function(t){function e(){return t.apply(this,arguments)||this}return c(e,t),e.prototype.connect=function(){var t=this,e=this.el;e.onerror=function(){t.hasPlaceholderValue?e.src=t.placeholderValue:e.style.display="none"}},e}(m);et.values={placeholder:String};var nt=function(t){function e(){return t.apply(this,arguments)||this}c(e,t);var n=e.prototype;return n.submit=function(t){null==t||t.preventDefault(),this.dispatch(this.formTarget,"submit"),this.formTarget.submit()},n.reset=function(t){null==t||t.preventDefault(),this.dispatch(this.formTarget,"reset"),this.formTarget.reset()},e}(m);nt.targets=["form"];var it=function(t){function e(){return t.apply(this,arguments)||this}c(e,t);var n=e.prototype;return n.initialize=function(){this._clear=this._clear.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){if(!P(t.el))throw new Error("Expected controller to be mounted on a form element.");t._restoreOnLoad&&t.restore(),t._clearOnSubmit&&t.el.addEventListener("submit",t._clear)})},n.disconnect=function(){this._clearOnSubmit&&this.el.removeEventListener("submit",this._clear)},n._clear=function(){localStorage.removeItem(this._formIdentifier),this.dispatch(this.el,"form-save:cleared")},n.clear=function(t){null==t||t.preventDefault(),this._clear()},n.save=function(t){t.preventDefault(),localStorage.setItem(this._formIdentifier,JSON.stringify(this._formData[this._formIdentifier])),this.dispatch(this.el,"form-save:save:success")},n.restore=function(t){if(null==t||t.preventDefault(),localStorage.getItem(this._formIdentifier)){for(var e,n=JSON.parse(localStorage.getItem(this._formIdentifier)),i=f(this._formElements);!(e=i()).done;){var r=e.value;r.name in n&&(B(r)&&"checkbox"==r.type?r.checked=n[r.name]:B(r)&&"radio"==r.type?r.value==n[r.name]&&(r.checked=!0):r.value=n[r.name])}this.dispatch(this.el,"form-save:restore:success")}else this.dispatch(this.el,"form-save:restore:empty")},l(e,[{key:"_formID",get:function(){if(this.hasIdValue)return this.idValue;var t=this.el.id;if(""!==t)return t;throw new Error("No ID value to uniquely identify this form. Please either specify data-"+this.identifier+"-id-value or give this form an 'id' attribute. ")}},{key:"_formIdentifier",get:function(){return location.href+" "+this._formID}},{key:"_formElements",get:function(){return this.el.elements}},{key:"_formData",get:function(){for(var t,e,n=((t={})[this._formIdentifier]={},t),i=f(this._formElements);!(e=i()).done;){var r=e.value;r.name.length>0&&(B(r)&&"checkbox"==r.type?n[this._formIdentifier][r.name]=r.checked:B(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}(m);it.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var rt=function(t){function e(){return t.apply(this,arguments)||this}c(e,t);var n=e.prototype;return n.connect=function(){T(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}})},l(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}(m);rt.values={threshold:String};var st=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._intervalHandle=null,e}c(e,t);var n=e.prototype;return n.initialize=function(){this._interval=this._interval.bind(this)},n.connect=function(){var t=this;if(!this.hasSecondsValue)throw new Error("Expected `secondsValue` to be present");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}(m);st.values={seconds:Number};var ot,at=function(t){function e(){return t.apply(this,arguments)||this}c(e,t);var n=e.prototype;return n.connect=function(){if("IntersectionObserver"in window){var t=T(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}(_),lt=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 u=function(){t.scrollIntoView({behavior:r,block:o,inline:l})},c=function(){if("smooth"==r&&!ut)return Promise.resolve(function(){try{return Promise.resolve(import("smoothscroll-polyfill")).then(function(t){ot||(ot=!0,(0,t.polyfill)())})}catch(t){return Promise.reject(t)}}()).then(function(){})}();return Promise.resolve(c&&c.then?c.then(u):u())}catch(t){return Promise.reject(t)}},ut="scrollBehavior"in document.documentElement.style;function ct(t){if(!t)return null;var e=getComputedStyle(t).overflowY;return"visible"!==e&&"hidden"!==e&&t.scrollHeight>=t.clientHeight?t:ct(t.parentElement)||document.body}var ht=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._dialog=null,e}c(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),o.registerDialog(this._dialog),this._dialog.className=this._modalClassName,this._dialog.showModal(),lt(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,lt(this.el,{behavior:"smooth",block:"end"}).catch(function(){return t.el.scrollIntoView(!1)}))},l(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}(m);ht.values={src:String,srcSet:String,sizes:String},ht.classes=["modal","image"];var dt=function(t){function e(){return t.apply(this,arguments)||this}c(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}(m);dt.targets=["input","error"],dt.values={max:Number,message:String};var ft=function(t){function e(){return t.apply(this,arguments)||this}c(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}(m);ft.targets=["media"];var mt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._errors=[],e}c(e,t);var n=e.prototype;return n.connect=function(){this.hasIndexValue||(this.indexValue=-1),this._toggleButtons(),this.el.style.display=0===this._errorCount?"none":""},n.current=function(){try{return Promise.resolve(lt(this._currentError)).then(function(){})}catch(t){return Promise.reject(t)}},n.next=function(){try{var t=this,e=function(){t._index0&&(t.indexValue-=1)},n=function(){if(t._previousError)return Promise.resolve(lt(t._previousError)).then(function(){})}();return Promise.resolve(n&&n.then?n.then(e):e())}catch(t){return Promise.reject(t)}},n.indexValueChanged=function(){this._toggleButtons()},n.selectorValueChanged=function(){this._errors=Array.from(document.querySelectorAll(this._selector))},n._toggleButtons=function(){this.hasNextTarget&&(this.indexValue>=this._errorCount-1?this.nextTarget.setAttribute("disabled","true"):this.nextTarget.removeAttribute("disabled")),this.hasPreviousTarget&&(this.indexValue<=0?this.previousTarget.setAttribute("disabled","true"):this.previousTarget.removeAttribute("disabled"))},l(e,[{key:"_errorCount",get:function(){return this._errors.length}},{key:"_previousIndex",get:function(){var t=this._index-1;return t<0?null:t}},{key:"_nextIndex",get:function(){var t=this._index+1;return t>this._errors.length-1?null:t}},{key:"_index",get:function(){return Math.min(this.hasIndexValue?this.indexValue:0,this._errors.length)}},{key:"_selector",get:function(){if(this.hasSelectorValue)return this.selectorValue;throw new Error("Expected `selectorValue` to be present")}},{key:"_previousError",get:function(){return this._previousIndex?this._errors[this._previousIndex]:null}},{key:"_currentError",get:function(){return this._errors[this._index]}},{key:"_nextError",get:function(){return this._nextIndex?this._errors[this._nextIndex]:null}}]),e}(m);mt.values={selector:String,index:Number},mt.targets=["next","current","previous"];var pt=function(t){function e(){return t.apply(this,arguments)||this}c(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`")},l(e,[{key:"_wrapperClass",get:function(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}},{key:"_insertMode",get:function(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}}]),e}(m);pt.targets=["target","template"],pt.values={insertMode:String,wrapperClass:String};var vt=function(t){function e(){return t.apply(this,arguments)||this}c(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}(m);vt.targets=["password"],vt.classes=["error"];var gt=function(t){function e(){return t.apply(this,arguments)||this}c(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}(m);gt.targets=["password"];var _t=function(t){function e(){return t.apply(this,arguments)||this}return c(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)},l(e,[{key:"_selector",get:function(){return this.hasSelectorValue?this.selectorValue:'[data-controller~="'+this.identifier+'"]'}}]),e}(m);_t.targets=[],_t.values={selector:String};var yt=function(t){function e(){return t.apply(this,arguments)||this}c(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}(m),bt=function(t){function e(){return t.apply(this,arguments)||this}c(e,t);var n=e.prototype;return n.connect=function(){var t,e,n;window.self!==window.top&&(D(this),e={},null===(n=(t=this).constructor.debounces)||void 0===n||n.forEach(n=>{if("string"==typeof n&&(t[n]=I(t[n],null==e?void 0:e.wait)),"object"==typeof n){const{name:i,wait:r}=n;if(!i)return;t[i]=I(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}(m);bt.debounces=["postUpdate"];var Et=function(t){function e(){return t.apply(this,arguments)||this}return c(e,t),e.prototype.connect=function(){var t=this;requestAnimationFrame(function(){lt(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}(p);Et.values={behavior:String,block:String,inline:String};var wt=function(t){function e(){return t.apply(this,arguments)||this}return c(e,t),e.prototype.scroll=function(t){var e;null==t||t.preventDefault(),null!=(e="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ct(this.el))&<(e,{behavior:"smooth",block:"end"}).catch(function(){return e.scrollIntoView(!1)})},e}(m);wt.values={mode:String};var kt=function(t){function e(){return t.apply(this,arguments)||this}return c(e,t),e.prototype.scroll=function(){var t=document.querySelector(this.selectorValue);t?lt(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}(m);kt.values={selector:String,behavior:String,block:String,inline:String};var Tt=function(t){function e(){return t.apply(this,arguments)||this}return c(e,t),e.prototype.scroll=function(t){var e;null==t||t.preventDefault(),null!=(e="document"==(this.hasModeValue?this.modeValue:"document")?document.body:ct(this.el))&<(e,{behavior:"smooth",block:"start"}).catch(function(){return e.scrollIntoView(!1)})},e}(m);Tt.values={mode:String};var Vt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeout=null,e}c(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}(m);Vt.values={seconds:Number};var Ct=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._magicElement=null,e}c(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)},l(e,[{key:"_mode",get:function(){return this.hasModeValue?this.modeValue:"top"}}]),e}(m);Ct.classes=["stuck"],Ct.values={mode:String};var St=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._lastIndex=null,e._reverse=!1,e}c(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)||"",u=(null==(s=a[t])?void 0:s.innerText)||"",c=l.localeCompare(u,"en",{sensitivity:"base",numeric:!0,caseFirst:"upper"});return n.dataset.sortTop||i.dataset.sortBottom?n.dataset.sortTop&&i.dataset.sortTop?c:-1:n.dataset.sortBottom||i.dataset.sortTop?n.dataset.sortBottom&&i.dataset.sortBottom?c:1:e._reverse?c>0?-1:1:c}).forEach(function(t){return n.appendChild(t)}),this._tableBody.innerHTML="",this._tableBody.appendChild(n),this._lastIndex=t},l(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}(m);St.values={startSort:Number};var Lt=function(t){function e(){return t.apply(this,arguments)||this}c(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;A(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)},l(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}(m);Lt.targets=["showMore"],Lt.values={limit:Number,truncated:Boolean};var xt=function(t){function e(){return t.apply(this,arguments)||this}c(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}(p);xt.values={target:String,insert:String,immediate:Boolean};var At=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeoutHandle=null,e}c(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}(m);At.values={seconds:Number};var Dt=function(t){function e(){return t.apply(this,arguments)||this}c(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 L(this,e)})(),this.hasClickAwayValue&&this.clickAwayValue&&((t,e={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},V,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=E("click:outside",t,s),n=w(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}(m);function It(t){return"TURBO-FRAME"==t.nodeName}Dt.targets=["toggle"],Dt.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var Mt=function(t){function e(){return t.apply(this,arguments)||this}c(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(It(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(z(t))return t.href;throw new Error("No link given to drive frame to")},e}(m);Mt.values={frameId:String,src:String,loadingMessage:String};var Nt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeoutHandle=null,e}c(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(!It(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},l(e,[{key:"_poll",get:function(){return!!this.hasPollValue&&this.pollValue}}]),e}(m);Nt.values={interval:Number,poll:Boolean};var Ot=function(t){function e(){return t.apply(this,arguments)||this}c(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}(m);Ot.targets=["input","output"],Ot.values={min:Number,max:Number},Ot.classes=["error"];export{v as AnchorSpyController,g as AppearanceController,_ as AsyncBlockController,y as AutoSubmitFormController,M as AutosizeController,m as BaseController,N as CharCountController,O as CheckboxSelectAllController,H as ClipboardController,F as ConfirmController,U as ConfirmNavigationController,W as CountdownController,$ as DebugController,J as DetectDirtyController,Y as DetectDirtyFormController,G as DisableInputsController,K as DisableWithController,Q as DismissableController,X as ElementSaveController,Z as EmptyDomController,tt as EnableInputsController,p as EphemeralController,et as FallbackImageController,nt as FormRcController,it as FormSaveController,rt as IntersectionController,st as IntervalController,at as LazyBlockController,ht as LightboxImageController,dt as LimitedSelectionCheckboxesController,ft as MediaPlayerController,mt as NavigateFormErrorsController,pt as NestedFormController,vt as PasswordConfirmController,gt as PasswordPeekController,_t as RemoteFormController,bt as ResponsiveIframeBodyController,yt as ResponsiveIframeWrapperController,Et as ScrollIntoFocusController,wt as ScrollToBottomController,kt as ScrollToController,Tt as ScrollToTopController,Vt as SelfDestructController,Ct as StickyController,St as TableSortController,Lt as TableTruncateController,xt as TeleportController,At as TimeoutController,Dt as ToggleClassController,Mt as TurboFrameRCController,Nt as TurboFrameRefreshController,Ot as WordCountController}; +import{Controller as t}from"stimulus";import e from"camelcase";import{isPast as n,intervalToDuration as i,toDate as r,formatDistanceToNow as s}from"date-fns";import{get as a,set as o}from"lodash-es";import l from"dialog-polyfill";function u(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 v=function(t){function e(e){var n;return n=t.call(this,e)||this,new Proxy(f(n),{get:function(t,e){var i=Reflect.get(t,e),r=f(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}})||f(n)}d(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(h({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()}},c(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),g=function(t){function n(){return t.apply(this,arguments)||this}d(n,t);var i=n.prototype;return i._cleanupSelf=function(){this.cleanup(this.el)},i.cleanup=function(t){var n,i,r,s=this;t.dataset.controller=(null==(n=t.dataset.controller)?void 0:n.replaceAll(new RegExp("(s|^)"+this.identifier+"(s|$)","g"),""))||"",""==t.dataset.controller&&delete t.dataset.controller;var a=new RegExp("(s|^)"+this.identifier+"\\..+?(s|$)","g");t.dataset.target=(null==(i=t.dataset.target)?void 0:i.replaceAll(a,""))||"",delete t.dataset[e(this.identifier+"-target")],""==t.dataset.target&&delete t.dataset.target,t.dataset.action=(null==(r=t.dataset.target)?void 0:r.replaceAll(a,""))||"",delete t.dataset[e(this.identifier+"-action")],""==t.dataset.action&&delete t.dataset.action;var o=this.constructor.values;o&&Object.keys(o).forEach(function(n){return delete t.dataset[e(s.identifier+"-"+n+"-value")]});var l=this.constructor.classes;l&&Object.keys(l).forEach(function(n){return delete t.dataset[e(s.identifier+"-"+n+"-class")]})},n}(v),_=function(t){function e(){return t.apply(this,arguments)||this}d(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")},c(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}(v);_.values={key:String};var y=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v),b=function(t){function e(){return t.apply(this,arguments)||this}d(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")})},c(e,[{key:"_errorMessage",get:function(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}}]),e}(v);b.targets=["replace"],b.values={endpoint:String,errorMessage:String,selector:String};var E=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);const w=(t,e)=>{const n=t[e];return"function"==typeof n?n:(...t)=>{}},k=(t,e,n)=>{let i=t;return!0===n?i=`${e.identifier}:${t}`:"string"==typeof n&&(i=`${n}:${t}`),i},T=(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})},V={dispatchEvent:!0,eventPrefix:!0},C=(t,e={})=>{const{dispatchEvent:n,eventPrefix:i}=Object.assign({},V,e),r=(null==e?void 0:e.element)||t.element,s=t.disconnect.bind(t),a=new IntersectionObserver(e=>{const[s]=e;s.isIntersecting?(e=>{if(t.isVisible=!0,w(t,"appear").call(t,e),n){const n=k("appear",t,i),s=T(n,null,{controller:t,entry:e});r.dispatchEvent(s)}})(s):t.isVisible&&(e=>{if(t.isVisible=!1,w(t,"disappear").call(t,e),n){const n=k("disappear",t,i),s=T(n,null,{controller:t,entry:e});r.dispatchEvent(s)}})(s)},e),o=()=>{a.observe(r)},l=()=>{a.unobserve(r)};return Object.assign(t,{isVisible:!1,disconnect(){l(),s()}}),o(),[o,l]},S={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},L={debug:!1,logger:console};class x{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:L.debug,this.logger=null!==(r=null==e?void 0:e.logger)&&void 0!==r?r:L.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 A extends x{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=()=>{w(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{w(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 D extends x{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=>{w(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 I=(t,e={})=>{const n=new D(t,e);return[n.observe,n.unobserve]},M=t=>{const e=e=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:e};w(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]},N=(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 O=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var t=this;M(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}(v),H=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);H.targets=["input","output"],H.values={min:Number,max:Number},H.classes=["error"];var z=function(t){function e(){return t.apply(this,arguments)||this}d(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&&eDate.now()+1500&&t.remove():t.dataset.unused=0==e?Date.now().toString():void 0)},r._years=function(t){return t.years||0},r._months=function(t){return t.months||0},r._days=function(t){return t.days||0},r._hours=function(t){return t.hours||0},r._minutes=function(t){return t.minutes||0},r._seconds=function(t){return t.seconds||0},c(e,[{key:"_removeUnused",get:function(){return!!this.hasRemoveUnusedValue&&this.removeUnusedValue}},{key:"endedClasses",get:function(){return this.endedClass.split(" ")}},{key:"countingDownClasses",get:function(){return this.countingDownClass.split(" ")}},{key:"_deadlineDate",get:function(){return new Date(this.deadlineValue)}}]),e}(v);J.values={deadline:String,removeUnused:Boolean},J.targets=["years","months","days","hours","minutes","seconds"],J.classes=["countingDown","ended"];var Y=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.connect=function(){console.log("Debug Controller",this,this.testTargets)},e}(v);Y.targets=["test"];var G=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.initialize=function(){this._checkDirty=this._checkDirty.bind(this)},n.connect=function(){var t=this.el;this._cacheLoadValues(),this._checkDirty(),t.addEventListener("input",this._checkDirty),t.addEventListener("change",this._checkDirty)},n.disconnect=function(){var t=this.el;t.removeEventListener("input",this._checkDirty),t.removeEventListener("change",this._checkDirty)},n.restore=function(t){null==t||t.preventDefault(),this._restoreElementFromLoadValue()},n._getElementValue=function(){var t=this.el;return U(t)?t.checked:t.value},n._getElementLoadValue=function(){var t=this.el,e=t.getAttribute(this._cacheAttrName);return U(t)?null==e?t.defaultChecked:"true"==e:(null!==e||F(t)&&Array.from(t.options).forEach(function(e){if(e.defaultSelected)return t.value=e.value,e.value}),e)},n._elementHasCachedLoadValue=function(){return this.el.hasAttribute(this._cacheAttrName)},n._checkDirty=function(){var t=this.el;this._isElementDirty()?t.setAttribute("data-dirty","true"):t.removeAttribute("data-dirty")},n._isElementDirty=function(){return this._getElementValue()!==this._getElementLoadValue()},n._restoreElementFromLoadValue=function(){var t=this.el,e=t.getAttribute(this._cacheAttrName);U(t)?(t.setAttribute(this._cacheAttrName,t.checked.toString()),t.checked=null==e?t.defaultChecked:"true"==e):F(t)?null==e?Array.from(t.options).forEach(function(e){e.defaultSelected&&(t.value=e.value)}):t.value=e:t.value=null==e?t.defaultValue:e},n._cacheLoadValues=function(){var t=this.el;!this._elementHasCachedLoadValue()&&U(t)?t.setAttribute(this._cacheAttrName,t.checked.toString()):t.setAttribute(this._cacheAttrName,t.value.toString())},c(e,[{key:"_cacheAttrName",get:function(){return"detect-dirty-load-value"}}]),e}(v),K=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.initialize=function(){this._checkDirty=this._checkDirty.bind(this)},n.connect=function(){var t=this.el;this._cacheLoadValues(),this._checkDirty(),t.addEventListener("input",this._checkDirty),t.addEventListener("change",this._checkDirty)},n.disconnect=function(){var t=this.el;t.removeEventListener("input",this._checkDirty),t.removeEventListener("change",this._checkDirty)},n.restore=function(t){var e=this;null==t||t.preventDefault(),this._formElements.forEach(function(t){return e._restoreElementFromLoadValue(t)})},n._getElementValue=function(t){return U(t)?t.checked:t.value},n._getElementLoadValue=function(t){var e=t.getAttribute(this._cacheAttrName);return U(t)?null==e?t.defaultChecked:"true"==e:(null!==e||F(t)&&Array.from(t.options).forEach(function(e){if(e.defaultSelected)return t.value=e.value,e.value}),e)},n._elementHasCachedLoadValue=function(t){return t.hasAttribute(this._cacheAttrName)},n._checkElementDirty=function(t){this._isElementDirty(t)?t.setAttribute("data-dirty","true"):t.removeAttribute("data-dirty")},n._isElementDirty=function(t){return this._getElementValue(t)!==this._getElementLoadValue(t)},n._cacheElementLoadValue=function(t){!this._elementHasCachedLoadValue(t)&&U(t)?t.setAttribute(this._cacheAttrName,t.checked.toString()):t.setAttribute(this._cacheAttrName,t.value.toString())},n._restoreElementFromLoadValue=function(t){var e=t.getAttribute(this._cacheAttrName);U(t)?(t.setAttribute(this._cacheAttrName,t.checked.toString()),t.checked=null==e?t.defaultChecked:"true"==e):F(t)?null==e?Array.from(t.options).forEach(function(e){e.defaultSelected&&(t.value=e.value)}):t.value=e:t.value=null==e?t.defaultValue:e},n._cacheLoadValues=function(){var t=this;this._formElements.forEach(function(e){return t._cacheElementLoadValue(e)})},n._checkDirty=function(){var t=this;this._formElements.forEach(function(e){return t._checkElementDirty(e)}),this._formElements.some(function(t){return t.hasAttribute("data-dirty")})?this.el.setAttribute("data-dirty","true"):this.el.removeAttribute("data-dirty")},c(e,[{key:"_formElements",get:function(){return Array.from(this.el.querySelectorAll("input, select, textarea"))}},{key:"_cacheAttrName",get:function(){return"detect-dirty-load-value"}}]),e}(v),Q=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasDisablerTarget&&this.disablerTarget.checked?this.disableInputs():this.enableInputs()},n.disableInputs=function(){var t=this.hasClearValue&&this.clearValue;this.disableTargets.forEach(function(e,n){t&&(e.value=""),e.disabled=!0})},n.enableInputs=function(){this.disableTargets.forEach(function(t,e){t.disabled=!1})},e}(v);Q.targets=["disabler","disable"],Q.values={clear:Boolean};var X=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.initialize=function(){this.enable=this.enable.bind(this),this.disable=this.disable.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t.el.addEventListener("click",t.disable)})},n.disconnect=function(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)},n.disable=function(t){var e=this.el;this._isDisabled(e)?(null==t||t.preventDefault(),null==t||t.stopImmediatePropagation()):(this._cacheText=this._getElText(e),this._setElText(e,this._message),this._disable(e),setTimeout(this.enable,this._timeout))},n.enable=function(t){null==t||t.preventDefault();var e=this.el;this._isDisabled(e)&&(this._setElText(e,this._cacheText),this._enable(e))},n._isDisabled=function(t){return j(t)&&"submit"==t.type||q(t)?t.disabled:"true"==t.dataset.disabled},n._getElText=function(t){return j(t)&&"submit"==t.type?t.value:t.innerText},n._setElText=function(t,e){j(t)&&"submit"==t.type?t.value=e:(q(t)||B(t))&&(t.innerText=e)},n._disable=function(t){j(t)&&"submit"==t.type||q(t)?t.disabled=!0:t.dataset.disabled="true"},n._enable=function(t){j(t)&&"submit"==t.type||q(t)?t.disabled=!1:t.dataset.disabled=void 0},c(e,[{key:"_message",get:function(){return this.hasMessageValue?this.messageValue:"Submitting..."}},{key:"_timeout",get:function(){return this.hasTimeoutValue?this.timeoutValue:1e3}}]),e}(v);X.values={message:String,timeout:Number};var Z=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.dismiss=function(){this.el.remove()},e}(v),tt=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){var t=this;requestAnimationFrame(function(){t._restoreOnLoad&&t.restore()})},n.clear=function(t){t&&t.preventDefault(),localStorage.removeItem(this._uniqueIdentifier),this.dispatch(this._element,"element-save:cleared")},n.save=function(t){t&&t.preventDefault();var e=this._element,n=this.attributesValue.split(" "),i={};n.forEach(function(t){return i[t]=a(e,t)}),localStorage.setItem(this._uniqueIdentifier,JSON.stringify(i)),this.dispatch(e,"element-save:save:success")},n.restore=function(t){t&&t.preventDefault();var e=this._element;if(localStorage.getItem(this._uniqueIdentifier)){var n=JSON.parse(localStorage.getItem(this._uniqueIdentifier));Object.keys(n).forEach(function(t){o(e,t,n[t])}),this.dispatch(e,"element-save:restore:success")}else this.dispatch(e,"element-save:restore:empty")},c(e,[{key:"_id",get:function(){if(this.hasIdValue)return this.idValue;var t=this.el.id;if(""!==t)return t;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. ")}},{key:"_uniqueIdentifier",get:function(){return location.href+" "+this._id}},{key:"_restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"_element",get:function(){return this.hasElementTarget?this.elementTarget:this.el}}]),e}(v);tt.targets=["element"],tt.values={id:String,attributes:String,restoreOnLoad:Boolean};var et=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){I(this,{element:this.el,childList:!0}),this.checkEmpty()},n.mutate=function(t){this.checkEmpty()},n.checkEmpty=function(){var t=this.el,e=this._children;0===e.length?(this._removeNotEmptyClasses(),this._addEmptyClasses(),this.dispatch(t,"dom:empty")):(this._addNotEmptyClasses(),this._removeEmptyClasses(),this.dispatch(t,"dom:not-empty",{detail:{count:e.length}}))},n._removeEmptyClasses=function(){var t;this.hasEmptyClass&&(t=this.el.classList).remove.apply(t,this.emptyClasses)},n._addNotEmptyClasses=function(){var t;this.hasNotEmptyClass&&(t=this.el.classList).add.apply(t,this.notEmptyClasses)},n._addEmptyClasses=function(){var t;this.hasEmptyClass&&(t=this.el.classList).add.apply(t,this.emptyClasses)},n._removeNotEmptyClasses=function(){var t;this.hasNotEmptyClass&&(t=this.el.classList).remove.apply(t,this.notEmptyClasses)},c(e,[{key:"emptyClasses",get:function(){return this.emptyClass.split(" ")}},{key:"notEmptyClasses",get:function(){return this.notEmptyClass.split(" ")}},{key:"_children",get:function(){var t=this.el;return Array.from(this.hasScopeSelectorValue?t.querySelectorAll(this.scopeSelectorValue):t.children)}}]),e}(v);et.classes=["empty","notEmpty"],et.values={scopeSelector:String};var nt=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasEnablerTarget&&this.enablerTarget.checked?this.enableInputs():this.disableInputs()},n.disableInputs=function(){var t=this.hasClearValue&&this.clearValue;this.enableTargets.forEach(function(e,n){t&&(e.value=""),e.disabled=!0})},n.enableInputs=function(){this.enableTargets.forEach(function(t,e){t.disabled=!1})},e}(v);nt.targets=["enabler","enable"],nt.values={clear:Boolean};var it=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.connect=function(){var t=this,e=this.el;e.onerror=function(){t.hasPlaceholderValue?e.src=t.placeholderValue:e.style.display="none"}},e}(v);it.values={placeholder:String};var rt=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.submit=function(t){null==t||t.preventDefault(),this.dispatch(this.formTarget,"submit"),this.formTarget.submit()},n.reset=function(t){null==t||t.preventDefault(),this.dispatch(this.formTarget,"reset"),this.formTarget.reset()},e}(v);rt.targets=["form"];var st=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.initialize=function(){this._clear=this._clear.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){if(!R(t.el))throw new Error("Expected controller to be mounted on a form element.");t._restoreOnLoad&&t.restore(),t._clearOnSubmit&&t.el.addEventListener("submit",t._clear)})},n.disconnect=function(){this._clearOnSubmit&&this.el.removeEventListener("submit",this._clear)},n._clear=function(){localStorage.removeItem(this._formIdentifier),this.dispatch(this.el,"form-save:cleared")},n.clear=function(t){null==t||t.preventDefault(),this._clear()},n.save=function(t){t.preventDefault(),localStorage.setItem(this._formIdentifier,JSON.stringify(this._formData[this._formIdentifier])),this.dispatch(this.el,"form-save:save:success")},n.restore=function(t){if(null==t||t.preventDefault(),localStorage.getItem(this._formIdentifier)){for(var e,n=JSON.parse(localStorage.getItem(this._formIdentifier)),i=p(this._formElements);!(e=i()).done;){var r=e.value;r.name in n&&(j(r)&&"checkbox"==r.type?r.checked=n[r.name]:j(r)&&"radio"==r.type?r.value==n[r.name]&&(r.checked=!0):r.value=n[r.name])}this.dispatch(this.el,"form-save:restore:success")}else this.dispatch(this.el,"form-save:restore:empty")},c(e,[{key:"_formID",get:function(){if(this.hasIdValue)return this.idValue;var t=this.el.id;if(""!==t)return t;throw new Error("No ID value to uniquely identify this form. Please either specify data-"+this.identifier+"-id-value or give this form an 'id' attribute. ")}},{key:"_formIdentifier",get:function(){return location.href+" "+this._formID}},{key:"_formElements",get:function(){return this.el.elements}},{key:"_formData",get:function(){for(var t,e,n=((t={})[this._formIdentifier]={},t),i=p(this._formElements);!(e=i()).done;){var r=e.value;r.name.length>0&&(j(r)&&"checkbox"==r.type?n[this._formIdentifier][r.name]=r.checked:j(r)&&"radio"==r.type?r.checked&&(n[this._formIdentifier][r.name]=r.value):n[this._formIdentifier][r.name]=r.value)}return n}},{key:"_restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"_clearOnSubmit",get:function(){return!this.hasClearOnSubmitValue||this.clearOnSubmitValue}}]),e}(v);st.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var at=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){C(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}})},c(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}(v);at.values={threshold:String};var ot=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._intervalHandle=null,e}d(e,t);var n=e.prototype;return n.initialize=function(){this._interval=this._interval.bind(this)},n.connect=function(){var t=this;if(!this.hasSecondsValue)throw new Error("Expected `secondsValue` to be present");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}(v);ot.values={seconds:Number};var lt,ut=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){if("IntersectionObserver"in window){var t=C(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}(b),ct=function(t,e){var n=void 0===e?{}:e,i=n.behavior,r=void 0===i?"smooth":i,s=n.block,a=void 0===s?"start":s,o=n.inline,l=void 0===o?"nearest":o;try{var u=function(){t.scrollIntoView({behavior:r,block:a,inline:l})},c=function(){if("smooth"==r&&!ht)return Promise.resolve(function(){try{return Promise.resolve(import("smoothscroll-polyfill")).then(function(t){lt||(lt=!0,(0,t.polyfill)())})}catch(t){return Promise.reject(t)}}()).then(function(){})}();return Promise.resolve(c&&c.then?c.then(u):u())}catch(t){return Promise.reject(t)}},ht="scrollBehavior"in document.documentElement.style;function dt(t){if(!t)return null;var e=getComputedStyle(t).overflowY;return"visible"!==e&&"hidden"!==e&&t.scrollHeight>=t.clientHeight?t:dt(t.parentElement)||document.body}var ft=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._dialog=null,e}d(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),l.registerDialog(this._dialog),this._dialog.className=this._modalClassName,this._dialog.showModal(),ct(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,ct(this.el,{behavior:"smooth",block:"end"}).catch(function(){return t.el.scrollIntoView(!1)}))},c(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}(v);ft.values={src:String,srcSet:String,sizes:String},ft.classes=["modal","image"];var mt=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);mt.targets=["input","error"],mt.values={max:Number,message:String};var pt=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);pt.targets=["media"];var vt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._errors=[],e}d(e,t);var n=e.prototype;return n.connect=function(){this.hasIndexValue||(this.indexValue=-1),this._toggleButtons(),this.el.style.display=0===this._errorCount?"none":""},n.current=function(){try{return Promise.resolve(ct(this._currentError)).then(function(){})}catch(t){return Promise.reject(t)}},n.next=function(){try{var t=this,e=function(){t._index0&&(t.indexValue-=1)},n=function(){if(t._previousError)return Promise.resolve(ct(t._previousError)).then(function(){})}();return Promise.resolve(n&&n.then?n.then(e):e())}catch(t){return Promise.reject(t)}},n.indexValueChanged=function(){this._toggleButtons()},n.selectorValueChanged=function(){this._errors=Array.from(document.querySelectorAll(this._selector))},n._toggleButtons=function(){this.hasNextTarget&&(this.indexValue>=this._errorCount-1?this.nextTarget.setAttribute("disabled","true"):this.nextTarget.removeAttribute("disabled")),this.hasPreviousTarget&&(this.indexValue<=0?this.previousTarget.setAttribute("disabled","true"):this.previousTarget.removeAttribute("disabled"))},c(e,[{key:"_errorCount",get:function(){return this._errors.length}},{key:"_previousIndex",get:function(){var t=this._index-1;return t<0?null:t}},{key:"_nextIndex",get:function(){var t=this._index+1;return t>this._errors.length-1?null:t}},{key:"_index",get:function(){return Math.min(this.hasIndexValue?this.indexValue:0,this._errors.length)}},{key:"_selector",get:function(){if(this.hasSelectorValue)return this.selectorValue;throw new Error("Expected `selectorValue` to be present")}},{key:"_previousError",get:function(){return this._previousIndex?this._errors[this._previousIndex]:null}},{key:"_currentError",get:function(){return this._errors[this._index]}},{key:"_nextError",get:function(){return this._nextIndex?this._errors[this._nextIndex]:null}}]),e}(v);vt.values={selector:String,index:Number},vt.targets=["next","current","previous"];var gt=function(t){function e(){return t.apply(this,arguments)||this}d(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`")},c(e,[{key:"_wrapperClass",get:function(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}},{key:"_insertMode",get:function(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}}]),e}(v);gt.targets=["target","template"],gt.values={insertMode:String,wrapperClass:String};var _t=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);_t.targets=["password"],_t.classes=["error"];var yt=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);yt.targets=["password"];var bt=function(t){function e(){return t.apply(this,arguments)||this}return d(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)},c(e,[{key:"_selector",get:function(){return this.hasSelectorValue?this.selectorValue:'[data-controller~="'+this.identifier+'"]'}}]),e}(v);bt.targets=[],bt.values={selector:String};var Et=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v),wt=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){var t,e,n;window.self!==window.top&&(M(this),e={},null===(n=(t=this).constructor.debounces)||void 0===n||n.forEach(n=>{if("string"==typeof n&&(t[n]=N(t[n],null==e?void 0:e.wait)),"object"==typeof n){const{name:i,wait:r}=n;if(!i)return;t[i]=N(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}(v);wt.debounces=["postUpdate"];var kt=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.connect=function(){var t=this;requestAnimationFrame(function(){ct(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}(g);kt.values={behavior:String,block:String,inline:String};var Tt=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.scroll=function(t){var e;null==t||t.preventDefault(),null!=(e="document"==(this.hasModeValue?this.modeValue:"document")?document.body:dt(this.el))&&ct(e,{behavior:"smooth",block:"end"}).catch(function(){return e.scrollIntoView(!1)})},e}(v);Tt.values={mode:String};var Vt=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.scroll=function(){var t=document.querySelector(this.selectorValue);t?ct(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}(v);Vt.values={selector:String,behavior:String,block:String,inline:String};var Ct=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.scroll=function(t){var e;null==t||t.preventDefault(),null!=(e="document"==(this.hasModeValue?this.modeValue:"document")?document.body:dt(this.el))&&ct(e,{behavior:"smooth",block:"start"}).catch(function(){return e.scrollIntoView(!1)})},e}(v);Ct.values={mode:String};var St=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeout=null,e}d(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}(v);St.values={seconds:Number};var Lt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._magicElement=null,e}d(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)},c(e,[{key:"_mode",get:function(){return this.hasModeValue?this.modeValue:"top"}}]),e}(v);Lt.classes=["stuck"],Lt.values={mode:String};var xt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._lastIndex=null,e._reverse=!1,e}d(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,a=Array.from(n.cells),o=Array.from(i.cells),l=(null==(r=a[t])?void 0:r.innerText)||"",u=(null==(s=o[t])?void 0:s.innerText)||"",c=l.localeCompare(u,"en",{sensitivity:"base",numeric:!0,caseFirst:"upper"});return n.dataset.sortTop||i.dataset.sortBottom?n.dataset.sortTop&&i.dataset.sortTop?c:-1:n.dataset.sortBottom||i.dataset.sortTop?n.dataset.sortBottom&&i.dataset.sortBottom?c:1:e._reverse?c>0?-1:1:c}).forEach(function(t){return n.appendChild(t)}),this._tableBody.innerHTML="",this._tableBody.appendChild(n),this._lastIndex=t},c(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}(v);xt.values={startSort:Number};var At=function(t){function e(){return t.apply(this,arguments)||this}d(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;I(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)},c(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}(v);At.targets=["showMore"],At.values={limit:Number,truncated:Boolean};var Dt=function(t){function e(){return t.apply(this,arguments)||this}d(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}(g);Dt.values={target:String,insert:String,immediate:Boolean};var It=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeout=null,e}d(e,t);var a=e.prototype;return a.timestampValueChanged=function(){this._timestamp=r(1e3*this.timestampValue)},a.initialize=function(){this._update=this._update.bind(this)},a.connect=function(){if(!this.hasTimestampValue)throw new Error("Expected `timestampValue` to be present");this._update()},a.disconnect=function(){this._timeout&&window.clearTimeout(this._timeout)},a._update=function(){this.el.innerHTML=s(this._timestamp,{addSuffix:!0,includeSeconds:!0}),this._nextUpdate&&(this._timeout=window.setTimeout(this._update,this._nextUpdate))},c(e,[{key:"_duration",get:function(){return n(this._timestamp)?i({start:this._timestamp,end:new Date}):i({start:new Date,end:this._timestamp})}},{key:"_nextUpdate",get:function(){var t=this._duration;return t.years&&t.years>0||t.months&&t.months>0||t.days&&t.days>0?null:t.hours&&t.hours>0?18e5:3e4}}]),e}(v);It.values={timestamp:Number};var Mt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeoutHandle=null,e}d(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}(v);Mt.values={seconds:Number};var Nt=function(t){function e(){return t.apply(this,arguments)||this}d(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 A(this,e)})(),this.hasClickAwayValue&&this.clickAwayValue&&((t,e={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},S,e),a=r=>{const a=(null==e?void 0:e.element)||t.element;if(!(a.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}(a)&&n)&&(t.clickOutside&&t.clickOutside(r),i)){const e=k("click:outside",t,s),n=T(e,r,{controller:t});a.dispatchEvent(n)}},o=t.disconnect.bind(t);Object.assign(t,{disconnect(){null==r||r.forEach(t=>{window.removeEventListener(t,a,!1)}),o()}}),null==r||r.forEach(t=>{window.addEventListener(t,a,!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}(v);function Ot(t){return"TURBO-FRAME"==t.nodeName}Nt.targets=["toggle"],Nt.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var Ht=function(t){function e(){return t.apply(this,arguments)||this}d(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(Ot(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(B(t))return t.href;throw new Error("No link given to drive frame to")},e}(v);Ht.values={frameId:String,src:String,loadingMessage:String};var zt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeoutHandle=null,e}d(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(!Ot(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},c(e,[{key:"_poll",get:function(){return!!this.hasPollValue&&this.pollValue}}]),e}(v);zt.values={interval:Number,poll:Boolean};var Pt=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);Pt.targets=["input","output"],Pt.values={min:Number,max:Number},Pt.classes=["error"];export{_ as AnchorSpyController,y as AppearanceController,b as AsyncBlockController,E as AutoSubmitFormController,O as AutosizeController,v as BaseController,H as CharCountController,z as CheckboxSelectAllController,P as ClipboardController,W as ConfirmController,$ as ConfirmNavigationController,J as CountdownController,Y as DebugController,G as DetectDirtyController,K as DetectDirtyFormController,Q as DisableInputsController,X as DisableWithController,Z as DismissableController,tt as ElementSaveController,et as EmptyDomController,nt as EnableInputsController,g as EphemeralController,it as FallbackImageController,rt as FormRcController,st as FormSaveController,at as IntersectionController,ot as IntervalController,ut as LazyBlockController,ft as LightboxImageController,mt as LimitedSelectionCheckboxesController,pt as MediaPlayerController,vt as NavigateFormErrorsController,gt as NestedFormController,_t as PasswordConfirmController,yt as PasswordPeekController,bt as RemoteFormController,wt as ResponsiveIframeBodyController,Et as ResponsiveIframeWrapperController,kt as ScrollIntoFocusController,Tt as ScrollToBottomController,Vt as ScrollToController,Ct as ScrollToTopController,St as SelfDestructController,Lt as StickyController,xt as TableSortController,At as TableTruncateController,Dt as TeleportController,It as TimeDistanceController,Mt as TimeoutController,Nt as ToggleClassController,Ht as TurboFrameRCController,zt as TurboFrameRefreshController,Pt 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 d92f47a2..0fe6b2f4 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/utilities/ephemeral_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/visual/countdown_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/navigate_form_errors_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/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 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 {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 {Duration, intervalToDuration, isPast} from \"date-fns\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class CountdownController extends BaseController {\r\n\r\n static values = {deadline: String, removeUnused: Boolean};\r\n static targets = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\r\n static classes = [\"countingDown\", \"ended\"];\r\n\r\n // Values\r\n declare readonly deadlineValue: string;\r\n declare readonly removeUnusedValue: boolean;\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n // Targets\r\n declare readonly hasYearsTarget: boolean;\r\n declare readonly yearsTarget: HTMLElement;\r\n declare readonly hasMonthsTarget: boolean;\r\n declare readonly monthsTarget: HTMLElement;\r\n declare readonly hasDaysTarget: boolean;\r\n declare readonly daysTarget: HTMLElement;\r\n declare readonly hasHoursTarget: boolean;\r\n declare readonly hoursTarget: HTMLElement;\r\n declare readonly hasMinutesTarget: boolean;\r\n declare readonly minutesTarget: HTMLElement;\r\n declare readonly hasSecondsTarget: boolean;\r\n declare readonly secondsTarget: HTMLElement;\r\n // Classes\r\n declare readonly countingDownClass: string;\r\n declare readonly hasCountingDownClass: boolean;\r\n declare readonly endedClass: string;\r\n declare readonly hasEndedClass: boolean;\r\n // Instance Data\r\n _interval: null | ReturnType = null;\r\n\r\n get _removeUnused(): boolean {\r\n return this.hasRemoveUnusedValue ? this.removeUnusedValue : false;\r\n }\r\n\r\n get endedClasses(): string[] {\r\n return this.endedClass.split(' ');\r\n }\r\n\r\n get countingDownClasses(): string[] {\r\n return this.countingDownClass.split(' ');\r\n }\r\n\r\n get _deadlineDate() {\r\n return new Date(this.deadlineValue);\r\n }\r\n\r\n connect() {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.add(...this.countingDownClasses);\r\n }\r\n }\r\n\r\n disconnect() {\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.remove(...this.endedClasses);\r\n }\r\n }\r\n\r\n deadlineValueChanged() {\r\n // Countdown had previously ended, restart ticking. Updating mid-tick will just work.\r\n if (this._interval == null) {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n }\r\n }\r\n\r\n _tick() {\r\n try {\r\n const now = new Date();\r\n let distance: Duration = {};\r\n\r\n if (isPast(this._deadlineDate)) {\r\n distance = {years: 0, months: 0, days: 0, hours: 0, minutes: 0, seconds: 0};\r\n // Countdown has ended, stop ticking\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.add(...this.endedClasses);\r\n }\r\n this.dispatch(this.el, \"countdown:ended\");\r\n } else {\r\n distance = intervalToDuration({start: this._deadlineDate, end: now});\r\n }\r\n\r\n if (this.hasYearsTarget) {\r\n this._updateTarget(this.yearsTarget, this._years(distance));\r\n }\r\n if (this.hasMonthsTarget) {\r\n this._updateTarget(this.monthsTarget, this._months(distance));\r\n }\r\n if (this.hasDaysTarget) {\r\n this._updateTarget(this.daysTarget, this._days(distance));\r\n }\r\n if (this.hasHoursTarget) {\r\n this._updateTarget(this.hoursTarget, this._hours(distance));\r\n }\r\n if (this.hasMinutesTarget) {\r\n this._updateTarget(this.minutesTarget, this._minutes(distance));\r\n }\r\n if (this.hasSecondsTarget) {\r\n this._updateTarget(this.secondsTarget, this._seconds(distance));\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n this._clearTick();\r\n }\r\n }\r\n\r\n _clearTick() {\r\n if (this._interval) {\r\n clearInterval(this._interval);\r\n this._interval = null;\r\n }\r\n }\r\n\r\n _updateTarget(target: HTMLElement, value: number) {\r\n this._removeTargetIfUnused(target, value);\r\n target.innerHTML = value.toString();\r\n }\r\n\r\n _removeTargetIfUnused(target: HTMLElement, value: number) {\r\n if (this._removeUnused) {\r\n if (value === 0 && target.dataset.unused) {\r\n if (Number.parseInt(target.dataset.unused) > Date.now() + 1500) {\r\n target.remove();\r\n }\r\n } else if (value == 0) {\r\n target.dataset.unused = Date.now().toString();\r\n } else {\r\n target.dataset.unused = undefined;\r\n }\r\n }\r\n }\r\n\r\n _years(duration: Duration): number {\r\n return duration.years || 0;\r\n }\r\n\r\n _months(duration: Duration): number {\r\n return duration.months || 0;\r\n }\r\n\r\n _days(duration: Duration): number {\r\n return duration.days || 0;\r\n }\r\n\r\n _hours(duration: Duration): number {\r\n return duration.hours || 0;\r\n }\r\n\r\n _minutes(duration: Duration): number {\r\n return duration.minutes || 0;\r\n }\r\n\r\n _seconds(duration: Duration): number {\r\n return duration.seconds || 0;\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 as _get, set as _set} from \"lodash-es\";\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 declare readonly hasSecondsValue: boolean;\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 if (!this.hasSecondsValue) {\r\n throw new Error('Expected `secondsValue` to be present')\r\n }\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\nimport {scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class NavigateFormErrorsController extends BaseController {\r\n static values = {\r\n selector: String,\r\n index: Number,\r\n };\r\n\r\n static targets = [\"next\", \"current\", \"previous\"];\r\n\r\n declare readonly hasNextTarget: boolean;\r\n declare readonly nextTarget: HTMLElement;\r\n declare readonly hasPreviousTarget: boolean;\r\n declare readonly previousTarget: HTMLElement;\r\n declare readonly hasCurrentTarget: boolean;\r\n declare readonly currentTarget: HTMLElement;\r\n\r\n declare selectorValue: string;\r\n declare readonly hasSelectorValue: boolean;\r\n declare indexValue: number;\r\n declare readonly hasIndexValue: boolean;\r\n\r\n _errors: HTMLElement[] = [];\r\n\r\n get _errorCount(): number {\r\n return this._errors.length;\r\n }\r\n\r\n get _previousIndex(): number | null {\r\n let index = this._index - 1;\r\n if (index < 0) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _nextIndex(): number | null {\r\n let index = this._index + 1;\r\n if (index > this._errors.length - 1) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _index(): number {\r\n return Math.min(\r\n this.hasIndexValue ? this.indexValue : 0,\r\n this._errors.length,\r\n );\r\n }\r\n\r\n get _selector(): string {\r\n if (this.hasSelectorValue) {\r\n return this.selectorValue;\r\n } else {\r\n throw new Error(\"Expected `selectorValue` to be present\");\r\n }\r\n }\r\n\r\n get _previousError(): HTMLElement | null {\r\n return this._previousIndex ? this._errors[this._previousIndex] : null;\r\n }\r\n\r\n get _currentError(): HTMLElement {\r\n return this._errors[this._index];\r\n }\r\n\r\n get _nextError(): HTMLElement | null {\r\n return this._nextIndex ? this._errors[this._nextIndex] : null;\r\n }\r\n\r\n connect() {\r\n if (!this.hasIndexValue) {\r\n this.indexValue = -1;\r\n }\r\n this._toggleButtons();\r\n\r\n if (this._errorCount === 0) {\r\n this.el.style.display = \"none\";\r\n } else {\r\n this.el.style.display = \"\";\r\n }\r\n }\r\n\r\n async current() {\r\n await scrollToElement(this._currentError);\r\n }\r\n\r\n async next() {\r\n if (this._nextError) {\r\n await scrollToElement(this._nextError);\r\n }\r\n if (this._index < this._errorCount - 1) {\r\n this.indexValue += 1;\r\n }\r\n }\r\n\r\n async previous() {\r\n if (this._previousError) {\r\n await scrollToElement(this._previousError);\r\n }\r\n if (this._index > 0) {\r\n this.indexValue -= 1;\r\n }\r\n }\r\n\r\n indexValueChanged() {\r\n this._toggleButtons();\r\n }\r\n\r\n selectorValueChanged() {\r\n this._errors = Array.from(document.querySelectorAll(this._selector));\r\n }\r\n\r\n private _toggleButtons() {\r\n if (this.hasNextTarget) {\r\n if (this.indexValue >= this._errorCount - 1) {\r\n this.nextTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.nextTarget.removeAttribute(\"disabled\");\r\n }\r\n }\r\n if (this.hasPreviousTarget) {\r\n if (this.indexValue <= 0) {\r\n this.previousTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.previousTarget.removeAttribute(\"disabled\");\r\n }\r\n }\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 {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","EphemeralController","_cleanupSelf","cleanup","el","dataset","controller","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","values","constructor","keys","forEach","val","classes","AnchorSpyController","initialize","_checkAnchor","bind","connect","requestAnimationFrame","window","addEventListener","disconnect","removeEventListener","write","preventDefault","_anchor","_key","keyValue","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","_this2","method","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","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","CountdownController","_interval","setInterval","_tick","hasCountingDownClass","countingDownClasses","_clearTick","hasEndedClass","endedClasses","deadlineValueChanged","now","Date","distance","isPast","_deadlineDate","years","months","days","hours","minutes","seconds","intervalToDuration","start","end","hasYearsTarget","_updateTarget","yearsTarget","_years","hasMonthsTarget","monthsTarget","_months","hasDaysTarget","daysTarget","_days","hasHoursTarget","hoursTarget","_hours","hasMinutesTarget","minutesTarget","_minutes","hasSecondsTarget","secondsTarget","_seconds","e","clearInterval","_removeTargetIfUnused","_removeUnused","unused","parseInt","undefined","duration","endedClass","split","countingDownClass","deadlineValue","deadline","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","hasTimeoutValue","timeoutValue","timeout","DismissableController","dismiss","ElementSaveController","_restoreOnLoad","localStorage","removeItem","_uniqueIdentifier","_element","save","attributes","attributesValue","data","attr","_get","setItem","JSON","stringify","getItem","savedData","parse","_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","parseFloat","trim","IntervalController","hasSecondsValue","_intervalHandle","secondsValue","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","NavigateFormErrorsController","hasIndexValue","indexValue","_toggleButtons","_errorCount","current","_currentError","next","_this5","_index","_nextError","previous","_this7","_previousError","indexValueChanged","selectorValueChanged","_errors","_selector","hasNextTarget","nextTarget","hasPreviousTarget","previousTarget","index","Math","_previousIndex","_nextIndex","NestedFormController","_checkStructure","content","templateTarget","replace","_generateID","targetTarget","insertAdjacentHTML","_insertMode","wrapper","closest","_wrapperClass","newRecord","destroyInput","getTime","random","slice","indexOf","hasWrapperSelectorValue","wrapperClassValue","hasInsertModeValue","insertModeValue","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","debounces","func","postUpdate","getHeight","parent","postMessage","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","_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","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/utilities/ephemeral_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/visual/countdown_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/navigate_form_errors_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/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/visual/time_distance_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 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 {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 {Duration, intervalToDuration, isPast} from \"date-fns\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class CountdownController extends BaseController {\r\n\r\n static values = {deadline: String, removeUnused: Boolean};\r\n static targets = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\r\n static classes = [\"countingDown\", \"ended\"];\r\n\r\n // Values\r\n declare readonly deadlineValue: string;\r\n declare readonly removeUnusedValue: boolean;\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n // Targets\r\n declare readonly hasYearsTarget: boolean;\r\n declare readonly yearsTarget: HTMLElement;\r\n declare readonly hasMonthsTarget: boolean;\r\n declare readonly monthsTarget: HTMLElement;\r\n declare readonly hasDaysTarget: boolean;\r\n declare readonly daysTarget: HTMLElement;\r\n declare readonly hasHoursTarget: boolean;\r\n declare readonly hoursTarget: HTMLElement;\r\n declare readonly hasMinutesTarget: boolean;\r\n declare readonly minutesTarget: HTMLElement;\r\n declare readonly hasSecondsTarget: boolean;\r\n declare readonly secondsTarget: HTMLElement;\r\n // Classes\r\n declare readonly countingDownClass: string;\r\n declare readonly hasCountingDownClass: boolean;\r\n declare readonly endedClass: string;\r\n declare readonly hasEndedClass: boolean;\r\n // Instance Data\r\n _interval: null | ReturnType = null;\r\n\r\n get _removeUnused(): boolean {\r\n return this.hasRemoveUnusedValue ? this.removeUnusedValue : false;\r\n }\r\n\r\n get endedClasses(): string[] {\r\n return this.endedClass.split(' ');\r\n }\r\n\r\n get countingDownClasses(): string[] {\r\n return this.countingDownClass.split(' ');\r\n }\r\n\r\n get _deadlineDate() {\r\n return new Date(this.deadlineValue);\r\n }\r\n\r\n connect() {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.add(...this.countingDownClasses);\r\n }\r\n }\r\n\r\n disconnect() {\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.remove(...this.endedClasses);\r\n }\r\n }\r\n\r\n deadlineValueChanged() {\r\n // Countdown had previously ended, restart ticking. Updating mid-tick will just work.\r\n if (this._interval == null) {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n }\r\n }\r\n\r\n _tick() {\r\n try {\r\n const now = new Date();\r\n let distance: Duration = {};\r\n\r\n if (isPast(this._deadlineDate)) {\r\n distance = {years: 0, months: 0, days: 0, hours: 0, minutes: 0, seconds: 0};\r\n // Countdown has ended, stop ticking\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.add(...this.endedClasses);\r\n }\r\n this.dispatch(this.el, \"countdown:ended\");\r\n } else {\r\n distance = intervalToDuration({start: this._deadlineDate, end: now});\r\n }\r\n\r\n if (this.hasYearsTarget) {\r\n this._updateTarget(this.yearsTarget, this._years(distance));\r\n }\r\n if (this.hasMonthsTarget) {\r\n this._updateTarget(this.monthsTarget, this._months(distance));\r\n }\r\n if (this.hasDaysTarget) {\r\n this._updateTarget(this.daysTarget, this._days(distance));\r\n }\r\n if (this.hasHoursTarget) {\r\n this._updateTarget(this.hoursTarget, this._hours(distance));\r\n }\r\n if (this.hasMinutesTarget) {\r\n this._updateTarget(this.minutesTarget, this._minutes(distance));\r\n }\r\n if (this.hasSecondsTarget) {\r\n this._updateTarget(this.secondsTarget, this._seconds(distance));\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n this._clearTick();\r\n }\r\n }\r\n\r\n _clearTick() {\r\n if (this._interval) {\r\n clearInterval(this._interval);\r\n this._interval = null;\r\n }\r\n }\r\n\r\n _updateTarget(target: HTMLElement, value: number) {\r\n this._removeTargetIfUnused(target, value);\r\n target.innerHTML = value.toString();\r\n }\r\n\r\n _removeTargetIfUnused(target: HTMLElement, value: number) {\r\n if (this._removeUnused) {\r\n if (value === 0 && target.dataset.unused) {\r\n if (Number.parseInt(target.dataset.unused) > Date.now() + 1500) {\r\n target.remove();\r\n }\r\n } else if (value == 0) {\r\n target.dataset.unused = Date.now().toString();\r\n } else {\r\n target.dataset.unused = undefined;\r\n }\r\n }\r\n }\r\n\r\n _years(duration: Duration): number {\r\n return duration.years || 0;\r\n }\r\n\r\n _months(duration: Duration): number {\r\n return duration.months || 0;\r\n }\r\n\r\n _days(duration: Duration): number {\r\n return duration.days || 0;\r\n }\r\n\r\n _hours(duration: Duration): number {\r\n return duration.hours || 0;\r\n }\r\n\r\n _minutes(duration: Duration): number {\r\n return duration.minutes || 0;\r\n }\r\n\r\n _seconds(duration: Duration): number {\r\n return duration.seconds || 0;\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 as _get, set as _set} from \"lodash-es\";\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 declare readonly hasSecondsValue: boolean;\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 if (!this.hasSecondsValue) {\r\n throw new Error('Expected `secondsValue` to be present')\r\n }\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\nimport {scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class NavigateFormErrorsController extends BaseController {\r\n static values = {\r\n selector: String,\r\n index: Number,\r\n };\r\n\r\n static targets = [\"next\", \"current\", \"previous\"];\r\n\r\n declare readonly hasNextTarget: boolean;\r\n declare readonly nextTarget: HTMLElement;\r\n declare readonly hasPreviousTarget: boolean;\r\n declare readonly previousTarget: HTMLElement;\r\n declare readonly hasCurrentTarget: boolean;\r\n declare readonly currentTarget: HTMLElement;\r\n\r\n declare selectorValue: string;\r\n declare readonly hasSelectorValue: boolean;\r\n declare indexValue: number;\r\n declare readonly hasIndexValue: boolean;\r\n\r\n _errors: HTMLElement[] = [];\r\n\r\n get _errorCount(): number {\r\n return this._errors.length;\r\n }\r\n\r\n get _previousIndex(): number | null {\r\n let index = this._index - 1;\r\n if (index < 0) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _nextIndex(): number | null {\r\n let index = this._index + 1;\r\n if (index > this._errors.length - 1) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _index(): number {\r\n return Math.min(\r\n this.hasIndexValue ? this.indexValue : 0,\r\n this._errors.length,\r\n );\r\n }\r\n\r\n get _selector(): string {\r\n if (this.hasSelectorValue) {\r\n return this.selectorValue;\r\n } else {\r\n throw new Error(\"Expected `selectorValue` to be present\");\r\n }\r\n }\r\n\r\n get _previousError(): HTMLElement | null {\r\n return this._previousIndex ? this._errors[this._previousIndex] : null;\r\n }\r\n\r\n get _currentError(): HTMLElement {\r\n return this._errors[this._index];\r\n }\r\n\r\n get _nextError(): HTMLElement | null {\r\n return this._nextIndex ? this._errors[this._nextIndex] : null;\r\n }\r\n\r\n connect() {\r\n if (!this.hasIndexValue) {\r\n this.indexValue = -1;\r\n }\r\n this._toggleButtons();\r\n\r\n if (this._errorCount === 0) {\r\n this.el.style.display = \"none\";\r\n } else {\r\n this.el.style.display = \"\";\r\n }\r\n }\r\n\r\n async current() {\r\n await scrollToElement(this._currentError);\r\n }\r\n\r\n async next() {\r\n if (this._nextError) {\r\n await scrollToElement(this._nextError);\r\n }\r\n if (this._index < this._errorCount - 1) {\r\n this.indexValue += 1;\r\n }\r\n }\r\n\r\n async previous() {\r\n if (this._previousError) {\r\n await scrollToElement(this._previousError);\r\n }\r\n if (this._index > 0) {\r\n this.indexValue -= 1;\r\n }\r\n }\r\n\r\n indexValueChanged() {\r\n this._toggleButtons();\r\n }\r\n\r\n selectorValueChanged() {\r\n this._errors = Array.from(document.querySelectorAll(this._selector));\r\n }\r\n\r\n private _toggleButtons() {\r\n if (this.hasNextTarget) {\r\n if (this.indexValue >= this._errorCount - 1) {\r\n this.nextTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.nextTarget.removeAttribute(\"disabled\");\r\n }\r\n }\r\n if (this.hasPreviousTarget) {\r\n if (this.indexValue <= 0) {\r\n this.previousTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.previousTarget.removeAttribute(\"disabled\");\r\n }\r\n }\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 {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\nimport {Duration, formatDistanceToNow, intervalToDuration, isPast, toDate} from \"date-fns\";\r\n\r\nexport class TimeDistanceController extends BaseController {\r\n static values = {\r\n timestamp: Number,\r\n };\r\n\r\n declare timestampValue: number;\r\n declare readonly hasTimestampValue: boolean;\r\n\r\n _timeout: number | null = null;\r\n declare _timestamp: Date;\r\n\r\n get _duration(): Duration {\r\n return isPast(this._timestamp) ? intervalToDuration({start: this._timestamp, end: new Date()}) : intervalToDuration({start: new Date(), end: this._timestamp});\r\n }\r\n\r\n get _nextUpdate(): number | null {\r\n let duration = this._duration;\r\n\r\n if (duration.years && duration.years > 0) {\r\n return null;\r\n } else if (duration.months && duration.months > 0) {\r\n return null;\r\n } else if (duration.days && duration.days > 0) {\r\n return null;\r\n } else if (duration.hours && duration.hours > 0) {\r\n return 1800000; // Update every 30 mins\r\n } else {\r\n return 30000; // Update every 30 seconds\r\n }\r\n }\r\n\r\n timestampValueChanged() {\r\n this._timestamp = toDate(this.timestampValue * 1000);\r\n }\r\n\r\n initialize() {\r\n this._update = this._update.bind(this);\r\n }\r\n\r\n connect() {\r\n if (!this.hasTimestampValue) {\r\n throw new Error(\"Expected `timestampValue` to be present\");\r\n }\r\n this._update();\r\n }\r\n\r\n disconnect() {\r\n if (this._timeout) {\r\n window.clearTimeout(this._timeout);\r\n }\r\n }\r\n\r\n _update() {\r\n this.el.innerHTML = formatDistanceToNow(this._timestamp, {\r\n addSuffix: true,\r\n includeSeconds: true,\r\n });\r\n\r\n if (this._nextUpdate) {\r\n this._timeout = window.setTimeout(this._update, this._nextUpdate);\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","EphemeralController","_cleanupSelf","cleanup","el","dataset","controller","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","values","constructor","keys","forEach","val","classes","AnchorSpyController","initialize","_checkAnchor","bind","connect","requestAnimationFrame","window","addEventListener","disconnect","removeEventListener","write","preventDefault","_anchor","_key","keyValue","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","_this2","method","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","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","CountdownController","_interval","setInterval","_tick","hasCountingDownClass","countingDownClasses","_clearTick","hasEndedClass","endedClasses","deadlineValueChanged","now","Date","distance","isPast","_deadlineDate","years","months","days","hours","minutes","seconds","intervalToDuration","start","end","hasYearsTarget","_updateTarget","yearsTarget","_years","hasMonthsTarget","monthsTarget","_months","hasDaysTarget","daysTarget","_days","hasHoursTarget","hoursTarget","_hours","hasMinutesTarget","minutesTarget","_minutes","hasSecondsTarget","secondsTarget","_seconds","e","clearInterval","_removeTargetIfUnused","_removeUnused","unused","parseInt","undefined","duration","endedClass","split","countingDownClass","deadlineValue","deadline","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","hasTimeoutValue","timeoutValue","timeout","DismissableController","dismiss","ElementSaveController","_restoreOnLoad","localStorage","removeItem","_uniqueIdentifier","_element","save","attributes","attributesValue","data","attr","_get","setItem","JSON","stringify","getItem","savedData","parse","_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","parseFloat","trim","IntervalController","hasSecondsValue","_intervalHandle","secondsValue","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","NavigateFormErrorsController","hasIndexValue","indexValue","_toggleButtons","_errorCount","current","_currentError","next","_this5","_index","_nextError","previous","_this7","_previousError","indexValueChanged","selectorValueChanged","_errors","_selector","hasNextTarget","nextTarget","hasPreviousTarget","previousTarget","index","Math","_previousIndex","_nextIndex","NestedFormController","_checkStructure","content","templateTarget","replace","_generateID","targetTarget","insertAdjacentHTML","_insertMode","wrapper","closest","_wrapperClass","newRecord","destroyInput","getTime","random","slice","indexOf","hasWrapperSelectorValue","wrapperClassValue","hasInsertModeValue","insertModeValue","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","debounces","func","postUpdate","getHeight","parent","postMessage","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","_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","TimeDistanceController","timestampValueChanged","_timestamp","toDate","timestampValue","_update","hasTimestampValue","formatDistanceToNow","addSuffix","includeSeconds","_nextUpdate","_duration","timestamp","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","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 bdd69ccf..93e7861e 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("camelcase"),require("date-fns"),require("lodash-es"),require("dialog-polyfill")):"function"==typeof define&&define.amd?define(["exports","stimulus","camelcase","date-fns","lodash-es","dialog-polyfill"],t):t((e||self).stimulusLibrary={},e.stimulus,e.camelcase,e.dateFns,e.lodashEs,e.dialogPolyfill)}(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(s);function u(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 v=function(e){function t(t){var n;return n=e.call(this,t)||this,new Proxy(f(n),{get:function(e,t){var i=Reflect.get(e,t),r=f(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}})||f(n)}d(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(h({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()}},c(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),g=function(e){function t(){return e.apply(this,arguments)||this}d(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[a.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[a.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[a.default(r.identifier+"-"+t+"-value")]});var l=this.constructor.classes;l&&Object.keys(l).forEach(function(t){return delete e.dataset[a.default(r.identifier+"-"+t+"-class")]})},t}(v),_=function(e){function t(){return e.apply(this,arguments)||this}d(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")},c(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}(v);_.values={key:String};var y=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v),b=function(e){function t(){return e.apply(this,arguments)||this}d(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")})},c(t,[{key:"_errorMessage",get:function(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}}]),t}(v);b.targets=["replace"],b.values={endpoint:String,errorMessage:String,selector:String};var E=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v);const w=(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},k=(e,t,n)=>{const{bubbles:i,cancelable:r,composed:s}=t||{bubbles:!0,cancelable:!0,composed:!0};return t&&Object.assign(n,{originalEvent:t}),new CustomEvent(e,{bubbles:i,cancelable:r,composed:s,detail:n})},T={dispatchEvent:!0,eventPrefix:!0},V=(e,t={})=>{const{dispatchEvent:n,eventPrefix:i}=Object.assign({},T,t),r=(null==t?void 0:t.element)||e.element,s=e.disconnect.bind(e),o=new IntersectionObserver(t=>{const[s]=t;s.isIntersecting?(t=>{if(e.isVisible=!0,w(e,"appear").call(e,t),n){const n=C("appear",e,i),s=k(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s):e.isVisible&&(t=>{if(e.isVisible=!1,w(e,"disappear").call(e,t),n){const n=C("disappear",e,i),s=k(n,null,{controller:e,entry:t});r.dispatchEvent(s)}})(s)},t),a=()=>{o.observe(r)},l=()=>{o.unobserve(r)};return Object.assign(e,{isVisible:!1,disconnect(){l(),s()}}),a(),[a,l]},S={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},L={debug:!1,logger:console};class 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:L.debug,this.logger=null!==(r=null==t?void 0:t.logger)&&void 0!==r?r:L.logger,this.controller=e,this.controllerId=e.element.id||e.element.dataset.id,this.controllerInitialize=e.initialize.bind(e),this.controllerConnect=e.connect.bind(e),this.controllerDisconnect=e.disconnect.bind(e)}}class x extends 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=()=>{w(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{w(this.controller,"mouseLeave").call(this.controller),this.log("mouseLeave",{hover:!1})},this.targetElement=(null==t?void 0:t.element)||e.element,this.controller=e,this.enhanceController(),this.observe()}enhanceController(){const e=this.controller.disconnect.bind(this.controller);Object.assign(this.controller,{disconnect:()=>{this.unobserve(),e()}})}}class D extends 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=>{w(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 I=(e,t={})=>{const n=new D(e,t);return[n.observe,n.unobserve]},M=e=>{const t=t=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:t};w(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]},N=(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 O=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var e=this;M(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}(v),H=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v);H.targets=["input","output"],H.values={min:Number,max:Number},H.classes=["error"];var F=function(e){function t(){return e.apply(this,arguments)||this}d(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&&tDate.now()+1500&&e.remove():e.dataset.unused=0==t?Date.now().toString():void 0)},n._years=function(e){return e.years||0},n._months=function(e){return e.months||0},n._days=function(e){return e.days||0},n._hours=function(e){return e.hours||0},n._minutes=function(e){return e.minutes||0},n._seconds=function(e){return e.seconds||0},c(t,[{key:"_removeUnused",get:function(){return!!this.hasRemoveUnusedValue&&this.removeUnusedValue}},{key:"endedClasses",get:function(){return this.endedClass.split(" ")}},{key:"countingDownClasses",get:function(){return this.countingDownClass.split(" ")}},{key:"_deadlineDate",get:function(){return new Date(this.deadlineValue)}}]),t}(v);J.values={deadline:String,removeUnused:Boolean},J.targets=["years","months","days","hours","minutes","seconds"],J.classes=["countingDown","ended"];var Y=function(e){function t(){return e.apply(this,arguments)||this}return d(t,e),t.prototype.connect=function(){console.log("Debug Controller",this,this.testTargets)},t}(v);Y.targets=["test"];var G=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.initialize=function(){this._checkDirty=this._checkDirty.bind(this)},n.connect=function(){var e=this.el;this._cacheLoadValues(),this._checkDirty(),e.addEventListener("input",this._checkDirty),e.addEventListener("change",this._checkDirty)},n.disconnect=function(){var e=this.el;e.removeEventListener("input",this._checkDirty),e.removeEventListener("change",this._checkDirty)},n.restore=function(e){null==e||e.preventDefault(),this._restoreElementFromLoadValue()},n._getElementValue=function(){var e=this.el;return W(e)?e.checked:e.value},n._getElementLoadValue=function(){var e=this.el,t=e.getAttribute(this._cacheAttrName);return W(e)?null==t?e.defaultChecked:"true"==t:(null!==t||j(e)&&Array.from(e.options).forEach(function(t){if(t.defaultSelected)return e.value=t.value,t.value}),t)},n._elementHasCachedLoadValue=function(){return this.el.hasAttribute(this._cacheAttrName)},n._checkDirty=function(){var e=this.el;this._isElementDirty()?e.setAttribute("data-dirty","true"):e.removeAttribute("data-dirty")},n._isElementDirty=function(){return this._getElementValue()!==this._getElementLoadValue()},n._restoreElementFromLoadValue=function(){var e=this.el,t=e.getAttribute(this._cacheAttrName);W(e)?(e.setAttribute(this._cacheAttrName,e.checked.toString()),e.checked=null==t?e.defaultChecked:"true"==t):j(e)?null==t?Array.from(e.options).forEach(function(t){t.defaultSelected&&(e.value=t.value)}):e.value=t:e.value=null==t?e.defaultValue:t},n._cacheLoadValues=function(){var e=this.el;!this._elementHasCachedLoadValue()&&W(e)?e.setAttribute(this._cacheAttrName,e.checked.toString()):e.setAttribute(this._cacheAttrName,e.value.toString())},c(t,[{key:"_cacheAttrName",get:function(){return"detect-dirty-load-value"}}]),t}(v),K=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.initialize=function(){this._checkDirty=this._checkDirty.bind(this)},n.connect=function(){var e=this.el;this._cacheLoadValues(),this._checkDirty(),e.addEventListener("input",this._checkDirty),e.addEventListener("change",this._checkDirty)},n.disconnect=function(){var e=this.el;e.removeEventListener("input",this._checkDirty),e.removeEventListener("change",this._checkDirty)},n.restore=function(e){var t=this;null==e||e.preventDefault(),this._formElements.forEach(function(e){return t._restoreElementFromLoadValue(e)})},n._getElementValue=function(e){return W(e)?e.checked:e.value},n._getElementLoadValue=function(e){var t=e.getAttribute(this._cacheAttrName);return W(e)?null==t?e.defaultChecked:"true"==t:(null!==t||j(e)&&Array.from(e.options).forEach(function(t){if(t.defaultSelected)return e.value=t.value,t.value}),t)},n._elementHasCachedLoadValue=function(e){return e.hasAttribute(this._cacheAttrName)},n._checkElementDirty=function(e){this._isElementDirty(e)?e.setAttribute("data-dirty","true"):e.removeAttribute("data-dirty")},n._isElementDirty=function(e){return this._getElementValue(e)!==this._getElementLoadValue(e)},n._cacheElementLoadValue=function(e){!this._elementHasCachedLoadValue(e)&&W(e)?e.setAttribute(this._cacheAttrName,e.checked.toString()):e.setAttribute(this._cacheAttrName,e.value.toString())},n._restoreElementFromLoadValue=function(e){var t=e.getAttribute(this._cacheAttrName);W(e)?(e.setAttribute(this._cacheAttrName,e.checked.toString()),e.checked=null==t?e.defaultChecked:"true"==t):j(e)?null==t?Array.from(e.options).forEach(function(t){t.defaultSelected&&(e.value=t.value)}):e.value=t:e.value=null==t?e.defaultValue:t},n._cacheLoadValues=function(){var e=this;this._formElements.forEach(function(t){return e._cacheElementLoadValue(t)})},n._checkDirty=function(){var e=this;this._formElements.forEach(function(t){return e._checkElementDirty(t)}),this._formElements.some(function(e){return e.hasAttribute("data-dirty")})?this.el.setAttribute("data-dirty","true"):this.el.removeAttribute("data-dirty")},c(t,[{key:"_formElements",get:function(){return Array.from(this.el.querySelectorAll("input, select, textarea"))}},{key:"_cacheAttrName",get:function(){return"detect-dirty-load-value"}}]),t}(v),Q=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasDisablerTarget&&this.disablerTarget.checked?this.disableInputs():this.enableInputs()},n.disableInputs=function(){var e=this.hasClearValue&&this.clearValue;this.disableTargets.forEach(function(t,n){e&&(t.value=""),t.disabled=!0})},n.enableInputs=function(){this.disableTargets.forEach(function(e,t){e.disabled=!1})},t}(v);Q.targets=["disabler","disable"],Q.values={clear:Boolean};var X=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.initialize=function(){this.enable=this.enable.bind(this),this.disable=this.disable.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){e.el.addEventListener("click",e.disable)})},n.disconnect=function(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)},n.disable=function(e){var 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))},n.enable=function(e){null==e||e.preventDefault();var t=this.el;this._isDisabled(t)&&(this._setElText(t,this._cacheText),this._enable(t))},n._isDisabled=function(e){return R(e)&&"submit"==e.type||q(e)?e.disabled:"true"==e.dataset.disabled},n._getElText=function(e){return R(e)&&"submit"==e.type?e.value:e.innerText},n._setElText=function(e,t){R(e)&&"submit"==e.type?e.value=t:(q(e)||z(e))&&(e.innerText=t)},n._disable=function(e){R(e)&&"submit"==e.type||q(e)?e.disabled=!0:e.dataset.disabled="true"},n._enable=function(e){R(e)&&"submit"==e.type||q(e)?e.disabled=!1:e.dataset.disabled=void 0},c(t,[{key:"_message",get:function(){return this.hasMessageValue?this.messageValue:"Submitting..."}},{key:"_timeout",get:function(){return this.hasTimeoutValue?this.timeoutValue:1e3}}]),t}(v);X.values={message:String,timeout:Number};var Z=function(e){function t(){return e.apply(this,arguments)||this}return d(t,e),t.prototype.dismiss=function(){this.el.remove()},t}(v),ee=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.connect=function(){var e=this;requestAnimationFrame(function(){e._restoreOnLoad&&e.restore()})},n.clear=function(e){e&&e.preventDefault(),localStorage.removeItem(this._uniqueIdentifier),this.dispatch(this._element,"element-save:cleared")},n.save=function(e){e&&e.preventDefault();var t=this._element,n=this.attributesValue.split(" "),i={};n.forEach(function(e){return i[e]=r.get(t,e)}),localStorage.setItem(this._uniqueIdentifier,JSON.stringify(i)),this.dispatch(t,"element-save:save:success")},n.restore=function(e){e&&e.preventDefault();var t=this._element;if(localStorage.getItem(this._uniqueIdentifier)){var n=JSON.parse(localStorage.getItem(this._uniqueIdentifier));Object.keys(n).forEach(function(e){r.set(t,e,n[e])}),this.dispatch(t,"element-save:restore:success")}else this.dispatch(t,"element-save:restore:empty")},c(t,[{key:"_id",get:function(){if(this.hasIdValue)return this.idValue;var e=this.el.id;if(""!==e)return e;throw new Error("No ID value to uniquely identify this element. Please either specify data-"+this.identifier+"-id-value or give this element an 'id' attribute. ")}},{key:"_uniqueIdentifier",get:function(){return location.href+" "+this._id}},{key:"_restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"_element",get:function(){return this.hasElementTarget?this.elementTarget:this.el}}]),t}(v);ee.targets=["element"],ee.values={id:String,attributes:String,restoreOnLoad:Boolean};var te=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.connect=function(){I(this,{element:this.el,childList:!0}),this.checkEmpty()},n.mutate=function(e){this.checkEmpty()},n.checkEmpty=function(){var e=this.el,t=this._children;0===t.length?(this._removeNotEmptyClasses(),this._addEmptyClasses(),this.dispatch(e,"dom:empty")):(this._addNotEmptyClasses(),this._removeEmptyClasses(),this.dispatch(e,"dom:not-empty",{detail:{count:t.length}}))},n._removeEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).remove.apply(e,this.emptyClasses)},n._addNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).add.apply(e,this.notEmptyClasses)},n._addEmptyClasses=function(){var e;this.hasEmptyClass&&(e=this.el.classList).add.apply(e,this.emptyClasses)},n._removeNotEmptyClasses=function(){var e;this.hasNotEmptyClass&&(e=this.el.classList).remove.apply(e,this.notEmptyClasses)},c(t,[{key:"emptyClasses",get:function(){return this.emptyClass.split(" ")}},{key:"notEmptyClasses",get:function(){return this.notEmptyClass.split(" ")}},{key:"_children",get:function(){var e=this.el;return Array.from(this.hasScopeSelectorValue?e.querySelectorAll(this.scopeSelectorValue):e.children)}}]),t}(v);te.classes=["empty","notEmpty"],te.values={scopeSelector:String};var ne=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasEnablerTarget&&this.enablerTarget.checked?this.enableInputs():this.disableInputs()},n.disableInputs=function(){var e=this.hasClearValue&&this.clearValue;this.enableTargets.forEach(function(t,n){e&&(t.value=""),t.disabled=!0})},n.enableInputs=function(){this.enableTargets.forEach(function(e,t){e.disabled=!1})},t}(v);ne.targets=["enabler","enable"],ne.values={clear:Boolean};var ie=function(e){function t(){return e.apply(this,arguments)||this}return d(t,e),t.prototype.connect=function(){var e=this,t=this.el;t.onerror=function(){e.hasPlaceholderValue?t.src=e.placeholderValue:t.style.display="none"}},t}(v);ie.values={placeholder:String};var re=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.submit=function(e){null==e||e.preventDefault(),this.dispatch(this.formTarget,"submit"),this.formTarget.submit()},n.reset=function(e){null==e||e.preventDefault(),this.dispatch(this.formTarget,"reset"),this.formTarget.reset()},t}(v);re.targets=["form"];var se=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.initialize=function(){this._clear=this._clear.bind(this)},n.connect=function(){var e=this;requestAnimationFrame(function(){if(!B(e.el))throw new Error("Expected controller to be mounted on a form element.");e._restoreOnLoad&&e.restore(),e._clearOnSubmit&&e.el.addEventListener("submit",e._clear)})},n.disconnect=function(){this._clearOnSubmit&&this.el.removeEventListener("submit",this._clear)},n._clear=function(){localStorage.removeItem(this._formIdentifier),this.dispatch(this.el,"form-save:cleared")},n.clear=function(e){null==e||e.preventDefault(),this._clear()},n.save=function(e){e.preventDefault(),localStorage.setItem(this._formIdentifier,JSON.stringify(this._formData[this._formIdentifier])),this.dispatch(this.el,"form-save:save:success")},n.restore=function(e){if(null==e||e.preventDefault(),localStorage.getItem(this._formIdentifier)){for(var t,n=JSON.parse(localStorage.getItem(this._formIdentifier)),i=p(this._formElements);!(t=i()).done;){var r=t.value;r.name in n&&(R(r)&&"checkbox"==r.type?r.checked=n[r.name]:R(r)&&"radio"==r.type?r.value==n[r.name]&&(r.checked=!0):r.value=n[r.name])}this.dispatch(this.el,"form-save:restore:success")}else this.dispatch(this.el,"form-save:restore:empty")},c(t,[{key:"_formID",get:function(){if(this.hasIdValue)return this.idValue;var e=this.el.id;if(""!==e)return e;throw new Error("No ID value to uniquely identify this form. Please either specify data-"+this.identifier+"-id-value or give this form an 'id' attribute. ")}},{key:"_formIdentifier",get:function(){return location.href+" "+this._formID}},{key:"_formElements",get:function(){return this.el.elements}},{key:"_formData",get:function(){for(var e,t,n=((e={})[this._formIdentifier]={},e),i=p(this._formElements);!(t=i()).done;){var r=t.value;r.name.length>0&&(R(r)&&"checkbox"==r.type?n[this._formIdentifier][r.name]=r.checked:R(r)&&"radio"==r.type?r.checked&&(n[this._formIdentifier][r.name]=r.value):n[this._formIdentifier][r.name]=r.value)}return n}},{key:"_restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"_clearOnSubmit",get:function(){return!this.hasClearOnSubmitValue||this.clearOnSubmitValue}}]),t}(v);se.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var oe=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.connect=function(){V(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}})},c(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}(v);oe.values={threshold:String};var ae=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._intervalHandle=null,t}d(t,e);var n=t.prototype;return n.initialize=function(){this._interval=this._interval.bind(this)},n.connect=function(){var e=this;if(!this.hasSecondsValue)throw new Error("Expected `secondsValue` to be present");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}(v);ae.values={seconds:Number};var le,ue=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.connect=function(){if("IntersectionObserver"in window){var e=V(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}(b),ce=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 u=function(){e.scrollIntoView({behavior:r,block:o,inline:l})},c=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(c&&c.then?c.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}d(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),l.default.registerDialog(this._dialog),this._dialog.className=this._modalClassName,this._dialog.showModal(),ce(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,ce(this.el,{behavior:"smooth",block:"end"}).catch(function(){return e.el.scrollIntoView(!1)}))},c(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}(v);fe.values={src:String,srcSet:String,sizes:String},fe.classes=["modal","image"];var me=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v);me.targets=["input","error"],me.values={max:Number,message:String};var pe=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v);pe.targets=["media"];var ve=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._errors=[],t}d(t,e);var n=t.prototype;return n.connect=function(){this.hasIndexValue||(this.indexValue=-1),this._toggleButtons(),this.el.style.display=0===this._errorCount?"none":""},n.current=function(){try{return Promise.resolve(ce(this._currentError)).then(function(){})}catch(e){return Promise.reject(e)}},n.next=function(){try{var e=this,t=function(){e._index0&&(e.indexValue-=1)},n=function(){if(e._previousError)return Promise.resolve(ce(e._previousError)).then(function(){})}();return Promise.resolve(n&&n.then?n.then(t):t())}catch(e){return Promise.reject(e)}},n.indexValueChanged=function(){this._toggleButtons()},n.selectorValueChanged=function(){this._errors=Array.from(document.querySelectorAll(this._selector))},n._toggleButtons=function(){this.hasNextTarget&&(this.indexValue>=this._errorCount-1?this.nextTarget.setAttribute("disabled","true"):this.nextTarget.removeAttribute("disabled")),this.hasPreviousTarget&&(this.indexValue<=0?this.previousTarget.setAttribute("disabled","true"):this.previousTarget.removeAttribute("disabled"))},c(t,[{key:"_errorCount",get:function(){return this._errors.length}},{key:"_previousIndex",get:function(){var e=this._index-1;return e<0?null:e}},{key:"_nextIndex",get:function(){var e=this._index+1;return e>this._errors.length-1?null:e}},{key:"_index",get:function(){return Math.min(this.hasIndexValue?this.indexValue:0,this._errors.length)}},{key:"_selector",get:function(){if(this.hasSelectorValue)return this.selectorValue;throw new Error("Expected `selectorValue` to be present")}},{key:"_previousError",get:function(){return this._previousIndex?this._errors[this._previousIndex]:null}},{key:"_currentError",get:function(){return this._errors[this._index]}},{key:"_nextError",get:function(){return this._nextIndex?this._errors[this._nextIndex]:null}}]),t}(v);ve.values={selector:String,index:Number},ve.targets=["next","current","previous"];var ge=function(e){function t(){return e.apply(this,arguments)||this}d(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`")},c(t,[{key:"_wrapperClass",get:function(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}},{key:"_insertMode",get:function(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}}]),t}(v);ge.targets=["target","template"],ge.values={insertMode:String,wrapperClass:String};var _e=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v);_e.targets=["password"],_e.classes=["error"];var ye=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v);ye.targets=["password"];var be=function(e){function t(){return e.apply(this,arguments)||this}return d(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)},c(t,[{key:"_selector",get:function(){return this.hasSelectorValue?this.selectorValue:'[data-controller~="'+this.identifier+'"]'}}]),t}(v);be.targets=[],be.values={selector:String};var Ee=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v),we=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.connect=function(){var e,t,n;window.self!==window.top&&(M(this),t={},null===(n=(e=this).constructor.debounces)||void 0===n||n.forEach(n=>{if("string"==typeof n&&(e[n]=N(e[n],null==t?void 0:t.wait)),"object"==typeof n){const{name:i,wait:r}=n;if(!i)return;e[i]=N(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}(v);we.debounces=["postUpdate"];var Ce=function(e){function t(){return e.apply(this,arguments)||this}return d(t,e),t.prototype.connect=function(){var e=this;requestAnimationFrame(function(){ce(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}(g);Ce.values={behavior:String,block:String,inline:String};var ke=function(e){function t(){return e.apply(this,arguments)||this}return d(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))&&ce(t,{behavior:"smooth",block:"end"}).catch(function(){return t.scrollIntoView(!1)})},t}(v);ke.values={mode:String};var Te=function(e){function t(){return e.apply(this,arguments)||this}return d(t,e),t.prototype.scroll=function(){var e=document.querySelector(this.selectorValue);e?ce(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}(v);Te.values={selector:String,behavior:String,block:String,inline:String};var Ve=function(e){function t(){return e.apply(this,arguments)||this}return d(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))&&ce(t,{behavior:"smooth",block:"start"}).catch(function(){return t.scrollIntoView(!1)})},t}(v);Ve.values={mode:String};var Se=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._timeout=null,t}d(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}(v);Se.values={seconds:Number};var Le=function(e){function t(){var t;return(t=e.apply(this,arguments)||this)._magicElement=null,t}d(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)},c(t,[{key:"_mode",get:function(){return this.hasModeValue?this.modeValue:"top"}}]),t}(v);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}d(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)||"",u=(null==(s=a[e])?void 0:s.innerText)||"",c=l.localeCompare(u,"en",{sensitivity:"base",numeric:!0,caseFirst:"upper"});return n.dataset.sortTop||i.dataset.sortBottom?n.dataset.sortTop&&i.dataset.sortTop?c:-1:n.dataset.sortBottom||i.dataset.sortTop?n.dataset.sortBottom&&i.dataset.sortBottom?c:1:t._reverse?c>0?-1:1:c}).forEach(function(e){return n.appendChild(e)}),this._tableBody.innerHTML="",this._tableBody.appendChild(n),this._lastIndex=e},c(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}(v);Ae.values={startSort:Number};var xe=function(e){function t(){return e.apply(this,arguments)||this}d(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;I(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)},c(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}(v);xe.targets=["showMore"],xe.values={limit:Number,truncated:Boolean};var De=function(e){function t(){return e.apply(this,arguments)||this}d(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}(g);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}d(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}(v);Ie.values={seconds:Number};var Me=function(e){function t(){return e.apply(this,arguments)||this}d(t,e);var n=t.prototype;return n.connect=function(){var e=this;if(!this.hasClassValue)throw new Error("data-toggle-class-class-value must not be empty");(this.hasMouseEnterValue||this.hasMouseLeaveValue)&&((e,t={})=>{new x(this,t)})(),this.hasClickAwayValue&&this.clickAwayValue&&((e,t={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},S,t),o=r=>{const o=(null==t?void 0:t.element)||e.element;if(!(o.contains(r.target)||!function(e){const t=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight,i=window.innerWidth||document.documentElement.clientWidth;return t.top<=n&&t.top+t.height>=0&&t.left<=i&&t.left+t.width>=0}(o)&&n)&&(e.clickOutside&&e.clickOutside(r),i)){const t=C("click:outside",e,s),n=k(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}(v);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}d(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(z(e))return e.href;throw new Error("No link given to drive frame to")},t}(v);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}d(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},c(t,[{key:"_poll",get:function(){return!!this.hasPollValue&&this.pollValue}}]),t}(v);He.values={interval:Number,poll:Boolean};var Fe=function(e){function t(){return e.apply(this,arguments)||this}d(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}(v);Fe.targets=["input","output"],Fe.values={min:Number,max:Number},Fe.classes=["error"],e.AnchorSpyController=_,e.AppearanceController=y,e.AsyncBlockController=b,e.AutoSubmitFormController=E,e.AutosizeController=O,e.BaseController=v,e.CharCountController=H,e.CheckboxSelectAllController=F,e.ClipboardController=P,e.ConfirmController=U,e.ConfirmNavigationController=$,e.CountdownController=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.EphemeralController=g,e.FallbackImageController=ie,e.FormRcController=re,e.FormSaveController=se,e.IntersectionController=oe,e.IntervalController=ae,e.LazyBlockController=ue,e.LightboxImageController=fe,e.LimitedSelectionCheckboxesController=me,e.MediaPlayerController=pe,e.NavigateFormErrorsController=ve,e.NestedFormController=ge,e.PasswordConfirmController=_e,e.PasswordPeekController=ye,e.RemoteFormController=be,e.ResponsiveIframeBodyController=we,e.ResponsiveIframeWrapperController=Ee,e.ScrollIntoFocusController=Ce,e.ScrollToBottomController=ke,e.ScrollToController=Te,e.ScrollToTopController=Ve,e.SelfDestructController=Se,e.StickyController=Le,e.TableSortController=Ae,e.TableTruncateController=xe,e.TeleportController=De,e.TimeoutController=Ie,e.ToggleClassController=Me,e.TurboFrameRCController=Oe,e.TurboFrameRefreshController=He,e.WordCountController=Fe}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("stimulus"),require("camelcase"),require("date-fns"),require("lodash-es"),require("dialog-polyfill")):"function"==typeof define&&define.amd?define(["exports","stimulus","camelcase","date-fns","lodash-es","dialog-polyfill"],e):e((t||self).stimulusLibrary={},t.stimulus,t.camelcase,t.dateFns,t.lodashEs,t.dialogPolyfill)}(this,function(t,e,n,i,r,s){function o(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var a=o(n),l=o(s);function u(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 v=function(t){function e(e){var n;return n=t.call(this,e)||this,new Proxy(f(n),{get:function(t,e){var i=Reflect.get(t,e),r=f(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}})||f(n)}d(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(h({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()}},c(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}(e.Controller),g=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n._cleanupSelf=function(){this.cleanup(this.el)},n.cleanup=function(t){var e,n,i,r=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 s=new RegExp("(s|^)"+this.identifier+"\\..+?(s|$)","g");t.dataset.target=(null==(n=t.dataset.target)?void 0:n.replaceAll(s,""))||"",delete t.dataset[a.default(this.identifier+"-target")],""==t.dataset.target&&delete t.dataset.target,t.dataset.action=(null==(i=t.dataset.target)?void 0:i.replaceAll(s,""))||"",delete t.dataset[a.default(this.identifier+"-action")],""==t.dataset.action&&delete t.dataset.action;var o=this.constructor.values;o&&Object.keys(o).forEach(function(e){return delete t.dataset[a.default(r.identifier+"-"+e+"-value")]});var l=this.constructor.classes;l&&Object.keys(l).forEach(function(e){return delete t.dataset[a.default(r.identifier+"-"+e+"-class")]})},e}(v),_=function(t){function e(){return t.apply(this,arguments)||this}d(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")},c(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}(v);_.values={key:String};var y=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v),b=function(t){function e(){return t.apply(this,arguments)||this}d(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")})},c(e,[{key:"_errorMessage",get:function(){return this.hasErrorMessageValue?this.errorMessageValue:"This content failed to load"}}]),e}(v);b.targets=["replace"],b.values={endpoint:String,errorMessage:String,selector:String};var E=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);const w=(t,e)=>{const n=t[e];return"function"==typeof n?n:(...t)=>{}},T=(t,e,n)=>{let i=t;return!0===n?i=`${e.identifier}:${t}`:"string"==typeof n&&(i=`${n}:${t}`),i},C=(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})},k={dispatchEvent:!0,eventPrefix:!0},V=(t,e={})=>{const{dispatchEvent:n,eventPrefix:i}=Object.assign({},k,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,w(t,"appear").call(t,e),n){const n=T("appear",t,i),s=C(n,null,{controller:t,entry:e});r.dispatchEvent(s)}})(s):t.isVisible&&(e=>{if(t.isVisible=!1,w(t,"disappear").call(t,e),n){const n=T("disappear",t,i),s=C(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]},S={events:["click","touchend"],onlyVisible:!0,dispatchEvent:!0,eventPrefix:!0},L={debug:!1,logger:console};class x{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:L.debug,this.logger=null!==(r=null==e?void 0:e.logger)&&void 0!==r?r:L.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 D extends x{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=()=>{w(this.controller,"mouseEnter").call(this.controller),this.log("mouseEnter",{hover:!0})},this.onLeave=()=>{w(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 A extends x{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=>{w(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 I=(t,e={})=>{const n=new A(t,e);return[n.observe,n.unobserve]},M=t=>{const e=e=>{const{innerWidth:n,innerHeight:i}=window,r={height:i||Infinity,width:n||Infinity,event:e};w(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]},N=(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 O=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.initialize=function(){this._handler=this._handler.bind(this)},n.connect=function(){var t=this;M(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}(v),H=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);H.targets=["input","output"],H.values={min:Number,max:Number},H.classes=["error"];var P=function(t){function e(){return t.apply(this,arguments)||this}d(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&&eDate.now()+1500&&t.remove():t.dataset.unused=0==e?Date.now().toString():void 0)},n._years=function(t){return t.years||0},n._months=function(t){return t.months||0},n._days=function(t){return t.days||0},n._hours=function(t){return t.hours||0},n._minutes=function(t){return t.minutes||0},n._seconds=function(t){return t.seconds||0},c(e,[{key:"_removeUnused",get:function(){return!!this.hasRemoveUnusedValue&&this.removeUnusedValue}},{key:"endedClasses",get:function(){return this.endedClass.split(" ")}},{key:"countingDownClasses",get:function(){return this.countingDownClass.split(" ")}},{key:"_deadlineDate",get:function(){return new Date(this.deadlineValue)}}]),e}(v);J.values={deadline:String,removeUnused:Boolean},J.targets=["years","months","days","hours","minutes","seconds"],J.classes=["countingDown","ended"];var Y=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.connect=function(){console.log("Debug Controller",this,this.testTargets)},e}(v);Y.targets=["test"];var G=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.initialize=function(){this._checkDirty=this._checkDirty.bind(this)},n.connect=function(){var t=this.el;this._cacheLoadValues(),this._checkDirty(),t.addEventListener("input",this._checkDirty),t.addEventListener("change",this._checkDirty)},n.disconnect=function(){var t=this.el;t.removeEventListener("input",this._checkDirty),t.removeEventListener("change",this._checkDirty)},n.restore=function(t){null==t||t.preventDefault(),this._restoreElementFromLoadValue()},n._getElementValue=function(){var t=this.el;return U(t)?t.checked:t.value},n._getElementLoadValue=function(){var t=this.el,e=t.getAttribute(this._cacheAttrName);return U(t)?null==e?t.defaultChecked:"true"==e:(null!==e||j(t)&&Array.from(t.options).forEach(function(e){if(e.defaultSelected)return t.value=e.value,e.value}),e)},n._elementHasCachedLoadValue=function(){return this.el.hasAttribute(this._cacheAttrName)},n._checkDirty=function(){var t=this.el;this._isElementDirty()?t.setAttribute("data-dirty","true"):t.removeAttribute("data-dirty")},n._isElementDirty=function(){return this._getElementValue()!==this._getElementLoadValue()},n._restoreElementFromLoadValue=function(){var t=this.el,e=t.getAttribute(this._cacheAttrName);U(t)?(t.setAttribute(this._cacheAttrName,t.checked.toString()),t.checked=null==e?t.defaultChecked:"true"==e):j(t)?null==e?Array.from(t.options).forEach(function(e){e.defaultSelected&&(t.value=e.value)}):t.value=e:t.value=null==e?t.defaultValue:e},n._cacheLoadValues=function(){var t=this.el;!this._elementHasCachedLoadValue()&&U(t)?t.setAttribute(this._cacheAttrName,t.checked.toString()):t.setAttribute(this._cacheAttrName,t.value.toString())},c(e,[{key:"_cacheAttrName",get:function(){return"detect-dirty-load-value"}}]),e}(v),K=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.initialize=function(){this._checkDirty=this._checkDirty.bind(this)},n.connect=function(){var t=this.el;this._cacheLoadValues(),this._checkDirty(),t.addEventListener("input",this._checkDirty),t.addEventListener("change",this._checkDirty)},n.disconnect=function(){var t=this.el;t.removeEventListener("input",this._checkDirty),t.removeEventListener("change",this._checkDirty)},n.restore=function(t){var e=this;null==t||t.preventDefault(),this._formElements.forEach(function(t){return e._restoreElementFromLoadValue(t)})},n._getElementValue=function(t){return U(t)?t.checked:t.value},n._getElementLoadValue=function(t){var e=t.getAttribute(this._cacheAttrName);return U(t)?null==e?t.defaultChecked:"true"==e:(null!==e||j(t)&&Array.from(t.options).forEach(function(e){if(e.defaultSelected)return t.value=e.value,e.value}),e)},n._elementHasCachedLoadValue=function(t){return t.hasAttribute(this._cacheAttrName)},n._checkElementDirty=function(t){this._isElementDirty(t)?t.setAttribute("data-dirty","true"):t.removeAttribute("data-dirty")},n._isElementDirty=function(t){return this._getElementValue(t)!==this._getElementLoadValue(t)},n._cacheElementLoadValue=function(t){!this._elementHasCachedLoadValue(t)&&U(t)?t.setAttribute(this._cacheAttrName,t.checked.toString()):t.setAttribute(this._cacheAttrName,t.value.toString())},n._restoreElementFromLoadValue=function(t){var e=t.getAttribute(this._cacheAttrName);U(t)?(t.setAttribute(this._cacheAttrName,t.checked.toString()),t.checked=null==e?t.defaultChecked:"true"==e):j(t)?null==e?Array.from(t.options).forEach(function(e){e.defaultSelected&&(t.value=e.value)}):t.value=e:t.value=null==e?t.defaultValue:e},n._cacheLoadValues=function(){var t=this;this._formElements.forEach(function(e){return t._cacheElementLoadValue(e)})},n._checkDirty=function(){var t=this;this._formElements.forEach(function(e){return t._checkElementDirty(e)}),this._formElements.some(function(t){return t.hasAttribute("data-dirty")})?this.el.setAttribute("data-dirty","true"):this.el.removeAttribute("data-dirty")},c(e,[{key:"_formElements",get:function(){return Array.from(this.el.querySelectorAll("input, select, textarea"))}},{key:"_cacheAttrName",get:function(){return"detect-dirty-load-value"}}]),e}(v),Q=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasDisablerTarget&&this.disablerTarget.checked?this.disableInputs():this.enableInputs()},n.disableInputs=function(){var t=this.hasClearValue&&this.clearValue;this.disableTargets.forEach(function(e,n){t&&(e.value=""),e.disabled=!0})},n.enableInputs=function(){this.disableTargets.forEach(function(t,e){t.disabled=!1})},e}(v);Q.targets=["disabler","disable"],Q.values={clear:Boolean};var X=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.initialize=function(){this.enable=this.enable.bind(this),this.disable=this.disable.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){t.el.addEventListener("click",t.disable)})},n.disconnect=function(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)},n.disable=function(t){var e=this.el;this._isDisabled(e)?(null==t||t.preventDefault(),null==t||t.stopImmediatePropagation()):(this._cacheText=this._getElText(e),this._setElText(e,this._message),this._disable(e),setTimeout(this.enable,this._timeout))},n.enable=function(t){null==t||t.preventDefault();var e=this.el;this._isDisabled(e)&&(this._setElText(e,this._cacheText),this._enable(e))},n._isDisabled=function(t){return R(t)&&"submit"==t.type||q(t)?t.disabled:"true"==t.dataset.disabled},n._getElText=function(t){return R(t)&&"submit"==t.type?t.value:t.innerText},n._setElText=function(t,e){R(t)&&"submit"==t.type?t.value=e:(q(t)||z(t))&&(t.innerText=e)},n._disable=function(t){R(t)&&"submit"==t.type||q(t)?t.disabled=!0:t.dataset.disabled="true"},n._enable=function(t){R(t)&&"submit"==t.type||q(t)?t.disabled=!1:t.dataset.disabled=void 0},c(e,[{key:"_message",get:function(){return this.hasMessageValue?this.messageValue:"Submitting..."}},{key:"_timeout",get:function(){return this.hasTimeoutValue?this.timeoutValue:1e3}}]),e}(v);X.values={message:String,timeout:Number};var Z=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.dismiss=function(){this.el.remove()},e}(v),tt=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){var t=this;requestAnimationFrame(function(){t._restoreOnLoad&&t.restore()})},n.clear=function(t){t&&t.preventDefault(),localStorage.removeItem(this._uniqueIdentifier),this.dispatch(this._element,"element-save:cleared")},n.save=function(t){t&&t.preventDefault();var e=this._element,n=this.attributesValue.split(" "),i={};n.forEach(function(t){return i[t]=r.get(e,t)}),localStorage.setItem(this._uniqueIdentifier,JSON.stringify(i)),this.dispatch(e,"element-save:save:success")},n.restore=function(t){t&&t.preventDefault();var e=this._element;if(localStorage.getItem(this._uniqueIdentifier)){var n=JSON.parse(localStorage.getItem(this._uniqueIdentifier));Object.keys(n).forEach(function(t){r.set(e,t,n[t])}),this.dispatch(e,"element-save:restore:success")}else this.dispatch(e,"element-save:restore:empty")},c(e,[{key:"_id",get:function(){if(this.hasIdValue)return this.idValue;var t=this.el.id;if(""!==t)return t;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. ")}},{key:"_uniqueIdentifier",get:function(){return location.href+" "+this._id}},{key:"_restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"_element",get:function(){return this.hasElementTarget?this.elementTarget:this.el}}]),e}(v);tt.targets=["element"],tt.values={id:String,attributes:String,restoreOnLoad:Boolean};var et=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){I(this,{element:this.el,childList:!0}),this.checkEmpty()},n.mutate=function(t){this.checkEmpty()},n.checkEmpty=function(){var t=this.el,e=this._children;0===e.length?(this._removeNotEmptyClasses(),this._addEmptyClasses(),this.dispatch(t,"dom:empty")):(this._addNotEmptyClasses(),this._removeEmptyClasses(),this.dispatch(t,"dom:not-empty",{detail:{count:e.length}}))},n._removeEmptyClasses=function(){var t;this.hasEmptyClass&&(t=this.el.classList).remove.apply(t,this.emptyClasses)},n._addNotEmptyClasses=function(){var t;this.hasNotEmptyClass&&(t=this.el.classList).add.apply(t,this.notEmptyClasses)},n._addEmptyClasses=function(){var t;this.hasEmptyClass&&(t=this.el.classList).add.apply(t,this.emptyClasses)},n._removeNotEmptyClasses=function(){var t;this.hasNotEmptyClass&&(t=this.el.classList).remove.apply(t,this.notEmptyClasses)},c(e,[{key:"emptyClasses",get:function(){return this.emptyClass.split(" ")}},{key:"notEmptyClasses",get:function(){return this.notEmptyClass.split(" ")}},{key:"_children",get:function(){var t=this.el;return Array.from(this.hasScopeSelectorValue?t.querySelectorAll(this.scopeSelectorValue):t.children)}}]),e}(v);et.classes=["empty","notEmpty"],et.values={scopeSelector:String};var nt=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){this.toggle()},n.toggle=function(){this.hasEnablerTarget&&this.enablerTarget.checked?this.enableInputs():this.disableInputs()},n.disableInputs=function(){var t=this.hasClearValue&&this.clearValue;this.enableTargets.forEach(function(e,n){t&&(e.value=""),e.disabled=!0})},n.enableInputs=function(){this.enableTargets.forEach(function(t,e){t.disabled=!1})},e}(v);nt.targets=["enabler","enable"],nt.values={clear:Boolean};var it=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.connect=function(){var t=this,e=this.el;e.onerror=function(){t.hasPlaceholderValue?e.src=t.placeholderValue:e.style.display="none"}},e}(v);it.values={placeholder:String};var rt=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.submit=function(t){null==t||t.preventDefault(),this.dispatch(this.formTarget,"submit"),this.formTarget.submit()},n.reset=function(t){null==t||t.preventDefault(),this.dispatch(this.formTarget,"reset"),this.formTarget.reset()},e}(v);rt.targets=["form"];var st=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.initialize=function(){this._clear=this._clear.bind(this)},n.connect=function(){var t=this;requestAnimationFrame(function(){if(!B(t.el))throw new Error("Expected controller to be mounted on a form element.");t._restoreOnLoad&&t.restore(),t._clearOnSubmit&&t.el.addEventListener("submit",t._clear)})},n.disconnect=function(){this._clearOnSubmit&&this.el.removeEventListener("submit",this._clear)},n._clear=function(){localStorage.removeItem(this._formIdentifier),this.dispatch(this.el,"form-save:cleared")},n.clear=function(t){null==t||t.preventDefault(),this._clear()},n.save=function(t){t.preventDefault(),localStorage.setItem(this._formIdentifier,JSON.stringify(this._formData[this._formIdentifier])),this.dispatch(this.el,"form-save:save:success")},n.restore=function(t){if(null==t||t.preventDefault(),localStorage.getItem(this._formIdentifier)){for(var e,n=JSON.parse(localStorage.getItem(this._formIdentifier)),i=p(this._formElements);!(e=i()).done;){var r=e.value;r.name in n&&(R(r)&&"checkbox"==r.type?r.checked=n[r.name]:R(r)&&"radio"==r.type?r.value==n[r.name]&&(r.checked=!0):r.value=n[r.name])}this.dispatch(this.el,"form-save:restore:success")}else this.dispatch(this.el,"form-save:restore:empty")},c(e,[{key:"_formID",get:function(){if(this.hasIdValue)return this.idValue;var t=this.el.id;if(""!==t)return t;throw new Error("No ID value to uniquely identify this form. Please either specify data-"+this.identifier+"-id-value or give this form an 'id' attribute. ")}},{key:"_formIdentifier",get:function(){return location.href+" "+this._formID}},{key:"_formElements",get:function(){return this.el.elements}},{key:"_formData",get:function(){for(var t,e,n=((t={})[this._formIdentifier]={},t),i=p(this._formElements);!(e=i()).done;){var r=e.value;r.name.length>0&&(R(r)&&"checkbox"==r.type?n[this._formIdentifier][r.name]=r.checked:R(r)&&"radio"==r.type?r.checked&&(n[this._formIdentifier][r.name]=r.value):n[this._formIdentifier][r.name]=r.value)}return n}},{key:"_restoreOnLoad",get:function(){return!this.hasRestoreOnLoadValue||this.restoreOnLoadValue}},{key:"_clearOnSubmit",get:function(){return!this.hasClearOnSubmitValue||this.clearOnSubmitValue}}]),e}(v);st.values={id:String,restoreOnLoad:Boolean,clearOnSubmit:Boolean};var ot=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){V(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}})},c(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}(v);ot.values={threshold:String};var at=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._intervalHandle=null,e}d(e,t);var n=e.prototype;return n.initialize=function(){this._interval=this._interval.bind(this)},n.connect=function(){var t=this;if(!this.hasSecondsValue)throw new Error("Expected `secondsValue` to be present");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}(v);at.values={seconds:Number};var lt,ut=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){if("IntersectionObserver"in window){var t=V(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}(b),ct=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 u=function(){t.scrollIntoView({behavior:r,block:o,inline:l})},c=function(){if("smooth"==r&&!ht)return Promise.resolve(function(){try{return Promise.resolve(import("smoothscroll-polyfill")).then(function(t){lt||(lt=!0,(0,t.polyfill)())})}catch(t){return Promise.reject(t)}}()).then(function(){})}();return Promise.resolve(c&&c.then?c.then(u):u())}catch(t){return Promise.reject(t)}},ht="scrollBehavior"in document.documentElement.style;function dt(t){if(!t)return null;var e=getComputedStyle(t).overflowY;return"visible"!==e&&"hidden"!==e&&t.scrollHeight>=t.clientHeight?t:dt(t.parentElement)||document.body}var ft=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._dialog=null,e}d(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),l.default.registerDialog(this._dialog),this._dialog.className=this._modalClassName,this._dialog.showModal(),ct(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,ct(this.el,{behavior:"smooth",block:"end"}).catch(function(){return t.el.scrollIntoView(!1)}))},c(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}(v);ft.values={src:String,srcSet:String,sizes:String},ft.classes=["modal","image"];var mt=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);mt.targets=["input","error"],mt.values={max:Number,message:String};var pt=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);pt.targets=["media"];var vt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._errors=[],e}d(e,t);var n=e.prototype;return n.connect=function(){this.hasIndexValue||(this.indexValue=-1),this._toggleButtons(),this.el.style.display=0===this._errorCount?"none":""},n.current=function(){try{return Promise.resolve(ct(this._currentError)).then(function(){})}catch(t){return Promise.reject(t)}},n.next=function(){try{var t=this,e=function(){t._index0&&(t.indexValue-=1)},n=function(){if(t._previousError)return Promise.resolve(ct(t._previousError)).then(function(){})}();return Promise.resolve(n&&n.then?n.then(e):e())}catch(t){return Promise.reject(t)}},n.indexValueChanged=function(){this._toggleButtons()},n.selectorValueChanged=function(){this._errors=Array.from(document.querySelectorAll(this._selector))},n._toggleButtons=function(){this.hasNextTarget&&(this.indexValue>=this._errorCount-1?this.nextTarget.setAttribute("disabled","true"):this.nextTarget.removeAttribute("disabled")),this.hasPreviousTarget&&(this.indexValue<=0?this.previousTarget.setAttribute("disabled","true"):this.previousTarget.removeAttribute("disabled"))},c(e,[{key:"_errorCount",get:function(){return this._errors.length}},{key:"_previousIndex",get:function(){var t=this._index-1;return t<0?null:t}},{key:"_nextIndex",get:function(){var t=this._index+1;return t>this._errors.length-1?null:t}},{key:"_index",get:function(){return Math.min(this.hasIndexValue?this.indexValue:0,this._errors.length)}},{key:"_selector",get:function(){if(this.hasSelectorValue)return this.selectorValue;throw new Error("Expected `selectorValue` to be present")}},{key:"_previousError",get:function(){return this._previousIndex?this._errors[this._previousIndex]:null}},{key:"_currentError",get:function(){return this._errors[this._index]}},{key:"_nextError",get:function(){return this._nextIndex?this._errors[this._nextIndex]:null}}]),e}(v);vt.values={selector:String,index:Number},vt.targets=["next","current","previous"];var gt=function(t){function e(){return t.apply(this,arguments)||this}d(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`")},c(e,[{key:"_wrapperClass",get:function(){return this.hasWrapperSelectorValue?this.wrapperClassValue:"nested-fields"}},{key:"_insertMode",get:function(){return this.hasInsertModeValue?this.insertModeValue:"beforeend"}}]),e}(v);gt.targets=["target","template"],gt.values={insertMode:String,wrapperClass:String};var _t=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);_t.targets=["password"],_t.classes=["error"];var yt=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);yt.targets=["password"];var bt=function(t){function e(){return t.apply(this,arguments)||this}return d(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)},c(e,[{key:"_selector",get:function(){return this.hasSelectorValue?this.selectorValue:'[data-controller~="'+this.identifier+'"]'}}]),e}(v);bt.targets=[],bt.values={selector:String};var Et=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v),wt=function(t){function e(){return t.apply(this,arguments)||this}d(e,t);var n=e.prototype;return n.connect=function(){var t,e,n;window.self!==window.top&&(M(this),e={},null===(n=(t=this).constructor.debounces)||void 0===n||n.forEach(n=>{if("string"==typeof n&&(t[n]=N(t[n],null==e?void 0:e.wait)),"object"==typeof n){const{name:i,wait:r}=n;if(!i)return;t[i]=N(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}(v);wt.debounces=["postUpdate"];var Tt=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.connect=function(){var t=this;requestAnimationFrame(function(){ct(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}(g);Tt.values={behavior:String,block:String,inline:String};var Ct=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.scroll=function(t){var e;null==t||t.preventDefault(),null!=(e="document"==(this.hasModeValue?this.modeValue:"document")?document.body:dt(this.el))&&ct(e,{behavior:"smooth",block:"end"}).catch(function(){return e.scrollIntoView(!1)})},e}(v);Ct.values={mode:String};var kt=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.scroll=function(){var t=document.querySelector(this.selectorValue);t?ct(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}(v);kt.values={selector:String,behavior:String,block:String,inline:String};var Vt=function(t){function e(){return t.apply(this,arguments)||this}return d(e,t),e.prototype.scroll=function(t){var e;null==t||t.preventDefault(),null!=(e="document"==(this.hasModeValue?this.modeValue:"document")?document.body:dt(this.el))&&ct(e,{behavior:"smooth",block:"start"}).catch(function(){return e.scrollIntoView(!1)})},e}(v);Vt.values={mode:String};var St=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeout=null,e}d(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}(v);St.values={seconds:Number};var Lt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._magicElement=null,e}d(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)},c(e,[{key:"_mode",get:function(){return this.hasModeValue?this.modeValue:"top"}}]),e}(v);Lt.classes=["stuck"],Lt.values={mode:String};var xt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._lastIndex=null,e._reverse=!1,e}d(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)||"",u=(null==(s=a[t])?void 0:s.innerText)||"",c=l.localeCompare(u,"en",{sensitivity:"base",numeric:!0,caseFirst:"upper"});return n.dataset.sortTop||i.dataset.sortBottom?n.dataset.sortTop&&i.dataset.sortTop?c:-1:n.dataset.sortBottom||i.dataset.sortTop?n.dataset.sortBottom&&i.dataset.sortBottom?c:1:e._reverse?c>0?-1:1:c}).forEach(function(t){return n.appendChild(t)}),this._tableBody.innerHTML="",this._tableBody.appendChild(n),this._lastIndex=t},c(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}(v);xt.values={startSort:Number};var Dt=function(t){function e(){return t.apply(this,arguments)||this}d(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;I(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)},c(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}(v);Dt.targets=["showMore"],Dt.values={limit:Number,truncated:Boolean};var At=function(t){function e(){return t.apply(this,arguments)||this}d(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}(g);At.values={target:String,insert:String,immediate:Boolean};var It=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeout=null,e}d(e,t);var n=e.prototype;return n.timestampValueChanged=function(){this._timestamp=i.toDate(1e3*this.timestampValue)},n.initialize=function(){this._update=this._update.bind(this)},n.connect=function(){if(!this.hasTimestampValue)throw new Error("Expected `timestampValue` to be present");this._update()},n.disconnect=function(){this._timeout&&window.clearTimeout(this._timeout)},n._update=function(){this.el.innerHTML=i.formatDistanceToNow(this._timestamp,{addSuffix:!0,includeSeconds:!0}),this._nextUpdate&&(this._timeout=window.setTimeout(this._update,this._nextUpdate))},c(e,[{key:"_duration",get:function(){return i.isPast(this._timestamp)?i.intervalToDuration({start:this._timestamp,end:new Date}):i.intervalToDuration({start:new Date,end:this._timestamp})}},{key:"_nextUpdate",get:function(){var t=this._duration;return t.years&&t.years>0||t.months&&t.months>0||t.days&&t.days>0?null:t.hours&&t.hours>0?18e5:3e4}}]),e}(v);It.values={timestamp:Number};var Mt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeoutHandle=null,e}d(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}(v);Mt.values={seconds:Number};var Nt=function(t){function e(){return t.apply(this,arguments)||this}d(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 D(this,e)})(),this.hasClickAwayValue&&this.clickAwayValue&&((t,e={})=>{const{onlyVisible:n,dispatchEvent:i,events:r,eventPrefix:s}=Object.assign({},S,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=T("click:outside",t,s),n=C(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}(v);function Ot(t){return"TURBO-FRAME"==t.nodeName}Nt.targets=["toggle"],Nt.values={class:String,mouseEnter:String,mouseLeave:String,clickAway:Boolean,initial:String};var Ht=function(t){function e(){return t.apply(this,arguments)||this}d(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(Ot(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(z(t))return t.href;throw new Error("No link given to drive frame to")},e}(v);Ht.values={frameId:String,src:String,loadingMessage:String};var Pt=function(t){function e(){var e;return(e=t.apply(this,arguments)||this)._timeoutHandle=null,e}d(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(!Ot(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},c(e,[{key:"_poll",get:function(){return!!this.hasPollValue&&this.pollValue}}]),e}(v);Pt.values={interval:Number,poll:Boolean};var Ft=function(t){function e(){return t.apply(this,arguments)||this}d(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}(v);Ft.targets=["input","output"],Ft.values={min:Number,max:Number},Ft.classes=["error"],t.AnchorSpyController=_,t.AppearanceController=y,t.AsyncBlockController=b,t.AutoSubmitFormController=E,t.AutosizeController=O,t.BaseController=v,t.CharCountController=H,t.CheckboxSelectAllController=P,t.ClipboardController=F,t.ConfirmController=W,t.ConfirmNavigationController=$,t.CountdownController=J,t.DebugController=Y,t.DetectDirtyController=G,t.DetectDirtyFormController=K,t.DisableInputsController=Q,t.DisableWithController=X,t.DismissableController=Z,t.ElementSaveController=tt,t.EmptyDomController=et,t.EnableInputsController=nt,t.EphemeralController=g,t.FallbackImageController=it,t.FormRcController=rt,t.FormSaveController=st,t.IntersectionController=ot,t.IntervalController=at,t.LazyBlockController=ut,t.LightboxImageController=ft,t.LimitedSelectionCheckboxesController=mt,t.MediaPlayerController=pt,t.NavigateFormErrorsController=vt,t.NestedFormController=gt,t.PasswordConfirmController=_t,t.PasswordPeekController=yt,t.RemoteFormController=bt,t.ResponsiveIframeBodyController=wt,t.ResponsiveIframeWrapperController=Et,t.ScrollIntoFocusController=Tt,t.ScrollToBottomController=Ct,t.ScrollToController=kt,t.ScrollToTopController=Vt,t.SelfDestructController=St,t.StickyController=Lt,t.TableSortController=xt,t.TableTruncateController=Dt,t.TeleportController=At,t.TimeDistanceController=It,t.TimeoutController=Mt,t.ToggleClassController=Nt,t.TurboFrameRCController=Ht,t.TurboFrameRefreshController=Pt,t.WordCountController=Ft}); //# sourceMappingURL=stimulus-library.umd.js.map diff --git a/dist/stimulus-library.umd.js.map b/dist/stimulus-library.umd.js.map index 8f75649a..09f4f4d5 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/utilities/ephemeral_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/visual/countdown_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/navigate_form_errors_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/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 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 {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 {Duration, intervalToDuration, isPast} from \"date-fns\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class CountdownController extends BaseController {\r\n\r\n static values = {deadline: String, removeUnused: Boolean};\r\n static targets = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\r\n static classes = [\"countingDown\", \"ended\"];\r\n\r\n // Values\r\n declare readonly deadlineValue: string;\r\n declare readonly removeUnusedValue: boolean;\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n // Targets\r\n declare readonly hasYearsTarget: boolean;\r\n declare readonly yearsTarget: HTMLElement;\r\n declare readonly hasMonthsTarget: boolean;\r\n declare readonly monthsTarget: HTMLElement;\r\n declare readonly hasDaysTarget: boolean;\r\n declare readonly daysTarget: HTMLElement;\r\n declare readonly hasHoursTarget: boolean;\r\n declare readonly hoursTarget: HTMLElement;\r\n declare readonly hasMinutesTarget: boolean;\r\n declare readonly minutesTarget: HTMLElement;\r\n declare readonly hasSecondsTarget: boolean;\r\n declare readonly secondsTarget: HTMLElement;\r\n // Classes\r\n declare readonly countingDownClass: string;\r\n declare readonly hasCountingDownClass: boolean;\r\n declare readonly endedClass: string;\r\n declare readonly hasEndedClass: boolean;\r\n // Instance Data\r\n _interval: null | ReturnType = null;\r\n\r\n get _removeUnused(): boolean {\r\n return this.hasRemoveUnusedValue ? this.removeUnusedValue : false;\r\n }\r\n\r\n get endedClasses(): string[] {\r\n return this.endedClass.split(' ');\r\n }\r\n\r\n get countingDownClasses(): string[] {\r\n return this.countingDownClass.split(' ');\r\n }\r\n\r\n get _deadlineDate() {\r\n return new Date(this.deadlineValue);\r\n }\r\n\r\n connect() {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.add(...this.countingDownClasses);\r\n }\r\n }\r\n\r\n disconnect() {\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.remove(...this.endedClasses);\r\n }\r\n }\r\n\r\n deadlineValueChanged() {\r\n // Countdown had previously ended, restart ticking. Updating mid-tick will just work.\r\n if (this._interval == null) {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n }\r\n }\r\n\r\n _tick() {\r\n try {\r\n const now = new Date();\r\n let distance: Duration = {};\r\n\r\n if (isPast(this._deadlineDate)) {\r\n distance = {years: 0, months: 0, days: 0, hours: 0, minutes: 0, seconds: 0};\r\n // Countdown has ended, stop ticking\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.add(...this.endedClasses);\r\n }\r\n this.dispatch(this.el, \"countdown:ended\");\r\n } else {\r\n distance = intervalToDuration({start: this._deadlineDate, end: now});\r\n }\r\n\r\n if (this.hasYearsTarget) {\r\n this._updateTarget(this.yearsTarget, this._years(distance));\r\n }\r\n if (this.hasMonthsTarget) {\r\n this._updateTarget(this.monthsTarget, this._months(distance));\r\n }\r\n if (this.hasDaysTarget) {\r\n this._updateTarget(this.daysTarget, this._days(distance));\r\n }\r\n if (this.hasHoursTarget) {\r\n this._updateTarget(this.hoursTarget, this._hours(distance));\r\n }\r\n if (this.hasMinutesTarget) {\r\n this._updateTarget(this.minutesTarget, this._minutes(distance));\r\n }\r\n if (this.hasSecondsTarget) {\r\n this._updateTarget(this.secondsTarget, this._seconds(distance));\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n this._clearTick();\r\n }\r\n }\r\n\r\n _clearTick() {\r\n if (this._interval) {\r\n clearInterval(this._interval);\r\n this._interval = null;\r\n }\r\n }\r\n\r\n _updateTarget(target: HTMLElement, value: number) {\r\n this._removeTargetIfUnused(target, value);\r\n target.innerHTML = value.toString();\r\n }\r\n\r\n _removeTargetIfUnused(target: HTMLElement, value: number) {\r\n if (this._removeUnused) {\r\n if (value === 0 && target.dataset.unused) {\r\n if (Number.parseInt(target.dataset.unused) > Date.now() + 1500) {\r\n target.remove();\r\n }\r\n } else if (value == 0) {\r\n target.dataset.unused = Date.now().toString();\r\n } else {\r\n target.dataset.unused = undefined;\r\n }\r\n }\r\n }\r\n\r\n _years(duration: Duration): number {\r\n return duration.years || 0;\r\n }\r\n\r\n _months(duration: Duration): number {\r\n return duration.months || 0;\r\n }\r\n\r\n _days(duration: Duration): number {\r\n return duration.days || 0;\r\n }\r\n\r\n _hours(duration: Duration): number {\r\n return duration.hours || 0;\r\n }\r\n\r\n _minutes(duration: Duration): number {\r\n return duration.minutes || 0;\r\n }\r\n\r\n _seconds(duration: Duration): number {\r\n return duration.seconds || 0;\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 as _get, set as _set} from \"lodash-es\";\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 declare readonly hasSecondsValue: boolean;\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 if (!this.hasSecondsValue) {\r\n throw new Error('Expected `secondsValue` to be present')\r\n }\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\nimport {scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class NavigateFormErrorsController extends BaseController {\r\n static values = {\r\n selector: String,\r\n index: Number,\r\n };\r\n\r\n static targets = [\"next\", \"current\", \"previous\"];\r\n\r\n declare readonly hasNextTarget: boolean;\r\n declare readonly nextTarget: HTMLElement;\r\n declare readonly hasPreviousTarget: boolean;\r\n declare readonly previousTarget: HTMLElement;\r\n declare readonly hasCurrentTarget: boolean;\r\n declare readonly currentTarget: HTMLElement;\r\n\r\n declare selectorValue: string;\r\n declare readonly hasSelectorValue: boolean;\r\n declare indexValue: number;\r\n declare readonly hasIndexValue: boolean;\r\n\r\n _errors: HTMLElement[] = [];\r\n\r\n get _errorCount(): number {\r\n return this._errors.length;\r\n }\r\n\r\n get _previousIndex(): number | null {\r\n let index = this._index - 1;\r\n if (index < 0) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _nextIndex(): number | null {\r\n let index = this._index + 1;\r\n if (index > this._errors.length - 1) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _index(): number {\r\n return Math.min(\r\n this.hasIndexValue ? this.indexValue : 0,\r\n this._errors.length,\r\n );\r\n }\r\n\r\n get _selector(): string {\r\n if (this.hasSelectorValue) {\r\n return this.selectorValue;\r\n } else {\r\n throw new Error(\"Expected `selectorValue` to be present\");\r\n }\r\n }\r\n\r\n get _previousError(): HTMLElement | null {\r\n return this._previousIndex ? this._errors[this._previousIndex] : null;\r\n }\r\n\r\n get _currentError(): HTMLElement {\r\n return this._errors[this._index];\r\n }\r\n\r\n get _nextError(): HTMLElement | null {\r\n return this._nextIndex ? this._errors[this._nextIndex] : null;\r\n }\r\n\r\n connect() {\r\n if (!this.hasIndexValue) {\r\n this.indexValue = -1;\r\n }\r\n this._toggleButtons();\r\n\r\n if (this._errorCount === 0) {\r\n this.el.style.display = \"none\";\r\n } else {\r\n this.el.style.display = \"\";\r\n }\r\n }\r\n\r\n async current() {\r\n await scrollToElement(this._currentError);\r\n }\r\n\r\n async next() {\r\n if (this._nextError) {\r\n await scrollToElement(this._nextError);\r\n }\r\n if (this._index < this._errorCount - 1) {\r\n this.indexValue += 1;\r\n }\r\n }\r\n\r\n async previous() {\r\n if (this._previousError) {\r\n await scrollToElement(this._previousError);\r\n }\r\n if (this._index > 0) {\r\n this.indexValue -= 1;\r\n }\r\n }\r\n\r\n indexValueChanged() {\r\n this._toggleButtons();\r\n }\r\n\r\n selectorValueChanged() {\r\n this._errors = Array.from(document.querySelectorAll(this._selector));\r\n }\r\n\r\n private _toggleButtons() {\r\n if (this.hasNextTarget) {\r\n if (this.indexValue >= this._errorCount - 1) {\r\n this.nextTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.nextTarget.removeAttribute(\"disabled\");\r\n }\r\n }\r\n if (this.hasPreviousTarget) {\r\n if (this.indexValue <= 0) {\r\n this.previousTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.previousTarget.removeAttribute(\"disabled\");\r\n }\r\n }\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 {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","EphemeralController","_cleanupSelf","cleanup","el","dataset","controller","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","values","constructor","keys","forEach","val","classes","AnchorSpyController","initialize","_checkAnchor","bind","connect","requestAnimationFrame","window","addEventListener","disconnect","removeEventListener","write","preventDefault","_anchor","_key","keyValue","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","_this2","method","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","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","CountdownController","_interval","setInterval","_tick","hasCountingDownClass","countingDownClasses","_clearTick","hasEndedClass","endedClasses","deadlineValueChanged","now","Date","distance","isPast","_deadlineDate","years","months","days","hours","minutes","seconds","intervalToDuration","start","end","hasYearsTarget","_updateTarget","yearsTarget","_years","hasMonthsTarget","monthsTarget","_months","hasDaysTarget","daysTarget","_days","hasHoursTarget","hoursTarget","_hours","hasMinutesTarget","minutesTarget","_minutes","hasSecondsTarget","secondsTarget","_seconds","e","clearInterval","_removeTargetIfUnused","_removeUnused","unused","parseInt","undefined","duration","endedClass","split","countingDownClass","deadlineValue","deadline","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","hasTimeoutValue","timeoutValue","timeout","DismissableController","dismiss","ElementSaveController","_restoreOnLoad","localStorage","removeItem","_uniqueIdentifier","_element","save","attributes","attributesValue","data","attr","_get","setItem","JSON","stringify","getItem","savedData","parse","_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","parseFloat","trim","IntervalController","hasSecondsValue","_intervalHandle","secondsValue","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","NavigateFormErrorsController","hasIndexValue","indexValue","_toggleButtons","_errorCount","current","_currentError","next","_this5","_index","_nextError","previous","_this7","_previousError","indexValueChanged","selectorValueChanged","_errors","_selector","hasNextTarget","nextTarget","hasPreviousTarget","previousTarget","index","Math","_previousIndex","_nextIndex","NestedFormController","_checkStructure","content","templateTarget","replace","_generateID","targetTarget","insertAdjacentHTML","_insertMode","wrapper","closest","_wrapperClass","newRecord","destroyInput","getTime","random","slice","indexOf","hasWrapperSelectorValue","wrapperClassValue","hasInsertModeValue","insertModeValue","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","debounces","func","postUpdate","getHeight","parent","postMessage","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","_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","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/utilities/ephemeral_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/visual/countdown_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/navigate_form_errors_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/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/visual/time_distance_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 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 {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 {Duration, intervalToDuration, isPast} from \"date-fns\";\r\nimport {BaseController} from \"../../utilities/base_controller\";\r\n\r\nexport class CountdownController extends BaseController {\r\n\r\n static values = {deadline: String, removeUnused: Boolean};\r\n static targets = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\r\n static classes = [\"countingDown\", \"ended\"];\r\n\r\n // Values\r\n declare readonly deadlineValue: string;\r\n declare readonly removeUnusedValue: boolean;\r\n declare readonly hasRemoveUnusedValue: boolean;\r\n // Targets\r\n declare readonly hasYearsTarget: boolean;\r\n declare readonly yearsTarget: HTMLElement;\r\n declare readonly hasMonthsTarget: boolean;\r\n declare readonly monthsTarget: HTMLElement;\r\n declare readonly hasDaysTarget: boolean;\r\n declare readonly daysTarget: HTMLElement;\r\n declare readonly hasHoursTarget: boolean;\r\n declare readonly hoursTarget: HTMLElement;\r\n declare readonly hasMinutesTarget: boolean;\r\n declare readonly minutesTarget: HTMLElement;\r\n declare readonly hasSecondsTarget: boolean;\r\n declare readonly secondsTarget: HTMLElement;\r\n // Classes\r\n declare readonly countingDownClass: string;\r\n declare readonly hasCountingDownClass: boolean;\r\n declare readonly endedClass: string;\r\n declare readonly hasEndedClass: boolean;\r\n // Instance Data\r\n _interval: null | ReturnType = null;\r\n\r\n get _removeUnused(): boolean {\r\n return this.hasRemoveUnusedValue ? this.removeUnusedValue : false;\r\n }\r\n\r\n get endedClasses(): string[] {\r\n return this.endedClass.split(' ');\r\n }\r\n\r\n get countingDownClasses(): string[] {\r\n return this.countingDownClass.split(' ');\r\n }\r\n\r\n get _deadlineDate() {\r\n return new Date(this.deadlineValue);\r\n }\r\n\r\n connect() {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.add(...this.countingDownClasses);\r\n }\r\n }\r\n\r\n disconnect() {\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.remove(...this.endedClasses);\r\n }\r\n }\r\n\r\n deadlineValueChanged() {\r\n // Countdown had previously ended, restart ticking. Updating mid-tick will just work.\r\n if (this._interval == null) {\r\n this._interval = setInterval(this._tick.bind(this), 1000);\r\n }\r\n }\r\n\r\n _tick() {\r\n try {\r\n const now = new Date();\r\n let distance: Duration = {};\r\n\r\n if (isPast(this._deadlineDate)) {\r\n distance = {years: 0, months: 0, days: 0, hours: 0, minutes: 0, seconds: 0};\r\n // Countdown has ended, stop ticking\r\n this._clearTick();\r\n if (this.hasCountingDownClass) {\r\n this.el.classList.remove(...this.countingDownClasses);\r\n }\r\n if (this.hasEndedClass) {\r\n this.el.classList.add(...this.endedClasses);\r\n }\r\n this.dispatch(this.el, \"countdown:ended\");\r\n } else {\r\n distance = intervalToDuration({start: this._deadlineDate, end: now});\r\n }\r\n\r\n if (this.hasYearsTarget) {\r\n this._updateTarget(this.yearsTarget, this._years(distance));\r\n }\r\n if (this.hasMonthsTarget) {\r\n this._updateTarget(this.monthsTarget, this._months(distance));\r\n }\r\n if (this.hasDaysTarget) {\r\n this._updateTarget(this.daysTarget, this._days(distance));\r\n }\r\n if (this.hasHoursTarget) {\r\n this._updateTarget(this.hoursTarget, this._hours(distance));\r\n }\r\n if (this.hasMinutesTarget) {\r\n this._updateTarget(this.minutesTarget, this._minutes(distance));\r\n }\r\n if (this.hasSecondsTarget) {\r\n this._updateTarget(this.secondsTarget, this._seconds(distance));\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n this._clearTick();\r\n }\r\n }\r\n\r\n _clearTick() {\r\n if (this._interval) {\r\n clearInterval(this._interval);\r\n this._interval = null;\r\n }\r\n }\r\n\r\n _updateTarget(target: HTMLElement, value: number) {\r\n this._removeTargetIfUnused(target, value);\r\n target.innerHTML = value.toString();\r\n }\r\n\r\n _removeTargetIfUnused(target: HTMLElement, value: number) {\r\n if (this._removeUnused) {\r\n if (value === 0 && target.dataset.unused) {\r\n if (Number.parseInt(target.dataset.unused) > Date.now() + 1500) {\r\n target.remove();\r\n }\r\n } else if (value == 0) {\r\n target.dataset.unused = Date.now().toString();\r\n } else {\r\n target.dataset.unused = undefined;\r\n }\r\n }\r\n }\r\n\r\n _years(duration: Duration): number {\r\n return duration.years || 0;\r\n }\r\n\r\n _months(duration: Duration): number {\r\n return duration.months || 0;\r\n }\r\n\r\n _days(duration: Duration): number {\r\n return duration.days || 0;\r\n }\r\n\r\n _hours(duration: Duration): number {\r\n return duration.hours || 0;\r\n }\r\n\r\n _minutes(duration: Duration): number {\r\n return duration.minutes || 0;\r\n }\r\n\r\n _seconds(duration: Duration): number {\r\n return duration.seconds || 0;\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 as _get, set as _set} from \"lodash-es\";\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 declare readonly hasSecondsValue: boolean;\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 if (!this.hasSecondsValue) {\r\n throw new Error('Expected `secondsValue` to be present')\r\n }\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\nimport {scrollToElement} from \"../../utilities/scroll\";\r\n\r\nexport class NavigateFormErrorsController extends BaseController {\r\n static values = {\r\n selector: String,\r\n index: Number,\r\n };\r\n\r\n static targets = [\"next\", \"current\", \"previous\"];\r\n\r\n declare readonly hasNextTarget: boolean;\r\n declare readonly nextTarget: HTMLElement;\r\n declare readonly hasPreviousTarget: boolean;\r\n declare readonly previousTarget: HTMLElement;\r\n declare readonly hasCurrentTarget: boolean;\r\n declare readonly currentTarget: HTMLElement;\r\n\r\n declare selectorValue: string;\r\n declare readonly hasSelectorValue: boolean;\r\n declare indexValue: number;\r\n declare readonly hasIndexValue: boolean;\r\n\r\n _errors: HTMLElement[] = [];\r\n\r\n get _errorCount(): number {\r\n return this._errors.length;\r\n }\r\n\r\n get _previousIndex(): number | null {\r\n let index = this._index - 1;\r\n if (index < 0) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _nextIndex(): number | null {\r\n let index = this._index + 1;\r\n if (index > this._errors.length - 1) {\r\n return null;\r\n }\r\n return index;\r\n }\r\n\r\n get _index(): number {\r\n return Math.min(\r\n this.hasIndexValue ? this.indexValue : 0,\r\n this._errors.length,\r\n );\r\n }\r\n\r\n get _selector(): string {\r\n if (this.hasSelectorValue) {\r\n return this.selectorValue;\r\n } else {\r\n throw new Error(\"Expected `selectorValue` to be present\");\r\n }\r\n }\r\n\r\n get _previousError(): HTMLElement | null {\r\n return this._previousIndex ? this._errors[this._previousIndex] : null;\r\n }\r\n\r\n get _currentError(): HTMLElement {\r\n return this._errors[this._index];\r\n }\r\n\r\n get _nextError(): HTMLElement | null {\r\n return this._nextIndex ? this._errors[this._nextIndex] : null;\r\n }\r\n\r\n connect() {\r\n if (!this.hasIndexValue) {\r\n this.indexValue = -1;\r\n }\r\n this._toggleButtons();\r\n\r\n if (this._errorCount === 0) {\r\n this.el.style.display = \"none\";\r\n } else {\r\n this.el.style.display = \"\";\r\n }\r\n }\r\n\r\n async current() {\r\n await scrollToElement(this._currentError);\r\n }\r\n\r\n async next() {\r\n if (this._nextError) {\r\n await scrollToElement(this._nextError);\r\n }\r\n if (this._index < this._errorCount - 1) {\r\n this.indexValue += 1;\r\n }\r\n }\r\n\r\n async previous() {\r\n if (this._previousError) {\r\n await scrollToElement(this._previousError);\r\n }\r\n if (this._index > 0) {\r\n this.indexValue -= 1;\r\n }\r\n }\r\n\r\n indexValueChanged() {\r\n this._toggleButtons();\r\n }\r\n\r\n selectorValueChanged() {\r\n this._errors = Array.from(document.querySelectorAll(this._selector));\r\n }\r\n\r\n private _toggleButtons() {\r\n if (this.hasNextTarget) {\r\n if (this.indexValue >= this._errorCount - 1) {\r\n this.nextTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.nextTarget.removeAttribute(\"disabled\");\r\n }\r\n }\r\n if (this.hasPreviousTarget) {\r\n if (this.indexValue <= 0) {\r\n this.previousTarget.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n this.previousTarget.removeAttribute(\"disabled\");\r\n }\r\n }\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 {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\nimport {Duration, formatDistanceToNow, intervalToDuration, isPast, toDate} from \"date-fns\";\r\n\r\nexport class TimeDistanceController extends BaseController {\r\n static values = {\r\n timestamp: Number,\r\n };\r\n\r\n declare timestampValue: number;\r\n declare readonly hasTimestampValue: boolean;\r\n\r\n _timeout: number | null = null;\r\n declare _timestamp: Date;\r\n\r\n get _duration(): Duration {\r\n return isPast(this._timestamp) ? intervalToDuration({start: this._timestamp, end: new Date()}) : intervalToDuration({start: new Date(), end: this._timestamp});\r\n }\r\n\r\n get _nextUpdate(): number | null {\r\n let duration = this._duration;\r\n\r\n if (duration.years && duration.years > 0) {\r\n return null;\r\n } else if (duration.months && duration.months > 0) {\r\n return null;\r\n } else if (duration.days && duration.days > 0) {\r\n return null;\r\n } else if (duration.hours && duration.hours > 0) {\r\n return 1800000; // Update every 30 mins\r\n } else {\r\n return 30000; // Update every 30 seconds\r\n }\r\n }\r\n\r\n timestampValueChanged() {\r\n this._timestamp = toDate(this.timestampValue * 1000);\r\n }\r\n\r\n initialize() {\r\n this._update = this._update.bind(this);\r\n }\r\n\r\n connect() {\r\n if (!this.hasTimestampValue) {\r\n throw new Error(\"Expected `timestampValue` to be present\");\r\n }\r\n this._update();\r\n }\r\n\r\n disconnect() {\r\n if (this._timeout) {\r\n window.clearTimeout(this._timeout);\r\n }\r\n }\r\n\r\n _update() {\r\n this.el.innerHTML = formatDistanceToNow(this._timestamp, {\r\n addSuffix: true,\r\n includeSeconds: true,\r\n });\r\n\r\n if (this._nextUpdate) {\r\n this._timeout = window.setTimeout(this._update, this._nextUpdate);\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","EphemeralController","_cleanupSelf","cleanup","el","dataset","controller","replaceAll","RegExp","substringIdentifierValueRegex","camelCase","action","values","constructor","keys","forEach","val","classes","AnchorSpyController","initialize","_checkAnchor","bind","connect","requestAnimationFrame","window","addEventListener","disconnect","removeEventListener","write","preventDefault","_anchor","_key","keyValue","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","_this2","method","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","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","CountdownController","_interval","setInterval","_tick","hasCountingDownClass","countingDownClasses","_clearTick","hasEndedClass","endedClasses","deadlineValueChanged","now","Date","distance","isPast","_deadlineDate","years","months","days","hours","minutes","seconds","intervalToDuration","start","end","hasYearsTarget","_updateTarget","yearsTarget","_years","hasMonthsTarget","monthsTarget","_months","hasDaysTarget","daysTarget","_days","hasHoursTarget","hoursTarget","_hours","hasMinutesTarget","minutesTarget","_minutes","hasSecondsTarget","secondsTarget","_seconds","e","clearInterval","_removeTargetIfUnused","_removeUnused","unused","parseInt","undefined","duration","endedClass","split","countingDownClass","deadlineValue","deadline","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","hasTimeoutValue","timeoutValue","timeout","DismissableController","dismiss","ElementSaveController","_restoreOnLoad","localStorage","removeItem","_uniqueIdentifier","_element","save","attributes","attributesValue","data","attr","_get","setItem","JSON","stringify","getItem","savedData","parse","_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","parseFloat","trim","IntervalController","hasSecondsValue","_intervalHandle","secondsValue","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","NavigateFormErrorsController","hasIndexValue","indexValue","_toggleButtons","_errorCount","current","_currentError","next","_this5","_index","_nextError","previous","_this7","_previousError","indexValueChanged","selectorValueChanged","_errors","_selector","hasNextTarget","nextTarget","hasPreviousTarget","previousTarget","index","Math","_previousIndex","_nextIndex","NestedFormController","_checkStructure","content","templateTarget","replace","_generateID","targetTarget","insertAdjacentHTML","_insertMode","wrapper","closest","_wrapperClass","newRecord","destroyInput","getTime","random","slice","indexOf","hasWrapperSelectorValue","wrapperClassValue","hasInsertModeValue","insertModeValue","insertMode","wrapperClass","PasswordConfirmController","checkPasswordsMatch","passwordTargets","_allPasswordsMatch","Set","has","size","PasswordPeekController","peak","passwordTarget","hide","RemoteFormController","Node","new_element","parentNode","replaceChild","ResponsiveIframeWrapperController","messageReceived","hasOwnProperty","ResponsiveIframeBodyController","top","debounces","func","postUpdate","getHeight","parent","postMessage","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","_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","TimeDistanceController","timestampValueChanged","_timestamp","toDate","timestampValue","_update","hasTimestampValue","formatDistanceToNow","addSuffix","includeSeconds","_nextUpdate","_duration","timestamp","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","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/docs/docs/controllers/time_distance_controller.mdx b/docs/docs/controllers/time_distance_controller.mdx new file mode 100644 index 00000000..89991e4e --- /dev/null +++ b/docs/docs/controllers/time_distance_controller.mdx @@ -0,0 +1,65 @@ +--- +id: TimeDistanceController +title: TimeDistanceController +--- + +import NoEvents from "../_partials/no-events.md"; +import NoActions from "../_partials/no-actions.md"; +import NoClasses from "../_partials/no-classes.md"; +import NoTargets from "../_partials/no-targets.md"; + + +## Purpose + +A controller that displays the distance in words between the specified time and the current time. Works for both past and future dates. + +Inspired by https://apidock.com/rails/ActionView/Helpers/DateHelper/distance_of_time_in_words, but updates in real time. + +Implemented using https://date-fns.org/v2.21.1/docs/intervalToDuration, wrapped in intelligent timing code that automatically works out how often to update the API. + +Fire and forget. The only configuration this controller takes is the timestamp. + +## [Actions](https://stimulus.hotwire.dev/reference/actions) + + + + +## [Targets](https://stimulus.hotwire.dev/reference/targets) + + + + +## [Classes](https://stimulus.hotwire.dev/reference/classes) + + + + +## [Values](https://stimulus.hotwire.dev/reference/values) + +| Value | Type | Description | Default | +| --- | --- | --- | --- | +| `timestamp` | String | The UNIX timestamp in seconds of the date/time to show "time ago" for | - | + +## Events + + + +## Side Effects + +The controller will set increasingly infrequent timeouts using `setTimeout` according to the distance to the timestamp in `timestampValue`. As the time gets further away, the controller updates the text lest frequently. + +- If the timestamp was seconds/minutes ago, the controller will set timeouts to update the text every ~30 seconds. +- If the timestamp was hours ago, the controller will set timeouts to update the text every ~30 minutes. +- If the timestamp was days or more ago, the controller will not set any timeouts. + +All timeouts are cleaned up when the controller disconnects. + +## How to Use + +