lightning_ui_kit 0.3.2 → 0.3.4

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.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/app/assets/stylesheets/lightning_ui_kit/application.css +1 -0
  4. data/app/assets/stylesheets/lightning_ui_kit/themes.css +15 -2
  5. data/app/assets/vendor/lightning_ui_kit.css +3568 -0
  6. data/app/assets/vendor/lightning_ui_kit.js +12 -0
  7. data/app/components/lightning_ui_kit/accordion/item_component.html.erb +30 -0
  8. data/app/components/lightning_ui_kit/accordion/item_component.rb +13 -0
  9. data/app/components/lightning_ui_kit/accordion_component.html.erb +5 -0
  10. data/app/components/lightning_ui_kit/accordion_component.rb +22 -0
  11. data/app/components/lightning_ui_kit/alert_component.html.erb +14 -3
  12. data/app/components/lightning_ui_kit/alert_component.rb +58 -5
  13. data/app/components/lightning_ui_kit/card_component.html.erb +34 -0
  14. data/app/components/lightning_ui_kit/card_component.rb +22 -0
  15. data/app/components/lightning_ui_kit/layout_component.html.erb +3 -3
  16. data/app/components/lightning_ui_kit/radio_group/option_component.html.erb +1 -0
  17. data/app/components/lightning_ui_kit/radio_group/option_component.rb +14 -0
  18. data/app/components/lightning_ui_kit/radio_group_component.html.erb +60 -0
  19. data/app/components/lightning_ui_kit/radio_group_component.rb +70 -0
  20. data/app/components/lightning_ui_kit/tabs/tab_component.html.erb +1 -0
  21. data/app/components/lightning_ui_kit/tabs/tab_component.rb +8 -0
  22. data/app/components/lightning_ui_kit/tabs_component.html.erb +30 -0
  23. data/app/components/lightning_ui_kit/tabs_component.rb +65 -0
  24. data/app/javascript/lightning_ui_kit/controllers/radio_group_controller.js +74 -0
  25. data/app/javascript/lightning_ui_kit/controllers/tabs_controller.js +77 -0
  26. data/app/javascript/lightning_ui_kit/index.js +6 -2
  27. data/lib/lightning_ui_kit/builder.rb +16 -4
  28. data/lib/lightning_ui_kit/version.rb +1 -1
  29. metadata +20 -4
  30. data/app/components/lightning_ui_kit/banner_component.html.erb +0 -17
  31. data/app/components/lightning_ui_kit/banner_component.rb +0 -33
  32. /data/app/javascript/lightning_ui_kit/controllers/{banner_controller.js → alert_controller.js} +0 -0
