@easemate/web-kit 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +105 -17
- package/build/decorators.cjs +7 -7
- package/build/decorators.cjs.map +1 -1
- package/build/decorators.js +7 -7
- package/build/decorators.js.map +1 -1
- package/build/elements.cjs +1902 -747
- package/build/elements.cjs.map +1 -1
- package/build/elements.d.cts +51 -2
- package/build/elements.d.ts +51 -2
- package/build/elements.js +1899 -746
- package/build/elements.js.map +1 -1
- package/build/{index-NzGpn7ai.d.cts → index-BKwMPyPy.d.cts} +3 -0
- package/build/{index-NzGpn7ai.d.ts → index-BKwMPyPy.d.ts} +3 -0
- package/build/index.cjs +1894 -706
- package/build/index.cjs.map +1 -1
- package/build/index.d.cts +4 -4
- package/build/index.d.ts +4 -4
- package/build/index.js +1889 -703
- package/build/index.js.map +1 -1
- package/build/{init-CaP7khA2.d.ts → init-C4Q5EEAr.d.ts} +1 -1
- package/build/{init-DmqoRv6_.d.cts → init-yLajTNMT.d.cts} +1 -1
- package/build/jsx.cjs.map +1 -1
- package/build/jsx.d.cts +21 -1
- package/build/jsx.d.ts +21 -1
- package/build/jsx.js.map +1 -1
- package/build/react.cjs +433 -334
- package/build/react.cjs.map +1 -1
- package/build/react.d.cts +4 -4
- package/build/react.d.ts +4 -4
- package/build/react.js +433 -334
- package/build/react.js.map +1 -1
- package/build/register.cjs +2279 -1128
- package/build/register.cjs.map +1 -1
- package/build/register.js +2260 -1109
- package/build/register.js.map +1 -1
- package/build/{registry-YCv1Ctoe.d.cts → registry-GVSJPmus.d.cts} +1 -0
- package/build/{registry-YCv1Ctoe.d.ts → registry-GVSJPmus.d.ts} +1 -0
- package/build/theme.cjs +34 -3
- package/build/theme.cjs.map +1 -1
- package/build/theme.d.cts +2 -2
- package/build/theme.d.ts +2 -2
- package/build/theme.js +34 -3
- package/build/theme.js.map +1 -1
- package/build/utils.cjs +3 -3
- package/build/utils.cjs.map +1 -1
- package/build/utils.js +3 -3
- package/build/utils.js.map +1 -1
- package/package.json +1 -1
package/build/elements.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/web-kit/web-kit/packages/core/src/elements/button/index.ts","../src/decorators/Component.ts","../src/decorators/Prop.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/checkbox/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/shared.ts","../src/decorators/Listen.ts","../src/decorators/Query.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/color/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/popover/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/animation/chevron.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/dropdown/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/utils/dismiss-controller.ts","../src/utils/outside-click.ts","../src/decorators/OutsideClick.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/input/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/color/picker.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/color/utils.ts","../src/utils/template-helpers.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/arrows-vertical.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/picker.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/field/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/animation/clear.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/animation/grid.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/animation/loading.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/animation/snap.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/anchor-add.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/anchor-remove.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/arrow-up.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/bezier.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/bezier-angle.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/bezier-distribute.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/bezier-length.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/bezier-mirror.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/check.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/circle-arrow-left.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/circle-arrow-right.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/code.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/dots.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/mention.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/minus.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/plus.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/icons/interface/settings.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/logo/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/monitor/index.ts","../src/decorators/Watch.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/monitor/fps.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/number/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/origin/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/panel/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/radio/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/radio/option.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/radio/input.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/slider/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/state/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/toggle/index.ts","/home/runner/work/web-kit/web-kit/packages/core/src/elements/tooltip/index.ts"],"sourcesContent":["import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\n@Component({\n tag: 'ease-button',\n autoSlot: true,\n shadowMode: 'open',\n styles: `\n :host {\n display: block;\n width: 100%;\n }\n\n :host([data-variant=\"headless\"]) {\n display: inline-flex;\n width: auto;\n }\n\n button {\n appearance: none;\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n font-size: var(--ease-button-font-size, var(--ease-font-size-sm, 12px));\n font-weight: 550;\n color: var(--ease-button-color, var(--color-blue-100));\n min-width: 0;\n padding: var(--ease-button-padding, 7px 8px);\n display: block;\n border-radius: var(--ease-button-radius, 5px);\n background-color: var(--ease-button-background, var(--color-gray-850));\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-button-line-height, 14px);\n box-shadow: inset 0 1px .25px 0 var(--color-white-4), 0 1px 2.5px 0 var(--color-black-8);\n transition: color 0.2s, background-color 0.2s, scale 0.2s, box-shadow 0.2s;\n cursor: pointer;\n min-width: var(--ease-button-min-width, 88px);\n white-space: nowrap;\n overflow: hidden;\n position: relative;\n text-overflow: ellipsis;\n text-align: center;\n\n &[data-pill=\"true\"] {\n border-radius: 999px;\n }\n\n &[data-full-width=\"true\"] {\n width: 100%;\n }\n\n &[data-block=\"icon\"] {\n --ease-icon-size: 16px;\n width: 28px;\n height: 28px;\n min-width: 28px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-gray-700);\n\n &:hover,\n &:focus-visible {\n color: var(--ease-button-hover-color, var(--color-blue-100));\n }\n\n &[data-variant=\"headless\"] {\n --ease-icon-size: 16px;\n width: auto;\n height: auto;\n padding: 0;\n min-width: 0;\n margin: -1px;\n }\n }\n \n &[data-block=\"small\"] {\n padding: 5px 8px;\n font-size: 12px;\n line-height: 14px;\n border-radius: 5px;\n }\n \n &[data-block=\"large\"] {\n padding: 9px 12px;\n font-size: 13px;\n line-height: 14px;\n border-radius: 8px;\n }\n\n &:hover,\n &:focus-visible {\n background-color: var(--ease-button-hover-background-color, var(--color-gray-825));\n color: var(--ease-button-hover-color, var(--color-blue-100));\n }\n\n &[data-variant=\"headless\"],\n &[data-variant=\"headless-muted\"] {\n background-color: transparent;\n box-shadow: none;\n min-width: 0;\n width: auto;\n padding: 0;\n transition: scale 0.2s, color 0.2s;\n\n &:hover,\n &:focus-visible {\n scale: 1.05;\n }\n\n &:active {\n scale: 0.95;\n }\n }\n\n &[data-variant=\"headless-muted\"] {\n color: var(--ease-button-color, var(--color-gray-600));\n\n &:hover,\n &:focus-visible {\n color: var(--ease-button-hover-color, var(--color-blue-100));\n }\n }\n\n &[data-variant=\"link\"] {\n background-color: transparent;\n box-shadow: none;\n\n &:hover,\n &:focus-visible {\n background-color: var(--ease-button-hover-background-color, var(--color-gray-875));\n }\n }\n\n &[data-variant=\"primary\"] {\n color: var(--color-blue-100);\n font-weight: 450;\n border-radius: 36px;\n \n background: radial-gradient(217.29% 45.98% at 99.13% 4.17%, rgba(21, 24, 220, 0.40) 0%, rgba(21, 24, 220, 0.00) 100%), radial-gradient(104.75% 41.7% at 3.06% 100%, rgba(233, 208, 254, 0.30) 0%, rgba(21, 24, 220, 0.00) 100%), radial-gradient(30.53% 47.92% at 46.51% -14.58%, rgba(233, 208, 254, 0.60) 0%, rgba(21, 24, 220, 0.00) 100%), radial-gradient(22.57% 35.42% at 46.29% 112.5%, rgba(233, 208, 254, 0.20) 0%, rgba(21, 24, 220, 0.00) 100%), rgba(255, 255, 255, 0.12);\n background-repeat: no-repeat;\n\n box-shadow: \n 0px 1px 0px 0px rgba(255, 255, 255, 0.2), \n inset 0px 0px 50px 0px rgba(255, 255, 255, 0.02), \n inset 0px 0px 0px 1px rgba(255, 255, 255, 0.02), \n inset 0px 0px 4px 0px rgba(69, 40, 255, 0.4);\n\n\n &::before {\n content: '';\n position: absolute;\n inset: 0;\n background-color: var(--color-white-2);\n box-shadow: inset 0px 0.5px 0.75px 0px var(--color-white-30);\n mix-blend-mode: overlay;\n pointer-events: none;\n z-index: 1;\n border-radius: inherit;\n }\n\n &:hover,\n &:focus-visible {\n filter: brightness(1.1);\n }\n }\n }\n `\n})\nexport class Button extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled: boolean = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor pill: boolean = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor fullWidth: boolean = false;\n\n @Prop<'submit' | 'reset' | 'button'>({ type: String, reflect: true, defaultValue: 'button' })\n accessor type!: 'submit' | 'reset' | 'button';\n\n @Prop<'icon' | 'small' | 'medium' | 'large'>({\n type: String,\n reflect: true,\n defaultValue: 'medium',\n onAttributeChange() {\n this.requestRender?.();\n }\n })\n accessor block: 'icon' | 'small' | 'medium' | 'large' = 'medium';\n\n @Prop<'default' | 'primary' | 'headless' | 'headless-muted' | 'link'>({\n type: String,\n reflect: true,\n defaultValue: 'default'\n })\n accessor variant!: 'default' | 'primary' | 'headless' | 'headless-muted' | 'link';\n\n render(): TemplateResult {\n return html`\n <button\n type=${this.type}\n ?disabled=${this.disabled}\n data-variant=${this.variant}\n data-full-width=${this.fullWidth}\n data-pill=${this.pill}\n data-block=\"${this.block}\"\n >\n <slot></slot>\n </button>\n `;\n }\n}\n","import { html, render, type TemplateResult } from 'lit-html';\n\ntype Constructor<T extends HTMLElement> = new (...args: unknown[]) => T;\n\ninterface LifecycleElement {\n connectedCallback?(): void;\n disconnectedCallback?(): void;\n attributeChangedCallback?(name: string, oldValue: string | null, newValue: string | null): void;\n}\n\ntype RenderableElement = HTMLElement & {\n render?(): TemplateResult | null | undefined;\n afterRender?(): void;\n wrapRender?(commit: () => void, context: RenderContext): void;\n onAttributeChange?(name: string, oldValue: string | null, newValue: string | null): void;\n requestRender?(): void;\n renderRoot?: ShadowRoot | HTMLElement;\n};\n\ntype TemplateValue<TElement extends RenderableElement> =\n | TemplateResult\n | null\n | undefined\n | ((this: TElement, host: TElement) => TemplateResult | null | undefined);\n\ninterface ComponentOptions<TElement extends RenderableElement = RenderableElement> {\n tag: string;\n template?: TemplateValue<TElement>;\n styles?: string;\n styleUrls?: string[];\n observedAttributes?: string[];\n shadowMode?: ShadowRootMode;\n autoSlot?: boolean;\n}\n\n// Exporting RenderContext\nexport interface RenderContext {\n fragment: DocumentFragment;\n root: ShadowRoot | HTMLElement;\n}\n\nconst styleCache = new Map<string, Promise<string>>();\n\nconst normalizeTemplate = <TElement extends RenderableElement>(\n template?: TemplateValue<TElement>\n): ((this: TElement, host: TElement) => TemplateResult | null | undefined) => {\n if (typeof template === 'function') {\n return template as (this: TElement, host: TElement) => TemplateResult | null | undefined;\n }\n\n if (template && typeof template === 'object' && '_$litTemplate$' in template) {\n return function (this: TElement): TemplateResult | null | undefined {\n return template as TemplateResult;\n };\n }\n\n return function (this: TElement): TemplateResult | null | undefined {\n return null;\n };\n};\n\nconst fetchStyles = async (urls: readonly string[]): Promise<string[]> =>\n Promise.all(\n urls.map((url) => {\n const cached = styleCache.get(url);\n if (cached) {\n return cached;\n }\n\n const request = fetch(url)\n .then((response) => (response.ok ? response.text() : ''))\n .catch(() => '');\n\n styleCache.set(url, request);\n return request;\n })\n );\n\nexport const Component =\n <TElement extends RenderableElement = RenderableElement>(options: ComponentOptions<TElement>) =>\n <TBase extends Constructor<TElement> & { observedAttributes?: string[] }>(\n Base: TBase,\n _context: ClassDecoratorContext\n ): TBase => {\n const {\n tag,\n template,\n styles = '',\n styleUrls = [],\n observedAttributes = [],\n shadowMode = 'open',\n autoSlot = true\n } = options;\n\n if (!tag) {\n throw new Error('@Component requires a \"tag\" option.');\n }\n\n const templateFn = normalizeTemplate<TElement>(template);\n\n class Decorated extends (Base as unknown as Constructor<RenderableElement>) {\n static get observedAttributes(): string[] {\n const parent =\n 'observedAttributes' in Base && Array.isArray(Base.observedAttributes)\n ? (Base.observedAttributes as string[])\n : [];\n const own = Array.isArray(observedAttributes) ? observedAttributes : [];\n return Array.from(new Set([...parent, ...own]));\n }\n\n #shadow: ShadowRoot;\n #styles = styles;\n #styleUrls = [...styleUrls];\n #renderScheduled = false;\n\n constructor(...args: unknown[]) {\n super(...args);\n this.#shadow = this.attachShadow({ mode: shadowMode });\n this.renderRoot = this.#shadow;\n }\n\n get shadow(): HTMLElement | ShadowRoot | undefined {\n return this.renderRoot;\n }\n\n connectedCallback(): void {\n (Base.prototype as LifecycleElement).connectedCallback?.call(this);\n\n void this.#loadStyles().finally(() => {\n this.requestRender();\n });\n }\n\n disconnectedCallback(): void {\n (Base.prototype as LifecycleElement).disconnectedCallback?.call(this);\n this.#renderScheduled = false;\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n (Base.prototype as LifecycleElement).attributeChangedCallback?.call(this, name, oldValue, newValue);\n\n if (oldValue !== newValue) {\n this.onAttributeChange?.(name, oldValue, newValue);\n }\n }\n\n requestRender(): void {\n if (this.#renderScheduled) {\n return;\n }\n\n this.#renderScheduled = true;\n\n requestAnimationFrame(() => {\n this.#renderScheduled = false;\n this.#render();\n });\n }\n\n async #loadStyles(): Promise<void> {\n if (!this.#styleUrls.length) {\n return;\n }\n\n const fetched = await fetchStyles(this.#styleUrls);\n const inlineStyles = this.#styles ? [this.#styles] : [];\n this.#styles = [...inlineStyles, ...fetched.filter(Boolean)].join('\\n');\n }\n\n #render(): void {\n const root = this.#shadow;\n\n let templateResult: TemplateResult | null | undefined;\n\n if (typeof this.render === 'function') {\n templateResult = this.render();\n } else {\n templateResult = templateFn.call(this as unknown as TElement, this as unknown as TElement);\n }\n\n const styleTemplate = this.#styles ? html`<style>${this.#styles}</style>` : null;\n const slotTemplate = autoSlot ? html`<slot></slot>` : null;\n\n const completeTemplate = html`\n ${styleTemplate}\n ${templateResult ?? null}\n ${slotTemplate}\n `;\n\n const commit = (): void => {\n render(completeTemplate, root);\n this.afterRender?.();\n };\n\n if (typeof this.wrapRender === 'function') {\n const fragment = document.createDocumentFragment();\n const tempDiv = document.createElement('div');\n\n render(completeTemplate, tempDiv);\n\n fragment.append(...tempDiv.childNodes);\n\n this.wrapRender(commit, { fragment, root });\n return;\n }\n\n commit();\n }\n }\n\n // SSR safety: only register in browser environments\n if (typeof customElements !== 'undefined' && !customElements.get(tag)) {\n customElements.define(tag, Decorated as unknown as CustomElementConstructor);\n }\n\n return Decorated as unknown as TBase;\n };\n","type RenderHost = HTMLElement & {\n requestRender?(): void;\n render?(): void;\n connectedCallback?(): void;\n disconnectedCallback?(...args: unknown[]): void;\n};\n\ntype PropTypeDescriptor =\n | BooleanConstructor\n | NumberConstructor\n | StringConstructor\n | ObjectConstructor\n | ArrayConstructor\n | 'boolean'\n | 'number'\n | 'string'\n | 'json';\n\ntype Formatter<TValue, THost extends RenderHost> = (this: THost, value: TValue) => string | null | undefined;\ntype Parser<TValue, THost extends RenderHost> = (this: THost, value: string | null) => TValue;\n\ninterface PropOptions<TValue, THost extends RenderHost> {\n attribute?: string;\n reflect?: boolean;\n type?: PropTypeDescriptor;\n parse?: Parser<TValue, THost>;\n format?: Formatter<TValue, THost>;\n defaultValue?: TValue | ((this: THost) => TValue);\n compare?: (previous: TValue, next: TValue) => boolean;\n onChange?: (this: THost, next: TValue, previous: TValue) => void;\n onAttributeChange?: (this: THost, next: TValue, previous: TValue) => void;\n}\n\ninterface AttributeObserverEntry {\n observer: MutationObserver;\n callbacks: Map<string, Set<(value: string | null) => void>>;\n}\n\nconst renderQueue = new WeakMap<RenderHost, boolean>();\nconst cleanupRegistry = new WeakMap<RenderHost, Set<() => void>>();\nconst observerRegistry = new WeakMap<RenderHost, AttributeObserverEntry>();\nconst internalMutations = new WeakMap<RenderHost, Set<string>>();\n\nconst scheduleRender = (instance: RenderHost): void => {\n if (typeof instance.requestRender === 'function') {\n instance.requestRender();\n return;\n }\n\n if (typeof instance.render !== 'function') {\n return;\n }\n\n if (renderQueue.get(instance)) {\n return;\n }\n\n renderQueue.set(instance, true);\n\n requestAnimationFrame(() => {\n renderQueue.delete(instance);\n instance.render?.();\n });\n};\n\nconst toKebabCase = (value: PropertyKey): string =>\n String(value)\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[_\\s]+/g, '-')\n .toLowerCase();\n\nconst registerCleanup = (instance: RenderHost, cleanup: () => void): void => {\n let callbacks = cleanupRegistry.get(instance);\n\n if (!callbacks) {\n callbacks = new Set();\n cleanupRegistry.set(instance, callbacks);\n\n const original = instance.disconnectedCallback;\n\n instance.disconnectedCallback = function (this: RenderHost, ...args: unknown[]) {\n const registered = cleanupRegistry.get(this);\n registered?.forEach((callback) => {\n try {\n callback();\n } catch (error) {\n console.error('[Prop] cleanup failed', error);\n }\n });\n cleanupRegistry.delete(this);\n\n if (typeof original === 'function') {\n return original.apply(this, args as []);\n }\n\n return undefined;\n } as typeof instance.disconnectedCallback;\n }\n\n callbacks.add(cleanup);\n};\n\nconst markInternalMutation = (host: RenderHost, attribute: string): void => {\n let attributes = internalMutations.get(host);\n\n if (!attributes) {\n attributes = new Set();\n internalMutations.set(host, attributes);\n }\n\n attributes.add(attribute);\n};\n\nconst isInternalMutation = (host: RenderHost, attribute: string): boolean => {\n const attributes = internalMutations.get(host);\n\n if (!attributes) {\n return false;\n }\n\n const hasAttribute = attributes.has(attribute);\n\n if (hasAttribute) {\n attributes.delete(attribute);\n if (attributes.size === 0) {\n internalMutations.delete(host);\n }\n }\n\n return hasAttribute;\n};\n\nconst observeAttribute = (host: RenderHost, attribute: string, handler: (value: string | null) => void): void => {\n let entry = observerRegistry.get(host);\n\n if (!entry) {\n const callbacks = new Map<string, Set<(value: string | null) => void>>();\n const observer = new MutationObserver((records) => {\n records.forEach((record) => {\n const attributeName = record.attributeName;\n\n if (!attributeName) {\n return;\n }\n\n if (isInternalMutation(host, attributeName)) {\n return;\n }\n\n const listeners = callbacks.get(attributeName);\n if (!listeners) {\n return;\n }\n\n const currentValue = (record.target as Element).getAttribute(attributeName);\n\n for (const listener of listeners) {\n listener(currentValue);\n }\n });\n });\n\n observer.observe(host, { attributes: true });\n\n entry = { observer, callbacks };\n observerRegistry.set(host, entry);\n\n registerCleanup(host, () => {\n observer.disconnect();\n observerRegistry.delete(host);\n });\n }\n\n let listeners = entry.callbacks.get(attribute);\n\n if (!listeners) {\n listeners = new Set();\n entry.callbacks.set(attribute, listeners);\n }\n\n listeners.add(handler);\n};\n\nconst updateAttribute = (host: RenderHost, attribute: string, value: string | null | undefined | boolean): void => {\n markInternalMutation(host, attribute);\n\n if (value === undefined || value === null || value === false) {\n host.removeAttribute(attribute);\n return;\n }\n\n if (value === true) {\n host.setAttribute(attribute, '');\n return;\n }\n\n host.setAttribute(attribute, String(value));\n};\n\nconst resolveType = (type: PropTypeDescriptor | undefined): 'boolean' | 'number' | 'json' | 'string' | null => {\n if (!type) {\n return null;\n }\n\n if (type === Boolean || type === 'boolean') {\n return 'boolean';\n }\n\n if (type === Number || type === 'number') {\n return 'number';\n }\n\n if (type === Object || type === Array || type === 'json') {\n return 'json';\n }\n\n return 'string';\n};\n\nconst typeParsers: Record<'boolean' | 'number' | 'json' | 'string', Parser<unknown, RenderHost>> = {\n boolean(value: string | null): boolean {\n return value !== null;\n },\n number(value: string | null): number | null {\n if (value === null || value === '') {\n return null;\n }\n\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n },\n json(value: string | null): unknown {\n if (!value) {\n return null;\n }\n\n try {\n return JSON.parse(value);\n } catch (error) {\n console.warn('[Prop] failed to parse JSON attribute', error);\n return null;\n }\n },\n string(value: string | null): string | null {\n return value;\n }\n};\n\nconst typeFormatters: Record<'boolean' | 'number' | 'json' | 'string', Formatter<unknown, RenderHost>> = {\n boolean(value: unknown): string | null {\n return value ? '' : null;\n },\n number(value: unknown): string | null {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n return String(value);\n },\n json(value: unknown): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return null;\n }\n },\n string(value: unknown): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n return String(value);\n }\n};\n\nconst defaultCompare = <TValue>(previous: TValue, next: TValue): boolean => previous === next;\n\nexport function Prop<TValue, THost extends RenderHost = RenderHost>(options: PropOptions<TValue, THost> = {}) {\n const {\n attribute,\n reflect = true,\n type,\n parse,\n format,\n defaultValue,\n compare = defaultCompare,\n onChange,\n onAttributeChange\n } = options;\n\n const resolvedType = resolveType(type);\n\n const parseValue: Parser<TValue, THost> = parse\n ? parse\n : function (this: THost, value) {\n if (!resolvedType) {\n return value as unknown as TValue;\n }\n return typeParsers[resolvedType].call(this, value) as TValue;\n };\n\n const formatValue: Formatter<TValue, THost> = format\n ? format\n : function (this: THost, value) {\n if (!resolvedType) {\n return (value as unknown as string | null | undefined) ?? null;\n }\n return typeFormatters[resolvedType].call(this, value as unknown) as string | null;\n };\n\n return (\n accessor: ClassAccessorDecoratorTarget<THost, TValue>,\n context: ClassAccessorDecoratorContext<THost, TValue>\n ): ClassAccessorDecoratorResult<THost, TValue> => {\n if (context.kind !== 'accessor') {\n throw new Error('@Prop requires the \"accessor\" keyword on the property.');\n }\n\n const attributeName = attribute ?? toKebabCase(context.name);\n\n context.addInitializer(function (this: THost) {\n if (!reflect) {\n return;\n }\n\n observeAttribute(this, attributeName, (rawValue) => {\n if (isInternalMutation(this, attributeName)) {\n return;\n }\n\n const parsed = parseValue.call(this, rawValue);\n const previous = accessor.get.call(this);\n\n if (compare(previous, parsed)) {\n return;\n }\n\n accessor.set.call(this, parsed);\n\n onAttributeChange?.call(this, parsed, previous);\n scheduleRender(this);\n });\n });\n\n return {\n get(this: THost): TValue {\n return accessor.get.call(this);\n },\n set(this: THost, value: TValue): void {\n const previous = accessor.get.call(this);\n\n if (compare(previous, value)) {\n return;\n }\n\n accessor.set.call(this, value);\n\n if (reflect) {\n const formatted = formatValue.call(this, value);\n updateAttribute(this, attributeName, formatted);\n }\n\n onChange?.call(this, value, previous);\n scheduleRender(this);\n },\n init(this: THost, initialValue: TValue): TValue {\n let value = initialValue;\n\n if (this.hasAttribute(attributeName)) {\n value = parseValue.call(this, this.getAttribute(attributeName));\n } else if (value === undefined && defaultValue !== undefined) {\n value =\n typeof defaultValue === 'function' ? (defaultValue as (this: THost) => TValue).call(this) : defaultValue;\n }\n\n if (reflect) {\n const formatted = formatValue.call(this, value);\n updateAttribute(this, attributeName, formatted);\n }\n\n return value;\n }\n };\n };\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-checkbox',\n styles: `\n .checkbox {\n display: table;\n border-radius: var(--ease-checkbox-radius, 5px);\n position: relative;\n\n svg {\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n pointer-events: none;\n fill: var(--ease-checkbox-check-color, var(--color-blue-100));\n transform: scale(1.01) translateZ(0);\n\n .tick {\n fill: none;\n stroke-width: 3px;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke: var(--ease-checkbox-check-color, var(--color-blue-100));\n transform-origin: 10.5px 16px;\n transform: scale(1) translateZ(0);\n }\n\n .dot {\n transform-origin: 10.5px 15.5px;\n transform: scale(1) translateZ(0);\n transform-box: fill-box;\n }\n\n .drop {\n transform-origin: 25px -1px;\n transform: scale(1) translateZ(0);\n opacity: 0;\n }\n }\n }\n\n [part=\"checkbox\"] {\n display: table;\n margin: 0;\n padding: 0;\n appearance: none;\n cursor: pointer;\n background: none;\n border: none;\n outline: none;\n }\n\n [part=\"control\"] {\n appearance: none;\n outline: none;\n border: none;\n background: none;\n display: block;\n cursor: pointer;\n margin: 0;\n padding: 0;\n border-radius: inherit;\n width: var(--ease-checkbox-size, 24px);\n height: var(--ease-checkbox-size, 24px);\n }\n\n [part=\"control\"] {\n box-shadow: inset 0 0 0 var(--ease-checkbox-border-width, 2px) var(--ease-checkbox-border-color, var(--color-gray-700));\n }\n\n .tick {\n stroke-dasharray: 16px 33px;\n stroke-dashoffset: 20.5px;\n }\n\n .dot {\n transform: translate(14px, -14px) scale(1) translateZ(0);\n opacity: 0;\n }\n\n [part=\"control\"]:checked {\n box-shadow: inset 0 0 0 var(--ease-checkbox-checked-fill-size, 12px) var(--ease-checkbox-checked-fill, var(--color-blue-800));\n }\n\n [part=\"control\"]:checked + svg .tick {\n stroke-dasharray: 16.5px 33px;\n stroke-dashoffset: 46.5px;\n }\n\n [part=\"control\"]:checked + svg .dot {\n transform: translate(0px, 0px) scale(1) translateZ(0);\n opacity: 1;\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-checked {\n animation: checkbox-border-fill 0.2s ease-out forwards, checkbox-morph 0.5s ease-out forwards;\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-checked + svg {\n .tick {\n animation: checkbox-tick 0.65s ease-out forwards;\n }\n\n .dot {\n animation: checkbox-dot-move 0.6s ease-out forwards;\n }\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-unchecked {\n animation: checkbox-border-default 0.4s ease-out forwards;\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-unchecked + svg {\n .tick {\n animation: checkbox-tick-default 0.2s ease-out forwards;\n }\n .dot {\n animation: checkbox-dot-hide 0.2s ease-out forwards;\n }\n }\n \n @keyframes checkbox-border-fill {\n 0% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-border-width, 2px) var(--ease-checkbox-border-color, var(--color-gray-700));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-checked-fill-size, 12px) var(--ease-checkbox-checked-fill, var(--color-blue-800));\n }\n }\n\n @keyframes checkbox-morph {\n 0%, 40% {\n border-radius: 5px 14px 5px 5px;\n }\n 100% {\n border-radius: 5px;\n }\n }\n\n @keyframes checkbox-tick {\n 0% {\n stroke-dasharray: 16px 33px;\n stroke-dashoffset: 20.5px;\n }\n 47% {\n stroke-dasharray: 14px 33px;\n stroke-dashoffset: 48px;\n }\n 100% {\n stroke-dasharray: 16.5px 33px;\n stroke-dashoffset: 46.5px;\n }\n }\n\n @keyframes checkbox-dot-move {\n 0%, 40% {\n transform: translate(14px, -14px) scale(1) translateZ(0);\n opacity: 0;\n }\n 100% {\n transform: translate(0px, 0px) scale(1) translateZ(0);\n opacity: 1;\n }\n }\n\n @keyframes checkbox-dot-hide {\n 0% {\n transform: translate(0px, 0px) scale(1) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translate(14px, -14px) scale(1) translateZ(0);\n opacity: 0;\n }\n }\n\n @keyframes checkbox-border-default {\n 0%,\n 40% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-checked-fill-size, 12px) var(--ease-checkbox-checked-fill, var(--color-blue-800));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-border-width, 2px) var(--ease-checkbox-border-color, var(--color-gray-700));\n }\n }\n\n @keyframes checkbox-tick-default {\n 0% {\n stroke-dasharray: 16.5px 33px;\n stroke-dashoffset: 46.5px;\n }\n 100% {\n stroke-dasharray: 16px 33px;\n stroke-dashoffset: 20.5px;\n }\n }\n `,\n template(this: Checkbox) {\n return html`\n <button\n part=\"checkbox\"\n type=\"button\"\n role=\"checkbox\"\n aria-checked=${this.checked}\n ?disabled=${this.disabled}\n >\n <div class=\"checkbox\">\n <input\n part=\"control\"\n name=${this.name}\n value=${this.value}\n ?checked=${this.checked}\n ?disabled=${this.disabled}\n type=\"checkbox\"\n />\n <svg viewBox=\"0 0 24 24\" filter=\"url(#${this.filterId})\">\n <path class=\"tick\" d=\"M4.5 10L10.5 16L24.5 1\" />\n <circle class=\"dot\" cx=\"10.5\" cy=\"15.5\" r=\"1.5\" />\n <circle class=\"drop\" cx=\"25\" cy=\"-1\" r=\"2\" />\n </svg>\n </div>\n\n <svg style=\"display: none;\">\n <defs>\n <filter id=\"${this.filterId}\">\n <feGaussianBlur\n in=\"SourceGraphic\"\n stdDeviation=\"1.25\"\n result=\"blur\"\n />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9\"\n result=\"gooey\"\n />\n <feBlend in=\"SourceGraphic\" in2=\"gooey\" />\n </filter>\n </defs>\n </svg>\n </button>\n `;\n }\n})\nexport class Checkbox extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor checked!: boolean;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLButtonElement>('button')\n accessor control!: HTMLButtonElement | null;\n\n private _prevChecked?: boolean;\n\n filterId: string = `goo-${crypto.randomUUID()}`;\n\n connectedCallback(): void {\n this._prevChecked = this.checked;\n }\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const changed = typeof this._prevChecked !== 'undefined' && this.checked !== this._prevChecked;\n\n if (changed) {\n this._triggerAnimation(this.checked);\n this._prevChecked = this.checked;\n }\n\n const control = this.control;\n control.setAttribute('aria-checked', this.checked ? 'true' : 'false');\n control.disabled = Boolean(this.disabled);\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n private _triggerAnimation(checked: boolean): void {\n const control = this.shadowRoot?.querySelector('[part=\"control\"]');\n const svg = this.shadowRoot?.querySelector('svg');\n if (!control || !svg) {\n return;\n }\n\n control.classList.remove('anim-checked', 'anim-unchecked');\n svg.classList.remove('anim-checked', 'anim-unchecked');\n\n const animClass = checked ? 'anim-checked' : 'anim-unchecked';\n const duration = checked ? 650 : 400;\n\n control.classList.add(animClass);\n svg.classList.add(animClass);\n\n setTimeout(() => {\n control.classList.remove(animClass);\n svg.classList.remove(animClass);\n }, duration);\n }\n\n @Listen<Checkbox, MouseEvent, HTMLButtonElement>('click', {\n selector: 'button'\n })\n handleClick(event: MouseEvent): void {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n\n return;\n }\n\n this.checked = !this.checked;\n\n dispatchControlEvent(this, 'checkbox', { value: this.checked, event });\n }\n}\n","/**\n * Standard control event detail interface for Leva/lil-gui style state aggregation.\n * All control components should dispatch events with this shape.\n */\nexport interface ControlEventDetail<TValue = unknown> {\n /** The control's name/identifier for state aggregation */\n name?: string;\n /** The current value of the control */\n value: TValue;\n /** The original DOM event that triggered this change */\n event: Event;\n}\n\n/** The standard event type for control value changes */\nexport const CONTROL_CHANGE_EVENT = 'control-change';\n\n/**\n * Dispatch a control change event with standard shape.\n * Events bubble and are composed (cross shadow DOM boundaries).\n *\n * @param host - The element dispatching the event\n * @param type - Event type (prefer CONTROL_CHANGE_EVENT for standard controls)\n * @param detail - Event detail with value and optional name\n *\n * @example\n * ```ts\n * dispatchControlEvent(this, CONTROL_CHANGE_EVENT, {\n * name: this.name,\n * value: this.value,\n * event: e\n * });\n * ```\n */\nexport const dispatchControlEvent = <THost extends HTMLElement, TValue>(\n host: THost,\n type: string,\n detail: ControlEventDetail<TValue>\n): void => {\n host.dispatchEvent(\n new CustomEvent<ControlEventDetail<TValue>>(type, {\n detail,\n bubbles: true,\n composed: true\n })\n );\n};\n\nexport const setBooleanAttribute = (element: Element | null | undefined, name: string, value: boolean): void => {\n if (!element) {\n return;\n }\n\n if (value) {\n element.setAttribute(name, '');\n } else {\n element.removeAttribute(name);\n }\n};\n\nexport const coerceNumber = (value: string): number | null => {\n if (value === '') {\n return null;\n }\n\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n};\n\ntype ControlElement = Element & {\n value?: unknown;\n checked?: unknown;\n};\n\nexport const readControlValue = (element: ControlElement): string | null => {\n if (typeof element.value === 'string' || typeof element.value === 'number') {\n return String(element.value);\n }\n\n if (typeof element.checked === 'boolean') {\n return element.checked ? 'true' : 'false';\n }\n\n if ('getAttribute' in element) {\n const attr = (element as Element).getAttribute('value');\n if (attr !== null) {\n return attr;\n }\n }\n\n return element.textContent?.trim() ?? null;\n};\n","type ListenHost = HTMLElement & {\n renderRoot?: ShadowRoot | DocumentFragment | HTMLElement;\n};\n\ntype LifecycleHookName = 'connectedCallback' | 'disconnectedCallback';\n\ntype LifecycleCallback<THost extends ListenHost> = (this: THost) => void;\n\ntype ListenTargetResolver<THost extends ListenHost> =\n | 'document'\n | 'window'\n | 'shadow'\n | 'root'\n | 'light'\n | EventTarget\n | ((host: THost) => EventTarget | null | undefined);\n\ntype Predicate<TEvent extends Event, TElement extends Element> = (event: TEvent, matched: TElement | null) => boolean;\n\ninterface ListenOptions<THost extends ListenHost, TElement extends Element, TEvent extends Event> {\n selector?: string;\n target?: ListenTargetResolver<THost>;\n prevent?: boolean;\n stop?: boolean;\n stopImmediate?: boolean;\n once?: boolean;\n passive?: boolean;\n capture?: boolean;\n when?: Predicate<TEvent, TElement>;\n}\n\ntype Cleanup = () => void;\n\nconst lifecycleHooks: Record<LifecycleHookName, WeakMap<ListenHost, Set<LifecycleCallback<ListenHost>>>> = {\n connectedCallback: new WeakMap(),\n disconnectedCallback: new WeakMap()\n};\n\nconst cleanupRegistry = new WeakMap<ListenHost, Set<Cleanup>>();\n\nconst addLifecycleHook = <THost extends ListenHost>(\n instance: THost,\n hookName: LifecycleHookName,\n handler: LifecycleCallback<THost>\n): void => {\n const store = lifecycleHooks[hookName] as WeakMap<THost, Set<LifecycleCallback<THost>>>;\n let callbacks = store.get(instance);\n\n if (!callbacks) {\n callbacks = new Set<LifecycleCallback<THost>>();\n store.set(instance, callbacks);\n\n const original = (instance as unknown as Record<LifecycleHookName, unknown>)[hookName];\n\n (instance as unknown as Record<LifecycleHookName, unknown>)[hookName] = function (...args: unknown[]) {\n callbacks?.forEach((callback) => {\n callback.apply(this as THost);\n });\n\n if (typeof original === 'function') {\n return (original as (...params: unknown[]) => unknown).apply(this, args);\n }\n\n return undefined;\n };\n }\n\n callbacks.add(handler);\n};\n\nconst registerCleanup = <THost extends ListenHost>(instance: THost, cleanup: Cleanup): void => {\n let callbacks = cleanupRegistry.get(instance);\n\n if (!callbacks) {\n callbacks = new Set();\n cleanupRegistry.set(instance, callbacks);\n\n addLifecycleHook(instance, 'disconnectedCallback', function (this: THost) {\n const registered = cleanupRegistry.get(this);\n registered?.forEach((fn) => {\n try {\n fn();\n } catch (error) {\n console.error('[Listen] cleanup failed', error);\n }\n });\n cleanupRegistry.delete(this);\n });\n }\n\n callbacks.add(cleanup);\n};\n\nconst resolveTarget = <THost extends ListenHost>(\n host: THost,\n target: ListenTargetResolver<THost> | undefined\n): EventTarget | null => {\n if (typeof target === 'function') {\n return target(host) ?? null;\n }\n\n if (target instanceof EventTarget) {\n return target;\n }\n\n switch (target) {\n case 'document':\n return document;\n case 'window':\n return window;\n case 'light':\n return host;\n default:\n return host.renderRoot ?? host.shadowRoot ?? host;\n }\n};\n\nconst normalizeOptions = <THost extends ListenHost, TElement extends Element, TEvent extends Event>(\n selectorOrOptions: string | ListenOptions<THost, TElement, TEvent> | undefined\n): ListenOptions<THost, TElement, TEvent> => {\n if (typeof selectorOrOptions === 'string') {\n return { selector: selectorOrOptions };\n }\n\n return selectorOrOptions ?? {};\n};\n\nconst buildOptions = <THost extends ListenHost, TElement extends Element, TEvent extends Event>(\n options: ListenOptions<THost, TElement, TEvent>\n) => {\n return {\n selector: options.selector ?? null,\n target: options.target ?? 'shadow',\n prevent: options.prevent ?? false,\n stop: options.stop ?? false,\n stopImmediate: options.stopImmediate ?? false,\n once: options.once ?? false,\n passive: options.passive,\n capture: options.capture ?? false,\n when: options.when ?? null\n };\n};\n\nexport function Listen<THost extends ListenHost, TEvent extends Event = Event, TElement extends Element = Element>(\n eventName: keyof HTMLElementEventMap | string,\n selectorOrOptions?: string | ListenOptions<THost, TElement, TEvent>\n) {\n if (!eventName) {\n throw new Error('@Listen requires an event name.');\n }\n\n const listenConfig = buildOptions(normalizeOptions(selectorOrOptions));\n\n return (\n originalMethod: (this: THost, event: TEvent, matched?: TElement | null) => unknown,\n context: ClassMethodDecoratorContext<THost, typeof originalMethod>\n ): void => {\n context.addInitializer(function (this: THost) {\n let attached = false;\n\n const attach = () => {\n if (attached) {\n return;\n }\n\n const target = resolveTarget(this, listenConfig.target);\n\n if (!target || typeof (target as EventTarget).addEventListener !== 'function') {\n console.warn(`@Listen unable to resolve target for ${String(eventName)}`);\n return;\n }\n\n const eventOptions: AddEventListenerOptions = {\n capture: listenConfig.capture,\n once: listenConfig.once,\n passive: listenConfig.passive !== undefined ? listenConfig.passive : !listenConfig.prevent\n };\n\n const handler = (event: Event): void => {\n const typedEvent = event as TEvent;\n\n if (listenConfig.prevent) {\n typedEvent.preventDefault();\n }\n\n if (listenConfig.stopImmediate) {\n typedEvent.stopImmediatePropagation();\n } else if (listenConfig.stop) {\n typedEvent.stopPropagation();\n }\n\n let matched: TElement | null = null;\n\n if (listenConfig.selector) {\n const path = typedEvent.composedPath();\n matched =\n path.find(\n (node): node is TElement => node instanceof Element && node.matches(listenConfig.selector as string)\n ) ?? null;\n\n if (!matched) {\n return;\n }\n }\n\n if (listenConfig.when && !listenConfig.when(typedEvent, matched)) {\n return;\n }\n\n if (listenConfig.selector) {\n void originalMethod.call(this, typedEvent, matched);\n } else {\n const targetNode = (\n typedEvent.target instanceof Element ? (typedEvent.target as TElement) : null\n ) as TElement | null;\n void originalMethod.call(this, typedEvent, targetNode);\n }\n };\n\n target.addEventListener(eventName as string, handler, eventOptions);\n attached = true;\n\n registerCleanup(this, () => {\n target.removeEventListener(eventName as string, handler, eventOptions);\n attached = false;\n });\n };\n\n // IMPORTANT:\n // Many components are created inside templates/shadow DOM. At construction time they are often not connected yet,\n // and patching instance lifecycle callbacks is not reliably invoked by the platform.\n // Attach the listener ASAP (microtask) so it works for nested components as well.\n queueMicrotask(attach);\n\n // Best-effort attach on connect too (idempotent).\n addLifecycleHook(this, 'connectedCallback', attach);\n });\n };\n}\n","type QueryRoot = 'shadow' | 'light' | 'document';\n\ntype QueryHost = HTMLElement & {\n renderRoot?: ShadowRoot | DocumentFragment | HTMLElement;\n};\n\ntype QueryFallback<TResult, THost extends QueryHost> = TResult | ((host: THost) => TResult);\n\ninterface BaseQueryOptions<TResult, THost extends QueryHost> {\n from?: QueryRoot;\n fallback?: QueryFallback<TResult, THost>;\n}\n\ninterface QueryAllOptions<TElement extends Element, THost extends QueryHost>\n extends BaseQueryOptions<TElement[], THost> {\n all: true;\n closest?: false;\n}\n\ninterface QueryClosestOptions<THost extends QueryHost> extends BaseQueryOptions<Element | null, THost> {\n closest: true;\n all?: false;\n}\n\ninterface QuerySingleOptions<TElement extends Element, THost extends QueryHost>\n extends BaseQueryOptions<TElement | null, THost> {\n all?: false;\n closest?: false;\n}\n\ntype QueryOptions<TElement extends Element, THost extends QueryHost> =\n | QueryAllOptions<TElement, THost>\n | QueryClosestOptions<THost>\n | QuerySingleOptions<TElement, THost>;\n\ntype QueryReturnType<\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n> = TOptions extends QueryAllOptions<TElement, THost>\n ? TElement[]\n : TOptions extends QueryClosestOptions<THost>\n ? Element | null\n : TElement | null;\n\ntype QueryDecorator<\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n> = (\n target: ClassAccessorDecoratorTarget<THost, QueryReturnType<TElement, THost, TOptions>> | undefined,\n context:\n | ClassFieldDecoratorContext<THost, QueryReturnType<TElement, THost, TOptions>>\n | ClassAccessorDecoratorContext<THost, QueryReturnType<TElement, THost, TOptions>>\n) => ClassAccessorDecoratorResult<THost, QueryReturnType<TElement, THost, TOptions>> | undefined;\n\nconst defaultOptions = {\n all: false,\n closest: false,\n from: 'shadow' as QueryRoot | undefined,\n fallback: null\n} as const satisfies QuerySingleOptions<Element, QueryHost>;\n\nconst resolveFallback = <TResult, THost extends QueryHost>(\n fallback: QueryFallback<TResult, THost> | undefined,\n host: THost\n): TResult | undefined => {\n if (typeof fallback === 'function') {\n return (fallback as (instance: THost) => TResult)(host);\n }\n\n return fallback;\n};\n\nconst resolveRoot = (host: QueryHost, option: QueryRoot | undefined): ParentNode | null => {\n switch (option) {\n case 'document':\n return document;\n case 'light':\n return host;\n default:\n return host.renderRoot ?? host.shadowRoot ?? host;\n }\n};\n\nconst resolveQuery = <\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n>(\n host: THost,\n selector: string,\n options: TOptions\n) => {\n if (options.closest) {\n const result = host.closest(selector);\n return result ?? resolveFallback(options.fallback as QueryFallback<Element | null, THost>, host) ?? null;\n }\n\n const root = resolveRoot(host, options.from);\n\n if (!root) {\n return options.all\n ? (resolveFallback(options.fallback as QueryFallback<TElement[], THost>, host) ?? [])\n : (resolveFallback(options.fallback as QueryFallback<TElement | null, THost>, host) ?? null);\n }\n\n if (options.all) {\n const elements = Array.from(root.querySelectorAll<TElement>(selector));\n return elements.length > 0\n ? elements\n : (resolveFallback(options.fallback as QueryFallback<TElement[], THost>, host) ?? []);\n }\n\n const match = root.querySelector<TElement>(selector);\n return match ?? resolveFallback(options.fallback as QueryFallback<TElement | null, THost>, host) ?? null;\n};\n\nconst createQueryDecorator = <\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n>(\n selector: string,\n options: TOptions\n): QueryDecorator<TElement, THost, TOptions> => {\n type Result = QueryReturnType<TElement, THost, TOptions>;\n\n return (\n _target: ClassAccessorDecoratorTarget<THost, Result> | undefined,\n context: ClassFieldDecoratorContext<THost, Result> | ClassAccessorDecoratorContext<THost, Result>\n ): ClassAccessorDecoratorResult<THost, Result> | undefined => {\n if (context.kind === 'accessor') {\n const descriptor: ClassAccessorDecoratorResult<THost, Result> = {\n get(this: THost) {\n return resolveQuery<TElement, THost, TOptions>(this, selector, options) as Result;\n },\n set(_value: Result) {\n // Readonly accessor\n }\n };\n return descriptor;\n }\n\n context.addInitializer(function (this: THost) {\n Object.defineProperty(this, context.name, {\n configurable: true,\n enumerable: true,\n get: () => resolveQuery<TElement, THost, TOptions>(this, selector, options) as Result\n });\n });\n\n return;\n };\n};\n\nexport function Query<\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n>(selector: string, userOptions: TOptions): QueryDecorator<TElement, THost, TOptions>;\n\nexport function Query<TElement extends Element = Element, THost extends QueryHost = QueryHost>(\n selector: string\n): QueryDecorator<TElement, THost, QuerySingleOptions<TElement, THost>>;\n\nexport function Query<TElement extends Element = Element, THost extends QueryHost = QueryHost>(\n selector: string,\n userOptions?: QueryOptions<TElement, THost>\n) {\n if (!selector) {\n throw new Error('@Query requires a selector.');\n }\n\n if (userOptions) {\n const merged = { ...defaultOptions, ...userOptions } as QueryOptions<TElement, THost>;\n return createQueryDecorator<TElement, THost, typeof merged>(selector, merged);\n }\n\n const merged = defaultOptions as QuerySingleOptions<TElement, THost>;\n return createQueryDecorator<TElement, THost, typeof merged>(selector, merged);\n}\n","import type { Placement } from '~/elements/popover';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\nimport '../dropdown';\nimport '../input';\nimport './picker';\n\nimport { isValidHex } from './utils';\n\nimport { styleMap } from '~/utils/template-helpers';\n\n@Component({\n tag: 'ease-color-input',\n styles: `\n :host {\n display: block;\n position: relative;\n }\n\n ease-dropdown {\n --ease-dropdown-panel-min-width: auto;\n --ease-dropdown-panel-width: max-content;\n --ease-dropdown-panel-max-width: max-content;\n }\n\n :host(:not([custom-trigger])) ease-input {\n --ease-input-padding: 0 4px 0 4px;\n display: block;\n width: 76px;\n cursor: pointer;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n\n &::part(control) {\n margin-left: -12px;\n cursor: pointer;\n }\n }\n\n ease-dropdown::part(trigger):disabled {\n cursor: default;\n opacity: 0.75;\n }\n\n :host(:not([custom-trigger])) [slot=\"prefix\"] {\n display: block;\n width: 14px;\n height: 14px;\n margin-left: -4px;\n border-radius: 4px;\n box-shadow: inset 0 0 0 1px var(--color-white-10);\n }\n\n [part=\"value-text\"] {\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n }\n\n ease-dropdown::part(content) {\n padding: var(--ease-color-input-dropdown-padding, 12px 12px 8px 12px);\n overflow: visible;\n }\n\n ::slotted([slot=\"trigger\"]) {\n cursor: pointer;\n }\n `\n})\nexport class ColorInput extends HTMLElement {\n declare requestRender: () => void;\n\n #hasCustomTrigger = false;\n\n @Query('ease-dropdown') accessor dropdown!: (HTMLElement & { open: boolean }) | null;\n\n @Prop<string, ColorInput>({\n reflect: true,\n defaultValue: '#FF0000',\n onChange(next) {\n if (next && isValidHex(next)) {\n const normalized = next.toUpperCase();\n if (this.value !== normalized) {\n this.value = normalized;\n }\n } else if (!next) {\n this.value = '#000000';\n }\n }\n })\n accessor value!: string;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n @Prop<Placement>({ reflect: true, defaultValue: 'bottom-start' })\n accessor placement: Placement = 'bottom-start';\n\n connectedCallback(): void {\n this.#hasCustomTrigger = this.querySelector('[slot=\"trigger\"]') !== null;\n setBooleanAttribute(this, 'custom-trigger', this.#hasCustomTrigger);\n }\n\n afterRender(): void {\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n #renderDefaultTrigger(): TemplateResult {\n const swatchStyle = {\n backgroundColor: this.value\n } as const;\n\n return html`\n <div slot=\"trigger\" part=\"trigger-content\">\n <ease-input part=\"input\" type=\"text\" .value=${this.value} @change=${this.#handleInputChange} headless>\n <div slot=\"prefix\" style=${styleMap(swatchStyle)}></div>\n </ease-input>\n </div>\n `;\n }\n\n render(): TemplateResult {\n return html`\n <ease-dropdown .disabled=${this.disabled} .placement=${this.placement}>\n ${this.#hasCustomTrigger ? html`<slot name=\"trigger\" slot=\"trigger\"></slot>` : this.#renderDefaultTrigger()}\n <ease-color-picker slot=\"content\"\n data-select-ignore\n .value=${this.value}\n @input=${this.#handlePickerInput}\n @change=${this.#handlePickerChange}\n @cancel=${this.#handlePickerCancel}\n @apply=${this.#handlePickerApply}\n ></ease-color-picker>\n </ease-dropdown>\n `;\n }\n\n #handleInputChange = (event: Event): void => {\n this.value = (event.target as HTMLInputElement).value;\n dispatchControlEvent(this, 'input', { value: this.value, event });\n };\n\n #handlePickerInput = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n dispatchControlEvent(this, 'input', { value: this.value, event });\n };\n\n #handlePickerChange = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n\n #handlePickerCancel = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n this.requestRender();\n if (this.dropdown) {\n this.dropdown.open = false;\n }\n };\n\n #handlePickerApply = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n dispatchControlEvent(this, 'change', { value: this.value, event });\n if (this.dropdown) {\n this.dropdown.open = false;\n }\n };\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\nexport type Placement =\n | 'top-start'\n | 'top-center'\n | 'top-end'\n | 'bottom-start'\n | 'bottom-center'\n | 'bottom-end'\n | 'left-start'\n | 'left-center'\n | 'left-end'\n | 'right-start'\n | 'right-center'\n | 'right-end';\n\nconst nextAnchorName = (): string => `--ease-popover-anchor-${crypto.randomUUID()}`;\n\n@Component({\n tag: 'ease-popover',\n autoSlot: false,\n shadowMode: 'open',\n styles: `\n :host {\n display: contents;\n --ease-popover-offset: 8px;\n --ease-popover-anchor-name: --ease-popover-anchor;\n --ease-popover-transform-origin: center center;\n --ease-popover-duration: 200ms;\n --ease-popover-content-min-width: auto;\n --ease-popover-content-max-width: none;\n --ease-popover-content-width: max-content;\n }\n\n ::slotted([slot=\"trigger\"]) {\n anchor-name: var(--ease-popover-anchor-name);\n }\n\n [part=\"content\"] {\n position-anchor: var(--ease-popover-anchor-name);\n position: fixed;\n margin: 0;\n transform-origin: var(--ease-popover-transform-origin);\n width: var(--ease-popover-content-width);\n min-width: var(--ease-popover-content-min-width);\n max-width: var(--ease-popover-content-max-width);\n box-sizing: border-box;\n overscroll-behavior: contain;\n z-index: 100;\n display: none;\n }\n\n :host([open]) [part=\"content\"] {\n display: block;\n }\n\n :host([placement=\"top-start\"]) [part=\"content\"] {\n position-area: top right;\n top: anchor(bottom);\n left: anchor(left);\n translate: 0 calc(var(--ease-popover-offset) * -1);\n }\n\n :host([placement=\"top-center\"]) [part=\"content\"] {\n position-area: top center;\n top: anchor(top);\n left: anchor(center);\n translate: 0 calc(var(--ease-popover-offset) * -1);\n }\n\n :host([placement=\"top-end\"]) [part=\"content\"] {\n position-area: top right;\n top: anchor(bottom);\n right: anchor(right);\n translate: 0 calc(var(--ease-popover-offset) * -1);\n }\n\n :host([placement=\"bottom-start\"]) [part=\"content\"] {\n position-area: bottom right;\n top: anchor(bottom);\n left: anchor(left);\n translate: 0 var(--ease-popover-offset);\n }\n\n :host([placement=\"bottom-center\"]) [part=\"content\"] {\n position-area: bottom center;\n top: anchor(bottom);\n left: anchor(left);\n translate: 0 var(--ease-popover-offset);\n }\n\n :host([placement=\"bottom-end\"]) [part=\"content\"] {\n position-area: bottom left;\n top: anchor(bottom);\n right: anchor(right);\n translate: 0 var(--ease-popover-offset);\n }\n\n :host([placement=\"left-start\"]) [part=\"content\"] {\n position-area: left bottom;\n top: anchor(top);\n left: anchor(left);\n translate: calc(var(--ease-popover-offset) * -1) 0;\n }\n\n :host([placement=\"left-center\"]) [part=\"content\"] {\n position-area: left center;\n top: anchor(top);\n left: anchor(left);\n translate: calc(var(--ease-popover-offset) * -1) 0;\n }\n\n :host([placement=\"left-end\"]) [part=\"content\"] {\n position-area: left top;\n top: anchor(top);\n left: anchor(left);\n translate: calc(var(--ease-popover-offset) * -1) 0;\n }\n\n :host([placement=\"right-start\"]) [part=\"content\"] {\n position-area: right end;\n top: anchor(top);\n left: anchor(right);\n translate: var(--ease-popover-offset) 0;\n }\n\n :host([placement=\"right-center\"]) [part=\"content\"] {\n position-area: right center;\n top: anchor(top);\n left: anchor(right);\n translate: var(--ease-popover-offset) 0;\n }\n\n :host([placement=\"right-end\"]) [part=\"content\"] {\n position-area: right start;\n top: anchor(top);\n left: anchor(right);\n translate: var(--ease-popover-offset) 0;\n }\n `\n})\nexport class Popover extends HTMLElement {\n #anchorName = nextAnchorName();\n #contentElement: HTMLElement | null = null;\n #initialized = false;\n\n declare requestRender: () => void;\n\n public get contentElement(): HTMLElement | null {\n return this.#contentElement;\n }\n\n @Prop<Placement>({\n reflect: true,\n defaultValue: 'bottom-start',\n onChange() {\n (this as Popover).handlePlacementChange();\n }\n })\n accessor placement!: Placement;\n\n @Prop<number>({\n type: Number,\n reflect: true,\n defaultValue: 8,\n onChange() {\n (this as Popover).handleOffsetChange();\n }\n })\n accessor offset = 8;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor open = false;\n\n connectedCallback(): void {\n this.#syncAnchorName();\n this.#syncOffset();\n }\n\n disconnectedCallback(): void {\n this.#contentElement = null;\n this.#initialized = false;\n }\n\n render(): TemplateResult {\n return html`\n <slot slot=\"trigger\" name=\"trigger\"></slot>\n <div\n part=\"content\"\n data-popover-content\n role=\"region\"\n data-placement=${this.placement}\n >\n <slot></slot>\n </div>\n `;\n }\n\n handlePlacementChange(): void {\n if (!this.#initialized) {\n this.requestRender();\n return;\n }\n this.#syncPlacement();\n }\n\n handleOffsetChange(): void {\n if (!this.#initialized) {\n this.requestRender();\n return;\n }\n this.#syncOffset();\n }\n\n #syncPlacement(): void {\n this.dataset.placement = this.placement;\n\n if (this.#contentElement) {\n this.#contentElement.dataset.placement = this.placement;\n }\n }\n\n #syncOffset(): void {\n const offset = Number.isFinite(this.offset) ? this.offset : 0;\n this.style.setProperty('--ease-popover-offset', `${offset}px`);\n }\n\n #syncAnchorName(): void {\n this.style.setProperty('--ease-popover-anchor-name', this.#anchorName);\n }\n}\n\nexport default {\n Popover\n};\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype ChevronState = 'down' | 'up';\ntype ChevronPath = Record<ChevronState, string>;\n\n@Component({\n tag: 'ease-icon-chevron',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"chevron\"] {\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n observedAttributes: ['state']\n})\nexport class IconChevron extends HTMLElement {\n declare requestRender: () => void;\n\n accessor paths: ChevronPath = {\n down: 'M5 7L8 10L11 7',\n up: 'M5 9L8 6L11 9'\n };\n\n @Prop<ChevronState>({\n reflect: true,\n attribute: 'state',\n defaultValue: 'down',\n onAttributeChange(next: ChevronState, previous: ChevronState) {\n this.shadowRoot\n ?.querySelector<SVGPathElement>('path')\n ?.animate(\n [\n { d: `path('${(this as IconChevron).paths[previous]}')` },\n { d: `path('${(this as IconChevron).paths[next]}')` }\n ],\n {\n duration: 200,\n easing: 'cubic-bezier(0.25, 0, 0.5, 1)'\n }\n );\n }\n })\n accessor state!: ChevronState;\n\n render(): TemplateResult {\n return html`\n <svg part=\"chevron\" viewBox=\"0 0 16 16\" state=${this.state} xmlns=\"http://www.w3.org/2000/svg \">\n <path d=${this.paths[this.state]} />\n </svg>\n `;\n }\n}\n","import type { Placement } from '~/elements/popover';\nimport '../popover';\nimport '../icons/animation/chevron';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { OutsideClick, requestOutsideClickUpdate } from '~/decorators/OutsideClick';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\ninterface OptionRecord {\n element: HTMLElement;\n value: string;\n label: string;\n id: string;\n handlers: {\n click: (event: Event) => void;\n keydown: (event: KeyboardEvent) => void;\n };\n}\n\nconst nextOptionId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-dropdown-option-${counter}`;\n };\n})();\n\nconst nextPanelId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-dropdown-content-${counter}`;\n };\n})();\n\n@Component({\n tag: 'ease-dropdown',\n styles: `\n :host {\n display: grid;\n width: 100%;\n }\n\n ease-popover {\n --ease-popover-content-min-width: var(--ease-dropdown-panel-min-width, anchor-size(width));\n --ease-popover-content-width: var(--ease-dropdown-panel-width, max-content);\n --ease-popover-content-max-width: var(--ease-dropdown-panel-max-width, none);\n }\n\n [part=\"trigger\"] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n gap: 8px;\n padding: var(--ease-dropdown-trigger-padding, 8px 8px 8px 12px);\n border-radius: var(--ease-dropdown-radius, var(--radii-md));\n background-color: var(--ease-dropdown-background, var(--color-gray-850));\n cursor: pointer;\n box-shadow: var(\n --ease-dropdown-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n box-sizing: border-box;\n font-size: var(--ease-dropdown-font-size, var(--ease-font-size, 13px));\n font-weight: var(--ease-dropdown-font-weight, 500);\n color: var(--ease-dropdown-color, var(--color-foreground));\n min-width: 0;\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-dropdown-line-height, 14px);\n transition: color 0.2s, background-color 0.2s;\n text-align: left;\n\n &:hover,\n &:focus-within {\n background-color: var(--ease-dropdown-background-hover, var(--color-gray-825));\n }\n\n [part=\"trigger-icon\"] {\n display: block;\n margin: -1px 0 -1px -2px;\n }\n\n &[data-pill=\"true\"] {\n border-radius: 999px;\n }\n\n &[data-block=\"small\"] {\n padding: 4px 8px 4px 4px;\n }\n\n &[data-headless=\"true\"] {\n background: transparent;\n box-shadow: none;\n padding: 0;\n border-radius: 0;\n gap: 4px;\n\n &:hover,\n &:focus-within {\n background: transparent;\n }\n }\n }\n\n input[part=\"trigger-input\"] {\n background: transparent;\n border: none;\n outline: none;\n color: inherit;\n font: inherit;\n width: fit-content;\n min-width: 0;\n padding: 0;\n margin: 0;\n cursor: pointer;\n field-sizing: var(--ease-dropdown-field-sizing, fixed);\n }\n \n :host([open]) input[part=\"trigger-input\"] {\n cursor: text;\n }\n\n [part=\"trigger\"][data-placeholder=\"true\"],\n [part=\"trigger\"] [part=\"trigger-label\"][data-placeholder=\"true\"],\n input[part=\"trigger-input\"]::placeholder {\n color: var(--ease-dropdown-placeholder-color, var(--color-gray-600));\n }\n\n [part=\"trigger\"] [part=\"trigger-label\"] {\n flex-grow: 1;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n [part=\"content\"] {\n border-radius: var(--ease-dropdown-panel-radius, var(--ease-dropdown-radius, var(--radii-md)));\n background: var(--ease-dropdown-panel-background, var(--color-gray-875));\n border: none;\n outline: none;\n box-shadow: var(\n --ease-dropdown-panel-shadow,\n 0 5px 20px 0 var(--color-black-15),\n 0 1px 4px 0 var(--color-black-15),\n 0 0 0 1px var(--color-white-4) inset,\n 0 1px 0 0 var(--color-white-4) inset\n );\n background-clip: padding-box;\n border: 1px solid var(--ease-dropdown-panel-border-color, var(--color-gray-825));\n box-sizing: border-box;\n padding: var(--ease-dropdown-panel-padding, 4px);\n }\n \n [part=\"content\"] ::slotted(hr) {\n margin: 4px 0;\n height: 1px;\n background-color: var(--color-white-4);\n border: none;\n\n &:first-child,\n &:last-child {\n display: none;\n }\n }\n\n [part=\"content\"] ::slotted(h4) {\n margin: 4px 0 8px 0 !important;\n font-size: var(--ease-dropdown-group-label-font-size, 11px);\n line-height: 1;\n padding: var(--ease-dropdown-group-label-padding, 0 8px);\n font-family: var(--ease-font-family, inherit);\n font-weight: 450;\n color: var(--ease-dropdown-group-label-color, var(--color-gray-700));\n display: block;\n\n &:first-child,\n &:last-child {\n display: none;\n }\n }\n\n [part=\"section\"] {\n flex-grow: 1;\n min-width: max(100%, var(--ease-dropdown-min-width, 140px));\n display: grid;\n grid-gap: 3px;\n max-height: var(--ease-dropdown-max-height, auto);\n overflow-y: auto;\n overscroll-behavior: contain;\n container-type: inline-size;\n container-name: scroll-area;\n mask: linear-gradient(to bottom,\n #0000,\n #ffff var(--top-fade) calc(100% - var(--bottom-fade)),\n #0000\n );\n animation: scroll;\n animation-timeline: --scroll;\n scroll-timeline: --scroll y;\n scroll-snap-type: y mandatory;\n scrollbar-width: none;\n -ms-overflow-style: none;\n box-sizing: border-box;\n }\n\n [part=\"section\"]::-webkit-scrollbar {\n width: 0;\n height: 0;\n display: none;\n }\n\n @property --top-fade {\n syntax: '<length>';\n inherits: false;\n initial-value: 0;\n }\n\n @property --bottom-fade {\n syntax: '<length>';\n inherits: false;\n initial-value: 0;\n }\n\n @keyframes scroll {\n 0% {\n --bottom-fade: 16px;\n --top-fade: 0;\n }\n 10%,\n 100% {\n --top-fade: 16px;\n }\n 90% {\n --bottom-fade: 16px;\n }\n 100% {\n --bottom-fade: 0;\n }\n }\n\n ::slotted(button[slot=\"content\"]) {\n appearance: none;\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n font-size: var(--ease-dropdown-option-font-size, var(--ease-font-size-sm, 12px));\n font-weight: var(--ease-dropdown-option-font-weight, 400);\n color: var(--ease-dropdown-option-color, var(--color-blue-100));\n min-width: 0;\n padding: var(--ease-dropdown-option-padding, 7px 8px);\n display: block;\n border-radius: var(--ease-dropdown-option-radius, 5px);\n background-color: var(--ease-dropdown-option-background, var(--color-gray-875));\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-dropdown-option-line-height, 14px);\n transition: color 0.2s, background-color 0.2s;\n cursor: pointer;\n width: 100%;\n text-align: left;\n }\n\n ::slotted(button[slot=\"content\"]:hover),\n ::slotted(button[slot=\"content\"]:focus-visible),\n ::slotted(button[slot=\"content\"][data-active=\"true\"]),\n ::slotted(button[slot=\"content\"][aria-selected=\"true\"]) {\n background-color: var(--ease-dropdown-option-background-active, var(--color-gray-825));\n color: var(--ease-dropdown-option-color-active, var(--color-white));\n }\n `\n})\nexport class Dropdown extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({\n type: Boolean,\n reflect: true,\n onChange(next, previous) {\n (this as Dropdown).handleOpenChange(next, previous);\n }\n })\n accessor open = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor pill = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor headless = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor searchable = false;\n\n @Prop<'small' | 'medium' | 'large'>({\n type: String,\n reflect: true,\n defaultValue: 'medium',\n onAttributeChange() {\n this.requestRender?.();\n }\n })\n accessor block: 'small' | 'medium' | 'large' = 'medium';\n\n @Prop<string>({\n reflect: true,\n defaultValue: 'auto',\n onChange(next) {\n (this as Dropdown).style.setProperty('--ease-dropdown-max-height', next ?? 'auto');\n }\n })\n accessor maxHeight: string = 'auto';\n\n @Prop<string | null>({ reflect: true, defaultValue: null })\n accessor name: string | null = null;\n\n @Prop<string | null>({ reflect: true, defaultValue: null })\n accessor value: string | null = null;\n\n @Prop<string | null>({\n reflect: true,\n attribute: 'placeholder',\n defaultValue: 'Select an option'\n })\n accessor placeholder: string | null = 'Select an option';\n\n @Prop<Placement>({ reflect: true, defaultValue: 'bottom-start' })\n accessor placement: Placement = 'bottom-start';\n\n @Query<HTMLElement>('[part=\"trigger\"]')\n accessor trigger!: HTMLElement | null;\n\n @Query<HTMLInputElement>('input[part=\"trigger-input\"]')\n accessor searchInput!: HTMLInputElement | null;\n\n @Query<HTMLElement>('[part=\"content\"]')\n accessor panelContent!: HTMLElement | null;\n\n @Query<HTMLSlotElement>('slot[name=\"content\"]')\n accessor contentSlot!: HTMLSlotElement | null;\n\n #options: OptionRecord[] = [];\n #selectedLabel: string | null = null;\n #currentSlot: HTMLSlotElement | null = null;\n #pendingFocus: 'first' | 'last' | null = null;\n #optionsInitialized = false;\n #lastToggleOrigin: Event | null = null;\n #handleSlotChange = (): void => {\n this.#syncOptions();\n };\n\n connectedCallback(): void {\n this.#ensureSlotListener();\n }\n\n disconnectedCallback(): void {\n this.#removeSlotListener();\n this.#teardownOptions();\n this.#lastToggleOrigin = null;\n }\n\n afterRender(): void {\n const trigger = this.trigger;\n const ariaLabel = this.getAttribute('aria-label');\n\n if (trigger) {\n if (trigger instanceof HTMLButtonElement) {\n trigger.disabled = Boolean(this.disabled);\n }\n trigger.setAttribute('aria-expanded', this.open && !this.disabled ? 'true' : 'false');\n trigger.setAttribute('aria-haspopup', 'listbox');\n\n if (trigger instanceof HTMLButtonElement) {\n if (ariaLabel && ariaLabel.trim().length > 0) {\n trigger.setAttribute('aria-label', ariaLabel.trim());\n } else {\n trigger.removeAttribute('aria-label');\n }\n }\n }\n\n if (this.searchInput) {\n this.searchInput.disabled = Boolean(this.disabled);\n\n if (ariaLabel && ariaLabel.trim().length > 0) {\n this.searchInput.setAttribute('aria-label', ariaLabel.trim());\n } else {\n this.searchInput.removeAttribute('aria-label');\n }\n }\n\n const panel = this.panelContent;\n const isInteractive = this.open && !this.disabled;\n\n if (panel) {\n if (!panel.id) {\n panel.id = nextPanelId();\n }\n panel.tabIndex = -1;\n panel.setAttribute('role', 'listbox');\n panel.setAttribute('aria-hidden', isInteractive ? 'false' : 'true');\n\n if (trigger) {\n trigger.setAttribute('aria-controls', panel.id);\n }\n } else if (trigger) {\n trigger.removeAttribute('aria-controls');\n }\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n\n this.#ensureSlotListener();\n\n if (!this.#optionsInitialized) {\n queueMicrotask(() => {\n this.#syncOptions();\n });\n } else {\n this.#updateOptionSelectionState();\n }\n\n if (this.disabled && this.open) {\n this.#lastToggleOrigin = null;\n this.open = false;\n }\n }\n\n render(): TemplateResult {\n const placeholderActive = this.#isPlaceholderActive();\n\n return html`\n <ease-popover\n .placement=${this.placement}\n .open=${this.open && !this.disabled}\n >\n ${this.searchable ? this.#renderSearchTrigger(placeholderActive) : this.#renderButtonTrigger(placeholderActive)}\n <div\n part=\"content\"\n role=\"listbox\"\n tabindex=\"-1\"\n data-open=${this.open && !this.disabled ? 'true' : 'false'}\n ?hidden=${!this.open || this.disabled}\n @keydown=${this.#handlePanelKeydown}\n >\n <div part=\"section\">\n <slot name=\"content\"></slot>\n </div>\n </div>\n </ease-popover>\n `;\n }\n\n #renderButtonTrigger(placeholderActive: boolean) {\n return html`\n <button\n part=\"trigger\"\n slot=\"trigger\"\n type=\"button\"\n data-placeholder=${placeholderActive ? 'true' : 'false'}\n data-headless=${this.headless}\n @keydown=${this.#handleTriggerKeydown}\n @click=${this.#handleTriggerClick}\n data-pill=${this.pill}\n >\n <slot name=\"trigger\">\n <span part=\"trigger-label\" data-placeholder=${placeholderActive ? 'true' : 'false'}>\n ${this.#getTriggerLabel()}\n </span>\n\n <ease-icon-chevron part=\"trigger-icon\" state=${this.open ? 'up' : 'down'} />\n </slot>\n </button>\n `;\n }\n\n #renderSearchTrigger(placeholderActive: boolean) {\n return html`\n <div\n part=\"trigger\"\n slot=\"trigger\"\n data-placeholder=${placeholderActive ? 'true' : 'false'}\n data-headless=${this.headless}\n @click=${this.#handleSearchTriggerClick}\n data-pill=${this.pill}\n >\n <slot name=\"trigger\">\n <input \n part=\"trigger-input\"\n type=\"text\"\n .value=${this.open ? (this.searchInput?.value ?? '') : this.#getTriggerLabel()}\n placeholder=${this.placeholder ?? ''}\n ?readonly=${!this.open}\n @input=${this.#handleSearchInput}\n @keydown=${this.#handleTriggerKeydown}\n />\n <ease-icon-chevron part=\"trigger-icon\" state=${this.open ? 'up' : 'down'} />\n </slot>\n </div>\n `;\n }\n\n #handleSearchTriggerClick = (event: Event): void => {\n if (this.disabled) {\n return;\n }\n\n if (!this.open) {\n this.toggle(true, event);\n\n if (this.searchInput) {\n this.searchInput.value = '';\n this.#filterOptions('');\n this.searchInput.focus();\n }\n } else {\n if (event.target !== this.searchInput) {\n this.toggle(false, event);\n }\n }\n };\n\n #handleSearchInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.#filterOptions(input.value);\n\n if (!this.open) {\n this.toggle(true, event);\n }\n };\n\n #filterOptions(query: string): void {\n const lowerQuery = query.toLowerCase();\n this.#options.forEach((option) => {\n const match = option.label.toLowerCase().includes(lowerQuery);\n if (match) {\n option.element.style.display = '';\n } else {\n option.element.style.display = 'none';\n }\n });\n }\n\n toggle(force?: boolean, originEvent?: Event): void {\n if (this.disabled) {\n return;\n }\n\n const current = this.open;\n const next = force ?? !current;\n\n if (current === next) {\n return;\n }\n\n this.#lastToggleOrigin = originEvent ?? null;\n this.open = next;\n\n if (!next) {\n this.#pendingFocus = null;\n // Reset filter when closing\n this.#filterOptions('');\n // Restore label in input if searchable\n if (this.searchable && this.searchInput) {\n this.searchInput.value = this.#getTriggerLabel();\n this.searchInput.blur(); // Blur to look like static text\n }\n }\n }\n\n handleOpenChange(next: boolean, previous: boolean): void {\n if (next === previous) {\n return;\n }\n\n if (!next) {\n this.#pendingFocus = null;\n }\n\n const origin = this.#lastToggleOrigin ?? new Event(next ? 'open' : 'close');\n this.#lastToggleOrigin = null;\n\n if (next) {\n if (this.searchable && this.searchInput) {\n this.searchInput.focus();\n } else {\n queueMicrotask(() => this.#focusActiveOption());\n }\n }\n\n dispatchControlEvent(this, 'toggle', { value: next, event: origin });\n requestOutsideClickUpdate(this);\n }\n\n @OutsideClick<Dropdown>({\n content: (host) => host.panelContent,\n triggers: (host) => [host.trigger, host.panelContent],\n disabled: (host) => host.disabled || !host.open\n })\n handleOutsideDismiss(event: Event): void {\n if (!this.open) {\n return;\n }\n\n this.toggle(false, event);\n }\n\n #handleTriggerKeydown = (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.#pendingFocus = 'first';\n this.toggle(true, event);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.#pendingFocus = 'last';\n this.toggle(true, event);\n break;\n case 'Enter':\n if (!this.searchable) {\n event.preventDefault();\n this.toggle(true, event);\n }\n break;\n case ' ': // Space\n if (!this.searchable) {\n event.preventDefault();\n this.toggle(true, event);\n }\n break;\n case 'Escape':\n if (this.open) {\n event.preventDefault();\n this.toggle(false, event);\n }\n break;\n default:\n break;\n }\n };\n\n #ensureSlotListener(): void {\n const slot = this.contentSlot;\n\n if (slot === this.#currentSlot) {\n return;\n }\n\n if (this.#currentSlot) {\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n }\n\n if (slot) {\n slot.addEventListener('slotchange', this.#handleSlotChange);\n }\n\n this.#currentSlot = slot ?? null;\n }\n\n #removeSlotListener(): void {\n if (!this.#currentSlot) {\n return;\n }\n\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n this.#currentSlot = null;\n }\n\n #handleTriggerClick = (event: Event): void => {\n this.toggle(!this.open, event);\n };\n\n #syncOptions(): void {\n const assigned = this.contentSlot?.assignedElements({ flatten: true }) ?? [];\n const elements = assigned.filter((node): node is HTMLElement => node instanceof HTMLElement);\n\n this.#removeOptionListeners(this.#options);\n\n const options: OptionRecord[] = [];\n\n elements.forEach((element) => {\n if (element.hasAttribute('data-select-ignore') || element.getAttribute('role') === 'separator') {\n return;\n }\n\n const value = this.#resolveOptionValue(element);\n const label = this.#resolveOptionLabel(element, value);\n const id = element.id && element.id.trim().length > 0 ? element.id : nextOptionId();\n\n if (!element.id) {\n element.id = id;\n }\n\n element.setAttribute('role', 'option');\n element.setAttribute('aria-selected', 'false');\n element.dataset.active = 'false';\n element.tabIndex = -1;\n\n const handlers = {\n click: (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.#selectOption(value, label, event);\n },\n keydown: (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.#selectOption(value, label, event);\n }\n }\n } as OptionRecord['handlers'];\n\n element.addEventListener('click', handlers.click, { passive: false });\n element.addEventListener('keydown', handlers.keydown);\n\n options.push({ element, value, label, id, handlers });\n });\n\n this.#options = options;\n this.#optionsInitialized = options.length > 0;\n\n if (this.value === null && options.length > 0) {\n const preselected = options.find(\n (option) =>\n option.element.hasAttribute('selected') ||\n option.element.dataset.selected === 'true' ||\n option.element.getAttribute('aria-selected') === 'true'\n );\n\n if (preselected) {\n this.value = preselected.value;\n }\n }\n\n this.#updateOptionSelectionState();\n }\n\n #teardownOptions(): void {\n this.#removeOptionListeners(this.#options);\n this.#options = [];\n this.#optionsInitialized = false;\n this.#selectedLabel = null;\n }\n\n #removeOptionListeners(options: OptionRecord[]): void {\n options.forEach((option) => {\n option.element.removeEventListener('click', option.handlers.click);\n option.element.removeEventListener('keydown', option.handlers.keydown);\n option.element.dataset.active = 'false';\n option.element.setAttribute('aria-selected', 'false');\n option.element.tabIndex = -1;\n });\n }\n\n #updateOptionSelectionState(): void {\n if (!this.#optionsInitialized) {\n this.toggleAttribute('data-has-value', false);\n return;\n }\n\n let selectedLabel: string | null = null;\n const previousLabel = this.#selectedLabel;\n\n const options = this.#options;\n\n options.forEach((option) => {\n const isSelected = this.value !== null && option.value === this.value;\n option.element.setAttribute('aria-selected', isSelected ? 'true' : 'false');\n option.element.dataset.active = isSelected ? 'true' : 'false';\n option.element.tabIndex = isSelected ? 0 : -1;\n\n if (isSelected) {\n selectedLabel = option.label;\n }\n });\n\n if (!selectedLabel) {\n const fallback = options[0];\n if (fallback) {\n fallback.element.tabIndex = 0;\n }\n }\n\n this.#selectedLabel = selectedLabel;\n const hasValue = Boolean(this.value && this.#selectedLabel);\n this.toggleAttribute('data-has-value', hasValue);\n\n if (previousLabel !== this.#selectedLabel && typeof this.requestRender === 'function') {\n this.requestRender();\n }\n }\n\n #isPlaceholderActive(): boolean {\n return !this.value || !this.#selectedLabel;\n }\n\n #getTriggerLabel(): string {\n if (this.#selectedLabel) {\n return this.#selectedLabel;\n }\n\n if (typeof this.placeholder === 'string' && this.placeholder.trim().length > 0) {\n return this.placeholder.trim();\n }\n\n return 'Select';\n }\n\n #focusActiveOption(): void {\n if (!this.open) {\n return;\n }\n\n const options = this.#options.filter((o) => o.element.style.display !== 'none');\n\n if (options.length === 0) {\n this.panelContent?.focus();\n return;\n }\n\n let target: OptionRecord | undefined = options[0];\n\n if (this.#pendingFocus === 'first') {\n target = options[0];\n } else if (this.#pendingFocus === 'last') {\n target = options[options.length - 1];\n } else if (this.#pendingFocus === null && this.value !== null) {\n const match = this.#findOptionByValue(this.value);\n if (match && match.element.style.display !== 'none') {\n target = match;\n }\n }\n\n if (target) {\n this.#focusOption(target);\n }\n this.#pendingFocus = null;\n }\n\n #focusOption(option: OptionRecord): void {\n this.#options.forEach((entry) => {\n entry.element.tabIndex = entry === option ? 0 : -1;\n });\n\n option.element.focus({ preventScroll: true });\n }\n\n #focusOptionByIndex(index: number): void {\n const options = this.#options.filter((o) => o.element.style.display !== 'none');\n\n if (options.length === 0) {\n this.panelContent?.focus();\n return;\n }\n\n const normalized = Math.max(0, Math.min(index, options.length - 1));\n const option = options[normalized];\n if (option) {\n this.#focusOption(option);\n }\n }\n\n #findOptionByValue(value: string | null): OptionRecord | undefined {\n if (value === null) {\n return undefined;\n }\n\n return this.#options.find((option) => option.value === value);\n }\n\n #moveFocus(step: number): void {\n const options = this.#options.filter((o) => o.element.style.display !== 'none');\n\n if (options.length === 0) {\n this.panelContent?.focus();\n return;\n }\n\n const activeElement = document.activeElement as HTMLElement | null;\n const currentIndex = options.findIndex((option) => option.element === activeElement);\n\n if (currentIndex === -1) {\n this.#focusOptionByIndex(step > 0 ? 0 : options.length - 1);\n return;\n }\n\n const nextIndex = (currentIndex + step + options.length) % options.length;\n this.#focusOptionByIndex(nextIndex);\n }\n\n #handlePanelKeydown = (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.#moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.#moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.#focusOptionByIndex(0);\n break;\n case 'End':\n event.preventDefault();\n this.#focusOptionByIndex(this.#options.length - 1);\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this.#activateFocusedOption(event);\n break;\n }\n case 'Escape':\n event.preventDefault();\n this.toggle(false, event);\n this.trigger?.focus();\n break;\n default:\n break;\n }\n };\n\n #activateFocusedOption(event: Event): void {\n const active = this.#options.find((option) => option.element === document.activeElement);\n\n if (active) {\n this.#selectOption(active.value, active.label, event);\n }\n }\n\n #selectOption(value: string, label: string, originEvent: Event): void {\n if (this.disabled) {\n return;\n }\n\n originEvent.preventDefault();\n originEvent.stopPropagation();\n\n const previousValue = this.value;\n this.value = value;\n this.#selectedLabel = label;\n this.#updateOptionSelectionState();\n\n this.toggle(false, originEvent);\n\n if (previousValue !== value) {\n this.#dispatchValueChange(value, label, originEvent);\n }\n\n if (!this.searchable) {\n queueMicrotask(() => this.trigger?.focus());\n }\n }\n\n #resolveOptionValue(element: HTMLElement): string {\n const explicitValue = element.getAttribute('value') ?? element.getAttribute('data-value') ?? element.dataset.value;\n\n if (explicitValue && explicitValue.trim().length > 0) {\n return explicitValue.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n const fallback = nextOptionId();\n element.dataset.value = fallback;\n return fallback;\n }\n\n #resolveOptionLabel(element: HTMLElement, fallback: string): string {\n const explicitLabel = element.getAttribute('data-label') ?? element.getAttribute('aria-label');\n\n if (explicitLabel && explicitLabel.trim().length > 0) {\n return explicitLabel.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n return fallback;\n }\n\n #dispatchValueChange(value: string, label: string, event: Event): void {\n dispatchControlEvent(this, 'change', { value, event });\n\n this.dispatchEvent(\n new CustomEvent('value-change', {\n detail: { value, label, event },\n bubbles: true,\n composed: true\n })\n );\n }\n}\n","export interface DismissContext {\n owner: HTMLElement;\n content?: HTMLElement | null;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface DismissControllerOptions {\n onDismiss: (event: Event) => void;\n}\n\nexport class DismissController {\n #onDismiss: (event: Event) => void;\n #context: {\n owner: HTMLElement;\n content: HTMLElement | null;\n triggers: HTMLElement[];\n } | null = null;\n #active = false;\n\n constructor(options: DismissControllerOptions) {\n this.#onDismiss = options.onDismiss;\n }\n\n connect(context: DismissContext): void {\n this.#context = {\n owner: context.owner,\n content: context.content ?? null,\n triggers: (context.triggers ?? []).filter((el): el is HTMLElement => el instanceof HTMLElement)\n };\n\n if (!this.#active) {\n document.addEventListener('pointerdown', this.#handlePointerDown, true);\n document.addEventListener('keydown', this.#handleKeyDown, true);\n this.#active = true;\n }\n }\n\n disconnect(): void {\n if (!this.#active) {\n return;\n }\n\n document.removeEventListener('pointerdown', this.#handlePointerDown, true);\n document.removeEventListener('keydown', this.#handleKeyDown, true);\n this.#active = false;\n this.#context = null;\n }\n\n #handlePointerDown = (event: PointerEvent): void => {\n if (!this.#context) {\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.some((node) => node instanceof Element && node.hasAttribute('data-select-ignore'))) {\n return;\n }\n\n if (path.includes(owner)) {\n return;\n }\n\n if (content && path.includes(content)) {\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger))) {\n return;\n }\n\n this.#onDismiss(event);\n };\n\n #handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Escape' || !this.#context) {\n return;\n }\n\n event.preventDefault();\n\n const active = document.activeElement as HTMLElement | null;\n\n if (!active) {\n this.#onDismiss(event);\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.includes(owner) || owner.contains(active)) {\n this.#onDismiss(event);\n return;\n }\n\n if (content && (path.includes(content) || content.contains(active))) {\n this.#onDismiss(event);\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger) || trigger.contains(active))) {\n this.#onDismiss(event);\n }\n };\n}\n","import type { DismissContext } from './dismiss-controller';\n\nimport { DismissController } from './dismiss-controller';\n\nexport interface OutsideClickResolution {\n owner?: HTMLElement | null | undefined;\n content?: HTMLElement | null | undefined;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface OutsideClickHandle {\n update(): void;\n disconnect(): void;\n}\n\nexport interface OutsideClickHandleOptions<THost extends HTMLElement> {\n resolve: (host: THost) => OutsideClickResolution | null | undefined;\n disabled?: (host: THost) => boolean;\n}\n\nconst registry = new WeakMap<HTMLElement, Set<OutsideClickHandle>>();\n\nconst toDismissContext = <THost extends HTMLElement>(\n host: THost,\n options: OutsideClickHandleOptions<THost>\n): DismissContext | null => {\n if (options.disabled?.(host)) {\n return null;\n }\n\n const resolved = options.resolve(host);\n\n if (!resolved) {\n return null;\n }\n\n const owner = resolved.owner ?? host ?? null;\n\n if (!(owner instanceof HTMLElement)) {\n return null;\n }\n\n const content = resolved.content && resolved.content instanceof HTMLElement ? resolved.content : null;\n\n const triggers = resolved.triggers?.filter((element): element is HTMLElement => element instanceof HTMLElement) ?? [];\n\n return {\n owner,\n content,\n triggers\n };\n};\n\nexport const createOutsideClickHandle = <THost extends HTMLElement>(\n host: THost,\n onDismiss: (this: THost, event: Event) => void,\n options: OutsideClickHandleOptions<THost>\n): OutsideClickHandle => {\n const controller = new DismissController({\n onDismiss(event) {\n if (options.disabled?.(host)) {\n return;\n }\n\n onDismiss.call(host, event);\n }\n });\n\n return {\n update(): void {\n const context = toDismissContext(host, options);\n if (!context) {\n controller.disconnect();\n return;\n }\n\n controller.connect(context);\n },\n disconnect(): void {\n controller.disconnect();\n }\n };\n};\n\nexport const registerOutsideClickHandle = (host: HTMLElement, handle: OutsideClickHandle): void => {\n let handles = registry.get(host);\n\n if (!handles) {\n handles = new Set();\n registry.set(host, handles);\n }\n\n handles.add(handle);\n};\n\nexport const updateOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.update();\n });\n};\n\nexport const disconnectOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.disconnect();\n });\n};\n\nexport const requestOutsideClickUpdate = (host: HTMLElement): void => {\n updateOutsideClickHandles(host);\n};\n","import type { OutsideClickResolution } from '~/utils/outside-click';\n\nimport {\n createOutsideClickHandle,\n disconnectOutsideClickHandles,\n registerOutsideClickHandle,\n updateOutsideClickHandles\n} from '~/utils/outside-click';\n\ntype OutsideClickHost = HTMLElement & {\n connectedCallback?: (...args: unknown[]) => unknown;\n disconnectedCallback?: (...args: unknown[]) => unknown;\n afterRender?: (...args: unknown[]) => unknown;\n};\n\ntype HookName = 'connectedCallback' | 'disconnectedCallback' | 'afterRender';\n\ninterface OutsideClickOptions<THost extends OutsideClickHost> {\n resolve?: (host: THost) => OutsideClickResolution | null | undefined;\n owner?: (host: THost) => HTMLElement | null | undefined;\n content?: (host: THost) => HTMLElement | null | undefined;\n triggers?: (host: THost) => Array<HTMLElement | null | undefined>;\n disabled?: (host: THost) => boolean;\n}\n\nconst lifecycleApplied = new WeakSet<OutsideClickHost>();\n\nconst wrapMethod = (\n host: OutsideClickHost,\n name: HookName,\n hook: (this: OutsideClickHost) => void,\n callHookFirst = false\n): void => {\n const original = host[name];\n\n (host as Required<OutsideClickHost>)[name] = function (...args: unknown[]) {\n if (callHookFirst) {\n hook.call(this);\n }\n\n let result: unknown;\n\n if (typeof original === 'function') {\n result = (original as (...params: unknown[]) => unknown).apply(this, args);\n }\n\n if (!callHookFirst) {\n hook.call(this);\n }\n\n return result;\n };\n};\n\nconst ensureLifecycle = (host: OutsideClickHost): void => {\n if (lifecycleApplied.has(host)) {\n return;\n }\n\n lifecycleApplied.add(host);\n\n wrapMethod(host, 'connectedCallback', function (this: OutsideClickHost) {\n updateOutsideClickHandles(this);\n });\n\n wrapMethod(host, 'afterRender', function (this: OutsideClickHost) {\n updateOutsideClickHandles(this);\n });\n\n wrapMethod(\n host,\n 'disconnectedCallback',\n function (this: OutsideClickHost) {\n disconnectOutsideClickHandles(this);\n },\n true\n );\n};\n\nexport function OutsideClick<THost extends OutsideClickHost, TEvent extends Event = Event>(\n options: OutsideClickOptions<THost> = {}\n) {\n return (\n originalMethod: (this: THost, event: TEvent) => unknown,\n context: ClassMethodDecoratorContext<THost, typeof originalMethod>\n ): void => {\n context.addInitializer(function (this: THost) {\n ensureLifecycle(this);\n\n const resolve =\n options.resolve ??\n ((host: THost): OutsideClickResolution => {\n return {\n owner: options.owner?.(host),\n content: options.content?.(host),\n triggers: options.triggers?.(host)\n };\n });\n\n const handle = createOutsideClickHandle(\n this,\n (event) => {\n originalMethod.call(this, event as TEvent);\n },\n {\n resolve,\n disabled: options.disabled\n }\n );\n\n registerOutsideClickHandle(this, handle);\n\n if (this.isConnected) {\n updateOutsideClickHandles(this);\n }\n });\n };\n}\n\nexport { requestOutsideClickUpdate } from '~/utils/outside-click';\nexport type { OutsideClickOptions };\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-input',\n shadowMode: 'open',\n autoSlot: true,\n styles: `\n :host {\n display: contents;\n cursor: text;\n }\n\n @keyframes custom-caret {\n 0%,\n 100% {\n caret-color: transparent;\n }\n 33.33%,\n 66.66% {\n caret-color: var(--color-blue-300);\n }\n }\n\n [part=\"container\"] {\n display: grid;\n align-items: center;\n text-align: inherit;\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n padding: var(--ease-input-padding, 8px);\n border-radius: var(--ease-input-radius, var(--radii-md));\n background-color: var(--ease-input-background, var(--color-gray-875));\n cursor: text;\n animation: custom-caret 1s infinite;\n caret-animation: manual;\n transition: background-color 0.2s;\n box-shadow: var(\n --ease-input-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n\n &:not([data-has-prefix]):not([data-has-suffix]) {\n padding: var(--ease-input-padding, 8px 12px);\n }\n\n &:has(input:disabled) {\n cursor: not-allowed;\n opacity: 0.75;\n }\n\n &:not(:has(input:disabled)) {\n\n &:hover {\n background-color: var(--ease-input-background-hover, var(--color-gray-850));\n }\n\n &:has(input:focus-visible) {\n background-color: var(--ease-input-background-focus, var(--color-gray-825));\n }\n\n }\n\n &[data-has-prefix][data-has-suffix] {\n padding: var(--ease-input-padding, 0);\n grid-template-columns: 30px 1fr 30px;\n }\n\n &[data-has-prefix]:not([data-has-suffix]) {\n padding-right: var(--ease-input-padding, 12px);\n grid-template-columns: 30px 1fr;\n }\n\n &[data-has-suffix]:not([data-has-prefix]) {\n padding-left: var(--ease-input-padding, 12px);\n grid-template-columns: 1fr 30px;\n }\n\n &[data-headless=\"true\"] {\n background-color: transparent;\n box-shadow: none;\n border: none;\n padding: 0;\n margin: 0;\n outline: none;\n border-radius: 0;\n }\n }\n\n ::slotted(button) {\n --ease-icon-size: 12px;\n width: 30px;\n height: 30px;\n appearance: none;\n border: none;\n outline: none;\n background-color: transparent;\n padding: 0;\n margin: 0;\n line-height: 14px;\n transition: color 0.2s;\n cursor: pointer;\n display: grid;\n place-items: center;\n color: var(--color-gray-600);\n transition: color 0.2s;\n\n &:hover,\n &:focus-visible {\n color: var(--color-blue-100);\n }\n\n &.isActive {\n animation: blink .6s forwards;\n }\n\n @keyframes blink {\n 50% {\n background-color: var(--color-white-8);\n }\n }\n }\n\n ::slotted(button[slot=\"prefix\"]) {\n border-radius: var(--radii-md) 0 0 var(--radii-md);\n border-right: 1px solid var(--color-white-4);\n\n &:empty {\n display: none;\n }\n }\n\n ::slotted([slot=\"prefix\"]:not(button)) {\n margin: calc(var(--ease-input-padding, 8px) * -1);\n margin-right: 0;\n margin-left: 0;\n }\n\n ::slotted(button[slot=\"suffix\"]) {\n border-radius: 0 var(--radii-md) var(--radii-md) 0;\n border-left: 1px solid var(--color-white-4);\n\n &:empty {\n display: none;\n }\n }\n\n input {\n font-family: inherit;\n font-optical-sizing: auto;\n font-size: var(--ease-input-font-size, var(--ease-font-size, 13px));\n appearance: none;\n -moz-appearance: textfield;\n font-weight: var(--ease-input-font-weight, 500);\n color: var(--ease-input-color, var(--color-blue-100));\n min-width: 0;\n cursor: inherit;\n text-align: inherit;\n padding: 0;\n background-color: transparent;\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-input-line-height, 14px);\n transition: color 0.2s;\n\n &::placeholder {\n color: var(--ease-input-placeholder-color, var(--color-gray-600));\n opacity: 1;\n }\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n `,\n template(this: Input) {\n return html`\n <div part=\"container\" data-headless=${Boolean(this.headless)}>\n <slot name=\"prefix\" part=\"prefix\"></slot>\n <input part=\"control\" .disabled=${Boolean(this.disabled)} ?disabled=${Boolean(this.disabled)} ?aria-disabled=${Boolean(this.disabled)} />\n \n <slot name=\"suffix\" part=\"suffix\"></slot>\n </div>\n `;\n }\n})\nexport class Input extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Prop<string | null>({ reflect: true })\n accessor placeholder!: string | null;\n\n @Prop<string>({ reflect: true, defaultValue: 'text' })\n accessor type!: string;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor disabled = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor headless = false;\n\n @Query<HTMLInputElement>('input')\n accessor control!: HTMLInputElement | null;\n\n private updatePrefixAttribute(): void {\n const container = this.shadowRoot?.querySelector('[part=\"container\"]');\n if (!container) {\n return;\n }\n\n const prefixSlot = this.shadowRoot?.querySelector('slot[name=\"prefix\"]') as HTMLSlotElement;\n const hasPrefix = Boolean(prefixSlot?.assignedNodes({ flatten: true }).length > 0);\n setBooleanAttribute(container, 'data-has-prefix', hasPrefix);\n }\n\n private updateSuffixAttribute(): void {\n const container = this.shadowRoot?.querySelector('[part=\"container\"]');\n if (!container) {\n return;\n }\n\n const suffixSlot = this.shadowRoot?.querySelector('slot[name=\"suffix\"]') as HTMLSlotElement;\n const hasSuffix = Boolean(suffixSlot?.assignedNodes({ flatten: true }).length > 0);\n setBooleanAttribute(container, 'data-has-suffix', hasSuffix);\n }\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n const value = this.value ?? '';\n\n if (control.value !== value) {\n control.value = value;\n }\n\n control.type = this.type ?? 'text';\n control.placeholder = this.placeholder ?? '';\n control.name = this.name ?? '';\n control.disabled = Boolean(this.disabled);\n\n this.updatePrefixAttribute();\n this.updateSuffixAttribute();\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen('slotchange', { selector: 'slot[name=\"prefix\"]' })\n onPrefixSlotChange(): void {\n this.updatePrefixAttribute();\n }\n\n @Listen('slotchange', { selector: 'slot[name=\"suffix\"]' })\n onSuffixSlotChange(): void {\n this.updateSuffixAttribute();\n }\n\n @Listen<Input, Event, HTMLInputElement>('input', { selector: 'input' })\n handleInput(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = target.value;\n dispatchControlEvent(this, 'input', { value: this.value ?? '', event });\n }\n\n @Listen<Input, Event, HTMLInputElement>('change', { selector: 'input' })\n handleChange(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = target.value;\n dispatchControlEvent(this, 'change', { value: this.value ?? '', event });\n }\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent } from '../shared';\nimport {\n COLOR_FORMATS,\n type ColorFormat,\n getColorComponents,\n type HSV,\n hexToHsv,\n hsvToHex,\n hsvToRgb,\n isLightColor,\n isValidHex,\n updateHsvFromComponents\n} from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\nimport { styleMap } from '~/utils/template-helpers';\nimport '../icons/interface/arrows-vertical';\nimport '../icons/interface/picker';\n\n@Component({\n tag: 'ease-color-picker',\n autoSlot: false,\n styles: `\n :host {\n display: grid;\n grid-gap: 8px;\n user-select: none;\n -webkit-user-select: none;\n\n --ease-color-picker-width: 180px;\n }\n\n [part=\"saturation\"] {\n position: relative;\n width: 100%;\n height: 124px;\n cursor: pointer;\n background-image: linear-gradient(to top, black, transparent), linear-gradient(to right, white, transparent);\n border-radius: 7px;\n touch-action: none;\n }\n\n [part=\"saturation-handle\"] {\n position: absolute;\n width: 10px;\n height: 10px;\n box-shadow: inset 0 0 0 2px var(--color-blue-100);\n border-radius: 50%;\n pointer-events: none;\n }\n\n [part=\"hue\"] {\n position: relative;\n height: 8px;\n align-self: center;\n flex-grow: 1;\n cursor: pointer;\n border-radius: 9px;\n background-image: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00);\n touch-action: none;\n }\n\n [part=\"hue-handle\"] {\n position: absolute;\n top: 0;\n width: 8px;\n height: 8px;\n box-shadow: inset 0 0 0 2px var(--color-blue-100);\n border-radius: 50%;\n pointer-events: none;\n }\n\n [part=\"preview\"] {\n position: relative;\n width: 20px;\n height: 20px;\n border-radius: 5px;\n box-shadow: inset 0 0 0 .75px var(--color-blue-80);\n display: grid;\n place-items: center;\n\n &[data-eyedropper] {\n cursor: pointer;\n\n &:hover,\n &:focus-visible {\n ease-icon-picker {\n scale: 1.1;\n }\n }\n\n ease-icon-picker {\n color: var(--icon-color, var(--color-blue-100));\n transition: scale 0.2s, color 0.15s;\n filter: drop-shadow(0 0 2px var(--color-black-15));\n }\n }\n }\n\n [part=\"toolbar\"] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n position: relative;\n z-index: 1;\n }\n\n [part=\"toolbar\"] ease-button {\n padding: 4px;\n width: max-content;\n }\n\n [part=\"format-container\"] {\n display: grid;\n grid-template-columns: 30px 1fr;\n align-items: center;\n gap: 8px;\n }\n\n [part=\"format-inputs\"] {\n padding: 2px 4px;\n width: 100%;\n border-radius: var(--ease-color-picker-format-radius, var(--radii-md));\n background-color: var(--ease-color-picker-format-background, var(--color-gray-850));\n cursor: pointer;\n box-shadow: var(\n --ease-color-picker-format-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n box-sizing: border-box;\n display: flex;\n justify-content: space-around;\n\n &:hover,\n &:focus-within {\n background-color: var(--ease-color-picker-format-background-hover, var(--color-gray-825));\n }\n }\n\n [part=\"format-input\"] {\n appearance: none;\n -moz-appearance: textfield;\n cursor: pointer;\n box-sizing: border-box;\n font-size: var(--ease-color-picker-format-font-size, 11px);\n font-weight: 500;\n color: var(--color-gray-600);\n min-width: 0;\n box-sizing: border-box;\n border: none;\n outline: none;\n padding: 4px;\n margin: 0;\n background-color: transparent;\n line-height: 12px;\n transition: color 0.2s;\n width: 100%;\n text-align: center;\n font-optical-sizing: auto;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n\n &:hover,\n &:focus-within {\n color: var(--color-blue-100);\n }\n\n &::placeholder {\n color: var(--color-gray-800);\n opacity: 1;\n }\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n\n [part=\"color-container\"] {\n display: grid;\n grid-template-columns: 1fr 20px;\n align-items: center;\n gap: 8px;\n }\n\n [part=\"format-trigger\"] {\n --ease-icon-size: var(--ease-color-picker-format-icon-size, 10px);\n\n display: flex;\n align-items: center;\n gap: 2px;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n font-optical-sizing: auto;\n font-size: var(--ease-color-picker-format-trigger-font-size, 10px);\n font-weight: 500;\n color: var(--color-gray-400);\n cursor: pointer;\n transition: color 0.15s;\n overflow: hidden;\n position: relative;\n height: 14px;\n\n &:hover {\n color: var(--color-gray-200);\n }\n\n ease-icon-arrows-vertical {\n color: var(--color-gray-600);\n flex-shrink: 0;\n }\n }\n\n [part=\"format-label\"] {\n display: inline-block;\n }\n\n [part=\"format-label\"][data-animating=\"out\"] {\n animation: formatOut 0.15s ease-in forwards;\n }\n\n [part=\"format-label\"][data-animating=\"in\"] {\n animation: formatIn 0.15s ease-out forwards;\n }\n\n @keyframes formatOut {\n 0% {\n transform: translateY(0) scale(1);\n opacity: 1;\n }\n 100% {\n transform: translateY(6px) scale(0.8);\n opacity: 0;\n }\n }\n\n @keyframes formatIn {\n 0% {\n transform: translateY(-6px) scale(0.8);\n opacity: 0;\n }\n 100% {\n transform: translateY(0) scale(1);\n opacity: 1;\n }\n }\n\n `,\n template(this: ColorPicker) {\n const { h, s, v } = this.hsv;\n const pureHue = hsvToRgb(h, 1, 1);\n const currentRgb = hsvToRgb(h, s, v);\n const saturationBg = `rgb(${pureHue.r}, ${pureHue.g}, ${pureHue.b})`;\n const huePercent = h / 360;\n const vInverted = 1 - v;\n // Position handles so they stay within container bounds (handle is 10px)\n const saturationHandleStyles = {\n left: `calc(${s * 100}% - ${s * 10}px)`,\n top: `calc(${vInverted * 100}% - ${vInverted * 10}px)`\n } as const;\n const hueHandleStyles = {\n left: `calc(${huePercent * 100}% - ${huePercent * 10}px)`\n } as const;\n const isLight = isLightColor(currentRgb.r, currentRgb.g, currentRgb.b);\n const hasEyeDropper = 'EyeDropper' in window;\n const previewStyles = {\n backgroundColor: this.value,\n '--icon-color': isLight ? 'var(--color-gray-900)' : 'var(--color-blue-100)'\n } as const;\n const components = getColorComponents(this.hsv, this.format);\n\n return html`\n <div \n part=\"saturation\" \n style=${styleMap({ backgroundColor: saturationBg })}\n @pointerdown=${this.handleSaturationPointerDown}\n @pointermove=${this.handleSaturationPointerMove}\n @pointerup=${this.handleSaturationPointerUp}\n @pointercancel=${this.handleSaturationPointerUp}\n >\n <div part=\"saturation-handle\" style=${styleMap(saturationHandleStyles)}></div>\n </div>\n <div part=\"color-container\">\n <div \n part=\"hue\"\n @pointerdown=${this.handleHuePointerDown}\n @pointermove=${this.handleHuePointerMove}\n @pointerup=${this.handleHuePointerUp}\n @pointercancel=${this.handleHuePointerUp}\n >\n <div part=\"hue-handle\" style=${styleMap(hueHandleStyles)}></div>\n </div>\n\n <div \n part=\"preview\" \n style=${styleMap(previewStyles)}\n ?data-eyedropper=${hasEyeDropper}\n @click=${hasEyeDropper ? this.handleEyeDropperClick : null}\n >\n ${hasEyeDropper ? html`<ease-icon-picker></ease-icon-picker>` : null}\n </div>\n </div>\n <div part=\"format-container\">\n <div part=\"format-trigger\" @click=${this.handleFormatCycle}>\n <span part=\"format-label\" data-animating=${this.formatAnimating}>${this.format.toUpperCase()}</span>\n <ease-icon-arrows-vertical />\n </div>\n <div part=\"format-inputs\">\n ${\n this.format === 'hex'\n ? html`\n <input \n part=\"format-input\" \n data-hex\n type=\"text\" \n .value=${components.values[0]}\n @input=${(e: Event) => this.handleComponentChange(0, (e.target as HTMLInputElement).value)}\n />\n `\n : components.labels.map(\n (_, i) => html`\n <input \n part=\"format-input\" \n type=\"number\" \n min=\"0\"\n max=${components.max[i]}\n .value=${String(components.values[i])}\n @input=${(e: Event) => this.handleComponentChange(i, Number((e.target as HTMLInputElement).value))}\n />\n `\n )\n }\n </div>\n </div>\n <div part=\"toolbar\">\n <ease-button variant=\"headless-muted\" @click=${this.handleCancelButtonClick}>Cancel</ease-button>\n <ease-button variant=\"headless\" @click=${this.handleApplyButtonClick}>Apply</ease-button>\n </div>\n `;\n }\n})\nexport class ColorPicker extends HTMLElement {\n declare requestRender: () => void;\n\n private hsv: HSV = { h: 0, s: 1, v: 1 };\n private originalValue: string = '#FF0000';\n private format: ColorFormat = 'hex';\n formatAnimating: 'out' | 'in' | 'none' = 'none';\n #isDraggingSaturation = false;\n #isDraggingHue = false;\n #activeSaturationPointer: number | null = null;\n #activeHuePointer: number | null = null;\n isInternalUpdate = false;\n\n @Query('[part=\"saturation\"]') accessor saturationArea!: HTMLElement | null;\n @Query('[part=\"hue\"]') accessor hueArea!: HTMLElement | null;\n @Query<HTMLInputElement>('[part=\"hex-input\"]') accessor hexInput!: HTMLInputElement | null;\n\n @Prop({\n reflect: true,\n defaultValue: '#FF0000',\n onChange(this: ColorPicker, value: string | null) {\n if (!this.isInternalUpdate) {\n this.updateFromHex(value ?? '#FF0000');\n }\n }\n })\n accessor value!: string;\n\n connectedCallback(): void {\n this.originalValue = this.value;\n this.updateFromHex(this.value);\n }\n\n private updateFromHex(hex: string): void {\n if (!isValidHex(hex)) {\n return;\n }\n\n const hsv = hexToHsv(hex);\n\n if (hsv) {\n this.hsv = hsv;\n }\n }\n\n #updateValue(event: Event | null): void {\n const newValue = hsvToHex(this.hsv.h, this.hsv.s, this.hsv.v);\n\n if (this.value !== newValue) {\n this.isInternalUpdate = true;\n this.value = newValue;\n this.isInternalUpdate = false;\n\n if (this.hexInput && document.activeElement !== this.hexInput) {\n this.hexInput.value = newValue;\n }\n\n if (event) {\n dispatchControlEvent(this, 'input', { value: this.value, event });\n }\n }\n }\n\n readonly handleSaturationPointerDown = (event: PointerEvent): void => {\n if (!this.saturationArea) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n this.#isDraggingSaturation = true;\n this.#activeSaturationPointer = event.pointerId;\n this.saturationArea.setPointerCapture(event.pointerId);\n this.updateSaturationValue(event);\n };\n\n readonly handleSaturationPointerMove = (event: PointerEvent): void => {\n if (!this.#isDraggingSaturation || event.pointerId !== this.#activeSaturationPointer) {\n return;\n }\n\n event.preventDefault();\n this.updateSaturationValue(event);\n };\n\n readonly handleSaturationPointerUp = (event: PointerEvent): void => {\n if (!this.#isDraggingSaturation || event.pointerId !== this.#activeSaturationPointer) {\n return;\n }\n\n this.#isDraggingSaturation = false;\n this.#activeSaturationPointer = null;\n\n if (this.saturationArea?.hasPointerCapture(event.pointerId)) {\n this.saturationArea.releasePointerCapture(event.pointerId);\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n\n private updateSaturationValue(event: PointerEvent): void {\n if (!this.saturationArea) {\n return;\n }\n const rect = this.saturationArea.getBoundingClientRect();\n const x = Math.max(0, Math.min(rect.width, event.clientX - rect.left));\n const y = Math.max(0, Math.min(rect.height, event.clientY - rect.top));\n\n this.hsv.s = x / rect.width;\n this.hsv.v = 1 - y / rect.height;\n\n this.#updateValue(event);\n this.requestRender();\n }\n\n readonly handleHuePointerDown = (event: PointerEvent): void => {\n if (!this.hueArea) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n this.#isDraggingHue = true;\n this.#activeHuePointer = event.pointerId;\n this.hueArea.setPointerCapture(event.pointerId);\n this.updateHue(event);\n };\n\n readonly handleHuePointerMove = (event: PointerEvent): void => {\n if (!this.#isDraggingHue || event.pointerId !== this.#activeHuePointer) {\n return;\n }\n\n event.preventDefault();\n this.updateHue(event);\n };\n\n readonly handleHuePointerUp = (event: PointerEvent): void => {\n if (!this.#isDraggingHue || event.pointerId !== this.#activeHuePointer) {\n return;\n }\n\n this.#isDraggingHue = false;\n this.#activeHuePointer = null;\n\n if (this.hueArea?.hasPointerCapture(event.pointerId)) {\n this.hueArea.releasePointerCapture(event.pointerId);\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n\n private updateHue(event: PointerEvent): void {\n if (!this.hueArea) {\n return;\n }\n const rect = this.hueArea.getBoundingClientRect();\n const x = Math.max(0, Math.min(rect.width, event.clientX - rect.left));\n\n this.hsv.h = (x / rect.width) * 360;\n\n this.#updateValue(event);\n this.requestRender();\n }\n\n readonly handleHexInputChange = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n const newValue = input.value;\n\n if (isValidHex(newValue)) {\n this.updateFromHex(newValue);\n this.#updateValue(event);\n this.requestRender();\n dispatchControlEvent(this, 'change', { value: this.value, event });\n } else if (this.hexInput) {\n this.hexInput.value = this.value;\n }\n };\n\n readonly handleComponentChange = (index: number, value: number | string): void => {\n this.hsv = updateHsvFromComponents(this.hsv, this.format, index, value);\n this.#updateValue(null);\n this.requestRender();\n };\n\n readonly handleFormatChange = (format: ColorFormat): void => {\n this.format = format;\n this.requestRender();\n };\n\n readonly handleFormatCycle = (): void => {\n // Start exit animation\n this.formatAnimating = 'out';\n this.requestRender();\n\n // After exit animation, change format and start enter animation\n setTimeout(() => {\n const currentIndex = COLOR_FORMATS.indexOf(this.format);\n const nextIndex = (currentIndex + 1) % COLOR_FORMATS.length;\n this.format = COLOR_FORMATS[nextIndex] as ColorFormat;\n this.formatAnimating = 'in';\n this.requestRender();\n\n // Clear animation state after enter animation\n setTimeout(() => {\n this.formatAnimating = 'none';\n this.requestRender();\n }, 150);\n }, 150);\n };\n\n readonly handleCancelButtonClick = (event: Event): void => {\n this.updateFromHex(this.originalValue);\n this.isInternalUpdate = true;\n this.value = this.originalValue;\n this.isInternalUpdate = false;\n this.requestRender();\n dispatchControlEvent(this, 'cancel', { value: this.originalValue, event });\n };\n\n readonly handleApplyButtonClick = (event: Event): void => {\n this.originalValue = this.value;\n dispatchControlEvent(this, 'apply', { value: this.value, event });\n };\n\n readonly handleEyeDropperClick = async (event: Event): Promise<void> => {\n if (!('EyeDropper' in window)) {\n return;\n }\n\n try {\n const eyeDropper = new (\n window as typeof window & { EyeDropper: new () => { open: () => Promise<{ sRGBHex: string }> } }\n ).EyeDropper();\n const result = await eyeDropper.open();\n\n if (result.sRGBHex) {\n this.updateFromHex(result.sRGBHex);\n this.#updateValue(event);\n this.requestRender();\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n } catch {\n // User cancelled or API error - silently ignore\n }\n };\n}\n\nexport default {\n ColorPicker\n};\n","export interface RGB {\n r: number;\n g: number;\n b: number;\n}\n\nexport interface HSV {\n h: number;\n s: number;\n v: number;\n}\n\nexport interface HSL {\n h: number;\n s: number;\n l: number;\n}\n\nexport type ColorFormat = 'hex' | 'rgb' | 'hsl' | 'hsb';\n\nconst clamp01 = (value: number) => Math.max(0, Math.min(1, value));\n\nexport function hsvToRgb(h: number, s: number, v: number): RGB {\n let hue = ((h % 360) + 360) % 360;\n hue /= 60;\n\n const saturation = clamp01(s);\n const value = clamp01(v);\n const c = value * saturation;\n const x = c * (1 - Math.abs((hue % 2) - 1));\n const m = value - c;\n\n let r = 0;\n let g = 0;\n let b = 0;\n\n if (hue < 1) {\n r = c;\n g = x;\n } else if (hue < 2) {\n r = x;\n g = c;\n } else if (hue < 3) {\n g = c;\n b = x;\n } else if (hue < 4) {\n g = x;\n b = c;\n } else if (hue < 5) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255)\n };\n}\n\nexport function rgbToHsv(r: number, g: number, b: number): HSV {\n const rn = r / 255;\n const gn = g / 255;\n const bn = b / 255;\n\n const max = Math.max(rn, gn, bn);\n const min = Math.min(rn, gn, bn);\n const delta = max - min;\n\n let h = 0;\n const s = max === 0 ? 0 : delta / max;\n const v = max;\n\n if (delta !== 0) {\n switch (max) {\n case rn:\n h = (gn - bn) / delta + (gn < bn ? 6 : 0);\n break;\n case gn:\n h = (bn - rn) / delta + 2;\n break;\n case bn:\n h = (rn - gn) / delta + 4;\n break;\n default:\n break;\n }\n\n h *= 60;\n }\n\n return { h, s, v };\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n const toHex = (component: number) => component.toString(16).padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toUpperCase();\n}\n\nexport function hexToRgb(hex: string): RGB | null {\n let normalized = hex.trim();\n\n if (/^#([0-9a-f]{3})$/i.test(normalized)) {\n normalized = `#${normalized[1]}${normalized[1]}${normalized[2]}${normalized[2]}${normalized[3]}${normalized[3]}`;\n }\n\n const match = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(normalized);\n\n if (!match || !match[1] || !match[2] || !match[3]) {\n return null;\n }\n\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16)\n };\n}\n\nexport function hexToHsv(hex: string): HSV | null {\n const rgb = hexToRgb(hex);\n return rgb ? rgbToHsv(rgb.r, rgb.g, rgb.b) : null;\n}\n\nexport function hsvToHex(h: number, s: number, v: number): string {\n const rgb = hsvToRgb(h, s, v);\n return rgbToHex(rgb.r, rgb.g, rgb.b);\n}\n\nexport function isValidHex(hex: string): boolean {\n return /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(hex.trim());\n}\n\nexport function getLuminance(r: number, g: number, b: number): number {\n return (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n}\n\nexport function isLightColor(r: number, g: number, b: number): boolean {\n return getLuminance(r, g, b) > 0.5;\n}\n\nexport function hsvToHsl(h: number, s: number, v: number): HSL {\n const l = v * (1 - s / 2);\n const sl = l === 0 || l === 1 ? 0 : (v - l) / Math.min(l, 1 - l);\n return { h, s: sl, l };\n}\n\nexport function hslToHsv(h: number, s: number, l: number): HSV {\n const v = l + s * Math.min(l, 1 - l);\n const sv = v === 0 ? 0 : 2 * (1 - l / v);\n return { h, s: sv, v };\n}\n\nexport function formatColor(hsv: HSV, format: ColorFormat, alpha = 1): string {\n const { h, s, v } = hsv;\n\n switch (format) {\n case 'hex':\n return hsvToHex(h, s, v);\n case 'rgb': {\n const rgb = hsvToRgb(h, s, v);\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;\n }\n case 'hsl': {\n const hsl = hsvToHsl(h, s, v);\n return `hsla(${Math.round(hsl.h)}, ${Math.round(hsl.s * 100)}%, ${Math.round(hsl.l * 100)}%, ${alpha})`;\n }\n case 'hsb':\n return `hsb(${Math.round(h)}, ${Math.round(s * 100)}%, ${Math.round(v * 100)}%)`;\n default:\n return hsvToHex(h, s, v);\n }\n}\n\nexport interface ColorComponents {\n labels: string[];\n values: (string | number)[];\n max: number[];\n suffix: string[];\n}\n\nexport function getColorComponents(hsv: HSV, format: ColorFormat): ColorComponents {\n const { h, s, v } = hsv;\n\n switch (format) {\n case 'hex':\n return {\n labels: ['Hex'],\n values: [hsvToHex(h, s, v)],\n max: [0],\n suffix: ['']\n };\n case 'rgb': {\n const rgb = hsvToRgb(h, s, v);\n return {\n labels: ['R', 'G', 'B'],\n values: [rgb.r, rgb.g, rgb.b],\n max: [255, 255, 255],\n suffix: ['', '', '']\n };\n }\n case 'hsl': {\n const hsl = hsvToHsl(h, s, v);\n return {\n labels: ['H', 'S', 'L'],\n values: [Math.round(hsl.h), Math.round(hsl.s * 100), Math.round(hsl.l * 100)],\n max: [360, 100, 100],\n suffix: ['°', '%', '%']\n };\n }\n case 'hsb':\n return {\n labels: ['H', 'S', 'B'],\n values: [Math.round(h), Math.round(s * 100), Math.round(v * 100)],\n max: [360, 100, 100],\n suffix: ['°', '%', '%']\n };\n default:\n return {\n labels: ['Hex'],\n values: [hsvToHex(h, s, v)],\n max: [0],\n suffix: ['']\n };\n }\n}\n\nexport function updateHsvFromComponents(hsv: HSV, format: ColorFormat, index: number, value: number | string): HSV {\n const newHsv = { ...hsv };\n\n switch (format) {\n case 'hex': {\n if (typeof value === 'string' && isValidHex(value)) {\n const parsed = hexToHsv(value);\n if (parsed) {\n return parsed;\n }\n }\n break;\n }\n case 'rgb': {\n const rgb = hsvToRgb(hsv.h, hsv.s, hsv.v);\n const vals: [number, number, number] = [rgb.r, rgb.g, rgb.b];\n vals[index] = Math.max(0, Math.min(255, Number(value)));\n return rgbToHsv(vals[0], vals[1], vals[2]);\n }\n case 'hsl': {\n const hsl = hsvToHsl(hsv.h, hsv.s, hsv.v);\n const vals: [number, number, number] = [hsl.h, hsl.s * 100, hsl.l * 100];\n vals[index] = Number(value);\n vals[0] = Math.max(0, Math.min(360, vals[0]));\n vals[1] = Math.max(0, Math.min(100, vals[1]));\n vals[2] = Math.max(0, Math.min(100, vals[2]));\n return hslToHsv(vals[0], vals[1] / 100, vals[2] / 100);\n }\n case 'hsb': {\n const vals: [number, number, number] = [hsv.h, hsv.s * 100, hsv.v * 100];\n vals[index] = Number(value);\n vals[0] = Math.max(0, Math.min(360, vals[0]));\n vals[1] = Math.max(0, Math.min(100, vals[1]));\n vals[2] = Math.max(0, Math.min(100, vals[2]));\n return { h: vals[0], s: vals[1] / 100, v: vals[2] / 100 };\n }\n }\n\n return newHsv;\n}\n\nexport const COLOR_FORMATS: ColorFormat[] = ['hex', 'rgb', 'hsl', 'hsb'];\n","import type { TemplateResult } from 'lit-html';\n\nimport { nothing } from 'lit-html';\nimport { classMap } from 'lit-html/directives/class-map.js';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport { repeat } from 'lit-html/directives/repeat.js';\nimport { styleMap } from 'lit-html/directives/style-map.js';\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js';\nimport { when } from 'lit-html/directives/when.js';\n\nexport { classMap, styleMap, when, repeat, unsafeHTML, ifDefined };\n\nexport function renderIf<T>(\n condition: T | undefined | null,\n template: TemplateResult | (() => TemplateResult)\n): TemplateResult | typeof nothing {\n if (!condition) {\n return nothing;\n }\n\n return typeof template === 'function' ? template() : template;\n}\n\nexport function renderList<T>(\n items: readonly T[],\n template: (item: T, index: number) => TemplateResult,\n key: (item: T, index: number) => unknown = (item) => item\n): ReturnType<typeof repeat> {\n return repeat(items, key, template);\n}\n\nexport function styleObject(input: Record<string, string | number | null | undefined>): ReturnType<typeof styleMap> {\n const definedEntries = Object.entries(input).reduce<Record<string, string>>((acc, [property, value]) => {\n if (value === null || value === undefined || value === '') {\n return acc;\n }\n\n acc[property] = typeof value === 'number' ? `${value}` : value;\n return acc;\n }, {});\n\n return styleMap(definedEntries);\n}\n\nexport const optionalAttribute = ifDefined;\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-arrows-vertical',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 24px);\n height: var(--ease-icon-size, 24px);\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 9.00006L11.1161 5.88394C11.6043 5.39578 12.3957 5.39578 12.8839 5.88394L16 9.00006M8 15.0001L11.1161 18.1162C11.6043 18.6043 12.3957 18.6043 12.8839 18.1162L16 15.0001\" />\n </svg>\n `;\n }\n})\nexport class IconArrowsVertical extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-picker',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"picker\"] {\n display: block;\n width: 12px;\n height: 12px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.25;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg part=\"picker\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 3.50003L8.5 7.00003M2.14645 7.85358L7.5 2.50003C8.05228 1.94774 8.94772 1.94774 9.5 2.50003C10.0523 3.05231 10.0523 3.94774 9.5 4.50003L4.14645 9.85358C4.05268 9.94735 3.9255 10 3.79289 10H2.5C2.22386 10 2 9.77617 2 9.50003V8.20714C2 8.07453 2.05268 7.94735 2.14645 7.85358Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n `;\n }\n})\nexport class IconPicker extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\n@Component({\n tag: 'ease-field',\n autoSlot: false,\n shadowMode: 'open',\n styles: `\n :host {\n display: block;\n width: 100%;\n }\n\n [part=\"field\"] {\n display: grid;\n grid-template-columns: var(--ease-field-label-width, 36%) auto;\n column-gap: var(--ease-field-column-gap, 12px);\n row-gap: var(--ease-field-row-gap, 6px);\n align-items: center;\n width: 100%;\n min-height: var(--ease-field-min-height, 30px);\n margin: 0;\n padding: 0;\n }\n\n :host([full-width]) [part=\"field\"] {\n grid-template-columns: 1fr;\n }\n\n label {\n grid-column: 1;\n font-size: var(--ease-field-label-font-size, var(--ease-font-size-sm, 12px));\n line-height: var(--ease-field-label-line-height, 1.25);\n font-weight: var(--ease-field-label-font-weight, 400);\n text-wrap: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n padding-left: var(--ease-field-label-padding-left, 4px);\n box-sizing: border-box;\n display: block;\n max-width: 100%;\n color: var(--ease-field-label-color, var(--color-gray-600));\n }\n\n [part=\"content\"] {\n grid-column: 2;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n :host([full-width]) [part=\"content\"] {\n grid-column: 1;\n align-items: stretch;\n }\n `,\n template(this: Field) {\n return html`\n <div part=\"field\">\n <label>\n ${this.label ?? ''}\n </label>\n\n <div part=\"content\" class=${this.fullWidth ? 'full-width' : ''}>\n <slot></slot>\n </div>\n </div>\n `;\n }\n})\nexport class Field extends HTMLElement {\n @Prop<string | null>({ reflect: true })\n accessor label!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor fullWidth = false;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-clear',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: .75;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n\n [part=\"clear\"] {\n & > path {\n\n &:first-child {\n translate: var(--ease-icon-clear-path-translate, 0);\n transition: translate var(--ease-icon-clear-path-duration, 0.2s);\n transition-delay: var(--ease-icon-clear-path-delay, 0s);\n }\n\n &:not(:first-child) {\n stroke-dasharray: 100 0 100;\n stroke-dashoffset: var(--ease-icon-clear-lines-offset, 100);\n transition: stroke-dashoffset var(--ease-icon-clear-lines-duration, 0.2s);\n transition-delay: var(--ease-icon-clear-lines-delay, 0s);\n }\n }\n\n g {\n path {\n transform-box: fill-box;\n transform-origin: 50% 50%;\n transition: rotate var(--ease-icon-clear-star-duration, 0.2s), scale var(--ease-icon-clear-star-duration, 0.2s);\n\n &:first-child {\n rotate: var(--ease-icon-clear-star-1-rotate, 0deg);\n scale: var(--ease-icon-clear-star-1-scale, 1);\n transition-delay: var(--ease-icon-clear-star-1-delay, 0s);\n }\n\n &:last-child {\n rotate: var(--ease-icon-clear-star-2-rotate, 0deg);\n scale: var(--ease-icon-clear-star-2-scale, 1);\n transition-delay: var(--ease-icon-clear-star-2-delay, 0s);\n }\n }\n }\n }\n `,\n template() {\n return html`\n <svg part=\"clear\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.7613 10.334L13.7071 12.2798C14.1011 12.6739 14.1011 13.3127 13.7071 13.7067C13.3131 14.1007 12.6742 14.1007 12.2802 13.7067L10.3344 11.7609M11.7613 10.334L10.9541 8.08932M11.7613 10.334L10.3344 11.7609M10.3344 11.7609L8.08973 10.9537M6.69581 12.3476L12.348 6.69544C12.6942 6.34922 12.6942 5.7879 12.348 5.44168L11.892 4.98574C11.5458 4.63952 10.9845 4.63952 10.6383 4.98574L4.9861 10.6379C4.63989 10.9841 4.63989 11.5454 4.9861 11.8917L5.44204 12.3476C5.78826 12.6938 6.34959 12.6938 6.69581 12.3476Z\" />\n <g>\n <path d=\"M3.3313 2.6645H4.66519M3.99824 1.99756V3.33145\" />\n <path d=\"M4.66516 5.99946H5.99905M5.33211 5.33252V6.66641\" />\n </g>\n <path d=\"M7.33301 1.99756L8.6669 3.33145\" pathlength=\"100\" />\n <path d=\"M3.6648 8.33386L1.99744 6.6665\" pathlength=\"100\" />\n </svg>\n `;\n }\n})\nexport class IconClear extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype GridState = 'show' | 'hide';\n\n@Component({\n tag: 'ease-icon-grid',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"grid\"] {\n --ease-icon-grid-offset: 100;\n --ease-icon-grid-rotate: 0deg;\n\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: .75;\n stroke-linecap: round;\n stroke-linejoin: round;\n\n g {\n &:first-of-type {\n path {\n stroke-dasharray: 100 0 100;\n stroke-dashoffset: var(--ease-icon-grid-offset);\n transition: stroke-dashoffset 0.2s;\n }\n }\n\n &:last-child {\n transform-origin: 72.92% 72.92%;\n transition: rotate 0.35s linear(0, 0.472 7.5%, 0.832 15.5%, 0.97 19.7%, 1.081 24%, 1.166 28.5%, 1.226 33.2%, 1.255 36.9%, 1.271 40.8%, 1.275 44.9%, 1.266 49.4%, 1.222 57.8%, 1.092 75.1%, 1.042 83%, 1.01 91.4%, 1);\n rotate: var(--ease-icon-grid-rotate);\n }\n }\n\n [data-state=\"hide\"] {\n --ease-icon-grid-offset: 200;\n --ease-icon-grid-rotate: 45deg;\n }\n }\n `,\n observedAttributes: ['state']\n})\nexport class IconGrid extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<GridState>({\n reflect: true,\n attribute: 'state',\n defaultValue: 'show'\n })\n accessor state!: GridState;\n\n render(): TemplateResult {\n return html`\n <svg part=\"grid\" viewBox=\"0 0 12 12\" state=${this.state} xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.5018 5.49971V3.99909C10.5018 2.6178 9.38204 1.49805 8.00076 1.49805H3.99909C2.6178 1.49805 1.49805 2.6178 1.49805 3.99909V8.00076C1.49805 9.38204 2.6178 10.5018 3.99909 10.5018H5.49971\" />\n <g data-state=${this.state}>\n <path d=\"M7.50059 1.49805V5.49971\" pathlength=\"100\" />\n <path d=\"M4.49937 1.49805V10.5018\" pathlength=\"100\" />\n <path d=\"M1.49805 7.47081H5.49971\" pathlength=\"100\" />\n <path d=\"M1.49805 4.46934H10.5018\" pathlength=\"100\" />\n </g>\n <path d=\"M8.75118 11.0019C7.50813 11.0018 6.50043 9.99415 6.50024 8.7511C6.51896 7.51461 7.5176 6.51719 8.75412 6.5C9.99728 6.50081 11.0044 7.50925 11.0036 8.75241C11.0028 9.99556 9.99434 11.0027 8.75118 11.0019\" />\n <g data-state=${this.state}>\n <path d=\"M8.7512 7.86672V9.63523\" />\n <path d=\"M9.63545 8.75098H7.86694\" />\n </g>\n </svg>\n `;\n }\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-loading',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n\n [part=\"loading\"] {\n transform-origin: center center;\n animation-name: loading, loading-dash, loading-dash-offset;\n animation-duration: .4s, .8s, .8s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n stroke-dasharray: 35 65 35 65;\n stroke-dashoffset: 75;\n }\n\n @keyframes loading {\n 0% {\n transform: rotate(-90deg);\n }\n 100% {\n transform: rotate(270deg);\n }\n }\n\n @keyframes loading-dash {\n 33% {\n stroke-dasharray: 15 85 15 85;\n }\n 66% {\n stroke-dasharray: 45 55 45 55;\n }\n }\n\n @keyframes loading-dash-offset {\n 33% {\n stroke-dashoffset: 55;\n }\n 66% {\n stroke-dashoffset: 85;\n }\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"4.5\" stroke-opacity=\"0.25\" />\n <circle cx=\"6\" cy=\"6\" r=\"4.5\" part=\"loading\" pathlength=\"100\" />\n </svg>\n `;\n }\n})\nexport class Loading extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype SnapState = 'active' | 'default';\n\n@Component({\n tag: 'ease-icon-snap',\n styles: `\n :host {\n display: contents;\n }\n [part=\"snap\"] {\n --ease-icon-snap-cursor-rotate: 0deg;\n --ease-icon-snap-lines-rotate: 0deg;\n --ease-icon-snap-lines-translate: 0 0;\n --ease-icon-snap-lines-translate-1: 0 0;\n --ease-icon-snap-lines-translate-2: 0 0;\n --ease-icon-snap-lines-translate-3: 0 0;\n --ease-icon-snap-lines-translate-4: 0 0;\n --ease-icon-snap-lines-rotate-1: 0deg;\n --ease-icon-snap-lines-rotate-2: 0deg;\n --ease-icon-snap-lines-rotate-3: 0deg;\n --ease-icon-snap-lines-rotate-4: 0deg;\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: .75;\n stroke-linecap: round;\n stroke-linejoin: round;\n g {\n transform-origin: 68.75% 68.75%;\n &:first-child {\n rotate: var(--ease-icon-snap-cursor-rotate);\n transition: rotate 0.2s;\n\n path {\n transition: d 0.2s;\n }\n }\n &:last-child {\n rotate: var(--ease-icon-snap-lines-rotate);\n translate: var(--ease-icon-snap-lines-translate);\n transition: rotate 0.2s, translate 0.2s;\n path {\n transition: translate 0.2s;\n transform-box: fill-box;\n transform-origin: 50% 50%;\n &:nth-child(1) {\n translate: var(--ease-icon-snap-lines-translate-1);\n rotate: var(--ease-icon-snap-lines-rotate-1);\n }\n &:nth-child(2) {\n translate: var(--ease-icon-snap-lines-translate-2);\n rotate: var(--ease-icon-snap-lines-rotate-2);\n }\n &:nth-child(3) {\n translate: var(--ease-icon-snap-lines-translate-3);\n rotate: var(--ease-icon-snap-lines-rotate-3);\n }\n &:nth-child(4) {\n translate: var(--ease-icon-snap-lines-translate-4);\n rotate: var(--ease-icon-snap-lines-rotate-4);\n }\n }\n }\n }\n }\n [part=\"cursor\"] {\n stroke: transparent;\n stroke-width: 0;\n fill: currentColor;\n }\n [state=\"active\"] {\n --ease-icon-snap-cursor-rotate: -90deg;\n --ease-icon-snap-lines-rotate: -90deg;\n --ease-icon-snap-lines-translate: -2.25px -2.25px;\n --ease-icon-snap-lines-translate: -2.25px -2.25px;\n --ease-icon-snap-lines-translate-1: 1.25px .5px;\n --ease-icon-snap-lines-translate-2: 1.25px -.15px;\n --ease-icon-snap-lines-translate-3: .15px -1.25px;\n --ease-icon-snap-lines-translate-4: -.5px -1.25px;\n --ease-icon-snap-lines-rotate-1: 5deg;\n --ease-icon-snap-lines-rotate-2: 20deg;\n --ease-icon-snap-lines-rotate-3: -20deg;\n --ease-icon-snap-lines-rotate-4: -5deg;\n }\n `,\n observedAttributes: ['state']\n})\nexport class Snap extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<SnapState>({\n reflect: true,\n attribute: 'state',\n defaultValue: 'default'\n })\n accessor state!: SnapState;\n\n render(): TemplateResult {\n const defaultPath =\n 'M8.48446 6.48383C8.59007 6.37822 8.71218 6.29901 8.84253 6.24620C8.97289 6.19340 9.11149 6.16699 9.25009 6.16699C9.38869 6.16699 9.52729 6.19340 9.65764 6.24620C9.78799 6.29901 9.91009 6.37822 10.01570 6.48383C10.12128 6.58940 10.20044 6.71143 10.25320 6.84168C10.30597 6.97193 10.33233 7.11041 10.33231 7.24889C10.33229 7.38738 10.30589 7.52587 10.25312 7.65615C10.20034 7.78642 10.12120 7.90848 10.01570 8.01410C9.88354 8.14659 9.75139 8.27907 9.61923 8.41156C9.54601 8.48478 9.44981 8.52139 9.35361 8.52139C9.25741 8.52139 9.16120 8.48478 9.08798 8.41156C9.01476 8.33834 8.97815 8.24214 8.97815 8.14594C8.97815 8.04974 9.01476 7.95353 9.08798 7.88031C9.22014 7.74815 9.35230 7.61599 9.48446 7.48383C9.54924 7.41905 9.58163 7.33401 9.58163 7.24896C9.58163 7.16392 9.54924 7.07888 9.48446 7.01410C9.41974 6.94964 9.33492 6.91741 9.25009 6.91741C9.16526 6.91741 9.08043 6.94963 9.01571 7.01410C8.88355 7.14659 8.75139 7.27907 8.61923 7.41156C8.54601 7.48478 8.44981 7.52139 8.35361 7.52139C8.25741 7.52139 8.16120 7.48478 8.08798 7.41156C8.01476 7.33834 7.97815 7.24214 7.97815 7.14594C7.97815 7.04974 8.01476 6.95354 8.08798 6.88031C8.22014 6.74815 8.35230 6.61599 8.48446 6.48383C8.48446 6.48383 8.48446 6.48383 8.48446 6.48383Z';\n\n const defaultPath2 =\n 'M6.88092 8.08737C6.91753 8.05076 6.95989 8.02330 7.00512 8.00500C7.05035 7.98669 7.09845 7.97754 7.14655 7.97754C7.24275 7.97754 7.33895 8.01415 7.41217 8.08737C7.44878 8.12398 7.47624 8.16634 7.49454 8.21156C7.51285 8.25679 7.52200 8.30489 7.52200 8.35299C7.52200 8.40110 7.51285 8.44920 7.49454 8.49443C7.47624 8.53965 7.44878 8.58201 7.41217 8.61862C7.34593 8.68470 7.27968 8.75078 7.21344 8.81686C7.14720 8.88294 7.08095 8.94902 7.01471 9.01510C6.95024 9.07982 6.91802 9.16465 6.91802 9.24948C6.91802 9.33431 6.95025 9.41914 7.01471 9.48385C7.07949 9.54863 7.16453 9.58102 7.24957 9.58102C7.33462 9.58102 7.41966 9.54863 7.48444 9.48385C7.55052 9.41777 7.61660 9.35169 7.68268 9.28561C7.74876 9.21953 7.81484 9.15345 7.88092 9.08737C7.91753 9.05076 7.95989 9.02330 8.00512 9.00500C8.05035 8.98669 8.09845 8.97754 8.14655 8.97754C8.24275 8.97754 8.33895 9.01415 8.41217 9.08737C8.44878 9.12398 8.47624 9.16634 8.49454 9.21156C8.51285 9.25679 8.52200 9.30489 8.52200 9.35299C8.52200 9.44920 8.48539 9.54540 8.41217 9.61862C8.34593 9.68470 8.27968 9.75078 8.21344 9.81686C8.14720 9.88294 8.08095 9.94902 8.01471 10.01510C7.96190 10.06785 7.90498 10.11401 7.84498 10.15358C7.78498 10.19315 7.72189 10.22613 7.65676 10.25252C7.59162 10.27890 7.52443 10.29870 7.45621 10.31190C7.38799 10.32510 7.31875 10.33170 7.24950 10.33171C7.18026 10.33172 7.11102 10.32514 7.04281 10.31195C6.97460 10.29877 6.90741 10.27898 6.84229 10.25260C6.77716 10.22622 6.71409 10.19324 6.65411 10.15365C6.59413 10.11407 6.53723 10.06789 6.48444 10.01510C6.43163 9.96230 6.38543 9.90537 6.34582 9.84534C6.30622 9.78532 6.27322 9.72221 6.24681 9.65703C6.22041 9.59186 6.20061 9.52462 6.18740 9.45635C6.17420 9.38808 6.16760 9.31878 6.16760 9.24948C6.16760 9.18018 6.17420 9.11088 6.18740 9.04261C6.20061 8.97434 6.22041 8.90710 6.24681 8.84192C6.27322 8.77675 6.30622 8.71363 6.34582 8.65361C6.38543 8.59359 6.43163 8.53666 6.48444 8.48385C6.55052 8.41777 6.61660 8.35169 6.68268 8.28561C6.74876 8.21953 6.81484 8.15345 6.88092 8.08737C6.88092 8.08737 6.88092 8.08737 6.88092 8.08737Z';\n\n const activePath =\n 'M9.25193 6.28166C9.4768 6.23094 9.80415 6.20744 10.0781 6.48185C10.3368 6.74117 10.3461 7.05052 10.3008 7.29338C10.2792 7.40896 10.2435 7.52323 10.2119 7.61955C10.1784 7.72179 10.1479 7.80498 10.124 7.89201C10.12433 7.89234 10.12467 7.89266 10.125 7.89299C9.92512 8.64299 9.72525 9.39300 9.52537 10.14300C9.47203 10.34300 9.2664 10.46180 9.06638 10.40860C8.86627 10.35520 8.74739 10.14970 8.80076 9.94963C9.00063 9.19963 9.20050 8.44963 9.40037 7.69963C9.40069 7.69898 9.40102 7.69832 9.40134 7.69767C9.43192 7.58586 9.47025 7.47290 9.49900 7.38517C9.53005 7.29041 9.55180 7.21804 9.56345 7.15568C9.58449 7.04289 9.56329 7.02762 9.54685 7.01115C9.54547 7.00815 9.54373 6.98452 9.41697 7.01310C9.34508 7.02932 9.27319 7.05278 9.16502 7.08537C9.07787 7.11162 8.97189 7.13866 8.85837 7.15764C8.85870 7.15796 8.85902 7.15829 8.85935 7.15861C8.10935 7.35848 7.35935 7.55835 6.60935 7.75822C6.40924 7.81159 6.20373 7.69271 6.15037 7.49260C6.09724 7.29260 6.21600 7.08695 6.41599 7.03361C7.16599 6.83374 7.91599 6.63387 8.66599 6.43400C8.68104 6.42999 8.69646 6.42733 8.71189 6.42521C8.78100 6.41576 8.85573 6.39545 8.94822 6.36760C9.03125 6.34259 9.14580 6.30560 9.25193 6.28166C9.25193 6.28166 9.25193 6.28166 9.25193 6.28166Z';\n\n const activePath2 =\n 'M6.30855 7.08196C6.48218 6.9692 6.71426 7.01871 6.8271 7.19231C6.93984 7.36595 6.89035 7.59803 6.71675 7.71087C6.55769 7.8143 6.51399 7.8829 6.50288 7.9052C6.50718 7.91375 6.51671 7.92905 6.53804 7.95208C6.59186 8.01016 6.676 8.06871 6.76265 8.11614C6.80333 8.1384 6.83994 8.15555 6.86519 8.16692C6.87727 8.17236 6.88667 8.1762 6.89253 8.17864C6.89522 8.17976 6.89739 8.18117 6.89839 8.18157C6.92411 8.19492 6.94982 8.20826 6.97554 8.22161C7.34059 8.4726 7.44425 8.52362 7.48433 8.54387C7.51885 8.56133 7.56761 8.58533 7.62788 8.63665C7.66711 8.67009 7.71609 8.719 7.77827 8.78118C7.84064 8.84354 7.88955 8.89167 7.9228 8.93059C7.97354 8.98999 7.99693 9.03787 8.0146 9.07219C8.02503 9.09247 8.04365 9.12833 8.09077 9.20501C8.1741 9.33099 8.25744 9.45696 8.34077 9.58294C8.35477 9.60931 8.36876 9.63567 8.38276 9.66204C8.38276 9.66171 8.38276 9.66139 8.38276 9.66106C8.38311 9.66194 8.3836 9.6642 8.38472 9.66692C8.38713 9.67278 8.39182 9.68272 8.39741 9.69524C8.40866 9.72041 8.42527 9.75637 8.44722 9.7968C8.49432 9.88353 8.55171 9.96872 8.60933 10.0224C8.63022 10.0418 8.64563 10.0499 8.65425 10.0546C8.67716 10.0429 8.74616 9.99929 8.84858 9.84173C8.96155 9.66836 9.19361 9.61954 9.36714 9.73235C9.54063 9.84525 9.59026 10.0773 9.47749 10.2509C9.29202 10.5362 9.06335 10.7493 8.77534 10.7988C8.47563 10.8502 8.24137 10.7041 8.09858 10.5712C7.95494 10.4374 7.85125 10.2716 7.78804 10.1552C7.75497 10.0943 7.72938 10.0401 7.71187 10.0009C7.70702 9.99006 7.70284 9.98022 7.69917 9.97161C7.45448 9.61671 7.38641 9.49034 7.34761 9.41497C7.34662 9.41306 7.34544 9.41155 7.34468 9.41009C7.33244 9.39698 7.30693 9.37136 7.24702 9.31145C7.18316 9.24759 7.15849 9.22387 7.14644 9.21282C7.07033 9.17434 6.9431 9.10751 6.58589 8.86321C6.57737 8.85954 6.56726 8.85532 6.55659 8.85052C6.51749 8.83289 6.46383 8.80746 6.40327 8.77434C6.28687 8.71066 6.12089 8.60606 5.98726 8.46184C5.85457 8.31851 5.70938 8.0836 5.76069 7.78411C5.81025 7.49606 6.02305 7.26752 6.30855 7.08196C6.30855 7.08196 6.30855 7.08196 6.30855 7.08196Z';\n\n const path1 = this.state === 'active' ? activePath : defaultPath;\n const path2 = this.state === 'active' ? activePath2 : defaultPath2;\n\n return html`\n <svg part=\"snap\" viewBox=\"0 0 12 12\" state=${this.state} xmlns=\"http://www.w3.org/2000/svg\">\n <g part=\"cursor\">\n <path d=${path1} />\n <path d=${path2} />\n </g>\n \n <path d=\"M2.5 3.5V8.5\" />\n <path d=\"M9.5 5V3.5\" />\n <path d=\"M3.5 9.5H5\" />\n <path d=\"M8.5 2.5H3.5\" />\n \n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.5 3.5V3.5C1.948 3.5 1.5 3.052 1.5 2.5V2.5C1.5 1.948 1.948 1.5 2.5 1.5V1.5C3.052 1.5 3.5 1.948 3.5 2.5V2.5C3.5 3.052 3.052 3.5 2.5 3.5Z\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.5 3.5V3.5C8.948 3.5 8.5 3.052 8.5 2.5V2.5C8.5 1.948 8.948 1.5 9.5 1.5V1.5C10.052 1.5 10.5 1.948 10.5 2.5V2.5C10.5 3.052 10.052 3.5 9.5 3.5Z\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.5 10.5V10.5C1.948 10.5 1.5 10.052 1.5 9.5V9.5C1.5 8.948 1.948 8.5 2.5 8.5V8.5C3.052 8.5 3.5 8.948 3.5 9.5V9.5C3.5 10.052 3.052 10.5 2.5 10.5Z\" />\n \n <g part=\"lines\">\n <path d=\"M7.5 6V6.5\" />\n <path d=\"M6.5 7.5H6\" />\n <path d=\"M9 10.5V10\" />\n <path d=\"M10 9H10.5\" />\n </g>\n </svg>\n `;\n }\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-anchor-add',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: none;\n stroke: currentColor;\n stroke-width: 0.75;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.70508 10.5003L5.30008 7.90527\" />\n <path d=\"M6.59557 6.61121C6.95348 6.96913 6.95348 7.54942 6.59557 7.90734C6.23765 8.26525 5.65736 8.26525 5.29944 7.90734C4.94153 7.54942 4.94153 6.96913 5.29944 6.61121C5.65736 6.25329 6.23765 6.25329 6.59557 6.61121\" />\n <path d=\"M9.20703 6.50016L8.39453 8.93866C8.27903 9.28516 7.98353 9.54066 7.62453 9.60616L2.70703 10.5002L3.39036 6.74393M9.20006 6.50016L9.72739 5.98984C10.2895 5.4459 10.2968 4.54693 9.74375 3.99385L9.22391 3.47402C8.68351 2.93361 7.80957 2.92644 7.26038 3.45792L6.98022 3.72904\" />\n <path d=\"M3.49931 5.54525C2.36926 5.54516 1.45317 4.62914 1.453 3.49909C1.47001 2.37501 2.37788 1.46826 3.50198 1.45264C4.63212 1.45337 5.54769 2.37013 5.54695 3.50028C5.54621 4.63042 4.62945 5.54599 3.49931 5.54525\" />\n <path d=\"M3.4993 2.69516V4.30289\" />\n <path d=\"M4.30317 3.49902H2.69543\" />\n </svg>\n `;\n }\n})\nexport class IconAnchorAdd extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-anchor-remove',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: none;\n stroke: currentColor;\n stroke-width: 0.75;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.70508 10.5003L5.30008 7.90527\" />\n <path d=\"M6.59557 6.61121C6.95348 6.96913 6.95348 7.54942 6.59557 7.90734C6.23765 8.26525 5.65736 8.26525 5.29944 7.90734C4.94153 7.54942 4.94153 6.96913 5.29944 6.61121C5.65736 6.25329 6.23765 6.25329 6.59557 6.61121\" />\n <path d=\"M9.20703 6.50016L8.39453 8.93866C8.27903 9.28516 7.98353 9.54066 7.62453 9.60616L2.70703 10.5002L3.39036 6.74393M9.20006 6.50016L9.72739 5.98984C10.2895 5.4459 10.2968 4.54693 9.74375 3.99385L9.22391 3.47402C8.68351 2.93361 7.80957 2.92644 7.26038 3.45792L6.98022 3.72904\" />\n <path d=\"M3.49931 5.54525C2.36926 5.54516 1.45317 4.62914 1.453 3.49909C1.47001 2.37501 2.37788 1.46826 3.50198 1.45264C4.63212 1.45337 5.54769 2.37013 5.54695 3.50028C5.54621 4.63042 4.62945 5.54599 3.49931 5.54525\" />\n <path d=\"M4.30317 3.49902H2.69543\" />\n </svg>\n `;\n }\n})\nexport class IconAnchorRemove extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-arrow-up',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.99992 12.6666V3.33331M6.99992 3.33331L2.33325 7.99998M6.99992 3.33331L11.6666 7.99998\" />\n </svg>\n `;\n }\n})\nexport class ArrowUp extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.44279 8.84005C9.56156 9.00972 9.79538 9.05098 9.96505 8.93221C10.1347 8.81344 10.176 8.57962 10.0572 8.40995L9.75 8.625L9.44279 8.84005ZM1.94279 8.40995C1.82402 8.57962 1.86528 8.81344 2.03495 8.93221C2.20462 9.05098 2.43844 9.00972 2.55721 8.84005L2.25 8.625L1.94279 8.40995ZM7.21875 4.21875H6.84375C6.84375 4.68474 6.46599 5.0625 6 5.0625V5.4375V5.8125C6.8802 5.8125 7.59375 5.09895 7.59375 4.21875H7.21875ZM6 5.4375V5.0625C5.53401 5.0625 5.15625 4.68474 5.15625 4.21875H4.78125H4.40625C4.40625 5.09895 5.1198 5.8125 6 5.8125V5.4375ZM4.78125 4.21875H5.15625C5.15625 3.75276 5.53401 3.375 6 3.375V3V2.625C5.1198 2.625 4.40625 3.33855 4.40625 4.21875H4.78125ZM6 3V3.375C6.46599 3.375 6.84375 3.75276 6.84375 4.21875H7.21875H7.59375C7.59375 3.33855 6.8802 2.625 6 2.625V3ZM7.125 4.875L6.81779 5.09005L9.44279 8.84005L9.75 8.625L10.0572 8.40995L7.43221 4.65995L7.125 4.875ZM4.875 4.875L4.56779 4.65995L1.94279 8.40995L2.25 8.625L2.55721 8.84005L5.18221 5.09005L4.875 4.875Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezier extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-angle',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.875 4.21875C1.875 4.63296 1.53921 4.96875 1.125 4.96875C0.710786 4.96875 0.375 4.63296 0.375 4.21875C0.375 3.80454 0.710786 3.46875 1.125 3.46875C1.53921 3.46875 1.875 3.80454 1.875 4.21875Z\" fill-opacity=\"0.9\"/>\n <path d=\"M1.64062 4.21875C1.64062 3.93398 1.40977 3.70312 1.125 3.70312C0.840228 3.70312 0.609375 3.93398 0.609375 4.21875C0.609375 4.50352 0.840228 4.73438 1.125 4.73438C1.40977 4.73438 1.64062 4.50352 1.64062 4.21875ZM2.10938 4.21875C2.10938 4.76241 1.66866 5.20312 1.125 5.20312C0.581345 5.20312 0.140625 4.76241 0.140625 4.21875C0.140625 3.67509 0.581345 3.23438 1.125 3.23438C1.66866 3.23438 2.10938 3.67509 2.10938 4.21875Z\" />\n <path d=\"M9.23535 6.49023L8.76465 6.94727L6.88965 5.00977L7.36035 4.55273L9.23535 6.49023Z\" />\n <path d=\"M10.25 7.34375C10.25 7.75796 9.91421 8.09375 9.5 8.09375C9.08579 8.09375 8.75 7.75796 8.75 7.34375C8.75 6.92954 9.08579 6.59375 9.5 6.59375C9.91421 6.59375 10.25 6.92954 10.25 7.34375Z\" fill-opacity=\"0.9\"/>\n <path d=\"M10.0156 7.34375C10.0156 7.05898 9.78477 6.82812 9.5 6.82812C9.21523 6.82812 8.98438 7.05898 8.98438 7.34375C8.98438 7.62852 9.21523 7.85938 9.5 7.85938C9.78477 7.85938 10.0156 7.62852 10.0156 7.34375ZM10.4844 7.34375C10.4844 7.88741 10.0437 8.32812 9.5 8.32812C8.95634 8.32812 8.51562 7.88741 8.51562 7.34375C8.51562 6.80009 8.95634 6.35938 9.5 6.35938C10.0437 6.35938 10.4844 6.80009 10.4844 7.34375Z\" />\n <path d=\"M6.84375 4.21875C6.84375 3.75276 6.46599 3.375 6 3.375C5.53401 3.375 5.15625 3.75276 5.15625 4.21875C5.15625 4.68474 5.53401 5.0625 6 5.0625C6.46599 5.0625 6.84375 4.68474 6.84375 4.21875ZM7.59375 4.21875C7.59375 5.09895 6.8802 5.8125 6 5.8125C5.1198 5.8125 4.40625 5.09895 4.40625 4.21875C4.40625 3.33855 5.1198 2.625 6 2.625C6.8802 2.625 7.59375 3.33855 7.59375 4.21875Z\" />\n <path d=\"M1.5 9C1.5 6.96377 2.30291 5.79798 3.14746 5.15137C3.56202 4.83404 3.9757 4.65002 4.28613 4.54492C4.44174 4.49225 4.57289 4.45885 4.66699 4.43848C4.71396 4.42831 4.75192 4.42158 4.7793 4.41699C4.79301 4.41469 4.80424 4.41234 4.8125 4.41113C4.81637 4.41057 4.81967 4.41051 4.82227 4.41016C4.82361 4.40997 4.82519 4.40931 4.82617 4.40918H4.82812L4.92188 5.15332C4.91878 5.15377 4.91158 5.15487 4.90332 5.15625C4.8868 5.15902 4.86011 5.16334 4.8252 5.1709C4.75525 5.18605 4.6519 5.21238 4.52637 5.25488C4.27438 5.34019 3.93785 5.49035 3.60254 5.74707C2.94718 6.24896 2.25 7.19277 2.25 9C2.25 9.20711 2.08211 9.375 1.875 9.375C1.66789 9.375 1.5 9.20711 1.5 9ZM7.5127 9C7.5127 7.09758 7.32324 6.08783 7.15039 5.56738C7.06453 5.30889 6.98595 5.1804 6.94434 5.125C6.92803 5.1033 6.91762 5.09324 6.91504 5.09082C6.91648 5.09202 6.92022 5.09529 6.92676 5.09961C6.93038 5.102 6.93521 5.10442 6.94043 5.10742C6.94302 5.10891 6.94624 5.11071 6.94922 5.1123C6.95072 5.1131 6.9525 5.11442 6.9541 5.11523L6.95703 5.11621L6.95801 5.11719L7.29199 4.44531L7.29297 4.44629C7.29386 4.44673 7.29499 4.4468 7.2959 4.44727C7.29775 4.44821 7.29983 4.44917 7.30176 4.4502C7.30557 4.45222 7.30938 4.45469 7.31348 4.45703C7.32177 4.46178 7.33053 4.46749 7.33984 4.47363C7.35849 4.48593 7.37956 4.50097 7.40137 4.51953C7.44494 4.55668 7.49313 4.60714 7.54395 4.6748C7.64536 4.80983 7.75747 5.0154 7.8623 5.33105C8.07087 5.95905 8.2627 7.0587 8.2627 9C8.2627 9.20711 8.0948 9.375 7.8877 9.375C7.68065 9.37492 7.5127 9.20706 7.5127 9Z\" />\n <path d=\"M2.04004 3.89014H4.71004V4.55014H2.04004V3.89014Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierAngle extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-distribute',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.125 5.64502C5.33211 5.64502 5.5 5.81291 5.5 6.02002C5.5 6.22713 5.33211 6.39502 5.125 6.39502H2.5C2.29289 6.39502 2.125 6.22713 2.125 6.02002C2.125 5.81291 2.29289 5.64502 2.5 5.64502H5.125Z\" />\n <path d=\"M2.125 6.02002C2.125 5.81313 1.95689 5.64502 1.75 5.64502C1.54311 5.64502 1.375 5.81313 1.375 6.02002C1.375 6.22691 1.54311 6.39502 1.75 6.39502C1.95689 6.39502 2.125 6.22691 2.125 6.02002ZM2.875 6.02002C2.875 6.64113 2.37111 7.14502 1.75 7.14502C1.12889 7.14502 0.625 6.64113 0.625 6.02002C0.625 5.39891 1.12889 4.89502 1.75 4.89502C2.37111 4.89502 2.875 5.39891 2.875 6.02002Z\" />\n <path d=\"M6.5 5.67285C6.5 5.60396 6.44389 5.54785 6.375 5.54785H5.625C5.55611 5.54785 5.5 5.60396 5.5 5.67285V6.42285C5.5 6.49174 5.55611 6.54785 5.625 6.54785H6.375C6.44389 6.54785 6.5 6.49174 6.5 6.42285V5.67285ZM7.25 6.42285C7.25 6.90596 6.85811 7.29785 6.375 7.29785H5.625C5.14189 7.29785 4.75 6.90596 4.75 6.42285V5.67285C4.75 5.18974 5.14189 4.79785 5.625 4.79785H6.375C6.85811 4.79785 7.25 5.18974 7.25 5.67285V6.42285Z\" />\n <path d=\"M3.125 9.25C3.125 9.18111 3.06889 9.125 3 9.125H2.25C2.18111 9.125 2.125 9.18111 2.125 9.25V10C2.125 10.0689 2.18111 10.125 2.25 10.125H3C3.06889 10.125 3.125 10.0689 3.125 10V9.25ZM3.875 10C3.875 10.4831 3.48311 10.875 3 10.875H2.25C1.76689 10.875 1.375 10.4831 1.375 10V9.25C1.375 8.76689 1.76689 8.375 2.25 8.375H3C3.48311 8.375 3.875 8.76689 3.875 9.25V10Z\" />\n <path d=\"M9.797 2C9.797 1.93111 9.74089 1.875 9.672 1.875H8.922C8.85285 1.875 8.797 1.93086 8.797 2V2.75C8.797 2.81889 8.8531 2.875 8.922 2.875H9.672C9.74089 2.875 9.797 2.81889 9.797 2.75V2ZM10.547 2.75C10.547 3.23311 10.1551 3.625 9.672 3.625H8.922C8.43889 3.625 8.047 3.23311 8.047 2.75V2C8.047 1.51714 8.43815 1.125 8.922 1.125H9.672C10.1551 1.125 10.547 1.51689 10.547 2V2.75Z\" />\n <path d=\"M9.33883 2.87576C9.54514 2.89263 9.69927 3.07377 9.68258 3.28005C9.56091 4.76814 8.50457 5.99034 7.09078 6.34255C6.88985 6.39261 6.6858 6.27003 6.6357 6.06912C6.58565 5.86818 6.70822 5.66414 6.90914 5.61404C8.01222 5.33926 8.83909 4.38526 8.93453 3.21951C8.9514 3.01316 9.1325 2.859 9.33883 2.87576Z\" />\n <path d=\"M9.5 5.60498C9.70711 5.60498 9.875 5.77287 9.875 5.97998C9.875 6.18709 9.70711 6.35498 9.5 6.35498H6.875C6.66789 6.35498 6.5 6.18709 6.5 5.97998C6.5 5.77287 6.66789 5.60498 6.875 5.60498H9.5Z\" />\n <path d=\"M10.625 5.97998C10.625 5.77309 10.4569 5.60498 10.25 5.60498C10.0431 5.60498 9.875 5.77309 9.875 5.97998C9.875 6.18687 10.0431 6.35498 10.25 6.35498C10.4569 6.35498 10.625 6.18687 10.625 5.97998ZM11.375 5.97998C11.375 6.60109 10.8711 7.10498 10.25 7.10498C9.62889 7.10498 9.125 6.60109 9.125 5.97998C9.125 5.35887 9.62889 4.85498 10.25 4.85498C10.8711 4.85498 11.375 5.35887 11.375 5.97998Z\" />\n <path d=\"M4.83132 5.65719C5.03226 5.60714 5.23631 5.72969 5.28639 5.93062C5.33644 6.13153 5.21382 6.33557 5.01296 6.3857C3.90988 6.66049 3.08301 7.61448 2.98757 8.78023C2.9707 8.98655 2.78956 9.14068 2.58327 9.12398C2.37696 9.10711 2.22283 8.92597 2.23952 8.71969C2.36119 7.23157 3.41749 6.00938 4.83132 5.65719Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierDistribute extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-length',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.84375 4.21875C6.84375 3.75276 6.46599 3.375 6 3.375C5.53401 3.375 5.15625 3.75276 5.15625 4.21875C5.15625 4.68474 5.53401 5.0625 6 5.0625C6.46599 5.0625 6.84375 4.68474 6.84375 4.21875ZM7.59375 4.21875C7.59375 5.09895 6.8802 5.8125 6 5.8125C5.1198 5.8125 4.40625 5.09895 4.40625 4.21875C4.40625 3.33855 5.1198 2.625 6 2.625C6.8802 2.625 7.59375 3.33855 7.59375 4.21875Z\" />\n <path d=\"M2.48438 4.21875C2.48438 4.76241 2.04366 5.20312 1.5 5.20312C0.956345 5.20312 0.515625 4.76241 0.515625 4.21875C0.515625 3.67509 0.956345 3.23438 1.5 3.23438C2.04366 3.23438 2.48438 3.67509 2.48438 4.21875Z\" />\n <path d=\"M10.4844 4.21875C10.4844 4.76241 10.0437 5.20312 9.5 5.20312C8.95634 5.20312 8.51562 4.76241 8.51562 4.21875C8.51562 3.67509 8.95634 3.23438 9.5 3.23438C10.0437 3.23438 10.4844 3.67509 10.4844 4.21875Z\" />\n <path d=\"M1.5 9C1.5 6.96377 2.30291 5.79798 3.14746 5.15137C3.56202 4.83404 3.9757 4.65002 4.28613 4.54492C4.44174 4.49225 4.57289 4.45885 4.66699 4.43848C4.71396 4.42831 4.75192 4.42158 4.7793 4.41699C4.79301 4.41469 4.80424 4.41234 4.8125 4.41113C4.81637 4.41057 4.81967 4.41051 4.82227 4.41016L4.82617 4.40918H4.82812L4.92188 5.15332C4.91878 5.15377 4.91158 5.15487 4.90332 5.15625C4.8868 5.15902 4.86011 5.16334 4.8252 5.1709C4.75525 5.18605 4.6519 5.21238 4.52637 5.25488C4.27438 5.34019 3.93785 5.49035 3.60254 5.74707C2.94718 6.24896 2.25 7.19277 2.25 9C2.25 9.20711 2.08211 9.375 1.875 9.375C1.66789 9.375 1.5 9.20711 1.5 9ZM9.75 9C9.75 7.19277 9.05282 6.24896 8.39746 5.74707C8.06215 5.49035 7.72562 5.34019 7.47363 5.25488C7.3481 5.21238 7.24475 5.18605 7.1748 5.1709C7.13989 5.16334 7.1132 5.15902 7.09668 5.15625C7.08842 5.15487 7.0822 5.15377 7.0791 5.15332L7.17188 4.40918H7.17383L7.17773 4.41016C7.18033 4.41051 7.18363 4.41057 7.1875 4.41113C7.19576 4.41234 7.20699 4.41469 7.2207 4.41699C7.24808 4.42158 7.28604 4.42831 7.33301 4.43848C7.42711 4.45885 7.55826 4.49225 7.71387 4.54492C8.0243 4.65002 8.43798 4.83404 8.85254 5.15137C9.69709 5.79798 10.5 6.96377 10.5 9C10.5 9.20711 10.3321 9.375 10.125 9.375C9.91789 9.375 9.75 9.20711 9.75 9Z\" />\n <path d=\"M1.96997 3.83984H4.59997V4.49984H1.96997V3.83984Z\" />\n <path d=\"M6.96997 3.83984H8.59997V4.49984H6.96997V3.83984Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierLength extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-mirror',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.84375 4.21875C6.84375 3.75276 6.46599 3.375 6 3.375C5.53401 3.375 5.15625 3.75276 5.15625 4.21875C5.15625 4.68474 5.53401 5.0625 6 5.0625C6.46599 5.0625 6.84375 4.68474 6.84375 4.21875ZM7.59375 4.21875C7.59375 5.09895 6.8802 5.8125 6 5.8125C5.1198 5.8125 4.40625 5.09895 4.40625 4.21875C4.40625 3.33855 5.1198 2.625 6 2.625C6.8802 2.625 7.59375 3.33855 7.59375 4.21875Z\" />\n <path d=\"M2.48438 4.21875C2.48438 4.76241 2.04366 5.20312 1.5 5.20312C0.956345 5.20312 0.515625 4.76241 0.515625 4.21875C0.515625 3.67509 0.956345 3.23438 1.5 3.23438C2.04366 3.23438 2.48438 3.67509 2.48438 4.21875Z\" />\n <path d=\"M11.4844 4.21875C11.4844 4.76241 11.0437 5.20312 10.5 5.20312C9.95634 5.20312 9.51562 4.76241 9.51562 4.21875C9.51562 3.67509 9.95634 3.23438 10.5 3.23438C11.0437 3.23438 11.4844 3.67509 11.4844 4.21875Z\" />\n <path d=\"M1.5 9C1.5 6.96377 2.30291 5.79798 3.14746 5.15137C3.56202 4.83404 3.9757 4.65002 4.28613 4.54492C4.44174 4.49225 4.57289 4.45885 4.66699 4.43848C4.71396 4.42831 4.75192 4.42158 4.7793 4.41699C4.79301 4.41469 4.80424 4.41234 4.8125 4.41113C4.81637 4.41057 4.81967 4.41051 4.82227 4.41016C4.82361 4.40997 4.82519 4.40931 4.82617 4.40918H4.82812L4.92188 5.15332C4.91878 5.15377 4.91158 5.15487 4.90332 5.15625C4.8868 5.15902 4.86011 5.16334 4.8252 5.1709C4.75525 5.18605 4.6519 5.21238 4.52637 5.25488C4.27438 5.34019 3.93785 5.49035 3.60254 5.74707C2.94718 6.24896 2.25 7.19277 2.25 9C2.25 9.20711 2.08211 9.375 1.875 9.375C1.66789 9.375 1.5 9.20711 1.5 9ZM9.75 9C9.75 7.19277 9.05282 6.24896 8.39746 5.74707C8.06215 5.49035 7.72562 5.34019 7.47363 5.25488C7.3481 5.21238 7.24475 5.18605 7.1748 5.1709C7.13989 5.16334 7.1132 5.15902 7.09668 5.15625C7.08842 5.15487 7.0822 5.15377 7.0791 5.15332L7.17188 4.40918H7.17383C7.17481 4.40931 7.17639 4.40997 7.17773 4.41016C7.18033 4.41051 7.18363 4.41057 7.1875 4.41113C7.19576 4.41234 7.20699 4.41469 7.2207 4.41699C7.24808 4.42158 7.28604 4.42831 7.33301 4.43848C7.42711 4.45885 7.55826 4.49225 7.71387 4.54492C8.0243 4.65002 8.43798 4.83404 8.85254 5.15137C9.69709 5.79798 10.5 6.96377 10.5 9C10.5 9.20711 10.3321 9.375 10.125 9.375C9.91789 9.375 9.75 9.20711 9.75 9Z\" />\n <path d=\"M1.96997 3.83984H4.59997V4.49984H1.96997V3.83984Z\" />\n <path d=\"M6.96997 3.83984H9.59997V4.49984H6.96997V3.83984Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierMirror extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-check',\n styles: `\n :host {\n display: block;\n width: 12px;\n height: 12px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3 6.5L5.33333 9L10 4\" path-length=\"100\" />\n </svg>\n `;\n }\n})\nexport class IconCheck extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-circle-arrow-left',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14.6667 6.66667C14.6667 6.66667 13.33 4.84548 12.2441 3.75883C11.1582 2.67218 9.6576 2 8 2C4.68629 2 2 4.68629 2 8C2 11.3137 4.68629 14 8 14C10.7354 14 13.0433 12.1695 13.7655 9.66667M14.6667 6.66667V2.66667M14.6667 6.66667H10.6667\" />\n </svg>\n `;\n }\n})\nexport class IconCircleArrowLeft extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-circle-arrow-right',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.33333 6.66667C1.33333 6.66667 2.66999 4.84548 3.75589 3.75883C4.84179 2.67218 6.3424 2 8 2C11.3137 2 14 4.68629 14 8C14 11.3137 11.3137 14 8 14C5.2646 14 2.95674 12.1695 2.23451 9.66667M1.33333 6.66667V2.66667M1.33333 6.66667H5.33333\" />\n </svg>\n `;\n }\n})\nexport class IconCircleArrowRight extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-code',\n styles: `\n :host {\n display: block;\n width: 12px;\n height: 12px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 9L11 6L8 3M4 3L1 6L4 9\" />\n </svg>\n `;\n }\n})\nexport class IconCode extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-dots',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8.00008 8.66655C8.36827 8.66655 8.66675 8.36808 8.66675 7.99989C8.66675 7.6317 8.36827 7.33322 8.00008 7.33322C7.63189 7.33322 7.33341 7.6317 7.33341 7.99989C7.33341 8.36808 7.63189 8.66655 8.00008 8.66655Z\" />\n <path d=\"M12.6667 8.66655C13.0349 8.66655 13.3334 8.36808 13.3334 7.99989C13.3334 7.6317 13.0349 7.33322 12.6667 7.33322C12.2986 7.33322 12.0001 7.6317 12.0001 7.99989C12.0001 8.36808 12.2986 8.66655 12.6667 8.66655Z\" />\n <path d=\"M3.33341 8.66655C3.7016 8.66655 4.00008 8.36808 4.00008 7.99989C4.00008 7.6317 3.7016 7.33322 3.33341 7.33322C2.96522 7.33322 2.66675 7.6317 2.66675 7.99989C2.66675 8.36808 2.96522 8.66655 3.33341 8.66655Z\" />\n </svg>\n `;\n }\n})\nexport class IconDots extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-mention',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.4 5.59963V8.59962C10.4 9.07701 10.5896 9.53485 10.9272 9.87242C11.2648 10.21 11.7226 10.3996 12.2 10.3996C12.6774 10.3996 13.1352 10.21 13.4728 9.87242C13.8104 9.53485 14 9.07701 14 8.59962V7.99962C13.9999 6.64544 13.5417 5.33111 12.7 4.27035C11.8582 3.20958 10.6823 2.46476 9.36359 2.15701C8.04484 1.84925 6.66076 1.99665 5.43641 2.57525C4.21206 3.15384 3.21944 4.1296 2.61996 5.34386C2.02048 6.55812 1.84939 7.93947 2.13451 9.26329C2.41963 10.5871 3.14419 11.7756 4.19038 12.6354C5.23657 13.4952 6.54286 13.9758 7.89684 13.9991C9.25083 14.0224 10.5729 13.587 11.648 12.7636M10.4 7.99962C10.4 9.32511 9.32549 10.3996 8 10.3996C6.67452 10.3996 5.6 9.32511 5.6 7.99962C5.6 6.67414 6.67452 5.59963 8 5.59963C9.32549 5.59963 10.4 6.67414 10.4 7.99962Z\" />\n </svg>\n `;\n }\n})\nexport class IconMention extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-minus',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 7.99995H11\" />\n </svg>\n `;\n }\n})\nexport class IconMinus extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-plus',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8.00018 4.28591C8.00018 4.28591 8.00018 8.42263 8.00018 11.714M4.28613 7.99995H11.7142\" />\n </svg>\n `;\n }\n})\nexport class IconPlus extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-settings',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 5.33319L10 5.33319M10 5.33319C10 6.43776 10.8954 7.33319 12 7.33319C13.1046 7.33319 14 6.43776 14 5.33319C14 4.22862 13.1046 3.33319 12 3.33319C10.8954 3.33319 10 4.22862 10 5.33319ZM6 10.6665L14 10.6665M6 10.6665C6 11.7711 5.10457 12.6665 4 12.6665C2.89543 12.6665 2 11.7711 2 10.6665C2 9.56195 2.89543 8.66652 4 8.66652C5.10457 8.66652 6 9.56195 6 10.6665Z\" />\n </svg>\n `;\n }\n})\nexport class Settings extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype LogoLoaderState = 'idle' | 'intro' | 'loop' | 'exit';\n\nexport type LogoIntroVariant = 'wave' | 'particle';\n\ninterface DotData {\n id: string;\n cx: number;\n cy: number;\n}\n\nconst CENTER = { x: 74, y: 74 };\n\nconst DOTS_DATA: DotData[] = [\n { id: 'dot-1', cx: 7.22725, cy: 73.99975 },\n { id: 'dot-2', cx: 8.0, cy: 107.63685 },\n { id: 'dot-3', cx: 41.36365, cy: 7.72734 },\n { id: 'dot-4', cx: 40.36105, cy: 40.36375 },\n { id: 'dot-5', cx: 40.36105, cy: 107.63625 },\n { id: 'dot-6', cx: 41.36365, cy: 140.77285 },\n { id: 'dot-7', cx: 73.99995, cy: 7.22725 },\n { id: 'dot-8', cx: 73.99995, cy: 140.77325 },\n { id: 'dot-9', cx: 108.13785, cy: 7.72734 },\n { id: 'dot-10', cx: 107.88425, cy: 73.99975 },\n { id: 'dot-11', cx: 108.13785, cy: 140.77285 },\n { id: 'dot-12', cx: 141.27285, cy: 40.86385 },\n { id: 'dot-13', cx: 140.77225, cy: 73.99975 },\n { id: 'dot-14', cx: 141.27285, cy: 107.63685 },\n { id: 'dot-15', cx: 40.36165, cy: 73.99925 },\n { id: 'dot-16', cx: 74.00125, cy: 40.36345 },\n { id: 'dot-17', cx: 74.00125, cy: 73.99925 },\n { id: 'dot-18', cx: 74.00125, cy: 107.63585 },\n { id: 'dot-19', cx: 107.63485, cy: 40.36345 },\n { id: 'dot-20', cx: 107.63485, cy: 107.63585 },\n { id: 'dot-21', cx: 141.77, cy: 8.23 },\n { id: 'dot-22', cx: 141.77, cy: 140.77 },\n { id: 'dot-23', cx: 7.73019, cy: 140.77 },\n { id: 'dot-24', cx: 7.72018, cy: 8.22 },\n { id: 'dot-25', cx: 7.73518, cy: 40.865 }\n];\n\nconst INNER_DOT_IDS = ['dot-19', 'dot-20', 'dot-18', 'dot-15', 'dot-17', 'dot-16'];\n\nconst OUTER_DOT_IDS = DOTS_DATA.map((d) => d.id).filter((id) => !INNER_DOT_IDS.includes(id));\n\nconst forceReflow = (el: Element): void => {\n void window.getComputedStyle(el).opacity;\n};\n\nconst getAngle = (dot: DotData): number => Math.atan2(dot.cy - CENTER.y, dot.cx - CENTER.x);\n\nconst sortByAngle = (ids: string[]): DotData[] =>\n ids\n .map((id) => DOTS_DATA.find((d) => d.id === id))\n .filter((dot): dot is DotData => dot != null)\n .sort((a, b) => getAngle(a) - getAngle(b));\n\nconst LOOP_DURATION = 1500;\nconst ROTATION_DURATION = 600;\n\n@Component({\n tag: 'ease-logo-loader',\n styles: `\n :host {\n display: inline-block;\n --ease-out: cubic-bezier(0.22, 0.61, 0.36, 1);\n --ease-in-out: cubic-bezier(0.45, 0, 0.55, 1);\n --ease-overshoot: cubic-bezier(0.34, 1.56, 0.64, 1);\n \n --dot-dark: var(--color-gray-0, oklab(98.81% 0 0));\n --dot-medium: var(--color-gray-600, oklab(65.21% -0.0019 -0.0144));\n --dot-light: var(--color-gray-700, oklab(37.92% -0.0006 -0.0179));\n --dot-accent: var(--color-blue-600, oklab(76.85% 0.0462 -0.1115));\n }\n\n .logo-loader {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--logo-loader-size, 36px);\n height: var(--logo-loader-size, 36px);\n }\n\n .logo-loader__svg {\n width: 100%;\n height: 100%;\n display: block;\n transform-origin: center;\n overflow: visible;\n }\n\n .logo-loader__svg rect {\n transform-box: fill-box;\n transform-origin: center;\n transition:\n transform 380ms var(--ease-out),\n fill 320ms ease,\n opacity 320ms ease;\n }\n\n /* State: intro - dots are animating in */\n .logo-loader[data-state='intro'] .logo-loader__svg rect {\n opacity: 0;\n transform: scale(0);\n }\n\n /* Outer dots loading animation */\n @keyframes loading-outer {\n 0%, 100% {\n transform: scale(var(--base-scale, 1));\n fill: var(--dot-light);\n opacity: 0.4;\n }\n 15% {\n transform: scale(calc(var(--base-scale, 1) * 1.35));\n fill: var(--dot-dark);\n opacity: 1;\n }\n 35% {\n transform: scale(var(--base-scale, 1));\n fill: var(--dot-medium);\n opacity: 0.8;\n }\n }\n\n /* Inner dots loading animation */\n @keyframes loading-inner {\n 0%, 100% {\n transform: scale(var(--base-scale, 0.6));\n opacity: 0.7;\n fill: var(--dot-medium);\n }\n 50% {\n transform: scale(calc(var(--base-scale, 0.6) * 1.9));\n opacity: 0.1;\n fill: var(--dot-light);\n }\n }\n\n .dot-loading {\n animation-name: loading-outer;\n animation-duration: 600ms;\n animation-timing-function: cubic-bezier(0.3, 0.6, 0.4, 1);\n animation-iteration-count: infinite;\n animation-fill-mode: both;\n animation-delay: var(--delay, 0ms);\n }\n\n .dot-loading-inner {\n animation-name: loading-inner;\n animation-duration: 1500ms;\n animation-timing-function: ease-in-out;\n animation-iteration-count: infinite;\n animation-fill-mode: both;\n animation-delay: var(--delay, 0ms);\n }\n\n /* Exit animation class */\n .restoring {\n transition:\n transform 450ms cubic-bezier(0.25, 0, 0.5, 1),\n fill 350ms ease,\n opacity 350ms ease;\n }\n\n /* Particle intro animation */\n @keyframes particle-bounce {\n 0% { transform: scale(1); }\n 40% { transform: scale(1.25); }\n 65% { transform: scale(0.95); }\n 85% { transform: scale(1.05); }\n 100% { transform: scale(1); }\n }\n\n .particle-bounce {\n animation: particle-bounce 400ms var(--ease-overshoot) both;\n }\n\n /* Shockwave ring animation */\n @keyframes shockwave-expansion {\n 0% {\n transform: scale(1);\n opacity: 1;\n stroke-width: 1.5px;\n }\n 100% {\n transform: scale(4);\n opacity: 0;\n stroke-width: 0.5px;\n }\n }\n\n .shockwave-ring {\n fill: none;\n stroke: var(--dot-dark);\n transform-box: fill-box;\n transform-origin: center;\n animation: shockwave-expansion 900ms cubic-bezier(0.165, 0.84, 0.44, 1) both;\n }\n\n /* Pulse wave for intro */\n @keyframes pulse-wave {\n 0% {\n transform: scale(1);\n filter: brightness(1);\n }\n 50% {\n transform: scale(1.2);\n filter: brightness(1.6);\n fill: var(--dot-light);\n }\n 100% {\n transform: scale(1);\n filter: brightness(1);\n }\n }\n\n .dot-pulse-wave {\n animation: pulse-wave var(--pulse-duration, 500ms) var(--pulse-delay, 0ms) cubic-bezier(0.455, 0.03, 0.515, 0.955);\n }\n\n @media (prefers-reduced-motion: reduce) {\n .logo-loader__svg {\n transition: none;\n transform: scale(1);\n }\n .logo-loader__svg rect {\n animation: none !important;\n transition: none;\n transform: scale(1);\n opacity: 1;\n }\n }\n `,\n template(host: LogoLoader) {\n const size = host.size ?? 36;\n const state = host.state;\n const ariaLabel = host.ariaLabel;\n const ariaLabelTrimmed = ariaLabel?.trim() ?? '';\n\n return html`\n <div\n class=\"logo-loader\"\n data-state=${state}\n style=${`--logo-loader-size:${size}px;`}\n >\n <svg\n viewBox=\"0 0 148 148\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"logo-loader__svg\"\n role=${ariaLabelTrimmed ? 'img' : null}\n aria-label=${ariaLabelTrimmed || null}\n aria-hidden=${ariaLabelTrimmed ? null : 'true'}\n focusable=${ariaLabelTrimmed ? null : 'false'}\n >\n <g class=\"shockwave-container\"></g>\n \n <rect id=\"dot-1\" x=\"0.5\" y=\"67.2725\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-2\" x=\"3.5\" y=\"103.152\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-3\" x=\"36.8788\" y=\"3.24249\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-4\" x=\"33.6338\" y=\"33.6365\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-5\" x=\"33.6338\" y=\"100.909\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-6\" x=\"36.8788\" y=\"136.288\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-7\" x=\"67.2727\" y=\"0.5\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-8\" x=\"67.2727\" y=\"134.046\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-9\" x=\"103.653\" y=\"3.24249\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-10\" x=\"101.407\" y=\"67.2725\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-11\" x=\"103.653\" y=\"136.288\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-12\" x=\"136.788\" y=\"36.379\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-13\" x=\"134.045\" y=\"67.2725\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-14\" x=\"136.788\" y=\"103.152\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-light)\" />\n \n <rect id=\"dot-15\" x=\"26.9071\" y=\"60.5447\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-16\" x=\"60.5467\" y=\"26.9089\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-17\" x=\"60.5467\" y=\"60.5447\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-18\" x=\"60.5467\" y=\"94.1813\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-19\" x=\"94.1803\" y=\"26.9089\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-20\" x=\"94.1803\" y=\"94.1813\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n \n <rect id=\"dot-21\" x=\"139.53\" y=\"5.98999\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-22\" x=\"139.53\" y=\"138.53\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-23\" x=\"5.49019\" y=\"138.53\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-24\" x=\"5.48018\" y=\"5.97998\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-25\" x=\"4.37018\" y=\"37.5\" width=\"6.73\" height=\"6.73\" rx=\"3.365\" fill=\"var(--dot-light)\" />\n </svg>\n </div>\n `;\n }\n})\nexport class LogoLoader extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean, LogoLoader>({\n type: Boolean,\n attribute: 'loading',\n defaultValue: false,\n onChange(next) {\n (this as LogoLoader).handleLoadingChange(next);\n }\n })\n accessor loading = false;\n\n @Prop<LogoIntroVariant, LogoLoader>({\n type: 'string',\n attribute: 'intro',\n defaultValue: 'wave'\n })\n accessor intro: LogoIntroVariant = 'wave';\n\n @Prop<number | null, LogoLoader>({\n type: Number,\n attribute: 'size',\n defaultValue: 36\n })\n accessor size: number | null = 36;\n\n @Prop<string | null, LogoLoader>({\n type: 'string',\n attribute: 'aria-label',\n defaultValue: null\n })\n accessor ariaLabel: string | null = null;\n\n #state: LogoLoaderState = 'intro';\n #loopStartTime = 0;\n #animationTimers: number[] = [];\n #introCompleted = false;\n\n get state(): LogoLoaderState {\n return this.#state;\n }\n\n set state(value: LogoLoaderState) {\n if (this.#state === value) {\n return;\n }\n this.#state = value;\n if (typeof this.requestRender === 'function') {\n this.requestRender();\n }\n }\n\n connectedCallback(): void {\n // Wait for first render before starting intro animation\n // The Component decorator renders after connectedCallback via requestAnimationFrame\n requestAnimationFrame(() => {\n // Double RAF to ensure render is complete\n requestAnimationFrame(() => {\n if (this.loading) {\n this.#runIntro(() => {\n this.#introCompleted = true;\n this.#startLoopAnimation();\n });\n } else {\n this.#runIntro(() => {\n this.#introCompleted = true;\n this.state = 'idle';\n });\n }\n });\n });\n }\n\n disconnectedCallback(): void {\n this.#clearTimers();\n }\n\n #clearTimers(): void {\n for (const id of this.#animationTimers) {\n window.clearTimeout(id);\n }\n this.#animationTimers = [];\n }\n\n #setTimeout(fn: () => void, delay: number): number {\n const id = window.setTimeout(fn, delay);\n this.#animationTimers.push(id);\n return id;\n }\n\n #getDot(id: string): SVGRectElement | null {\n const svg = this.shadowRoot?.querySelector('.logo-loader__svg');\n return svg?.querySelector(`#${id}`) as SVGRectElement | null;\n }\n\n #getShockwaveContainer(): SVGGElement | null {\n return this.shadowRoot?.querySelector('.shockwave-container') as SVGGElement | null;\n }\n\n #resetDotsState(instant = false, keepOpacity = false): void {\n const container = this.#getShockwaveContainer();\n if (container) {\n container.innerHTML = '';\n }\n\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (!el) {\n continue;\n }\n\n if (instant) {\n el.style.transition = 'none';\n } else {\n el.style.transition = '';\n }\n\n // Remove all animation classes\n el.classList.remove('dot-loading', 'dot-loading-inner', 'restoring', 'dot-pulse-wave', 'particle-bounce');\n\n el.style.removeProperty('--base-scale');\n el.style.removeProperty('--delay');\n el.style.removeProperty('--pulse-delay');\n el.style.removeProperty('--pulse-duration');\n\n // Reset inline styles\n el.style.transform = 'scale(1)';\n\n if (!keepOpacity) {\n el.style.opacity = instant ? '1' : '';\n }\n el.style.removeProperty('fill');\n el.style.removeProperty('filter');\n\n if (instant) {\n forceReflow(el);\n el.style.removeProperty('transition');\n }\n }\n }\n\n /** Ensure all dots are visible */\n #ensureVisibility(): void {\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (el && (el.style.opacity === '0' || el.style.opacity === '')) {\n el.style.transition = 'opacity 200ms ease-out';\n el.style.opacity = '1';\n }\n }\n }\n\n /** Run wave intro animation */\n #runWaveIntro(onComplete?: () => void): void {\n this.state = 'intro';\n\n // Prepare dots hidden\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (!el) {\n continue;\n }\n el.style.transition = 'none';\n el.style.opacity = '0';\n el.style.transform = 'scale(0)';\n forceReflow(el);\n }\n\n const innerDotIds = new Set(INNER_DOT_IDS);\n const innerDots = DOTS_DATA.filter((d) => innerDotIds.has(d.id));\n const outerDots = DOTS_DATA.filter((d) => !innerDotIds.has(d.id));\n\n // WAVE 1: Inner dots appear at half scale\n const orderedInner = sortByAngle(innerDots.map((d) => d.id));\n orderedInner.forEach((dot, index) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n el.style.fill = 'var(--dot-medium)';\n forceReflow(el);\n el.style.removeProperty('transition');\n\n const delay = index * 75;\n this.#setTimeout(() => {\n el.style.transition = 'transform 500ms cubic-bezier(0.175, 0.885, 0.32, 1.275), opacity 400ms ease-out';\n el.style.opacity = '1';\n el.style.transform = 'scale(0.5)';\n }, delay);\n });\n\n // WAVE 2: Inner to full scale + outer appear\n this.#setTimeout(() => {\n // Inner dots to full scale\n orderedInner.forEach((dot, index) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n const delay = index * 65;\n this.#setTimeout(() => {\n el.style.transition = 'transform 600ms cubic-bezier(0.34, 1.56, 0.64, 1), fill 450ms ease-out';\n el.style.transform = 'scale(1)';\n el.style.removeProperty('fill');\n }, delay);\n });\n\n // Outer dots appear\n const orderedOuter = sortByAngle(outerDots.map((d) => d.id));\n orderedOuter.forEach((dot, index) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n el.style.removeProperty('transition');\n const delay = 150 + index * 40;\n this.#setTimeout(() => {\n el.style.transition = 'transform 650ms cubic-bezier(0.34, 1.56, 0.64, 1), opacity 550ms ease-out';\n el.style.opacity = '1';\n el.style.transform = 'scale(1)';\n }, delay);\n });\n }, 650);\n\n // Completion\n this.#setTimeout(() => {\n onComplete?.();\n }, 1400);\n }\n\n /** Run particle intro animation */\n #runParticleIntro(onComplete?: () => void): void {\n this.state = 'intro';\n\n // Prepare dots hidden\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (!el) {\n continue;\n }\n el.style.transition = 'none';\n el.style.opacity = '0';\n el.style.transform = 'scale(0)';\n forceReflow(el);\n }\n\n const innerDotIds = new Set(INNER_DOT_IDS);\n\n // Create particle animation data\n const particles = DOTS_DATA.map((dot, index) => {\n const finalAngle = getAngle(dot);\n const startDistance = 110 + Math.random() * 80;\n const angleVariation = (Math.random() - 0.5) * Math.PI * 0.35;\n const startAngle = finalAngle + angleVariation;\n const startX = Math.cos(startAngle) * startDistance;\n const startY = Math.sin(startAngle) * startDistance;\n\n const curvature = Math.random() * 0.4 + 0.3;\n const controlAngle = startAngle + (Math.random() - 0.5) * Math.PI * curvature;\n const controlDistance = startDistance * 0.6;\n const controlX = Math.cos(controlAngle) * controlDistance;\n const controlY = Math.sin(controlAngle) * controlDistance;\n\n const group = Math.floor(index / 5);\n const groupDelay = group * 110;\n const withinGroupDelay = (index % 5) * 40;\n const delay = groupDelay + withinGroupDelay + Math.random() * 40;\n const duration = 600 + Math.random() * 300;\n\n return {\n ...dot,\n startX,\n startY,\n controlX,\n controlY,\n delay,\n duration,\n impactTime: delay + duration,\n rotationSpeed: 720 + Math.random() * 360,\n isInner: innerDotIds.has(dot.id)\n };\n });\n\n particles.sort((a, b) => a.delay - b.delay);\n\n // First 3 inner dots for shockwaves\n const shockwaveParticles = particles\n .filter((p) => p.isInner)\n .sort((a, b) => a.impactTime - b.impactTime)\n .slice(0, 3);\n const shockwaveSet = new Set(shockwaveParticles.map((p) => p.id));\n\n // Animate each particle\n for (const particle of particles) {\n const el = this.#getDot(particle.id);\n if (!el) {\n continue;\n }\n\n el.style.transform = `translate(${particle.startX}px, ${particle.startY}px) scale(0.05)`;\n\n this.#setTimeout(() => {\n el.style.opacity = '1';\n\n const steps = 30;\n let step = 0;\n\n const animateStep = (): void => {\n step++;\n const progress = step / steps;\n const t = progress;\n const mt = 1 - t;\n\n const x = mt * mt * particle.startX + 2 * mt * t * particle.controlX + t * t * 0;\n const y = mt * mt * particle.startY + 2 * mt * t * particle.controlY + t * t * 0;\n\n const easeOut = 1 - (1 - progress) ** 4;\n const scale = 0.05 + easeOut * 0.95;\n const rotation = progress * particle.rotationSpeed;\n\n el.style.transition = 'transform 33ms linear';\n el.style.transform = `translate(${x}px, ${y}px) scale(${scale}) rotate(${rotation}deg)`;\n\n if (step < steps) {\n requestAnimationFrame(animateStep);\n } else {\n // Impact - clear all transforms\n const bounceDuration = 250;\n el.style.transition = `transform ${bounceDuration}ms cubic-bezier(0.34, 1.56, 0.64, 1)`;\n el.style.transform = 'scale(1)';\n\n if (shockwaveSet.has(particle.id)) {\n this.#triggerShockwave(particle);\n }\n\n this.#setTimeout(() => {\n el.classList.add('particle-bounce');\n this.#setTimeout(() => {\n el.classList.remove('particle-bounce');\n }, 400);\n }, bounceDuration);\n }\n };\n\n requestAnimationFrame(animateStep);\n }, particle.delay);\n }\n\n // Early completion\n const earlyRevealTime = Math.max(...particles.map((p) => p.delay)) * 0.6;\n this.#setTimeout(() => {\n onComplete?.();\n }, earlyRevealTime);\n\n // Final cleanup\n const maxTime = Math.max(...particles.map((p) => p.impactTime + 500));\n this.#setTimeout(() => {\n this.#resetDotsState(false, true);\n }, maxTime);\n }\n\n #triggerShockwave(dot: DotData): void {\n const container = this.#getShockwaveContainer();\n if (!container) {\n return;\n }\n\n const ring = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n ring.setAttribute('cx', String(dot.cx));\n ring.setAttribute('cy', String(dot.cy));\n ring.setAttribute('r', '13.45');\n ring.classList.add('shockwave-ring');\n\n container.appendChild(ring);\n\n this.#setTimeout(() => {\n ring.remove();\n }, 900);\n }\n\n #runIntro(onComplete?: () => void): void {\n if (this.intro === 'particle') {\n this.#runParticleIntro(onComplete);\n } else {\n this.#runWaveIntro(onComplete);\n }\n }\n\n #startLoopAnimation(): void {\n this.#loopStartTime = performance.now();\n this.#ensureVisibility();\n\n // Inner dots - scale down with transition, then add animation class\n const orderedInnerDots = sortByAngle(INNER_DOT_IDS);\n let seedDelay = 0;\n\n orderedInnerDots.forEach((dot) => {\n this.#setTimeout(() => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n const targetScale = 0.6;\n\n el.style.transition = 'all 450ms cubic-bezier(0.4, 0, 0.2, 1)';\n el.style.transform = `scale(${targetScale})`;\n el.style.fill = 'var(--dot-medium)';\n el.style.opacity = '0.7';\n\n el.style.setProperty('--base-scale', `${targetScale}`);\n\n const angle = getAngle(dot);\n const normalizedAngle = (angle + Math.PI) / (2 * Math.PI);\n const animationDelayMs = normalizedAngle * LOOP_DURATION;\n el.style.setProperty('--delay', `${animationDelayMs}ms`);\n\n this.#setTimeout(() => {\n el.classList.add('dot-loading-inner');\n }, 100);\n }, seedDelay);\n\n seedDelay += 60;\n });\n\n const orderedOuterDots = sortByAngle(OUTER_DOT_IDS);\n this.#setTimeout(() => {\n orderedOuterDots.forEach((dot) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n el.style.transition = 'all 350ms ease-out';\n\n const baseScale = 1.2;\n el.style.setProperty('--base-scale', `${baseScale}`);\n\n const angle = getAngle(dot);\n const normalizedAngle = (angle + Math.PI) / (2 * Math.PI);\n const animationDelayMs = normalizedAngle * ROTATION_DURATION;\n el.style.setProperty('--delay', `${animationDelayMs}ms`);\n\n this.#setTimeout(() => {\n el.classList.add('dot-loading');\n }, 50);\n });\n\n this.state = 'loop';\n }, seedDelay + 100);\n }\n\n #endLoopAnimation(): void {\n const now = performance.now();\n const elapsed = Math.max(0, now - this.#loopStartTime);\n\n const timeInCycle = elapsed % LOOP_DURATION;\n const timeLeft = LOOP_DURATION - timeInCycle + 50;\n\n this.state = 'exit';\n\n this.#setTimeout(() => {\n const orderedAllDots = sortByAngle(DOTS_DATA.map((d) => d.id));\n\n orderedAllDots.forEach((dot, i) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n const delay = i * 18;\n\n this.#setTimeout(() => {\n el.classList.remove('dot-loading', 'dot-loading-inner');\n el.style.removeProperty('--delay');\n el.style.removeProperty('--base-scale');\n\n el.classList.add('restoring');\n el.style.transform = 'scale(1)';\n el.style.opacity = '1';\n el.style.removeProperty('fill');\n\n this.#setTimeout(() => {\n el.classList.remove('restoring');\n }, 500);\n }, delay);\n });\n\n this.#setTimeout(\n () => {\n this.state = 'idle';\n },\n orderedAllDots.length * 18 + 500\n );\n }, timeLeft);\n }\n\n handleLoadingChange(next: boolean): void {\n if (!this.#introCompleted) {\n return;\n }\n\n this.#clearTimers();\n\n if (next) {\n if (this.state === 'idle' || this.state === 'exit') {\n this.#resetDotsState(true, true);\n this.#startLoopAnimation();\n }\n } else {\n if (this.state === 'loop') {\n this.#endLoopAnimation();\n } else if (this.state !== 'intro' && this.state !== 'exit') {\n this.state = 'idle';\n }\n }\n }\n\n playIntro(variant?: LogoIntroVariant): void {\n this.#clearTimers();\n this.#resetDotsState(true);\n\n const originalIntro = this.intro;\n if (variant) {\n this.intro = variant;\n }\n\n this.#runIntro(() => {\n this.#introCompleted = true;\n if (this.loading) {\n this.#startLoopAnimation();\n } else {\n this.state = 'idle';\n }\n });\n\n if (variant) {\n this.intro = originalIntro;\n }\n }\n}\n","import type { MonitorFpsDetail } from './fps';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Watch } from '~/decorators/Watch';\nimport { styleObject } from '~/utils/template-helpers';\nimport './fps';\n\ninterface LayoutShift extends PerformanceEntry {\n value: number;\n hadRecentInput: boolean;\n}\n\ninterface PerformanceEventTiming extends PerformanceEntry {\n duration: number;\n interactionId?: number;\n}\n\ninterface PerformanceLongTaskTiming extends PerformanceEntry {\n duration: number;\n}\n\ntype CoreWebVitals = {\n LCP: number | null;\n INP: number | null;\n CLS: number;\n FCP: number | null;\n TBT: number;\n};\n\ntype NavigationMetrics = {\n ttfb: number | null;\n domInteractive: number | null;\n loadTime: number | null;\n};\n\ntype ResourceSummary = {\n js: { count: number; size: number };\n css: { count: number; size: number };\n img: { count: number; size: number };\n other: { count: number; size: number };\n totalSize: number;\n};\n\ntype MemoryUsage = {\n jsHeapSizeLimit: number;\n totalJSHeapSize: number;\n usedJSHeapSize: number;\n} | null;\n\ninterface PerformanceMetrics {\n coreWebVitals: CoreWebVitals;\n navigation: NavigationMetrics;\n resources: ResourceSummary;\n memory: MemoryUsage;\n fps: number | null;\n longTasks: { count: number; totalDuration: number };\n}\n\n// Network Information\ninterface ConnectionInfo {\n effectiveType: string;\n rtt: number;\n}\n\ntype MetricKey = keyof CoreWebVitals | keyof NavigationMetrics | 'fps' | 'TBT';\ntype MetricRating = 'good' | 'needs-improvement' | 'poor' | 'unknown';\n\ndeclare global {\n interface Performance {\n memory?: {\n jsHeapSizeLimit: number;\n totalJSHeapSize: number;\n usedJSHeapSize: number;\n };\n }\n interface Navigator {\n connection?: {\n effectiveType: string;\n rtt: number;\n addEventListener: (type: string, listener: EventListener) => void;\n removeEventListener: (type: string, listener: EventListener) => void;\n };\n }\n}\n\nconst METRIC_THRESHOLDS = {\n LCP: { good: 2500, poor: 4000 },\n INP: { good: 200, poor: 500 },\n CLS: { good: 0.1, poor: 0.25 },\n FCP: { good: 1800, poor: 3000 },\n ttfb: { good: 800, poor: 1800 },\n loadTime: { good: 3000, poor: 6000 },\n domInteractive: { good: 1500, poor: 3500 },\n fps: { good: 55, poor: 30 },\n TBT: { good: 200, poor: 600 }\n};\n\nconst GLOBAL_BENCHMARKS: Partial<Record<MetricKey, number>> = {\n LCP: 2400,\n INP: 250,\n CLS: 0.05,\n FCP: 1600,\n TBT: 300\n};\n\nconst rateMetric = (metric: MetricKey, value: number | null): MetricRating => {\n if (value === null) {\n return 'unknown';\n }\n const thresholds = METRIC_THRESHOLDS[metric as keyof typeof METRIC_THRESHOLDS];\n if (!thresholds) {\n return 'unknown';\n }\n\n if (metric === 'fps') {\n if (value >= thresholds.good) {\n return 'good';\n }\n if (value >= thresholds.poor) {\n return 'needs-improvement';\n }\n return 'poor';\n }\n\n if (value <= thresholds.good) {\n return 'good';\n }\n if (value < thresholds.poor) {\n return 'needs-improvement';\n }\n return 'poor';\n};\n\nconst formatMetric = (metric: MetricKey, value: number | null): string => {\n if (value === null) {\n return 'N/A';\n }\n if (metric === 'CLS') {\n return value.toFixed(3);\n }\n if (metric === 'fps') {\n return `${Math.round(value)}`;\n }\n if (value < 1000) {\n return `${Math.round(value)}ms`;\n }\n return `${(value / 1000).toFixed(2)}s`;\n};\n\nconst formatBytes = (bytes: number | null | undefined, decimals = 1): string => {\n if (bytes == null || !Number.isFinite(bytes) || bytes <= 0) {\n return '0 B';\n }\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}`;\n};\n\nconst estimateCarbonFootprint = (totalBytes: number): string => {\n if (totalBytes <= 0) {\n return '0g CO2 eq.';\n }\n const emissions = (totalBytes / 1000000000) * 0.81;\n return `${emissions.toFixed(3)}g CO2 eq.`;\n};\n\n@Component({\n tag: 'ease-monitor',\n styles: `\n :host {\n position: relative;\n z-index: 100000;\n user-select: none;\n -webkit-user-select: none;\n \n }\n\n [part=\"container\"] {\n width: 320px;\n overflow: hidden; \n }\n\n [part=\"header\"] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n [part=\"title\"] {\n display: flex;\n align-items: center;\n gap: 0.5em;\n }\n\n [part=\"content\"] {\n display: grid;\n gap: 1em;\n max-height: 80vh;\n overflow-y: auto;\n }\n\n .metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(90px, 1fr));\n gap: 0.5em;\n }\n\n .metric-box {\n text-align: center;\n cursor: help;\n }\n\n .metric-value {\n font-variant-numeric: tabular-nums; \n }\n\n .rating-good {\n color: #22c55e;\n }\n .rating-needs-improvement {\n color: #eab308;\n }\n .rating-poor {\n color: #ef4444;\n }\n .rating-unknown {\n color: #6b7280;\n }\n\n .status-indicator.rating-good {\n background-color: #22c55e;\n }\n .status-indicator.rating-needs-improvement {\n background-color: #eab308;\n }\n .status-indicator.rating-poor {\n background-color: #ef4444;\n }\n .status-indicator.rating-unknown {\n background-color: #6b7280;\n }\n\n .memory-used.rating-good {\n background-color: #22c55e;\n }\n .memory-used.rating-needs-improvement {\n background-color: #eab308;\n }\n .memory-used.rating-poor {\n background-color: #ef4444;\n }\n\n .resource-list, .memory-usage, .network-info {\n display: grid;\n gap: 0.25em;\n }\n\n .resource-item, .network-item, .longtask-item {\n display: flex;\n justify-content: space-between;\n font-variant-numeric: tabular-nums;\n }\n\n .memory-bar {\n height: 10px;\n overflow: hidden;\n position: relative;\n }\n\n .memory-used {\n height: 100%;\n transition: width 0.5s ease-in-out;\n }\n\n .status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n }\n \n .carbon-estimate {\n text-align: right;\n }\n\n .trend-indicator {\n display: inline-block;\n width: 1em;\n text-align: center;\n }\n `\n})\nexport class Monitor extends HTMLElement {\n declare requestRender: () => void;\n\n @Watch<PerformanceMetrics>({})\n accessor metrics: PerformanceMetrics = {\n navigation: { loadTime: null, domInteractive: null, ttfb: null },\n coreWebVitals: { LCP: null, INP: null, CLS: 0, FCP: null, TBT: 0 },\n resources: {\n js: { count: 0, size: 0 },\n css: { count: 0, size: 0 },\n img: { count: 0, size: 0 },\n other: { count: 0, size: 0 },\n totalSize: 0\n },\n memory: null,\n fps: null,\n longTasks: { count: 0, totalDuration: 0 }\n };\n\n @Watch<ConnectionInfo>({})\n accessor network: ConnectionInfo = {\n effectiveType: 'N/A',\n rtt: 0\n };\n\n private observers: PerformanceObserver[] = [];\n private memoryInterval: number | null = null;\n\n private clsEntries: LayoutShift[] = [];\n\n private inpEntries: PerformanceEventTiming[] = [];\n private maxINP = 0;\n\n private longTaskEntries: PerformanceLongTaskTiming[] = [];\n\n private trendHistory: Partial<Record<MetricKey, number[]>> = {};\n private maxTrendLength = 5;\n\n connectedCallback(): void {\n this.initObservers();\n this.collectInitialMetrics();\n this.startMemoryMonitoring();\n this.initNetworkMonitoring();\n\n if (document.readyState !== 'complete') {\n window.addEventListener('load', this.handlePageLoad);\n } else {\n this.handlePageLoad();\n }\n }\n\n disconnectedCallback(): void {\n this.observers.forEach((observer) => {\n observer.disconnect();\n });\n this.observers = [];\n this.stopMemoryMonitoring();\n this.stopNetworkMonitoring();\n window.removeEventListener('load', this.handlePageLoad);\n }\n\n @Listen<Monitor, CustomEvent<MonitorFpsDetail>>('monitor-fps')\n handleFpsUpdate(event: CustomEvent<MonitorFpsDetail>): void {\n const fps = event.detail?.fps ?? null;\n this.metrics.fps = fps;\n this.updateTrend('fps', fps);\n this.requestRender();\n }\n\n private handlePageLoad = (): void => {\n setTimeout(() => {\n this.collectNavigationTiming();\n this.requestRender();\n }, 500);\n };\n\n private initObservers(): void {\n if (!('PerformanceObserver' in window)) {\n console.warn('PerformanceObserver API not supported.');\n return;\n }\n\n try {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n this.processPerformanceEntry(entry);\n }\n });\n\n observer.observe({ type: 'largest-contentful-paint', buffered: true });\n observer.observe({ type: 'event', buffered: true });\n observer.observe({ type: 'layout-shift', buffered: true });\n observer.observe({ type: 'paint', buffered: true });\n observer.observe({ type: 'resource', buffered: true });\n observer.observe({ type: 'longtask', buffered: true });\n\n this.observers.push(observer);\n } catch (e) {\n console.error('Error initializing PerformanceObserver:', e);\n }\n }\n\n private collectInitialMetrics(): void {\n this.collectNavigationTiming();\n const resourceEntries = performance.getEntriesByType('resource') as PerformanceResourceTiming[];\n this.processResourceEntries(resourceEntries);\n }\n\n private collectNavigationTiming(): void {\n const navigationEntries = performance.getEntriesByType('navigation');\n if (navigationEntries.length > 0) {\n const navTiming = navigationEntries[0] as PerformanceNavigationTiming;\n\n let ttfb = null;\n if (navTiming.responseStart > 0 && navTiming.fetchStart > 0) {\n ttfb = navTiming.responseStart - navTiming.fetchStart;\n }\n\n let loadTime = null;\n if (navTiming.loadEventEnd > 0) {\n loadTime = navTiming.loadEventEnd - navTiming.startTime;\n }\n\n let domInteractive = null;\n if (navTiming.domInteractive > 0) {\n domInteractive = navTiming.domInteractive - navTiming.startTime;\n }\n\n this.metrics.navigation = { ttfb, loadTime, domInteractive };\n this.updateTrend('loadTime', loadTime);\n this.updateTrend('ttfb', ttfb);\n }\n }\n\n private processPerformanceEntry(entry: PerformanceEntry): void {\n switch (entry.entryType) {\n case 'largest-contentful-paint':\n this.metrics.coreWebVitals.LCP = entry.startTime;\n this.updateTrend('LCP', entry.startTime);\n break;\n case 'event': {\n const eventEntry = entry as PerformanceEventTiming;\n if (eventEntry.interactionId && eventEntry.duration > this.maxINP) {\n this.maxINP = eventEntry.duration;\n this.metrics.coreWebVitals.INP = this.maxINP;\n this.updateTrend('INP', this.maxINP);\n }\n this.inpEntries.push(eventEntry);\n break;\n }\n case 'layout-shift': {\n const lsEntry = entry as LayoutShift;\n if (!lsEntry.hadRecentInput) {\n this.clsEntries.push(lsEntry);\n this.calculateSessionWindowCLS();\n }\n break;\n }\n case 'paint':\n if (entry.name === 'first-contentful-paint') {\n this.metrics.coreWebVitals.FCP = entry.startTime;\n this.updateTrend('FCP', entry.startTime);\n }\n break;\n case 'resource':\n this.processResourceEntries([entry as PerformanceResourceTiming]);\n return;\n case 'longtask': {\n const ltEntry = entry as PerformanceLongTaskTiming;\n this.longTaskEntries.push(ltEntry);\n this.calculateLongTasksAndTBT();\n break;\n }\n }\n this.requestRender();\n }\n\n private calculateSessionWindowCLS(): void {\n let maxCls = 0;\n let currentSessionCls = 0;\n let sessionStartTime = Infinity;\n let lastTime = -Infinity;\n\n this.clsEntries.sort((a, b) => a.startTime - b.startTime);\n\n for (const entry of this.clsEntries) {\n const timeDiff = entry.startTime - lastTime;\n\n if (timeDiff > 1000 || entry.startTime - sessionStartTime > 5000) {\n if (currentSessionCls > 0) {\n maxCls = Math.max(maxCls, currentSessionCls);\n }\n currentSessionCls = 0;\n sessionStartTime = entry.startTime;\n }\n\n currentSessionCls += entry.value;\n lastTime = entry.startTime;\n }\n\n maxCls = Math.max(maxCls, currentSessionCls);\n this.metrics.coreWebVitals.CLS = maxCls;\n this.updateTrend('CLS', maxCls);\n }\n\n private processResourceEntries(entries: PerformanceResourceTiming[]): void {\n const summary = this.metrics.resources;\n\n entries.forEach((entry) => {\n const size = entry.transferSize || 0;\n const initiator = entry.initiatorType;\n const name = entry.name.toLowerCase();\n\n if (initiator === 'script' || name.endsWith('.js')) {\n summary.js.count++;\n summary.js.size += size;\n } else if (initiator === 'css' || name.endsWith('.css') || initiator === 'link') {\n summary.css.count++;\n summary.css.size += size;\n } else if (initiator === 'img' || initiator === 'image' || /\\.(jpg|jpeg|png|gif|svg|webp|avif)$/.test(name)) {\n summary.img.count++;\n summary.img.size += size;\n } else {\n summary.other.count++;\n summary.other.size += size;\n }\n summary.totalSize += size;\n });\n }\n\n private calculateLongTasksAndTBT(): void {\n let tbt = 0;\n let count = 0;\n const referenceTime = this.metrics.coreWebVitals.FCP ?? 0;\n\n this.longTaskEntries.forEach((task) => {\n if (task.startTime >= referenceTime) {\n count++;\n if (task.duration > 50) {\n tbt += task.duration - 50;\n }\n }\n });\n this.metrics.longTasks = { count, totalDuration: tbt };\n this.metrics.coreWebVitals.TBT = tbt;\n this.updateTrend('TBT', tbt);\n }\n\n private startMemoryMonitoring(): void {\n if (!performance.memory) {\n return;\n }\n\n const updateMemory = () => {\n if (performance.memory) {\n const mem = performance.memory;\n this.metrics.memory = {\n jsHeapSizeLimit: Number(mem.jsHeapSizeLimit) || 0,\n totalJSHeapSize: Number(mem.totalJSHeapSize) || 0,\n usedJSHeapSize: Number(mem.usedJSHeapSize) || 0\n };\n this.requestRender();\n }\n };\n\n updateMemory();\n this.memoryInterval = window.setInterval(updateMemory, 3000);\n }\n\n private stopMemoryMonitoring(): void {\n if (this.memoryInterval) {\n clearInterval(this.memoryInterval);\n this.memoryInterval = null;\n }\n }\n\n private initNetworkMonitoring(): void {\n if (navigator.connection) {\n this.updateNetworkInfo();\n navigator.connection.addEventListener('change', this.updateNetworkInfo);\n }\n }\n\n private stopNetworkMonitoring(): void {\n if (navigator.connection) {\n navigator.connection.removeEventListener('change', this.updateNetworkInfo);\n }\n }\n\n private updateNetworkInfo = (): void => {\n if (navigator.connection) {\n this.network = {\n effectiveType: navigator.connection.effectiveType ?? 'N/A',\n rtt: navigator.connection.rtt ?? 0\n };\n }\n };\n\n private updateTrend(key: MetricKey, value: number | null): void {\n if (value === null) {\n return;\n }\n const history = this.trendHistory[key] || [];\n history.push(value);\n if (history.length > this.maxTrendLength) {\n history.shift();\n }\n this.trendHistory[key] = history;\n }\n\n private getTrendDirection(key: MetricKey): string {\n const history = this.trendHistory[key];\n if (!history || history.length < 2) {\n return '';\n }\n\n const currentValue = history[history.length - 1];\n const previousAvg = history.slice(0, history.length - 1).reduce((a, b) => a + b, 0) / (history.length - 1);\n\n const threshold = Math.abs(previousAvg * 0.05);\n const delta = currentValue ?? 0 - previousAvg;\n\n if (Math.abs(delta) < threshold) {\n return '→';\n }\n\n if (key === 'fps') {\n return delta > 0 ? '↑' : '↓';\n } else {\n return delta < 0 ? '↓' : '↑';\n }\n }\n\n private getOverallStatus(): MetricRating {\n const ratings: MetricRating[] = [\n rateMetric('LCP', this.metrics.coreWebVitals.LCP),\n rateMetric('CLS', this.metrics.coreWebVitals.CLS),\n rateMetric('INP', this.metrics.coreWebVitals.INP),\n rateMetric('fps', this.metrics.fps)\n ];\n\n if (ratings.includes('poor')) {\n return 'poor';\n }\n if (ratings.includes('needs-improvement')) {\n return 'needs-improvement';\n }\n if (ratings.every((r) => r === 'unknown')) {\n return 'unknown';\n }\n\n if (ratings.some((r) => r === 'good')) {\n return 'good';\n }\n\n return 'unknown';\n }\n\n render(): TemplateResult {\n return html`\n <div part=\"container\">\n ${this.renderExpanded()}\n </div>\n `;\n }\n\n private renderExpanded(): TemplateResult {\n return html`\n <div part=\"header\">\n <div part=\"title\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"></polyline><polyline points=\"17 6 23 6 23 12\"></polyline></svg>\n Performance Monitor\n </div>\n </div>\n <div part=\"content\">\n ${this.renderVitalsAndTiming()}\n ${this.renderRealtime()}\n ${this.renderNetworkInfo()}\n ${this.renderResources()}\n </div>\n `;\n }\n\n private renderMetricBox(label: string, key: MetricKey, value: number | null, description: string): TemplateResult {\n const rating = rateMetric(key, value);\n const formattedValue = formatMetric(key, value);\n const trend = this.getTrendDirection(key);\n const benchmark = GLOBAL_BENCHMARKS[key];\n const vsBenchmark = benchmark ? ` (vs avg ${formatMetric(key, benchmark)})` : '';\n return html`\n <div class=\"metric-box\" title=\"${description}${vsBenchmark}\">\n <div part=\"metric-label\" class=\"metric-label\">${label}</div>\n <div part=\"metric-value\" class=\"metric-value rating-${rating}\" data-rating=${rating}>\n ${formattedValue}\n <span class=\"trend-indicator\">${trend}</span>\n </div>\n </div>\n `;\n }\n\n private renderVitalsAndTiming(): TemplateResult {\n const { LCP, INP, CLS, FCP, TBT } = this.metrics.coreWebVitals;\n const { ttfb, loadTime } = this.metrics.navigation;\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Vitals & Timing</div>\n <div class=\"metrics-grid\">\n ${this.renderMetricBox('LCP', 'LCP', LCP, 'Largest Contentful Paint: Measures loading performance.')}\n ${this.renderMetricBox('INP', 'INP', INP, 'Interaction to Next Paint: Measures responsiveness.')}\n ${this.renderMetricBox('CLS', 'CLS', CLS, 'Cumulative Layout Shift: Measures visual stability.')}\n ${this.renderMetricBox('FCP', 'FCP', FCP, 'First Contentful Paint: When the browser renders the first bit of content.')}\n ${this.renderMetricBox('TBT', 'TBT', TBT, 'Total Blocking Time: Sum of blocking portions of long tasks.')}\n ${this.renderMetricBox('TTFB', 'ttfb', ttfb, 'Time to First Byte: Measures server responsiveness.')}\n ${this.renderMetricBox('Load', 'loadTime', loadTime, 'Total Page Load Time.')}\n </div>\n </section>\n `;\n }\n\n private renderRealtime(): TemplateResult {\n const { memory, longTasks } = this.metrics;\n\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Realtime Monitoring</div>\n <ease-monitor-fps></ease-monitor-fps>\n <div class=\"longtask-item\">\n <span>Long Tasks (Count / Blocked ms)</span>\n <span>${longTasks.count} / ${longTasks.totalDuration.toFixed(0)}ms</span>\n </div>\n ${this.renderMemory(memory)}\n </section>\n `;\n }\n\n private renderMemory(memory: MemoryUsage): TemplateResult {\n if (!memory) {\n return html`\n <div class=\"memory-usage\">\n (performance.memory API not supported)\n </div>\n `;\n }\n\n const usedPercent = memory.totalJSHeapSize > 0 ? (memory.usedJSHeapSize / memory.totalJSHeapSize) * 100 : 0;\n\n let rating: MetricRating = 'good';\n if (usedPercent > 85) {\n rating = 'poor';\n } else if (usedPercent > 60) {\n rating = 'needs-improvement';\n }\n\n return html`\n <div class=\"memory-usage\">\n <div class=\"resource-item\">\n <span>Used / Total Heap</span>\n <span>${formatBytes(memory.usedJSHeapSize)} / ${formatBytes(memory.totalJSHeapSize)}</span>\n </div>\n <div class=\"memory-bar\" title=\"${usedPercent.toFixed(1)}% Used\">\n <div class=\"memory-used rating-${rating}\" style=${styleObject({ width: `${Math.min(100, usedPercent)}%` })} data-rating=${rating}></div>\n </div>\n <div class=\"resource-item\">\n <span>Heap Limit</span>\n <span>${formatBytes(memory.jsHeapSizeLimit)}</span>\n </div>\n </div>\n `;\n }\n\n private renderNetworkInfo(): TemplateResult {\n const { effectiveType, rtt } = this.network;\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Network Connection</div>\n <div class=\"network-info\">\n <div class=\"network-item\">\n <span>Effective Type</span>\n <span>${effectiveType.toUpperCase()}</span>\n </div>\n <div class=\"network-item\">\n <span>Round Trip Time (RTT)</span>\n <span>${rtt > 0 ? `${rtt}ms` : 'N/A'}</span>\n </div>\n </div>\n </section>\n `;\n }\n\n private renderResources(): TemplateResult {\n const { js, css, img, other, totalSize } = this.metrics.resources;\n const totalCount = js.count + css.count + img.count + other.count;\n\n const renderItem = (label: string, data: { count: number; size: number }) => html`\n <div class=\"resource-item\">\n <span>${label} (${data.count})</span>\n <span>${formatBytes(data.size)}</span>\n </div>\n `;\n\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Resources (Total: ${formatBytes(totalSize)} / ${totalCount} reqs)</div>\n <div class=\"resource-list\">\n ${renderItem('JS', js)}\n ${renderItem('CSS/Links', css)}\n ${renderItem('Images', img)}\n ${renderItem('Other', other)}\n </div>\n <div part=\"carbon-estimate\" class=\"carbon-estimate\">\n Est. Carbon: ${estimateCarbonFootprint(totalSize)}\n </div>\n <div>\n Overall Status: ${this.getOverallStatus()}\n </div>\n </section>\n `;\n }\n}\n","type RenderHost = HTMLElement & {\n requestRender?(): void;\n render?(): void;\n};\n\nconst renderQueue = new WeakMap<RenderHost, boolean>();\n\nconst scheduleRender = (instance: RenderHost): void => {\n if (typeof instance.requestRender === 'function') {\n instance.requestRender();\n return;\n }\n\n if (typeof instance.render !== 'function') {\n return;\n }\n\n if (renderQueue.get(instance)) {\n return;\n }\n\n renderQueue.set(instance, true);\n\n requestAnimationFrame(() => {\n renderQueue.set(instance, false);\n\n instance.render?.();\n });\n};\n\nconst defaultCompare = <TValue>(previous: TValue, next: TValue): boolean => previous === next;\n\ninterface WatchOptions<TValue, THost extends RenderHost> {\n compare?: (previous: TValue, next: TValue) => boolean;\n onChange?: (this: THost, next: TValue, previous: TValue) => void;\n transform?: (this: THost, initial: TValue) => TValue;\n}\n\nexport function Watch<TValue, THost extends RenderHost = RenderHost>(options: WatchOptions<TValue, THost> = {}) {\n const { compare = defaultCompare, onChange, transform } = options;\n\n return (\n accessor: ClassAccessorDecoratorTarget<THost, TValue>,\n context: ClassAccessorDecoratorContext<THost, TValue>\n ): ClassAccessorDecoratorResult<THost, TValue> => {\n if (context.kind !== 'accessor') {\n throw new Error('@Watch requires the \"accessor\" keyword on the property.');\n }\n\n return {\n get(this: THost): TValue {\n return accessor.get.call(this);\n },\n set(this: THost, value: TValue): void {\n const previous = accessor.get.call(this);\n\n if (compare(previous, value)) {\n return;\n }\n\n accessor.set.call(this, value);\n\n if (onChange) {\n onChange.call(this, value, previous);\n }\n\n scheduleRender(this);\n },\n init(this: THost, initialValue: TValue): TValue {\n if (transform) {\n return transform.call(this, initialValue);\n }\n\n return initialValue;\n }\n };\n };\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\nexport type MonitorFpsDetail = {\n fps: number | null;\n refreshRate: number | null;\n frameTimeAvg: number | null;\n frameTimeP95: number | null;\n frameTimeMax: number | null;\n droppedFrames: number;\n jankFrames: number;\n longFrames: number;\n};\n\nconst clamp = (value: number, min: number, max: number): number => Math.max(min, Math.min(max, value));\n\nconst mean = (values: readonly number[]): number | null => {\n if (values.length === 0) {\n return null;\n }\n let sum = 0;\n for (const value of values) {\n sum += value;\n }\n return sum / values.length;\n};\n\nconst quantile = (sorted: readonly number[], q: number): number | null => {\n if (sorted.length === 0) {\n return null;\n }\n const clamped = clamp(q, 0, 1);\n const index = Math.floor(clamped * (sorted.length - 1));\n return sorted[index] ?? null;\n};\n\nconst computePercentile = (values: readonly number[], q: number): number | null => {\n if (values.length === 0) {\n return null;\n }\n const sorted = [...values].sort((a, b) => a - b);\n return quantile(sorted, q);\n};\n\nconst computeMedian = (values: readonly number[]): number | null => computePercentile(values, 0.5);\n\nconst formatNumber = (value: number | null, decimals = 0): string => {\n if (value === null || !Number.isFinite(value)) {\n return '—';\n }\n return value.toFixed(decimals);\n};\n\nconst formatMs = (value: number | null, decimals = 1): string => {\n if (value === null || !Number.isFinite(value)) {\n return '—';\n }\n return `${value.toFixed(decimals)}ms`;\n};\n\nconst rateFps = (fps: number | null, targetFps: number | null): 'good' | 'needs-improvement' | 'poor' | 'unknown' => {\n if (fps === null || !Number.isFinite(fps)) {\n return 'unknown';\n }\n const target = targetFps && Number.isFinite(targetFps) ? targetFps : 60;\n const ratio = fps / target;\n if (ratio >= 0.92) {\n return 'good';\n }\n if (ratio >= 0.75) {\n return 'needs-improvement';\n }\n return 'poor';\n};\n\n@Component({\n tag: 'ease-monitor-fps',\n autoSlot: false,\n shadowMode: 'open',\n styles: `\n :host {\n display: block;\n width: 100%;\n color: var(--color-foreground);\n font-family: var(--ease-font-family, \"Instrument Sans\", sans-serif);\n font-variant-numeric: tabular-nums;\n }\n\n [part=\"container\"] {\n display: grid;\n gap: 8px;\n width: 100%;\n }\n\n [part=\"header\"] {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n }\n\n [part=\"title\"] {\n display: inline-flex;\n align-items: baseline;\n gap: 6px;\n min-width: 0;\n }\n\n [part=\"fps\"] {\n font-size: var(--ease-monitor-fps-font-size, 14px);\n font-weight: 650;\n letter-spacing: -0.01em;\n line-height: 1;\n }\n\n [part=\"fps\"][data-rating=\"good\"] {\n color: #22c55e;\n }\n [part=\"fps\"][data-rating=\"needs-improvement\"] {\n color: #eab308;\n }\n [part=\"fps\"][data-rating=\"poor\"] {\n color: #ef4444;\n }\n [part=\"fps\"][data-rating=\"unknown\"] {\n color: var(--color-gray-600);\n }\n\n [part=\"unit\"] {\n font-size: var(--ease-monitor-unit-font-size, var(--ease-font-size-sm, 12px));\n color: var(--color-gray-600);\n font-weight: 500;\n }\n\n [part=\"subtitle\"] {\n font-size: var(--ease-monitor-subtitle-font-size, 11px);\n color: var(--color-gray-600);\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n min-width: 0;\n text-align: right;\n }\n\n canvas[part=\"graph\"] {\n width: 100%;\n height: 44px;\n display: block;\n background: var(--color-gray-900);\n box-shadow: inset 0 0 0 1px var(--color-white-4);\n }\n\n [part=\"stats\"] {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n font-size: var(--ease-monitor-stats-font-size, var(--ease-font-size-sm, 12px));\n padding-left: var(--ease-monitor-stats-padding-left, 4px);\n color: var(--color-gray-600);\n }\n\n [part=\"stat\"] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n min-width: 0;\n }\n\n [part=\"stat\"] strong {\n font-weight: 550;\n color: var(--color-gray-700);\n }\n `\n})\nexport class MonitorFps extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor paused: boolean = false;\n\n @Query<HTMLCanvasElement>('canvas[part=\"graph\"]')\n accessor canvasEl!: HTMLCanvasElement | null;\n\n #rafId: number | null = null;\n #lastNow = 0;\n #lastSampleNow = 0;\n #framesSinceSample = 0;\n\n #frameDeltas: number[] = [];\n #fpsSamples: number[] = [];\n\n #maxFrameDeltas = 240;\n #maxFpsSamples = 90; // 90 * 250ms = ~22.5s\n #sampleIntervalMs = 250;\n #statsWindowFrames = 120;\n\n #data: MonitorFpsDetail = {\n fps: null,\n refreshRate: null,\n frameTimeAvg: null,\n frameTimeP95: null,\n frameTimeMax: null,\n droppedFrames: 0,\n jankFrames: 0,\n longFrames: 0\n };\n\n connectedCallback(): void {\n this.#attachVisibilityHandling();\n if (!this.paused && !document.hidden) {\n this.#start();\n }\n }\n\n disconnectedCallback(): void {\n this.#stop();\n document.removeEventListener('visibilitychange', this.#handleVisibilityChange);\n }\n\n afterRender(): void {\n this.#syncCanvasSize();\n this.#draw();\n }\n\n render(): TemplateResult {\n const fps = this.#data.fps;\n const hz = this.#data.refreshRate;\n const rating = rateFps(fps, hz);\n\n const subtitleParts = [\n this.#data.frameTimeAvg !== null ? `avg ${formatMs(this.#data.frameTimeAvg)}` : null,\n this.#data.frameTimeP95 !== null ? `p95 ${formatMs(this.#data.frameTimeP95)}` : null\n ].filter(Boolean);\n\n return html`\n <div part=\"container\">\n <div part=\"header\">\n <div part=\"title\">\n <span part=\"fps\" data-rating=${rating}>${formatNumber(fps, 0)}</span>\n <span part=\"unit\">FPS</span>\n </div>\n <div part=\"subtitle\">${subtitleParts.join(' · ')}</div>\n </div>\n\n <canvas part=\"graph\" aria-label=\"FPS graph\"></canvas>\n\n <div part=\"stats\">\n <div part=\"stat\"><span>Refresh</span><strong>${hz ? `~${formatNumber(hz, 0)}Hz` : '—'}</strong></div>\n <div part=\"stat\"><span>Dropped</span><strong>${this.#data.droppedFrames}</strong></div>\n <div part=\"stat\"><span>Jank</span><strong>${this.#data.jankFrames}</strong></div>\n <div part=\"stat\"><span>Long frames</span><strong>${this.#data.longFrames}</strong></div>\n <div part=\"stat\"><span>Worst</span><strong>${formatMs(this.#data.frameTimeMax)}</strong></div>\n <div part=\"stat\"><span>Avg</span><strong>${formatMs(this.#data.frameTimeAvg)}</strong></div>\n </div>\n </div>\n `;\n }\n\n #attachVisibilityHandling(): void {\n document.removeEventListener('visibilitychange', this.#handleVisibilityChange);\n document.addEventListener('visibilitychange', this.#handleVisibilityChange, { passive: true });\n }\n\n #handleVisibilityChange = (): void => {\n if (document.hidden) {\n this.#stop();\n return;\n }\n\n if (!this.paused) {\n this.#start();\n }\n };\n\n #start(): void {\n if (this.#rafId !== null) {\n return;\n }\n\n const now = performance.now();\n this.#lastNow = now;\n this.#lastSampleNow = now;\n this.#framesSinceSample = 0;\n\n this.#rafId = requestAnimationFrame(this.#tick);\n }\n\n #stop(): void {\n if (this.#rafId !== null) {\n cancelAnimationFrame(this.#rafId);\n this.#rafId = null;\n }\n }\n\n #tick = (now: number): void => {\n if (this.paused) {\n this.#stop();\n return;\n }\n\n const delta = now - this.#lastNow;\n this.#lastNow = now;\n\n // Ignore huge deltas (tab switch / breakpoints).\n if (delta > 0 && delta < 250) {\n this.#frameDeltas.push(delta);\n if (this.#frameDeltas.length > this.#maxFrameDeltas) {\n this.#frameDeltas.shift();\n }\n }\n\n this.#framesSinceSample += 1;\n\n if (now - this.#lastSampleNow >= this.#sampleIntervalMs) {\n const elapsed = now - this.#lastSampleNow;\n const fpsSample = elapsed > 0 ? (this.#framesSinceSample * 1000) / elapsed : 0;\n\n this.#fpsSamples.push(fpsSample);\n if (this.#fpsSamples.length > this.#maxFpsSamples) {\n this.#fpsSamples.shift();\n }\n\n this.#lastSampleNow = now;\n this.#framesSinceSample = 0;\n\n this.#updateStats();\n this.#emit();\n this.requestRender();\n }\n\n this.#rafId = requestAnimationFrame(this.#tick);\n };\n\n #updateStats(): void {\n const frameWindow = this.#frameDeltas.slice(-this.#statsWindowFrames);\n const fpsWindow = this.#fpsSamples.slice(-Math.min(4, this.#fpsSamples.length));\n\n const frameAvg = mean(frameWindow);\n const frameP95 = computePercentile(frameWindow, 0.95);\n const frameMax = frameWindow.length > 0 ? Math.max(...frameWindow) : null;\n const median = computeMedian(frameWindow);\n\n const refreshRate =\n median && median > 0 ? clamp((1000 / median) as number, 30, 240) : (this.#data.refreshRate ?? null);\n\n const ideal = refreshRate ? 1000 / refreshRate : 1000 / 60;\n\n let droppedFrames = 0;\n let jankFrames = 0;\n let longFrames = 0;\n\n for (const ft of frameWindow) {\n const missed = Math.max(0, Math.round(ft / ideal) - 1);\n droppedFrames += missed;\n\n if (ft > ideal * 1.5) {\n jankFrames += 1;\n }\n\n if (ft > Math.max(50, ideal * 3)) {\n longFrames += 1;\n }\n }\n\n const fps = fpsWindow.length > 0 ? mean(fpsWindow) : null;\n\n this.#data = {\n fps,\n refreshRate,\n frameTimeAvg: frameAvg,\n frameTimeP95: frameP95,\n frameTimeMax: frameMax,\n droppedFrames,\n jankFrames,\n longFrames\n };\n }\n\n #emit(): void {\n this.dispatchEvent(\n new CustomEvent<MonitorFpsDetail>('monitor-fps', {\n detail: this.#data,\n bubbles: true,\n composed: true\n })\n );\n }\n\n #syncCanvasSize(): void {\n const canvas = this.canvasEl;\n if (!canvas) {\n return;\n }\n\n const rect = canvas.getBoundingClientRect();\n const dpr = Math.max(1, window.devicePixelRatio || 1);\n const width = Math.max(1, Math.floor(rect.width * dpr));\n const height = Math.max(1, Math.floor(rect.height * dpr));\n\n if (canvas.width !== width || canvas.height !== height) {\n canvas.width = width;\n canvas.height = height;\n }\n }\n\n #draw(): void {\n const canvas = this.canvasEl;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n const dpr = Math.max(1, window.devicePixelRatio || 1);\n const width = canvas.width / dpr;\n const height = canvas.height / dpr;\n\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.clearRect(0, 0, width, height);\n\n const samples = this.#fpsSamples;\n if (samples.length < 2) {\n return;\n }\n\n const target = this.#data.refreshRate ?? 60;\n const scaleMax = Math.max(60, Math.round(target / 10) * 10);\n\n const rating = rateFps(this.#data.fps, this.#data.refreshRate);\n const stroke =\n rating === 'good'\n ? '#22c55e'\n : rating === 'needs-improvement'\n ? '#eab308'\n : rating === 'poor'\n ? '#ef4444'\n : '#6b7280';\n\n // guide lines\n ctx.save();\n ctx.globalAlpha = 0.35;\n ctx.strokeStyle = '#ffffff';\n ctx.lineWidth = 1;\n ctx.setLineDash([3, 3]);\n\n const drawGuide = (fps: number) => {\n const y = height - clamp(fps / scaleMax, 0, 1) * height;\n ctx.beginPath();\n ctx.moveTo(0, y);\n ctx.lineTo(width, y);\n ctx.stroke();\n };\n\n drawGuide(Math.min(60, scaleMax));\n drawGuide(Math.min(30, scaleMax));\n\n ctx.restore();\n\n const toY = (fps: number) => height - clamp(fps / scaleMax, 0, 1) * height;\n\n // area fill\n ctx.beginPath();\n for (let i = 0; i < samples.length; i += 1) {\n const value = samples[i] ?? 0;\n const x = (i / (samples.length - 1)) * width;\n const y = toY(value);\n if (i === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n }\n ctx.lineTo(width, height);\n ctx.lineTo(0, height);\n ctx.closePath();\n ctx.globalAlpha = 0.12;\n ctx.fillStyle = stroke;\n ctx.fill();\n\n // line\n ctx.beginPath();\n for (let i = 0; i < samples.length; i += 1) {\n const value = samples[i] ?? 0;\n const x = (i / (samples.length - 1)) * width;\n const y = toY(value);\n if (i === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n }\n ctx.globalAlpha = 1;\n ctx.strokeStyle = stroke;\n ctx.lineWidth = 1.75;\n ctx.setLineDash([]);\n ctx.lineJoin = 'round';\n ctx.lineCap = 'round';\n ctx.stroke();\n }\n}\n","import { html } from 'lit-html';\n\nimport { coerceNumber, dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\nimport '../input';\nimport '../icons/interface/minus';\nimport '../icons/interface/plus';\n@Component({\n tag: 'ease-number-input',\n styles: `\n :host {\n display: inline-flex;\n align-items: center;\n }\n\n [part=\"container\"] {\n min-width: 0;\n }\n\n ease-input {\n --ease-input-padding: 0;\n text-align: center;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n font-variant-numeric: tabular-nums;\n font-feature-settings: \"tnum\";\n }\n\n [part=\"button\"] {\n position: relative;\n overflow: hidden;\n \n & > div {\n animation: blink .75s forwards;\n position: absolute;\n pointer-events: none;\n inset: 0;\n background-color: var(--ease-number-blink-color, var(--color-white-8));\n }\n }\n\n @keyframes blink {\n 0%,\n 90%,\n 100% {\n opacity: 0;\n }\n 30% {\n opacity: 1;\n }\n }\n `,\n template(this: NumberInput) {\n return html`\n <div part=\"container\">\n <ease-input\n part=\"control\"\n type=\"number\"\n .value=${this.value}\n ?disabled=${this.disabled}\n ?min=${this.min}\n ?max=${this.max}\n ?step=${this.step}\n @input=${this.handleInput}\n @change=${this.handleChange}\n >\n <button\n slot=\"prefix\"\n @click=${this.handleDecrement.bind(this)}\n type=\"button\"\n part=\"button\"\n ?disabled=${this.disabled || this.min === null || Number(this.control?.value) <= this.min}\n ?aria-disabled=${this.disabled || this.min === null || Number(this.control?.value) <= this.min}\n >\n <ease-icon-minus />\n </button>\n <button\n slot=\"suffix\"\n @click=${this.handleIncrement.bind(this)}\n type=\"button\"\n part=\"button\"\n ?disabled=${this.disabled || this.max === null || Number(this.control?.value) >= this.max}\n ?aria-disabled=${this.disabled || this.max === null || Number(this.control?.value) >= this.max}\n >\n <ease-icon-plus />\n </button>\n </ease-input>\n </div>\n `;\n }\n})\nexport class NumberInput extends HTMLElement {\n declare requestRender: () => void;\n @Prop<number | null>({ type: Number, reflect: true })\n accessor value!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor min!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor max!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor step!: number | null;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLInputElement>('input')\n accessor control!: HTMLInputElement | null;\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n control.value = this.value === null || this.value === undefined ? '' : String(this.value);\n control.min = this.min === null || this.min === undefined ? '' : String(this.min);\n control.max = this.max === null || this.max === undefined ? '' : String(this.max);\n control.step = this.step === null || this.step === undefined ? '' : String(this.step);\n control.name = this.name ?? '';\n control.disabled = Boolean(this.disabled);\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen<NumberInput, Event, HTMLInputElement>('input', { selector: 'input' })\n handleInput(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = coerceNumber(target.value);\n dispatchControlEvent(this, 'input', { value: this.value, event });\n }\n\n @Listen<NumberInput, Event, HTMLInputElement>('change', { selector: 'input' })\n handleChange(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = coerceNumber(target.value);\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n\n addActiveLayer(button: HTMLButtonElement): void {\n const layer = document.createElement('div');\n layer.classList.add('active-layer');\n button.appendChild(layer);\n\n setTimeout(() => {\n layer.remove();\n }, 600);\n }\n\n handleDecrement(event: MouseEvent): void {\n if (this.disabled || this.min === null || Number(this.control?.value) <= this.min) {\n return;\n }\n\n const button = event.currentTarget as HTMLButtonElement;\n this.addActiveLayer(button);\n\n const current = typeof this.value === 'number' ? this.value : 0;\n this.value = current - (this.step ?? 1);\n\n if (this.value <= this.min) {\n this.disabled = true;\n }\n }\n\n handleIncrement(event: MouseEvent): void {\n if (this.disabled || this.max === null || Number(this.control?.value) >= this.max) {\n return;\n }\n\n const button = event.currentTarget as HTMLButtonElement;\n this.addActiveLayer(button);\n\n const current = typeof this.value === 'number' ? this.value : 0;\n this.value = current + (this.step ?? 1);\n\n if (this.value >= this.max) {\n this.disabled = true;\n }\n }\n}\n","import '../dropdown';\n\nimport type { Dropdown } from '../dropdown';\n\nimport { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-origin',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"container\"] {\n flex: 1;\n width: 100%;\n display: grid;\n grid-template-columns: 30px auto;\n grid-gap: 8px;\n }\n\n [part=\"preview\"] {\n width: 30px;\n height: 30px;\n border-radius: var(--radii-md);\n background-color: var(--color-gray-875);\n cursor: pointer;\n box-shadow: inset 0 1px .25px 0 var(--color-white-4), 0 1px 2.5px 0 var(--color-black-8);\n border-radius: var(--radii-md);\n position: relative;\n\n &::before,\n &::after {\n content: '';\n display: block;\n width: 3px;\n height: 3px;\n background-color: var(--color-blue-100);\n border-radius: 50%;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -1.5px;\n margin-left: -1.5px;\n }\n\n &::before {\n background-color: var(--color-gray-700);\n box-shadow: -6.5px -6.5px 0 0 var(--color-gray-700), 0 -6.5px 0 0 var(--color-gray-700), 6.5px -6.5px 0 0 var(--color-gray-700), -6.5px 0 0 0 var(--color-gray-700), 6.5px 0 0 0 var(--color-gray-700), -6.5px 6.5px 0 0 var(--color-gray-700), 0 6.5px 0 0 var(--color-gray-700), 6.5px 6.5px 0 0 var(--color-gray-700);\n }\n\n &::after {\n translate: var(--ease-origin-translate-x, 0) var(--ease-origin-translate-y, 0);\n scale: 1.25;\n transition: translate 0.3s cubic-bezier(0.25, 0, 0.5, 1);\n }\n\n &:hover {\n background-color: var(--color-gray-850);\n }\n\n &:focus-within {\n background-color: var(--color-gray-825);\n }\n\n &[data-value=\"top-left\"] {\n --ease-origin-translate-x: -6.5px;\n --ease-origin-translate-y: -6.5px;\n }\n\n &[data-value=\"top-center\"] {\n --ease-origin-translate-x: 0;\n --ease-origin-translate-y: -6.5px; \n }\n \n &[data-value=\"top-right\"] {\n --ease-origin-translate-x: 6.5px;\n --ease-origin-translate-y: -6.5px;\n }\n\n &[data-value=\"center-left\"] {\n --ease-origin-translate-x: -6.5px;\n --ease-origin-translate-y: 0\n }\n\n &[data-value=\"center-center\"] {\n --ease-origin-translate-x: 0;\n --ease-origin-translate-y: 0;\n }\n\n &[data-value=\"center-right\"] {\n --ease-origin-translate-x: 6.5px;\n --ease-origin-translate-y: 0;\n }\n \n &[data-value=\"bottom-left\"] {\n --ease-origin-translate-x: -6.5px;\n --ease-origin-translate-y: 6.5px;\n }\n \n &[data-value=\"bottom-center\"] {\n --ease-origin-translate-x: 0;\n --ease-origin-translate-y: 6.5px;\n }\n \n &[data-value=\"bottom-right\"] {\n --ease-origin-translate-x: 6.5px;\n --ease-origin-translate-y: 6.5px;\n }\n }\n\n ease-dropdown[part=\"dropdown\"] {\n --ease-dropdown-max-height: 180px;\n\n width: 100%;\n }\n `,\n template(this: Origin) {\n return html`\n <div part=\"container\">\n <div part=\"preview\" data-value=${this.value ?? 'center-center'}></div>\n \n <ease-dropdown part=\"dropdown\" placeholder=\"Select\" id=\"origin-dropdown\" .value=${this.value ?? 'center-center'} fullWidth name=${this.name} @value-change=${this.handleValueChange}>\n <button slot=\"content\" value=\"top-left\">Top Left</button>\n <button slot=\"content\" value=\"top-center\">Top Center</button>\n <button slot=\"content\" value=\"top-right\">Top Right</button>\n <hr slot=\"content\" />\n <button slot=\"content\" value=\"center-left\">Center Left</button>\n <button slot=\"content\" value=\"center-center\">Center Center</button>\n <button slot=\"content\" value=\"center-right\">Center Right</button>\n <hr slot=\"content\" />\n <button slot=\"content\" value=\"bottom-left\">Bottom Left</button>\n <button slot=\"content\" value=\"bottom-center\">Bottom Center</button>\n <button slot=\"content\" value=\"bottom-right\">Bottom Right</button>\n </ease-dropdown>\n </div>\n `;\n }\n})\nexport class Origin extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<string>({ reflect: true, defaultValue: 'center-center' })\n accessor value: string = 'center-center';\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<Dropdown>('ease-dropdown')\n accessor control!: Dropdown | null;\n\n @Prop<string>({ reflect: true, defaultValue: '' })\n accessor name: string = '';\n\n afterRender(): void {\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen<Origin, Event, Dropdown>('change', { selector: 'ease-dropdown' })\n handleChange(event: Event, target?: Dropdown | null): void {\n if (!target) {\n return;\n }\n\n this.value = String(target.value ?? 'center-center');\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n\n handleValueChange = (event: Event): void => {\n this.value = String(this.control?.value ?? 'center-center');\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n}\n","import { html, nothing, type TemplateResult } from 'lit-html';\n\nimport { setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n/**\n * Event detail for tab change events\n */\nexport interface TabChangeEventDetail {\n /** The index of the active tab */\n index: number;\n /** The tab id */\n id: string;\n /** The original event */\n event: Event;\n}\n\n/**\n * Panel component - visual container with optional tabs and header actions.\n *\n * Use this component when you want the panel UI without state management,\n * or wrap it around `<ease-state>` for full functionality.\n *\n * @tag ease-panel\n *\n * @slot headline - Panel title text (hidden when tabs are present)\n * @slot actions - Header action buttons, links, or dropdowns\n * @slot - Default slot for main content\n * @slot tab-{id} - Tab panel content (use `data-tab-label` for display name)\n * @slot footer - Footer content below all panels\n *\n * @csspart section - Outer container\n * @csspart header - Header row containing headline/tabs and actions\n * @csspart headline - Title element\n * @csspart tabs - Tab button container\n * @csspart tab - Individual tab button\n * @csspart actions - Actions container\n * @csspart content - Content wrapper (handles height animations)\n * @csspart body - Inner body container\n * @csspart tab-panel - Individual tab panel\n * @csspart footer - Footer container\n *\n * @fires tab-change - Fired when the active tab changes\n */\n@Component({\n tag: 'ease-panel',\n shadowMode: 'open',\n styles: `\n :host {\n --ease-panel-transition-duration: 120ms;\n --ease-panel-transition-easing: cubic-bezier(.25, 0, .5, 1);\n }\n\n [part=\"section\"] {\n display: block;\n width: 100%;\n max-width: var(--ease-panel-max-width, 332px);\n border-radius: var(--ease-panel-radius, 12px);\n border: 1px solid var(--ease-panel-border-color, var(--color-white-6));\n background-clip: padding-box;\n background: var(--ease-panel-background, var(--color-gray-1000));\n box-shadow: var(--ease-panel-shadow, 0 0 40px 0 var(--color-white-2) inset);\n box-sizing: border-box;\n padding: var(--ease-panel-padding, 12px);\n margin: auto;\n }\n\n [part=\"header\"] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n margin-bottom: 12px;\n }\n\n [part=\"header\"]:not(:has([part=\"headline\"] slot[name=\"headline\"]::slotted(*))):not(:has([part=\"tabs\"]:not(:empty))):not(:has([part=\"actions\"] slot[name=\"actions\"]::slotted(*))) {\n display: none;\n margin-bottom: 0;\n }\n\n [part=\"headline\"] {\n font-size: var(--ease-panel-title-font-size, 14px);\n font-weight: var(--ease-panel-title-font-weight, 500);\n line-height: var(--ease-panel-title-line-height, 24px);\n font-family: var(--ease-font-family, \"Instrument Sans\", sans-serif);\n color: var(--ease-panel-title-color, var(--color-blue-100));\n margin: 0 0 0 4px;\n flex-grow: 1;\n text-ellipsis: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n [part=\"headline\"]:has(+ [part=\"tabs\"]:not(:empty)) {\n display: none;\n }\n\n [part=\"tabs\"] {\n display: flex;\n align-items: center;\n gap: 2px;\n flex-grow: 1;\n margin: 0 0 0 4px;\n }\n\n [part=\"tabs\"]:empty {\n display: none;\n }\n\n [part=\"tab\"] {\n appearance: none;\n font-size: var(--ease-panel-tab-font-size, 13px);\n font-weight: var(--ease-panel-tab-font-weight, 500);\n line-height: var(--ease-panel-tab-line-height, 24px);\n font-family: var(--ease-font-family, \"Instrument Sans\", sans-serif);\n color: var(--ease-panel-tab-color, var(--color-gray-600));\n background: transparent;\n border: none;\n padding: 4px 8px;\n margin: 0;\n cursor: pointer;\n border-radius: var(--ease-panel-tab-radius, 6px);\n transition: color 0.2s, background-color 0.2s;\n }\n\n [part=\"tab\"]:hover {\n color: var(--ease-panel-tab-color-hover, var(--color-blue-100));\n }\n\n [part=\"tab\"][aria-selected=\"true\"] {\n color: var(--ease-panel-tab-color-active, var(--color-blue-100));\n background: var(--ease-panel-tab-background-active, var(--color-white-4));\n }\n\n [part=\"actions\"] {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-left: auto;\n }\n\n slot[name=\"actions\"]::slotted(button),\n slot[name=\"actions\"]::slotted(a) {\n --ease-icon-size: var(--ease-panel-action-icon-size, 16px);\n\n appearance: none;\n flex: 0 0 24px;\n border: none;\n outline: none;\n background-color: transparent;\n padding: 4px;\n margin: 0;\n cursor: pointer;\n color: var(--color-gray-600);\n transition: color 0.2s;\n text-decoration: none;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n slot[name=\"actions\"]::slotted(button:hover),\n slot[name=\"actions\"]::slotted(button:focus-visible),\n slot[name=\"actions\"]::slotted(a:hover),\n slot[name=\"actions\"]::slotted(a:focus-visible) {\n color: var(--color-blue-100);\n }\n\n slot[name=\"actions\"]::slotted(ease-dropdown) {\n flex: 0 0 auto;\n width: auto;\n\n --ease-icon-size: var(--ease-panel-action-icon-size, 16px);\n --ease-dropdown-trigger-padding: 4px;\n --ease-dropdown-radius: 6px;\n --ease-dropdown-background: transparent;\n --ease-dropdown-background-hover: transparent;\n --ease-dropdown-shadow: none;\n --ease-dropdown-color: var(--color-gray-600);\n --ease-popover-placement: bottom-end;\n }\n\n slot[name=\"actions\"]::slotted(ease-dropdown:hover),\n slot[name=\"actions\"]::slotted(ease-dropdown:focus-within) {\n --ease-dropdown-color: var(--color-blue-100);\n }\n\n [part=\"content\"] {\n display: block;\n width: 100%;\n box-sizing: border-box;\n margin: auto;\n overflow: hidden;\n }\n\n [part=\"content\"][data-animating=\"true\"] {\n transition: height var(--ease-panel-transition-duration) var(--ease-panel-transition-easing);\n }\n\n [part=\"body\"] {\n width: 100%;\n position: relative;\n }\n\n [part=\"tab-panel\"] {\n width: 100%;\n pointer-events: none;\n display: none;\n }\n\n [part=\"tab-panel\"][data-state=\"active\"] {\n display: block;\n pointer-events: auto;\n }\n\n [part=\"tab-panel\"][data-state=\"hidden\"] {\n display: none;\n pointer-events: none;\n }\n\n [part=\"footer\"] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: var(--ease-panel-footer-padding, 12px);\n box-sizing: border-box;\n border-top: 1px solid var(--color-white-4);\n\n &:not(:has([data-has-content=\"true\"])) {\n display: none;\n }\n }\n\n ::slotted(:not([slot])),\n ::slotted([slot^=\"tab-\"]) {\n display: grid;\n gap: 12px;\n box-sizing: border-box;\n width: 100%;\n }\n `\n})\nexport class Panel extends HTMLElement {\n declare requestRender: () => void;\n\n #tabs: { id: string; label: string }[] = [];\n #isAnimating = false;\n\n @Prop<number>({\n type: Number,\n reflect: true,\n attribute: 'active-tab',\n defaultValue: 0,\n onChange(next, previous) {\n const self = this as Panel;\n if (next !== previous && previous !== undefined) {\n self.handleActiveTabChange(previous, next);\n }\n }\n })\n accessor activeTab: number = 0;\n\n /** @internal */\n handleActiveTabChange(previous: number, next: number): void {\n this.performTabAnimation(previous, next);\n }\n\n @Query<HTMLElement>('[part=\"content\"]')\n accessor contentElement!: HTMLElement | null;\n\n @Query<HTMLElement>('[part=\"body\"]')\n accessor bodyElement!: HTMLElement | null;\n\n /**\n * Get the tab configuration\n */\n get tabs(): ReadonlyArray<{ id: string; label: string }> {\n return this.#tabs;\n }\n\n /**\n * Switch to a specific tab by index\n * @param index - The tab index (0-based)\n */\n setTab(index: number): void {\n if (index >= 0 && index < this.#tabs.length && index !== this.activeTab) {\n this.activeTab = index;\n }\n }\n\n connectedCallback(): void {\n this.#syncTabs();\n }\n\n afterRender(): void {\n this.#syncTabs();\n }\n\n render(): TemplateResult {\n const hasTabs = this.#tabs.length > 0;\n\n return html`\n <section part=\"section\">\n <div part=\"header\">\n <h3 part=\"headline\"><slot name=\"headline\"></slot></h3>\n ${this.#renderTabs()}\n <div part=\"actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n <div part=\"content\">\n <div part=\"body\">\n ${hasTabs ? this.#renderTabPanels() : html`<slot></slot>`}\n </div>\n </div>\n <div part=\"footer\">\n <slot name=\"footer\"></slot>\n </div>\n </section>\n `;\n }\n\n #renderTabs(): TemplateResult | typeof nothing {\n if (this.#tabs.length === 0) {\n return nothing;\n }\n\n return html`\n <div part=\"tabs\" role=\"tablist\">\n ${this.#tabs.map(\n (tab, index) => html`\n <button\n part=\"tab\"\n role=\"tab\"\n aria-selected=${index === this.activeTab ? 'true' : 'false'}\n aria-controls=${`panel-${tab.id}`}\n tabindex=${index === this.activeTab ? 0 : -1}\n @click=${(e: Event) => this.#handleTabClick(index, tab.id, e)}\n @keydown=${(e: KeyboardEvent) => this.#handleTabKeydown(e, index)}\n >\n ${tab.label}\n </button>\n `\n )}\n </div>\n `;\n }\n\n #renderTabPanels(): TemplateResult {\n return html`\n ${this.#tabs.map(\n (tab, index) => html`\n <div\n part=\"tab-panel\"\n role=\"tabpanel\"\n id=${`panel-${tab.id}`}\n aria-labelledby=${`tab-${tab.id}`}\n data-state=${index === this.activeTab ? 'active' : 'hidden'}\n data-index=${index}\n >\n <slot name=${`tab-${tab.id}`}></slot>\n </div>\n `\n )}\n `;\n }\n\n #handleTabClick(index: number, id: string, event: Event): void {\n if (index === this.activeTab) {\n return;\n }\n\n this.activeTab = index;\n\n this.dispatchEvent(\n new CustomEvent<TabChangeEventDetail>('tab-change', {\n detail: { index, id, event },\n bubbles: true,\n composed: true\n })\n );\n }\n\n #handleTabKeydown(event: KeyboardEvent, currentIndex: number): void {\n let newIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n newIndex = currentIndex > 0 ? currentIndex - 1 : this.#tabs.length - 1;\n break;\n case 'ArrowRight':\n event.preventDefault();\n newIndex = currentIndex < this.#tabs.length - 1 ? currentIndex + 1 : 0;\n break;\n case 'Home':\n event.preventDefault();\n newIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n newIndex = this.#tabs.length - 1;\n break;\n default:\n return;\n }\n\n if (newIndex !== currentIndex) {\n this.activeTab = newIndex;\n\n // Focus the new tab button\n queueMicrotask(() => {\n const tabButtons = this.shadowRoot?.querySelectorAll('[part=\"tab\"]');\n const newTabButton = tabButtons?.[newIndex] as HTMLButtonElement | undefined;\n newTabButton?.focus();\n });\n }\n }\n\n async performTabAnimation(fromIndex: number, toIndex: number): Promise<void> {\n if (this.#isAnimating) {\n return;\n }\n\n this.#isAnimating = true;\n\n const duration = 120;\n const easing = 'cubic-bezier(.25, 0, .5, 1)';\n\n const content = this.contentElement;\n\n if (!content) {\n this.#isAnimating = false;\n this.requestRender();\n return;\n }\n\n // Get the panels by data-index attribute for reliability\n const fromPanel = this.shadowRoot?.querySelector(\n `[part=\"tab-panel\"][data-index=\"${fromIndex}\"]`\n ) as HTMLElement | null;\n const toPanel = this.shadowRoot?.querySelector(`[part=\"tab-panel\"][data-index=\"${toIndex}\"]`) as HTMLElement | null;\n\n if (!fromPanel || !toPanel) {\n this.#isAnimating = false;\n this.requestRender();\n return;\n }\n\n // Lock the current height\n const startHeight = content.getBoundingClientRect().height;\n content.style.height = `${startHeight}px`;\n\n // FIX: Ensure the new panel is hidden immediately.\n toPanel.style.display = 'none';\n toPanel.style.opacity = '0';\n\n // Fade out old content via WAAPI\n try {\n const fadeOut = fromPanel.animate([{ opacity: 1 }, { opacity: 0 }], { duration, easing, fill: 'forwards' });\n await fadeOut.finished;\n fadeOut.cancel();\n } catch {\n // ignore\n }\n\n fromPanel.setAttribute('data-state', 'hidden');\n\n // Prepare and measure new panel while completely invisible\n const previousToState = toPanel.getAttribute('data-state');\n\n toPanel.style.display = 'block';\n toPanel.style.visibility = 'hidden';\n toPanel.style.opacity = '0';\n\n // Force layout, then measure\n void toPanel.offsetHeight;\n const endHeight = toPanel.getBoundingClientRect().height;\n\n // Animate height\n if (startHeight !== endHeight) {\n content.setAttribute('data-animating', 'true');\n void content.offsetHeight;\n content.style.height = `${endHeight}px`;\n await this.#wait(duration);\n }\n\n // Show panel but keep opacity at 0, then fade in\n toPanel.style.visibility = 'visible';\n toPanel.style.opacity = '0';\n\n void toPanel.offsetHeight;\n\n try {\n const fadeIn = toPanel.animate([{ opacity: 0 }, { opacity: 1 }], { duration, easing, fill: 'forwards' });\n await fadeIn.finished;\n fadeIn.cancel();\n } catch {\n // ignore\n }\n\n // Finalize new tab state and cleanup\n toPanel.style.display = '';\n toPanel.style.visibility = '';\n toPanel.style.opacity = '';\n\n if (previousToState !== 'active') {\n toPanel.setAttribute('data-state', 'active');\n }\n\n content.style.height = '';\n content.removeAttribute('data-animating');\n this.#isAnimating = false;\n }\n\n #wait(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n #syncTabs(): void {\n const tabs: { id: string; label: string }[] = [];\n\n for (const child of Array.from(this.children)) {\n const slot = child.getAttribute('slot');\n if (slot?.startsWith('tab-')) {\n const id = slot.replace('tab-', '');\n const label = child.getAttribute('data-tab-label') || id;\n tabs.push({ id, label });\n }\n }\n\n this.#tabs = tabs.slice(0, 3);\n\n if (this.activeTab >= this.#tabs.length && this.#tabs.length > 0) {\n this.activeTab = 0;\n }\n }\n\n @Listen('slotchange', { selector: 'slot[name=\"footer\"]' })\n onFooterSlotChange(): void {\n this.updateFooterAttribute();\n }\n\n @Listen('slotchange', { selector: 'slot:not([name])' })\n onDefaultSlotChange(): void {\n this.#syncTabs();\n this.requestRender();\n }\n\n private updateFooterAttribute(): void {\n const footer = this.shadowRoot?.querySelector('[part=\"footer\"]');\n\n if (!footer) {\n return;\n }\n\n const footerSlot = this.shadowRoot?.querySelector('slot[name=\"footer\"]') as HTMLSlotElement;\n const hasFooter = Boolean(footerSlot?.assignedNodes({ flatten: true }).length > 0);\n setBooleanAttribute(footer, 'data-has-content', hasFooter);\n }\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\nimport '../button';\n\nimport { dispatchControlEvent } from '../shared';\n\nexport * from './option';\n\ninterface RadioEntry {\n element: HTMLElement;\n value: string;\n label: string;\n id: string;\n handlers: {\n click: (event: Event) => void;\n keydown: (event: KeyboardEvent) => void;\n };\n}\nconst nextOptionId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-radio-option-${counter}`;\n };\n})();\n\nconst nextPanelId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-radio-content-${counter}`;\n };\n})();\n\n@Component({\n tag: 'ease-radio-group',\n shadowMode: 'open',\n styles: `\n :host {\n display: flex;\n }\n\n [part=\"option\"] {\n flex: 0 0 50%;\n display: block;\n }\n\n [part=\"group\"] {\n display: flex;\n position: relative;\n z-index: 0;\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n padding: var(--ease-radio-padding, 3px);\n border-radius: var(--ease-radio-radius, var(--radii-md));\n background-color: var(--ease-radio-background, var(--color-gray-875));\n box-shadow: var(\n --ease-radio-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n\n ::slotted(button) {\n padding: var(--ease-radio-option-padding, 4px 0);\n line-height: var(--ease-radio-option-line-height, 16px);\n margin: 0;\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n font-size: var(--ease-radio-option-font-size, var(--ease-font-size-sm, 12px));\n font-weight: var(--ease-radio-option-font-weight, 500);\n color: var(--ease-radio-option-color, var(--color-gray-600));\n transition: color 0.2s;\n flex-grow: 1;\n }\n\n ::slotted(button:hover),\n ::slotted(button:focus-visible) {\n color: var(--color-blue-100);\n }\n\n ::slotted(button[data-active=\"true\"]) {\n color: var(--color-blue-100);\n }\n }\n `,\n template() {\n return html`\n <div part=\"group\">\n <slot name=\"content\"></slot>\n </div>\n `;\n }\n})\nexport class RadioGroup extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<string | null, RadioGroup>({\n reflect: true,\n defaultValue: null,\n onChange(this: RadioGroup, next, previous) {\n if (next === previous) {\n return;\n }\n this.updateOptionSelectionState();\n }\n })\n accessor value: string | null = null;\n\n @Query<HTMLElement>('[part=\"group\"]')\n accessor groupElement!: HTMLElement | null;\n\n @Query<HTMLSlotElement>('slot[name=\"content\"]')\n accessor contentSlot!: HTMLSlotElement | null;\n\n #options: RadioEntry[] = [];\n #currentSlot: HTMLSlotElement | null = null;\n #optionsInitialized = false;\n #handleSlotChange = (): void => {\n this.#syncOptions();\n };\n\n connectedCallback(): void {\n this.#ensureSlotListener();\n }\n\n disconnectedCallback(): void {\n this.#removeSlotListener();\n this.#teardownOptions();\n }\n\n afterRender(): void {\n const panel = this.groupElement;\n\n if (panel) {\n if (!panel.id) {\n panel.id = nextPanelId();\n }\n panel.tabIndex = -1;\n panel.setAttribute('role', 'radiogroup');\n }\n\n this.#ensureSlotListener();\n\n if (!this.#optionsInitialized) {\n queueMicrotask(() => {\n this.#syncOptions();\n });\n } else {\n this.updateOptionSelectionState();\n }\n }\n\n #ensureSlotListener(): void {\n const slot = this.contentSlot;\n\n if (slot === this.#currentSlot) {\n return;\n }\n\n if (this.#currentSlot) {\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n }\n\n if (slot) {\n slot.addEventListener('slotchange', this.#handleSlotChange);\n }\n\n this.#currentSlot = slot ?? null;\n }\n\n #removeSlotListener(): void {\n if (!this.#currentSlot) {\n return;\n }\n\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n this.#currentSlot = null;\n }\n\n #syncOptions(): void {\n const assigned = this.contentSlot?.assignedElements({ flatten: true }) ?? [];\n const elements = assigned.filter((node): node is HTMLElement => node instanceof HTMLElement);\n\n this.#removeOptionListeners(this.#options);\n\n const options: RadioEntry[] = [];\n\n elements.forEach((element) => {\n if (element.hasAttribute('data-select-ignore') || element.getAttribute('role') === 'separator') {\n return;\n }\n\n const value = this.#resolveOptionValue(element);\n const label = this.#resolveOptionLabel(element, value);\n const id = element.id && element.id.trim().length > 0 ? element.id : nextOptionId();\n\n if (!element.id) {\n element.id = id;\n }\n\n element.setAttribute('role', 'option');\n element.setAttribute('aria-selected', 'false');\n element.setAttribute('variant', this.value === value ? 'default' : 'link');\n element.dataset.active = 'false';\n element.tabIndex = -1;\n\n const handlers = {\n click: (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.#selectOption(value, label, event);\n },\n keydown: (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.#selectOption(value, label, event);\n }\n }\n } as RadioEntry['handlers'];\n\n element.addEventListener('click', handlers.click, { passive: false });\n element.addEventListener('keydown', handlers.keydown);\n\n options.push({ element, value, label, id, handlers });\n });\n\n this.#options = options;\n this.#optionsInitialized = options.length > 0;\n\n if (this.value === null && options.length > 0) {\n const preselected = options.find(\n (option) =>\n option.element.hasAttribute('selected') ||\n option.element.dataset.selected === 'true' ||\n option.element.getAttribute('aria-selected') === 'true'\n );\n\n if (preselected) {\n this.value = preselected.value;\n }\n }\n\n this.updateOptionSelectionState();\n }\n\n #teardownOptions(): void {\n this.#removeOptionListeners(this.#options);\n this.#options = [];\n this.#optionsInitialized = false;\n }\n\n #removeOptionListeners(options: RadioEntry[]): void {\n options.forEach((option) => {\n option.element.removeEventListener('click', option.handlers.click);\n option.element.removeEventListener('keydown', option.handlers.keydown);\n option.element.dataset.active = 'false';\n option.element.setAttribute('aria-selected', 'false');\n option.element.tabIndex = -1;\n });\n }\n\n updateOptionSelectionState(): void {\n if (!this.#optionsInitialized) {\n return;\n }\n\n let selectedLabel: string | null = null;\n\n const options = this.#options;\n\n options.forEach((option) => {\n const isSelected = this.value !== null && option.value === this.value;\n option.element.setAttribute('aria-selected', isSelected ? 'true' : 'false');\n option.element.dataset.active = isSelected ? 'true' : 'false';\n option.element.tabIndex = isSelected ? 0 : -1;\n option.element.setAttribute('variant', isSelected ? 'default' : 'link');\n\n if (isSelected) {\n selectedLabel = option.label;\n }\n });\n\n if (!selectedLabel) {\n const fallback = options[0];\n if (fallback) {\n fallback.element.tabIndex = 0;\n }\n }\n const hasValue = Boolean(this.value && selectedLabel);\n this.toggleAttribute('data-has-value', hasValue);\n }\n\n #selectOption(value: string, label: string, originEvent: Event): void {\n originEvent.preventDefault();\n originEvent.stopPropagation();\n\n const previousValue = this.value;\n this.value = value;\n\n if (previousValue !== value) {\n this.#dispatchValueChange(value, label, originEvent);\n }\n }\n\n #resolveOptionValue(element: HTMLElement): string {\n const explicitValue = element.getAttribute('value') ?? element.getAttribute('data-value') ?? element.dataset.value;\n\n if (explicitValue && explicitValue.trim().length > 0) {\n return explicitValue.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n const fallback = nextOptionId();\n element.dataset.value = fallback;\n return fallback;\n }\n\n #resolveOptionLabel(element: HTMLElement, fallback: string): string {\n const explicitLabel = element.getAttribute('data-label') ?? element.getAttribute('aria-label');\n\n if (explicitLabel && explicitLabel.trim().length > 0) {\n return explicitLabel.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n return fallback;\n }\n\n #dispatchValueChange(value: string, label: string, event: Event): void {\n dispatchControlEvent(this, 'change', { value, event });\n\n this.dispatchEvent(\n new CustomEvent('value-change', {\n detail: { value, label, event },\n bubbles: true,\n composed: true\n })\n );\n }\n}\n","export class RadioOption extends HTMLElement {\n connectedCallback(): void {\n this.hidden = true;\n if (!this.hasAttribute('slot')) {\n this.setAttribute('slot', 'option');\n }\n }\n}\n\nif (!customElements.get('radio-option')) {\n customElements.define('radio-option', RadioOption);\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-radio-input',\n shadowMode: 'open',\n styles: `\n .radio {\n display: table;\n border-radius: var(--ease-radio-input-radius, 12px);\n position: relative;\n }\n\n [part=\"radio\"] {\n display: table;\n appearance: none;\n outline: none;\n border: none;\n background: none;\n margin: 0;\n padding: 0;\n border-radius: inherit;\n }\n\n [part=\"control\"] {\n appearance: none;\n outline: none;\n border: none;\n background: none;\n display: block;\n cursor: pointer;\n margin: 0;\n padding: 0;\n border-radius: inherit;\n width: var(--ease-radio-input-size, 24px);\n height: var(--ease-radio-input-size, 24px);\n }\n\n .radio svg {\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n pointer-events: none;\n fill: var(--ease-radio-input-dot-color, var(--color-blue-100));\n transform: scale(1.01) translateZ(0);\n }\n\n [part=\"control\"] {\n box-shadow: inset 0 0 0 var(--ease-radio-input-border-width, 2px) var(--ease-radio-input-border-color, var(--color-gray-700));\n }\n\n .radio svg .top {\n transform-origin: 12px -12px;\n transform: translateY(0) scale(1.75, 1) translateZ(0);\n opacity: 0;\n }\n\n .radio svg .dot {\n transform: translateY(-17px) translateZ(0);\n opacity: 0;\n }\n\n .radio svg .drop {\n transform: translateY(-14px) translateZ(0);\n opacity: 0;\n }\n\n [part=\"control\"]:checked {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-size, 6.75px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n\n [part=\"control\"]:checked + svg .top {\n transform: translateY(0px) scale(1.75, 1) translateZ(0);\n opacity: 1;\n }\n\n [part=\"control\"]:checked + svg .dot {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n\n [part=\"control\"]:checked + svg .drop {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n\n [part=\"control\"].anim-checked {\n animation: radio-border-expand 0.8s ease-out forwards;\n }\n\n [part=\"control\"].anim-checked + svg .top {\n animation: radio-top 0.8s ease-out 0.2s forwards;\n }\n\n [part=\"control\"].anim-checked + svg .dot {\n animation: radio-dot 0.6s ease-out 0.2s forwards;\n }\n\n [part=\"control\"].anim-checked + svg .drop {\n animation: radio-drop 0.6s ease-out 0.4s forwards;\n }\n\n [part=\"control\"].anim-unchecked {\n animation: radio-border-contract 0.8s ease-out forwards;\n }\n\n [part=\"control\"].anim-unchecked + svg .top {\n animation: radio-top-reverse 0.8s ease-out forwards;\n }\n\n [part=\"control\"].anim-unchecked + svg .dot {\n animation: radio-dot-reverse 0.6s ease-out forwards;\n }\n\n [part=\"control\"].anim-unchecked + svg .drop {\n animation: radio-drop-reverse 0.6s ease-out forwards;\n }\n\n @keyframes radio-border-expand {\n 0% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-border-width, 2px) var(--ease-radio-input-border-color, var(--color-gray-700));\n }\n 25% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-max, 12px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-size, 6.75px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n }\n\n @keyframes radio-top {\n 0% {\n transform: translateY(0) scale(1.75, 1) translateZ(0);\n }\n 25% {\n transform: translateY(6px) scale(1, 1.25) translateZ(0);\n }\n 100% {\n transform: translateY(0px) scale(1.75, 1) translateZ(0);\n }\n }\n\n @keyframes radio-dot {\n 0% {\n transform: translateY(-17px) translateZ(0);\n }\n 50% {\n transform: translateY(2px) translateZ(0);\n }\n 100% {\n transform: translateY(0px) translateZ(0);\n }\n }\n\n @keyframes radio-drop {\n 0% {\n transform: translateY(-14px) translateZ(0);\n }\n 100% {\n transform: translateY(0px) translateZ(0);\n }\n }\n\n @keyframes radio-border-contract {\n 0% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-size, 6.75px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n 75% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-max, 12px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-border-width, 2px) var(--ease-radio-input-border-color, var(--color-gray-700));\n }\n }\n\n @keyframes radio-top-reverse {\n 0% {\n transform: translateY(0px) scale(1.75, 1) translateZ(0);\n opacity: 1;\n }\n 75% {\n transform: translateY(6px) scale(1, 1.25) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translateY(0) scale(1.75, 1) translateZ(0);\n opacity: 0;\n }\n }\n\n @keyframes radio-dot-reverse {\n 0% {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n 50% {\n transform: translateY(2px) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translateY(-17px) translateZ(0);\n opacity: 0;\n }\n }\n\n @keyframes radio-drop-reverse {\n 0% {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translateY(-14px) translateZ(0);\n opacity: 0;\n }\n }\n `,\n template(this: RadioInput) {\n return html`\n <button part=\"radio\" type=\"button\" role=\"radio\" aria-checked=${this.checked} ?disabled=${this.disabled}>\n <div class=\"radio\">\n <input part=\"control\" name=${this.name} value=${this.value} ?checked=${this.checked} ?disabled=${this.disabled} type=\"radio\" />\n <svg viewBox=\"0 0 24 24\" filter=\"url(#${this.filterId})\">\n <circle class=\"top\" cx=\"12\" cy=\"-12\" r=\"8\" />\n <circle class=\"dot\" cx=\"12\" cy=\"12\" r=\"5\" />\n <circle class=\"drop\" cx=\"12\" cy=\"12\" r=\"2\" />\n </svg>\n </div>\n\n <svg style=\"display: none;\">\n <defs>\n <filter id=\"${this.filterId}\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"1.25\" result=\"blur\" />\n <feColorMatrix in=\"blur\" mode=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9\" result=\"gooey\" />\n <feBlend in=\"SourceGraphic\" in2=\"gooey\" />\n </filter>\n </defs>\n </svg>\n </button>\n `;\n }\n})\nexport class RadioInput extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean, RadioInput>({\n type: Boolean,\n reflect: true,\n onChange(this: RadioInput, next: boolean) {\n if (next && this.name) {\n const form = this.closest('form');\n const root = form ?? (this.getRootNode() as Document | ShadowRoot);\n const others = Array.from(root.querySelectorAll(`ease-radio-input[name=\"${this.name}\"]`)) as RadioInput[];\n\n others.forEach((other) => {\n if (other !== this && other.checked) {\n other.checked = false;\n }\n });\n }\n }\n })\n accessor checked!: boolean;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLButtonElement>('button')\n accessor control!: HTMLButtonElement | null;\n\n private _prevChecked?: boolean;\n private _firstRender = true;\n\n filterId: string = `goo-${crypto.randomUUID()}`;\n\n connectedCallback(): void {\n this._prevChecked = this.checked;\n }\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n if (this._firstRender) {\n this._firstRender = false;\n this._prevChecked = this.checked;\n }\n\n const changed = typeof this._prevChecked !== 'undefined' && this.checked !== this._prevChecked;\n if (changed) {\n this._triggerAnimation(this.checked);\n this._prevChecked = this.checked;\n }\n\n const control = this.control;\n control.setAttribute('aria-checked', this.checked ? 'true' : 'false');\n control.disabled = Boolean(this.disabled);\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n private _triggerAnimation(checked: boolean): void {\n const input = this.shadowRoot?.querySelector('[part=\"control\"]') as HTMLInputElement;\n const svg = this.shadowRoot?.querySelector('svg[viewBox=\"0 0 24 24\"]');\n if (!input || !svg) {\n return;\n }\n\n input.classList.remove('anim-checked', 'anim-unchecked');\n svg.classList.remove('anim-checked', 'anim-unchecked');\n\n const animClass = checked ? 'anim-checked' : 'anim-unchecked';\n input.classList.add(animClass);\n svg.classList.add(animClass);\n\n const duration = 800; // Longest animation duration in ms\n\n setTimeout(() => {\n input.classList.remove(animClass);\n svg.classList.remove(animClass);\n }, duration);\n }\n\n @Listen<RadioInput, MouseEvent, HTMLButtonElement>('click', { selector: 'button' })\n handleClick(event: MouseEvent): void {\n if (this.disabled || this.checked) {\n event.preventDefault();\n event.stopPropagation();\n\n return;\n }\n\n this.checked = true;\n\n dispatchControlEvent(this, 'radio', { value: this.checked, event });\n }\n}\n","import '../input';\n\nimport { html } from 'lit-html';\n\nimport { type ControlEventDetail, coerceNumber, dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-slider',\n styles: `\n :host {\n display: contents;\n --track-color: var(--ease-slider-track-color, var(--color-gray-825));\n --active-track-color: var(--ease-slider-active-track-color, var(--color-blue-1100));\n --thumb-color: var(--ease-slider-thumb-color, var(--color-blue-900));\n --thumb-size: var(--ease-slider-thumb-size, 18px);\n --track-height: var(--ease-slider-track-height, 4px);\n }\n\n [part=\"container\"] {\n flex: 1;\n display: grid;\n grid-template-columns: auto var(--ease-slider-value-width, 36px);\n grid-gap: var(--ease-slider-gap, 12px);\n }\n\n ease-input[part=\"value\"] {\n --ease-input-padding: 8px 0;\n min-width: 0;\n text-align: center;\n width: var(--ease-slider-value-width, 36px);\n font-variant-numeric: tabular-nums;\n font-feature-settings: \"tnum\";\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n }\n\n input[part=\"control\"][type=\"range\"] {\n height: var(--ease-slider-height, 30px);\n margin: 0;\n padding: 0;\n appearance: none;\n background-color: transparent;\n width: 100%;\n cursor: pointer;\n }\n\n input[part=\"control\"][type=\"range\"]::-webkit-slider-runnable-track {\n width: 100%;\n height: var(--track-height);\n background: linear-gradient(to right, var(--active-track-color) var(--progress, 0%), var(--track-color) var(--progress, 0%));\n border-radius: calc(var(--track-height) / 2);\n border: none;\n }\n\n input[part=\"control\"][type=\"range\"]::-moz-range-track {\n width: 100%;\n height: var(--track-height);\n background: var(--track-color);\n border-radius: calc(var(--track-height) / 2);\n border: none;\n }\n\n input[part=\"control\"][type=\"range\"]::-moz-range-progress {\n background-color: var(--active-track-color);\n height: var(--track-height);\n border-radius: calc(var(--track-height) / 2);\n }\n\n input[part=\"control\"][type=\"range\"]::-webkit-slider-thumb {\n appearance: none;\n height: var(--thumb-size);\n width: var(--thumb-size);\n border-radius: 50%;\n margin-top: calc((var(--track-height) - var(--thumb-size)) / 2);\n box-shadow: inset 0 0 0 .75px var(--color-white-15), inset 0 0 5px var(--color-white-20);\n transition: transform 0.2s;\n position: relative;\n background: radial-gradient(circle at center, var(--color-blue-100-50) 4.5px, var(--color-white-0) 4.5px), var(--thumb-color) no-repeat center center;\n }\n \n input[part=\"control\"][type=\"range\"]:hover::-webkit-slider-thumb {\n transform: scale(1.075);\n }\n \n input[part=\"control\"][type=\"range\"]:active::-webkit-slider-thumb {\n transform: scale(.975);\n }\n\n input[part=\"control\"][type=\"range\"]::-moz-range-thumb {\n height: var(--thumb-size);\n width: var(--thumb-size);\n border-radius: 50%;\n background: radial-gradient(circle at center, var(--color-blue-100-50) 4.5px, var(--color-white-0) 4.5px), var(--thumb-color) no-repeat center center;\n border: none;\n box-shadow: inset 0 0 0 .75px var(--color-white-15), inset 0 0 5px var(--color-white-20);\n transition: transform 0.2s;\n position: relative;\n }\n\n input[part=\"control\"][type=\"range\"]:hover::-moz-range-thumb {\n transform: scale(1.075);\n }\n\n input[part=\"control\"][type=\"range\"]:active::-moz-range-thumb {\n transform: scale(.975);\n }\n `,\n template(this: Slider) {\n return html`\n <div part=\"container\">\n <input\n part=\"control\"\n type=\"range\"\n .min=${this.min ?? 0}\n .max=${this.max ?? 100}\n .step=${this.step ?? 1}\n .value=${String(this.value ?? 0)}\n ?disabled=${this.disabled}\n ?aria-disabled=${this.disabled}\n />\n \n <ease-input\n part=\"value\"\n type=\"number\"\n placeholder=\"-\"\n .disabled=${Boolean(this.disabled)}\n .value=${this.value === null || this.value === undefined ? '' : String(this.value)}\n />\n </div>\n `;\n }\n})\nexport class Slider extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor value!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor min!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor max!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor step!: number | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLInputElement>('input')\n accessor control!: HTMLInputElement | null;\n\n @Query<HTMLElement>('ease-input')\n accessor valueControl!: (HTMLElement & { value?: string | null }) | null;\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n const value = this.value ?? 0;\n\n control.value = String(value);\n control.min = this.min === null || this.min === undefined ? '' : String(this.min);\n control.max = this.max === null || this.max === undefined ? '' : String(this.max);\n control.step = this.step === null || this.step === undefined ? '' : String(this.step);\n control.type = 'range';\n control.setAttribute('part', 'control');\n control.disabled = Boolean(this.disabled);\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n this.updateProgress();\n }\n\n @Listen<Slider, Event, HTMLInputElement>('input', { selector: 'input[type=\"range\"]' })\n handleRangeInput(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n const numericValue = coerceNumber(target.value);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.valueControl) {\n this.valueControl.value = numericValue === null ? '' : String(numericValue);\n }\n\n dispatchControlEvent(this, 'input', { value: this.value, event });\n }\n\n @Listen<Slider, Event, HTMLInputElement>('change', { selector: 'input[type=\"range\"]' })\n handleRangeChange(event: Event, target?: HTMLInputElement | null): void {\n if (target) {\n const numericValue = coerceNumber(target.value);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.valueControl) {\n this.valueControl.value = numericValue === null ? '' : String(numericValue);\n }\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n\n @Listen<Slider, CustomEvent<ControlEventDetail<string>>, HTMLElement>('input', {\n selector: 'ease-input',\n when: (event) => event instanceof CustomEvent && typeof (event as CustomEvent).detail?.value === 'string'\n })\n handleValueInput(event: CustomEvent<ControlEventDetail<string>>): void {\n const rawValue = event.detail?.value ?? '';\n const numericValue = coerceNumber(rawValue);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.control) {\n this.control.value = String(numericValue ?? 0);\n }\n\n dispatchControlEvent(this, 'input', { value: this.value, event: event.detail?.event ?? event });\n }\n\n @Listen<Slider, CustomEvent<ControlEventDetail<string>>, HTMLElement>('change', {\n selector: 'ease-input',\n when: (event) => event instanceof CustomEvent && typeof (event as CustomEvent).detail?.value === 'string'\n })\n handleValueChange(event: CustomEvent<ControlEventDetail<string>>): void {\n const rawValue = event.detail?.value ?? '';\n const numericValue = coerceNumber(rawValue);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.control) {\n this.control.value = String(numericValue ?? 0);\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event: event.detail?.event ?? event });\n }\n\n updateProgress(): void {\n if (!this.control) {\n return;\n }\n\n // Ensure numeric coercion for proper calculation\n const value = Number(this.value) || 0;\n const min = Number(this.min) || 0;\n const max = Number(this.max) || 100;\n const percent = max === min ? 0 : ((value - min) / (max - min)) * 100;\n this.control.style.setProperty('--progress', `${Math.max(0, Math.min(100, percent))}%`);\n }\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { CONTROL_CHANGE_EVENT, type ControlEventDetail, dispatchControlEvent } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\ntype ControlElement = Element & {\n value?: unknown;\n checked?: unknown;\n name?: string;\n};\n\ntype StateChangeCallback<T = unknown> = (value: T, name: string) => void;\ntype StateSubscription = { unsubscribe: () => void };\n\n/**\n * Event detail for state change events\n */\nexport interface StateChangeEventDetail {\n /** The name of the control that changed */\n name: string;\n /** The new value */\n value: unknown;\n /** The complete state object */\n state: Record<string, unknown>;\n /** The original event */\n event: Event;\n}\n\nconst readControlValue = (element: ControlElement): unknown => {\n if (typeof element.value === 'string' || typeof element.value === 'number') {\n return element.value;\n }\n\n if (typeof element.checked === 'boolean') {\n return element.checked;\n }\n\n if ('getAttribute' in element) {\n const attr = (element as Element).getAttribute('value');\n if (attr !== null) {\n return attr;\n }\n }\n\n return element.textContent?.trim() ?? null;\n};\n\nconst getControlName = (element: ControlElement): string | null => {\n if (typeof element.name === 'string' && element.name) {\n return element.name;\n }\n return element.getAttribute?.('name') ?? null;\n};\n\n/**\n * State aggregator component - collects and manages state from child controls.\n *\n * This component provides state management without any visual styling.\n * Use it standalone or wrap it with `<ease-panel>` for a styled container.\n *\n * @tag ease-state\n *\n * @slot - Default slot for controls\n *\n * @fires state-change - Fired when any control value changes\n *\n * @example\n * ```html\n * <!-- Standalone usage (no panel) -->\n * <ease-state>\n * <ease-field label=\"Duration\">\n * <ease-slider name=\"duration\" value=\"1\" min=\"0\" max=\"5\"></ease-slider>\n * </ease-field>\n * <ease-field label=\"Loop\">\n * <ease-toggle name=\"loop\"></ease-toggle>\n * </ease-field>\n * </ease-state>\n *\n * <!-- With panel wrapper -->\n * <ease-panel>\n * <span slot=\"headline\">Animation Controls</span>\n * <ease-state>\n * <ease-field label=\"Duration\">\n * <ease-slider name=\"duration\" value=\"1\" min=\"0\" max=\"5\"></ease-slider>\n * </ease-field>\n * </ease-state>\n * </ease-panel>\n * ```\n */\n@Component({\n tag: 'ease-state',\n shadowMode: 'open',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"container\"] {\n display: grid;\n gap: var(--ease-state-gap, 12px);\n box-sizing: border-box;\n width: 100%;\n }\n `\n})\nexport class State extends HTMLElement {\n declare requestRender: () => void;\n\n #controls: Map<string, ControlElement> = new Map();\n #state: Record<string, unknown> = {};\n #initialState: Record<string, unknown> = {};\n #subscribers: Map<string | '*', Set<StateChangeCallback>> = new Map();\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Query<HTMLSlotElement>('slot')\n accessor defaultSlot!: HTMLSlotElement | null;\n\n /**\n * Get the current state object with all control values\n */\n get state(): Readonly<Record<string, unknown>> {\n return { ...this.#state };\n }\n\n /**\n * Get a specific control value by name\n * @param name - The control name\n * @returns The control value or undefined\n */\n get(name: string): unknown {\n return this.#state[name];\n }\n\n /**\n * Set a control value programmatically\n * @param name - The control name\n * @param value - The new value\n */\n set(name: string, value: unknown): void {\n const control = this.#controls.get(name);\n if (control) {\n // Update the control element\n if ('value' in control) {\n (control as { value: unknown }).value = value;\n } else if (typeof value === 'boolean' && 'checked' in control) {\n (control as { checked: boolean }).checked = value;\n }\n }\n\n this.#updateState(name, value, new Event('programmatic'));\n }\n\n /**\n * Subscribe to state changes\n * @param nameOrCallback - Control name to watch, '*' for all, or callback for all changes\n * @param callback - Callback when using name filter\n * @returns Subscription with unsubscribe method\n */\n subscribe(callback: StateChangeCallback): StateSubscription;\n subscribe(name: string, callback: StateChangeCallback): StateSubscription;\n subscribe(nameOrCallback: string | StateChangeCallback, callback?: StateChangeCallback): StateSubscription {\n let name: string;\n let cb: StateChangeCallback;\n\n if (typeof nameOrCallback === 'function') {\n name = '*';\n cb = nameOrCallback;\n } else {\n name = nameOrCallback;\n if (!callback) {\n throw new Error('[ease-state] subscribe(name, callback) requires a callback');\n }\n cb = callback;\n }\n\n if (!this.#subscribers.has(name)) {\n this.#subscribers.set(name, new Set());\n }\n this.#subscribers.get(name)?.add(cb);\n\n return {\n unsubscribe: () => {\n this.#subscribers.get(name)?.delete(cb);\n }\n };\n }\n\n /**\n * Reset all controls to their initial values\n */\n reset(): void {\n for (const [name, value] of Object.entries(this.#initialState)) {\n this.set(name, value);\n }\n }\n\n connectedCallback(): void {\n this.#attach();\n this.defaultSlot?.addEventListener('slotchange', this.#handleSlotChange);\n }\n\n disconnectedCallback(): void {\n this.#detach();\n this.defaultSlot?.removeEventListener('slotchange', this.#handleSlotChange);\n }\n\n render(): TemplateResult {\n return html`\n <div part=\"container\">\n <slot></slot>\n </div>\n `;\n }\n\n @Listen<State, CustomEvent<ControlEventDetail>>('input', { target: (host) => host })\n handleInternalInput(event: CustomEvent<ControlEventDetail>): void {\n this.#handleControlEvent(event);\n }\n\n @Listen<State, CustomEvent<ControlEventDetail>>('change', { target: (host) => host })\n handleInternalChange(event: CustomEvent<ControlEventDetail>): void {\n this.#handleControlEvent(event);\n }\n\n @Listen<State, CustomEvent<ControlEventDetail>>(CONTROL_CHANGE_EVENT, { target: (host) => host })\n handleControlChange(event: CustomEvent<ControlEventDetail>): void {\n this.#handleControlEvent(event);\n }\n\n #handleControlEvent(event: Event | CustomEvent<ControlEventDetail>): void {\n if ('detail' in event && event.detail?.name) {\n this.#updateState(event.detail.name, event.detail.value, event);\n return;\n }\n\n if (!(event.target instanceof Element)) {\n return;\n }\n\n const control = event.target as ControlElement;\n const name = getControlName(control);\n\n if (!name || !this.#controls.has(name)) {\n return;\n }\n\n const value = readControlValue(control);\n this.#updateState(name, value, event);\n }\n\n #handleSlotChange = (): void => {\n this.#detach();\n this.#attach();\n };\n\n #attach(): void {\n const slot = this.defaultSlot;\n if (!slot) {\n return;\n }\n\n const findControls = (el: Element): ControlElement[] => {\n const controls: ControlElement[] = [];\n const name = getControlName(el as ControlElement);\n\n if (name) {\n controls.push(el as ControlElement);\n }\n\n if (el.shadowRoot) {\n for (const child of el.shadowRoot.querySelectorAll('[name]')) {\n const childName = getControlName(child as ControlElement);\n if (childName) {\n controls.push(child as ControlElement);\n }\n }\n }\n\n for (const child of el.querySelectorAll('[name]')) {\n const childName = getControlName(child as ControlElement);\n if (childName) {\n controls.push(child as ControlElement);\n }\n }\n\n return controls;\n };\n\n this.#controls.clear();\n this.#state = {};\n\n const elements = slot.assignedElements({ flatten: true });\n\n for (const element of elements) {\n const controls = findControls(element);\n for (const control of controls) {\n const name = getControlName(control);\n if (name) {\n this.#controls.set(name, control);\n const value = readControlValue(control);\n this.#state[name] = value;\n this.#initialState[name] = value;\n }\n }\n }\n\n const first = this.#controls.values().next().value;\n if (first) {\n const name = getControlName(first);\n this.value = name && this.#state[name] != null ? String(this.#state[name]) : null;\n }\n }\n\n #detach(): void {\n this.#controls.clear();\n }\n\n #updateState(name: string, value: unknown, event: Event): void {\n const prevValue = this.#state[name];\n if (prevValue === value) {\n return;\n }\n\n this.#state[name] = value;\n\n this.value = String(value);\n\n for (const cb of this.#subscribers.get(name) ?? []) {\n cb(value, name);\n }\n for (const cb of this.#subscribers.get('*') ?? []) {\n cb(value, name);\n }\n\n dispatchControlEvent(this, 'state-change', {\n name,\n value,\n state: this.state,\n event\n } as StateChangeEventDetail & { event: Event });\n }\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-toggle',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"control\"] {\n display: block;\n border-radius: var(--ease-toggle-radius, 10px);\n padding: var(--ease-toggle-padding, 4px);\n margin: 0;\n border: none;\n outline: none;\n appearance: none;\n cursor: pointer;\n background-color: var(--ease-toggle-on-background, var(--color-blue-900));\n transition: box-shadow 0.2s, background-color 0.2s;\n }\n\n [part=\"control\"] svg {\n width: var(--ease-toggle-width, 26px);\n height: var(--ease-toggle-height, 12px);\n display: block;\n fill: none;\n overflow: visible;\n\n path {\n transition: scale 0.2s, translate 0.2s, opacity 0.2s;\n stroke: var(--color-white);\n fill: var(--color-white-80);\n stroke-width: 1.5;\n }\n\n [part=\"default\"] {\n transform-origin: 6px 6px;\n }\n\n [part=\"active\"] {\n transform-origin: 23px 6px;\n }\n\n }\n\n :host([disabled]) [part=\"control\"] {\n cursor: default;\n opacity: 0.75;\n }\n\n :host([checked]) [part=\"control\"] {\n box-shadow: inset 0 0 0 1px var(--color-white-15), inset 0 1px 0 0 var(--color-white-20), inset 0 4px 6px 0 var(--ease-toggle-shadow, var(--color-white-12));\n\n &:hover {\n --ease-toggle-shadow: var(--color-white-30);\n }\n\n svg {\n [part=\"default\"] {\n scale: .25;\n translate: 10px 0;\n opacity: 0;\n }\n\n [part=\"active\"] {\n scale: 1;\n translate: 0 0;\n }\n }\n }\n\n :host(:not([checked])) [part=\"control\"] {\n background-color: var(--ease-toggle-off-background, var(--color-gray-800));\n box-shadow: inset 0 0 0 1px var(--color-white-10), inset 0 1px 0 0 var(--color-white-10), inset 0 4px 6px 0 var(--ease-toggle-shadow, var(--color-white-6));\n\n &:hover {\n --ease-toggle-shadow: var(--color-white-12);\n }\n\n svg {\n [part=\"default\"] {\n scale: 1;\n translate: 0 0;\n }\n\n [part=\"active\"] {\n scale: .25;\n translate: -10px 0;\n opacity: 0;\n }\n }\n }\n `,\n template(this: Toggle) {\n return html`\n <button part=\"control\" type=\"button\" aria-pressed=\"false\">\n <svg viewBox=\"0 0 26 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" filter=\"url(#${this.filterId})\">\n <path part=\"default\" d=\"M0 6C0 2.68629 2.68629 0 6 0V0C9.31371 0 12 2.68629 12 6V6C12 9.31371 9.31371 12 6 12V12C2.68629 12 0 9.31371 0 6V6Z\" />\n <path part=\"active\" d=\"M14 6C14 2.68629 16.6863 0 20 0V0C23.3137 0 26 2.68629 26 6V6C26 9.31371 23.3137 12 20 12V12C16.6863 12 14 9.31371 14 6V6Z\" />\n </svg>\n\n <svg style=\"display: none;\">\n <defs>\n <filter id=\"${this.filterId}\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"8\" result=\"blur\" />\n <feColorMatrix in=\"blur\" mode=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9\" result=\"gooey\" />\n <feBlend in=\"SourceGraphic\" in2=\"gooey\" />\n </filter>\n </defs>\n </svg>\n </button>\n `;\n }\n})\nexport class Toggle extends HTMLElement {\n declare requestRender: () => void;\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor checked!: boolean;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLButtonElement>('button')\n accessor control!: HTMLButtonElement | null;\n\n filterId: string = `filter-${crypto.randomUUID()}`;\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n control.setAttribute('aria-pressed', this.checked ? 'true' : 'false');\n control.disabled = Boolean(this.disabled);\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen<Toggle, MouseEvent, HTMLButtonElement>('click', { selector: 'button' })\n handleClick(event: MouseEvent): void {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n\n return;\n }\n\n this.checked = !this.checked;\n\n dispatchControlEvent(this, 'toggle', { value: this.checked, event });\n }\n}\n","import type { Placement } from '~/elements/popover';\nimport '../popover';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { OutsideClick, requestOutsideClickUpdate } from '~/decorators/OutsideClick';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-tooltip',\n shadowMode: 'open',\n styles: `\n :host {\n display: inline-block;\n position: relative;\n }\n\n ease-popover::part(content) {\n inset: auto;\n }\n\n [data-tooltip-content] {\n background-color: var(--ease-tooltip-background, var(--color-gray-400));\n color: var(--ease-tooltip-color, var(--color-gray-900));\n padding: var(--ease-tooltip-padding, 4px 8px);\n border-radius: var(--ease-tooltip-radius, 4px);\n font-family: var(--ease-font-family, inherit);\n font-size: var(--ease-tooltip-font-size, 10px);\n font-weight: var(--ease-tooltip-font-weight, 500);\n max-width: var(--ease-tooltip-max-width, 220px);\n box-shadow: var(--ease-tooltip-shadow, 0 2px 8px rgba(0, 0, 0, 0.2));\n display: none;\n }\n\n :host([open]) [data-tooltip-content] {\n display: block;\n }\n `\n})\nexport class Tooltip extends HTMLElement {\n #hoverTimer: number | null = null;\n\n #trigger: HTMLElement | null = null;\n #content: HTMLElement | null = null;\n\n declare requestRender: () => void;\n\n @Prop<boolean>({\n type: Boolean,\n reflect: true,\n onChange(next, previous) {\n (this as Tooltip)._handleOpenChange(next, previous);\n }\n })\n accessor open = false;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 300 })\n accessor delay = 300;\n\n @Prop<Placement>({ reflect: true, defaultValue: 'top-center' })\n accessor placement: Placement = 'top-center';\n\n @Query<HTMLElement>('[slot=\"trigger\"]')\n accessor triggerElement!: HTMLElement | null;\n\n @Query<HTMLElement>('[data-tooltip-content]')\n accessor contentElement!: HTMLElement | null;\n\n disconnectedCallback(): void {\n this.#clearTimer();\n if (this.#trigger) {\n this.#trigger.removeEventListener('mouseenter', this.#handleEnter);\n this.#trigger.removeEventListener('mouseleave', this.#handleLeave);\n this.#trigger.removeEventListener('focusin', this.#handleFocusIn);\n this.#trigger.removeEventListener('focusout', this.#handleFocusOut);\n this.#trigger = null;\n }\n\n if (this.#content) {\n this.#content.removeEventListener('mouseenter', this.#handleEnter);\n this.#content.removeEventListener('mouseleave', this.#handleLeave);\n this.#content = null;\n }\n }\n\n afterRender(): void {\n this.#updateListeners();\n const content = this.contentElement;\n const isVisible = this.open;\n\n if (content) {\n content.setAttribute('role', 'tooltip');\n content.setAttribute('aria-hidden', isVisible ? 'false' : 'true');\n content.dataset.open = isVisible ? 'true' : 'false';\n content.hidden = !isVisible;\n }\n }\n\n render(): TemplateResult {\n return html`\n <ease-popover .placement=${this.placement} ?open=${this.open}>\n <slot name=\"trigger\" slot=\"trigger\"></slot>\n <div\n data-tooltip-content\n role=\"tooltip\"\n data-open=${this.open ? 'true' : 'false'}\n ?hidden=${!this.open}\n >\n <slot></slot>\n </div>\n </ease-popover>\n `;\n }\n\n _handleOpenChange(next: boolean, previous: boolean): void {\n if (next === previous) {\n return;\n }\n\n if (!next) {\n this.#clearTimer();\n }\n\n requestOutsideClickUpdate(this);\n }\n\n @OutsideClick<Tooltip>({\n content: (host) => host.contentElement,\n triggers: (host) => [host.triggerElement],\n disabled: (host) => !host.open\n })\n handleOutsideDismiss(): void {\n if (!this.open) {\n return;\n }\n\n this.#clearTimer();\n this.open = false;\n }\n\n #clearTimer(): void {\n if (this.#hoverTimer !== null) {\n window.clearTimeout(this.#hoverTimer);\n this.#hoverTimer = null;\n }\n }\n\n #startTimer(callback: () => void): void {\n this.#clearTimer();\n const wait = this.delay ?? 0;\n\n if (wait > 0) {\n this.#hoverTimer = window.setTimeout(callback, wait);\n } else {\n callback();\n }\n }\n\n #handleEnter = (): void => {\n this.#startTimer(() => {\n this.open = true;\n });\n };\n\n #handleLeave = (): void => {\n this.#clearTimer();\n this.open = false;\n };\n\n #handleFocusIn = (): void => {\n this.#clearTimer();\n this.open = true;\n };\n\n #handleFocusOut = (): void => {\n this.#clearTimer();\n this.open = false;\n };\n\n #updateListeners(): void {\n const trigger = this.triggerElement;\n const content = this.contentElement ?? null;\n\n if (trigger !== this.#trigger) {\n if (this.#trigger) {\n this.#trigger.removeEventListener('mouseenter', this.#handleEnter);\n this.#trigger.removeEventListener('mouseleave', this.#handleLeave);\n this.#trigger.removeEventListener('focusin', this.#handleFocusIn);\n this.#trigger.removeEventListener('focusout', this.#handleFocusOut);\n }\n if (trigger) {\n trigger.addEventListener('mouseenter', this.#handleEnter);\n trigger.addEventListener('mouseleave', this.#handleLeave);\n trigger.addEventListener('focusin', this.#handleFocusIn);\n trigger.addEventListener('focusout', this.#handleFocusOut);\n }\n this.#trigger = trigger;\n }\n\n if (content !== this.#content) {\n if (this.#content) {\n this.#content.removeEventListener('mouseenter', this.#handleEnter);\n this.#content.removeEventListener('mouseleave', this.#handleLeave);\n }\n if (content) {\n content.addEventListener('mouseenter', this.#handleEnter);\n content.addEventListener('mouseleave', this.#handleLeave);\n }\n this.#content = content ?? null;\n }\n }\n}\n"],"mappings":";AAAA,SAASA,QAAAA,aAAiC;;;ACA1C,SAASC,MAAMC,cAAmC;AAyClD,IAAMC,aAAa,oBAAIC,IAAAA;AAEvB,IAAMC,oBAAoB,CACxBC,aAAAA;AAEA,MAAI,OAAOA,aAAa,YAAY;AAClC,WAAOA;EACT;AAEA,MAAIA,YAAY,OAAOA,aAAa,YAAY,oBAAoBA,UAAU;AAC5E,WAAO,WAAA;AACL,aAAOA;IACT;EACF;AAEA,SAAO,WAAA;AACL,WAAO;EACT;AACF;AAEA,IAAMC,cAAc,OAAOC,SACzBC,QAAQC,IACNF,KAAKG,IAAI,CAACC,QAAAA;AACR,QAAMC,SAASV,WAAWW,IAAIF,GAAAA;AAC9B,MAAIC,QAAQ;AACV,WAAOA;EACT;AAEA,QAAME,UAAUC,MAAMJ,GAAAA,EACnBK,KAAK,CAACC,aAAcA,SAASC,KAAKD,SAASE,KAAI,IAAK,EAAA,EACpDC,MAAM,MAAM,EAAA;AAEflB,aAAWmB,IAAIV,KAAKG,OAAAA;AACpB,SAAOA;AACT,CAAA,CAAA;AAGG,IAAMQ,YACX,CAAyDC,YACzD,CACEC,MACAC,aAAAA;AAEA,QAAM,EACJC,KACArB,UACAsB,SAAS,IACTC,YAAY,CAAA,GACZC,qBAAqB,CAAA,GACrBC,aAAa,QACbC,WAAW,KAAI,IACbR;AAEJ,MAAI,CAACG,KAAK;AACR,UAAM,IAAIM,MAAM,qCAAA;EAClB;AAEA,QAAMC,aAAa7B,kBAA4BC,QAAAA;EAE/C,MAAM6B,kBAAmBV,KAAAA;IACvB,WAAWK,qBAA+B;AACxC,YAAMM,SACJ,wBAAwBX,QAAQY,MAAMC,QAAQb,KAAKK,kBAAkB,IAChEL,KAAKK,qBACN,CAAA;AACN,YAAMS,MAAMF,MAAMC,QAAQR,kBAAAA,IAAsBA,qBAAqB,CAAA;AACrE,aAAOO,MAAMG,KAAK,oBAAIC,IAAI;WAAIL;WAAWG;OAAI,CAAA;IAC/C;IAEA;IACA;IACA;IACA;IAEA,eAAeG,MAAiB;AAC9B,YAAK,GAAIA,IAAAA,GAAAA,KALX,UAAUd,QAAAA,KACV,aAAa;WAAIC;SAAU,KAC3B,mBAAmB;AAIjB,WAAK,UAAU,KAAKc,aAAa;QAAEC,MAAMb;MAAW,CAAA;AACpD,WAAKc,aAAa,KAAK;IACzB;IAEA,IAAIC,SAA+C;AACjD,aAAO,KAAKD;IACd;IAEAE,oBAA0B;AACvBtB,WAAKuB,UAA+BD,mBAAmBE,KAAK,IAAI;AAEjE,WAAK,KAAK,YAAW,EAAGC,QAAQ,MAAA;AAC9B,aAAKC,cAAa;MACpB,CAAA;IACF;IAEAC,uBAA6B;AAC1B3B,WAAKuB,UAA+BI,sBAAsBH,KAAK,IAAI;AACpE,WAAK,mBAAmB;IAC1B;IAEAI,yBAAyBC,MAAcC,UAAyBC,UAA+B;AAC5F/B,WAAKuB,UAA+BK,0BAA0BJ,KAAK,MAAMK,MAAMC,UAAUC,QAAAA;AAE1F,UAAID,aAAaC,UAAU;AACzB,aAAKC,oBAAoBH,MAAMC,UAAUC,QAAAA;MAC3C;IACF;IAEAL,gBAAsB;AACpB,UAAI,KAAK,kBAAkB;AACzB;MACF;AAEA,WAAK,mBAAmB;AAExBO,4BAAsB,MAAA;AACpB,aAAK,mBAAmB;AACxB,aAAK,QAAO;MACd,CAAA;IACF;IAEA,MAAM,cAAW;AACf,UAAI,CAAC,KAAK,WAAWC,QAAQ;AAC3B;MACF;AAEA,YAAMC,UAAU,MAAMrD,YAAY,KAAK,UAAU;AACjD,YAAMsD,eAAe,KAAK,UAAU;QAAC,KAAK;UAAW,CAAA;AACrD,WAAK,UAAU;WAAIA;WAAiBD,QAAQE,OAAOC,OAAAA;QAAUC,KAAK,IAAA;IACpE;IAEA,UAAO;AACL,YAAMC,OAAO,KAAK;AAElB,UAAIC;AAEJ,UAAI,OAAO,KAAKhE,WAAW,YAAY;AACrCgE,yBAAiB,KAAKhE,OAAM;MAC9B,OAAO;AACLgE,yBAAiBhC,WAAWe,KAAK,MAA6B,IAAI;MACpE;AAEA,YAAMkB,gBAAgB,KAAK,UAAUlE,cAAc,KAAK,OAAO,aAAa;AAC5E,YAAMmE,eAAepC,WAAW/B,sBAAsB;AAEtD,YAAMoE,mBAAmBpE;YACrBkE,aAAAA;YACAD,kBAAkB,IAAA;YAClBE,YAAAA;;AAGJ,YAAME,SAAS,MAAA;AACbpE,eAAOmE,kBAAkBJ,IAAAA;AACzB,aAAKM,cAAW;MAClB;AAEA,UAAI,OAAO,KAAKC,eAAe,YAAY;AACzC,cAAMC,WAAWC,SAASC,uBAAsB;AAChD,cAAMC,UAAUF,SAASG,cAAc,KAAA;AAEvC3E,eAAOmE,kBAAkBO,OAAAA;AAEzBH,iBAASK,OAAM,GAAIF,QAAQG,UAAU;AAErC,aAAKP,WAAWF,QAAQ;UAAEG;UAAUR;QAAK,CAAA;AACzC;MACF;AAEAK,aAAAA;IACF;EACF;AAGA,MAAI,OAAOU,mBAAmB,eAAe,CAACA,eAAelE,IAAIa,GAAAA,GAAM;AACrEqD,mBAAeC,OAAOtD,KAAKQ,SAAAA;EAC7B;AAEA,SAAOA;AACT;;;AClLF,IAAM+C,cAAc,oBAAIC,QAAAA;AACxB,IAAMC,kBAAkB,oBAAID,QAAAA;AAC5B,IAAME,mBAAmB,oBAAIF,QAAAA;AAC7B,IAAMG,oBAAoB,oBAAIH,QAAAA;AAE9B,IAAMI,iBAAiB,CAACC,aAAAA;AACtB,MAAI,OAAOA,SAASC,kBAAkB,YAAY;AAChDD,aAASC,cAAa;AACtB;EACF;AAEA,MAAI,OAAOD,SAASE,WAAW,YAAY;AACzC;EACF;AAEA,MAAIR,YAAYS,IAAIH,QAAAA,GAAW;AAC7B;EACF;AAEAN,cAAYU,IAAIJ,UAAU,IAAA;AAE1BK,wBAAsB,MAAA;AACpBX,gBAAYY,OAAON,QAAAA;AACnBA,aAASE,SAAM;EACjB,CAAA;AACF;AAEA,IAAMK,cAAc,CAACC,UACnBC,OAAOD,KAAAA,EACJE,QAAQ,sBAAsB,OAAA,EAC9BA,QAAQ,WAAW,GAAA,EACnBC,YAAW;AAEhB,IAAMC,kBAAkB,CAACZ,UAAsBa,YAAAA;AAC7C,MAAIC,YAAYlB,gBAAgBO,IAAIH,QAAAA;AAEpC,MAAI,CAACc,WAAW;AACdA,gBAAY,oBAAIC,IAAAA;AAChBnB,oBAAgBQ,IAAIJ,UAAUc,SAAAA;AAE9B,UAAME,WAAWhB,SAASiB;AAE1BjB,aAASiB,uBAAuB,YAA+BC,MAAe;AAC5E,YAAMC,aAAavB,gBAAgBO,IAAI,IAAI;AAC3CgB,kBAAYC,QAAQ,CAACC,aAAAA;AACnB,YAAI;AACFA,mBAAAA;QACF,SAASC,OAAO;AACdC,kBAAQD,MAAM,yBAAyBA,KAAAA;QACzC;MACF,CAAA;AACA1B,sBAAgBU,OAAO,IAAI;AAE3B,UAAI,OAAOU,aAAa,YAAY;AAClC,eAAOA,SAASQ,MAAM,MAAMN,IAAAA;MAC9B;AAEA,aAAOO;IACT;EACF;AAEAX,YAAUY,IAAIb,OAAAA;AAChB;AAEA,IAAMc,uBAAuB,CAACC,MAAkBC,cAAAA;AAC9C,MAAIC,aAAahC,kBAAkBK,IAAIyB,IAAAA;AAEvC,MAAI,CAACE,YAAY;AACfA,iBAAa,oBAAIf,IAAAA;AACjBjB,sBAAkBM,IAAIwB,MAAME,UAAAA;EAC9B;AAEAA,aAAWJ,IAAIG,SAAAA;AACjB;AAEA,IAAME,qBAAqB,CAACH,MAAkBC,cAAAA;AAC5C,QAAMC,aAAahC,kBAAkBK,IAAIyB,IAAAA;AAEzC,MAAI,CAACE,YAAY;AACf,WAAO;EACT;AAEA,QAAME,eAAeF,WAAWG,IAAIJ,SAAAA;AAEpC,MAAIG,cAAc;AAChBF,eAAWxB,OAAOuB,SAAAA;AAClB,QAAIC,WAAWI,SAAS,GAAG;AACzBpC,wBAAkBQ,OAAOsB,IAAAA;IAC3B;EACF;AAEA,SAAOI;AACT;AAEA,IAAMG,mBAAmB,CAACP,MAAkBC,WAAmBO,YAAAA;AAC7D,MAAIC,QAAQxC,iBAAiBM,IAAIyB,IAAAA;AAEjC,MAAI,CAACS,OAAO;AACV,UAAMvB,YAAY,oBAAIwB,IAAAA;AACtB,UAAMC,WAAW,IAAIC,iBAAiB,CAACC,YAAAA;AACrCA,cAAQrB,QAAQ,CAACsB,WAAAA;AACf,cAAMC,gBAAgBD,OAAOC;AAE7B,YAAI,CAACA,eAAe;AAClB;QACF;AAEA,YAAIZ,mBAAmBH,MAAMe,aAAAA,GAAgB;AAC3C;QACF;AAEA,cAAMC,aAAY9B,UAAUX,IAAIwC,aAAAA;AAChC,YAAI,CAACC,YAAW;AACd;QACF;AAEA,cAAMC,eAAgBH,OAAOI,OAAmBC,aAAaJ,aAAAA;AAE7D,mBAAWK,YAAYJ,YAAW;AAChCI,mBAASH,YAAAA;QACX;MACF,CAAA;IACF,CAAA;AAEAN,aAASU,QAAQrB,MAAM;MAAEE,YAAY;IAAK,CAAA;AAE1CO,YAAQ;MAAEE;MAAUzB;IAAU;AAC9BjB,qBAAiBO,IAAIwB,MAAMS,KAAAA;AAE3BzB,oBAAgBgB,MAAM,MAAA;AACpBW,eAASW,WAAU;AACnBrD,uBAAiBS,OAAOsB,IAAAA;IAC1B,CAAA;EACF;AAEA,MAAIgB,YAAYP,MAAMvB,UAAUX,IAAI0B,SAAAA;AAEpC,MAAI,CAACe,WAAW;AACdA,gBAAY,oBAAI7B,IAAAA;AAChBsB,UAAMvB,UAAUV,IAAIyB,WAAWe,SAAAA;EACjC;AAEAA,YAAUlB,IAAIU,OAAAA;AAChB;AAEA,IAAMe,kBAAkB,CAACvB,MAAkBC,WAAmBrB,UAAAA;AAC5DmB,uBAAqBC,MAAMC,SAAAA;AAE3B,MAAIrB,UAAUiB,UAAajB,UAAU,QAAQA,UAAU,OAAO;AAC5DoB,SAAKwB,gBAAgBvB,SAAAA;AACrB;EACF;AAEA,MAAIrB,UAAU,MAAM;AAClBoB,SAAKyB,aAAaxB,WAAW,EAAA;AAC7B;EACF;AAEAD,OAAKyB,aAAaxB,WAAWpB,OAAOD,KAAAA,CAAAA;AACtC;AAEA,IAAM8C,cAAc,CAACC,SAAAA;AACnB,MAAI,CAACA,MAAM;AACT,WAAO;EACT;AAEA,MAAIA,SAASC,WAAWD,SAAS,WAAW;AAC1C,WAAO;EACT;AAEA,MAAIA,SAASE,UAAUF,SAAS,UAAU;AACxC,WAAO;EACT;AAEA,MAAIA,SAASG,UAAUH,SAASI,SAASJ,SAAS,QAAQ;AACxD,WAAO;EACT;AAEA,SAAO;AACT;AAEA,IAAMK,cAA6F;EACjGC,QAAQrD,OAAoB;AAC1B,WAAOA,UAAU;EACnB;EACAsD,OAAOtD,OAAoB;AACzB,QAAIA,UAAU,QAAQA,UAAU,IAAI;AAClC,aAAO;IACT;AAEA,UAAMuD,SAASN,OAAOjD,KAAAA;AACtB,WAAOiD,OAAOO,MAAMD,MAAAA,IAAU,OAAOA;EACvC;EACAE,KAAKzD,OAAoB;AACvB,QAAI,CAACA,OAAO;AACV,aAAO;IACT;AAEA,QAAI;AACF,aAAO0D,KAAKC,MAAM3D,KAAAA;IACpB,SAASc,OAAO;AACdC,cAAQ6C,KAAK,yCAAyC9C,KAAAA;AACtD,aAAO;IACT;EACF;EACA+C,OAAO7D,OAAoB;AACzB,WAAOA;EACT;AACF;AAEA,IAAM8D,iBAAmG;EACvGT,QAAQrD,OAAc;AACpB,WAAOA,QAAQ,KAAK;EACtB;EACAsD,OAAOtD,OAAc;AACnB,QAAIA,UAAU,QAAQA,UAAUiB,UAAajB,UAAU,IAAI;AACzD,aAAO;IACT;AACA,WAAOC,OAAOD,KAAAA;EAChB;EACAyD,KAAKzD,OAAc;AACjB,QAAIA,UAAU,QAAQA,UAAUiB,QAAW;AACzC,aAAO;IACT;AACA,QAAI;AACF,aAAOyC,KAAKK,UAAU/D,KAAAA;IACxB,QAAQ;AACN,aAAO;IACT;EACF;EACA6D,OAAO7D,OAAc;AACnB,QAAIA,UAAU,QAAQA,UAAUiB,QAAW;AACzC,aAAO;IACT;AACA,WAAOhB,OAAOD,KAAAA;EAChB;AACF;AAEA,IAAMgE,iBAAiB,CAASC,UAAkBC,SAA0BD,aAAaC;AAElF,SAASC,KAAoDC,UAAsC,CAAC,GAAC;AAC1G,QAAM,EACJ/C,WACAgD,UAAU,MACVtB,MACAY,OACAW,QACAC,cACAC,UAAUR,gBACVS,UACAC,kBAAiB,IACfN;AAEJ,QAAMO,eAAe7B,YAAYC,IAAAA;AAEjC,QAAM6B,aAAoCjB,QACtCA,QACA,SAAuB3D,OAAK;AAC1B,QAAI,CAAC2E,cAAc;AACjB,aAAO3E;IACT;AACA,WAAOoD,YAAYuB,YAAAA,EAAcE,KAAK,MAAM7E,KAAAA;EAC9C;AAEJ,QAAM8E,cAAwCR,SAC1CA,SACA,SAAuBtE,OAAK;AAC1B,QAAI,CAAC2E,cAAc;AACjB,aAAQ3E,SAAkD;IAC5D;AACA,WAAO8D,eAAea,YAAAA,EAAcE,KAAK,MAAM7E,KAAAA;EACjD;AAEJ,SAAO,CACL+E,UACAC,YAAAA;AAEA,QAAIA,QAAQC,SAAS,YAAY;AAC/B,YAAM,IAAIC,MAAM,wDAAA;IAClB;AAEA,UAAM/C,gBAAgBd,aAAatB,YAAYiF,QAAQG,IAAI;AAE3DH,YAAQI,eAAe,WAAA;AACrB,UAAI,CAACf,SAAS;AACZ;MACF;AAEA1C,uBAAiB,MAAMQ,eAAe,CAACkD,aAAAA;AACrC,YAAI9D,mBAAmB,MAAMY,aAAAA,GAAgB;AAC3C;QACF;AAEA,cAAMoB,SAASqB,WAAWC,KAAK,MAAMQ,QAAAA;AACrC,cAAMpB,WAAWc,SAASpF,IAAIkF,KAAK,IAAI;AAEvC,YAAIL,QAAQP,UAAUV,MAAAA,GAAS;AAC7B;QACF;AAEAwB,iBAASnF,IAAIiF,KAAK,MAAMtB,MAAAA;AAExBmB,2BAAmBG,KAAK,MAAMtB,QAAQU,QAAAA;AACtC1E,uBAAe,IAAI;MACrB,CAAA;IACF,CAAA;AAEA,WAAO;MACLI,MAAAA;AACE,eAAOoF,SAASpF,IAAIkF,KAAK,IAAI;MAC/B;MACAjF,IAAiBI,OAAa;AAC5B,cAAMiE,WAAWc,SAASpF,IAAIkF,KAAK,IAAI;AAEvC,YAAIL,QAAQP,UAAUjE,KAAAA,GAAQ;AAC5B;QACF;AAEA+E,iBAASnF,IAAIiF,KAAK,MAAM7E,KAAAA;AAExB,YAAIqE,SAAS;AACX,gBAAMiB,YAAYR,YAAYD,KAAK,MAAM7E,KAAAA;AACzC2C,0BAAgB,MAAMR,eAAemD,SAAAA;QACvC;AAEAb,kBAAUI,KAAK,MAAM7E,OAAOiE,QAAAA;AAC5B1E,uBAAe,IAAI;MACrB;MACAgG,KAAkBC,cAAoB;AACpC,YAAIxF,QAAQwF;AAEZ,YAAI,KAAKhE,aAAaW,aAAAA,GAAgB;AACpCnC,kBAAQ4E,WAAWC,KAAK,MAAM,KAAKtC,aAAaJ,aAAAA,CAAAA;QAClD,WAAWnC,UAAUiB,UAAasD,iBAAiBtD,QAAW;AAC5DjB,kBACE,OAAOuE,iBAAiB,aAAcA,aAAyCM,KAAK,IAAI,IAAIN;QAChG;AAEA,YAAIF,SAAS;AACX,gBAAMiB,YAAYR,YAAYD,KAAK,MAAM7E,KAAAA;AACzC2C,0BAAgB,MAAMR,eAAemD,SAAAA;QACvC;AAEA,eAAOtF;MACT;IACF;EACF;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IFpN4ByF;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAIjBC;IAGAC;IAGAC;IAGAC;IAUAC;IAOAC;IAAAA;;OAtMVC,UAAU;EACTC,KAAK;EACLC,UAAU;EACVC,YAAY;EACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmKV,CAAA,GAAA,QAIGC,KAAc;EAAER,MAAMS;EAASC,SAAS;AAAK,CAAA,GAAA,QAG7CF,KAAc;EAAER,MAAMS;EAASC,SAAS;AAAK,CAAA,GAAA,QAG7CF,KAAc;EAAER,MAAMS;EAASC,SAAS;AAAK,CAAA,GAAA,QAG7CF,KAAoC;EAAER,MAAMW;EAAQD,SAAS;EAAME,cAAc;AAAS,CAAA,GAAA,QAG1FJ,KAA4C;EAC3CR,MAAMW;EACND,SAAS;EACTE,cAAc;EACdC,oBAAAA;AACE,SAAKC,gBAAa;EACpB;AACF,CAAA,GAAA,QAGCN,KAAqE;EACpER,MAAMW;EACND,SAAS;EACTE,cAAc;AAChB,CAAA;AA7BK,IAAMG,SAAN,eAAqBnB,eAAAA,aAAAA;;WAIjBC,gBAGAC,YAGAC,iBAGAC,YAUAC,aAOAC,eAAAA,UAAAA,GAAAA,GAAAA,CAAAA,SAAAA,UAAAA,EAAAA,IAAAA,mBAAAA,MAAAA;;;;QA1BAL;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAUAC;;;;;QAOAC;;;;OA9BiBN,YAAAA;;EAIjBC;MAAAA,WAAAA;gBAAAA;;MAAAA,SAAAA,IAAAA;SAAAA,yBAAQ;;EAGRC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAGJC;MAAAA,YAAAA;gBAAAA;;MAAAA,UAAAA,IAAAA;SAAAA,0BAAS;;EAGTC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAUJC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAOLC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,wBAAO;;EAEhBc,SAAyB;AACvB,WAAOC;;eAEI,KAAKjB,IAAI;oBACJ,KAAKH,QAAQ;uBACV,KAAKK,OAAO;0BACT,KAAKH,SAAS;oBACpB,KAAKD,IAAI;sBACP,KAAKG,KAAK;;;;;EAK9B;;;;;AA7CK,UAAA,GAAA,IAAA,GAAA,KAIIJ,0BAAQ,WAAA,IAAA,GAARA,eAAAA,MAAoB,KAAA,IAAA,KAGpBC,qBAAAA,WAAAA,MAAgB,KAAA,GAAA,KAGhBC,0BAAAA,gBAAAA,MAAqB,KAAA,GAAA,KAGrBC,qBAAAA,WAAAA,IAAAA,GAAAA,KAUAC,sBAAAA,YAAAA,MAA+C,QAAA,GAAA,KAO/CC,wBAAAA,cAAAA,IAAAA;;AAgBX;;;AG3NA,SAASgB,QAAAA,aAAY;;;ACcd,IAAMC,uBAAuB;AAmB7B,IAAMC,uBAAuB,CAClCC,MACAC,MACAC,WAAAA;AAEAF,OAAKG,cACH,IAAIC,YAAwCH,MAAM;IAChDC;IACAG,SAAS;IACTC,UAAU;EACZ,CAAA,CAAA;AAEJ;AAEO,IAAMC,sBAAsB,CAACC,SAAqCC,MAAcC,UAAAA;AACrF,MAAI,CAACF,SAAS;AACZ;EACF;AAEA,MAAIE,OAAO;AACTF,YAAQG,aAAaF,MAAM,EAAA;EAC7B,OAAO;AACLD,YAAQI,gBAAgBH,IAAAA;EAC1B;AACF;AAEO,IAAMI,eAAe,CAACH,UAAAA;AAC3B,MAAIA,UAAU,IAAI;AAChB,WAAO;EACT;AAEA,QAAMI,SAASC,OAAOL,KAAAA;AACtB,SAAOK,OAAOC,MAAMF,MAAAA,IAAU,OAAOA;AACvC;AAOO,IAAMG,mBAAmB,CAACT,YAAAA;AAC/B,MAAI,OAAOA,QAAQE,UAAU,YAAY,OAAOF,QAAQE,UAAU,UAAU;AAC1E,WAAOQ,OAAOV,QAAQE,KAAK;EAC7B;AAEA,MAAI,OAAOF,QAAQW,YAAY,WAAW;AACxC,WAAOX,QAAQW,UAAU,SAAS;EACpC;AAEA,MAAI,kBAAkBX,SAAS;AAC7B,UAAMY,OAAQZ,QAAoBa,aAAa,OAAA;AAC/C,QAAID,SAAS,MAAM;AACjB,aAAOA;IACT;EACF;AAEA,SAAOZ,QAAQc,aAAaC,KAAAA,KAAU;AACxC;;;ACzDA,IAAMC,iBAAqG;EACzGC,mBAAmB,oBAAIC,QAAAA;EACvBC,sBAAsB,oBAAID,QAAAA;AAC5B;AAEA,IAAME,mBAAkB,oBAAIF,QAAAA;AAE5B,IAAMG,mBAAmB,CACvBC,UACAC,UACAC,YAAAA;AAEA,QAAMC,QAAQT,eAAeO,QAAAA;AAC7B,MAAIG,YAAYD,MAAME,IAAIL,QAAAA;AAE1B,MAAI,CAACI,WAAW;AACdA,gBAAY,oBAAIE,IAAAA;AAChBH,UAAMI,IAAIP,UAAUI,SAAAA;AAEpB,UAAMI,WAAYR,SAA2DC,QAAAA;AAE5ED,aAA2DC,QAAAA,IAAY,YAAaQ,MAAe;AAClGL,iBAAWM,QAAQ,CAACC,aAAAA;AAClBA,iBAASC,MAAM,IAAI;MACrB,CAAA;AAEA,UAAI,OAAOJ,aAAa,YAAY;AAClC,eAAQA,SAA+CI,MAAM,MAAMH,IAAAA;MACrE;AAEA,aAAOI;IACT;EACF;AAEAT,YAAUU,IAAIZ,OAAAA;AAChB;AAEA,IAAMa,mBAAkB,CAA2Bf,UAAiBgB,YAAAA;AAClE,MAAIZ,YAAYN,iBAAgBO,IAAIL,QAAAA;AAEpC,MAAI,CAACI,WAAW;AACdA,gBAAY,oBAAIE,IAAAA;AAChBR,IAAAA,iBAAgBS,IAAIP,UAAUI,SAAAA;AAE9BL,qBAAiBC,UAAU,wBAAwB,WAAA;AACjD,YAAMiB,aAAanB,iBAAgBO,IAAI,IAAI;AAC3CY,kBAAYP,QAAQ,CAACQ,OAAAA;AACnB,YAAI;AACFA,aAAAA;QACF,SAASC,OAAO;AACdC,kBAAQD,MAAM,2BAA2BA,KAAAA;QAC3C;MACF,CAAA;AACArB,MAAAA,iBAAgBuB,OAAO,IAAI;IAC7B,CAAA;EACF;AAEAjB,YAAUU,IAAIE,OAAAA;AAChB;AAEA,IAAMM,gBAAgB,CACpBC,MACAC,WAAAA;AAEA,MAAI,OAAOA,WAAW,YAAY;AAChC,WAAOA,OAAOD,IAAAA,KAAS;EACzB;AAEA,MAAIC,kBAAkBC,aAAa;AACjC,WAAOD;EACT;AAEA,UAAQA,QAAAA;IACN,KAAK;AACH,aAAOE;IACT,KAAK;AACH,aAAOC;IACT,KAAK;AACH,aAAOJ;IACT;AACE,aAAOA,KAAKK,cAAcL,KAAKM,cAAcN;EACjD;AACF;AAEA,IAAMO,mBAAmB,CACvBC,sBAAAA;AAEA,MAAI,OAAOA,sBAAsB,UAAU;AACzC,WAAO;MAAEC,UAAUD;IAAkB;EACvC;AAEA,SAAOA,qBAAqB,CAAC;AAC/B;AAEA,IAAME,eAAe,CACnBC,YAAAA;AAEA,SAAO;IACLF,UAAUE,QAAQF,YAAY;IAC9BR,QAAQU,QAAQV,UAAU;IAC1BW,SAASD,QAAQC,WAAW;IAC5BC,MAAMF,QAAQE,QAAQ;IACtBC,eAAeH,QAAQG,iBAAiB;IACxCC,MAAMJ,QAAQI,QAAQ;IACtBC,SAASL,QAAQK;IACjBC,SAASN,QAAQM,WAAW;IAC5BC,MAAMP,QAAQO,QAAQ;EACxB;AACF;AAEO,SAASC,OACdC,WACAZ,mBAAmE;AAEnE,MAAI,CAACY,WAAW;AACd,UAAM,IAAIC,MAAM,iCAAA;EAClB;AAEA,QAAMC,eAAeZ,aAAaH,iBAAiBC,iBAAAA,CAAAA;AAEnD,SAAO,CACLe,gBACAC,YAAAA;AAEAA,YAAQC,eAAe,WAAA;AACrB,UAAIC,WAAW;AAEf,YAAMC,SAAS,MAAA;AACb,YAAID,UAAU;AACZ;QACF;AAEA,cAAMzB,SAASF,cAAc,MAAMuB,aAAarB,MAAM;AAEtD,YAAI,CAACA,UAAU,OAAQA,OAAuB2B,qBAAqB,YAAY;AAC7E/B,kBAAQgC,KAAK,wCAAwCC,OAAOV,SAAAA,CAAAA,EAAY;AACxE;QACF;AAEA,cAAMW,eAAwC;UAC5Cd,SAASK,aAAaL;UACtBF,MAAMO,aAAaP;UACnBC,SAASM,aAAaN,YAAY1B,SAAYgC,aAAaN,UAAU,CAACM,aAAaV;QACrF;AAEA,cAAMjC,UAAU,CAACqD,UAAAA;AACf,gBAAMC,aAAaD;AAEnB,cAAIV,aAAaV,SAAS;AACxBqB,uBAAWC,eAAc;UAC3B;AAEA,cAAIZ,aAAaR,eAAe;AAC9BmB,uBAAWE,yBAAwB;UACrC,WAAWb,aAAaT,MAAM;AAC5BoB,uBAAWG,gBAAe;UAC5B;AAEA,cAAIC,UAA2B;AAE/B,cAAIf,aAAab,UAAU;AACzB,kBAAM6B,OAAOL,WAAWM,aAAY;AACpCF,sBACEC,KAAKE,KACH,CAACC,SAA2BA,gBAAgBC,WAAWD,KAAKE,QAAQrB,aAAab,QAAQ,CAAA,KACtF;AAEP,gBAAI,CAAC4B,SAAS;AACZ;YACF;UACF;AAEA,cAAIf,aAAaJ,QAAQ,CAACI,aAAaJ,KAAKe,YAAYI,OAAAA,GAAU;AAChE;UACF;AAEA,cAAIf,aAAab,UAAU;AACzB,iBAAKc,eAAeqB,KAAK,MAAMX,YAAYI,OAAAA;UAC7C,OAAO;AACL,kBAAMQ,aACJZ,WAAWhC,kBAAkByC,UAAWT,WAAWhC,SAAsB;AAE3E,iBAAKsB,eAAeqB,KAAK,MAAMX,YAAYY,UAAAA;UAC7C;QACF;AAEA5C,eAAO2B,iBAAiBR,WAAqBzC,SAASoD,YAAAA;AACtDL,mBAAW;AAEXlC,QAAAA,iBAAgB,MAAM,MAAA;AACpBS,iBAAO6C,oBAAoB1B,WAAqBzC,SAASoD,YAAAA;AACzDL,qBAAW;QACb,CAAA;MACF;AAMAqB,qBAAepB,MAAAA;AAGfnD,uBAAiB,MAAM,qBAAqBmD,MAAAA;IAC9C,CAAA;EACF;AACF;;;ACtLA,IAAMqB,iBAAiB;EACrBC,KAAK;EACLC,SAAS;EACTC,MAAM;EACNC,UAAU;AACZ;AAEA,IAAMC,kBAAkB,CACtBD,UACAE,SAAAA;AAEA,MAAI,OAAOF,aAAa,YAAY;AAClC,WAAQA,SAA0CE,IAAAA;EACpD;AAEA,SAAOF;AACT;AAEA,IAAMG,cAAc,CAACD,MAAiBE,WAAAA;AACpC,UAAQA,QAAAA;IACN,KAAK;AACH,aAAOC;IACT,KAAK;AACH,aAAOH;IACT;AACE,aAAOA,KAAKI,cAAcJ,KAAKK,cAAcL;EACjD;AACF;AAEA,IAAMM,eAAe,CAKnBN,MACAO,UACAC,YAAAA;AAEA,MAAIA,QAAQZ,SAAS;AACnB,UAAMa,SAAST,KAAKJ,QAAQW,QAAAA;AAC5B,WAAOE,UAAUV,gBAAgBS,QAAQV,UAAkDE,IAAAA,KAAS;EACtG;AAEA,QAAMU,OAAOT,YAAYD,MAAMQ,QAAQX,IAAI;AAE3C,MAAI,CAACa,MAAM;AACT,WAAOF,QAAQb,MACVI,gBAAgBS,QAAQV,UAA8CE,IAAAA,KAAS,CAAA,IAC/ED,gBAAgBS,QAAQV,UAAmDE,IAAAA,KAAS;EAC3F;AAEA,MAAIQ,QAAQb,KAAK;AACf,UAAMgB,WAAWC,MAAMf,KAAKa,KAAKG,iBAA2BN,QAAAA,CAAAA;AAC5D,WAAOI,SAASG,SAAS,IACrBH,WACCZ,gBAAgBS,QAAQV,UAA8CE,IAAAA,KAAS,CAAA;EACtF;AAEA,QAAMe,QAAQL,KAAKM,cAAwBT,QAAAA;AAC3C,SAAOQ,SAAShB,gBAAgBS,QAAQV,UAAmDE,IAAAA,KAAS;AACtG;AAEA,IAAMiB,uBAAuB,CAK3BV,UACAC,YAAAA;AAIA,SAAO,CACLU,SACAC,YAAAA;AAEA,QAAIA,QAAQC,SAAS,YAAY;AAC/B,YAAMC,aAA0D;QAC9DC,MAAAA;AACE,iBAAOhB,aAAwC,MAAMC,UAAUC,OAAAA;QACjE;QACAe,IAAIC,QAAc;QAElB;MACF;AACA,aAAOH;IACT;AAEAF,YAAQM,eAAe,WAAA;AACrBC,aAAOC,eAAe,MAAMR,QAAQS,MAAM;QACxCC,cAAc;QACdC,YAAY;QACZR,KAAK,MAAMhB,aAAwC,MAAMC,UAAUC,OAAAA;MACrE,CAAA;IACF,CAAA;AAEA;EACF;AACF;AAYO,SAASuB,MACdxB,UACAyB,aAA2C;AAE3C,MAAI,CAACzB,UAAU;AACb,UAAM,IAAI0B,MAAM,6BAAA;EAClB;AAEA,MAAID,aAAa;AACf,UAAME,UAAS;MAAE,GAAGxC;MAAgB,GAAGsC;IAAY;AACnD,WAAOf,qBAAqDV,UAAU2B,OAAAA;EACxE;AAEA,QAAMA,SAASxC;AACf,SAAOuB,qBAAqDV,UAAU2B,MAAAA;AACxE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IH0E8BC;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAInBC;IAGAC;IAGAC;IAGAC;IAGAC;IAAAA;;QAtQVC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqMRC,WAAAA;AACE,WAAOC;;;;;uBAKY,KAAKT,OAAO;oBACf,KAAKG,QAAQ;;;;;mBAKd,KAAKF,IAAI;oBACR,KAAKC,KAAK;uBACP,KAAKF,OAAO;wBACX,KAAKG,QAAQ;;;kDAGa,KAAKO,QAAQ;;;;;;;;;0BASrC,KAAKA,QAAQ;;;;;;;;;;;;;;;;;;EAkBrC;AACF,CAAA,GAAAC,SAIGC,KAAc;EAAEC,MAAMC;EAASC,SAAS;AAAK,CAAA,GAAAC,SAG7CJ,KAAoB;EAAEG,SAAS;AAAK,CAAA,GAAAE,SAGpCL,KAAoB;EAAEG,SAAS;AAAK,CAAA,GAAAG,SAGpCN,KAAc;EAAEC,MAAMC;EAASC,SAAS;AAAK,CAAA,GAAAI,SAG7CC,MAAyB,QAAA,GAAAC,SAmDzBC,OAAgD,SAAS;EACxDC,UAAU;AACZ,CAAA;AApEK,IAAMC,WAAN,eAAuBzB,gBAAAA,aAAAA;;WAInBC,eAGAC,YAGAC,aAGAC,iBAGAC,eAAAA,WAAAA,GAAAA,GAAAA,CAAAA,WAAAA,WAAAA,EAAAA,IAAAA,oBAAAA,MAAAA;;;;QAZAJ;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAqDTqB;;;;OArE4B1B,aAAAA;;EAInBC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,wBAAO;;EAGPC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAGJC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAGLC;MAAAA,WAAAA;gBAAAA;;MAAAA,SAAAA,IAAAA;SAAAA,yBAAQ;;EAGRC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,wBAAO;;EAMhBsB,oBAA0B;AACxB,SAAKC,eAAe,KAAK3B;EAC3B;EAEA4B,cAAoB;AAClB,QAAI,CAAC,KAAKxB,SAAS;AACjB;IACF;AAEA,UAAMyB,UAAU,OAAO,KAAKF,iBAAiB,eAAe,KAAK3B,YAAY,KAAK2B;AAElF,QAAIE,SAAS;AACX,WAAKC,kBAAkB,KAAK9B,OAAO;AACnC,WAAK2B,eAAe,KAAK3B;IAC3B;AAEA,UAAMI,UAAU,KAAKA;AACrBA,YAAQ2B,aAAa,gBAAgB,KAAK/B,UAAU,SAAS,OAAA;AAC7DI,YAAQD,WAAWW,QAAQ,KAAKX,QAAQ;AACxC6B,wBAAoB,MAAM,YAAYlB,QAAQ,KAAKX,QAAQ,CAAA;EAC7D;EAEQ2B,kBAAkB9B,SAAwB;AAChD,UAAMI,UAAU,KAAK6B,YAAYC,cAAc,kBAAA;AAC/C,UAAMC,MAAM,KAAKF,YAAYC,cAAc,KAAA;AAC3C,QAAI,CAAC9B,WAAW,CAAC+B,KAAK;AACpB;IACF;AAEA/B,YAAQgC,UAAUC,OAAO,gBAAgB,gBAAA;AACzCF,QAAIC,UAAUC,OAAO,gBAAgB,gBAAA;AAErC,UAAMC,YAAYtC,UAAU,iBAAiB;AAC7C,UAAMuC,WAAWvC,UAAU,MAAM;AAEjCI,YAAQgC,UAAUI,IAAIF,SAAAA;AACtBH,QAAIC,UAAUI,IAAIF,SAAAA;AAElBG,eAAW,MAAA;AACTrC,cAAQgC,UAAUC,OAAOC,SAAAA;AACzBH,UAAIC,UAAUC,OAAOC,SAAAA;IACvB,GAAGC,QAAAA;EACL;EAKAd,YAAYiB,OAAyB;AACnC,QAAI,KAAKvC,UAAU;AACjBuC,YAAMC,eAAc;AACpBD,YAAME,gBAAe;AAErB;IACF;AAEA,SAAK5C,UAAU,CAAC,KAAKA;AAErB6C,yBAAqB,MAAM,YAAY;MAAE3C,OAAO,KAAKF;MAAS0C;IAAM,CAAA;EACtE;;;;;AAhFK,UAAA,GAAA,IAAA,GAAA,KAII1C,yBAAO8C,YAAA,IAAA,GAAP9C,cAAAA,IAAAA,IAAAA,KAGAC,qBAAAA,WAAAA,IAAAA,GAAAA,KAGAC,sBAAAA,YAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,wBAAAA,cAAAA,IAAAA,GAAAA,KAITM,WAAmB,OAAOqC,OAAOC,WAAU,CAAA;;AA6D7C;;;AI9UA,SAASC,QAAAA,cAAiC;;;ACF1C,SAASC,QAAAA,aAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgJbC;IAAAA;IAAAA;IAAAA;IAkBlBC;IAUAC;IAGAC;IAAAA;AA5JX,IAAMC,iBAAiB,MAAc,yBAAyBC,OAAOC,WAAU,CAAA;;QAE9EC,UAAU;EACTC,KAAK;EACLC,UAAU;EACVC,YAAY;EACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsHV,CAAA,GAAAC,SAYGC,KAAgB;EACfC,SAAS;EACTC,cAAc;EACdC,WAAAA;AACG,SAAiBC,sBAAqB;EACzC;AACF,CAAA,GAAAC,SAGCL,KAAa;EACZM,MAAMC;EACNN,SAAS;EACTC,cAAc;EACdC,WAAAA;AACG,SAAiBK,mBAAkB;EACtC;AACF,CAAA,GAAAC,SAGCT,KAAc;EAAEM,MAAMI;EAAST,SAAS;AAAK,CAAA;AA9BzC,IAAMU,UAAN,eAAsBxB,gBAAAA,aAAAA;;WAkBlBC,iBAUAC,cAGAC,YAAAA,WAAAA,GAAAA,GAAAA,CAAAA,UAAAA,WAAAA,EAAAA,IAAAA,oBAAAA,MAAAA;;;;QAbAF;;;;;QAUAC;;;;;QAGAC;;;;OA/BkBH,aAAAA;;EAC3B;EACA;EACA;EAIA,IAAWyB,iBAAqC;AAC9C,WAAO,KAAK;EACd;EASSxB;MAAAA,YAAAA;gBAAAA;;MAAAA,UAAAA,IAAAA;SAAAA,0BAAS;;EAUTC;MAAAA,SAAAA;gBAAAA;;MAAAA,OAAAA,IAAAA;SAAAA,uBAAM;;EAGNC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAEbuB,oBAA0B;AACxB,SAAK,gBAAe;AACpB,SAAK,YAAW;EAClB;EAEAC,uBAA6B;AAC3B,SAAK,kBAAkB;AACvB,SAAK,eAAe;EACtB;EAEAC,SAAyB;AACvB,WAAOC;;;;;;yBAMc,KAAK5B,SAAS;;;;;EAKrC;EAEAgB,wBAA8B;AAC5B,QAAI,CAAC,KAAK,cAAc;AACtB,WAAKa,cAAa;AAClB;IACF;AACA,SAAK,eAAc;EACrB;EAEAT,qBAA2B;AACzB,QAAI,CAAC,KAAK,cAAc;AACtB,WAAKS,cAAa;AAClB;IACF;AACA,SAAK,YAAW;EAClB;EAEA,iBAAc;AACZ,SAAKC,QAAQ9B,YAAY,KAAKA;AAE9B,QAAI,KAAK,iBAAiB;AACxB,WAAK,gBAAgB8B,QAAQ9B,YAAY,KAAKA;IAChD;EACF;EAEA,cAAW;AACT,UAAMC,SAASkB,OAAOY,SAAS,KAAK9B,MAAM,IAAI,KAAKA,SAAS;AAC5D,SAAK+B,MAAMC,YAAY,yBAAyB,GAAGhC,MAAAA,IAAU;EAC/D;EAEA,kBAAe;AACb,SAAK+B,MAAMC,YAAY,8BAA8B,KAAK,WAAW;EACvE;;;;;AAxFK,UAAA,GAAA,IAAA,GAAA,KACL,eAAWC,YAAA,IAAA,GAAG/B,eAAAA,IAAAA,KACd,kBAAsC,MAAA,KACtC,eAAe,OAAA,KAeNH,0BAAAA,gBAAAA,IAAAA,GAAAA,KAUAC,uBAAAA,aAAAA,MAAS,CAAA,GAAA,KAGTC,qBAAAA,WAAAA,MAAO,KAAA;;AA0DlB;;;ACzOA,SAASiC,QAAAA,aAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4BTC;IAAAA;IA2BtBC;IAAAA;;QA/CVC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;;;;;EAgBRC,oBAAoB;IAAC;;AACvB,CAAA,GAAAC,SASGC,KAAmB;EAClBC,SAAS;EACTC,WAAW;EACXC,cAAc;EACdC,kBAAkBC,MAAoBC,UAAsB;AAC1D,SAAKC,YACDC,cAA8B,MAAA,GAC9BC,QACA;MACE;QAAEC,GAAG,SAAU,KAAqBC,MAAML,QAAAA,CAAS;MAAK;MACxD;QAAEI,GAAG,SAAU,KAAqBC,MAAMN,IAAAA,CAAK;MAAK;OAEtD;MACEO,UAAU;MACVC,QAAQ;IACV,CAAA;EAEN;AACF,CAAA;AA1BK,IAAMC,cAAN,eAA0BrB,gBAAAA,aAAAA;;WA2BtBC,aAAAA,WAAAA,GAAAA,GAAAA,CAAAA,cAAAA,WAAAA,EAAAA,IAAAA,oBAAAA,MAAAA;;;;QAAAA;;;;OA3BsBD,aAAAA;;EAGtBkB;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAwBLjB;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAEdqB,SAAyB;AACvB,WAAOC;sDAC2C,KAAKtB,KAAK;kBAC9C,KAAKiB,MAAM,KAAKjB,KAAK,CAAC;;;EAGtC;;;;;AAnCK,UAAA,GAAA,IAAA,GAAA,KAGIiB,uBAAKM,YAAA,IAAA,GAAgB;MAC5BC,MAAM;MACNC,IAAI;IACN,IAAA,KAqBSzB,sBAAAA,YAAAA,IAAAA;;AASX;;;AC5DA,SAAS0B,QAAAA,aAAiC;;;ACMnC,IAAMC,oBAAN,MAAMA;EACX;EACA;EAKA;EAEA,YAAYC,SAAmC;SAP/C,WAIW;SACX,UAAU;SA+BV,qBAAqB,CAACC,UAAAA;AACpB,UAAI,CAAC,KAAK,UAAU;AAClB;MACF;AAEA,YAAM,EAAEC,OAAOC,SAASC,SAAQ,IAAK,KAAK;AAC1C,YAAMC,OAAOJ,MAAMK,aAAY;AAE/B,UAAID,KAAKE,KAAK,CAACC,SAASA,gBAAgBC,WAAWD,KAAKE,aAAa,oBAAA,CAAA,GAAwB;AAC3F;MACF;AAEA,UAAIL,KAAKM,SAAST,KAAAA,GAAQ;AACxB;MACF;AAEA,UAAIC,WAAWE,KAAKM,SAASR,OAAAA,GAAU;AACrC;MACF;AAEA,UAAIC,SAASG,KAAK,CAACK,YAAYP,KAAKM,SAASC,OAAAA,CAAAA,GAAW;AACtD;MACF;AAEA,WAAK,WAAWX,KAAAA;IAClB;SAEA,iBAAiB,CAACA,UAAAA;AAChB,UAAIA,MAAMY,QAAQ,YAAY,CAAC,KAAK,UAAU;AAC5C;MACF;AAEAZ,YAAMa,eAAc;AAEpB,YAAMC,SAASC,SAASC;AAExB,UAAI,CAACF,QAAQ;AACX,aAAK,WAAWd,KAAAA;AAChB;MACF;AAEA,YAAM,EAAEC,OAAOC,SAASC,SAAQ,IAAK,KAAK;AAC1C,YAAMC,OAAOJ,MAAMK,aAAY;AAE/B,UAAID,KAAKM,SAAST,KAAAA,KAAUA,MAAMgB,SAASH,MAAAA,GAAS;AAClD,aAAK,WAAWd,KAAAA;AAChB;MACF;AAEA,UAAIE,YAAYE,KAAKM,SAASR,OAAAA,KAAYA,QAAQe,SAASH,MAAAA,IAAU;AACnE,aAAK,WAAWd,KAAAA;AAChB;MACF;AAEA,UAAIG,SAASG,KAAK,CAACK,YAAYP,KAAKM,SAASC,OAAAA,KAAYA,QAAQM,SAASH,MAAAA,CAAAA,GAAU;AAClF,aAAK,WAAWd,KAAAA;MAClB;IACF;AArFE,SAAK,aAAaD,QAAQmB;EAC5B;EAEAC,QAAQC,SAA+B;AACrC,SAAK,WAAW;MACdnB,OAAOmB,QAAQnB;MACfC,SAASkB,QAAQlB,WAAW;MAC5BC,WAAWiB,QAAQjB,YAAY,CAAA,GAAIkB,OAAO,CAACC,OAA0BA,cAAcC,WAAAA;IACrF;AAEA,QAAI,CAAC,KAAK,SAAS;AACjBR,eAASS,iBAAiB,eAAe,KAAK,oBAAoB,IAAA;AAClET,eAASS,iBAAiB,WAAW,KAAK,gBAAgB,IAAA;AAC1D,WAAK,UAAU;IACjB;EACF;EAEAC,aAAmB;AACjB,QAAI,CAAC,KAAK,SAAS;AACjB;IACF;AAEAV,aAASW,oBAAoB,eAAe,KAAK,oBAAoB,IAAA;AACrEX,aAASW,oBAAoB,WAAW,KAAK,gBAAgB,IAAA;AAC7D,SAAK,UAAU;AACf,SAAK,WAAW;EAClB;EAEA;EA2BA;AA+BF;;;ACtFA,IAAMC,WAAW,oBAAIC,QAAAA;AAErB,IAAMC,mBAAmB,CACvBC,MACAC,YAAAA;AAEA,MAAIA,QAAQC,WAAWF,IAAAA,GAAO;AAC5B,WAAO;EACT;AAEA,QAAMG,WAAWF,QAAQG,QAAQJ,IAAAA;AAEjC,MAAI,CAACG,UAAU;AACb,WAAO;EACT;AAEA,QAAME,QAAQF,SAASE,SAASL,QAAQ;AAExC,MAAI,EAAEK,iBAAiBC,cAAc;AACnC,WAAO;EACT;AAEA,QAAMC,UAAUJ,SAASI,WAAWJ,SAASI,mBAAmBD,cAAcH,SAASI,UAAU;AAEjG,QAAMC,WAAWL,SAASK,UAAUC,OAAO,CAACC,YAAoCA,mBAAmBJ,WAAAA,KAAgB,CAAA;AAEnH,SAAO;IACLD;IACAE;IACAC;EACF;AACF;AAEO,IAAMG,2BAA2B,CACtCX,MACAY,WACAX,YAAAA;AAEA,QAAMY,aAAa,IAAIC,kBAAkB;IACvCF,UAAUG,OAAK;AACb,UAAId,QAAQC,WAAWF,IAAAA,GAAO;AAC5B;MACF;AAEAY,gBAAUI,KAAKhB,MAAMe,KAAAA;IACvB;EACF,CAAA;AAEA,SAAO;IACLE,SAAAA;AACE,YAAMC,UAAUnB,iBAAiBC,MAAMC,OAAAA;AACvC,UAAI,CAACiB,SAAS;AACZL,mBAAWM,WAAU;AACrB;MACF;AAEAN,iBAAWO,QAAQF,OAAAA;IACrB;IACAC,aAAAA;AACEN,iBAAWM,WAAU;IACvB;EACF;AACF;AAEO,IAAME,6BAA6B,CAACrB,MAAmBsB,WAAAA;AAC5D,MAAIC,UAAU1B,SAAS2B,IAAIxB,IAAAA;AAE3B,MAAI,CAACuB,SAAS;AACZA,cAAU,oBAAIE,IAAAA;AACd5B,aAAS6B,IAAI1B,MAAMuB,OAAAA;EACrB;AAEAA,UAAQI,IAAIL,MAAAA;AACd;AAEO,IAAMM,4BAA4B,CAAC5B,SAAAA;AACxC,QAAMuB,UAAU1B,SAAS2B,IAAIxB,IAAAA;AAE7B,MAAI,CAACuB,SAAS;AACZ;EACF;AAEAA,UAAQM,QAAQ,CAACP,WAAAA;AACfA,WAAOL,OAAM;EACf,CAAA;AACF;AAEO,IAAMa,gCAAgC,CAAC9B,SAAAA;AAC5C,QAAMuB,UAAU1B,SAAS2B,IAAIxB,IAAAA;AAE7B,MAAI,CAACuB,SAAS;AACZ;EACF;AAEAA,UAAQM,QAAQ,CAACP,WAAAA;AACfA,WAAOH,WAAU;EACnB,CAAA;AACF;AAEO,IAAMY,4BAA4B,CAAC/B,SAAAA;AACxC4B,4BAA0B5B,IAAAA;AAC5B;;;AChGA,IAAMgC,mBAAmB,oBAAIC,QAAAA;AAE7B,IAAMC,aAAa,CACjBC,MACAC,MACAC,MACAC,gBAAgB,UAAK;AAErB,QAAMC,WAAWJ,KAAKC,IAAAA;AAErBD,OAAoCC,IAAAA,IAAQ,YAAaI,MAAe;AACvE,QAAIF,eAAe;AACjBD,WAAKI,KAAK,IAAI;IAChB;AAEA,QAAIC;AAEJ,QAAI,OAAOH,aAAa,YAAY;AAClCG,eAAUH,SAA+CI,MAAM,MAAMH,IAAAA;IACvE;AAEA,QAAI,CAACF,eAAe;AAClBD,WAAKI,KAAK,IAAI;IAChB;AAEA,WAAOC;EACT;AACF;AAEA,IAAME,kBAAkB,CAACT,SAAAA;AACvB,MAAIH,iBAAiBa,IAAIV,IAAAA,GAAO;AAC9B;EACF;AAEAH,mBAAiBc,IAAIX,IAAAA;AAErBD,aAAWC,MAAM,qBAAqB,WAAA;AACpCY,8BAA0B,IAAI;EAChC,CAAA;AAEAb,aAAWC,MAAM,eAAe,WAAA;AAC9BY,8BAA0B,IAAI;EAChC,CAAA;AAEAb,aACEC,MACA,wBACA,WAAA;AACEa,kCAA8B,IAAI;EACpC,GACA,IAAA;AAEJ;AAEO,SAASC,aACdC,UAAsC,CAAC,GAAC;AAExC,SAAO,CACLC,gBACAC,YAAAA;AAEAA,YAAQC,eAAe,WAAA;AACrBT,sBAAgB,IAAI;AAEpB,YAAMU,UACJJ,QAAQI,YACP,CAACnB,SAAAA;AACA,eAAO;UACLoB,OAAOL,QAAQK,QAAQpB,IAAAA;UACvBqB,SAASN,QAAQM,UAAUrB,IAAAA;UAC3BsB,UAAUP,QAAQO,WAAWtB,IAAAA;QAC/B;MACF;AAEF,YAAMuB,SAASC,yBACb,MACA,CAACC,UAAAA;AACCT,uBAAeV,KAAK,MAAMmB,KAAAA;MAC5B,GACA;QACEN;QACAO,UAAUX,QAAQW;MACpB,CAAA;AAGFC,iCAA2B,MAAMJ,MAAAA;AAEjC,UAAI,KAAKK,aAAa;AACpBhB,kCAA0B,IAAI;MAChC;IACF,CAAA;EACF;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IHqK8BiB;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAUnBC;IAGAC;IAGAC;IAGAC;IAGAC;IAUAC;IASAC;IAGAC;IAGAC;IAOAC;IAGAC;IAGAC;IAGAC;IAGAC;IAGAC;IAAAA;AAvUX,IAAMC,eAAgB,uBAAA;AACpB,MAAIC,UAAU;AACd,SAAO,MAAA;AACLA,eAAW;AACX,WAAO,wBAAwBA,OAAAA;EACjC;AACF,GAAA;AAEA,IAAMC,cAAe,uBAAA;AACnB,MAAID,UAAU;AACd,SAAO,MAAA;AACLA,eAAW;AACX,WAAO,yBAAyBA,OAAAA;EAClC;AACF,GAAA;;SAECE,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+OV,CAAA,GAAAC,SAIGC,KAAc;EACbC,MAAMC;EACNC,SAAS;EACTC,SAASC,MAAMC,UAAQ;AACpB,SAAkBC,iBAAiBF,MAAMC,QAAAA;EAC5C;AACF,CAAA,GAAAE,SAGCR,KAAc;EAAEC,MAAMC;EAASC,SAAS;AAAK,CAAA,GAAAM,SAG7CT,KAAc;EAAEC,MAAMC;EAASC,SAAS;AAAK,CAAA,GAAAO,SAG7CV,KAAc;EAAEC,MAAMC;EAASC,SAAS;AAAK,CAAA,GAAAQ,SAG7CX,KAAc;EAAEC,MAAMC;EAASC,SAAS;AAAK,CAAA,GAAAS,SAG7CZ,KAAmC;EAClCC,MAAMY;EACNV,SAAS;EACTW,cAAc;EACdC,oBAAAA;AACE,SAAKC,gBAAa;EACpB;AACF,CAAA,GAAAC,SAGCjB,KAAa;EACZG,SAAS;EACTW,cAAc;EACdV,SAASC,MAAI;AACV,SAAkBa,MAAMC,YAAY,8BAA8Bd,QAAQ,MAAA;EAC7E;AACF,CAAA,GAAAe,SAGCpB,KAAoB;EAAEG,SAAS;EAAMW,cAAc;AAAK,CAAA,GAAAO,SAGxDrB,KAAoB;EAAEG,SAAS;EAAMW,cAAc;AAAK,CAAA,GAAAQ,UAGxDtB,KAAoB;EACnBG,SAAS;EACToB,WAAW;EACXT,cAAc;AAChB,CAAA,GAAA,SAGCd,KAAgB;EAAEG,SAAS;EAAMW,cAAc;AAAe,CAAA,GAAAU,UAG9DC,MAAmB,kBAAA,GAAAC,UAGnBD,MAAwB,6BAAA,GAAAE,UAGxBF,MAAmB,kBAAA,GAAAG,UAGnBH,MAAuB,sBAAA,GAAA,SA+PvBI,aAAuB;EACtBC,SAAS,CAACC,SAASA,KAAKxC;EACxByC,UAAU,CAACD,SAAS;IAACA,KAAK1C;IAAS0C,KAAKxC;;EACxCZ,UAAU,CAACoD,SAASA,KAAKpD,YAAY,CAACoD,KAAKrD;AAC7C,CAAA;AAvUK,IAAMuD,WAAN,eAAuBxD,gBAAAA,aAAAA;;WAUnBC,aAGAC,iBAGAC,aAGAC,gBAGAC,kBAUAC,cASAC,iBAGAC,aAGAC,cAOAC,mBAGAC,kBAGAC,eAGAC,mBAGAC,oBAGAC,mBAAAA,WAAAA,GAAAA,GAAAA,CAAAA,WAAAA,WAAAA,EAAAA,IAAAA,oBAAAA,MAAAA;;;;QA3DAd;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAUAC;;;;;QASAC;;;;;QAGAC;;;;;QAGAC;;;;;QAOAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAmQT0C;;;;OAxU4BzD,aAAAA;;EAUnBC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAGJC;MAAAA,WAAAA;gBAAAA;;MAAAA,SAAAA,IAAAA;SAAAA,yBAAQ;;EAGRC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAGJC;MAAAA,WAAAA;gBAAAA;;MAAAA,SAAAA,IAAAA;SAAAA,yBAAQ;;EAGRC;MAAAA,aAAAA;gBAAAA;;MAAAA,WAAAA,IAAAA;SAAAA,2BAAU;;EAUVC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EASLC;MAAAA,YAAAA;gBAAAA;;MAAAA,UAAAA,IAAAA;SAAAA,0BAAS;;EAGTC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAGJC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAOLC;MAAAA,cAAAA;gBAAAA;;MAAAA,YAAAA,IAAAA;SAAAA,6BAAW;;EAGXC;MAAAA,YAAAA;gBAAAA;;MAAAA,UAAAA,IAAAA;SAAAA,2BAAS;;EAGTC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,yBAAO;;EAGPC;MAAAA,cAAAA;gBAAAA;;MAAAA,YAAAA,IAAAA;SAAAA,6BAAW;;EAGXC;MAAAA,eAAAA;gBAAAA;;MAAAA,aAAAA,IAAAA;SAAAA,8BAAY;;EAGZC;MAAAA,cAAAA;gBAAAA;;MAAAA,YAAAA,IAAAA;SAAAA,6BAAW;;EAEpB;EACA;EACA;EACA;EACA;EACA;EACA;EAIA2C,oBAA0B;AACxB,SAAK,oBAAmB;EAC1B;EAEAC,uBAA6B;AAC3B,SAAK,oBAAmB;AACxB,SAAK,iBAAgB;AACrB,SAAK,oBAAoB;EAC3B;EAEAC,cAAoB;AAClB,UAAMhD,UAAU,KAAKA;AACrB,UAAMiD,YAAY,KAAKC,aAAa,YAAA;AAEpC,QAAIlD,SAAS;AACX,UAAIA,mBAAmBmD,mBAAmB;AACxCnD,gBAAQV,WAAWuB,QAAQ,KAAKvB,QAAQ;MAC1C;AACAU,cAAQoD,aAAa,iBAAiB,KAAK/D,QAAQ,CAAC,KAAKC,WAAW,SAAS,OAAA;AAC7EU,cAAQoD,aAAa,iBAAiB,SAAA;AAEtC,UAAIpD,mBAAmBmD,mBAAmB;AACxC,YAAIF,aAAaA,UAAUI,KAAI,EAAGC,SAAS,GAAG;AAC5CtD,kBAAQoD,aAAa,cAAcH,UAAUI,KAAI,CAAA;QACnD,OAAO;AACLrD,kBAAQuD,gBAAgB,YAAA;QAC1B;MACF;IACF;AAEA,QAAI,KAAKtD,aAAa;AACpB,WAAKA,YAAYX,WAAWuB,QAAQ,KAAKvB,QAAQ;AAEjD,UAAI2D,aAAaA,UAAUI,KAAI,EAAGC,SAAS,GAAG;AAC5C,aAAKrD,YAAYmD,aAAa,cAAcH,UAAUI,KAAI,CAAA;MAC5D,OAAO;AACL,aAAKpD,YAAYsD,gBAAgB,YAAA;MACnC;IACF;AAEA,UAAMC,QAAQ,KAAKtD;AACnB,UAAMuD,gBAAgB,KAAKpE,QAAQ,CAAC,KAAKC;AAEzC,QAAIkE,OAAO;AACT,UAAI,CAACA,MAAME,IAAI;AACbF,cAAME,KAAKpD,YAAAA;MACb;AACAkD,YAAMG,WAAW;AACjBH,YAAMJ,aAAa,QAAQ,SAAA;AAC3BI,YAAMJ,aAAa,eAAeK,gBAAgB,UAAU,MAAA;AAE5D,UAAIzD,SAAS;AACXA,gBAAQoD,aAAa,iBAAiBI,MAAME,EAAE;MAChD;IACF,WAAW1D,SAAS;AAClBA,cAAQuD,gBAAgB,eAAA;IAC1B;AAEAK,wBAAoB,MAAM,YAAY/C,QAAQ,KAAKvB,QAAQ,CAAA;AAE3D,SAAK,oBAAmB;AAExB,QAAI,CAAC,KAAK,qBAAqB;AAC7BuE,qBAAe,MAAA;AACb,aAAK,aAAY;MACnB,CAAA;IACF,OAAO;AACL,WAAK,4BAA2B;IAClC;AAEA,QAAI,KAAKvE,YAAY,KAAKD,MAAM;AAC9B,WAAK,oBAAoB;AACzB,WAAKA,OAAO;IACd;EACF;EAEAyE,SAAyB;AACvB,UAAMC,oBAAoB,KAAK,qBAAoB;AAEnD,WAAOC;;qBAEU,KAAKjE,SAAS;gBACnB,KAAKV,QAAQ,CAAC,KAAKC,QAAQ;;UAEjC,KAAKG,aAAa,KAAK,qBAAqBsE,iBAAAA,IAAqB,KAAK,qBAAqBA,iBAAAA,CAAAA;;;;;sBAK/E,KAAK1E,QAAQ,CAAC,KAAKC,WAAW,SAAS,OAAA;oBACzC,CAAC,KAAKD,QAAQ,KAAKC,QAAQ;qBAC1B,KAAK,mBAAmB;;;;;;;;EAQ3C;EAEA,qBAAqByE,mBAA0B;AAC7C,WAAOC;;;;;6BAKkBD,oBAAoB,SAAS,OAAA;0BAChC,KAAKvE,QAAQ;qBAClB,KAAK,qBAAqB;mBAC5B,KAAK,mBAAmB;sBACrB,KAAKD,IAAI;;;0DAG2BwE,oBAAoB,SAAS,OAAA;gBACvE,KAAK,iBAAgB,CAAA;;;2DAGsB,KAAK1E,OAAO,OAAO,MAAA;;;;EAI5E;EAEA,qBAAqB0E,mBAA0B;AAC7C,WAAOC;;;;6BAIkBD,oBAAoB,SAAS,OAAA;0BAChC,KAAKvE,QAAQ;mBACpB,KAAK,yBAAyB;sBAC3B,KAAKD,IAAI;;;;;;yBAMN,KAAKF,OAAQ,KAAKY,aAAaJ,SAAS,KAAM,KAAK,iBAAgB,CAAA;8BAC9D,KAAKC,eAAe,EAAA;4BACtB,CAAC,KAAKT,IAAI;yBACb,KAAK,kBAAkB;2BACrB,KAAK,qBAAqB;;2DAEM,KAAKA,OAAO,OAAO,MAAA;;;;EAI5E;EAEA;EAoBA;EASA,eAAe4E,OAAa;AAC1B,UAAMC,aAAaD,MAAME,YAAW;AACpC,SAAK,SAASC,QAAQ,CAACC,WAAAA;AACrB,YAAMC,QAAQD,OAAOE,MAAMJ,YAAW,EAAGK,SAASN,UAAAA;AAClD,UAAII,OAAO;AACTD,eAAOI,QAAQ5C,MAAM6C,UAAU;MACjC,OAAO;AACLL,eAAOI,QAAQ5C,MAAM6C,UAAU;MACjC;IACF,CAAA;EACF;EAEAC,OAAOC,OAAiBC,aAA2B;AACjD,QAAI,KAAKvF,UAAU;AACjB;IACF;AAEA,UAAMwF,UAAU,KAAKzF;AACrB,UAAM2B,OAAO4D,SAAS,CAACE;AAEvB,QAAIA,YAAY9D,MAAM;AACpB;IACF;AAEA,SAAK,oBAAoB6D,eAAe;AACxC,SAAKxF,OAAO2B;AAEZ,QAAI,CAACA,MAAM;AACT,WAAK,gBAAgB;AAErB,WAAK,eAAe,EAAA;AAEpB,UAAI,KAAKvB,cAAc,KAAKQ,aAAa;AACvC,aAAKA,YAAYJ,QAAQ,KAAK,iBAAgB;AAC9C,aAAKI,YAAY8E,KAAI;MACvB;IACF;EACF;EAEA7D,iBAAiBF,MAAeC,UAAyB;AACvD,QAAID,SAASC,UAAU;AACrB;IACF;AAEA,QAAI,CAACD,MAAM;AACT,WAAK,gBAAgB;IACvB;AAEA,UAAMgE,SAAS,KAAK,qBAAqB,IAAIC,MAAMjE,OAAO,SAAS,OAAA;AACnE,SAAK,oBAAoB;AAEzB,QAAIA,MAAM;AACR,UAAI,KAAKvB,cAAc,KAAKQ,aAAa;AACvC,aAAKA,YAAYiF,MAAK;MACxB,OAAO;AACLrB,uBAAe,MAAM,KAAK,mBAAkB,CAAA;MAC9C;IACF;AAEAsB,yBAAqB,MAAM,UAAU;MAAEtF,OAAOmB;MAAMoE,OAAOJ;IAAO,CAAA;AAClEK,8BAA0B,IAAI;EAChC;EAOAxC,qBAAqBuC,OAAoB;AACvC,QAAI,CAAC,KAAK/F,MAAM;AACd;IACF;AAEA,SAAKsF,OAAO,OAAOS,KAAAA;EACrB;EAEA;EAmCA,sBAAmB;AACjB,UAAME,OAAO,KAAKnF;AAElB,QAAImF,SAAS,KAAK,cAAc;AAC9B;IACF;AAEA,QAAI,KAAK,cAAc;AACrB,WAAK,aAAaC,oBAAoB,cAAc,KAAK,iBAAiB;IAC5E;AAEA,QAAID,MAAM;AACRA,WAAKE,iBAAiB,cAAc,KAAK,iBAAiB;IAC5D;AAEA,SAAK,eAAeF,QAAQ;EAC9B;EAEA,sBAAmB;AACjB,QAAI,CAAC,KAAK,cAAc;AACtB;IACF;AAEA,SAAK,aAAaC,oBAAoB,cAAc,KAAK,iBAAiB;AAC1E,SAAK,eAAe;EACtB;EAEA;EAIA,eAAY;AACV,UAAME,WAAW,KAAKtF,aAAauF,iBAAiB;MAAEC,SAAS;IAAK,CAAA,KAAM,CAAA;AAC1E,UAAMC,WAAWH,SAASI,OAAO,CAACC,SAA8BA,gBAAgB1G,WAAAA;AAEhF,SAAK,uBAAuB,KAAK,QAAQ;AAEzC,UAAM2G,UAA0B,CAAA;AAEhCH,aAASxB,QAAQ,CAACK,YAAAA;AAChB,UAAIA,QAAQuB,aAAa,oBAAA,KAAyBvB,QAAQvB,aAAa,MAAA,MAAY,aAAa;AAC9F;MACF;AAEA,YAAMrD,QAAQ,KAAK,oBAAoB4E,OAAAA;AACvC,YAAMF,QAAQ,KAAK,oBAAoBE,SAAS5E,KAAAA;AAChD,YAAM6D,KAAKe,QAAQf,MAAMe,QAAQf,GAAGL,KAAI,EAAGC,SAAS,IAAImB,QAAQf,KAAKtD,aAAAA;AAErE,UAAI,CAACqE,QAAQf,IAAI;AACfe,gBAAQf,KAAKA;MACf;AAEAe,cAAQrB,aAAa,QAAQ,QAAA;AAC7BqB,cAAQrB,aAAa,iBAAiB,OAAA;AACtCqB,cAAQwB,QAAQC,SAAS;AACzBzB,cAAQd,WAAW;AAEnB,YAAMwC,WAAW;QACfC,OAAO,CAAChB,UAAAA;AACNA,gBAAMiB,eAAc;AACpBjB,gBAAMkB,gBAAe;AACrB,eAAK,cAAczG,OAAO0E,OAAOa,KAAAA;QACnC;QACAmB,SAAS,CAACnB,UAAAA;AACR,cAAIA,MAAMoB,QAAQ,WAAWpB,MAAMoB,QAAQ,KAAK;AAC9CpB,kBAAMiB,eAAc;AACpB,iBAAK,cAAcxG,OAAO0E,OAAOa,KAAAA;UACnC;QACF;MACF;AAEAX,cAAQe,iBAAiB,SAASW,SAASC,OAAO;QAAEK,SAAS;MAAM,CAAA;AACnEhC,cAAQe,iBAAiB,WAAWW,SAASI,OAAO;AAEpDR,cAAQW,KAAK;QAAEjC;QAAS5E;QAAO0E;QAAOb;QAAIyC;MAAS,CAAA;IACrD,CAAA;AAEA,SAAK,WAAWJ;AAChB,SAAK,sBAAsBA,QAAQzC,SAAS;AAE5C,QAAI,KAAKzD,UAAU,QAAQkG,QAAQzC,SAAS,GAAG;AAC7C,YAAMqD,cAAcZ,QAAQa,KAC1B,CAACvC,WACCA,OAAOI,QAAQuB,aAAa,UAAA,KAC5B3B,OAAOI,QAAQwB,QAAQY,aAAa,UACpCxC,OAAOI,QAAQvB,aAAa,eAAA,MAAqB,MAAA;AAGrD,UAAIyD,aAAa;AACf,aAAK9G,QAAQ8G,YAAY9G;MAC3B;IACF;AAEA,SAAK,4BAA2B;EAClC;EAEA,mBAAgB;AACd,SAAK,uBAAuB,KAAK,QAAQ;AACzC,SAAK,WAAW,CAAA;AAChB,SAAK,sBAAsB;AAC3B,SAAK,iBAAiB;EACxB;EAEA,uBAAuBkG,SAAuB;AAC5CA,YAAQ3B,QAAQ,CAACC,WAAAA;AACfA,aAAOI,QAAQc,oBAAoB,SAASlB,OAAO8B,SAASC,KAAK;AACjE/B,aAAOI,QAAQc,oBAAoB,WAAWlB,OAAO8B,SAASI,OAAO;AACrElC,aAAOI,QAAQwB,QAAQC,SAAS;AAChC7B,aAAOI,QAAQrB,aAAa,iBAAiB,OAAA;AAC7CiB,aAAOI,QAAQd,WAAW;IAC5B,CAAA;EACF;EAEA,8BAA2B;AACzB,QAAI,CAAC,KAAK,qBAAqB;AAC7B,WAAKmD,gBAAgB,kBAAkB,KAAA;AACvC;IACF;AAEA,QAAIC,gBAA+B;AACnC,UAAMC,gBAAgB,KAAK;AAE3B,UAAMjB,UAAU,KAAK;AAErBA,YAAQ3B,QAAQ,CAACC,WAAAA;AACf,YAAM4C,aAAa,KAAKpH,UAAU,QAAQwE,OAAOxE,UAAU,KAAKA;AAChEwE,aAAOI,QAAQrB,aAAa,iBAAiB6D,aAAa,SAAS,OAAA;AACnE5C,aAAOI,QAAQwB,QAAQC,SAASe,aAAa,SAAS;AACtD5C,aAAOI,QAAQd,WAAWsD,aAAa,IAAI;AAE3C,UAAIA,YAAY;AACdF,wBAAgB1C,OAAOE;MACzB;IACF,CAAA;AAEA,QAAI,CAACwC,eAAe;AAClB,YAAMG,WAAWnB,QAAQ,CAAA;AACzB,UAAImB,UAAU;AACZA,iBAASzC,QAAQd,WAAW;MAC9B;IACF;AAEA,SAAK,iBAAiBoD;AACtB,UAAMI,WAAWtG,QAAQ,KAAKhB,SAAS,KAAK,cAAc;AAC1D,SAAKiH,gBAAgB,kBAAkBK,QAAAA;AAEvC,QAAIH,kBAAkB,KAAK,kBAAkB,OAAO,KAAKrF,kBAAkB,YAAY;AACrF,WAAKA,cAAa;IACpB;EACF;EAEA,uBAAoB;AAClB,WAAO,CAAC,KAAK9B,SAAS,CAAC,KAAK;EAC9B;EAEA,mBAAgB;AACd,QAAI,KAAK,gBAAgB;AACvB,aAAO,KAAK;IACd;AAEA,QAAI,OAAO,KAAKC,gBAAgB,YAAY,KAAKA,YAAYuD,KAAI,EAAGC,SAAS,GAAG;AAC9E,aAAO,KAAKxD,YAAYuD,KAAI;IAC9B;AAEA,WAAO;EACT;EAEA,qBAAkB;AAChB,QAAI,CAAC,KAAKhE,MAAM;AACd;IACF;AAEA,UAAM0G,UAAU,KAAK,SAASF,OAAO,CAACuB,MAAMA,EAAE3C,QAAQ5C,MAAM6C,YAAY,MAAA;AAExE,QAAIqB,QAAQzC,WAAW,GAAG;AACxB,WAAKpD,cAAcgF,MAAAA;AACnB;IACF;AAEA,QAAImC,SAAmCtB,QAAQ,CAAA;AAE/C,QAAI,KAAK,kBAAkB,SAAS;AAClCsB,eAAStB,QAAQ,CAAA;IACnB,WAAW,KAAK,kBAAkB,QAAQ;AACxCsB,eAAStB,QAAQA,QAAQzC,SAAS,CAAA;IACpC,WAAW,KAAK,kBAAkB,QAAQ,KAAKzD,UAAU,MAAM;AAC7D,YAAMyE,QAAQ,KAAK,mBAAmB,KAAKzE,KAAK;AAChD,UAAIyE,SAASA,MAAMG,QAAQ5C,MAAM6C,YAAY,QAAQ;AACnD2C,iBAAS/C;MACX;IACF;AAEA,QAAI+C,QAAQ;AACV,WAAK,aAAaA,MAAAA;IACpB;AACA,SAAK,gBAAgB;EACvB;EAEA,aAAahD,QAAoB;AAC/B,SAAK,SAASD,QAAQ,CAACkD,UAAAA;AACrBA,YAAM7C,QAAQd,WAAW2D,UAAUjD,SAAS,IAAI;IAClD,CAAA;AAEAA,WAAOI,QAAQS,MAAM;MAAEqC,eAAe;IAAK,CAAA;EAC7C;EAEA,oBAAoBC,OAAa;AAC/B,UAAMzB,UAAU,KAAK,SAASF,OAAO,CAACuB,MAAMA,EAAE3C,QAAQ5C,MAAM6C,YAAY,MAAA;AAExE,QAAIqB,QAAQzC,WAAW,GAAG;AACxB,WAAKpD,cAAcgF,MAAAA;AACnB;IACF;AAEA,UAAMuC,aAAaC,KAAKC,IAAI,GAAGD,KAAKE,IAAIJ,OAAOzB,QAAQzC,SAAS,CAAA,CAAA;AAChE,UAAMe,SAAS0B,QAAQ0B,UAAAA;AACvB,QAAIpD,QAAQ;AACV,WAAK,aAAaA,MAAAA;IACpB;EACF;EAEA,mBAAmBxE,OAAoB;AACrC,QAAIA,UAAU,MAAM;AAClB,aAAOgI;IACT;AAEA,WAAO,KAAK,SAASjB,KAAK,CAACvC,WAAWA,OAAOxE,UAAUA,KAAAA;EACzD;EAEA,WAAWiI,MAAY;AACrB,UAAM/B,UAAU,KAAK,SAASF,OAAO,CAACuB,MAAMA,EAAE3C,QAAQ5C,MAAM6C,YAAY,MAAA;AAExE,QAAIqB,QAAQzC,WAAW,GAAG;AACxB,WAAKpD,cAAcgF,MAAAA;AACnB;IACF;AAEA,UAAM6C,gBAAgBC,SAASD;AAC/B,UAAME,eAAelC,QAAQmC,UAAU,CAAC7D,WAAWA,OAAOI,YAAYsD,aAAAA;AAEtE,QAAIE,iBAAiB,IAAI;AACvB,WAAK,oBAAoBH,OAAO,IAAI,IAAI/B,QAAQzC,SAAS,CAAA;AACzD;IACF;AAEA,UAAM6E,aAAaF,eAAeH,OAAO/B,QAAQzC,UAAUyC,QAAQzC;AACnE,SAAK,oBAAoB6E,SAAAA;EAC3B;EAEA;EAkCA,uBAAuB/C,OAAY;AACjC,UAAMc,SAAS,KAAK,SAASU,KAAK,CAACvC,WAAWA,OAAOI,YAAYuD,SAASD,aAAa;AAEvF,QAAI7B,QAAQ;AACV,WAAK,cAAcA,OAAOrG,OAAOqG,OAAO3B,OAAOa,KAAAA;IACjD;EACF;EAEA,cAAcvF,OAAe0E,OAAeM,aAAkB;AAC5D,QAAI,KAAKvF,UAAU;AACjB;IACF;AAEAuF,gBAAYwB,eAAc;AAC1BxB,gBAAYyB,gBAAe;AAE3B,UAAM8B,gBAAgB,KAAKvI;AAC3B,SAAKA,QAAQA;AACb,SAAK,iBAAiB0E;AACtB,SAAK,4BAA2B;AAEhC,SAAKI,OAAO,OAAOE,WAAAA;AAEnB,QAAIuD,kBAAkBvI,OAAO;AAC3B,WAAK,qBAAqBA,OAAO0E,OAAOM,WAAAA;IAC1C;AAEA,QAAI,CAAC,KAAKpF,YAAY;AACpBoE,qBAAe,MAAM,KAAK7D,SAASkF,MAAAA,CAAAA;IACrC;EACF;EAEA,oBAAoBT,SAAoB;AACtC,UAAM4D,gBAAgB5D,QAAQvB,aAAa,OAAA,KAAYuB,QAAQvB,aAAa,YAAA,KAAiBuB,QAAQwB,QAAQpG;AAE7G,QAAIwI,iBAAiBA,cAAchF,KAAI,EAAGC,SAAS,GAAG;AACpD,aAAO+E,cAAchF,KAAI;IAC3B;AAEA,UAAMiF,OAAO7D,QAAQ8D,aAAalF,KAAAA;AAElC,QAAIiF,QAAQA,KAAKhF,SAAS,GAAG;AAC3B,aAAOgF;IACT;AAEA,UAAMpB,WAAW9G,aAAAA;AACjBqE,YAAQwB,QAAQpG,QAAQqH;AACxB,WAAOA;EACT;EAEA,oBAAoBzC,SAAsByC,UAAgB;AACxD,UAAMsB,gBAAgB/D,QAAQvB,aAAa,YAAA,KAAiBuB,QAAQvB,aAAa,YAAA;AAEjF,QAAIsF,iBAAiBA,cAAcnF,KAAI,EAAGC,SAAS,GAAG;AACpD,aAAOkF,cAAcnF,KAAI;IAC3B;AAEA,UAAMiF,OAAO7D,QAAQ8D,aAAalF,KAAAA;AAElC,QAAIiF,QAAQA,KAAKhF,SAAS,GAAG;AAC3B,aAAOgF;IACT;AAEA,WAAOpB;EACT;EAEA,qBAAqBrH,OAAe0E,OAAea,OAAY;AAC7DD,yBAAqB,MAAM,UAAU;MAAEtF;MAAOuF;IAAM,CAAA;AAEpD,SAAKqD,cACH,IAAIC,YAAY,gBAAgB;MAC9BC,QAAQ;QAAE9I;QAAO0E;QAAOa;MAAM;MAC9BwD,SAAS;MACTC,UAAU;IACZ,CAAA,CAAA;EAEJ;;;;;AA1tBK,UAAA,GAAA,IAAA,GAAA,KAUIxJ,sBAAIyJ,YAAA,IAAA,GAAJzJ,YAAAA,MAAO,KAAA,IAAA,KAGPC,yBAAAA,gBAAAA,MAAW,KAAA,GAAA,KAGXC,qBAAAA,YAAAA,MAAO,KAAA,GAAA,KAGPC,yBAAAA,eAAAA,MAAW,KAAA,GAAA,KAGXC,2BAAAA,iBAAAA,MAAa,KAAA,GAAA,KAUbC,sBAAAA,aAAAA,MAAsC,QAAA,GAAA,KAStCC,0BAAAA,gBAAAA,MAAoB,MAAA,GAAA,KAGpBC,qBAAAA,YAAAA,MAAsB,IAAA,GAAA,KAGtBC,sBAAAA,aAAAA,MAAuB,IAAA,GAAA,KAOvBC,6BAAAA,kBAAAA,MAA6B,kBAAA,GAAA,KAG7BC,2BAAAA,iBAAAA,MAAuB,cAAA,GAAA,KAGvBC,yBAAAA,cAAAA,IAAAA,GAAAA,KAGAC,6BAAAA,kBAAAA,IAAAA,GAAAA,KAGAC,8BAAAA,mBAAAA,IAAAA,GAAAA,KAGAC,6BAAAA,kBAAAA,IAAAA,GAAAA,KAET,WAA2B,CAAA,GAAE,KAC7B,iBAAgC,MAAA,KAChC,eAAuC,MAAA,KACvC,gBAAyC,MAAA,KACzC,sBAAsB,OAAA,KACtB,oBAAkC,MAAA,KAClC,oBAAoB,MAAA;AAClB,WAAK,aAAY;IACnB,GAAA,KAwJA,4BAA4B,CAACiF,UAAAA;AAC3B,UAAI,KAAK9F,UAAU;AACjB;MACF;AAEA,UAAI,CAAC,KAAKD,MAAM;AACd,aAAKsF,OAAO,MAAMS,KAAAA;AAElB,YAAI,KAAKnF,aAAa;AACpB,eAAKA,YAAYJ,QAAQ;AACzB,eAAK,eAAe,EAAA;AACpB,eAAKI,YAAYiF,MAAK;QACxB;MACF,OAAO;AACL,YAAIE,MAAMiC,WAAW,KAAKpH,aAAa;AACrC,eAAK0E,OAAO,OAAOS,KAAAA;QACrB;MACF;IACF,GAAA,KAEA,qBAAqB,CAACA,UAAAA;AACpB,YAAM2D,QAAQ3D,MAAMiC;AACpB,WAAK,eAAe0B,MAAMlJ,KAAK;AAE/B,UAAI,CAAC,KAAKR,MAAM;AACd,aAAKsF,OAAO,MAAMS,KAAAA;MACpB;IACF,GAAA,KA8EA,wBAAwB,CAACA,UAAAA;AACvB,cAAQA,MAAMoB,KAAG;QACf,KAAK;AACHpB,gBAAMiB,eAAc;AACpB,eAAK,gBAAgB;AACrB,eAAK1B,OAAO,MAAMS,KAAAA;AAClB;QACF,KAAK;AACHA,gBAAMiB,eAAc;AACpB,eAAK,gBAAgB;AACrB,eAAK1B,OAAO,MAAMS,KAAAA;AAClB;QACF,KAAK;AACH,cAAI,CAAC,KAAK3F,YAAY;AACpB2F,kBAAMiB,eAAc;AACpB,iBAAK1B,OAAO,MAAMS,KAAAA;UACpB;AACA;QACF,KAAK;AACH,cAAI,CAAC,KAAK3F,YAAY;AACpB2F,kBAAMiB,eAAc;AACpB,iBAAK1B,OAAO,MAAMS,KAAAA;UACpB;AACA;QACF,KAAK;AACH,cAAI,KAAK/F,MAAM;AACb+F,kBAAMiB,eAAc;AACpB,iBAAK1B,OAAO,OAAOS,KAAAA;UACrB;AACA;QACF;AACE;MACJ;IACF,GAAA,KA6BA,sBAAsB,CAACA,UAAAA;AACrB,WAAKT,OAAO,CAAC,KAAKtF,MAAM+F,KAAAA;IAC1B,GAAA,KA4NA,sBAAsB,CAACA,UAAAA;AACrB,cAAQA,MAAMoB,KAAG;QACf,KAAK;AACHpB,gBAAMiB,eAAc;AACpB,eAAK,WAAW,CAAA;AAChB;QACF,KAAK;AACHjB,gBAAMiB,eAAc;AACpB,eAAK,WAAW,EAAC;AACjB;QACF,KAAK;AACHjB,gBAAMiB,eAAc;AACpB,eAAK,oBAAoB,CAAA;AACzB;QACF,KAAK;AACHjB,gBAAMiB,eAAc;AACpB,eAAK,oBAAoB,KAAK,SAAS/C,SAAS,CAAA;AAChD;QACF,KAAK;QACL,KAAK,KAAK;AACR8B,gBAAMiB,eAAc;AACpB,eAAK,uBAAuBjB,KAAAA;AAC5B;QACF;QACA,KAAK;AACHA,gBAAMiB,eAAc;AACpB,eAAK1B,OAAO,OAAOS,KAAAA;AACnB,eAAKpF,SAASkF,MAAAA;AACd;QACF;AACE;MACJ;IACF;;AA+EF;;;AIr/BA,SAAS8D,QAAAA,aAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqMMC;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAIhBC;IAGAC;IAGAC;IAGAC;IAGAC;IAGAC;IAGAC;IAAAA;;SAlNVC,UAAU;EACTC,KAAK;EACLC,YAAY;EACZC,UAAU;EACVC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6KRC,WAAAA;AACE,WAAOC;4CACiCC,QAAQ,KAAKT,QAAQ,CAAA;;0CAEvBS,QAAQ,KAAKV,QAAQ,CAAA,cAAeU,QAAQ,KAAKV,QAAQ,CAAA,mBAAoBU,QAAQ,KAAKV,QAAQ,CAAA;;;;;EAK1I;AACF,CAAA,GAAAW,SAIGC,KAAoB;EAAEC,SAAS;AAAK,CAAA,GAAAC,SAGpCF,KAAoB;EAAEC,SAAS;AAAK,CAAA,GAAAE,SAGpCH,KAAa;EAAEC,SAAS;EAAMG,cAAc;AAAO,CAAA,GAAAC,SAGnDL,KAAoB;EAAEC,SAAS;AAAK,CAAA,GAAAK,SAGpCN,KAAc;EAAEd,MAAMY;EAASG,SAAS;EAAMG,cAAc;AAAM,CAAA,GAAAG,SAGlEP,KAAc;EAAEd,MAAMY;EAASG,SAAS;EAAMG,cAAc;AAAM,CAAA,GAAAI,SAGlEC,MAAwB,OAAA,GAAAC,SAgDxBC,OAAO,cAAc;EAAEC,UAAU;AAAsB,CAAA,GAAAC,SAKvDF,OAAO,cAAc;EAAEC,UAAU;AAAsB,CAAA,GAAAE,UAKvDH,OAAuC,SAAS;EAAEC,UAAU;AAAQ,CAAA,GAAAG,UAUpEJ,OAAuC,UAAU;EAAEC,UAAU;AAAQ,CAAA;AAzFjE,IAAMI,QAAN,eAAoBjC,gBAAAA,aAAAA;;WAIhBC,cAGAC,oBAGAC,aAGAC,aAGAC,iBAGAC,iBAGAC,gBAAAA,WAAAA,GAAAA,GAAAA,CAAAA,QAAAA,WAAAA,EAAAA,IAAAA,oBAAAA,MAAAA;;;;QAlBAN;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAgDT2B;;;;;QAKAC;;;;;QAKAC;;;;;QAUAC;;;;OA1FyBrC,aAAAA;;EAIhBC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAGLC;MAAAA,cAAAA;gBAAAA;;MAAAA,YAAAA,IAAAA;SAAAA,4BAAW;;EAGXC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAGJC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAGJC;MAAAA,WAAAA;gBAAAA;;MAAAA,SAAAA,IAAAA;SAAAA,yBAAQ;;EAGRC;MAAAA,WAAAA;gBAAAA;;MAAAA,SAAAA,IAAAA;SAAAA,yBAAQ;;EAGRC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,wBAAO;;EAER+B,wBAA8B;AACpC,UAAMC,YAAY,KAAKC,YAAYC,cAAc,oBAAA;AACjD,QAAI,CAACF,WAAW;AACd;IACF;AAEA,UAAMG,aAAa,KAAKF,YAAYC,cAAc,qBAAA;AAClD,UAAME,YAAY5B,QAAQ2B,YAAYE,cAAc;MAAEC,SAAS;IAAK,CAAA,EAAGC,SAAS,CAAA;AAChFC,wBAAoBR,WAAW,mBAAmBI,SAAAA;EACpD;EAEQK,wBAA8B;AACpC,UAAMT,YAAY,KAAKC,YAAYC,cAAc,oBAAA;AACjD,QAAI,CAACF,WAAW;AACd;IACF;AAEA,UAAMU,aAAa,KAAKT,YAAYC,cAAc,qBAAA;AAClD,UAAMS,YAAYnC,QAAQkC,YAAYL,cAAc;MAAEC,SAAS;IAAK,CAAA,EAAGC,SAAS,CAAA;AAChFC,wBAAoBR,WAAW,mBAAmBW,SAAAA;EACpD;EAEAC,cAAoB;AAClB,QAAI,CAAC,KAAK5C,SAAS;AACjB;IACF;AAEA,UAAMA,UAAU,KAAKA;AACrB,UAAMN,QAAQ,KAAKA,SAAS;AAE5B,QAAIM,QAAQN,UAAUA,OAAO;AAC3BM,cAAQN,QAAQA;IAClB;AAEAM,YAAQJ,OAAO,KAAKA,QAAQ;AAC5BI,YAAQL,cAAc,KAAKA,eAAe;AAC1CK,YAAQH,OAAO,KAAKA,QAAQ;AAC5BG,YAAQF,WAAWU,QAAQ,KAAKV,QAAQ;AAExC,SAAKiC,sBAAqB;AAC1B,SAAKU,sBAAqB;AAE1BD,wBAAoB,MAAM,YAAYhC,QAAQ,KAAKV,QAAQ,CAAA;EAC7D;EAGA6B,qBAA2B;AACzB,SAAKI,sBAAqB;EAC5B;EAGAH,qBAA2B;AACzB,SAAKa,sBAAqB;EAC5B;EAGAZ,YAAYgB,OAAcC,QAAwC;AAChE,QAAI,CAACA,QAAQ;AACX;IACF;AAEA,SAAKpD,QAAQoD,OAAOpD;AACpBqD,yBAAqB,MAAM,SAAS;MAAErD,OAAO,KAAKA,SAAS;MAAImD;IAAM,CAAA;EACvE;EAGAf,aAAae,OAAcC,QAAwC;AACjE,QAAI,CAACA,QAAQ;AACX;IACF;AAEA,SAAKpD,QAAQoD,OAAOpD;AACpBqD,yBAAqB,MAAM,UAAU;MAAErD,OAAO,KAAKA,SAAS;MAAImD;IAAM,CAAA;EACxE;;;;;AAjGK,UAAA,GAAA,IAAA,GAAA,KAIInD,uBAAKsD,YAAA,IAAA,GAALtD,aAAAA,IAAAA,IAAAA,KAGAC,4BAAAA,mBAAAA,IAAAA,GAAAA,KAGAC,qBAAAA,YAAAA,IAAAA,GAAAA,KAGAC,qBAAAA,YAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,MAAW,KAAA,GAAA,KAGXC,yBAAAA,gBAAAA,MAAW,KAAA,GAAA,KAGXC,wBAAAA,eAAAA,IAAAA;;AA4EX;;;ACvSA,SAASiD,QAAAA,cAAY;;;ACoBrB,IAAMC,UAAU,CAACC,UAAkBC,KAAKC,IAAI,GAAGD,KAAKE,IAAI,GAAGH,KAAAA,CAAAA;AAEpD,SAASI,SAASC,GAAWC,GAAWC,GAAS;AACtD,MAAIC,OAAQH,IAAI,MAAO,OAAO;AAC9BG,SAAO;AAEP,QAAMC,aAAaV,QAAQO,CAAAA;AAC3B,QAAMN,QAAQD,QAAQQ,CAAAA;AACtB,QAAMG,IAAIV,QAAQS;AAClB,QAAME,IAAID,KAAK,IAAIT,KAAKW,IAAKJ,MAAM,IAAK,CAAA;AACxC,QAAMK,IAAIb,QAAQU;AAElB,MAAII,IAAI;AACR,MAAIC,IAAI;AACR,MAAIC,IAAI;AAER,MAAIR,MAAM,GAAG;AACXM,QAAIJ;AACJK,QAAIJ;EACN,WAAWH,MAAM,GAAG;AAClBM,QAAIH;AACJI,QAAIL;EACN,WAAWF,MAAM,GAAG;AAClBO,QAAIL;AACJM,QAAIL;EACN,WAAWH,MAAM,GAAG;AAClBO,QAAIJ;AACJK,QAAIN;EACN,WAAWF,MAAM,GAAG;AAClBM,QAAIH;AACJK,QAAIN;EACN,OAAO;AACLI,QAAIJ;AACJM,QAAIL;EACN;AAEA,SAAO;IACLG,GAAGb,KAAKgB,OAAOH,IAAID,KAAK,GAAA;IACxBE,GAAGd,KAAKgB,OAAOF,IAAIF,KAAK,GAAA;IACxBG,GAAGf,KAAKgB,OAAOD,IAAIH,KAAK,GAAA;EAC1B;AACF;AAEO,SAASK,SAASJ,GAAWC,GAAWC,GAAS;AACtD,QAAMG,KAAKL,IAAI;AACf,QAAMM,KAAKL,IAAI;AACf,QAAMM,KAAKL,IAAI;AAEf,QAAMd,MAAMD,KAAKC,IAAIiB,IAAIC,IAAIC,EAAAA;AAC7B,QAAMlB,MAAMF,KAAKE,IAAIgB,IAAIC,IAAIC,EAAAA;AAC7B,QAAMC,QAAQpB,MAAMC;AAEpB,MAAIE,IAAI;AACR,QAAMC,IAAIJ,QAAQ,IAAI,IAAIoB,QAAQpB;AAClC,QAAMK,IAAIL;AAEV,MAAIoB,UAAU,GAAG;AACf,YAAQpB,KAAAA;MACN,KAAKiB;AACHd,aAAKe,KAAKC,MAAMC,SAASF,KAAKC,KAAK,IAAI;AACvC;MACF,KAAKD;AACHf,aAAKgB,KAAKF,MAAMG,QAAQ;AACxB;MACF,KAAKD;AACHhB,aAAKc,KAAKC,MAAME,QAAQ;AACxB;MACF;AACE;IACJ;AAEAjB,SAAK;EACP;AAEA,SAAO;IAAEA;IAAGC;IAAGC;EAAE;AACnB;AAEO,SAASgB,SAAST,GAAWC,GAAWC,GAAS;AACtD,QAAMQ,QAAQ,CAACC,cAAsBA,UAAUC,SAAS,EAAA,EAAIC,SAAS,GAAG,GAAA;AACxE,SAAO,IAAIH,MAAMV,CAAAA,CAAAA,GAAKU,MAAMT,CAAAA,CAAAA,GAAKS,MAAMR,CAAAA,CAAAA,GAAKY,YAAW;AACzD;AAEO,SAASC,SAASC,KAAW;AAClC,MAAIC,aAAaD,IAAIE,KAAI;AAEzB,MAAI,oBAAoBC,KAAKF,UAAAA,GAAa;AACxCA,iBAAa,IAAIA,WAAW,CAAA,CAAE,GAAGA,WAAW,CAAA,CAAE,GAAGA,WAAW,CAAA,CAAE,GAAGA,WAAW,CAAA,CAAE,GAAGA,WAAW,CAAA,CAAE,GAAGA,WAAW,CAAA,CAAE;EAChH;AAEA,QAAMG,QAAQ,4CAA4CC,KAAKJ,UAAAA;AAE/D,MAAI,CAACG,SAAS,CAACA,MAAM,CAAA,KAAM,CAACA,MAAM,CAAA,KAAM,CAACA,MAAM,CAAA,GAAI;AACjD,WAAO;EACT;AAEA,SAAO;IACLpB,GAAGsB,SAASF,MAAM,CAAA,GAAI,EAAA;IACtBnB,GAAGqB,SAASF,MAAM,CAAA,GAAI,EAAA;IACtBlB,GAAGoB,SAASF,MAAM,CAAA,GAAI,EAAA;EACxB;AACF;AAEO,SAASG,SAASP,KAAW;AAClC,QAAMQ,MAAMT,SAASC,GAAAA;AACrB,SAAOQ,MAAMpB,SAASoB,IAAIxB,GAAGwB,IAAIvB,GAAGuB,IAAItB,CAAC,IAAI;AAC/C;AAEO,SAASuB,SAASlC,GAAWC,GAAWC,GAAS;AACtD,QAAM+B,MAAMlC,SAASC,GAAGC,GAAGC,CAAAA;AAC3B,SAAOgB,SAASe,IAAIxB,GAAGwB,IAAIvB,GAAGuB,IAAItB,CAAC;AACrC;AAEO,SAASwB,WAAWV,KAAW;AACpC,SAAO,qCAAqCG,KAAKH,IAAIE,KAAI,CAAA;AAC3D;AAEO,SAASS,aAAa3B,GAAWC,GAAWC,GAAS;AAC1D,UAAQ,QAAQF,IAAI,QAAQC,IAAI,QAAQC,KAAK;AAC/C;AAEO,SAAS0B,aAAa5B,GAAWC,GAAWC,GAAS;AAC1D,SAAOyB,aAAa3B,GAAGC,GAAGC,CAAAA,IAAK;AACjC;AAEO,SAAS2B,SAAStC,GAAWC,GAAWC,GAAS;AACtD,QAAMqC,IAAIrC,KAAK,IAAID,IAAI;AACvB,QAAMuC,KAAKD,MAAM,KAAKA,MAAM,IAAI,KAAKrC,IAAIqC,KAAK3C,KAAKE,IAAIyC,GAAG,IAAIA,CAAAA;AAC9D,SAAO;IAAEvC;IAAGC,GAAGuC;IAAID;EAAE;AACvB;AAEO,SAASE,SAASzC,GAAWC,GAAWsC,GAAS;AACtD,QAAMrC,IAAIqC,IAAItC,IAAIL,KAAKE,IAAIyC,GAAG,IAAIA,CAAAA;AAClC,QAAMG,KAAKxC,MAAM,IAAI,IAAI,KAAK,IAAIqC,IAAIrC;AACtC,SAAO;IAAEF;IAAGC,GAAGyC;IAAIxC;EAAE;AACvB;AA8BO,SAASyC,mBAAmBC,KAAUC,QAAmB;AAC9D,QAAM,EAAEC,GAAGC,GAAGC,EAAC,IAAKJ;AAEpB,UAAQC,QAAAA;IACN,KAAK;AACH,aAAO;QACLI,QAAQ;UAAC;;QACTC,QAAQ;UAACC,SAASL,GAAGC,GAAGC,CAAAA;;QACxBI,KAAK;UAAC;;QACNC,QAAQ;UAAC;;MACX;IACF,KAAK,OAAO;AACV,YAAMC,MAAMC,SAAST,GAAGC,GAAGC,CAAAA;AAC3B,aAAO;QACLC,QAAQ;UAAC;UAAK;UAAK;;QACnBC,QAAQ;UAACI,IAAIE;UAAGF,IAAIG;UAAGH,IAAII;;QAC3BN,KAAK;UAAC;UAAK;UAAK;;QAChBC,QAAQ;UAAC;UAAI;UAAI;;MACnB;IACF;IACA,KAAK,OAAO;AACV,YAAMM,MAAMC,SAASd,GAAGC,GAAGC,CAAAA;AAC3B,aAAO;QACLC,QAAQ;UAAC;UAAK;UAAK;;QACnBC,QAAQ;UAACW,KAAKC,MAAMH,IAAIb,CAAC;UAAGe,KAAKC,MAAMH,IAAIZ,IAAI,GAAA;UAAMc,KAAKC,MAAMH,IAAII,IAAI,GAAA;;QACxEX,KAAK;UAAC;UAAK;UAAK;;QAChBC,QAAQ;UAAC;UAAK;UAAK;;MACrB;IACF;IACA,KAAK;AACH,aAAO;QACLJ,QAAQ;UAAC;UAAK;UAAK;;QACnBC,QAAQ;UAACW,KAAKC,MAAMhB,CAAAA;UAAIe,KAAKC,MAAMf,IAAI,GAAA;UAAMc,KAAKC,MAAMd,IAAI,GAAA;;QAC5DI,KAAK;UAAC;UAAK;UAAK;;QAChBC,QAAQ;UAAC;UAAK;UAAK;;MACrB;IACF;AACE,aAAO;QACLJ,QAAQ;UAAC;;QACTC,QAAQ;UAACC,SAASL,GAAGC,GAAGC,CAAAA;;QACxBI,KAAK;UAAC;;QACNC,QAAQ;UAAC;;MACX;EACJ;AACF;AAEO,SAASW,wBAAwBpB,KAAUC,QAAqBoB,OAAeC,OAAsB;AAC1G,QAAMC,SAAS;IAAE,GAAGvB;EAAI;AAExB,UAAQC,QAAAA;IACN,KAAK,OAAO;AACV,UAAI,OAAOqB,UAAU,YAAYE,WAAWF,KAAAA,GAAQ;AAClD,cAAMG,SAASC,SAASJ,KAAAA;AACxB,YAAIG,QAAQ;AACV,iBAAOA;QACT;MACF;AACA;IACF;IACA,KAAK,OAAO;AACV,YAAMf,MAAMC,SAASX,IAAIE,GAAGF,IAAIG,GAAGH,IAAII,CAAC;AACxC,YAAMuB,OAAiC;QAACjB,IAAIE;QAAGF,IAAIG;QAAGH,IAAII;;AAC1Da,WAAKN,KAAAA,IAASJ,KAAKT,IAAI,GAAGS,KAAKW,IAAI,KAAKC,OAAOP,KAAAA,CAAAA,CAAAA;AAC/C,aAAOQ,SAASH,KAAK,CAAA,GAAIA,KAAK,CAAA,GAAIA,KAAK,CAAA,CAAE;IAC3C;IACA,KAAK,OAAO;AACV,YAAMZ,MAAMC,SAAShB,IAAIE,GAAGF,IAAIG,GAAGH,IAAII,CAAC;AACxC,YAAMuB,OAAiC;QAACZ,IAAIb;QAAGa,IAAIZ,IAAI;QAAKY,IAAII,IAAI;;AACpEQ,WAAKN,KAAAA,IAASQ,OAAOP,KAAAA;AACrBK,WAAK,CAAA,IAAKV,KAAKT,IAAI,GAAGS,KAAKW,IAAI,KAAKD,KAAK,CAAA,CAAE,CAAA;AAC3CA,WAAK,CAAA,IAAKV,KAAKT,IAAI,GAAGS,KAAKW,IAAI,KAAKD,KAAK,CAAA,CAAE,CAAA;AAC3CA,WAAK,CAAA,IAAKV,KAAKT,IAAI,GAAGS,KAAKW,IAAI,KAAKD,KAAK,CAAA,CAAE,CAAA;AAC3C,aAAOI,SAASJ,KAAK,CAAA,GAAIA,KAAK,CAAA,IAAK,KAAKA,KAAK,CAAA,IAAK,GAAA;IACpD;IACA,KAAK,OAAO;AACV,YAAMA,OAAiC;QAAC3B,IAAIE;QAAGF,IAAIG,IAAI;QAAKH,IAAII,IAAI;;AACpEuB,WAAKN,KAAAA,IAASQ,OAAOP,KAAAA;AACrBK,WAAK,CAAA,IAAKV,KAAKT,IAAI,GAAGS,KAAKW,IAAI,KAAKD,KAAK,CAAA,CAAE,CAAA;AAC3CA,WAAK,CAAA,IAAKV,KAAKT,IAAI,GAAGS,KAAKW,IAAI,KAAKD,KAAK,CAAA,CAAE,CAAA;AAC3CA,WAAK,CAAA,IAAKV,KAAKT,IAAI,GAAGS,KAAKW,IAAI,KAAKD,KAAK,CAAA,CAAE,CAAA;AAC3C,aAAO;QAAEzB,GAAGyB,KAAK,CAAA;QAAIxB,GAAGwB,KAAK,CAAA,IAAK;QAAKvB,GAAGuB,KAAK,CAAA,IAAK;MAAI;IAC1D;EACF;AAEA,SAAOJ;AACT;AAEO,IAAMS,gBAA+B;EAAC;EAAO;EAAO;EAAO;;;;AC7QlE,SAASC,eAAe;AACxB,SAASC,gBAAgB;AACzB,SAASC,iBAAiB;AAC1B,SAASC,cAAc;AACvB,SAASC,gBAAgB;AACzB,SAASC,kBAAkB;AAC3B,SAASC,YAAY;AAuBd,SAASC,YAAYC,OAAyD;AACnF,QAAMC,iBAAiBC,OAAOC,QAAQH,KAAAA,EAAOI,OAA+B,CAACC,KAAK,CAACC,UAAUC,KAAAA,MAAM;AACjG,QAAIA,UAAU,QAAQA,UAAUC,UAAaD,UAAU,IAAI;AACzD,aAAOF;IACT;AAEAA,QAAIC,QAAAA,IAAY,OAAOC,UAAU,WAAW,GAAGA,KAAAA,KAAUA;AACzD,WAAOF;EACT,GAAG,CAAC,CAAA;AAEJ,SAAOI,SAASR,cAAAA;AAClB;;;AC1CA,SAASS,QAAAA,aAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0BmBC;;SAtBvCC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;EAYRC,WAAAA;AACE,WAAOC;;;;;EAKT;AACF,CAAA;AACO,IAAMC,qBAAN,eAAiCN,gBAAAA,aAAAA;;;;OAAAA,aAAAA;;;;;AAExC;;;AC5BA,SAASO,QAAAA,aAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8BWC;;SA1B/BC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;;;;;EAgBRC,WAAAA;AACE,WAAOC;;;;;EAKT;AACF,CAAA;AACO,IAAMC,aAAN,eAAyBN,gBAAAA,aAAAA;;;;OAAAA,aAAAA;;;;;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IJ0TiCO;IAAAA;IAAAA;IAAAA;IAAAA;IAaQC;IACPC;IACwBC;IAW/CC;IAAAA;;SA7VVC,UAAU;EACTC,KAAK;EACLC,UAAU;EACVC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmORC,WAAAA;AACE,UAAM,EAAEC,GAAGC,GAAGC,EAAC,IAAK,KAAKC;AACzB,UAAMC,UAAUC,SAASL,GAAG,GAAG,CAAA;AAC/B,UAAMM,aAAaD,SAASL,GAAGC,GAAGC,CAAAA;AAClC,UAAMK,eAAe,OAAOH,QAAQI,CAAC,KAAKJ,QAAQK,CAAC,KAAKL,QAAQM,CAAC;AACjE,UAAMC,aAAaX,IAAI;AACvB,UAAMY,YAAY,IAAIV;AAEtB,UAAMW,yBAAyB;MAC7BC,MAAM,QAAQb,IAAI,GAAA,OAAUA,IAAI,EAAA;MAChCc,KAAK,QAAQH,YAAY,GAAA,OAAUA,YAAY,EAAA;IACjD;AACA,UAAMI,kBAAkB;MACtBF,MAAM,QAAQH,aAAa,GAAA,OAAUA,aAAa,EAAA;IACpD;AACA,UAAMM,UAAUC,aAAaZ,WAAWE,GAAGF,WAAWG,GAAGH,WAAWI,CAAC;AACrE,UAAMS,gBAAgB,gBAAgBC;AACtC,UAAMC,gBAAgB;MACpBC,iBAAiB,KAAK5B;MACtB,gBAAgBuB,UAAU,0BAA0B;IACtD;AACA,UAAMM,aAAaC,mBAAmB,KAAKrB,KAAK,KAAKsB,MAAM;AAE3D,WAAOC;;;gBAGKC,SAAS;MAAEL,iBAAiBf;IAAa,CAAA,CAAA;uBAClC,KAAKqB,2BAA2B;uBAChC,KAAKC,2BAA2B;qBAClC,KAAKC,yBAAyB;yBAC1B,KAAKA,yBAAyB;;8CAETH,SAASd,sBAAAA,CAAAA;;;;;yBAK9B,KAAKkB,oBAAoB;yBACzB,KAAKC,oBAAoB;uBAC3B,KAAKC,kBAAkB;2BACnB,KAAKA,kBAAkB;;yCAETN,SAASX,eAAAA,CAAAA;;;;;kBAKhCW,SAASN,aAAAA,CAAAA;6BACEF,aAAAA;mBACVA,gBAAgB,KAAKe,wBAAwB,IAAA;;YAEpDf,gBAAgBO,gDAA8C,IAAA;;;;4CAI9B,KAAKS,iBAAiB;qDACb,KAAKC,eAAe,IAAI,KAAKX,OAAOY,YAAW,CAAA;;;;YAKxF,KAAKZ,WAAW,QACZC;;;;;yBAKSH,WAAWe,OAAO,CAAA,CAAE;yBACpB,CAACC,MAAa,KAAKC,sBAAsB,GAAID,EAAEE,OAA4B/C,KAAK,CAAA;;gBAGzF6B,WAAWmB,OAAOC,IAChB,CAACC,GAAGC,MAAMnB;;;;;wBAKJH,WAAWuB,IAAID,CAAAA,CAAE;2BACdE,OAAOxB,WAAWe,OAAOO,CAAAA,CAAE,CAAA;2BAC3B,CAACN,MAAa,KAAKC,sBAAsBK,GAAGG,OAAQT,EAAEE,OAA4B/C,KAAK,CAAA,CAAA;;aAErG,CAAA;;;;uDAM0C,KAAKuD,uBAAuB;iDAClC,KAAKC,sBAAsB;;;EAG1E;AACF,CAAA,GAAAC,UAcGC,MAAM,qBAAA,GAAAC,SACND,MAAM,cAAA,GAAAE,SACNF,MAAwB,oBAAA,GAAAG,SAExBC,KAAK;EACJC,SAAS;EACTC,cAAc;EACdC,SAA4BjE,OAAoB;AAC9C,QAAI,CAAC,KAAKkE,kBAAkB;AAC1B,WAAKC,cAAcnE,SAAS,SAAA;IAC9B;EACF;AACF,CAAA;AAzBK,IAAMoE,cAAN,eAA0BxE,gBAAAA,aAAAA;;WAaQC,sBACPC,eACwBC,gBAW/CC,cAAAA,WAAAA,GAAAA,GAAAA,CAAAA,cAAAA,WAAAA,EAAAA,IAAAA,oBAAAA,MAAAA;;;;QAb8BH;;;;;QACPC;;;;;QACwBC;;;;;QAW/CC;;;;OA1BsBJ,aAAAA;;EAO/B;EACA;EACA;EACA;EAGuCC;MAAAA,iBAAAA;gBAAAA;;MAAAA,eAAAA,IAAAA;SAAAA,+BAAc;;EACrBC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,wBAAO;;EACiBC;MAAAA,WAAAA;gBAAAA;;MAAAA,SAAAA,IAAAA;SAAAA,yBAAQ;;EAWvDC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAEdqE,oBAA0B;AACxB,SAAKC,gBAAgB,KAAKtE;AAC1B,SAAKmE,cAAc,KAAKnE,KAAK;EAC/B;EAEQmE,cAAcI,KAAmB;AACvC,QAAI,CAACC,WAAWD,GAAAA,GAAM;AACpB;IACF;AAEA,UAAM9D,MAAMgE,SAASF,GAAAA;AAErB,QAAI9D,KAAK;AACP,WAAKA,MAAMA;IACb;EACF;EAEA,aAAaiE,OAAmB;AAC9B,UAAMC,WAAWC,SAAS,KAAKnE,IAAIH,GAAG,KAAKG,IAAIF,GAAG,KAAKE,IAAID,CAAC;AAE5D,QAAI,KAAKR,UAAU2E,UAAU;AAC3B,WAAKT,mBAAmB;AACxB,WAAKlE,QAAQ2E;AACb,WAAKT,mBAAmB;AAExB,UAAI,KAAKnE,YAAY8E,SAASC,kBAAkB,KAAK/E,UAAU;AAC7D,aAAKA,SAASC,QAAQ2E;MACxB;AAEA,UAAID,OAAO;AACTK,6BAAqB,MAAM,SAAS;UAAE/E,OAAO,KAAKA;UAAO0E;QAAM,CAAA;MACjE;IACF;EACF;EA4CQM,sBAAsBN,OAA2B;AACvD,QAAI,CAAC,KAAK7E,gBAAgB;AACxB;IACF;AACA,UAAMoF,OAAO,KAAKpF,eAAeqF,sBAAqB;AACtD,UAAMC,IAAIC,KAAKhC,IAAI,GAAGgC,KAAKC,IAAIJ,KAAKK,OAAOZ,MAAMa,UAAUN,KAAK7D,IAAI,CAAA;AACpE,UAAMoE,IAAIJ,KAAKhC,IAAI,GAAGgC,KAAKC,IAAIJ,KAAKQ,QAAQf,MAAMgB,UAAUT,KAAK5D,GAAG,CAAA;AAEpE,SAAKZ,IAAIF,IAAI4E,IAAIF,KAAKK;AACtB,SAAK7E,IAAID,IAAI,IAAIgF,IAAIP,KAAKQ;AAE1B,SAAK,aAAaf,KAAAA;AAClB,SAAKiB,cAAa;EACpB;EA4CQC,UAAUlB,OAA2B;AAC3C,QAAI,CAAC,KAAK5E,SAAS;AACjB;IACF;AACA,UAAMmF,OAAO,KAAKnF,QAAQoF,sBAAqB;AAC/C,UAAMC,IAAIC,KAAKhC,IAAI,GAAGgC,KAAKC,IAAIJ,KAAKK,OAAOZ,MAAMa,UAAUN,KAAK7D,IAAI,CAAA;AAEpE,SAAKX,IAAIH,IAAK6E,IAAIF,KAAKK,QAAS;AAEhC,SAAK,aAAaZ,KAAAA;AAClB,SAAKiB,cAAa;EACpB;;;;;AA7KK,UAAA,GAAA,IAAA,GAAA,KAGGlF,OAAAA,YAAAA,IAAAA,GAAW;MAAEH,GAAG;MAAGC,GAAG;MAAGC,GAAG;IAAE,IAAA,KAC9B8D,gBAAwB,WAAA,KACxBvC,SAAsB,OAAA,KAC9BW,kBAAyC,QAAA,KACzC,wBAAwB,OAAA,KACxB,iBAAiB,OAAA,KACjB,2BAA0C,MAAA,KAC1C,oBAAmC,MAAA,KACnCwB,mBAAmB,OAAA,KAEoBrE,+BAAAA,qBAAAA,IAAAA,GAAAA,KACPC,wBAAAA,cAAAA,IAAAA,GAAAA,KACwBC,yBAAAA,eAAAA,IAAAA,GAAAA,KAW/CC,sBAAAA,aAAAA,IAAAA,GAAAA,KAqCAkC,8BAA8B,CAACwC,UAAAA;AACtC,UAAI,CAAC,KAAK7E,gBAAgB;AACxB;MACF;AAEA,UAAI6E,MAAMmB,WAAWC,UAAapB,MAAMmB,WAAW,GAAG;AACpD;MACF;AAEAnB,YAAMqB,eAAc;AACpBrB,YAAMsB,gBAAe;AAErB,WAAK,wBAAwB;AAC7B,WAAK,2BAA2BtB,MAAMuB;AACtC,WAAKpG,eAAeqG,kBAAkBxB,MAAMuB,SAAS;AACrD,WAAKjB,sBAAsBN,KAAAA;IAC7B,GAAA,KAESvC,8BAA8B,CAACuC,UAAAA;AACtC,UAAI,CAAC,KAAK,yBAAyBA,MAAMuB,cAAc,KAAK,0BAA0B;AACpF;MACF;AAEAvB,YAAMqB,eAAc;AACpB,WAAKf,sBAAsBN,KAAAA;IAC7B,GAAA,KAEStC,4BAA4B,CAACsC,UAAAA;AACpC,UAAI,CAAC,KAAK,yBAAyBA,MAAMuB,cAAc,KAAK,0BAA0B;AACpF;MACF;AAEA,WAAK,wBAAwB;AAC7B,WAAK,2BAA2B;AAEhC,UAAI,KAAKpG,gBAAgBsG,kBAAkBzB,MAAMuB,SAAS,GAAG;AAC3D,aAAKpG,eAAeuG,sBAAsB1B,MAAMuB,SAAS;MAC3D;AAEAlB,2BAAqB,MAAM,UAAU;QAAE/E,OAAO,KAAKA;QAAO0E;MAAM,CAAA;IAClE,GAAA,KAiBSrC,uBAAuB,CAACqC,UAAAA;AAC/B,UAAI,CAAC,KAAK5E,SAAS;AACjB;MACF;AAEA,UAAI4E,MAAMmB,WAAWC,UAAapB,MAAMmB,WAAW,GAAG;AACpD;MACF;AAEAnB,YAAMqB,eAAc;AACpBrB,YAAMsB,gBAAe;AAErB,WAAK,iBAAiB;AACtB,WAAK,oBAAoBtB,MAAMuB;AAC/B,WAAKnG,QAAQoG,kBAAkBxB,MAAMuB,SAAS;AAC9C,WAAKL,UAAUlB,KAAAA;IACjB,GAAA,KAESpC,uBAAuB,CAACoC,UAAAA;AAC/B,UAAI,CAAC,KAAK,kBAAkBA,MAAMuB,cAAc,KAAK,mBAAmB;AACtE;MACF;AAEAvB,YAAMqB,eAAc;AACpB,WAAKH,UAAUlB,KAAAA;IACjB,GAAA,KAESnC,qBAAqB,CAACmC,UAAAA;AAC7B,UAAI,CAAC,KAAK,kBAAkBA,MAAMuB,cAAc,KAAK,mBAAmB;AACtE;MACF;AAEA,WAAK,iBAAiB;AACtB,WAAK,oBAAoB;AAEzB,UAAI,KAAKnG,SAASqG,kBAAkBzB,MAAMuB,SAAS,GAAG;AACpD,aAAKnG,QAAQsG,sBAAsB1B,MAAMuB,SAAS;MACpD;AAEAlB,2BAAqB,MAAM,UAAU;QAAE/E,OAAO,KAAKA;QAAO0E;MAAM,CAAA;IAClE,GAAA,KAeS2B,uBAAuB,CAAC3B,UAAAA;AAC/B,YAAM4B,QAAQ5B,MAAM3B;AACpB,YAAM4B,WAAW2B,MAAMtG;AAEvB,UAAIwE,WAAWG,QAAAA,GAAW;AACxB,aAAKR,cAAcQ,QAAAA;AACnB,aAAK,aAAaD,KAAAA;AAClB,aAAKiB,cAAa;AAClBZ,6BAAqB,MAAM,UAAU;UAAE/E,OAAO,KAAKA;UAAO0E;QAAM,CAAA;MAClE,WAAW,KAAK3E,UAAU;AACxB,aAAKA,SAASC,QAAQ,KAAKA;MAC7B;IACF,GAAA,KAES8C,wBAAwB,CAACyD,OAAevG,UAAAA;AAC/C,WAAKS,MAAM+F,wBAAwB,KAAK/F,KAAK,KAAKsB,QAAQwE,OAAOvG,KAAAA;AACjE,WAAK,aAAa,IAAA;AAClB,WAAK2F,cAAa;IACpB,GAAA,KAESc,qBAAqB,CAAC1E,WAAAA;AAC7B,WAAKA,SAASA;AACd,WAAK4D,cAAa;IACpB,GAAA,KAESlD,oBAAoB,MAAA;AAE3B,WAAKC,kBAAkB;AACvB,WAAKiD,cAAa;AAGlBe,iBAAW,MAAA;AACT,cAAMC,eAAeC,cAAcC,QAAQ,KAAK9E,MAAM;AACtD,cAAM+E,aAAaH,eAAe,KAAKC,cAAcG;AACrD,aAAKhF,SAAS6E,cAAcE,SAAAA;AAC5B,aAAKpE,kBAAkB;AACvB,aAAKiD,cAAa;AAGlBe,mBAAW,MAAA;AACT,eAAKhE,kBAAkB;AACvB,eAAKiD,cAAa;QACpB,GAAG,GAAA;MACL,GAAG,GAAA;IACL,GAAA,KAESpC,0BAA0B,CAACmB,UAAAA;AAClC,WAAKP,cAAc,KAAKG,aAAa;AACrC,WAAKJ,mBAAmB;AACxB,WAAKlE,QAAQ,KAAKsE;AAClB,WAAKJ,mBAAmB;AACxB,WAAKyB,cAAa;AAClBZ,2BAAqB,MAAM,UAAU;QAAE/E,OAAO,KAAKsE;QAAeI;MAAM,CAAA;IAC1E,GAAA,KAESlB,yBAAyB,CAACkB,UAAAA;AACjC,WAAKJ,gBAAgB,KAAKtE;AAC1B+E,2BAAqB,MAAM,SAAS;QAAE/E,OAAO,KAAKA;QAAO0E;MAAM,CAAA;IACjE,GAAA,KAESlC,wBAAwB,OAAOkC,UAAAA;AACtC,UAAI,EAAE,gBAAgBhD,SAAS;AAC7B;MACF;AAEA,UAAI;AACF,cAAMsF,aAAa,IACjBtF,OACAuF,WAAU;AACZ,cAAMC,SAAS,MAAMF,WAAWG,KAAI;AAEpC,YAAID,OAAOE,SAAS;AAClB,eAAKjD,cAAc+C,OAAOE,OAAO;AACjC,eAAK,aAAa1C,KAAAA;AAClB,eAAKiB,cAAa;AAClBZ,+BAAqB,MAAM,UAAU;YAAE/E,OAAO,KAAKA;YAAO0E;UAAM,CAAA;QAClE;MACF,QAAQ;MAER;IACF;;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IRlhBgC2C;IAAAA;IAAAA;IAAAA;IAAAA;IAKGC;IAgBxBC;IAGAC;IAGAC;IAAAA;;SAlFVC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDV,CAAA,GAAAC,UAMGC,MAAM,eAAA,GAAAC,SAENC,KAAyB;EACxBC,SAAS;EACTC,cAAc;EACdC,SAASC,MAAI;AACX,QAAIA,QAAQC,WAAWD,IAAAA,GAAO;AAC5B,YAAME,aAAaF,KAAKG,YAAW;AACnC,UAAI,KAAKhB,UAAUe,YAAY;AAC7B,aAAKf,QAAQe;MACf;IACF,WAAW,CAACF,MAAM;AAChB,WAAKb,QAAQ;IACf;EACF;AACF,CAAA,GAAAiB,SAGCR,KAAc;EAAES,MAAMC;EAAST,SAAS;AAAK,CAAA,GAAAU,SAG7CX,KAAgB;EAAEC,SAAS;EAAMC,cAAc;AAAe,CAAA;AA1B1D,IAAMU,aAAN,eAAyBvB,iBAAAA,aAAAA;;WAKGC,gBAgBxBC,cAGAC,iBAGAC,kBAAAA,WAAAA,GAAAA,GAAAA,CAAAA,aAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QAtBwBH;;;;;QAgBxBC;;;;;QAGAC;;;;;QAGAC;;;;OA3BqBJ,cAAAA;;EAG9B;EAEiCC;MAAAA,WAAAA;gBAAAA;;MAAAA,SAAAA,IAAAA;SAAAA,yBAAQ;;EAgBhCC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAGLC;MAAAA,WAAAA;gBAAAA;;MAAAA,SAAAA,IAAAA;SAAAA,yBAAQ;;EAGRC;MAAAA,YAAAA;gBAAAA;;MAAAA,UAAAA,IAAAA;SAAAA,0BAAS;;EAElBoB,oBAA0B;AACxB,SAAK,oBAAoB,KAAKC,cAAc,kBAAA,MAAwB;AACpEC,wBAAoB,MAAM,kBAAkB,KAAK,iBAAiB;EACpE;EAEAC,cAAoB;AAClBD,wBAAoB,MAAM,YAAYL,QAAQ,KAAKlB,QAAQ,CAAA;EAC7D;EAEA,wBAAqB;AACnB,UAAMyB,cAAc;MAClBC,iBAAiB,KAAK3B;IACxB;AAEA,WAAO4B;;sDAE2C,KAAK5B,KAAK,YAAY,KAAK,kBAAkB;qCAC9D6B,SAASH,WAAAA,CAAAA;;;;EAI5C;EAEAI,SAAyB;AACvB,WAAOF;iCACsB,KAAK3B,QAAQ,eAAe,KAAKC,SAAS;UACjE,KAAK,oBAAoB0B,sDAAoD,KAAK,sBAAqB,CAAA;;;mBAG9F,KAAK5B,KAAK;mBACV,KAAK,kBAAkB;oBACtB,KAAK,mBAAmB;oBACxB,KAAK,mBAAmB;mBACzB,KAAK,kBAAkB;;;;EAIxC;EAEA;EAKA;EAKA;EAKA;EAQA;;;;;AA3FK,UAAA,GAAA,IAAA,GAAA,KAGL,qBAAiB+B,YAAA,IAAA,GAAG,QAAA,KAEahC,yBAAAA,eAAAA,IAAAA,GAAAA,KAgBxBC,sBAAAA,aAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,MAAW,KAAA,GAAA,KAGXC,0BAAAA,iBAAAA,MAAuB,cAAA,GAAA,KAyChC,qBAAqB,CAAC8B,UAAAA;AACpB,WAAKhC,QAASgC,MAAMC,OAA4BjC;AAChDkC,2BAAqB,MAAM,SAAS;QAAElC,OAAO,KAAKA;QAAOgC;MAAM,CAAA;IACjE,GAAA,KAEA,qBAAqB,CAACA,UAAAA;AACpB,WAAKhC,QAAQgC,MAAMG,OAAOnC;AAC1BkC,2BAAqB,MAAM,SAAS;QAAElC,OAAO,KAAKA;QAAOgC;MAAM,CAAA;IACjE,GAAA,KAEA,sBAAsB,CAACA,UAAAA;AACrB,WAAKhC,QAAQgC,MAAMG,OAAOnC;AAC1BkC,2BAAqB,MAAM,UAAU;QAAElC,OAAO,KAAKA;QAAOgC;MAAM,CAAA;IAClE,GAAA,KAEA,sBAAsB,CAACA,UAAAA;AACrB,WAAKhC,QAAQgC,MAAMG,OAAOnC;AAC1B,WAAKoC,cAAa;AAClB,UAAI,KAAKrC,UAAU;AACjB,aAAKA,SAASsC,OAAO;MACvB;IACF,GAAA,KAEA,qBAAqB,CAACL,UAAAA;AACpB,WAAKhC,QAAQgC,MAAMG,OAAOnC;AAC1BkC,2BAAqB,MAAM,UAAU;QAAElC,OAAO,KAAKA;QAAOgC;MAAM,CAAA;AAChE,UAAI,KAAKjC,UAAU;AACjB,aAAKA,SAASsC,OAAO;MACvB;IACF;;AACF;;;Aa1KA,SAASC,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0EMC;IAAAA;IAAAA;IAEhBC;IAGAC;IAAAA;;SA1EVC,UAAU;EACTC,KAAK;EACLC,UAAU;EACVC,YAAY;EACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmDRC,WAAAA;AACE,WAAOC;;;cAGG,KAAKR,SAAS,EAAA;;;oCAGQ,KAAKC,YAAY,eAAe,EAAA;;;;;EAKlE;AACF,CAAA,GAAAQ,UAEGC,KAAoB;EAAEC,SAAS;AAAK,CAAA,GAAAC,UAGpCF,KAAc;EAAEG,MAAMC;EAASH,SAAS;AAAK,CAAA;AAJzC,IAAMI,QAAN,eAAoBhB,iBAAAA,aAAAA;;WAEhBC,aAGAC,kBAAAA,WAAAA,GAAAA,GAAAA,CAAAA,QAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QAHAD;;;;;QAGAC;;;;OALgBF,cAAAA;;EAEhBC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAGLC;MAAAA,YAAAA;gBAAAA;;MAAAA,UAAAA,IAAAA;SAAAA,0BAAS;;;;;;AALb,UAAA,GAAA,IAAA,GAAA,KAEID,uBAAKgB,YAAA,IAAA,GAALhB,YAAAA,IAAAA,IAAAA,KAGAC,0BAAAA,iBAAAA,MAAY,KAAA;;AACvB;;;AChFA,SAASgB,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsEUC;;SAlE9BC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkDRC,WAAAA;AACE,WAAOC;;;;;;;;;;;EAWT;AACF,CAAA;AACO,IAAMC,YAAN,eAAwBN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAE/B;;;ACxEA,SAASO,QAAAA,cAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmDZC;IAAAA;IAQnBC;IAAAA;;SApDVC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwCRC,oBAAoB;IAAC;;AACvB,CAAA,GAAAC,UAIGC,KAAgB;EACfC,SAAS;EACTC,WAAW;EACXC,cAAc;AAChB,CAAA;AAPK,IAAMC,WAAN,eAAuBX,iBAAAA,aAAAA;;WAQnBC,cAAAA,YAAAA,GAAAA,GAAAA,CAAAA,WAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QAAAA;;;;OARmBD,cAAAA;;EAQnBC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAEdW,SAAyB;AACvB,WAAOC;mDACwC,KAAKZ,KAAK;;wBAErC,KAAKA,KAAK;;;;;;;wBAOV,KAAKA,KAAK;;;;;;EAMhC;;;;;AA3BK,UAAA,GAAA,IAAA,GAAA,KAQIA,uBAAKa,aAAA,IAAA,GAALb,aAAAA,IAAAA;;AAoBX;;;AC/EA,SAASc,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgEQC;;SA5D5BC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiDRC,WAAAA;AACE,WAAOC;;;;;;EAMT;AACF,CAAA;AACO,IAAMC,UAAN,eAAsBN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAE7B;;;AClEA,SAASO,QAAAA,cAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6FhBC;IAAAA;IAQfC;IAAAA;;SA9FVC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkFRC,oBAAoB;IAAC;;AACvB,CAAA,GAAAC,UAIGC,KAAgB;EACfC,SAAS;EACTC,WAAW;EACXC,cAAc;AAChB,CAAA;AAPK,IAAMC,OAAN,eAAmBX,iBAAAA,aAAAA;;WAQfC,cAAAA,YAAAA,GAAAA,GAAAA,CAAAA,OAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QAAAA;;;;OAReD,cAAAA;;EAQfC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAEdW,SAAyB;AACvB,UAAMC,cACJ;AAEF,UAAMC,eACJ;AAEF,UAAMC,aACJ;AAEF,UAAMC,cACJ;AAEF,UAAMC,QAAQ,KAAKhB,UAAU,WAAWc,aAAaF;AACrD,UAAMK,QAAQ,KAAKjB,UAAU,WAAWe,cAAcF;AAEtD,WAAOK;mDACwC,KAAKlB,KAAK;;oBAEzCgB,KAAAA;oBACAC,KAAAA;;;;;;;;;;;;;;;;;;;;EAoBlB;;;;;AAlDK,UAAA,GAAA,IAAA,GAAA,KAQIjB,uBAAKmB,aAAA,IAAA,GAALnB,aAAAA,IAAAA;;AA2CX;;;AChJA,SAASoB,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+BcC;;SA3BlCC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;EAYRC,WAAAA;AACE,WAAOC;;;;;;;;;;EAUT;AACF,CAAA;AACO,IAAMC,gBAAN,eAA4BN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAEnC;;;ACjCA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8BiBC;;SA1BrCC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;EAYRC,WAAAA;AACE,WAAOC;;;;;;;;;EAST;AACF,CAAA;AACO,IAAMC,mBAAN,eAA+BN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAEtC;;;AChCA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0BQC;;SAtB5BC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;EAYRC,WAAAA;AACE,WAAOC;;;;;EAKT;AACF,CAAA;AACO,IAAMC,UAAN,eAAsBN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAE7B;;;AC5BA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsBWC;;SAlB/BC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;EAQRC,WAAAA;AACE,WAAOC;;;;;EAKT;AACF,CAAA;AACO,IAAMC,aAAN,eAAyBN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAEhC;;;ACxBA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6BgBC;;SAzBpCC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;EAQRC,WAAAA;AACE,WAAOC;;;;;;;;;;;;EAYT;AACF,CAAA;AACO,IAAMC,kBAAN,eAA8BN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAErC;;;AC/BA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8BqBC;;SA1BzCC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;EAQRC,WAAAA;AACE,WAAOC;;;;;;;;;;;;;EAaT;AACF,CAAA;AACO,IAAMC,uBAAN,eAAmCN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAE1C;;;AChCA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BiBC;;SAvBrCC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;EAQRC,WAAAA;AACE,WAAOC;;;;;;;;;;EAUT;AACF,CAAA;AACO,IAAMC,mBAAN,eAA+BN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAEtC;;;AC7BA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BiBC;;SAvBrCC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;EAQRC,WAAAA;AACE,WAAOC;;;;;;;;;;EAUT;AACF,CAAA;AACO,IAAMC,mBAAN,eAA+BN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAEtC;;;AC7BA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0BUC;;SAtB9BC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;EAYRC,WAAAA;AACE,WAAOC;;;;;EAKT;AACF,CAAA;AACO,IAAMC,YAAN,eAAwBN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAE/B;;;AC5BA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0BoBC;;SAtBxCC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;EAYRC,WAAAA;AACE,WAAOC;;;;;EAKT;AACF,CAAA;AACO,IAAMC,sBAAN,eAAkCN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAEzC;;;AC5BA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0BqBC;;SAtBzCC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;EAYRC,WAAAA;AACE,WAAOC;;;;;EAKT;AACF,CAAA;AACO,IAAMC,uBAAN,eAAmCN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAE1C;;;AC5BA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0BSC;;SAtB7BC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;EAYRC,WAAAA;AACE,WAAOC;;;;;EAKT;AACF,CAAA;AACO,IAAMC,WAAN,eAAuBN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAE9B;;;AC5BA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4BSC;;SAxB7BC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;EAYRC,WAAAA;AACE,WAAOC;;;;;;;EAOT;AACF,CAAA;AACO,IAAMC,WAAN,eAAuBN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAE9B;;;AC9BA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0BYC;;SAtBhCC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;EAYRC,WAAAA;AACE,WAAOC;;;;;EAKT;AACF,CAAA;AACO,IAAMC,cAAN,eAA0BN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAEjC;;;AC5BA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0BUC;;SAtB9BC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;EAYRC,WAAAA;AACE,WAAOC;;;;;EAKT;AACF,CAAA;AACO,IAAMC,YAAN,eAAwBN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAE/B;;;AC5BA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0BSC;;SAtB7BC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;EAYRC,WAAAA;AACE,WAAOC;;;;;EAKT;AACF,CAAA;AACO,IAAMC,WAAN,eAAuBN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAE9B;;;AC5BA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0BSC;;SAtB7BC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;EAYRC,WAAAA;AACE,WAAOC;;;;;EAKT;AACF,CAAA;AACO,IAAMC,WAAN,eAAuBN,iBAAAA,aAAAA;;;;OAAAA,cAAAA;;;;;AAE9B;;;AC5BA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuSWC;IAAAA;IAAAA;IAAAA;IAAAA;IAWrBC;IAOAC;IAOAC;IAOAC;IAAAA;AAxTX,IAAMC,SAAS;EAAEC,GAAG;EAAIC,GAAG;AAAG;AAE9B,IAAMC,YAAuB;EAC3B;IAAEC,IAAI;IAASC,IAAI;IAASC,IAAI;EAAS;EACzC;IAAEF,IAAI;IAASC,IAAI;IAAKC,IAAI;EAAU;EACtC;IAAEF,IAAI;IAASC,IAAI;IAAUC,IAAI;EAAQ;EACzC;IAAEF,IAAI;IAASC,IAAI;IAAUC,IAAI;EAAS;EAC1C;IAAEF,IAAI;IAASC,IAAI;IAAUC,IAAI;EAAU;EAC3C;IAAEF,IAAI;IAASC,IAAI;IAAUC,IAAI;EAAU;EAC3C;IAAEF,IAAI;IAASC,IAAI;IAAUC,IAAI;EAAQ;EACzC;IAAEF,IAAI;IAASC,IAAI;IAAUC,IAAI;EAAU;EAC3C;IAAEF,IAAI;IAASC,IAAI;IAAWC,IAAI;EAAQ;EAC1C;IAAEF,IAAI;IAAUC,IAAI;IAAWC,IAAI;EAAS;EAC5C;IAAEF,IAAI;IAAUC,IAAI;IAAWC,IAAI;EAAU;EAC7C;IAAEF,IAAI;IAAUC,IAAI;IAAWC,IAAI;EAAS;EAC5C;IAAEF,IAAI;IAAUC,IAAI;IAAWC,IAAI;EAAS;EAC5C;IAAEF,IAAI;IAAUC,IAAI;IAAWC,IAAI;EAAU;EAC7C;IAAEF,IAAI;IAAUC,IAAI;IAAUC,IAAI;EAAS;EAC3C;IAAEF,IAAI;IAAUC,IAAI;IAAUC,IAAI;EAAS;EAC3C;IAAEF,IAAI;IAAUC,IAAI;IAAUC,IAAI;EAAS;EAC3C;IAAEF,IAAI;IAAUC,IAAI;IAAUC,IAAI;EAAU;EAC5C;IAAEF,IAAI;IAAUC,IAAI;IAAWC,IAAI;EAAS;EAC5C;IAAEF,IAAI;IAAUC,IAAI;IAAWC,IAAI;EAAU;EAC7C;IAAEF,IAAI;IAAUC,IAAI;IAAQC,IAAI;EAAK;EACrC;IAAEF,IAAI;IAAUC,IAAI;IAAQC,IAAI;EAAO;EACvC;IAAEF,IAAI;IAAUC,IAAI;IAASC,IAAI;EAAO;EACxC;IAAEF,IAAI;IAAUC,IAAI;IAASC,IAAI;EAAK;EACtC;IAAEF,IAAI;IAAUC,IAAI;IAASC,IAAI;EAAO;;AAG1C,IAAMC,gBAAgB;EAAC;EAAU;EAAU;EAAU;EAAU;EAAU;;AAEzE,IAAMC,gBAAgBL,UAAUM,IAAI,CAACC,MAAMA,EAAEN,EAAE,EAAEO,OAAO,CAACP,OAAO,CAACG,cAAcK,SAASR,EAAAA,CAAAA;AAExF,IAAMS,cAAc,CAACC,OAAAA;AACnB,OAAKC,OAAOC,iBAAiBF,EAAAA,EAAIG;AACnC;AAEA,IAAMC,WAAW,CAACC,QAAyBC,KAAKC,MAAMF,IAAIb,KAAKN,OAAOE,GAAGiB,IAAId,KAAKL,OAAOC,CAAC;AAE1F,IAAMqB,cAAc,CAACC,QACnBA,IACGd,IAAI,CAACL,OAAOD,UAAUqB,KAAK,CAACd,MAAMA,EAAEN,OAAOA,EAAAA,CAAAA,EAC3CO,OAAO,CAACQ,QAAwBA,OAAO,IAAA,EACvCM,KAAK,CAACC,GAAGC,MAAMT,SAASQ,CAAAA,IAAKR,SAASS,CAAAA,CAAAA;AAE3C,IAAMC,gBAAgB;AACtB,IAAMC,oBAAoB;;SAEzBC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6KRC,SAASC,MAAgB;AACvB,UAAMpC,OAAOoC,KAAKpC,QAAQ;AAC1B,UAAMqC,QAAQD,KAAKC;AACnB,UAAMpC,YAAYmC,KAAKnC;AACvB,UAAMqC,mBAAmBrC,WAAWsC,KAAAA,KAAU;AAE9C,WAAOC;;;qBAGUH,KAAAA;gBACL,sBAAsBrC,IAAAA,KAAS;;;;;;;iBAO9BsC,mBAAmB,QAAQ,IAAA;uBACrBA,oBAAoB,IAAA;wBACnBA,mBAAmB,OAAO,MAAA;sBAC5BA,mBAAmB,OAAO,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkC9C;AACF,CAAA,GAAAG,UAIGC,KAA0B;EACzBC,MAAMC;EACNC,WAAW;EACXC,cAAc;EACdC,SAASC,MAAI;AACV,SAAoBC,oBAAoBD,IAAAA;EAC3C;AACF,CAAA,GAAAE,UAGCR,KAAmC;EAClCC,MAAM;EACNE,WAAW;EACXC,cAAc;AAChB,CAAA,GAAAK,UAGCT,KAAgC;EAC/BC,MAAMS;EACNP,WAAW;EACXC,cAAc;AAChB,CAAA,GAAAO,UAGCX,KAAgC;EAC/BC,MAAM;EACNE,WAAW;EACXC,cAAc;AAChB,CAAA;AA/BK,IAAMQ,aAAN,eAAyBzD,iBAAAA,aAAAA;;WAWrBC,eAOAC,aAOAC,YAOAC,iBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,aAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QArBAH;;;;;QAOAC;;;;;QAOAC;;;;;QAOAC;;;;OAhCqBJ,cAAAA;;EAWrBC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,wBAAO;;EAOPC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAOLC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAOJC;MAAAA,YAAAA;gBAAAA;;MAAAA,UAAAA,IAAAA;SAAAA,0BAAS;;EAElB;EACA;EACA;EACA;EAEA,IAAIoC,QAAyB;AAC3B,WAAO,KAAK;EACd;EAEA,IAAIA,MAAMkB,OAAwB;AAChC,QAAI,KAAK,WAAWA,OAAO;AACzB;IACF;AACA,SAAK,SAASA;AACd,QAAI,OAAO,KAAKC,kBAAkB,YAAY;AAC5C,WAAKA,cAAa;IACpB;EACF;EAEAC,oBAA0B;AAGxBC,0BAAsB,MAAA;AAEpBA,4BAAsB,MAAA;AACpB,YAAI,KAAK5D,SAAS;AAChB,eAAK,UAAU,MAAA;AACb,iBAAK,kBAAkB;AACvB,iBAAK,oBAAmB;UAC1B,CAAA;QACF,OAAO;AACL,eAAK,UAAU,MAAA;AACb,iBAAK,kBAAkB;AACvB,iBAAKuC,QAAQ;UACf,CAAA;QACF;MACF,CAAA;IACF,CAAA;EACF;EAEAsB,uBAA6B;AAC3B,SAAK,aAAY;EACnB;EAEA,eAAY;AACV,eAAWrD,MAAM,KAAK,kBAAkB;AACtCW,aAAO2C,aAAatD,EAAAA;IACtB;AACA,SAAK,mBAAmB,CAAA;EAC1B;EAEA,YAAYuD,IAAgBC,OAAa;AACvC,UAAMxD,KAAKW,OAAO8C,WAAWF,IAAIC,KAAAA;AACjC,SAAK,iBAAiBE,KAAK1D,EAAAA;AAC3B,WAAOA;EACT;EAEA,QAAQA,IAAU;AAChB,UAAM2D,MAAM,KAAKC,YAAYC,cAAc,mBAAA;AAC3C,WAAOF,KAAKE,cAAc,IAAI7D,EAAAA,EAAI;EACpC;EAEA,yBAAsB;AACpB,WAAO,KAAK4D,YAAYC,cAAc,sBAAA;EACxC;EAEA,gBAAgBC,UAAU,OAAOC,cAAc,OAAK;AAClD,UAAMC,YAAY,KAAK,uBAAsB;AAC7C,QAAIA,WAAW;AACbA,gBAAUC,YAAY;IACxB;AAEA,eAAWlD,OAAOhB,WAAW;AAC3B,YAAMW,KAAK,KAAK,QAAQK,IAAIf,EAAE;AAC9B,UAAI,CAACU,IAAI;AACP;MACF;AAEA,UAAIoD,SAAS;AACXpD,WAAGwD,MAAMC,aAAa;MACxB,OAAO;AACLzD,WAAGwD,MAAMC,aAAa;MACxB;AAGAzD,SAAG0D,UAAUC,OAAO,eAAe,qBAAqB,aAAa,kBAAkB,iBAAA;AAEvF3D,SAAGwD,MAAMI,eAAe,cAAA;AACxB5D,SAAGwD,MAAMI,eAAe,SAAA;AACxB5D,SAAGwD,MAAMI,eAAe,eAAA;AACxB5D,SAAGwD,MAAMI,eAAe,kBAAA;AAGxB5D,SAAGwD,MAAMK,YAAY;AAErB,UAAI,CAACR,aAAa;AAChBrD,WAAGwD,MAAMrD,UAAUiD,UAAU,MAAM;MACrC;AACApD,SAAGwD,MAAMI,eAAe,MAAA;AACxB5D,SAAGwD,MAAMI,eAAe,QAAA;AAExB,UAAIR,SAAS;AACXrD,oBAAYC,EAAAA;AACZA,WAAGwD,MAAMI,eAAe,YAAA;MAC1B;IACF;EACF;;EAGA,oBAAiB;AACf,eAAWvD,OAAOhB,WAAW;AAC3B,YAAMW,KAAK,KAAK,QAAQK,IAAIf,EAAE;AAC9B,UAAIU,OAAOA,GAAGwD,MAAMrD,YAAY,OAAOH,GAAGwD,MAAMrD,YAAY,KAAK;AAC/DH,WAAGwD,MAAMC,aAAa;AACtBzD,WAAGwD,MAAMrD,UAAU;MACrB;IACF;EACF;;EAGA,cAAc2D,YAAuB;AACnC,SAAKzC,QAAQ;AAGb,eAAWhB,OAAOhB,WAAW;AAC3B,YAAMW,KAAK,KAAK,QAAQK,IAAIf,EAAE;AAC9B,UAAI,CAACU,IAAI;AACP;MACF;AACAA,SAAGwD,MAAMC,aAAa;AACtBzD,SAAGwD,MAAMrD,UAAU;AACnBH,SAAGwD,MAAMK,YAAY;AACrB9D,kBAAYC,EAAAA;IACd;AAEA,UAAM+D,cAAc,IAAIC,IAAIvE,aAAAA;AAC5B,UAAMwE,YAAY5E,UAAUQ,OAAO,CAACD,MAAMmE,YAAYG,IAAItE,EAAEN,EAAE,CAAA;AAC9D,UAAM6E,YAAY9E,UAAUQ,OAAO,CAACD,MAAM,CAACmE,YAAYG,IAAItE,EAAEN,EAAE,CAAA;AAG/D,UAAM8E,eAAe5D,YAAYyD,UAAUtE,IAAI,CAACC,MAAMA,EAAEN,EAAE,CAAA;AAC1D8E,iBAAaC,QAAQ,CAAChE,KAAKiE,UAAAA;AACzB,YAAMtE,KAAK,KAAK,QAAQK,IAAIf,EAAE;AAC9B,UAAI,CAACU,IAAI;AACP;MACF;AAEAA,SAAGwD,MAAMe,OAAO;AAChBxE,kBAAYC,EAAAA;AACZA,SAAGwD,MAAMI,eAAe,YAAA;AAExB,YAAMd,QAAQwB,QAAQ;AACtB,WAAK,YAAY,MAAA;AACftE,WAAGwD,MAAMC,aAAa;AACtBzD,WAAGwD,MAAMrD,UAAU;AACnBH,WAAGwD,MAAMK,YAAY;MACvB,GAAGf,KAAAA;IACL,CAAA;AAGA,SAAK,YAAY,MAAA;AAEfsB,mBAAaC,QAAQ,CAAChE,KAAKiE,UAAAA;AACzB,cAAMtE,KAAK,KAAK,QAAQK,IAAIf,EAAE;AAC9B,YAAI,CAACU,IAAI;AACP;QACF;AAEA,cAAM8C,QAAQwB,QAAQ;AACtB,aAAK,YAAY,MAAA;AACftE,aAAGwD,MAAMC,aAAa;AACtBzD,aAAGwD,MAAMK,YAAY;AACrB7D,aAAGwD,MAAMI,eAAe,MAAA;QAC1B,GAAGd,KAAAA;MACL,CAAA;AAGA,YAAM0B,eAAehE,YAAY2D,UAAUxE,IAAI,CAACC,MAAMA,EAAEN,EAAE,CAAA;AAC1DkF,mBAAaH,QAAQ,CAAChE,KAAKiE,UAAAA;AACzB,cAAMtE,KAAK,KAAK,QAAQK,IAAIf,EAAE;AAC9B,YAAI,CAACU,IAAI;AACP;QACF;AAEAA,WAAGwD,MAAMI,eAAe,YAAA;AACxB,cAAMd,QAAQ,MAAMwB,QAAQ;AAC5B,aAAK,YAAY,MAAA;AACftE,aAAGwD,MAAMC,aAAa;AACtBzD,aAAGwD,MAAMrD,UAAU;AACnBH,aAAGwD,MAAMK,YAAY;QACvB,GAAGf,KAAAA;MACL,CAAA;IACF,GAAG,GAAA;AAGH,SAAK,YAAY,MAAA;AACfgB,mBAAAA;IACF,GAAG,IAAA;EACL;;EAGA,kBAAkBA,YAAuB;AACvC,SAAKzC,QAAQ;AAGb,eAAWhB,OAAOhB,WAAW;AAC3B,YAAMW,KAAK,KAAK,QAAQK,IAAIf,EAAE;AAC9B,UAAI,CAACU,IAAI;AACP;MACF;AACAA,SAAGwD,MAAMC,aAAa;AACtBzD,SAAGwD,MAAMrD,UAAU;AACnBH,SAAGwD,MAAMK,YAAY;AACrB9D,kBAAYC,EAAAA;IACd;AAEA,UAAM+D,cAAc,IAAIC,IAAIvE,aAAAA;AAG5B,UAAMgF,YAAYpF,UAAUM,IAAI,CAACU,KAAKiE,UAAAA;AACpC,YAAMI,aAAatE,SAASC,GAAAA;AAC5B,YAAMsE,gBAAgB,MAAMrE,KAAKsE,OAAM,IAAK;AAC5C,YAAMC,kBAAkBvE,KAAKsE,OAAM,IAAK,OAAOtE,KAAKwE,KAAK;AACzD,YAAMC,aAAaL,aAAaG;AAChC,YAAMG,SAAS1E,KAAK2E,IAAIF,UAAAA,IAAcJ;AACtC,YAAMO,SAAS5E,KAAK6E,IAAIJ,UAAAA,IAAcJ;AAEtC,YAAMS,YAAY9E,KAAKsE,OAAM,IAAK,MAAM;AACxC,YAAMS,eAAeN,cAAczE,KAAKsE,OAAM,IAAK,OAAOtE,KAAKwE,KAAKM;AACpE,YAAME,kBAAkBX,gBAAgB;AACxC,YAAMY,WAAWjF,KAAK2E,IAAII,YAAAA,IAAgBC;AAC1C,YAAME,WAAWlF,KAAK6E,IAAIE,YAAAA,IAAgBC;AAE1C,YAAMG,QAAQnF,KAAKoF,MAAMpB,QAAQ,CAAA;AACjC,YAAMqB,aAAaF,QAAQ;AAC3B,YAAMG,mBAAoBtB,QAAQ,IAAK;AACvC,YAAMxB,QAAQ6C,aAAaC,mBAAmBtF,KAAKsE,OAAM,IAAK;AAC9D,YAAMiB,WAAW,MAAMvF,KAAKsE,OAAM,IAAK;AAEvC,aAAO;QACL,GAAGvE;QACH2E;QACAE;QACAK;QACAC;QACA1C;QACA+C;QACAC,YAAYhD,QAAQ+C;QACpBE,eAAe,MAAMzF,KAAKsE,OAAM,IAAK;QACrCoB,SAASjC,YAAYG,IAAI7D,IAAIf,EAAE;MACjC;IACF,CAAA;AAEAmF,cAAU9D,KAAK,CAACC,GAAGC,MAAMD,EAAEkC,QAAQjC,EAAEiC,KAAK;AAG1C,UAAMmD,qBAAqBxB,UACxB5E,OAAO,CAACqG,MAAMA,EAAEF,OAAO,EACvBrF,KAAK,CAACC,GAAGC,MAAMD,EAAEkF,aAAajF,EAAEiF,UAAU,EAC1CK,MAAM,GAAG,CAAA;AACZ,UAAMC,eAAe,IAAIpC,IAAIiC,mBAAmBtG,IAAI,CAACuG,MAAMA,EAAE5G,EAAE,CAAA;AAG/D,eAAW+G,YAAY5B,WAAW;AAChC,YAAMzE,KAAK,KAAK,QAAQqG,SAAS/G,EAAE;AACnC,UAAI,CAACU,IAAI;AACP;MACF;AAEAA,SAAGwD,MAAMK,YAAY,aAAawC,SAASrB,MAAM,OAAOqB,SAASnB,MAAM;AAEvE,WAAK,YAAY,MAAA;AACflF,WAAGwD,MAAMrD,UAAU;AAEnB,cAAMmG,QAAQ;AACd,YAAIC,OAAO;AAEX,cAAMC,cAAc,MAAA;AAClBD;AACA,gBAAME,WAAWF,OAAOD;AACxB,gBAAMI,IAAID;AACV,gBAAME,KAAK,IAAID;AAEf,gBAAMvH,IAAIwH,KAAKA,KAAKN,SAASrB,SAAS,IAAI2B,KAAKD,IAAIL,SAASd,WAAWmB,IAAIA,IAAI;AAC/E,gBAAMtH,IAAIuH,KAAKA,KAAKN,SAASnB,SAAS,IAAIyB,KAAKD,IAAIL,SAASb,WAAWkB,IAAIA,IAAI;AAE/E,gBAAME,UAAU,KAAK,IAAIH,aAAa;AACtC,gBAAMI,QAAQ,OAAOD,UAAU;AAC/B,gBAAME,WAAWL,WAAWJ,SAASN;AAErC/F,aAAGwD,MAAMC,aAAa;AACtBzD,aAAGwD,MAAMK,YAAY,aAAa1E,CAAAA,OAAQC,CAAAA,aAAcyH,KAAAA,YAAiBC,QAAAA;AAEzE,cAAIP,OAAOD,OAAO;AAChB5D,kCAAsB8D,WAAAA;UACxB,OAAO;AAEL,kBAAMO,iBAAiB;AACvB/G,eAAGwD,MAAMC,aAAa,aAAasD,cAAAA;AACnC/G,eAAGwD,MAAMK,YAAY;AAErB,gBAAIuC,aAAalC,IAAImC,SAAS/G,EAAE,GAAG;AACjC,mBAAK,kBAAkB+G,QAAAA;YACzB;AAEA,iBAAK,YAAY,MAAA;AACfrG,iBAAG0D,UAAUsD,IAAI,iBAAA;AACjB,mBAAK,YAAY,MAAA;AACfhH,mBAAG0D,UAAUC,OAAO,iBAAA;cACtB,GAAG,GAAA;YACL,GAAGoD,cAAAA;UACL;QACF;AAEArE,8BAAsB8D,WAAAA;MACxB,GAAGH,SAASvD,KAAK;IACnB;AAGA,UAAMmE,kBAAkB3G,KAAK4G,IAAG,GAAIzC,UAAU9E,IAAI,CAACuG,MAAMA,EAAEpD,KAAK,CAAA,IAAK;AACrE,SAAK,YAAY,MAAA;AACfgB,mBAAAA;IACF,GAAGmD,eAAAA;AAGH,UAAME,UAAU7G,KAAK4G,IAAG,GAAIzC,UAAU9E,IAAI,CAACuG,MAAMA,EAAEJ,aAAa,GAAA,CAAA;AAChE,SAAK,YAAY,MAAA;AACf,WAAK,gBAAgB,OAAO,IAAA;IAC9B,GAAGqB,OAAAA;EACL;EAEA,kBAAkB9G,KAAY;AAC5B,UAAMiD,YAAY,KAAK,uBAAsB;AAC7C,QAAI,CAACA,WAAW;AACd;IACF;AAEA,UAAM8D,OAAOC,SAASC,gBAAgB,8BAA8B,QAAA;AACpEF,SAAKG,aAAa,MAAMC,OAAOnH,IAAId,EAAE,CAAA;AACrC6H,SAAKG,aAAa,MAAMC,OAAOnH,IAAIb,EAAE,CAAA;AACrC4H,SAAKG,aAAa,KAAK,OAAA;AACvBH,SAAK1D,UAAUsD,IAAI,gBAAA;AAEnB1D,cAAUmE,YAAYL,IAAAA;AAEtB,SAAK,YAAY,MAAA;AACfA,WAAKzD,OAAM;IACb,GAAG,GAAA;EACL;EAEA,UAAUG,YAAuB;AAC/B,QAAI,KAAK/E,UAAU,YAAY;AAC7B,WAAK,kBAAkB+E,UAAAA;IACzB,OAAO;AACL,WAAK,cAAcA,UAAAA;IACrB;EACF;EAEA,sBAAmB;AACjB,SAAK,iBAAiB4D,YAAYC,IAAG;AACrC,SAAK,kBAAiB;AAGtB,UAAMC,mBAAmBpH,YAAYf,aAAAA;AACrC,QAAIoI,YAAY;AAEhBD,qBAAiBvD,QAAQ,CAAChE,QAAAA;AACxB,WAAK,YAAY,MAAA;AACf,cAAML,KAAK,KAAK,QAAQK,IAAIf,EAAE;AAC9B,YAAI,CAACU,IAAI;AACP;QACF;AAEA,cAAM8H,cAAc;AAEpB9H,WAAGwD,MAAMC,aAAa;AACtBzD,WAAGwD,MAAMK,YAAY,SAASiE,WAAAA;AAC9B9H,WAAGwD,MAAMe,OAAO;AAChBvE,WAAGwD,MAAMrD,UAAU;AAEnBH,WAAGwD,MAAMuE,YAAY,gBAAgB,GAAGD,WAAAA,EAAa;AAErD,cAAME,QAAQ5H,SAASC,GAAAA;AACvB,cAAM4H,mBAAmBD,QAAQ1H,KAAKwE,OAAO,IAAIxE,KAAKwE;AACtD,cAAMoD,mBAAmBD,kBAAkBnH;AAC3Cd,WAAGwD,MAAMuE,YAAY,WAAW,GAAGG,gBAAAA,IAAoB;AAEvD,aAAK,YAAY,MAAA;AACflI,aAAG0D,UAAUsD,IAAI,mBAAA;QACnB,GAAG,GAAA;MACL,GAAGa,SAAAA;AAEHA,mBAAa;IACf,CAAA;AAEA,UAAMM,mBAAmB3H,YAAYd,aAAAA;AACrC,SAAK,YAAY,MAAA;AACfyI,uBAAiB9D,QAAQ,CAAChE,QAAAA;AACxB,cAAML,KAAK,KAAK,QAAQK,IAAIf,EAAE;AAC9B,YAAI,CAACU,IAAI;AACP;QACF;AAEAA,WAAGwD,MAAMC,aAAa;AAEtB,cAAM2E,YAAY;AAClBpI,WAAGwD,MAAMuE,YAAY,gBAAgB,GAAGK,SAAAA,EAAW;AAEnD,cAAMJ,QAAQ5H,SAASC,GAAAA;AACvB,cAAM4H,mBAAmBD,QAAQ1H,KAAKwE,OAAO,IAAIxE,KAAKwE;AACtD,cAAMoD,mBAAmBD,kBAAkBlH;AAC3Cf,WAAGwD,MAAMuE,YAAY,WAAW,GAAGG,gBAAAA,IAAoB;AAEvD,aAAK,YAAY,MAAA;AACflI,aAAG0D,UAAUsD,IAAI,aAAA;QACnB,GAAG,EAAA;MACL,CAAA;AAEA,WAAK3F,QAAQ;IACf,GAAGwG,YAAY,GAAA;EACjB;EAEA,oBAAiB;AACf,UAAMF,MAAMD,YAAYC,IAAG;AAC3B,UAAMU,UAAU/H,KAAK4G,IAAI,GAAGS,MAAM,KAAK,cAAc;AAErD,UAAMW,cAAcD,UAAUvH;AAC9B,UAAMyH,WAAWzH,gBAAgBwH,cAAc;AAE/C,SAAKjH,QAAQ;AAEb,SAAK,YAAY,MAAA;AACf,YAAMmH,iBAAiBhI,YAAYnB,UAAUM,IAAI,CAACC,MAAMA,EAAEN,EAAE,CAAA;AAE5DkJ,qBAAenE,QAAQ,CAAChE,KAAKoI,MAAAA;AAC3B,cAAMzI,KAAK,KAAK,QAAQK,IAAIf,EAAE;AAC9B,YAAI,CAACU,IAAI;AACP;QACF;AAEA,cAAM8C,QAAQ2F,IAAI;AAElB,aAAK,YAAY,MAAA;AACfzI,aAAG0D,UAAUC,OAAO,eAAe,mBAAA;AACnC3D,aAAGwD,MAAMI,eAAe,SAAA;AACxB5D,aAAGwD,MAAMI,eAAe,cAAA;AAExB5D,aAAG0D,UAAUsD,IAAI,WAAA;AACjBhH,aAAGwD,MAAMK,YAAY;AACrB7D,aAAGwD,MAAMrD,UAAU;AACnBH,aAAGwD,MAAMI,eAAe,MAAA;AAExB,eAAK,YAAY,MAAA;AACf5D,eAAG0D,UAAUC,OAAO,WAAA;UACtB,GAAG,GAAA;QACL,GAAGb,KAAAA;MACL,CAAA;AAEA,WAAK,YACH,MAAA;AACE,aAAKzB,QAAQ;MACf,GACAmH,eAAeE,SAAS,KAAK,GAAA;IAEjC,GAAGH,QAAAA;EACL;EAEAtG,oBAAoBD,MAAqB;AACvC,QAAI,CAAC,KAAK,iBAAiB;AACzB;IACF;AAEA,SAAK,aAAY;AAEjB,QAAIA,MAAM;AACR,UAAI,KAAKX,UAAU,UAAU,KAAKA,UAAU,QAAQ;AAClD,aAAK,gBAAgB,MAAM,IAAA;AAC3B,aAAK,oBAAmB;MAC1B;IACF,OAAO;AACL,UAAI,KAAKA,UAAU,QAAQ;AACzB,aAAK,kBAAiB;MACxB,WAAW,KAAKA,UAAU,WAAW,KAAKA,UAAU,QAAQ;AAC1D,aAAKA,QAAQ;MACf;IACF;EACF;EAEAsH,UAAUC,SAAkC;AAC1C,SAAK,aAAY;AACjB,SAAK,gBAAgB,IAAA;AAErB,UAAMC,gBAAgB,KAAK9J;AAC3B,QAAI6J,SAAS;AACX,WAAK7J,QAAQ6J;IACf;AAEA,SAAK,UAAU,MAAA;AACb,WAAK,kBAAkB;AACvB,UAAI,KAAK9J,SAAS;AAChB,aAAK,oBAAmB;MAC1B,OAAO;AACL,aAAKuC,QAAQ;MACf;IACF,CAAA;AAEA,QAAIuH,SAAS;AACX,WAAK7J,QAAQ8J;IACf;EACF;;;;;AA/hBK,UAAA,GAAA,IAAA,GAAA,KAWI/J,yBAAOgK,aAAA,IAAA,GAAPhK,cAAAA,MAAU,KAAA,IAAA,KAOVC,sBAAAA,YAAAA,MAA0B,MAAA,GAAA,KAO1BC,qBAAAA,WAAAA,MAAsB,EAAA,GAAA,KAOtBC,0BAAAA,gBAAAA,MAA2B,IAAA,GAAA,KAEpC,SAA0B,SAAA,KAC1B,iBAAiB,GAAA,KACjB,mBAA6B,CAAA,GAAE,KAC/B,kBAAkB;;AA2fpB;;;ACr0BA,SAAS8J,QAAAA,cAAiC;;;ACG1C,IAAMC,eAAc,oBAAIC,QAAAA;AAExB,IAAMC,kBAAiB,CAACC,aAAAA;AACtB,MAAI,OAAOA,SAASC,kBAAkB,YAAY;AAChDD,aAASC,cAAa;AACtB;EACF;AAEA,MAAI,OAAOD,SAASE,WAAW,YAAY;AACzC;EACF;AAEA,MAAIL,aAAYM,IAAIH,QAAAA,GAAW;AAC7B;EACF;AAEAH,EAAAA,aAAYO,IAAIJ,UAAU,IAAA;AAE1BK,wBAAsB,MAAA;AACpBR,IAAAA,aAAYO,IAAIJ,UAAU,KAAA;AAE1BA,aAASE,SAAM;EACjB,CAAA;AACF;AAEA,IAAMI,kBAAiB,CAASC,UAAkBC,SAA0BD,aAAaC;AAQlF,SAASC,MAAqDC,UAAuC,CAAC,GAAC;AAC5G,QAAM,EAAEC,UAAUL,iBAAgBM,UAAUC,UAAS,IAAKH;AAE1D,SAAO,CACLI,UACAC,YAAAA;AAEA,QAAIA,QAAQC,SAAS,YAAY;AAC/B,YAAM,IAAIC,MAAM,yDAAA;IAClB;AAEA,WAAO;MACLd,MAAAA;AACE,eAAOW,SAASX,IAAIe,KAAK,IAAI;MAC/B;MACAd,IAAiBe,OAAa;AAC5B,cAAMZ,WAAWO,SAASX,IAAIe,KAAK,IAAI;AAEvC,YAAIP,QAAQJ,UAAUY,KAAAA,GAAQ;AAC5B;QACF;AAEAL,iBAASV,IAAIc,KAAK,MAAMC,KAAAA;AAExB,YAAIP,UAAU;AACZA,mBAASM,KAAK,MAAMC,OAAOZ,QAAAA;QAC7B;AAEAR,QAAAA,gBAAe,IAAI;MACrB;MACAqB,KAAkBC,cAAoB;AACpC,YAAIR,WAAW;AACb,iBAAOA,UAAUK,KAAK,MAAMG,YAAAA;QAC9B;AAEA,eAAOA;MACT;IACF;EACF;AACF;;;AC7EA,SAASC,QAAAA,cAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmLVC;IAAAA;IAAAA;IAIrBC;IAGAC;IAAAA;AAzKX,IAAMC,QAAQ,CAACC,OAAeC,KAAaC,QAAwBC,KAAKD,IAAID,KAAKE,KAAKF,IAAIC,KAAKF,KAAAA,CAAAA;AAE/F,IAAMI,OAAO,CAACC,WAAAA;AACZ,MAAIA,OAAOC,WAAW,GAAG;AACvB,WAAO;EACT;AACA,MAAIC,MAAM;AACV,aAAWP,SAASK,QAAQ;AAC1BE,WAAOP;EACT;AACA,SAAOO,MAAMF,OAAOC;AACtB;AAEA,IAAME,WAAW,CAACC,QAA2BC,MAAAA;AAC3C,MAAID,OAAOH,WAAW,GAAG;AACvB,WAAO;EACT;AACA,QAAMK,UAAUZ,MAAMW,GAAG,GAAG,CAAA;AAC5B,QAAME,QAAQT,KAAKU,MAAMF,WAAWF,OAAOH,SAAS,EAAA;AACpD,SAAOG,OAAOG,KAAAA,KAAU;AAC1B;AAEA,IAAME,oBAAoB,CAACT,QAA2BK,MAAAA;AACpD,MAAIL,OAAOC,WAAW,GAAG;AACvB,WAAO;EACT;AACA,QAAMG,SAAS;OAAIJ;IAAQU,KAAK,CAACC,GAAGC,MAAMD,IAAIC,CAAAA;AAC9C,SAAOT,SAASC,QAAQC,CAAAA;AAC1B;AAEA,IAAMQ,gBAAgB,CAACb,WAA6CS,kBAAkBT,QAAQ,GAAA;AAE9F,IAAMc,eAAe,CAACnB,OAAsBoB,WAAW,MAAC;AACtD,MAAIpB,UAAU,QAAQ,CAACqB,OAAOC,SAAStB,KAAAA,GAAQ;AAC7C,WAAO;EACT;AACA,SAAOA,MAAMuB,QAAQH,QAAAA;AACvB;AAEA,IAAMI,WAAW,CAACxB,OAAsBoB,WAAW,MAAC;AAClD,MAAIpB,UAAU,QAAQ,CAACqB,OAAOC,SAAStB,KAAAA,GAAQ;AAC7C,WAAO;EACT;AACA,SAAO,GAAGA,MAAMuB,QAAQH,QAAAA,CAAAA;AAC1B;AAEA,IAAMK,UAAU,CAACC,KAAoBC,cAAAA;AACnC,MAAID,QAAQ,QAAQ,CAACL,OAAOC,SAASI,GAAAA,GAAM;AACzC,WAAO;EACT;AACA,QAAME,SAASD,aAAaN,OAAOC,SAASK,SAAAA,IAAaA,YAAY;AACrE,QAAME,QAAQH,MAAME;AACpB,MAAIC,SAAS,MAAM;AACjB,WAAO;EACT;AACA,MAAIA,SAAS,MAAM;AACjB,WAAO;EACT;AACA,SAAO;AACT;;SAECC,UAAU;EACTC,KAAK;EACLC,UAAU;EACVC,YAAY;EACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgGV,CAAA,GAAAC,UAIGC,KAAc;EAAEC,MAAMC;EAASC,SAAS;EAAMC,cAAc;AAAM,CAAA,GAAAC,UAGlEC,MAAyB,sBAAA;AANrB,IAAMC,aAAN,eAAyB/C,iBAAAA,aAAAA;;WAIrBC,cAGAC,gBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,aAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QAHAD;;;;;QAGAC;;;;OAPqBF,cAAAA;;EAIrBC;MAAAA,SAAAA;gBAAAA;;MAAAA,OAAAA,IAAAA;SAAAA,uBAAM;;EAGNC;MAAAA,WAAAA;gBAAAA;;MAAAA,SAAAA,IAAAA;SAAAA,yBAAQ;;EAEjB;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EAEA;EAWA8C,oBAA0B;AACxB,SAAK,0BAAyB;AAC9B,QAAI,CAAC,KAAK/C,UAAU,CAACgD,SAASC,QAAQ;AACpC,WAAK,OAAM;IACb;EACF;EAEAC,uBAA6B;AAC3B,SAAK,MAAK;AACVF,aAASG,oBAAoB,oBAAoB,KAAK,uBAAuB;EAC/E;EAEAC,cAAoB;AAClB,SAAK,gBAAe;AACpB,SAAK,MAAK;EACZ;EAEAC,SAAyB;AACvB,UAAMxB,MAAM,KAAK,MAAMA;AACvB,UAAMyB,KAAK,KAAK,MAAMC;AACtB,UAAMC,SAAS5B,QAAQC,KAAKyB,EAAAA;AAE5B,UAAMG,gBAAgB;MACpB,KAAK,MAAMC,iBAAiB,OAAO,OAAO/B,SAAS,KAAK,MAAM+B,YAAY,CAAA,KAAM;MAChF,KAAK,MAAMC,iBAAiB,OAAO,OAAOhC,SAAS,KAAK,MAAMgC,YAAY,CAAA,KAAM;MAChFC,OAAOnB,OAAAA;AAET,WAAOoB;;;;2CAIgCL,MAAAA,IAAUlC,aAAaO,KAAK,CAAA,CAAA;;;iCAGtC4B,cAAcK,KAAK,QAAA,CAAA;;;;;;yDAMKR,KAAK,IAAIhC,aAAagC,IAAI,CAAA,CAAA,OAAS,QAAA;yDACnC,KAAK,MAAMS,aAAa;sDAC3B,KAAK,MAAMC,UAAU;6DACd,KAAK,MAAMC,UAAU;uDAC3BtC,SAAS,KAAK,MAAMuC,YAAY,CAAA;qDAClCvC,SAAS,KAAK,MAAM+B,YAAY,CAAA;;;;EAInF;EAEA,4BAAyB;AACvBV,aAASG,oBAAoB,oBAAoB,KAAK,uBAAuB;AAC7EH,aAASmB,iBAAiB,oBAAoB,KAAK,yBAAyB;MAAEC,SAAS;IAAK,CAAA;EAC9F;EAEA;EAWA,SAAM;AACJ,QAAI,KAAK,WAAW,MAAM;AACxB;IACF;AAEA,UAAMC,MAAMC,YAAYD,IAAG;AAC3B,SAAK,WAAWA;AAChB,SAAK,iBAAiBA;AACtB,SAAK,qBAAqB;AAE1B,SAAK,SAASE,sBAAsB,KAAK,KAAK;EAChD;EAEA,QAAK;AACH,QAAI,KAAK,WAAW,MAAM;AACxBC,2BAAqB,KAAK,MAAM;AAChC,WAAK,SAAS;IAChB;EACF;EAEA;EAuCA,eAAY;AACV,UAAMC,cAAc,KAAK,aAAaC,MAAM,CAAC,KAAK,kBAAkB;AACpE,UAAMC,YAAY,KAAK,YAAYD,MAAM,CAACpE,KAAKF,IAAI,GAAG,KAAK,YAAYK,MAAM,CAAA;AAE7E,UAAMmE,WAAWrE,KAAKkE,WAAAA;AACtB,UAAMI,WAAW5D,kBAAkBwD,aAAa,IAAA;AAChD,UAAMK,WAAWL,YAAYhE,SAAS,IAAIH,KAAKD,IAAG,GAAIoE,WAAAA,IAAe;AACrE,UAAMM,SAAS1D,cAAcoD,WAAAA;AAE7B,UAAMlB,cACJwB,UAAUA,SAAS,IAAI7E,MAAO,MAAO6E,QAAmB,IAAI,GAAA,IAAQ,KAAK,MAAMxB,eAAe;AAEhG,UAAMyB,QAAQzB,cAAc,MAAOA,cAAc,MAAO;AAExD,QAAIQ,gBAAgB;AACpB,QAAIC,aAAa;AACjB,QAAIC,aAAa;AAEjB,eAAWgB,MAAMR,aAAa;AAC5B,YAAMS,SAAS5E,KAAKD,IAAI,GAAGC,KAAK6E,MAAMF,KAAKD,KAAAA,IAAS,CAAA;AACpDjB,uBAAiBmB;AAEjB,UAAID,KAAKD,QAAQ,KAAK;AACpBhB,sBAAc;MAChB;AAEA,UAAIiB,KAAK3E,KAAKD,IAAI,IAAI2E,QAAQ,CAAA,GAAI;AAChCf,sBAAc;MAChB;IACF;AAEA,UAAMpC,MAAM8C,UAAUlE,SAAS,IAAIF,KAAKoE,SAAAA,IAAa;AAErD,SAAK,QAAQ;MACX9C;MACA0B;MACAG,cAAckB;MACdjB,cAAckB;MACdX,cAAcY;MACdf;MACAC;MACAC;IACF;EACF;EAEA,QAAK;AACH,SAAKmB,cACH,IAAIC,YAA8B,eAAe;MAC/CC,QAAQ,KAAK;MACbC,SAAS;MACTC,UAAU;IACZ,CAAA,CAAA;EAEJ;EAEA,kBAAe;AACb,UAAMC,SAAS,KAAKxF;AACpB,QAAI,CAACwF,QAAQ;AACX;IACF;AAEA,UAAMC,OAAOD,OAAOE,sBAAqB;AACzC,UAAMC,MAAMtF,KAAKD,IAAI,GAAGwF,OAAOC,oBAAoB,CAAA;AACnD,UAAMC,QAAQzF,KAAKD,IAAI,GAAGC,KAAKU,MAAM0E,KAAKK,QAAQH,GAAAA,CAAAA;AAClD,UAAMI,SAAS1F,KAAKD,IAAI,GAAGC,KAAKU,MAAM0E,KAAKM,SAASJ,GAAAA,CAAAA;AAEpD,QAAIH,OAAOM,UAAUA,SAASN,OAAOO,WAAWA,QAAQ;AACtDP,aAAOM,QAAQA;AACfN,aAAOO,SAASA;IAClB;EACF;EAEA,QAAK;AACH,UAAMP,SAAS,KAAKxF;AACpB,QAAI,CAACwF,QAAQ;AACX;IACF;AAEA,UAAMQ,MAAMR,OAAOS,WAAW,IAAA;AAC9B,QAAI,CAACD,KAAK;AACR;IACF;AAEA,UAAML,MAAMtF,KAAKD,IAAI,GAAGwF,OAAOC,oBAAoB,CAAA;AACnD,UAAMC,QAAQN,OAAOM,QAAQH;AAC7B,UAAMI,SAASP,OAAOO,SAASJ;AAE/BK,QAAIE,aAAaP,KAAK,GAAG,GAAGA,KAAK,GAAG,CAAA;AACpCK,QAAIG,UAAU,GAAG,GAAGL,OAAOC,MAAAA;AAE3B,UAAMK,UAAU,KAAK;AACrB,QAAIA,QAAQ5F,SAAS,GAAG;AACtB;IACF;AAEA,UAAMsB,SAAS,KAAK,MAAMwB,eAAe;AACzC,UAAM+C,WAAWhG,KAAKD,IAAI,IAAIC,KAAK6E,MAAMpD,SAAS,EAAA,IAAM,EAAA;AAExD,UAAMyB,SAAS5B,QAAQ,KAAK,MAAMC,KAAK,KAAK,MAAM0B,WAAW;AAC7D,UAAMgD,SACJ/C,WAAW,SACP,YACAA,WAAW,sBACT,YACAA,WAAW,SACT,YACA;AAGVyC,QAAIO,KAAI;AACRP,QAAIQ,cAAc;AAClBR,QAAIS,cAAc;AAClBT,QAAIU,YAAY;AAChBV,QAAIW,YAAY;MAAC;MAAG;KAAE;AAEtB,UAAMC,YAAY,CAAChF,QAAAA;AACjB,YAAMiF,IAAId,SAAS9F,MAAM2B,MAAMyE,UAAU,GAAG,CAAA,IAAKN;AACjDC,UAAIc,UAAS;AACbd,UAAIe,OAAO,GAAGF,CAAAA;AACdb,UAAIgB,OAAOlB,OAAOe,CAAAA;AAClBb,UAAIM,OAAM;IACZ;AAEAM,cAAUvG,KAAKF,IAAI,IAAIkG,QAAAA,CAAAA;AACvBO,cAAUvG,KAAKF,IAAI,IAAIkG,QAAAA,CAAAA;AAEvBL,QAAIiB,QAAO;AAEX,UAAMC,MAAM,CAACtF,QAAgBmE,SAAS9F,MAAM2B,MAAMyE,UAAU,GAAG,CAAA,IAAKN;AAGpEC,QAAIc,UAAS;AACb,aAASK,IAAI,GAAGA,IAAIf,QAAQ5F,QAAQ2G,KAAK,GAAG;AAC1C,YAAMjH,QAAQkG,QAAQe,CAAAA,KAAM;AAC5B,YAAMC,IAAKD,KAAKf,QAAQ5F,SAAS,KAAMsF;AACvC,YAAMe,IAAIK,IAAIhH,KAAAA;AACd,UAAIiH,MAAM,GAAG;AACXnB,YAAIe,OAAOK,GAAGP,CAAAA;MAChB,OAAO;AACLb,YAAIgB,OAAOI,GAAGP,CAAAA;MAChB;IACF;AACAb,QAAIgB,OAAOlB,OAAOC,MAAAA;AAClBC,QAAIgB,OAAO,GAAGjB,MAAAA;AACdC,QAAIqB,UAAS;AACbrB,QAAIQ,cAAc;AAClBR,QAAIsB,YAAYhB;AAChBN,QAAIuB,KAAI;AAGRvB,QAAIc,UAAS;AACb,aAASK,IAAI,GAAGA,IAAIf,QAAQ5F,QAAQ2G,KAAK,GAAG;AAC1C,YAAMjH,QAAQkG,QAAQe,CAAAA,KAAM;AAC5B,YAAMC,IAAKD,KAAKf,QAAQ5F,SAAS,KAAMsF;AACvC,YAAMe,IAAIK,IAAIhH,KAAAA;AACd,UAAIiH,MAAM,GAAG;AACXnB,YAAIe,OAAOK,GAAGP,CAAAA;MAChB,OAAO;AACLb,YAAIgB,OAAOI,GAAGP,CAAAA;MAChB;IACF;AACAb,QAAIQ,cAAc;AAClBR,QAAIS,cAAcH;AAClBN,QAAIU,YAAY;AAChBV,QAAIW,YAAY,CAAA,CAAE;AAClBX,QAAIwB,WAAW;AACfxB,QAAIyB,UAAU;AACdzB,QAAIM,OAAM;EACZ;;;;;AAvUK,UAAA,GAAA,IAAA,GAAA,KAIIvG,wBAAM2H,aAAA,IAAA,GAAN3H,aAAAA,MAAkB,KAAA,IAAA,KAGlBC,yBAAAA,eAAAA,IAAAA,GAAAA,KAET,SAAwB,MAAA,KACxB,WAAW,GAAA,KACX,iBAAiB,GAAA,KACjB,qBAAqB,GAAA,KAErB,eAAyB,CAAA,GAAE,KAC3B,cAAwB,CAAA,GAAE,KAE1B,kBAAkB,KAAA,KAClB,iBAAiB,SACjB,oBAAoB,KAAA,KACpB,qBAAqB,KAAA,KAErB,QAA0B;MACxB4B,KAAK;MACL0B,aAAa;MACbG,cAAc;MACdC,cAAc;MACdO,cAAc;MACdH,eAAe;MACfC,YAAY;MACZC,YAAY;IACd,GAAA,KA0DA,0BAA0B,MAAA;AACxB,UAAIjB,SAASC,QAAQ;AACnB,aAAK,MAAK;AACV;MACF;AAEA,UAAI,CAAC,KAAKjD,QAAQ;AAChB,aAAK,OAAM;MACb;IACF,GAAA,KAsBA,QAAQ,CAACqE,QAAAA;AACP,UAAI,KAAKrE,QAAQ;AACf,aAAK,MAAK;AACV;MACF;AAEA,YAAM4H,QAAQvD,MAAM,KAAK;AACzB,WAAK,WAAWA;AAGhB,UAAIuD,QAAQ,KAAKA,QAAQ,KAAK;AAC5B,aAAK,aAAaC,KAAKD,KAAAA;AACvB,YAAI,KAAK,aAAanH,SAAS,KAAK,iBAAiB;AACnD,eAAK,aAAaqH,MAAK;QACzB;MACF;AAEA,WAAK,sBAAsB;AAE3B,UAAIzD,MAAM,KAAK,kBAAkB,KAAK,mBAAmB;AACvD,cAAM0D,UAAU1D,MAAM,KAAK;AAC3B,cAAM2D,YAAYD,UAAU,IAAK,KAAK,qBAAqB,MAAQA,UAAU;AAE7E,aAAK,YAAYF,KAAKG,SAAAA;AACtB,YAAI,KAAK,YAAYvH,SAAS,KAAK,gBAAgB;AACjD,eAAK,YAAYqH,MAAK;QACxB;AAEA,aAAK,iBAAiBzD;AACtB,aAAK,qBAAqB;AAE1B,aAAK,aAAY;AACjB,aAAK,MAAK;AACV,aAAK4D,cAAa;MACpB;AAEA,WAAK,SAAS1D,sBAAsB,KAAK,KAAK;IAChD;;AA2KF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IFlN6B2D;IAAAA;IAAAA;IAAAA;IAIlBC;IAgBAC;IAAAA;AArOX,IAAMC,oBAAoB;EACxBC,KAAK;IAAEC,MAAM;IAAMC,MAAM;EAAK;EAC9BC,KAAK;IAAEF,MAAM;IAAKC,MAAM;EAAI;EAC5BE,KAAK;IAAEH,MAAM;IAAKC,MAAM;EAAK;EAC7BG,KAAK;IAAEJ,MAAM;IAAMC,MAAM;EAAK;EAC9BI,MAAM;IAAEL,MAAM;IAAKC,MAAM;EAAK;EAC9BK,UAAU;IAAEN,MAAM;IAAMC,MAAM;EAAK;EACnCM,gBAAgB;IAAEP,MAAM;IAAMC,MAAM;EAAK;EACzCO,KAAK;IAAER,MAAM;IAAIC,MAAM;EAAG;EAC1BQ,KAAK;IAAET,MAAM;IAAKC,MAAM;EAAI;AAC9B;AAEA,IAAMS,oBAAwD;EAC5DX,KAAK;EACLG,KAAK;EACLC,KAAK;EACLC,KAAK;EACLK,KAAK;AACP;AAEA,IAAME,aAAa,CAACC,QAAmBC,UAAAA;AACrC,MAAIA,UAAU,MAAM;AAClB,WAAO;EACT;AACA,QAAMC,aAAahB,kBAAkBc,MAAAA;AACrC,MAAI,CAACE,YAAY;AACf,WAAO;EACT;AAEA,MAAIF,WAAW,OAAO;AACpB,QAAIC,SAASC,WAAWd,MAAM;AAC5B,aAAO;IACT;AACA,QAAIa,SAASC,WAAWb,MAAM;AAC5B,aAAO;IACT;AACA,WAAO;EACT;AAEA,MAAIY,SAASC,WAAWd,MAAM;AAC5B,WAAO;EACT;AACA,MAAIa,QAAQC,WAAWb,MAAM;AAC3B,WAAO;EACT;AACA,SAAO;AACT;AAEA,IAAMc,eAAe,CAACH,QAAmBC,UAAAA;AACvC,MAAIA,UAAU,MAAM;AAClB,WAAO;EACT;AACA,MAAID,WAAW,OAAO;AACpB,WAAOC,MAAMG,QAAQ,CAAA;EACvB;AACA,MAAIJ,WAAW,OAAO;AACpB,WAAO,GAAGK,KAAKC,MAAML,KAAAA,CAAAA;EACvB;AACA,MAAIA,QAAQ,KAAM;AAChB,WAAO,GAAGI,KAAKC,MAAML,KAAAA,CAAAA;EACvB;AACA,SAAO,IAAIA,QAAQ,KAAMG,QAAQ,CAAA,CAAA;AACnC;AAEA,IAAMG,cAAc,CAACC,OAAkCC,WAAW,MAAC;AACjE,MAAID,SAAS,QAAQ,CAACE,OAAOC,SAASH,KAAAA,KAAUA,SAAS,GAAG;AAC1D,WAAO;EACT;AAEA,QAAMI,IAAI;AACV,QAAMC,KAAKJ,WAAW,IAAI,IAAIA;AAC9B,QAAMK,QAAQ;IAAC;IAAK;IAAM;IAAM;IAAM;;AACtC,QAAMC,IAAIV,KAAKW,MAAMX,KAAKY,IAAIT,KAAAA,IAASH,KAAKY,IAAIL,CAAAA,CAAAA;AAChD,SAAO,GAAGM,YAAYV,QAAQI,KAAKG,GAAGX,QAAQS,EAAAA,CAAAA,CAAAA,IAAQC,MAAMC,CAAAA,CAAE;AAChE;AAEA,IAAMI,0BAA0B,CAACC,eAAAA;AAC/B,MAAIA,cAAc,GAAG;AACnB,WAAO;EACT;AACA,QAAMC,YAAaD,aAAa,MAAc;AAC9C,SAAO,GAAGC,UAAUjB,QAAQ,CAAA,CAAA;AAC9B;;SAECkB,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0HV,CAAA,GAAAC,UAIGC,MAA0B,CAAC,CAAA,GAAAC,UAgB3BD,MAAsB,CAAC,CAAA,GAAAE,UA0CvBC,OAA+C,aAAA;AA7D3C,IAAMC,UAAN,eAAsB/C,iBAAAA,aAAAA;;WAIlBC,eAgBAC,eAAAA,YAAAA,GAAAA,GAAAA,CAAAA,UAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QAhBAD;;;;;QAgBAC;;;;;QA0CT8C;;;;OA9D2BhD,cAAAA;;EAIlBC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,wBAAO;;EAgBPC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,wBAAO;;EAkBhB+C,oBAA0B;AACxB,SAAKC,cAAa;AAClB,SAAKC,sBAAqB;AAC1B,SAAKC,sBAAqB;AAC1B,SAAKC,sBAAqB;AAE1B,QAAIC,SAASC,eAAe,YAAY;AACtCC,aAAOC,iBAAiB,QAAQ,KAAKC,cAAc;IACrD,OAAO;AACL,WAAKA,eAAc;IACrB;EACF;EAEAC,uBAA6B;AAC3B,SAAKC,UAAUC,QAAQ,CAACC,aAAAA;AACtBA,eAASC,WAAU;IACrB,CAAA;AACA,SAAKH,YAAY,CAAA;AACjB,SAAKI,qBAAoB;AACzB,SAAKC,sBAAqB;AAC1BT,WAAOU,oBAAoB,QAAQ,KAAKR,cAAc;EACxD;EAGAV,gBAAgBmB,OAA4C;AAC1D,UAAMtD,MAAMsD,MAAMC,QAAQvD,OAAO;AACjC,SAAKZ,QAAQY,MAAMA;AACnB,SAAKwD,YAAY,OAAOxD,GAAAA;AACxB,SAAKyD,cAAa;EACpB;EASQpB,gBAAsB;AAC5B,QAAI,EAAE,yBAAyBM,SAAS;AACtCe,cAAQC,KAAK,wCAAA;AACb;IACF;AAEA,QAAI;AACF,YAAMV,WAAW,IAAIW,oBAAoB,CAACC,SAAAA;AACxC,mBAAWC,SAASD,KAAKE,WAAU,GAAI;AACrC,eAAKC,wBAAwBF,KAAAA;QAC/B;MACF,CAAA;AAEAb,eAASgB,QAAQ;QAAEC,MAAM;QAA4BC,UAAU;MAAK,CAAA;AACpElB,eAASgB,QAAQ;QAAEC,MAAM;QAASC,UAAU;MAAK,CAAA;AACjDlB,eAASgB,QAAQ;QAAEC,MAAM;QAAgBC,UAAU;MAAK,CAAA;AACxDlB,eAASgB,QAAQ;QAAEC,MAAM;QAASC,UAAU;MAAK,CAAA;AACjDlB,eAASgB,QAAQ;QAAEC,MAAM;QAAYC,UAAU;MAAK,CAAA;AACpDlB,eAASgB,QAAQ;QAAEC,MAAM;QAAYC,UAAU;MAAK,CAAA;AAEpD,WAAKpB,UAAUqB,KAAKnB,QAAAA;IACtB,SAASoB,GAAG;AACVX,cAAQY,MAAM,2CAA2CD,CAAAA;IAC3D;EACF;EAEQ/B,wBAA8B;AACpC,SAAKiC,wBAAuB;AAC5B,UAAMC,kBAAkBC,YAAYC,iBAAiB,UAAA;AACrD,SAAKC,uBAAuBH,eAAAA;EAC9B;EAEQD,0BAAgC;AACtC,UAAMK,oBAAoBH,YAAYC,iBAAiB,YAAA;AACvD,QAAIE,kBAAkBC,SAAS,GAAG;AAChC,YAAMC,YAAYF,kBAAkB,CAAA;AAEpC,UAAI/E,OAAO;AACX,UAAIiF,UAAUC,gBAAgB,KAAKD,UAAUE,aAAa,GAAG;AAC3DnF,eAAOiF,UAAUC,gBAAgBD,UAAUE;MAC7C;AAEA,UAAIlF,WAAW;AACf,UAAIgF,UAAUG,eAAe,GAAG;AAC9BnF,mBAAWgF,UAAUG,eAAeH,UAAUI;MAChD;AAEA,UAAInF,iBAAiB;AACrB,UAAI+E,UAAU/E,iBAAiB,GAAG;AAChCA,yBAAiB+E,UAAU/E,iBAAiB+E,UAAUI;MACxD;AAEA,WAAK9F,QAAQ+F,aAAa;QAAEtF;QAAMC;QAAUC;MAAe;AAC3D,WAAKyD,YAAY,YAAY1D,QAAAA;AAC7B,WAAK0D,YAAY,QAAQ3D,IAAAA;IAC3B;EACF;EAEQmE,wBAAwBF,OAA+B;AAC7D,YAAQA,MAAMsB,WAAS;MACrB,KAAK;AACH,aAAKhG,QAAQiG,cAAc9F,MAAMuE,MAAMoB;AACvC,aAAK1B,YAAY,OAAOM,MAAMoB,SAAS;AACvC;MACF,KAAK,SAAS;AACZ,cAAMI,aAAaxB;AACnB,YAAIwB,WAAWC,iBAAiBD,WAAWE,WAAW,KAAKC,QAAQ;AACjE,eAAKA,SAASH,WAAWE;AACzB,eAAKpG,QAAQiG,cAAc3F,MAAM,KAAK+F;AACtC,eAAKjC,YAAY,OAAO,KAAKiC,MAAM;QACrC;AACA,aAAKC,WAAWtB,KAAKkB,UAAAA;AACrB;MACF;MACA,KAAK,gBAAgB;AACnB,cAAMK,UAAU7B;AAChB,YAAI,CAAC6B,QAAQC,gBAAgB;AAC3B,eAAKC,WAAWzB,KAAKuB,OAAAA;AACrB,eAAKG,0BAAyB;QAChC;AACA;MACF;MACA,KAAK;AACH,YAAIhC,MAAMiC,SAAS,0BAA0B;AAC3C,eAAK3G,QAAQiG,cAAczF,MAAMkE,MAAMoB;AACvC,eAAK1B,YAAY,OAAOM,MAAMoB,SAAS;QACzC;AACA;MACF,KAAK;AACH,aAAKP,uBAAuB;UAACb;SAAmC;AAChE;MACF,KAAK,YAAY;AACf,cAAMkC,UAAUlC;AAChB,aAAKmC,gBAAgB7B,KAAK4B,OAAAA;AAC1B,aAAKE,yBAAwB;AAC7B;MACF;IACF;AACA,SAAKzC,cAAa;EACpB;EAEQqC,4BAAkC;AACxC,QAAIK,SAAS;AACb,QAAIC,oBAAoB;AACxB,QAAIC,mBAAmBC;AACvB,QAAIC,WAAW;AAEf,SAAKV,WAAWW,KAAK,CAACC,GAAGC,MAAMD,EAAEvB,YAAYwB,EAAExB,SAAS;AAExD,eAAWpB,SAAS,KAAK+B,YAAY;AACnC,YAAMc,WAAW7C,MAAMoB,YAAYqB;AAEnC,UAAII,WAAW,OAAQ7C,MAAMoB,YAAYmB,mBAAmB,KAAM;AAChE,YAAID,oBAAoB,GAAG;AACzBD,mBAAS1F,KAAKmG,IAAIT,QAAQC,iBAAAA;QAC5B;AACAA,4BAAoB;AACpBC,2BAAmBvC,MAAMoB;MAC3B;AAEAkB,2BAAqBtC,MAAMzD;AAC3BkG,iBAAWzC,MAAMoB;IACnB;AAEAiB,aAAS1F,KAAKmG,IAAIT,QAAQC,iBAAAA;AAC1B,SAAKhH,QAAQiG,cAAc1F,MAAMwG;AACjC,SAAK3C,YAAY,OAAO2C,MAAAA;EAC1B;EAEQxB,uBAAuBkC,SAA4C;AACzE,UAAMC,UAAU,KAAK1H,QAAQ2H;AAE7BF,YAAQ7D,QAAQ,CAACc,UAAAA;AACf,YAAMkD,OAAOlD,MAAMmD,gBAAgB;AACnC,YAAMC,YAAYpD,MAAMqD;AACxB,YAAMpB,OAAOjC,MAAMiC,KAAKqB,YAAW;AAEnC,UAAIF,cAAc,YAAYnB,KAAKsB,SAAS,KAAA,GAAQ;AAClDP,gBAAQQ,GAAGC;AACXT,gBAAQQ,GAAGN,QAAQA;MACrB,WAAWE,cAAc,SAASnB,KAAKsB,SAAS,MAAA,KAAWH,cAAc,QAAQ;AAC/EJ,gBAAQU,IAAID;AACZT,gBAAQU,IAAIR,QAAQA;MACtB,WAAWE,cAAc,SAASA,cAAc,WAAW,sCAAsCO,KAAK1B,IAAAA,GAAO;AAC3Ge,gBAAQY,IAAIH;AACZT,gBAAQY,IAAIV,QAAQA;MACtB,OAAO;AACLF,gBAAQa,MAAMJ;AACdT,gBAAQa,MAAMX,QAAQA;MACxB;AACAF,cAAQc,aAAaZ;IACvB,CAAA;EACF;EAEQd,2BAAiC;AACvC,QAAI2B,MAAM;AACV,QAAIN,QAAQ;AACZ,UAAMO,gBAAgB,KAAK1I,QAAQiG,cAAczF,OAAO;AAExD,SAAKqG,gBAAgBjD,QAAQ,CAAC+E,SAAAA;AAC5B,UAAIA,KAAK7C,aAAa4C,eAAe;AACnCP;AACA,YAAIQ,KAAKvC,WAAW,IAAI;AACtBqC,iBAAOE,KAAKvC,WAAW;QACzB;MACF;IACF,CAAA;AACA,SAAKpG,QAAQ4I,YAAY;MAAET;MAAOU,eAAeJ;IAAI;AACrD,SAAKzI,QAAQiG,cAAcpF,MAAM4H;AACjC,SAAKrE,YAAY,OAAOqE,GAAAA;EAC1B;EAEQtF,wBAA8B;AACpC,QAAI,CAACkC,YAAYyD,QAAQ;AACvB;IACF;AAEA,UAAMC,eAAe,MAAA;AACnB,UAAI1D,YAAYyD,QAAQ;AACtB,cAAME,MAAM3D,YAAYyD;AACxB,aAAK9I,QAAQ8I,SAAS;UACpBG,iBAAiBvH,OAAOsH,IAAIC,eAAe,KAAK;UAChDC,iBAAiBxH,OAAOsH,IAAIE,eAAe,KAAK;UAChDC,gBAAgBzH,OAAOsH,IAAIG,cAAc,KAAK;QAChD;AACA,aAAK9E,cAAa;MACpB;IACF;AAEA0E,iBAAAA;AACA,SAAKK,iBAAiB7F,OAAO8F,YAAYN,cAAc,GAAA;EACzD;EAEQhF,uBAA6B;AACnC,QAAI,KAAKqF,gBAAgB;AACvBE,oBAAc,KAAKF,cAAc;AACjC,WAAKA,iBAAiB;IACxB;EACF;EAEQhG,wBAA8B;AACpC,QAAImG,UAAUC,YAAY;AACxB,WAAKC,kBAAiB;AACtBF,gBAAUC,WAAWhG,iBAAiB,UAAU,KAAKiG,iBAAiB;IACxE;EACF;EAEQzF,wBAA8B;AACpC,QAAIuF,UAAUC,YAAY;AACxBD,gBAAUC,WAAWvF,oBAAoB,UAAU,KAAKwF,iBAAiB;IAC3E;EACF;EAWQrF,YAAYsF,KAAgBzI,OAA4B;AAC9D,QAAIA,UAAU,MAAM;AAClB;IACF;AACA,UAAM0I,UAAU,KAAKC,aAAaF,GAAAA,KAAQ,CAAA;AAC1CC,YAAQ3E,KAAK/D,KAAAA;AACb,QAAI0I,QAAQlE,SAAS,KAAKoE,gBAAgB;AACxCF,cAAQG,MAAK;IACf;AACA,SAAKF,aAAaF,GAAAA,IAAOC;EAC3B;EAEQI,kBAAkBL,KAAwB;AAChD,UAAMC,UAAU,KAAKC,aAAaF,GAAAA;AAClC,QAAI,CAACC,WAAWA,QAAQlE,SAAS,GAAG;AAClC,aAAO;IACT;AAEA,UAAMuE,eAAeL,QAAQA,QAAQlE,SAAS,CAAA;AAC9C,UAAMwE,cAAcN,QAAQO,MAAM,GAAGP,QAAQlE,SAAS,CAAA,EAAG0E,OAAO,CAAC9C,GAAGC,MAAMD,IAAIC,GAAG,CAAA,KAAMqC,QAAQlE,SAAS;AAExG,UAAM2E,YAAY/I,KAAKgJ,IAAIJ,cAAc,IAAA;AACzC,UAAMK,QAAQN,gBAAgB,IAAIC;AAElC,QAAI5I,KAAKgJ,IAAIC,KAAAA,IAASF,WAAW;AAC/B,aAAO;IACT;AAEA,QAAIV,QAAQ,OAAO;AACjB,aAAOY,QAAQ,IAAI,WAAM;IAC3B,OAAO;AACL,aAAOA,QAAQ,IAAI,WAAM;IAC3B;EACF;EAEQC,mBAAiC;AACvC,UAAMC,UAA0B;MAC9BzJ,WAAW,OAAO,KAAKf,QAAQiG,cAAc9F,GAAG;MAChDY,WAAW,OAAO,KAAKf,QAAQiG,cAAc1F,GAAG;MAChDQ,WAAW,OAAO,KAAKf,QAAQiG,cAAc3F,GAAG;MAChDS,WAAW,OAAO,KAAKf,QAAQY,GAAG;;AAGpC,QAAI4J,QAAQC,SAAS,MAAA,GAAS;AAC5B,aAAO;IACT;AACA,QAAID,QAAQC,SAAS,mBAAA,GAAsB;AACzC,aAAO;IACT;AACA,QAAID,QAAQE,MAAM,CAACC,MAAMA,MAAM,SAAA,GAAY;AACzC,aAAO;IACT;AAEA,QAAIH,QAAQI,KAAK,CAACD,MAAMA,MAAM,MAAA,GAAS;AACrC,aAAO;IACT;AAEA,WAAO;EACT;EAEAE,SAAyB;AACvB,WAAOC;;UAED,KAAKC,eAAc,CAAA;;;EAG3B;EAEQA,iBAAiC;AACvC,WAAOD;;;;;;;;UAQD,KAAKE,sBAAqB,CAAA;UAC1B,KAAKC,eAAc,CAAA;UACnB,KAAKC,kBAAiB,CAAA;UACtB,KAAKC,gBAAe,CAAA;;;EAG5B;EAEQC,gBAAgBC,OAAe3B,KAAgBzI,OAAsBqK,aAAqC;AAChH,UAAMC,SAASxK,WAAW2I,KAAKzI,KAAAA;AAC/B,UAAMuK,iBAAiBrK,aAAauI,KAAKzI,KAAAA;AACzC,UAAMwK,QAAQ,KAAK1B,kBAAkBL,GAAAA;AACrC,UAAMgC,YAAY5K,kBAAkB4I,GAAAA;AACpC,UAAMiC,cAAcD,YAAY,YAAYvK,aAAauI,KAAKgC,SAAAA,CAAAA,MAAgB;AAC9E,WAAOZ;yCAC8BQ,WAAAA,GAAcK,WAAAA;4DACKN,KAAAA;kEACME,MAAAA,iBAAuBA,MAAAA;kBACvEC,cAAAA;gDAC8BC,KAAAA;;;;EAI9C;EAEQT,wBAAwC;AAC9C,UAAM,EAAE7K,KAAKG,KAAKC,KAAKC,KAAKK,IAAG,IAAK,KAAKb,QAAQiG;AACjD,UAAM,EAAExF,MAAMC,SAAQ,IAAK,KAAKV,QAAQ+F;AACxC,WAAO+E;;;;kBAIO,KAAKM,gBAAgB,OAAO,OAAOjL,KAAK,yDAAA,CAAA;kBACxC,KAAKiL,gBAAgB,OAAO,OAAO9K,KAAK,qDAAA,CAAA;kBACxC,KAAK8K,gBAAgB,OAAO,OAAO7K,KAAK,qDAAA,CAAA;kBACxC,KAAK6K,gBAAgB,OAAO,OAAO5K,KAAK,4EAAA,CAAA;kBACxC,KAAK4K,gBAAgB,OAAO,OAAOvK,KAAK,8DAAA,CAAA;kBACxC,KAAKuK,gBAAgB,QAAQ,QAAQ3K,MAAM,qDAAA,CAAA;kBAC3C,KAAK2K,gBAAgB,QAAQ,YAAY1K,UAAU,uBAAA,CAAA;;;;EAInE;EAEQuK,iBAAiC;AACvC,UAAM,EAAEnC,QAAQF,UAAS,IAAK,KAAK5I;AAEnC,WAAO8K;;;;;;wBAMalC,UAAUT,KAAK,MAAMS,UAAUC,cAAczH,QAAQ,CAAA,CAAA;;cAE/D,KAAKwK,aAAa9C,MAAAA,CAAAA;;;EAG9B;EAEQ8C,aAAa9C,QAAqC;AACxD,QAAI,CAACA,QAAQ;AACX,aAAOgC;;;;;IAKT;AAEA,UAAMe,cAAc/C,OAAOI,kBAAkB,IAAKJ,OAAOK,iBAAiBL,OAAOI,kBAAmB,MAAM;AAE1G,QAAIqC,SAAuB;AAC3B,QAAIM,cAAc,IAAI;AACpBN,eAAS;IACX,WAAWM,cAAc,IAAI;AAC3BN,eAAS;IACX;AAEA,WAAOT;;;;wBAIavJ,YAAYuH,OAAOK,cAAc,CAAA,MAAO5H,YAAYuH,OAAOI,eAAe,CAAA;;6CAErD2C,YAAYzK,QAAQ,CAAA,CAAA;iDAChBmK,MAAAA,WAAiBO,YAAY;MAAEC,OAAO,GAAG1K,KAAK2K,IAAI,KAAKH,WAAAA,CAAAA;IAAgB,CAAA,CAAA,gBAAkBN,MAAAA;;;;wBAIlHhK,YAAYuH,OAAOG,eAAe,CAAA;;;;EAIxD;EAEQiC,oBAAoC;AAC1C,UAAM,EAAEe,eAAeC,IAAG,IAAK,KAAKjM;AACpC,WAAO6K;;;;;;4BAMiBmB,cAAcE,YAAW,CAAA;;;;4BAIzBD,MAAM,IAAI,GAAGA,GAAAA,OAAU,KAAA;;;;;EAKjD;EAEQf,kBAAkC;AACxC,UAAM,EAAEjD,IAAIE,KAAKE,KAAKC,OAAOC,UAAS,IAAK,KAAKxI,QAAQ2H;AACxD,UAAMyE,aAAalE,GAAGC,QAAQC,IAAID,QAAQG,IAAIH,QAAQI,MAAMJ;AAE5D,UAAMkE,aAAa,CAAChB,OAAeiB,SAA0CxB;;oBAE7DO,KAAAA,KAAUiB,KAAKnE,KAAK;oBACpB5G,YAAY+K,KAAK1E,IAAI,CAAA;;;AAIrC,WAAOkD;;gFAEqEvJ,YAAYiH,SAAAA,CAAAA,MAAgB4D,UAAAA;;kBAE1FC,WAAW,MAAMnE,EAAAA,CAAAA;kBACjBmE,WAAW,aAAajE,GAAAA,CAAAA;kBACxBiE,WAAW,UAAU/D,GAAAA,CAAAA;kBACrB+D,WAAW,SAAS9D,KAAAA,CAAAA;;;+BAGPpG,wBAAwBqG,SAAAA,CAAAA;;;gCAGvB,KAAK+B,iBAAgB,CAAA;;;;EAInD;;;;;AArgBK,UAAA,GAAA,IAAA,GAAA,KAIIvK,yBAAOuM,aAAA,IAAA,GAAPvM,cAAAA,MAA8B;MACrC+F,YAAY;QAAErF,UAAU;QAAMC,gBAAgB;QAAMF,MAAM;MAAK;MAC/DwF,eAAe;QAAE9F,KAAK;QAAMG,KAAK;QAAMC,KAAK;QAAGC,KAAK;QAAMK,KAAK;MAAE;MACjE8G,WAAW;QACTO,IAAI;UAAEC,OAAO;UAAGP,MAAM;QAAE;QACxBQ,KAAK;UAAED,OAAO;UAAGP,MAAM;QAAE;QACzBU,KAAK;UAAEH,OAAO;UAAGP,MAAM;QAAE;QACzBW,OAAO;UAAEJ,OAAO;UAAGP,MAAM;QAAE;QAC3BY,WAAW;MACb;MACAM,QAAQ;MACRlI,KAAK;MACLgI,WAAW;QAAET,OAAO;QAAGU,eAAe;MAAE;IAC1C,CAAA,IAAA,KAGS5I,wBAAAA,cAAAA,MAA0B;MACjCgM,eAAe;MACfC,KAAK;IACP,CAAA,GAAA,KAEQvI,YAAmC,CAAA,GAAE,KACrCyF,iBAAgC,MAAA,KAEhC3C,aAA4B,CAAA,GAAE,KAE9BH,aAAuC,CAAA,GAAE,KACzCD,SAAS,GAAA,KAETQ,kBAA+C,CAAA,GAAE,KAEjD+C,eAAqD,CAAC,GAAA,KACtDC,iBAAiB,GAAA,KAiCjBpG,iBAAiB,MAAA;AACvB+I,iBAAW,MAAA;AACT,aAAKrH,wBAAuB;AAC5B,aAAKd,cAAa;MACpB,GAAG,GAAA;IACL,GAAA,KAuNQoF,oBAAoB,MAAA;AAC1B,UAAIF,UAAUC,YAAY;AACxB,aAAKvJ,UAAU;UACbgM,eAAe1C,UAAUC,WAAWyC,iBAAiB;UACrDC,KAAK3C,UAAUC,WAAW0C,OAAO;QACnC;MACF;IACF;;AA8NF;;;AG/yBA,SAASO,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+FYC;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAGtBC;IAGAC;IAGAC;IAGAC;IAGAC;IAGAC;IAGAC;IAAAA;;SAxGVC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0CRC,WAAAA;AACE,WAAOC;;;;;mBAKQ,KAAKX,KAAK;sBACP,KAAKK,QAAQ;iBAClB,KAAKJ,GAAG;iBACR,KAAKC,GAAG;kBACP,KAAKC,IAAI;mBACR,KAAKS,WAAW;oBACf,KAAKC,YAAY;;;;qBAIhB,KAAKC,gBAAgBC,KAAK,IAAI,CAAA;;;wBAG3B,KAAKV,YAAY,KAAKJ,QAAQ,QAAQe,OAAO,KAAKV,SAASN,KAAAA,KAAU,KAAKC,GAAG;6BACxE,KAAKI,YAAY,KAAKJ,QAAQ,QAAQe,OAAO,KAAKV,SAASN,KAAAA,KAAU,KAAKC,GAAG;;;;;;qBAMrF,KAAKgB,gBAAgBF,KAAK,IAAI,CAAA;;;wBAG3B,KAAKV,YAAY,KAAKH,QAAQ,QAAQc,OAAO,KAAKV,SAASN,KAAAA,KAAU,KAAKE,GAAG;6BACxE,KAAKG,YAAY,KAAKH,QAAQ,QAAQc,OAAO,KAAKV,SAASN,KAAAA,KAAU,KAAKE,GAAG;;;;;;;EAOxG;AACF,CAAA,GAAAgB,UAGGC,KAAoB;EAAEC,MAAMJ;EAAQK,SAAS;AAAK,CAAA,GAAAC,UAGlDH,KAAoB;EAAEC,MAAMJ;EAAQK,SAAS;AAAK,CAAA,GAAAE,UAGlDJ,KAAoB;EAAEC,MAAMJ;EAAQK,SAAS;AAAK,CAAA,GAAAG,UAGlDL,KAAoB;EAAEC,MAAMJ;EAAQK,SAAS;AAAK,CAAA,GAAAI,UAGlDN,KAAoB;EAAEE,SAAS;AAAK,CAAA,GAAAK,UAGpCP,KAAc;EAAEC,MAAMO;EAASN,SAAS;AAAK,CAAA,GAAAO,SAG7CC,MAAwB,OAAA,GAAAC,SAmBxBC,OAA6C,SAAS;EAAEC,UAAU;AAAQ,CAAA,GAAAC,SAU1EF,OAA6C,UAAU;EAAEC,UAAU;AAAQ,CAAA;AAjDvE,IAAME,cAAN,eAA0BnC,iBAAAA,aAAAA;;WAGtBC,cAGAC,WAGAC,WAGAC,YAGAC,aAGAC,iBAGAC,gBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,cAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QAlBAN;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAmBTM;;;;;QAUAC;;;;OAlD+Bd,cAAAA;;EAGtBC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAGLC;MAAAA,MAAAA;gBAAAA;;MAAAA,IAAAA,IAAAA;SAAAA,oBAAG;;EAGHC;MAAAA,MAAAA;gBAAAA;;MAAAA,IAAAA,IAAAA;SAAAA,oBAAG;;EAGHC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAGJC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAGJC;MAAAA,WAAAA;gBAAAA;;MAAAA,SAAAA,IAAAA;SAAAA,yBAAQ;;EAGRC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,wBAAO;;EAEhB6B,cAAoB;AAClB,QAAI,CAAC,KAAK7B,SAAS;AACjB;IACF;AAEA,UAAMA,UAAU,KAAKA;AACrBA,YAAQN,QAAQ,KAAKA,UAAU,QAAQ,KAAKA,UAAUoC,SAAY,KAAKC,OAAO,KAAKrC,KAAK;AACxFM,YAAQL,MAAM,KAAKA,QAAQ,QAAQ,KAAKA,QAAQmC,SAAY,KAAKC,OAAO,KAAKpC,GAAG;AAChFK,YAAQJ,MAAM,KAAKA,QAAQ,QAAQ,KAAKA,QAAQkC,SAAY,KAAKC,OAAO,KAAKnC,GAAG;AAChFI,YAAQH,OAAO,KAAKA,SAAS,QAAQ,KAAKA,SAASiC,SAAY,KAAKC,OAAO,KAAKlC,IAAI;AACpFG,YAAQF,OAAO,KAAKA,QAAQ;AAC5BE,YAAQD,WAAWsB,QAAQ,KAAKtB,QAAQ;AAExCiC,wBAAoB,MAAM,YAAYX,QAAQ,KAAKtB,QAAQ,CAAA;EAC7D;EAGAO,YAAY2B,OAAcC,QAAwC;AAChE,QAAI,CAACA,QAAQ;AACX;IACF;AAEA,SAAKxC,QAAQyC,aAAaD,OAAOxC,KAAK;AACtC0C,yBAAqB,MAAM,SAAS;MAAE1C,OAAO,KAAKA;MAAOuC;IAAM,CAAA;EACjE;EAGA1B,aAAa0B,OAAcC,QAAwC;AACjE,QAAI,CAACA,QAAQ;AACX;IACF;AAEA,SAAKxC,QAAQyC,aAAaD,OAAOxC,KAAK;AACtC0C,yBAAqB,MAAM,UAAU;MAAE1C,OAAO,KAAKA;MAAOuC;IAAM,CAAA;EAClE;EAEAI,eAAeC,QAAiC;AAC9C,UAAMC,QAAQC,SAASC,cAAc,KAAA;AACrCF,UAAMG,UAAUC,IAAI,cAAA;AACpBL,WAAOM,YAAYL,KAAAA;AAEnBM,eAAW,MAAA;AACTN,YAAMO,OAAM;IACd,GAAG,GAAA;EACL;EAEAtC,gBAAgByB,OAAyB;AACvC,QAAI,KAAKlC,YAAY,KAAKJ,QAAQ,QAAQe,OAAO,KAAKV,SAASN,KAAAA,KAAU,KAAKC,KAAK;AACjF;IACF;AAEA,UAAM2C,SAASL,MAAMc;AACrB,SAAKV,eAAeC,MAAAA;AAEpB,UAAMU,UAAU,OAAO,KAAKtD,UAAU,WAAW,KAAKA,QAAQ;AAC9D,SAAKA,QAAQsD,WAAW,KAAKnD,QAAQ;AAErC,QAAI,KAAKH,SAAS,KAAKC,KAAK;AAC1B,WAAKI,WAAW;IAClB;EACF;EAEAY,gBAAgBsB,OAAyB;AACvC,QAAI,KAAKlC,YAAY,KAAKH,QAAQ,QAAQc,OAAO,KAAKV,SAASN,KAAAA,KAAU,KAAKE,KAAK;AACjF;IACF;AAEA,UAAM0C,SAASL,MAAMc;AACrB,SAAKV,eAAeC,MAAAA;AAEpB,UAAMU,UAAU,OAAO,KAAKtD,UAAU,WAAW,KAAKA,QAAQ;AAC9D,SAAKA,QAAQsD,WAAW,KAAKnD,QAAQ;AAErC,QAAI,KAAKH,SAAS,KAAKE,KAAK;AAC1B,WAAKG,WAAW;IAClB;EACF;;;;;AAnGK,UAAA,GAAA,IAAA,GAAA,KAGIL,uBAAKuD,aAAA,IAAA,GAALvD,aAAAA,IAAAA,IAAAA,KAGAC,oBAAAA,UAAAA,IAAAA,GAAAA,KAGAC,oBAAAA,UAAAA,IAAAA,GAAAA,KAGAC,qBAAAA,WAAAA,IAAAA,GAAAA,KAGAC,qBAAAA,YAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,wBAAAA,eAAAA,IAAAA;;AA+EX;;;AC/LA,SAASkD,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8IOC;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAIjBC;IAGAC;IAGAC;IAGAC;IAAAA;;SAlJVC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6GRC,WAAAA;AACE,WAAOC;;yCAE8B,KAAKR,SAAS,eAAA;;0FAEmC,KAAKA,SAAS,eAAA,mBAAkC,KAAKG,IAAI,kBAAkB,KAAKM,iBAAiB;;;;;;;;;;;;;;;EAezL;AACF,CAAA,GAAAC,UAIGC,KAAa;EAAEC,SAAS;EAAMC,cAAc;AAAgB,CAAA,GAAAC,UAG5DH,KAAc;EAAEI,MAAMC;EAASJ,SAAS;AAAK,CAAA,GAAAK,UAG7CC,MAAgB,eAAA,GAAAC,UAGhBR,KAAa;EAAEC,SAAS;EAAMC,cAAc;AAAG,CAAA,GAAAO,UAO/CC,OAAgC,UAAU;EAAEC,UAAU;AAAgB,CAAA;AAnBlE,IAAMC,SAAN,eAAqBxB,iBAAAA,aAAAA;;WAIjBC,cAGAC,iBAGAC,gBAGAC,aAAAA,YAAAA,GAAAA,GAAAA,CAAAA,SAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QATAH;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAOTqB;;;;OApB0BzB,cAAAA;;EAIjBC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAGLC;MAAAA,WAAAA;gBAAAA;;MAAAA,SAAAA,IAAAA;SAAAA,yBAAQ;;EAGRC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,wBAAO;;EAGPC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAEbsB,cAAoB;AAClBC,wBAAoB,MAAM,YAAYV,QAAQ,KAAKf,QAAQ,CAAA;EAC7D;EAGAuB,aAAaG,OAAcC,QAAgC;AACzD,QAAI,CAACA,QAAQ;AACX;IACF;AAEA,SAAK5B,QAAQ6B,OAAOD,OAAO5B,SAAS,eAAA;AAEpC8B,yBAAqB,MAAM,UAAU;MAAE9B,OAAO,KAAKA;MAAO2B;IAAM,CAAA;EAClE;;;;;AA5BK,UAAA,GAAA,IAAA,GAAA,KAII3B,uBAAK+B,aAAA,IAAA,GAAL/B,aAAAA,MAAgB,eAAA,IAAA,KAGhBC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,wBAAAA,eAAAA,IAAAA,GAAAA,KAGAC,qBAAAA,YAAAA,MAAe,EAAA,GAAA,KAiBxBM,oBAAoB,CAACkB,UAAAA;AACnB,WAAK3B,QAAQ6B,OAAO,KAAK3B,SAASF,SAAS,eAAA;AAE3C8B,2BAAqB,MAAM,UAAU;QAAE9B,OAAO,KAAKA;QAAO2B;MAAM,CAAA;IAClE;;AACF;;;ACrLA,SAASK,QAAAA,QAAMC,WAAAA,gBAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuPxBC;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAkBhBC;IAQAC;IAGAC;IAAAA;;SApOVC,UAAU;EACTC,KAAK;EACLC,YAAY;EACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmMV,CAAA,GAAAC,UAOGC,KAAa;EACZC,MAAMC;EACNC,SAAS;EACTC,WAAW;EACXC,cAAc;EACdC,SAASC,MAAMC,UAAQ;AACrB,UAAMC,OAAO;AACb,QAAIF,SAASC,YAAYA,aAAaE,QAAW;AAC/CD,WAAKE,sBAAsBH,UAAUD,IAAAA;IACvC;EACF;AACF,CAAA,GAAAK,UAQCC,MAAmB,kBAAA,GAAAC,UAGnBD,MAAmB,eAAA,GAAAE,UA4QnBC,OAAO,cAAc;EAAEC,UAAU;AAAsB,CAAA,GAAAC,UAKvDF,OAAO,cAAc;EAAEC,UAAU;AAAmB,CAAA;AA7ShD,IAAME,QAAN,eAAoB5B,iBAAAA,aAAAA;;WAkBhBC,iBAQAC,sBAGAC,mBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,QAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QAXAF;;;;;QAQAC;;;;;QAGAC;;;;;QA4QT0B;;;;;QAKAC;;;;OA9SyB9B,cAAAA;;EAGzB;EACA;EAcSC;MAAAA,YAAAA;gBAAAA;;MAAAA,UAAAA,IAAAA;SAAAA,0BAAS;;;EAGlBmB,sBAAsBH,UAAkBD,MAAoB;AAC1D,SAAKe,oBAAoBd,UAAUD,IAAAA;EACrC;EAGSd;MAAAA,iBAAAA;gBAAAA;;MAAAA,eAAAA,IAAAA;SAAAA,+BAAc;;EAGdC;MAAAA,cAAAA;gBAAAA;;MAAAA,YAAAA,IAAAA;SAAAA,4BAAW;;;;;EAKpB,IAAI6B,OAAqD;AACvD,WAAO,KAAK;EACd;;;;;EAMAC,OAAOC,OAAqB;AAC1B,QAAIA,SAAS,KAAKA,QAAQ,KAAK,MAAMC,UAAUD,UAAU,KAAKjC,WAAW;AACvE,WAAKA,YAAYiC;IACnB;EACF;EAEAE,oBAA0B;AACxB,SAAK,UAAS;EAChB;EAEAC,cAAoB;AAClB,SAAK,UAAS;EAChB;EAEAC,SAAyB;AACvB,UAAMC,UAAU,KAAK,MAAMJ,SAAS;AAEpC,WAAOK;;;;YAIC,KAAK,YAAW,CAAA;;;;;;;cAOdD,UAAU,KAAK,iBAAgB,IAAKC,qBAAmB;;;;;;;;EAQnE;EAEA,cAAW;AACT,QAAI,KAAK,MAAML,WAAW,GAAG;AAC3B,aAAOM;IACT;AAEA,WAAOD;;UAED,KAAK,MAAME,IACX,CAACC,KAAKT,UAAUM;;;;8BAIIN,UAAU,KAAKjC,YAAY,SAAS,OAAA;8BACpC,SAAS0C,IAAIC,EAAE,EAAE;yBACtBV,UAAU,KAAKjC,YAAY,IAAI,EAAC;uBAClC,CAAC4C,MAAa,KAAK,gBAAgBX,OAAOS,IAAIC,IAAIC,CAAAA,CAAAA;yBAChD,CAACA,MAAqB,KAAK,kBAAkBA,GAAGX,KAAAA,CAAAA;;gBAEzDS,IAAIG,KAAK;;WAEd,CAAA;;;EAIT;EAEA,mBAAgB;AACd,WAAON;QACH,KAAK,MAAME,IACX,CAACC,KAAKT,UAAUM;;;;iBAIP,SAASG,IAAIC,EAAE,EAAE;8BACJ,OAAOD,IAAIC,EAAE,EAAE;yBACpBV,UAAU,KAAKjC,YAAY,WAAW,QAAA;yBACtCiC,KAAAA;;yBAEA,OAAOS,IAAIC,EAAE,EAAE;;SAE/B,CAAA;;EAGP;EAEA,gBAAgBV,OAAeU,IAAYG,OAAY;AACrD,QAAIb,UAAU,KAAKjC,WAAW;AAC5B;IACF;AAEA,SAAKA,YAAYiC;AAEjB,SAAKc,cACH,IAAIC,YAAkC,cAAc;MAClDC,QAAQ;QAAEhB;QAAOU;QAAIG;MAAM;MAC3BI,SAAS;MACTC,UAAU;IACZ,CAAA,CAAA;EAEJ;EAEA,kBAAkBL,OAAsBM,cAAoB;AAC1D,QAAIC,WAAWD;AAEf,YAAQN,MAAMQ,KAAG;MACf,KAAK;AACHR,cAAMS,eAAc;AACpBF,mBAAWD,eAAe,IAAIA,eAAe,IAAI,KAAK,MAAMlB,SAAS;AACrE;MACF,KAAK;AACHY,cAAMS,eAAc;AACpBF,mBAAWD,eAAe,KAAK,MAAMlB,SAAS,IAAIkB,eAAe,IAAI;AACrE;MACF,KAAK;AACHN,cAAMS,eAAc;AACpBF,mBAAW;AACX;MACF,KAAK;AACHP,cAAMS,eAAc;AACpBF,mBAAW,KAAK,MAAMnB,SAAS;AAC/B;MACF;AACE;IACJ;AAEA,QAAImB,aAAaD,cAAc;AAC7B,WAAKpD,YAAYqD;AAGjBG,qBAAe,MAAA;AACb,cAAMC,aAAa,KAAKC,YAAYC,iBAAiB,cAAA;AACrD,cAAMC,eAAeH,aAAaJ,QAAAA;AAClCO,sBAAcC,MAAAA;MAChB,CAAA;IACF;EACF;EAEA,MAAM/B,oBAAoBgC,WAAmBC,SAAgC;AAC3E,QAAI,KAAK,cAAc;AACrB;IACF;AAEA,SAAK,eAAe;AAEpB,UAAMC,WAAW;AACjB,UAAMC,SAAS;AAEf,UAAMC,UAAU,KAAKjE;AAErB,QAAI,CAACiE,SAAS;AACZ,WAAK,eAAe;AACpB,WAAKC,cAAa;AAClB;IACF;AAGA,UAAMC,YAAY,KAAKV,YAAYW,cACjC,kCAAkCP,SAAAA,IAAa;AAEjD,UAAMQ,UAAU,KAAKZ,YAAYW,cAAc,kCAAkCN,OAAAA,IAAW;AAE5F,QAAI,CAACK,aAAa,CAACE,SAAS;AAC1B,WAAK,eAAe;AACpB,WAAKH,cAAa;AAClB;IACF;AAGA,UAAMI,cAAcL,QAAQM,sBAAqB,EAAGC;AACpDP,YAAQQ,MAAMD,SAAS,GAAGF,WAAAA;AAG1BD,YAAQI,MAAMC,UAAU;AACxBL,YAAQI,MAAME,UAAU;AAGxB,QAAI;AACF,YAAMC,UAAUT,UAAUU,QAAQ;QAAC;UAAEF,SAAS;QAAE;QAAG;UAAEA,SAAS;QAAE;SAAI;QAAEZ;QAAUC;QAAQc,MAAM;MAAW,CAAA;AACzG,YAAMF,QAAQG;AACdH,cAAQI,OAAM;IAChB,QAAQ;IAER;AAEAb,cAAUc,aAAa,cAAc,QAAA;AAGrC,UAAMC,kBAAkBb,QAAQc,aAAa,YAAA;AAE7Cd,YAAQI,MAAMC,UAAU;AACxBL,YAAQI,MAAMW,aAAa;AAC3Bf,YAAQI,MAAME,UAAU;AAGxB,SAAKN,QAAQgB;AACb,UAAMC,YAAYjB,QAAQE,sBAAqB,EAAGC;AAGlD,QAAIF,gBAAgBgB,WAAW;AAC7BrB,cAAQgB,aAAa,kBAAkB,MAAA;AACvC,WAAKhB,QAAQoB;AACbpB,cAAQQ,MAAMD,SAAS,GAAGc,SAAAA;AAC1B,YAAM,KAAK,MAAMvB,QAAAA;IACnB;AAGAM,YAAQI,MAAMW,aAAa;AAC3Bf,YAAQI,MAAME,UAAU;AAExB,SAAKN,QAAQgB;AAEb,QAAI;AACF,YAAME,SAASlB,QAAQQ,QAAQ;QAAC;UAAEF,SAAS;QAAE;QAAG;UAAEA,SAAS;QAAE;SAAI;QAAEZ;QAAUC;QAAQc,MAAM;MAAW,CAAA;AACtG,YAAMS,OAAOR;AACbQ,aAAOP,OAAM;IACf,QAAQ;IAER;AAGAX,YAAQI,MAAMC,UAAU;AACxBL,YAAQI,MAAMW,aAAa;AAC3Bf,YAAQI,MAAME,UAAU;AAExB,QAAIO,oBAAoB,UAAU;AAChCb,cAAQY,aAAa,cAAc,QAAA;IACrC;AAEAhB,YAAQQ,MAAMD,SAAS;AACvBP,YAAQuB,gBAAgB,gBAAA;AACxB,SAAK,eAAe;EACtB;EAEA,MAAMC,IAAU;AACd,WAAO,IAAIC,QAAQ,CAACC,YAAYC,WAAWD,SAASF,EAAAA,CAAAA;EACtD;EAEA,YAAS;AACP,UAAM3D,OAAwC,CAAA;AAE9C,eAAW+D,SAASC,MAAMC,KAAK,KAAKC,QAAQ,GAAG;AAC7C,YAAMC,OAAOJ,MAAMV,aAAa,MAAA;AAChC,UAAIc,MAAMC,WAAW,MAAA,GAAS;AAC5B,cAAMxD,KAAKuD,KAAKE,QAAQ,QAAQ,EAAA;AAChC,cAAMvD,QAAQiD,MAAMV,aAAa,gBAAA,KAAqBzC;AACtDZ,aAAKsE,KAAK;UAAE1D;UAAIE;QAAM,CAAA;MACxB;IACF;AAEA,SAAK,QAAQd,KAAKuE,MAAM,GAAG,CAAA;AAE3B,QAAI,KAAKtG,aAAa,KAAK,MAAMkC,UAAU,KAAK,MAAMA,SAAS,GAAG;AAChE,WAAKlC,YAAY;IACnB;EACF;EAGA4B,qBAA2B;AACzB,SAAK2E,sBAAqB;EAC5B;EAGA1E,sBAA4B;AAC1B,SAAK,UAAS;AACd,SAAKsC,cAAa;EACpB;EAEQoC,wBAA8B;AACpC,UAAMC,SAAS,KAAK9C,YAAYW,cAAc,iBAAA;AAE9C,QAAI,CAACmC,QAAQ;AACX;IACF;AAEA,UAAMC,aAAa,KAAK/C,YAAYW,cAAc,qBAAA;AAClD,UAAMqC,YAAYC,QAAQF,YAAYG,cAAc;MAAEC,SAAS;IAAK,CAAA,EAAG3E,SAAS,CAAA;AAChF4E,wBAAoBN,QAAQ,oBAAoBE,SAAAA;EAClD;;;;;AA7TK,UAAA,GAAA,IAAA,GAAA,KAGL,SAAKK,aAAA,IAAA,GAAoC,CAAA,IAAE,KAC3C,eAAe,OAAA,KAcN/G,0BAAAA,gBAAAA,MAAoB,CAAA,GAAA,KAQpBC,+BAAAA,qBAAAA,IAAAA,GAAAA,KAGAC,4BAAAA,kBAAAA,IAAAA;;AAiSX;;;ACrjBA,SAAS8G,QAAAA,cAAY;;;ACAd,IAAMC,cAAN,cAA0BC,YAAAA;EAC/BC,oBAA0B;AACxB,SAAKC,SAAS;AACd,QAAI,CAAC,KAAKC,aAAa,MAAA,GAAS;AAC9B,WAAKC,aAAa,QAAQ,QAAA;IAC5B;EACF;AACF;AAEA,IAAI,CAACC,eAAeC,IAAI,cAAA,GAAiB;AACvCD,iBAAeE,OAAO,gBAAgBR,WAAAA;AACxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ID0FgCS;IAAAA;IAAAA;IAAAA;IAarBC;IAGAC;IAGAC;IAAAA;AAnGX,IAAMC,gBAAgB,uBAAA;AACpB,MAAIC,UAAU;AACd,SAAO,MAAA;AACLA,eAAW;AACX,WAAO,qBAAqBA,OAAAA;EAC9B;AACF,GAAA;AAEA,IAAMC,eAAe,uBAAA;AACnB,MAAID,UAAU;AACd,SAAO,MAAA;AACLA,eAAW;AACX,WAAO,sBAAsBA,OAAAA;EAC/B;AACF,GAAA;;SAECE,UAAU;EACTC,KAAK;EACLC,YAAY;EACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqDRC,WAAAA;AACE,WAAOC;;;;;EAKT;AACF,CAAA,GAAAC,UAIGC,KAAgC;EAC/BC,SAAS;EACTC,cAAc;EACdC,SAA2BC,MAAMC,UAAQ;AACvC,QAAID,SAASC,UAAU;AACrB;IACF;AACA,SAAKC,2BAA0B;EACjC;AACF,CAAA,GAAAC,UAGCC,MAAmB,gBAAA,GAAAC,UAGnBD,MAAuB,sBAAA;AAlBnB,IAAME,aAAN,eAAyBxB,iBAAAA,aAAAA;;WAarBC,cAGAC,oBAGAC,oBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,aAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QANAF;;;;;QAGAC;;;;;QAGAC;;;;OAnBqBH,cAAAA;;EAarBC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAGLC;MAAAA,eAAAA;gBAAAA;;MAAAA,aAAAA,IAAAA;SAAAA,6BAAY;;EAGZC;MAAAA,cAAAA;gBAAAA;;MAAAA,YAAAA,IAAAA;SAAAA,4BAAW;;EAEpB;EACA;EACA;EACA;EAIAsB,oBAA0B;AACxB,SAAK,oBAAmB;EAC1B;EAEAC,uBAA6B;AAC3B,SAAK,oBAAmB;AACxB,SAAK,iBAAgB;EACvB;EAEAC,cAAoB;AAClB,UAAMC,QAAQ,KAAK1B;AAEnB,QAAI0B,OAAO;AACT,UAAI,CAACA,MAAMC,IAAI;AACbD,cAAMC,KAAKvB,aAAAA;MACb;AACAsB,YAAME,WAAW;AACjBF,YAAMG,aAAa,QAAQ,YAAA;IAC7B;AAEA,SAAK,oBAAmB;AAExB,QAAI,CAAC,KAAK,qBAAqB;AAC7BC,qBAAe,MAAA;AACb,aAAK,aAAY;MACnB,CAAA;IACF,OAAO;AACL,WAAKZ,2BAA0B;IACjC;EACF;EAEA,sBAAmB;AACjB,UAAMa,OAAO,KAAK9B;AAElB,QAAI8B,SAAS,KAAK,cAAc;AAC9B;IACF;AAEA,QAAI,KAAK,cAAc;AACrB,WAAK,aAAaC,oBAAoB,cAAc,KAAK,iBAAiB;IAC5E;AAEA,QAAID,MAAM;AACRA,WAAKE,iBAAiB,cAAc,KAAK,iBAAiB;IAC5D;AAEA,SAAK,eAAeF,QAAQ;EAC9B;EAEA,sBAAmB;AACjB,QAAI,CAAC,KAAK,cAAc;AACtB;IACF;AAEA,SAAK,aAAaC,oBAAoB,cAAc,KAAK,iBAAiB;AAC1E,SAAK,eAAe;EACtB;EAEA,eAAY;AACV,UAAME,WAAW,KAAKjC,aAAakC,iBAAiB;MAAEC,SAAS;IAAK,CAAA,KAAM,CAAA;AAC1E,UAAMC,WAAWH,SAASI,OAAO,CAACC,SAA8BA,gBAAgBzC,WAAAA;AAEhF,SAAK,uBAAuB,KAAK,QAAQ;AAEzC,UAAM0C,UAAwB,CAAA;AAE9BH,aAASI,QAAQ,CAACC,YAAAA;AAChB,UAAIA,QAAQC,aAAa,oBAAA,KAAyBD,QAAQE,aAAa,MAAA,MAAY,aAAa;AAC9F;MACF;AAEA,YAAM7C,QAAQ,KAAK,oBAAoB2C,OAAAA;AACvC,YAAMG,QAAQ,KAAK,oBAAoBH,SAAS3C,KAAAA;AAChD,YAAM4B,KAAKe,QAAQf,MAAMe,QAAQf,GAAGmB,KAAI,EAAGC,SAAS,IAAIL,QAAQf,KAAKzB,cAAAA;AAErE,UAAI,CAACwC,QAAQf,IAAI;AACfe,gBAAQf,KAAKA;MACf;AAEAe,cAAQb,aAAa,QAAQ,QAAA;AAC7Ba,cAAQb,aAAa,iBAAiB,OAAA;AACtCa,cAAQb,aAAa,WAAW,KAAK9B,UAAUA,QAAQ,YAAY,MAAA;AACnE2C,cAAQM,QAAQC,SAAS;AACzBP,cAAQd,WAAW;AAEnB,YAAMsB,WAAW;QACfC,OAAO,CAACC,UAAAA;AACNA,gBAAMC,eAAc;AACpBD,gBAAME,gBAAe;AACrB,eAAK,cAAcvD,OAAO8C,OAAOO,KAAAA;QACnC;QACAG,SAAS,CAACH,UAAAA;AACR,cAAIA,MAAMI,QAAQ,WAAWJ,MAAMI,QAAQ,KAAK;AAC9CJ,kBAAMC,eAAc;AACpB,iBAAK,cAActD,OAAO8C,OAAOO,KAAAA;UACnC;QACF;MACF;AAEAV,cAAQT,iBAAiB,SAASiB,SAASC,OAAO;QAAEM,SAAS;MAAM,CAAA;AACnEf,cAAQT,iBAAiB,WAAWiB,SAASK,OAAO;AAEpDf,cAAQkB,KAAK;QAAEhB;QAAS3C;QAAO8C;QAAOlB;QAAIuB;MAAS,CAAA;IACrD,CAAA;AAEA,SAAK,WAAWV;AAChB,SAAK,sBAAsBA,QAAQO,SAAS;AAE5C,QAAI,KAAKhD,UAAU,QAAQyC,QAAQO,SAAS,GAAG;AAC7C,YAAMY,cAAcnB,QAAQoB,KAC1B,CAACC,WACCA,OAAOnB,QAAQC,aAAa,UAAA,KAC5BkB,OAAOnB,QAAQM,QAAQc,aAAa,UACpCD,OAAOnB,QAAQE,aAAa,eAAA,MAAqB,MAAA;AAGrD,UAAIe,aAAa;AACf,aAAK5D,QAAQ4D,YAAY5D;MAC3B;IACF;AAEA,SAAKmB,2BAA0B;EACjC;EAEA,mBAAgB;AACd,SAAK,uBAAuB,KAAK,QAAQ;AACzC,SAAK,WAAW,CAAA;AAChB,SAAK,sBAAsB;EAC7B;EAEA,uBAAuBsB,SAAqB;AAC1CA,YAAQC,QAAQ,CAACoB,WAAAA;AACfA,aAAOnB,QAAQV,oBAAoB,SAAS6B,OAAOX,SAASC,KAAK;AACjEU,aAAOnB,QAAQV,oBAAoB,WAAW6B,OAAOX,SAASK,OAAO;AACrEM,aAAOnB,QAAQM,QAAQC,SAAS;AAChCY,aAAOnB,QAAQb,aAAa,iBAAiB,OAAA;AAC7CgC,aAAOnB,QAAQd,WAAW;IAC5B,CAAA;EACF;EAEAV,6BAAmC;AACjC,QAAI,CAAC,KAAK,qBAAqB;AAC7B;IACF;AAEA,QAAI6C,gBAA+B;AAEnC,UAAMvB,UAAU,KAAK;AAErBA,YAAQC,QAAQ,CAACoB,WAAAA;AACf,YAAMG,aAAa,KAAKjE,UAAU,QAAQ8D,OAAO9D,UAAU,KAAKA;AAChE8D,aAAOnB,QAAQb,aAAa,iBAAiBmC,aAAa,SAAS,OAAA;AACnEH,aAAOnB,QAAQM,QAAQC,SAASe,aAAa,SAAS;AACtDH,aAAOnB,QAAQd,WAAWoC,aAAa,IAAI;AAC3CH,aAAOnB,QAAQb,aAAa,WAAWmC,aAAa,YAAY,MAAA;AAEhE,UAAIA,YAAY;AACdD,wBAAgBF,OAAOhB;MACzB;IACF,CAAA;AAEA,QAAI,CAACkB,eAAe;AAClB,YAAME,WAAWzB,QAAQ,CAAA;AACzB,UAAIyB,UAAU;AACZA,iBAASvB,QAAQd,WAAW;MAC9B;IACF;AACA,UAAMsC,WAAWC,QAAQ,KAAKpE,SAASgE,aAAAA;AACvC,SAAKK,gBAAgB,kBAAkBF,QAAAA;EACzC;EAEA,cAAcnE,OAAe8C,OAAewB,aAAkB;AAC5DA,gBAAYhB,eAAc;AAC1BgB,gBAAYf,gBAAe;AAE3B,UAAMgB,gBAAgB,KAAKvE;AAC3B,SAAKA,QAAQA;AAEb,QAAIuE,kBAAkBvE,OAAO;AAC3B,WAAK,qBAAqBA,OAAO8C,OAAOwB,WAAAA;IAC1C;EACF;EAEA,oBAAoB3B,SAAoB;AACtC,UAAM6B,gBAAgB7B,QAAQE,aAAa,OAAA,KAAYF,QAAQE,aAAa,YAAA,KAAiBF,QAAQM,QAAQjD;AAE7G,QAAIwE,iBAAiBA,cAAczB,KAAI,EAAGC,SAAS,GAAG;AACpD,aAAOwB,cAAczB,KAAI;IAC3B;AAEA,UAAM0B,OAAO9B,QAAQ+B,aAAa3B,KAAAA;AAElC,QAAI0B,QAAQA,KAAKzB,SAAS,GAAG;AAC3B,aAAOyB;IACT;AAEA,UAAMP,WAAW/D,cAAAA;AACjBwC,YAAQM,QAAQjD,QAAQkE;AACxB,WAAOA;EACT;EAEA,oBAAoBvB,SAAsBuB,UAAgB;AACxD,UAAMS,gBAAgBhC,QAAQE,aAAa,YAAA,KAAiBF,QAAQE,aAAa,YAAA;AAEjF,QAAI8B,iBAAiBA,cAAc5B,KAAI,EAAGC,SAAS,GAAG;AACpD,aAAO2B,cAAc5B,KAAI;IAC3B;AAEA,UAAM0B,OAAO9B,QAAQ+B,aAAa3B,KAAAA;AAElC,QAAI0B,QAAQA,KAAKzB,SAAS,GAAG;AAC3B,aAAOyB;IACT;AAEA,WAAOP;EACT;EAEA,qBAAqBlE,OAAe8C,OAAeO,OAAY;AAC7DuB,yBAAqB,MAAM,UAAU;MAAE5E;MAAOqD;IAAM,CAAA;AAEpD,SAAKwB,cACH,IAAIC,YAAY,gBAAgB;MAC9BC,QAAQ;QAAE/E;QAAO8C;QAAOO;MAAM;MAC9B2B,SAAS;MACTC,UAAU;IACZ,CAAA,CAAA;EAEJ;;;;;AA/PK,UAAA,GAAA,IAAA,GAAA,KAaIjF,uBAAKkF,aAAA,IAAA,GAALlF,aAAAA,MAAuB,IAAA,IAAA,KAGvBC,6BAAAA,mBAAAA,IAAAA,GAAAA,KAGAC,4BAAAA,mBAAAA,IAAAA,GAAAA,KAET,WAAyB,CAAA,GAAE,KAC3B,eAAuC,MAAA,KACvC,sBAAsB,OAAA,KACtB,oBAAoB,MAAA;AAClB,WAAK,aAAY;IACnB;;AAsOF;;;AErWA,SAASiF,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0PWC;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAoBrBC;IAGAC;IAGAC;IAGAC;IAGAC;IAAAA;;SAjRVC,UAAU;EACTC,KAAK;EACLC,YAAY;EACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqNRC,WAAAA;AACE,WAAOC;qEAC0D,KAAKV,OAAO,cAAc,KAAKG,QAAQ;;uCAErE,KAAKF,IAAI,UAAU,KAAKC,KAAK,aAAa,KAAKF,OAAO,cAAc,KAAKG,QAAQ;kDACtE,KAAKQ,QAAQ;;;;;;;;;0BASrC,KAAKA,QAAQ;;;;;;;;;EASrC;AACF,CAAA,GAAAC,UAIGC,KAA0B;EACzBC,MAAMC;EACNC,SAAS;EACTC,SAA2BC,MAAa;AACtC,QAAIA,QAAQ,KAAKjB,MAAM;AACrB,YAAMkB,OAAO,KAAKC,QAAQ,MAAA;AAC1B,YAAMC,OAAOF,QAAS,KAAKG,YAAW;AACtC,YAAMC,SAASC,MAAMC,KAAKJ,KAAKK,iBAAiB,0BAA0B,KAAKzB,IAAI,IAAI,CAAA;AAEvFsB,aAAOI,QAAQ,CAACC,UAAAA;AACd,YAAIA,UAAU,QAAQA,MAAM5B,SAAS;AACnC4B,gBAAM5B,UAAU;QAClB;MACF,CAAA;IACF;EACF;AACF,CAAA,GAAA6B,UAGChB,KAAoB;EAAEG,SAAS;AAAK,CAAA,GAAAc,UAGpCjB,KAAoB;EAAEG,SAAS;AAAK,CAAA,GAAAe,UAGpClB,KAAc;EAAEC,MAAMC;EAASC,SAAS;AAAK,CAAA,GAAAgB,UAG7CC,MAAyB,QAAA,GAAAC,UAwDzBC,OAAkD,SAAS;EAAEC,UAAU;AAAS,CAAA;AAvF5E,IAAMC,aAAN,eAAyBtC,iBAAAA,aAAAA;;WAoBrBC,gBAGAC,aAGAC,cAGAC,iBAGAC,gBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,aAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QAZAJ;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAwDTkC;;;;OAxF8BvC,cAAAA;;EAoBrBC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,wBAAO;;EAGPC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAGJC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAGLC;MAAAA,WAAAA;gBAAAA;;MAAAA,SAAAA,IAAAA;SAAAA,yBAAQ;;EAGRC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,wBAAO;;EAOhBmC,oBAA0B;AACxB,SAAKC,eAAe,KAAKxC;EAC3B;EAEAyC,cAAoB;AAClB,QAAI,CAAC,KAAKrC,SAAS;AACjB;IACF;AAEA,QAAI,KAAKsC,cAAc;AACrB,WAAKA,eAAe;AACpB,WAAKF,eAAe,KAAKxC;IAC3B;AAEA,UAAM2C,UAAU,OAAO,KAAKH,iBAAiB,eAAe,KAAKxC,YAAY,KAAKwC;AAClF,QAAIG,SAAS;AACX,WAAKC,kBAAkB,KAAK5C,OAAO;AACnC,WAAKwC,eAAe,KAAKxC;IAC3B;AAEA,UAAMI,UAAU,KAAKA;AACrBA,YAAQyC,aAAa,gBAAgB,KAAK7C,UAAU,SAAS,OAAA;AAC7DI,YAAQD,WAAWY,QAAQ,KAAKZ,QAAQ;AACxC2C,wBAAoB,MAAM,YAAY/B,QAAQ,KAAKZ,QAAQ,CAAA;EAC7D;EAEQyC,kBAAkB5C,SAAwB;AAChD,UAAM+C,QAAQ,KAAKC,YAAYC,cAAc,kBAAA;AAC7C,UAAMC,MAAM,KAAKF,YAAYC,cAAc,0BAAA;AAC3C,QAAI,CAACF,SAAS,CAACG,KAAK;AAClB;IACF;AAEAH,UAAMI,UAAUC,OAAO,gBAAgB,gBAAA;AACvCF,QAAIC,UAAUC,OAAO,gBAAgB,gBAAA;AAErC,UAAMC,YAAYrD,UAAU,iBAAiB;AAC7C+C,UAAMI,UAAUG,IAAID,SAAAA;AACpBH,QAAIC,UAAUG,IAAID,SAAAA;AAElB,UAAME,WAAW;AAEjBC,eAAW,MAAA;AACTT,YAAMI,UAAUC,OAAOC,SAAAA;AACvBH,UAAIC,UAAUC,OAAOC,SAAAA;IACvB,GAAGE,QAAAA;EACL;EAGAjB,YAAYmB,OAAyB;AACnC,QAAI,KAAKtD,YAAY,KAAKH,SAAS;AACjCyD,YAAMC,eAAc;AACpBD,YAAME,gBAAe;AAErB;IACF;AAEA,SAAK3D,UAAU;AAEf4D,yBAAqB,MAAM,SAAS;MAAE1D,OAAO,KAAKF;MAASyD;IAAM,CAAA;EACnE;;;;;AAnGK,UAAA,GAAA,IAAA,GAAA,KAoBIzD,yBAAO6D,aAAA,IAAA,GAAP7D,eAAAA,IAAAA,IAAAA,KAGAC,qBAAAA,YAAAA,IAAAA,GAAAA,KAGAC,sBAAAA,aAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,wBAAAA,eAAAA,IAAAA,GAAAA,KAGDsC,eAAe,MAAA,KAEvB/B,WAAmB,OAAOmD,OAAOC,WAAU,CAAA;;AA+D7C;;;AC5VA,SAASC,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsIOC;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAIjBC;IAGAC;IAGAC;IAGAC;IAGAC;IAGAC;IAGAC;IAAAA;;SAnJVC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkGRC,WAAAA;AACE,WAAOC;;;;;iBAKM,KAAKV,OAAO,CAAA;iBACZ,KAAKC,OAAO,GAAA;kBACX,KAAKC,QAAQ,CAAA;mBACZS,OAAO,KAAKZ,SAAS,CAAA,CAAA;sBAClB,KAAKI,QAAQ;2BACR,KAAKA,QAAQ;;;;;;;sBAOlBS,QAAQ,KAAKT,QAAQ,CAAA;mBACxB,KAAKJ,UAAU,QAAQ,KAAKA,UAAUc,SAAY,KAAKF,OAAO,KAAKZ,KAAK,CAAA;;;;EAIzF;AACF,CAAA,GAAAe,UAIGC,KAAoB;EAAEC,MAAMC;EAAQC,SAAS;AAAK,CAAA,GAAAC,UAGlDJ,KAAoB;EAAEC,MAAMC;EAAQC,SAAS;AAAK,CAAA,GAAAE,UAGlDL,KAAoB;EAAEC,MAAMC;EAAQC,SAAS;AAAK,CAAA,GAAAG,UAGlDN,KAAoB;EAAEC,MAAMC;EAAQC,SAAS;AAAK,CAAA,GAAAI,UAGlDP,KAAc;EAAEC,MAAMJ;EAASM,SAAS;AAAK,CAAA,GAAAK,UAG7CC,MAAwB,OAAA,GAAAC,UAGxBD,MAAmB,YAAA,GAAAE,SAuBnBC,OAAwC,SAAS;EAAEC,UAAU;AAAsB,CAAA,GAAAC,SAiBnFF,OAAwC,UAAU;EAAEC,UAAU;AAAsB,CAAA,GAAAE,UAepFH,OAAqE,SAAS;EAC7EC,UAAU;EACVG,MAAM,CAACC,UAAUA,iBAAiBC,eAAe,OAAQD,MAAsBE,QAAQnC,UAAU;AACnG,CAAA,GAAAoC,WAcCR,OAAqE,UAAU;EAC9EC,UAAU;EACVG,MAAM,CAACC,UAAUA,iBAAiBC,eAAe,OAAQD,MAAsBE,QAAQnC,UAAU;AACnG,CAAA;AAhGK,IAAMqC,SAAN,eAAqBtC,iBAAAA,aAAAA;;WAIjBC,eAGAC,YAGAC,YAGAC,aAGAC,iBAGAC,gBAGAC,oBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,SAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QAlBAN;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAuBTgC;;;;;QAiBAC;;;;;QAkBAC;;;;;QAiBAC;;;;OAjG0B1C,cAAAA;;EAIjBC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAGLC;MAAAA,MAAAA;gBAAAA;;MAAAA,IAAAA,IAAAA;SAAAA,oBAAG;;EAGHC;MAAAA,MAAAA;gBAAAA;;MAAAA,IAAAA,IAAAA;SAAAA,oBAAG;;EAGHC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAGJC;MAAAA,WAAAA;gBAAAA;;MAAAA,SAAAA,IAAAA;SAAAA,yBAAQ;;EAGRC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,wBAAO;;EAGPC;MAAAA,eAAAA;gBAAAA;;MAAAA,aAAAA,IAAAA;SAAAA,6BAAY;;EAErBoC,cAAoB;AAClB,QAAI,CAAC,KAAKrC,SAAS;AACjB;IACF;AAEA,UAAMA,UAAU,KAAKA;AACrB,UAAML,QAAQ,KAAKA,SAAS;AAE5BK,YAAQL,QAAQY,OAAOZ,KAAAA;AACvBK,YAAQJ,MAAM,KAAKA,QAAQ,QAAQ,KAAKA,QAAQa,SAAY,KAAKF,OAAO,KAAKX,GAAG;AAChFI,YAAQH,MAAM,KAAKA,QAAQ,QAAQ,KAAKA,QAAQY,SAAY,KAAKF,OAAO,KAAKV,GAAG;AAChFG,YAAQF,OAAO,KAAKA,SAAS,QAAQ,KAAKA,SAASW,SAAY,KAAKF,OAAO,KAAKT,IAAI;AACpFE,YAAQY,OAAO;AACfZ,YAAQsC,aAAa,QAAQ,SAAA;AAC7BtC,YAAQD,WAAWS,QAAQ,KAAKT,QAAQ;AAExCwC,wBAAoB,MAAM,YAAY/B,QAAQ,KAAKT,QAAQ,CAAA;AAC3D,SAAKyC,eAAc;EACrB;EAGAP,iBAAiBL,OAAca,QAAwC;AACrE,QAAI,CAACA,QAAQ;AACX;IACF;AAEA,UAAMC,eAAeC,aAAaF,OAAO9C,KAAK;AAC9C,SAAKA,QAAQ+C;AACb,SAAKF,eAAc;AAEnB,QAAI,KAAKvC,cAAc;AACrB,WAAKA,aAAaN,QAAQ+C,iBAAiB,OAAO,KAAKnC,OAAOmC,YAAAA;IAChE;AAEAE,yBAAqB,MAAM,SAAS;MAAEjD,OAAO,KAAKA;MAAOiC;IAAM,CAAA;EACjE;EAGAM,kBAAkBN,OAAca,QAAwC;AACtE,QAAIA,QAAQ;AACV,YAAMC,eAAeC,aAAaF,OAAO9C,KAAK;AAC9C,WAAKA,QAAQ+C;AACb,WAAKF,eAAc;AAEnB,UAAI,KAAKvC,cAAc;AACrB,aAAKA,aAAaN,QAAQ+C,iBAAiB,OAAO,KAAKnC,OAAOmC,YAAAA;MAChE;IACF;AAEAE,yBAAqB,MAAM,UAAU;MAAEjD,OAAO,KAAKA;MAAOiC;IAAM,CAAA;EAClE;EAMAO,iBAAiBP,OAAsD;AACrE,UAAMiB,WAAWjB,MAAME,QAAQnC,SAAS;AACxC,UAAM+C,eAAeC,aAAaE,QAAAA;AAClC,SAAKlD,QAAQ+C;AACb,SAAKF,eAAc;AAEnB,QAAI,KAAKxC,SAAS;AAChB,WAAKA,QAAQL,QAAQY,OAAOmC,gBAAgB,CAAA;IAC9C;AAEAE,yBAAqB,MAAM,SAAS;MAAEjD,OAAO,KAAKA;MAAOiC,OAAOA,MAAME,QAAQF,SAASA;IAAM,CAAA;EAC/F;EAMAQ,kBAAkBR,OAAsD;AACtE,UAAMiB,WAAWjB,MAAME,QAAQnC,SAAS;AACxC,UAAM+C,eAAeC,aAAaE,QAAAA;AAClC,SAAKlD,QAAQ+C;AACb,SAAKF,eAAc;AAEnB,QAAI,KAAKxC,SAAS;AAChB,WAAKA,QAAQL,QAAQY,OAAOmC,gBAAgB,CAAA;IAC9C;AAEAE,yBAAqB,MAAM,UAAU;MAAEjD,OAAO,KAAKA;MAAOiC,OAAOA,MAAME,QAAQF,SAASA;IAAM,CAAA;EAChG;EAEAY,iBAAuB;AACrB,QAAI,CAAC,KAAKxC,SAAS;AACjB;IACF;AAGA,UAAML,QAAQkB,OAAO,KAAKlB,KAAK,KAAK;AACpC,UAAMC,MAAMiB,OAAO,KAAKjB,GAAG,KAAK;AAChC,UAAMC,MAAMgB,OAAO,KAAKhB,GAAG,KAAK;AAChC,UAAMiD,UAAUjD,QAAQD,MAAM,KAAMD,QAAQC,QAAQC,MAAMD,OAAQ;AAClE,SAAKI,QAAQ+C,MAAMC,YAAY,cAAc,GAAGC,KAAKpD,IAAI,GAAGoD,KAAKrD,IAAI,KAAKkD,OAAAA,CAAAA,CAAAA,GAAY;EACxF;;;;;AAzHK,UAAA,GAAA,IAAA,GAAA,KAIInD,uBAAKuD,aAAA,IAAA,GAALvD,cAAAA,IAAAA,IAAAA,KAGAC,oBAAAA,WAAAA,IAAAA,GAAAA,KAGAC,oBAAAA,WAAAA,IAAAA,GAAAA,KAGAC,qBAAAA,YAAAA,IAAAA,GAAAA,KAGAC,yBAAAA,gBAAAA,IAAAA,GAAAA,KAGAC,wBAAAA,eAAAA,IAAAA,GAAAA,KAGAC,6BAAAA,mBAAAA,IAAAA;;AAoGX;;;AClQA,SAASkD,QAAAA,cAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6GfC;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAShBC;IAGAC;IAAAA;AAzFX,IAAMC,oBAAmB,CAACC,YAAAA;AACxB,MAAI,OAAOA,QAAQH,UAAU,YAAY,OAAOG,QAAQH,UAAU,UAAU;AAC1E,WAAOG,QAAQH;EACjB;AAEA,MAAI,OAAOG,QAAQC,YAAY,WAAW;AACxC,WAAOD,QAAQC;EACjB;AAEA,MAAI,kBAAkBD,SAAS;AAC7B,UAAME,OAAQF,QAAoBG,aAAa,OAAA;AAC/C,QAAID,SAAS,MAAM;AACjB,aAAOA;IACT;EACF;AAEA,SAAOF,QAAQI,aAAaC,KAAAA,KAAU;AACxC;AAEA,IAAMC,iBAAiB,CAACN,YAAAA;AACtB,MAAI,OAAOA,QAAQO,SAAS,YAAYP,QAAQO,MAAM;AACpD,WAAOP,QAAQO;EACjB;AACA,SAAOP,QAAQG,eAAe,MAAA,KAAW;AAC3C;;SAqCCK,UAAU;EACTC,KAAK;EACLC,YAAY;EACZC,QAAQ;;;;;;;;;;;;AAYV,CAAA,GAAAC,UASGC,KAAoB;EAAEC,SAAS;AAAK,CAAA,GAAAC,UAGpCC,MAAuB,MAAA,GAAAC,UAoGvBC,OAA+C,SAAS;EAAEC,QAAQ,CAACC,SAASA;AAAK,CAAA,GAAAC,UAKjFH,OAA+C,UAAU;EAAEC,QAAQ,CAACC,SAASA;AAAK,CAAA,GAAAE,UAKlFJ,OAA+CK,sBAAsB;EAAEJ,QAAQ,CAACC,SAASA;AAAK,CAAA;AAzH1F,IAAMI,QAAN,eAAoB5B,iBAAAA,aAAAA;;WAShBC,eAGAC,mBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,QAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QAHAD;;;;;QAGAC;;;;;QAoGT2B;;;;;QAKAC;;;;;QAKAC;;;;OA1HyB/B,cAAAA;;EAGzB;EACA;EACA;EACA;EAGSC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAGLC;MAAAA,cAAAA;gBAAAA;;MAAAA,YAAAA,IAAAA;SAAAA,4BAAW;;;;;EAKpB,IAAI8B,QAA2C;AAC7C,WAAO;MAAE,GAAG,KAAK;IAAO;EAC1B;;;;;;EAOAC,IAAItB,MAAuB;AACzB,WAAO,KAAK,OAAOA,IAAAA;EACrB;;;;;;EAOAuB,IAAIvB,MAAcV,OAAsB;AACtC,UAAMkC,UAAU,KAAK,UAAUF,IAAItB,IAAAA;AACnC,QAAIwB,SAAS;AAEX,UAAI,WAAWA,SAAS;AACrBA,gBAA+BlC,QAAQA;MAC1C,WAAW,OAAOA,UAAU,aAAa,aAAakC,SAAS;AAC5DA,gBAAiC9B,UAAUJ;MAC9C;IACF;AAEA,SAAK,aAAaU,MAAMV,OAAO,IAAImC,MAAM,cAAA,CAAA;EAC3C;EAUAC,UAAUC,gBAA8CC,UAAmD;AACzG,QAAI5B;AACJ,QAAI6B;AAEJ,QAAI,OAAOF,mBAAmB,YAAY;AACxC3B,aAAO;AACP6B,WAAKF;IACP,OAAO;AACL3B,aAAO2B;AACP,UAAI,CAACC,UAAU;AACb,cAAM,IAAIE,MAAM,4DAAA;MAClB;AACAD,WAAKD;IACP;AAEA,QAAI,CAAC,KAAK,aAAaG,IAAI/B,IAAAA,GAAO;AAChC,WAAK,aAAauB,IAAIvB,MAAM,oBAAIgC,IAAAA,CAAAA;IAClC;AACA,SAAK,aAAaV,IAAItB,IAAAA,GAAOiC,IAAIJ,EAAAA;AAEjC,WAAO;MACLK,aAAa,MAAA;AACX,aAAK,aAAaZ,IAAItB,IAAAA,GAAOmC,OAAON,EAAAA;MACtC;IACF;EACF;;;;EAKAO,QAAc;AACZ,eAAW,CAACpC,MAAMV,KAAAA,KAAU+C,OAAOC,QAAQ,KAAK,aAAa,GAAG;AAC9D,WAAKf,IAAIvB,MAAMV,KAAAA;IACjB;EACF;EAEAiD,oBAA0B;AACxB,SAAK,QAAO;AACZ,SAAKhD,aAAaiD,iBAAiB,cAAc,KAAK,iBAAiB;EACzE;EAEAC,uBAA6B;AAC3B,SAAK,QAAO;AACZ,SAAKlD,aAAamD,oBAAoB,cAAc,KAAK,iBAAiB;EAC5E;EAEAC,SAAyB;AACvB,WAAOC;;;;;EAKT;EAGA1B,oBAAoB2B,OAA8C;AAChE,SAAK,oBAAoBA,KAAAA;EAC3B;EAGA1B,qBAAqB0B,OAA8C;AACjE,SAAK,oBAAoBA,KAAAA;EAC3B;EAGAzB,oBAAoByB,OAA8C;AAChE,SAAK,oBAAoBA,KAAAA;EAC3B;EAEA,oBAAoBA,OAA8C;AAChE,QAAI,YAAYA,SAASA,MAAMC,QAAQ9C,MAAM;AAC3C,WAAK,aAAa6C,MAAMC,OAAO9C,MAAM6C,MAAMC,OAAOxD,OAAOuD,KAAAA;AACzD;IACF;AAEA,QAAI,EAAEA,MAAMjC,kBAAkBmC,UAAU;AACtC;IACF;AAEA,UAAMvB,UAAUqB,MAAMjC;AACtB,UAAMZ,OAAOD,eAAeyB,OAAAA;AAE5B,QAAI,CAACxB,QAAQ,CAAC,KAAK,UAAU+B,IAAI/B,IAAAA,GAAO;AACtC;IACF;AAEA,UAAMV,QAAQE,kBAAiBgC,OAAAA;AAC/B,SAAK,aAAaxB,MAAMV,OAAOuD,KAAAA;EACjC;EAEA;EAKA,UAAO;AACL,UAAMG,OAAO,KAAKzD;AAClB,QAAI,CAACyD,MAAM;AACT;IACF;AAEA,UAAMC,eAAe,CAACC,OAAAA;AACpB,YAAMC,WAA6B,CAAA;AACnC,YAAMnD,OAAOD,eAAemD,EAAAA;AAE5B,UAAIlD,MAAM;AACRmD,iBAASC,KAAKF,EAAAA;MAChB;AAEA,UAAIA,GAAGG,YAAY;AACjB,mBAAWC,SAASJ,GAAGG,WAAWE,iBAAiB,QAAA,GAAW;AAC5D,gBAAMC,YAAYzD,eAAeuD,KAAAA;AACjC,cAAIE,WAAW;AACbL,qBAASC,KAAKE,KAAAA;UAChB;QACF;MACF;AAEA,iBAAWA,SAASJ,GAAGK,iBAAiB,QAAA,GAAW;AACjD,cAAMC,YAAYzD,eAAeuD,KAAAA;AACjC,YAAIE,WAAW;AACbL,mBAASC,KAAKE,KAAAA;QAChB;MACF;AAEA,aAAOH;IACT;AAEA,SAAK,UAAUM,MAAK;AACpB,SAAK,SAAS,CAAC;AAEf,UAAMC,WAAWV,KAAKW,iBAAiB;MAAEC,SAAS;IAAK,CAAA;AAEvD,eAAWnE,WAAWiE,UAAU;AAC9B,YAAMP,WAAWF,aAAaxD,OAAAA;AAC9B,iBAAW+B,WAAW2B,UAAU;AAC9B,cAAMnD,OAAOD,eAAeyB,OAAAA;AAC5B,YAAIxB,MAAM;AACR,eAAK,UAAUuB,IAAIvB,MAAMwB,OAAAA;AACzB,gBAAMlC,QAAQE,kBAAiBgC,OAAAA;AAC/B,eAAK,OAAOxB,IAAAA,IAAQV;AACpB,eAAK,cAAcU,IAAAA,IAAQV;QAC7B;MACF;IACF;AAEA,UAAMuE,QAAQ,KAAK,UAAUC,OAAM,EAAGC,KAAI,EAAGzE;AAC7C,QAAIuE,OAAO;AACT,YAAM7D,OAAOD,eAAe8D,KAAAA;AAC5B,WAAKvE,QAAQU,QAAQ,KAAK,OAAOA,IAAAA,KAAS,OAAOgE,OAAO,KAAK,OAAOhE,IAAAA,CAAK,IAAI;IAC/E;EACF;EAEA,UAAO;AACL,SAAK,UAAUyD,MAAK;EACtB;EAEA,aAAazD,MAAcV,OAAgBuD,OAAY;AACrD,UAAMoB,YAAY,KAAK,OAAOjE,IAAAA;AAC9B,QAAIiE,cAAc3E,OAAO;AACvB;IACF;AAEA,SAAK,OAAOU,IAAAA,IAAQV;AAEpB,SAAKA,QAAQ0E,OAAO1E,KAAAA;AAEpB,eAAWuC,MAAM,KAAK,aAAaP,IAAItB,IAAAA,KAAS,CAAA,GAAI;AAClD6B,SAAGvC,OAAOU,IAAAA;IACZ;AACA,eAAW6B,MAAM,KAAK,aAAaP,IAAI,GAAA,KAAQ,CAAA,GAAI;AACjDO,SAAGvC,OAAOU,IAAAA;IACZ;AAEAkE,yBAAqB,MAAM,gBAAgB;MACzClE;MACAV;MACA+B,OAAO,KAAKA;MACZwB;IACF,CAAA;EACF;;;;;AA7OK,UAAA,GAAA,IAAA,GAAA,KAGL,aAASsB,aAAA,IAAA,GAAgC,oBAAIC,IAAAA,IAAAA,KAC7C,SAAkC,CAAC,GAAA,KACnC,gBAAyC,CAAC,GAAA,KAC1C,eAA4D,oBAAIA,IAAAA,GAAAA,KAGvD9E,sBAAAA,cAAAA,IAAAA,GAAAA,KAGAC,4BAAAA,kBAAAA,IAAAA,GAAAA,KAuIT,oBAAoB,MAAA;AAClB,WAAK,QAAO;AACZ,WAAK,QAAO;IACd;;AAwFF;;;AC3VA,SAAS8E,QAAAA,cAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0HOC;IAAAA;IAAAA;IAAAA;IAAAA;IAGjBC;IAGAC;IAGAC;IAAAA;;SA1HVC,UAAU;EACTC,KAAK;EACLC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0FRC,WAAAA;AACE,WAAOC;;+FAEoF,KAAKC,QAAQ;;;;;;;0BAOlF,KAAKA,QAAQ;;;;;;;;;EASrC;AACF,CAAA,GAAAC,UAGGC,KAAc;EAAEC,MAAMC;EAASC,SAAS;AAAK,CAAA,GAAAC,UAG7CJ,KAAc;EAAEC,MAAMC;EAASC,SAAS;AAAK,CAAA,GAAAE,UAG7CC,MAAyB,QAAA,GAAAC,UAgBzBC,OAA8C,SAAS;EAAEC,UAAU;AAAS,CAAA;AAxBxE,IAAMC,SAAN,eAAqBrB,iBAAAA,aAAAA;;WAGjBC,gBAGAC,kBAGAC,gBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,SAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QANAF;;;;;QAGAC;;;;;QAGAC;;;;;QAgBTmB;;;;OAzB0BtB,cAAAA;;EAGjBC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,wBAAO;;EAGPC;MAAAA,WAAAA;gBAAAA;;MAAAA,SAAAA,IAAAA;SAAAA,yBAAQ;;EAGRC;MAAAA,UAAAA;gBAAAA;;MAAAA,QAAAA,IAAAA;SAAAA,wBAAO;;EAIhBoB,cAAoB;AAClB,QAAI,CAAC,KAAKpB,SAAS;AACjB;IACF;AAEA,UAAMA,UAAU,KAAKA;AACrBA,YAAQqB,aAAa,gBAAgB,KAAKvB,UAAU,SAAS,OAAA;AAC7DE,YAAQD,WAAWW,QAAQ,KAAKX,QAAQ;AACxCuB,wBAAoB,MAAM,YAAYZ,QAAQ,KAAKX,QAAQ,CAAA;EAC7D;EAGAoB,YAAYI,OAAyB;AACnC,QAAI,KAAKxB,UAAU;AACjBwB,YAAMC,eAAc;AACpBD,YAAME,gBAAe;AAErB;IACF;AAEA,SAAK3B,UAAU,CAAC,KAAKA;AAErB4B,yBAAqB,MAAM,UAAU;MAAEC,OAAO,KAAK7B;MAASyB;IAAM,CAAA;EACpE;;;;;AApCK,UAAA,GAAA,IAAA,GAAA,KAGIzB,yBAAO8B,aAAA,IAAA,GAAP9B,eAAAA,IAAAA,IAAAA,KAGAC,yBAAAA,iBAAAA,IAAAA,GAAAA,KAGAC,wBAAAA,eAAAA,IAAAA,GAAAA,KAETM,WAAmB,UAAUuB,OAAOC,WAAU,CAAA;;AA0BhD;;;AC5JA,SAASC,QAAAA,cAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAsCbC;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAAAA;IAelBC;IAGAC;IAGAC;IAGAC;IAGAC;IAAAA;;SA1DVC,UAAU;EACTC,KAAK;EACLC,YAAY;EACZC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BV,CAAA,GAAAC,UASGC,KAAc;EACbC,MAAMC;EACNC,SAAS;EACTC,SAASC,MAAMC,UAAQ;AACpB,SAAiBC,kBAAkBF,MAAMC,QAAAA;EAC5C;AACF,CAAA,GAAAE,UAGCR,KAAa;EAAEC,MAAMQ;EAAQN,SAAS;EAAMO,cAAc;AAAI,CAAA,GAAAC,UAG9DX,KAAgB;EAAEG,SAAS;EAAMO,cAAc;AAAa,CAAA,GAAAE,UAG5DC,MAAmB,kBAAA,GAAAC,UAGnBD,MAAmB,wBAAA,GAAAE,UA6DnBC,aAAsB;EACrBC,SAAS,CAACC,SAASA,KAAKxB;EACxByB,UAAU,CAACD,SAAS;IAACA,KAAKzB;;EAC1B2B,UAAU,CAACF,SAAS,CAACA,KAAK5B;AAC5B,CAAA;AA3FK,IAAM+B,UAAN,eAAsBhC,iBAAAA,aAAAA;;WAelBC,aAGAC,aAGAC,kBAGAC,sBAGAC,uBAAAA,YAAAA,GAAAA,GAAAA,CAAAA,UAAAA,YAAAA,EAAAA,IAAAA,qBAAAA,MAAAA;;;;QAZAJ;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAGAC;;;;;QAiET4B;;;;OA5F2BjC,cAAAA;;EAC3B;EAEA;EACA;EAWSC;MAAAA,OAAAA;gBAAAA;;MAAAA,KAAAA,IAAAA;SAAAA,qBAAI;;EAGJC;MAAAA,QAAAA;gBAAAA;;MAAAA,MAAAA,IAAAA;SAAAA,sBAAK;;EAGLC;MAAAA,YAAAA;gBAAAA;;MAAAA,UAAAA,IAAAA;SAAAA,0BAAS;;EAGTC;MAAAA,iBAAAA;gBAAAA;;MAAAA,eAAAA,IAAAA;SAAAA,+BAAc;;EAGdC;MAAAA,iBAAAA;gBAAAA;;MAAAA,eAAAA,IAAAA;SAAAA,+BAAc;;EAEvB6B,uBAA6B;AAC3B,SAAK,YAAW;AAChB,QAAI,KAAK,UAAU;AACjB,WAAK,SAASC,oBAAoB,cAAc,KAAK,YAAY;AACjE,WAAK,SAASA,oBAAoB,cAAc,KAAK,YAAY;AACjE,WAAK,SAASA,oBAAoB,WAAW,KAAK,cAAc;AAChE,WAAK,SAASA,oBAAoB,YAAY,KAAK,eAAe;AAClE,WAAK,WAAW;IAClB;AAEA,QAAI,KAAK,UAAU;AACjB,WAAK,SAASA,oBAAoB,cAAc,KAAK,YAAY;AACjE,WAAK,SAASA,oBAAoB,cAAc,KAAK,YAAY;AACjE,WAAK,WAAW;IAClB;EACF;EAEAC,cAAoB;AAClB,SAAK,iBAAgB;AACrB,UAAMR,UAAU,KAAKvB;AACrB,UAAMgC,YAAY,KAAKpC;AAEvB,QAAI2B,SAAS;AACXA,cAAQU,aAAa,QAAQ,SAAA;AAC7BV,cAAQU,aAAa,eAAeD,YAAY,UAAU,MAAA;AAC1DT,cAAQW,QAAQtC,OAAOoC,YAAY,SAAS;AAC5CT,cAAQY,SAAS,CAACH;IACpB;EACF;EAEAI,SAAyB;AACvB,WAAOC;iCACsB,KAAKvC,SAAS,UAAU,KAAKF,IAAI;;;;;sBAK5C,KAAKA,OAAO,SAAS,OAAA;oBACvB,CAAC,KAAKA,IAAI;;;;;;EAM5B;EAEAiB,kBAAkBF,MAAeC,UAAyB;AACxD,QAAID,SAASC,UAAU;AACrB;IACF;AAEA,QAAI,CAACD,MAAM;AACT,WAAK,YAAW;IAClB;AAEA2B,8BAA0B,IAAI;EAChC;EAOAV,uBAA6B;AAC3B,QAAI,CAAC,KAAKhC,MAAM;AACd;IACF;AAEA,SAAK,YAAW;AAChB,SAAKA,OAAO;EACd;EAEA,cAAW;AACT,QAAI,KAAK,gBAAgB,MAAM;AAC7B2C,aAAOC,aAAa,KAAK,WAAW;AACpC,WAAK,cAAc;IACrB;EACF;EAEA,YAAYC,UAAoB;AAC9B,SAAK,YAAW;AAChB,UAAMC,OAAO,KAAK7C,SAAS;AAE3B,QAAI6C,OAAO,GAAG;AACZ,WAAK,cAAcH,OAAOI,WAAWF,UAAUC,IAAAA;IACjD,OAAO;AACLD,eAAAA;IACF;EACF;EAEA;EAMA;EAKA;EAKA;EAKA,mBAAgB;AACd,UAAMG,UAAU,KAAK7C;AACrB,UAAMwB,UAAU,KAAKvB,kBAAkB;AAEvC,QAAI4C,YAAY,KAAK,UAAU;AAC7B,UAAI,KAAK,UAAU;AACjB,aAAK,SAASd,oBAAoB,cAAc,KAAK,YAAY;AACjE,aAAK,SAASA,oBAAoB,cAAc,KAAK,YAAY;AACjE,aAAK,SAASA,oBAAoB,WAAW,KAAK,cAAc;AAChE,aAAK,SAASA,oBAAoB,YAAY,KAAK,eAAe;MACpE;AACA,UAAIc,SAAS;AACXA,gBAAQC,iBAAiB,cAAc,KAAK,YAAY;AACxDD,gBAAQC,iBAAiB,cAAc,KAAK,YAAY;AACxDD,gBAAQC,iBAAiB,WAAW,KAAK,cAAc;AACvDD,gBAAQC,iBAAiB,YAAY,KAAK,eAAe;MAC3D;AACA,WAAK,WAAWD;IAClB;AAEA,QAAIrB,YAAY,KAAK,UAAU;AAC7B,UAAI,KAAK,UAAU;AACjB,aAAK,SAASO,oBAAoB,cAAc,KAAK,YAAY;AACjE,aAAK,SAASA,oBAAoB,cAAc,KAAK,YAAY;MACnE;AACA,UAAIP,SAAS;AACXA,gBAAQsB,iBAAiB,cAAc,KAAK,YAAY;AACxDtB,gBAAQsB,iBAAiB,cAAc,KAAK,YAAY;MAC1D;AACA,WAAK,WAAWtB,WAAW;IAC7B;EACF;;;;;AA3KK,UAAA,GAAA,IAAA,GAAA,KACL,eAAWuB,aAAA,IAAA,GAAkB,OAAA,KAE7B,WAA+B,MAAA,KAC/B,WAA+B,MAAA,KAWtBlD,qBAAAA,YAAAA,MAAO,KAAA,GAAA,KAGPC,sBAAAA,YAAAA,MAAQ,GAAA,GAAA,KAGRC,0BAAAA,iBAAAA,MAAuB,YAAA,GAAA,KAGvBC,+BAAAA,qBAAAA,IAAAA,GAAAA,KAGAC,+BAAAA,sBAAAA,IAAAA,GAAAA,KA4FT,eAAe,MAAA;AACb,WAAK,YAAY,MAAA;AACf,aAAKJ,OAAO;MACd,CAAA;IACF,GAAA,KAEA,eAAe,MAAA;AACb,WAAK,YAAW;AAChB,WAAKA,OAAO;IACd,GAAA,KAEA,iBAAiB,MAAA;AACf,WAAK,YAAW;AAChB,WAAKA,OAAO;IACd,GAAA,KAEA,kBAAkB,MAAA;AAChB,WAAK,YAAW;AAChB,WAAKA,OAAO;IACd;;AAkCF;","names":["html","html","render","styleCache","Map","normalizeTemplate","template","fetchStyles","urls","Promise","all","map","url","cached","get","request","fetch","then","response","ok","text","catch","set","Component","options","Base","_context","tag","styles","styleUrls","observedAttributes","shadowMode","autoSlot","Error","templateFn","Decorated","parent","Array","isArray","own","from","Set","args","attachShadow","mode","renderRoot","shadow","connectedCallback","prototype","call","finally","requestRender","disconnectedCallback","attributeChangedCallback","name","oldValue","newValue","onAttributeChange","requestAnimationFrame","length","fetched","inlineStyles","filter","Boolean","join","root","templateResult","styleTemplate","slotTemplate","completeTemplate","commit","afterRender","wrapRender","fragment","document","createDocumentFragment","tempDiv","createElement","append","childNodes","customElements","define","renderQueue","WeakMap","cleanupRegistry","observerRegistry","internalMutations","scheduleRender","instance","requestRender","render","get","set","requestAnimationFrame","delete","toKebabCase","value","String","replace","toLowerCase","registerCleanup","cleanup","callbacks","Set","original","disconnectedCallback","args","registered","forEach","callback","error","console","apply","undefined","add","markInternalMutation","host","attribute","attributes","isInternalMutation","hasAttribute","has","size","observeAttribute","handler","entry","Map","observer","MutationObserver","records","record","attributeName","listeners","currentValue","target","getAttribute","listener","observe","disconnect","updateAttribute","removeAttribute","setAttribute","resolveType","type","Boolean","Number","Object","Array","typeParsers","boolean","number","parsed","isNaN","json","JSON","parse","warn","string","typeFormatters","stringify","defaultCompare","previous","next","Prop","options","reflect","format","defaultValue","compare","onChange","onAttributeChange","resolvedType","parseValue","call","formatValue","accessor","context","kind","Error","name","addInitializer","rawValue","formatted","init","initialValue","HTMLElement","disabled","pill","fullWidth","type","block","variant","Component","tag","autoSlot","shadowMode","styles","Prop","Boolean","reflect","String","defaultValue","onAttributeChange","requestRender","Button","render","html","html","CONTROL_CHANGE_EVENT","dispatchControlEvent","host","type","detail","dispatchEvent","CustomEvent","bubbles","composed","setBooleanAttribute","element","name","value","setAttribute","removeAttribute","coerceNumber","parsed","Number","isNaN","readControlValue","String","checked","attr","getAttribute","textContent","trim","lifecycleHooks","connectedCallback","WeakMap","disconnectedCallback","cleanupRegistry","addLifecycleHook","instance","hookName","handler","store","callbacks","get","Set","set","original","args","forEach","callback","apply","undefined","add","registerCleanup","cleanup","registered","fn","error","console","delete","resolveTarget","host","target","EventTarget","document","window","renderRoot","shadowRoot","normalizeOptions","selectorOrOptions","selector","buildOptions","options","prevent","stop","stopImmediate","once","passive","capture","when","Listen","eventName","Error","listenConfig","originalMethod","context","addInitializer","attached","attach","addEventListener","warn","String","eventOptions","event","typedEvent","preventDefault","stopImmediatePropagation","stopPropagation","matched","path","composedPath","find","node","Element","matches","call","targetNode","removeEventListener","queueMicrotask","defaultOptions","all","closest","from","fallback","resolveFallback","host","resolveRoot","option","document","renderRoot","shadowRoot","resolveQuery","selector","options","result","root","elements","Array","querySelectorAll","length","match","querySelector","createQueryDecorator","_target","context","kind","descriptor","get","set","_value","addInitializer","Object","defineProperty","name","configurable","enumerable","Query","userOptions","Error","merged","HTMLElement","checked","name","value","disabled","control","Component","tag","styles","template","html","filterId","_dec1","Prop","type","Boolean","reflect","_dec2","_dec3","_dec4","_dec5","Query","_dec6","Listen","selector","Checkbox","handleClick","connectedCallback","_prevChecked","afterRender","changed","_triggerAnimation","setAttribute","setBooleanAttribute","shadowRoot","querySelector","svg","classList","remove","animClass","duration","add","setTimeout","event","preventDefault","stopPropagation","dispatchControlEvent","_initProto","crypto","randomUUID","html","html","HTMLElement","placement","offset","open","nextAnchorName","crypto","randomUUID","Component","tag","autoSlot","shadowMode","styles","_dec1","Prop","reflect","defaultValue","onChange","handlePlacementChange","_dec2","type","Number","handleOffsetChange","_dec3","Boolean","Popover","contentElement","connectedCallback","disconnectedCallback","render","html","requestRender","dataset","isFinite","style","setProperty","_initProto","html","HTMLElement","state","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","onAttributeChange","next","previous","shadowRoot","querySelector","animate","d","paths","duration","easing","IconChevron","render","html","_initProto","down","up","html","DismissController","options","event","owner","content","triggers","path","composedPath","some","node","Element","hasAttribute","includes","trigger","key","preventDefault","active","document","activeElement","contains","onDismiss","connect","context","filter","el","HTMLElement","addEventListener","disconnect","removeEventListener","registry","WeakMap","toDismissContext","host","options","disabled","resolved","resolve","owner","HTMLElement","content","triggers","filter","element","createOutsideClickHandle","onDismiss","controller","DismissController","event","call","update","context","disconnect","connect","registerOutsideClickHandle","handle","handles","get","Set","set","add","updateOutsideClickHandles","forEach","disconnectOutsideClickHandles","requestOutsideClickUpdate","lifecycleApplied","WeakSet","wrapMethod","host","name","hook","callHookFirst","original","args","call","result","apply","ensureLifecycle","has","add","updateOutsideClickHandles","disconnectOutsideClickHandles","OutsideClick","options","originalMethod","context","addInitializer","resolve","owner","content","triggers","handle","createOutsideClickHandle","event","disabled","registerOutsideClickHandle","isConnected","HTMLElement","open","disabled","pill","headless","searchable","block","maxHeight","name","value","placeholder","placement","trigger","searchInput","panelContent","contentSlot","nextOptionId","counter","nextPanelId","Component","tag","styles","_dec1","Prop","type","Boolean","reflect","onChange","next","previous","handleOpenChange","_dec2","_dec3","_dec4","_dec5","_dec6","String","defaultValue","onAttributeChange","requestRender","_dec7","style","setProperty","_dec8","_dec9","_dec10","attribute","_dec12","Query","_dec13","_dec14","_dec15","OutsideClick","content","host","triggers","Dropdown","handleOutsideDismiss","connectedCallback","disconnectedCallback","afterRender","ariaLabel","getAttribute","HTMLButtonElement","setAttribute","trim","length","removeAttribute","panel","isInteractive","id","tabIndex","setBooleanAttribute","queueMicrotask","render","placeholderActive","html","query","lowerQuery","toLowerCase","forEach","option","match","label","includes","element","display","toggle","force","originEvent","current","blur","origin","Event","focus","dispatchControlEvent","event","requestOutsideClickUpdate","slot","removeEventListener","addEventListener","assigned","assignedElements","flatten","elements","filter","node","options","hasAttribute","dataset","active","handlers","click","preventDefault","stopPropagation","keydown","key","passive","push","preselected","find","selected","toggleAttribute","selectedLabel","previousLabel","isSelected","fallback","hasValue","o","target","entry","preventScroll","index","normalized","Math","max","min","undefined","step","activeElement","document","currentIndex","findIndex","nextIndex","previousValue","explicitValue","text","textContent","explicitLabel","dispatchEvent","CustomEvent","detail","bubbles","composed","_initProto","input","html","HTMLElement","value","placeholder","type","name","disabled","headless","control","Component","tag","shadowMode","autoSlot","styles","template","html","Boolean","_dec1","Prop","reflect","_dec2","_dec3","defaultValue","_dec4","_dec5","_dec6","_dec7","Query","_dec8","Listen","selector","_dec9","_dec10","_dec11","Input","onPrefixSlotChange","onSuffixSlotChange","handleInput","handleChange","updatePrefixAttribute","container","shadowRoot","querySelector","prefixSlot","hasPrefix","assignedNodes","flatten","length","setBooleanAttribute","updateSuffixAttribute","suffixSlot","hasSuffix","afterRender","event","target","dispatchControlEvent","_initProto","html","clamp01","value","Math","max","min","hsvToRgb","h","s","v","hue","saturation","c","x","abs","m","r","g","b","round","rgbToHsv","rn","gn","bn","delta","rgbToHex","toHex","component","toString","padStart","toUpperCase","hexToRgb","hex","normalized","trim","test","match","exec","parseInt","hexToHsv","rgb","hsvToHex","isValidHex","getLuminance","isLightColor","hsvToHsl","l","sl","hslToHsv","sv","getColorComponents","hsv","format","h","s","v","labels","values","hsvToHex","max","suffix","rgb","hsvToRgb","r","g","b","hsl","hsvToHsl","Math","round","l","updateHsvFromComponents","index","value","newHsv","isValidHex","parsed","hexToHsv","vals","min","Number","rgbToHsv","hslToHsv","COLOR_FORMATS","nothing","classMap","ifDefined","repeat","styleMap","unsafeHTML","when","styleObject","input","definedEntries","Object","entries","reduce","acc","property","value","undefined","styleMap","html","HTMLElement","Component","tag","styles","template","html","IconArrowsVertical","html","HTMLElement","Component","tag","styles","template","html","IconPicker","HTMLElement","saturationArea","hueArea","hexInput","value","Component","tag","autoSlot","styles","template","h","s","v","hsv","pureHue","hsvToRgb","currentRgb","saturationBg","r","g","b","huePercent","vInverted","saturationHandleStyles","left","top","hueHandleStyles","isLight","isLightColor","hasEyeDropper","window","previewStyles","backgroundColor","components","getColorComponents","format","html","styleMap","handleSaturationPointerDown","handleSaturationPointerMove","handleSaturationPointerUp","handleHuePointerDown","handleHuePointerMove","handleHuePointerUp","handleEyeDropperClick","handleFormatCycle","formatAnimating","toUpperCase","values","e","handleComponentChange","target","labels","map","_","i","max","String","Number","handleCancelButtonClick","handleApplyButtonClick","_dec1","Query","_dec2","_dec3","_dec4","Prop","reflect","defaultValue","onChange","isInternalUpdate","updateFromHex","ColorPicker","connectedCallback","originalValue","hex","isValidHex","hexToHsv","event","newValue","hsvToHex","document","activeElement","dispatchControlEvent","updateSaturationValue","rect","getBoundingClientRect","x","Math","min","width","clientX","y","height","clientY","requestRender","updateHue","button","undefined","preventDefault","stopPropagation","pointerId","setPointerCapture","hasPointerCapture","releasePointerCapture","handleHexInputChange","input","index","updateHsvFromComponents","handleFormatChange","setTimeout","currentIndex","COLOR_FORMATS","indexOf","nextIndex","length","eyeDropper","EyeDropper","result","open","sRGBHex","HTMLElement","dropdown","value","disabled","placement","Component","tag","styles","_dec1","Query","_dec2","Prop","reflect","defaultValue","onChange","next","isValidHex","normalized","toUpperCase","_dec3","type","Boolean","_dec4","ColorInput","connectedCallback","querySelector","setBooleanAttribute","afterRender","swatchStyle","backgroundColor","html","styleMap","render","_initProto","event","target","dispatchControlEvent","detail","requestRender","open","html","HTMLElement","label","fullWidth","Component","tag","autoSlot","shadowMode","styles","template","html","_dec1","Prop","reflect","_dec2","type","Boolean","Field","_initProto","html","HTMLElement","Component","tag","styles","template","html","IconClear","html","HTMLElement","state","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","IconGrid","render","html","_initProto","html","HTMLElement","Component","tag","styles","template","html","Loading","html","HTMLElement","state","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","Snap","render","defaultPath","defaultPath2","activePath","activePath2","path1","path2","html","_initProto","html","HTMLElement","Component","tag","styles","template","html","IconAnchorAdd","html","HTMLElement","Component","tag","styles","template","html","IconAnchorRemove","html","HTMLElement","Component","tag","styles","template","html","ArrowUp","html","HTMLElement","Component","tag","styles","template","html","IconBezier","html","HTMLElement","Component","tag","styles","template","html","IconBezierAngle","html","HTMLElement","Component","tag","styles","template","html","IconBezierDistribute","html","HTMLElement","Component","tag","styles","template","html","IconBezierLength","html","HTMLElement","Component","tag","styles","template","html","IconBezierMirror","html","HTMLElement","Component","tag","styles","template","html","IconCheck","html","HTMLElement","Component","tag","styles","template","html","IconCircleArrowLeft","html","HTMLElement","Component","tag","styles","template","html","IconCircleArrowRight","html","HTMLElement","Component","tag","styles","template","html","IconCode","html","HTMLElement","Component","tag","styles","template","html","IconDots","html","HTMLElement","Component","tag","styles","template","html","IconMention","html","HTMLElement","Component","tag","styles","template","html","IconMinus","html","HTMLElement","Component","tag","styles","template","html","IconPlus","html","HTMLElement","Component","tag","styles","template","html","Settings","html","HTMLElement","loading","intro","size","ariaLabel","CENTER","x","y","DOTS_DATA","id","cx","cy","INNER_DOT_IDS","OUTER_DOT_IDS","map","d","filter","includes","forceReflow","el","window","getComputedStyle","opacity","getAngle","dot","Math","atan2","sortByAngle","ids","find","sort","a","b","LOOP_DURATION","ROTATION_DURATION","Component","tag","styles","template","host","state","ariaLabelTrimmed","trim","html","_dec1","Prop","type","Boolean","attribute","defaultValue","onChange","next","handleLoadingChange","_dec2","_dec3","Number","_dec4","LogoLoader","value","requestRender","connectedCallback","requestAnimationFrame","disconnectedCallback","clearTimeout","fn","delay","setTimeout","push","svg","shadowRoot","querySelector","instant","keepOpacity","container","innerHTML","style","transition","classList","remove","removeProperty","transform","onComplete","innerDotIds","Set","innerDots","has","outerDots","orderedInner","forEach","index","fill","orderedOuter","particles","finalAngle","startDistance","random","angleVariation","PI","startAngle","startX","cos","startY","sin","curvature","controlAngle","controlDistance","controlX","controlY","group","floor","groupDelay","withinGroupDelay","duration","impactTime","rotationSpeed","isInner","shockwaveParticles","p","slice","shockwaveSet","particle","steps","step","animateStep","progress","t","mt","easeOut","scale","rotation","bounceDuration","add","earlyRevealTime","max","maxTime","ring","document","createElementNS","setAttribute","String","appendChild","performance","now","orderedInnerDots","seedDelay","targetScale","setProperty","angle","normalizedAngle","animationDelayMs","orderedOuterDots","baseScale","elapsed","timeInCycle","timeLeft","orderedAllDots","i","length","playIntro","variant","originalIntro","_initProto","html","renderQueue","WeakMap","scheduleRender","instance","requestRender","render","get","set","requestAnimationFrame","defaultCompare","previous","next","Watch","options","compare","onChange","transform","accessor","context","kind","Error","call","value","init","initialValue","html","HTMLElement","paused","canvasEl","clamp","value","min","max","Math","mean","values","length","sum","quantile","sorted","q","clamped","index","floor","computePercentile","sort","a","b","computeMedian","formatNumber","decimals","Number","isFinite","toFixed","formatMs","rateFps","fps","targetFps","target","ratio","Component","tag","autoSlot","shadowMode","styles","_dec1","Prop","type","Boolean","reflect","defaultValue","_dec2","Query","MonitorFps","connectedCallback","document","hidden","disconnectedCallback","removeEventListener","afterRender","render","hz","refreshRate","rating","subtitleParts","frameTimeAvg","frameTimeP95","filter","html","join","droppedFrames","jankFrames","longFrames","frameTimeMax","addEventListener","passive","now","performance","requestAnimationFrame","cancelAnimationFrame","frameWindow","slice","fpsWindow","frameAvg","frameP95","frameMax","median","ideal","ft","missed","round","dispatchEvent","CustomEvent","detail","bubbles","composed","canvas","rect","getBoundingClientRect","dpr","window","devicePixelRatio","width","height","ctx","getContext","setTransform","clearRect","samples","scaleMax","stroke","save","globalAlpha","strokeStyle","lineWidth","setLineDash","drawGuide","y","beginPath","moveTo","lineTo","restore","toY","i","x","closePath","fillStyle","fill","lineJoin","lineCap","_initProto","delta","push","shift","elapsed","fpsSample","requestRender","HTMLElement","metrics","network","METRIC_THRESHOLDS","LCP","good","poor","INP","CLS","FCP","ttfb","loadTime","domInteractive","fps","TBT","GLOBAL_BENCHMARKS","rateMetric","metric","value","thresholds","formatMetric","toFixed","Math","round","formatBytes","bytes","decimals","Number","isFinite","k","dm","sizes","i","floor","log","parseFloat","estimateCarbonFootprint","totalBytes","emissions","Component","tag","styles","_dec1","Watch","_dec2","_dec3","Listen","Monitor","handleFpsUpdate","connectedCallback","initObservers","collectInitialMetrics","startMemoryMonitoring","initNetworkMonitoring","document","readyState","window","addEventListener","handlePageLoad","disconnectedCallback","observers","forEach","observer","disconnect","stopMemoryMonitoring","stopNetworkMonitoring","removeEventListener","event","detail","updateTrend","requestRender","console","warn","PerformanceObserver","list","entry","getEntries","processPerformanceEntry","observe","type","buffered","push","e","error","collectNavigationTiming","resourceEntries","performance","getEntriesByType","processResourceEntries","navigationEntries","length","navTiming","responseStart","fetchStart","loadEventEnd","startTime","navigation","entryType","coreWebVitals","eventEntry","interactionId","duration","maxINP","inpEntries","lsEntry","hadRecentInput","clsEntries","calculateSessionWindowCLS","name","ltEntry","longTaskEntries","calculateLongTasksAndTBT","maxCls","currentSessionCls","sessionStartTime","Infinity","lastTime","sort","a","b","timeDiff","max","entries","summary","resources","size","transferSize","initiator","initiatorType","toLowerCase","endsWith","js","count","css","test","img","other","totalSize","tbt","referenceTime","task","longTasks","totalDuration","memory","updateMemory","mem","jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize","memoryInterval","setInterval","clearInterval","navigator","connection","updateNetworkInfo","key","history","trendHistory","maxTrendLength","shift","getTrendDirection","currentValue","previousAvg","slice","reduce","threshold","abs","delta","getOverallStatus","ratings","includes","every","r","some","render","html","renderExpanded","renderVitalsAndTiming","renderRealtime","renderNetworkInfo","renderResources","renderMetricBox","label","description","rating","formattedValue","trend","benchmark","vsBenchmark","renderMemory","usedPercent","styleObject","width","min","effectiveType","rtt","toUpperCase","totalCount","renderItem","data","_initProto","setTimeout","html","HTMLElement","value","min","max","step","name","disabled","control","Component","tag","styles","template","html","handleInput","handleChange","handleDecrement","bind","Number","handleIncrement","_dec1","Prop","type","reflect","_dec2","_dec3","_dec4","_dec5","_dec6","Boolean","_dec7","Query","_dec8","Listen","selector","_dec9","NumberInput","afterRender","undefined","String","setBooleanAttribute","event","target","coerceNumber","dispatchControlEvent","addActiveLayer","button","layer","document","createElement","classList","add","appendChild","setTimeout","remove","currentTarget","current","_initProto","html","HTMLElement","value","disabled","control","name","Component","tag","styles","template","html","handleValueChange","_dec1","Prop","reflect","defaultValue","_dec2","type","Boolean","_dec3","Query","_dec4","_dec5","Listen","selector","Origin","handleChange","afterRender","setBooleanAttribute","event","target","String","dispatchControlEvent","_initProto","html","nothing","HTMLElement","activeTab","contentElement","bodyElement","Component","tag","shadowMode","styles","_dec1","Prop","type","Number","reflect","attribute","defaultValue","onChange","next","previous","self","undefined","handleActiveTabChange","_dec2","Query","_dec3","_dec4","Listen","selector","_dec5","Panel","onFooterSlotChange","onDefaultSlotChange","performTabAnimation","tabs","setTab","index","length","connectedCallback","afterRender","render","hasTabs","html","nothing","map","tab","id","e","label","event","dispatchEvent","CustomEvent","detail","bubbles","composed","currentIndex","newIndex","key","preventDefault","queueMicrotask","tabButtons","shadowRoot","querySelectorAll","newTabButton","focus","fromIndex","toIndex","duration","easing","content","requestRender","fromPanel","querySelector","toPanel","startHeight","getBoundingClientRect","height","style","display","opacity","fadeOut","animate","fill","finished","cancel","setAttribute","previousToState","getAttribute","visibility","offsetHeight","endHeight","fadeIn","removeAttribute","ms","Promise","resolve","setTimeout","child","Array","from","children","slot","startsWith","replace","push","slice","updateFooterAttribute","footer","footerSlot","hasFooter","Boolean","assignedNodes","flatten","setBooleanAttribute","_initProto","html","RadioOption","HTMLElement","connectedCallback","hidden","hasAttribute","setAttribute","customElements","get","define","HTMLElement","value","groupElement","contentSlot","nextOptionId","counter","nextPanelId","Component","tag","shadowMode","styles","template","html","_dec1","Prop","reflect","defaultValue","onChange","next","previous","updateOptionSelectionState","_dec2","Query","_dec3","RadioGroup","connectedCallback","disconnectedCallback","afterRender","panel","id","tabIndex","setAttribute","queueMicrotask","slot","removeEventListener","addEventListener","assigned","assignedElements","flatten","elements","filter","node","options","forEach","element","hasAttribute","getAttribute","label","trim","length","dataset","active","handlers","click","event","preventDefault","stopPropagation","keydown","key","passive","push","preselected","find","option","selected","selectedLabel","isSelected","fallback","hasValue","Boolean","toggleAttribute","originEvent","previousValue","explicitValue","text","textContent","explicitLabel","dispatchControlEvent","dispatchEvent","CustomEvent","detail","bubbles","composed","_initProto","html","HTMLElement","checked","name","value","disabled","control","Component","tag","shadowMode","styles","template","html","filterId","_dec1","Prop","type","Boolean","reflect","onChange","next","form","closest","root","getRootNode","others","Array","from","querySelectorAll","forEach","other","_dec2","_dec3","_dec4","_dec5","Query","_dec6","Listen","selector","RadioInput","handleClick","connectedCallback","_prevChecked","afterRender","_firstRender","changed","_triggerAnimation","setAttribute","setBooleanAttribute","input","shadowRoot","querySelector","svg","classList","remove","animClass","add","duration","setTimeout","event","preventDefault","stopPropagation","dispatchControlEvent","_initProto","crypto","randomUUID","html","HTMLElement","value","min","max","step","disabled","control","valueControl","Component","tag","styles","template","html","String","Boolean","undefined","_dec1","Prop","type","Number","reflect","_dec2","_dec3","_dec4","_dec5","_dec6","Query","_dec7","_dec8","Listen","selector","_dec9","_dec10","when","event","CustomEvent","detail","_dec11","Slider","handleRangeInput","handleRangeChange","handleValueInput","handleValueChange","afterRender","setAttribute","setBooleanAttribute","updateProgress","target","numericValue","coerceNumber","dispatchControlEvent","rawValue","percent","style","setProperty","Math","_initProto","html","HTMLElement","value","defaultSlot","readControlValue","element","checked","attr","getAttribute","textContent","trim","getControlName","name","Component","tag","shadowMode","styles","_dec1","Prop","reflect","_dec2","Query","_dec3","Listen","target","host","_dec4","_dec5","CONTROL_CHANGE_EVENT","State","handleInternalInput","handleInternalChange","handleControlChange","state","get","set","control","Event","subscribe","nameOrCallback","callback","cb","Error","has","Set","add","unsubscribe","delete","reset","Object","entries","connectedCallback","addEventListener","disconnectedCallback","removeEventListener","render","html","event","detail","Element","slot","findControls","el","controls","push","shadowRoot","child","querySelectorAll","childName","clear","elements","assignedElements","flatten","first","values","next","String","prevValue","dispatchControlEvent","_initProto","Map","html","HTMLElement","checked","disabled","control","Component","tag","styles","template","html","filterId","_dec1","Prop","type","Boolean","reflect","_dec2","_dec3","Query","_dec4","Listen","selector","Toggle","handleClick","afterRender","setAttribute","setBooleanAttribute","event","preventDefault","stopPropagation","dispatchControlEvent","value","_initProto","crypto","randomUUID","html","HTMLElement","open","delay","placement","triggerElement","contentElement","Component","tag","shadowMode","styles","_dec1","Prop","type","Boolean","reflect","onChange","next","previous","_handleOpenChange","_dec2","Number","defaultValue","_dec3","_dec4","Query","_dec5","_dec6","OutsideClick","content","host","triggers","disabled","Tooltip","handleOutsideDismiss","disconnectedCallback","removeEventListener","afterRender","isVisible","setAttribute","dataset","hidden","render","html","requestOutsideClickUpdate","window","clearTimeout","callback","wait","setTimeout","trigger","addEventListener","_initProto"]}
|
|
1
|
+
{"version":3,"sources":["/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/button/index.ts","../src/decorators/Component.ts","../src/decorators/Prop.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/checkbox/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/shared.ts","../src/decorators/Listen.ts","../src/decorators/Query.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/color/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/popover/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/animation/chevron.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/dropdown/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/utils/dismiss-controller.ts","../src/utils/outside-click.ts","../src/decorators/OutsideClick.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/input/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/color/picker.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/color/utils.ts","../src/utils/template-helpers.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/arrows-vertical.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/picker.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/field/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/folder/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/animation/clear.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/animation/folder.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/animation/grid.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/animation/loading.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/animation/snap.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/anchor-add.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/anchor-remove.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/arrow-up.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/bezier.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/bezier-angle.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/bezier-distribute.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/bezier-length.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/bezier-mirror.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/check.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/circle-arrow-left.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/circle-arrow-right.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/code.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/dots.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/mention.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/minus.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/plus.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/icons/interface/settings.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/logo/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/monitor/index.ts","../src/decorators/Watch.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/monitor/fps.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/number/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/origin/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/panel/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/radio/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/radio/option.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/radio/input.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/slider/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/state/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/toggle/index.ts","/Users/aaroniker/Documents/GitHub/ease/web-kit/packages/core/src/elements/tooltip/index.ts"],"sourcesContent":["import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\n@Component({\n tag: 'ease-button',\n autoSlot: true,\n shadowMode: 'open',\n styles: `\n :host {\n display: block;\n width: 100%;\n }\n\n :host([data-variant=\"headless\"]) {\n display: inline-flex;\n width: auto;\n }\n\n button {\n appearance: none;\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n font-size: var(--ease-button-font-size, var(--ease-font-size-sm, 12px));\n font-weight: 550;\n color: var(--ease-button-color, var(--color-blue-100));\n min-width: 0;\n padding: var(--ease-button-padding, 7px 8px);\n display: block;\n border-radius: var(--ease-button-radius, 5px);\n background-color: var(--ease-button-background, var(--color-gray-850));\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-button-line-height, 14px);\n box-shadow: inset 0 1px .25px 0 var(--color-white-4), 0 1px 2.5px 0 var(--color-black-8);\n transition: color 0.2s, background-color 0.2s, scale 0.2s, box-shadow 0.2s;\n cursor: pointer;\n min-width: var(--ease-button-min-width, 88px);\n white-space: nowrap;\n overflow: hidden;\n position: relative;\n text-overflow: ellipsis;\n text-align: center;\n\n &[data-pill=\"true\"] {\n border-radius: 999px;\n }\n\n &[data-full-width=\"true\"] {\n width: 100%;\n }\n\n &[data-block=\"icon\"] {\n --ease-icon-size: 16px;\n width: 28px;\n height: 28px;\n min-width: 28px;\n padding: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-gray-700);\n\n &:hover,\n &:focus-visible {\n color: var(--ease-button-hover-color, var(--color-blue-100));\n }\n\n &[data-variant=\"headless\"] {\n --ease-icon-size: 16px;\n width: auto;\n height: auto;\n padding: 0;\n min-width: 0;\n margin: -1px;\n }\n }\n \n &[data-block=\"small\"] {\n padding: 5px 8px;\n font-size: 12px;\n line-height: 14px;\n border-radius: 5px;\n }\n \n &[data-block=\"large\"] {\n padding: 9px 12px;\n font-size: 13px;\n line-height: 14px;\n border-radius: 8px;\n }\n\n &:hover,\n &:focus-visible {\n background-color: var(--ease-button-hover-background-color, var(--color-gray-825));\n color: var(--ease-button-hover-color, var(--color-blue-100));\n }\n\n &[data-variant=\"headless\"],\n &[data-variant=\"headless-muted\"] {\n background-color: transparent;\n box-shadow: none;\n min-width: 0;\n width: auto;\n padding: 0;\n transition: scale 0.2s, color 0.2s;\n\n &:hover,\n &:focus-visible {\n scale: 1.05;\n }\n\n &:active {\n scale: 0.95;\n }\n }\n\n &[data-variant=\"headless-muted\"] {\n color: var(--ease-button-color, var(--color-gray-600));\n\n &:hover,\n &:focus-visible {\n color: var(--ease-button-hover-color, var(--color-blue-100));\n }\n }\n\n &[data-variant=\"link\"] {\n background-color: transparent;\n box-shadow: none;\n\n &:hover,\n &:focus-visible {\n background-color: var(--ease-button-hover-background-color, var(--color-gray-875));\n }\n }\n\n &[data-variant=\"primary\"] {\n color: var(--color-blue-100);\n font-weight: 450;\n border-radius: 36px;\n \n background: radial-gradient(217.29% 45.98% at 99.13% 4.17%, rgba(21, 24, 220, 0.40) 0%, rgba(21, 24, 220, 0.00) 100%), radial-gradient(104.75% 41.7% at 3.06% 100%, rgba(233, 208, 254, 0.30) 0%, rgba(21, 24, 220, 0.00) 100%), radial-gradient(30.53% 47.92% at 46.51% -14.58%, rgba(233, 208, 254, 0.60) 0%, rgba(21, 24, 220, 0.00) 100%), radial-gradient(22.57% 35.42% at 46.29% 112.5%, rgba(233, 208, 254, 0.20) 0%, rgba(21, 24, 220, 0.00) 100%), rgba(255, 255, 255, 0.12);\n background-repeat: no-repeat;\n\n box-shadow: \n 0px 1px 0px 0px rgba(255, 255, 255, 0.2), \n inset 0px 0px 50px 0px rgba(255, 255, 255, 0.02), \n inset 0px 0px 0px 1px rgba(255, 255, 255, 0.02), \n inset 0px 0px 4px 0px rgba(69, 40, 255, 0.4);\n\n\n &::before {\n content: '';\n position: absolute;\n inset: 0;\n background-color: var(--color-white-2);\n box-shadow: inset 0px 0.5px 0.75px 0px var(--color-white-30);\n mix-blend-mode: overlay;\n pointer-events: none;\n z-index: 1;\n border-radius: inherit;\n }\n\n &:hover,\n &:focus-visible {\n filter: brightness(1.1);\n }\n }\n }\n `\n})\nexport class Button extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled: boolean = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor pill: boolean = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor fullWidth: boolean = false;\n\n @Prop<'submit' | 'reset' | 'button'>({ type: String, reflect: true, defaultValue: 'button' })\n accessor type!: 'submit' | 'reset' | 'button';\n\n @Prop<'icon' | 'small' | 'medium' | 'large'>({\n type: String,\n reflect: true,\n defaultValue: 'medium',\n onAttributeChange() {\n this.requestRender?.();\n }\n })\n accessor block: 'icon' | 'small' | 'medium' | 'large' = 'medium';\n\n @Prop<'default' | 'primary' | 'headless' | 'headless-muted' | 'link'>({\n type: String,\n reflect: true,\n defaultValue: 'default'\n })\n accessor variant!: 'default' | 'primary' | 'headless' | 'headless-muted' | 'link';\n\n render(): TemplateResult {\n return html`\n <button\n type=${this.type}\n ?disabled=${this.disabled}\n data-variant=${this.variant}\n data-full-width=${this.fullWidth}\n data-pill=${this.pill}\n data-block=\"${this.block}\"\n >\n <slot></slot>\n </button>\n `;\n }\n}\n","import { html, render, type TemplateResult } from 'lit-html';\n\ntype Constructor<T extends HTMLElement> = new (...args: unknown[]) => T;\n\ninterface LifecycleElement {\n connectedCallback?(): void;\n disconnectedCallback?(): void;\n attributeChangedCallback?(name: string, oldValue: string | null, newValue: string | null): void;\n}\n\ntype RenderableElement = HTMLElement & {\n render?(): TemplateResult | null | undefined;\n afterRender?(): void;\n wrapRender?(commit: () => void, context: RenderContext): void;\n onAttributeChange?(name: string, oldValue: string | null, newValue: string | null): void;\n requestRender?(): void;\n renderRoot?: ShadowRoot | HTMLElement;\n};\n\ntype TemplateValue<TElement extends RenderableElement> =\n | TemplateResult\n | null\n | undefined\n | ((this: TElement, host: TElement) => TemplateResult | null | undefined);\n\ninterface ComponentOptions<TElement extends RenderableElement = RenderableElement> {\n tag: string;\n template?: TemplateValue<TElement>;\n styles?: string;\n styleUrls?: string[];\n observedAttributes?: string[];\n shadowMode?: ShadowRootMode;\n autoSlot?: boolean;\n}\n\n// Exporting RenderContext\nexport interface RenderContext {\n fragment: DocumentFragment;\n root: ShadowRoot | HTMLElement;\n}\n\nconst styleCache = new Map<string, Promise<string>>();\n\nconst normalizeTemplate = <TElement extends RenderableElement>(\n template?: TemplateValue<TElement>\n): ((this: TElement, host: TElement) => TemplateResult | null | undefined) => {\n if (typeof template === 'function') {\n return template as (this: TElement, host: TElement) => TemplateResult | null | undefined;\n }\n\n if (template && typeof template === 'object' && '_$litTemplate$' in template) {\n return function (this: TElement): TemplateResult | null | undefined {\n return template as TemplateResult;\n };\n }\n\n return function (this: TElement): TemplateResult | null | undefined {\n return null;\n };\n};\n\nconst fetchStyles = async (urls: readonly string[]): Promise<string[]> =>\n Promise.all(\n urls.map((url) => {\n const cached = styleCache.get(url);\n if (cached) {\n return cached;\n }\n\n const request = fetch(url)\n .then((response) => (response.ok ? response.text() : ''))\n .catch(() => '');\n\n styleCache.set(url, request);\n return request;\n })\n );\n\nexport const Component =\n <TElement extends RenderableElement = RenderableElement>(options: ComponentOptions<TElement>) =>\n <TBase extends Constructor<TElement> & { observedAttributes?: string[] }>(\n Base: TBase,\n _context: ClassDecoratorContext\n ): TBase => {\n const {\n tag,\n template,\n styles = '',\n styleUrls = [],\n observedAttributes = [],\n shadowMode = 'open',\n autoSlot = true\n } = options;\n\n if (!tag) {\n throw new Error('@Component requires a \"tag\" option.');\n }\n\n const templateFn = normalizeTemplate<TElement>(template);\n\n class Decorated extends (Base as unknown as Constructor<RenderableElement>) {\n static get observedAttributes(): string[] {\n const parent =\n 'observedAttributes' in Base && Array.isArray(Base.observedAttributes)\n ? (Base.observedAttributes as string[])\n : [];\n const own = Array.isArray(observedAttributes) ? observedAttributes : [];\n return Array.from(new Set([...parent, ...own]));\n }\n\n #shadow: ShadowRoot;\n #styles = styles;\n #styleUrls = [...styleUrls];\n #renderScheduled = false;\n\n constructor(...args: unknown[]) {\n super(...args);\n this.#shadow = this.attachShadow({ mode: shadowMode });\n this.renderRoot = this.#shadow;\n }\n\n get shadow(): HTMLElement | ShadowRoot | undefined {\n return this.renderRoot;\n }\n\n connectedCallback(): void {\n (Base.prototype as LifecycleElement).connectedCallback?.call(this);\n\n void this.#loadStyles().finally(() => {\n this.requestRender();\n });\n }\n\n disconnectedCallback(): void {\n (Base.prototype as LifecycleElement).disconnectedCallback?.call(this);\n this.#renderScheduled = false;\n }\n\n attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void {\n (Base.prototype as LifecycleElement).attributeChangedCallback?.call(this, name, oldValue, newValue);\n\n if (oldValue !== newValue) {\n this.onAttributeChange?.(name, oldValue, newValue);\n }\n }\n\n requestRender(): void {\n if (this.#renderScheduled) {\n return;\n }\n\n this.#renderScheduled = true;\n\n requestAnimationFrame(() => {\n this.#renderScheduled = false;\n this.#render();\n });\n }\n\n async #loadStyles(): Promise<void> {\n if (!this.#styleUrls.length) {\n return;\n }\n\n const fetched = await fetchStyles(this.#styleUrls);\n const inlineStyles = this.#styles ? [this.#styles] : [];\n this.#styles = [...inlineStyles, ...fetched.filter(Boolean)].join('\\n');\n }\n\n #render(): void {\n const root = this.#shadow;\n\n let templateResult: TemplateResult | null | undefined;\n\n if (typeof this.render === 'function') {\n templateResult = this.render();\n } else {\n templateResult = templateFn.call(this as unknown as TElement, this as unknown as TElement);\n }\n\n const styleTemplate = this.#styles ? html`<style>${this.#styles}</style>` : null;\n const slotTemplate = autoSlot ? html`<slot></slot>` : null;\n\n const completeTemplate = html`\n ${styleTemplate}\n ${templateResult ?? null}\n ${slotTemplate}\n `;\n\n const commit = (): void => {\n render(completeTemplate, root);\n this.afterRender?.();\n };\n\n if (typeof this.wrapRender === 'function') {\n const fragment = document.createDocumentFragment();\n const tempDiv = document.createElement('div');\n\n render(completeTemplate, tempDiv);\n\n fragment.append(...tempDiv.childNodes);\n\n this.wrapRender(commit, { fragment, root });\n return;\n }\n\n commit();\n }\n }\n\n // SSR safety: only register in browser environments\n if (typeof customElements !== 'undefined' && !customElements.get(tag)) {\n customElements.define(tag, Decorated as unknown as CustomElementConstructor);\n }\n\n return Decorated as unknown as TBase;\n };\n","type RenderHost = HTMLElement & {\n requestRender?(): void;\n render?(): void;\n connectedCallback?(): void;\n disconnectedCallback?(...args: unknown[]): void;\n};\n\ntype PropTypeDescriptor =\n | BooleanConstructor\n | NumberConstructor\n | StringConstructor\n | ObjectConstructor\n | ArrayConstructor\n | 'boolean'\n | 'number'\n | 'string'\n | 'json';\n\ntype Formatter<TValue, THost extends RenderHost> = (this: THost, value: TValue) => string | null | undefined;\ntype Parser<TValue, THost extends RenderHost> = (this: THost, value: string | null) => TValue;\n\ninterface PropOptions<TValue, THost extends RenderHost> {\n attribute?: string;\n reflect?: boolean;\n type?: PropTypeDescriptor;\n parse?: Parser<TValue, THost>;\n format?: Formatter<TValue, THost>;\n defaultValue?: TValue | ((this: THost) => TValue);\n compare?: (previous: TValue, next: TValue) => boolean;\n onChange?: (this: THost, next: TValue, previous: TValue) => void;\n onAttributeChange?: (this: THost, next: TValue, previous: TValue) => void;\n}\n\ninterface AttributeObserverEntry {\n observer: MutationObserver;\n callbacks: Map<string, Set<(value: string | null) => void>>;\n}\n\nconst renderQueue = new WeakMap<RenderHost, boolean>();\nconst cleanupRegistry = new WeakMap<RenderHost, Set<() => void>>();\nconst observerRegistry = new WeakMap<RenderHost, AttributeObserverEntry>();\nconst internalMutations = new WeakMap<RenderHost, Set<string>>();\n\nconst scheduleRender = (instance: RenderHost): void => {\n if (typeof instance.requestRender === 'function') {\n instance.requestRender();\n return;\n }\n\n if (typeof instance.render !== 'function') {\n return;\n }\n\n if (renderQueue.get(instance)) {\n return;\n }\n\n renderQueue.set(instance, true);\n\n requestAnimationFrame(() => {\n renderQueue.delete(instance);\n instance.render?.();\n });\n};\n\nconst toKebabCase = (value: PropertyKey): string =>\n String(value)\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[_\\s]+/g, '-')\n .toLowerCase();\n\nconst registerCleanup = (instance: RenderHost, cleanup: () => void): void => {\n let callbacks = cleanupRegistry.get(instance);\n\n if (!callbacks) {\n callbacks = new Set();\n cleanupRegistry.set(instance, callbacks);\n\n const original = instance.disconnectedCallback;\n\n instance.disconnectedCallback = function (this: RenderHost, ...args: unknown[]) {\n const registered = cleanupRegistry.get(this);\n registered?.forEach((callback) => {\n try {\n callback();\n } catch (error) {\n console.error('[Prop] cleanup failed', error);\n }\n });\n cleanupRegistry.delete(this);\n\n if (typeof original === 'function') {\n return original.apply(this, args as []);\n }\n\n return undefined;\n } as typeof instance.disconnectedCallback;\n }\n\n callbacks.add(cleanup);\n};\n\nconst markInternalMutation = (host: RenderHost, attribute: string): void => {\n let attributes = internalMutations.get(host);\n\n if (!attributes) {\n attributes = new Set();\n internalMutations.set(host, attributes);\n }\n\n attributes.add(attribute);\n};\n\nconst isInternalMutation = (host: RenderHost, attribute: string): boolean => {\n const attributes = internalMutations.get(host);\n\n if (!attributes) {\n return false;\n }\n\n const hasAttribute = attributes.has(attribute);\n\n if (hasAttribute) {\n attributes.delete(attribute);\n if (attributes.size === 0) {\n internalMutations.delete(host);\n }\n }\n\n return hasAttribute;\n};\n\nconst observeAttribute = (host: RenderHost, attribute: string, handler: (value: string | null) => void): void => {\n let entry = observerRegistry.get(host);\n\n if (!entry) {\n const callbacks = new Map<string, Set<(value: string | null) => void>>();\n const observer = new MutationObserver((records) => {\n records.forEach((record) => {\n const attributeName = record.attributeName;\n\n if (!attributeName) {\n return;\n }\n\n if (isInternalMutation(host, attributeName)) {\n return;\n }\n\n const listeners = callbacks.get(attributeName);\n if (!listeners) {\n return;\n }\n\n const currentValue = (record.target as Element).getAttribute(attributeName);\n\n for (const listener of listeners) {\n listener(currentValue);\n }\n });\n });\n\n observer.observe(host, { attributes: true });\n\n entry = { observer, callbacks };\n observerRegistry.set(host, entry);\n\n registerCleanup(host, () => {\n observer.disconnect();\n observerRegistry.delete(host);\n });\n }\n\n let listeners = entry.callbacks.get(attribute);\n\n if (!listeners) {\n listeners = new Set();\n entry.callbacks.set(attribute, listeners);\n }\n\n listeners.add(handler);\n};\n\nconst updateAttribute = (host: RenderHost, attribute: string, value: string | null | undefined | boolean): void => {\n markInternalMutation(host, attribute);\n\n if (value === undefined || value === null || value === false) {\n host.removeAttribute(attribute);\n return;\n }\n\n if (value === true) {\n host.setAttribute(attribute, '');\n return;\n }\n\n host.setAttribute(attribute, String(value));\n};\n\nconst resolveType = (type: PropTypeDescriptor | undefined): 'boolean' | 'number' | 'json' | 'string' | null => {\n if (!type) {\n return null;\n }\n\n if (type === Boolean || type === 'boolean') {\n return 'boolean';\n }\n\n if (type === Number || type === 'number') {\n return 'number';\n }\n\n if (type === Object || type === Array || type === 'json') {\n return 'json';\n }\n\n return 'string';\n};\n\nconst typeParsers: Record<'boolean' | 'number' | 'json' | 'string', Parser<unknown, RenderHost>> = {\n boolean(value: string | null): boolean {\n return value !== null;\n },\n number(value: string | null): number | null {\n if (value === null || value === '') {\n return null;\n }\n\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n },\n json(value: string | null): unknown {\n if (!value) {\n return null;\n }\n\n try {\n return JSON.parse(value);\n } catch (error) {\n console.warn('[Prop] failed to parse JSON attribute', error);\n return null;\n }\n },\n string(value: string | null): string | null {\n return value;\n }\n};\n\nconst typeFormatters: Record<'boolean' | 'number' | 'json' | 'string', Formatter<unknown, RenderHost>> = {\n boolean(value: unknown): string | null {\n return value ? '' : null;\n },\n number(value: unknown): string | null {\n if (value === null || value === undefined || value === '') {\n return null;\n }\n return String(value);\n },\n json(value: unknown): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n try {\n return JSON.stringify(value);\n } catch {\n return null;\n }\n },\n string(value: unknown): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n return String(value);\n }\n};\n\nconst defaultCompare = <TValue>(previous: TValue, next: TValue): boolean => previous === next;\n\nexport function Prop<TValue, THost extends RenderHost = RenderHost>(options: PropOptions<TValue, THost> = {}) {\n const {\n attribute,\n reflect = true,\n type,\n parse,\n format,\n defaultValue,\n compare = defaultCompare,\n onChange,\n onAttributeChange\n } = options;\n\n const resolvedType = resolveType(type);\n\n const parseValue: Parser<TValue, THost> = parse\n ? parse\n : function (this: THost, value) {\n if (!resolvedType) {\n return value as unknown as TValue;\n }\n return typeParsers[resolvedType].call(this, value) as TValue;\n };\n\n const formatValue: Formatter<TValue, THost> = format\n ? format\n : function (this: THost, value) {\n if (!resolvedType) {\n return (value as unknown as string | null | undefined) ?? null;\n }\n return typeFormatters[resolvedType].call(this, value as unknown) as string | null;\n };\n\n return (\n accessor: ClassAccessorDecoratorTarget<THost, TValue>,\n context: ClassAccessorDecoratorContext<THost, TValue>\n ): ClassAccessorDecoratorResult<THost, TValue> => {\n if (context.kind !== 'accessor') {\n throw new Error('@Prop requires the \"accessor\" keyword on the property.');\n }\n\n const attributeName = attribute ?? toKebabCase(context.name);\n\n context.addInitializer(function (this: THost) {\n if (!reflect) {\n return;\n }\n\n observeAttribute(this, attributeName, (rawValue) => {\n if (isInternalMutation(this, attributeName)) {\n return;\n }\n\n const parsed = parseValue.call(this, rawValue);\n const previous = accessor.get.call(this);\n\n if (compare(previous, parsed)) {\n return;\n }\n\n accessor.set.call(this, parsed);\n\n onAttributeChange?.call(this, parsed, previous);\n scheduleRender(this);\n });\n });\n\n return {\n get(this: THost): TValue {\n return accessor.get.call(this);\n },\n set(this: THost, value: TValue): void {\n const previous = accessor.get.call(this);\n\n if (compare(previous, value)) {\n return;\n }\n\n accessor.set.call(this, value);\n\n if (reflect) {\n const formatted = formatValue.call(this, value);\n updateAttribute(this, attributeName, formatted);\n }\n\n onChange?.call(this, value, previous);\n scheduleRender(this);\n },\n init(this: THost, initialValue: TValue): TValue {\n let value = initialValue;\n\n if (this.hasAttribute(attributeName)) {\n value = parseValue.call(this, this.getAttribute(attributeName));\n } else if (value === undefined && defaultValue !== undefined) {\n value =\n typeof defaultValue === 'function' ? (defaultValue as (this: THost) => TValue).call(this) : defaultValue;\n }\n\n if (reflect) {\n const formatted = formatValue.call(this, value);\n updateAttribute(this, attributeName, formatted);\n }\n\n return value;\n }\n };\n };\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-checkbox',\n styles: `\n .checkbox {\n display: table;\n border-radius: var(--ease-checkbox-radius, 5px);\n position: relative;\n\n svg {\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n pointer-events: none;\n fill: var(--ease-checkbox-check-color, var(--color-blue-100));\n transform: scale(1.01) translateZ(0);\n\n .tick {\n fill: none;\n stroke-width: 3px;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke: var(--ease-checkbox-check-color, var(--color-blue-100));\n transform-origin: 10.5px 16px;\n transform: scale(1) translateZ(0);\n }\n\n .dot {\n transform-origin: 10.5px 15.5px;\n transform: scale(1) translateZ(0);\n transform-box: fill-box;\n }\n\n .drop {\n transform-origin: 25px -1px;\n transform: scale(1) translateZ(0);\n opacity: 0;\n }\n }\n }\n\n [part=\"checkbox\"] {\n display: table;\n margin: 0;\n padding: 0;\n appearance: none;\n cursor: pointer;\n background: none;\n border: none;\n outline: none;\n }\n\n [part=\"control\"] {\n appearance: none;\n outline: none;\n border: none;\n background: none;\n display: block;\n cursor: pointer;\n margin: 0;\n padding: 0;\n border-radius: inherit;\n width: var(--ease-checkbox-size, 24px);\n height: var(--ease-checkbox-size, 24px);\n }\n\n [part=\"control\"] {\n box-shadow: inset 0 0 0 var(--ease-checkbox-border-width, 2px) var(--ease-checkbox-border-color, var(--color-gray-700));\n }\n\n .tick {\n stroke-dasharray: 16px 33px;\n stroke-dashoffset: 20.5px;\n }\n\n .dot {\n transform: translate(14px, -14px) scale(1) translateZ(0);\n opacity: 0;\n }\n\n [part=\"control\"]:checked {\n box-shadow: inset 0 0 0 var(--ease-checkbox-checked-fill-size, 12px) var(--ease-checkbox-checked-fill, var(--color-blue-800));\n }\n\n [part=\"control\"]:checked + svg .tick {\n stroke-dasharray: 16.5px 33px;\n stroke-dashoffset: 46.5px;\n }\n\n [part=\"control\"]:checked + svg .dot {\n transform: translate(0px, 0px) scale(1) translateZ(0);\n opacity: 1;\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-checked {\n animation: checkbox-border-fill 0.2s ease-out forwards, checkbox-morph 0.5s ease-out forwards;\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-checked + svg {\n .tick {\n animation: checkbox-tick 0.65s ease-out forwards;\n }\n\n .dot {\n animation: checkbox-dot-move 0.6s ease-out forwards;\n }\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-unchecked {\n animation: checkbox-border-default 0.4s ease-out forwards;\n }\n\n [part=\"checkbox\"] [part=\"control\"].anim-unchecked + svg {\n .tick {\n animation: checkbox-tick-default 0.2s ease-out forwards;\n }\n .dot {\n animation: checkbox-dot-hide 0.2s ease-out forwards;\n }\n }\n \n @keyframes checkbox-border-fill {\n 0% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-border-width, 2px) var(--ease-checkbox-border-color, var(--color-gray-700));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-checked-fill-size, 12px) var(--ease-checkbox-checked-fill, var(--color-blue-800));\n }\n }\n\n @keyframes checkbox-morph {\n 0%, 40% {\n border-radius: 5px 14px 5px 5px;\n }\n 100% {\n border-radius: 5px;\n }\n }\n\n @keyframes checkbox-tick {\n 0% {\n stroke-dasharray: 16px 33px;\n stroke-dashoffset: 20.5px;\n }\n 47% {\n stroke-dasharray: 14px 33px;\n stroke-dashoffset: 48px;\n }\n 100% {\n stroke-dasharray: 16.5px 33px;\n stroke-dashoffset: 46.5px;\n }\n }\n\n @keyframes checkbox-dot-move {\n 0%, 40% {\n transform: translate(14px, -14px) scale(1) translateZ(0);\n opacity: 0;\n }\n 100% {\n transform: translate(0px, 0px) scale(1) translateZ(0);\n opacity: 1;\n }\n }\n\n @keyframes checkbox-dot-hide {\n 0% {\n transform: translate(0px, 0px) scale(1) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translate(14px, -14px) scale(1) translateZ(0);\n opacity: 0;\n }\n }\n\n @keyframes checkbox-border-default {\n 0%,\n 40% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-checked-fill-size, 12px) var(--ease-checkbox-checked-fill, var(--color-blue-800));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-checkbox-border-width, 2px) var(--ease-checkbox-border-color, var(--color-gray-700));\n }\n }\n\n @keyframes checkbox-tick-default {\n 0% {\n stroke-dasharray: 16.5px 33px;\n stroke-dashoffset: 46.5px;\n }\n 100% {\n stroke-dasharray: 16px 33px;\n stroke-dashoffset: 20.5px;\n }\n }\n `,\n template(this: Checkbox) {\n return html`\n <button\n part=\"checkbox\"\n type=\"button\"\n role=\"checkbox\"\n aria-checked=${this.checked}\n ?disabled=${this.disabled}\n >\n <div class=\"checkbox\">\n <input\n part=\"control\"\n name=${this.name}\n value=${this.value}\n ?checked=${this.checked}\n ?disabled=${this.disabled}\n type=\"checkbox\"\n />\n <svg viewBox=\"0 0 24 24\" filter=\"url(#${this.filterId})\">\n <path class=\"tick\" d=\"M4.5 10L10.5 16L24.5 1\" />\n <circle class=\"dot\" cx=\"10.5\" cy=\"15.5\" r=\"1.5\" />\n <circle class=\"drop\" cx=\"25\" cy=\"-1\" r=\"2\" />\n </svg>\n </div>\n\n <svg style=\"display: none;\">\n <defs>\n <filter id=\"${this.filterId}\">\n <feGaussianBlur\n in=\"SourceGraphic\"\n stdDeviation=\"1.25\"\n result=\"blur\"\n />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9\"\n result=\"gooey\"\n />\n <feBlend in=\"SourceGraphic\" in2=\"gooey\" />\n </filter>\n </defs>\n </svg>\n </button>\n `;\n }\n})\nexport class Checkbox extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor checked!: boolean;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLButtonElement>('button')\n accessor control!: HTMLButtonElement | null;\n\n private _prevChecked?: boolean;\n\n filterId: string = `goo-${crypto.randomUUID()}`;\n\n connectedCallback(): void {\n this._prevChecked = this.checked;\n }\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const changed = typeof this._prevChecked !== 'undefined' && this.checked !== this._prevChecked;\n\n if (changed) {\n this._triggerAnimation(this.checked);\n this._prevChecked = this.checked;\n }\n\n const control = this.control;\n control.setAttribute('aria-checked', this.checked ? 'true' : 'false');\n control.disabled = Boolean(this.disabled);\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n private _triggerAnimation(checked: boolean): void {\n const control = this.shadowRoot?.querySelector('[part=\"control\"]');\n const svg = this.shadowRoot?.querySelector('svg');\n if (!control || !svg) {\n return;\n }\n\n control.classList.remove('anim-checked', 'anim-unchecked');\n svg.classList.remove('anim-checked', 'anim-unchecked');\n\n const animClass = checked ? 'anim-checked' : 'anim-unchecked';\n const duration = checked ? 650 : 400;\n\n control.classList.add(animClass);\n svg.classList.add(animClass);\n\n setTimeout(() => {\n control.classList.remove(animClass);\n svg.classList.remove(animClass);\n }, duration);\n }\n\n @Listen<Checkbox, MouseEvent, HTMLButtonElement>('click', {\n selector: 'button'\n })\n handleClick(event: MouseEvent): void {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n\n return;\n }\n\n this.checked = !this.checked;\n\n dispatchControlEvent(this, 'checkbox', { value: this.checked, event });\n }\n}\n","/**\n * Standard control event detail interface for Leva/lil-gui style state aggregation.\n * All control components should dispatch events with this shape.\n */\nexport interface ControlEventDetail<TValue = unknown> {\n /** The control's name/identifier for state aggregation */\n name?: string;\n /** The current value of the control */\n value: TValue;\n /** The original DOM event that triggered this change */\n event: Event;\n}\n\n/** The standard event type for control value changes */\nexport const CONTROL_CHANGE_EVENT = 'control-change';\n\n/**\n * Dispatch a control change event with standard shape.\n * Events bubble and are composed (cross shadow DOM boundaries).\n *\n * @param host - The element dispatching the event\n * @param type - Event type (prefer CONTROL_CHANGE_EVENT for standard controls)\n * @param detail - Event detail with value and optional name\n *\n * @example\n * ```ts\n * dispatchControlEvent(this, CONTROL_CHANGE_EVENT, {\n * name: this.name,\n * value: this.value,\n * event: e\n * });\n * ```\n */\nexport const dispatchControlEvent = <THost extends HTMLElement, TValue>(\n host: THost,\n type: string,\n detail: ControlEventDetail<TValue>\n): void => {\n host.dispatchEvent(\n new CustomEvent<ControlEventDetail<TValue>>(type, {\n detail,\n bubbles: true,\n composed: true\n })\n );\n};\n\nexport const setBooleanAttribute = (element: Element | null | undefined, name: string, value: boolean): void => {\n if (!element) {\n return;\n }\n\n if (value) {\n element.setAttribute(name, '');\n } else {\n element.removeAttribute(name);\n }\n};\n\nexport const coerceNumber = (value: string): number | null => {\n if (value === '') {\n return null;\n }\n\n const parsed = Number(value);\n return Number.isNaN(parsed) ? null : parsed;\n};\n\ntype ControlElement = Element & {\n value?: unknown;\n checked?: unknown;\n};\n\nexport const readControlValue = (element: ControlElement): string | null => {\n if (typeof element.value === 'string' || typeof element.value === 'number') {\n return String(element.value);\n }\n\n if (typeof element.checked === 'boolean') {\n return element.checked ? 'true' : 'false';\n }\n\n if ('getAttribute' in element) {\n const attr = (element as Element).getAttribute('value');\n if (attr !== null) {\n return attr;\n }\n }\n\n return element.textContent?.trim() ?? null;\n};\n","type ListenHost = HTMLElement & {\n renderRoot?: ShadowRoot | DocumentFragment | HTMLElement;\n};\n\ntype LifecycleHookName = 'connectedCallback' | 'disconnectedCallback';\n\ntype LifecycleCallback<THost extends ListenHost> = (this: THost) => void;\n\ntype ListenTargetResolver<THost extends ListenHost> =\n | 'document'\n | 'window'\n | 'shadow'\n | 'root'\n | 'light'\n | EventTarget\n | ((host: THost) => EventTarget | null | undefined);\n\ntype Predicate<TEvent extends Event, TElement extends Element> = (event: TEvent, matched: TElement | null) => boolean;\n\ninterface ListenOptions<THost extends ListenHost, TElement extends Element, TEvent extends Event> {\n selector?: string;\n target?: ListenTargetResolver<THost>;\n prevent?: boolean;\n stop?: boolean;\n stopImmediate?: boolean;\n once?: boolean;\n passive?: boolean;\n capture?: boolean;\n when?: Predicate<TEvent, TElement>;\n}\n\ntype Cleanup = () => void;\n\nconst lifecycleHooks: Record<LifecycleHookName, WeakMap<ListenHost, Set<LifecycleCallback<ListenHost>>>> = {\n connectedCallback: new WeakMap(),\n disconnectedCallback: new WeakMap()\n};\n\nconst cleanupRegistry = new WeakMap<ListenHost, Set<Cleanup>>();\n\nconst addLifecycleHook = <THost extends ListenHost>(\n instance: THost,\n hookName: LifecycleHookName,\n handler: LifecycleCallback<THost>\n): void => {\n const store = lifecycleHooks[hookName] as WeakMap<THost, Set<LifecycleCallback<THost>>>;\n let callbacks = store.get(instance);\n\n if (!callbacks) {\n callbacks = new Set<LifecycleCallback<THost>>();\n store.set(instance, callbacks);\n\n const original = (instance as unknown as Record<LifecycleHookName, unknown>)[hookName];\n\n (instance as unknown as Record<LifecycleHookName, unknown>)[hookName] = function (...args: unknown[]) {\n callbacks?.forEach((callback) => {\n callback.apply(this as THost);\n });\n\n if (typeof original === 'function') {\n return (original as (...params: unknown[]) => unknown).apply(this, args);\n }\n\n return undefined;\n };\n }\n\n callbacks.add(handler);\n};\n\nconst registerCleanup = <THost extends ListenHost>(instance: THost, cleanup: Cleanup): void => {\n let callbacks = cleanupRegistry.get(instance);\n\n if (!callbacks) {\n callbacks = new Set();\n cleanupRegistry.set(instance, callbacks);\n\n addLifecycleHook(instance, 'disconnectedCallback', function (this: THost) {\n const registered = cleanupRegistry.get(this);\n registered?.forEach((fn) => {\n try {\n fn();\n } catch (error) {\n console.error('[Listen] cleanup failed', error);\n }\n });\n cleanupRegistry.delete(this);\n });\n }\n\n callbacks.add(cleanup);\n};\n\nconst resolveTarget = <THost extends ListenHost>(\n host: THost,\n target: ListenTargetResolver<THost> | undefined\n): EventTarget | null => {\n if (typeof target === 'function') {\n return target(host) ?? null;\n }\n\n if (target instanceof EventTarget) {\n return target;\n }\n\n switch (target) {\n case 'document':\n return document;\n case 'window':\n return window;\n case 'light':\n return host;\n default:\n return host.renderRoot ?? host.shadowRoot ?? host;\n }\n};\n\nconst normalizeOptions = <THost extends ListenHost, TElement extends Element, TEvent extends Event>(\n selectorOrOptions: string | ListenOptions<THost, TElement, TEvent> | undefined\n): ListenOptions<THost, TElement, TEvent> => {\n if (typeof selectorOrOptions === 'string') {\n return { selector: selectorOrOptions };\n }\n\n return selectorOrOptions ?? {};\n};\n\nconst buildOptions = <THost extends ListenHost, TElement extends Element, TEvent extends Event>(\n options: ListenOptions<THost, TElement, TEvent>\n) => {\n return {\n selector: options.selector ?? null,\n target: options.target ?? 'shadow',\n prevent: options.prevent ?? false,\n stop: options.stop ?? false,\n stopImmediate: options.stopImmediate ?? false,\n once: options.once ?? false,\n passive: options.passive,\n capture: options.capture ?? false,\n when: options.when ?? null\n };\n};\n\nexport function Listen<THost extends ListenHost, TEvent extends Event = Event, TElement extends Element = Element>(\n eventName: keyof HTMLElementEventMap | string,\n selectorOrOptions?: string | ListenOptions<THost, TElement, TEvent>\n) {\n if (!eventName) {\n throw new Error('@Listen requires an event name.');\n }\n\n const listenConfig = buildOptions(normalizeOptions(selectorOrOptions));\n\n return (\n originalMethod: (this: THost, event: TEvent, matched?: TElement | null) => unknown,\n context: ClassMethodDecoratorContext<THost, typeof originalMethod>\n ): void => {\n context.addInitializer(function (this: THost) {\n let attached = false;\n\n const attach = () => {\n if (attached) {\n return;\n }\n\n const target = resolveTarget(this, listenConfig.target);\n\n if (!target || typeof (target as EventTarget).addEventListener !== 'function') {\n console.warn(`@Listen unable to resolve target for ${String(eventName)}`);\n return;\n }\n\n const eventOptions: AddEventListenerOptions = {\n capture: listenConfig.capture,\n once: listenConfig.once,\n passive: listenConfig.passive !== undefined ? listenConfig.passive : !listenConfig.prevent\n };\n\n const handler = (event: Event): void => {\n const typedEvent = event as TEvent;\n\n if (listenConfig.prevent) {\n typedEvent.preventDefault();\n }\n\n if (listenConfig.stopImmediate) {\n typedEvent.stopImmediatePropagation();\n } else if (listenConfig.stop) {\n typedEvent.stopPropagation();\n }\n\n let matched: TElement | null = null;\n\n if (listenConfig.selector) {\n const path = typedEvent.composedPath();\n matched =\n path.find(\n (node): node is TElement => node instanceof Element && node.matches(listenConfig.selector as string)\n ) ?? null;\n\n if (!matched) {\n return;\n }\n }\n\n if (listenConfig.when && !listenConfig.when(typedEvent, matched)) {\n return;\n }\n\n if (listenConfig.selector) {\n void originalMethod.call(this, typedEvent, matched);\n } else {\n const targetNode = (\n typedEvent.target instanceof Element ? (typedEvent.target as TElement) : null\n ) as TElement | null;\n void originalMethod.call(this, typedEvent, targetNode);\n }\n };\n\n target.addEventListener(eventName as string, handler, eventOptions);\n attached = true;\n\n registerCleanup(this, () => {\n target.removeEventListener(eventName as string, handler, eventOptions);\n attached = false;\n });\n };\n\n // IMPORTANT:\n // Many components are created inside templates/shadow DOM. At construction time they are often not connected yet,\n // and patching instance lifecycle callbacks is not reliably invoked by the platform.\n // Attach the listener ASAP (microtask) so it works for nested components as well.\n queueMicrotask(attach);\n\n // Best-effort attach on connect too (idempotent).\n addLifecycleHook(this, 'connectedCallback', attach);\n });\n };\n}\n","type QueryRoot = 'shadow' | 'light' | 'document';\n\ntype QueryHost = HTMLElement & {\n renderRoot?: ShadowRoot | DocumentFragment | HTMLElement;\n};\n\ntype QueryFallback<TResult, THost extends QueryHost> = TResult | ((host: THost) => TResult);\n\ninterface BaseQueryOptions<TResult, THost extends QueryHost> {\n from?: QueryRoot;\n fallback?: QueryFallback<TResult, THost>;\n}\n\ninterface QueryAllOptions<TElement extends Element, THost extends QueryHost>\n extends BaseQueryOptions<TElement[], THost> {\n all: true;\n closest?: false;\n}\n\ninterface QueryClosestOptions<THost extends QueryHost> extends BaseQueryOptions<Element | null, THost> {\n closest: true;\n all?: false;\n}\n\ninterface QuerySingleOptions<TElement extends Element, THost extends QueryHost>\n extends BaseQueryOptions<TElement | null, THost> {\n all?: false;\n closest?: false;\n}\n\ntype QueryOptions<TElement extends Element, THost extends QueryHost> =\n | QueryAllOptions<TElement, THost>\n | QueryClosestOptions<THost>\n | QuerySingleOptions<TElement, THost>;\n\ntype QueryReturnType<\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n> = TOptions extends QueryAllOptions<TElement, THost>\n ? TElement[]\n : TOptions extends QueryClosestOptions<THost>\n ? Element | null\n : TElement | null;\n\ntype QueryDecorator<\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n> = (\n target: ClassAccessorDecoratorTarget<THost, QueryReturnType<TElement, THost, TOptions>> | undefined,\n context:\n | ClassFieldDecoratorContext<THost, QueryReturnType<TElement, THost, TOptions>>\n | ClassAccessorDecoratorContext<THost, QueryReturnType<TElement, THost, TOptions>>\n) => ClassAccessorDecoratorResult<THost, QueryReturnType<TElement, THost, TOptions>> | undefined;\n\nconst defaultOptions = {\n all: false,\n closest: false,\n from: 'shadow' as QueryRoot | undefined,\n fallback: null\n} as const satisfies QuerySingleOptions<Element, QueryHost>;\n\nconst resolveFallback = <TResult, THost extends QueryHost>(\n fallback: QueryFallback<TResult, THost> | undefined,\n host: THost\n): TResult | undefined => {\n if (typeof fallback === 'function') {\n return (fallback as (instance: THost) => TResult)(host);\n }\n\n return fallback;\n};\n\nconst resolveRoot = (host: QueryHost, option: QueryRoot | undefined): ParentNode | null => {\n switch (option) {\n case 'document':\n return document;\n case 'light':\n return host;\n default:\n return host.renderRoot ?? host.shadowRoot ?? host;\n }\n};\n\nconst resolveQuery = <\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n>(\n host: THost,\n selector: string,\n options: TOptions\n) => {\n if (options.closest) {\n const result = host.closest(selector);\n return result ?? resolveFallback(options.fallback as QueryFallback<Element | null, THost>, host) ?? null;\n }\n\n const root = resolveRoot(host, options.from);\n\n if (!root) {\n return options.all\n ? (resolveFallback(options.fallback as QueryFallback<TElement[], THost>, host) ?? [])\n : (resolveFallback(options.fallback as QueryFallback<TElement | null, THost>, host) ?? null);\n }\n\n if (options.all) {\n const elements = Array.from(root.querySelectorAll<TElement>(selector));\n return elements.length > 0\n ? elements\n : (resolveFallback(options.fallback as QueryFallback<TElement[], THost>, host) ?? []);\n }\n\n const match = root.querySelector<TElement>(selector);\n return match ?? resolveFallback(options.fallback as QueryFallback<TElement | null, THost>, host) ?? null;\n};\n\nconst createQueryDecorator = <\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n>(\n selector: string,\n options: TOptions\n): QueryDecorator<TElement, THost, TOptions> => {\n type Result = QueryReturnType<TElement, THost, TOptions>;\n\n return (\n _target: ClassAccessorDecoratorTarget<THost, Result> | undefined,\n context: ClassFieldDecoratorContext<THost, Result> | ClassAccessorDecoratorContext<THost, Result>\n ): ClassAccessorDecoratorResult<THost, Result> | undefined => {\n if (context.kind === 'accessor') {\n const descriptor: ClassAccessorDecoratorResult<THost, Result> = {\n get(this: THost) {\n return resolveQuery<TElement, THost, TOptions>(this, selector, options) as Result;\n },\n set(_value: Result) {\n // Readonly accessor\n }\n };\n return descriptor;\n }\n\n context.addInitializer(function (this: THost) {\n Object.defineProperty(this, context.name, {\n configurable: true,\n enumerable: true,\n get: () => resolveQuery<TElement, THost, TOptions>(this, selector, options) as Result\n });\n });\n\n return;\n };\n};\n\nexport function Query<\n TElement extends Element,\n THost extends QueryHost,\n TOptions extends QueryOptions<TElement, THost>\n>(selector: string, userOptions: TOptions): QueryDecorator<TElement, THost, TOptions>;\n\nexport function Query<TElement extends Element = Element, THost extends QueryHost = QueryHost>(\n selector: string\n): QueryDecorator<TElement, THost, QuerySingleOptions<TElement, THost>>;\n\nexport function Query<TElement extends Element = Element, THost extends QueryHost = QueryHost>(\n selector: string,\n userOptions?: QueryOptions<TElement, THost>\n) {\n if (!selector) {\n throw new Error('@Query requires a selector.');\n }\n\n if (userOptions) {\n const merged = { ...defaultOptions, ...userOptions } as QueryOptions<TElement, THost>;\n return createQueryDecorator<TElement, THost, typeof merged>(selector, merged);\n }\n\n const merged = defaultOptions as QuerySingleOptions<TElement, THost>;\n return createQueryDecorator<TElement, THost, typeof merged>(selector, merged);\n}\n","import type { Placement } from '~/elements/popover';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\nimport '../dropdown';\nimport '../input';\nimport './picker';\n\nimport { isValidHex } from './utils';\n\nimport { styleMap } from '~/utils/template-helpers';\n\n@Component({\n tag: 'ease-color-input',\n styles: `\n :host {\n display: block;\n position: relative;\n }\n\n ease-dropdown {\n --ease-dropdown-panel-min-width: auto;\n --ease-dropdown-panel-width: max-content;\n --ease-dropdown-panel-max-width: max-content;\n }\n\n :host(:not([custom-trigger])) ease-input {\n --ease-input-padding: 0 4px 0 4px;\n display: block;\n width: 76px;\n cursor: pointer;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n\n &::part(control) {\n margin-left: -12px;\n cursor: pointer;\n }\n }\n\n ease-dropdown::part(trigger):disabled {\n cursor: default;\n opacity: 0.75;\n }\n\n :host(:not([custom-trigger])) [slot=\"prefix\"] {\n display: block;\n width: 14px;\n height: 14px;\n margin-left: -4px;\n border-radius: 4px;\n box-shadow: inset 0 0 0 1px var(--color-white-10);\n }\n\n [part=\"value-text\"] {\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n }\n\n ease-dropdown::part(content) {\n padding: var(--ease-color-input-dropdown-padding, 12px 12px 8px 12px);\n overflow: visible;\n }\n\n ::slotted([slot=\"trigger\"]) {\n cursor: pointer;\n }\n `\n})\nexport class ColorInput extends HTMLElement {\n declare requestRender: () => void;\n\n #hasCustomTrigger = false;\n\n @Query('ease-dropdown') accessor dropdown!: (HTMLElement & { open: boolean }) | null;\n\n @Prop<string, ColorInput>({\n reflect: true,\n defaultValue: '#FF0000',\n onChange(next) {\n if (next && isValidHex(next)) {\n const normalized = next.toUpperCase();\n if (this.value !== normalized) {\n this.value = normalized;\n }\n } else if (!next) {\n this.value = '#000000';\n }\n }\n })\n accessor value!: string;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n @Prop<Placement>({ reflect: true, defaultValue: 'bottom-start' })\n accessor placement: Placement = 'bottom-start';\n\n connectedCallback(): void {\n this.#hasCustomTrigger = this.querySelector('[slot=\"trigger\"]') !== null;\n setBooleanAttribute(this, 'custom-trigger', this.#hasCustomTrigger);\n }\n\n afterRender(): void {\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n #renderDefaultTrigger(): TemplateResult {\n const swatchStyle = {\n backgroundColor: this.value\n } as const;\n\n return html`\n <div slot=\"trigger\" part=\"trigger-content\">\n <ease-input part=\"input\" type=\"text\" .value=${this.value} @change=${this.#handleInputChange} headless>\n <div slot=\"prefix\" style=${styleMap(swatchStyle)}></div>\n </ease-input>\n </div>\n `;\n }\n\n render(): TemplateResult {\n return html`\n <ease-dropdown .disabled=${this.disabled} .placement=${this.placement}>\n ${this.#hasCustomTrigger ? html`<slot name=\"trigger\" slot=\"trigger\"></slot>` : this.#renderDefaultTrigger()}\n <ease-color-picker slot=\"content\"\n data-select-ignore\n .value=${this.value}\n @input=${this.#handlePickerInput}\n @change=${this.#handlePickerChange}\n @cancel=${this.#handlePickerCancel}\n @apply=${this.#handlePickerApply}\n ></ease-color-picker>\n </ease-dropdown>\n `;\n }\n\n #handleInputChange = (event: Event): void => {\n this.value = (event.target as HTMLInputElement).value;\n dispatchControlEvent(this, 'input', { value: this.value, event });\n };\n\n #handlePickerInput = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n dispatchControlEvent(this, 'input', { value: this.value, event });\n };\n\n #handlePickerChange = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n\n #handlePickerCancel = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n this.requestRender();\n if (this.dropdown) {\n this.dropdown.open = false;\n }\n };\n\n #handlePickerApply = (event: CustomEvent<{ value: string }>): void => {\n this.value = event.detail.value;\n dispatchControlEvent(this, 'change', { value: this.value, event });\n if (this.dropdown) {\n this.dropdown.open = false;\n }\n };\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\nexport type Placement =\n | 'top-start'\n | 'top-center'\n | 'top-end'\n | 'bottom-start'\n | 'bottom-center'\n | 'bottom-end'\n | 'left-start'\n | 'left-center'\n | 'left-end'\n | 'right-start'\n | 'right-center'\n | 'right-end';\n\nconst nextAnchorName = (): string => `--ease-popover-anchor-${crypto.randomUUID()}`;\n\n@Component({\n tag: 'ease-popover',\n autoSlot: false,\n shadowMode: 'open',\n styles: `\n :host {\n display: contents;\n --ease-popover-offset: 8px;\n --ease-popover-anchor-name: --ease-popover-anchor;\n --ease-popover-transform-origin: center center;\n --ease-popover-duration: 200ms;\n --ease-popover-content-min-width: auto;\n --ease-popover-content-max-width: none;\n --ease-popover-content-width: max-content;\n }\n\n ::slotted([slot=\"trigger\"]) {\n anchor-name: var(--ease-popover-anchor-name);\n }\n\n [part=\"content\"] {\n position-anchor: var(--ease-popover-anchor-name);\n position: fixed;\n margin: 0;\n transform-origin: var(--ease-popover-transform-origin);\n width: var(--ease-popover-content-width);\n min-width: var(--ease-popover-content-min-width);\n max-width: var(--ease-popover-content-max-width);\n box-sizing: border-box;\n overscroll-behavior: contain;\n z-index: 100;\n display: none;\n }\n\n :host([open]) [part=\"content\"] {\n display: block;\n }\n\n :host([placement=\"top-start\"]) [part=\"content\"] {\n position-area: top right;\n top: anchor(bottom);\n left: anchor(left);\n translate: 0 calc(var(--ease-popover-offset) * -1);\n }\n\n :host([placement=\"top-center\"]) [part=\"content\"] {\n position-area: top center;\n top: anchor(top);\n left: anchor(center);\n translate: 0 calc(var(--ease-popover-offset) * -1);\n }\n\n :host([placement=\"top-end\"]) [part=\"content\"] {\n position-area: top right;\n top: anchor(bottom);\n right: anchor(right);\n translate: 0 calc(var(--ease-popover-offset) * -1);\n }\n\n :host([placement=\"bottom-start\"]) [part=\"content\"] {\n position-area: bottom right;\n top: anchor(bottom);\n left: anchor(left);\n translate: 0 var(--ease-popover-offset);\n }\n\n :host([placement=\"bottom-center\"]) [part=\"content\"] {\n position-area: bottom center;\n top: anchor(bottom);\n left: anchor(left);\n translate: 0 var(--ease-popover-offset);\n }\n\n :host([placement=\"bottom-end\"]) [part=\"content\"] {\n position-area: bottom left;\n top: anchor(bottom);\n right: anchor(right);\n translate: 0 var(--ease-popover-offset);\n }\n\n :host([placement=\"left-start\"]) [part=\"content\"] {\n position-area: left bottom;\n top: anchor(top);\n left: anchor(left);\n translate: calc(var(--ease-popover-offset) * -1) 0;\n }\n\n :host([placement=\"left-center\"]) [part=\"content\"] {\n position-area: left center;\n top: anchor(top);\n left: anchor(left);\n translate: calc(var(--ease-popover-offset) * -1) 0;\n }\n\n :host([placement=\"left-end\"]) [part=\"content\"] {\n position-area: left top;\n top: anchor(top);\n left: anchor(left);\n translate: calc(var(--ease-popover-offset) * -1) 0;\n }\n\n :host([placement=\"right-start\"]) [part=\"content\"] {\n position-area: right end;\n top: anchor(top);\n left: anchor(right);\n translate: var(--ease-popover-offset) 0;\n }\n\n :host([placement=\"right-center\"]) [part=\"content\"] {\n position-area: right center;\n top: anchor(top);\n left: anchor(right);\n translate: var(--ease-popover-offset) 0;\n }\n\n :host([placement=\"right-end\"]) [part=\"content\"] {\n position-area: right start;\n top: anchor(top);\n left: anchor(right);\n translate: var(--ease-popover-offset) 0;\n }\n `\n})\nexport class Popover extends HTMLElement {\n #anchorName = nextAnchorName();\n #contentElement: HTMLElement | null = null;\n #initialized = false;\n\n declare requestRender: () => void;\n\n public get contentElement(): HTMLElement | null {\n return this.#contentElement;\n }\n\n @Prop<Placement>({\n reflect: true,\n defaultValue: 'bottom-start',\n onChange() {\n (this as Popover).handlePlacementChange();\n }\n })\n accessor placement!: Placement;\n\n @Prop<number>({\n type: Number,\n reflect: true,\n defaultValue: 8,\n onChange() {\n (this as Popover).handleOffsetChange();\n }\n })\n accessor offset = 8;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor open = false;\n\n connectedCallback(): void {\n this.#syncAnchorName();\n this.#syncOffset();\n }\n\n disconnectedCallback(): void {\n this.#contentElement = null;\n this.#initialized = false;\n }\n\n render(): TemplateResult {\n return html`\n <slot slot=\"trigger\" name=\"trigger\"></slot>\n <div\n part=\"content\"\n data-popover-content\n role=\"region\"\n data-placement=${this.placement}\n >\n <slot></slot>\n </div>\n `;\n }\n\n handlePlacementChange(): void {\n if (!this.#initialized) {\n this.requestRender();\n return;\n }\n this.#syncPlacement();\n }\n\n handleOffsetChange(): void {\n if (!this.#initialized) {\n this.requestRender();\n return;\n }\n this.#syncOffset();\n }\n\n #syncPlacement(): void {\n this.dataset.placement = this.placement;\n\n if (this.#contentElement) {\n this.#contentElement.dataset.placement = this.placement;\n }\n }\n\n #syncOffset(): void {\n const offset = Number.isFinite(this.offset) ? this.offset : 0;\n this.style.setProperty('--ease-popover-offset', `${offset}px`);\n }\n\n #syncAnchorName(): void {\n this.style.setProperty('--ease-popover-anchor-name', this.#anchorName);\n }\n}\n\nexport default {\n Popover\n};\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype ChevronState = 'down' | 'up';\ntype ChevronPath = Record<ChevronState, string>;\n\n@Component({\n tag: 'ease-icon-chevron',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"chevron\"] {\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n observedAttributes: ['state']\n})\nexport class IconChevron extends HTMLElement {\n declare requestRender: () => void;\n\n accessor paths: ChevronPath = {\n down: 'M5 7L8 10L11 7',\n up: 'M5 9L8 6L11 9'\n };\n\n @Prop<ChevronState>({\n reflect: true,\n attribute: 'state',\n defaultValue: 'down',\n onAttributeChange(next: ChevronState, previous: ChevronState) {\n this.shadowRoot\n ?.querySelector<SVGPathElement>('path')\n ?.animate(\n [\n { d: `path('${(this as IconChevron).paths[previous]}')` },\n { d: `path('${(this as IconChevron).paths[next]}')` }\n ],\n {\n duration: 200,\n easing: 'cubic-bezier(0.25, 0, 0.5, 1)'\n }\n );\n }\n })\n accessor state!: ChevronState;\n\n render(): TemplateResult {\n return html`\n <svg part=\"chevron\" viewBox=\"0 0 16 16\" state=${this.state} xmlns=\"http://www.w3.org/2000/svg \">\n <path d=${this.paths[this.state]} />\n </svg>\n `;\n }\n}\n","import type { Placement } from '~/elements/popover';\nimport '../popover';\nimport '../icons/animation/chevron';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { OutsideClick, requestOutsideClickUpdate } from '~/decorators/OutsideClick';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\ninterface OptionRecord {\n element: HTMLElement;\n value: string;\n label: string;\n id: string;\n handlers: {\n click: (event: Event) => void;\n keydown: (event: KeyboardEvent) => void;\n };\n}\n\nconst nextOptionId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-dropdown-option-${counter}`;\n };\n})();\n\nconst nextPanelId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-dropdown-content-${counter}`;\n };\n})();\n\n@Component({\n tag: 'ease-dropdown',\n styles: `\n :host {\n display: grid;\n width: 100%;\n }\n\n ease-popover {\n --ease-popover-content-min-width: var(--ease-dropdown-panel-min-width, anchor-size(width));\n --ease-popover-content-width: var(--ease-dropdown-panel-width, max-content);\n --ease-popover-content-max-width: var(--ease-dropdown-panel-max-width, none);\n }\n\n [part=\"trigger\"] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n gap: 8px;\n padding: var(--ease-dropdown-trigger-padding, 8px 8px 8px 12px);\n border-radius: var(--ease-dropdown-radius, var(--radii-md));\n background-color: var(--ease-dropdown-background, var(--color-gray-850));\n cursor: pointer;\n box-shadow: var(\n --ease-dropdown-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n box-sizing: border-box;\n font-size: var(--ease-dropdown-font-size, var(--ease-font-size, 13px));\n font-weight: var(--ease-dropdown-font-weight, 500);\n color: var(--ease-dropdown-color, var(--color-foreground));\n min-width: 0;\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-dropdown-line-height, 14px);\n transition: color 0.2s, background-color 0.2s;\n text-align: left;\n\n &:hover,\n &:focus-within {\n background-color: var(--ease-dropdown-background-hover, var(--color-gray-825));\n }\n\n [part=\"trigger-icon\"] {\n display: block;\n margin: -1px 0 -1px -2px;\n }\n\n &[data-pill=\"true\"] {\n border-radius: 999px;\n }\n\n &[data-block=\"small\"] {\n padding: 4px 8px 4px 4px;\n }\n\n &[data-headless=\"true\"] {\n background: transparent;\n box-shadow: none;\n padding: 0;\n border-radius: 0;\n gap: 4px;\n\n &:hover,\n &:focus-within {\n background: transparent;\n }\n }\n }\n\n input[part=\"trigger-input\"] {\n background: transparent;\n border: none;\n outline: none;\n color: inherit;\n font: inherit;\n width: fit-content;\n min-width: 0;\n padding: 0;\n margin: 0;\n cursor: pointer;\n field-sizing: var(--ease-dropdown-field-sizing, fixed);\n }\n \n :host([open]) input[part=\"trigger-input\"] {\n cursor: text;\n }\n\n [part=\"trigger\"][data-placeholder=\"true\"],\n [part=\"trigger\"] [part=\"trigger-label\"][data-placeholder=\"true\"],\n input[part=\"trigger-input\"]::placeholder {\n color: var(--ease-dropdown-placeholder-color, var(--color-gray-600));\n }\n\n [part=\"trigger\"] [part=\"trigger-label\"] {\n flex-grow: 1;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n [part=\"content\"] {\n border-radius: var(--ease-dropdown-panel-radius, var(--ease-dropdown-radius, var(--radii-md)));\n background: var(--ease-dropdown-panel-background, var(--color-gray-875));\n border: none;\n outline: none;\n box-shadow: var(\n --ease-dropdown-panel-shadow,\n 0 5px 20px 0 var(--color-black-15),\n 0 1px 4px 0 var(--color-black-15),\n 0 0 0 1px var(--color-white-4) inset,\n 0 1px 0 0 var(--color-white-4) inset\n );\n background-clip: padding-box;\n border: 1px solid var(--ease-dropdown-panel-border-color, var(--color-gray-825));\n box-sizing: border-box;\n padding: var(--ease-dropdown-panel-padding, 4px);\n }\n \n [part=\"content\"] ::slotted(hr) {\n margin: 4px 0;\n height: 1px;\n background-color: var(--color-white-4);\n border: none;\n\n &:first-child,\n &:last-child {\n display: none;\n }\n }\n\n [part=\"content\"] ::slotted(h4) {\n margin: 4px 0 8px 0 !important;\n font-size: var(--ease-dropdown-group-label-font-size, 11px);\n line-height: 1;\n padding: var(--ease-dropdown-group-label-padding, 0 8px);\n font-family: var(--ease-font-family, inherit);\n font-weight: 450;\n color: var(--ease-dropdown-group-label-color, var(--color-gray-700));\n display: block;\n\n &:first-child,\n &:last-child {\n display: none;\n }\n }\n\n [part=\"section\"] {\n flex-grow: 1;\n min-width: max(100%, var(--ease-dropdown-min-width, 140px));\n display: grid;\n grid-gap: 3px;\n max-height: var(--ease-dropdown-max-height, auto);\n overflow-y: auto;\n overscroll-behavior: contain;\n container-type: inline-size;\n container-name: scroll-area;\n mask: linear-gradient(to bottom,\n #0000,\n #ffff var(--top-fade) calc(100% - var(--bottom-fade)),\n #0000\n );\n animation: scroll;\n animation-timeline: --scroll;\n scroll-timeline: --scroll y;\n scroll-snap-type: y mandatory;\n scrollbar-width: none;\n -ms-overflow-style: none;\n box-sizing: border-box;\n }\n\n [part=\"section\"]::-webkit-scrollbar {\n width: 0;\n height: 0;\n display: none;\n }\n\n @property --top-fade {\n syntax: '<length>';\n inherits: false;\n initial-value: 0;\n }\n\n @property --bottom-fade {\n syntax: '<length>';\n inherits: false;\n initial-value: 0;\n }\n\n @keyframes scroll {\n 0% {\n --bottom-fade: 16px;\n --top-fade: 0;\n }\n 10%,\n 100% {\n --top-fade: 16px;\n }\n 90% {\n --bottom-fade: 16px;\n }\n 100% {\n --bottom-fade: 0;\n }\n }\n\n ::slotted(button[slot=\"content\"]) {\n appearance: none;\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n font-size: var(--ease-dropdown-option-font-size, var(--ease-font-size-sm, 12px));\n font-weight: var(--ease-dropdown-option-font-weight, 400);\n color: var(--ease-dropdown-option-color, var(--color-blue-100));\n min-width: 0;\n padding: var(--ease-dropdown-option-padding, 7px 8px);\n display: block;\n border-radius: var(--ease-dropdown-option-radius, 5px);\n background-color: var(--ease-dropdown-option-background, var(--color-gray-875));\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-dropdown-option-line-height, 14px);\n transition: color 0.2s, background-color 0.2s;\n cursor: pointer;\n width: 100%;\n text-align: left;\n }\n\n ::slotted(button[slot=\"content\"]:hover),\n ::slotted(button[slot=\"content\"]:focus-visible),\n ::slotted(button[slot=\"content\"][data-active=\"true\"]),\n ::slotted(button[slot=\"content\"][aria-selected=\"true\"]) {\n background-color: var(--ease-dropdown-option-background-active, var(--color-gray-825));\n color: var(--ease-dropdown-option-color-active, var(--color-white));\n }\n `\n})\nexport class Dropdown extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({\n type: Boolean,\n reflect: true,\n onChange(next, previous) {\n (this as Dropdown).handleOpenChange(next, previous);\n }\n })\n accessor open = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor pill = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor headless = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor searchable = false;\n\n @Prop<'small' | 'medium' | 'large'>({\n type: String,\n reflect: true,\n defaultValue: 'medium',\n onAttributeChange() {\n this.requestRender?.();\n }\n })\n accessor block: 'small' | 'medium' | 'large' = 'medium';\n\n @Prop<string>({\n reflect: true,\n defaultValue: 'auto',\n onChange(next) {\n (this as Dropdown).style.setProperty('--ease-dropdown-max-height', next ?? 'auto');\n }\n })\n accessor maxHeight: string = 'auto';\n\n @Prop<string | null>({ reflect: true, defaultValue: null })\n accessor name: string | null = null;\n\n @Prop<string | null>({ reflect: true, defaultValue: null })\n accessor value: string | null = null;\n\n @Prop<string | null>({\n reflect: true,\n attribute: 'placeholder',\n defaultValue: 'Select an option'\n })\n accessor placeholder: string | null = 'Select an option';\n\n @Prop<Placement>({ reflect: true, defaultValue: 'bottom-start' })\n accessor placement: Placement = 'bottom-start';\n\n @Query<HTMLElement>('[part=\"trigger\"]')\n accessor trigger!: HTMLElement | null;\n\n @Query<HTMLInputElement>('input[part=\"trigger-input\"]')\n accessor searchInput!: HTMLInputElement | null;\n\n @Query<HTMLElement>('[part=\"content\"]')\n accessor panelContent!: HTMLElement | null;\n\n @Query<HTMLSlotElement>('slot[name=\"content\"]')\n accessor contentSlot!: HTMLSlotElement | null;\n\n #options: OptionRecord[] = [];\n #selectedLabel: string | null = null;\n #currentSlot: HTMLSlotElement | null = null;\n #pendingFocus: 'first' | 'last' | null = null;\n #optionsInitialized = false;\n #lastToggleOrigin: Event | null = null;\n #handleSlotChange = (): void => {\n this.#syncOptions();\n };\n\n connectedCallback(): void {\n this.#ensureSlotListener();\n }\n\n disconnectedCallback(): void {\n this.#removeSlotListener();\n this.#teardownOptions();\n this.#lastToggleOrigin = null;\n }\n\n afterRender(): void {\n const trigger = this.trigger;\n const ariaLabel = this.getAttribute('aria-label');\n\n if (trigger) {\n if (trigger instanceof HTMLButtonElement) {\n trigger.disabled = Boolean(this.disabled);\n }\n trigger.setAttribute('aria-expanded', this.open && !this.disabled ? 'true' : 'false');\n trigger.setAttribute('aria-haspopup', 'listbox');\n\n if (trigger instanceof HTMLButtonElement) {\n if (ariaLabel && ariaLabel.trim().length > 0) {\n trigger.setAttribute('aria-label', ariaLabel.trim());\n } else {\n trigger.removeAttribute('aria-label');\n }\n }\n }\n\n if (this.searchInput) {\n this.searchInput.disabled = Boolean(this.disabled);\n\n if (ariaLabel && ariaLabel.trim().length > 0) {\n this.searchInput.setAttribute('aria-label', ariaLabel.trim());\n } else {\n this.searchInput.removeAttribute('aria-label');\n }\n }\n\n const panel = this.panelContent;\n const isInteractive = this.open && !this.disabled;\n\n if (panel) {\n if (!panel.id) {\n panel.id = nextPanelId();\n }\n panel.tabIndex = -1;\n panel.setAttribute('role', 'listbox');\n panel.setAttribute('aria-hidden', isInteractive ? 'false' : 'true');\n\n if (trigger) {\n trigger.setAttribute('aria-controls', panel.id);\n }\n } else if (trigger) {\n trigger.removeAttribute('aria-controls');\n }\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n\n this.#ensureSlotListener();\n\n if (!this.#optionsInitialized) {\n queueMicrotask(() => {\n this.#syncOptions();\n });\n } else {\n this.#updateOptionSelectionState();\n }\n\n if (this.disabled && this.open) {\n this.#lastToggleOrigin = null;\n this.open = false;\n }\n }\n\n render(): TemplateResult {\n const placeholderActive = this.#isPlaceholderActive();\n\n return html`\n <ease-popover\n .placement=${this.placement}\n .open=${this.open && !this.disabled}\n >\n ${this.searchable ? this.#renderSearchTrigger(placeholderActive) : this.#renderButtonTrigger(placeholderActive)}\n <div\n part=\"content\"\n role=\"listbox\"\n tabindex=\"-1\"\n data-open=${this.open && !this.disabled ? 'true' : 'false'}\n ?hidden=${!this.open || this.disabled}\n @keydown=${this.#handlePanelKeydown}\n >\n <div part=\"section\">\n <slot name=\"content\"></slot>\n </div>\n </div>\n </ease-popover>\n `;\n }\n\n #renderButtonTrigger(placeholderActive: boolean) {\n return html`\n <button\n part=\"trigger\"\n slot=\"trigger\"\n type=\"button\"\n data-placeholder=${placeholderActive ? 'true' : 'false'}\n data-headless=${this.headless}\n @keydown=${this.#handleTriggerKeydown}\n @click=${this.#handleTriggerClick}\n data-pill=${this.pill}\n >\n <slot name=\"trigger\">\n <span part=\"trigger-label\" data-placeholder=${placeholderActive ? 'true' : 'false'}>\n ${this.#getTriggerLabel()}\n </span>\n\n <ease-icon-chevron part=\"trigger-icon\" state=${this.open ? 'up' : 'down'} />\n </slot>\n </button>\n `;\n }\n\n #renderSearchTrigger(placeholderActive: boolean) {\n return html`\n <div\n part=\"trigger\"\n slot=\"trigger\"\n data-placeholder=${placeholderActive ? 'true' : 'false'}\n data-headless=${this.headless}\n @click=${this.#handleSearchTriggerClick}\n data-pill=${this.pill}\n >\n <slot name=\"trigger\">\n <input \n part=\"trigger-input\"\n type=\"text\"\n .value=${this.open ? (this.searchInput?.value ?? '') : this.#getTriggerLabel()}\n placeholder=${this.placeholder ?? ''}\n ?readonly=${!this.open}\n @input=${this.#handleSearchInput}\n @keydown=${this.#handleTriggerKeydown}\n />\n <ease-icon-chevron part=\"trigger-icon\" state=${this.open ? 'up' : 'down'} />\n </slot>\n </div>\n `;\n }\n\n #handleSearchTriggerClick = (event: Event): void => {\n if (this.disabled) {\n return;\n }\n\n if (!this.open) {\n this.toggle(true, event);\n\n if (this.searchInput) {\n this.searchInput.value = '';\n this.#filterOptions('');\n this.searchInput.focus();\n }\n } else {\n if (event.target !== this.searchInput) {\n this.toggle(false, event);\n }\n }\n };\n\n #handleSearchInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.#filterOptions(input.value);\n\n if (!this.open) {\n this.toggle(true, event);\n }\n };\n\n #filterOptions(query: string): void {\n const lowerQuery = query.toLowerCase();\n this.#options.forEach((option) => {\n const match = option.label.toLowerCase().includes(lowerQuery);\n if (match) {\n option.element.style.display = '';\n } else {\n option.element.style.display = 'none';\n }\n });\n }\n\n toggle(force?: boolean, originEvent?: Event): void {\n if (this.disabled) {\n return;\n }\n\n const current = this.open;\n const next = force ?? !current;\n\n if (current === next) {\n return;\n }\n\n this.#lastToggleOrigin = originEvent ?? null;\n this.open = next;\n\n if (!next) {\n this.#pendingFocus = null;\n // Reset filter when closing\n this.#filterOptions('');\n // Restore label in input if searchable\n if (this.searchable && this.searchInput) {\n this.searchInput.value = this.#getTriggerLabel();\n this.searchInput.blur(); // Blur to look like static text\n }\n }\n }\n\n handleOpenChange(next: boolean, previous: boolean): void {\n if (next === previous) {\n return;\n }\n\n if (!next) {\n this.#pendingFocus = null;\n }\n\n const origin = this.#lastToggleOrigin ?? new Event(next ? 'open' : 'close');\n this.#lastToggleOrigin = null;\n\n if (next) {\n if (this.searchable && this.searchInput) {\n this.searchInput.focus();\n } else {\n queueMicrotask(() => this.#focusActiveOption());\n }\n }\n\n dispatchControlEvent(this, 'toggle', { value: next, event: origin });\n requestOutsideClickUpdate(this);\n }\n\n @OutsideClick<Dropdown>({\n content: (host) => host.panelContent,\n triggers: (host) => [host.trigger, host.panelContent],\n disabled: (host) => host.disabled || !host.open\n })\n handleOutsideDismiss(event: Event): void {\n if (!this.open) {\n return;\n }\n\n this.toggle(false, event);\n }\n\n #handleTriggerKeydown = (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.#pendingFocus = 'first';\n this.toggle(true, event);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.#pendingFocus = 'last';\n this.toggle(true, event);\n break;\n case 'Enter':\n if (!this.searchable) {\n event.preventDefault();\n this.toggle(true, event);\n }\n break;\n case ' ': // Space\n if (!this.searchable) {\n event.preventDefault();\n this.toggle(true, event);\n }\n break;\n case 'Escape':\n if (this.open) {\n event.preventDefault();\n this.toggle(false, event);\n }\n break;\n default:\n break;\n }\n };\n\n #ensureSlotListener(): void {\n const slot = this.contentSlot;\n\n if (slot === this.#currentSlot) {\n return;\n }\n\n if (this.#currentSlot) {\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n }\n\n if (slot) {\n slot.addEventListener('slotchange', this.#handleSlotChange);\n }\n\n this.#currentSlot = slot ?? null;\n }\n\n #removeSlotListener(): void {\n if (!this.#currentSlot) {\n return;\n }\n\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n this.#currentSlot = null;\n }\n\n #handleTriggerClick = (event: Event): void => {\n this.toggle(!this.open, event);\n };\n\n #syncOptions(): void {\n const assigned = this.contentSlot?.assignedElements({ flatten: true }) ?? [];\n const elements = assigned.filter((node): node is HTMLElement => node instanceof HTMLElement);\n\n this.#removeOptionListeners(this.#options);\n\n const options: OptionRecord[] = [];\n\n elements.forEach((element) => {\n if (element.hasAttribute('data-select-ignore') || element.getAttribute('role') === 'separator') {\n return;\n }\n\n const value = this.#resolveOptionValue(element);\n const label = this.#resolveOptionLabel(element, value);\n const id = element.id && element.id.trim().length > 0 ? element.id : nextOptionId();\n\n if (!element.id) {\n element.id = id;\n }\n\n element.setAttribute('role', 'option');\n element.setAttribute('aria-selected', 'false');\n element.dataset.active = 'false';\n element.tabIndex = -1;\n\n const handlers = {\n click: (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.#selectOption(value, label, event);\n },\n keydown: (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.#selectOption(value, label, event);\n }\n }\n } as OptionRecord['handlers'];\n\n element.addEventListener('click', handlers.click, { passive: false });\n element.addEventListener('keydown', handlers.keydown);\n\n options.push({ element, value, label, id, handlers });\n });\n\n this.#options = options;\n this.#optionsInitialized = options.length > 0;\n\n if (this.value === null && options.length > 0) {\n const preselected = options.find(\n (option) =>\n option.element.hasAttribute('selected') ||\n option.element.dataset.selected === 'true' ||\n option.element.getAttribute('aria-selected') === 'true'\n );\n\n if (preselected) {\n this.value = preselected.value;\n }\n }\n\n this.#updateOptionSelectionState();\n }\n\n #teardownOptions(): void {\n this.#removeOptionListeners(this.#options);\n this.#options = [];\n this.#optionsInitialized = false;\n this.#selectedLabel = null;\n }\n\n #removeOptionListeners(options: OptionRecord[]): void {\n options.forEach((option) => {\n option.element.removeEventListener('click', option.handlers.click);\n option.element.removeEventListener('keydown', option.handlers.keydown);\n option.element.dataset.active = 'false';\n option.element.setAttribute('aria-selected', 'false');\n option.element.tabIndex = -1;\n });\n }\n\n #updateOptionSelectionState(): void {\n if (!this.#optionsInitialized) {\n this.toggleAttribute('data-has-value', false);\n return;\n }\n\n let selectedLabel: string | null = null;\n const previousLabel = this.#selectedLabel;\n\n const options = this.#options;\n\n options.forEach((option) => {\n const isSelected = this.value !== null && option.value === this.value;\n option.element.setAttribute('aria-selected', isSelected ? 'true' : 'false');\n option.element.dataset.active = isSelected ? 'true' : 'false';\n option.element.tabIndex = isSelected ? 0 : -1;\n\n if (isSelected) {\n selectedLabel = option.label;\n }\n });\n\n if (!selectedLabel) {\n const fallback = options[0];\n if (fallback) {\n fallback.element.tabIndex = 0;\n }\n }\n\n this.#selectedLabel = selectedLabel;\n const hasValue = Boolean(this.value && this.#selectedLabel);\n this.toggleAttribute('data-has-value', hasValue);\n\n if (previousLabel !== this.#selectedLabel && typeof this.requestRender === 'function') {\n this.requestRender();\n }\n }\n\n #isPlaceholderActive(): boolean {\n return !this.value || !this.#selectedLabel;\n }\n\n #getTriggerLabel(): string {\n if (this.#selectedLabel) {\n return this.#selectedLabel;\n }\n\n if (typeof this.placeholder === 'string' && this.placeholder.trim().length > 0) {\n return this.placeholder.trim();\n }\n\n return 'Select';\n }\n\n #focusActiveOption(): void {\n if (!this.open) {\n return;\n }\n\n const options = this.#options.filter((o) => o.element.style.display !== 'none');\n\n if (options.length === 0) {\n this.panelContent?.focus();\n return;\n }\n\n let target: OptionRecord | undefined = options[0];\n\n if (this.#pendingFocus === 'first') {\n target = options[0];\n } else if (this.#pendingFocus === 'last') {\n target = options[options.length - 1];\n } else if (this.#pendingFocus === null && this.value !== null) {\n const match = this.#findOptionByValue(this.value);\n if (match && match.element.style.display !== 'none') {\n target = match;\n }\n }\n\n if (target) {\n this.#focusOption(target);\n }\n this.#pendingFocus = null;\n }\n\n #focusOption(option: OptionRecord): void {\n this.#options.forEach((entry) => {\n entry.element.tabIndex = entry === option ? 0 : -1;\n });\n\n option.element.focus({ preventScroll: true });\n }\n\n #focusOptionByIndex(index: number): void {\n const options = this.#options.filter((o) => o.element.style.display !== 'none');\n\n if (options.length === 0) {\n this.panelContent?.focus();\n return;\n }\n\n const normalized = Math.max(0, Math.min(index, options.length - 1));\n const option = options[normalized];\n if (option) {\n this.#focusOption(option);\n }\n }\n\n #findOptionByValue(value: string | null): OptionRecord | undefined {\n if (value === null) {\n return undefined;\n }\n\n return this.#options.find((option) => option.value === value);\n }\n\n #moveFocus(step: number): void {\n const options = this.#options.filter((o) => o.element.style.display !== 'none');\n\n if (options.length === 0) {\n this.panelContent?.focus();\n return;\n }\n\n const activeElement = document.activeElement as HTMLElement | null;\n const currentIndex = options.findIndex((option) => option.element === activeElement);\n\n if (currentIndex === -1) {\n this.#focusOptionByIndex(step > 0 ? 0 : options.length - 1);\n return;\n }\n\n const nextIndex = (currentIndex + step + options.length) % options.length;\n this.#focusOptionByIndex(nextIndex);\n }\n\n #handlePanelKeydown = (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.#moveFocus(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.#moveFocus(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.#focusOptionByIndex(0);\n break;\n case 'End':\n event.preventDefault();\n this.#focusOptionByIndex(this.#options.length - 1);\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n this.#activateFocusedOption(event);\n break;\n }\n case 'Escape':\n event.preventDefault();\n this.toggle(false, event);\n this.trigger?.focus();\n break;\n default:\n break;\n }\n };\n\n #activateFocusedOption(event: Event): void {\n const active = this.#options.find((option) => option.element === document.activeElement);\n\n if (active) {\n this.#selectOption(active.value, active.label, event);\n }\n }\n\n #selectOption(value: string, label: string, originEvent: Event): void {\n if (this.disabled) {\n return;\n }\n\n originEvent.preventDefault();\n originEvent.stopPropagation();\n\n const previousValue = this.value;\n this.value = value;\n this.#selectedLabel = label;\n this.#updateOptionSelectionState();\n\n this.toggle(false, originEvent);\n\n if (previousValue !== value) {\n this.#dispatchValueChange(value, label, originEvent);\n }\n\n if (!this.searchable) {\n queueMicrotask(() => this.trigger?.focus());\n }\n }\n\n #resolveOptionValue(element: HTMLElement): string {\n const explicitValue = element.getAttribute('value') ?? element.getAttribute('data-value') ?? element.dataset.value;\n\n if (explicitValue && explicitValue.trim().length > 0) {\n return explicitValue.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n const fallback = nextOptionId();\n element.dataset.value = fallback;\n return fallback;\n }\n\n #resolveOptionLabel(element: HTMLElement, fallback: string): string {\n const explicitLabel = element.getAttribute('data-label') ?? element.getAttribute('aria-label');\n\n if (explicitLabel && explicitLabel.trim().length > 0) {\n return explicitLabel.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n return fallback;\n }\n\n #dispatchValueChange(value: string, label: string, event: Event): void {\n dispatchControlEvent(this, 'change', { value, event });\n\n this.dispatchEvent(\n new CustomEvent('value-change', {\n detail: { value, label, event },\n bubbles: true,\n composed: true\n })\n );\n }\n}\n","export interface DismissContext {\n owner: HTMLElement;\n content?: HTMLElement | null;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface DismissControllerOptions {\n onDismiss: (event: Event) => void;\n}\n\nexport class DismissController {\n #onDismiss: (event: Event) => void;\n #context: {\n owner: HTMLElement;\n content: HTMLElement | null;\n triggers: HTMLElement[];\n } | null = null;\n #active = false;\n\n constructor(options: DismissControllerOptions) {\n this.#onDismiss = options.onDismiss;\n }\n\n connect(context: DismissContext): void {\n this.#context = {\n owner: context.owner,\n content: context.content ?? null,\n triggers: (context.triggers ?? []).filter((el): el is HTMLElement => el instanceof HTMLElement)\n };\n\n if (!this.#active) {\n document.addEventListener('pointerdown', this.#handlePointerDown, true);\n document.addEventListener('keydown', this.#handleKeyDown, true);\n this.#active = true;\n }\n }\n\n disconnect(): void {\n if (!this.#active) {\n return;\n }\n\n document.removeEventListener('pointerdown', this.#handlePointerDown, true);\n document.removeEventListener('keydown', this.#handleKeyDown, true);\n this.#active = false;\n this.#context = null;\n }\n\n #handlePointerDown = (event: PointerEvent): void => {\n if (!this.#context) {\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.some((node) => node instanceof Element && node.hasAttribute('data-select-ignore'))) {\n return;\n }\n\n if (path.includes(owner)) {\n return;\n }\n\n if (content && path.includes(content)) {\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger))) {\n return;\n }\n\n this.#onDismiss(event);\n };\n\n #handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Escape' || !this.#context) {\n return;\n }\n\n event.preventDefault();\n\n const active = document.activeElement as HTMLElement | null;\n\n if (!active) {\n this.#onDismiss(event);\n return;\n }\n\n const { owner, content, triggers } = this.#context;\n const path = event.composedPath();\n\n if (path.includes(owner) || owner.contains(active)) {\n this.#onDismiss(event);\n return;\n }\n\n if (content && (path.includes(content) || content.contains(active))) {\n this.#onDismiss(event);\n return;\n }\n\n if (triggers.some((trigger) => path.includes(trigger) || trigger.contains(active))) {\n this.#onDismiss(event);\n }\n };\n}\n","import type { DismissContext } from './dismiss-controller';\n\nimport { DismissController } from './dismiss-controller';\n\nexport interface OutsideClickResolution {\n owner?: HTMLElement | null | undefined;\n content?: HTMLElement | null | undefined;\n triggers?: Array<HTMLElement | null | undefined>;\n}\n\nexport interface OutsideClickHandle {\n update(): void;\n disconnect(): void;\n}\n\nexport interface OutsideClickHandleOptions<THost extends HTMLElement> {\n resolve: (host: THost) => OutsideClickResolution | null | undefined;\n disabled?: (host: THost) => boolean;\n}\n\nconst registry = new WeakMap<HTMLElement, Set<OutsideClickHandle>>();\n\nconst toDismissContext = <THost extends HTMLElement>(\n host: THost,\n options: OutsideClickHandleOptions<THost>\n): DismissContext | null => {\n if (options.disabled?.(host)) {\n return null;\n }\n\n const resolved = options.resolve(host);\n\n if (!resolved) {\n return null;\n }\n\n const owner = resolved.owner ?? host ?? null;\n\n if (!(owner instanceof HTMLElement)) {\n return null;\n }\n\n const content = resolved.content && resolved.content instanceof HTMLElement ? resolved.content : null;\n\n const triggers = resolved.triggers?.filter((element): element is HTMLElement => element instanceof HTMLElement) ?? [];\n\n return {\n owner,\n content,\n triggers\n };\n};\n\nexport const createOutsideClickHandle = <THost extends HTMLElement>(\n host: THost,\n onDismiss: (this: THost, event: Event) => void,\n options: OutsideClickHandleOptions<THost>\n): OutsideClickHandle => {\n const controller = new DismissController({\n onDismiss(event) {\n if (options.disabled?.(host)) {\n return;\n }\n\n onDismiss.call(host, event);\n }\n });\n\n return {\n update(): void {\n const context = toDismissContext(host, options);\n if (!context) {\n controller.disconnect();\n return;\n }\n\n controller.connect(context);\n },\n disconnect(): void {\n controller.disconnect();\n }\n };\n};\n\nexport const registerOutsideClickHandle = (host: HTMLElement, handle: OutsideClickHandle): void => {\n let handles = registry.get(host);\n\n if (!handles) {\n handles = new Set();\n registry.set(host, handles);\n }\n\n handles.add(handle);\n};\n\nexport const updateOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.update();\n });\n};\n\nexport const disconnectOutsideClickHandles = (host: HTMLElement): void => {\n const handles = registry.get(host);\n\n if (!handles) {\n return;\n }\n\n handles.forEach((handle) => {\n handle.disconnect();\n });\n};\n\nexport const requestOutsideClickUpdate = (host: HTMLElement): void => {\n updateOutsideClickHandles(host);\n};\n","import type { OutsideClickResolution } from '~/utils/outside-click';\n\nimport {\n createOutsideClickHandle,\n disconnectOutsideClickHandles,\n registerOutsideClickHandle,\n updateOutsideClickHandles\n} from '~/utils/outside-click';\n\ntype OutsideClickHost = HTMLElement & {\n connectedCallback?: (...args: unknown[]) => unknown;\n disconnectedCallback?: (...args: unknown[]) => unknown;\n afterRender?: (...args: unknown[]) => unknown;\n};\n\ntype HookName = 'connectedCallback' | 'disconnectedCallback' | 'afterRender';\n\ninterface OutsideClickOptions<THost extends OutsideClickHost> {\n resolve?: (host: THost) => OutsideClickResolution | null | undefined;\n owner?: (host: THost) => HTMLElement | null | undefined;\n content?: (host: THost) => HTMLElement | null | undefined;\n triggers?: (host: THost) => Array<HTMLElement | null | undefined>;\n disabled?: (host: THost) => boolean;\n}\n\nconst lifecycleApplied = new WeakSet<OutsideClickHost>();\n\nconst wrapMethod = (\n host: OutsideClickHost,\n name: HookName,\n hook: (this: OutsideClickHost) => void,\n callHookFirst = false\n): void => {\n const original = host[name];\n\n (host as Required<OutsideClickHost>)[name] = function (...args: unknown[]) {\n if (callHookFirst) {\n hook.call(this);\n }\n\n let result: unknown;\n\n if (typeof original === 'function') {\n result = (original as (...params: unknown[]) => unknown).apply(this, args);\n }\n\n if (!callHookFirst) {\n hook.call(this);\n }\n\n return result;\n };\n};\n\nconst ensureLifecycle = (host: OutsideClickHost): void => {\n if (lifecycleApplied.has(host)) {\n return;\n }\n\n lifecycleApplied.add(host);\n\n wrapMethod(host, 'connectedCallback', function (this: OutsideClickHost) {\n updateOutsideClickHandles(this);\n });\n\n wrapMethod(host, 'afterRender', function (this: OutsideClickHost) {\n updateOutsideClickHandles(this);\n });\n\n wrapMethod(\n host,\n 'disconnectedCallback',\n function (this: OutsideClickHost) {\n disconnectOutsideClickHandles(this);\n },\n true\n );\n};\n\nexport function OutsideClick<THost extends OutsideClickHost, TEvent extends Event = Event>(\n options: OutsideClickOptions<THost> = {}\n) {\n return (\n originalMethod: (this: THost, event: TEvent) => unknown,\n context: ClassMethodDecoratorContext<THost, typeof originalMethod>\n ): void => {\n context.addInitializer(function (this: THost) {\n ensureLifecycle(this);\n\n const resolve =\n options.resolve ??\n ((host: THost): OutsideClickResolution => {\n return {\n owner: options.owner?.(host),\n content: options.content?.(host),\n triggers: options.triggers?.(host)\n };\n });\n\n const handle = createOutsideClickHandle(\n this,\n (event) => {\n originalMethod.call(this, event as TEvent);\n },\n {\n resolve,\n disabled: options.disabled\n }\n );\n\n registerOutsideClickHandle(this, handle);\n\n if (this.isConnected) {\n updateOutsideClickHandles(this);\n }\n });\n };\n}\n\nexport { requestOutsideClickUpdate } from '~/utils/outside-click';\nexport type { OutsideClickOptions };\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-input',\n shadowMode: 'open',\n autoSlot: true,\n styles: `\n :host {\n display: contents;\n cursor: text;\n }\n\n @keyframes custom-caret {\n 0%,\n 100% {\n caret-color: transparent;\n }\n 33.33%,\n 66.66% {\n caret-color: var(--color-blue-300);\n }\n }\n\n [part=\"container\"] {\n display: grid;\n align-items: center;\n text-align: inherit;\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n padding: var(--ease-input-padding, 8px);\n border-radius: var(--ease-input-radius, var(--radii-md));\n background-color: var(--ease-input-background, var(--color-gray-875));\n cursor: text;\n animation: custom-caret 1s infinite;\n caret-animation: manual;\n transition: background-color 0.2s;\n box-shadow: var(\n --ease-input-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n\n &:not([data-has-prefix]):not([data-has-suffix]) {\n padding: var(--ease-input-padding, 8px 12px);\n }\n\n &:has(input:disabled) {\n cursor: not-allowed;\n opacity: 0.75;\n }\n\n &:not(:has(input:disabled)) {\n\n &:hover {\n background-color: var(--ease-input-background-hover, var(--color-gray-850));\n }\n\n &:has(input:focus-visible) {\n background-color: var(--ease-input-background-focus, var(--color-gray-825));\n }\n\n }\n\n &[data-has-prefix][data-has-suffix] {\n padding: var(--ease-input-padding, 0);\n grid-template-columns: 30px 1fr 30px;\n }\n\n &[data-has-prefix]:not([data-has-suffix]) {\n padding-right: var(--ease-input-padding, 12px);\n grid-template-columns: 30px 1fr;\n }\n\n &[data-has-suffix]:not([data-has-prefix]) {\n padding-left: var(--ease-input-padding, 12px);\n grid-template-columns: 1fr 30px;\n }\n\n &[data-headless=\"true\"] {\n background-color: transparent;\n box-shadow: none;\n border: none;\n padding: 0;\n margin: 0;\n outline: none;\n border-radius: 0;\n }\n }\n\n ::slotted(button) {\n --ease-icon-size: 12px;\n width: 30px;\n height: 30px;\n appearance: none;\n border: none;\n outline: none;\n background-color: transparent;\n padding: 0;\n margin: 0;\n line-height: 14px;\n transition: color 0.2s;\n cursor: pointer;\n display: grid;\n place-items: center;\n color: var(--color-gray-600);\n transition: color 0.2s;\n\n &:hover,\n &:focus-visible {\n color: var(--color-blue-100);\n }\n\n &.isActive {\n animation: blink .6s forwards;\n }\n\n @keyframes blink {\n 50% {\n background-color: var(--color-white-8);\n }\n }\n }\n\n ::slotted(button[slot=\"prefix\"]) {\n border-radius: var(--radii-md) 0 0 var(--radii-md);\n border-right: 1px solid var(--color-white-4);\n\n &:empty {\n display: none;\n }\n }\n\n ::slotted([slot=\"prefix\"]:not(button)) {\n margin: calc(var(--ease-input-padding, 8px) * -1);\n margin-right: 0;\n margin-left: 0;\n }\n\n ::slotted(button[slot=\"suffix\"]) {\n border-radius: 0 var(--radii-md) var(--radii-md) 0;\n border-left: 1px solid var(--color-white-4);\n\n &:empty {\n display: none;\n }\n }\n\n input {\n font-family: inherit;\n font-optical-sizing: auto;\n font-size: var(--ease-input-font-size, var(--ease-font-size, 13px));\n appearance: none;\n -moz-appearance: textfield;\n font-weight: var(--ease-input-font-weight, 500);\n color: var(--ease-input-color, var(--color-blue-100));\n min-width: 0;\n cursor: inherit;\n text-align: inherit;\n padding: 0;\n background-color: transparent;\n border: none;\n outline: none;\n margin: 0;\n line-height: var(--ease-input-line-height, 14px);\n transition: color 0.2s;\n\n &::placeholder {\n color: var(--ease-input-placeholder-color, var(--color-gray-600));\n opacity: 1;\n }\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n `,\n template(this: Input) {\n return html`\n <div part=\"container\" data-headless=${Boolean(this.headless)}>\n <slot name=\"prefix\" part=\"prefix\"></slot>\n <input part=\"control\" .disabled=${Boolean(this.disabled)} ?disabled=${Boolean(this.disabled)} ?aria-disabled=${Boolean(this.disabled)} />\n \n <slot name=\"suffix\" part=\"suffix\"></slot>\n </div>\n `;\n }\n})\nexport class Input extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Prop<string | null>({ reflect: true })\n accessor placeholder!: string | null;\n\n @Prop<string>({ reflect: true, defaultValue: 'text' })\n accessor type!: string;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor disabled = false;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor headless = false;\n\n @Query<HTMLInputElement>('input')\n accessor control!: HTMLInputElement | null;\n\n private updatePrefixAttribute(): void {\n const container = this.shadowRoot?.querySelector('[part=\"container\"]');\n if (!container) {\n return;\n }\n\n const prefixSlot = this.shadowRoot?.querySelector('slot[name=\"prefix\"]') as HTMLSlotElement;\n const hasPrefix = Boolean(prefixSlot?.assignedNodes({ flatten: true }).length > 0);\n setBooleanAttribute(container, 'data-has-prefix', hasPrefix);\n }\n\n private updateSuffixAttribute(): void {\n const container = this.shadowRoot?.querySelector('[part=\"container\"]');\n if (!container) {\n return;\n }\n\n const suffixSlot = this.shadowRoot?.querySelector('slot[name=\"suffix\"]') as HTMLSlotElement;\n const hasSuffix = Boolean(suffixSlot?.assignedNodes({ flatten: true }).length > 0);\n setBooleanAttribute(container, 'data-has-suffix', hasSuffix);\n }\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n const value = this.value ?? '';\n\n if (control.value !== value) {\n control.value = value;\n }\n\n control.type = this.type ?? 'text';\n control.placeholder = this.placeholder ?? '';\n control.name = this.name ?? '';\n control.disabled = Boolean(this.disabled);\n\n this.updatePrefixAttribute();\n this.updateSuffixAttribute();\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen('slotchange', { selector: 'slot[name=\"prefix\"]' })\n onPrefixSlotChange(): void {\n this.updatePrefixAttribute();\n }\n\n @Listen('slotchange', { selector: 'slot[name=\"suffix\"]' })\n onSuffixSlotChange(): void {\n this.updateSuffixAttribute();\n }\n\n @Listen<Input, Event, HTMLInputElement>('input', { selector: 'input' })\n handleInput(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = target.value;\n dispatchControlEvent(this, 'input', { value: this.value ?? '', event });\n }\n\n @Listen<Input, Event, HTMLInputElement>('change', { selector: 'input' })\n handleChange(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = target.value;\n dispatchControlEvent(this, 'change', { value: this.value ?? '', event });\n }\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent } from '../shared';\nimport {\n COLOR_FORMATS,\n type ColorFormat,\n getColorComponents,\n type HSV,\n hexToHsv,\n hsvToHex,\n hsvToRgb,\n isLightColor,\n isValidHex,\n updateHsvFromComponents\n} from './utils';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\nimport { styleMap } from '~/utils/template-helpers';\nimport '../icons/interface/arrows-vertical';\nimport '../icons/interface/picker';\n\n@Component({\n tag: 'ease-color-picker',\n autoSlot: false,\n styles: `\n :host {\n display: grid;\n grid-gap: 8px;\n user-select: none;\n -webkit-user-select: none;\n\n --ease-color-picker-width: 180px;\n }\n\n [part=\"saturation\"] {\n position: relative;\n width: 100%;\n height: 124px;\n cursor: pointer;\n background-image: linear-gradient(to top, black, transparent), linear-gradient(to right, white, transparent);\n border-radius: 7px;\n touch-action: none;\n }\n\n [part=\"saturation-handle\"] {\n position: absolute;\n width: 10px;\n height: 10px;\n box-shadow: inset 0 0 0 2px var(--color-blue-100);\n border-radius: 50%;\n pointer-events: none;\n }\n\n [part=\"hue\"] {\n position: relative;\n height: 8px;\n align-self: center;\n flex-grow: 1;\n cursor: pointer;\n border-radius: 9px;\n background-image: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00);\n touch-action: none;\n }\n\n [part=\"hue-handle\"] {\n position: absolute;\n top: 0;\n width: 8px;\n height: 8px;\n box-shadow: inset 0 0 0 2px var(--color-blue-100);\n border-radius: 50%;\n pointer-events: none;\n }\n\n [part=\"preview\"] {\n position: relative;\n width: 20px;\n height: 20px;\n border-radius: 5px;\n box-shadow: inset 0 0 0 .75px var(--color-blue-80);\n display: grid;\n place-items: center;\n\n &[data-eyedropper] {\n cursor: pointer;\n\n &:hover,\n &:focus-visible {\n ease-icon-picker {\n scale: 1.1;\n }\n }\n\n ease-icon-picker {\n color: var(--icon-color, var(--color-blue-100));\n transition: scale 0.2s, color 0.15s;\n filter: drop-shadow(0 0 2px var(--color-black-15));\n }\n }\n }\n\n [part=\"toolbar\"] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n position: relative;\n z-index: 1;\n }\n\n [part=\"toolbar\"] ease-button {\n padding: 4px;\n width: max-content;\n }\n\n [part=\"format-container\"] {\n display: grid;\n grid-template-columns: 30px 1fr;\n align-items: center;\n gap: 8px;\n }\n\n [part=\"format-inputs\"] {\n padding: 2px 4px;\n width: 100%;\n border-radius: var(--ease-color-picker-format-radius, var(--radii-md));\n background-color: var(--ease-color-picker-format-background, var(--color-gray-850));\n cursor: pointer;\n box-shadow: var(\n --ease-color-picker-format-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n box-sizing: border-box;\n display: flex;\n justify-content: space-around;\n\n &:hover,\n &:focus-within {\n background-color: var(--ease-color-picker-format-background-hover, var(--color-gray-825));\n }\n }\n\n [part=\"format-input\"] {\n appearance: none;\n -moz-appearance: textfield;\n cursor: pointer;\n box-sizing: border-box;\n font-size: var(--ease-color-picker-format-font-size, 11px);\n font-weight: 500;\n color: var(--color-gray-600);\n min-width: 0;\n box-sizing: border-box;\n border: none;\n outline: none;\n padding: 4px;\n margin: 0;\n background-color: transparent;\n line-height: 12px;\n transition: color 0.2s;\n width: 100%;\n text-align: center;\n font-optical-sizing: auto;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n\n &:hover,\n &:focus-within {\n color: var(--color-blue-100);\n }\n\n &::placeholder {\n color: var(--color-gray-800);\n opacity: 1;\n }\n\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n\n [part=\"color-container\"] {\n display: grid;\n grid-template-columns: 1fr 20px;\n align-items: center;\n gap: 8px;\n }\n\n [part=\"format-trigger\"] {\n --ease-icon-size: var(--ease-color-picker-format-icon-size, 10px);\n\n display: flex;\n align-items: center;\n gap: 2px;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n font-optical-sizing: auto;\n font-size: var(--ease-color-picker-format-trigger-font-size, 10px);\n font-weight: 500;\n color: var(--color-gray-400);\n cursor: pointer;\n transition: color 0.15s;\n overflow: hidden;\n position: relative;\n height: 14px;\n\n &:hover {\n color: var(--color-gray-200);\n }\n\n ease-icon-arrows-vertical {\n color: var(--color-gray-600);\n flex-shrink: 0;\n }\n }\n\n [part=\"format-label\"] {\n display: inline-block;\n }\n\n [part=\"format-label\"][data-animating=\"out\"] {\n animation: formatOut 0.15s ease-in forwards;\n }\n\n [part=\"format-label\"][data-animating=\"in\"] {\n animation: formatIn 0.15s ease-out forwards;\n }\n\n @keyframes formatOut {\n 0% {\n transform: translateY(0) scale(1);\n opacity: 1;\n }\n 100% {\n transform: translateY(6px) scale(0.8);\n opacity: 0;\n }\n }\n\n @keyframes formatIn {\n 0% {\n transform: translateY(-6px) scale(0.8);\n opacity: 0;\n }\n 100% {\n transform: translateY(0) scale(1);\n opacity: 1;\n }\n }\n\n `,\n template(this: ColorPicker) {\n const { h, s, v } = this.hsv;\n const pureHue = hsvToRgb(h, 1, 1);\n const currentRgb = hsvToRgb(h, s, v);\n const saturationBg = `rgb(${pureHue.r}, ${pureHue.g}, ${pureHue.b})`;\n const huePercent = h / 360;\n const vInverted = 1 - v;\n // Position handles so they stay within container bounds (handle is 10px)\n const saturationHandleStyles = {\n left: `calc(${s * 100}% - ${s * 10}px)`,\n top: `calc(${vInverted * 100}% - ${vInverted * 10}px)`\n } as const;\n const hueHandleStyles = {\n left: `calc(${huePercent * 100}% - ${huePercent * 10}px)`\n } as const;\n const isLight = isLightColor(currentRgb.r, currentRgb.g, currentRgb.b);\n const hasEyeDropper = 'EyeDropper' in window;\n const previewStyles = {\n backgroundColor: this.value,\n '--icon-color': isLight ? 'var(--color-gray-900)' : 'var(--color-blue-100)'\n } as const;\n const components = getColorComponents(this.hsv, this.format);\n\n return html`\n <div \n part=\"saturation\" \n style=${styleMap({ backgroundColor: saturationBg })}\n @pointerdown=${this.handleSaturationPointerDown}\n @pointermove=${this.handleSaturationPointerMove}\n @pointerup=${this.handleSaturationPointerUp}\n @pointercancel=${this.handleSaturationPointerUp}\n >\n <div part=\"saturation-handle\" style=${styleMap(saturationHandleStyles)}></div>\n </div>\n <div part=\"color-container\">\n <div \n part=\"hue\"\n @pointerdown=${this.handleHuePointerDown}\n @pointermove=${this.handleHuePointerMove}\n @pointerup=${this.handleHuePointerUp}\n @pointercancel=${this.handleHuePointerUp}\n >\n <div part=\"hue-handle\" style=${styleMap(hueHandleStyles)}></div>\n </div>\n\n <div \n part=\"preview\" \n style=${styleMap(previewStyles)}\n ?data-eyedropper=${hasEyeDropper}\n @click=${hasEyeDropper ? this.handleEyeDropperClick : null}\n >\n ${hasEyeDropper ? html`<ease-icon-picker></ease-icon-picker>` : null}\n </div>\n </div>\n <div part=\"format-container\">\n <div part=\"format-trigger\" @click=${this.handleFormatCycle}>\n <span part=\"format-label\" data-animating=${this.formatAnimating}>${this.format.toUpperCase()}</span>\n <ease-icon-arrows-vertical />\n </div>\n <div part=\"format-inputs\">\n ${\n this.format === 'hex'\n ? html`\n <input \n part=\"format-input\" \n data-hex\n type=\"text\" \n .value=${components.values[0]}\n @input=${(e: Event) => this.handleComponentChange(0, (e.target as HTMLInputElement).value)}\n />\n `\n : components.labels.map(\n (_, i) => html`\n <input \n part=\"format-input\" \n type=\"number\" \n min=\"0\"\n max=${components.max[i]}\n .value=${String(components.values[i])}\n @input=${(e: Event) => this.handleComponentChange(i, Number((e.target as HTMLInputElement).value))}\n />\n `\n )\n }\n </div>\n </div>\n <div part=\"toolbar\">\n <ease-button variant=\"headless-muted\" @click=${this.handleCancelButtonClick}>Cancel</ease-button>\n <ease-button variant=\"headless\" @click=${this.handleApplyButtonClick}>Apply</ease-button>\n </div>\n `;\n }\n})\nexport class ColorPicker extends HTMLElement {\n declare requestRender: () => void;\n\n private hsv: HSV = { h: 0, s: 1, v: 1 };\n private originalValue: string = '#FF0000';\n private format: ColorFormat = 'hex';\n formatAnimating: 'out' | 'in' | 'none' = 'none';\n #isDraggingSaturation = false;\n #isDraggingHue = false;\n #activeSaturationPointer: number | null = null;\n #activeHuePointer: number | null = null;\n isInternalUpdate = false;\n\n @Query('[part=\"saturation\"]') accessor saturationArea!: HTMLElement | null;\n @Query('[part=\"hue\"]') accessor hueArea!: HTMLElement | null;\n @Query<HTMLInputElement>('[part=\"hex-input\"]') accessor hexInput!: HTMLInputElement | null;\n\n @Prop({\n reflect: true,\n defaultValue: '#FF0000',\n onChange(this: ColorPicker, value: string | null) {\n if (!this.isInternalUpdate) {\n this.updateFromHex(value ?? '#FF0000');\n }\n }\n })\n accessor value!: string;\n\n connectedCallback(): void {\n this.originalValue = this.value;\n this.updateFromHex(this.value);\n }\n\n private updateFromHex(hex: string): void {\n if (!isValidHex(hex)) {\n return;\n }\n\n const hsv = hexToHsv(hex);\n\n if (hsv) {\n this.hsv = hsv;\n }\n }\n\n #updateValue(event: Event | null): void {\n const newValue = hsvToHex(this.hsv.h, this.hsv.s, this.hsv.v);\n\n if (this.value !== newValue) {\n this.isInternalUpdate = true;\n this.value = newValue;\n this.isInternalUpdate = false;\n\n if (this.hexInput && document.activeElement !== this.hexInput) {\n this.hexInput.value = newValue;\n }\n\n if (event) {\n dispatchControlEvent(this, 'input', { value: this.value, event });\n }\n }\n }\n\n readonly handleSaturationPointerDown = (event: PointerEvent): void => {\n if (!this.saturationArea) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n this.#isDraggingSaturation = true;\n this.#activeSaturationPointer = event.pointerId;\n this.saturationArea.setPointerCapture(event.pointerId);\n this.updateSaturationValue(event);\n };\n\n readonly handleSaturationPointerMove = (event: PointerEvent): void => {\n if (!this.#isDraggingSaturation || event.pointerId !== this.#activeSaturationPointer) {\n return;\n }\n\n event.preventDefault();\n this.updateSaturationValue(event);\n };\n\n readonly handleSaturationPointerUp = (event: PointerEvent): void => {\n if (!this.#isDraggingSaturation || event.pointerId !== this.#activeSaturationPointer) {\n return;\n }\n\n this.#isDraggingSaturation = false;\n this.#activeSaturationPointer = null;\n\n if (this.saturationArea?.hasPointerCapture(event.pointerId)) {\n this.saturationArea.releasePointerCapture(event.pointerId);\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n\n private updateSaturationValue(event: PointerEvent): void {\n if (!this.saturationArea) {\n return;\n }\n const rect = this.saturationArea.getBoundingClientRect();\n const x = Math.max(0, Math.min(rect.width, event.clientX - rect.left));\n const y = Math.max(0, Math.min(rect.height, event.clientY - rect.top));\n\n this.hsv.s = x / rect.width;\n this.hsv.v = 1 - y / rect.height;\n\n this.#updateValue(event);\n this.requestRender();\n }\n\n readonly handleHuePointerDown = (event: PointerEvent): void => {\n if (!this.hueArea) {\n return;\n }\n\n if (event.button !== undefined && event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n this.#isDraggingHue = true;\n this.#activeHuePointer = event.pointerId;\n this.hueArea.setPointerCapture(event.pointerId);\n this.updateHue(event);\n };\n\n readonly handleHuePointerMove = (event: PointerEvent): void => {\n if (!this.#isDraggingHue || event.pointerId !== this.#activeHuePointer) {\n return;\n }\n\n event.preventDefault();\n this.updateHue(event);\n };\n\n readonly handleHuePointerUp = (event: PointerEvent): void => {\n if (!this.#isDraggingHue || event.pointerId !== this.#activeHuePointer) {\n return;\n }\n\n this.#isDraggingHue = false;\n this.#activeHuePointer = null;\n\n if (this.hueArea?.hasPointerCapture(event.pointerId)) {\n this.hueArea.releasePointerCapture(event.pointerId);\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n\n private updateHue(event: PointerEvent): void {\n if (!this.hueArea) {\n return;\n }\n const rect = this.hueArea.getBoundingClientRect();\n const x = Math.max(0, Math.min(rect.width, event.clientX - rect.left));\n\n this.hsv.h = (x / rect.width) * 360;\n\n this.#updateValue(event);\n this.requestRender();\n }\n\n readonly handleHexInputChange = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n const newValue = input.value;\n\n if (isValidHex(newValue)) {\n this.updateFromHex(newValue);\n this.#updateValue(event);\n this.requestRender();\n dispatchControlEvent(this, 'change', { value: this.value, event });\n } else if (this.hexInput) {\n this.hexInput.value = this.value;\n }\n };\n\n readonly handleComponentChange = (index: number, value: number | string): void => {\n this.hsv = updateHsvFromComponents(this.hsv, this.format, index, value);\n this.#updateValue(null);\n this.requestRender();\n };\n\n readonly handleFormatChange = (format: ColorFormat): void => {\n this.format = format;\n this.requestRender();\n };\n\n readonly handleFormatCycle = (): void => {\n // Start exit animation\n this.formatAnimating = 'out';\n this.requestRender();\n\n // After exit animation, change format and start enter animation\n setTimeout(() => {\n const currentIndex = COLOR_FORMATS.indexOf(this.format);\n const nextIndex = (currentIndex + 1) % COLOR_FORMATS.length;\n this.format = COLOR_FORMATS[nextIndex] as ColorFormat;\n this.formatAnimating = 'in';\n this.requestRender();\n\n // Clear animation state after enter animation\n setTimeout(() => {\n this.formatAnimating = 'none';\n this.requestRender();\n }, 150);\n }, 150);\n };\n\n readonly handleCancelButtonClick = (event: Event): void => {\n this.updateFromHex(this.originalValue);\n this.isInternalUpdate = true;\n this.value = this.originalValue;\n this.isInternalUpdate = false;\n this.requestRender();\n dispatchControlEvent(this, 'cancel', { value: this.originalValue, event });\n };\n\n readonly handleApplyButtonClick = (event: Event): void => {\n this.originalValue = this.value;\n dispatchControlEvent(this, 'apply', { value: this.value, event });\n };\n\n readonly handleEyeDropperClick = async (event: Event): Promise<void> => {\n if (!('EyeDropper' in window)) {\n return;\n }\n\n try {\n const eyeDropper = new (\n window as typeof window & { EyeDropper: new () => { open: () => Promise<{ sRGBHex: string }> } }\n ).EyeDropper();\n const result = await eyeDropper.open();\n\n if (result.sRGBHex) {\n this.updateFromHex(result.sRGBHex);\n this.#updateValue(event);\n this.requestRender();\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n } catch {\n // User cancelled or API error - silently ignore\n }\n };\n}\n\nexport default {\n ColorPicker\n};\n","export interface RGB {\n r: number;\n g: number;\n b: number;\n}\n\nexport interface HSV {\n h: number;\n s: number;\n v: number;\n}\n\nexport interface HSL {\n h: number;\n s: number;\n l: number;\n}\n\nexport type ColorFormat = 'hex' | 'rgb' | 'hsl' | 'hsb';\n\nconst clamp01 = (value: number) => Math.max(0, Math.min(1, value));\n\nexport function hsvToRgb(h: number, s: number, v: number): RGB {\n let hue = ((h % 360) + 360) % 360;\n hue /= 60;\n\n const saturation = clamp01(s);\n const value = clamp01(v);\n const c = value * saturation;\n const x = c * (1 - Math.abs((hue % 2) - 1));\n const m = value - c;\n\n let r = 0;\n let g = 0;\n let b = 0;\n\n if (hue < 1) {\n r = c;\n g = x;\n } else if (hue < 2) {\n r = x;\n g = c;\n } else if (hue < 3) {\n g = c;\n b = x;\n } else if (hue < 4) {\n g = x;\n b = c;\n } else if (hue < 5) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255)\n };\n}\n\nexport function rgbToHsv(r: number, g: number, b: number): HSV {\n const rn = r / 255;\n const gn = g / 255;\n const bn = b / 255;\n\n const max = Math.max(rn, gn, bn);\n const min = Math.min(rn, gn, bn);\n const delta = max - min;\n\n let h = 0;\n const s = max === 0 ? 0 : delta / max;\n const v = max;\n\n if (delta !== 0) {\n switch (max) {\n case rn:\n h = (gn - bn) / delta + (gn < bn ? 6 : 0);\n break;\n case gn:\n h = (bn - rn) / delta + 2;\n break;\n case bn:\n h = (rn - gn) / delta + 4;\n break;\n default:\n break;\n }\n\n h *= 60;\n }\n\n return { h, s, v };\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n const toHex = (component: number) => component.toString(16).padStart(2, '0');\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toUpperCase();\n}\n\nexport function hexToRgb(hex: string): RGB | null {\n let normalized = hex.trim();\n\n if (/^#([0-9a-f]{3})$/i.test(normalized)) {\n normalized = `#${normalized[1]}${normalized[1]}${normalized[2]}${normalized[2]}${normalized[3]}${normalized[3]}`;\n }\n\n const match = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(normalized);\n\n if (!match || !match[1] || !match[2] || !match[3]) {\n return null;\n }\n\n return {\n r: parseInt(match[1], 16),\n g: parseInt(match[2], 16),\n b: parseInt(match[3], 16)\n };\n}\n\nexport function hexToHsv(hex: string): HSV | null {\n const rgb = hexToRgb(hex);\n return rgb ? rgbToHsv(rgb.r, rgb.g, rgb.b) : null;\n}\n\nexport function hsvToHex(h: number, s: number, v: number): string {\n const rgb = hsvToRgb(h, s, v);\n return rgbToHex(rgb.r, rgb.g, rgb.b);\n}\n\nexport function isValidHex(hex: string): boolean {\n return /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(hex.trim());\n}\n\nexport function getLuminance(r: number, g: number, b: number): number {\n return (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n}\n\nexport function isLightColor(r: number, g: number, b: number): boolean {\n return getLuminance(r, g, b) > 0.5;\n}\n\nexport function hsvToHsl(h: number, s: number, v: number): HSL {\n const l = v * (1 - s / 2);\n const sl = l === 0 || l === 1 ? 0 : (v - l) / Math.min(l, 1 - l);\n return { h, s: sl, l };\n}\n\nexport function hslToHsv(h: number, s: number, l: number): HSV {\n const v = l + s * Math.min(l, 1 - l);\n const sv = v === 0 ? 0 : 2 * (1 - l / v);\n return { h, s: sv, v };\n}\n\nexport function formatColor(hsv: HSV, format: ColorFormat, alpha = 1): string {\n const { h, s, v } = hsv;\n\n switch (format) {\n case 'hex':\n return hsvToHex(h, s, v);\n case 'rgb': {\n const rgb = hsvToRgb(h, s, v);\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha})`;\n }\n case 'hsl': {\n const hsl = hsvToHsl(h, s, v);\n return `hsla(${Math.round(hsl.h)}, ${Math.round(hsl.s * 100)}%, ${Math.round(hsl.l * 100)}%, ${alpha})`;\n }\n case 'hsb':\n return `hsb(${Math.round(h)}, ${Math.round(s * 100)}%, ${Math.round(v * 100)}%)`;\n default:\n return hsvToHex(h, s, v);\n }\n}\n\nexport interface ColorComponents {\n labels: string[];\n values: (string | number)[];\n max: number[];\n suffix: string[];\n}\n\nexport function getColorComponents(hsv: HSV, format: ColorFormat): ColorComponents {\n const { h, s, v } = hsv;\n\n switch (format) {\n case 'hex':\n return {\n labels: ['Hex'],\n values: [hsvToHex(h, s, v)],\n max: [0],\n suffix: ['']\n };\n case 'rgb': {\n const rgb = hsvToRgb(h, s, v);\n return {\n labels: ['R', 'G', 'B'],\n values: [rgb.r, rgb.g, rgb.b],\n max: [255, 255, 255],\n suffix: ['', '', '']\n };\n }\n case 'hsl': {\n const hsl = hsvToHsl(h, s, v);\n return {\n labels: ['H', 'S', 'L'],\n values: [Math.round(hsl.h), Math.round(hsl.s * 100), Math.round(hsl.l * 100)],\n max: [360, 100, 100],\n suffix: ['°', '%', '%']\n };\n }\n case 'hsb':\n return {\n labels: ['H', 'S', 'B'],\n values: [Math.round(h), Math.round(s * 100), Math.round(v * 100)],\n max: [360, 100, 100],\n suffix: ['°', '%', '%']\n };\n default:\n return {\n labels: ['Hex'],\n values: [hsvToHex(h, s, v)],\n max: [0],\n suffix: ['']\n };\n }\n}\n\nexport function updateHsvFromComponents(hsv: HSV, format: ColorFormat, index: number, value: number | string): HSV {\n const newHsv = { ...hsv };\n\n switch (format) {\n case 'hex': {\n if (typeof value === 'string' && isValidHex(value)) {\n const parsed = hexToHsv(value);\n if (parsed) {\n return parsed;\n }\n }\n break;\n }\n case 'rgb': {\n const rgb = hsvToRgb(hsv.h, hsv.s, hsv.v);\n const vals: [number, number, number] = [rgb.r, rgb.g, rgb.b];\n vals[index] = Math.max(0, Math.min(255, Number(value)));\n return rgbToHsv(vals[0], vals[1], vals[2]);\n }\n case 'hsl': {\n const hsl = hsvToHsl(hsv.h, hsv.s, hsv.v);\n const vals: [number, number, number] = [hsl.h, hsl.s * 100, hsl.l * 100];\n vals[index] = Number(value);\n vals[0] = Math.max(0, Math.min(360, vals[0]));\n vals[1] = Math.max(0, Math.min(100, vals[1]));\n vals[2] = Math.max(0, Math.min(100, vals[2]));\n return hslToHsv(vals[0], vals[1] / 100, vals[2] / 100);\n }\n case 'hsb': {\n const vals: [number, number, number] = [hsv.h, hsv.s * 100, hsv.v * 100];\n vals[index] = Number(value);\n vals[0] = Math.max(0, Math.min(360, vals[0]));\n vals[1] = Math.max(0, Math.min(100, vals[1]));\n vals[2] = Math.max(0, Math.min(100, vals[2]));\n return { h: vals[0], s: vals[1] / 100, v: vals[2] / 100 };\n }\n }\n\n return newHsv;\n}\n\nexport const COLOR_FORMATS: ColorFormat[] = ['hex', 'rgb', 'hsl', 'hsb'];\n","import type { TemplateResult } from 'lit-html';\n\nimport { nothing } from 'lit-html';\nimport { classMap } from 'lit-html/directives/class-map.js';\nimport { ifDefined } from 'lit-html/directives/if-defined.js';\nimport { repeat } from 'lit-html/directives/repeat.js';\nimport { styleMap } from 'lit-html/directives/style-map.js';\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html.js';\nimport { when } from 'lit-html/directives/when.js';\n\nexport { classMap, styleMap, when, repeat, unsafeHTML, ifDefined };\n\nexport function renderIf<T>(\n condition: T | undefined | null,\n template: TemplateResult | (() => TemplateResult)\n): TemplateResult | typeof nothing {\n if (!condition) {\n return nothing;\n }\n\n return typeof template === 'function' ? template() : template;\n}\n\nexport function renderList<T>(\n items: readonly T[],\n template: (item: T, index: number) => TemplateResult,\n key: (item: T, index: number) => unknown = (item) => item\n): ReturnType<typeof repeat> {\n return repeat(items, key, template);\n}\n\nexport function styleObject(input: Record<string, string | number | null | undefined>): ReturnType<typeof styleMap> {\n const definedEntries = Object.entries(input).reduce<Record<string, string>>((acc, [property, value]) => {\n if (value === null || value === undefined || value === '') {\n return acc;\n }\n\n acc[property] = typeof value === 'number' ? `${value}` : value;\n return acc;\n }, {});\n\n return styleMap(definedEntries);\n}\n\nexport const optionalAttribute = ifDefined;\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-arrows-vertical',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 24px);\n height: var(--ease-icon-size, 24px);\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 9.00006L11.1161 5.88394C11.6043 5.39578 12.3957 5.39578 12.8839 5.88394L16 9.00006M8 15.0001L11.1161 18.1162C11.6043 18.6043 12.3957 18.6043 12.8839 18.1162L16 15.0001\" />\n </svg>\n `;\n }\n})\nexport class IconArrowsVertical extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-picker',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"picker\"] {\n display: block;\n width: 12px;\n height: 12px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.25;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg part=\"picker\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 3.50003L8.5 7.00003M2.14645 7.85358L7.5 2.50003C8.05228 1.94774 8.94772 1.94774 9.5 2.50003C10.0523 3.05231 10.0523 3.94774 9.5 4.50003L4.14645 9.85358C4.05268 9.94735 3.9255 10 3.79289 10H2.5C2.22386 10 2 9.77617 2 9.50003V8.20714C2 8.07453 2.05268 7.94735 2.14645 7.85358Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n `;\n }\n})\nexport class IconPicker extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\n@Component({\n tag: 'ease-field',\n autoSlot: false,\n shadowMode: 'open',\n styles: `\n :host {\n display: block;\n width: 100%;\n }\n\n [part=\"field\"] {\n scroll-snap-align: start;\n display: grid;\n grid-template-columns: var(--ease-field-label-width, 36%) auto;\n column-gap: var(--ease-field-column-gap, 12px);\n row-gap: var(--ease-field-row-gap, 6px);\n align-items: center;\n width: 100%;\n min-height: var(--ease-field-min-height, 30px);\n margin: 0;\n padding: 0;\n }\n\n :host([full-width]) [part=\"field\"] {\n grid-template-columns: 1fr;\n }\n\n label {\n grid-column: 1;\n font-size: var(--ease-field-label-font-size, var(--ease-font-size-sm, 12px));\n line-height: var(--ease-field-label-line-height, 1.25);\n font-weight: var(--ease-field-label-font-weight, 400);\n text-wrap: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n padding-left: var(--ease-field-label-padding-left, 4px);\n box-sizing: border-box;\n display: block;\n max-width: 100%;\n color: var(--ease-field-label-color, var(--color-gray-600));\n }\n\n [part=\"content\"] {\n grid-column: 2;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n :host([full-width]) [part=\"content\"] {\n grid-column: 1;\n align-items: stretch;\n }\n `,\n template(this: Field) {\n return html`\n <div part=\"field\">\n <label>\n ${this.label ?? ''}\n </label>\n\n <div part=\"content\" class=${this.fullWidth ? 'full-width' : ''}>\n <slot></slot>\n </div>\n </div>\n `;\n }\n})\nexport class Field extends HTMLElement {\n @Prop<string | null>({ reflect: true })\n accessor label!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor fullWidth = false;\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\n/**\n * Event detail for folder toggle events\n */\nexport interface FolderToggleEventDetail {\n /** Whether the folder is open */\n open: boolean;\n /** The original event */\n event: Event;\n}\n\n/**\n * Folder component - collapsible container for grouping controls.\n *\n * Click on the header to toggle open/closed state.\n * Supports optional max-height with scroll fade masks.\n *\n * @tag ease-folder\n *\n * @slot headline - Folder title text\n * @slot actions - Header action buttons (displayed on the right)\n * @slot - Default slot for folder content\n *\n * @csspart section - Outer container\n * @csspart header - Clickable header row\n * @csspart headline - Title element\n * @csspart icon - Folder icon\n * @csspart chevron - Chevron icon\n * @csspart actions - Actions container\n * @csspart content - Content wrapper (handles height animations)\n * @csspart body - Inner body container (scrollable when max-height is set)\n * @csspart items - Grid container for slotted content\n *\n * @fires folder-toggle - Fired when the folder is opened or closed\n */\n@Component({\n tag: 'ease-folder',\n shadowMode: 'open',\n styles: `\n @property --top-fade {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n }\n\n @property --bottom-fade {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n }\n\n @keyframes scroll-fade {\n 0% {\n --top-fade: 0px;\n }\n 10%, 100% {\n --top-fade: 8px;\n }\n 0%, 90% {\n --bottom-fade: 8px;\n }\n 100% {\n --bottom-fade: 0px;\n }\n }\n\n\n :host {\n display: block;\n width: 100%;\n }\n\n [part=\"section\"] {\n display: block;\n width: 100%;\n border-radius: var(--ease-folder-radius);\n border: 1px solid var(--ease-folder-border-color);\n background-color: var(--ease-folder-background);\n background-clip: padding-box;\n box-sizing: border-box;\n overflow: hidden;\n }\n\n [part=\"header\"] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: var(--ease-folder-padding);\n box-sizing: border-box;\n cursor: pointer;\n user-select: none;\n }\n\n [part=\"icon\"] {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--ease-folder-icon-color);\n }\n\n [part=\"headline\"] {\n flex: 1 1 auto;\n font-size: var(--ease-folder-title-font-size);\n font-weight: var(--ease-folder-title-font-weight);\n line-height: 16px;\n font-family: var(--ease-font-family);\n color: var(--ease-folder-title-color);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n [part=\"chevron\"] {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--ease-folder-chevron-color);\n transition: color 200ms cubic-bezier(.25, 0, .5, 1);\n }\n\n [part=\"header\"]:hover [part=\"chevron\"] {\n color: var(--ease-folder-chevron-color-hover);\n }\n\n [part=\"content\"] {\n height: 0;\n overflow: hidden;\n transition: height 200ms cubic-bezier(.25, 0, .5, 1);\n }\n\n :host([open]) [part=\"content\"] {\n height: auto;\n }\n\n [part=\"body\"] {\n display: grid;\n grid-gap: var(--ease-folder-gap);\n padding: var(--ease-folder-padding);\n overflow-y: auto;\n overscroll-behavior: contain;\n mask-image: linear-gradient(to bottom, #0000, #ffff var(--top-fade) calc(100% - var(--bottom-fade)), #0000);\n animation-name: scroll-fade;\n animation-timeline: scroll(self y);\n scroll-snap-type: y mandatory;\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n `\n})\nexport class Folder extends HTMLElement {\n @Prop<boolean>({\n type: Boolean,\n reflect: true,\n attribute: 'open',\n defaultValue: false\n })\n accessor open: boolean = false;\n\n @Prop<string | null>({\n reflect: true,\n attribute: 'headline',\n defaultValue: ''\n })\n accessor headline: string | null = null;\n\n @Prop<string | null>({\n reflect: true,\n attribute: 'max-height',\n defaultValue: null\n })\n accessor maxHeight: string | null = null;\n\n render(): TemplateResult {\n return html`\n <section part=\"section\">\n <div part=\"header\" @click=${this.#handleHeaderClick}>\n <span part=\"icon\">\n <ease-icon-folder state=${this.open ? 'open' : 'close'}></ease-icon-folder>\n </span>\n <span part=\"headline\">\n ${this.headline}\n </span>\n <span part=\"chevron\">\n <ease-icon-chevron state=${this.open ? 'up' : 'down'}></ease-icon-chevron>\n </span>\n </div>\n <div part=\"content\" style=${this.maxHeight ? `max-height: ${this.maxHeight}` : ''}>\n <div part=\"body\">\n <slot></slot>\n </div>\n </div>\n </section>\n `;\n }\n\n toggle(): void {\n this.open = !this.open;\n }\n\n #handleHeaderClick = (event: MouseEvent): void => {\n this.toggle();\n\n this.dispatchEvent(\n new CustomEvent<FolderToggleEventDetail>('folder-toggle', {\n detail: { open: this.open, event },\n bubbles: true,\n composed: true\n })\n );\n };\n\n #stopPropagation = (event: MouseEvent): void => {\n event.stopPropagation();\n };\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-clear',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: .75;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n\n [part=\"clear\"] {\n & > path {\n\n &:first-child {\n translate: var(--ease-icon-clear-path-translate, 0);\n transition: translate var(--ease-icon-clear-path-duration, 0.2s);\n transition-delay: var(--ease-icon-clear-path-delay, 0s);\n }\n\n &:not(:first-child) {\n stroke-dasharray: 100 0 100;\n stroke-dashoffset: var(--ease-icon-clear-lines-offset, 100);\n transition: stroke-dashoffset var(--ease-icon-clear-lines-duration, 0.2s);\n transition-delay: var(--ease-icon-clear-lines-delay, 0s);\n }\n }\n\n g {\n path {\n transform-box: fill-box;\n transform-origin: 50% 50%;\n transition: rotate var(--ease-icon-clear-star-duration, 0.2s), scale var(--ease-icon-clear-star-duration, 0.2s);\n\n &:first-child {\n rotate: var(--ease-icon-clear-star-1-rotate, 0deg);\n scale: var(--ease-icon-clear-star-1-scale, 1);\n transition-delay: var(--ease-icon-clear-star-1-delay, 0s);\n }\n\n &:last-child {\n rotate: var(--ease-icon-clear-star-2-rotate, 0deg);\n scale: var(--ease-icon-clear-star-2-scale, 1);\n transition-delay: var(--ease-icon-clear-star-2-delay, 0s);\n }\n }\n }\n }\n `,\n template() {\n return html`\n <svg part=\"clear\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.7613 10.334L13.7071 12.2798C14.1011 12.6739 14.1011 13.3127 13.7071 13.7067C13.3131 14.1007 12.6742 14.1007 12.2802 13.7067L10.3344 11.7609M11.7613 10.334L10.9541 8.08932M11.7613 10.334L10.3344 11.7609M10.3344 11.7609L8.08973 10.9537M6.69581 12.3476L12.348 6.69544C12.6942 6.34922 12.6942 5.7879 12.348 5.44168L11.892 4.98574C11.5458 4.63952 10.9845 4.63952 10.6383 4.98574L4.9861 10.6379C4.63989 10.9841 4.63989 11.5454 4.9861 11.8917L5.44204 12.3476C5.78826 12.6938 6.34959 12.6938 6.69581 12.3476Z\" />\n <g>\n <path d=\"M3.3313 2.6645H4.66519M3.99824 1.99756V3.33145\" />\n <path d=\"M4.66516 5.99946H5.99905M5.33211 5.33252V6.66641\" />\n </g>\n <path d=\"M7.33301 1.99756L8.6669 3.33145\" pathlength=\"100\" />\n <path d=\"M3.6648 8.33386L1.99744 6.6665\" pathlength=\"100\" />\n </svg>\n `;\n }\n})\nexport class IconClear extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype FolderState = 'open' | 'close';\n\n@Component({\n tag: 'ease-icon-folder',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"folder\"] {\n display: block;\n position: relative;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n }\n\n [part=\"folder\"]::before {\n content: '';\n position: absolute;\n z-index: 1;\n width: 12px;\n height: 6px;\n top: 6px;\n left: 50%;\n transform: translate(-50%, .5px);\n background-color: currentColor;\n border-radius: 3px 3px 1px 1px;\n transform-origin: 50% 100%;\n transition: transform 200ms cubic-bezier(.25, 0, .5, 1);\n }\n\n [part=\"folder\"][data-state=\"open\"]::before {\n transform: translate(-50%, .5px) scaleY(0.85) skewX(-28deg);\n }\n\n svg {\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n observedAttributes: ['state']\n})\nexport class IconFolder extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<FolderState>({\n reflect: true,\n attribute: 'state',\n defaultValue: 'close'\n })\n accessor state!: FolderState;\n\n render(): TemplateResult {\n return html`\n <div part=\"folder\" data-state=${this.state}>\n <svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 11V5C2 3.89543 2.89543 3 4 3H5.5C6.12951 3 6.72229 3.29639 7.1 3.8L7.4 4.2C7.77771 4.70361 8.37049 5 9 5H12C13.1046 5 14 5.89543 14 7V11C14 12.1046 13.1046 13 12 13H4C2.89543 13 2 12.1046 2 11Z\" />\n </svg>\n </div>\n `;\n }\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype GridState = 'show' | 'hide';\n\n@Component({\n tag: 'ease-icon-grid',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"grid\"] {\n --ease-icon-grid-offset: 100;\n --ease-icon-grid-rotate: 0deg;\n\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: .75;\n stroke-linecap: round;\n stroke-linejoin: round;\n\n g {\n &:first-of-type {\n path {\n stroke-dasharray: 100 0 100;\n stroke-dashoffset: var(--ease-icon-grid-offset);\n transition: stroke-dashoffset 0.2s;\n }\n }\n\n &:last-child {\n transform-origin: 72.92% 72.92%;\n transition: rotate 0.35s linear(0, 0.472 7.5%, 0.832 15.5%, 0.97 19.7%, 1.081 24%, 1.166 28.5%, 1.226 33.2%, 1.255 36.9%, 1.271 40.8%, 1.275 44.9%, 1.266 49.4%, 1.222 57.8%, 1.092 75.1%, 1.042 83%, 1.01 91.4%, 1);\n rotate: var(--ease-icon-grid-rotate);\n }\n }\n\n [data-state=\"hide\"] {\n --ease-icon-grid-offset: 200;\n --ease-icon-grid-rotate: 45deg;\n }\n }\n `,\n observedAttributes: ['state']\n})\nexport class IconGrid extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<GridState>({\n reflect: true,\n attribute: 'state',\n defaultValue: 'show'\n })\n accessor state!: GridState;\n\n render(): TemplateResult {\n return html`\n <svg part=\"grid\" viewBox=\"0 0 12 12\" state=${this.state} xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.5018 5.49971V3.99909C10.5018 2.6178 9.38204 1.49805 8.00076 1.49805H3.99909C2.6178 1.49805 1.49805 2.6178 1.49805 3.99909V8.00076C1.49805 9.38204 2.6178 10.5018 3.99909 10.5018H5.49971\" />\n <g data-state=${this.state}>\n <path d=\"M7.50059 1.49805V5.49971\" pathlength=\"100\" />\n <path d=\"M4.49937 1.49805V10.5018\" pathlength=\"100\" />\n <path d=\"M1.49805 7.47081H5.49971\" pathlength=\"100\" />\n <path d=\"M1.49805 4.46934H10.5018\" pathlength=\"100\" />\n </g>\n <path d=\"M8.75118 11.0019C7.50813 11.0018 6.50043 9.99415 6.50024 8.7511C6.51896 7.51461 7.5176 6.51719 8.75412 6.5C9.99728 6.50081 11.0044 7.50925 11.0036 8.75241C11.0028 9.99556 9.99434 11.0027 8.75118 11.0019\" />\n <g data-state=${this.state}>\n <path d=\"M8.7512 7.86672V9.63523\" />\n <path d=\"M9.63545 8.75098H7.86694\" />\n </g>\n </svg>\n `;\n }\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-loading',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n\n [part=\"loading\"] {\n transform-origin: center center;\n animation-name: loading, loading-dash, loading-dash-offset;\n animation-duration: .4s, .8s, .8s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n stroke-dasharray: 35 65 35 65;\n stroke-dashoffset: 75;\n }\n\n @keyframes loading {\n 0% {\n transform: rotate(-90deg);\n }\n 100% {\n transform: rotate(270deg);\n }\n }\n\n @keyframes loading-dash {\n 33% {\n stroke-dasharray: 15 85 15 85;\n }\n 66% {\n stroke-dasharray: 45 55 45 55;\n }\n }\n\n @keyframes loading-dash-offset {\n 33% {\n stroke-dashoffset: 55;\n }\n 66% {\n stroke-dashoffset: 85;\n }\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"4.5\" stroke-opacity=\"0.25\" />\n <circle cx=\"6\" cy=\"6\" r=\"4.5\" part=\"loading\" pathlength=\"100\" />\n </svg>\n `;\n }\n})\nexport class Loading extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype SnapState = 'active' | 'default';\n\n@Component({\n tag: 'ease-icon-snap',\n styles: `\n :host {\n display: contents;\n }\n [part=\"snap\"] {\n --ease-icon-snap-cursor-rotate: 0deg;\n --ease-icon-snap-lines-rotate: 0deg;\n --ease-icon-snap-lines-translate: 0 0;\n --ease-icon-snap-lines-translate-1: 0 0;\n --ease-icon-snap-lines-translate-2: 0 0;\n --ease-icon-snap-lines-translate-3: 0 0;\n --ease-icon-snap-lines-translate-4: 0 0;\n --ease-icon-snap-lines-rotate-1: 0deg;\n --ease-icon-snap-lines-rotate-2: 0deg;\n --ease-icon-snap-lines-rotate-3: 0deg;\n --ease-icon-snap-lines-rotate-4: 0deg;\n display: block;\n width: var(--ease-icon-size, 16px);\n height: var(--ease-icon-size, 16px);\n fill: none;\n stroke: currentColor;\n stroke-width: .75;\n stroke-linecap: round;\n stroke-linejoin: round;\n g {\n transform-origin: 68.75% 68.75%;\n &:first-child {\n rotate: var(--ease-icon-snap-cursor-rotate);\n transition: rotate 0.2s;\n\n path {\n transition: d 0.2s;\n }\n }\n &:last-child {\n rotate: var(--ease-icon-snap-lines-rotate);\n translate: var(--ease-icon-snap-lines-translate);\n transition: rotate 0.2s, translate 0.2s;\n path {\n transition: translate 0.2s;\n transform-box: fill-box;\n transform-origin: 50% 50%;\n &:nth-child(1) {\n translate: var(--ease-icon-snap-lines-translate-1);\n rotate: var(--ease-icon-snap-lines-rotate-1);\n }\n &:nth-child(2) {\n translate: var(--ease-icon-snap-lines-translate-2);\n rotate: var(--ease-icon-snap-lines-rotate-2);\n }\n &:nth-child(3) {\n translate: var(--ease-icon-snap-lines-translate-3);\n rotate: var(--ease-icon-snap-lines-rotate-3);\n }\n &:nth-child(4) {\n translate: var(--ease-icon-snap-lines-translate-4);\n rotate: var(--ease-icon-snap-lines-rotate-4);\n }\n }\n }\n }\n }\n [part=\"cursor\"] {\n stroke: transparent;\n stroke-width: 0;\n fill: currentColor;\n }\n [state=\"active\"] {\n --ease-icon-snap-cursor-rotate: -90deg;\n --ease-icon-snap-lines-rotate: -90deg;\n --ease-icon-snap-lines-translate: -2.25px -2.25px;\n --ease-icon-snap-lines-translate: -2.25px -2.25px;\n --ease-icon-snap-lines-translate-1: 1.25px .5px;\n --ease-icon-snap-lines-translate-2: 1.25px -.15px;\n --ease-icon-snap-lines-translate-3: .15px -1.25px;\n --ease-icon-snap-lines-translate-4: -.5px -1.25px;\n --ease-icon-snap-lines-rotate-1: 5deg;\n --ease-icon-snap-lines-rotate-2: 20deg;\n --ease-icon-snap-lines-rotate-3: -20deg;\n --ease-icon-snap-lines-rotate-4: -5deg;\n }\n `,\n observedAttributes: ['state']\n})\nexport class Snap extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<SnapState>({\n reflect: true,\n attribute: 'state',\n defaultValue: 'default'\n })\n accessor state!: SnapState;\n\n render(): TemplateResult {\n const defaultPath =\n 'M8.48446 6.48383C8.59007 6.37822 8.71218 6.29901 8.84253 6.24620C8.97289 6.19340 9.11149 6.16699 9.25009 6.16699C9.38869 6.16699 9.52729 6.19340 9.65764 6.24620C9.78799 6.29901 9.91009 6.37822 10.01570 6.48383C10.12128 6.58940 10.20044 6.71143 10.25320 6.84168C10.30597 6.97193 10.33233 7.11041 10.33231 7.24889C10.33229 7.38738 10.30589 7.52587 10.25312 7.65615C10.20034 7.78642 10.12120 7.90848 10.01570 8.01410C9.88354 8.14659 9.75139 8.27907 9.61923 8.41156C9.54601 8.48478 9.44981 8.52139 9.35361 8.52139C9.25741 8.52139 9.16120 8.48478 9.08798 8.41156C9.01476 8.33834 8.97815 8.24214 8.97815 8.14594C8.97815 8.04974 9.01476 7.95353 9.08798 7.88031C9.22014 7.74815 9.35230 7.61599 9.48446 7.48383C9.54924 7.41905 9.58163 7.33401 9.58163 7.24896C9.58163 7.16392 9.54924 7.07888 9.48446 7.01410C9.41974 6.94964 9.33492 6.91741 9.25009 6.91741C9.16526 6.91741 9.08043 6.94963 9.01571 7.01410C8.88355 7.14659 8.75139 7.27907 8.61923 7.41156C8.54601 7.48478 8.44981 7.52139 8.35361 7.52139C8.25741 7.52139 8.16120 7.48478 8.08798 7.41156C8.01476 7.33834 7.97815 7.24214 7.97815 7.14594C7.97815 7.04974 8.01476 6.95354 8.08798 6.88031C8.22014 6.74815 8.35230 6.61599 8.48446 6.48383C8.48446 6.48383 8.48446 6.48383 8.48446 6.48383Z';\n\n const defaultPath2 =\n 'M6.88092 8.08737C6.91753 8.05076 6.95989 8.02330 7.00512 8.00500C7.05035 7.98669 7.09845 7.97754 7.14655 7.97754C7.24275 7.97754 7.33895 8.01415 7.41217 8.08737C7.44878 8.12398 7.47624 8.16634 7.49454 8.21156C7.51285 8.25679 7.52200 8.30489 7.52200 8.35299C7.52200 8.40110 7.51285 8.44920 7.49454 8.49443C7.47624 8.53965 7.44878 8.58201 7.41217 8.61862C7.34593 8.68470 7.27968 8.75078 7.21344 8.81686C7.14720 8.88294 7.08095 8.94902 7.01471 9.01510C6.95024 9.07982 6.91802 9.16465 6.91802 9.24948C6.91802 9.33431 6.95025 9.41914 7.01471 9.48385C7.07949 9.54863 7.16453 9.58102 7.24957 9.58102C7.33462 9.58102 7.41966 9.54863 7.48444 9.48385C7.55052 9.41777 7.61660 9.35169 7.68268 9.28561C7.74876 9.21953 7.81484 9.15345 7.88092 9.08737C7.91753 9.05076 7.95989 9.02330 8.00512 9.00500C8.05035 8.98669 8.09845 8.97754 8.14655 8.97754C8.24275 8.97754 8.33895 9.01415 8.41217 9.08737C8.44878 9.12398 8.47624 9.16634 8.49454 9.21156C8.51285 9.25679 8.52200 9.30489 8.52200 9.35299C8.52200 9.44920 8.48539 9.54540 8.41217 9.61862C8.34593 9.68470 8.27968 9.75078 8.21344 9.81686C8.14720 9.88294 8.08095 9.94902 8.01471 10.01510C7.96190 10.06785 7.90498 10.11401 7.84498 10.15358C7.78498 10.19315 7.72189 10.22613 7.65676 10.25252C7.59162 10.27890 7.52443 10.29870 7.45621 10.31190C7.38799 10.32510 7.31875 10.33170 7.24950 10.33171C7.18026 10.33172 7.11102 10.32514 7.04281 10.31195C6.97460 10.29877 6.90741 10.27898 6.84229 10.25260C6.77716 10.22622 6.71409 10.19324 6.65411 10.15365C6.59413 10.11407 6.53723 10.06789 6.48444 10.01510C6.43163 9.96230 6.38543 9.90537 6.34582 9.84534C6.30622 9.78532 6.27322 9.72221 6.24681 9.65703C6.22041 9.59186 6.20061 9.52462 6.18740 9.45635C6.17420 9.38808 6.16760 9.31878 6.16760 9.24948C6.16760 9.18018 6.17420 9.11088 6.18740 9.04261C6.20061 8.97434 6.22041 8.90710 6.24681 8.84192C6.27322 8.77675 6.30622 8.71363 6.34582 8.65361C6.38543 8.59359 6.43163 8.53666 6.48444 8.48385C6.55052 8.41777 6.61660 8.35169 6.68268 8.28561C6.74876 8.21953 6.81484 8.15345 6.88092 8.08737C6.88092 8.08737 6.88092 8.08737 6.88092 8.08737Z';\n\n const activePath =\n 'M9.25193 6.28166C9.4768 6.23094 9.80415 6.20744 10.0781 6.48185C10.3368 6.74117 10.3461 7.05052 10.3008 7.29338C10.2792 7.40896 10.2435 7.52323 10.2119 7.61955C10.1784 7.72179 10.1479 7.80498 10.124 7.89201C10.12433 7.89234 10.12467 7.89266 10.125 7.89299C9.92512 8.64299 9.72525 9.39300 9.52537 10.14300C9.47203 10.34300 9.2664 10.46180 9.06638 10.40860C8.86627 10.35520 8.74739 10.14970 8.80076 9.94963C9.00063 9.19963 9.20050 8.44963 9.40037 7.69963C9.40069 7.69898 9.40102 7.69832 9.40134 7.69767C9.43192 7.58586 9.47025 7.47290 9.49900 7.38517C9.53005 7.29041 9.55180 7.21804 9.56345 7.15568C9.58449 7.04289 9.56329 7.02762 9.54685 7.01115C9.54547 7.00815 9.54373 6.98452 9.41697 7.01310C9.34508 7.02932 9.27319 7.05278 9.16502 7.08537C9.07787 7.11162 8.97189 7.13866 8.85837 7.15764C8.85870 7.15796 8.85902 7.15829 8.85935 7.15861C8.10935 7.35848 7.35935 7.55835 6.60935 7.75822C6.40924 7.81159 6.20373 7.69271 6.15037 7.49260C6.09724 7.29260 6.21600 7.08695 6.41599 7.03361C7.16599 6.83374 7.91599 6.63387 8.66599 6.43400C8.68104 6.42999 8.69646 6.42733 8.71189 6.42521C8.78100 6.41576 8.85573 6.39545 8.94822 6.36760C9.03125 6.34259 9.14580 6.30560 9.25193 6.28166C9.25193 6.28166 9.25193 6.28166 9.25193 6.28166Z';\n\n const activePath2 =\n 'M6.30855 7.08196C6.48218 6.9692 6.71426 7.01871 6.8271 7.19231C6.93984 7.36595 6.89035 7.59803 6.71675 7.71087C6.55769 7.8143 6.51399 7.8829 6.50288 7.9052C6.50718 7.91375 6.51671 7.92905 6.53804 7.95208C6.59186 8.01016 6.676 8.06871 6.76265 8.11614C6.80333 8.1384 6.83994 8.15555 6.86519 8.16692C6.87727 8.17236 6.88667 8.1762 6.89253 8.17864C6.89522 8.17976 6.89739 8.18117 6.89839 8.18157C6.92411 8.19492 6.94982 8.20826 6.97554 8.22161C7.34059 8.4726 7.44425 8.52362 7.48433 8.54387C7.51885 8.56133 7.56761 8.58533 7.62788 8.63665C7.66711 8.67009 7.71609 8.719 7.77827 8.78118C7.84064 8.84354 7.88955 8.89167 7.9228 8.93059C7.97354 8.98999 7.99693 9.03787 8.0146 9.07219C8.02503 9.09247 8.04365 9.12833 8.09077 9.20501C8.1741 9.33099 8.25744 9.45696 8.34077 9.58294C8.35477 9.60931 8.36876 9.63567 8.38276 9.66204C8.38276 9.66171 8.38276 9.66139 8.38276 9.66106C8.38311 9.66194 8.3836 9.6642 8.38472 9.66692C8.38713 9.67278 8.39182 9.68272 8.39741 9.69524C8.40866 9.72041 8.42527 9.75637 8.44722 9.7968C8.49432 9.88353 8.55171 9.96872 8.60933 10.0224C8.63022 10.0418 8.64563 10.0499 8.65425 10.0546C8.67716 10.0429 8.74616 9.99929 8.84858 9.84173C8.96155 9.66836 9.19361 9.61954 9.36714 9.73235C9.54063 9.84525 9.59026 10.0773 9.47749 10.2509C9.29202 10.5362 9.06335 10.7493 8.77534 10.7988C8.47563 10.8502 8.24137 10.7041 8.09858 10.5712C7.95494 10.4374 7.85125 10.2716 7.78804 10.1552C7.75497 10.0943 7.72938 10.0401 7.71187 10.0009C7.70702 9.99006 7.70284 9.98022 7.69917 9.97161C7.45448 9.61671 7.38641 9.49034 7.34761 9.41497C7.34662 9.41306 7.34544 9.41155 7.34468 9.41009C7.33244 9.39698 7.30693 9.37136 7.24702 9.31145C7.18316 9.24759 7.15849 9.22387 7.14644 9.21282C7.07033 9.17434 6.9431 9.10751 6.58589 8.86321C6.57737 8.85954 6.56726 8.85532 6.55659 8.85052C6.51749 8.83289 6.46383 8.80746 6.40327 8.77434C6.28687 8.71066 6.12089 8.60606 5.98726 8.46184C5.85457 8.31851 5.70938 8.0836 5.76069 7.78411C5.81025 7.49606 6.02305 7.26752 6.30855 7.08196C6.30855 7.08196 6.30855 7.08196 6.30855 7.08196Z';\n\n const path1 = this.state === 'active' ? activePath : defaultPath;\n const path2 = this.state === 'active' ? activePath2 : defaultPath2;\n\n return html`\n <svg part=\"snap\" viewBox=\"0 0 12 12\" state=${this.state} xmlns=\"http://www.w3.org/2000/svg\">\n <g part=\"cursor\">\n <path d=${path1} />\n <path d=${path2} />\n </g>\n \n <path d=\"M2.5 3.5V8.5\" />\n <path d=\"M9.5 5V3.5\" />\n <path d=\"M3.5 9.5H5\" />\n <path d=\"M8.5 2.5H3.5\" />\n \n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.5 3.5V3.5C1.948 3.5 1.5 3.052 1.5 2.5V2.5C1.5 1.948 1.948 1.5 2.5 1.5V1.5C3.052 1.5 3.5 1.948 3.5 2.5V2.5C3.5 3.052 3.052 3.5 2.5 3.5Z\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.5 3.5V3.5C8.948 3.5 8.5 3.052 8.5 2.5V2.5C8.5 1.948 8.948 1.5 9.5 1.5V1.5C10.052 1.5 10.5 1.948 10.5 2.5V2.5C10.5 3.052 10.052 3.5 9.5 3.5Z\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2.5 10.5V10.5C1.948 10.5 1.5 10.052 1.5 9.5V9.5C1.5 8.948 1.948 8.5 2.5 8.5V8.5C3.052 8.5 3.5 8.948 3.5 9.5V9.5C3.5 10.052 3.052 10.5 2.5 10.5Z\" />\n \n <g part=\"lines\">\n <path d=\"M7.5 6V6.5\" />\n <path d=\"M6.5 7.5H6\" />\n <path d=\"M9 10.5V10\" />\n <path d=\"M10 9H10.5\" />\n </g>\n </svg>\n `;\n }\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-anchor-add',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: none;\n stroke: currentColor;\n stroke-width: 0.75;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.70508 10.5003L5.30008 7.90527\" />\n <path d=\"M6.59557 6.61121C6.95348 6.96913 6.95348 7.54942 6.59557 7.90734C6.23765 8.26525 5.65736 8.26525 5.29944 7.90734C4.94153 7.54942 4.94153 6.96913 5.29944 6.61121C5.65736 6.25329 6.23765 6.25329 6.59557 6.61121\" />\n <path d=\"M9.20703 6.50016L8.39453 8.93866C8.27903 9.28516 7.98353 9.54066 7.62453 9.60616L2.70703 10.5002L3.39036 6.74393M9.20006 6.50016L9.72739 5.98984C10.2895 5.4459 10.2968 4.54693 9.74375 3.99385L9.22391 3.47402C8.68351 2.93361 7.80957 2.92644 7.26038 3.45792L6.98022 3.72904\" />\n <path d=\"M3.49931 5.54525C2.36926 5.54516 1.45317 4.62914 1.453 3.49909C1.47001 2.37501 2.37788 1.46826 3.50198 1.45264C4.63212 1.45337 5.54769 2.37013 5.54695 3.50028C5.54621 4.63042 4.62945 5.54599 3.49931 5.54525\" />\n <path d=\"M3.4993 2.69516V4.30289\" />\n <path d=\"M4.30317 3.49902H2.69543\" />\n </svg>\n `;\n }\n})\nexport class IconAnchorAdd extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-anchor-remove',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: none;\n stroke: currentColor;\n stroke-width: 0.75;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.70508 10.5003L5.30008 7.90527\" />\n <path d=\"M6.59557 6.61121C6.95348 6.96913 6.95348 7.54942 6.59557 7.90734C6.23765 8.26525 5.65736 8.26525 5.29944 7.90734C4.94153 7.54942 4.94153 6.96913 5.29944 6.61121C5.65736 6.25329 6.23765 6.25329 6.59557 6.61121\" />\n <path d=\"M9.20703 6.50016L8.39453 8.93866C8.27903 9.28516 7.98353 9.54066 7.62453 9.60616L2.70703 10.5002L3.39036 6.74393M9.20006 6.50016L9.72739 5.98984C10.2895 5.4459 10.2968 4.54693 9.74375 3.99385L9.22391 3.47402C8.68351 2.93361 7.80957 2.92644 7.26038 3.45792L6.98022 3.72904\" />\n <path d=\"M3.49931 5.54525C2.36926 5.54516 1.45317 4.62914 1.453 3.49909C1.47001 2.37501 2.37788 1.46826 3.50198 1.45264C4.63212 1.45337 5.54769 2.37013 5.54695 3.50028C5.54621 4.63042 4.62945 5.54599 3.49931 5.54525\" />\n <path d=\"M4.30317 3.49902H2.69543\" />\n </svg>\n `;\n }\n})\nexport class IconAnchorRemove extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-arrow-up',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.99992 12.6666V3.33331M6.99992 3.33331L2.33325 7.99998M6.99992 3.33331L11.6666 7.99998\" />\n </svg>\n `;\n }\n})\nexport class ArrowUp extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.44279 8.84005C9.56156 9.00972 9.79538 9.05098 9.96505 8.93221C10.1347 8.81344 10.176 8.57962 10.0572 8.40995L9.75 8.625L9.44279 8.84005ZM1.94279 8.40995C1.82402 8.57962 1.86528 8.81344 2.03495 8.93221C2.20462 9.05098 2.43844 9.00972 2.55721 8.84005L2.25 8.625L1.94279 8.40995ZM7.21875 4.21875H6.84375C6.84375 4.68474 6.46599 5.0625 6 5.0625V5.4375V5.8125C6.8802 5.8125 7.59375 5.09895 7.59375 4.21875H7.21875ZM6 5.4375V5.0625C5.53401 5.0625 5.15625 4.68474 5.15625 4.21875H4.78125H4.40625C4.40625 5.09895 5.1198 5.8125 6 5.8125V5.4375ZM4.78125 4.21875H5.15625C5.15625 3.75276 5.53401 3.375 6 3.375V3V2.625C5.1198 2.625 4.40625 3.33855 4.40625 4.21875H4.78125ZM6 3V3.375C6.46599 3.375 6.84375 3.75276 6.84375 4.21875H7.21875H7.59375C7.59375 3.33855 6.8802 2.625 6 2.625V3ZM7.125 4.875L6.81779 5.09005L9.44279 8.84005L9.75 8.625L10.0572 8.40995L7.43221 4.65995L7.125 4.875ZM4.875 4.875L4.56779 4.65995L1.94279 8.40995L2.25 8.625L2.55721 8.84005L5.18221 5.09005L4.875 4.875Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezier extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-angle',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.875 4.21875C1.875 4.63296 1.53921 4.96875 1.125 4.96875C0.710786 4.96875 0.375 4.63296 0.375 4.21875C0.375 3.80454 0.710786 3.46875 1.125 3.46875C1.53921 3.46875 1.875 3.80454 1.875 4.21875Z\" fill-opacity=\"0.9\"/>\n <path d=\"M1.64062 4.21875C1.64062 3.93398 1.40977 3.70312 1.125 3.70312C0.840228 3.70312 0.609375 3.93398 0.609375 4.21875C0.609375 4.50352 0.840228 4.73438 1.125 4.73438C1.40977 4.73438 1.64062 4.50352 1.64062 4.21875ZM2.10938 4.21875C2.10938 4.76241 1.66866 5.20312 1.125 5.20312C0.581345 5.20312 0.140625 4.76241 0.140625 4.21875C0.140625 3.67509 0.581345 3.23438 1.125 3.23438C1.66866 3.23438 2.10938 3.67509 2.10938 4.21875Z\" />\n <path d=\"M9.23535 6.49023L8.76465 6.94727L6.88965 5.00977L7.36035 4.55273L9.23535 6.49023Z\" />\n <path d=\"M10.25 7.34375C10.25 7.75796 9.91421 8.09375 9.5 8.09375C9.08579 8.09375 8.75 7.75796 8.75 7.34375C8.75 6.92954 9.08579 6.59375 9.5 6.59375C9.91421 6.59375 10.25 6.92954 10.25 7.34375Z\" fill-opacity=\"0.9\"/>\n <path d=\"M10.0156 7.34375C10.0156 7.05898 9.78477 6.82812 9.5 6.82812C9.21523 6.82812 8.98438 7.05898 8.98438 7.34375C8.98438 7.62852 9.21523 7.85938 9.5 7.85938C9.78477 7.85938 10.0156 7.62852 10.0156 7.34375ZM10.4844 7.34375C10.4844 7.88741 10.0437 8.32812 9.5 8.32812C8.95634 8.32812 8.51562 7.88741 8.51562 7.34375C8.51562 6.80009 8.95634 6.35938 9.5 6.35938C10.0437 6.35938 10.4844 6.80009 10.4844 7.34375Z\" />\n <path d=\"M6.84375 4.21875C6.84375 3.75276 6.46599 3.375 6 3.375C5.53401 3.375 5.15625 3.75276 5.15625 4.21875C5.15625 4.68474 5.53401 5.0625 6 5.0625C6.46599 5.0625 6.84375 4.68474 6.84375 4.21875ZM7.59375 4.21875C7.59375 5.09895 6.8802 5.8125 6 5.8125C5.1198 5.8125 4.40625 5.09895 4.40625 4.21875C4.40625 3.33855 5.1198 2.625 6 2.625C6.8802 2.625 7.59375 3.33855 7.59375 4.21875Z\" />\n <path d=\"M1.5 9C1.5 6.96377 2.30291 5.79798 3.14746 5.15137C3.56202 4.83404 3.9757 4.65002 4.28613 4.54492C4.44174 4.49225 4.57289 4.45885 4.66699 4.43848C4.71396 4.42831 4.75192 4.42158 4.7793 4.41699C4.79301 4.41469 4.80424 4.41234 4.8125 4.41113C4.81637 4.41057 4.81967 4.41051 4.82227 4.41016C4.82361 4.40997 4.82519 4.40931 4.82617 4.40918H4.82812L4.92188 5.15332C4.91878 5.15377 4.91158 5.15487 4.90332 5.15625C4.8868 5.15902 4.86011 5.16334 4.8252 5.1709C4.75525 5.18605 4.6519 5.21238 4.52637 5.25488C4.27438 5.34019 3.93785 5.49035 3.60254 5.74707C2.94718 6.24896 2.25 7.19277 2.25 9C2.25 9.20711 2.08211 9.375 1.875 9.375C1.66789 9.375 1.5 9.20711 1.5 9ZM7.5127 9C7.5127 7.09758 7.32324 6.08783 7.15039 5.56738C7.06453 5.30889 6.98595 5.1804 6.94434 5.125C6.92803 5.1033 6.91762 5.09324 6.91504 5.09082C6.91648 5.09202 6.92022 5.09529 6.92676 5.09961C6.93038 5.102 6.93521 5.10442 6.94043 5.10742C6.94302 5.10891 6.94624 5.11071 6.94922 5.1123C6.95072 5.1131 6.9525 5.11442 6.9541 5.11523L6.95703 5.11621L6.95801 5.11719L7.29199 4.44531L7.29297 4.44629C7.29386 4.44673 7.29499 4.4468 7.2959 4.44727C7.29775 4.44821 7.29983 4.44917 7.30176 4.4502C7.30557 4.45222 7.30938 4.45469 7.31348 4.45703C7.32177 4.46178 7.33053 4.46749 7.33984 4.47363C7.35849 4.48593 7.37956 4.50097 7.40137 4.51953C7.44494 4.55668 7.49313 4.60714 7.54395 4.6748C7.64536 4.80983 7.75747 5.0154 7.8623 5.33105C8.07087 5.95905 8.2627 7.0587 8.2627 9C8.2627 9.20711 8.0948 9.375 7.8877 9.375C7.68065 9.37492 7.5127 9.20706 7.5127 9Z\" />\n <path d=\"M2.04004 3.89014H4.71004V4.55014H2.04004V3.89014Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierAngle extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-distribute',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.125 5.64502C5.33211 5.64502 5.5 5.81291 5.5 6.02002C5.5 6.22713 5.33211 6.39502 5.125 6.39502H2.5C2.29289 6.39502 2.125 6.22713 2.125 6.02002C2.125 5.81291 2.29289 5.64502 2.5 5.64502H5.125Z\" />\n <path d=\"M2.125 6.02002C2.125 5.81313 1.95689 5.64502 1.75 5.64502C1.54311 5.64502 1.375 5.81313 1.375 6.02002C1.375 6.22691 1.54311 6.39502 1.75 6.39502C1.95689 6.39502 2.125 6.22691 2.125 6.02002ZM2.875 6.02002C2.875 6.64113 2.37111 7.14502 1.75 7.14502C1.12889 7.14502 0.625 6.64113 0.625 6.02002C0.625 5.39891 1.12889 4.89502 1.75 4.89502C2.37111 4.89502 2.875 5.39891 2.875 6.02002Z\" />\n <path d=\"M6.5 5.67285C6.5 5.60396 6.44389 5.54785 6.375 5.54785H5.625C5.55611 5.54785 5.5 5.60396 5.5 5.67285V6.42285C5.5 6.49174 5.55611 6.54785 5.625 6.54785H6.375C6.44389 6.54785 6.5 6.49174 6.5 6.42285V5.67285ZM7.25 6.42285C7.25 6.90596 6.85811 7.29785 6.375 7.29785H5.625C5.14189 7.29785 4.75 6.90596 4.75 6.42285V5.67285C4.75 5.18974 5.14189 4.79785 5.625 4.79785H6.375C6.85811 4.79785 7.25 5.18974 7.25 5.67285V6.42285Z\" />\n <path d=\"M3.125 9.25C3.125 9.18111 3.06889 9.125 3 9.125H2.25C2.18111 9.125 2.125 9.18111 2.125 9.25V10C2.125 10.0689 2.18111 10.125 2.25 10.125H3C3.06889 10.125 3.125 10.0689 3.125 10V9.25ZM3.875 10C3.875 10.4831 3.48311 10.875 3 10.875H2.25C1.76689 10.875 1.375 10.4831 1.375 10V9.25C1.375 8.76689 1.76689 8.375 2.25 8.375H3C3.48311 8.375 3.875 8.76689 3.875 9.25V10Z\" />\n <path d=\"M9.797 2C9.797 1.93111 9.74089 1.875 9.672 1.875H8.922C8.85285 1.875 8.797 1.93086 8.797 2V2.75C8.797 2.81889 8.8531 2.875 8.922 2.875H9.672C9.74089 2.875 9.797 2.81889 9.797 2.75V2ZM10.547 2.75C10.547 3.23311 10.1551 3.625 9.672 3.625H8.922C8.43889 3.625 8.047 3.23311 8.047 2.75V2C8.047 1.51714 8.43815 1.125 8.922 1.125H9.672C10.1551 1.125 10.547 1.51689 10.547 2V2.75Z\" />\n <path d=\"M9.33883 2.87576C9.54514 2.89263 9.69927 3.07377 9.68258 3.28005C9.56091 4.76814 8.50457 5.99034 7.09078 6.34255C6.88985 6.39261 6.6858 6.27003 6.6357 6.06912C6.58565 5.86818 6.70822 5.66414 6.90914 5.61404C8.01222 5.33926 8.83909 4.38526 8.93453 3.21951C8.9514 3.01316 9.1325 2.859 9.33883 2.87576Z\" />\n <path d=\"M9.5 5.60498C9.70711 5.60498 9.875 5.77287 9.875 5.97998C9.875 6.18709 9.70711 6.35498 9.5 6.35498H6.875C6.66789 6.35498 6.5 6.18709 6.5 5.97998C6.5 5.77287 6.66789 5.60498 6.875 5.60498H9.5Z\" />\n <path d=\"M10.625 5.97998C10.625 5.77309 10.4569 5.60498 10.25 5.60498C10.0431 5.60498 9.875 5.77309 9.875 5.97998C9.875 6.18687 10.0431 6.35498 10.25 6.35498C10.4569 6.35498 10.625 6.18687 10.625 5.97998ZM11.375 5.97998C11.375 6.60109 10.8711 7.10498 10.25 7.10498C9.62889 7.10498 9.125 6.60109 9.125 5.97998C9.125 5.35887 9.62889 4.85498 10.25 4.85498C10.8711 4.85498 11.375 5.35887 11.375 5.97998Z\" />\n <path d=\"M4.83132 5.65719C5.03226 5.60714 5.23631 5.72969 5.28639 5.93062C5.33644 6.13153 5.21382 6.33557 5.01296 6.3857C3.90988 6.66049 3.08301 7.61448 2.98757 8.78023C2.9707 8.98655 2.78956 9.14068 2.58327 9.12398C2.37696 9.10711 2.22283 8.92597 2.23952 8.71969C2.36119 7.23157 3.41749 6.00938 4.83132 5.65719Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierDistribute extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-length',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.84375 4.21875C6.84375 3.75276 6.46599 3.375 6 3.375C5.53401 3.375 5.15625 3.75276 5.15625 4.21875C5.15625 4.68474 5.53401 5.0625 6 5.0625C6.46599 5.0625 6.84375 4.68474 6.84375 4.21875ZM7.59375 4.21875C7.59375 5.09895 6.8802 5.8125 6 5.8125C5.1198 5.8125 4.40625 5.09895 4.40625 4.21875C4.40625 3.33855 5.1198 2.625 6 2.625C6.8802 2.625 7.59375 3.33855 7.59375 4.21875Z\" />\n <path d=\"M2.48438 4.21875C2.48438 4.76241 2.04366 5.20312 1.5 5.20312C0.956345 5.20312 0.515625 4.76241 0.515625 4.21875C0.515625 3.67509 0.956345 3.23438 1.5 3.23438C2.04366 3.23438 2.48438 3.67509 2.48438 4.21875Z\" />\n <path d=\"M10.4844 4.21875C10.4844 4.76241 10.0437 5.20312 9.5 5.20312C8.95634 5.20312 8.51562 4.76241 8.51562 4.21875C8.51562 3.67509 8.95634 3.23438 9.5 3.23438C10.0437 3.23438 10.4844 3.67509 10.4844 4.21875Z\" />\n <path d=\"M1.5 9C1.5 6.96377 2.30291 5.79798 3.14746 5.15137C3.56202 4.83404 3.9757 4.65002 4.28613 4.54492C4.44174 4.49225 4.57289 4.45885 4.66699 4.43848C4.71396 4.42831 4.75192 4.42158 4.7793 4.41699C4.79301 4.41469 4.80424 4.41234 4.8125 4.41113C4.81637 4.41057 4.81967 4.41051 4.82227 4.41016L4.82617 4.40918H4.82812L4.92188 5.15332C4.91878 5.15377 4.91158 5.15487 4.90332 5.15625C4.8868 5.15902 4.86011 5.16334 4.8252 5.1709C4.75525 5.18605 4.6519 5.21238 4.52637 5.25488C4.27438 5.34019 3.93785 5.49035 3.60254 5.74707C2.94718 6.24896 2.25 7.19277 2.25 9C2.25 9.20711 2.08211 9.375 1.875 9.375C1.66789 9.375 1.5 9.20711 1.5 9ZM9.75 9C9.75 7.19277 9.05282 6.24896 8.39746 5.74707C8.06215 5.49035 7.72562 5.34019 7.47363 5.25488C7.3481 5.21238 7.24475 5.18605 7.1748 5.1709C7.13989 5.16334 7.1132 5.15902 7.09668 5.15625C7.08842 5.15487 7.0822 5.15377 7.0791 5.15332L7.17188 4.40918H7.17383L7.17773 4.41016C7.18033 4.41051 7.18363 4.41057 7.1875 4.41113C7.19576 4.41234 7.20699 4.41469 7.2207 4.41699C7.24808 4.42158 7.28604 4.42831 7.33301 4.43848C7.42711 4.45885 7.55826 4.49225 7.71387 4.54492C8.0243 4.65002 8.43798 4.83404 8.85254 5.15137C9.69709 5.79798 10.5 6.96377 10.5 9C10.5 9.20711 10.3321 9.375 10.125 9.375C9.91789 9.375 9.75 9.20711 9.75 9Z\" />\n <path d=\"M1.96997 3.83984H4.59997V4.49984H1.96997V3.83984Z\" />\n <path d=\"M6.96997 3.83984H8.59997V4.49984H6.96997V3.83984Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierLength extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-bezier-mirror',\n styles: `\n :host {\n display: block;\n width: var(--ease-icon-size, 12px);\n height: var(--ease-icon-size, 12px);\n fill: currentColor;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.84375 4.21875C6.84375 3.75276 6.46599 3.375 6 3.375C5.53401 3.375 5.15625 3.75276 5.15625 4.21875C5.15625 4.68474 5.53401 5.0625 6 5.0625C6.46599 5.0625 6.84375 4.68474 6.84375 4.21875ZM7.59375 4.21875C7.59375 5.09895 6.8802 5.8125 6 5.8125C5.1198 5.8125 4.40625 5.09895 4.40625 4.21875C4.40625 3.33855 5.1198 2.625 6 2.625C6.8802 2.625 7.59375 3.33855 7.59375 4.21875Z\" />\n <path d=\"M2.48438 4.21875C2.48438 4.76241 2.04366 5.20312 1.5 5.20312C0.956345 5.20312 0.515625 4.76241 0.515625 4.21875C0.515625 3.67509 0.956345 3.23438 1.5 3.23438C2.04366 3.23438 2.48438 3.67509 2.48438 4.21875Z\" />\n <path d=\"M11.4844 4.21875C11.4844 4.76241 11.0437 5.20312 10.5 5.20312C9.95634 5.20312 9.51562 4.76241 9.51562 4.21875C9.51562 3.67509 9.95634 3.23438 10.5 3.23438C11.0437 3.23438 11.4844 3.67509 11.4844 4.21875Z\" />\n <path d=\"M1.5 9C1.5 6.96377 2.30291 5.79798 3.14746 5.15137C3.56202 4.83404 3.9757 4.65002 4.28613 4.54492C4.44174 4.49225 4.57289 4.45885 4.66699 4.43848C4.71396 4.42831 4.75192 4.42158 4.7793 4.41699C4.79301 4.41469 4.80424 4.41234 4.8125 4.41113C4.81637 4.41057 4.81967 4.41051 4.82227 4.41016C4.82361 4.40997 4.82519 4.40931 4.82617 4.40918H4.82812L4.92188 5.15332C4.91878 5.15377 4.91158 5.15487 4.90332 5.15625C4.8868 5.15902 4.86011 5.16334 4.8252 5.1709C4.75525 5.18605 4.6519 5.21238 4.52637 5.25488C4.27438 5.34019 3.93785 5.49035 3.60254 5.74707C2.94718 6.24896 2.25 7.19277 2.25 9C2.25 9.20711 2.08211 9.375 1.875 9.375C1.66789 9.375 1.5 9.20711 1.5 9ZM9.75 9C9.75 7.19277 9.05282 6.24896 8.39746 5.74707C8.06215 5.49035 7.72562 5.34019 7.47363 5.25488C7.3481 5.21238 7.24475 5.18605 7.1748 5.1709C7.13989 5.16334 7.1132 5.15902 7.09668 5.15625C7.08842 5.15487 7.0822 5.15377 7.0791 5.15332L7.17188 4.40918H7.17383C7.17481 4.40931 7.17639 4.40997 7.17773 4.41016C7.18033 4.41051 7.18363 4.41057 7.1875 4.41113C7.19576 4.41234 7.20699 4.41469 7.2207 4.41699C7.24808 4.42158 7.28604 4.42831 7.33301 4.43848C7.42711 4.45885 7.55826 4.49225 7.71387 4.54492C8.0243 4.65002 8.43798 4.83404 8.85254 5.15137C9.69709 5.79798 10.5 6.96377 10.5 9C10.5 9.20711 10.3321 9.375 10.125 9.375C9.91789 9.375 9.75 9.20711 9.75 9Z\" />\n <path d=\"M1.96997 3.83984H4.59997V4.49984H1.96997V3.83984Z\" />\n <path d=\"M6.96997 3.83984H9.59997V4.49984H6.96997V3.83984Z\" />\n </svg>\n `;\n }\n})\nexport class IconBezierMirror extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-check',\n styles: `\n :host {\n display: block;\n width: 12px;\n height: 12px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3 6.5L5.33333 9L10 4\" path-length=\"100\" />\n </svg>\n `;\n }\n})\nexport class IconCheck extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-circle-arrow-left',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14.6667 6.66667C14.6667 6.66667 13.33 4.84548 12.2441 3.75883C11.1582 2.67218 9.6576 2 8 2C4.68629 2 2 4.68629 2 8C2 11.3137 4.68629 14 8 14C10.7354 14 13.0433 12.1695 13.7655 9.66667M14.6667 6.66667V2.66667M14.6667 6.66667H10.6667\" />\n </svg>\n `;\n }\n})\nexport class IconCircleArrowLeft extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-circle-arrow-right',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.33333 6.66667C1.33333 6.66667 2.66999 4.84548 3.75589 3.75883C4.84179 2.67218 6.3424 2 8 2C11.3137 2 14 4.68629 14 8C14 11.3137 11.3137 14 8 14C5.2646 14 2.95674 12.1695 2.23451 9.66667M1.33333 6.66667V2.66667M1.33333 6.66667H5.33333\" />\n </svg>\n `;\n }\n})\nexport class IconCircleArrowRight extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-code',\n styles: `\n :host {\n display: block;\n width: 12px;\n height: 12px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 9L11 6L8 3M4 3L1 6L4 9\" />\n </svg>\n `;\n }\n})\nexport class IconCode extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-dots',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8.00008 8.66655C8.36827 8.66655 8.66675 8.36808 8.66675 7.99989C8.66675 7.6317 8.36827 7.33322 8.00008 7.33322C7.63189 7.33322 7.33341 7.6317 7.33341 7.99989C7.33341 8.36808 7.63189 8.66655 8.00008 8.66655Z\" />\n <path d=\"M12.6667 8.66655C13.0349 8.66655 13.3334 8.36808 13.3334 7.99989C13.3334 7.6317 13.0349 7.33322 12.6667 7.33322C12.2986 7.33322 12.0001 7.6317 12.0001 7.99989C12.0001 8.36808 12.2986 8.66655 12.6667 8.66655Z\" />\n <path d=\"M3.33341 8.66655C3.7016 8.66655 4.00008 8.36808 4.00008 7.99989C4.00008 7.6317 3.7016 7.33322 3.33341 7.33322C2.96522 7.33322 2.66675 7.6317 2.66675 7.99989C2.66675 8.36808 2.96522 8.66655 3.33341 8.66655Z\" />\n </svg>\n `;\n }\n})\nexport class IconDots extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-mention',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10.4 5.59963V8.59962C10.4 9.07701 10.5896 9.53485 10.9272 9.87242C11.2648 10.21 11.7226 10.3996 12.2 10.3996C12.6774 10.3996 13.1352 10.21 13.4728 9.87242C13.8104 9.53485 14 9.07701 14 8.59962V7.99962C13.9999 6.64544 13.5417 5.33111 12.7 4.27035C11.8582 3.20958 10.6823 2.46476 9.36359 2.15701C8.04484 1.84925 6.66076 1.99665 5.43641 2.57525C4.21206 3.15384 3.21944 4.1296 2.61996 5.34386C2.02048 6.55812 1.84939 7.93947 2.13451 9.26329C2.41963 10.5871 3.14419 11.7756 4.19038 12.6354C5.23657 13.4952 6.54286 13.9758 7.89684 13.9991C9.25083 14.0224 10.5729 13.587 11.648 12.7636M10.4 7.99962C10.4 9.32511 9.32549 10.3996 8 10.3996C6.67452 10.3996 5.6 9.32511 5.6 7.99962C5.6 6.67414 6.67452 5.59963 8 5.59963C9.32549 5.59963 10.4 6.67414 10.4 7.99962Z\" />\n </svg>\n `;\n }\n})\nexport class IconMention extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-minus',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 7.99995H11\" />\n </svg>\n `;\n }\n})\nexport class IconMinus extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-plus',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8.00018 4.28591C8.00018 4.28591 8.00018 8.42263 8.00018 11.714M4.28613 7.99995H11.7142\" />\n </svg>\n `;\n }\n})\nexport class IconPlus extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\n\n@Component({\n tag: 'ease-icon-settings',\n styles: `\n :host {\n display: block;\n width: 16px;\n height: 16px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n `,\n template() {\n return html`\n <svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 5.33319L10 5.33319M10 5.33319C10 6.43776 10.8954 7.33319 12 7.33319C13.1046 7.33319 14 6.43776 14 5.33319C14 4.22862 13.1046 3.33319 12 3.33319C10.8954 3.33319 10 4.22862 10 5.33319ZM6 10.6665L14 10.6665M6 10.6665C6 11.7711 5.10457 12.6665 4 12.6665C2.89543 12.6665 2 11.7711 2 10.6665C2 9.56195 2.89543 8.66652 4 8.66652C5.10457 8.66652 6 9.56195 6 10.6665Z\" />\n </svg>\n `;\n }\n})\nexport class Settings extends HTMLElement {\n declare requestRender: () => void;\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\n\ntype LogoLoaderState = 'idle' | 'intro' | 'loop' | 'exit';\n\nexport type LogoIntroVariant = 'wave' | 'particle';\n\ninterface DotData {\n id: string;\n cx: number;\n cy: number;\n}\n\nconst CENTER = { x: 74, y: 74 };\n\nconst DOTS_DATA: DotData[] = [\n { id: 'dot-1', cx: 7.22725, cy: 73.99975 },\n { id: 'dot-2', cx: 8.0, cy: 107.63685 },\n { id: 'dot-3', cx: 41.36365, cy: 7.72734 },\n { id: 'dot-4', cx: 40.36105, cy: 40.36375 },\n { id: 'dot-5', cx: 40.36105, cy: 107.63625 },\n { id: 'dot-6', cx: 41.36365, cy: 140.77285 },\n { id: 'dot-7', cx: 73.99995, cy: 7.22725 },\n { id: 'dot-8', cx: 73.99995, cy: 140.77325 },\n { id: 'dot-9', cx: 108.13785, cy: 7.72734 },\n { id: 'dot-10', cx: 107.88425, cy: 73.99975 },\n { id: 'dot-11', cx: 108.13785, cy: 140.77285 },\n { id: 'dot-12', cx: 141.27285, cy: 40.86385 },\n { id: 'dot-13', cx: 140.77225, cy: 73.99975 },\n { id: 'dot-14', cx: 141.27285, cy: 107.63685 },\n { id: 'dot-15', cx: 40.36165, cy: 73.99925 },\n { id: 'dot-16', cx: 74.00125, cy: 40.36345 },\n { id: 'dot-17', cx: 74.00125, cy: 73.99925 },\n { id: 'dot-18', cx: 74.00125, cy: 107.63585 },\n { id: 'dot-19', cx: 107.63485, cy: 40.36345 },\n { id: 'dot-20', cx: 107.63485, cy: 107.63585 },\n { id: 'dot-21', cx: 141.77, cy: 8.23 },\n { id: 'dot-22', cx: 141.77, cy: 140.77 },\n { id: 'dot-23', cx: 7.73019, cy: 140.77 },\n { id: 'dot-24', cx: 7.72018, cy: 8.22 },\n { id: 'dot-25', cx: 7.73518, cy: 40.865 }\n];\n\nconst INNER_DOT_IDS = ['dot-19', 'dot-20', 'dot-18', 'dot-15', 'dot-17', 'dot-16'];\n\nconst OUTER_DOT_IDS = DOTS_DATA.map((d) => d.id).filter((id) => !INNER_DOT_IDS.includes(id));\n\nconst forceReflow = (el: Element): void => {\n void window.getComputedStyle(el).opacity;\n};\n\nconst getAngle = (dot: DotData): number => Math.atan2(dot.cy - CENTER.y, dot.cx - CENTER.x);\n\nconst sortByAngle = (ids: string[]): DotData[] =>\n ids\n .map((id) => DOTS_DATA.find((d) => d.id === id))\n .filter((dot): dot is DotData => dot != null)\n .sort((a, b) => getAngle(a) - getAngle(b));\n\nconst LOOP_DURATION = 1500;\nconst ROTATION_DURATION = 600;\n\n@Component({\n tag: 'ease-logo-loader',\n styles: `\n :host {\n display: inline-block;\n --ease-out: cubic-bezier(0.22, 0.61, 0.36, 1);\n --ease-in-out: cubic-bezier(0.45, 0, 0.55, 1);\n --ease-overshoot: cubic-bezier(0.34, 1.56, 0.64, 1);\n \n --dot-dark: var(--color-gray-0, oklab(98.81% 0 0));\n --dot-medium: var(--color-gray-600, oklab(65.21% -0.0019 -0.0144));\n --dot-light: var(--color-gray-700, oklab(37.92% -0.0006 -0.0179));\n --dot-accent: var(--color-blue-600, oklab(76.85% 0.0462 -0.1115));\n }\n\n .logo-loader {\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--logo-loader-size, 36px);\n height: var(--logo-loader-size, 36px);\n }\n\n .logo-loader__svg {\n width: 100%;\n height: 100%;\n display: block;\n transform-origin: center;\n overflow: visible;\n }\n\n .logo-loader__svg rect {\n transform-box: fill-box;\n transform-origin: center;\n transition:\n transform 380ms var(--ease-out),\n fill 320ms ease,\n opacity 320ms ease;\n }\n\n /* State: intro - dots are animating in */\n .logo-loader[data-state='intro'] .logo-loader__svg rect {\n opacity: 0;\n transform: scale(0);\n }\n\n /* Outer dots loading animation */\n @keyframes loading-outer {\n 0%, 100% {\n transform: scale(var(--base-scale, 1));\n fill: var(--dot-light);\n opacity: 0.4;\n }\n 15% {\n transform: scale(calc(var(--base-scale, 1) * 1.35));\n fill: var(--dot-dark);\n opacity: 1;\n }\n 35% {\n transform: scale(var(--base-scale, 1));\n fill: var(--dot-medium);\n opacity: 0.8;\n }\n }\n\n /* Inner dots loading animation */\n @keyframes loading-inner {\n 0%, 100% {\n transform: scale(var(--base-scale, 0.6));\n opacity: 0.7;\n fill: var(--dot-medium);\n }\n 50% {\n transform: scale(calc(var(--base-scale, 0.6) * 1.9));\n opacity: 0.1;\n fill: var(--dot-light);\n }\n }\n\n .dot-loading {\n animation-name: loading-outer;\n animation-duration: 600ms;\n animation-timing-function: cubic-bezier(0.3, 0.6, 0.4, 1);\n animation-iteration-count: infinite;\n animation-fill-mode: both;\n animation-delay: var(--delay, 0ms);\n }\n\n .dot-loading-inner {\n animation-name: loading-inner;\n animation-duration: 1500ms;\n animation-timing-function: ease-in-out;\n animation-iteration-count: infinite;\n animation-fill-mode: both;\n animation-delay: var(--delay, 0ms);\n }\n\n /* Exit animation class */\n .restoring {\n transition:\n transform 450ms cubic-bezier(0.25, 0, 0.5, 1),\n fill 350ms ease,\n opacity 350ms ease;\n }\n\n /* Particle intro animation */\n @keyframes particle-bounce {\n 0% { transform: scale(1); }\n 40% { transform: scale(1.25); }\n 65% { transform: scale(0.95); }\n 85% { transform: scale(1.05); }\n 100% { transform: scale(1); }\n }\n\n .particle-bounce {\n animation: particle-bounce 400ms var(--ease-overshoot) both;\n }\n\n /* Shockwave ring animation */\n @keyframes shockwave-expansion {\n 0% {\n transform: scale(1);\n opacity: 1;\n stroke-width: 1.5px;\n }\n 100% {\n transform: scale(4);\n opacity: 0;\n stroke-width: 0.5px;\n }\n }\n\n .shockwave-ring {\n fill: none;\n stroke: var(--dot-dark);\n transform-box: fill-box;\n transform-origin: center;\n animation: shockwave-expansion 900ms cubic-bezier(0.165, 0.84, 0.44, 1) both;\n }\n\n /* Pulse wave for intro */\n @keyframes pulse-wave {\n 0% {\n transform: scale(1);\n filter: brightness(1);\n }\n 50% {\n transform: scale(1.2);\n filter: brightness(1.6);\n fill: var(--dot-light);\n }\n 100% {\n transform: scale(1);\n filter: brightness(1);\n }\n }\n\n .dot-pulse-wave {\n animation: pulse-wave var(--pulse-duration, 500ms) var(--pulse-delay, 0ms) cubic-bezier(0.455, 0.03, 0.515, 0.955);\n }\n\n @media (prefers-reduced-motion: reduce) {\n .logo-loader__svg {\n transition: none;\n transform: scale(1);\n }\n .logo-loader__svg rect {\n animation: none !important;\n transition: none;\n transform: scale(1);\n opacity: 1;\n }\n }\n `,\n template(host: LogoLoader) {\n const size = host.size ?? 36;\n const state = host.state;\n const ariaLabel = host.ariaLabel;\n const ariaLabelTrimmed = ariaLabel?.trim() ?? '';\n\n return html`\n <div\n class=\"logo-loader\"\n data-state=${state}\n style=${`--logo-loader-size:${size}px;`}\n >\n <svg\n viewBox=\"0 0 148 148\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"logo-loader__svg\"\n role=${ariaLabelTrimmed ? 'img' : null}\n aria-label=${ariaLabelTrimmed || null}\n aria-hidden=${ariaLabelTrimmed ? null : 'true'}\n focusable=${ariaLabelTrimmed ? null : 'false'}\n >\n <g class=\"shockwave-container\"></g>\n \n <rect id=\"dot-1\" x=\"0.5\" y=\"67.2725\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-2\" x=\"3.5\" y=\"103.152\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-3\" x=\"36.8788\" y=\"3.24249\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-4\" x=\"33.6338\" y=\"33.6365\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-5\" x=\"33.6338\" y=\"100.909\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-6\" x=\"36.8788\" y=\"136.288\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-7\" x=\"67.2727\" y=\"0.5\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-8\" x=\"67.2727\" y=\"134.046\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-9\" x=\"103.653\" y=\"3.24249\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-10\" x=\"101.407\" y=\"67.2725\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-medium)\" />\n <rect id=\"dot-11\" x=\"103.653\" y=\"136.288\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-12\" x=\"136.788\" y=\"36.379\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-13\" x=\"134.045\" y=\"67.2725\" width=\"13.4545\" height=\"13.4545\" rx=\"6.72727\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-14\" x=\"136.788\" y=\"103.152\" width=\"8.9697\" height=\"8.9697\" rx=\"4.48485\" fill=\"var(--dot-light)\" />\n \n <rect id=\"dot-15\" x=\"26.9071\" y=\"60.5447\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-16\" x=\"60.5467\" y=\"26.9089\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-17\" x=\"60.5467\" y=\"60.5447\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-18\" x=\"60.5467\" y=\"94.1813\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-19\" x=\"94.1803\" y=\"26.9089\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n <rect id=\"dot-20\" x=\"94.1803\" y=\"94.1813\" width=\"26.9091\" height=\"26.9091\" rx=\"13.4545\" fill=\"var(--dot-dark)\" />\n \n <rect id=\"dot-21\" x=\"139.53\" y=\"5.98999\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-22\" x=\"139.53\" y=\"138.53\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-23\" x=\"5.49019\" y=\"138.53\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-24\" x=\"5.48018\" y=\"5.97998\" width=\"4.48\" height=\"4.48\" rx=\"2.24\" fill=\"var(--dot-light)\" />\n <rect id=\"dot-25\" x=\"4.37018\" y=\"37.5\" width=\"6.73\" height=\"6.73\" rx=\"3.365\" fill=\"var(--dot-light)\" />\n </svg>\n </div>\n `;\n }\n})\nexport class LogoLoader extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean, LogoLoader>({\n type: Boolean,\n attribute: 'loading',\n defaultValue: false,\n onChange(next) {\n (this as LogoLoader).handleLoadingChange(next);\n }\n })\n accessor loading = false;\n\n @Prop<LogoIntroVariant, LogoLoader>({\n type: 'string',\n attribute: 'intro',\n defaultValue: 'wave'\n })\n accessor intro: LogoIntroVariant = 'wave';\n\n @Prop<number | null, LogoLoader>({\n type: Number,\n attribute: 'size',\n defaultValue: 36\n })\n accessor size: number | null = 36;\n\n @Prop<string | null, LogoLoader>({\n type: 'string',\n attribute: 'aria-label',\n defaultValue: null\n })\n accessor ariaLabel: string | null = null;\n\n #state: LogoLoaderState = 'intro';\n #loopStartTime = 0;\n #animationTimers: number[] = [];\n #introCompleted = false;\n\n get state(): LogoLoaderState {\n return this.#state;\n }\n\n set state(value: LogoLoaderState) {\n if (this.#state === value) {\n return;\n }\n this.#state = value;\n if (typeof this.requestRender === 'function') {\n this.requestRender();\n }\n }\n\n connectedCallback(): void {\n // Wait for first render before starting intro animation\n // The Component decorator renders after connectedCallback via requestAnimationFrame\n requestAnimationFrame(() => {\n // Double RAF to ensure render is complete\n requestAnimationFrame(() => {\n if (this.loading) {\n this.#runIntro(() => {\n this.#introCompleted = true;\n this.#startLoopAnimation();\n });\n } else {\n this.#runIntro(() => {\n this.#introCompleted = true;\n this.state = 'idle';\n });\n }\n });\n });\n }\n\n disconnectedCallback(): void {\n this.#clearTimers();\n }\n\n #clearTimers(): void {\n for (const id of this.#animationTimers) {\n window.clearTimeout(id);\n }\n this.#animationTimers = [];\n }\n\n #setTimeout(fn: () => void, delay: number): number {\n const id = window.setTimeout(fn, delay);\n this.#animationTimers.push(id);\n return id;\n }\n\n #getDot(id: string): SVGRectElement | null {\n const svg = this.shadowRoot?.querySelector('.logo-loader__svg');\n return svg?.querySelector(`#${id}`) as SVGRectElement | null;\n }\n\n #getShockwaveContainer(): SVGGElement | null {\n return this.shadowRoot?.querySelector('.shockwave-container') as SVGGElement | null;\n }\n\n #resetDotsState(instant = false, keepOpacity = false): void {\n const container = this.#getShockwaveContainer();\n if (container) {\n container.innerHTML = '';\n }\n\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (!el) {\n continue;\n }\n\n if (instant) {\n el.style.transition = 'none';\n } else {\n el.style.transition = '';\n }\n\n // Remove all animation classes\n el.classList.remove('dot-loading', 'dot-loading-inner', 'restoring', 'dot-pulse-wave', 'particle-bounce');\n\n el.style.removeProperty('--base-scale');\n el.style.removeProperty('--delay');\n el.style.removeProperty('--pulse-delay');\n el.style.removeProperty('--pulse-duration');\n\n // Reset inline styles\n el.style.transform = 'scale(1)';\n\n if (!keepOpacity) {\n el.style.opacity = instant ? '1' : '';\n }\n el.style.removeProperty('fill');\n el.style.removeProperty('filter');\n\n if (instant) {\n forceReflow(el);\n el.style.removeProperty('transition');\n }\n }\n }\n\n /** Ensure all dots are visible */\n #ensureVisibility(): void {\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (el && (el.style.opacity === '0' || el.style.opacity === '')) {\n el.style.transition = 'opacity 200ms ease-out';\n el.style.opacity = '1';\n }\n }\n }\n\n /** Run wave intro animation */\n #runWaveIntro(onComplete?: () => void): void {\n this.state = 'intro';\n\n // Prepare dots hidden\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (!el) {\n continue;\n }\n el.style.transition = 'none';\n el.style.opacity = '0';\n el.style.transform = 'scale(0)';\n forceReflow(el);\n }\n\n const innerDotIds = new Set(INNER_DOT_IDS);\n const innerDots = DOTS_DATA.filter((d) => innerDotIds.has(d.id));\n const outerDots = DOTS_DATA.filter((d) => !innerDotIds.has(d.id));\n\n // WAVE 1: Inner dots appear at half scale\n const orderedInner = sortByAngle(innerDots.map((d) => d.id));\n orderedInner.forEach((dot, index) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n el.style.fill = 'var(--dot-medium)';\n forceReflow(el);\n el.style.removeProperty('transition');\n\n const delay = index * 75;\n this.#setTimeout(() => {\n el.style.transition = 'transform 500ms cubic-bezier(0.175, 0.885, 0.32, 1.275), opacity 400ms ease-out';\n el.style.opacity = '1';\n el.style.transform = 'scale(0.5)';\n }, delay);\n });\n\n // WAVE 2: Inner to full scale + outer appear\n this.#setTimeout(() => {\n // Inner dots to full scale\n orderedInner.forEach((dot, index) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n const delay = index * 65;\n this.#setTimeout(() => {\n el.style.transition = 'transform 600ms cubic-bezier(0.34, 1.56, 0.64, 1), fill 450ms ease-out';\n el.style.transform = 'scale(1)';\n el.style.removeProperty('fill');\n }, delay);\n });\n\n // Outer dots appear\n const orderedOuter = sortByAngle(outerDots.map((d) => d.id));\n orderedOuter.forEach((dot, index) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n el.style.removeProperty('transition');\n const delay = 150 + index * 40;\n this.#setTimeout(() => {\n el.style.transition = 'transform 650ms cubic-bezier(0.34, 1.56, 0.64, 1), opacity 550ms ease-out';\n el.style.opacity = '1';\n el.style.transform = 'scale(1)';\n }, delay);\n });\n }, 650);\n\n // Completion\n this.#setTimeout(() => {\n onComplete?.();\n }, 1400);\n }\n\n /** Run particle intro animation */\n #runParticleIntro(onComplete?: () => void): void {\n this.state = 'intro';\n\n // Prepare dots hidden\n for (const dot of DOTS_DATA) {\n const el = this.#getDot(dot.id);\n if (!el) {\n continue;\n }\n el.style.transition = 'none';\n el.style.opacity = '0';\n el.style.transform = 'scale(0)';\n forceReflow(el);\n }\n\n const innerDotIds = new Set(INNER_DOT_IDS);\n\n // Create particle animation data\n const particles = DOTS_DATA.map((dot, index) => {\n const finalAngle = getAngle(dot);\n const startDistance = 110 + Math.random() * 80;\n const angleVariation = (Math.random() - 0.5) * Math.PI * 0.35;\n const startAngle = finalAngle + angleVariation;\n const startX = Math.cos(startAngle) * startDistance;\n const startY = Math.sin(startAngle) * startDistance;\n\n const curvature = Math.random() * 0.4 + 0.3;\n const controlAngle = startAngle + (Math.random() - 0.5) * Math.PI * curvature;\n const controlDistance = startDistance * 0.6;\n const controlX = Math.cos(controlAngle) * controlDistance;\n const controlY = Math.sin(controlAngle) * controlDistance;\n\n const group = Math.floor(index / 5);\n const groupDelay = group * 110;\n const withinGroupDelay = (index % 5) * 40;\n const delay = groupDelay + withinGroupDelay + Math.random() * 40;\n const duration = 600 + Math.random() * 300;\n\n return {\n ...dot,\n startX,\n startY,\n controlX,\n controlY,\n delay,\n duration,\n impactTime: delay + duration,\n rotationSpeed: 720 + Math.random() * 360,\n isInner: innerDotIds.has(dot.id)\n };\n });\n\n particles.sort((a, b) => a.delay - b.delay);\n\n // First 3 inner dots for shockwaves\n const shockwaveParticles = particles\n .filter((p) => p.isInner)\n .sort((a, b) => a.impactTime - b.impactTime)\n .slice(0, 3);\n const shockwaveSet = new Set(shockwaveParticles.map((p) => p.id));\n\n // Animate each particle\n for (const particle of particles) {\n const el = this.#getDot(particle.id);\n if (!el) {\n continue;\n }\n\n el.style.transform = `translate(${particle.startX}px, ${particle.startY}px) scale(0.05)`;\n\n this.#setTimeout(() => {\n el.style.opacity = '1';\n\n const steps = 30;\n let step = 0;\n\n const animateStep = (): void => {\n step++;\n const progress = step / steps;\n const t = progress;\n const mt = 1 - t;\n\n const x = mt * mt * particle.startX + 2 * mt * t * particle.controlX + t * t * 0;\n const y = mt * mt * particle.startY + 2 * mt * t * particle.controlY + t * t * 0;\n\n const easeOut = 1 - (1 - progress) ** 4;\n const scale = 0.05 + easeOut * 0.95;\n const rotation = progress * particle.rotationSpeed;\n\n el.style.transition = 'transform 33ms linear';\n el.style.transform = `translate(${x}px, ${y}px) scale(${scale}) rotate(${rotation}deg)`;\n\n if (step < steps) {\n requestAnimationFrame(animateStep);\n } else {\n // Impact - clear all transforms\n const bounceDuration = 250;\n el.style.transition = `transform ${bounceDuration}ms cubic-bezier(0.34, 1.56, 0.64, 1)`;\n el.style.transform = 'scale(1)';\n\n if (shockwaveSet.has(particle.id)) {\n this.#triggerShockwave(particle);\n }\n\n this.#setTimeout(() => {\n el.classList.add('particle-bounce');\n this.#setTimeout(() => {\n el.classList.remove('particle-bounce');\n }, 400);\n }, bounceDuration);\n }\n };\n\n requestAnimationFrame(animateStep);\n }, particle.delay);\n }\n\n // Early completion\n const earlyRevealTime = Math.max(...particles.map((p) => p.delay)) * 0.6;\n this.#setTimeout(() => {\n onComplete?.();\n }, earlyRevealTime);\n\n // Final cleanup\n const maxTime = Math.max(...particles.map((p) => p.impactTime + 500));\n this.#setTimeout(() => {\n this.#resetDotsState(false, true);\n }, maxTime);\n }\n\n #triggerShockwave(dot: DotData): void {\n const container = this.#getShockwaveContainer();\n if (!container) {\n return;\n }\n\n const ring = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n ring.setAttribute('cx', String(dot.cx));\n ring.setAttribute('cy', String(dot.cy));\n ring.setAttribute('r', '13.45');\n ring.classList.add('shockwave-ring');\n\n container.appendChild(ring);\n\n this.#setTimeout(() => {\n ring.remove();\n }, 900);\n }\n\n #runIntro(onComplete?: () => void): void {\n if (this.intro === 'particle') {\n this.#runParticleIntro(onComplete);\n } else {\n this.#runWaveIntro(onComplete);\n }\n }\n\n #startLoopAnimation(): void {\n this.#loopStartTime = performance.now();\n this.#ensureVisibility();\n\n // Inner dots - scale down with transition, then add animation class\n const orderedInnerDots = sortByAngle(INNER_DOT_IDS);\n let seedDelay = 0;\n\n orderedInnerDots.forEach((dot) => {\n this.#setTimeout(() => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n const targetScale = 0.6;\n\n el.style.transition = 'all 450ms cubic-bezier(0.4, 0, 0.2, 1)';\n el.style.transform = `scale(${targetScale})`;\n el.style.fill = 'var(--dot-medium)';\n el.style.opacity = '0.7';\n\n el.style.setProperty('--base-scale', `${targetScale}`);\n\n const angle = getAngle(dot);\n const normalizedAngle = (angle + Math.PI) / (2 * Math.PI);\n const animationDelayMs = normalizedAngle * LOOP_DURATION;\n el.style.setProperty('--delay', `${animationDelayMs}ms`);\n\n this.#setTimeout(() => {\n el.classList.add('dot-loading-inner');\n }, 100);\n }, seedDelay);\n\n seedDelay += 60;\n });\n\n const orderedOuterDots = sortByAngle(OUTER_DOT_IDS);\n this.#setTimeout(() => {\n orderedOuterDots.forEach((dot) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n el.style.transition = 'all 350ms ease-out';\n\n const baseScale = 1.2;\n el.style.setProperty('--base-scale', `${baseScale}`);\n\n const angle = getAngle(dot);\n const normalizedAngle = (angle + Math.PI) / (2 * Math.PI);\n const animationDelayMs = normalizedAngle * ROTATION_DURATION;\n el.style.setProperty('--delay', `${animationDelayMs}ms`);\n\n this.#setTimeout(() => {\n el.classList.add('dot-loading');\n }, 50);\n });\n\n this.state = 'loop';\n }, seedDelay + 100);\n }\n\n #endLoopAnimation(): void {\n const now = performance.now();\n const elapsed = Math.max(0, now - this.#loopStartTime);\n\n const timeInCycle = elapsed % LOOP_DURATION;\n const timeLeft = LOOP_DURATION - timeInCycle + 50;\n\n this.state = 'exit';\n\n this.#setTimeout(() => {\n const orderedAllDots = sortByAngle(DOTS_DATA.map((d) => d.id));\n\n orderedAllDots.forEach((dot, i) => {\n const el = this.#getDot(dot.id);\n if (!el) {\n return;\n }\n\n const delay = i * 18;\n\n this.#setTimeout(() => {\n el.classList.remove('dot-loading', 'dot-loading-inner');\n el.style.removeProperty('--delay');\n el.style.removeProperty('--base-scale');\n\n el.classList.add('restoring');\n el.style.transform = 'scale(1)';\n el.style.opacity = '1';\n el.style.removeProperty('fill');\n\n this.#setTimeout(() => {\n el.classList.remove('restoring');\n }, 500);\n }, delay);\n });\n\n this.#setTimeout(\n () => {\n this.state = 'idle';\n },\n orderedAllDots.length * 18 + 500\n );\n }, timeLeft);\n }\n\n handleLoadingChange(next: boolean): void {\n if (!this.#introCompleted) {\n return;\n }\n\n this.#clearTimers();\n\n if (next) {\n if (this.state === 'idle' || this.state === 'exit') {\n this.#resetDotsState(true, true);\n this.#startLoopAnimation();\n }\n } else {\n if (this.state === 'loop') {\n this.#endLoopAnimation();\n } else if (this.state !== 'intro' && this.state !== 'exit') {\n this.state = 'idle';\n }\n }\n }\n\n playIntro(variant?: LogoIntroVariant): void {\n this.#clearTimers();\n this.#resetDotsState(true);\n\n const originalIntro = this.intro;\n if (variant) {\n this.intro = variant;\n }\n\n this.#runIntro(() => {\n this.#introCompleted = true;\n if (this.loading) {\n this.#startLoopAnimation();\n } else {\n this.state = 'idle';\n }\n });\n\n if (variant) {\n this.intro = originalIntro;\n }\n }\n}\n","import type { MonitorFpsDetail } from './fps';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Watch } from '~/decorators/Watch';\nimport { styleObject } from '~/utils/template-helpers';\nimport './fps';\n\ninterface LayoutShift extends PerformanceEntry {\n value: number;\n hadRecentInput: boolean;\n}\n\ninterface PerformanceEventTiming extends PerformanceEntry {\n duration: number;\n interactionId?: number;\n}\n\ninterface PerformanceLongTaskTiming extends PerformanceEntry {\n duration: number;\n}\n\ntype CoreWebVitals = {\n LCP: number | null;\n INP: number | null;\n CLS: number;\n FCP: number | null;\n TBT: number;\n};\n\ntype NavigationMetrics = {\n ttfb: number | null;\n domInteractive: number | null;\n loadTime: number | null;\n};\n\ntype ResourceSummary = {\n js: { count: number; size: number };\n css: { count: number; size: number };\n img: { count: number; size: number };\n other: { count: number; size: number };\n totalSize: number;\n};\n\ntype MemoryUsage = {\n jsHeapSizeLimit: number;\n totalJSHeapSize: number;\n usedJSHeapSize: number;\n} | null;\n\ninterface PerformanceMetrics {\n coreWebVitals: CoreWebVitals;\n navigation: NavigationMetrics;\n resources: ResourceSummary;\n memory: MemoryUsage;\n fps: number | null;\n longTasks: { count: number; totalDuration: number };\n}\n\n// Network Information\ninterface ConnectionInfo {\n effectiveType: string;\n rtt: number;\n}\n\ntype MetricKey = keyof CoreWebVitals | keyof NavigationMetrics | 'fps' | 'TBT';\ntype MetricRating = 'good' | 'needs-improvement' | 'poor' | 'unknown';\n\ndeclare global {\n interface Performance {\n memory?: {\n jsHeapSizeLimit: number;\n totalJSHeapSize: number;\n usedJSHeapSize: number;\n };\n }\n interface Navigator {\n connection?: {\n effectiveType: string;\n rtt: number;\n addEventListener: (type: string, listener: EventListener) => void;\n removeEventListener: (type: string, listener: EventListener) => void;\n };\n }\n}\n\nconst METRIC_THRESHOLDS = {\n LCP: { good: 2500, poor: 4000 },\n INP: { good: 200, poor: 500 },\n CLS: { good: 0.1, poor: 0.25 },\n FCP: { good: 1800, poor: 3000 },\n ttfb: { good: 800, poor: 1800 },\n loadTime: { good: 3000, poor: 6000 },\n domInteractive: { good: 1500, poor: 3500 },\n fps: { good: 55, poor: 30 },\n TBT: { good: 200, poor: 600 }\n};\n\nconst GLOBAL_BENCHMARKS: Partial<Record<MetricKey, number>> = {\n LCP: 2400,\n INP: 250,\n CLS: 0.05,\n FCP: 1600,\n TBT: 300\n};\n\nconst rateMetric = (metric: MetricKey, value: number | null): MetricRating => {\n if (value === null) {\n return 'unknown';\n }\n const thresholds = METRIC_THRESHOLDS[metric as keyof typeof METRIC_THRESHOLDS];\n if (!thresholds) {\n return 'unknown';\n }\n\n if (metric === 'fps') {\n if (value >= thresholds.good) {\n return 'good';\n }\n if (value >= thresholds.poor) {\n return 'needs-improvement';\n }\n return 'poor';\n }\n\n if (value <= thresholds.good) {\n return 'good';\n }\n if (value < thresholds.poor) {\n return 'needs-improvement';\n }\n return 'poor';\n};\n\nconst formatMetric = (metric: MetricKey, value: number | null): string => {\n if (value === null) {\n return 'N/A';\n }\n if (metric === 'CLS') {\n return value.toFixed(3);\n }\n if (metric === 'fps') {\n return `${Math.round(value)}`;\n }\n if (value < 1000) {\n return `${Math.round(value)}ms`;\n }\n return `${(value / 1000).toFixed(2)}s`;\n};\n\nconst formatBytes = (bytes: number | null | undefined, decimals = 1): string => {\n if (bytes == null || !Number.isFinite(bytes) || bytes <= 0) {\n return '0 B';\n }\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${parseFloat((bytes / k ** i).toFixed(dm))} ${sizes[i]}`;\n};\n\nconst estimateCarbonFootprint = (totalBytes: number): string => {\n if (totalBytes <= 0) {\n return '0g CO2 eq.';\n }\n const emissions = (totalBytes / 1000000000) * 0.81;\n return `${emissions.toFixed(3)}g CO2 eq.`;\n};\n\n@Component({\n tag: 'ease-monitor',\n styles: `\n :host {\n position: relative;\n z-index: 100000;\n user-select: none;\n -webkit-user-select: none;\n \n }\n\n [part=\"container\"] {\n width: 320px;\n overflow: hidden; \n }\n\n [part=\"header\"] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n [part=\"title\"] {\n display: flex;\n align-items: center;\n gap: 0.5em;\n }\n\n [part=\"content\"] {\n display: grid;\n gap: 1em;\n max-height: 80vh;\n overflow-y: auto;\n }\n\n .metrics-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(90px, 1fr));\n gap: 0.5em;\n }\n\n .metric-box {\n text-align: center;\n cursor: help;\n }\n\n .metric-value {\n font-variant-numeric: tabular-nums; \n }\n\n .rating-good {\n color: #22c55e;\n }\n .rating-needs-improvement {\n color: #eab308;\n }\n .rating-poor {\n color: #ef4444;\n }\n .rating-unknown {\n color: #6b7280;\n }\n\n .status-indicator.rating-good {\n background-color: #22c55e;\n }\n .status-indicator.rating-needs-improvement {\n background-color: #eab308;\n }\n .status-indicator.rating-poor {\n background-color: #ef4444;\n }\n .status-indicator.rating-unknown {\n background-color: #6b7280;\n }\n\n .memory-used.rating-good {\n background-color: #22c55e;\n }\n .memory-used.rating-needs-improvement {\n background-color: #eab308;\n }\n .memory-used.rating-poor {\n background-color: #ef4444;\n }\n\n .resource-list, .memory-usage, .network-info {\n display: grid;\n gap: 0.25em;\n }\n\n .resource-item, .network-item, .longtask-item {\n display: flex;\n justify-content: space-between;\n font-variant-numeric: tabular-nums;\n }\n\n .memory-bar {\n height: 10px;\n overflow: hidden;\n position: relative;\n }\n\n .memory-used {\n height: 100%;\n transition: width 0.5s ease-in-out;\n }\n\n .status-indicator {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n }\n \n .carbon-estimate {\n text-align: right;\n }\n\n .trend-indicator {\n display: inline-block;\n width: 1em;\n text-align: center;\n }\n `\n})\nexport class Monitor extends HTMLElement {\n declare requestRender: () => void;\n\n @Watch<PerformanceMetrics>({})\n accessor metrics: PerformanceMetrics = {\n navigation: { loadTime: null, domInteractive: null, ttfb: null },\n coreWebVitals: { LCP: null, INP: null, CLS: 0, FCP: null, TBT: 0 },\n resources: {\n js: { count: 0, size: 0 },\n css: { count: 0, size: 0 },\n img: { count: 0, size: 0 },\n other: { count: 0, size: 0 },\n totalSize: 0\n },\n memory: null,\n fps: null,\n longTasks: { count: 0, totalDuration: 0 }\n };\n\n @Watch<ConnectionInfo>({})\n accessor network: ConnectionInfo = {\n effectiveType: 'N/A',\n rtt: 0\n };\n\n private observers: PerformanceObserver[] = [];\n private memoryInterval: number | null = null;\n\n private clsEntries: LayoutShift[] = [];\n\n private inpEntries: PerformanceEventTiming[] = [];\n private maxINP = 0;\n\n private longTaskEntries: PerformanceLongTaskTiming[] = [];\n\n private trendHistory: Partial<Record<MetricKey, number[]>> = {};\n private maxTrendLength = 5;\n\n connectedCallback(): void {\n this.initObservers();\n this.collectInitialMetrics();\n this.startMemoryMonitoring();\n this.initNetworkMonitoring();\n\n if (document.readyState !== 'complete') {\n window.addEventListener('load', this.handlePageLoad);\n } else {\n this.handlePageLoad();\n }\n }\n\n disconnectedCallback(): void {\n this.observers.forEach((observer) => {\n observer.disconnect();\n });\n this.observers = [];\n this.stopMemoryMonitoring();\n this.stopNetworkMonitoring();\n window.removeEventListener('load', this.handlePageLoad);\n }\n\n @Listen<Monitor, CustomEvent<MonitorFpsDetail>>('monitor-fps')\n handleFpsUpdate(event: CustomEvent<MonitorFpsDetail>): void {\n const fps = event.detail?.fps ?? null;\n this.metrics.fps = fps;\n this.updateTrend('fps', fps);\n this.requestRender();\n }\n\n private handlePageLoad = (): void => {\n setTimeout(() => {\n this.collectNavigationTiming();\n this.requestRender();\n }, 500);\n };\n\n private initObservers(): void {\n if (!('PerformanceObserver' in window)) {\n console.warn('PerformanceObserver API not supported.');\n return;\n }\n\n try {\n const observer = new PerformanceObserver((list) => {\n for (const entry of list.getEntries()) {\n this.processPerformanceEntry(entry);\n }\n });\n\n observer.observe({ type: 'largest-contentful-paint', buffered: true });\n observer.observe({ type: 'event', buffered: true });\n observer.observe({ type: 'layout-shift', buffered: true });\n observer.observe({ type: 'paint', buffered: true });\n observer.observe({ type: 'resource', buffered: true });\n observer.observe({ type: 'longtask', buffered: true });\n\n this.observers.push(observer);\n } catch (e) {\n console.error('Error initializing PerformanceObserver:', e);\n }\n }\n\n private collectInitialMetrics(): void {\n this.collectNavigationTiming();\n const resourceEntries = performance.getEntriesByType('resource') as PerformanceResourceTiming[];\n this.processResourceEntries(resourceEntries);\n }\n\n private collectNavigationTiming(): void {\n const navigationEntries = performance.getEntriesByType('navigation');\n if (navigationEntries.length > 0) {\n const navTiming = navigationEntries[0] as PerformanceNavigationTiming;\n\n let ttfb = null;\n if (navTiming.responseStart > 0 && navTiming.fetchStart > 0) {\n ttfb = navTiming.responseStart - navTiming.fetchStart;\n }\n\n let loadTime = null;\n if (navTiming.loadEventEnd > 0) {\n loadTime = navTiming.loadEventEnd - navTiming.startTime;\n }\n\n let domInteractive = null;\n if (navTiming.domInteractive > 0) {\n domInteractive = navTiming.domInteractive - navTiming.startTime;\n }\n\n this.metrics.navigation = { ttfb, loadTime, domInteractive };\n this.updateTrend('loadTime', loadTime);\n this.updateTrend('ttfb', ttfb);\n }\n }\n\n private processPerformanceEntry(entry: PerformanceEntry): void {\n switch (entry.entryType) {\n case 'largest-contentful-paint':\n this.metrics.coreWebVitals.LCP = entry.startTime;\n this.updateTrend('LCP', entry.startTime);\n break;\n case 'event': {\n const eventEntry = entry as PerformanceEventTiming;\n if (eventEntry.interactionId && eventEntry.duration > this.maxINP) {\n this.maxINP = eventEntry.duration;\n this.metrics.coreWebVitals.INP = this.maxINP;\n this.updateTrend('INP', this.maxINP);\n }\n this.inpEntries.push(eventEntry);\n break;\n }\n case 'layout-shift': {\n const lsEntry = entry as LayoutShift;\n if (!lsEntry.hadRecentInput) {\n this.clsEntries.push(lsEntry);\n this.calculateSessionWindowCLS();\n }\n break;\n }\n case 'paint':\n if (entry.name === 'first-contentful-paint') {\n this.metrics.coreWebVitals.FCP = entry.startTime;\n this.updateTrend('FCP', entry.startTime);\n }\n break;\n case 'resource':\n this.processResourceEntries([entry as PerformanceResourceTiming]);\n return;\n case 'longtask': {\n const ltEntry = entry as PerformanceLongTaskTiming;\n this.longTaskEntries.push(ltEntry);\n this.calculateLongTasksAndTBT();\n break;\n }\n }\n this.requestRender();\n }\n\n private calculateSessionWindowCLS(): void {\n let maxCls = 0;\n let currentSessionCls = 0;\n let sessionStartTime = Infinity;\n let lastTime = -Infinity;\n\n this.clsEntries.sort((a, b) => a.startTime - b.startTime);\n\n for (const entry of this.clsEntries) {\n const timeDiff = entry.startTime - lastTime;\n\n if (timeDiff > 1000 || entry.startTime - sessionStartTime > 5000) {\n if (currentSessionCls > 0) {\n maxCls = Math.max(maxCls, currentSessionCls);\n }\n currentSessionCls = 0;\n sessionStartTime = entry.startTime;\n }\n\n currentSessionCls += entry.value;\n lastTime = entry.startTime;\n }\n\n maxCls = Math.max(maxCls, currentSessionCls);\n this.metrics.coreWebVitals.CLS = maxCls;\n this.updateTrend('CLS', maxCls);\n }\n\n private processResourceEntries(entries: PerformanceResourceTiming[]): void {\n const summary = this.metrics.resources;\n\n entries.forEach((entry) => {\n const size = entry.transferSize || 0;\n const initiator = entry.initiatorType;\n const name = entry.name.toLowerCase();\n\n if (initiator === 'script' || name.endsWith('.js')) {\n summary.js.count++;\n summary.js.size += size;\n } else if (initiator === 'css' || name.endsWith('.css') || initiator === 'link') {\n summary.css.count++;\n summary.css.size += size;\n } else if (initiator === 'img' || initiator === 'image' || /\\.(jpg|jpeg|png|gif|svg|webp|avif)$/.test(name)) {\n summary.img.count++;\n summary.img.size += size;\n } else {\n summary.other.count++;\n summary.other.size += size;\n }\n summary.totalSize += size;\n });\n }\n\n private calculateLongTasksAndTBT(): void {\n let tbt = 0;\n let count = 0;\n const referenceTime = this.metrics.coreWebVitals.FCP ?? 0;\n\n this.longTaskEntries.forEach((task) => {\n if (task.startTime >= referenceTime) {\n count++;\n if (task.duration > 50) {\n tbt += task.duration - 50;\n }\n }\n });\n this.metrics.longTasks = { count, totalDuration: tbt };\n this.metrics.coreWebVitals.TBT = tbt;\n this.updateTrend('TBT', tbt);\n }\n\n private startMemoryMonitoring(): void {\n if (!performance.memory) {\n return;\n }\n\n const updateMemory = () => {\n if (performance.memory) {\n const mem = performance.memory;\n this.metrics.memory = {\n jsHeapSizeLimit: Number(mem.jsHeapSizeLimit) || 0,\n totalJSHeapSize: Number(mem.totalJSHeapSize) || 0,\n usedJSHeapSize: Number(mem.usedJSHeapSize) || 0\n };\n this.requestRender();\n }\n };\n\n updateMemory();\n this.memoryInterval = window.setInterval(updateMemory, 3000);\n }\n\n private stopMemoryMonitoring(): void {\n if (this.memoryInterval) {\n clearInterval(this.memoryInterval);\n this.memoryInterval = null;\n }\n }\n\n private initNetworkMonitoring(): void {\n if (navigator.connection) {\n this.updateNetworkInfo();\n navigator.connection.addEventListener('change', this.updateNetworkInfo);\n }\n }\n\n private stopNetworkMonitoring(): void {\n if (navigator.connection) {\n navigator.connection.removeEventListener('change', this.updateNetworkInfo);\n }\n }\n\n private updateNetworkInfo = (): void => {\n if (navigator.connection) {\n this.network = {\n effectiveType: navigator.connection.effectiveType ?? 'N/A',\n rtt: navigator.connection.rtt ?? 0\n };\n }\n };\n\n private updateTrend(key: MetricKey, value: number | null): void {\n if (value === null) {\n return;\n }\n const history = this.trendHistory[key] || [];\n history.push(value);\n if (history.length > this.maxTrendLength) {\n history.shift();\n }\n this.trendHistory[key] = history;\n }\n\n private getTrendDirection(key: MetricKey): string {\n const history = this.trendHistory[key];\n if (!history || history.length < 2) {\n return '';\n }\n\n const currentValue = history[history.length - 1];\n const previousAvg = history.slice(0, history.length - 1).reduce((a, b) => a + b, 0) / (history.length - 1);\n\n const threshold = Math.abs(previousAvg * 0.05);\n const delta = currentValue ?? 0 - previousAvg;\n\n if (Math.abs(delta) < threshold) {\n return '→';\n }\n\n if (key === 'fps') {\n return delta > 0 ? '↑' : '↓';\n } else {\n return delta < 0 ? '↓' : '↑';\n }\n }\n\n private getOverallStatus(): MetricRating {\n const ratings: MetricRating[] = [\n rateMetric('LCP', this.metrics.coreWebVitals.LCP),\n rateMetric('CLS', this.metrics.coreWebVitals.CLS),\n rateMetric('INP', this.metrics.coreWebVitals.INP),\n rateMetric('fps', this.metrics.fps)\n ];\n\n if (ratings.includes('poor')) {\n return 'poor';\n }\n if (ratings.includes('needs-improvement')) {\n return 'needs-improvement';\n }\n if (ratings.every((r) => r === 'unknown')) {\n return 'unknown';\n }\n\n if (ratings.some((r) => r === 'good')) {\n return 'good';\n }\n\n return 'unknown';\n }\n\n render(): TemplateResult {\n return html`\n <div part=\"container\">\n ${this.renderExpanded()}\n </div>\n `;\n }\n\n private renderExpanded(): TemplateResult {\n return html`\n <div part=\"header\">\n <div part=\"title\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"></polyline><polyline points=\"17 6 23 6 23 12\"></polyline></svg>\n Performance Monitor\n </div>\n </div>\n <div part=\"content\">\n ${this.renderVitalsAndTiming()}\n ${this.renderRealtime()}\n ${this.renderNetworkInfo()}\n ${this.renderResources()}\n </div>\n `;\n }\n\n private renderMetricBox(label: string, key: MetricKey, value: number | null, description: string): TemplateResult {\n const rating = rateMetric(key, value);\n const formattedValue = formatMetric(key, value);\n const trend = this.getTrendDirection(key);\n const benchmark = GLOBAL_BENCHMARKS[key];\n const vsBenchmark = benchmark ? ` (vs avg ${formatMetric(key, benchmark)})` : '';\n return html`\n <div class=\"metric-box\" title=\"${description}${vsBenchmark}\">\n <div part=\"metric-label\" class=\"metric-label\">${label}</div>\n <div part=\"metric-value\" class=\"metric-value rating-${rating}\" data-rating=${rating}>\n ${formattedValue}\n <span class=\"trend-indicator\">${trend}</span>\n </div>\n </div>\n `;\n }\n\n private renderVitalsAndTiming(): TemplateResult {\n const { LCP, INP, CLS, FCP, TBT } = this.metrics.coreWebVitals;\n const { ttfb, loadTime } = this.metrics.navigation;\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Vitals & Timing</div>\n <div class=\"metrics-grid\">\n ${this.renderMetricBox('LCP', 'LCP', LCP, 'Largest Contentful Paint: Measures loading performance.')}\n ${this.renderMetricBox('INP', 'INP', INP, 'Interaction to Next Paint: Measures responsiveness.')}\n ${this.renderMetricBox('CLS', 'CLS', CLS, 'Cumulative Layout Shift: Measures visual stability.')}\n ${this.renderMetricBox('FCP', 'FCP', FCP, 'First Contentful Paint: When the browser renders the first bit of content.')}\n ${this.renderMetricBox('TBT', 'TBT', TBT, 'Total Blocking Time: Sum of blocking portions of long tasks.')}\n ${this.renderMetricBox('TTFB', 'ttfb', ttfb, 'Time to First Byte: Measures server responsiveness.')}\n ${this.renderMetricBox('Load', 'loadTime', loadTime, 'Total Page Load Time.')}\n </div>\n </section>\n `;\n }\n\n private renderRealtime(): TemplateResult {\n const { memory, longTasks } = this.metrics;\n\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Realtime Monitoring</div>\n <ease-monitor-fps></ease-monitor-fps>\n <div class=\"longtask-item\">\n <span>Long Tasks (Count / Blocked ms)</span>\n <span>${longTasks.count} / ${longTasks.totalDuration.toFixed(0)}ms</span>\n </div>\n ${this.renderMemory(memory)}\n </section>\n `;\n }\n\n private renderMemory(memory: MemoryUsage): TemplateResult {\n if (!memory) {\n return html`\n <div class=\"memory-usage\">\n (performance.memory API not supported)\n </div>\n `;\n }\n\n const usedPercent = memory.totalJSHeapSize > 0 ? (memory.usedJSHeapSize / memory.totalJSHeapSize) * 100 : 0;\n\n let rating: MetricRating = 'good';\n if (usedPercent > 85) {\n rating = 'poor';\n } else if (usedPercent > 60) {\n rating = 'needs-improvement';\n }\n\n return html`\n <div class=\"memory-usage\">\n <div class=\"resource-item\">\n <span>Used / Total Heap</span>\n <span>${formatBytes(memory.usedJSHeapSize)} / ${formatBytes(memory.totalJSHeapSize)}</span>\n </div>\n <div class=\"memory-bar\" title=\"${usedPercent.toFixed(1)}% Used\">\n <div class=\"memory-used rating-${rating}\" style=${styleObject({ width: `${Math.min(100, usedPercent)}%` })} data-rating=${rating}></div>\n </div>\n <div class=\"resource-item\">\n <span>Heap Limit</span>\n <span>${formatBytes(memory.jsHeapSizeLimit)}</span>\n </div>\n </div>\n `;\n }\n\n private renderNetworkInfo(): TemplateResult {\n const { effectiveType, rtt } = this.network;\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Network Connection</div>\n <div class=\"network-info\">\n <div class=\"network-item\">\n <span>Effective Type</span>\n <span>${effectiveType.toUpperCase()}</span>\n </div>\n <div class=\"network-item\">\n <span>Round Trip Time (RTT)</span>\n <span>${rtt > 0 ? `${rtt}ms` : 'N/A'}</span>\n </div>\n </div>\n </section>\n `;\n }\n\n private renderResources(): TemplateResult {\n const { js, css, img, other, totalSize } = this.metrics.resources;\n const totalCount = js.count + css.count + img.count + other.count;\n\n const renderItem = (label: string, data: { count: number; size: number }) => html`\n <div class=\"resource-item\">\n <span>${label} (${data.count})</span>\n <span>${formatBytes(data.size)}</span>\n </div>\n `;\n\n return html`\n <section>\n <div part=\"section-title\" class=\"section-title\">Resources (Total: ${formatBytes(totalSize)} / ${totalCount} reqs)</div>\n <div class=\"resource-list\">\n ${renderItem('JS', js)}\n ${renderItem('CSS/Links', css)}\n ${renderItem('Images', img)}\n ${renderItem('Other', other)}\n </div>\n <div part=\"carbon-estimate\" class=\"carbon-estimate\">\n Est. Carbon: ${estimateCarbonFootprint(totalSize)}\n </div>\n <div>\n Overall Status: ${this.getOverallStatus()}\n </div>\n </section>\n `;\n }\n}\n","type RenderHost = HTMLElement & {\n requestRender?(): void;\n render?(): void;\n};\n\nconst renderQueue = new WeakMap<RenderHost, boolean>();\n\nconst scheduleRender = (instance: RenderHost): void => {\n if (typeof instance.requestRender === 'function') {\n instance.requestRender();\n return;\n }\n\n if (typeof instance.render !== 'function') {\n return;\n }\n\n if (renderQueue.get(instance)) {\n return;\n }\n\n renderQueue.set(instance, true);\n\n requestAnimationFrame(() => {\n renderQueue.set(instance, false);\n\n instance.render?.();\n });\n};\n\nconst defaultCompare = <TValue>(previous: TValue, next: TValue): boolean => previous === next;\n\ninterface WatchOptions<TValue, THost extends RenderHost> {\n compare?: (previous: TValue, next: TValue) => boolean;\n onChange?: (this: THost, next: TValue, previous: TValue) => void;\n transform?: (this: THost, initial: TValue) => TValue;\n}\n\nexport function Watch<TValue, THost extends RenderHost = RenderHost>(options: WatchOptions<TValue, THost> = {}) {\n const { compare = defaultCompare, onChange, transform } = options;\n\n return (\n accessor: ClassAccessorDecoratorTarget<THost, TValue>,\n context: ClassAccessorDecoratorContext<THost, TValue>\n ): ClassAccessorDecoratorResult<THost, TValue> => {\n if (context.kind !== 'accessor') {\n throw new Error('@Watch requires the \"accessor\" keyword on the property.');\n }\n\n return {\n get(this: THost): TValue {\n return accessor.get.call(this);\n },\n set(this: THost, value: TValue): void {\n const previous = accessor.get.call(this);\n\n if (compare(previous, value)) {\n return;\n }\n\n accessor.set.call(this, value);\n\n if (onChange) {\n onChange.call(this, value, previous);\n }\n\n scheduleRender(this);\n },\n init(this: THost, initialValue: TValue): TValue {\n if (transform) {\n return transform.call(this, initialValue);\n }\n\n return initialValue;\n }\n };\n };\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\nexport type MonitorFpsDetail = {\n fps: number | null;\n refreshRate: number | null;\n frameTimeAvg: number | null;\n frameTimeP95: number | null;\n frameTimeMax: number | null;\n droppedFrames: number;\n jankFrames: number;\n longFrames: number;\n};\n\nconst clamp = (value: number, min: number, max: number): number => Math.max(min, Math.min(max, value));\n\nconst mean = (values: readonly number[]): number | null => {\n if (values.length === 0) {\n return null;\n }\n let sum = 0;\n for (const value of values) {\n sum += value;\n }\n return sum / values.length;\n};\n\nconst quantile = (sorted: readonly number[], q: number): number | null => {\n if (sorted.length === 0) {\n return null;\n }\n const clamped = clamp(q, 0, 1);\n const index = Math.floor(clamped * (sorted.length - 1));\n return sorted[index] ?? null;\n};\n\nconst computePercentile = (values: readonly number[], q: number): number | null => {\n if (values.length === 0) {\n return null;\n }\n const sorted = [...values].sort((a, b) => a - b);\n return quantile(sorted, q);\n};\n\nconst computeMedian = (values: readonly number[]): number | null => computePercentile(values, 0.5);\n\nconst formatNumber = (value: number | null, decimals = 0): string => {\n if (value === null || !Number.isFinite(value)) {\n return '—';\n }\n return value.toFixed(decimals);\n};\n\nconst formatMs = (value: number | null, decimals = 1): string => {\n if (value === null || !Number.isFinite(value)) {\n return '—';\n }\n return `${value.toFixed(decimals)}ms`;\n};\n\nconst rateFps = (fps: number | null, targetFps: number | null): 'good' | 'needs-improvement' | 'poor' | 'unknown' => {\n if (fps === null || !Number.isFinite(fps)) {\n return 'unknown';\n }\n const target = targetFps && Number.isFinite(targetFps) ? targetFps : 60;\n const ratio = fps / target;\n if (ratio >= 0.92) {\n return 'good';\n }\n if (ratio >= 0.75) {\n return 'needs-improvement';\n }\n return 'poor';\n};\n\n@Component({\n tag: 'ease-monitor-fps',\n autoSlot: false,\n shadowMode: 'open',\n styles: `\n :host {\n display: block;\n width: 100%;\n color: var(--color-foreground);\n font-family: var(--ease-font-family, \"Instrument Sans\", sans-serif);\n font-variant-numeric: tabular-nums;\n }\n\n [part=\"container\"] {\n display: grid;\n gap: 8px;\n width: 100%;\n }\n\n [part=\"header\"] {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 8px;\n width: 100%;\n }\n\n [part=\"title\"] {\n display: inline-flex;\n align-items: baseline;\n gap: 6px;\n min-width: 0;\n }\n\n [part=\"fps\"] {\n font-size: var(--ease-monitor-fps-font-size, 14px);\n font-weight: 650;\n letter-spacing: -0.01em;\n line-height: 1;\n }\n\n [part=\"fps\"][data-rating=\"good\"] {\n color: #22c55e;\n }\n [part=\"fps\"][data-rating=\"needs-improvement\"] {\n color: #eab308;\n }\n [part=\"fps\"][data-rating=\"poor\"] {\n color: #ef4444;\n }\n [part=\"fps\"][data-rating=\"unknown\"] {\n color: var(--color-gray-600);\n }\n\n [part=\"unit\"] {\n font-size: var(--ease-monitor-unit-font-size, var(--ease-font-size-sm, 12px));\n color: var(--color-gray-600);\n font-weight: 500;\n }\n\n [part=\"subtitle\"] {\n font-size: var(--ease-monitor-subtitle-font-size, 11px);\n color: var(--color-gray-600);\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n min-width: 0;\n text-align: right;\n }\n\n canvas[part=\"graph\"] {\n width: 100%;\n height: 44px;\n display: block;\n background: var(--color-gray-900);\n box-shadow: inset 0 0 0 1px var(--color-white-4);\n }\n\n [part=\"stats\"] {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n font-size: var(--ease-monitor-stats-font-size, var(--ease-font-size-sm, 12px));\n padding-left: var(--ease-monitor-stats-padding-left, 4px);\n color: var(--color-gray-600);\n }\n\n [part=\"stat\"] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n min-width: 0;\n }\n\n [part=\"stat\"] strong {\n font-weight: 550;\n color: var(--color-gray-700);\n }\n `\n})\nexport class MonitorFps extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean>({ type: Boolean, reflect: true, defaultValue: false })\n accessor paused: boolean = false;\n\n @Query<HTMLCanvasElement>('canvas[part=\"graph\"]')\n accessor canvasEl!: HTMLCanvasElement | null;\n\n #rafId: number | null = null;\n #lastNow = 0;\n #lastSampleNow = 0;\n #framesSinceSample = 0;\n\n #frameDeltas: number[] = [];\n #fpsSamples: number[] = [];\n\n #maxFrameDeltas = 240;\n #maxFpsSamples = 90; // 90 * 250ms = ~22.5s\n #sampleIntervalMs = 250;\n #statsWindowFrames = 120;\n\n #data: MonitorFpsDetail = {\n fps: null,\n refreshRate: null,\n frameTimeAvg: null,\n frameTimeP95: null,\n frameTimeMax: null,\n droppedFrames: 0,\n jankFrames: 0,\n longFrames: 0\n };\n\n connectedCallback(): void {\n this.#attachVisibilityHandling();\n if (!this.paused && !document.hidden) {\n this.#start();\n }\n }\n\n disconnectedCallback(): void {\n this.#stop();\n document.removeEventListener('visibilitychange', this.#handleVisibilityChange);\n }\n\n afterRender(): void {\n this.#syncCanvasSize();\n this.#draw();\n }\n\n render(): TemplateResult {\n const fps = this.#data.fps;\n const hz = this.#data.refreshRate;\n const rating = rateFps(fps, hz);\n\n const subtitleParts = [\n this.#data.frameTimeAvg !== null ? `avg ${formatMs(this.#data.frameTimeAvg)}` : null,\n this.#data.frameTimeP95 !== null ? `p95 ${formatMs(this.#data.frameTimeP95)}` : null\n ].filter(Boolean);\n\n return html`\n <div part=\"container\">\n <div part=\"header\">\n <div part=\"title\">\n <span part=\"fps\" data-rating=${rating}>${formatNumber(fps, 0)}</span>\n <span part=\"unit\">FPS</span>\n </div>\n <div part=\"subtitle\">${subtitleParts.join(' · ')}</div>\n </div>\n\n <canvas part=\"graph\" aria-label=\"FPS graph\"></canvas>\n\n <div part=\"stats\">\n <div part=\"stat\"><span>Refresh</span><strong>${hz ? `~${formatNumber(hz, 0)}Hz` : '—'}</strong></div>\n <div part=\"stat\"><span>Dropped</span><strong>${this.#data.droppedFrames}</strong></div>\n <div part=\"stat\"><span>Jank</span><strong>${this.#data.jankFrames}</strong></div>\n <div part=\"stat\"><span>Long frames</span><strong>${this.#data.longFrames}</strong></div>\n <div part=\"stat\"><span>Worst</span><strong>${formatMs(this.#data.frameTimeMax)}</strong></div>\n <div part=\"stat\"><span>Avg</span><strong>${formatMs(this.#data.frameTimeAvg)}</strong></div>\n </div>\n </div>\n `;\n }\n\n #attachVisibilityHandling(): void {\n document.removeEventListener('visibilitychange', this.#handleVisibilityChange);\n document.addEventListener('visibilitychange', this.#handleVisibilityChange, { passive: true });\n }\n\n #handleVisibilityChange = (): void => {\n if (document.hidden) {\n this.#stop();\n return;\n }\n\n if (!this.paused) {\n this.#start();\n }\n };\n\n #start(): void {\n if (this.#rafId !== null) {\n return;\n }\n\n const now = performance.now();\n this.#lastNow = now;\n this.#lastSampleNow = now;\n this.#framesSinceSample = 0;\n\n this.#rafId = requestAnimationFrame(this.#tick);\n }\n\n #stop(): void {\n if (this.#rafId !== null) {\n cancelAnimationFrame(this.#rafId);\n this.#rafId = null;\n }\n }\n\n #tick = (now: number): void => {\n if (this.paused) {\n this.#stop();\n return;\n }\n\n const delta = now - this.#lastNow;\n this.#lastNow = now;\n\n // Ignore huge deltas (tab switch / breakpoints).\n if (delta > 0 && delta < 250) {\n this.#frameDeltas.push(delta);\n if (this.#frameDeltas.length > this.#maxFrameDeltas) {\n this.#frameDeltas.shift();\n }\n }\n\n this.#framesSinceSample += 1;\n\n if (now - this.#lastSampleNow >= this.#sampleIntervalMs) {\n const elapsed = now - this.#lastSampleNow;\n const fpsSample = elapsed > 0 ? (this.#framesSinceSample * 1000) / elapsed : 0;\n\n this.#fpsSamples.push(fpsSample);\n if (this.#fpsSamples.length > this.#maxFpsSamples) {\n this.#fpsSamples.shift();\n }\n\n this.#lastSampleNow = now;\n this.#framesSinceSample = 0;\n\n this.#updateStats();\n this.#emit();\n this.requestRender();\n }\n\n this.#rafId = requestAnimationFrame(this.#tick);\n };\n\n #updateStats(): void {\n const frameWindow = this.#frameDeltas.slice(-this.#statsWindowFrames);\n const fpsWindow = this.#fpsSamples.slice(-Math.min(4, this.#fpsSamples.length));\n\n const frameAvg = mean(frameWindow);\n const frameP95 = computePercentile(frameWindow, 0.95);\n const frameMax = frameWindow.length > 0 ? Math.max(...frameWindow) : null;\n const median = computeMedian(frameWindow);\n\n const refreshRate =\n median && median > 0 ? clamp((1000 / median) as number, 30, 240) : (this.#data.refreshRate ?? null);\n\n const ideal = refreshRate ? 1000 / refreshRate : 1000 / 60;\n\n let droppedFrames = 0;\n let jankFrames = 0;\n let longFrames = 0;\n\n for (const ft of frameWindow) {\n const missed = Math.max(0, Math.round(ft / ideal) - 1);\n droppedFrames += missed;\n\n if (ft > ideal * 1.5) {\n jankFrames += 1;\n }\n\n if (ft > Math.max(50, ideal * 3)) {\n longFrames += 1;\n }\n }\n\n const fps = fpsWindow.length > 0 ? mean(fpsWindow) : null;\n\n this.#data = {\n fps,\n refreshRate,\n frameTimeAvg: frameAvg,\n frameTimeP95: frameP95,\n frameTimeMax: frameMax,\n droppedFrames,\n jankFrames,\n longFrames\n };\n }\n\n #emit(): void {\n this.dispatchEvent(\n new CustomEvent<MonitorFpsDetail>('monitor-fps', {\n detail: this.#data,\n bubbles: true,\n composed: true\n })\n );\n }\n\n #syncCanvasSize(): void {\n const canvas = this.canvasEl;\n if (!canvas) {\n return;\n }\n\n const rect = canvas.getBoundingClientRect();\n const dpr = Math.max(1, window.devicePixelRatio || 1);\n const width = Math.max(1, Math.floor(rect.width * dpr));\n const height = Math.max(1, Math.floor(rect.height * dpr));\n\n if (canvas.width !== width || canvas.height !== height) {\n canvas.width = width;\n canvas.height = height;\n }\n }\n\n #draw(): void {\n const canvas = this.canvasEl;\n if (!canvas) {\n return;\n }\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n return;\n }\n\n const dpr = Math.max(1, window.devicePixelRatio || 1);\n const width = canvas.width / dpr;\n const height = canvas.height / dpr;\n\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n ctx.clearRect(0, 0, width, height);\n\n const samples = this.#fpsSamples;\n if (samples.length < 2) {\n return;\n }\n\n const target = this.#data.refreshRate ?? 60;\n const scaleMax = Math.max(60, Math.round(target / 10) * 10);\n\n const rating = rateFps(this.#data.fps, this.#data.refreshRate);\n const stroke =\n rating === 'good'\n ? '#22c55e'\n : rating === 'needs-improvement'\n ? '#eab308'\n : rating === 'poor'\n ? '#ef4444'\n : '#6b7280';\n\n // guide lines\n ctx.save();\n ctx.globalAlpha = 0.35;\n ctx.strokeStyle = '#ffffff';\n ctx.lineWidth = 1;\n ctx.setLineDash([3, 3]);\n\n const drawGuide = (fps: number) => {\n const y = height - clamp(fps / scaleMax, 0, 1) * height;\n ctx.beginPath();\n ctx.moveTo(0, y);\n ctx.lineTo(width, y);\n ctx.stroke();\n };\n\n drawGuide(Math.min(60, scaleMax));\n drawGuide(Math.min(30, scaleMax));\n\n ctx.restore();\n\n const toY = (fps: number) => height - clamp(fps / scaleMax, 0, 1) * height;\n\n // area fill\n ctx.beginPath();\n for (let i = 0; i < samples.length; i += 1) {\n const value = samples[i] ?? 0;\n const x = (i / (samples.length - 1)) * width;\n const y = toY(value);\n if (i === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n }\n ctx.lineTo(width, height);\n ctx.lineTo(0, height);\n ctx.closePath();\n ctx.globalAlpha = 0.12;\n ctx.fillStyle = stroke;\n ctx.fill();\n\n // line\n ctx.beginPath();\n for (let i = 0; i < samples.length; i += 1) {\n const value = samples[i] ?? 0;\n const x = (i / (samples.length - 1)) * width;\n const y = toY(value);\n if (i === 0) {\n ctx.moveTo(x, y);\n } else {\n ctx.lineTo(x, y);\n }\n }\n ctx.globalAlpha = 1;\n ctx.strokeStyle = stroke;\n ctx.lineWidth = 1.75;\n ctx.setLineDash([]);\n ctx.lineJoin = 'round';\n ctx.lineCap = 'round';\n ctx.stroke();\n }\n}\n","import { html } from 'lit-html';\n\nimport { coerceNumber, dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\nimport '../input';\nimport '../icons/interface/minus';\nimport '../icons/interface/plus';\n@Component({\n tag: 'ease-number-input',\n styles: `\n :host {\n display: inline-flex;\n align-items: center;\n }\n\n [part=\"container\"] {\n min-width: 0;\n }\n\n ease-input {\n --ease-input-padding: 0;\n text-align: center;\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n font-variant-numeric: tabular-nums;\n font-feature-settings: \"tnum\";\n }\n\n [part=\"button\"] {\n position: relative;\n overflow: hidden;\n \n & > div {\n animation: blink .75s forwards;\n position: absolute;\n pointer-events: none;\n inset: 0;\n background-color: var(--ease-number-blink-color, var(--color-white-8));\n }\n }\n\n @keyframes blink {\n 0%,\n 90%,\n 100% {\n opacity: 0;\n }\n 30% {\n opacity: 1;\n }\n }\n `,\n template(this: NumberInput) {\n return html`\n <div part=\"container\">\n <ease-input\n part=\"control\"\n type=\"number\"\n .value=${this.value}\n ?disabled=${this.disabled}\n ?min=${this.min}\n ?max=${this.max}\n ?step=${this.step}\n @input=${this.handleInput}\n @change=${this.handleChange}\n >\n <button\n slot=\"prefix\"\n @click=${this.handleDecrement.bind(this)}\n type=\"button\"\n part=\"button\"\n ?disabled=${this.disabled || this.min === null || Number(this.control?.value) <= this.min}\n ?aria-disabled=${this.disabled || this.min === null || Number(this.control?.value) <= this.min}\n >\n <ease-icon-minus />\n </button>\n <button\n slot=\"suffix\"\n @click=${this.handleIncrement.bind(this)}\n type=\"button\"\n part=\"button\"\n ?disabled=${this.disabled || this.max === null || Number(this.control?.value) >= this.max}\n ?aria-disabled=${this.disabled || this.max === null || Number(this.control?.value) >= this.max}\n >\n <ease-icon-plus />\n </button>\n </ease-input>\n </div>\n `;\n }\n})\nexport class NumberInput extends HTMLElement {\n declare requestRender: () => void;\n @Prop<number | null>({ type: Number, reflect: true })\n accessor value!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor min!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor max!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor step!: number | null;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLInputElement>('input')\n accessor control!: HTMLInputElement | null;\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n control.value = this.value === null || this.value === undefined ? '' : String(this.value);\n control.min = this.min === null || this.min === undefined ? '' : String(this.min);\n control.max = this.max === null || this.max === undefined ? '' : String(this.max);\n control.step = this.step === null || this.step === undefined ? '' : String(this.step);\n control.name = this.name ?? '';\n control.disabled = Boolean(this.disabled);\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen<NumberInput, Event, HTMLInputElement>('input', { selector: 'input' })\n handleInput(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = coerceNumber(target.value);\n dispatchControlEvent(this, 'input', { value: this.value, event });\n }\n\n @Listen<NumberInput, Event, HTMLInputElement>('change', { selector: 'input' })\n handleChange(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n this.value = coerceNumber(target.value);\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n\n addActiveLayer(button: HTMLButtonElement): void {\n const layer = document.createElement('div');\n layer.classList.add('active-layer');\n button.appendChild(layer);\n\n setTimeout(() => {\n layer.remove();\n }, 600);\n }\n\n handleDecrement(event: MouseEvent): void {\n if (this.disabled || this.min === null || Number(this.control?.value) <= this.min) {\n return;\n }\n\n const button = event.currentTarget as HTMLButtonElement;\n this.addActiveLayer(button);\n\n const current = typeof this.value === 'number' ? this.value : 0;\n this.value = current - (this.step ?? 1);\n\n if (this.value <= this.min) {\n this.disabled = true;\n }\n }\n\n handleIncrement(event: MouseEvent): void {\n if (this.disabled || this.max === null || Number(this.control?.value) >= this.max) {\n return;\n }\n\n const button = event.currentTarget as HTMLButtonElement;\n this.addActiveLayer(button);\n\n const current = typeof this.value === 'number' ? this.value : 0;\n this.value = current + (this.step ?? 1);\n\n if (this.value >= this.max) {\n this.disabled = true;\n }\n }\n}\n","import '../dropdown';\n\nimport type { Dropdown } from '../dropdown';\n\nimport { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-origin',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"container\"] {\n flex: 1;\n width: 100%;\n display: grid;\n grid-template-columns: 30px auto;\n grid-gap: 8px;\n }\n\n [part=\"preview\"] {\n width: 30px;\n height: 30px;\n border-radius: var(--radii-md);\n background-color: var(--color-gray-875);\n cursor: pointer;\n box-shadow: inset 0 1px .25px 0 var(--color-white-4), 0 1px 2.5px 0 var(--color-black-8);\n border-radius: var(--radii-md);\n position: relative;\n\n &::before,\n &::after {\n content: '';\n display: block;\n width: 3px;\n height: 3px;\n background-color: var(--color-blue-100);\n border-radius: 50%;\n position: absolute;\n top: 50%;\n left: 50%;\n margin-top: -1.5px;\n margin-left: -1.5px;\n }\n\n &::before {\n background-color: var(--color-gray-700);\n box-shadow: -6.5px -6.5px 0 0 var(--color-gray-700), 0 -6.5px 0 0 var(--color-gray-700), 6.5px -6.5px 0 0 var(--color-gray-700), -6.5px 0 0 0 var(--color-gray-700), 6.5px 0 0 0 var(--color-gray-700), -6.5px 6.5px 0 0 var(--color-gray-700), 0 6.5px 0 0 var(--color-gray-700), 6.5px 6.5px 0 0 var(--color-gray-700);\n }\n\n &::after {\n translate: var(--ease-origin-translate-x, 0) var(--ease-origin-translate-y, 0);\n scale: 1.25;\n transition: translate 0.3s cubic-bezier(0.25, 0, 0.5, 1);\n }\n\n &:hover {\n background-color: var(--color-gray-850);\n }\n\n &:focus-within {\n background-color: var(--color-gray-825);\n }\n\n &[data-value=\"top-left\"] {\n --ease-origin-translate-x: -6.5px;\n --ease-origin-translate-y: -6.5px;\n }\n\n &[data-value=\"top-center\"] {\n --ease-origin-translate-x: 0;\n --ease-origin-translate-y: -6.5px; \n }\n \n &[data-value=\"top-right\"] {\n --ease-origin-translate-x: 6.5px;\n --ease-origin-translate-y: -6.5px;\n }\n\n &[data-value=\"center-left\"] {\n --ease-origin-translate-x: -6.5px;\n --ease-origin-translate-y: 0\n }\n\n &[data-value=\"center-center\"] {\n --ease-origin-translate-x: 0;\n --ease-origin-translate-y: 0;\n }\n\n &[data-value=\"center-right\"] {\n --ease-origin-translate-x: 6.5px;\n --ease-origin-translate-y: 0;\n }\n \n &[data-value=\"bottom-left\"] {\n --ease-origin-translate-x: -6.5px;\n --ease-origin-translate-y: 6.5px;\n }\n \n &[data-value=\"bottom-center\"] {\n --ease-origin-translate-x: 0;\n --ease-origin-translate-y: 6.5px;\n }\n \n &[data-value=\"bottom-right\"] {\n --ease-origin-translate-x: 6.5px;\n --ease-origin-translate-y: 6.5px;\n }\n }\n\n ease-dropdown[part=\"dropdown\"] {\n --ease-dropdown-max-height: 180px;\n\n width: 100%;\n }\n `,\n template(this: Origin) {\n return html`\n <div part=\"container\">\n <div part=\"preview\" data-value=${this.value ?? 'center-center'}></div>\n \n <ease-dropdown part=\"dropdown\" placeholder=\"Select\" id=\"origin-dropdown\" .value=${this.value ?? 'center-center'} fullWidth name=${this.name} @value-change=${this.handleValueChange}>\n <button slot=\"content\" value=\"top-left\">Top Left</button>\n <button slot=\"content\" value=\"top-center\">Top Center</button>\n <button slot=\"content\" value=\"top-right\">Top Right</button>\n <hr slot=\"content\" />\n <button slot=\"content\" value=\"center-left\">Center Left</button>\n <button slot=\"content\" value=\"center-center\">Center Center</button>\n <button slot=\"content\" value=\"center-right\">Center Right</button>\n <hr slot=\"content\" />\n <button slot=\"content\" value=\"bottom-left\">Bottom Left</button>\n <button slot=\"content\" value=\"bottom-center\">Bottom Center</button>\n <button slot=\"content\" value=\"bottom-right\">Bottom Right</button>\n </ease-dropdown>\n </div>\n `;\n }\n})\nexport class Origin extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<string>({ reflect: true, defaultValue: 'center-center' })\n accessor value: string = 'center-center';\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<Dropdown>('ease-dropdown')\n accessor control!: Dropdown | null;\n\n @Prop<string>({ reflect: true, defaultValue: '' })\n accessor name: string = '';\n\n afterRender(): void {\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen<Origin, Event, Dropdown>('change', { selector: 'ease-dropdown' })\n handleChange(event: Event, target?: Dropdown | null): void {\n if (!target) {\n return;\n }\n\n this.value = String(target.value ?? 'center-center');\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n\n handleValueChange = (event: Event): void => {\n this.value = String(this.control?.value ?? 'center-center');\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n };\n}\n","import { html, nothing, type TemplateResult } from 'lit-html';\n\nimport { setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n/**\n * Event detail for tab change events\n */\nexport interface TabChangeEventDetail {\n /** The index of the active tab */\n index: number;\n /** The tab id */\n id: string;\n /** The original event */\n event: Event;\n}\n\n/**\n * Panel component - visual container with optional tabs and header actions.\n *\n * Use this component when you want the panel UI without state management,\n * or wrap it around `<ease-state>` for full functionality.\n *\n * @tag ease-panel\n *\n * @slot headline - Panel title text (hidden when tabs are present)\n * @slot actions - Header action buttons, links, or dropdowns\n * @slot - Default slot for main content\n * @slot tab-{id} - Tab panel content (use `data-tab-label` for display name)\n * @slot footer - Footer content below all panels\n *\n * @csspart section - Outer container\n * @csspart header - Header row containing headline/tabs and actions\n * @csspart headline - Title element\n * @csspart tabs - Tab button container\n * @csspart tab - Individual tab button\n * @csspart actions - Actions container\n * @csspart content - Content wrapper (handles height animations)\n * @csspart body - Inner body container\n * @csspart items - Grid container for slotted content\n * @csspart tab-panel - Individual tab panel\n * @csspart footer - Footer container\n *\n * @fires tab-change - Fired when the active tab changes\n */\n@Component({\n tag: 'ease-panel',\n shadowMode: 'open',\n styles: `\n @property --top-fade {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n }\n\n @property --bottom-fade {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n }\n\n [part=\"section\"] {\n display: block;\n width: 100%;\n max-width: var(--ease-panel-max-width);\n border-radius: var(--ease-panel-radius);\n border: 1px solid var(--ease-panel-border-color);\n background-clip: padding-box;\n background-color: var(--ease-panel-background);\n box-shadow: var(--ease-panel-shadow);\n box-sizing: border-box;\n padding: var(--ease-panel-padding);\n margin: auto;\n }\n\n [part=\"header\"] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n margin-bottom: var(--ease-panel-header-spacing);\n }\n\n [part=\"header\"]:not(:has([part=\"headline\"] slot[name=\"headline\"]::slotted(*))):not(:has([part=\"tabs\"]:not(:empty))):not(:has([part=\"actions\"] slot[name=\"actions\"]::slotted(*))) {\n display: none;\n margin-bottom: 0;\n }\n\n [part=\"headline\"] {\n font-size: var(--ease-panel-title-font-size);\n font-weight: var(--ease-panel-title-font-weight);\n line-height: 24px;\n font-family: var(--ease-font-family);\n color: var(--ease-panel-title-color);\n margin: 0 0 0 4px;\n flex-grow: 1;\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n\n [part=\"headline\"]:has(+ [part=\"tabs\"]:not(:empty)) {\n display: none;\n }\n\n [part=\"tabs\"] {\n display: flex;\n align-items: center;\n gap: 2px;\n flex-grow: 1;\n margin: 0 0 0 4px;\n }\n\n [part=\"tabs\"]:empty {\n display: none;\n }\n\n [part=\"tab\"] {\n appearance: none;\n font-size: var(--ease-panel-tab-font-size);\n font-weight: var(--ease-panel-tab-font-weight);\n line-height: 24px;\n font-family: var(--ease-font-family);\n color: var(--ease-panel-tab-color);\n background-color: transparent;\n border: none;\n padding: 4px 8px;\n margin: 0;\n cursor: pointer;\n border-radius: var(--ease-panel-tab-radius);\n transition: color 200ms, background-color 200ms;\n transition-timing-function: cubic-bezier(.25, 0, .5, 1);\n }\n\n [part=\"tab\"]:hover {\n color: var(--ease-panel-tab-color-hover);\n }\n\n [part=\"tab\"][aria-selected=\"true\"] {\n color: var(--ease-panel-tab-color-active);\n background-color: var(--ease-panel-tab-background-active);\n }\n\n [part=\"actions\"] {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-left: auto;\n }\n\n slot[name=\"actions\"]::slotted(button),\n slot[name=\"actions\"]::slotted(a) {\n --ease-icon-size: var(--ease-panel-action-icon-size);\n\n appearance: none;\n flex: 0 0 24px;\n border: none;\n outline: none;\n background-color: transparent;\n padding: 4px;\n margin: 0;\n cursor: pointer;\n color: var(--color-gray-600);\n transition: color 200ms;\n transition-timing-function: cubic-bezier(.25, 0, .5, 1);\n text-decoration: none;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n slot[name=\"actions\"]::slotted(button:hover),\n slot[name=\"actions\"]::slotted(button:focus-visible),\n slot[name=\"actions\"]::slotted(a:hover),\n slot[name=\"actions\"]::slotted(a:focus-visible) {\n color: var(--color-blue-100);\n }\n\n slot[name=\"actions\"]::slotted(ease-dropdown) {\n flex: 0 0 auto;\n width: auto;\n\n --ease-icon-size: var(--ease-panel-action-icon-size, 16px);\n --ease-dropdown-trigger-padding: 4px;\n --ease-dropdown-radius: 6px;\n --ease-dropdown-background: transparent;\n --ease-dropdown-background-hover: transparent;\n --ease-dropdown-shadow: none;\n --ease-dropdown-color: var(--color-gray-600);\n --ease-popover-placement: bottom-end;\n }\n\n slot[name=\"actions\"]::slotted(ease-dropdown:hover),\n slot[name=\"actions\"]::slotted(ease-dropdown:focus-within) {\n --ease-dropdown-color: var(--color-blue-100);\n }\n\n [part=\"content\"] {\n display: block;\n width: 100%;\n box-sizing: border-box;\n margin: auto;\n overflow: hidden;\n }\n\n [part=\"content\"][data-animating=\"true\"] {\n transition: height 200ms cubic-bezier(.25, 0, .5, 1);\n }\n\n [part=\"body\"] {\n width: 100%;\n position: relative;\n overflow-y: auto;\n mask-image: linear-gradient(to bottom, #0000, #ffff var(--top-fade) calc(100% - var(--bottom-fade)), #0000);\n animation-name: scroll-fade;\n animation-timeline: scroll(self y);\n scroll-snap-type: y mandatory;\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n @keyframes scroll-fade {\n 0% {\n --top-fade: 0px;\n }\n 10%, 100% {\n --top-fade: var(--ease-panel-fade-size);\n }\n 0%, 90% {\n --bottom-fade: var(--ease-panel-fade-size);\n }\n 100% {\n --bottom-fade: 0px;\n }\n }\n\n [part=\"tab-panel\"] {\n width: 100%;\n pointer-events: none;\n display: none;\n }\n\n [part=\"tab-panel\"][data-state=\"active\"] {\n display: block;\n pointer-events: auto;\n }\n\n [part=\"tab-panel\"][data-state=\"hidden\"] {\n display: none;\n pointer-events: none;\n }\n\n [part=\"footer\"] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: var(--ease-panel-footer-padding);\n box-sizing: border-box;\n border-top: 1px solid var(--color-white-4);\n\n &:not(:has([data-has-content=\"true\"])) {\n display: none;\n }\n }\n\n [part=\"items\"] {\n display: grid;\n grid-gap: var(--ease-panel-gap);\n box-sizing: border-box;\n width: 100%;\n }\n `\n})\nexport class Panel extends HTMLElement {\n declare requestRender: () => void;\n\n #tabs: { id: string; label: string }[] = [];\n #isAnimating = false;\n\n @Prop<number>({\n type: Number,\n reflect: true,\n attribute: 'active-tab',\n defaultValue: 0,\n onChange(next, previous) {\n const self = this as Panel;\n if (next !== previous && previous !== undefined) {\n self.handleActiveTabChange(previous, next);\n }\n }\n })\n accessor activeTab: number = 0;\n\n @Prop<string | null>({\n reflect: true,\n attribute: 'headline',\n defaultValue: ''\n })\n accessor headline: string | null = null;\n\n @Prop<string | null>({\n reflect: true,\n attribute: 'max-height',\n defaultValue: null\n })\n accessor maxHeight: string | null = null;\n\n /** @internal */\n handleActiveTabChange(previous: number, next: number): void {\n this.performTabAnimation(previous, next);\n }\n\n @Query<HTMLElement>('[part=\"content\"]')\n accessor contentElement!: HTMLElement | null;\n\n @Query<HTMLElement>('[part=\"body\"]')\n accessor bodyElement!: HTMLElement | null;\n\n /**\n * Get the tab configuration\n */\n get tabs(): ReadonlyArray<{ id: string; label: string }> {\n return this.#tabs;\n }\n\n /**\n * Switch to a specific tab by index\n * @param index - The tab index (0-based)\n */\n setTab(index: number): void {\n if (index >= 0 && index < this.#tabs.length && index !== this.activeTab) {\n this.activeTab = index;\n }\n }\n\n connectedCallback(): void {\n this.#syncTabs();\n }\n\n afterRender(): void {\n this.#syncTabs();\n }\n\n render(): TemplateResult {\n const hasTabs = this.#tabs.length > 0;\n\n return html`\n <section part=\"section\">\n <div part=\"header\">\n <h3 part=\"headline\">${this.headline}</h3>\n ${this.#renderTabs()}\n <div part=\"actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n <div part=\"content\">\n <div part=\"body\" style=${this.maxHeight ? `max-height: ${this.maxHeight};` : ''}>\n ${hasTabs ? this.#renderTabPanels() : html`<div part=\"items\"><slot></slot></div>`}\n </div>\n </div>\n <div part=\"footer\">\n <slot name=\"footer\"></slot>\n </div>\n </section>\n `;\n }\n\n #renderTabs(): TemplateResult | typeof nothing {\n if (this.#tabs.length === 0) {\n return nothing;\n }\n\n return html`\n <div part=\"tabs\" role=\"tablist\">\n ${this.#tabs.map(\n (tab, index) => html`\n <button\n part=\"tab\"\n role=\"tab\"\n aria-selected=${index === this.activeTab ? 'true' : 'false'}\n aria-controls=${`panel-${tab.id}`}\n tabindex=${index === this.activeTab ? 0 : -1}\n @click=${(e: Event) => this.#handleTabClick(index, tab.id, e)}\n @keydown=${(e: KeyboardEvent) => this.#handleTabKeydown(e, index)}\n >\n ${tab.label}\n </button>\n `\n )}\n </div>\n `;\n }\n\n #renderTabPanels(): TemplateResult {\n return html`\n ${this.#tabs.map(\n (tab, index) => html`\n <div\n part=\"tab-panel\"\n role=\"tabpanel\"\n id=${`panel-${tab.id}`}\n aria-labelledby=${`tab-${tab.id}`}\n data-state=${index === this.activeTab ? 'active' : 'hidden'}\n data-index=${index}\n >\n <div part=\"items\">\n <slot name=${`tab-${tab.id}`}></slot>\n </div>\n </div>\n `\n )}\n `;\n }\n\n #handleTabClick(index: number, id: string, event: Event): void {\n if (index === this.activeTab) {\n return;\n }\n\n this.activeTab = index;\n\n this.dispatchEvent(\n new CustomEvent<TabChangeEventDetail>('tab-change', {\n detail: { index, id, event },\n bubbles: true,\n composed: true\n })\n );\n }\n\n #handleTabKeydown(event: KeyboardEvent, currentIndex: number): void {\n let newIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n newIndex = currentIndex > 0 ? currentIndex - 1 : this.#tabs.length - 1;\n break;\n case 'ArrowRight':\n event.preventDefault();\n newIndex = currentIndex < this.#tabs.length - 1 ? currentIndex + 1 : 0;\n break;\n case 'Home':\n event.preventDefault();\n newIndex = 0;\n break;\n case 'End':\n event.preventDefault();\n newIndex = this.#tabs.length - 1;\n break;\n default:\n return;\n }\n\n if (newIndex !== currentIndex) {\n this.activeTab = newIndex;\n\n // Focus the new tab button\n queueMicrotask(() => {\n const tabButtons = this.shadowRoot?.querySelectorAll('[part=\"tab\"]');\n const newTabButton = tabButtons?.[newIndex] as HTMLButtonElement | undefined;\n newTabButton?.focus();\n });\n }\n }\n\n async performTabAnimation(fromIndex: number, toIndex: number): Promise<void> {\n if (this.#isAnimating) {\n return;\n }\n\n this.#isAnimating = true;\n\n const duration = 120;\n const easing = 'cubic-bezier(.25, 0, .5, 1)';\n\n const content = this.contentElement;\n\n if (!content) {\n this.#isAnimating = false;\n this.requestRender();\n return;\n }\n\n // Get the panels by data-index attribute for reliability\n const fromPanel = this.shadowRoot?.querySelector(\n `[part=\"tab-panel\"][data-index=\"${fromIndex}\"]`\n ) as HTMLElement | null;\n const toPanel = this.shadowRoot?.querySelector(`[part=\"tab-panel\"][data-index=\"${toIndex}\"]`) as HTMLElement | null;\n\n if (!fromPanel || !toPanel) {\n this.#isAnimating = false;\n this.requestRender();\n return;\n }\n\n // Lock the current height\n const startHeight = content.getBoundingClientRect().height;\n content.style.height = `${startHeight}px`;\n\n // FIX: Ensure the new panel is hidden immediately.\n toPanel.style.display = 'none';\n toPanel.style.opacity = '0';\n\n // Fade out old content via WAAPI\n try {\n const fadeOut = fromPanel.animate([{ opacity: 1 }, { opacity: 0 }], { duration, easing, fill: 'forwards' });\n await fadeOut.finished;\n fadeOut.cancel();\n } catch {\n // ignore\n }\n\n fromPanel.setAttribute('data-state', 'hidden');\n\n // Prepare and measure new panel while completely invisible\n const previousToState = toPanel.getAttribute('data-state');\n\n toPanel.style.display = 'block';\n toPanel.style.visibility = 'hidden';\n toPanel.style.opacity = '0';\n\n // Force layout, then measure\n void toPanel.offsetHeight;\n const endHeight = toPanel.getBoundingClientRect().height;\n\n // Animate height\n if (startHeight !== endHeight) {\n content.setAttribute('data-animating', 'true');\n void content.offsetHeight;\n content.style.height = `${endHeight}px`;\n await this.#wait(duration);\n }\n\n // Show panel but keep opacity at 0, then fade in\n toPanel.style.visibility = 'visible';\n toPanel.style.opacity = '0';\n\n void toPanel.offsetHeight;\n\n try {\n const fadeIn = toPanel.animate([{ opacity: 0 }, { opacity: 1 }], { duration, easing, fill: 'forwards' });\n await fadeIn.finished;\n fadeIn.cancel();\n } catch {\n // ignore\n }\n\n // Finalize new tab state and cleanup\n toPanel.style.display = '';\n toPanel.style.visibility = '';\n toPanel.style.opacity = '';\n\n if (previousToState !== 'active') {\n toPanel.setAttribute('data-state', 'active');\n }\n\n content.style.height = '';\n content.removeAttribute('data-animating');\n this.#isAnimating = false;\n }\n\n #wait(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n #syncTabs(): void {\n const tabs: { id: string; label: string }[] = [];\n\n for (const child of Array.from(this.children)) {\n const slot = child.getAttribute('slot');\n if (slot?.startsWith('tab-')) {\n const id = slot.replace('tab-', '');\n const label = child.getAttribute('data-tab-label') || id;\n tabs.push({ id, label });\n }\n }\n\n this.#tabs = tabs.slice(0, 3);\n\n if (this.activeTab >= this.#tabs.length && this.#tabs.length > 0) {\n this.activeTab = 0;\n }\n }\n\n @Listen('slotchange', { selector: 'slot[name=\"footer\"]' })\n onFooterSlotChange(): void {\n this.updateFooterAttribute();\n }\n\n @Listen('slotchange', { selector: 'slot:not([name])' })\n onDefaultSlotChange(): void {\n this.#syncTabs();\n this.requestRender();\n }\n\n private updateFooterAttribute(): void {\n const footer = this.shadowRoot?.querySelector('[part=\"footer\"]');\n\n if (!footer) {\n return;\n }\n\n const footerSlot = this.shadowRoot?.querySelector('slot[name=\"footer\"]') as HTMLSlotElement;\n const hasFooter = Boolean(footerSlot?.assignedNodes({ flatten: true }).length > 0);\n setBooleanAttribute(footer, 'data-has-content', hasFooter);\n }\n}\n","import { html } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\nimport '../button';\n\nimport { dispatchControlEvent } from '../shared';\n\nexport * from './option';\n\ninterface RadioEntry {\n element: HTMLElement;\n value: string;\n label: string;\n id: string;\n handlers: {\n click: (event: Event) => void;\n keydown: (event: KeyboardEvent) => void;\n };\n}\nconst nextOptionId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-radio-option-${counter}`;\n };\n})();\n\nconst nextPanelId = (() => {\n let counter = 0;\n return () => {\n counter += 1;\n return `ease-radio-content-${counter}`;\n };\n})();\n\n@Component({\n tag: 'ease-radio-group',\n shadowMode: 'open',\n styles: `\n :host {\n display: flex;\n }\n\n [part=\"option\"] {\n flex: 0 0 50%;\n display: block;\n }\n\n [part=\"group\"] {\n display: flex;\n position: relative;\n z-index: 0;\n box-sizing: border-box;\n width: 100%;\n min-width: 0;\n padding: var(--ease-radio-padding, 3px);\n border-radius: var(--ease-radio-radius, var(--radii-md));\n background-color: var(--ease-radio-background, var(--color-gray-875));\n box-shadow: var(\n --ease-radio-shadow,\n inset 0 1px 0.25px 0 var(--color-white-4),\n 0 1px 2.5px 0 var(--color-black-8)\n );\n\n ::slotted(button) {\n padding: var(--ease-radio-option-padding, 4px 0);\n line-height: var(--ease-radio-option-line-height, 16px);\n margin: 0;\n border: none;\n outline: none;\n background: none;\n cursor: pointer;\n font-family: var(--ease-font-family, inherit);\n font-optical-sizing: auto;\n font-size: var(--ease-radio-option-font-size, var(--ease-font-size-sm, 12px));\n font-weight: var(--ease-radio-option-font-weight, 500);\n color: var(--ease-radio-option-color, var(--color-gray-600));\n transition: color 0.2s;\n flex-grow: 1;\n }\n\n ::slotted(button:hover),\n ::slotted(button:focus-visible) {\n color: var(--color-blue-100);\n }\n\n ::slotted(button[data-active=\"true\"]) {\n color: var(--color-blue-100);\n }\n }\n `,\n template() {\n return html`\n <div part=\"group\">\n <slot name=\"content\"></slot>\n </div>\n `;\n }\n})\nexport class RadioGroup extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<string | null, RadioGroup>({\n reflect: true,\n defaultValue: null,\n onChange(this: RadioGroup, next, previous) {\n if (next === previous) {\n return;\n }\n this.updateOptionSelectionState();\n }\n })\n accessor value: string | null = null;\n\n @Query<HTMLElement>('[part=\"group\"]')\n accessor groupElement!: HTMLElement | null;\n\n @Query<HTMLSlotElement>('slot[name=\"content\"]')\n accessor contentSlot!: HTMLSlotElement | null;\n\n #options: RadioEntry[] = [];\n #currentSlot: HTMLSlotElement | null = null;\n #optionsInitialized = false;\n #handleSlotChange = (): void => {\n this.#syncOptions();\n };\n\n connectedCallback(): void {\n this.#ensureSlotListener();\n }\n\n disconnectedCallback(): void {\n this.#removeSlotListener();\n this.#teardownOptions();\n }\n\n afterRender(): void {\n const panel = this.groupElement;\n\n if (panel) {\n if (!panel.id) {\n panel.id = nextPanelId();\n }\n panel.tabIndex = -1;\n panel.setAttribute('role', 'radiogroup');\n }\n\n this.#ensureSlotListener();\n\n if (!this.#optionsInitialized) {\n queueMicrotask(() => {\n this.#syncOptions();\n });\n } else {\n this.updateOptionSelectionState();\n }\n }\n\n #ensureSlotListener(): void {\n const slot = this.contentSlot;\n\n if (slot === this.#currentSlot) {\n return;\n }\n\n if (this.#currentSlot) {\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n }\n\n if (slot) {\n slot.addEventListener('slotchange', this.#handleSlotChange);\n }\n\n this.#currentSlot = slot ?? null;\n }\n\n #removeSlotListener(): void {\n if (!this.#currentSlot) {\n return;\n }\n\n this.#currentSlot.removeEventListener('slotchange', this.#handleSlotChange);\n this.#currentSlot = null;\n }\n\n #syncOptions(): void {\n const assigned = this.contentSlot?.assignedElements({ flatten: true }) ?? [];\n const elements = assigned.filter((node): node is HTMLElement => node instanceof HTMLElement);\n\n this.#removeOptionListeners(this.#options);\n\n const options: RadioEntry[] = [];\n\n elements.forEach((element) => {\n if (element.hasAttribute('data-select-ignore') || element.getAttribute('role') === 'separator') {\n return;\n }\n\n const value = this.#resolveOptionValue(element);\n const label = this.#resolveOptionLabel(element, value);\n const id = element.id && element.id.trim().length > 0 ? element.id : nextOptionId();\n\n if (!element.id) {\n element.id = id;\n }\n\n element.setAttribute('role', 'option');\n element.setAttribute('aria-selected', 'false');\n element.setAttribute('variant', this.value === value ? 'default' : 'link');\n element.dataset.active = 'false';\n element.tabIndex = -1;\n\n const handlers = {\n click: (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n this.#selectOption(value, label, event);\n },\n keydown: (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.#selectOption(value, label, event);\n }\n }\n } as RadioEntry['handlers'];\n\n element.addEventListener('click', handlers.click, { passive: false });\n element.addEventListener('keydown', handlers.keydown);\n\n options.push({ element, value, label, id, handlers });\n });\n\n this.#options = options;\n this.#optionsInitialized = options.length > 0;\n\n if (this.value === null && options.length > 0) {\n const preselected = options.find(\n (option) =>\n option.element.hasAttribute('selected') ||\n option.element.dataset.selected === 'true' ||\n option.element.getAttribute('aria-selected') === 'true'\n );\n\n if (preselected) {\n this.value = preselected.value;\n }\n }\n\n this.updateOptionSelectionState();\n }\n\n #teardownOptions(): void {\n this.#removeOptionListeners(this.#options);\n this.#options = [];\n this.#optionsInitialized = false;\n }\n\n #removeOptionListeners(options: RadioEntry[]): void {\n options.forEach((option) => {\n option.element.removeEventListener('click', option.handlers.click);\n option.element.removeEventListener('keydown', option.handlers.keydown);\n option.element.dataset.active = 'false';\n option.element.setAttribute('aria-selected', 'false');\n option.element.tabIndex = -1;\n });\n }\n\n updateOptionSelectionState(): void {\n if (!this.#optionsInitialized) {\n return;\n }\n\n let selectedLabel: string | null = null;\n\n const options = this.#options;\n\n options.forEach((option) => {\n const isSelected = this.value !== null && option.value === this.value;\n option.element.setAttribute('aria-selected', isSelected ? 'true' : 'false');\n option.element.dataset.active = isSelected ? 'true' : 'false';\n option.element.tabIndex = isSelected ? 0 : -1;\n option.element.setAttribute('variant', isSelected ? 'default' : 'link');\n\n if (isSelected) {\n selectedLabel = option.label;\n }\n });\n\n if (!selectedLabel) {\n const fallback = options[0];\n if (fallback) {\n fallback.element.tabIndex = 0;\n }\n }\n const hasValue = Boolean(this.value && selectedLabel);\n this.toggleAttribute('data-has-value', hasValue);\n }\n\n #selectOption(value: string, label: string, originEvent: Event): void {\n originEvent.preventDefault();\n originEvent.stopPropagation();\n\n const previousValue = this.value;\n this.value = value;\n\n if (previousValue !== value) {\n this.#dispatchValueChange(value, label, originEvent);\n }\n }\n\n #resolveOptionValue(element: HTMLElement): string {\n const explicitValue = element.getAttribute('value') ?? element.getAttribute('data-value') ?? element.dataset.value;\n\n if (explicitValue && explicitValue.trim().length > 0) {\n return explicitValue.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n const fallback = nextOptionId();\n element.dataset.value = fallback;\n return fallback;\n }\n\n #resolveOptionLabel(element: HTMLElement, fallback: string): string {\n const explicitLabel = element.getAttribute('data-label') ?? element.getAttribute('aria-label');\n\n if (explicitLabel && explicitLabel.trim().length > 0) {\n return explicitLabel.trim();\n }\n\n const text = element.textContent?.trim();\n\n if (text && text.length > 0) {\n return text;\n }\n\n return fallback;\n }\n\n #dispatchValueChange(value: string, label: string, event: Event): void {\n dispatchControlEvent(this, 'change', { value, event });\n\n this.dispatchEvent(\n new CustomEvent('value-change', {\n detail: { value, label, event },\n bubbles: true,\n composed: true\n })\n );\n }\n}\n","export class RadioOption extends HTMLElement {\n connectedCallback(): void {\n this.hidden = true;\n if (!this.hasAttribute('slot')) {\n this.setAttribute('slot', 'option');\n }\n }\n}\n\nif (!customElements.get('radio-option')) {\n customElements.define('radio-option', RadioOption);\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-radio-input',\n shadowMode: 'open',\n styles: `\n .radio {\n display: table;\n border-radius: var(--ease-radio-input-radius, 12px);\n position: relative;\n }\n\n [part=\"radio\"] {\n display: table;\n appearance: none;\n outline: none;\n border: none;\n background: none;\n margin: 0;\n padding: 0;\n border-radius: inherit;\n }\n\n [part=\"control\"] {\n appearance: none;\n outline: none;\n border: none;\n background: none;\n display: block;\n cursor: pointer;\n margin: 0;\n padding: 0;\n border-radius: inherit;\n width: var(--ease-radio-input-size, 24px);\n height: var(--ease-radio-input-size, 24px);\n }\n\n .radio svg {\n display: block;\n position: absolute;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n pointer-events: none;\n fill: var(--ease-radio-input-dot-color, var(--color-blue-100));\n transform: scale(1.01) translateZ(0);\n }\n\n [part=\"control\"] {\n box-shadow: inset 0 0 0 var(--ease-radio-input-border-width, 2px) var(--ease-radio-input-border-color, var(--color-gray-700));\n }\n\n .radio svg .top {\n transform-origin: 12px -12px;\n transform: translateY(0) scale(1.75, 1) translateZ(0);\n opacity: 0;\n }\n\n .radio svg .dot {\n transform: translateY(-17px) translateZ(0);\n opacity: 0;\n }\n\n .radio svg .drop {\n transform: translateY(-14px) translateZ(0);\n opacity: 0;\n }\n\n [part=\"control\"]:checked {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-size, 6.75px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n\n [part=\"control\"]:checked + svg .top {\n transform: translateY(0px) scale(1.75, 1) translateZ(0);\n opacity: 1;\n }\n\n [part=\"control\"]:checked + svg .dot {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n\n [part=\"control\"]:checked + svg .drop {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n\n [part=\"control\"].anim-checked {\n animation: radio-border-expand 0.8s ease-out forwards;\n }\n\n [part=\"control\"].anim-checked + svg .top {\n animation: radio-top 0.8s ease-out 0.2s forwards;\n }\n\n [part=\"control\"].anim-checked + svg .dot {\n animation: radio-dot 0.6s ease-out 0.2s forwards;\n }\n\n [part=\"control\"].anim-checked + svg .drop {\n animation: radio-drop 0.6s ease-out 0.4s forwards;\n }\n\n [part=\"control\"].anim-unchecked {\n animation: radio-border-contract 0.8s ease-out forwards;\n }\n\n [part=\"control\"].anim-unchecked + svg .top {\n animation: radio-top-reverse 0.8s ease-out forwards;\n }\n\n [part=\"control\"].anim-unchecked + svg .dot {\n animation: radio-dot-reverse 0.6s ease-out forwards;\n }\n\n [part=\"control\"].anim-unchecked + svg .drop {\n animation: radio-drop-reverse 0.6s ease-out forwards;\n }\n\n @keyframes radio-border-expand {\n 0% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-border-width, 2px) var(--ease-radio-input-border-color, var(--color-gray-700));\n }\n 25% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-max, 12px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-size, 6.75px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n }\n\n @keyframes radio-top {\n 0% {\n transform: translateY(0) scale(1.75, 1) translateZ(0);\n }\n 25% {\n transform: translateY(6px) scale(1, 1.25) translateZ(0);\n }\n 100% {\n transform: translateY(0px) scale(1.75, 1) translateZ(0);\n }\n }\n\n @keyframes radio-dot {\n 0% {\n transform: translateY(-17px) translateZ(0);\n }\n 50% {\n transform: translateY(2px) translateZ(0);\n }\n 100% {\n transform: translateY(0px) translateZ(0);\n }\n }\n\n @keyframes radio-drop {\n 0% {\n transform: translateY(-14px) translateZ(0);\n }\n 100% {\n transform: translateY(0px) translateZ(0);\n }\n }\n\n @keyframes radio-border-contract {\n 0% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-size, 6.75px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n 75% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-checked-fill-max, 12px) var(--ease-radio-input-checked-fill, var(--color-blue-800));\n }\n 100% {\n box-shadow: inset 0 0 0 var(--ease-radio-input-border-width, 2px) var(--ease-radio-input-border-color, var(--color-gray-700));\n }\n }\n\n @keyframes radio-top-reverse {\n 0% {\n transform: translateY(0px) scale(1.75, 1) translateZ(0);\n opacity: 1;\n }\n 75% {\n transform: translateY(6px) scale(1, 1.25) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translateY(0) scale(1.75, 1) translateZ(0);\n opacity: 0;\n }\n }\n\n @keyframes radio-dot-reverse {\n 0% {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n 50% {\n transform: translateY(2px) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translateY(-17px) translateZ(0);\n opacity: 0;\n }\n }\n\n @keyframes radio-drop-reverse {\n 0% {\n transform: translateY(0px) translateZ(0);\n opacity: 1;\n }\n 100% {\n transform: translateY(-14px) translateZ(0);\n opacity: 0;\n }\n }\n `,\n template(this: RadioInput) {\n return html`\n <button part=\"radio\" type=\"button\" role=\"radio\" aria-checked=${this.checked} ?disabled=${this.disabled}>\n <div class=\"radio\">\n <input part=\"control\" name=${this.name} value=${this.value} ?checked=${this.checked} ?disabled=${this.disabled} type=\"radio\" />\n <svg viewBox=\"0 0 24 24\" filter=\"url(#${this.filterId})\">\n <circle class=\"top\" cx=\"12\" cy=\"-12\" r=\"8\" />\n <circle class=\"dot\" cx=\"12\" cy=\"12\" r=\"5\" />\n <circle class=\"drop\" cx=\"12\" cy=\"12\" r=\"2\" />\n </svg>\n </div>\n\n <svg style=\"display: none;\">\n <defs>\n <filter id=\"${this.filterId}\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"1.25\" result=\"blur\" />\n <feColorMatrix in=\"blur\" mode=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9\" result=\"gooey\" />\n <feBlend in=\"SourceGraphic\" in2=\"gooey\" />\n </filter>\n </defs>\n </svg>\n </button>\n `;\n }\n})\nexport class RadioInput extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<boolean, RadioInput>({\n type: Boolean,\n reflect: true,\n onChange(this: RadioInput, next: boolean) {\n if (next && this.name) {\n const form = this.closest('form');\n const root = form ?? (this.getRootNode() as Document | ShadowRoot);\n const others = Array.from(root.querySelectorAll(`ease-radio-input[name=\"${this.name}\"]`)) as RadioInput[];\n\n others.forEach((other) => {\n if (other !== this && other.checked) {\n other.checked = false;\n }\n });\n }\n }\n })\n accessor checked!: boolean;\n\n @Prop<string | null>({ reflect: true })\n accessor name!: string | null;\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLButtonElement>('button')\n accessor control!: HTMLButtonElement | null;\n\n private _prevChecked?: boolean;\n private _firstRender = true;\n\n filterId: string = `goo-${crypto.randomUUID()}`;\n\n connectedCallback(): void {\n this._prevChecked = this.checked;\n }\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n if (this._firstRender) {\n this._firstRender = false;\n this._prevChecked = this.checked;\n }\n\n const changed = typeof this._prevChecked !== 'undefined' && this.checked !== this._prevChecked;\n if (changed) {\n this._triggerAnimation(this.checked);\n this._prevChecked = this.checked;\n }\n\n const control = this.control;\n control.setAttribute('aria-checked', this.checked ? 'true' : 'false');\n control.disabled = Boolean(this.disabled);\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n private _triggerAnimation(checked: boolean): void {\n const input = this.shadowRoot?.querySelector('[part=\"control\"]') as HTMLInputElement;\n const svg = this.shadowRoot?.querySelector('svg[viewBox=\"0 0 24 24\"]');\n if (!input || !svg) {\n return;\n }\n\n input.classList.remove('anim-checked', 'anim-unchecked');\n svg.classList.remove('anim-checked', 'anim-unchecked');\n\n const animClass = checked ? 'anim-checked' : 'anim-unchecked';\n input.classList.add(animClass);\n svg.classList.add(animClass);\n\n const duration = 800; // Longest animation duration in ms\n\n setTimeout(() => {\n input.classList.remove(animClass);\n svg.classList.remove(animClass);\n }, duration);\n }\n\n @Listen<RadioInput, MouseEvent, HTMLButtonElement>('click', { selector: 'button' })\n handleClick(event: MouseEvent): void {\n if (this.disabled || this.checked) {\n event.preventDefault();\n event.stopPropagation();\n\n return;\n }\n\n this.checked = true;\n\n dispatchControlEvent(this, 'radio', { value: this.checked, event });\n }\n}\n","import '../input';\n\nimport { html } from 'lit-html';\n\nimport { type ControlEventDetail, coerceNumber, dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-slider',\n styles: `\n :host {\n display: contents;\n --track-color: var(--ease-slider-track-color, var(--color-gray-825));\n --active-track-color: var(--ease-slider-active-track-color, var(--color-blue-1100));\n --thumb-color: var(--ease-slider-thumb-color, var(--color-blue-900));\n --thumb-size: var(--ease-slider-thumb-size, 18px);\n --track-height: var(--ease-slider-track-height, 4px);\n }\n\n [part=\"container\"] {\n flex: 1;\n display: grid;\n grid-template-columns: auto var(--ease-slider-value-width, 36px);\n grid-gap: var(--ease-slider-gap, 12px);\n }\n\n ease-input[part=\"value\"] {\n --ease-input-padding: 8px 0;\n min-width: 0;\n text-align: center;\n width: var(--ease-slider-value-width, 36px);\n font-variant-numeric: tabular-nums;\n font-feature-settings: \"tnum\";\n font-family: var(--ease-font-mono, 'Geist Mono', monospace);\n }\n\n input[part=\"control\"][type=\"range\"] {\n height: var(--ease-slider-height, 30px);\n margin: 0;\n padding: 0;\n appearance: none;\n background-color: transparent;\n width: 100%;\n cursor: pointer;\n }\n\n input[part=\"control\"][type=\"range\"]::-webkit-slider-runnable-track {\n width: 100%;\n height: var(--track-height);\n background: linear-gradient(to right, var(--active-track-color) var(--progress, 0%), var(--track-color) var(--progress, 0%));\n border-radius: calc(var(--track-height) / 2);\n border: none;\n }\n\n input[part=\"control\"][type=\"range\"]::-moz-range-track {\n width: 100%;\n height: var(--track-height);\n background: var(--track-color);\n border-radius: calc(var(--track-height) / 2);\n border: none;\n }\n\n input[part=\"control\"][type=\"range\"]::-moz-range-progress {\n background-color: var(--active-track-color);\n height: var(--track-height);\n border-radius: calc(var(--track-height) / 2);\n }\n\n input[part=\"control\"][type=\"range\"]::-webkit-slider-thumb {\n appearance: none;\n height: var(--thumb-size);\n width: var(--thumb-size);\n border-radius: 50%;\n margin-top: calc((var(--track-height) - var(--thumb-size)) / 2);\n box-shadow: inset 0 0 0 .75px var(--color-white-15), inset 0 0 5px var(--color-white-20);\n transition: transform 0.2s;\n position: relative;\n background: radial-gradient(circle at center, var(--color-blue-100-50) 4.5px, var(--color-white-0) 4.5px), var(--thumb-color) no-repeat center center;\n }\n \n input[part=\"control\"][type=\"range\"]:hover::-webkit-slider-thumb {\n transform: scale(1.075);\n }\n \n input[part=\"control\"][type=\"range\"]:active::-webkit-slider-thumb {\n transform: scale(.975);\n }\n\n input[part=\"control\"][type=\"range\"]::-moz-range-thumb {\n height: var(--thumb-size);\n width: var(--thumb-size);\n border-radius: 50%;\n background: radial-gradient(circle at center, var(--color-blue-100-50) 4.5px, var(--color-white-0) 4.5px), var(--thumb-color) no-repeat center center;\n border: none;\n box-shadow: inset 0 0 0 .75px var(--color-white-15), inset 0 0 5px var(--color-white-20);\n transition: transform 0.2s;\n position: relative;\n }\n\n input[part=\"control\"][type=\"range\"]:hover::-moz-range-thumb {\n transform: scale(1.075);\n }\n\n input[part=\"control\"][type=\"range\"]:active::-moz-range-thumb {\n transform: scale(.975);\n }\n `,\n template(this: Slider) {\n return html`\n <div part=\"container\">\n <input\n part=\"control\"\n type=\"range\"\n .min=${this.min ?? 0}\n .max=${this.max ?? 100}\n .step=${this.step ?? 1}\n .value=${String(this.value ?? 0)}\n ?disabled=${this.disabled}\n ?aria-disabled=${this.disabled}\n />\n \n <ease-input\n part=\"value\"\n type=\"number\"\n placeholder=\"-\"\n .disabled=${Boolean(this.disabled)}\n .value=${this.value === null || this.value === undefined ? '' : String(this.value)}\n />\n </div>\n `;\n }\n})\nexport class Slider extends HTMLElement {\n declare requestRender: () => void;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor value!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor min!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor max!: number | null;\n\n @Prop<number | null>({ type: Number, reflect: true })\n accessor step!: number | null;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLInputElement>('input')\n accessor control!: HTMLInputElement | null;\n\n @Query<HTMLElement>('ease-input')\n accessor valueControl!: (HTMLElement & { value?: string | null }) | null;\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n const value = this.value ?? 0;\n\n control.value = String(value);\n control.min = this.min === null || this.min === undefined ? '' : String(this.min);\n control.max = this.max === null || this.max === undefined ? '' : String(this.max);\n control.step = this.step === null || this.step === undefined ? '' : String(this.step);\n control.type = 'range';\n control.setAttribute('part', 'control');\n control.disabled = Boolean(this.disabled);\n\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n this.updateProgress();\n }\n\n @Listen<Slider, Event, HTMLInputElement>('input', { selector: 'input[type=\"range\"]' })\n handleRangeInput(event: Event, target?: HTMLInputElement | null): void {\n if (!target) {\n return;\n }\n\n const numericValue = coerceNumber(target.value);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.valueControl) {\n this.valueControl.value = numericValue === null ? '' : String(numericValue);\n }\n\n dispatchControlEvent(this, 'input', { value: this.value, event });\n }\n\n @Listen<Slider, Event, HTMLInputElement>('change', { selector: 'input[type=\"range\"]' })\n handleRangeChange(event: Event, target?: HTMLInputElement | null): void {\n if (target) {\n const numericValue = coerceNumber(target.value);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.valueControl) {\n this.valueControl.value = numericValue === null ? '' : String(numericValue);\n }\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event });\n }\n\n @Listen<Slider, CustomEvent<ControlEventDetail<string>>, HTMLElement>('input', {\n selector: 'ease-input',\n when: (event) => event instanceof CustomEvent && typeof (event as CustomEvent).detail?.value === 'string'\n })\n handleValueInput(event: CustomEvent<ControlEventDetail<string>>): void {\n const rawValue = event.detail?.value ?? '';\n const numericValue = coerceNumber(rawValue);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.control) {\n this.control.value = String(numericValue ?? 0);\n }\n\n dispatchControlEvent(this, 'input', { value: this.value, event: event.detail?.event ?? event });\n }\n\n @Listen<Slider, CustomEvent<ControlEventDetail<string>>, HTMLElement>('change', {\n selector: 'ease-input',\n when: (event) => event instanceof CustomEvent && typeof (event as CustomEvent).detail?.value === 'string'\n })\n handleValueChange(event: CustomEvent<ControlEventDetail<string>>): void {\n const rawValue = event.detail?.value ?? '';\n const numericValue = coerceNumber(rawValue);\n this.value = numericValue;\n this.updateProgress();\n\n if (this.control) {\n this.control.value = String(numericValue ?? 0);\n }\n\n dispatchControlEvent(this, 'change', { value: this.value, event: event.detail?.event ?? event });\n }\n\n updateProgress(): void {\n if (!this.control) {\n return;\n }\n\n // Ensure numeric coercion for proper calculation\n const value = Number(this.value) || 0;\n const min = Number(this.min) || 0;\n const max = Number(this.max) || 100;\n const percent = max === min ? 0 : ((value - min) / (max - min)) * 100;\n this.control.style.setProperty('--progress', `${Math.max(0, Math.min(100, percent))}%`);\n }\n}\n","import { html, type TemplateResult } from 'lit-html';\n\nimport { CONTROL_CHANGE_EVENT, type ControlEventDetail, dispatchControlEvent } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\ntype ControlElement = Element & {\n value?: unknown;\n checked?: unknown;\n name?: string;\n};\n\ntype StateChangeCallback<T = unknown> = (value: T, name: string) => void;\ntype StateSubscription = { unsubscribe: () => void };\n\n/**\n * Event detail for state change events\n */\nexport interface StateChangeEventDetail {\n /** The name of the control that changed */\n name: string;\n /** The new value */\n value: unknown;\n /** The complete state object */\n state: Record<string, unknown>;\n /** The original event */\n event: Event;\n}\n\nconst readControlValue = (element: ControlElement): unknown => {\n if (typeof element.value === 'string' || typeof element.value === 'number') {\n return element.value;\n }\n\n if (typeof element.checked === 'boolean') {\n return element.checked;\n }\n\n if ('getAttribute' in element) {\n const attr = (element as Element).getAttribute('value');\n if (attr !== null) {\n return attr;\n }\n }\n\n return element.textContent?.trim() ?? null;\n};\n\nconst getControlName = (element: ControlElement): string | null => {\n if (typeof element.name === 'string' && element.name) {\n return element.name;\n }\n return element.getAttribute?.('name') ?? null;\n};\n\n/**\n * State aggregator component - collects and manages state from child controls.\n *\n * This component provides state management without any visual styling.\n * Use it standalone or wrap it with `<ease-panel>` for a styled container.\n *\n * @tag ease-state\n *\n * @slot - Default slot for controls\n *\n * @fires state-change - Fired when any control value changes\n *\n * @example\n * ```html\n * <!-- Standalone usage (no panel) -->\n * <ease-state>\n * <ease-field label=\"Duration\">\n * <ease-slider name=\"duration\" value=\"1\" min=\"0\" max=\"5\"></ease-slider>\n * </ease-field>\n * <ease-field label=\"Loop\">\n * <ease-toggle name=\"loop\"></ease-toggle>\n * </ease-field>\n * </ease-state>\n *\n * <!-- With panel wrapper -->\n * <ease-panel>\n * <span slot=\"headline\">Animation Controls</span>\n * <ease-state>\n * <ease-field label=\"Duration\">\n * <ease-slider name=\"duration\" value=\"1\" min=\"0\" max=\"5\"></ease-slider>\n * </ease-field>\n * </ease-state>\n * </ease-panel>\n * ```\n */\n@Component({\n tag: 'ease-state',\n shadowMode: 'open',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"container\"] {\n display: grid;\n grid-gap: var(--ease-panel-gap);\n box-sizing: border-box;\n width: 100%;\n }\n `\n})\nexport class State extends HTMLElement {\n declare requestRender: () => void;\n\n #controls: Map<string, ControlElement> = new Map();\n #state: Record<string, unknown> = {};\n #initialState: Record<string, unknown> = {};\n #subscribers: Map<string | '*', Set<StateChangeCallback>> = new Map();\n\n @Prop<string | null>({ reflect: true })\n accessor value!: string | null;\n\n @Query<HTMLSlotElement>('slot')\n accessor defaultSlot!: HTMLSlotElement | null;\n\n /**\n * Get the current state object with all control values\n */\n get state(): Readonly<Record<string, unknown>> {\n return { ...this.#state };\n }\n\n /**\n * Get a specific control value by name\n * @param name - The control name\n * @returns The control value or undefined\n */\n get(name: string): unknown {\n return this.#state[name];\n }\n\n /**\n * Set a control value programmatically\n * @param name - The control name\n * @param value - The new value\n */\n set(name: string, value: unknown): void {\n const control = this.#controls.get(name);\n if (control) {\n // Update the control element\n if ('value' in control) {\n (control as { value: unknown }).value = value;\n } else if (typeof value === 'boolean' && 'checked' in control) {\n (control as { checked: boolean }).checked = value;\n }\n }\n\n this.#updateState(name, value, new Event('programmatic'));\n }\n\n /**\n * Subscribe to state changes\n * @param nameOrCallback - Control name to watch, '*' for all, or callback for all changes\n * @param callback - Callback when using name filter\n * @returns Subscription with unsubscribe method\n */\n subscribe(callback: StateChangeCallback): StateSubscription;\n subscribe(name: string, callback: StateChangeCallback): StateSubscription;\n subscribe(nameOrCallback: string | StateChangeCallback, callback?: StateChangeCallback): StateSubscription {\n let name: string;\n let cb: StateChangeCallback;\n\n if (typeof nameOrCallback === 'function') {\n name = '*';\n cb = nameOrCallback;\n } else {\n name = nameOrCallback;\n if (!callback) {\n throw new Error('[ease-state] subscribe(name, callback) requires a callback');\n }\n cb = callback;\n }\n\n if (!this.#subscribers.has(name)) {\n this.#subscribers.set(name, new Set());\n }\n this.#subscribers.get(name)?.add(cb);\n\n return {\n unsubscribe: () => {\n this.#subscribers.get(name)?.delete(cb);\n }\n };\n }\n\n /**\n * Reset all controls to their initial values\n */\n reset(): void {\n for (const [name, value] of Object.entries(this.#initialState)) {\n this.set(name, value);\n }\n }\n\n connectedCallback(): void {\n this.#attach();\n this.defaultSlot?.addEventListener('slotchange', this.#handleSlotChange);\n }\n\n disconnectedCallback(): void {\n this.#detach();\n this.defaultSlot?.removeEventListener('slotchange', this.#handleSlotChange);\n }\n\n render(): TemplateResult {\n return html`\n <div part=\"container\">\n <slot></slot>\n </div>\n `;\n }\n\n @Listen<State, CustomEvent<ControlEventDetail>>('input', { target: (host) => host })\n handleInternalInput(event: CustomEvent<ControlEventDetail>): void {\n this.#handleControlEvent(event);\n }\n\n @Listen<State, CustomEvent<ControlEventDetail>>('change', { target: (host) => host })\n handleInternalChange(event: CustomEvent<ControlEventDetail>): void {\n this.#handleControlEvent(event);\n }\n\n @Listen<State, CustomEvent<ControlEventDetail>>(CONTROL_CHANGE_EVENT, { target: (host) => host })\n handleControlChange(event: CustomEvent<ControlEventDetail>): void {\n this.#handleControlEvent(event);\n }\n\n #handleControlEvent(event: Event | CustomEvent<ControlEventDetail>): void {\n if ('detail' in event && event.detail?.name) {\n this.#updateState(event.detail.name, event.detail.value, event);\n return;\n }\n\n if (!(event.target instanceof Element)) {\n return;\n }\n\n const control = event.target as ControlElement;\n const name = getControlName(control);\n\n if (!name || !this.#controls.has(name)) {\n return;\n }\n\n const value = readControlValue(control);\n this.#updateState(name, value, event);\n }\n\n #handleSlotChange = (): void => {\n this.#detach();\n this.#attach();\n };\n\n #attach(): void {\n const slot = this.defaultSlot;\n if (!slot) {\n return;\n }\n\n const findControls = (el: Element): ControlElement[] => {\n const controls: ControlElement[] = [];\n const name = getControlName(el as ControlElement);\n\n if (name) {\n controls.push(el as ControlElement);\n }\n\n if (el.shadowRoot) {\n for (const child of el.shadowRoot.querySelectorAll('[name]')) {\n const childName = getControlName(child as ControlElement);\n if (childName) {\n controls.push(child as ControlElement);\n }\n }\n }\n\n for (const child of el.querySelectorAll('[name]')) {\n const childName = getControlName(child as ControlElement);\n if (childName) {\n controls.push(child as ControlElement);\n }\n }\n\n return controls;\n };\n\n this.#controls.clear();\n this.#state = {};\n\n const elements = slot.assignedElements({ flatten: true });\n\n for (const element of elements) {\n const controls = findControls(element);\n for (const control of controls) {\n const name = getControlName(control);\n if (name) {\n this.#controls.set(name, control);\n const value = readControlValue(control);\n this.#state[name] = value;\n this.#initialState[name] = value;\n }\n }\n }\n\n const first = this.#controls.values().next().value;\n if (first) {\n const name = getControlName(first);\n this.value = name && this.#state[name] != null ? String(this.#state[name]) : null;\n }\n }\n\n #detach(): void {\n this.#controls.clear();\n }\n\n #updateState(name: string, value: unknown, event: Event): void {\n const prevValue = this.#state[name];\n if (prevValue === value) {\n return;\n }\n\n this.#state[name] = value;\n\n this.value = String(value);\n\n for (const cb of this.#subscribers.get(name) ?? []) {\n cb(value, name);\n }\n for (const cb of this.#subscribers.get('*') ?? []) {\n cb(value, name);\n }\n\n dispatchControlEvent(this, 'state-change', {\n name,\n value,\n state: this.state,\n event\n } as StateChangeEventDetail & { event: Event });\n }\n}\n","import { html } from 'lit-html';\n\nimport { dispatchControlEvent, setBooleanAttribute } from '../shared';\n\nimport { Component } from '~/decorators/Component';\nimport { Listen } from '~/decorators/Listen';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-toggle',\n styles: `\n :host {\n display: contents;\n }\n\n [part=\"control\"] {\n display: block;\n border-radius: var(--ease-toggle-radius, 10px);\n padding: var(--ease-toggle-padding, 4px);\n margin: 0;\n border: none;\n outline: none;\n appearance: none;\n cursor: pointer;\n background-color: var(--ease-toggle-on-background, var(--color-blue-900));\n transition: box-shadow 0.2s, background-color 0.2s;\n }\n\n [part=\"control\"] svg {\n width: var(--ease-toggle-width, 26px);\n height: var(--ease-toggle-height, 12px);\n display: block;\n fill: none;\n overflow: visible;\n\n path {\n transition: scale 0.2s, translate 0.2s, opacity 0.2s;\n stroke: var(--color-white);\n fill: var(--color-white-80);\n stroke-width: 1.5;\n }\n\n [part=\"default\"] {\n transform-origin: 6px 6px;\n }\n\n [part=\"active\"] {\n transform-origin: 23px 6px;\n }\n\n }\n\n :host([disabled]) [part=\"control\"] {\n cursor: default;\n opacity: 0.75;\n }\n\n :host([checked]) [part=\"control\"] {\n box-shadow: inset 0 0 0 1px var(--color-white-15), inset 0 1px 0 0 var(--color-white-20), inset 0 4px 6px 0 var(--ease-toggle-shadow, var(--color-white-12));\n\n &:hover {\n --ease-toggle-shadow: var(--color-white-30);\n }\n\n svg {\n [part=\"default\"] {\n scale: .25;\n translate: 10px 0;\n opacity: 0;\n }\n\n [part=\"active\"] {\n scale: 1;\n translate: 0 0;\n }\n }\n }\n\n :host(:not([checked])) [part=\"control\"] {\n background-color: var(--ease-toggle-off-background, var(--color-gray-800));\n box-shadow: inset 0 0 0 1px var(--color-white-10), inset 0 1px 0 0 var(--color-white-10), inset 0 4px 6px 0 var(--ease-toggle-shadow, var(--color-white-6));\n\n &:hover {\n --ease-toggle-shadow: var(--color-white-12);\n }\n\n svg {\n [part=\"default\"] {\n scale: 1;\n translate: 0 0;\n }\n\n [part=\"active\"] {\n scale: .25;\n translate: -10px 0;\n opacity: 0;\n }\n }\n }\n `,\n template(this: Toggle) {\n return html`\n <button part=\"control\" type=\"button\" aria-pressed=\"false\">\n <svg viewBox=\"0 0 26 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" filter=\"url(#${this.filterId})\">\n <path part=\"default\" d=\"M0 6C0 2.68629 2.68629 0 6 0V0C9.31371 0 12 2.68629 12 6V6C12 9.31371 9.31371 12 6 12V12C2.68629 12 0 9.31371 0 6V6Z\" />\n <path part=\"active\" d=\"M14 6C14 2.68629 16.6863 0 20 0V0C23.3137 0 26 2.68629 26 6V6C26 9.31371 23.3137 12 20 12V12C16.6863 12 14 9.31371 14 6V6Z\" />\n </svg>\n\n <svg style=\"display: none;\">\n <defs>\n <filter id=\"${this.filterId}\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"8\" result=\"blur\" />\n <feColorMatrix in=\"blur\" mode=\"matrix\" values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9\" result=\"gooey\" />\n <feBlend in=\"SourceGraphic\" in2=\"gooey\" />\n </filter>\n </defs>\n </svg>\n </button>\n `;\n }\n})\nexport class Toggle extends HTMLElement {\n declare requestRender: () => void;\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor checked!: boolean;\n\n @Prop<boolean>({ type: Boolean, reflect: true })\n accessor disabled!: boolean;\n\n @Query<HTMLButtonElement>('button')\n accessor control!: HTMLButtonElement | null;\n\n filterId: string = `filter-${crypto.randomUUID()}`;\n\n afterRender(): void {\n if (!this.control) {\n return;\n }\n\n const control = this.control;\n control.setAttribute('aria-pressed', this.checked ? 'true' : 'false');\n control.disabled = Boolean(this.disabled);\n setBooleanAttribute(this, 'disabled', Boolean(this.disabled));\n }\n\n @Listen<Toggle, MouseEvent, HTMLButtonElement>('click', { selector: 'button' })\n handleClick(event: MouseEvent): void {\n if (this.disabled) {\n event.preventDefault();\n event.stopPropagation();\n\n return;\n }\n\n this.checked = !this.checked;\n\n dispatchControlEvent(this, 'toggle', { value: this.checked, event });\n }\n}\n","import type { Placement } from '~/elements/popover';\nimport '../popover';\n\nimport { html, type TemplateResult } from 'lit-html';\n\nimport { Component } from '~/decorators/Component';\nimport { OutsideClick, requestOutsideClickUpdate } from '~/decorators/OutsideClick';\nimport { Prop } from '~/decorators/Prop';\nimport { Query } from '~/decorators/Query';\n\n@Component({\n tag: 'ease-tooltip',\n shadowMode: 'open',\n styles: `\n :host {\n display: inline-block;\n position: relative;\n }\n\n ease-popover::part(content) {\n inset: auto;\n }\n\n [data-tooltip-content] {\n background-color: var(--ease-tooltip-background, var(--color-gray-400));\n color: var(--ease-tooltip-color, var(--color-gray-900));\n padding: var(--ease-tooltip-padding, 4px 8px);\n border-radius: var(--ease-tooltip-radius, 4px);\n font-family: var(--ease-font-family, inherit);\n font-size: var(--ease-tooltip-font-size, 10px);\n font-weight: var(--ease-tooltip-font-weight, 500);\n max-width: var(--ease-tooltip-max-width, 220px);\n box-shadow: var(--ease-tooltip-shadow, 0 2px 8px rgba(0, 0, 0, 0.2));\n display: none;\n }\n\n :host([open]) [data-tooltip-content] {\n display: block;\n }\n `\n})\nexport class Tooltip extends HTMLElement {\n #hoverTimer: number | null = null;\n\n #trigger: HTMLElement | null = null;\n #content: HTMLElement | null = null;\n\n declare requestRender: () => void;\n\n @Prop<boolean>({\n type: Boolean,\n reflect: true,\n onChange(next, previous) {\n (this as Tooltip)._handleOpenChange(next, previous);\n }\n })\n accessor open = false;\n\n @Prop<number>({ type: Number, reflect: true, defaultValue: 300 })\n accessor delay = 300;\n\n @Prop<Placement>({ reflect: true, defaultValue: 'top-center' })\n accessor placement: Placement = 'top-center';\n\n @Query<HTMLElement>('[slot=\"trigger\"]')\n accessor triggerElement!: HTMLElement | null;\n\n @Query<HTMLElement>('[data-tooltip-content]')\n accessor contentElement!: HTMLElement | null;\n\n disconnectedCallback(): void {\n this.#clearTimer();\n if (this.#trigger) {\n this.#trigger.removeEventListener('mouseenter', this.#handleEnter);\n this.#trigger.removeEventListener('mouseleave', this.#handleLeave);\n this.#trigger.removeEventListener('focusin', this.#handleFocusIn);\n this.#trigger.removeEventListener('focusout', this.#handleFocusOut);\n this.#trigger = null;\n }\n\n if (this.#content) {\n this.#content.removeEventListener('mouseenter', this.#handleEnter);\n this.#content.removeEventListener('mouseleave', this.#handleLeave);\n this.#content = null;\n }\n }\n\n afterRender(): void {\n this.#updateListeners();\n const content = this.contentElement;\n const isVisible = this.open;\n\n if (content) {\n content.setAttribute('role', 'tooltip');\n content.setAttribute('aria-hidden', isVisible ? 'false' : 'true');\n content.dataset.open = isVisible ? 'true' : 'false';\n content.hidden = !isVisible;\n }\n }\n\n render(): TemplateResult {\n return html`\n <ease-popover .placement=${this.placement} ?open=${this.open}>\n <slot name=\"trigger\" slot=\"trigger\"></slot>\n <div\n data-tooltip-content\n role=\"tooltip\"\n data-open=${this.open ? 'true' : 'false'}\n ?hidden=${!this.open}\n >\n <slot></slot>\n </div>\n </ease-popover>\n `;\n }\n\n _handleOpenChange(next: boolean, previous: boolean): void {\n if (next === previous) {\n return;\n }\n\n if (!next) {\n this.#clearTimer();\n }\n\n requestOutsideClickUpdate(this);\n }\n\n @OutsideClick<Tooltip>({\n content: (host) => host.contentElement,\n triggers: (host) => [host.triggerElement],\n disabled: (host) => !host.open\n })\n handleOutsideDismiss(): void {\n if (!this.open) {\n return;\n }\n\n this.#clearTimer();\n this.open = false;\n }\n\n #clearTimer(): void {\n if (this.#hoverTimer !== null) {\n window.clearTimeout(this.#hoverTimer);\n this.#hoverTimer = null;\n }\n }\n\n #startTimer(callback: () => void): void {\n this.#clearTimer();\n const wait = this.delay ?? 0;\n\n if (wait > 0) {\n this.#hoverTimer = window.setTimeout(callback, wait);\n } else {\n callback();\n }\n }\n\n #handleEnter = (): void => {\n this.#startTimer(() => {\n this.open = true;\n });\n };\n\n #handleLeave = (): void => {\n this.#clearTimer();\n this.open = false;\n };\n\n #handleFocusIn = (): void => {\n this.#clearTimer();\n this.open = true;\n };\n\n #handleFocusOut = (): void => {\n this.#clearTimer();\n this.open = false;\n };\n\n #updateListeners(): void {\n const trigger = this.triggerElement;\n const content = this.contentElement ?? null;\n\n if (trigger !== this.#trigger) {\n if (this.#trigger) {\n this.#trigger.removeEventListener('mouseenter', this.#handleEnter);\n this.#trigger.removeEventListener('mouseleave', this.#handleLeave);\n this.#trigger.removeEventListener('focusin', this.#handleFocusIn);\n this.#trigger.removeEventListener('focusout', this.#handleFocusOut);\n }\n if (trigger) {\n trigger.addEventListener('mouseenter', this.#handleEnter);\n trigger.addEventListener('mouseleave', this.#handleLeave);\n trigger.addEventListener('focusin', this.#handleFocusIn);\n trigger.addEventListener('focusout', this.#handleFocusOut);\n }\n this.#trigger = trigger;\n }\n\n if (content !== this.#content) {\n if (this.#content) {\n this.#content.removeEventListener('mouseenter', this.#handleEnter);\n this.#content.removeEventListener('mouseleave', this.#handleLeave);\n }\n if (content) {\n content.addEventListener('mouseenter', this.#handleEnter);\n content.addEventListener('mouseleave', this.#handleLeave);\n }\n this.#content = content ?? null;\n }\n }\n}\n"],"mappings":"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","names":["html","html","render","styleCache","Map","normalizeTemplate","template","fetchStyles","urls","Promise","all","map","url","cached","get","request","fetch","then","response","ok","text","catch","set","Component","options","Base","_context","tag","styles","styleUrls","observedAttributes","shadowMode","autoSlot","Error","templateFn","Decorated","parent","Array","isArray","own","from","Set","args","attachShadow","mode","renderRoot","shadow","connectedCallback","prototype","call","finally","requestRender","disconnectedCallback","attributeChangedCallback","name","oldValue","newValue","onAttributeChange","requestAnimationFrame","length","fetched","inlineStyles","filter","Boolean","join","root","templateResult","styleTemplate","slotTemplate","completeTemplate","commit","afterRender","wrapRender","fragment","document","createDocumentFragment","tempDiv","createElement","append","childNodes","customElements","define","renderQueue","WeakMap","cleanupRegistry","observerRegistry","internalMutations","scheduleRender","instance","requestRender","render","get","set","requestAnimationFrame","delete","toKebabCase","value","String","replace","toLowerCase","registerCleanup","cleanup","callbacks","Set","original","disconnectedCallback","args","registered","forEach","callback","error","console","apply","undefined","add","markInternalMutation","host","attribute","attributes","isInternalMutation","hasAttribute","has","size","observeAttribute","handler","entry","Map","observer","MutationObserver","records","record","attributeName","listeners","currentValue","target","getAttribute","listener","observe","disconnect","updateAttribute","removeAttribute","setAttribute","resolveType","type","Boolean","Number","Object","Array","typeParsers","boolean","number","parsed","isNaN","json","JSON","parse","warn","string","typeFormatters","stringify","defaultCompare","previous","next","Prop","options","reflect","format","defaultValue","compare","onChange","onAttributeChange","resolvedType","parseValue","call","formatValue","accessor","context","kind","Error","name","addInitializer","rawValue","formatted","init","initialValue","HTMLElement","disabled","pill","fullWidth","type","block","variant","Component","tag","autoSlot","shadowMode","styles","Prop","Boolean","reflect","String","defaultValue","onAttributeChange","requestRender","Button","render","html","html","CONTROL_CHANGE_EVENT","dispatchControlEvent","host","type","detail","dispatchEvent","CustomEvent","bubbles","composed","setBooleanAttribute","element","name","value","setAttribute","removeAttribute","coerceNumber","parsed","Number","isNaN","readControlValue","String","checked","attr","getAttribute","textContent","trim","lifecycleHooks","connectedCallback","WeakMap","disconnectedCallback","cleanupRegistry","addLifecycleHook","instance","hookName","handler","store","callbacks","get","Set","set","original","args","forEach","callback","apply","undefined","add","registerCleanup","cleanup","registered","fn","error","console","delete","resolveTarget","host","target","EventTarget","document","window","renderRoot","shadowRoot","normalizeOptions","selectorOrOptions","selector","buildOptions","options","prevent","stop","stopImmediate","once","passive","capture","when","Listen","eventName","Error","listenConfig","originalMethod","context","addInitializer","attached","attach","addEventListener","warn","String","eventOptions","event","typedEvent","preventDefault","stopImmediatePropagation","stopPropagation","matched","path","composedPath","find","node","Element","matches","call","targetNode","removeEventListener","queueMicrotask","defaultOptions","all","closest","from","fallback","resolveFallback","host","resolveRoot","option","document","renderRoot","shadowRoot","resolveQuery","selector","options","result","root","elements","Array","querySelectorAll","length","match","querySelector","createQueryDecorator","_target","context","kind","descriptor","get","set","_value","addInitializer","Object","defineProperty","name","configurable","enumerable","Query","userOptions","Error","merged","HTMLElement","checked","name","value","disabled","control","Component","tag","styles","template","html","filterId","_dec1","Prop","type","Boolean","reflect","_dec2","_dec3","_dec4","_dec5","Query","_dec6","Listen","selector","Checkbox","handleClick","connectedCallback","_prevChecked","afterRender","changed","_triggerAnimation","setAttribute","setBooleanAttribute","shadowRoot","querySelector","svg","classList","remove","animClass","duration","add","setTimeout","event","preventDefault","stopPropagation","dispatchControlEvent","_initProto","crypto","randomUUID","html","html","HTMLElement","placement","offset","open","nextAnchorName","crypto","randomUUID","Component","tag","autoSlot","shadowMode","styles","_dec1","Prop","reflect","defaultValue","onChange","handlePlacementChange","_dec2","type","Number","handleOffsetChange","_dec3","Boolean","Popover","contentElement","connectedCallback","disconnectedCallback","render","html","requestRender","dataset","isFinite","style","setProperty","_initProto","html","HTMLElement","state","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","onAttributeChange","next","previous","shadowRoot","querySelector","animate","d","paths","duration","easing","IconChevron","render","html","_initProto","down","up","html","DismissController","options","event","owner","content","triggers","path","composedPath","some","node","Element","hasAttribute","includes","trigger","key","preventDefault","active","document","activeElement","contains","onDismiss","connect","context","filter","el","HTMLElement","addEventListener","disconnect","removeEventListener","registry","WeakMap","toDismissContext","host","options","disabled","resolved","resolve","owner","HTMLElement","content","triggers","filter","element","createOutsideClickHandle","onDismiss","controller","DismissController","event","call","update","context","disconnect","connect","registerOutsideClickHandle","handle","handles","get","Set","set","add","updateOutsideClickHandles","forEach","disconnectOutsideClickHandles","requestOutsideClickUpdate","lifecycleApplied","WeakSet","wrapMethod","host","name","hook","callHookFirst","original","args","call","result","apply","ensureLifecycle","has","add","updateOutsideClickHandles","disconnectOutsideClickHandles","OutsideClick","options","originalMethod","context","addInitializer","resolve","owner","content","triggers","handle","createOutsideClickHandle","event","disabled","registerOutsideClickHandle","isConnected","HTMLElement","open","disabled","pill","headless","searchable","block","maxHeight","name","value","placeholder","placement","trigger","searchInput","panelContent","contentSlot","nextOptionId","counter","nextPanelId","Component","tag","styles","_dec1","Prop","type","Boolean","reflect","onChange","next","previous","handleOpenChange","_dec2","_dec3","_dec4","_dec5","_dec6","String","defaultValue","onAttributeChange","requestRender","_dec7","style","setProperty","_dec8","_dec9","_dec10","attribute","_dec12","Query","_dec13","_dec14","_dec15","OutsideClick","content","host","triggers","Dropdown","handleOutsideDismiss","connectedCallback","disconnectedCallback","afterRender","ariaLabel","getAttribute","HTMLButtonElement","setAttribute","trim","length","removeAttribute","panel","isInteractive","id","tabIndex","setBooleanAttribute","queueMicrotask","render","placeholderActive","html","query","lowerQuery","toLowerCase","forEach","option","match","label","includes","element","display","toggle","force","originEvent","current","blur","origin","Event","focus","dispatchControlEvent","event","requestOutsideClickUpdate","slot","removeEventListener","addEventListener","assigned","assignedElements","flatten","elements","filter","node","options","hasAttribute","dataset","active","handlers","click","preventDefault","stopPropagation","keydown","key","passive","push","preselected","find","selected","toggleAttribute","selectedLabel","previousLabel","isSelected","fallback","hasValue","o","target","entry","preventScroll","index","normalized","Math","max","min","undefined","step","activeElement","document","currentIndex","findIndex","nextIndex","previousValue","explicitValue","text","textContent","explicitLabel","dispatchEvent","CustomEvent","detail","bubbles","composed","_initProto","input","html","HTMLElement","value","placeholder","type","name","disabled","headless","control","Component","tag","shadowMode","autoSlot","styles","template","html","Boolean","_dec1","Prop","reflect","_dec2","_dec3","defaultValue","_dec4","_dec5","_dec6","_dec7","Query","_dec8","Listen","selector","_dec9","_dec10","_dec11","Input","onPrefixSlotChange","onSuffixSlotChange","handleInput","handleChange","updatePrefixAttribute","container","shadowRoot","querySelector","prefixSlot","hasPrefix","assignedNodes","flatten","length","setBooleanAttribute","updateSuffixAttribute","suffixSlot","hasSuffix","afterRender","event","target","dispatchControlEvent","_initProto","html","clamp01","value","Math","max","min","hsvToRgb","h","s","v","hue","saturation","c","x","abs","m","r","g","b","round","rgbToHsv","rn","gn","bn","delta","rgbToHex","toHex","component","toString","padStart","toUpperCase","hexToRgb","hex","normalized","trim","test","match","exec","parseInt","hexToHsv","rgb","hsvToHex","isValidHex","getLuminance","isLightColor","hsvToHsl","l","sl","hslToHsv","sv","getColorComponents","hsv","format","h","s","v","labels","values","hsvToHex","max","suffix","rgb","hsvToRgb","r","g","b","hsl","hsvToHsl","Math","round","l","updateHsvFromComponents","index","value","newHsv","isValidHex","parsed","hexToHsv","vals","min","Number","rgbToHsv","hslToHsv","COLOR_FORMATS","nothing","classMap","ifDefined","repeat","styleMap","unsafeHTML","when","styleObject","input","definedEntries","Object","entries","reduce","acc","property","value","undefined","styleMap","html","HTMLElement","Component","tag","styles","template","html","IconArrowsVertical","html","HTMLElement","Component","tag","styles","template","html","IconPicker","HTMLElement","saturationArea","hueArea","hexInput","value","Component","tag","autoSlot","styles","template","h","s","v","hsv","pureHue","hsvToRgb","currentRgb","saturationBg","r","g","b","huePercent","vInverted","saturationHandleStyles","left","top","hueHandleStyles","isLight","isLightColor","hasEyeDropper","window","previewStyles","backgroundColor","components","getColorComponents","format","html","styleMap","handleSaturationPointerDown","handleSaturationPointerMove","handleSaturationPointerUp","handleHuePointerDown","handleHuePointerMove","handleHuePointerUp","handleEyeDropperClick","handleFormatCycle","formatAnimating","toUpperCase","values","e","handleComponentChange","target","labels","map","_","i","max","String","Number","handleCancelButtonClick","handleApplyButtonClick","_dec1","Query","_dec2","_dec3","_dec4","Prop","reflect","defaultValue","onChange","isInternalUpdate","updateFromHex","ColorPicker","connectedCallback","originalValue","hex","isValidHex","hexToHsv","event","newValue","hsvToHex","document","activeElement","dispatchControlEvent","updateSaturationValue","rect","getBoundingClientRect","x","Math","min","width","clientX","y","height","clientY","requestRender","updateHue","button","undefined","preventDefault","stopPropagation","pointerId","setPointerCapture","hasPointerCapture","releasePointerCapture","handleHexInputChange","input","index","updateHsvFromComponents","handleFormatChange","setTimeout","currentIndex","COLOR_FORMATS","indexOf","nextIndex","length","eyeDropper","EyeDropper","result","open","sRGBHex","HTMLElement","dropdown","value","disabled","placement","Component","tag","styles","_dec1","Query","_dec2","Prop","reflect","defaultValue","onChange","next","isValidHex","normalized","toUpperCase","_dec3","type","Boolean","_dec4","ColorInput","connectedCallback","querySelector","setBooleanAttribute","afterRender","swatchStyle","backgroundColor","html","styleMap","render","_initProto","event","target","dispatchControlEvent","detail","requestRender","open","html","HTMLElement","label","fullWidth","Component","tag","autoSlot","shadowMode","styles","template","html","_dec1","Prop","reflect","_dec2","type","Boolean","Field","_initProto","html","HTMLElement","open","headline","maxHeight","Component","tag","shadowMode","styles","_dec1","Prop","type","Boolean","reflect","attribute","defaultValue","_dec2","_dec3","Folder","render","html","toggle","_initProto","event","dispatchEvent","CustomEvent","detail","bubbles","composed","stopPropagation","html","HTMLElement","Component","tag","styles","template","html","IconClear","html","HTMLElement","state","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","IconFolder","render","html","_initProto","html","HTMLElement","state","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","IconGrid","render","html","_initProto","html","HTMLElement","Component","tag","styles","template","html","Loading","html","HTMLElement","state","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","Snap","render","defaultPath","defaultPath2","activePath","activePath2","path1","path2","html","_initProto","html","HTMLElement","Component","tag","styles","template","html","IconAnchorAdd","html","HTMLElement","Component","tag","styles","template","html","IconAnchorRemove","html","HTMLElement","Component","tag","styles","template","html","ArrowUp","html","HTMLElement","Component","tag","styles","template","html","IconBezier","html","HTMLElement","Component","tag","styles","template","html","IconBezierAngle","html","HTMLElement","Component","tag","styles","template","html","IconBezierDistribute","html","HTMLElement","Component","tag","styles","template","html","IconBezierLength","html","HTMLElement","Component","tag","styles","template","html","IconBezierMirror","html","HTMLElement","Component","tag","styles","template","html","IconCheck","html","HTMLElement","Component","tag","styles","template","html","IconCircleArrowLeft","html","HTMLElement","Component","tag","styles","template","html","IconCircleArrowRight","html","HTMLElement","Component","tag","styles","template","html","IconCode","html","HTMLElement","Component","tag","styles","template","html","IconDots","html","HTMLElement","Component","tag","styles","template","html","IconMention","html","HTMLElement","Component","tag","styles","template","html","IconMinus","html","HTMLElement","Component","tag","styles","template","html","IconPlus","html","HTMLElement","Component","tag","styles","template","html","Settings","html","HTMLElement","loading","intro","size","ariaLabel","CENTER","x","y","DOTS_DATA","id","cx","cy","INNER_DOT_IDS","OUTER_DOT_IDS","map","d","filter","includes","forceReflow","el","window","getComputedStyle","opacity","getAngle","dot","Math","atan2","sortByAngle","ids","find","sort","a","b","LOOP_DURATION","ROTATION_DURATION","Component","tag","styles","template","host","state","ariaLabelTrimmed","trim","html","_dec1","Prop","type","Boolean","attribute","defaultValue","onChange","next","handleLoadingChange","_dec2","_dec3","Number","_dec4","LogoLoader","value","requestRender","connectedCallback","requestAnimationFrame","disconnectedCallback","clearTimeout","fn","delay","setTimeout","push","svg","shadowRoot","querySelector","instant","keepOpacity","container","innerHTML","style","transition","classList","remove","removeProperty","transform","onComplete","innerDotIds","Set","innerDots","has","outerDots","orderedInner","forEach","index","fill","orderedOuter","particles","finalAngle","startDistance","random","angleVariation","PI","startAngle","startX","cos","startY","sin","curvature","controlAngle","controlDistance","controlX","controlY","group","floor","groupDelay","withinGroupDelay","duration","impactTime","rotationSpeed","isInner","shockwaveParticles","p","slice","shockwaveSet","particle","steps","step","animateStep","progress","t","mt","easeOut","scale","rotation","bounceDuration","add","earlyRevealTime","max","maxTime","ring","document","createElementNS","setAttribute","String","appendChild","performance","now","orderedInnerDots","seedDelay","targetScale","setProperty","angle","normalizedAngle","animationDelayMs","orderedOuterDots","baseScale","elapsed","timeInCycle","timeLeft","orderedAllDots","i","length","playIntro","variant","originalIntro","_initProto","html","renderQueue","WeakMap","scheduleRender","instance","requestRender","render","get","set","requestAnimationFrame","defaultCompare","previous","next","Watch","options","compare","onChange","transform","accessor","context","kind","Error","call","value","init","initialValue","html","HTMLElement","paused","canvasEl","clamp","value","min","max","Math","mean","values","length","sum","quantile","sorted","q","clamped","index","floor","computePercentile","sort","a","b","computeMedian","formatNumber","decimals","Number","isFinite","toFixed","formatMs","rateFps","fps","targetFps","target","ratio","Component","tag","autoSlot","shadowMode","styles","_dec1","Prop","type","Boolean","reflect","defaultValue","_dec2","Query","MonitorFps","connectedCallback","document","hidden","disconnectedCallback","removeEventListener","afterRender","render","hz","refreshRate","rating","subtitleParts","frameTimeAvg","frameTimeP95","filter","html","join","droppedFrames","jankFrames","longFrames","frameTimeMax","addEventListener","passive","now","performance","requestAnimationFrame","cancelAnimationFrame","frameWindow","slice","fpsWindow","frameAvg","frameP95","frameMax","median","ideal","ft","missed","round","dispatchEvent","CustomEvent","detail","bubbles","composed","canvas","rect","getBoundingClientRect","dpr","window","devicePixelRatio","width","height","ctx","getContext","setTransform","clearRect","samples","scaleMax","stroke","save","globalAlpha","strokeStyle","lineWidth","setLineDash","drawGuide","y","beginPath","moveTo","lineTo","restore","toY","i","x","closePath","fillStyle","fill","lineJoin","lineCap","_initProto","delta","push","shift","elapsed","fpsSample","requestRender","HTMLElement","metrics","network","METRIC_THRESHOLDS","LCP","good","poor","INP","CLS","FCP","ttfb","loadTime","domInteractive","fps","TBT","GLOBAL_BENCHMARKS","rateMetric","metric","value","thresholds","formatMetric","toFixed","Math","round","formatBytes","bytes","decimals","Number","isFinite","k","dm","sizes","i","floor","log","parseFloat","estimateCarbonFootprint","totalBytes","emissions","Component","tag","styles","_dec1","Watch","_dec2","_dec3","Listen","Monitor","handleFpsUpdate","connectedCallback","initObservers","collectInitialMetrics","startMemoryMonitoring","initNetworkMonitoring","document","readyState","window","addEventListener","handlePageLoad","disconnectedCallback","observers","forEach","observer","disconnect","stopMemoryMonitoring","stopNetworkMonitoring","removeEventListener","event","detail","updateTrend","requestRender","console","warn","PerformanceObserver","list","entry","getEntries","processPerformanceEntry","observe","type","buffered","push","e","error","collectNavigationTiming","resourceEntries","performance","getEntriesByType","processResourceEntries","navigationEntries","length","navTiming","responseStart","fetchStart","loadEventEnd","startTime","navigation","entryType","coreWebVitals","eventEntry","interactionId","duration","maxINP","inpEntries","lsEntry","hadRecentInput","clsEntries","calculateSessionWindowCLS","name","ltEntry","longTaskEntries","calculateLongTasksAndTBT","maxCls","currentSessionCls","sessionStartTime","Infinity","lastTime","sort","a","b","timeDiff","max","entries","summary","resources","size","transferSize","initiator","initiatorType","toLowerCase","endsWith","js","count","css","test","img","other","totalSize","tbt","referenceTime","task","longTasks","totalDuration","memory","updateMemory","mem","jsHeapSizeLimit","totalJSHeapSize","usedJSHeapSize","memoryInterval","setInterval","clearInterval","navigator","connection","updateNetworkInfo","key","history","trendHistory","maxTrendLength","shift","getTrendDirection","currentValue","previousAvg","slice","reduce","threshold","abs","delta","getOverallStatus","ratings","includes","every","r","some","render","html","renderExpanded","renderVitalsAndTiming","renderRealtime","renderNetworkInfo","renderResources","renderMetricBox","label","description","rating","formattedValue","trend","benchmark","vsBenchmark","renderMemory","usedPercent","styleObject","width","min","effectiveType","rtt","toUpperCase","totalCount","renderItem","data","_initProto","setTimeout","html","HTMLElement","value","min","max","step","name","disabled","control","Component","tag","styles","template","html","handleInput","handleChange","handleDecrement","bind","Number","handleIncrement","_dec1","Prop","type","reflect","_dec2","_dec3","_dec4","_dec5","_dec6","Boolean","_dec7","Query","_dec8","Listen","selector","_dec9","NumberInput","afterRender","undefined","String","setBooleanAttribute","event","target","coerceNumber","dispatchControlEvent","addActiveLayer","button","layer","document","createElement","classList","add","appendChild","setTimeout","remove","currentTarget","current","_initProto","html","HTMLElement","value","disabled","control","name","Component","tag","styles","template","html","handleValueChange","_dec1","Prop","reflect","defaultValue","_dec2","type","Boolean","_dec3","Query","_dec4","_dec5","Listen","selector","Origin","handleChange","afterRender","setBooleanAttribute","event","target","String","dispatchControlEvent","_initProto","html","nothing","HTMLElement","activeTab","headline","maxHeight","contentElement","bodyElement","Component","tag","shadowMode","styles","_dec1","Prop","type","Number","reflect","attribute","defaultValue","onChange","next","previous","self","undefined","handleActiveTabChange","_dec2","_dec3","_dec4","Query","_dec5","_dec6","Listen","selector","_dec7","Panel","onFooterSlotChange","onDefaultSlotChange","performTabAnimation","tabs","setTab","index","length","connectedCallback","afterRender","render","hasTabs","html","nothing","map","tab","id","e","label","event","dispatchEvent","CustomEvent","detail","bubbles","composed","currentIndex","newIndex","key","preventDefault","queueMicrotask","tabButtons","shadowRoot","querySelectorAll","newTabButton","focus","fromIndex","toIndex","duration","easing","content","requestRender","fromPanel","querySelector","toPanel","startHeight","getBoundingClientRect","height","style","display","opacity","fadeOut","animate","fill","finished","cancel","setAttribute","previousToState","getAttribute","visibility","offsetHeight","endHeight","fadeIn","removeAttribute","ms","Promise","resolve","setTimeout","child","Array","from","children","slot","startsWith","replace","push","slice","updateFooterAttribute","footer","footerSlot","hasFooter","Boolean","assignedNodes","flatten","setBooleanAttribute","_initProto","html","RadioOption","HTMLElement","connectedCallback","hidden","hasAttribute","setAttribute","customElements","get","define","HTMLElement","value","groupElement","contentSlot","nextOptionId","counter","nextPanelId","Component","tag","shadowMode","styles","template","html","_dec1","Prop","reflect","defaultValue","onChange","next","previous","updateOptionSelectionState","_dec2","Query","_dec3","RadioGroup","connectedCallback","disconnectedCallback","afterRender","panel","id","tabIndex","setAttribute","queueMicrotask","slot","removeEventListener","addEventListener","assigned","assignedElements","flatten","elements","filter","node","options","forEach","element","hasAttribute","getAttribute","label","trim","length","dataset","active","handlers","click","event","preventDefault","stopPropagation","keydown","key","passive","push","preselected","find","option","selected","selectedLabel","isSelected","fallback","hasValue","Boolean","toggleAttribute","originEvent","previousValue","explicitValue","text","textContent","explicitLabel","dispatchControlEvent","dispatchEvent","CustomEvent","detail","bubbles","composed","_initProto","html","HTMLElement","checked","name","value","disabled","control","Component","tag","shadowMode","styles","template","html","filterId","_dec1","Prop","type","Boolean","reflect","onChange","next","form","closest","root","getRootNode","others","Array","from","querySelectorAll","forEach","other","_dec2","_dec3","_dec4","_dec5","Query","_dec6","Listen","selector","RadioInput","handleClick","connectedCallback","_prevChecked","afterRender","_firstRender","changed","_triggerAnimation","setAttribute","setBooleanAttribute","input","shadowRoot","querySelector","svg","classList","remove","animClass","add","duration","setTimeout","event","preventDefault","stopPropagation","dispatchControlEvent","_initProto","crypto","randomUUID","html","HTMLElement","value","min","max","step","disabled","control","valueControl","Component","tag","styles","template","html","String","Boolean","undefined","_dec1","Prop","type","Number","reflect","_dec2","_dec3","_dec4","_dec5","_dec6","Query","_dec7","_dec8","Listen","selector","_dec9","_dec10","when","event","CustomEvent","detail","_dec11","Slider","handleRangeInput","handleRangeChange","handleValueInput","handleValueChange","afterRender","setAttribute","setBooleanAttribute","updateProgress","target","numericValue","coerceNumber","dispatchControlEvent","rawValue","percent","style","setProperty","Math","_initProto","html","HTMLElement","value","defaultSlot","readControlValue","element","checked","attr","getAttribute","textContent","trim","getControlName","name","Component","tag","shadowMode","styles","_dec1","Prop","reflect","_dec2","Query","_dec3","Listen","target","host","_dec4","_dec5","CONTROL_CHANGE_EVENT","State","handleInternalInput","handleInternalChange","handleControlChange","state","get","set","control","Event","subscribe","nameOrCallback","callback","cb","Error","has","Set","add","unsubscribe","delete","reset","Object","entries","connectedCallback","addEventListener","disconnectedCallback","removeEventListener","render","html","event","detail","Element","slot","findControls","el","controls","push","shadowRoot","child","querySelectorAll","childName","clear","elements","assignedElements","flatten","first","values","next","String","prevValue","dispatchControlEvent","_initProto","Map","html","HTMLElement","checked","disabled","control","Component","tag","styles","template","html","filterId","_dec1","Prop","type","Boolean","reflect","_dec2","_dec3","Query","_dec4","Listen","selector","Toggle","handleClick","afterRender","setAttribute","setBooleanAttribute","event","preventDefault","stopPropagation","dispatchControlEvent","value","_initProto","crypto","randomUUID","html","HTMLElement","open","delay","placement","triggerElement","contentElement","Component","tag","shadowMode","styles","_dec1","Prop","type","Boolean","reflect","onChange","next","previous","_handleOpenChange","_dec2","Number","defaultValue","_dec3","_dec4","Query","_dec5","_dec6","OutsideClick","content","host","triggers","disabled","Tooltip","handleOutsideDismiss","disconnectedCallback","removeEventListener","afterRender","isVisible","setAttribute","dataset","hidden","render","html","requestOutsideClickUpdate","window","clearTimeout","callback","wait","setTimeout","trigger","addEventListener","_initProto"]}
|