@exsto/ds 0.0.1-rc.4 → 0.0.1-rc.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -27
- package/dist/ds/src/index.d.ts +2 -3
- package/dist/index.js +5107 -2
- package/dist/index.js.map +1 -0
- package/dist/styles.css +525 -296
- package/dist/theme.css +58 -1
- package/dist/ui/src/components/edyn/animated-number/animated-number.d.ts +30 -0
- package/dist/ui/src/components/edyn/animated-number/animated-number.test.d.ts +9 -0
- package/dist/ui/src/components/edyn/animated-number/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/date-range-picker/date-range-picker.d.ts +26 -0
- package/dist/ui/src/components/edyn/date-range-picker/date-range-picker.test.d.ts +9 -0
- package/dist/ui/src/components/edyn/date-range-picker/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/initials-avatar/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/initials-avatar/initials-avatar.d.ts +53 -0
- package/dist/ui/src/components/edyn/initials-avatar/initials-avatar.test.d.ts +10 -0
- package/dist/ui/src/components/edyn/multi-select/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/multi-select/multi-select.d.ts +96 -0
- package/dist/ui/src/components/edyn/multi-select/multi-select.test.d.ts +9 -0
- package/dist/ui/src/components/edyn/progress-line/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/progress-line/progress-line.d.ts +23 -0
- package/dist/ui/src/components/edyn/progress-line/progress-line.test.d.ts +9 -0
- package/dist/ui/src/components/ui/attachment/attachment.d.ts +1 -1
- package/dist/ui/src/components/ui/button/button.behavior.test.d.ts +8 -0
- package/dist/ui/src/components/ui/dropdown-menu/dropdown-menu.d.ts +9 -10
- package/dist/ui/src/components/ui/input-group/input-group.d.ts +1 -1
- package/dist/ui/src/components/ui/item/item.d.ts +1 -1
- package/dist/ui/src/components/ui/progress/progress.behavior.test.d.ts +8 -0
- package/dist/ui/src/components/ui/progress/progress.d.ts +43 -1
- package/dist/ui/src/components/ui/scroll-area/scroll-area.behavior.test.d.ts +7 -6
- package/dist/ui/src/components/ui/scroll-area/scroll-area.d.ts +27 -8
- package/dist/ui/src/components/ui/table/table.behavior.test.d.ts +4 -5
- package/dist/ui/src/index.d.ts +5 -0
- package/dist/ui/src/lib/focus-ring.test.d.ts +8 -0
- package/dist/ui/src/lib/popup-list.d.ts +47 -0
- package/dist/ui/src/lib/popup-list.test.d.ts +10 -0
- package/package.json +4 -9
- package/dist/chunks/toggle-group-CTTjTe-K.js +0 -4371
- package/dist/chunks/toggle-group-CTTjTe-K.js.map +0 -1
- package/dist/dom/src/context.d.ts +0 -34
- package/dist/dom/src/define-element.d.ts +0 -11
- package/dist/dom/src/define-element.test.d.ts +0 -1
- package/dist/dom/src/field-control.d.ts +0 -5
- package/dist/dom/src/index.d.ts +0 -6
- package/dist/dom/src/mode.d.ts +0 -8
- package/dist/dom/src/native-slot.test.d.ts +0 -1
- package/dist/dom/src/styles.d.ts +0 -6
- package/dist/dom/src/theme-state.d.ts +0 -1
- package/dist/dom/src/types.d.ts +0 -65
- package/dist/ds/src/elements.d.ts +0 -12
- package/dist/elements/src/edx-accordion.d.ts +0 -14
- package/dist/elements/src/edx-accordion.test.d.ts +0 -1
- package/dist/elements/src/edx-alert.d.ts +0 -14
- package/dist/elements/src/edx-audio-player.d.ts +0 -11
- package/dist/elements/src/edx-avatar.d.ts +0 -10
- package/dist/elements/src/edx-badge.d.ts +0 -12
- package/dist/elements/src/edx-breadcrumb.d.ts +0 -11
- package/dist/elements/src/edx-button-group.d.ts +0 -7
- package/dist/elements/src/edx-button.d.ts +0 -20
- package/dist/elements/src/edx-calendar.d.ts +0 -21
- package/dist/elements/src/edx-card.d.ts +0 -8
- package/dist/elements/src/edx-checkbox.d.ts +0 -18
- package/dist/elements/src/edx-combobox.d.ts +0 -28
- package/dist/elements/src/edx-content-components.d.ts +0 -2
- package/dist/elements/src/edx-dialog.d.ts +0 -20
- package/dist/elements/src/edx-drawer.d.ts +0 -21
- package/dist/elements/src/edx-dropdown-menu.d.ts +0 -29
- package/dist/elements/src/edx-field.d.ts +0 -9
- package/dist/elements/src/edx-field.test.d.ts +0 -1
- package/dist/elements/src/edx-indicator.d.ts +0 -14
- package/dist/elements/src/edx-input-group.d.ts +0 -32
- package/dist/elements/src/edx-input-otp.d.ts +0 -19
- package/dist/elements/src/edx-input.d.ts +0 -31
- package/dist/elements/src/edx-interactive-components.d.ts +0 -2
- package/dist/elements/src/edx-label.d.ts +0 -6
- package/dist/elements/src/edx-pagination.d.ts +0 -8
- package/dist/elements/src/edx-popover.d.ts +0 -24
- package/dist/elements/src/edx-progress.d.ts +0 -10
- package/dist/elements/src/edx-radio-group.d.ts +0 -22
- package/dist/elements/src/edx-radio-group.test.d.ts +0 -1
- package/dist/elements/src/edx-scroll-area.d.ts +0 -20
- package/dist/elements/src/edx-scroll-area.test.d.ts +0 -1
- package/dist/elements/src/edx-select.d.ts +0 -34
- package/dist/elements/src/edx-separator.d.ts +0 -10
- package/dist/elements/src/edx-skeleton.d.ts +0 -8
- package/dist/elements/src/edx-slider.d.ts +0 -17
- package/dist/elements/src/edx-slider.test.d.ts +0 -1
- package/dist/elements/src/edx-switch.d.ts +0 -18
- package/dist/elements/src/edx-table.d.ts +0 -13
- package/dist/elements/src/edx-table.test.d.ts +0 -1
- package/dist/elements/src/edx-tabs.d.ts +0 -15
- package/dist/elements/src/edx-tabs.test.d.ts +0 -1
- package/dist/elements/src/edx-textarea.d.ts +0 -25
- package/dist/elements/src/edx-toggle-group.d.ts +0 -27
- package/dist/elements/src/edx-toggle-group.test.d.ts +0 -1
- package/dist/elements/src/edx-toggle.d.ts +0 -18
- package/dist/elements/src/edx-tooltip.d.ts +0 -28
- package/dist/elements/src/edx-video-player.d.ts +0 -16
- package/dist/elements/src/field-control-bridge.d.ts +0 -7
- package/dist/elements/src/index.d.ts +0 -14
- package/dist/elements/src/projected-content.test.d.ts +0 -1
- package/dist/elements/src/registry.d.ts +0 -39
- package/dist/elements/src/registry.test.d.ts +0 -1
- package/dist/elements.js +0 -4026
- package/dist/elements.js.map +0 -1
package/dist/elements.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"elements.js","names":[],"sources":["../../dom/src/context.tsx","../../dom/src/field-control.ts","../../dom/src/mode.ts","../../dom/src/styles.ts","../../dom/src/theme-state.ts","../../dom/src/define-element.tsx","../../elements/src/registry.ts","../../elements/src/edx-accordion.tsx","../../elements/src/edx-alert.tsx","../../elements/src/edx-audio-player.tsx","../../elements/src/edx-avatar.tsx","../../elements/src/edx-badge.tsx","../../elements/src/edx-breadcrumb.tsx","../../elements/src/edx-button.tsx","../../elements/src/edx-button-group.tsx","../../elements/src/edx-calendar.tsx","../../elements/src/edx-card.tsx","../../elements/src/edx-checkbox.tsx","../../elements/src/edx-combobox.tsx","../../elements/src/edx-content-components.tsx","../../elements/src/edx-dialog.tsx","../../elements/src/edx-drawer.tsx","../../elements/src/edx-dropdown-menu.tsx","../../elements/src/field-control-bridge.ts","../../elements/src/edx-field.tsx","../../elements/src/edx-indicator.tsx","../../elements/src/edx-input.tsx","../../elements/src/edx-input-group.tsx","../../elements/src/edx-input-otp.tsx","../../elements/src/edx-interactive-components.tsx","../../elements/src/edx-label.tsx","../../elements/src/edx-pagination.tsx","../../elements/src/edx-popover.tsx","../../elements/src/edx-progress.tsx","../../elements/src/edx-radio-group.tsx","../../elements/src/edx-scroll-area.tsx","../../elements/src/edx-select.tsx","../../elements/src/edx-separator.tsx","../../elements/src/edx-skeleton.tsx","../../elements/src/edx-slider.tsx","../../elements/src/edx-switch.tsx","../../elements/src/edx-table.tsx","../../elements/src/edx-tabs.tsx","../../elements/src/edx-textarea.tsx","../../elements/src/edx-toggle.tsx","../../elements/src/edx-toggle-group.tsx","../../elements/src/edx-tooltip.tsx","../../elements/src/edx-video-player.tsx","../../elements/src/index.ts","../src/elements.ts"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { createContext, useContext } from 'react';\nimport type { IEdxHost, TDomMode, TEmit } from './types';\n\ninterface IEdxHostContext extends IEdxHost {\n slotHtml: string;\n}\n\nconst EdxHostContext = createContext<IEdxHostContext | null>(null);\n\ninterface IEdxHostProviderProps {\n value: IEdxHostContext;\n children: ReactNode;\n}\n\nexport const EdxHostProvider = (props: IEdxHostProviderProps) => {\n return <EdxHostContext.Provider value={props.value}>{props.children}</EdxHostContext.Provider>;\n};\n\nexport const useEdxHost = (): IEdxHostContext => {\n const ctx = useContext(EdxHostContext);\n if (!ctx) {\n throw new Error('useEdxHost must be used inside an Edynamix custom element');\n }\n return ctx;\n};\n\nexport const useEmit = (): TEmit => useEdxHost().emit;\n\n/** The node Radix/shadcn overlays should portal into (shadow root in shadow mode, `null` -> body in light mode). */\nexport const usePortalContainer = (): HTMLElement | null => useEdxHost().portalContainer;\n\nexport const useDomMode = (): TDomMode => useEdxHost().mode;\n\ninterface ISlotProps {\n /**\n * Optional slot name. When provided in shadow mode, renders `<slot name=\"...\">` so\n * consumers can assign host-light-DOM children to specific named projection points.\n * Named slots are shadow-mode only; in light mode the `name` prop is ignored and\n * the default (single) re-inflation path is used unchanged.\n */\n name?: string;\n}\n\n/**\n * Projects host light-DOM children. Renders a native `<slot>` in shadow mode and\n * re-inflates the captured markup in light mode (where no native slotting exists).\n *\n * Pass an optional `name` prop to render a named `<slot name=\"...\">` in shadow mode,\n * enabling multi-part containers (Tabs, Accordion, Table) to host their trigger/panel\n * content as live, host-owned light-DOM nodes assigned to distinct projection points.\n */\nexport const Slot = ({ name }: ISlotProps = {}) => {\n const { mode, slotHtml } = useEdxHost();\n if (mode === 'shadow') {\n return <slot name={name} />;\n }\n if (!slotHtml) {\n return null;\n }\n // display:contents keeps the wrapper layout-transparent so re-inflated content lays\n // out exactly as the React children would directly (pixel parity with the React app).\n // biome-ignore lint/security/noDangerouslySetInnerHtml: slotHtml is the host's own captured light-DOM markup (same trust as the surrounding page), re-inflated because light DOM has no native <slot>.\n return <span style={{ display: 'contents' }} dangerouslySetInnerHTML={{ __html: slotHtml }} />;\n};\n","export const EDX_FIELD_CONTROL_CONNECT_EVENT = 'edx-field-control-connect';\n\nexport interface IEdxFieldControlRegistrationDetail {\n control: HTMLElement;\n setCleanup: (cleanup: () => void) => void;\n}\n","import type { TDomMode } from './types';\n\nlet defaultMode: TDomMode = 'light';\n\n/**\n * Switch the default rendering mode for every element that does not pin its own\n * `mode`. This is the one knob for flipping the whole library between light and\n * shadow DOM.\n */\nexport const setDefaultMode = (mode: TDomMode): void => {\n defaultMode = mode;\n};\n\nexport const getDefaultMode = (): TDomMode => defaultMode;\n","const sheetCache = new Map<string, CSSStyleSheet>();\n\n/**\n * Build (or reuse) a constructable stylesheet for the given CSS. Sheets are\n * cached by content so every shadow root adopts the *same* sheet by reference:\n * no per-instance `<style>` duplication.\n */\nexport const getStyleSheet = (css: string): CSSStyleSheet | null => {\n if (typeof CSSStyleSheet === 'undefined') {\n return null;\n }\n const cached = sheetCache.get(css);\n if (cached) {\n return cached;\n }\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n sheetCache.set(css, sheet);\n return sheet;\n};\n","const DARK_CLASS = 'dark';\n\nconst targets = new Set<HTMLElement>();\nlet observer: MutationObserver | null = null;\n\nconst syncTargets = (): void => {\n const isDark = document.documentElement.classList.contains(DARK_CLASS);\n for (const target of targets) {\n target.classList.toggle(DARK_CLASS, isDark);\n }\n};\n\nexport const registerShadowThemeTargets = (...nextTargets: HTMLElement[]): (() => void) => {\n for (const target of nextTargets) {\n targets.add(target);\n }\n syncTargets();\n\n if (!observer) {\n observer = new MutationObserver(syncTargets);\n observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] });\n }\n\n return () => {\n for (const target of nextTargets) {\n targets.delete(target);\n }\n if (targets.size === 0) {\n observer?.disconnect();\n observer = null;\n }\n };\n};\n","import type { ComponentType } from 'react';\nimport { flushSync } from 'react-dom';\nimport type { Root } from 'react-dom/client';\nimport { createRoot } from 'react-dom/client';\nimport { EdxHostProvider } from './context';\nimport { EDX_FIELD_CONTROL_CONNECT_EVENT, type IEdxFieldControlRegistrationDetail } from './field-control';\nimport { getDefaultMode } from './mode';\nimport { getStyleSheet } from './styles';\nimport { registerShadowThemeTargets } from './theme-state';\nimport type { IDefineElementOptions, TDomMode, TEmit, TFormValue } from './types';\n\nconst PORTAL_ATTR = 'data-edx-portal';\nconst FORM_RESET_PROPERTIES = ['value', 'checked'] as const;\nconst VALUE_MISSING_MESSAGE = 'Please fill out this field.';\n\nconst cloneFormState = (value: unknown): unknown => (Array.isArray(value) ? [...value] : value);\n\nconst isEmptyFormValue = (value: unknown): boolean => {\n if (value == null || value === '') {\n return true;\n }\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n if (value instanceof FormData) {\n return value.entries().next().done === true;\n }\n return false;\n};\n\nconst isRequiredValueMissing = <TProps extends object>(props: TProps, formValue: TFormValue): boolean => {\n const values = props as Record<string, unknown>;\n if (values.required !== true) {\n return false;\n }\n if ('checked' in values || 'defaultChecked' in values) {\n return (values.checked ?? values.defaultChecked) !== true;\n }\n const value = values.value ?? values.defaultValue;\n return isEmptyFormValue(value === undefined ? formValue : value);\n};\n\n/**\n * Register a React component as an `<edx-*>` custom element.\n *\n * Works in light or shadow DOM from the same component code. Attribute changes\n * re-render (React reconciles, state and focus are preserved, no remount). The\n * component reads host context via the `@edyn/dom` hooks (`useEmit`,\n * `usePortalContainer`, `Slot`).\n */\nexport const defineElement = <TProps extends object>(\n tag: string,\n Component: ComponentType<TProps>,\n options: IDefineElementOptions<TProps> = {},\n): void => {\n if (typeof customElements === 'undefined') {\n return;\n }\n if (customElements.get(tag)) {\n return;\n }\n\n const observed = options.observedAttributes ?? [];\n\n class EdxElement extends HTMLElement {\n // Form-associated custom elements are labelable, so a native <label for>\n // routes its click to this host; delegateClick then forwards it to the\n // inner control. Defaults false for non-form elements.\n static formAssociated = options.formAssociated ?? false;\n\n static get observedAttributes(): string[] {\n return observed;\n }\n\n #root: Root | null = null;\n // Delivery mode is an instance invariant: reconnects must reuse the root\n // selected at construction instead of trying to swap light and shadow DOM.\n readonly #mode: TDomMode = options.mode ?? getDefaultMode();\n #portalContainer: HTMLElement | null = null;\n #shadow: ShadowRoot | null = null;\n #shadowMountPoint: HTMLElement | null = null;\n #shadowPortalContainer: HTMLElement | null = null;\n #slotHtml = '';\n #propOverrides: Partial<TProps> = {};\n #mountQueued = false;\n #unmountPromise: Promise<void> | null = null;\n #delegateAbort: AbortController | null = null;\n #fieldControlCleanup: (() => void) | null = null;\n #themeCleanup: (() => void) | null = null;\n #internals: ElementInternals | null = null;\n #formValueOverride: TFormValue | undefined;\n #formDisabled = false;\n #formResetState: Map<string, unknown> | null = null;\n\n constructor() {\n super();\n if (options.formAssociated && typeof this.attachInternals === 'function') {\n this.#internals = this.attachInternals();\n }\n }\n\n connectedCallback(): void {\n if (options.formAssociated) {\n // Announce after the current DOM task so a containing edx-field can\n // mount its bridge first and same-task moves register at their final parent.\n queueMicrotask(() => {\n if (!this.isConnected) {\n return;\n }\n this.#fieldControlCleanup?.();\n let cleanup: (() => void) | null = null;\n const detail: IEdxFieldControlRegistrationDetail = {\n control: this,\n setCleanup: (nextCleanup) => {\n cleanup = nextCleanup;\n },\n };\n this.dispatchEvent(\n new CustomEvent<IEdxFieldControlRegistrationDetail>(EDX_FIELD_CONTROL_CONNECT_EVENT, {\n detail,\n bubbles: true,\n composed: true,\n }),\n );\n this.#fieldControlCleanup = cleanup;\n });\n }\n this.#ensureThemeRegistration();\n if (this.#root || this.#mountQueued) {\n return;\n }\n // Defer the mount one microtask. Some frameworks (Angular Ivy) insert the\n // element into the DOM before appending its text/children, so connectedCallback\n // fires while innerHTML is still empty. Waiting a microtask lets the current\n // task finish populating the element before we snapshot it for the light-DOM\n // slot; without this, light-mode slotted text (badge/button labels) is lost.\n this.#mountQueued = true;\n queueMicrotask(() => {\n void this.#mountAfterPendingUnmount();\n });\n }\n\n async #mountAfterPendingUnmount(): Promise<void> {\n const pendingUnmount = this.#unmountPromise;\n if (pendingUnmount) {\n await pendingUnmount;\n if (this.#unmountPromise === pendingUnmount) {\n this.#unmountPromise = null;\n }\n }\n\n this.#mountQueued = false;\n if (this.#root || !this.isConnected) {\n return;\n }\n this.#mount();\n }\n\n #mount(): void {\n let mountPoint: HTMLElement;\n\n this.#captureFormResetState();\n\n if (this.#mode === 'shadow') {\n if (!this.#shadow) {\n this.#shadow = this.attachShadow({\n mode: options.shadowMode ?? 'open',\n delegatesFocus: (options.delegateClick ?? false) || (options.formAssociated ?? false),\n });\n const sheet = options.styles ? getStyleSheet(options.styles) : null;\n if (sheet) {\n this.#shadow.adoptedStyleSheets = [...this.#shadow.adoptedStyleSheets, sheet];\n }\n\n this.#shadowMountPoint = document.createElement('div');\n this.#shadowMountPoint.className = 'edx-root';\n this.#shadow.appendChild(this.#shadowMountPoint);\n\n this.#shadowPortalContainer = document.createElement('div');\n this.#shadowPortalContainer.setAttribute(PORTAL_ATTR, '');\n this.#shadowPortalContainer.className = 'edx-root';\n this.#shadow.appendChild(this.#shadowPortalContainer);\n }\n\n if (!this.#shadowMountPoint || !this.#shadowPortalContainer) {\n throw new Error(`Shadow mount points are unavailable for <${tag}>`);\n }\n\n // Block-level host, same as light mode below. A custom element defaults to\n // display:inline, which drops margin-based spacing (space-y-*, my-*) from\n // the parent and makes the host inline-level, so an adjacent element sits\n // tight against it. Match the React component's block layout. (The harness\n // never caught this: one element per cell, so the dropped margin never\n // showed; the host pages, component + helper text, revealed it.)\n this.style.display = options.display ?? 'block';\n\n mountPoint = this.#shadowMountPoint;\n this.#portalContainer = this.#shadowPortalContainer;\n this.#ensureThemeRegistration();\n } else {\n // Snapshot the light-DOM children once, on the first mount. On a reconnect\n // (the element was moved, not destroyed) the prior render has already been\n // unmounted and innerHTML is empty, so re-reading it here would erase the\n // slot content; keep the original snapshot instead.\n if (!this.#slotHtml) {\n this.#slotHtml = this.innerHTML;\n }\n this.innerHTML = '';\n this.classList.add('edx-root');\n // Block-level host so margin-based spacing on the parent (space-y-*, my-*) applies\n // to the element, and so it acts as a flex/grid item in those layouts, matching how\n // the React component lays out directly. (display:contents would drop those margins.)\n this.style.display = options.display ?? 'block';\n mountPoint = this;\n this.#portalContainer = null;\n }\n\n if (options.delegateClick || (this.#mode === 'light' && options.formAssociated)) {\n this.#delegateAbort = new AbortController();\n const { signal } = this.#delegateAbort;\n const findInteractive = (): HTMLElement | null => {\n const root: ParentNode = this.#shadow ?? this;\n return root.querySelector<HTMLElement>('button, input, select, textarea, [role=\"switch\"], [role=\"checkbox\"]');\n };\n if (options.delegateClick) {\n this.addEventListener(\n 'click',\n (event) => {\n if (event.composedPath()[0] !== this) {\n return;\n }\n const inner = findInteractive();\n if (!inner) {\n return;\n }\n inner.focus();\n if (inner.tagName !== 'INPUT' && inner.tagName !== 'SELECT' && inner.tagName !== 'TEXTAREA') {\n inner.click();\n }\n },\n { signal },\n );\n }\n if (this.#mode === 'light') {\n this.addEventListener(\n 'focus',\n () => {\n findInteractive()?.focus();\n },\n { signal },\n );\n }\n }\n\n this.#root = createRoot(mountPoint);\n // Commit the first render before the next paint. createRoot().render()\n // commits on a macrotask, so the browser can paint the connected-but-empty\n // element first and a host shell then reveals half-rendered modules (FOUC).\n // The rule is commit-before-paint; flushSync is how a React-to-DOM bridge\n // guarantees it. First render only; attribute-change re-renders stay async\n // via #render(). See .docs/decisions.md.\n flushSync(() => {\n this.#render();\n });\n }\n\n #ensureThemeRegistration(): void {\n if (!this.#shadowMountPoint || !this.#shadowPortalContainer || this.#themeCleanup) {\n return;\n }\n this.#themeCleanup = registerShadowThemeTargets(this.#shadowMountPoint, this.#shadowPortalContainer);\n }\n\n disconnectedCallback(): void {\n this.#fieldControlCleanup?.();\n this.#fieldControlCleanup = null;\n this.#themeCleanup?.();\n this.#themeCleanup = null;\n const root = this.#root;\n if (root) {\n this.#unmountPromise = new Promise((resolve) => {\n queueMicrotask(() => {\n if (this.isConnected || this.#root !== root) {\n resolve();\n return;\n }\n try {\n this.#delegateAbort?.abort();\n this.#delegateAbort = null;\n root.unmount();\n } finally {\n if (this.#root === root) {\n this.#root = null;\n this.#portalContainer = null;\n }\n resolve();\n }\n });\n });\n }\n }\n\n attributeChangedCallback(): void {\n if (this.#root) {\n this.#render();\n }\n }\n\n formDisabledCallback(disabled: boolean): void {\n this.#formDisabled = disabled;\n if (this.#root) {\n this.#render();\n }\n }\n\n formResetCallback(): void {\n this.#formValueOverride = undefined;\n for (const [property, value] of this.#formResetState ?? []) {\n options.domProperties?.[property]?.set(this, cloneFormState(value));\n }\n if (this.#root) {\n this.#render();\n }\n }\n\n /** Push complex object/array props that cannot travel as attributes. */\n setProps(props: Partial<TProps>): void {\n this.#propOverrides = { ...this.#propOverrides, ...props };\n if (this.#root) {\n this.#render();\n }\n }\n\n #emit: TEmit = (type, detail) => {\n this.dispatchEvent(new CustomEvent(type, { detail, bubbles: true, composed: true }));\n };\n\n #setFormValue = (value: TFormValue, state?: TFormValue): void => {\n if (this.#mode !== 'shadow') {\n return;\n }\n this.#formValueOverride = value;\n this.#internals?.setFormValue(value, state);\n this.#syncFormValidity(this.#getProps(), value);\n };\n\n #captureFormResetState(): void {\n if (!options.formAssociated || this.#formResetState) {\n return;\n }\n this.#formResetState = new Map();\n for (const property of FORM_RESET_PROPERTIES) {\n const descriptor = options.domProperties?.[property];\n if (descriptor) {\n this.#formResetState.set(property, cloneFormState(descriptor.get(this)));\n }\n }\n }\n\n #syncFormValidity(props: TProps, formValue: TFormValue): void {\n if (this.#mode !== 'shadow' || !this.#internals?.setValidity) {\n return;\n }\n const disabled = this.#formDisabled || (props as Record<string, unknown>).disabled === true;\n if (!disabled && isRequiredValueMissing(props, formValue)) {\n this.#internals.setValidity({ valueMissing: true }, VALUE_MISSING_MESSAGE);\n return;\n }\n this.#internals.setValidity({});\n }\n\n #getProps(): TProps {\n const raw: Record<string, string | null> = {};\n for (const name of observed) {\n raw[name] = this.getAttribute(name);\n }\n const base = options.transformProps ? options.transformProps(raw, this) : (raw as unknown as TProps);\n const props = { ...base, ...this.#propOverrides };\n if (options.formAssociated && this.#formDisabled) {\n return { ...props, disabled: true };\n }\n return props;\n }\n\n #render(): void {\n if (!this.#root) {\n return;\n }\n const props = this.#getProps();\n if (this.#mode === 'shadow' && this.#internals && options.formValue) {\n const formValue = this.#formValueOverride === undefined ? options.formValue(props, this) : this.#formValueOverride;\n this.#internals.setFormValue(formValue);\n this.#syncFormValidity(props, formValue);\n }\n this.#root.render(\n <EdxHostProvider\n value={{\n host: this,\n mode: this.#mode,\n emit: this.#emit,\n portalContainer: this.#portalContainer,\n setFormValue: this.#setFormValue,\n slotHtml: this.#slotHtml,\n }}\n >\n <Component {...props} />\n </EdxHostProvider>,\n );\n }\n }\n\n // Install DOM property descriptors so host frameworks can read/write element\n // state as JS properties (e.g. `el.checked = true`, `el.value`).\n // We do this after the class body because private-field access from outside\n // the class is not possible; the descriptors call the element's own public\n // setAttribute / setProps methods, which are accessible from the prototype.\n if (options.domProperties) {\n for (const [propName, descriptor] of Object.entries(options.domProperties)) {\n Object.defineProperty(EdxElement.prototype, propName, {\n get(this: EdxElement) {\n return descriptor.get(this);\n },\n set(this: EdxElement, value: unknown) {\n descriptor.set(this, value);\n },\n configurable: true,\n enumerable: false,\n });\n }\n }\n\n customElements.define(tag, EdxElement);\n};\n","import { defineElement, type IDefineElementOptions, type IDomPropertyDescriptor, type TDomMode } from '@edyn/dom';\nimport type { ComponentType } from 'react';\n\n/** Passed to every `registerEdx*` function so all elements share one DOM mode + stylesheet. */\nexport interface IRegisterContext {\n mode?: TDomMode;\n styles?: string;\n}\n\n/**\n * Register a class-4 overlay element. Overlays are pinned to **light mode**: their\n * Base UI portal lands in `document.body` and cannot reach a shadow root, so shadow\n * mode would let the portaled content escape the shadow root, lose the adopted\n * stylesheet, and render unstyled with no error. This helper forces `mode: 'light'`\n * once, so no overlay can inherit that footgun by forgetting to pin it. Mirror\n * `edx-dialog` / `edx-drawer`. See docs/delivery-classes.md.\n */\nexport const registerOverlayElement = <TProps extends object>(\n tag: string,\n component: ComponentType<TProps>,\n ctx: IRegisterContext,\n options: Omit<IDefineElementOptions<TProps>, 'mode' | 'styles'> = {},\n): void => {\n defineElement<TProps>(tag, component, { ...options, mode: 'light', styles: ctx.styles });\n};\n\n/**\n * Coerce a boolean-ish attribute string to a real boolean. Follows HTML boolean\n * attribute semantics: any present value is `true` EXCEPT the literal `\"false\"`\n * (and `null`/`undefined`). Note the gotcha: `\"0\"` coerces to `true` (presence\n * wins); to express false, set the attribute to `\"false\"` or omit it. This\n * contract is pinned by registry.test.ts.\n */\nexport const coerceBool = (value: string | null | undefined): boolean => value != null && value !== 'false';\n\n/** Reflect a boolean DOM state using native boolean-attribute semantics. */\nexport const reflectBool = (host: HTMLElement, attribute: string, value: boolean): void => {\n if (value) {\n host.setAttribute(attribute, 'true');\n } else {\n host.removeAttribute(attribute);\n }\n};\n\n/**\n * Create a real boolean property backed by a reflected boolean attribute.\n * When an uncontrolled `default-*` attribute exists, read it until the first\n * explicit property write or user change promotes the state to the live\n * attribute.\n */\nexport const booleanDomProperty = (attribute: string, defaultAttribute?: string): IDomPropertyDescriptor<unknown> => ({\n get: (host) => {\n const current = host.getAttribute(attribute);\n if (current != null) {\n return coerceBool(current);\n }\n return defaultAttribute ? coerceBool(host.getAttribute(defaultAttribute)) : false;\n },\n set: (host, value) => {\n if (defaultAttribute) {\n host.removeAttribute(defaultAttribute);\n }\n reflectBool(host, attribute, Boolean(value));\n },\n});\n\n/** Coerce a numeric attribute string to a number, or `undefined` when absent/invalid. */\nexport const coerceNumber = (value: string | null | undefined): number | undefined => {\n if (value == null || value === '') {\n return undefined;\n }\n const parsed = Number(value);\n return Number.isNaN(parsed) ? undefined : parsed;\n};\n\n/** Parse a JSON attribute string into a value of type T, or `undefined` on absence/parse error. */\nexport const coerceJson = <T>(value: string | null | undefined): T | undefined => {\n if (value == null || value === '') {\n return undefined;\n }\n try {\n return JSON.parse(value) as T;\n } catch {\n return undefined;\n }\n};\n\n/** Build the repeated-name payload required by multi-value custom controls. */\nexport const multipleFormValue = (host: HTMLElement, values: readonly FormDataEntryValue[]): FormData | null => {\n const name = host.getAttribute('name');\n if (!name) {\n return null;\n }\n const data = new FormData();\n for (const value of values) {\n data.append(name, value);\n }\n return data;\n};\n","import { defineElement, Slot, useEdxHost } from '@edyn/dom';\nimport { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@edyn/ui';\nimport type { IRegisterContext } from './registry';\nimport { coerceBool, coerceJson } from './registry';\n\nexport interface IAccordionItem {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface IEdxAccordionProps {\n items?: IAccordionItem[];\n value?: string | string[];\n defaultValue?: string | string[];\n openMultiple?: boolean;\n}\n\n/** Normalize the value prop (scalar, array, or absent) to the string[] Base UI expects. */\nconst toValueArray = (value: string | string[] | undefined): string[] => {\n if (value == null) {\n return [];\n }\n if (Array.isArray(value)) {\n return value;\n }\n return value === '' ? [] : [value];\n};\n\nexport const EdxAccordion = (props: IEdxAccordionProps) => {\n const { emit, host } = useEdxHost();\n\n const items = props.items ?? [];\n const openMultiple = props.openMultiple ?? false;\n\n const currentValue: string[] = props.value != null ? toValueArray(props.value) : toValueArray(props.defaultValue);\n\n const handleValueChange = (next: string[]) => {\n // In open-multiple mode the attribute carries the full JSON array so every\n // open item survives a re-render; emitting just the last value (the old bug)\n // collapsed the set to one. Single mode keeps the scalar contract.\n const emitValue = openMultiple ? next : (next[0] ?? '');\n const serialized = openMultiple ? JSON.stringify(next) : (next[0] ?? '');\n host.removeAttribute('default-value');\n host.setAttribute('value', serialized);\n emit('edx-change', { value: emitValue });\n };\n\n return (\n <Accordion value={currentValue} multiple={openMultiple} onValueChange={handleValueChange}>\n {items.map((item) => (\n <AccordionItem key={item.value} value={item.value} disabled={item.disabled}>\n <AccordionTrigger>{item.label}</AccordionTrigger>\n <AccordionContent>\n <Slot name={`panel-${item.value}`} />\n </AccordionContent>\n </AccordionItem>\n ))}\n </Accordion>\n );\n};\n\nexport const registerEdxAccordion = (ctx: IRegisterContext): void => {\n defineElement<IEdxAccordionProps>('edx-accordion', EdxAccordion, {\n mode: 'shadow',\n styles: ctx.styles,\n observedAttributes: ['items', 'value', 'default-value', 'open-multiple'],\n transformProps: (raw) => {\n const openMultiple = coerceBool(raw['open-multiple']);\n // When open-multiple, value/default-value attributes carry a JSON array;\n // otherwise they hold a single scalar value.\n const parse = (v: string | null | undefined): string | string[] | undefined => {\n if (v == null) {\n return undefined;\n }\n if (v === '') {\n return openMultiple ? [] : '';\n }\n return openMultiple ? (coerceJson<string[]>(v) ?? [v]) : v;\n };\n return {\n items: coerceJson<IAccordionItem[]>(raw.items),\n value: parse(raw.value),\n defaultValue: parse(raw['default-value']),\n openMultiple,\n };\n },\n domProperties: {\n value: {\n // In open-multiple mode the attribute carries JSON; the JS property speaks\n // real arrays so Angular CVA and other host models round-trip unchanged.\n get: (host) => {\n const raw = host.getAttribute('value') ?? host.getAttribute('default-value') ?? '';\n if (coerceBool(host.getAttribute('open-multiple'))) {\n return coerceJson<string[]>(raw) ?? (raw === '' ? [] : [raw]);\n }\n return raw;\n },\n set: (host, value) => {\n if (Array.isArray(value)) {\n host.setAttribute('value', JSON.stringify(value));\n return;\n }\n host.setAttribute('value', String(value ?? ''));\n },\n },\n },\n });\n};\n","import { defineElement, Slot, useEmit } from '@edyn/dom';\nimport { Alert, AlertAction, AlertDescription, AlertTitle, Button } from '@edyn/ui';\n\nimport type { ComponentProps } from 'react';\nimport type { IRegisterContext } from './registry';\n\ntype TAlertVariant = ComponentProps<typeof Alert>['variant'];\n\nexport interface IEdxAlertProps {\n variant?: TAlertVariant;\n title?: string;\n description?: string;\n actionLabel?: string;\n actionAriaLabel?: string;\n}\n\nexport const EdxAlert = (props: IEdxAlertProps) => {\n const emit = useEmit();\n\n return (\n <Alert variant={props.variant ?? 'default'}>\n {props.title && <AlertTitle>{props.title}</AlertTitle>}\n {props.description && <AlertDescription>{props.description}</AlertDescription>}\n <Slot />\n {props.actionLabel && (\n <AlertAction>\n <Button variant=\"ghost\" size=\"icon-xs\" aria-label={props.actionAriaLabel ?? props.actionLabel} onClick={() => emit('edx-action')}>\n {props.actionLabel}\n </Button>\n </AlertAction>\n )}\n </Alert>\n );\n};\n\nexport const registerEdxAlert = (ctx: IRegisterContext): void => {\n defineElement<IEdxAlertProps>('edx-alert', EdxAlert, {\n mode: ctx.mode,\n styles: ctx.styles,\n observedAttributes: ['variant', 'title', 'description', 'action-label', 'action-aria-label'],\n transformProps: (raw) => ({\n variant: (raw.variant ?? undefined) as TAlertVariant,\n title: raw.title ?? undefined,\n description: raw.description ?? undefined,\n actionLabel: raw['action-label'] ?? undefined,\n actionAriaLabel: raw['action-aria-label'] ?? undefined,\n }),\n });\n};\n","import { defineElement, useEdxHost } from '@edyn/dom';\nimport { AudioPlayer } from '@edyn/ui';\n\nimport type { IRegisterContext } from './registry';\nimport { coerceBool } from './registry';\n\nexport interface IEdxAudioPlayerProps {\n src?: string;\n muted?: boolean;\n loop?: boolean;\n disabled?: boolean;\n width?: string;\n ariaLabel?: string;\n}\n\nexport const EdxAudioPlayer = (props: IEdxAudioPlayerProps) => {\n const { emit } = useEdxHost();\n\n return (\n <AudioPlayer\n src={props.src}\n muted={props.muted ?? false}\n loop={props.loop ?? false}\n disabled={props.disabled ?? false}\n width={props.width}\n aria-label={props.ariaLabel ?? 'Audio player'}\n onPlay={() => emit('edx-play', {})}\n onPause={() => emit('edx-pause', {})}\n onEnded={() => emit('edx-ended', {})}\n onTimeUpdate={(currentTime, duration) => emit('edx-timeupdate', { currentTime, duration })}\n />\n );\n};\n\nexport const registerEdxAudioPlayer = (ctx: IRegisterContext): void => {\n defineElement<IEdxAudioPlayerProps>('edx-audio-player', EdxAudioPlayer, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'block',\n observedAttributes: ['src', 'muted', 'loop', 'disabled', 'width', 'aria-label'],\n transformProps: (raw) => ({\n src: raw.src ?? undefined,\n muted: coerceBool(raw.muted),\n loop: coerceBool(raw.loop),\n disabled: coerceBool(raw.disabled),\n width: raw.width ?? undefined,\n ariaLabel: raw['aria-label'] ?? undefined,\n }),\n });\n};\n","import { defineElement } from '@edyn/dom';\nimport { Avatar, AvatarBadge, AvatarFallback, AvatarImage } from '@edyn/ui';\n\nimport type { IRegisterContext } from './registry';\n\nexport interface IEdxAvatarProps {\n src?: string;\n alt?: string;\n fallback?: string;\n size?: 'sm' | 'default' | 'lg';\n status?: 'online' | 'away' | 'busy' | 'offline';\n}\n\nconst STATUS_CLASS: Record<NonNullable<IEdxAvatarProps['status']>, string> = {\n online: 'bg-success',\n away: 'bg-warning',\n busy: 'bg-destructive',\n offline: 'bg-muted-foreground',\n};\n\nexport const EdxAvatar = (props: IEdxAvatarProps) => {\n return (\n <Avatar size={props.size ?? 'default'}>\n <AvatarImage src={props.src} alt={props.alt} />\n <AvatarFallback>{props.fallback ?? ''}</AvatarFallback>\n {props.status && <AvatarBadge className={STATUS_CLASS[props.status]} role=\"img\" aria-label={`${props.status} status`} />}\n </Avatar>\n );\n};\n\nexport const registerEdxAvatar = (ctx: IRegisterContext): void => {\n defineElement<IEdxAvatarProps>('edx-avatar', EdxAvatar, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'inline-flex',\n observedAttributes: ['src', 'alt', 'fallback', 'size', 'status'],\n transformProps: (raw) => ({\n src: raw.src ?? undefined,\n alt: raw.alt ?? undefined,\n fallback: raw.fallback ?? undefined,\n size: (raw.size as IEdxAvatarProps['size']) ?? undefined,\n status: (raw.status as IEdxAvatarProps['status']) ?? undefined,\n }),\n });\n};\n","import { defineElement, Slot } from '@edyn/dom';\nimport { Badge } from '@edyn/ui';\n\nimport type { ComponentProps } from 'react';\nimport type { IRegisterContext } from './registry';\n\ntype TBadgeVariant = ComponentProps<typeof Badge>['variant'];\ntype TBadgeSize = ComponentProps<typeof Badge>['size'];\n\nexport interface IEdxBadgeProps {\n variant?: TBadgeVariant;\n size?: TBadgeSize;\n}\n\nexport const EdxBadge = (props: IEdxBadgeProps) => {\n return (\n <Badge variant={props.variant ?? 'default'} size={props.size ?? 'default'}>\n <Slot />\n </Badge>\n );\n};\n\nexport const registerEdxBadge = (ctx: IRegisterContext): void => {\n defineElement<IEdxBadgeProps>('edx-badge', EdxBadge, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'inline-flex',\n observedAttributes: ['variant', 'size'],\n transformProps: (raw) => ({\n variant: (raw.variant ?? undefined) as TBadgeVariant,\n size: (raw.size ?? undefined) as TBadgeSize,\n }),\n });\n};\n","import { defineElement } from '@edyn/dom';\nimport { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from '@edyn/ui';\nimport type { ReactNode } from 'react';\nimport type { IRegisterContext } from './registry';\nimport { coerceJson } from './registry';\n\nexport interface IEdxBreadcrumbItem {\n label: string;\n href?: string;\n current?: boolean;\n}\n\nexport interface IEdxBreadcrumbProps {\n items?: IEdxBreadcrumbItem[];\n}\n\nexport const EdxBreadcrumb = (props: IEdxBreadcrumbProps) => {\n const items = props.items ?? [];\n\n const nodes: ReactNode[] = [];\n items.forEach((item, index) => {\n nodes.push(\n // biome-ignore lint/suspicious/noArrayIndexKey: items are static, display-only data (no reordering, insertion, or per-row state), so the index is a stable key\n <BreadcrumbItem key={`item-${index}`}>\n {item.current ? <BreadcrumbPage>{item.label}</BreadcrumbPage> : <BreadcrumbLink href={item.href}>{item.label}</BreadcrumbLink>}\n </BreadcrumbItem>,\n );\n if (index < items.length - 1) {\n // biome-ignore lint/suspicious/noArrayIndexKey: items are static, display-only data (no reordering, insertion, or per-row state), so the index is a stable key\n nodes.push(<BreadcrumbSeparator key={`sep-${index}`} />);\n }\n });\n\n return (\n <Breadcrumb>\n <BreadcrumbList>{nodes}</BreadcrumbList>\n </Breadcrumb>\n );\n};\n\nexport const registerEdxBreadcrumb = (ctx: IRegisterContext): void => {\n // Display-only data container: renders the Breadcrumb parts from an `items`\n // JSON attribute, the same JSON-attribute pattern as edx-table. No slots:\n // breadcrumb entries are data (label/href/current), not arbitrary children.\n defineElement<IEdxBreadcrumbProps>('edx-breadcrumb', EdxBreadcrumb, {\n mode: ctx.mode,\n styles: ctx.styles,\n observedAttributes: ['items'],\n transformProps: (raw) => ({\n items: coerceJson<IEdxBreadcrumbItem[]>(raw.items) ?? [],\n }),\n });\n};\n","import { defineElement, Slot, useEmit } from '@edyn/dom';\nimport { Button } from '@edyn/ui';\nimport type { ComponentProps } from 'react';\nimport type { IRegisterContext } from './registry';\nimport { coerceBool } from './registry';\n\ntype TButtonVariant = ComponentProps<typeof Button>['variant'];\ntype TButtonSize = ComponentProps<typeof Button>['size'];\n\nexport interface IEdxButtonProps {\n variant?: TButtonVariant;\n size?: TButtonSize;\n disabled?: boolean;\n ariaLabel?: string;\n ariaDescription?: string;\n type?: 'button' | 'submit' | 'reset';\n name?: string;\n form?: string;\n value?: string;\n autofocus?: boolean;\n}\n\nexport const EdxButton = (props: IEdxButtonProps) => {\n const emit = useEmit();\n\n return (\n <Button\n type={props.type ?? 'button'}\n variant={props.variant ?? 'default'}\n size={props.size ?? 'default'}\n disabled={props.disabled ?? false}\n aria-label={props.ariaLabel}\n aria-description={props.ariaDescription}\n name={props.name}\n form={props.form}\n value={props.value}\n autoFocus={props.autofocus}\n onClick={() => emit('edx-click')}\n >\n <Slot />\n </Button>\n );\n};\n\nexport const registerEdxButton = (ctx: IRegisterContext): void => {\n defineElement<IEdxButtonProps>('edx-button', EdxButton, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'inline-flex',\n observedAttributes: ['variant', 'size', 'disabled', 'aria-label', 'aria-description', 'type', 'name', 'form', 'value', 'autofocus'],\n transformProps: (raw) => ({\n variant: (raw.variant ?? undefined) as TButtonVariant,\n size: (raw.size ?? undefined) as TButtonSize,\n disabled: coerceBool(raw.disabled),\n ariaLabel: raw['aria-label'] ?? undefined,\n ariaDescription: raw['aria-description'] ?? undefined,\n type: (raw.type as IEdxButtonProps['type']) ?? undefined,\n name: raw.name ?? undefined,\n form: raw.form ?? undefined,\n value: raw.value ?? undefined,\n autofocus: coerceBool(raw.autofocus),\n }),\n });\n};\n","import { defineElement, Slot, useEdxHost } from '@edyn/dom';\nimport { ButtonGroup } from '@edyn/ui';\nimport { useLayoutEffect } from 'react';\n\nimport type { IRegisterContext } from './registry';\n\nexport type TEdxButtonGroupOrientation = 'horizontal' | 'vertical';\n\nexport interface IEdxButtonGroupProps {\n orientation?: TEdxButtonGroupOrientation;\n}\n\nexport const EdxButtonGroup = (props: IEdxButtonGroupProps) => {\n const { host } = useEdxHost();\n const orientation = props.orientation ?? 'horizontal';\n\n useLayoutEffect(() => {\n const managedButtons = new Set<HTMLElement>();\n\n const releaseButton = (button: HTMLElement): void => {\n delete button.dataset.edxButtonGroupPosition;\n button.style.removeProperty('margin-inline-start');\n button.style.removeProperty('margin-block-start');\n managedButtons.delete(button);\n };\n\n const updatePositions = (): void => {\n const buttons = Array.from(host.children).filter((child): child is HTMLElement => child.matches('edx-button'));\n const nextButtons = new Set(buttons);\n\n for (const button of managedButtons) {\n if (!nextButtons.has(button)) {\n releaseButton(button);\n }\n }\n\n for (const [index, button] of buttons.entries()) {\n const position = index === 0 ? 'first' : index === buttons.length - 1 ? 'last' : 'middle';\n button.dataset.edxButtonGroupPosition = buttons.length === 1 ? 'single' : `${orientation}-${position}`;\n button.style.marginInlineStart = orientation === 'horizontal' && index > 0 ? '-1px' : '';\n button.style.marginBlockStart = orientation === 'vertical' && index > 0 ? '-1px' : '';\n managedButtons.add(button);\n }\n };\n\n updatePositions();\n const observer = new MutationObserver(updatePositions);\n observer.observe(host, { childList: true });\n\n return () => {\n observer.disconnect();\n for (const button of managedButtons) {\n releaseButton(button);\n }\n };\n }, [host, orientation]);\n\n return (\n <>\n <style>{`\n [data-slot='button-group'] > slot::slotted(edx-button) {\n position: relative;\n z-index: 0;\n }\n [data-slot='button-group'] > slot::slotted(edx-button:hover),\n [data-slot='button-group'] > slot::slotted(edx-button:focus-within) {\n z-index: 10;\n }\n `}</style>\n <ButtonGroup orientation={orientation}>\n <Slot />\n </ButtonGroup>\n </>\n );\n};\n\nexport const registerEdxButtonGroup = (ctx: IRegisterContext): void => {\n defineElement<IEdxButtonGroupProps>('edx-button-group', EdxButtonGroup, {\n mode: 'shadow',\n styles: ctx.styles,\n display: 'inline-flex',\n observedAttributes: ['orientation'],\n transformProps: (raw) => ({\n orientation: (raw.orientation ?? undefined) as TEdxButtonGroupOrientation | undefined,\n }),\n });\n};\n","import { defineElement, useEdxHost } from '@edyn/dom';\nimport { Calendar } from '@edyn/ui';\nimport type { IRegisterContext } from './registry';\nimport { coerceBool, coerceNumber } from './registry';\n\nexport interface IEdxCalendarProps {\n value?: string;\n defaultValue?: string;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n form?: string;\n min?: string;\n max?: string;\n numberOfMonths?: number;\n showOutsideDays?: boolean;\n fixedWeeks?: boolean;\n hideNavigation?: boolean;\n weekStartsOn?: number;\n ariaLabel?: string;\n ariaDescription?: string;\n invalid?: boolean;\n}\n\n/**\n * Parse a `YYYY-MM-DD` attribute into a local calendar date. Deliberately not\n * `new Date(value)`: that parses date-only strings as UTC midnight, which shifts\n * to the previous day once rendered in a negative-UTC-offset timezone.\n */\nconst parseIsoDate = (value?: string): Date | undefined => {\n const match = value ? /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value) : null;\n if (!match) {\n return undefined;\n }\n const [, year, month, day] = match;\n return new Date(Number(year), Number(month) - 1, Number(day));\n};\n\n/** Format a local calendar date back to `YYYY-MM-DD`, no time/timezone component. */\nconst formatIsoDate = (date: Date): string => {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n};\n\nexport const EdxCalendar = (props: IEdxCalendarProps) => {\n const { emit, host } = useEdxHost();\n const value = props.value ?? props.defaultValue;\n const min = parseIsoDate(props.min);\n const max = parseIsoDate(props.max);\n const disabled = props.disabled\n ? true\n : ([min ? { before: min } : null, max ? { after: max } : null].filter(Boolean) as ({ before: Date } | { after: Date })[]);\n\n return (\n <>\n <Calendar\n mode=\"single\"\n required={props.required}\n selected={parseIsoDate(value)}\n defaultMonth={parseIsoDate(value)}\n disabled={disabled}\n startMonth={min}\n endMonth={max}\n numberOfMonths={props.numberOfMonths}\n showOutsideDays={props.showOutsideDays}\n fixedWeeks={props.fixedWeeks}\n hideNavigation={props.hideNavigation}\n weekStartsOn={props.weekStartsOn as 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined}\n aria-label={props.ariaLabel}\n aria-description={props.ariaDescription}\n aria-invalid={props.invalid || undefined}\n onSelect={(date: Date | undefined) => {\n if (!date) {\n return;\n }\n const iso = formatIsoDate(date);\n host.removeAttribute('default-value');\n host.setAttribute('value', iso);\n emit('edx-change', { value: iso });\n }}\n />\n {props.name ? <input type=\"hidden\" name={props.name} form={props.form} value={value ?? ''} disabled={props.disabled} /> : null}\n </>\n );\n};\n\nexport const registerEdxCalendar = (ctx: IRegisterContext): void => {\n defineElement<IEdxCalendarProps>('edx-calendar', EdxCalendar, {\n mode: ctx.mode,\n styles: ctx.styles,\n // Calendar is w-fit in React (shrinks to its own grid rather than filling\n // its container), so the host uses 'inline-flex' like the other\n // content-sized elements (badge, switch, toggle) instead of the 'block'\n // default that w-full form controls (input, select) use.\n display: 'inline-flex',\n delegateClick: true,\n formAssociated: true,\n formValue: (props) => props.value ?? props.defaultValue ?? '',\n observedAttributes: [\n 'value',\n 'default-value',\n 'disabled',\n 'required',\n 'name',\n 'form',\n 'min',\n 'max',\n 'number-of-months',\n 'show-outside-days',\n 'fixed-weeks',\n 'hide-navigation',\n 'week-starts-on',\n 'aria-label',\n 'aria-description',\n 'invalid',\n ],\n transformProps: (raw) => ({\n value: raw.value ?? undefined,\n defaultValue: raw['default-value'] ?? undefined,\n disabled: coerceBool(raw.disabled),\n required: coerceBool(raw.required),\n name: raw.name ?? undefined,\n form: raw.form ?? undefined,\n min: raw.min ?? undefined,\n max: raw.max ?? undefined,\n numberOfMonths: coerceNumber(raw['number-of-months']),\n showOutsideDays: raw['show-outside-days'] == null ? undefined : coerceBool(raw['show-outside-days']),\n fixedWeeks: raw['fixed-weeks'] == null ? undefined : coerceBool(raw['fixed-weeks']),\n hideNavigation: raw['hide-navigation'] == null ? undefined : coerceBool(raw['hide-navigation']),\n weekStartsOn: coerceNumber(raw['week-starts-on']),\n ariaLabel: raw['aria-label'] ?? undefined,\n ariaDescription: raw['aria-description'] ?? undefined,\n invalid: coerceBool(raw.invalid),\n }),\n // Expose `.value` as a real JS property so Angular CVA and other hosts\n // ng-model bridges can write the ISO date string directly.\n domProperties: {\n value: {\n get: (host) => host.getAttribute('value') ?? host.getAttribute('default-value') ?? '',\n set: (host, value) => {\n host.setAttribute('value', String(value ?? ''));\n },\n },\n },\n });\n};\n","import { defineElement, Slot } from '@edyn/dom';\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@edyn/ui';\n\nimport type { IRegisterContext } from './registry';\n\nexport interface IEdxCardProps {\n heading?: string;\n description?: string;\n size?: 'default' | 'sm';\n}\n\nexport const EdxCard = (props: IEdxCardProps) => {\n return (\n <Card size={props.size}>\n {(props.heading || props.description) && (\n <CardHeader>\n {props.heading && <CardTitle>{props.heading}</CardTitle>}\n {props.description && <CardDescription>{props.description}</CardDescription>}\n </CardHeader>\n )}\n <CardContent>\n <Slot />\n </CardContent>\n </Card>\n );\n};\n\nexport const registerEdxCard = (ctx: IRegisterContext): void => {\n defineElement<IEdxCardProps>('edx-card', EdxCard, {\n mode: 'shadow',\n styles: ctx.styles,\n observedAttributes: ['heading', 'description', 'size'],\n transformProps: (raw) => ({\n heading: raw.heading ?? undefined,\n description: raw.description ?? undefined,\n size: (raw.size as IEdxCardProps['size']) ?? undefined,\n }),\n });\n};\n","import { defineElement, useEdxHost } from '@edyn/dom';\nimport { Checkbox } from '@edyn/ui';\nimport type { IRegisterContext } from './registry';\nimport { booleanDomProperty, coerceBool } from './registry';\n\nexport interface IEdxCheckboxProps {\n checked?: boolean;\n defaultChecked?: boolean;\n indeterminate?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n name?: string;\n form?: string;\n value?: string;\n uncheckedValue?: string;\n invalid?: boolean;\n ariaLabel?: string;\n ariaDescription?: string;\n}\n\nexport const EdxCheckbox = (props: IEdxCheckboxProps) => {\n const { emit, host } = useEdxHost();\n\n return (\n <Checkbox\n checked={props.checked ?? props.defaultChecked ?? false}\n indeterminate={props.indeterminate ?? false}\n disabled={props.disabled ?? false}\n readOnly={props.readonly ?? false}\n required={props.required ?? false}\n name={props.name}\n form={props.form}\n value={props.value}\n uncheckedValue={props.uncheckedValue}\n aria-invalid={props.invalid || undefined}\n aria-label={props.ariaLabel}\n aria-description={props.ariaDescription}\n onCheckedChange={(next) => {\n const checked = next === true;\n host.removeAttribute('default-checked');\n host.removeAttribute('indeterminate');\n if (checked) {\n host.setAttribute('checked', 'true');\n } else {\n host.removeAttribute('checked');\n }\n emit('edx-change', { checked, indeterminate: false });\n }}\n />\n );\n};\n\nexport const registerEdxCheckbox = (ctx: IRegisterContext): void => {\n defineElement<IEdxCheckboxProps>('edx-checkbox', EdxCheckbox, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'inline-flex',\n delegateClick: true,\n formAssociated: true,\n formValue: (props) => {\n const checked = props.checked ?? props.defaultChecked ?? false;\n return checked ? (props.value ?? 'on') : (props.uncheckedValue ?? null);\n },\n observedAttributes: [\n 'checked',\n 'default-checked',\n 'indeterminate',\n 'disabled',\n 'readonly',\n 'required',\n 'name',\n 'form',\n 'value',\n 'unchecked-value',\n 'invalid',\n 'aria-label',\n 'aria-description',\n ],\n transformProps: (raw) => ({\n checked: raw.checked == null ? undefined : coerceBool(raw.checked),\n defaultChecked: raw['default-checked'] == null ? undefined : coerceBool(raw['default-checked']),\n indeterminate: coerceBool(raw.indeterminate),\n disabled: coerceBool(raw.disabled),\n readonly: coerceBool(raw.readonly),\n required: coerceBool(raw.required),\n name: raw.name ?? undefined,\n form: raw.form ?? undefined,\n value: raw.value ?? undefined,\n uncheckedValue: raw['unchecked-value'] ?? undefined,\n invalid: coerceBool(raw.invalid),\n ariaLabel: raw['aria-label'] ?? undefined,\n ariaDescription: raw['aria-description'] ?? undefined,\n }),\n // Expose `.checked` as a real JS property so Angular CVA and other hosts\n // ng-model bridges can read and write the boolean value directly without\n // going through setAttribute (which only accepts strings).\n domProperties: {\n checked: booleanDomProperty('checked', 'default-checked'),\n indeterminate: booleanDomProperty('indeterminate'),\n },\n });\n};\n","import { defineElement, useEdxHost, usePortalContainer } from '@edyn/dom';\nimport { Combobox, ComboboxContent, ComboboxInput, ComboboxItem } from '@edyn/ui/components/ui/combobox';\nimport type { IRegisterContext } from './registry';\nimport { booleanDomProperty, coerceBool, coerceJson } from './registry';\n\ninterface IComboboxOption {\n value: string;\n label: string;\n}\n\nexport interface IEdxComboboxProps {\n options?: IComboboxOption[];\n value?: string | null;\n inputValue?: string;\n placeholder?: string;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n name?: string;\n form?: string;\n open?: boolean;\n defaultOpen?: boolean;\n modal?: boolean;\n openOnInputClick?: boolean;\n autoHighlight?: boolean;\n highlightItemOnHover?: boolean;\n ariaLabel?: string;\n ariaDescription?: string;\n invalid?: boolean;\n}\n\nexport const EdxCombobox = (props: IEdxComboboxProps) => {\n const { emit, host } = useEdxHost();\n const portalContainer = usePortalContainer();\n const options = props.options ?? [];\n // Items are the option OBJECTS: Base UI filters on itemToStringLabel and\n // ComboboxEmpty derives emptiness from `items` (without it the empty state\n // renders permanently). The element's public value stays the option string.\n const selected = options.find((opt) => opt.value === props.value) ?? null;\n\n return (\n <Combobox\n items={options}\n itemToStringLabel={(item: IComboboxOption) => item.label}\n value={selected}\n inputValue={props.inputValue ?? ''}\n disabled={props.disabled ?? false}\n readOnly={props.readonly ?? false}\n required={props.required ?? false}\n name={props.name}\n form={props.form}\n open={props.open ?? props.defaultOpen ?? false}\n modal={props.modal}\n openOnInputClick={props.openOnInputClick ?? true}\n autoHighlight={props.autoHighlight}\n highlightItemOnHover={props.highlightItemOnHover ?? true}\n onOpenChange={(open) => {\n host.removeAttribute('default-open');\n if (open) {\n host.setAttribute('open', 'true');\n } else {\n host.removeAttribute('open');\n }\n emit('edx-open-change', { open });\n }}\n onInputValueChange={(inputValue) => {\n host.setAttribute('input-value', inputValue);\n emit('edx-input-change', { value: inputValue });\n }}\n onValueChange={(next) => {\n const val = next === null ? null : (next as IComboboxOption).value;\n if (val != null) {\n host.setAttribute('value', val);\n } else {\n host.removeAttribute('value');\n }\n emit('edx-change', { value: val });\n }}\n >\n <ComboboxInput\n placeholder={props.placeholder}\n aria-label={props.ariaLabel}\n aria-description={props.ariaDescription}\n aria-invalid={props.invalid || undefined}\n />\n <ComboboxContent portalContainer={portalContainer ?? undefined}>\n {(item: IComboboxOption) => (\n <ComboboxItem key={item.value} value={item}>\n {item.label}\n </ComboboxItem>\n )}\n </ComboboxContent>\n </Combobox>\n );\n};\n\nexport const registerEdxCombobox = (ctx: IRegisterContext): void => {\n defineElement<IEdxComboboxProps>('edx-combobox', EdxCombobox, {\n mode: ctx.mode,\n styles: ctx.styles,\n // The input is w-full, so the host must be block-level to fill its container\n // (matching the React Combobox). inline-flex shrank it to content in the demos.\n display: 'block',\n delegateClick: true,\n formAssociated: true,\n formValue: (props) => props.value ?? '',\n observedAttributes: [\n 'options',\n 'value',\n 'input-value',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'required',\n 'name',\n 'form',\n 'open',\n 'default-open',\n 'modal',\n 'open-on-input-click',\n 'auto-highlight',\n 'highlight-item-on-hover',\n 'aria-label',\n 'aria-description',\n 'invalid',\n ],\n transformProps: (raw) => ({\n options: coerceJson<IComboboxOption[]>(raw.options),\n value: raw.value ?? null,\n inputValue: raw['input-value'] ?? undefined,\n placeholder: raw.placeholder ?? undefined,\n disabled: coerceBool(raw.disabled),\n readonly: coerceBool(raw.readonly),\n required: coerceBool(raw.required),\n name: raw.name ?? undefined,\n form: raw.form ?? undefined,\n open: raw.open == null ? undefined : coerceBool(raw.open),\n defaultOpen: raw['default-open'] == null ? undefined : coerceBool(raw['default-open']),\n modal: raw.modal == null ? undefined : coerceBool(raw.modal),\n openOnInputClick: raw['open-on-input-click'] == null ? undefined : coerceBool(raw['open-on-input-click']),\n autoHighlight: raw['auto-highlight'] == null ? undefined : coerceBool(raw['auto-highlight']),\n highlightItemOnHover: raw['highlight-item-on-hover'] == null ? undefined : coerceBool(raw['highlight-item-on-hover']),\n ariaLabel: raw['aria-label'] ?? undefined,\n ariaDescription: raw['aria-description'] ?? undefined,\n invalid: coerceBool(raw.invalid),\n }),\n domProperties: {\n value: {\n get: (host) => host.getAttribute('value') ?? '',\n set: (host, value) => {\n host.setAttribute('value', String(value ?? ''));\n },\n },\n inputValue: {\n get: (host) => host.getAttribute('input-value') ?? '',\n set: (host, value) => host.setAttribute('input-value', String(value ?? '')),\n },\n open: booleanDomProperty('open', 'default-open'),\n },\n });\n};\n","import { defineElement, Slot, useEdxHost, useEmit } from '@edyn/dom';\nimport {\n AspectRatio,\n Attachment,\n AttachmentContent,\n AttachmentDescription,\n AttachmentMedia,\n AttachmentTitle,\n Bubble,\n BubbleContent,\n Empty,\n EmptyDescription,\n EmptyHeader,\n EmptyMedia,\n EmptyTitle,\n Item,\n ItemContent,\n ItemDescription,\n ItemMedia,\n ItemTitle,\n Kbd,\n Marker,\n MarkerContent,\n Message,\n MessageContent,\n MessageFooter,\n MessageHeader,\n NativeSelect,\n NativeSelectOption,\n Spinner,\n} from '@edyn/ui';\nimport { IconFile, IconInbox } from '@tabler/icons-react';\nimport type { ChangeEvent, ComponentProps } from 'react';\nimport type { IRegisterContext } from './registry';\nimport { coerceBool, coerceJson, coerceNumber } from './registry';\n\ntype TAttachmentState = 'idle' | 'uploading' | 'processing' | 'error' | 'done';\ntype TAttachmentSize = 'default' | 'sm' | 'xs';\ntype TOrientation = 'horizontal' | 'vertical';\ntype TBubbleVariant = 'default' | 'secondary' | 'muted' | 'tinted' | 'outline' | 'ghost' | 'destructive';\ntype TAlign = 'start' | 'end';\ntype TItemVariant = 'default' | 'outline' | 'muted';\ntype TItemSize = 'default' | 'sm' | 'xs';\ntype TMarkerVariant = 'default' | 'separator' | 'border';\n\ninterface IAspectRatioProps {\n ratio?: number;\n}\n\nconst EdxAspectRatio = ({ ratio = 16 / 9 }: IAspectRatioProps) => {\n return (\n <AspectRatio ratio={ratio} className=\"w-full overflow-hidden rounded-lg bg-muted\">\n <div className=\"flex size-full items-center justify-center text-sm text-foreground/70\">\n <Slot />\n </div>\n </AspectRatio>\n );\n};\n\ninterface IAttachmentProps {\n title?: string;\n description?: string;\n state?: TAttachmentState;\n size?: TAttachmentSize;\n orientation?: TOrientation;\n}\n\nconst EdxAttachment = ({\n title = 'report.pdf',\n description = '2.4 MB',\n state = 'done',\n size = 'default',\n orientation = 'horizontal',\n}: IAttachmentProps) => {\n return (\n <Attachment state={state} size={size} orientation={orientation}>\n <AttachmentMedia>{state === 'uploading' || state === 'processing' ? <Spinner /> : <IconFile />}</AttachmentMedia>\n <AttachmentContent>\n <AttachmentTitle>{title}</AttachmentTitle>\n <AttachmentDescription>{description}</AttachmentDescription>\n </AttachmentContent>\n <Slot />\n </Attachment>\n );\n};\n\ninterface IBubbleProps {\n variant?: TBubbleVariant;\n align?: TAlign;\n content?: string;\n}\n\nconst EdxBubble = ({ variant = 'default', align = 'start', content }: IBubbleProps) => {\n return (\n <Bubble variant={variant} align={align}>\n <BubbleContent>{content ?? <Slot />}</BubbleContent>\n </Bubble>\n );\n};\n\ninterface IEmptyProps {\n title?: string;\n description?: string;\n}\n\nconst EdxEmpty = ({ title = 'Nothing here yet', description = 'Content will appear here when it is available.' }: IEmptyProps) => {\n return (\n <Empty>\n <EmptyHeader>\n <EmptyMedia variant=\"icon\">\n <IconInbox />\n </EmptyMedia>\n <EmptyTitle>{title}</EmptyTitle>\n <EmptyDescription>{description}</EmptyDescription>\n </EmptyHeader>\n <Slot />\n </Empty>\n );\n};\n\ninterface IItemProps {\n title?: string;\n description?: string;\n variant?: TItemVariant;\n size?: TItemSize;\n}\n\nconst EdxItem = ({\n title = 'Account settings',\n description = 'Manage your profile and preferences.',\n variant = 'outline',\n size = 'default',\n}: IItemProps) => {\n return (\n <Item variant={variant} size={size}>\n <ItemMedia variant=\"icon\">\n <IconFile />\n </ItemMedia>\n <ItemContent>\n <ItemTitle>{title}</ItemTitle>\n <ItemDescription>{description}</ItemDescription>\n </ItemContent>\n <Slot />\n </Item>\n );\n};\n\ninterface IKbdProps {\n text?: string;\n}\n\nconst EdxKbd = ({ text }: IKbdProps) => {\n return <Kbd>{text ?? <Slot />}</Kbd>;\n};\n\ninterface IMarkerProps {\n variant?: TMarkerVariant;\n text?: string;\n}\n\nconst EdxMarker = ({ variant = 'default', text }: IMarkerProps) => {\n return (\n <Marker variant={variant}>\n <MarkerContent>{text ?? <Slot />}</MarkerContent>\n </Marker>\n );\n};\n\ninterface IMessageProps {\n author?: string;\n timestamp?: string;\n align?: TAlign;\n variant?: TBubbleVariant;\n}\n\nconst EdxMessage = ({ author = 'Support', timestamp = 'Now', align = 'start', variant = 'muted' }: IMessageProps) => {\n return (\n <Message align={align}>\n <MessageContent>\n <MessageHeader>{author}</MessageHeader>\n <Bubble variant={variant} align={align}>\n <BubbleContent>\n <Slot />\n </BubbleContent>\n </Bubble>\n <MessageFooter>{timestamp}</MessageFooter>\n </MessageContent>\n </Message>\n );\n};\n\ninterface INativeSelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\ninterface INativeSelectProps {\n options?: INativeSelectOption[];\n value?: string;\n defaultValue?: string;\n size?: 'sm' | 'default';\n disabled?: boolean;\n name?: string;\n form?: string;\n required?: boolean;\n autoComplete?: string;\n ariaLabel?: string;\n ariaDescription?: string;\n invalid?: boolean;\n}\n\nconst EdxNativeSelect = ({\n options = [],\n value,\n defaultValue,\n size = 'default',\n disabled = false,\n name,\n form,\n required,\n autoComplete,\n ariaLabel = 'Select an option',\n ariaDescription,\n invalid,\n}: INativeSelectProps) => {\n const emit = useEmit();\n const { host } = useEdxHost();\n const handleChange = (event: ChangeEvent<HTMLSelectElement>): void => {\n const nextValue = event.target.value;\n // Keep the custom element's public value property/attribute in sync with\n // the native control, matching the other form wrappers and Angular CVA.\n host.removeAttribute('default-value');\n host.setAttribute('value', nextValue);\n emit('edx-change', { value: nextValue });\n emit('edx-input', { value: nextValue });\n };\n\n return (\n <NativeSelect\n value={value ?? defaultValue}\n size={size}\n disabled={disabled}\n name={name}\n form={form}\n required={required}\n autoComplete={autoComplete}\n aria-label={ariaLabel}\n aria-description={ariaDescription}\n aria-invalid={invalid || undefined}\n onChange={handleChange}\n >\n {options.map((option) => (\n <NativeSelectOption key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </NativeSelectOption>\n ))}\n </NativeSelect>\n );\n};\n\ninterface ISpinnerProps {\n size?: ComponentProps<typeof Spinner>['size'];\n label?: string;\n}\n\nconst EdxSpinner = ({ size = 'default', label = 'Loading' }: ISpinnerProps) => <Spinner size={size} aria-label={label} />;\n\nexport const registerEdxContentComponents = (ctx: IRegisterContext): void => {\n defineElement<IAspectRatioProps>('edx-aspect-ratio', EdxAspectRatio, {\n mode: 'shadow',\n styles: ctx.styles,\n observedAttributes: ['ratio'],\n transformProps: (raw) => ({ ratio: coerceNumber(raw.ratio) }),\n });\n defineElement<IAttachmentProps>('edx-attachment', EdxAttachment, {\n mode: 'shadow',\n styles: ctx.styles,\n display: 'inline-flex',\n observedAttributes: ['title', 'description', 'state', 'size', 'orientation'],\n transformProps: (raw) => ({\n title: raw.title ?? undefined,\n description: raw.description ?? undefined,\n state: (raw.state ?? undefined) as TAttachmentState,\n size: (raw.size ?? undefined) as TAttachmentSize,\n orientation: (raw.orientation ?? undefined) as TOrientation,\n }),\n });\n defineElement<IBubbleProps>('edx-bubble', EdxBubble, {\n mode: ctx.mode,\n styles: ctx.styles,\n // Bubble itself is the flex item (`align=\"end\"` uses align-self). Keeping\n // the custom-element host layout-transparent preserves the same parent\n // flex relationship as the React component.\n display: 'contents',\n observedAttributes: ['variant', 'align', 'content'],\n transformProps: (raw) => ({\n variant: (raw.variant ?? undefined) as TBubbleVariant,\n align: (raw.align ?? undefined) as TAlign,\n content: raw.content ?? undefined,\n }),\n });\n defineElement<IEmptyProps>('edx-empty', EdxEmpty, {\n mode: 'shadow',\n styles: ctx.styles,\n observedAttributes: ['title', 'description'],\n transformProps: (raw) => ({ title: raw.title ?? undefined, description: raw.description ?? undefined }),\n });\n defineElement<IItemProps>('edx-item', EdxItem, {\n mode: 'shadow',\n styles: ctx.styles,\n observedAttributes: ['title', 'description', 'variant', 'size'],\n transformProps: (raw) => ({\n title: raw.title ?? undefined,\n description: raw.description ?? undefined,\n variant: (raw.variant ?? undefined) as TItemVariant,\n size: (raw.size ?? undefined) as TItemSize,\n }),\n });\n defineElement<IKbdProps>('edx-kbd', EdxKbd, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'inline-flex',\n observedAttributes: ['text'],\n transformProps: (raw) => ({ text: raw.text ?? undefined }),\n });\n defineElement<IMarkerProps>('edx-marker', EdxMarker, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'flex',\n observedAttributes: ['variant', 'text'],\n transformProps: (raw) => ({ variant: (raw.variant ?? undefined) as TMarkerVariant, text: raw.text ?? undefined }),\n });\n defineElement<IMessageProps>('edx-message', EdxMessage, {\n mode: 'shadow',\n styles: ctx.styles,\n observedAttributes: ['author', 'timestamp', 'align', 'variant'],\n transformProps: (raw) => ({\n author: raw.author ?? undefined,\n timestamp: raw.timestamp ?? undefined,\n align: (raw.align ?? undefined) as TAlign,\n variant: (raw.variant ?? undefined) as TBubbleVariant,\n }),\n });\n defineElement<INativeSelectProps>('edx-native-select', EdxNativeSelect, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'inline-flex',\n observedAttributes: [\n 'options',\n 'value',\n 'default-value',\n 'size',\n 'disabled',\n 'name',\n 'form',\n 'required',\n 'autocomplete',\n 'aria-label',\n 'aria-description',\n 'invalid',\n ],\n formAssociated: true,\n formValue: (props) => props.value ?? props.defaultValue ?? '',\n delegateClick: true,\n transformProps: (raw) => ({\n options: coerceJson<INativeSelectOption[]>(raw.options),\n value: raw.value ?? undefined,\n defaultValue: raw['default-value'] ?? undefined,\n size: (raw.size ?? undefined) as 'sm' | 'default',\n disabled: coerceBool(raw.disabled),\n name: raw.name ?? undefined,\n form: raw.form ?? undefined,\n required: coerceBool(raw.required),\n autoComplete: raw.autocomplete ?? undefined,\n ariaLabel: raw['aria-label'] ?? undefined,\n ariaDescription: raw['aria-description'] ?? undefined,\n invalid: coerceBool(raw.invalid),\n }),\n domProperties: {\n value: {\n get: (host) => host.getAttribute('value') ?? host.getAttribute('default-value') ?? '',\n set: (host, value) => host.setAttribute('value', String(value ?? '')),\n },\n },\n });\n defineElement<ISpinnerProps>('edx-spinner', EdxSpinner, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'inline-flex',\n observedAttributes: ['size', 'label'],\n transformProps: (raw) => ({\n size: (raw.size as ISpinnerProps['size']) ?? undefined,\n label: raw.label ?? undefined,\n }),\n });\n};\n","import { Slot, useEdxHost } from '@edyn/dom';\nimport { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '@edyn/ui';\n\nimport type { IRegisterContext } from './registry';\nimport { booleanDomProperty, coerceBool, reflectBool, registerOverlayElement } from './registry';\n\nexport interface IEdxDialogProps {\n triggerLabel?: string;\n heading?: string;\n description?: string;\n open?: boolean;\n defaultOpen?: boolean;\n modal?: boolean;\n disablePointerDismissal?: boolean;\n}\n\n/**\n * Overlay/portal proof, and the template every class-4 overlay copies. Overlays\n * are pinned to **light mode**: Base UI's DialogContent/Portal always lands in\n * document.body and does not forward a portal `container`, so under shadow mode\n * the portaled content escapes the shadow root, loses the adopted stylesheet, and\n * renders unstyled with no error. Pinning `mode: 'light'` (not `ctx.mode`) makes\n * that footgun impossible to inherit by mistake. See docs/delivery-classes.md.\n */\nexport const EdxDialog = (props: IEdxDialogProps) => {\n const { emit, host } = useEdxHost();\n\n return (\n <Dialog\n open={props.open ?? props.defaultOpen ?? false}\n modal={props.modal ?? true}\n disablePointerDismissal={props.disablePointerDismissal}\n onOpenChange={(open) => {\n host.removeAttribute('default-open');\n reflectBool(host, 'open', open);\n emit('edx-change', { open });\n }}\n >\n <DialogTrigger render={<Button variant=\"outline\" />}>{props.triggerLabel ?? 'Open'}</DialogTrigger>\n <DialogContent>\n {(props.heading || props.description) && (\n <DialogHeader>\n {props.heading && <DialogTitle>{props.heading}</DialogTitle>}\n {props.description && <DialogDescription>{props.description}</DialogDescription>}\n </DialogHeader>\n )}\n <Slot />\n <DialogFooter showCloseButton />\n </DialogContent>\n </Dialog>\n );\n};\n\nexport const registerEdxDialog = (ctx: IRegisterContext): void => {\n // registerOverlayElement pins mode:'light' for every overlay (the portal needs\n // document.body and can't reach a shadow root); see registry.ts.\n registerOverlayElement<IEdxDialogProps>('edx-dialog', EdxDialog, ctx, {\n display: 'inline-flex',\n observedAttributes: ['trigger-label', 'heading', 'description', 'open', 'default-open', 'modal', 'disable-pointer-dismissal'],\n transformProps: (raw) => ({\n triggerLabel: raw['trigger-label'] ?? undefined,\n heading: raw.heading ?? undefined,\n description: raw.description ?? undefined,\n open: raw.open == null ? undefined : coerceBool(raw.open),\n defaultOpen: raw['default-open'] == null ? undefined : coerceBool(raw['default-open']),\n modal: raw.modal == null ? undefined : coerceBool(raw.modal),\n disablePointerDismissal: raw['disable-pointer-dismissal'] == null ? undefined : coerceBool(raw['disable-pointer-dismissal']),\n }),\n domProperties: { open: booleanDomProperty('open', 'default-open') },\n });\n};\n","import { Slot, useEdxHost } from '@edyn/dom';\nimport { Button, Drawer, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle, DrawerTrigger } from '@edyn/ui';\n\nimport type { IRegisterContext } from './registry';\nimport { booleanDomProperty, coerceBool, reflectBool, registerOverlayElement } from './registry';\n\ntype TDrawerSide = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface IEdxDrawerProps {\n triggerLabel?: string;\n heading?: string;\n description?: string;\n side?: TDrawerSide;\n open?: boolean;\n defaultOpen?: boolean;\n modal?: boolean;\n disablePointerDismissal?: boolean;\n}\n\n/**\n * Side-anchored overlay, the same light-mode pattern as edx-dialog (registered via\n * registerOverlayElement, which pins mode:'light' so the Base UI portal can land\n * in document.body). Content is attribute-driven (trigger-label/heading/description\n * + an optional static slot); `side` chooses the edge.\n */\nexport const EdxDrawer = (props: IEdxDrawerProps) => {\n const { emit, host } = useEdxHost();\n\n return (\n <Drawer\n open={props.open ?? props.defaultOpen ?? false}\n modal={props.modal ?? true}\n disablePointerDismissal={props.disablePointerDismissal}\n onOpenChange={(open) => {\n host.removeAttribute('default-open');\n reflectBool(host, 'open', open);\n emit('edx-change', { open });\n }}\n >\n <DrawerTrigger render={<Button variant=\"outline\" />}>{props.triggerLabel ?? 'Open'}</DrawerTrigger>\n <DrawerContent side={props.side ?? 'right'}>\n {(props.heading || props.description) && (\n <DrawerHeader>\n {props.heading && <DrawerTitle>{props.heading}</DrawerTitle>}\n {props.description && <DrawerDescription>{props.description}</DrawerDescription>}\n </DrawerHeader>\n )}\n <Slot />\n </DrawerContent>\n </Drawer>\n );\n};\n\nexport const registerEdxDrawer = (ctx: IRegisterContext): void => {\n registerOverlayElement<IEdxDrawerProps>('edx-drawer', EdxDrawer, ctx, {\n display: 'inline-flex',\n observedAttributes: ['trigger-label', 'heading', 'description', 'side', 'open', 'default-open', 'modal', 'disable-pointer-dismissal'],\n transformProps: (raw) => ({\n triggerLabel: raw['trigger-label'] ?? undefined,\n heading: raw.heading ?? undefined,\n description: raw.description ?? undefined,\n side: (raw.side as TDrawerSide | null) ?? undefined,\n open: raw.open == null ? undefined : coerceBool(raw.open),\n defaultOpen: raw['default-open'] == null ? undefined : coerceBool(raw['default-open']),\n modal: raw.modal == null ? undefined : coerceBool(raw.modal),\n disablePointerDismissal: raw['disable-pointer-dismissal'] == null ? undefined : coerceBool(raw['disable-pointer-dismissal']),\n }),\n domProperties: { open: booleanDomProperty('open', 'default-open') },\n });\n};\n","import { useEdxHost } from '@edyn/dom';\nimport { Button, DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger } from '@edyn/ui';\n\nimport type { IRegisterContext } from './registry';\nimport { booleanDomProperty, coerceBool, coerceJson, coerceNumber, reflectBool, registerOverlayElement } from './registry';\n\nexport interface IEdxDropdownMenuItem {\n label: string;\n value?: string;\n disabled?: boolean;\n}\n\nexport interface IEdxDropdownMenuProps {\n triggerLabel?: string;\n label?: string;\n items?: IEdxDropdownMenuItem[];\n open?: boolean;\n defaultOpen?: boolean;\n modal?: boolean;\n disabled?: boolean;\n loopFocus?: boolean;\n highlightItemOnHover?: boolean;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n alignOffset?: number;\n}\n\n/**\n * Action-menu overlay, the same light-mode pattern as edx-dialog (registered via\n * registerOverlayElement, which pins mode:'light' so the Base UI portal can land\n * in document.body). Content is attribute-driven (no `<Slot />`): the menu items\n * come in as a JSON `items` attribute, the same JSON-attribute shape as edx-table.\n */\nexport const EdxDropdownMenu = (props: IEdxDropdownMenuProps) => {\n const { emit, host } = useEdxHost();\n const items = props.items ?? [];\n\n return (\n <DropdownMenu\n open={props.open ?? props.defaultOpen ?? false}\n modal={props.modal ?? true}\n disabled={props.disabled}\n loopFocus={props.loopFocus ?? true}\n highlightItemOnHover={props.highlightItemOnHover ?? true}\n onOpenChange={(open) => {\n host.removeAttribute('default-open');\n reflectBool(host, 'open', open);\n emit('edx-change', { open });\n }}\n >\n <DropdownMenuTrigger render={<Button variant=\"outline\" />} disabled={props.disabled}>\n {props.triggerLabel ?? 'Open'}\n </DropdownMenuTrigger>\n <DropdownMenuContent side={props.side} align={props.align} sideOffset={props.sideOffset} alignOffset={props.alignOffset}>\n <DropdownMenuGroup>\n {props.label && <DropdownMenuLabel>{props.label}</DropdownMenuLabel>}\n {items.map((item) => (\n <DropdownMenuItem\n key={`${item.value ?? item.label}-${item.label}`}\n disabled={item.disabled}\n onClick={() => emit('edx-select', { value: item.value ?? item.label })}\n >\n {item.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nexport const registerEdxDropdownMenu = (ctx: IRegisterContext): void => {\n registerOverlayElement<IEdxDropdownMenuProps>('edx-dropdown-menu', EdxDropdownMenu, ctx, {\n display: 'inline-flex',\n observedAttributes: [\n 'trigger-label',\n 'label',\n 'items',\n 'open',\n 'default-open',\n 'modal',\n 'disabled',\n 'loop-focus',\n 'highlight-item-on-hover',\n 'side',\n 'align',\n 'side-offset',\n 'align-offset',\n ],\n transformProps: (raw) => ({\n triggerLabel: raw['trigger-label'] ?? undefined,\n label: raw.label ?? undefined,\n items: coerceJson<IEdxDropdownMenuItem[]>(raw.items) ?? [],\n open: raw.open == null ? undefined : coerceBool(raw.open),\n defaultOpen: raw['default-open'] == null ? undefined : coerceBool(raw['default-open']),\n modal: raw.modal == null ? undefined : coerceBool(raw.modal),\n disabled: raw.disabled == null ? undefined : coerceBool(raw.disabled),\n loopFocus: raw['loop-focus'] == null ? undefined : coerceBool(raw['loop-focus']),\n highlightItemOnHover: raw['highlight-item-on-hover'] == null ? undefined : coerceBool(raw['highlight-item-on-hover']),\n side: (raw.side as IEdxDropdownMenuProps['side']) ?? undefined,\n align: (raw.align as IEdxDropdownMenuProps['align']) ?? undefined,\n sideOffset: coerceNumber(raw['side-offset']),\n alignOffset: coerceNumber(raw['align-offset']),\n }),\n domProperties: { open: booleanDomProperty('open', 'default-open') },\n });\n};\n","import { EDX_FIELD_CONTROL_CONNECT_EVENT, type IEdxFieldControlRegistrationDetail } from '@edyn/dom';\nimport { useCallback, useEffect, useLayoutEffect, useRef } from 'react';\n\nconst FIELD_CONTROL_SELECTOR =\n 'edx-calendar, edx-checkbox, edx-combobox, edx-input, edx-input-group, edx-input-otp, edx-native-select, edx-radio-group, edx-select, edx-slider, edx-switch, edx-textarea, edx-toggle-group';\n\ntype TFieldControl = HTMLElement;\n\ninterface IFieldControlContext {\n label?: string;\n description?: string;\n invalid: boolean;\n}\n\ntype TOwnedAttribute = 'aria-label' | 'aria-description' | 'invalid';\ntype TOwnershipKey = 'edxFieldLabel' | 'edxFieldDescription' | 'edxFieldInvalid';\n\nconst OWNED_ATTRIBUTES: Array<[TOwnedAttribute, TOwnershipKey]> = [\n ['aria-label', 'edxFieldLabel'],\n ['aria-description', 'edxFieldDescription'],\n ['invalid', 'edxFieldInvalid'],\n];\n\nconst findControls = (root: ParentNode): TFieldControl[] => Array.from(root.querySelectorAll<TFieldControl>(FIELD_CONTROL_SELECTOR));\n\nconst releaseFieldAttributes = (control: TFieldControl): void => {\n for (const [attribute, ownershipKey] of OWNED_ATTRIBUTES) {\n if (control.dataset[ownershipKey] === 'true') {\n control.removeAttribute(attribute);\n delete control.dataset[ownershipKey];\n }\n }\n};\n\nconst setFieldAttribute = (control: TFieldControl, attribute: TOwnedAttribute, ownershipKey: TOwnershipKey, value: string | undefined): void => {\n const isFieldOwned = control.dataset[ownershipKey] === 'true';\n if (value !== undefined) {\n if (!control.hasAttribute(attribute) || isFieldOwned) {\n control.setAttribute(attribute, value);\n control.dataset[ownershipKey] = 'true';\n }\n return;\n }\n\n if (isFieldOwned) {\n control.removeAttribute(attribute);\n delete control.dataset[ownershipKey];\n }\n};\n\nconst syncFieldAttributes = (control: TFieldControl, context: IFieldControlContext): void => {\n setFieldAttribute(control, 'aria-label', 'edxFieldLabel', context.label);\n setFieldAttribute(control, 'aria-description', 'edxFieldDescription', context.description || undefined);\n setFieldAttribute(control, 'invalid', 'edxFieldInvalid', context.invalid ? 'true' : undefined);\n};\n\nexport const useFieldControlBridge = (host: HTMLElement, context: IFieldControlContext): (() => void) => {\n const { description, invalid, label } = context;\n const refContext = useRef(context);\n const refControls = useRef(new Set<TFieldControl>());\n refContext.current = { description, invalid, label };\n\n const registerControl = useCallback((control: TFieldControl): void => {\n refControls.current.add(control);\n syncFieldAttributes(control, refContext.current);\n }, []);\n\n const syncControls = useCallback((): void => {\n const controls = new Set(findControls(host));\n for (const control of refControls.current) {\n if (!controls.has(control)) {\n releaseFieldAttributes(control);\n }\n }\n for (const control of controls) {\n registerControl(control);\n }\n refControls.current = controls;\n }, [host, registerControl]);\n\n useEffect(() => {\n for (const control of refControls.current) {\n syncFieldAttributes(control, { description, invalid, label });\n }\n }, [description, invalid, label]);\n\n useLayoutEffect(() => {\n const handleControlConnect = (event: Event): void => {\n const registrationEvent = event as CustomEvent<IEdxFieldControlRegistrationDetail>;\n const { control, setCleanup } = registrationEvent.detail;\n if (!host.contains(control)) {\n return;\n }\n registrationEvent.stopPropagation();\n registerControl(control);\n setCleanup(() => {\n if (refControls.current.delete(control)) {\n releaseFieldAttributes(control);\n }\n });\n };\n\n host.addEventListener(EDX_FIELD_CONTROL_CONNECT_EVENT, handleControlConnect);\n const slot = host.shadowRoot?.querySelector('slot');\n slot?.addEventListener('slotchange', syncControls);\n syncControls();\n\n return () => {\n host.removeEventListener(EDX_FIELD_CONTROL_CONNECT_EVENT, handleControlConnect);\n slot?.removeEventListener('slotchange', syncControls);\n for (const control of refControls.current) {\n releaseFieldAttributes(control);\n }\n refControls.current.clear();\n };\n }, [host, registerControl, syncControls]);\n\n return useCallback((): void => {\n const control = host.querySelector<HTMLElement>(FIELD_CONTROL_SELECTOR);\n control?.focus();\n if (control?.matches('edx-checkbox, edx-switch')) {\n control.click();\n }\n }, [host]);\n};\n","import { defineElement, Slot, useEdxHost } from '@edyn/dom';\nimport { Field, FieldDescription, FieldError, FieldLabel } from '@edyn/ui';\nimport { useFieldControlBridge } from './field-control-bridge';\nimport type { IRegisterContext } from './registry';\nimport { coerceBool } from './registry';\n\nexport interface IEdxFieldProps {\n label?: string;\n description?: string;\n error?: string;\n invalid?: boolean;\n}\n\nexport const EdxField = (props: IEdxFieldProps) => {\n const { host } = useEdxHost();\n const accessibleDescription = [props.description, props.invalid ? props.error : undefined].filter(Boolean).join(' ');\n const focusControl = useFieldControlBridge(host, {\n label: props.label,\n description: accessibleDescription,\n invalid: props.invalid ?? false,\n });\n\n return (\n <Field invalid={props.invalid ?? false}>\n {props.label && <FieldLabel onClick={focusControl}>{props.label}</FieldLabel>}\n <Slot />\n {props.description && <FieldDescription>{props.description}</FieldDescription>}\n {props.invalid && props.error && <FieldError>{props.error}</FieldError>}\n </Field>\n );\n};\n\nexport const registerEdxField = (ctx: IRegisterContext): void => {\n defineElement<IEdxFieldProps>('edx-field', EdxField, {\n mode: 'shadow',\n styles: ctx.styles,\n observedAttributes: ['label', 'description', 'error', 'invalid'],\n transformProps: (raw) => ({\n label: raw.label ?? undefined,\n description: raw.description ?? undefined,\n error: raw.error ?? undefined,\n invalid: coerceBool(raw.invalid),\n }),\n });\n};\n","import { defineElement, Slot } from '@edyn/dom';\nimport { Indicator } from '@edyn/ui/components/ui/indicator';\n\nimport type { ComponentProps } from 'react';\nimport type { IRegisterContext } from './registry';\n\ntype TIndicatorVariant = ComponentProps<typeof Indicator>['variant'];\ntype TIndicatorSide = ComponentProps<typeof Indicator>['side'];\ntype TIndicatorAlign = ComponentProps<typeof Indicator>['align'];\n\nexport interface IEdxIndicatorProps {\n variant?: TIndicatorVariant;\n side?: TIndicatorSide;\n align?: TIndicatorAlign;\n}\n\nexport const EdxIndicator = (props: IEdxIndicatorProps) => {\n return (\n <Indicator variant={props.variant ?? 'default'} side={props.side ?? 'top'} align={props.align ?? 'end'}>\n <Slot />\n </Indicator>\n );\n};\n\nexport const registerEdxIndicator = (ctx: IRegisterContext): void => {\n defineElement<IEdxIndicatorProps>('edx-indicator', EdxIndicator, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'inline-flex',\n observedAttributes: ['variant', 'side', 'align'],\n transformProps: (raw) => ({\n variant: (raw.variant ?? undefined) as TIndicatorVariant,\n side: (raw.side ?? undefined) as TIndicatorSide,\n align: (raw.align ?? undefined) as TIndicatorAlign,\n }),\n });\n};\n","import { defineElement, useEdxHost } from '@edyn/dom';\nimport { Input } from '@edyn/ui';\nimport type { ComponentProps } from 'react';\nimport type { IRegisterContext } from './registry';\nimport { coerceBool, coerceNumber, multipleFormValue } from './registry';\n\ntype TNativeInputProps = ComponentProps<'input'>;\n\nexport interface IEdxInputProps {\n value?: string;\n placeholder?: string;\n type?: string;\n disabled?: boolean;\n readonly?: boolean;\n invalid?: boolean;\n name?: string;\n form?: string;\n required?: boolean;\n autoComplete?: string;\n inputMode?: TNativeInputProps['inputMode'];\n min?: TNativeInputProps['min'];\n max?: TNativeInputProps['max'];\n step?: TNativeInputProps['step'];\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n accept?: string;\n multiple?: boolean;\n spellCheck?: boolean;\n autoFocus?: boolean;\n ariaLabel?: string;\n ariaDescription?: string;\n}\n\nexport const EdxInput = (props: IEdxInputProps) => {\n const { emit, host, setFormValue } = useEdxHost();\n const isFileInput = props.type === 'file';\n\n return (\n <Input\n type={props.type ?? 'text'}\n value={isFileInput ? undefined : (props.value ?? '')}\n placeholder={props.placeholder}\n disabled={props.disabled ?? false}\n readOnly={props.readonly ?? false}\n aria-invalid={props.invalid || undefined}\n name={props.name}\n form={props.form}\n required={props.required ?? false}\n autoComplete={props.autoComplete}\n inputMode={props.inputMode}\n min={props.min}\n max={props.max}\n step={props.step}\n minLength={props.minLength}\n maxLength={props.maxLength}\n pattern={props.pattern}\n accept={props.accept}\n multiple={props.multiple ?? false}\n spellCheck={props.spellCheck}\n autoFocus={props.autoFocus}\n aria-label={props.ariaLabel}\n aria-description={props.ariaDescription}\n onChange={(event) => {\n const { value } = event.target;\n host.setAttribute('value', value);\n if (isFileInput) {\n const files = Array.from(event.target.files ?? []);\n setFormValue(props.multiple ? multipleFormValue(host, files) : (files[0] ?? null));\n }\n emit('edx-change', { value, files: event.target.files ? Array.from(event.target.files) : undefined });\n }}\n />\n );\n};\n\nexport const registerEdxInput = (ctx: IRegisterContext): void => {\n defineElement<IEdxInputProps>('edx-input', EdxInput, {\n mode: ctx.mode,\n styles: ctx.styles,\n // Input is w-full, so the host must be block-level to fill its container (the\n // defineElement default, made explicit to match the other form controls).\n display: 'block',\n delegateClick: true,\n formAssociated: true,\n formValue: (props) => (props.type === 'file' ? null : (props.value ?? '')),\n observedAttributes: [\n 'value',\n 'placeholder',\n 'type',\n 'disabled',\n 'readonly',\n 'invalid',\n 'name',\n 'form',\n 'required',\n 'autocomplete',\n 'inputmode',\n 'min',\n 'max',\n 'step',\n 'minlength',\n 'maxlength',\n 'pattern',\n 'accept',\n 'multiple',\n 'spellcheck',\n 'autofocus',\n 'aria-label',\n 'aria-description',\n ],\n transformProps: (raw) => ({\n value: raw.value ?? undefined,\n placeholder: raw.placeholder ?? undefined,\n type: raw.type ?? undefined,\n disabled: coerceBool(raw.disabled),\n readonly: coerceBool(raw.readonly),\n invalid: coerceBool(raw.invalid),\n name: raw.name ?? undefined,\n form: raw.form ?? undefined,\n required: coerceBool(raw.required),\n autoComplete: raw.autocomplete ?? undefined,\n inputMode: (raw.inputmode as TNativeInputProps['inputMode']) ?? undefined,\n min: raw.min ?? undefined,\n max: raw.max ?? undefined,\n step: raw.step ?? undefined,\n minLength: coerceNumber(raw.minlength),\n maxLength: coerceNumber(raw.maxlength),\n pattern: raw.pattern ?? undefined,\n accept: raw.accept ?? undefined,\n multiple: coerceBool(raw.multiple),\n spellCheck: raw.spellcheck == null ? undefined : coerceBool(raw.spellcheck),\n autoFocus: coerceBool(raw.autofocus),\n ariaLabel: raw['aria-label'] ?? undefined,\n ariaDescription: raw['aria-description'] ?? undefined,\n }),\n // Expose `.value` as a real JS property so Angular CVA and other hosts\n // ng-model bridges can write the string value directly and trigger a\n // re-render via attributeChangedCallback.\n domProperties: {\n value: {\n get: (host) => host.getAttribute('value') ?? '',\n set: (host, value) => {\n host.setAttribute('value', String(value ?? ''));\n },\n },\n },\n });\n};\n","import { defineElement, useEdxHost } from '@edyn/dom';\nimport { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@edyn/ui';\nimport type { IRegisterContext } from './registry';\nimport { coerceBool, multipleFormValue } from './registry';\n\nexport interface IEdxInputGroupProps {\n addon?: string;\n prefix?: string;\n suffix?: string;\n actionLabel?: string;\n placeholder?: string;\n value?: string;\n disabled?: boolean;\n readonly?: boolean;\n invalid?: boolean;\n type?: string;\n name?: string;\n form?: string;\n required?: boolean;\n autoComplete?: string;\n inputMode?: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';\n min?: string;\n max?: string;\n step?: string;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n accept?: string;\n multiple?: boolean;\n spellCheck?: boolean;\n autofocus?: boolean;\n ariaLabel?: string;\n ariaDescription?: string;\n}\n\nexport const EdxInputGroup = (props: IEdxInputGroupProps) => {\n const { emit, host, setFormValue } = useEdxHost();\n\n return (\n <InputGroup data-disabled={props.disabled || undefined} aria-disabled={props.disabled || undefined}>\n {(props.prefix ?? props.addon) && <InputGroupAddon>{props.prefix ?? props.addon}</InputGroupAddon>}\n <InputGroupInput\n type={props.type}\n name={props.name}\n form={props.form}\n value={props.type === 'file' ? undefined : (props.value ?? '')}\n placeholder={props.placeholder}\n disabled={props.disabled ?? false}\n readOnly={props.readonly ?? false}\n required={props.required ?? false}\n autoComplete={props.autoComplete}\n inputMode={props.inputMode}\n min={props.min}\n max={props.max}\n step={props.step}\n minLength={props.minLength}\n maxLength={props.maxLength}\n pattern={props.pattern}\n accept={props.accept}\n multiple={props.multiple}\n spellCheck={props.spellCheck}\n autoFocus={props.autofocus}\n aria-invalid={props.invalid || undefined}\n aria-label={props.ariaLabel}\n aria-description={props.ariaDescription}\n onChange={(event) => {\n const { value } = event.target;\n host.setAttribute('value', value);\n const files = event.target.files ? Array.from(event.target.files) : undefined;\n if (props.type === 'file') {\n setFormValue(props.multiple ? multipleFormValue(host, files ?? []) : (files?.[0] ?? null));\n }\n emit('edx-change', { value, files });\n }}\n />\n {props.suffix && <InputGroupAddon align=\"inline-end\">{props.suffix}</InputGroupAddon>}\n {props.actionLabel && (\n <InputGroupAddon align=\"inline-end\">\n <InputGroupButton onClick={() => emit('edx-action')}>{props.actionLabel}</InputGroupButton>\n </InputGroupAddon>\n )}\n </InputGroup>\n );\n};\n\nexport const registerEdxInputGroup = (ctx: IRegisterContext): void => {\n defineElement<IEdxInputGroupProps>('edx-input-group', EdxInputGroup, {\n mode: ctx.mode,\n styles: ctx.styles,\n delegateClick: true,\n formAssociated: true,\n formValue: (props) => (props.type === 'file' ? null : (props.value ?? '')),\n observedAttributes: [\n 'addon',\n 'prefix',\n 'suffix',\n 'action-label',\n 'placeholder',\n 'value',\n 'disabled',\n 'readonly',\n 'invalid',\n 'type',\n 'name',\n 'form',\n 'required',\n 'autocomplete',\n 'inputmode',\n 'min',\n 'max',\n 'step',\n 'minlength',\n 'maxlength',\n 'pattern',\n 'accept',\n 'multiple',\n 'spellcheck',\n 'autofocus',\n 'aria-label',\n 'aria-description',\n ],\n transformProps: (raw) => ({\n addon: raw.addon ?? undefined,\n prefix: raw.prefix ?? undefined,\n suffix: raw.suffix ?? undefined,\n actionLabel: raw['action-label'] ?? undefined,\n placeholder: raw.placeholder ?? undefined,\n value: raw.value ?? undefined,\n disabled: coerceBool(raw.disabled),\n readonly: coerceBool(raw.readonly),\n invalid: coerceBool(raw.invalid),\n type: raw.type ?? undefined,\n name: raw.name ?? undefined,\n form: raw.form ?? undefined,\n required: coerceBool(raw.required),\n autoComplete: raw.autocomplete ?? undefined,\n inputMode: (raw.inputmode as IEdxInputGroupProps['inputMode']) ?? undefined,\n min: raw.min ?? undefined,\n max: raw.max ?? undefined,\n step: raw.step ?? undefined,\n minLength: raw.minlength == null ? undefined : Number(raw.minlength),\n maxLength: raw.maxlength == null ? undefined : Number(raw.maxlength),\n pattern: raw.pattern ?? undefined,\n accept: raw.accept ?? undefined,\n multiple: coerceBool(raw.multiple),\n spellCheck: raw.spellcheck == null ? undefined : coerceBool(raw.spellcheck),\n autofocus: coerceBool(raw.autofocus),\n ariaLabel: raw['aria-label'] ?? undefined,\n ariaDescription: raw['aria-description'] ?? undefined,\n }),\n domProperties: {\n value: {\n get: (host) => host.getAttribute('value') ?? '',\n set: (host, value) => {\n host.setAttribute('value', String(value ?? ''));\n },\n },\n },\n });\n};\n","import { defineElement, useEdxHost } from '@edyn/dom';\nimport { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from '@edyn/ui/components/ui/input-otp';\nimport type { IRegisterContext } from './registry';\nimport { coerceBool, coerceNumber } from './registry';\n\nexport interface IEdxInputOtpProps {\n length?: number;\n value?: string;\n defaultValue?: string;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n name?: string;\n form?: string;\n autoComplete?: string;\n inputMode?: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';\n pattern?: string;\n invalid?: boolean;\n ariaLabel?: string;\n ariaDescription?: string;\n}\n\nconst buildSlots = (props: IEdxInputOtpProps, length: number, value: string, onValueChange: (v: string) => void, onComplete: (v: string) => void) => {\n const inputProps = {\n maxLength: length,\n value,\n disabled: props.disabled ?? false,\n readOnly: props.readonly ?? false,\n required: props.required ?? false,\n name: props.name,\n form: props.form,\n autoComplete: props.autoComplete,\n inputMode: props.inputMode,\n pattern: props.pattern,\n 'aria-invalid': props.invalid || undefined,\n 'aria-label': props.ariaLabel,\n 'aria-description': props.ariaDescription,\n onChange: onValueChange,\n onComplete,\n };\n\n if (length === 6) {\n return (\n <InputOTP {...inputProps}>\n <InputOTPGroup>\n <InputOTPSlot index={0} />\n <InputOTPSlot index={1} />\n <InputOTPSlot index={2} />\n </InputOTPGroup>\n <InputOTPSeparator />\n <InputOTPGroup>\n <InputOTPSlot index={3} />\n <InputOTPSlot index={4} />\n <InputOTPSlot index={5} />\n </InputOTPGroup>\n </InputOTP>\n );\n }\n\n return (\n <InputOTP {...inputProps}>\n <InputOTPGroup>\n {Array.from({ length }, (_, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: slot order is structural and never reordered at runtime\n <InputOTPSlot key={`slot-${i}`} index={i} />\n ))}\n </InputOTPGroup>\n </InputOTP>\n );\n};\n\nexport const EdxInputOtp = (props: IEdxInputOtpProps) => {\n const { emit, host } = useEdxHost();\n const length = props.length ?? 6;\n const value = props.value ?? props.defaultValue ?? '';\n\n const handleValueChange = (next: string) => {\n host.removeAttribute('default-value');\n host.setAttribute('value', next);\n emit('edx-change', { value: next });\n };\n\n return buildSlots(props, length, value, handleValueChange, (next) => emit('edx-complete', { value: next }));\n};\n\nexport const registerEdxInputOtp = (ctx: IRegisterContext): void => {\n defineElement<IEdxInputOtpProps>('edx-input-otp', EdxInputOtp, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'inline-flex',\n // <label for=\"edx-input-otp-id\"> routes activation to the host; forward it to\n // the first OTP input so clicking a label focuses it (mirrors edx-input).\n delegateClick: true,\n formAssociated: true,\n formValue: (props) => props.value ?? props.defaultValue ?? '',\n observedAttributes: [\n 'length',\n 'value',\n 'default-value',\n 'disabled',\n 'readonly',\n 'required',\n 'name',\n 'form',\n 'autocomplete',\n 'inputmode',\n 'pattern',\n 'invalid',\n 'aria-label',\n 'aria-description',\n ],\n transformProps: (raw) => ({\n length: coerceNumber(raw.length) ?? 6,\n value: raw.value ?? undefined,\n defaultValue: raw['default-value'] ?? undefined,\n disabled: coerceBool(raw.disabled),\n readonly: coerceBool(raw.readonly),\n required: coerceBool(raw.required),\n name: raw.name ?? undefined,\n form: raw.form ?? undefined,\n autoComplete: raw.autocomplete ?? undefined,\n inputMode: (raw.inputmode as IEdxInputOtpProps['inputMode']) ?? undefined,\n pattern: raw.pattern ?? undefined,\n invalid: coerceBool(raw.invalid),\n ariaLabel: raw['aria-label'] ?? undefined,\n ariaDescription: raw['aria-description'] ?? undefined,\n }),\n domProperties: {\n value: {\n get: (host) => host.getAttribute('value') ?? host.getAttribute('default-value') ?? '',\n set: (host, value) => {\n host.setAttribute('value', String(value ?? ''));\n },\n },\n },\n });\n};\n","import { defineElement, Slot, useEdxHost, useEmit } from '@edyn/dom';\nimport type { TCarouselApi } from '@edyn/ui';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n AlertDialogTrigger,\n Button,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselNext,\n CarouselPrevious,\n ChartContainer,\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n Command,\n CommandEmpty,\n CommandInput,\n CommandItem,\n CommandList,\n ContextMenu,\n ContextMenuContent,\n ContextMenuItem,\n ContextMenuTrigger,\n DirectionProvider,\n HoverCard,\n HoverCardContent,\n HoverCardTrigger,\n Menubar,\n MenubarContent,\n MenubarItem,\n MenubarMenu,\n MenubarTrigger,\n MessageScroller,\n MessageScrollerButton,\n MessageScrollerContent,\n MessageScrollerItem,\n MessageScrollerProvider,\n MessageScrollerViewport,\n NavigationMenu,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n Questionnaire,\n QuestionnaireActions,\n QuestionnaireChoice,\n QuestionnaireChoiceDescription,\n QuestionnaireChoices,\n QuestionnaireDescription,\n QuestionnaireItem,\n QuestionnaireProgress,\n QuestionnaireSubmit,\n QuestionnaireTitle,\n ResizableHandle,\n ResizablePanel,\n ResizablePanelGroup,\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n Sidebar,\n SidebarContent,\n SidebarGroup,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarProvider,\n SidebarTrigger,\n Toaster,\n toast,\n} from '@edyn/ui';\nimport { type FormEvent, useEffect, useState } from 'react';\nimport { Bar, BarChart, CartesianGrid, XAxis } from 'recharts';\nimport type { IRegisterContext } from './registry';\nimport { booleanDomProperty, coerceBool, coerceJson, coerceNumber, reflectBool, registerOverlayElement } from './registry';\n\ninterface IMenuItem {\n label: string;\n value?: string;\n href?: string;\n description?: string;\n disabled?: boolean;\n active?: boolean;\n}\n\ninterface IAlertDialogProps {\n triggerLabel?: string;\n heading?: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n open?: boolean;\n defaultOpen?: boolean;\n}\n\nconst EdxAlertDialog = ({\n triggerLabel = 'Delete item',\n heading = 'Are you absolutely sure?',\n description = 'This action cannot be undone.',\n confirmLabel = 'Continue',\n cancelLabel = 'Cancel',\n open,\n defaultOpen,\n}: IAlertDialogProps) => {\n const { emit, host } = useEdxHost();\n\n return (\n <AlertDialog\n open={open ?? defaultOpen ?? false}\n onOpenChange={(nextOpen) => {\n host.removeAttribute('default-open');\n reflectBool(host, 'open', nextOpen);\n emit('edx-change', { open: nextOpen });\n }}\n >\n <AlertDialogTrigger render={<Button variant=\"outline\" />}>{triggerLabel}</AlertDialogTrigger>\n <AlertDialogContent>\n <AlertDialogHeader>\n <AlertDialogTitle>{heading}</AlertDialogTitle>\n <AlertDialogDescription>{description}</AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel>{cancelLabel}</AlertDialogCancel>\n <AlertDialogAction\n onClick={() => {\n emit('edx-action', { action: 'confirm' });\n }}\n >\n {confirmLabel}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n );\n};\n\ninterface ICarouselProps {\n items?: string[];\n orientation?: 'horizontal' | 'vertical';\n current?: number;\n loop?: boolean;\n dragFree?: boolean;\n startIndex?: number;\n}\n\nconst EdxCarousel = ({\n items = ['First slide', 'Second slide', 'Third slide'],\n orientation = 'horizontal',\n current,\n loop,\n dragFree,\n startIndex,\n}: ICarouselProps) => {\n const { emit, host } = useEdxHost();\n const [api, setApi] = useState<TCarouselApi>();\n\n useEffect(() => {\n if (!api) {\n return;\n }\n const handleSelect = (): void => {\n const next = api.selectedScrollSnap();\n if (!Number.isFinite(next)) {\n return;\n }\n host.setAttribute('current', String(next));\n emit('edx-change', { value: next });\n };\n api.on('select', handleSelect);\n api.on('reInit', handleSelect);\n return () => {\n api.off('select', handleSelect);\n api.off('reInit', handleSelect);\n };\n }, [api, emit, host]);\n\n useEffect(() => {\n if (api && current != null && api.selectedScrollSnap() !== current) {\n api.scrollTo(current);\n }\n }, [api, current]);\n\n return (\n <Carousel\n orientation={orientation}\n opts={{ loop: loop ?? false, dragFree: dragFree ?? false, startIndex: startIndex ?? 0 }}\n setApi={setApi}\n className=\"mx-10 w-64\"\n >\n <CarouselContent>\n {items.map((item) => (\n <CarouselItem key={item}>\n <div className=\"flex h-28 items-center justify-center rounded-lg border bg-card p-4 text-sm font-medium\">{item}</div>\n </CarouselItem>\n ))}\n </CarouselContent>\n <CarouselPrevious />\n <CarouselNext />\n </Carousel>\n );\n};\n\ninterface IChartDatum {\n label: string;\n value: number;\n}\n\ninterface IChartProps {\n data?: IChartDatum[];\n}\n\nconst EdxChart = ({\n data = [\n { label: 'Mon', value: 32 },\n { label: 'Tue', value: 48 },\n { label: 'Wed', value: 40 },\n { label: 'Thu', value: 64 },\n ],\n}: IChartProps) => {\n return (\n <ChartContainer config={{ value: { label: 'Value', color: 'var(--chart-1)' } }} className=\"h-48 w-full aspect-auto\">\n <BarChart data={data} accessibilityLayer>\n <CartesianGrid vertical={false} />\n <XAxis dataKey=\"label\" tickLine={false} axisLine={false} />\n <Bar dataKey=\"value\" fill=\"var(--color-value)\" radius={6} />\n </BarChart>\n </ChartContainer>\n );\n};\n\ninterface ICollapsibleProps {\n triggerLabel?: string;\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n}\n\nconst EdxCollapsible = ({ triggerLabel = 'Show details', open, defaultOpen, disabled }: ICollapsibleProps) => {\n const { emit, host } = useEdxHost();\n\n return (\n <Collapsible\n open={open ?? defaultOpen ?? false}\n disabled={disabled}\n onOpenChange={(nextOpen) => {\n host.removeAttribute('default-open');\n reflectBool(host, 'open', nextOpen);\n emit('edx-change', { open: nextOpen });\n }}\n className=\"w-full space-y-2\"\n >\n <CollapsibleTrigger render={<Button variant=\"outline\" />} disabled={disabled}>\n {triggerLabel}\n </CollapsibleTrigger>\n <CollapsibleContent className=\"rounded-lg border bg-card p-3 text-sm text-muted-foreground\">\n <Slot />\n </CollapsibleContent>\n </Collapsible>\n );\n};\n\ninterface ICommandProps {\n placeholder?: string;\n emptyLabel?: string;\n items?: IMenuItem[];\n query?: string;\n loop?: boolean;\n disablePointerSelection?: boolean;\n vimBindings?: boolean;\n}\n\nconst EdxCommand = ({\n placeholder = 'Type a command or search…',\n emptyLabel = 'No results found.',\n items = [],\n query,\n loop,\n disablePointerSelection,\n vimBindings,\n}: ICommandProps) => {\n const { emit, host } = useEdxHost();\n return (\n <Command loop={loop} disablePointerSelection={disablePointerSelection} vimBindings={vimBindings} className=\"w-full rounded-lg border\">\n <CommandInput\n placeholder={placeholder}\n value={query ?? ''}\n onValueChange={(nextQuery) => {\n host.setAttribute('query', nextQuery);\n emit('edx-input-change', { value: nextQuery });\n }}\n />\n <CommandList>\n <CommandEmpty>{emptyLabel}</CommandEmpty>\n {items.map((item) => (\n <CommandItem\n key={item.value ?? item.label}\n value={item.value ?? item.label}\n disabled={item.disabled}\n onSelect={(value) => emit('edx-select', { value })}\n >\n {item.label}\n </CommandItem>\n ))}\n </CommandList>\n </Command>\n );\n};\n\ninterface IContextMenuProps {\n items?: IMenuItem[];\n label?: string;\n open?: boolean;\n defaultOpen?: boolean;\n disabled?: boolean;\n loopFocus?: boolean;\n highlightItemOnHover?: boolean;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n alignOffset?: number;\n}\n\nconst EdxContextMenu = ({\n items = [],\n label = 'Right-click here',\n open,\n defaultOpen,\n disabled,\n loopFocus = true,\n highlightItemOnHover = true,\n side,\n align,\n sideOffset,\n alignOffset,\n}: IContextMenuProps) => {\n const { emit, host } = useEdxHost();\n return (\n <ContextMenu\n open={open ?? defaultOpen ?? false}\n disabled={disabled}\n loopFocus={loopFocus}\n highlightItemOnHover={highlightItemOnHover}\n onOpenChange={(nextOpen) => {\n host.removeAttribute('default-open');\n reflectBool(host, 'open', nextOpen);\n emit('edx-change', { open: nextOpen });\n }}\n >\n <ContextMenuTrigger className=\"flex h-28 w-full items-center justify-center rounded-lg border border-dashed text-sm text-muted-foreground\">\n {label}\n </ContextMenuTrigger>\n <ContextMenuContent side={side} align={align} sideOffset={sideOffset} alignOffset={alignOffset}>\n {items.map((item) => (\n <ContextMenuItem\n key={item.value ?? item.label}\n disabled={item.disabled}\n onClick={() => emit('edx-select', { value: item.value ?? item.label })}\n >\n {item.label}\n </ContextMenuItem>\n ))}\n </ContextMenuContent>\n </ContextMenu>\n );\n};\n\ninterface IDirectionProps {\n direction?: 'ltr' | 'rtl';\n}\n\nconst EdxDirection = ({ direction = 'ltr' }: IDirectionProps) => {\n return (\n <DirectionProvider direction={direction}>\n <div dir={direction} className=\"contents\">\n <Slot />\n </div>\n </DirectionProvider>\n );\n};\n\ninterface IHoverCardProps {\n triggerLabel?: string;\n heading?: string;\n description?: string;\n open?: boolean;\n defaultOpen?: boolean;\n delay?: number;\n closeDelay?: number;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n alignOffset?: number;\n}\n\nconst EdxHoverCard = ({\n triggerLabel = 'Hover for details',\n heading = 'Design system',\n description = 'Accessible components for every application.',\n open,\n defaultOpen,\n delay,\n closeDelay,\n side,\n align,\n sideOffset,\n alignOffset,\n}: IHoverCardProps) => {\n const { emit, host } = useEdxHost();\n return (\n <HoverCard\n open={open ?? defaultOpen ?? false}\n onOpenChange={(open) => {\n host.removeAttribute('default-open');\n reflectBool(host, 'open', open);\n emit('edx-change', { open });\n }}\n >\n <HoverCardTrigger render={<Button variant=\"link\" />} delay={delay} closeDelay={closeDelay}>\n {triggerLabel}\n </HoverCardTrigger>\n <HoverCardContent side={side} align={align} sideOffset={sideOffset} alignOffset={alignOffset}>\n <p className=\"font-medium\">{heading}</p>\n <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p>\n </HoverCardContent>\n </HoverCard>\n );\n};\n\ninterface IMenubarEntry {\n label: string;\n items: IMenuItem[];\n}\n\ninterface IMenubarProps {\n menus?: IMenubarEntry[];\n disabled?: boolean;\n modal?: boolean;\n orientation?: 'horizontal' | 'vertical';\n loopFocus?: boolean;\n}\n\nconst EdxMenubar = ({ menus = [], disabled, modal = true, orientation, loopFocus = true }: IMenubarProps) => {\n const emit = useEmit();\n return (\n <Menubar disabled={disabled} modal={modal} orientation={orientation} loopFocus={loopFocus}>\n {menus.map((menu) => (\n <MenubarMenu key={menu.label}>\n <MenubarTrigger>{menu.label}</MenubarTrigger>\n <MenubarContent>\n {menu.items.map((item) => (\n <MenubarItem\n key={item.value ?? item.label}\n disabled={item.disabled}\n onClick={() => emit('edx-select', { value: item.value ?? item.label })}\n >\n {item.label}\n </MenubarItem>\n ))}\n </MenubarContent>\n </MenubarMenu>\n ))}\n </Menubar>\n );\n};\n\ninterface IMessageScrollerProps {\n items?: string[];\n autoScroll?: boolean;\n defaultScrollPosition?: 'start' | 'end' | 'last-anchor';\n scrollEdgeThreshold?: number;\n scrollPreviousItemPeek?: number;\n scrollMargin?: number;\n preserveScrollOnPrepend?: boolean;\n buttonDirection?: 'start' | 'end';\n buttonBehavior?: ScrollBehavior;\n}\n\nconst EdxMessageScroller = ({\n items = [],\n autoScroll,\n defaultScrollPosition = 'end',\n scrollEdgeThreshold,\n scrollPreviousItemPeek,\n scrollMargin,\n preserveScrollOnPrepend,\n buttonDirection,\n buttonBehavior,\n}: IMessageScrollerProps) => {\n return (\n <MessageScrollerProvider\n autoScroll={autoScroll}\n defaultScrollPosition={defaultScrollPosition}\n scrollEdgeThreshold={scrollEdgeThreshold}\n scrollPreviousItemPeek={scrollPreviousItemPeek}\n scrollMargin={scrollMargin}\n >\n <MessageScroller className=\"h-48 rounded-lg border bg-card\">\n <MessageScrollerViewport aria-label=\"Messages\" preserveScrollOnPrepend={preserveScrollOnPrepend}>\n <MessageScrollerContent className=\"gap-3 p-3\">\n {items.map((item, index) => (\n <MessageScrollerItem key={item} messageId={`message-${index}`} className=\"rounded-lg bg-muted p-2 text-sm\">\n {item}\n </MessageScrollerItem>\n ))}\n </MessageScrollerContent>\n </MessageScrollerViewport>\n <MessageScrollerButton direction={buttonDirection} behavior={buttonBehavior} />\n </MessageScroller>\n </MessageScrollerProvider>\n );\n};\n\ninterface INavigationMenuProps {\n items?: IMenuItem[];\n value?: string;\n defaultValue?: string;\n orientation?: 'horizontal' | 'vertical';\n delay?: number;\n closeDelay?: number;\n align?: 'start' | 'center' | 'end';\n ariaLabel?: string;\n}\n\nconst EdxNavigationMenu = ({ items = [], value, defaultValue, orientation, delay, closeDelay, align, ariaLabel }: INavigationMenuProps) => {\n const { emit, host } = useEdxHost();\n return (\n <NavigationMenu\n value={value ?? defaultValue}\n orientation={orientation}\n delay={delay}\n closeDelay={closeDelay}\n align={align}\n aria-label={ariaLabel}\n onValueChange={(nextValue) => {\n host.removeAttribute('default-value');\n if (nextValue) {\n host.setAttribute('value', nextValue);\n } else {\n host.removeAttribute('value');\n }\n emit('edx-change', { value: nextValue });\n }}\n >\n <NavigationMenuList>\n {items.map((item) => (\n <NavigationMenuItem key={item.value ?? item.label}>\n <NavigationMenuLink\n href={item.disabled ? undefined : (item.href ?? '#')}\n active={item.active}\n aria-disabled={item.disabled || undefined}\n onClick={(event) => {\n if (item.disabled) {\n event.preventDefault();\n return;\n }\n emit('edx-select', { value: item.value ?? item.label });\n }}\n >\n {item.label}\n </NavigationMenuLink>\n </NavigationMenuItem>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n );\n};\n\ninterface IQuestionnaireChoice {\n value: string;\n label: string;\n description?: string;\n disabled?: boolean;\n}\n\ninterface IQuestionnaireProps {\n name?: string;\n title?: string;\n description?: string;\n choices?: IQuestionnaireChoice[];\n required?: boolean;\n multiple?: boolean;\n}\n\nconst EdxQuestionnaire = ({\n name = 'preference',\n title = 'Choose an option',\n description,\n choices = [],\n required = true,\n multiple,\n}: IQuestionnaireProps) => {\n const emit = useEmit();\n const handleSubmit = (event: FormEvent<HTMLFormElement>): void => {\n event.preventDefault();\n emit('edx-submit', Object.fromEntries(new FormData(event.currentTarget)));\n };\n\n return (\n <Questionnaire items={[{ name, required, choices }]} defaultItem={name} onSubmit={handleSubmit}>\n <QuestionnaireProgress />\n <QuestionnaireItem name={name} required={required} multiple={multiple}>\n <QuestionnaireTitle>{title}</QuestionnaireTitle>\n {description ? <QuestionnaireDescription>{description}</QuestionnaireDescription> : null}\n <QuestionnaireChoices>\n {choices.map((choice) => (\n <QuestionnaireChoice key={choice.value} value={choice.value} disabled={choice.disabled}>\n <span>{choice.label}</span>\n {choice.description && <QuestionnaireChoiceDescription>{choice.description}</QuestionnaireChoiceDescription>}\n </QuestionnaireChoice>\n ))}\n </QuestionnaireChoices>\n </QuestionnaireItem>\n <QuestionnaireActions>\n <QuestionnaireSubmit />\n </QuestionnaireActions>\n </Questionnaire>\n );\n};\n\ninterface IResizableProps {\n firstSize?: number;\n orientation?: 'horizontal' | 'vertical';\n disabled?: boolean;\n firstMinSize?: number;\n firstMaxSize?: number;\n firstCollapsible?: boolean;\n firstCollapsedSize?: number;\n}\n\nconst EdxResizable = ({\n firstSize = 50,\n orientation = 'horizontal',\n disabled,\n firstMinSize,\n firstMaxSize,\n firstCollapsible,\n firstCollapsedSize,\n}: IResizableProps) => {\n const emit = useEmit();\n return (\n <ResizablePanelGroup\n orientation={orientation}\n disabled={disabled}\n onLayoutChanged={(layout) => emit('edx-change', { value: layout })}\n className=\"h-40 rounded-lg border\"\n >\n <ResizablePanel\n defaultSize={firstSize}\n minSize={firstMinSize}\n maxSize={firstMaxSize}\n collapsible={firstCollapsible}\n collapsedSize={firstCollapsedSize}\n className=\"flex items-center justify-center p-3 text-sm\"\n >\n <Slot name=\"first\" />\n </ResizablePanel>\n <ResizableHandle withHandle disabled={disabled} />\n <ResizablePanel className=\"flex items-center justify-center p-3 text-sm\">\n <Slot name=\"second\" />\n </ResizablePanel>\n </ResizablePanelGroup>\n );\n};\n\ninterface ISheetProps {\n triggerLabel?: string;\n heading?: string;\n description?: string;\n side?: 'top' | 'right' | 'bottom' | 'left';\n open?: boolean;\n defaultOpen?: boolean;\n modal?: boolean;\n disablePointerDismissal?: boolean;\n}\n\nconst EdxSheet = ({\n triggerLabel = 'Open sheet',\n heading = 'Details',\n description = 'Review and update this information.',\n side = 'right',\n open,\n defaultOpen,\n modal = true,\n disablePointerDismissal,\n}: ISheetProps) => {\n const { emit, host } = useEdxHost();\n return (\n <Sheet\n open={open ?? defaultOpen ?? false}\n modal={modal}\n disablePointerDismissal={disablePointerDismissal}\n onOpenChange={(open) => {\n host.removeAttribute('default-open');\n reflectBool(host, 'open', open);\n emit('edx-change', { open });\n }}\n >\n <SheetTrigger render={<Button variant=\"outline\" />}>{triggerLabel}</SheetTrigger>\n <SheetContent side={side} showCloseButton>\n <SheetHeader>\n <SheetTitle>{heading}</SheetTitle>\n <SheetDescription>{description}</SheetDescription>\n </SheetHeader>\n <div className=\"p-4\">\n <Slot />\n </div>\n </SheetContent>\n </Sheet>\n );\n};\n\ninterface ISidebarProps {\n title?: string;\n items?: IMenuItem[];\n groupLabel?: string;\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n open?: boolean;\n defaultOpen?: boolean;\n}\n\nconst EdxSidebar = ({\n title = 'Workspace',\n items = [],\n groupLabel = 'Navigation',\n side,\n variant,\n collapsible = 'none',\n open,\n defaultOpen = true,\n}: ISidebarProps) => {\n const { emit, host } = useEdxHost();\n return (\n <SidebarProvider\n open={open ?? defaultOpen}\n onOpenChange={(nextOpen) => {\n host.removeAttribute('default-open');\n // SidebarProvider defaults to open. Persist an explicit false value;\n // removing the attribute would resolve back to the true default and\n // immediately reopen the sidebar.\n host.setAttribute('open', String(nextOpen));\n emit('edx-change', { open: nextOpen });\n }}\n className=\"min-h-64 overflow-hidden rounded-lg border\"\n >\n <Sidebar side={side} variant={variant} collapsible={collapsible} className=\"h-64\">\n <SidebarHeader className=\"flex-row items-center justify-between font-medium\">\n <span>{title}</span>\n {collapsible !== 'none' ? <SidebarTrigger aria-label=\"Toggle sidebar\" /> : null}\n </SidebarHeader>\n <SidebarContent>\n <SidebarGroup>\n <SidebarGroupLabel>{groupLabel}</SidebarGroupLabel>\n <SidebarGroupContent>\n <SidebarMenu>\n {items.map((item) => (\n <SidebarMenuItem key={item.value ?? item.label}>\n <SidebarMenuButton\n isActive={item.active}\n disabled={item.disabled}\n onClick={() => emit('edx-select', { value: item.value ?? item.label })}\n >\n {item.label}\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarGroupContent>\n </SidebarGroup>\n </SidebarContent>\n </Sidebar>\n </SidebarProvider>\n );\n};\n\ninterface IToastProps {\n triggerLabel?: string;\n title?: string;\n description?: string;\n type?: 'success' | 'info' | 'warning' | 'error' | 'loading';\n timeout?: number;\n}\n\nconst EdxToast = ({\n triggerLabel = 'Show toast',\n title = 'Saved',\n description = 'Your changes have been saved.',\n type = 'success',\n timeout = 5000,\n}: IToastProps) => {\n return (\n <>\n <Button variant=\"outline\" onClick={() => toast.add({ title, description, type, timeout })}>\n {triggerLabel}\n </Button>\n <Toaster />\n </>\n );\n};\n\nexport const registerEdxInteractiveComponents = (ctx: IRegisterContext): void => {\n registerOverlayElement<IAlertDialogProps>('edx-alert-dialog', EdxAlertDialog, ctx, {\n display: 'inline-flex',\n observedAttributes: ['trigger-label', 'heading', 'description', 'confirm-label', 'cancel-label', 'open', 'default-open'],\n transformProps: (raw) => ({\n triggerLabel: raw['trigger-label'] ?? undefined,\n heading: raw.heading ?? undefined,\n description: raw.description ?? undefined,\n confirmLabel: raw['confirm-label'] ?? undefined,\n cancelLabel: raw['cancel-label'] ?? undefined,\n open: raw.open == null ? undefined : coerceBool(raw.open),\n defaultOpen: raw['default-open'] == null ? undefined : coerceBool(raw['default-open']),\n }),\n domProperties: { open: booleanDomProperty('open', 'default-open') },\n });\n defineElement<ICarouselProps>('edx-carousel', EdxCarousel, {\n mode: ctx.mode,\n styles: ctx.styles,\n observedAttributes: ['items', 'orientation', 'current', 'loop', 'drag-free', 'start-index'],\n transformProps: (raw) => ({\n items: coerceJson<string[]>(raw.items),\n orientation: (raw.orientation ?? undefined) as 'horizontal' | 'vertical',\n current: coerceNumber(raw.current),\n loop: raw.loop == null ? undefined : coerceBool(raw.loop),\n dragFree: raw['drag-free'] == null ? undefined : coerceBool(raw['drag-free']),\n startIndex: coerceNumber(raw['start-index']),\n }),\n domProperties: {\n current: {\n get: (host) => coerceNumber(host.getAttribute('current')) ?? 0,\n set: (host, value) => host.setAttribute('current', String(value ?? 0)),\n },\n },\n });\n defineElement<IChartProps>('edx-chart', EdxChart, {\n mode: ctx.mode,\n styles: ctx.styles,\n observedAttributes: ['data'],\n transformProps: (raw) => ({ data: coerceJson<IChartDatum[]>(raw.data) }),\n });\n defineElement<ICollapsibleProps>('edx-collapsible', EdxCollapsible, {\n mode: 'shadow',\n styles: ctx.styles,\n observedAttributes: ['trigger-label', 'open', 'default-open', 'disabled'],\n transformProps: (raw) => ({\n triggerLabel: raw['trigger-label'] ?? undefined,\n open: raw.open == null ? undefined : coerceBool(raw.open),\n defaultOpen: raw['default-open'] == null ? undefined : coerceBool(raw['default-open']),\n disabled: raw.disabled == null ? undefined : coerceBool(raw.disabled),\n }),\n domProperties: { open: booleanDomProperty('open', 'default-open') },\n });\n defineElement<ICommandProps>('edx-command', EdxCommand, {\n mode: ctx.mode,\n styles: ctx.styles,\n observedAttributes: ['placeholder', 'empty-label', 'items', 'query', 'loop', 'disable-pointer-selection', 'vim-bindings'],\n transformProps: (raw) => ({\n placeholder: raw.placeholder ?? undefined,\n emptyLabel: raw['empty-label'] ?? undefined,\n items: coerceJson<IMenuItem[]>(raw.items),\n query: raw.query ?? undefined,\n loop: raw.loop == null ? undefined : coerceBool(raw.loop),\n disablePointerSelection: raw['disable-pointer-selection'] == null ? undefined : coerceBool(raw['disable-pointer-selection']),\n vimBindings: raw['vim-bindings'] == null ? undefined : coerceBool(raw['vim-bindings']),\n }),\n domProperties: {\n query: {\n get: (host) => host.getAttribute('query') ?? '',\n set: (host, value) => host.setAttribute('query', String(value ?? '')),\n },\n },\n });\n registerOverlayElement<IContextMenuProps>('edx-context-menu', EdxContextMenu, ctx, {\n observedAttributes: [\n 'items',\n 'label',\n 'open',\n 'default-open',\n 'disabled',\n 'loop-focus',\n 'highlight-item-on-hover',\n 'side',\n 'align',\n 'side-offset',\n 'align-offset',\n ],\n transformProps: (raw) => ({\n items: coerceJson<IMenuItem[]>(raw.items),\n label: raw.label ?? undefined,\n open: raw.open == null ? undefined : coerceBool(raw.open),\n defaultOpen: raw['default-open'] == null ? undefined : coerceBool(raw['default-open']),\n disabled: raw.disabled == null ? undefined : coerceBool(raw.disabled),\n loopFocus: raw['loop-focus'] == null ? undefined : coerceBool(raw['loop-focus']),\n highlightItemOnHover: raw['highlight-item-on-hover'] == null ? undefined : coerceBool(raw['highlight-item-on-hover']),\n side: (raw.side as IContextMenuProps['side']) ?? undefined,\n align: (raw.align as IContextMenuProps['align']) ?? undefined,\n sideOffset: coerceNumber(raw['side-offset']),\n alignOffset: coerceNumber(raw['align-offset']),\n }),\n domProperties: { open: booleanDomProperty('open', 'default-open') },\n });\n defineElement<IDirectionProps>('edx-direction', EdxDirection, {\n mode: 'shadow',\n styles: ctx.styles,\n observedAttributes: ['direction'],\n transformProps: (raw) => ({ direction: (raw.direction ?? undefined) as 'ltr' | 'rtl' }),\n });\n registerOverlayElement<IHoverCardProps>('edx-hover-card', EdxHoverCard, ctx, {\n display: 'inline-flex',\n observedAttributes: [\n 'trigger-label',\n 'heading',\n 'description',\n 'open',\n 'default-open',\n 'delay',\n 'close-delay',\n 'side',\n 'align',\n 'side-offset',\n 'align-offset',\n ],\n transformProps: (raw) => ({\n triggerLabel: raw['trigger-label'] ?? undefined,\n heading: raw.heading ?? undefined,\n description: raw.description ?? undefined,\n open: raw.open == null ? undefined : coerceBool(raw.open),\n defaultOpen: raw['default-open'] == null ? undefined : coerceBool(raw['default-open']),\n delay: coerceNumber(raw.delay),\n closeDelay: coerceNumber(raw['close-delay']),\n side: (raw.side as IHoverCardProps['side']) ?? undefined,\n align: (raw.align as IHoverCardProps['align']) ?? undefined,\n sideOffset: coerceNumber(raw['side-offset']),\n alignOffset: coerceNumber(raw['align-offset']),\n }),\n domProperties: { open: booleanDomProperty('open', 'default-open') },\n });\n registerOverlayElement<IMenubarProps>('edx-menubar', EdxMenubar, ctx, {\n // Menubar is a block-level flex container in React. Keep the host block\n // level too so the Web Component occupies the same available width.\n display: 'block',\n observedAttributes: ['menus', 'disabled', 'modal', 'orientation', 'loop-focus'],\n transformProps: (raw) => ({\n menus: coerceJson<IMenubarEntry[]>(raw.menus),\n disabled: raw.disabled == null ? undefined : coerceBool(raw.disabled),\n modal: raw.modal == null ? undefined : coerceBool(raw.modal),\n orientation: (raw.orientation as IMenubarProps['orientation']) ?? undefined,\n loopFocus: raw['loop-focus'] == null ? undefined : coerceBool(raw['loop-focus']),\n }),\n });\n defineElement<IMessageScrollerProps>('edx-message-scroller', EdxMessageScroller, {\n mode: ctx.mode,\n styles: ctx.styles,\n observedAttributes: [\n 'items',\n 'auto-scroll',\n 'default-scroll-position',\n 'scroll-edge-threshold',\n 'scroll-previous-item-peek',\n 'scroll-margin',\n 'preserve-scroll-on-prepend',\n 'button-direction',\n 'button-behavior',\n ],\n transformProps: (raw) => ({\n items: coerceJson<string[]>(raw.items),\n autoScroll: raw['auto-scroll'] == null ? undefined : coerceBool(raw['auto-scroll']),\n defaultScrollPosition: (raw['default-scroll-position'] as IMessageScrollerProps['defaultScrollPosition']) ?? undefined,\n scrollEdgeThreshold: coerceNumber(raw['scroll-edge-threshold']),\n scrollPreviousItemPeek: coerceNumber(raw['scroll-previous-item-peek']),\n scrollMargin: coerceNumber(raw['scroll-margin']),\n preserveScrollOnPrepend: raw['preserve-scroll-on-prepend'] == null ? undefined : coerceBool(raw['preserve-scroll-on-prepend']),\n buttonDirection: (raw['button-direction'] as IMessageScrollerProps['buttonDirection']) ?? undefined,\n buttonBehavior: (raw['button-behavior'] as IMessageScrollerProps['buttonBehavior']) ?? undefined,\n }),\n });\n registerOverlayElement<INavigationMenuProps>('edx-navigation-menu', EdxNavigationMenu, ctx, {\n display: 'inline-flex',\n observedAttributes: ['items', 'value', 'default-value', 'orientation', 'delay', 'close-delay', 'align', 'aria-label'],\n transformProps: (raw) => ({\n items: coerceJson<IMenuItem[]>(raw.items),\n value: raw.value ?? undefined,\n defaultValue: raw['default-value'] ?? undefined,\n orientation: (raw.orientation as INavigationMenuProps['orientation']) ?? undefined,\n delay: coerceNumber(raw.delay),\n closeDelay: coerceNumber(raw['close-delay']),\n align: (raw.align as INavigationMenuProps['align']) ?? undefined,\n ariaLabel: raw['aria-label'] ?? undefined,\n }),\n domProperties: {\n value: {\n get: (host) => host.getAttribute('value') ?? '',\n set: (host, value) => host.setAttribute('value', String(value ?? '')),\n },\n },\n });\n defineElement<IQuestionnaireProps>('edx-questionnaire', EdxQuestionnaire, {\n mode: ctx.mode,\n styles: ctx.styles,\n observedAttributes: ['name', 'title', 'description', 'choices', 'required', 'multiple'],\n transformProps: (raw) => ({\n name: raw.name ?? undefined,\n title: raw.title ?? undefined,\n description: raw.description ?? undefined,\n choices: coerceJson<IQuestionnaireChoice[]>(raw.choices),\n required: raw.required == null ? undefined : coerceBool(raw.required),\n multiple: raw.multiple == null ? undefined : coerceBool(raw.multiple),\n }),\n });\n defineElement<IResizableProps>('edx-resizable', EdxResizable, {\n mode: 'shadow',\n styles: ctx.styles,\n observedAttributes: ['first-size', 'orientation', 'disabled', 'first-min-size', 'first-max-size', 'first-collapsible', 'first-collapsed-size'],\n transformProps: (raw) => ({\n firstSize: coerceNumber(raw['first-size']),\n orientation: (raw.orientation as IResizableProps['orientation']) ?? undefined,\n disabled: raw.disabled == null ? undefined : coerceBool(raw.disabled),\n firstMinSize: coerceNumber(raw['first-min-size']),\n firstMaxSize: coerceNumber(raw['first-max-size']),\n firstCollapsible: raw['first-collapsible'] == null ? undefined : coerceBool(raw['first-collapsible']),\n firstCollapsedSize: coerceNumber(raw['first-collapsed-size']),\n }),\n });\n registerOverlayElement<ISheetProps>('edx-sheet', EdxSheet, ctx, {\n display: 'inline-flex',\n observedAttributes: ['trigger-label', 'heading', 'description', 'side', 'open', 'default-open', 'modal', 'disable-pointer-dismissal'],\n transformProps: (raw) => ({\n triggerLabel: raw['trigger-label'] ?? undefined,\n heading: raw.heading ?? undefined,\n description: raw.description ?? undefined,\n side: (raw.side ?? undefined) as 'top' | 'right' | 'bottom' | 'left',\n open: raw.open == null ? undefined : coerceBool(raw.open),\n defaultOpen: raw['default-open'] == null ? undefined : coerceBool(raw['default-open']),\n modal: raw.modal == null ? undefined : coerceBool(raw.modal),\n disablePointerDismissal: raw['disable-pointer-dismissal'] == null ? undefined : coerceBool(raw['disable-pointer-dismissal']),\n }),\n domProperties: { open: booleanDomProperty('open', 'default-open') },\n });\n registerOverlayElement<ISidebarProps>('edx-sidebar', EdxSidebar, ctx, {\n observedAttributes: ['title', 'items', 'group-label', 'side', 'variant', 'collapsible', 'open', 'default-open'],\n transformProps: (raw) => ({\n title: raw.title ?? undefined,\n items: coerceJson<IMenuItem[]>(raw.items),\n groupLabel: raw['group-label'] ?? undefined,\n side: (raw.side as ISidebarProps['side']) ?? undefined,\n variant: (raw.variant as ISidebarProps['variant']) ?? undefined,\n collapsible: (raw.collapsible as ISidebarProps['collapsible']) ?? undefined,\n open: raw.open == null ? undefined : coerceBool(raw.open),\n defaultOpen: raw['default-open'] == null ? undefined : coerceBool(raw['default-open']),\n }),\n domProperties: {\n open: {\n get: (host) => {\n const explicit = host.getAttribute('open');\n if (explicit != null) {\n return coerceBool(explicit);\n }\n const initial = host.getAttribute('default-open');\n return initial == null ? true : coerceBool(initial);\n },\n set: (host, value) => {\n host.removeAttribute('default-open');\n host.setAttribute('open', String(Boolean(value)));\n },\n },\n },\n });\n registerOverlayElement<IToastProps>('edx-toast', EdxToast, ctx, {\n display: 'inline-flex',\n observedAttributes: ['trigger-label', 'title', 'description', 'type', 'timeout'],\n transformProps: (raw) => ({\n triggerLabel: raw['trigger-label'] ?? undefined,\n title: raw.title ?? undefined,\n description: raw.description ?? undefined,\n type: (raw.type ?? undefined) as IToastProps['type'],\n timeout: coerceNumber(raw.timeout),\n }),\n });\n};\n","import { defineElement, Slot } from '@edyn/dom';\nimport { Label } from '@edyn/ui';\n\nimport type { IRegisterContext } from './registry';\n\nexport interface IEdxLabelProps {\n for?: string;\n}\n\nexport const EdxLabel = (props: IEdxLabelProps) => {\n return (\n <Label htmlFor={props.for}>\n <Slot />\n </Label>\n );\n};\n\nexport const registerEdxLabel = (ctx: IRegisterContext): void => {\n defineElement<IEdxLabelProps>('edx-label', EdxLabel, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'flex',\n observedAttributes: ['for'],\n transformProps: (raw) => ({\n for: raw.for ?? undefined,\n }),\n });\n};\n","import { defineElement, useEdxHost } from '@edyn/dom';\nimport { Pagination } from '@edyn/ui';\nimport type { IRegisterContext } from './registry';\nimport { coerceNumber } from './registry';\n\nexport interface IEdxPaginationProps {\n page?: number;\n count?: number;\n siblingCount?: number;\n}\n\nexport const EdxPagination = (props: IEdxPaginationProps) => {\n const { emit, host } = useEdxHost();\n\n const currentPage = props.page ?? 1;\n const totalPages = props.count ?? 1;\n const siblings = props.siblingCount ?? 1;\n\n return (\n <Pagination\n page={currentPage}\n count={totalPages}\n siblingCount={siblings}\n onPageChange={(newPage) => {\n host.setAttribute('page', String(newPage));\n emit('edx-change', { value: newPage });\n }}\n />\n );\n};\n\nexport const registerEdxPagination = (ctx: IRegisterContext): void => {\n defineElement<IEdxPaginationProps>('edx-pagination', EdxPagination, {\n mode: ctx.mode,\n styles: ctx.styles,\n observedAttributes: ['page', 'count', 'sibling-count'],\n transformProps: (raw) => ({\n page: coerceNumber(raw.page) ?? 1,\n count: coerceNumber(raw.count) ?? 1,\n siblingCount: coerceNumber(raw['sibling-count']) ?? 1,\n }),\n domProperties: {\n page: {\n get: (host) => {\n const val = coerceNumber(host.getAttribute('page'));\n return val ?? 1;\n },\n set: (host, value) => {\n host.setAttribute('page', String(value ?? 1));\n },\n },\n },\n });\n};\n","import { useEdxHost } from '@edyn/dom';\nimport { Button, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger } from '@edyn/ui';\n\nimport type { IRegisterContext } from './registry';\nimport { booleanDomProperty, coerceBool, coerceNumber, reflectBool, registerOverlayElement } from './registry';\n\nexport interface IEdxPopoverProps {\n triggerLabel?: string;\n heading?: string;\n description?: string;\n open?: boolean;\n defaultOpen?: boolean;\n modal?: boolean;\n openOnHover?: boolean;\n delay?: number;\n closeDelay?: number;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n alignOffset?: number;\n}\n\n/**\n * Click-triggered overlay, the same light-mode pattern as edx-dialog (registered\n * via registerOverlayElement, which pins mode:'light' so the Base UI portal can\n * land in document.body). Content is attribute-driven (no `<Slot />`): heading +\n * description cover the common popover body, mirroring the dialog header shape.\n */\nexport const EdxPopover = (props: IEdxPopoverProps) => {\n const { emit, host } = useEdxHost();\n\n return (\n <Popover\n open={props.open ?? props.defaultOpen ?? false}\n modal={props.modal}\n onOpenChange={(open) => {\n host.removeAttribute('default-open');\n reflectBool(host, 'open', open);\n emit('edx-change', { open });\n }}\n >\n <PopoverTrigger render={<Button variant=\"outline\" />} openOnHover={props.openOnHover} delay={props.delay} closeDelay={props.closeDelay}>\n {props.triggerLabel ?? 'Open'}\n </PopoverTrigger>\n <PopoverContent side={props.side} align={props.align} sideOffset={props.sideOffset} alignOffset={props.alignOffset}>\n {(props.heading || props.description) && (\n <PopoverHeader>\n {props.heading && <PopoverTitle>{props.heading}</PopoverTitle>}\n {props.description && <PopoverDescription>{props.description}</PopoverDescription>}\n </PopoverHeader>\n )}\n </PopoverContent>\n </Popover>\n );\n};\n\nexport const registerEdxPopover = (ctx: IRegisterContext): void => {\n registerOverlayElement<IEdxPopoverProps>('edx-popover', EdxPopover, ctx, {\n display: 'inline-flex',\n observedAttributes: [\n 'trigger-label',\n 'heading',\n 'description',\n 'open',\n 'default-open',\n 'modal',\n 'open-on-hover',\n 'delay',\n 'close-delay',\n 'side',\n 'align',\n 'side-offset',\n 'align-offset',\n ],\n transformProps: (raw) => ({\n triggerLabel: raw['trigger-label'] ?? undefined,\n heading: raw.heading ?? undefined,\n description: raw.description ?? undefined,\n open: raw.open == null ? undefined : coerceBool(raw.open),\n defaultOpen: raw['default-open'] == null ? undefined : coerceBool(raw['default-open']),\n modal: raw.modal == null ? undefined : coerceBool(raw.modal),\n openOnHover: raw['open-on-hover'] == null ? undefined : coerceBool(raw['open-on-hover']),\n delay: coerceNumber(raw.delay),\n closeDelay: coerceNumber(raw['close-delay']),\n side: (raw.side as IEdxPopoverProps['side']) ?? undefined,\n align: (raw.align as IEdxPopoverProps['align']) ?? undefined,\n sideOffset: coerceNumber(raw['side-offset']),\n alignOffset: coerceNumber(raw['align-offset']),\n }),\n domProperties: { open: booleanDomProperty('open', 'default-open') },\n });\n};\n","import { defineElement } from '@edyn/dom';\nimport { Progress } from '@edyn/ui';\n\nimport type { IRegisterContext } from './registry';\nimport { coerceNumber } from './registry';\n\nexport interface IEdxProgressProps {\n value?: number | null;\n label?: string;\n min?: number;\n max?: number;\n ariaValueText?: string;\n}\n\nexport const EdxProgress = (props: IEdxProgressProps) => {\n return <Progress value={props.value ?? null} min={props.min} max={props.max} aria-label={props.label} aria-valuetext={props.ariaValueText} />;\n};\n\nexport const registerEdxProgress = (ctx: IRegisterContext): void => {\n defineElement<IEdxProgressProps>('edx-progress', EdxProgress, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'block',\n observedAttributes: ['value', 'label', 'min', 'max', 'aria-valuetext'],\n transformProps: (raw) => ({\n value: raw.value === undefined ? null : (coerceNumber(raw.value) ?? null),\n label: raw.label ?? undefined,\n min: coerceNumber(raw.min),\n max: coerceNumber(raw.max),\n ariaValueText: raw['aria-valuetext'] ?? undefined,\n }),\n });\n};\n","import { defineElement, useEdxHost } from '@edyn/dom';\nimport { RadioGroup, RadioGroupItem } from '@edyn/ui';\nimport type { IRegisterContext } from './registry';\nimport { coerceBool, coerceJson } from './registry';\n\nexport interface IRadioOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface IEdxRadioGroupProps {\n options?: IRadioOption[];\n value?: string;\n defaultValue?: string;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n name?: string;\n form?: string;\n invalid?: boolean;\n orientation?: 'horizontal' | 'vertical';\n ariaLabel?: string;\n ariaDescription?: string;\n}\n\nexport const EdxRadioGroup = (props: IEdxRadioGroupProps) => {\n const { emit, host } = useEdxHost();\n\n const options = props.options ?? [];\n\n return (\n <RadioGroup\n value={props.value ?? props.defaultValue ?? ''}\n disabled={props.disabled ?? false}\n readOnly={props.readonly ?? false}\n required={props.required ?? false}\n name={props.name}\n form={props.form}\n orientation={props.orientation ?? 'vertical'}\n aria-invalid={props.invalid || undefined}\n aria-label={props.ariaLabel}\n aria-description={props.ariaDescription}\n onValueChange={(next) => {\n const value = String(next);\n host.removeAttribute('default-value');\n host.setAttribute('value', value);\n emit('edx-change', { value });\n }}\n >\n {options.map((option) => (\n <div key={option.value} className=\"flex items-center gap-2\">\n <RadioGroupItem\n value={option.value}\n disabled={(props.disabled ?? false) || option.disabled}\n aria-invalid={props.invalid || undefined}\n id={`${props.name ?? 'rg'}-${option.value}`}\n />\n <label htmlFor={`${props.name ?? 'rg'}-${option.value}`} className=\"text-sm font-medium leading-none\">\n {option.label}\n </label>\n </div>\n ))}\n </RadioGroup>\n );\n};\n\nexport const registerEdxRadioGroup = (ctx: IRegisterContext): void => {\n defineElement<IEdxRadioGroupProps>('edx-radio-group', EdxRadioGroup, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'block',\n formAssociated: true,\n formValue: (props) => props.value ?? props.defaultValue ?? '',\n observedAttributes: [\n 'options',\n 'value',\n 'default-value',\n 'disabled',\n 'readonly',\n 'required',\n 'name',\n 'form',\n 'invalid',\n 'orientation',\n 'aria-label',\n 'aria-description',\n ],\n transformProps: (raw) => ({\n options: coerceJson<IRadioOption[]>(raw.options) ?? [],\n value: raw.value ?? undefined,\n defaultValue: raw['default-value'] ?? undefined,\n disabled: coerceBool(raw.disabled),\n readonly: coerceBool(raw.readonly),\n required: coerceBool(raw.required),\n name: raw.name ?? undefined,\n form: raw.form ?? undefined,\n invalid: coerceBool(raw.invalid),\n orientation: (raw.orientation as IEdxRadioGroupProps['orientation']) ?? undefined,\n ariaLabel: raw['aria-label'] ?? undefined,\n ariaDescription: raw['aria-description'] ?? undefined,\n }),\n domProperties: {\n value: {\n get: (host) => host.getAttribute('value') ?? host.getAttribute('default-value') ?? '',\n set: (host, value) => {\n host.setAttribute('value', String(value ?? ''));\n },\n },\n },\n });\n};\n","import { defineElement, Slot, useEdxHost } from '@edyn/dom';\nimport { ScrollArea, type TScrollAreaFadeFrom } from '@edyn/ui';\nimport { useEffect, useRef } from 'react';\n\nimport type { IRegisterContext } from './registry';\nimport { coerceBool } from './registry';\n\nexport interface IEdxScrollAreaProps {\n orientation?: 'vertical' | 'horizontal' | 'both';\n height?: string;\n width?: string;\n bordered?: boolean;\n type?: 'hover' | 'scroll' | 'always';\n /** Edge fades on the sides that currently hide content. */\n fade?: boolean;\n /** Surface the fades blend into. */\n fadeFrom?: TScrollAreaFadeFrom;\n viewportId?: string;\n /** Current vertical viewport offset exposed as a DOM property. */\n scrollTop?: number;\n /** Current horizontal viewport offset exposed as a DOM property. */\n scrollLeft?: number;\n}\n\nexport const EdxScrollArea = (props: IEdxScrollAreaProps) => {\n const { emit } = useEdxHost();\n const refViewport = useRef<HTMLDivElement | null>(null);\n const style: React.CSSProperties = {};\n if (props.height) {\n style.height = props.height;\n }\n if (props.width) {\n style.width = props.width;\n }\n\n // The border, when requested, has to sit on the same box that carries the\n // height so border-box keeps the outer height fixed. The React component does\n // this by taking `h-32 rounded-md border` together on its root; a custom\n // element's class lands on the host instead, one box outside the sized inner,\n // so a host border is additive (128 + 2px = 130) where React's is absorbed.\n // Apply it to the inner root here to match React exactly. The harness never\n // sets `bordered`, so its border-free parity is untouched.\n const className = props.bordered ? 'w-full rounded-md border border-border' : undefined;\n\n useEffect(() => {\n const viewport = refViewport.current;\n if (!viewport) {\n return;\n }\n const handleScroll = (): void => {\n emit('edx-scroll', { scrollTop: viewport.scrollTop, scrollLeft: viewport.scrollLeft });\n };\n viewport.addEventListener('scroll', handleScroll, { passive: true });\n return () => viewport.removeEventListener('scroll', handleScroll);\n }, [emit]);\n\n return (\n <ScrollArea\n orientation={props.orientation ?? 'vertical'}\n type={props.type}\n fade={props.fade}\n fadeFrom={props.fadeFrom}\n viewportId={props.viewportId}\n viewportRef={refViewport}\n className={className}\n style={style}\n >\n <Slot />\n </ScrollArea>\n );\n};\n\nexport const registerEdxScrollArea = (ctx: IRegisterContext): void => {\n defineElement<IEdxScrollAreaProps>('edx-scroll-area', EdxScrollArea, {\n mode: 'shadow',\n styles: ctx.styles,\n observedAttributes: ['orientation', 'height', 'width', 'bordered', 'type', 'fade', 'fade-from', 'viewport-id'],\n transformProps: (raw) => ({\n orientation: (raw.orientation as IEdxScrollAreaProps['orientation']) ?? undefined,\n height: raw.height ?? undefined,\n width: raw.width ?? undefined,\n bordered: coerceBool(raw.bordered),\n type: (raw.type as IEdxScrollAreaProps['type']) ?? undefined,\n fade: coerceBool(raw.fade),\n fadeFrom: (raw['fade-from'] as TScrollAreaFadeFrom) ?? undefined,\n viewportId: raw['viewport-id'] ?? undefined,\n }),\n domProperties: {\n scrollTop: {\n get: (host) =>\n (\n host.shadowRoot?.querySelector<HTMLElement>('[data-slot=\"scroll-area-viewport\"]') ??\n host.querySelector<HTMLElement>('[data-slot=\"scroll-area-viewport\"]')\n )?.scrollTop ?? 0,\n set: (host, value) => {\n const viewport =\n host.shadowRoot?.querySelector<HTMLElement>('[data-slot=\"scroll-area-viewport\"]') ??\n host.querySelector<HTMLElement>('[data-slot=\"scroll-area-viewport\"]');\n if (viewport) {\n viewport.scrollTop = Number(value) || 0;\n }\n },\n },\n scrollLeft: {\n get: (host) =>\n (\n host.shadowRoot?.querySelector<HTMLElement>('[data-slot=\"scroll-area-viewport\"]') ??\n host.querySelector<HTMLElement>('[data-slot=\"scroll-area-viewport\"]')\n )?.scrollLeft ?? 0,\n set: (host, value) => {\n const viewport =\n host.shadowRoot?.querySelector<HTMLElement>('[data-slot=\"scroll-area-viewport\"]') ??\n host.querySelector<HTMLElement>('[data-slot=\"scroll-area-viewport\"]');\n if (viewport) {\n viewport.scrollLeft = Number(value) || 0;\n }\n },\n },\n },\n });\n};\n","import { defineElement, useEdxHost, usePortalContainer } from '@edyn/dom';\nimport type { TSelectTriggerSize } from '@edyn/ui/components/ui/select';\nimport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from '@edyn/ui/components/ui/select';\nimport type { IRegisterContext } from './registry';\nimport { booleanDomProperty, coerceBool, coerceJson } from './registry';\n\nexport interface ISelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface ISelectOptionGroup {\n label: string;\n items: ISelectOption[];\n}\n\nexport type TSelectOptionEntry = ISelectOption | ISelectOptionGroup;\n\nconst isGroup = (entry: TSelectOptionEntry): entry is ISelectOptionGroup => 'items' in entry && Array.isArray((entry as ISelectOptionGroup).items);\n\nexport interface IEdxSelectProps {\n options?: TSelectOptionEntry[];\n value?: string;\n placeholder?: string;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n name?: string;\n form?: string;\n autoComplete?: string;\n open?: boolean;\n defaultOpen?: boolean;\n modal?: boolean;\n highlightItemOnHover?: boolean;\n size?: TSelectTriggerSize;\n label?: string;\n ariaLabel?: string;\n ariaDescription?: string;\n invalid?: boolean;\n}\n\nconst renderFlatOptions = (items: ISelectOption[]) =>\n items.map((opt) => (\n <SelectItem key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </SelectItem>\n ));\n\nexport const EdxSelect = (props: IEdxSelectProps) => {\n const { emit, host } = useEdxHost();\n const portalContainer = usePortalContainer();\n\n const options = props.options ?? [];\n const hasGroups = options.some(isGroup);\n\n const renderOptions = () => {\n if (!hasGroups) {\n return renderFlatOptions(options as ISelectOption[]);\n }\n\n const nodes: React.ReactNode[] = [];\n options.forEach((entry, idx) => {\n if (isGroup(entry)) {\n if (idx > 0) {\n nodes.push(<SelectSeparator key={`sep-before-${entry.label}`} />);\n }\n nodes.push(\n <SelectGroup key={entry.label}>\n <SelectLabel>{entry.label}</SelectLabel>\n {renderFlatOptions(entry.items)}\n </SelectGroup>,\n );\n } else {\n nodes.push(\n <SelectItem key={(entry as ISelectOption).value} value={(entry as ISelectOption).value}>\n {(entry as ISelectOption).label}\n </SelectItem>,\n );\n }\n });\n return nodes;\n };\n\n // Base UI's placeholder model: the null-valued entry in Root `items` is the\n // placeholder label; SelectValue renders the matching label automatically\n // (it has no placeholder prop of its own).\n const flatten = (entries: TSelectOptionEntry[]): ISelectOption[] =>\n entries.flatMap((entry) => (isGroup(entry) ? entry.items : [entry as ISelectOption]));\n const items: { value: string | null; label: string }[] = [\n { value: null, label: props.placeholder ?? 'Select...' },\n ...flatten(options).map((opt) => ({ value: opt.value as string | null, label: opt.label })),\n ];\n\n return (\n <Select\n items={items}\n // Empty string from an unset host model must map to null so it matches the\n // placeholder item; `?? null` would keep '' and hide the placeholder.\n value={props.value || null}\n disabled={props.disabled ?? false}\n readOnly={props.readonly ?? false}\n required={props.required ?? false}\n name={props.name}\n form={props.form}\n autoComplete={props.autoComplete}\n open={props.open ?? props.defaultOpen ?? false}\n modal={props.modal ?? true}\n highlightItemOnHover={props.highlightItemOnHover ?? true}\n onOpenChange={(open) => {\n host.removeAttribute('default-open');\n if (open) {\n host.setAttribute('open', 'true');\n } else {\n host.removeAttribute('open');\n }\n emit('edx-open-change', { open });\n }}\n onValueChange={(next) => {\n const value = next === null ? '' : String(next);\n host.setAttribute('value', value);\n emit('edx-change', { value });\n }}\n >\n {/* Base UI hides the Value span from the a11y tree; the trigger's name\n must come from a label association, so standalone usage needs aria-label. */}\n <SelectTrigger\n size={props.size ?? 'default'}\n disabled={props.disabled ?? false}\n aria-label={props.ariaLabel ?? props.label ?? props.placeholder ?? 'Select an option'}\n aria-description={props.ariaDescription}\n aria-invalid={props.invalid || undefined}\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent portalContainer={portalContainer ?? undefined}>{renderOptions()}</SelectContent>\n </Select>\n );\n};\n\nexport const registerEdxSelect = (ctx: IRegisterContext): void => {\n defineElement<IEdxSelectProps>('edx-select', EdxSelect, {\n mode: ctx.mode,\n styles: ctx.styles,\n // The trigger is w-full, so the host must be block-level to fill its container\n // (matching the React Select). inline-flex shrank it to content in the demos.\n display: 'block',\n // <label for=\"edx-select-id\"> routes activation to the host; forward it to the\n // trigger button so clicking a label opens the select (mirrors edx-input).\n delegateClick: true,\n formAssociated: true,\n formValue: (props) => props.value ?? '',\n observedAttributes: [\n 'options',\n 'value',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'required',\n 'name',\n 'form',\n 'autocomplete',\n 'open',\n 'default-open',\n 'modal',\n 'highlight-item-on-hover',\n 'size',\n 'label',\n 'aria-label',\n 'aria-description',\n 'invalid',\n ],\n transformProps: (raw) => ({\n options: coerceJson<TSelectOptionEntry[]>(raw.options),\n value: raw.value ?? undefined,\n placeholder: raw.placeholder ?? undefined,\n disabled: coerceBool(raw.disabled),\n readonly: coerceBool(raw.readonly),\n required: coerceBool(raw.required),\n name: raw.name ?? undefined,\n form: raw.form ?? undefined,\n autoComplete: raw.autocomplete ?? undefined,\n open: raw.open == null ? undefined : coerceBool(raw.open),\n defaultOpen: raw['default-open'] == null ? undefined : coerceBool(raw['default-open']),\n modal: raw.modal == null ? undefined : coerceBool(raw.modal),\n highlightItemOnHover: raw['highlight-item-on-hover'] == null ? undefined : coerceBool(raw['highlight-item-on-hover']),\n size: (raw.size as TSelectTriggerSize) ?? undefined,\n label: raw.label ?? undefined,\n ariaLabel: raw['aria-label'] ?? undefined,\n ariaDescription: raw['aria-description'] ?? undefined,\n invalid: coerceBool(raw.invalid),\n }),\n domProperties: {\n value: {\n get: (host) => host.getAttribute('value') ?? '',\n set: (host, value) => {\n host.setAttribute('value', String(value ?? ''));\n },\n },\n open: booleanDomProperty('open', 'default-open'),\n },\n });\n};\n","import { defineElement } from '@edyn/dom';\nimport { Separator } from '@edyn/ui';\n\nimport type { ComponentProps } from 'react';\nimport type { IRegisterContext } from './registry';\n\ntype TSeparatorOrientation = ComponentProps<typeof Separator>['orientation'];\n\nexport interface IEdxSeparatorProps {\n orientation?: TSeparatorOrientation;\n}\n\nexport const EdxSeparator = (props: IEdxSeparatorProps) => {\n return <Separator orientation={props.orientation ?? 'horizontal'} />;\n};\n\nexport const registerEdxSeparator = (ctx: IRegisterContext): void => {\n defineElement<IEdxSeparatorProps>('edx-separator', EdxSeparator, {\n mode: ctx.mode,\n styles: ctx.styles,\n observedAttributes: ['orientation'],\n transformProps: (raw) => ({\n orientation: (raw.orientation ?? undefined) as TSeparatorOrientation,\n }),\n });\n};\n","import { defineElement } from '@edyn/dom';\nimport { Skeleton } from '@edyn/ui';\nimport { cn } from '@edyn/ui/lib/utils';\n\nimport type { ComponentProps } from 'react';\nimport type { IRegisterContext } from './registry';\n\nexport interface IEdxSkeletonProps {\n class?: ComponentProps<typeof Skeleton>['className'];\n}\n\nexport const EdxSkeleton = (props: IEdxSkeletonProps) => {\n // Layout classes belong to the custom-element host. Reapplying percentage\n // widths to this inner node multiplies them (w-3/4 becomes 56.25%). Keep the\n // visual surface full-size and only forward radius overrides.\n const radiusClasses = props.class\n ?.split(/\\s+/)\n .filter((className) => className === 'rounded' || className.startsWith('rounded-'))\n .join(' ');\n\n return <Skeleton className={cn('size-full', radiusClasses)} />;\n};\n\nexport const registerEdxSkeleton = (ctx: IRegisterContext): void => {\n defineElement<IEdxSkeletonProps>('edx-skeleton', EdxSkeleton, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'block',\n observedAttributes: ['class'],\n transformProps: (raw) => ({\n class: raw.class ?? undefined,\n }),\n });\n};\n","import { defineElement, useEdxHost } from '@edyn/dom';\nimport { Slider } from '@edyn/ui';\nimport type { IRegisterContext } from './registry';\nimport { coerceBool, coerceJson, coerceNumber, multipleFormValue } from './registry';\n\nexport type TEdxSliderValue = number | number[];\n\nconst parseSliderValue = (raw: string | null | undefined): TEdxSliderValue | undefined => {\n const range = coerceJson<unknown>(raw);\n if (Array.isArray(range) && range.length > 0 && range.every((item) => typeof item === 'number' && Number.isFinite(item))) {\n return range;\n }\n return coerceNumber(raw);\n};\n\nconst serializeSliderValue = (value: TEdxSliderValue): string => {\n return Array.isArray(value) ? JSON.stringify(value) : String(value);\n};\n\nexport interface IEdxSliderProps {\n value?: TEdxSliderValue;\n defaultValue?: TEdxSliderValue;\n min?: number;\n max?: number;\n step?: number;\n minStepsBetweenValues?: number;\n disabled?: boolean;\n invalid?: boolean;\n name?: string;\n ariaLabel?: string;\n ariaDescription?: string;\n}\n\nexport const EdxSlider = (props: IEdxSliderProps) => {\n const { emit, host } = useEdxHost();\n\n return (\n <Slider\n value={props.value}\n defaultValue={props.defaultValue}\n min={props.min}\n max={props.max}\n step={props.step}\n minStepsBetweenValues={props.minStepsBetweenValues}\n disabled={props.disabled ?? false}\n aria-invalid={props.invalid || undefined}\n name={props.name}\n aria-label={props.ariaLabel}\n aria-description={props.ariaDescription}\n onValueChange={(next) => {\n const value = Array.isArray(next) ? [...next] : Number(next);\n host.removeAttribute('default-value');\n host.setAttribute('value', serializeSliderValue(value));\n emit('edx-input', { value });\n }}\n onValueCommitted={(next) => {\n const value = Array.isArray(next) ? [...next] : Number(next);\n host.removeAttribute('default-value');\n host.setAttribute('value', serializeSliderValue(value));\n emit('edx-change', { value });\n }}\n />\n );\n};\n\nexport const registerEdxSlider = (ctx: IRegisterContext): void => {\n defineElement<IEdxSliderProps>('edx-slider', EdxSlider, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'block',\n delegateClick: true,\n formAssociated: true,\n formValue: (props, host) => {\n const value = props.value ?? props.defaultValue;\n if (Array.isArray(value)) {\n return multipleFormValue(\n host,\n value.map((item) => String(item)),\n );\n }\n return value == null ? null : String(value);\n },\n observedAttributes: [\n 'value',\n 'default-value',\n 'min',\n 'max',\n 'step',\n 'min-steps-between-values',\n 'disabled',\n 'invalid',\n 'name',\n 'aria-label',\n 'aria-description',\n ],\n transformProps: (raw) => ({\n value: parseSliderValue(raw.value),\n defaultValue: parseSliderValue(raw['default-value']),\n min: coerceNumber(raw.min),\n max: coerceNumber(raw.max),\n step: coerceNumber(raw.step),\n minStepsBetweenValues: coerceNumber(raw['min-steps-between-values']),\n disabled: coerceBool(raw.disabled),\n invalid: coerceBool(raw.invalid),\n name: raw.name ?? undefined,\n ariaLabel: raw['aria-label'] ?? undefined,\n ariaDescription: raw['aria-description'] ?? undefined,\n }),\n domProperties: {\n value: {\n get: (host) => {\n return parseSliderValue(host.getAttribute('value')) ?? parseSliderValue(host.getAttribute('default-value'));\n },\n set: (host, value) => {\n if (Array.isArray(value)) {\n host.setAttribute('value', JSON.stringify(value));\n } else {\n host.setAttribute('value', String(value ?? ''));\n }\n },\n },\n },\n });\n};\n","import { defineElement, useEdxHost } from '@edyn/dom';\nimport { Switch } from '@edyn/ui';\nimport type { IRegisterContext } from './registry';\nimport { booleanDomProperty, coerceBool } from './registry';\n\nexport interface IEdxSwitchProps {\n checked?: boolean;\n defaultChecked?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n name?: string;\n form?: string;\n value?: string;\n uncheckedValue?: string;\n size?: 'sm' | 'default';\n invalid?: boolean;\n ariaLabel?: string;\n ariaDescription?: string;\n}\n\nexport const EdxSwitch = (props: IEdxSwitchProps) => {\n const { emit, host } = useEdxHost();\n\n return (\n <Switch\n checked={props.checked ?? props.defaultChecked ?? false}\n disabled={props.disabled ?? false}\n readOnly={props.readonly ?? false}\n required={props.required ?? false}\n name={props.name}\n form={props.form}\n value={props.value}\n uncheckedValue={props.uncheckedValue}\n size={props.size ?? 'default'}\n aria-invalid={props.invalid || undefined}\n aria-label={props.ariaLabel}\n aria-description={props.ariaDescription}\n onCheckedChange={(next) => {\n const checked = next === true;\n host.removeAttribute('default-checked');\n if (checked) {\n host.setAttribute('checked', 'true');\n } else {\n host.removeAttribute('checked');\n }\n emit('edx-change', { checked });\n }}\n />\n );\n};\n\nexport const registerEdxSwitch = (ctx: IRegisterContext): void => {\n defineElement<IEdxSwitchProps>('edx-switch', EdxSwitch, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'inline-flex',\n delegateClick: true,\n formAssociated: true,\n formValue: (props) => {\n const checked = props.checked ?? props.defaultChecked ?? false;\n return checked ? (props.value ?? 'on') : (props.uncheckedValue ?? null);\n },\n observedAttributes: [\n 'checked',\n 'default-checked',\n 'disabled',\n 'readonly',\n 'required',\n 'name',\n 'form',\n 'value',\n 'unchecked-value',\n 'size',\n 'invalid',\n 'aria-label',\n 'aria-description',\n ],\n transformProps: (raw) => ({\n checked: raw.checked == null ? undefined : coerceBool(raw.checked),\n defaultChecked: raw['default-checked'] == null ? undefined : coerceBool(raw['default-checked']),\n disabled: coerceBool(raw.disabled),\n readonly: coerceBool(raw.readonly),\n required: coerceBool(raw.required),\n name: raw.name ?? undefined,\n form: raw.form ?? undefined,\n value: raw.value ?? undefined,\n uncheckedValue: raw['unchecked-value'] ?? undefined,\n size: (raw.size as IEdxSwitchProps['size']) ?? undefined,\n invalid: coerceBool(raw.invalid),\n ariaLabel: raw['aria-label'] ?? undefined,\n ariaDescription: raw['aria-description'] ?? undefined,\n }),\n // Expose `.checked` as a real JS property so Angular CVA and other hosts\n // ng-model bridges can read and write the boolean value directly without\n // going through setAttribute (which only accepts strings).\n domProperties: {\n checked: booleanDomProperty('checked', 'default-checked'),\n },\n });\n};\n","import { defineElement } from '@edyn/dom';\nimport { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from '@edyn/ui';\nimport type { IRegisterContext } from './registry';\nimport { coerceJson } from './registry';\n\nexport interface IEdxTableColumn {\n key: string;\n header: string;\n align?: 'left' | 'center' | 'right';\n}\n\nexport interface IEdxTableProps {\n columns?: IEdxTableColumn[];\n rows?: Array<Record<string, string | number>>;\n caption?: string;\n}\n\n/** Map a column alignment to the Tailwind class shared by the header and its cells. */\nconst alignClass = (align: IEdxTableColumn['align']): string | undefined => {\n if (align === 'center') {\n return 'text-center';\n }\n if (align === 'right') {\n return 'text-right';\n }\n return undefined;\n};\n\nexport const EdxTable = (props: IEdxTableProps) => {\n const columns = props.columns ?? [];\n const rows = props.rows ?? [];\n\n return (\n <Table>\n {props.caption ? <TableCaption>{props.caption}</TableCaption> : null}\n <TableHeader>\n <TableRow>\n {columns.map((col) => (\n <TableHead key={col.key} className={alignClass(col.align)}>\n {col.header}\n </TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map((row, rowIndex) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: rows are static, display-only data (no reordering, insertion, or per-row state), so the index is a stable key\n <TableRow key={rowIndex}>\n {columns.map((col) => (\n <TableCell key={col.key} className={alignClass(col.align)}>\n {row[col.key] ?? ''}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n};\n\nexport const registerEdxTable = (ctx: IRegisterContext): void => {\n // Display-only data container: renders a styled table from `columns` + `rows`\n // JSON attributes. No value/change and not form-associated. Rich, interactive\n // grids (sorting, selection, virtualization) are a deferred TanStack DataTable\n // spike, not this element.\n defineElement<IEdxTableProps>('edx-table', EdxTable, {\n mode: ctx.mode,\n styles: ctx.styles,\n observedAttributes: ['columns', 'rows', 'caption'],\n transformProps: (raw) => ({\n columns: coerceJson<IEdxTableColumn[]>(raw.columns) ?? [],\n rows: coerceJson<Array<Record<string, string | number>>>(raw.rows) ?? [],\n caption: raw.caption ?? undefined,\n }),\n });\n};\n","import { defineElement, Slot, useEdxHost } from '@edyn/dom';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from '@edyn/ui';\nimport type { IRegisterContext } from './registry';\nimport { coerceJson } from './registry';\n\nexport interface ITabItem {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface IEdxTabsProps {\n tabs?: ITabItem[];\n value?: string;\n defaultTab?: string;\n variant?: 'default' | 'line';\n orientation?: 'horizontal' | 'vertical';\n}\n\nexport const EdxTabs = (props: IEdxTabsProps) => {\n const { emit, host } = useEdxHost();\n\n const items = props.tabs ?? [];\n const firstValue = items[0]?.value ?? '';\n const currentValue = props.value ?? props.defaultTab ?? firstValue;\n\n return (\n <Tabs\n value={currentValue}\n orientation={props.orientation ?? 'horizontal'}\n onValueChange={(next) => {\n host.setAttribute('value', next);\n emit('edx-change', { value: next });\n }}\n >\n <TabsList variant={props.variant ?? 'default'}>\n {items.map((item) => (\n <TabsTrigger key={item.value} value={item.value} disabled={item.disabled}>\n {item.label}\n </TabsTrigger>\n ))}\n </TabsList>\n {items.map((item) => (\n <TabsContent key={item.value} value={item.value} keepMounted>\n <Slot name={`panel-${item.value}`} />\n </TabsContent>\n ))}\n </Tabs>\n );\n};\n\nexport const registerEdxTabs = (ctx: IRegisterContext): void => {\n defineElement<IEdxTabsProps>('edx-tabs', EdxTabs, {\n mode: 'shadow',\n styles: ctx.styles,\n observedAttributes: ['tabs', 'value', 'default-tab', 'variant', 'orientation'],\n transformProps: (raw) => ({\n tabs: coerceJson<ITabItem[]>(raw.tabs),\n value: raw.value ?? undefined,\n defaultTab: raw['default-tab'] ?? undefined,\n variant: (raw.variant as IEdxTabsProps['variant']) ?? undefined,\n orientation: (raw.orientation as IEdxTabsProps['orientation']) ?? undefined,\n }),\n domProperties: {\n value: {\n get: (host) => {\n const explicitValue = host.getAttribute('value');\n if (explicitValue != null) {\n return explicitValue;\n }\n const defaultTab = host.getAttribute('default-tab');\n if (defaultTab != null) {\n return defaultTab;\n }\n return coerceJson<ITabItem[]>(host.getAttribute('tabs'))?.[0]?.value ?? '';\n },\n set: (host, value) => {\n host.setAttribute('value', String(value ?? ''));\n },\n },\n },\n });\n};\n","import { defineElement, useEdxHost } from '@edyn/dom';\nimport { Textarea } from '@edyn/ui';\nimport type { ComponentProps } from 'react';\nimport type { IRegisterContext } from './registry';\nimport { coerceBool, coerceNumber } from './registry';\n\ntype TNativeTextareaProps = ComponentProps<'textarea'>;\n\nexport interface IEdxTextareaProps {\n value?: string;\n placeholder?: string;\n disabled?: boolean;\n readonly?: boolean;\n required?: boolean;\n rows?: number;\n invalid?: boolean;\n name?: string;\n form?: string;\n autoComplete?: string;\n minLength?: number;\n maxLength?: number;\n wrap?: TNativeTextareaProps['wrap'];\n spellCheck?: boolean;\n autoFocus?: boolean;\n ariaLabel?: string;\n ariaDescription?: string;\n}\n\nexport const EdxTextarea = (props: IEdxTextareaProps) => {\n const { emit, host } = useEdxHost();\n\n return (\n <Textarea\n value={props.value ?? ''}\n placeholder={props.placeholder}\n disabled={props.disabled ?? false}\n readOnly={props.readonly ?? false}\n required={props.required ?? false}\n rows={props.rows}\n aria-invalid={props.invalid || undefined}\n name={props.name}\n form={props.form}\n autoComplete={props.autoComplete}\n minLength={props.minLength}\n maxLength={props.maxLength}\n wrap={props.wrap}\n spellCheck={props.spellCheck}\n autoFocus={props.autoFocus}\n aria-label={props.ariaLabel}\n aria-description={props.ariaDescription}\n onChange={(event) => {\n const { value } = event.target;\n host.setAttribute('value', value);\n emit('edx-change', { value });\n }}\n />\n );\n};\n\nexport const registerEdxTextarea = (ctx: IRegisterContext): void => {\n defineElement<IEdxTextareaProps>('edx-textarea', EdxTextarea, {\n mode: ctx.mode,\n styles: ctx.styles,\n // flex, not block: the inline-block textarea inside a block host would add\n // a baseline strut from the host line-height (same trap as edx-label).\n display: 'flex',\n delegateClick: true,\n formAssociated: true,\n formValue: (props) => props.value ?? '',\n observedAttributes: [\n 'value',\n 'placeholder',\n 'disabled',\n 'readonly',\n 'required',\n 'rows',\n 'invalid',\n 'name',\n 'form',\n 'autocomplete',\n 'minlength',\n 'maxlength',\n 'wrap',\n 'spellcheck',\n 'autofocus',\n 'aria-label',\n 'aria-description',\n ],\n transformProps: (raw) => ({\n value: raw.value ?? undefined,\n placeholder: raw.placeholder ?? undefined,\n disabled: coerceBool(raw.disabled),\n readonly: coerceBool(raw.readonly),\n required: coerceBool(raw.required),\n rows: coerceNumber(raw.rows),\n invalid: coerceBool(raw.invalid),\n name: raw.name ?? undefined,\n form: raw.form ?? undefined,\n autoComplete: raw.autocomplete ?? undefined,\n minLength: coerceNumber(raw.minlength),\n maxLength: coerceNumber(raw.maxlength),\n wrap: (raw.wrap as TNativeTextareaProps['wrap']) ?? undefined,\n spellCheck: raw.spellcheck == null ? undefined : coerceBool(raw.spellcheck),\n autoFocus: coerceBool(raw.autofocus),\n ariaLabel: raw['aria-label'] ?? undefined,\n ariaDescription: raw['aria-description'] ?? undefined,\n }),\n domProperties: {\n value: {\n get: (host) => host.getAttribute('value') ?? '',\n set: (host, value) => {\n host.setAttribute('value', String(value ?? ''));\n },\n },\n },\n });\n};\n","import { defineElement, Slot, useEdxHost } from '@edyn/dom';\nimport { Toggle, type TToggleVariants } from '@edyn/ui';\nimport type { IRegisterContext } from './registry';\nimport { booleanDomProperty, coerceBool } from './registry';\n\nexport interface IEdxToggleProps {\n pressed?: boolean;\n defaultPressed?: boolean;\n disabled?: boolean;\n value?: string;\n variant?: TToggleVariants['variant'];\n size?: TToggleVariants['size'];\n ariaLabel?: string;\n ariaDescription?: string;\n name?: string;\n form?: string;\n type?: 'button' | 'submit' | 'reset';\n autofocus?: boolean;\n}\n\nexport const EdxToggle = (props: IEdxToggleProps) => {\n const { emit, host } = useEdxHost();\n\n return (\n <Toggle\n pressed={props.pressed ?? props.defaultPressed ?? false}\n disabled={props.disabled ?? false}\n value={props.value}\n variant={props.variant ?? 'default'}\n size={props.size ?? 'default'}\n aria-label={props.ariaLabel}\n aria-description={props.ariaDescription}\n name={props.name}\n form={props.form}\n type={props.type ?? 'button'}\n autoFocus={props.autofocus}\n onPressedChange={(next) => {\n const pressed = next === true;\n host.removeAttribute('default-pressed');\n if (pressed) {\n host.setAttribute('pressed', 'true');\n } else {\n host.removeAttribute('pressed');\n }\n emit('edx-change', { pressed });\n }}\n >\n <Slot />\n </Toggle>\n );\n};\n\nexport const registerEdxToggle = (ctx: IRegisterContext): void => {\n defineElement<IEdxToggleProps>('edx-toggle', EdxToggle, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'inline-flex',\n delegateClick: true,\n observedAttributes: [\n 'pressed',\n 'default-pressed',\n 'disabled',\n 'value',\n 'variant',\n 'size',\n 'aria-label',\n 'aria-description',\n 'name',\n 'form',\n 'type',\n 'autofocus',\n ],\n transformProps: (raw) => ({\n pressed: raw.pressed == null ? undefined : coerceBool(raw.pressed),\n defaultPressed: raw['default-pressed'] == null ? undefined : coerceBool(raw['default-pressed']),\n disabled: coerceBool(raw.disabled),\n value: raw.value ?? undefined,\n variant: (raw.variant ?? undefined) as IEdxToggleProps['variant'],\n size: (raw.size ?? undefined) as IEdxToggleProps['size'],\n ariaLabel: raw['aria-label'] ?? undefined,\n ariaDescription: raw['aria-description'] ?? undefined,\n name: raw.name ?? undefined,\n form: raw.form ?? undefined,\n type: (raw.type as IEdxToggleProps['type']) ?? undefined,\n autofocus: coerceBool(raw.autofocus),\n }),\n domProperties: {\n pressed: booleanDomProperty('pressed', 'default-pressed'),\n },\n });\n};\n","import { defineElement, useEdxHost } from '@edyn/dom';\nimport { ToggleGroup, ToggleGroupItem } from '@edyn/ui';\nimport type { IRegisterContext } from './registry';\nimport { coerceBool, coerceJson, multipleFormValue } from './registry';\n\ntype TVariant = 'default' | 'outline';\ntype TSize = 'sm' | 'default' | 'lg';\n\ninterface IToggleOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface IEdxToggleGroupProps {\n options?: IToggleOption[];\n value?: string | string[];\n defaultValue?: string | string[];\n multiple?: boolean;\n variant?: TVariant;\n size?: TSize;\n disabled?: boolean;\n orientation?: 'horizontal' | 'vertical';\n spacing?: number;\n loopFocus?: boolean;\n name?: string;\n invalid?: boolean;\n ariaLabel?: string;\n ariaDescription?: string;\n}\n\nexport const EdxToggleGroup = (props: IEdxToggleGroupProps) => {\n const { emit, host } = useEdxHost();\n\n const options = props.options ?? [];\n const multiple = props.multiple ?? false;\n const variant = props.variant ?? 'default';\n const size = props.size ?? 'default';\n const disabled = props.disabled ?? false;\n const orientation = props.orientation ?? 'horizontal';\n const spacing = props.spacing ?? 2;\n\n const rawValue = props.value ?? props.defaultValue;\n const groupValue: string[] = (() => {\n if (rawValue == null) {\n return [];\n }\n if (Array.isArray(rawValue)) {\n return rawValue;\n }\n return [rawValue];\n })();\n\n const handleValueChange = (next: string[]) => {\n const emitValue = multiple ? next : (next[0] ?? '');\n const serialized = multiple ? JSON.stringify(next) : (next[0] ?? '');\n host.removeAttribute('default-value');\n host.setAttribute('value', serialized);\n emit('edx-change', { value: emitValue });\n };\n\n return (\n <ToggleGroup\n value={groupValue}\n multiple={multiple}\n variant={variant}\n size={size}\n disabled={disabled}\n orientation={orientation}\n spacing={spacing}\n loopFocus={props.loopFocus ?? true}\n aria-invalid={props.invalid || undefined}\n aria-label={props.ariaLabel}\n aria-description={props.ariaDescription}\n onValueChange={handleValueChange}\n >\n {options.map((opt) => (\n <ToggleGroupItem key={opt.value} value={opt.value} disabled={opt.disabled}>\n {opt.label}\n </ToggleGroupItem>\n ))}\n </ToggleGroup>\n );\n};\n\nexport const registerEdxToggleGroup = (ctx: IRegisterContext): void => {\n defineElement<IEdxToggleGroupProps>('edx-toggle-group', EdxToggleGroup, {\n mode: ctx.mode,\n styles: ctx.styles,\n // React ToggleGroup is `flex` (block-level, its own row); the host must be\n // block-level too, or inline-flex puts it on the same line as an adjacent\n // element (the harness has one element per cell so it never caught this).\n display: 'block',\n formAssociated: true,\n formValue: (props, host) => {\n const value = props.value ?? props.defaultValue;\n if (Array.isArray(value)) {\n return multipleFormValue(host, value);\n }\n return value ?? null;\n },\n observedAttributes: [\n 'options',\n 'value',\n 'default-value',\n 'multiple',\n 'variant',\n 'size',\n 'disabled',\n 'orientation',\n 'spacing',\n 'loop-focus',\n 'name',\n 'invalid',\n 'aria-label',\n 'aria-description',\n ],\n transformProps: (raw) => {\n const options = coerceJson<IToggleOption[]>(raw.options) ?? [];\n const multiple = coerceBool(raw.multiple);\n\n const parseValue = (input: string | null | undefined): string | string[] | undefined => {\n if (input == null) {\n return undefined;\n }\n if (input === '') {\n return multiple ? [] : '';\n }\n if (multiple) {\n return coerceJson<string[]>(input) ?? [input];\n }\n return input;\n };\n\n return {\n options,\n value: parseValue(raw.value),\n defaultValue: parseValue(raw['default-value']),\n multiple,\n variant: (raw.variant as TVariant | undefined) ?? undefined,\n size: (raw.size as TSize | undefined) ?? undefined,\n disabled: coerceBool(raw.disabled),\n orientation: (raw.orientation as IEdxToggleGroupProps['orientation']) ?? undefined,\n spacing: raw.spacing == null ? undefined : Number(raw.spacing),\n loopFocus: raw['loop-focus'] == null ? undefined : coerceBool(raw['loop-focus']),\n name: raw.name ?? undefined,\n invalid: coerceBool(raw.invalid),\n ariaLabel: raw['aria-label'] ?? undefined,\n ariaDescription: raw['aria-description'] ?? undefined,\n };\n },\n domProperties: {\n value: {\n // In multiple mode the attribute carries JSON; the JS property speaks\n // real arrays so Angular CVA and other host models round-trip unchanged.\n get: (host) => {\n const raw = host.getAttribute('value') ?? host.getAttribute('default-value') ?? '';\n if (host.hasAttribute('multiple')) {\n return coerceJson<string[]>(raw) ?? (raw === '' ? [] : [raw]);\n }\n return raw;\n },\n set: (host, value) => {\n if (Array.isArray(value)) {\n host.setAttribute('multiple', '');\n host.setAttribute('value', JSON.stringify(value));\n return;\n }\n host.setAttribute('value', String(value ?? ''));\n },\n },\n },\n });\n};\n","import { useEdxHost } from '@edyn/dom';\nimport { Button, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@edyn/ui';\n\nimport type { IRegisterContext } from './registry';\nimport { booleanDomProperty, coerceBool, coerceNumber, reflectBool, registerOverlayElement } from './registry';\n\ntype TTooltipSide = 'top' | 'right' | 'bottom' | 'left';\ntype TTooltipAlign = 'start' | 'center' | 'end';\n\nexport interface IEdxTooltipProps {\n triggerLabel?: string;\n content?: string;\n side?: TTooltipSide;\n align?: TTooltipAlign;\n sideOffset?: number;\n alignOffset?: number;\n open?: boolean;\n defaultOpen?: boolean;\n delay?: number;\n closeDelay?: number;\n disabled?: boolean;\n closeOnClick?: boolean;\n disableHoverablePopup?: boolean;\n trackCursorAxis?: 'none' | 'x' | 'y' | 'both';\n}\n\n/**\n * Hover/focus overlay, the same light-mode pattern as edx-dialog and edx-drawer\n * (registered via registerOverlayElement, which pins mode:'light' so the Base UI\n * portal can land in document.body). Content is fully attribute-driven (no\n * `<Slot />`): a tooltip's popup body is short label text, not arbitrary markup.\n */\nexport const EdxTooltip = (props: IEdxTooltipProps) => {\n const { emit, host } = useEdxHost();\n\n return (\n <TooltipProvider delay={props.delay} closeDelay={props.closeDelay}>\n <Tooltip\n open={props.open ?? props.defaultOpen ?? false}\n disabled={props.disabled}\n disableHoverablePopup={props.disableHoverablePopup}\n trackCursorAxis={props.trackCursorAxis === 'none' ? undefined : props.trackCursorAxis}\n onOpenChange={(open) => {\n host.removeAttribute('default-open');\n reflectBool(host, 'open', open);\n emit('edx-change', { open });\n }}\n >\n <TooltipTrigger render={<Button variant=\"outline\" />} closeDelay={props.closeDelay} closeOnClick={props.closeOnClick ?? true}>\n {props.triggerLabel ?? 'Hover'}\n </TooltipTrigger>\n <TooltipContent side={props.side ?? 'top'} align={props.align ?? 'center'} sideOffset={props.sideOffset ?? 4} alignOffset={props.alignOffset}>\n {props.content ?? ''}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n};\n\nexport const registerEdxTooltip = (ctx: IRegisterContext): void => {\n registerOverlayElement<IEdxTooltipProps>('edx-tooltip', EdxTooltip, ctx, {\n display: 'inline-flex',\n observedAttributes: [\n 'trigger-label',\n 'content',\n 'side',\n 'align',\n 'side-offset',\n 'align-offset',\n 'open',\n 'default-open',\n 'delay',\n 'close-delay',\n 'disabled',\n 'close-on-click',\n 'disable-hoverable-popup',\n 'track-cursor-axis',\n ],\n transformProps: (raw) => ({\n triggerLabel: raw['trigger-label'] ?? undefined,\n content: raw.content ?? undefined,\n side: (raw.side as TTooltipSide | null) ?? undefined,\n align: (raw.align as TTooltipAlign | null) ?? undefined,\n sideOffset: coerceNumber(raw['side-offset']),\n alignOffset: coerceNumber(raw['align-offset']),\n open: raw.open == null ? undefined : coerceBool(raw.open),\n defaultOpen: raw['default-open'] == null ? undefined : coerceBool(raw['default-open']),\n delay: coerceNumber(raw.delay),\n closeDelay: coerceNumber(raw['close-delay']),\n disabled: raw.disabled == null ? undefined : coerceBool(raw.disabled),\n closeOnClick: raw['close-on-click'] == null ? undefined : coerceBool(raw['close-on-click']),\n disableHoverablePopup: raw['disable-hoverable-popup'] == null ? undefined : coerceBool(raw['disable-hoverable-popup']),\n trackCursorAxis: (raw['track-cursor-axis'] as IEdxTooltipProps['trackCursorAxis']) ?? undefined,\n }),\n domProperties: { open: booleanDomProperty('open', 'default-open') },\n });\n};\n","import { defineElement, useEdxHost } from '@edyn/dom';\nimport { VideoPlayer } from '@edyn/ui';\n\nimport type { IRegisterContext } from './registry';\nimport { coerceBool } from './registry';\n\nexport interface IEdxVideoPlayerProps {\n src?: string;\n poster?: string;\n title?: string;\n description?: string;\n muted?: boolean;\n loop?: boolean;\n disabled?: boolean;\n width?: string;\n height?: string;\n ratio?: string;\n ariaLabel?: string;\n}\n\nexport const EdxVideoPlayer = (props: IEdxVideoPlayerProps) => {\n const { emit } = useEdxHost();\n\n return (\n <VideoPlayer\n src={props.src}\n poster={props.poster}\n title={props.title}\n description={props.description}\n muted={props.muted ?? false}\n loop={props.loop ?? false}\n disabled={props.disabled ?? false}\n width={props.width}\n height={props.height}\n ratio={props.ratio}\n aria-label={props.ariaLabel ?? 'Video player'}\n onPlay={() => emit('edx-play', {})}\n onPause={() => emit('edx-pause', {})}\n onEnded={() => emit('edx-ended', {})}\n onTimeUpdate={(currentTime, duration) => emit('edx-timeupdate', { currentTime, duration })}\n />\n );\n};\n\nexport const registerEdxVideoPlayer = (ctx: IRegisterContext): void => {\n defineElement<IEdxVideoPlayerProps>('edx-video-player', EdxVideoPlayer, {\n mode: ctx.mode,\n styles: ctx.styles,\n display: 'block',\n observedAttributes: ['src', 'poster', 'title', 'description', 'muted', 'loop', 'disabled', 'width', 'height', 'ratio', 'aria-label'],\n transformProps: (raw) => ({\n src: raw.src ?? undefined,\n poster: raw.poster ?? undefined,\n title: raw.title ?? undefined,\n description: raw.description ?? undefined,\n muted: coerceBool(raw.muted),\n loop: coerceBool(raw.loop),\n disabled: coerceBool(raw.disabled),\n width: raw.width ?? undefined,\n height: raw.height ?? undefined,\n ratio: raw.ratio ?? undefined,\n ariaLabel: raw['aria-label'] ?? undefined,\n }),\n });\n};\n","import type { TDomMode } from '@edyn/dom';\nimport { registerEdxAccordion } from './edx-accordion';\nimport { registerEdxAlert } from './edx-alert';\nimport { registerEdxAudioPlayer } from './edx-audio-player';\nimport { registerEdxAvatar } from './edx-avatar';\nimport { registerEdxBadge } from './edx-badge';\nimport { registerEdxBreadcrumb } from './edx-breadcrumb';\nimport { registerEdxButton } from './edx-button';\nimport { registerEdxButtonGroup } from './edx-button-group';\nimport { registerEdxCalendar } from './edx-calendar';\nimport { registerEdxCard } from './edx-card';\nimport { registerEdxCheckbox } from './edx-checkbox';\nimport { registerEdxCombobox } from './edx-combobox';\nimport { registerEdxContentComponents } from './edx-content-components';\nimport { registerEdxDialog } from './edx-dialog';\nimport { registerEdxDrawer } from './edx-drawer';\nimport { registerEdxDropdownMenu } from './edx-dropdown-menu';\nimport { registerEdxField } from './edx-field';\nimport { registerEdxIndicator } from './edx-indicator';\nimport { registerEdxInput } from './edx-input';\nimport { registerEdxInputGroup } from './edx-input-group';\nimport { registerEdxInputOtp } from './edx-input-otp';\nimport { registerEdxInteractiveComponents } from './edx-interactive-components';\nimport { registerEdxLabel } from './edx-label';\nimport { registerEdxPagination } from './edx-pagination';\nimport { registerEdxPopover } from './edx-popover';\nimport { registerEdxProgress } from './edx-progress';\nimport { registerEdxRadioGroup } from './edx-radio-group';\nimport { registerEdxScrollArea } from './edx-scroll-area';\nimport { registerEdxSelect } from './edx-select';\nimport { registerEdxSeparator } from './edx-separator';\nimport { registerEdxSkeleton } from './edx-skeleton';\nimport { registerEdxSlider } from './edx-slider';\nimport { registerEdxSwitch } from './edx-switch';\nimport { registerEdxTable } from './edx-table';\nimport { registerEdxTabs } from './edx-tabs';\nimport { registerEdxTextarea } from './edx-textarea';\nimport { registerEdxToggle } from './edx-toggle';\nimport { registerEdxToggleGroup } from './edx-toggle-group';\nimport { registerEdxTooltip } from './edx-tooltip';\nimport { registerEdxVideoPlayer } from './edx-video-player';\nimport type { IRegisterContext } from './registry';\n\nexport type { IRegisterContext } from './registry';\nexport { coerceBool, coerceJson, coerceNumber } from './registry';\n\nexport interface IRegisterOptions {\n /** Force a DOM mode for all elements. Omit to use the global default. */\n mode?: TDomMode;\n /** Compiled CSS adopted into shadow roots (shadow mode only). */\n styles?: string;\n}\n\nconst REGISTRARS: ((ctx: IRegisterContext) => void)[] = [\n registerEdxAccordion,\n registerEdxAlert,\n registerEdxAudioPlayer,\n registerEdxAvatar,\n registerEdxBadge,\n registerEdxBreadcrumb,\n registerEdxButton,\n registerEdxButtonGroup,\n registerEdxCalendar,\n registerEdxCard,\n registerEdxCheckbox,\n registerEdxCombobox,\n registerEdxContentComponents,\n registerEdxDialog,\n registerEdxDrawer,\n registerEdxDropdownMenu,\n registerEdxField,\n registerEdxIndicator,\n registerEdxInput,\n registerEdxInputGroup,\n registerEdxInputOtp,\n registerEdxInteractiveComponents,\n registerEdxLabel,\n registerEdxPagination,\n registerEdxPopover,\n registerEdxProgress,\n registerEdxRadioGroup,\n registerEdxScrollArea,\n registerEdxSelect,\n registerEdxSeparator,\n registerEdxSkeleton,\n registerEdxSlider,\n registerEdxSwitch,\n registerEdxTable,\n registerEdxTextarea,\n registerEdxTabs,\n registerEdxToggle,\n registerEdxToggleGroup,\n registerEdxTooltip,\n registerEdxVideoPlayer,\n];\n\n/**\n * Register every Edynamix custom element. Call once at startup. Pass `mode`\n * (or call setDefaultMode first) plus `styles` for shadow mode.\n */\nexport const registerElements = (options: IRegisterOptions = {}): void => {\n const ctx: IRegisterContext = { mode: options.mode, styles: options.styles };\n for (const register of REGISTRARS) {\n register(ctx);\n }\n};\n","/**\n * `@exsto/ds/elements` - the optional `<edx-*>` custom elements, for consumers\n * that are not React.\n *\n * Importing this module registers nothing on its own. Call `registerElements()`\n * once, as early as you can:\n *\n * import { registerElements } from '@exsto/ds/elements';\n * registerElements();\n *\n * The design system's compiled CSS is bundled into this module and used as the\n * default `styles`, because shadow roots do not inherit the page's stylesheet\n * and a published package cannot ask a consumer's bundler for `?inline` the way\n * the apps in this repo do.\n */\n\nimport type { IRegisterOptions } from '@edyn/elements';\nimport { registerElements as registerElementsBase } from '@edyn/elements';\n\nimport styles from './styles.css?inline';\n\nexport * from '@edyn/dom';\nexport type { IRegisterContext, IRegisterOptions } from '@edyn/elements';\nexport { coerceBool, coerceJson, coerceNumber } from '@edyn/elements';\n\n/** The design system's compiled CSS, as a string, for shadow roots. */\nexport const elementStyles: string = styles;\n\n/**\n * Register every `<edx-*>` element. Defaults to shadow DOM with the bundled\n * stylesheet; pass `styles` to override, or `mode: 'light'` to opt out of\n * shadow DOM. Calling it more than once is harmless.\n */\nexport const registerElements = (options: IRegisterOptions = {}): void => {\n registerElementsBase({ mode: 'shadow', styles, ...options });\n};\n"],"mappings":";;;;;;;;AAQA,IAAM,iBAAiB,cAAsC,IAAI;AAOjE,IAAa,mBAAmB,UAAiC;CAC/D,OAAO,oBAAC,eAAe,UAAhB;EAAyB,OAAO,MAAM;EAAQ,UAAA,MAAM;CAAkC,CAAA;AAC/F;AAEA,IAAa,mBAAoC;CAC/C,MAAM,MAAM,WAAW,cAAc;CACrC,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,2DAA2D;CAE7E,OAAO;AACT;AAEA,IAAa,gBAAuB,WAAW,CAAC,CAAC;;AAGjD,IAAa,2BAA+C,WAAW,CAAC,CAAC;AAEzE,IAAa,mBAA6B,WAAW,CAAC,CAAC;;;;;;;;;AAoBvD,IAAa,QAAQ,EAAE,SAAqB,CAAC,MAAM;CACjD,MAAM,EAAE,MAAM,aAAa,WAAW;CACtC,IAAI,SAAS,UACX,OAAO,oBAAC,QAAD,EAAY,KAAO,CAAA;CAE5B,IAAI,CAAC,UACH,OAAO;CAKT,OAAO,oBAAC,QAAD;EAAM,OAAO,EAAE,SAAS,WAAW;EAAG,yBAAyB,EAAE,QAAQ,SAAS;CAAI,CAAA;AAC/F;;;AChEA,IAAa,kCAAkC;;;ACE/C,IAAI,cAAwB;;;;;;AAO5B,IAAa,kBAAkB,SAAyB;CACtD,cAAc;AAChB;AAEA,IAAa,uBAAiC;;;ACb9C,IAAM,6BAAa,IAAI,IAA2B;;;;;;AAOlD,IAAa,iBAAiB,QAAsC;CAClE,IAAI,OAAO,kBAAkB,aAC3B,OAAO;CAET,MAAM,SAAS,WAAW,IAAI,GAAG;CACjC,IAAI,QACF,OAAO;CAET,MAAM,QAAQ,IAAI,cAAc;CAChC,MAAM,YAAY,GAAG;CACrB,WAAW,IAAI,KAAK,KAAK;CACzB,OAAO;AACT;;;ACnBA,IAAM,aAAa;AAEnB,IAAM,0BAAU,IAAI,IAAiB;AACrC,IAAI,WAAoC;AAExC,IAAM,oBAA0B;CAC9B,MAAM,SAAS,SAAS,gBAAgB,UAAU,SAAS,UAAU;CACrE,KAAK,MAAM,UAAU,SACnB,OAAO,UAAU,OAAO,YAAY,MAAM;AAE9C;AAEA,IAAa,8BAA8B,GAAG,gBAA6C;CACzF,KAAK,MAAM,UAAU,aACnB,QAAQ,IAAI,MAAM;CAEpB,YAAY;CAEZ,IAAI,CAAC,UAAU;EACb,WAAW,IAAI,iBAAiB,WAAW;EAC3C,SAAS,QAAQ,SAAS,iBAAiB;GAAE,YAAY;GAAM,iBAAiB,CAAC,OAAO;EAAE,CAAC;CAC7F;CAEA,aAAa;EACX,KAAK,MAAM,UAAU,aACnB,QAAQ,OAAO,MAAM;EAEvB,IAAI,QAAQ,SAAS,GAAG;GACtB,UAAU,WAAW;GACrB,WAAW;EACb;CACF;AACF;;;ACrBA,IAAM,cAAc;AACpB,IAAM,wBAAwB,CAAC,SAAS,SAAS;AACjD,IAAM,wBAAwB;AAE9B,IAAM,kBAAkB,UAA6B,MAAM,QAAQ,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI;AAEzF,IAAM,oBAAoB,UAA4B;CACpD,IAAI,SAAS,QAAQ,UAAU,IAC7B,OAAO;CAET,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,WAAW;CAE1B,IAAI,iBAAiB,UACnB,OAAO,MAAM,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS;CAEzC,OAAO;AACT;AAEA,IAAM,0BAAiD,OAAe,cAAmC;CACvG,MAAM,SAAS;CACf,IAAI,OAAO,aAAa,MACtB,OAAO;CAET,IAAI,aAAa,UAAU,oBAAoB,QAC7C,QAAQ,OAAO,WAAW,OAAO,oBAAoB;CAEvD,MAAM,QAAQ,OAAO,SAAS,OAAO;CACrC,OAAO,iBAAiB,UAAU,KAAA,IAAY,YAAY,KAAK;AACjE;;;;;;;;;AAUA,IAAa,iBACX,KACA,WACA,UAAyC,CAAC,MACjC;CACT,IAAI,OAAO,mBAAmB,aAC5B;CAEF,IAAI,eAAe,IAAI,GAAG,GACxB;CAGF,MAAM,WAAW,QAAQ,sBAAsB,CAAC;CAEhD,MAAM,mBAAmB,YAAY;EAInC,OAAO,iBAAiB,QAAQ,kBAAkB;EAElD,WAAW,qBAA+B;GACxC,OAAO;EACT;EAEA,QAAqB;EAGrB,QAA2B,QAAQ,QAAQ,eAAe;EAC1D,mBAAuC;EACvC,UAA6B;EAC7B,oBAAwC;EACxC,yBAA6C;EAC7C,YAAY;EACZ,iBAAkC,CAAC;EACnC,eAAe;EACf,kBAAwC;EACxC,iBAAyC;EACzC,uBAA4C;EAC5C,gBAAqC;EACrC,aAAsC;EACtC;EACA,gBAAgB;EAChB,kBAA+C;EAE/C,cAAc;GACZ,MAAM;GACN,IAAI,QAAQ,kBAAkB,OAAO,KAAK,oBAAoB,YAC5D,KAAK,aAAa,KAAK,gBAAgB;EAE3C;EAEA,oBAA0B;GACxB,IAAI,QAAQ,gBAGV,qBAAqB;IACnB,IAAI,CAAC,KAAK,aACR;IAEF,KAAK,uBAAuB;IAC5B,IAAI,UAA+B;IACnC,MAAM,SAA6C;KACjD,SAAS;KACT,aAAa,gBAAgB;MAC3B,UAAU;KACZ;IACF;IACA,KAAK,cACH,IAAI,YAAgD,iCAAiC;KACnF;KACA,SAAS;KACT,UAAU;IACZ,CAAC,CACH;IACA,KAAK,uBAAuB;GAC9B,CAAC;GAEH,KAAK,yBAAyB;GAC9B,IAAI,KAAK,SAAS,KAAK,cACrB;GAOF,KAAK,eAAe;GACpB,qBAAqB;IACnB,KAAU,0BAA0B;GACtC,CAAC;EACH;EAEA,MAAM,4BAA2C;GAC/C,MAAM,iBAAiB,KAAK;GAC5B,IAAI,gBAAgB;IAClB,MAAM;IACN,IAAI,KAAK,oBAAoB,gBAC3B,KAAK,kBAAkB;GAE3B;GAEA,KAAK,eAAe;GACpB,IAAI,KAAK,SAAS,CAAC,KAAK,aACtB;GAEF,KAAK,OAAO;EACd;EAEA,SAAe;GACb,IAAI;GAEJ,KAAK,uBAAuB;GAE5B,IAAI,KAAK,UAAU,UAAU;IAC3B,IAAI,CAAC,KAAK,SAAS;KACjB,KAAK,UAAU,KAAK,aAAa;MAC/B,MAAM,QAAQ,cAAc;MAC5B,iBAAiB,QAAQ,iBAAiB,WAAW,QAAQ,kBAAkB;KACjF,CAAC;KACD,MAAM,QAAQ,QAAQ,SAAS,cAAc,QAAQ,MAAM,IAAI;KAC/D,IAAI,OACF,KAAK,QAAQ,qBAAqB,CAAC,GAAG,KAAK,QAAQ,oBAAoB,KAAK;KAG9E,KAAK,oBAAoB,SAAS,cAAc,KAAK;KACrD,KAAK,kBAAkB,YAAY;KACnC,KAAK,QAAQ,YAAY,KAAK,iBAAiB;KAE/C,KAAK,yBAAyB,SAAS,cAAc,KAAK;KAC1D,KAAK,uBAAuB,aAAa,aAAa,EAAE;KACxD,KAAK,uBAAuB,YAAY;KACxC,KAAK,QAAQ,YAAY,KAAK,sBAAsB;IACtD;IAEA,IAAI,CAAC,KAAK,qBAAqB,CAAC,KAAK,wBACnC,MAAM,IAAI,MAAM,4CAA4C,IAAI,EAAE;IASpE,KAAK,MAAM,UAAU,QAAQ,WAAW;IAExC,aAAa,KAAK;IAClB,KAAK,mBAAmB,KAAK;IAC7B,KAAK,yBAAyB;GAChC,OAAO;IAKL,IAAI,CAAC,KAAK,WACR,KAAK,YAAY,KAAK;IAExB,KAAK,YAAY;IACjB,KAAK,UAAU,IAAI,UAAU;IAI7B,KAAK,MAAM,UAAU,QAAQ,WAAW;IACxC,aAAa;IACb,KAAK,mBAAmB;GAC1B;GAEA,IAAI,QAAQ,iBAAkB,KAAK,UAAU,WAAW,QAAQ,gBAAiB;IAC/E,KAAK,iBAAiB,IAAI,gBAAgB;IAC1C,MAAM,EAAE,WAAW,KAAK;IACxB,MAAM,wBAA4C;KAEhD,QADyB,KAAK,WAAW,KAAA,CAC7B,cAA2B,yEAAqE;IAC9G;IACA,IAAI,QAAQ,eACV,KAAK,iBACH,UACC,UAAU;KACT,IAAI,MAAM,aAAa,CAAC,CAAC,OAAO,MAC9B;KAEF,MAAM,QAAQ,gBAAgB;KAC9B,IAAI,CAAC,OACH;KAEF,MAAM,MAAM;KACZ,IAAI,MAAM,YAAY,WAAW,MAAM,YAAY,YAAY,MAAM,YAAY,YAC/E,MAAM,MAAM;IAEhB,GACA,EAAE,OAAO,CACX;IAEF,IAAI,KAAK,UAAU,SACjB,KAAK,iBACH,eACM;KACJ,gBAAgB,CAAC,EAAE,MAAM;IAC3B,GACA,EAAE,OAAO,CACX;GAEJ;GAEA,KAAK,QAAQ,WAAW,UAAU;GAOlC,gBAAgB;IACd,KAAK,QAAQ;GACf,CAAC;EACH;EAEA,2BAAiC;GAC/B,IAAI,CAAC,KAAK,qBAAqB,CAAC,KAAK,0BAA0B,KAAK,eAClE;GAEF,KAAK,gBAAgB,2BAA2B,KAAK,mBAAmB,KAAK,sBAAsB;EACrG;EAEA,uBAA6B;GAC3B,KAAK,uBAAuB;GAC5B,KAAK,uBAAuB;GAC5B,KAAK,gBAAgB;GACrB,KAAK,gBAAgB;GACrB,MAAM,OAAO,KAAK;GAClB,IAAI,MACF,KAAK,kBAAkB,IAAI,SAAS,YAAY;IAC9C,qBAAqB;KACnB,IAAI,KAAK,eAAe,KAAK,UAAU,MAAM;MAC3C,QAAQ;MACR;KACF;KACA,IAAI;MACF,KAAK,gBAAgB,MAAM;MAC3B,KAAK,iBAAiB;MACtB,KAAK,QAAQ;KACf,UAAU;MACR,IAAI,KAAK,UAAU,MAAM;OACvB,KAAK,QAAQ;OACb,KAAK,mBAAmB;MAC1B;MACA,QAAQ;KACV;IACF,CAAC;GACH,CAAC;EAEL;EAEA,2BAAiC;GAC/B,IAAI,KAAK,OACP,KAAK,QAAQ;EAEjB;EAEA,qBAAqB,UAAyB;GAC5C,KAAK,gBAAgB;GACrB,IAAI,KAAK,OACP,KAAK,QAAQ;EAEjB;EAEA,oBAA0B;GACxB,KAAK,qBAAqB,KAAA;GAC1B,KAAK,MAAM,CAAC,UAAU,UAAU,KAAK,mBAAmB,CAAC,GACvD,QAAQ,gBAAgB,SAAS,EAAE,IAAI,MAAM,eAAe,KAAK,CAAC;GAEpE,IAAI,KAAK,OACP,KAAK,QAAQ;EAEjB;;EAGA,SAAS,OAA8B;GACrC,KAAK,iBAAiB;IAAE,GAAG,KAAK;IAAgB,GAAG;GAAM;GACzD,IAAI,KAAK,OACP,KAAK,QAAQ;EAEjB;EAEA,SAAgB,MAAM,WAAW;GAC/B,KAAK,cAAc,IAAI,YAAY,MAAM;IAAE;IAAQ,SAAS;IAAM,UAAU;GAAK,CAAC,CAAC;EACrF;EAEA,iBAAiB,OAAmB,UAA6B;GAC/D,IAAI,KAAK,UAAU,UACjB;GAEF,KAAK,qBAAqB;GAC1B,KAAK,YAAY,aAAa,OAAO,KAAK;GAC1C,KAAK,kBAAkB,KAAK,UAAU,GAAG,KAAK;EAChD;EAEA,yBAA+B;GAC7B,IAAI,CAAC,QAAQ,kBAAkB,KAAK,iBAClC;GAEF,KAAK,kCAAkB,IAAI,IAAI;GAC/B,KAAK,MAAM,YAAY,uBAAuB;IAC5C,MAAM,aAAa,QAAQ,gBAAgB;IAC3C,IAAI,YACF,KAAK,gBAAgB,IAAI,UAAU,eAAe,WAAW,IAAI,IAAI,CAAC,CAAC;GAE3E;EACF;EAEA,kBAAkB,OAAe,WAA6B;GAC5D,IAAI,KAAK,UAAU,YAAY,CAAC,KAAK,YAAY,aAC/C;GAGF,IAAI,EADa,KAAK,iBAAkB,MAAkC,aAAa,SACtE,uBAAuB,OAAO,SAAS,GAAG;IACzD,KAAK,WAAW,YAAY,EAAE,cAAc,KAAK,GAAG,qBAAqB;IACzE;GACF;GACA,KAAK,WAAW,YAAY,CAAC,CAAC;EAChC;EAEA,YAAoB;GAClB,MAAM,MAAqC,CAAC;GAC5C,KAAK,MAAM,QAAQ,UACjB,IAAI,QAAQ,KAAK,aAAa,IAAI;GAGpC,MAAM,QAAQ;IAAE,GADH,QAAQ,iBAAiB,QAAQ,eAAe,KAAK,IAAI,IAAK;IAClD,GAAG,KAAK;GAAe;GAChD,IAAI,QAAQ,kBAAkB,KAAK,eACjC,OAAO;IAAE,GAAG;IAAO,UAAU;GAAK;GAEpC,OAAO;EACT;EAEA,UAAgB;GACd,IAAI,CAAC,KAAK,OACR;GAEF,MAAM,QAAQ,KAAK,UAAU;GAC7B,IAAI,KAAK,UAAU,YAAY,KAAK,cAAc,QAAQ,WAAW;IACnE,MAAM,YAAY,KAAK,uBAAuB,KAAA,IAAY,QAAQ,UAAU,OAAO,IAAI,IAAI,KAAK;IAChG,KAAK,WAAW,aAAa,SAAS;IACtC,KAAK,kBAAkB,OAAO,SAAS;GACzC;GACA,KAAK,MAAM,OACT,oBAAC,iBAAD;IACE,OAAO;KACL,MAAM;KACN,MAAM,KAAK;KACX,MAAM,KAAK;KACX,iBAAiB,KAAK;KACtB,cAAc,KAAK;KACnB,UAAU,KAAK;IACjB;IAEA,UAAA,oBAAC,WAAD,EAAW,GAAI,MAAQ,CAAA;GACR,CAAA,CACnB;EACF;CACF;CAOA,IAAI,QAAQ,eACV,KAAK,MAAM,CAAC,UAAU,eAAe,OAAO,QAAQ,QAAQ,aAAa,GACvE,OAAO,eAAe,WAAW,WAAW,UAAU;EACpD,MAAsB;GACpB,OAAO,WAAW,IAAI,IAAI;EAC5B;EACA,IAAsB,OAAgB;GACpC,WAAW,IAAI,MAAM,KAAK;EAC5B;EACA,cAAc;EACd,YAAY;CACd,CAAC;CAIL,eAAe,OAAO,KAAK,UAAU;AACvC;;;;;;;;;;;AC/ZA,IAAa,0BACX,KACA,WACA,KACA,UAAkE,CAAC,MAC1D;CACT,cAAsB,KAAK,WAAW;EAAE,GAAG;EAAS,MAAM;EAAS,QAAQ,IAAI;CAAO,CAAC;AACzF;;;;;;;;AASA,IAAa,cAAc,UAA8C,SAAS,QAAQ,UAAU;;AAGpG,IAAa,eAAe,MAAmB,WAAmB,UAAyB;CACzF,IAAI,OACF,KAAK,aAAa,WAAW,MAAM;MAEnC,KAAK,gBAAgB,SAAS;AAElC;;;;;;;AAQA,IAAa,sBAAsB,WAAmB,sBAAgE;CACpH,MAAM,SAAS;EACb,MAAM,UAAU,KAAK,aAAa,SAAS;EAC3C,IAAI,WAAW,MACb,OAAO,WAAW,OAAO;EAE3B,OAAO,mBAAmB,WAAW,KAAK,aAAa,gBAAgB,CAAC,IAAI;CAC9E;CACA,MAAM,MAAM,UAAU;EACpB,IAAI,kBACF,KAAK,gBAAgB,gBAAgB;EAEvC,YAAY,MAAM,WAAW,QAAQ,KAAK,CAAC;CAC7C;AACF;;AAGA,IAAa,gBAAgB,UAAyD;CACpF,IAAI,SAAS,QAAQ,UAAU,IAC7B;CAEF,MAAM,SAAS,OAAO,KAAK;CAC3B,OAAO,OAAO,MAAM,MAAM,IAAI,KAAA,IAAY;AAC5C;;AAGA,IAAa,cAAiB,UAAoD;CAChF,IAAI,SAAS,QAAQ,UAAU,IAC7B;CAEF,IAAI;EACF,OAAO,KAAK,MAAM,KAAK;CACzB,QAAQ;EACN;CACF;AACF;;AAGA,IAAa,qBAAqB,MAAmB,WAA2D;CAC9G,MAAM,OAAO,KAAK,aAAa,MAAM;CACrC,IAAI,CAAC,MACH,OAAO;CAET,MAAM,OAAO,IAAI,SAAS;CAC1B,KAAK,MAAM,SAAS,QAClB,KAAK,OAAO,MAAM,KAAK;CAEzB,OAAO;AACT;;;;AC/EA,IAAM,gBAAgB,UAAmD;CACvE,IAAI,SAAS,MACX,OAAO,CAAC;CAEV,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO;CAET,OAAO,UAAU,KAAK,CAAC,IAAI,CAAC,KAAK;AACnC;AAEA,IAAa,gBAAgB,UAA8B;CACzD,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,MAAM,QAAQ,MAAM,SAAS,CAAC;CAC9B,MAAM,eAAe,MAAM,gBAAgB;CAE3C,MAAM,eAAyB,MAAM,SAAS,OAAO,aAAa,MAAM,KAAK,IAAI,aAAa,MAAM,YAAY;CAEhH,MAAM,qBAAqB,SAAmB;EAI5C,MAAM,YAAY,eAAe,OAAQ,KAAK,MAAM;EACpD,MAAM,aAAa,eAAe,KAAK,UAAU,IAAI,IAAK,KAAK,MAAM;EACrE,KAAK,gBAAgB,eAAe;EACpC,KAAK,aAAa,SAAS,UAAU;EACrC,KAAK,cAAc,EAAE,OAAO,UAAU,CAAC;CACzC;CAEA,OACE,oBAAC,WAAD;EAAW,OAAO;EAAc,UAAU;EAAc,eAAe;EACpE,UAAA,MAAM,KAAK,SACV,qBAAC,eAAD;GAAgC,OAAO,KAAK;GAAO,UAAU,KAAK;GAAlE,UAAA,CACE,oBAAC,kBAAD,EAAA,UAAmB,KAAK,MAAwB,CAAA,GAChD,oBAAC,kBAAD,EAAA,UACE,oBAAC,MAAD,EAAM,MAAM,SAAS,KAAK,QAAU,CAAA,EACpB,CAAA,CACL;EALK,GAAA,KAAK,KAKV,CAChB;CACQ,CAAA;AAEf;AAEA,IAAa,wBAAwB,QAAgC;CACnE,cAAkC,iBAAiB,cAAc;EAC/D,MAAM;EACN,QAAQ,IAAI;EACZ,oBAAoB;GAAC;GAAS;GAAS;GAAiB;EAAe;EACvE,iBAAiB,QAAQ;GACvB,MAAM,eAAe,WAAW,IAAI,gBAAgB;GAGpD,MAAM,SAAS,MAAgE;IAC7E,IAAI,KAAK,MACP;IAEF,IAAI,MAAM,IACR,OAAO,eAAe,CAAC,IAAI;IAE7B,OAAO,eAAgB,WAAqB,CAAC,KAAK,CAAC,CAAC,IAAK;GAC3D;GACA,OAAO;IACL,OAAO,WAA6B,IAAI,KAAK;IAC7C,OAAO,MAAM,IAAI,KAAK;IACtB,cAAc,MAAM,IAAI,gBAAgB;IACxC;GACF;EACF;EACA,eAAe,EACb,OAAO;GAGL,MAAM,SAAS;IACb,MAAM,MAAM,KAAK,aAAa,OAAO,KAAK,KAAK,aAAa,eAAe,KAAK;IAChF,IAAI,WAAW,KAAK,aAAa,eAAe,CAAC,GAC/C,OAAO,WAAqB,GAAG,MAAM,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG;IAE7D,OAAO;GACT;GACA,MAAM,MAAM,UAAU;IACpB,IAAI,MAAM,QAAQ,KAAK,GAAG;KACxB,KAAK,aAAa,SAAS,KAAK,UAAU,KAAK,CAAC;KAChD;IACF;IACA,KAAK,aAAa,SAAS,OAAO,SAAS,EAAE,CAAC;GAChD;EACF,EACF;CACF,CAAC;AACH;;;AC5FA,IAAa,YAAY,UAA0B;CACjD,MAAM,OAAO,QAAQ;CAErB,OACE,qBAAC,OAAD;EAAO,SAAS,MAAM,WAAW;EAAjC,UAAA;GACG,MAAM,SAAS,oBAAC,YAAD,EAAA,UAAa,MAAM,MAAkB,CAAA;GACpD,MAAM,eAAe,oBAAC,kBAAD,EAAA,UAAmB,MAAM,YAA8B,CAAA;GAC7E,oBAAC,MAAD,CAAO,CAAA;GACN,MAAM,eACL,oBAAC,aAAD,EAAA,UACE,oBAAC,QAAD;IAAQ,SAAQ;IAAQ,MAAK;IAAU,cAAY,MAAM,mBAAmB,MAAM;IAAa,eAAe,KAAK,YAAY;IAC5H,UAAA,MAAM;GACD,CAAA,EACG,CAAA;EAEV;;AAEX;AAEA,IAAa,oBAAoB,QAAgC;CAC/D,cAA8B,aAAa,UAAU;EACnD,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,oBAAoB;GAAC;GAAW;GAAS;GAAe;GAAgB;EAAmB;EAC3F,iBAAiB,SAAS;GACxB,SAAU,IAAI,WAAW,KAAA;GACzB,OAAO,IAAI,SAAS,KAAA;GACpB,aAAa,IAAI,eAAe,KAAA;GAChC,aAAa,IAAI,mBAAmB,KAAA;GACpC,iBAAiB,IAAI,wBAAwB,KAAA;EAC/C;CACF,CAAC;AACH;;;ACjCA,IAAa,kBAAkB,UAAgC;CAC7D,MAAM,EAAE,SAAS,WAAW;CAE5B,OACE,oBAAC,aAAD;EACE,KAAK,MAAM;EACX,OAAO,MAAM,SAAS;EACtB,MAAM,MAAM,QAAQ;EACpB,UAAU,MAAM,YAAY;EAC5B,OAAO,MAAM;EACb,cAAY,MAAM,aAAa;EAC/B,cAAc,KAAK,YAAY,CAAC,CAAC;EACjC,eAAe,KAAK,aAAa,CAAC,CAAC;EACnC,eAAe,KAAK,aAAa,CAAC,CAAC;EACnC,eAAe,aAAa,aAAa,KAAK,kBAAkB;GAAE;GAAa;EAAS,CAAC;CAC1F,CAAA;AAEL;AAEA,IAAa,0BAA0B,QAAgC;CACrE,cAAoC,oBAAoB,gBAAgB;EACtE,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,oBAAoB;GAAC;GAAO;GAAS;GAAQ;GAAY;GAAS;EAAY;EAC9E,iBAAiB,SAAS;GACxB,KAAK,IAAI,OAAO,KAAA;GAChB,OAAO,WAAW,IAAI,KAAK;GAC3B,MAAM,WAAW,IAAI,IAAI;GACzB,UAAU,WAAW,IAAI,QAAQ;GACjC,OAAO,IAAI,SAAS,KAAA;GACpB,WAAW,IAAI,iBAAiB,KAAA;EAClC;CACF,CAAC;AACH;;;ACpCA,IAAM,eAAuE;CAC3E,QAAQ;CACR,MAAM;CACN,MAAM;CACN,SAAS;AACX;AAEA,IAAa,aAAa,UAA2B;CACnD,OACE,qBAAC,QAAD;EAAQ,MAAM,MAAM,QAAQ;EAA5B,UAAA;GACE,oBAAC,aAAD;IAAa,KAAK,MAAM;IAAK,KAAK,MAAM;GAAM,CAAA;GAC9C,oBAAC,gBAAD,EAAA,UAAiB,MAAM,YAAY,GAAmB,CAAA;GACrD,MAAM,UAAU,oBAAC,aAAD;IAAa,WAAW,aAAa,MAAM;IAAS,MAAK;IAAM,cAAY,GAAG,MAAM,OAAO;GAAW,CAAA;EACjH;;AAEZ;AAEA,IAAa,qBAAqB,QAAgC;CAChE,cAA+B,cAAc,WAAW;EACtD,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,oBAAoB;GAAC;GAAO;GAAO;GAAY;GAAQ;EAAQ;EAC/D,iBAAiB,SAAS;GACxB,KAAK,IAAI,OAAO,KAAA;GAChB,KAAK,IAAI,OAAO,KAAA;GAChB,UAAU,IAAI,YAAY,KAAA;GAC1B,MAAO,IAAI,QAAoC,KAAA;GAC/C,QAAS,IAAI,UAAwC,KAAA;EACvD;CACF,CAAC;AACH;;;AC9BA,IAAa,YAAY,UAA0B;CACjD,OACE,oBAAC,OAAD;EAAO,SAAS,MAAM,WAAW;EAAW,MAAM,MAAM,QAAQ;EAC9D,UAAA,oBAAC,MAAD,CAAO,CAAA;CACF,CAAA;AAEX;AAEA,IAAa,oBAAoB,QAAgC;CAC/D,cAA8B,aAAa,UAAU;EACnD,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,oBAAoB,CAAC,WAAW,MAAM;EACtC,iBAAiB,SAAS;GACxB,SAAU,IAAI,WAAW,KAAA;GACzB,MAAO,IAAI,QAAQ,KAAA;EACrB;CACF,CAAC;AACH;;;ACjBA,IAAa,iBAAiB,UAA+B;CAC3D,MAAM,QAAQ,MAAM,SAAS,CAAC;CAE9B,MAAM,QAAqB,CAAC;CAC5B,MAAM,SAAS,MAAM,UAAU;EAC7B,MAAM,KAEJ,oBAAC,gBAAD,EAAA,UACG,KAAK,UAAU,oBAAC,gBAAD,EAAA,UAAiB,KAAK,MAAsB,CAAA,IAAI,oBAAC,gBAAD;GAAgB,MAAM,KAAK;GAAO,UAAA,KAAK;EAAsB,CAAA,EAC/G,GAFK,QAAQ,OAEb,CAClB;EACA,IAAI,QAAQ,MAAM,SAAS,GAEzB,MAAM,KAAK,oBAAC,qBAAD,CAA2C,GAAjB,OAAO,OAAU,CAAC;CAE3D,CAAC;CAED,OACE,oBAAC,YAAD,EAAA,UACE,oBAAC,gBAAD,EAAA,UAAiB,MAAsB,CAAA,EAC7B,CAAA;AAEhB;AAEA,IAAa,yBAAyB,QAAgC;CAIpE,cAAmC,kBAAkB,eAAe;EAClE,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,oBAAoB,CAAC,OAAO;EAC5B,iBAAiB,SAAS,EACxB,OAAO,WAAiC,IAAI,KAAK,KAAK,CAAC,EACzD;CACF,CAAC;AACH;;;AC9BA,IAAa,aAAa,UAA2B;CACnD,MAAM,OAAO,QAAQ;CAErB,OACE,oBAAC,QAAD;EACE,MAAM,MAAM,QAAQ;EACpB,SAAS,MAAM,WAAW;EAC1B,MAAM,MAAM,QAAQ;EACpB,UAAU,MAAM,YAAY;EAC5B,cAAY,MAAM;EAClB,oBAAkB,MAAM;EACxB,MAAM,MAAM;EACZ,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,WAAW,MAAM;EACjB,eAAe,KAAK,WAAW;EAE/B,UAAA,oBAAC,MAAD,CAAO,CAAA;CACD,CAAA;AAEZ;AAEA,IAAa,qBAAqB,QAAgC;CAChE,cAA+B,cAAc,WAAW;EACtD,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,oBAAoB;GAAC;GAAW;GAAQ;GAAY;GAAc;GAAoB;GAAQ;GAAQ;GAAQ;GAAS;EAAW;EAClI,iBAAiB,SAAS;GACxB,SAAU,IAAI,WAAW,KAAA;GACzB,MAAO,IAAI,QAAQ,KAAA;GACnB,UAAU,WAAW,IAAI,QAAQ;GACjC,WAAW,IAAI,iBAAiB,KAAA;GAChC,iBAAiB,IAAI,uBAAuB,KAAA;GAC5C,MAAO,IAAI,QAAoC,KAAA;GAC/C,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAM,IAAI,QAAQ,KAAA;GAClB,OAAO,IAAI,SAAS,KAAA;GACpB,WAAW,WAAW,IAAI,SAAS;EACrC;CACF,CAAC;AACH;;;ACnDA,IAAa,kBAAkB,UAAgC;CAC7D,MAAM,EAAE,SAAS,WAAW;CAC5B,MAAM,cAAc,MAAM,eAAe;CAEzC,sBAAsB;EACpB,MAAM,iCAAiB,IAAI,IAAiB;EAE5C,MAAM,iBAAiB,WAA8B;GACnD,OAAO,OAAO,QAAQ;GACtB,OAAO,MAAM,eAAe,qBAAqB;GACjD,OAAO,MAAM,eAAe,oBAAoB;GAChD,eAAe,OAAO,MAAM;EAC9B;EAEA,MAAM,wBAA8B;GAClC,MAAM,UAAU,MAAM,KAAK,KAAK,QAAQ,CAAC,CAAC,QAAQ,UAAgC,MAAM,QAAQ,YAAY,CAAC;GAC7G,MAAM,cAAc,IAAI,IAAI,OAAO;GAEnC,KAAK,MAAM,UAAU,gBACnB,IAAI,CAAC,YAAY,IAAI,MAAM,GACzB,cAAc,MAAM;GAIxB,KAAK,MAAM,CAAC,OAAO,WAAW,QAAQ,QAAQ,GAAG;IAC/C,MAAM,WAAW,UAAU,IAAI,UAAU,UAAU,QAAQ,SAAS,IAAI,SAAS;IACjF,OAAO,QAAQ,yBAAyB,QAAQ,WAAW,IAAI,WAAW,GAAG,YAAY,GAAG;IAC5F,OAAO,MAAM,oBAAoB,gBAAgB,gBAAgB,QAAQ,IAAI,SAAS;IACtF,OAAO,MAAM,mBAAmB,gBAAgB,cAAc,QAAQ,IAAI,SAAS;IACnF,eAAe,IAAI,MAAM;GAC3B;EACF;EAEA,gBAAgB;EAChB,MAAM,WAAW,IAAI,iBAAiB,eAAe;EACrD,SAAS,QAAQ,MAAM,EAAE,WAAW,KAAK,CAAC;EAE1C,aAAa;GACX,SAAS,WAAW;GACpB,KAAK,MAAM,UAAU,gBACnB,cAAc,MAAM;EAExB;CACF,GAAG,CAAC,MAAM,WAAW,CAAC;CAEtB,OACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,SAAD,EAAA,UAAQ;;;;;;;;;QASC,CAAA,GACT,oBAAC,aAAD;EAA0B;EACxB,UAAA,oBAAC,MAAD,CAAO,CAAA;CACI,CAAA,CACb,EAAA,CAAA;AAEN;AAEA,IAAa,0BAA0B,QAAgC;CACrE,cAAoC,oBAAoB,gBAAgB;EACtE,MAAM;EACN,QAAQ,IAAI;EACZ,SAAS;EACT,oBAAoB,CAAC,aAAa;EAClC,iBAAiB,SAAS,EACxB,aAAc,IAAI,eAAe,KAAA,EACnC;CACF,CAAC;AACH;;;;;;;;ACzDA,IAAM,gBAAgB,UAAqC;CACzD,MAAM,QAAQ,QAAQ,4BAA4B,KAAK,KAAK,IAAI;CAChE,IAAI,CAAC,OACH;CAEF,MAAM,GAAG,MAAM,OAAO,OAAO;CAC7B,OAAO,IAAI,KAAK,OAAO,IAAI,GAAG,OAAO,KAAK,IAAI,GAAG,OAAO,GAAG,CAAC;AAC9D;;AAGA,IAAM,iBAAiB,SAAuB;CAI5C,OAAO,GAHM,KAAK,YAGR,EAAK,GAFD,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,GAEpC,EAAM,GADZ,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,GAAG,GACpB;AAC7B;AAEA,IAAa,eAAe,UAA6B;CACvD,MAAM,EAAE,MAAM,SAAS,WAAW;CAClC,MAAM,QAAQ,MAAM,SAAS,MAAM;CACnC,MAAM,MAAM,aAAa,MAAM,GAAG;CAClC,MAAM,MAAM,aAAa,MAAM,GAAG;CAClC,MAAM,WAAW,MAAM,WACnB,OACC,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI,MAAM,MAAM,EAAE,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,OAAO,OAAO;CAE/E,OACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,UAAD;EACE,MAAK;EACL,UAAU,MAAM;EAChB,UAAU,aAAa,KAAK;EAC5B,cAAc,aAAa,KAAK;EACtB;EACV,YAAY;EACZ,UAAU;EACV,gBAAgB,MAAM;EACtB,iBAAiB,MAAM;EACvB,YAAY,MAAM;EAClB,gBAAgB,MAAM;EACtB,cAAc,MAAM;EACpB,cAAY,MAAM;EAClB,oBAAkB,MAAM;EACxB,gBAAc,MAAM,WAAW,KAAA;EAC/B,WAAW,SAA2B;GACpC,IAAI,CAAC,MACH;GAEF,MAAM,MAAM,cAAc,IAAI;GAC9B,KAAK,gBAAgB,eAAe;GACpC,KAAK,aAAa,SAAS,GAAG;GAC9B,KAAK,cAAc,EAAE,OAAO,IAAI,CAAC;EACnC;CACD,CAAA,GACA,MAAM,OAAO,oBAAC,SAAD;EAAO,MAAK;EAAS,MAAM,MAAM;EAAM,MAAM,MAAM;EAAM,OAAO,SAAS;EAAI,UAAU,MAAM;CAAW,CAAA,IAAI,IAC1H,EAAA,CAAA;AAEN;AAEA,IAAa,uBAAuB,QAAgC;CAClE,cAAiC,gBAAgB,aAAa;EAC5D,MAAM,IAAI;EACV,QAAQ,IAAI;EAKZ,SAAS;EACT,eAAe;EACf,gBAAgB;EAChB,YAAY,UAAU,MAAM,SAAS,MAAM,gBAAgB;EAC3D,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,OAAO,IAAI,SAAS,KAAA;GACpB,cAAc,IAAI,oBAAoB,KAAA;GACtC,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAM,IAAI,QAAQ,KAAA;GAClB,KAAK,IAAI,OAAO,KAAA;GAChB,KAAK,IAAI,OAAO,KAAA;GAChB,gBAAgB,aAAa,IAAI,mBAAmB;GACpD,iBAAiB,IAAI,wBAAwB,OAAO,KAAA,IAAY,WAAW,IAAI,oBAAoB;GACnG,YAAY,IAAI,kBAAkB,OAAO,KAAA,IAAY,WAAW,IAAI,cAAc;GAClF,gBAAgB,IAAI,sBAAsB,OAAO,KAAA,IAAY,WAAW,IAAI,kBAAkB;GAC9F,cAAc,aAAa,IAAI,iBAAiB;GAChD,WAAW,IAAI,iBAAiB,KAAA;GAChC,iBAAiB,IAAI,uBAAuB,KAAA;GAC5C,SAAS,WAAW,IAAI,OAAO;EACjC;EAGA,eAAe,EACb,OAAO;GACL,MAAM,SAAS,KAAK,aAAa,OAAO,KAAK,KAAK,aAAa,eAAe,KAAK;GACnF,MAAM,MAAM,UAAU;IACpB,KAAK,aAAa,SAAS,OAAO,SAAS,EAAE,CAAC;GAChD;EACF,EACF;CACF,CAAC;AACH;;;ACxIA,IAAa,WAAW,UAAyB;CAC/C,OACE,qBAAC,MAAD;EAAM,MAAM,MAAM;EAAlB,UAAA,EACI,MAAM,WAAW,MAAM,gBACvB,qBAAC,YAAD,EAAA,UAAA,CACG,MAAM,WAAW,oBAAC,WAAD,EAAA,UAAY,MAAM,QAAmB,CAAA,GACtD,MAAM,eAAe,oBAAC,iBAAD,EAAA,UAAkB,MAAM,YAA6B,CAAA,CACjE,EAAA,CAAA,GAEd,oBAAC,aAAD,EAAA,UACE,oBAAC,MAAD,CAAO,CAAA,EACI,CAAA,CACT;;AAEV;AAEA,IAAa,mBAAmB,QAAgC;CAC9D,cAA6B,YAAY,SAAS;EAChD,MAAM;EACN,QAAQ,IAAI;EACZ,oBAAoB;GAAC;GAAW;GAAe;EAAM;EACrD,iBAAiB,SAAS;GACxB,SAAS,IAAI,WAAW,KAAA;GACxB,aAAa,IAAI,eAAe,KAAA;GAChC,MAAO,IAAI,QAAkC,KAAA;EAC/C;CACF,CAAC;AACH;;;ACjBA,IAAa,eAAe,UAA6B;CACvD,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,OACE,oBAAC,UAAD;EACE,SAAS,MAAM,WAAW,MAAM,kBAAkB;EAClD,eAAe,MAAM,iBAAiB;EACtC,UAAU,MAAM,YAAY;EAC5B,UAAU,MAAM,YAAY;EAC5B,UAAU,MAAM,YAAY;EAC5B,MAAM,MAAM;EACZ,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,gBAAgB,MAAM;EACtB,gBAAc,MAAM,WAAW,KAAA;EAC/B,cAAY,MAAM;EAClB,oBAAkB,MAAM;EACxB,kBAAkB,SAAS;GACzB,MAAM,UAAU,SAAS;GACzB,KAAK,gBAAgB,iBAAiB;GACtC,KAAK,gBAAgB,eAAe;GACpC,IAAI,SACF,KAAK,aAAa,WAAW,MAAM;QAEnC,KAAK,gBAAgB,SAAS;GAEhC,KAAK,cAAc;IAAE;IAAS,eAAe;GAAM,CAAC;EACtD;CACD,CAAA;AAEL;AAEA,IAAa,uBAAuB,QAAgC;CAClE,cAAiC,gBAAgB,aAAa;EAC5D,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,eAAe;EACf,gBAAgB;EAChB,YAAY,UAAU;GAEpB,OADgB,MAAM,WAAW,MAAM,kBAAkB,QACvC,MAAM,SAAS,OAAS,MAAM,kBAAkB;EACpE;EACA,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,SAAS,IAAI,WAAW,OAAO,KAAA,IAAY,WAAW,IAAI,OAAO;GACjE,gBAAgB,IAAI,sBAAsB,OAAO,KAAA,IAAY,WAAW,IAAI,kBAAkB;GAC9F,eAAe,WAAW,IAAI,aAAa;GAC3C,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAM,IAAI,QAAQ,KAAA;GAClB,OAAO,IAAI,SAAS,KAAA;GACpB,gBAAgB,IAAI,sBAAsB,KAAA;GAC1C,SAAS,WAAW,IAAI,OAAO;GAC/B,WAAW,IAAI,iBAAiB,KAAA;GAChC,iBAAiB,IAAI,uBAAuB,KAAA;EAC9C;EAIA,eAAe;GACb,SAAS,mBAAmB,WAAW,iBAAiB;GACxD,eAAe,mBAAmB,eAAe;EACnD;CACF,CAAC;AACH;;;ACvEA,IAAa,eAAe,UAA6B;CACvD,MAAM,EAAE,MAAM,SAAS,WAAW;CAClC,MAAM,kBAAkB,mBAAmB;CAC3C,MAAM,UAAU,MAAM,WAAW,CAAC;CAIlC,MAAM,WAAW,QAAQ,MAAM,QAAQ,IAAI,UAAU,MAAM,KAAK,KAAK;CAErE,OACE,qBAAC,UAAD;EACE,OAAO;EACP,oBAAoB,SAA0B,KAAK;EACnD,OAAO;EACP,YAAY,MAAM,cAAc;EAChC,UAAU,MAAM,YAAY;EAC5B,UAAU,MAAM,YAAY;EAC5B,UAAU,MAAM,YAAY;EAC5B,MAAM,MAAM;EACZ,MAAM,MAAM;EACZ,MAAM,MAAM,QAAQ,MAAM,eAAe;EACzC,OAAO,MAAM;EACb,kBAAkB,MAAM,oBAAoB;EAC5C,eAAe,MAAM;EACrB,sBAAsB,MAAM,wBAAwB;EACpD,eAAe,SAAS;GACtB,KAAK,gBAAgB,cAAc;GACnC,IAAI,MACF,KAAK,aAAa,QAAQ,MAAM;QAEhC,KAAK,gBAAgB,MAAM;GAE7B,KAAK,mBAAmB,EAAE,KAAK,CAAC;EAClC;EACA,qBAAqB,eAAe;GAClC,KAAK,aAAa,eAAe,UAAU;GAC3C,KAAK,oBAAoB,EAAE,OAAO,WAAW,CAAC;EAChD;EACA,gBAAgB,SAAS;GACvB,MAAM,MAAM,SAAS,OAAO,OAAQ,KAAyB;GAC7D,IAAI,OAAO,MACT,KAAK,aAAa,SAAS,GAAG;QAE9B,KAAK,gBAAgB,OAAO;GAE9B,KAAK,cAAc,EAAE,OAAO,IAAI,CAAC;EACnC;EApCF,UAAA,CAsCE,oBAAC,eAAD;GACE,aAAa,MAAM;GACnB,cAAY,MAAM;GAClB,oBAAkB,MAAM;GACxB,gBAAc,MAAM,WAAW,KAAA;EAChC,CAAA,GACD,oBAAC,iBAAD;GAAiB,iBAAiB,mBAAmB,KAAA;GACjD,WAAA,SACA,oBAAC,cAAD;IAA+B,OAAO;IACnC,UAAA,KAAK;GACM,GAFK,KAAK,KAEV;EAED,CAAA,CACT;;AAEd;AAEA,IAAa,uBAAuB,QAAgC;CAClE,cAAiC,gBAAgB,aAAa;EAC5D,MAAM,IAAI;EACV,QAAQ,IAAI;EAGZ,SAAS;EACT,eAAe;EACf,gBAAgB;EAChB,YAAY,UAAU,MAAM,SAAS;EACrC,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,SAAS,WAA8B,IAAI,OAAO;GAClD,OAAO,IAAI,SAAS;GACpB,YAAY,IAAI,kBAAkB,KAAA;GAClC,aAAa,IAAI,eAAe,KAAA;GAChC,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAM,IAAI,QAAQ,OAAO,KAAA,IAAY,WAAW,IAAI,IAAI;GACxD,aAAa,IAAI,mBAAmB,OAAO,KAAA,IAAY,WAAW,IAAI,eAAe;GACrF,OAAO,IAAI,SAAS,OAAO,KAAA,IAAY,WAAW,IAAI,KAAK;GAC3D,kBAAkB,IAAI,0BAA0B,OAAO,KAAA,IAAY,WAAW,IAAI,sBAAsB;GACxG,eAAe,IAAI,qBAAqB,OAAO,KAAA,IAAY,WAAW,IAAI,iBAAiB;GAC3F,sBAAsB,IAAI,8BAA8B,OAAO,KAAA,IAAY,WAAW,IAAI,0BAA0B;GACpH,WAAW,IAAI,iBAAiB,KAAA;GAChC,iBAAiB,IAAI,uBAAuB,KAAA;GAC5C,SAAS,WAAW,IAAI,OAAO;EACjC;EACA,eAAe;GACb,OAAO;IACL,MAAM,SAAS,KAAK,aAAa,OAAO,KAAK;IAC7C,MAAM,MAAM,UAAU;KACpB,KAAK,aAAa,SAAS,OAAO,SAAS,EAAE,CAAC;IAChD;GACF;GACA,YAAY;IACV,MAAM,SAAS,KAAK,aAAa,aAAa,KAAK;IACnD,MAAM,MAAM,UAAU,KAAK,aAAa,eAAe,OAAO,SAAS,EAAE,CAAC;GAC5E;GACA,MAAM,mBAAmB,QAAQ,cAAc;EACjD;CACF,CAAC;AACH;;;AC/GA,IAAM,kBAAkB,EAAE,QAAQ,KAAK,QAA2B;CAChE,OACE,oBAAC,aAAD;EAAoB;EAAO,WAAU;EACnC,UAAA,oBAAC,OAAD;GAAK,WAAU;GACb,UAAA,oBAAC,MAAD,CAAO,CAAA;EACJ,CAAA;CACM,CAAA;AAEjB;AAUA,IAAM,iBAAiB,EACrB,QAAQ,cACR,cAAc,UACd,QAAQ,QACR,OAAO,WACP,cAAc,mBACQ;CACtB,OACE,qBAAC,YAAD;EAAmB;EAAa;EAAmB;EAAnD,UAAA;GACE,oBAAC,iBAAD,EAAA,UAAkB,UAAU,eAAe,UAAU,eAAe,oBAAC,SAAD,CAAU,CAAA,IAAI,oBAAC,UAAD,CAAW,CAAA,EAAmB,CAAA;GAChH,qBAAC,mBAAD,EAAA,UAAA,CACE,oBAAC,iBAAD,EAAA,UAAkB,MAAuB,CAAA,GACzC,oBAAC,uBAAD,EAAA,UAAwB,YAAmC,CAAA,CAC1C,EAAA,CAAA;GACnB,oBAAC,MAAD,CAAO,CAAA;EACG;;AAEhB;AAQA,IAAM,aAAa,EAAE,UAAU,WAAW,QAAQ,SAAS,cAA4B;CACrF,OACE,oBAAC,QAAD;EAAiB;EAAgB;EAC/B,UAAA,oBAAC,eAAD,EAAA,UAAgB,WAAW,oBAAC,MAAD,CAAO,CAAA,EAAiB,CAAA;CAC7C,CAAA;AAEZ;AAOA,IAAM,YAAY,EAAE,QAAQ,oBAAoB,cAAc,uDAAoE;CAChI,OACE,qBAAC,OAAD,EAAA,UAAA,CACE,qBAAC,aAAD,EAAA,UAAA;EACE,oBAAC,YAAD;GAAY,SAAQ;GAClB,UAAA,oBAAC,WAAD,CAAY,CAAA;EACF,CAAA;EACZ,oBAAC,YAAD,EAAA,UAAa,MAAkB,CAAA;EAC/B,oBAAC,kBAAD,EAAA,UAAmB,YAA8B,CAAA;CACtC,EAAA,CAAA,GACb,oBAAC,MAAD,CAAO,CAAA,CACF,EAAA,CAAA;AAEX;AASA,IAAM,WAAW,EACf,QAAQ,oBACR,cAAc,wCACd,UAAU,WACV,OAAO,gBACS;CAChB,OACE,qBAAC,MAAD;EAAe;EAAe;EAA9B,UAAA;GACE,oBAAC,WAAD;IAAW,SAAQ;IACjB,UAAA,oBAAC,UAAD,CAAW,CAAA;GACF,CAAA;GACX,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC,WAAD,EAAA,UAAY,MAAiB,CAAA,GAC7B,oBAAC,iBAAD,EAAA,UAAkB,YAA6B,CAAA,CACpC,EAAA,CAAA;GACb,oBAAC,MAAD,CAAO,CAAA;EACH;;AAEV;AAMA,IAAM,UAAU,EAAE,WAAsB;CACtC,OAAO,oBAAC,KAAD,EAAA,UAAM,QAAQ,oBAAC,MAAD,CAAO,CAAA,EAAO,CAAA;AACrC;AAOA,IAAM,aAAa,EAAE,UAAU,WAAW,WAAyB;CACjE,OACE,oBAAC,QAAD;EAAiB;EACf,UAAA,oBAAC,eAAD,EAAA,UAAgB,QAAQ,oBAAC,MAAD,CAAO,CAAA,EAAiB,CAAA;CAC1C,CAAA;AAEZ;AASA,IAAM,cAAc,EAAE,SAAS,WAAW,YAAY,OAAO,QAAQ,SAAS,UAAU,cAA6B;CACnH,OACE,oBAAC,SAAD;EAAgB;EACd,UAAA,qBAAC,gBAAD,EAAA,UAAA;GACE,oBAAC,eAAD,EAAA,UAAgB,OAAsB,CAAA;GACtC,oBAAC,QAAD;IAAiB;IAAgB;IAC/B,UAAA,oBAAC,eAAD,EAAA,UACE,oBAAC,MAAD,CAAO,CAAA,EACM,CAAA;GACT,CAAA;GACR,oBAAC,eAAD,EAAA,UAAgB,UAAyB,CAAA;EAC3B,EAAA,CAAA;CACT,CAAA;AAEb;AAuBA,IAAM,mBAAmB,EACvB,UAAU,CAAC,GACX,OACA,cACA,OAAO,WACP,WAAW,OACX,MACA,MACA,UACA,cACA,YAAY,oBACZ,iBACA,cACwB;CACxB,MAAM,OAAO,QAAQ;CACrB,MAAM,EAAE,SAAS,WAAW;CAC5B,MAAM,gBAAgB,UAAgD;EACpE,MAAM,YAAY,MAAM,OAAO;EAG/B,KAAK,gBAAgB,eAAe;EACpC,KAAK,aAAa,SAAS,SAAS;EACpC,KAAK,cAAc,EAAE,OAAO,UAAU,CAAC;EACvC,KAAK,aAAa,EAAE,OAAO,UAAU,CAAC;CACxC;CAEA,OACE,oBAAC,cAAD;EACE,OAAO,SAAS;EACV;EACI;EACJ;EACA;EACI;EACI;EACd,cAAY;EACZ,oBAAkB;EAClB,gBAAc,WAAW,KAAA;EACzB,UAAU;EAET,UAAA,QAAQ,KAAK,WACZ,oBAAC,oBAAD;GAAuC,OAAO,OAAO;GAAO,UAAU,OAAO;GAC1E,UAAA,OAAO;EACU,GAFK,OAAO,KAEZ,CACrB;CACW,CAAA;AAElB;AAOA,IAAM,cAAc,EAAE,OAAO,WAAW,QAAQ,gBAA+B,oBAAC,SAAD;CAAe;CAAM,cAAY;AAAQ,CAAA;AAExH,IAAa,gCAAgC,QAAgC;CAC3E,cAAiC,oBAAoB,gBAAgB;EACnE,MAAM;EACN,QAAQ,IAAI;EACZ,oBAAoB,CAAC,OAAO;EAC5B,iBAAiB,SAAS,EAAE,OAAO,aAAa,IAAI,KAAK,EAAE;CAC7D,CAAC;CACD,cAAgC,kBAAkB,eAAe;EAC/D,MAAM;EACN,QAAQ,IAAI;EACZ,SAAS;EACT,oBAAoB;GAAC;GAAS;GAAe;GAAS;GAAQ;EAAa;EAC3E,iBAAiB,SAAS;GACxB,OAAO,IAAI,SAAS,KAAA;GACpB,aAAa,IAAI,eAAe,KAAA;GAChC,OAAQ,IAAI,SAAS,KAAA;GACrB,MAAO,IAAI,QAAQ,KAAA;GACnB,aAAc,IAAI,eAAe,KAAA;EACnC;CACF,CAAC;CACD,cAA4B,cAAc,WAAW;EACnD,MAAM,IAAI;EACV,QAAQ,IAAI;EAIZ,SAAS;EACT,oBAAoB;GAAC;GAAW;GAAS;EAAS;EAClD,iBAAiB,SAAS;GACxB,SAAU,IAAI,WAAW,KAAA;GACzB,OAAQ,IAAI,SAAS,KAAA;GACrB,SAAS,IAAI,WAAW,KAAA;EAC1B;CACF,CAAC;CACD,cAA2B,aAAa,UAAU;EAChD,MAAM;EACN,QAAQ,IAAI;EACZ,oBAAoB,CAAC,SAAS,aAAa;EAC3C,iBAAiB,SAAS;GAAE,OAAO,IAAI,SAAS,KAAA;GAAW,aAAa,IAAI,eAAe,KAAA;EAAU;CACvG,CAAC;CACD,cAA0B,YAAY,SAAS;EAC7C,MAAM;EACN,QAAQ,IAAI;EACZ,oBAAoB;GAAC;GAAS;GAAe;GAAW;EAAM;EAC9D,iBAAiB,SAAS;GACxB,OAAO,IAAI,SAAS,KAAA;GACpB,aAAa,IAAI,eAAe,KAAA;GAChC,SAAU,IAAI,WAAW,KAAA;GACzB,MAAO,IAAI,QAAQ,KAAA;EACrB;CACF,CAAC;CACD,cAAyB,WAAW,QAAQ;EAC1C,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,oBAAoB,CAAC,MAAM;EAC3B,iBAAiB,SAAS,EAAE,MAAM,IAAI,QAAQ,KAAA,EAAU;CAC1D,CAAC;CACD,cAA4B,cAAc,WAAW;EACnD,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,oBAAoB,CAAC,WAAW,MAAM;EACtC,iBAAiB,SAAS;GAAE,SAAU,IAAI,WAAW,KAAA;GAA8B,MAAM,IAAI,QAAQ,KAAA;EAAU;CACjH,CAAC;CACD,cAA6B,eAAe,YAAY;EACtD,MAAM;EACN,QAAQ,IAAI;EACZ,oBAAoB;GAAC;GAAU;GAAa;GAAS;EAAS;EAC9D,iBAAiB,SAAS;GACxB,QAAQ,IAAI,UAAU,KAAA;GACtB,WAAW,IAAI,aAAa,KAAA;GAC5B,OAAQ,IAAI,SAAS,KAAA;GACrB,SAAU,IAAI,WAAW,KAAA;EAC3B;CACF,CAAC;CACD,cAAkC,qBAAqB,iBAAiB;EACtE,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,gBAAgB;EAChB,YAAY,UAAU,MAAM,SAAS,MAAM,gBAAgB;EAC3D,eAAe;EACf,iBAAiB,SAAS;GACxB,SAAS,WAAkC,IAAI,OAAO;GACtD,OAAO,IAAI,SAAS,KAAA;GACpB,cAAc,IAAI,oBAAoB,KAAA;GACtC,MAAO,IAAI,QAAQ,KAAA;GACnB,UAAU,WAAW,IAAI,QAAQ;GACjC,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAM,IAAI,QAAQ,KAAA;GAClB,UAAU,WAAW,IAAI,QAAQ;GACjC,cAAc,IAAI,gBAAgB,KAAA;GAClC,WAAW,IAAI,iBAAiB,KAAA;GAChC,iBAAiB,IAAI,uBAAuB,KAAA;GAC5C,SAAS,WAAW,IAAI,OAAO;EACjC;EACA,eAAe,EACb,OAAO;GACL,MAAM,SAAS,KAAK,aAAa,OAAO,KAAK,KAAK,aAAa,eAAe,KAAK;GACnF,MAAM,MAAM,UAAU,KAAK,aAAa,SAAS,OAAO,SAAS,EAAE,CAAC;EACtE,EACF;CACF,CAAC;CACD,cAA6B,eAAe,YAAY;EACtD,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,oBAAoB,CAAC,QAAQ,OAAO;EACpC,iBAAiB,SAAS;GACxB,MAAO,IAAI,QAAkC,KAAA;GAC7C,OAAO,IAAI,SAAS,KAAA;EACtB;CACF,CAAC;AACH;;;;;;;;;;;ACpXA,IAAa,aAAa,UAA2B;CACnD,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,OACE,qBAAC,QAAD;EACE,MAAM,MAAM,QAAQ,MAAM,eAAe;EACzC,OAAO,MAAM,SAAS;EACtB,yBAAyB,MAAM;EAC/B,eAAe,SAAS;GACtB,KAAK,gBAAgB,cAAc;GACnC,YAAY,MAAM,QAAQ,IAAI;GAC9B,KAAK,cAAc,EAAE,KAAK,CAAC;EAC7B;EARF,UAAA,CAUE,oBAAC,eAAD;GAAe,QAAQ,oBAAC,QAAD,EAAQ,SAAQ,UAAW,CAAA;GAAI,UAAA,MAAM,gBAAgB;EAAsB,CAAA,GAClG,qBAAC,eAAD,EAAA,UAAA;IACI,MAAM,WAAW,MAAM,gBACvB,qBAAC,cAAD,EAAA,UAAA,CACG,MAAM,WAAW,oBAAC,aAAD,EAAA,UAAc,MAAM,QAAqB,CAAA,GAC1D,MAAM,eAAe,oBAAC,mBAAD,EAAA,UAAoB,MAAM,YAA+B,CAAA,CACnE,EAAA,CAAA;GAEhB,oBAAC,MAAD,CAAO,CAAA;GACP,oBAAC,cAAD,EAAc,iBAAA,KAAiB,CAAA;EAClB,EAAA,CAAA,CACT;;AAEZ;AAEA,IAAa,qBAAqB,QAAgC;CAGhE,uBAAwC,cAAc,WAAW,KAAK;EACpE,SAAS;EACT,oBAAoB;GAAC;GAAiB;GAAW;GAAe;GAAQ;GAAgB;GAAS;EAA2B;EAC5H,iBAAiB,SAAS;GACxB,cAAc,IAAI,oBAAoB,KAAA;GACtC,SAAS,IAAI,WAAW,KAAA;GACxB,aAAa,IAAI,eAAe,KAAA;GAChC,MAAM,IAAI,QAAQ,OAAO,KAAA,IAAY,WAAW,IAAI,IAAI;GACxD,aAAa,IAAI,mBAAmB,OAAO,KAAA,IAAY,WAAW,IAAI,eAAe;GACrF,OAAO,IAAI,SAAS,OAAO,KAAA,IAAY,WAAW,IAAI,KAAK;GAC3D,yBAAyB,IAAI,gCAAgC,OAAO,KAAA,IAAY,WAAW,IAAI,4BAA4B;EAC7H;EACA,eAAe,EAAE,MAAM,mBAAmB,QAAQ,cAAc,EAAE;CACpE,CAAC;AACH;;;;;;;;;AC7CA,IAAa,aAAa,UAA2B;CACnD,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,OACE,qBAAC,QAAD;EACE,MAAM,MAAM,QAAQ,MAAM,eAAe;EACzC,OAAO,MAAM,SAAS;EACtB,yBAAyB,MAAM;EAC/B,eAAe,SAAS;GACtB,KAAK,gBAAgB,cAAc;GACnC,YAAY,MAAM,QAAQ,IAAI;GAC9B,KAAK,cAAc,EAAE,KAAK,CAAC;EAC7B;EARF,UAAA,CAUE,oBAAC,eAAD;GAAe,QAAQ,oBAAC,QAAD,EAAQ,SAAQ,UAAW,CAAA;GAAI,UAAA,MAAM,gBAAgB;EAAsB,CAAA,GAClG,qBAAC,eAAD;GAAe,MAAM,MAAM,QAAQ;GAAnC,UAAA,EACI,MAAM,WAAW,MAAM,gBACvB,qBAAC,cAAD,EAAA,UAAA,CACG,MAAM,WAAW,oBAAC,aAAD,EAAA,UAAc,MAAM,QAAqB,CAAA,GAC1D,MAAM,eAAe,oBAAC,mBAAD,EAAA,UAAoB,MAAM,YAA+B,CAAA,CACnE,EAAA,CAAA,GAEhB,oBAAC,MAAD,CAAO,CAAA,CACM;EACT,CAAA,CAAA;;AAEZ;AAEA,IAAa,qBAAqB,QAAgC;CAChE,uBAAwC,cAAc,WAAW,KAAK;EACpE,SAAS;EACT,oBAAoB;GAAC;GAAiB;GAAW;GAAe;GAAQ;GAAQ;GAAgB;GAAS;EAA2B;EACpI,iBAAiB,SAAS;GACxB,cAAc,IAAI,oBAAoB,KAAA;GACtC,SAAS,IAAI,WAAW,KAAA;GACxB,aAAa,IAAI,eAAe,KAAA;GAChC,MAAO,IAAI,QAA+B,KAAA;GAC1C,MAAM,IAAI,QAAQ,OAAO,KAAA,IAAY,WAAW,IAAI,IAAI;GACxD,aAAa,IAAI,mBAAmB,OAAO,KAAA,IAAY,WAAW,IAAI,eAAe;GACrF,OAAO,IAAI,SAAS,OAAO,KAAA,IAAY,WAAW,IAAI,KAAK;GAC3D,yBAAyB,IAAI,gCAAgC,OAAO,KAAA,IAAY,WAAW,IAAI,4BAA4B;EAC7H;EACA,eAAe,EAAE,MAAM,mBAAmB,QAAQ,cAAc,EAAE;CACpE,CAAC;AACH;;;;;;;;;ACnCA,IAAa,mBAAmB,UAAiC;CAC/D,MAAM,EAAE,MAAM,SAAS,WAAW;CAClC,MAAM,QAAQ,MAAM,SAAS,CAAC;CAE9B,OACE,qBAAC,cAAD;EACE,MAAM,MAAM,QAAQ,MAAM,eAAe;EACzC,OAAO,MAAM,SAAS;EACtB,UAAU,MAAM;EAChB,WAAW,MAAM,aAAa;EAC9B,sBAAsB,MAAM,wBAAwB;EACpD,eAAe,SAAS;GACtB,KAAK,gBAAgB,cAAc;GACnC,YAAY,MAAM,QAAQ,IAAI;GAC9B,KAAK,cAAc,EAAE,KAAK,CAAC;EAC7B;EAVF,UAAA,CAYE,oBAAC,qBAAD;GAAqB,QAAQ,oBAAC,QAAD,EAAQ,SAAQ,UAAW,CAAA;GAAG,UAAU,MAAM;GACxE,UAAA,MAAM,gBAAgB;EACJ,CAAA,GACrB,oBAAC,qBAAD;GAAqB,MAAM,MAAM;GAAM,OAAO,MAAM;GAAO,YAAY,MAAM;GAAY,aAAa,MAAM;GAC1G,UAAA,qBAAC,mBAAD,EAAA,UAAA,CACG,MAAM,SAAS,oBAAC,mBAAD,EAAA,UAAoB,MAAM,MAAyB,CAAA,GAClE,MAAM,KAAK,SACV,oBAAC,kBAAD;IAEE,UAAU,KAAK;IACf,eAAe,KAAK,cAAc,EAAE,OAAO,KAAK,SAAS,KAAK,MAAM,CAAC;IAEpE,UAAA,KAAK;GACU,GALX,GAAG,KAAK,SAAS,KAAK,MAAM,GAAG,KAAK,OAKzB,CACnB,CACgB,EAAA,CAAA;EACA,CAAA,CACT;;AAElB;AAEA,IAAa,2BAA2B,QAAgC;CACtE,uBAA8C,qBAAqB,iBAAiB,KAAK;EACvF,SAAS;EACT,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,cAAc,IAAI,oBAAoB,KAAA;GACtC,OAAO,IAAI,SAAS,KAAA;GACpB,OAAO,WAAmC,IAAI,KAAK,KAAK,CAAC;GACzD,MAAM,IAAI,QAAQ,OAAO,KAAA,IAAY,WAAW,IAAI,IAAI;GACxD,aAAa,IAAI,mBAAmB,OAAO,KAAA,IAAY,WAAW,IAAI,eAAe;GACrF,OAAO,IAAI,SAAS,OAAO,KAAA,IAAY,WAAW,IAAI,KAAK;GAC3D,UAAU,IAAI,YAAY,OAAO,KAAA,IAAY,WAAW,IAAI,QAAQ;GACpE,WAAW,IAAI,iBAAiB,OAAO,KAAA,IAAY,WAAW,IAAI,aAAa;GAC/E,sBAAsB,IAAI,8BAA8B,OAAO,KAAA,IAAY,WAAW,IAAI,0BAA0B;GACpH,MAAO,IAAI,QAA0C,KAAA;GACrD,OAAQ,IAAI,SAA4C,KAAA;GACxD,YAAY,aAAa,IAAI,cAAc;GAC3C,aAAa,aAAa,IAAI,eAAe;EAC/C;EACA,eAAe,EAAE,MAAM,mBAAmB,QAAQ,cAAc,EAAE;CACpE,CAAC;AACH;;;ACxGA,IAAM,yBACJ;AAaF,IAAM,mBAA4D;CAChE,CAAC,cAAc,eAAe;CAC9B,CAAC,oBAAoB,qBAAqB;CAC1C,CAAC,WAAW,iBAAiB;AAC/B;AAEA,IAAM,gBAAgB,SAAsC,MAAM,KAAK,KAAK,iBAAgC,sBAAsB,CAAC;AAEnI,IAAM,0BAA0B,YAAiC;CAC/D,KAAK,MAAM,CAAC,WAAW,iBAAiB,kBACtC,IAAI,QAAQ,QAAQ,kBAAkB,QAAQ;EAC5C,QAAQ,gBAAgB,SAAS;EACjC,OAAO,QAAQ,QAAQ;CACzB;AAEJ;AAEA,IAAM,qBAAqB,SAAwB,WAA4B,cAA6B,UAAoC;CAC9I,MAAM,eAAe,QAAQ,QAAQ,kBAAkB;CACvD,IAAI,UAAU,KAAA,GAAW;EACvB,IAAI,CAAC,QAAQ,aAAa,SAAS,KAAK,cAAc;GACpD,QAAQ,aAAa,WAAW,KAAK;GACrC,QAAQ,QAAQ,gBAAgB;EAClC;EACA;CACF;CAEA,IAAI,cAAc;EAChB,QAAQ,gBAAgB,SAAS;EACjC,OAAO,QAAQ,QAAQ;CACzB;AACF;AAEA,IAAM,uBAAuB,SAAwB,YAAwC;CAC3F,kBAAkB,SAAS,cAAc,iBAAiB,QAAQ,KAAK;CACvE,kBAAkB,SAAS,oBAAoB,uBAAuB,QAAQ,eAAe,KAAA,CAAS;CACtG,kBAAkB,SAAS,WAAW,mBAAmB,QAAQ,UAAU,SAAS,KAAA,CAAS;AAC/F;AAEA,IAAa,yBAAyB,MAAmB,YAAgD;CACvG,MAAM,EAAE,aAAa,SAAS,UAAU;CACxC,MAAM,aAAa,OAAO,OAAO;CACjC,MAAM,cAAc,uBAAO,IAAI,IAAmB,CAAC;CACnD,WAAW,UAAU;EAAE;EAAa;EAAS;CAAM;CAEnD,MAAM,kBAAkB,aAAa,YAAiC;EACpE,YAAY,QAAQ,IAAI,OAAO;EAC/B,oBAAoB,SAAS,WAAW,OAAO;CACjD,GAAG,CAAC,CAAC;CAEL,MAAM,eAAe,kBAAwB;EAC3C,MAAM,WAAW,IAAI,IAAI,aAAa,IAAI,CAAC;EAC3C,KAAK,MAAM,WAAW,YAAY,SAChC,IAAI,CAAC,SAAS,IAAI,OAAO,GACvB,uBAAuB,OAAO;EAGlC,KAAK,MAAM,WAAW,UACpB,gBAAgB,OAAO;EAEzB,YAAY,UAAU;CACxB,GAAG,CAAC,MAAM,eAAe,CAAC;CAE1B,gBAAgB;EACd,KAAK,MAAM,WAAW,YAAY,SAChC,oBAAoB,SAAS;GAAE;GAAa;GAAS;EAAM,CAAC;CAEhE,GAAG;EAAC;EAAa;EAAS;CAAK,CAAC;CAEhC,sBAAsB;EACpB,MAAM,wBAAwB,UAAuB;GACnD,MAAM,oBAAoB;GAC1B,MAAM,EAAE,SAAS,eAAe,kBAAkB;GAClD,IAAI,CAAC,KAAK,SAAS,OAAO,GACxB;GAEF,kBAAkB,gBAAgB;GAClC,gBAAgB,OAAO;GACvB,iBAAiB;IACf,IAAI,YAAY,QAAQ,OAAO,OAAO,GACpC,uBAAuB,OAAO;GAElC,CAAC;EACH;EAEA,KAAK,iBAAiB,iCAAiC,oBAAoB;EAC3E,MAAM,OAAO,KAAK,YAAY,cAAc,MAAM;EAClD,MAAM,iBAAiB,cAAc,YAAY;EACjD,aAAa;EAEb,aAAa;GACX,KAAK,oBAAoB,iCAAiC,oBAAoB;GAC9E,MAAM,oBAAoB,cAAc,YAAY;GACpD,KAAK,MAAM,WAAW,YAAY,SAChC,uBAAuB,OAAO;GAEhC,YAAY,QAAQ,MAAM;EAC5B;CACF,GAAG;EAAC;EAAM;EAAiB;CAAY,CAAC;CAExC,OAAO,kBAAwB;EAC7B,MAAM,UAAU,KAAK,cAA2B,sBAAsB;EACtE,SAAS,MAAM;EACf,IAAI,SAAS,QAAQ,0BAA0B,GAC7C,QAAQ,MAAM;CAElB,GAAG,CAAC,IAAI,CAAC;AACX;;;AC/GA,IAAa,YAAY,UAA0B;CACjD,MAAM,EAAE,SAAS,WAAW;CAC5B,MAAM,wBAAwB,CAAC,MAAM,aAAa,MAAM,UAAU,MAAM,QAAQ,KAAA,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CACnH,MAAM,eAAe,sBAAsB,MAAM;EAC/C,OAAO,MAAM;EACb,aAAa;EACb,SAAS,MAAM,WAAW;CAC5B,CAAC;CAED,OACE,qBAAC,OAAD;EAAO,SAAS,MAAM,WAAW;EAAjC,UAAA;GACG,MAAM,SAAS,oBAAC,YAAD;IAAY,SAAS;IAAe,UAAA,MAAM;GAAkB,CAAA;GAC5E,oBAAC,MAAD,CAAO,CAAA;GACN,MAAM,eAAe,oBAAC,kBAAD,EAAA,UAAmB,MAAM,YAA8B,CAAA;GAC5E,MAAM,WAAW,MAAM,SAAS,oBAAC,YAAD,EAAA,UAAa,MAAM,MAAkB,CAAA;EACjE;;AAEX;AAEA,IAAa,oBAAoB,QAAgC;CAC/D,cAA8B,aAAa,UAAU;EACnD,MAAM;EACN,QAAQ,IAAI;EACZ,oBAAoB;GAAC;GAAS;GAAe;GAAS;EAAS;EAC/D,iBAAiB,SAAS;GACxB,OAAO,IAAI,SAAS,KAAA;GACpB,aAAa,IAAI,eAAe,KAAA;GAChC,OAAO,IAAI,SAAS,KAAA;GACpB,SAAS,WAAW,IAAI,OAAO;EACjC;CACF,CAAC;AACH;;;AC5BA,IAAa,gBAAgB,UAA8B;CACzD,OACE,oBAAC,WAAD;EAAW,SAAS,MAAM,WAAW;EAAW,MAAM,MAAM,QAAQ;EAAO,OAAO,MAAM,SAAS;EAC/F,UAAA,oBAAC,MAAD,CAAO,CAAA;CACE,CAAA;AAEf;AAEA,IAAa,wBAAwB,QAAgC;CACnE,cAAkC,iBAAiB,cAAc;EAC/D,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,oBAAoB;GAAC;GAAW;GAAQ;EAAO;EAC/C,iBAAiB,SAAS;GACxB,SAAU,IAAI,WAAW,KAAA;GACzB,MAAO,IAAI,QAAQ,KAAA;GACnB,OAAQ,IAAI,SAAS,KAAA;EACvB;CACF,CAAC;AACH;;;ACFA,IAAa,YAAY,UAA0B;CACjD,MAAM,EAAE,MAAM,MAAM,iBAAiB,WAAW;CAChD,MAAM,cAAc,MAAM,SAAS;CAEnC,OACE,oBAAC,OAAD;EACE,MAAM,MAAM,QAAQ;EACpB,OAAO,cAAc,KAAA,IAAa,MAAM,SAAS;EACjD,aAAa,MAAM;EACnB,UAAU,MAAM,YAAY;EAC5B,UAAU,MAAM,YAAY;EAC5B,gBAAc,MAAM,WAAW,KAAA;EAC/B,MAAM,MAAM;EACZ,MAAM,MAAM;EACZ,UAAU,MAAM,YAAY;EAC5B,cAAc,MAAM;EACpB,WAAW,MAAM;EACjB,KAAK,MAAM;EACX,KAAK,MAAM;EACX,MAAM,MAAM;EACZ,WAAW,MAAM;EACjB,WAAW,MAAM;EACjB,SAAS,MAAM;EACf,QAAQ,MAAM;EACd,UAAU,MAAM,YAAY;EAC5B,YAAY,MAAM;EAClB,WAAW,MAAM;EACjB,cAAY,MAAM;EAClB,oBAAkB,MAAM;EACxB,WAAW,UAAU;GACnB,MAAM,EAAE,UAAU,MAAM;GACxB,KAAK,aAAa,SAAS,KAAK;GAChC,IAAI,aAAa;IACf,MAAM,QAAQ,MAAM,KAAK,MAAM,OAAO,SAAS,CAAC,CAAC;IACjD,aAAa,MAAM,WAAW,kBAAkB,MAAM,KAAK,IAAK,MAAM,MAAM,IAAK;GACnF;GACA,KAAK,cAAc;IAAE;IAAO,OAAO,MAAM,OAAO,QAAQ,MAAM,KAAK,MAAM,OAAO,KAAK,IAAI,KAAA;GAAU,CAAC;EACtG;CACD,CAAA;AAEL;AAEA,IAAa,oBAAoB,QAAgC;CAC/D,cAA8B,aAAa,UAAU;EACnD,MAAM,IAAI;EACV,QAAQ,IAAI;EAGZ,SAAS;EACT,eAAe;EACf,gBAAgB;EAChB,YAAY,UAAW,MAAM,SAAS,SAAS,OAAQ,MAAM,SAAS;EACtE,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,OAAO,IAAI,SAAS,KAAA;GACpB,aAAa,IAAI,eAAe,KAAA;GAChC,MAAM,IAAI,QAAQ,KAAA;GAClB,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,SAAS,WAAW,IAAI,OAAO;GAC/B,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAM,IAAI,QAAQ,KAAA;GAClB,UAAU,WAAW,IAAI,QAAQ;GACjC,cAAc,IAAI,gBAAgB,KAAA;GAClC,WAAY,IAAI,aAAgD,KAAA;GAChE,KAAK,IAAI,OAAO,KAAA;GAChB,KAAK,IAAI,OAAO,KAAA;GAChB,MAAM,IAAI,QAAQ,KAAA;GAClB,WAAW,aAAa,IAAI,SAAS;GACrC,WAAW,aAAa,IAAI,SAAS;GACrC,SAAS,IAAI,WAAW,KAAA;GACxB,QAAQ,IAAI,UAAU,KAAA;GACtB,UAAU,WAAW,IAAI,QAAQ;GACjC,YAAY,IAAI,cAAc,OAAO,KAAA,IAAY,WAAW,IAAI,UAAU;GAC1E,WAAW,WAAW,IAAI,SAAS;GACnC,WAAW,IAAI,iBAAiB,KAAA;GAChC,iBAAiB,IAAI,uBAAuB,KAAA;EAC9C;EAIA,eAAe,EACb,OAAO;GACL,MAAM,SAAS,KAAK,aAAa,OAAO,KAAK;GAC7C,MAAM,MAAM,UAAU;IACpB,KAAK,aAAa,SAAS,OAAO,SAAS,EAAE,CAAC;GAChD;EACF,EACF;CACF,CAAC;AACH;;;ACjHA,IAAa,iBAAiB,UAA+B;CAC3D,MAAM,EAAE,MAAM,MAAM,iBAAiB,WAAW;CAEhD,OACE,qBAAC,YAAD;EAAY,iBAAe,MAAM,YAAY,KAAA;EAAW,iBAAe,MAAM,YAAY,KAAA;EAAzF,UAAA;IACI,MAAM,UAAU,MAAM,UAAU,oBAAC,iBAAD,EAAA,UAAkB,MAAM,UAAU,MAAM,MAAuB,CAAA;GACjG,oBAAC,iBAAD;IACE,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ,OAAO,MAAM,SAAS,SAAS,KAAA,IAAa,MAAM,SAAS;IAC3D,aAAa,MAAM;IACnB,UAAU,MAAM,YAAY;IAC5B,UAAU,MAAM,YAAY;IAC5B,UAAU,MAAM,YAAY;IAC5B,cAAc,MAAM;IACpB,WAAW,MAAM;IACjB,KAAK,MAAM;IACX,KAAK,MAAM;IACX,MAAM,MAAM;IACZ,WAAW,MAAM;IACjB,WAAW,MAAM;IACjB,SAAS,MAAM;IACf,QAAQ,MAAM;IACd,UAAU,MAAM;IAChB,YAAY,MAAM;IAClB,WAAW,MAAM;IACjB,gBAAc,MAAM,WAAW,KAAA;IAC/B,cAAY,MAAM;IAClB,oBAAkB,MAAM;IACxB,WAAW,UAAU;KACnB,MAAM,EAAE,UAAU,MAAM;KACxB,KAAK,aAAa,SAAS,KAAK;KAChC,MAAM,QAAQ,MAAM,OAAO,QAAQ,MAAM,KAAK,MAAM,OAAO,KAAK,IAAI,KAAA;KACpE,IAAI,MAAM,SAAS,QACjB,aAAa,MAAM,WAAW,kBAAkB,MAAM,SAAS,CAAC,CAAC,IAAK,QAAQ,MAAM,IAAK;KAE3F,KAAK,cAAc;MAAE;MAAO;KAAM,CAAC;IACrC;GACD,CAAA;GACA,MAAM,UAAU,oBAAC,iBAAD;IAAiB,OAAM;IAAc,UAAA,MAAM;GAAwB,CAAA;GACnF,MAAM,eACL,oBAAC,iBAAD;IAAiB,OAAM;IACrB,UAAA,oBAAC,kBAAD;KAAkB,eAAe,KAAK,YAAY;KAAI,UAAA,MAAM;IAA8B,CAAA;GAC3E,CAAA;EAET;;AAEhB;AAEA,IAAa,yBAAyB,QAAgC;CACpE,cAAmC,mBAAmB,eAAe;EACnE,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,eAAe;EACf,gBAAgB;EAChB,YAAY,UAAW,MAAM,SAAS,SAAS,OAAQ,MAAM,SAAS;EACtE,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,OAAO,IAAI,SAAS,KAAA;GACpB,QAAQ,IAAI,UAAU,KAAA;GACtB,QAAQ,IAAI,UAAU,KAAA;GACtB,aAAa,IAAI,mBAAmB,KAAA;GACpC,aAAa,IAAI,eAAe,KAAA;GAChC,OAAO,IAAI,SAAS,KAAA;GACpB,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,SAAS,WAAW,IAAI,OAAO;GAC/B,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAM,IAAI,QAAQ,KAAA;GAClB,UAAU,WAAW,IAAI,QAAQ;GACjC,cAAc,IAAI,gBAAgB,KAAA;GAClC,WAAY,IAAI,aAAkD,KAAA;GAClE,KAAK,IAAI,OAAO,KAAA;GAChB,KAAK,IAAI,OAAO,KAAA;GAChB,MAAM,IAAI,QAAQ,KAAA;GAClB,WAAW,IAAI,aAAa,OAAO,KAAA,IAAY,OAAO,IAAI,SAAS;GACnE,WAAW,IAAI,aAAa,OAAO,KAAA,IAAY,OAAO,IAAI,SAAS;GACnE,SAAS,IAAI,WAAW,KAAA;GACxB,QAAQ,IAAI,UAAU,KAAA;GACtB,UAAU,WAAW,IAAI,QAAQ;GACjC,YAAY,IAAI,cAAc,OAAO,KAAA,IAAY,WAAW,IAAI,UAAU;GAC1E,WAAW,WAAW,IAAI,SAAS;GACnC,WAAW,IAAI,iBAAiB,KAAA;GAChC,iBAAiB,IAAI,uBAAuB,KAAA;EAC9C;EACA,eAAe,EACb,OAAO;GACL,MAAM,SAAS,KAAK,aAAa,OAAO,KAAK;GAC7C,MAAM,MAAM,UAAU;IACpB,KAAK,aAAa,SAAS,OAAO,SAAS,EAAE,CAAC;GAChD;EACF,EACF;CACF,CAAC;AACH;;;ACzIA,IAAM,cAAc,OAA0B,QAAgB,OAAe,eAAoC,eAAoC;CACnJ,MAAM,aAAa;EACjB,WAAW;EACX;EACA,UAAU,MAAM,YAAY;EAC5B,UAAU,MAAM,YAAY;EAC5B,UAAU,MAAM,YAAY;EAC5B,MAAM,MAAM;EACZ,MAAM,MAAM;EACZ,cAAc,MAAM;EACpB,WAAW,MAAM;EACjB,SAAS,MAAM;EACf,gBAAgB,MAAM,WAAW,KAAA;EACjC,cAAc,MAAM;EACpB,oBAAoB,MAAM;EAC1B,UAAU;EACV;CACF;CAEA,IAAI,WAAW,GACb,OACE,qBAAC,UAAD;EAAU,GAAI;EAAd,UAAA;GACE,qBAAC,eAAD,EAAA,UAAA;IACE,oBAAC,cAAD,EAAc,OAAO,EAAI,CAAA;IACzB,oBAAC,cAAD,EAAc,OAAO,EAAI,CAAA;IACzB,oBAAC,cAAD,EAAc,OAAO,EAAI,CAAA;GACZ,EAAA,CAAA;GACf,oBAAC,mBAAD,CAAoB,CAAA;GACpB,qBAAC,eAAD,EAAA,UAAA;IACE,oBAAC,cAAD,EAAc,OAAO,EAAI,CAAA;IACzB,oBAAC,cAAD,EAAc,OAAO,EAAI,CAAA;IACzB,oBAAC,cAAD,EAAc,OAAO,EAAI,CAAA;GACZ,EAAA,CAAA;EACP;;CAId,OACE,oBAAC,UAAD;EAAU,GAAI;EACZ,UAAA,oBAAC,eAAD,EAAA,UACG,MAAM,KAAK,EAAE,OAAO,IAAI,GAAG,MAE1B,oBAAC,cAAD,EAAgC,OAAO,EAAI,GAAxB,QAAQ,GAAgB,CAC5C,EACY,CAAA;CACP,CAAA;AAEd;AAEA,IAAa,eAAe,UAA6B;CACvD,MAAM,EAAE,MAAM,SAAS,WAAW;CAClC,MAAM,SAAS,MAAM,UAAU;CAC/B,MAAM,QAAQ,MAAM,SAAS,MAAM,gBAAgB;CAEnD,MAAM,qBAAqB,SAAiB;EAC1C,KAAK,gBAAgB,eAAe;EACpC,KAAK,aAAa,SAAS,IAAI;EAC/B,KAAK,cAAc,EAAE,OAAO,KAAK,CAAC;CACpC;CAEA,OAAO,WAAW,OAAO,QAAQ,OAAO,oBAAoB,SAAS,KAAK,gBAAgB,EAAE,OAAO,KAAK,CAAC,CAAC;AAC5G;AAEA,IAAa,uBAAuB,QAAgC;CAClE,cAAiC,iBAAiB,aAAa;EAC7D,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EAGT,eAAe;EACf,gBAAgB;EAChB,YAAY,UAAU,MAAM,SAAS,MAAM,gBAAgB;EAC3D,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,QAAQ,aAAa,IAAI,MAAM,KAAK;GACpC,OAAO,IAAI,SAAS,KAAA;GACpB,cAAc,IAAI,oBAAoB,KAAA;GACtC,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAM,IAAI,QAAQ,KAAA;GAClB,cAAc,IAAI,gBAAgB,KAAA;GAClC,WAAY,IAAI,aAAgD,KAAA;GAChE,SAAS,IAAI,WAAW,KAAA;GACxB,SAAS,WAAW,IAAI,OAAO;GAC/B,WAAW,IAAI,iBAAiB,KAAA;GAChC,iBAAiB,IAAI,uBAAuB,KAAA;EAC9C;EACA,eAAe,EACb,OAAO;GACL,MAAM,SAAS,KAAK,aAAa,OAAO,KAAK,KAAK,aAAa,eAAe,KAAK;GACnF,MAAM,MAAM,UAAU;IACpB,KAAK,aAAa,SAAS,OAAO,SAAS,EAAE,CAAC;GAChD;EACF,EACF;CACF,CAAC;AACH;;;AC7BA,IAAM,kBAAkB,EACtB,eAAe,eACf,UAAU,4BACV,cAAc,iCACd,eAAe,YACf,cAAc,UACd,MACA,kBACuB;CACvB,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,OACE,qBAAC,aAAD;EACE,MAAM,QAAQ,eAAe;EAC7B,eAAe,aAAa;GAC1B,KAAK,gBAAgB,cAAc;GACnC,YAAY,MAAM,QAAQ,QAAQ;GAClC,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;EACvC;EANF,UAAA,CAQE,oBAAC,oBAAD;GAAoB,QAAQ,oBAAC,QAAD,EAAQ,SAAQ,UAAW,CAAA;GAAI,UAAA;EAAiC,CAAA,GAC5F,qBAAC,oBAAD,EAAA,UAAA,CACE,qBAAC,mBAAD,EAAA,UAAA,CACE,oBAAC,kBAAD,EAAA,UAAmB,QAA0B,CAAA,GAC7C,oBAAC,wBAAD,EAAA,UAAyB,YAAoC,CAAA,CAC5C,EAAA,CAAA,GACnB,qBAAC,mBAAD,EAAA,UAAA,CACE,oBAAC,mBAAD,EAAA,UAAoB,YAA+B,CAAA,GACnD,oBAAC,mBAAD;GACE,eAAe;IACb,KAAK,cAAc,EAAE,QAAQ,UAAU,CAAC;GAC1C;GAEC,UAAA;EACgB,CAAA,CACF,EAAA,CAAA,CACD,EAAA,CAAA,CACT;;AAEjB;AAWA,IAAM,eAAe,EACnB,QAAQ;CAAC;CAAe;CAAgB;AAAa,GACrD,cAAc,cACd,SACA,MACA,UACA,iBACoB;CACpB,MAAM,EAAE,MAAM,SAAS,WAAW;CAClC,MAAM,CAAC,KAAK,UAAU,SAAuB;CAE7C,gBAAgB;EACd,IAAI,CAAC,KACH;EAEF,MAAM,qBAA2B;GAC/B,MAAM,OAAO,IAAI,mBAAmB;GACpC,IAAI,CAAC,OAAO,SAAS,IAAI,GACvB;GAEF,KAAK,aAAa,WAAW,OAAO,IAAI,CAAC;GACzC,KAAK,cAAc,EAAE,OAAO,KAAK,CAAC;EACpC;EACA,IAAI,GAAG,UAAU,YAAY;EAC7B,IAAI,GAAG,UAAU,YAAY;EAC7B,aAAa;GACX,IAAI,IAAI,UAAU,YAAY;GAC9B,IAAI,IAAI,UAAU,YAAY;EAChC;CACF,GAAG;EAAC;EAAK;EAAM;CAAI,CAAC;CAEpB,gBAAgB;EACd,IAAI,OAAO,WAAW,QAAQ,IAAI,mBAAmB,MAAM,SACzD,IAAI,SAAS,OAAO;CAExB,GAAG,CAAC,KAAK,OAAO,CAAC;CAEjB,OACE,qBAAC,UAAD;EACe;EACb,MAAM;GAAE,MAAM,QAAQ;GAAO,UAAU,YAAY;GAAO,YAAY,cAAc;EAAE;EAC9E;EACR,WAAU;EAJZ,UAAA;GAME,oBAAC,iBAAD,EAAA,UACG,MAAM,KAAK,SACV,oBAAC,cAAD,EAAA,UACE,oBAAC,OAAD;IAAK,WAAU;IAA2F,UAAA;GAAU,CAAA,EACxG,GAFK,IAEL,CACf,EACc,CAAA;GACjB,oBAAC,kBAAD,CAAmB,CAAA;GACnB,oBAAC,cAAD,CAAe,CAAA;EACP;;AAEd;AAWA,IAAM,YAAY,EAChB,OAAO;CACL;EAAE,OAAO;EAAO,OAAO;CAAG;CAC1B;EAAE,OAAO;EAAO,OAAO;CAAG;CAC1B;EAAE,OAAO;EAAO,OAAO;CAAG;CAC1B;EAAE,OAAO;EAAO,OAAO;CAAG;AAC5B,QACiB;CACjB,OACE,oBAAC,gBAAD;EAAgB,QAAQ,EAAE,OAAO;GAAE,OAAO;GAAS,OAAO;EAAiB,EAAE;EAAG,WAAU;EACxF,UAAA,qBAAC,UAAD;GAAgB;GAAM,oBAAA;GAAtB,UAAA;IACE,oBAAC,eAAD,EAAe,UAAU,MAAQ,CAAA;IACjC,oBAAC,OAAD;KAAO,SAAQ;KAAQ,UAAU;KAAO,UAAU;IAAQ,CAAA;IAC1D,oBAAC,KAAD;KAAK,SAAQ;KAAQ,MAAK;KAAqB,QAAQ;IAAI,CAAA;GACnD;;CACI,CAAA;AAEpB;AASA,IAAM,kBAAkB,EAAE,eAAe,gBAAgB,MAAM,aAAa,eAAkC;CAC5G,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,OACE,qBAAC,aAAD;EACE,MAAM,QAAQ,eAAe;EACnB;EACV,eAAe,aAAa;GAC1B,KAAK,gBAAgB,cAAc;GACnC,YAAY,MAAM,QAAQ,QAAQ;GAClC,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;EACvC;EACA,WAAU;EARZ,UAAA,CAUE,oBAAC,oBAAD;GAAoB,QAAQ,oBAAC,QAAD,EAAQ,SAAQ,UAAW,CAAA;GAAa;GACjE,UAAA;EACiB,CAAA,GACpB,oBAAC,oBAAD;GAAoB,WAAU;GAC5B,UAAA,oBAAC,MAAD,CAAO,CAAA;EACW,CAAA,CACT;;AAEjB;AAYA,IAAM,cAAc,EAClB,cAAc,6BACd,aAAa,qBACb,QAAQ,CAAC,GACT,OACA,MACA,yBACA,kBACmB;CACnB,MAAM,EAAE,MAAM,SAAS,WAAW;CAClC,OACE,qBAAC,SAAD;EAAe;EAA+B;EAAsC;EAAa,WAAU;EAA3G,UAAA,CACE,oBAAC,cAAD;GACe;GACb,OAAO,SAAS;GAChB,gBAAgB,cAAc;IAC5B,KAAK,aAAa,SAAS,SAAS;IACpC,KAAK,oBAAoB,EAAE,OAAO,UAAU,CAAC;GAC/C;EACD,CAAA,GACD,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC,cAAD,EAAA,UAAe,WAAyB,CAAA,GACvC,MAAM,KAAK,SACV,oBAAC,aAAD;GAEE,OAAO,KAAK,SAAS,KAAK;GAC1B,UAAU,KAAK;GACf,WAAW,UAAU,KAAK,cAAc,EAAE,MAAM,CAAC;GAEhD,UAAA,KAAK;EACK,GANN,KAAK,SAAS,KAAK,KAMb,CACd,CACU,EAAA,CAAA,CACN;;AAEb;AAgBA,IAAM,kBAAkB,EACtB,QAAQ,CAAC,GACT,QAAQ,oBACR,MACA,aACA,UACA,YAAY,MACZ,uBAAuB,MACvB,MACA,OACA,YACA,kBACuB;CACvB,MAAM,EAAE,MAAM,SAAS,WAAW;CAClC,OACE,qBAAC,aAAD;EACE,MAAM,QAAQ,eAAe;EACnB;EACC;EACW;EACtB,eAAe,aAAa;GAC1B,KAAK,gBAAgB,cAAc;GACnC,YAAY,MAAM,QAAQ,QAAQ;GAClC,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;EACvC;EATF,UAAA,CAWE,oBAAC,oBAAD;GAAoB,WAAU;GAC3B,UAAA;EACiB,CAAA,GACpB,oBAAC,oBAAD;GAA0B;GAAa;GAAmB;GAAyB;GAChF,UAAA,MAAM,KAAK,SACV,oBAAC,iBAAD;IAEE,UAAU,KAAK;IACf,eAAe,KAAK,cAAc,EAAE,OAAO,KAAK,SAAS,KAAK,MAAM,CAAC;IAEpE,UAAA,KAAK;GACS,GALV,KAAK,SAAS,KAAK,KAKT,CAClB;EACiB,CAAA,CACT;;AAEjB;AAMA,IAAM,gBAAgB,EAAE,YAAY,YAA6B;CAC/D,OACE,oBAAC,mBAAD;EAA8B;EAC5B,UAAA,oBAAC,OAAD;GAAK,KAAK;GAAW,WAAU;GAC7B,UAAA,oBAAC,MAAD,CAAO,CAAA;EACJ,CAAA;CACY,CAAA;AAEvB;AAgBA,IAAM,gBAAgB,EACpB,eAAe,qBACf,UAAU,iBACV,cAAc,gDACd,MACA,aACA,OACA,YACA,MACA,OACA,YACA,kBACqB;CACrB,MAAM,EAAE,MAAM,SAAS,WAAW;CAClC,OACE,qBAAC,WAAD;EACE,MAAM,QAAQ,eAAe;EAC7B,eAAe,SAAS;GACtB,KAAK,gBAAgB,cAAc;GACnC,YAAY,MAAM,QAAQ,IAAI;GAC9B,KAAK,cAAc,EAAE,KAAK,CAAC;EAC7B;EANF,UAAA,CAQE,oBAAC,kBAAD;GAAkB,QAAQ,oBAAC,QAAD,EAAQ,SAAQ,OAAQ,CAAA;GAAU;GAAmB;GAC5E,UAAA;EACe,CAAA,GAClB,qBAAC,kBAAD;GAAwB;GAAa;GAAmB;GAAyB;GAAjF,UAAA,CACE,oBAAC,KAAD;IAAG,WAAU;IAAe,UAAA;GAAW,CAAA,GACvC,oBAAC,KAAD;IAAG,WAAU;IAAsC,UAAA;GAAe,CAAA,CAClD;EACT,CAAA,CAAA;;AAEf;AAeA,IAAM,cAAc,EAAE,QAAQ,CAAC,GAAG,UAAU,QAAQ,MAAM,aAAa,YAAY,WAA0B;CAC3G,MAAM,OAAO,QAAQ;CACrB,OACE,oBAAC,SAAD;EAAmB;EAAiB;EAAoB;EAAwB;EAC7E,UAAA,MAAM,KAAK,SACV,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC,gBAAD,EAAA,UAAiB,KAAK,MAAsB,CAAA,GAC5C,oBAAC,gBAAD,EAAA,UACG,KAAK,MAAM,KAAK,SACf,oBAAC,aAAD;GAEE,UAAU,KAAK;GACf,eAAe,KAAK,cAAc,EAAE,OAAO,KAAK,SAAS,KAAK,MAAM,CAAC;GAEpE,UAAA,KAAK;EACK,GALN,KAAK,SAAS,KAAK,KAKb,CACd,EACa,CAAA,CACL,EAAA,GAbK,KAAK,KAaV,CACd;CACM,CAAA;AAEb;AAcA,IAAM,sBAAsB,EAC1B,QAAQ,CAAC,GACT,YACA,wBAAwB,OACxB,qBACA,wBACA,cACA,yBACA,iBACA,qBAC2B;CAC3B,OACE,oBAAC,yBAAD;EACc;EACW;EACF;EACG;EACV;EAEd,UAAA,qBAAC,iBAAD;GAAiB,WAAU;GAA3B,UAAA,CACE,oBAAC,yBAAD;IAAyB,cAAW;IAAoC;IACtE,UAAA,oBAAC,wBAAD;KAAwB,WAAU;KAC/B,UAAA,MAAM,KAAK,MAAM,UAChB,oBAAC,qBAAD;MAAgC,WAAW,WAAW;MAAS,WAAU;MACtE,UAAA;KACkB,GAFK,IAEL,CACtB;IACqB,CAAA;GACD,CAAA,GACzB,oBAAC,uBAAD;IAAuB,WAAW;IAAiB,UAAU;GAAiB,CAAA,CAC/D;;CACM,CAAA;AAE7B;AAaA,IAAM,qBAAqB,EAAE,QAAQ,CAAC,GAAG,OAAO,cAAc,aAAa,OAAO,YAAY,OAAO,gBAAsC;CACzI,MAAM,EAAE,MAAM,SAAS,WAAW;CAClC,OACE,oBAAC,gBAAD;EACE,OAAO,SAAS;EACH;EACN;EACK;EACL;EACP,cAAY;EACZ,gBAAgB,cAAc;GAC5B,KAAK,gBAAgB,eAAe;GACpC,IAAI,WACF,KAAK,aAAa,SAAS,SAAS;QAEpC,KAAK,gBAAgB,OAAO;GAE9B,KAAK,cAAc,EAAE,OAAO,UAAU,CAAC;EACzC;EAEA,UAAA,oBAAC,oBAAD,EAAA,UACG,MAAM,KAAK,SACV,oBAAC,oBAAD,EAAA,UACE,oBAAC,oBAAD;GACE,MAAM,KAAK,WAAW,KAAA,IAAa,KAAK,QAAQ;GAChD,QAAQ,KAAK;GACb,iBAAe,KAAK,YAAY,KAAA;GAChC,UAAU,UAAU;IAClB,IAAI,KAAK,UAAU;KACjB,MAAM,eAAe;KACrB;IACF;IACA,KAAK,cAAc,EAAE,OAAO,KAAK,SAAS,KAAK,MAAM,CAAC;GACxD;GAEC,UAAA,KAAK;EACY,CAAA,EACF,GAfK,KAAK,SAAS,KAAK,KAexB,CACrB,EACiB,CAAA;CACN,CAAA;AAEpB;AAkBA,IAAM,oBAAoB,EACxB,OAAO,cACP,QAAQ,oBACR,aACA,UAAU,CAAC,GACX,WAAW,MACX,eACyB;CACzB,MAAM,OAAO,QAAQ;CACrB,MAAM,gBAAgB,UAA4C;EAChE,MAAM,eAAe;EACrB,KAAK,cAAc,OAAO,YAAY,IAAI,SAAS,MAAM,aAAa,CAAC,CAAC;CAC1E;CAEA,OACE,qBAAC,eAAD;EAAe,OAAO,CAAC;GAAE;GAAM;GAAU;EAAQ,CAAC;EAAG,aAAa;EAAM,UAAU;EAAlF,UAAA;GACE,oBAAC,uBAAD,CAAwB,CAAA;GACxB,qBAAC,mBAAD;IAAyB;IAAgB;IAAoB;IAA7D,UAAA;KACE,oBAAC,oBAAD,EAAA,UAAqB,MAA0B,CAAA;KAC9C,cAAc,oBAAC,0BAAD,EAAA,UAA2B,YAAsC,CAAA,IAAI;KACpF,oBAAC,sBAAD,EAAA,UACG,QAAQ,KAAK,WACZ,qBAAC,qBAAD;MAAwC,OAAO,OAAO;MAAO,UAAU,OAAO;MAA9E,UAAA,CACE,oBAAC,QAAD,EAAA,UAAO,OAAO,MAAY,CAAA,GACzB,OAAO,eAAe,oBAAC,gCAAD,EAAA,UAAiC,OAAO,YAA4C,CAAA,CACxF;KAHK,GAAA,OAAO,KAGZ,CACtB,EACmB,CAAA;IACL;;GACnB,oBAAC,sBAAD,EAAA,UACE,oBAAC,qBAAD,CAAsB,CAAA,EACF,CAAA;EACT;;AAEnB;AAYA,IAAM,gBAAgB,EACpB,YAAY,IACZ,cAAc,cACd,UACA,cACA,cACA,kBACA,yBACqB;CACrB,MAAM,OAAO,QAAQ;CACrB,OACE,qBAAC,qBAAD;EACe;EACH;EACV,kBAAkB,WAAW,KAAK,cAAc,EAAE,OAAO,OAAO,CAAC;EACjE,WAAU;EAJZ,UAAA;GAME,oBAAC,gBAAD;IACE,aAAa;IACb,SAAS;IACT,SAAS;IACT,aAAa;IACb,eAAe;IACf,WAAU;IAEV,UAAA,oBAAC,MAAD,EAAM,MAAK,QAAS,CAAA;GACN,CAAA;GAChB,oBAAC,iBAAD;IAAiB,YAAA;IAAqB;GAAW,CAAA;GACjD,oBAAC,gBAAD;IAAgB,WAAU;IACxB,UAAA,oBAAC,MAAD,EAAM,MAAK,SAAU,CAAA;GACP,CAAA;EACG;;AAEzB;AAaA,IAAM,YAAY,EAChB,eAAe,cACf,UAAU,WACV,cAAc,uCACd,OAAO,SACP,MACA,aACA,QAAQ,MACR,8BACiB;CACjB,MAAM,EAAE,MAAM,SAAS,WAAW;CAClC,OACE,qBAAC,OAAD;EACE,MAAM,QAAQ,eAAe;EACtB;EACkB;EACzB,eAAe,SAAS;GACtB,KAAK,gBAAgB,cAAc;GACnC,YAAY,MAAM,QAAQ,IAAI;GAC9B,KAAK,cAAc,EAAE,KAAK,CAAC;EAC7B;EARF,UAAA,CAUE,oBAAC,cAAD;GAAc,QAAQ,oBAAC,QAAD,EAAQ,SAAQ,UAAW,CAAA;GAAI,UAAA;EAA2B,CAAA,GAChF,qBAAC,cAAD;GAAoB;GAAM,iBAAA;GAA1B,UAAA,CACE,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC,YAAD,EAAA,UAAa,QAAoB,CAAA,GACjC,oBAAC,kBAAD,EAAA,UAAmB,YAA8B,CAAA,CACtC,EAAA,CAAA,GACb,oBAAC,OAAD;IAAK,WAAU;IACb,UAAA,oBAAC,MAAD,CAAO,CAAA;GACJ,CAAA,CACO;EACT,CAAA,CAAA;;AAEX;AAaA,IAAM,cAAc,EAClB,QAAQ,aACR,QAAQ,CAAC,GACT,aAAa,cACb,MACA,SACA,cAAc,QACd,MACA,cAAc,WACK;CACnB,MAAM,EAAE,MAAM,SAAS,WAAW;CAClC,OACE,oBAAC,iBAAD;EACE,MAAM,QAAQ;EACd,eAAe,aAAa;GAC1B,KAAK,gBAAgB,cAAc;GAInC,KAAK,aAAa,QAAQ,OAAO,QAAQ,CAAC;GAC1C,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;EACvC;EACA,WAAU;EAEV,UAAA,qBAAC,SAAD;GAAe;GAAe;GAAsB;GAAa,WAAU;GAA3E,UAAA,CACE,qBAAC,eAAD;IAAe,WAAU;IAAzB,UAAA,CACE,oBAAC,QAAD,EAAA,UAAO,MAAY,CAAA,GAClB,gBAAgB,SAAS,oBAAC,gBAAD,EAAgB,cAAW,iBAAkB,CAAA,IAAI,IAC9D;GACf,CAAA,GAAA,oBAAC,gBAAD,EAAA,UACE,qBAAC,cAAD,EAAA,UAAA,CACE,oBAAC,mBAAD,EAAA,UAAoB,WAA8B,CAAA,GAClD,oBAAC,qBAAD,EAAA,UACE,oBAAC,aAAD,EAAA,UACG,MAAM,KAAK,SACV,oBAAC,iBAAD,EAAA,UACE,oBAAC,mBAAD;IACE,UAAU,KAAK;IACf,UAAU,KAAK;IACf,eAAe,KAAK,cAAc,EAAE,OAAO,KAAK,SAAS,KAAK,MAAM,CAAC;IAEpE,UAAA,KAAK;GACW,CAAA,EACJ,GARK,KAAK,SAAS,KAAK,KAQxB,CAClB,EACU,CAAA,EACM,CAAA,CACT,EAAA,CAAA,EACA,CAAA,CACT;;CACM,CAAA;AAErB;AAUA,IAAM,YAAY,EAChB,eAAe,cACf,QAAQ,SACR,cAAc,iCACd,OAAO,WACP,UAAU,UACO;CACjB,OACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,QAAD;EAAQ,SAAQ;EAAU,eAAe,MAAM,IAAI;GAAE;GAAO;GAAa;GAAM;EAAQ,CAAC;EACrF,UAAA;CACK,CAAA,GACR,oBAAC,SAAD,CAAU,CAAA,CACV,EAAA,CAAA;AAEN;AAEA,IAAa,oCAAoC,QAAgC;CAC/E,uBAA0C,oBAAoB,gBAAgB,KAAK;EACjF,SAAS;EACT,oBAAoB;GAAC;GAAiB;GAAW;GAAe;GAAiB;GAAgB;GAAQ;EAAc;EACvH,iBAAiB,SAAS;GACxB,cAAc,IAAI,oBAAoB,KAAA;GACtC,SAAS,IAAI,WAAW,KAAA;GACxB,aAAa,IAAI,eAAe,KAAA;GAChC,cAAc,IAAI,oBAAoB,KAAA;GACtC,aAAa,IAAI,mBAAmB,KAAA;GACpC,MAAM,IAAI,QAAQ,OAAO,KAAA,IAAY,WAAW,IAAI,IAAI;GACxD,aAAa,IAAI,mBAAmB,OAAO,KAAA,IAAY,WAAW,IAAI,eAAe;EACvF;EACA,eAAe,EAAE,MAAM,mBAAmB,QAAQ,cAAc,EAAE;CACpE,CAAC;CACD,cAA8B,gBAAgB,aAAa;EACzD,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,oBAAoB;GAAC;GAAS;GAAe;GAAW;GAAQ;GAAa;EAAa;EAC1F,iBAAiB,SAAS;GACxB,OAAO,WAAqB,IAAI,KAAK;GACrC,aAAc,IAAI,eAAe,KAAA;GACjC,SAAS,aAAa,IAAI,OAAO;GACjC,MAAM,IAAI,QAAQ,OAAO,KAAA,IAAY,WAAW,IAAI,IAAI;GACxD,UAAU,IAAI,gBAAgB,OAAO,KAAA,IAAY,WAAW,IAAI,YAAY;GAC5E,YAAY,aAAa,IAAI,cAAc;EAC7C;EACA,eAAe,EACb,SAAS;GACP,MAAM,SAAS,aAAa,KAAK,aAAa,SAAS,CAAC,KAAK;GAC7D,MAAM,MAAM,UAAU,KAAK,aAAa,WAAW,OAAO,SAAS,CAAC,CAAC;EACvE,EACF;CACF,CAAC;CACD,cAA2B,aAAa,UAAU;EAChD,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,oBAAoB,CAAC,MAAM;EAC3B,iBAAiB,SAAS,EAAE,MAAM,WAA0B,IAAI,IAAI,EAAE;CACxE,CAAC;CACD,cAAiC,mBAAmB,gBAAgB;EAClE,MAAM;EACN,QAAQ,IAAI;EACZ,oBAAoB;GAAC;GAAiB;GAAQ;GAAgB;EAAU;EACxE,iBAAiB,SAAS;GACxB,cAAc,IAAI,oBAAoB,KAAA;GACtC,MAAM,IAAI,QAAQ,OAAO,KAAA,IAAY,WAAW,IAAI,IAAI;GACxD,aAAa,IAAI,mBAAmB,OAAO,KAAA,IAAY,WAAW,IAAI,eAAe;GACrF,UAAU,IAAI,YAAY,OAAO,KAAA,IAAY,WAAW,IAAI,QAAQ;EACtE;EACA,eAAe,EAAE,MAAM,mBAAmB,QAAQ,cAAc,EAAE;CACpE,CAAC;CACD,cAA6B,eAAe,YAAY;EACtD,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,oBAAoB;GAAC;GAAe;GAAe;GAAS;GAAS;GAAQ;GAA6B;EAAc;EACxH,iBAAiB,SAAS;GACxB,aAAa,IAAI,eAAe,KAAA;GAChC,YAAY,IAAI,kBAAkB,KAAA;GAClC,OAAO,WAAwB,IAAI,KAAK;GACxC,OAAO,IAAI,SAAS,KAAA;GACpB,MAAM,IAAI,QAAQ,OAAO,KAAA,IAAY,WAAW,IAAI,IAAI;GACxD,yBAAyB,IAAI,gCAAgC,OAAO,KAAA,IAAY,WAAW,IAAI,4BAA4B;GAC3H,aAAa,IAAI,mBAAmB,OAAO,KAAA,IAAY,WAAW,IAAI,eAAe;EACvF;EACA,eAAe,EACb,OAAO;GACL,MAAM,SAAS,KAAK,aAAa,OAAO,KAAK;GAC7C,MAAM,MAAM,UAAU,KAAK,aAAa,SAAS,OAAO,SAAS,EAAE,CAAC;EACtE,EACF;CACF,CAAC;CACD,uBAA0C,oBAAoB,gBAAgB,KAAK;EACjF,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,OAAO,WAAwB,IAAI,KAAK;GACxC,OAAO,IAAI,SAAS,KAAA;GACpB,MAAM,IAAI,QAAQ,OAAO,KAAA,IAAY,WAAW,IAAI,IAAI;GACxD,aAAa,IAAI,mBAAmB,OAAO,KAAA,IAAY,WAAW,IAAI,eAAe;GACrF,UAAU,IAAI,YAAY,OAAO,KAAA,IAAY,WAAW,IAAI,QAAQ;GACpE,WAAW,IAAI,iBAAiB,OAAO,KAAA,IAAY,WAAW,IAAI,aAAa;GAC/E,sBAAsB,IAAI,8BAA8B,OAAO,KAAA,IAAY,WAAW,IAAI,0BAA0B;GACpH,MAAO,IAAI,QAAsC,KAAA;GACjD,OAAQ,IAAI,SAAwC,KAAA;GACpD,YAAY,aAAa,IAAI,cAAc;GAC3C,aAAa,aAAa,IAAI,eAAe;EAC/C;EACA,eAAe,EAAE,MAAM,mBAAmB,QAAQ,cAAc,EAAE;CACpE,CAAC;CACD,cAA+B,iBAAiB,cAAc;EAC5D,MAAM;EACN,QAAQ,IAAI;EACZ,oBAAoB,CAAC,WAAW;EAChC,iBAAiB,SAAS,EAAE,WAAY,IAAI,aAAa,KAAA,EAA4B;CACvF,CAAC;CACD,uBAAwC,kBAAkB,cAAc,KAAK;EAC3E,SAAS;EACT,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,cAAc,IAAI,oBAAoB,KAAA;GACtC,SAAS,IAAI,WAAW,KAAA;GACxB,aAAa,IAAI,eAAe,KAAA;GAChC,MAAM,IAAI,QAAQ,OAAO,KAAA,IAAY,WAAW,IAAI,IAAI;GACxD,aAAa,IAAI,mBAAmB,OAAO,KAAA,IAAY,WAAW,IAAI,eAAe;GACrF,OAAO,aAAa,IAAI,KAAK;GAC7B,YAAY,aAAa,IAAI,cAAc;GAC3C,MAAO,IAAI,QAAoC,KAAA;GAC/C,OAAQ,IAAI,SAAsC,KAAA;GAClD,YAAY,aAAa,IAAI,cAAc;GAC3C,aAAa,aAAa,IAAI,eAAe;EAC/C;EACA,eAAe,EAAE,MAAM,mBAAmB,QAAQ,cAAc,EAAE;CACpE,CAAC;CACD,uBAAsC,eAAe,YAAY,KAAK;EAGpE,SAAS;EACT,oBAAoB;GAAC;GAAS;GAAY;GAAS;GAAe;EAAY;EAC9E,iBAAiB,SAAS;GACxB,OAAO,WAA4B,IAAI,KAAK;GAC5C,UAAU,IAAI,YAAY,OAAO,KAAA,IAAY,WAAW,IAAI,QAAQ;GACpE,OAAO,IAAI,SAAS,OAAO,KAAA,IAAY,WAAW,IAAI,KAAK;GAC3D,aAAc,IAAI,eAAgD,KAAA;GAClE,WAAW,IAAI,iBAAiB,OAAO,KAAA,IAAY,WAAW,IAAI,aAAa;EACjF;CACF,CAAC;CACD,cAAqC,wBAAwB,oBAAoB;EAC/E,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,OAAO,WAAqB,IAAI,KAAK;GACrC,YAAY,IAAI,kBAAkB,OAAO,KAAA,IAAY,WAAW,IAAI,cAAc;GAClF,uBAAwB,IAAI,8BAAiF,KAAA;GAC7G,qBAAqB,aAAa,IAAI,wBAAwB;GAC9D,wBAAwB,aAAa,IAAI,4BAA4B;GACrE,cAAc,aAAa,IAAI,gBAAgB;GAC/C,yBAAyB,IAAI,iCAAiC,OAAO,KAAA,IAAY,WAAW,IAAI,6BAA6B;GAC7H,iBAAkB,IAAI,uBAAoE,KAAA;GAC1F,gBAAiB,IAAI,sBAAkE,KAAA;EACzF;CACF,CAAC;CACD,uBAA6C,uBAAuB,mBAAmB,KAAK;EAC1F,SAAS;EACT,oBAAoB;GAAC;GAAS;GAAS;GAAiB;GAAe;GAAS;GAAe;GAAS;EAAY;EACpH,iBAAiB,SAAS;GACxB,OAAO,WAAwB,IAAI,KAAK;GACxC,OAAO,IAAI,SAAS,KAAA;GACpB,cAAc,IAAI,oBAAoB,KAAA;GACtC,aAAc,IAAI,eAAuD,KAAA;GACzE,OAAO,aAAa,IAAI,KAAK;GAC7B,YAAY,aAAa,IAAI,cAAc;GAC3C,OAAQ,IAAI,SAA2C,KAAA;GACvD,WAAW,IAAI,iBAAiB,KAAA;EAClC;EACA,eAAe,EACb,OAAO;GACL,MAAM,SAAS,KAAK,aAAa,OAAO,KAAK;GAC7C,MAAM,MAAM,UAAU,KAAK,aAAa,SAAS,OAAO,SAAS,EAAE,CAAC;EACtE,EACF;CACF,CAAC;CACD,cAAmC,qBAAqB,kBAAkB;EACxE,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,oBAAoB;GAAC;GAAQ;GAAS;GAAe;GAAW;GAAY;EAAU;EACtF,iBAAiB,SAAS;GACxB,MAAM,IAAI,QAAQ,KAAA;GAClB,OAAO,IAAI,SAAS,KAAA;GACpB,aAAa,IAAI,eAAe,KAAA;GAChC,SAAS,WAAmC,IAAI,OAAO;GACvD,UAAU,IAAI,YAAY,OAAO,KAAA,IAAY,WAAW,IAAI,QAAQ;GACpE,UAAU,IAAI,YAAY,OAAO,KAAA,IAAY,WAAW,IAAI,QAAQ;EACtE;CACF,CAAC;CACD,cAA+B,iBAAiB,cAAc;EAC5D,MAAM;EACN,QAAQ,IAAI;EACZ,oBAAoB;GAAC;GAAc;GAAe;GAAY;GAAkB;GAAkB;GAAqB;EAAsB;EAC7I,iBAAiB,SAAS;GACxB,WAAW,aAAa,IAAI,aAAa;GACzC,aAAc,IAAI,eAAkD,KAAA;GACpE,UAAU,IAAI,YAAY,OAAO,KAAA,IAAY,WAAW,IAAI,QAAQ;GACpE,cAAc,aAAa,IAAI,iBAAiB;GAChD,cAAc,aAAa,IAAI,iBAAiB;GAChD,kBAAkB,IAAI,wBAAwB,OAAO,KAAA,IAAY,WAAW,IAAI,oBAAoB;GACpG,oBAAoB,aAAa,IAAI,uBAAuB;EAC9D;CACF,CAAC;CACD,uBAAoC,aAAa,UAAU,KAAK;EAC9D,SAAS;EACT,oBAAoB;GAAC;GAAiB;GAAW;GAAe;GAAQ;GAAQ;GAAgB;GAAS;EAA2B;EACpI,iBAAiB,SAAS;GACxB,cAAc,IAAI,oBAAoB,KAAA;GACtC,SAAS,IAAI,WAAW,KAAA;GACxB,aAAa,IAAI,eAAe,KAAA;GAChC,MAAO,IAAI,QAAQ,KAAA;GACnB,MAAM,IAAI,QAAQ,OAAO,KAAA,IAAY,WAAW,IAAI,IAAI;GACxD,aAAa,IAAI,mBAAmB,OAAO,KAAA,IAAY,WAAW,IAAI,eAAe;GACrF,OAAO,IAAI,SAAS,OAAO,KAAA,IAAY,WAAW,IAAI,KAAK;GAC3D,yBAAyB,IAAI,gCAAgC,OAAO,KAAA,IAAY,WAAW,IAAI,4BAA4B;EAC7H;EACA,eAAe,EAAE,MAAM,mBAAmB,QAAQ,cAAc,EAAE;CACpE,CAAC;CACD,uBAAsC,eAAe,YAAY,KAAK;EACpE,oBAAoB;GAAC;GAAS;GAAS;GAAe;GAAQ;GAAW;GAAe;GAAQ;EAAc;EAC9G,iBAAiB,SAAS;GACxB,OAAO,IAAI,SAAS,KAAA;GACpB,OAAO,WAAwB,IAAI,KAAK;GACxC,YAAY,IAAI,kBAAkB,KAAA;GAClC,MAAO,IAAI,QAAkC,KAAA;GAC7C,SAAU,IAAI,WAAwC,KAAA;GACtD,aAAc,IAAI,eAAgD,KAAA;GAClE,MAAM,IAAI,QAAQ,OAAO,KAAA,IAAY,WAAW,IAAI,IAAI;GACxD,aAAa,IAAI,mBAAmB,OAAO,KAAA,IAAY,WAAW,IAAI,eAAe;EACvF;EACA,eAAe,EACb,MAAM;GACJ,MAAM,SAAS;IACb,MAAM,WAAW,KAAK,aAAa,MAAM;IACzC,IAAI,YAAY,MACd,OAAO,WAAW,QAAQ;IAE5B,MAAM,UAAU,KAAK,aAAa,cAAc;IAChD,OAAO,WAAW,OAAO,OAAO,WAAW,OAAO;GACpD;GACA,MAAM,MAAM,UAAU;IACpB,KAAK,gBAAgB,cAAc;IACnC,KAAK,aAAa,QAAQ,OAAO,QAAQ,KAAK,CAAC,CAAC;GAClD;EACF,EACF;CACF,CAAC;CACD,uBAAoC,aAAa,UAAU,KAAK;EAC9D,SAAS;EACT,oBAAoB;GAAC;GAAiB;GAAS;GAAe;GAAQ;EAAS;EAC/E,iBAAiB,SAAS;GACxB,cAAc,IAAI,oBAAoB,KAAA;GACtC,OAAO,IAAI,SAAS,KAAA;GACpB,aAAa,IAAI,eAAe,KAAA;GAChC,MAAO,IAAI,QAAQ,KAAA;GACnB,SAAS,aAAa,IAAI,OAAO;EACnC;CACF,CAAC;AACH;;;AC1jCA,IAAa,YAAY,UAA0B;CACjD,OACE,oBAAC,OAAD;EAAO,SAAS,MAAM;EACpB,UAAA,oBAAC,MAAD,CAAO,CAAA;CACF,CAAA;AAEX;AAEA,IAAa,oBAAoB,QAAgC;CAC/D,cAA8B,aAAa,UAAU;EACnD,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,oBAAoB,CAAC,KAAK;EAC1B,iBAAiB,SAAS,EACxB,KAAK,IAAI,OAAO,KAAA,EAClB;CACF,CAAC;AACH;;;AChBA,IAAa,iBAAiB,UAA+B;CAC3D,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,MAAM,cAAc,MAAM,QAAQ;CAClC,MAAM,aAAa,MAAM,SAAS;CAClC,MAAM,WAAW,MAAM,gBAAgB;CAEvC,OACE,oBAAC,YAAD;EACE,MAAM;EACN,OAAO;EACP,cAAc;EACd,eAAe,YAAY;GACzB,KAAK,aAAa,QAAQ,OAAO,OAAO,CAAC;GACzC,KAAK,cAAc,EAAE,OAAO,QAAQ,CAAC;EACvC;CACD,CAAA;AAEL;AAEA,IAAa,yBAAyB,QAAgC;CACpE,cAAmC,kBAAkB,eAAe;EAClE,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,oBAAoB;GAAC;GAAQ;GAAS;EAAe;EACrD,iBAAiB,SAAS;GACxB,MAAM,aAAa,IAAI,IAAI,KAAK;GAChC,OAAO,aAAa,IAAI,KAAK,KAAK;GAClC,cAAc,aAAa,IAAI,gBAAgB,KAAK;EACtD;EACA,eAAe,EACb,MAAM;GACJ,MAAM,SAAS;IAEb,OADY,aAAa,KAAK,aAAa,MAAM,CAC1C,KAAO;GAChB;GACA,MAAM,MAAM,UAAU;IACpB,KAAK,aAAa,QAAQ,OAAO,SAAS,CAAC,CAAC;GAC9C;EACF,EACF;CACF,CAAC;AACH;;;;;;;;;ACzBA,IAAa,cAAc,UAA4B;CACrD,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,OACE,qBAAC,SAAD;EACE,MAAM,MAAM,QAAQ,MAAM,eAAe;EACzC,OAAO,MAAM;EACb,eAAe,SAAS;GACtB,KAAK,gBAAgB,cAAc;GACnC,YAAY,MAAM,QAAQ,IAAI;GAC9B,KAAK,cAAc,EAAE,KAAK,CAAC;EAC7B;EAPF,UAAA,CASE,oBAAC,gBAAD;GAAgB,QAAQ,oBAAC,QAAD,EAAQ,SAAQ,UAAW,CAAA;GAAG,aAAa,MAAM;GAAa,OAAO,MAAM;GAAO,YAAY,MAAM;GACzH,UAAA,MAAM,gBAAgB;EACT,CAAA,GAChB,oBAAC,gBAAD;GAAgB,MAAM,MAAM;GAAM,OAAO,MAAM;GAAO,YAAY,MAAM;GAAY,aAAa,MAAM;GACnG,WAAA,MAAM,WAAW,MAAM,gBACvB,qBAAC,eAAD,EAAA,UAAA,CACG,MAAM,WAAW,oBAAC,cAAD,EAAA,UAAe,MAAM,QAAsB,CAAA,GAC5D,MAAM,eAAe,oBAAC,oBAAD,EAAA,UAAqB,MAAM,YAAgC,CAAA,CACpE,EAAA,CAAA;EAEH,CAAA,CACT;;AAEb;AAEA,IAAa,sBAAsB,QAAgC;CACjE,uBAAyC,eAAe,YAAY,KAAK;EACvE,SAAS;EACT,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,cAAc,IAAI,oBAAoB,KAAA;GACtC,SAAS,IAAI,WAAW,KAAA;GACxB,aAAa,IAAI,eAAe,KAAA;GAChC,MAAM,IAAI,QAAQ,OAAO,KAAA,IAAY,WAAW,IAAI,IAAI;GACxD,aAAa,IAAI,mBAAmB,OAAO,KAAA,IAAY,WAAW,IAAI,eAAe;GACrF,OAAO,IAAI,SAAS,OAAO,KAAA,IAAY,WAAW,IAAI,KAAK;GAC3D,aAAa,IAAI,oBAAoB,OAAO,KAAA,IAAY,WAAW,IAAI,gBAAgB;GACvF,OAAO,aAAa,IAAI,KAAK;GAC7B,YAAY,aAAa,IAAI,cAAc;GAC3C,MAAO,IAAI,QAAqC,KAAA;GAChD,OAAQ,IAAI,SAAuC,KAAA;GACnD,YAAY,aAAa,IAAI,cAAc;GAC3C,aAAa,aAAa,IAAI,eAAe;EAC/C;EACA,eAAe,EAAE,MAAM,mBAAmB,QAAQ,cAAc,EAAE;CACpE,CAAC;AACH;;;AC7EA,IAAa,eAAe,UAA6B;CACvD,OAAO,oBAAC,UAAD;EAAU,OAAO,MAAM,SAAS;EAAM,KAAK,MAAM;EAAK,KAAK,MAAM;EAAK,cAAY,MAAM;EAAO,kBAAgB,MAAM;CAAgB,CAAA;AAC9I;AAEA,IAAa,uBAAuB,QAAgC;CAClE,cAAiC,gBAAgB,aAAa;EAC5D,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,oBAAoB;GAAC;GAAS;GAAS;GAAO;GAAO;EAAgB;EACrE,iBAAiB,SAAS;GACxB,OAAO,IAAI,UAAU,KAAA,IAAY,OAAQ,aAAa,IAAI,KAAK,KAAK;GACpE,OAAO,IAAI,SAAS,KAAA;GACpB,KAAK,aAAa,IAAI,GAAG;GACzB,KAAK,aAAa,IAAI,GAAG;GACzB,eAAe,IAAI,qBAAqB,KAAA;EAC1C;CACF,CAAC;AACH;;;ACNA,IAAa,iBAAiB,UAA+B;CAC3D,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,MAAM,UAAU,MAAM,WAAW,CAAC;CAElC,OACE,oBAAC,YAAD;EACE,OAAO,MAAM,SAAS,MAAM,gBAAgB;EAC5C,UAAU,MAAM,YAAY;EAC5B,UAAU,MAAM,YAAY;EAC5B,UAAU,MAAM,YAAY;EAC5B,MAAM,MAAM;EACZ,MAAM,MAAM;EACZ,aAAa,MAAM,eAAe;EAClC,gBAAc,MAAM,WAAW,KAAA;EAC/B,cAAY,MAAM;EAClB,oBAAkB,MAAM;EACxB,gBAAgB,SAAS;GACvB,MAAM,QAAQ,OAAO,IAAI;GACzB,KAAK,gBAAgB,eAAe;GACpC,KAAK,aAAa,SAAS,KAAK;GAChC,KAAK,cAAc,EAAE,MAAM,CAAC;EAC9B;EAEC,UAAA,QAAQ,KAAK,WACZ,qBAAC,OAAD;GAAwB,WAAU;GAAlC,UAAA,CACE,oBAAC,gBAAD;IACE,OAAO,OAAO;IACd,WAAW,MAAM,YAAY,UAAU,OAAO;IAC9C,gBAAc,MAAM,WAAW,KAAA;IAC/B,IAAI,GAAG,MAAM,QAAQ,KAAK,GAAG,OAAO;GACrC,CAAA,GACD,oBAAC,SAAD;IAAO,SAAS,GAAG,MAAM,QAAQ,KAAK,GAAG,OAAO;IAAS,WAAU;IAChE,UAAA,OAAO;GACH,CAAA,CACJ;EAVK,GAAA,OAAO,KAUZ,CACN;CACS,CAAA;AAEhB;AAEA,IAAa,yBAAyB,QAAgC;CACpE,cAAmC,mBAAmB,eAAe;EACnE,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,gBAAgB;EAChB,YAAY,UAAU,MAAM,SAAS,MAAM,gBAAgB;EAC3D,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,SAAS,WAA2B,IAAI,OAAO,KAAK,CAAC;GACrD,OAAO,IAAI,SAAS,KAAA;GACpB,cAAc,IAAI,oBAAoB,KAAA;GACtC,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAM,IAAI,QAAQ,KAAA;GAClB,SAAS,WAAW,IAAI,OAAO;GAC/B,aAAc,IAAI,eAAsD,KAAA;GACxE,WAAW,IAAI,iBAAiB,KAAA;GAChC,iBAAiB,IAAI,uBAAuB,KAAA;EAC9C;EACA,eAAe,EACb,OAAO;GACL,MAAM,SAAS,KAAK,aAAa,OAAO,KAAK,KAAK,aAAa,eAAe,KAAK;GACnF,MAAM,MAAM,UAAU;IACpB,KAAK,aAAa,SAAS,OAAO,SAAS,EAAE,CAAC;GAChD;EACF,EACF;CACF,CAAC;AACH;;;ACvFA,IAAa,iBAAiB,UAA+B;CAC3D,MAAM,EAAE,SAAS,WAAW;CAC5B,MAAM,cAAc,OAA8B,IAAI;CACtD,MAAM,QAA6B,CAAC;CACpC,IAAI,MAAM,QACR,MAAM,SAAS,MAAM;CAEvB,IAAI,MAAM,OACR,MAAM,QAAQ,MAAM;CAUtB,MAAM,YAAY,MAAM,WAAW,2CAA2C,KAAA;CAE9E,gBAAgB;EACd,MAAM,WAAW,YAAY;EAC7B,IAAI,CAAC,UACH;EAEF,MAAM,qBAA2B;GAC/B,KAAK,cAAc;IAAE,WAAW,SAAS;IAAW,YAAY,SAAS;GAAW,CAAC;EACvF;EACA,SAAS,iBAAiB,UAAU,cAAc,EAAE,SAAS,KAAK,CAAC;EACnE,aAAa,SAAS,oBAAoB,UAAU,YAAY;CAClE,GAAG,CAAC,IAAI,CAAC;CAET,OACE,oBAAC,YAAD;EACE,aAAa,MAAM,eAAe;EAClC,MAAM,MAAM;EACZ,MAAM,MAAM;EACZ,UAAU,MAAM;EAChB,YAAY,MAAM;EAClB,aAAa;EACF;EACJ;EAEP,UAAA,oBAAC,MAAD,CAAO,CAAA;CACG,CAAA;AAEhB;AAEA,IAAa,yBAAyB,QAAgC;CACpE,cAAmC,mBAAmB,eAAe;EACnE,MAAM;EACN,QAAQ,IAAI;EACZ,oBAAoB;GAAC;GAAe;GAAU;GAAS;GAAY;GAAQ;GAAQ;GAAa;EAAa;EAC7G,iBAAiB,SAAS;GACxB,aAAc,IAAI,eAAsD,KAAA;GACxE,QAAQ,IAAI,UAAU,KAAA;GACtB,OAAO,IAAI,SAAS,KAAA;GACpB,UAAU,WAAW,IAAI,QAAQ;GACjC,MAAO,IAAI,QAAwC,KAAA;GACnD,MAAM,WAAW,IAAI,IAAI;GACzB,UAAW,IAAI,gBAAwC,KAAA;GACvD,YAAY,IAAI,kBAAkB,KAAA;EACpC;EACA,eAAe;GACb,WAAW;IACT,MAAM,UAEF,KAAK,YAAY,cAA2B,sCAAoC,KAChF,KAAK,cAA2B,sCAAoC,EAAA,EACnE,aAAa;IAClB,MAAM,MAAM,UAAU;KACpB,MAAM,WACJ,KAAK,YAAY,cAA2B,sCAAoC,KAChF,KAAK,cAA2B,sCAAoC;KACtE,IAAI,UACF,SAAS,YAAY,OAAO,KAAK,KAAK;IAE1C;GACF;GACA,YAAY;IACV,MAAM,UAEF,KAAK,YAAY,cAA2B,sCAAoC,KAChF,KAAK,cAA2B,sCAAoC,EAAA,EACnE,cAAc;IACnB,MAAM,MAAM,UAAU;KACpB,MAAM,WACJ,KAAK,YAAY,cAA2B,sCAAoC,KAChF,KAAK,cAA2B,sCAAoC;KACtE,IAAI,UACF,SAAS,aAAa,OAAO,KAAK,KAAK;IAE3C;GACF;EACF;CACF,CAAC;AACH;;;AC5FA,IAAM,WAAW,UAA2D,WAAW,SAAS,MAAM,QAAS,MAA6B,KAAK;AAuBjJ,IAAM,qBAAqB,UACzB,MAAM,KAAK,QACT,oBAAC,YAAD;CAA4B,OAAO,IAAI;CAAO,UAAU,IAAI;CACzD,UAAA,IAAI;AACK,GAFK,IAAI,KAET,CACb;AAEH,IAAa,aAAa,UAA2B;CACnD,MAAM,EAAE,MAAM,SAAS,WAAW;CAClC,MAAM,kBAAkB,mBAAmB;CAE3C,MAAM,UAAU,MAAM,WAAW,CAAC;CAClC,MAAM,YAAY,QAAQ,KAAK,OAAO;CAEtC,MAAM,sBAAsB;EAC1B,IAAI,CAAC,WACH,OAAO,kBAAkB,OAA0B;EAGrD,MAAM,QAA2B,CAAC;EAClC,QAAQ,SAAS,OAAO,QAAQ;GAC9B,IAAI,QAAQ,KAAK,GAAG;IAClB,IAAI,MAAM,GACR,MAAM,KAAK,oBAAC,iBAAD,CAAoD,GAA9B,cAAc,MAAM,OAAU,CAAC;IAElE,MAAM,KACJ,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC,aAAD,EAAA,UAAc,MAAM,MAAmB,CAAA,GACtC,kBAAkB,MAAM,KAAK,CACnB,EAAA,GAHK,MAAM,KAGX,CACf;GACF,OACE,MAAM,KACJ,oBAAC,YAAD;IAAiD,OAAQ,MAAwB;IAC7E,UAAA,MAAwB;GAChB,GAFM,MAAwB,KAE9B,CACd;EAEJ,CAAC;EACD,OAAO;CACT;CAKA,MAAM,WAAW,YACf,QAAQ,SAAS,UAAW,QAAQ,KAAK,IAAI,MAAM,QAAQ,CAAC,KAAsB,CAAE;CACtF,MAAM,QAAmD,CACvD;EAAE,OAAO;EAAM,OAAO,MAAM,eAAe;CAAY,GACvD,GAAG,QAAQ,OAAO,CAAC,CAAC,KAAK,SAAS;EAAE,OAAO,IAAI;EAAwB,OAAO,IAAI;CAAM,EAAE,CAC5F;CAEA,OACE,qBAAC,QAAD;EACS;EAGP,OAAO,MAAM,SAAS;EACtB,UAAU,MAAM,YAAY;EAC5B,UAAU,MAAM,YAAY;EAC5B,UAAU,MAAM,YAAY;EAC5B,MAAM,MAAM;EACZ,MAAM,MAAM;EACZ,cAAc,MAAM;EACpB,MAAM,MAAM,QAAQ,MAAM,eAAe;EACzC,OAAO,MAAM,SAAS;EACtB,sBAAsB,MAAM,wBAAwB;EACpD,eAAe,SAAS;GACtB,KAAK,gBAAgB,cAAc;GACnC,IAAI,MACF,KAAK,aAAa,QAAQ,MAAM;QAEhC,KAAK,gBAAgB,MAAM;GAE7B,KAAK,mBAAmB,EAAE,KAAK,CAAC;EAClC;EACA,gBAAgB,SAAS;GACvB,MAAM,QAAQ,SAAS,OAAO,KAAK,OAAO,IAAI;GAC9C,KAAK,aAAa,SAAS,KAAK;GAChC,KAAK,cAAc,EAAE,MAAM,CAAC;EAC9B;EA3BF,UAAA,CA+BE,oBAAC,eAAD;GACE,MAAM,MAAM,QAAQ;GACpB,UAAU,MAAM,YAAY;GAC5B,cAAY,MAAM,aAAa,MAAM,SAAS,MAAM,eAAe;GACnE,oBAAkB,MAAM;GACxB,gBAAc,MAAM,WAAW,KAAA;GAE/B,UAAA,oBAAC,aAAD,CAAc,CAAA;EACD,CAAA,GACf,oBAAC,eAAD;GAAe,iBAAiB,mBAAmB,KAAA;GAAY,UAAA,cAAc;EAAiB,CAAA,CACxF;;AAEZ;AAEA,IAAa,qBAAqB,QAAgC;CAChE,cAA+B,cAAc,WAAW;EACtD,MAAM,IAAI;EACV,QAAQ,IAAI;EAGZ,SAAS;EAGT,eAAe;EACf,gBAAgB;EAChB,YAAY,UAAU,MAAM,SAAS;EACrC,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,SAAS,WAAiC,IAAI,OAAO;GACrD,OAAO,IAAI,SAAS,KAAA;GACpB,aAAa,IAAI,eAAe,KAAA;GAChC,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAM,IAAI,QAAQ,KAAA;GAClB,cAAc,IAAI,gBAAgB,KAAA;GAClC,MAAM,IAAI,QAAQ,OAAO,KAAA,IAAY,WAAW,IAAI,IAAI;GACxD,aAAa,IAAI,mBAAmB,OAAO,KAAA,IAAY,WAAW,IAAI,eAAe;GACrF,OAAO,IAAI,SAAS,OAAO,KAAA,IAAY,WAAW,IAAI,KAAK;GAC3D,sBAAsB,IAAI,8BAA8B,OAAO,KAAA,IAAY,WAAW,IAAI,0BAA0B;GACpH,MAAO,IAAI,QAA+B,KAAA;GAC1C,OAAO,IAAI,SAAS,KAAA;GACpB,WAAW,IAAI,iBAAiB,KAAA;GAChC,iBAAiB,IAAI,uBAAuB,KAAA;GAC5C,SAAS,WAAW,IAAI,OAAO;EACjC;EACA,eAAe;GACb,OAAO;IACL,MAAM,SAAS,KAAK,aAAa,OAAO,KAAK;IAC7C,MAAM,MAAM,UAAU;KACpB,KAAK,aAAa,SAAS,OAAO,SAAS,EAAE,CAAC;IAChD;GACF;GACA,MAAM,mBAAmB,QAAQ,cAAc;EACjD;CACF,CAAC;AACH;;;ACvMA,IAAa,gBAAgB,UAA8B;CACzD,OAAO,oBAAC,WAAD,EAAW,aAAa,MAAM,eAAe,aAAe,CAAA;AACrE;AAEA,IAAa,wBAAwB,QAAgC;CACnE,cAAkC,iBAAiB,cAAc;EAC/D,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,oBAAoB,CAAC,aAAa;EAClC,iBAAiB,SAAS,EACxB,aAAc,IAAI,eAAe,KAAA,EACnC;CACF,CAAC;AACH;;;ACdA,IAAa,eAAe,UAA6B;CAIvD,MAAM,gBAAgB,MAAM,OACxB,MAAM,KAAK,CAAC,CACb,QAAQ,cAAc,cAAc,aAAa,UAAU,WAAW,UAAU,CAAC,CAAC,CAClF,KAAK,GAAG;CAEX,OAAO,oBAAC,UAAD,EAAU,WAAW,GAAG,aAAa,aAAa,EAAI,CAAA;AAC/D;AAEA,IAAa,uBAAuB,QAAgC;CAClE,cAAiC,gBAAgB,aAAa;EAC5D,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,oBAAoB,CAAC,OAAO;EAC5B,iBAAiB,SAAS,EACxB,OAAO,IAAI,SAAS,KAAA,EACtB;CACF,CAAC;AACH;;;AC1BA,IAAM,oBAAoB,QAAgE;CACxF,MAAM,QAAQ,WAAoB,GAAG;CACrC,IAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,KAAK,MAAM,OAAO,SAAS,OAAO,SAAS,YAAY,OAAO,SAAS,IAAI,CAAC,GACrH,OAAO;CAET,OAAO,aAAa,GAAG;AACzB;AAEA,IAAM,wBAAwB,UAAmC;CAC/D,OAAO,MAAM,QAAQ,KAAK,IAAI,KAAK,UAAU,KAAK,IAAI,OAAO,KAAK;AACpE;AAgBA,IAAa,aAAa,UAA2B;CACnD,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,OACE,oBAAC,QAAD;EACE,OAAO,MAAM;EACb,cAAc,MAAM;EACpB,KAAK,MAAM;EACX,KAAK,MAAM;EACX,MAAM,MAAM;EACZ,uBAAuB,MAAM;EAC7B,UAAU,MAAM,YAAY;EAC5B,gBAAc,MAAM,WAAW,KAAA;EAC/B,MAAM,MAAM;EACZ,cAAY,MAAM;EAClB,oBAAkB,MAAM;EACxB,gBAAgB,SAAS;GACvB,MAAM,QAAQ,MAAM,QAAQ,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,OAAO,IAAI;GAC3D,KAAK,gBAAgB,eAAe;GACpC,KAAK,aAAa,SAAS,qBAAqB,KAAK,CAAC;GACtD,KAAK,aAAa,EAAE,MAAM,CAAC;EAC7B;EACA,mBAAmB,SAAS;GAC1B,MAAM,QAAQ,MAAM,QAAQ,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,OAAO,IAAI;GAC3D,KAAK,gBAAgB,eAAe;GACpC,KAAK,aAAa,SAAS,qBAAqB,KAAK,CAAC;GACtD,KAAK,cAAc,EAAE,MAAM,CAAC;EAC9B;CACD,CAAA;AAEL;AAEA,IAAa,qBAAqB,QAAgC;CAChE,cAA+B,cAAc,WAAW;EACtD,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,eAAe;EACf,gBAAgB;EAChB,YAAY,OAAO,SAAS;GAC1B,MAAM,QAAQ,MAAM,SAAS,MAAM;GACnC,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,kBACL,MACA,MAAM,KAAK,SAAS,OAAO,IAAI,CAAC,CAClC;GAEF,OAAO,SAAS,OAAO,OAAO,OAAO,KAAK;EAC5C;EACA,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,OAAO,iBAAiB,IAAI,KAAK;GACjC,cAAc,iBAAiB,IAAI,gBAAgB;GACnD,KAAK,aAAa,IAAI,GAAG;GACzB,KAAK,aAAa,IAAI,GAAG;GACzB,MAAM,aAAa,IAAI,IAAI;GAC3B,uBAAuB,aAAa,IAAI,2BAA2B;GACnE,UAAU,WAAW,IAAI,QAAQ;GACjC,SAAS,WAAW,IAAI,OAAO;GAC/B,MAAM,IAAI,QAAQ,KAAA;GAClB,WAAW,IAAI,iBAAiB,KAAA;GAChC,iBAAiB,IAAI,uBAAuB,KAAA;EAC9C;EACA,eAAe,EACb,OAAO;GACL,MAAM,SAAS;IACb,OAAO,iBAAiB,KAAK,aAAa,OAAO,CAAC,KAAK,iBAAiB,KAAK,aAAa,eAAe,CAAC;GAC5G;GACA,MAAM,MAAM,UAAU;IACpB,IAAI,MAAM,QAAQ,KAAK,GACrB,KAAK,aAAa,SAAS,KAAK,UAAU,KAAK,CAAC;SAEhD,KAAK,aAAa,SAAS,OAAO,SAAS,EAAE,CAAC;GAElD;EACF,EACF;CACF,CAAC;AACH;;;ACtGA,IAAa,aAAa,UAA2B;CACnD,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,OACE,oBAAC,QAAD;EACE,SAAS,MAAM,WAAW,MAAM,kBAAkB;EAClD,UAAU,MAAM,YAAY;EAC5B,UAAU,MAAM,YAAY;EAC5B,UAAU,MAAM,YAAY;EAC5B,MAAM,MAAM;EACZ,MAAM,MAAM;EACZ,OAAO,MAAM;EACb,gBAAgB,MAAM;EACtB,MAAM,MAAM,QAAQ;EACpB,gBAAc,MAAM,WAAW,KAAA;EAC/B,cAAY,MAAM;EAClB,oBAAkB,MAAM;EACxB,kBAAkB,SAAS;GACzB,MAAM,UAAU,SAAS;GACzB,KAAK,gBAAgB,iBAAiB;GACtC,IAAI,SACF,KAAK,aAAa,WAAW,MAAM;QAEnC,KAAK,gBAAgB,SAAS;GAEhC,KAAK,cAAc,EAAE,QAAQ,CAAC;EAChC;CACD,CAAA;AAEL;AAEA,IAAa,qBAAqB,QAAgC;CAChE,cAA+B,cAAc,WAAW;EACtD,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,eAAe;EACf,gBAAgB;EAChB,YAAY,UAAU;GAEpB,OADgB,MAAM,WAAW,MAAM,kBAAkB,QACvC,MAAM,SAAS,OAAS,MAAM,kBAAkB;EACpE;EACA,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,SAAS,IAAI,WAAW,OAAO,KAAA,IAAY,WAAW,IAAI,OAAO;GACjE,gBAAgB,IAAI,sBAAsB,OAAO,KAAA,IAAY,WAAW,IAAI,kBAAkB;GAC9F,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAM,IAAI,QAAQ,KAAA;GAClB,OAAO,IAAI,SAAS,KAAA;GACpB,gBAAgB,IAAI,sBAAsB,KAAA;GAC1C,MAAO,IAAI,QAAoC,KAAA;GAC/C,SAAS,WAAW,IAAI,OAAO;GAC/B,WAAW,IAAI,iBAAiB,KAAA;GAChC,iBAAiB,IAAI,uBAAuB,KAAA;EAC9C;EAIA,eAAe,EACb,SAAS,mBAAmB,WAAW,iBAAiB,EAC1D;CACF,CAAC;AACH;;;;AClFA,IAAM,cAAc,UAAwD;CAC1E,IAAI,UAAU,UACZ,OAAO;CAET,IAAI,UAAU,SACZ,OAAO;AAGX;AAEA,IAAa,YAAY,UAA0B;CACjD,MAAM,UAAU,MAAM,WAAW,CAAC;CAClC,MAAM,OAAO,MAAM,QAAQ,CAAC;CAE5B,OACE,qBAAC,OAAD,EAAA,UAAA;EACG,MAAM,UAAU,oBAAC,cAAD,EAAA,UAAe,MAAM,QAAsB,CAAA,IAAI;EAChE,oBAAC,aAAD,EAAA,UACE,oBAAC,UAAD,EAAA,UACG,QAAQ,KAAK,QACZ,oBAAC,WAAD;GAAyB,WAAW,WAAW,IAAI,KAAK;GACrD,UAAA,IAAI;EACI,GAFK,IAAI,GAET,CACZ,EACO,CAAA,EACC,CAAA;EACb,oBAAC,WAAD,EAAA,UACG,KAAK,KAAK,KAAK,aAEd,oBAAC,UAAD,EAAA,UACG,QAAQ,KAAK,QACZ,oBAAC,WAAD;GAAyB,WAAW,WAAW,IAAI,KAAK;GACrD,UAAA,IAAI,IAAI,QAAQ;EACR,GAFK,IAAI,GAET,CACZ,EACO,GANK,QAML,CACX,EACQ,CAAA;CACN,EAAA,CAAA;AAEX;AAEA,IAAa,oBAAoB,QAAgC;CAK/D,cAA8B,aAAa,UAAU;EACnD,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,oBAAoB;GAAC;GAAW;GAAQ;EAAS;EACjD,iBAAiB,SAAS;GACxB,SAAS,WAA8B,IAAI,OAAO,KAAK,CAAC;GACxD,MAAM,WAAmD,IAAI,IAAI,KAAK,CAAC;GACvE,SAAS,IAAI,WAAW,KAAA;EAC1B;CACF,CAAC;AACH;;;ACxDA,IAAa,WAAW,UAAyB;CAC/C,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,MAAM,QAAQ,MAAM,QAAQ,CAAC;CAC7B,MAAM,aAAa,MAAM,EAAE,EAAE,SAAS;CACtC,MAAM,eAAe,MAAM,SAAS,MAAM,cAAc;CAExD,OACE,qBAAC,MAAD;EACE,OAAO;EACP,aAAa,MAAM,eAAe;EAClC,gBAAgB,SAAS;GACvB,KAAK,aAAa,SAAS,IAAI;GAC/B,KAAK,cAAc,EAAE,OAAO,KAAK,CAAC;EACpC;EANF,UAAA,CAQE,oBAAC,UAAD;GAAU,SAAS,MAAM,WAAW;GACjC,UAAA,MAAM,KAAK,SACV,oBAAC,aAAD;IAA8B,OAAO,KAAK;IAAO,UAAU,KAAK;IAC7D,UAAA,KAAK;GACK,GAFK,KAAK,KAEV,CACd;EACO,CAAA,GACT,MAAM,KAAK,SACV,oBAAC,aAAD;GAA8B,OAAO,KAAK;GAAO,aAAA;GAC/C,UAAA,oBAAC,MAAD,EAAM,MAAM,SAAS,KAAK,QAAU,CAAA;EACzB,GAFK,KAAK,KAEV,CACd,CACG;;AAEV;AAEA,IAAa,mBAAmB,QAAgC;CAC9D,cAA6B,YAAY,SAAS;EAChD,MAAM;EACN,QAAQ,IAAI;EACZ,oBAAoB;GAAC;GAAQ;GAAS;GAAe;GAAW;EAAa;EAC7E,iBAAiB,SAAS;GACxB,MAAM,WAAuB,IAAI,IAAI;GACrC,OAAO,IAAI,SAAS,KAAA;GACpB,YAAY,IAAI,kBAAkB,KAAA;GAClC,SAAU,IAAI,WAAwC,KAAA;GACtD,aAAc,IAAI,eAAgD,KAAA;EACpE;EACA,eAAe,EACb,OAAO;GACL,MAAM,SAAS;IACb,MAAM,gBAAgB,KAAK,aAAa,OAAO;IAC/C,IAAI,iBAAiB,MACnB,OAAO;IAET,MAAM,aAAa,KAAK,aAAa,aAAa;IAClD,IAAI,cAAc,MAChB,OAAO;IAET,OAAO,WAAuB,KAAK,aAAa,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,SAAS;GAC1E;GACA,MAAM,MAAM,UAAU;IACpB,KAAK,aAAa,SAAS,OAAO,SAAS,EAAE,CAAC;GAChD;EACF,EACF;CACF,CAAC;AACH;;;ACtDA,IAAa,eAAe,UAA6B;CACvD,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,OACE,oBAAC,UAAD;EACE,OAAO,MAAM,SAAS;EACtB,aAAa,MAAM;EACnB,UAAU,MAAM,YAAY;EAC5B,UAAU,MAAM,YAAY;EAC5B,UAAU,MAAM,YAAY;EAC5B,MAAM,MAAM;EACZ,gBAAc,MAAM,WAAW,KAAA;EAC/B,MAAM,MAAM;EACZ,MAAM,MAAM;EACZ,cAAc,MAAM;EACpB,WAAW,MAAM;EACjB,WAAW,MAAM;EACjB,MAAM,MAAM;EACZ,YAAY,MAAM;EAClB,WAAW,MAAM;EACjB,cAAY,MAAM;EAClB,oBAAkB,MAAM;EACxB,WAAW,UAAU;GACnB,MAAM,EAAE,UAAU,MAAM;GACxB,KAAK,aAAa,SAAS,KAAK;GAChC,KAAK,cAAc,EAAE,MAAM,CAAC;EAC9B;CACD,CAAA;AAEL;AAEA,IAAa,uBAAuB,QAAgC;CAClE,cAAiC,gBAAgB,aAAa;EAC5D,MAAM,IAAI;EACV,QAAQ,IAAI;EAGZ,SAAS;EACT,eAAe;EACf,gBAAgB;EAChB,YAAY,UAAU,MAAM,SAAS;EACrC,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,OAAO,IAAI,SAAS,KAAA;GACpB,aAAa,IAAI,eAAe,KAAA;GAChC,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,UAAU,WAAW,IAAI,QAAQ;GACjC,MAAM,aAAa,IAAI,IAAI;GAC3B,SAAS,WAAW,IAAI,OAAO;GAC/B,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAM,IAAI,QAAQ,KAAA;GAClB,cAAc,IAAI,gBAAgB,KAAA;GAClC,WAAW,aAAa,IAAI,SAAS;GACrC,WAAW,aAAa,IAAI,SAAS;GACrC,MAAO,IAAI,QAAyC,KAAA;GACpD,YAAY,IAAI,cAAc,OAAO,KAAA,IAAY,WAAW,IAAI,UAAU;GAC1E,WAAW,WAAW,IAAI,SAAS;GACnC,WAAW,IAAI,iBAAiB,KAAA;GAChC,iBAAiB,IAAI,uBAAuB,KAAA;EAC9C;EACA,eAAe,EACb,OAAO;GACL,MAAM,SAAS,KAAK,aAAa,OAAO,KAAK;GAC7C,MAAM,MAAM,UAAU;IACpB,KAAK,aAAa,SAAS,OAAO,SAAS,EAAE,CAAC;GAChD;EACF,EACF;CACF,CAAC;AACH;;;AChGA,IAAa,aAAa,UAA2B;CACnD,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,OACE,oBAAC,QAAD;EACE,SAAS,MAAM,WAAW,MAAM,kBAAkB;EAClD,UAAU,MAAM,YAAY;EAC5B,OAAO,MAAM;EACb,SAAS,MAAM,WAAW;EAC1B,MAAM,MAAM,QAAQ;EACpB,cAAY,MAAM;EAClB,oBAAkB,MAAM;EACxB,MAAM,MAAM;EACZ,MAAM,MAAM;EACZ,MAAM,MAAM,QAAQ;EACpB,WAAW,MAAM;EACjB,kBAAkB,SAAS;GACzB,MAAM,UAAU,SAAS;GACzB,KAAK,gBAAgB,iBAAiB;GACtC,IAAI,SACF,KAAK,aAAa,WAAW,MAAM;QAEnC,KAAK,gBAAgB,SAAS;GAEhC,KAAK,cAAc,EAAE,QAAQ,CAAC;EAChC;EAEA,UAAA,oBAAC,MAAD,CAAO,CAAA;CACD,CAAA;AAEZ;AAEA,IAAa,qBAAqB,QAAgC;CAChE,cAA+B,cAAc,WAAW;EACtD,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,eAAe;EACf,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,SAAS,IAAI,WAAW,OAAO,KAAA,IAAY,WAAW,IAAI,OAAO;GACjE,gBAAgB,IAAI,sBAAsB,OAAO,KAAA,IAAY,WAAW,IAAI,kBAAkB;GAC9F,UAAU,WAAW,IAAI,QAAQ;GACjC,OAAO,IAAI,SAAS,KAAA;GACpB,SAAU,IAAI,WAAW,KAAA;GACzB,MAAO,IAAI,QAAQ,KAAA;GACnB,WAAW,IAAI,iBAAiB,KAAA;GAChC,iBAAiB,IAAI,uBAAuB,KAAA;GAC5C,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAM,IAAI,QAAQ,KAAA;GAClB,MAAO,IAAI,QAAoC,KAAA;GAC/C,WAAW,WAAW,IAAI,SAAS;EACrC;EACA,eAAe,EACb,SAAS,mBAAmB,WAAW,iBAAiB,EAC1D;CACF,CAAC;AACH;;;AC3DA,IAAa,kBAAkB,UAAgC;CAC7D,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,MAAM,UAAU,MAAM,WAAW,CAAC;CAClC,MAAM,WAAW,MAAM,YAAY;CACnC,MAAM,UAAU,MAAM,WAAW;CACjC,MAAM,OAAO,MAAM,QAAQ;CAC3B,MAAM,WAAW,MAAM,YAAY;CACnC,MAAM,cAAc,MAAM,eAAe;CACzC,MAAM,UAAU,MAAM,WAAW;CAEjC,MAAM,WAAW,MAAM,SAAS,MAAM;CACtC,MAAM,oBAA8B;EAClC,IAAI,YAAY,MACd,OAAO,CAAC;EAEV,IAAI,MAAM,QAAQ,QAAQ,GACxB,OAAO;EAET,OAAO,CAAC,QAAQ;CAClB,EAAA,CAAG;CAEH,MAAM,qBAAqB,SAAmB;EAC5C,MAAM,YAAY,WAAW,OAAQ,KAAK,MAAM;EAChD,MAAM,aAAa,WAAW,KAAK,UAAU,IAAI,IAAK,KAAK,MAAM;EACjE,KAAK,gBAAgB,eAAe;EACpC,KAAK,aAAa,SAAS,UAAU;EACrC,KAAK,cAAc,EAAE,OAAO,UAAU,CAAC;CACzC;CAEA,OACE,oBAAC,aAAD;EACE,OAAO;EACG;EACD;EACH;EACI;EACG;EACJ;EACT,WAAW,MAAM,aAAa;EAC9B,gBAAc,MAAM,WAAW,KAAA;EAC/B,cAAY,MAAM;EAClB,oBAAkB,MAAM;EACxB,eAAe;EAEd,UAAA,QAAQ,KAAK,QACZ,oBAAC,iBAAD;GAAiC,OAAO,IAAI;GAAO,UAAU,IAAI;GAC9D,UAAA,IAAI;EACU,GAFK,IAAI,KAET,CAClB;CACU,CAAA;AAEjB;AAEA,IAAa,0BAA0B,QAAgC;CACrE,cAAoC,oBAAoB,gBAAgB;EACtE,MAAM,IAAI;EACV,QAAQ,IAAI;EAIZ,SAAS;EACT,gBAAgB;EAChB,YAAY,OAAO,SAAS;GAC1B,MAAM,QAAQ,MAAM,SAAS,MAAM;GACnC,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,kBAAkB,MAAM,KAAK;GAEtC,OAAO,SAAS;EAClB;EACA,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,QAAQ;GACvB,MAAM,UAAU,WAA4B,IAAI,OAAO,KAAK,CAAC;GAC7D,MAAM,WAAW,WAAW,IAAI,QAAQ;GAExC,MAAM,cAAc,UAAoE;IACtF,IAAI,SAAS,MACX;IAEF,IAAI,UAAU,IACZ,OAAO,WAAW,CAAC,IAAI;IAEzB,IAAI,UACF,OAAO,WAAqB,KAAK,KAAK,CAAC,KAAK;IAE9C,OAAO;GACT;GAEA,OAAO;IACL;IACA,OAAO,WAAW,IAAI,KAAK;IAC3B,cAAc,WAAW,IAAI,gBAAgB;IAC7C;IACA,SAAU,IAAI,WAAoC,KAAA;IAClD,MAAO,IAAI,QAA8B,KAAA;IACzC,UAAU,WAAW,IAAI,QAAQ;IACjC,aAAc,IAAI,eAAuD,KAAA;IACzE,SAAS,IAAI,WAAW,OAAO,KAAA,IAAY,OAAO,IAAI,OAAO;IAC7D,WAAW,IAAI,iBAAiB,OAAO,KAAA,IAAY,WAAW,IAAI,aAAa;IAC/E,MAAM,IAAI,QAAQ,KAAA;IAClB,SAAS,WAAW,IAAI,OAAO;IAC/B,WAAW,IAAI,iBAAiB,KAAA;IAChC,iBAAiB,IAAI,uBAAuB,KAAA;GAC9C;EACF;EACA,eAAe,EACb,OAAO;GAGL,MAAM,SAAS;IACb,MAAM,MAAM,KAAK,aAAa,OAAO,KAAK,KAAK,aAAa,eAAe,KAAK;IAChF,IAAI,KAAK,aAAa,UAAU,GAC9B,OAAO,WAAqB,GAAG,MAAM,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG;IAE7D,OAAO;GACT;GACA,MAAM,MAAM,UAAU;IACpB,IAAI,MAAM,QAAQ,KAAK,GAAG;KACxB,KAAK,aAAa,YAAY,EAAE;KAChC,KAAK,aAAa,SAAS,KAAK,UAAU,KAAK,CAAC;KAChD;IACF;IACA,KAAK,aAAa,SAAS,OAAO,SAAS,EAAE,CAAC;GAChD;EACF,EACF;CACF,CAAC;AACH;;;;;;;;;AC7IA,IAAa,cAAc,UAA4B;CACrD,MAAM,EAAE,MAAM,SAAS,WAAW;CAElC,OACE,oBAAC,iBAAD;EAAiB,OAAO,MAAM;EAAO,YAAY,MAAM;EACrD,UAAA,qBAAC,SAAD;GACE,MAAM,MAAM,QAAQ,MAAM,eAAe;GACzC,UAAU,MAAM;GAChB,uBAAuB,MAAM;GAC7B,iBAAiB,MAAM,oBAAoB,SAAS,KAAA,IAAY,MAAM;GACtE,eAAe,SAAS;IACtB,KAAK,gBAAgB,cAAc;IACnC,YAAY,MAAM,QAAQ,IAAI;IAC9B,KAAK,cAAc,EAAE,KAAK,CAAC;GAC7B;GATF,UAAA,CAWE,oBAAC,gBAAD;IAAgB,QAAQ,oBAAC,QAAD,EAAQ,SAAQ,UAAW,CAAA;IAAG,YAAY,MAAM;IAAY,cAAc,MAAM,gBAAgB;IACrH,UAAA,MAAM,gBAAgB;GACT,CAAA,GAChB,oBAAC,gBAAD;IAAgB,MAAM,MAAM,QAAQ;IAAO,OAAO,MAAM,SAAS;IAAU,YAAY,MAAM,cAAc;IAAG,aAAa,MAAM;IAC9H,UAAA,MAAM,WAAW;GACJ,CAAA,CACT;;CACM,CAAA;AAErB;AAEA,IAAa,sBAAsB,QAAgC;CACjE,uBAAyC,eAAe,YAAY,KAAK;EACvE,SAAS;EACT,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,iBAAiB,SAAS;GACxB,cAAc,IAAI,oBAAoB,KAAA;GACtC,SAAS,IAAI,WAAW,KAAA;GACxB,MAAO,IAAI,QAAgC,KAAA;GAC3C,OAAQ,IAAI,SAAkC,KAAA;GAC9C,YAAY,aAAa,IAAI,cAAc;GAC3C,aAAa,aAAa,IAAI,eAAe;GAC7C,MAAM,IAAI,QAAQ,OAAO,KAAA,IAAY,WAAW,IAAI,IAAI;GACxD,aAAa,IAAI,mBAAmB,OAAO,KAAA,IAAY,WAAW,IAAI,eAAe;GACrF,OAAO,aAAa,IAAI,KAAK;GAC7B,YAAY,aAAa,IAAI,cAAc;GAC3C,UAAU,IAAI,YAAY,OAAO,KAAA,IAAY,WAAW,IAAI,QAAQ;GACpE,cAAc,IAAI,qBAAqB,OAAO,KAAA,IAAY,WAAW,IAAI,iBAAiB;GAC1F,uBAAuB,IAAI,8BAA8B,OAAO,KAAA,IAAY,WAAW,IAAI,0BAA0B;GACrH,iBAAkB,IAAI,wBAAgE,KAAA;EACxF;EACA,eAAe,EAAE,MAAM,mBAAmB,QAAQ,cAAc,EAAE;CACpE,CAAC;AACH;;;AC5EA,IAAa,kBAAkB,UAAgC;CAC7D,MAAM,EAAE,SAAS,WAAW;CAE5B,OACE,oBAAC,aAAD;EACE,KAAK,MAAM;EACX,QAAQ,MAAM;EACd,OAAO,MAAM;EACb,aAAa,MAAM;EACnB,OAAO,MAAM,SAAS;EACtB,MAAM,MAAM,QAAQ;EACpB,UAAU,MAAM,YAAY;EAC5B,OAAO,MAAM;EACb,QAAQ,MAAM;EACd,OAAO,MAAM;EACb,cAAY,MAAM,aAAa;EAC/B,cAAc,KAAK,YAAY,CAAC,CAAC;EACjC,eAAe,KAAK,aAAa,CAAC,CAAC;EACnC,eAAe,KAAK,aAAa,CAAC,CAAC;EACnC,eAAe,aAAa,aAAa,KAAK,kBAAkB;GAAE;GAAa;EAAS,CAAC;CAC1F,CAAA;AAEL;AAEA,IAAa,0BAA0B,QAAgC;CACrE,cAAoC,oBAAoB,gBAAgB;EACtE,MAAM,IAAI;EACV,QAAQ,IAAI;EACZ,SAAS;EACT,oBAAoB;GAAC;GAAO;GAAU;GAAS;GAAe;GAAS;GAAQ;GAAY;GAAS;GAAU;GAAS;EAAY;EACnI,iBAAiB,SAAS;GACxB,KAAK,IAAI,OAAO,KAAA;GAChB,QAAQ,IAAI,UAAU,KAAA;GACtB,OAAO,IAAI,SAAS,KAAA;GACpB,aAAa,IAAI,eAAe,KAAA;GAChC,OAAO,WAAW,IAAI,KAAK;GAC3B,MAAM,WAAW,IAAI,IAAI;GACzB,UAAU,WAAW,IAAI,QAAQ;GACjC,OAAO,IAAI,SAAS,KAAA;GACpB,QAAQ,IAAI,UAAU,KAAA;GACtB,OAAO,IAAI,SAAS,KAAA;GACpB,WAAW,IAAI,iBAAiB,KAAA;EAClC;CACF,CAAC;AACH;;;ACXA,IAAM,aAAkD;CACtD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;;;;AAMA,IAAa,sBAAoB,UAA4B,CAAC,MAAY;CACxE,MAAM,MAAwB;EAAE,MAAM,QAAQ;EAAM,QAAQ,QAAQ;CAAO;CAC3E,KAAK,MAAM,YAAY,YACrB,SAAS,GAAG;AAEhB;;;;;;;AC/EA,IAAa,gBAAwB;;;;;;AAOrC,IAAa,oBAAoB,UAA4B,CAAC,MAAY;CACxE,mBAAqB;EAAE,MAAM;EAAU,QAAA;EAAQ,GAAG;CAAQ,CAAC;AAC7D"}
|