{"version":3,"sources":["../src/elements/index.ts","/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":["export { Button } from './button';\nexport { Checkbox } from './checkbox';\nexport { ColorInput } from './color';\nexport { ColorPicker } from './color/picker';\nexport { Dropdown } from './dropdown';\nexport { Field } from './field';\nexport { Folder, type FolderToggleEventDetail } from './folder';\nexport * from './icons';\nexport { Input } from './input';\nexport * from './logo';\nexport { Monitor } from './monitor';\nexport { MonitorFps } from './monitor/fps';\nexport { NumberInput } from './number';\nexport { Origin } from './origin';\nexport { Panel, type TabChangeEventDetail } from './panel';\nexport { type Placement, Popover } from './popover';\nexport { RadioGroup } from './radio';\nexport { RadioInput } from './radio/input';\nexport { RadioOption } from './radio/option';\nexport {\n  CONTROL_CHANGE_EVENT,\n  type ControlEventDetail,\n  coerceNumber,\n  dispatchControlEvent,\n  readControlValue,\n  setBooleanAttribute\n} from './shared';\nexport { Slider } from './slider';\nexport { State, type StateChangeEventDetail } from './state';\nexport { Toggle } from './toggle';\nexport { Tooltip } from './tooltip';\n","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 { CONTROL_CHANGE_EVENT, 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    const name = this.name ?? this.getAttribute('name') ?? undefined;\n\n    const detail = { name, value: this.checked, event };\n\n    dispatchControlEvent(this, 'checkbox', detail);\n    dispatchControlEvent(this, 'change', detail);\n    dispatchControlEvent(this, CONTROL_CHANGE_EVENT, detail);\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> =\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<string | null>({ reflect: true, defaultValue: null })\n  accessor name: string | null = null;\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', { name: this.name ?? undefined, value: this.value, event });\n  };\n\n  #handlePickerInput = (event: CustomEvent<{ value: string }>): void => {\n    this.value = event.detail.value;\n    dispatchControlEvent(this, 'input', { name: this.name ?? undefined, value: this.value, event });\n  };\n\n  #handlePickerChange = (event: CustomEvent<{ value: string }>): void => {\n    this.value = event.detail.value;\n    dispatchControlEvent(this, 'change', { name: this.name ?? undefined, 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', { name: this.name ?? undefined, 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';\nimport { Query } from '~/decorators/Query';\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().slice(0, 8)}`;\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-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: fixed;\n      position-anchor: var(--ease-popover-anchor-name);\n      margin: 0;\n      padding: 0;\n      border: none;\n      background: transparent;\n      overflow: visible;\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    }\n\n    [part=\"content\"]:popover-open {\n      display: block;\n    }\n\n    :host([placement=\"top-start\"]) [part=\"content\"] {\n      position-area: top span-right;\n      margin-bottom: var(--ease-popover-offset);\n    }\n    :host([placement=\"top-center\"]) [part=\"content\"] {\n      position-area: top center;\n      margin-bottom: var(--ease-popover-offset);\n    }\n    :host([placement=\"top-end\"]) [part=\"content\"] {\n      position-area: top span-left;\n      margin-bottom: var(--ease-popover-offset);\n    }\n    :host([placement=\"bottom-start\"]) [part=\"content\"] {\n      position-area: bottom span-right;\n      margin-top: var(--ease-popover-offset);\n    }\n    :host([placement=\"bottom-center\"]) [part=\"content\"] {\n      position-area: bottom center;\n      margin-top: var(--ease-popover-offset);\n    }\n    :host([placement=\"bottom-end\"]) [part=\"content\"] {\n      position-area: bottom span-left;\n      margin-top: var(--ease-popover-offset);\n    }\n    :host([placement=\"left-start\"]) [part=\"content\"] {\n      position-area: left span-bottom;\n      margin-right: var(--ease-popover-offset);\n    }\n    :host([placement=\"left-center\"]) [part=\"content\"] {\n      position-area: left center;\n      margin-right: var(--ease-popover-offset);\n    }\n    :host([placement=\"left-end\"]) [part=\"content\"] {\n      position-area: left span-top;\n      margin-right: var(--ease-popover-offset);\n    }\n    :host([placement=\"right-start\"]) [part=\"content\"] {\n      position-area: right span-bottom;\n      margin-left: var(--ease-popover-offset);\n    }\n    :host([placement=\"right-center\"]) [part=\"content\"] {\n      position-area: right center;\n      margin-left: var(--ease-popover-offset);\n    }\n    :host([placement=\"right-end\"]) [part=\"content\"] {\n      position-area: right span-top;\n      margin-left: var(--ease-popover-offset);\n    }\n  `\n})\nexport class Popover extends HTMLElement {\n  declare requestRender: () => void;\n\n  #anchorName = nextAnchorName();\n\n  @Query<HTMLElement>('[part=\"content\"]')\n  accessor contentElement!: HTMLElement | null;\n\n  @Prop<Placement>({\n    reflect: true,\n    defaultValue: 'bottom-start'\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>({\n    type: Boolean,\n    reflect: true,\n    onChange() {\n      (this as Popover).handleOpenChange();\n    }\n  })\n  accessor open = false;\n\n  handleOffsetChange(): void {\n    const offset = Number.isFinite(this.offset) ? this.offset : 8;\n    this.style.setProperty('--ease-popover-offset', `${offset}px`);\n  }\n\n  handleOpenChange(): void {\n    const content = this.contentElement;\n    if (!content) {\n      return;\n    }\n\n    if (this.open) {\n      content.showPopover();\n    } else {\n      content.hidePopover();\n    }\n  }\n\n  connectedCallback(): void {\n    this.style.setProperty('--ease-popover-anchor-name', this.#anchorName);\n    this.handleOffsetChange();\n  }\n\n  afterRender(): void {\n    const content = this.contentElement;\n    if (content && this.open) {\n      try {\n        content.showPopover();\n      } catch (_e) {}\n    }\n  }\n\n  render(): TemplateResult {\n    return html`\n      <slot name=\"trigger\"></slot>\n      <div part=\"content\" popover=\"manual\" role=\"region\">\n        <slot></slot>\n      </div>\n    `;\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 .5px var(--color-white-4) inset,\n        0 1px 0 0 var(--color-white-4) inset\n      );\n      background-clip: padding-box;\n      border: .25px 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 !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', { name: this.name ?? undefined, 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', { name: this.name ?? undefined, 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 type { OutsideClickOptions };\n\nexport { requestOutsideClickUpdate } from '~/utils/outside-click';\n","import { html } from 'lit-html';\n\nimport { CONTROL_CHANGE_EVENT, 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\n    const name = this.name ?? this.getAttribute('name') ?? undefined;\n    const detail = { name, value: this.value ?? '', event };\n\n    dispatchControlEvent(this, 'input', detail);\n    dispatchControlEvent(this, CONTROL_CHANGE_EVENT, detail);\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\n    const name = this.name ?? this.getAttribute('name') ?? undefined;\n    const detail = { name, value: this.value ?? '', event };\n\n    dispatchControlEvent(this, 'change', detail);\n    dispatchControlEvent(this, CONTROL_CHANGE_EVENT, detail);\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, ifDefined, repeat, styleMap, unsafeHTML, when };\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      scroll-margin-top: 8px;\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  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      interpolate-size: allow-keywords;\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) !important;\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: none;\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\">\n          <div part=\"body\" style=${this.maxHeight ? `max-height: ${this.maxHeight}` : ''}>\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 { CONTROL_CHANGE_EVENT, 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\n    const name = this.name ?? this.getAttribute('name') ?? undefined;\n    const detail = { name, value: this.value, event };\n\n    dispatchControlEvent(this, 'input', detail);\n    dispatchControlEvent(this, CONTROL_CHANGE_EVENT, detail);\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\n    const name = this.name ?? this.getAttribute('name') ?? undefined;\n    const detail = { name, value: this.value, event };\n\n    dispatchControlEvent(this, 'change', detail);\n    dispatchControlEvent(this, CONTROL_CHANGE_EVENT, detail);\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    :host {\n      display: block;\n      box-sizing: border-box;\n    }\n\n    @property --ease-panel-top-fade {\n      syntax: \"<length>\";\n      inherits: false;\n      initial-value: 0px;\n    }\n\n    @property --ease-panel-bottom-fade {\n      syntax: \"<length>\";\n      inherits: false;\n      initial-value: 0px;\n    }\n\n    [part=\"section\"] {\n      display: flex;\n      flex-direction: column;\n      max-height: inherit;\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    }\n\n    [part=\"tabs\"]:empty {\n      display: none;\n    }\n\n    [part=\"tab\"] {\n      appearance: none;\n      border-radius: var(--ease-panel-tab-radius, var(--radii-md));\n      background-color: var(--ease-panel-tab-background, transparent);\n      box-sizing: border-box;\n      padding: var(--ease-panel-tab-padding, 4px 8px);\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      border: none;\n      margin: 0;\n      cursor: pointer;\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      flex: 1 1 auto;\n      min-height: 0;\n      width: 100%;\n      box-sizing: border-box;\n      overflow-y: auto;\n      overflow-x: hidden;\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 proximity;\n      scrollbar-width: none;\n\n      &::-webkit-scrollbar {\n        display: none;\n      }\n    }\n\n    [part=\"content\"][data-animating=\"true\"] {\n      transition: height 200ms cubic-bezier(.25, 0, .5, 1);\n    }\n\n    [part=\"body\"] {\n      display: block;\n      height: 100%;\n      width: 100%;\n      position: relative;\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      height: 100%;\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      max-height: 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\">\n            ${hasTabs ? this.#renderTabPanels() : html`<div part=\"items\" style=${this.maxHeight ? `max-height: ${this.maxHeight}` : nothing}><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\" style=${this.maxHeight ? `max-height: ${this.maxHeight}` : nothing}>\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    // Temporarily unlock content height for accurate measurement\n    content.style.height = 'auto';\n\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    void content.offsetHeight;\n    const endHeight = content.getBoundingClientRect().height;\n\n    // Re-lock at start height for animation\n    content.style.height = `${startHeight}px`;\n    void content.offsetHeight;\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 { CONTROL_CHANGE_EVENT, 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    const groupName = this.closest('ease-radio-group')?.getAttribute('name') ?? undefined;\n    const name = this.getAttribute('name') ?? groupName ?? undefined;\n    const detail = { name, value: this.checked, event };\n\n    dispatchControlEvent(this, 'radio', detail);\n    dispatchControlEvent(this, 'change', detail);\n    dispatchControlEvent(this, CONTROL_CHANGE_EVENT, detail);\n  }\n}\n","import '../input';\n\nimport { html } from 'lit-html';\n\nimport {\n  CONTROL_CHANGE_EVENT,\n  type ControlEventDetail,\n  coerceNumber,\n  dispatchControlEvent,\n  setBooleanAttribute\n} 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          @input=${this.handleRangeInput}\n          @change=${this.handleRangeChange}\n          ?aria-disabled=${this.disabled}\n        />\n        \n        <ease-input\n          part=\"value\"\n          @input=${this.handleValueInput}\n          @change=${this.handleValueChange}\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    const name = this.getAttribute('name') ?? undefined;\n    const detail = { name, value: this.value, event };\n\n    dispatchControlEvent(this, CONTROL_CHANGE_EVENT, detail);\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    const name = this.getAttribute('name') ?? undefined;\n    const detail = { name, value: this.value, event };\n\n    dispatchControlEvent(this, CONTROL_CHANGE_EVENT, detail);\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    const name = this.getAttribute('name') ?? undefined;\n    const controlEvent = event.detail?.event ?? event;\n    const detail = { name, value: this.value, event: controlEvent };\n\n    dispatchControlEvent(this, 'input', detail);\n    dispatchControlEvent(this, CONTROL_CHANGE_EVENT, detail);\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    const name = this.getAttribute('name') ?? undefined;\n    const controlEvent = event.detail?.event ?? event;\n    const detail = { name, value: this.value, event: controlEvent };\n\n    dispatchControlEvent(this, 'change', detail);\n    dispatchControlEvent(this, CONTROL_CHANGE_EVENT, detail);\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 { CONTROL_CHANGE_EVENT, 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    const name = this.getAttribute('name') ?? undefined;\n    const detail = { name, value: this.checked, event };\n\n    dispatchControlEvent(this, 'toggle', detail);\n    dispatchControlEvent(this, 'change', detail);\n    dispatchControlEvent(this, CONTROL_CHANGE_EVENT, detail);\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":["import_lit_html","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","render","styleTemplate","html","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","import_lit_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","getAttribute","undefined","detail","dispatchControlEvent","CONTROL_CHANGE_EVENT","_initProto","crypto","randomUUID","import_lit_html","import_lit_html","HTMLElement","contentElement","placement","offset","open","nextAnchorName","crypto","randomUUID","slice","Component","tag","autoSlot","shadowMode","styles","_dec1","Query","_dec2","Prop","reflect","defaultValue","_dec3","type","Number","onChange","handleOffsetChange","_dec4","Boolean","handleOpenChange","Popover","isFinite","style","setProperty","content","showPopover","hidePopover","connectedCallback","afterRender","_e","render","html","_initProto","import_lit_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","import_lit_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","undefined","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","step","activeElement","document","currentIndex","findIndex","nextIndex","previousValue","explicitValue","text","textContent","explicitLabel","dispatchEvent","CustomEvent","detail","bubbles","composed","_initProto","input","import_lit_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","getAttribute","undefined","detail","dispatchControlEvent","CONTROL_CHANGE_EVENT","_initProto","import_lit_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","import_lit_html","styleObject","input","definedEntries","Object","entries","reduce","acc","property","value","undefined","styleMap","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconArrowsVertical","import_lit_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","name","placement","Component","tag","styles","_dec1","Query","_dec2","Prop","reflect","defaultValue","onChange","next","isValidHex","normalized","toUpperCase","_dec3","type","Boolean","_dec4","_dec5","ColorInput","connectedCallback","querySelector","setBooleanAttribute","afterRender","swatchStyle","backgroundColor","html","styleMap","render","_initProto","event","target","dispatchControlEvent","undefined","detail","requestRender","open","import_lit_html","HTMLElement","label","fullWidth","Component","tag","autoSlot","shadowMode","styles","template","html","_dec1","Prop","reflect","_dec2","type","Boolean","Field","_initProto","import_lit_html","HTMLElement","open","headline","maxHeight","Component","tag","styles","_dec1","Prop","type","Boolean","reflect","attribute","defaultValue","_dec2","_dec3","Folder","render","html","toggle","_initProto","event","dispatchEvent","CustomEvent","detail","bubbles","composed","stopPropagation","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconClear","import_lit_html","HTMLElement","state","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","IconFolder","render","html","_initProto","import_lit_html","HTMLElement","state","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","IconGrid","render","html","_initProto","import_lit_html","HTMLElement","Component","tag","styles","template","html","Loading","import_lit_html","HTMLElement","state","Component","tag","styles","observedAttributes","_dec1","Prop","reflect","attribute","defaultValue","Snap","render","defaultPath","defaultPath2","activePath","activePath2","path1","path2","html","_initProto","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconAnchorAdd","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconAnchorRemove","import_lit_html","HTMLElement","Component","tag","styles","template","html","ArrowUp","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconBezier","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconBezierAngle","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconBezierDistribute","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconBezierLength","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconBezierMirror","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconCheck","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconCircleArrowLeft","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconCircleArrowRight","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconCode","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconDots","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconMention","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconMinus","import_lit_html","HTMLElement","Component","tag","styles","template","html","IconPlus","import_lit_html","HTMLElement","Component","tag","styles","template","html","Settings","import_lit_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","import_lit_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","import_lit_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","import_lit_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","getAttribute","detail","dispatchControlEvent","CONTROL_CHANGE_EVENT","addActiveLayer","button","layer","document","createElement","classList","add","appendChild","setTimeout","remove","currentTarget","current","_initProto","import_lit_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","import_lit_html","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","import_lit_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","import_lit_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","groupName","getAttribute","undefined","detail","dispatchControlEvent","CONTROL_CHANGE_EVENT","_initProto","crypto","randomUUID","import_lit_html","HTMLElement","value","min","max","step","disabled","control","valueControl","Component","tag","styles","template","html","String","handleRangeInput","handleRangeChange","handleValueInput","handleValueChange","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","afterRender","setAttribute","setBooleanAttribute","updateProgress","target","numericValue","coerceNumber","name","getAttribute","dispatchControlEvent","CONTROL_CHANGE_EVENT","rawValue","controlEvent","percent","style","setProperty","Math","_initProto","import_lit_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","import_lit_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","name","getAttribute","undefined","detail","value","dispatchControlEvent","CONTROL_CHANGE_EVENT","_initProto","crypto","randomUUID","import_lit_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"]}