@@ -0,0 +1,12 @@
1
+ (()=>{var zs=Object.defineProperty,Xs=Object.defineProperties;var Js=Object.getOwnPropertyDescriptors;var Pe=Object.getOwnPropertySymbols;var Yt=Object.prototype.hasOwnProperty,Qt=Object.prototype.propertyIsEnumerable;var dt=(s,e,t)=>e in s?zs(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,V=(s,e)=>{for(var t in e||(e={}))Yt.call(e,t)&&dt(s,t,e[t]);if(Pe)for(var t of Pe(e))Qt.call(e,t)&&dt(s,t,e[t]);return s},z=(s,e)=>Xs(s,Js(e));var Re=(s,e)=>{var t={};for(var i in s)Yt.call(s,i)&&e.indexOf(i)<0&&(t[i]=s[i]);if(s!=null&&Pe)for(var i of Pe(s))e.indexOf(i)<0&&Qt.call(s,i)&&(t[i]=s[i]);return t};var O=(s,e,t)=>(dt(s,typeof e!="symbol"?e+"":e,t),t);var F=(s,e,t)=>new Promise((i,n)=>{var a=g=>{try{f(t.next(g))}catch(p){n(p)}},h=g=>{try{f(t.throw(g))}catch(p){n(p)}},f=g=>g.done?i(g.value):Promise.resolve(g.value).then(a,h);f((t=t.apply(s,e)).next())});var ft=class{constructor(e,t,i){this.eventTarget=e,this.eventName=t,this.eventOptions=i,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){let t=Ys(e);for(let i of this.bindings){if(t.immediatePropagationStopped)break;i.handleEvent(t)}}hasBindings(){return this.unorderedBindings.size>0}get bindings(){return Array.from(this.unorderedBindings).sort((e,t)=>{let i=e.index,n=t.index;return i<n?-1:i>n?1:0})}};function Ys(s){if("immediatePropagationStopped"in s)return s;{let{stopImmediatePropagation:e}=s;return Object.assign(s,{immediatePropagationStopped:!1,stopImmediatePropagation(){this.immediatePropagationStopped=!0,e.call(this)}})}}var gt=class{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,i={}){this.application.handleError(e,`Error ${t}`,i)}clearEventListenersForBinding(e){let t=this.fetchEventListenerForBinding(e);t.hasBindings()||(t.disconnect(),this.removeMappedEventListenerFor(e))}removeMappedEventListenerFor(e){let{eventTarget:t,eventName:i,eventOptions:n}=e,a=this.fetchEventListenerMapForEventTarget(t),h=this.cacheKey(i,n);a.delete(h),a.size==0&&this.eventListenerMaps.delete(t)}fetchEventListenerForBinding(e){let{eventTarget:t,eventName:i,eventOptions:n}=e;return this.fetchEventListener(t,i,n)}fetchEventListener(e,t,i){let n=this.fetchEventListenerMapForEventTarget(e),a=this.cacheKey(t,i),h=n.get(a);return h||(h=this.createEventListener(e,t,i),n.set(a,h)),h}createEventListener(e,t,i){let n=new ft(e,t,i);return this.started&&n.connect(),n}fetchEventListenerMapForEventTarget(e){let t=this.eventListenerMaps.get(e);return t||(t=new Map,this.eventListenerMaps.set(e,t)),t}cacheKey(e,t){let i=[e];return Object.keys(t).sort().forEach(n=>{i.push(`${t[n]?"":"!"}${n}`)}),i.join(":")}},Qs={stop({event:s,value:e}){return e&&s.stopPropagation(),!0},prevent({event:s,value:e}){return e&&s.preventDefault(),!0},self({event:s,value:e,element:t}){return e?t===s.target:!0}},Gs=/^(?:(?:([^.]+?)\+)?(.+?)(?:\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;function Zs(s){let t=s.trim().match(Gs)||[],i=t[2],n=t[3];return n&&!["keydown","keyup","keypress"].includes(i)&&(i+=`.${n}`,n=""),{eventTarget:ei(t[4]),eventName:i,eventOptions:t[7]?ti(t[7]):{},identifier:t[5],methodName:t[6],keyFilter:t[1]||n}}function ei(s){if(s=="window")return window;if(s=="document")return document}function ti(s){return s.split(":").reduce((e,t)=>Object.assign(e,{[t.replace(/^!/,"")]:!/^!/.test(t)}),{})}function si(s){if(s==window)return"window";if(s==document)return"document"}function Bt(s){return s.replace(/(?:[_-])([a-z0-9])/g,(e,t)=>t.toUpperCase())}function pt(s){return Bt(s.replace(/--/g,"-").replace(/__/g,"_"))}function Ee(s){return s.charAt(0).toUpperCase()+s.slice(1)}function as(s){return s.replace(/([A-Z])/g,(e,t)=>`-${t.toLowerCase()}`)}function ii(s){return s.match(/[^\s]+/g)||[]}function Gt(s){return s!=null}function mt(s,e){return Object.prototype.hasOwnProperty.call(s,e)}var Zt=["meta","ctrl","alt","shift"],bt=class{constructor(e,t,i,n){this.element=e,this.index=t,this.eventTarget=i.eventTarget||e,this.eventName=i.eventName||ni(e)||je("missing event name"),this.eventOptions=i.eventOptions||{},this.identifier=i.identifier||je("missing identifier"),this.methodName=i.methodName||je("missing method name"),this.keyFilter=i.keyFilter||"",this.schema=n}static forToken(e,t){return new this(e.element,e.index,Zs(e.content),t)}toString(){let 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;let t=this.keyFilter.split("+");if(this.keyFilterDissatisfied(e,t))return!0;let i=t.filter(n=>!Zt.includes(n))[0];return i?(mt(this.keyMappings,i)||je(`contains unknown key filter: ${this.keyFilter}`),this.keyMappings[i].toLowerCase()!==e.key.toLowerCase()):!1}shouldIgnoreMouseEvent(e){if(!this.keyFilter)return!1;let t=[this.keyFilter];return!!this.keyFilterDissatisfied(e,t)}get params(){let e={},t=new RegExp(`^data-${this.identifier}-(.+)-param$`,"i");for(let{name:i,value:n}of Array.from(this.element.attributes)){let a=i.match(t),h=a&&a[1];h&&(e[Bt(h)]=ri(n))}return e}get eventTargetName(){return si(this.eventTarget)}get keyMappings(){return this.schema.keyMappings}keyFilterDissatisfied(e,t){let[i,n,a,h]=Zt.map(f=>t.includes(f));return e.metaKey!==i||e.ctrlKey!==n||e.altKey!==a||e.shiftKey!==h}},es={a:()=>"click",button:()=>"click",form:()=>"submit",details:()=>"toggle",input:s=>s.getAttribute("type")=="submit"?"click":"input",select:()=>"change",textarea:()=>"input"};function ni(s){let e=s.tagName.toLowerCase();if(e in es)return es[e](s)}function je(s){throw new Error(s)}function ri(s){try{return JSON.parse(s)}catch(e){return s}}var vt=class{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){let t=this.prepareActionEvent(e);this.willBeInvokedByEvent(e)&&this.applyEventModifiers(t)&&this.invokeWithEvent(t)}get eventName(){return this.action.eventName}get method(){let e=this.controller[this.methodName];if(typeof e=="function")return e;throw new Error(`Action "${this.action}" references undefined method "${this.methodName}"`)}applyEventModifiers(e){let{element:t}=this.action,{actionDescriptorFilters:i}=this.context.application,{controller:n}=this.context,a=!0;for(let[h,f]of Object.entries(this.eventOptions))if(h in i){let g=i[h];a=a&&g({name:h,value:f,event:e,element:t,controller:n})}else continue;return a}prepareActionEvent(e){return Object.assign(e,{params:this.action.params})}invokeWithEvent(e){let{target:t,currentTarget:i}=e;try{this.method.call(this.controller,e),this.context.logDebugActivity(this.methodName,{event:e,target:t,currentTarget:i,action:this.methodName})}catch(n){let{identifier:a,controller:h,element:f,index:g}=this,p={identifier:a,controller:h,element:f,index:g,event:e};this.context.handleError(n,`invoking action "${this.action}"`,p)}}willBeInvokedByEvent(e){let t=e.target;return e instanceof KeyboardEvent&&this.action.shouldIgnoreKeyboardEvent(e)||e instanceof MouseEvent&&this.action.shouldIgnoreMouseEvent(e)?!1:this.element===t?!0: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}},_e=class{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(i=>this.processMutations(i))}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){let e=new Set(this.matchElementsInTree());for(let t of Array.from(this.elements))e.has(t)||this.removeElement(t);for(let t of Array.from(e))this.addElement(t)}}processMutations(e){if(this.started)for(let t of e)this.processMutation(t)}processMutation(e){e.type=="attributes"?this.processAttributeChange(e.target,e.attributeName):e.type=="childList"&&(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(let t of Array.from(e)){let i=this.elementFromNode(t);i&&this.processTree(i,this.removeElement)}}processAddedNodes(e){for(let t of Array.from(e)){let i=this.elementFromNode(t);i&&this.elementIsActive(i)&&this.processTree(i,this.addElement)}}matchElement(e){return this.delegate.matchElement(e)}matchElementsInTree(e=this.element){return this.delegate.matchElementsInTree(e)}processTree(e,t){for(let i of this.matchElementsInTree(e))t.call(this,i)}elementFromNode(e){if(e.nodeType==Node.ELEMENT_NODE)return e}elementIsActive(e){return e.isConnected!=this.element.isConnected?!1: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))}},He=class{constructor(e,t,i){this.attributeName=t,this.delegate=i,this.elementObserver=new _e(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){let t=this.matchElement(e)?[e]:[],i=Array.from(e.querySelectorAll(this.selector));return t.concat(i)}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 oi(s,e,t){ls(s,e).add(t)}function ai(s,e,t){ls(s,e).delete(t),li(s,e)}function ls(s,e){let t=s.get(e);return t||(t=new Set,s.set(e,t)),t}function li(s,e){let t=s.get(e);t!=null&&t.size==0&&s.delete(e)}var Q=class{constructor(){this.valuesByKey=new Map}get keys(){return Array.from(this.valuesByKey.keys())}get values(){return Array.from(this.valuesByKey.values()).reduce((t,i)=>t.concat(Array.from(i)),[])}get size(){return Array.from(this.valuesByKey.values()).reduce((t,i)=>t+i.size,0)}add(e,t){oi(this.valuesByKey,e,t)}delete(e,t){ai(this.valuesByKey,e,t)}has(e,t){let i=this.valuesByKey.get(e);return i!=null&&i.has(t)}hasKey(e){return this.valuesByKey.has(e)}hasValue(e){return Array.from(this.valuesByKey.values()).some(i=>i.has(e))}getValuesForKey(e){let t=this.valuesByKey.get(e);return t?Array.from(t):[]}getKeysForValue(e){return Array.from(this.valuesByKey).filter(([t,i])=>i.has(e)).map(([t,i])=>t)}};var yt=class{constructor(e,t,i,n){this._selector=t,this.details=n,this.elementObserver=new _e(e,this),this.delegate=i,this.matchesByElement=new Q}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){let{selector:t}=this;if(t){let i=e.matches(t);return this.delegate.selectorMatchElement?i&&this.delegate.selectorMatchElement(e,this.details):i}else return!1}matchElementsInTree(e){let{selector:t}=this;if(t){let i=this.matchElement(e)?[e]:[],n=Array.from(e.querySelectorAll(t)).filter(a=>this.matchElement(a));return i.concat(n)}else return[]}elementMatched(e){let{selector:t}=this;t&&this.selectorMatched(e,t)}elementUnmatched(e){let t=this.matchesByElement.getKeysForValue(e);for(let i of t)this.selectorUnmatched(e,i)}elementAttributeChanged(e,t){let{selector:i}=this;if(i){let n=this.matchElement(e),a=this.matchesByElement.has(i,e);n&&!a?this.selectorMatched(e,i):!n&&a&&this.selectorUnmatched(e,i)}}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)}},wt=class{constructor(e,t){this.element=e,this.delegate=t,this.started=!1,this.stringMap=new Map,this.mutationObserver=new MutationObserver(i=>this.processMutations(i))}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(let e of this.knownAttributeNames)this.refreshAttribute(e,null)}processMutations(e){if(this.started)for(let t of e)this.processMutation(t)}processMutation(e){let t=e.attributeName;t&&this.refreshAttribute(t,e.oldValue)}refreshAttribute(e,t){let i=this.delegate.getStringMapKeyForAttribute(e);if(i!=null){this.stringMap.has(e)||this.stringMapKeyAdded(i,e);let n=this.element.getAttribute(e);if(this.stringMap.get(e)!=n&&this.stringMapValueChanged(n,i,t),n==null){let a=this.stringMap.get(e);this.stringMap.delete(e),a&&this.stringMapKeyRemoved(i,e,a)}else this.stringMap.set(e,n)}}stringMapKeyAdded(e,t){this.delegate.stringMapKeyAdded&&this.delegate.stringMapKeyAdded(e,t)}stringMapValueChanged(e,t,i){this.delegate.stringMapValueChanged&&this.delegate.stringMapValueChanged(e,t,i)}stringMapKeyRemoved(e,t,i){this.delegate.stringMapKeyRemoved&&this.delegate.stringMapKeyRemoved(e,t,i)}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())}},Ue=class{constructor(e,t,i){this.attributeObserver=new He(e,t,this),this.delegate=i,this.tokensByElement=new Q}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){let[t,i]=this.refreshTokensForElement(e);this.tokensUnmatched(t),this.tokensMatched(i)}elementUnmatchedAttribute(e){this.tokensUnmatched(this.tokensByElement.getValuesForKey(e))}tokensMatched(e){e.forEach(t=>this.tokenMatched(t))}tokensUnmatched(e){e.forEach(t=>this.tokenUnmatched(t))}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){let t=this.tokensByElement.getValuesForKey(e),i=this.readTokensForElement(e),n=hi(t,i).findIndex(([a,h])=>!ui(a,h));return n==-1?[[],[]]:[t.slice(n),i.slice(n)]}readTokensForElement(e){let t=this.attributeName,i=e.getAttribute(t)||"";return ci(i,e,t)}};function ci(s,e,t){return s.trim().split(/\s+/).filter(i=>i.length).map((i,n)=>({element:e,attributeName:t,content:i,index:n}))}function hi(s,e){let t=Math.max(s.length,e.length);return Array.from({length:t},(i,n)=>[s[n],e[n]])}function ui(s,e){return s&&e&&s.index==e.index&&s.content==e.content}var qe=class{constructor(e,t,i){this.tokenListObserver=new Ue(e,t,this),this.delegate=i,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){let{element:t}=e,{value:i}=this.fetchParseResultForToken(e);i&&(this.fetchValuesByTokenForElement(t).set(e,i),this.delegate.elementMatchedValue(t,i))}tokenUnmatched(e){let{element:t}=e,{value:i}=this.fetchParseResultForToken(e);i&&(this.fetchValuesByTokenForElement(t).delete(e),this.delegate.elementUnmatchedValue(t,i))}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(t){return{error:t}}}},xt=class{constructor(e,t){this.context=e,this.delegate=t,this.bindingsByAction=new Map}start(){this.valueListObserver||(this.valueListObserver=new qe(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){let t=new vt(this.context,e);this.bindingsByAction.set(e,t),this.delegate.bindingConnected(t)}disconnectAction(e){let 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){let t=bt.forToken(e,this.schema);if(t.identifier==this.identifier)return t}elementMatchedValue(e,t){this.connectAction(t)}elementUnmatchedValue(e,t){this.disconnectAction(t)}},Et=class{constructor(e,t){this.context=e,this.receiver=t,this.stringMapObserver=new wt(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){let i=this.valueDescriptorMap[t];this.hasValue(e)||this.invokeChangedCallback(e,i.writer(this.receiver[e]),i.writer(i.defaultValue))}stringMapValueChanged(e,t,i){let n=this.valueDescriptorNameMap[t];e!==null&&(i===null&&(i=n.writer(n.defaultValue)),this.invokeChangedCallback(t,e,i))}stringMapKeyRemoved(e,t,i){let n=this.valueDescriptorNameMap[e];this.hasValue(e)?this.invokeChangedCallback(e,n.writer(this.receiver[e]),i):this.invokeChangedCallback(e,n.writer(n.defaultValue),i)}invokeChangedCallbacksForDefaultValues(){for(let{key:e,name:t,defaultValue:i,writer:n}of this.valueDescriptors)i!=null&&!this.controller.data.has(e)&&this.invokeChangedCallback(t,n(i),void 0)}invokeChangedCallback(e,t,i){let n=`${e}Changed`,a=this.receiver[n];if(typeof a=="function"){let h=this.valueDescriptorNameMap[e];try{let f=h.reader(t),g=i;i&&(g=h.reader(i)),a.call(this.receiver,f,g)}catch(f){throw f instanceof TypeError&&(f.message=`Stimulus Value "${this.context.identifier}.${h.name}" - ${f.message}`),f}}}get valueDescriptors(){let{valueDescriptorMap:e}=this;return Object.keys(e).map(t=>e[t])}get valueDescriptorNameMap(){let e={};return Object.keys(this.valueDescriptorMap).forEach(t=>{let i=this.valueDescriptorMap[t];e[i.name]=i}),e}hasValue(e){let t=this.valueDescriptorNameMap[e],i=`has${Ee(t.name)}`;return this.receiver[i]}},Ot=class{constructor(e,t){this.context=e,this.delegate=t,this.targetsByName=new Q}start(){this.tokenListObserver||(this.tokenListObserver=new Ue(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 i;this.targetsByName.has(t,e)||(this.targetsByName.add(t,e),(i=this.tokenListObserver)===null||i===void 0||i.pause(()=>this.delegate.targetConnected(e,t)))}disconnectTarget(e,t){var i;this.targetsByName.has(t,e)&&(this.targetsByName.delete(t,e),(i=this.tokenListObserver)===null||i===void 0||i.pause(()=>this.delegate.targetDisconnected(e,t)))}disconnectAllTargets(){for(let e of this.targetsByName.keys)for(let 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 Oe(s,e){let t=cs(s);return Array.from(t.reduce((i,n)=>(fi(n,e).forEach(a=>i.add(a)),i),new Set))}function di(s,e){return cs(s).reduce((i,n)=>(i.push(...gi(n,e)),i),[])}function cs(s){let e=[];for(;s;)e.push(s),s=Object.getPrototypeOf(s);return e.reverse()}function fi(s,e){let t=s[e];return Array.isArray(t)?t:[]}function gi(s,e){let t=s[e];return t?Object.keys(t).map(i=>[i,t[i]]):[]}var At=class{constructor(e,t){this.started=!1,this.context=e,this.delegate=t,this.outletsByName=new Q,this.outletElementsByName=new Q,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:i}){let n=this.getOutlet(e,i);n&&this.connectOutlet(n,e,i)}selectorUnmatched(e,t,{outletName:i}){let n=this.getOutletFromMap(e,i);n&&this.disconnectOutlet(n,e,i)}selectorMatchElement(e,{outletName:t}){let i=this.selector(t),n=this.hasOutlet(e,t),a=e.matches(`[${this.schema.controllerAttribute}~=${t}]`);return i?n&&a&&e.matches(i):!1}elementMatchedAttribute(e,t){let i=this.getOutletNameFromOutletAttributeName(t);i&&this.updateSelectorObserverForOutlet(i)}elementAttributeValueChanged(e,t){let i=this.getOutletNameFromOutletAttributeName(t);i&&this.updateSelectorObserverForOutlet(i)}elementUnmatchedAttribute(e,t){let i=this.getOutletNameFromOutletAttributeName(t);i&&this.updateSelectorObserverForOutlet(i)}connectOutlet(e,t,i){var n;this.outletElementsByName.has(i,t)||(this.outletsByName.add(i,e),this.outletElementsByName.add(i,t),(n=this.selectorObserverMap.get(i))===null||n===void 0||n.pause(()=>this.delegate.outletConnected(e,t,i)))}disconnectOutlet(e,t,i){var n;this.outletElementsByName.has(i,t)&&(this.outletsByName.delete(i,e),this.outletElementsByName.delete(i,t),(n=this.selectorObserverMap.get(i))===null||n===void 0||n.pause(()=>this.delegate.outletDisconnected(e,t,i)))}disconnectAllOutlets(){for(let e of this.outletElementsByName.keys)for(let t of this.outletElementsByName.getValuesForKey(e))for(let i of this.outletsByName.getValuesForKey(e))this.disconnectOutlet(i,t,e)}updateSelectorObserverForOutlet(e){let t=this.selectorObserverMap.get(e);t&&(t.selector=this.selector(e))}setupSelectorObserverForOutlet(e){let t=this.selector(e),i=new yt(document.body,t,this,{outletName:e});this.selectorObserverMap.set(e,i),i.start()}setupAttributeObserverForOutlet(e){let t=this.attributeNameForOutletName(e),i=new He(this.scope.element,t,this);this.attributeObserverMap.set(e,i),i.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(){let e=new Q;return this.router.modules.forEach(t=>{let i=t.definition.controllerConstructor;Oe(i,"outlets").forEach(a=>e.add(a,t.identifier))}),e}get outletDefinitions(){return this.outletDependencies.getKeysForValue(this.identifier)}get dependentControllerIdentifiers(){return this.outletDependencies.getValuesForKey(this.identifier)}get dependentContexts(){let 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(i=>i.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}},Tt=class{constructor(e,t){this.logDebugActivity=(i,n={})=>{let{identifier:a,controller:h,element:f}=this;n=Object.assign({identifier:a,controller:h,element:f},n),this.application.logDebugActivity(this.identifier,i,n)},this.module=e,this.scope=t,this.controller=new e.controllerConstructor(this),this.bindingObserver=new xt(this,this.dispatcher),this.valueObserver=new Et(this,this.controller),this.targetObserver=new Ot(this,this),this.outletObserver=new At(this,this);try{this.controller.initialize(),this.logDebugActivity("initialize")}catch(i){this.handleError(i,"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,i={}){let{identifier:n,controller:a,element:h}=this;i=Object.assign({identifier:n,controller:a,element:h},i),this.application.handleError(e,`Error ${t}`,i)}targetConnected(e,t){this.invokeControllerMethod(`${t}TargetConnected`,e)}targetDisconnected(e,t){this.invokeControllerMethod(`${t}TargetDisconnected`,e)}outletConnected(e,t,i){this.invokeControllerMethod(`${pt(i)}OutletConnected`,e,t)}outletDisconnected(e,t,i){this.invokeControllerMethod(`${pt(i)}OutletDisconnected`,e,t)}invokeControllerMethod(e,...t){let i=this.controller;typeof i[e]=="function"&&i[e](...t)}};function pi(s){return mi(s,bi(s))}function mi(s,e){let t=xi(s),i=vi(s.prototype,e);return Object.defineProperties(t.prototype,i),t}function bi(s){return Oe(s,"blessings").reduce((t,i)=>{let n=i(s);for(let a in n){let h=t[a]||{};t[a]=Object.assign(h,n[a])}return t},{})}function vi(s,e){return wi(e).reduce((t,i)=>{let n=yi(s,e,i);return n&&Object.assign(t,{[i]:n}),t},{})}function yi(s,e,t){let i=Object.getOwnPropertyDescriptor(s,t);if(!(i&&"value"in i)){let a=Object.getOwnPropertyDescriptor(e,t).value;return i&&(a.get=i.get||a.get,a.set=i.set||a.set),a}}var wi=(()=>typeof Object.getOwnPropertySymbols=="function"?s=>[...Object.getOwnPropertyNames(s),...Object.getOwnPropertySymbols(s)]:Object.getOwnPropertyNames)(),xi=(()=>{function s(t){function i(){return Reflect.construct(t,arguments,new.target)}return i.prototype=Object.create(t.prototype,{constructor:{value:i}}),Reflect.setPrototypeOf(i,t),i}function e(){let i=s(function(){this.a.call(this)});return i.prototype.a=function(){},new i}try{return e(),s}catch(t){return i=>class extends i{}}})();function Ei(s){return{identifier:s.identifier,controllerConstructor:pi(s.controllerConstructor)}}var Ct=class{constructor(e,t){this.application=e,this.definition=Ei(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){let t=this.fetchContextForScope(e);this.connectedContexts.add(t),t.connect()}disconnectContextForScope(e){let t=this.contextsByScope.get(e);t&&(this.connectedContexts.delete(t),t.disconnect())}fetchContextForScope(e){let t=this.contextsByScope.get(e);return t||(t=new Tt(this,e),this.contextsByScope.set(e,t)),t}},St=class{constructor(e){this.scope=e}has(e){return this.data.has(this.getDataKey(e))}get(e){return this.getAll(e)[0]}getAll(e){let t=this.data.get(this.getDataKey(e))||"";return ii(t)}getAttributeName(e){return this.data.getAttributeNameForKey(this.getDataKey(e))}getDataKey(e){return`${e}-class`}get data(){return this.scope.data}},Lt=class{constructor(e){this.scope=e}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get(e){let t=this.getAttributeNameForKey(e);return this.element.getAttribute(t)}set(e,t){let i=this.getAttributeNameForKey(e);return this.element.setAttribute(i,t),this.get(e)}has(e){let t=this.getAttributeNameForKey(e);return this.element.hasAttribute(t)}delete(e){if(this.has(e)){let t=this.getAttributeNameForKey(e);return this.element.removeAttribute(t),!0}else return!1}getAttributeNameForKey(e){return`data-${this.identifier}-${as(e)}`}},Ft=class{constructor(e){this.warnedKeysByObject=new WeakMap,this.logger=e}warn(e,t,i){let n=this.warnedKeysByObject.get(e);n||(n=new Set,this.warnedKeysByObject.set(e,n)),n.has(t)||(n.add(t),this.logger.warn(i,e))}};function Mt(s,e){return`[${s}~="${e}"]`}var kt=class{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 this.find(e)!=null}find(...e){return e.reduce((t,i)=>t||this.findTarget(i)||this.findLegacyTarget(i),void 0)}findAll(...e){return e.reduce((t,i)=>[...t,...this.findAllTargets(i),...this.findAllLegacyTargets(i)],[])}findTarget(e){let t=this.getSelectorForTargetName(e);return this.scope.findElement(t)}findAllTargets(e){let t=this.getSelectorForTargetName(e);return this.scope.findAllElements(t)}getSelectorForTargetName(e){let t=this.schema.targetAttributeForScope(this.identifier);return Mt(t,e)}findLegacyTarget(e){let t=this.getLegacySelectorForTargetName(e);return this.deprecate(this.scope.findElement(t),e)}findAllLegacyTargets(e){let t=this.getLegacySelectorForTargetName(e);return this.scope.findAllElements(t).map(i=>this.deprecate(i,e))}getLegacySelectorForTargetName(e){let t=`${this.identifier}.${e}`;return Mt(this.schema.targetAttribute,t)}deprecate(e,t){if(e){let{identifier:i}=this,n=this.schema.targetAttribute,a=this.schema.targetAttributeForScope(i);this.guide.warn(e,`target:${t}`,`Please replace ${n}="${i}.${t}" with ${a}="${t}". The ${n} attribute is deprecated and will be removed in a future version of Stimulus.`)}return e}get guide(){return this.scope.guide}},Dt=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 this.find(e)!=null}find(...e){return e.reduce((t,i)=>t||this.findOutlet(i),void 0)}findAll(...e){return e.reduce((t,i)=>[...t,...this.findAllOutlets(i)],[])}getSelectorForOutletName(e){let t=this.schema.outletAttributeForScope(this.identifier,e);return this.controllerElement.getAttribute(t)}findOutlet(e){let t=this.getSelectorForOutletName(e);if(t)return this.findElement(t,e)}findAllOutlets(e){let 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,i){let n=e.getAttribute(this.scope.schema.controllerAttribute)||"";return e.matches(t)&&n.split(" ").includes(i)}},we=class{constructor(e,t,i,n){this.targets=new kt(this),this.classes=new St(this),this.data=new Lt(this),this.containsElement=a=>a.closest(this.controllerSelector)===this.element,this.schema=e,this.element=t,this.identifier=i,this.guide=new Ft(n),this.outlets=new Dt(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 Mt(this.schema.controllerAttribute,this.identifier)}get isDocumentScope(){return this.element===document.documentElement}get documentScope(){return this.isDocumentScope?this:new we(this.schema,document.documentElement,this.identifier,this.guide.logger)}},Nt=class{constructor(e,t,i){this.element=e,this.schema=t,this.delegate=i,this.valueListObserver=new qe(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){let{element:t,content:i}=e;return this.parseValueForElementAndIdentifier(t,i)}parseValueForElementAndIdentifier(e,t){let i=this.fetchScopesByIdentifierForElement(e),n=i.get(t);return n||(n=this.delegate.createScopeForElementAndIdentifier(e,t),i.set(t,n)),n}elementMatchedValue(e,t){let i=(this.scopeReferenceCounts.get(t)||0)+1;this.scopeReferenceCounts.set(t,i),i==1&&this.delegate.scopeConnected(t)}elementUnmatchedValue(e,t){let i=this.scopeReferenceCounts.get(t);i&&(this.scopeReferenceCounts.set(t,i-1),i==1&&this.delegate.scopeDisconnected(t))}fetchScopesByIdentifierForElement(e){let t=this.scopesByIdentifierByElement.get(e);return t||(t=new Map,this.scopesByIdentifierByElement.set(e,t)),t}},$t=class{constructor(e){this.application=e,this.scopeObserver=new Nt(this.element,this.schema,this),this.scopesByIdentifier=new Q,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);let t=new Ct(this.application,e);this.connectModule(t);let i=e.controllerConstructor.afterLoad;i&&i.call(e.controllerConstructor,e.identifier,this.application)}unloadIdentifier(e){let t=this.modulesByIdentifier.get(e);t&&this.disconnectModule(t)}getContextForElementAndIdentifier(e,t){let i=this.modulesByIdentifier.get(t);if(i)return i.contexts.find(n=>n.element==e)}proposeToConnectScopeForElementAndIdentifier(e,t){let i=this.scopeObserver.parseValueForElementAndIdentifier(e,t);i?this.scopeObserver.elementMatchedValue(i.element,i):console.error(`Couldn't find or create scope for identifier: "${t}" and element:`,e)}handleError(e,t,i){this.application.handleError(e,t,i)}createScopeForElementAndIdentifier(e,t){return new we(this.schema,e,t,this.logger)}scopeConnected(e){this.scopesByIdentifier.add(e.identifier,e);let t=this.modulesByIdentifier.get(e.identifier);t&&t.connectContextForScope(e)}scopeDisconnected(e){this.scopesByIdentifier.delete(e.identifier,e);let t=this.modulesByIdentifier.get(e.identifier);t&&t.disconnectContextForScope(e)}connectModule(e){this.modulesByIdentifier.set(e.identifier,e),this.scopesByIdentifier.getValuesForKey(e.identifier).forEach(i=>e.connectContextForScope(i))}disconnectModule(e){this.modulesByIdentifier.delete(e.identifier),this.scopesByIdentifier.getValuesForKey(e.identifier).forEach(i=>e.disconnectContextForScope(i))}},Oi={controllerAttribute:"data-controller",actionAttribute:"data-action",targetAttribute:"data-target",targetAttributeForScope:s=>`data-${s}-target`,outletAttributeForScope:(s,e)=>`data-${s}-${e}-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"},ts("abcdefghijklmnopqrstuvwxyz".split("").map(s=>[s,s]))),ts("0123456789".split("").map(s=>[s,s])))};function ts(s){return s.reduce((e,[t,i])=>Object.assign(Object.assign({},e),{[t]:i}),{})}var Ke=class{constructor(e=document.documentElement,t=Oi){this.logger=console,this.debug=!1,this.logDebugActivity=(i,n,a={})=>{this.debug&&this.logFormattedMessage(i,n,a)},this.element=e,this.schema=t,this.dispatcher=new gt(this),this.router=new $t(this),this.actionDescriptorFilters=Object.assign({},Qs)}static start(e,t){let i=new this(e,t);return i.start(),i}start(){return F(this,null,function*(){yield Ai(),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(n=>{n.controllerConstructor.shouldLoad&&this.router.loadDefinition(n)})}unload(e,...t){(Array.isArray(e)?e:[e,...t]).forEach(n=>this.router.unloadIdentifier(n))}get controllers(){return this.router.contexts.map(e=>e.controller)}getControllerForElementAndIdentifier(e,t){let i=this.router.getContextForElementAndIdentifier(e,t);return i?i.controller:null}handleError(e,t,i){var n;this.logger.error(`%s
2
+
3
+ %o
4
+
5
+ %o`,t,e,i),(n=window.onerror)===null||n===void 0||n.call(window,t,"",0,0,e)}logFormattedMessage(e,t,i={}){i=Object.assign({application:this},i),this.logger.groupCollapsed(`${e} #${t}`),this.logger.log("details:",Object.assign({},i)),this.logger.groupEnd()}};function Ai(){return new Promise(s=>{document.readyState=="loading"?document.addEventListener("DOMContentLoaded",()=>s()):s()})}function Ti(s){return Oe(s,"classes").reduce((t,i)=>Object.assign(t,Ci(i)),{})}function Ci(s){return{[`${s}Class`]:{get(){let{classes:e}=this;if(e.has(s))return e.get(s);{let t=e.getAttributeName(s);throw new Error(`Missing attribute "${t}"`)}}},[`${s}Classes`]:{get(){return this.classes.getAll(s)}},[`has${Ee(s)}Class`]:{get(){return this.classes.has(s)}}}}function Si(s){return Oe(s,"outlets").reduce((t,i)=>Object.assign(t,Li(i)),{})}function ss(s,e,t){return s.application.getControllerForElementAndIdentifier(e,t)}function is(s,e,t){let i=ss(s,e,t);if(i||(s.application.router.proposeToConnectScopeForElementAndIdentifier(e,t),i=ss(s,e,t),i))return i}function Li(s){let e=pt(s);return{[`${e}Outlet`]:{get(){let t=this.outlets.find(s),i=this.outlets.getSelectorForOutletName(s);if(t){let n=is(this,t,s);if(n)return n;throw new Error(`The provided outlet element is missing an outlet controller "${s}" instance for host controller "${this.identifier}"`)}throw new Error(`Missing outlet element "${s}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${i}".`)}},[`${e}Outlets`]:{get(){let t=this.outlets.findAll(s);return t.length>0?t.map(i=>{let n=is(this,i,s);if(n)return n;console.warn(`The provided outlet element is missing an outlet controller "${s}" instance for host controller "${this.identifier}"`,i)}).filter(i=>i):[]}},[`${e}OutletElement`]:{get(){let t=this.outlets.find(s),i=this.outlets.getSelectorForOutletName(s);if(t)return t;throw new Error(`Missing outlet element "${s}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${i}".`)}},[`${e}OutletElements`]:{get(){return this.outlets.findAll(s)}},[`has${Ee(e)}Outlet`]:{get(){return this.outlets.has(s)}}}}function Fi(s){return Oe(s,"targets").reduce((t,i)=>Object.assign(t,Mi(i)),{})}function Mi(s){return{[`${s}Target`]:{get(){let e=this.targets.find(s);if(e)return e;throw new Error(`Missing target element "${s}" for "${this.identifier}" controller`)}},[`${s}Targets`]:{get(){return this.targets.findAll(s)}},[`has${Ee(s)}Target`]:{get(){return this.targets.has(s)}}}}function ki(s){let e=di(s,"values"),t={valueDescriptorMap:{get(){return e.reduce((i,n)=>{let a=hs(n,this.identifier),h=this.data.getAttributeNameForKey(a.key);return Object.assign(i,{[h]:a})},{})}}};return e.reduce((i,n)=>Object.assign(i,Di(n)),t)}function Di(s,e){let t=hs(s,e),{key:i,name:n,reader:a,writer:h}=t;return{[n]:{get(){let f=this.data.get(i);return f!==null?a(f):t.defaultValue},set(f){f===void 0?this.data.delete(i):this.data.set(i,h(f))}},[`has${Ee(n)}`]:{get(){return this.data.has(i)||t.hasCustomDefaultValue}}}}function hs([s,e],t){return Vi({controller:t,token:s,typeDefinition:e})}function We(s){switch(s){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function xe(s){switch(typeof s){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}if(Array.isArray(s))return"array";if(Object.prototype.toString.call(s)==="[object Object]")return"object"}function Ni(s){let{controller:e,token:t,typeObject:i}=s,n=Gt(i.type),a=Gt(i.default),h=n&&a,f=n&&!a,g=!n&&a,p=We(i.type),b=xe(s.typeObject.default);if(f)return p;if(g)return b;if(p!==b){let m=e?`${e}.${t}`:t;throw new Error(`The specified default value for the Stimulus Value "${m}" must match the defined type "${p}". The provided default value of "${i.default}" is of type "${b}".`)}if(h)return p}function $i(s){let{controller:e,token:t,typeDefinition:i}=s,a=Ni({controller:e,token:t,typeObject:i}),h=xe(i),f=We(i),g=a||h||f;if(g)return g;let p=e?`${e}.${i}`:t;throw new Error(`Unknown value type "${p}" for "${t}" value`)}function Bi(s){let e=We(s);if(e)return ns[e];let t=mt(s,"default"),i=mt(s,"type"),n=s;if(t)return n.default;if(i){let{type:a}=n,h=We(a);if(h)return ns[h]}return s}function Vi(s){let{token:e,typeDefinition:t}=s,i=`${as(e)}-value`,n=$i(s);return{type:n,key:i,name:Bt(i),get defaultValue(){return Bi(t)},get hasCustomDefaultValue(){return xe(t)!==void 0},reader:Ii[n],writer:rs[n]||rs.default}}var ns={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},Ii={array(s){let e=JSON.parse(s);if(!Array.isArray(e))throw new TypeError(`expected value of type "array" but instead got value "${s}" of type "${xe(e)}"`);return e},boolean(s){return!(s=="0"||String(s).toLowerCase()=="false")},number(s){return Number(s.replace(/_/g,""))},object(s){let e=JSON.parse(s);if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError(`expected value of type "object" but instead got value "${s}" of type "${xe(e)}"`);return e},string(s){return s}},rs={default:Pi,array:os,object:os};function os(s){return JSON.stringify(s)}function Pi(s){return`${s}`}var A=class{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:i={},prefix:n=this.identifier,bubbles:a=!0,cancelable:h=!0}={}){let f=n?`${n}:${e}`:e,g=new CustomEvent(f,{detail:i,bubbles:a,cancelable:h});return t.dispatchEvent(g),g}};A.blessings=[Ti,Fi,ki,Si];A.targets=[];A.outlets=[];A.values={};var fs={exports:{}};(function(s,e){(function(t){s.exports=t()})(function(t){var i=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];function n(d,u){var o=d[0],r=d[1],l=d[2],c=d[3];o+=(r&l|~r&c)+u[0]-680876936|0,o=(o<<7|o>>>25)+r|0,c+=(o&r|~o&l)+u[1]-389564586|0,c=(c<<12|c>>>20)+o|0,l+=(c&o|~c&r)+u[2]+606105819|0,l=(l<<17|l>>>15)+c|0,r+=(l&c|~l&o)+u[3]-1044525330|0,r=(r<<22|r>>>10)+l|0,o+=(r&l|~r&c)+u[4]-176418897|0,o=(o<<7|o>>>25)+r|0,c+=(o&r|~o&l)+u[5]+1200080426|0,c=(c<<12|c>>>20)+o|0,l+=(c&o|~c&r)+u[6]-1473231341|0,l=(l<<17|l>>>15)+c|0,r+=(l&c|~l&o)+u[7]-45705983|0,r=(r<<22|r>>>10)+l|0,o+=(r&l|~r&c)+u[8]+1770035416|0,o=(o<<7|o>>>25)+r|0,c+=(o&r|~o&l)+u[9]-1958414417|0,c=(c<<12|c>>>20)+o|0,l+=(c&o|~c&r)+u[10]-42063|0,l=(l<<17|l>>>15)+c|0,r+=(l&c|~l&o)+u[11]-1990404162|0,r=(r<<22|r>>>10)+l|0,o+=(r&l|~r&c)+u[12]+1804603682|0,o=(o<<7|o>>>25)+r|0,c+=(o&r|~o&l)+u[13]-40341101|0,c=(c<<12|c>>>20)+o|0,l+=(c&o|~c&r)+u[14]-1502002290|0,l=(l<<17|l>>>15)+c|0,r+=(l&c|~l&o)+u[15]+1236535329|0,r=(r<<22|r>>>10)+l|0,o+=(r&c|l&~c)+u[1]-165796510|0,o=(o<<5|o>>>27)+r|0,c+=(o&l|r&~l)+u[6]-1069501632|0,c=(c<<9|c>>>23)+o|0,l+=(c&r|o&~r)+u[11]+643717713|0,l=(l<<14|l>>>18)+c|0,r+=(l&o|c&~o)+u[0]-373897302|0,r=(r<<20|r>>>12)+l|0,o+=(r&c|l&~c)+u[5]-701558691|0,o=(o<<5|o>>>27)+r|0,c+=(o&l|r&~l)+u[10]+38016083|0,c=(c<<9|c>>>23)+o|0,l+=(c&r|o&~r)+u[15]-660478335|0,l=(l<<14|l>>>18)+c|0,r+=(l&o|c&~o)+u[4]-405537848|0,r=(r<<20|r>>>12)+l|0,o+=(r&c|l&~c)+u[9]+568446438|0,o=(o<<5|o>>>27)+r|0,c+=(o&l|r&~l)+u[14]-1019803690|0,c=(c<<9|c>>>23)+o|0,l+=(c&r|o&~r)+u[3]-187363961|0,l=(l<<14|l>>>18)+c|0,r+=(l&o|c&~o)+u[8]+1163531501|0,r=(r<<20|r>>>12)+l|0,o+=(r&c|l&~c)+u[13]-1444681467|0,o=(o<<5|o>>>27)+r|0,c+=(o&l|r&~l)+u[2]-51403784|0,c=(c<<9|c>>>23)+o|0,l+=(c&r|o&~r)+u[7]+1735328473|0,l=(l<<14|l>>>18)+c|0,r+=(l&o|c&~o)+u[12]-1926607734|0,r=(r<<20|r>>>12)+l|0,o+=(r^l^c)+u[5]-378558|0,o=(o<<4|o>>>28)+r|0,c+=(o^r^l)+u[8]-2022574463|0,c=(c<<11|c>>>21)+o|0,l+=(c^o^r)+u[11]+1839030562|0,l=(l<<16|l>>>16)+c|0,r+=(l^c^o)+u[14]-35309556|0,r=(r<<23|r>>>9)+l|0,o+=(r^l^c)+u[1]-1530992060|0,o=(o<<4|o>>>28)+r|0,c+=(o^r^l)+u[4]+1272893353|0,c=(c<<11|c>>>21)+o|0,l+=(c^o^r)+u[7]-155497632|0,l=(l<<16|l>>>16)+c|0,r+=(l^c^o)+u[10]-1094730640|0,r=(r<<23|r>>>9)+l|0,o+=(r^l^c)+u[13]+681279174|0,o=(o<<4|o>>>28)+r|0,c+=(o^r^l)+u[0]-358537222|0,c=(c<<11|c>>>21)+o|0,l+=(c^o^r)+u[3]-722521979|0,l=(l<<16|l>>>16)+c|0,r+=(l^c^o)+u[6]+76029189|0,r=(r<<23|r>>>9)+l|0,o+=(r^l^c)+u[9]-640364487|0,o=(o<<4|o>>>28)+r|0,c+=(o^r^l)+u[12]-421815835|0,c=(c<<11|c>>>21)+o|0,l+=(c^o^r)+u[15]+530742520|0,l=(l<<16|l>>>16)+c|0,r+=(l^c^o)+u[2]-995338651|0,r=(r<<23|r>>>9)+l|0,o+=(l^(r|~c))+u[0]-198630844|0,o=(o<<6|o>>>26)+r|0,c+=(r^(o|~l))+u[7]+1126891415|0,c=(c<<10|c>>>22)+o|0,l+=(o^(c|~r))+u[14]-1416354905|0,l=(l<<15|l>>>17)+c|0,r+=(c^(l|~o))+u[5]-57434055|0,r=(r<<21|r>>>11)+l|0,o+=(l^(r|~c))+u[12]+1700485571|0,o=(o<<6|o>>>26)+r|0,c+=(r^(o|~l))+u[3]-1894986606|0,c=(c<<10|c>>>22)+o|0,l+=(o^(c|~r))+u[10]-1051523|0,l=(l<<15|l>>>17)+c|0,r+=(c^(l|~o))+u[1]-2054922799|0,r=(r<<21|r>>>11)+l|0,o+=(l^(r|~c))+u[8]+1873313359|0,o=(o<<6|o>>>26)+r|0,c+=(r^(o|~l))+u[15]-30611744|0,c=(c<<10|c>>>22)+o|0,l+=(o^(c|~r))+u[6]-1560198380|0,l=(l<<15|l>>>17)+c|0,r+=(c^(l|~o))+u[13]+1309151649|0,r=(r<<21|r>>>11)+l|0,o+=(l^(r|~c))+u[4]-145523070|0,o=(o<<6|o>>>26)+r|0,c+=(r^(o|~l))+u[11]-1120210379|0,c=(c<<10|c>>>22)+o|0,l+=(o^(c|~r))+u[2]+718787259|0,l=(l<<15|l>>>17)+c|0,r+=(c^(l|~o))+u[9]-343485551|0,r=(r<<21|r>>>11)+l|0,d[0]=o+d[0]|0,d[1]=r+d[1]|0,d[2]=l+d[2]|0,d[3]=c+d[3]|0}function a(d){var u=[],o;for(o=0;o<64;o+=4)u[o>>2]=d.charCodeAt(o)+(d.charCodeAt(o+1)<<8)+(d.charCodeAt(o+2)<<16)+(d.charCodeAt(o+3)<<24);return u}function h(d){var u=[],o;for(o=0;o<64;o+=4)u[o>>2]=d[o]+(d[o+1]<<8)+(d[o+2]<<16)+(d[o+3]<<24);return u}function f(d){var u=d.length,o=[1732584193,-271733879,-1732584194,271733878],r,l,c,C,S,T;for(r=64;r<=u;r+=64)n(o,a(d.substring(r-64,r)));for(d=d.substring(r-64),l=d.length,c=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],r=0;r<l;r+=1)c[r>>2]|=d.charCodeAt(r)<<(r%4<<3);if(c[r>>2]|=128<<(r%4<<3),r>55)for(n(o,c),r=0;r<16;r+=1)c[r]=0;return C=u*8,C=C.toString(16).match(/(.*?)(.{0,8})$/),S=parseInt(C[2],16),T=parseInt(C[1],16)||0,c[14]=S,c[15]=T,n(o,c),o}function g(d){var u=d.length,o=[1732584193,-271733879,-1732584194,271733878],r,l,c,C,S,T;for(r=64;r<=u;r+=64)n(o,h(d.subarray(r-64,r)));for(d=r-64<u?d.subarray(r-64):new Uint8Array(0),l=d.length,c=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],r=0;r<l;r+=1)c[r>>2]|=d[r]<<(r%4<<3);if(c[r>>2]|=128<<(r%4<<3),r>55)for(n(o,c),r=0;r<16;r+=1)c[r]=0;return C=u*8,C=C.toString(16).match(/(.*?)(.{0,8})$/),S=parseInt(C[2],16),T=parseInt(C[1],16)||0,c[14]=S,c[15]=T,n(o,c),o}function p(d){var u="",o;for(o=0;o<4;o+=1)u+=i[d>>o*8+4&15]+i[d>>o*8&15];return u}function b(d){var u;for(u=0;u<d.length;u+=1)d[u]=p(d[u]);return d.join("")}b(f("hello")),typeof ArrayBuffer!="undefined"&&!ArrayBuffer.prototype.slice&&function(){function d(u,o){return u=u|0||0,u<0?Math.max(u+o,0):Math.min(u,o)}ArrayBuffer.prototype.slice=function(u,o){var r=this.byteLength,l=d(u,r),c=r,C,S,T,L;return o!==t&&(c=d(o,r)),l>c?new ArrayBuffer(0):(C=c-l,S=new ArrayBuffer(C),T=new Uint8Array(S),L=new Uint8Array(this,l,C),T.set(L),S)}}();function m(d){return/[\u0080-\uFFFF]/.test(d)&&(d=unescape(encodeURIComponent(d))),d}function w(d,u){var o=d.length,r=new ArrayBuffer(o),l=new Uint8Array(r),c;for(c=0;c<o;c+=1)l[c]=d.charCodeAt(c);return u?l:r}function v(d){return String.fromCharCode.apply(null,new Uint8Array(d))}function x(d,u,o){var r=new Uint8Array(d.byteLength+u.byteLength);return r.set(new Uint8Array(d)),r.set(new Uint8Array(u),d.byteLength),o?r:r.buffer}function E(d){var u=[],o=d.length,r;for(r=0;r<o-1;r+=2)u.push(parseInt(d.substr(r,2),16));return String.fromCharCode.apply(String,u)}function y(){this.reset()}return y.prototype.append=function(d){return this.appendBinary(m(d)),this},y.prototype.appendBinary=function(d){this._buff+=d,this._length+=d.length;var u=this._buff.length,o;for(o=64;o<=u;o+=64)n(this._hash,a(this._buff.substring(o-64,o)));return this._buff=this._buff.substring(o-64),this},y.prototype.end=function(d){var u=this._buff,o=u.length,r,l=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],c;for(r=0;r<o;r+=1)l[r>>2]|=u.charCodeAt(r)<<(r%4<<3);return this._finish(l,o),c=b(this._hash),d&&(c=E(c)),this.reset(),c},y.prototype.reset=function(){return this._buff="",this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},y.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash.slice()}},y.prototype.setState=function(d){return this._buff=d.buff,this._length=d.length,this._hash=d.hash,this},y.prototype.destroy=function(){delete this._hash,delete this._buff,delete this._length},y.prototype._finish=function(d,u){var o=u,r,l,c;if(d[o>>2]|=128<<(o%4<<3),o>55)for(n(this._hash,d),o=0;o<16;o+=1)d[o]=0;r=this._length*8,r=r.toString(16).match(/(.*?)(.{0,8})$/),l=parseInt(r[2],16),c=parseInt(r[1],16)||0,d[14]=l,d[15]=c,n(this._hash,d)},y.hash=function(d,u){return y.hashBinary(m(d),u)},y.hashBinary=function(d,u){var o=f(d),r=b(o);return u?E(r):r},y.ArrayBuffer=function(){this.reset()},y.ArrayBuffer.prototype.append=function(d){var u=x(this._buff.buffer,d,!0),o=u.length,r;for(this._length+=d.byteLength,r=64;r<=o;r+=64)n(this._hash,h(u.subarray(r-64,r)));return this._buff=r-64<o?new Uint8Array(u.buffer.slice(r-64)):new Uint8Array(0),this},y.ArrayBuffer.prototype.end=function(d){var u=this._buff,o=u.length,r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],l,c;for(l=0;l<o;l+=1)r[l>>2]|=u[l]<<(l%4<<3);return this._finish(r,o),c=b(this._hash),d&&(c=E(c)),this.reset(),c},y.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},y.ArrayBuffer.prototype.getState=function(){var d=y.prototype.getState.call(this);return d.buff=v(d.buff),d},y.ArrayBuffer.prototype.setState=function(d){return d.buff=w(d.buff,!0),y.prototype.setState.call(this,d)},y.ArrayBuffer.prototype.destroy=y.prototype.destroy,y.ArrayBuffer.prototype._finish=y.prototype._finish,y.ArrayBuffer.hash=function(d,u){var o=g(new Uint8Array(d)),r=b(o);return u?E(r):r},y})})(fs);var Ri=fs.exports,ji=File.prototype.slice||File.prototype.mozSlice||File.prototype.webkitSlice,Ae=class{static create(e,t){new Ae(e).create(t)}constructor(e){this.file=e,this.chunkSize=2097152,this.chunkCount=Math.ceil(this.file.size/this.chunkSize),this.chunkIndex=0}create(e){this.callback=e,this.md5Buffer=new Ri.ArrayBuffer,this.fileReader=new FileReader,this.fileReader.addEventListener("load",t=>this.fileReaderDidLoad(t)),this.fileReader.addEventListener("error",t=>this.fileReaderDidError(t)),this.readNextChunk()}fileReaderDidLoad(e){if(this.md5Buffer.append(e.target.result),!this.readNextChunk()){let t=this.md5Buffer.end(!0),i=btoa(t);this.callback(null,i)}}fileReaderDidError(e){this.callback(`Error reading ${this.file.name}`)}readNextChunk(){if(this.chunkIndex<this.chunkCount||this.chunkIndex==0&&this.chunkCount==0){let e=this.chunkIndex*this.chunkSize,t=Math.min(e+this.chunkSize,this.file.size),i=ji.call(this.file,e,t);return this.fileReader.readAsArrayBuffer(i),this.chunkIndex++,!0}else return!1}};function _i(s){let e=gs(document.head,`meta[name="${s}"]`);if(e)return e.getAttribute("content")}function Hi(s,e){typeof s=="string"&&(e=s,s=document);let t=s.querySelectorAll(e);return ms(t)}function gs(s,e){return typeof s=="string"&&(e=s,s=document),s.querySelector(e)}function ps(s,e,t={}){let{disabled:i}=s,{bubbles:n,cancelable:a,detail:h}=t,f=document.createEvent("Event");f.initEvent(e,n||!0,a||!0),f.detail=h||{};try{s.disabled=!1,s.dispatchEvent(f)}finally{s.disabled=i}return f}function ms(s){return Array.isArray(s)?s:Array.from?Array.from(s):[].slice.call(s)}var It=class{constructor(e,t,i,n={}){this.file=e,this.attributes={filename:e.name,content_type:e.type||"application/octet-stream",byte_size:e.size,checksum:t},this.xhr=new XMLHttpRequest,this.xhr.open("POST",i,!0),this.xhr.responseType="json",this.xhr.setRequestHeader("Content-Type","application/json"),this.xhr.setRequestHeader("Accept","application/json"),this.xhr.setRequestHeader("X-Requested-With","XMLHttpRequest"),Object.keys(n).forEach(h=>{this.xhr.setRequestHeader(h,n[h])});let a=_i("csrf-token");a!=null&&this.xhr.setRequestHeader("X-CSRF-Token",a),this.xhr.addEventListener("load",h=>this.requestDidLoad(h)),this.xhr.addEventListener("error",h=>this.requestDidError(h))}get status(){return this.xhr.status}get response(){let{responseType:e,response:t}=this.xhr;return e=="json"?t:JSON.parse(t)}create(e){this.callback=e,this.xhr.send(JSON.stringify({blob:this.attributes}))}requestDidLoad(e){if(this.status>=200&&this.status<300){let{response:t}=this,{direct_upload:i}=t;delete t.direct_upload,this.attributes=t,this.directUploadData=i,this.callback(null,this.toJSON())}else this.requestDidError(e)}requestDidError(e){this.callback(`Error creating Blob for "${this.file.name}". Status: ${this.status}`)}toJSON(){let e={};for(let t in this.attributes)e[t]=this.attributes[t];return e}},Pt=class{constructor(e){this.blob=e,this.file=e.file;let{url:t,headers:i}=e.directUploadData;this.xhr=new XMLHttpRequest,this.xhr.open("PUT",t,!0),this.xhr.responseType="text";for(let n in i)this.xhr.setRequestHeader(n,i[n]);this.xhr.addEventListener("load",n=>this.requestDidLoad(n)),this.xhr.addEventListener("error",n=>this.requestDidError(n))}create(e){this.callback=e,this.xhr.send(this.file.slice())}requestDidLoad(e){let{status:t,response:i}=this.xhr;t>=200&&t<300?this.callback(null,i):this.requestDidError(e)}requestDidError(e){this.callback(`Error storing "${this.file.name}". Status: ${this.xhr.status}`)}},Ui=0,Te=class{constructor(e,t,i,n={}){this.id=++Ui,this.file=e,this.url=t,this.delegate=i,this.customHeaders=n}create(e){Ae.create(this.file,(t,i)=>{if(t){e(t);return}let n=new It(this.file,i,this.url,this.customHeaders);us(this.delegate,"directUploadWillCreateBlobWithXHR",n.xhr),n.create(a=>{if(a)e(a);else{let h=new Pt(n);us(this.delegate,"directUploadWillStoreFileWithXHR",h.xhr),h.create(f=>{f?e(f):e(null,n.toJSON())})}})})}};function us(s,e,...t){if(s&&typeof s[e]=="function")return s[e](...t)}var Rt=class{constructor(e,t){this.input=e,this.file=t,this.directUpload=new Te(this.file,this.url,this),this.dispatch("initialize")}start(e){let t=document.createElement("input");t.type="hidden",t.name=this.input.name,this.input.insertAdjacentElement("beforebegin",t),this.dispatch("start"),this.directUpload.create((i,n)=>{i?(t.parentNode.removeChild(t),this.dispatchError(i)):t.value=n.signed_id,this.dispatch("end"),e(i)})}uploadRequestDidProgress(e){let t=e.loaded/e.total*100;t&&this.dispatch("progress",{progress:t})}get url(){return this.input.getAttribute("data-direct-upload-url")}dispatch(e,t={}){return t.file=this.file,t.id=this.directUpload.id,ps(this.input,`direct-upload:${e}`,{detail:t})}dispatchError(e){this.dispatch("error",{error:e}).defaultPrevented||alert(e)}directUploadWillCreateBlobWithXHR(e){this.dispatch("before-blob-request",{xhr:e})}directUploadWillStoreFileWithXHR(e){this.dispatch("before-storage-request",{xhr:e}),e.upload.addEventListener("progress",t=>this.uploadRequestDidProgress(t))}},qi="input[type=file][data-direct-upload-url]:not([disabled])",jt=class{constructor(e){this.form=e,this.inputs=Hi(e,qi).filter(t=>t.files.length)}start(e){let t=this.createDirectUploadControllers(),i=()=>{let n=t.shift();n?n.start(a=>{a?(e(a),this.dispatch("end")):i()}):(e(),this.dispatch("end"))};this.dispatch("start"),i()}createDirectUploadControllers(){let e=[];return this.inputs.forEach(t=>{ms(t.files).forEach(i=>{let n=new Rt(t,i);e.push(n)})}),e}dispatch(e,t={}){return ps(this.form,`direct-uploads:${e}`,{detail:t})}},Vt="data-direct-uploads-processing",_t=new WeakMap,ds=!1;function Ht(){ds||(ds=!0,document.addEventListener("click",Ki,!0),document.addEventListener("submit",Wi,!0),document.addEventListener("ajax:before",zi))}function Ki(s){let e=s.target.closest("button, input");e&&e.type==="submit"&&e.form&&_t.set(e.form,e)}function Wi(s){bs(s)}function zi(s){s.target.tagName=="FORM"&&bs(s)}function bs(s){let e=s.target;if(e.hasAttribute(Vt)){s.preventDefault();return}let t=new jt(e),{inputs:i}=t;i.length&&(s.preventDefault(),e.setAttribute(Vt,""),i.forEach(Ji),t.start(n=>{e.removeAttribute(Vt),n?i.forEach(Yi):Xi(e)}))}function Xi(s){let e=_t.get(s)||gs(s,"input[type=submit], button[type=submit]");if(e){let{disabled:t}=e;e.disabled=!1,e.focus(),e.click(),e.disabled=t}else e=document.createElement("input"),e.type="submit",e.style.display="none",s.appendChild(e),e.click(),s.removeChild(e);_t.delete(s)}function Ji(s){s.disabled=!0}function Yi(s){s.disabled=!1}function Qi(){window.ActiveStorage&&Ht()}setTimeout(Qi,1);var Ce=class extends A{connect(){this.hasInputTarget&&(this.inputTarget.disabled=!0)}copy(s){if(s.preventDefault(),!this.hasInputTarget)return;let e=this.inputTarget.innerHTML||this.inputTarget.value;navigator.clipboard.writeText(e)}};O(Ce,"targets",["input"]);var Se=class extends A{toggle(s){s.preventDefault();let e=this.controlTarget;e.dataset.checked?(this.fieldTarget.value=!1,delete e.dataset.checked):(this.fieldTarget.value=!0,e.dataset.checked=!0)}};O(Se,"targets",["field","control"]);var ze=class extends A{close(){this.element.classList.remove("lui:opacity-100"),this.element.classList.add("lui:opacity-0"),setTimeout(()=>{this.element.classList.add("lui:hidden")},300)}};var Le=class extends A{openSidebar(){this.overlayTarget.dataset.open="",document.body.style.overflow="hidden"}closeSidebar(){delete this.overlayTarget.dataset.open,document.body.style.overflow=""}disconnect(){document.body.style.overflow=""}};O(Le,"targets",["overlay"]);var Xe=class extends A{openModal(){this.findElement("lui-modal").open()}closeModal(){this.findElement("lui-modal").close()}findElement(s){let e=this.element.dataset.target.replace("#",""),t=document.getElementById(e);return this.application.getControllerForElementAndIdentifier(t,s)}};var ce=class extends A{connect(){this.openFirstValue&&this.openItem(this.itemTargets[0])}toggle(s){s.preventDefault(),this.itemTargets.forEach(e=>{e.contains(s.target)?this.isOpen(e)?this.closeItem(e):this.openItem(e):this.closeItem(e)})}openItem(s){let e=s.querySelector("[data-lui-accordion-target=content]");e.classList.remove("lui:grid-rows-[0fr]"),e.classList.add("lui:grid-rows-[1fr]"),e.classList.remove("lui:opacity-0"),e.classList.add("lui:opacity-100"),s.querySelector("[data-lui-accordion-target=arrow]").classList.add("lui:rotate-180")}closeItem(s){let e=s.querySelector("[data-lui-accordion-target=content]");e.classList.remove("lui:grid-rows-[1fr]"),e.classList.add("lui:grid-rows-[0fr]"),e.classList.remove("lui:opacity-100"),e.classList.add("lui:opacity-0"),s.querySelector("[data-lui-accordion-target=arrow]").classList.remove("lui:rotate-180")}isOpen(s){return s.querySelector("[data-lui-accordion-target=content]").classList.contains("lui:grid-rows-[1fr]")}};O(ce,"targets",["content","item"]),O(ce,"values",{openFirst:{type:Boolean,default:!0}});var he=class extends A{connect(){this.dialogTarget.addEventListener("click",this.onClick.bind(this)),this.openValue&&this.open()}disconnect(){this.dialogTarget.removeEventListener("click",this.onClick.bind(this))}open(){this.dialogTarget.showModal()}close(){this.dialogTarget.setAttribute("closing",""),Promise.all(this.dialogTarget.getAnimations().map(s=>s.finished)).then(()=>{this.dialogTarget.removeAttribute("closing"),this.dialogTarget.close()})}onClick(s){s.target===this.dialogTarget&&this.dialogTarget.close()}closeOnBackdrop(s){this.hasPanelTarget&&!this.panelTarget.contains(s.target)&&this.close()}submitForm(){this.dialogTarget.querySelector("form").requestSubmit()}};O(he,"targets",["dialog","panel"]),O(he,"values",{open:Boolean});var ue=class extends A{connect(){this.initialShowValue||this.itemTargets.forEach(s=>{s.classList.add("hidden")})}toggle(s){s.preventDefault(),this.itemTargets.forEach(e=>{e.classList.toggle("hidden")})}};O(ue,"targets",["item"]),O(ue,"values",{initialShow:Boolean});var Fe=class extends A{toggle(s){s.preventDefault();let e=s.currentTarget;e.dataset.checked?(this.fieldTarget.value=!1,delete e.dataset.checked):(this.fieldTarget.value=!0,e.dataset.checked=!0)}};O(Fe,"targets",["field"]);var Ut=class extends A{};Ut.debounces=[];var qt=class extends A{};qt.throttles=[];var Zi={enterFromClass:"enter",enterActiveClass:"enterStart",enterToClass:"enterEnd",leaveFromClass:"leave",leaveActiveClass:"leaveStart",leaveToClass:"leaveEnd"},en={transitioned:!1,hiddenClass:"hidden",preserveOriginalClass:!0,removeToClasses:!0},Je=(s,e={})=>{var t,i,n;let a=s,h=a.element.dataset.transitionTarget,f;h&&(f=a[`${h}Target`]);let g=(e==null?void 0:e.element)||f||a.element;if(!(g instanceof HTMLElement||g instanceof SVGElement))return;let p=g.dataset,b=parseInt(p.leaveAfter||"")||e.leaveAfter||0,{transitioned:m,hiddenClass:w,preserveOriginalClass:v,removeToClasses:x}=Object.assign({},en,e),E=(t=a.enter)===null||t===void 0?void 0:t.bind(a),y=(i=a.leave)===null||i===void 0?void 0:i.bind(a),d=(n=a.toggleTransition)===null||n===void 0?void 0:n.bind(a);function u(T){return F(this,null,function*(){if(a.transitioned)return;a.transitioned=!0,E&&E(T);let L=te("enterFrom",e,p),M=te("enterActive",e,p),B=te("enterTo",e,p),D=te("leaveTo",e,p);w&&g.classList.remove(w),x||S(g,D),yield l(g,L,M,B,w,v,x),b>0&&setTimeout(()=>{o(T)},b)})}function o(T){return F(this,null,function*(){if(!a.transitioned)return;a.transitioned=!1,y&&y(T);let L=te("leaveFrom",e,p),M=te("leaveActive",e,p),B=te("leaveTo",e,p),D=te("enterTo",e,p);x||S(g,D),yield l(g,L,M,B,w,v,x),w&&g.classList.add(w)})}function r(T){d&&d(T),a.transitioned?o():u()}function l(T,L,M,B,D,W,I){return F(this,null,function*(){let N=[];W&&(L.forEach(k=>T.classList.contains(k)&&k!==D&&N.push(k)),M.forEach(k=>T.classList.contains(k)&&k!==D&&N.push(k)),B.forEach(k=>T.classList.contains(k)&&k!==D&&N.push(k))),C(T,L),S(T,N),C(T,M),yield sn(),S(T,L),C(T,B),yield tn(T),S(T,M),I&&S(T,B),C(T,N)})}function c(){a.transitioned=m,m?(w&&g.classList.remove(w),u()):(w&&g.classList.add(w),o())}function C(T,L){L.length>0&&T.classList.add(...L)}function S(T,L){L.length>0&&T.classList.remove(...L)}return c(),Object.assign(a,{enter:u,leave:o,toggleTransition:r}),[u,o,r]};function te(s,e,t){let i=`transition${s[0].toUpperCase()}${s.substr(1)}`,n=Zi[s],a=e[s]||t[i]||t[n]||" ";return nn(a)?[]:a.split(" ")}function tn(s){return F(this,null,function*(){return new Promise(e=>{let t=Number(getComputedStyle(s).transitionDuration.split(",")[0].replace("s",""))*1e3;setTimeout(()=>{e(t)},t)})})}function sn(){return F(this,null,function*(){return new Promise(s=>{requestAnimationFrame(()=>{requestAnimationFrame(s)})})})}function nn(s){return s.length===0||!s.trim()}var de=class extends A{connect(){Je(this,{element:this.menuTarget,hiddenClass:"lui:hidden"})}toggle(){this.toggleTransition()}hide(e){!this.element.contains(e.target)&&!this.menuTarget.classList.contains("lui:hidden")&&this.leave()}};O(de,"targets",["menu"]);var Kt=class{constructor(e,t){this.controller=t,this.file=e,this.directUpload=new Te(e,this.controller.inputTarget.dataset.directUploadUrl,this)}process(){this.insertUpload(),this.directUpload.create((e,t)=>{if(e){let n=this.controller.filesTarget.querySelector(`#upload_${this.directUpload.id}`).querySelector("[data-lui-dropzone-target='status']");n.textContent="Failed. "+e,n.classList.add("text-destructive-text")}else{let i=document.createElement("input");i.setAttribute("type","hidden"),i.setAttribute("value",t.signed_id),i.name=this.controller.inputTarget.name,this.controller.filesTarget.querySelector(`#upload_${this.directUpload.id}`).appendChild(i),this.controller.inputTarget.value=""}})}insertUpload(){let e=this.controller.templateTarget.content.cloneNode(!0);e.querySelector("#\\#NEW_FILE").id=`upload_${this.directUpload.id}`,e.querySelector("[data-lui-dropzone-target='filename']").textContent=this.file.name,e.querySelector("[data-lui-dropzone-target='status']").textContent="Uploading...",this.controller.filesTarget.appendChild(e)}directUploadWillStoreFileWithXHR(e){e.upload.addEventListener("progress",t=>this.updateProgress(t))}updateProgress(e){let t=(e.loaded/e.total*100).toFixed(0),i=t==100?"Uploaded":"Uploading...",n=this.controller.filesTarget.querySelector(`#upload_${this.directUpload.id}`);n.querySelector("[data-lui-dropzone-target='status']").textContent=i,n.querySelector("[data-lui-dropzone-target='progressbar']").style.width=`${t}%`,n.querySelector("[data-lui-dropzone-target='percentage-progress']").textContent=`${t}%`}},Me=class extends A{selectFiles(s){this.inputTarget.click()}uploadFiles(s){s.preventDefault(),[...s.dataTransfer?s.dataTransfer.files:s.target.files].forEach(t=>new Kt(t,this).process())}activate(s){s.preventDefault()}removeFile(s){s.preventDefault(),s.target.closest("[data-lui-dropzone-target='file']").remove()}};O(Me,"targets",["input","template","files"]);var fe=class extends A{connect(){this.autodismissValue&&setTimeout(()=>{this.close()},this.dismissAfterValue),Je(this,{element:this.toastTarget,enterActive:"lui:transition lui:ease-in-out lui:duration-150",enterFrom:"lui:transform lui:opacity-0 lui:scale-95",enterTo:"lui:transform lui:opacity-100 lui:scale-100",leaveActive:"lui:transition lui:ease-in-out lui:duration-150",leaveFrom:"lui:transform lui:opacity-100 lui:scale-100",leaveTo:"lui:transform lui:opacity-0 lui:scale-95",hiddenClass:"lui:hidden",transitioned:!0})}close(){this.leave()}};O(fe,"targets",["toast"]),O(fe,"values",{autodismiss:Boolean,dismissAfter:Number});var X=Math.min,P=Math.max,De=Math.round,Ne=Math.floor,U=s=>({x:s,y:s}),rn={left:"right",right:"left",bottom:"top",top:"bottom"},on={start:"end",end:"start"};function Qe(s,e,t){return P(s,X(e,t))}function ie(s,e){return typeof s=="function"?s(e):s}function G(s){return s.split("-")[0]}function ne(s){return s.split("-")[1]}function Wt(s){return s==="x"?"y":"x"}function Ge(s){return s==="y"?"height":"width"}var an=new Set(["top","bottom"]);function J(s){return an.has(G(s))?"y":"x"}function Ze(s){return Wt(J(s))}function ws(s,e,t){t===void 0&&(t=!1);let i=ne(s),n=Ze(s),a=Ge(n),h=n==="x"?i===(t?"end":"start")?"right":"left":i==="start"?"bottom":"top";return e.reference[a]>e.floating[a]&&(h=ke(h)),[h,ke(h)]}function xs(s){let e=ke(s);return[Ye(s),e,Ye(e)]}function Ye(s){return s.replace(/start|end/g,e=>on[e])}var vs=["left","right"],ys=["right","left"],ln=["top","bottom"],cn=["bottom","top"];function hn(s,e,t){switch(s){case"top":case"bottom":return t?e?ys:vs:e?vs:ys;case"left":case"right":return e?ln:cn;default:return[]}}function Es(s,e,t,i){let n=ne(s),a=hn(G(s),t==="start",i);return n&&(a=a.map(h=>h+"-"+n),e&&(a=a.concat(a.map(Ye)))),a}function ke(s){return s.replace(/left|right|bottom|top/g,e=>rn[e])}function un(s){return V({top:0,right:0,bottom:0,left:0},s)}function zt(s){return typeof s!="number"?un(s):{top:s,right:s,bottom:s,left:s}}function re(s){let{x:e,y:t,width:i,height:n}=s;return{width:i,height:n,top:t,left:e,right:e+i,bottom:t+n,x:e,y:t}}function Os(s,e,t){let{reference:i,floating:n}=s,a=J(e),h=Ze(e),f=Ge(h),g=G(e),p=a==="y",b=i.x+i.width/2-n.width/2,m=i.y+i.height/2-n.height/2,w=i[f]/2-n[f]/2,v;switch(g){case"top":v={x:b,y:i.y-n.height};break;case"bottom":v={x:b,y:i.y+i.height};break;case"right":v={x:i.x+i.width,y:m};break;case"left":v={x:i.x-n.width,y:m};break;default:v={x:i.x,y:i.y}}switch(ne(e)){case"start":v[h]-=w*(t&&p?-1:1);break;case"end":v[h]+=w*(t&&p?-1:1);break}return v}var As=(s,e,t)=>F(void 0,null,function*(){let{placement:i="bottom",strategy:n="absolute",middleware:a=[],platform:h}=t,f=a.filter(Boolean),g=yield h.isRTL==null?void 0:h.isRTL(e),p=yield h.getElementRects({reference:s,floating:e,strategy:n}),{x:b,y:m}=Os(p,i,g),w=i,v={},x=0;for(let E=0;E<f.length;E++){let{name:y,fn:d}=f[E],{x:u,y:o,data:r,reset:l}=yield d({x:b,y:m,initialPlacement:i,placement:w,strategy:n,middlewareData:v,rects:p,platform:h,elements:{reference:s,floating:e}});b=u!=null?u:b,m=o!=null?o:m,v=z(V({},v),{[y]:V(V({},v[y]),r)}),l&&x<=50&&(x++,typeof l=="object"&&(l.placement&&(w=l.placement),l.rects&&(p=l.rects===!0?yield h.getElementRects({reference:s,floating:e,strategy:n}):l.rects),{x:b,y:m}=Os(p,w,g)),E=-1)}return{x:b,y:m,placement:w,strategy:n,middlewareData:v}});function et(s,e){return F(this,null,function*(){var t;e===void 0&&(e={});let{x:i,y:n,platform:a,rects:h,elements:f,strategy:g}=s,{boundary:p="clippingAncestors",rootBoundary:b="viewport",elementContext:m="floating",altBoundary:w=!1,padding:v=0}=ie(e,s),x=zt(v),y=f[w?m==="floating"?"reference":"floating":m],d=re(yield a.getClippingRect({element:(t=yield a.isElement==null?void 0:a.isElement(y))==null||t?y:y.contextElement||(yield a.getDocumentElement==null?void 0:a.getDocumentElement(f.floating)),boundary:p,rootBoundary:b,strategy:g})),u=m==="floating"?{x:i,y:n,width:h.floating.width,height:h.floating.height}:h.reference,o=yield a.getOffsetParent==null?void 0:a.getOffsetParent(f.floating),r=(yield a.isElement==null?void 0:a.isElement(o))?(yield a.getScale==null?void 0:a.getScale(o))||{x:1,y:1}:{x:1,y:1},l=re(a.convertOffsetParentRelativeRectToViewportRelativeRect?yield a.convertOffsetParentRelativeRectToViewportRelativeRect({elements:f,rect:u,offsetParent:o,strategy:g}):u);return{top:(d.top-l.top+x.top)/r.y,bottom:(l.bottom-d.bottom+x.bottom)/r.y,left:(d.left-l.left+x.left)/r.x,right:(l.right-d.right+x.right)/r.x}})}var Ts=s=>({name:"arrow",options:s,fn(t){return F(this,null,function*(){let{x:i,y:n,placement:a,rects:h,platform:f,elements:g,middlewareData:p}=t,{element:b,padding:m=0}=ie(s,t)||{};if(b==null)return{};let w=zt(m),v={x:i,y:n},x=Ze(a),E=Ge(x),y=yield f.getDimensions(b),d=x==="y",u=d?"top":"left",o=d?"bottom":"right",r=d?"clientHeight":"clientWidth",l=h.reference[E]+h.reference[x]-v[x]-h.floating[E],c=v[x]-h.reference[x],C=yield f.getOffsetParent==null?void 0:f.getOffsetParent(b),S=C?C[r]:0;(!S||!(yield f.isElement==null?void 0:f.isElement(C)))&&(S=g.floating[r]||h.floating[E]);let T=l/2-c/2,L=S/2-y[E]/2-1,M=X(w[u],L),B=X(w[o],L),D=M,W=S-y[E]-B,I=S/2-y[E]/2+T,N=Qe(D,I,W),k=!p.arrow&&ne(a)!=null&&I!==N&&h.reference[E]/2-(I<D?M:B)-y[E]/2<0,Y=k?I<D?I-D:I-W:0;return{[x]:v[x]+Y,data:V({[x]:N,centerOffset:I-N-Y},k&&{alignmentOffset:Y}),reset:k}})}});var Cs=function(s){return s===void 0&&(s={}),{name:"flip",options:s,fn(t){return F(this,null,function*(){var i,n;let{placement:a,middlewareData:h,rects:f,initialPlacement:g,platform:p,elements:b}=t,I=ie(s,t),{mainAxis:m=!0,crossAxis:w=!0,fallbackPlacements:v,fallbackStrategy:x="bestFit",fallbackAxisSideDirection:E="none",flipAlignment:y=!0}=I,d=Re(I,["mainAxis","crossAxis","fallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment"]);if((i=h.arrow)!=null&&i.alignmentOffset)return{};let u=G(a),o=J(g),r=G(g)===g,l=yield p.isRTL==null?void 0:p.isRTL(b.floating),c=v||(r||!y?[ke(g)]:xs(g)),C=E!=="none";!v&&C&&c.push(...Es(g,y,E,l));let S=[g,...c],T=yield et(t,d),L=[],M=((n=h.flip)==null?void 0:n.overflows)||[];if(m&&L.push(T[u]),w){let N=ws(a,f,l);L.push(T[N[0]],T[N[1]])}if(M=[...M,{placement:a,overflows:L}],!L.every(N=>N<=0)){var B,D;let N=(((B=h.flip)==null?void 0:B.index)||0)+1,k=S[N];if(k&&(!(w==="alignment"?o!==J(k):!1)||M.every(H=>J(H.placement)===o?H.overflows[0]>0:!0)))return{data:{index:N,overflows:M},reset:{placement:k}};let Y=(D=M.filter(se=>se.overflows[0]<=0).sort((se,H)=>se.overflows[1]-H.overflows[1])[0])==null?void 0:D.placement;if(!Y)switch(x){case"bestFit":{var W;let se=(W=M.filter(H=>{if(C){let ee=J(H.placement);return ee===o||ee==="y"}return!0}).map(H=>[H.placement,H.overflows.filter(ee=>ee>0).reduce((ee,Ws)=>ee+Ws,0)]).sort((H,ee)=>H[1]-ee[1])[0])==null?void 0:W[0];se&&(Y=se);break}case"initialPlacement":Y=g;break}if(a!==Y)return{reset:{placement:Y}}}return{}})}}};var dn=new Set(["left","top"]);function fn(s,e){return F(this,null,function*(){let{placement:t,platform:i,elements:n}=s,a=yield i.isRTL==null?void 0:i.isRTL(n.floating),h=G(t),f=ne(t),g=J(t)==="y",p=dn.has(h)?-1:1,b=a&&g?-1:1,m=ie(e,s),{mainAxis:w,crossAxis:v,alignmentAxis:x}=typeof m=="number"?{mainAxis:m,crossAxis:0,alignmentAxis:null}:{mainAxis:m.mainAxis||0,crossAxis:m.crossAxis||0,alignmentAxis:m.alignmentAxis};return f&&typeof x=="number"&&(v=f==="end"?x*-1:x),g?{x:v*b,y:w*p}:{x:w*p,y:v*b}})}var Ss=function(s){return s===void 0&&(s=0),{name:"offset",options:s,fn(t){return F(this,null,function*(){var i,n;let{x:a,y:h,placement:f,middlewareData:g}=t,p=yield fn(t,s);return f===((i=g.offset)==null?void 0:i.placement)&&(n=g.arrow)!=null&&n.alignmentOffset?{}:{x:a+p.x,y:h+p.y,data:z(V({},p),{placement:f})}})}}},Ls=function(s){return s===void 0&&(s={}),{name:"shift",options:s,fn(t){return F(this,null,function*(){let{x:i,y:n,placement:a}=t,d=ie(s,t),{mainAxis:h=!0,crossAxis:f=!1,limiter:g={fn:u=>{let{x:o,y:r}=u;return{x:o,y:r}}}}=d,p=Re(d,["mainAxis","crossAxis","limiter"]),b={x:i,y:n},m=yield et(t,p),w=J(G(a)),v=Wt(w),x=b[v],E=b[w];if(h){let u=v==="y"?"top":"left",o=v==="y"?"bottom":"right",r=x+m[u],l=x-m[o];x=Qe(r,x,l)}if(f){let u=w==="y"?"top":"left",o=w==="y"?"bottom":"right",r=E+m[u],l=E-m[o];E=Qe(r,E,l)}let y=g.fn(z(V({},t),{[v]:x,[w]:E}));return z(V({},y),{data:{x:y.x-i,y:y.y-n,enabled:{[v]:h,[w]:f}}})})}}};var Fs=function(s){return s===void 0&&(s={}),{name:"size",options:s,fn(t){return F(this,null,function*(){var i,n;let{placement:a,rects:h,platform:f,elements:g}=t,M=ie(s,t),{apply:p=()=>{}}=M,b=Re(M,["apply"]),m=yield et(t,b),w=G(a),v=ne(a),x=J(a)==="y",{width:E,height:y}=h.floating,d,u;w==="top"||w==="bottom"?(d=w,u=v===((yield f.isRTL==null?void 0:f.isRTL(g.floating))?"start":"end")?"left":"right"):(u=w,d=v==="end"?"top":"bottom");let o=y-m.top-m.bottom,r=E-m.left-m.right,l=X(y-m[d],o),c=X(E-m[u],r),C=!t.middlewareData.shift,S=l,T=c;if((i=t.middlewareData.shift)!=null&&i.enabled.x&&(T=r),(n=t.middlewareData.shift)!=null&&n.enabled.y&&(S=o),C&&!v){let B=P(m.left,0),D=P(m.right,0),W=P(m.top,0),I=P(m.bottom,0);x?T=E-2*(B!==0||D!==0?B+D:P(m.left,m.right)):S=y-2*(W!==0||I!==0?W+I:P(m.top,m.bottom))}yield p(z(V({},t),{availableWidth:T,availableHeight:S}));let L=yield f.getDimensions(g.floating);return E!==L.width||y!==L.height?{reset:{rects:!0}}:{}})}}};function tt(){return typeof window!="undefined"}function oe(s){return ks(s)?(s.nodeName||"").toLowerCase():"#document"}function R(s){var e;return(s==null||(e=s.ownerDocument)==null?void 0:e.defaultView)||window}function q(s){var e;return(e=(ks(s)?s.ownerDocument:s.document)||window.document)==null?void 0:e.documentElement}function ks(s){return tt()?s instanceof Node||s instanceof R(s).Node:!1}function j(s){return tt()?s instanceof Element||s instanceof R(s).Element:!1}function K(s){return tt()?s instanceof HTMLElement||s instanceof R(s).HTMLElement:!1}function Ms(s){return!tt()||typeof ShadowRoot=="undefined"?!1:s instanceof ShadowRoot||s instanceof R(s).ShadowRoot}var gn=new Set(["inline","contents"]);function pe(s){let{overflow:e,overflowX:t,overflowY:i,display:n}=_(s);return/auto|scroll|overlay|hidden|clip/.test(e+i+t)&&!gn.has(n)}var pn=new Set(["table","td","th"]);function Ds(s){return pn.has(oe(s))}var mn=[":popover-open",":modal"];function $e(s){return mn.some(e=>{try{return s.matches(e)}catch(t){return!1}})}var bn=["transform","translate","scale","rotate","perspective"],vn=["transform","translate","scale","rotate","perspective","filter"],yn=["paint","layout","strict","content"];function st(s){let e=it(),t=j(s)?_(s):s;return bn.some(i=>t[i]?t[i]!=="none":!1)||(t.containerType?t.containerType!=="normal":!1)||!e&&(t.backdropFilter?t.backdropFilter!=="none":!1)||!e&&(t.filter?t.filter!=="none":!1)||vn.some(i=>(t.willChange||"").includes(i))||yn.some(i=>(t.contain||"").includes(i))}function Ns(s){let e=Z(s);for(;K(e)&&!ae(e);){if(st(e))return e;if($e(e))return null;e=Z(e)}return null}function it(){return typeof CSS=="undefined"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}var wn=new Set(["html","body","#document"]);function ae(s){return wn.has(oe(s))}function _(s){return R(s).getComputedStyle(s)}function Be(s){return j(s)?{scrollLeft:s.scrollLeft,scrollTop:s.scrollTop}:{scrollLeft:s.scrollX,scrollTop:s.scrollY}}function Z(s){if(oe(s)==="html")return s;let e=s.assignedSlot||s.parentNode||Ms(s)&&s.host||q(s);return Ms(e)?e.host:e}function $s(s){let e=Z(s);return ae(e)?s.ownerDocument?s.ownerDocument.body:s.body:K(e)&&pe(e)?e:$s(e)}function ge(s,e,t){var i;e===void 0&&(e=[]),t===void 0&&(t=!0);let n=$s(s),a=n===((i=s.ownerDocument)==null?void 0:i.body),h=R(n);if(a){let f=nt(h);return e.concat(h,h.visualViewport||[],pe(n)?n:[],f&&t?ge(f):[])}return e.concat(n,ge(n,[],t))}function nt(s){return s.parent&&Object.getPrototypeOf(s.parent)?s.frameElement:null}function Ps(s){let e=_(s),t=parseFloat(e.width)||0,i=parseFloat(e.height)||0,n=K(s),a=n?s.offsetWidth:t,h=n?s.offsetHeight:i,f=De(t)!==a||De(i)!==h;return f&&(t=a,i=h),{width:t,height:i,$:f}}function Jt(s){return j(s)?s:s.contextElement}function me(s){let e=Jt(s);if(!K(e))return U(1);let t=e.getBoundingClientRect(),{width:i,height:n,$:a}=Ps(e),h=(a?De(t.width):t.width)/i,f=(a?De(t.height):t.height)/n;return(!h||!Number.isFinite(h))&&(h=1),(!f||!Number.isFinite(f))&&(f=1),{x:h,y:f}}var xn=U(0);function Rs(s){let e=R(s);return!it()||!e.visualViewport?xn:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function En(s,e,t){return e===void 0&&(e=!1),!t||e&&t!==R(s)?!1:e}function le(s,e,t,i){e===void 0&&(e=!1),t===void 0&&(t=!1);let n=s.getBoundingClientRect(),a=Jt(s),h=U(1);e&&(i?j(i)&&(h=me(i)):h=me(s));let f=En(a,t,i)?Rs(a):U(0),g=(n.left+f.x)/h.x,p=(n.top+f.y)/h.y,b=n.width/h.x,m=n.height/h.y;if(a){let w=R(a),v=i&&j(i)?R(i):i,x=w,E=nt(x);for(;E&&i&&v!==x;){let y=me(E),d=E.getBoundingClientRect(),u=_(E),o=d.left+(E.clientLeft+parseFloat(u.paddingLeft))*y.x,r=d.top+(E.clientTop+parseFloat(u.paddingTop))*y.y;g*=y.x,p*=y.y,b*=y.x,m*=y.y,g+=o,p+=r,x=R(E),E=nt(x)}}return re({width:b,height:m,x:g,y:p})}function rt(s,e){let t=Be(s).scrollLeft;return e?e.left+t:le(q(s)).left+t}function js(s,e){let t=s.getBoundingClientRect(),i=t.left+e.scrollLeft-rt(s,t),n=t.top+e.scrollTop;return{x:i,y:n}}function On(s){let{elements:e,rect:t,offsetParent:i,strategy:n}=s,a=n==="fixed",h=q(i),f=e?$e(e.floating):!1;if(i===h||f&&a)return t;let g={scrollLeft:0,scrollTop:0},p=U(1),b=U(0),m=K(i);if((m||!m&&!a)&&((oe(i)!=="body"||pe(h))&&(g=Be(i)),K(i))){let v=le(i);p=me(i),b.x=v.x+i.clientLeft,b.y=v.y+i.clientTop}let w=h&&!m&&!a?js(h,g):U(0);return{width:t.width*p.x,height:t.height*p.y,x:t.x*p.x-g.scrollLeft*p.x+b.x+w.x,y:t.y*p.y-g.scrollTop*p.y+b.y+w.y}}function An(s){return Array.from(s.getClientRects())}function Tn(s){let e=q(s),t=Be(s),i=s.ownerDocument.body,n=P(e.scrollWidth,e.clientWidth,i.scrollWidth,i.clientWidth),a=P(e.scrollHeight,e.clientHeight,i.scrollHeight,i.clientHeight),h=-t.scrollLeft+rt(s),f=-t.scrollTop;return _(i).direction==="rtl"&&(h+=P(e.clientWidth,i.clientWidth)-n),{width:n,height:a,x:h,y:f}}var Bs=25;function Cn(s,e){let t=R(s),i=q(s),n=t.visualViewport,a=i.clientWidth,h=i.clientHeight,f=0,g=0;if(n){a=n.width,h=n.height;let b=it();(!b||b&&e==="fixed")&&(f=n.offsetLeft,g=n.offsetTop)}let p=rt(i);if(p<=0){let b=i.ownerDocument,m=b.body,w=getComputedStyle(m),v=b.compatMode==="CSS1Compat"&&parseFloat(w.marginLeft)+parseFloat(w.marginRight)||0,x=Math.abs(i.clientWidth-m.clientWidth-v);x<=Bs&&(a-=x)}else p<=Bs&&(a+=p);return{width:a,height:h,x:f,y:g}}var Sn=new Set(["absolute","fixed"]);function Ln(s,e){let t=le(s,!0,e==="fixed"),i=t.top+s.clientTop,n=t.left+s.clientLeft,a=K(s)?me(s):U(1),h=s.clientWidth*a.x,f=s.clientHeight*a.y,g=n*a.x,p=i*a.y;return{width:h,height:f,x:g,y:p}}function Vs(s,e,t){let i;if(e==="viewport")i=Cn(s,t);else if(e==="document")i=Tn(q(s));else if(j(e))i=Ln(e,t);else{let n=Rs(s);i={x:e.x-n.x,y:e.y-n.y,width:e.width,height:e.height}}return re(i)}function _s(s,e){let t=Z(s);return t===e||!j(t)||ae(t)?!1:_(t).position==="fixed"||_s(t,e)}function Fn(s,e){let t=e.get(s);if(t)return t;let i=ge(s,[],!1).filter(f=>j(f)&&oe(f)!=="body"),n=null,a=_(s).position==="fixed",h=a?Z(s):s;for(;j(h)&&!ae(h);){let f=_(h),g=st(h);!g&&f.position==="fixed"&&(n=null),(a?!g&&!n:!g&&f.position==="static"&&!!n&&Sn.has(n.position)||pe(h)&&!g&&_s(s,h))?i=i.filter(b=>b!==h):n=f,h=Z(h)}return e.set(s,i),i}function Mn(s){let{element:e,boundary:t,rootBoundary:i,strategy:n}=s,h=[...t==="clippingAncestors"?$e(e)?[]:Fn(e,this._c):[].concat(t),i],f=h[0],g=h.reduce((p,b)=>{let m=Vs(e,b,n);return p.top=P(m.top,p.top),p.right=X(m.right,p.right),p.bottom=X(m.bottom,p.bottom),p.left=P(m.left,p.left),p},Vs(e,f,n));return{width:g.right-g.left,height:g.bottom-g.top,x:g.left,y:g.top}}function kn(s){let{width:e,height:t}=Ps(s);return{width:e,height:t}}function Dn(s,e,t){let i=K(e),n=q(e),a=t==="fixed",h=le(s,!0,a,e),f={scrollLeft:0,scrollTop:0},g=U(0);function p(){g.x=rt(n)}if(i||!i&&!a)if((oe(e)!=="body"||pe(n))&&(f=Be(e)),i){let v=le(e,!0,a,e);g.x=v.x+e.clientLeft,g.y=v.y+e.clientTop}else n&&p();a&&!i&&n&&p();let b=n&&!i&&!a?js(n,f):U(0),m=h.left+f.scrollLeft-g.x-b.x,w=h.top+f.scrollTop-g.y-b.y;return{x:m,y:w,width:h.width,height:h.height}}function Xt(s){return _(s).position==="static"}function Is(s,e){if(!K(s)||_(s).position==="fixed")return null;if(e)return e(s);let t=s.offsetParent;return q(s)===t&&(t=t.ownerDocument.body),t}function Hs(s,e){let t=R(s);if($e(s))return t;if(!K(s)){let n=Z(s);for(;n&&!ae(n);){if(j(n)&&!Xt(n))return n;n=Z(n)}return t}let i=Is(s,e);for(;i&&Ds(i)&&Xt(i);)i=Is(i,e);return i&&ae(i)&&Xt(i)&&!st(i)?t:i||Ns(s)||t}var Nn=function(s){return F(this,null,function*(){let e=this.getOffsetParent||Hs,t=this.getDimensions,i=yield t(s.floating);return{reference:Dn(s.reference,yield e(s.floating),s.strategy),floating:{x:0,y:0,width:i.width,height:i.height}}})};function $n(s){return _(s).direction==="rtl"}var Bn={convertOffsetParentRelativeRectToViewportRelativeRect:On,getDocumentElement:q,getClippingRect:Mn,getOffsetParent:Hs,getElementRects:Nn,getClientRects:An,getDimensions:kn,getScale:me,isElement:j,isRTL:$n};function Us(s,e){return s.x===e.x&&s.y===e.y&&s.width===e.width&&s.height===e.height}function Vn(s,e){let t=null,i,n=q(s);function a(){var f;clearTimeout(i),(f=t)==null||f.disconnect(),t=null}function h(f,g){f===void 0&&(f=!1),g===void 0&&(g=1),a();let p=s.getBoundingClientRect(),{left:b,top:m,width:w,height:v}=p;if(f||e(),!w||!v)return;let x=Ne(m),E=Ne(n.clientWidth-(b+w)),y=Ne(n.clientHeight-(m+v)),d=Ne(b),o={rootMargin:-x+"px "+-E+"px "+-y+"px "+-d+"px",threshold:P(0,X(1,g))||1},r=!0;function l(c){let C=c[0].intersectionRatio;if(C!==g){if(!r)return h();C?h(!1,C):i=setTimeout(()=>{h(!1,1e-7)},1e3)}C===1&&!Us(p,s.getBoundingClientRect())&&h(),r=!1}try{t=new IntersectionObserver(l,z(V({},o),{root:n.ownerDocument}))}catch(c){t=new IntersectionObserver(l,o)}t.observe(s)}return h(!0),a}function ot(s,e,t,i){i===void 0&&(i={});let{ancestorScroll:n=!0,ancestorResize:a=!0,elementResize:h=typeof ResizeObserver=="function",layoutShift:f=typeof IntersectionObserver=="function",animationFrame:g=!1}=i,p=Jt(s),b=n||a?[...p?ge(p):[],...ge(e)]:[];b.forEach(d=>{n&&d.addEventListener("scroll",t,{passive:!0}),a&&d.addEventListener("resize",t)});let m=p&&f?Vn(p,t):null,w=-1,v=null;h&&(v=new ResizeObserver(d=>{let[u]=d;u&&u.target===p&&v&&(v.unobserve(e),cancelAnimationFrame(w),w=requestAnimationFrame(()=>{var o;(o=v)==null||o.observe(e)})),t()}),p&&!g&&v.observe(p),v.observe(e));let x,E=g?le(s):null;g&&y();function y(){let d=le(s);E&&!Us(E,d)&&t(),E=d,x=requestAnimationFrame(y)}return t(),()=>{var d;b.forEach(u=>{n&&u.removeEventListener("scroll",t),a&&u.removeEventListener("resize",t)}),m==null||m(),(d=v)==null||d.disconnect(),v=null,g&&cancelAnimationFrame(x)}}var at=Ss;var lt=Ls,ct=Cs,ht=Fs;var qs=Ts;var ut=(s,e,t)=>{let i=new Map,n=V({platform:Bn},t),a=z(V({},n.platform),{_c:i});return As(s,e,z(V({},n),{platform:a}))};var be=class extends A{connect(){this.showTimeout=null,this.hideTimeout=null,this.cleanup=null,this.handleKeydown=this.handleKeydown.bind(this),"ontouchstart"in window&&this.element.addEventListener("click",this.toggle.bind(this))}disconnect(){this.hide(),this.clearTimeouts(),"ontouchstart"in window&&this.element.removeEventListener("click",this.toggle.bind(this))}show(s){!this.activeValue||(this.hideOtherTooltips(),this.clearTimeouts(),this.delayValue>0?this.showTimeout=setTimeout(()=>this.createTooltip(s),this.delayValue):this.createTooltip(s))}hide(){this.clearTimeouts(),this.delayValue>0?this.hideTimeout=setTimeout(()=>this.destroyTooltip(),this.delayValue):this.destroyTooltip()}toggle(s){this.tooltip?this.hide():this.show(s)}createTooltip(s){if(this.tooltip)return;let e=(s==null?void 0:s.currentTarget)||this.element;try{let t=document.createElement("div");t.innerHTML=this.templateTarget.innerHTML,t.style.position="absolute",t.style.zIndex="9999",t.setAttribute("role","tooltip"),t.setAttribute("data-lui-tooltip-instance","true"),document.body.appendChild(t),this.tooltip=t;let i=t.firstElementChild,n=i==null?void 0:i.querySelector("[data-tooltip-arrow]");i&&(this.cleanup=ot(e,i,()=>this.updatePosition(e,i,n)),requestAnimationFrame(()=>{i.style.opacity="1"}),document.addEventListener("keydown",this.handleKeydown))}catch(t){console.warn("Tooltip positioning failed:",t),this.destroyTooltip()}}destroyTooltip(){if(this.cleanup&&(this.cleanup(),this.cleanup=null),this.tooltip){let s=this.tooltip.firstElementChild;s?(s.style.opacity="0",setTimeout(()=>{this.tooltip&&(this.tooltip.remove(),this.tooltip=null)},200)):(this.tooltip.remove(),this.tooltip=null)}document.removeEventListener("keydown",this.handleKeydown)}updatePosition(s,e,t){!e||ut(s,e,{placement:this.positionValue||"bottom",middleware:[at(this.offsetValue),ht(),ct(),lt({padding:5}),...t?[qs({element:t})]:[]]}).then(({x:i,y:n,placement:a,middlewareData:h})=>{Object.assign(e.style,{left:`${i}px`,top:`${n}px`}),t&&h.arrow&&this.positionArrow(t,a,h.arrow)}).catch(i=>{console.warn("Tooltip positioning update failed:",i)})}positionArrow(s,e,t){let{x:i,y:n}=t,a=e.split("-")[0];Object.assign(s.style,{left:"",top:"",right:"",bottom:""});let h="-4px";switch(a){case"top":Object.assign(s.style,{left:i!=null?`${i}px`:"",bottom:h});break;case"bottom":Object.assign(s.style,{left:i!=null?`${i}px`:"",top:h});break;case"left":Object.assign(s.style,{top:n!=null?`${n}px`:"",right:h});break;case"right":Object.assign(s.style,{top:n!=null?`${n}px`:"",left:h});break}}handleKeydown(s){s.key==="Escape"&&this.tooltip&&this.hide()}hideOtherTooltips(){document.querySelectorAll('[data-lui-tooltip-instance="true"]').forEach(s=>{s!==this.tooltip&&s.remove()})}clearTimeouts(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=null),this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=null)}};O(be,"targets",["template"]),O(be,"values",{active:Boolean,position:String,delay:{type:Number,default:0},offset:{type:Number,default:8}});var ve=class extends A{constructor(){super(...arguments);O(this,"handleMouseEnter",e=>{e.target.dataset.hover=""});O(this,"handleMouseLeave",e=>{delete e.target.dataset.hover});O(this,"handleWrapperMouseEnter",e=>{e.currentTarget.dataset.hover=""});O(this,"handleWrapperMouseLeave",e=>{delete e.currentTarget.dataset.hover})}connect(){this.isOpen=!1,this.highlightedIndex=-1,this.filteredOptions=[],this.cleanup=null,this.debounceTimer=null,this.originalSelected=this.deepClone(this.selectedValue),this.initializeSelected(),this.setupHoverHandlers(),this.hasUrlValue||(this.filteredOptions=this.optionsValue)}setupHoverHandlers(){this.hasInputTarget&&(this.inputTarget.addEventListener("mouseenter",this.handleMouseEnter),this.inputTarget.addEventListener("mouseleave",this.handleMouseLeave)),this.hasInputWrapperTarget&&(this.inputWrapperTarget.addEventListener("mouseenter",this.handleWrapperMouseEnter),this.inputWrapperTarget.addEventListener("mouseleave",this.handleWrapperMouseLeave))}get isAssociationMode(){return this.hasForeignKeyValue}disconnect(){this.destroyFloating(),this.clearDebounce(),this.cleanupHoverHandlers()}cleanupHoverHandlers(){this.hasInputTarget&&(this.inputTarget.removeEventListener("mouseenter",this.handleMouseEnter),this.inputTarget.removeEventListener("mouseleave",this.handleMouseLeave)),this.hasInputWrapperTarget&&(this.inputWrapperTarget.removeEventListener("mouseenter",this.handleWrapperMouseEnter),this.inputWrapperTarget.removeEventListener("mouseleave",this.handleWrapperMouseLeave))}onInput(e){let t=e.target.value.trim();this.hasUrlValue?(this.clearDebounce(),t.length>=this.minCharsValue?this.debounceTimer=setTimeout(()=>{this.fetchOptions(t)},this.debounceValue):(this.filteredOptions=[],this.renderOptions())):this.filterClientSide(t),this.open(),this.updateCreateOption(t)}onFocus(){(!this.hasUrlValue||this.inputTarget.value.length>=this.minCharsValue)&&(this.hasUrlValue||(this.filteredOptions=this.optionsValue,this.filterClientSide(this.inputTarget.value.trim())),this.open())}onKeydown(e){if(e.ctrlKey){if(e.key==="n"){e.preventDefault(),this.isOpen?this.highlightNext():this.open();return}if(e.key==="p"){e.preventDefault(),this.isOpen?this.highlightPrevious():this.open();return}}switch(e.key){case"ArrowDown":e.preventDefault(),this.isOpen?this.highlightNext():this.open();break;case"ArrowUp":e.preventDefault(),this.isOpen?this.highlightPrevious():this.open();break;case"Enter":e.preventDefault(),this.selectHighlighted();break;case"Escape":this.close(),this.inputTarget.value="";break;case"Backspace":this.multipleValue&&this.inputTarget.value===""&&this.removeLastSelected();break;case"Tab":this.close();break}}clickOutside(e){this.element.contains(e.target)||this.close()}selectOption(e){e.stopPropagation();let t=e.currentTarget;if(t.dataset.disabled==="true")return;let i=t.dataset.value,n=t.dataset.label;this.multipleValue?this.toggleSelection(i,n):(this.setSingleSelection(i,n),this.close())}toggleSelection(e,t,i=!1){let n=this.findSelectedIndex(e);if(n>-1)this.selectedValue=this.selectedValue.filter((a,h)=>h!==n);else if(this.isAssociationMode){let a={value:e};i&&(a.custom=!0),this.selectedValue=[...this.selectedValue,a]}else this.selectedValue=[...this.selectedValue,e];this.updateSelectedTags(),this.updateHiddenFields(),this.renderOptions(),this.inputTarget.value="",this.inputTarget.focus()}findSelectedIndex(e){return this.selectedValue.findIndex(t=>{let i=typeof t=="object"?t.value:t;return String(i)===String(e)})}setSingleSelection(e,t){this.selectedValue=[e],this.inputTarget.value=t,this.updateHiddenField(e)}removeLastSelected(){this.selectedValue.length>0&&(this.selectedValue=this.selectedValue.slice(0,-1),this.updateSelectedTags(),this.updateHiddenFields(),this.renderOptions())}removeTag(e){e.preventDefault(),e.stopPropagation();let t=e.currentTarget.dataset.value,i=this.findSelectedIndex(t);i>-1&&(this.selectedValue=this.selectedValue.filter((n,a)=>a!==i)),this.updateSelectedTags(),this.updateHiddenFields(),this.renderOptions(),this.inputTarget.focus()}createCustomOption(){let e=this.inputTarget.value.trim();e&&this.allowCustomValue&&(this.multipleValue?this.toggleSelection(e,e,!0):this.setSingleSelection(e,e),this.close())}filterClientSide(e){if(!e)this.filteredOptions=this.optionsValue;else{let t=e.toLowerCase();this.filteredOptions=this.optionsValue.filter(i=>i.label.toLowerCase().includes(t))}this.highlightedIndex=this.filteredOptions.length>0?0:-1,this.renderOptions()}fetchOptions(e){return F(this,null,function*(){this.showLoading();try{let t=new URL(this.urlValue,window.location.origin);t.searchParams.set("q",e);let i=yield fetch(t,{headers:{Accept:"application/json","X-Requested-With":"XMLHttpRequest"}});if(!i.ok)throw new Error("Network error");let n=yield i.json();this.filteredOptions=n,this.highlightedIndex=n.length>0?0:-1,this.renderOptions()}catch(t){console.error("Combobox fetch error:",t),this.filteredOptions=[],this.renderOptions()}finally{this.hideLoading()}})}renderOptions(){let e=this.optionsContainerTarget;if(e.innerHTML="",this.filteredOptions.length===0){this.showNoResults();return}this.hideNoResults(),this.filteredOptions.forEach((t,i)=>{let n=this.optionTemplateTarget.content.cloneNode(!0),a=n.querySelector("[role='option']");a.dataset.value=t.value,a.dataset.label=t.label,a.dataset.index=i,a.querySelector("[data-label]").textContent=t.label,this.isValueSelected(t.value)&&(a.dataset.selected="true",a.setAttribute("aria-selected","true"),a.querySelector("[data-checkmark]").classList.remove("lui:hidden")),i===this.highlightedIndex&&(a.dataset.highlighted="true"),t.disabled&&(a.dataset.disabled="true",a.setAttribute("aria-disabled","true")),e.appendChild(n)})}updateSelectedTags(){if(!this.multipleValue||!this.hasSelectedTagsTarget)return;this.selectedTagsTarget.querySelectorAll("[data-combobox-tag]").forEach(t=>t.remove()),this.selectedValue.forEach(t=>{let i=this.getItemValue(t),n=this.findOptionByValue(i),a=n?n.label:i,h=document.createElement("span");h.setAttribute("data-combobox-tag","true"),h.className="lui:inline-flex lui:items-center lui:gap-1 lui:rounded-md lui:bg-surface-tertiary lui:px-2 lui:py-0.5 lui:text-sm lui:text-foreground-secondary",h.innerHTML=`
6
+ <span class="lui:truncate lui:max-w-[150px]">${this.escapeHtml(a)}</span>
7
+ <button type="button" data-value="${this.escapeHtml(String(i))}" data-action="click->lui-combobox#removeTag" class="lui:text-foreground-muted lui:hover:text-foreground-secondary lui:flex-shrink-0 lui:ml-0.5">
8
+ <svg class="lui:h-3.5 lui:w-3.5" viewBox="0 0 16 16" fill="currentColor">
9
+ <path d="M5.28 4.22a.75.75 0 00-1.06 1.06L6.94 8l-2.72 2.72a.75.75 0 101.06 1.06L8 9.06l2.72 2.72a.75.75 0 101.06-1.06L9.06 8l2.72-2.72a.75.75 0 00-1.06-1.06L8 6.94 5.28 4.22z"/>
10
+ </svg>
11
+ </button>
12
+ `,this.inputTarget.insertAdjacentElement("beforebegin",h)})}updateHiddenField(e){this.hasHiddenFieldTarget&&(this.hiddenFieldTarget.value=e)}updateHiddenFields(){!this.hasHiddenFieldsTarget||(this.isAssociationMode?this.updateNestedHiddenFields():this.updateSimpleHiddenFields())}updateSimpleHiddenFields(){let e=this.hiddenFieldsTarget,t=e.dataset.name;e.innerHTML="",this.selectedValue.forEach(i=>{let n=this.getItemValue(i),a=document.createElement("input");a.type="hidden",a.name=t,a.value=n,e.appendChild(a)})}updateNestedHiddenFields(){let e=this.hiddenFieldsTarget,t=e.dataset.name,i=this.foreignKeyValue,n=this.hasNestedModelValue?this.nestedModelValue:null;e.innerHTML="";let a=0;this.selectedValue.forEach(h=>{let f=typeof h=="object",g=f?h.join_id:null,p=f?h.value:h,b=f?h.custom:!this.isExistingOption(p);g&&this.addHiddenInput(e,`${t}[${a}][id]`,g),b&&n?this.addHiddenInput(e,`${t}[${a}][${n}_attributes][name]`,p):this.addHiddenInput(e,`${t}[${a}][${i}]`,p),a++}),this.originalSelected.forEach(h=>{let f=typeof h=="object"?h.value:h,g=typeof h=="object"?h.join_id:null;!this.selectedValue.some(b=>{let m=typeof b=="object"?b.value:b;return String(m)===String(f)})&&g&&(this.addHiddenInput(e,`${t}[${a}][id]`,g),this.addHiddenInput(e,`${t}[${a}][_destroy]`,"true"),a++)})}addHiddenInput(e,t,i){let n=document.createElement("input");n.type="hidden",n.name=t,n.value=i,e.appendChild(n)}open(){if(this.isOpen)return;this.isOpen=!0,this.listboxTarget.classList.remove("lui:hidden"),this.inputTarget.setAttribute("aria-expanded","true");let e=this.hasInputWrapperTarget?this.inputWrapperTarget:this.inputTarget;this.cleanup=ot(e,this.listboxTarget,()=>this.updatePosition())}close(){!this.isOpen||(this.isOpen=!1,this.listboxTarget.classList.add("lui:hidden"),this.inputTarget.setAttribute("aria-expanded","false"),this.highlightedIndex=-1,this.destroyFloating())}updatePosition(){let e=this.hasInputWrapperTarget?this.inputWrapperTarget:this.inputTarget;ut(e,this.listboxTarget,{placement:"bottom-start",middleware:[at(4),ct({padding:8}),lt({padding:8}),ht({apply({availableHeight:t,rects:i,elements:n}){n.floating.style.maxHeight=`${Math.min(240,t)}px`,n.floating.style.width=`${i.reference.width}px`}})]}).then(({x:t,y:i})=>{Object.assign(this.listboxTarget.style,{position:"absolute",left:`${t}px`,top:`${i}px`})})}destroyFloating(){this.cleanup&&(this.cleanup(),this.cleanup=null)}highlightNext(){this.filteredOptions.length!==0&&(this.highlightedIndex=(this.highlightedIndex+1)%this.filteredOptions.length,this.updateHighlight())}highlightPrevious(){this.filteredOptions.length!==0&&(this.highlightedIndex=this.highlightedIndex<=0?this.filteredOptions.length-1:this.highlightedIndex-1,this.updateHighlight())}updateHighlight(){this.optionTargets.forEach((e,t)=>{t===this.highlightedIndex?(e.dataset.highlighted="true",e.scrollIntoView({block:"nearest"})):delete e.dataset.highlighted})}selectHighlighted(){if(this.highlightedIndex>=0&&this.highlightedIndex<this.filteredOptions.length){let e=this.filteredOptions[this.highlightedIndex];if(e.disabled)return;this.multipleValue?this.toggleSelection(String(e.value),e.label):(this.setSingleSelection(String(e.value),e.label),this.close())}else this.allowCustomValue&&this.inputTarget.value.trim()&&this.createCustomOption()}highlightOption(e){let t=parseInt(e.currentTarget.dataset.index,10);isNaN(t)||(this.highlightedIndex=t,this.updateHighlight())}findOptionByValue(e){return this.optionsValue.find(t=>String(t.value)===String(e))||this.filteredOptions.find(t=>String(t.value)===String(e))}initializeSelected(){if(this.multipleValue)this.updateSelectedTags(),this.updateHiddenFields();else if(this.selectedValue.length>0){let e=this.findOptionByValue(this.selectedValue[0]);e?this.inputTarget.value=e.label:this.inputTarget.value=this.selectedValue[0]}}updateCreateOption(e){if(!this.allowCustomValue||!this.hasCreateOptionTarget)return;let t=this.filteredOptions.some(i=>String(i.value).toLowerCase()===e.toLowerCase()||i.label.toLowerCase()===e.toLowerCase());e&&!t?(this.createOptionTarget.classList.remove("lui:hidden"),this.createOptionTextTarget.textContent=e):this.createOptionTarget.classList.add("lui:hidden")}showLoading(){this.hasLoadingTarget&&(this.loadingTarget.classList.remove("lui:hidden"),this.hideNoResults())}hideLoading(){this.hasLoadingTarget&&this.loadingTarget.classList.add("lui:hidden")}showNoResults(){this.hasNoResultsTarget&&this.noResultsTarget.classList.remove("lui:hidden")}hideNoResults(){this.hasNoResultsTarget&&this.noResultsTarget.classList.add("lui:hidden")}clearDebounce(){this.debounceTimer&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}escapeHtml(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}getItemValue(e){return typeof e=="object"?e.value:e}isValueSelected(e){return this.findSelectedIndex(e)>-1}isExistingOption(e){return this.optionsValue.some(t=>String(t.value)===String(e))}deepClone(e){return JSON.parse(JSON.stringify(e))}};O(ve,"targets",["input","inputWrapper","listbox","optionsContainer","optionTemplate","option","selectedTags","hiddenField","hiddenFields","loading","noResults","createOption","createOptionText"]),O(ve,"values",{multiple:{type:Boolean,default:!1},allowCustom:{type:Boolean,default:!1},url:String,minChars:{type:Number,default:0},debounce:{type:Number,default:300},options:{type:Array,default:[]},selected:{type:Array,default:[]},foreignKey:String,nestedModel:String});var Ve=class extends A{constructor(){super(...arguments);O(this,"handleMouseEnter",e=>{e.target.dataset.hover=""});O(this,"handleMouseLeave",e=>{delete e.target.dataset.hover})}fieldTargetConnected(e){e.addEventListener("mouseenter",this.handleMouseEnter),e.addEventListener("mouseleave",this.handleMouseLeave)}fieldTargetDisconnected(e){e.removeEventListener("mouseenter",this.handleMouseEnter),e.removeEventListener("mouseleave",this.handleMouseLeave)}};O(Ve,"targets",["field"]);var ye=class extends A{connect(){this.activate(this.defaultTabValue)}select(s){s.preventDefault();let e=this.tabTargets.indexOf(s.currentTarget);e!==-1&&this.activate(e)}activate(s){this.tabTargets.forEach((e,t)=>{t===s?(e.dataset.active="",e.setAttribute("aria-selected","true"),e.setAttribute("tabindex","0")):(delete e.dataset.active,e.setAttribute("aria-selected","false"),e.setAttribute("tabindex","-1"))}),this.panelTargets.forEach((e,t)=>{t===s?e.classList.remove("lui:hidden"):e.classList.add("lui:hidden")})}tabTargetConnected(){this.tabTargets.forEach(s=>{s.addEventListener("keydown",this.handleKeydown.bind(this))})}handleKeydown(s){let e=this.tabTargets.indexOf(s.currentTarget),t;switch(s.key){case"ArrowLeft":s.preventDefault(),t=e===0?this.tabTargets.length-1:e-1;break;case"ArrowRight":s.preventDefault(),t=e===this.tabTargets.length-1?0:e+1;break;case"Home":s.preventDefault(),t=0;break;case"End":s.preventDefault(),t=this.tabTargets.length-1;break;default:return}this.activate(t),this.tabTargets[t].focus()}};O(ye,"targets",["tab","panel"]),O(ye,"values",{defaultTab:{type:Number,default:0}});var Ie=class extends A{select(s){let e=s.currentTarget;e.dataset.disabled===void 0&&this.activate(e)}keydown(s){let e=this.optionTargets.indexOf(s.currentTarget),t;switch(s.key){case"ArrowDown":case"ArrowRight":s.preventDefault(),t=this.nextEnabledIndex(e,1);break;case"ArrowUp":case"ArrowLeft":s.preventDefault(),t=this.nextEnabledIndex(e,-1);break;case" ":case"Enter":s.preventDefault(),this.activate(s.currentTarget);return;default:return}t!==-1&&(this.activate(this.optionTargets[t]),this.optionTargets[t].focus())}activate(s){let e=s.dataset.value;this.optionTargets.forEach(t=>{t===s?(t.dataset.checked="",t.setAttribute("aria-checked","true"),t.setAttribute("tabindex","0")):(delete t.dataset.checked,t.setAttribute("aria-checked","false"),t.setAttribute("tabindex","-1"))}),this.fieldTarget.value=e}nextEnabledIndex(s,e){let t=this.optionTargets.length,i=s;for(let n=0;n<t;n++)if(i=(i+e+t)%t,this.optionTargets[i].dataset.disabled===void 0)return i;return-1}};O(Ie,"targets",["field","option"]);var $="lui";Ht();var Ks=Ke.start();window.Stimulus=Ks;function In(s){s.register(`${$}-clipboard`,Ce),s.register(`${$}-checkbox`,Se),s.register(`${$}-alert`,ze),s.register(`${$}-layout`,Le),s.register(`${$}-main`,Xe),s.register(`${$}-accordion`,ce),s.register(`${$}-modal`,he),s.register(`${$}-reveal`,ue),s.register(`${$}-switch`,Fe),s.register(`${$}-dropdown`,de),s.register(`${$}-dropzone`,Me),s.register(`${$}-toast`,fe),s.register(`${$}-tooltip`,be),s.register(`${$}-combobox`,ve),s.register(`${$}-field`,Ve),s.register(`${$}-tabs`,ye),s.register(`${$}-radio-group`,Ie)}In(Ks);})();
@@ -0,0 +1,30 @@
1
+ <div class="<%= classes %>" data-lui-accordion-target="item">
2
+ <button
3
+ type="button"
4
+ class="lui:flex lui:w-full lui:items-center lui:justify-between lui:gap-4 lui:rounded-lg lui:py-4 lui:px-1 lui:text-left lui:text-base/6 lui:font-medium lui:text-foreground
5
+ lui:hover:text-foreground-secondary lui:sm:text-sm/6 lui:cursor-pointer
6
+ lui:focus:outline-hidden lui:focus-visible:outline lui:focus-visible:outline-2 lui:focus-visible:outline-offset-2 lui:focus-visible:outline-focus
7
+ lui:transition-colors lui:duration-150"
8
+ data-action="click->lui-accordion#toggle"
9
+ >
10
+ <span><%= @title %></span>
11
+ <svg
12
+ data-lui-accordion-target="arrow"
13
+ class="lui:size-4 lui:shrink-0 lui:text-foreground-muted lui:transition-transform lui:duration-300 lui:ease-[cubic-bezier(0.16,1,0.3,1)]"
14
+ viewBox="0 0 20 20"
15
+ fill="currentColor"
16
+ >
17
+ <path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" />
18
+ </svg>
19
+ </button>
20
+ <div
21
+ data-lui-accordion-target="content"
22
+ class="lui:grid lui:grid-rows-[0fr] lui:opacity-0 lui:transition-all lui:duration-300 lui:ease-[cubic-bezier(0.16,1,0.3,1)]"
23
+ >
24
+ <div class="lui:overflow-hidden">
25
+ <div class="lui:pb-4 lui:px-1 lui:text-base/6 lui:text-foreground-muted lui:sm:text-sm/6">
26
+ <%= content %>
27
+ </div>
28
+ </div>
29
+ </div>
30
+ </div>
@@ -0,0 +1,13 @@
1
+ class LightningUiKit::Accordion::ItemComponent < LightningUiKit::BaseComponent
2
+ def initialize(title:, **options)
3
+ @title = title
4
+ @options = options
5
+ end
6
+
7
+ def classes
8
+ merge_classes([
9
+ "lui:py-1",
10
+ @options[:class]
11
+ ].compact.join(" "))
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ <%= tag.div(class: classes, data: data) do %>
2
+ <% items.each do |item| %>
3
+ <%= item %>
4
+ <% end %>
5
+ <% end %>
@@ -0,0 +1,22 @@
1
+ class LightningUiKit::AccordionComponent < LightningUiKit::BaseComponent
2
+ renders_many :items, LightningUiKit::Accordion::ItemComponent
3
+
4
+ def initialize(open_first: true, **options)
5
+ @open_first = open_first
6
+ @options = options
7
+ end
8
+
9
+ def classes
10
+ merge_classes([
11
+ "lui:divide-y lui:divide-border",
12
+ @options[:class]
13
+ ].compact.join(" "))
14
+ end
15
+
16
+ def data
17
+ {
18
+ controller: "lui-accordion",
19
+ lui_accordion_open_first_value: @open_first
20
+ }.merge(@options[:data] || {})
21
+ end
22
+ end
@@ -1,4 +1,15 @@
1
- <%= tag.div class: classes do %>
2
- <%= heroicon("information-circle", options: { class: "lui:w-4 lui:h-4 lui:me-3 lui:shrink-0 lui:inline" }) %>
3
- <%= content %>
1
+ <%= tag.div(class: classes, role: "alert", data: @title ? { type: @type, controller: "lui-alert" } : { type: @type }) do %>
2
+ <%= heroicon(icon, variant: @title ? :outline : :solid, options: { class: icon_classes }) %>
3
+ <span class="lui:sr-only"><%= @type.to_s.humanize %></span>
4
+ <% if @title %>
5
+ <h5 class="<%= title_classes %>"><%= @title %></h5>
6
+ <div class="lui:text-foreground-secondary"><%= content %></div>
7
+ <% if footer.present? %>
8
+ <div class="lui:mt-3">
9
+ <%= footer %>
10
+ </div>
11
+ <% end %>
12
+ <% else %>
13
+ <%= content %>
14
+ <% end %>
4
15
  <% end %>
