@stackoverflow/stacks 2.0.6 → 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  import * as Stacks from "../../stacks";
2
2
  export declare class ModalController extends Stacks.StacksController {
3
3
  static targets: string[];
4
- private modalTarget;
5
- private initialFocusTargets;
4
+ readonly modalTarget: HTMLElement;
5
+ readonly initialFocusTargets: HTMLElement[];
6
6
  private _boundClickFn;
7
7
  private _boundKeypressFn;
8
8
  private returnElement;
@@ -10,8 +10,8 @@ export declare enum SortOrder {
10
10
  None = "none"
11
11
  }
12
12
  export declare class TableController extends Stacks.StacksController {
13
- columnTarget: HTMLTableCellElement;
14
- columnTargets: HTMLTableCellElement[];
13
+ readonly columnTarget: HTMLTableCellElement;
14
+ readonly columnTargets: HTMLTableCellElement[];
15
15
  static targets: string[];
16
16
  sort(evt: PointerEvent): void;
17
17
  private updateSortedColumnStyles;
@@ -1,9 +1,9 @@
1
1
  import * as Stacks from "../../stacks";
2
2
  export declare class UploaderController extends Stacks.StacksController {
3
3
  static targets: string[];
4
- private inputTarget;
5
- private previewsTarget;
6
- private uploaderTarget;
4
+ readonly inputTarget: HTMLInputElement;
5
+ readonly previewsTarget: HTMLElement;
6
+ readonly uploaderTarget: HTMLElement;
7
7
  private boundDragEnter;
8
8
  private boundDragLeave;
9
9
  private static readonly FILE_DISPLAY_LIMIT;
package/dist/js/stacks.js CHANGED
@@ -3180,7 +3180,10 @@ class ModalController extends StacksController {
3180
3180
  this.modalTarget.addEventListener("s-modal:shown", () => {
3181
3181
  var _a;
3182
3182
  const initialFocus = (_a = this.firstVisible(this.initialFocusTargets)) !== null && _a !== void 0 ? _a : this.firstVisible(this.getAllTabbables());
3183
- initialFocus === null || initialFocus === void 0 ? void 0 : initialFocus.focus();
3183
+ // Only set focus if focus is not already set on an element within the modal
3184
+ if (!this.modalTarget.contains(document.activeElement)) {
3185
+ initialFocus === null || initialFocus === void 0 ? void 0 : initialFocus.focus();
3186
+ }
3184
3187
  }, { once: true });
3185
3188
  }
3186
3189
  /**
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Stacks=t():e.Stacks=t()}(globalThis,(()=>(()=>{"use strict";var e={d:(t,n)=>{for(var i in n)e.o(n,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:n[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{BannerController:()=>ce,BasePopoverController:()=>Dt,ExpandableController:()=>ve,ModalController:()=>be,PopoverController:()=>Nt,StacksApplication:()=>se,StacksController:()=>oe,TabListController:()=>Oe,TableController:()=>Kt,ToastController:()=>Ht,TooltipController:()=>qt,UploaderController:()=>Yt,addController:()=>le,application:()=>re,attachPopover:()=>$t,createController:()=>ae,detachPopover:()=>jt,hideBanner:()=>de,hideModal:()=>Ee,hidePopover:()=>It,hideToast:()=>Ut,setTooltipHtml:()=>zt,setTooltipText:()=>Jt,showBanner:()=>he,showModal:()=>ye,showPopover:()=>Bt,showToast:()=>Rt});class n{constructor(e,t,n){this.eventTarget=e,this.eventName=t,this.eventOptions=n,this.unorderedBindings=new Set}connect(){this.eventTarget.addEventListener(this.eventName,this,this.eventOptions)}disconnect(){this.eventTarget.removeEventListener(this.eventName,this,this.eventOptions)}bindingConnected(e){this.unorderedBindings.add(e)}bindingDisconnected(e){this.unorderedBindings.delete(e)}handleEvent(e){const t=function(e){if("immediatePropagationStopped"in e)return e;{const{stopImmediatePropagation:t}=e;return Object.assign(e,{immediatePropagationStopped:!1,stopImmediatePropagation(){this.immediatePropagationStopped=!0,t.call(this)}})}}(e);for(const e of this.bindings){if(t.immediatePropagationStopped)break;e.handleEvent(t)}}hasBindings(){return this.unorderedBindings.size>0}get bindings(){return Array.from(this.unorderedBindings).sort(((e,t)=>{const n=e.index,i=t.index;return n<i?-1:n>i?1:0}))}}class i{constructor(e){this.application=e,this.eventListenerMaps=new Map,this.started=!1}start(){this.started||(this.started=!0,this.eventListeners.forEach((e=>e.connect())))}stop(){this.started&&(this.started=!1,this.eventListeners.forEach((e=>e.disconnect())))}get eventListeners(){return Array.from(this.eventListenerMaps.values()).reduce(((e,t)=>e.concat(Array.from(t.values()))),[])}bindingConnected(e){this.fetchEventListenerForBinding(e).bindingConnected(e)}bindingDisconnected(e,t=!1){this.fetchEventListenerForBinding(e).bindingDisconnected(e),t&&this.clearEventListenersForBinding(e)}handleError(e,t,n={}){this.application.handleError(e,`Error ${t}`,n)}clearEventListenersForBinding(e){const t=this.fetchEventListenerForBinding(e);t.hasBindings()||(t.disconnect(),this.removeMappedEventListenerFor(e))}removeMappedEventListenerFor(e){const{eventTarget:t,eventName:n,eventOptions:i}=e,s=this.fetchEventListenerMapForEventTarget(t),r=this.cacheKey(n,i);s.delete(r),0==s.size&&this.eventListenerMaps.delete(t)}fetchEventListenerForBinding(e){const{eventTarget:t,eventName:n,eventOptions:i}=e;return this.fetchEventListener(t,n,i)}fetchEventListener(e,t,n){const i=this.fetchEventListenerMapForEventTarget(e),s=this.cacheKey(t,n);let r=i.get(s);return r||(r=this.createEventListener(e,t,n),i.set(s,r)),r}createEventListener(e,t,i){const s=new n(e,t,i);return this.started&&s.connect(),s}fetchEventListenerMapForEventTarget(e){let t=this.eventListenerMaps.get(e);return t||(t=new Map,this.eventListenerMaps.set(e,t)),t}cacheKey(e,t){const n=[e];return Object.keys(t).sort().forEach((e=>{n.push(`${t[e]?"":"!"}${e}`)})),n.join(":")}}const s={stop:({event:e,value:t})=>(t&&e.stopPropagation(),!0),prevent:({event:e,value:t})=>(t&&e.preventDefault(),!0),self:({event:e,value:t,element:n})=>!t||n===e.target},r=/^(?:(?:([^.]+?)\+)?(.+?)(?:\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;function o(e){return e.replace(/(?:[_-])([a-z0-9])/g,((e,t)=>t.toUpperCase()))}function a(e){return o(e.replace(/--/g,"-").replace(/__/g,"_"))}function l(e){return e.charAt(0).toUpperCase()+e.slice(1)}function c(e){return e.replace(/([A-Z])/g,((e,t)=>`-${t.toLowerCase()}`))}function h(e){return null!=e}function d(e,t){return Object.prototype.hasOwnProperty.call(e,t)}const u=["meta","ctrl","alt","shift"];class p{constructor(e,t,n,i){this.element=e,this.index=t,this.eventTarget=n.eventTarget||e,this.eventName=n.eventName||function(e){const t=e.tagName.toLowerCase();if(t in m)return m[t](e)}(e)||f("missing event name"),this.eventOptions=n.eventOptions||{},this.identifier=n.identifier||f("missing identifier"),this.methodName=n.methodName||f("missing method name"),this.keyFilter=n.keyFilter||"",this.schema=i}static forToken(e,t){return new this(e.element,e.index,function(e){const t=e.trim().match(r)||[];let n=t[2],i=t[3];return i&&!["keydown","keyup","keypress"].includes(n)&&(n+=`.${i}`,i=""),{eventTarget:(s=t[4],"window"==s?window:"document"==s?document:void 0),eventName:n,eventOptions:t[7]?(o=t[7],o.split(":").reduce(((e,t)=>Object.assign(e,{[t.replace(/^!/,"")]:!/^!/.test(t)})),{})):{},identifier:t[5],methodName:t[6],keyFilter:t[1]||i};var s,o}(e.content),t)}toString(){const e=this.keyFilter?`.${this.keyFilter}`:"",t=this.eventTargetName?`@${this.eventTargetName}`:"";return`${this.eventName}${e}${t}->${this.identifier}#${this.methodName}`}shouldIgnoreKeyboardEvent(e){if(!this.keyFilter)return!1;const t=this.keyFilter.split("+");if(this.keyFilterDissatisfied(e,t))return!0;const n=t.filter((e=>!u.includes(e)))[0];return!!n&&(d(this.keyMappings,n)||f(`contains unknown key filter: ${this.keyFilter}`),this.keyMappings[n].toLowerCase()!==e.key.toLowerCase())}shouldIgnoreMouseEvent(e){if(!this.keyFilter)return!1;const t=[this.keyFilter];return!!this.keyFilterDissatisfied(e,t)}get params(){const e={},t=new RegExp(`^data-${this.identifier}-(.+)-param$`,"i");for(const{name:n,value:i}of Array.from(this.element.attributes)){const s=n.match(t),r=s&&s[1];r&&(e[o(r)]=g(i))}return e}get eventTargetName(){return(e=this.eventTarget)==window?"window":e==document?"document":void 0;var e}get keyMappings(){return this.schema.keyMappings}keyFilterDissatisfied(e,t){const[n,i,s,r]=u.map((e=>t.includes(e)));return e.metaKey!==n||e.ctrlKey!==i||e.altKey!==s||e.shiftKey!==r}}const m={a:()=>"click",button:()=>"click",form:()=>"submit",details:()=>"toggle",input:e=>"submit"==e.getAttribute("type")?"click":"input",select:()=>"change",textarea:()=>"input"};function f(e){throw new Error(e)}function g(e){try{return JSON.parse(e)}catch(t){return e}}class v{constructor(e,t){this.context=e,this.action=t}get index(){return this.action.index}get eventTarget(){return this.action.eventTarget}get eventOptions(){return this.action.eventOptions}get identifier(){return this.context.identifier}handleEvent(e){const t=this.prepareActionEvent(e);this.willBeInvokedByEvent(e)&&this.applyEventModifiers(t)&&this.invokeWithEvent(t)}get eventName(){return this.action.eventName}get method(){const e=this.controller[this.methodName];if("function"==typeof e)return e;throw new Error(`Action "${this.action}" references undefined method "${this.methodName}"`)}applyEventModifiers(e){const{element:t}=this.action,{actionDescriptorFilters:n}=this.context.application,{controller:i}=this.context;let s=!0;for(const[r,o]of Object.entries(this.eventOptions))if(r in n){const a=n[r];s=s&&a({name:r,value:o,event:e,element:t,controller:i})}return s}prepareActionEvent(e){return Object.assign(e,{params:this.action.params})}invokeWithEvent(e){const{target:t,currentTarget:n}=e;try{this.method.call(this.controller,e),this.context.logDebugActivity(this.methodName,{event:e,target:t,currentTarget:n,action:this.methodName})}catch(t){const{identifier:n,controller:i,element:s,index:r}=this,o={identifier:n,controller:i,element:s,index:r,event:e};this.context.handleError(t,`invoking action "${this.action}"`,o)}}willBeInvokedByEvent(e){const t=e.target;return!(e instanceof KeyboardEvent&&this.action.shouldIgnoreKeyboardEvent(e))&&!(e instanceof MouseEvent&&this.action.shouldIgnoreMouseEvent(e))&&(this.element===t||(t instanceof Element&&this.element.contains(t)?this.scope.containsElement(t):this.scope.containsElement(this.action.element)))}get controller(){return this.context.controller}get methodName(){return this.action.methodName}get element(){return this.scope.element}get scope(){return this.context.scope}}class b{constructor(e,t){this.mutationObserverInit={attributes:!0,childList:!0,subtree:!0},this.element=e,this.started=!1,this.delegate=t,this.elements=new Set,this.mutationObserver=new MutationObserver((e=>this.processMutations(e)))}start(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,this.mutationObserverInit),this.refresh())}pause(e){this.started&&(this.mutationObserver.disconnect(),this.started=!1),e(),this.started||(this.mutationObserver.observe(this.element,this.mutationObserverInit),this.started=!0)}stop(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)}refresh(){if(this.started){const e=new Set(this.matchElementsInTree());for(const t of Array.from(this.elements))e.has(t)||this.removeElement(t);for(const t of Array.from(e))this.addElement(t)}}processMutations(e){if(this.started)for(const t of e)this.processMutation(t)}processMutation(e){"attributes"==e.type?this.processAttributeChange(e.target,e.attributeName):"childList"==e.type&&(this.processRemovedNodes(e.removedNodes),this.processAddedNodes(e.addedNodes))}processAttributeChange(e,t){this.elements.has(e)?this.delegate.elementAttributeChanged&&this.matchElement(e)?this.delegate.elementAttributeChanged(e,t):this.removeElement(e):this.matchElement(e)&&this.addElement(e)}processRemovedNodes(e){for(const t of Array.from(e)){const e=this.elementFromNode(t);e&&this.processTree(e,this.removeElement)}}processAddedNodes(e){for(const t of Array.from(e)){const e=this.elementFromNode(t);e&&this.elementIsActive(e)&&this.processTree(e,this.addElement)}}matchElement(e){return this.delegate.matchElement(e)}matchElementsInTree(e=this.element){return this.delegate.matchElementsInTree(e)}processTree(e,t){for(const n of this.matchElementsInTree(e))t.call(this,n)}elementFromNode(e){if(e.nodeType==Node.ELEMENT_NODE)return e}elementIsActive(e){return e.isConnected==this.element.isConnected&&this.element.contains(e)}addElement(e){this.elements.has(e)||this.elementIsActive(e)&&(this.elements.add(e),this.delegate.elementMatched&&this.delegate.elementMatched(e))}removeElement(e){this.elements.has(e)&&(this.elements.delete(e),this.delegate.elementUnmatched&&this.delegate.elementUnmatched(e))}}class y{constructor(e,t,n){this.attributeName=t,this.delegate=n,this.elementObserver=new b(e,this)}get element(){return this.elementObserver.element}get selector(){return`[${this.attributeName}]`}start(){this.elementObserver.start()}pause(e){this.elementObserver.pause(e)}stop(){this.elementObserver.stop()}refresh(){this.elementObserver.refresh()}get started(){return this.elementObserver.started}matchElement(e){return e.hasAttribute(this.attributeName)}matchElementsInTree(e){const t=this.matchElement(e)?[e]:[],n=Array.from(e.querySelectorAll(this.selector));return t.concat(n)}elementMatched(e){this.delegate.elementMatchedAttribute&&this.delegate.elementMatchedAttribute(e,this.attributeName)}elementUnmatched(e){this.delegate.elementUnmatchedAttribute&&this.delegate.elementUnmatchedAttribute(e,this.attributeName)}elementAttributeChanged(e,t){this.delegate.elementAttributeValueChanged&&this.attributeName==t&&this.delegate.elementAttributeValueChanged(e,t)}}function E(e,t){let n=e.get(t);return n||(n=new Set,e.set(t,n)),n}class w{constructor(){this.valuesByKey=new Map}get keys(){return Array.from(this.valuesByKey.keys())}get values(){return Array.from(this.valuesByKey.values()).reduce(((e,t)=>e.concat(Array.from(t))),[])}get size(){return Array.from(this.valuesByKey.values()).reduce(((e,t)=>e+t.size),0)}add(e,t){!function(e,t,n){E(e,t).add(n)}(this.valuesByKey,e,t)}delete(e,t){!function(e,t,n){E(e,t).delete(n),function(e,t){const n=e.get(t);null!=n&&0==n.size&&e.delete(t)}(e,t)}(this.valuesByKey,e,t)}has(e,t){const n=this.valuesByKey.get(e);return null!=n&&n.has(t)}hasKey(e){return this.valuesByKey.has(e)}hasValue(e){return Array.from(this.valuesByKey.values()).some((t=>t.has(e)))}getValuesForKey(e){const t=this.valuesByKey.get(e);return t?Array.from(t):[]}getKeysForValue(e){return Array.from(this.valuesByKey).filter((([t,n])=>n.has(e))).map((([e,t])=>e))}}class O{constructor(e,t,n,i){this._selector=t,this.details=i,this.elementObserver=new b(e,this),this.delegate=n,this.matchesByElement=new w}get started(){return this.elementObserver.started}get selector(){return this._selector}set selector(e){this._selector=e,this.refresh()}start(){this.elementObserver.start()}pause(e){this.elementObserver.pause(e)}stop(){this.elementObserver.stop()}refresh(){this.elementObserver.refresh()}get element(){return this.elementObserver.element}matchElement(e){const{selector:t}=this;if(t){const n=e.matches(t);return this.delegate.selectorMatchElement?n&&this.delegate.selectorMatchElement(e,this.details):n}return!1}matchElementsInTree(e){const{selector:t}=this;if(t){const n=this.matchElement(e)?[e]:[],i=Array.from(e.querySelectorAll(t)).filter((e=>this.matchElement(e)));return n.concat(i)}return[]}elementMatched(e){const{selector:t}=this;t&&this.selectorMatched(e,t)}elementUnmatched(e){const t=this.matchesByElement.getKeysForValue(e);for(const n of t)this.selectorUnmatched(e,n)}elementAttributeChanged(e,t){const{selector:n}=this;if(n){const t=this.matchElement(e),i=this.matchesByElement.has(n,e);t&&!i?this.selectorMatched(e,n):!t&&i&&this.selectorUnmatched(e,n)}}selectorMatched(e,t){this.delegate.selectorMatched(e,t,this.details),this.matchesByElement.add(t,e)}selectorUnmatched(e,t){this.delegate.selectorUnmatched(e,t,this.details),this.matchesByElement.delete(t,e)}}class A{constructor(e,t){this.element=e,this.delegate=t,this.started=!1,this.stringMap=new Map,this.mutationObserver=new MutationObserver((e=>this.processMutations(e)))}start(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0,attributeOldValue:!0}),this.refresh())}stop(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)}refresh(){if(this.started)for(const e of this.knownAttributeNames)this.refreshAttribute(e,null)}processMutations(e){if(this.started)for(const t of e)this.processMutation(t)}processMutation(e){const t=e.attributeName;t&&this.refreshAttribute(t,e.oldValue)}refreshAttribute(e,t){const n=this.delegate.getStringMapKeyForAttribute(e);if(null!=n){this.stringMap.has(e)||this.stringMapKeyAdded(n,e);const i=this.element.getAttribute(e);if(this.stringMap.get(e)!=i&&this.stringMapValueChanged(i,n,t),null==i){const t=this.stringMap.get(e);this.stringMap.delete(e),t&&this.stringMapKeyRemoved(n,e,t)}else this.stringMap.set(e,i)}}stringMapKeyAdded(e,t){this.delegate.stringMapKeyAdded&&this.delegate.stringMapKeyAdded(e,t)}stringMapValueChanged(e,t,n){this.delegate.stringMapValueChanged&&this.delegate.stringMapValueChanged(e,t,n)}stringMapKeyRemoved(e,t,n){this.delegate.stringMapKeyRemoved&&this.delegate.stringMapKeyRemoved(e,t,n)}get knownAttributeNames(){return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)))}get currentAttributeNames(){return Array.from(this.element.attributes).map((e=>e.name))}get recordedAttributeNames(){return Array.from(this.stringMap.keys())}}class T{constructor(e,t,n){this.attributeObserver=new y(e,t,this),this.delegate=n,this.tokensByElement=new w}get started(){return this.attributeObserver.started}start(){this.attributeObserver.start()}pause(e){this.attributeObserver.pause(e)}stop(){this.attributeObserver.stop()}refresh(){this.attributeObserver.refresh()}get element(){return this.attributeObserver.element}get attributeName(){return this.attributeObserver.attributeName}elementMatchedAttribute(e){this.tokensMatched(this.readTokensForElement(e))}elementAttributeValueChanged(e){const[t,n]=this.refreshTokensForElement(e);this.tokensUnmatched(t),this.tokensMatched(n)}elementUnmatchedAttribute(e){this.tokensUnmatched(this.tokensByElement.getValuesForKey(e))}tokensMatched(e){e.forEach((e=>this.tokenMatched(e)))}tokensUnmatched(e){e.forEach((e=>this.tokenUnmatched(e)))}tokenMatched(e){this.delegate.tokenMatched(e),this.tokensByElement.add(e.element,e)}tokenUnmatched(e){this.delegate.tokenUnmatched(e),this.tokensByElement.delete(e.element,e)}refreshTokensForElement(e){const t=this.tokensByElement.getValuesForKey(e),n=this.readTokensForElement(e),i=function(e,t){const n=Math.max(e.length,t.length);return Array.from({length:n},((n,i)=>[e[i],t[i]]))}(t,n).findIndex((([e,t])=>!function(e,t){return e&&t&&e.index==t.index&&e.content==t.content}(e,t)));return-1==i?[[],[]]:[t.slice(i),n.slice(i)]}readTokensForElement(e){const t=this.attributeName;return function(e,t,n){return e.trim().split(/\s+/).filter((e=>e.length)).map(((e,i)=>({element:t,attributeName:n,content:e,index:i})))}(e.getAttribute(t)||"",e,t)}}class x{constructor(e,t,n){this.tokenListObserver=new T(e,t,this),this.delegate=n,this.parseResultsByToken=new WeakMap,this.valuesByTokenByElement=new WeakMap}get started(){return this.tokenListObserver.started}start(){this.tokenListObserver.start()}stop(){this.tokenListObserver.stop()}refresh(){this.tokenListObserver.refresh()}get element(){return this.tokenListObserver.element}get attributeName(){return this.tokenListObserver.attributeName}tokenMatched(e){const{element:t}=e,{value:n}=this.fetchParseResultForToken(e);n&&(this.fetchValuesByTokenForElement(t).set(e,n),this.delegate.elementMatchedValue(t,n))}tokenUnmatched(e){const{element:t}=e,{value:n}=this.fetchParseResultForToken(e);n&&(this.fetchValuesByTokenForElement(t).delete(e),this.delegate.elementUnmatchedValue(t,n))}fetchParseResultForToken(e){let t=this.parseResultsByToken.get(e);return t||(t=this.parseToken(e),this.parseResultsByToken.set(e,t)),t}fetchValuesByTokenForElement(e){let t=this.valuesByTokenByElement.get(e);return t||(t=new Map,this.valuesByTokenByElement.set(e,t)),t}parseToken(e){try{return{value:this.delegate.parseValueForToken(e)}}catch(e){return{error:e}}}}class k{constructor(e,t){this.context=e,this.delegate=t,this.bindingsByAction=new Map}start(){this.valueListObserver||(this.valueListObserver=new x(this.element,this.actionAttribute,this),this.valueListObserver.start())}stop(){this.valueListObserver&&(this.valueListObserver.stop(),delete this.valueListObserver,this.disconnectAllActions())}get element(){return this.context.element}get identifier(){return this.context.identifier}get actionAttribute(){return this.schema.actionAttribute}get schema(){return this.context.schema}get bindings(){return Array.from(this.bindingsByAction.values())}connectAction(e){const t=new v(this.context,e);this.bindingsByAction.set(e,t),this.delegate.bindingConnected(t)}disconnectAction(e){const t=this.bindingsByAction.get(e);t&&(this.bindingsByAction.delete(e),this.delegate.bindingDisconnected(t))}disconnectAllActions(){this.bindings.forEach((e=>this.delegate.bindingDisconnected(e,!0))),this.bindingsByAction.clear()}parseValueForToken(e){const t=p.forToken(e,this.schema);if(t.identifier==this.identifier)return t}elementMatchedValue(e,t){this.connectAction(t)}elementUnmatchedValue(e,t){this.disconnectAction(t)}}class C{constructor(e,t){this.context=e,this.receiver=t,this.stringMapObserver=new A(this.element,this),this.valueDescriptorMap=this.controller.valueDescriptorMap}start(){this.stringMapObserver.start(),this.invokeChangedCallbacksForDefaultValues()}stop(){this.stringMapObserver.stop()}get element(){return this.context.element}get controller(){return this.context.controller}getStringMapKeyForAttribute(e){if(e in this.valueDescriptorMap)return this.valueDescriptorMap[e].name}stringMapKeyAdded(e,t){const n=this.valueDescriptorMap[t];this.hasValue(e)||this.invokeChangedCallback(e,n.writer(this.receiver[e]),n.writer(n.defaultValue))}stringMapValueChanged(e,t,n){const i=this.valueDescriptorNameMap[t];null!==e&&(null===n&&(n=i.writer(i.defaultValue)),this.invokeChangedCallback(t,e,n))}stringMapKeyRemoved(e,t,n){const i=this.valueDescriptorNameMap[e];this.hasValue(e)?this.invokeChangedCallback(e,i.writer(this.receiver[e]),n):this.invokeChangedCallback(e,i.writer(i.defaultValue),n)}invokeChangedCallbacksForDefaultValues(){for(const{key:e,name:t,defaultValue:n,writer:i}of this.valueDescriptors)null==n||this.controller.data.has(e)||this.invokeChangedCallback(t,i(n),void 0)}invokeChangedCallback(e,t,n){const i=`${e}Changed`,s=this.receiver[i];if("function"==typeof s){const i=this.valueDescriptorNameMap[e];try{const e=i.reader(t);let r=n;n&&(r=i.reader(n)),s.call(this.receiver,e,r)}catch(e){throw e instanceof TypeError&&(e.message=`Stimulus Value "${this.context.identifier}.${i.name}" - ${e.message}`),e}}}get valueDescriptors(){const{valueDescriptorMap:e}=this;return Object.keys(e).map((t=>e[t]))}get valueDescriptorNameMap(){const e={};return Object.keys(this.valueDescriptorMap).forEach((t=>{const n=this.valueDescriptorMap[t];e[n.name]=n})),e}hasValue(e){const t=`has${l(this.valueDescriptorNameMap[e].name)}`;return this.receiver[t]}}class M{constructor(e,t){this.context=e,this.delegate=t,this.targetsByName=new w}start(){this.tokenListObserver||(this.tokenListObserver=new T(this.element,this.attributeName,this),this.tokenListObserver.start())}stop(){this.tokenListObserver&&(this.disconnectAllTargets(),this.tokenListObserver.stop(),delete this.tokenListObserver)}tokenMatched({element:e,content:t}){this.scope.containsElement(e)&&this.connectTarget(e,t)}tokenUnmatched({element:e,content:t}){this.disconnectTarget(e,t)}connectTarget(e,t){var n;this.targetsByName.has(t,e)||(this.targetsByName.add(t,e),null===(n=this.tokenListObserver)||void 0===n||n.pause((()=>this.delegate.targetConnected(e,t))))}disconnectTarget(e,t){var n;this.targetsByName.has(t,e)&&(this.targetsByName.delete(t,e),null===(n=this.tokenListObserver)||void 0===n||n.pause((()=>this.delegate.targetDisconnected(e,t))))}disconnectAllTargets(){for(const e of this.targetsByName.keys)for(const t of this.targetsByName.getValuesForKey(e))this.disconnectTarget(t,e)}get attributeName(){return`data-${this.context.identifier}-target`}get element(){return this.context.element}get scope(){return this.context.scope}}function L(e,t){const n=F(e);return Array.from(n.reduce(((e,n)=>(function(e,t){const n=e[t];return Array.isArray(n)?n:[]}(n,t).forEach((t=>e.add(t))),e)),new Set))}function F(e){const t=[];for(;e;)t.push(e),e=Object.getPrototypeOf(e);return t.reverse()}class S{constructor(e,t){this.started=!1,this.context=e,this.delegate=t,this.outletsByName=new w,this.outletElementsByName=new w,this.selectorObserverMap=new Map,this.attributeObserverMap=new Map}start(){this.started||(this.outletDefinitions.forEach((e=>{this.setupSelectorObserverForOutlet(e),this.setupAttributeObserverForOutlet(e)})),this.started=!0,this.dependentContexts.forEach((e=>e.refresh())))}refresh(){this.selectorObserverMap.forEach((e=>e.refresh())),this.attributeObserverMap.forEach((e=>e.refresh()))}stop(){this.started&&(this.started=!1,this.disconnectAllOutlets(),this.stopSelectorObservers(),this.stopAttributeObservers())}stopSelectorObservers(){this.selectorObserverMap.size>0&&(this.selectorObserverMap.forEach((e=>e.stop())),this.selectorObserverMap.clear())}stopAttributeObservers(){this.attributeObserverMap.size>0&&(this.attributeObserverMap.forEach((e=>e.stop())),this.attributeObserverMap.clear())}selectorMatched(e,t,{outletName:n}){const i=this.getOutlet(e,n);i&&this.connectOutlet(i,e,n)}selectorUnmatched(e,t,{outletName:n}){const i=this.getOutletFromMap(e,n);i&&this.disconnectOutlet(i,e,n)}selectorMatchElement(e,{outletName:t}){const n=this.selector(t),i=this.hasOutlet(e,t),s=e.matches(`[${this.schema.controllerAttribute}~=${t}]`);return!!n&&i&&s&&e.matches(n)}elementMatchedAttribute(e,t){const n=this.getOutletNameFromOutletAttributeName(t);n&&this.updateSelectorObserverForOutlet(n)}elementAttributeValueChanged(e,t){const n=this.getOutletNameFromOutletAttributeName(t);n&&this.updateSelectorObserverForOutlet(n)}elementUnmatchedAttribute(e,t){const n=this.getOutletNameFromOutletAttributeName(t);n&&this.updateSelectorObserverForOutlet(n)}connectOutlet(e,t,n){var i;this.outletElementsByName.has(n,t)||(this.outletsByName.add(n,e),this.outletElementsByName.add(n,t),null===(i=this.selectorObserverMap.get(n))||void 0===i||i.pause((()=>this.delegate.outletConnected(e,t,n))))}disconnectOutlet(e,t,n){var i;this.outletElementsByName.has(n,t)&&(this.outletsByName.delete(n,e),this.outletElementsByName.delete(n,t),null===(i=this.selectorObserverMap.get(n))||void 0===i||i.pause((()=>this.delegate.outletDisconnected(e,t,n))))}disconnectAllOutlets(){for(const e of this.outletElementsByName.keys)for(const t of this.outletElementsByName.getValuesForKey(e))for(const n of this.outletsByName.getValuesForKey(e))this.disconnectOutlet(n,t,e)}updateSelectorObserverForOutlet(e){const t=this.selectorObserverMap.get(e);t&&(t.selector=this.selector(e))}setupSelectorObserverForOutlet(e){const t=this.selector(e),n=new O(document.body,t,this,{outletName:e});this.selectorObserverMap.set(e,n),n.start()}setupAttributeObserverForOutlet(e){const t=this.attributeNameForOutletName(e),n=new y(this.scope.element,t,this);this.attributeObserverMap.set(e,n),n.start()}selector(e){return this.scope.outlets.getSelectorForOutletName(e)}attributeNameForOutletName(e){return this.scope.schema.outletAttributeForScope(this.identifier,e)}getOutletNameFromOutletAttributeName(e){return this.outletDefinitions.find((t=>this.attributeNameForOutletName(t)===e))}get outletDependencies(){const e=new w;return this.router.modules.forEach((t=>{L(t.definition.controllerConstructor,"outlets").forEach((n=>e.add(n,t.identifier)))})),e}get outletDefinitions(){return this.outletDependencies.getKeysForValue(this.identifier)}get dependentControllerIdentifiers(){return this.outletDependencies.getValuesForKey(this.identifier)}get dependentContexts(){const e=this.dependentControllerIdentifiers;return this.router.contexts.filter((t=>e.includes(t.identifier)))}hasOutlet(e,t){return!!this.getOutlet(e,t)||!!this.getOutletFromMap(e,t)}getOutlet(e,t){return this.application.getControllerForElementAndIdentifier(e,t)}getOutletFromMap(e,t){return this.outletsByName.getValuesForKey(t).find((t=>t.element===e))}get scope(){return this.context.scope}get schema(){return this.context.schema}get identifier(){return this.context.identifier}get application(){return this.context.application}get router(){return this.application.router}}class D{constructor(e,t){this.logDebugActivity=(e,t={})=>{const{identifier:n,controller:i,element:s}=this;t=Object.assign({identifier:n,controller:i,element:s},t),this.application.logDebugActivity(this.identifier,e,t)},this.module=e,this.scope=t,this.controller=new e.controllerConstructor(this),this.bindingObserver=new k(this,this.dispatcher),this.valueObserver=new C(this,this.controller),this.targetObserver=new M(this,this),this.outletObserver=new S(this,this);try{this.controller.initialize(),this.logDebugActivity("initialize")}catch(e){this.handleError(e,"initializing controller")}}connect(){this.bindingObserver.start(),this.valueObserver.start(),this.targetObserver.start(),this.outletObserver.start();try{this.controller.connect(),this.logDebugActivity("connect")}catch(e){this.handleError(e,"connecting controller")}}refresh(){this.outletObserver.refresh()}disconnect(){try{this.controller.disconnect(),this.logDebugActivity("disconnect")}catch(e){this.handleError(e,"disconnecting controller")}this.outletObserver.stop(),this.targetObserver.stop(),this.valueObserver.stop(),this.bindingObserver.stop()}get application(){return this.module.application}get identifier(){return this.module.identifier}get schema(){return this.application.schema}get dispatcher(){return this.application.dispatcher}get element(){return this.scope.element}get parentElement(){return this.element.parentElement}handleError(e,t,n={}){const{identifier:i,controller:s,element:r}=this;n=Object.assign({identifier:i,controller:s,element:r},n),this.application.handleError(e,`Error ${t}`,n)}targetConnected(e,t){this.invokeControllerMethod(`${t}TargetConnected`,e)}targetDisconnected(e,t){this.invokeControllerMethod(`${t}TargetDisconnected`,e)}outletConnected(e,t,n){this.invokeControllerMethod(`${a(n)}OutletConnected`,e,t)}outletDisconnected(e,t,n){this.invokeControllerMethod(`${a(n)}OutletDisconnected`,e,t)}invokeControllerMethod(e,...t){const n=this.controller;"function"==typeof n[e]&&n[e](...t)}}const N="function"==typeof Object.getOwnPropertySymbols?e=>[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)]:Object.getOwnPropertyNames,B=(()=>{function e(e){function t(){return Reflect.construct(e,arguments,new.target)}return t.prototype=Object.create(e.prototype,{constructor:{value:t}}),Reflect.setPrototypeOf(t,e),t}try{return function(){const t=e((function(){this.a.call(this)}));t.prototype.a=function(){},new t}(),e}catch(e){return e=>class extends e{}}})();class I{constructor(e,t){this.application=e,this.definition=function(e){return{identifier:e.identifier,controllerConstructor:(t=e.controllerConstructor,function(e,t){const n=B(e),i=function(e,t){return N(t).reduce(((n,i)=>{const s=function(e,t,n){const i=Object.getOwnPropertyDescriptor(e,n);if(!i||!("value"in i)){const e=Object.getOwnPropertyDescriptor(t,n).value;return i&&(e.get=i.get||e.get,e.set=i.set||e.set),e}}(e,t,i);return s&&Object.assign(n,{[i]:s}),n}),{})}(e.prototype,t);return Object.defineProperties(n.prototype,i),n}(t,function(e){return L(e,"blessings").reduce(((t,n)=>{const i=n(e);for(const e in i){const n=t[e]||{};t[e]=Object.assign(n,i[e])}return t}),{})}(t)))};var t}(t),this.contextsByScope=new WeakMap,this.connectedContexts=new Set}get identifier(){return this.definition.identifier}get controllerConstructor(){return this.definition.controllerConstructor}get contexts(){return Array.from(this.connectedContexts)}connectContextForScope(e){const t=this.fetchContextForScope(e);this.connectedContexts.add(t),t.connect()}disconnectContextForScope(e){const t=this.contextsByScope.get(e);t&&(this.connectedContexts.delete(t),t.disconnect())}fetchContextForScope(e){let t=this.contextsByScope.get(e);return t||(t=new D(this,e),this.contextsByScope.set(e,t)),t}}class ${constructor(e){this.scope=e}has(e){return this.data.has(this.getDataKey(e))}get(e){return this.getAll(e)[0]}getAll(e){return(this.data.get(this.getDataKey(e))||"").match(/[^\s]+/g)||[]}getAttributeName(e){return this.data.getAttributeNameForKey(this.getDataKey(e))}getDataKey(e){return`${e}-class`}get data(){return this.scope.data}}class j{constructor(e){this.scope=e}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get(e){const t=this.getAttributeNameForKey(e);return this.element.getAttribute(t)}set(e,t){const n=this.getAttributeNameForKey(e);return this.element.setAttribute(n,t),this.get(e)}has(e){const t=this.getAttributeNameForKey(e);return this.element.hasAttribute(t)}delete(e){if(this.has(e)){const t=this.getAttributeNameForKey(e);return this.element.removeAttribute(t),!0}return!1}getAttributeNameForKey(e){return`data-${this.identifier}-${c(e)}`}}class P{constructor(e){this.warnedKeysByObject=new WeakMap,this.logger=e}warn(e,t,n){let i=this.warnedKeysByObject.get(e);i||(i=new Set,this.warnedKeysByObject.set(e,i)),i.has(t)||(i.add(t),this.logger.warn(n,e))}}function V(e,t){return`[${e}~="${t}"]`}class K{constructor(e){this.scope=e}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get schema(){return this.scope.schema}has(e){return null!=this.find(e)}find(...e){return e.reduce(((e,t)=>e||this.findTarget(t)||this.findLegacyTarget(t)),void 0)}findAll(...e){return e.reduce(((e,t)=>[...e,...this.findAllTargets(t),...this.findAllLegacyTargets(t)]),[])}findTarget(e){const t=this.getSelectorForTargetName(e);return this.scope.findElement(t)}findAllTargets(e){const t=this.getSelectorForTargetName(e);return this.scope.findAllElements(t)}getSelectorForTargetName(e){return V(this.schema.targetAttributeForScope(this.identifier),e)}findLegacyTarget(e){const t=this.getLegacySelectorForTargetName(e);return this.deprecate(this.scope.findElement(t),e)}findAllLegacyTargets(e){const t=this.getLegacySelectorForTargetName(e);return this.scope.findAllElements(t).map((t=>this.deprecate(t,e)))}getLegacySelectorForTargetName(e){const t=`${this.identifier}.${e}`;return V(this.schema.targetAttribute,t)}deprecate(e,t){if(e){const{identifier:n}=this,i=this.schema.targetAttribute,s=this.schema.targetAttributeForScope(n);this.guide.warn(e,`target:${t}`,`Please replace ${i}="${n}.${t}" with ${s}="${t}". The ${i} attribute is deprecated and will be removed in a future version of Stimulus.`)}return e}get guide(){return this.scope.guide}}class _{constructor(e,t){this.scope=e,this.controllerElement=t}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get schema(){return this.scope.schema}has(e){return null!=this.find(e)}find(...e){return e.reduce(((e,t)=>e||this.findOutlet(t)),void 0)}findAll(...e){return e.reduce(((e,t)=>[...e,...this.findAllOutlets(t)]),[])}getSelectorForOutletName(e){const t=this.schema.outletAttributeForScope(this.identifier,e);return this.controllerElement.getAttribute(t)}findOutlet(e){const t=this.getSelectorForOutletName(e);if(t)return this.findElement(t,e)}findAllOutlets(e){const t=this.getSelectorForOutletName(e);return t?this.findAllElements(t,e):[]}findElement(e,t){return this.scope.queryElements(e).filter((n=>this.matchesElement(n,e,t)))[0]}findAllElements(e,t){return this.scope.queryElements(e).filter((n=>this.matchesElement(n,e,t)))}matchesElement(e,t,n){const i=e.getAttribute(this.scope.schema.controllerAttribute)||"";return e.matches(t)&&i.split(" ").includes(n)}}class H{constructor(e,t,n,i){this.targets=new K(this),this.classes=new $(this),this.data=new j(this),this.containsElement=e=>e.closest(this.controllerSelector)===this.element,this.schema=e,this.element=t,this.identifier=n,this.guide=new P(i),this.outlets=new _(this.documentScope,t)}findElement(e){return this.element.matches(e)?this.element:this.queryElements(e).find(this.containsElement)}findAllElements(e){return[...this.element.matches(e)?[this.element]:[],...this.queryElements(e).filter(this.containsElement)]}queryElements(e){return Array.from(this.element.querySelectorAll(e))}get controllerSelector(){return V(this.schema.controllerAttribute,this.identifier)}get isDocumentScope(){return this.element===document.documentElement}get documentScope(){return this.isDocumentScope?this:new H(this.schema,document.documentElement,this.identifier,this.guide.logger)}}class R{constructor(e,t,n){this.element=e,this.schema=t,this.delegate=n,this.valueListObserver=new x(this.element,this.controllerAttribute,this),this.scopesByIdentifierByElement=new WeakMap,this.scopeReferenceCounts=new WeakMap}start(){this.valueListObserver.start()}stop(){this.valueListObserver.stop()}get controllerAttribute(){return this.schema.controllerAttribute}parseValueForToken(e){const{element:t,content:n}=e;return this.parseValueForElementAndIdentifier(t,n)}parseValueForElementAndIdentifier(e,t){const n=this.fetchScopesByIdentifierForElement(e);let i=n.get(t);return i||(i=this.delegate.createScopeForElementAndIdentifier(e,t),n.set(t,i)),i}elementMatchedValue(e,t){const n=(this.scopeReferenceCounts.get(t)||0)+1;this.scopeReferenceCounts.set(t,n),1==n&&this.delegate.scopeConnected(t)}elementUnmatchedValue(e,t){const n=this.scopeReferenceCounts.get(t);n&&(this.scopeReferenceCounts.set(t,n-1),1==n&&this.delegate.scopeDisconnected(t))}fetchScopesByIdentifierForElement(e){let t=this.scopesByIdentifierByElement.get(e);return t||(t=new Map,this.scopesByIdentifierByElement.set(e,t)),t}}class U{constructor(e){this.application=e,this.scopeObserver=new R(this.element,this.schema,this),this.scopesByIdentifier=new w,this.modulesByIdentifier=new Map}get element(){return this.application.element}get schema(){return this.application.schema}get logger(){return this.application.logger}get controllerAttribute(){return this.schema.controllerAttribute}get modules(){return Array.from(this.modulesByIdentifier.values())}get contexts(){return this.modules.reduce(((e,t)=>e.concat(t.contexts)),[])}start(){this.scopeObserver.start()}stop(){this.scopeObserver.stop()}loadDefinition(e){this.unloadIdentifier(e.identifier);const t=new I(this.application,e);this.connectModule(t);const n=e.controllerConstructor.afterLoad;n&&n.call(e.controllerConstructor,e.identifier,this.application)}unloadIdentifier(e){const t=this.modulesByIdentifier.get(e);t&&this.disconnectModule(t)}getContextForElementAndIdentifier(e,t){const n=this.modulesByIdentifier.get(t);if(n)return n.contexts.find((t=>t.element==e))}proposeToConnectScopeForElementAndIdentifier(e,t){const n=this.scopeObserver.parseValueForElementAndIdentifier(e,t);n?this.scopeObserver.elementMatchedValue(n.element,n):console.error(`Couldn't find or create scope for identifier: "${t}" and element:`,e)}handleError(e,t,n){this.application.handleError(e,t,n)}createScopeForElementAndIdentifier(e,t){return new H(this.schema,e,t,this.logger)}scopeConnected(e){this.scopesByIdentifier.add(e.identifier,e);const t=this.modulesByIdentifier.get(e.identifier);t&&t.connectContextForScope(e)}scopeDisconnected(e){this.scopesByIdentifier.delete(e.identifier,e);const t=this.modulesByIdentifier.get(e.identifier);t&&t.disconnectContextForScope(e)}connectModule(e){this.modulesByIdentifier.set(e.identifier,e),this.scopesByIdentifier.getValuesForKey(e.identifier).forEach((t=>e.connectContextForScope(t)))}disconnectModule(e){this.modulesByIdentifier.delete(e.identifier),this.scopesByIdentifier.getValuesForKey(e.identifier).forEach((t=>e.disconnectContextForScope(t)))}}const W={controllerAttribute:"data-controller",actionAttribute:"data-action",targetAttribute:"data-target",targetAttributeForScope:e=>`data-${e}-target`,outletAttributeForScope:(e,t)=>`data-${e}-${t}-outlet`,keyMappings:Object.assign(Object.assign({enter:"Enter",tab:"Tab",esc:"Escape",space:" ",up:"ArrowUp",down:"ArrowDown",left:"ArrowLeft",right:"ArrowRight",home:"Home",end:"End",page_up:"PageUp",page_down:"PageDown"},q("abcdefghijklmnopqrstuvwxyz".split("").map((e=>[e,e])))),q("0123456789".split("").map((e=>[e,e]))))};function q(e){return e.reduce(((e,[t,n])=>Object.assign(Object.assign({},e),{[t]:n})),{})}class z{constructor(e=document.documentElement,t=W){this.logger=console,this.debug=!1,this.logDebugActivity=(e,t,n={})=>{this.debug&&this.logFormattedMessage(e,t,n)},this.element=e,this.schema=t,this.dispatcher=new i(this),this.router=new U(this),this.actionDescriptorFilters=Object.assign({},s)}static start(e,t){const n=new this(e,t);return n.start(),n}async start(){await new Promise((e=>{"loading"==document.readyState?document.addEventListener("DOMContentLoaded",(()=>e())):e()})),this.logDebugActivity("application","starting"),this.dispatcher.start(),this.router.start(),this.logDebugActivity("application","start")}stop(){this.logDebugActivity("application","stopping"),this.dispatcher.stop(),this.router.stop(),this.logDebugActivity("application","stop")}register(e,t){this.load({identifier:e,controllerConstructor:t})}registerActionOption(e,t){this.actionDescriptorFilters[e]=t}load(e,...t){(Array.isArray(e)?e:[e,...t]).forEach((e=>{e.controllerConstructor.shouldLoad&&this.router.loadDefinition(e)}))}unload(e,...t){(Array.isArray(e)?e:[e,...t]).forEach((e=>this.router.unloadIdentifier(e)))}get controllers(){return this.router.contexts.map((e=>e.controller))}getControllerForElementAndIdentifier(e,t){const n=this.router.getContextForElementAndIdentifier(e,t);return n?n.controller:null}handleError(e,t,n){var i;this.logger.error("%s\n\n%o\n\n%o",t,e,n),null===(i=window.onerror)||void 0===i||i.call(window,t,"",0,0,e)}logFormattedMessage(e,t,n={}){n=Object.assign({application:this},n),this.logger.groupCollapsed(`${e} #${t}`),this.logger.log("details:",Object.assign({},n)),this.logger.groupEnd()}}function J(e,t,n){return e.application.getControllerForElementAndIdentifier(t,n)}function X(e,t,n){let i=J(e,t,n);return i||(e.application.router.proposeToConnectScopeForElementAndIdentifier(t,n),i=J(e,t,n),i||void 0)}function Y([e,t],n){return function(e){const{token:t,typeDefinition:n}=e,i=`${c(t)}-value`,s=function(e){const{controller:t,token:n,typeDefinition:i}=e,s=function(e){const{controller:t,token:n,typeObject:i}=e,s=h(i.type),r=h(i.default),o=s&&r,a=s&&!r,l=!s&&r,c=Z(i.type),d=G(e.typeObject.default);if(a)return c;if(l)return d;if(c!==d)throw new Error(`The specified default value for the Stimulus Value "${t?`${t}.${n}`:n}" must match the defined type "${c}". The provided default value of "${i.default}" is of type "${d}".`);return o?c:void 0}({controller:t,token:n,typeObject:i}),r=G(i),o=Z(i),a=s||r||o;if(a)return a;throw new Error(`Unknown value type "${t?`${t}.${i}`:n}" for "${n}" value`)}(e);return{type:s,key:i,name:o(i),get defaultValue(){return function(e){const t=Z(e);if(t)return Q[t];const n=d(e,"default"),i=d(e,"type"),s=e;if(n)return s.default;if(i){const{type:e}=s,t=Z(e);if(t)return Q[t]}return e}(n)},get hasCustomDefaultValue(){return void 0!==G(n)},reader:ee[s],writer:te[s]||te.default}}({controller:n,token:e,typeDefinition:t})}function Z(e){switch(e){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function G(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}return Array.isArray(e)?"array":"[object Object]"===Object.prototype.toString.call(e)?"object":void 0}const Q={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},ee={array(e){const t=JSON.parse(e);if(!Array.isArray(t))throw new TypeError(`expected value of type "array" but instead got value "${e}" of type "${G(t)}"`);return t},boolean:e=>!("0"==e||"false"==String(e).toLowerCase()),number:e=>Number(e.replace(/_/g,"")),object(e){const t=JSON.parse(e);if(null===t||"object"!=typeof t||Array.isArray(t))throw new TypeError(`expected value of type "object" but instead got value "${e}" of type "${G(t)}"`);return t},string:e=>e},te={default:function(e){return`${e}`},array:ne,object:ne};function ne(e){return JSON.stringify(e)}class ie{constructor(e){this.context=e}static get shouldLoad(){return!0}static afterLoad(e,t){}get application(){return this.context.application}get scope(){return this.context.scope}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get targets(){return this.scope.targets}get outlets(){return this.scope.outlets}get classes(){return this.scope.classes}get data(){return this.scope.data}initialize(){}connect(){}disconnect(){}dispatch(e,{target:t=this.element,detail:n={},prefix:i=this.identifier,bubbles:s=!0,cancelable:r=!0}={}){const o=new CustomEvent(i?`${i}:${e}`:e,{detail:n,bubbles:s,cancelable:r});return t.dispatchEvent(o),o}}ie.blessings=[function(e){return L(e,"classes").reduce(((e,t)=>{return Object.assign(e,{[`${n=t}Class`]:{get(){const{classes:e}=this;if(e.has(n))return e.get(n);{const t=e.getAttributeName(n);throw new Error(`Missing attribute "${t}"`)}}},[`${n}Classes`]:{get(){return this.classes.getAll(n)}},[`has${l(n)}Class`]:{get(){return this.classes.has(n)}}});var n}),{})},function(e){return L(e,"targets").reduce(((e,t)=>{return Object.assign(e,{[`${n=t}Target`]:{get(){const e=this.targets.find(n);if(e)return e;throw new Error(`Missing target element "${n}" for "${this.identifier}" controller`)}},[`${n}Targets`]:{get(){return this.targets.findAll(n)}},[`has${l(n)}Target`]:{get(){return this.targets.has(n)}}});var n}),{})},function(e){const t=function(e,t){return F(e).reduce(((e,n)=>(e.push(...function(e,t){const n=e[t];return n?Object.keys(n).map((e=>[e,n[e]])):[]}(n,t)),e)),[])}(e,"values"),n={valueDescriptorMap:{get(){return t.reduce(((e,t)=>{const n=Y(t,this.identifier),i=this.data.getAttributeNameForKey(n.key);return Object.assign(e,{[i]:n})}),{})}}};return t.reduce(((e,t)=>Object.assign(e,function(e,t){const n=Y(e,void 0),{key:i,name:s,reader:r,writer:o}=n;return{[s]:{get(){const e=this.data.get(i);return null!==e?r(e):n.defaultValue},set(e){void 0===e?this.data.delete(i):this.data.set(i,o(e))}},[`has${l(s)}`]:{get(){return this.data.has(i)||n.hasCustomDefaultValue}}}}(t))),n)},function(e){return L(e,"outlets").reduce(((e,t)=>Object.assign(e,function(e){const t=a(e);return{[`${t}Outlet`]:{get(){const t=this.outlets.find(e),n=this.outlets.getSelectorForOutletName(e);if(t){const n=X(this,t,e);if(n)return n;throw new Error(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`)}throw new Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${n}".`)}},[`${t}Outlets`]:{get(){const t=this.outlets.findAll(e);return t.length>0?t.map((t=>{const n=X(this,t,e);if(n)return n;console.warn(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`,t)})).filter((e=>e)):[]}},[`${t}OutletElement`]:{get(){const t=this.outlets.find(e),n=this.outlets.getSelectorForOutletName(e);if(t)return t;throw new Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${n}".`)}},[`${t}OutletElements`]:{get(){return this.outlets.findAll(e)}},[`has${l(t)}Outlet`]:{get(){return this.outlets.has(e)}}}}(t))),{})}],ie.targets=[],ie.outlets=[],ie.values={};class se extends z{load(e,...t){const n=Array.isArray(e)?e:[e,...t];for(const e of n){const t=/^s-/.test(e.identifier);if(se._initializing&&!t)throw'Stacks-created Stimulus controller names must start with "s-".';if(!se._initializing&&t)throw'The "s-" prefix on Stimulus controller names is reserved for Stacks-created controllers.'}super.load(n)}static start(e,t){const n=new se(e,t);return n.start(),n}static finalize(){se._initializing=!1}}se._initializing=!0;const re=se.start();class oe extends ie{getElementData(e,t){return e.getAttribute("data-"+this.identifier+"-"+t)}setElementData(e,t,n){e.setAttribute("data-"+this.identifier+"-"+t,n)}removeElementData(e,t){e.removeAttribute("data-"+this.identifier+"-"+t)}triggerEvent(e,t,n){const i=this.identifier+":"+e;let s;try{s=new CustomEvent(i,{bubbles:!0,cancelable:!0,detail:t})}catch(e){s=document.createEvent("CustomEvent"),s.initCustomEvent(i,!0,!0,t)}return(n||this.element).dispatchEvent(s),s}}function ae(e){var t,n;const i=e.hasOwnProperty("targets")?((n=class extends oe{}).targets=null!==(t=e.targets)&&void 0!==t?t:[],n):class extends oe{};for(const t in e){const n=e.hasOwnProperty(t)&&Object.getOwnPropertyDescriptor(e,t);"targets"!==t&&n&&Object.defineProperty(i.prototype,t,n)}return i}function le(e,t){re.register(e,ae(t))}class ce extends oe{toggle(e=null){this._toggle(void 0,e)}show(e=null){this._toggle(!0,e)}hide(e=null){this._toggle(!1,e)}_toggle(e,t=null){let n=e;const i="false"===this.bannerTarget.getAttribute("aria-hidden");if(void 0===n&&(n=!i),n&&i||!n&&!i)return;const s=this.getDispatcher(t);this.triggerEvent(n?"show":"hide",{dispatcher:this.getDispatcher(s)},this.bannerTarget).defaultPrevented||(this.bannerTarget.setAttribute("aria-hidden",n?"false":"true"),n||this.removeBannerOnHide(),this.triggerEvent(n?"shown":"hidden",{dispatcher:s},this.bannerTarget))}removeBannerOnHide(){"true"===this.data.get("remove-when-hidden")&&this.bannerTarget.addEventListener("s-banner:hidden",(()=>{this.element.remove()}),{once:!0})}getDispatcher(e=null){return e instanceof Event?e.target:e instanceof Element?e:this.element}}function he(e){ue(e,!0)}function de(e){ue(e,!1)}function ue(e,t){const n=re.getControllerForElementAndIdentifier(e,"s-banner");if(!n)throw"Unable to get s-banner controller from element";t?n.show():n.hide()}ce.targets=["banner"];const pe="s-expandable-control:radio-off";function me(e){const t=e.target;t instanceof HTMLInputElement&&"INPUT"===t.nodeName&&"radio"===t.type&&document.querySelectorAll('input[type="radio"][name="'+t.name+'"]').forEach((function(t){if(t===e.target)return;let n;try{n=new Event(pe)}catch(e){n=document.createEvent("Event"),n.initEvent(pe,!0,!0)}t.dispatchEvent(n)}))}let fe=0;function ge(e){e?(fe++,1===fe&&document.body.addEventListener("change",me)):(fe--,0===fe&&document.body.removeEventListener("change",me))}class ve extends oe{constructor(){super(...arguments),this.lastKeydownClickTimestamp=0}initialize(){"INPUT"===this.element.nodeName&&["radio","checkbox"].indexOf(this.element.type)>=0?(this.isCollapsed=this._isCollapsedForCheckable.bind(this),this.events=["change",pe],this.isCheckable=!0,this.isRadio="radio"===this.element.type):(this.isCollapsed=this._isCollapsedForClickable.bind(this),this.events=["click","keydown"]),this.listener=this.listener.bind(this)}_isCollapsedForClickable(){const e=this.controlledExpandables;return e.length>0?!e.every((e=>e.classList.contains("is-expanded"))):"false"===this.element.getAttribute("aria-expanded")}_isCollapsedForCheckable(){return!this.element.checked}get controlledExpandables(){const e=this.element.getAttribute("aria-controls");if(!e)throw'[aria-controls="targetId1 ... targetIdN"] attribute required';const t=e.split(/\s+/g).map((e=>document.getElementById(e))).filter((e=>!!e));if(!t.length)throw"couldn't find controls";return t}_dispatchShowHideEvent(e){this.triggerEvent(e?"show":"hide")}_toggleClass(e){if(!this.data.has("toggle-class"))return;const t=this.element.classList,n=this.data.get("toggle-class");if(!n)throw"couldn't find toggle class";n.split(/\s+/).forEach((function(n){t.toggle(n,!!e)}))}listener(e){let t;if(this.isCheckable)t=!this.element.checked;else{if("keydown"==e.type&&e instanceof KeyboardEvent&&13!=e.keyCode&&32!=e.keyCode)return;if(e.target!==e.currentTarget&&["A","BUTTON"].indexOf(e.target.nodeName)>=0)return;if(e.preventDefault(),"keydown"==e.type)this.lastKeydownClickTimestamp=Date.now();else if("click"==e.type&&Date.now()-this.lastKeydownClickTimestamp<300)return;t="true"===this.element.getAttribute("aria-expanded"),"click"===e.type&&this.element.blur()}this.element.setAttribute("aria-expanded",t?"false":"true");for(const e of this.controlledExpandables)e.classList.toggle("is-expanded",!t);this._dispatchShowHideEvent(!t),this._toggleClass(!t)}connect(){if(this.events.forEach((e=>{this.element.addEventListener(e,this.listener.bind(this))}),this),this.isRadio&&ge(!0),this.isRadio||this.element.setAttribute("aria-expanded",this.isCollapsed()?"false":"true"),this.isCheckable){const e=this.controlledExpandables;if(e.length){const t=!this.isCollapsed();if(e.some((e=>e.classList.contains("is-expanded")!==t))){for(const e of this.controlledExpandables)e.classList.toggle("is-expanded",t);this._dispatchShowHideEvent(t),this._toggleClass(t)}}}}disconnect(){this.events.forEach((e=>{this.element.removeEventListener(e,this.listener.bind(this))}),this),this.isRadio&&ge(!1)}}class be extends oe{connect(){this.validate()}disconnect(){this.unbindDocumentEvents()}toggle(e=null){this._toggle(void 0,e)}show(e=null){this._toggle(!0,e)}hide(e=null){this._toggle(!1,e)}validate(){const e=this.data.get("return-element");if(e&&(this.returnElement=document.querySelector(e),!this.returnElement))throw"Unable to find element by return-element selector: "+e}_toggle(e,t=null){let n=e;const i="false"===this.modalTarget.getAttribute("aria-hidden");if(void 0===n&&(n=!i),n&&i||!n&&!i)return;const s=this.getDispatcher(t),r=this.triggerEvent(n?"show":"hide",{returnElement:this.returnElement,dispatcher:this.getDispatcher(s)},this.modalTarget);r.defaultPrevented||(this.returnElement=r.detail.returnElement,this.modalTarget.setAttribute("aria-hidden",n?"false":"true"),n?(this.bindDocumentEvents(),this.focusInsideModal()):(this.unbindDocumentEvents(),this.focusReturnElement(),this.removeModalOnHide()),void 0!==this.modalTarget.ontransitionend?this.modalTarget.addEventListener("transitionend",(()=>{this.triggerEvent(n?"shown":"hidden",{dispatcher:s},this.modalTarget)}),{once:!0}):this.triggerEvent(n?"shown":"hidden",{dispatcher:s},this.modalTarget))}focusReturnElement(){this.returnElement&&this.modalTarget.addEventListener("s-modal:hidden",(()=>{this.returnElement&&document.body.contains(this.returnElement)&&this.returnElement.focus()}),{once:!0})}removeModalOnHide(){"true"===this.data.get("remove-when-hidden")&&this.modalTarget.addEventListener("s-modal:hidden",(()=>{this.element.remove()}),{once:!0})}getAllTabbables(){return Array.from(this.modalTarget.querySelectorAll("[href], input, select, textarea, button, [tabindex]")).filter((e=>e.matches(":not([disabled]):not([tabindex='-1'])")))}firstVisible(e){return e.find((e=>null!==e.offsetParent))}lastVisible(e){return this.firstVisible([...e].reverse())}focusInsideModal(){this.modalTarget.addEventListener("s-modal:shown",(()=>{var e;const t=null!==(e=this.firstVisible(this.initialFocusTargets))&&void 0!==e?e:this.firstVisible(this.getAllTabbables());null==t||t.focus()}),{once:!0})}keepFocusWithinModal(e){if(this.modalTarget.contains(e.target)){if("Tab"===e.key){const t=this.getAllTabbables(),n=this.firstVisible(t),i=this.lastVisible(t);n&&i&&(n===i?(e.preventDefault(),n.focus()):e.shiftKey&&e.target===n?(e.preventDefault(),i.focus()):e.shiftKey||e.target!==i||(e.preventDefault(),n.focus()))}}else{const t=this.firstVisible(this.getAllTabbables());t&&(e.preventDefault(),t.focus())}}bindDocumentEvents(){this._boundClickFn=this._boundClickFn||this.hideOnOutsideClick.bind(this),this._boundKeypressFn=this._boundKeypressFn||this.hideOnEscapePress.bind(this),this._boundTabTrap=this._boundTabTrap||this.keepFocusWithinModal.bind(this),document.addEventListener("mousedown",this._boundClickFn),document.addEventListener("keyup",this._boundKeypressFn),document.addEventListener("keydown",this._boundTabTrap)}unbindDocumentEvents(){document.removeEventListener("mousedown",this._boundClickFn),document.removeEventListener("keyup",this._boundKeypressFn),document.removeEventListener("keydown",this._boundTabTrap)}hideOnOutsideClick(e){var t;const n=e.target;!(null===(t=this.modalTarget.querySelector(".s-modal--dialog"))||void 0===t?void 0:t.contains(n))&&document.body.contains(n)&&this._toggle(!1,e)}hideOnEscapePress(e){27===e.which&&"true"!==this.modalTarget.getAttribute("aria-hidden")&&this._toggle(!1,e)}getDispatcher(e=null){return e instanceof Event?e.target:e instanceof Element?e:this.element}}function ye(e){we(e,!0)}function Ee(e){we(e,!1)}function we(e,t){const n=re.getControllerForElementAndIdentifier(e,"s-modal");if(!n)throw"Unable to get s-modal controller from element";t?n.show():n.hide()}be.targets=["modal","initialFocus"];class Oe extends oe{connect(){super.connect(),this.boundSelectTab=this.selectTab.bind(this),this.boundHandleKeydown=this.handleKeydown.bind(this);for(const e of this.tabTargets)e.addEventListener("click",this.boundSelectTab),e.addEventListener("keydown",this.boundHandleKeydown)}disconnect(){super.disconnect();for(const e of this.tabTargets)e.removeEventListener("click",this.boundSelectTab),e.removeEventListener("keydown",this.boundHandleKeydown)}get tabTargets(){return Array.from(this.element.querySelectorAll("[role=tab]"))}selectTab(e){this.switchToTab(e.currentTarget)}handleKeydown(e){var t;let n=e.currentTarget;const i=this.tabTargets;let s=i.indexOf(n);if("ArrowRight"===e.key)s++;else{if("ArrowLeft"!==e.key)return;s--}s<0&&(s=i.length-1),s>=i.length&&(s=0),n=i[s],this.switchToTab(n),null===(t=this.selectedTab)||void 0===t||t.focus()}switchToTab(e){const t=this.selectedTab;t!==e&&(this.triggerEvent("select",{oldTab:t,newTab:e}).defaultPrevented||(this.selectedTab=e,this.triggerEvent("selected",{oldTab:t,newTab:e})))}get selectedTab(){return this.tabTargets.find((e=>"true"===e.getAttribute("aria-selected")))||null}set selectedTab(e){for(const t of this.tabTargets){const n=t.getAttribute("aria-controls"),i=n?document.getElementById(n):null;t===e?(t.classList.add("is-selected"),t.setAttribute("aria-selected","true"),t.removeAttribute("tabindex"),null==i||i.classList.remove("d-none")):(t.classList.remove("is-selected"),t.setAttribute("aria-selected","false"),t.setAttribute("tabindex","-1"),null==i||i.classList.add("d-none"))}}}function Ae(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Te(e){return e instanceof Ae(e).Element||e instanceof Element}function xe(e){return e instanceof Ae(e).HTMLElement||e instanceof HTMLElement}function ke(e){return"undefined"!=typeof ShadowRoot&&(e instanceof Ae(e).ShadowRoot||e instanceof ShadowRoot)}var Ce=Math.max,Me=Math.min,Le=Math.round;function Fe(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function Se(){return!/^((?!chrome|android).)*safari/i.test(Fe())}function De(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=e.getBoundingClientRect(),s=1,r=1;t&&xe(e)&&(s=e.offsetWidth>0&&Le(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&Le(i.height)/e.offsetHeight||1);var o=(Te(e)?Ae(e):window).visualViewport,a=!Se()&&n,l=(i.left+(a&&o?o.offsetLeft:0))/s,c=(i.top+(a&&o?o.offsetTop:0))/r,h=i.width/s,d=i.height/r;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ne(e){var t=Ae(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function Be(e){return e?(e.nodeName||"").toLowerCase():null}function Ie(e){return((Te(e)?e.ownerDocument:e.document)||window.document).documentElement}function $e(e){return De(Ie(e)).left+Ne(e).scrollLeft}function je(e){return Ae(e).getComputedStyle(e)}function Pe(e){var t=je(e),n=t.overflow,i=t.overflowX,s=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+s+i)}function Ve(e,t,n){void 0===n&&(n=!1);var i,s,r=xe(t),o=xe(t)&&function(e){var t=e.getBoundingClientRect(),n=Le(t.width)/e.offsetWidth||1,i=Le(t.height)/e.offsetHeight||1;return 1!==n||1!==i}(t),a=Ie(t),l=De(e,o,n),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(r||!r&&!n)&&(("body"!==Be(t)||Pe(a))&&(c=(i=t)!==Ae(i)&&xe(i)?{scrollLeft:(s=i).scrollLeft,scrollTop:s.scrollTop}:Ne(i)),xe(t)?((h=De(t,!0)).x+=t.clientLeft,h.y+=t.clientTop):a&&(h.x=$e(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function Ke(e){var t=De(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function _e(e){return"html"===Be(e)?e:e.assignedSlot||e.parentNode||(ke(e)?e.host:null)||Ie(e)}function He(e){return["html","body","#document"].indexOf(Be(e))>=0?e.ownerDocument.body:xe(e)&&Pe(e)?e:He(_e(e))}function Re(e,t){var n;void 0===t&&(t=[]);var i=He(e),s=i===(null==(n=e.ownerDocument)?void 0:n.body),r=Ae(i),o=s?[r].concat(r.visualViewport||[],Pe(i)?i:[]):i,a=t.concat(o);return s?a:a.concat(Re(_e(o)))}function Ue(e){return["table","td","th"].indexOf(Be(e))>=0}function We(e){return xe(e)&&"fixed"!==je(e).position?e.offsetParent:null}function qe(e){for(var t=Ae(e),n=We(e);n&&Ue(n)&&"static"===je(n).position;)n=We(n);return n&&("html"===Be(n)||"body"===Be(n)&&"static"===je(n).position)?t:n||function(e){var t=/firefox/i.test(Fe());if(/Trident/i.test(Fe())&&xe(e)&&"fixed"===je(e).position)return null;var n=_e(e);for(ke(n)&&(n=n.host);xe(n)&&["html","body"].indexOf(Be(n))<0;){var i=je(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||t}var ze="top",Je="bottom",Xe="right",Ye="left",Ze="auto",Ge=[ze,Je,Xe,Ye],Qe="start",et="end",tt="viewport",nt="popper",it=Ge.reduce((function(e,t){return e.concat([t+"-"+Qe,t+"-"+et])}),[]),st=[].concat(Ge,[Ze]).reduce((function(e,t){return e.concat([t,t+"-"+Qe,t+"-"+et])}),[]),rt=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function ot(e){var t=new Map,n=new Set,i=[];function s(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var i=t.get(e);i&&s(i)}})),i.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||s(e)})),i}var at={placement:"bottom",modifiers:[],strategy:"absolute"};function lt(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some((function(e){return!(e&&"function"==typeof e.getBoundingClientRect)}))}function ct(e){void 0===e&&(e={});var t=e,n=t.defaultModifiers,i=void 0===n?[]:n,s=t.defaultOptions,r=void 0===s?at:s;return function(e,t,n){void 0===n&&(n=r);var s,o,a={placement:"bottom",orderedModifiers:[],options:Object.assign({},at,r),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},l=[],c=!1,h={state:a,setOptions:function(n){var s="function"==typeof n?n(a.options):n;d(),a.options=Object.assign({},r,a.options,s),a.scrollParents={reference:Te(e)?Re(e):e.contextElement?Re(e.contextElement):[],popper:Re(t)};var o,c,u=function(e){var t=ot(e);return rt.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])}((o=[].concat(i,a.options.modifiers),c=o.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{}),Object.keys(c).map((function(e){return c[e]}))));return a.orderedModifiers=u.filter((function(e){return e.enabled})),a.orderedModifiers.forEach((function(e){var t=e.name,n=e.options,i=void 0===n?{}:n,s=e.effect;if("function"==typeof s){var r=s({state:a,name:t,instance:h,options:i});l.push(r||function(){})}})),h.update()},forceUpdate:function(){if(!c){var e=a.elements,t=e.reference,n=e.popper;if(lt(t,n)){a.rects={reference:Ve(t,qe(n),"fixed"===a.options.strategy),popper:Ke(n)},a.reset=!1,a.placement=a.options.placement,a.orderedModifiers.forEach((function(e){return a.modifiersData[e.name]=Object.assign({},e.data)}));for(var i=0;i<a.orderedModifiers.length;i++)if(!0!==a.reset){var s=a.orderedModifiers[i],r=s.fn,o=s.options,l=void 0===o?{}:o,d=s.name;"function"==typeof r&&(a=r({state:a,options:l,name:d,instance:h})||a)}else a.reset=!1,i=-1}}},update:(s=function(){return new Promise((function(e){h.forceUpdate(),e(a)}))},function(){return o||(o=new Promise((function(e){Promise.resolve().then((function(){o=void 0,e(s())}))}))),o}),destroy:function(){d(),c=!0}};if(!lt(e,t))return h;function d(){l.forEach((function(e){return e()})),l=[]}return h.setOptions(n).then((function(e){!c&&n.onFirstUpdate&&n.onFirstUpdate(e)})),h}}var ht={passive:!0};function dt(e){return e.split("-")[0]}function ut(e){return e.split("-")[1]}function pt(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function mt(e){var t,n=e.reference,i=e.element,s=e.placement,r=s?dt(s):null,o=s?ut(s):null,a=n.x+n.width/2-i.width/2,l=n.y+n.height/2-i.height/2;switch(r){case ze:t={x:a,y:n.y-i.height};break;case Je:t={x:a,y:n.y+n.height};break;case Xe:t={x:n.x+n.width,y:l};break;case Ye:t={x:n.x-i.width,y:l};break;default:t={x:n.x,y:n.y}}var c=r?pt(r):null;if(null!=c){var h="y"===c?"height":"width";switch(o){case Qe:t[c]=t[c]-(n[h]/2-i[h]/2);break;case et:t[c]=t[c]+(n[h]/2-i[h]/2)}}return t}var ft={top:"auto",right:"auto",bottom:"auto",left:"auto"};function gt(e){var t,n=e.popper,i=e.popperRect,s=e.placement,r=e.variation,o=e.offsets,a=e.position,l=e.gpuAcceleration,c=e.adaptive,h=e.roundOffsets,d=e.isFixed,u=o.x,p=void 0===u?0:u,m=o.y,f=void 0===m?0:m,g="function"==typeof h?h({x:p,y:f}):{x:p,y:f};p=g.x,f=g.y;var v=o.hasOwnProperty("x"),b=o.hasOwnProperty("y"),y=Ye,E=ze,w=window;if(c){var O=qe(n),A="clientHeight",T="clientWidth";O===Ae(n)&&"static"!==je(O=Ie(n)).position&&"absolute"===a&&(A="scrollHeight",T="scrollWidth"),(s===ze||(s===Ye||s===Xe)&&r===et)&&(E=Je,f-=(d&&O===w&&w.visualViewport?w.visualViewport.height:O[A])-i.height,f*=l?1:-1),s!==Ye&&(s!==ze&&s!==Je||r!==et)||(y=Xe,p-=(d&&O===w&&w.visualViewport?w.visualViewport.width:O[T])-i.width,p*=l?1:-1)}var x,k=Object.assign({position:a},c&&ft),C=!0===h?function(e,t){var n=e.x,i=e.y,s=t.devicePixelRatio||1;return{x:Le(n*s)/s||0,y:Le(i*s)/s||0}}({x:p,y:f},Ae(n)):{x:p,y:f};return p=C.x,f=C.y,l?Object.assign({},k,((x={})[E]=b?"0":"",x[y]=v?"0":"",x.transform=(w.devicePixelRatio||1)<=1?"translate("+p+"px, "+f+"px)":"translate3d("+p+"px, "+f+"px, 0)",x)):Object.assign({},k,((t={})[E]=b?f+"px":"",t[y]=v?p+"px":"",t.transform="",t))}var vt={left:"right",right:"left",bottom:"top",top:"bottom"};function bt(e){return e.replace(/left|right|bottom|top/g,(function(e){return vt[e]}))}var yt={start:"end",end:"start"};function Et(e){return e.replace(/start|end/g,(function(e){return yt[e]}))}function wt(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&ke(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function Ot(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function At(e,t,n){return t===tt?Ot(function(e,t){var n=Ae(e),i=Ie(e),s=n.visualViewport,r=i.clientWidth,o=i.clientHeight,a=0,l=0;if(s){r=s.width,o=s.height;var c=Se();(c||!c&&"fixed"===t)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:r,height:o,x:a+$e(e),y:l}}(e,n)):Te(t)?function(e,t){var n=De(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):Ot(function(e){var t,n=Ie(e),i=Ne(e),s=null==(t=e.ownerDocument)?void 0:t.body,r=Ce(n.scrollWidth,n.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),o=Ce(n.scrollHeight,n.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-i.scrollLeft+$e(e),l=-i.scrollTop;return"rtl"===je(s||n).direction&&(a+=Ce(n.clientWidth,s?s.clientWidth:0)-r),{width:r,height:o,x:a,y:l}}(Ie(e)))}function Tt(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function xt(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function kt(e,t){void 0===t&&(t={});var n=t,i=n.placement,s=void 0===i?e.placement:i,r=n.strategy,o=void 0===r?e.strategy:r,a=n.boundary,l=void 0===a?"clippingParents":a,c=n.rootBoundary,h=void 0===c?tt:c,d=n.elementContext,u=void 0===d?nt:d,p=n.altBoundary,m=void 0!==p&&p,f=n.padding,g=void 0===f?0:f,v=Tt("number"!=typeof g?g:xt(g,Ge)),b=u===nt?"reference":nt,y=e.rects.popper,E=e.elements[m?b:u],w=function(e,t,n,i){var s="clippingParents"===t?function(e){var t=Re(_e(e)),n=["absolute","fixed"].indexOf(je(e).position)>=0&&xe(e)?qe(e):e;return Te(n)?t.filter((function(e){return Te(e)&&wt(e,n)&&"body"!==Be(e)})):[]}(e):[].concat(t),r=[].concat(s,[n]),o=r[0],a=r.reduce((function(t,n){var s=At(e,n,i);return t.top=Ce(s.top,t.top),t.right=Me(s.right,t.right),t.bottom=Me(s.bottom,t.bottom),t.left=Ce(s.left,t.left),t}),At(e,o,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(Te(E)?E:E.contextElement||Ie(e.elements.popper),l,h,o),O=De(e.elements.reference),A=mt({reference:O,element:y,strategy:"absolute",placement:s}),T=Ot(Object.assign({},y,A)),x=u===nt?T:O,k={top:w.top-x.top+v.top,bottom:x.bottom-w.bottom+v.bottom,left:w.left-x.left+v.left,right:x.right-w.right+v.right},C=e.modifiersData.offset;if(u===nt&&C){var M=C[s];Object.keys(k).forEach((function(e){var t=[Xe,Je].indexOf(e)>=0?1:-1,n=[ze,Je].indexOf(e)>=0?"y":"x";k[e]+=M[n]*t}))}return k}function Ct(e,t,n){return Ce(e,Me(t,n))}function Mt(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function Lt(e){return[ze,Xe,Je,Ye].some((function(t){return e[t]>=0}))}var Ft,St=ct({defaultModifiers:[{name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,i=e.options,s=i.scroll,r=void 0===s||s,o=i.resize,a=void 0===o||o,l=Ae(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&c.forEach((function(e){e.addEventListener("scroll",n.update,ht)})),a&&l.addEventListener("resize",n.update,ht),function(){r&&c.forEach((function(e){e.removeEventListener("scroll",n.update,ht)})),a&&l.removeEventListener("resize",n.update,ht)}},data:{}},{name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=mt({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,i=n.gpuAcceleration,s=void 0===i||i,r=n.adaptive,o=void 0===r||r,a=n.roundOffsets,l=void 0===a||a,c={placement:dt(t.placement),variation:ut(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:s,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,gt(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:o,roundOffsets:l})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,gt(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},{name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},i=t.attributes[e]||{},s=t.elements[e];xe(s)&&Be(s)&&(Object.assign(s.style,n),Object.keys(i).forEach((function(e){var t=i[e];!1===t?s.removeAttribute(e):s.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var i=t.elements[e],s=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});xe(i)&&Be(i)&&(Object.assign(i.style,r),Object.keys(s).forEach((function(e){i.removeAttribute(e)})))}))}},requires:["computeStyles"]},{name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,i=e.name,s=n.offset,r=void 0===s?[0,0]:s,o=st.reduce((function(e,n){return e[n]=function(e,t,n){var i=dt(e),s=[Ye,ze].indexOf(i)>=0?-1:1,r="function"==typeof n?n(Object.assign({},t,{placement:e})):n,o=r[0],a=r[1];return o=o||0,a=(a||0)*s,[Ye,Xe].indexOf(i)>=0?{x:a,y:o}:{x:o,y:a}}(n,t.rects,r),e}),{}),a=o[t.placement],l=a.x,c=a.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=c),t.modifiersData[i]=o}},{name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var s=n.mainAxis,r=void 0===s||s,o=n.altAxis,a=void 0===o||o,l=n.fallbackPlacements,c=n.padding,h=n.boundary,d=n.rootBoundary,u=n.altBoundary,p=n.flipVariations,m=void 0===p||p,f=n.allowedAutoPlacements,g=t.options.placement,v=dt(g),b=l||(v!==g&&m?function(e){if(dt(e)===Ze)return[];var t=bt(e);return[Et(e),t,Et(t)]}(g):[bt(g)]),y=[g].concat(b).reduce((function(e,n){return e.concat(dt(n)===Ze?function(e,t){void 0===t&&(t={});var n=t,i=n.placement,s=n.boundary,r=n.rootBoundary,o=n.padding,a=n.flipVariations,l=n.allowedAutoPlacements,c=void 0===l?st:l,h=ut(i),d=h?a?it:it.filter((function(e){return ut(e)===h})):Ge,u=d.filter((function(e){return c.indexOf(e)>=0}));0===u.length&&(u=d);var p=u.reduce((function(t,n){return t[n]=kt(e,{placement:n,boundary:s,rootBoundary:r,padding:o})[dt(n)],t}),{});return Object.keys(p).sort((function(e,t){return p[e]-p[t]}))}(t,{placement:n,boundary:h,rootBoundary:d,padding:c,flipVariations:m,allowedAutoPlacements:f}):n)}),[]),E=t.rects.reference,w=t.rects.popper,O=new Map,A=!0,T=y[0],x=0;x<y.length;x++){var k=y[x],C=dt(k),M=ut(k)===Qe,L=[ze,Je].indexOf(C)>=0,F=L?"width":"height",S=kt(t,{placement:k,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),D=L?M?Xe:Ye:M?Je:ze;E[F]>w[F]&&(D=bt(D));var N=bt(D),B=[];if(r&&B.push(S[C]<=0),a&&B.push(S[D]<=0,S[N]<=0),B.every((function(e){return e}))){T=k,A=!1;break}O.set(k,B)}if(A)for(var I=function(e){var t=y.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return T=t,"break"},$=m?3:1;$>0&&"break"!==I($);$--);t.placement!==T&&(t.modifiersData[i]._skip=!0,t.placement=T,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}},{name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name,s=n.mainAxis,r=void 0===s||s,o=n.altAxis,a=void 0!==o&&o,l=n.boundary,c=n.rootBoundary,h=n.altBoundary,d=n.padding,u=n.tether,p=void 0===u||u,m=n.tetherOffset,f=void 0===m?0:m,g=kt(t,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),v=dt(t.placement),b=ut(t.placement),y=!b,E=pt(v),w="x"===E?"y":"x",O=t.modifiersData.popperOffsets,A=t.rects.reference,T=t.rects.popper,x="function"==typeof f?f(Object.assign({},t.rects,{placement:t.placement})):f,k="number"==typeof x?{mainAxis:x,altAxis:x}:Object.assign({mainAxis:0,altAxis:0},x),C=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,M={x:0,y:0};if(O){if(r){var L,F="y"===E?ze:Ye,S="y"===E?Je:Xe,D="y"===E?"height":"width",N=O[E],B=N+g[F],I=N-g[S],$=p?-T[D]/2:0,j=b===Qe?A[D]:T[D],P=b===Qe?-T[D]:-A[D],V=t.elements.arrow,K=p&&V?Ke(V):{width:0,height:0},_=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},H=_[F],R=_[S],U=Ct(0,A[D],K[D]),W=y?A[D]/2-$-U-H-k.mainAxis:j-U-H-k.mainAxis,q=y?-A[D]/2+$+U+R+k.mainAxis:P+U+R+k.mainAxis,z=t.elements.arrow&&qe(t.elements.arrow),J=z?"y"===E?z.clientTop||0:z.clientLeft||0:0,X=null!=(L=null==C?void 0:C[E])?L:0,Y=N+q-X,Z=Ct(p?Me(B,N+W-X-J):B,N,p?Ce(I,Y):I);O[E]=Z,M[E]=Z-N}if(a){var G,Q="x"===E?ze:Ye,ee="x"===E?Je:Xe,te=O[w],ne="y"===w?"height":"width",ie=te+g[Q],se=te-g[ee],re=-1!==[ze,Ye].indexOf(v),oe=null!=(G=null==C?void 0:C[w])?G:0,ae=re?ie:te-A[ne]-T[ne]-oe+k.altAxis,le=re?te+A[ne]+T[ne]-oe-k.altAxis:se,ce=p&&re?function(e,t,n){var i=Ct(e,t,n);return i>n?n:i}(ae,te,le):Ct(p?ae:ie,te,p?le:se);O[w]=ce,M[w]=ce-te}t.modifiersData[i]=M}},requiresIfExists:["offset"]},{name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,i=e.name,s=e.options,r=n.elements.arrow,o=n.modifiersData.popperOffsets,a=dt(n.placement),l=pt(a),c=[Ye,Xe].indexOf(a)>=0?"height":"width";if(r&&o){var h=function(e,t){return Tt("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:xt(e,Ge))}(s.padding,n),d=Ke(r),u="y"===l?ze:Ye,p="y"===l?Je:Xe,m=n.rects.reference[c]+n.rects.reference[l]-o[l]-n.rects.popper[c],f=o[l]-n.rects.reference[l],g=qe(r),v=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=m/2-f/2,y=h[u],E=v-d[c]-h[p],w=v/2-d[c]/2+b,O=Ct(y,w,E),A=l;n.modifiersData[i]=((t={})[A]=O,t.centerOffset=O-w,t)}},effect:function(e){var t=e.state,n=e.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&wt(t.elements.popper,i)&&(t.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,i=t.rects.reference,s=t.rects.popper,r=t.modifiersData.preventOverflow,o=kt(t,{elementContext:"reference"}),a=kt(t,{altBoundary:!0}),l=Mt(o,i),c=Mt(a,s,r),h=Lt(l),d=Lt(c);t.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}}]});class Dt extends oe{get isVisible(){const e=this.popoverElement;return!!e&&e.classList.contains("is-visible")}get isInViewport(){const e=this.popoverElement;if(!this.isVisible||!e)return!1;const t=e.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight),i=Math.max(document.documentElement.clientWidth,window.innerWidth);return t.bottom>0&&t.top<n&&t.right>0&&t.left<i}get shouldHideOnOutsideClick(){switch(this.data.get("hide-on-outside-click")){case"after-dismissal":case"never":return!1;case"if-in-viewport":return this.isInViewport;default:return!0}}connect(){super.connect(),this.validate(),this.isVisible?this.initializePopper():"true"===this.data.get("auto-show")&&this.show(null),this.data.delete("auto-show")}disconnect(){this.hide(),this.popper&&(this.popper.destroy(),delete this.popper),super.disconnect()}toggle(e=null){this.isVisible?this.hide(e):this.show(e)}show(e=null){if(this.isVisible)return;const t=this.getDispatcher(e);this.triggerEvent("show",{dispatcher:t}).defaultPrevented||(this.popper||this.initializePopper(),this.popoverElement.classList.add("is-visible"),this.scheduleUpdate(),this.shown(t))}hide(e=null){if(!this.isVisible)return;const t=this.getDispatcher(e);this.triggerEvent("hide",{dispatcher:t}).defaultPrevented||(this.popoverElement.classList.remove("is-visible"),this.popper&&(this.popper.destroy(),delete this.popper),"after-dismissal"===this.data.get("hide-on-outside-click")&&this.data.delete("hide-on-outside-click"),this.hidden(t))}shown(e=null){this.bindDocumentEvents(),this.triggerEvent("shown",{dispatcher:e})}hidden(e=null){this.unbindDocumentEvents(),this.triggerEvent("hidden",{dispatcher:e})}generatePopover(){return null}initializePopper(){this.popper=St(this.referenceElement,this.popoverElement,{placement:this.data.get("placement")||"bottom",modifiers:[{name:"offset",options:{offset:[0,10]}},{name:"arrow",options:{element:".s-popover--arrow"}}]})}validate(){const e=this.data.get("reference-selector");if(this.referenceElement=this.element,e&&(this.referenceElement=this.element.querySelector(e),!this.referenceElement))throw"Unable to find element by reference selector: "+e;const t=this.referenceElement.getAttribute(this.popoverSelectorAttribute);let n=null;if(t){if(n=document.getElementById(t),!n)throw`[${this.popoverSelectorAttribute}="{POPOVER_ID}"] required`}else n=this.generatePopover();if(!n)throw"unable to find or generate popover element";this.popoverElement=n}getDispatcher(e=null){return e instanceof Event?e.target:e instanceof Element?e:this.element}scheduleUpdate(){this.popper&&this.isVisible&&this.popper.update()}}class Nt extends Dt{constructor(){super(...arguments),this.popoverSelectorAttribute="aria-controls"}shown(e=null){this.toggleOptionalClasses(!0),this.toggleAccessibilityAttributes(!0),super.shown(e)}hidden(e=null){this.toggleOptionalClasses(!1),this.toggleAccessibilityAttributes(!1),super.hidden(e)}connect(){super.connect(),this.toggleAccessibilityAttributes()}bindDocumentEvents(){this.boundHideOnOutsideClick=this.boundHideOnOutsideClick||this.hideOnOutsideClick.bind(this),this.boundHideOnEscapePress=this.boundHideOnEscapePress||this.hideOnEscapePress.bind(this),document.addEventListener("mousedown",this.boundHideOnOutsideClick),document.addEventListener("keyup",this.boundHideOnEscapePress)}unbindDocumentEvents(){document.removeEventListener("mousedown",this.boundHideOnOutsideClick),document.removeEventListener("keyup",this.boundHideOnEscapePress)}hideOnOutsideClick(e){const t=e.target;this.shouldHideOnOutsideClick&&!this.referenceElement.contains(t)&&!this.popoverElement.contains(t)&&document.body.contains(t)&&this.hide(e)}hideOnEscapePress(e){27===e.which&&this.isVisible&&(this.popoverElement.contains(e.target)&&this.referenceElement.focus(),this.hide(e))}toggleOptionalClasses(e){if(!this.data.has("toggle-class"))return;const t=this.data.get("toggle-class")||"",n=this.referenceElement.classList;t.split(/\s+/).forEach((function(t){n.toggle(t,e)}))}toggleAccessibilityAttributes(e){const t=(null==e?void 0:e.toString())||this.referenceElement.ariaExpanded||"false";this.referenceElement.ariaExpanded=t,this.referenceElement.setAttribute("aria-expanded",t)}}function Bt(e){const{isPopover:t,controller:n}=Pt(e);if(n)n.show();else{if(!t)throw'element does not have data-controller="s-popover"';e.setAttribute("data-s-popover-auto-show","true")}}function It(e){const{isPopover:t,controller:n,popover:i}=Pt(e);if(n)n.hide();else{if(!t)throw'element does not have data-controller="s-popover"';e.removeAttribute("data-s-popover-auto-show"),i&&i.classList.remove("is-visible")}}function $t(e,t,n){const{referenceElement:i,popover:s}=Pt(e);if(s)throw`element already has popover with id="${s.id}"`;if(!i)throw"element has invalid data-s-popover-reference-selector attribute";if("string"==typeof t){const e=document.createRange().createContextualFragment(t).children;if(1!==e.length)throw"popover should contain a single element";t=e[0]}const r=i.getAttribute("aria-controls");let o=t.id;if(!t.classList.contains("s-popover"))throw`popover should have the "s-popover" class but had class="${t.className}"`;if(r&&r!==o)throw`element has aria-controls="${r}" but popover has id="${o}"`;o||(o="--stacks-s-popover-"+Math.random().toString(36).substring(2,10),t.id=o),r||i.setAttribute("aria-controls",o),!t.parentElement&&e.parentElement&&i.insertAdjacentElement("afterend",t),Vt(e,"s-popover",!0),n&&(n.toggleOnClick&&i.setAttribute("data-action","click->s-popover#toggle"),n.placement&&e.setAttribute("data-s-popover-placement",n.placement),n.autoShow&&e.setAttribute("data-s-popover-auto-show","true"))}function jt(e){const{isPopover:t,controller:n,referenceElement:i,popover:s}=Pt(e);return null==n||n.hide(),null==s||s.remove(),t&&(Vt(e,"s-popover",!1),i&&i.removeAttribute("aria-controls")),s}function Pt(e){var t;const n=(null===(t=e.getAttribute("data-controller"))||void 0===t?void 0:t.includes("s-popover"))||!1,i=re.getControllerForElementAndIdentifier(e,"s-popover"),s=e.getAttribute("data-s-popover-reference-selector"),r=s?e.querySelector(s):e,o=r?r.getAttribute("aria-controls"):null;return{isPopover:n,controller:i,referenceElement:r,popover:o?document.getElementById(o):null}}function Vt(e,t,n){var i;const s=new Set(null===(i=e.getAttribute("data-controller"))||void 0===i?void 0:i.split(/\s+/));n?s.add(t):s.delete(t),e.setAttribute("data-controller",Array.from(s).join(" "))}Nt.targets=[],function(e){e.Ascending="ascending",e.Descending="descending",e.None="none"}(Ft||(Ft={}));class Kt extends oe{constructor(){super(...arguments),this.updateSortedColumnStyles=(e,t)=>{this.columnTargets.forEach((n=>{const i=n===e,s=i?t===Ft.Ascending?"asc":"desc":Ft.None;n.classList.toggle("is-sorted",i&&t!==Ft.None),n.querySelectorAll(".js-sorting-indicator").forEach((e=>{e.classList.toggle("d-none",!e.classList.contains("js-sorting-indicator-"+s))})),i?n.setAttribute("aria-sort",t):n.removeAttribute("aria-sort")}))}}sort(e){const t=this,n=e.currentTarget,i=n instanceof HTMLButtonElement?n.parentElement:n,s=this.element,r=s.tBodies[0],o=function(e){var t;const n=null===(t=e.parentElement)||void 0===t?void 0:t.parentElement;if(!(n instanceof HTMLTableSectionElement))throw"invalid table";const i=_t(n,e);if("number"!=typeof i)throw"shouldn't happen";return i}(i);if(o<0)return;const a=function(e){const t=_t(e);if(!Array.isArray(t))throw"shouldn't happen";return t}(r),l=i.getAttribute("aria-sort")===Ft.Ascending?-1:1,c=Array.from(s.tBodies[0].rows);let h=!1;const d=[];let u;c.forEach((function(e,n){var i,s;const r=t.getElementData(e,"sort-to");if("top"===r)return;if("bottom"===r)return void(u||(u=e));const l=a[n][o];if(!l)return void d.push(["",n]);const c=t.getElementData(l,"sort-val"),p=null!==(s=null!=c?c:null===(i=l.textContent)||void 0===i?void 0:i.trim())&&void 0!==s?s:"";""!==p&&`${parseInt(p,10)}`!==p&&(h=!0),d.push([p,n])})),h||d.forEach((function(e){e[0]=""===e[0]?Number.MIN_VALUE:parseInt(e[0],10)})),d.sort((function(e,t){return e[0]>t[0]?1*l:e[0]<t[0]?-1*l:e[1]>t[1]?1:-1})),d.forEach((([e,t])=>{var n;const i=c[t];null===(n=i.parentElement)||void 0===n||n.removeChild(i),u?r.insertBefore(i,u):r.appendChild(i)})),this.updateSortedColumnStyles(i,1===l?Ft.Ascending:Ft.Descending)}}function _t(e,t){const n=[];let i=e.children[0];const s=[],r=[];for(;i||r.some((e=>0!==e));){const e=[];n.push(e);let o=0;if(i)for(let n=0;n<i.children.length;n++){for(;r[o];)r[o]--,e[o]=s[o],o++;const a=i.children[n];if(!(a instanceof HTMLTableCellElement))throw"invalid table";if("none"===getComputedStyle(a).display)continue;if(a===t)return o;const l=o+a.colSpan;for(;o<l;o++)r[o]=a.rowSpan-1,s[o]=a,e[o]=a}for(;o<s.length;)r[o]&&(r[o]--,e[o]=s[o]),o++;i&&(i=i.nextElementSibling)}return t?-1:n}Kt.targets=["column"];class Ht extends oe{connect(){this.validate()}disconnect(){this.unbindDocumentEvents()}toggle(e=null){this._toggle(void 0,e)}show(e=null){this._toggle(!0,e)}hide(e=null){this._toggle(!1,e)}validate(){const e=this.data.get("return-element");if(e&&(this.returnElement=document.querySelector(e),!this.returnElement))throw"Unable to find element by return-element selector: "+e}_toggle(e,t=null){let n=e;const i="false"===this.toastTarget.getAttribute("aria-hidden");if(void 0===n&&(n=!i),n&&i||!n&&!i)return;const s=this.getDispatcher(t),r=this.triggerEvent(n?"show":"hide",{returnElement:this.returnElement,dispatcher:this.getDispatcher(s)},this.toastTarget);r.defaultPrevented||(this.returnElement=r.detail.returnElement,this.toastTarget.setAttribute("aria-hidden",n?"false":"true"),n?(this.bindDocumentEvents(),this.hideAfterTimeout(),"true"!==this.data.get("prevent-focus-capture")&&this.focusInsideToast()):(this.unbindDocumentEvents(),this.focusReturnElement(),this.removeToastOnHide(),this.clearActiveTimeout()),void 0!==this.toastTarget.ontransitionend?this.toastTarget.addEventListener("transitionend",(()=>{this.triggerEvent(n?"shown":"hidden",{dispatcher:s},this.toastTarget)}),{once:!0}):this.triggerEvent(n?"shown":"hidden",{dispatcher:s},this.toastTarget))}focusReturnElement(){this.returnElement&&this.toastTarget.addEventListener("s-toast:hidden",(()=>{this.returnElement&&document.body.contains(this.returnElement)&&this.returnElement.focus()}),{once:!0})}removeToastOnHide(){"true"===this.data.get("remove-when-hidden")&&this.toastTarget.addEventListener("s-toast:hidden",(()=>{this.element.remove()}),{once:!0})}hideAfterTimeout(){if("true"===this.data.get("prevent-auto-hide")||"0"===this.data.get("hide-after-timeout"))return;const e=parseInt(this.data.get("hide-after-timeout"),10)||3e3;this.activeTimeout=window.setTimeout((()=>this.hide()),e)}clearActiveTimeout(){clearTimeout(this.activeTimeout)}getAllTabbables(){return Array.from(this.toastTarget.querySelectorAll("[href], input, select, textarea, button, [tabindex]")).filter((e=>e.matches(":not([disabled]):not([tabindex='-1'])")))}firstVisible(e){return null==e?void 0:e.find((e=>null!==e.offsetParent))}focusInsideToast(){this.toastTarget.addEventListener("s-toast:shown",(()=>{var e;const t=null!==(e=this.firstVisible(this.initialFocusTargets))&&void 0!==e?e:this.firstVisible(this.getAllTabbables());null==t||t.focus()}),{once:!0})}bindDocumentEvents(){this._boundClickFn=this._boundClickFn||this.hideOnOutsideClick.bind(this),this._boundKeypressFn=this._boundKeypressFn||this.hideOnEscapePress.bind(this),document.addEventListener("mousedown",this._boundClickFn),document.addEventListener("keyup",this._boundKeypressFn)}unbindDocumentEvents(){document.removeEventListener("mousedown",this._boundClickFn),document.removeEventListener("keyup",this._boundKeypressFn)}hideOnOutsideClick(e){var t;const n=e.target;!(null===(t=this.toastTarget)||void 0===t?void 0:t.contains(n))&&document.body.contains(n)&&"false"!==this.data.get("hide-on-outside-click")&&this._toggle(!1,e)}hideOnEscapePress(e){27===e.which&&"true"!==this.toastTarget.getAttribute("aria-hidden")&&this._toggle(!1,e)}getDispatcher(e=null){return e instanceof Event?e.target:e instanceof Element?e:this.element}}function Rt(e){Wt(e,!0)}function Ut(e){Wt(e,!1)}function Wt(e,t){const n=re.getControllerForElementAndIdentifier(e,"s-toast");if(!n)throw"Unable to get s-toast controller from element";t?n.show():n.hide()}Ht.targets=["toast","initialFocus"];class qt extends Dt{constructor(){super(...arguments),this.popoverSelectorAttribute="aria-describedby"}connect(){super.connect(),window.matchMedia("(hover: hover)").matches&&this.bindMouseEvents(),this.bindKeyboardEvents()}disconnect(){this.unbindKeyboardEvents(),this.unbindMouseEvents(),super.disconnect()}show(e=null){const t=re.getControllerForElementAndIdentifier(this.element,"s-popover");t&&t.isVisible||super.show(e)}scheduleShow(e=null){window.clearTimeout(this.activeTimeout),this.activeTimeout=window.setTimeout((()=>this.show(e)),300)}scheduleHide(e=null){window.clearTimeout(this.activeTimeout),this.activeTimeout=window.setTimeout((()=>super.hide(e)),100)}clearActiveTimeout(){clearTimeout(this.activeTimeout)}applyTitleAttributes(){let e;const t=this.data.get("html-title");if(t)e=document.createRange().createContextualFragment(t);else{const t=this.element.getAttribute("title");if(!t)return null;e=document.createTextNode(t)}this.data.delete("html-title"),this.element.removeAttribute("title");let n=this.element.getAttribute("aria-describedby");n||(n=qt.generateId(),this.element.setAttribute("aria-describedby",n));let i=document.getElementById(n);if(!i){i=document.createElement("div"),i.id=n,i.className="s-popover s-popover__tooltip",i.setAttribute("role","tooltip");const e=this.element.parentNode;e?e.insertBefore(i,this.element.nextSibling):document.body.appendChild(i)}const s=i.querySelector(".s-popover--arrow");return i.innerHTML="",i.appendChild(e),s?i.appendChild(s):i.insertAdjacentHTML("beforeend",'<div class="s-popover--arrow"></div>'),this.scheduleUpdate(),i}bindDocumentEvents(){this.boundHideIfWithin=this.boundHideIfWithin||this.hideIfWithin.bind(this),document.addEventListener("s-popover:shown",this.boundHideIfWithin)}unbindDocumentEvents(){document.removeEventListener("s-popover:shown",this.boundHideIfWithin)}generatePopover(){return this.applyTitleAttributes()}hideIfWithin(e){e.target.contains(this.referenceElement)&&this.scheduleHide()}hideOnEscapeKeyEvent(e){"Escape"===e.key&&this.scheduleHide()}bindKeyboardEvents(){this.boundScheduleShow=this.boundScheduleShow||this.scheduleShow.bind(this),this.boundHide=this.boundHide||this.scheduleHide.bind(this),this.boundHideOnEscapeKeyEvent=this.boundHideOnEscapeKeyEvent||this.hideOnEscapeKeyEvent.bind(this),this.referenceElement.addEventListener("focus",this.boundScheduleShow),this.referenceElement.addEventListener("blur",this.boundHide),document.addEventListener("keyup",this.boundHideOnEscapeKeyEvent)}unbindKeyboardEvents(){this.referenceElement.removeEventListener("focus",this.boundScheduleShow),this.referenceElement.removeEventListener("blur",this.boundHide),document.removeEventListener("keyup",this.boundHideOnEscapeKeyEvent)}bindMouseEvents(){this.boundScheduleShow=this.boundScheduleShow||this.scheduleShow.bind(this),this.boundHide=this.boundHide||this.scheduleHide.bind(this),this.boundClearActiveTimeout=this.boundClearActiveTimeout||this.clearActiveTimeout.bind(this),this.referenceElement.addEventListener("mouseover",this.boundScheduleShow),this.referenceElement.addEventListener("mouseout",this.boundHide),this.popoverElement.addEventListener("mouseover",this.boundClearActiveTimeout),this.popoverElement.addEventListener("mouseout",this.boundHide)}unbindMouseEvents(){this.referenceElement.removeEventListener("mouseover",this.boundScheduleShow),this.referenceElement.removeEventListener("mouseout",this.boundHide),this.referenceElement.removeEventListener("focus",this.boundScheduleShow),this.referenceElement.removeEventListener("blur",this.boundHide),this.popoverElement.removeEventListener("mouseover",this.boundClearActiveTimeout),this.popoverElement.removeEventListener("mouseout",this.boundHide)}static generateId(){return"--stacks-s-tooltip-"+Math.random().toString(36).substring(2,10)}}function zt(e,t,n){e.setAttribute("data-s-tooltip-html-title",t),e.removeAttribute("title"),Xt(e,n)}function Jt(e,t,n){e.setAttribute("title",t),e.removeAttribute("data-s-tooltip-html-title"),Xt(e,n)}function Xt(e,t){t&&t.placement&&e.setAttribute("data-s-tooltip-placement",t.placement);const n=re.getControllerForElementAndIdentifier(e,"s-tooltip");if(n)n.applyTitleAttributes();else{const t=e.getAttribute("data-controller");e.setAttribute("data-controller",`${t||""} s-tooltip`)}}qt.targets=[];class Yt extends oe{connect(){super.connect(),this.boundDragEnter=this.handleUploaderActive.bind(this,!0),this.boundDragLeave=this.handleUploaderActive.bind(this,!1),this.inputTarget.addEventListener("dragenter",this.boundDragEnter),this.inputTarget.addEventListener("dragleave",this.boundDragLeave)}disconnect(){this.inputTarget.removeEventListener("dragenter",this.boundDragEnter),this.inputTarget.removeEventListener("dragleave",this.boundDragLeave),super.disconnect()}handleInput(){if(this.previewsTarget.innerHTML="",!this.inputTarget.files)return;const e=this.inputTarget.files.length;this.getDataURLs(this.inputTarget.files,Yt.FILE_DISPLAY_LIMIT).then((t=>{if(this.handleVisible(!0),t.length>1){const n=document.createElement("div");n.classList.add("s-uploader--previews-heading"),n.innerText=t.length<e?`Showing ${t.length} of ${e} files`:`${e} items`,this.previewsTarget.appendChild(n),this.previewsTarget.classList.add("has-multiple")}else this.previewsTarget.classList.remove("has-multiple");t.forEach((e=>this.addFilePreview(e))),this.handleUploaderActive(!0)})).catch((()=>null))}reset(){this.inputTarget.value="",this.previewsTarget.innerHTML="",this.handleVisible(!1)}handleVisible(e){const{scope:t}=this.targets,n=t.findAllElements("[data-s-uploader-hide-on-input]"),i=t.findAllElements("[data-s-uploader-show-on-input]"),s=t.findAllElements("[data-s-uploader-enable-on-input]");e?(n.forEach((e=>{e.classList.add("d-none")})),i.forEach((e=>{e.classList.remove("d-none")})),s.forEach((e=>{e.removeAttribute("disabled")}))):(n.forEach((e=>{e.classList.remove("d-none")})),i.forEach((e=>{e.classList.add("d-none")})),s.forEach((e=>{e.setAttribute("disabled","true")})),this.handleUploaderActive(!1))}addFilePreview(e){if(!e)return;const t=document.createElement("div");let n;e.type.match("image/*")&&e.data?(n=document.createElement("img"),n.src=e.data.toString(),n.alt=e.name):(n=document.createElement("div"),n.innerText=e.name),n.classList.add("s-uploader--preview-thumbnail"),t.appendChild(n),t.classList.add("s-uploader--preview"),t.setAttribute("data-filename",e.name),this.previewsTarget.appendChild(t)}handleUploaderActive(e){this.uploaderTarget.classList.toggle("is-active",e)}fileToDataURL(e){const t=new FileReader,{name:n,size:i,type:s}=e;return i<Yt.MAX_FILE_SIZE&&s.indexOf("image")>-1?new Promise(((i,r)=>{t.onload=e=>{var t;const o=null===(t=null==e?void 0:e.target)||void 0===t?void 0:t.result;o?i({data:o,name:n,type:s}):r()},t.readAsDataURL(e)})):Promise.resolve({name:n,type:s})}getDataURLs(e,t){const n=Array.from(e).slice(0,Math.min(t,e.length)).map((e=>this.fileToDataURL(e)));return Promise.all(n)}}return Yt.targets=["input","previews","uploader"],Yt.FILE_DISPLAY_LIMIT=10,Yt.MAX_FILE_SIZE=10485760,re.register("s-banner",ce),re.register("s-expandable-control",ve),re.register("s-modal",be),re.register("s-toast",Ht),re.register("s-navigation-tablist",Oe),re.register("s-popover",Nt),re.register("s-table",Kt),re.register("s-tooltip",qt),re.register("s-uploader",Yt),se.finalize(),t})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Stacks=t():e.Stacks=t()}(globalThis,(()=>(()=>{"use strict";var e={d:(t,n)=>{for(var i in n)e.o(n,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:n[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{BannerController:()=>ce,BasePopoverController:()=>Dt,ExpandableController:()=>ve,ModalController:()=>be,PopoverController:()=>Nt,StacksApplication:()=>se,StacksController:()=>oe,TabListController:()=>Oe,TableController:()=>Kt,ToastController:()=>Ht,TooltipController:()=>qt,UploaderController:()=>Yt,addController:()=>le,application:()=>re,attachPopover:()=>$t,createController:()=>ae,detachPopover:()=>jt,hideBanner:()=>de,hideModal:()=>Ee,hidePopover:()=>It,hideToast:()=>Ut,setTooltipHtml:()=>zt,setTooltipText:()=>Jt,showBanner:()=>he,showModal:()=>ye,showPopover:()=>Bt,showToast:()=>Rt});class n{constructor(e,t,n){this.eventTarget=e,this.eventName=t,this.eventOptions=n,this.unorderedBindings=new Set}connect(){this.eventTarget.addEventListener(this.eventName,this,this.eventOptions)}disconnect(){this.eventTarget.removeEventListener(this.eventName,this,this.eventOptions)}bindingConnected(e){this.unorderedBindings.add(e)}bindingDisconnected(e){this.unorderedBindings.delete(e)}handleEvent(e){const t=function(e){if("immediatePropagationStopped"in e)return e;{const{stopImmediatePropagation:t}=e;return Object.assign(e,{immediatePropagationStopped:!1,stopImmediatePropagation(){this.immediatePropagationStopped=!0,t.call(this)}})}}(e);for(const e of this.bindings){if(t.immediatePropagationStopped)break;e.handleEvent(t)}}hasBindings(){return this.unorderedBindings.size>0}get bindings(){return Array.from(this.unorderedBindings).sort(((e,t)=>{const n=e.index,i=t.index;return n<i?-1:n>i?1:0}))}}class i{constructor(e){this.application=e,this.eventListenerMaps=new Map,this.started=!1}start(){this.started||(this.started=!0,this.eventListeners.forEach((e=>e.connect())))}stop(){this.started&&(this.started=!1,this.eventListeners.forEach((e=>e.disconnect())))}get eventListeners(){return Array.from(this.eventListenerMaps.values()).reduce(((e,t)=>e.concat(Array.from(t.values()))),[])}bindingConnected(e){this.fetchEventListenerForBinding(e).bindingConnected(e)}bindingDisconnected(e,t=!1){this.fetchEventListenerForBinding(e).bindingDisconnected(e),t&&this.clearEventListenersForBinding(e)}handleError(e,t,n={}){this.application.handleError(e,`Error ${t}`,n)}clearEventListenersForBinding(e){const t=this.fetchEventListenerForBinding(e);t.hasBindings()||(t.disconnect(),this.removeMappedEventListenerFor(e))}removeMappedEventListenerFor(e){const{eventTarget:t,eventName:n,eventOptions:i}=e,s=this.fetchEventListenerMapForEventTarget(t),r=this.cacheKey(n,i);s.delete(r),0==s.size&&this.eventListenerMaps.delete(t)}fetchEventListenerForBinding(e){const{eventTarget:t,eventName:n,eventOptions:i}=e;return this.fetchEventListener(t,n,i)}fetchEventListener(e,t,n){const i=this.fetchEventListenerMapForEventTarget(e),s=this.cacheKey(t,n);let r=i.get(s);return r||(r=this.createEventListener(e,t,n),i.set(s,r)),r}createEventListener(e,t,i){const s=new n(e,t,i);return this.started&&s.connect(),s}fetchEventListenerMapForEventTarget(e){let t=this.eventListenerMaps.get(e);return t||(t=new Map,this.eventListenerMaps.set(e,t)),t}cacheKey(e,t){const n=[e];return Object.keys(t).sort().forEach((e=>{n.push(`${t[e]?"":"!"}${e}`)})),n.join(":")}}const s={stop:({event:e,value:t})=>(t&&e.stopPropagation(),!0),prevent:({event:e,value:t})=>(t&&e.preventDefault(),!0),self:({event:e,value:t,element:n})=>!t||n===e.target},r=/^(?:(?:([^.]+?)\+)?(.+?)(?:\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;function o(e){return e.replace(/(?:[_-])([a-z0-9])/g,((e,t)=>t.toUpperCase()))}function a(e){return o(e.replace(/--/g,"-").replace(/__/g,"_"))}function l(e){return e.charAt(0).toUpperCase()+e.slice(1)}function c(e){return e.replace(/([A-Z])/g,((e,t)=>`-${t.toLowerCase()}`))}function h(e){return null!=e}function d(e,t){return Object.prototype.hasOwnProperty.call(e,t)}const u=["meta","ctrl","alt","shift"];class p{constructor(e,t,n,i){this.element=e,this.index=t,this.eventTarget=n.eventTarget||e,this.eventName=n.eventName||function(e){const t=e.tagName.toLowerCase();if(t in m)return m[t](e)}(e)||f("missing event name"),this.eventOptions=n.eventOptions||{},this.identifier=n.identifier||f("missing identifier"),this.methodName=n.methodName||f("missing method name"),this.keyFilter=n.keyFilter||"",this.schema=i}static forToken(e,t){return new this(e.element,e.index,function(e){const t=e.trim().match(r)||[];let n=t[2],i=t[3];return i&&!["keydown","keyup","keypress"].includes(n)&&(n+=`.${i}`,i=""),{eventTarget:(s=t[4],"window"==s?window:"document"==s?document:void 0),eventName:n,eventOptions:t[7]?(o=t[7],o.split(":").reduce(((e,t)=>Object.assign(e,{[t.replace(/^!/,"")]:!/^!/.test(t)})),{})):{},identifier:t[5],methodName:t[6],keyFilter:t[1]||i};var s,o}(e.content),t)}toString(){const e=this.keyFilter?`.${this.keyFilter}`:"",t=this.eventTargetName?`@${this.eventTargetName}`:"";return`${this.eventName}${e}${t}->${this.identifier}#${this.methodName}`}shouldIgnoreKeyboardEvent(e){if(!this.keyFilter)return!1;const t=this.keyFilter.split("+");if(this.keyFilterDissatisfied(e,t))return!0;const n=t.filter((e=>!u.includes(e)))[0];return!!n&&(d(this.keyMappings,n)||f(`contains unknown key filter: ${this.keyFilter}`),this.keyMappings[n].toLowerCase()!==e.key.toLowerCase())}shouldIgnoreMouseEvent(e){if(!this.keyFilter)return!1;const t=[this.keyFilter];return!!this.keyFilterDissatisfied(e,t)}get params(){const e={},t=new RegExp(`^data-${this.identifier}-(.+)-param$`,"i");for(const{name:n,value:i}of Array.from(this.element.attributes)){const s=n.match(t),r=s&&s[1];r&&(e[o(r)]=g(i))}return e}get eventTargetName(){return(e=this.eventTarget)==window?"window":e==document?"document":void 0;var e}get keyMappings(){return this.schema.keyMappings}keyFilterDissatisfied(e,t){const[n,i,s,r]=u.map((e=>t.includes(e)));return e.metaKey!==n||e.ctrlKey!==i||e.altKey!==s||e.shiftKey!==r}}const m={a:()=>"click",button:()=>"click",form:()=>"submit",details:()=>"toggle",input:e=>"submit"==e.getAttribute("type")?"click":"input",select:()=>"change",textarea:()=>"input"};function f(e){throw new Error(e)}function g(e){try{return JSON.parse(e)}catch(t){return e}}class v{constructor(e,t){this.context=e,this.action=t}get index(){return this.action.index}get eventTarget(){return this.action.eventTarget}get eventOptions(){return this.action.eventOptions}get identifier(){return this.context.identifier}handleEvent(e){const t=this.prepareActionEvent(e);this.willBeInvokedByEvent(e)&&this.applyEventModifiers(t)&&this.invokeWithEvent(t)}get eventName(){return this.action.eventName}get method(){const e=this.controller[this.methodName];if("function"==typeof e)return e;throw new Error(`Action "${this.action}" references undefined method "${this.methodName}"`)}applyEventModifiers(e){const{element:t}=this.action,{actionDescriptorFilters:n}=this.context.application,{controller:i}=this.context;let s=!0;for(const[r,o]of Object.entries(this.eventOptions))if(r in n){const a=n[r];s=s&&a({name:r,value:o,event:e,element:t,controller:i})}return s}prepareActionEvent(e){return Object.assign(e,{params:this.action.params})}invokeWithEvent(e){const{target:t,currentTarget:n}=e;try{this.method.call(this.controller,e),this.context.logDebugActivity(this.methodName,{event:e,target:t,currentTarget:n,action:this.methodName})}catch(t){const{identifier:n,controller:i,element:s,index:r}=this,o={identifier:n,controller:i,element:s,index:r,event:e};this.context.handleError(t,`invoking action "${this.action}"`,o)}}willBeInvokedByEvent(e){const t=e.target;return!(e instanceof KeyboardEvent&&this.action.shouldIgnoreKeyboardEvent(e))&&!(e instanceof MouseEvent&&this.action.shouldIgnoreMouseEvent(e))&&(this.element===t||(t instanceof Element&&this.element.contains(t)?this.scope.containsElement(t):this.scope.containsElement(this.action.element)))}get controller(){return this.context.controller}get methodName(){return this.action.methodName}get element(){return this.scope.element}get scope(){return this.context.scope}}class b{constructor(e,t){this.mutationObserverInit={attributes:!0,childList:!0,subtree:!0},this.element=e,this.started=!1,this.delegate=t,this.elements=new Set,this.mutationObserver=new MutationObserver((e=>this.processMutations(e)))}start(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,this.mutationObserverInit),this.refresh())}pause(e){this.started&&(this.mutationObserver.disconnect(),this.started=!1),e(),this.started||(this.mutationObserver.observe(this.element,this.mutationObserverInit),this.started=!0)}stop(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)}refresh(){if(this.started){const e=new Set(this.matchElementsInTree());for(const t of Array.from(this.elements))e.has(t)||this.removeElement(t);for(const t of Array.from(e))this.addElement(t)}}processMutations(e){if(this.started)for(const t of e)this.processMutation(t)}processMutation(e){"attributes"==e.type?this.processAttributeChange(e.target,e.attributeName):"childList"==e.type&&(this.processRemovedNodes(e.removedNodes),this.processAddedNodes(e.addedNodes))}processAttributeChange(e,t){this.elements.has(e)?this.delegate.elementAttributeChanged&&this.matchElement(e)?this.delegate.elementAttributeChanged(e,t):this.removeElement(e):this.matchElement(e)&&this.addElement(e)}processRemovedNodes(e){for(const t of Array.from(e)){const e=this.elementFromNode(t);e&&this.processTree(e,this.removeElement)}}processAddedNodes(e){for(const t of Array.from(e)){const e=this.elementFromNode(t);e&&this.elementIsActive(e)&&this.processTree(e,this.addElement)}}matchElement(e){return this.delegate.matchElement(e)}matchElementsInTree(e=this.element){return this.delegate.matchElementsInTree(e)}processTree(e,t){for(const n of this.matchElementsInTree(e))t.call(this,n)}elementFromNode(e){if(e.nodeType==Node.ELEMENT_NODE)return e}elementIsActive(e){return e.isConnected==this.element.isConnected&&this.element.contains(e)}addElement(e){this.elements.has(e)||this.elementIsActive(e)&&(this.elements.add(e),this.delegate.elementMatched&&this.delegate.elementMatched(e))}removeElement(e){this.elements.has(e)&&(this.elements.delete(e),this.delegate.elementUnmatched&&this.delegate.elementUnmatched(e))}}class y{constructor(e,t,n){this.attributeName=t,this.delegate=n,this.elementObserver=new b(e,this)}get element(){return this.elementObserver.element}get selector(){return`[${this.attributeName}]`}start(){this.elementObserver.start()}pause(e){this.elementObserver.pause(e)}stop(){this.elementObserver.stop()}refresh(){this.elementObserver.refresh()}get started(){return this.elementObserver.started}matchElement(e){return e.hasAttribute(this.attributeName)}matchElementsInTree(e){const t=this.matchElement(e)?[e]:[],n=Array.from(e.querySelectorAll(this.selector));return t.concat(n)}elementMatched(e){this.delegate.elementMatchedAttribute&&this.delegate.elementMatchedAttribute(e,this.attributeName)}elementUnmatched(e){this.delegate.elementUnmatchedAttribute&&this.delegate.elementUnmatchedAttribute(e,this.attributeName)}elementAttributeChanged(e,t){this.delegate.elementAttributeValueChanged&&this.attributeName==t&&this.delegate.elementAttributeValueChanged(e,t)}}function E(e,t){let n=e.get(t);return n||(n=new Set,e.set(t,n)),n}class w{constructor(){this.valuesByKey=new Map}get keys(){return Array.from(this.valuesByKey.keys())}get values(){return Array.from(this.valuesByKey.values()).reduce(((e,t)=>e.concat(Array.from(t))),[])}get size(){return Array.from(this.valuesByKey.values()).reduce(((e,t)=>e+t.size),0)}add(e,t){!function(e,t,n){E(e,t).add(n)}(this.valuesByKey,e,t)}delete(e,t){!function(e,t,n){E(e,t).delete(n),function(e,t){const n=e.get(t);null!=n&&0==n.size&&e.delete(t)}(e,t)}(this.valuesByKey,e,t)}has(e,t){const n=this.valuesByKey.get(e);return null!=n&&n.has(t)}hasKey(e){return this.valuesByKey.has(e)}hasValue(e){return Array.from(this.valuesByKey.values()).some((t=>t.has(e)))}getValuesForKey(e){const t=this.valuesByKey.get(e);return t?Array.from(t):[]}getKeysForValue(e){return Array.from(this.valuesByKey).filter((([t,n])=>n.has(e))).map((([e,t])=>e))}}class O{constructor(e,t,n,i){this._selector=t,this.details=i,this.elementObserver=new b(e,this),this.delegate=n,this.matchesByElement=new w}get started(){return this.elementObserver.started}get selector(){return this._selector}set selector(e){this._selector=e,this.refresh()}start(){this.elementObserver.start()}pause(e){this.elementObserver.pause(e)}stop(){this.elementObserver.stop()}refresh(){this.elementObserver.refresh()}get element(){return this.elementObserver.element}matchElement(e){const{selector:t}=this;if(t){const n=e.matches(t);return this.delegate.selectorMatchElement?n&&this.delegate.selectorMatchElement(e,this.details):n}return!1}matchElementsInTree(e){const{selector:t}=this;if(t){const n=this.matchElement(e)?[e]:[],i=Array.from(e.querySelectorAll(t)).filter((e=>this.matchElement(e)));return n.concat(i)}return[]}elementMatched(e){const{selector:t}=this;t&&this.selectorMatched(e,t)}elementUnmatched(e){const t=this.matchesByElement.getKeysForValue(e);for(const n of t)this.selectorUnmatched(e,n)}elementAttributeChanged(e,t){const{selector:n}=this;if(n){const t=this.matchElement(e),i=this.matchesByElement.has(n,e);t&&!i?this.selectorMatched(e,n):!t&&i&&this.selectorUnmatched(e,n)}}selectorMatched(e,t){this.delegate.selectorMatched(e,t,this.details),this.matchesByElement.add(t,e)}selectorUnmatched(e,t){this.delegate.selectorUnmatched(e,t,this.details),this.matchesByElement.delete(t,e)}}class A{constructor(e,t){this.element=e,this.delegate=t,this.started=!1,this.stringMap=new Map,this.mutationObserver=new MutationObserver((e=>this.processMutations(e)))}start(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0,attributeOldValue:!0}),this.refresh())}stop(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)}refresh(){if(this.started)for(const e of this.knownAttributeNames)this.refreshAttribute(e,null)}processMutations(e){if(this.started)for(const t of e)this.processMutation(t)}processMutation(e){const t=e.attributeName;t&&this.refreshAttribute(t,e.oldValue)}refreshAttribute(e,t){const n=this.delegate.getStringMapKeyForAttribute(e);if(null!=n){this.stringMap.has(e)||this.stringMapKeyAdded(n,e);const i=this.element.getAttribute(e);if(this.stringMap.get(e)!=i&&this.stringMapValueChanged(i,n,t),null==i){const t=this.stringMap.get(e);this.stringMap.delete(e),t&&this.stringMapKeyRemoved(n,e,t)}else this.stringMap.set(e,i)}}stringMapKeyAdded(e,t){this.delegate.stringMapKeyAdded&&this.delegate.stringMapKeyAdded(e,t)}stringMapValueChanged(e,t,n){this.delegate.stringMapValueChanged&&this.delegate.stringMapValueChanged(e,t,n)}stringMapKeyRemoved(e,t,n){this.delegate.stringMapKeyRemoved&&this.delegate.stringMapKeyRemoved(e,t,n)}get knownAttributeNames(){return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)))}get currentAttributeNames(){return Array.from(this.element.attributes).map((e=>e.name))}get recordedAttributeNames(){return Array.from(this.stringMap.keys())}}class T{constructor(e,t,n){this.attributeObserver=new y(e,t,this),this.delegate=n,this.tokensByElement=new w}get started(){return this.attributeObserver.started}start(){this.attributeObserver.start()}pause(e){this.attributeObserver.pause(e)}stop(){this.attributeObserver.stop()}refresh(){this.attributeObserver.refresh()}get element(){return this.attributeObserver.element}get attributeName(){return this.attributeObserver.attributeName}elementMatchedAttribute(e){this.tokensMatched(this.readTokensForElement(e))}elementAttributeValueChanged(e){const[t,n]=this.refreshTokensForElement(e);this.tokensUnmatched(t),this.tokensMatched(n)}elementUnmatchedAttribute(e){this.tokensUnmatched(this.tokensByElement.getValuesForKey(e))}tokensMatched(e){e.forEach((e=>this.tokenMatched(e)))}tokensUnmatched(e){e.forEach((e=>this.tokenUnmatched(e)))}tokenMatched(e){this.delegate.tokenMatched(e),this.tokensByElement.add(e.element,e)}tokenUnmatched(e){this.delegate.tokenUnmatched(e),this.tokensByElement.delete(e.element,e)}refreshTokensForElement(e){const t=this.tokensByElement.getValuesForKey(e),n=this.readTokensForElement(e),i=function(e,t){const n=Math.max(e.length,t.length);return Array.from({length:n},((n,i)=>[e[i],t[i]]))}(t,n).findIndex((([e,t])=>!function(e,t){return e&&t&&e.index==t.index&&e.content==t.content}(e,t)));return-1==i?[[],[]]:[t.slice(i),n.slice(i)]}readTokensForElement(e){const t=this.attributeName;return function(e,t,n){return e.trim().split(/\s+/).filter((e=>e.length)).map(((e,i)=>({element:t,attributeName:n,content:e,index:i})))}(e.getAttribute(t)||"",e,t)}}class x{constructor(e,t,n){this.tokenListObserver=new T(e,t,this),this.delegate=n,this.parseResultsByToken=new WeakMap,this.valuesByTokenByElement=new WeakMap}get started(){return this.tokenListObserver.started}start(){this.tokenListObserver.start()}stop(){this.tokenListObserver.stop()}refresh(){this.tokenListObserver.refresh()}get element(){return this.tokenListObserver.element}get attributeName(){return this.tokenListObserver.attributeName}tokenMatched(e){const{element:t}=e,{value:n}=this.fetchParseResultForToken(e);n&&(this.fetchValuesByTokenForElement(t).set(e,n),this.delegate.elementMatchedValue(t,n))}tokenUnmatched(e){const{element:t}=e,{value:n}=this.fetchParseResultForToken(e);n&&(this.fetchValuesByTokenForElement(t).delete(e),this.delegate.elementUnmatchedValue(t,n))}fetchParseResultForToken(e){let t=this.parseResultsByToken.get(e);return t||(t=this.parseToken(e),this.parseResultsByToken.set(e,t)),t}fetchValuesByTokenForElement(e){let t=this.valuesByTokenByElement.get(e);return t||(t=new Map,this.valuesByTokenByElement.set(e,t)),t}parseToken(e){try{return{value:this.delegate.parseValueForToken(e)}}catch(e){return{error:e}}}}class k{constructor(e,t){this.context=e,this.delegate=t,this.bindingsByAction=new Map}start(){this.valueListObserver||(this.valueListObserver=new x(this.element,this.actionAttribute,this),this.valueListObserver.start())}stop(){this.valueListObserver&&(this.valueListObserver.stop(),delete this.valueListObserver,this.disconnectAllActions())}get element(){return this.context.element}get identifier(){return this.context.identifier}get actionAttribute(){return this.schema.actionAttribute}get schema(){return this.context.schema}get bindings(){return Array.from(this.bindingsByAction.values())}connectAction(e){const t=new v(this.context,e);this.bindingsByAction.set(e,t),this.delegate.bindingConnected(t)}disconnectAction(e){const t=this.bindingsByAction.get(e);t&&(this.bindingsByAction.delete(e),this.delegate.bindingDisconnected(t))}disconnectAllActions(){this.bindings.forEach((e=>this.delegate.bindingDisconnected(e,!0))),this.bindingsByAction.clear()}parseValueForToken(e){const t=p.forToken(e,this.schema);if(t.identifier==this.identifier)return t}elementMatchedValue(e,t){this.connectAction(t)}elementUnmatchedValue(e,t){this.disconnectAction(t)}}class C{constructor(e,t){this.context=e,this.receiver=t,this.stringMapObserver=new A(this.element,this),this.valueDescriptorMap=this.controller.valueDescriptorMap}start(){this.stringMapObserver.start(),this.invokeChangedCallbacksForDefaultValues()}stop(){this.stringMapObserver.stop()}get element(){return this.context.element}get controller(){return this.context.controller}getStringMapKeyForAttribute(e){if(e in this.valueDescriptorMap)return this.valueDescriptorMap[e].name}stringMapKeyAdded(e,t){const n=this.valueDescriptorMap[t];this.hasValue(e)||this.invokeChangedCallback(e,n.writer(this.receiver[e]),n.writer(n.defaultValue))}stringMapValueChanged(e,t,n){const i=this.valueDescriptorNameMap[t];null!==e&&(null===n&&(n=i.writer(i.defaultValue)),this.invokeChangedCallback(t,e,n))}stringMapKeyRemoved(e,t,n){const i=this.valueDescriptorNameMap[e];this.hasValue(e)?this.invokeChangedCallback(e,i.writer(this.receiver[e]),n):this.invokeChangedCallback(e,i.writer(i.defaultValue),n)}invokeChangedCallbacksForDefaultValues(){for(const{key:e,name:t,defaultValue:n,writer:i}of this.valueDescriptors)null==n||this.controller.data.has(e)||this.invokeChangedCallback(t,i(n),void 0)}invokeChangedCallback(e,t,n){const i=`${e}Changed`,s=this.receiver[i];if("function"==typeof s){const i=this.valueDescriptorNameMap[e];try{const e=i.reader(t);let r=n;n&&(r=i.reader(n)),s.call(this.receiver,e,r)}catch(e){throw e instanceof TypeError&&(e.message=`Stimulus Value "${this.context.identifier}.${i.name}" - ${e.message}`),e}}}get valueDescriptors(){const{valueDescriptorMap:e}=this;return Object.keys(e).map((t=>e[t]))}get valueDescriptorNameMap(){const e={};return Object.keys(this.valueDescriptorMap).forEach((t=>{const n=this.valueDescriptorMap[t];e[n.name]=n})),e}hasValue(e){const t=`has${l(this.valueDescriptorNameMap[e].name)}`;return this.receiver[t]}}class M{constructor(e,t){this.context=e,this.delegate=t,this.targetsByName=new w}start(){this.tokenListObserver||(this.tokenListObserver=new T(this.element,this.attributeName,this),this.tokenListObserver.start())}stop(){this.tokenListObserver&&(this.disconnectAllTargets(),this.tokenListObserver.stop(),delete this.tokenListObserver)}tokenMatched({element:e,content:t}){this.scope.containsElement(e)&&this.connectTarget(e,t)}tokenUnmatched({element:e,content:t}){this.disconnectTarget(e,t)}connectTarget(e,t){var n;this.targetsByName.has(t,e)||(this.targetsByName.add(t,e),null===(n=this.tokenListObserver)||void 0===n||n.pause((()=>this.delegate.targetConnected(e,t))))}disconnectTarget(e,t){var n;this.targetsByName.has(t,e)&&(this.targetsByName.delete(t,e),null===(n=this.tokenListObserver)||void 0===n||n.pause((()=>this.delegate.targetDisconnected(e,t))))}disconnectAllTargets(){for(const e of this.targetsByName.keys)for(const t of this.targetsByName.getValuesForKey(e))this.disconnectTarget(t,e)}get attributeName(){return`data-${this.context.identifier}-target`}get element(){return this.context.element}get scope(){return this.context.scope}}function L(e,t){const n=F(e);return Array.from(n.reduce(((e,n)=>(function(e,t){const n=e[t];return Array.isArray(n)?n:[]}(n,t).forEach((t=>e.add(t))),e)),new Set))}function F(e){const t=[];for(;e;)t.push(e),e=Object.getPrototypeOf(e);return t.reverse()}class S{constructor(e,t){this.started=!1,this.context=e,this.delegate=t,this.outletsByName=new w,this.outletElementsByName=new w,this.selectorObserverMap=new Map,this.attributeObserverMap=new Map}start(){this.started||(this.outletDefinitions.forEach((e=>{this.setupSelectorObserverForOutlet(e),this.setupAttributeObserverForOutlet(e)})),this.started=!0,this.dependentContexts.forEach((e=>e.refresh())))}refresh(){this.selectorObserverMap.forEach((e=>e.refresh())),this.attributeObserverMap.forEach((e=>e.refresh()))}stop(){this.started&&(this.started=!1,this.disconnectAllOutlets(),this.stopSelectorObservers(),this.stopAttributeObservers())}stopSelectorObservers(){this.selectorObserverMap.size>0&&(this.selectorObserverMap.forEach((e=>e.stop())),this.selectorObserverMap.clear())}stopAttributeObservers(){this.attributeObserverMap.size>0&&(this.attributeObserverMap.forEach((e=>e.stop())),this.attributeObserverMap.clear())}selectorMatched(e,t,{outletName:n}){const i=this.getOutlet(e,n);i&&this.connectOutlet(i,e,n)}selectorUnmatched(e,t,{outletName:n}){const i=this.getOutletFromMap(e,n);i&&this.disconnectOutlet(i,e,n)}selectorMatchElement(e,{outletName:t}){const n=this.selector(t),i=this.hasOutlet(e,t),s=e.matches(`[${this.schema.controllerAttribute}~=${t}]`);return!!n&&i&&s&&e.matches(n)}elementMatchedAttribute(e,t){const n=this.getOutletNameFromOutletAttributeName(t);n&&this.updateSelectorObserverForOutlet(n)}elementAttributeValueChanged(e,t){const n=this.getOutletNameFromOutletAttributeName(t);n&&this.updateSelectorObserverForOutlet(n)}elementUnmatchedAttribute(e,t){const n=this.getOutletNameFromOutletAttributeName(t);n&&this.updateSelectorObserverForOutlet(n)}connectOutlet(e,t,n){var i;this.outletElementsByName.has(n,t)||(this.outletsByName.add(n,e),this.outletElementsByName.add(n,t),null===(i=this.selectorObserverMap.get(n))||void 0===i||i.pause((()=>this.delegate.outletConnected(e,t,n))))}disconnectOutlet(e,t,n){var i;this.outletElementsByName.has(n,t)&&(this.outletsByName.delete(n,e),this.outletElementsByName.delete(n,t),null===(i=this.selectorObserverMap.get(n))||void 0===i||i.pause((()=>this.delegate.outletDisconnected(e,t,n))))}disconnectAllOutlets(){for(const e of this.outletElementsByName.keys)for(const t of this.outletElementsByName.getValuesForKey(e))for(const n of this.outletsByName.getValuesForKey(e))this.disconnectOutlet(n,t,e)}updateSelectorObserverForOutlet(e){const t=this.selectorObserverMap.get(e);t&&(t.selector=this.selector(e))}setupSelectorObserverForOutlet(e){const t=this.selector(e),n=new O(document.body,t,this,{outletName:e});this.selectorObserverMap.set(e,n),n.start()}setupAttributeObserverForOutlet(e){const t=this.attributeNameForOutletName(e),n=new y(this.scope.element,t,this);this.attributeObserverMap.set(e,n),n.start()}selector(e){return this.scope.outlets.getSelectorForOutletName(e)}attributeNameForOutletName(e){return this.scope.schema.outletAttributeForScope(this.identifier,e)}getOutletNameFromOutletAttributeName(e){return this.outletDefinitions.find((t=>this.attributeNameForOutletName(t)===e))}get outletDependencies(){const e=new w;return this.router.modules.forEach((t=>{L(t.definition.controllerConstructor,"outlets").forEach((n=>e.add(n,t.identifier)))})),e}get outletDefinitions(){return this.outletDependencies.getKeysForValue(this.identifier)}get dependentControllerIdentifiers(){return this.outletDependencies.getValuesForKey(this.identifier)}get dependentContexts(){const e=this.dependentControllerIdentifiers;return this.router.contexts.filter((t=>e.includes(t.identifier)))}hasOutlet(e,t){return!!this.getOutlet(e,t)||!!this.getOutletFromMap(e,t)}getOutlet(e,t){return this.application.getControllerForElementAndIdentifier(e,t)}getOutletFromMap(e,t){return this.outletsByName.getValuesForKey(t).find((t=>t.element===e))}get scope(){return this.context.scope}get schema(){return this.context.schema}get identifier(){return this.context.identifier}get application(){return this.context.application}get router(){return this.application.router}}class D{constructor(e,t){this.logDebugActivity=(e,t={})=>{const{identifier:n,controller:i,element:s}=this;t=Object.assign({identifier:n,controller:i,element:s},t),this.application.logDebugActivity(this.identifier,e,t)},this.module=e,this.scope=t,this.controller=new e.controllerConstructor(this),this.bindingObserver=new k(this,this.dispatcher),this.valueObserver=new C(this,this.controller),this.targetObserver=new M(this,this),this.outletObserver=new S(this,this);try{this.controller.initialize(),this.logDebugActivity("initialize")}catch(e){this.handleError(e,"initializing controller")}}connect(){this.bindingObserver.start(),this.valueObserver.start(),this.targetObserver.start(),this.outletObserver.start();try{this.controller.connect(),this.logDebugActivity("connect")}catch(e){this.handleError(e,"connecting controller")}}refresh(){this.outletObserver.refresh()}disconnect(){try{this.controller.disconnect(),this.logDebugActivity("disconnect")}catch(e){this.handleError(e,"disconnecting controller")}this.outletObserver.stop(),this.targetObserver.stop(),this.valueObserver.stop(),this.bindingObserver.stop()}get application(){return this.module.application}get identifier(){return this.module.identifier}get schema(){return this.application.schema}get dispatcher(){return this.application.dispatcher}get element(){return this.scope.element}get parentElement(){return this.element.parentElement}handleError(e,t,n={}){const{identifier:i,controller:s,element:r}=this;n=Object.assign({identifier:i,controller:s,element:r},n),this.application.handleError(e,`Error ${t}`,n)}targetConnected(e,t){this.invokeControllerMethod(`${t}TargetConnected`,e)}targetDisconnected(e,t){this.invokeControllerMethod(`${t}TargetDisconnected`,e)}outletConnected(e,t,n){this.invokeControllerMethod(`${a(n)}OutletConnected`,e,t)}outletDisconnected(e,t,n){this.invokeControllerMethod(`${a(n)}OutletDisconnected`,e,t)}invokeControllerMethod(e,...t){const n=this.controller;"function"==typeof n[e]&&n[e](...t)}}const N="function"==typeof Object.getOwnPropertySymbols?e=>[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)]:Object.getOwnPropertyNames,B=(()=>{function e(e){function t(){return Reflect.construct(e,arguments,new.target)}return t.prototype=Object.create(e.prototype,{constructor:{value:t}}),Reflect.setPrototypeOf(t,e),t}try{return function(){const t=e((function(){this.a.call(this)}));t.prototype.a=function(){},new t}(),e}catch(e){return e=>class extends e{}}})();class I{constructor(e,t){this.application=e,this.definition=function(e){return{identifier:e.identifier,controllerConstructor:(t=e.controllerConstructor,function(e,t){const n=B(e),i=function(e,t){return N(t).reduce(((n,i)=>{const s=function(e,t,n){const i=Object.getOwnPropertyDescriptor(e,n);if(!i||!("value"in i)){const e=Object.getOwnPropertyDescriptor(t,n).value;return i&&(e.get=i.get||e.get,e.set=i.set||e.set),e}}(e,t,i);return s&&Object.assign(n,{[i]:s}),n}),{})}(e.prototype,t);return Object.defineProperties(n.prototype,i),n}(t,function(e){return L(e,"blessings").reduce(((t,n)=>{const i=n(e);for(const e in i){const n=t[e]||{};t[e]=Object.assign(n,i[e])}return t}),{})}(t)))};var t}(t),this.contextsByScope=new WeakMap,this.connectedContexts=new Set}get identifier(){return this.definition.identifier}get controllerConstructor(){return this.definition.controllerConstructor}get contexts(){return Array.from(this.connectedContexts)}connectContextForScope(e){const t=this.fetchContextForScope(e);this.connectedContexts.add(t),t.connect()}disconnectContextForScope(e){const t=this.contextsByScope.get(e);t&&(this.connectedContexts.delete(t),t.disconnect())}fetchContextForScope(e){let t=this.contextsByScope.get(e);return t||(t=new D(this,e),this.contextsByScope.set(e,t)),t}}class ${constructor(e){this.scope=e}has(e){return this.data.has(this.getDataKey(e))}get(e){return this.getAll(e)[0]}getAll(e){return(this.data.get(this.getDataKey(e))||"").match(/[^\s]+/g)||[]}getAttributeName(e){return this.data.getAttributeNameForKey(this.getDataKey(e))}getDataKey(e){return`${e}-class`}get data(){return this.scope.data}}class j{constructor(e){this.scope=e}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get(e){const t=this.getAttributeNameForKey(e);return this.element.getAttribute(t)}set(e,t){const n=this.getAttributeNameForKey(e);return this.element.setAttribute(n,t),this.get(e)}has(e){const t=this.getAttributeNameForKey(e);return this.element.hasAttribute(t)}delete(e){if(this.has(e)){const t=this.getAttributeNameForKey(e);return this.element.removeAttribute(t),!0}return!1}getAttributeNameForKey(e){return`data-${this.identifier}-${c(e)}`}}class P{constructor(e){this.warnedKeysByObject=new WeakMap,this.logger=e}warn(e,t,n){let i=this.warnedKeysByObject.get(e);i||(i=new Set,this.warnedKeysByObject.set(e,i)),i.has(t)||(i.add(t),this.logger.warn(n,e))}}function V(e,t){return`[${e}~="${t}"]`}class K{constructor(e){this.scope=e}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get schema(){return this.scope.schema}has(e){return null!=this.find(e)}find(...e){return e.reduce(((e,t)=>e||this.findTarget(t)||this.findLegacyTarget(t)),void 0)}findAll(...e){return e.reduce(((e,t)=>[...e,...this.findAllTargets(t),...this.findAllLegacyTargets(t)]),[])}findTarget(e){const t=this.getSelectorForTargetName(e);return this.scope.findElement(t)}findAllTargets(e){const t=this.getSelectorForTargetName(e);return this.scope.findAllElements(t)}getSelectorForTargetName(e){return V(this.schema.targetAttributeForScope(this.identifier),e)}findLegacyTarget(e){const t=this.getLegacySelectorForTargetName(e);return this.deprecate(this.scope.findElement(t),e)}findAllLegacyTargets(e){const t=this.getLegacySelectorForTargetName(e);return this.scope.findAllElements(t).map((t=>this.deprecate(t,e)))}getLegacySelectorForTargetName(e){const t=`${this.identifier}.${e}`;return V(this.schema.targetAttribute,t)}deprecate(e,t){if(e){const{identifier:n}=this,i=this.schema.targetAttribute,s=this.schema.targetAttributeForScope(n);this.guide.warn(e,`target:${t}`,`Please replace ${i}="${n}.${t}" with ${s}="${t}". The ${i} attribute is deprecated and will be removed in a future version of Stimulus.`)}return e}get guide(){return this.scope.guide}}class _{constructor(e,t){this.scope=e,this.controllerElement=t}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get schema(){return this.scope.schema}has(e){return null!=this.find(e)}find(...e){return e.reduce(((e,t)=>e||this.findOutlet(t)),void 0)}findAll(...e){return e.reduce(((e,t)=>[...e,...this.findAllOutlets(t)]),[])}getSelectorForOutletName(e){const t=this.schema.outletAttributeForScope(this.identifier,e);return this.controllerElement.getAttribute(t)}findOutlet(e){const t=this.getSelectorForOutletName(e);if(t)return this.findElement(t,e)}findAllOutlets(e){const t=this.getSelectorForOutletName(e);return t?this.findAllElements(t,e):[]}findElement(e,t){return this.scope.queryElements(e).filter((n=>this.matchesElement(n,e,t)))[0]}findAllElements(e,t){return this.scope.queryElements(e).filter((n=>this.matchesElement(n,e,t)))}matchesElement(e,t,n){const i=e.getAttribute(this.scope.schema.controllerAttribute)||"";return e.matches(t)&&i.split(" ").includes(n)}}class H{constructor(e,t,n,i){this.targets=new K(this),this.classes=new $(this),this.data=new j(this),this.containsElement=e=>e.closest(this.controllerSelector)===this.element,this.schema=e,this.element=t,this.identifier=n,this.guide=new P(i),this.outlets=new _(this.documentScope,t)}findElement(e){return this.element.matches(e)?this.element:this.queryElements(e).find(this.containsElement)}findAllElements(e){return[...this.element.matches(e)?[this.element]:[],...this.queryElements(e).filter(this.containsElement)]}queryElements(e){return Array.from(this.element.querySelectorAll(e))}get controllerSelector(){return V(this.schema.controllerAttribute,this.identifier)}get isDocumentScope(){return this.element===document.documentElement}get documentScope(){return this.isDocumentScope?this:new H(this.schema,document.documentElement,this.identifier,this.guide.logger)}}class R{constructor(e,t,n){this.element=e,this.schema=t,this.delegate=n,this.valueListObserver=new x(this.element,this.controllerAttribute,this),this.scopesByIdentifierByElement=new WeakMap,this.scopeReferenceCounts=new WeakMap}start(){this.valueListObserver.start()}stop(){this.valueListObserver.stop()}get controllerAttribute(){return this.schema.controllerAttribute}parseValueForToken(e){const{element:t,content:n}=e;return this.parseValueForElementAndIdentifier(t,n)}parseValueForElementAndIdentifier(e,t){const n=this.fetchScopesByIdentifierForElement(e);let i=n.get(t);return i||(i=this.delegate.createScopeForElementAndIdentifier(e,t),n.set(t,i)),i}elementMatchedValue(e,t){const n=(this.scopeReferenceCounts.get(t)||0)+1;this.scopeReferenceCounts.set(t,n),1==n&&this.delegate.scopeConnected(t)}elementUnmatchedValue(e,t){const n=this.scopeReferenceCounts.get(t);n&&(this.scopeReferenceCounts.set(t,n-1),1==n&&this.delegate.scopeDisconnected(t))}fetchScopesByIdentifierForElement(e){let t=this.scopesByIdentifierByElement.get(e);return t||(t=new Map,this.scopesByIdentifierByElement.set(e,t)),t}}class U{constructor(e){this.application=e,this.scopeObserver=new R(this.element,this.schema,this),this.scopesByIdentifier=new w,this.modulesByIdentifier=new Map}get element(){return this.application.element}get schema(){return this.application.schema}get logger(){return this.application.logger}get controllerAttribute(){return this.schema.controllerAttribute}get modules(){return Array.from(this.modulesByIdentifier.values())}get contexts(){return this.modules.reduce(((e,t)=>e.concat(t.contexts)),[])}start(){this.scopeObserver.start()}stop(){this.scopeObserver.stop()}loadDefinition(e){this.unloadIdentifier(e.identifier);const t=new I(this.application,e);this.connectModule(t);const n=e.controllerConstructor.afterLoad;n&&n.call(e.controllerConstructor,e.identifier,this.application)}unloadIdentifier(e){const t=this.modulesByIdentifier.get(e);t&&this.disconnectModule(t)}getContextForElementAndIdentifier(e,t){const n=this.modulesByIdentifier.get(t);if(n)return n.contexts.find((t=>t.element==e))}proposeToConnectScopeForElementAndIdentifier(e,t){const n=this.scopeObserver.parseValueForElementAndIdentifier(e,t);n?this.scopeObserver.elementMatchedValue(n.element,n):console.error(`Couldn't find or create scope for identifier: "${t}" and element:`,e)}handleError(e,t,n){this.application.handleError(e,t,n)}createScopeForElementAndIdentifier(e,t){return new H(this.schema,e,t,this.logger)}scopeConnected(e){this.scopesByIdentifier.add(e.identifier,e);const t=this.modulesByIdentifier.get(e.identifier);t&&t.connectContextForScope(e)}scopeDisconnected(e){this.scopesByIdentifier.delete(e.identifier,e);const t=this.modulesByIdentifier.get(e.identifier);t&&t.disconnectContextForScope(e)}connectModule(e){this.modulesByIdentifier.set(e.identifier,e),this.scopesByIdentifier.getValuesForKey(e.identifier).forEach((t=>e.connectContextForScope(t)))}disconnectModule(e){this.modulesByIdentifier.delete(e.identifier),this.scopesByIdentifier.getValuesForKey(e.identifier).forEach((t=>e.disconnectContextForScope(t)))}}const W={controllerAttribute:"data-controller",actionAttribute:"data-action",targetAttribute:"data-target",targetAttributeForScope:e=>`data-${e}-target`,outletAttributeForScope:(e,t)=>`data-${e}-${t}-outlet`,keyMappings:Object.assign(Object.assign({enter:"Enter",tab:"Tab",esc:"Escape",space:" ",up:"ArrowUp",down:"ArrowDown",left:"ArrowLeft",right:"ArrowRight",home:"Home",end:"End",page_up:"PageUp",page_down:"PageDown"},q("abcdefghijklmnopqrstuvwxyz".split("").map((e=>[e,e])))),q("0123456789".split("").map((e=>[e,e]))))};function q(e){return e.reduce(((e,[t,n])=>Object.assign(Object.assign({},e),{[t]:n})),{})}class z{constructor(e=document.documentElement,t=W){this.logger=console,this.debug=!1,this.logDebugActivity=(e,t,n={})=>{this.debug&&this.logFormattedMessage(e,t,n)},this.element=e,this.schema=t,this.dispatcher=new i(this),this.router=new U(this),this.actionDescriptorFilters=Object.assign({},s)}static start(e,t){const n=new this(e,t);return n.start(),n}async start(){await new Promise((e=>{"loading"==document.readyState?document.addEventListener("DOMContentLoaded",(()=>e())):e()})),this.logDebugActivity("application","starting"),this.dispatcher.start(),this.router.start(),this.logDebugActivity("application","start")}stop(){this.logDebugActivity("application","stopping"),this.dispatcher.stop(),this.router.stop(),this.logDebugActivity("application","stop")}register(e,t){this.load({identifier:e,controllerConstructor:t})}registerActionOption(e,t){this.actionDescriptorFilters[e]=t}load(e,...t){(Array.isArray(e)?e:[e,...t]).forEach((e=>{e.controllerConstructor.shouldLoad&&this.router.loadDefinition(e)}))}unload(e,...t){(Array.isArray(e)?e:[e,...t]).forEach((e=>this.router.unloadIdentifier(e)))}get controllers(){return this.router.contexts.map((e=>e.controller))}getControllerForElementAndIdentifier(e,t){const n=this.router.getContextForElementAndIdentifier(e,t);return n?n.controller:null}handleError(e,t,n){var i;this.logger.error("%s\n\n%o\n\n%o",t,e,n),null===(i=window.onerror)||void 0===i||i.call(window,t,"",0,0,e)}logFormattedMessage(e,t,n={}){n=Object.assign({application:this},n),this.logger.groupCollapsed(`${e} #${t}`),this.logger.log("details:",Object.assign({},n)),this.logger.groupEnd()}}function J(e,t,n){return e.application.getControllerForElementAndIdentifier(t,n)}function X(e,t,n){let i=J(e,t,n);return i||(e.application.router.proposeToConnectScopeForElementAndIdentifier(t,n),i=J(e,t,n),i||void 0)}function Y([e,t],n){return function(e){const{token:t,typeDefinition:n}=e,i=`${c(t)}-value`,s=function(e){const{controller:t,token:n,typeDefinition:i}=e,s=function(e){const{controller:t,token:n,typeObject:i}=e,s=h(i.type),r=h(i.default),o=s&&r,a=s&&!r,l=!s&&r,c=Z(i.type),d=G(e.typeObject.default);if(a)return c;if(l)return d;if(c!==d)throw new Error(`The specified default value for the Stimulus Value "${t?`${t}.${n}`:n}" must match the defined type "${c}". The provided default value of "${i.default}" is of type "${d}".`);return o?c:void 0}({controller:t,token:n,typeObject:i}),r=G(i),o=Z(i),a=s||r||o;if(a)return a;throw new Error(`Unknown value type "${t?`${t}.${i}`:n}" for "${n}" value`)}(e);return{type:s,key:i,name:o(i),get defaultValue(){return function(e){const t=Z(e);if(t)return Q[t];const n=d(e,"default"),i=d(e,"type"),s=e;if(n)return s.default;if(i){const{type:e}=s,t=Z(e);if(t)return Q[t]}return e}(n)},get hasCustomDefaultValue(){return void 0!==G(n)},reader:ee[s],writer:te[s]||te.default}}({controller:n,token:e,typeDefinition:t})}function Z(e){switch(e){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function G(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}return Array.isArray(e)?"array":"[object Object]"===Object.prototype.toString.call(e)?"object":void 0}const Q={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},ee={array(e){const t=JSON.parse(e);if(!Array.isArray(t))throw new TypeError(`expected value of type "array" but instead got value "${e}" of type "${G(t)}"`);return t},boolean:e=>!("0"==e||"false"==String(e).toLowerCase()),number:e=>Number(e.replace(/_/g,"")),object(e){const t=JSON.parse(e);if(null===t||"object"!=typeof t||Array.isArray(t))throw new TypeError(`expected value of type "object" but instead got value "${e}" of type "${G(t)}"`);return t},string:e=>e},te={default:function(e){return`${e}`},array:ne,object:ne};function ne(e){return JSON.stringify(e)}class ie{constructor(e){this.context=e}static get shouldLoad(){return!0}static afterLoad(e,t){}get application(){return this.context.application}get scope(){return this.context.scope}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get targets(){return this.scope.targets}get outlets(){return this.scope.outlets}get classes(){return this.scope.classes}get data(){return this.scope.data}initialize(){}connect(){}disconnect(){}dispatch(e,{target:t=this.element,detail:n={},prefix:i=this.identifier,bubbles:s=!0,cancelable:r=!0}={}){const o=new CustomEvent(i?`${i}:${e}`:e,{detail:n,bubbles:s,cancelable:r});return t.dispatchEvent(o),o}}ie.blessings=[function(e){return L(e,"classes").reduce(((e,t)=>{return Object.assign(e,{[`${n=t}Class`]:{get(){const{classes:e}=this;if(e.has(n))return e.get(n);{const t=e.getAttributeName(n);throw new Error(`Missing attribute "${t}"`)}}},[`${n}Classes`]:{get(){return this.classes.getAll(n)}},[`has${l(n)}Class`]:{get(){return this.classes.has(n)}}});var n}),{})},function(e){return L(e,"targets").reduce(((e,t)=>{return Object.assign(e,{[`${n=t}Target`]:{get(){const e=this.targets.find(n);if(e)return e;throw new Error(`Missing target element "${n}" for "${this.identifier}" controller`)}},[`${n}Targets`]:{get(){return this.targets.findAll(n)}},[`has${l(n)}Target`]:{get(){return this.targets.has(n)}}});var n}),{})},function(e){const t=function(e,t){return F(e).reduce(((e,n)=>(e.push(...function(e,t){const n=e[t];return n?Object.keys(n).map((e=>[e,n[e]])):[]}(n,t)),e)),[])}(e,"values"),n={valueDescriptorMap:{get(){return t.reduce(((e,t)=>{const n=Y(t,this.identifier),i=this.data.getAttributeNameForKey(n.key);return Object.assign(e,{[i]:n})}),{})}}};return t.reduce(((e,t)=>Object.assign(e,function(e,t){const n=Y(e,void 0),{key:i,name:s,reader:r,writer:o}=n;return{[s]:{get(){const e=this.data.get(i);return null!==e?r(e):n.defaultValue},set(e){void 0===e?this.data.delete(i):this.data.set(i,o(e))}},[`has${l(s)}`]:{get(){return this.data.has(i)||n.hasCustomDefaultValue}}}}(t))),n)},function(e){return L(e,"outlets").reduce(((e,t)=>Object.assign(e,function(e){const t=a(e);return{[`${t}Outlet`]:{get(){const t=this.outlets.find(e),n=this.outlets.getSelectorForOutletName(e);if(t){const n=X(this,t,e);if(n)return n;throw new Error(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`)}throw new Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${n}".`)}},[`${t}Outlets`]:{get(){const t=this.outlets.findAll(e);return t.length>0?t.map((t=>{const n=X(this,t,e);if(n)return n;console.warn(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`,t)})).filter((e=>e)):[]}},[`${t}OutletElement`]:{get(){const t=this.outlets.find(e),n=this.outlets.getSelectorForOutletName(e);if(t)return t;throw new Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${n}".`)}},[`${t}OutletElements`]:{get(){return this.outlets.findAll(e)}},[`has${l(t)}Outlet`]:{get(){return this.outlets.has(e)}}}}(t))),{})}],ie.targets=[],ie.outlets=[],ie.values={};class se extends z{load(e,...t){const n=Array.isArray(e)?e:[e,...t];for(const e of n){const t=/^s-/.test(e.identifier);if(se._initializing&&!t)throw'Stacks-created Stimulus controller names must start with "s-".';if(!se._initializing&&t)throw'The "s-" prefix on Stimulus controller names is reserved for Stacks-created controllers.'}super.load(n)}static start(e,t){const n=new se(e,t);return n.start(),n}static finalize(){se._initializing=!1}}se._initializing=!0;const re=se.start();class oe extends ie{getElementData(e,t){return e.getAttribute("data-"+this.identifier+"-"+t)}setElementData(e,t,n){e.setAttribute("data-"+this.identifier+"-"+t,n)}removeElementData(e,t){e.removeAttribute("data-"+this.identifier+"-"+t)}triggerEvent(e,t,n){const i=this.identifier+":"+e;let s;try{s=new CustomEvent(i,{bubbles:!0,cancelable:!0,detail:t})}catch(e){s=document.createEvent("CustomEvent"),s.initCustomEvent(i,!0,!0,t)}return(n||this.element).dispatchEvent(s),s}}function ae(e){var t,n;const i=e.hasOwnProperty("targets")?((n=class extends oe{}).targets=null!==(t=e.targets)&&void 0!==t?t:[],n):class extends oe{};for(const t in e){const n=e.hasOwnProperty(t)&&Object.getOwnPropertyDescriptor(e,t);"targets"!==t&&n&&Object.defineProperty(i.prototype,t,n)}return i}function le(e,t){re.register(e,ae(t))}class ce extends oe{toggle(e=null){this._toggle(void 0,e)}show(e=null){this._toggle(!0,e)}hide(e=null){this._toggle(!1,e)}_toggle(e,t=null){let n=e;const i="false"===this.bannerTarget.getAttribute("aria-hidden");if(void 0===n&&(n=!i),n&&i||!n&&!i)return;const s=this.getDispatcher(t);this.triggerEvent(n?"show":"hide",{dispatcher:this.getDispatcher(s)},this.bannerTarget).defaultPrevented||(this.bannerTarget.setAttribute("aria-hidden",n?"false":"true"),n||this.removeBannerOnHide(),this.triggerEvent(n?"shown":"hidden",{dispatcher:s},this.bannerTarget))}removeBannerOnHide(){"true"===this.data.get("remove-when-hidden")&&this.bannerTarget.addEventListener("s-banner:hidden",(()=>{this.element.remove()}),{once:!0})}getDispatcher(e=null){return e instanceof Event?e.target:e instanceof Element?e:this.element}}function he(e){ue(e,!0)}function de(e){ue(e,!1)}function ue(e,t){const n=re.getControllerForElementAndIdentifier(e,"s-banner");if(!n)throw"Unable to get s-banner controller from element";t?n.show():n.hide()}ce.targets=["banner"];const pe="s-expandable-control:radio-off";function me(e){const t=e.target;t instanceof HTMLInputElement&&"INPUT"===t.nodeName&&"radio"===t.type&&document.querySelectorAll('input[type="radio"][name="'+t.name+'"]').forEach((function(t){if(t===e.target)return;let n;try{n=new Event(pe)}catch(e){n=document.createEvent("Event"),n.initEvent(pe,!0,!0)}t.dispatchEvent(n)}))}let fe=0;function ge(e){e?(fe++,1===fe&&document.body.addEventListener("change",me)):(fe--,0===fe&&document.body.removeEventListener("change",me))}class ve extends oe{constructor(){super(...arguments),this.lastKeydownClickTimestamp=0}initialize(){"INPUT"===this.element.nodeName&&["radio","checkbox"].indexOf(this.element.type)>=0?(this.isCollapsed=this._isCollapsedForCheckable.bind(this),this.events=["change",pe],this.isCheckable=!0,this.isRadio="radio"===this.element.type):(this.isCollapsed=this._isCollapsedForClickable.bind(this),this.events=["click","keydown"]),this.listener=this.listener.bind(this)}_isCollapsedForClickable(){const e=this.controlledExpandables;return e.length>0?!e.every((e=>e.classList.contains("is-expanded"))):"false"===this.element.getAttribute("aria-expanded")}_isCollapsedForCheckable(){return!this.element.checked}get controlledExpandables(){const e=this.element.getAttribute("aria-controls");if(!e)throw'[aria-controls="targetId1 ... targetIdN"] attribute required';const t=e.split(/\s+/g).map((e=>document.getElementById(e))).filter((e=>!!e));if(!t.length)throw"couldn't find controls";return t}_dispatchShowHideEvent(e){this.triggerEvent(e?"show":"hide")}_toggleClass(e){if(!this.data.has("toggle-class"))return;const t=this.element.classList,n=this.data.get("toggle-class");if(!n)throw"couldn't find toggle class";n.split(/\s+/).forEach((function(n){t.toggle(n,!!e)}))}listener(e){let t;if(this.isCheckable)t=!this.element.checked;else{if("keydown"==e.type&&e instanceof KeyboardEvent&&13!=e.keyCode&&32!=e.keyCode)return;if(e.target!==e.currentTarget&&["A","BUTTON"].indexOf(e.target.nodeName)>=0)return;if(e.preventDefault(),"keydown"==e.type)this.lastKeydownClickTimestamp=Date.now();else if("click"==e.type&&Date.now()-this.lastKeydownClickTimestamp<300)return;t="true"===this.element.getAttribute("aria-expanded"),"click"===e.type&&this.element.blur()}this.element.setAttribute("aria-expanded",t?"false":"true");for(const e of this.controlledExpandables)e.classList.toggle("is-expanded",!t);this._dispatchShowHideEvent(!t),this._toggleClass(!t)}connect(){if(this.events.forEach((e=>{this.element.addEventListener(e,this.listener.bind(this))}),this),this.isRadio&&ge(!0),this.isRadio||this.element.setAttribute("aria-expanded",this.isCollapsed()?"false":"true"),this.isCheckable){const e=this.controlledExpandables;if(e.length){const t=!this.isCollapsed();if(e.some((e=>e.classList.contains("is-expanded")!==t))){for(const e of this.controlledExpandables)e.classList.toggle("is-expanded",t);this._dispatchShowHideEvent(t),this._toggleClass(t)}}}}disconnect(){this.events.forEach((e=>{this.element.removeEventListener(e,this.listener.bind(this))}),this),this.isRadio&&ge(!1)}}class be extends oe{connect(){this.validate()}disconnect(){this.unbindDocumentEvents()}toggle(e=null){this._toggle(void 0,e)}show(e=null){this._toggle(!0,e)}hide(e=null){this._toggle(!1,e)}validate(){const e=this.data.get("return-element");if(e&&(this.returnElement=document.querySelector(e),!this.returnElement))throw"Unable to find element by return-element selector: "+e}_toggle(e,t=null){let n=e;const i="false"===this.modalTarget.getAttribute("aria-hidden");if(void 0===n&&(n=!i),n&&i||!n&&!i)return;const s=this.getDispatcher(t),r=this.triggerEvent(n?"show":"hide",{returnElement:this.returnElement,dispatcher:this.getDispatcher(s)},this.modalTarget);r.defaultPrevented||(this.returnElement=r.detail.returnElement,this.modalTarget.setAttribute("aria-hidden",n?"false":"true"),n?(this.bindDocumentEvents(),this.focusInsideModal()):(this.unbindDocumentEvents(),this.focusReturnElement(),this.removeModalOnHide()),void 0!==this.modalTarget.ontransitionend?this.modalTarget.addEventListener("transitionend",(()=>{this.triggerEvent(n?"shown":"hidden",{dispatcher:s},this.modalTarget)}),{once:!0}):this.triggerEvent(n?"shown":"hidden",{dispatcher:s},this.modalTarget))}focusReturnElement(){this.returnElement&&this.modalTarget.addEventListener("s-modal:hidden",(()=>{this.returnElement&&document.body.contains(this.returnElement)&&this.returnElement.focus()}),{once:!0})}removeModalOnHide(){"true"===this.data.get("remove-when-hidden")&&this.modalTarget.addEventListener("s-modal:hidden",(()=>{this.element.remove()}),{once:!0})}getAllTabbables(){return Array.from(this.modalTarget.querySelectorAll("[href], input, select, textarea, button, [tabindex]")).filter((e=>e.matches(":not([disabled]):not([tabindex='-1'])")))}firstVisible(e){return e.find((e=>null!==e.offsetParent))}lastVisible(e){return this.firstVisible([...e].reverse())}focusInsideModal(){this.modalTarget.addEventListener("s-modal:shown",(()=>{var e;const t=null!==(e=this.firstVisible(this.initialFocusTargets))&&void 0!==e?e:this.firstVisible(this.getAllTabbables());this.modalTarget.contains(document.activeElement)||null==t||t.focus()}),{once:!0})}keepFocusWithinModal(e){if(this.modalTarget.contains(e.target)){if("Tab"===e.key){const t=this.getAllTabbables(),n=this.firstVisible(t),i=this.lastVisible(t);n&&i&&(n===i?(e.preventDefault(),n.focus()):e.shiftKey&&e.target===n?(e.preventDefault(),i.focus()):e.shiftKey||e.target!==i||(e.preventDefault(),n.focus()))}}else{const t=this.firstVisible(this.getAllTabbables());t&&(e.preventDefault(),t.focus())}}bindDocumentEvents(){this._boundClickFn=this._boundClickFn||this.hideOnOutsideClick.bind(this),this._boundKeypressFn=this._boundKeypressFn||this.hideOnEscapePress.bind(this),this._boundTabTrap=this._boundTabTrap||this.keepFocusWithinModal.bind(this),document.addEventListener("mousedown",this._boundClickFn),document.addEventListener("keyup",this._boundKeypressFn),document.addEventListener("keydown",this._boundTabTrap)}unbindDocumentEvents(){document.removeEventListener("mousedown",this._boundClickFn),document.removeEventListener("keyup",this._boundKeypressFn),document.removeEventListener("keydown",this._boundTabTrap)}hideOnOutsideClick(e){var t;const n=e.target;!(null===(t=this.modalTarget.querySelector(".s-modal--dialog"))||void 0===t?void 0:t.contains(n))&&document.body.contains(n)&&this._toggle(!1,e)}hideOnEscapePress(e){27===e.which&&"true"!==this.modalTarget.getAttribute("aria-hidden")&&this._toggle(!1,e)}getDispatcher(e=null){return e instanceof Event?e.target:e instanceof Element?e:this.element}}function ye(e){we(e,!0)}function Ee(e){we(e,!1)}function we(e,t){const n=re.getControllerForElementAndIdentifier(e,"s-modal");if(!n)throw"Unable to get s-modal controller from element";t?n.show():n.hide()}be.targets=["modal","initialFocus"];class Oe extends oe{connect(){super.connect(),this.boundSelectTab=this.selectTab.bind(this),this.boundHandleKeydown=this.handleKeydown.bind(this);for(const e of this.tabTargets)e.addEventListener("click",this.boundSelectTab),e.addEventListener("keydown",this.boundHandleKeydown)}disconnect(){super.disconnect();for(const e of this.tabTargets)e.removeEventListener("click",this.boundSelectTab),e.removeEventListener("keydown",this.boundHandleKeydown)}get tabTargets(){return Array.from(this.element.querySelectorAll("[role=tab]"))}selectTab(e){this.switchToTab(e.currentTarget)}handleKeydown(e){var t;let n=e.currentTarget;const i=this.tabTargets;let s=i.indexOf(n);if("ArrowRight"===e.key)s++;else{if("ArrowLeft"!==e.key)return;s--}s<0&&(s=i.length-1),s>=i.length&&(s=0),n=i[s],this.switchToTab(n),null===(t=this.selectedTab)||void 0===t||t.focus()}switchToTab(e){const t=this.selectedTab;t!==e&&(this.triggerEvent("select",{oldTab:t,newTab:e}).defaultPrevented||(this.selectedTab=e,this.triggerEvent("selected",{oldTab:t,newTab:e})))}get selectedTab(){return this.tabTargets.find((e=>"true"===e.getAttribute("aria-selected")))||null}set selectedTab(e){for(const t of this.tabTargets){const n=t.getAttribute("aria-controls"),i=n?document.getElementById(n):null;t===e?(t.classList.add("is-selected"),t.setAttribute("aria-selected","true"),t.removeAttribute("tabindex"),null==i||i.classList.remove("d-none")):(t.classList.remove("is-selected"),t.setAttribute("aria-selected","false"),t.setAttribute("tabindex","-1"),null==i||i.classList.add("d-none"))}}}function Ae(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Te(e){return e instanceof Ae(e).Element||e instanceof Element}function xe(e){return e instanceof Ae(e).HTMLElement||e instanceof HTMLElement}function ke(e){return"undefined"!=typeof ShadowRoot&&(e instanceof Ae(e).ShadowRoot||e instanceof ShadowRoot)}var Ce=Math.max,Me=Math.min,Le=Math.round;function Fe(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function Se(){return!/^((?!chrome|android).)*safari/i.test(Fe())}function De(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var i=e.getBoundingClientRect(),s=1,r=1;t&&xe(e)&&(s=e.offsetWidth>0&&Le(i.width)/e.offsetWidth||1,r=e.offsetHeight>0&&Le(i.height)/e.offsetHeight||1);var o=(Te(e)?Ae(e):window).visualViewport,a=!Se()&&n,l=(i.left+(a&&o?o.offsetLeft:0))/s,c=(i.top+(a&&o?o.offsetTop:0))/r,h=i.width/s,d=i.height/r;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ne(e){var t=Ae(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function Be(e){return e?(e.nodeName||"").toLowerCase():null}function Ie(e){return((Te(e)?e.ownerDocument:e.document)||window.document).documentElement}function $e(e){return De(Ie(e)).left+Ne(e).scrollLeft}function je(e){return Ae(e).getComputedStyle(e)}function Pe(e){var t=je(e),n=t.overflow,i=t.overflowX,s=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+s+i)}function Ve(e,t,n){void 0===n&&(n=!1);var i,s,r=xe(t),o=xe(t)&&function(e){var t=e.getBoundingClientRect(),n=Le(t.width)/e.offsetWidth||1,i=Le(t.height)/e.offsetHeight||1;return 1!==n||1!==i}(t),a=Ie(t),l=De(e,o,n),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(r||!r&&!n)&&(("body"!==Be(t)||Pe(a))&&(c=(i=t)!==Ae(i)&&xe(i)?{scrollLeft:(s=i).scrollLeft,scrollTop:s.scrollTop}:Ne(i)),xe(t)?((h=De(t,!0)).x+=t.clientLeft,h.y+=t.clientTop):a&&(h.x=$e(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function Ke(e){var t=De(e),n=e.offsetWidth,i=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-i)<=1&&(i=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:i}}function _e(e){return"html"===Be(e)?e:e.assignedSlot||e.parentNode||(ke(e)?e.host:null)||Ie(e)}function He(e){return["html","body","#document"].indexOf(Be(e))>=0?e.ownerDocument.body:xe(e)&&Pe(e)?e:He(_e(e))}function Re(e,t){var n;void 0===t&&(t=[]);var i=He(e),s=i===(null==(n=e.ownerDocument)?void 0:n.body),r=Ae(i),o=s?[r].concat(r.visualViewport||[],Pe(i)?i:[]):i,a=t.concat(o);return s?a:a.concat(Re(_e(o)))}function Ue(e){return["table","td","th"].indexOf(Be(e))>=0}function We(e){return xe(e)&&"fixed"!==je(e).position?e.offsetParent:null}function qe(e){for(var t=Ae(e),n=We(e);n&&Ue(n)&&"static"===je(n).position;)n=We(n);return n&&("html"===Be(n)||"body"===Be(n)&&"static"===je(n).position)?t:n||function(e){var t=/firefox/i.test(Fe());if(/Trident/i.test(Fe())&&xe(e)&&"fixed"===je(e).position)return null;var n=_e(e);for(ke(n)&&(n=n.host);xe(n)&&["html","body"].indexOf(Be(n))<0;){var i=je(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||t}var ze="top",Je="bottom",Xe="right",Ye="left",Ze="auto",Ge=[ze,Je,Xe,Ye],Qe="start",et="end",tt="viewport",nt="popper",it=Ge.reduce((function(e,t){return e.concat([t+"-"+Qe,t+"-"+et])}),[]),st=[].concat(Ge,[Ze]).reduce((function(e,t){return e.concat([t,t+"-"+Qe,t+"-"+et])}),[]),rt=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function ot(e){var t=new Map,n=new Set,i=[];function s(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var i=t.get(e);i&&s(i)}})),i.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||s(e)})),i}var at={placement:"bottom",modifiers:[],strategy:"absolute"};function lt(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return!t.some((function(e){return!(e&&"function"==typeof e.getBoundingClientRect)}))}function ct(e){void 0===e&&(e={});var t=e,n=t.defaultModifiers,i=void 0===n?[]:n,s=t.defaultOptions,r=void 0===s?at:s;return function(e,t,n){void 0===n&&(n=r);var s,o,a={placement:"bottom",orderedModifiers:[],options:Object.assign({},at,r),modifiersData:{},elements:{reference:e,popper:t},attributes:{},styles:{}},l=[],c=!1,h={state:a,setOptions:function(n){var s="function"==typeof n?n(a.options):n;d(),a.options=Object.assign({},r,a.options,s),a.scrollParents={reference:Te(e)?Re(e):e.contextElement?Re(e.contextElement):[],popper:Re(t)};var o,c,u=function(e){var t=ot(e);return rt.reduce((function(e,n){return e.concat(t.filter((function(e){return e.phase===n})))}),[])}((o=[].concat(i,a.options.modifiers),c=o.reduce((function(e,t){var n=e[t.name];return e[t.name]=n?Object.assign({},n,t,{options:Object.assign({},n.options,t.options),data:Object.assign({},n.data,t.data)}):t,e}),{}),Object.keys(c).map((function(e){return c[e]}))));return a.orderedModifiers=u.filter((function(e){return e.enabled})),a.orderedModifiers.forEach((function(e){var t=e.name,n=e.options,i=void 0===n?{}:n,s=e.effect;if("function"==typeof s){var r=s({state:a,name:t,instance:h,options:i});l.push(r||function(){})}})),h.update()},forceUpdate:function(){if(!c){var e=a.elements,t=e.reference,n=e.popper;if(lt(t,n)){a.rects={reference:Ve(t,qe(n),"fixed"===a.options.strategy),popper:Ke(n)},a.reset=!1,a.placement=a.options.placement,a.orderedModifiers.forEach((function(e){return a.modifiersData[e.name]=Object.assign({},e.data)}));for(var i=0;i<a.orderedModifiers.length;i++)if(!0!==a.reset){var s=a.orderedModifiers[i],r=s.fn,o=s.options,l=void 0===o?{}:o,d=s.name;"function"==typeof r&&(a=r({state:a,options:l,name:d,instance:h})||a)}else a.reset=!1,i=-1}}},update:(s=function(){return new Promise((function(e){h.forceUpdate(),e(a)}))},function(){return o||(o=new Promise((function(e){Promise.resolve().then((function(){o=void 0,e(s())}))}))),o}),destroy:function(){d(),c=!0}};if(!lt(e,t))return h;function d(){l.forEach((function(e){return e()})),l=[]}return h.setOptions(n).then((function(e){!c&&n.onFirstUpdate&&n.onFirstUpdate(e)})),h}}var ht={passive:!0};function dt(e){return e.split("-")[0]}function ut(e){return e.split("-")[1]}function pt(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function mt(e){var t,n=e.reference,i=e.element,s=e.placement,r=s?dt(s):null,o=s?ut(s):null,a=n.x+n.width/2-i.width/2,l=n.y+n.height/2-i.height/2;switch(r){case ze:t={x:a,y:n.y-i.height};break;case Je:t={x:a,y:n.y+n.height};break;case Xe:t={x:n.x+n.width,y:l};break;case Ye:t={x:n.x-i.width,y:l};break;default:t={x:n.x,y:n.y}}var c=r?pt(r):null;if(null!=c){var h="y"===c?"height":"width";switch(o){case Qe:t[c]=t[c]-(n[h]/2-i[h]/2);break;case et:t[c]=t[c]+(n[h]/2-i[h]/2)}}return t}var ft={top:"auto",right:"auto",bottom:"auto",left:"auto"};function gt(e){var t,n=e.popper,i=e.popperRect,s=e.placement,r=e.variation,o=e.offsets,a=e.position,l=e.gpuAcceleration,c=e.adaptive,h=e.roundOffsets,d=e.isFixed,u=o.x,p=void 0===u?0:u,m=o.y,f=void 0===m?0:m,g="function"==typeof h?h({x:p,y:f}):{x:p,y:f};p=g.x,f=g.y;var v=o.hasOwnProperty("x"),b=o.hasOwnProperty("y"),y=Ye,E=ze,w=window;if(c){var O=qe(n),A="clientHeight",T="clientWidth";O===Ae(n)&&"static"!==je(O=Ie(n)).position&&"absolute"===a&&(A="scrollHeight",T="scrollWidth"),(s===ze||(s===Ye||s===Xe)&&r===et)&&(E=Je,f-=(d&&O===w&&w.visualViewport?w.visualViewport.height:O[A])-i.height,f*=l?1:-1),s!==Ye&&(s!==ze&&s!==Je||r!==et)||(y=Xe,p-=(d&&O===w&&w.visualViewport?w.visualViewport.width:O[T])-i.width,p*=l?1:-1)}var x,k=Object.assign({position:a},c&&ft),C=!0===h?function(e,t){var n=e.x,i=e.y,s=t.devicePixelRatio||1;return{x:Le(n*s)/s||0,y:Le(i*s)/s||0}}({x:p,y:f},Ae(n)):{x:p,y:f};return p=C.x,f=C.y,l?Object.assign({},k,((x={})[E]=b?"0":"",x[y]=v?"0":"",x.transform=(w.devicePixelRatio||1)<=1?"translate("+p+"px, "+f+"px)":"translate3d("+p+"px, "+f+"px, 0)",x)):Object.assign({},k,((t={})[E]=b?f+"px":"",t[y]=v?p+"px":"",t.transform="",t))}var vt={left:"right",right:"left",bottom:"top",top:"bottom"};function bt(e){return e.replace(/left|right|bottom|top/g,(function(e){return vt[e]}))}var yt={start:"end",end:"start"};function Et(e){return e.replace(/start|end/g,(function(e){return yt[e]}))}function wt(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&ke(n)){var i=t;do{if(i&&e.isSameNode(i))return!0;i=i.parentNode||i.host}while(i)}return!1}function Ot(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function At(e,t,n){return t===tt?Ot(function(e,t){var n=Ae(e),i=Ie(e),s=n.visualViewport,r=i.clientWidth,o=i.clientHeight,a=0,l=0;if(s){r=s.width,o=s.height;var c=Se();(c||!c&&"fixed"===t)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:r,height:o,x:a+$e(e),y:l}}(e,n)):Te(t)?function(e,t){var n=De(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):Ot(function(e){var t,n=Ie(e),i=Ne(e),s=null==(t=e.ownerDocument)?void 0:t.body,r=Ce(n.scrollWidth,n.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),o=Ce(n.scrollHeight,n.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-i.scrollLeft+$e(e),l=-i.scrollTop;return"rtl"===je(s||n).direction&&(a+=Ce(n.clientWidth,s?s.clientWidth:0)-r),{width:r,height:o,x:a,y:l}}(Ie(e)))}function Tt(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function xt(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function kt(e,t){void 0===t&&(t={});var n=t,i=n.placement,s=void 0===i?e.placement:i,r=n.strategy,o=void 0===r?e.strategy:r,a=n.boundary,l=void 0===a?"clippingParents":a,c=n.rootBoundary,h=void 0===c?tt:c,d=n.elementContext,u=void 0===d?nt:d,p=n.altBoundary,m=void 0!==p&&p,f=n.padding,g=void 0===f?0:f,v=Tt("number"!=typeof g?g:xt(g,Ge)),b=u===nt?"reference":nt,y=e.rects.popper,E=e.elements[m?b:u],w=function(e,t,n,i){var s="clippingParents"===t?function(e){var t=Re(_e(e)),n=["absolute","fixed"].indexOf(je(e).position)>=0&&xe(e)?qe(e):e;return Te(n)?t.filter((function(e){return Te(e)&&wt(e,n)&&"body"!==Be(e)})):[]}(e):[].concat(t),r=[].concat(s,[n]),o=r[0],a=r.reduce((function(t,n){var s=At(e,n,i);return t.top=Ce(s.top,t.top),t.right=Me(s.right,t.right),t.bottom=Me(s.bottom,t.bottom),t.left=Ce(s.left,t.left),t}),At(e,o,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(Te(E)?E:E.contextElement||Ie(e.elements.popper),l,h,o),O=De(e.elements.reference),A=mt({reference:O,element:y,strategy:"absolute",placement:s}),T=Ot(Object.assign({},y,A)),x=u===nt?T:O,k={top:w.top-x.top+v.top,bottom:x.bottom-w.bottom+v.bottom,left:w.left-x.left+v.left,right:x.right-w.right+v.right},C=e.modifiersData.offset;if(u===nt&&C){var M=C[s];Object.keys(k).forEach((function(e){var t=[Xe,Je].indexOf(e)>=0?1:-1,n=[ze,Je].indexOf(e)>=0?"y":"x";k[e]+=M[n]*t}))}return k}function Ct(e,t,n){return Ce(e,Me(t,n))}function Mt(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function Lt(e){return[ze,Xe,Je,Ye].some((function(t){return e[t]>=0}))}var Ft,St=ct({defaultModifiers:[{name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,i=e.options,s=i.scroll,r=void 0===s||s,o=i.resize,a=void 0===o||o,l=Ae(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return r&&c.forEach((function(e){e.addEventListener("scroll",n.update,ht)})),a&&l.addEventListener("resize",n.update,ht),function(){r&&c.forEach((function(e){e.removeEventListener("scroll",n.update,ht)})),a&&l.removeEventListener("resize",n.update,ht)}},data:{}},{name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=mt({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,i=n.gpuAcceleration,s=void 0===i||i,r=n.adaptive,o=void 0===r||r,a=n.roundOffsets,l=void 0===a||a,c={placement:dt(t.placement),variation:ut(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:s,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,gt(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:o,roundOffsets:l})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,gt(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},{name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},i=t.attributes[e]||{},s=t.elements[e];xe(s)&&Be(s)&&(Object.assign(s.style,n),Object.keys(i).forEach((function(e){var t=i[e];!1===t?s.removeAttribute(e):s.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var i=t.elements[e],s=t.attributes[e]||{},r=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});xe(i)&&Be(i)&&(Object.assign(i.style,r),Object.keys(s).forEach((function(e){i.removeAttribute(e)})))}))}},requires:["computeStyles"]},{name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,i=e.name,s=n.offset,r=void 0===s?[0,0]:s,o=st.reduce((function(e,n){return e[n]=function(e,t,n){var i=dt(e),s=[Ye,ze].indexOf(i)>=0?-1:1,r="function"==typeof n?n(Object.assign({},t,{placement:e})):n,o=r[0],a=r[1];return o=o||0,a=(a||0)*s,[Ye,Xe].indexOf(i)>=0?{x:a,y:o}:{x:o,y:a}}(n,t.rects,r),e}),{}),a=o[t.placement],l=a.x,c=a.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=c),t.modifiersData[i]=o}},{name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name;if(!t.modifiersData[i]._skip){for(var s=n.mainAxis,r=void 0===s||s,o=n.altAxis,a=void 0===o||o,l=n.fallbackPlacements,c=n.padding,h=n.boundary,d=n.rootBoundary,u=n.altBoundary,p=n.flipVariations,m=void 0===p||p,f=n.allowedAutoPlacements,g=t.options.placement,v=dt(g),b=l||(v!==g&&m?function(e){if(dt(e)===Ze)return[];var t=bt(e);return[Et(e),t,Et(t)]}(g):[bt(g)]),y=[g].concat(b).reduce((function(e,n){return e.concat(dt(n)===Ze?function(e,t){void 0===t&&(t={});var n=t,i=n.placement,s=n.boundary,r=n.rootBoundary,o=n.padding,a=n.flipVariations,l=n.allowedAutoPlacements,c=void 0===l?st:l,h=ut(i),d=h?a?it:it.filter((function(e){return ut(e)===h})):Ge,u=d.filter((function(e){return c.indexOf(e)>=0}));0===u.length&&(u=d);var p=u.reduce((function(t,n){return t[n]=kt(e,{placement:n,boundary:s,rootBoundary:r,padding:o})[dt(n)],t}),{});return Object.keys(p).sort((function(e,t){return p[e]-p[t]}))}(t,{placement:n,boundary:h,rootBoundary:d,padding:c,flipVariations:m,allowedAutoPlacements:f}):n)}),[]),E=t.rects.reference,w=t.rects.popper,O=new Map,A=!0,T=y[0],x=0;x<y.length;x++){var k=y[x],C=dt(k),M=ut(k)===Qe,L=[ze,Je].indexOf(C)>=0,F=L?"width":"height",S=kt(t,{placement:k,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),D=L?M?Xe:Ye:M?Je:ze;E[F]>w[F]&&(D=bt(D));var N=bt(D),B=[];if(r&&B.push(S[C]<=0),a&&B.push(S[D]<=0,S[N]<=0),B.every((function(e){return e}))){T=k,A=!1;break}O.set(k,B)}if(A)for(var I=function(e){var t=y.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return T=t,"break"},$=m?3:1;$>0&&"break"!==I($);$--);t.placement!==T&&(t.modifiersData[i]._skip=!0,t.placement=T,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}},{name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,i=e.name,s=n.mainAxis,r=void 0===s||s,o=n.altAxis,a=void 0!==o&&o,l=n.boundary,c=n.rootBoundary,h=n.altBoundary,d=n.padding,u=n.tether,p=void 0===u||u,m=n.tetherOffset,f=void 0===m?0:m,g=kt(t,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),v=dt(t.placement),b=ut(t.placement),y=!b,E=pt(v),w="x"===E?"y":"x",O=t.modifiersData.popperOffsets,A=t.rects.reference,T=t.rects.popper,x="function"==typeof f?f(Object.assign({},t.rects,{placement:t.placement})):f,k="number"==typeof x?{mainAxis:x,altAxis:x}:Object.assign({mainAxis:0,altAxis:0},x),C=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,M={x:0,y:0};if(O){if(r){var L,F="y"===E?ze:Ye,S="y"===E?Je:Xe,D="y"===E?"height":"width",N=O[E],B=N+g[F],I=N-g[S],$=p?-T[D]/2:0,j=b===Qe?A[D]:T[D],P=b===Qe?-T[D]:-A[D],V=t.elements.arrow,K=p&&V?Ke(V):{width:0,height:0},_=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},H=_[F],R=_[S],U=Ct(0,A[D],K[D]),W=y?A[D]/2-$-U-H-k.mainAxis:j-U-H-k.mainAxis,q=y?-A[D]/2+$+U+R+k.mainAxis:P+U+R+k.mainAxis,z=t.elements.arrow&&qe(t.elements.arrow),J=z?"y"===E?z.clientTop||0:z.clientLeft||0:0,X=null!=(L=null==C?void 0:C[E])?L:0,Y=N+q-X,Z=Ct(p?Me(B,N+W-X-J):B,N,p?Ce(I,Y):I);O[E]=Z,M[E]=Z-N}if(a){var G,Q="x"===E?ze:Ye,ee="x"===E?Je:Xe,te=O[w],ne="y"===w?"height":"width",ie=te+g[Q],se=te-g[ee],re=-1!==[ze,Ye].indexOf(v),oe=null!=(G=null==C?void 0:C[w])?G:0,ae=re?ie:te-A[ne]-T[ne]-oe+k.altAxis,le=re?te+A[ne]+T[ne]-oe-k.altAxis:se,ce=p&&re?function(e,t,n){var i=Ct(e,t,n);return i>n?n:i}(ae,te,le):Ct(p?ae:ie,te,p?le:se);O[w]=ce,M[w]=ce-te}t.modifiersData[i]=M}},requiresIfExists:["offset"]},{name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,i=e.name,s=e.options,r=n.elements.arrow,o=n.modifiersData.popperOffsets,a=dt(n.placement),l=pt(a),c=[Ye,Xe].indexOf(a)>=0?"height":"width";if(r&&o){var h=function(e,t){return Tt("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:xt(e,Ge))}(s.padding,n),d=Ke(r),u="y"===l?ze:Ye,p="y"===l?Je:Xe,m=n.rects.reference[c]+n.rects.reference[l]-o[l]-n.rects.popper[c],f=o[l]-n.rects.reference[l],g=qe(r),v=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=m/2-f/2,y=h[u],E=v-d[c]-h[p],w=v/2-d[c]/2+b,O=Ct(y,w,E),A=l;n.modifiersData[i]=((t={})[A]=O,t.centerOffset=O-w,t)}},effect:function(e){var t=e.state,n=e.options.element,i=void 0===n?"[data-popper-arrow]":n;null!=i&&("string"!=typeof i||(i=t.elements.popper.querySelector(i)))&&wt(t.elements.popper,i)&&(t.elements.arrow=i)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,i=t.rects.reference,s=t.rects.popper,r=t.modifiersData.preventOverflow,o=kt(t,{elementContext:"reference"}),a=kt(t,{altBoundary:!0}),l=Mt(o,i),c=Mt(a,s,r),h=Lt(l),d=Lt(c);t.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}}]});class Dt extends oe{get isVisible(){const e=this.popoverElement;return!!e&&e.classList.contains("is-visible")}get isInViewport(){const e=this.popoverElement;if(!this.isVisible||!e)return!1;const t=e.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight),i=Math.max(document.documentElement.clientWidth,window.innerWidth);return t.bottom>0&&t.top<n&&t.right>0&&t.left<i}get shouldHideOnOutsideClick(){switch(this.data.get("hide-on-outside-click")){case"after-dismissal":case"never":return!1;case"if-in-viewport":return this.isInViewport;default:return!0}}connect(){super.connect(),this.validate(),this.isVisible?this.initializePopper():"true"===this.data.get("auto-show")&&this.show(null),this.data.delete("auto-show")}disconnect(){this.hide(),this.popper&&(this.popper.destroy(),delete this.popper),super.disconnect()}toggle(e=null){this.isVisible?this.hide(e):this.show(e)}show(e=null){if(this.isVisible)return;const t=this.getDispatcher(e);this.triggerEvent("show",{dispatcher:t}).defaultPrevented||(this.popper||this.initializePopper(),this.popoverElement.classList.add("is-visible"),this.scheduleUpdate(),this.shown(t))}hide(e=null){if(!this.isVisible)return;const t=this.getDispatcher(e);this.triggerEvent("hide",{dispatcher:t}).defaultPrevented||(this.popoverElement.classList.remove("is-visible"),this.popper&&(this.popper.destroy(),delete this.popper),"after-dismissal"===this.data.get("hide-on-outside-click")&&this.data.delete("hide-on-outside-click"),this.hidden(t))}shown(e=null){this.bindDocumentEvents(),this.triggerEvent("shown",{dispatcher:e})}hidden(e=null){this.unbindDocumentEvents(),this.triggerEvent("hidden",{dispatcher:e})}generatePopover(){return null}initializePopper(){this.popper=St(this.referenceElement,this.popoverElement,{placement:this.data.get("placement")||"bottom",modifiers:[{name:"offset",options:{offset:[0,10]}},{name:"arrow",options:{element:".s-popover--arrow"}}]})}validate(){const e=this.data.get("reference-selector");if(this.referenceElement=this.element,e&&(this.referenceElement=this.element.querySelector(e),!this.referenceElement))throw"Unable to find element by reference selector: "+e;const t=this.referenceElement.getAttribute(this.popoverSelectorAttribute);let n=null;if(t){if(n=document.getElementById(t),!n)throw`[${this.popoverSelectorAttribute}="{POPOVER_ID}"] required`}else n=this.generatePopover();if(!n)throw"unable to find or generate popover element";this.popoverElement=n}getDispatcher(e=null){return e instanceof Event?e.target:e instanceof Element?e:this.element}scheduleUpdate(){this.popper&&this.isVisible&&this.popper.update()}}class Nt extends Dt{constructor(){super(...arguments),this.popoverSelectorAttribute="aria-controls"}shown(e=null){this.toggleOptionalClasses(!0),this.toggleAccessibilityAttributes(!0),super.shown(e)}hidden(e=null){this.toggleOptionalClasses(!1),this.toggleAccessibilityAttributes(!1),super.hidden(e)}connect(){super.connect(),this.toggleAccessibilityAttributes()}bindDocumentEvents(){this.boundHideOnOutsideClick=this.boundHideOnOutsideClick||this.hideOnOutsideClick.bind(this),this.boundHideOnEscapePress=this.boundHideOnEscapePress||this.hideOnEscapePress.bind(this),document.addEventListener("mousedown",this.boundHideOnOutsideClick),document.addEventListener("keyup",this.boundHideOnEscapePress)}unbindDocumentEvents(){document.removeEventListener("mousedown",this.boundHideOnOutsideClick),document.removeEventListener("keyup",this.boundHideOnEscapePress)}hideOnOutsideClick(e){const t=e.target;this.shouldHideOnOutsideClick&&!this.referenceElement.contains(t)&&!this.popoverElement.contains(t)&&document.body.contains(t)&&this.hide(e)}hideOnEscapePress(e){27===e.which&&this.isVisible&&(this.popoverElement.contains(e.target)&&this.referenceElement.focus(),this.hide(e))}toggleOptionalClasses(e){if(!this.data.has("toggle-class"))return;const t=this.data.get("toggle-class")||"",n=this.referenceElement.classList;t.split(/\s+/).forEach((function(t){n.toggle(t,e)}))}toggleAccessibilityAttributes(e){const t=(null==e?void 0:e.toString())||this.referenceElement.ariaExpanded||"false";this.referenceElement.ariaExpanded=t,this.referenceElement.setAttribute("aria-expanded",t)}}function Bt(e){const{isPopover:t,controller:n}=Pt(e);if(n)n.show();else{if(!t)throw'element does not have data-controller="s-popover"';e.setAttribute("data-s-popover-auto-show","true")}}function It(e){const{isPopover:t,controller:n,popover:i}=Pt(e);if(n)n.hide();else{if(!t)throw'element does not have data-controller="s-popover"';e.removeAttribute("data-s-popover-auto-show"),i&&i.classList.remove("is-visible")}}function $t(e,t,n){const{referenceElement:i,popover:s}=Pt(e);if(s)throw`element already has popover with id="${s.id}"`;if(!i)throw"element has invalid data-s-popover-reference-selector attribute";if("string"==typeof t){const e=document.createRange().createContextualFragment(t).children;if(1!==e.length)throw"popover should contain a single element";t=e[0]}const r=i.getAttribute("aria-controls");let o=t.id;if(!t.classList.contains("s-popover"))throw`popover should have the "s-popover" class but had class="${t.className}"`;if(r&&r!==o)throw`element has aria-controls="${r}" but popover has id="${o}"`;o||(o="--stacks-s-popover-"+Math.random().toString(36).substring(2,10),t.id=o),r||i.setAttribute("aria-controls",o),!t.parentElement&&e.parentElement&&i.insertAdjacentElement("afterend",t),Vt(e,"s-popover",!0),n&&(n.toggleOnClick&&i.setAttribute("data-action","click->s-popover#toggle"),n.placement&&e.setAttribute("data-s-popover-placement",n.placement),n.autoShow&&e.setAttribute("data-s-popover-auto-show","true"))}function jt(e){const{isPopover:t,controller:n,referenceElement:i,popover:s}=Pt(e);return null==n||n.hide(),null==s||s.remove(),t&&(Vt(e,"s-popover",!1),i&&i.removeAttribute("aria-controls")),s}function Pt(e){var t;const n=(null===(t=e.getAttribute("data-controller"))||void 0===t?void 0:t.includes("s-popover"))||!1,i=re.getControllerForElementAndIdentifier(e,"s-popover"),s=e.getAttribute("data-s-popover-reference-selector"),r=s?e.querySelector(s):e,o=r?r.getAttribute("aria-controls"):null;return{isPopover:n,controller:i,referenceElement:r,popover:o?document.getElementById(o):null}}function Vt(e,t,n){var i;const s=new Set(null===(i=e.getAttribute("data-controller"))||void 0===i?void 0:i.split(/\s+/));n?s.add(t):s.delete(t),e.setAttribute("data-controller",Array.from(s).join(" "))}Nt.targets=[],function(e){e.Ascending="ascending",e.Descending="descending",e.None="none"}(Ft||(Ft={}));class Kt extends oe{constructor(){super(...arguments),this.updateSortedColumnStyles=(e,t)=>{this.columnTargets.forEach((n=>{const i=n===e,s=i?t===Ft.Ascending?"asc":"desc":Ft.None;n.classList.toggle("is-sorted",i&&t!==Ft.None),n.querySelectorAll(".js-sorting-indicator").forEach((e=>{e.classList.toggle("d-none",!e.classList.contains("js-sorting-indicator-"+s))})),i?n.setAttribute("aria-sort",t):n.removeAttribute("aria-sort")}))}}sort(e){const t=this,n=e.currentTarget,i=n instanceof HTMLButtonElement?n.parentElement:n,s=this.element,r=s.tBodies[0],o=function(e){var t;const n=null===(t=e.parentElement)||void 0===t?void 0:t.parentElement;if(!(n instanceof HTMLTableSectionElement))throw"invalid table";const i=_t(n,e);if("number"!=typeof i)throw"shouldn't happen";return i}(i);if(o<0)return;const a=function(e){const t=_t(e);if(!Array.isArray(t))throw"shouldn't happen";return t}(r),l=i.getAttribute("aria-sort")===Ft.Ascending?-1:1,c=Array.from(s.tBodies[0].rows);let h=!1;const d=[];let u;c.forEach((function(e,n){var i,s;const r=t.getElementData(e,"sort-to");if("top"===r)return;if("bottom"===r)return void(u||(u=e));const l=a[n][o];if(!l)return void d.push(["",n]);const c=t.getElementData(l,"sort-val"),p=null!==(s=null!=c?c:null===(i=l.textContent)||void 0===i?void 0:i.trim())&&void 0!==s?s:"";""!==p&&`${parseInt(p,10)}`!==p&&(h=!0),d.push([p,n])})),h||d.forEach((function(e){e[0]=""===e[0]?Number.MIN_VALUE:parseInt(e[0],10)})),d.sort((function(e,t){return e[0]>t[0]?1*l:e[0]<t[0]?-1*l:e[1]>t[1]?1:-1})),d.forEach((([e,t])=>{var n;const i=c[t];null===(n=i.parentElement)||void 0===n||n.removeChild(i),u?r.insertBefore(i,u):r.appendChild(i)})),this.updateSortedColumnStyles(i,1===l?Ft.Ascending:Ft.Descending)}}function _t(e,t){const n=[];let i=e.children[0];const s=[],r=[];for(;i||r.some((e=>0!==e));){const e=[];n.push(e);let o=0;if(i)for(let n=0;n<i.children.length;n++){for(;r[o];)r[o]--,e[o]=s[o],o++;const a=i.children[n];if(!(a instanceof HTMLTableCellElement))throw"invalid table";if("none"===getComputedStyle(a).display)continue;if(a===t)return o;const l=o+a.colSpan;for(;o<l;o++)r[o]=a.rowSpan-1,s[o]=a,e[o]=a}for(;o<s.length;)r[o]&&(r[o]--,e[o]=s[o]),o++;i&&(i=i.nextElementSibling)}return t?-1:n}Kt.targets=["column"];class Ht extends oe{connect(){this.validate()}disconnect(){this.unbindDocumentEvents()}toggle(e=null){this._toggle(void 0,e)}show(e=null){this._toggle(!0,e)}hide(e=null){this._toggle(!1,e)}validate(){const e=this.data.get("return-element");if(e&&(this.returnElement=document.querySelector(e),!this.returnElement))throw"Unable to find element by return-element selector: "+e}_toggle(e,t=null){let n=e;const i="false"===this.toastTarget.getAttribute("aria-hidden");if(void 0===n&&(n=!i),n&&i||!n&&!i)return;const s=this.getDispatcher(t),r=this.triggerEvent(n?"show":"hide",{returnElement:this.returnElement,dispatcher:this.getDispatcher(s)},this.toastTarget);r.defaultPrevented||(this.returnElement=r.detail.returnElement,this.toastTarget.setAttribute("aria-hidden",n?"false":"true"),n?(this.bindDocumentEvents(),this.hideAfterTimeout(),"true"!==this.data.get("prevent-focus-capture")&&this.focusInsideToast()):(this.unbindDocumentEvents(),this.focusReturnElement(),this.removeToastOnHide(),this.clearActiveTimeout()),void 0!==this.toastTarget.ontransitionend?this.toastTarget.addEventListener("transitionend",(()=>{this.triggerEvent(n?"shown":"hidden",{dispatcher:s},this.toastTarget)}),{once:!0}):this.triggerEvent(n?"shown":"hidden",{dispatcher:s},this.toastTarget))}focusReturnElement(){this.returnElement&&this.toastTarget.addEventListener("s-toast:hidden",(()=>{this.returnElement&&document.body.contains(this.returnElement)&&this.returnElement.focus()}),{once:!0})}removeToastOnHide(){"true"===this.data.get("remove-when-hidden")&&this.toastTarget.addEventListener("s-toast:hidden",(()=>{this.element.remove()}),{once:!0})}hideAfterTimeout(){if("true"===this.data.get("prevent-auto-hide")||"0"===this.data.get("hide-after-timeout"))return;const e=parseInt(this.data.get("hide-after-timeout"),10)||3e3;this.activeTimeout=window.setTimeout((()=>this.hide()),e)}clearActiveTimeout(){clearTimeout(this.activeTimeout)}getAllTabbables(){return Array.from(this.toastTarget.querySelectorAll("[href], input, select, textarea, button, [tabindex]")).filter((e=>e.matches(":not([disabled]):not([tabindex='-1'])")))}firstVisible(e){return null==e?void 0:e.find((e=>null!==e.offsetParent))}focusInsideToast(){this.toastTarget.addEventListener("s-toast:shown",(()=>{var e;const t=null!==(e=this.firstVisible(this.initialFocusTargets))&&void 0!==e?e:this.firstVisible(this.getAllTabbables());null==t||t.focus()}),{once:!0})}bindDocumentEvents(){this._boundClickFn=this._boundClickFn||this.hideOnOutsideClick.bind(this),this._boundKeypressFn=this._boundKeypressFn||this.hideOnEscapePress.bind(this),document.addEventListener("mousedown",this._boundClickFn),document.addEventListener("keyup",this._boundKeypressFn)}unbindDocumentEvents(){document.removeEventListener("mousedown",this._boundClickFn),document.removeEventListener("keyup",this._boundKeypressFn)}hideOnOutsideClick(e){var t;const n=e.target;!(null===(t=this.toastTarget)||void 0===t?void 0:t.contains(n))&&document.body.contains(n)&&"false"!==this.data.get("hide-on-outside-click")&&this._toggle(!1,e)}hideOnEscapePress(e){27===e.which&&"true"!==this.toastTarget.getAttribute("aria-hidden")&&this._toggle(!1,e)}getDispatcher(e=null){return e instanceof Event?e.target:e instanceof Element?e:this.element}}function Rt(e){Wt(e,!0)}function Ut(e){Wt(e,!1)}function Wt(e,t){const n=re.getControllerForElementAndIdentifier(e,"s-toast");if(!n)throw"Unable to get s-toast controller from element";t?n.show():n.hide()}Ht.targets=["toast","initialFocus"];class qt extends Dt{constructor(){super(...arguments),this.popoverSelectorAttribute="aria-describedby"}connect(){super.connect(),window.matchMedia("(hover: hover)").matches&&this.bindMouseEvents(),this.bindKeyboardEvents()}disconnect(){this.unbindKeyboardEvents(),this.unbindMouseEvents(),super.disconnect()}show(e=null){const t=re.getControllerForElementAndIdentifier(this.element,"s-popover");t&&t.isVisible||super.show(e)}scheduleShow(e=null){window.clearTimeout(this.activeTimeout),this.activeTimeout=window.setTimeout((()=>this.show(e)),300)}scheduleHide(e=null){window.clearTimeout(this.activeTimeout),this.activeTimeout=window.setTimeout((()=>super.hide(e)),100)}clearActiveTimeout(){clearTimeout(this.activeTimeout)}applyTitleAttributes(){let e;const t=this.data.get("html-title");if(t)e=document.createRange().createContextualFragment(t);else{const t=this.element.getAttribute("title");if(!t)return null;e=document.createTextNode(t)}this.data.delete("html-title"),this.element.removeAttribute("title");let n=this.element.getAttribute("aria-describedby");n||(n=qt.generateId(),this.element.setAttribute("aria-describedby",n));let i=document.getElementById(n);if(!i){i=document.createElement("div"),i.id=n,i.className="s-popover s-popover__tooltip",i.setAttribute("role","tooltip");const e=this.element.parentNode;e?e.insertBefore(i,this.element.nextSibling):document.body.appendChild(i)}const s=i.querySelector(".s-popover--arrow");return i.innerHTML="",i.appendChild(e),s?i.appendChild(s):i.insertAdjacentHTML("beforeend",'<div class="s-popover--arrow"></div>'),this.scheduleUpdate(),i}bindDocumentEvents(){this.boundHideIfWithin=this.boundHideIfWithin||this.hideIfWithin.bind(this),document.addEventListener("s-popover:shown",this.boundHideIfWithin)}unbindDocumentEvents(){document.removeEventListener("s-popover:shown",this.boundHideIfWithin)}generatePopover(){return this.applyTitleAttributes()}hideIfWithin(e){e.target.contains(this.referenceElement)&&this.scheduleHide()}hideOnEscapeKeyEvent(e){"Escape"===e.key&&this.scheduleHide()}bindKeyboardEvents(){this.boundScheduleShow=this.boundScheduleShow||this.scheduleShow.bind(this),this.boundHide=this.boundHide||this.scheduleHide.bind(this),this.boundHideOnEscapeKeyEvent=this.boundHideOnEscapeKeyEvent||this.hideOnEscapeKeyEvent.bind(this),this.referenceElement.addEventListener("focus",this.boundScheduleShow),this.referenceElement.addEventListener("blur",this.boundHide),document.addEventListener("keyup",this.boundHideOnEscapeKeyEvent)}unbindKeyboardEvents(){this.referenceElement.removeEventListener("focus",this.boundScheduleShow),this.referenceElement.removeEventListener("blur",this.boundHide),document.removeEventListener("keyup",this.boundHideOnEscapeKeyEvent)}bindMouseEvents(){this.boundScheduleShow=this.boundScheduleShow||this.scheduleShow.bind(this),this.boundHide=this.boundHide||this.scheduleHide.bind(this),this.boundClearActiveTimeout=this.boundClearActiveTimeout||this.clearActiveTimeout.bind(this),this.referenceElement.addEventListener("mouseover",this.boundScheduleShow),this.referenceElement.addEventListener("mouseout",this.boundHide),this.popoverElement.addEventListener("mouseover",this.boundClearActiveTimeout),this.popoverElement.addEventListener("mouseout",this.boundHide)}unbindMouseEvents(){this.referenceElement.removeEventListener("mouseover",this.boundScheduleShow),this.referenceElement.removeEventListener("mouseout",this.boundHide),this.referenceElement.removeEventListener("focus",this.boundScheduleShow),this.referenceElement.removeEventListener("blur",this.boundHide),this.popoverElement.removeEventListener("mouseover",this.boundClearActiveTimeout),this.popoverElement.removeEventListener("mouseout",this.boundHide)}static generateId(){return"--stacks-s-tooltip-"+Math.random().toString(36).substring(2,10)}}function zt(e,t,n){e.setAttribute("data-s-tooltip-html-title",t),e.removeAttribute("title"),Xt(e,n)}function Jt(e,t,n){e.setAttribute("title",t),e.removeAttribute("data-s-tooltip-html-title"),Xt(e,n)}function Xt(e,t){t&&t.placement&&e.setAttribute("data-s-tooltip-placement",t.placement);const n=re.getControllerForElementAndIdentifier(e,"s-tooltip");if(n)n.applyTitleAttributes();else{const t=e.getAttribute("data-controller");e.setAttribute("data-controller",`${t||""} s-tooltip`)}}qt.targets=[];class Yt extends oe{connect(){super.connect(),this.boundDragEnter=this.handleUploaderActive.bind(this,!0),this.boundDragLeave=this.handleUploaderActive.bind(this,!1),this.inputTarget.addEventListener("dragenter",this.boundDragEnter),this.inputTarget.addEventListener("dragleave",this.boundDragLeave)}disconnect(){this.inputTarget.removeEventListener("dragenter",this.boundDragEnter),this.inputTarget.removeEventListener("dragleave",this.boundDragLeave),super.disconnect()}handleInput(){if(this.previewsTarget.innerHTML="",!this.inputTarget.files)return;const e=this.inputTarget.files.length;this.getDataURLs(this.inputTarget.files,Yt.FILE_DISPLAY_LIMIT).then((t=>{if(this.handleVisible(!0),t.length>1){const n=document.createElement("div");n.classList.add("s-uploader--previews-heading"),n.innerText=t.length<e?`Showing ${t.length} of ${e} files`:`${e} items`,this.previewsTarget.appendChild(n),this.previewsTarget.classList.add("has-multiple")}else this.previewsTarget.classList.remove("has-multiple");t.forEach((e=>this.addFilePreview(e))),this.handleUploaderActive(!0)})).catch((()=>null))}reset(){this.inputTarget.value="",this.previewsTarget.innerHTML="",this.handleVisible(!1)}handleVisible(e){const{scope:t}=this.targets,n=t.findAllElements("[data-s-uploader-hide-on-input]"),i=t.findAllElements("[data-s-uploader-show-on-input]"),s=t.findAllElements("[data-s-uploader-enable-on-input]");e?(n.forEach((e=>{e.classList.add("d-none")})),i.forEach((e=>{e.classList.remove("d-none")})),s.forEach((e=>{e.removeAttribute("disabled")}))):(n.forEach((e=>{e.classList.remove("d-none")})),i.forEach((e=>{e.classList.add("d-none")})),s.forEach((e=>{e.setAttribute("disabled","true")})),this.handleUploaderActive(!1))}addFilePreview(e){if(!e)return;const t=document.createElement("div");let n;e.type.match("image/*")&&e.data?(n=document.createElement("img"),n.src=e.data.toString(),n.alt=e.name):(n=document.createElement("div"),n.innerText=e.name),n.classList.add("s-uploader--preview-thumbnail"),t.appendChild(n),t.classList.add("s-uploader--preview"),t.setAttribute("data-filename",e.name),this.previewsTarget.appendChild(t)}handleUploaderActive(e){this.uploaderTarget.classList.toggle("is-active",e)}fileToDataURL(e){const t=new FileReader,{name:n,size:i,type:s}=e;return i<Yt.MAX_FILE_SIZE&&s.indexOf("image")>-1?new Promise(((i,r)=>{t.onload=e=>{var t;const o=null===(t=null==e?void 0:e.target)||void 0===t?void 0:t.result;o?i({data:o,name:n,type:s}):r()},t.readAsDataURL(e)})):Promise.resolve({name:n,type:s})}getDataURLs(e,t){const n=Array.from(e).slice(0,Math.min(t,e.length)).map((e=>this.fileToDataURL(e)));return Promise.all(n)}}return Yt.targets=["input","previews","uploader"],Yt.FILE_DISPLAY_LIMIT=10,Yt.MAX_FILE_SIZE=10485760,re.register("s-banner",ce),re.register("s-expandable-control",ve),re.register("s-modal",be),re.register("s-toast",Ht),re.register("s-navigation-tablist",Oe),re.register("s-popover",Nt),re.register("s-table",Kt),re.register("s-tooltip",qt),re.register("s-uploader",Yt),se.finalize(),t})()));
@@ -0,0 +1,155 @@
1
+ import { html, fixture, expect } from "@open-wc/testing";
2
+ import { screen, waitFor } from "@testing-library/dom";
3
+ import userEvent from "@testing-library/user-event";
4
+ import "../../index";
5
+
6
+ const user = userEvent.setup();
7
+
8
+ const createModal = ({
9
+ hidden = true,
10
+ initialFocusEl,
11
+ }: { hidden?: boolean; initialFocusEl?: ReturnType<typeof html> } = {}) => html`
12
+ <div data-controller="s-modal">
13
+ <button
14
+ class="s-btn"
15
+ data-action="s-modal#show"
16
+ data-testid="trigger">
17
+ Show Modal
18
+ </button>
19
+
20
+ <aside
21
+ class="s-modal"
22
+ id="modal-base"
23
+ tabindex="-1"
24
+ role="dialog"
25
+ aria-labelledby="modal-base-title"
26
+ aria-describedby="modal-base-description"
27
+ aria-hidden="${hidden}"
28
+ data-s-modal-target="modal"
29
+ data-testid="modal">
30
+ <div class="s-modal--dialog" role="document">
31
+ <h1 class="s-modal--header" id="modal-base-title">Title</h1>
32
+
33
+ <p class="s-modal--body">
34
+ <span id="modal-base-description">Description</span>
35
+ <form>
36
+ <input type="text" data-testid="first-focusable-element" />
37
+ ${initialFocusEl}
38
+ </form>
39
+ </p>
40
+
41
+ <div class="d-flex gx8 s-modal--footer">
42
+ <button class="flex--item s-btn s-btn__primary" type="button">Save changes</button>
43
+ <button class="flex--item s-btn" type="button" data-action="s-modal#hide">Cancel</button>
44
+ </div>
45
+
46
+ <button
47
+ class="s-btn s-btn__muted s-modal--close"
48
+ type="button"
49
+ aria-label="Close"
50
+ data-action="s-modal#hide"
51
+ data-testid="close-btn">
52
+ Close
53
+ </button>
54
+ </div>
55
+ </aside>
56
+ </div>
57
+ `;
58
+
59
+ describe("modal", () => {
60
+ it("should make the modal visible when toggle button is clicked", async () => {
61
+ await fixture(createModal());
62
+
63
+ const modal = await screen.findByTestId("modal");
64
+ const trigger = await screen.findByTestId("trigger");
65
+
66
+ expect(modal).not.to.be.visible;
67
+
68
+ await user.click(trigger);
69
+
70
+ expect(modal).to.be.visible;
71
+ });
72
+
73
+ it("should hide the modal when the close button is clicked", async () => {
74
+ await fixture(createModal({ hidden: false }));
75
+
76
+ const modal = await screen.findByTestId("modal");
77
+ const closeBtn = await screen.findByTestId("close-btn");
78
+
79
+ expect(modal).to.be.visible;
80
+
81
+ await user.click(closeBtn);
82
+
83
+ await waitFor(() => expect(modal).not.to.be.visible);
84
+ });
85
+
86
+ it('should focus on the first element with `data-s-modal-target"initialFocus"` when modal is shown', async () => {
87
+ await fixture(
88
+ createModal({
89
+ initialFocusEl: html`<input
90
+ type="text"
91
+ data-testid="initialFocus"
92
+ data-s-modal-target="initialFocus"
93
+ />`,
94
+ })
95
+ );
96
+
97
+ const modal = await screen.findByTestId("modal");
98
+ const trigger = await screen.findByTestId("trigger");
99
+ const initialFocusEl = await screen.findByTestId("initialFocus");
100
+
101
+ expect(modal).not.to.be.visible;
102
+
103
+ await user.click(trigger);
104
+ expect(modal).to.be.visible;
105
+
106
+ await waitFor(() => expect(initialFocusEl).to.have.focus);
107
+ });
108
+
109
+ it("should focus on the first focusable element when modal is shown and no initialFocus is specified", async () => {
110
+ await fixture(createModal());
111
+
112
+ const modal = await screen.findByTestId("modal");
113
+ const trigger = await screen.findByTestId("trigger");
114
+ const focusableEl = await screen.findByTestId(
115
+ "first-focusable-element"
116
+ );
117
+
118
+ expect(modal).not.to.be.visible;
119
+ expect(focusableEl).not.to.have.focus;
120
+
121
+ await user.click(trigger);
122
+ expect(modal).to.be.visible;
123
+
124
+ await waitFor(() => expect(focusableEl).to.have.focus);
125
+ });
126
+
127
+ it("should not change set focus when an element within the modal is already focused", async () => {
128
+ await fixture(createModal());
129
+
130
+ const modal = await screen.findByTestId("modal");
131
+ const trigger = await screen.findByTestId("trigger");
132
+ const firstFocusableEl = await screen.findByTestId(
133
+ "first-focusable-element"
134
+ );
135
+ const closeButton = await screen.findByTestId("close-btn");
136
+
137
+ expect(modal).not.to.be.visible;
138
+ expect(firstFocusableEl).not.to.have.focus;
139
+
140
+ await user.click(trigger);
141
+ expect(modal).to.be.visible;
142
+
143
+ // manually focus on an element within the modal
144
+ closeButton.focus();
145
+
146
+ // wait for s-modal:shown css transition to complete
147
+ await new Promise((resolve) =>
148
+ modal.addEventListener("s-modal:shown", resolve)
149
+ );
150
+
151
+ // check that focus stayed on the manually focused element and
152
+ // has not changed to the first focusable element
153
+ expect(closeButton).to.have.focus;
154
+ });
155
+ });
@@ -3,8 +3,8 @@ import * as Stacks from "../../stacks";
3
3
  export class ModalController extends Stacks.StacksController {
4
4
  static targets = ["modal", "initialFocus"];
5
5
 
6
- private modalTarget!: HTMLElement;
7
- private initialFocusTargets!: HTMLElement[];
6
+ declare readonly modalTarget: HTMLElement;
7
+ declare readonly initialFocusTargets: HTMLElement[];
8
8
 
9
9
  private _boundClickFn!: (event: MouseEvent) => void;
10
10
  private _boundKeypressFn!: (event: KeyboardEvent) => void;
@@ -228,7 +228,11 @@ export class ModalController extends Stacks.StacksController {
228
228
  const initialFocus =
229
229
  this.firstVisible(this.initialFocusTargets) ??
230
230
  this.firstVisible(this.getAllTabbables());
231
- initialFocus?.focus();
231
+
232
+ // Only set focus if focus is not already set on an element within the modal
233
+ if (!this.modalTarget.contains(document.activeElement)) {
234
+ initialFocus?.focus();
235
+ }
232
236
  },
233
237
  { once: true }
234
238
  );
@@ -12,8 +12,8 @@ export enum SortOrder {
12
12
  }
13
13
 
14
14
  export class TableController extends Stacks.StacksController {
15
- declare columnTarget: HTMLTableCellElement;
16
- declare columnTargets: HTMLTableCellElement[];
15
+ declare readonly columnTarget: HTMLTableCellElement;
16
+ declare readonly columnTargets: HTMLTableCellElement[];
17
17
 
18
18
  static targets = ["column"];
19
19
 
@@ -8,9 +8,10 @@ interface FilePreview {
8
8
 
9
9
  export class UploaderController extends Stacks.StacksController {
10
10
  static targets = ["input", "previews", "uploader"];
11
- private inputTarget!: HTMLInputElement;
12
- private previewsTarget!: HTMLElement;
13
- private uploaderTarget!: HTMLElement;
11
+
12
+ declare readonly inputTarget: HTMLInputElement;
13
+ declare readonly previewsTarget: HTMLElement;
14
+ declare readonly uploaderTarget: HTMLElement;
14
15
 
15
16
  private boundDragEnter!: () => void;
16
17
  private boundDragLeave!: () => void;
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "type": "git",
6
6
  "url": "https://github.com/StackExchange/Stacks.git"
7
7
  },
8
- "version": "2.0.6",
8
+ "version": "2.0.7",
9
9
  "files": [
10
10
  "dist",
11
11
  "lib"
@@ -45,17 +45,17 @@
45
45
  "devDependencies": {
46
46
  "@11ty/eleventy": "^2.0.1",
47
47
  "@highlightjs/cdn-assets": "^11.9.0",
48
- "@open-wc/testing": "^3.2.2",
48
+ "@open-wc/testing": "^4.0.0",
49
49
  "@rollup/plugin-commonjs": "^25.0.7",
50
50
  "@rollup/plugin-replace": "^5.0.5",
51
51
  "@stackoverflow/stacks-editor": "^0.9.1",
52
52
  "@stackoverflow/stacks-icons": "^6.0.0",
53
53
  "@testing-library/dom": "^9.3.3",
54
54
  "@testing-library/user-event": "^14.5.1",
55
- "@types/cssbeautify": "^0.3.4",
55
+ "@types/cssbeautify": "^0.3.5",
56
56
  "@types/less": "^3.0.5",
57
- "@types/mocha": "^10.0.3",
58
- "@typescript-eslint/eslint-plugin": "^6.9.1",
57
+ "@types/mocha": "^10.0.4",
58
+ "@typescript-eslint/eslint-plugin": "^6.10.0",
59
59
  "@typescript-eslint/parser": "^6.9.1",
60
60
  "@web/dev-server-esbuild": "^1.0.0",
61
61
  "@web/dev-server-rollup": "^0.6.0",
@@ -81,7 +81,7 @@
81
81
  "mini-css-extract-plugin": "^2.7.6",
82
82
  "postcss-less": "^6.0.0",
83
83
  "postcss-loader": "^7.3.3",
84
- "prettier": "^3.0.3",
84
+ "prettier": "^3.1.0",
85
85
  "rollup-plugin-postcss": "^4.0.2",
86
86
  "stylelint": "^15.11.0",
87
87
  "stylelint-config-recommended": "^13.0.0",