luxen-ui 0.6.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cdn/custom-elements.json +132 -89
- package/cdn/elements/dialog/dialog.d.ts +1 -0
- package/cdn/elements/dialog/dialog.d.ts.map +1 -1
- package/cdn/elements/dialog/dialog.js +4 -1
- package/cdn/elements/dialog/dialog.js.map +1 -1
- package/cdn/elements/dialog/dialog.styles.js +1 -1
- package/cdn/elements/dialog/dialog.styles.js.map +1 -1
- package/cdn/elements/drawer/drawer.d.ts +2 -1
- package/cdn/elements/drawer/drawer.d.ts.map +1 -1
- package/cdn/elements/drawer/drawer.js +1 -1
- package/cdn/elements/drawer/drawer.js.map +1 -1
- package/cdn/standalone.css +0 -5
- package/cdn/standalone.js +13 -5
- package/cdn/standalone.js.map +1 -1
- package/cdn/styles/elements/close-button/square.css +0 -5
- package/dist/css/elements/close-button/square.css +0 -5
- package/dist/custom-elements.json +132 -89
- package/dist/elements/dialog/dialog.css +4 -2
- package/dist/elements/dialog/dialog.d.ts +1 -0
- package/dist/elements/dialog/dialog.d.ts.map +1 -1
- package/dist/elements/dialog/dialog.js +13 -2
- package/dist/elements/drawer/drawer.css +1 -1
- package/dist/elements/drawer/drawer.d.ts +2 -1
- package/dist/elements/drawer/drawer.d.ts.map +1 -1
- package/dist/elements/drawer/drawer.js +7 -1
- package/dist/templates/elements/close-button.md +24 -3
- package/package.json +1 -1
package/cdn/standalone.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone.js","names":["t","e","s","o","n","r","i","S","c","i","e","h","r","o","n","a","c","l","p","d","u","f","b","y","t","s","t","i","s","e","o","n","r","l","c","a","u","$","s","i","t","e","r","o","n","o","o","n","t","r","e","t","o","e","t","r","n","r","t","e","e","t","r","t","t","o","t","t","defaultOptions","detectOverflow","computePosition","arrow","autoPlacement","flip","hide","inline","offset","shift","limitShift","size","getComputedStyle"],"sources":["../src/html/registry.ts","../src/html/define.ts","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/css-tag.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/reactive-element.js","../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/lit-html.js","../../../node_modules/.pnpm/lit-element@4.2.2/node_modules/lit-element/lit-element.js","../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/is-server.js","../src/html/shared/luxen-element.ts","../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/static.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/custom-element.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/property.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/state.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/event-options.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/base.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/query.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/query-all.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/query-async.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/query-assigned-elements.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/query-assigned-nodes.js","../src/html/shared/styles/host.css?inline","../src/html/shared/styles/host.styles.ts","../src/html/elements/avatar/avatar.css?inline","../src/html/elements/avatar/avatar.ts","../src/html/elements/avatar/index.ts","../src/html/elements/badge/badge.ts","../src/html/elements/badge/index.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js","../../../node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js","../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directives/map.js","../src/html/elements/carousel/carousel.css?inline","../src/html/elements/carousel/carousel.ts","../src/html/elements/carousel/index.ts","../src/html/elements/carousel-item/carousel-item.css?inline","../src/html/elements/carousel-item/carousel-item.ts","../src/html/elements/carousel-item/index.ts","../src/html/elements/dialog/dialog.css?inline","../src/html/elements/dialog/dialog.styles.ts","../src/html/elements/dialog/dialog.ts","../src/html/elements/dialog/index.ts","../src/html/elements/divider/divider.ts","../src/html/elements/divider/index.ts","../src/html/elements/drawer/drawer.css?inline","../src/html/elements/drawer/drawer.ts","../src/html/elements/drawer/index.ts","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../src/html/shared/controllers/popover.ts","../src/html/elements/dropdown/dropdown.css?inline","../src/html/elements/dropdown/dropdown.ts","../src/html/elements/dropdown/index.ts","../src/html/elements/dropdown-item/dropdown-item.css?inline","../src/html/elements/dropdown-item/dropdown-item.ts","../src/html/elements/dropdown-item/index.ts","../../../node_modules/.pnpm/iconify-icon@3.0.2/node_modules/iconify-icon/dist/iconify-icon.mjs","../src/html/elements/icon/icon.css?inline","../src/html/elements/icon/icon.ts","../src/html/elements/icon/index.ts","../src/html/elements/input-otp/input-otp.ts","../src/html/elements/input-otp/index.ts","../src/html/elements/input-stepper/input-stepper.ts","../src/html/elements/input-stepper/index.ts","../src/html/elements/popover/popover.css?inline","../src/html/elements/popover/popover.ts","../src/html/elements/popover/index.ts","../src/html/shared/luxen-form-associated-element.ts","../src/html/elements/rating/rating.css?inline","../src/html/elements/rating/rating.ts","../src/html/elements/rating/index.ts","../src/html/elements/skeleton/skeleton.ts","../src/html/elements/skeleton/index.ts","../src/html/elements/spinner/spinner.css?inline","../src/html/elements/spinner/spinner.ts","../src/html/elements/spinner/index.ts","../src/html/elements/sticky-bar/sticky-bar.css?inline","../src/html/elements/sticky-bar/sticky-bar.ts","../src/html/elements/sticky-bar/index.ts","../src/html/elements/tabs/tabs.ts","../src/html/elements/tabs/index.ts","../src/html/elements/toast/toast.ts","../src/html/elements/toast/index.ts","../src/html/elements/tooltip/tooltip.css?inline","../src/html/elements/tooltip/tooltip.ts","../src/html/elements/tooltip/index.ts","../src/html/elements/tree/tree.css?inline","../src/html/elements/tree/tree.ts","../src/html/elements/tree/index.ts","../src/html/elements/tree-item/tree-item.css?inline","../src/html/elements/tree-item/tree-item.ts","../src/html/elements/tree-item/index.ts"],"sourcesContent":["/** Every component base name the library ships. */\nexport type ElementBaseName =\n | 'avatar'\n | 'badge'\n | 'carousel'\n | 'carousel-item'\n | 'dialog'\n | 'divider'\n | 'drawer'\n | 'dropdown'\n | 'dropdown-item'\n | 'icon'\n | 'input-otp'\n | 'input-stepper'\n | 'popover'\n | 'skeleton'\n | 'spinner'\n | 'rating'\n | 'sticky-bar'\n | 'stories'\n | 'story'\n | 'stories-viewer'\n | 'tabs'\n | 'toast'\n | 'toast-item'\n | 'tooltip'\n | 'tree'\n | 'tree-item';\n\nlet _elementPrefix = 'l';\nlet _cssPrefix = 'l';\nconst _registered = new Set<ElementBaseName>();\n\n/** Set the global prefix. Must be called before defining elements. */\nexport function setPrefix(prefix: { element: string; css: string }): void {\n _elementPrefix = prefix.element;\n _cssPrefix = prefix.css;\n}\n\n/** Get the current prefixes. */\nexport function getPrefix(): { element: string; css: string } {\n return { element: _elementPrefix, css: _cssPrefix };\n}\n\n/** Derive the full tag name from element prefix + base name. */\nexport function tagName(baseName: ElementBaseName): string {\n return `${_elementPrefix}-${baseName}`;\n}\n\n/** Prefix a CSS class name. `cls('toast-icon')` → `'l-toast-icon'` */\nexport function cls(name: string): string {\n return `${_cssPrefix}-${name}`;\n}\n\n/** Generate a globally unique prefixed ID. `uniqueId('toast')` → `'l:toast:1'` */\nlet _uid = 0;\nexport function uniqueId(base: string): string {\n return `${_cssPrefix}:${base}:${++_uid}`;\n}\n\n/** Check if a base name is already registered. */\nexport function isRegistered(baseName: ElementBaseName): boolean {\n return _registered.has(baseName);\n}\n\n/** Mark a base name as registered. Called internally by define(). */\nexport function markRegistered(baseName: ElementBaseName): void {\n _registered.add(baseName);\n}\n","import { markRegistered, isRegistered, tagName, type ElementBaseName } from './registry.js';\n\n/**\n * Register a Luxen element with the custom elements registry.\n *\n * @param baseName - The element's base name (e.g. `'badge'`, `'toast-item'`).\n * @param elementClass - The custom element class to define.\n */\nexport function define(baseName: ElementBaseName, elementClass: CustomElementConstructor): void {\n if (isRegistered(baseName)) return;\n markRegistered(baseName);\n const tag = tagName(baseName);\n if (!customElements.get(tag)) {\n customElements.define(tag, elementClass);\n }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.2\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst o=!1;export{o as isServer};\n//# sourceMappingURL=is-server.js.map\n","import { LitElement } from 'lit';\n\n/**\n * Base class for all Luxen custom elements.\n * Extends LitElement with shared utilities.\n */\nexport class LuxenElement extends LitElement {\n /**\n * Dispatch a custom event. Returns `true` if not cancelled.\n *\n * @param name - Event name (unprefixed, e.g. `'show'`).\n * @param options - CustomEvent options. Defaults: bubbles + composed.\n */\n emit<T = unknown>(\n name: string,\n options?: {\n detail?: T;\n bubbles?: boolean;\n composed?: boolean;\n cancelable?: boolean;\n },\n ): boolean {\n const event = new CustomEvent<T>(name, {\n bubbles: options?.bubbles ?? true,\n composed: options?.composed ?? true,\n cancelable: options?.cancelable ?? false,\n detail: options?.detail as T,\n });\n this.dispatchEvent(event);\n return !event.defaultPrevented;\n }\n}\n","import{html as t,svg as r,mathml as e}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst a=Symbol.for(\"\"),o=t=>{if(t?.r===a)return t?._$litStatic$},s=t=>({_$litStatic$:t,r:a}),i=(t,...r)=>({_$litStatic$:r.reduce((r,e,a)=>r+(t=>{if(void 0!==t._$litStatic$)return t._$litStatic$;throw Error(`Value passed to 'literal' function must be a 'literal' result: ${t}. Use 'unsafeStatic' to pass non-literal values, but\\n take care to ensure page security.`)})(e)+t[a+1],t[0]),r:a}),l=new Map,n=t=>(r,...e)=>{const a=e.length;let s,i;const n=[],u=[];let c,$=0,f=!1;for(;$<a;){for(c=r[$];$<a&&void 0!==(i=e[$],s=o(i));)c+=s+r[++$],f=!0;$!==a&&u.push(i),n.push(c),$++}if($===a&&n.push(r[a]),f){const t=n.join(\"$$lit$$\");void 0===(r=l.get(t))&&(n.raw=n,l.set(t,r=n)),e=u}return t(r,...e)},u=n(t),c=n(r),$=n(e);export{u as html,i as literal,$ as mathml,c as svg,s as unsafeStatic,n as withStatic};\n//# sourceMappingURL=static.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer(()=>{customElements.define(t,e)}):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nfunction t(t){return(n,o)=>{const c=\"function\"==typeof n?n:n[o];Object.assign(c,t)}}export{t as eventOptions};\n//# sourceMappingURL=event-options.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e,r){return(n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;if(r){const{get:e,set:r}=\"object\"==typeof s?n:i??(()=>{const t=Symbol();return{get(){return this[t]},set(e){this[t]=e}}})();return t(n,s,{get(){let t=e.call(this);return void 0===t&&(t=o(this),(null!==t||this.hasUpdated)&&r.call(this,t)),t}})}return t(n,s,{get(){return o(this)}})}}export{e as query};\n//# sourceMappingURL=query.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nlet e;function r(r){return(n,o)=>t(n,o,{get(){return(this.renderRoot??(e??=document.createDocumentFragment())).querySelectorAll(r)}})}export{r as queryAll};\n//# sourceMappingURL=query-all.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nfunction r(r){return(n,e)=>t(n,e,{async get(){return await this.updateComplete,this.renderRoot?.querySelector(r)??null}})}export{r as queryAsync};\n//# sourceMappingURL=query-async.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function o(o){return(e,n)=>{const{slot:r,selector:s}=o??{},c=\"slot\"+(r?`[name=${r}]`:\":not([name])\");return t(e,n,{get(){const t=this.renderRoot?.querySelector(c),e=t?.assignedElements(o)??[];return void 0===s?e:e.filter(t=>t.matches(s))}})}}export{o as queryAssignedElements};\n//# sourceMappingURL=query-assigned-elements.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function n(n){return(o,r)=>{const{slot:e}=n??{},s=\"slot\"+(e?`[name=${e}]`:\":not([name])\");return t(o,r,{get(){const t=this.renderRoot?.querySelector(s);return t?.assignedNodes(n)??[]}})}}export{n as queryAssignedNodes};\n//# sourceMappingURL=query-assigned-nodes.js.map\n",":host {\n box-sizing: border-box;\n}\n\n:host *,\n:host *::before,\n:host *::after {\n box-sizing: border-box;\n}\n\n[hidden] {\n display: none !important;\n}\n","import { unsafeCSS } from 'lit';\nimport raw from './host.css?inline';\n\n/**\n * Styles applied to every shadow-DOM element via `static styles`.\n * Wrapper module: `unsafeCSS()` is called once here so all 12+ importers\n * share the same `CSSResult` instance (one constructed `CSSStyleSheet`,\n * not one per importing element).\n */\nexport default unsafeCSS(raw);\n",":host {\n --_size: 40px;\n --_font-size: 1rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n width: var(--_size);\n height: var(--_size);\n border-radius: calc(var(--_size) * 0.2);\n isolation: isolate;\n vertical-align: middle;\n flex-shrink: 0;\n color: var(--l-color-text-secondary);\n}\n\n:host([size='xs']) {\n --_size: 24px;\n --_font-size: 0.75rem;\n}\n:host([size='sm']) {\n --_size: 32px;\n --_font-size: 0.875rem;\n}\n:host([size='lg']) {\n --_size: 48px;\n --_font-size: 1.25rem;\n}\n:host([size='xl']) {\n --_size: 56px;\n --_font-size: 1.25rem;\n}\n\nimg {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: inherit;\n}\n\n.initials {\n margin: auto;\n}\n\n.icon {\n width: 60%;\n height: 60%;\n color: currentColor;\n}\n\n.badge {\n position: absolute;\n bottom: 0;\n right: 0;\n z-index: 1;\n height: 12px;\n min-width: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding-inline: 2px;\n border-radius: 3px;\n box-shadow: 0 0 0 2px var(--l-color-surface);\n background-color: var(--l-color-surface);\n font-size: 0.625rem;\n font-weight: 500;\n font-variant-numeric: tabular-nums;\n line-height: 1;\n color: var(--l-color-text-primary);\n overflow: hidden;\n}\n\n/*\n * Inset ring via ::after so it renders on top of the <img>.\n * A box-shadow on :host would be covered by the image since\n * it fills the entire element with object-fit: cover.\n */\n.base::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: inherit;\n box-shadow: inset 0 0 0 1px light-dark(oklch(0 0 0 / 7%), oklch(100% 0 0 / 10%));\n pointer-events: none;\n}\n\n.base {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n border: none;\n border-radius: calc(var(--_size) * 0.2);\n background-color: var(--color, var(--l-color-bg-fill-neutral-soft));\n color: oklch(\n from var(--color) calc(0.65 - 0.2 * sign(l - 0.5)) calc(c * (1.75 + 0.25 * sign(l - 0.5))) h\n );\n font-size: var(--_font-size);\n font-weight: 500;\n line-height: 1;\n text-transform: uppercase;\n padding: 0;\n cursor: inherit;\n}\n\n@supports (color: contrast-color(red vs black, white)) {\n .base {\n color: contrast-color(\n var(--color, var(--l-color-bg-fill-neutral-soft)) vs\n oklch(from var(--color) 0.45 calc(c * 2) h),\n oklch(from var(--color) 0.85 calc(c * 1.5) h) to AA\n );\n }\n}\n\nbutton.base {\n cursor: pointer;\n}\n\nbutton.base:focus-visible {\n outline: 2px solid var(--l-focus-ring);\n outline-offset: 2px;\n}\n\nbutton.base:hover {\n box-shadow: inset 0 0 0 1.5px var(--l-color-border-interactive);\n}\n\n@container style(--appearance: circle) {\n .base {\n border-radius: 50%;\n }\n}\n","import { html, nothing, svg, unsafeCSS } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { html as staticHtml, literal } from 'lit/static-html.js';\nimport { property, state } from 'lit/decorators.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './avatar.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\nfunction getInitials(name: string): string {\n return name\n .match(/(\\b\\S)?/g)!\n .join('')\n .match(/(^\\S|\\S$)?/g)!\n .join('')\n .toUpperCase();\n}\n\nconst defaultIcon = svg`<svg class=\"icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z\" />\n</svg>`;\n\n/**\n * @summary An avatar component for displaying user images, initials, or a default icon.\n * @customElement l-avatar\n */\nexport class Avatar extends LuxenElement {\n static styles = [hostStyles, styles];\n\n @property()\n src = '';\n\n @property()\n name = '';\n\n @property({ reflect: true })\n size = 'md';\n\n @property({ type: Number })\n badge = 0;\n\n @property({ type: Boolean, reflect: true })\n interactive = false;\n\n @state() private _hasError = false;\n\n willUpdate(changed: Map<string, unknown>) {\n if (changed.has('src')) {\n this._hasError = false;\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'img');\n }\n }\n\n updated() {\n if (this.name) {\n this.setAttribute('aria-label', this.name);\n }\n\n const isCircle = getComputedStyle(this).getPropertyValue('--appearance').trim() === 'circle';\n this.style.borderRadius = isCircle ? '50%' : '';\n }\n\n private get _tag() {\n return this.interactive ? literal`button` : literal`div`;\n }\n\n render() {\n const content =\n this.src && !this._hasError\n ? html`<img\n src=${this.src}\n alt=${this.name || ''}\n @error=${this._onError}\n />`\n : this.name\n ? html`<span class=\"initials\">${getInitials(this.name)}</span>`\n : html`<slot>${defaultIcon}</slot>`;\n\n return staticHtml`\n <${this._tag} class=\"base\" type=${this.interactive ? 'button' : nothing}>\n ${content}\n </${this._tag}>\n ${\n this.badge\n ? html`<div\n class=\"badge\"\n aria-hidden=\"true\"\n >\n ${this.badge}\n </div>`\n : nothing\n }\n `;\n }\n\n private _onError = () => {\n this._hasError = true;\n };\n}\n","import { define } from '../../define.js';\nimport { Avatar } from './avatar.js';\nexport * from './avatar.js';\ndefine('avatar', Avatar);\n","import { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\n\nexport type BadgeVariant = 'info' | 'success' | 'warning' | 'danger' | 'neutral';\nexport type BadgeSize = 'sm' | 'md' | 'lg';\nexport type BadgeAppearance = 'outlined' | 'filled' | 'filled-outlined' | 'accent';\n\n/**\n * @summary A badge component for displaying small status indicators.\n * @customElement l-badge\n */\nexport class Badge extends LuxenElement {\n override createRenderRoot() {\n return this;\n }\n\n /** Style variant: `info`, `success`, `warning`, `danger`, or `neutral` (default) */\n @property({ reflect: true }) variant?: BadgeVariant;\n\n /** Display as pill shape */\n @property({ type: Boolean, reflect: true }) pill = false;\n\n /** Badge size: `sm`, `lg`. Default is md. */\n @property({ reflect: true }) size?: BadgeSize;\n\n /** Visual appearance: `filled`, `filled-outlined`, `accent`. Default is outlined. */\n @property({ reflect: true }) appearance?: BadgeAppearance;\n}\n","import { define } from '../../define.js';\nimport { Badge } from './badge.js';\nexport * from './badge.js';\ndefine('badge', Badge);\n","function isNumber(subject) {\n return typeof subject === 'number';\n}\nfunction isString(subject) {\n return typeof subject === 'string';\n}\nfunction isBoolean(subject) {\n return typeof subject === 'boolean';\n}\nfunction isObject(subject) {\n return Object.prototype.toString.call(subject) === '[object Object]';\n}\nfunction mathAbs(n) {\n return Math.abs(n);\n}\nfunction mathSign(n) {\n return Math.sign(n);\n}\nfunction deltaAbs(valueB, valueA) {\n return mathAbs(valueB - valueA);\n}\nfunction factorAbs(valueB, valueA) {\n if (valueB === 0 || valueA === 0) return 0;\n if (mathAbs(valueB) <= mathAbs(valueA)) return 0;\n const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA));\n return mathAbs(diff / valueB);\n}\nfunction roundToTwoDecimals(num) {\n return Math.round(num * 100) / 100;\n}\nfunction arrayKeys(array) {\n return objectKeys(array).map(Number);\n}\nfunction arrayLast(array) {\n return array[arrayLastIndex(array)];\n}\nfunction arrayLastIndex(array) {\n return Math.max(0, array.length - 1);\n}\nfunction arrayIsLastIndex(array, index) {\n return index === arrayLastIndex(array);\n}\nfunction arrayFromNumber(n, startAt = 0) {\n return Array.from(Array(n), (_, i) => startAt + i);\n}\nfunction objectKeys(object) {\n return Object.keys(object);\n}\nfunction objectsMergeDeep(objectA, objectB) {\n return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n objectKeys(currentObject).forEach(key => {\n const valueA = mergedObjects[key];\n const valueB = currentObject[key];\n const areObjects = isObject(valueA) && isObject(valueB);\n mergedObjects[key] = areObjects ? objectsMergeDeep(valueA, valueB) : valueB;\n });\n return mergedObjects;\n }, {});\n}\nfunction isMouseEvent(evt, ownerWindow) {\n return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent;\n}\n\nfunction Alignment(align, viewSize) {\n const predefined = {\n start,\n center,\n end\n };\n function start() {\n return 0;\n }\n function center(n) {\n return end(n) / 2;\n }\n function end(n) {\n return viewSize - n;\n }\n function measure(n, index) {\n if (isString(align)) return predefined[align](n);\n return align(viewSize, n, index);\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction EventStore() {\n let listeners = [];\n function add(node, type, handler, options = {\n passive: true\n }) {\n let removeListener;\n if ('addEventListener' in node) {\n node.addEventListener(type, handler, options);\n removeListener = () => node.removeEventListener(type, handler, options);\n } else {\n const legacyMediaQueryList = node;\n legacyMediaQueryList.addListener(handler);\n removeListener = () => legacyMediaQueryList.removeListener(handler);\n }\n listeners.push(removeListener);\n return self;\n }\n function clear() {\n listeners = listeners.filter(remove => remove());\n }\n const self = {\n add,\n clear\n };\n return self;\n}\n\nfunction Animations(ownerDocument, ownerWindow, update, render) {\n const documentVisibleHandler = EventStore();\n const fixedTimeStep = 1000 / 60;\n let lastTimeStamp = null;\n let accumulatedTime = 0;\n let animationId = 0;\n function init() {\n documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n if (ownerDocument.hidden) reset();\n });\n }\n function destroy() {\n stop();\n documentVisibleHandler.clear();\n }\n function animate(timeStamp) {\n if (!animationId) return;\n if (!lastTimeStamp) {\n lastTimeStamp = timeStamp;\n update();\n update();\n }\n const timeElapsed = timeStamp - lastTimeStamp;\n lastTimeStamp = timeStamp;\n accumulatedTime += timeElapsed;\n while (accumulatedTime >= fixedTimeStep) {\n update();\n accumulatedTime -= fixedTimeStep;\n }\n const alpha = accumulatedTime / fixedTimeStep;\n render(alpha);\n if (animationId) {\n animationId = ownerWindow.requestAnimationFrame(animate);\n }\n }\n function start() {\n if (animationId) return;\n animationId = ownerWindow.requestAnimationFrame(animate);\n }\n function stop() {\n ownerWindow.cancelAnimationFrame(animationId);\n lastTimeStamp = null;\n accumulatedTime = 0;\n animationId = 0;\n }\n function reset() {\n lastTimeStamp = null;\n accumulatedTime = 0;\n }\n const self = {\n init,\n destroy,\n start,\n stop,\n update,\n render\n };\n return self;\n}\n\nfunction Axis(axis, contentDirection) {\n const isRightToLeft = contentDirection === 'rtl';\n const isVertical = axis === 'y';\n const scroll = isVertical ? 'y' : 'x';\n const cross = isVertical ? 'x' : 'y';\n const sign = !isVertical && isRightToLeft ? -1 : 1;\n const startEdge = getStartEdge();\n const endEdge = getEndEdge();\n function measureSize(nodeRect) {\n const {\n height,\n width\n } = nodeRect;\n return isVertical ? height : width;\n }\n function getStartEdge() {\n if (isVertical) return 'top';\n return isRightToLeft ? 'right' : 'left';\n }\n function getEndEdge() {\n if (isVertical) return 'bottom';\n return isRightToLeft ? 'left' : 'right';\n }\n function direction(n) {\n return n * sign;\n }\n const self = {\n scroll,\n cross,\n startEdge,\n endEdge,\n measureSize,\n direction\n };\n return self;\n}\n\nfunction Limit(min = 0, max = 0) {\n const length = mathAbs(min - max);\n function reachedMin(n) {\n return n < min;\n }\n function reachedMax(n) {\n return n > max;\n }\n function reachedAny(n) {\n return reachedMin(n) || reachedMax(n);\n }\n function constrain(n) {\n if (!reachedAny(n)) return n;\n return reachedMin(n) ? min : max;\n }\n function removeOffset(n) {\n if (!length) return n;\n return n - length * Math.ceil((n - max) / length);\n }\n const self = {\n length,\n max,\n min,\n constrain,\n reachedAny,\n reachedMax,\n reachedMin,\n removeOffset\n };\n return self;\n}\n\nfunction Counter(max, start, loop) {\n const {\n constrain\n } = Limit(0, max);\n const loopEnd = max + 1;\n let counter = withinLimit(start);\n function withinLimit(n) {\n return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd);\n }\n function get() {\n return counter;\n }\n function set(n) {\n counter = withinLimit(n);\n return self;\n }\n function add(n) {\n return clone().set(get() + n);\n }\n function clone() {\n return Counter(max, get(), loop);\n }\n const self = {\n get,\n set,\n add,\n clone\n };\n return self;\n}\n\nfunction DragHandler(axis, rootNode, ownerDocument, ownerWindow, target, dragTracker, location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, baseFriction, watchDrag) {\n const {\n cross: crossAxis,\n direction\n } = axis;\n const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA'];\n const nonPassiveEvent = {\n passive: false\n };\n const initEvents = EventStore();\n const dragEvents = EventStore();\n const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20));\n const snapForceBoost = {\n mouse: 300,\n touch: 400\n };\n const freeForceBoost = {\n mouse: 500,\n touch: 600\n };\n const baseSpeed = dragFree ? 43 : 25;\n let isMoving = false;\n let startScroll = 0;\n let startCross = 0;\n let pointerIsDown = false;\n let preventScroll = false;\n let preventClick = false;\n let isMouse = false;\n function init(emblaApi) {\n if (!watchDrag) return;\n function downIfAllowed(evt) {\n if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt);\n }\n const node = rootNode;\n initEvents.add(node, 'dragstart', evt => evt.preventDefault(), nonPassiveEvent).add(node, 'touchmove', () => undefined, nonPassiveEvent).add(node, 'touchend', () => undefined).add(node, 'touchstart', downIfAllowed).add(node, 'mousedown', downIfAllowed).add(node, 'touchcancel', up).add(node, 'contextmenu', up).add(node, 'click', click, true);\n }\n function destroy() {\n initEvents.clear();\n dragEvents.clear();\n }\n function addDragEvents() {\n const node = isMouse ? ownerDocument : rootNode;\n dragEvents.add(node, 'touchmove', move, nonPassiveEvent).add(node, 'touchend', up).add(node, 'mousemove', move, nonPassiveEvent).add(node, 'mouseup', up);\n }\n function isFocusNode(node) {\n const nodeName = node.nodeName || '';\n return focusNodes.includes(nodeName);\n }\n function forceBoost() {\n const boost = dragFree ? freeForceBoost : snapForceBoost;\n const type = isMouse ? 'mouse' : 'touch';\n return boost[type];\n }\n function allowedForce(force, targetChanged) {\n const next = index.add(mathSign(force) * -1);\n const baseForce = scrollTarget.byDistance(force, !dragFree).distance;\n if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce;\n if (skipSnaps && targetChanged) return baseForce * 0.5;\n return scrollTarget.byIndex(next.get(), 0).distance;\n }\n function down(evt) {\n const isMouseEvt = isMouseEvent(evt, ownerWindow);\n isMouse = isMouseEvt;\n preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving;\n isMoving = deltaAbs(target.get(), location.get()) >= 2;\n if (isMouseEvt && evt.button !== 0) return;\n if (isFocusNode(evt.target)) return;\n pointerIsDown = true;\n dragTracker.pointerDown(evt);\n scrollBody.useFriction(0).useDuration(0);\n target.set(location);\n addDragEvents();\n startScroll = dragTracker.readPoint(evt);\n startCross = dragTracker.readPoint(evt, crossAxis);\n eventHandler.emit('pointerDown');\n }\n function move(evt) {\n const isTouchEvt = !isMouseEvent(evt, ownerWindow);\n if (isTouchEvt && evt.touches.length >= 2) return up(evt);\n const lastScroll = dragTracker.readPoint(evt);\n const lastCross = dragTracker.readPoint(evt, crossAxis);\n const diffScroll = deltaAbs(lastScroll, startScroll);\n const diffCross = deltaAbs(lastCross, startCross);\n if (!preventScroll && !isMouse) {\n if (!evt.cancelable) return up(evt);\n preventScroll = diffScroll > diffCross;\n if (!preventScroll) return up(evt);\n }\n const diff = dragTracker.pointerMove(evt);\n if (diffScroll > dragThreshold) preventClick = true;\n scrollBody.useFriction(0.3).useDuration(0.75);\n animation.start();\n target.add(direction(diff));\n evt.preventDefault();\n }\n function up(evt) {\n const currentLocation = scrollTarget.byDistance(0, false);\n const targetChanged = currentLocation.index !== index.get();\n const rawForce = dragTracker.pointerUp(evt) * forceBoost();\n const force = allowedForce(direction(rawForce), targetChanged);\n const forceFactor = factorAbs(rawForce, force);\n const speed = baseSpeed - 10 * forceFactor;\n const friction = baseFriction + forceFactor / 50;\n preventScroll = false;\n pointerIsDown = false;\n dragEvents.clear();\n scrollBody.useDuration(speed).useFriction(friction);\n scrollTo.distance(force, !dragFree);\n isMouse = false;\n eventHandler.emit('pointerUp');\n }\n function click(evt) {\n if (preventClick) {\n evt.stopPropagation();\n evt.preventDefault();\n preventClick = false;\n }\n }\n function pointerDown() {\n return pointerIsDown;\n }\n const self = {\n init,\n destroy,\n pointerDown\n };\n return self;\n}\n\nfunction DragTracker(axis, ownerWindow) {\n const logInterval = 170;\n let startEvent;\n let lastEvent;\n function readTime(evt) {\n return evt.timeStamp;\n }\n function readPoint(evt, evtAxis) {\n const property = evtAxis || axis.scroll;\n const coord = `client${property === 'x' ? 'X' : 'Y'}`;\n return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord];\n }\n function pointerDown(evt) {\n startEvent = evt;\n lastEvent = evt;\n return readPoint(evt);\n }\n function pointerMove(evt) {\n const diff = readPoint(evt) - readPoint(lastEvent);\n const expired = readTime(evt) - readTime(startEvent) > logInterval;\n lastEvent = evt;\n if (expired) startEvent = evt;\n return diff;\n }\n function pointerUp(evt) {\n if (!startEvent || !lastEvent) return 0;\n const diffDrag = readPoint(lastEvent) - readPoint(startEvent);\n const diffTime = readTime(evt) - readTime(startEvent);\n const expired = readTime(evt) - readTime(lastEvent) > logInterval;\n const force = diffDrag / diffTime;\n const isFlick = diffTime && !expired && mathAbs(force) > 0.1;\n return isFlick ? force : 0;\n }\n const self = {\n pointerDown,\n pointerMove,\n pointerUp,\n readPoint\n };\n return self;\n}\n\nfunction NodeRects() {\n function measure(node) {\n const {\n offsetTop,\n offsetLeft,\n offsetWidth,\n offsetHeight\n } = node;\n const offset = {\n top: offsetTop,\n right: offsetLeft + offsetWidth,\n bottom: offsetTop + offsetHeight,\n left: offsetLeft,\n width: offsetWidth,\n height: offsetHeight\n };\n return offset;\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction PercentOfView(viewSize) {\n function measure(n) {\n return viewSize * (n / 100);\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects) {\n const observeNodes = [container].concat(slides);\n let resizeObserver;\n let containerSize;\n let slideSizes = [];\n let destroyed = false;\n function readSize(node) {\n return axis.measureSize(nodeRects.measure(node));\n }\n function init(emblaApi) {\n if (!watchResize) return;\n containerSize = readSize(container);\n slideSizes = slides.map(readSize);\n function defaultCallback(entries) {\n for (const entry of entries) {\n if (destroyed) return;\n const isContainer = entry.target === container;\n const slideIndex = slides.indexOf(entry.target);\n const lastSize = isContainer ? containerSize : slideSizes[slideIndex];\n const newSize = readSize(isContainer ? container : slides[slideIndex]);\n const diffSize = mathAbs(newSize - lastSize);\n if (diffSize >= 0.5) {\n emblaApi.reInit();\n eventHandler.emit('resize');\n break;\n }\n }\n }\n resizeObserver = new ResizeObserver(entries => {\n if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n defaultCallback(entries);\n }\n });\n ownerWindow.requestAnimationFrame(() => {\n observeNodes.forEach(node => resizeObserver.observe(node));\n });\n }\n function destroy() {\n destroyed = true;\n if (resizeObserver) resizeObserver.disconnect();\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction ScrollBody(location, offsetLocation, previousLocation, target, baseDuration, baseFriction) {\n let scrollVelocity = 0;\n let scrollDirection = 0;\n let scrollDuration = baseDuration;\n let scrollFriction = baseFriction;\n let rawLocation = location.get();\n let rawLocationPrevious = 0;\n function seek() {\n const displacement = target.get() - location.get();\n const isInstant = !scrollDuration;\n let scrollDistance = 0;\n if (isInstant) {\n scrollVelocity = 0;\n previousLocation.set(target);\n location.set(target);\n scrollDistance = displacement;\n } else {\n previousLocation.set(location);\n scrollVelocity += displacement / scrollDuration;\n scrollVelocity *= scrollFriction;\n rawLocation += scrollVelocity;\n location.add(scrollVelocity);\n scrollDistance = rawLocation - rawLocationPrevious;\n }\n scrollDirection = mathSign(scrollDistance);\n rawLocationPrevious = rawLocation;\n return self;\n }\n function settled() {\n const diff = target.get() - offsetLocation.get();\n return mathAbs(diff) < 0.001;\n }\n function duration() {\n return scrollDuration;\n }\n function direction() {\n return scrollDirection;\n }\n function velocity() {\n return scrollVelocity;\n }\n function useBaseDuration() {\n return useDuration(baseDuration);\n }\n function useBaseFriction() {\n return useFriction(baseFriction);\n }\n function useDuration(n) {\n scrollDuration = n;\n return self;\n }\n function useFriction(n) {\n scrollFriction = n;\n return self;\n }\n const self = {\n direction,\n duration,\n velocity,\n seek,\n settled,\n useBaseFriction,\n useBaseDuration,\n useFriction,\n useDuration\n };\n return self;\n}\n\nfunction ScrollBounds(limit, location, target, scrollBody, percentOfView) {\n const pullBackThreshold = percentOfView.measure(10);\n const edgeOffsetTolerance = percentOfView.measure(50);\n const frictionLimit = Limit(0.1, 0.99);\n let disabled = false;\n function shouldConstrain() {\n if (disabled) return false;\n if (!limit.reachedAny(target.get())) return false;\n if (!limit.reachedAny(location.get())) return false;\n return true;\n }\n function constrain(pointerDown) {\n if (!shouldConstrain()) return;\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max';\n const diffToEdge = mathAbs(limit[edge] - location.get());\n const diffToTarget = target.get() - location.get();\n const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance);\n target.subtract(diffToTarget * friction);\n if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n target.set(limit.constrain(target.get()));\n scrollBody.useDuration(25).useBaseFriction();\n }\n }\n function toggleActive(active) {\n disabled = !active;\n }\n const self = {\n shouldConstrain,\n constrain,\n toggleActive\n };\n return self;\n}\n\nfunction ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance) {\n const scrollBounds = Limit(-contentSize + viewSize, 0);\n const snapsBounded = measureBounded();\n const scrollContainLimit = findScrollContainLimit();\n const snapsContained = measureContained();\n function usePixelTolerance(bound, snap) {\n return deltaAbs(bound, snap) <= 1;\n }\n function findScrollContainLimit() {\n const startSnap = snapsBounded[0];\n const endSnap = arrayLast(snapsBounded);\n const min = snapsBounded.lastIndexOf(startSnap);\n const max = snapsBounded.indexOf(endSnap) + 1;\n return Limit(min, max);\n }\n function measureBounded() {\n return snapsAligned.map((snapAligned, index) => {\n const {\n min,\n max\n } = scrollBounds;\n const snap = scrollBounds.constrain(snapAligned);\n const isFirst = !index;\n const isLast = arrayIsLastIndex(snapsAligned, index);\n if (isFirst) return max;\n if (isLast) return min;\n if (usePixelTolerance(min, snap)) return min;\n if (usePixelTolerance(max, snap)) return max;\n return snap;\n }).map(scrollBound => parseFloat(scrollBound.toFixed(3)));\n }\n function measureContained() {\n if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max];\n if (containScroll === 'keepSnaps') return snapsBounded;\n const {\n min,\n max\n } = scrollContainLimit;\n return snapsBounded.slice(min, max);\n }\n const self = {\n snapsContained,\n scrollContainLimit\n };\n return self;\n}\n\nfunction ScrollLimit(contentSize, scrollSnaps, loop) {\n const max = scrollSnaps[0];\n const min = loop ? max - contentSize : arrayLast(scrollSnaps);\n const limit = Limit(min, max);\n const self = {\n limit\n };\n return self;\n}\n\nfunction ScrollLooper(contentSize, limit, location, vectors) {\n const jointSafety = 0.1;\n const min = limit.min + jointSafety;\n const max = limit.max + jointSafety;\n const {\n reachedMin,\n reachedMax\n } = Limit(min, max);\n function shouldLoop(direction) {\n if (direction === 1) return reachedMax(location.get());\n if (direction === -1) return reachedMin(location.get());\n return false;\n }\n function loop(direction) {\n if (!shouldLoop(direction)) return;\n const loopDistance = contentSize * (direction * -1);\n vectors.forEach(v => v.add(loopDistance));\n }\n const self = {\n loop\n };\n return self;\n}\n\nfunction ScrollProgress(limit) {\n const {\n max,\n length\n } = limit;\n function get(n) {\n const currentLocation = n - max;\n return length ? currentLocation / -length : 0;\n }\n const self = {\n get\n };\n return self;\n}\n\nfunction ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll) {\n const {\n startEdge,\n endEdge\n } = axis;\n const {\n groupSlides\n } = slidesToScroll;\n const alignments = measureSizes().map(alignment.measure);\n const snaps = measureUnaligned();\n const snapsAligned = measureAligned();\n function measureSizes() {\n return groupSlides(slideRects).map(rects => arrayLast(rects)[endEdge] - rects[0][startEdge]).map(mathAbs);\n }\n function measureUnaligned() {\n return slideRects.map(rect => containerRect[startEdge] - rect[startEdge]).map(snap => -mathAbs(snap));\n }\n function measureAligned() {\n return groupSlides(snaps).map(g => g[0]).map((snap, index) => snap + alignments[index]);\n }\n const self = {\n snaps,\n snapsAligned\n };\n return self;\n}\n\nfunction SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes) {\n const {\n groupSlides\n } = slidesToScroll;\n const {\n min,\n max\n } = scrollContainLimit;\n const slideRegistry = createSlideRegistry();\n function createSlideRegistry() {\n const groupedSlideIndexes = groupSlides(slideIndexes);\n const doNotContain = !containSnaps || containScroll === 'keepSnaps';\n if (scrollSnaps.length === 1) return [slideIndexes];\n if (doNotContain) return groupedSlideIndexes;\n return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n const isFirst = !index;\n const isLast = arrayIsLastIndex(groups, index);\n if (isFirst) {\n const range = arrayLast(groups[0]) + 1;\n return arrayFromNumber(range);\n }\n if (isLast) {\n const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1;\n return arrayFromNumber(range, arrayLast(groups)[0]);\n }\n return group;\n });\n }\n const self = {\n slideRegistry\n };\n return self;\n}\n\nfunction ScrollTarget(loop, scrollSnaps, contentSize, limit, targetVector) {\n const {\n reachedAny,\n removeOffset,\n constrain\n } = limit;\n function minDistance(distances) {\n return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0];\n }\n function findTargetSnap(target) {\n const distance = loop ? removeOffset(target) : constrain(target);\n const ascDiffsToSnaps = scrollSnaps.map((snap, index) => ({\n diff: shortcut(snap - distance, 0),\n index\n })).sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff));\n const {\n index\n } = ascDiffsToSnaps[0];\n return {\n index,\n distance\n };\n }\n function shortcut(target, direction) {\n const targets = [target, target + contentSize, target - contentSize];\n if (!loop) return target;\n if (!direction) return minDistance(targets);\n const matchingTargets = targets.filter(t => mathSign(t) === direction);\n if (matchingTargets.length) return minDistance(matchingTargets);\n return arrayLast(targets) - contentSize;\n }\n function byIndex(index, direction) {\n const diffToSnap = scrollSnaps[index] - targetVector.get();\n const distance = shortcut(diffToSnap, direction);\n return {\n index,\n distance\n };\n }\n function byDistance(distance, snap) {\n const target = targetVector.get() + distance;\n const {\n index,\n distance: targetSnapDistance\n } = findTargetSnap(target);\n const reachedBound = !loop && reachedAny(target);\n if (!snap || reachedBound) return {\n index,\n distance\n };\n const diffToSnap = scrollSnaps[index] - targetSnapDistance;\n const snapDistance = distance + shortcut(diffToSnap, 0);\n return {\n index,\n distance: snapDistance\n };\n }\n const self = {\n byDistance,\n byIndex,\n shortcut\n };\n return self;\n}\n\nfunction ScrollTo(animation, indexCurrent, indexPrevious, scrollBody, scrollTarget, targetVector, eventHandler) {\n function scrollTo(target) {\n const distanceDiff = target.distance;\n const indexDiff = target.index !== indexCurrent.get();\n targetVector.add(distanceDiff);\n if (distanceDiff) {\n if (scrollBody.duration()) {\n animation.start();\n } else {\n animation.update();\n animation.render(1);\n animation.update();\n }\n }\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get());\n indexCurrent.set(target.index);\n eventHandler.emit('select');\n }\n }\n function distance(n, snap) {\n const target = scrollTarget.byDistance(n, snap);\n scrollTo(target);\n }\n function index(n, direction) {\n const targetIndex = indexCurrent.clone().set(n);\n const target = scrollTarget.byIndex(targetIndex.get(), direction);\n scrollTo(target);\n }\n const self = {\n distance,\n index\n };\n return self;\n}\n\nfunction SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus) {\n const focusListenerOptions = {\n passive: true,\n capture: true\n };\n let lastTabPressTime = 0;\n function init(emblaApi) {\n if (!watchFocus) return;\n function defaultCallback(index) {\n const nowTime = new Date().getTime();\n const diffTime = nowTime - lastTabPressTime;\n if (diffTime > 10) return;\n eventHandler.emit('slideFocusStart');\n root.scrollLeft = 0;\n const group = slideRegistry.findIndex(group => group.includes(index));\n if (!isNumber(group)) return;\n scrollBody.useDuration(0);\n scrollTo.index(group, 0);\n eventHandler.emit('slideFocus');\n }\n eventStore.add(document, 'keydown', registerTabPress, false);\n slides.forEach((slide, slideIndex) => {\n eventStore.add(slide, 'focus', evt => {\n if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n defaultCallback(slideIndex);\n }\n }, focusListenerOptions);\n });\n }\n function registerTabPress(event) {\n if (event.code === 'Tab') lastTabPressTime = new Date().getTime();\n }\n const self = {\n init\n };\n return self;\n}\n\nfunction Vector1D(initialValue) {\n let value = initialValue;\n function get() {\n return value;\n }\n function set(n) {\n value = normalizeInput(n);\n }\n function add(n) {\n value += normalizeInput(n);\n }\n function subtract(n) {\n value -= normalizeInput(n);\n }\n function normalizeInput(n) {\n return isNumber(n) ? n : n.get();\n }\n const self = {\n get,\n set,\n add,\n subtract\n };\n return self;\n}\n\nfunction Translate(axis, container) {\n const translate = axis.scroll === 'x' ? x : y;\n const containerStyle = container.style;\n let previousTarget = null;\n let disabled = false;\n function x(n) {\n return `translate3d(${n}px,0px,0px)`;\n }\n function y(n) {\n return `translate3d(0px,${n}px,0px)`;\n }\n function to(target) {\n if (disabled) return;\n const newTarget = roundToTwoDecimals(axis.direction(target));\n if (newTarget === previousTarget) return;\n containerStyle.transform = translate(newTarget);\n previousTarget = newTarget;\n }\n function toggleActive(active) {\n disabled = !active;\n }\n function clear() {\n if (disabled) return;\n containerStyle.transform = '';\n if (!container.getAttribute('style')) container.removeAttribute('style');\n }\n const self = {\n clear,\n to,\n toggleActive\n };\n return self;\n}\n\nfunction SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, location, slides) {\n const roundingSafety = 0.5;\n const ascItems = arrayKeys(slideSizesWithGaps);\n const descItems = arrayKeys(slideSizesWithGaps).reverse();\n const loopPoints = startPoints().concat(endPoints());\n function removeSlideSizes(indexes, from) {\n return indexes.reduce((a, i) => {\n return a - slideSizesWithGaps[i];\n }, from);\n }\n function slidesInGap(indexes, gap) {\n return indexes.reduce((a, i) => {\n const remainingGap = removeSlideSizes(a, gap);\n return remainingGap > 0 ? a.concat([i]) : a;\n }, []);\n }\n function findSlideBounds(offset) {\n return snaps.map((snap, index) => ({\n start: snap - slideSizes[index] + roundingSafety + offset,\n end: snap + viewSize - roundingSafety + offset\n }));\n }\n function findLoopPoints(indexes, offset, isEndEdge) {\n const slideBounds = findSlideBounds(offset);\n return indexes.map(index => {\n const initial = isEndEdge ? 0 : -contentSize;\n const altered = isEndEdge ? contentSize : 0;\n const boundEdge = isEndEdge ? 'end' : 'start';\n const loopPoint = slideBounds[index][boundEdge];\n return {\n index,\n loopPoint,\n slideLocation: Vector1D(-1),\n translate: Translate(axis, slides[index]),\n target: () => location.get() > loopPoint ? initial : altered\n };\n });\n }\n function startPoints() {\n const gap = scrollSnaps[0];\n const indexes = slidesInGap(descItems, gap);\n return findLoopPoints(indexes, contentSize, false);\n }\n function endPoints() {\n const gap = viewSize - scrollSnaps[0] - 1;\n const indexes = slidesInGap(ascItems, gap);\n return findLoopPoints(indexes, -contentSize, true);\n }\n function canLoop() {\n return loopPoints.every(({\n index\n }) => {\n const otherIndexes = ascItems.filter(i => i !== index);\n return removeSlideSizes(otherIndexes, viewSize) <= 0.1;\n });\n }\n function loop() {\n loopPoints.forEach(loopPoint => {\n const {\n target,\n translate,\n slideLocation\n } = loopPoint;\n const shiftLocation = target();\n if (shiftLocation === slideLocation.get()) return;\n translate.to(shiftLocation);\n slideLocation.set(shiftLocation);\n });\n }\n function clear() {\n loopPoints.forEach(loopPoint => loopPoint.translate.clear());\n }\n const self = {\n canLoop,\n clear,\n loop,\n loopPoints\n };\n return self;\n}\n\nfunction SlidesHandler(container, eventHandler, watchSlides) {\n let mutationObserver;\n let destroyed = false;\n function init(emblaApi) {\n if (!watchSlides) return;\n function defaultCallback(mutations) {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n emblaApi.reInit();\n eventHandler.emit('slidesChanged');\n break;\n }\n }\n }\n mutationObserver = new MutationObserver(mutations => {\n if (destroyed) return;\n if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n defaultCallback(mutations);\n }\n });\n mutationObserver.observe(container, {\n childList: true\n });\n }\n function destroy() {\n if (mutationObserver) mutationObserver.disconnect();\n destroyed = true;\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction SlidesInView(container, slides, eventHandler, threshold) {\n const intersectionEntryMap = {};\n let inViewCache = null;\n let notInViewCache = null;\n let intersectionObserver;\n let destroyed = false;\n function init() {\n intersectionObserver = new IntersectionObserver(entries => {\n if (destroyed) return;\n entries.forEach(entry => {\n const index = slides.indexOf(entry.target);\n intersectionEntryMap[index] = entry;\n });\n inViewCache = null;\n notInViewCache = null;\n eventHandler.emit('slidesInView');\n }, {\n root: container.parentElement,\n threshold\n });\n slides.forEach(slide => intersectionObserver.observe(slide));\n }\n function destroy() {\n if (intersectionObserver) intersectionObserver.disconnect();\n destroyed = true;\n }\n function createInViewList(inView) {\n return objectKeys(intersectionEntryMap).reduce((list, slideIndex) => {\n const index = parseInt(slideIndex);\n const {\n isIntersecting\n } = intersectionEntryMap[index];\n const inViewMatch = inView && isIntersecting;\n const notInViewMatch = !inView && !isIntersecting;\n if (inViewMatch || notInViewMatch) list.push(index);\n return list;\n }, []);\n }\n function get(inView = true) {\n if (inView && inViewCache) return inViewCache;\n if (!inView && notInViewCache) return notInViewCache;\n const slideIndexes = createInViewList(inView);\n if (inView) inViewCache = slideIndexes;\n if (!inView) notInViewCache = slideIndexes;\n return slideIndexes;\n }\n const self = {\n init,\n destroy,\n get\n };\n return self;\n}\n\nfunction SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow) {\n const {\n measureSize,\n startEdge,\n endEdge\n } = axis;\n const withEdgeGap = slideRects[0] && readEdgeGap;\n const startGap = measureStartGap();\n const endGap = measureEndGap();\n const slideSizes = slideRects.map(measureSize);\n const slideSizesWithGaps = measureWithGaps();\n function measureStartGap() {\n if (!withEdgeGap) return 0;\n const slideRect = slideRects[0];\n return mathAbs(containerRect[startEdge] - slideRect[startEdge]);\n }\n function measureEndGap() {\n if (!withEdgeGap) return 0;\n const style = ownerWindow.getComputedStyle(arrayLast(slides));\n return parseFloat(style.getPropertyValue(`margin-${endEdge}`));\n }\n function measureWithGaps() {\n return slideRects.map((rect, index, rects) => {\n const isFirst = !index;\n const isLast = arrayIsLastIndex(rects, index);\n if (isFirst) return slideSizes[index] + startGap;\n if (isLast) return slideSizes[index] + endGap;\n return rects[index + 1][startEdge] - rect[startEdge];\n }).map(mathAbs);\n }\n const self = {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n };\n return self;\n}\n\nfunction SlidesToScroll(axis, viewSize, slidesToScroll, loop, containerRect, slideRects, startGap, endGap, pixelTolerance) {\n const {\n startEdge,\n endEdge,\n direction\n } = axis;\n const groupByNumber = isNumber(slidesToScroll);\n function byNumber(array, groupSize) {\n return arrayKeys(array).filter(i => i % groupSize === 0).map(i => array.slice(i, i + groupSize));\n }\n function bySize(array) {\n if (!array.length) return [];\n return arrayKeys(array).reduce((groups, rectB, index) => {\n const rectA = arrayLast(groups) || 0;\n const isFirst = rectA === 0;\n const isLast = rectB === arrayLastIndex(array);\n const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge];\n const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge];\n const gapA = !loop && isFirst ? direction(startGap) : 0;\n const gapB = !loop && isLast ? direction(endGap) : 0;\n const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA));\n if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB);\n if (isLast) groups.push(array.length);\n return groups;\n }, []).map((currentSize, index, groups) => {\n const previousSize = Math.max(groups[index - 1] || 0);\n return array.slice(previousSize, currentSize);\n });\n }\n function groupSlides(array) {\n return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array);\n }\n const self = {\n groupSlides\n };\n return self;\n}\n\nfunction Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler) {\n // Options\n const {\n align,\n axis: scrollAxis,\n direction,\n startIndex,\n loop,\n duration,\n dragFree,\n dragThreshold,\n inViewThreshold,\n slidesToScroll: groupSlides,\n skipSnaps,\n containScroll,\n watchResize,\n watchSlides,\n watchDrag,\n watchFocus\n } = options;\n // Measurements\n const pixelTolerance = 2;\n const nodeRects = NodeRects();\n const containerRect = nodeRects.measure(container);\n const slideRects = slides.map(nodeRects.measure);\n const axis = Axis(scrollAxis, direction);\n const viewSize = axis.measureSize(containerRect);\n const percentOfView = PercentOfView(viewSize);\n const alignment = Alignment(align, viewSize);\n const containSnaps = !loop && !!containScroll;\n const readEdgeGap = loop || !!containScroll;\n const {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n } = SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow);\n const slidesToScroll = SlidesToScroll(axis, viewSize, groupSlides, loop, containerRect, slideRects, startGap, endGap, pixelTolerance);\n const {\n snaps,\n snapsAligned\n } = ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll);\n const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps);\n const {\n snapsContained,\n scrollContainLimit\n } = ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance);\n const scrollSnaps = containSnaps ? snapsContained : snapsAligned;\n const {\n limit\n } = ScrollLimit(contentSize, scrollSnaps, loop);\n // Indexes\n const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop);\n const indexPrevious = index.clone();\n const slideIndexes = arrayKeys(slides);\n // Animation\n const update = ({\n dragHandler,\n scrollBody,\n scrollBounds,\n options: {\n loop\n }\n }) => {\n if (!loop) scrollBounds.constrain(dragHandler.pointerDown());\n scrollBody.seek();\n };\n const render = ({\n scrollBody,\n translate,\n location,\n offsetLocation,\n previousLocation,\n scrollLooper,\n slideLooper,\n dragHandler,\n animation,\n eventHandler,\n scrollBounds,\n options: {\n loop\n }\n }, alpha) => {\n const shouldSettle = scrollBody.settled();\n const withinBounds = !scrollBounds.shouldConstrain();\n const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds;\n const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown();\n if (hasSettledAndIdle) animation.stop();\n const interpolatedLocation = location.get() * alpha + previousLocation.get() * (1 - alpha);\n offsetLocation.set(interpolatedLocation);\n if (loop) {\n scrollLooper.loop(scrollBody.direction());\n slideLooper.loop();\n }\n translate.to(offsetLocation.get());\n if (hasSettledAndIdle) eventHandler.emit('settle');\n if (!hasSettled) eventHandler.emit('scroll');\n };\n const animation = Animations(ownerDocument, ownerWindow, () => update(engine), alpha => render(engine, alpha));\n // Shared\n const friction = 0.68;\n const startLocation = scrollSnaps[index.get()];\n const location = Vector1D(startLocation);\n const previousLocation = Vector1D(startLocation);\n const offsetLocation = Vector1D(startLocation);\n const target = Vector1D(startLocation);\n const scrollBody = ScrollBody(location, offsetLocation, previousLocation, target, duration, friction);\n const scrollTarget = ScrollTarget(loop, scrollSnaps, contentSize, limit, target);\n const scrollTo = ScrollTo(animation, index, indexPrevious, scrollBody, scrollTarget, target, eventHandler);\n const scrollProgress = ScrollProgress(limit);\n const eventStore = EventStore();\n const slidesInView = SlidesInView(container, slides, eventHandler, inViewThreshold);\n const {\n slideRegistry\n } = SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes);\n const slideFocus = SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus);\n // Engine\n const engine = {\n ownerDocument,\n ownerWindow,\n eventHandler,\n containerRect,\n slideRects,\n animation,\n axis,\n dragHandler: DragHandler(axis, root, ownerDocument, ownerWindow, target, DragTracker(axis, ownerWindow), location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, friction, watchDrag),\n eventStore,\n percentOfView,\n index,\n indexPrevious,\n limit,\n location,\n offsetLocation,\n previousLocation,\n options,\n resizeHandler: ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects),\n scrollBody,\n scrollBounds: ScrollBounds(limit, offsetLocation, target, scrollBody, percentOfView),\n scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [location, offsetLocation, previousLocation, target]),\n scrollProgress,\n scrollSnapList: scrollSnaps.map(scrollProgress.get),\n scrollSnaps,\n scrollTarget,\n scrollTo,\n slideLooper: SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, offsetLocation, slides),\n slideFocus,\n slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n slidesInView,\n slideIndexes,\n slideRegistry,\n slidesToScroll,\n target,\n translate: Translate(axis, container)\n };\n return engine;\n}\n\nfunction EventHandler() {\n let listeners = {};\n let api;\n function init(emblaApi) {\n api = emblaApi;\n }\n function getListeners(evt) {\n return listeners[evt] || [];\n }\n function emit(evt) {\n getListeners(evt).forEach(e => e(api, evt));\n return self;\n }\n function on(evt, cb) {\n listeners[evt] = getListeners(evt).concat([cb]);\n return self;\n }\n function off(evt, cb) {\n listeners[evt] = getListeners(evt).filter(e => e !== cb);\n return self;\n }\n function clear() {\n listeners = {};\n }\n const self = {\n init,\n emit,\n off,\n on,\n clear\n };\n return self;\n}\n\nconst defaultOptions = {\n align: 'center',\n axis: 'x',\n container: null,\n slides: null,\n containScroll: 'trimSnaps',\n direction: 'ltr',\n slidesToScroll: 1,\n inViewThreshold: 0,\n breakpoints: {},\n dragFree: false,\n dragThreshold: 10,\n loop: false,\n skipSnaps: false,\n duration: 25,\n startIndex: 0,\n active: true,\n watchDrag: true,\n watchResize: true,\n watchSlides: true,\n watchFocus: true\n};\n\nfunction OptionsHandler(ownerWindow) {\n function mergeOptions(optionsA, optionsB) {\n return objectsMergeDeep(optionsA, optionsB || {});\n }\n function optionsAtMedia(options) {\n const optionsAtMedia = options.breakpoints || {};\n const matchedMediaOptions = objectKeys(optionsAtMedia).filter(media => ownerWindow.matchMedia(media).matches).map(media => optionsAtMedia[media]).reduce((a, mediaOption) => mergeOptions(a, mediaOption), {});\n return mergeOptions(options, matchedMediaOptions);\n }\n function optionsMediaQueries(optionsList) {\n return optionsList.map(options => objectKeys(options.breakpoints || {})).reduce((acc, mediaQueries) => acc.concat(mediaQueries), []).map(ownerWindow.matchMedia);\n }\n const self = {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n };\n return self;\n}\n\nfunction PluginsHandler(optionsHandler) {\n let activePlugins = [];\n function init(emblaApi, plugins) {\n activePlugins = plugins.filter(({\n options\n }) => optionsHandler.optionsAtMedia(options).active !== false);\n activePlugins.forEach(plugin => plugin.init(emblaApi, optionsHandler));\n return plugins.reduce((map, plugin) => Object.assign(map, {\n [plugin.name]: plugin\n }), {});\n }\n function destroy() {\n activePlugins = activePlugins.filter(plugin => plugin.destroy());\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction EmblaCarousel(root, userOptions, userPlugins) {\n const ownerDocument = root.ownerDocument;\n const ownerWindow = ownerDocument.defaultView;\n const optionsHandler = OptionsHandler(ownerWindow);\n const pluginsHandler = PluginsHandler(optionsHandler);\n const mediaHandlers = EventStore();\n const eventHandler = EventHandler();\n const {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n } = optionsHandler;\n const {\n on,\n off,\n emit\n } = eventHandler;\n const reInit = reActivate;\n let destroyed = false;\n let engine;\n let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions);\n let options = mergeOptions(optionsBase);\n let pluginList = [];\n let pluginApis;\n let container;\n let slides;\n function storeElements() {\n const {\n container: userContainer,\n slides: userSlides\n } = options;\n const customContainer = isString(userContainer) ? root.querySelector(userContainer) : userContainer;\n container = customContainer || root.children[0];\n const customSlides = isString(userSlides) ? container.querySelectorAll(userSlides) : userSlides;\n slides = [].slice.call(customSlides || container.children);\n }\n function createEngine(options) {\n const engine = Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler);\n if (options.loop && !engine.slideLooper.canLoop()) {\n const optionsWithoutLoop = Object.assign({}, options, {\n loop: false\n });\n return createEngine(optionsWithoutLoop);\n }\n return engine;\n }\n function activate(withOptions, withPlugins) {\n if (destroyed) return;\n optionsBase = mergeOptions(optionsBase, withOptions);\n options = optionsAtMedia(optionsBase);\n pluginList = withPlugins || pluginList;\n storeElements();\n engine = createEngine(options);\n optionsMediaQueries([optionsBase, ...pluginList.map(({\n options\n }) => options)]).forEach(query => mediaHandlers.add(query, 'change', reActivate));\n if (!options.active) return;\n engine.translate.to(engine.location.get());\n engine.animation.init();\n engine.slidesInView.init();\n engine.slideFocus.init(self);\n engine.eventHandler.init(self);\n engine.resizeHandler.init(self);\n engine.slidesHandler.init(self);\n if (engine.options.loop) engine.slideLooper.loop();\n if (container.offsetParent && slides.length) engine.dragHandler.init(self);\n pluginApis = pluginsHandler.init(self, pluginList);\n }\n function reActivate(withOptions, withPlugins) {\n const startIndex = selectedScrollSnap();\n deActivate();\n activate(mergeOptions({\n startIndex\n }, withOptions), withPlugins);\n eventHandler.emit('reInit');\n }\n function deActivate() {\n engine.dragHandler.destroy();\n engine.eventStore.clear();\n engine.translate.clear();\n engine.slideLooper.clear();\n engine.resizeHandler.destroy();\n engine.slidesHandler.destroy();\n engine.slidesInView.destroy();\n engine.animation.destroy();\n pluginsHandler.destroy();\n mediaHandlers.clear();\n }\n function destroy() {\n if (destroyed) return;\n destroyed = true;\n mediaHandlers.clear();\n deActivate();\n eventHandler.emit('destroy');\n eventHandler.clear();\n }\n function scrollTo(index, jump, direction) {\n if (!options.active || destroyed) return;\n engine.scrollBody.useBaseFriction().useDuration(jump === true ? 0 : options.duration);\n engine.scrollTo.index(index, direction || 0);\n }\n function scrollNext(jump) {\n const next = engine.index.add(1).get();\n scrollTo(next, jump, -1);\n }\n function scrollPrev(jump) {\n const prev = engine.index.add(-1).get();\n scrollTo(prev, jump, 1);\n }\n function canScrollNext() {\n const next = engine.index.add(1).get();\n return next !== selectedScrollSnap();\n }\n function canScrollPrev() {\n const prev = engine.index.add(-1).get();\n return prev !== selectedScrollSnap();\n }\n function scrollSnapList() {\n return engine.scrollSnapList;\n }\n function scrollProgress() {\n return engine.scrollProgress.get(engine.offsetLocation.get());\n }\n function selectedScrollSnap() {\n return engine.index.get();\n }\n function previousScrollSnap() {\n return engine.indexPrevious.get();\n }\n function slidesInView() {\n return engine.slidesInView.get();\n }\n function slidesNotInView() {\n return engine.slidesInView.get(false);\n }\n function plugins() {\n return pluginApis;\n }\n function internalEngine() {\n return engine;\n }\n function rootNode() {\n return root;\n }\n function containerNode() {\n return container;\n }\n function slideNodes() {\n return slides;\n }\n const self = {\n canScrollNext,\n canScrollPrev,\n containerNode,\n internalEngine,\n destroy,\n off,\n on,\n emit,\n plugins,\n previousScrollSnap,\n reInit,\n rootNode,\n scrollNext,\n scrollPrev,\n scrollProgress,\n scrollSnapList,\n scrollTo,\n selectedScrollSnap,\n slideNodes,\n slidesInView,\n slidesNotInView\n };\n activate(userOptions, userPlugins);\n setTimeout(() => eventHandler.emit('init'), 0);\n return self;\n}\nEmblaCarousel.globalOptions = undefined;\n\nexport { EmblaCarousel as default };\n//# sourceMappingURL=embla-carousel.esm.js.map\n","const defaultOptions = {\n active: true,\n breakpoints: {},\n delay: 4000,\n jump: false,\n playOnInit: true,\n stopOnFocusIn: true,\n stopOnInteraction: true,\n stopOnMouseEnter: false,\n stopOnLastSnap: false,\n rootNode: null\n};\n\nfunction normalizeDelay(emblaApi, delay) {\n const scrollSnaps = emblaApi.scrollSnapList();\n if (typeof delay === 'number') {\n return scrollSnaps.map(() => delay);\n }\n return delay(scrollSnaps, emblaApi);\n}\nfunction getAutoplayRootNode(emblaApi, rootNode) {\n const emblaRootNode = emblaApi.rootNode();\n return rootNode && rootNode(emblaRootNode) || emblaRootNode;\n}\n\nfunction Autoplay(userOptions = {}) {\n let options;\n let emblaApi;\n let destroyed;\n let delay;\n let timerStartTime = null;\n let timerId = 0;\n let autoplayActive = false;\n let mouseIsOver = false;\n let playOnDocumentVisible = false;\n let jump = false;\n function init(emblaApiInstance, optionsHandler) {\n emblaApi = emblaApiInstance;\n const {\n mergeOptions,\n optionsAtMedia\n } = optionsHandler;\n const optionsBase = mergeOptions(defaultOptions, Autoplay.globalOptions);\n const allOptions = mergeOptions(optionsBase, userOptions);\n options = optionsAtMedia(allOptions);\n if (emblaApi.scrollSnapList().length <= 1) return;\n jump = options.jump;\n destroyed = false;\n delay = normalizeDelay(emblaApi, options.delay);\n const {\n eventStore,\n ownerDocument\n } = emblaApi.internalEngine();\n const isDraggable = !!emblaApi.internalEngine().options.watchDrag;\n const root = getAutoplayRootNode(emblaApi, options.rootNode);\n eventStore.add(ownerDocument, 'visibilitychange', visibilityChange);\n if (isDraggable) {\n emblaApi.on('pointerDown', pointerDown);\n }\n if (isDraggable && !options.stopOnInteraction) {\n emblaApi.on('pointerUp', pointerUp);\n }\n if (options.stopOnMouseEnter) {\n eventStore.add(root, 'mouseenter', mouseEnter);\n }\n if (options.stopOnMouseEnter && !options.stopOnInteraction) {\n eventStore.add(root, 'mouseleave', mouseLeave);\n }\n if (options.stopOnFocusIn) {\n emblaApi.on('slideFocusStart', stopAutoplay);\n }\n if (options.stopOnFocusIn && !options.stopOnInteraction) {\n eventStore.add(emblaApi.containerNode(), 'focusout', startAutoplay);\n }\n if (options.playOnInit) startAutoplay();\n }\n function destroy() {\n emblaApi.off('pointerDown', pointerDown).off('pointerUp', pointerUp).off('slideFocusStart', stopAutoplay);\n stopAutoplay();\n destroyed = true;\n autoplayActive = false;\n }\n function setTimer() {\n const {\n ownerWindow\n } = emblaApi.internalEngine();\n ownerWindow.clearTimeout(timerId);\n timerId = ownerWindow.setTimeout(next, delay[emblaApi.selectedScrollSnap()]);\n timerStartTime = new Date().getTime();\n emblaApi.emit('autoplay:timerset');\n }\n function clearTimer() {\n const {\n ownerWindow\n } = emblaApi.internalEngine();\n ownerWindow.clearTimeout(timerId);\n timerId = 0;\n timerStartTime = null;\n emblaApi.emit('autoplay:timerstopped');\n }\n function startAutoplay() {\n if (destroyed) return;\n if (documentIsHidden()) {\n playOnDocumentVisible = true;\n return;\n }\n if (!autoplayActive) emblaApi.emit('autoplay:play');\n setTimer();\n autoplayActive = true;\n }\n function stopAutoplay() {\n if (destroyed) return;\n if (autoplayActive) emblaApi.emit('autoplay:stop');\n clearTimer();\n autoplayActive = false;\n }\n function visibilityChange() {\n if (documentIsHidden()) {\n playOnDocumentVisible = autoplayActive;\n return stopAutoplay();\n }\n if (playOnDocumentVisible) startAutoplay();\n }\n function documentIsHidden() {\n const {\n ownerDocument\n } = emblaApi.internalEngine();\n return ownerDocument.visibilityState === 'hidden';\n }\n function pointerDown() {\n if (!mouseIsOver) stopAutoplay();\n }\n function pointerUp() {\n if (!mouseIsOver) startAutoplay();\n }\n function mouseEnter() {\n mouseIsOver = true;\n stopAutoplay();\n }\n function mouseLeave() {\n mouseIsOver = false;\n startAutoplay();\n }\n function play(jumpOverride) {\n if (typeof jumpOverride !== 'undefined') jump = jumpOverride;\n startAutoplay();\n }\n function stop() {\n if (autoplayActive) stopAutoplay();\n }\n function reset() {\n if (autoplayActive) startAutoplay();\n }\n function isPlaying() {\n return autoplayActive;\n }\n function next() {\n const {\n index\n } = emblaApi.internalEngine();\n const nextIndex = index.clone().add(1).get();\n const lastIndex = emblaApi.scrollSnapList().length - 1;\n const kill = options.stopOnLastSnap && nextIndex === lastIndex;\n if (emblaApi.canScrollNext()) {\n emblaApi.scrollNext(jump);\n } else {\n emblaApi.scrollTo(0, jump);\n }\n emblaApi.emit('autoplay:select');\n if (kill) return stopAutoplay();\n startAutoplay();\n }\n function timeUntilNext() {\n if (!timerStartTime) return null;\n const currentDelay = delay[emblaApi.selectedScrollSnap()];\n const timePastSinceStart = new Date().getTime() - timerStartTime;\n return currentDelay - timePastSinceStart;\n }\n const self = {\n name: 'autoplay',\n options: userOptions,\n init,\n destroy,\n play,\n stop,\n reset,\n isPlaying,\n timeUntilNext\n };\n return self;\n}\nAutoplay.globalOptions = undefined;\n\nexport { Autoplay as default };\n//# sourceMappingURL=embla-carousel-autoplay.esm.js.map\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nfunction*o(o,f){if(void 0!==o){let i=0;for(const t of o)yield f(t,i++)}}export{o as map};\n//# sourceMappingURL=map.js.map\n",":host {\n --slide-height: 19rem;\n --slide-size: 100%;\n --slide-gap: 0;\n\n --button-size: 48px;\n --button-arrow-size: 20px;\n --button-arrow-color: #4b5563;\n --button-offset: 8px;\n --button-border-color: #e5e7eb;\n --button-border-radius: 8px;\n --button-bg: rgba(255, 255, 255, 0.8);\n --button-color: inherit;\n --button-box-shadow-hover: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n\n --dot-color: #9ca3af;\n --dot-color-active: #111827;\n --dot-margin: 0.5rem 0;\n --dot-edge-scale: 0.5;\n\n --scrollbar-color: #d1d5db transparent;\n\n display: block;\n /* Note: moving this elsewhere (e.g wrapper) may bug the container translate position */\n position: relative;\n container-type: inline-size;\n}\n\n:host([single]) {\n --slide-size: 100%;\n --slide-gap: 0;\n}\n\n:host([axis='y']) .container {\n flex-direction: column;\n max-height: var(--slide-height);\n}\n\n:host([axis='y']) .viewport {\n max-height: var(--slide-height);\n}\n\n.viewport {\n overflow: hidden;\n}\n\n:host([with-scrollbar]) .viewport {\n overflow-x: scroll;\n scrollbar-color: var(--scrollbar-color); /* progress / track */\n scrollbar-gutter: stable both-edges;\n scrollbar-width: thin;\n}\n\n.container {\n backface-visibility: hidden;\n display: flex;\n gap: var(--slide-gap);\n touch-action: pan-y pinch-zoom;\n}\n\n::slotted(l-carousel-item) {\n flex: 0 0 var(--slide-size);\n min-width: 0;\n}\n\n/*\n ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n SCROLL BUTTONS\n ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n */\n.scroll-buttons--inside {\n position: absolute;\n inset: 0;\n pointer-events: none;\n}\n\n.scroll-buttons--outside {\n display: flex;\n gap: 8px;\n justify-content: end;\n padding-block: 8px;\n}\n\n.scroll-buttons--disabled,\n.inactive .scroll-buttons {\n display: none;\n}\n\n.button-next,\n.button-previous,\n.button-fullscreen {\n display: flex;\n align-items: center;\n justify-content: center;\n appearance: none;\n touch-action: manipulation;\n border: 1px solid var(--button-border-color);\n border-radius: var(--button-border-radius);\n width: var(--button-size);\n height: var(--button-size);\n background-color: var(--button-bg);\n color: var(--button-color);\n cursor: pointer;\n pointer-events: auto;\n -webkit-tap-highlight-color: rgba(49, 49, 49, 0.5);\n}\n\n.scroll-buttons--inside .button-previous,\n.scroll-buttons--inside .button-next,\n.button-fullscreen {\n position: absolute;\n top: calc(50% - (var(--button-size) / 2));\n z-index: 1;\n}\n\n.scroll-buttons--inside .button-previous {\n left: var(--button-offset);\n}\n\n.scroll-buttons--inside .button-next {\n right: var(--button-offset);\n}\n\n.scroll-buttons--inside .button:disabled {\n visibility: hidden;\n}\n\n.button:disabled {\n cursor: not-allowed;\n pointer-events: none;\n opacity: 0.4;\n}\n\n.button-fullscreen {\n border-radius: 4px;\n right: var(--button-offset);\n top: var(--button-offset);\n width: calc(var(--button-size) * 0.75);\n height: calc(var(--button-size) * 0.75);\n}\n\n@container (min-width: 640px) {\n .button-fullscreen {\n width: var(--button-size);\n height: var(--button-size);\n }\n}\n\n@media (hover: hover) {\n .button:hover:not(:disabled) {\n box-shadow: var(--button-box-shadow-hover);\n }\n}\n\n.button svg {\n width: var(--button-arrow-size);\n height: var(--button-arrow-size);\n color: var(--button-arrow-color);\n}\n\n/*\n ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n DOTS\n ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n */\n\n.dots {\n display: flex;\n justify-content: center;\n margin: var(--dot-margin);\n}\n\n.dot {\n appearance: none;\n display: inline-flex;\n align-items: center;\n justify-items: center;\n touch-action: manipulation;\n background: none;\n padding-inline: 0.25rem;\n padding-block: 0.5rem;\n border: 0;\n cursor: pointer;\n transition: transform 180ms ease;\n transform-origin: center;\n}\n\n.dot[data-edge] {\n transform: scale(var(--dot-edge-scale));\n}\n\n.dot--bar i {\n background: var(--dot-color);\n height: 0.125rem;\n width: 1rem;\n}\n\n.dot--selected i {\n background: var(--dot-color-active);\n}\n\n.dot--circle i {\n display: inline-block;\n width: 10px;\n height: 10px;\n border-radius: 8px;\n border: 2px solid var(--dot-color-active);\n}\n\n.dot--circle.dot--selected i {\n width: 30px;\n}\n","import type { EmblaCarouselType, EmblaOptionsType } from 'embla-carousel';\nimport EmblaCarousel from 'embla-carousel';\n\ntype AxisOptionType = 'x' | 'y';\ntype AlignmentOptionType =\n | 'start'\n | 'center'\n | 'end'\n | ((viewSize: number, snapSize: number, index: number) => number);\ntype SlidesToScrollOptionType = 'auto' | number;\ntype ScrollContainOptionType = 'trimSnaps' | 'keepSnaps' | false;\nimport Autoplay from 'embla-carousel-autoplay';\nimport { html, nothing, unsafeCSS, type PropertyValues, type CSSResultGroup } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { map } from 'lit/directives/map.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './carousel.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * Carousel custom element based on Embla Carousel.\n *\n * @csspart viewport - The carousel viewport container.\n * @csspart container - The slides container slot.\n * @csspart scroll-buttons - The scroll buttons wrapper.\n * @csspart button - Any navigation button.\n * @csspart button-previous - The previous slide navigation button.\n * @csspart button-next - The next slide navigation button.\n * @csspart button-dot - Any dot navigation button.\n * @csspart dots - The dots navigation wrapper.\n * @csspart button-fullscreen - The fullscreen button.\n * @csspart button-icon - Any button icon SVG.\n *\n * @cssproperty --slide-height - Height of slides in vertical axis mode.\n * @cssproperty --slide-size - Width of each slide (e.g. `100%`, `calc(100% / 3)`).\n * @cssproperty --slide-gap - Gap between slides.\n * @cssproperty --button-size - Size of navigation buttons.\n * @cssproperty --button-arrow-size - Size of arrow icons inside buttons.\n * @cssproperty --button-arrow-color - Color of arrow icons.\n * @cssproperty --button-offset - Offset of inside-positioned buttons from edges.\n * @cssproperty --button-border-color - Border color of buttons.\n * @cssproperty --button-border-radius - Border radius of buttons.\n * @cssproperty --button-bg - Background color of buttons.\n * @cssproperty --button-color - Text/icon color of buttons.\n * @cssproperty --dot-color - Color of inactive dots.\n * @cssproperty --dot-color-active - Color of active dot.\n * @cssproperty --dot-margin - Margin around dots container.\n * @cssproperty --dot-edge-scale - Scale factor applied to edge dots that signal more dots exist beyond the visible window (default `0.5`).\n */\nexport class Carousel extends LuxenElement {\n static override styles: CSSResultGroup = [hostStyles, styles];\n\n embla!: EmblaCarouselType;\n\n /**\n * Choose a delay between transitions in milliseconds (default: 4000).\n */\n @property({ type: Number, reflect: true })\n accessor autoplay = 0;\n\n /**\n * Configure autoplay options.\n *\n * @link https://www.embla-carousel.com/plugins/autoplay/#options\n */\n @property({ type: Object, attribute: 'autoplay-options' })\n accessor autoplayOptions: any;\n\n /**\n * Choose scroll axis between x and y.\n *\n * @link https://www.embla-carousel.com/api/options/#axis\n */\n @property()\n accessor axis: AxisOptionType = 'x';\n\n /**\n * Align the slides relative to the carousel viewport.\n *\n * @link https://www.embla-carousel.com/api/options/#align\n */\n @property()\n accessor align: AlignmentOptionType = 'start';\n\n /**\n * Breakpoint overrides for options.\n */\n @property({ type: Object, reflect: true })\n accessor breakpoints: any = {};\n\n /**\n * Enables infinite looping.\n *\n * @link https://www.embla-carousel.com/api/options/#loop\n */\n @property({ type: Boolean })\n accessor loop = false;\n\n /**\n * Enables momentum scrolling (drag free).\n *\n * @link https://www.embla-carousel.com/api/options/#dragfree\n */\n @property({ type: Boolean, attribute: 'drag-free' })\n accessor dragFree = false;\n\n /**\n * Set scroll duration when triggered by API methods.\n *\n * @link https://www.embla-carousel.com/api/options/#duration\n */\n @property({ type: Number })\n accessor duration = 20;\n\n /**\n * Allow skipping scroll snaps on vigorous drag.\n *\n * @link https://www.embla-carousel.com/api/options/#skipsnaps\n */\n @property({ type: Boolean, attribute: 'skip-snaps' })\n accessor skipSnaps = false;\n\n /**\n * Group slides together for navigation.\n *\n * @link https://www.embla-carousel.com/api/options/#slidestoscroll\n */\n @property({ attribute: 'slides-to-scroll' })\n accessor slidesToScroll: SlidesToScrollOptionType = 1;\n\n /**\n * Set the initial scroll snap index.\n *\n * @link https://www.embla-carousel.com/api/options/#startindex\n */\n @property({ type: Number, attribute: 'start-index' })\n accessor startIndex = 0;\n\n /**\n * Clear leading and trailing empty space.\n *\n * @link https://www.embla-carousel.com/api/options/#containscroll\n */\n @property({ attribute: 'contain-scroll' })\n accessor containScroll: ScrollContainOptionType = 'trimSnaps';\n\n @property({ type: Boolean })\n accessor single = false;\n\n @property({ type: Boolean, attribute: 'with-dots' })\n accessor withDots = false;\n\n @property({ type: Boolean, attribute: 'with-scrollbar' })\n accessor withScrollbar = false;\n\n @property({ type: Boolean, attribute: 'with-fullscreen' })\n accessor withFullscreen = false;\n\n @property({ type: String, attribute: 'dot-appearance' })\n accessor dotAppearance: 'circle' | 'bar' = 'bar';\n\n /**\n * Maximum number of dots rendered at once. When the snap count exceeds this,\n * a sliding window keeps the active dot in view and shrinks the edge dot(s)\n * on the side where dots are hidden. `0` (default) renders all dots.\n */\n @property({ type: Number, attribute: 'max-visible-dots' })\n accessor maxVisibleDots = 0;\n\n @property({ type: String, attribute: 'scroll-buttons-position' })\n accessor scrollButtonsPosition: 'inside' | 'outside' = 'inside';\n\n @state() private accessor _selectedSnap = 0;\n\n @query('.scroll-buttons') scrollButtons!: HTMLElement;\n @query('.button-previous') previousBtn!: HTMLButtonElement;\n @query('.button-next') nextBtn!: HTMLButtonElement;\n @query('.container') container!: HTMLSlotElement;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.createEmbla();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n if (this.embla) {\n this.embla.destroy();\n }\n }\n\n protected override firstUpdated(): void {\n this.attachEventListeners();\n }\n\n protected createEmbla() {\n this.embla = EmblaCarousel(this, this.options());\n this.embla\n .on('init', this.onInit)\n .on('reInit', this.onReInit)\n .on('resize', this.onResize)\n .on('slidesInView', this.onSlidesInView)\n .on('select', this.onSelect)\n .on('destroy', this.detachEventListeners);\n }\n\n protected onSlidesInView = () => {\n this.emit('slides-in-view', {\n detail: { indexes: this.embla.slidesInView() },\n });\n };\n\n protected onInit = () => {\n this.updateNavigation();\n };\n\n protected onReInit = () => {\n this.updateNavigation();\n this.requestUpdate();\n };\n\n protected onSelect = () => {\n this.emit('select', {\n detail: { index: this.embla.selectedScrollSnap() },\n });\n this.updateNavigation();\n };\n\n protected onResize = () => {\n this.requestUpdate();\n };\n\n protected attachEventListeners() {\n this.previousBtn.addEventListener('click', this.previous);\n this.nextBtn.addEventListener('click', this.next);\n }\n\n protected detachEventListeners = () => {\n this.previousBtn.removeEventListener('click', this.previous);\n this.nextBtn.removeEventListener('click', this.next);\n };\n\n protected updateNavigation() {\n const canScroll = this.embla.canScrollPrev() || this.embla.canScrollNext();\n\n this.previousBtn.toggleAttribute('disabled', !this.embla.canScrollPrev());\n this.nextBtn.toggleAttribute('disabled', !this.embla.canScrollNext());\n this.scrollButtons.classList.toggle('scroll-buttons--disabled', !canScroll);\n\n this._selectedSnap = this.embla.selectedScrollSnap();\n }\n\n override async updated(changedProperties: PropertyValues<this>) {\n if (changedProperties.has('autoplay') && this.autoplay) {\n this.initAutoplay();\n }\n }\n\n private initAutoplay() {\n this.embla.reInit(this.options(), [Autoplay(this.autoplayOptions || { delay: this.autoplay })]);\n }\n\n private handleSlotChange = (event: Event) => {\n const slot = event.target as HTMLSlotElement;\n if (slot.assignedElements().length > 0) {\n this.embla.reInit(this.options());\n }\n };\n\n private handleDotClick = (event: Event) => {\n const button = event.currentTarget as HTMLButtonElement;\n this.goToSlide(Number(button.dataset.index));\n };\n\n options(): EmblaOptionsType {\n const container = this.shadowRoot!.querySelector('slot')!;\n\n if (!container) {\n return {\n container: this,\n slides: [],\n };\n }\n\n return {\n container: container,\n slides: container.assignedElements() as HTMLElement[],\n containScroll: this.containScroll,\n breakpoints: this.breakpoints,\n axis: this.axis,\n align: this.align,\n dragFree: this.dragFree,\n duration: this.duration,\n loop: this.loop,\n slidesToScroll: this.slidesToScroll,\n skipSnaps: this.skipSnaps,\n startIndex: this.startIndex,\n };\n }\n\n next = () => {\n this.embla.scrollNext();\n };\n\n previous = () => {\n this.embla.scrollPrev();\n };\n\n goToSlide(index: number, jump?: boolean) {\n this.embla.scrollTo(index, jump);\n }\n\n slideNodes() {\n this.embla.slideNodes();\n }\n\n slidesInView() {\n this.embla.slidesInView();\n }\n\n isActive() {\n return this.embla?.internalEngine().options.active;\n }\n\n renderFullscreenButton() {\n return html`<button\n type=\"button\"\n part=\"button button-fullscreen\"\n class=\"button button-fullscreen\"\n @click=${() => this.emit('fullscreen')}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n fill=\"currentColor\"\n part=\"button-icon button-icon-fullscreen\"\n >\n <path\n d=\"M295 183c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l135-135 0 86.1c0 13.3 10.7 24 24 24s24-10.7 24-24l0-144c0-13.3-10.7-24-24-24L344 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l86.1 0-135 135zM217 329c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L48 430.1 48 344c0-13.3-10.7-24-24-24S0 330.7 0 344L0 488c0 13.3 10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-86.1 0 135-135z\"\n />\n </svg>\n </button>`;\n }\n\n renderNextPreviousButtons() {\n return html`<div\n class=\"scroll-buttons scroll-buttons--${this.scrollButtonsPosition}\"\n part=\"scroll-buttons\"\n >\n <button\n part=\"button button-previous\"\n class=\"button button-previous\"\n type=\"button\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n fill=\"currentColor\"\n part=\"button-icon button-icon-previous\"\n >\n <path\n d=\"M7 239c-9.4 9.4-9.4 24.6 0 33.9L175 441c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L81.9 280 488 280c13.3 0 24-10.7 24-24s-10.7-24-24-24L81.9 232 209 105c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L7 239z\"\n />\n </svg>\n </button>\n\n <button\n part=\"button button-next\"\n class=\"button button-next\"\n type=\"button\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n fill=\"currentColor\"\n part=\"button-icon button-icon-next\"\n >\n <path\n d=\"M505 273c9.4-9.4 9.4-24.6 0-33.9L337 71c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l127 127-406.1 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l406.1 0-127 127c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L505 273z\"\n />\n </svg>\n </button>\n </div>`;\n }\n\n private renderDots() {\n if (!this.embla) return nothing;\n const snaps = this.embla.scrollSnapList();\n const total = snaps.length;\n if (total === 0) return nothing;\n\n const selected = this._selectedSnap;\n const max = this.maxVisibleDots;\n\n let start = 0;\n let end = total;\n if (max > 0 && max < total) {\n const half = Math.floor((max - 1) / 2);\n start = Math.max(0, selected - half);\n end = Math.min(total, start + max);\n if (end - start < max) start = Math.max(0, end - max);\n }\n const edgeStart = start > 0;\n const edgeEnd = end < total;\n\n return html`<div\n class=\"dots\"\n part=\"dots\"\n role=\"tablist\"\n >\n ${map(snaps.slice(start, end), (_, i) => {\n const index = start + i;\n const isFirst = i === 0;\n const isLast = i === end - start - 1;\n const isSelected = index === selected;\n const isEdge = !isSelected && ((isFirst && edgeStart) || (isLast && edgeEnd));\n return html`<button\n part=\"button-dot\"\n type=\"button\"\n role=\"tab\"\n class=\"dot dot--${this.dotAppearance} ${isSelected ? 'dot--selected' : ''}\"\n aria-label=\"Go to slide ${index + 1}\"\n aria-selected=${isSelected ? 'true' : nothing}\n data-index=\"${index}\"\n data-edge=${isEdge ? '' : nothing}\n @click=${this.handleDotClick}\n >\n <i></i>\n </button>`;\n })}\n </div>`;\n }\n\n override render() {\n return html`\n <div class=\"wrapper ${this.isActive() ? '' : 'inactive'}\">\n <div\n part=\"viewport\"\n class=\"viewport\"\n >\n <slot\n part=\"container\"\n class=\"container\"\n @slotchange=${this.handleSlotChange}\n ></slot>\n </div>\n ${this.withFullscreen ? this.renderFullscreenButton() : ''}\n ${this.renderNextPreviousButtons()} ${this.withDots ? this.renderDots() : ''}\n </div>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Carousel } from './carousel.js';\nexport * from './carousel.js';\ndefine('carousel', Carousel);\n",":host {\n --aspect-ratio: inherit;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: start;\n width: 100%;\n max-height: 100%;\n aspect-ratio: var(--aspect-ratio);\n}\n","import { html, unsafeCSS, type CSSResultGroup } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './carousel-item.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * A single slide inside an `<l-carousel>`.\n *\n * @cssproperty --aspect-ratio - Aspect ratio of the slide.\n */\nexport class CarouselItem extends LuxenElement {\n static override styles: CSSResultGroup = [hostStyles, styles];\n\n override connectedCallback() {\n super.connectedCallback();\n this.setAttribute('role', 'group');\n }\n\n override render() {\n return html` <slot></slot> `;\n }\n}\n","import { define } from '../../define.js';\nimport { CarouselItem } from './carousel-item.js';\nexport * from './carousel-item.js';\ndefine('carousel-item', CarouselItem);\n",":host {\n --width: 31rem;\n --border-radius: 6px;\n --padding: 1.5rem;\n --show-duration: 200ms;\n --hide-duration: 200ms;\n --backdrop: var(--l-backdrop);\n --backdrop-blur: 0;\n\n display: contents;\n}\n\ndialog {\n position: fixed;\n inset: 0;\n box-sizing: border-box;\n width: var(--width);\n max-inline-size: min(90vw, var(--width));\n max-block-size: min(80dvb, 100%);\n margin: auto;\n padding: 0;\n border: 0;\n border-radius: var(--border-radius);\n background-color: var(--l-color-surface-overlay);\n color: var(--l-color-text-primary);\n\n /* EXIT STATE */\n opacity: 0;\n\n transition-property: opacity, display, overlay;\n transition-duration: var(--hide-duration);\n transition-behavior: allow-discrete;\n\n &::backdrop {\n background: var(--backdrop);\n backdrop-filter: blur(var(--backdrop-blur));\n }\n\n /* OPEN STATE */\n /* grid layout pins header/footer; the middle row (body) scrolls via\n overflow on [part='body'] and minmax(0, 1fr) allowing it to shrink. */\n &[open] {\n display: grid;\n grid-template-rows: auto minmax(0, 1fr) auto;\n opacity: 1;\n transition-duration: var(--show-duration);\n }\n\n /* BEFORE-OPEN STATE */\n @starting-style {\n &[open] {\n opacity: 0;\n }\n }\n}\n\n[part='header'] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 1rem;\n padding: var(--padding);\n}\n\n[part='title'] {\n margin: 0;\n font-size: 1.125rem;\n font-weight: 600;\n line-height: 1.4;\n}\n\n/* Pin body and footer so the layout stays correct when [without-header]\n removes the header and only two children auto-place into the grid. */\n[part='body'] {\n grid-row: 2;\n padding-inline: var(--padding);\n overflow-y: auto;\n}\n\n[part='footer'] {\n grid-row: 3;\n display: flex;\n place-content: end;\n gap: 0.5rem;\n padding: var(--padding);\n}\n\n/* Without a header, the body has to provide its own block-start padding\n (normally inherited visually from the header padding above it). */\n:host([without-header]) [part='body'] {\n padding-block-start: var(--padding);\n}\n\n::slotted(menu[slot='footer']) {\n display: contents;\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host {\n --show-duration: 0ms;\n --hide-duration: 0ms;\n }\n}\n","import { unsafeCSS } from 'lit';\nimport raw from './dialog.css?inline';\n\n/**\n * Wrapper module: imported by both `dialog.ts` and `drawer.ts`.\n * `unsafeCSS()` is called once here so both importers share the same\n * `CSSResult` instance (one constructed `CSSStyleSheet`, not two).\n */\nexport default unsafeCSS(raw);\n","import { html, nothing, type PropertyValues } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport styles from './dialog.styles.js';\n\ninterface CommandEventLike extends Event {\n command: string;\n source: Element | null;\n}\n\nconst supportsClosedBy =\n typeof HTMLDialogElement !== 'undefined' && 'closedBy' in HTMLDialogElement.prototype;\n\n// Native <dialog> doesn't lock body scroll. Inject a global rule that uses\n// `:has()` to freeze the root scroll container whenever any modal l-dialog\n// is open. Purely declarative — no manual lock/unlock bookkeeping.\n// Symbol guard makes the injection idempotent across HMR reloads.\nconst SCROLL_LOCK_SHEET = Symbol.for('luxen-dialog-scroll-lock');\nif (typeof document !== 'undefined' && !(SCROLL_LOCK_SHEET in document)) {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(`html:has([data-modal]) { overflow: hidden; scrollbar-gutter: stable; }`);\n document.adoptedStyleSheets.push(sheet);\n Object.defineProperty(document, SCROLL_LOCK_SHEET, { value: sheet });\n}\n\n/**\n * A modal dialog rendered in the top layer via the native `<dialog>` element.\n *\n * Open and close by toggling the `open` property (or the `--show` / `--hide`\n * Invoker commands). There are no public `show()` / `close()` methods.\n *\n * @slot - Body content.\n * @slot title - Custom heading element. Overrides the default `<h2>` rendered from the `title` property.\n * @slot close - Close button (typically `<button class=\"l-close\">`).\n * @slot footer - Footer actions.\n *\n * @csspart dialog - The native `<dialog>` element.\n * @csspart header - The header wrapper containing the title and close slot.\n * @csspart title - The dialog title heading.\n * @csspart body - The body wrapper around the default slot.\n * @csspart footer - The footer wrapper around the footer slot.\n *\n * @cssproperty --width - Dialog width. Default `31rem`.\n * @cssproperty --border-radius - Dialog border radius. Default `6px`.\n * @cssproperty --padding - Padding applied to the header, footer, and inline-padding of the body. Default `1.5rem`. Set to `0` to remove all internal spacing (e.g. for edge-to-edge media).\n * @cssproperty --show-duration - Open transition duration. Default `200ms`.\n * @cssproperty --hide-duration - Close transition duration. Default `200ms`.\n * @cssproperty --backdrop - Backdrop color.\n * @cssproperty --backdrop-blur - Backdrop blur amount (any CSS length). Default `0` (no blur). Set to e.g. `4px` for a subtle frost.\n *\n * @event show - Fired when the dialog opens. Not cancelable.\n * @event after-show - Fired after the open animation completes.\n * @event hide - Fired when the dialog is about to close. Cancelable — call `event.preventDefault()` to keep it open.\n * @event after-hide - Fired after the close animation completes.\n */\nexport class Dialog extends LuxenElement {\n static styles = [hostStyles, styles];\n\n /** Dialog title rendered in the header. */\n @property()\n title = '';\n\n /** Whether the dialog is open. */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /** Close when the backdrop is clicked. */\n @property({ type: Boolean, reflect: true, attribute: 'light-dismiss' })\n lightDismiss = false;\n\n /** Hide the header entirely (title and close slot). */\n @property({ type: Boolean, reflect: true, attribute: 'without-header' })\n withoutHeader = false;\n\n @query('dialog')\n dialog!: HTMLDialogElement;\n\n private _mouseDownTarget: EventTarget | null = null;\n\n private _commandListener: EventListenerObject = {\n handleEvent: (e: Event) => this._onCommand(e as CommandEventLike),\n };\n\n // --- Lifecycle ---\n\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener('command', this._commandListener);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('command', this._commandListener);\n }\n\n firstUpdated() {\n this.dialog.addEventListener('cancel', (e) => this._onCancel(e));\n this.dialog.addEventListener('close', () => this._onNativeClose());\n this.dialog.addEventListener('mousedown', (e) => {\n this._mouseDownTarget = e.target;\n });\n this.dialog.addEventListener('click', (e) => this._onDialogClick(e));\n }\n\n updated(changed: PropertyValues<this>) {\n if (!changed.has('open')) return;\n\n if (this.open && !this.dialog.open) {\n // Opening — not cancelable.\n this.emit('show');\n this.toggleAttribute('data-modal', true);\n this.dialog.showModal();\n this._focusAutofocusTarget();\n void this._emitAfter('after-show');\n } else if (!this.open && this.dialog.open) {\n // Closing — cancelable. Revert the property if consumer prevents.\n if (!this.emit('hide', { cancelable: true })) {\n this.open = true;\n return;\n }\n this.dialog.close();\n // `after-hide` is emitted from `_onNativeClose` (runs for every close path).\n }\n }\n\n // --- Event handlers ---\n\n // Custom commands on a custom element must start with `--`.\n // Built-in commands like \"close\" are reserved for native elements\n // and won't fire here.\n private _onCommand(e: CommandEventLike) {\n switch (e.command) {\n case '--hide':\n this.open = false;\n break;\n case '--show':\n this.open = true;\n break;\n }\n }\n\n // Fires on Escape and on `closedby=\"any\"` close requests.\n // Does NOT fire when script calls `.close()`, so `updated()`'s cancelable\n // `hide` emit doesn't collide with this one.\n private _onCancel(e: Event) {\n if (!this.emit('hide', { cancelable: true })) {\n e.preventDefault();\n }\n }\n\n private _onNativeClose() {\n this.open = false;\n this.removeAttribute('data-modal');\n void this._emitAfter('after-hide');\n }\n\n private _onDialogClick(e: MouseEvent) {\n // With `dialog { padding: 0 }`, `e.target === this.dialog` only fires\n // for backdrop clicks. The mousedown guard prevents drag-out dismissal.\n const clickedBackdrop = e.target === this.dialog && this._mouseDownTarget === this.dialog;\n this._mouseDownTarget = null;\n if (!clickedBackdrop) return;\n\n if (this.lightDismiss) {\n // When `supportsClosedBy`, the native `closedby=\"any\"` already closed.\n if (!supportsClosedBy) this.open = false;\n return;\n }\n this._nudgeDismiss();\n }\n\n private _nudgeAnimation?: Animation;\n\n private _nudgeDismiss() {\n if (matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n this._nudgeAnimation?.cancel();\n this._nudgeAnimation = this.dialog.animate(\n [{ transform: 'scale(1)' }, { transform: 'scale(1.02)' }, { transform: 'scale(1)' }],\n { duration: 250, easing: 'ease-in-out' },\n );\n }\n\n // Awaits every active animation on the dialog (transitions + @keyframes)\n // and then emits. Resolves immediately when no animations are running,\n // which covers `prefers-reduced-motion` and consumers that zero the\n // duration custom properties — cases where `transitionend` never fires.\n // Waits one frame first so @starting-style transitions have registered.\n private async _emitAfter(name: 'after-show' | 'after-hide') {\n await new Promise((r) => requestAnimationFrame(() => r(null)));\n const anims = this.dialog.getAnimations({ subtree: false });\n await Promise.all(anims.map((a) => a.finished.catch(() => {})));\n if ((name === 'after-show') !== this.open) return;\n this.emit(name);\n }\n\n // Firefox/Safari don't reliably resolve `[autofocus]` when `<dialog>`\n // is in shadow DOM and the target is in light DOM. Resolve it manually.\n private _focusAutofocusTarget() {\n const target = this.querySelector<HTMLElement>('[autofocus]');\n target?.focus({ preventScroll: true });\n }\n\n render() {\n const closedby = this.lightDismiss && supportsClosedBy ? 'any' : nothing;\n return html`\n <dialog\n part=\"dialog\"\n closedby=${closedby}\n >\n ${this.withoutHeader\n ? nothing\n : html`\n <header part=\"header\">\n <slot name=\"title\">\n ${this.title ? html`<h2 part=\"title\">${this.title}</h2>` : nothing}\n </slot>\n <slot name=\"close\"></slot>\n </header>\n `}\n <div part=\"body\">\n <slot></slot>\n </div>\n <footer part=\"footer\">\n <slot name=\"footer\"></slot>\n </footer>\n </dialog>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Dialog } from './dialog.js';\nexport * from './dialog.js';\ndefine('dialog', Dialog);\n","import { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\n\nexport type DividerOrientation = 'horizontal' | 'vertical';\n\n/**\n * @summary Dividers visually separate or group elements.\n *\n * @example <l-divider></l-divider>\n *\n * @cssproperty --color - The color of the divider line.\n * @cssproperty --width - The thickness of the divider line.\n * @cssproperty --spacing - The spacing between the divider and its neighboring elements.\n *\n * @customElement l-divider\n */\nexport class Divider extends LuxenElement {\n override createRenderRoot() {\n return this;\n }\n\n /** The divider's orientation. */\n @property({ reflect: true })\n orientation: DividerOrientation = 'horizontal';\n\n /** Optional text label displayed over the divider line. */\n @property({ reflect: true })\n label?: string;\n\n override connectedCallback() {\n super.connectedCallback();\n this.setAttribute('role', 'separator');\n }\n\n override updated(changed: Map<string, unknown>) {\n if (changed.has('orientation')) {\n if (this.orientation === 'vertical') {\n this.setAttribute('aria-orientation', 'vertical');\n } else {\n this.removeAttribute('aria-orientation');\n }\n }\n }\n}\n","import { define } from '../../define.js';\nimport { Divider } from './divider.js';\nexport * from './divider.js';\ndefine('divider', Divider);\n",":host {\n --size: 320px;\n --border-radius: 0.75rem;\n}\n\n/* Override dialog's opacity fade with a slide from the inline-start edge. */\ndialog {\n inset: 0;\n margin: 0;\n width: min(var(--size), 100dvw);\n max-inline-size: 100dvw;\n height: 100dvh;\n max-block-size: 100dvh;\n border-radius: 0 var(--border-radius) var(--border-radius) 0;\n opacity: 1;\n translate: -100% 0;\n transition-property: translate, display, overlay;\n}\n\ndialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n dialog[open] {\n translate: -100% 0;\n }\n}\n\n/* Inline-end edge */\n:host([placement='end']) dialog {\n border-radius: var(--border-radius) 0 0 var(--border-radius);\n margin-inline-start: auto;\n translate: 100% 0;\n}\n\n:host([placement='end']) dialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n :host([placement='end']) dialog[open] {\n translate: 100% 0;\n }\n}\n\n/* Block-end (bottom) edge */\n:host([placement='bottom']) dialog {\n width: 100dvw;\n max-inline-size: 100dvw;\n height: min(var(--size), 100dvh);\n max-block-size: 100dvh;\n margin-block-start: auto;\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n translate: 0 100%;\n}\n\n:host([placement='bottom']) dialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n :host([placement='bottom']) dialog[open] {\n translate: 0 100%;\n }\n}\n","import { unsafeCSS } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport { Dialog } from '../dialog/dialog.js';\nimport dialogStyles from '../dialog/dialog.styles.js';\nimport rawDrawerStyles from './drawer.css?inline';\n\nconst drawerStyles = unsafeCSS(rawDrawerStyles);\n\n/**\n * A drawer that slides in from a screen edge. Extends `<l-dialog>`.\n *\n * Open and close by toggling the `open` property (or the `--show` / `--hide`\n * Invoker commands). Always opens as modal.\n *\n * @slot - Body content.\n * @slot close - Close button (typically `<button class=\"l-close\">`).\n * @slot footer - Footer actions.\n *\n * @csspart dialog - The native `<dialog>` element.\n * @csspart header - The header wrapper containing the title and close slot.\n * @csspart title - The drawer title heading.\n * @csspart body - The body wrapper around the default slot.\n * @csspart footer - The footer wrapper around the footer slot.\n *\n * @cssproperty --size - Drawer size on the axis perpendicular to its edge (width for `start`/`end`, height for `bottom`). Default `320px`.\n * @cssproperty --border-radius - Drawer border radius on the inner edges. Default `0.75rem`.\n * @cssproperty --show-duration - Open transition duration. Default `200ms`.\n * @cssproperty --hide-duration - Close transition duration. Default `200ms`.\n * @cssproperty --backdrop - Backdrop color.\n *\n * @event show - Fired when the drawer opens. Not cancelable.\n * @event after-show - Fired after the open animation completes.\n * @event hide - Fired when the drawer is about to close. Cancelable — call `event.preventDefault()` to keep it open.\n * @event after-hide - Fired after the close animation completes.\n */\nexport class Drawer extends Dialog {\n static override styles = [hostStyles, dialogStyles, drawerStyles];\n\n /** Edge the drawer slides in from. Defaults to the start (inline-start) edge. */\n @property({ reflect: true })\n placement?: 'start' | 'end' | 'bottom';\n}\n","import { define } from '../../define.js';\nimport { Drawer } from './drawer.js';\nexport * from './drawer.js';\ndefine('drawer', Drawer);\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n const firstChar = placement[0];\n return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n const side = getSide(placement);\n return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n ...platform,\n detectOverflow\n };\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let resetCount = 0;\n const middlewareData = {};\n for (let i = 0; i < middleware.length; i++) {\n const currentMiddleware = middleware[i];\n if (!currentMiddleware) {\n continue;\n }\n const {\n name,\n fn\n } = currentMiddleware;\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform: platformWithDetectOverflow,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData[name] = {\n ...middlewareData[name],\n ...data\n };\n if (reset && resetCount < MAX_RESET_COUNT) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects,\n platform\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n platform\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n try {\n if (element.matches(':popover-open')) {\n return true;\n }\n } catch (_e) {\n // no-op\n }\n try {\n return element.matches(':modal');\n } catch (_e) {\n return false;\n }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (isWebKitValue == null) {\n isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n }\n return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n } else {\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n }\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n let top = firstRect.top;\n let right = firstRect.right;\n let bottom = firstRect.bottom;\n let left = firstRect.left;\n for (let i = 1; i < clippingAncestors.length; i++) {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n top = max(rect.top, top);\n right = min(rect.right, right);\n bottom = min(rect.bottom, bottom);\n left = max(rect.left, left);\n }\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n if (floating) {\n resizeObserver.observe(floating);\n }\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import type { ReactiveController, ReactiveControllerHost } from 'lit';\nimport {\n computePosition,\n autoUpdate,\n offset,\n flip,\n shift,\n arrow,\n type Placement,\n} from '@floating-ui/dom';\n\n// --- Pure geometry helpers ---\n\ntype Point = [number, number];\n\n/** Check if a point is inside a polygon using ray-casting. */\nfunction isPointInPolygon([px, py]: Point, polygon: Point[]) {\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const [xi, yi] = polygon[i];\n const [xj, yj] = polygon[j];\n if (yi >= py !== yj >= py && px <= ((xj - xi) * (py - yi)) / (yj - yi) + xi) {\n inside = !inside;\n }\n }\n return inside;\n}\n\n/** Check if a point is inside a rect. */\nfunction isPointInRect([px, py]: Point, rect: DOMRect) {\n return px >= rect.left && px <= rect.right && py >= rect.top && py <= rect.bottom;\n}\n\n/**\n * Build a safe polygon (triangle/quadrilateral) from cursor to floating element edges.\n * Adapted from floating-ui/safePolygon.\n * @see https://github.com/floating-ui/floating-ui/blob/master/packages/react/src/safePolygon.ts\n */\nfunction getSafePolygon(\n cursorX: number,\n cursorY: number,\n rect: DOMRect,\n refRect: DOMRect,\n placement: string,\n): Point[] {\n const side = placement.split('-')[0] as 'top' | 'bottom' | 'left' | 'right';\n const buffer = 2;\n\n const isFloatingWider = rect.width > refRect.width;\n const isFloatingTaller = rect.height > refRect.height;\n\n const cursorLeaveFromRight = cursorX > rect.right - rect.width / 2;\n const cursorLeaveFromBottom = cursorY > rect.bottom - rect.height / 2;\n\n switch (side) {\n case 'top': {\n const c1: Point = [\n isFloatingWider\n ? cursorX + buffer / 2\n : cursorLeaveFromRight\n ? cursorX + buffer * 4\n : cursorX - buffer * 4,\n cursorY + buffer + 1,\n ];\n const c2: Point = [\n isFloatingWider\n ? cursorX - buffer / 2\n : cursorLeaveFromRight\n ? cursorX + buffer * 4\n : cursorX - buffer * 4,\n cursorY + buffer + 1,\n ];\n return [\n c1,\n c2,\n [\n rect.left,\n cursorLeaveFromRight\n ? rect.bottom - buffer\n : isFloatingWider\n ? rect.bottom - buffer\n : rect.top,\n ],\n [\n rect.right,\n cursorLeaveFromRight\n ? isFloatingWider\n ? rect.bottom - buffer\n : rect.top\n : rect.bottom - buffer,\n ],\n ];\n }\n case 'bottom': {\n const c1: Point = [\n isFloatingWider\n ? cursorX + buffer / 2\n : cursorLeaveFromRight\n ? cursorX + buffer * 4\n : cursorX - buffer * 4,\n cursorY - buffer,\n ];\n const c2: Point = [\n isFloatingWider\n ? cursorX - buffer / 2\n : cursorLeaveFromRight\n ? cursorX + buffer * 4\n : cursorX - buffer * 4,\n cursorY - buffer,\n ];\n return [\n c1,\n c2,\n [\n rect.left,\n cursorLeaveFromRight\n ? rect.top + buffer\n : isFloatingWider\n ? rect.top + buffer\n : rect.bottom,\n ],\n [\n rect.right,\n cursorLeaveFromRight\n ? isFloatingWider\n ? rect.top + buffer\n : rect.bottom\n : rect.top + buffer,\n ],\n ];\n }\n case 'left': {\n const c1: Point = [\n cursorX + buffer + 1,\n isFloatingTaller\n ? cursorY + buffer / 2\n : cursorLeaveFromBottom\n ? cursorY + buffer * 4\n : cursorY - buffer * 4,\n ];\n const c2: Point = [\n cursorX + buffer + 1,\n isFloatingTaller\n ? cursorY - buffer / 2\n : cursorLeaveFromBottom\n ? cursorY + buffer * 4\n : cursorY - buffer * 4,\n ];\n return [\n [\n cursorLeaveFromBottom\n ? rect.right - buffer\n : isFloatingTaller\n ? rect.right - buffer\n : rect.left,\n rect.top,\n ],\n [\n cursorLeaveFromBottom\n ? isFloatingTaller\n ? rect.right - buffer\n : rect.left\n : rect.right - buffer,\n rect.bottom,\n ],\n c1,\n c2,\n ];\n }\n case 'right': {\n const c1: Point = [\n cursorX - buffer,\n isFloatingTaller\n ? cursorY + buffer / 2\n : cursorLeaveFromBottom\n ? cursorY + buffer * 4\n : cursorY - buffer * 4,\n ];\n const c2: Point = [\n cursorX - buffer,\n isFloatingTaller\n ? cursorY - buffer / 2\n : cursorLeaveFromBottom\n ? cursorY + buffer * 4\n : cursorY - buffer * 4,\n ];\n return [\n [\n cursorLeaveFromBottom\n ? rect.left + buffer\n : isFloatingTaller\n ? rect.left + buffer\n : rect.right,\n rect.top,\n ],\n [\n cursorLeaveFromBottom\n ? isFloatingTaller\n ? rect.left + buffer\n : rect.right\n : rect.left + buffer,\n rect.bottom,\n ],\n c1,\n c2,\n ];\n }\n default:\n return [];\n }\n}\n\n// --- Constants ---\n\nconst STATIC_SIDE = { top: 'bottom', right: 'left', bottom: 'top', left: 'right' } as const;\n\nconst reducedMotion =\n typeof window !== 'undefined' ? window.matchMedia('(prefers-reduced-motion: reduce)') : undefined;\n\n// --- Controller ---\n\nexport interface PopoverControllerConfig {\n getTriggerElement: () => HTMLElement | null;\n getFloatingElement: () => HTMLElement | null;\n getArrowElement: () => HTMLElement | null;\n onPlacementChange?: (placement: string) => void;\n}\n\nexport interface PositionOptions {\n placement: Placement;\n distance: number;\n fullWidth?: boolean;\n}\n\ntype TriggerHandlers = {\n onPointerEnter?: (e: PointerEvent) => void;\n onPointerLeave?: (e: PointerEvent) => void;\n onFocusIn?: (e: FocusEvent) => void;\n onFocusOut?: (e: FocusEvent) => void;\n onClick?: (e: MouseEvent) => void;\n onKeyDown?: (e: KeyboardEvent) => void;\n};\n\nexport class PopoverController implements ReactiveController {\n private _host: ReactiveControllerHost & HTMLElement;\n private _config: PopoverControllerConfig;\n private _cleanupAutoUpdate?: () => void;\n private _cleanupSafePolygon?: () => void;\n private _handlers?: TriggerHandlers;\n private _triggerElement?: HTMLElement | null;\n private _currentPlacement = '';\n\n constructor(host: ReactiveControllerHost & HTMLElement, config: PopoverControllerConfig) {\n this._host = host;\n this._config = config;\n host.addController(this);\n }\n\n hostConnected() {}\n\n hostDisconnected() {\n this.stopPositioning();\n this.cleanupSafePolygon();\n this.removeTriggerListeners();\n }\n\n get currentPlacement() {\n return this._currentPlacement;\n }\n\n // --- Positioning ---\n\n async updatePosition(options: PositionOptions) {\n const trigger = this._config.getTriggerElement();\n const floating = this._config.getFloatingElement();\n const arrowEl = this._config.getArrowElement();\n if (!trigger || !floating) return;\n\n const middleware = [\n offset(options.distance),\n flip(),\n shift(),\n ...(arrowEl ? [arrow({ element: arrowEl, padding: 8 })] : []),\n ];\n\n const { x, y, placement, middlewareData } = await computePosition(trigger, floating, {\n placement: options.placement,\n strategy: 'fixed',\n middleware,\n });\n\n Object.assign(floating.style, {\n position: 'fixed',\n left: options.fullWidth ? '0px' : `${x}px`,\n top: `${y}px`,\n width: options.fullWidth ? '100vw' : '',\n });\n\n if (placement !== this._currentPlacement) {\n this._currentPlacement = placement;\n this._config.onPlacementChange?.(placement);\n }\n\n if (middlewareData.arrow && arrowEl) {\n const { x: ax, y: ay } = middlewareData.arrow;\n const side = STATIC_SIDE[placement.split('-')[0] as keyof typeof STATIC_SIDE];\n Object.assign(arrowEl.style, {\n left: ax != null ? `${ax}px` : '',\n top: ay != null ? `${ay}px` : '',\n [side]: `${-arrowEl.offsetWidth / 2}px`,\n });\n }\n }\n\n startPositioning(options: PositionOptions) {\n const trigger = this._config.getTriggerElement();\n const floating = this._config.getFloatingElement();\n if (!trigger || !floating) return;\n\n this._cleanupAutoUpdate?.();\n this._cleanupAutoUpdate = autoUpdate(trigger, floating, () => this.updatePosition(options));\n }\n\n stopPositioning() {\n this._cleanupAutoUpdate?.();\n this._cleanupAutoUpdate = undefined;\n }\n\n // --- Safe polygon ---\n\n handlePointerLeave(e: PointerEvent, onHide: () => void) {\n const floating = this._config.getFloatingElement();\n const trigger = this._config.getTriggerElement();\n if (!floating || !trigger) {\n onHide();\n return;\n }\n\n const cursorX = e.clientX;\n const cursorY = e.clientY;\n\n const onMove = (moveEvent: PointerEvent) => {\n const { clientX: mx, clientY: my } = moveEvent;\n const cursor: Point = [mx, my];\n const rect = floating.getBoundingClientRect();\n const refRect = trigger.getBoundingClientRect();\n const side = this._currentPlacement.split('-')[0];\n\n if (isPointInRect(cursor, rect)) return;\n if (isPointInRect(cursor, refRect)) return;\n\n if (\n (side === 'top' && cursorY >= refRect.bottom - 1) ||\n (side === 'bottom' && cursorY <= refRect.top + 1) ||\n (side === 'left' && cursorX >= refRect.right - 1) ||\n (side === 'right' && cursorX <= refRect.left + 1)\n ) {\n cleanup();\n onHide();\n return;\n }\n\n const polygon = getSafePolygon(cursorX, cursorY, rect, refRect, this._currentPlacement);\n if (isPointInPolygon(cursor, polygon)) return;\n\n cleanup();\n onHide();\n };\n\n const cleanup = () => {\n document.removeEventListener('pointermove', onMove);\n };\n\n document.addEventListener('pointermove', onMove);\n\n this._cleanupSafePolygon?.();\n this._cleanupSafePolygon = cleanup;\n }\n\n cleanupSafePolygon() {\n this._cleanupSafePolygon?.();\n this._cleanupSafePolygon = undefined;\n }\n\n // --- Trigger listener management ---\n\n addTriggerListeners(handlers: TriggerHandlers) {\n const trigger = this._config.getTriggerElement();\n if (!trigger) return;\n\n this._handlers = handlers;\n this._triggerElement = trigger;\n\n if (handlers.onPointerEnter)\n trigger.addEventListener('pointerenter', handlers.onPointerEnter as EventListener);\n if (handlers.onPointerLeave)\n trigger.addEventListener('pointerleave', handlers.onPointerLeave as EventListener);\n if (handlers.onFocusIn)\n trigger.addEventListener('focusin', handlers.onFocusIn as EventListener);\n if (handlers.onFocusOut)\n trigger.addEventListener('focusout', handlers.onFocusOut as EventListener);\n if (handlers.onClick) trigger.addEventListener('click', handlers.onClick as EventListener);\n if (handlers.onKeyDown)\n trigger.addEventListener('keydown', handlers.onKeyDown as EventListener);\n }\n\n removeTriggerListeners(triggerOverride?: HTMLElement | null) {\n const trigger = triggerOverride ?? this._triggerElement;\n const handlers = this._handlers;\n if (!trigger || !handlers) return;\n\n if (handlers.onPointerEnter)\n trigger.removeEventListener('pointerenter', handlers.onPointerEnter as EventListener);\n if (handlers.onPointerLeave)\n trigger.removeEventListener('pointerleave', handlers.onPointerLeave as EventListener);\n if (handlers.onFocusIn)\n trigger.removeEventListener('focusin', handlers.onFocusIn as EventListener);\n if (handlers.onFocusOut)\n trigger.removeEventListener('focusout', handlers.onFocusOut as EventListener);\n if (handlers.onClick) trigger.removeEventListener('click', handlers.onClick as EventListener);\n if (handlers.onKeyDown)\n trigger.removeEventListener('keydown', handlers.onKeyDown as EventListener);\n\n if (!triggerOverride) {\n this._handlers = undefined;\n this._triggerElement = undefined;\n }\n }\n\n // --- Animation ---\n\n async animateShow(el: HTMLElement, duration: number, keyframes?: Keyframe[]) {\n const d = reducedMotion?.matches ? 0 : duration;\n el.getAnimations().forEach((a) => a.cancel());\n el.animate(\n keyframes ?? [\n { opacity: 0, scale: 0.96 },\n { opacity: 1, scale: 1 },\n ],\n { duration: d, fill: 'forwards' },\n );\n }\n\n async animateHide(el: HTMLElement, duration: number, keyframes?: Keyframe[]) {\n const d = reducedMotion?.matches ? 0 : duration;\n const anim = el.animate(\n keyframes ?? [\n { opacity: 1, scale: 1 },\n { opacity: 0, scale: 0.96 },\n ],\n { duration: d, fill: 'forwards' },\n );\n await anim.finished;\n }\n}\n",":host {\n --padding: 0.25rem;\n\n --background: var(--l-color-bg-surface, Canvas);\n --border-radius: 6px;\n --shadow: 0 4px 6px -1px rgb(0 0 0 / 8%), 0 2px 4px -2px rgb(0 0 0 / 6%);\n --show-duration: 150;\n --hide-duration: 150;\n\n display: inline-block;\n position: relative;\n}\n\n.trigger {\n display: contents;\n}\n\n[popover] {\n inset: unset;\n overflow: visible;\n box-sizing: border-box;\n width: max-content;\n min-width: anchor-size(width);\n padding: var(--padding);\n margin: 0;\n border: 1px solid var(--l-color-border-overlay, light-dark(#e5e7eb, #374151));\n border-radius: var(--border-radius);\n background: var(--background);\n color: var(--l-color-text-primary, CanvasText);\n box-shadow: var(--shadow);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n/* Lightweight separator alternative to <l-divider> — same dimensions, no extra import. */\n::slotted(hr) {\n height: 1px;\n margin-block: var(--padding);\n margin-inline: calc(var(--padding) * -1);\n border: 0;\n background: var(--l-color-divider);\n}\n","import { html, unsafeCSS, type PropertyValues } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { property } from 'lit/decorators.js';\nimport type { Placement } from '@floating-ui/dom';\nimport { PopoverController } from '../../shared/controllers/popover.js';\nimport { tagName } from '../../registry.js';\nimport type { DropdownItem } from '../dropdown-item/dropdown-item.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './dropdown.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * A dropdown menu anchored to a trigger element.\n *\n * @slot trigger - The element that triggers the dropdown.\n * @slot header - Optional content rendered above the menu items (e.g. a user profile row). Use an `<l-divider>` (or `<hr>`) after it to separate from items.\n * @slot - Menu content (`l-dropdown-item` elements). Drop an `<l-divider>` (or `<hr>`) between items to render a section separator.\n * @slot footer - Optional content rendered below the menu items (e.g. a version label or shortcut row). Use an `<l-divider>` (or `<hr>`) before it to separate from items.\n *\n * @csspart panel - The floating menu container.\n *\n * @cssproperty --background - Panel background color.\n * @cssproperty --border-radius - Panel border radius. Default `8px`.\n * @cssproperty --padding - Panel inner padding. Default `0.25rem`. Slotted `<l-divider>` elements bleed by this amount on each side to span the panel edges.\n * @cssproperty --shadow - Panel box shadow.\n * @cssproperty --show-duration - Show animation duration in ms. Default `150`.\n * @cssproperty --hide-duration - Hide animation duration in ms. Default `150`.\n *\n * @event show - Fired before the dropdown opens. Cancelable.\n * @event after-show - Fired after the open animation completes.\n * @event hide - Fired before the dropdown closes. Cancelable.\n * @event after-hide - Fired after the close animation completes.\n * @event select - Fired when an item is selected. Detail: `{ item: DropdownItem }`.\n */\nexport class Dropdown extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n private _floating = new PopoverController(this, {\n getTriggerElement: () => this._triggerEl,\n getFloatingElement: () => this._panelEl,\n getArrowElement: () => null,\n });\n\n private _typeaheadBuffer = '';\n private _typeaheadTimeout = 0;\n\n /** Whether the dropdown is open. */\n @property({ type: Boolean, reflect: true })\n accessor open = false;\n\n /** Preferred placement of the panel. */\n @property()\n accessor placement: Placement = 'bottom-start';\n\n /** Distance in pixels from the trigger. */\n @property({ type: Number })\n accessor distance = 4;\n\n /** Disables the dropdown trigger. */\n @property({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n private get _triggerEl(): HTMLElement | null {\n const slot = this.shadowRoot!.querySelector<HTMLSlotElement>('.trigger slot');\n return (slot?.assignedElements()[0] as HTMLElement) ?? null;\n }\n\n private get _panelEl(): HTMLElement | null {\n return this.shadowRoot!.querySelector<HTMLElement>('[popover]');\n }\n\n private _getItems(): DropdownItem[] {\n const menuSlot = this.shadowRoot!.querySelector<HTMLSlotElement>('slot:not([name])');\n if (!menuSlot) return [];\n return (menuSlot.assignedElements() as DropdownItem[]).filter(\n (el) => el.tagName === tagName('dropdown-item').toUpperCase() && !el.disabled,\n );\n }\n\n private _getAllItems(): DropdownItem[] {\n const menuSlot = this.shadowRoot!.querySelector<HTMLSlotElement>('slot:not([name])');\n if (!menuSlot) return [];\n return (menuSlot.assignedElements() as DropdownItem[]).filter(\n (el) => el.tagName === tagName('dropdown-item').toUpperCase(),\n );\n }\n\n private _getDuration(prop: '--show-duration' | '--hide-duration'): number {\n const parsed = parseFloat(getComputedStyle(this).getPropertyValue(prop));\n return Number.isNaN(parsed) ? 150 : parsed;\n }\n\n // --- Public API ---\n\n show() {\n if (this.open || this.disabled) return;\n if (this.emit('show', { cancelable: true })) this.open = true;\n }\n\n hide() {\n if (!this.open) return;\n if (this.emit('hide', { cancelable: true })) this.open = false;\n }\n\n toggle() {\n if (this.open) this.hide();\n else this.show();\n }\n\n // --- Lifecycle ---\n\n override updated(changed: PropertyValues<this>) {\n if (changed.has('open')) {\n void this._handleOpenChange();\n }\n }\n\n // --- Open/Close ---\n\n private async _handleOpenChange() {\n const panel = this._panelEl;\n if (!panel) return;\n\n const posOpts = { placement: this.placement, distance: this.distance };\n\n if (this.open) {\n panel.showPopover();\n await this._floating.updatePosition(posOpts);\n if (!this.open) return;\n await this._floating.animateShow(panel, this._getDuration('--show-duration'));\n this._floating.startPositioning(posOpts);\n this._triggerEl?.setAttribute('aria-expanded', 'true');\n this.emit('after-show');\n } else {\n this._floating.stopPositioning();\n this._triggerEl?.setAttribute('aria-expanded', 'false');\n await this._floating.animateHide(panel, this._getDuration('--hide-duration'));\n if (panel.matches(':popover-open')) panel.hidePopover();\n this.emit('after-hide');\n }\n }\n\n // --- Focus management ---\n\n private _setActiveItem(item: DropdownItem) {\n const itemEl = item.shadowRoot!.querySelector<HTMLElement>('.item');\n if (!itemEl) return;\n\n // Reset all items\n for (const i of this._getAllItems()) {\n const el = i.shadowRoot!.querySelector<HTMLElement>('.item');\n el?.setAttribute('tabindex', '-1');\n }\n\n itemEl.setAttribute('tabindex', '0');\n itemEl.focus();\n }\n\n private _focusFirstItem() {\n const items = this._getItems();\n if (items.length) this._setActiveItem(items[0]);\n }\n\n private _focusLastItem() {\n const items = this._getItems();\n if (items.length) this._setActiveItem(items[items.length - 1]);\n }\n\n private _getCurrentItem(): DropdownItem | null {\n const items = this._getItems();\n return (\n items.find((item) => {\n const el = item.shadowRoot!.querySelector<HTMLElement>('.item');\n return el?.getAttribute('tabindex') === '0' && item.shadowRoot!.activeElement === el;\n }) ?? null\n );\n }\n\n private _focusNextItem() {\n const items = this._getItems();\n const current = this._getCurrentItem();\n const index = current ? items.indexOf(current) : -1;\n const next = items[(index + 1) % items.length];\n if (next) this._setActiveItem(next);\n }\n\n private _focusPreviousItem() {\n const items = this._getItems();\n const current = this._getCurrentItem();\n const index = current ? items.indexOf(current) : 0;\n const prev = items[(index - 1 + items.length) % items.length];\n if (prev) this._setActiveItem(prev);\n }\n\n // --- Typeahead ---\n\n private _handleTypeahead(key: string) {\n clearTimeout(this._typeaheadTimeout);\n this._typeaheadBuffer += key.toLowerCase();\n this._typeaheadTimeout = window.setTimeout(() => {\n this._typeaheadBuffer = '';\n }, 500);\n\n const items = this._getItems();\n const match = items.find((item) =>\n item.getTextLabel().toLowerCase().startsWith(this._typeaheadBuffer),\n );\n if (match) this._setActiveItem(match);\n }\n\n // --- Event handlers ---\n\n private _onTriggerClick = (e: MouseEvent) => {\n if (this.disabled) return;\n this.toggle();\n // Space/Enter on a native button dispatches click with detail=0; focus the\n // first item so the menu is keyboard-navigable immediately on open.\n if (this.open && e.detail === 0) {\n requestAnimationFrame(() => this._focusFirstItem());\n }\n };\n\n private _onTriggerKeyDown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n this.show();\n requestAnimationFrame(() => this._focusFirstItem());\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n this.show();\n requestAnimationFrame(() => this._focusLastItem());\n }\n };\n\n private _onPanelKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this._focusNextItem();\n break;\n case 'ArrowUp':\n e.preventDefault();\n this._focusPreviousItem();\n break;\n case 'Home':\n e.preventDefault();\n this._focusFirstItem();\n break;\n case 'End':\n e.preventDefault();\n this._focusLastItem();\n break;\n case 'Escape':\n e.preventDefault();\n this.hide();\n this._triggerEl?.focus();\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n this._selectCurrentItem();\n break;\n default:\n if (e.key.length === 1 && !e.ctrlKey && !e.metaKey) {\n this._handleTypeahead(e.key);\n }\n }\n };\n\n private _onItemClick = (e: Event) => {\n const item = (e.target as HTMLElement).closest<DropdownItem>(tagName('dropdown-item'));\n if (item && !item.disabled) {\n this._selectItem(item);\n }\n };\n\n private _selectCurrentItem() {\n const current = this._getCurrentItem();\n if (current) this._selectItem(current);\n }\n\n private _selectItem(item: DropdownItem) {\n if (item.type === 'checkbox') {\n item.checked = !item.checked;\n }\n this.emit('select', { detail: { item } });\n if (item.type !== 'checkbox') {\n this.hide();\n this._triggerEl?.focus();\n }\n }\n\n /** Sync `open` when popover=\"auto\" light-dismiss fires. */\n private _onToggle = (e: Event) => {\n const toggleEvent = e as ToggleEvent;\n if (toggleEvent.newState === 'closed' && this.open) {\n this.open = false;\n this._triggerEl?.setAttribute('aria-expanded', 'false');\n }\n };\n\n override render() {\n return html`\n <div\n class=\"trigger\"\n @click=${this._onTriggerClick}\n @keydown=${this._onTriggerKeyDown}\n >\n <slot name=\"trigger\"></slot>\n </div>\n <div\n popover=\"auto\"\n part=\"panel\"\n @keydown=${this._onPanelKeyDown}\n @click=${this._onItemClick}\n @toggle=${this._onToggle}\n >\n <slot name=\"header\"></slot>\n <div role=\"menu\">\n <slot></slot>\n </div>\n <slot name=\"footer\"></slot>\n </div>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Dropdown } from './dropdown.js';\nexport * from './dropdown.js';\ndefine('dropdown', Dropdown);\n",":host {\n display: block;\n}\n\n:host([disabled]) {\n pointer-events: none;\n opacity: 0.5;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0.375rem 0.5rem;\n cursor: pointer;\n outline: none;\n border-radius: 4px;\n font-size: 0.875rem;\n line-height: 1.5;\n color: var(--l-color-text-primary, CanvasText);\n white-space: nowrap;\n}\n\n.item:focus-visible {\n background: var(--l-color-bg-state-hover);\n}\n\n@media (hover: hover) {\n .item:hover {\n background: var(--l-color-bg-state-hover);\n }\n}\n\n.check {\n display: flex;\n width: 16px;\n flex-shrink: 0;\n}\n\n:host(:not([checked])) .check svg {\n visibility: hidden;\n}\n\n::slotted([slot='prefix']),\n::slotted([slot='suffix']) {\n display: flex;\n flex-shrink: 0;\n}\n\n.label {\n flex: 1;\n}\n","import { html, nothing, unsafeCSS } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { property } from 'lit/decorators.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './dropdown-item.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * A menu item for use inside `<l-dropdown>`.\n *\n * @slot - Label text.\n * @slot prefix - Leading content (e.g. icon).\n * @slot suffix - Trailing content.\n *\n * @cssproperty --color - Text color.\n */\nexport class DropdownItem extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n /** The value associated with this item. */\n @property()\n accessor value = '';\n\n /** Disables the item. */\n @property({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n /** The type of item: `normal` or `checkbox`. */\n @property()\n accessor type: 'normal' | 'checkbox' = 'normal';\n\n /** Whether the checkbox item is checked. */\n @property({ type: Boolean, reflect: true })\n accessor checked = false;\n\n /** Returns the text label of this item. */\n getTextLabel(): string {\n return (this.textContent ?? '').trim();\n }\n\n override render() {\n const isCheckbox = this.type === 'checkbox';\n\n return html`\n <div\n class=\"item\"\n role=${isCheckbox ? 'menuitemcheckbox' : 'menuitem'}\n aria-checked=${isCheckbox ? String(this.checked) : nothing}\n aria-disabled=${this.disabled ? 'true' : nothing}\n tabindex=\"-1\"\n >\n ${isCheckbox\n ? html`\n <span\n class=\"check\"\n aria-hidden=\"true\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3.5 8.5L6.5 11.5L12.5 4.5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n `\n : html` <slot name=\"prefix\"></slot> `}\n <span class=\"label\"><slot></slot></span>\n <slot name=\"suffix\"></slot>\n </div>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { DropdownItem } from './dropdown-item.js';\nexport * from './dropdown-item.js';\ndefine('dropdown-item', DropdownItem);\n","/**\n* (c) Iconify\n*\n* For the full copyright and license information, please view the license.txt\n* files at https://github.com/iconify/iconify\n*\n* Licensed under MIT.\n*\n* @license MIT\n* @version 3.0.2\n*/\n/** Default values for dimensions */\nconst defaultIconDimensions = Object.freeze({\n\tleft: 0,\n\ttop: 0,\n\twidth: 16,\n\theight: 16\n});\n/** Default values for transformations */\nconst defaultIconTransformations = Object.freeze({\n\trotate: 0,\n\tvFlip: false,\n\thFlip: false\n});\n/** Default values for all optional IconifyIcon properties */\nconst defaultIconProps = Object.freeze({\n\t...defaultIconDimensions,\n\t...defaultIconTransformations\n});\n/** Default values for all properties used in ExtendedIconifyIcon */\nconst defaultExtendedIconProps = Object.freeze({\n\t...defaultIconProps,\n\tbody: \"\",\n\thidden: false\n});\n\n/**\n* Default icon customisations values\n*/\nconst defaultIconSizeCustomisations = Object.freeze({\n\twidth: null,\n\theight: null\n});\nconst defaultIconCustomisations = Object.freeze({\n\t...defaultIconSizeCustomisations,\n\t...defaultIconTransformations\n});\n\n/**\n* Get rotation value\n*/\nfunction rotateFromString(value, defaultValue = 0) {\n\tconst units = value.replace(/^-?[0-9.]*/, \"\");\n\tfunction cleanup(value$1) {\n\t\twhile (value$1 < 0) value$1 += 4;\n\t\treturn value$1 % 4;\n\t}\n\tif (units === \"\") {\n\t\tconst num = parseInt(value);\n\t\treturn isNaN(num) ? 0 : cleanup(num);\n\t} else if (units !== value) {\n\t\tlet split = 0;\n\t\tswitch (units) {\n\t\t\tcase \"%\":\n\t\t\t\tsplit = 25;\n\t\t\t\tbreak;\n\t\t\tcase \"deg\": split = 90;\n\t\t}\n\t\tif (split) {\n\t\t\tlet num = parseFloat(value.slice(0, value.length - units.length));\n\t\t\tif (isNaN(num)) return 0;\n\t\t\tnum = num / split;\n\t\t\treturn num % 1 === 0 ? cleanup(num) : 0;\n\t\t}\n\t}\n\treturn defaultValue;\n}\n\nconst separator = /[\\s,]+/;\n/**\n* Apply \"flip\" string to icon customisations\n*/\nfunction flipFromString(custom, flip) {\n\tflip.split(separator).forEach((str) => {\n\t\tswitch (str.trim()) {\n\t\t\tcase \"horizontal\":\n\t\t\t\tcustom.hFlip = true;\n\t\t\t\tbreak;\n\t\t\tcase \"vertical\":\n\t\t\t\tcustom.vFlip = true;\n\t\t\t\tbreak;\n\t\t}\n\t});\n}\n\nconst defaultCustomisations = {\n ...defaultIconCustomisations,\n preserveAspectRatio: '',\n};\n/**\n * Get customisations\n */\nfunction getCustomisations(node) {\n const customisations = {\n ...defaultCustomisations,\n };\n const attr = (key, def) => node.getAttribute(key) || def;\n // Dimensions\n customisations.width = attr('width', null);\n customisations.height = attr('height', null);\n // Rotation\n customisations.rotate = rotateFromString(attr('rotate', ''));\n // Flip\n flipFromString(customisations, attr('flip', ''));\n // SVG attributes\n customisations.preserveAspectRatio = attr('preserveAspectRatio', attr('preserveaspectratio', ''));\n return customisations;\n}\n/**\n * Check if customisations have been updated\n */\nfunction haveCustomisationsChanged(value1, value2) {\n for (const key in defaultCustomisations) {\n if (value1[key] !== value2[key]) {\n return true;\n }\n }\n return false;\n}\n\n/**\n* Expression to test part of icon name.\n*\n* Used when loading icons from Iconify API due to project naming convension.\n* Ignored when using custom icon sets - convension does not apply.\n*/\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n/**\n* Convert string icon name to IconifyIconName object.\n*/\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n\tconst colonSeparated = value.split(\":\");\n\tif (value.slice(0, 1) === \"@\") {\n\t\tif (colonSeparated.length < 2 || colonSeparated.length > 3) return null;\n\t\tprovider = colonSeparated.shift().slice(1);\n\t}\n\tif (colonSeparated.length > 3 || !colonSeparated.length) return null;\n\tif (colonSeparated.length > 1) {\n\t\tconst name$1 = colonSeparated.pop();\n\t\tconst prefix = colonSeparated.pop();\n\t\tconst result = {\n\t\t\tprovider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n\t\t\tprefix,\n\t\t\tname: name$1\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tconst name = colonSeparated[0];\n\tconst dashSeparated = name.split(\"-\");\n\tif (dashSeparated.length > 1) {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: dashSeparated.shift(),\n\t\t\tname: dashSeparated.join(\"-\")\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tif (allowSimpleName && provider === \"\") {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: \"\",\n\t\t\tname\n\t\t};\n\t\treturn validate && !validateIconName(result, allowSimpleName) ? null : result;\n\t}\n\treturn null;\n};\n/**\n* Check if icon is valid.\n*\n* This function is not part of stringToIcon because validation is not needed for most code.\n*/\nconst validateIconName = (icon, allowSimpleName) => {\n\tif (!icon) return false;\n\treturn !!((allowSimpleName && icon.prefix === \"\" || !!icon.prefix) && !!icon.name);\n};\n\n/**\n* Resolve icon set icons\n*\n* Returns parent icon for each icon\n*/\nfunction getIconsTree(data, names) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tconst resolved = Object.create(null);\n\tfunction resolve(name) {\n\t\tif (icons[name]) return resolved[name] = [];\n\t\tif (!(name in resolved)) {\n\t\t\tresolved[name] = null;\n\t\t\tconst parent = aliases[name] && aliases[name].parent;\n\t\t\tconst value = parent && resolve(parent);\n\t\t\tif (value) resolved[name] = [parent].concat(value);\n\t\t}\n\t\treturn resolved[name];\n\t}\n\t(Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n\treturn resolved;\n}\n\n/**\n* Merge transformations\n*/\nfunction mergeIconTransformations(obj1, obj2) {\n\tconst result = {};\n\tif (!obj1.hFlip !== !obj2.hFlip) result.hFlip = true;\n\tif (!obj1.vFlip !== !obj2.vFlip) result.vFlip = true;\n\tconst rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n\tif (rotate) result.rotate = rotate;\n\treturn result;\n}\n\n/**\n* Merge icon and alias\n*\n* Can also be used to merge default values and icon\n*/\nfunction mergeIconData(parent, child) {\n\tconst result = mergeIconTransformations(parent, child);\n\tfor (const key in defaultExtendedIconProps) if (key in defaultIconTransformations) {\n\t\tif (key in parent && !(key in result)) result[key] = defaultIconTransformations[key];\n\t} else if (key in child) result[key] = child[key];\n\telse if (key in parent) result[key] = parent[key];\n\treturn result;\n}\n\n/**\n* Get icon data, using prepared aliases tree\n*/\nfunction internalGetIconData(data, name, tree) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tlet currentProps = {};\n\tfunction parse(name$1) {\n\t\tcurrentProps = mergeIconData(icons[name$1] || aliases[name$1], currentProps);\n\t}\n\tparse(name);\n\ttree.forEach(parse);\n\treturn mergeIconData(data, currentProps);\n}\n\n/**\n* Extract icons from an icon set\n*\n* Returns list of icons that were found in icon set\n*/\nfunction parseIconSet(data, callback) {\n\tconst names = [];\n\tif (typeof data !== \"object\" || typeof data.icons !== \"object\") return names;\n\tif (data.not_found instanceof Array) data.not_found.forEach((name) => {\n\t\tcallback(name, null);\n\t\tnames.push(name);\n\t});\n\tconst tree = getIconsTree(data);\n\tfor (const name in tree) {\n\t\tconst item = tree[name];\n\t\tif (item) {\n\t\t\tcallback(name, internalGetIconData(data, name, item));\n\t\t\tnames.push(name);\n\t\t}\n\t}\n\treturn names;\n}\n\n/**\n* Optional properties\n*/\nconst optionalPropertyDefaults = {\n\tprovider: \"\",\n\taliases: {},\n\tnot_found: {},\n\t...defaultIconDimensions\n};\n/**\n* Check props\n*/\nfunction checkOptionalProps(item, defaults) {\n\tfor (const prop in defaults) if (prop in item && typeof item[prop] !== typeof defaults[prop]) return false;\n\treturn true;\n}\n/**\n* Validate icon set, return it as IconifyJSON on success, null on failure\n*\n* Unlike validateIconSet(), this function is very basic.\n* It does not throw exceptions, it does not check metadata, it does not fix stuff.\n*/\nfunction quicklyValidateIconSet(obj) {\n\tif (typeof obj !== \"object\" || obj === null) return null;\n\tconst data = obj;\n\tif (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") return null;\n\tif (!checkOptionalProps(obj, optionalPropertyDefaults)) return null;\n\tconst icons = data.icons;\n\tfor (const name in icons) {\n\t\tconst icon = icons[name];\n\t\tif (!name || typeof icon.body !== \"string\" || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\tconst aliases = data.aliases || Object.create(null);\n\tfor (const name in aliases) {\n\t\tconst icon = aliases[name];\n\t\tconst parent = icon.parent;\n\t\tif (!name || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\treturn data;\n}\n\n/**\n* Storage by provider and prefix\n*/\nconst dataStorage = Object.create(null);\n/**\n* Create new storage\n*/\nfunction newStorage(provider, prefix) {\n\treturn {\n\t\tprovider,\n\t\tprefix,\n\t\ticons: Object.create(null),\n\t\tmissing: /* @__PURE__ */ new Set()\n\t};\n}\n/**\n* Get storage for provider and prefix\n*/\nfunction getStorage(provider, prefix) {\n\tconst providerStorage = dataStorage[provider] || (dataStorage[provider] = Object.create(null));\n\treturn providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\n/**\n* Add icon set to storage\n*\n* Returns array of added icons\n*/\nfunction addIconSet(storage, data) {\n\tif (!quicklyValidateIconSet(data)) return [];\n\treturn parseIconSet(data, (name, icon) => {\n\t\tif (icon) storage.icons[name] = icon;\n\t\telse storage.missing.add(name);\n\t});\n}\n/**\n* Add icon to storage\n*/\nfunction addIconToStorage(storage, name, icon) {\n\ttry {\n\t\tif (typeof icon.body === \"string\") {\n\t\t\tstorage.icons[name] = { ...icon };\n\t\t\treturn true;\n\t\t}\n\t} catch (err) {}\n\treturn false;\n}\n/**\n* List available icons\n*/\nfunction listIcons$1(provider, prefix) {\n\tlet allIcons = [];\n\t(typeof provider === \"string\" ? [provider] : Object.keys(dataStorage)).forEach((provider$1) => {\n\t\t(typeof provider$1 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider$1] || {})).forEach((prefix$1) => {\n\t\t\tconst storage = getStorage(provider$1, prefix$1);\n\t\t\tallIcons = allIcons.concat(Object.keys(storage.icons).map((name) => (provider$1 !== \"\" ? \"@\" + provider$1 + \":\" : \"\") + prefix$1 + \":\" + name));\n\t\t});\n\t});\n\treturn allIcons;\n}\n\n/**\n* Allow storing icons without provider or prefix, making it possible to store icons like \"home\"\n*/\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n\tif (typeof allow === \"boolean\") simpleNames = allow;\n\treturn simpleNames;\n}\n/**\n* Get icon data\n*\n* Returns:\n* - IconifyIcon on success, object directly from storage so don't modify it\n* - null if icon is marked as missing (returned in `not_found` property from API, so don't bother sending API requests)\n* - undefined if icon is missing in storage\n*/\nfunction getIconData(name) {\n\tconst icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n\tif (icon) {\n\t\tconst storage = getStorage(icon.provider, icon.prefix);\n\t\tconst iconName = icon.name;\n\t\treturn storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n\t}\n}\n/**\n* Add one icon\n*/\nfunction addIcon$1(name, data) {\n\tconst icon = stringToIcon(name, true, simpleNames);\n\tif (!icon) return false;\n\tconst storage = getStorage(icon.provider, icon.prefix);\n\tif (data) return addIconToStorage(storage, icon.name, data);\n\telse {\n\t\tstorage.missing.add(icon.name);\n\t\treturn true;\n\t}\n}\n/**\n* Add icon set\n*/\nfunction addCollection$1(data, provider) {\n\tif (typeof data !== \"object\") return false;\n\tif (typeof provider !== \"string\") provider = data.provider || \"\";\n\tif (simpleNames && !provider && !data.prefix) {\n\t\tlet added = false;\n\t\tif (quicklyValidateIconSet(data)) {\n\t\t\tdata.prefix = \"\";\n\t\t\tparseIconSet(data, (name, icon) => {\n\t\t\t\tif (addIcon$1(name, icon)) added = true;\n\t\t\t});\n\t\t}\n\t\treturn added;\n\t}\n\tconst prefix = data.prefix;\n\tif (!validateIconName({\n\t\tprefix,\n\t\tname: \"a\"\n\t})) return false;\n\treturn !!addIconSet(getStorage(provider, prefix), data);\n}\n/**\n* Check if icon data is available\n*/\nfunction iconLoaded$1(name) {\n\treturn !!getIconData(name);\n}\n/**\n* Get full icon\n*/\nfunction getIcon$1(name) {\n\tconst result = getIconData(name);\n\treturn result ? {\n\t\t...defaultIconProps,\n\t\t...result\n\t} : result;\n}\n\n/**\n* Remove callback\n*/\nfunction removeCallback(storages, id) {\n\tstorages.forEach((storage) => {\n\t\tconst items = storage.loaderCallbacks;\n\t\tif (items) storage.loaderCallbacks = items.filter((row) => row.id !== id);\n\t});\n}\n/**\n* Update all callbacks for provider and prefix\n*/\nfunction updateCallbacks(storage) {\n\tif (!storage.pendingCallbacksFlag) {\n\t\tstorage.pendingCallbacksFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.pendingCallbacksFlag = false;\n\t\t\tconst items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n\t\t\tif (!items.length) return;\n\t\t\tlet hasPending = false;\n\t\t\tconst provider = storage.provider;\n\t\t\tconst prefix = storage.prefix;\n\t\t\titems.forEach((item) => {\n\t\t\t\tconst icons = item.icons;\n\t\t\t\tconst oldLength = icons.pending.length;\n\t\t\t\ticons.pending = icons.pending.filter((icon) => {\n\t\t\t\t\tif (icon.prefix !== prefix) return true;\n\t\t\t\t\tconst name = icon.name;\n\t\t\t\t\tif (storage.icons[name]) icons.loaded.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse if (storage.missing.has(name)) icons.missing.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse {\n\t\t\t\t\t\thasPending = true;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tif (icons.pending.length !== oldLength) {\n\t\t\t\t\tif (!hasPending) removeCallback([storage], item.id);\n\t\t\t\t\titem.callback(icons.loaded.slice(0), icons.missing.slice(0), icons.pending.slice(0), item.abort);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Unique id counter for callbacks\n*/\nlet idCounter = 0;\n/**\n* Add callback\n*/\nfunction storeCallback(callback, icons, pendingSources) {\n\tconst id = idCounter++;\n\tconst abort = removeCallback.bind(null, pendingSources, id);\n\tif (!icons.pending.length) return abort;\n\tconst item = {\n\t\tid,\n\t\ticons,\n\t\tcallback,\n\t\tabort\n\t};\n\tpendingSources.forEach((storage) => {\n\t\t(storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n\t});\n\treturn abort;\n}\n\n/**\n* Check if icons have been loaded\n*/\nfunction sortIcons(icons) {\n\tconst result = {\n\t\tloaded: [],\n\t\tmissing: [],\n\t\tpending: []\n\t};\n\tconst storage = Object.create(null);\n\ticons.sort((a, b) => {\n\t\tif (a.provider !== b.provider) return a.provider.localeCompare(b.provider);\n\t\tif (a.prefix !== b.prefix) return a.prefix.localeCompare(b.prefix);\n\t\treturn a.name.localeCompare(b.name);\n\t});\n\tlet lastIcon = {\n\t\tprovider: \"\",\n\t\tprefix: \"\",\n\t\tname: \"\"\n\t};\n\ticons.forEach((icon) => {\n\t\tif (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) return;\n\t\tlastIcon = icon;\n\t\tconst provider = icon.provider;\n\t\tconst prefix = icon.prefix;\n\t\tconst name = icon.name;\n\t\tconst providerStorage = storage[provider] || (storage[provider] = Object.create(null));\n\t\tconst localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n\t\tlet list;\n\t\tif (name in localStorage.icons) list = result.loaded;\n\t\telse if (prefix === \"\" || localStorage.missing.has(name)) list = result.missing;\n\t\telse list = result.pending;\n\t\tconst item = {\n\t\t\tprovider,\n\t\t\tprefix,\n\t\t\tname\n\t\t};\n\t\tlist.push(item);\n\t});\n\treturn result;\n}\n\n/**\n* Local storate types and entries\n*/\nconst storage = Object.create(null);\n/**\n* Set API module\n*/\nfunction setAPIModule(provider, item) {\n\tstorage[provider] = item;\n}\n/**\n* Get API module\n*/\nfunction getAPIModule(provider) {\n\treturn storage[provider] || storage[\"\"];\n}\n\n/**\n* Convert icons list from string/icon mix to icons and validate them\n*/\nfunction listToIcons(list, validate = true, simpleNames = false) {\n\tconst result = [];\n\tlist.forEach((item) => {\n\t\tconst icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n\t\tif (icon) result.push(icon);\n\t});\n\treturn result;\n}\n\n/**\n* Create full API configuration from partial data\n*/\nfunction createAPIConfig(source) {\n\tlet resources;\n\tif (typeof source.resources === \"string\") resources = [source.resources];\n\telse {\n\t\tresources = source.resources;\n\t\tif (!(resources instanceof Array) || !resources.length) return null;\n\t}\n\treturn {\n\t\tresources,\n\t\tpath: source.path || \"/\",\n\t\tmaxURL: source.maxURL || 500,\n\t\trotate: source.rotate || 750,\n\t\ttimeout: source.timeout || 5e3,\n\t\trandom: source.random === true,\n\t\tindex: source.index || 0,\n\t\tdataAfterTimeout: source.dataAfterTimeout !== false\n\t};\n}\n/**\n* Local storage\n*/\nconst configStorage = Object.create(null);\n/**\n* Redundancy for API servers.\n*\n* API should have very high uptime because of implemented redundancy at server level, but\n* sometimes bad things happen. On internet 100% uptime is not possible.\n*\n* There could be routing problems. Server might go down for whatever reason, but it takes\n* few minutes to detect that downtime, so during those few minutes API might not be accessible.\n*\n* This script has some redundancy to mitigate possible network issues.\n*\n* If one host cannot be reached in 'rotate' (750 by default) ms, script will try to retrieve\n* data from different host. Hosts have different configurations, pointing to different\n* API servers hosted at different providers.\n*/\nconst fallBackAPISources = [\"https://api.simplesvg.com\", \"https://api.unisvg.com\"];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) if (fallBackAPISources.length === 1) fallBackAPI.push(fallBackAPISources.shift());\nelse if (Math.random() > .5) fallBackAPI.push(fallBackAPISources.shift());\nelse fallBackAPI.push(fallBackAPISources.pop());\nconfigStorage[\"\"] = createAPIConfig({ resources: [\"https://api.iconify.design\"].concat(fallBackAPI) });\n/**\n* Add custom config for provider\n*/\nfunction addAPIProvider$1(provider, customConfig) {\n\tconst config = createAPIConfig(customConfig);\n\tif (config === null) return false;\n\tconfigStorage[provider] = config;\n\treturn true;\n}\n/**\n* Get API configuration\n*/\nfunction getAPIConfig(provider) {\n\treturn configStorage[provider];\n}\n/**\n* List API providers\n*/\nfunction listAPIProviders() {\n\treturn Object.keys(configStorage);\n}\n\n/**\n* Default RedundancyConfig for API calls\n*/\nconst defaultConfig = {\n\tresources: [],\n\tindex: 0,\n\ttimeout: 2e3,\n\trotate: 750,\n\trandom: false,\n\tdataAfterTimeout: false\n};\n\n/**\n* Send query\n*/\nfunction sendQuery(config, payload, query, done) {\n\tconst resourcesCount = config.resources.length;\n\tconst startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n\tlet resources;\n\tif (config.random) {\n\t\tlet list = config.resources.slice(0);\n\t\tresources = [];\n\t\twhile (list.length > 1) {\n\t\t\tconst nextIndex = Math.floor(Math.random() * list.length);\n\t\t\tresources.push(list[nextIndex]);\n\t\t\tlist = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n\t\t}\n\t\tresources = resources.concat(list);\n\t} else resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n\tconst startTime = Date.now();\n\tlet status = \"pending\";\n\tlet queriesSent = 0;\n\tlet lastError;\n\tlet timer = null;\n\tlet queue = [];\n\tlet doneCallbacks = [];\n\tif (typeof done === \"function\") doneCallbacks.push(done);\n\t/**\n\t* Reset timer\n\t*/\n\tfunction resetTimer() {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = null;\n\t\t}\n\t}\n\t/**\n\t* Abort everything\n\t*/\n\tfunction abort() {\n\t\tif (status === \"pending\") status = \"aborted\";\n\t\tresetTimer();\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Add / replace callback to call when execution is complete.\n\t* This can be used to abort pending query implementations when query is complete or aborted.\n\t*/\n\tfunction subscribe(callback, overwrite) {\n\t\tif (overwrite) doneCallbacks = [];\n\t\tif (typeof callback === \"function\") doneCallbacks.push(callback);\n\t}\n\t/**\n\t* Get query status\n\t*/\n\tfunction getQueryStatus() {\n\t\treturn {\n\t\t\tstartTime,\n\t\t\tpayload,\n\t\t\tstatus,\n\t\t\tqueriesSent,\n\t\t\tqueriesPending: queue.length,\n\t\t\tsubscribe,\n\t\t\tabort\n\t\t};\n\t}\n\t/**\n\t* Fail query\n\t*/\n\tfunction failQuery() {\n\t\tstatus = \"failed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(void 0, lastError);\n\t\t});\n\t}\n\t/**\n\t* Clear queue\n\t*/\n\tfunction clearQueue() {\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Got response from module\n\t*/\n\tfunction moduleResponse(item, response, data) {\n\t\tconst isError = response !== \"success\";\n\t\tqueue = queue.filter((queued) => queued !== item);\n\t\tswitch (status) {\n\t\t\tcase \"pending\": break;\n\t\t\tcase \"failed\":\n\t\t\t\tif (isError || !config.dataAfterTimeout) return;\n\t\t\t\tbreak;\n\t\t\tdefault: return;\n\t\t}\n\t\tif (response === \"abort\") {\n\t\t\tlastError = data;\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tif (isError) {\n\t\t\tlastError = data;\n\t\t\tif (!queue.length) if (!resources.length) failQuery();\n\t\t\telse execNext();\n\t\t\treturn;\n\t\t}\n\t\tresetTimer();\n\t\tclearQueue();\n\t\tif (!config.random) {\n\t\t\tconst index = config.resources.indexOf(item.resource);\n\t\t\tif (index !== -1 && index !== config.index) config.index = index;\n\t\t}\n\t\tstatus = \"completed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(data);\n\t\t});\n\t}\n\t/**\n\t* Execute next query\n\t*/\n\tfunction execNext() {\n\t\tif (status !== \"pending\") return;\n\t\tresetTimer();\n\t\tconst resource = resources.shift();\n\t\tif (resource === void 0) {\n\t\t\tif (queue.length) {\n\t\t\t\ttimer = setTimeout(() => {\n\t\t\t\t\tresetTimer();\n\t\t\t\t\tif (status === \"pending\") {\n\t\t\t\t\t\tclearQueue();\n\t\t\t\t\t\tfailQuery();\n\t\t\t\t\t}\n\t\t\t\t}, config.timeout);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tconst item = {\n\t\t\tstatus: \"pending\",\n\t\t\tresource,\n\t\t\tcallback: (status$1, data) => {\n\t\t\t\tmoduleResponse(item, status$1, data);\n\t\t\t}\n\t\t};\n\t\tqueue.push(item);\n\t\tqueriesSent++;\n\t\ttimer = setTimeout(execNext, config.rotate);\n\t\tquery(resource, payload, item.callback);\n\t}\n\tsetTimeout(execNext);\n\treturn getQueryStatus;\n}\n\n/**\n* Redundancy instance\n*/\nfunction initRedundancy(cfg) {\n\tconst config = {\n\t\t...defaultConfig,\n\t\t...cfg\n\t};\n\tlet queries = [];\n\t/**\n\t* Remove aborted and completed queries\n\t*/\n\tfunction cleanup() {\n\t\tqueries = queries.filter((item) => item().status === \"pending\");\n\t}\n\t/**\n\t* Send query\n\t*/\n\tfunction query(payload, queryCallback, doneCallback) {\n\t\tconst query$1 = sendQuery(config, payload, queryCallback, (data, error) => {\n\t\t\tcleanup();\n\t\t\tif (doneCallback) doneCallback(data, error);\n\t\t});\n\t\tqueries.push(query$1);\n\t\treturn query$1;\n\t}\n\t/**\n\t* Find instance\n\t*/\n\tfunction find(callback) {\n\t\treturn queries.find((value) => {\n\t\t\treturn callback(value);\n\t\t}) || null;\n\t}\n\treturn {\n\t\tquery,\n\t\tfind,\n\t\tsetIndex: (index) => {\n\t\t\tconfig.index = index;\n\t\t},\n\t\tgetIndex: () => config.index,\n\t\tcleanup\n\t};\n}\n\nfunction emptyCallback$1() {}\nconst redundancyCache = Object.create(null);\n/**\n* Get Redundancy instance for provider\n*/\nfunction getRedundancyCache(provider) {\n\tif (!redundancyCache[provider]) {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (!config) return;\n\t\tredundancyCache[provider] = {\n\t\t\tconfig,\n\t\t\tredundancy: initRedundancy(config)\n\t\t};\n\t}\n\treturn redundancyCache[provider];\n}\n/**\n* Send API query\n*/\nfunction sendAPIQuery(target, query, callback) {\n\tlet redundancy;\n\tlet send;\n\tif (typeof target === \"string\") {\n\t\tconst api = getAPIModule(target);\n\t\tif (!api) {\n\t\t\tcallback(void 0, 424);\n\t\t\treturn emptyCallback$1;\n\t\t}\n\t\tsend = api.send;\n\t\tconst cached = getRedundancyCache(target);\n\t\tif (cached) redundancy = cached.redundancy;\n\t} else {\n\t\tconst config = createAPIConfig(target);\n\t\tif (config) {\n\t\t\tredundancy = initRedundancy(config);\n\t\t\tconst api = getAPIModule(target.resources ? target.resources[0] : \"\");\n\t\t\tif (api) send = api.send;\n\t\t}\n\t}\n\tif (!redundancy || !send) {\n\t\tcallback(void 0, 424);\n\t\treturn emptyCallback$1;\n\t}\n\treturn redundancy.query(query, send, callback)().abort;\n}\n\nfunction emptyCallback() {}\n/**\n* Function called when new icons have been loaded\n*/\nfunction loadedNewIcons(storage) {\n\tif (!storage.iconsLoaderFlag) {\n\t\tstorage.iconsLoaderFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsLoaderFlag = false;\n\t\t\tupdateCallbacks(storage);\n\t\t});\n\t}\n}\n/**\n* Check icon names for API\n*/\nfunction checkIconNamesForAPI(icons) {\n\tconst valid = [];\n\tconst invalid = [];\n\ticons.forEach((name) => {\n\t\t(name.match(matchIconName) ? valid : invalid).push(name);\n\t});\n\treturn {\n\t\tvalid,\n\t\tinvalid\n\t};\n}\n/**\n* Parse loader response\n*/\nfunction parseLoaderResponse(storage, icons, data) {\n\tfunction checkMissing() {\n\t\tconst pending = storage.pendingIcons;\n\t\ticons.forEach((name) => {\n\t\t\tif (pending) pending.delete(name);\n\t\t\tif (!storage.icons[name]) storage.missing.add(name);\n\t\t});\n\t}\n\tif (data && typeof data === \"object\") try {\n\t\tif (!addIconSet(storage, data).length) {\n\t\t\tcheckMissing();\n\t\t\treturn;\n\t\t}\n\t} catch (err) {\n\t\tconsole.error(err);\n\t}\n\tcheckMissing();\n\tloadedNewIcons(storage);\n}\n/**\n* Handle response that can be async\n*/\nfunction parsePossiblyAsyncResponse(response, callback) {\n\tif (response instanceof Promise) response.then((data) => {\n\t\tcallback(data);\n\t}).catch(() => {\n\t\tcallback(null);\n\t});\n\telse callback(response);\n}\n/**\n* Load icons\n*/\nfunction loadNewIcons(storage, icons) {\n\tif (!storage.iconsToLoad) storage.iconsToLoad = icons;\n\telse storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n\tif (!storage.iconsQueueFlag) {\n\t\tstorage.iconsQueueFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsQueueFlag = false;\n\t\t\tconst { provider, prefix } = storage;\n\t\t\tconst icons$1 = storage.iconsToLoad;\n\t\t\tdelete storage.iconsToLoad;\n\t\t\tif (!icons$1 || !icons$1.length) return;\n\t\t\tconst customIconLoader = storage.loadIcon;\n\t\t\tif (storage.loadIcons && (icons$1.length > 1 || !customIconLoader)) {\n\t\t\t\tparsePossiblyAsyncResponse(storage.loadIcons(icons$1, prefix, provider), (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, icons$1, data);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (customIconLoader) {\n\t\t\t\ticons$1.forEach((name) => {\n\t\t\t\t\tparsePossiblyAsyncResponse(customIconLoader(name, prefix, provider), (data) => {\n\t\t\t\t\t\tparseLoaderResponse(storage, [name], data ? {\n\t\t\t\t\t\t\tprefix,\n\t\t\t\t\t\t\ticons: { [name]: data }\n\t\t\t\t\t\t} : null);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { valid, invalid } = checkIconNamesForAPI(icons$1);\n\t\t\tif (invalid.length) parseLoaderResponse(storage, invalid, null);\n\t\t\tif (!valid.length) return;\n\t\t\tconst api = prefix.match(matchIconName) ? getAPIModule(provider) : null;\n\t\t\tif (!api) {\n\t\t\t\tparseLoaderResponse(storage, valid, null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tapi.prepare(provider, prefix, valid).forEach((item) => {\n\t\t\t\tsendAPIQuery(provider, item, (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, item.icons, data);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Load icons\n*/\nconst loadIcons$1 = (icons, callback) => {\n\tconst sortedIcons = sortIcons(listToIcons(icons, true, allowSimpleNames()));\n\tif (!sortedIcons.pending.length) {\n\t\tlet callCallback = true;\n\t\tif (callback) setTimeout(() => {\n\t\t\tif (callCallback) callback(sortedIcons.loaded, sortedIcons.missing, sortedIcons.pending, emptyCallback);\n\t\t});\n\t\treturn () => {\n\t\t\tcallCallback = false;\n\t\t};\n\t}\n\tconst newIcons = Object.create(null);\n\tconst sources = [];\n\tlet lastProvider, lastPrefix;\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix } = icon;\n\t\tif (prefix === lastPrefix && provider === lastProvider) return;\n\t\tlastProvider = provider;\n\t\tlastPrefix = prefix;\n\t\tsources.push(getStorage(provider, prefix));\n\t\tconst providerNewIcons = newIcons[provider] || (newIcons[provider] = Object.create(null));\n\t\tif (!providerNewIcons[prefix]) providerNewIcons[prefix] = [];\n\t});\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix, name } = icon;\n\t\tconst storage = getStorage(provider, prefix);\n\t\tconst pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n\t\tif (!pendingQueue.has(name)) {\n\t\t\tpendingQueue.add(name);\n\t\t\tnewIcons[provider][prefix].push(name);\n\t\t}\n\t});\n\tsources.forEach((storage) => {\n\t\tconst list = newIcons[storage.provider][storage.prefix];\n\t\tif (list.length) loadNewIcons(storage, list);\n\t});\n\treturn callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\n/**\n* Load one icon using Promise\n*/\nconst loadIcon$1 = (icon) => {\n\treturn new Promise((fulfill, reject) => {\n\t\tconst iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n\t\tif (!iconObj) {\n\t\t\treject(icon);\n\t\t\treturn;\n\t\t}\n\t\tloadIcons$1([iconObj || icon], (loaded) => {\n\t\t\tif (loaded.length && iconObj) {\n\t\t\t\tconst data = getIconData(iconObj);\n\t\t\t\tif (data) {\n\t\t\t\t\tfulfill({\n\t\t\t\t\t\t...defaultIconProps,\n\t\t\t\t\t\t...data\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\treject(icon);\n\t\t});\n\t});\n};\n\n/**\n * Test icon string\n */\nfunction testIconObject(value) {\n try {\n const obj = typeof value === 'string' ? JSON.parse(value) : value;\n if (typeof obj.body === 'string') {\n return {\n ...obj,\n };\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n //\n }\n}\n\n/**\n * Parse icon value, load if needed\n */\nfunction parseIconValue(value, onload) {\n if (typeof value === 'object') {\n const data = testIconObject(value);\n return {\n data,\n value,\n };\n }\n if (typeof value !== 'string') {\n // Invalid value\n return {\n value,\n };\n }\n // Check for JSON\n if (value.includes('{')) {\n const data = testIconObject(value);\n if (data) {\n return {\n data,\n value,\n };\n }\n }\n // Parse icon name\n const name = stringToIcon(value, true, true);\n if (!name) {\n return {\n value,\n };\n }\n // Valid icon name: check if data is available\n const data = getIconData(name);\n // Icon data exists or icon has no prefix. Do not load icon from API if icon has no prefix\n if (data !== undefined || !name.prefix) {\n return {\n value,\n name,\n data, // could be 'null' -> icon is missing\n };\n }\n // Load icon\n const loading = loadIcons$1([name], () => onload(value, name, getIconData(name)));\n return {\n value,\n name,\n loading,\n };\n}\n\n// Check for Safari\nlet isBuggedSafari = false;\ntry {\n isBuggedSafari = navigator.vendor.indexOf('Apple') === 0;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n}\ncatch (err) {\n //\n}\n/**\n * Get render mode\n */\nfunction getRenderMode(body, mode) {\n switch (mode) {\n // Force mode\n case 'svg':\n case 'bg':\n case 'mask':\n return mode;\n }\n // Check for animation, use 'style' for animated icons, unless browser is Safari\n // (only <a>, which should be ignored or animations start with '<a')\n if (mode !== 'style' &&\n (isBuggedSafari || body.indexOf('<a') === -1)) {\n // Render <svg>\n return 'svg';\n }\n // Use background or mask\n return body.indexOf('currentColor') === -1 ? 'bg' : 'mask';\n}\n\n/**\n* Regular expressions for calculating dimensions\n*/\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize$1(size, ratio, precision) {\n\tif (ratio === 1) return size;\n\tprecision = precision || 100;\n\tif (typeof size === \"number\") return Math.ceil(size * ratio * precision) / precision;\n\tif (typeof size !== \"string\") return size;\n\tconst oldParts = size.split(unitsSplit);\n\tif (oldParts === null || !oldParts.length) return size;\n\tconst newParts = [];\n\tlet code = oldParts.shift();\n\tlet isNumber = unitsTest.test(code);\n\twhile (true) {\n\t\tif (isNumber) {\n\t\t\tconst num = parseFloat(code);\n\t\t\tif (isNaN(num)) newParts.push(code);\n\t\t\telse newParts.push(Math.ceil(num * ratio * precision) / precision);\n\t\t} else newParts.push(code);\n\t\tcode = oldParts.shift();\n\t\tif (code === void 0) return newParts.join(\"\");\n\t\tisNumber = !isNumber;\n\t}\n}\n\nfunction splitSVGDefs(content, tag = \"defs\") {\n\tlet defs = \"\";\n\tconst index = content.indexOf(\"<\" + tag);\n\twhile (index >= 0) {\n\t\tconst start = content.indexOf(\">\", index);\n\t\tconst end = content.indexOf(\"</\" + tag);\n\t\tif (start === -1 || end === -1) break;\n\t\tconst endEnd = content.indexOf(\">\", end);\n\t\tif (endEnd === -1) break;\n\t\tdefs += content.slice(start + 1, end).trim();\n\t\tcontent = content.slice(0, index).trim() + content.slice(endEnd + 1);\n\t}\n\treturn {\n\t\tdefs,\n\t\tcontent\n\t};\n}\n/**\n* Merge defs and content\n*/\nfunction mergeDefsAndContent(defs, content) {\n\treturn defs ? \"<defs>\" + defs + \"</defs>\" + content : content;\n}\n/**\n* Wrap SVG content, without wrapping definitions\n*/\nfunction wrapSVGContent(body, start, end) {\n\tconst split = splitSVGDefs(body);\n\treturn mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\n/**\n* Check if value should be unset. Allows multiple keywords\n*/\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\n/**\n* Get SVG attributes and content from icon + customisations\n*\n* Does not generate style to make it compatible with frameworks that use objects for style, such as React.\n* Instead, it generates 'inline' value. If true, rendering engine should add verticalAlign: -0.125em to icon.\n*\n* Customisations should be normalised by platform specific parser.\n* Result should be converted to <svg> by platform specific parser.\n* Use replaceIDs to generate unique IDs for body.\n*/\nfunction iconToSVG(icon, customisations) {\n\tconst fullIcon = {\n\t\t...defaultIconProps,\n\t\t...icon\n\t};\n\tconst fullCustomisations = {\n\t\t...defaultIconCustomisations,\n\t\t...customisations\n\t};\n\tconst box = {\n\t\tleft: fullIcon.left,\n\t\ttop: fullIcon.top,\n\t\twidth: fullIcon.width,\n\t\theight: fullIcon.height\n\t};\n\tlet body = fullIcon.body;\n\t[fullIcon, fullCustomisations].forEach((props) => {\n\t\tconst transformations = [];\n\t\tconst hFlip = props.hFlip;\n\t\tconst vFlip = props.vFlip;\n\t\tlet rotation = props.rotate;\n\t\tif (hFlip) if (vFlip) rotation += 2;\n\t\telse {\n\t\t\ttransformations.push(\"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(-1 1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\telse if (vFlip) {\n\t\t\ttransformations.push(\"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(1 -1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\tlet tempValue;\n\t\tif (rotation < 0) rotation -= Math.floor(rotation / 4) * 4;\n\t\trotation = rotation % 4;\n\t\tswitch (rotation) {\n\t\t\tcase 1:\n\t\t\t\ttempValue = box.height / 2 + box.top;\n\t\t\t\ttransformations.unshift(\"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\ttransformations.unshift(\"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\ttempValue = box.width / 2 + box.left;\n\t\t\t\ttransformations.unshift(\"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t}\n\t\tif (rotation % 2 === 1) {\n\t\t\tif (box.left !== box.top) {\n\t\t\t\ttempValue = box.left;\n\t\t\t\tbox.left = box.top;\n\t\t\t\tbox.top = tempValue;\n\t\t\t}\n\t\t\tif (box.width !== box.height) {\n\t\t\t\ttempValue = box.width;\n\t\t\t\tbox.width = box.height;\n\t\t\t\tbox.height = tempValue;\n\t\t\t}\n\t\t}\n\t\tif (transformations.length) body = wrapSVGContent(body, \"<g transform=\\\"\" + transformations.join(\" \") + \"\\\">\", \"</g>\");\n\t});\n\tconst customisationsWidth = fullCustomisations.width;\n\tconst customisationsHeight = fullCustomisations.height;\n\tconst boxWidth = box.width;\n\tconst boxHeight = box.height;\n\tlet width;\n\tlet height;\n\tif (customisationsWidth === null) {\n\t\theight = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t\twidth = calculateSize$1(height, boxWidth / boxHeight);\n\t} else {\n\t\twidth = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n\t\theight = customisationsHeight === null ? calculateSize$1(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t}\n\tconst attributes = {};\n\tconst setAttr = (prop, value) => {\n\t\tif (!isUnsetKeyword(value)) attributes[prop] = value.toString();\n\t};\n\tsetAttr(\"width\", width);\n\tsetAttr(\"height\", height);\n\tconst viewBox = [\n\t\tbox.left,\n\t\tbox.top,\n\t\tboxWidth,\n\t\tboxHeight\n\t];\n\tattributes.viewBox = viewBox.join(\" \");\n\treturn {\n\t\tattributes,\n\t\tviewBox,\n\t\tbody\n\t};\n}\n\n/**\n* Generate <svg>\n*/\nfunction iconToHTML$1(body, attributes) {\n\tlet renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : \" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\";\n\tfor (const attr in attributes) renderAttribsHTML += \" \" + attr + \"=\\\"\" + attributes[attr] + \"\\\"\";\n\treturn \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"\" + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\n/**\n* Encode SVG for use in url()\n*\n* Short alternative to encodeURIComponent() that encodes only stuff used in SVG, generating\n* smaller code.\n*/\nfunction encodeSVGforURL(svg) {\n\treturn svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\n/**\n* Generate data: URL from SVG\n*/\nfunction svgToData(svg) {\n\treturn \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\n/**\n* Generate url() from SVG\n*/\nfunction svgToURL$1(svg) {\n\treturn \"url(\\\"\" + svgToData(svg) + \"\\\")\";\n}\n\nconst detectFetch = () => {\n\tlet callback;\n\ttry {\n\t\tcallback = fetch;\n\t\tif (typeof callback === \"function\") return callback;\n\t} catch (err) {}\n};\n/**\n* Fetch function\n*/\nlet fetchModule = detectFetch();\n/**\n* Set custom fetch() function\n*/\nfunction setFetch(fetch$1) {\n\tfetchModule = fetch$1;\n}\n/**\n* Get fetch() function. Used by Icon Finder Core\n*/\nfunction getFetch() {\n\treturn fetchModule;\n}\n/**\n* Calculate maximum icons list length for prefix\n*/\nfunction calculateMaxLength(provider, prefix) {\n\tconst config = getAPIConfig(provider);\n\tif (!config) return 0;\n\tlet result;\n\tif (!config.maxURL) result = 0;\n\telse {\n\t\tlet maxHostLength = 0;\n\t\tconfig.resources.forEach((item) => {\n\t\t\tconst host = item;\n\t\t\tmaxHostLength = Math.max(maxHostLength, host.length);\n\t\t});\n\t\tconst url = prefix + \".json?icons=\";\n\t\tresult = config.maxURL - maxHostLength - config.path.length - url.length;\n\t}\n\treturn result;\n}\n/**\n* Should query be aborted, based on last HTTP status\n*/\nfunction shouldAbort(status) {\n\treturn status === 404;\n}\n/**\n* Prepare params\n*/\nconst prepare = (provider, prefix, icons) => {\n\tconst results = [];\n\tconst maxLength = calculateMaxLength(provider, prefix);\n\tconst type = \"icons\";\n\tlet item = {\n\t\ttype,\n\t\tprovider,\n\t\tprefix,\n\t\ticons: []\n\t};\n\tlet length = 0;\n\ticons.forEach((name, index) => {\n\t\tlength += name.length + 1;\n\t\tif (length >= maxLength && index > 0) {\n\t\t\tresults.push(item);\n\t\t\titem = {\n\t\t\t\ttype,\n\t\t\t\tprovider,\n\t\t\t\tprefix,\n\t\t\t\ticons: []\n\t\t\t};\n\t\t\tlength = name.length;\n\t\t}\n\t\titem.icons.push(name);\n\t});\n\tresults.push(item);\n\treturn results;\n};\n/**\n* Get path\n*/\nfunction getPath(provider) {\n\tif (typeof provider === \"string\") {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (config) return config.path;\n\t}\n\treturn \"/\";\n}\n/**\n* Load icons\n*/\nconst send = (host, params, callback) => {\n\tif (!fetchModule) {\n\t\tcallback(\"abort\", 424);\n\t\treturn;\n\t}\n\tlet path = getPath(params.provider);\n\tswitch (params.type) {\n\t\tcase \"icons\": {\n\t\t\tconst prefix = params.prefix;\n\t\t\tconst iconsList = params.icons.join(\",\");\n\t\t\tconst urlParams = new URLSearchParams({ icons: iconsList });\n\t\t\tpath += prefix + \".json?\" + urlParams.toString();\n\t\t\tbreak;\n\t\t}\n\t\tcase \"custom\": {\n\t\t\tconst uri = params.uri;\n\t\t\tpath += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tcallback(\"abort\", 400);\n\t\t\treturn;\n\t}\n\tlet defaultError = 503;\n\tfetchModule(host + path).then((response) => {\n\t\tconst status = response.status;\n\t\tif (status !== 200) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tcallback(shouldAbort(status) ? \"abort\" : \"next\", status);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tdefaultError = 501;\n\t\treturn response.json();\n\t}).then((data) => {\n\t\tif (typeof data !== \"object\" || data === null) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (data === 404) callback(\"abort\", data);\n\t\t\t\telse callback(\"next\", defaultError);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tcallback(\"success\", data);\n\t\t});\n\t}).catch(() => {\n\t\tcallback(\"next\", defaultError);\n\t});\n};\n/**\n* Export module\n*/\nconst fetchAPIModule = {\n\tprepare,\n\tsend\n};\n\n/**\n* Set custom loader for multiple icons\n*/\nfunction setCustomIconsLoader$1(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcons = loader;\n}\n/**\n* Set custom loader for one icon\n*/\nfunction setCustomIconLoader$1(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcon = loader;\n}\n\n/**\n * Attribute to add\n */\nconst nodeAttr = 'data-style';\n/**\n * Custom style to add to each node\n */\nlet customStyle = '';\n/**\n * Set custom style to add to all components\n *\n * Affects only components rendered after function call\n */\nfunction appendCustomStyle(style) {\n customStyle = style;\n}\n/**\n * Add/update style node\n */\nfunction updateStyle(parent, inline) {\n // Get node, create if needed\n let styleNode = Array.from(parent.childNodes).find((node) => node.hasAttribute &&\n node.hasAttribute(nodeAttr));\n if (!styleNode) {\n styleNode = document.createElement('style');\n styleNode.setAttribute(nodeAttr, nodeAttr);\n parent.appendChild(styleNode);\n }\n // Update content\n styleNode.textContent =\n ':host{display:inline-block;vertical-align:' +\n (inline ? '-0.125em' : '0') +\n '}span,svg{display:block;margin:auto}' +\n customStyle;\n}\n\n// Core\n/**\n * Get functions and initialise stuff\n */\nfunction exportFunctions() {\n /**\n * Initialise stuff\n */\n // Set API module\n setAPIModule('', fetchAPIModule);\n // Allow simple icon names\n allowSimpleNames(true);\n let _window;\n try {\n _window = window;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n //\n }\n if (_window) {\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection$1(item)) {\n console.error(err);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (const key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider$1(key, value)) {\n console.error(err);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n }\n const _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n };\n return {\n iconLoaded: iconLoaded$1,\n getIcon: getIcon$1,\n listIcons: listIcons$1,\n addIcon: addIcon$1,\n addCollection: addCollection$1,\n calculateSize: calculateSize$1,\n buildIcon: iconToSVG,\n iconToHTML: iconToHTML$1,\n svgToURL: svgToURL$1,\n loadIcons: loadIcons$1,\n loadIcon: loadIcon$1,\n addAPIProvider: addAPIProvider$1,\n setCustomIconLoader: setCustomIconLoader$1,\n setCustomIconsLoader: setCustomIconsLoader$1,\n appendCustomStyle,\n _api,\n };\n}\n\n// List of properties to apply\nconst monotoneProps = {\n 'background-color': 'currentColor',\n};\nconst coloredProps = {\n 'background-color': 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n image: 'var(--svg)',\n repeat: 'no-repeat',\n size: '100% 100%',\n};\nconst propsToAddTo = {\n '-webkit-mask': monotoneProps,\n 'mask': monotoneProps,\n 'background': coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + '-' + prop] = propsToAdd[prop];\n }\n}\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value ? value + (value.match(/^[-0-9.]+$/) ? 'px' : '') : 'inherit';\n}\n/**\n * Render node as <span>\n */\nfunction renderSPAN(data, icon, useMask) {\n const node = document.createElement('span');\n // Body\n let body = data.body;\n if (body.indexOf('<a') !== -1) {\n // Animated SVG: add something to fix timing bug\n body += '<!-- ' + Date.now() + ' -->';\n }\n // Generate SVG as URL\n const renderAttribs = data.attributes;\n const html = iconToHTML$1(body, {\n ...renderAttribs,\n width: icon.width + '',\n height: icon.height + '',\n });\n const url = svgToURL$1(html);\n // Generate style\n const svgStyle = node.style;\n const styles = {\n '--svg': url,\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...(useMask ? monotoneProps : coloredProps),\n };\n // Apply style\n for (const prop in styles) {\n svgStyle.setProperty(prop, styles[prop]);\n }\n return node;\n}\n\nlet policy;\n/**\n* Attempt to create policy\n*/\nfunction createPolicy() {\n\ttry {\n\t\tpolicy = window.trustedTypes.createPolicy(\"iconify\", { createHTML: (s) => s });\n\t} catch (err) {\n\t\tpolicy = null;\n\t}\n}\n/**\n* Clean up value for innerHTML assignment\n*\n* This code doesn't actually clean up anything.\n* It is intended be used with Iconify icon data, which has already been validated\n*/\nfunction cleanUpInnerHTML(html) {\n\tif (policy === void 0) createPolicy();\n\treturn policy ? policy.createHTML(html) : html;\n}\n\n/**\n * Render node as <svg>\n */\nfunction renderSVG(data) {\n const node = document.createElement('span');\n // Add style if needed\n const attr = data.attributes;\n let style = '';\n if (!attr.width) {\n style = 'width: inherit;';\n }\n if (!attr.height) {\n style += 'height: inherit;';\n }\n if (style) {\n attr.style = style;\n }\n // Generate SVG\n const html = iconToHTML$1(data.body, attr);\n node.innerHTML = cleanUpInnerHTML(html);\n return node.firstChild;\n}\n\n/**\n * Find icon node\n */\nfunction findIconElement(parent) {\n return Array.from(parent.childNodes).find((node) => {\n const tag = node.tagName &&\n node.tagName.toUpperCase();\n return tag === 'SPAN' || tag === 'SVG';\n });\n}\n/**\n * Render icon\n */\nfunction renderIcon(parent, state) {\n const iconData = state.icon.data;\n const customisations = state.customisations;\n // Render icon\n const renderData = iconToSVG(iconData, customisations);\n if (customisations.preserveAspectRatio) {\n renderData.attributes['preserveAspectRatio'] =\n customisations.preserveAspectRatio;\n }\n const mode = state.renderedMode;\n let node;\n switch (mode) {\n case 'svg':\n node = renderSVG(renderData);\n break;\n default:\n node = renderSPAN(renderData, {\n ...defaultIconProps,\n ...iconData,\n }, mode === 'mask');\n }\n // Set element\n const oldNode = findIconElement(parent);\n if (oldNode) {\n // Replace old element\n if (node.tagName === 'SPAN' && oldNode.tagName === node.tagName) {\n // Swap style instead of whole node\n oldNode.setAttribute('style', node.getAttribute('style'));\n }\n else {\n parent.replaceChild(node, oldNode);\n }\n }\n else {\n // Add new element\n parent.appendChild(node);\n }\n}\n\n/**\n * Set state to PendingState\n */\nfunction setPendingState(icon, inline, lastState) {\n const lastRender = lastState &&\n (lastState.rendered\n ? lastState\n : lastState.lastRender);\n return {\n rendered: false,\n inline,\n icon,\n lastRender,\n };\n}\n\n/**\n * Register 'iconify-icon' component, if it does not exist\n */\nfunction defineIconifyIcon(name = 'iconify-icon') {\n // Check for custom elements registry and HTMLElement\n let customElements;\n let ParentClass;\n try {\n customElements = window.customElements;\n ParentClass = window.HTMLElement;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n return;\n }\n // Make sure registry and HTMLElement exist\n if (!customElements || !ParentClass) {\n return;\n }\n // Check for duplicate\n const ConflictingClass = customElements.get(name);\n if (ConflictingClass) {\n return ConflictingClass;\n }\n // All attributes\n const attributes = [\n // Icon\n 'icon',\n // Mode\n 'mode',\n 'inline',\n 'noobserver',\n // Customisations\n 'width',\n 'height',\n 'rotate',\n 'flip',\n ];\n /**\n * Component class\n */\n const IconifyIcon = class extends ParentClass {\n // Root\n _shadowRoot;\n // Initialised\n _initialised = false;\n // Icon state\n _state;\n // Attributes check queued\n _checkQueued = false;\n // Connected\n _connected = false;\n // Observer\n _observer = null;\n _visible = true;\n /**\n * Constructor\n */\n constructor() {\n super();\n // Attach shadow DOM\n const root = (this._shadowRoot = this.attachShadow({\n mode: 'open',\n }));\n // Add style\n const inline = this.hasAttribute('inline');\n updateStyle(root, inline);\n // Create empty state\n this._state = setPendingState({\n value: '',\n }, inline);\n // Queue icon render\n this._queueCheck();\n }\n /**\n * Connected to DOM\n */\n connectedCallback() {\n this._connected = true;\n this.startObserver();\n }\n /**\n * Disconnected from DOM\n */\n disconnectedCallback() {\n this._connected = false;\n this.stopObserver();\n }\n /**\n * Observed attributes\n */\n static get observedAttributes() {\n return attributes.slice(0);\n }\n /**\n * Observed properties that are different from attributes\n *\n * Experimental! Need to test with various frameworks that support it\n */\n /*\n static get properties() {\n return {\n inline: {\n type: Boolean,\n reflect: true,\n },\n // Not listing other attributes because they are strings or combination\n // of string and another type. Cannot have multiple types\n };\n }\n */\n /**\n * Attribute has changed\n */\n attributeChangedCallback(name) {\n switch (name) {\n case 'inline': {\n // Update immediately: not affected by other attributes\n const newInline = this.hasAttribute('inline');\n const state = this._state;\n if (newInline !== state.inline) {\n // Update style if inline mode changed\n state.inline = newInline;\n updateStyle(this._shadowRoot, newInline);\n }\n break;\n }\n case 'noobserver': {\n const value = this.hasAttribute('noobserver');\n if (value) {\n this.startObserver();\n }\n else {\n this.stopObserver();\n }\n break;\n }\n default:\n // Queue check for other attributes\n this._queueCheck();\n }\n }\n /**\n * Get/set icon\n */\n get icon() {\n const value = this.getAttribute('icon');\n if (value && value.slice(0, 1) === '{') {\n try {\n return JSON.parse(value);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n //\n }\n }\n return value;\n }\n set icon(value) {\n if (typeof value === 'object') {\n value = JSON.stringify(value);\n }\n this.setAttribute('icon', value);\n }\n /**\n * Get/set inline\n */\n get inline() {\n return this.hasAttribute('inline');\n }\n set inline(value) {\n if (value) {\n this.setAttribute('inline', 'true');\n }\n else {\n this.removeAttribute('inline');\n }\n }\n /**\n * Get/set observer\n */\n get observer() {\n return this.hasAttribute('observer');\n }\n set observer(value) {\n if (value) {\n this.setAttribute('observer', 'true');\n }\n else {\n this.removeAttribute('observer');\n }\n }\n /**\n * Restart animation\n */\n restartAnimation() {\n const state = this._state;\n if (state.rendered) {\n const root = this._shadowRoot;\n if (state.renderedMode === 'svg') {\n // Update root node\n try {\n root.lastChild.setCurrentTime(0);\n return;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n // Failed: setCurrentTime() is not supported\n }\n }\n renderIcon(root, state);\n }\n }\n /**\n * Get status\n */\n get status() {\n const state = this._state;\n return state.rendered\n ? 'rendered'\n : state.icon.data === null\n ? 'failed'\n : 'loading';\n }\n /**\n * Queue attributes re-check\n */\n _queueCheck() {\n if (!this._checkQueued) {\n this._checkQueued = true;\n setTimeout(() => {\n this._check();\n });\n }\n }\n /**\n * Check for changes\n */\n _check() {\n if (!this._checkQueued) {\n return;\n }\n this._checkQueued = false;\n const state = this._state;\n // Get icon\n const newIcon = this.getAttribute('icon');\n if (newIcon !== state.icon.value) {\n this._iconChanged(newIcon);\n return;\n }\n // Ignore other attributes if icon is not rendered\n if (!state.rendered || !this._visible) {\n return;\n }\n // Check for mode and attribute changes\n const mode = this.getAttribute('mode');\n const customisations = getCustomisations(this);\n if (state.attrMode !== mode ||\n haveCustomisationsChanged(state.customisations, customisations) ||\n !findIconElement(this._shadowRoot)) {\n this._renderIcon(state.icon, customisations, mode);\n }\n }\n /**\n * Icon value has changed\n */\n _iconChanged(newValue) {\n const icon = parseIconValue(newValue, (value, name, data) => {\n // Asynchronous callback: re-check values to make sure stuff wasn't changed\n const state = this._state;\n if (state.rendered || this.getAttribute('icon') !== value) {\n // Icon data is already available or icon attribute was changed\n return;\n }\n // Change icon\n const icon = {\n value,\n name,\n data,\n };\n if (icon.data) {\n // Render icon\n this._gotIconData(icon);\n }\n else {\n // Nothing to render: update icon in state\n state.icon = icon;\n }\n });\n if (icon.data) {\n // Icon is ready to render\n this._gotIconData(icon);\n }\n else {\n // Pending icon\n this._state = setPendingState(icon, this._state.inline, this._state);\n }\n }\n /**\n * Force render icon on state change\n */\n _forceRender() {\n if (!this._visible) {\n // Remove icon\n const node = findIconElement(this._shadowRoot);\n if (node) {\n this._shadowRoot.removeChild(node);\n }\n return;\n }\n // Re-render icon\n this._queueCheck();\n }\n /**\n * Got new icon data, icon is ready to (re)render\n */\n _gotIconData(icon) {\n this._checkQueued = false;\n this._renderIcon(icon, getCustomisations(this), this.getAttribute('mode'));\n }\n /**\n * Re-render based on icon data\n */\n _renderIcon(icon, customisations, attrMode) {\n // Get mode\n const renderedMode = getRenderMode(icon.data.body, attrMode);\n // Inline was not changed\n const inline = this._state.inline;\n // Set state and render\n renderIcon(this._shadowRoot, (this._state = {\n rendered: true,\n icon,\n inline,\n customisations,\n attrMode,\n renderedMode,\n }));\n }\n /**\n * Start observer\n */\n startObserver() {\n if (!this._observer && !this.hasAttribute('noobserver')) {\n try {\n this._observer = new IntersectionObserver((entries) => {\n const intersecting = entries.some((entry) => entry.isIntersecting);\n if (intersecting !== this._visible) {\n this._visible = intersecting;\n this._forceRender();\n }\n });\n this._observer.observe(this);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n // Something went wrong, possibly observer is not supported\n if (this._observer) {\n try {\n this._observer.disconnect();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n //\n }\n this._observer = null;\n }\n }\n }\n }\n /**\n * Stop observer\n */\n stopObserver() {\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n this._visible = true;\n if (this._connected) {\n // Render icon\n this._forceRender();\n }\n }\n }\n };\n // Add getters and setters\n attributes.forEach((attr) => {\n if (!(attr in IconifyIcon.prototype)) {\n Object.defineProperty(IconifyIcon.prototype, attr, {\n get: function () {\n return this.getAttribute(attr);\n },\n set: function (value) {\n if (value !== null) {\n this.setAttribute(attr, value);\n }\n else {\n this.removeAttribute(attr);\n }\n },\n });\n }\n });\n // Add exported functions: both as static and instance methods\n const functions = exportFunctions();\n for (const key in functions) {\n IconifyIcon[key] = IconifyIcon.prototype[key] = functions[key];\n }\n // Define new component\n customElements.define(name, IconifyIcon);\n return IconifyIcon;\n}\n\n/**\n * Create exported data: either component instance or functions\n */\nconst IconifyIconComponent = defineIconifyIcon() || exportFunctions();\n/**\n * Export functions\n */\nconst { iconLoaded, getIcon, listIcons, addIcon, addCollection, calculateSize, buildIcon, iconToHTML, svgToURL, loadIcons, loadIcon, setCustomIconLoader, setCustomIconsLoader, addAPIProvider, _api, } = IconifyIconComponent;\n\nexport { IconifyIconComponent, _api, addAPIProvider, addCollection, addIcon, appendCustomStyle, buildIcon, calculateSize, getIcon, iconLoaded, iconToHTML, listIcons, loadIcon, loadIcons, setCustomIconLoader, setCustomIconsLoader, svgToURL };\n",":host {\n --color: currentColor;\n\n display: contents;\n color: var(--color);\n}\n\niconify-icon {\n color: inherit;\n}\n","import 'iconify-icon';\nimport type { PropertyValues } from 'lit';\nimport { html, unsafeCSS } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './icon.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * @summary An icon component that renders icons from any Iconify icon set. Decorative by default. Set `label` for meaningful icons.\n * @customElement l-icon\n *\n * @cssproperty --color - The color of the icon. Defaults to `currentColor`.\n */\nexport class Icon extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n /** The icon name in Iconify format (e.g. `mdi:home`, `lucide:check`). */\n @property()\n name = '';\n\n /** Accessible label. When set, the icon becomes meaningful (`role=\"img\"` + `aria-label`). When absent, the icon is decorative. */\n @property()\n label?: string;\n\n override updated(changedProperties: PropertyValues<this>) {\n if (changedProperties.has('label')) {\n if (this.label) {\n this.setAttribute('role', 'img');\n this.setAttribute('aria-label', this.label);\n } else {\n this.removeAttribute('role');\n this.removeAttribute('aria-label');\n }\n }\n }\n\n override render() {\n return html`\n <iconify-icon\n icon=${this.name}\n aria-hidden=\"true\"\n ></iconify-icon>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Icon } from './icon.js';\nexport * from './icon.js';\ndefine('icon', Icon);\n","import { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\n\n/**\n * Enhances a child `<input>` with visual digit cells (Stripe-style OTP input).\n *\n * A single hidden `<input>` handles keyboard, paste, and autocomplete.\n * Visual cells are rendered as real DOM elements with individual borders and focus ring.\n *\n * @summary Stripe-style OTP input with visual digit cells over a hidden native input.\n * @customElement l-input-otp\n *\n * @cssproperty --digits - Number of digit boxes (default: 6). Must match input's maxlength.\n * @cssproperty --cell-size - Cell width and height (default: 2.75rem). Font size scales automatically.\n * @cssproperty --cell-gap - Space between cells (default: 0.5rem).\n * @cssproperty --cell-bg-color - Cell background color.\n * @cssproperty --cell-border-color - Cell border color.\n * @cssproperty --cell-border-radius - Cell border-radius.\n * @cssproperty --cell-focus-color - Border + ring color of the active (focused) cell.\n * @cssproperty --cell-focus-ring - `box-shadow` of the active cell ring (defaults to a 1px solid ring; set to `none` to disable).\n */\nexport class InputOtp extends LuxenElement {\n override createRenderRoot() {\n return this;\n }\n\n /** Position after which to insert a visual separator (e.g., 3 for a 3-3 grouping). */\n @property({ type: Number, reflect: true, attribute: 'separator-after' })\n separatorAfter?: number;\n\n private _input!: HTMLInputElement;\n private _container!: HTMLDivElement;\n private _cells: HTMLDivElement[] = [];\n private _separatorEl: HTMLSpanElement | null = null;\n private _initialized = false;\n\n override connectedCallback() {\n super.connectedCallback();\n requestAnimationFrame(() => this._setup());\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._teardown();\n }\n\n // --- Setup / Teardown ---\n\n private _setup() {\n const input = this.querySelector<HTMLInputElement>('input');\n if (!input) return;\n\n this._input = input;\n\n // Derive digit count from --digits CSS custom property (default 6)\n const digits = Number(getComputedStyle(this).getPropertyValue('--digits').trim()) || 6;\n\n // Set sensible defaults — author can still override via HTML attributes\n const defaults: Record<string, string> = {\n type: 'text',\n inputmode: 'numeric',\n autocomplete: 'one-time-code',\n maxlength: String(digits),\n pattern: String.raw`\\d{${digits}}`,\n };\n for (const [attr, value] of Object.entries(defaults)) {\n if (!this._input.hasAttribute(attr)) {\n this._input.setAttribute(attr, value);\n }\n }\n\n // Build visual cells container\n this._container = document.createElement('div');\n this._container.className = 'l-input-otp-cells';\n this._container.setAttribute('aria-hidden', 'true');\n\n for (let i = 0; i < digits; i++) {\n const cell = document.createElement('div');\n cell.className = 'l-input-otp-cell';\n cell.appendChild(document.createElement('span'));\n this._cells.push(cell);\n this._container.appendChild(cell);\n\n // Insert separator after the specified position\n if (this.separatorAfter && i === this.separatorAfter - 1 && i < digits - 1) {\n this._separatorEl = document.createElement('span');\n this._separatorEl.className = 'l-input-otp-separator';\n this._container.appendChild(this._separatorEl);\n }\n }\n\n // Wrap: insert container before input, then move input inside\n this._input.replaceWith(this._container);\n this._container.appendChild(this._input);\n this._initialized = true;\n\n // Populate cells if input already has a value (e.g. disabled with prefilled value)\n this._updateCells();\n\n // Events — focus is deferred so it runs after the click that triggered it\n // (otherwise selectionStart is stale and the active cell flickers).\n this._input.addEventListener('input', this._updateCells);\n this._input.addEventListener('click', this._updateCells);\n this._input.addEventListener('keyup', this._updateCells);\n this._input.addEventListener('focus', this._scheduleUpdateCells);\n this._input.addEventListener('blur', this._clearCells);\n }\n\n private _teardown() {\n if (!this._initialized) return;\n\n this._input.removeEventListener('input', this._updateCells);\n this._input.removeEventListener('click', this._updateCells);\n this._input.removeEventListener('keyup', this._updateCells);\n this._input.removeEventListener('focus', this._scheduleUpdateCells);\n this._input.removeEventListener('blur', this._clearCells);\n\n // Restore input to direct child\n this._container.replaceWith(this._input);\n this._separatorEl?.remove();\n\n this._cells = [];\n this._separatorEl = null;\n this._initialized = false;\n }\n\n // --- Cell updates ---\n\n private _updateCells = (): void => {\n const value = this._input.value;\n const maxLen = this._input.maxLength || 6;\n const pos = Math.min(this._input.selectionStart ?? 0, maxLen - 1);\n const isFocused = document.activeElement === this._input;\n\n for (let i = 0; i < this._cells.length; i++) {\n const cell = this._cells[i];\n const span = cell.firstElementChild as HTMLSpanElement;\n const char = value[i] ?? '';\n\n span.textContent = char;\n\n if (char) {\n cell.setAttribute('data-filled', '');\n } else {\n cell.removeAttribute('data-filled');\n }\n\n if (isFocused && i === pos) {\n cell.setAttribute('data-active', '');\n } else {\n cell.removeAttribute('data-active');\n }\n }\n };\n\n private _clearCells = (): void => {\n for (const cell of this._cells) {\n cell.removeAttribute('data-active');\n }\n };\n\n private _scheduleUpdateCells = (): void => {\n requestAnimationFrame(this._updateCells);\n };\n}\n","import { define } from '../../define.js';\nimport { InputOtp } from './input-otp.js';\nexport * from './input-otp.js';\ndefine('input-otp', InputOtp);\n","import { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\n\nexport type InputStepperSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * A stepper control that enhances a native `<input type=\"number\">` with\n * decrement/increment buttons and an optional animated number track.\n *\n * @link https://www.nngroup.com/articles/input-steppers/\n *\n * @example\n * ```html\n * <l-input-stepper>\n * <input type=\"number\" min=\"0\" max=\"10\" value=\"5\" />\n * </l-input-stepper>\n * ```\n *\n * @event change - Fired when the value changes. Detail: `{ value: number }`.\n *\n * @cssproperty --border-color - Border color of the stepper container (default appearance) and of each button (rounded appearance). Defaults to `--l-color-border`.\n * @cssproperty --border-radius - Border radius of the stepper container (default appearance). Defaults to `--radius-md`.\n */\nexport class InputStepper extends LuxenElement {\n override createRenderRoot() {\n return this;\n }\n\n /** Minimum allowed value. Falls back to the input's `min` attribute. */\n @property({ type: Number })\n min?: number;\n\n /** Maximum allowed value. Falls back to the input's `max` attribute. */\n @property({ type: Number })\n max?: number;\n\n /** Step increment. Falls back to the input's `step` attribute. */\n @property({ type: Number })\n step?: number;\n\n /** Control size. */\n @property({ reflect: true })\n size: InputStepperSize = 'md';\n\n /** Enable the animated number roller overlay. */\n @property({ type: Boolean, reflect: true, attribute: 'with-roller' })\n withRoller = false;\n\n /** Icon name for the decrement button. */\n @property({ attribute: 'decrement-icon' })\n decrementIcon = 'lucide:minus';\n\n /** Icon name for the increment button. */\n @property({ attribute: 'increment-icon' })\n incrementIcon = 'lucide:plus';\n\n private _input: HTMLInputElement | null = null;\n private _decrementBtn: HTMLButtonElement | null = null;\n private _incrementBtn: HTMLButtonElement | null = null;\n private _valueWrapper: HTMLDivElement | null = null;\n private _trackDisplay: HTMLDivElement | null = null;\n private _track: HTMLDivElement | null = null;\n private _observer: MutationObserver | null = null;\n private _skipTransition = false;\n\n override connectedCallback() {\n super.connectedCallback();\n requestAnimationFrame(() => this._setup());\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._teardown();\n }\n\n override updated(changed: Map<string, unknown>) {\n if (!this._input) return;\n\n if (changed.has('min') || changed.has('max') || changed.has('step')) {\n this._syncConstraints();\n this._updateButtonStates();\n }\n }\n\n /** Decrease the value by one step. */\n decrement() {\n if (!this._input) return;\n const { min, step } = this._getConstraints();\n const newVal = Math.max(this._input.valueAsNumber - step, min);\n this._applyValue(newVal);\n }\n\n /** Increase the value by one step. */\n increment() {\n if (!this._input) return;\n const { max, step } = this._getConstraints();\n const newVal = Math.min(this._input.valueAsNumber + step, max);\n this._applyValue(newVal);\n }\n\n // --- Setup / Teardown ---\n\n private _setup() {\n this._input = this.querySelector('input[type=\"number\"]');\n if (!this._input) return;\n\n this._input.inputMode = 'numeric';\n\n // Wrap input in value container\n this._valueWrapper = document.createElement('div');\n this._valueWrapper.className = 'l-input-stepper-value';\n this._input.replaceWith(this._valueWrapper);\n this._valueWrapper.appendChild(this._input);\n\n // Inject track overlay\n if (this.withRoller) {\n this._buildTrack();\n }\n\n // Create buttons\n this._decrementBtn = this._createButton(this.decrementIcon, 'Decrease value');\n this._incrementBtn = this._createButton(this.incrementIcon, 'Increase value');\n\n this._valueWrapper.before(this._decrementBtn);\n this._valueWrapper.after(this._incrementBtn);\n\n // Events\n this._decrementBtn.addEventListener('click', this._onDecrement);\n this._incrementBtn.addEventListener('click', this._onIncrement);\n this._input.addEventListener('change', this._onInputChange);\n\n // Observe disabled attribute on input\n this._observer = new MutationObserver(() => this._updateButtonStates());\n this._observer.observe(this._input, { attributes: true, attributeFilter: ['disabled'] });\n\n this._syncConstraints();\n this._updateButtonStates();\n this._updateTrack();\n }\n\n private _teardown() {\n this._decrementBtn?.removeEventListener('click', this._onDecrement);\n this._incrementBtn?.removeEventListener('click', this._onIncrement);\n this._input?.removeEventListener('change', this._onInputChange);\n this._observer?.disconnect();\n\n // Restore input to direct child\n if (this._input && this._valueWrapper) {\n this._valueWrapper.replaceWith(this._input);\n }\n this._decrementBtn?.remove();\n this._incrementBtn?.remove();\n\n this._input = null;\n this._decrementBtn = null;\n this._incrementBtn = null;\n this._valueWrapper = null;\n this._trackDisplay = null;\n this._track = null;\n this._observer = null;\n }\n\n // --- DOM helpers ---\n\n private _createButton(icon: string, label: string): HTMLButtonElement {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.setAttribute('aria-label', label);\n btn.innerHTML = `<l-icon name=\"${icon}\"></l-icon>`;\n return btn;\n }\n\n private _buildTrack() {\n if (!this._valueWrapper) return;\n\n this._trackDisplay = document.createElement('div');\n this._trackDisplay.className = 'l-input-stepper-track-display';\n\n this._track = document.createElement('div');\n this._track.className = 'l-input-stepper-track';\n this._track.setAttribute('aria-hidden', 'true');\n\n this._rebuildTrackNumbers();\n this._trackDisplay.appendChild(this._track);\n this._valueWrapper.appendChild(this._trackDisplay);\n }\n\n private _rebuildTrackNumbers() {\n if (!this._track) return;\n\n const { min, max, step } = this._getConstraints();\n const effectiveMax = Number.isFinite(max) ? max : (this._input?.valueAsNumber ?? 0) + 100;\n\n this._track.innerHTML = '';\n for (let i = min; i <= effectiveMax; i += step) {\n const div = document.createElement('div');\n div.textContent = String(i);\n this._track.appendChild(div);\n }\n }\n\n // --- Constraints ---\n\n private _getConstraints() {\n const min = this.min ?? (Number(this._input?.getAttribute('min')) || 0);\n const max =\n this.max ??\n (this._input?.hasAttribute('max') ? Number(this._input.getAttribute('max')) : Infinity);\n const step = this.step ?? (Number(this._input?.getAttribute('step')) || 1);\n return { min, max, step };\n }\n\n private _syncConstraints() {\n if (!this._input) return;\n const { min, max, step } = this._getConstraints();\n\n this._input.min = String(min);\n if (Number.isFinite(max)) this._input.max = String(max);\n this._input.step = String(step);\n\n this._rebuildTrackNumbers();\n this._updateTrack();\n }\n\n // --- Value ---\n\n private _applyValue(val: number) {\n if (!this._input) return;\n this._input.value = String(val);\n this._updateButtonStates();\n this._updateTrack();\n this.emit('change', { detail: { value: val } });\n }\n\n // --- Track ---\n\n private _updateTrack() {\n if (!this._track) return;\n\n const { min, step } = this._getConstraints();\n const value = this._input?.valueAsNumber ?? min;\n const offset = (min - value) / step;\n\n this._track.style.translate = `0 calc(${offset} * var(--_button-size))`;\n\n if (this._skipTransition) {\n this._track.style.transition = 'none';\n void this._track.offsetHeight;\n this._track.style.transition = '';\n this._skipTransition = false;\n }\n }\n\n // --- Button states ---\n\n private _updateButtonStates() {\n if (!this._input || !this._decrementBtn || !this._incrementBtn) return;\n\n const { min, max } = this._getConstraints();\n const value = this._input.valueAsNumber;\n const disabled = this._input.disabled;\n\n this._decrementBtn.disabled = disabled || value <= min;\n this._incrementBtn.disabled = disabled || value >= max;\n }\n\n // --- Event handlers ---\n\n private _onDecrement = () => this.decrement();\n private _onIncrement = () => this.increment();\n\n private _onInputChange = () => {\n if (!this._input) return;\n\n const { min, max } = this._getConstraints();\n const clamped = Math.min(Math.max(this._input.valueAsNumber, min), max);\n this._input.value = String(clamped);\n\n this._skipTransition = true;\n this._updateButtonStates();\n this._updateTrack();\n this.emit('change', { detail: { value: clamped } });\n };\n}\n","import { define } from '../../define.js';\nimport { InputStepper } from './input-stepper.js';\nexport * from './input-stepper.js';\ndefine('input-stepper', InputStepper);\n",":host {\n --background: var(--l-color-bg-surface, Canvas);\n --color: inherit;\n --border-radius: 6px;\n --max-width: 320px;\n --shadow: 0 4px 6px -1px rgb(0 0 0 / 8%), 0 2px 4px -2px rgb(0 0 0 / 6%);\n --arrow-size: 8px;\n --show-duration: 150ms;\n --hide-duration: 150ms;\n\n --_border-color: var(--l-color-border-overlay, light-dark(#e5e7eb, #374151));\n\n display: contents;\n}\n\n[popover] {\n inset: unset;\n overflow: visible;\n isolation: isolate;\n box-sizing: border-box;\n width: max-content;\n max-width: var(--max-width);\n border: 1px solid var(--_border-color);\n border-radius: var(--border-radius);\n background: var(--background);\n color: var(--color);\n font-size: 0.875rem;\n line-height: 1.5;\n box-shadow: var(--shadow);\n}\n\n:host([full-width]) [popover] {\n width: 100vw;\n max-width: none;\n}\n\ni {\n position: absolute;\n display: block;\n width: var(--arrow-size);\n height: var(--arrow-size);\n background: var(--background);\n transform: rotate(45deg);\n z-index: -1;\n}\n\n:host([data-placement^='top']) i {\n border-right: 1px solid var(--_border-color);\n border-bottom: 1px solid var(--_border-color);\n}\n\n:host([data-placement^='bottom']) i {\n border-top: 1px solid var(--_border-color);\n border-left: 1px solid var(--_border-color);\n}\n\n:host([data-placement^='left']) i {\n border-right: 1px solid var(--_border-color);\n border-top: 1px solid var(--_border-color);\n}\n\n:host([data-placement^='right']) i {\n border-left: 1px solid var(--_border-color);\n border-bottom: 1px solid var(--_border-color);\n}\n","import { html, nothing, unsafeCSS, type PropertyValues } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { property } from 'lit/decorators.js';\nimport type { Placement } from '@floating-ui/dom';\nimport { PopoverController } from '../../shared/controllers/popover.js';\nimport { uniqueId } from '../../registry.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './popover.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * @summary A popover that displays interactive content anchored to a trigger.\n * @customElement l-popover\n *\n * @slot - Popover content.\n *\n * @csspart body - The popover container.\n * @csspart arrow - The directional arrow element.\n *\n * @cssproperty --background - Background color. Default: `Canvas`.\n * @cssproperty --color - Text color. Default: inherited.\n * @cssproperty --border-radius - Border radius. Default `8px`.\n * @cssproperty --max-width - Maximum width. Default `320px`.\n * @cssproperty --shadow - Box shadow.\n * @cssproperty --arrow-size - Arrow size. Default `8px`.\n * @cssproperty --show-duration - Show animation duration. Default `150ms`.\n * @cssproperty --hide-duration - Hide animation duration. Default `150ms`.\n */\nexport class Popover extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n private _popoverId = uniqueId('popover');\n\n private _floating = new PopoverController(this, {\n getTriggerElement: () => this._trigger,\n getFloatingElement: () => this._popoverEl,\n getArrowElement: () => this._arrowEl,\n onPlacementChange: (p) => {\n this.dataset.placement = p;\n },\n });\n\n /** The HTML id of the element triggering the popover. */\n @property()\n accessor for = '';\n\n /** The preferred placement of the popover. */\n @property()\n accessor placement: Placement = 'bottom';\n\n /** The distance in pixels from the target element. */\n @property({ type: Number })\n accessor distance = 8;\n\n /** Whether or not the popover is visible. */\n @property({ type: Boolean, reflect: true })\n accessor open = false;\n\n /** Hide the directional arrow. */\n @property({ type: Boolean, reflect: true, attribute: 'without-arrow' })\n accessor withoutArrow = false;\n\n /** Stretch the popover to the viewport width. Useful for mega menus. */\n @property({ type: Boolean, reflect: true, attribute: 'full-width' })\n accessor fullWidth = false;\n\n /** Space-separated list of trigger modes: `click`, `hover`, `focus`, `manual`. */\n @property()\n accessor trigger = 'click';\n\n private _hasTrigger(type: string) {\n return this.trigger.split(' ').includes(type);\n }\n\n private get _trigger(): HTMLElement | null {\n return this.for ? (this.getRootNode() as Document | ShadowRoot).getElementById(this.for) : null;\n }\n\n private get _popoverEl(): HTMLElement {\n return this.shadowRoot!.querySelector('[popover]')!;\n }\n\n private get _arrowEl(): HTMLElement | null {\n return this.withoutArrow ? null : this.shadowRoot!.querySelector('i');\n }\n\n private _getDuration(prop: '--show-duration' | '--hide-duration'): number {\n const parsed = parseFloat(getComputedStyle(this).getPropertyValue(prop));\n return Number.isNaN(parsed) ? 150 : parsed;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n requestAnimationFrame(() => this._addTriggerListeners());\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._removeTriggerListeners();\n }\n\n override updated(changed: PropertyValues<this>) {\n if (changed.has('open')) {\n void this._handleOpenChange();\n }\n if (changed.has('for')) {\n this._removeTriggerListeners(changed.get('for') as string);\n this._addTriggerListeners();\n }\n }\n\n show() {\n if (!this.open) this.open = true;\n }\n\n hide() {\n if (this.open) this.open = false;\n }\n\n toggle() {\n this.open = !this.open;\n }\n\n private async _handleOpenChange() {\n const popover = this._popoverEl;\n if (!popover) return;\n\n const posOpts = {\n placement: this.placement,\n distance: this.distance,\n fullWidth: this.fullWidth,\n };\n\n if (this.open) {\n popover.showPopover();\n await this._floating.updatePosition(posOpts);\n if (!this.open) return;\n await this._floating.animateShow(popover, this._getDuration('--show-duration'));\n this._floating.startPositioning(posOpts);\n this._trigger?.setAttribute('aria-expanded', 'true');\n this._trigger?.setAttribute('aria-controls', this._popoverId);\n } else {\n this._floating.stopPositioning();\n this._floating.cleanupSafePolygon();\n this._trigger?.setAttribute('aria-expanded', 'false');\n this._trigger?.removeAttribute('aria-controls');\n await this._floating.animateHide(popover, this._getDuration('--hide-duration'));\n if (popover.matches(':popover-open')) popover.hidePopover();\n }\n }\n\n // --- Trigger event handlers ---\n\n private _onPointerEnter = () => {\n if (!this._hasTrigger('hover')) return;\n this._floating.cleanupSafePolygon();\n this.show();\n };\n\n private _onPointerLeave = (e: PointerEvent) => {\n if (!this._hasTrigger('hover') || !this.open) return;\n this._floating.handlePointerLeave(e, () => this.hide());\n };\n\n private _onFocusIn = () => {\n if (this._hasTrigger('focus')) this.show();\n };\n private _onFocusOut = () => {\n if (this._hasTrigger('focus')) this.hide();\n };\n private _onClick = () => {\n if (this._hasTrigger('click')) this.toggle();\n };\n\n private _onKeyDown = (e: KeyboardEvent) => {\n if (this.open && e.key === 'Escape') {\n e.stopPropagation();\n this.hide();\n }\n };\n\n /** Sync `open` when popover=\"auto\" light-dismiss fires. */\n private _onToggle = (e: Event) => {\n const toggleEvent = e as ToggleEvent;\n if (toggleEvent.newState === 'closed' && this.open) {\n this.open = false;\n }\n };\n\n private _addTriggerListeners() {\n this._floating.addTriggerListeners({\n onPointerEnter: this._onPointerEnter,\n onPointerLeave: this._onPointerLeave,\n onFocusIn: this._onFocusIn,\n onFocusOut: this._onFocusOut,\n onClick: this._onClick,\n onKeyDown: this._onKeyDown,\n });\n }\n\n private _removeTriggerListeners(forId?: string) {\n const trigger = forId\n ? (this.getRootNode() as Document | ShadowRoot).getElementById(forId)\n : undefined;\n this._floating.removeTriggerListeners(trigger);\n }\n\n override render() {\n return html`\n <div\n id=${this._popoverId}\n popover=\"auto\"\n part=\"body\"\n @toggle=${this._onToggle}\n >\n ${this.withoutArrow\n ? nothing\n : html`\n <i\n part=\"arrow\"\n role=\"presentation\"\n ></i>\n `}\n <slot></slot>\n </div>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Popover } from './popover.js';\nexport * from './popover.js';\ndefine('popover', Popover);\n","import { property } from 'lit/decorators.js';\nimport { LuxenElement } from './luxen-element.js';\n\n/**\n * Base class for form-associated Luxen custom elements.\n * Implements the Form Associated Custom Elements API via ElementInternals.\n *\n * Subclasses own their typed `value` property and call `_syncFormValue()`\n * whenever it changes.\n */\nexport class LuxenFormAssociatedElement extends LuxenElement {\n static formAssociated = true;\n\n /** @internal */\n readonly _internals: ElementInternals;\n\n @property({ reflect: true })\n name = '';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ type: Boolean, reflect: true })\n required = false;\n\n /** The serialised value the element resets to on form reset. */\n protected _defaultFormValue = '';\n\n /** Whether the user has interacted with this control. */\n hasInteracted = false;\n\n constructor() {\n super();\n this._internals = this.attachInternals();\n }\n\n /** The form this control is associated with. */\n get form(): HTMLFormElement | null {\n return this._internals.form;\n }\n\n /** `<label>` elements associated with this control via `for` attribute. */\n get formLabels(): NodeList {\n return this._internals.labels;\n }\n\n /**\n * Override to return the inner element where validation popups anchor.\n * Passed as the 3rd arg to `ElementInternals.setValidity()`.\n */\n get validationTarget(): HTMLElement | undefined {\n return undefined;\n }\n\n // --- Form value ---\n\n /** Update the form submission value. */\n protected _syncFormValue(value: string): void {\n this._internals.setFormValue(value);\n }\n\n // --- Validity ---\n\n checkValidity(): boolean {\n return this._internals.checkValidity();\n }\n\n reportValidity(): boolean {\n this.hasInteracted = true;\n this._updateCustomStates();\n return this._internals.reportValidity();\n }\n\n /** Set a custom validity message. Pass `''` to clear. */\n setCustomValidity(message: string): void {\n if (message) {\n this._internals.setValidity({ customError: true }, message, this.validationTarget);\n } else {\n this._internals.setValidity({});\n }\n this._updateCustomStates();\n }\n\n /** Directly set validity flags. With no args, clears all flags. */\n protected setValidity(flags: ValidityStateFlags = {}, message = '', anchor?: HTMLElement): void {\n this._internals.setValidity(flags, message, anchor ?? this.validationTarget);\n this._updateCustomStates();\n }\n\n get validity(): ValidityState {\n return this._internals.validity;\n }\n\n get validationMessage(): string {\n return this._internals.validationMessage;\n }\n\n get willValidate(): boolean {\n return this._internals.willValidate;\n }\n\n /** Update `:state()` custom states based on current validity and interaction. */\n private _updateCustomStates(): void {\n const states = this._internals.states;\n const isValid = this._internals.validity.valid;\n\n this._toggleState(states, 'required', this.required);\n this._toggleState(states, 'optional', !this.required);\n this._toggleState(states, 'valid', isValid);\n this._toggleState(states, 'invalid', !isValid);\n this._toggleState(states, 'user-valid', isValid && this.hasInteracted);\n this._toggleState(states, 'user-invalid', !isValid && this.hasInteracted);\n }\n\n private _toggleState(states: CustomStateSet, name: string, force: boolean): void {\n if (force) {\n states.add(name);\n } else {\n states.delete(name);\n }\n }\n\n // --- Form lifecycle callbacks ---\n\n formAssociatedCallback(_form: HTMLFormElement | null): void {}\n\n formDisabledCallback(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n formResetCallback(): void {\n this.hasInteracted = false;\n this._syncFormValue(this._defaultFormValue);\n this._updateCustomStates();\n }\n\n formStateRestoreCallback(state: string, _mode: 'restore' | 'autocomplete'): void {\n this._syncFormValue(state);\n }\n}\n",":host {\n --icon-size: 20px;\n --active-color: gold;\n --inactive-color: #ddd;\n --spacing: 0px;\n --_icon: var(\n --icon,\n url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='2 2 20 19.02'><path d='M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z'/></svg>\")\n );\n\n display: inline-flex;\n align-items: center;\n}\n\n/* — Read-only mode — */\n\n.rating {\n height: var(--icon-size);\n background: linear-gradient(\n to right,\n var(--active-color) var(--_fill, 0%),\n var(--inactive-color) var(--_fill, 0%)\n );\n mask-size: var(--icon-size) var(--icon-size);\n mask-repeat: no-repeat;\n}\n\n/* — Edit mode — */\n\n.rating-edit {\n display: inline-flex;\n gap: var(--spacing);\n}\n\n.icon-wrapper {\n cursor: pointer;\n}\n\n.icon-wrapper input {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n\n.icon {\n display: block;\n width: var(--icon-size);\n height: var(--icon-size);\n mask-image: var(--_icon);\n mask-size: contain;\n mask-repeat: no-repeat;\n background: var(--inactive-color);\n transition: scale 0.2s ease;\n pointer-events: none;\n}\n\n.icon.active {\n background: var(--active-color);\n}\n\n.icon-wrapper:hover .icon {\n scale: 1.2;\n}\n\n.icon-wrapper:has(input:focus-visible) .icon {\n outline: 2px solid var(--active-color);\n outline-offset: 2px;\n border-radius: 2px;\n}\n\n:host([edit-mode]) .wrapper:focus-within {\n outline: 2px solid var(--active-color);\n outline-offset: 2px;\n border-radius: 2px;\n}\n\n/* — Disabled — */\n\n:host([disabled]) {\n opacity: 0.5;\n pointer-events: none;\n}\n\n/* — Label — */\n\n.wrapper {\n display: flex;\n align-items: center;\n white-space: nowrap;\n}\n\n.rating-label {\n margin-inline-start: 8px;\n flex: 1;\n font-size: 1rem;\n line-height: 1;\n}\n","import { html, nothing, unsafeCSS } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { LuxenFormAssociatedElement } from '../../shared/luxen-form-associated-element.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './rating.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * A star rating component using CSS mask-image.\n *\n * @summary Displays a star rating, optionally interactive.\n *\n * @csspart label - The label element shown in edit mode.\n *\n * @cssproperty --icon-size - The size of each icon. Defaults to `20px`.\n * @cssproperty --active-color - The fill color for rated icons. Defaults to `gold`.\n * @cssproperty --inactive-color - The fill color for empty icons. Defaults to `#ddd`.\n * @cssproperty --spacing - The spacing between icons. Defaults to `0px`.\n * @cssproperty --icon - Custom SVG shape as a `url()`. Defaults to a 5-pointed star.\n *\n * @event {{ name: string, value: string, checked: boolean, sourceEvent: Event }} change - Emitted when the rating value changes in edit mode.\n */\nexport class Rating extends LuxenFormAssociatedElement {\n static override styles = [hostStyles, styles];\n\n private currentLabel = '';\n private previewedValue = 0;\n\n @property({ type: Boolean, reflect: true, attribute: 'edit-mode' })\n accessor editMode = false;\n\n @property({\n type: Array,\n reflect: true,\n converter: {\n fromAttribute: (value: string) => value.split('|'),\n toAttribute: (value: string[]) => (value.length ? value.join('|') : null),\n },\n })\n accessor labels: string[] = [];\n\n @property({ type: Number, reflect: true })\n accessor value = 0;\n\n @property({ type: Number, reflect: true })\n accessor length = 5;\n\n /** Optional callback returning a CSS `url()` string for a given position (1-based). */\n getIcon?: (value: number) => string;\n\n override connectedCallback() {\n super.connectedCallback();\n this._defaultFormValue = String(this.value);\n this._syncFormValue(this._defaultFormValue);\n }\n\n override formResetCallback() {\n this.value = Number(this._defaultFormValue);\n super.formResetCallback();\n }\n\n override formStateRestoreCallback(state: string, _mode: 'restore' | 'autocomplete') {\n this.value = Number(state);\n this._syncFormValue(state);\n }\n\n override firstUpdated() {\n this.setLabelForValue(this.value);\n }\n\n private setLabelForValue(value: number | string) {\n const intValue = typeof value === 'string' ? parseInt(value, 10) : value;\n this.currentLabel = intValue ? (this.labels?.[intValue - 1] ?? '') : '';\n this.requestUpdate();\n }\n\n private getRatingStyle() {\n const max = this.length;\n const fillPct = max > 0 ? (this.value / max) * 100 : 0;\n const step = 'calc(var(--icon-size) + var(--spacing))';\n\n const icons = Array.from({ length: max }, (_, i) => this.getIcon?.(i + 1) ?? 'var(--_icon)');\n const positions = Array.from({ length: max }, (_, i) =>\n i === 0 ? '0 0' : `calc(${i} * ${step}) 0`,\n );\n\n return [\n `width: calc(${max} * var(--icon-size) + ${max - 1} * var(--spacing))`,\n `--_fill: ${fillPct}%`,\n `mask-image: ${icons.join(', ')}`,\n `mask-position: ${positions.join(', ')}`,\n ].join('; ');\n }\n\n override render() {\n if (!this.editMode) {\n return html`<div\n class=\"rating\"\n style=${this.getRatingStyle()}\n ></div>`;\n }\n\n const activeCount = this.previewedValue || this.value;\n\n return html`\n <div\n class=\"wrapper\"\n @focusout=${this.clearPreview}\n >\n <div class=\"rating-edit\">\n ${Array.from({ length: this.length }, (_, i) => {\n const v = i + 1;\n const icon = this.getIcon?.(v);\n return html`\n <label\n class=\"icon-wrapper\"\n @pointerover=${() => this.previewValue(v)}\n @pointerout=${this.clearPreview}\n >\n <input\n type=\"radio\"\n name=${this.name ?? nothing}\n value=\"${v}\"\n aria-label=\"${this.labels?.[i] ?? `${v} ${v === 1 ? 'star' : 'stars'}`}\"\n ?checked=\"${this.value === v}\"\n ?disabled=\"${this.disabled}\"\n @click=${this.onClick}\n @focusin=${() => this.previewValue(v)}\n />\n <span\n class=\"icon ${v <= activeCount ? 'active' : ''}\"\n style=${icon ? `mask-image: ${icon}` : nothing}\n ></span>\n </label>\n `;\n })}\n </div>\n ${this.labels?.length\n ? html`<div\n class=\"rating-label\"\n part=\"label\"\n >\n ${this.currentLabel}\n </div>`\n : nothing}\n </div>\n `;\n }\n\n private previewValue = (value: number) => {\n this.previewedValue = value;\n this.setLabelForValue(value);\n };\n\n private clearPreview = (event?: FocusEvent) => {\n if (event) {\n const related = event.relatedTarget as Node | null;\n if (related && this.shadowRoot?.contains(related)) return;\n }\n this.previewedValue = 0;\n this.setLabelForValue(this.value);\n };\n\n private onClick = (event: Event) => {\n const target = event.currentTarget as HTMLInputElement;\n const clickedValue = Number(target.value);\n this.value = clickedValue === this.value ? 0 : clickedValue;\n this.hasInteracted = true;\n this._syncFormValue(String(this.value));\n\n this.emit('change', {\n detail: {\n name: this.name,\n value: String(this.value),\n checked: this.value > 0,\n sourceEvent: event,\n },\n });\n };\n}\n","import { define } from '../../define.js';\nimport { Rating } from './rating.js';\nexport * from './rating.js';\ndefine('rating', Rating);\n","import { LuxenElement } from '../../shared/luxen-element.js';\n\n/**\n * @summary A skeleton loading placeholder.\n * @customElement l-skeleton\n *\n * @cssproperty --width - Width of the skeleton\n * @cssproperty --height - Height of the skeleton\n */\nexport class Skeleton extends LuxenElement {\n override createRenderRoot() {\n return this;\n }\n}\n","import { define } from '../../define.js';\nimport { Skeleton } from './skeleton.js';\nexport * from './skeleton.js';\ndefine('skeleton', Skeleton);\n",":host {\n --size: 1em;\n --indicator-color: currentColor;\n --speed: 0.75s;\n\n flex: none;\n display: inline-flex;\n width: var(--size);\n height: var(--size);\n color: var(--indicator-color);\n}\n\nsvg {\n width: 100%;\n height: 100%;\n fill: currentColor;\n}\n\n.spinner {\n transform-origin: center;\n animation: spin var(--speed) linear infinite;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n","import { html, unsafeCSS } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './spinner.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * @summary A spinner component for indicating loading state.\n * @customElement l-spinner\n *\n * @csspart base - The SVG container element.\n *\n * @cssproperty --size - The size of the spinner (width and height). Defaults to `1em`.\n * @cssproperty --indicator-color - The color of the spinner.\n * @cssproperty --speed - The duration of one full spin cycle.\n */\nexport class Spinner extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n override render() {\n return html`\n <svg\n part=\"base\"\n role=\"progressbar\"\n aria-label=\"Loading\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z\"\n opacity=\".25\"\n />\n <path\n d=\"M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z\"\n class=\"spinner\"\n />\n </svg>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Spinner } from './spinner.js';\nexport * from './spinner.js';\ndefine('spinner', Spinner);\n",":host {\n --show-duration: 200ms;\n --hide-duration: 200ms;\n --offset: 0px;\n\n /* Override popover UA defaults. */\n position: fixed;\n inset: auto;\n inset-inline: 0;\n width: 100%;\n margin: 0;\n border: 0;\n padding: 0;\n background: transparent;\n display: block;\n opacity: 0;\n transition:\n opacity var(--hide-duration) ease,\n translate var(--hide-duration) ease,\n display var(--hide-duration) allow-discrete,\n overlay var(--hide-duration) allow-discrete;\n}\n\n:host([placement='bottom']) {\n bottom: var(--offset);\n translate: 0 100%;\n}\n\n:host([placement='top']) {\n top: var(--offset);\n translate: 0 -100%;\n}\n\n:host(:popover-open) {\n opacity: 1;\n translate: 0 0;\n transition-duration: var(--show-duration);\n}\n\n@starting-style {\n :host([placement='bottom']:popover-open) {\n opacity: 0;\n translate: 0 100%;\n }\n :host([placement='top']:popover-open) {\n opacity: 0;\n translate: 0 -100%;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host {\n --show-duration: 0ms;\n --hide-duration: 0ms;\n }\n}\n","import { html, unsafeCSS, type PropertyValues } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { property } from 'lit/decorators.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './sticky-bar.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * @summary A bar docked to the viewport edge, revealed in the top layer when a referenced element scrolls out of view.\n * @customElement l-sticky-bar\n *\n * Uses the native `popover=\"manual\"` attribute, so the bar paints in the\n * document's top layer. Pass `for=\"<id>\"` to track an element; the bar\n * reveals when that element leaves the viewport (e.g. an Add-to-cart\n * button on a mobile product page). Omit `for` for a bar that stays\n * visible permanently (cookie banners, promo notices, environment\n * indicators).\n *\n * @slot - Bar content. Owns its own background, padding, and typography.\n *\n * @cssproperty --show-duration - Reveal animation duration. Default `200ms`.\n * @cssproperty --hide-duration - Dismiss animation duration. Default `200ms`.\n * @cssproperty --offset - Distance from the active edge. Default `0px`. Use to clear a sticky header when `placement=\"top\"`.\n *\n * @event show - Fired before the bar reveals. Cancelable.\n * @event after-show - Fired after the reveal animation completes.\n * @event hide - Fired before the bar hides. Cancelable.\n * @event after-hide - Fired after the hide animation completes.\n */\nexport class StickyBar extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n /** HTML id of the element to track. When that element leaves the viewport, the bar reveals. Omit for a permanently visible bar. */\n @property()\n accessor for = '';\n\n /** HTML id of the scrolling ancestor used as the IntersectionObserver root. Omit to use the viewport. Useful for nested scroll containers (CMS preview panes, modals). */\n @property()\n accessor root = '';\n\n /** Edge to dock against. */\n @property({ reflect: true })\n accessor placement: 'bottom' | 'top' = 'bottom';\n\n private _io?: IntersectionObserver;\n private _observed?: Element;\n\n override connectedCallback() {\n super.connectedCallback();\n this.popover = 'manual';\n this.addEventListener('toggle', this._onToggle);\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('toggle', this._onToggle);\n this._teardownObserver();\n }\n\n override updated(changed: PropertyValues<this>) {\n if (changed.has('for') || changed.has('root')) {\n this._teardownObserver();\n if (this.for) {\n this._setupObserver();\n } else {\n // No target → permanent bar. Reveal once on mount.\n this._show();\n }\n }\n }\n\n private get _target(): HTMLElement | null {\n return this.for ? (this.getRootNode() as Document | ShadowRoot).getElementById(this.for) : null;\n }\n\n private _show() {\n if (this.matches(':popover-open')) return;\n if (this.emit('show', { cancelable: true })) this.showPopover();\n }\n\n private _hide() {\n if (!this.matches(':popover-open')) return;\n if (this.emit('hide', { cancelable: true })) this.hidePopover();\n }\n\n private _onToggle = (e: Event) => {\n const ev = e as ToggleEvent;\n this.emit(ev.newState === 'open' ? 'after-show' : 'after-hide');\n };\n\n private _setupObserver() {\n const target = this._target;\n if (!target) return;\n this._observed = target;\n const root = this.root\n ? (this.getRootNode() as Document | ShadowRoot).getElementById(this.root)\n : null;\n // Use the element's own realm so an iframe-hosted bar observes the iframe's viewport.\n const view = this.ownerDocument.defaultView ?? window;\n this._io = new view.IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) this._hide();\n else this._show();\n }\n },\n { root, threshold: 0 },\n );\n this._io.observe(target);\n }\n\n private _teardownObserver() {\n if (this._io && this._observed) {\n this._io.unobserve(this._observed);\n }\n this._io?.disconnect();\n this._io = undefined;\n this._observed = undefined;\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n","import { define } from '../../define.js';\nimport { StickyBar } from './sticky-bar.js';\nexport * from './sticky-bar.js';\ndefine('sticky-bar', StickyBar);\n","import { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { uniqueId } from '../../registry.js';\n\nexport type TabsVariant = 'enclosed' | 'line';\nexport type TabsOrientation = 'horizontal' | 'vertical';\n\n/**\n * @summary A tabs component that progressively enhances light DOM markup\n * with ARIA roles, keyboard navigation, and animated indicators.\n *\n * @example\n * ```html\n * <l-tabs variant=\"enclosed\">\n * <div>\n * <button>Tab 1</button>\n * <button>Tab 2</button>\n * </div>\n * <div>Content 1</div>\n * <div>Content 2</div>\n * </l-tabs>\n * ```\n *\n * @event change - Fired when the active tab changes. Detail: `{ index: number, name: string | null }`.\n *\n * @customElement l-tabs\n */\nexport class Tabs extends LuxenElement {\n override createRenderRoot() {\n return this;\n }\n\n private _instanceId = uniqueId('tabs');\n private _tablistEl: HTMLElement | null = null;\n private _tabs: HTMLButtonElement[] = [];\n private _panels: HTMLElement[] = [];\n\n /** Visual variant. */\n @property({ reflect: true })\n variant: TabsVariant = 'line';\n\n /** Index of the active tab (0-based). */\n @property({ reflect: true })\n value = '0';\n\n /** Stretch tabs to fill container width. */\n @property({ type: Boolean, reflect: true, attribute: 'full-width' })\n fullWidth = false;\n\n /** Tab orientation. */\n @property({ reflect: true })\n orientation: TabsOrientation = 'horizontal';\n\n // --- Lifecycle ---\n\n override connectedCallback() {\n super.connectedCallback();\n // Defer setup to let light DOM children parse\n requestAnimationFrame(() => this._setup());\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._teardown();\n }\n\n override updated(changed: Map<string, unknown>) {\n if (changed.has('value') && this._tabs.length) {\n this._selectTab(Number(this.value), false);\n }\n if (changed.has('orientation') && this._tablistEl) {\n this._tablistEl.setAttribute('aria-orientation', this.orientation);\n }\n }\n\n // --- Setup / Teardown ---\n\n private _setup() {\n const children = Array.from(this.children) as HTMLElement[];\n if (children.length < 2) return;\n\n // First child is the tablist container\n this._tablistEl = children[0];\n this._tablistEl.setAttribute('role', 'tablist');\n this._tablistEl.setAttribute('aria-orientation', this.orientation);\n\n // Buttons inside tablist become tabs\n this._tabs = Array.from(this._tablistEl.querySelectorAll('button'));\n\n // Remaining children become panels\n this._panels = children.slice(1);\n\n const activeIndex = Number(this.value) || 0;\n\n // Enhance tabs\n for (let i = 0; i < this._tabs.length; i++) {\n const tab = this._tabs[i];\n const panel = this._panels[i];\n const name = tab.getAttribute('name') ?? String(i);\n const tabId = `${this._instanceId}-tab-${name}`;\n const panelId = `${this._instanceId}-panel-${name}`;\n\n tab.setAttribute('role', 'tab');\n tab.setAttribute('id', tabId);\n tab.setAttribute('aria-selected', String(i === activeIndex));\n tab.setAttribute('tabindex', i === activeIndex ? '0' : '-1');\n\n if (panel) {\n tab.setAttribute('aria-controls', panelId);\n panel.setAttribute('role', 'tabpanel');\n panel.setAttribute('id', panelId);\n panel.setAttribute('aria-labelledby', tabId);\n panel.setAttribute('tabindex', '0');\n if (i !== activeIndex) {\n panel.hidden = true;\n } else {\n panel.hidden = false;\n }\n }\n }\n\n // Attach listeners\n this._tablistEl.addEventListener('click', this._onClick);\n this._tablistEl.addEventListener('keydown', this._onKeyDown);\n\n // Initial indicator position\n requestAnimationFrame(() => this._updateIndicator());\n }\n\n private _teardown() {\n this._tablistEl?.removeEventListener('click', this._onClick);\n this._tablistEl?.removeEventListener('keydown', this._onKeyDown);\n }\n\n // --- Tab selection ---\n\n private _selectTab(index: number, emitEvent = true) {\n if (index < 0 || index >= this._tabs.length) return;\n\n for (let i = 0; i < this._tabs.length; i++) {\n const tab = this._tabs[i];\n const panel = this._panels[i];\n const isActive = i === index;\n\n tab.setAttribute('aria-selected', String(isActive));\n tab.setAttribute('tabindex', isActive ? '0' : '-1');\n\n if (panel) {\n panel.hidden = !isActive;\n }\n }\n\n this.value = String(index);\n this._updateIndicator();\n\n if (emitEvent) {\n const name = this._tabs[index]?.getAttribute('name') ?? null;\n this.emit('change', { detail: { index, name } });\n }\n }\n\n // --- Indicator ---\n\n private _updateIndicator() {\n if (!this._tablistEl) return;\n const activeTab = this._tabs[Number(this.value)];\n if (!activeTab) return;\n\n const isVertical = this.orientation === 'vertical';\n\n if (isVertical) {\n this._tablistEl.style.setProperty('--_indicator-top', `${activeTab.offsetTop}px`);\n this._tablistEl.style.setProperty('--_indicator-height', `${activeTab.offsetHeight}px`);\n } else {\n this._tablistEl.style.setProperty('--_indicator-left', `${activeTab.offsetLeft}px`);\n this._tablistEl.style.setProperty('--_indicator-width', `${activeTab.offsetWidth}px`);\n }\n }\n\n // --- Event handlers ---\n\n private _onClick = (e: Event) => {\n const tab = (e.target as HTMLElement).closest<HTMLButtonElement>('[role=\"tab\"]');\n if (!tab) return;\n const index = this._tabs.indexOf(tab);\n if (index >= 0) {\n this._selectTab(index);\n tab.focus();\n }\n };\n\n private _onKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement;\n if (target.getAttribute('role') !== 'tab') return;\n\n const isHorizontal = this.orientation === 'horizontal';\n const prevKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';\n const nextKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';\n\n let index = this._tabs.indexOf(target as HTMLButtonElement);\n\n switch (e.key) {\n case nextKey:\n e.preventDefault();\n index = (index + 1) % this._tabs.length;\n this._selectTab(index);\n this._tabs[index].focus();\n break;\n case prevKey:\n e.preventDefault();\n index = (index - 1 + this._tabs.length) % this._tabs.length;\n this._selectTab(index);\n this._tabs[index].focus();\n break;\n case 'Home':\n e.preventDefault();\n this._selectTab(0);\n this._tabs[0].focus();\n break;\n case 'End':\n e.preventDefault();\n this._selectTab(this._tabs.length - 1);\n this._tabs[this._tabs.length - 1].focus();\n break;\n }\n };\n}\n","import { define } from '../../define.js';\nimport { Tabs } from './tabs.js';\nexport * from './tabs.js';\ndefine('tabs', Tabs);\n","/* eslint-disable no-shadow -- the local `toast` HTMLElement intentionally\n shadows the module-level `toast()` export; renaming would touch ~50 lines\n without behavioral benefit. */\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { property } from 'lit/decorators.js';\nimport { tagName, cls, uniqueId } from '../../registry.js';\n\ndeclare global {\n interface Element {\n /** @see https://developer.mozilla.org/en-US/docs/Web/API/Element/setHTML */\n setHTML(input: string, options?: Record<string, unknown>): void;\n }\n}\n\n/** Minimal custom element for toast items — no render, no shadow DOM. */\nexport class ToastItem extends HTMLElement {}\n\nexport type ToastVariant = 'info' | 'success' | 'warning' | 'danger';\n\nexport type ToastPlacement =\n | 'top-start'\n | 'top-center'\n | 'top-end'\n | 'bottom-start'\n | 'bottom-center'\n | 'bottom-end';\n\ninterface ToastOptionsBase {\n /** Optional heading text displayed above the message. */\n heading?: string;\n /** Override the element's variant for this toast. */\n variant?: ToastVariant;\n /** Override auto-dismiss duration (ms) for this toast. 0 = no auto-dismiss. */\n duration?: number;\n /** Iconify icon name (e.g. 'lucide:check'). Replaces the accent bar. */\n icon?: string;\n /** Show a countdown progress bar at the bottom. Default `false`. */\n timer?: boolean;\n}\n\nexport type ToastOptions =\n | (ToastOptionsBase & { /** The message text to display. */ text: string; html?: never })\n | (ToastOptionsBase & {\n text?: never;\n /** HTML content (sanitized via the Sanitizer API). */ html: string;\n });\n\ninterface TimerState {\n remaining: number;\n startTime: number;\n timeoutId: number;\n paused: boolean;\n}\n\n/**\n * @summary A toast notification container that generates toast items internally.\n * @customElement l-toast\n *\n * @event show - Emitted when a toast begins to show. Cancelable.\n * @event after-show - Emitted after the show animation completes.\n * @event hide - Emitted when a toast begins to hide. Cancelable.\n * @event after-hide - Emitted after the hide animation completes and toast is removed.\n *\n * @cssproperty --gap - Gap between stacked toast items.\n * @cssproperty --width - Width of the toast stack.\n * @cssproperty --show-duration - Duration of the show animation.\n * @cssproperty --hide-duration - Duration of the hide animation.\n */\nexport class Toast extends LuxenElement {\n /** Use light DOM — no Shadow DOM. */\n override createRenderRoot() {\n return this;\n }\n\n /** Position of the toast stack on the screen. */\n @property({ reflect: true }) placement: ToastPlacement = 'top-end';\n\n /** Default auto-dismiss delay in milliseconds. 0 disables auto-dismiss. */\n @property({ type: Number, reflect: true }) duration = 5000;\n\n /** Default variant for toast items: `info`, `success`, `warning`, `danger`. */\n @property({ reflect: true }) variant?: ToastVariant;\n\n private _timers = new WeakMap<HTMLElement, TimerState>();\n private _positionCache = new WeakMap<Element, DOMRect>();\n private _documentHidden = false;\n\n override connectedCallback() {\n super.connectedCallback();\n this.popover = 'manual';\n this.setAttribute('role', 'log');\n this.setAttribute('aria-live', 'polite');\n this.setAttribute('aria-relevant', 'additions');\n\n document.addEventListener('keydown', this._onKeyDown);\n document.addEventListener('visibilitychange', this._onVisibilityChange);\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener('keydown', this._onKeyDown);\n document.removeEventListener('visibilitychange', this._onVisibilityChange);\n }\n\n /** Create and show a toast notification. */\n toast(options: ToastOptions): HTMLElement {\n const { heading, variant = this.variant, duration = this.duration } = options;\n\n // Build toast DOM\n const uid = uniqueId('toast');\n const toast = document.createElement(tagName('toast-item'));\n if (variant) toast.setAttribute('variant', variant);\n toast.setAttribute('role', variant === 'danger' ? 'alert' : 'status');\n toast.setAttribute('aria-atomic', 'true');\n\n if (options.icon) {\n const icon = document.createElement('iconify-icon');\n icon.setAttribute('icon', options.icon);\n icon.setAttribute('width', '20');\n icon.setAttribute('height', '20');\n icon.setAttribute('aria-hidden', 'true');\n icon.className = cls('toast-icon');\n toast.appendChild(icon);\n } else {\n const accent = document.createElement('div');\n accent.className = cls('toast-accent');\n accent.setAttribute('aria-hidden', 'true');\n toast.appendChild(accent);\n }\n\n const content = document.createElement('div');\n content.className = cls('toast-content');\n\n const textWrap = document.createElement('div');\n\n if (heading) {\n const headingEl = document.createElement('div');\n headingEl.id = `${uid}-heading`;\n headingEl.className = `${cls('toast-heading')} font-medium`;\n headingEl.textContent = heading;\n textWrap.appendChild(headingEl);\n toast.setAttribute('aria-labelledby', `${uid}-heading`);\n }\n\n const messageEl = document.createElement('div');\n messageEl.id = `${uid}-message`;\n messageEl.className = cls('toast-message');\n if ('html' in options && options.html) {\n messageEl.setHTML(options.html);\n } else {\n messageEl.textContent = options.text ?? '';\n }\n textWrap.appendChild(messageEl);\n toast.setAttribute(heading ? 'aria-describedby' : 'aria-labelledby', `${uid}-message`);\n\n content.appendChild(textWrap);\n toast.appendChild(content);\n\n const closeBtn = document.createElement('button');\n closeBtn.type = 'button';\n closeBtn.className = cls('close');\n closeBtn.setAttribute('data-appearance', 'ring');\n closeBtn.setAttribute('aria-label', 'Close');\n closeBtn.addEventListener('click', () => this._hideToast(toast));\n toast.appendChild(closeBtn);\n\n // Timer bar (opt-in)\n if (options.timer && duration > 0 && isFinite(duration)) {\n const timerBar = document.createElement('div');\n timerBar.className = cls('toast-timer');\n timerBar.setAttribute('aria-hidden', 'true');\n timerBar.style.setProperty('--_timer-duration', `${duration}ms`);\n toast.appendChild(timerBar);\n }\n\n // FLIP: capture existing positions\n this._capturePositions();\n\n // Insert into container\n if (this.placement.includes('bottom')) {\n this.appendChild(toast);\n } else {\n this.prepend(toast);\n }\n\n // Show popover if not already open\n if (!this.matches(':popover-open')) {\n this.showPopover();\n }\n\n // Dispatch show\n if (!this.emit('show', { cancelable: true, detail: { toast } })) {\n toast.remove();\n return toast;\n }\n\n // Trigger show animation on next frame\n requestAnimationFrame(() => {\n toast.setAttribute('showing', '');\n this._animatePositions();\n\n const onShown = (e: TransitionEvent) => {\n if (e.target !== toast) return;\n toast.removeEventListener('transitionend', onShown);\n this.emit('after-show', { detail: { toast } });\n };\n toast.addEventListener('transitionend', onShown);\n });\n\n // Auto-dismiss timer (0 or Infinity = persistent)\n if (duration > 0 && isFinite(duration)) {\n this._startTimer(toast, duration);\n }\n\n // Pause/resume timer on hover and focus\n toast.addEventListener('pointerenter', () => this._pauseTimer(toast));\n toast.addEventListener('pointerleave', () => this._resumeTimer(toast));\n toast.addEventListener('focusin', () => this._pauseTimer(toast));\n toast.addEventListener('focusout', () => this._resumeTimer(toast));\n\n // ── Swipe-to-dismiss ──────────────────────────────────────────────────────\n\n let swipeStart: { x: number; y: number } | null = null;\n let swiping = false;\n\n toast.addEventListener('pointerdown', (e: PointerEvent) => {\n if (e.button !== 0) return;\n if ((e.target as Element).closest('button, a, [role=\"button\"]')) return;\n swipeStart = { x: e.clientX, y: e.clientY };\n swiping = false;\n toast.setPointerCapture(e.pointerId);\n toast.style.transition = 'none';\n });\n\n // Only allow swiping away from the screen edge, never inward\n const clampDelta = (dx: number) =>\n this.placement.endsWith('-start')\n ? Math.min(dx, 0)\n : this.placement.endsWith('-end')\n ? Math.max(dx, 0)\n : dx;\n\n toast.addEventListener('pointermove', (e: PointerEvent) => {\n if (!swipeStart) return;\n const deltaX = clampDelta(e.clientX - swipeStart.x);\n const deltaY = e.clientY - swipeStart.y;\n\n const buffer = e.pointerType === 'touch' ? 10 : 2;\n if (!swiping && Math.abs(deltaX) < buffer) return;\n\n // If vertical movement dominates, cancel swipe tracking\n if (!swiping && Math.abs(deltaY) > Math.abs(deltaX)) {\n swipeStart = null;\n return;\n }\n\n swiping = true;\n this._pauseTimer(toast);\n toast.style.transform = `translateX(${deltaX}px)`;\n toast.style.opacity = `${1 - Math.abs(deltaX) / 300}`;\n });\n\n toast.addEventListener('pointerup', (e: PointerEvent) => {\n if (!swipeStart) return;\n const deltaX = clampDelta(e.clientX - swipeStart.x);\n swipeStart = null;\n toast.style.transition = '';\n\n if (swiping && Math.abs(deltaX) > 50) {\n const dir = deltaX > 0 ? 1 : -1;\n toast.style.transform = `translateX(${dir * 120}%)`;\n toast.style.opacity = '0';\n toast.addEventListener('transitionend', () => this._hideToast(toast), { once: true });\n } else {\n toast.style.transform = '';\n toast.style.opacity = '';\n if (swiping) this._resumeTimer(toast);\n }\n swiping = false;\n });\n\n return toast;\n }\n\n // ── Timer management ──────────────────────────────────────────────────────────\n\n private _startTimer(toast: HTMLElement, duration: number) {\n const timeoutId = window.setTimeout(() => this._hideToast(toast), duration);\n this._timers.set(toast, {\n remaining: duration,\n startTime: performance.now(),\n timeoutId,\n paused: false,\n });\n }\n\n private _pauseTimer(toast: HTMLElement) {\n const timer = this._timers.get(toast);\n if (!timer || timer.paused) return;\n clearTimeout(timer.timeoutId);\n timer.remaining -= performance.now() - timer.startTime;\n timer.paused = true;\n\n // Use the Web Animations API to pause the countdown bar. CSS `animation-play-state`\n // cannot be used here because browsers defer style recalculations while the tab is\n // hidden, so the animation runs to completion before the style change takes effect.\n const timerBar = toast.querySelector(`.${cls('toast-timer')}`);\n if (timerBar) for (const anim of timerBar.getAnimations()) anim.pause();\n }\n\n private _resumeTimer(toast: HTMLElement) {\n const timer = this._timers.get(toast);\n if (!timer || !timer.paused || timer.remaining <= 0 || this._documentHidden) return;\n timer.startTime = performance.now();\n timer.timeoutId = window.setTimeout(() => this._hideToast(toast), timer.remaining);\n timer.paused = false;\n\n const timerBar = toast.querySelector(`.${cls('toast-timer')}`);\n if (timerBar) for (const anim of timerBar.getAnimations()) anim.play();\n }\n\n // ── Hide a toast ──────────────────────────────────────────────────────────────\n\n private _hideToast(toast: HTMLElement) {\n // Clear timer\n const timer = this._timers.get(toast);\n if (timer) {\n clearTimeout(timer.timeoutId);\n this._timers.delete(toast);\n }\n\n // Prevent double-hide\n if (!toast.hasAttribute('showing')) return;\n\n // Dispatch hide\n if (!this.emit('hide', { cancelable: true, detail: { toast } })) return;\n\n this._capturePositions();\n\n // Remove showing class to trigger exit transition\n toast.removeAttribute('showing');\n\n const remove = () => {\n toast.remove();\n this._animatePositions();\n\n this.emit('after-hide', { detail: { toast } });\n\n // Close popover if no toasts remain\n const remaining = this.querySelectorAll(`:scope > ${tagName('toast-item')}`);\n if (remaining.length === 0 && this.matches(':popover-open')) {\n this.hidePopover();\n }\n };\n\n // Handle zero-duration transitions (reduced motion)\n const duration = parseFloat(getComputedStyle(toast).transitionDuration);\n if (duration === 0) {\n remove();\n } else {\n const onEnd = (e: TransitionEvent) => {\n if (e.target !== toast) return;\n toast.removeEventListener('transitionend', onEnd);\n remove();\n };\n toast.addEventListener('transitionend', onEnd);\n }\n }\n\n // ── FLIP animation for reordering ─────────────────────────────────────────────\n\n private _capturePositions() {\n const items = this.querySelectorAll(`:scope > ${tagName('toast-item')}`);\n for (const child of items) {\n this._positionCache.set(child, child.getBoundingClientRect());\n }\n }\n\n private _animatePositions() {\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n\n const items = this.querySelectorAll(`:scope > ${tagName('toast-item')}`);\n for (const child of items) {\n const oldRect = this._positionCache.get(child);\n if (!oldRect) continue;\n\n const newRect = child.getBoundingClientRect();\n const deltaY = oldRect.top - newRect.top;\n\n if (Math.abs(deltaY) < 1) continue;\n\n (child as HTMLElement).animate(\n [{ transform: `translateY(${deltaY}px)` }, { transform: 'translateY(0)' }],\n { duration: 200, easing: 'cubic-bezier(0.2, 0, 0, 1)' },\n );\n }\n }\n\n // ── Document visibility ──────────────────────────────────────────────────────\n\n private _onVisibilityChange = () => {\n this._documentHidden = document.hidden;\n const items = this.querySelectorAll<HTMLElement>(`:scope > ${tagName('toast-item')}`);\n if (document.hidden) {\n for (const item of items) this._pauseTimer(item);\n } else {\n for (const item of items) this._resumeTimer(item);\n }\n };\n\n // ── Keyboard ──────────────────────────────────────────────────────────────────\n\n private _onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return;\n if (!this.matches(':popover-open')) return;\n\n const last = this.querySelector<HTMLElement>(`:scope > ${tagName('toast-item')}:last-of-type`);\n if (last) {\n e.preventDefault();\n this._hideToast(last);\n }\n };\n}\n\n// ── Standalone function ───────────────────────────────────────────────────────\n\nlet _defaultInstance: Toast | null = null;\n\nfunction _getDefault(): Toast {\n if (!_defaultInstance || !_defaultInstance.isConnected) {\n _defaultInstance =\n document.querySelector(tagName('toast')) ??\n (document.createElement(tagName('toast')) as Toast);\n if (!_defaultInstance.isConnected) {\n document.body.appendChild(_defaultInstance);\n }\n }\n return _defaultInstance;\n}\n\n/** Show a toast notification. Auto-creates `<l-toast>` if none exists in the DOM. */\nexport function toast(options: ToastOptions): HTMLElement {\n return _getDefault().toast(options);\n}\n","import { define } from '../../define.js';\nimport { Toast, ToastItem } from './toast.js';\nexport * from './toast.js';\ndefine('toast', Toast);\ndefine('toast-item', ToastItem);\n",":host {\n --background-color: var(--l-color-bg-fill-brand, light-dark(#1f2937, #f9fafb));\n --border-radius: 4px;\n --max-width: 180px;\n --arrow-size: 6px;\n --show-duration: 150ms;\n --hide-duration: 150ms;\n\n display: contents;\n}\n\n[popover] {\n inset: unset;\n overflow: visible;\n box-sizing: border-box;\n width: max-content;\n max-width: var(--max-width);\n padding: 4px 8px;\n border: 0;\n border-radius: var(--border-radius);\n background: var(--background-color);\n color: var(\n --text-color,\n oklch(from var(--background-color) calc(0.59 - 0.41 * sign(l - 0.5)) 0 0)\n );\n font-size: 0.8125rem;\n line-height: 1.4;\n filter: drop-shadow(0 1px 2px rgb(0 0 0 / 16%));\n pointer-events: none;\n}\n\n@supports (color: contrast-color(red vs black, white)) {\n [popover] {\n color: var(--text-color, contrast-color(var(--background-color) vs #111827, #fff to AA));\n }\n}\n\ni {\n position: absolute;\n display: block;\n width: var(--arrow-size);\n height: var(--arrow-size);\n background: var(--background-color);\n transform: rotate(45deg);\n}\n","import { html, nothing, unsafeCSS, type PropertyValues } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { property } from 'lit/decorators.js';\nimport type { Placement } from '@floating-ui/dom';\nimport { PopoverController } from '../../shared/controllers/popover.js';\nimport { uniqueId } from '../../registry.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './tooltip.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * @summary A tooltip that displays contextual text on hover or focus.\n * @customElement l-tooltip\n *\n * @slot - Tooltip content (text or rich HTML).\n *\n * @csspart body - The tooltip popover container.\n * @csspart arrow - The directional arrow element.\n *\n * @cssproperty --background-color - Background color. Default: dark in light mode, light in dark mode.\n * @cssproperty --text-color - Text color. If unset, auto-derived from `--background-color` luminance.\n * @cssproperty --border-radius - Border radius. Default `4px`.\n * @cssproperty --max-width - Maximum width. Default `180px`.\n * @cssproperty --arrow-size - Arrow size. Default `6px`.\n * @cssproperty --show-duration - Show animation duration. Default `150ms`.\n * @cssproperty --hide-duration - Hide animation duration. Default `150ms`.\n */\nexport class Tooltip extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n private _tooltipId = uniqueId('tooltip');\n\n private _floating = new PopoverController(this, {\n getTriggerElement: () => this._trigger,\n getFloatingElement: () => this._popover,\n getArrowElement: () => this._arrowEl,\n });\n\n /** The HTML id of the element triggering the tooltip. */\n @property()\n accessor for = '';\n\n /** The preferred placement of the tooltip. */\n @property()\n accessor placement: Placement = 'top';\n\n /** The distance in pixels from the target element. */\n @property({ type: Number })\n accessor distance = 8;\n\n /** Whether or not the tooltip is visible. */\n @property({ type: Boolean, reflect: true })\n accessor open = false;\n\n /** Hide the directional arrow. */\n @property({ type: Boolean, reflect: true, attribute: 'without-arrow' })\n accessor withoutArrow = false;\n\n /** Space-separated list of trigger modes: `hover`, `focus`, `click`, `manual`. */\n @property()\n accessor trigger = 'hover focus';\n\n private _hasTrigger(type: string) {\n return this.trigger.split(' ').includes(type);\n }\n\n private get _trigger(): HTMLElement | null {\n return this.for ? (this.getRootNode() as Document | ShadowRoot).getElementById(this.for) : null;\n }\n\n private get _popover(): HTMLElement {\n return this.shadowRoot!.querySelector('[popover]')!;\n }\n\n private get _arrowEl(): HTMLElement | null {\n return this.withoutArrow ? null : this.shadowRoot!.querySelector('i');\n }\n\n private _getDuration(prop: '--show-duration' | '--hide-duration'): number {\n const parsed = parseFloat(getComputedStyle(this).getPropertyValue(prop));\n return Number.isNaN(parsed) ? 150 : parsed;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n requestAnimationFrame(() => this._addTriggerListeners());\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._removeTriggerListeners();\n }\n\n override updated(changed: PropertyValues<this>) {\n if (changed.has('open')) {\n void this._handleOpenChange();\n }\n if (changed.has('for')) {\n this._removeTriggerListeners(changed.get('for') as string);\n this._addTriggerListeners();\n }\n }\n\n show() {\n if (!this.open) this.open = true;\n }\n\n hide() {\n if (this.open) this.open = false;\n }\n\n toggle() {\n this.open = !this.open;\n }\n\n private async _handleOpenChange() {\n const popover = this._popover;\n if (!popover) return;\n\n const posOpts = { placement: this.placement, distance: this.distance };\n\n if (this.open) {\n popover.showPopover();\n await this._floating.updatePosition(posOpts);\n if (!this.open) return;\n await this._floating.animateShow(popover, this._getDuration('--show-duration'));\n this._floating.startPositioning(posOpts);\n this._trigger?.setAttribute('aria-describedby', this._tooltipId);\n } else {\n this._floating.stopPositioning();\n this._floating.cleanupSafePolygon();\n this._trigger?.removeAttribute('aria-describedby');\n await this._floating.animateHide(popover, this._getDuration('--hide-duration'));\n if (popover.matches(':popover-open')) popover.hidePopover();\n }\n }\n\n // --- Trigger event handlers ---\n\n private _onPointerEnter = () => {\n if (!this._hasTrigger('hover')) return;\n this._floating.cleanupSafePolygon();\n this.show();\n };\n\n private _onPointerLeave = (e: PointerEvent) => {\n if (!this._hasTrigger('hover') || !this.open) return;\n this._floating.handlePointerLeave(e, () => this.hide());\n };\n\n private _onFocusIn = () => {\n if (this._hasTrigger('focus')) this.show();\n };\n private _onFocusOut = () => {\n if (this._hasTrigger('focus')) this.hide();\n };\n private _onClick = () => {\n if (this._hasTrigger('click')) this.toggle();\n };\n\n private _onKeyDown = (e: KeyboardEvent) => {\n if (this.open && e.key === 'Escape') {\n e.stopPropagation();\n this.hide();\n }\n };\n\n private _addTriggerListeners() {\n this._floating.addTriggerListeners({\n onPointerEnter: this._onPointerEnter,\n onPointerLeave: this._onPointerLeave,\n onFocusIn: this._onFocusIn,\n onFocusOut: this._onFocusOut,\n onClick: this._onClick,\n onKeyDown: this._onKeyDown,\n });\n }\n\n private _removeTriggerListeners(forId?: string) {\n const trigger = forId\n ? (this.getRootNode() as Document | ShadowRoot).getElementById(forId)\n : undefined;\n this._floating.removeTriggerListeners(trigger);\n }\n\n override render() {\n return html`\n <div\n id=${this._tooltipId}\n popover=\"manual\"\n role=\"tooltip\"\n part=\"body\"\n >\n ${this.withoutArrow\n ? nothing\n : html`\n <i\n part=\"arrow\"\n role=\"presentation\"\n ></i>\n `}\n <slot></slot>\n </div>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Tooltip } from './tooltip.js';\nexport * from './tooltip.js';\ndefine('tooltip', Tooltip);\n",":host {\n --indent-size: 1rem;\n --indent-guide-width: 1px;\n --indent-guide-style: solid;\n --indent-guide-color: var(--l-color-border-interactive, light-dark(#d1d5db, #3a4048));\n --row-height: 1.75rem;\n --row-padding-inline: 0.25rem;\n --chevron-size: 1.125rem;\n --item-gap: 0.375rem;\n\n display: block;\n color: var(--l-color-text-primary, CanvasText);\n font-family: inherit;\n line-height: 1.5;\n}\n\n.tree {\n display: block;\n outline: none;\n}\n\n.tree:focus-visible {\n outline: 2px solid var(--l-focus-ring, Highlight);\n outline-offset: 2px;\n border-radius: 0.375rem;\n}\n","import { html, unsafeCSS, type PropertyValues } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { tagName } from '../../registry.js';\nimport type { TreeItem } from '../tree-item/tree-item.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './tree.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\nexport type TreeSelection = 'single' | 'multiple' | 'leaf' | 'none';\n\n/**\n * A hierarchical tree view composed of `<l-tree-item>` children.\n *\n * @slot - One or more `l-tree-item` elements.\n *\n * @csspart base - The root tree container.\n *\n * @cssproperty --indent-size - Horizontal indent per depth level. Default `1rem`.\n * @cssproperty --indent-guide-width - Thickness of the vertical guide line between a parent and its children. Default `1px`. Set to `0` to hide guides.\n * @cssproperty --indent-guide-style - Line style of the guide (`solid`, `dashed`, `dotted`, `double`…). Default `solid`.\n * @cssproperty --indent-guide-color - Color of the guide line.\n * @cssproperty --row-height - Minimum row height. Default `1.75rem`.\n * @cssproperty --row-padding-inline - Inner inline padding of the row; also drives the content slot left indent and the indent guide column. Default `0.25rem`.\n * @cssproperty --chevron-size - Size of the expand/collapse chevron box. Default `1.125rem`.\n * @cssproperty --item-gap - Horizontal gap between chevron, prefix, label and suffix on the row; also drives the content slot left indent. Default `0.375rem`.\n *\n * @event selection-change - Fired when the selected items change. Detail: `{ selection: TreeItem[] }`.\n */\nexport class Tree extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n private _mutationObserver?: MutationObserver;\n private _lastFocusedItem: TreeItem | null = null;\n\n /**\n * Selection behaviour:\n * - `single` (default): at most one item selected via `aria-selected`.\n * - `multiple`: any number of items selected. Checkboxes are rendered.\n * - `leaf`: only leaf items can be selected (single). Branches just toggle.\n * - `none`: purely navigable, no selection state.\n */\n @property({ reflect: true })\n accessor selection: TreeSelection = 'single';\n\n /**\n * When set with `selection=\"multiple\"`, parent and children selection are decoupled:\n * toggling a parent does NOT toggle its descendants and vice versa.\n * Without it, selection cascades both ways and branches may become indeterminate.\n */\n @property({ type: Boolean, reflect: true })\n accessor independent = false;\n\n override connectedCallback() {\n super.connectedCallback();\n this._mutationObserver = new MutationObserver(() => this._syncAll());\n this._mutationObserver.observe(this, { childList: true, subtree: true });\n this.addEventListener('l-tree-item-toggle', this._onItemToggle as EventListener);\n\n // Defer sync to let light DOM upgrade.\n queueMicrotask(() => this._syncAll());\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._mutationObserver?.disconnect();\n this.removeEventListener('l-tree-item-toggle', this._onItemToggle as EventListener);\n }\n\n override updated(changed: PropertyValues<this>) {\n if (changed.has('selection') || changed.has('independent')) {\n this._syncAll();\n }\n }\n\n // --- Public API ---\n\n /** Returns all items in document (flat) order, including nested ones. */\n getAllItems({ includeDisabled = true } = {}): TreeItem[] {\n const tag = tagName('tree-item');\n return Array.from(this.querySelectorAll<TreeItem>(tag)).filter(\n (item) => includeDisabled || !item.disabled,\n );\n }\n\n /** Returns currently selected items. */\n getSelection(): TreeItem[] {\n return this.getAllItems().filter((i) => i.selected);\n }\n\n /** Expands every item that has children. */\n expandAll() {\n for (const item of this.getAllItems()) {\n if (!item.isLeaf()) item.expanded = true;\n }\n }\n\n /** Collapses every item. */\n collapseAll() {\n for (const item of this.getAllItems()) {\n item.expanded = false;\n }\n }\n\n // --- Sync / ARIA / depth / checkbox visibility ---\n\n private _syncAll() {\n const showCheckbox = this.selection === 'multiple';\n const roots = this._rootItems();\n for (const root of roots) {\n this._syncSubtree(root, 0, showCheckbox);\n }\n this._updateBranchStates();\n // Ensure at least one item is tabbable.\n this._ensureTabStop();\n }\n\n private _syncSubtree(item: TreeItem, depth: number, showCheckbox: boolean) {\n item.depth = depth;\n item.showCheckbox = showCheckbox && this._canShowCheckboxOn(item);\n for (const child of item.getChildrenItems()) {\n this._syncSubtree(child, depth + 1, showCheckbox);\n }\n }\n\n private _canShowCheckboxOn(_item: TreeItem): boolean {\n if (this.selection !== 'multiple') return false;\n // In cascade mode, branches get a checkbox too so you can bulk-toggle children.\n // In leaf-only selection, hidden here because selection !== 'multiple'.\n return true;\n }\n\n private _rootItems(): TreeItem[] {\n const tag = tagName('tree-item').toUpperCase();\n return (Array.from(this.children) as TreeItem[]).filter((el) => el.tagName === tag);\n }\n\n private _ensureTabStop() {\n const items = this._visibleItems();\n if (items.length === 0) return;\n const hasTabStop = items.some((i) => i.tabIndex === 0);\n if (!hasTabStop) {\n for (const i of items) i.tabIndex = -1;\n items[0].tabIndex = 0;\n }\n }\n\n /** Items currently visible (parent chain all expanded). */\n private _visibleItems(): TreeItem[] {\n const out: TreeItem[] = [];\n const walk = (items: TreeItem[]) => {\n for (const i of items) {\n out.push(i);\n if (i.expanded) walk(i.getChildrenItems());\n }\n };\n walk(this._rootItems());\n return out;\n }\n\n // --- Selection handling ---\n\n private _onItemToggle = (event: CustomEvent<{ item: TreeItem; checked: boolean }>) => {\n const { item, checked } = event.detail;\n this._selectItem(item, checked);\n };\n\n private _handleRowActivate(item: TreeItem) {\n if (item.disabled) return;\n\n switch (this.selection) {\n case 'single':\n this._setSingleSelection(item);\n break;\n case 'leaf':\n if (item.isLeaf()) this._setSingleSelection(item);\n else item.toggle();\n break;\n case 'multiple':\n this._selectItem(item, !item.selected);\n break;\n case 'none':\n item.toggle();\n break;\n }\n }\n\n private _setSingleSelection(item: TreeItem) {\n for (const i of this.getAllItems()) {\n if (i !== item && i.selected) i.selected = false;\n }\n item.selected = true;\n this._emitSelectionChange();\n }\n\n private _selectItem(item: TreeItem, value: boolean) {\n if (item.disabled) return;\n item.selected = value;\n\n if (this.selection === 'multiple' && !this.independent) {\n // Cascade DOWN: toggling a branch toggles all descendants.\n this._setSubtreeSelection(item, value);\n }\n\n item.indeterminate = false;\n this._updateBranchStates();\n this._emitSelectionChange();\n }\n\n private _setSubtreeSelection(item: TreeItem, value: boolean) {\n for (const child of item.getChildrenItems()) {\n if (child.disabled) continue;\n child.selected = value;\n child.indeterminate = false;\n this._setSubtreeSelection(child, value);\n }\n }\n\n /** Propagate child state UP to parents (indeterminate / auto-checked). */\n private _updateBranchStates() {\n if (this.selection !== 'multiple' || this.independent) {\n // In independent or non-multiple modes, clear any indeterminate flags.\n for (const i of this.getAllItems()) i.indeterminate = false;\n return;\n }\n\n const recompute = (item: TreeItem): { all: boolean; any: boolean } => {\n const children = item.getChildrenItems({ includeDisabled: false });\n if (children.length === 0) {\n return { all: item.selected, any: item.selected };\n }\n\n let all = true;\n let any = false;\n for (const child of children) {\n const state = recompute(child);\n if (!state.all) all = false;\n if (state.any) any = true;\n }\n\n item.selected = all;\n item.indeterminate = !all && any;\n return { all: all && (item.getChildrenItems().length > 0 ? all : item.selected), any };\n };\n\n for (const root of this._rootItems()) recompute(root);\n }\n\n private _emitSelectionChange() {\n this.emit('selection-change', { detail: { selection: this.getSelection() } });\n }\n\n // --- Keyboard / focus ---\n\n private _onClick = (event: MouseEvent) => {\n const item = this._itemFromEvent(event);\n if (!item || item.disabled) return;\n\n const path = event.composedPath();\n const onCheckbox = path.some((n) => n instanceof HTMLInputElement && n.type === 'checkbox');\n if (onCheckbox) return; // handled via change event\n\n // Clicks on consumer-provided interactive elements (buttons, links, form\n // controls, menu items…) must not toggle the row — the consumer owns that\n // interaction. Works regardless of which slot the element was placed in.\n const INTERACTIVE_TAGS = new Set(['BUTTON', 'A', 'INPUT', 'SELECT', 'TEXTAREA']);\n const INTERACTIVE_ROLES = new Set(['button', 'link', 'menuitem', 'menuitemcheckbox']);\n const onInteractive = path.some((n) => {\n if (!(n instanceof HTMLElement) || n === item) return false;\n if (n.getAttribute?.('part') === 'expand-button') return false;\n if (n instanceof HTMLInputElement && n.type === 'checkbox') return false;\n if (INTERACTIVE_TAGS.has(n.tagName)) return true;\n const role = n.getAttribute?.('role');\n return role !== null && INTERACTIVE_ROLES.has(role);\n });\n if (onInteractive) return;\n\n const onExpand = path.some(\n (n) => n instanceof HTMLElement && n.getAttribute?.('part') === 'expand-button',\n );\n\n this._focusItem(item);\n\n if (onExpand) {\n item.toggle();\n return;\n }\n\n // Row click (label area): mode-dependent behaviour.\n switch (this.selection) {\n case 'single':\n this._setSingleSelection(item);\n if (!item.isLeaf()) item.toggle();\n break;\n case 'leaf':\n if (item.isLeaf()) this._setSingleSelection(item);\n else item.toggle();\n break;\n case 'multiple':\n // The whole row acts like a <label> for the checkbox: clicking anywhere\n // on it toggles selection. Use the chevron to expand/collapse branches.\n this._selectItem(item, !item.selected);\n break;\n case 'none':\n item.toggle();\n break;\n }\n };\n\n private _itemFromEvent(event: Event): TreeItem | null {\n const tag = tagName('tree-item');\n const path = event.composedPath();\n for (const node of path) {\n if (node instanceof HTMLElement && node.matches?.(tag)) {\n return node as TreeItem;\n }\n }\n return null;\n }\n\n private _focusItem(item: TreeItem) {\n const visible = this._visibleItems();\n for (const i of visible) i.tabIndex = -1;\n item.tabIndex = 0;\n item.focus();\n this._lastFocusedItem = item;\n }\n\n private _onFocusIn = (event: FocusEvent) => {\n const target = event.target;\n if (target instanceof HTMLElement) {\n const item = target.closest<TreeItem>(tagName('tree-item'));\n if (item) this._lastFocusedItem = item;\n }\n };\n\n private _onKeyDown = (event: KeyboardEvent) => {\n const current = this._lastFocusedItem ?? this._visibleItems()[0];\n if (!current) return;\n\n const visible = this._visibleItems();\n const index = visible.indexOf(current);\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n const next = visible[Math.min(index + 1, visible.length - 1)];\n if (next) this._focusItem(next);\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n const prev = visible[Math.max(index - 1, 0)];\n if (prev) this._focusItem(prev);\n break;\n }\n case 'ArrowRight': {\n event.preventDefault();\n if (!current.isLeaf() && !current.expanded) {\n current.expanded = true;\n } else if (current.expanded) {\n const first = current.getChildrenItems()[0];\n if (first) this._focusItem(first);\n }\n break;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n if (current.expanded && !current.isLeaf()) {\n current.expanded = false;\n } else {\n const parent = current.parentElement?.closest(tagName('tree-item')) as TreeItem | null;\n if (parent) this._focusItem(parent);\n }\n break;\n }\n case 'Home': {\n event.preventDefault();\n if (visible[0]) this._focusItem(visible[0]);\n break;\n }\n case 'End': {\n event.preventDefault();\n const last = visible[visible.length - 1];\n if (last) this._focusItem(last);\n break;\n }\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this._handleRowActivate(current);\n break;\n }\n case '*': {\n event.preventDefault();\n // Expand all siblings of the current item.\n const siblings = (\n current.parentElement ? (Array.from(current.parentElement.children) as TreeItem[]) : []\n ).filter((el) => el.tagName === tagName('tree-item').toUpperCase());\n for (const sib of siblings) {\n if (!sib.isLeaf()) sib.expanded = true;\n }\n break;\n }\n }\n };\n\n override render() {\n return html`\n <div\n class=\"tree\"\n part=\"base\"\n role=\"tree\"\n aria-multiselectable=${this.selection === 'multiple' ? 'true' : 'false'}\n @click=${this._onClick}\n @keydown=${this._onKeyDown}\n @focusin=${this._onFocusIn}\n >\n <slot></slot>\n </div>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Tree } from './tree.js';\nexport * from './tree.js';\ndefine('tree', Tree);\n",":host {\n display: block;\n color: var(--l-color-text-primary, CanvasText);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n:host([disabled]) {\n opacity: 0.4;\n}\n\n:host([disabled]) .item {\n cursor: not-allowed;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--item-gap);\n min-block-size: var(--row-height);\n padding-inline: var(--row-padding-inline);\n padding-inline-start: calc(var(--indent-size) * var(--_depth, 0) + var(--row-padding-inline));\n border-radius: 0.375rem;\n cursor: pointer;\n user-select: none;\n transition:\n background-color 120ms ease,\n color 120ms ease;\n position: relative;\n}\n\n.item:focus-visible,\n:host(:focus-visible) .item {\n outline: 2px solid var(--l-focus-ring, Highlight);\n outline-offset: 1px;\n}\n\n@media (hover: hover) {\n :host(:not([disabled])) .item:hover {\n background-color: var(--l-color-bg-state-hover);\n }\n}\n\n:host([selected]:not([disabled])) .item {\n background-color: var(--l-color-bg-state-selected);\n}\n\n.expand {\n inline-size: var(--chevron-size);\n block-size: var(--chevron-size);\n display: grid;\n place-items: center;\n flex: none;\n color: var(--l-color-text-secondary, CanvasText);\n border-radius: 3px;\n cursor: pointer;\n}\n\n/* Hide the DEFAULT fallback chevron SVG on a leaf — slotted content\n (user-provided icon, avatar, etc.) remains visible. */\n:host(:not(:state(has-children)):not([lazy])) .expand > svg {\n display: none;\n}\n\n.expand svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n.checkbox {\n margin: 0;\n flex: none;\n accent-color: var(--l-color-bg-fill-brand, Highlight);\n cursor: pointer;\n inline-size: 1rem;\n block-size: 1rem;\n}\n\n/* Checkbox is only rendered when the parent tree enables multi-selection */\n:host(:not(:state(checkbox))) .checkbox {\n display: none;\n}\n\n.label {\n flex: 1;\n min-inline-size: 0;\n display: flex;\n align-items: center;\n gap: 0.375rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.label ::slotted(*) {\n min-inline-size: 0;\n}\n\n/* Wrapper around the content slot + children — anchor for the indent guide. */\n.branch {\n position: relative;\n}\n\n/* Content slot — block area between the row and the children.\n Aligned under the label text: same left offset as the row's label\n (depth indent + row padding + chevron + gap). Visible for leaves (no\n children) and for expanded branches; hidden when a branch is collapsed\n (mirrors the children visibility). */\n.content {\n display: block;\n padding-inline-start: calc(\n var(--indent-size) * var(--_depth, 0) + var(--row-padding-inline) + var(--chevron-size) +\n var(--item-gap)\n );\n padding-inline-end: var(--row-padding-inline);\n}\n\n:host(:state(has-children):not([expanded])) .content {\n display: none;\n}\n\n.children {\n display: none;\n}\n\n:host([expanded]) .children {\n display: block;\n}\n\n/* Vertical indent guide — spans the content + children block, starting\n right below the row so it never overlaps the chevron/avatar.\n The guide's visual centre sits exactly on the parent chevron's centre. */\n.branch::before {\n content: '';\n position: absolute;\n inset-block: 0;\n inset-inline-start: calc(\n var(--indent-size) * var(--_depth, 0) + var(--row-padding-inline) + (var(--chevron-size) / 2) -\n (var(--indent-guide-width) / 2)\n );\n inline-size: 0;\n border-inline-start: var(--indent-guide-width) var(--indent-guide-style) var(--indent-guide-color);\n pointer-events: none;\n}\n\n/* Only render the guide for open branches that have children. */\n:host(:not([expanded])) .branch::before,\n:host(:not(:state(has-children))) .branch::before {\n display: none;\n}\n\n.spinner {\n inline-size: 0.875rem;\n block-size: 0.875rem;\n border-radius: 50%;\n border: 2px solid var(--l-color-border, currentColor);\n border-block-start-color: transparent;\n animation: spin 700ms linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner {\n animation: none;\n }\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n","import { html, unsafeCSS, type PropertyValues } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { tagName } from '../../registry.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './tree-item.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * A node inside `<l-tree>`. Nested `<l-tree-item>` children become sub-nodes.\n *\n * @slot - Label content (kept to a single row).\n * @slot prefix - Leading content before the label (e.g. icon).\n * @slot suffix - Trailing content.\n * @slot expand-icon - Icon shown when the item is collapsed.\n * @slot collapse-icon - Icon shown when the item is expanded.\n * @slot content - Block content that belongs to the item but not to its header row (e.g. comment body, action bar). Hidden when a branch is collapsed.\n *\n * @csspart base - The item row.\n * @csspart expand-button - The chevron toggle area.\n * @csspart checkbox - The native checkbox input.\n * @csspart label - The label container.\n * @csspart branch - Wrapper around the content and children slots; carries the indent guide.\n * @csspart content - The content slot wrapper (block area between the row and the children).\n * @csspart children - The nested items container.\n *\n * @cssproperty [--_depth] - Internal depth index driving indentation. Set by `<l-tree>`.\n *\n * Layout tokens (`--chevron-size`, `--row-height`, `--row-padding-inline`, `--item-gap`) live on `<l-tree>` and cascade down — see its CSS custom properties.\n *\n * @event expand - Fired when the item is expanded.\n * @event collapse - Fired when the item is collapsed.\n * @event lazy-load - Fired when a lazy item is expanded for the first time. Consumers should append children and set `lazy=false`.\n */\nexport class TreeItem extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n private _internals = this.attachInternals();\n private _childObserver?: MutationObserver;\n\n /** Whether the item is expanded. */\n @property({ type: Boolean, reflect: true })\n accessor expanded = false;\n\n /** Whether the item is selected. */\n @property({ type: Boolean, reflect: true })\n accessor selected = false;\n\n /** Whether the checkbox is indeterminate (some descendants selected). */\n @property({ type: Boolean, reflect: true })\n accessor indeterminate = false;\n\n /** Whether the item is disabled. */\n @property({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n /** Marks this item as having children that will be loaded on first expand. */\n @property({ type: Boolean, reflect: true })\n accessor lazy = false;\n\n /** Whether the item is currently loading (shows a spinner). */\n @property({ type: Boolean, reflect: true })\n accessor loading = false;\n\n /** Set by `<l-tree>`: whether a checkbox is shown. */\n set showCheckbox(value: boolean) {\n this._showCheckbox = value;\n this._setState('checkbox', value);\n }\n get showCheckbox(): boolean {\n return this._showCheckbox;\n }\n private _showCheckbox = false;\n\n /** Set by `<l-tree>`: depth of the item in the tree (0 = root). */\n set depth(value: number) {\n this._depth = value;\n this.style.setProperty('--_depth', String(value));\n }\n get depth(): number {\n return this._depth;\n }\n private _depth = 0;\n\n /** Whether this item has nested tree-item children. */\n get hasChildren(): boolean {\n return this._hasChildren;\n }\n private _hasChildren = false;\n\n /** Returns the child `<l-tree-item>` elements directly under this one. */\n getChildrenItems({ includeDisabled = true } = {}): TreeItem[] {\n const childTag = tagName('tree-item').toUpperCase();\n return (Array.from(this.children) as TreeItem[]).filter(\n (el) => el.tagName === childTag && (includeDisabled || !el.disabled),\n );\n }\n\n /** Returns true if this item has no expandable children. */\n isLeaf(): boolean {\n return !this.lazy && this.getChildrenItems().length === 0;\n }\n\n /** Returns the text label of this item. */\n getTextLabel(): string {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])');\n if (!slot) return (this.textContent ?? '').trim();\n return slot\n .assignedNodes({ flatten: true })\n .map((n) => n.textContent ?? '')\n .join('')\n .trim();\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this._internals.role = 'treeitem';\n this._childObserver = new MutationObserver(() => this._syncChildren());\n this._childObserver.observe(this, { childList: true });\n this._syncChildren();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._childObserver?.disconnect();\n }\n\n override updated(changed: PropertyValues<this>) {\n if (changed.has('expanded')) {\n this._internals.ariaExpanded = this.isLeaf() ? null : String(this.expanded);\n this.emit(this.expanded ? 'expand' : 'collapse');\n }\n\n if (changed.has('selected')) {\n this._internals.ariaSelected = String(this.selected);\n }\n\n if (changed.has('disabled')) {\n this._internals.ariaDisabled = this.disabled ? 'true' : null;\n }\n }\n\n private _setState(name: string, on: boolean) {\n if (!this._internals.states) return;\n if (on) this._internals.states.add(name);\n else this._internals.states.delete(name);\n }\n\n private _syncChildren() {\n // Auto-slot nested tree-items into the `children` slot so they render in the group container,\n // while label text/elements remain in the default slot.\n const childTag = tagName('tree-item').toUpperCase();\n let count = 0;\n for (const child of Array.from(this.children) as HTMLElement[]) {\n if (child.tagName === childTag) {\n count++;\n if (child.slot !== 'children') child.slot = 'children';\n }\n }\n this._hasChildren = count > 0;\n this._setState('has-children', this._hasChildren);\n if (!this._hasChildren && !this.lazy && this.expanded) {\n this.expanded = false;\n }\n this._internals.ariaExpanded = this.isLeaf() ? null : String(this.expanded);\n }\n\n /** Toggle expand state. Emits `lazy-load` the first time a lazy item opens. */\n toggle() {\n if (this.isLeaf() && !this.lazy) return;\n const next = !this.expanded;\n if (next && this.lazy) {\n this.emit('lazy-load');\n }\n this.expanded = next;\n }\n\n private _onCheckboxChange = (event: Event) => {\n event.stopPropagation();\n const input = event.target as HTMLInputElement;\n this.dispatchEvent(\n new CustomEvent('l-tree-item-toggle', {\n bubbles: true,\n composed: true,\n detail: { item: this, checked: input.checked },\n }),\n );\n };\n\n override render() {\n return html`\n <div\n class=\"item\"\n part=\"base\"\n >\n <span\n class=\"expand\"\n part=\"expand-button\"\n aria-hidden=\"true\"\n >\n ${this.loading\n ? html`<span\n class=\"spinner\"\n role=\"status\"\n ></span>`\n : this.expanded || this.isLeaf()\n ? html`<slot name=\"collapse-icon\">\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3.5 6l4.5 5 4.5-5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </slot>`\n : html`<slot name=\"expand-icon\">\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M6 3.5l5 4.5-5 4.5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </slot>`}\n </span>\n\n <input\n class=\"checkbox\"\n part=\"checkbox\"\n type=\"checkbox\"\n tabindex=\"-1\"\n .checked=${this.selected}\n .indeterminate=${this.indeterminate}\n ?disabled=${this.disabled}\n @click=${(e: Event) => e.stopPropagation()}\n @change=${this._onCheckboxChange}\n />\n\n <slot name=\"prefix\"></slot>\n <span\n class=\"label\"\n part=\"label\"\n ><slot></slot\n ></span>\n <slot name=\"suffix\"></slot>\n </div>\n\n <div\n class=\"branch\"\n part=\"branch\"\n >\n <div\n class=\"content\"\n part=\"content\"\n >\n <slot name=\"content\"></slot>\n </div>\n <div\n class=\"children\"\n part=\"children\"\n role=\"group\"\n >\n <slot name=\"children\"></slot>\n </div>\n </div>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { TreeItem } from './tree-item.js';\nexport * from './tree-item.js';\ndefine('tree-item', TreeItem);\n"],"x_google_ignoreList":[2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,26,27,28,44,45,46,47,55],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standalone.js","names":["t","e","s","o","n","r","i","S","c","i","e","h","r","o","n","a","c","l","p","d","u","f","b","y","t","s","t","i","s","e","o","n","r","l","c","a","u","$","s","i","t","e","r","o","n","o","o","n","t","r","e","t","o","e","t","r","n","r","t","e","e","t","r","t","t","o","t","t","defaultOptions","detectOverflow","computePosition","arrow","autoPlacement","flip","hide","inline","offset","shift","limitShift","size","getComputedStyle"],"sources":["../src/html/registry.ts","../src/html/define.ts","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/css-tag.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/reactive-element.js","../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/lit-html.js","../../../node_modules/.pnpm/lit-element@4.2.2/node_modules/lit-element/lit-element.js","../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/is-server.js","../src/html/shared/luxen-element.ts","../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/static.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/custom-element.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/property.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/state.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/event-options.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/base.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/query.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/query-all.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/query-async.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/query-assigned-elements.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/query-assigned-nodes.js","../src/html/shared/styles/host.css?inline","../src/html/shared/styles/host.styles.ts","../src/html/elements/avatar/avatar.css?inline","../src/html/elements/avatar/avatar.ts","../src/html/elements/avatar/index.ts","../src/html/elements/badge/badge.ts","../src/html/elements/badge/index.ts","../../../node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js","../../../node_modules/.pnpm/embla-carousel-autoplay@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-autoplay/esm/embla-carousel-autoplay.esm.js","../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directives/map.js","../src/html/elements/carousel/carousel.css?inline","../src/html/elements/carousel/carousel.ts","../src/html/elements/carousel/index.ts","../src/html/elements/carousel-item/carousel-item.css?inline","../src/html/elements/carousel-item/carousel-item.ts","../src/html/elements/carousel-item/index.ts","../src/html/elements/dialog/dialog.css?inline","../src/html/elements/dialog/dialog.styles.ts","../src/html/elements/dialog/dialog.ts","../src/html/elements/dialog/index.ts","../src/html/elements/divider/divider.ts","../src/html/elements/divider/index.ts","../src/html/elements/drawer/drawer.css?inline","../src/html/elements/drawer/drawer.ts","../src/html/elements/drawer/index.ts","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../src/html/shared/controllers/popover.ts","../src/html/elements/dropdown/dropdown.css?inline","../src/html/elements/dropdown/dropdown.ts","../src/html/elements/dropdown/index.ts","../src/html/elements/dropdown-item/dropdown-item.css?inline","../src/html/elements/dropdown-item/dropdown-item.ts","../src/html/elements/dropdown-item/index.ts","../../../node_modules/.pnpm/iconify-icon@3.0.2/node_modules/iconify-icon/dist/iconify-icon.mjs","../src/html/elements/icon/icon.css?inline","../src/html/elements/icon/icon.ts","../src/html/elements/icon/index.ts","../src/html/elements/input-otp/input-otp.ts","../src/html/elements/input-otp/index.ts","../src/html/elements/input-stepper/input-stepper.ts","../src/html/elements/input-stepper/index.ts","../src/html/elements/popover/popover.css?inline","../src/html/elements/popover/popover.ts","../src/html/elements/popover/index.ts","../src/html/shared/luxen-form-associated-element.ts","../src/html/elements/rating/rating.css?inline","../src/html/elements/rating/rating.ts","../src/html/elements/rating/index.ts","../src/html/elements/skeleton/skeleton.ts","../src/html/elements/skeleton/index.ts","../src/html/elements/spinner/spinner.css?inline","../src/html/elements/spinner/spinner.ts","../src/html/elements/spinner/index.ts","../src/html/elements/sticky-bar/sticky-bar.css?inline","../src/html/elements/sticky-bar/sticky-bar.ts","../src/html/elements/sticky-bar/index.ts","../src/html/elements/tabs/tabs.ts","../src/html/elements/tabs/index.ts","../src/html/elements/toast/toast.ts","../src/html/elements/toast/index.ts","../src/html/elements/tooltip/tooltip.css?inline","../src/html/elements/tooltip/tooltip.ts","../src/html/elements/tooltip/index.ts","../src/html/elements/tree/tree.css?inline","../src/html/elements/tree/tree.ts","../src/html/elements/tree/index.ts","../src/html/elements/tree-item/tree-item.css?inline","../src/html/elements/tree-item/tree-item.ts","../src/html/elements/tree-item/index.ts"],"sourcesContent":["/** Every component base name the library ships. */\nexport type ElementBaseName =\n | 'avatar'\n | 'badge'\n | 'carousel'\n | 'carousel-item'\n | 'dialog'\n | 'divider'\n | 'drawer'\n | 'dropdown'\n | 'dropdown-item'\n | 'icon'\n | 'input-otp'\n | 'input-stepper'\n | 'popover'\n | 'skeleton'\n | 'spinner'\n | 'rating'\n | 'sticky-bar'\n | 'stories'\n | 'story'\n | 'stories-viewer'\n | 'tabs'\n | 'toast'\n | 'toast-item'\n | 'tooltip'\n | 'tree'\n | 'tree-item';\n\nlet _elementPrefix = 'l';\nlet _cssPrefix = 'l';\nconst _registered = new Set<ElementBaseName>();\n\n/** Set the global prefix. Must be called before defining elements. */\nexport function setPrefix(prefix: { element: string; css: string }): void {\n _elementPrefix = prefix.element;\n _cssPrefix = prefix.css;\n}\n\n/** Get the current prefixes. */\nexport function getPrefix(): { element: string; css: string } {\n return { element: _elementPrefix, css: _cssPrefix };\n}\n\n/** Derive the full tag name from element prefix + base name. */\nexport function tagName(baseName: ElementBaseName): string {\n return `${_elementPrefix}-${baseName}`;\n}\n\n/** Prefix a CSS class name. `cls('toast-icon')` → `'l-toast-icon'` */\nexport function cls(name: string): string {\n return `${_cssPrefix}-${name}`;\n}\n\n/** Generate a globally unique prefixed ID. `uniqueId('toast')` → `'l:toast:1'` */\nlet _uid = 0;\nexport function uniqueId(base: string): string {\n return `${_cssPrefix}:${base}:${++_uid}`;\n}\n\n/** Check if a base name is already registered. */\nexport function isRegistered(baseName: ElementBaseName): boolean {\n return _registered.has(baseName);\n}\n\n/** Mark a base name as registered. Called internally by define(). */\nexport function markRegistered(baseName: ElementBaseName): void {\n _registered.add(baseName);\n}\n","import { markRegistered, isRegistered, tagName, type ElementBaseName } from './registry.js';\n\n/**\n * Register a Luxen element with the custom elements registry.\n *\n * @param baseName - The element's base name (e.g. `'badge'`, `'toast-item'`).\n * @param elementClass - The custom element class to define.\n */\nexport function define(baseName: ElementBaseName, elementClass: CustomElementConstructor): void {\n if (isRegistered(baseName)) return;\n markRegistered(baseName);\n const tag = tagName(baseName);\n if (!customElements.get(tag)) {\n customElements.define(tag, elementClass);\n }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.2\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2022 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst o=!1;export{o as isServer};\n//# sourceMappingURL=is-server.js.map\n","import { LitElement } from 'lit';\n\n/**\n * Base class for all Luxen custom elements.\n * Extends LitElement with shared utilities.\n */\nexport class LuxenElement extends LitElement {\n /**\n * Dispatch a custom event. Returns `true` if not cancelled.\n *\n * @param name - Event name (unprefixed, e.g. `'show'`).\n * @param options - CustomEvent options. Defaults: bubbles + composed.\n */\n emit<T = unknown>(\n name: string,\n options?: {\n detail?: T;\n bubbles?: boolean;\n composed?: boolean;\n cancelable?: boolean;\n },\n ): boolean {\n const event = new CustomEvent<T>(name, {\n bubbles: options?.bubbles ?? true,\n composed: options?.composed ?? true,\n cancelable: options?.cancelable ?? false,\n detail: options?.detail as T,\n });\n this.dispatchEvent(event);\n return !event.defaultPrevented;\n }\n}\n","import{html as t,svg as r,mathml as e}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst a=Symbol.for(\"\"),o=t=>{if(t?.r===a)return t?._$litStatic$},s=t=>({_$litStatic$:t,r:a}),i=(t,...r)=>({_$litStatic$:r.reduce((r,e,a)=>r+(t=>{if(void 0!==t._$litStatic$)return t._$litStatic$;throw Error(`Value passed to 'literal' function must be a 'literal' result: ${t}. Use 'unsafeStatic' to pass non-literal values, but\\n take care to ensure page security.`)})(e)+t[a+1],t[0]),r:a}),l=new Map,n=t=>(r,...e)=>{const a=e.length;let s,i;const n=[],u=[];let c,$=0,f=!1;for(;$<a;){for(c=r[$];$<a&&void 0!==(i=e[$],s=o(i));)c+=s+r[++$],f=!0;$!==a&&u.push(i),n.push(c),$++}if($===a&&n.push(r[a]),f){const t=n.join(\"$$lit$$\");void 0===(r=l.get(t))&&(n.raw=n,l.set(t,r=n)),e=u}return t(r,...e)},u=n(t),c=n(r),$=n(e);export{u as html,i as literal,$ as mathml,c as svg,s as unsafeStatic,n as withStatic};\n//# sourceMappingURL=static.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer(()=>{customElements.define(t,e)}):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nfunction t(t){return(n,o)=>{const c=\"function\"==typeof n?n:n[o];Object.assign(c,t)}}export{t as eventOptions};\n//# sourceMappingURL=event-options.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e,r){return(n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;if(r){const{get:e,set:r}=\"object\"==typeof s?n:i??(()=>{const t=Symbol();return{get(){return this[t]},set(e){this[t]=e}}})();return t(n,s,{get(){let t=e.call(this);return void 0===t&&(t=o(this),(null!==t||this.hasUpdated)&&r.call(this,t)),t}})}return t(n,s,{get(){return o(this)}})}}export{e as query};\n//# sourceMappingURL=query.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nlet e;function r(r){return(n,o)=>t(n,o,{get(){return(this.renderRoot??(e??=document.createDocumentFragment())).querySelectorAll(r)}})}export{r as queryAll};\n//# sourceMappingURL=query-all.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nfunction r(r){return(n,e)=>t(n,e,{async get(){return await this.updateComplete,this.renderRoot?.querySelector(r)??null}})}export{r as queryAsync};\n//# sourceMappingURL=query-async.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function o(o){return(e,n)=>{const{slot:r,selector:s}=o??{},c=\"slot\"+(r?`[name=${r}]`:\":not([name])\");return t(e,n,{get(){const t=this.renderRoot?.querySelector(c),e=t?.assignedElements(o)??[];return void 0===s?e:e.filter(t=>t.matches(s))}})}}export{o as queryAssignedElements};\n//# sourceMappingURL=query-assigned-elements.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function n(n){return(o,r)=>{const{slot:e}=n??{},s=\"slot\"+(e?`[name=${e}]`:\":not([name])\");return t(o,r,{get(){const t=this.renderRoot?.querySelector(s);return t?.assignedNodes(n)??[]}})}}export{n as queryAssignedNodes};\n//# sourceMappingURL=query-assigned-nodes.js.map\n",":host {\n box-sizing: border-box;\n}\n\n:host *,\n:host *::before,\n:host *::after {\n box-sizing: border-box;\n}\n\n[hidden] {\n display: none !important;\n}\n","import { unsafeCSS } from 'lit';\nimport raw from './host.css?inline';\n\n/**\n * Styles applied to every shadow-DOM element via `static styles`.\n * Wrapper module: `unsafeCSS()` is called once here so all 12+ importers\n * share the same `CSSResult` instance (one constructed `CSSStyleSheet`,\n * not one per importing element).\n */\nexport default unsafeCSS(raw);\n",":host {\n --_size: 40px;\n --_font-size: 1rem;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n position: relative;\n width: var(--_size);\n height: var(--_size);\n border-radius: calc(var(--_size) * 0.2);\n isolation: isolate;\n vertical-align: middle;\n flex-shrink: 0;\n color: var(--l-color-text-secondary);\n}\n\n:host([size='xs']) {\n --_size: 24px;\n --_font-size: 0.75rem;\n}\n:host([size='sm']) {\n --_size: 32px;\n --_font-size: 0.875rem;\n}\n:host([size='lg']) {\n --_size: 48px;\n --_font-size: 1.25rem;\n}\n:host([size='xl']) {\n --_size: 56px;\n --_font-size: 1.25rem;\n}\n\nimg {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: inherit;\n}\n\n.initials {\n margin: auto;\n}\n\n.icon {\n width: 60%;\n height: 60%;\n color: currentColor;\n}\n\n.badge {\n position: absolute;\n bottom: 0;\n right: 0;\n z-index: 1;\n height: 12px;\n min-width: 12px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding-inline: 2px;\n border-radius: 3px;\n box-shadow: 0 0 0 2px var(--l-color-surface);\n background-color: var(--l-color-surface);\n font-size: 0.625rem;\n font-weight: 500;\n font-variant-numeric: tabular-nums;\n line-height: 1;\n color: var(--l-color-text-primary);\n overflow: hidden;\n}\n\n/*\n * Inset ring via ::after so it renders on top of the <img>.\n * A box-shadow on :host would be covered by the image since\n * it fills the entire element with object-fit: cover.\n */\n.base::after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: inherit;\n box-shadow: inset 0 0 0 1px light-dark(oklch(0 0 0 / 7%), oklch(100% 0 0 / 10%));\n pointer-events: none;\n}\n\n.base {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n border: none;\n border-radius: calc(var(--_size) * 0.2);\n background-color: var(--color, var(--l-color-bg-fill-neutral-soft));\n color: oklch(\n from var(--color) calc(0.65 - 0.2 * sign(l - 0.5)) calc(c * (1.75 + 0.25 * sign(l - 0.5))) h\n );\n font-size: var(--_font-size);\n font-weight: 500;\n line-height: 1;\n text-transform: uppercase;\n padding: 0;\n cursor: inherit;\n}\n\n@supports (color: contrast-color(red vs black, white)) {\n .base {\n color: contrast-color(\n var(--color, var(--l-color-bg-fill-neutral-soft)) vs\n oklch(from var(--color) 0.45 calc(c * 2) h),\n oklch(from var(--color) 0.85 calc(c * 1.5) h) to AA\n );\n }\n}\n\nbutton.base {\n cursor: pointer;\n}\n\nbutton.base:focus-visible {\n outline: 2px solid var(--l-focus-ring);\n outline-offset: 2px;\n}\n\nbutton.base:hover {\n box-shadow: inset 0 0 0 1.5px var(--l-color-border-interactive);\n}\n\n@container style(--appearance: circle) {\n .base {\n border-radius: 50%;\n }\n}\n","import { html, nothing, svg, unsafeCSS } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { html as staticHtml, literal } from 'lit/static-html.js';\nimport { property, state } from 'lit/decorators.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './avatar.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\nfunction getInitials(name: string): string {\n return name\n .match(/(\\b\\S)?/g)!\n .join('')\n .match(/(^\\S|\\S$)?/g)!\n .join('')\n .toUpperCase();\n}\n\nconst defaultIcon = svg`<svg class=\"icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z\" />\n</svg>`;\n\n/**\n * @summary An avatar component for displaying user images, initials, or a default icon.\n * @customElement l-avatar\n */\nexport class Avatar extends LuxenElement {\n static styles = [hostStyles, styles];\n\n @property()\n src = '';\n\n @property()\n name = '';\n\n @property({ reflect: true })\n size = 'md';\n\n @property({ type: Number })\n badge = 0;\n\n @property({ type: Boolean, reflect: true })\n interactive = false;\n\n @state() private _hasError = false;\n\n willUpdate(changed: Map<string, unknown>) {\n if (changed.has('src')) {\n this._hasError = false;\n }\n }\n\n connectedCallback() {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'img');\n }\n }\n\n updated() {\n if (this.name) {\n this.setAttribute('aria-label', this.name);\n }\n\n const isCircle = getComputedStyle(this).getPropertyValue('--appearance').trim() === 'circle';\n this.style.borderRadius = isCircle ? '50%' : '';\n }\n\n private get _tag() {\n return this.interactive ? literal`button` : literal`div`;\n }\n\n render() {\n const content =\n this.src && !this._hasError\n ? html`<img\n src=${this.src}\n alt=${this.name || ''}\n @error=${this._onError}\n />`\n : this.name\n ? html`<span class=\"initials\">${getInitials(this.name)}</span>`\n : html`<slot>${defaultIcon}</slot>`;\n\n return staticHtml`\n <${this._tag} class=\"base\" type=${this.interactive ? 'button' : nothing}>\n ${content}\n </${this._tag}>\n ${\n this.badge\n ? html`<div\n class=\"badge\"\n aria-hidden=\"true\"\n >\n ${this.badge}\n </div>`\n : nothing\n }\n `;\n }\n\n private _onError = () => {\n this._hasError = true;\n };\n}\n","import { define } from '../../define.js';\nimport { Avatar } from './avatar.js';\nexport * from './avatar.js';\ndefine('avatar', Avatar);\n","import { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\n\nexport type BadgeVariant = 'info' | 'success' | 'warning' | 'danger' | 'neutral';\nexport type BadgeSize = 'sm' | 'md' | 'lg';\nexport type BadgeAppearance = 'outlined' | 'filled' | 'filled-outlined' | 'accent';\n\n/**\n * @summary A badge component for displaying small status indicators.\n * @customElement l-badge\n */\nexport class Badge extends LuxenElement {\n override createRenderRoot() {\n return this;\n }\n\n /** Style variant: `info`, `success`, `warning`, `danger`, or `neutral` (default) */\n @property({ reflect: true }) variant?: BadgeVariant;\n\n /** Display as pill shape */\n @property({ type: Boolean, reflect: true }) pill = false;\n\n /** Badge size: `sm`, `lg`. Default is md. */\n @property({ reflect: true }) size?: BadgeSize;\n\n /** Visual appearance: `filled`, `filled-outlined`, `accent`. Default is outlined. */\n @property({ reflect: true }) appearance?: BadgeAppearance;\n}\n","import { define } from '../../define.js';\nimport { Badge } from './badge.js';\nexport * from './badge.js';\ndefine('badge', Badge);\n","function isNumber(subject) {\n return typeof subject === 'number';\n}\nfunction isString(subject) {\n return typeof subject === 'string';\n}\nfunction isBoolean(subject) {\n return typeof subject === 'boolean';\n}\nfunction isObject(subject) {\n return Object.prototype.toString.call(subject) === '[object Object]';\n}\nfunction mathAbs(n) {\n return Math.abs(n);\n}\nfunction mathSign(n) {\n return Math.sign(n);\n}\nfunction deltaAbs(valueB, valueA) {\n return mathAbs(valueB - valueA);\n}\nfunction factorAbs(valueB, valueA) {\n if (valueB === 0 || valueA === 0) return 0;\n if (mathAbs(valueB) <= mathAbs(valueA)) return 0;\n const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA));\n return mathAbs(diff / valueB);\n}\nfunction roundToTwoDecimals(num) {\n return Math.round(num * 100) / 100;\n}\nfunction arrayKeys(array) {\n return objectKeys(array).map(Number);\n}\nfunction arrayLast(array) {\n return array[arrayLastIndex(array)];\n}\nfunction arrayLastIndex(array) {\n return Math.max(0, array.length - 1);\n}\nfunction arrayIsLastIndex(array, index) {\n return index === arrayLastIndex(array);\n}\nfunction arrayFromNumber(n, startAt = 0) {\n return Array.from(Array(n), (_, i) => startAt + i);\n}\nfunction objectKeys(object) {\n return Object.keys(object);\n}\nfunction objectsMergeDeep(objectA, objectB) {\n return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n objectKeys(currentObject).forEach(key => {\n const valueA = mergedObjects[key];\n const valueB = currentObject[key];\n const areObjects = isObject(valueA) && isObject(valueB);\n mergedObjects[key] = areObjects ? objectsMergeDeep(valueA, valueB) : valueB;\n });\n return mergedObjects;\n }, {});\n}\nfunction isMouseEvent(evt, ownerWindow) {\n return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent;\n}\n\nfunction Alignment(align, viewSize) {\n const predefined = {\n start,\n center,\n end\n };\n function start() {\n return 0;\n }\n function center(n) {\n return end(n) / 2;\n }\n function end(n) {\n return viewSize - n;\n }\n function measure(n, index) {\n if (isString(align)) return predefined[align](n);\n return align(viewSize, n, index);\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction EventStore() {\n let listeners = [];\n function add(node, type, handler, options = {\n passive: true\n }) {\n let removeListener;\n if ('addEventListener' in node) {\n node.addEventListener(type, handler, options);\n removeListener = () => node.removeEventListener(type, handler, options);\n } else {\n const legacyMediaQueryList = node;\n legacyMediaQueryList.addListener(handler);\n removeListener = () => legacyMediaQueryList.removeListener(handler);\n }\n listeners.push(removeListener);\n return self;\n }\n function clear() {\n listeners = listeners.filter(remove => remove());\n }\n const self = {\n add,\n clear\n };\n return self;\n}\n\nfunction Animations(ownerDocument, ownerWindow, update, render) {\n const documentVisibleHandler = EventStore();\n const fixedTimeStep = 1000 / 60;\n let lastTimeStamp = null;\n let accumulatedTime = 0;\n let animationId = 0;\n function init() {\n documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n if (ownerDocument.hidden) reset();\n });\n }\n function destroy() {\n stop();\n documentVisibleHandler.clear();\n }\n function animate(timeStamp) {\n if (!animationId) return;\n if (!lastTimeStamp) {\n lastTimeStamp = timeStamp;\n update();\n update();\n }\n const timeElapsed = timeStamp - lastTimeStamp;\n lastTimeStamp = timeStamp;\n accumulatedTime += timeElapsed;\n while (accumulatedTime >= fixedTimeStep) {\n update();\n accumulatedTime -= fixedTimeStep;\n }\n const alpha = accumulatedTime / fixedTimeStep;\n render(alpha);\n if (animationId) {\n animationId = ownerWindow.requestAnimationFrame(animate);\n }\n }\n function start() {\n if (animationId) return;\n animationId = ownerWindow.requestAnimationFrame(animate);\n }\n function stop() {\n ownerWindow.cancelAnimationFrame(animationId);\n lastTimeStamp = null;\n accumulatedTime = 0;\n animationId = 0;\n }\n function reset() {\n lastTimeStamp = null;\n accumulatedTime = 0;\n }\n const self = {\n init,\n destroy,\n start,\n stop,\n update,\n render\n };\n return self;\n}\n\nfunction Axis(axis, contentDirection) {\n const isRightToLeft = contentDirection === 'rtl';\n const isVertical = axis === 'y';\n const scroll = isVertical ? 'y' : 'x';\n const cross = isVertical ? 'x' : 'y';\n const sign = !isVertical && isRightToLeft ? -1 : 1;\n const startEdge = getStartEdge();\n const endEdge = getEndEdge();\n function measureSize(nodeRect) {\n const {\n height,\n width\n } = nodeRect;\n return isVertical ? height : width;\n }\n function getStartEdge() {\n if (isVertical) return 'top';\n return isRightToLeft ? 'right' : 'left';\n }\n function getEndEdge() {\n if (isVertical) return 'bottom';\n return isRightToLeft ? 'left' : 'right';\n }\n function direction(n) {\n return n * sign;\n }\n const self = {\n scroll,\n cross,\n startEdge,\n endEdge,\n measureSize,\n direction\n };\n return self;\n}\n\nfunction Limit(min = 0, max = 0) {\n const length = mathAbs(min - max);\n function reachedMin(n) {\n return n < min;\n }\n function reachedMax(n) {\n return n > max;\n }\n function reachedAny(n) {\n return reachedMin(n) || reachedMax(n);\n }\n function constrain(n) {\n if (!reachedAny(n)) return n;\n return reachedMin(n) ? min : max;\n }\n function removeOffset(n) {\n if (!length) return n;\n return n - length * Math.ceil((n - max) / length);\n }\n const self = {\n length,\n max,\n min,\n constrain,\n reachedAny,\n reachedMax,\n reachedMin,\n removeOffset\n };\n return self;\n}\n\nfunction Counter(max, start, loop) {\n const {\n constrain\n } = Limit(0, max);\n const loopEnd = max + 1;\n let counter = withinLimit(start);\n function withinLimit(n) {\n return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd);\n }\n function get() {\n return counter;\n }\n function set(n) {\n counter = withinLimit(n);\n return self;\n }\n function add(n) {\n return clone().set(get() + n);\n }\n function clone() {\n return Counter(max, get(), loop);\n }\n const self = {\n get,\n set,\n add,\n clone\n };\n return self;\n}\n\nfunction DragHandler(axis, rootNode, ownerDocument, ownerWindow, target, dragTracker, location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, baseFriction, watchDrag) {\n const {\n cross: crossAxis,\n direction\n } = axis;\n const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA'];\n const nonPassiveEvent = {\n passive: false\n };\n const initEvents = EventStore();\n const dragEvents = EventStore();\n const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20));\n const snapForceBoost = {\n mouse: 300,\n touch: 400\n };\n const freeForceBoost = {\n mouse: 500,\n touch: 600\n };\n const baseSpeed = dragFree ? 43 : 25;\n let isMoving = false;\n let startScroll = 0;\n let startCross = 0;\n let pointerIsDown = false;\n let preventScroll = false;\n let preventClick = false;\n let isMouse = false;\n function init(emblaApi) {\n if (!watchDrag) return;\n function downIfAllowed(evt) {\n if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt);\n }\n const node = rootNode;\n initEvents.add(node, 'dragstart', evt => evt.preventDefault(), nonPassiveEvent).add(node, 'touchmove', () => undefined, nonPassiveEvent).add(node, 'touchend', () => undefined).add(node, 'touchstart', downIfAllowed).add(node, 'mousedown', downIfAllowed).add(node, 'touchcancel', up).add(node, 'contextmenu', up).add(node, 'click', click, true);\n }\n function destroy() {\n initEvents.clear();\n dragEvents.clear();\n }\n function addDragEvents() {\n const node = isMouse ? ownerDocument : rootNode;\n dragEvents.add(node, 'touchmove', move, nonPassiveEvent).add(node, 'touchend', up).add(node, 'mousemove', move, nonPassiveEvent).add(node, 'mouseup', up);\n }\n function isFocusNode(node) {\n const nodeName = node.nodeName || '';\n return focusNodes.includes(nodeName);\n }\n function forceBoost() {\n const boost = dragFree ? freeForceBoost : snapForceBoost;\n const type = isMouse ? 'mouse' : 'touch';\n return boost[type];\n }\n function allowedForce(force, targetChanged) {\n const next = index.add(mathSign(force) * -1);\n const baseForce = scrollTarget.byDistance(force, !dragFree).distance;\n if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce;\n if (skipSnaps && targetChanged) return baseForce * 0.5;\n return scrollTarget.byIndex(next.get(), 0).distance;\n }\n function down(evt) {\n const isMouseEvt = isMouseEvent(evt, ownerWindow);\n isMouse = isMouseEvt;\n preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving;\n isMoving = deltaAbs(target.get(), location.get()) >= 2;\n if (isMouseEvt && evt.button !== 0) return;\n if (isFocusNode(evt.target)) return;\n pointerIsDown = true;\n dragTracker.pointerDown(evt);\n scrollBody.useFriction(0).useDuration(0);\n target.set(location);\n addDragEvents();\n startScroll = dragTracker.readPoint(evt);\n startCross = dragTracker.readPoint(evt, crossAxis);\n eventHandler.emit('pointerDown');\n }\n function move(evt) {\n const isTouchEvt = !isMouseEvent(evt, ownerWindow);\n if (isTouchEvt && evt.touches.length >= 2) return up(evt);\n const lastScroll = dragTracker.readPoint(evt);\n const lastCross = dragTracker.readPoint(evt, crossAxis);\n const diffScroll = deltaAbs(lastScroll, startScroll);\n const diffCross = deltaAbs(lastCross, startCross);\n if (!preventScroll && !isMouse) {\n if (!evt.cancelable) return up(evt);\n preventScroll = diffScroll > diffCross;\n if (!preventScroll) return up(evt);\n }\n const diff = dragTracker.pointerMove(evt);\n if (diffScroll > dragThreshold) preventClick = true;\n scrollBody.useFriction(0.3).useDuration(0.75);\n animation.start();\n target.add(direction(diff));\n evt.preventDefault();\n }\n function up(evt) {\n const currentLocation = scrollTarget.byDistance(0, false);\n const targetChanged = currentLocation.index !== index.get();\n const rawForce = dragTracker.pointerUp(evt) * forceBoost();\n const force = allowedForce(direction(rawForce), targetChanged);\n const forceFactor = factorAbs(rawForce, force);\n const speed = baseSpeed - 10 * forceFactor;\n const friction = baseFriction + forceFactor / 50;\n preventScroll = false;\n pointerIsDown = false;\n dragEvents.clear();\n scrollBody.useDuration(speed).useFriction(friction);\n scrollTo.distance(force, !dragFree);\n isMouse = false;\n eventHandler.emit('pointerUp');\n }\n function click(evt) {\n if (preventClick) {\n evt.stopPropagation();\n evt.preventDefault();\n preventClick = false;\n }\n }\n function pointerDown() {\n return pointerIsDown;\n }\n const self = {\n init,\n destroy,\n pointerDown\n };\n return self;\n}\n\nfunction DragTracker(axis, ownerWindow) {\n const logInterval = 170;\n let startEvent;\n let lastEvent;\n function readTime(evt) {\n return evt.timeStamp;\n }\n function readPoint(evt, evtAxis) {\n const property = evtAxis || axis.scroll;\n const coord = `client${property === 'x' ? 'X' : 'Y'}`;\n return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord];\n }\n function pointerDown(evt) {\n startEvent = evt;\n lastEvent = evt;\n return readPoint(evt);\n }\n function pointerMove(evt) {\n const diff = readPoint(evt) - readPoint(lastEvent);\n const expired = readTime(evt) - readTime(startEvent) > logInterval;\n lastEvent = evt;\n if (expired) startEvent = evt;\n return diff;\n }\n function pointerUp(evt) {\n if (!startEvent || !lastEvent) return 0;\n const diffDrag = readPoint(lastEvent) - readPoint(startEvent);\n const diffTime = readTime(evt) - readTime(startEvent);\n const expired = readTime(evt) - readTime(lastEvent) > logInterval;\n const force = diffDrag / diffTime;\n const isFlick = diffTime && !expired && mathAbs(force) > 0.1;\n return isFlick ? force : 0;\n }\n const self = {\n pointerDown,\n pointerMove,\n pointerUp,\n readPoint\n };\n return self;\n}\n\nfunction NodeRects() {\n function measure(node) {\n const {\n offsetTop,\n offsetLeft,\n offsetWidth,\n offsetHeight\n } = node;\n const offset = {\n top: offsetTop,\n right: offsetLeft + offsetWidth,\n bottom: offsetTop + offsetHeight,\n left: offsetLeft,\n width: offsetWidth,\n height: offsetHeight\n };\n return offset;\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction PercentOfView(viewSize) {\n function measure(n) {\n return viewSize * (n / 100);\n }\n const self = {\n measure\n };\n return self;\n}\n\nfunction ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects) {\n const observeNodes = [container].concat(slides);\n let resizeObserver;\n let containerSize;\n let slideSizes = [];\n let destroyed = false;\n function readSize(node) {\n return axis.measureSize(nodeRects.measure(node));\n }\n function init(emblaApi) {\n if (!watchResize) return;\n containerSize = readSize(container);\n slideSizes = slides.map(readSize);\n function defaultCallback(entries) {\n for (const entry of entries) {\n if (destroyed) return;\n const isContainer = entry.target === container;\n const slideIndex = slides.indexOf(entry.target);\n const lastSize = isContainer ? containerSize : slideSizes[slideIndex];\n const newSize = readSize(isContainer ? container : slides[slideIndex]);\n const diffSize = mathAbs(newSize - lastSize);\n if (diffSize >= 0.5) {\n emblaApi.reInit();\n eventHandler.emit('resize');\n break;\n }\n }\n }\n resizeObserver = new ResizeObserver(entries => {\n if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n defaultCallback(entries);\n }\n });\n ownerWindow.requestAnimationFrame(() => {\n observeNodes.forEach(node => resizeObserver.observe(node));\n });\n }\n function destroy() {\n destroyed = true;\n if (resizeObserver) resizeObserver.disconnect();\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction ScrollBody(location, offsetLocation, previousLocation, target, baseDuration, baseFriction) {\n let scrollVelocity = 0;\n let scrollDirection = 0;\n let scrollDuration = baseDuration;\n let scrollFriction = baseFriction;\n let rawLocation = location.get();\n let rawLocationPrevious = 0;\n function seek() {\n const displacement = target.get() - location.get();\n const isInstant = !scrollDuration;\n let scrollDistance = 0;\n if (isInstant) {\n scrollVelocity = 0;\n previousLocation.set(target);\n location.set(target);\n scrollDistance = displacement;\n } else {\n previousLocation.set(location);\n scrollVelocity += displacement / scrollDuration;\n scrollVelocity *= scrollFriction;\n rawLocation += scrollVelocity;\n location.add(scrollVelocity);\n scrollDistance = rawLocation - rawLocationPrevious;\n }\n scrollDirection = mathSign(scrollDistance);\n rawLocationPrevious = rawLocation;\n return self;\n }\n function settled() {\n const diff = target.get() - offsetLocation.get();\n return mathAbs(diff) < 0.001;\n }\n function duration() {\n return scrollDuration;\n }\n function direction() {\n return scrollDirection;\n }\n function velocity() {\n return scrollVelocity;\n }\n function useBaseDuration() {\n return useDuration(baseDuration);\n }\n function useBaseFriction() {\n return useFriction(baseFriction);\n }\n function useDuration(n) {\n scrollDuration = n;\n return self;\n }\n function useFriction(n) {\n scrollFriction = n;\n return self;\n }\n const self = {\n direction,\n duration,\n velocity,\n seek,\n settled,\n useBaseFriction,\n useBaseDuration,\n useFriction,\n useDuration\n };\n return self;\n}\n\nfunction ScrollBounds(limit, location, target, scrollBody, percentOfView) {\n const pullBackThreshold = percentOfView.measure(10);\n const edgeOffsetTolerance = percentOfView.measure(50);\n const frictionLimit = Limit(0.1, 0.99);\n let disabled = false;\n function shouldConstrain() {\n if (disabled) return false;\n if (!limit.reachedAny(target.get())) return false;\n if (!limit.reachedAny(location.get())) return false;\n return true;\n }\n function constrain(pointerDown) {\n if (!shouldConstrain()) return;\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max';\n const diffToEdge = mathAbs(limit[edge] - location.get());\n const diffToTarget = target.get() - location.get();\n const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance);\n target.subtract(diffToTarget * friction);\n if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n target.set(limit.constrain(target.get()));\n scrollBody.useDuration(25).useBaseFriction();\n }\n }\n function toggleActive(active) {\n disabled = !active;\n }\n const self = {\n shouldConstrain,\n constrain,\n toggleActive\n };\n return self;\n}\n\nfunction ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance) {\n const scrollBounds = Limit(-contentSize + viewSize, 0);\n const snapsBounded = measureBounded();\n const scrollContainLimit = findScrollContainLimit();\n const snapsContained = measureContained();\n function usePixelTolerance(bound, snap) {\n return deltaAbs(bound, snap) <= 1;\n }\n function findScrollContainLimit() {\n const startSnap = snapsBounded[0];\n const endSnap = arrayLast(snapsBounded);\n const min = snapsBounded.lastIndexOf(startSnap);\n const max = snapsBounded.indexOf(endSnap) + 1;\n return Limit(min, max);\n }\n function measureBounded() {\n return snapsAligned.map((snapAligned, index) => {\n const {\n min,\n max\n } = scrollBounds;\n const snap = scrollBounds.constrain(snapAligned);\n const isFirst = !index;\n const isLast = arrayIsLastIndex(snapsAligned, index);\n if (isFirst) return max;\n if (isLast) return min;\n if (usePixelTolerance(min, snap)) return min;\n if (usePixelTolerance(max, snap)) return max;\n return snap;\n }).map(scrollBound => parseFloat(scrollBound.toFixed(3)));\n }\n function measureContained() {\n if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max];\n if (containScroll === 'keepSnaps') return snapsBounded;\n const {\n min,\n max\n } = scrollContainLimit;\n return snapsBounded.slice(min, max);\n }\n const self = {\n snapsContained,\n scrollContainLimit\n };\n return self;\n}\n\nfunction ScrollLimit(contentSize, scrollSnaps, loop) {\n const max = scrollSnaps[0];\n const min = loop ? max - contentSize : arrayLast(scrollSnaps);\n const limit = Limit(min, max);\n const self = {\n limit\n };\n return self;\n}\n\nfunction ScrollLooper(contentSize, limit, location, vectors) {\n const jointSafety = 0.1;\n const min = limit.min + jointSafety;\n const max = limit.max + jointSafety;\n const {\n reachedMin,\n reachedMax\n } = Limit(min, max);\n function shouldLoop(direction) {\n if (direction === 1) return reachedMax(location.get());\n if (direction === -1) return reachedMin(location.get());\n return false;\n }\n function loop(direction) {\n if (!shouldLoop(direction)) return;\n const loopDistance = contentSize * (direction * -1);\n vectors.forEach(v => v.add(loopDistance));\n }\n const self = {\n loop\n };\n return self;\n}\n\nfunction ScrollProgress(limit) {\n const {\n max,\n length\n } = limit;\n function get(n) {\n const currentLocation = n - max;\n return length ? currentLocation / -length : 0;\n }\n const self = {\n get\n };\n return self;\n}\n\nfunction ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll) {\n const {\n startEdge,\n endEdge\n } = axis;\n const {\n groupSlides\n } = slidesToScroll;\n const alignments = measureSizes().map(alignment.measure);\n const snaps = measureUnaligned();\n const snapsAligned = measureAligned();\n function measureSizes() {\n return groupSlides(slideRects).map(rects => arrayLast(rects)[endEdge] - rects[0][startEdge]).map(mathAbs);\n }\n function measureUnaligned() {\n return slideRects.map(rect => containerRect[startEdge] - rect[startEdge]).map(snap => -mathAbs(snap));\n }\n function measureAligned() {\n return groupSlides(snaps).map(g => g[0]).map((snap, index) => snap + alignments[index]);\n }\n const self = {\n snaps,\n snapsAligned\n };\n return self;\n}\n\nfunction SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes) {\n const {\n groupSlides\n } = slidesToScroll;\n const {\n min,\n max\n } = scrollContainLimit;\n const slideRegistry = createSlideRegistry();\n function createSlideRegistry() {\n const groupedSlideIndexes = groupSlides(slideIndexes);\n const doNotContain = !containSnaps || containScroll === 'keepSnaps';\n if (scrollSnaps.length === 1) return [slideIndexes];\n if (doNotContain) return groupedSlideIndexes;\n return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n const isFirst = !index;\n const isLast = arrayIsLastIndex(groups, index);\n if (isFirst) {\n const range = arrayLast(groups[0]) + 1;\n return arrayFromNumber(range);\n }\n if (isLast) {\n const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1;\n return arrayFromNumber(range, arrayLast(groups)[0]);\n }\n return group;\n });\n }\n const self = {\n slideRegistry\n };\n return self;\n}\n\nfunction ScrollTarget(loop, scrollSnaps, contentSize, limit, targetVector) {\n const {\n reachedAny,\n removeOffset,\n constrain\n } = limit;\n function minDistance(distances) {\n return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0];\n }\n function findTargetSnap(target) {\n const distance = loop ? removeOffset(target) : constrain(target);\n const ascDiffsToSnaps = scrollSnaps.map((snap, index) => ({\n diff: shortcut(snap - distance, 0),\n index\n })).sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff));\n const {\n index\n } = ascDiffsToSnaps[0];\n return {\n index,\n distance\n };\n }\n function shortcut(target, direction) {\n const targets = [target, target + contentSize, target - contentSize];\n if (!loop) return target;\n if (!direction) return minDistance(targets);\n const matchingTargets = targets.filter(t => mathSign(t) === direction);\n if (matchingTargets.length) return minDistance(matchingTargets);\n return arrayLast(targets) - contentSize;\n }\n function byIndex(index, direction) {\n const diffToSnap = scrollSnaps[index] - targetVector.get();\n const distance = shortcut(diffToSnap, direction);\n return {\n index,\n distance\n };\n }\n function byDistance(distance, snap) {\n const target = targetVector.get() + distance;\n const {\n index,\n distance: targetSnapDistance\n } = findTargetSnap(target);\n const reachedBound = !loop && reachedAny(target);\n if (!snap || reachedBound) return {\n index,\n distance\n };\n const diffToSnap = scrollSnaps[index] - targetSnapDistance;\n const snapDistance = distance + shortcut(diffToSnap, 0);\n return {\n index,\n distance: snapDistance\n };\n }\n const self = {\n byDistance,\n byIndex,\n shortcut\n };\n return self;\n}\n\nfunction ScrollTo(animation, indexCurrent, indexPrevious, scrollBody, scrollTarget, targetVector, eventHandler) {\n function scrollTo(target) {\n const distanceDiff = target.distance;\n const indexDiff = target.index !== indexCurrent.get();\n targetVector.add(distanceDiff);\n if (distanceDiff) {\n if (scrollBody.duration()) {\n animation.start();\n } else {\n animation.update();\n animation.render(1);\n animation.update();\n }\n }\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get());\n indexCurrent.set(target.index);\n eventHandler.emit('select');\n }\n }\n function distance(n, snap) {\n const target = scrollTarget.byDistance(n, snap);\n scrollTo(target);\n }\n function index(n, direction) {\n const targetIndex = indexCurrent.clone().set(n);\n const target = scrollTarget.byIndex(targetIndex.get(), direction);\n scrollTo(target);\n }\n const self = {\n distance,\n index\n };\n return self;\n}\n\nfunction SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus) {\n const focusListenerOptions = {\n passive: true,\n capture: true\n };\n let lastTabPressTime = 0;\n function init(emblaApi) {\n if (!watchFocus) return;\n function defaultCallback(index) {\n const nowTime = new Date().getTime();\n const diffTime = nowTime - lastTabPressTime;\n if (diffTime > 10) return;\n eventHandler.emit('slideFocusStart');\n root.scrollLeft = 0;\n const group = slideRegistry.findIndex(group => group.includes(index));\n if (!isNumber(group)) return;\n scrollBody.useDuration(0);\n scrollTo.index(group, 0);\n eventHandler.emit('slideFocus');\n }\n eventStore.add(document, 'keydown', registerTabPress, false);\n slides.forEach((slide, slideIndex) => {\n eventStore.add(slide, 'focus', evt => {\n if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n defaultCallback(slideIndex);\n }\n }, focusListenerOptions);\n });\n }\n function registerTabPress(event) {\n if (event.code === 'Tab') lastTabPressTime = new Date().getTime();\n }\n const self = {\n init\n };\n return self;\n}\n\nfunction Vector1D(initialValue) {\n let value = initialValue;\n function get() {\n return value;\n }\n function set(n) {\n value = normalizeInput(n);\n }\n function add(n) {\n value += normalizeInput(n);\n }\n function subtract(n) {\n value -= normalizeInput(n);\n }\n function normalizeInput(n) {\n return isNumber(n) ? n : n.get();\n }\n const self = {\n get,\n set,\n add,\n subtract\n };\n return self;\n}\n\nfunction Translate(axis, container) {\n const translate = axis.scroll === 'x' ? x : y;\n const containerStyle = container.style;\n let previousTarget = null;\n let disabled = false;\n function x(n) {\n return `translate3d(${n}px,0px,0px)`;\n }\n function y(n) {\n return `translate3d(0px,${n}px,0px)`;\n }\n function to(target) {\n if (disabled) return;\n const newTarget = roundToTwoDecimals(axis.direction(target));\n if (newTarget === previousTarget) return;\n containerStyle.transform = translate(newTarget);\n previousTarget = newTarget;\n }\n function toggleActive(active) {\n disabled = !active;\n }\n function clear() {\n if (disabled) return;\n containerStyle.transform = '';\n if (!container.getAttribute('style')) container.removeAttribute('style');\n }\n const self = {\n clear,\n to,\n toggleActive\n };\n return self;\n}\n\nfunction SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, location, slides) {\n const roundingSafety = 0.5;\n const ascItems = arrayKeys(slideSizesWithGaps);\n const descItems = arrayKeys(slideSizesWithGaps).reverse();\n const loopPoints = startPoints().concat(endPoints());\n function removeSlideSizes(indexes, from) {\n return indexes.reduce((a, i) => {\n return a - slideSizesWithGaps[i];\n }, from);\n }\n function slidesInGap(indexes, gap) {\n return indexes.reduce((a, i) => {\n const remainingGap = removeSlideSizes(a, gap);\n return remainingGap > 0 ? a.concat([i]) : a;\n }, []);\n }\n function findSlideBounds(offset) {\n return snaps.map((snap, index) => ({\n start: snap - slideSizes[index] + roundingSafety + offset,\n end: snap + viewSize - roundingSafety + offset\n }));\n }\n function findLoopPoints(indexes, offset, isEndEdge) {\n const slideBounds = findSlideBounds(offset);\n return indexes.map(index => {\n const initial = isEndEdge ? 0 : -contentSize;\n const altered = isEndEdge ? contentSize : 0;\n const boundEdge = isEndEdge ? 'end' : 'start';\n const loopPoint = slideBounds[index][boundEdge];\n return {\n index,\n loopPoint,\n slideLocation: Vector1D(-1),\n translate: Translate(axis, slides[index]),\n target: () => location.get() > loopPoint ? initial : altered\n };\n });\n }\n function startPoints() {\n const gap = scrollSnaps[0];\n const indexes = slidesInGap(descItems, gap);\n return findLoopPoints(indexes, contentSize, false);\n }\n function endPoints() {\n const gap = viewSize - scrollSnaps[0] - 1;\n const indexes = slidesInGap(ascItems, gap);\n return findLoopPoints(indexes, -contentSize, true);\n }\n function canLoop() {\n return loopPoints.every(({\n index\n }) => {\n const otherIndexes = ascItems.filter(i => i !== index);\n return removeSlideSizes(otherIndexes, viewSize) <= 0.1;\n });\n }\n function loop() {\n loopPoints.forEach(loopPoint => {\n const {\n target,\n translate,\n slideLocation\n } = loopPoint;\n const shiftLocation = target();\n if (shiftLocation === slideLocation.get()) return;\n translate.to(shiftLocation);\n slideLocation.set(shiftLocation);\n });\n }\n function clear() {\n loopPoints.forEach(loopPoint => loopPoint.translate.clear());\n }\n const self = {\n canLoop,\n clear,\n loop,\n loopPoints\n };\n return self;\n}\n\nfunction SlidesHandler(container, eventHandler, watchSlides) {\n let mutationObserver;\n let destroyed = false;\n function init(emblaApi) {\n if (!watchSlides) return;\n function defaultCallback(mutations) {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n emblaApi.reInit();\n eventHandler.emit('slidesChanged');\n break;\n }\n }\n }\n mutationObserver = new MutationObserver(mutations => {\n if (destroyed) return;\n if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n defaultCallback(mutations);\n }\n });\n mutationObserver.observe(container, {\n childList: true\n });\n }\n function destroy() {\n if (mutationObserver) mutationObserver.disconnect();\n destroyed = true;\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction SlidesInView(container, slides, eventHandler, threshold) {\n const intersectionEntryMap = {};\n let inViewCache = null;\n let notInViewCache = null;\n let intersectionObserver;\n let destroyed = false;\n function init() {\n intersectionObserver = new IntersectionObserver(entries => {\n if (destroyed) return;\n entries.forEach(entry => {\n const index = slides.indexOf(entry.target);\n intersectionEntryMap[index] = entry;\n });\n inViewCache = null;\n notInViewCache = null;\n eventHandler.emit('slidesInView');\n }, {\n root: container.parentElement,\n threshold\n });\n slides.forEach(slide => intersectionObserver.observe(slide));\n }\n function destroy() {\n if (intersectionObserver) intersectionObserver.disconnect();\n destroyed = true;\n }\n function createInViewList(inView) {\n return objectKeys(intersectionEntryMap).reduce((list, slideIndex) => {\n const index = parseInt(slideIndex);\n const {\n isIntersecting\n } = intersectionEntryMap[index];\n const inViewMatch = inView && isIntersecting;\n const notInViewMatch = !inView && !isIntersecting;\n if (inViewMatch || notInViewMatch) list.push(index);\n return list;\n }, []);\n }\n function get(inView = true) {\n if (inView && inViewCache) return inViewCache;\n if (!inView && notInViewCache) return notInViewCache;\n const slideIndexes = createInViewList(inView);\n if (inView) inViewCache = slideIndexes;\n if (!inView) notInViewCache = slideIndexes;\n return slideIndexes;\n }\n const self = {\n init,\n destroy,\n get\n };\n return self;\n}\n\nfunction SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow) {\n const {\n measureSize,\n startEdge,\n endEdge\n } = axis;\n const withEdgeGap = slideRects[0] && readEdgeGap;\n const startGap = measureStartGap();\n const endGap = measureEndGap();\n const slideSizes = slideRects.map(measureSize);\n const slideSizesWithGaps = measureWithGaps();\n function measureStartGap() {\n if (!withEdgeGap) return 0;\n const slideRect = slideRects[0];\n return mathAbs(containerRect[startEdge] - slideRect[startEdge]);\n }\n function measureEndGap() {\n if (!withEdgeGap) return 0;\n const style = ownerWindow.getComputedStyle(arrayLast(slides));\n return parseFloat(style.getPropertyValue(`margin-${endEdge}`));\n }\n function measureWithGaps() {\n return slideRects.map((rect, index, rects) => {\n const isFirst = !index;\n const isLast = arrayIsLastIndex(rects, index);\n if (isFirst) return slideSizes[index] + startGap;\n if (isLast) return slideSizes[index] + endGap;\n return rects[index + 1][startEdge] - rect[startEdge];\n }).map(mathAbs);\n }\n const self = {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n };\n return self;\n}\n\nfunction SlidesToScroll(axis, viewSize, slidesToScroll, loop, containerRect, slideRects, startGap, endGap, pixelTolerance) {\n const {\n startEdge,\n endEdge,\n direction\n } = axis;\n const groupByNumber = isNumber(slidesToScroll);\n function byNumber(array, groupSize) {\n return arrayKeys(array).filter(i => i % groupSize === 0).map(i => array.slice(i, i + groupSize));\n }\n function bySize(array) {\n if (!array.length) return [];\n return arrayKeys(array).reduce((groups, rectB, index) => {\n const rectA = arrayLast(groups) || 0;\n const isFirst = rectA === 0;\n const isLast = rectB === arrayLastIndex(array);\n const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge];\n const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge];\n const gapA = !loop && isFirst ? direction(startGap) : 0;\n const gapB = !loop && isLast ? direction(endGap) : 0;\n const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA));\n if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB);\n if (isLast) groups.push(array.length);\n return groups;\n }, []).map((currentSize, index, groups) => {\n const previousSize = Math.max(groups[index - 1] || 0);\n return array.slice(previousSize, currentSize);\n });\n }\n function groupSlides(array) {\n return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array);\n }\n const self = {\n groupSlides\n };\n return self;\n}\n\nfunction Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler) {\n // Options\n const {\n align,\n axis: scrollAxis,\n direction,\n startIndex,\n loop,\n duration,\n dragFree,\n dragThreshold,\n inViewThreshold,\n slidesToScroll: groupSlides,\n skipSnaps,\n containScroll,\n watchResize,\n watchSlides,\n watchDrag,\n watchFocus\n } = options;\n // Measurements\n const pixelTolerance = 2;\n const nodeRects = NodeRects();\n const containerRect = nodeRects.measure(container);\n const slideRects = slides.map(nodeRects.measure);\n const axis = Axis(scrollAxis, direction);\n const viewSize = axis.measureSize(containerRect);\n const percentOfView = PercentOfView(viewSize);\n const alignment = Alignment(align, viewSize);\n const containSnaps = !loop && !!containScroll;\n const readEdgeGap = loop || !!containScroll;\n const {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n } = SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow);\n const slidesToScroll = SlidesToScroll(axis, viewSize, groupSlides, loop, containerRect, slideRects, startGap, endGap, pixelTolerance);\n const {\n snaps,\n snapsAligned\n } = ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll);\n const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps);\n const {\n snapsContained,\n scrollContainLimit\n } = ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance);\n const scrollSnaps = containSnaps ? snapsContained : snapsAligned;\n const {\n limit\n } = ScrollLimit(contentSize, scrollSnaps, loop);\n // Indexes\n const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop);\n const indexPrevious = index.clone();\n const slideIndexes = arrayKeys(slides);\n // Animation\n const update = ({\n dragHandler,\n scrollBody,\n scrollBounds,\n options: {\n loop\n }\n }) => {\n if (!loop) scrollBounds.constrain(dragHandler.pointerDown());\n scrollBody.seek();\n };\n const render = ({\n scrollBody,\n translate,\n location,\n offsetLocation,\n previousLocation,\n scrollLooper,\n slideLooper,\n dragHandler,\n animation,\n eventHandler,\n scrollBounds,\n options: {\n loop\n }\n }, alpha) => {\n const shouldSettle = scrollBody.settled();\n const withinBounds = !scrollBounds.shouldConstrain();\n const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds;\n const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown();\n if (hasSettledAndIdle) animation.stop();\n const interpolatedLocation = location.get() * alpha + previousLocation.get() * (1 - alpha);\n offsetLocation.set(interpolatedLocation);\n if (loop) {\n scrollLooper.loop(scrollBody.direction());\n slideLooper.loop();\n }\n translate.to(offsetLocation.get());\n if (hasSettledAndIdle) eventHandler.emit('settle');\n if (!hasSettled) eventHandler.emit('scroll');\n };\n const animation = Animations(ownerDocument, ownerWindow, () => update(engine), alpha => render(engine, alpha));\n // Shared\n const friction = 0.68;\n const startLocation = scrollSnaps[index.get()];\n const location = Vector1D(startLocation);\n const previousLocation = Vector1D(startLocation);\n const offsetLocation = Vector1D(startLocation);\n const target = Vector1D(startLocation);\n const scrollBody = ScrollBody(location, offsetLocation, previousLocation, target, duration, friction);\n const scrollTarget = ScrollTarget(loop, scrollSnaps, contentSize, limit, target);\n const scrollTo = ScrollTo(animation, index, indexPrevious, scrollBody, scrollTarget, target, eventHandler);\n const scrollProgress = ScrollProgress(limit);\n const eventStore = EventStore();\n const slidesInView = SlidesInView(container, slides, eventHandler, inViewThreshold);\n const {\n slideRegistry\n } = SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes);\n const slideFocus = SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus);\n // Engine\n const engine = {\n ownerDocument,\n ownerWindow,\n eventHandler,\n containerRect,\n slideRects,\n animation,\n axis,\n dragHandler: DragHandler(axis, root, ownerDocument, ownerWindow, target, DragTracker(axis, ownerWindow), location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, friction, watchDrag),\n eventStore,\n percentOfView,\n index,\n indexPrevious,\n limit,\n location,\n offsetLocation,\n previousLocation,\n options,\n resizeHandler: ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects),\n scrollBody,\n scrollBounds: ScrollBounds(limit, offsetLocation, target, scrollBody, percentOfView),\n scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [location, offsetLocation, previousLocation, target]),\n scrollProgress,\n scrollSnapList: scrollSnaps.map(scrollProgress.get),\n scrollSnaps,\n scrollTarget,\n scrollTo,\n slideLooper: SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, offsetLocation, slides),\n slideFocus,\n slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n slidesInView,\n slideIndexes,\n slideRegistry,\n slidesToScroll,\n target,\n translate: Translate(axis, container)\n };\n return engine;\n}\n\nfunction EventHandler() {\n let listeners = {};\n let api;\n function init(emblaApi) {\n api = emblaApi;\n }\n function getListeners(evt) {\n return listeners[evt] || [];\n }\n function emit(evt) {\n getListeners(evt).forEach(e => e(api, evt));\n return self;\n }\n function on(evt, cb) {\n listeners[evt] = getListeners(evt).concat([cb]);\n return self;\n }\n function off(evt, cb) {\n listeners[evt] = getListeners(evt).filter(e => e !== cb);\n return self;\n }\n function clear() {\n listeners = {};\n }\n const self = {\n init,\n emit,\n off,\n on,\n clear\n };\n return self;\n}\n\nconst defaultOptions = {\n align: 'center',\n axis: 'x',\n container: null,\n slides: null,\n containScroll: 'trimSnaps',\n direction: 'ltr',\n slidesToScroll: 1,\n inViewThreshold: 0,\n breakpoints: {},\n dragFree: false,\n dragThreshold: 10,\n loop: false,\n skipSnaps: false,\n duration: 25,\n startIndex: 0,\n active: true,\n watchDrag: true,\n watchResize: true,\n watchSlides: true,\n watchFocus: true\n};\n\nfunction OptionsHandler(ownerWindow) {\n function mergeOptions(optionsA, optionsB) {\n return objectsMergeDeep(optionsA, optionsB || {});\n }\n function optionsAtMedia(options) {\n const optionsAtMedia = options.breakpoints || {};\n const matchedMediaOptions = objectKeys(optionsAtMedia).filter(media => ownerWindow.matchMedia(media).matches).map(media => optionsAtMedia[media]).reduce((a, mediaOption) => mergeOptions(a, mediaOption), {});\n return mergeOptions(options, matchedMediaOptions);\n }\n function optionsMediaQueries(optionsList) {\n return optionsList.map(options => objectKeys(options.breakpoints || {})).reduce((acc, mediaQueries) => acc.concat(mediaQueries), []).map(ownerWindow.matchMedia);\n }\n const self = {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n };\n return self;\n}\n\nfunction PluginsHandler(optionsHandler) {\n let activePlugins = [];\n function init(emblaApi, plugins) {\n activePlugins = plugins.filter(({\n options\n }) => optionsHandler.optionsAtMedia(options).active !== false);\n activePlugins.forEach(plugin => plugin.init(emblaApi, optionsHandler));\n return plugins.reduce((map, plugin) => Object.assign(map, {\n [plugin.name]: plugin\n }), {});\n }\n function destroy() {\n activePlugins = activePlugins.filter(plugin => plugin.destroy());\n }\n const self = {\n init,\n destroy\n };\n return self;\n}\n\nfunction EmblaCarousel(root, userOptions, userPlugins) {\n const ownerDocument = root.ownerDocument;\n const ownerWindow = ownerDocument.defaultView;\n const optionsHandler = OptionsHandler(ownerWindow);\n const pluginsHandler = PluginsHandler(optionsHandler);\n const mediaHandlers = EventStore();\n const eventHandler = EventHandler();\n const {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n } = optionsHandler;\n const {\n on,\n off,\n emit\n } = eventHandler;\n const reInit = reActivate;\n let destroyed = false;\n let engine;\n let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions);\n let options = mergeOptions(optionsBase);\n let pluginList = [];\n let pluginApis;\n let container;\n let slides;\n function storeElements() {\n const {\n container: userContainer,\n slides: userSlides\n } = options;\n const customContainer = isString(userContainer) ? root.querySelector(userContainer) : userContainer;\n container = customContainer || root.children[0];\n const customSlides = isString(userSlides) ? container.querySelectorAll(userSlides) : userSlides;\n slides = [].slice.call(customSlides || container.children);\n }\n function createEngine(options) {\n const engine = Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler);\n if (options.loop && !engine.slideLooper.canLoop()) {\n const optionsWithoutLoop = Object.assign({}, options, {\n loop: false\n });\n return createEngine(optionsWithoutLoop);\n }\n return engine;\n }\n function activate(withOptions, withPlugins) {\n if (destroyed) return;\n optionsBase = mergeOptions(optionsBase, withOptions);\n options = optionsAtMedia(optionsBase);\n pluginList = withPlugins || pluginList;\n storeElements();\n engine = createEngine(options);\n optionsMediaQueries([optionsBase, ...pluginList.map(({\n options\n }) => options)]).forEach(query => mediaHandlers.add(query, 'change', reActivate));\n if (!options.active) return;\n engine.translate.to(engine.location.get());\n engine.animation.init();\n engine.slidesInView.init();\n engine.slideFocus.init(self);\n engine.eventHandler.init(self);\n engine.resizeHandler.init(self);\n engine.slidesHandler.init(self);\n if (engine.options.loop) engine.slideLooper.loop();\n if (container.offsetParent && slides.length) engine.dragHandler.init(self);\n pluginApis = pluginsHandler.init(self, pluginList);\n }\n function reActivate(withOptions, withPlugins) {\n const startIndex = selectedScrollSnap();\n deActivate();\n activate(mergeOptions({\n startIndex\n }, withOptions), withPlugins);\n eventHandler.emit('reInit');\n }\n function deActivate() {\n engine.dragHandler.destroy();\n engine.eventStore.clear();\n engine.translate.clear();\n engine.slideLooper.clear();\n engine.resizeHandler.destroy();\n engine.slidesHandler.destroy();\n engine.slidesInView.destroy();\n engine.animation.destroy();\n pluginsHandler.destroy();\n mediaHandlers.clear();\n }\n function destroy() {\n if (destroyed) return;\n destroyed = true;\n mediaHandlers.clear();\n deActivate();\n eventHandler.emit('destroy');\n eventHandler.clear();\n }\n function scrollTo(index, jump, direction) {\n if (!options.active || destroyed) return;\n engine.scrollBody.useBaseFriction().useDuration(jump === true ? 0 : options.duration);\n engine.scrollTo.index(index, direction || 0);\n }\n function scrollNext(jump) {\n const next = engine.index.add(1).get();\n scrollTo(next, jump, -1);\n }\n function scrollPrev(jump) {\n const prev = engine.index.add(-1).get();\n scrollTo(prev, jump, 1);\n }\n function canScrollNext() {\n const next = engine.index.add(1).get();\n return next !== selectedScrollSnap();\n }\n function canScrollPrev() {\n const prev = engine.index.add(-1).get();\n return prev !== selectedScrollSnap();\n }\n function scrollSnapList() {\n return engine.scrollSnapList;\n }\n function scrollProgress() {\n return engine.scrollProgress.get(engine.offsetLocation.get());\n }\n function selectedScrollSnap() {\n return engine.index.get();\n }\n function previousScrollSnap() {\n return engine.indexPrevious.get();\n }\n function slidesInView() {\n return engine.slidesInView.get();\n }\n function slidesNotInView() {\n return engine.slidesInView.get(false);\n }\n function plugins() {\n return pluginApis;\n }\n function internalEngine() {\n return engine;\n }\n function rootNode() {\n return root;\n }\n function containerNode() {\n return container;\n }\n function slideNodes() {\n return slides;\n }\n const self = {\n canScrollNext,\n canScrollPrev,\n containerNode,\n internalEngine,\n destroy,\n off,\n on,\n emit,\n plugins,\n previousScrollSnap,\n reInit,\n rootNode,\n scrollNext,\n scrollPrev,\n scrollProgress,\n scrollSnapList,\n scrollTo,\n selectedScrollSnap,\n slideNodes,\n slidesInView,\n slidesNotInView\n };\n activate(userOptions, userPlugins);\n setTimeout(() => eventHandler.emit('init'), 0);\n return self;\n}\nEmblaCarousel.globalOptions = undefined;\n\nexport { EmblaCarousel as default };\n//# sourceMappingURL=embla-carousel.esm.js.map\n","const defaultOptions = {\n active: true,\n breakpoints: {},\n delay: 4000,\n jump: false,\n playOnInit: true,\n stopOnFocusIn: true,\n stopOnInteraction: true,\n stopOnMouseEnter: false,\n stopOnLastSnap: false,\n rootNode: null\n};\n\nfunction normalizeDelay(emblaApi, delay) {\n const scrollSnaps = emblaApi.scrollSnapList();\n if (typeof delay === 'number') {\n return scrollSnaps.map(() => delay);\n }\n return delay(scrollSnaps, emblaApi);\n}\nfunction getAutoplayRootNode(emblaApi, rootNode) {\n const emblaRootNode = emblaApi.rootNode();\n return rootNode && rootNode(emblaRootNode) || emblaRootNode;\n}\n\nfunction Autoplay(userOptions = {}) {\n let options;\n let emblaApi;\n let destroyed;\n let delay;\n let timerStartTime = null;\n let timerId = 0;\n let autoplayActive = false;\n let mouseIsOver = false;\n let playOnDocumentVisible = false;\n let jump = false;\n function init(emblaApiInstance, optionsHandler) {\n emblaApi = emblaApiInstance;\n const {\n mergeOptions,\n optionsAtMedia\n } = optionsHandler;\n const optionsBase = mergeOptions(defaultOptions, Autoplay.globalOptions);\n const allOptions = mergeOptions(optionsBase, userOptions);\n options = optionsAtMedia(allOptions);\n if (emblaApi.scrollSnapList().length <= 1) return;\n jump = options.jump;\n destroyed = false;\n delay = normalizeDelay(emblaApi, options.delay);\n const {\n eventStore,\n ownerDocument\n } = emblaApi.internalEngine();\n const isDraggable = !!emblaApi.internalEngine().options.watchDrag;\n const root = getAutoplayRootNode(emblaApi, options.rootNode);\n eventStore.add(ownerDocument, 'visibilitychange', visibilityChange);\n if (isDraggable) {\n emblaApi.on('pointerDown', pointerDown);\n }\n if (isDraggable && !options.stopOnInteraction) {\n emblaApi.on('pointerUp', pointerUp);\n }\n if (options.stopOnMouseEnter) {\n eventStore.add(root, 'mouseenter', mouseEnter);\n }\n if (options.stopOnMouseEnter && !options.stopOnInteraction) {\n eventStore.add(root, 'mouseleave', mouseLeave);\n }\n if (options.stopOnFocusIn) {\n emblaApi.on('slideFocusStart', stopAutoplay);\n }\n if (options.stopOnFocusIn && !options.stopOnInteraction) {\n eventStore.add(emblaApi.containerNode(), 'focusout', startAutoplay);\n }\n if (options.playOnInit) startAutoplay();\n }\n function destroy() {\n emblaApi.off('pointerDown', pointerDown).off('pointerUp', pointerUp).off('slideFocusStart', stopAutoplay);\n stopAutoplay();\n destroyed = true;\n autoplayActive = false;\n }\n function setTimer() {\n const {\n ownerWindow\n } = emblaApi.internalEngine();\n ownerWindow.clearTimeout(timerId);\n timerId = ownerWindow.setTimeout(next, delay[emblaApi.selectedScrollSnap()]);\n timerStartTime = new Date().getTime();\n emblaApi.emit('autoplay:timerset');\n }\n function clearTimer() {\n const {\n ownerWindow\n } = emblaApi.internalEngine();\n ownerWindow.clearTimeout(timerId);\n timerId = 0;\n timerStartTime = null;\n emblaApi.emit('autoplay:timerstopped');\n }\n function startAutoplay() {\n if (destroyed) return;\n if (documentIsHidden()) {\n playOnDocumentVisible = true;\n return;\n }\n if (!autoplayActive) emblaApi.emit('autoplay:play');\n setTimer();\n autoplayActive = true;\n }\n function stopAutoplay() {\n if (destroyed) return;\n if (autoplayActive) emblaApi.emit('autoplay:stop');\n clearTimer();\n autoplayActive = false;\n }\n function visibilityChange() {\n if (documentIsHidden()) {\n playOnDocumentVisible = autoplayActive;\n return stopAutoplay();\n }\n if (playOnDocumentVisible) startAutoplay();\n }\n function documentIsHidden() {\n const {\n ownerDocument\n } = emblaApi.internalEngine();\n return ownerDocument.visibilityState === 'hidden';\n }\n function pointerDown() {\n if (!mouseIsOver) stopAutoplay();\n }\n function pointerUp() {\n if (!mouseIsOver) startAutoplay();\n }\n function mouseEnter() {\n mouseIsOver = true;\n stopAutoplay();\n }\n function mouseLeave() {\n mouseIsOver = false;\n startAutoplay();\n }\n function play(jumpOverride) {\n if (typeof jumpOverride !== 'undefined') jump = jumpOverride;\n startAutoplay();\n }\n function stop() {\n if (autoplayActive) stopAutoplay();\n }\n function reset() {\n if (autoplayActive) startAutoplay();\n }\n function isPlaying() {\n return autoplayActive;\n }\n function next() {\n const {\n index\n } = emblaApi.internalEngine();\n const nextIndex = index.clone().add(1).get();\n const lastIndex = emblaApi.scrollSnapList().length - 1;\n const kill = options.stopOnLastSnap && nextIndex === lastIndex;\n if (emblaApi.canScrollNext()) {\n emblaApi.scrollNext(jump);\n } else {\n emblaApi.scrollTo(0, jump);\n }\n emblaApi.emit('autoplay:select');\n if (kill) return stopAutoplay();\n startAutoplay();\n }\n function timeUntilNext() {\n if (!timerStartTime) return null;\n const currentDelay = delay[emblaApi.selectedScrollSnap()];\n const timePastSinceStart = new Date().getTime() - timerStartTime;\n return currentDelay - timePastSinceStart;\n }\n const self = {\n name: 'autoplay',\n options: userOptions,\n init,\n destroy,\n play,\n stop,\n reset,\n isPlaying,\n timeUntilNext\n };\n return self;\n}\nAutoplay.globalOptions = undefined;\n\nexport { Autoplay as default };\n//# sourceMappingURL=embla-carousel-autoplay.esm.js.map\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nfunction*o(o,f){if(void 0!==o){let i=0;for(const t of o)yield f(t,i++)}}export{o as map};\n//# sourceMappingURL=map.js.map\n",":host {\n --slide-height: 19rem;\n --slide-size: 100%;\n --slide-gap: 0;\n\n --button-size: 48px;\n --button-arrow-size: 20px;\n --button-arrow-color: #4b5563;\n --button-offset: 8px;\n --button-border-color: #e5e7eb;\n --button-border-radius: 8px;\n --button-bg: rgba(255, 255, 255, 0.8);\n --button-color: inherit;\n --button-box-shadow-hover: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n\n --dot-color: #9ca3af;\n --dot-color-active: #111827;\n --dot-margin: 0.5rem 0;\n --dot-edge-scale: 0.5;\n\n --scrollbar-color: #d1d5db transparent;\n\n display: block;\n /* Note: moving this elsewhere (e.g wrapper) may bug the container translate position */\n position: relative;\n container-type: inline-size;\n}\n\n:host([single]) {\n --slide-size: 100%;\n --slide-gap: 0;\n}\n\n:host([axis='y']) .container {\n flex-direction: column;\n max-height: var(--slide-height);\n}\n\n:host([axis='y']) .viewport {\n max-height: var(--slide-height);\n}\n\n.viewport {\n overflow: hidden;\n}\n\n:host([with-scrollbar]) .viewport {\n overflow-x: scroll;\n scrollbar-color: var(--scrollbar-color); /* progress / track */\n scrollbar-gutter: stable both-edges;\n scrollbar-width: thin;\n}\n\n.container {\n backface-visibility: hidden;\n display: flex;\n gap: var(--slide-gap);\n touch-action: pan-y pinch-zoom;\n}\n\n::slotted(l-carousel-item) {\n flex: 0 0 var(--slide-size);\n min-width: 0;\n}\n\n/*\n ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n SCROLL BUTTONS\n ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n */\n.scroll-buttons--inside {\n position: absolute;\n inset: 0;\n pointer-events: none;\n}\n\n.scroll-buttons--outside {\n display: flex;\n gap: 8px;\n justify-content: end;\n padding-block: 8px;\n}\n\n.scroll-buttons--disabled,\n.inactive .scroll-buttons {\n display: none;\n}\n\n.button-next,\n.button-previous,\n.button-fullscreen {\n display: flex;\n align-items: center;\n justify-content: center;\n appearance: none;\n touch-action: manipulation;\n border: 1px solid var(--button-border-color);\n border-radius: var(--button-border-radius);\n width: var(--button-size);\n height: var(--button-size);\n background-color: var(--button-bg);\n color: var(--button-color);\n cursor: pointer;\n pointer-events: auto;\n -webkit-tap-highlight-color: rgba(49, 49, 49, 0.5);\n}\n\n.scroll-buttons--inside .button-previous,\n.scroll-buttons--inside .button-next,\n.button-fullscreen {\n position: absolute;\n top: calc(50% - (var(--button-size) / 2));\n z-index: 1;\n}\n\n.scroll-buttons--inside .button-previous {\n left: var(--button-offset);\n}\n\n.scroll-buttons--inside .button-next {\n right: var(--button-offset);\n}\n\n.scroll-buttons--inside .button:disabled {\n visibility: hidden;\n}\n\n.button:disabled {\n cursor: not-allowed;\n pointer-events: none;\n opacity: 0.4;\n}\n\n.button-fullscreen {\n border-radius: 4px;\n right: var(--button-offset);\n top: var(--button-offset);\n width: calc(var(--button-size) * 0.75);\n height: calc(var(--button-size) * 0.75);\n}\n\n@container (min-width: 640px) {\n .button-fullscreen {\n width: var(--button-size);\n height: var(--button-size);\n }\n}\n\n@media (hover: hover) {\n .button:hover:not(:disabled) {\n box-shadow: var(--button-box-shadow-hover);\n }\n}\n\n.button svg {\n width: var(--button-arrow-size);\n height: var(--button-arrow-size);\n color: var(--button-arrow-color);\n}\n\n/*\n ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n DOTS\n ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\n */\n\n.dots {\n display: flex;\n justify-content: center;\n margin: var(--dot-margin);\n}\n\n.dot {\n appearance: none;\n display: inline-flex;\n align-items: center;\n justify-items: center;\n touch-action: manipulation;\n background: none;\n padding-inline: 0.25rem;\n padding-block: 0.5rem;\n border: 0;\n cursor: pointer;\n transition: transform 180ms ease;\n transform-origin: center;\n}\n\n.dot[data-edge] {\n transform: scale(var(--dot-edge-scale));\n}\n\n.dot--bar i {\n background: var(--dot-color);\n height: 0.125rem;\n width: 1rem;\n}\n\n.dot--selected i {\n background: var(--dot-color-active);\n}\n\n.dot--circle i {\n display: inline-block;\n width: 10px;\n height: 10px;\n border-radius: 8px;\n border: 2px solid var(--dot-color-active);\n}\n\n.dot--circle.dot--selected i {\n width: 30px;\n}\n","import type { EmblaCarouselType, EmblaOptionsType } from 'embla-carousel';\nimport EmblaCarousel from 'embla-carousel';\n\ntype AxisOptionType = 'x' | 'y';\ntype AlignmentOptionType =\n | 'start'\n | 'center'\n | 'end'\n | ((viewSize: number, snapSize: number, index: number) => number);\ntype SlidesToScrollOptionType = 'auto' | number;\ntype ScrollContainOptionType = 'trimSnaps' | 'keepSnaps' | false;\nimport Autoplay from 'embla-carousel-autoplay';\nimport { html, nothing, unsafeCSS, type PropertyValues, type CSSResultGroup } from 'lit';\nimport { property, query, state } from 'lit/decorators.js';\nimport { map } from 'lit/directives/map.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './carousel.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * Carousel custom element based on Embla Carousel.\n *\n * @csspart viewport - The carousel viewport container.\n * @csspart container - The slides container slot.\n * @csspart scroll-buttons - The scroll buttons wrapper.\n * @csspart button - Any navigation button.\n * @csspart button-previous - The previous slide navigation button.\n * @csspart button-next - The next slide navigation button.\n * @csspart button-dot - Any dot navigation button.\n * @csspart dots - The dots navigation wrapper.\n * @csspart button-fullscreen - The fullscreen button.\n * @csspart button-icon - Any button icon SVG.\n *\n * @cssproperty --slide-height - Height of slides in vertical axis mode.\n * @cssproperty --slide-size - Width of each slide (e.g. `100%`, `calc(100% / 3)`).\n * @cssproperty --slide-gap - Gap between slides.\n * @cssproperty --button-size - Size of navigation buttons.\n * @cssproperty --button-arrow-size - Size of arrow icons inside buttons.\n * @cssproperty --button-arrow-color - Color of arrow icons.\n * @cssproperty --button-offset - Offset of inside-positioned buttons from edges.\n * @cssproperty --button-border-color - Border color of buttons.\n * @cssproperty --button-border-radius - Border radius of buttons.\n * @cssproperty --button-bg - Background color of buttons.\n * @cssproperty --button-color - Text/icon color of buttons.\n * @cssproperty --dot-color - Color of inactive dots.\n * @cssproperty --dot-color-active - Color of active dot.\n * @cssproperty --dot-margin - Margin around dots container.\n * @cssproperty --dot-edge-scale - Scale factor applied to edge dots that signal more dots exist beyond the visible window (default `0.5`).\n */\nexport class Carousel extends LuxenElement {\n static override styles: CSSResultGroup = [hostStyles, styles];\n\n embla!: EmblaCarouselType;\n\n /**\n * Choose a delay between transitions in milliseconds (default: 4000).\n */\n @property({ type: Number, reflect: true })\n accessor autoplay = 0;\n\n /**\n * Configure autoplay options.\n *\n * @link https://www.embla-carousel.com/plugins/autoplay/#options\n */\n @property({ type: Object, attribute: 'autoplay-options' })\n accessor autoplayOptions: any;\n\n /**\n * Choose scroll axis between x and y.\n *\n * @link https://www.embla-carousel.com/api/options/#axis\n */\n @property()\n accessor axis: AxisOptionType = 'x';\n\n /**\n * Align the slides relative to the carousel viewport.\n *\n * @link https://www.embla-carousel.com/api/options/#align\n */\n @property()\n accessor align: AlignmentOptionType = 'start';\n\n /**\n * Breakpoint overrides for options.\n */\n @property({ type: Object, reflect: true })\n accessor breakpoints: any = {};\n\n /**\n * Enables infinite looping.\n *\n * @link https://www.embla-carousel.com/api/options/#loop\n */\n @property({ type: Boolean })\n accessor loop = false;\n\n /**\n * Enables momentum scrolling (drag free).\n *\n * @link https://www.embla-carousel.com/api/options/#dragfree\n */\n @property({ type: Boolean, attribute: 'drag-free' })\n accessor dragFree = false;\n\n /**\n * Set scroll duration when triggered by API methods.\n *\n * @link https://www.embla-carousel.com/api/options/#duration\n */\n @property({ type: Number })\n accessor duration = 20;\n\n /**\n * Allow skipping scroll snaps on vigorous drag.\n *\n * @link https://www.embla-carousel.com/api/options/#skipsnaps\n */\n @property({ type: Boolean, attribute: 'skip-snaps' })\n accessor skipSnaps = false;\n\n /**\n * Group slides together for navigation.\n *\n * @link https://www.embla-carousel.com/api/options/#slidestoscroll\n */\n @property({ attribute: 'slides-to-scroll' })\n accessor slidesToScroll: SlidesToScrollOptionType = 1;\n\n /**\n * Set the initial scroll snap index.\n *\n * @link https://www.embla-carousel.com/api/options/#startindex\n */\n @property({ type: Number, attribute: 'start-index' })\n accessor startIndex = 0;\n\n /**\n * Clear leading and trailing empty space.\n *\n * @link https://www.embla-carousel.com/api/options/#containscroll\n */\n @property({ attribute: 'contain-scroll' })\n accessor containScroll: ScrollContainOptionType = 'trimSnaps';\n\n @property({ type: Boolean })\n accessor single = false;\n\n @property({ type: Boolean, attribute: 'with-dots' })\n accessor withDots = false;\n\n @property({ type: Boolean, attribute: 'with-scrollbar' })\n accessor withScrollbar = false;\n\n @property({ type: Boolean, attribute: 'with-fullscreen' })\n accessor withFullscreen = false;\n\n @property({ type: String, attribute: 'dot-appearance' })\n accessor dotAppearance: 'circle' | 'bar' = 'bar';\n\n /**\n * Maximum number of dots rendered at once. When the snap count exceeds this,\n * a sliding window keeps the active dot in view and shrinks the edge dot(s)\n * on the side where dots are hidden. `0` (default) renders all dots.\n */\n @property({ type: Number, attribute: 'max-visible-dots' })\n accessor maxVisibleDots = 0;\n\n @property({ type: String, attribute: 'scroll-buttons-position' })\n accessor scrollButtonsPosition: 'inside' | 'outside' = 'inside';\n\n @state() private accessor _selectedSnap = 0;\n\n @query('.scroll-buttons') scrollButtons!: HTMLElement;\n @query('.button-previous') previousBtn!: HTMLButtonElement;\n @query('.button-next') nextBtn!: HTMLButtonElement;\n @query('.container') container!: HTMLSlotElement;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.createEmbla();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n if (this.embla) {\n this.embla.destroy();\n }\n }\n\n protected override firstUpdated(): void {\n this.attachEventListeners();\n }\n\n protected createEmbla() {\n this.embla = EmblaCarousel(this, this.options());\n this.embla\n .on('init', this.onInit)\n .on('reInit', this.onReInit)\n .on('resize', this.onResize)\n .on('slidesInView', this.onSlidesInView)\n .on('select', this.onSelect)\n .on('destroy', this.detachEventListeners);\n }\n\n protected onSlidesInView = () => {\n this.emit('slides-in-view', {\n detail: { indexes: this.embla.slidesInView() },\n });\n };\n\n protected onInit = () => {\n this.updateNavigation();\n };\n\n protected onReInit = () => {\n this.updateNavigation();\n this.requestUpdate();\n };\n\n protected onSelect = () => {\n this.emit('select', {\n detail: { index: this.embla.selectedScrollSnap() },\n });\n this.updateNavigation();\n };\n\n protected onResize = () => {\n this.requestUpdate();\n };\n\n protected attachEventListeners() {\n this.previousBtn.addEventListener('click', this.previous);\n this.nextBtn.addEventListener('click', this.next);\n }\n\n protected detachEventListeners = () => {\n this.previousBtn.removeEventListener('click', this.previous);\n this.nextBtn.removeEventListener('click', this.next);\n };\n\n protected updateNavigation() {\n const canScroll = this.embla.canScrollPrev() || this.embla.canScrollNext();\n\n this.previousBtn.toggleAttribute('disabled', !this.embla.canScrollPrev());\n this.nextBtn.toggleAttribute('disabled', !this.embla.canScrollNext());\n this.scrollButtons.classList.toggle('scroll-buttons--disabled', !canScroll);\n\n this._selectedSnap = this.embla.selectedScrollSnap();\n }\n\n override async updated(changedProperties: PropertyValues<this>) {\n if (changedProperties.has('autoplay') && this.autoplay) {\n this.initAutoplay();\n }\n }\n\n private initAutoplay() {\n this.embla.reInit(this.options(), [Autoplay(this.autoplayOptions || { delay: this.autoplay })]);\n }\n\n private handleSlotChange = (event: Event) => {\n const slot = event.target as HTMLSlotElement;\n if (slot.assignedElements().length > 0) {\n this.embla.reInit(this.options());\n }\n };\n\n private handleDotClick = (event: Event) => {\n const button = event.currentTarget as HTMLButtonElement;\n this.goToSlide(Number(button.dataset.index));\n };\n\n options(): EmblaOptionsType {\n const container = this.shadowRoot!.querySelector('slot')!;\n\n if (!container) {\n return {\n container: this,\n slides: [],\n };\n }\n\n return {\n container: container,\n slides: container.assignedElements() as HTMLElement[],\n containScroll: this.containScroll,\n breakpoints: this.breakpoints,\n axis: this.axis,\n align: this.align,\n dragFree: this.dragFree,\n duration: this.duration,\n loop: this.loop,\n slidesToScroll: this.slidesToScroll,\n skipSnaps: this.skipSnaps,\n startIndex: this.startIndex,\n };\n }\n\n next = () => {\n this.embla.scrollNext();\n };\n\n previous = () => {\n this.embla.scrollPrev();\n };\n\n goToSlide(index: number, jump?: boolean) {\n this.embla.scrollTo(index, jump);\n }\n\n slideNodes() {\n this.embla.slideNodes();\n }\n\n slidesInView() {\n this.embla.slidesInView();\n }\n\n isActive() {\n return this.embla?.internalEngine().options.active;\n }\n\n renderFullscreenButton() {\n return html`<button\n type=\"button\"\n part=\"button button-fullscreen\"\n class=\"button button-fullscreen\"\n @click=${() => this.emit('fullscreen')}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n fill=\"currentColor\"\n part=\"button-icon button-icon-fullscreen\"\n >\n <path\n d=\"M295 183c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0l135-135 0 86.1c0 13.3 10.7 24 24 24s24-10.7 24-24l0-144c0-13.3-10.7-24-24-24L344 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l86.1 0-135 135zM217 329c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L48 430.1 48 344c0-13.3-10.7-24-24-24S0 330.7 0 344L0 488c0 13.3 10.7 24 24 24l144 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-86.1 0 135-135z\"\n />\n </svg>\n </button>`;\n }\n\n renderNextPreviousButtons() {\n return html`<div\n class=\"scroll-buttons scroll-buttons--${this.scrollButtonsPosition}\"\n part=\"scroll-buttons\"\n >\n <button\n part=\"button button-previous\"\n class=\"button button-previous\"\n type=\"button\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n fill=\"currentColor\"\n part=\"button-icon button-icon-previous\"\n >\n <path\n d=\"M7 239c-9.4 9.4-9.4 24.6 0 33.9L175 441c9.4 9.4 24.6 9.4 33.9 0s9.4-24.6 0-33.9L81.9 280 488 280c13.3 0 24-10.7 24-24s-10.7-24-24-24L81.9 232 209 105c9.4-9.4 9.4-24.6 0-33.9s-24.6-9.4-33.9 0L7 239z\"\n />\n </svg>\n </button>\n\n <button\n part=\"button button-next\"\n class=\"button button-next\"\n type=\"button\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 512 512\"\n fill=\"currentColor\"\n part=\"button-icon button-icon-next\"\n >\n <path\n d=\"M505 273c9.4-9.4 9.4-24.6 0-33.9L337 71c-9.4-9.4-24.6-9.4-33.9 0s-9.4 24.6 0 33.9l127 127-406.1 0c-13.3 0-24 10.7-24 24s10.7 24 24 24l406.1 0-127 127c-9.4 9.4-9.4 24.6 0 33.9s24.6 9.4 33.9 0L505 273z\"\n />\n </svg>\n </button>\n </div>`;\n }\n\n private renderDots() {\n if (!this.embla) return nothing;\n const snaps = this.embla.scrollSnapList();\n const total = snaps.length;\n if (total === 0) return nothing;\n\n const selected = this._selectedSnap;\n const max = this.maxVisibleDots;\n\n let start = 0;\n let end = total;\n if (max > 0 && max < total) {\n const half = Math.floor((max - 1) / 2);\n start = Math.max(0, selected - half);\n end = Math.min(total, start + max);\n if (end - start < max) start = Math.max(0, end - max);\n }\n const edgeStart = start > 0;\n const edgeEnd = end < total;\n\n return html`<div\n class=\"dots\"\n part=\"dots\"\n role=\"tablist\"\n >\n ${map(snaps.slice(start, end), (_, i) => {\n const index = start + i;\n const isFirst = i === 0;\n const isLast = i === end - start - 1;\n const isSelected = index === selected;\n const isEdge = !isSelected && ((isFirst && edgeStart) || (isLast && edgeEnd));\n return html`<button\n part=\"button-dot\"\n type=\"button\"\n role=\"tab\"\n class=\"dot dot--${this.dotAppearance} ${isSelected ? 'dot--selected' : ''}\"\n aria-label=\"Go to slide ${index + 1}\"\n aria-selected=${isSelected ? 'true' : nothing}\n data-index=\"${index}\"\n data-edge=${isEdge ? '' : nothing}\n @click=${this.handleDotClick}\n >\n <i></i>\n </button>`;\n })}\n </div>`;\n }\n\n override render() {\n return html`\n <div class=\"wrapper ${this.isActive() ? '' : 'inactive'}\">\n <div\n part=\"viewport\"\n class=\"viewport\"\n >\n <slot\n part=\"container\"\n class=\"container\"\n @slotchange=${this.handleSlotChange}\n ></slot>\n </div>\n ${this.withFullscreen ? this.renderFullscreenButton() : ''}\n ${this.renderNextPreviousButtons()} ${this.withDots ? this.renderDots() : ''}\n </div>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Carousel } from './carousel.js';\nexport * from './carousel.js';\ndefine('carousel', Carousel);\n",":host {\n --aspect-ratio: inherit;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: start;\n width: 100%;\n max-height: 100%;\n aspect-ratio: var(--aspect-ratio);\n}\n","import { html, unsafeCSS, type CSSResultGroup } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './carousel-item.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * A single slide inside an `<l-carousel>`.\n *\n * @cssproperty --aspect-ratio - Aspect ratio of the slide.\n */\nexport class CarouselItem extends LuxenElement {\n static override styles: CSSResultGroup = [hostStyles, styles];\n\n override connectedCallback() {\n super.connectedCallback();\n this.setAttribute('role', 'group');\n }\n\n override render() {\n return html` <slot></slot> `;\n }\n}\n","import { define } from '../../define.js';\nimport { CarouselItem } from './carousel-item.js';\nexport * from './carousel-item.js';\ndefine('carousel-item', CarouselItem);\n",":host {\n --width: 31rem;\n --border-radius: 6px;\n --padding: 1.5rem;\n --header-padding: var(--padding);\n --footer-padding: var(--padding);\n --show-duration: 200ms;\n --hide-duration: 200ms;\n --backdrop: var(--l-backdrop);\n --backdrop-blur: 0;\n\n display: contents;\n}\n\ndialog {\n position: fixed;\n inset: 0;\n box-sizing: border-box;\n width: var(--width);\n max-inline-size: min(90vw, var(--width));\n max-block-size: min(80dvb, 100%);\n margin: auto;\n padding: 0;\n border: 0;\n border-radius: var(--border-radius);\n background-color: var(--l-color-surface-overlay);\n color: var(--l-color-text-primary);\n\n /* EXIT STATE */\n opacity: 0;\n\n transition-property: opacity, display, overlay;\n transition-duration: var(--hide-duration);\n transition-behavior: allow-discrete;\n\n &::backdrop {\n background: var(--backdrop);\n backdrop-filter: blur(var(--backdrop-blur));\n }\n\n /* OPEN STATE */\n /* grid layout pins header/footer; the middle row (body) scrolls via\n overflow on [part='body'] and minmax(0, 1fr) allowing it to shrink. */\n &[open] {\n display: grid;\n grid-template-rows: auto minmax(0, 1fr) auto;\n opacity: 1;\n transition-duration: var(--show-duration);\n }\n\n /* BEFORE-OPEN STATE */\n @starting-style {\n &[open] {\n opacity: 0;\n }\n }\n}\n\n[part='header'] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 1rem;\n padding: var(--header-padding);\n}\n\n[part='title'] {\n margin: 0;\n font-size: 1.125rem;\n font-weight: 600;\n line-height: 1.4;\n}\n\n/* Pin body and footer so the layout stays correct when [without-header]\n removes the header and only two children auto-place into the grid. */\n[part='body'] {\n grid-row: 2;\n padding-inline: var(--padding);\n overflow-y: auto;\n}\n\n[part='footer'] {\n grid-row: 3;\n display: flex;\n place-content: end;\n gap: 0.5rem;\n padding: var(--footer-padding);\n}\n\n/* Without a header, the body has to provide its own block-start padding\n (normally inherited visually from the header padding above it). */\n:host([without-header]) [part='body'] {\n padding-block-start: var(--padding);\n}\n\n::slotted(menu[slot='footer']) {\n display: contents;\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host {\n --show-duration: 0ms;\n --hide-duration: 0ms;\n }\n}\n","import { unsafeCSS } from 'lit';\nimport raw from './dialog.css?inline';\n\n/**\n * Wrapper module: imported by both `dialog.ts` and `drawer.ts`.\n * `unsafeCSS()` is called once here so both importers share the same\n * `CSSResult` instance (one constructed `CSSStyleSheet`, not two).\n */\nexport default unsafeCSS(raw);\n","import { html, nothing, type PropertyValues } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport styles from './dialog.styles.js';\n\ninterface CommandEventLike extends Event {\n command: string;\n source: Element | null;\n}\n\nconst supportsClosedBy =\n typeof HTMLDialogElement !== 'undefined' && 'closedBy' in HTMLDialogElement.prototype;\n\n// Native <dialog> doesn't lock body scroll. Inject a global rule that uses\n// `:has()` to freeze the root scroll container whenever any modal l-dialog\n// is open. Purely declarative — no manual lock/unlock bookkeeping.\n// Symbol guard makes the injection idempotent across HMR reloads.\n//\n// `scrollbar-gutter: stable` only applies to centered modals — it prevents\n// the page behind from shifting horizontally when the scrollbar disappears.\n// Edge-attached modals (drawers) opt out via `data-modal=\"edge\"`: a reserved\n// gutter would push the drawer off the actual viewport edge.\nconst SCROLL_LOCK_SHEET = Symbol.for('luxen-dialog-scroll-lock');\nif (typeof document !== 'undefined' && !(SCROLL_LOCK_SHEET in document)) {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(`\n html:has([data-modal]) { overflow: hidden; }\n html:has([data-modal=\"centered\"]) { scrollbar-gutter: stable; }\n `);\n document.adoptedStyleSheets.push(sheet);\n Object.defineProperty(document, SCROLL_LOCK_SHEET, { value: sheet });\n}\n\n/**\n * A modal dialog rendered in the top layer via the native `<dialog>` element.\n *\n * Open and close by toggling the `open` property (or the `--show` / `--hide`\n * Invoker commands). There are no public `show()` / `close()` methods.\n *\n * @slot - Body content.\n * @slot title - Custom heading element. Overrides the default `<h2>` rendered from the `title` property.\n * @slot close - Close button (typically `<button class=\"l-close\">`).\n * @slot footer - Footer actions.\n *\n * @csspart dialog - The native `<dialog>` element.\n * @csspart header - The header wrapper containing the title and close slot.\n * @csspart title - The dialog title heading.\n * @csspart body - The body wrapper around the default slot.\n * @csspart footer - The footer wrapper around the footer slot.\n *\n * @cssproperty --width - Dialog width. Default `31rem`.\n * @cssproperty --border-radius - Dialog border radius. Default `6px`.\n * @cssproperty --padding - Padding applied to the header, footer, and inline-padding of the body. Default `1.5rem`. Set to `0` to remove all internal spacing (e.g. for edge-to-edge media).\n * @cssproperty --show-duration - Open transition duration. Default `200ms`.\n * @cssproperty --hide-duration - Close transition duration. Default `200ms`.\n * @cssproperty --backdrop - Backdrop color.\n * @cssproperty --backdrop-blur - Backdrop blur amount (any CSS length). Default `0` (no blur). Set to e.g. `4px` for a subtle frost.\n *\n * @event show - Fired when the dialog opens. Not cancelable.\n * @event after-show - Fired after the open animation completes.\n * @event hide - Fired when the dialog is about to close. Cancelable — call `event.preventDefault()` to keep it open.\n * @event after-hide - Fired after the close animation completes.\n */\nexport class Dialog extends LuxenElement {\n static styles = [hostStyles, styles];\n\n /** Dialog title rendered in the header. */\n @property()\n title = '';\n\n /** Whether the dialog is open. */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /** Close when the backdrop is clicked. */\n @property({ type: Boolean, reflect: true, attribute: 'light-dismiss' })\n lightDismiss = false;\n\n /** Hide the header entirely (title and close slot). */\n @property({ type: Boolean, reflect: true, attribute: 'without-header' })\n withoutHeader = false;\n\n @query('dialog')\n dialog!: HTMLDialogElement;\n\n // Drives the scroll-lock stylesheet: `centered` reserves the scrollbar\n // gutter (no page shift); `edge` skips it (drawers sit flush to the edge).\n protected _modalKind: 'centered' | 'edge' = 'centered';\n\n private _mouseDownTarget: EventTarget | null = null;\n\n private _commandListener: EventListenerObject = {\n handleEvent: (e: Event) => this._onCommand(e as CommandEventLike),\n };\n\n // --- Lifecycle ---\n\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener('command', this._commandListener);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('command', this._commandListener);\n }\n\n firstUpdated() {\n this.dialog.addEventListener('cancel', (e) => this._onCancel(e));\n this.dialog.addEventListener('close', () => this._onNativeClose());\n this.dialog.addEventListener('mousedown', (e) => {\n this._mouseDownTarget = e.target;\n });\n this.dialog.addEventListener('click', (e) => this._onDialogClick(e));\n }\n\n updated(changed: PropertyValues<this>) {\n if (!changed.has('open')) return;\n\n if (this.open && !this.dialog.open) {\n // Opening — not cancelable.\n this.emit('show');\n this.setAttribute('data-modal', this._modalKind);\n this.dialog.showModal();\n this._focusAutofocusTarget();\n void this._emitAfter('after-show');\n } else if (!this.open && this.dialog.open) {\n // Closing — cancelable. Revert the property if consumer prevents.\n if (!this.emit('hide', { cancelable: true })) {\n this.open = true;\n return;\n }\n this.dialog.close();\n // `after-hide` is emitted from `_onNativeClose` (runs for every close path).\n }\n }\n\n // --- Event handlers ---\n\n // Custom commands on a custom element must start with `--`.\n // Built-in commands like \"close\" are reserved for native elements\n // and won't fire here.\n private _onCommand(e: CommandEventLike) {\n switch (e.command) {\n case '--hide':\n this.open = false;\n break;\n case '--show':\n this.open = true;\n break;\n }\n }\n\n // Fires on Escape and on `closedby=\"any\"` close requests.\n // Does NOT fire when script calls `.close()`, so `updated()`'s cancelable\n // `hide` emit doesn't collide with this one.\n private _onCancel(e: Event) {\n if (!this.emit('hide', { cancelable: true })) {\n e.preventDefault();\n }\n }\n\n private _onNativeClose() {\n this.open = false;\n this.removeAttribute('data-modal');\n void this._emitAfter('after-hide');\n }\n\n private _onDialogClick(e: MouseEvent) {\n // With `dialog { padding: 0 }`, `e.target === this.dialog` only fires\n // for backdrop clicks. The mousedown guard prevents drag-out dismissal.\n const clickedBackdrop = e.target === this.dialog && this._mouseDownTarget === this.dialog;\n this._mouseDownTarget = null;\n if (!clickedBackdrop) return;\n\n if (this.lightDismiss) {\n // When `supportsClosedBy`, the native `closedby=\"any\"` already closed.\n if (!supportsClosedBy) this.open = false;\n return;\n }\n this._nudgeDismiss();\n }\n\n private _nudgeAnimation?: Animation;\n\n private _nudgeDismiss() {\n if (matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n this._nudgeAnimation?.cancel();\n this._nudgeAnimation = this.dialog.animate(\n [{ transform: 'scale(1)' }, { transform: 'scale(1.02)' }, { transform: 'scale(1)' }],\n { duration: 250, easing: 'ease-in-out' },\n );\n }\n\n // Awaits every active animation on the dialog (transitions + @keyframes)\n // and then emits. Resolves immediately when no animations are running,\n // which covers `prefers-reduced-motion` and consumers that zero the\n // duration custom properties — cases where `transitionend` never fires.\n // Waits one frame first so @starting-style transitions have registered.\n private async _emitAfter(name: 'after-show' | 'after-hide') {\n await new Promise((r) => requestAnimationFrame(() => r(null)));\n const anims = this.dialog.getAnimations({ subtree: false });\n await Promise.all(anims.map((a) => a.finished.catch(() => {})));\n if ((name === 'after-show') !== this.open) return;\n this.emit(name);\n }\n\n // Firefox/Safari don't reliably resolve `[autofocus]` when `<dialog>`\n // is in shadow DOM and the target is in light DOM. Resolve it manually.\n private _focusAutofocusTarget() {\n const target = this.querySelector<HTMLElement>('[autofocus]');\n target?.focus({ preventScroll: true });\n }\n\n render() {\n const closedby = this.lightDismiss && supportsClosedBy ? 'any' : nothing;\n return html`\n <dialog\n part=\"dialog\"\n closedby=${closedby}\n >\n ${this.withoutHeader\n ? nothing\n : html`\n <header part=\"header\">\n <slot name=\"title\">\n ${this.title ? html`<h2 part=\"title\">${this.title}</h2>` : nothing}\n </slot>\n <slot name=\"close\"></slot>\n </header>\n `}\n <div part=\"body\">\n <slot></slot>\n </div>\n <footer part=\"footer\">\n <slot name=\"footer\"></slot>\n </footer>\n </dialog>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Dialog } from './dialog.js';\nexport * from './dialog.js';\ndefine('dialog', Dialog);\n","import { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\n\nexport type DividerOrientation = 'horizontal' | 'vertical';\n\n/**\n * @summary Dividers visually separate or group elements.\n *\n * @example <l-divider></l-divider>\n *\n * @cssproperty --color - The color of the divider line.\n * @cssproperty --width - The thickness of the divider line.\n * @cssproperty --spacing - The spacing between the divider and its neighboring elements.\n *\n * @customElement l-divider\n */\nexport class Divider extends LuxenElement {\n override createRenderRoot() {\n return this;\n }\n\n /** The divider's orientation. */\n @property({ reflect: true })\n orientation: DividerOrientation = 'horizontal';\n\n /** Optional text label displayed over the divider line. */\n @property({ reflect: true })\n label?: string;\n\n override connectedCallback() {\n super.connectedCallback();\n this.setAttribute('role', 'separator');\n }\n\n override updated(changed: Map<string, unknown>) {\n if (changed.has('orientation')) {\n if (this.orientation === 'vertical') {\n this.setAttribute('aria-orientation', 'vertical');\n } else {\n this.removeAttribute('aria-orientation');\n }\n }\n }\n}\n","import { define } from '../../define.js';\nimport { Divider } from './divider.js';\nexport * from './divider.js';\ndefine('divider', Divider);\n",":host {\n --size: 320px;\n --border-radius: 0.375rem;\n}\n\n/* Override dialog's opacity fade with a slide from the inline-start edge. */\ndialog {\n inset: 0;\n margin: 0;\n width: min(var(--size), 100dvw);\n max-inline-size: 100dvw;\n height: 100dvh;\n max-block-size: 100dvh;\n border-radius: 0 var(--border-radius) var(--border-radius) 0;\n opacity: 1;\n translate: -100% 0;\n transition-property: translate, display, overlay;\n}\n\ndialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n dialog[open] {\n translate: -100% 0;\n }\n}\n\n/* Inline-end edge */\n:host([placement='end']) dialog {\n border-radius: var(--border-radius) 0 0 var(--border-radius);\n margin-inline-start: auto;\n translate: 100% 0;\n}\n\n:host([placement='end']) dialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n :host([placement='end']) dialog[open] {\n translate: 100% 0;\n }\n}\n\n/* Block-end (bottom) edge */\n:host([placement='bottom']) dialog {\n width: 100dvw;\n max-inline-size: 100dvw;\n height: min(var(--size), 100dvh);\n max-block-size: 100dvh;\n margin-block-start: auto;\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n translate: 0 100%;\n}\n\n:host([placement='bottom']) dialog[open] {\n translate: 0 0;\n}\n\n@starting-style {\n :host([placement='bottom']) dialog[open] {\n translate: 0 100%;\n }\n}\n","import { unsafeCSS } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport { Dialog } from '../dialog/dialog.js';\nimport dialogStyles from '../dialog/dialog.styles.js';\nimport rawDrawerStyles from './drawer.css?inline';\n\nconst drawerStyles = unsafeCSS(rawDrawerStyles);\n\n/**\n * A drawer that slides in from a screen edge. Extends `<l-dialog>`.\n *\n * Open and close by toggling the `open` property (or the `--show` / `--hide`\n * Invoker commands). Always opens as modal.\n *\n * @slot - Body content.\n * @slot close - Close button (typically `<button class=\"l-close\">`).\n * @slot footer - Footer actions.\n *\n * @csspart dialog - The native `<dialog>` element.\n * @csspart header - The header wrapper containing the title and close slot.\n * @csspart title - The drawer title heading.\n * @csspart body - The body wrapper around the default slot.\n * @csspart footer - The footer wrapper around the footer slot.\n *\n * @cssproperty --size - Drawer size on the axis perpendicular to its edge (width for `start`/`end`, height for `bottom`). Default `320px`.\n * @cssproperty --border-radius - Drawer border radius on the inner edges. Default `0.375rem`.\n * @cssproperty --show-duration - Open transition duration. Default `200ms`.\n * @cssproperty --hide-duration - Close transition duration. Default `200ms`.\n * @cssproperty --backdrop - Backdrop color.\n *\n * @event show - Fired when the drawer opens. Not cancelable.\n * @event after-show - Fired after the open animation completes.\n * @event hide - Fired when the drawer is about to close. Cancelable — call `event.preventDefault()` to keep it open.\n * @event after-hide - Fired after the close animation completes.\n */\nexport class Drawer extends Dialog {\n static override styles = [hostStyles, dialogStyles, drawerStyles];\n\n // Edge-attached: opt out of the centered modal's stable scrollbar gutter,\n // which would otherwise push the drawer off the actual viewport edge.\n protected override _modalKind = 'edge' as const;\n\n /** Edge the drawer slides in from. Defaults to the start (inline-start) edge. */\n @property({ reflect: true })\n placement?: 'start' | 'end' | 'bottom';\n}\n","import { define } from '../../define.js';\nimport { Drawer } from './drawer.js';\nexport * from './drawer.js';\ndefine('drawer', Drawer);\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n const firstChar = placement[0];\n return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n const side = getSide(placement);\n return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n x,\n y,\n width: rects.floating.width,\n height: rects.floating.height\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n elements,\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n ...platform,\n detectOverflow\n };\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let resetCount = 0;\n const middlewareData = {};\n for (let i = 0; i < middleware.length; i++) {\n const currentMiddleware = middleware[i];\n if (!currentMiddleware) {\n continue;\n }\n const {\n name,\n fn\n } = currentMiddleware;\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform: platformWithDetectOverflow,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData[name] = {\n ...middlewareData[name],\n ...data\n };\n if (reset && resetCount < MAX_RESET_COUNT) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const initialSideAxis = getSideAxis(initialPlacement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n if (!ignoreCrossAxisOverflow ||\n // We leave the current main axis only if every placement on that axis\n // overflows the main axis.\n overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$filter2;\n const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n if (hasFallbackAxisSideDirection) {\n const currentSideAxis = getSideAxis(d.placement);\n return currentSideAxis === initialSideAxis ||\n // Create a bias to the `y` side axis due to horizontal\n // reading directions favoring greater width.\n currentSideAxis === 'y';\n }\n return true;\n }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects,\n platform\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await platform.detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = originSides.has(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: rawValue.mainAxis || 0,\n crossAxis: rawValue.crossAxis || 0,\n alignmentAxis: rawValue.alignmentAxis\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n platform\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y,\n enabled: {\n [mainAxis]: checkMainAxis,\n [crossAxis]: checkCrossAxis\n }\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = originSides.has(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n var _state$middlewareData, _state$middlewareData2;\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n const maximumClippingWidth = width - overflow.left - overflow.right;\n const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n availableWidth = maximumClippingWidth;\n }\n if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n availableHeight = maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n try {\n if (element.matches(':popover-open')) {\n return true;\n }\n } catch (_e) {\n // no-op\n }\n try {\n return element.matches(':modal');\n } catch (_e) {\n return false;\n }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (isWebKitValue == null) {\n isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n }\n return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n } else {\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n }\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle$1(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentWin = win;\n let currentIFrame = getFrameElement(currentWin);\n while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle$1(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentWin = getWindow(currentIFrame);\n currentIFrame = getFrameElement(currentWin);\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n const leftScroll = getNodeScroll(element).scrollLeft;\n if (!rect) {\n return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n }\n return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n const htmlRect = documentElement.getBoundingClientRect();\n const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n const y = htmlRect.top + scroll.scrollTop;\n return {\n x,\n y\n };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n elements,\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isFixed = strategy === 'fixed';\n const documentElement = getDocumentElement(offsetParent);\n const topLayer = elements ? isTopLayer(elements.floating) : false;\n if (offsetParent === documentElement || topLayer && isFixed) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle$1(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n const windowScrollbarX = getWindowScrollBarX(html);\n // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n // visual width of the <html> but this is not considered in the size\n // of `html.clientWidth`.\n if (windowScrollbarX <= 0) {\n const doc = html.ownerDocument;\n const body = doc.body;\n const bodyStyles = getComputedStyle(body);\n const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n width -= clippingStableScrollbarWidth;\n }\n } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n // If the <body> scrollbar is on the left, the width needs to be extended\n // by the scrollbar amount so there isn't extra space on the right.\n width += windowScrollbarX;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y,\n width: clippingAncestor.width,\n height: clippingAncestor.height\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle$1(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n let top = firstRect.top;\n let right = firstRect.right;\n let bottom = firstRect.bottom;\n let left = firstRect.left;\n for (let i = 1; i < clippingAncestors.length; i++) {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n top = max(rect.top, top);\n right = min(rect.right, right);\n bottom = min(rect.bottom, bottom);\n left = max(rect.left, left);\n }\n return {\n width: right - left,\n height: bottom - top,\n x: left,\n y: top\n };\n}\n\nfunction getDimensions(element) {\n const {\n width,\n height\n } = getCssDimensions(element);\n return {\n width,\n height\n };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n\n // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n function setLeftRTLScrollbarOffset() {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n setLeftRTLScrollbarOffset();\n }\n }\n if (isFixed && !isOffsetParentAnElement && documentElement) {\n setLeftRTLScrollbarOffset();\n }\n const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n return {\n x,\n y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction isStaticPositioned(element) {\n return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n let rawOffsetParent = element.offsetParent;\n\n // Firefox returns the <html> element as the offsetParent if it's non-static,\n // while Chrome and Safari return the <body> element. The <body> element must\n // be used to perform the correct calculations even if the <html> element is\n // non-static.\n if (getDocumentElement(element) === rawOffsetParent) {\n rawOffsetParent = rawOffsetParent.ownerDocument.body;\n }\n return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const win = getWindow(element);\n if (isTopLayer(element)) {\n return win;\n }\n if (!isHTMLElement(element)) {\n let svgOffsetParent = getParentNode(element);\n while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n return svgOffsetParent;\n }\n svgOffsetParent = getParentNode(svgOffsetParent);\n }\n return win;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n return win;\n }\n return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n const floatingDimensions = await getDimensionsFn(data.floating);\n return {\n reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n floating: {\n x: 0,\n y: 0,\n width: floatingDimensions.width,\n height: floatingDimensions.height\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n var _io;\n clearTimeout(timeoutId);\n (_io = io) == null || _io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const elementRectForRootMargin = element.getBoundingClientRect();\n const {\n left,\n top,\n width,\n height\n } = elementRectForRootMargin;\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n // If the reference is clipped, the ratio is 0. Throttle the refresh\n // to prevent an infinite loop of updates.\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 1000);\n } else {\n refresh(false, ratio);\n }\n }\n if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n // It's possible that even though the ratio is reported as 1, the\n // element is not actually fully within the IntersectionObserver's root\n // area anymore. This can happen under performance constraints. This may\n // be a bug in the browser's IntersectionObserver implementation. To\n // work around this, we compare the element's bounding rect now with\n // what it was at the time we created the IntersectionObserver. If they\n // are not equal then the element moved, so we refresh.\n refresh();\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle <iframe>s\n root: root.ownerDocument\n });\n } catch (_e) {\n io = new IntersectionObserver(handleObserve, options);\n }\n io.observe(element);\n }\n refresh(true);\n return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n if (options === void 0) {\n options = {};\n }\n const {\n ancestorScroll = true,\n ancestorResize = true,\n elementResize = typeof ResizeObserver === 'function',\n layoutShift = typeof IntersectionObserver === 'function',\n animationFrame = false\n } = options;\n const referenceEl = unwrapElement(reference);\n const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.addEventListener('scroll', update, {\n passive: true\n });\n ancestorResize && ancestor.addEventListener('resize', update);\n });\n const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n let reobserveFrame = -1;\n let resizeObserver = null;\n if (elementResize) {\n resizeObserver = new ResizeObserver(_ref => {\n let [firstEntry] = _ref;\n if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n // Prevent update loops when using the `size` middleware.\n // https://github.com/floating-ui/floating-ui/issues/1740\n resizeObserver.unobserve(floating);\n cancelAnimationFrame(reobserveFrame);\n reobserveFrame = requestAnimationFrame(() => {\n var _resizeObserver;\n (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n });\n }\n update();\n });\n if (referenceEl && !animationFrame) {\n resizeObserver.observe(referenceEl);\n }\n if (floating) {\n resizeObserver.observe(floating);\n }\n }\n let frameId;\n let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n if (animationFrame) {\n frameLoop();\n }\n function frameLoop() {\n const nextRefRect = getBoundingClientRect(reference);\n if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n update();\n }\n prevRefRect = nextRefRect;\n frameId = requestAnimationFrame(frameLoop);\n }\n update();\n return () => {\n var _resizeObserver2;\n ancestors.forEach(ancestor => {\n ancestorScroll && ancestor.removeEventListener('scroll', update);\n ancestorResize && ancestor.removeEventListener('resize', update);\n });\n cleanupIo == null || cleanupIo();\n (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n resizeObserver = null;\n if (animationFrame) {\n cancelAnimationFrame(frameId);\n }\n };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n // This caches the expensive `getClippingElementAncestors` function so that\n // multiple lifecycle resets re-use the same result. It only lives for a\n // single call. If other functions become expensive, we can add them as well.\n const cache = new Map();\n const mergedOptions = {\n platform,\n ...options\n };\n const platformWithCache = {\n ...mergedOptions.platform,\n _c: cache\n };\n return computePosition$1(reference, floating, {\n ...mergedOptions,\n platform: platformWithCache\n });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import type { ReactiveController, ReactiveControllerHost } from 'lit';\nimport {\n computePosition,\n autoUpdate,\n offset,\n flip,\n shift,\n arrow,\n type Placement,\n} from '@floating-ui/dom';\n\n// --- Pure geometry helpers ---\n\ntype Point = [number, number];\n\n/** Check if a point is inside a polygon using ray-casting. */\nfunction isPointInPolygon([px, py]: Point, polygon: Point[]) {\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const [xi, yi] = polygon[i];\n const [xj, yj] = polygon[j];\n if (yi >= py !== yj >= py && px <= ((xj - xi) * (py - yi)) / (yj - yi) + xi) {\n inside = !inside;\n }\n }\n return inside;\n}\n\n/** Check if a point is inside a rect. */\nfunction isPointInRect([px, py]: Point, rect: DOMRect) {\n return px >= rect.left && px <= rect.right && py >= rect.top && py <= rect.bottom;\n}\n\n/**\n * Build a safe polygon (triangle/quadrilateral) from cursor to floating element edges.\n * Adapted from floating-ui/safePolygon.\n * @see https://github.com/floating-ui/floating-ui/blob/master/packages/react/src/safePolygon.ts\n */\nfunction getSafePolygon(\n cursorX: number,\n cursorY: number,\n rect: DOMRect,\n refRect: DOMRect,\n placement: string,\n): Point[] {\n const side = placement.split('-')[0] as 'top' | 'bottom' | 'left' | 'right';\n const buffer = 2;\n\n const isFloatingWider = rect.width > refRect.width;\n const isFloatingTaller = rect.height > refRect.height;\n\n const cursorLeaveFromRight = cursorX > rect.right - rect.width / 2;\n const cursorLeaveFromBottom = cursorY > rect.bottom - rect.height / 2;\n\n switch (side) {\n case 'top': {\n const c1: Point = [\n isFloatingWider\n ? cursorX + buffer / 2\n : cursorLeaveFromRight\n ? cursorX + buffer * 4\n : cursorX - buffer * 4,\n cursorY + buffer + 1,\n ];\n const c2: Point = [\n isFloatingWider\n ? cursorX - buffer / 2\n : cursorLeaveFromRight\n ? cursorX + buffer * 4\n : cursorX - buffer * 4,\n cursorY + buffer + 1,\n ];\n return [\n c1,\n c2,\n [\n rect.left,\n cursorLeaveFromRight\n ? rect.bottom - buffer\n : isFloatingWider\n ? rect.bottom - buffer\n : rect.top,\n ],\n [\n rect.right,\n cursorLeaveFromRight\n ? isFloatingWider\n ? rect.bottom - buffer\n : rect.top\n : rect.bottom - buffer,\n ],\n ];\n }\n case 'bottom': {\n const c1: Point = [\n isFloatingWider\n ? cursorX + buffer / 2\n : cursorLeaveFromRight\n ? cursorX + buffer * 4\n : cursorX - buffer * 4,\n cursorY - buffer,\n ];\n const c2: Point = [\n isFloatingWider\n ? cursorX - buffer / 2\n : cursorLeaveFromRight\n ? cursorX + buffer * 4\n : cursorX - buffer * 4,\n cursorY - buffer,\n ];\n return [\n c1,\n c2,\n [\n rect.left,\n cursorLeaveFromRight\n ? rect.top + buffer\n : isFloatingWider\n ? rect.top + buffer\n : rect.bottom,\n ],\n [\n rect.right,\n cursorLeaveFromRight\n ? isFloatingWider\n ? rect.top + buffer\n : rect.bottom\n : rect.top + buffer,\n ],\n ];\n }\n case 'left': {\n const c1: Point = [\n cursorX + buffer + 1,\n isFloatingTaller\n ? cursorY + buffer / 2\n : cursorLeaveFromBottom\n ? cursorY + buffer * 4\n : cursorY - buffer * 4,\n ];\n const c2: Point = [\n cursorX + buffer + 1,\n isFloatingTaller\n ? cursorY - buffer / 2\n : cursorLeaveFromBottom\n ? cursorY + buffer * 4\n : cursorY - buffer * 4,\n ];\n return [\n [\n cursorLeaveFromBottom\n ? rect.right - buffer\n : isFloatingTaller\n ? rect.right - buffer\n : rect.left,\n rect.top,\n ],\n [\n cursorLeaveFromBottom\n ? isFloatingTaller\n ? rect.right - buffer\n : rect.left\n : rect.right - buffer,\n rect.bottom,\n ],\n c1,\n c2,\n ];\n }\n case 'right': {\n const c1: Point = [\n cursorX - buffer,\n isFloatingTaller\n ? cursorY + buffer / 2\n : cursorLeaveFromBottom\n ? cursorY + buffer * 4\n : cursorY - buffer * 4,\n ];\n const c2: Point = [\n cursorX - buffer,\n isFloatingTaller\n ? cursorY - buffer / 2\n : cursorLeaveFromBottom\n ? cursorY + buffer * 4\n : cursorY - buffer * 4,\n ];\n return [\n [\n cursorLeaveFromBottom\n ? rect.left + buffer\n : isFloatingTaller\n ? rect.left + buffer\n : rect.right,\n rect.top,\n ],\n [\n cursorLeaveFromBottom\n ? isFloatingTaller\n ? rect.left + buffer\n : rect.right\n : rect.left + buffer,\n rect.bottom,\n ],\n c1,\n c2,\n ];\n }\n default:\n return [];\n }\n}\n\n// --- Constants ---\n\nconst STATIC_SIDE = { top: 'bottom', right: 'left', bottom: 'top', left: 'right' } as const;\n\nconst reducedMotion =\n typeof window !== 'undefined' ? window.matchMedia('(prefers-reduced-motion: reduce)') : undefined;\n\n// --- Controller ---\n\nexport interface PopoverControllerConfig {\n getTriggerElement: () => HTMLElement | null;\n getFloatingElement: () => HTMLElement | null;\n getArrowElement: () => HTMLElement | null;\n onPlacementChange?: (placement: string) => void;\n}\n\nexport interface PositionOptions {\n placement: Placement;\n distance: number;\n fullWidth?: boolean;\n}\n\ntype TriggerHandlers = {\n onPointerEnter?: (e: PointerEvent) => void;\n onPointerLeave?: (e: PointerEvent) => void;\n onFocusIn?: (e: FocusEvent) => void;\n onFocusOut?: (e: FocusEvent) => void;\n onClick?: (e: MouseEvent) => void;\n onKeyDown?: (e: KeyboardEvent) => void;\n};\n\nexport class PopoverController implements ReactiveController {\n private _host: ReactiveControllerHost & HTMLElement;\n private _config: PopoverControllerConfig;\n private _cleanupAutoUpdate?: () => void;\n private _cleanupSafePolygon?: () => void;\n private _handlers?: TriggerHandlers;\n private _triggerElement?: HTMLElement | null;\n private _currentPlacement = '';\n\n constructor(host: ReactiveControllerHost & HTMLElement, config: PopoverControllerConfig) {\n this._host = host;\n this._config = config;\n host.addController(this);\n }\n\n hostConnected() {}\n\n hostDisconnected() {\n this.stopPositioning();\n this.cleanupSafePolygon();\n this.removeTriggerListeners();\n }\n\n get currentPlacement() {\n return this._currentPlacement;\n }\n\n // --- Positioning ---\n\n async updatePosition(options: PositionOptions) {\n const trigger = this._config.getTriggerElement();\n const floating = this._config.getFloatingElement();\n const arrowEl = this._config.getArrowElement();\n if (!trigger || !floating) return;\n\n const middleware = [\n offset(options.distance),\n flip(),\n shift(),\n ...(arrowEl ? [arrow({ element: arrowEl, padding: 8 })] : []),\n ];\n\n const { x, y, placement, middlewareData } = await computePosition(trigger, floating, {\n placement: options.placement,\n strategy: 'fixed',\n middleware,\n });\n\n Object.assign(floating.style, {\n position: 'fixed',\n left: options.fullWidth ? '0px' : `${x}px`,\n top: `${y}px`,\n width: options.fullWidth ? '100vw' : '',\n });\n\n if (placement !== this._currentPlacement) {\n this._currentPlacement = placement;\n this._config.onPlacementChange?.(placement);\n }\n\n if (middlewareData.arrow && arrowEl) {\n const { x: ax, y: ay } = middlewareData.arrow;\n const side = STATIC_SIDE[placement.split('-')[0] as keyof typeof STATIC_SIDE];\n Object.assign(arrowEl.style, {\n left: ax != null ? `${ax}px` : '',\n top: ay != null ? `${ay}px` : '',\n [side]: `${-arrowEl.offsetWidth / 2}px`,\n });\n }\n }\n\n startPositioning(options: PositionOptions) {\n const trigger = this._config.getTriggerElement();\n const floating = this._config.getFloatingElement();\n if (!trigger || !floating) return;\n\n this._cleanupAutoUpdate?.();\n this._cleanupAutoUpdate = autoUpdate(trigger, floating, () => this.updatePosition(options));\n }\n\n stopPositioning() {\n this._cleanupAutoUpdate?.();\n this._cleanupAutoUpdate = undefined;\n }\n\n // --- Safe polygon ---\n\n handlePointerLeave(e: PointerEvent, onHide: () => void) {\n const floating = this._config.getFloatingElement();\n const trigger = this._config.getTriggerElement();\n if (!floating || !trigger) {\n onHide();\n return;\n }\n\n const cursorX = e.clientX;\n const cursorY = e.clientY;\n\n const onMove = (moveEvent: PointerEvent) => {\n const { clientX: mx, clientY: my } = moveEvent;\n const cursor: Point = [mx, my];\n const rect = floating.getBoundingClientRect();\n const refRect = trigger.getBoundingClientRect();\n const side = this._currentPlacement.split('-')[0];\n\n if (isPointInRect(cursor, rect)) return;\n if (isPointInRect(cursor, refRect)) return;\n\n if (\n (side === 'top' && cursorY >= refRect.bottom - 1) ||\n (side === 'bottom' && cursorY <= refRect.top + 1) ||\n (side === 'left' && cursorX >= refRect.right - 1) ||\n (side === 'right' && cursorX <= refRect.left + 1)\n ) {\n cleanup();\n onHide();\n return;\n }\n\n const polygon = getSafePolygon(cursorX, cursorY, rect, refRect, this._currentPlacement);\n if (isPointInPolygon(cursor, polygon)) return;\n\n cleanup();\n onHide();\n };\n\n const cleanup = () => {\n document.removeEventListener('pointermove', onMove);\n };\n\n document.addEventListener('pointermove', onMove);\n\n this._cleanupSafePolygon?.();\n this._cleanupSafePolygon = cleanup;\n }\n\n cleanupSafePolygon() {\n this._cleanupSafePolygon?.();\n this._cleanupSafePolygon = undefined;\n }\n\n // --- Trigger listener management ---\n\n addTriggerListeners(handlers: TriggerHandlers) {\n const trigger = this._config.getTriggerElement();\n if (!trigger) return;\n\n this._handlers = handlers;\n this._triggerElement = trigger;\n\n if (handlers.onPointerEnter)\n trigger.addEventListener('pointerenter', handlers.onPointerEnter as EventListener);\n if (handlers.onPointerLeave)\n trigger.addEventListener('pointerleave', handlers.onPointerLeave as EventListener);\n if (handlers.onFocusIn)\n trigger.addEventListener('focusin', handlers.onFocusIn as EventListener);\n if (handlers.onFocusOut)\n trigger.addEventListener('focusout', handlers.onFocusOut as EventListener);\n if (handlers.onClick) trigger.addEventListener('click', handlers.onClick as EventListener);\n if (handlers.onKeyDown)\n trigger.addEventListener('keydown', handlers.onKeyDown as EventListener);\n }\n\n removeTriggerListeners(triggerOverride?: HTMLElement | null) {\n const trigger = triggerOverride ?? this._triggerElement;\n const handlers = this._handlers;\n if (!trigger || !handlers) return;\n\n if (handlers.onPointerEnter)\n trigger.removeEventListener('pointerenter', handlers.onPointerEnter as EventListener);\n if (handlers.onPointerLeave)\n trigger.removeEventListener('pointerleave', handlers.onPointerLeave as EventListener);\n if (handlers.onFocusIn)\n trigger.removeEventListener('focusin', handlers.onFocusIn as EventListener);\n if (handlers.onFocusOut)\n trigger.removeEventListener('focusout', handlers.onFocusOut as EventListener);\n if (handlers.onClick) trigger.removeEventListener('click', handlers.onClick as EventListener);\n if (handlers.onKeyDown)\n trigger.removeEventListener('keydown', handlers.onKeyDown as EventListener);\n\n if (!triggerOverride) {\n this._handlers = undefined;\n this._triggerElement = undefined;\n }\n }\n\n // --- Animation ---\n\n async animateShow(el: HTMLElement, duration: number, keyframes?: Keyframe[]) {\n const d = reducedMotion?.matches ? 0 : duration;\n el.getAnimations().forEach((a) => a.cancel());\n el.animate(\n keyframes ?? [\n { opacity: 0, scale: 0.96 },\n { opacity: 1, scale: 1 },\n ],\n { duration: d, fill: 'forwards' },\n );\n }\n\n async animateHide(el: HTMLElement, duration: number, keyframes?: Keyframe[]) {\n const d = reducedMotion?.matches ? 0 : duration;\n const anim = el.animate(\n keyframes ?? [\n { opacity: 1, scale: 1 },\n { opacity: 0, scale: 0.96 },\n ],\n { duration: d, fill: 'forwards' },\n );\n await anim.finished;\n }\n}\n",":host {\n --padding: 0.25rem;\n\n --background: var(--l-color-bg-surface, Canvas);\n --border-radius: 6px;\n --shadow: 0 4px 6px -1px rgb(0 0 0 / 8%), 0 2px 4px -2px rgb(0 0 0 / 6%);\n --show-duration: 150;\n --hide-duration: 150;\n\n display: inline-block;\n position: relative;\n}\n\n.trigger {\n display: contents;\n}\n\n[popover] {\n inset: unset;\n overflow: visible;\n box-sizing: border-box;\n width: max-content;\n min-width: anchor-size(width);\n padding: var(--padding);\n margin: 0;\n border: 1px solid var(--l-color-border-overlay, light-dark(#e5e7eb, #374151));\n border-radius: var(--border-radius);\n background: var(--background);\n color: var(--l-color-text-primary, CanvasText);\n box-shadow: var(--shadow);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n/* Lightweight separator alternative to <l-divider> — same dimensions, no extra import. */\n::slotted(hr) {\n height: 1px;\n margin-block: var(--padding);\n margin-inline: calc(var(--padding) * -1);\n border: 0;\n background: var(--l-color-divider);\n}\n","import { html, unsafeCSS, type PropertyValues } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { property } from 'lit/decorators.js';\nimport type { Placement } from '@floating-ui/dom';\nimport { PopoverController } from '../../shared/controllers/popover.js';\nimport { tagName } from '../../registry.js';\nimport type { DropdownItem } from '../dropdown-item/dropdown-item.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './dropdown.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * A dropdown menu anchored to a trigger element.\n *\n * @slot trigger - The element that triggers the dropdown.\n * @slot header - Optional content rendered above the menu items (e.g. a user profile row). Use an `<l-divider>` (or `<hr>`) after it to separate from items.\n * @slot - Menu content (`l-dropdown-item` elements). Drop an `<l-divider>` (or `<hr>`) between items to render a section separator.\n * @slot footer - Optional content rendered below the menu items (e.g. a version label or shortcut row). Use an `<l-divider>` (or `<hr>`) before it to separate from items.\n *\n * @csspart panel - The floating menu container.\n *\n * @cssproperty --background - Panel background color.\n * @cssproperty --border-radius - Panel border radius. Default `8px`.\n * @cssproperty --padding - Panel inner padding. Default `0.25rem`. Slotted `<l-divider>` elements bleed by this amount on each side to span the panel edges.\n * @cssproperty --shadow - Panel box shadow.\n * @cssproperty --show-duration - Show animation duration in ms. Default `150`.\n * @cssproperty --hide-duration - Hide animation duration in ms. Default `150`.\n *\n * @event show - Fired before the dropdown opens. Cancelable.\n * @event after-show - Fired after the open animation completes.\n * @event hide - Fired before the dropdown closes. Cancelable.\n * @event after-hide - Fired after the close animation completes.\n * @event select - Fired when an item is selected. Detail: `{ item: DropdownItem }`.\n */\nexport class Dropdown extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n private _floating = new PopoverController(this, {\n getTriggerElement: () => this._triggerEl,\n getFloatingElement: () => this._panelEl,\n getArrowElement: () => null,\n });\n\n private _typeaheadBuffer = '';\n private _typeaheadTimeout = 0;\n\n /** Whether the dropdown is open. */\n @property({ type: Boolean, reflect: true })\n accessor open = false;\n\n /** Preferred placement of the panel. */\n @property()\n accessor placement: Placement = 'bottom-start';\n\n /** Distance in pixels from the trigger. */\n @property({ type: Number })\n accessor distance = 4;\n\n /** Disables the dropdown trigger. */\n @property({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n private get _triggerEl(): HTMLElement | null {\n const slot = this.shadowRoot!.querySelector<HTMLSlotElement>('.trigger slot');\n return (slot?.assignedElements()[0] as HTMLElement) ?? null;\n }\n\n private get _panelEl(): HTMLElement | null {\n return this.shadowRoot!.querySelector<HTMLElement>('[popover]');\n }\n\n private _getItems(): DropdownItem[] {\n const menuSlot = this.shadowRoot!.querySelector<HTMLSlotElement>('slot:not([name])');\n if (!menuSlot) return [];\n return (menuSlot.assignedElements() as DropdownItem[]).filter(\n (el) => el.tagName === tagName('dropdown-item').toUpperCase() && !el.disabled,\n );\n }\n\n private _getAllItems(): DropdownItem[] {\n const menuSlot = this.shadowRoot!.querySelector<HTMLSlotElement>('slot:not([name])');\n if (!menuSlot) return [];\n return (menuSlot.assignedElements() as DropdownItem[]).filter(\n (el) => el.tagName === tagName('dropdown-item').toUpperCase(),\n );\n }\n\n private _getDuration(prop: '--show-duration' | '--hide-duration'): number {\n const parsed = parseFloat(getComputedStyle(this).getPropertyValue(prop));\n return Number.isNaN(parsed) ? 150 : parsed;\n }\n\n // --- Public API ---\n\n show() {\n if (this.open || this.disabled) return;\n if (this.emit('show', { cancelable: true })) this.open = true;\n }\n\n hide() {\n if (!this.open) return;\n if (this.emit('hide', { cancelable: true })) this.open = false;\n }\n\n toggle() {\n if (this.open) this.hide();\n else this.show();\n }\n\n // --- Lifecycle ---\n\n override updated(changed: PropertyValues<this>) {\n if (changed.has('open')) {\n void this._handleOpenChange();\n }\n }\n\n // --- Open/Close ---\n\n private async _handleOpenChange() {\n const panel = this._panelEl;\n if (!panel) return;\n\n const posOpts = { placement: this.placement, distance: this.distance };\n\n if (this.open) {\n panel.showPopover();\n await this._floating.updatePosition(posOpts);\n if (!this.open) return;\n await this._floating.animateShow(panel, this._getDuration('--show-duration'));\n this._floating.startPositioning(posOpts);\n this._triggerEl?.setAttribute('aria-expanded', 'true');\n this.emit('after-show');\n } else {\n this._floating.stopPositioning();\n this._triggerEl?.setAttribute('aria-expanded', 'false');\n await this._floating.animateHide(panel, this._getDuration('--hide-duration'));\n if (panel.matches(':popover-open')) panel.hidePopover();\n this.emit('after-hide');\n }\n }\n\n // --- Focus management ---\n\n private _setActiveItem(item: DropdownItem) {\n const itemEl = item.shadowRoot!.querySelector<HTMLElement>('.item');\n if (!itemEl) return;\n\n // Reset all items\n for (const i of this._getAllItems()) {\n const el = i.shadowRoot!.querySelector<HTMLElement>('.item');\n el?.setAttribute('tabindex', '-1');\n }\n\n itemEl.setAttribute('tabindex', '0');\n itemEl.focus();\n }\n\n private _focusFirstItem() {\n const items = this._getItems();\n if (items.length) this._setActiveItem(items[0]);\n }\n\n private _focusLastItem() {\n const items = this._getItems();\n if (items.length) this._setActiveItem(items[items.length - 1]);\n }\n\n private _getCurrentItem(): DropdownItem | null {\n const items = this._getItems();\n return (\n items.find((item) => {\n const el = item.shadowRoot!.querySelector<HTMLElement>('.item');\n return el?.getAttribute('tabindex') === '0' && item.shadowRoot!.activeElement === el;\n }) ?? null\n );\n }\n\n private _focusNextItem() {\n const items = this._getItems();\n const current = this._getCurrentItem();\n const index = current ? items.indexOf(current) : -1;\n const next = items[(index + 1) % items.length];\n if (next) this._setActiveItem(next);\n }\n\n private _focusPreviousItem() {\n const items = this._getItems();\n const current = this._getCurrentItem();\n const index = current ? items.indexOf(current) : 0;\n const prev = items[(index - 1 + items.length) % items.length];\n if (prev) this._setActiveItem(prev);\n }\n\n // --- Typeahead ---\n\n private _handleTypeahead(key: string) {\n clearTimeout(this._typeaheadTimeout);\n this._typeaheadBuffer += key.toLowerCase();\n this._typeaheadTimeout = window.setTimeout(() => {\n this._typeaheadBuffer = '';\n }, 500);\n\n const items = this._getItems();\n const match = items.find((item) =>\n item.getTextLabel().toLowerCase().startsWith(this._typeaheadBuffer),\n );\n if (match) this._setActiveItem(match);\n }\n\n // --- Event handlers ---\n\n private _onTriggerClick = (e: MouseEvent) => {\n if (this.disabled) return;\n this.toggle();\n // Space/Enter on a native button dispatches click with detail=0; focus the\n // first item so the menu is keyboard-navigable immediately on open.\n if (this.open && e.detail === 0) {\n requestAnimationFrame(() => this._focusFirstItem());\n }\n };\n\n private _onTriggerKeyDown = (e: KeyboardEvent) => {\n if (this.disabled) return;\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n this.show();\n requestAnimationFrame(() => this._focusFirstItem());\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n this.show();\n requestAnimationFrame(() => this._focusLastItem());\n }\n };\n\n private _onPanelKeyDown = (e: KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this._focusNextItem();\n break;\n case 'ArrowUp':\n e.preventDefault();\n this._focusPreviousItem();\n break;\n case 'Home':\n e.preventDefault();\n this._focusFirstItem();\n break;\n case 'End':\n e.preventDefault();\n this._focusLastItem();\n break;\n case 'Escape':\n e.preventDefault();\n this.hide();\n this._triggerEl?.focus();\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n this._selectCurrentItem();\n break;\n default:\n if (e.key.length === 1 && !e.ctrlKey && !e.metaKey) {\n this._handleTypeahead(e.key);\n }\n }\n };\n\n private _onItemClick = (e: Event) => {\n const item = (e.target as HTMLElement).closest<DropdownItem>(tagName('dropdown-item'));\n if (item && !item.disabled) {\n this._selectItem(item);\n }\n };\n\n private _selectCurrentItem() {\n const current = this._getCurrentItem();\n if (current) this._selectItem(current);\n }\n\n private _selectItem(item: DropdownItem) {\n if (item.type === 'checkbox') {\n item.checked = !item.checked;\n }\n this.emit('select', { detail: { item } });\n if (item.type !== 'checkbox') {\n this.hide();\n this._triggerEl?.focus();\n }\n }\n\n /** Sync `open` when popover=\"auto\" light-dismiss fires. */\n private _onToggle = (e: Event) => {\n const toggleEvent = e as ToggleEvent;\n if (toggleEvent.newState === 'closed' && this.open) {\n this.open = false;\n this._triggerEl?.setAttribute('aria-expanded', 'false');\n }\n };\n\n override render() {\n return html`\n <div\n class=\"trigger\"\n @click=${this._onTriggerClick}\n @keydown=${this._onTriggerKeyDown}\n >\n <slot name=\"trigger\"></slot>\n </div>\n <div\n popover=\"auto\"\n part=\"panel\"\n @keydown=${this._onPanelKeyDown}\n @click=${this._onItemClick}\n @toggle=${this._onToggle}\n >\n <slot name=\"header\"></slot>\n <div role=\"menu\">\n <slot></slot>\n </div>\n <slot name=\"footer\"></slot>\n </div>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Dropdown } from './dropdown.js';\nexport * from './dropdown.js';\ndefine('dropdown', Dropdown);\n",":host {\n display: block;\n}\n\n:host([disabled]) {\n pointer-events: none;\n opacity: 0.5;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0.375rem 0.5rem;\n cursor: pointer;\n outline: none;\n border-radius: 4px;\n font-size: 0.875rem;\n line-height: 1.5;\n color: var(--l-color-text-primary, CanvasText);\n white-space: nowrap;\n}\n\n.item:focus-visible {\n background: var(--l-color-bg-state-hover);\n}\n\n@media (hover: hover) {\n .item:hover {\n background: var(--l-color-bg-state-hover);\n }\n}\n\n.check {\n display: flex;\n width: 16px;\n flex-shrink: 0;\n}\n\n:host(:not([checked])) .check svg {\n visibility: hidden;\n}\n\n::slotted([slot='prefix']),\n::slotted([slot='suffix']) {\n display: flex;\n flex-shrink: 0;\n}\n\n.label {\n flex: 1;\n}\n","import { html, nothing, unsafeCSS } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { property } from 'lit/decorators.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './dropdown-item.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * A menu item for use inside `<l-dropdown>`.\n *\n * @slot - Label text.\n * @slot prefix - Leading content (e.g. icon).\n * @slot suffix - Trailing content.\n *\n * @cssproperty --color - Text color.\n */\nexport class DropdownItem extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n /** The value associated with this item. */\n @property()\n accessor value = '';\n\n /** Disables the item. */\n @property({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n /** The type of item: `normal` or `checkbox`. */\n @property()\n accessor type: 'normal' | 'checkbox' = 'normal';\n\n /** Whether the checkbox item is checked. */\n @property({ type: Boolean, reflect: true })\n accessor checked = false;\n\n /** Returns the text label of this item. */\n getTextLabel(): string {\n return (this.textContent ?? '').trim();\n }\n\n override render() {\n const isCheckbox = this.type === 'checkbox';\n\n return html`\n <div\n class=\"item\"\n role=${isCheckbox ? 'menuitemcheckbox' : 'menuitem'}\n aria-checked=${isCheckbox ? String(this.checked) : nothing}\n aria-disabled=${this.disabled ? 'true' : nothing}\n tabindex=\"-1\"\n >\n ${isCheckbox\n ? html`\n <span\n class=\"check\"\n aria-hidden=\"true\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3.5 8.5L6.5 11.5L12.5 4.5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n `\n : html` <slot name=\"prefix\"></slot> `}\n <span class=\"label\"><slot></slot></span>\n <slot name=\"suffix\"></slot>\n </div>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { DropdownItem } from './dropdown-item.js';\nexport * from './dropdown-item.js';\ndefine('dropdown-item', DropdownItem);\n","/**\n* (c) Iconify\n*\n* For the full copyright and license information, please view the license.txt\n* files at https://github.com/iconify/iconify\n*\n* Licensed under MIT.\n*\n* @license MIT\n* @version 3.0.2\n*/\n/** Default values for dimensions */\nconst defaultIconDimensions = Object.freeze({\n\tleft: 0,\n\ttop: 0,\n\twidth: 16,\n\theight: 16\n});\n/** Default values for transformations */\nconst defaultIconTransformations = Object.freeze({\n\trotate: 0,\n\tvFlip: false,\n\thFlip: false\n});\n/** Default values for all optional IconifyIcon properties */\nconst defaultIconProps = Object.freeze({\n\t...defaultIconDimensions,\n\t...defaultIconTransformations\n});\n/** Default values for all properties used in ExtendedIconifyIcon */\nconst defaultExtendedIconProps = Object.freeze({\n\t...defaultIconProps,\n\tbody: \"\",\n\thidden: false\n});\n\n/**\n* Default icon customisations values\n*/\nconst defaultIconSizeCustomisations = Object.freeze({\n\twidth: null,\n\theight: null\n});\nconst defaultIconCustomisations = Object.freeze({\n\t...defaultIconSizeCustomisations,\n\t...defaultIconTransformations\n});\n\n/**\n* Get rotation value\n*/\nfunction rotateFromString(value, defaultValue = 0) {\n\tconst units = value.replace(/^-?[0-9.]*/, \"\");\n\tfunction cleanup(value$1) {\n\t\twhile (value$1 < 0) value$1 += 4;\n\t\treturn value$1 % 4;\n\t}\n\tif (units === \"\") {\n\t\tconst num = parseInt(value);\n\t\treturn isNaN(num) ? 0 : cleanup(num);\n\t} else if (units !== value) {\n\t\tlet split = 0;\n\t\tswitch (units) {\n\t\t\tcase \"%\":\n\t\t\t\tsplit = 25;\n\t\t\t\tbreak;\n\t\t\tcase \"deg\": split = 90;\n\t\t}\n\t\tif (split) {\n\t\t\tlet num = parseFloat(value.slice(0, value.length - units.length));\n\t\t\tif (isNaN(num)) return 0;\n\t\t\tnum = num / split;\n\t\t\treturn num % 1 === 0 ? cleanup(num) : 0;\n\t\t}\n\t}\n\treturn defaultValue;\n}\n\nconst separator = /[\\s,]+/;\n/**\n* Apply \"flip\" string to icon customisations\n*/\nfunction flipFromString(custom, flip) {\n\tflip.split(separator).forEach((str) => {\n\t\tswitch (str.trim()) {\n\t\t\tcase \"horizontal\":\n\t\t\t\tcustom.hFlip = true;\n\t\t\t\tbreak;\n\t\t\tcase \"vertical\":\n\t\t\t\tcustom.vFlip = true;\n\t\t\t\tbreak;\n\t\t}\n\t});\n}\n\nconst defaultCustomisations = {\n ...defaultIconCustomisations,\n preserveAspectRatio: '',\n};\n/**\n * Get customisations\n */\nfunction getCustomisations(node) {\n const customisations = {\n ...defaultCustomisations,\n };\n const attr = (key, def) => node.getAttribute(key) || def;\n // Dimensions\n customisations.width = attr('width', null);\n customisations.height = attr('height', null);\n // Rotation\n customisations.rotate = rotateFromString(attr('rotate', ''));\n // Flip\n flipFromString(customisations, attr('flip', ''));\n // SVG attributes\n customisations.preserveAspectRatio = attr('preserveAspectRatio', attr('preserveaspectratio', ''));\n return customisations;\n}\n/**\n * Check if customisations have been updated\n */\nfunction haveCustomisationsChanged(value1, value2) {\n for (const key in defaultCustomisations) {\n if (value1[key] !== value2[key]) {\n return true;\n }\n }\n return false;\n}\n\n/**\n* Expression to test part of icon name.\n*\n* Used when loading icons from Iconify API due to project naming convension.\n* Ignored when using custom icon sets - convension does not apply.\n*/\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n/**\n* Convert string icon name to IconifyIconName object.\n*/\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n\tconst colonSeparated = value.split(\":\");\n\tif (value.slice(0, 1) === \"@\") {\n\t\tif (colonSeparated.length < 2 || colonSeparated.length > 3) return null;\n\t\tprovider = colonSeparated.shift().slice(1);\n\t}\n\tif (colonSeparated.length > 3 || !colonSeparated.length) return null;\n\tif (colonSeparated.length > 1) {\n\t\tconst name$1 = colonSeparated.pop();\n\t\tconst prefix = colonSeparated.pop();\n\t\tconst result = {\n\t\t\tprovider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n\t\t\tprefix,\n\t\t\tname: name$1\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tconst name = colonSeparated[0];\n\tconst dashSeparated = name.split(\"-\");\n\tif (dashSeparated.length > 1) {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: dashSeparated.shift(),\n\t\t\tname: dashSeparated.join(\"-\")\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tif (allowSimpleName && provider === \"\") {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: \"\",\n\t\t\tname\n\t\t};\n\t\treturn validate && !validateIconName(result, allowSimpleName) ? null : result;\n\t}\n\treturn null;\n};\n/**\n* Check if icon is valid.\n*\n* This function is not part of stringToIcon because validation is not needed for most code.\n*/\nconst validateIconName = (icon, allowSimpleName) => {\n\tif (!icon) return false;\n\treturn !!((allowSimpleName && icon.prefix === \"\" || !!icon.prefix) && !!icon.name);\n};\n\n/**\n* Resolve icon set icons\n*\n* Returns parent icon for each icon\n*/\nfunction getIconsTree(data, names) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tconst resolved = Object.create(null);\n\tfunction resolve(name) {\n\t\tif (icons[name]) return resolved[name] = [];\n\t\tif (!(name in resolved)) {\n\t\t\tresolved[name] = null;\n\t\t\tconst parent = aliases[name] && aliases[name].parent;\n\t\t\tconst value = parent && resolve(parent);\n\t\t\tif (value) resolved[name] = [parent].concat(value);\n\t\t}\n\t\treturn resolved[name];\n\t}\n\t(Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n\treturn resolved;\n}\n\n/**\n* Merge transformations\n*/\nfunction mergeIconTransformations(obj1, obj2) {\n\tconst result = {};\n\tif (!obj1.hFlip !== !obj2.hFlip) result.hFlip = true;\n\tif (!obj1.vFlip !== !obj2.vFlip) result.vFlip = true;\n\tconst rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n\tif (rotate) result.rotate = rotate;\n\treturn result;\n}\n\n/**\n* Merge icon and alias\n*\n* Can also be used to merge default values and icon\n*/\nfunction mergeIconData(parent, child) {\n\tconst result = mergeIconTransformations(parent, child);\n\tfor (const key in defaultExtendedIconProps) if (key in defaultIconTransformations) {\n\t\tif (key in parent && !(key in result)) result[key] = defaultIconTransformations[key];\n\t} else if (key in child) result[key] = child[key];\n\telse if (key in parent) result[key] = parent[key];\n\treturn result;\n}\n\n/**\n* Get icon data, using prepared aliases tree\n*/\nfunction internalGetIconData(data, name, tree) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tlet currentProps = {};\n\tfunction parse(name$1) {\n\t\tcurrentProps = mergeIconData(icons[name$1] || aliases[name$1], currentProps);\n\t}\n\tparse(name);\n\ttree.forEach(parse);\n\treturn mergeIconData(data, currentProps);\n}\n\n/**\n* Extract icons from an icon set\n*\n* Returns list of icons that were found in icon set\n*/\nfunction parseIconSet(data, callback) {\n\tconst names = [];\n\tif (typeof data !== \"object\" || typeof data.icons !== \"object\") return names;\n\tif (data.not_found instanceof Array) data.not_found.forEach((name) => {\n\t\tcallback(name, null);\n\t\tnames.push(name);\n\t});\n\tconst tree = getIconsTree(data);\n\tfor (const name in tree) {\n\t\tconst item = tree[name];\n\t\tif (item) {\n\t\t\tcallback(name, internalGetIconData(data, name, item));\n\t\t\tnames.push(name);\n\t\t}\n\t}\n\treturn names;\n}\n\n/**\n* Optional properties\n*/\nconst optionalPropertyDefaults = {\n\tprovider: \"\",\n\taliases: {},\n\tnot_found: {},\n\t...defaultIconDimensions\n};\n/**\n* Check props\n*/\nfunction checkOptionalProps(item, defaults) {\n\tfor (const prop in defaults) if (prop in item && typeof item[prop] !== typeof defaults[prop]) return false;\n\treturn true;\n}\n/**\n* Validate icon set, return it as IconifyJSON on success, null on failure\n*\n* Unlike validateIconSet(), this function is very basic.\n* It does not throw exceptions, it does not check metadata, it does not fix stuff.\n*/\nfunction quicklyValidateIconSet(obj) {\n\tif (typeof obj !== \"object\" || obj === null) return null;\n\tconst data = obj;\n\tif (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") return null;\n\tif (!checkOptionalProps(obj, optionalPropertyDefaults)) return null;\n\tconst icons = data.icons;\n\tfor (const name in icons) {\n\t\tconst icon = icons[name];\n\t\tif (!name || typeof icon.body !== \"string\" || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\tconst aliases = data.aliases || Object.create(null);\n\tfor (const name in aliases) {\n\t\tconst icon = aliases[name];\n\t\tconst parent = icon.parent;\n\t\tif (!name || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\treturn data;\n}\n\n/**\n* Storage by provider and prefix\n*/\nconst dataStorage = Object.create(null);\n/**\n* Create new storage\n*/\nfunction newStorage(provider, prefix) {\n\treturn {\n\t\tprovider,\n\t\tprefix,\n\t\ticons: Object.create(null),\n\t\tmissing: /* @__PURE__ */ new Set()\n\t};\n}\n/**\n* Get storage for provider and prefix\n*/\nfunction getStorage(provider, prefix) {\n\tconst providerStorage = dataStorage[provider] || (dataStorage[provider] = Object.create(null));\n\treturn providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\n/**\n* Add icon set to storage\n*\n* Returns array of added icons\n*/\nfunction addIconSet(storage, data) {\n\tif (!quicklyValidateIconSet(data)) return [];\n\treturn parseIconSet(data, (name, icon) => {\n\t\tif (icon) storage.icons[name] = icon;\n\t\telse storage.missing.add(name);\n\t});\n}\n/**\n* Add icon to storage\n*/\nfunction addIconToStorage(storage, name, icon) {\n\ttry {\n\t\tif (typeof icon.body === \"string\") {\n\t\t\tstorage.icons[name] = { ...icon };\n\t\t\treturn true;\n\t\t}\n\t} catch (err) {}\n\treturn false;\n}\n/**\n* List available icons\n*/\nfunction listIcons$1(provider, prefix) {\n\tlet allIcons = [];\n\t(typeof provider === \"string\" ? [provider] : Object.keys(dataStorage)).forEach((provider$1) => {\n\t\t(typeof provider$1 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider$1] || {})).forEach((prefix$1) => {\n\t\t\tconst storage = getStorage(provider$1, prefix$1);\n\t\t\tallIcons = allIcons.concat(Object.keys(storage.icons).map((name) => (provider$1 !== \"\" ? \"@\" + provider$1 + \":\" : \"\") + prefix$1 + \":\" + name));\n\t\t});\n\t});\n\treturn allIcons;\n}\n\n/**\n* Allow storing icons without provider or prefix, making it possible to store icons like \"home\"\n*/\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n\tif (typeof allow === \"boolean\") simpleNames = allow;\n\treturn simpleNames;\n}\n/**\n* Get icon data\n*\n* Returns:\n* - IconifyIcon on success, object directly from storage so don't modify it\n* - null if icon is marked as missing (returned in `not_found` property from API, so don't bother sending API requests)\n* - undefined if icon is missing in storage\n*/\nfunction getIconData(name) {\n\tconst icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n\tif (icon) {\n\t\tconst storage = getStorage(icon.provider, icon.prefix);\n\t\tconst iconName = icon.name;\n\t\treturn storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n\t}\n}\n/**\n* Add one icon\n*/\nfunction addIcon$1(name, data) {\n\tconst icon = stringToIcon(name, true, simpleNames);\n\tif (!icon) return false;\n\tconst storage = getStorage(icon.provider, icon.prefix);\n\tif (data) return addIconToStorage(storage, icon.name, data);\n\telse {\n\t\tstorage.missing.add(icon.name);\n\t\treturn true;\n\t}\n}\n/**\n* Add icon set\n*/\nfunction addCollection$1(data, provider) {\n\tif (typeof data !== \"object\") return false;\n\tif (typeof provider !== \"string\") provider = data.provider || \"\";\n\tif (simpleNames && !provider && !data.prefix) {\n\t\tlet added = false;\n\t\tif (quicklyValidateIconSet(data)) {\n\t\t\tdata.prefix = \"\";\n\t\t\tparseIconSet(data, (name, icon) => {\n\t\t\t\tif (addIcon$1(name, icon)) added = true;\n\t\t\t});\n\t\t}\n\t\treturn added;\n\t}\n\tconst prefix = data.prefix;\n\tif (!validateIconName({\n\t\tprefix,\n\t\tname: \"a\"\n\t})) return false;\n\treturn !!addIconSet(getStorage(provider, prefix), data);\n}\n/**\n* Check if icon data is available\n*/\nfunction iconLoaded$1(name) {\n\treturn !!getIconData(name);\n}\n/**\n* Get full icon\n*/\nfunction getIcon$1(name) {\n\tconst result = getIconData(name);\n\treturn result ? {\n\t\t...defaultIconProps,\n\t\t...result\n\t} : result;\n}\n\n/**\n* Remove callback\n*/\nfunction removeCallback(storages, id) {\n\tstorages.forEach((storage) => {\n\t\tconst items = storage.loaderCallbacks;\n\t\tif (items) storage.loaderCallbacks = items.filter((row) => row.id !== id);\n\t});\n}\n/**\n* Update all callbacks for provider and prefix\n*/\nfunction updateCallbacks(storage) {\n\tif (!storage.pendingCallbacksFlag) {\n\t\tstorage.pendingCallbacksFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.pendingCallbacksFlag = false;\n\t\t\tconst items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n\t\t\tif (!items.length) return;\n\t\t\tlet hasPending = false;\n\t\t\tconst provider = storage.provider;\n\t\t\tconst prefix = storage.prefix;\n\t\t\titems.forEach((item) => {\n\t\t\t\tconst icons = item.icons;\n\t\t\t\tconst oldLength = icons.pending.length;\n\t\t\t\ticons.pending = icons.pending.filter((icon) => {\n\t\t\t\t\tif (icon.prefix !== prefix) return true;\n\t\t\t\t\tconst name = icon.name;\n\t\t\t\t\tif (storage.icons[name]) icons.loaded.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse if (storage.missing.has(name)) icons.missing.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse {\n\t\t\t\t\t\thasPending = true;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tif (icons.pending.length !== oldLength) {\n\t\t\t\t\tif (!hasPending) removeCallback([storage], item.id);\n\t\t\t\t\titem.callback(icons.loaded.slice(0), icons.missing.slice(0), icons.pending.slice(0), item.abort);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Unique id counter for callbacks\n*/\nlet idCounter = 0;\n/**\n* Add callback\n*/\nfunction storeCallback(callback, icons, pendingSources) {\n\tconst id = idCounter++;\n\tconst abort = removeCallback.bind(null, pendingSources, id);\n\tif (!icons.pending.length) return abort;\n\tconst item = {\n\t\tid,\n\t\ticons,\n\t\tcallback,\n\t\tabort\n\t};\n\tpendingSources.forEach((storage) => {\n\t\t(storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n\t});\n\treturn abort;\n}\n\n/**\n* Check if icons have been loaded\n*/\nfunction sortIcons(icons) {\n\tconst result = {\n\t\tloaded: [],\n\t\tmissing: [],\n\t\tpending: []\n\t};\n\tconst storage = Object.create(null);\n\ticons.sort((a, b) => {\n\t\tif (a.provider !== b.provider) return a.provider.localeCompare(b.provider);\n\t\tif (a.prefix !== b.prefix) return a.prefix.localeCompare(b.prefix);\n\t\treturn a.name.localeCompare(b.name);\n\t});\n\tlet lastIcon = {\n\t\tprovider: \"\",\n\t\tprefix: \"\",\n\t\tname: \"\"\n\t};\n\ticons.forEach((icon) => {\n\t\tif (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) return;\n\t\tlastIcon = icon;\n\t\tconst provider = icon.provider;\n\t\tconst prefix = icon.prefix;\n\t\tconst name = icon.name;\n\t\tconst providerStorage = storage[provider] || (storage[provider] = Object.create(null));\n\t\tconst localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n\t\tlet list;\n\t\tif (name in localStorage.icons) list = result.loaded;\n\t\telse if (prefix === \"\" || localStorage.missing.has(name)) list = result.missing;\n\t\telse list = result.pending;\n\t\tconst item = {\n\t\t\tprovider,\n\t\t\tprefix,\n\t\t\tname\n\t\t};\n\t\tlist.push(item);\n\t});\n\treturn result;\n}\n\n/**\n* Local storate types and entries\n*/\nconst storage = Object.create(null);\n/**\n* Set API module\n*/\nfunction setAPIModule(provider, item) {\n\tstorage[provider] = item;\n}\n/**\n* Get API module\n*/\nfunction getAPIModule(provider) {\n\treturn storage[provider] || storage[\"\"];\n}\n\n/**\n* Convert icons list from string/icon mix to icons and validate them\n*/\nfunction listToIcons(list, validate = true, simpleNames = false) {\n\tconst result = [];\n\tlist.forEach((item) => {\n\t\tconst icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n\t\tif (icon) result.push(icon);\n\t});\n\treturn result;\n}\n\n/**\n* Create full API configuration from partial data\n*/\nfunction createAPIConfig(source) {\n\tlet resources;\n\tif (typeof source.resources === \"string\") resources = [source.resources];\n\telse {\n\t\tresources = source.resources;\n\t\tif (!(resources instanceof Array) || !resources.length) return null;\n\t}\n\treturn {\n\t\tresources,\n\t\tpath: source.path || \"/\",\n\t\tmaxURL: source.maxURL || 500,\n\t\trotate: source.rotate || 750,\n\t\ttimeout: source.timeout || 5e3,\n\t\trandom: source.random === true,\n\t\tindex: source.index || 0,\n\t\tdataAfterTimeout: source.dataAfterTimeout !== false\n\t};\n}\n/**\n* Local storage\n*/\nconst configStorage = Object.create(null);\n/**\n* Redundancy for API servers.\n*\n* API should have very high uptime because of implemented redundancy at server level, but\n* sometimes bad things happen. On internet 100% uptime is not possible.\n*\n* There could be routing problems. Server might go down for whatever reason, but it takes\n* few minutes to detect that downtime, so during those few minutes API might not be accessible.\n*\n* This script has some redundancy to mitigate possible network issues.\n*\n* If one host cannot be reached in 'rotate' (750 by default) ms, script will try to retrieve\n* data from different host. Hosts have different configurations, pointing to different\n* API servers hosted at different providers.\n*/\nconst fallBackAPISources = [\"https://api.simplesvg.com\", \"https://api.unisvg.com\"];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) if (fallBackAPISources.length === 1) fallBackAPI.push(fallBackAPISources.shift());\nelse if (Math.random() > .5) fallBackAPI.push(fallBackAPISources.shift());\nelse fallBackAPI.push(fallBackAPISources.pop());\nconfigStorage[\"\"] = createAPIConfig({ resources: [\"https://api.iconify.design\"].concat(fallBackAPI) });\n/**\n* Add custom config for provider\n*/\nfunction addAPIProvider$1(provider, customConfig) {\n\tconst config = createAPIConfig(customConfig);\n\tif (config === null) return false;\n\tconfigStorage[provider] = config;\n\treturn true;\n}\n/**\n* Get API configuration\n*/\nfunction getAPIConfig(provider) {\n\treturn configStorage[provider];\n}\n/**\n* List API providers\n*/\nfunction listAPIProviders() {\n\treturn Object.keys(configStorage);\n}\n\n/**\n* Default RedundancyConfig for API calls\n*/\nconst defaultConfig = {\n\tresources: [],\n\tindex: 0,\n\ttimeout: 2e3,\n\trotate: 750,\n\trandom: false,\n\tdataAfterTimeout: false\n};\n\n/**\n* Send query\n*/\nfunction sendQuery(config, payload, query, done) {\n\tconst resourcesCount = config.resources.length;\n\tconst startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n\tlet resources;\n\tif (config.random) {\n\t\tlet list = config.resources.slice(0);\n\t\tresources = [];\n\t\twhile (list.length > 1) {\n\t\t\tconst nextIndex = Math.floor(Math.random() * list.length);\n\t\t\tresources.push(list[nextIndex]);\n\t\t\tlist = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n\t\t}\n\t\tresources = resources.concat(list);\n\t} else resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n\tconst startTime = Date.now();\n\tlet status = \"pending\";\n\tlet queriesSent = 0;\n\tlet lastError;\n\tlet timer = null;\n\tlet queue = [];\n\tlet doneCallbacks = [];\n\tif (typeof done === \"function\") doneCallbacks.push(done);\n\t/**\n\t* Reset timer\n\t*/\n\tfunction resetTimer() {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = null;\n\t\t}\n\t}\n\t/**\n\t* Abort everything\n\t*/\n\tfunction abort() {\n\t\tif (status === \"pending\") status = \"aborted\";\n\t\tresetTimer();\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Add / replace callback to call when execution is complete.\n\t* This can be used to abort pending query implementations when query is complete or aborted.\n\t*/\n\tfunction subscribe(callback, overwrite) {\n\t\tif (overwrite) doneCallbacks = [];\n\t\tif (typeof callback === \"function\") doneCallbacks.push(callback);\n\t}\n\t/**\n\t* Get query status\n\t*/\n\tfunction getQueryStatus() {\n\t\treturn {\n\t\t\tstartTime,\n\t\t\tpayload,\n\t\t\tstatus,\n\t\t\tqueriesSent,\n\t\t\tqueriesPending: queue.length,\n\t\t\tsubscribe,\n\t\t\tabort\n\t\t};\n\t}\n\t/**\n\t* Fail query\n\t*/\n\tfunction failQuery() {\n\t\tstatus = \"failed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(void 0, lastError);\n\t\t});\n\t}\n\t/**\n\t* Clear queue\n\t*/\n\tfunction clearQueue() {\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Got response from module\n\t*/\n\tfunction moduleResponse(item, response, data) {\n\t\tconst isError = response !== \"success\";\n\t\tqueue = queue.filter((queued) => queued !== item);\n\t\tswitch (status) {\n\t\t\tcase \"pending\": break;\n\t\t\tcase \"failed\":\n\t\t\t\tif (isError || !config.dataAfterTimeout) return;\n\t\t\t\tbreak;\n\t\t\tdefault: return;\n\t\t}\n\t\tif (response === \"abort\") {\n\t\t\tlastError = data;\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tif (isError) {\n\t\t\tlastError = data;\n\t\t\tif (!queue.length) if (!resources.length) failQuery();\n\t\t\telse execNext();\n\t\t\treturn;\n\t\t}\n\t\tresetTimer();\n\t\tclearQueue();\n\t\tif (!config.random) {\n\t\t\tconst index = config.resources.indexOf(item.resource);\n\t\t\tif (index !== -1 && index !== config.index) config.index = index;\n\t\t}\n\t\tstatus = \"completed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(data);\n\t\t});\n\t}\n\t/**\n\t* Execute next query\n\t*/\n\tfunction execNext() {\n\t\tif (status !== \"pending\") return;\n\t\tresetTimer();\n\t\tconst resource = resources.shift();\n\t\tif (resource === void 0) {\n\t\t\tif (queue.length) {\n\t\t\t\ttimer = setTimeout(() => {\n\t\t\t\t\tresetTimer();\n\t\t\t\t\tif (status === \"pending\") {\n\t\t\t\t\t\tclearQueue();\n\t\t\t\t\t\tfailQuery();\n\t\t\t\t\t}\n\t\t\t\t}, config.timeout);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tconst item = {\n\t\t\tstatus: \"pending\",\n\t\t\tresource,\n\t\t\tcallback: (status$1, data) => {\n\t\t\t\tmoduleResponse(item, status$1, data);\n\t\t\t}\n\t\t};\n\t\tqueue.push(item);\n\t\tqueriesSent++;\n\t\ttimer = setTimeout(execNext, config.rotate);\n\t\tquery(resource, payload, item.callback);\n\t}\n\tsetTimeout(execNext);\n\treturn getQueryStatus;\n}\n\n/**\n* Redundancy instance\n*/\nfunction initRedundancy(cfg) {\n\tconst config = {\n\t\t...defaultConfig,\n\t\t...cfg\n\t};\n\tlet queries = [];\n\t/**\n\t* Remove aborted and completed queries\n\t*/\n\tfunction cleanup() {\n\t\tqueries = queries.filter((item) => item().status === \"pending\");\n\t}\n\t/**\n\t* Send query\n\t*/\n\tfunction query(payload, queryCallback, doneCallback) {\n\t\tconst query$1 = sendQuery(config, payload, queryCallback, (data, error) => {\n\t\t\tcleanup();\n\t\t\tif (doneCallback) doneCallback(data, error);\n\t\t});\n\t\tqueries.push(query$1);\n\t\treturn query$1;\n\t}\n\t/**\n\t* Find instance\n\t*/\n\tfunction find(callback) {\n\t\treturn queries.find((value) => {\n\t\t\treturn callback(value);\n\t\t}) || null;\n\t}\n\treturn {\n\t\tquery,\n\t\tfind,\n\t\tsetIndex: (index) => {\n\t\t\tconfig.index = index;\n\t\t},\n\t\tgetIndex: () => config.index,\n\t\tcleanup\n\t};\n}\n\nfunction emptyCallback$1() {}\nconst redundancyCache = Object.create(null);\n/**\n* Get Redundancy instance for provider\n*/\nfunction getRedundancyCache(provider) {\n\tif (!redundancyCache[provider]) {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (!config) return;\n\t\tredundancyCache[provider] = {\n\t\t\tconfig,\n\t\t\tredundancy: initRedundancy(config)\n\t\t};\n\t}\n\treturn redundancyCache[provider];\n}\n/**\n* Send API query\n*/\nfunction sendAPIQuery(target, query, callback) {\n\tlet redundancy;\n\tlet send;\n\tif (typeof target === \"string\") {\n\t\tconst api = getAPIModule(target);\n\t\tif (!api) {\n\t\t\tcallback(void 0, 424);\n\t\t\treturn emptyCallback$1;\n\t\t}\n\t\tsend = api.send;\n\t\tconst cached = getRedundancyCache(target);\n\t\tif (cached) redundancy = cached.redundancy;\n\t} else {\n\t\tconst config = createAPIConfig(target);\n\t\tif (config) {\n\t\t\tredundancy = initRedundancy(config);\n\t\t\tconst api = getAPIModule(target.resources ? target.resources[0] : \"\");\n\t\t\tif (api) send = api.send;\n\t\t}\n\t}\n\tif (!redundancy || !send) {\n\t\tcallback(void 0, 424);\n\t\treturn emptyCallback$1;\n\t}\n\treturn redundancy.query(query, send, callback)().abort;\n}\n\nfunction emptyCallback() {}\n/**\n* Function called when new icons have been loaded\n*/\nfunction loadedNewIcons(storage) {\n\tif (!storage.iconsLoaderFlag) {\n\t\tstorage.iconsLoaderFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsLoaderFlag = false;\n\t\t\tupdateCallbacks(storage);\n\t\t});\n\t}\n}\n/**\n* Check icon names for API\n*/\nfunction checkIconNamesForAPI(icons) {\n\tconst valid = [];\n\tconst invalid = [];\n\ticons.forEach((name) => {\n\t\t(name.match(matchIconName) ? valid : invalid).push(name);\n\t});\n\treturn {\n\t\tvalid,\n\t\tinvalid\n\t};\n}\n/**\n* Parse loader response\n*/\nfunction parseLoaderResponse(storage, icons, data) {\n\tfunction checkMissing() {\n\t\tconst pending = storage.pendingIcons;\n\t\ticons.forEach((name) => {\n\t\t\tif (pending) pending.delete(name);\n\t\t\tif (!storage.icons[name]) storage.missing.add(name);\n\t\t});\n\t}\n\tif (data && typeof data === \"object\") try {\n\t\tif (!addIconSet(storage, data).length) {\n\t\t\tcheckMissing();\n\t\t\treturn;\n\t\t}\n\t} catch (err) {\n\t\tconsole.error(err);\n\t}\n\tcheckMissing();\n\tloadedNewIcons(storage);\n}\n/**\n* Handle response that can be async\n*/\nfunction parsePossiblyAsyncResponse(response, callback) {\n\tif (response instanceof Promise) response.then((data) => {\n\t\tcallback(data);\n\t}).catch(() => {\n\t\tcallback(null);\n\t});\n\telse callback(response);\n}\n/**\n* Load icons\n*/\nfunction loadNewIcons(storage, icons) {\n\tif (!storage.iconsToLoad) storage.iconsToLoad = icons;\n\telse storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n\tif (!storage.iconsQueueFlag) {\n\t\tstorage.iconsQueueFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsQueueFlag = false;\n\t\t\tconst { provider, prefix } = storage;\n\t\t\tconst icons$1 = storage.iconsToLoad;\n\t\t\tdelete storage.iconsToLoad;\n\t\t\tif (!icons$1 || !icons$1.length) return;\n\t\t\tconst customIconLoader = storage.loadIcon;\n\t\t\tif (storage.loadIcons && (icons$1.length > 1 || !customIconLoader)) {\n\t\t\t\tparsePossiblyAsyncResponse(storage.loadIcons(icons$1, prefix, provider), (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, icons$1, data);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (customIconLoader) {\n\t\t\t\ticons$1.forEach((name) => {\n\t\t\t\t\tparsePossiblyAsyncResponse(customIconLoader(name, prefix, provider), (data) => {\n\t\t\t\t\t\tparseLoaderResponse(storage, [name], data ? {\n\t\t\t\t\t\t\tprefix,\n\t\t\t\t\t\t\ticons: { [name]: data }\n\t\t\t\t\t\t} : null);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { valid, invalid } = checkIconNamesForAPI(icons$1);\n\t\t\tif (invalid.length) parseLoaderResponse(storage, invalid, null);\n\t\t\tif (!valid.length) return;\n\t\t\tconst api = prefix.match(matchIconName) ? getAPIModule(provider) : null;\n\t\t\tif (!api) {\n\t\t\t\tparseLoaderResponse(storage, valid, null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tapi.prepare(provider, prefix, valid).forEach((item) => {\n\t\t\t\tsendAPIQuery(provider, item, (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, item.icons, data);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Load icons\n*/\nconst loadIcons$1 = (icons, callback) => {\n\tconst sortedIcons = sortIcons(listToIcons(icons, true, allowSimpleNames()));\n\tif (!sortedIcons.pending.length) {\n\t\tlet callCallback = true;\n\t\tif (callback) setTimeout(() => {\n\t\t\tif (callCallback) callback(sortedIcons.loaded, sortedIcons.missing, sortedIcons.pending, emptyCallback);\n\t\t});\n\t\treturn () => {\n\t\t\tcallCallback = false;\n\t\t};\n\t}\n\tconst newIcons = Object.create(null);\n\tconst sources = [];\n\tlet lastProvider, lastPrefix;\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix } = icon;\n\t\tif (prefix === lastPrefix && provider === lastProvider) return;\n\t\tlastProvider = provider;\n\t\tlastPrefix = prefix;\n\t\tsources.push(getStorage(provider, prefix));\n\t\tconst providerNewIcons = newIcons[provider] || (newIcons[provider] = Object.create(null));\n\t\tif (!providerNewIcons[prefix]) providerNewIcons[prefix] = [];\n\t});\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix, name } = icon;\n\t\tconst storage = getStorage(provider, prefix);\n\t\tconst pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n\t\tif (!pendingQueue.has(name)) {\n\t\t\tpendingQueue.add(name);\n\t\t\tnewIcons[provider][prefix].push(name);\n\t\t}\n\t});\n\tsources.forEach((storage) => {\n\t\tconst list = newIcons[storage.provider][storage.prefix];\n\t\tif (list.length) loadNewIcons(storage, list);\n\t});\n\treturn callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\n/**\n* Load one icon using Promise\n*/\nconst loadIcon$1 = (icon) => {\n\treturn new Promise((fulfill, reject) => {\n\t\tconst iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n\t\tif (!iconObj) {\n\t\t\treject(icon);\n\t\t\treturn;\n\t\t}\n\t\tloadIcons$1([iconObj || icon], (loaded) => {\n\t\t\tif (loaded.length && iconObj) {\n\t\t\t\tconst data = getIconData(iconObj);\n\t\t\t\tif (data) {\n\t\t\t\t\tfulfill({\n\t\t\t\t\t\t...defaultIconProps,\n\t\t\t\t\t\t...data\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\treject(icon);\n\t\t});\n\t});\n};\n\n/**\n * Test icon string\n */\nfunction testIconObject(value) {\n try {\n const obj = typeof value === 'string' ? JSON.parse(value) : value;\n if (typeof obj.body === 'string') {\n return {\n ...obj,\n };\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n //\n }\n}\n\n/**\n * Parse icon value, load if needed\n */\nfunction parseIconValue(value, onload) {\n if (typeof value === 'object') {\n const data = testIconObject(value);\n return {\n data,\n value,\n };\n }\n if (typeof value !== 'string') {\n // Invalid value\n return {\n value,\n };\n }\n // Check for JSON\n if (value.includes('{')) {\n const data = testIconObject(value);\n if (data) {\n return {\n data,\n value,\n };\n }\n }\n // Parse icon name\n const name = stringToIcon(value, true, true);\n if (!name) {\n return {\n value,\n };\n }\n // Valid icon name: check if data is available\n const data = getIconData(name);\n // Icon data exists or icon has no prefix. Do not load icon from API if icon has no prefix\n if (data !== undefined || !name.prefix) {\n return {\n value,\n name,\n data, // could be 'null' -> icon is missing\n };\n }\n // Load icon\n const loading = loadIcons$1([name], () => onload(value, name, getIconData(name)));\n return {\n value,\n name,\n loading,\n };\n}\n\n// Check for Safari\nlet isBuggedSafari = false;\ntry {\n isBuggedSafari = navigator.vendor.indexOf('Apple') === 0;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n}\ncatch (err) {\n //\n}\n/**\n * Get render mode\n */\nfunction getRenderMode(body, mode) {\n switch (mode) {\n // Force mode\n case 'svg':\n case 'bg':\n case 'mask':\n return mode;\n }\n // Check for animation, use 'style' for animated icons, unless browser is Safari\n // (only <a>, which should be ignored or animations start with '<a')\n if (mode !== 'style' &&\n (isBuggedSafari || body.indexOf('<a') === -1)) {\n // Render <svg>\n return 'svg';\n }\n // Use background or mask\n return body.indexOf('currentColor') === -1 ? 'bg' : 'mask';\n}\n\n/**\n* Regular expressions for calculating dimensions\n*/\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize$1(size, ratio, precision) {\n\tif (ratio === 1) return size;\n\tprecision = precision || 100;\n\tif (typeof size === \"number\") return Math.ceil(size * ratio * precision) / precision;\n\tif (typeof size !== \"string\") return size;\n\tconst oldParts = size.split(unitsSplit);\n\tif (oldParts === null || !oldParts.length) return size;\n\tconst newParts = [];\n\tlet code = oldParts.shift();\n\tlet isNumber = unitsTest.test(code);\n\twhile (true) {\n\t\tif (isNumber) {\n\t\t\tconst num = parseFloat(code);\n\t\t\tif (isNaN(num)) newParts.push(code);\n\t\t\telse newParts.push(Math.ceil(num * ratio * precision) / precision);\n\t\t} else newParts.push(code);\n\t\tcode = oldParts.shift();\n\t\tif (code === void 0) return newParts.join(\"\");\n\t\tisNumber = !isNumber;\n\t}\n}\n\nfunction splitSVGDefs(content, tag = \"defs\") {\n\tlet defs = \"\";\n\tconst index = content.indexOf(\"<\" + tag);\n\twhile (index >= 0) {\n\t\tconst start = content.indexOf(\">\", index);\n\t\tconst end = content.indexOf(\"</\" + tag);\n\t\tif (start === -1 || end === -1) break;\n\t\tconst endEnd = content.indexOf(\">\", end);\n\t\tif (endEnd === -1) break;\n\t\tdefs += content.slice(start + 1, end).trim();\n\t\tcontent = content.slice(0, index).trim() + content.slice(endEnd + 1);\n\t}\n\treturn {\n\t\tdefs,\n\t\tcontent\n\t};\n}\n/**\n* Merge defs and content\n*/\nfunction mergeDefsAndContent(defs, content) {\n\treturn defs ? \"<defs>\" + defs + \"</defs>\" + content : content;\n}\n/**\n* Wrap SVG content, without wrapping definitions\n*/\nfunction wrapSVGContent(body, start, end) {\n\tconst split = splitSVGDefs(body);\n\treturn mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\n/**\n* Check if value should be unset. Allows multiple keywords\n*/\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\n/**\n* Get SVG attributes and content from icon + customisations\n*\n* Does not generate style to make it compatible with frameworks that use objects for style, such as React.\n* Instead, it generates 'inline' value. If true, rendering engine should add verticalAlign: -0.125em to icon.\n*\n* Customisations should be normalised by platform specific parser.\n* Result should be converted to <svg> by platform specific parser.\n* Use replaceIDs to generate unique IDs for body.\n*/\nfunction iconToSVG(icon, customisations) {\n\tconst fullIcon = {\n\t\t...defaultIconProps,\n\t\t...icon\n\t};\n\tconst fullCustomisations = {\n\t\t...defaultIconCustomisations,\n\t\t...customisations\n\t};\n\tconst box = {\n\t\tleft: fullIcon.left,\n\t\ttop: fullIcon.top,\n\t\twidth: fullIcon.width,\n\t\theight: fullIcon.height\n\t};\n\tlet body = fullIcon.body;\n\t[fullIcon, fullCustomisations].forEach((props) => {\n\t\tconst transformations = [];\n\t\tconst hFlip = props.hFlip;\n\t\tconst vFlip = props.vFlip;\n\t\tlet rotation = props.rotate;\n\t\tif (hFlip) if (vFlip) rotation += 2;\n\t\telse {\n\t\t\ttransformations.push(\"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(-1 1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\telse if (vFlip) {\n\t\t\ttransformations.push(\"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(1 -1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\tlet tempValue;\n\t\tif (rotation < 0) rotation -= Math.floor(rotation / 4) * 4;\n\t\trotation = rotation % 4;\n\t\tswitch (rotation) {\n\t\t\tcase 1:\n\t\t\t\ttempValue = box.height / 2 + box.top;\n\t\t\t\ttransformations.unshift(\"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\ttransformations.unshift(\"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\ttempValue = box.width / 2 + box.left;\n\t\t\t\ttransformations.unshift(\"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t}\n\t\tif (rotation % 2 === 1) {\n\t\t\tif (box.left !== box.top) {\n\t\t\t\ttempValue = box.left;\n\t\t\t\tbox.left = box.top;\n\t\t\t\tbox.top = tempValue;\n\t\t\t}\n\t\t\tif (box.width !== box.height) {\n\t\t\t\ttempValue = box.width;\n\t\t\t\tbox.width = box.height;\n\t\t\t\tbox.height = tempValue;\n\t\t\t}\n\t\t}\n\t\tif (transformations.length) body = wrapSVGContent(body, \"<g transform=\\\"\" + transformations.join(\" \") + \"\\\">\", \"</g>\");\n\t});\n\tconst customisationsWidth = fullCustomisations.width;\n\tconst customisationsHeight = fullCustomisations.height;\n\tconst boxWidth = box.width;\n\tconst boxHeight = box.height;\n\tlet width;\n\tlet height;\n\tif (customisationsWidth === null) {\n\t\theight = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t\twidth = calculateSize$1(height, boxWidth / boxHeight);\n\t} else {\n\t\twidth = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n\t\theight = customisationsHeight === null ? calculateSize$1(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t}\n\tconst attributes = {};\n\tconst setAttr = (prop, value) => {\n\t\tif (!isUnsetKeyword(value)) attributes[prop] = value.toString();\n\t};\n\tsetAttr(\"width\", width);\n\tsetAttr(\"height\", height);\n\tconst viewBox = [\n\t\tbox.left,\n\t\tbox.top,\n\t\tboxWidth,\n\t\tboxHeight\n\t];\n\tattributes.viewBox = viewBox.join(\" \");\n\treturn {\n\t\tattributes,\n\t\tviewBox,\n\t\tbody\n\t};\n}\n\n/**\n* Generate <svg>\n*/\nfunction iconToHTML$1(body, attributes) {\n\tlet renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : \" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\";\n\tfor (const attr in attributes) renderAttribsHTML += \" \" + attr + \"=\\\"\" + attributes[attr] + \"\\\"\";\n\treturn \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"\" + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\n/**\n* Encode SVG for use in url()\n*\n* Short alternative to encodeURIComponent() that encodes only stuff used in SVG, generating\n* smaller code.\n*/\nfunction encodeSVGforURL(svg) {\n\treturn svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\n/**\n* Generate data: URL from SVG\n*/\nfunction svgToData(svg) {\n\treturn \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\n/**\n* Generate url() from SVG\n*/\nfunction svgToURL$1(svg) {\n\treturn \"url(\\\"\" + svgToData(svg) + \"\\\")\";\n}\n\nconst detectFetch = () => {\n\tlet callback;\n\ttry {\n\t\tcallback = fetch;\n\t\tif (typeof callback === \"function\") return callback;\n\t} catch (err) {}\n};\n/**\n* Fetch function\n*/\nlet fetchModule = detectFetch();\n/**\n* Set custom fetch() function\n*/\nfunction setFetch(fetch$1) {\n\tfetchModule = fetch$1;\n}\n/**\n* Get fetch() function. Used by Icon Finder Core\n*/\nfunction getFetch() {\n\treturn fetchModule;\n}\n/**\n* Calculate maximum icons list length for prefix\n*/\nfunction calculateMaxLength(provider, prefix) {\n\tconst config = getAPIConfig(provider);\n\tif (!config) return 0;\n\tlet result;\n\tif (!config.maxURL) result = 0;\n\telse {\n\t\tlet maxHostLength = 0;\n\t\tconfig.resources.forEach((item) => {\n\t\t\tconst host = item;\n\t\t\tmaxHostLength = Math.max(maxHostLength, host.length);\n\t\t});\n\t\tconst url = prefix + \".json?icons=\";\n\t\tresult = config.maxURL - maxHostLength - config.path.length - url.length;\n\t}\n\treturn result;\n}\n/**\n* Should query be aborted, based on last HTTP status\n*/\nfunction shouldAbort(status) {\n\treturn status === 404;\n}\n/**\n* Prepare params\n*/\nconst prepare = (provider, prefix, icons) => {\n\tconst results = [];\n\tconst maxLength = calculateMaxLength(provider, prefix);\n\tconst type = \"icons\";\n\tlet item = {\n\t\ttype,\n\t\tprovider,\n\t\tprefix,\n\t\ticons: []\n\t};\n\tlet length = 0;\n\ticons.forEach((name, index) => {\n\t\tlength += name.length + 1;\n\t\tif (length >= maxLength && index > 0) {\n\t\t\tresults.push(item);\n\t\t\titem = {\n\t\t\t\ttype,\n\t\t\t\tprovider,\n\t\t\t\tprefix,\n\t\t\t\ticons: []\n\t\t\t};\n\t\t\tlength = name.length;\n\t\t}\n\t\titem.icons.push(name);\n\t});\n\tresults.push(item);\n\treturn results;\n};\n/**\n* Get path\n*/\nfunction getPath(provider) {\n\tif (typeof provider === \"string\") {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (config) return config.path;\n\t}\n\treturn \"/\";\n}\n/**\n* Load icons\n*/\nconst send = (host, params, callback) => {\n\tif (!fetchModule) {\n\t\tcallback(\"abort\", 424);\n\t\treturn;\n\t}\n\tlet path = getPath(params.provider);\n\tswitch (params.type) {\n\t\tcase \"icons\": {\n\t\t\tconst prefix = params.prefix;\n\t\t\tconst iconsList = params.icons.join(\",\");\n\t\t\tconst urlParams = new URLSearchParams({ icons: iconsList });\n\t\t\tpath += prefix + \".json?\" + urlParams.toString();\n\t\t\tbreak;\n\t\t}\n\t\tcase \"custom\": {\n\t\t\tconst uri = params.uri;\n\t\t\tpath += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tcallback(\"abort\", 400);\n\t\t\treturn;\n\t}\n\tlet defaultError = 503;\n\tfetchModule(host + path).then((response) => {\n\t\tconst status = response.status;\n\t\tif (status !== 200) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tcallback(shouldAbort(status) ? \"abort\" : \"next\", status);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tdefaultError = 501;\n\t\treturn response.json();\n\t}).then((data) => {\n\t\tif (typeof data !== \"object\" || data === null) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (data === 404) callback(\"abort\", data);\n\t\t\t\telse callback(\"next\", defaultError);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tcallback(\"success\", data);\n\t\t});\n\t}).catch(() => {\n\t\tcallback(\"next\", defaultError);\n\t});\n};\n/**\n* Export module\n*/\nconst fetchAPIModule = {\n\tprepare,\n\tsend\n};\n\n/**\n* Set custom loader for multiple icons\n*/\nfunction setCustomIconsLoader$1(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcons = loader;\n}\n/**\n* Set custom loader for one icon\n*/\nfunction setCustomIconLoader$1(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcon = loader;\n}\n\n/**\n * Attribute to add\n */\nconst nodeAttr = 'data-style';\n/**\n * Custom style to add to each node\n */\nlet customStyle = '';\n/**\n * Set custom style to add to all components\n *\n * Affects only components rendered after function call\n */\nfunction appendCustomStyle(style) {\n customStyle = style;\n}\n/**\n * Add/update style node\n */\nfunction updateStyle(parent, inline) {\n // Get node, create if needed\n let styleNode = Array.from(parent.childNodes).find((node) => node.hasAttribute &&\n node.hasAttribute(nodeAttr));\n if (!styleNode) {\n styleNode = document.createElement('style');\n styleNode.setAttribute(nodeAttr, nodeAttr);\n parent.appendChild(styleNode);\n }\n // Update content\n styleNode.textContent =\n ':host{display:inline-block;vertical-align:' +\n (inline ? '-0.125em' : '0') +\n '}span,svg{display:block;margin:auto}' +\n customStyle;\n}\n\n// Core\n/**\n * Get functions and initialise stuff\n */\nfunction exportFunctions() {\n /**\n * Initialise stuff\n */\n // Set API module\n setAPIModule('', fetchAPIModule);\n // Allow simple icon names\n allowSimpleNames(true);\n let _window;\n try {\n _window = window;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n //\n }\n if (_window) {\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection$1(item)) {\n console.error(err);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (const key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider$1(key, value)) {\n console.error(err);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n }\n const _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n };\n return {\n iconLoaded: iconLoaded$1,\n getIcon: getIcon$1,\n listIcons: listIcons$1,\n addIcon: addIcon$1,\n addCollection: addCollection$1,\n calculateSize: calculateSize$1,\n buildIcon: iconToSVG,\n iconToHTML: iconToHTML$1,\n svgToURL: svgToURL$1,\n loadIcons: loadIcons$1,\n loadIcon: loadIcon$1,\n addAPIProvider: addAPIProvider$1,\n setCustomIconLoader: setCustomIconLoader$1,\n setCustomIconsLoader: setCustomIconsLoader$1,\n appendCustomStyle,\n _api,\n };\n}\n\n// List of properties to apply\nconst monotoneProps = {\n 'background-color': 'currentColor',\n};\nconst coloredProps = {\n 'background-color': 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n image: 'var(--svg)',\n repeat: 'no-repeat',\n size: '100% 100%',\n};\nconst propsToAddTo = {\n '-webkit-mask': monotoneProps,\n 'mask': monotoneProps,\n 'background': coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + '-' + prop] = propsToAdd[prop];\n }\n}\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value ? value + (value.match(/^[-0-9.]+$/) ? 'px' : '') : 'inherit';\n}\n/**\n * Render node as <span>\n */\nfunction renderSPAN(data, icon, useMask) {\n const node = document.createElement('span');\n // Body\n let body = data.body;\n if (body.indexOf('<a') !== -1) {\n // Animated SVG: add something to fix timing bug\n body += '<!-- ' + Date.now() + ' -->';\n }\n // Generate SVG as URL\n const renderAttribs = data.attributes;\n const html = iconToHTML$1(body, {\n ...renderAttribs,\n width: icon.width + '',\n height: icon.height + '',\n });\n const url = svgToURL$1(html);\n // Generate style\n const svgStyle = node.style;\n const styles = {\n '--svg': url,\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...(useMask ? monotoneProps : coloredProps),\n };\n // Apply style\n for (const prop in styles) {\n svgStyle.setProperty(prop, styles[prop]);\n }\n return node;\n}\n\nlet policy;\n/**\n* Attempt to create policy\n*/\nfunction createPolicy() {\n\ttry {\n\t\tpolicy = window.trustedTypes.createPolicy(\"iconify\", { createHTML: (s) => s });\n\t} catch (err) {\n\t\tpolicy = null;\n\t}\n}\n/**\n* Clean up value for innerHTML assignment\n*\n* This code doesn't actually clean up anything.\n* It is intended be used with Iconify icon data, which has already been validated\n*/\nfunction cleanUpInnerHTML(html) {\n\tif (policy === void 0) createPolicy();\n\treturn policy ? policy.createHTML(html) : html;\n}\n\n/**\n * Render node as <svg>\n */\nfunction renderSVG(data) {\n const node = document.createElement('span');\n // Add style if needed\n const attr = data.attributes;\n let style = '';\n if (!attr.width) {\n style = 'width: inherit;';\n }\n if (!attr.height) {\n style += 'height: inherit;';\n }\n if (style) {\n attr.style = style;\n }\n // Generate SVG\n const html = iconToHTML$1(data.body, attr);\n node.innerHTML = cleanUpInnerHTML(html);\n return node.firstChild;\n}\n\n/**\n * Find icon node\n */\nfunction findIconElement(parent) {\n return Array.from(parent.childNodes).find((node) => {\n const tag = node.tagName &&\n node.tagName.toUpperCase();\n return tag === 'SPAN' || tag === 'SVG';\n });\n}\n/**\n * Render icon\n */\nfunction renderIcon(parent, state) {\n const iconData = state.icon.data;\n const customisations = state.customisations;\n // Render icon\n const renderData = iconToSVG(iconData, customisations);\n if (customisations.preserveAspectRatio) {\n renderData.attributes['preserveAspectRatio'] =\n customisations.preserveAspectRatio;\n }\n const mode = state.renderedMode;\n let node;\n switch (mode) {\n case 'svg':\n node = renderSVG(renderData);\n break;\n default:\n node = renderSPAN(renderData, {\n ...defaultIconProps,\n ...iconData,\n }, mode === 'mask');\n }\n // Set element\n const oldNode = findIconElement(parent);\n if (oldNode) {\n // Replace old element\n if (node.tagName === 'SPAN' && oldNode.tagName === node.tagName) {\n // Swap style instead of whole node\n oldNode.setAttribute('style', node.getAttribute('style'));\n }\n else {\n parent.replaceChild(node, oldNode);\n }\n }\n else {\n // Add new element\n parent.appendChild(node);\n }\n}\n\n/**\n * Set state to PendingState\n */\nfunction setPendingState(icon, inline, lastState) {\n const lastRender = lastState &&\n (lastState.rendered\n ? lastState\n : lastState.lastRender);\n return {\n rendered: false,\n inline,\n icon,\n lastRender,\n };\n}\n\n/**\n * Register 'iconify-icon' component, if it does not exist\n */\nfunction defineIconifyIcon(name = 'iconify-icon') {\n // Check for custom elements registry and HTMLElement\n let customElements;\n let ParentClass;\n try {\n customElements = window.customElements;\n ParentClass = window.HTMLElement;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n return;\n }\n // Make sure registry and HTMLElement exist\n if (!customElements || !ParentClass) {\n return;\n }\n // Check for duplicate\n const ConflictingClass = customElements.get(name);\n if (ConflictingClass) {\n return ConflictingClass;\n }\n // All attributes\n const attributes = [\n // Icon\n 'icon',\n // Mode\n 'mode',\n 'inline',\n 'noobserver',\n // Customisations\n 'width',\n 'height',\n 'rotate',\n 'flip',\n ];\n /**\n * Component class\n */\n const IconifyIcon = class extends ParentClass {\n // Root\n _shadowRoot;\n // Initialised\n _initialised = false;\n // Icon state\n _state;\n // Attributes check queued\n _checkQueued = false;\n // Connected\n _connected = false;\n // Observer\n _observer = null;\n _visible = true;\n /**\n * Constructor\n */\n constructor() {\n super();\n // Attach shadow DOM\n const root = (this._shadowRoot = this.attachShadow({\n mode: 'open',\n }));\n // Add style\n const inline = this.hasAttribute('inline');\n updateStyle(root, inline);\n // Create empty state\n this._state = setPendingState({\n value: '',\n }, inline);\n // Queue icon render\n this._queueCheck();\n }\n /**\n * Connected to DOM\n */\n connectedCallback() {\n this._connected = true;\n this.startObserver();\n }\n /**\n * Disconnected from DOM\n */\n disconnectedCallback() {\n this._connected = false;\n this.stopObserver();\n }\n /**\n * Observed attributes\n */\n static get observedAttributes() {\n return attributes.slice(0);\n }\n /**\n * Observed properties that are different from attributes\n *\n * Experimental! Need to test with various frameworks that support it\n */\n /*\n static get properties() {\n return {\n inline: {\n type: Boolean,\n reflect: true,\n },\n // Not listing other attributes because they are strings or combination\n // of string and another type. Cannot have multiple types\n };\n }\n */\n /**\n * Attribute has changed\n */\n attributeChangedCallback(name) {\n switch (name) {\n case 'inline': {\n // Update immediately: not affected by other attributes\n const newInline = this.hasAttribute('inline');\n const state = this._state;\n if (newInline !== state.inline) {\n // Update style if inline mode changed\n state.inline = newInline;\n updateStyle(this._shadowRoot, newInline);\n }\n break;\n }\n case 'noobserver': {\n const value = this.hasAttribute('noobserver');\n if (value) {\n this.startObserver();\n }\n else {\n this.stopObserver();\n }\n break;\n }\n default:\n // Queue check for other attributes\n this._queueCheck();\n }\n }\n /**\n * Get/set icon\n */\n get icon() {\n const value = this.getAttribute('icon');\n if (value && value.slice(0, 1) === '{') {\n try {\n return JSON.parse(value);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n //\n }\n }\n return value;\n }\n set icon(value) {\n if (typeof value === 'object') {\n value = JSON.stringify(value);\n }\n this.setAttribute('icon', value);\n }\n /**\n * Get/set inline\n */\n get inline() {\n return this.hasAttribute('inline');\n }\n set inline(value) {\n if (value) {\n this.setAttribute('inline', 'true');\n }\n else {\n this.removeAttribute('inline');\n }\n }\n /**\n * Get/set observer\n */\n get observer() {\n return this.hasAttribute('observer');\n }\n set observer(value) {\n if (value) {\n this.setAttribute('observer', 'true');\n }\n else {\n this.removeAttribute('observer');\n }\n }\n /**\n * Restart animation\n */\n restartAnimation() {\n const state = this._state;\n if (state.rendered) {\n const root = this._shadowRoot;\n if (state.renderedMode === 'svg') {\n // Update root node\n try {\n root.lastChild.setCurrentTime(0);\n return;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n // Failed: setCurrentTime() is not supported\n }\n }\n renderIcon(root, state);\n }\n }\n /**\n * Get status\n */\n get status() {\n const state = this._state;\n return state.rendered\n ? 'rendered'\n : state.icon.data === null\n ? 'failed'\n : 'loading';\n }\n /**\n * Queue attributes re-check\n */\n _queueCheck() {\n if (!this._checkQueued) {\n this._checkQueued = true;\n setTimeout(() => {\n this._check();\n });\n }\n }\n /**\n * Check for changes\n */\n _check() {\n if (!this._checkQueued) {\n return;\n }\n this._checkQueued = false;\n const state = this._state;\n // Get icon\n const newIcon = this.getAttribute('icon');\n if (newIcon !== state.icon.value) {\n this._iconChanged(newIcon);\n return;\n }\n // Ignore other attributes if icon is not rendered\n if (!state.rendered || !this._visible) {\n return;\n }\n // Check for mode and attribute changes\n const mode = this.getAttribute('mode');\n const customisations = getCustomisations(this);\n if (state.attrMode !== mode ||\n haveCustomisationsChanged(state.customisations, customisations) ||\n !findIconElement(this._shadowRoot)) {\n this._renderIcon(state.icon, customisations, mode);\n }\n }\n /**\n * Icon value has changed\n */\n _iconChanged(newValue) {\n const icon = parseIconValue(newValue, (value, name, data) => {\n // Asynchronous callback: re-check values to make sure stuff wasn't changed\n const state = this._state;\n if (state.rendered || this.getAttribute('icon') !== value) {\n // Icon data is already available or icon attribute was changed\n return;\n }\n // Change icon\n const icon = {\n value,\n name,\n data,\n };\n if (icon.data) {\n // Render icon\n this._gotIconData(icon);\n }\n else {\n // Nothing to render: update icon in state\n state.icon = icon;\n }\n });\n if (icon.data) {\n // Icon is ready to render\n this._gotIconData(icon);\n }\n else {\n // Pending icon\n this._state = setPendingState(icon, this._state.inline, this._state);\n }\n }\n /**\n * Force render icon on state change\n */\n _forceRender() {\n if (!this._visible) {\n // Remove icon\n const node = findIconElement(this._shadowRoot);\n if (node) {\n this._shadowRoot.removeChild(node);\n }\n return;\n }\n // Re-render icon\n this._queueCheck();\n }\n /**\n * Got new icon data, icon is ready to (re)render\n */\n _gotIconData(icon) {\n this._checkQueued = false;\n this._renderIcon(icon, getCustomisations(this), this.getAttribute('mode'));\n }\n /**\n * Re-render based on icon data\n */\n _renderIcon(icon, customisations, attrMode) {\n // Get mode\n const renderedMode = getRenderMode(icon.data.body, attrMode);\n // Inline was not changed\n const inline = this._state.inline;\n // Set state and render\n renderIcon(this._shadowRoot, (this._state = {\n rendered: true,\n icon,\n inline,\n customisations,\n attrMode,\n renderedMode,\n }));\n }\n /**\n * Start observer\n */\n startObserver() {\n if (!this._observer && !this.hasAttribute('noobserver')) {\n try {\n this._observer = new IntersectionObserver((entries) => {\n const intersecting = entries.some((entry) => entry.isIntersecting);\n if (intersecting !== this._visible) {\n this._visible = intersecting;\n this._forceRender();\n }\n });\n this._observer.observe(this);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n // Something went wrong, possibly observer is not supported\n if (this._observer) {\n try {\n this._observer.disconnect();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n }\n catch (err) {\n //\n }\n this._observer = null;\n }\n }\n }\n }\n /**\n * Stop observer\n */\n stopObserver() {\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n this._visible = true;\n if (this._connected) {\n // Render icon\n this._forceRender();\n }\n }\n }\n };\n // Add getters and setters\n attributes.forEach((attr) => {\n if (!(attr in IconifyIcon.prototype)) {\n Object.defineProperty(IconifyIcon.prototype, attr, {\n get: function () {\n return this.getAttribute(attr);\n },\n set: function (value) {\n if (value !== null) {\n this.setAttribute(attr, value);\n }\n else {\n this.removeAttribute(attr);\n }\n },\n });\n }\n });\n // Add exported functions: both as static and instance methods\n const functions = exportFunctions();\n for (const key in functions) {\n IconifyIcon[key] = IconifyIcon.prototype[key] = functions[key];\n }\n // Define new component\n customElements.define(name, IconifyIcon);\n return IconifyIcon;\n}\n\n/**\n * Create exported data: either component instance or functions\n */\nconst IconifyIconComponent = defineIconifyIcon() || exportFunctions();\n/**\n * Export functions\n */\nconst { iconLoaded, getIcon, listIcons, addIcon, addCollection, calculateSize, buildIcon, iconToHTML, svgToURL, loadIcons, loadIcon, setCustomIconLoader, setCustomIconsLoader, addAPIProvider, _api, } = IconifyIconComponent;\n\nexport { IconifyIconComponent, _api, addAPIProvider, addCollection, addIcon, appendCustomStyle, buildIcon, calculateSize, getIcon, iconLoaded, iconToHTML, listIcons, loadIcon, loadIcons, setCustomIconLoader, setCustomIconsLoader, svgToURL };\n",":host {\n --color: currentColor;\n\n display: contents;\n color: var(--color);\n}\n\niconify-icon {\n color: inherit;\n}\n","import 'iconify-icon';\nimport type { PropertyValues } from 'lit';\nimport { html, unsafeCSS } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './icon.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * @summary An icon component that renders icons from any Iconify icon set. Decorative by default. Set `label` for meaningful icons.\n * @customElement l-icon\n *\n * @cssproperty --color - The color of the icon. Defaults to `currentColor`.\n */\nexport class Icon extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n /** The icon name in Iconify format (e.g. `mdi:home`, `lucide:check`). */\n @property()\n name = '';\n\n /** Accessible label. When set, the icon becomes meaningful (`role=\"img\"` + `aria-label`). When absent, the icon is decorative. */\n @property()\n label?: string;\n\n override updated(changedProperties: PropertyValues<this>) {\n if (changedProperties.has('label')) {\n if (this.label) {\n this.setAttribute('role', 'img');\n this.setAttribute('aria-label', this.label);\n } else {\n this.removeAttribute('role');\n this.removeAttribute('aria-label');\n }\n }\n }\n\n override render() {\n return html`\n <iconify-icon\n icon=${this.name}\n aria-hidden=\"true\"\n ></iconify-icon>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Icon } from './icon.js';\nexport * from './icon.js';\ndefine('icon', Icon);\n","import { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\n\n/**\n * Enhances a child `<input>` with visual digit cells (Stripe-style OTP input).\n *\n * A single hidden `<input>` handles keyboard, paste, and autocomplete.\n * Visual cells are rendered as real DOM elements with individual borders and focus ring.\n *\n * @summary Stripe-style OTP input with visual digit cells over a hidden native input.\n * @customElement l-input-otp\n *\n * @cssproperty --digits - Number of digit boxes (default: 6). Must match input's maxlength.\n * @cssproperty --cell-size - Cell width and height (default: 2.75rem). Font size scales automatically.\n * @cssproperty --cell-gap - Space between cells (default: 0.5rem).\n * @cssproperty --cell-bg-color - Cell background color.\n * @cssproperty --cell-border-color - Cell border color.\n * @cssproperty --cell-border-radius - Cell border-radius.\n * @cssproperty --cell-focus-color - Border + ring color of the active (focused) cell.\n * @cssproperty --cell-focus-ring - `box-shadow` of the active cell ring (defaults to a 1px solid ring; set to `none` to disable).\n */\nexport class InputOtp extends LuxenElement {\n override createRenderRoot() {\n return this;\n }\n\n /** Position after which to insert a visual separator (e.g., 3 for a 3-3 grouping). */\n @property({ type: Number, reflect: true, attribute: 'separator-after' })\n separatorAfter?: number;\n\n private _input!: HTMLInputElement;\n private _container!: HTMLDivElement;\n private _cells: HTMLDivElement[] = [];\n private _separatorEl: HTMLSpanElement | null = null;\n private _initialized = false;\n\n override connectedCallback() {\n super.connectedCallback();\n requestAnimationFrame(() => this._setup());\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._teardown();\n }\n\n // --- Setup / Teardown ---\n\n private _setup() {\n const input = this.querySelector<HTMLInputElement>('input');\n if (!input) return;\n\n this._input = input;\n\n // Derive digit count from --digits CSS custom property (default 6)\n const digits = Number(getComputedStyle(this).getPropertyValue('--digits').trim()) || 6;\n\n // Set sensible defaults — author can still override via HTML attributes\n const defaults: Record<string, string> = {\n type: 'text',\n inputmode: 'numeric',\n autocomplete: 'one-time-code',\n maxlength: String(digits),\n pattern: String.raw`\\d{${digits}}`,\n };\n for (const [attr, value] of Object.entries(defaults)) {\n if (!this._input.hasAttribute(attr)) {\n this._input.setAttribute(attr, value);\n }\n }\n\n // Build visual cells container\n this._container = document.createElement('div');\n this._container.className = 'l-input-otp-cells';\n this._container.setAttribute('aria-hidden', 'true');\n\n for (let i = 0; i < digits; i++) {\n const cell = document.createElement('div');\n cell.className = 'l-input-otp-cell';\n cell.appendChild(document.createElement('span'));\n this._cells.push(cell);\n this._container.appendChild(cell);\n\n // Insert separator after the specified position\n if (this.separatorAfter && i === this.separatorAfter - 1 && i < digits - 1) {\n this._separatorEl = document.createElement('span');\n this._separatorEl.className = 'l-input-otp-separator';\n this._container.appendChild(this._separatorEl);\n }\n }\n\n // Wrap: insert container before input, then move input inside\n this._input.replaceWith(this._container);\n this._container.appendChild(this._input);\n this._initialized = true;\n\n // Populate cells if input already has a value (e.g. disabled with prefilled value)\n this._updateCells();\n\n // Events — focus is deferred so it runs after the click that triggered it\n // (otherwise selectionStart is stale and the active cell flickers).\n this._input.addEventListener('input', this._updateCells);\n this._input.addEventListener('click', this._updateCells);\n this._input.addEventListener('keyup', this._updateCells);\n this._input.addEventListener('focus', this._scheduleUpdateCells);\n this._input.addEventListener('blur', this._clearCells);\n }\n\n private _teardown() {\n if (!this._initialized) return;\n\n this._input.removeEventListener('input', this._updateCells);\n this._input.removeEventListener('click', this._updateCells);\n this._input.removeEventListener('keyup', this._updateCells);\n this._input.removeEventListener('focus', this._scheduleUpdateCells);\n this._input.removeEventListener('blur', this._clearCells);\n\n // Restore input to direct child\n this._container.replaceWith(this._input);\n this._separatorEl?.remove();\n\n this._cells = [];\n this._separatorEl = null;\n this._initialized = false;\n }\n\n // --- Cell updates ---\n\n private _updateCells = (): void => {\n const value = this._input.value;\n const maxLen = this._input.maxLength || 6;\n const pos = Math.min(this._input.selectionStart ?? 0, maxLen - 1);\n const isFocused = document.activeElement === this._input;\n\n for (let i = 0; i < this._cells.length; i++) {\n const cell = this._cells[i];\n const span = cell.firstElementChild as HTMLSpanElement;\n const char = value[i] ?? '';\n\n span.textContent = char;\n\n if (char) {\n cell.setAttribute('data-filled', '');\n } else {\n cell.removeAttribute('data-filled');\n }\n\n if (isFocused && i === pos) {\n cell.setAttribute('data-active', '');\n } else {\n cell.removeAttribute('data-active');\n }\n }\n };\n\n private _clearCells = (): void => {\n for (const cell of this._cells) {\n cell.removeAttribute('data-active');\n }\n };\n\n private _scheduleUpdateCells = (): void => {\n requestAnimationFrame(this._updateCells);\n };\n}\n","import { define } from '../../define.js';\nimport { InputOtp } from './input-otp.js';\nexport * from './input-otp.js';\ndefine('input-otp', InputOtp);\n","import { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\n\nexport type InputStepperSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * A stepper control that enhances a native `<input type=\"number\">` with\n * decrement/increment buttons and an optional animated number track.\n *\n * @link https://www.nngroup.com/articles/input-steppers/\n *\n * @example\n * ```html\n * <l-input-stepper>\n * <input type=\"number\" min=\"0\" max=\"10\" value=\"5\" />\n * </l-input-stepper>\n * ```\n *\n * @event change - Fired when the value changes. Detail: `{ value: number }`.\n *\n * @cssproperty --border-color - Border color of the stepper container (default appearance) and of each button (rounded appearance). Defaults to `--l-color-border`.\n * @cssproperty --border-radius - Border radius of the stepper container (default appearance). Defaults to `--radius-md`.\n */\nexport class InputStepper extends LuxenElement {\n override createRenderRoot() {\n return this;\n }\n\n /** Minimum allowed value. Falls back to the input's `min` attribute. */\n @property({ type: Number })\n min?: number;\n\n /** Maximum allowed value. Falls back to the input's `max` attribute. */\n @property({ type: Number })\n max?: number;\n\n /** Step increment. Falls back to the input's `step` attribute. */\n @property({ type: Number })\n step?: number;\n\n /** Control size. */\n @property({ reflect: true })\n size: InputStepperSize = 'md';\n\n /** Enable the animated number roller overlay. */\n @property({ type: Boolean, reflect: true, attribute: 'with-roller' })\n withRoller = false;\n\n /** Icon name for the decrement button. */\n @property({ attribute: 'decrement-icon' })\n decrementIcon = 'lucide:minus';\n\n /** Icon name for the increment button. */\n @property({ attribute: 'increment-icon' })\n incrementIcon = 'lucide:plus';\n\n private _input: HTMLInputElement | null = null;\n private _decrementBtn: HTMLButtonElement | null = null;\n private _incrementBtn: HTMLButtonElement | null = null;\n private _valueWrapper: HTMLDivElement | null = null;\n private _trackDisplay: HTMLDivElement | null = null;\n private _track: HTMLDivElement | null = null;\n private _observer: MutationObserver | null = null;\n private _skipTransition = false;\n\n override connectedCallback() {\n super.connectedCallback();\n requestAnimationFrame(() => this._setup());\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._teardown();\n }\n\n override updated(changed: Map<string, unknown>) {\n if (!this._input) return;\n\n if (changed.has('min') || changed.has('max') || changed.has('step')) {\n this._syncConstraints();\n this._updateButtonStates();\n }\n }\n\n /** Decrease the value by one step. */\n decrement() {\n if (!this._input) return;\n const { min, step } = this._getConstraints();\n const newVal = Math.max(this._input.valueAsNumber - step, min);\n this._applyValue(newVal);\n }\n\n /** Increase the value by one step. */\n increment() {\n if (!this._input) return;\n const { max, step } = this._getConstraints();\n const newVal = Math.min(this._input.valueAsNumber + step, max);\n this._applyValue(newVal);\n }\n\n // --- Setup / Teardown ---\n\n private _setup() {\n this._input = this.querySelector('input[type=\"number\"]');\n if (!this._input) return;\n\n this._input.inputMode = 'numeric';\n\n // Wrap input in value container\n this._valueWrapper = document.createElement('div');\n this._valueWrapper.className = 'l-input-stepper-value';\n this._input.replaceWith(this._valueWrapper);\n this._valueWrapper.appendChild(this._input);\n\n // Inject track overlay\n if (this.withRoller) {\n this._buildTrack();\n }\n\n // Create buttons\n this._decrementBtn = this._createButton(this.decrementIcon, 'Decrease value');\n this._incrementBtn = this._createButton(this.incrementIcon, 'Increase value');\n\n this._valueWrapper.before(this._decrementBtn);\n this._valueWrapper.after(this._incrementBtn);\n\n // Events\n this._decrementBtn.addEventListener('click', this._onDecrement);\n this._incrementBtn.addEventListener('click', this._onIncrement);\n this._input.addEventListener('change', this._onInputChange);\n\n // Observe disabled attribute on input\n this._observer = new MutationObserver(() => this._updateButtonStates());\n this._observer.observe(this._input, { attributes: true, attributeFilter: ['disabled'] });\n\n this._syncConstraints();\n this._updateButtonStates();\n this._updateTrack();\n }\n\n private _teardown() {\n this._decrementBtn?.removeEventListener('click', this._onDecrement);\n this._incrementBtn?.removeEventListener('click', this._onIncrement);\n this._input?.removeEventListener('change', this._onInputChange);\n this._observer?.disconnect();\n\n // Restore input to direct child\n if (this._input && this._valueWrapper) {\n this._valueWrapper.replaceWith(this._input);\n }\n this._decrementBtn?.remove();\n this._incrementBtn?.remove();\n\n this._input = null;\n this._decrementBtn = null;\n this._incrementBtn = null;\n this._valueWrapper = null;\n this._trackDisplay = null;\n this._track = null;\n this._observer = null;\n }\n\n // --- DOM helpers ---\n\n private _createButton(icon: string, label: string): HTMLButtonElement {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.setAttribute('aria-label', label);\n btn.innerHTML = `<l-icon name=\"${icon}\"></l-icon>`;\n return btn;\n }\n\n private _buildTrack() {\n if (!this._valueWrapper) return;\n\n this._trackDisplay = document.createElement('div');\n this._trackDisplay.className = 'l-input-stepper-track-display';\n\n this._track = document.createElement('div');\n this._track.className = 'l-input-stepper-track';\n this._track.setAttribute('aria-hidden', 'true');\n\n this._rebuildTrackNumbers();\n this._trackDisplay.appendChild(this._track);\n this._valueWrapper.appendChild(this._trackDisplay);\n }\n\n private _rebuildTrackNumbers() {\n if (!this._track) return;\n\n const { min, max, step } = this._getConstraints();\n const effectiveMax = Number.isFinite(max) ? max : (this._input?.valueAsNumber ?? 0) + 100;\n\n this._track.innerHTML = '';\n for (let i = min; i <= effectiveMax; i += step) {\n const div = document.createElement('div');\n div.textContent = String(i);\n this._track.appendChild(div);\n }\n }\n\n // --- Constraints ---\n\n private _getConstraints() {\n const min = this.min ?? (Number(this._input?.getAttribute('min')) || 0);\n const max =\n this.max ??\n (this._input?.hasAttribute('max') ? Number(this._input.getAttribute('max')) : Infinity);\n const step = this.step ?? (Number(this._input?.getAttribute('step')) || 1);\n return { min, max, step };\n }\n\n private _syncConstraints() {\n if (!this._input) return;\n const { min, max, step } = this._getConstraints();\n\n this._input.min = String(min);\n if (Number.isFinite(max)) this._input.max = String(max);\n this._input.step = String(step);\n\n this._rebuildTrackNumbers();\n this._updateTrack();\n }\n\n // --- Value ---\n\n private _applyValue(val: number) {\n if (!this._input) return;\n this._input.value = String(val);\n this._updateButtonStates();\n this._updateTrack();\n this.emit('change', { detail: { value: val } });\n }\n\n // --- Track ---\n\n private _updateTrack() {\n if (!this._track) return;\n\n const { min, step } = this._getConstraints();\n const value = this._input?.valueAsNumber ?? min;\n const offset = (min - value) / step;\n\n this._track.style.translate = `0 calc(${offset} * var(--_button-size))`;\n\n if (this._skipTransition) {\n this._track.style.transition = 'none';\n void this._track.offsetHeight;\n this._track.style.transition = '';\n this._skipTransition = false;\n }\n }\n\n // --- Button states ---\n\n private _updateButtonStates() {\n if (!this._input || !this._decrementBtn || !this._incrementBtn) return;\n\n const { min, max } = this._getConstraints();\n const value = this._input.valueAsNumber;\n const disabled = this._input.disabled;\n\n this._decrementBtn.disabled = disabled || value <= min;\n this._incrementBtn.disabled = disabled || value >= max;\n }\n\n // --- Event handlers ---\n\n private _onDecrement = () => this.decrement();\n private _onIncrement = () => this.increment();\n\n private _onInputChange = () => {\n if (!this._input) return;\n\n const { min, max } = this._getConstraints();\n const clamped = Math.min(Math.max(this._input.valueAsNumber, min), max);\n this._input.value = String(clamped);\n\n this._skipTransition = true;\n this._updateButtonStates();\n this._updateTrack();\n this.emit('change', { detail: { value: clamped } });\n };\n}\n","import { define } from '../../define.js';\nimport { InputStepper } from './input-stepper.js';\nexport * from './input-stepper.js';\ndefine('input-stepper', InputStepper);\n",":host {\n --background: var(--l-color-bg-surface, Canvas);\n --color: inherit;\n --border-radius: 6px;\n --max-width: 320px;\n --shadow: 0 4px 6px -1px rgb(0 0 0 / 8%), 0 2px 4px -2px rgb(0 0 0 / 6%);\n --arrow-size: 8px;\n --show-duration: 150ms;\n --hide-duration: 150ms;\n\n --_border-color: var(--l-color-border-overlay, light-dark(#e5e7eb, #374151));\n\n display: contents;\n}\n\n[popover] {\n inset: unset;\n overflow: visible;\n isolation: isolate;\n box-sizing: border-box;\n width: max-content;\n max-width: var(--max-width);\n border: 1px solid var(--_border-color);\n border-radius: var(--border-radius);\n background: var(--background);\n color: var(--color);\n font-size: 0.875rem;\n line-height: 1.5;\n box-shadow: var(--shadow);\n}\n\n:host([full-width]) [popover] {\n width: 100vw;\n max-width: none;\n}\n\ni {\n position: absolute;\n display: block;\n width: var(--arrow-size);\n height: var(--arrow-size);\n background: var(--background);\n transform: rotate(45deg);\n z-index: -1;\n}\n\n:host([data-placement^='top']) i {\n border-right: 1px solid var(--_border-color);\n border-bottom: 1px solid var(--_border-color);\n}\n\n:host([data-placement^='bottom']) i {\n border-top: 1px solid var(--_border-color);\n border-left: 1px solid var(--_border-color);\n}\n\n:host([data-placement^='left']) i {\n border-right: 1px solid var(--_border-color);\n border-top: 1px solid var(--_border-color);\n}\n\n:host([data-placement^='right']) i {\n border-left: 1px solid var(--_border-color);\n border-bottom: 1px solid var(--_border-color);\n}\n","import { html, nothing, unsafeCSS, type PropertyValues } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { property } from 'lit/decorators.js';\nimport type { Placement } from '@floating-ui/dom';\nimport { PopoverController } from '../../shared/controllers/popover.js';\nimport { uniqueId } from '../../registry.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './popover.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * @summary A popover that displays interactive content anchored to a trigger.\n * @customElement l-popover\n *\n * @slot - Popover content.\n *\n * @csspart body - The popover container.\n * @csspart arrow - The directional arrow element.\n *\n * @cssproperty --background - Background color. Default: `Canvas`.\n * @cssproperty --color - Text color. Default: inherited.\n * @cssproperty --border-radius - Border radius. Default `8px`.\n * @cssproperty --max-width - Maximum width. Default `320px`.\n * @cssproperty --shadow - Box shadow.\n * @cssproperty --arrow-size - Arrow size. Default `8px`.\n * @cssproperty --show-duration - Show animation duration. Default `150ms`.\n * @cssproperty --hide-duration - Hide animation duration. Default `150ms`.\n */\nexport class Popover extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n private _popoverId = uniqueId('popover');\n\n private _floating = new PopoverController(this, {\n getTriggerElement: () => this._trigger,\n getFloatingElement: () => this._popoverEl,\n getArrowElement: () => this._arrowEl,\n onPlacementChange: (p) => {\n this.dataset.placement = p;\n },\n });\n\n /** The HTML id of the element triggering the popover. */\n @property()\n accessor for = '';\n\n /** The preferred placement of the popover. */\n @property()\n accessor placement: Placement = 'bottom';\n\n /** The distance in pixels from the target element. */\n @property({ type: Number })\n accessor distance = 8;\n\n /** Whether or not the popover is visible. */\n @property({ type: Boolean, reflect: true })\n accessor open = false;\n\n /** Hide the directional arrow. */\n @property({ type: Boolean, reflect: true, attribute: 'without-arrow' })\n accessor withoutArrow = false;\n\n /** Stretch the popover to the viewport width. Useful for mega menus. */\n @property({ type: Boolean, reflect: true, attribute: 'full-width' })\n accessor fullWidth = false;\n\n /** Space-separated list of trigger modes: `click`, `hover`, `focus`, `manual`. */\n @property()\n accessor trigger = 'click';\n\n private _hasTrigger(type: string) {\n return this.trigger.split(' ').includes(type);\n }\n\n private get _trigger(): HTMLElement | null {\n return this.for ? (this.getRootNode() as Document | ShadowRoot).getElementById(this.for) : null;\n }\n\n private get _popoverEl(): HTMLElement {\n return this.shadowRoot!.querySelector('[popover]')!;\n }\n\n private get _arrowEl(): HTMLElement | null {\n return this.withoutArrow ? null : this.shadowRoot!.querySelector('i');\n }\n\n private _getDuration(prop: '--show-duration' | '--hide-duration'): number {\n const parsed = parseFloat(getComputedStyle(this).getPropertyValue(prop));\n return Number.isNaN(parsed) ? 150 : parsed;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n requestAnimationFrame(() => this._addTriggerListeners());\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._removeTriggerListeners();\n }\n\n override updated(changed: PropertyValues<this>) {\n if (changed.has('open')) {\n void this._handleOpenChange();\n }\n if (changed.has('for')) {\n this._removeTriggerListeners(changed.get('for') as string);\n this._addTriggerListeners();\n }\n }\n\n show() {\n if (!this.open) this.open = true;\n }\n\n hide() {\n if (this.open) this.open = false;\n }\n\n toggle() {\n this.open = !this.open;\n }\n\n private async _handleOpenChange() {\n const popover = this._popoverEl;\n if (!popover) return;\n\n const posOpts = {\n placement: this.placement,\n distance: this.distance,\n fullWidth: this.fullWidth,\n };\n\n if (this.open) {\n popover.showPopover();\n await this._floating.updatePosition(posOpts);\n if (!this.open) return;\n await this._floating.animateShow(popover, this._getDuration('--show-duration'));\n this._floating.startPositioning(posOpts);\n this._trigger?.setAttribute('aria-expanded', 'true');\n this._trigger?.setAttribute('aria-controls', this._popoverId);\n } else {\n this._floating.stopPositioning();\n this._floating.cleanupSafePolygon();\n this._trigger?.setAttribute('aria-expanded', 'false');\n this._trigger?.removeAttribute('aria-controls');\n await this._floating.animateHide(popover, this._getDuration('--hide-duration'));\n if (popover.matches(':popover-open')) popover.hidePopover();\n }\n }\n\n // --- Trigger event handlers ---\n\n private _onPointerEnter = () => {\n if (!this._hasTrigger('hover')) return;\n this._floating.cleanupSafePolygon();\n this.show();\n };\n\n private _onPointerLeave = (e: PointerEvent) => {\n if (!this._hasTrigger('hover') || !this.open) return;\n this._floating.handlePointerLeave(e, () => this.hide());\n };\n\n private _onFocusIn = () => {\n if (this._hasTrigger('focus')) this.show();\n };\n private _onFocusOut = () => {\n if (this._hasTrigger('focus')) this.hide();\n };\n private _onClick = () => {\n if (this._hasTrigger('click')) this.toggle();\n };\n\n private _onKeyDown = (e: KeyboardEvent) => {\n if (this.open && e.key === 'Escape') {\n e.stopPropagation();\n this.hide();\n }\n };\n\n /** Sync `open` when popover=\"auto\" light-dismiss fires. */\n private _onToggle = (e: Event) => {\n const toggleEvent = e as ToggleEvent;\n if (toggleEvent.newState === 'closed' && this.open) {\n this.open = false;\n }\n };\n\n private _addTriggerListeners() {\n this._floating.addTriggerListeners({\n onPointerEnter: this._onPointerEnter,\n onPointerLeave: this._onPointerLeave,\n onFocusIn: this._onFocusIn,\n onFocusOut: this._onFocusOut,\n onClick: this._onClick,\n onKeyDown: this._onKeyDown,\n });\n }\n\n private _removeTriggerListeners(forId?: string) {\n const trigger = forId\n ? (this.getRootNode() as Document | ShadowRoot).getElementById(forId)\n : undefined;\n this._floating.removeTriggerListeners(trigger);\n }\n\n override render() {\n return html`\n <div\n id=${this._popoverId}\n popover=\"auto\"\n part=\"body\"\n @toggle=${this._onToggle}\n >\n ${this.withoutArrow\n ? nothing\n : html`\n <i\n part=\"arrow\"\n role=\"presentation\"\n ></i>\n `}\n <slot></slot>\n </div>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Popover } from './popover.js';\nexport * from './popover.js';\ndefine('popover', Popover);\n","import { property } from 'lit/decorators.js';\nimport { LuxenElement } from './luxen-element.js';\n\n/**\n * Base class for form-associated Luxen custom elements.\n * Implements the Form Associated Custom Elements API via ElementInternals.\n *\n * Subclasses own their typed `value` property and call `_syncFormValue()`\n * whenever it changes.\n */\nexport class LuxenFormAssociatedElement extends LuxenElement {\n static formAssociated = true;\n\n /** @internal */\n readonly _internals: ElementInternals;\n\n @property({ reflect: true })\n name = '';\n\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n @property({ type: Boolean, reflect: true })\n required = false;\n\n /** The serialised value the element resets to on form reset. */\n protected _defaultFormValue = '';\n\n /** Whether the user has interacted with this control. */\n hasInteracted = false;\n\n constructor() {\n super();\n this._internals = this.attachInternals();\n }\n\n /** The form this control is associated with. */\n get form(): HTMLFormElement | null {\n return this._internals.form;\n }\n\n /** `<label>` elements associated with this control via `for` attribute. */\n get formLabels(): NodeList {\n return this._internals.labels;\n }\n\n /**\n * Override to return the inner element where validation popups anchor.\n * Passed as the 3rd arg to `ElementInternals.setValidity()`.\n */\n get validationTarget(): HTMLElement | undefined {\n return undefined;\n }\n\n // --- Form value ---\n\n /** Update the form submission value. */\n protected _syncFormValue(value: string): void {\n this._internals.setFormValue(value);\n }\n\n // --- Validity ---\n\n checkValidity(): boolean {\n return this._internals.checkValidity();\n }\n\n reportValidity(): boolean {\n this.hasInteracted = true;\n this._updateCustomStates();\n return this._internals.reportValidity();\n }\n\n /** Set a custom validity message. Pass `''` to clear. */\n setCustomValidity(message: string): void {\n if (message) {\n this._internals.setValidity({ customError: true }, message, this.validationTarget);\n } else {\n this._internals.setValidity({});\n }\n this._updateCustomStates();\n }\n\n /** Directly set validity flags. With no args, clears all flags. */\n protected setValidity(flags: ValidityStateFlags = {}, message = '', anchor?: HTMLElement): void {\n this._internals.setValidity(flags, message, anchor ?? this.validationTarget);\n this._updateCustomStates();\n }\n\n get validity(): ValidityState {\n return this._internals.validity;\n }\n\n get validationMessage(): string {\n return this._internals.validationMessage;\n }\n\n get willValidate(): boolean {\n return this._internals.willValidate;\n }\n\n /** Update `:state()` custom states based on current validity and interaction. */\n private _updateCustomStates(): void {\n const states = this._internals.states;\n const isValid = this._internals.validity.valid;\n\n this._toggleState(states, 'required', this.required);\n this._toggleState(states, 'optional', !this.required);\n this._toggleState(states, 'valid', isValid);\n this._toggleState(states, 'invalid', !isValid);\n this._toggleState(states, 'user-valid', isValid && this.hasInteracted);\n this._toggleState(states, 'user-invalid', !isValid && this.hasInteracted);\n }\n\n private _toggleState(states: CustomStateSet, name: string, force: boolean): void {\n if (force) {\n states.add(name);\n } else {\n states.delete(name);\n }\n }\n\n // --- Form lifecycle callbacks ---\n\n formAssociatedCallback(_form: HTMLFormElement | null): void {}\n\n formDisabledCallback(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n formResetCallback(): void {\n this.hasInteracted = false;\n this._syncFormValue(this._defaultFormValue);\n this._updateCustomStates();\n }\n\n formStateRestoreCallback(state: string, _mode: 'restore' | 'autocomplete'): void {\n this._syncFormValue(state);\n }\n}\n",":host {\n --icon-size: 20px;\n --active-color: gold;\n --inactive-color: #ddd;\n --spacing: 0px;\n --_icon: var(\n --icon,\n url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='2 2 20 19.02'><path d='M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z'/></svg>\")\n );\n\n display: inline-flex;\n align-items: center;\n}\n\n/* — Read-only mode — */\n\n.rating {\n height: var(--icon-size);\n background: linear-gradient(\n to right,\n var(--active-color) var(--_fill, 0%),\n var(--inactive-color) var(--_fill, 0%)\n );\n mask-size: var(--icon-size) var(--icon-size);\n mask-repeat: no-repeat;\n}\n\n/* — Edit mode — */\n\n.rating-edit {\n display: inline-flex;\n gap: var(--spacing);\n}\n\n.icon-wrapper {\n cursor: pointer;\n}\n\n.icon-wrapper input {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n\n.icon {\n display: block;\n width: var(--icon-size);\n height: var(--icon-size);\n mask-image: var(--_icon);\n mask-size: contain;\n mask-repeat: no-repeat;\n background: var(--inactive-color);\n transition: scale 0.2s ease;\n pointer-events: none;\n}\n\n.icon.active {\n background: var(--active-color);\n}\n\n.icon-wrapper:hover .icon {\n scale: 1.2;\n}\n\n.icon-wrapper:has(input:focus-visible) .icon {\n outline: 2px solid var(--active-color);\n outline-offset: 2px;\n border-radius: 2px;\n}\n\n:host([edit-mode]) .wrapper:focus-within {\n outline: 2px solid var(--active-color);\n outline-offset: 2px;\n border-radius: 2px;\n}\n\n/* — Disabled — */\n\n:host([disabled]) {\n opacity: 0.5;\n pointer-events: none;\n}\n\n/* — Label — */\n\n.wrapper {\n display: flex;\n align-items: center;\n white-space: nowrap;\n}\n\n.rating-label {\n margin-inline-start: 8px;\n flex: 1;\n font-size: 1rem;\n line-height: 1;\n}\n","import { html, nothing, unsafeCSS } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { LuxenFormAssociatedElement } from '../../shared/luxen-form-associated-element.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './rating.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * A star rating component using CSS mask-image.\n *\n * @summary Displays a star rating, optionally interactive.\n *\n * @csspart label - The label element shown in edit mode.\n *\n * @cssproperty --icon-size - The size of each icon. Defaults to `20px`.\n * @cssproperty --active-color - The fill color for rated icons. Defaults to `gold`.\n * @cssproperty --inactive-color - The fill color for empty icons. Defaults to `#ddd`.\n * @cssproperty --spacing - The spacing between icons. Defaults to `0px`.\n * @cssproperty --icon - Custom SVG shape as a `url()`. Defaults to a 5-pointed star.\n *\n * @event {{ name: string, value: string, checked: boolean, sourceEvent: Event }} change - Emitted when the rating value changes in edit mode.\n */\nexport class Rating extends LuxenFormAssociatedElement {\n static override styles = [hostStyles, styles];\n\n private currentLabel = '';\n private previewedValue = 0;\n\n @property({ type: Boolean, reflect: true, attribute: 'edit-mode' })\n accessor editMode = false;\n\n @property({\n type: Array,\n reflect: true,\n converter: {\n fromAttribute: (value: string) => value.split('|'),\n toAttribute: (value: string[]) => (value.length ? value.join('|') : null),\n },\n })\n accessor labels: string[] = [];\n\n @property({ type: Number, reflect: true })\n accessor value = 0;\n\n @property({ type: Number, reflect: true })\n accessor length = 5;\n\n /** Optional callback returning a CSS `url()` string for a given position (1-based). */\n getIcon?: (value: number) => string;\n\n override connectedCallback() {\n super.connectedCallback();\n this._defaultFormValue = String(this.value);\n this._syncFormValue(this._defaultFormValue);\n }\n\n override formResetCallback() {\n this.value = Number(this._defaultFormValue);\n super.formResetCallback();\n }\n\n override formStateRestoreCallback(state: string, _mode: 'restore' | 'autocomplete') {\n this.value = Number(state);\n this._syncFormValue(state);\n }\n\n override firstUpdated() {\n this.setLabelForValue(this.value);\n }\n\n private setLabelForValue(value: number | string) {\n const intValue = typeof value === 'string' ? parseInt(value, 10) : value;\n this.currentLabel = intValue ? (this.labels?.[intValue - 1] ?? '') : '';\n this.requestUpdate();\n }\n\n private getRatingStyle() {\n const max = this.length;\n const fillPct = max > 0 ? (this.value / max) * 100 : 0;\n const step = 'calc(var(--icon-size) + var(--spacing))';\n\n const icons = Array.from({ length: max }, (_, i) => this.getIcon?.(i + 1) ?? 'var(--_icon)');\n const positions = Array.from({ length: max }, (_, i) =>\n i === 0 ? '0 0' : `calc(${i} * ${step}) 0`,\n );\n\n return [\n `width: calc(${max} * var(--icon-size) + ${max - 1} * var(--spacing))`,\n `--_fill: ${fillPct}%`,\n `mask-image: ${icons.join(', ')}`,\n `mask-position: ${positions.join(', ')}`,\n ].join('; ');\n }\n\n override render() {\n if (!this.editMode) {\n return html`<div\n class=\"rating\"\n style=${this.getRatingStyle()}\n ></div>`;\n }\n\n const activeCount = this.previewedValue || this.value;\n\n return html`\n <div\n class=\"wrapper\"\n @focusout=${this.clearPreview}\n >\n <div class=\"rating-edit\">\n ${Array.from({ length: this.length }, (_, i) => {\n const v = i + 1;\n const icon = this.getIcon?.(v);\n return html`\n <label\n class=\"icon-wrapper\"\n @pointerover=${() => this.previewValue(v)}\n @pointerout=${this.clearPreview}\n >\n <input\n type=\"radio\"\n name=${this.name ?? nothing}\n value=\"${v}\"\n aria-label=\"${this.labels?.[i] ?? `${v} ${v === 1 ? 'star' : 'stars'}`}\"\n ?checked=\"${this.value === v}\"\n ?disabled=\"${this.disabled}\"\n @click=${this.onClick}\n @focusin=${() => this.previewValue(v)}\n />\n <span\n class=\"icon ${v <= activeCount ? 'active' : ''}\"\n style=${icon ? `mask-image: ${icon}` : nothing}\n ></span>\n </label>\n `;\n })}\n </div>\n ${this.labels?.length\n ? html`<div\n class=\"rating-label\"\n part=\"label\"\n >\n ${this.currentLabel}\n </div>`\n : nothing}\n </div>\n `;\n }\n\n private previewValue = (value: number) => {\n this.previewedValue = value;\n this.setLabelForValue(value);\n };\n\n private clearPreview = (event?: FocusEvent) => {\n if (event) {\n const related = event.relatedTarget as Node | null;\n if (related && this.shadowRoot?.contains(related)) return;\n }\n this.previewedValue = 0;\n this.setLabelForValue(this.value);\n };\n\n private onClick = (event: Event) => {\n const target = event.currentTarget as HTMLInputElement;\n const clickedValue = Number(target.value);\n this.value = clickedValue === this.value ? 0 : clickedValue;\n this.hasInteracted = true;\n this._syncFormValue(String(this.value));\n\n this.emit('change', {\n detail: {\n name: this.name,\n value: String(this.value),\n checked: this.value > 0,\n sourceEvent: event,\n },\n });\n };\n}\n","import { define } from '../../define.js';\nimport { Rating } from './rating.js';\nexport * from './rating.js';\ndefine('rating', Rating);\n","import { LuxenElement } from '../../shared/luxen-element.js';\n\n/**\n * @summary A skeleton loading placeholder.\n * @customElement l-skeleton\n *\n * @cssproperty --width - Width of the skeleton\n * @cssproperty --height - Height of the skeleton\n */\nexport class Skeleton extends LuxenElement {\n override createRenderRoot() {\n return this;\n }\n}\n","import { define } from '../../define.js';\nimport { Skeleton } from './skeleton.js';\nexport * from './skeleton.js';\ndefine('skeleton', Skeleton);\n",":host {\n --size: 1em;\n --indicator-color: currentColor;\n --speed: 0.75s;\n\n flex: none;\n display: inline-flex;\n width: var(--size);\n height: var(--size);\n color: var(--indicator-color);\n}\n\nsvg {\n width: 100%;\n height: 100%;\n fill: currentColor;\n}\n\n.spinner {\n transform-origin: center;\n animation: spin var(--speed) linear infinite;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n","import { html, unsafeCSS } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './spinner.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * @summary A spinner component for indicating loading state.\n * @customElement l-spinner\n *\n * @csspart base - The SVG container element.\n *\n * @cssproperty --size - The size of the spinner (width and height). Defaults to `1em`.\n * @cssproperty --indicator-color - The color of the spinner.\n * @cssproperty --speed - The duration of one full spin cycle.\n */\nexport class Spinner extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n override render() {\n return html`\n <svg\n part=\"base\"\n role=\"progressbar\"\n aria-label=\"Loading\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z\"\n opacity=\".25\"\n />\n <path\n d=\"M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z\"\n class=\"spinner\"\n />\n </svg>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Spinner } from './spinner.js';\nexport * from './spinner.js';\ndefine('spinner', Spinner);\n",":host {\n --show-duration: 200ms;\n --hide-duration: 200ms;\n --offset: 0px;\n\n /* Override popover UA defaults. */\n position: fixed;\n inset: auto;\n inset-inline: 0;\n width: 100%;\n margin: 0;\n border: 0;\n padding: 0;\n background: transparent;\n display: block;\n opacity: 0;\n transition:\n opacity var(--hide-duration) ease,\n translate var(--hide-duration) ease,\n display var(--hide-duration) allow-discrete,\n overlay var(--hide-duration) allow-discrete;\n}\n\n:host([placement='bottom']) {\n bottom: var(--offset);\n translate: 0 100%;\n}\n\n:host([placement='top']) {\n top: var(--offset);\n translate: 0 -100%;\n}\n\n:host(:popover-open) {\n opacity: 1;\n translate: 0 0;\n transition-duration: var(--show-duration);\n}\n\n@starting-style {\n :host([placement='bottom']:popover-open) {\n opacity: 0;\n translate: 0 100%;\n }\n :host([placement='top']:popover-open) {\n opacity: 0;\n translate: 0 -100%;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n :host {\n --show-duration: 0ms;\n --hide-duration: 0ms;\n }\n}\n","import { html, unsafeCSS, type PropertyValues } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { property } from 'lit/decorators.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './sticky-bar.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * @summary A bar docked to the viewport edge, revealed in the top layer when a referenced element scrolls out of view.\n * @customElement l-sticky-bar\n *\n * Uses the native `popover=\"manual\"` attribute, so the bar paints in the\n * document's top layer. Pass `for=\"<id>\"` to track an element; the bar\n * reveals when that element leaves the viewport (e.g. an Add-to-cart\n * button on a mobile product page). Omit `for` for a bar that stays\n * visible permanently (cookie banners, promo notices, environment\n * indicators).\n *\n * @slot - Bar content. Owns its own background, padding, and typography.\n *\n * @cssproperty --show-duration - Reveal animation duration. Default `200ms`.\n * @cssproperty --hide-duration - Dismiss animation duration. Default `200ms`.\n * @cssproperty --offset - Distance from the active edge. Default `0px`. Use to clear a sticky header when `placement=\"top\"`.\n *\n * @event show - Fired before the bar reveals. Cancelable.\n * @event after-show - Fired after the reveal animation completes.\n * @event hide - Fired before the bar hides. Cancelable.\n * @event after-hide - Fired after the hide animation completes.\n */\nexport class StickyBar extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n /** HTML id of the element to track. When that element leaves the viewport, the bar reveals. Omit for a permanently visible bar. */\n @property()\n accessor for = '';\n\n /** HTML id of the scrolling ancestor used as the IntersectionObserver root. Omit to use the viewport. Useful for nested scroll containers (CMS preview panes, modals). */\n @property()\n accessor root = '';\n\n /** Edge to dock against. */\n @property({ reflect: true })\n accessor placement: 'bottom' | 'top' = 'bottom';\n\n private _io?: IntersectionObserver;\n private _observed?: Element;\n\n override connectedCallback() {\n super.connectedCallback();\n this.popover = 'manual';\n this.addEventListener('toggle', this._onToggle);\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('toggle', this._onToggle);\n this._teardownObserver();\n }\n\n override updated(changed: PropertyValues<this>) {\n if (changed.has('for') || changed.has('root')) {\n this._teardownObserver();\n if (this.for) {\n this._setupObserver();\n } else {\n // No target → permanent bar. Reveal once on mount.\n this._show();\n }\n }\n }\n\n private get _target(): HTMLElement | null {\n return this.for ? (this.getRootNode() as Document | ShadowRoot).getElementById(this.for) : null;\n }\n\n private _show() {\n if (this.matches(':popover-open')) return;\n if (this.emit('show', { cancelable: true })) this.showPopover();\n }\n\n private _hide() {\n if (!this.matches(':popover-open')) return;\n if (this.emit('hide', { cancelable: true })) this.hidePopover();\n }\n\n private _onToggle = (e: Event) => {\n const ev = e as ToggleEvent;\n this.emit(ev.newState === 'open' ? 'after-show' : 'after-hide');\n };\n\n private _setupObserver() {\n const target = this._target;\n if (!target) return;\n this._observed = target;\n const root = this.root\n ? (this.getRootNode() as Document | ShadowRoot).getElementById(this.root)\n : null;\n // Use the element's own realm so an iframe-hosted bar observes the iframe's viewport.\n const view = this.ownerDocument.defaultView ?? window;\n this._io = new view.IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) this._hide();\n else this._show();\n }\n },\n { root, threshold: 0 },\n );\n this._io.observe(target);\n }\n\n private _teardownObserver() {\n if (this._io && this._observed) {\n this._io.unobserve(this._observed);\n }\n this._io?.disconnect();\n this._io = undefined;\n this._observed = undefined;\n }\n\n override render() {\n return html`<slot></slot>`;\n }\n}\n","import { define } from '../../define.js';\nimport { StickyBar } from './sticky-bar.js';\nexport * from './sticky-bar.js';\ndefine('sticky-bar', StickyBar);\n","import { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { uniqueId } from '../../registry.js';\n\nexport type TabsVariant = 'enclosed' | 'line';\nexport type TabsOrientation = 'horizontal' | 'vertical';\n\n/**\n * @summary A tabs component that progressively enhances light DOM markup\n * with ARIA roles, keyboard navigation, and animated indicators.\n *\n * @example\n * ```html\n * <l-tabs variant=\"enclosed\">\n * <div>\n * <button>Tab 1</button>\n * <button>Tab 2</button>\n * </div>\n * <div>Content 1</div>\n * <div>Content 2</div>\n * </l-tabs>\n * ```\n *\n * @event change - Fired when the active tab changes. Detail: `{ index: number, name: string | null }`.\n *\n * @customElement l-tabs\n */\nexport class Tabs extends LuxenElement {\n override createRenderRoot() {\n return this;\n }\n\n private _instanceId = uniqueId('tabs');\n private _tablistEl: HTMLElement | null = null;\n private _tabs: HTMLButtonElement[] = [];\n private _panels: HTMLElement[] = [];\n\n /** Visual variant. */\n @property({ reflect: true })\n variant: TabsVariant = 'line';\n\n /** Index of the active tab (0-based). */\n @property({ reflect: true })\n value = '0';\n\n /** Stretch tabs to fill container width. */\n @property({ type: Boolean, reflect: true, attribute: 'full-width' })\n fullWidth = false;\n\n /** Tab orientation. */\n @property({ reflect: true })\n orientation: TabsOrientation = 'horizontal';\n\n // --- Lifecycle ---\n\n override connectedCallback() {\n super.connectedCallback();\n // Defer setup to let light DOM children parse\n requestAnimationFrame(() => this._setup());\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._teardown();\n }\n\n override updated(changed: Map<string, unknown>) {\n if (changed.has('value') && this._tabs.length) {\n this._selectTab(Number(this.value), false);\n }\n if (changed.has('orientation') && this._tablistEl) {\n this._tablistEl.setAttribute('aria-orientation', this.orientation);\n }\n }\n\n // --- Setup / Teardown ---\n\n private _setup() {\n const children = Array.from(this.children) as HTMLElement[];\n if (children.length < 2) return;\n\n // First child is the tablist container\n this._tablistEl = children[0];\n this._tablistEl.setAttribute('role', 'tablist');\n this._tablistEl.setAttribute('aria-orientation', this.orientation);\n\n // Buttons inside tablist become tabs\n this._tabs = Array.from(this._tablistEl.querySelectorAll('button'));\n\n // Remaining children become panels\n this._panels = children.slice(1);\n\n const activeIndex = Number(this.value) || 0;\n\n // Enhance tabs\n for (let i = 0; i < this._tabs.length; i++) {\n const tab = this._tabs[i];\n const panel = this._panels[i];\n const name = tab.getAttribute('name') ?? String(i);\n const tabId = `${this._instanceId}-tab-${name}`;\n const panelId = `${this._instanceId}-panel-${name}`;\n\n tab.setAttribute('role', 'tab');\n tab.setAttribute('id', tabId);\n tab.setAttribute('aria-selected', String(i === activeIndex));\n tab.setAttribute('tabindex', i === activeIndex ? '0' : '-1');\n\n if (panel) {\n tab.setAttribute('aria-controls', panelId);\n panel.setAttribute('role', 'tabpanel');\n panel.setAttribute('id', panelId);\n panel.setAttribute('aria-labelledby', tabId);\n panel.setAttribute('tabindex', '0');\n if (i !== activeIndex) {\n panel.hidden = true;\n } else {\n panel.hidden = false;\n }\n }\n }\n\n // Attach listeners\n this._tablistEl.addEventListener('click', this._onClick);\n this._tablistEl.addEventListener('keydown', this._onKeyDown);\n\n // Initial indicator position\n requestAnimationFrame(() => this._updateIndicator());\n }\n\n private _teardown() {\n this._tablistEl?.removeEventListener('click', this._onClick);\n this._tablistEl?.removeEventListener('keydown', this._onKeyDown);\n }\n\n // --- Tab selection ---\n\n private _selectTab(index: number, emitEvent = true) {\n if (index < 0 || index >= this._tabs.length) return;\n\n for (let i = 0; i < this._tabs.length; i++) {\n const tab = this._tabs[i];\n const panel = this._panels[i];\n const isActive = i === index;\n\n tab.setAttribute('aria-selected', String(isActive));\n tab.setAttribute('tabindex', isActive ? '0' : '-1');\n\n if (panel) {\n panel.hidden = !isActive;\n }\n }\n\n this.value = String(index);\n this._updateIndicator();\n\n if (emitEvent) {\n const name = this._tabs[index]?.getAttribute('name') ?? null;\n this.emit('change', { detail: { index, name } });\n }\n }\n\n // --- Indicator ---\n\n private _updateIndicator() {\n if (!this._tablistEl) return;\n const activeTab = this._tabs[Number(this.value)];\n if (!activeTab) return;\n\n const isVertical = this.orientation === 'vertical';\n\n if (isVertical) {\n this._tablistEl.style.setProperty('--_indicator-top', `${activeTab.offsetTop}px`);\n this._tablistEl.style.setProperty('--_indicator-height', `${activeTab.offsetHeight}px`);\n } else {\n this._tablistEl.style.setProperty('--_indicator-left', `${activeTab.offsetLeft}px`);\n this._tablistEl.style.setProperty('--_indicator-width', `${activeTab.offsetWidth}px`);\n }\n }\n\n // --- Event handlers ---\n\n private _onClick = (e: Event) => {\n const tab = (e.target as HTMLElement).closest<HTMLButtonElement>('[role=\"tab\"]');\n if (!tab) return;\n const index = this._tabs.indexOf(tab);\n if (index >= 0) {\n this._selectTab(index);\n tab.focus();\n }\n };\n\n private _onKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement;\n if (target.getAttribute('role') !== 'tab') return;\n\n const isHorizontal = this.orientation === 'horizontal';\n const prevKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';\n const nextKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';\n\n let index = this._tabs.indexOf(target as HTMLButtonElement);\n\n switch (e.key) {\n case nextKey:\n e.preventDefault();\n index = (index + 1) % this._tabs.length;\n this._selectTab(index);\n this._tabs[index].focus();\n break;\n case prevKey:\n e.preventDefault();\n index = (index - 1 + this._tabs.length) % this._tabs.length;\n this._selectTab(index);\n this._tabs[index].focus();\n break;\n case 'Home':\n e.preventDefault();\n this._selectTab(0);\n this._tabs[0].focus();\n break;\n case 'End':\n e.preventDefault();\n this._selectTab(this._tabs.length - 1);\n this._tabs[this._tabs.length - 1].focus();\n break;\n }\n };\n}\n","import { define } from '../../define.js';\nimport { Tabs } from './tabs.js';\nexport * from './tabs.js';\ndefine('tabs', Tabs);\n","/* eslint-disable no-shadow -- the local `toast` HTMLElement intentionally\n shadows the module-level `toast()` export; renaming would touch ~50 lines\n without behavioral benefit. */\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { property } from 'lit/decorators.js';\nimport { tagName, cls, uniqueId } from '../../registry.js';\n\ndeclare global {\n interface Element {\n /** @see https://developer.mozilla.org/en-US/docs/Web/API/Element/setHTML */\n setHTML(input: string, options?: Record<string, unknown>): void;\n }\n}\n\n/** Minimal custom element for toast items — no render, no shadow DOM. */\nexport class ToastItem extends HTMLElement {}\n\nexport type ToastVariant = 'info' | 'success' | 'warning' | 'danger';\n\nexport type ToastPlacement =\n | 'top-start'\n | 'top-center'\n | 'top-end'\n | 'bottom-start'\n | 'bottom-center'\n | 'bottom-end';\n\ninterface ToastOptionsBase {\n /** Optional heading text displayed above the message. */\n heading?: string;\n /** Override the element's variant for this toast. */\n variant?: ToastVariant;\n /** Override auto-dismiss duration (ms) for this toast. 0 = no auto-dismiss. */\n duration?: number;\n /** Iconify icon name (e.g. 'lucide:check'). Replaces the accent bar. */\n icon?: string;\n /** Show a countdown progress bar at the bottom. Default `false`. */\n timer?: boolean;\n}\n\nexport type ToastOptions =\n | (ToastOptionsBase & { /** The message text to display. */ text: string; html?: never })\n | (ToastOptionsBase & {\n text?: never;\n /** HTML content (sanitized via the Sanitizer API). */ html: string;\n });\n\ninterface TimerState {\n remaining: number;\n startTime: number;\n timeoutId: number;\n paused: boolean;\n}\n\n/**\n * @summary A toast notification container that generates toast items internally.\n * @customElement l-toast\n *\n * @event show - Emitted when a toast begins to show. Cancelable.\n * @event after-show - Emitted after the show animation completes.\n * @event hide - Emitted when a toast begins to hide. Cancelable.\n * @event after-hide - Emitted after the hide animation completes and toast is removed.\n *\n * @cssproperty --gap - Gap between stacked toast items.\n * @cssproperty --width - Width of the toast stack.\n * @cssproperty --show-duration - Duration of the show animation.\n * @cssproperty --hide-duration - Duration of the hide animation.\n */\nexport class Toast extends LuxenElement {\n /** Use light DOM — no Shadow DOM. */\n override createRenderRoot() {\n return this;\n }\n\n /** Position of the toast stack on the screen. */\n @property({ reflect: true }) placement: ToastPlacement = 'top-end';\n\n /** Default auto-dismiss delay in milliseconds. 0 disables auto-dismiss. */\n @property({ type: Number, reflect: true }) duration = 5000;\n\n /** Default variant for toast items: `info`, `success`, `warning`, `danger`. */\n @property({ reflect: true }) variant?: ToastVariant;\n\n private _timers = new WeakMap<HTMLElement, TimerState>();\n private _positionCache = new WeakMap<Element, DOMRect>();\n private _documentHidden = false;\n\n override connectedCallback() {\n super.connectedCallback();\n this.popover = 'manual';\n this.setAttribute('role', 'log');\n this.setAttribute('aria-live', 'polite');\n this.setAttribute('aria-relevant', 'additions');\n\n document.addEventListener('keydown', this._onKeyDown);\n document.addEventListener('visibilitychange', this._onVisibilityChange);\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener('keydown', this._onKeyDown);\n document.removeEventListener('visibilitychange', this._onVisibilityChange);\n }\n\n /** Create and show a toast notification. */\n toast(options: ToastOptions): HTMLElement {\n const { heading, variant = this.variant, duration = this.duration } = options;\n\n // Build toast DOM\n const uid = uniqueId('toast');\n const toast = document.createElement(tagName('toast-item'));\n if (variant) toast.setAttribute('variant', variant);\n toast.setAttribute('role', variant === 'danger' ? 'alert' : 'status');\n toast.setAttribute('aria-atomic', 'true');\n\n if (options.icon) {\n const icon = document.createElement('iconify-icon');\n icon.setAttribute('icon', options.icon);\n icon.setAttribute('width', '20');\n icon.setAttribute('height', '20');\n icon.setAttribute('aria-hidden', 'true');\n icon.className = cls('toast-icon');\n toast.appendChild(icon);\n } else {\n const accent = document.createElement('div');\n accent.className = cls('toast-accent');\n accent.setAttribute('aria-hidden', 'true');\n toast.appendChild(accent);\n }\n\n const content = document.createElement('div');\n content.className = cls('toast-content');\n\n const textWrap = document.createElement('div');\n\n if (heading) {\n const headingEl = document.createElement('div');\n headingEl.id = `${uid}-heading`;\n headingEl.className = `${cls('toast-heading')} font-medium`;\n headingEl.textContent = heading;\n textWrap.appendChild(headingEl);\n toast.setAttribute('aria-labelledby', `${uid}-heading`);\n }\n\n const messageEl = document.createElement('div');\n messageEl.id = `${uid}-message`;\n messageEl.className = cls('toast-message');\n if ('html' in options && options.html) {\n messageEl.setHTML(options.html);\n } else {\n messageEl.textContent = options.text ?? '';\n }\n textWrap.appendChild(messageEl);\n toast.setAttribute(heading ? 'aria-describedby' : 'aria-labelledby', `${uid}-message`);\n\n content.appendChild(textWrap);\n toast.appendChild(content);\n\n const closeBtn = document.createElement('button');\n closeBtn.type = 'button';\n closeBtn.className = cls('close');\n closeBtn.setAttribute('data-appearance', 'ring');\n closeBtn.setAttribute('aria-label', 'Close');\n closeBtn.addEventListener('click', () => this._hideToast(toast));\n toast.appendChild(closeBtn);\n\n // Timer bar (opt-in)\n if (options.timer && duration > 0 && isFinite(duration)) {\n const timerBar = document.createElement('div');\n timerBar.className = cls('toast-timer');\n timerBar.setAttribute('aria-hidden', 'true');\n timerBar.style.setProperty('--_timer-duration', `${duration}ms`);\n toast.appendChild(timerBar);\n }\n\n // FLIP: capture existing positions\n this._capturePositions();\n\n // Insert into container\n if (this.placement.includes('bottom')) {\n this.appendChild(toast);\n } else {\n this.prepend(toast);\n }\n\n // Show popover if not already open\n if (!this.matches(':popover-open')) {\n this.showPopover();\n }\n\n // Dispatch show\n if (!this.emit('show', { cancelable: true, detail: { toast } })) {\n toast.remove();\n return toast;\n }\n\n // Trigger show animation on next frame\n requestAnimationFrame(() => {\n toast.setAttribute('showing', '');\n this._animatePositions();\n\n const onShown = (e: TransitionEvent) => {\n if (e.target !== toast) return;\n toast.removeEventListener('transitionend', onShown);\n this.emit('after-show', { detail: { toast } });\n };\n toast.addEventListener('transitionend', onShown);\n });\n\n // Auto-dismiss timer (0 or Infinity = persistent)\n if (duration > 0 && isFinite(duration)) {\n this._startTimer(toast, duration);\n }\n\n // Pause/resume timer on hover and focus\n toast.addEventListener('pointerenter', () => this._pauseTimer(toast));\n toast.addEventListener('pointerleave', () => this._resumeTimer(toast));\n toast.addEventListener('focusin', () => this._pauseTimer(toast));\n toast.addEventListener('focusout', () => this._resumeTimer(toast));\n\n // ── Swipe-to-dismiss ──────────────────────────────────────────────────────\n\n let swipeStart: { x: number; y: number } | null = null;\n let swiping = false;\n\n toast.addEventListener('pointerdown', (e: PointerEvent) => {\n if (e.button !== 0) return;\n if ((e.target as Element).closest('button, a, [role=\"button\"]')) return;\n swipeStart = { x: e.clientX, y: e.clientY };\n swiping = false;\n toast.setPointerCapture(e.pointerId);\n toast.style.transition = 'none';\n });\n\n // Only allow swiping away from the screen edge, never inward\n const clampDelta = (dx: number) =>\n this.placement.endsWith('-start')\n ? Math.min(dx, 0)\n : this.placement.endsWith('-end')\n ? Math.max(dx, 0)\n : dx;\n\n toast.addEventListener('pointermove', (e: PointerEvent) => {\n if (!swipeStart) return;\n const deltaX = clampDelta(e.clientX - swipeStart.x);\n const deltaY = e.clientY - swipeStart.y;\n\n const buffer = e.pointerType === 'touch' ? 10 : 2;\n if (!swiping && Math.abs(deltaX) < buffer) return;\n\n // If vertical movement dominates, cancel swipe tracking\n if (!swiping && Math.abs(deltaY) > Math.abs(deltaX)) {\n swipeStart = null;\n return;\n }\n\n swiping = true;\n this._pauseTimer(toast);\n toast.style.transform = `translateX(${deltaX}px)`;\n toast.style.opacity = `${1 - Math.abs(deltaX) / 300}`;\n });\n\n toast.addEventListener('pointerup', (e: PointerEvent) => {\n if (!swipeStart) return;\n const deltaX = clampDelta(e.clientX - swipeStart.x);\n swipeStart = null;\n toast.style.transition = '';\n\n if (swiping && Math.abs(deltaX) > 50) {\n const dir = deltaX > 0 ? 1 : -1;\n toast.style.transform = `translateX(${dir * 120}%)`;\n toast.style.opacity = '0';\n toast.addEventListener('transitionend', () => this._hideToast(toast), { once: true });\n } else {\n toast.style.transform = '';\n toast.style.opacity = '';\n if (swiping) this._resumeTimer(toast);\n }\n swiping = false;\n });\n\n return toast;\n }\n\n // ── Timer management ──────────────────────────────────────────────────────────\n\n private _startTimer(toast: HTMLElement, duration: number) {\n const timeoutId = window.setTimeout(() => this._hideToast(toast), duration);\n this._timers.set(toast, {\n remaining: duration,\n startTime: performance.now(),\n timeoutId,\n paused: false,\n });\n }\n\n private _pauseTimer(toast: HTMLElement) {\n const timer = this._timers.get(toast);\n if (!timer || timer.paused) return;\n clearTimeout(timer.timeoutId);\n timer.remaining -= performance.now() - timer.startTime;\n timer.paused = true;\n\n // Use the Web Animations API to pause the countdown bar. CSS `animation-play-state`\n // cannot be used here because browsers defer style recalculations while the tab is\n // hidden, so the animation runs to completion before the style change takes effect.\n const timerBar = toast.querySelector(`.${cls('toast-timer')}`);\n if (timerBar) for (const anim of timerBar.getAnimations()) anim.pause();\n }\n\n private _resumeTimer(toast: HTMLElement) {\n const timer = this._timers.get(toast);\n if (!timer || !timer.paused || timer.remaining <= 0 || this._documentHidden) return;\n timer.startTime = performance.now();\n timer.timeoutId = window.setTimeout(() => this._hideToast(toast), timer.remaining);\n timer.paused = false;\n\n const timerBar = toast.querySelector(`.${cls('toast-timer')}`);\n if (timerBar) for (const anim of timerBar.getAnimations()) anim.play();\n }\n\n // ── Hide a toast ──────────────────────────────────────────────────────────────\n\n private _hideToast(toast: HTMLElement) {\n // Clear timer\n const timer = this._timers.get(toast);\n if (timer) {\n clearTimeout(timer.timeoutId);\n this._timers.delete(toast);\n }\n\n // Prevent double-hide\n if (!toast.hasAttribute('showing')) return;\n\n // Dispatch hide\n if (!this.emit('hide', { cancelable: true, detail: { toast } })) return;\n\n this._capturePositions();\n\n // Remove showing class to trigger exit transition\n toast.removeAttribute('showing');\n\n const remove = () => {\n toast.remove();\n this._animatePositions();\n\n this.emit('after-hide', { detail: { toast } });\n\n // Close popover if no toasts remain\n const remaining = this.querySelectorAll(`:scope > ${tagName('toast-item')}`);\n if (remaining.length === 0 && this.matches(':popover-open')) {\n this.hidePopover();\n }\n };\n\n // Handle zero-duration transitions (reduced motion)\n const duration = parseFloat(getComputedStyle(toast).transitionDuration);\n if (duration === 0) {\n remove();\n } else {\n const onEnd = (e: TransitionEvent) => {\n if (e.target !== toast) return;\n toast.removeEventListener('transitionend', onEnd);\n remove();\n };\n toast.addEventListener('transitionend', onEnd);\n }\n }\n\n // ── FLIP animation for reordering ─────────────────────────────────────────────\n\n private _capturePositions() {\n const items = this.querySelectorAll(`:scope > ${tagName('toast-item')}`);\n for (const child of items) {\n this._positionCache.set(child, child.getBoundingClientRect());\n }\n }\n\n private _animatePositions() {\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n\n const items = this.querySelectorAll(`:scope > ${tagName('toast-item')}`);\n for (const child of items) {\n const oldRect = this._positionCache.get(child);\n if (!oldRect) continue;\n\n const newRect = child.getBoundingClientRect();\n const deltaY = oldRect.top - newRect.top;\n\n if (Math.abs(deltaY) < 1) continue;\n\n (child as HTMLElement).animate(\n [{ transform: `translateY(${deltaY}px)` }, { transform: 'translateY(0)' }],\n { duration: 200, easing: 'cubic-bezier(0.2, 0, 0, 1)' },\n );\n }\n }\n\n // ── Document visibility ──────────────────────────────────────────────────────\n\n private _onVisibilityChange = () => {\n this._documentHidden = document.hidden;\n const items = this.querySelectorAll<HTMLElement>(`:scope > ${tagName('toast-item')}`);\n if (document.hidden) {\n for (const item of items) this._pauseTimer(item);\n } else {\n for (const item of items) this._resumeTimer(item);\n }\n };\n\n // ── Keyboard ──────────────────────────────────────────────────────────────────\n\n private _onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return;\n if (!this.matches(':popover-open')) return;\n\n const last = this.querySelector<HTMLElement>(`:scope > ${tagName('toast-item')}:last-of-type`);\n if (last) {\n e.preventDefault();\n this._hideToast(last);\n }\n };\n}\n\n// ── Standalone function ───────────────────────────────────────────────────────\n\nlet _defaultInstance: Toast | null = null;\n\nfunction _getDefault(): Toast {\n if (!_defaultInstance || !_defaultInstance.isConnected) {\n _defaultInstance =\n document.querySelector(tagName('toast')) ??\n (document.createElement(tagName('toast')) as Toast);\n if (!_defaultInstance.isConnected) {\n document.body.appendChild(_defaultInstance);\n }\n }\n return _defaultInstance;\n}\n\n/** Show a toast notification. Auto-creates `<l-toast>` if none exists in the DOM. */\nexport function toast(options: ToastOptions): HTMLElement {\n return _getDefault().toast(options);\n}\n","import { define } from '../../define.js';\nimport { Toast, ToastItem } from './toast.js';\nexport * from './toast.js';\ndefine('toast', Toast);\ndefine('toast-item', ToastItem);\n",":host {\n --background-color: var(--l-color-bg-fill-brand, light-dark(#1f2937, #f9fafb));\n --border-radius: 4px;\n --max-width: 180px;\n --arrow-size: 6px;\n --show-duration: 150ms;\n --hide-duration: 150ms;\n\n display: contents;\n}\n\n[popover] {\n inset: unset;\n overflow: visible;\n box-sizing: border-box;\n width: max-content;\n max-width: var(--max-width);\n padding: 4px 8px;\n border: 0;\n border-radius: var(--border-radius);\n background: var(--background-color);\n color: var(\n --text-color,\n oklch(from var(--background-color) calc(0.59 - 0.41 * sign(l - 0.5)) 0 0)\n );\n font-size: 0.8125rem;\n line-height: 1.4;\n filter: drop-shadow(0 1px 2px rgb(0 0 0 / 16%));\n pointer-events: none;\n}\n\n@supports (color: contrast-color(red vs black, white)) {\n [popover] {\n color: var(--text-color, contrast-color(var(--background-color) vs #111827, #fff to AA));\n }\n}\n\ni {\n position: absolute;\n display: block;\n width: var(--arrow-size);\n height: var(--arrow-size);\n background: var(--background-color);\n transform: rotate(45deg);\n}\n","import { html, nothing, unsafeCSS, type PropertyValues } from 'lit';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { property } from 'lit/decorators.js';\nimport type { Placement } from '@floating-ui/dom';\nimport { PopoverController } from '../../shared/controllers/popover.js';\nimport { uniqueId } from '../../registry.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './tooltip.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * @summary A tooltip that displays contextual text on hover or focus.\n * @customElement l-tooltip\n *\n * @slot - Tooltip content (text or rich HTML).\n *\n * @csspart body - The tooltip popover container.\n * @csspart arrow - The directional arrow element.\n *\n * @cssproperty --background-color - Background color. Default: dark in light mode, light in dark mode.\n * @cssproperty --text-color - Text color. If unset, auto-derived from `--background-color` luminance.\n * @cssproperty --border-radius - Border radius. Default `4px`.\n * @cssproperty --max-width - Maximum width. Default `180px`.\n * @cssproperty --arrow-size - Arrow size. Default `6px`.\n * @cssproperty --show-duration - Show animation duration. Default `150ms`.\n * @cssproperty --hide-duration - Hide animation duration. Default `150ms`.\n */\nexport class Tooltip extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n private _tooltipId = uniqueId('tooltip');\n\n private _floating = new PopoverController(this, {\n getTriggerElement: () => this._trigger,\n getFloatingElement: () => this._popover,\n getArrowElement: () => this._arrowEl,\n });\n\n /** The HTML id of the element triggering the tooltip. */\n @property()\n accessor for = '';\n\n /** The preferred placement of the tooltip. */\n @property()\n accessor placement: Placement = 'top';\n\n /** The distance in pixels from the target element. */\n @property({ type: Number })\n accessor distance = 8;\n\n /** Whether or not the tooltip is visible. */\n @property({ type: Boolean, reflect: true })\n accessor open = false;\n\n /** Hide the directional arrow. */\n @property({ type: Boolean, reflect: true, attribute: 'without-arrow' })\n accessor withoutArrow = false;\n\n /** Space-separated list of trigger modes: `hover`, `focus`, `click`, `manual`. */\n @property()\n accessor trigger = 'hover focus';\n\n private _hasTrigger(type: string) {\n return this.trigger.split(' ').includes(type);\n }\n\n private get _trigger(): HTMLElement | null {\n return this.for ? (this.getRootNode() as Document | ShadowRoot).getElementById(this.for) : null;\n }\n\n private get _popover(): HTMLElement {\n return this.shadowRoot!.querySelector('[popover]')!;\n }\n\n private get _arrowEl(): HTMLElement | null {\n return this.withoutArrow ? null : this.shadowRoot!.querySelector('i');\n }\n\n private _getDuration(prop: '--show-duration' | '--hide-duration'): number {\n const parsed = parseFloat(getComputedStyle(this).getPropertyValue(prop));\n return Number.isNaN(parsed) ? 150 : parsed;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n requestAnimationFrame(() => this._addTriggerListeners());\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._removeTriggerListeners();\n }\n\n override updated(changed: PropertyValues<this>) {\n if (changed.has('open')) {\n void this._handleOpenChange();\n }\n if (changed.has('for')) {\n this._removeTriggerListeners(changed.get('for') as string);\n this._addTriggerListeners();\n }\n }\n\n show() {\n if (!this.open) this.open = true;\n }\n\n hide() {\n if (this.open) this.open = false;\n }\n\n toggle() {\n this.open = !this.open;\n }\n\n private async _handleOpenChange() {\n const popover = this._popover;\n if (!popover) return;\n\n const posOpts = { placement: this.placement, distance: this.distance };\n\n if (this.open) {\n popover.showPopover();\n await this._floating.updatePosition(posOpts);\n if (!this.open) return;\n await this._floating.animateShow(popover, this._getDuration('--show-duration'));\n this._floating.startPositioning(posOpts);\n this._trigger?.setAttribute('aria-describedby', this._tooltipId);\n } else {\n this._floating.stopPositioning();\n this._floating.cleanupSafePolygon();\n this._trigger?.removeAttribute('aria-describedby');\n await this._floating.animateHide(popover, this._getDuration('--hide-duration'));\n if (popover.matches(':popover-open')) popover.hidePopover();\n }\n }\n\n // --- Trigger event handlers ---\n\n private _onPointerEnter = () => {\n if (!this._hasTrigger('hover')) return;\n this._floating.cleanupSafePolygon();\n this.show();\n };\n\n private _onPointerLeave = (e: PointerEvent) => {\n if (!this._hasTrigger('hover') || !this.open) return;\n this._floating.handlePointerLeave(e, () => this.hide());\n };\n\n private _onFocusIn = () => {\n if (this._hasTrigger('focus')) this.show();\n };\n private _onFocusOut = () => {\n if (this._hasTrigger('focus')) this.hide();\n };\n private _onClick = () => {\n if (this._hasTrigger('click')) this.toggle();\n };\n\n private _onKeyDown = (e: KeyboardEvent) => {\n if (this.open && e.key === 'Escape') {\n e.stopPropagation();\n this.hide();\n }\n };\n\n private _addTriggerListeners() {\n this._floating.addTriggerListeners({\n onPointerEnter: this._onPointerEnter,\n onPointerLeave: this._onPointerLeave,\n onFocusIn: this._onFocusIn,\n onFocusOut: this._onFocusOut,\n onClick: this._onClick,\n onKeyDown: this._onKeyDown,\n });\n }\n\n private _removeTriggerListeners(forId?: string) {\n const trigger = forId\n ? (this.getRootNode() as Document | ShadowRoot).getElementById(forId)\n : undefined;\n this._floating.removeTriggerListeners(trigger);\n }\n\n override render() {\n return html`\n <div\n id=${this._tooltipId}\n popover=\"manual\"\n role=\"tooltip\"\n part=\"body\"\n >\n ${this.withoutArrow\n ? nothing\n : html`\n <i\n part=\"arrow\"\n role=\"presentation\"\n ></i>\n `}\n <slot></slot>\n </div>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Tooltip } from './tooltip.js';\nexport * from './tooltip.js';\ndefine('tooltip', Tooltip);\n",":host {\n --indent-size: 1rem;\n --indent-guide-width: 1px;\n --indent-guide-style: solid;\n --indent-guide-color: var(--l-color-border-interactive, light-dark(#d1d5db, #3a4048));\n --row-height: 1.75rem;\n --row-padding-inline: 0.25rem;\n --chevron-size: 1.125rem;\n --item-gap: 0.375rem;\n\n display: block;\n color: var(--l-color-text-primary, CanvasText);\n font-family: inherit;\n line-height: 1.5;\n}\n\n.tree {\n display: block;\n outline: none;\n}\n\n.tree:focus-visible {\n outline: 2px solid var(--l-focus-ring, Highlight);\n outline-offset: 2px;\n border-radius: 0.375rem;\n}\n","import { html, unsafeCSS, type PropertyValues } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { tagName } from '../../registry.js';\nimport type { TreeItem } from '../tree-item/tree-item.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './tree.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\nexport type TreeSelection = 'single' | 'multiple' | 'leaf' | 'none';\n\n/**\n * A hierarchical tree view composed of `<l-tree-item>` children.\n *\n * @slot - One or more `l-tree-item` elements.\n *\n * @csspart base - The root tree container.\n *\n * @cssproperty --indent-size - Horizontal indent per depth level. Default `1rem`.\n * @cssproperty --indent-guide-width - Thickness of the vertical guide line between a parent and its children. Default `1px`. Set to `0` to hide guides.\n * @cssproperty --indent-guide-style - Line style of the guide (`solid`, `dashed`, `dotted`, `double`…). Default `solid`.\n * @cssproperty --indent-guide-color - Color of the guide line.\n * @cssproperty --row-height - Minimum row height. Default `1.75rem`.\n * @cssproperty --row-padding-inline - Inner inline padding of the row; also drives the content slot left indent and the indent guide column. Default `0.25rem`.\n * @cssproperty --chevron-size - Size of the expand/collapse chevron box. Default `1.125rem`.\n * @cssproperty --item-gap - Horizontal gap between chevron, prefix, label and suffix on the row; also drives the content slot left indent. Default `0.375rem`.\n *\n * @event selection-change - Fired when the selected items change. Detail: `{ selection: TreeItem[] }`.\n */\nexport class Tree extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n private _mutationObserver?: MutationObserver;\n private _lastFocusedItem: TreeItem | null = null;\n\n /**\n * Selection behaviour:\n * - `single` (default): at most one item selected via `aria-selected`.\n * - `multiple`: any number of items selected. Checkboxes are rendered.\n * - `leaf`: only leaf items can be selected (single). Branches just toggle.\n * - `none`: purely navigable, no selection state.\n */\n @property({ reflect: true })\n accessor selection: TreeSelection = 'single';\n\n /**\n * When set with `selection=\"multiple\"`, parent and children selection are decoupled:\n * toggling a parent does NOT toggle its descendants and vice versa.\n * Without it, selection cascades both ways and branches may become indeterminate.\n */\n @property({ type: Boolean, reflect: true })\n accessor independent = false;\n\n override connectedCallback() {\n super.connectedCallback();\n this._mutationObserver = new MutationObserver(() => this._syncAll());\n this._mutationObserver.observe(this, { childList: true, subtree: true });\n this.addEventListener('l-tree-item-toggle', this._onItemToggle as EventListener);\n\n // Defer sync to let light DOM upgrade.\n queueMicrotask(() => this._syncAll());\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._mutationObserver?.disconnect();\n this.removeEventListener('l-tree-item-toggle', this._onItemToggle as EventListener);\n }\n\n override updated(changed: PropertyValues<this>) {\n if (changed.has('selection') || changed.has('independent')) {\n this._syncAll();\n }\n }\n\n // --- Public API ---\n\n /** Returns all items in document (flat) order, including nested ones. */\n getAllItems({ includeDisabled = true } = {}): TreeItem[] {\n const tag = tagName('tree-item');\n return Array.from(this.querySelectorAll<TreeItem>(tag)).filter(\n (item) => includeDisabled || !item.disabled,\n );\n }\n\n /** Returns currently selected items. */\n getSelection(): TreeItem[] {\n return this.getAllItems().filter((i) => i.selected);\n }\n\n /** Expands every item that has children. */\n expandAll() {\n for (const item of this.getAllItems()) {\n if (!item.isLeaf()) item.expanded = true;\n }\n }\n\n /** Collapses every item. */\n collapseAll() {\n for (const item of this.getAllItems()) {\n item.expanded = false;\n }\n }\n\n // --- Sync / ARIA / depth / checkbox visibility ---\n\n private _syncAll() {\n const showCheckbox = this.selection === 'multiple';\n const roots = this._rootItems();\n for (const root of roots) {\n this._syncSubtree(root, 0, showCheckbox);\n }\n this._updateBranchStates();\n // Ensure at least one item is tabbable.\n this._ensureTabStop();\n }\n\n private _syncSubtree(item: TreeItem, depth: number, showCheckbox: boolean) {\n item.depth = depth;\n item.showCheckbox = showCheckbox && this._canShowCheckboxOn(item);\n for (const child of item.getChildrenItems()) {\n this._syncSubtree(child, depth + 1, showCheckbox);\n }\n }\n\n private _canShowCheckboxOn(_item: TreeItem): boolean {\n if (this.selection !== 'multiple') return false;\n // In cascade mode, branches get a checkbox too so you can bulk-toggle children.\n // In leaf-only selection, hidden here because selection !== 'multiple'.\n return true;\n }\n\n private _rootItems(): TreeItem[] {\n const tag = tagName('tree-item').toUpperCase();\n return (Array.from(this.children) as TreeItem[]).filter((el) => el.tagName === tag);\n }\n\n private _ensureTabStop() {\n const items = this._visibleItems();\n if (items.length === 0) return;\n const hasTabStop = items.some((i) => i.tabIndex === 0);\n if (!hasTabStop) {\n for (const i of items) i.tabIndex = -1;\n items[0].tabIndex = 0;\n }\n }\n\n /** Items currently visible (parent chain all expanded). */\n private _visibleItems(): TreeItem[] {\n const out: TreeItem[] = [];\n const walk = (items: TreeItem[]) => {\n for (const i of items) {\n out.push(i);\n if (i.expanded) walk(i.getChildrenItems());\n }\n };\n walk(this._rootItems());\n return out;\n }\n\n // --- Selection handling ---\n\n private _onItemToggle = (event: CustomEvent<{ item: TreeItem; checked: boolean }>) => {\n const { item, checked } = event.detail;\n this._selectItem(item, checked);\n };\n\n private _handleRowActivate(item: TreeItem) {\n if (item.disabled) return;\n\n switch (this.selection) {\n case 'single':\n this._setSingleSelection(item);\n break;\n case 'leaf':\n if (item.isLeaf()) this._setSingleSelection(item);\n else item.toggle();\n break;\n case 'multiple':\n this._selectItem(item, !item.selected);\n break;\n case 'none':\n item.toggle();\n break;\n }\n }\n\n private _setSingleSelection(item: TreeItem) {\n for (const i of this.getAllItems()) {\n if (i !== item && i.selected) i.selected = false;\n }\n item.selected = true;\n this._emitSelectionChange();\n }\n\n private _selectItem(item: TreeItem, value: boolean) {\n if (item.disabled) return;\n item.selected = value;\n\n if (this.selection === 'multiple' && !this.independent) {\n // Cascade DOWN: toggling a branch toggles all descendants.\n this._setSubtreeSelection(item, value);\n }\n\n item.indeterminate = false;\n this._updateBranchStates();\n this._emitSelectionChange();\n }\n\n private _setSubtreeSelection(item: TreeItem, value: boolean) {\n for (const child of item.getChildrenItems()) {\n if (child.disabled) continue;\n child.selected = value;\n child.indeterminate = false;\n this._setSubtreeSelection(child, value);\n }\n }\n\n /** Propagate child state UP to parents (indeterminate / auto-checked). */\n private _updateBranchStates() {\n if (this.selection !== 'multiple' || this.independent) {\n // In independent or non-multiple modes, clear any indeterminate flags.\n for (const i of this.getAllItems()) i.indeterminate = false;\n return;\n }\n\n const recompute = (item: TreeItem): { all: boolean; any: boolean } => {\n const children = item.getChildrenItems({ includeDisabled: false });\n if (children.length === 0) {\n return { all: item.selected, any: item.selected };\n }\n\n let all = true;\n let any = false;\n for (const child of children) {\n const state = recompute(child);\n if (!state.all) all = false;\n if (state.any) any = true;\n }\n\n item.selected = all;\n item.indeterminate = !all && any;\n return { all: all && (item.getChildrenItems().length > 0 ? all : item.selected), any };\n };\n\n for (const root of this._rootItems()) recompute(root);\n }\n\n private _emitSelectionChange() {\n this.emit('selection-change', { detail: { selection: this.getSelection() } });\n }\n\n // --- Keyboard / focus ---\n\n private _onClick = (event: MouseEvent) => {\n const item = this._itemFromEvent(event);\n if (!item || item.disabled) return;\n\n const path = event.composedPath();\n const onCheckbox = path.some((n) => n instanceof HTMLInputElement && n.type === 'checkbox');\n if (onCheckbox) return; // handled via change event\n\n // Clicks on consumer-provided interactive elements (buttons, links, form\n // controls, menu items…) must not toggle the row — the consumer owns that\n // interaction. Works regardless of which slot the element was placed in.\n const INTERACTIVE_TAGS = new Set(['BUTTON', 'A', 'INPUT', 'SELECT', 'TEXTAREA']);\n const INTERACTIVE_ROLES = new Set(['button', 'link', 'menuitem', 'menuitemcheckbox']);\n const onInteractive = path.some((n) => {\n if (!(n instanceof HTMLElement) || n === item) return false;\n if (n.getAttribute?.('part') === 'expand-button') return false;\n if (n instanceof HTMLInputElement && n.type === 'checkbox') return false;\n if (INTERACTIVE_TAGS.has(n.tagName)) return true;\n const role = n.getAttribute?.('role');\n return role !== null && INTERACTIVE_ROLES.has(role);\n });\n if (onInteractive) return;\n\n const onExpand = path.some(\n (n) => n instanceof HTMLElement && n.getAttribute?.('part') === 'expand-button',\n );\n\n this._focusItem(item);\n\n if (onExpand) {\n item.toggle();\n return;\n }\n\n // Row click (label area): mode-dependent behaviour.\n switch (this.selection) {\n case 'single':\n this._setSingleSelection(item);\n if (!item.isLeaf()) item.toggle();\n break;\n case 'leaf':\n if (item.isLeaf()) this._setSingleSelection(item);\n else item.toggle();\n break;\n case 'multiple':\n // The whole row acts like a <label> for the checkbox: clicking anywhere\n // on it toggles selection. Use the chevron to expand/collapse branches.\n this._selectItem(item, !item.selected);\n break;\n case 'none':\n item.toggle();\n break;\n }\n };\n\n private _itemFromEvent(event: Event): TreeItem | null {\n const tag = tagName('tree-item');\n const path = event.composedPath();\n for (const node of path) {\n if (node instanceof HTMLElement && node.matches?.(tag)) {\n return node as TreeItem;\n }\n }\n return null;\n }\n\n private _focusItem(item: TreeItem) {\n const visible = this._visibleItems();\n for (const i of visible) i.tabIndex = -1;\n item.tabIndex = 0;\n item.focus();\n this._lastFocusedItem = item;\n }\n\n private _onFocusIn = (event: FocusEvent) => {\n const target = event.target;\n if (target instanceof HTMLElement) {\n const item = target.closest<TreeItem>(tagName('tree-item'));\n if (item) this._lastFocusedItem = item;\n }\n };\n\n private _onKeyDown = (event: KeyboardEvent) => {\n const current = this._lastFocusedItem ?? this._visibleItems()[0];\n if (!current) return;\n\n const visible = this._visibleItems();\n const index = visible.indexOf(current);\n\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n const next = visible[Math.min(index + 1, visible.length - 1)];\n if (next) this._focusItem(next);\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n const prev = visible[Math.max(index - 1, 0)];\n if (prev) this._focusItem(prev);\n break;\n }\n case 'ArrowRight': {\n event.preventDefault();\n if (!current.isLeaf() && !current.expanded) {\n current.expanded = true;\n } else if (current.expanded) {\n const first = current.getChildrenItems()[0];\n if (first) this._focusItem(first);\n }\n break;\n }\n case 'ArrowLeft': {\n event.preventDefault();\n if (current.expanded && !current.isLeaf()) {\n current.expanded = false;\n } else {\n const parent = current.parentElement?.closest(tagName('tree-item')) as TreeItem | null;\n if (parent) this._focusItem(parent);\n }\n break;\n }\n case 'Home': {\n event.preventDefault();\n if (visible[0]) this._focusItem(visible[0]);\n break;\n }\n case 'End': {\n event.preventDefault();\n const last = visible[visible.length - 1];\n if (last) this._focusItem(last);\n break;\n }\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this._handleRowActivate(current);\n break;\n }\n case '*': {\n event.preventDefault();\n // Expand all siblings of the current item.\n const siblings = (\n current.parentElement ? (Array.from(current.parentElement.children) as TreeItem[]) : []\n ).filter((el) => el.tagName === tagName('tree-item').toUpperCase());\n for (const sib of siblings) {\n if (!sib.isLeaf()) sib.expanded = true;\n }\n break;\n }\n }\n };\n\n override render() {\n return html`\n <div\n class=\"tree\"\n part=\"base\"\n role=\"tree\"\n aria-multiselectable=${this.selection === 'multiple' ? 'true' : 'false'}\n @click=${this._onClick}\n @keydown=${this._onKeyDown}\n @focusin=${this._onFocusIn}\n >\n <slot></slot>\n </div>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { Tree } from './tree.js';\nexport * from './tree.js';\ndefine('tree', Tree);\n",":host {\n display: block;\n color: var(--l-color-text-primary, CanvasText);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n:host([disabled]) {\n opacity: 0.4;\n}\n\n:host([disabled]) .item {\n cursor: not-allowed;\n}\n\n.item {\n display: flex;\n align-items: center;\n gap: var(--item-gap);\n min-block-size: var(--row-height);\n padding-inline: var(--row-padding-inline);\n padding-inline-start: calc(var(--indent-size) * var(--_depth, 0) + var(--row-padding-inline));\n border-radius: 0.375rem;\n cursor: pointer;\n user-select: none;\n transition:\n background-color 120ms ease,\n color 120ms ease;\n position: relative;\n}\n\n.item:focus-visible,\n:host(:focus-visible) .item {\n outline: 2px solid var(--l-focus-ring, Highlight);\n outline-offset: 1px;\n}\n\n@media (hover: hover) {\n :host(:not([disabled])) .item:hover {\n background-color: var(--l-color-bg-state-hover);\n }\n}\n\n:host([selected]:not([disabled])) .item {\n background-color: var(--l-color-bg-state-selected);\n}\n\n.expand {\n inline-size: var(--chevron-size);\n block-size: var(--chevron-size);\n display: grid;\n place-items: center;\n flex: none;\n color: var(--l-color-text-secondary, CanvasText);\n border-radius: 3px;\n cursor: pointer;\n}\n\n/* Hide the DEFAULT fallback chevron SVG on a leaf — slotted content\n (user-provided icon, avatar, etc.) remains visible. */\n:host(:not(:state(has-children)):not([lazy])) .expand > svg {\n display: none;\n}\n\n.expand svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n\n.checkbox {\n margin: 0;\n flex: none;\n accent-color: var(--l-color-bg-fill-brand, Highlight);\n cursor: pointer;\n inline-size: 1rem;\n block-size: 1rem;\n}\n\n/* Checkbox is only rendered when the parent tree enables multi-selection */\n:host(:not(:state(checkbox))) .checkbox {\n display: none;\n}\n\n.label {\n flex: 1;\n min-inline-size: 0;\n display: flex;\n align-items: center;\n gap: 0.375rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.label ::slotted(*) {\n min-inline-size: 0;\n}\n\n/* Wrapper around the content slot + children — anchor for the indent guide. */\n.branch {\n position: relative;\n}\n\n/* Content slot — block area between the row and the children.\n Aligned under the label text: same left offset as the row's label\n (depth indent + row padding + chevron + gap). Visible for leaves (no\n children) and for expanded branches; hidden when a branch is collapsed\n (mirrors the children visibility). */\n.content {\n display: block;\n padding-inline-start: calc(\n var(--indent-size) * var(--_depth, 0) + var(--row-padding-inline) + var(--chevron-size) +\n var(--item-gap)\n );\n padding-inline-end: var(--row-padding-inline);\n}\n\n:host(:state(has-children):not([expanded])) .content {\n display: none;\n}\n\n.children {\n display: none;\n}\n\n:host([expanded]) .children {\n display: block;\n}\n\n/* Vertical indent guide — spans the content + children block, starting\n right below the row so it never overlaps the chevron/avatar.\n The guide's visual centre sits exactly on the parent chevron's centre. */\n.branch::before {\n content: '';\n position: absolute;\n inset-block: 0;\n inset-inline-start: calc(\n var(--indent-size) * var(--_depth, 0) + var(--row-padding-inline) + (var(--chevron-size) / 2) -\n (var(--indent-guide-width) / 2)\n );\n inline-size: 0;\n border-inline-start: var(--indent-guide-width) var(--indent-guide-style) var(--indent-guide-color);\n pointer-events: none;\n}\n\n/* Only render the guide for open branches that have children. */\n:host(:not([expanded])) .branch::before,\n:host(:not(:state(has-children))) .branch::before {\n display: none;\n}\n\n.spinner {\n inline-size: 0.875rem;\n block-size: 0.875rem;\n border-radius: 50%;\n border: 2px solid var(--l-color-border, currentColor);\n border-block-start-color: transparent;\n animation: spin 700ms linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner {\n animation: none;\n }\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n","import { html, unsafeCSS, type PropertyValues } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { LuxenElement } from '../../shared/luxen-element.js';\nimport { tagName } from '../../registry.js';\nimport hostStyles from '../../shared/styles/host.styles.js';\nimport rawStyles from './tree-item.css?inline';\n\nconst styles = unsafeCSS(rawStyles);\n\n/**\n * A node inside `<l-tree>`. Nested `<l-tree-item>` children become sub-nodes.\n *\n * @slot - Label content (kept to a single row).\n * @slot prefix - Leading content before the label (e.g. icon).\n * @slot suffix - Trailing content.\n * @slot expand-icon - Icon shown when the item is collapsed.\n * @slot collapse-icon - Icon shown when the item is expanded.\n * @slot content - Block content that belongs to the item but not to its header row (e.g. comment body, action bar). Hidden when a branch is collapsed.\n *\n * @csspart base - The item row.\n * @csspart expand-button - The chevron toggle area.\n * @csspart checkbox - The native checkbox input.\n * @csspart label - The label container.\n * @csspart branch - Wrapper around the content and children slots; carries the indent guide.\n * @csspart content - The content slot wrapper (block area between the row and the children).\n * @csspart children - The nested items container.\n *\n * @cssproperty [--_depth] - Internal depth index driving indentation. Set by `<l-tree>`.\n *\n * Layout tokens (`--chevron-size`, `--row-height`, `--row-padding-inline`, `--item-gap`) live on `<l-tree>` and cascade down — see its CSS custom properties.\n *\n * @event expand - Fired when the item is expanded.\n * @event collapse - Fired when the item is collapsed.\n * @event lazy-load - Fired when a lazy item is expanded for the first time. Consumers should append children and set `lazy=false`.\n */\nexport class TreeItem extends LuxenElement {\n static override styles = [hostStyles, styles];\n\n private _internals = this.attachInternals();\n private _childObserver?: MutationObserver;\n\n /** Whether the item is expanded. */\n @property({ type: Boolean, reflect: true })\n accessor expanded = false;\n\n /** Whether the item is selected. */\n @property({ type: Boolean, reflect: true })\n accessor selected = false;\n\n /** Whether the checkbox is indeterminate (some descendants selected). */\n @property({ type: Boolean, reflect: true })\n accessor indeterminate = false;\n\n /** Whether the item is disabled. */\n @property({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n /** Marks this item as having children that will be loaded on first expand. */\n @property({ type: Boolean, reflect: true })\n accessor lazy = false;\n\n /** Whether the item is currently loading (shows a spinner). */\n @property({ type: Boolean, reflect: true })\n accessor loading = false;\n\n /** Set by `<l-tree>`: whether a checkbox is shown. */\n set showCheckbox(value: boolean) {\n this._showCheckbox = value;\n this._setState('checkbox', value);\n }\n get showCheckbox(): boolean {\n return this._showCheckbox;\n }\n private _showCheckbox = false;\n\n /** Set by `<l-tree>`: depth of the item in the tree (0 = root). */\n set depth(value: number) {\n this._depth = value;\n this.style.setProperty('--_depth', String(value));\n }\n get depth(): number {\n return this._depth;\n }\n private _depth = 0;\n\n /** Whether this item has nested tree-item children. */\n get hasChildren(): boolean {\n return this._hasChildren;\n }\n private _hasChildren = false;\n\n /** Returns the child `<l-tree-item>` elements directly under this one. */\n getChildrenItems({ includeDisabled = true } = {}): TreeItem[] {\n const childTag = tagName('tree-item').toUpperCase();\n return (Array.from(this.children) as TreeItem[]).filter(\n (el) => el.tagName === childTag && (includeDisabled || !el.disabled),\n );\n }\n\n /** Returns true if this item has no expandable children. */\n isLeaf(): boolean {\n return !this.lazy && this.getChildrenItems().length === 0;\n }\n\n /** Returns the text label of this item. */\n getTextLabel(): string {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>('slot:not([name])');\n if (!slot) return (this.textContent ?? '').trim();\n return slot\n .assignedNodes({ flatten: true })\n .map((n) => n.textContent ?? '')\n .join('')\n .trim();\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this._internals.role = 'treeitem';\n this._childObserver = new MutationObserver(() => this._syncChildren());\n this._childObserver.observe(this, { childList: true });\n this._syncChildren();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._childObserver?.disconnect();\n }\n\n override updated(changed: PropertyValues<this>) {\n if (changed.has('expanded')) {\n this._internals.ariaExpanded = this.isLeaf() ? null : String(this.expanded);\n this.emit(this.expanded ? 'expand' : 'collapse');\n }\n\n if (changed.has('selected')) {\n this._internals.ariaSelected = String(this.selected);\n }\n\n if (changed.has('disabled')) {\n this._internals.ariaDisabled = this.disabled ? 'true' : null;\n }\n }\n\n private _setState(name: string, on: boolean) {\n if (!this._internals.states) return;\n if (on) this._internals.states.add(name);\n else this._internals.states.delete(name);\n }\n\n private _syncChildren() {\n // Auto-slot nested tree-items into the `children` slot so they render in the group container,\n // while label text/elements remain in the default slot.\n const childTag = tagName('tree-item').toUpperCase();\n let count = 0;\n for (const child of Array.from(this.children) as HTMLElement[]) {\n if (child.tagName === childTag) {\n count++;\n if (child.slot !== 'children') child.slot = 'children';\n }\n }\n this._hasChildren = count > 0;\n this._setState('has-children', this._hasChildren);\n if (!this._hasChildren && !this.lazy && this.expanded) {\n this.expanded = false;\n }\n this._internals.ariaExpanded = this.isLeaf() ? null : String(this.expanded);\n }\n\n /** Toggle expand state. Emits `lazy-load` the first time a lazy item opens. */\n toggle() {\n if (this.isLeaf() && !this.lazy) return;\n const next = !this.expanded;\n if (next && this.lazy) {\n this.emit('lazy-load');\n }\n this.expanded = next;\n }\n\n private _onCheckboxChange = (event: Event) => {\n event.stopPropagation();\n const input = event.target as HTMLInputElement;\n this.dispatchEvent(\n new CustomEvent('l-tree-item-toggle', {\n bubbles: true,\n composed: true,\n detail: { item: this, checked: input.checked },\n }),\n );\n };\n\n override render() {\n return html`\n <div\n class=\"item\"\n part=\"base\"\n >\n <span\n class=\"expand\"\n part=\"expand-button\"\n aria-hidden=\"true\"\n >\n ${this.loading\n ? html`<span\n class=\"spinner\"\n role=\"status\"\n ></span>`\n : this.expanded || this.isLeaf()\n ? html`<slot name=\"collapse-icon\">\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3.5 6l4.5 5 4.5-5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </slot>`\n : html`<slot name=\"expand-icon\">\n <svg\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M6 3.5l5 4.5-5 4.5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </slot>`}\n </span>\n\n <input\n class=\"checkbox\"\n part=\"checkbox\"\n type=\"checkbox\"\n tabindex=\"-1\"\n .checked=${this.selected}\n .indeterminate=${this.indeterminate}\n ?disabled=${this.disabled}\n @click=${(e: Event) => e.stopPropagation()}\n @change=${this._onCheckboxChange}\n />\n\n <slot name=\"prefix\"></slot>\n <span\n class=\"label\"\n part=\"label\"\n ><slot></slot\n ></span>\n <slot name=\"suffix\"></slot>\n </div>\n\n <div\n class=\"branch\"\n part=\"branch\"\n >\n <div\n class=\"content\"\n part=\"content\"\n >\n <slot name=\"content\"></slot>\n </div>\n <div\n class=\"children\"\n part=\"children\"\n role=\"group\"\n >\n <slot name=\"children\"></slot>\n </div>\n </div>\n `;\n }\n}\n","import { define } from '../../define.js';\nimport { TreeItem } from './tree-item.js';\nexport * from './tree-item.js';\ndefine('tree-item', TreeItem);\n"],"x_google_ignoreList":[2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,26,27,28,44,45,46,47,55],"mappings":"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"}
|