@@ -1,14 +1,67 @@
1
1
  class LightningUiKit::AlertComponent < LightningUiKit::BaseComponent
2
- def initialize(type: :info, **options)
2
+ renders_one :footer
3
+
4
+ def initialize(title: nil, type: :info, **options)
5
+ @title = title
3
6
  @type = type
4
7
  @options = options
5
8
  end
6
9
 
7
- def default_classes
8
- "lui:flex lui:items-center lui:p-4 lui:text-sm lui:text-neutral-text lui:rounded-lg lui:bg-neutral-bg"
10
+ def classes
11
+ merge_classes([base_classes, type_classes, @options[:class]].compact.join(" "))
9
12
  end
10
13
 
11
- def classes
12
- [default_classes, @options[:class]].compact.join(" ")
14
+ def icon
15
+ case @type
16
+ when :error then "exclamation-triangle"
17
+ when :success then "check-circle"
18
+ when :warning then "exclamation-triangle"
19
+ else "information-circle"
20
+ end
21
+ end
22
+
23
+ def icon_classes
24
+ base = if @title
25
+ "lui:absolute lui:left-4 lui:top-4 lui:size-4"
26
+ else
27
+ "lui:size-4 lui:me-3 lui:shrink-0"
28
+ end
29
+
30
+ case @type
31
+ when :error then "#{base} lui:text-destructive-text"
32
+ when :success then "#{base} lui:text-success-text"
33
+ when :warning then "#{base} lui:text-warning-text"
34
+ else "#{base} lui:text-foreground"
35
+ end
36
+ end
37
+
38
+ def title_classes
39
+ base = "lui:mb-1 lui:font-medium lui:leading-none lui:tracking-tight"
40
+ case @type
41
+ when :error then "#{base} lui:text-destructive-text"
42
+ when :success then "#{base} lui:text-success-text"
43
+ when :warning then "#{base} lui:text-warning-text"
44
+ else base
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def base_classes
51
+ shared = "lui:text-sm lui:text-foreground lui:rounded-lg lui:border lui:transition-opacity lui:duration-300 lui:ease-out lui:opacity-100"
52
+ if @title
53
+ "lui:relative lui:w-full #{shared} lui:py-4 lui:pl-11 lui:pr-4"
54
+ else
55
+ "lui:flex lui:items-center #{shared} lui:p-4"
56
+ end
57
+ end
58
+
59
+ def type_classes
60
+ case @type
61
+ when :error then "lui:border-destructive-border/50"
62
+ when :success then "lui:border-success-indicator/50"
63
+ when :warning then "lui:border-warning-indicator/50"
64
+ else "lui:border-border"
65
+ end
13
66
  end
14
67
  end
@@ -0,0 +1,34 @@
1
+ <%= tag.div(class: classes, data: data) do %>
2
+ <% if header? || title? || description? || action? %>
3
+ <div data-slot="card-header" class="lui:grid lui:auto-rows-min lui:grid-rows-[auto_auto] lui:items-start lui:gap-1.5 lui:px-6 <%= 'lui:grid-cols-[1fr_auto]' if action? %>">
4
+ <% if header? %>
5
+ <%= header %>
6
+ <% end %>
7
+ <% if title? %>
8
+ <div data-slot="card-title" class="lui:text-base lui:leading-none lui:font-semibold lui:tracking-tight lui:text-foreground">
9
+ <%= title %>
10
+ </div>
11
+ <% end %>
12
+ <% if description? %>
13
+ <div data-slot="card-description" class="lui:text-foreground-muted lui:text-sm/relaxed">
14
+ <%= description %>
15
+ </div>
16
+ <% end %>
17
+ <% if action? %>
18
+ <div data-slot="card-action" class="lui:col-start-2 lui:row-span-2 lui:row-start-1 lui:self-start lui:justify-self-end">
19
+ <%= action %>
20
+ </div>
21
+ <% end %>
22
+ </div>
23
+ <% end %>
24
+ <% if content.present? %>
25
+ <div data-slot="card-content" class="lui:px-6">
26
+ <%= content %>
27
+ </div>
28
+ <% end %>
29
+ <% if footer? %>
30
+ <div data-slot="card-footer" class="lui:flex lui:items-center lui:gap-4 lui:border-t lui:border-border lui:px-6 lui:pt-6">
31
+ <%= footer %>
32
+ </div>
33
+ <% end %>
34
+ <% end %>
@@ -0,0 +1,22 @@
1
+ class LightningUiKit::CardComponent < LightningUiKit::BaseComponent
2
+ renders_one :header
3
+ renders_one :title
4
+ renders_one :description
5
+ renders_one :footer
6
+ renders_one :action
7
+
8
+ def initialize(**options)
9
+ @options = options
10
+ end
11
+
12
+ def classes
13
+ merge_classes([
14
+ "lui:flex lui:flex-col lui:gap-6 lui:rounded-xl lui:border lui:border-border lui:bg-surface lui:py-6 lui:text-foreground lui:shadow-sm",
15
+ @options[:class]
16
+ ].compact.join(" "))
17
+ end
18
+
19
+ def data
20
+ @options[:data] || {}
21
+ end
22
+ end
@@ -1,7 +1,7 @@
1
- <div class="lui:relative lui:isolate lui:flex lui:h-screen lui:w-full lui:bg-surface lui:max-lg:flex-col lui:max-lg:h-auto lui:max-lg:min-h-screen lui:lg:bg-surface-aside lui:overflow-hidden" data-controller="lui-layout">
1
+ <div class="lui-page-gradient lui:relative lui:isolate lui:flex lui:h-screen lui:w-full lui:bg-surface-page lui:max-lg:flex-col lui:max-lg:h-auto lui:max-lg:min-h-screen lui:overflow-hidden" data-controller="lui-layout">
2
2
  <%# Desktop Sidebar (fixed, hidden on mobile) %>
3
3
  <div class="lui:fixed lui:inset-y-0 lui:left-0 <%= sidebar_width_class %> lui:max-lg:hidden lui:z-10">
4
- <nav class="lui:flex lui:h-full lui:min-h-0 lui:flex-col">
4
+ <nav class="lui:flex lui:h-full lui:min-h-0 lui:flex-col lui:bg-surface-aside lui:backdrop-blur-[24px] lui:backdrop-saturate-150">
5
5
  <%# Sidebar content %>
6
6
  <div class="lui:flex lui:flex-1 lui:flex-col lui:overflow-y-auto lui:p-4">
7
7
  <% if header? %>
@@ -64,7 +64,7 @@
64
64
  ></div>
65
65
 
66
66
  <%# Mobile Sidebar Panel %>
67
- <div class="lui:fixed lui:inset-y-0 lui:left-0 <%= sidebar_width_class %> lui:bg-surface-aside lui:-translate-x-full lui:transition-transform lui:duration-300 lui:ease-out lui:shadow-xl lui:group-data-[open]:translate-x-0">
67
+ <div class="lui:fixed lui:inset-y-0 lui:left-0 <%= sidebar_width_class %> lui:bg-surface-page lui:-translate-x-full lui:transition-transform lui:duration-300 lui:ease-out lui:shadow-xl lui:group-data-[open]:translate-x-0">
68
68
  <nav class="lui:flex lui:h-full lui:min-h-0 lui:flex-col">
69
69
  <%# Close button %>
70
70
  <div class="lui:flex lui:items-center lui:justify-end lui:p-4">
@@ -0,0 +1,14 @@
1
+ class LightningUiKit::RadioGroup::OptionComponent < LightningUiKit::BaseComponent
2
+ attr_reader :value, :label, :description
3
+
4
+ def initialize(value:, label:, description: nil, disabled: false)
5
+ @value = value
6
+ @label = label
7
+ @description = description
8
+ @disabled = disabled
9
+ end
10
+
11
+ def disabled?
12
+ @disabled
13
+ end
14
+ end
@@ -0,0 +1,60 @@
1
+ <%= tag.div(class: classes, data: data, role: "radiogroup") do %>
2
+ <%= render_label %>
3
+ <% if @description %>
4
+ <%= tag.p(
5
+ @description,
6
+ class: "lui:text-base/6 lui:text-foreground-muted lui:data-disabled:opacity-50 lui:sm:text-sm/6",
7
+ data: description_data
8
+ ) %>
9
+ <% end %>
10
+ <div data-slot="options" class="lui:space-y-3">
11
+ <% options.each_with_index do |option, index| %>
12
+ <div
13
+ role="radio"
14
+ tabindex="<%= index == 0 ? 0 : -1 %>"
15
+ aria-checked="<%= selected?(option.value) %>"
16
+ data-lui-radio-group-target="option"
17
+ data-value="<%= option.value %>"
18
+ data-action="click->lui-radio-group#select keydown->lui-radio-group#keydown"
19
+ class="lui:group lui:flex lui:items-start lui:gap-4 lui:cursor-pointer lui:focus:outline-hidden lui:sm:gap-3"
20
+ <%= "data-checked" if selected?(option.value) %>
21
+ <%= "data-disabled" if @disabled || option.disabled? %>
22
+ >
23
+ <span class="lui:relative lui:isolate lui:mt-0.5 lui:flex lui:size-[1.125rem] lui:shrink-0 lui:items-center lui:justify-center lui:rounded-full lui:sm:size-4
24
+ lui:border lui:border-border-strong
25
+ lui:before:absolute lui:before:inset-0 lui:before:-z-10 lui:before:rounded-full lui:before:bg-surface-input lui:before:shadow-sm
26
+ lui:after:absolute lui:after:inset-0 lui:after:rounded-full lui:after:shadow-[inset_0_1px_--theme(--color-white/15%)]
27
+ lui:group-data-checked:border-transparent lui:group-data-checked:bg-(--radio-checked-border) lui:group-data-checked:before:bg-(--radio-checked-bg)
28
+ lui:group-hover:border-border-hover lui:group-hover:group-data-checked:border-transparent
29
+ lui:group-data-focus:outline lui:group-data-focus:outline-2 lui:group-data-focus:outline-offset-2 lui:group-data-focus:outline-focus
30
+ lui:group-data-disabled:opacity-50 lui:group-data-disabled:border-border-strong lui:group-data-disabled:bg-surface-hover
31
+ lui:group-data-disabled:[--radio-indicator:var(--lui-theme-foreground)]/50 lui:group-data-disabled:before:bg-transparent
32
+ lui:forced-colors:[--radio-indicator:HighlightText] lui:forced-colors:[--radio-checked-bg:Highlight]
33
+ lui:forced-colors:group-data-disabled:[--radio-indicator:Highlight]
34
+ lui:[--radio-checked-bg:var(--lui-theme-surface-invert)] lui:[--radio-checked-border:var(--lui-theme-border-invert)] lui:[--radio-indicator:var(--lui-theme-foreground-invert)]
35
+ lui:transition-colors lui:duration-150"
36
+ >
37
+ <span class="lui:size-2 lui:rounded-full lui:bg-(--radio-indicator) lui:opacity-0 lui:group-data-checked:opacity-100 lui:transition-opacity lui:duration-150"></span>
38
+ </span>
39
+ <div class="lui:flex lui:flex-col lui:gap-0.5">
40
+ <span class="lui:text-base/6 lui:text-foreground lui:select-none lui:group-data-disabled:opacity-50 lui:sm:text-sm/6 lui:font-medium" data-slot="label">
41
+ <%= option.label %>
42
+ </span>
43
+ <% if option.description %>
44
+ <span class="lui:text-sm/5 lui:text-foreground-muted lui:group-data-disabled:opacity-50">
45
+ <%= option.description %>
46
+ </span>
47
+ <% end %>
48
+ </div>
49
+ </div>
50
+ <% end %>
51
+ </div>
52
+ <%= render_hidden_field %>
53
+ <% if has_errors? %>
54
+ <%= tag.p(
55
+ error_messages,
56
+ class: "lui:text-base/6 lui:text-destructive-text lui:data-disabled:opacity-50 lui:sm:text-sm/6",
57
+ data: error_data
58
+ ) %>
59
+ <% end %>
60
+ <% end %>