@iris-ui-kit/vue 0.2.27 → 0.2.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/admin.cjs +11 -3
  2. package/dist/admin.cjs.map +1 -1
  3. package/dist/admin.js +3 -3
  4. package/dist/behaviors.d.cts +2 -2
  5. package/dist/behaviors.d.ts +2 -2
  6. package/dist/{chunk-IAG64CHL.js → chunk-BVKOOTXG.js} +3 -3
  7. package/dist/chunk-BVKOOTXG.js.map +1 -0
  8. package/dist/{chunk-ASFDGYIR.js → chunk-EZUDM4TM.js} +13 -5
  9. package/dist/chunk-EZUDM4TM.js.map +1 -0
  10. package/dist/{chunk-UPC4GN3F.js → chunk-KAOPZNZF.js} +3 -3
  11. package/dist/chunk-KAOPZNZF.js.map +1 -0
  12. package/dist/{chunk-MO7AAXA6.js → chunk-KSJZLFAT.js} +6 -6
  13. package/dist/chunk-KSJZLFAT.js.map +1 -0
  14. package/dist/{chunk-XCNCIG2I.js → chunk-LQ2YAOYR.js} +11 -10
  15. package/dist/chunk-LQ2YAOYR.js.map +1 -0
  16. package/dist/{chunk-ZTPIXL7Q.js → chunk-OH4YSGFK.js} +3 -3
  17. package/dist/chunk-OH4YSGFK.js.map +1 -0
  18. package/dist/{chunk-TCAXRWT6.js → chunk-W3JMJVEK.js} +3 -3
  19. package/dist/chunk-W3JMJVEK.js.map +1 -0
  20. package/dist/{chunk-LWABTQCB.js → chunk-X5UOY4IV.js} +13 -9
  21. package/dist/chunk-X5UOY4IV.js.map +1 -0
  22. package/dist/{chunk-3547J6IN.js → chunk-X7Y35UUL.js} +3 -3
  23. package/dist/{chunk-3547J6IN.js.map → chunk-X7Y35UUL.js.map} +1 -1
  24. package/dist/error-boundary.cjs +1 -1
  25. package/dist/error-boundary.cjs.map +1 -1
  26. package/dist/error-boundary.js +2 -2
  27. package/dist/form.cjs +1 -1
  28. package/dist/form.cjs.map +1 -1
  29. package/dist/form.js +1 -1
  30. package/dist/i18n.cjs +1 -1
  31. package/dist/i18n.cjs.map +1 -1
  32. package/dist/i18n.js +1 -1
  33. package/dist/index.cjs +3462 -859
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.d.cts +723 -283
  36. package/dist/index.d.ts +723 -283
  37. package/dist/index.js +3432 -846
  38. package/dist/index.js.map +1 -1
  39. package/dist/modal-utils.cjs +9 -8
  40. package/dist/modal-utils.cjs.map +1 -1
  41. package/dist/modal-utils.js +1 -1
  42. package/dist/provider.cjs +4 -4
  43. package/dist/provider.cjs.map +1 -1
  44. package/dist/provider.js +4 -4
  45. package/dist/skeletons.cjs +11 -7
  46. package/dist/skeletons.cjs.map +1 -1
  47. package/dist/skeletons.d.cts +1 -1
  48. package/dist/skeletons.d.ts +1 -1
  49. package/dist/skeletons.js +2 -2
  50. package/dist/skins.cjs +1 -1
  51. package/dist/skins.cjs.map +1 -1
  52. package/dist/skins.js +1 -1
  53. package/dist/theme.cjs +1 -1
  54. package/dist/theme.cjs.map +1 -1
  55. package/dist/theme.js +1 -1
  56. package/package.json +11 -11
  57. package/dist/chunk-ASFDGYIR.js.map +0 -1
  58. package/dist/chunk-IAG64CHL.js.map +0 -1
  59. package/dist/chunk-LWABTQCB.js.map +0 -1
  60. package/dist/chunk-MO7AAXA6.js.map +0 -1
  61. package/dist/chunk-TCAXRWT6.js.map +0 -1
  62. package/dist/chunk-UPC4GN3F.js.map +0 -1
  63. package/dist/chunk-XCNCIG2I.js.map +0 -1
  64. package/dist/chunk-ZTPIXL7Q.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/layouts/SidebarLayout.ts","../src/layouts/HeaderLayout.ts","../src/theme/ThemeProvider.ts","../src/primitives/icon/Icon.ts","../src/i18n/context.ts","../src/i18n/useI18n.ts","../src/admin/styles.ts","../src/admin/NavMenuFlyout.ts","../src/admin/NavMenuKeyboard.ts","../src/admin/NavMenu.ts","../src/primitives/breadcrumb/Breadcrumb.ts","../src/primitives/breadcrumb/BreadcrumbItem.ts","../src/admin/AdminBreadcrumb.ts","../src/admin/useTabsNav.ts","../src/machine/useMachine.ts","../src/primitives/dropdown/context.ts","../src/primitives/dropdown/Dropdown.ts","../src/primitives/slot/Slot.ts","../src/primitives/dropdown/DropdownTrigger.ts","../src/primitives/floating/useFloating.ts","../src/primitives/floating/useDismiss.ts","../src/primitives/dropdown/DropdownMenu.ts","../src/primitives/dropdown/DropdownItem.ts","../src/behaviors/Sortable.ts","../src/admin/AdminTabs.ts","../src/useStore.ts","../src/admin/useAdminShell.ts","../src/admin/AdminLayout.ts","../src/admin/useAdminPreferences.ts"],"names":["defineComponent","computed","ref","watch","h","applyTheme","applyDirection","onMounted","injectGlobalStyles","onBeforeUnmount","provide","defaultIconRegistry","inject","resolveThemedIcon","createI18n","findNavPath","isBranch","findNavNode","nextTick","visibleNav","createExpansion","branchTrail","shallowRef","firstLeaf","Fragment","onScopeDispose","createFloatingMachine","useId","composeEventHandlers","offsetMiddleware","flipMiddleware","shiftMiddleware","sizeMiddleware","arrowMiddleware","computePosition","autoUpdate","nextEnabledIndex","matchTypeahead","Teleport","createSortable","isClosable","toValue","createAdminShell","watchEffect"],"mappings":"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","file":"admin.cjs","sourcesContent":["import { computed, defineComponent, h, ref, watch } from 'vue'\n\n/**\n * Two-column layout with a collapsible sidebar.\n *\n * Slots:\n * - `sidebar` — content rendered in the sidebar (kept mounted across collapses).\n * - `default` — the main content area.\n *\n * Use `:collapsed` for controlled mode or `:default-collapsed` for the\n * uncontrolled initial state. When collapsed, the sidebar shrinks to\n * `:collapsed-width` so icon-only navigation still fits.\n */\nexport const IrisSidebarLayout = defineComponent({\n name: 'IrisSidebarLayout',\n inheritAttrs: false,\n props: {\n collapsed: { type: Boolean, default: undefined },\n defaultCollapsed: { type: Boolean, default: false },\n /** Sidebar width when expanded (px or CSS length). */\n width: { type: [Number, String], default: 240 },\n /** Sidebar width when collapsed. */\n collapsedWidth: { type: [Number, String], default: 60 },\n /** Sidebar position. */\n side: { type: String as () => 'left' | 'right', default: 'left' },\n },\n emits: {\n 'update:collapsed': (_value: boolean) => true,\n },\n setup(props, { slots, attrs, emit }) {\n const isControlled = computed(() => props.collapsed !== undefined)\n const internalCollapsed = ref(props.defaultCollapsed)\n const collapsed = computed(() =>\n isControlled.value ? Boolean(props.collapsed) : internalCollapsed.value,\n )\n\n // Sync controlled prop changes into internal state on first run so a later\n // detach to uncontrolled mode preserves the last-known value. `immediate`\n // fires the watcher on mount; the `value !== undefined` guard keeps the\n // first run a no-op for pure-uncontrolled mounts so `defaultCollapsed`\n // stays untouched.\n watch(\n () => props.collapsed,\n (value) => {\n if (value !== undefined) internalCollapsed.value = value\n },\n { immediate: true },\n )\n\n const setCollapsed = (value: boolean) => {\n if (!isControlled.value) internalCollapsed.value = value\n emit('update:collapsed', value)\n }\n\n const asLen = (v: number | string) => (typeof v === 'number' ? `${v}px` : v)\n\n return () => {\n const sidebarStyle: Record<string, string> = {\n width: collapsed.value ? asLen(props.collapsedWidth) : asLen(props.width),\n flexShrink: '0',\n background: 'var(--iris-surface)',\n borderRight: props.side === 'left' ? '1px solid var(--iris-border)' : 'none',\n borderLeft: props.side === 'right' ? '1px solid var(--iris-border)' : 'none',\n transition: 'width 180ms ease',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n }\n const mainStyle: Record<string, string> = {\n flex: '1',\n minWidth: '0',\n overflow: 'auto',\n background: 'var(--iris-background)',\n }\n const direction = props.side === 'right' ? 'row-reverse' : 'row'\n\n return h(\n 'div',\n {\n ...attrs,\n 'data-iris-sidebar-layout': '',\n 'data-collapsed': collapsed.value ? '' : undefined,\n 'data-side': props.side,\n style: {\n display: 'flex',\n flexDirection: direction,\n width: '100%',\n height: '100%',\n minHeight: '0',\n color: 'var(--iris-foreground)',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n h(\n 'aside',\n {\n role: 'complementary',\n 'data-iris-sidebar': '',\n 'data-collapsed': collapsed.value ? '' : undefined,\n style: sidebarStyle,\n },\n slots.sidebar?.({ collapsed: collapsed.value, setCollapsed }),\n ),\n h('div', { 'data-iris-sidebar-main': '', style: mainStyle }, slots.default?.()),\n ],\n )\n }\n },\n})\n","import { defineComponent, h, type PropType } from 'vue'\n\n/**\n * Two-region vertical layout: a sticky header on top, scrollable main below.\n *\n * Slots:\n * - `header` — fixed at top.\n * - `footer` — optional fixed at bottom.\n * - `default` — scrollable main region.\n */\nexport const IrisHeaderLayout = defineComponent({\n name: 'IrisHeaderLayout',\n inheritAttrs: false,\n props: {\n /** Header height (px or CSS length). Default `'auto'`. */\n headerHeight: { type: [Number, String] as PropType<number | string>, default: 'auto' },\n /** Footer height (px or CSS length). Default `'auto'`. */\n footerHeight: { type: [Number, String] as PropType<number | string>, default: 'auto' },\n /** When true, header sticks via `position: sticky` instead of static. */\n sticky: { type: Boolean, default: true },\n },\n setup(props, { slots, attrs }) {\n const asLen = (v: number | string) => (typeof v === 'number' ? `${v}px` : v)\n return () =>\n h(\n 'div',\n {\n ...attrs,\n 'data-iris-header-layout': '',\n style: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n minHeight: '0',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n slots.header\n ? h(\n 'header',\n {\n role: 'banner',\n 'data-iris-header': '',\n style: {\n flexShrink: '0',\n height: asLen(props.headerHeight),\n borderBottom: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n position: props.sticky ? 'sticky' : 'static',\n top: '0',\n zIndex: '50',\n },\n },\n slots.header(),\n )\n : null,\n h(\n 'main',\n {\n role: 'main',\n 'data-iris-header-main': '',\n style: { flex: '1', minHeight: '0', overflow: 'auto' },\n },\n slots.default?.(),\n ),\n slots.footer\n ? h(\n 'footer',\n {\n role: 'contentinfo',\n 'data-iris-footer': '',\n style: {\n flexShrink: '0',\n height: asLen(props.footerHeight),\n borderTop: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n },\n },\n slots.footer(),\n )\n : null,\n ],\n )\n },\n})\n","import {\n computed,\n defineComponent,\n inject,\n onBeforeUnmount,\n onMounted,\n provide,\n ref,\n watch,\n type ComputedRef,\n type InjectionKey,\n type PropType,\n type Ref,\n} from 'vue'\nimport {\n applyDirection,\n applyTheme,\n injectGlobalStyles,\n type ApplyDirectionResult,\n type ApplyThemeResult,\n type Direction,\n type ThemeStore,\n} from '@iris-ui-kit/theme'\nimport type { IrisTheme } from '@iris-ui-kit/tokens'\n\nexport interface IrisThemeContext {\n store: ThemeStore\n current: Ref<IrisTheme>\n dir: ComputedRef<Direction>\n}\n\nexport const IrisThemeKey: InjectionKey<IrisThemeContext> = Symbol('IrisTheme')\n\n/**\n * Renderless provider that:\n * 1. exposes the theme store to descendants via `provide`,\n * 2. applies the current theme to a target element on mount and on change,\n * 3. reverts the inline custom properties on unmount.\n *\n * `target` defaults to `document.documentElement`. Pass an element ref to\n * scope a theme to a subtree.\n */\nexport const ThemeProvider = defineComponent({\n name: 'IrisThemeProvider',\n props: {\n store: {\n type: Object as PropType<ThemeStore>,\n required: true,\n },\n target: {\n type: Object as PropType<HTMLElement | null>,\n default: null,\n },\n /** Writing direction; sets `dir` on the target for RTL. Default `'ltr'`. */\n dir: {\n type: String as PropType<Direction>,\n default: 'ltr',\n },\n /** CSP nonce for injected inline stylesheets. */\n cspNonce: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n const current = ref(props.store.store.getState()) as Ref<IrisTheme>\n let unsubscribe = props.store.store.subscribe((next) => {\n current.value = next\n })\n\n let applied: ApplyThemeResult | null = null\n let dirApplied: ApplyDirectionResult | null = null\n\n const targetEl = () => props.target ?? document.documentElement\n\n const applyCurrent = () => {\n applied?.revert()\n applied = applyTheme(current.value, targetEl())\n }\n\n const applyDir = () => {\n dirApplied?.revert()\n dirApplied = applyDirection(props.dir, targetEl())\n }\n\n onMounted(() => {\n injectGlobalStyles(props.cspNonce)\n applyCurrent()\n applyDir()\n })\n\n watch(current, () => {\n if (applied) applyCurrent()\n })\n\n watch(\n () => props.store,\n (nextStore) => {\n unsubscribe()\n unsubscribe = nextStore.store.subscribe((next) => {\n current.value = next\n })\n current.value = nextStore.store.getState()\n if (applied) applyCurrent()\n },\n )\n\n watch(\n () => props.target,\n () => {\n if (applied) applyCurrent()\n if (dirApplied) applyDir()\n },\n )\n\n watch(\n () => props.dir,\n () => {\n if (dirApplied) applyDir()\n },\n )\n\n onBeforeUnmount(() => {\n unsubscribe()\n applied?.revert()\n applied = null\n dirApplied?.revert()\n dirApplied = null\n })\n\n provide(IrisThemeKey, { store: props.store, current, dir: computed(() => props.dir) })\n\n return () => slots.default?.()\n },\n})\n\nexport function useThemeContext(): IrisThemeContext {\n const ctx = inject(IrisThemeKey)\n if (!ctx) {\n throw new Error('[iris-ui] useTheme(): no <ThemeProvider> ancestor found')\n }\n return ctx\n}\n\n/**\n * Current writing direction (`'ltr'` / `'rtl'`) from the nearest\n * `<ThemeProvider>`, or a static `'ltr'` ref when there is none.\n */\nexport function useDirection(): ComputedRef<Direction> {\n const ctx = inject(IrisThemeKey, null)\n return ctx ? ctx.dir : computed(() => 'ltr' as Direction)\n}\n","import { defineComponent, h, inject, type PropType, type VNode } from 'vue'\nimport { defaultIconRegistry, resolveThemedIcon, type IrisIconRegistry } from '@iris-ui-kit/icons'\nimport { IrisThemeKey } from '../../theme'\n\n/**\n * Renders a registered icon as inline SVG. Resolves `name` through an\n * `@iris-ui-kit/icons` registry and renders the icon's structured nodes as real\n * SVG child elements (no raw-HTML injection). Colors follow `currentColor`, so\n * the surrounding CSS `color` themes it. Renders nothing for an unresolved name.\n */\nexport const IrisIcon = defineComponent({\n name: 'IrisIcon',\n inheritAttrs: false,\n props: {\n /** Semantic icon name resolved via the registry (e.g. 'check'). */\n name: { type: String, required: true },\n /** Width & height (number → px). */\n size: { type: [Number, String] as PropType<number | string>, default: 24 },\n /** Stroke width for line icons. */\n strokeWidth: { type: Number, default: 2 },\n /** Render as a filled glyph instead of a stroked line icon. */\n fill: { type: Boolean, default: false },\n /** Accessible title; sets role=\"img\" + aria-label. Omit for decorative icons. */\n title: { type: String, default: undefined },\n /** Registry to resolve `name` against. Defaults to the built-in set. */\n registry: { type: Object as PropType<IrisIconRegistry>, default: () => defaultIconRegistry },\n },\n setup(props, { attrs }) {\n const themeCtx = inject(IrisThemeKey, undefined)\n return () => {\n const icon = resolveThemedIcon(props.registry, props.name, themeCtx?.current.value)\n if (!icon) return null\n\n const paint = props.fill\n ? { fill: 'currentColor' }\n : {\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': props.strokeWidth,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }\n\n const children: VNode[] = icon.nodes.map((node, i) => h(node.tag, { key: i, ...node.attrs }))\n if (props.title) children.unshift(h('title', props.title))\n\n return h(\n 'svg',\n {\n ...attrs,\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: icon.viewBox ?? '0 0 24 24',\n width: props.size,\n height: props.size,\n ...paint,\n role: props.title ? 'img' : undefined,\n 'aria-label': props.title || undefined,\n 'aria-hidden': props.title ? undefined : 'true',\n 'data-iris-icon': props.name,\n style: {\n display: 'inline-block',\n verticalAlign: 'middle',\n flexShrink: 0,\n ...((attrs.style as Record<string, string>) ?? {}),\n },\n },\n children,\n )\n }\n },\n})\n","import { type InjectionKey } from 'vue'\nimport type { I18n } from '@iris-ui-kit/core'\n\n/** Injection key carrying the active {@link I18n} instance to `useI18n`. */\nexport const I18nInjectionKey: InjectionKey<I18n> = Symbol('IrisI18n')\n","import { computed, inject, onBeforeUnmount, ref, type ComputedRef, type Ref } from 'vue'\nimport { createI18n, type I18n, type I18nState } from '@iris-ui-kit/core'\nimport { I18nInjectionKey } from './context'\n\nexport interface UseI18nReturn {\n locale: ComputedRef<string>\n t: I18n['t']\n formatDate: I18n['formatDate']\n formatNumber: I18n['formatNumber']\n formatRelativeTime: I18n['formatRelativeTime']\n setLocale: I18n['setLocale']\n setMessages: I18n['setMessages']\n}\n\n// Shared fallback so components can call `useI18n()` without an enclosing\n// provider — they get English defaults rather than throwing.\nlet fallbackI18n: I18n | null = null\nfunction getFallback(): I18n {\n if (fallbackI18n === null) fallbackI18n = createI18n()\n return fallbackI18n\n}\n\n/**\n * Reactive access to the active locale + translation/formatting helpers.\n * Works with or without an `<IrisI18nProvider>` (falls back to English\n * defaults). `t` / formatters read the live locale at call time, and `locale`\n * is a reactive ref so templates re-render on change.\n */\nexport function useI18n(): UseI18nReturn {\n const i18n = inject(I18nInjectionKey, null) ?? getFallback()\n const state = ref(i18n.getState()) as Ref<I18nState>\n const unsubscribe = i18n.subscribe((next) => {\n state.value = next\n })\n onBeforeUnmount(unsubscribe)\n\n return {\n locale: computed(() => state.value.locale),\n t: (key, params) => {\n void state.value.locale\n return i18n.t(key, params)\n },\n formatDate: (value, options) => {\n void state.value.locale\n return i18n.formatDate(value, options)\n },\n formatNumber: (value, options) => {\n void state.value.locale\n return i18n.formatNumber(value, options)\n },\n formatRelativeTime: (value, unit, options) => {\n void state.value.locale\n return i18n.formatRelativeTime(value, unit, options)\n },\n setLocale: i18n.setLocale,\n setMessages: i18n.setMessages,\n }\n}\n","export const __NAV_MENU_STYLE_ID = 'iris-nav-menu-styles'\n\nconst CSS = `\n:where(.iris-nav-menu) {\n --iris-nav-indent-step: 16px;\n --iris-nav-item-padding-inline: 12px;\n --iris-nav-item-padding-block: 8px;\n --iris-nav-item-border-radius: var(--iris-radius-md, 6px);\n --iris-nav-item-hover: var(--iris-surface-hover, var(--iris-surface));\n --iris-nav-item-height: 34px;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--iris-space-xxs, 4px);\n width: 100%;\n}\n\n:where(.iris-nav-menu--horizontal) {\n flex-direction: row;\n align-items: center;\n width: auto;\n}\n\n:where(.iris-nav-menu-group) {\n position: relative;\n}\n\n:where(.iris-nav-menu-item) {\n appearance: none;\n box-sizing: border-box;\n display: flex;\n flex: 0 1 auto;\n align-items: center;\n width: 100%;\n min-height: var(--iris-nav-item-height);\n border: none;\n border-radius: var(--iris-nav-item-border-radius);\n background: transparent;\n color: var(--iris-foreground);\n font: inherit;\n font-size: var(--iris-font-size-md, 14px);\n line-height: 1.2;\n font-weight: 400;\n text-align: start;\n cursor: pointer;\n opacity: 1;\n margin: 0;\n gap: var(--iris-space-sm, 12px);\n padding-block: var(--iris-nav-item-padding-block);\n padding-inline: var(--iris-nav-item-padding-inline);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n:where(.iris-nav-menu--horizontal > .iris-nav-menu-group > .iris-nav-menu-item) {\n width: auto;\n padding-inline-start: var(--iris-nav-item-padding-inline);\n}\n\n:where(.iris-nav-menu-item[data-depth='0']) {\n --iris-nav-item-padding-inline-start: 12px;\n}\n\n:where(.iris-nav-menu-item[data-depth='1']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step));\n}\n\n:where(.iris-nav-menu-item[data-depth='2']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 2);\n}\n\n:where(.iris-nav-menu-item[data-depth='3']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 3);\n}\n\n:where(.iris-nav-menu-item[data-depth='4']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 4);\n}\n\n:where(.iris-nav-menu-item[data-depth='5']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 5);\n}\n\n:where(.iris-nav-menu-item[data-depth='6']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 6);\n}\n\n:where(.iris-nav-menu-item[data-depth='7']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 7);\n}\n\n:where(.iris-nav-menu-item[data-depth='8']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 8);\n}\n\n:where(.iris-nav-menu-item[data-depth='9']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 9);\n}\n\n:where(.iris-nav-menu--vertical .iris-nav-menu-item[data-depth]) {\n padding-inline-start: var(--iris-nav-item-padding-inline-start);\n}\n\n:where(.iris-nav-menu-item:hover),\n:where(.iris-nav-menu-item.is-hovered):not([disabled], .is-disabled) {\n background: var(--iris-nav-item-hover);\n}\n\n.iris-nav-menu-item[data-active='true'] {\n background: var(--iris-primary);\n color: var(--iris-primary-foreground, #fff);\n font-weight: 600;\n}\n\n:where(.iris-nav-menu-item[data-active-trail='true']) {\n color: var(--iris-primary);\n font-weight: 600;\n}\n\n:where(.iris-nav-menu-item[disabled], .iris-nav-menu-item.is-disabled) {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n:where(.iris-nav-menu-item:focus-visible) {\n outline: 2px solid var(--iris-ring, var(--iris-primary));\n outline-offset: 1px;\n}\n\n:where(.iris-nav-menu-label) {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n:where(.iris-nav-menu-badge) {\n margin-inline-start: var(--iris-space-xs, 8px);\n font-size: var(--iris-font-size-xs, 12px);\n line-height: 1;\n padding: var(--iris-space-xxs, 4px) var(--iris-space-xs, 8px);\n border-radius: 999px;\n background: var(--iris-danger, #ef4444);\n color: var(--iris-primary-foreground, #fff);\n flex: 0 0 auto;\n}\n\n:where(.iris-nav-menu-arrow) {\n flex: 0 0 auto;\n opacity: 0.6;\n transform: rotate(0deg);\n transform-origin: center;\n transition: transform 160ms ease;\n margin-inline-start: auto;\n}\n\n:where(.iris-nav-menu-arrow[data-reversed='true']) {\n transform: rotate(180deg);\n}\n\n:where(.iris-nav-menu-fallback-icon) {\n display: inline-flex;\n width: 20px;\n height: 20px;\n align-items: center;\n justify-content: center;\n font-weight: 700;\n}\n\n:where(.iris-nav-menu-item.is-disabled) .iris-nav-menu-label {\n opacity: 0.75;\n}\n\n/* Vertical branches stay in the DOM and animate height via the grid-rows\n trick (0fr → 1fr); the inner wrapper provides the overflow clipping so the\n transition is a smooth accordion without a max-height cap. */\n:where(.iris-nav-menu--vertical .iris-nav-menu-group > .iris-nav-menu-children) {\n display: grid;\n grid-template-rows: 0fr;\n opacity: 0;\n visibility: hidden;\n transition:\n grid-template-rows 200ms ease,\n opacity 150ms ease,\n visibility 0s linear 200ms;\n}\n\n:where(.iris-nav-menu--vertical .iris-nav-menu-group > .iris-nav-menu-children > .iris-nav-menu-children-inner) {\n overflow: hidden;\n min-height: 0;\n}\n\n:where(.iris-nav-menu--vertical .iris-nav-menu-group[data-open='true'] > .iris-nav-menu-children) {\n grid-template-rows: 1fr;\n opacity: 1;\n visibility: visible;\n transition:\n grid-template-rows 200ms ease,\n opacity 150ms ease;\n}\n\n/* Flyout popups (horizontal mode + the collapsed rail) share the popup chrome\n and are hard-hidden when closed (no height animation needed). */\n:where(.iris-nav-menu--horizontal .iris-nav-menu-group > .iris-nav-menu-children),\n:where(.iris-nav-menu--collapsed .iris-nav-menu-group > .iris-nav-menu-children) {\n display: none;\n position: absolute;\n min-width: 220px;\n padding: var(--iris-space-xs, 8px);\n border: 1px solid var(--iris-border);\n border-radius: var(--iris-radius-md, 6px);\n background: var(--iris-surface);\n box-shadow: var(--iris-shadow-md);\n}\n\n:where(.iris-nav-menu--horizontal .iris-nav-menu-group[data-open='true'] > .iris-nav-menu-children),\n:where(.iris-nav-menu--collapsed .iris-nav-menu-group[data-open='true'] > .iris-nav-menu-children) {\n display: block;\n}\n\n:where(.iris-nav-menu--horizontal .iris-nav-menu-group[data-depth='0'] > .iris-nav-menu-children) {\n inset-block-start: 100%;\n inset-inline-start: 0;\n z-index: 60;\n}\n\n/* A9: the collapsed rail popup opens to the right of the icon. */\n:where(.iris-nav-menu--collapsed .iris-nav-menu-group[data-depth='0'] > .iris-nav-menu-children) {\n inset-block-start: 0;\n inset-inline-start: 100%;\n z-index: 60;\n}\n\n:where(.iris-nav-menu--horizontal .iris-nav-menu-group[data-depth]:not([data-depth='0']) > .iris-nav-menu-children),\n:where(.iris-nav-menu--collapsed .iris-nav-menu-group[data-depth]:not([data-depth='0']) > .iris-nav-menu-children) {\n inset-block-start: 0;\n inset-inline-start: 100%;\n z-index: 61;\n}\n\n:where(.iris-nav-menu--collapsed .iris-nav-menu-item) {\n justify-content: center;\n padding-inline-start: var(--iris-nav-item-padding-inline);\n}\n\n:where(.iris-nav-menu-item.is-collapsed) {\n justify-content: center;\n padding-inline: var(--iris-nav-item-padding-inline);\n}\n\n/* A9: the collapsed rail stays centered even though rows carry data-depth\n (the vertical indent rules would otherwise win the specificity tie). */\n:where(.iris-nav-menu--collapsed .iris-nav-menu-item[data-depth]) {\n justify-content: center;\n padding-inline: var(--iris-nav-item-padding-inline);\n}\n\n@media (prefers-reduced-motion: reduce) {\n :where(.iris-nav-menu-arrow) {\n transition: none;\n }\n :where(.iris-nav-menu--vertical .iris-nav-menu-group > .iris-nav-menu-children) {\n transition: none;\n }\n}\n`.trim()\n\nlet installed = false\n\nexport function installNavMenuStyles(): void {\n if (installed) return\n if (typeof document === 'undefined') return\n if (document.getElementById(__NAV_MENU_STYLE_ID)) {\n installed = true\n return\n }\n const style = document.createElement('style')\n style.id = __NAV_MENU_STYLE_ID\n style.textContent = CSS\n document.head.appendChild(style)\n installed = true\n}\n\n/** Test-only: remove the singleton stylesheet and reset installation state. */\nexport function __resetNavMenuStyles(): void {\n installed = false\n if (typeof document !== 'undefined') {\n document.getElementById(__NAV_MENU_STYLE_ID)?.remove()\n }\n}\n","import { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport { findNavPath, isBranch, type NavNode } from '@iris-ui-kit/core'\n\n/**\n * Flyout interaction controller for IrisNavMenu (horizontal + collapsed\n * rail): hover open/close latencies, click pinning, pointer containment,\n * viewport pinning, and the keyboard-focus visibility model. Aligned with\n * ant-design-vue Menu menubar semantics (A2/A3/A6/A9/A10).\n */\nexport interface NavMenuFlyoutCtx {\n items: NavNode[]\n tree: { value: NavNode[] }\n expanded: { value: string[] }\n flyoutMode: { value: boolean }\n collapsed: boolean\n toggle: (key: string) => void\n emitSelect: (key: string, node: NavNode) => void\n}\n\nconst HOVER_OPEN_DELAY_VAL = 60\nconst HOVER_CLOSE_DELAY_VAL = 150\n\nexport function createNavMenuFlyout(ctx: NavMenuFlyoutCtx) {\n const hovered = ref<string | null>(null)\n const hoveredBranches = ref<string[]>([])\n const focusedBranches = ref<string[]>([])\n /** Branches pinned open by a click (horizontal mode) — sticky across hover. */\n const clickedBranches = ref<string[]>([])\n /** Set while Escape is returning focus to a trigger: the group focusin\n * handler must not re-open the flyout it just closed. */\n let suppressFocusOpen = false\n\n // Hover open/close latencies: a single open timer plus per-branch close\n // timers so fast pointer travel across branches never flickers a popup.\n let openTimer: ReturnType<typeof setTimeout> | null = null\n const closeTimers = new Map<string, ReturnType<typeof setTimeout>>()\n\n const clearOpenTimer = (): void => {\n if (openTimer) {\n clearTimeout(openTimer)\n openTimer = null\n }\n }\n const cancelClose = (key: string): void => {\n const timer = closeTimers.get(key)\n if (timer) {\n clearTimeout(timer)\n closeTimers.delete(key)\n }\n }\n const cancelAllTimers = (): void => {\n clearOpenTimer()\n for (const timer of closeTimers.values()) clearTimeout(timer)\n closeTimers.clear()\n }\n onBeforeUnmount(cancelAllTimers)\n\n // --- Flyout viewport pinning ----------------------------------------\n // Top-level flyout popups (horizontal + collapsed rail) are rendered\n // in-flow, but the admin shell hosts the rail inside scroll containers\n // (sidebar overflow) — plain `position: absolute` popups get clipped.\n // Pin each top-level popup to the viewport with `position: fixed` from\n // the trigger's rect and keep it glued while open via scroll/resize\n // listeners. Nested popups stay absolute: their containing block is the\n // already-pinned top-level popup.\n const flyoutTriggers = new Map<string, HTMLElement>()\n const flyoutPanels = new Map<string, HTMLElement>()\n\n const setFlyoutRef = (map: Map<string, HTMLElement>, key: string, el: unknown): void => {\n if (el instanceof HTMLElement) map.set(key, el)\n else map.delete(key)\n }\n\n const positionFlyout = (key: string): void => {\n const trigger = flyoutTriggers.get(key)\n const panel = flyoutPanels.get(key)\n if (!trigger || !panel || typeof document === 'undefined') return\n const rect = trigger.getBoundingClientRect()\n const dir = getComputedStyle(trigger).direction\n panel.style.position = 'fixed'\n panel.style.top = `${ctx.collapsed ? rect.top : rect.bottom}px`\n if (dir === 'rtl') {\n // Rail: popup opens on the inline-start side (left in RTL).\n panel.style.left = ''\n panel.style.right = `${window.innerWidth - (ctx.collapsed ? rect.left : rect.right)}px`\n } else {\n panel.style.right = ''\n panel.style.left = `${ctx.collapsed ? rect.right : rect.left}px`\n }\n }\n\n onBeforeUnmount(() => {\n detachViewportListeners()\n flyoutTriggers.clear()\n flyoutPanels.clear()\n })\n\n /** Menubar semantics: at most one flyout per depth. Opening (hover / click\n * / keyboard) a branch closes any other branch's popup at the same depth,\n * so a pinned popup never coexists with a sibling hover popup and clicking\n * a sibling branch visibly switches the open popup. */\n const isolateAtDepth = (key: string): void => {\n const depth = findNavPath(ctx.items, key).length - 1\n const isSameDepthOther = (k: string): boolean =>\n k !== key && findNavPath(ctx.items, k).length - 1 === depth\n for (const state of [hoveredBranches, clickedBranches, focusedBranches]) {\n if (state.value.some(isSameDepthOther)) {\n state.value = state.value.filter((k) => !isSameDepthOther(k))\n }\n }\n }\n\n const scheduleOpen = (key: string): void => {\n clearOpenTimer()\n openTimer = setTimeout(() => {\n openTimer = null\n isolateAtDepth(key)\n setBranchInteraction(hoveredBranches, key, true)\n }, HOVER_OPEN_DELAY_VAL)\n }\n const scheduleClose = (key: string): void => {\n cancelClose(key)\n closeTimers.set(\n key,\n setTimeout(() => {\n closeTimers.delete(key)\n setBranchInteraction(hoveredBranches, key, false)\n }, HOVER_CLOSE_DELAY_VAL),\n )\n }\n\n const closeHorizontalMenus = (): void => {\n if (!ctx.flyoutMode.value) return\n cancelAllTimers()\n hovered.value = null\n hoveredBranches.value = []\n focusedBranches.value = []\n clickedBranches.value = []\n }\n\n const select = (node: NavNode): void => {\n if (node.disabled) return\n closeHorizontalMenus()\n ctx.emitSelect(node.key, node)\n }\n\n /** Horizontal branch click: toggle the flyout without touching expandedKeys. */\n const toggleFlyout = (key: string): void => {\n cancelAllTimers()\n const current = clickedBranches.value\n if (current.includes(key)) {\n clickedBranches.value = current.filter((k) => k !== key)\n setBranchInteraction(hoveredBranches, key, false)\n setBranchInteraction(focusedBranches, key, false)\n } else {\n // Clicking a sibling branch switches the pinned popup (antd behavior).\n isolateAtDepth(key)\n clickedBranches.value = [...clickedBranches.value, key]\n }\n }\n\n /** Keyboard open: mark the branch as focused (instant, menubar pattern). */\n const openFlyout = (key: string): void => {\n cancelAllTimers()\n isolateAtDepth(key)\n setBranchInteraction(focusedBranches, key, true)\n }\n\n const setBranchInteraction = (\n state: typeof hoveredBranches,\n key: string,\n enabled: boolean,\n ): void => {\n const current = state.value\n if (enabled) {\n if (!current.includes(key)) state.value = [...current, key]\n } else if (current.includes(key)) {\n state.value = current.filter((item) => item !== key)\n }\n }\n\n const keepsPointerInside = (\n container: EventTarget | null,\n event: { relatedTarget?: EventTarget | null },\n ): boolean => {\n if (!container || !(container instanceof HTMLElement)) return false\n const next = event.relatedTarget\n return !!(next && next instanceof Node && container.contains(next))\n }\n\n const interactionKeyAtDepth = (keys: string[], depth: number): string | undefined =>\n keys.find((key) => findNavPath(ctx.items, key).length === depth + 1)\n\n const horizontalBranchVisible = (key: string, depth: number): boolean => {\n const hoveredAtDepth = interactionKeyAtDepth(hoveredBranches.value, depth)\n if (hoveredAtDepth) return hoveredAtDepth === key\n const clickedAtDepth = interactionKeyAtDepth(clickedBranches.value, depth)\n if (clickedAtDepth) return clickedAtDepth === key\n return interactionKeyAtDepth(focusedBranches.value, depth) === key\n }\n\n // Watch the set of currently-visible top-level flyouts: pin each to the\n // viewport as it opens and keep them glued via scroll/resize listeners.\n const shownFlyoutKeys = computed(() => {\n if (!ctx.flyoutMode.value) return []\n const keys: string[] = []\n for (const node of ctx.tree.value) {\n if (isBranch(node) && horizontalBranchVisible(node.key, 0)) keys.push(node.key)\n }\n return keys\n })\n\n const repositionOpenFlyouts = (): void => {\n for (const key of shownFlyoutKeys.value) positionFlyout(key)\n }\n\n let viewportListenersActive = false\n const attachViewportListeners = (): void => {\n if (viewportListenersActive || typeof document === 'undefined') return\n viewportListenersActive = true\n // Capture phase: sidebar/header scroll containers don't bubble scroll.\n document.addEventListener('scroll', repositionOpenFlyouts, true)\n window.addEventListener('resize', repositionOpenFlyouts)\n }\n const detachViewportListeners = (): void => {\n if (!viewportListenersActive || typeof document === 'undefined') return\n viewportListenersActive = false\n document.removeEventListener('scroll', repositionOpenFlyouts, true)\n window.removeEventListener('resize', repositionOpenFlyouts)\n }\n\n watch(\n shownFlyoutKeys,\n (keys, prev) => {\n if (keys.length > 0 && prev.length === 0) attachViewportListeners()\n else if (keys.length === 0 && prev.length > 0) detachViewportListeners()\n for (const key of keys) positionFlyout(key)\n },\n { flush: 'post' },\n )\n\n return {\n hovered,\n hoveredBranches,\n focusedBranches,\n clickedBranches,\n select,\n toggleFlyout,\n openFlyout,\n closeHorizontalMenus,\n setBranchInteraction,\n keepsPointerInside,\n interactionKeyAtDepth,\n horizontalBranchVisible,\n shownFlyoutKeys,\n setFlyoutRef,\n flyoutTriggers,\n flyoutPanels,\n suppressFocusOpen: { get: () => suppressFocusOpen },\n setSuppressFocusOpen: (value: boolean) => {\n suppressFocusOpen = value\n },\n cancelClose,\n scheduleOpen,\n scheduleClose,\n cancelAllTimers,\n }\n}\n","import type { NavNode } from '@iris-ui-kit/core'\nimport { findNavNode, findNavPath, isBranch } from '@iris-ui-kit/core'\nimport { nextTick, type Ref } from 'vue'\n\n/**\n * Keyboard navigation for IrisNavMenu (WAI-ARIA menu pattern, aligned with\n * ant-design-vue Menu): ArrowUp/Down/Home/End move focus, ArrowRight opens a\n * flyout branch and steps in, ArrowLeft/Up close, Escape closes flyouts and\n * returns focus to the trigger (A3/A4/A5).\n */\nexport interface NavMenuKeydownDeps {\n items: NavNode[]\n flyoutMode: () => boolean\n expanded: () => string[]\n toggle: (key: string) => void\n openFlyout: (key: string) => void\n closeHorizontalMenus: () => void\n horizontalBranchVisible: (key: string, depth: number) => boolean\n setBranchInteraction: (state: Ref<string[]>, key: string, enabled: boolean) => void\n focusedBranches: Ref<string[]>\n collapsed: boolean\n hoveredBranches: Ref<string[]>\n clickedBranches: Ref<string[]>\n suppressFocusOpen: () => boolean\n setSuppressFocusOpen: (value: boolean) => void\n}\n\nexport function createNavMenuKeydownHandler(deps: NavMenuKeydownDeps) {\n const {\n items,\n flyoutMode,\n expanded,\n toggle,\n openFlyout,\n closeHorizontalMenus,\n horizontalBranchVisible,\n setBranchInteraction,\n focusedBranches,\n collapsed,\n hoveredBranches,\n clickedBranches,\n setSuppressFocusOpen,\n } = deps\n\n return (e: KeyboardEvent): void => {\n const root = e.currentTarget as HTMLElement\n const buttons = Array.from(root.querySelectorAll<HTMLElement>('[data-iris-nav-item]')).filter(\n (button) => !button.closest('[data-iris-nav-children][aria-hidden=\"true\"]'),\n )\n if (buttons.length === 0) return\n const idx = buttons.indexOf(document.activeElement as HTMLElement)\n const focusAt = (i: number): void => buttons[(i + buttons.length) % buttons.length]?.focus()\n const key = idx >= 0 ? buttons[idx]?.getAttribute('data-key') : undefined\n const node = key ? findNavNode(items, key) : undefined\n const depth = idx >= 0 ? Number(buttons[idx]?.getAttribute('data-depth') ?? 0) : 0\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n // A4: flyout mode — Down on a branch opens its popup and steps in.\n if (flyoutMode() && node && isBranch(node)) {\n openFlyout(key!)\n const group = buttons[idx]!.closest('[data-iris-nav-group]')\n void nextTick(() => {\n group\n ?.querySelector<HTMLElement>('[data-iris-nav-children] [data-iris-nav-item]')\n ?.focus()\n })\n return\n }\n focusAt(idx < 0 ? 0 : idx + 1)\n return\n }\n case 'ArrowUp': {\n e.preventDefault()\n // A4: Up on an open flyout trigger closes it and keeps focus there\n // (clears the click-pinned state too, so ArrowUp closes pinned popups\n // exactly like ArrowLeft).\n if (flyoutMode() && node && isBranch(node) && horizontalBranchVisible(key!, depth)) {\n setBranchInteraction(focusedBranches, key!, false)\n setBranchInteraction(clickedBranches, key!, false)\n return\n }\n focusAt(idx < 0 ? buttons.length - 1 : idx - 1)\n return\n }\n case 'Home':\n e.preventDefault()\n buttons[0]?.focus()\n return\n case 'End':\n e.preventDefault()\n buttons[buttons.length - 1]?.focus()\n return\n case 'Escape': {\n // A3: Escape closes open flyouts and returns focus to the trigger.\n if (flyoutMode()) {\n const openKeys = [\n ...hoveredBranches.value,\n ...clickedBranches.value,\n ...focusedBranches.value,\n ]\n if (openKeys.length > 0) {\n e.preventDefault()\n const openTop = openKeys.find((k) => findNavPath(items, k).length === 1)\n closeHorizontalMenus()\n if (openTop) {\n setSuppressFocusOpen(true)\n buttons.find((b) => b.getAttribute('data-key') === openTop)?.focus()\n void nextTick(() => {\n setSuppressFocusOpen(false)\n })\n }\n }\n }\n return\n }\n }\n\n if (collapsed || idx < 0 || !key || !node) return\n\n if (e.key === 'ArrowRight') {\n e.preventDefault()\n if (isBranch(node)) {\n if (flyoutMode() || !expanded().includes(key)) {\n // A4 (flyout) / A5 (vertical): open and step into the first child.\n if (flyoutMode()) openFlyout(key)\n else toggle(key)\n const group = buttons[idx]!.closest('[data-iris-nav-group]')\n void nextTick(() => {\n group\n ?.querySelector<HTMLElement>('[data-iris-nav-children] [data-iris-nav-item]')\n ?.focus()\n })\n } else {\n focusAt(idx + 1)\n }\n }\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault()\n if (flyoutMode() && isBranch(node)) {\n setBranchInteraction(focusedBranches, key, false)\n setBranchInteraction(clickedBranches, key, false)\n return\n }\n if (isBranch(node) && expanded().includes(key)) {\n toggle(key)\n } else {\n const parentKey = findNavPath(items, key).at(-2)?.key\n if (parentKey) {\n buttons.find((b) => b.getAttribute('data-key') === parentKey)?.focus()\n }\n }\n }\n }\n}\n","import {\n computed,\n defineComponent,\n h,\n onBeforeUnmount,\n shallowRef,\n watch,\n type PropType,\n type VNode,\n} from 'vue'\nimport {\n branchTrail,\n createExpansion,\n findNavPath,\n isBranch,\n visibleNav,\n firstLeaf,\n type NavNode,\n} from '@iris-ui-kit/core'\nimport { IrisIcon } from '../primitives/icon/Icon'\nimport { useI18n } from '../i18n'\nimport { installNavMenuStyles } from './styles'\nimport { createNavMenuFlyout } from './NavMenuFlyout'\nimport { createNavMenuKeydownHandler } from './NavMenuKeyboard'\n\n/** Hover open/close latencies for flyouts (horizontal mode + collapsed rail). */\n\n/**\n * Data-driven nested navigation menu — the sidebar nav of the admin shell.\n * Renders a normalized `NavNode[]` tree as an accordion of expandable branches\n * and selectable leaves; the active leaf and its ancestor branches are\n * highlighted, and the active branch trail auto-expands. Router-agnostic: it\n * takes `activeKey` + emits `select(key, node)`; the host owns navigation.\n *\n * `collapsed` switches to an icon-only rail (top-level items only); hovering a\n * branch pops the full submenu flyout out to the right and a branch click\n * jumps to its first leaf.\n */\nexport const IrisNavMenu = defineComponent({\n name: 'IrisNavMenu',\n inheritAttrs: false,\n props: {\n /** Normalized nav tree. */\n items: { type: Array as PropType<NavNode[]>, required: true },\n /** Key of the active leaf. */\n activeKey: { type: String, default: undefined },\n /** Controlled expanded branch keys (v-model:expandedKeys). */\n expandedKeys: { type: Array as PropType<string[]>, default: undefined },\n /** Initial expanded keys when uncontrolled (else the active trail expands). */\n defaultExpandedKeys: { type: Array as PropType<string[]>, default: undefined },\n /** Icon-only rail (top-level items only). */\n collapsed: { type: Boolean, default: false },\n orientation: {\n type: String as PropType<'vertical' | 'horizontal'>,\n default: 'vertical',\n },\n ariaLabel: { type: String, default: undefined },\n },\n emits: {\n select: (_key: string, _node: NavNode) => true,\n 'update:expandedKeys': (_keys: string[]) => true,\n },\n setup(props, { emit, attrs }) {\n installNavMenuStyles()\n const { t } = useI18n()\n const tree = computed(() => visibleNav(props.items))\n const activePath = computed(() =>\n props.activeKey ? findNavPath(props.items, props.activeKey).map((n) => n.key) : [],\n )\n\n // Branches with flyouts (horizontal popups + the collapsed rail popup) use\n // the hover/focus/click state instead of the vertical expansion model.\n const flyoutMode = computed(() => props.orientation === 'horizontal' || props.collapsed)\n\n const isControlled = computed(() => props.expandedKeys !== undefined)\n\n // The expand/collapse set — toggle, dedup and the active-trail union — lives in\n // the core expansion model; this component only layers on the controlled /\n // uncontrolled split. v-model here is *strict*: while controlled, rendering\n // reads the `expandedKeys` prop (not the store) so a toggle stays closed until\n // the parent updates it. The model therefore backs the uncontrolled state, and\n // `branchTrail` feeds the auto-open union through `merge`.\n const model = createExpansion({\n mode: 'multiple',\n defaultExpanded:\n props.defaultExpandedKeys ??\n (props.activeKey ? branchTrail(props.items, props.activeKey) : []),\n })\n const internalExpanded = shallowRef<string[]>(model.get())\n onBeforeUnmount(\n model.store.subscribe((keys) => {\n internalExpanded.value = keys\n }),\n )\n const expanded = computed(() =>\n isControlled.value ? (props.expandedKeys as string[]) : internalExpanded.value,\n )\n\n // Auto-open the active branch trail as the active leaf changes *or as the\n // tree arrives late* (async navigation data: the mount-time seed may have\n // seen `items = []`). `merge` is a union, so manual collapses survive and\n // repeated pushes are idempotent.\n watch([() => props.activeKey, () => props.items], ([key]) => {\n if (!isControlled.value) model.merge(key ? branchTrail(props.items, key) : [])\n })\n\n const toggle = (key: string): void => {\n if (isControlled.value) {\n const cur = props.expandedKeys as string[]\n emit(\n 'update:expandedKeys',\n cur.includes(key) ? cur.filter((k) => k !== key) : [...cur, key],\n )\n } else {\n model.toggle(key)\n emit('update:expandedKeys', model.get())\n }\n }\n\n // Flyout 状态机(hover/click 钉住/视口定位/键盘可见性)——NavMenuFlyout.ts\n const flyout = createNavMenuFlyout({\n items: props.items,\n tree,\n expanded,\n flyoutMode: { value: flyoutMode.value },\n collapsed: props.collapsed,\n toggle,\n emitSelect: (key: string, node: NavNode) => emit('select', key, node),\n })\n const {\n hovered,\n hoveredBranches,\n focusedBranches,\n clickedBranches,\n select,\n toggleFlyout,\n openFlyout,\n closeHorizontalMenus,\n setBranchInteraction,\n keepsPointerInside,\n horizontalBranchVisible,\n setFlyoutRef,\n flyoutTriggers,\n flyoutPanels,\n suppressFocusOpen,\n cancelClose,\n scheduleOpen,\n scheduleClose,\n } = flyout\n const itemClass = (opts: {\n depth: number\n active: boolean\n trail: boolean\n hovered: boolean\n open: boolean\n disabled: boolean\n branch: boolean\n }): string[] => {\n const depth = Math.min(9, opts.depth)\n return [\n 'iris-nav-menu-item',\n `iris-nav-menu-item--depth-${depth}`,\n `iris-nav-menu-item--${opts.branch ? 'branch' : 'leaf'}`,\n opts.active ? 'is-active' : undefined,\n opts.trail ? 'is-trail' : undefined,\n opts.hovered ? 'is-hovered' : undefined,\n opts.open ? 'is-open' : undefined,\n opts.disabled ? 'is-disabled' : undefined,\n ].filter(Boolean) as string[]\n }\n\n const iconNode = (node: NavNode, size = 18): VNode | null =>\n node.icon ? h(IrisIcon, { name: node.icon, size }) : null\n\n const badgeNode = (node: NavNode): VNode | null =>\n node.badge !== undefined && node.badge !== '' && !props.collapsed\n ? h(\n 'span',\n {\n class: 'iris-nav-menu-badge',\n 'data-iris-nav-badge': '',\n },\n String(node.badge),\n )\n : null\n\n const renderItem = (node: NavNode, depth: number): VNode => {\n const branch = isBranch(node)\n const horizontal = flyoutMode.value\n const open = expanded.value.includes(node.key)\n const shown = horizontal ? horizontalBranchVisible(node.key, depth) : open\n const active = node.key === props.activeKey\n const trail = branch && !active && activePath.value.includes(node.key)\n // A6: keep the row highlighted while its flyout stays open (pointer has\n // moved from the trigger into the popup).\n const rowHovered = hovered.value === node.key || (horizontal && shown)\n const arrowReversed = branch && !node.disabled && (active || trail || shown || rowHovered)\n\n // Top-level flyout popups are pinned to the viewport (fixed) so they\n // escape ancestor overflow; their trigger + panel refs feed that.\n const isFlyoutRoot = horizontal && branch && depth === 0\n\n const row = h(\n 'button',\n {\n type: 'button',\n ref: (el: unknown) => {\n if (isFlyoutRoot) setFlyoutRef(flyoutTriggers, node.key, el)\n },\n class: [\n ...itemClass({\n depth,\n active,\n trail,\n hovered: rowHovered,\n open: branch ? shown : false,\n disabled: !!node.disabled,\n branch,\n }),\n ...(props.collapsed && depth === 0 ? ['is-collapsed'] : []),\n ],\n 'data-iris-nav-item': '',\n 'data-key': node.key,\n 'data-branch': branch ? 'true' : undefined,\n 'data-active': active ? 'true' : undefined,\n 'data-active-trail': trail ? 'true' : undefined,\n 'data-open': branch && shown ? 'true' : undefined,\n 'data-hovered': rowHovered ? 'true' : undefined,\n 'data-depth': String(depth),\n 'data-orientation': props.orientation,\n disabled: node.disabled,\n title: props.collapsed ? node.title : undefined,\n 'aria-label': props.collapsed\n ? branch\n ? `${node.title} (section)`\n : node.title\n : undefined,\n 'aria-expanded': branch ? (shown ? 'true' : 'false') : undefined,\n 'aria-current': active ? 'page' : undefined,\n onMouseenter: () => {\n if (!node.disabled) hovered.value = node.key\n },\n onMouseleave: (event: MouseEvent) => {\n if (hovered.value === node.key && !keepsPointerInside(event.currentTarget, event)) {\n hovered.value = null\n }\n },\n onClick: () => {\n if (props.collapsed && branch) {\n select(firstLeaf(node))\n } else if (horizontal && branch) {\n // A2: horizontal clicks drive the flyout, not the expansion set.\n toggleFlyout(node.key)\n } else if (branch) {\n toggle(node.key)\n } else {\n select(node)\n }\n },\n },\n [\n iconNode(node),\n h(\n 'span',\n {\n class: 'iris-nav-menu-label',\n },\n node.title,\n ),\n badgeNode(node),\n branch && !(props.collapsed && depth === 0)\n ? h(IrisIcon, {\n name:\n horizontal && depth === 0 && !props.collapsed ? 'chevron-down' : 'chevron-right',\n size: 16,\n class: 'iris-nav-menu-arrow',\n 'data-reversed': arrowReversed ? 'true' : undefined,\n })\n : null,\n ],\n )\n\n // Children are always in the DOM (vertical: animated height via CSS;\n // horizontal/collapsed: flyout popups); `aria-hidden` keeps hidden items\n // out of the a11y tree and out of arrow-key navigation.\n return h(\n 'div',\n {\n key: node.key,\n 'data-iris-nav-group': branch ? '' : undefined,\n 'data-open': branch && shown ? 'true' : undefined,\n 'data-depth': String(depth),\n class: ['iris-nav-menu-group', `iris-nav-menu-group--depth-${Math.min(9, depth)}`],\n ...(horizontal && branch\n ? {\n onMouseenter: (event: MouseEvent) => {\n if (!node.disabled && !keepsPointerInside(event.currentTarget, event)) {\n cancelClose(node.key)\n scheduleOpen(node.key)\n }\n },\n onMouseover: (event: MouseEvent) => {\n if (!node.disabled && !keepsPointerInside(event.currentTarget, event)) {\n cancelClose(node.key)\n scheduleOpen(node.key)\n }\n },\n onMouseout: (event: MouseEvent) => {\n if (!node.disabled && !keepsPointerInside(event.currentTarget, event)) {\n scheduleClose(node.key)\n }\n },\n onMouseleave: (event: MouseEvent) => {\n if (!node.disabled && !keepsPointerInside(event.currentTarget, event)) {\n scheduleClose(node.key)\n }\n },\n onFocusin: () => {\n if (suppressFocusOpen.get()) return\n setBranchInteraction(focusedBranches, node.key, true)\n },\n onFocusout: (event: FocusEvent) => {\n const group = event.currentTarget as HTMLElement\n const next = event.relatedTarget as Node | null\n if (!next || !group.contains(next)) {\n setBranchInteraction(focusedBranches, node.key, false)\n }\n },\n }\n : {}),\n },\n [\n row,\n branch\n ? h(\n 'div',\n {\n class: 'iris-nav-menu-children',\n 'data-iris-nav-children': '',\n ref: (el: unknown) => {\n if (isFlyoutRoot) setFlyoutRef(flyoutPanels, node.key, el)\n },\n role: 'group',\n 'aria-hidden': shown ? undefined : 'true',\n },\n [\n h(\n 'div',\n { class: 'iris-nav-menu-children-inner' },\n (node.children ?? []).map((child) => renderItem(child, depth + 1)),\n ),\n ],\n )\n : null,\n ],\n )\n }\n\n // Keep the active item in view when the tree or active key changes (deep\n // links into long menus). jsdom-safe: no scrollIntoView / matchMedia there.\n const rootRef = shallowRef<HTMLElement | null>(null)\n watch(\n [() => props.activeKey, () => props.items],\n () => {\n if (!props.activeKey) return\n const root = rootRef.value\n if (!root) return\n const el = root.querySelector<HTMLElement>('[data-iris-nav-item][data-active=\"true\"]')\n if (!el || typeof el.scrollIntoView !== 'function') return\n let behavior: ScrollBehavior = 'auto'\n if (\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n !window.matchMedia('(prefers-reduced-motion: reduce)').matches\n ) {\n behavior = 'smooth'\n }\n el.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior })\n },\n { flush: 'post' },\n )\n\n // Arrow-key navigation over the visible items (Tab still works as a fallback).\n // Up/Down/Home/End move focus; Right expands a branch then steps into it;\n // Left collapses an open branch else moves to the parent. In flyout mode\n // (horizontal / collapsed) Down/Right open the popup and step into it,\n // Up/Left close it, and Escape closes everything (focus returns to the\n // owning top-level trigger).\n // 键盘导航(A3/A4/A5 + Up/Down/Home/End)——见 NavMenuKeyboard.ts\n const onKeydown = createNavMenuKeydownHandler({\n items: props.items,\n flyoutMode: () => flyoutMode.value,\n expanded: () => expanded.value,\n toggle,\n openFlyout,\n closeHorizontalMenus,\n horizontalBranchVisible,\n setBranchInteraction,\n focusedBranches,\n hoveredBranches,\n clickedBranches,\n suppressFocusOpen: () => suppressFocusOpen.get(),\n setSuppressFocusOpen: (v: boolean) => {\n flyout.setSuppressFocusOpen(v)\n },\n collapsed: props.collapsed,\n })\n const menuClass = [\n 'iris-nav-menu',\n `iris-nav-menu--${props.orientation}`,\n props.collapsed ? 'iris-nav-menu--collapsed' : 'iris-nav-menu--expanded',\n ]\n return () =>\n h(\n 'nav',\n {\n ...attrs,\n ref: (el: unknown) => {\n rootRef.value = (el ?? null) as HTMLElement | null\n },\n class: [...menuClass, attrs.class as unknown as string | string[] | undefined],\n 'data-iris-nav-menu': '',\n 'data-collapsed': props.collapsed ? 'true' : undefined,\n 'data-orientation': props.orientation,\n 'aria-label': props.ariaLabel ?? t('admin.nav'),\n onKeydown,\n style: attrs.style as Record<string, string> | undefined,\n },\n tree.value.map((node) => renderItem(node, 0)),\n )\n },\n})\n","import { Fragment, defineComponent, h, type VNode } from 'vue'\nimport { useI18n } from '../../i18n'\n\n/**\n * Container for breadcrumb navigation. Renders a `<nav>` with `<ol>` per\n * WAI-ARIA. The `separator` slot (or prop) is inserted between items;\n * defaults to `/`.\n *\n * Children should be `IrisBreadcrumbItem`s.\n */\nexport const IrisBreadcrumb = defineComponent({\n name: 'IrisBreadcrumb',\n inheritAttrs: false,\n props: {\n /** String separator. Ignored if the `separator` slot is provided. */\n separator: { type: String, default: '/' },\n },\n setup(props, { slots, attrs }) {\n const { t } = useI18n()\n return () => {\n const children = slots.default?.() ?? []\n // Flatten Fragment / array children to a flat list of VNodes.\n const flat: VNode[] = []\n const walk = (nodes: VNode[] | undefined) => {\n if (!nodes) return\n nodes.forEach((n) => {\n if (n.type === Fragment) walk(n.children as VNode[])\n else flat.push(n)\n })\n }\n walk(children as VNode[])\n\n const total = flat.length\n const slotsSep = slots.separator\n const sep = (key: number) =>\n h(\n 'li',\n {\n key: `sep-${key}`,\n 'data-iris-breadcrumb-separator': '',\n 'aria-hidden': 'true',\n style: { color: 'var(--iris-muted)', display: 'inline-flex', alignItems: 'center' },\n },\n slotsSep ? slotsSep() : props.separator,\n )\n\n const items: VNode[] = []\n flat.forEach((child, i) => {\n // Inject is-last hint so the item can self-mark as `aria-current=page`.\n const isLast = i === total - 1\n const wrapped = h(\n 'li',\n {\n key: `item-${i}`,\n 'data-iris-breadcrumb-item': '',\n 'data-iris-breadcrumb-last': isLast ? 'true' : undefined,\n style: { display: 'inline-flex', alignItems: 'center' },\n },\n // Pass isCurrent=true to the last child so it self-marks aria-current.\n h(\n child.type as never,\n { ...(child.props ?? {}), isCurrent: isLast } as Record<string, unknown>,\n child.children as never,\n ),\n )\n items.push(wrapped)\n if (!isLast) items.push(sep(i))\n })\n\n return h(\n 'nav',\n {\n ...attrs,\n 'aria-label': t('breadcrumb.label'),\n 'data-iris-breadcrumb': '',\n },\n h(\n 'ol',\n {\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--iris-space-xs, 8px)',\n margin: '0',\n padding: '0',\n listStyle: 'none',\n fontSize: 'var(--iris-font-size-md, 14px)',\n },\n },\n items,\n ),\n )\n }\n },\n})\n","import { defineComponent, h } from 'vue'\n\n/**\n * A single breadcrumb crumb. Renders an `<a>` when `href` is given and the\n * crumb is not the last one; otherwise a `<span>`.\n *\n * The `isCurrent` flag (set by the parent IrisBreadcrumb based on position)\n * adds `aria-current=\"page\"` and switches to the non-link rendering.\n */\nexport const IrisBreadcrumbItem = defineComponent({\n name: 'IrisBreadcrumbItem',\n inheritAttrs: false,\n props: {\n href: { type: String, default: '' },\n /** Internal: set by parent IrisBreadcrumb when this is the last item. */\n isCurrent: { type: Boolean, default: false },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const last = props.isCurrent\n const baseStyle: Record<string, string> = {\n color: last ? 'var(--iris-muted)' : 'var(--iris-primary)',\n textDecoration: 'none',\n cursor: last ? 'default' : props.href ? 'pointer' : 'default',\n }\n\n const baseAttrs = {\n ...attrs,\n 'aria-current': last ? 'page' : undefined,\n 'data-iris-breadcrumb-crumb': '',\n style: { ...baseStyle, ...((attrs.style as Record<string, string> | undefined) ?? {}) },\n }\n\n if (props.href && !last) {\n return h('a', { ...baseAttrs, href: props.href }, slots.default?.())\n }\n return h('span', baseAttrs, slots.default?.())\n }\n },\n})\n","import { defineComponent, h, type PropType, type VNode } from 'vue'\nimport type { NavNode } from '@iris-ui-kit/core'\nimport { IrisBreadcrumb } from '../primitives/breadcrumb/Breadcrumb'\nimport { IrisBreadcrumbItem } from '../primitives/breadcrumb/BreadcrumbItem'\nimport { IrisIcon } from '../primitives/icon/Icon'\n\n/**\n * Breadcrumb trail for the admin header, driven by a `NavNode[]` ancestor chain\n * (typically `findNavPath(menus, activeKey)`). The last crumb is the current\n * page (auto-marked `aria-current` by IrisBreadcrumb); earlier crumbs are\n * clickable and emit `select(key, node)` so the host can navigate.\n */\nexport const IrisAdminBreadcrumb = defineComponent({\n name: 'IrisAdminBreadcrumb',\n inheritAttrs: false,\n props: {\n /** Root→current ancestor chain. */\n trail: { type: Array as PropType<NavNode[]>, required: true },\n /** Show each node's icon before its title. */\n showIcon: { type: Boolean, default: true },\n /** Hide the breadcrumb when the trail has a single crumb. */\n hideSingle: { type: Boolean, default: false },\n separator: { type: String, default: '/' },\n },\n emits: {\n select: (_key: string, _node: NavNode) => true,\n },\n setup(props, { emit, attrs }) {\n return () => {\n const trail = props.trail\n if (trail.length === 0 || (props.hideSingle && trail.length === 1)) return null\n\n return h(\n IrisBreadcrumb,\n { ...attrs, separator: props.separator },\n {\n default: () =>\n trail.map((node, i) => {\n const last = i === trail.length - 1\n const content: VNode[] = []\n if (props.showIcon && node.icon) {\n content.push(\n h(IrisIcon, { name: node.icon, size: 14, style: { marginInlineEnd: '4px' } }),\n )\n }\n content.push(h('span', node.title))\n return h(\n IrisBreadcrumbItem,\n {\n key: node.key,\n 'data-iris-admin-crumb': '',\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n cursor: last ? 'default' : 'pointer',\n },\n onClick: last ? undefined : () => emit('select', node.key, node),\n },\n { default: () => content },\n )\n }),\n },\n )\n }\n },\n})\n","import { computed, onBeforeUnmount, ref, type ComputedRef, type Ref } from 'vue'\nimport type { TabsNav, TabsNavState, TabItem } from '@iris-ui-kit/core'\n\nexport interface UseTabsNavReturn {\n tabs: ComputedRef<TabItem[]>\n activeKey: ComputedRef<string | undefined>\n /** Keep-alive include-set (composite cache keys of all open tabs). */\n cacheKeys: ComputedRef<string[]>\n open: TabsNav['open']\n activate: TabsNav['activate']\n close: TabsNav['close']\n closeOthers: TabsNav['closeOthers']\n closeAll: TabsNav['closeAll']\n closeLeft: TabsNav['closeLeft']\n closeRight: TabsNav['closeRight']\n refresh: TabsNav['refresh']\n setPinned: TabsNav['setPinned']\n move: TabsNav['move']\n cacheKey: TabsNav['cacheKey']\n}\n\n/**\n * Vue binding for a framework-agnostic {@link TabsNav} store. Pass a shared\n * `createTabsNav()` instance (the host owns it so the tab bar and the keep-alive\n * content can read the same state) and get reactive `tabs` / `activeKey` /\n * `cacheKeys` plus the store's mutators.\n *\n * ```ts\n * const nav = createTabsNav({ tabs: [{ key: 'home', title: 'Home', pinned: true }] })\n * const { tabs, activeKey, open, close } = useTabsNav(nav)\n * ```\n */\nexport function useTabsNav(nav: TabsNav): UseTabsNavReturn {\n const state = ref(nav.getState()) as Ref<TabsNavState>\n const unsubscribe = nav.subscribe((next) => {\n state.value = next\n })\n onBeforeUnmount(unsubscribe)\n\n return {\n tabs: computed(() => state.value.tabs),\n activeKey: computed(() => state.value.activeKey),\n cacheKeys: computed(() => state.value.tabs.map((t) => nav.cacheKey(t.key))),\n open: nav.open,\n activate: nav.activate,\n close: nav.close,\n closeOthers: nav.closeOthers,\n closeAll: nav.closeAll,\n closeLeft: nav.closeLeft,\n closeRight: nav.closeRight,\n refresh: nav.refresh,\n setPinned: nav.setPinned,\n move: nav.move,\n cacheKey: nav.cacheKey,\n }\n}\n","import { onScopeDispose, ref, type Ref } from 'vue'\nimport type { Machine, MachineEvent, MachineState } from '@iris-ui-kit/core'\n\n/**\n * Bridge a framework-agnostic `Machine` into Vue reactivity.\n *\n * Returns a reactive ref of the current `{ value, context }` state and a\n * stable `send` function. Subscription is created eagerly and cleaned up on\n * scope dispose, so this hook is safe to call from any component's `setup()`.\n *\n * Teardown semantics: when the owning scope is disposed (component unmount,\n * `effectScope().stop()`, end of SSR render), the store subscription is\n * detached AND — by default — `machine.stop()` is called: pending `after`\n * timers are cancelled and further `send` calls become no-ops, so a delayed\n * transition can never fire into a disposed consumer (see the core `Machine`\n * contract). Pass `{ stopOnUnmount: false }` only when the machine is shared\n * with other consumers that outlive this scope — the subscription is still\n * detached, the machine keeps running.\n */\nexport function useMachine<TState extends string, TContext, TEvent extends MachineEvent>(\n machine: Machine<TState, TContext, TEvent>,\n options: { stopOnUnmount?: boolean } = {},\n): {\n state: Ref<MachineState<TState, TContext>>\n send: (event: TEvent) => void\n} {\n const state = ref(machine.store.getState()) as Ref<MachineState<TState, TContext>>\n const unsubscribe = machine.store.subscribe((next) => {\n state.value = next\n })\n onScopeDispose(\n () => {\n // Detach the bridge first (conservative order), then stop the machine.\n unsubscribe()\n if (options.stopOnUnmount !== false) machine.stop()\n },\n // failSilently: outside any effect scope there is nothing to dispose —\n // registering is a no-op and must not emit the \"no active effect scope\"\n // dev warning. Within a component/effectScope this arg changes nothing.\n true,\n )\n return { state, send: machine.send }\n}\n","import type { ComputedRef, InjectionKey, Ref } from 'vue'\nimport type { Placement } from '@iris-ui-kit/core'\n\nexport interface DropdownContext {\n open: ComputedRef<boolean>\n setOpen: (value: boolean) => void\n triggerRef: Ref<HTMLElement | null>\n contentRef: Ref<HTMLElement | null>\n contentId: string\n placement: Placement\n offset: number\n}\n\nexport const DropdownContextKey: InjectionKey<DropdownContext> = Symbol('IrisDropdown')\n","import { computed, defineComponent, provide, ref, useId, watch, type PropType } from 'vue'\nimport { createFloatingMachine, type Placement } from '@iris-ui-kit/core'\nimport { useMachine } from '../../machine/useMachine'\nimport { DropdownContextKey } from './context'\n\n/**\n * Dropdown menu root. Composes `createFloatingMachine` (state) with\n * `useFloating` (positioning) and `useDismiss` (close-on-outside / Escape) —\n * all delegated to the standard hooks used by `IrisPopover`. The dropdown\n * panel's semantics differ from a popover: it uses `role=\"menu\"`, supports\n * arrow-key navigation among items, and items auto-close the menu when\n * selected.\n *\n * @example\n * <IrisDropdown placement=\"bottom-end\">\n * <IrisDropdownTrigger as-child>\n * <IrisButton>Actions</IrisButton>\n * </IrisDropdownTrigger>\n * <IrisDropdownMenu>\n * <IrisDropdownItem @select=\"onCopy\">Copy</IrisDropdownItem>\n * <IrisDropdownItem @select=\"onDelete\">Delete</IrisDropdownItem>\n * </IrisDropdownMenu>\n * </IrisDropdown>\n */\nexport const IrisDropdown = defineComponent({\n name: 'IrisDropdown',\n props: {\n open: { type: Boolean, default: undefined },\n defaultOpen: { type: Boolean, default: false },\n placement: { type: String as PropType<Placement>, default: 'bottom-start' },\n offset: { type: Number, default: 6 },\n },\n emits: {\n 'update:open': (_value: boolean) => true,\n },\n setup(props, { slots, emit }) {\n const isControlled = computed(() => props.open !== undefined)\n const machine = createFloatingMachine(props.defaultOpen ? 'open' : 'closed')\n const { state, send } = useMachine(machine)\n\n watch(\n () => props.open,\n (value) => {\n if (value === undefined) return\n const currentlyOpen = state.value.value === 'open'\n if (value && !currentlyOpen) send({ type: 'OPEN' })\n if (!value && currentlyOpen) send({ type: 'CLOSE' })\n },\n { immediate: true },\n )\n\n const open = computed(() =>\n isControlled.value ? Boolean(props.open) : state.value.value === 'open',\n )\n\n const setOpen = (value: boolean) => {\n if (!isControlled.value) send({ type: value ? 'OPEN' : 'CLOSE' })\n emit('update:open', value)\n }\n\n provide(DropdownContextKey, {\n open,\n setOpen,\n triggerRef: ref(null),\n contentRef: ref(null),\n contentId: useId(),\n placement: props.placement,\n offset: props.offset,\n })\n\n return () => slots.default?.()\n },\n})\n","import { defineComponent, Fragment, h, type VNode } from 'vue'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\n\n/** Test whether a prop key looks like a Vue event listener: `onXxx`. */\nfunction isEventListenerKey(key: string): boolean {\n return key.startsWith('on') && key.length > 2 && /[A-Z]/.test(key.charAt(2))\n}\n\n/**\n * Compose multiple Vue template refs into a single function ref. Each input\n * may be a `Ref<HTMLElement | null>`, a function ref `(el) => void`, or null.\n * All non-null inputs are invoked / assigned with the same element.\n */\nexport function composeRefs(...refs: Array<unknown>): (el: unknown) => void {\n return (el: unknown) => {\n for (const r of refs) {\n if (r == null) continue\n if (typeof r === 'function') {\n ;(r as (el: unknown) => void)(el)\n } else if (typeof r === 'object' && 'value' in (r as object)) {\n ;(r as { value: unknown }).value = el\n }\n }\n }\n}\n\n/**\n * Merge parent (slot) props onto a child VNode's props with Radix-style\n * semantics:\n *\n * - **Event handlers (`on*`)**: composed via `composeEventHandlers` — the\n * parent's handler runs first; if it calls `event.preventDefault()`, the\n * child's handler is skipped. This lets the parent intercept (e.g. when\n * IrisButton is `disabled`).\n * - **`class`**: concatenated, parent first.\n * - **`style`**: shallow-merged, child wins on key conflicts.\n * - **Anything else**: child wins (the user's explicit prop is authoritative).\n */\nexport function mergeSlotProps(\n parent: Record<string, unknown>,\n child: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = { ...child }\n\n for (const key in parent) {\n const parentVal = parent[key]\n const childVal = child[key]\n\n if (isEventListenerKey(key)) {\n if (typeof parentVal === 'function' && typeof childVal === 'function') {\n out[key] = composeEventHandlers(\n parentVal as (e: { defaultPrevented: boolean }) => void,\n childVal as (e: { defaultPrevented: boolean }) => void,\n )\n } else if (typeof parentVal === 'function' && childVal == null) {\n out[key] = parentVal\n }\n // If only child has it, child wins (already in `out`).\n } else if (key === 'ref') {\n if (parentVal != null && childVal != null) {\n out[key] = composeRefs(parentVal, childVal)\n } else if (parentVal != null) {\n out[key] = parentVal\n }\n // If only child has a ref, child wins (already in `out`).\n } else if (key === 'class') {\n const merged = [parentVal, childVal].filter(Boolean).join(' ').trim()\n if (merged) out[key] = merged\n } else if (key === 'style') {\n if (parentVal || childVal) {\n out[key] = { ...(parentVal as object | undefined), ...(childVal as object | undefined) }\n }\n } else if (!(key in child)) {\n out[key] = parentVal\n }\n // else: non-handler, present in both — child wins (already in `out`).\n }\n\n return out\n}\n\n/**\n * Polymorphic root helper. Renders the user's single child VNode with the\n * parent's attrs merged onto it via `mergeSlotProps`.\n *\n * Inspired by Radix UI's `<Slot>`. Used by primitives that need to render\n * \"as\" the user's child element instead of their own default element.\n *\n * **Limitation (intentional in this iteration)**: template `ref`s placed on\n * the slotted child are not forwarded. Use a wrapping element or wait for a\n * future iteration.\n *\n * @example\n * <IrisSlot class=\"iris-button\" data-iris-button-variant=\"solid\">\n * <RouterLink to=\"/save\">Save</RouterLink>\n * </IrisSlot>\n * // → <RouterLink class=\"iris-button\" data-iris-button-variant=\"solid\" to=\"/save\">Save</RouterLink>\n */\nexport const IrisSlot = defineComponent({\n name: 'IrisSlot',\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n return () => {\n const children = slots.default?.()\n const root = findFirstElement(children)\n if (!root) {\n if (typeof process === 'undefined' || process.env?.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisSlot expected exactly one child element; got none.')\n }\n return null\n }\n const merged = mergeSlotProps(\n attrs as Record<string, unknown>,\n (root.props ?? {}) as Record<string, unknown>,\n )\n return h(root.type as string, merged, root.children as unknown as VNode[])\n }\n },\n})\n\n/**\n * Walk a VNode array (which may contain Fragments / Comments / Text) and\n * return the first usable element VNode. Warns in dev if there are multiple\n * sibling roots.\n */\nexport function findFirstElement(children: VNode[] | undefined): VNode | null {\n if (!children || children.length === 0) return null\n\n let found: VNode | null = null\n let extraCount = 0\n\n const walk = (nodes: VNode[]) => {\n for (const node of nodes) {\n if (node.type === Fragment) {\n const fragChildren = Array.isArray(node.children) ? (node.children as VNode[]) : []\n walk(fragChildren)\n continue\n }\n if (\n typeof node.type === 'string' ||\n typeof node.type === 'object' ||\n typeof node.type === 'function'\n ) {\n if (found) {\n extraCount += 1\n } else {\n found = node\n }\n }\n }\n }\n walk(children)\n\n if (\n extraCount > 0 &&\n (typeof process === 'undefined' || process.env?.NODE_ENV !== 'production')\n ) {\n console.warn(`[iris-ui] IrisSlot got ${extraCount + 1} root elements; only the first is used.`)\n }\n\n return found\n}\n","import { defineComponent, h, inject, type VNode } from 'vue'\nimport { findFirstElement, mergeSlotProps } from '../slot/Slot'\nimport { DropdownContextKey } from './context'\n\nexport const IrisDropdownTrigger = defineComponent({\n name: 'IrisDropdownTrigger',\n inheritAttrs: false,\n props: {\n asChild: { type: Boolean, default: false },\n },\n setup(props, { slots, attrs }) {\n const ctx = inject(DropdownContextKey)\n if (!ctx) {\n throw new Error('[iris-ui] IrisDropdownTrigger must be a descendant of IrisDropdown')\n }\n\n const onClick = (event: MouseEvent) => {\n if (event.defaultPrevented) return\n ctx.setOpen(!ctx.open.value)\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n // Pressing ArrowDown / Enter / Space on the trigger opens AND focuses the menu.\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n ctx.setOpen(true)\n }\n }\n\n const captureRef = (el: unknown) => {\n ctx.triggerRef.value = (el ?? null) as HTMLElement | null\n }\n\n return () => {\n const triggerProps: Record<string, unknown> = {\n 'aria-haspopup': 'menu',\n 'aria-expanded': ctx.open.value ? 'true' : 'false',\n 'aria-controls': ctx.contentId,\n 'data-state': ctx.open.value ? 'open' : 'closed',\n onClick,\n onKeydown: onKeyDown,\n ref: captureRef,\n }\n\n if (props.asChild) {\n const root = findFirstElement(slots.default?.())\n if (!root) {\n if (typeof process === 'undefined' || process.env?.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisDropdownTrigger: as-child requires a single child element')\n }\n return null\n }\n const merged = mergeSlotProps(\n { ...triggerProps, ...attrs },\n (root.props ?? {}) as Record<string, unknown>,\n )\n return h(root.type as string, merged, root.children as unknown as VNode[])\n }\n\n return h('button', { type: 'button', ...attrs, ...triggerProps }, slots.default?.())\n }\n },\n})\n","import { computed, onScopeDispose, ref, shallowRef, watch, type ComputedRef, type Ref } from 'vue'\nimport {\n autoUpdate,\n computePosition,\n arrow as arrowMiddleware,\n flip as flipMiddleware,\n offset as offsetMiddleware,\n shift as shiftMiddleware,\n size as sizeMiddleware,\n type Middleware,\n type Placement,\n type Strategy,\n} from '@floating-ui/dom'\n\nexport interface UseFloatingOptions {\n /** Element the floating panel is positioned relative to. */\n anchor: Ref<HTMLElement | null | undefined>\n /** The floating element itself. */\n floating: Ref<HTMLElement | null | undefined>\n /** Whether the floating element is visible. Controls `autoUpdate` lifecycle. */\n open: Ref<boolean>\n /** Default placement. Floating UI may flip it if `flip` is true. */\n placement?: Placement\n /** CSS position strategy. */\n strategy?: Strategy\n /** Pixel offset between anchor and floating element. */\n offset?: number\n /** Flip to the opposite side when the requested side overflows. Default `true`. */\n flip?: boolean\n /** Shift along the cross-axis to stay in view. Default `true`. */\n shift?: boolean\n /**\n * Constrain the floating element to the available viewport space — sets\n * `maxWidth`/`maxHeight` (minus 8px padding) on it so a long dropdown/popover\n * never overflows the screen (pair with `overflow:auto` for scroll). Off by\n * default. Pass a number to override the viewport padding.\n */\n size?: boolean | number\n /** Extra Floating UI middleware to append. */\n middleware?: Middleware[]\n /**\n * Optional ref to an arrow element inside the floating panel. When provided,\n * `arrowX`, `arrowY`, and `arrowSide` in the return value are populated.\n */\n arrow?: Ref<HTMLElement | null | undefined>\n}\n\nexport interface UseFloatingReturn {\n /** Computed x coordinate (px). */\n x: Ref<number>\n /** Computed y coordinate (px). */\n y: Ref<number>\n /** Final strategy (echo of input). */\n strategy: Ref<Strategy>\n /** Final placement, possibly flipped from the input placement. */\n finalPlacement: Ref<Placement>\n /** Ready-to-bind inline style object for the floating element. */\n floatingStyles: ComputedRef<Record<string, string>>\n /** Trigger a manual recompute. Usually not needed — `autoUpdate` handles scrolling/resizing. */\n update: () => Promise<void>\n /** Arrow x offset (px). Present when `arrow` option is set. */\n arrowX: Ref<number | undefined>\n /** Arrow y offset (px). Present when `arrow` option is set. */\n arrowY: Ref<number | undefined>\n /**\n * Side of the floating element the arrow is on.\n * E.g. `'bottom'` placement → `'top'` (arrow at top pointing up).\n */\n arrowSide: ComputedRef<'top' | 'right' | 'bottom' | 'left' | undefined>\n}\n\n/**\n * Reactive Floating UI integration. Subscribes `autoUpdate` whenever\n * `open === true` and both refs are populated; tears it down on close,\n * unmount, or ref clearing. Returns `floatingStyles` ready to be spread onto\n * the floating element.\n *\n * Pure positioning — does NOT render anything, does NOT manage focus,\n * does NOT handle dismiss behavior. Those concerns live in the consuming\n * primitive (Popover, Tooltip, Dialog, Menu, ...).\n *\n * @example\n * const triggerEl = ref<HTMLElement | null>(null)\n * const contentEl = ref<HTMLElement | null>(null)\n * const open = ref(false)\n * const { floatingStyles } = useFloating({\n * anchor: triggerEl,\n * floating: contentEl,\n * open,\n * placement: 'bottom-start',\n * offset: 8,\n * })\n */\nexport function useFloating(options: UseFloatingOptions): UseFloatingReturn {\n const x = ref(0)\n const y = ref(0)\n // True once the first positioning cycle lands. Until then the panel stays\n // `visibility: hidden` so it never flashes at the viewport origin (0,0).\n const positioned = ref(false)\n const strategy = ref<Strategy>(options.strategy ?? 'absolute')\n const finalPlacement = ref<Placement>(options.placement ?? 'bottom')\n const arrowX = ref<number | undefined>()\n const arrowY = ref<number | undefined>()\n\n const middleware = shallowRef<Middleware[]>([])\n rebuildMiddleware()\n\n function rebuildMiddleware() {\n const mw: Middleware[] = []\n if (options.offset !== undefined) mw.push(offsetMiddleware(options.offset))\n if (options.flip !== false) mw.push(flipMiddleware())\n if (options.shift !== false) mw.push(shiftMiddleware({ padding: 8 }))\n if (options.size) {\n const padding = typeof options.size === 'number' ? options.size : 8\n mw.push(\n sizeMiddleware({\n padding,\n apply({ availableWidth, availableHeight, elements }) {\n Object.assign(elements.floating.style, {\n maxWidth: `${Math.max(0, Math.floor(availableWidth))}px`,\n maxHeight: `${Math.max(0, Math.floor(availableHeight))}px`,\n })\n },\n }),\n )\n }\n if (options.arrow?.value) mw.push(arrowMiddleware({ element: options.arrow.value }))\n if (options.middleware) mw.push(...options.middleware)\n middleware.value = mw\n }\n\n let cleanupAutoUpdate: (() => void) | null = null\n // Monotonic token bumped on every new positioning cycle and on teardown, so a\n // computePosition() that resolves after the panel closed/re-opened (or after a\n // newer update started) drops its result instead of applying stale coords.\n let epoch = 0\n\n async function update() {\n const a = options.anchor.value\n const f = options.floating.value\n if (!a || !f) return\n rebuildMiddleware()\n const token = ++epoch\n const result = await computePosition(a, f, {\n placement: options.placement ?? 'bottom',\n strategy: strategy.value,\n middleware: middleware.value,\n })\n if (token !== epoch) return\n x.value = result.x\n y.value = result.y\n positioned.value = true\n finalPlacement.value = result.placement\n const arrowData = result.middlewareData.arrow as { x?: number; y?: number } | undefined\n arrowX.value = arrowData?.x\n arrowY.value = arrowData?.y\n }\n\n watch(\n [options.open, options.anchor, options.floating],\n ([isOpen, anchorEl, floatingEl]) => {\n cleanupAutoUpdate?.()\n cleanupAutoUpdate = null\n epoch++\n if (isOpen && anchorEl && floatingEl) {\n positioned.value = false\n cleanupAutoUpdate = autoUpdate(anchorEl, floatingEl, () => {\n void update()\n })\n }\n },\n { flush: 'post', immediate: true },\n )\n\n onScopeDispose(() => {\n cleanupAutoUpdate?.()\n cleanupAutoUpdate = null\n epoch++\n })\n\n const OPPOSITE: Record<string, 'top' | 'right' | 'bottom' | 'left'> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n }\n const arrowSide = computed(\n () =>\n OPPOSITE[finalPlacement.value.split('-')[0]] as\n 'top' | 'right' | 'bottom' | 'left' | undefined,\n )\n\n const floatingStyles = computed<Record<string, string>>(() => ({\n position: strategy.value,\n top: '0',\n left: '0',\n transform: `translate3d(${Math.round(x.value)}px, ${Math.round(y.value)}px, 0)`,\n width: 'max-content',\n // Hidden until the first positioning cycle lands — prevents a flash at\n // the viewport origin. visibility (not display:none) keeps the panel\n // measurable so Floating UI can compute its real coordinates.\n visibility: positioned.value ? 'visible' : 'hidden',\n }))\n\n return { x, y, strategy, finalPlacement, floatingStyles, update, arrowX, arrowY, arrowSide }\n}\n","import { onScopeDispose, watch, type Ref } from 'vue'\n\nexport interface UseDismissOptions {\n /** While true, the dismiss listeners are active. */\n enabled: Ref<boolean>\n /** Elements that, if clicked, should NOT trigger dismiss (typically trigger + content). */\n exclude: Array<Ref<HTMLElement | null | undefined>>\n /** Called when the user attempts to dismiss the surface. */\n onDismiss: () => void\n /** Close on Escape key. Default `true`. */\n escape?: boolean\n /** Close on pointerdown outside the excluded elements. Default `true`. */\n outsidePointerDown?: boolean\n /**\n * Extra \"inside\" test for pointerdown targets — e.g. teleported sibling\n * surfaces that belong to the same widget but live outside the excluded\n * refs' DOM trees.\n */\n excludePredicate?: (target: EventTarget | null) => boolean\n}\n\n/**\n * Listen for the universal \"dismiss\" gestures: Escape key and outside\n * pointer-down. Used by Popover / Dialog / Menu / Combobox. Tooltip does\n * NOT use this — it dismisses on mouseleave/blur instead.\n *\n * Listeners are attached to `document` only while `enabled` is true, and\n * removed on disable / unmount. SSR-safe (no-op without `document`).\n */\nexport function useDismiss(options: UseDismissOptions): void {\n const escape = options.escape !== false\n const outsidePointerDown = options.outsidePointerDown !== false\n\n const isExcluded = (target: EventTarget | null): boolean => {\n if (!target || !(target instanceof Node)) return false\n for (const r of options.exclude) {\n const el = r.value\n if (!el) continue\n if (el === target || el.contains(target)) return true\n }\n return false\n }\n\n const onPointerDown = (event: PointerEvent) => {\n if (!options.enabled.value) return\n if (isExcluded(event.target)) return\n if (options.excludePredicate?.(event.target)) return\n options.onDismiss()\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (!options.enabled.value) return\n if (event.key === 'Escape') {\n event.stopPropagation()\n options.onDismiss()\n }\n }\n\n const attach = () => {\n if (typeof document === 'undefined') return\n if (outsidePointerDown) {\n document.addEventListener('pointerdown', onPointerDown, true)\n }\n if (escape) {\n document.addEventListener('keydown', onKeyDown)\n }\n }\n\n const detach = () => {\n if (typeof document === 'undefined') return\n document.removeEventListener('pointerdown', onPointerDown, true)\n document.removeEventListener('keydown', onKeyDown)\n }\n\n watch(\n options.enabled,\n (enabled) => {\n detach()\n if (enabled) attach()\n },\n { immediate: true, flush: 'post' },\n )\n\n onScopeDispose(detach)\n}\n","import { Teleport, defineComponent, h, inject, nextTick, ref, watch, type PropType } from 'vue'\nimport { matchTypeahead, nextEnabledIndex } from '@iris-ui-kit/core'\nimport { useFloating } from '../floating/useFloating'\nimport { useDismiss } from '../floating/useDismiss'\nimport { DropdownContextKey } from './context'\n\n/**\n * The menu surface. Renders `role=\"menu\"` and handles ArrowUp/Down navigation\n * across child `IrisDropdownItem`s. Closes on Escape and outside pointerdown.\n * Teleports to body by default.\n */\nexport const IrisDropdownMenu = defineComponent({\n name: 'IrisDropdownMenu',\n inheritAttrs: false,\n props: {\n teleport: {\n type: [String, Object, Boolean] as PropType<string | HTMLElement | false>,\n default: 'body',\n },\n },\n setup(props, { slots, attrs }) {\n const ctx = inject(DropdownContextKey)\n if (!ctx) {\n throw new Error('[iris-ui] IrisDropdownMenu must be a descendant of IrisDropdown')\n }\n\n const innerRef = ref<HTMLElement | null>(null)\n watch(innerRef, (el) => {\n ctx.contentRef.value = el\n })\n\n const { floatingStyles } = useFloating({\n anchor: ctx.triggerRef,\n floating: innerRef,\n open: ctx.open,\n placement: ctx.placement,\n offset: ctx.offset,\n })\n\n useDismiss({\n enabled: ctx.open,\n exclude: [ctx.triggerRef, innerRef],\n onDismiss: () => ctx.setOpen(false),\n })\n\n // Focus first menu item on open.\n watch(ctx.open, async (open) => {\n if (open) {\n await nextTick()\n const items = innerRef.value?.querySelectorAll<HTMLElement>('[role=\"menuitem\"]')\n items?.[0]?.focus()\n } else {\n // Restore focus to trigger.\n ctx.triggerRef.value?.focus?.()\n }\n })\n\n // Typeahead buffer: accumulated printable chars, reset after a ~500ms pause.\n // Plain closure state — does not need to be reactive.\n const typeahead: { buffer: string; timer: ReturnType<typeof setTimeout> | null } = {\n buffer: '',\n timer: null,\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (!ctx.open.value) return\n const items = Array.from(\n innerRef.value?.querySelectorAll<HTMLElement>(\n '[role=\"menuitem\"]:not([aria-disabled=\"true\"])',\n ) ?? [],\n )\n if (items.length === 0) return\n const current = document.activeElement as HTMLElement | null\n const index = current ? items.indexOf(current) : -1\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault()\n items[nextEnabledIndex(index, 1, items.length)]?.focus()\n break\n }\n case 'ArrowUp': {\n event.preventDefault()\n items[nextEnabledIndex(index, -1, items.length)]?.focus()\n break\n }\n case 'Home':\n event.preventDefault()\n items[0]?.focus()\n break\n case 'End':\n event.preventDefault()\n items[items.length - 1]?.focus()\n break\n case 'Tab':\n // Tab closes the menu and lets focus continue.\n ctx.setOpen(false)\n break\n default: {\n // Typeahead: a single printable char jumps to (and repeated chars\n // cycle through) items whose label matches the accumulated buffer.\n if (event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey) {\n typeahead.buffer += event.key\n if (typeahead.timer) clearTimeout(typeahead.timer)\n typeahead.timer = setTimeout(() => {\n typeahead.buffer = ''\n }, 500)\n const match = matchTypeahead(\n items.map((it) => it.textContent ?? ''),\n typeahead.buffer,\n index,\n )\n if (match >= 0) {\n event.preventDefault()\n items[match]?.focus()\n }\n }\n }\n }\n }\n\n return () => {\n if (!ctx.open.value) return null\n const menuNode = h(\n 'div',\n {\n ...attrs,\n ref: (el: unknown) => {\n innerRef.value = (el ?? null) as HTMLElement | null\n },\n id: ctx.contentId,\n role: 'menu',\n tabindex: -1,\n 'data-iris-dropdown-menu': '',\n 'data-state': 'open',\n onKeydown: onKeyDown,\n style: {\n ...floatingStyles.value,\n background: 'var(--iris-surface-floating)',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md)',\n padding: 'var(--iris-padding-sm)',\n boxShadow: 'var(--iris-shadow-lg)',\n minWidth: '160px',\n outline: 'none',\n zIndex: '1000',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n slots.default?.(),\n )\n if (props.teleport === false) return menuNode\n return h(Teleport, { to: props.teleport as string | HTMLElement }, [menuNode])\n }\n },\n})\n","import { defineComponent, h, inject, ref } from 'vue'\nimport { DropdownContextKey } from './context'\n\n/**\n * A single selectable menu item. Emits `select` (with the underlying event)\n * and auto-closes the parent dropdown after selection. Disabled items are\n * skipped by arrow-key navigation in the parent menu.\n */\nexport const IrisDropdownItem = defineComponent({\n name: 'IrisDropdownItem',\n inheritAttrs: false,\n props: {\n disabled: { type: Boolean, default: false },\n /** When true, selecting does NOT close the dropdown. Useful for sub-actions. */\n keepOpen: { type: Boolean, default: false },\n },\n emits: {\n select: (_event: Event) => true,\n },\n setup(props, { slots, attrs, emit }) {\n const ctx = inject(DropdownContextKey)\n if (!ctx) {\n throw new Error('[iris-ui] IrisDropdownItem must be a descendant of IrisDropdownMenu')\n }\n\n const hovered = ref(false)\n\n const fire = (event: Event) => {\n if (props.disabled) return\n emit('select', event)\n if (!props.keepOpen) ctx.setOpen(false)\n }\n\n const onClick = (event: MouseEvent) => {\n if (event.defaultPrevented) return\n fire(event)\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n fire(event)\n }\n }\n\n return () =>\n h(\n 'div',\n {\n ...attrs,\n role: 'menuitem',\n tabindex: props.disabled ? -1 : 0,\n 'aria-disabled': props.disabled ? 'true' : undefined,\n 'data-iris-dropdown-item': '',\n 'data-disabled': props.disabled ? '' : undefined,\n onClick,\n onKeydown: onKeyDown,\n onPointerenter: () => (hovered.value = true),\n onPointerleave: () => (hovered.value = false),\n onFocus: () => (hovered.value = true),\n onBlur: () => (hovered.value = false),\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--iris-gap-sm)',\n padding: 'var(--iris-padding-sm, 6px) var(--iris-padding-md)',\n borderRadius: 'var(--iris-radius-sm)',\n cursor: props.disabled ? 'not-allowed' : 'pointer',\n opacity: props.disabled ? '0.5' : '1',\n background:\n hovered.value && !props.disabled ? 'var(--iris-surface-hover)' : 'transparent',\n color: 'inherit',\n outline: 'none',\n fontSize: 'var(--iris-font-size-md, 14px)',\n transition: 'background-color 80ms ease',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n slots.default?.(),\n )\n },\n})\n\n/** Visual divider between groups of items. */\nexport const IrisDropdownSeparator = defineComponent({\n name: 'IrisDropdownSeparator',\n inheritAttrs: false,\n setup(_, { attrs }) {\n return () =>\n h('div', {\n ...attrs,\n role: 'separator',\n 'data-iris-dropdown-separator': '',\n style: {\n height: '1px',\n background: 'var(--iris-border)',\n margin: '4px 0',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n })\n },\n})\n","import { defineComponent, h, onBeforeUnmount, ref, type PropType, type VNode } from 'vue'\nimport { createSortable, type SortableRect } from '@iris-ui-kit/core'\n\n/** The data attribute on each sortable item for the collision system. */\nexport const SORTABLE_ITEM_ATTR = 'data-iris-sortable-item'\n\n/**\n * Behavior wrapper: makes a list of items sortable via drag-and-drop. Wraps\n * each direct child in a sortable item context. The consumer supplies the\n * `items` array and an `onReorder` callback. Items render through the default\n * slot; each item is wrapped with drag detection from `createSortable`.\n *\n * Composable: stack with `IrisResizable` / `IrisMovable` / `IrisHotkey` for\n * richer interactions on the same wrapped UI.\n *\n * @example\n * <IrisSortable :items=\"items\" @reorder=\"items = $event\">\n * <div v-for=\"(label, i) in items\" :key=\"i\">{{ label }}</div>\n * </IrisSortable>\n */\nexport const IrisSortable = defineComponent({\n name: 'IrisSortable',\n inheritAttrs: false,\n props: {\n /** The ordered items. Used to detect which item is at which position. */\n items: {\n type: Array as PropType<readonly unknown[]>,\n required: true,\n },\n /** Called when the user drops an item in a new position. */\n onReorder: {\n type: Function as PropType<(next: unknown[]) => void>,\n default: undefined,\n },\n /** Optional item key getter. Defaults to `String(index)`. */\n getKey: {\n type: Function as PropType<(item: unknown, index: number) => string>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n orientation: {\n type: String as PropType<'vertical' | 'horizontal'>,\n default: 'vertical',\n },\n class: {\n type: String,\n default: undefined,\n },\n style: {\n type: Object as PropType<Record<string, string | number>>,\n default: undefined,\n },\n },\n emits: {\n reorder: (_next: unknown[]) => true,\n },\n setup(props, { slots, attrs, emit }) {\n const containerRef = ref<HTMLElement | null>(null)\n const sortable = createSortable()\n const activeKey = ref<string | null>(null)\n\n // Subscribe to sortable state changes to track the active drag key\n const unsub = sortable.subscribe((state) => {\n activeKey.value = state.activeId\n })\n onBeforeUnmount(unsub)\n\n // Find the DOM order index of a child by its data-iris-sortable-item value.\n const indexOf = (key: string): number => {\n const container = containerRef.value\n if (!container) return -1\n return Array.from(\n container.querySelectorAll<HTMLElement>(`[${SORTABLE_ITEM_ATTR}]`),\n ).findIndex((el) => el.getAttribute(SORTABLE_ITEM_ATTR) === key)\n }\n\n const onPointerDown = (e: PointerEvent) => {\n if (props.disabled) return\n const target = (e.target as HTMLElement).closest(`[${SORTABLE_ITEM_ATTR}]`)\n if (!target) return\n const container = containerRef.value\n if (!container) return\n const key = target.getAttribute(SORTABLE_ITEM_ATTR) ?? ''\n const index = indexOf(key)\n if (index < 0) return\n sortable.press(key, e.clientX, e.clientY)\n }\n\n const onPointerMove = (e: PointerEvent) => {\n if (!sortable.isPending() && sortable.getState().activeId === null) return\n const items = containerRef.value?.querySelectorAll<HTMLElement>(`[${SORTABLE_ITEM_ATTR}]`)\n const rects: SortableRect[] = Array.from(items ?? []).map((el) => {\n const rect = el.getBoundingClientRect()\n return {\n id: el.getAttribute(SORTABLE_ITEM_ATTR) ?? '',\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n }\n })\n // Promote pending press to active drag once past the movement threshold\n sortable.tryStart(e.clientX, e.clientY)\n if (sortable.getState().activeId !== null) {\n sortable.moveOver({ x: e.clientX, y: e.clientY }, rects)\n }\n }\n\n const onPointerUp = () => {\n const state = sortable.getState()\n if (state.activeId === null) {\n sortable.cancel()\n return\n }\n const result = sortable.end()\n if (result.activeId && result.overId && result.activeId !== result.overId) {\n const from = indexOf(result.activeId)\n const to = indexOf(result.overId)\n if (from >= 0 && to >= 0) {\n const next = [...(props.items as unknown[])]\n const [moved] = next.splice(from, 1)\n next.splice(to, 0, moved!)\n if (props.onReorder) {\n props.onReorder(next)\n }\n emit('reorder', next)\n }\n }\n }\n\n const resolveKey = (item: unknown, index: number): string =>\n props.getKey ? props.getKey(item, index) : String(index)\n\n return () => {\n const children: VNode[] = []\n const defaultSlots = slots.default?.()\n if (defaultSlots) {\n const itemsArray = props.items as unknown[]\n defaultSlots.forEach((child, index) => {\n const item = itemsArray[index]\n const key = resolveKey(item, index)\n const isDragging = key === activeKey.value\n children.push(\n h(\n 'div',\n {\n key,\n [SORTABLE_ITEM_ATTR]: key,\n 'data-iris-sortable-dragging': isDragging ? '' : undefined,\n style: {\n transition: isDragging ? 'none' : 'transform 150ms ease',\n opacity: isDragging ? 0.4 : 1,\n position: 'relative',\n zIndex: isDragging ? 100 : undefined,\n },\n },\n [child],\n ),\n )\n })\n }\n\n return h(\n 'div',\n {\n ...attrs,\n ref: (el: unknown) => {\n containerRef.value = (el ?? null) as HTMLElement | null\n },\n 'data-iris-sortable': '',\n 'data-state': activeKey.value ? 'dragging' : 'idle',\n class: props.class,\n style: {\n display: 'flex',\n flexDirection: props.orientation === 'horizontal' ? 'row' : 'column',\n gap: 'var(--iris-gap-sm, 4px)',\n opacity: props.disabled ? 0.6 : 1,\n userSelect: activeKey.value ? 'none' : undefined,\n ...((props.style as Record<string, string | number> | undefined) ?? {}),\n },\n onPointerdown: onPointerDown,\n onPointermove: onPointerMove,\n onPointerup: onPointerUp,\n onPointerleave: onPointerUp,\n },\n children,\n )\n }\n },\n})\n","import { defineComponent, h, nextTick, type PropType, type VNode } from 'vue'\nimport { isClosable, type TabsNav, type TabItem } from '@iris-ui-kit/core'\nimport { useTabsNav } from './useTabsNav'\nimport { IrisIcon } from '../primitives/icon/Icon'\nimport { IrisDropdown } from '../primitives/dropdown/Dropdown'\nimport { IrisDropdownTrigger } from '../primitives/dropdown/DropdownTrigger'\nimport { IrisDropdownMenu } from '../primitives/dropdown/DropdownMenu'\nimport { IrisDropdownItem, IrisDropdownSeparator } from '../primitives/dropdown/DropdownItem'\nimport { IrisSortable } from '../behaviors/Sortable'\nimport { useI18n } from '../i18n'\n\n/**\n * Vben-style multi-tab bar over a shared {@link TabsNav} store. Each open page\n * is a closable chip; clicking activates (`@change`), the × closes, and a\n * trailing actions dropdown runs Refresh / Close / Close-others / Close-all on\n * the active tab. The store owns the tab list + active key; the host watches it\n * to sync routing + keep-alive.\n *\n * Keyboard (WAI-ARIA tablist, automatic activation): ←/→ move + activate the\n * adjacent tab, Home/End jump to the first/last, Delete/Backspace closes the\n * focused tab. Roving tabindex keeps a single tab stop.\n */\nexport const IrisAdminTabs = defineComponent({\n name: 'IrisAdminTabs',\n inheritAttrs: false,\n props: {\n /** Shared tabs store (from `createTabsNav`). */\n nav: { type: Object as PropType<TabsNav>, required: true },\n reorderable: { type: Boolean, default: true },\n },\n emits: {\n change: (_key: string) => true,\n close: (_key: string) => true,\n refresh: (_key: string) => true,\n reorder: (_tabs: TabItem[]) => true,\n },\n setup(props, { emit, attrs }) {\n const { t: tr } = useI18n()\n const t = useTabsNav(props.nav)\n\n const activate = (key: string): void => {\n props.nav.activate(key)\n emit('change', key)\n }\n const close = (key: string): void => {\n props.nav.close(key)\n emit('close', key)\n }\n const refresh = (key: string): void => {\n props.nav.refresh(key)\n emit('refresh', key)\n }\n const reorder = (tabs: TabItem[]): void => {\n tabs.forEach((tab, index) => props.nav.move(tab.key, index))\n emit('reorder', tabs)\n }\n\n const focusTab = (root: HTMLElement | null, key: string | undefined): void => {\n if (!root || !key) return\n const labels = root.querySelectorAll<HTMLElement>('[data-iris-tab-label]')\n labels.forEach((el) => {\n if (el.getAttribute('data-key') === key) el.focus()\n })\n }\n\n const onTablistKeydown = (e: KeyboardEvent): void => {\n const root = e.currentTarget as HTMLElement\n const tabs = t.tabs.value\n const idx = tabs.findIndex((x) => x.key === t.activeKey.value)\n if (idx < 0 || tabs.length === 0) return\n\n if (e.key === 'Delete' || e.key === 'Backspace') {\n const cur = tabs[idx]\n if (cur && isClosable(cur)) {\n e.preventDefault()\n close(cur.key)\n void nextTick(() => focusTab(root, props.nav.getState().activeKey))\n }\n return\n }\n\n let target = -1\n if (e.key === 'ArrowRight') target = (idx + 1) % tabs.length\n else if (e.key === 'ArrowLeft') target = (idx - 1 + tabs.length) % tabs.length\n else if (e.key === 'Home') target = 0\n else if (e.key === 'End') target = tabs.length - 1\n else return\n\n e.preventDefault()\n const key = tabs[target]?.key\n if (!key) return\n activate(key)\n void nextTick(() => focusTab(root, key))\n }\n\n const chip = (tab: TabItem): VNode => {\n const active = tab.key === t.activeKey.value\n const closable = isClosable(tab)\n const labelChildren: VNode[] = []\n if (tab.icon) labelChildren.push(h(IrisIcon, { name: tab.icon, size: 14 }))\n labelChildren.push(h('span', { style: { whiteSpace: 'nowrap' } }, tab.title))\n\n const label = h(\n 'button',\n {\n type: 'button',\n role: 'tab',\n 'data-iris-tab-label': '',\n 'data-key': tab.key,\n 'aria-selected': active ? 'true' : 'false',\n 'aria-current': active ? 'page' : undefined,\n tabindex: active ? 0 : -1,\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--iris-space-xs, 8px)',\n border: 'none',\n background: 'transparent',\n color: 'inherit',\n font: 'inherit',\n fontSize: 'var(--iris-font-size-sm, 13px)',\n cursor: 'pointer',\n padding: '0',\n },\n onClick: () => activate(tab.key),\n },\n labelChildren,\n )\n\n const closeBtn = closable\n ? h(\n 'button',\n {\n type: 'button',\n tabindex: -1,\n 'data-iris-tab-close': '',\n 'aria-label': tr('admin.closeTab', { title: tab.title }),\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '16px',\n height: '16px',\n border: 'none',\n borderRadius: '4px',\n background: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n padding: '0',\n opacity: '0.6',\n },\n onClick: (e: Event) => {\n e.stopPropagation()\n close(tab.key)\n const root = (e.currentTarget as HTMLElement).closest(\n '[role=\"tablist\"]',\n ) as HTMLElement | null\n void nextTick(() => focusTab(root, props.nav.getState().activeKey))\n },\n },\n [h(IrisIcon, { name: 'x', size: 12 })],\n )\n : tab.pinned\n ? h(IrisIcon, { name: 'check-circle', size: 12, style: { opacity: '0.5' } })\n : null\n\n return h(\n 'div',\n {\n key: tab.key,\n 'data-iris-tab': '',\n 'data-active': active ? 'true' : undefined,\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding:\n 'var(--iris-padding-sm, 6px) var(--iris-space-xs, 8px) var(--iris-padding-sm, 6px) var(--iris-space-sm, 12px)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n border: `1px solid ${active ? 'var(--iris-primary)' : 'var(--iris-border)'}`,\n background: active ? 'var(--iris-primary)' : 'var(--iris-surface)',\n color: active ? 'var(--iris-primary-foreground, #fff)' : 'var(--iris-foreground)',\n flex: '0 0 auto',\n },\n },\n [label, closeBtn],\n )\n }\n\n const action = (label: string, run: () => void, disabled = false): VNode =>\n h(IrisDropdownItem, { disabled, onSelect: run }, { default: () => label })\n\n const actionsMenu = (): VNode =>\n h(IrisDropdown, null, {\n default: () => [\n h(\n IrisDropdownTrigger,\n {\n 'aria-label': tr('admin.tabActions'),\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: 'var(--iris-radius-md, 6px)',\n border: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n cursor: 'pointer',\n },\n },\n {\n default: () => h(IrisIcon, { name: 'more-horizontal', size: 16 }),\n },\n ),\n h(IrisDropdownMenu, null, {\n default: () => {\n const key = t.activeKey.value\n if (!key) return [action('No active tab', () => {}, true)]\n return [\n action(tr('admin.refresh'), () => refresh(key)),\n action(tr('admin.close'), () => close(key)),\n h(IrisDropdownSeparator),\n action(tr('admin.closeLeft'), () => props.nav.closeLeft(key)),\n action(tr('admin.closeRight'), () => props.nav.closeRight(key)),\n action(tr('admin.closeOthers'), () => props.nav.closeOthers(key)),\n action(tr('admin.closeAll'), () => props.nav.closeAll()),\n ]\n },\n }),\n ],\n })\n\n return () =>\n h(\n 'div',\n {\n ...attrs,\n 'data-iris-admin-tabs': '',\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--iris-space-xs, 8px)',\n padding: 'var(--iris-space-xs, 8px) var(--iris-space-sm, 12px)',\n borderBottom: '1px solid var(--iris-border)',\n background: 'var(--iris-background)',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n h(\n 'div',\n {\n 'data-iris-tabs-scroll': '',\n role: 'tablist',\n 'aria-label': tr('admin.openPages'),\n onKeydown: onTablistKeydown,\n style: {\n overflowX: 'auto',\n flex: '1',\n },\n },\n [\n h(\n IrisSortable,\n {\n items: t.tabs.value,\n getKey: (item: unknown) => (item as TabItem).key,\n onReorder: (items: unknown[]) => reorder(items as TabItem[]),\n disabled: !props.reorderable,\n orientation: 'horizontal',\n style: {\n alignItems: 'center',\n gap: 'var(--iris-space-xs, 8px)',\n width: 'max-content',\n },\n },\n { default: () => t.tabs.value.map((tab) => chip(tab)) },\n ),\n ],\n ),\n actionsMenu(),\n ],\n )\n },\n})\n","import { shallowRef, onScopeDispose, type ShallowRef } from 'vue'\nimport type { ReadonlyStore, Store } from '@iris-ui-kit/core'\n\n/**\n * Bridge a framework-agnostic `@iris-ui-kit/core` store into a Vue ref — updates on\n * every store emission. The mirror of React's `useSyncExternalStore`, Solid's\n * `createSignal`, and Svelte's `readable`. Seeds synchronously from\n * `store.getState()` (SSR-safe); detaches on scope dispose.\n */\nexport function useStore<T>(store: ReadonlyStore<T>): Readonly<ShallowRef<T>> {\n const state = shallowRef(store.getState()) as ShallowRef<T>\n onScopeDispose(store.subscribe((next) => (state.value = next)))\n return state\n}\n\n/**\n * Subscribe to a DERIVED slice of a core store — the ref updates only when\n * `selector(state)` changes per `equals` (default `Object.is`), not on every\n * store emission. Built on {@link Store.subscribeWith}.\n */\nexport function useStoreSelector<T, U>(\n store: Store<T>,\n selector: (state: T) => U,\n equals?: (a: U, b: U) => boolean,\n): Readonly<ShallowRef<U>> {\n const slice = shallowRef(selector(store.getState())) as ShallowRef<U>\n onScopeDispose(store.subscribeWith(selector, (v) => (slice.value = v), equals))\n return slice\n}\n","import { computed, watch, watchEffect, type ComputedRef, type MaybeRefOrGetter, toValue } from 'vue'\nimport {\n createAdminShell,\n findNavPath,\n type AdminShell,\n type NavNode,\n type TabsNav,\n} from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\n\nexport interface UseAdminShellConfig {\n /** Normalized nav tree driving menu + breadcrumb. */\n menus: MaybeRefOrGetter<NavNode[]>\n /** Active page key (controlled); undefined = uncontrolled. */\n activeKey?: MaybeRefOrGetter<string | undefined>\n defaultActiveKey?: string\n onActiveKeyChange?: (key: string) => void\n /** Fired whenever a nav node / tab becomes active, with the resolved leaf node. */\n onSelect?: (key: string, node: NavNode) => void\n /** Optional shared tabs store; the shell opens/reconciles tabs through it. */\n tabs?: TabsNav\n}\n\nexport interface UseAdminShellReturn {\n /** Current active leaf key ('' when none). */\n activeKey: ComputedRef<string>\n /** Select a nav node: a branch redirects to its first leaf, opens its tab. */\n navigate: (node: NavNode) => void\n /** Reconcile when the active TAB changed (e.g. a close picked a neighbor). */\n syncFromTab: (key: string) => void\n /** Ancestor→node breadcrumb trail of the active key. */\n breadcrumb: ComputedRef<NavNode[]>\n}\n\n/**\n * Vue binding for the framework-agnostic {@link createAdminShell} controller —\n * the menu→tab→active-key wiring that every AdminLayout used to re-implement\n * byte-for-byte. The composable owns the controlled/uncontrolled `activeKey`\n * reconciliation (idiomatic to Vue) and delegates navigate / syncFromTab /\n * branch-resolution / breadcrumb to the shared core shell.\n *\n * Controlled mode renders from the prop directly (no flicker); a watcher keeps\n * the shell's guard-base synced to the prop so the active-change callback fires\n * with the same semantics as before.\n */\nexport function useAdminShell(config: UseAdminShellConfig): UseAdminShellReturn {\n const { defaultActiveKey, onActiveKeyChange, onSelect, tabs } = config\n\n const menus = (): NavNode[] => toValue(config.menus)\n const activeKeyProp = (): string | undefined => toValue(config.activeKey)\n const activeControlled = (): boolean => activeKeyProp() !== undefined\n\n // The shell instance is stable for the composable's lifetime; it reads the\n // latest callbacks via the closure-captured config.\n const shell: AdminShell = createAdminShell({\n menus: menus(),\n defaultActiveKey: activeKeyProp() ?? defaultActiveKey,\n tabs,\n onActiveChange: (key, node) => {\n onActiveKeyChange?.(key)\n if (node) onSelect?.(key, node)\n },\n })\n const state = useStore(shell.store)\n\n // Keep the shell reconciling against the live menu tree.\n watch(menus, (next) => shell.setMenus(next), { flush: 'sync' })\n\n // Controlled: keep the shell's guard-base aligned with the prop (silent — no\n // callback), so navigate fires the active-change callback exactly as before\n // even when a controlled parent does not write the new key back.\n watchEffect(() => {\n const prop = activeKeyProp()\n if (prop !== undefined && shell.getActiveKey() !== prop) {\n shell.store.setState({ activeKey: prop })\n }\n })\n\n const activeKey = computed(() =>\n activeControlled() ? (activeKeyProp() ?? '') : (state.value.activeKey ?? ''),\n )\n\n return {\n activeKey,\n navigate: shell.navigate,\n syncFromTab: shell.syncFromTab,\n breadcrumb: computed(() => (activeKey.value ? findNavPath(menus(), activeKey.value) : [])),\n }\n}\n","import {\n computed,\n defineComponent,\n h,\n onBeforeUnmount,\n ref,\n watch,\n type PropType,\n type VNode,\n} from 'vue'\nimport { type NavNode, type TabsNav } from '@iris-ui-kit/core'\nimport { IrisSidebarLayout } from '../layouts/SidebarLayout'\nimport { IrisHeaderLayout } from '../layouts/HeaderLayout'\nimport { IrisNavMenu } from './NavMenu'\nimport { IrisAdminBreadcrumb } from './AdminBreadcrumb'\nimport { IrisAdminTabs } from './AdminTabs'\nimport { IrisIcon } from '../primitives/icon/Icon'\nimport { useI18n } from '../i18n'\nimport { useAdminShell } from './useAdminShell'\n\nexport type IrisAdminLayoutMode = 'sidebar' | 'horizontal' | 'full-content'\nexport type IrisAdminMenuAlign = 'start' | 'center' | 'end'\nexport type IrisAdminContentWidth = 'fluid' | 'centered'\nexport type IrisAdminContentHeight = 'auto' | 'viewport'\n\n/**\n * The CMS / admin shell — a Vben-style, router-agnostic, data-driven layout that\n * composes IrisSidebarLayout + IrisHeaderLayout with the admin nav pieces. One\n * `menus` tree drives the collapsible sidebar nav, the header breadcrumb, and\n * (when a `tabs` store is passed) the multi-tab bar; `activeKey` is the current\n * page (v-model). The host owns routing: react to `@select` / `update:activeKey`\n * and render the page in the default slot (wrap it in `<KeepAlive>` keyed by\n * `tabs.cacheKey` for Vben-style tab caching).\n *\n * Slots: `logo({ collapsed })`, `toolbar` (header end), default `({ activeKey })`,\n * `footer`. Modes: `sidebar` (default) and `full-content` (chrome hidden).\n */\nexport const IrisAdminLayout = defineComponent({\n name: 'IrisAdminLayout',\n inheritAttrs: false,\n props: {\n /** Normalized nav tree driving menu + breadcrumb. */\n menus: { type: Array as PropType<NavNode[]>, required: true },\n /** Active page key (v-model:activeKey). */\n activeKey: { type: String, default: undefined },\n /** Initial active page key when `activeKey` is uncontrolled. */\n defaultActiveKey: { type: String, default: undefined },\n /** Sidebar collapsed (v-model:collapsed); undefined = uncontrolled. */\n collapsed: { type: Boolean as PropType<boolean | undefined>, default: undefined },\n defaultCollapsed: { type: Boolean, default: false },\n mode: { type: String as PropType<IrisAdminLayoutMode>, default: 'sidebar' },\n /** Brand text shown next to the logo when expanded. */\n appTitle: { type: String, default: 'Iris Admin' },\n /** Optional shared tabs store; when present the tab bar is rendered. */\n tabs: { type: Object as PropType<TabsNav>, default: undefined },\n showTabs: { type: Boolean, default: true },\n showBreadcrumb: { type: Boolean, default: true },\n stickyHeader: { type: Boolean, default: true },\n stickyTabs: { type: Boolean, default: true },\n menuAlign: { type: String as PropType<IrisAdminMenuAlign>, default: 'start' },\n contentWidth: { type: String as PropType<IrisAdminContentWidth>, default: 'fluid' },\n contentHeight: {\n type: String as PropType<IrisAdminContentHeight>,\n default: 'viewport',\n },\n sidebarWidth: { type: [Number, String] as PropType<number | string>, default: 240 },\n collapsedWidth: { type: [Number, String] as PropType<number | string>, default: 64 },\n },\n emits: {\n 'update:activeKey': (_key: string) => true,\n 'update:collapsed': (_value: boolean) => true,\n select: (_key: string, _node: NavNode) => true,\n },\n setup(props, { emit, slots, attrs }) {\n const { t } = useI18n()\n\n const {\n activeKey,\n navigate,\n syncFromTab,\n breadcrumb: trail,\n } = useAdminShell({\n menus: () => props.menus,\n activeKey: () => props.activeKey,\n defaultActiveKey: props.defaultActiveKey,\n tabs: props.tabs,\n onActiveKeyChange: (key) => emit('update:activeKey', key),\n onSelect: (key, node) => emit('select', key, node),\n })\n\n const collapseControlled = computed(() => props.collapsed !== undefined)\n const internalCollapsed = ref(props.defaultCollapsed)\n const collapsed = computed(() =>\n collapseControlled.value ? (props.collapsed as boolean) : internalCollapsed.value,\n )\n const setCollapsed = (value: boolean): void => {\n if (!collapseControlled.value) internalCollapsed.value = value\n emit('update:collapsed', value)\n }\n\n // NavMenu / Breadcrumb emit (key, node); route the node through navigate.\n const onSelect = (_key: string, node: NavNode): void => navigate(node)\n\n // Tab activation (incl. close → neighbor) is the store's job; mirror it into\n // the layout's active key so the breadcrumb + content stay in sync.\n if (props.tabs) {\n const tabsActive = ref(props.tabs.getState().activeKey)\n const unsubscribe = props.tabs.subscribe((s) => {\n tabsActive.value = s.activeKey\n })\n onBeforeUnmount(unsubscribe)\n watch(tabsActive, (key) => {\n if (key) syncFromTab(key)\n })\n }\n\n const renderLogo = (state: { collapsed: boolean }): VNode | VNode[] => {\n if (slots.logo) return slots.logo(state) as VNode[]\n return h(\n 'div',\n {\n 'data-iris-admin-logo': '',\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--iris-space-sm, 12px)',\n height: '52px',\n padding: '0 var(--iris-space-md, 16px)',\n color: 'var(--iris-foreground)',\n fontWeight: '700',\n fontSize: 'var(--iris-font-size-lg, 16px)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n flexShrink: 0,\n },\n },\n [\n h(\n 'span',\n {\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: 'var(--iris-radius-md, 6px)',\n background: 'var(--iris-primary)',\n color: 'var(--iris-primary-foreground, #fff)',\n flexShrink: 0,\n },\n },\n [h(IrisIcon, { name: 'menu', size: 18 })],\n ),\n state.collapsed ? null : h('span', props.appTitle),\n ],\n )\n }\n\n const collapseToggle = (): VNode =>\n h(\n 'button',\n {\n type: 'button',\n 'data-iris-admin-collapse': '',\n 'aria-label': collapsed.value ? t('admin.expandSidebar') : t('admin.collapseSidebar'),\n 'aria-pressed': collapsed.value ? 'true' : 'false',\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n border: 'none',\n borderRadius: 'var(--iris-radius-md, 6px)',\n background: 'transparent',\n color: 'var(--iris-foreground)',\n cursor: 'pointer',\n flexShrink: 0,\n },\n onClick: () => setCollapsed(!collapsed.value),\n },\n [h(IrisIcon, { name: collapsed.value ? 'chevron-right' : 'menu', size: 18 })],\n )\n\n const renderHeaderBar = (): VNode =>\n h(\n 'div',\n {\n 'data-iris-admin-headerbar': '',\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n height: '52px',\n padding: '0 16px',\n borderBottom: '1px solid var(--iris-border)',\n background: 'var(--iris-background)',\n },\n },\n [\n collapseToggle(),\n props.showBreadcrumb\n ? h(IrisAdminBreadcrumb, { trail: trail.value, hideSingle: false, onSelect })\n : null,\n h('div', { style: { flex: '1' } }),\n slots.toolbar\n ? h(\n 'div',\n {\n 'data-iris-admin-toolbar': '',\n style: { display: 'flex', alignItems: 'center', gap: '8px' },\n },\n slots.toolbar(),\n )\n : null,\n ],\n )\n\n const renderContent = (horizontal = false): VNode =>\n h(\n 'div',\n {\n 'data-iris-admin-content': '',\n 'data-width': props.contentWidth,\n style: {\n boxSizing: 'border-box',\n width: '100%',\n maxWidth: props.contentWidth === 'centered' ? '72rem' : undefined,\n marginInline: props.contentWidth === 'centered' ? 'auto' : undefined,\n padding: '16px',\n },\n },\n [\n horizontal && props.showBreadcrumb\n ? h(IrisAdminBreadcrumb, { trail: trail.value, hideSingle: false, onSelect })\n : null,\n ...(slots.default?.({ activeKey: activeKey.value }) ?? []),\n ],\n )\n\n const renderTabs = (): VNode | null =>\n props.tabs && props.showTabs\n ? h(\n 'div',\n {\n 'data-iris-admin-tabs-region': '',\n 'data-sticky': props.stickyTabs ? 'true' : undefined,\n style: {\n position: props.stickyTabs && !props.stickyHeader ? 'sticky' : 'relative',\n top: '0',\n zIndex: '49',\n },\n },\n [h(IrisAdminTabs, { nav: props.tabs })],\n )\n : null\n\n return () => {\n if (props.mode === 'full-content') {\n return h(\n 'div',\n {\n ...attrs,\n 'data-iris-admin-layout': '',\n 'data-mode': 'full-content',\n style: {\n height: '100%',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n slots.default?.({ activeKey: activeKey.value }) ?? [],\n )\n }\n\n if (props.mode === 'horizontal') {\n const justifyContent =\n props.menuAlign === 'center'\n ? 'center'\n : props.menuAlign === 'end'\n ? 'flex-end'\n : 'flex-start'\n return h(\n 'div',\n {\n ...attrs,\n 'data-iris-admin-layout': '',\n 'data-mode': 'horizontal',\n style: {\n height: props.contentHeight === 'viewport' ? '100vh' : 'auto',\n minHeight: '100vh',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n h(\n IrisHeaderLayout,\n { sticky: props.stickyHeader },\n {\n header: () =>\n h('div', { 'data-iris-admin-header': '' }, [\n h(\n 'div',\n {\n 'data-iris-admin-headerbar': '',\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n minHeight: '52px',\n padding: '0 16px',\n background: 'var(--iris-background)',\n },\n },\n [\n renderLogo({ collapsed: false }),\n h(\n 'div',\n {\n 'data-iris-admin-topnav': '',\n style: {\n display: 'flex',\n flex: '1',\n minWidth: '0',\n justifyContent,\n },\n },\n [\n h(IrisNavMenu, {\n items: props.menus,\n activeKey: activeKey.value,\n orientation: 'horizontal',\n onSelect,\n }),\n ],\n ),\n slots.toolbar\n ? h(\n 'div',\n {\n 'data-iris-admin-toolbar': '',\n style: { display: 'flex', alignItems: 'center', gap: '8px' },\n },\n slots.toolbar(),\n )\n : null,\n ],\n ),\n renderTabs(),\n ]),\n default: () => renderContent(true),\n ...(slots.footer ? { footer: () => slots.footer!() } : {}),\n },\n ),\n ],\n )\n }\n\n return h(\n IrisSidebarLayout,\n {\n ...attrs,\n collapsed: collapsed.value,\n width: props.sidebarWidth,\n collapsedWidth: props.collapsedWidth,\n 'onUpdate:collapsed': setCollapsed,\n 'data-iris-admin-layout': '',\n 'data-mode': 'sidebar',\n style: {\n height: '100vh',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n {\n sidebar: (state: { collapsed: boolean }) =>\n h(\n 'div',\n {\n 'data-iris-admin-sidebar': '',\n style: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n borderInlineEnd: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n },\n },\n [\n renderLogo(state),\n h(\n 'div',\n { style: { flex: '1', overflowY: 'auto', overflowX: 'hidden', padding: '8px' } },\n [\n h(IrisNavMenu, {\n items: props.menus,\n activeKey: activeKey.value,\n collapsed: state.collapsed,\n onSelect,\n }),\n ],\n ),\n ],\n ),\n default: () =>\n h(\n IrisHeaderLayout,\n { sticky: props.stickyHeader },\n {\n header: () =>\n h('div', { 'data-iris-admin-header': '' }, [renderHeaderBar(), renderTabs()]),\n default: () => renderContent(),\n ...(slots.footer ? { footer: () => slots.footer!() } : {}),\n },\n ),\n },\n )\n }\n },\n})\n\n/** Public input/event surface inferred from the runtime Vue component. */\nexport type IrisAdminLayoutProps = InstanceType<typeof IrisAdminLayout>['$props']\n","import { computed, onBeforeUnmount, onMounted, ref, type ComputedRef, type Ref } from 'vue'\nimport type { AdminPreferences, AdminPreferencesState } from '@iris-ui-kit/core'\n\nexport interface UseAdminPreferencesReturn {\n state: ComputedRef<AdminPreferencesState>\n set: AdminPreferences['set']\n patch: AdminPreferences['patch']\n reset: AdminPreferences['reset']\n hydrate: AdminPreferences['hydrate']\n flush: AdminPreferences['flush']\n}\n\n/** Thin Vue bridge for the framework-agnostic admin preferences controller. */\nexport function useAdminPreferences(\n preferences: AdminPreferences,\n hydrate = true,\n): UseAdminPreferencesReturn {\n const state = ref(preferences.getState()) as Ref<AdminPreferencesState>\n const unsubscribe = preferences.subscribe((next) => {\n state.value = next\n })\n onMounted(() => {\n if (hydrate) void preferences.hydrate()\n })\n onBeforeUnmount(unsubscribe)\n return {\n state: computed(() => state.value),\n set: preferences.set,\n patch: preferences.patch,\n reset: preferences.reset,\n hydrate: preferences.hydrate,\n flush: preferences.flush,\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/layouts/SidebarLayout.ts","../src/layouts/HeaderLayout.ts","../src/theme/ThemeProvider.ts","../src/primitives/icon/Icon.ts","../src/i18n/context.ts","../src/i18n/useI18n.ts","../src/admin/styles.ts","../src/admin/NavMenuFlyout.ts","../src/admin/NavMenuKeyboard.ts","../src/admin/NavMenu.ts","../src/primitives/breadcrumb/Breadcrumb.ts","../src/primitives/breadcrumb/BreadcrumbItem.ts","../src/admin/AdminBreadcrumb.ts","../src/admin/useTabsNav.ts","../src/machine/useMachine.ts","../src/primitives/dropdown/context.ts","../src/primitives/dropdown/Dropdown.ts","../src/primitives/slot/Slot.ts","../src/primitives/dropdown/DropdownTrigger.ts","../src/primitives/floating/useFloating.ts","../src/primitives/floating/useDismiss.ts","../src/primitives/dropdown/DropdownMenu.ts","../src/primitives/dropdown/DropdownItem.ts","../src/behaviors/Sortable.ts","../src/admin/AdminTabs.ts","../src/useStore.ts","../src/admin/useAdminShell.ts","../src/admin/AdminLayout.ts","../src/admin/useAdminPreferences.ts"],"names":["defineComponent","computed","ref","watch","h","applyTheme","applyDirection","onMounted","injectGlobalStyles","onBeforeUnmount","provide","defaultIconRegistry","inject","resolveThemedIcon","createI18n","findNavPath","isBranch","findNavNode","nextTick","visibleNav","createExpansion","branchTrail","shallowRef","firstLeaf","Fragment","onScopeDispose","createFloatingMachine","useId","composeEventHandlers","offsetMiddleware","flipMiddleware","shiftMiddleware","sizeMiddleware","arrowMiddleware","computePosition","autoUpdate","nextEnabledIndex","matchTypeahead","Teleport","createSortable","isClosable","toValue","createAdminShell","watchEffect"],"mappings":";;;;;;;;;AAaO,IAAM,oBAAoBA,mBAAA,CAAgB;AAAA,EAC/C,IAAA,EAAM,mBAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA,IACL,SAAA,EAAW,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,MAAA,EAAU;AAAA,IAC/C,gBAAA,EAAkB,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA;AAAA,IAElD,KAAA,EAAO,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAM,CAAA,EAAG,SAAS,GAAA,EAAI;AAAA;AAAA,IAE9C,cAAA,EAAgB,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAM,CAAA,EAAG,SAAS,EAAA,EAAG;AAAA;AAAA,IAEtD,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAkC,SAAS,MAAA;AAAO,GAClE;AAAA,EACA,KAAA,EAAO;AAAA,IACL,kBAAA,EAAoB,CAAC,MAAA,KAAoB;AAAA,GAC3C;AAAA,EACA,MAAM,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,EAAO,MAAK,EAAG;AACnC,IAAA,MAAM,YAAA,GAAeC,YAAA,CAAS,MAAM,KAAA,CAAM,cAAc,MAAS,CAAA;AACjE,IAAA,MAAM,iBAAA,GAAoBC,OAAA,CAAI,KAAA,CAAM,gBAAgB,CAAA;AACpD,IAAA,MAAM,SAAA,GAAYD,YAAA;AAAA,MAAS,MACzB,YAAA,CAAa,KAAA,GAAQ,QAAQ,KAAA,CAAM,SAAS,IAAI,iBAAA,CAAkB;AAAA,KACpE;AAOA,IAAAE,SAAA;AAAA,MACE,MAAM,KAAA,CAAM,SAAA;AAAA,MACZ,CAAC,KAAA,KAAU;AACT,QAAA,IAAI,KAAA,KAAU,MAAA,EAAW,iBAAA,CAAkB,KAAA,GAAQ,KAAA;AAAA,MACrD,CAAA;AAAA,MACA,EAAE,WAAW,IAAA;AAAK,KACpB;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAmB;AACvC,MAAA,IAAI,CAAC,YAAA,CAAa,KAAA,EAAO,iBAAA,CAAkB,KAAA,GAAQ,KAAA;AACnD,MAAA,IAAA,CAAK,oBAAoB,KAAK,CAAA;AAAA,IAChC,CAAA;AAEA,IAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAwB,OAAO,MAAM,QAAA,GAAW,CAAA,EAAG,CAAC,CAAA,EAAA,CAAA,GAAO,CAAA;AAE1E,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,YAAA,GAAuC;AAAA,QAC3C,KAAA,EAAO,UAAU,KAAA,GAAQ,KAAA,CAAM,MAAM,cAAc,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,KAAK,CAAA;AAAA,QACxE,UAAA,EAAY,GAAA;AAAA,QACZ,UAAA,EAAY,qBAAA;AAAA,QACZ,WAAA,EAAa,KAAA,CAAM,IAAA,KAAS,MAAA,GAAS,8BAAA,GAAiC,MAAA;AAAA,QACtE,UAAA,EAAY,KAAA,CAAM,IAAA,KAAS,OAAA,GAAU,8BAAA,GAAiC,MAAA;AAAA,QACtE,UAAA,EAAY,kBAAA;AAAA,QACZ,QAAA,EAAU,QAAA;AAAA,QACV,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe;AAAA,OACjB;AACA,MAAA,MAAM,SAAA,GAAoC;AAAA,QACxC,IAAA,EAAM,GAAA;AAAA,QACN,QAAA,EAAU,GAAA;AAAA,QACV,QAAA,EAAU,MAAA;AAAA,QACV,UAAA,EAAY;AAAA,OACd;AACA,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,KAAS,OAAA,GAAU,aAAA,GAAgB,KAAA;AAE3D,MAAA,OAAOC,KAAA;AAAA,QACL,KAAA;AAAA,QACA;AAAA,UACE,GAAG,KAAA;AAAA,UACH,0BAAA,EAA4B,EAAA;AAAA,UAC5B,gBAAA,EAAkB,SAAA,CAAU,KAAA,GAAQ,EAAA,GAAK,MAAA;AAAA,UACzC,aAAa,KAAA,CAAM,IAAA;AAAA,UACnB,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,aAAA,EAAe,SAAA;AAAA,YACf,KAAA,EAAO,MAAA;AAAA,YACP,MAAA,EAAQ,MAAA;AAAA,YACR,SAAA,EAAW,GAAA;AAAA,YACX,KAAA,EAAO,wBAAA;AAAA,YACP,GAAK,KAAA,CAAM,KAAA,IAAgD;AAAC;AAC9D,SACF;AAAA,QACA;AAAA,UACEA,KAAA;AAAA,YACE,OAAA;AAAA,YACA;AAAA,cACE,IAAA,EAAM,eAAA;AAAA,cACN,mBAAA,EAAqB,EAAA;AAAA,cACrB,gBAAA,EAAkB,SAAA,CAAU,KAAA,GAAQ,EAAA,GAAK,MAAA;AAAA,cACzC,KAAA,EAAO;AAAA,aACT;AAAA,YACA,MAAM,OAAA,GAAU,EAAE,WAAW,SAAA,CAAU,KAAA,EAAO,cAAc;AAAA,WAC9D;AAAA,UACAA,KAAA,CAAE,KAAA,EAAO,EAAE,wBAAA,EAA0B,EAAA,EAAI,OAAO,SAAA,EAAU,EAAG,KAAA,CAAM,OAAA,IAAW;AAAA;AAChF,OACF;AAAA,IACF,CAAA;AAAA,EACF;AACF,CAAC,CAAA;ACnGM,IAAM,mBAAmBJ,mBAAAA,CAAgB;AAAA,EAC9C,IAAA,EAAM,kBAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA;AAAA,IAEL,YAAA,EAAc,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAM,CAAA,EAAgC,SAAS,MAAA,EAAO;AAAA;AAAA,IAErF,YAAA,EAAc,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAM,CAAA,EAAgC,SAAS,MAAA,EAAO;AAAA;AAAA,IAErF,MAAA,EAAQ,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA;AAAK,GACzC;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAO,OAAM,EAAG;AAC7B,IAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAwB,OAAO,MAAM,QAAA,GAAW,CAAA,EAAG,CAAC,CAAA,EAAA,CAAA,GAAO,CAAA;AAC1E,IAAA,OAAO,MACLI,KAAAA;AAAA,MACE,KAAA;AAAA,MACA;AAAA,QACE,GAAG,KAAA;AAAA,QACH,yBAAA,EAA2B,EAAA;AAAA,QAC3B,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,aAAA,EAAe,QAAA;AAAA,UACf,KAAA,EAAO,MAAA;AAAA,UACP,MAAA,EAAQ,MAAA;AAAA,UACR,SAAA,EAAW,GAAA;AAAA,UACX,UAAA,EAAY,wBAAA;AAAA,UACZ,KAAA,EAAO,wBAAA;AAAA,UACP,GAAK,KAAA,CAAM,KAAA,IAAgD;AAAC;AAC9D,OACF;AAAA,MACA;AAAA,QACE,MAAM,MAAA,GACFA,KAAAA;AAAA,UACE,QAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAM,QAAA;AAAA,YACN,kBAAA,EAAoB,EAAA;AAAA,YACpB,KAAA,EAAO;AAAA,cACL,UAAA,EAAY,GAAA;AAAA,cACZ,MAAA,EAAQ,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA;AAAA,cAChC,YAAA,EAAc,8BAAA;AAAA,cACd,UAAA,EAAY,qBAAA;AAAA,cACZ,QAAA,EAAU,KAAA,CAAM,MAAA,GAAS,QAAA,GAAW,QAAA;AAAA,cACpC,GAAA,EAAK,GAAA;AAAA,cACL,MAAA,EAAQ;AAAA;AACV,WACF;AAAA,UACA,MAAM,MAAA;AAAO,SACf,GACA,IAAA;AAAA,QACJA,KAAAA;AAAA,UACE,MAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAM,MAAA;AAAA,YACN,uBAAA,EAAyB,EAAA;AAAA,YACzB,OAAO,EAAE,IAAA,EAAM,KAAK,SAAA,EAAW,GAAA,EAAK,UAAU,MAAA;AAAO,WACvD;AAAA,UACA,MAAM,OAAA;AAAU,SAClB;AAAA,QACA,MAAM,MAAA,GACFA,KAAAA;AAAA,UACE,QAAA;AAAA,UACA;AAAA,YACE,IAAA,EAAM,aAAA;AAAA,YACN,kBAAA,EAAoB,EAAA;AAAA,YACpB,KAAA,EAAO;AAAA,cACL,UAAA,EAAY,GAAA;AAAA,cACZ,MAAA,EAAQ,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA;AAAA,cAChC,SAAA,EAAW,8BAAA;AAAA,cACX,UAAA,EAAY;AAAA;AACd,WACF;AAAA,UACA,MAAM,MAAA;AAAO,SACf,GACA;AAAA;AACN,KACF;AAAA,EACJ;AACF,CAAC,CAAA;ACzDM,IAAM,YAAA,GAA+C,OAAO,WAAW,CAAA;AAWjDJ,mBAAAA,CAAgB;AAAA,EAC3C,IAAA,EAAM,mBAAA;AAAA,EACN,KAAA,EAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA;AAAA,IAEA,GAAA,EAAK;AAAA,MACH,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA;AAAA,IAEA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAM,EAAG;AACtB,IAAA,MAAM,UAAUE,OAAAA,CAAI,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,UAAU,CAAA;AAChD,IAAA,IAAI,cAAc,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,SAAA,CAAU,CAAC,IAAA,KAAS;AACtD,MAAA,OAAA,CAAQ,KAAA,GAAQ,IAAA;AAAA,IAClB,CAAC,CAAA;AAED,IAAA,IAAI,OAAA,GAAmC,IAAA;AACvC,IAAA,IAAI,UAAA,GAA0C,IAAA;AAE9C,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,MAAA,IAAU,QAAA,CAAS,eAAA;AAEhD,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,OAAA,EAAS,MAAA,EAAO;AAChB,MAAA,OAAA,GAAUG,gBAAA,CAAW,OAAA,CAAQ,KAAA,EAAO,QAAA,EAAU,CAAA;AAAA,IAChD,CAAA;AAEA,IAAA,MAAM,WAAW,MAAM;AACrB,MAAA,UAAA,EAAY,MAAA,EAAO;AACnB,MAAA,UAAA,GAAaC,oBAAA,CAAe,KAAA,CAAM,GAAA,EAAK,QAAA,EAAU,CAAA;AAAA,IACnD,CAAA;AAEA,IAAAC,aAAA,CAAU,MAAM;AACd,MAAAC,wBAAA,CAAmB,MAAM,QAAQ,CAAA;AACjC,MAAA,YAAA,EAAa;AACb,MAAA,QAAA,EAAS;AAAA,IACX,CAAC,CAAA;AAED,IAAAL,SAAAA,CAAM,SAAS,MAAM;AACnB,MAAA,IAAI,SAAS,YAAA,EAAa;AAAA,IAC5B,CAAC,CAAA;AAED,IAAAA,SAAAA;AAAA,MACE,MAAM,KAAA,CAAM,KAAA;AAAA,MACZ,CAAC,SAAA,KAAc;AACb,QAAA,WAAA,EAAY;AACZ,QAAA,WAAA,GAAc,SAAA,CAAU,KAAA,CAAM,SAAA,CAAU,CAAC,IAAA,KAAS;AAChD,UAAA,OAAA,CAAQ,KAAA,GAAQ,IAAA;AAAA,QAClB,CAAC,CAAA;AACD,QAAA,OAAA,CAAQ,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,QAAA,EAAS;AACzC,QAAA,IAAI,SAAS,YAAA,EAAa;AAAA,MAC5B;AAAA,KACF;AAEA,IAAAA,SAAAA;AAAA,MACE,MAAM,KAAA,CAAM,MAAA;AAAA,MACZ,MAAM;AACJ,QAAA,IAAI,SAAS,YAAA,EAAa;AAC1B,QAAA,IAAI,YAAY,QAAA,EAAS;AAAA,MAC3B;AAAA,KACF;AAEA,IAAAA,SAAAA;AAAA,MACE,MAAM,KAAA,CAAM,GAAA;AAAA,MACZ,MAAM;AACJ,QAAA,IAAI,YAAY,QAAA,EAAS;AAAA,MAC3B;AAAA,KACF;AAEA,IAAAM,mBAAA,CAAgB,MAAM;AACpB,MAAA,WAAA,EAAY;AACZ,MAAA,OAAA,EAAS,MAAA,EAAO;AAChB,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,UAAA,EAAY,MAAA,EAAO;AACnB,MAAA,UAAA,GAAa,IAAA;AAAA,IACf,CAAC,CAAA;AAED,IAAAC,WAAA,CAAQ,YAAA,EAAc,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,OAAA,EAAS,GAAA,EAAKT,YAAAA,CAAS,MAAM,KAAA,CAAM,GAAG,CAAA,EAAG,CAAA;AAErF,IAAA,OAAO,MAAM,MAAM,OAAA,IAAU;AAAA,EAC/B;AACF,CAAC;;;AC5HM,IAAM,WAAWD,mBAAAA,CAAgB;AAAA,EACtC,IAAA,EAAM,UAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA;AAAA,IAEL,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAU,IAAA,EAAK;AAAA;AAAA,IAErC,IAAA,EAAM,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAM,CAAA,EAAgC,SAAS,EAAA,EAAG;AAAA;AAAA,IAEzE,WAAA,EAAa,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA;AAAA,IAExC,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA;AAAA,IAEtC,KAAA,EAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,MAAA,EAAU;AAAA;AAAA,IAE1C,UAAU,EAAE,IAAA,EAAM,MAAA,EAAsC,OAAA,EAAS,MAAMW,yBAAA;AAAoB,GAC7F;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAM,EAAG;AACtB,IAAA,MAAM,QAAA,GAAWC,UAAAA,CAAO,YAAA,EAAc,MAAS,CAAA;AAC/C,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,IAAA,GAAOC,wBAAkB,KAAA,CAAM,QAAA,EAAU,MAAM,IAAA,EAAM,QAAA,EAAU,QAAQ,KAAK,CAAA;AAClF,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,MAAA,MAAM,QAAQ,KAAA,CAAM,IAAA,GAChB,EAAE,IAAA,EAAM,gBAAe,GACvB;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,MAAA,EAAQ,cAAA;AAAA,QACR,gBAAgB,KAAA,CAAM,WAAA;AAAA,QACtB,gBAAA,EAAkB,OAAA;AAAA,QAClB,iBAAA,EAAmB;AAAA,OACrB;AAEJ,MAAA,MAAM,WAAoB,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAA,KAAMT,KAAAA,CAAE,IAAA,CAAK,GAAA,EAAK,EAAE,GAAA,EAAK,CAAA,EAAG,GAAG,IAAA,CAAK,KAAA,EAAO,CAAC,CAAA;AAC5F,MAAA,IAAI,KAAA,CAAM,OAAO,QAAA,CAAS,OAAA,CAAQA,MAAE,OAAA,EAAS,KAAA,CAAM,KAAK,CAAC,CAAA;AAEzD,MAAA,OAAOA,KAAAA;AAAA,QACL,KAAA;AAAA,QACA;AAAA,UACE,GAAG,KAAA;AAAA,UACH,KAAA,EAAO,4BAAA;AAAA,UACP,OAAA,EAAS,KAAK,OAAA,IAAW,WAAA;AAAA,UACzB,OAAO,KAAA,CAAM,IAAA;AAAA,UACb,QAAQ,KAAA,CAAM,IAAA;AAAA,UACd,GAAG,KAAA;AAAA,UACH,IAAA,EAAM,KAAA,CAAM,KAAA,GAAQ,KAAA,GAAQ,MAAA;AAAA,UAC5B,YAAA,EAAc,MAAM,KAAA,IAAS,MAAA;AAAA,UAC7B,aAAA,EAAe,KAAA,CAAM,KAAA,GAAQ,MAAA,GAAY,MAAA;AAAA,UACzC,kBAAkB,KAAA,CAAM,IAAA;AAAA,UACxB,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,cAAA;AAAA,YACT,aAAA,EAAe,QAAA;AAAA,YACf,UAAA,EAAY,CAAA;AAAA,YACZ,GAAK,KAAA,CAAM,KAAA,IAAoC;AAAC;AAClD,SACF;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,EACF;AACF,CAAC,CAAA;;;AClEM,IAAM,gBAAA,GAAuC,OAAO,UAAU,CAAA;ACYrE,IAAI,YAAA,GAA4B,IAAA;AAChC,SAAS,WAAA,GAAoB;AAC3B,EAAA,IAAI,YAAA,KAAiB,IAAA,EAAM,YAAA,GAAeU,eAAA,EAAW;AACrD,EAAA,OAAO,YAAA;AACT;AAQO,SAAS,OAAA,GAAyB;AACvC,EAAA,MAAM,IAAA,GAAOF,UAAAA,CAAO,gBAAA,EAAkB,IAAI,KAAK,WAAA,EAAY;AAC3D,EAAA,MAAM,KAAA,GAAQV,OAAAA,CAAI,IAAA,CAAK,QAAA,EAAU,CAAA;AACjC,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,SAAA,CAAU,CAAC,IAAA,KAAS;AAC3C,IAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAAA,EAChB,CAAC,CAAA;AACD,EAAAO,oBAAgB,WAAW,CAAA;AAE3B,EAAA,OAAO;AAAA,IACL,MAAA,EAAQR,YAAAA,CAAS,MAAM,KAAA,CAAM,MAAM,MAAM,CAAA;AAAA,IACzC,CAAA,EAAG,CAAC,GAAA,EAAK,MAAA,KAAW;AAClB,MAAA,KAAK,MAAM,KAAA,CAAM,MAAA;AACjB,MAAA,OAAO,IAAA,CAAK,CAAA,CAAE,GAAA,EAAK,MAAM,CAAA;AAAA,IAC3B,CAAA;AAAA,IACA,UAAA,EAAY,CAAC,KAAA,EAAO,OAAA,KAAY;AAC9B,MAAA,KAAK,MAAM,KAAA,CAAM,MAAA;AACjB,MAAA,OAAO,IAAA,CAAK,UAAA,CAAW,KAAA,EAAO,OAAO,CAAA;AAAA,IACvC,CAAA;AAAA,IACA,YAAA,EAAc,CAAC,KAAA,EAAO,OAAA,KAAY;AAChC,MAAA,KAAK,MAAM,KAAA,CAAM,MAAA;AACjB,MAAA,OAAO,IAAA,CAAK,YAAA,CAAa,KAAA,EAAO,OAAO,CAAA;AAAA,IACzC,CAAA;AAAA,IACA,kBAAA,EAAoB,CAAC,KAAA,EAAO,IAAA,EAAM,OAAA,KAAY;AAC5C,MAAA,KAAK,MAAM,KAAA,CAAM,MAAA;AACjB,MAAA,OAAO,IAAA,CAAK,kBAAA,CAAmB,KAAA,EAAO,IAAA,EAAM,OAAO,CAAA;AAAA,IACrD,CAAA;AAAA,IACA,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,aAAa,IAAA,CAAK;AAAA,GACpB;AACF;;;ACzDO,IAAM,mBAAA,GAAsB,sBAAA;AAEnC,IAAM,GAAA,GAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CA+QV,IAAA,EAAK;AAEP,IAAI,SAAA,GAAY,KAAA;AAET,SAAS,oBAAA,GAA6B;AAC3C,EAAA,IAAI,SAAA,EAAW;AACf,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,EAAA,IAAI,QAAA,CAAS,cAAA,CAAe,mBAAmB,CAAA,EAAG;AAChD,IAAA,SAAA,GAAY,IAAA;AACZ,IAAA;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,aAAA,CAAc,OAAO,CAAA;AAC5C,EAAA,KAAA,CAAM,EAAA,GAAK,mBAAA;AACX,EAAA,KAAA,CAAM,WAAA,GAAc,GAAA;AACpB,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,KAAK,CAAA;AAC/B,EAAA,SAAA,GAAY,IAAA;AACd;AC9QA,IAAM,oBAAA,GAAuB,EAAA;AAC7B,IAAM,qBAAA,GAAwB,GAAA;AAEvB,SAAS,oBAAoB,GAAA,EAAuB;AACzD,EAAA,MAAM,OAAA,GAAUC,QAAmB,IAAI,CAAA;AACvC,EAAA,MAAM,eAAA,GAAkBA,OAAAA,CAAc,EAAE,CAAA;AACxC,EAAA,MAAM,eAAA,GAAkBA,OAAAA,CAAc,EAAE,CAAA;AAExC,EAAA,MAAM,eAAA,GAAkBA,OAAAA,CAAc,EAAE,CAAA;AAGxC,EAAA,IAAI,iBAAA,GAAoB,KAAA;AAIxB,EAAA,IAAI,SAAA,GAAkD,IAAA;AACtD,EAAA,MAAM,WAAA,uBAAkB,GAAA,EAA2C;AAEnE,EAAA,MAAM,iBAAiB,MAAY;AACjC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,YAAA,CAAa,SAAS,CAAA;AACtB,MAAA,SAAA,GAAY,IAAA;AAAA,IACd;AAAA,EACF,CAAA;AACA,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,KAAsB;AACzC,IAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AACjC,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,WAAA,CAAY,OAAO,GAAG,CAAA;AAAA,IACxB;AAAA,EACF,CAAA;AACA,EAAA,MAAM,kBAAkB,MAAY;AAClC,IAAA,cAAA,EAAe;AACf,IAAA,KAAA,MAAW,KAAA,IAAS,WAAA,CAAY,MAAA,EAAO,eAAgB,KAAK,CAAA;AAC5D,IAAA,WAAA,CAAY,KAAA,EAAM;AAAA,EACpB,CAAA;AACA,EAAAO,oBAAgB,eAAe,CAAA;AAU/B,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAAyB;AACpD,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAyB;AAElD,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,EAA+B,GAAA,EAAa,EAAA,KAAsB;AACtF,IAAA,IAAI,EAAA,YAAc,WAAA,EAAa,GAAA,CAAI,GAAA,CAAI,KAAK,EAAE,CAAA;AAAA,SACzC,GAAA,CAAI,OAAO,GAAG,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,GAAA,KAAsB;AAC5C,IAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AACtC,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAClC,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,KAAA,IAAS,OAAO,aAAa,WAAA,EAAa;AAC3D,IAAA,MAAM,IAAA,GAAO,QAAQ,qBAAA,EAAsB;AAC3C,IAAA,MAAM,GAAA,GAAM,gBAAA,CAAiB,OAAO,CAAA,CAAE,SAAA;AACtC,IAAA,KAAA,CAAM,MAAM,QAAA,GAAW,OAAA;AACvB,IAAA,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA,EAAG,GAAA,CAAI,YAAY,IAAA,CAAK,GAAA,GAAM,KAAK,MAAM,CAAA,EAAA,CAAA;AAC3D,IAAA,IAAI,QAAQ,KAAA,EAAO;AAEjB,MAAA,KAAA,CAAM,MAAM,IAAA,GAAO,EAAA;AACnB,MAAA,KAAA,CAAM,KAAA,CAAM,KAAA,GAAQ,CAAA,EAAG,MAAA,CAAO,UAAA,IAAc,IAAI,SAAA,GAAY,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAA,CAAA;AAAA,IACrF,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,MAAM,KAAA,GAAQ,EAAA;AACpB,MAAA,KAAA,CAAM,KAAA,CAAM,OAAO,CAAA,EAAG,GAAA,CAAI,YAAY,IAAA,CAAK,KAAA,GAAQ,KAAK,IAAI,CAAA,EAAA,CAAA;AAAA,IAC9D;AAAA,EACF,CAAA;AAEA,EAAAA,oBAAgB,MAAM;AACpB,IAAA,uBAAA,EAAwB;AACxB,IAAA,cAAA,CAAe,KAAA,EAAM;AACrB,IAAA,YAAA,CAAa,KAAA,EAAM;AAAA,EACrB,CAAC,CAAA;AAMD,EAAA,MAAM,cAAA,GAAiB,CAAC,GAAA,KAAsB;AAC5C,IAAA,MAAM,QAAQM,gBAAA,CAAY,GAAA,CAAI,KAAA,EAAO,GAAG,EAAE,MAAA,GAAS,CAAA;AACnD,IAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KACxB,CAAA,KAAM,GAAA,IAAOA,gBAAA,CAAY,GAAA,CAAI,KAAA,EAAO,CAAC,CAAA,CAAE,MAAA,GAAS,CAAA,KAAM,KAAA;AACxD,IAAA,KAAA,MAAW,KAAA,IAAS,CAAC,eAAA,EAAiB,eAAA,EAAiB,eAAe,CAAA,EAAG;AACvE,MAAA,IAAI,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,gBAAgB,CAAA,EAAG;AACtC,QAAA,KAAA,CAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,gBAAA,CAAiB,CAAC,CAAC,CAAA;AAAA,MAC9D;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KAAsB;AAC1C,IAAA,cAAA,EAAe;AACf,IAAA,SAAA,GAAY,WAAW,MAAM;AAC3B,MAAA,SAAA,GAAY,IAAA;AACZ,MAAA,cAAA,CAAe,GAAG,CAAA;AAClB,MAAA,oBAAA,CAAqB,eAAA,EAAiB,KAAK,IAAI,CAAA;AAAA,IACjD,GAAG,oBAAoB,CAAA;AAAA,EACzB,CAAA;AACA,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAA,KAAsB;AAC3C,IAAA,WAAA,CAAY,GAAG,CAAA;AACf,IAAA,WAAA,CAAY,GAAA;AAAA,MACV,GAAA;AAAA,MACA,WAAW,MAAM;AACf,QAAA,WAAA,CAAY,OAAO,GAAG,CAAA;AACtB,QAAA,oBAAA,CAAqB,eAAA,EAAiB,KAAK,KAAK,CAAA;AAAA,MAClD,GAAG,qBAAqB;AAAA,KAC1B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,uBAAuB,MAAY;AACvC,IAAA,IAAI,CAAC,GAAA,CAAI,UAAA,CAAW,KAAA,EAAO;AAC3B,IAAA,eAAA,EAAgB;AAChB,IAAA,OAAA,CAAQ,KAAA,GAAQ,IAAA;AAChB,IAAA,eAAA,CAAgB,QAAQ,EAAC;AACzB,IAAA,eAAA,CAAgB,QAAQ,EAAC;AACzB,IAAA,eAAA,CAAgB,QAAQ,EAAC;AAAA,EAC3B,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KAAwB;AACtC,IAAA,IAAI,KAAK,QAAA,EAAU;AACnB,IAAA,oBAAA,EAAqB;AACrB,IAAA,GAAA,CAAI,UAAA,CAAW,IAAA,CAAK,GAAA,EAAK,IAAI,CAAA;AAAA,EAC/B,CAAA;AAGA,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KAAsB;AAC1C,IAAA,eAAA,EAAgB;AAChB,IAAA,MAAM,UAAU,eAAA,CAAgB,KAAA;AAChC,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AACzB,MAAA,eAAA,CAAgB,QAAQ,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,GAAG,CAAA;AACvD,MAAA,oBAAA,CAAqB,eAAA,EAAiB,KAAK,KAAK,CAAA;AAChD,MAAA,oBAAA,CAAqB,eAAA,EAAiB,KAAK,KAAK,CAAA;AAAA,IAClD,CAAA,MAAO;AAEL,MAAA,cAAA,CAAe,GAAG,CAAA;AAClB,MAAA,eAAA,CAAgB,KAAA,GAAQ,CAAC,GAAG,eAAA,CAAgB,OAAO,GAAG,CAAA;AAAA,IACxD;AAAA,EACF,CAAA;AAGA,EAAA,MAAM,UAAA,GAAa,CAAC,GAAA,KAAsB;AACxC,IAAA,eAAA,EAAgB;AAChB,IAAA,cAAA,CAAe,GAAG,CAAA;AAClB,IAAA,oBAAA,CAAqB,eAAA,EAAiB,KAAK,IAAI,CAAA;AAAA,EACjD,CAAA;AAEA,EAAA,MAAM,oBAAA,GAAuB,CAC3B,KAAA,EACA,GAAA,EACA,OAAA,KACS;AACT,IAAA,MAAM,UAAU,KAAA,CAAM,KAAA;AACtB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,QAAS,KAAA,GAAQ,CAAC,GAAG,OAAA,EAAS,GAAG,CAAA;AAAA,IAC5D,CAAA,MAAA,IAAW,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG;AAChC,MAAA,KAAA,CAAM,QAAQ,OAAA,CAAQ,MAAA,CAAO,CAAC,IAAA,KAAS,SAAS,GAAG,CAAA;AAAA,IACrD;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CACzB,SAAA,EACA,KAAA,KACY;AACZ,IAAA,IAAI,CAAC,SAAA,IAAa,EAAE,SAAA,YAAqB,cAAc,OAAO,KAAA;AAC9D,IAAA,MAAM,OAAO,KAAA,CAAM,aAAA;AACnB,IAAA,OAAO,CAAC,EAAE,IAAA,IAAQ,gBAAgB,IAAA,IAAQ,SAAA,CAAU,SAAS,IAAI,CAAA,CAAA;AAAA,EACnE,CAAA;AAEA,EAAA,MAAM,qBAAA,GAAwB,CAAC,IAAA,EAAgB,KAAA,KAC7C,KAAK,IAAA,CAAK,CAAC,GAAA,KAAQA,gBAAA,CAAY,IAAI,KAAA,EAAO,GAAG,CAAA,CAAE,MAAA,KAAW,QAAQ,CAAC,CAAA;AAErE,EAAA,MAAM,uBAAA,GAA0B,CAAC,GAAA,EAAa,KAAA,KAA2B;AACvE,IAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,eAAA,CAAgB,KAAA,EAAO,KAAK,CAAA;AACzE,IAAA,IAAI,cAAA,SAAuB,cAAA,KAAmB,GAAA;AAC9C,IAAA,MAAM,cAAA,GAAiB,qBAAA,CAAsB,eAAA,CAAgB,KAAA,EAAO,KAAK,CAAA;AACzE,IAAA,IAAI,cAAA,SAAuB,cAAA,KAAmB,GAAA;AAC9C,IAAA,OAAO,qBAAA,CAAsB,eAAA,CAAgB,KAAA,EAAO,KAAK,CAAA,KAAM,GAAA;AAAA,EACjE,CAAA;AAIA,EAAA,MAAM,eAAA,GAAkBd,aAAS,MAAM;AACrC,IAAA,IAAI,CAAC,GAAA,CAAI,UAAA,CAAW,KAAA,SAAc,EAAC;AACnC,IAAA,MAAM,OAAiB,EAAC;AACxB,IAAA,KAAA,MAAW,IAAA,IAAQ,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO;AACjC,MAAA,IAAIe,aAAA,CAAS,IAAI,CAAA,IAAK,uBAAA,CAAwB,IAAA,CAAK,GAAA,EAAK,CAAC,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAA,IAChF;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,MAAM,wBAAwB,MAAY;AACxC,IAAA,KAAA,MAAW,GAAA,IAAO,eAAA,CAAgB,KAAA,EAAO,cAAA,CAAe,GAAG,CAAA;AAAA,EAC7D,CAAA;AAEA,EAAA,IAAI,uBAAA,GAA0B,KAAA;AAC9B,EAAA,MAAM,0BAA0B,MAAY;AAC1C,IAAA,IAAI,uBAAA,IAA2B,OAAO,QAAA,KAAa,WAAA,EAAa;AAChE,IAAA,uBAAA,GAA0B,IAAA;AAE1B,IAAA,QAAA,CAAS,gBAAA,CAAiB,QAAA,EAAU,qBAAA,EAAuB,IAAI,CAAA;AAC/D,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,qBAAqB,CAAA;AAAA,EACzD,CAAA;AACA,EAAA,MAAM,0BAA0B,MAAY;AAC1C,IAAA,IAAI,CAAC,uBAAA,IAA2B,OAAO,QAAA,KAAa,WAAA,EAAa;AACjE,IAAA,uBAAA,GAA0B,KAAA;AAC1B,IAAA,QAAA,CAAS,mBAAA,CAAoB,QAAA,EAAU,qBAAA,EAAuB,IAAI,CAAA;AAClE,IAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,qBAAqB,CAAA;AAAA,EAC5D,CAAA;AAEA,EAAAb,SAAAA;AAAA,IACE,eAAA;AAAA,IACA,CAAC,MAAM,IAAA,KAAS;AACd,MAAA,IAAI,KAAK,MAAA,GAAS,CAAA,IAAK,IAAA,CAAK,MAAA,KAAW,GAAG,uBAAA,EAAwB;AAAA,WAAA,IACzD,KAAK,MAAA,KAAW,CAAA,IAAK,IAAA,CAAK,MAAA,GAAS,GAAG,uBAAA,EAAwB;AACvE,MAAA,KAAA,MAAW,GAAA,IAAO,IAAA,EAAM,cAAA,CAAe,GAAG,CAAA;AAAA,IAC5C,CAAA;AAAA,IACA,EAAE,OAAO,MAAA;AAAO,GAClB;AAEA,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,kBAAA;AAAA,IACA,qBAAA;AAAA,IACA,uBAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAA,EAAmB,EAAE,GAAA,EAAK,MAAM,iBAAA,EAAkB;AAAA,IAClD,oBAAA,EAAsB,CAAC,KAAA,KAAmB;AACxC,MAAA,iBAAA,GAAoB,KAAA;AAAA,IACtB,CAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AACF;AChPO,SAAS,4BAA4B,IAAA,EAA0B;AACpE,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,oBAAA;AAAA,IACA,uBAAA;AAAA,IACA,oBAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,GAAI,IAAA;AAEJ,EAAA,OAAO,CAAC,CAAA,KAA2B;AACjC,IAAA,MAAM,OAAO,CAAA,CAAE,aAAA;AACf,IAAA,MAAM,UAAU,KAAA,CAAM,IAAA,CAAK,KAAK,gBAAA,CAA8B,sBAAsB,CAAC,CAAA,CAAE,MAAA;AAAA,MACrF,CAAC,MAAA,KAAW,CAAC,MAAA,CAAO,QAAQ,8CAA8C;AAAA,KAC5E;AACA,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,QAAA,CAAS,aAA4B,CAAA;AACjE,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAAoB,OAAA,CAAA,CAAS,CAAA,GAAI,QAAQ,MAAA,IAAU,OAAA,CAAQ,MAAM,CAAA,EAAG,KAAA,EAAM;AAC3F,IAAA,MAAM,GAAA,GAAM,OAAO,CAAA,GAAI,OAAA,CAAQ,GAAG,CAAA,EAAG,YAAA,CAAa,UAAU,CAAA,GAAI,MAAA;AAChE,IAAA,MAAM,IAAA,GAAO,GAAA,GAAMc,gBAAA,CAAY,KAAA,EAAO,GAAG,CAAA,GAAI,MAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,GAAA,IAAO,CAAA,GAAI,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG,YAAA,CAAa,YAAY,CAAA,IAAK,CAAC,CAAA,GAAI,CAAA;AAEjF,IAAA,QAAQ,EAAE,GAAA;AAAK,MACb,KAAK,WAAA,EAAa;AAChB,QAAA,CAAA,CAAE,cAAA,EAAe;AAEjB,QAAA,IAAI,UAAA,EAAW,IAAK,IAAA,IAAQD,aAAAA,CAAS,IAAI,CAAA,EAAG;AAC1C,UAAA,UAAA,CAAW,GAAI,CAAA;AACf,UAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAG,CAAA,CAAG,QAAQ,uBAAuB,CAAA;AAC3D,UAAA,KAAKE,aAAS,MAAM;AAClB,YAAA,KAAA,EACI,aAAA,CAA2B,+CAA+C,CAAA,EAC1E,KAAA,EAAM;AAAA,UACZ,CAAC,CAAA;AACD,UAAA;AAAA,QACF;AACA,QAAA,OAAA,CAAQ,GAAA,GAAM,CAAA,GAAI,CAAA,GAAI,GAAA,GAAM,CAAC,CAAA;AAC7B,QAAA;AAAA,MACF;AAAA,MACA,KAAK,SAAA,EAAW;AACd,QAAA,CAAA,CAAE,cAAA,EAAe;AAIjB,QAAA,IAAI,UAAA,MAAgB,IAAA,IAAQF,aAAAA,CAAS,IAAI,CAAA,IAAK,uBAAA,CAAwB,GAAA,EAAM,KAAK,CAAA,EAAG;AAClF,UAAA,oBAAA,CAAqB,eAAA,EAAiB,KAAM,KAAK,CAAA;AACjD,UAAA,oBAAA,CAAqB,eAAA,EAAiB,KAAM,KAAK,CAAA;AACjD,UAAA;AAAA,QACF;AACA,QAAA,OAAA,CAAQ,MAAM,CAAA,GAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,MAAM,CAAC,CAAA;AAC9C,QAAA;AAAA,MACF;AAAA,MACA,KAAK,MAAA;AACH,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,OAAA,CAAQ,CAAC,GAAG,KAAA,EAAM;AAClB,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA,EAAG,KAAA,EAAM;AACnC,QAAA;AAAA,MACF,KAAK,QAAA,EAAU;AAEb,QAAA,IAAI,YAAW,EAAG;AAChB,UAAA,MAAM,QAAA,GAAW;AAAA,YACf,GAAG,eAAA,CAAgB,KAAA;AAAA,YACnB,GAAG,eAAA,CAAgB,KAAA;AAAA,YACnB,GAAG,eAAA,CAAgB;AAAA,WACrB;AACA,UAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,YAAA,CAAA,CAAE,cAAA,EAAe;AACjB,YAAA,MAAM,OAAA,GAAU,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAMD,iBAAY,KAAA,EAAO,CAAC,CAAA,CAAE,MAAA,KAAW,CAAC,CAAA;AACvE,YAAA,oBAAA,EAAqB;AACrB,YAAA,IAAI,OAAA,EAAS;AACX,cAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,cAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,UAAU,CAAA,KAAM,OAAO,CAAA,EAAG,KAAA,EAAM;AACnE,cAAA,KAAKG,aAAS,MAAM;AAClB,gBAAA,oBAAA,CAAqB,KAAK,CAAA;AAAA,cAC5B,CAAC,CAAA;AAAA,YACH;AAAA,UACF;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAAA;AAGF,IAAA,IAAI,aAAa,GAAA,GAAM,CAAA,IAAK,CAAC,GAAA,IAAO,CAAC,IAAA,EAAM;AAE3C,IAAA,IAAI,CAAA,CAAE,QAAQ,YAAA,EAAc;AAC1B,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,IAAIF,aAAAA,CAAS,IAAI,CAAA,EAAG;AAClB,QAAA,IAAI,YAAW,IAAK,CAAC,UAAS,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AAE7C,UAAA,IAAI,UAAA,EAAW,EAAG,UAAA,CAAW,GAAG,CAAA;AAAA,sBACpB,GAAG,CAAA;AACf,UAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAG,CAAA,CAAG,QAAQ,uBAAuB,CAAA;AAC3D,UAAA,KAAKE,aAAS,MAAM;AAClB,YAAA,KAAA,EACI,aAAA,CAA2B,+CAA+C,CAAA,EAC1E,KAAA,EAAM;AAAA,UACZ,CAAC,CAAA;AAAA,QACH,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,QACjB;AAAA,MACF;AAAA,IACF,CAAA,MAAA,IAAW,CAAA,CAAE,GAAA,KAAQ,WAAA,EAAa;AAChC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,IAAI,UAAA,EAAW,IAAKF,aAAAA,CAAS,IAAI,CAAA,EAAG;AAClC,QAAA,oBAAA,CAAqB,eAAA,EAAiB,KAAK,KAAK,CAAA;AAChD,QAAA,oBAAA,CAAqB,eAAA,EAAiB,KAAK,KAAK,CAAA;AAChD,QAAA;AAAA,MACF;AACA,MAAA,IAAIA,cAAS,IAAI,CAAA,IAAK,UAAS,CAAE,QAAA,CAAS,GAAG,CAAA,EAAG;AAC9C,QAAA,MAAA,CAAO,GAAG,CAAA;AAAA,MACZ,CAAA,MAAO;AACL,QAAA,MAAM,YAAYD,gBAAAA,CAAY,KAAA,EAAO,GAAG,CAAA,CAAE,EAAA,CAAG,EAAE,CAAA,EAAG,GAAA;AAClD,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,UAAU,CAAA,KAAM,SAAS,CAAA,EAAG,KAAA,EAAM;AAAA,QACvE;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AACF;;;ACrHO,IAAM,cAAcf,mBAAAA,CAAgB;AAAA,EACzC,IAAA,EAAM,aAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA;AAAA,IAEL,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA,EAA8B,UAAU,IAAA,EAAK;AAAA;AAAA,IAE5D,SAAA,EAAW,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,MAAA,EAAU;AAAA;AAAA,IAE9C,YAAA,EAAc,EAAE,IAAA,EAAM,KAAA,EAA6B,SAAS,MAAA,EAAU;AAAA;AAAA,IAEtE,mBAAA,EAAqB,EAAE,IAAA,EAAM,KAAA,EAA6B,SAAS,MAAA,EAAU;AAAA;AAAA,IAE7E,SAAA,EAAW,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA,IAC3C,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA,IACA,SAAA,EAAW,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,MAAA;AAAU,GAChD;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,CAAC,IAAA,EAAc,KAAA,KAAmB,IAAA;AAAA,IAC1C,qBAAA,EAAuB,CAAC,KAAA,KAAoB;AAAA,GAC9C;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,IAAA,EAAM,OAAM,EAAG;AAC5B,IAAA,oBAAA,EAAqB;AACrB,IAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AACtB,IAAA,MAAM,OAAOC,YAAAA,CAAS,MAAMkB,eAAA,CAAW,KAAA,CAAM,KAAK,CAAC,CAAA;AACnD,IAAA,MAAM,UAAA,GAAalB,YAAAA;AAAA,MAAS,MAC1B,KAAA,CAAM,SAAA,GAAYc,gBAAAA,CAAY,MAAM,KAAA,EAAO,KAAA,CAAM,SAAS,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,IAAI;AAAC,KACnF;AAIA,IAAA,MAAM,aAAad,YAAAA,CAAS,MAAM,MAAM,WAAA,KAAgB,YAAA,IAAgB,MAAM,SAAS,CAAA;AAEvF,IAAA,MAAM,YAAA,GAAeA,YAAAA,CAAS,MAAM,KAAA,CAAM,iBAAiB,MAAS,CAAA;AAQpE,IAAA,MAAM,QAAQmB,oBAAA,CAAgB;AAAA,MAC5B,IAAA,EAAM,UAAA;AAAA,MACN,eAAA,EACE,KAAA,CAAM,mBAAA,KACL,KAAA,CAAM,SAAA,GAAYC,gBAAA,CAAY,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,SAAS,CAAA,GAAI,EAAC;AAAA,KACnE,CAAA;AACD,IAAA,MAAM,gBAAA,GAAmBC,cAAA,CAAqB,KAAA,CAAM,GAAA,EAAK,CAAA;AACzD,IAAAb,mBAAAA;AAAA,MACE,KAAA,CAAM,KAAA,CAAM,SAAA,CAAU,CAAC,IAAA,KAAS;AAC9B,QAAA,gBAAA,CAAiB,KAAA,GAAQ,IAAA;AAAA,MAC3B,CAAC;AAAA,KACH;AACA,IAAA,MAAM,QAAA,GAAWR,YAAAA;AAAA,MAAS,MACxB,YAAA,CAAa,KAAA,GAAS,KAAA,CAAM,eAA4B,gBAAA,CAAiB;AAAA,KAC3E;AAMA,IAAAE,SAAAA,CAAM,CAAC,MAAM,KAAA,CAAM,SAAA,EAAW,MAAM,KAAA,CAAM,KAAK,CAAA,EAAG,CAAC,CAAC,GAAG,CAAA,KAAM;AAC3D,MAAA,IAAI,CAAC,YAAA,CAAa,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,GAAA,GAAMkB,gBAAA,CAAY,KAAA,CAAM,KAAA,EAAO,GAAG,CAAA,GAAI,EAAE,CAAA;AAAA,IAC/E,CAAC,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,CAAC,GAAA,KAAsB;AACpC,MAAA,IAAI,aAAa,KAAA,EAAO;AACtB,QAAA,MAAM,MAAM,KAAA,CAAM,YAAA;AAClB,QAAA,IAAA;AAAA,UACE,qBAAA;AAAA,UACA,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,GAAI,IAAI,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,GAAG,CAAA,GAAI,CAAC,GAAG,KAAK,GAAG;AAAA,SACjE;AAAA,MACF,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,OAAO,GAAG,CAAA;AAChB,QAAA,IAAA,CAAK,qBAAA,EAAuB,KAAA,CAAM,GAAA,EAAK,CAAA;AAAA,MACzC;AAAA,IACF,CAAA;AAGA,IAAA,MAAM,SAAS,mBAAA,CAAoB;AAAA,MACjC,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,IAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA,EAAY,EAAE,KAAA,EAAO,UAAA,CAAW,KAAA,EAAM;AAAA,MACtC,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,MAAA;AAAA,MACA,YAAY,CAAC,GAAA,EAAa,SAAkB,IAAA,CAAK,QAAA,EAAU,KAAK,IAAI;AAAA,KACrE,CAAA;AACD,IAAA,MAAM;AAAA,MACJ,OAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,oBAAA;AAAA,MACA,oBAAA;AAAA,MACA,kBAAA;AAAA,MACA,uBAAA;AAAA,MACA,YAAA;AAAA,MACA,cAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AACJ,IAAA,MAAM,SAAA,GAAY,CAAC,IAAA,KAQH;AACd,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAK,CAAA;AACpC,MAAA,OAAO;AAAA,QACL,oBAAA;AAAA,QACA,6BAA6B,KAAK,CAAA,CAAA;AAAA,QAClC,CAAA,oBAAA,EAAuB,IAAA,CAAK,MAAA,GAAS,QAAA,GAAW,MAAM,CAAA,CAAA;AAAA,QACtD,IAAA,CAAK,SAAS,WAAA,GAAc,MAAA;AAAA,QAC5B,IAAA,CAAK,QAAQ,UAAA,GAAa,MAAA;AAAA,QAC1B,IAAA,CAAK,UAAU,YAAA,GAAe,MAAA;AAAA,QAC9B,IAAA,CAAK,OAAO,SAAA,GAAY,MAAA;AAAA,QACxB,IAAA,CAAK,WAAW,aAAA,GAAgB;AAAA,OAClC,CAAE,OAAO,OAAO,CAAA;AAAA,IAClB,CAAA;AAEA,IAAA,MAAM,QAAA,GAAW,CAAC,IAAA,EAAe,IAAA,GAAO,OACtC,IAAA,CAAK,IAAA,GAAOjB,KAAAA,CAAE,QAAA,EAAU,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,CAAA,GAAI,IAAA;AAEvD,IAAA,MAAM,SAAA,GAAY,CAAC,IAAA,KACjB,IAAA,CAAK,KAAA,KAAU,MAAA,IAAa,IAAA,CAAK,KAAA,KAAU,EAAA,IAAM,CAAC,KAAA,CAAM,SAAA,GACpDA,KAAAA;AAAA,MACE,MAAA;AAAA,MACA;AAAA,QACE,KAAA,EAAO,qBAAA;AAAA,QACP,qBAAA,EAAuB;AAAA,OACzB;AAAA,MACA,MAAA,CAAO,KAAK,KAAK;AAAA,KACnB,GACA,IAAA;AAEN,IAAA,MAAM,UAAA,GAAa,CAAC,IAAA,EAAe,KAAA,KAAyB;AAC1D,MAAA,MAAM,MAAA,GAASY,cAAS,IAAI,CAAA;AAC5B,MAAA,MAAM,aAAa,UAAA,CAAW,KAAA;AAC9B,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,QAAA,CAAS,KAAK,GAAG,CAAA;AAC7C,MAAA,MAAM,QAAQ,UAAA,GAAa,uBAAA,CAAwB,IAAA,CAAK,GAAA,EAAK,KAAK,CAAA,GAAI,IAAA;AACtE,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,KAAQ,KAAA,CAAM,SAAA;AAClC,MAAA,MAAM,KAAA,GAAQ,UAAU,CAAC,MAAA,IAAU,WAAW,KAAA,CAAM,QAAA,CAAS,KAAK,GAAG,CAAA;AAGrE,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,KAAA,KAAU,IAAA,CAAK,OAAQ,UAAA,IAAc,KAAA;AAChE,MAAA,MAAM,gBAAgB,MAAA,IAAU,CAAC,KAAK,QAAA,KAAa,MAAA,IAAU,SAAS,KAAA,IAAS,UAAA,CAAA;AAI/E,MAAA,MAAM,YAAA,GAAe,UAAA,IAAc,MAAA,IAAU,KAAA,KAAU,CAAA;AAEvD,MAAA,MAAM,GAAA,GAAMZ,KAAAA;AAAA,QACV,QAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAM,QAAA;AAAA,UACN,GAAA,EAAK,CAAC,EAAA,KAAgB;AACpB,YAAA,IAAI,YAAA,EAAc,YAAA,CAAa,cAAA,EAAgB,IAAA,CAAK,KAAK,EAAE,CAAA;AAAA,UAC7D,CAAA;AAAA,UACA,KAAA,EAAO;AAAA,YACL,GAAG,SAAA,CAAU;AAAA,cACX,KAAA;AAAA,cACA,MAAA;AAAA,cACA,KAAA;AAAA,cACA,OAAA,EAAS,UAAA;AAAA,cACT,IAAA,EAAM,SAAS,KAAA,GAAQ,KAAA;AAAA,cACvB,QAAA,EAAU,CAAC,CAAC,IAAA,CAAK,QAAA;AAAA,cACjB;AAAA,aACD,CAAA;AAAA,YACD,GAAI,MAAM,SAAA,IAAa,KAAA,KAAU,IAAI,CAAC,cAAc,IAAI;AAAC,WAC3D;AAAA,UACA,oBAAA,EAAsB,EAAA;AAAA,UACtB,YAAY,IAAA,CAAK,GAAA;AAAA,UACjB,aAAA,EAAe,SAAS,MAAA,GAAS,MAAA;AAAA,UACjC,aAAA,EAAe,SAAS,MAAA,GAAS,MAAA;AAAA,UACjC,mBAAA,EAAqB,QAAQ,MAAA,GAAS,MAAA;AAAA,UACtC,WAAA,EAAa,MAAA,IAAU,KAAA,GAAQ,MAAA,GAAS,MAAA;AAAA,UACxC,cAAA,EAAgB,aAAa,MAAA,GAAS,MAAA;AAAA,UACtC,YAAA,EAAc,OAAO,KAAK,CAAA;AAAA,UAC1B,oBAAoB,KAAA,CAAM,WAAA;AAAA,UAC1B,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,KAAA,EAAO,KAAA,CAAM,SAAA,GAAY,IAAA,CAAK,KAAA,GAAQ,MAAA;AAAA,UACtC,YAAA,EAAc,MAAM,SAAA,GAChB,MAAA,GACE,GAAG,IAAA,CAAK,KAAK,CAAA,UAAA,CAAA,GACb,IAAA,CAAK,KAAA,GACP,MAAA;AAAA,UACJ,eAAA,EAAiB,MAAA,GAAU,KAAA,GAAQ,MAAA,GAAS,OAAA,GAAW,MAAA;AAAA,UACvD,cAAA,EAAgB,SAAS,MAAA,GAAS,MAAA;AAAA,UAClC,cAAc,MAAM;AAClB,YAAA,IAAI,CAAC,IAAA,CAAK,QAAA,EAAU,OAAA,CAAQ,QAAQ,IAAA,CAAK,GAAA;AAAA,UAC3C,CAAA;AAAA,UACA,YAAA,EAAc,CAAC,KAAA,KAAsB;AACnC,YAAA,IAAI,OAAA,CAAQ,UAAU,IAAA,CAAK,GAAA,IAAO,CAAC,kBAAA,CAAmB,KAAA,CAAM,aAAA,EAAe,KAAK,CAAA,EAAG;AACjF,cAAA,OAAA,CAAQ,KAAA,GAAQ,IAAA;AAAA,YAClB;AAAA,UACF,CAAA;AAAA,UACA,SAAS,MAAM;AACb,YAAA,IAAI,KAAA,CAAM,aAAa,MAAA,EAAQ;AAC7B,cAAA,MAAA,CAAOmB,cAAA,CAAU,IAAI,CAAC,CAAA;AAAA,YACxB,CAAA,MAAA,IAAW,cAAc,MAAA,EAAQ;AAE/B,cAAA,YAAA,CAAa,KAAK,GAAG,CAAA;AAAA,YACvB,WAAW,MAAA,EAAQ;AACjB,cAAA,MAAA,CAAO,KAAK,GAAG,CAAA;AAAA,YACjB,CAAA,MAAO;AACL,cAAA,MAAA,CAAO,IAAI,CAAA;AAAA,YACb;AAAA,UACF;AAAA,SACF;AAAA,QACA;AAAA,UACE,SAAS,IAAI,CAAA;AAAA,UACbnB,KAAAA;AAAA,YACE,MAAA;AAAA,YACA;AAAA,cACE,KAAA,EAAO;AAAA,aACT;AAAA,YACA,IAAA,CAAK;AAAA,WACP;AAAA,UACA,UAAU,IAAI,CAAA;AAAA,UACd,UAAU,EAAE,KAAA,CAAM,aAAa,KAAA,KAAU,CAAA,CAAA,GACrCA,MAAE,QAAA,EAAU;AAAA,YACV,MACE,UAAA,IAAc,KAAA,KAAU,KAAK,CAAC,KAAA,CAAM,YAAY,cAAA,GAAiB,eAAA;AAAA,YACnE,IAAA,EAAM,EAAA;AAAA,YACN,KAAA,EAAO,qBAAA;AAAA,YACP,eAAA,EAAiB,gBAAgB,MAAA,GAAS;AAAA,WAC3C,CAAA,GACD;AAAA;AACN,OACF;AAKA,MAAA,OAAOA,KAAAA;AAAA,QACL,KAAA;AAAA,QACA;AAAA,UACE,KAAK,IAAA,CAAK,GAAA;AAAA,UACV,qBAAA,EAAuB,SAAS,EAAA,GAAK,MAAA;AAAA,UACrC,WAAA,EAAa,MAAA,IAAU,KAAA,GAAQ,MAAA,GAAS,MAAA;AAAA,UACxC,YAAA,EAAc,OAAO,KAAK,CAAA;AAAA,UAC1B,KAAA,EAAO,CAAC,qBAAA,EAAuB,CAAA,2BAAA,EAA8B,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,UACjF,GAAI,cAAc,MAAA,GACd;AAAA,YACE,YAAA,EAAc,CAAC,KAAA,KAAsB;AACnC,cAAA,IAAI,CAAC,KAAK,QAAA,IAAY,CAAC,mBAAmB,KAAA,CAAM,aAAA,EAAe,KAAK,CAAA,EAAG;AACrE,gBAAA,WAAA,CAAY,KAAK,GAAG,CAAA;AACpB,gBAAA,YAAA,CAAa,KAAK,GAAG,CAAA;AAAA,cACvB;AAAA,YACF,CAAA;AAAA,YACA,WAAA,EAAa,CAAC,KAAA,KAAsB;AAClC,cAAA,IAAI,CAAC,KAAK,QAAA,IAAY,CAAC,mBAAmB,KAAA,CAAM,aAAA,EAAe,KAAK,CAAA,EAAG;AACrE,gBAAA,WAAA,CAAY,KAAK,GAAG,CAAA;AACpB,gBAAA,YAAA,CAAa,KAAK,GAAG,CAAA;AAAA,cACvB;AAAA,YACF,CAAA;AAAA,YACA,UAAA,EAAY,CAAC,KAAA,KAAsB;AACjC,cAAA,IAAI,CAAC,KAAK,QAAA,IAAY,CAAC,mBAAmB,KAAA,CAAM,aAAA,EAAe,KAAK,CAAA,EAAG;AACrE,gBAAA,aAAA,CAAc,KAAK,GAAG,CAAA;AAAA,cACxB;AAAA,YACF,CAAA;AAAA,YACA,YAAA,EAAc,CAAC,KAAA,KAAsB;AACnC,cAAA,IAAI,CAAC,KAAK,QAAA,IAAY,CAAC,mBAAmB,KAAA,CAAM,aAAA,EAAe,KAAK,CAAA,EAAG;AACrE,gBAAA,aAAA,CAAc,KAAK,GAAG,CAAA;AAAA,cACxB;AAAA,YACF,CAAA;AAAA,YACA,WAAW,MAAM;AACf,cAAA,IAAI,iBAAA,CAAkB,KAAI,EAAG;AAC7B,cAAA,oBAAA,CAAqB,eAAA,EAAiB,IAAA,CAAK,GAAA,EAAK,IAAI,CAAA;AAAA,YACtD,CAAA;AAAA,YACA,UAAA,EAAY,CAAC,KAAA,KAAsB;AACjC,cAAA,MAAM,QAAQ,KAAA,CAAM,aAAA;AACpB,cAAA,MAAM,OAAO,KAAA,CAAM,aAAA;AACnB,cAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG;AAClC,gBAAA,oBAAA,CAAqB,eAAA,EAAiB,IAAA,CAAK,GAAA,EAAK,KAAK,CAAA;AAAA,cACvD;AAAA,YACF;AAAA,cAEF;AAAC,SACP;AAAA,QACA;AAAA,UACE,GAAA;AAAA,UACA,MAAA,GACIA,KAAAA;AAAA,YACE,KAAA;AAAA,YACA;AAAA,cACE,KAAA,EAAO,wBAAA;AAAA,cACP,wBAAA,EAA0B,EAAA;AAAA,cAC1B,GAAA,EAAK,CAAC,EAAA,KAAgB;AACpB,gBAAA,IAAI,YAAA,EAAc,YAAA,CAAa,YAAA,EAAc,IAAA,CAAK,KAAK,EAAE,CAAA;AAAA,cAC3D,CAAA;AAAA,cACA,IAAA,EAAM,OAAA;AAAA,cACN,aAAA,EAAe,QAAQ,MAAA,GAAY;AAAA,aACrC;AAAA,YACA;AAAA,cACEA,KAAAA;AAAA,gBACE,KAAA;AAAA,gBACA,EAAE,OAAO,8BAAA,EAA+B;AAAA,gBAAA,CACvC,IAAA,CAAK,QAAA,IAAY,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,KAAU,UAAA,CAAW,KAAA,EAAO,KAAA,GAAQ,CAAC,CAAC;AAAA;AACnE;AACF,WACF,GACA;AAAA;AACN,OACF;AAAA,IACF,CAAA;AAIA,IAAA,MAAM,OAAA,GAAUkB,eAA+B,IAAI,CAAA;AACnD,IAAAnB,SAAAA;AAAA,MACE,CAAC,MAAM,KAAA,CAAM,SAAA,EAAW,MAAM,MAAM,KAAK,CAAA;AAAA,MACzC,MAAM;AACJ,QAAA,IAAI,CAAC,MAAM,SAAA,EAAW;AACtB,QAAA,MAAM,OAAO,OAAA,CAAQ,KAAA;AACrB,QAAA,IAAI,CAAC,IAAA,EAAM;AACX,QAAA,MAAM,EAAA,GAAK,IAAA,CAAK,aAAA,CAA2B,0CAA0C,CAAA;AACrF,QAAA,IAAI,CAAC,EAAA,IAAM,OAAO,EAAA,CAAG,mBAAmB,UAAA,EAAY;AACpD,QAAA,IAAI,QAAA,GAA2B,MAAA;AAC/B,QAAA,IACE,OAAO,MAAA,KAAW,WAAA,IAClB,OAAO,MAAA,CAAO,UAAA,KAAe,UAAA,IAC7B,CAAC,MAAA,CAAO,UAAA,CAAW,kCAAkC,CAAA,CAAE,OAAA,EACvD;AACA,UAAA,QAAA,GAAW,QAAA;AAAA,QACb;AACA,QAAA,EAAA,CAAG,eAAe,EAAE,KAAA,EAAO,WAAW,MAAA,EAAQ,SAAA,EAAW,UAAU,CAAA;AAAA,MACrE,CAAA;AAAA,MACA,EAAE,OAAO,MAAA;AAAO,KAClB;AASA,IAAA,MAAM,YAAY,2BAAA,CAA4B;AAAA,MAC5C,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,UAAA,EAAY,MAAM,UAAA,CAAW,KAAA;AAAA,MAC7B,QAAA,EAAU,MAAM,QAAA,CAAS,KAAA;AAAA,MACzB,MAAA;AAAA,MACA,UAAA;AAAA,MACA,oBAAA;AAAA,MACA,uBAAA;AAAA,MACA,oBAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAA;AAAA,MAEA,oBAAA,EAAsB,CAAC,CAAA,KAAe;AACpC,QAAA,MAAA,CAAO,qBAAqB,CAAC,CAAA;AAAA,MAC/B,CAAA;AAAA,MACA,WAAW,KAAA,CAAM;AAAA,KAClB,CAAA;AACD,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,eAAA;AAAA,MACA,CAAA,eAAA,EAAkB,MAAM,WAAW,CAAA,CAAA;AAAA,MACnC,KAAA,CAAM,YAAY,0BAAA,GAA6B;AAAA,KACjD;AACA,IAAA,OAAO,MACLC,KAAAA;AAAA,MACE,KAAA;AAAA,MACA;AAAA,QACE,GAAG,KAAA;AAAA,QACH,GAAA,EAAK,CAAC,EAAA,KAAgB;AACpB,UAAA,OAAA,CAAQ,QAAS,EAAA,IAAM,IAAA;AAAA,QACzB,CAAA;AAAA,QACA,KAAA,EAAO,CAAC,GAAG,SAAA,EAAW,MAAM,KAAiD,CAAA;AAAA,QAC7E,oBAAA,EAAsB,EAAA;AAAA,QACtB,gBAAA,EAAkB,KAAA,CAAM,SAAA,GAAY,MAAA,GAAS,MAAA;AAAA,QAC7C,oBAAoB,KAAA,CAAM,WAAA;AAAA,QAC1B,YAAA,EAAc,KAAA,CAAM,SAAA,IAAa,CAAA,CAAE,WAAW,CAAA;AAAA,QAC9C,SAAA;AAAA,QACA,OAAO,KAAA,CAAM;AAAA,OACf;AAAA,MACA,IAAA,CAAK,MAAM,GAAA,CAAI,CAAC,SAAS,UAAA,CAAW,IAAA,EAAM,CAAC,CAAC;AAAA,KAC9C;AAAA,EACJ;AACF,CAAC;ACraM,IAAM,iBAAiBJ,mBAAAA,CAAgB;AAAA,EAC5C,IAAA,EAAM,gBAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA;AAAA,IAEL,SAAA,EAAW,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,GAAA;AAAI,GAC1C;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAO,OAAM,EAAG;AAC7B,IAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AACtB,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,IAAU,IAAK,EAAC;AAEvC,MAAA,MAAM,OAAgB,EAAC;AACvB,MAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KAA+B;AAC3C,QAAA,IAAI,CAAC,KAAA,EAAO;AACZ,QAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,KAAM;AACnB,UAAA,IAAI,CAAA,CAAE,IAAA,KAASwB,YAAA,EAAU,IAAA,CAAK,EAAE,QAAmB,CAAA;AAAA,eAC9C,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA,QAClB,CAAC,CAAA;AAAA,MACH,CAAA;AACA,MAAA,IAAA,CAAK,QAAmB,CAAA;AAExB,MAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,MAAA,MAAM,WAAW,KAAA,CAAM,SAAA;AACvB,MAAA,MAAM,GAAA,GAAM,CAAC,GAAA,KACXpB,KAAAA;AAAA,QACE,IAAA;AAAA,QACA;AAAA,UACE,GAAA,EAAK,OAAO,GAAG,CAAA,CAAA;AAAA,UACf,gCAAA,EAAkC,EAAA;AAAA,UAClC,aAAA,EAAe,MAAA;AAAA,UACf,OAAO,EAAE,KAAA,EAAO,qBAAqB,OAAA,EAAS,aAAA,EAAe,YAAY,QAAA;AAAS,SACpF;AAAA,QACA,QAAA,GAAW,QAAA,EAAS,GAAI,KAAA,CAAM;AAAA,OAChC;AAEF,MAAA,MAAM,QAAiB,EAAC;AACxB,MAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,KAAA,EAAO,CAAA,KAAM;AAEzB,QAAA,MAAM,MAAA,GAAS,MAAM,KAAA,GAAQ,CAAA;AAC7B,QAAA,MAAM,OAAA,GAAUA,KAAAA;AAAA,UACd,IAAA;AAAA,UACA;AAAA,YACE,GAAA,EAAK,QAAQ,CAAC,CAAA,CAAA;AAAA,YACd,2BAAA,EAA6B,EAAA;AAAA,YAC7B,2BAAA,EAA6B,SAAS,MAAA,GAAS,MAAA;AAAA,YAC/C,KAAA,EAAO,EAAE,OAAA,EAAS,aAAA,EAAe,YAAY,QAAA;AAAS,WACxD;AAAA;AAAA,UAEAA,KAAAA;AAAA,YACE,KAAA,CAAM,IAAA;AAAA,YACN,EAAE,GAAI,KAAA,CAAM,SAAS,EAAC,EAAI,WAAW,MAAA,EAAO;AAAA,YAC5C,KAAA,CAAM;AAAA;AACR,SACF;AACA,QAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,QAAA,IAAI,CAAC,MAAA,EAAQ,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,MAChC,CAAC,CAAA;AAED,MAAA,OAAOA,KAAAA;AAAA,QACL,KAAA;AAAA,QACA;AAAA,UACE,GAAG,KAAA;AAAA,UACH,YAAA,EAAc,EAAE,kBAAkB,CAAA;AAAA,UAClC,sBAAA,EAAwB;AAAA,SAC1B;AAAA,QACAA,KAAAA;AAAA,UACE,IAAA;AAAA,UACA;AAAA,YACE,KAAA,EAAO;AAAA,cACL,OAAA,EAAS,aAAA;AAAA,cACT,UAAA,EAAY,QAAA;AAAA,cACZ,GAAA,EAAK,2BAAA;AAAA,cACL,MAAA,EAAQ,GAAA;AAAA,cACR,OAAA,EAAS,GAAA;AAAA,cACT,SAAA,EAAW,MAAA;AAAA,cACX,QAAA,EAAU;AAAA;AACZ,WACF;AAAA,UACA;AAAA;AACF,OACF;AAAA,IACF,CAAA;AAAA,EACF;AACF,CAAC,CAAA;ACrFM,IAAM,qBAAqBJ,mBAAAA,CAAgB;AAAA,EAChD,IAAA,EAAM,oBAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,EAAA,EAAG;AAAA;AAAA,IAElC,SAAA,EAAW,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA;AAAM,GAC7C;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAO,OAAM,EAAG;AAC7B,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,OAAO,KAAA,CAAM,SAAA;AACnB,MAAA,MAAM,SAAA,GAAoC;AAAA,QACxC,KAAA,EAAO,OAAO,mBAAA,GAAsB,qBAAA;AAAA,QACpC,cAAA,EAAgB,MAAA;AAAA,QAChB,MAAA,EAAQ,IAAA,GAAO,SAAA,GAAY,KAAA,CAAM,OAAO,SAAA,GAAY;AAAA,OACtD;AAEA,MAAA,MAAM,SAAA,GAAY;AAAA,QAChB,GAAG,KAAA;AAAA,QACH,cAAA,EAAgB,OAAO,MAAA,GAAS,MAAA;AAAA,QAChC,4BAAA,EAA8B,EAAA;AAAA,QAC9B,KAAA,EAAO,EAAE,GAAG,SAAA,EAAW,GAAK,KAAA,CAAM,KAAA,IAAgD,EAAC;AAAG,OACxF;AAEA,MAAA,IAAI,KAAA,CAAM,IAAA,IAAQ,CAAC,IAAA,EAAM;AACvB,QAAA,OAAOI,KAAAA,CAAE,GAAA,EAAK,EAAE,GAAG,SAAA,EAAW,IAAA,EAAM,KAAA,CAAM,IAAA,EAAK,EAAG,KAAA,CAAM,OAAA,IAAW,CAAA;AAAA,MACrE;AACA,MAAA,OAAOA,KAAAA,CAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,CAAM,WAAW,CAAA;AAAA,IAC/C,CAAA;AAAA,EACF;AACF,CAAC,CAAA;;;AC3BM,IAAM,sBAAsBJ,mBAAAA,CAAgB;AAAA,EACjD,IAAA,EAAM,qBAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA;AAAA,IAEL,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA,EAA8B,UAAU,IAAA,EAAK;AAAA;AAAA,IAE5D,QAAA,EAAU,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA;AAAA,IAEzC,UAAA,EAAY,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA,IAC5C,SAAA,EAAW,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,GAAA;AAAI,GAC1C;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,CAAC,IAAA,EAAc,KAAA,KAAmB;AAAA,GAC5C;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,IAAA,EAAM,OAAM,EAAG;AAC5B,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,IAAM,KAAA,CAAM,cAAc,KAAA,CAAM,MAAA,KAAW,GAAI,OAAO,IAAA;AAE3E,MAAA,OAAOI,KAAAA;AAAA,QACL,cAAA;AAAA,QACA,EAAE,GAAG,KAAA,EAAO,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,QACvC;AAAA,UACE,SAAS,MACP,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAA,KAAM;AACrB,YAAA,MAAM,IAAA,GAAO,CAAA,KAAM,KAAA,CAAM,MAAA,GAAS,CAAA;AAClC,YAAA,MAAM,UAAmB,EAAC;AAC1B,YAAA,IAAI,KAAA,CAAM,QAAA,IAAY,IAAA,CAAK,IAAA,EAAM;AAC/B,cAAA,OAAA,CAAQ,IAAA;AAAA,gBACNA,KAAAA,CAAE,QAAA,EAAU,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,EAAE,eAAA,EAAiB,KAAA,IAAS;AAAA,eAC9E;AAAA,YACF;AACA,YAAA,OAAA,CAAQ,IAAA,CAAKA,KAAAA,CAAE,MAAA,EAAQ,IAAA,CAAK,KAAK,CAAC,CAAA;AAClC,YAAA,OAAOA,KAAAA;AAAA,cACL,kBAAA;AAAA,cACA;AAAA,gBACE,KAAK,IAAA,CAAK,GAAA;AAAA,gBACV,uBAAA,EAAyB,EAAA;AAAA,gBACzB,KAAA,EAAO;AAAA,kBACL,OAAA,EAAS,aAAA;AAAA,kBACT,UAAA,EAAY,QAAA;AAAA,kBACZ,MAAA,EAAQ,OAAO,SAAA,GAAY;AAAA,iBAC7B;AAAA,gBACA,OAAA,EAAS,OAAO,MAAA,GAAY,MAAM,KAAK,QAAA,EAAU,IAAA,CAAK,KAAK,IAAI;AAAA,eACjE;AAAA,cACA,EAAE,OAAA,EAAS,MAAM,OAAA;AAAQ,aAC3B;AAAA,UACF,CAAC;AAAA;AACL,OACF;AAAA,IACF,CAAA;AAAA,EACF;AACF,CAAC;ACjCM,SAAS,WAAW,GAAA,EAAgC;AACzD,EAAA,MAAM,KAAA,GAAQF,OAAAA,CAAI,GAAA,CAAI,QAAA,EAAU,CAAA;AAChC,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,SAAA,CAAU,CAAC,IAAA,KAAS;AAC1C,IAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAAA,EAChB,CAAC,CAAA;AACD,EAAAO,oBAAgB,WAAW,CAAA;AAE3B,EAAA,OAAO;AAAA,IACL,IAAA,EAAMR,YAAAA,CAAS,MAAM,KAAA,CAAM,MAAM,IAAI,CAAA;AAAA,IACrC,SAAA,EAAWA,YAAAA,CAAS,MAAM,KAAA,CAAM,MAAM,SAAS,CAAA;AAAA,IAC/C,SAAA,EAAWA,YAAAA,CAAS,MAAM,KAAA,CAAM,MAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,GAAA,CAAI,QAAA,CAAS,CAAA,CAAE,GAAG,CAAC,CAAC,CAAA;AAAA,IAC1E,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,UAAU,GAAA,CAAI,QAAA;AAAA,IACd,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,aAAa,GAAA,CAAI,WAAA;AAAA,IACjB,UAAU,GAAA,CAAI,QAAA;AAAA,IACd,WAAW,GAAA,CAAI,SAAA;AAAA,IACf,YAAY,GAAA,CAAI,UAAA;AAAA,IAChB,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,WAAW,GAAA,CAAI,SAAA;AAAA,IACf,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,UAAU,GAAA,CAAI;AAAA,GAChB;AACF;ACpCO,SAAS,UAAA,CACd,OAAA,EACA,OAAA,GAAuC,EAAC,EAIxC;AACA,EAAA,MAAM,KAAA,GAAQC,OAAAA,CAAI,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA;AAC1C,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,KAAA,CAAM,SAAA,CAAU,CAAC,IAAA,KAAS;AACpD,IAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAAA,EAChB,CAAC,CAAA;AACD,EAAAuB,kBAAA;AAAA,IACE,MAAM;AAEJ,MAAA,WAAA,EAAY;AACZ,MAAA,IAAI,OAAA,CAAQ,aAAA,KAAkB,KAAA,EAAO,OAAA,CAAQ,IAAA,EAAK;AAAA,IACpD,CAAA;AAAA;AAAA;AAAA;AAAA,IAIA;AAAA,GACF;AACA,EAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAK;AACrC;;;AC7BO,IAAM,kBAAA,GAAoD,OAAO,cAAc,CAAA;;;ACW/E,IAAM,eAAezB,mBAAAA,CAAgB;AAAA,EAC1C,IAAA,EAAM,cAAA;AAAA,EACN,KAAA,EAAO;AAAA,IACL,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,MAAA,EAAU;AAAA,IAC1C,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA,IAC7C,SAAA,EAAW,EAAE,IAAA,EAAM,MAAA,EAA+B,SAAS,cAAA,EAAe;AAAA,IAC1E,MAAA,EAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAAE,GACrC;AAAA,EACA,KAAA,EAAO;AAAA,IACL,aAAA,EAAe,CAAC,MAAA,KAAoB;AAAA,GACtC;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAO,MAAK,EAAG;AAC5B,IAAA,MAAM,YAAA,GAAeC,YAAAA,CAAS,MAAM,KAAA,CAAM,SAAS,MAAS,CAAA;AAC5D,IAAA,MAAM,OAAA,GAAUyB,0BAAA,CAAsB,KAAA,CAAM,WAAA,GAAc,SAAS,QAAQ,CAAA;AAC3E,IAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,WAAW,OAAO,CAAA;AAE1C,IAAAvB,SAAAA;AAAA,MACE,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,CAAC,KAAA,KAAU;AACT,QAAA,IAAI,UAAU,MAAA,EAAW;AACzB,QAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,KAAA,CAAM,KAAA,KAAU,MAAA;AAC5C,QAAA,IAAI,SAAS,CAAC,aAAA,OAAoB,EAAE,IAAA,EAAM,QAAQ,CAAA;AAClD,QAAA,IAAI,CAAC,KAAA,IAAS,aAAA,OAAoB,EAAE,IAAA,EAAM,SAAS,CAAA;AAAA,MACrD,CAAA;AAAA,MACA,EAAE,WAAW,IAAA;AAAK,KACpB;AAEA,IAAA,MAAM,IAAA,GAAOF,YAAAA;AAAA,MAAS,MACpB,aAAa,KAAA,GAAQ,OAAA,CAAQ,MAAM,IAAI,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,KAAA,KAAU;AAAA,KACnE;AAEA,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAmB;AAClC,MAAA,IAAI,CAAC,aAAa,KAAA,EAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,GAAQ,MAAA,GAAS,OAAA,EAAS,CAAA;AAChE,MAAA,IAAA,CAAK,eAAe,KAAK,CAAA;AAAA,IAC3B,CAAA;AAEA,IAAAS,YAAQ,kBAAA,EAAoB;AAAA,MAC1B,IAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA,EAAYR,QAAI,IAAI,CAAA;AAAA,MACpB,UAAA,EAAYA,QAAI,IAAI,CAAA;AAAA,MACpB,WAAWyB,SAAA,EAAM;AAAA,MACjB,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,QAAQ,KAAA,CAAM;AAAA,KACf,CAAA;AAED,IAAA,OAAO,MAAM,MAAM,OAAA,IAAU;AAAA,EAC/B;AACF,CAAC,CAAA;ACpED,SAAS,mBAAmB,GAAA,EAAsB;AAChD,EAAA,OAAO,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,IAAK,GAAA,CAAI,MAAA,GAAS,CAAA,IAAK,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,CAAC,CAAC,CAAA;AAC7E;AAOO,SAAS,eAAe,IAAA,EAA6C;AAC1E,EAAA,OAAO,CAAC,EAAA,KAAgB;AACtB,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,IAAI,KAAK,IAAA,EAAM;AACf,MAAA,IAAI,OAAO,MAAM,UAAA,EAAY;AAC1B,QAAC,EAA4B,EAAE,CAAA;AAAA,MAClC,CAAA,MAAA,IAAW,OAAO,CAAA,KAAM,QAAA,IAAY,WAAY,CAAA,EAAc;AAC3D,QAAC,EAAyB,KAAA,GAAQ,EAAA;AAAA,MACrC;AAAA,IACF;AAAA,EACF,CAAA;AACF;AAcO,SAAS,cAAA,CACd,QACA,KAAA,EACyB;AACzB,EAAA,MAAM,GAAA,GAA+B,EAAE,GAAG,KAAA,EAAM;AAEhD,EAAA,KAAA,MAAW,OAAO,MAAA,EAAQ;AACxB,IAAA,MAAM,SAAA,GAAY,OAAO,GAAG,CAAA;AAC5B,IAAA,MAAM,QAAA,GAAW,MAAM,GAAG,CAAA;AAE1B,IAAA,IAAI,kBAAA,CAAmB,GAAG,CAAA,EAAG;AAC3B,MAAA,IAAI,OAAO,SAAA,KAAc,UAAA,IAAc,OAAO,aAAa,UAAA,EAAY;AACrE,QAAA,GAAA,CAAI,GAAG,CAAA,GAAIC,yBAAA;AAAA,UACT,SAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF,CAAA,MAAA,IAAW,OAAO,SAAA,KAAc,UAAA,IAAc,YAAY,IAAA,EAAM;AAC9D,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,SAAA;AAAA,MACb;AAAA,IAEF,CAAA,MAAA,IAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,SAAA,IAAa,IAAA,IAAQ,QAAA,IAAY,IAAA,EAAM;AACzC,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,WAAA,CAAY,SAAA,EAAW,QAAQ,CAAA;AAAA,MAC5C,CAAA,MAAA,IAAW,aAAa,IAAA,EAAM;AAC5B,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,SAAA;AAAA,MACb;AAAA,IAEF,CAAA,MAAA,IAAW,QAAQ,OAAA,EAAS;AAC1B,MAAA,MAAM,MAAA,GAAS,CAAC,SAAA,EAAW,QAAQ,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,EAAK;AACpE,MAAA,IAAI,MAAA,EAAQ,GAAA,CAAI,GAAG,CAAA,GAAI,MAAA;AAAA,IACzB,CAAA,MAAA,IAAW,QAAQ,OAAA,EAAS;AAC1B,MAAA,IAAI,aAAa,QAAA,EAAU;AACzB,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,EAAE,GAAI,SAAA,EAAkC,GAAI,QAAA,EAAgC;AAAA,MACzF;AAAA,IACF,CAAA,MAAA,IAAW,EAAE,GAAA,IAAO,KAAA,CAAA,EAAQ;AAC1B,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,SAAA;AAAA,IACb;AAAA,EAEF;AAEA,EAAA,OAAO,GAAA;AACT;AAmBwB5B,mBAAAA,CAAgB;AAAA,EACtC,IAAA,EAAM,UAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,CAAM,CAAA,EAAG,EAAE,KAAA,EAAO,OAAM,EAAG;AACzB,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,QAAA,GAAW,MAAM,OAAA,IAAU;AACjC,MAAA,MAAM,IAAA,GAAO,iBAAiB,QAAQ,CAAA;AACtC,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,GAAA,EAAK,aAAa,YAAA,EAAc;AAC5E,UAAA,OAAA,CAAQ,KAAK,kEAAkE,CAAA;AAAA,QACjF;AACA,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,MAAA,GAAS,cAAA;AAAA,QACb,KAAA;AAAA,QACC,IAAA,CAAK,SAAS;AAAC,OAClB;AACA,MAAA,OAAOI,KAAAA,CAAE,IAAA,CAAK,IAAA,EAAgB,MAAA,EAAQ,KAAK,QAA8B,CAAA;AAAA,IAC3E,CAAA;AAAA,EACF;AACF,CAAC;AAOM,SAAS,iBAAiB,QAAA,EAA6C;AAC5E,EAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,MAAA,KAAW,GAAG,OAAO,IAAA;AAE/C,EAAA,IAAI,KAAA,GAAsB,IAAA;AAC1B,EAAA,IAAI,UAAA,GAAa,CAAA;AAEjB,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KAAmB;AAC/B,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,IAAI,IAAA,CAAK,SAASoB,YAAAA,EAAU;AAC1B,QAAA,MAAM,YAAA,GAAe,MAAM,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,GAAK,IAAA,CAAK,WAAuB,EAAC;AAClF,QAAA,IAAA,CAAK,YAAY,CAAA;AACjB,QAAA;AAAA,MACF;AACA,MAAA,IACE,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,IACrB,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,IACrB,OAAO,IAAA,CAAK,IAAA,KAAS,UAAA,EACrB;AACA,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,UAAA,IAAc,CAAA;AAAA,QAChB,CAAA,MAAO;AACL,UAAA,KAAA,GAAQ,IAAA;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAA,IAAA,CAAK,QAAQ,CAAA;AAEb,EAAA,IACE,UAAA,GAAa,MACZ,OAAO,OAAA,KAAY,eAAe,OAAA,CAAQ,GAAA,EAAK,aAAa,YAAA,CAAA,EAC7D;AACA,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,uBAAA,EAA0B,UAAA,GAAa,CAAC,CAAA,uCAAA,CAAyC,CAAA;AAAA,EAChG;AAEA,EAAA,OAAO,KAAA;AACT;;;AC7JO,IAAM,sBAAsBxB,mBAAAA,CAAgB;AAAA,EACjD,IAAA,EAAM,qBAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA;AAAM,GAC3C;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAO,OAAM,EAAG;AAC7B,IAAA,MAAM,GAAA,GAAMY,WAAO,kBAAkB,CAAA;AACrC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,MAAM,oEAAoE,CAAA;AAAA,IACtF;AAEA,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAsB;AACrC,MAAA,IAAI,MAAM,gBAAA,EAAkB;AAC5B,MAAA,GAAA,CAAI,OAAA,CAAQ,CAAC,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAAA,IAC7B,CAAA;AAEA,IAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAyB;AAE1C,MAAA,IAAI,KAAA,CAAM,QAAQ,WAAA,IAAe,KAAA,CAAM,QAAQ,OAAA,IAAW,KAAA,CAAM,QAAQ,GAAA,EAAK;AAC3E,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,GAAA,CAAI,QAAQ,IAAI,CAAA;AAAA,MAClB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,UAAA,GAAa,CAAC,EAAA,KAAgB;AAClC,MAAA,GAAA,CAAI,UAAA,CAAW,QAAS,EAAA,IAAM,IAAA;AAAA,IAChC,CAAA;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,YAAA,GAAwC;AAAA,QAC5C,eAAA,EAAiB,MAAA;AAAA,QACjB,eAAA,EAAiB,GAAA,CAAI,IAAA,CAAK,KAAA,GAAQ,MAAA,GAAS,OAAA;AAAA,QAC3C,iBAAiB,GAAA,CAAI,SAAA;AAAA,QACrB,YAAA,EAAc,GAAA,CAAI,IAAA,CAAK,KAAA,GAAQ,MAAA,GAAS,QAAA;AAAA,QACxC,OAAA;AAAA,QACA,SAAA,EAAW,SAAA;AAAA,QACX,GAAA,EAAK;AAAA,OACP;AAEA,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,MAAM,IAAA,GAAO,gBAAA,CAAiB,KAAA,CAAM,OAAA,IAAW,CAAA;AAC/C,QAAA,IAAI,CAAC,IAAA,EAAM;AACT,UAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,OAAA,CAAQ,GAAA,EAAK,aAAa,YAAA,EAAc;AAC5E,YAAA,OAAA,CAAQ,KAAK,yEAAyE,CAAA;AAAA,UACxF;AACA,UAAA,OAAO,IAAA;AAAA,QACT;AACA,QAAA,MAAM,MAAA,GAAS,cAAA;AAAA,UACb,EAAE,GAAG,YAAA,EAAc,GAAG,KAAA,EAAM;AAAA,UAC3B,IAAA,CAAK,SAAS;AAAC,SAClB;AACA,QAAA,OAAOR,KAAAA,CAAE,IAAA,CAAK,IAAA,EAAgB,MAAA,EAAQ,KAAK,QAA8B,CAAA;AAAA,MAC3E;AAEA,MAAA,OAAOA,KAAAA,CAAE,QAAA,EAAU,EAAE,IAAA,EAAM,QAAA,EAAU,GAAG,KAAA,EAAO,GAAG,YAAA,EAAa,EAAG,KAAA,CAAM,OAAA,IAAW,CAAA;AAAA,IACrF,CAAA;AAAA,EACF;AACF,CAAC,CAAA;AC+BM,SAAS,YAAY,OAAA,EAAgD;AAC1E,EAAA,MAAM,CAAA,GAAIF,QAAI,CAAC,CAAA;AACf,EAAA,MAAM,CAAA,GAAIA,QAAI,CAAC,CAAA;AAGf,EAAA,MAAM,UAAA,GAAaA,QAAI,KAAK,CAAA;AAC5B,EAAA,MAAM,QAAA,GAAWA,OAAAA,CAAc,OAAA,CAAQ,QAAA,IAAY,UAAU,CAAA;AAC7D,EAAA,MAAM,cAAA,GAAiBA,OAAAA,CAAe,OAAA,CAAQ,SAAA,IAAa,QAAQ,CAAA;AACnE,EAAA,MAAM,SAASA,OAAAA,EAAwB;AACvC,EAAA,MAAM,SAASA,OAAAA,EAAwB;AAEvC,EAAA,MAAM,UAAA,GAAaoB,cAAAA,CAAyB,EAAE,CAAA;AAC9C,EAAA,iBAAA,EAAkB;AAElB,EAAA,SAAS,iBAAA,GAAoB;AAC3B,IAAA,MAAM,KAAmB,EAAC;AAC1B,IAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAW,EAAA,CAAG,KAAKO,UAAA,CAAiB,OAAA,CAAQ,MAAM,CAAC,CAAA;AAC1E,IAAA,IAAI,QAAQ,IAAA,KAAS,KAAA,EAAO,EAAA,CAAG,IAAA,CAAKC,UAAgB,CAAA;AACpD,IAAA,IAAI,OAAA,CAAQ,KAAA,KAAU,KAAA,EAAO,EAAA,CAAG,IAAA,CAAKC,UAAgB,EAAE,OAAA,EAAS,CAAA,EAAG,CAAC,CAAA;AACpE,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,MAAM,UAAU,OAAO,OAAA,CAAQ,IAAA,KAAS,QAAA,GAAW,QAAQ,IAAA,GAAO,CAAA;AAClE,MAAA,EAAA,CAAG,IAAA;AAAA,QACDC,QAAA,CAAe;AAAA,UACb,OAAA;AAAA,UACA,KAAA,CAAM,EAAE,cAAA,EAAgB,eAAA,EAAiB,UAAS,EAAG;AACnD,YAAA,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,KAAA,EAAO;AAAA,cACrC,QAAA,EAAU,GAAG,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,KAAA,CAAM,cAAc,CAAC,CAAC,CAAA,EAAA,CAAA;AAAA,cACpD,SAAA,EAAW,GAAG,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,KAAA,CAAM,eAAe,CAAC,CAAC,CAAA,EAAA;AAAA,aACvD,CAAA;AAAA,UACH;AAAA,SACD;AAAA,OACH;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,KAAA,EAAO,KAAA,EAAO,EAAA,CAAG,IAAA,CAAKC,SAAA,CAAgB,EAAE,OAAA,EAAS,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,CAAC,CAAA;AACnF,IAAA,IAAI,QAAQ,UAAA,EAAY,EAAA,CAAG,IAAA,CAAK,GAAG,QAAQ,UAAU,CAAA;AACrD,IAAA,UAAA,CAAW,KAAA,GAAQ,EAAA;AAAA,EACrB;AAEA,EAAA,IAAI,iBAAA,GAAyC,IAAA;AAI7C,EAAA,IAAI,KAAA,GAAQ,CAAA;AAEZ,EAAA,eAAe,MAAA,GAAS;AACtB,IAAA,MAAM,CAAA,GAAI,QAAQ,MAAA,CAAO,KAAA;AACzB,IAAA,MAAM,CAAA,GAAI,QAAQ,QAAA,CAAS,KAAA;AAC3B,IAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACd,IAAA,iBAAA,EAAkB;AAClB,IAAA,MAAM,QAAQ,EAAE,KAAA;AAChB,IAAA,MAAM,MAAA,GAAS,MAAMC,mBAAA,CAAgB,CAAA,EAAG,CAAA,EAAG;AAAA,MACzC,SAAA,EAAW,QAAQ,SAAA,IAAa,QAAA;AAAA,MAChC,UAAU,QAAA,CAAS,KAAA;AAAA,MACnB,YAAY,UAAA,CAAW;AAAA,KACxB,CAAA;AACD,IAAA,IAAI,UAAU,KAAA,EAAO;AACrB,IAAA,CAAA,CAAE,QAAQ,MAAA,CAAO,CAAA;AACjB,IAAA,CAAA,CAAE,QAAQ,MAAA,CAAO,CAAA;AACjB,IAAA,UAAA,CAAW,KAAA,GAAQ,IAAA;AACnB,IAAA,cAAA,CAAe,QAAQ,MAAA,CAAO,SAAA;AAC9B,IAAA,MAAM,SAAA,GAAY,OAAO,cAAA,CAAe,KAAA;AACxC,IAAA,MAAA,CAAO,QAAQ,SAAA,EAAW,CAAA;AAC1B,IAAA,MAAA,CAAO,QAAQ,SAAA,EAAW,CAAA;AAAA,EAC5B;AAEA,EAAA/B,SAAAA;AAAA,IACE,CAAC,OAAA,CAAQ,IAAA,EAAM,OAAA,CAAQ,MAAA,EAAQ,QAAQ,QAAQ,CAAA;AAAA,IAC/C,CAAC,CAAC,MAAA,EAAQ,QAAA,EAAU,UAAU,CAAA,KAAM;AAClC,MAAA,iBAAA,IAAoB;AACpB,MAAA,iBAAA,GAAoB,IAAA;AACpB,MAAA,KAAA,EAAA;AACA,MAAA,IAAI,MAAA,IAAU,YAAY,UAAA,EAAY;AACpC,QAAA,UAAA,CAAW,KAAA,GAAQ,KAAA;AACnB,QAAA,iBAAA,GAAoBgC,cAAA,CAAW,QAAA,EAAU,UAAA,EAAY,MAAM;AACzD,UAAA,KAAK,MAAA,EAAO;AAAA,QACd,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA,EAAE,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAW,IAAA;AAAK,GACnC;AAEA,EAAAV,mBAAe,MAAM;AACnB,IAAA,iBAAA,IAAoB;AACpB,IAAA,iBAAA,GAAoB,IAAA;AACpB,IAAA,KAAA,EAAA;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,QAAA,GAAgE;AAAA,IACpE,GAAA,EAAK,QAAA;AAAA,IACL,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,OAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACT;AACA,EAAA,MAAM,SAAA,GAAYxB,YAAAA;AAAA,IAChB,MACE,SAAS,cAAA,CAAe,KAAA,CAAM,MAAM,GAAG,CAAA,CAAE,CAAC,CAAC;AAAA,GAE/C;AAEA,EAAA,MAAM,cAAA,GAAiBA,aAAiC,OAAO;AAAA,IAC7D,UAAU,QAAA,CAAS,KAAA;AAAA,IACnB,GAAA,EAAK,GAAA;AAAA,IACL,IAAA,EAAM,GAAA;AAAA,IACN,SAAA,EAAW,CAAA,YAAA,EAAe,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,KAAK,CAAC,CAAA,IAAA,EAAO,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,KAAK,CAAC,CAAA,MAAA,CAAA;AAAA,IACvE,KAAA,EAAO,aAAA;AAAA;AAAA;AAAA;AAAA,IAIP,UAAA,EAAY,UAAA,CAAW,KAAA,GAAQ,SAAA,GAAY;AAAA,GAC7C,CAAE,CAAA;AAEF,EAAA,OAAO,EAAE,GAAG,CAAA,EAAG,QAAA,EAAU,gBAAgB,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAC7F;AChLO,SAAS,WAAW,OAAA,EAAkC;AAC3D,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,KAAW,KAAA;AAClC,EAAA,MAAM,kBAAA,GAAqB,QAAQ,kBAAA,KAAuB,KAAA;AAE1D,EAAA,MAAM,UAAA,GAAa,CAAC,MAAA,KAAwC;AAC1D,IAAA,IAAI,CAAC,MAAA,IAAU,EAAE,MAAA,YAAkB,OAAO,OAAO,KAAA;AACjD,IAAA,KAAA,MAAW,CAAA,IAAK,QAAQ,OAAA,EAAS;AAC/B,MAAA,MAAM,KAAK,CAAA,CAAE,KAAA;AACb,MAAA,IAAI,CAAC,EAAA,EAAI;AACT,MAAA,IAAI,OAAO,MAAA,IAAU,EAAA,CAAG,QAAA,CAAS,MAAM,GAAG,OAAO,IAAA;AAAA,IACnD;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAwB;AAC7C,IAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO;AAC5B,IAAA,IAAI,UAAA,CAAW,KAAA,CAAM,MAAM,CAAA,EAAG;AAC9B,IAAA,IAAI,OAAA,CAAQ,gBAAA,GAAmB,KAAA,CAAM,MAAM,CAAA,EAAG;AAC9C,IAAA,OAAA,CAAQ,SAAA,EAAU;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,IAAA,IAAI,CAAC,OAAA,CAAQ,OAAA,CAAQ,KAAA,EAAO;AAC5B,IAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,EAAU;AAC1B,MAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,MAAA,OAAA,CAAQ,SAAA,EAAU;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,QAAA,CAAS,gBAAA,CAAiB,aAAA,EAAe,aAAA,EAAe,IAAI,CAAA;AAAA,IAC9D;AACA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAAA,IAChD;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,IAAA,QAAA,CAAS,mBAAA,CAAoB,aAAA,EAAe,aAAA,EAAe,IAAI,CAAA;AAC/D,IAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,SAAS,CAAA;AAAA,EACnD,CAAA;AAEA,EAAAE,SAAAA;AAAA,IACE,OAAA,CAAQ,OAAA;AAAA,IACR,CAAC,OAAA,KAAY;AACX,MAAA,MAAA,EAAO;AACP,MAAA,IAAI,SAAS,MAAA,EAAO;AAAA,IACtB,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AAEA,EAAAsB,mBAAe,MAAM,CAAA;AACvB;;;ACzEO,IAAM,mBAAmBzB,mBAAAA,CAAgB;AAAA,EAC9C,IAAA,EAAM,kBAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA,IACL,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,CAAC,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAA;AAAA,MAC9B,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,KAAA,EAAO,OAAM,EAAG;AAC7B,IAAA,MAAM,GAAA,GAAMY,WAAO,kBAAkB,CAAA;AACrC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAAA,IACnF;AAEA,IAAA,MAAM,QAAA,GAAWV,QAAwB,IAAI,CAAA;AAC7C,IAAAC,SAAAA,CAAM,QAAA,EAAU,CAAC,EAAA,KAAO;AACtB,MAAA,GAAA,CAAI,WAAW,KAAA,GAAQ,EAAA;AAAA,IACzB,CAAC,CAAA;AAED,IAAA,MAAM,EAAE,cAAA,EAAe,GAAI,WAAA,CAAY;AAAA,MACrC,QAAQ,GAAA,CAAI,UAAA;AAAA,MACZ,QAAA,EAAU,QAAA;AAAA,MACV,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,WAAW,GAAA,CAAI,SAAA;AAAA,MACf,QAAQ,GAAA,CAAI;AAAA,KACb,CAAA;AAED,IAAA,UAAA,CAAW;AAAA,MACT,SAAS,GAAA,CAAI,IAAA;AAAA,MACb,OAAA,EAAS,CAAC,GAAA,CAAI,UAAA,EAAY,QAAQ,CAAA;AAAA,MAClC,SAAA,EAAW,MAAM,GAAA,CAAI,OAAA,CAAQ,KAAK;AAAA,KACnC,CAAA;AAGD,IAAAA,SAAAA,CAAM,GAAA,CAAI,IAAA,EAAM,OAAO,IAAA,KAAS;AAC9B,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAMe,YAAAA,EAAS;AACf,QAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,EAAO,gBAAA,CAA8B,mBAAmB,CAAA;AAC/E,QAAA,KAAA,GAAQ,CAAC,GAAG,KAAA,EAAM;AAAA,MACpB,CAAA,MAAO;AAEL,QAAA,GAAA,CAAI,UAAA,CAAW,OAAO,KAAA,IAAQ;AAAA,MAChC;AAAA,IACF,CAAC,CAAA;AAID,IAAA,MAAM,SAAA,GAA6E;AAAA,MACjF,MAAA,EAAQ,EAAA;AAAA,MACR,KAAA,EAAO;AAAA,KACT;AAEA,IAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,MAAA,IAAI,CAAC,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO;AACrB,MAAA,MAAM,QAAQ,KAAA,CAAM,IAAA;AAAA,QAClB,SAAS,KAAA,EAAO,gBAAA;AAAA,UACd;AAAA,aACG;AAAC,OACR;AACA,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACxB,MAAA,MAAM,UAAU,QAAA,CAAS,aAAA;AACzB,MAAA,MAAM,KAAA,GAAQ,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,EAAA;AACjD,MAAA,QAAQ,MAAM,GAAA;AAAK,QACjB,KAAK,WAAA,EAAa;AAChB,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,KAAA,CAAMkB,sBAAiB,KAAA,EAAO,CAAA,EAAG,MAAM,MAAM,CAAC,GAAG,KAAA,EAAM;AACvD,UAAA;AAAA,QACF;AAAA,QACA,KAAK,SAAA,EAAW;AACd,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,KAAA,CAAMA,sBAAiB,KAAA,EAAO,EAAA,EAAI,MAAM,MAAM,CAAC,GAAG,KAAA,EAAM;AACxD,UAAA;AAAA,QACF;AAAA,QACA,KAAK,MAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,KAAA,CAAM,CAAC,GAAG,KAAA,EAAM;AAChB,UAAA;AAAA,QACF,KAAK,KAAA;AACH,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,EAAG,KAAA,EAAM;AAC/B,UAAA;AAAA,QACF,KAAK,KAAA;AAEH,UAAA,GAAA,CAAI,QAAQ,KAAK,CAAA;AACjB,UAAA;AAAA,QACF,SAAS;AAGP,UAAA,IAAI,KAAA,CAAM,GAAA,CAAI,MAAA,KAAW,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,IAAW,CAAC,KAAA,CAAM,OAAA,IAAW,CAAC,KAAA,CAAM,MAAA,EAAQ;AAC/E,YAAA,SAAA,CAAU,UAAU,KAAA,CAAM,GAAA;AAC1B,YAAA,IAAI,SAAA,CAAU,KAAA,EAAO,YAAA,CAAa,SAAA,CAAU,KAAK,CAAA;AACjD,YAAA,SAAA,CAAU,KAAA,GAAQ,WAAW,MAAM;AACjC,cAAA,SAAA,CAAU,MAAA,GAAS,EAAA;AAAA,YACrB,GAAG,GAAG,CAAA;AACN,YAAA,MAAM,KAAA,GAAQC,mBAAA;AAAA,cACZ,MAAM,GAAA,CAAI,CAAC,EAAA,KAAO,EAAA,CAAG,eAAe,EAAE,CAAA;AAAA,cACtC,SAAA,CAAU,MAAA;AAAA,cACV;AAAA,aACF;AACA,YAAA,IAAI,SAAS,CAAA,EAAG;AACd,cAAA,KAAA,CAAM,cAAA,EAAe;AACrB,cAAA,KAAA,CAAM,KAAK,GAAG,KAAA,EAAM;AAAA,YACtB;AAAA,UACF;AAAA,QACF;AAAA;AACF,IACF,CAAA;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,CAAC,GAAA,CAAI,IAAA,CAAK,KAAA,EAAO,OAAO,IAAA;AAC5B,MAAA,MAAM,QAAA,GAAWjC,KAAAA;AAAA,QACf,KAAA;AAAA,QACA;AAAA,UACE,GAAG,KAAA;AAAA,UACH,GAAA,EAAK,CAAC,EAAA,KAAgB;AACpB,YAAA,QAAA,CAAS,QAAS,EAAA,IAAM,IAAA;AAAA,UAC1B,CAAA;AAAA,UACA,IAAI,GAAA,CAAI,SAAA;AAAA,UACR,IAAA,EAAM,MAAA;AAAA,UACN,QAAA,EAAU,EAAA;AAAA,UACV,yBAAA,EAA2B,EAAA;AAAA,UAC3B,YAAA,EAAc,MAAA;AAAA,UACd,SAAA,EAAW,SAAA;AAAA,UACX,KAAA,EAAO;AAAA,YACL,GAAG,cAAA,CAAe,KAAA;AAAA,YAClB,UAAA,EAAY,8BAAA;AAAA,YACZ,KAAA,EAAO,wBAAA;AAAA,YACP,MAAA,EAAQ,8BAAA;AAAA,YACR,YAAA,EAAc,uBAAA;AAAA,YACd,OAAA,EAAS,wBAAA;AAAA,YACT,SAAA,EAAW,uBAAA;AAAA,YACX,QAAA,EAAU,OAAA;AAAA,YACV,OAAA,EAAS,MAAA;AAAA,YACT,MAAA,EAAQ,MAAA;AAAA,YACR,GAAK,KAAA,CAAM,KAAA,IAAgD;AAAC;AAC9D,SACF;AAAA,QACA,MAAM,OAAA;AAAU,OAClB;AACA,MAAA,IAAI,KAAA,CAAM,QAAA,KAAa,KAAA,EAAO,OAAO,QAAA;AACrC,MAAA,OAAOA,KAAAA,CAAEkC,cAAU,EAAE,EAAA,EAAI,MAAM,QAAA,EAAiC,EAAG,CAAC,QAAQ,CAAC,CAAA;AAAA,IAC/E,CAAA;AAAA,EACF;AACF,CAAC,CAAA;ACnJM,IAAM,mBAAmBtC,mBAAAA,CAAgB;AAAA,EAC9C,IAAA,EAAM,kBAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA;AAAA,IAE1C,QAAA,EAAU,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA;AAAM,GAC5C;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,CAAC,MAAA,KAAkB;AAAA,GAC7B;AAAA,EACA,MAAM,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,EAAO,MAAK,EAAG;AACnC,IAAA,MAAM,GAAA,GAAMY,WAAO,kBAAkB,CAAA;AACrC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,MAAM,qEAAqE,CAAA;AAAA,IACvF;AAEA,IAAA,MAAM,OAAA,GAAUV,QAAI,KAAK,CAAA;AAEzB,IAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KAAiB;AAC7B,MAAA,IAAI,MAAM,QAAA,EAAU;AACpB,MAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AACpB,MAAA,IAAI,CAAC,KAAA,CAAM,QAAA,EAAU,GAAA,CAAI,QAAQ,KAAK,CAAA;AAAA,IACxC,CAAA;AAEA,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAAsB;AACrC,MAAA,IAAI,MAAM,gBAAA,EAAkB;AAC5B,MAAA,IAAA,CAAK,KAAK,CAAA;AAAA,IACZ,CAAA;AAEA,IAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,OAAA,IAAW,KAAA,CAAM,QAAQ,GAAA,EAAK;AAC9C,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,IAAA,CAAK,KAAK,CAAA;AAAA,MACZ;AAAA,IACF,CAAA;AAEA,IAAA,OAAO,MACLE,KAAAA;AAAA,MACE,KAAA;AAAA,MACA;AAAA,QACE,GAAG,KAAA;AAAA,QACH,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU,KAAA,CAAM,QAAA,GAAW,EAAA,GAAK,CAAA;AAAA,QAChC,eAAA,EAAiB,KAAA,CAAM,QAAA,GAAW,MAAA,GAAS,MAAA;AAAA,QAC3C,yBAAA,EAA2B,EAAA;AAAA,QAC3B,eAAA,EAAiB,KAAA,CAAM,QAAA,GAAW,EAAA,GAAK,MAAA;AAAA,QACvC,OAAA;AAAA,QACA,SAAA,EAAW,SAAA;AAAA,QACX,cAAA,EAAgB,MAAO,OAAA,CAAQ,KAAA,GAAQ,IAAA;AAAA,QACvC,cAAA,EAAgB,MAAO,OAAA,CAAQ,KAAA,GAAQ,KAAA;AAAA,QACvC,OAAA,EAAS,MAAO,OAAA,CAAQ,KAAA,GAAQ,IAAA;AAAA,QAChC,MAAA,EAAQ,MAAO,OAAA,CAAQ,KAAA,GAAQ,KAAA;AAAA,QAC/B,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,GAAA,EAAK,oBAAA;AAAA,UACL,OAAA,EAAS,oDAAA;AAAA,UACT,YAAA,EAAc,uBAAA;AAAA,UACd,MAAA,EAAQ,KAAA,CAAM,QAAA,GAAW,aAAA,GAAgB,SAAA;AAAA,UACzC,OAAA,EAAS,KAAA,CAAM,QAAA,GAAW,KAAA,GAAQ,GAAA;AAAA,UAClC,YACE,OAAA,CAAQ,KAAA,IAAS,CAAC,KAAA,CAAM,WAAW,2BAAA,GAA8B,aAAA;AAAA,UACnE,KAAA,EAAO,SAAA;AAAA,UACP,OAAA,EAAS,MAAA;AAAA,UACT,QAAA,EAAU,gCAAA;AAAA,UACV,UAAA,EAAY,4BAAA;AAAA,UACZ,GAAK,KAAA,CAAM,KAAA,IAAgD;AAAC;AAC9D,OACF;AAAA,MACA,MAAM,OAAA;AAAU,KAClB;AAAA,EACJ;AACF,CAAC,CAAA;AAGM,IAAM,wBAAwBJ,mBAAAA,CAAgB;AAAA,EACnD,IAAA,EAAM,uBAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,CAAM,CAAA,EAAG,EAAE,KAAA,EAAM,EAAG;AAClB,IAAA,OAAO,MACLI,MAAE,KAAA,EAAO;AAAA,MACP,GAAG,KAAA;AAAA,MACH,IAAA,EAAM,WAAA;AAAA,MACN,8BAAA,EAAgC,EAAA;AAAA,MAChC,KAAA,EAAO;AAAA,QACL,MAAA,EAAQ,KAAA;AAAA,QACR,UAAA,EAAY,oBAAA;AAAA,QACZ,MAAA,EAAQ,OAAA;AAAA,QACR,GAAK,KAAA,CAAM,KAAA,IAAgD;AAAC;AAC9D,KACD,CAAA;AAAA,EACL;AACF,CAAC,CAAA;ACjGM,IAAM,kBAAA,GAAqB,yBAAA;AAgB3B,IAAM,eAAeJ,mBAAAA,CAAgB;AAAA,EAC1C,IAAA,EAAM,cAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA;AAAA,IAEL,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA;AAAA,IAEA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA;AAAA,IAEA,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA,IACA,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,OAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA,IACA,WAAA,EAAa;AAAA,MACX,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA,IACA,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,OAAA,EAAS,CAAC,KAAA,KAAqB;AAAA,GACjC;AAAA,EACA,MAAM,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,EAAO,MAAK,EAAG;AACnC,IAAA,MAAM,YAAA,GAAeE,QAAwB,IAAI,CAAA;AACjD,IAAA,MAAM,WAAWqC,mBAAA,EAAe;AAChC,IAAA,MAAM,SAAA,GAAYrC,QAAmB,IAAI,CAAA;AAGzC,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,SAAA,CAAU,CAAC,KAAA,KAAU;AAC1C,MAAA,SAAA,CAAU,QAAQ,KAAA,CAAM,QAAA;AAAA,IAC1B,CAAC,CAAA;AACD,IAAAO,oBAAgB,KAAK,CAAA;AAGrB,IAAA,MAAM,OAAA,GAAU,CAAC,GAAA,KAAwB;AACvC,MAAA,MAAM,YAAY,YAAA,CAAa,KAAA;AAC/B,MAAA,IAAI,CAAC,WAAW,OAAO,EAAA;AACvB,MAAA,OAAO,KAAA,CAAM,IAAA;AAAA,QACX,SAAA,CAAU,gBAAA,CAA8B,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAA,CAAG;AAAA,OACnE,CAAE,UAAU,CAAC,EAAA,KAAO,GAAG,YAAA,CAAa,kBAAkB,MAAM,GAAG,CAAA;AAAA,IACjE,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAoB;AACzC,MAAA,IAAI,MAAM,QAAA,EAAU;AACpB,MAAA,MAAM,SAAU,CAAA,CAAE,MAAA,CAAuB,OAAA,CAAQ,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAA,CAAG,CAAA;AAC1E,MAAA,IAAI,CAAC,MAAA,EAAQ;AACb,MAAA,MAAM,YAAY,YAAA,CAAa,KAAA;AAC/B,MAAA,IAAI,CAAC,SAAA,EAAW;AAChB,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,YAAA,CAAa,kBAAkB,CAAA,IAAK,EAAA;AACvD,MAAA,MAAM,KAAA,GAAQ,QAAQ,GAAG,CAAA;AACzB,MAAA,IAAI,QAAQ,CAAA,EAAG;AACf,MAAA,QAAA,CAAS,KAAA,CAAM,GAAA,EAAK,CAAA,CAAE,OAAA,EAAS,EAAE,OAAO,CAAA;AAAA,IAC1C,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAoB;AACzC,MAAA,IAAI,CAAC,SAAS,SAAA,EAAU,IAAK,SAAS,QAAA,EAAS,CAAE,aAAa,IAAA,EAAM;AACpE,MAAA,MAAM,QAAQ,YAAA,CAAa,KAAA,EAAO,gBAAA,CAA8B,CAAA,CAAA,EAAI,kBAAkB,CAAA,CAAA,CAAG,CAAA;AACzF,MAAA,MAAM,KAAA,GAAwB,MAAM,IAAA,CAAK,KAAA,IAAS,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,EAAA,KAAO;AAChE,QAAA,MAAM,IAAA,GAAO,GAAG,qBAAA,EAAsB;AACtC,QAAA,OAAO;AAAA,UACL,EAAA,EAAI,EAAA,CAAG,YAAA,CAAa,kBAAkB,CAAA,IAAK,EAAA;AAAA,UAC3C,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,KAAK,IAAA,CAAK,GAAA;AAAA,UACV,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,QAAQ,IAAA,CAAK;AAAA,SACf;AAAA,MACF,CAAC,CAAA;AAED,MAAA,QAAA,CAAS,QAAA,CAAS,CAAA,CAAE,OAAA,EAAS,CAAA,CAAE,OAAO,CAAA;AACtC,MAAA,IAAI,QAAA,CAAS,QAAA,EAAS,CAAE,QAAA,KAAa,IAAA,EAAM;AACzC,QAAA,QAAA,CAAS,QAAA,CAAS,EAAE,CAAA,EAAG,CAAA,CAAE,SAAS,CAAA,EAAG,CAAA,CAAE,OAAA,EAAQ,EAAG,KAAK,CAAA;AAAA,MACzD;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,MAAM,KAAA,GAAQ,SAAS,QAAA,EAAS;AAChC,MAAA,IAAI,KAAA,CAAM,aAAa,IAAA,EAAM;AAC3B,QAAA,QAAA,CAAS,MAAA,EAAO;AAChB,QAAA;AAAA,MACF;AACA,MAAA,MAAM,MAAA,GAAS,SAAS,GAAA,EAAI;AAC5B,MAAA,IAAI,OAAO,QAAA,IAAY,MAAA,CAAO,UAAU,MAAA,CAAO,QAAA,KAAa,OAAO,MAAA,EAAQ;AACzE,QAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA;AACpC,QAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA;AAChC,QAAA,IAAI,IAAA,IAAQ,CAAA,IAAK,EAAA,IAAM,CAAA,EAAG;AACxB,UAAA,MAAM,IAAA,GAAO,CAAC,GAAI,KAAA,CAAM,KAAmB,CAAA;AAC3C,UAAA,MAAM,CAAC,KAAK,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,MAAM,CAAC,CAAA;AACnC,UAAA,IAAA,CAAK,MAAA,CAAO,EAAA,EAAI,CAAA,EAAG,KAAM,CAAA;AACzB,UAAA,IAAI,MAAM,SAAA,EAAW;AACnB,YAAA,KAAA,CAAM,UAAU,IAAI,CAAA;AAAA,UACtB;AACA,UAAA,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,QACtB;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,UAAA,GAAa,CAAC,IAAA,EAAe,KAAA,KACjC,KAAA,CAAM,MAAA,GAAS,KAAA,CAAM,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA;AAEzD,IAAA,OAAO,MAAM;AACX,MAAA,MAAM,WAAoB,EAAC;AAC3B,MAAA,MAAM,YAAA,GAAe,MAAM,OAAA,IAAU;AACrC,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,MAAM,aAAa,KAAA,CAAM,KAAA;AACzB,QAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,KAAA,EAAO,KAAA,KAAU;AACrC,UAAA,MAAM,IAAA,GAAO,WAAW,KAAK,CAAA;AAC7B,UAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAA,EAAM,KAAK,CAAA;AAClC,UAAA,MAAM,UAAA,GAAa,QAAQ,SAAA,CAAU,KAAA;AACrC,UAAA,QAAA,CAAS,IAAA;AAAA,YACPL,KAAAA;AAAA,cACE,KAAA;AAAA,cACA;AAAA,gBACE,GAAA;AAAA,gBACA,CAAC,kBAAkB,GAAG,GAAA;AAAA,gBACtB,6BAAA,EAA+B,aAAa,EAAA,GAAK,MAAA;AAAA,gBACjD,KAAA,EAAO;AAAA,kBACL,UAAA,EAAY,aAAa,MAAA,GAAS,sBAAA;AAAA,kBAClC,OAAA,EAAS,aAAa,GAAA,GAAM,CAAA;AAAA,kBAC5B,QAAA,EAAU,UAAA;AAAA,kBACV,MAAA,EAAQ,aAAa,GAAA,GAAM;AAAA;AAC7B,eACF;AAAA,cACA,CAAC,KAAK;AAAA;AACR,WACF;AAAA,QACF,CAAC,CAAA;AAAA,MACH;AAEA,MAAA,OAAOA,KAAAA;AAAA,QACL,KAAA;AAAA,QACA;AAAA,UACE,GAAG,KAAA;AAAA,UACH,GAAA,EAAK,CAAC,EAAA,KAAgB;AACpB,YAAA,YAAA,CAAa,QAAS,EAAA,IAAM,IAAA;AAAA,UAC9B,CAAA;AAAA,UACA,oBAAA,EAAsB,EAAA;AAAA,UACtB,YAAA,EAAc,SAAA,CAAU,KAAA,GAAQ,UAAA,GAAa,MAAA;AAAA,UAC7C,OAAO,KAAA,CAAM,KAAA;AAAA,UACb,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,aAAA,EAAe,KAAA,CAAM,WAAA,KAAgB,YAAA,GAAe,KAAA,GAAQ,QAAA;AAAA,YAC5D,GAAA,EAAK,yBAAA;AAAA,YACL,OAAA,EAAS,KAAA,CAAM,QAAA,GAAW,GAAA,GAAM,CAAA;AAAA,YAChC,UAAA,EAAY,SAAA,CAAU,KAAA,GAAQ,MAAA,GAAS,MAAA;AAAA,YACvC,GAAK,KAAA,CAAM,KAAA,IAAyD;AAAC,WACvE;AAAA,UACA,aAAA,EAAe,aAAA;AAAA,UACf,aAAA,EAAe,aAAA;AAAA,UACf,WAAA,EAAa,WAAA;AAAA,UACb,cAAA,EAAgB;AAAA,SAClB;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA;AAAA,EACF;AACF,CAAC,CAAA;;;AC1KM,IAAM,gBAAgBJ,mBAAAA,CAAgB;AAAA,EAC3C,IAAA,EAAM,eAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA;AAAA,IAEL,GAAA,EAAK,EAAE,IAAA,EAAM,MAAA,EAA6B,UAAU,IAAA,EAAK;AAAA,IACzD,WAAA,EAAa,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA;AAAK,GAC9C;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,CAAC,IAAA,KAAiB,IAAA;AAAA,IAC1B,KAAA,EAAO,CAAC,IAAA,KAAiB,IAAA;AAAA,IACzB,OAAA,EAAS,CAAC,IAAA,KAAiB,IAAA;AAAA,IAC3B,OAAA,EAAS,CAAC,KAAA,KAAqB;AAAA,GACjC;AAAA,EACA,KAAA,CAAM,KAAA,EAAO,EAAE,IAAA,EAAM,OAAM,EAAG;AAC5B,IAAA,MAAM,EAAE,CAAA,EAAG,EAAA,EAAG,GAAI,OAAA,EAAQ;AAC1B,IAAA,MAAM,CAAA,GAAI,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA;AAE9B,IAAA,MAAM,QAAA,GAAW,CAAC,GAAA,KAAsB;AACtC,MAAA,KAAA,CAAM,GAAA,CAAI,SAAS,GAAG,CAAA;AACtB,MAAA,IAAA,CAAK,UAAU,GAAG,CAAA;AAAA,IACpB,CAAA;AACA,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAA,KAAsB;AACnC,MAAA,KAAA,CAAM,GAAA,CAAI,MAAM,GAAG,CAAA;AACnB,MAAA,IAAA,CAAK,SAAS,GAAG,CAAA;AAAA,IACnB,CAAA;AACA,IAAA,MAAM,OAAA,GAAU,CAAC,GAAA,KAAsB;AACrC,MAAA,KAAA,CAAM,GAAA,CAAI,QAAQ,GAAG,CAAA;AACrB,MAAA,IAAA,CAAK,WAAW,GAAG,CAAA;AAAA,IACrB,CAAA;AACA,IAAA,MAAM,OAAA,GAAU,CAAC,IAAA,KAA0B;AACzC,MAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,EAAK,KAAA,KAAU,KAAA,CAAM,IAAI,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,KAAK,CAAC,CAAA;AAC3D,MAAA,IAAA,CAAK,WAAW,IAAI,CAAA;AAAA,IACtB,CAAA;AAEA,IAAA,MAAM,QAAA,GAAW,CAAC,IAAA,EAA0B,GAAA,KAAkC;AAC5E,MAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,GAAA,EAAK;AACnB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,gBAAA,CAA8B,uBAAuB,CAAA;AACzE,MAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,EAAA,KAAO;AACrB,QAAA,IAAI,GAAG,YAAA,CAAa,UAAU,CAAA,KAAM,GAAA,KAAQ,KAAA,EAAM;AAAA,MACpD,CAAC,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAA2B;AACnD,MAAA,MAAM,OAAO,CAAA,CAAE,aAAA;AACf,MAAA,MAAM,IAAA,GAAO,EAAE,IAAA,CAAK,KAAA;AACpB,MAAA,MAAM,GAAA,GAAM,KAAK,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,GAAA,KAAQ,CAAA,CAAE,SAAA,CAAU,KAAK,CAAA;AAC7D,MAAA,IAAI,GAAA,GAAM,CAAA,IAAK,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAElC,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,IAAY,CAAA,CAAE,QAAQ,WAAA,EAAa;AAC/C,QAAA,MAAM,GAAA,GAAM,KAAK,GAAG,CAAA;AACpB,QAAA,IAAI,GAAA,IAAOwC,eAAA,CAAW,GAAG,CAAA,EAAG;AAC1B,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,KAAA,CAAM,IAAI,GAAG,CAAA;AACb,UAAA,KAAKtB,YAAAA,CAAS,MAAM,QAAA,CAAS,IAAA,EAAM,MAAM,GAAA,CAAI,QAAA,EAAS,CAAE,SAAS,CAAC,CAAA;AAAA,QACpE;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,MAAA,GAAS,EAAA;AACb,MAAA,IAAI,EAAE,GAAA,KAAQ,YAAA,EAAc,MAAA,GAAA,CAAU,GAAA,GAAM,KAAK,IAAA,CAAK,MAAA;AAAA,WAAA,IAC7C,CAAA,CAAE,QAAQ,WAAA,EAAa,MAAA,GAAA,CAAU,MAAM,CAAA,GAAI,IAAA,CAAK,UAAU,IAAA,CAAK,MAAA;AAAA,WAAA,IAC/D,CAAA,CAAE,GAAA,KAAQ,MAAA,EAAQ,MAAA,GAAS,CAAA;AAAA,WAAA,IAC3B,CAAA,CAAE,GAAA,KAAQ,KAAA,EAAO,MAAA,GAAS,KAAK,MAAA,GAAS,CAAA;AAAA,WAC5C;AAEL,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAM,CAAA,EAAG,GAAA;AAC1B,MAAA,IAAI,CAAC,GAAA,EAAK;AACV,MAAA,QAAA,CAAS,GAAG,CAAA;AACZ,MAAA,KAAKA,YAAAA,CAAS,MAAM,QAAA,CAAS,IAAA,EAAM,GAAG,CAAC,CAAA;AAAA,IACzC,CAAA;AAEA,IAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KAAwB;AACpC,MAAA,MAAM,MAAA,GAAS,GAAA,CAAI,GAAA,KAAQ,CAAA,CAAE,SAAA,CAAU,KAAA;AACvC,MAAA,MAAM,QAAA,GAAWsB,gBAAW,GAAG,CAAA;AAC/B,MAAA,MAAM,gBAAyB,EAAC;AAChC,MAAA,IAAI,GAAA,CAAI,IAAA,EAAM,aAAA,CAAc,IAAA,CAAKpC,KAAAA,CAAE,QAAA,EAAU,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI,CAAC,CAAA;AAC1E,MAAA,aAAA,CAAc,IAAA,CAAKA,KAAAA,CAAE,MAAA,EAAQ,EAAE,KAAA,EAAO,EAAE,UAAA,EAAY,QAAA,EAAS,EAAE,EAAG,GAAA,CAAI,KAAK,CAAC,CAAA;AAE5E,MAAA,MAAM,KAAA,GAAQA,KAAAA;AAAA,QACZ,QAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAM,QAAA;AAAA,UACN,IAAA,EAAM,KAAA;AAAA,UACN,qBAAA,EAAuB,EAAA;AAAA,UACvB,YAAY,GAAA,CAAI,GAAA;AAAA,UAChB,eAAA,EAAiB,SAAS,MAAA,GAAS,OAAA;AAAA,UACnC,cAAA,EAAgB,SAAS,MAAA,GAAS,MAAA;AAAA,UAClC,QAAA,EAAU,SAAS,CAAA,GAAI,EAAA;AAAA,UACvB,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,aAAA;AAAA,YACT,UAAA,EAAY,QAAA;AAAA,YACZ,GAAA,EAAK,2BAAA;AAAA,YACL,MAAA,EAAQ,MAAA;AAAA,YACR,UAAA,EAAY,aAAA;AAAA,YACZ,KAAA,EAAO,SAAA;AAAA,YACP,IAAA,EAAM,SAAA;AAAA,YACN,QAAA,EAAU,gCAAA;AAAA,YACV,MAAA,EAAQ,SAAA;AAAA,YACR,OAAA,EAAS;AAAA,WACX;AAAA,UACA,OAAA,EAAS,MAAM,QAAA,CAAS,GAAA,CAAI,GAAG;AAAA,SACjC;AAAA,QACA;AAAA,OACF;AAEA,MAAA,MAAM,WAAW,QAAA,GACbA,KAAAA;AAAA,QACE,QAAA;AAAA,QACA;AAAA,UACE,IAAA,EAAM,QAAA;AAAA,UACN,QAAA,EAAU,EAAA;AAAA,UACV,qBAAA,EAAuB,EAAA;AAAA,UACvB,cAAc,EAAA,CAAG,gBAAA,EAAkB,EAAE,KAAA,EAAO,GAAA,CAAI,OAAO,CAAA;AAAA,UACvD,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,aAAA;AAAA,YACT,UAAA,EAAY,QAAA;AAAA,YACZ,cAAA,EAAgB,QAAA;AAAA,YAChB,KAAA,EAAO,MAAA;AAAA,YACP,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ,MAAA;AAAA,YACR,YAAA,EAAc,KAAA;AAAA,YACd,UAAA,EAAY,aAAA;AAAA,YACZ,KAAA,EAAO,SAAA;AAAA,YACP,MAAA,EAAQ,SAAA;AAAA,YACR,OAAA,EAAS,GAAA;AAAA,YACT,OAAA,EAAS;AAAA,WACX;AAAA,UACA,OAAA,EAAS,CAAC,CAAA,KAAa;AACrB,YAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,YAAA,KAAA,CAAM,IAAI,GAAG,CAAA;AACb,YAAA,MAAM,IAAA,GAAQ,EAAE,aAAA,CAA8B,OAAA;AAAA,cAC5C;AAAA,aACF;AACA,YAAA,KAAKc,YAAAA,CAAS,MAAM,QAAA,CAAS,IAAA,EAAM,MAAM,GAAA,CAAI,QAAA,EAAS,CAAE,SAAS,CAAC,CAAA;AAAA,UACpE;AAAA,SACF;AAAA,QACA,CAACd,MAAE,QAAA,EAAU,EAAE,MAAM,GAAA,EAAK,IAAA,EAAM,EAAA,EAAI,CAAC;AAAA,UAEvC,GAAA,CAAI,MAAA,GACFA,KAAAA,CAAE,QAAA,EAAU,EAAE,IAAA,EAAM,cAAA,EAAgB,IAAA,EAAM,EAAA,EAAI,OAAO,EAAE,OAAA,EAAS,KAAA,EAAM,EAAG,CAAA,GACzE,IAAA;AAEN,MAAA,OAAOA,KAAAA;AAAA,QACL,KAAA;AAAA,QACA;AAAA,UACE,KAAK,GAAA,CAAI,GAAA;AAAA,UACT,eAAA,EAAiB,EAAA;AAAA,UACjB,aAAA,EAAe,SAAS,MAAA,GAAS,MAAA;AAAA,UACjC,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,aAAA;AAAA,YACT,UAAA,EAAY,QAAA;AAAA,YACZ,GAAA,EAAK,KAAA;AAAA,YACL,OAAA,EACE,8GAAA;AAAA,YACF,YAAA,EAAc,4BAAA;AAAA,YACd,MAAA,EAAQ,CAAA,UAAA,EAAa,MAAA,GAAS,qBAAA,GAAwB,oBAAoB,CAAA,CAAA;AAAA,YAC1E,UAAA,EAAY,SAAS,qBAAA,GAAwB,qBAAA;AAAA,YAC7C,KAAA,EAAO,SAAS,sCAAA,GAAyC,wBAAA;AAAA,YACzD,IAAA,EAAM;AAAA;AACR,SACF;AAAA,QACA,CAAC,OAAO,QAAQ;AAAA,OAClB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,SAAS,CAAC,KAAA,EAAe,GAAA,EAAiB,QAAA,GAAW,UACzDA,KAAAA,CAAE,gBAAA,EAAkB,EAAE,QAAA,EAAU,UAAU,GAAA,EAAI,EAAG,EAAE,OAAA,EAAS,MAAM,OAAO,CAAA;AAE3E,IAAA,MAAM,WAAA,GAAc,MAClBA,KAAAA,CAAE,YAAA,EAAc,IAAA,EAAM;AAAA,MACpB,SAAS,MAAM;AAAA,QACbA,KAAAA;AAAA,UACE,mBAAA;AAAA,UACA;AAAA,YACE,YAAA,EAAc,GAAG,kBAAkB,CAAA;AAAA,YACnC,KAAA,EAAO;AAAA,cACL,OAAA,EAAS,aAAA;AAAA,cACT,UAAA,EAAY,QAAA;AAAA,cACZ,cAAA,EAAgB,QAAA;AAAA,cAChB,KAAA,EAAO,MAAA;AAAA,cACP,MAAA,EAAQ,MAAA;AAAA,cACR,YAAA,EAAc,4BAAA;AAAA,cACd,MAAA,EAAQ,8BAAA;AAAA,cACR,UAAA,EAAY,qBAAA;AAAA,cACZ,KAAA,EAAO,wBAAA;AAAA,cACP,MAAA,EAAQ;AAAA;AACV,WACF;AAAA,UACA;AAAA,YACE,OAAA,EAAS,MAAMA,KAAAA,CAAE,QAAA,EAAU,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,EAAA,EAAI;AAAA;AAClE,SACF;AAAA,QACAA,KAAAA,CAAE,kBAAkB,IAAA,EAAM;AAAA,UACxB,SAAS,MAAM;AACb,YAAA,MAAM,GAAA,GAAM,EAAE,SAAA,CAAU,KAAA;AACxB,YAAA,IAAI,CAAC,GAAA,EAAK,OAAO,CAAC,MAAA,CAAO,iBAAiB,MAAM;AAAA,YAAC,CAAA,EAAG,IAAI,CAAC,CAAA;AACzD,YAAA,OAAO;AAAA,cACL,OAAO,EAAA,CAAG,eAAe,GAAG,MAAM,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,cAC9C,OAAO,EAAA,CAAG,aAAa,GAAG,MAAM,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,cAC1CA,MAAE,qBAAqB,CAAA;AAAA,cACvB,MAAA,CAAO,GAAG,iBAAiB,CAAA,EAAG,MAAM,KAAA,CAAM,GAAA,CAAI,SAAA,CAAU,GAAG,CAAC,CAAA;AAAA,cAC5D,MAAA,CAAO,GAAG,kBAAkB,CAAA,EAAG,MAAM,KAAA,CAAM,GAAA,CAAI,UAAA,CAAW,GAAG,CAAC,CAAA;AAAA,cAC9D,MAAA,CAAO,GAAG,mBAAmB,CAAA,EAAG,MAAM,KAAA,CAAM,GAAA,CAAI,WAAA,CAAY,GAAG,CAAC,CAAA;AAAA,cAChE,MAAA,CAAO,GAAG,gBAAgB,CAAA,EAAG,MAAM,KAAA,CAAM,GAAA,CAAI,UAAU;AAAA,aACzD;AAAA,UACF;AAAA,SACD;AAAA;AACH,KACD,CAAA;AAEH,IAAA,OAAO,MACLA,KAAAA;AAAA,MACE,KAAA;AAAA,MACA;AAAA,QACE,GAAG,KAAA;AAAA,QACH,sBAAA,EAAwB,EAAA;AAAA,QACxB,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,GAAA,EAAK,2BAAA;AAAA,UACL,OAAA,EAAS,sDAAA;AAAA,UACT,YAAA,EAAc,8BAAA;AAAA,UACd,UAAA,EAAY,wBAAA;AAAA,UACZ,GAAK,KAAA,CAAM,KAAA,IAAgD;AAAC;AAC9D,OACF;AAAA,MACA;AAAA,QACEA,KAAAA;AAAA,UACE,KAAA;AAAA,UACA;AAAA,YACE,uBAAA,EAAyB,EAAA;AAAA,YACzB,IAAA,EAAM,SAAA;AAAA,YACN,YAAA,EAAc,GAAG,iBAAiB,CAAA;AAAA,YAClC,SAAA,EAAW,gBAAA;AAAA,YACX,KAAA,EAAO;AAAA,cACL,SAAA,EAAW,MAAA;AAAA,cACX,IAAA,EAAM;AAAA;AACR,WACF;AAAA,UACA;AAAA,YACEA,KAAAA;AAAA,cACE,YAAA;AAAA,cACA;AAAA,gBACE,KAAA,EAAO,EAAE,IAAA,CAAK,KAAA;AAAA,gBACd,MAAA,EAAQ,CAAC,IAAA,KAAmB,IAAA,CAAiB,GAAA;AAAA,gBAC7C,SAAA,EAAW,CAAC,KAAA,KAAqB,OAAA,CAAQ,KAAkB,CAAA;AAAA,gBAC3D,QAAA,EAAU,CAAC,KAAA,CAAM,WAAA;AAAA,gBACjB,WAAA,EAAa,YAAA;AAAA,gBACb,KAAA,EAAO;AAAA,kBACL,UAAA,EAAY,QAAA;AAAA,kBACZ,GAAA,EAAK,2BAAA;AAAA,kBACL,KAAA,EAAO;AAAA;AACT,eACF;AAAA,cACA,EAAE,OAAA,EAAS,MAAM,CAAA,CAAE,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAC,GAAA,KAAQ,IAAA,CAAK,GAAG,CAAC,CAAA;AAAE;AACxD;AACF,SACF;AAAA,QACA,WAAA;AAAY;AACd,KACF;AAAA,EACJ;AACF,CAAC;ACrRM,SAAS,SAAY,KAAA,EAAkD;AAC5E,EAAA,MAAM,KAAA,GAAQkB,cAAAA,CAAW,KAAA,CAAM,QAAA,EAAU,CAAA;AACzC,EAAAG,kBAAAA,CAAe,MAAM,SAAA,CAAU,CAAC,SAAU,KAAA,CAAM,KAAA,GAAQ,IAAK,CAAC,CAAA;AAC9D,EAAA,OAAO,KAAA;AACT;;;ACgCO,SAAS,cAAc,MAAA,EAAkD;AAC9E,EAAA,MAAM,EAAE,gBAAA,EAAkB,iBAAA,EAAmB,QAAA,EAAU,MAAK,GAAI,MAAA;AAEhE,EAAA,MAAM,KAAA,GAAQ,MAAiBgB,WAAA,CAAQ,MAAA,CAAO,KAAK,CAAA;AACnD,EAAA,MAAM,aAAA,GAAgB,MAA0BA,WAAA,CAAQ,MAAA,CAAO,SAAS,CAAA;AACxE,EAAA,MAAM,gBAAA,GAAmB,MAAe,aAAA,EAAc,KAAM,MAAA;AAI5D,EAAA,MAAM,QAAoBC,qBAAA,CAAiB;AAAA,IACzC,OAAO,KAAA,EAAM;AAAA,IACb,gBAAA,EAAkB,eAAc,IAAK,gBAAA;AAAA,IACrC,IAAA;AAAA,IACA,cAAA,EAAgB,CAAC,GAAA,EAAK,IAAA,KAAS;AAC7B,MAAA,iBAAA,GAAoB,GAAG,CAAA;AACvB,MAAA,IAAI,IAAA,EAAM,QAAA,GAAW,GAAA,EAAK,IAAI,CAAA;AAAA,IAChC;AAAA,GACD,CAAA;AACD,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA;AAGlC,EAAAvC,SAAAA,CAAM,KAAA,EAAO,CAAC,IAAA,KAAS,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,EAAG,EAAE,KAAA,EAAO,MAAA,EAAQ,CAAA;AAK9D,EAAAwC,eAAA,CAAY,MAAM;AAChB,IAAA,MAAM,OAAO,aAAA,EAAc;AAC3B,IAAA,IAAI,IAAA,KAAS,MAAA,IAAa,KAAA,CAAM,YAAA,OAAmB,IAAA,EAAM;AACvD,MAAA,KAAA,CAAM,KAAA,CAAM,QAAA,CAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,IAC1C;AAAA,EACF,CAAC,CAAA;AAED,EAAA,MAAM,SAAA,GAAY1C,YAAAA;AAAA,IAAS,MACzB,kBAAiB,GAAK,aAAA,MAAmB,EAAA,GAAO,KAAA,CAAM,MAAM,SAAA,IAAa;AAAA,GAC3E;AAEA,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,UAAA,EAAYA,YAAAA,CAAS,MAAO,SAAA,CAAU,KAAA,GAAQc,gBAAAA,CAAY,KAAA,EAAM,EAAG,SAAA,CAAU,KAAK,CAAA,GAAI,EAAG;AAAA,GAC3F;AACF;;;ACnDO,IAAM,kBAAkBf,mBAAAA,CAAgB;AAAA,EAC7C,IAAA,EAAM,iBAAA;AAAA,EACN,YAAA,EAAc,KAAA;AAAA,EACd,KAAA,EAAO;AAAA;AAAA,IAEL,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA,EAA8B,UAAU,IAAA,EAAK;AAAA;AAAA,IAE5D,SAAA,EAAW,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,MAAA,EAAU;AAAA;AAAA,IAE9C,gBAAA,EAAkB,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,MAAA,EAAU;AAAA;AAAA,IAErD,SAAA,EAAW,EAAE,IAAA,EAAM,OAAA,EAA0C,SAAS,MAAA,EAAU;AAAA,IAChF,gBAAA,EAAkB,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,KAAA,EAAM;AAAA,IAClD,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAyC,SAAS,SAAA,EAAU;AAAA;AAAA,IAE1E,QAAA,EAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,SAAS,YAAA,EAAa;AAAA;AAAA,IAEhD,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAA6B,SAAS,MAAA,EAAU;AAAA,IAC9D,QAAA,EAAU,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA,IACzC,cAAA,EAAgB,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA,IAC/C,YAAA,EAAc,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA,IAC7C,UAAA,EAAY,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA,IAC3C,SAAA,EAAW,EAAE,IAAA,EAAM,MAAA,EAAwC,SAAS,OAAA,EAAQ;AAAA,IAC5E,YAAA,EAAc,EAAE,IAAA,EAAM,MAAA,EAA2C,SAAS,OAAA,EAAQ;AAAA,IAClF,aAAA,EAAe;AAAA,MACb,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS;AAAA,KACX;AAAA,IACA,YAAA,EAAc,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAM,CAAA,EAAgC,SAAS,GAAA,EAAI;AAAA,IAClF,cAAA,EAAgB,EAAE,IAAA,EAAM,CAAC,QAAQ,MAAM,CAAA,EAAgC,SAAS,EAAA;AAAG,GACrF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,kBAAA,EAAoB,CAAC,IAAA,KAAiB,IAAA;AAAA,IACtC,kBAAA,EAAoB,CAAC,MAAA,KAAoB,IAAA;AAAA,IACzC,MAAA,EAAQ,CAAC,IAAA,EAAc,KAAA,KAAmB;AAAA,GAC5C;AAAA,EACA,MAAM,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA,EAAO,OAAM,EAAG;AACnC,IAAA,MAAM,EAAE,CAAA,EAAE,GAAI,OAAA,EAAQ;AAEtB,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA,EAAY;AAAA,QACV,aAAA,CAAc;AAAA,MAChB,KAAA,EAAO,MAAM,KAAA,CAAM,KAAA;AAAA,MACnB,SAAA,EAAW,MAAM,KAAA,CAAM,SAAA;AAAA,MACvB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MACxB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,iBAAA,EAAmB,CAAC,GAAA,KAAQ,IAAA,CAAK,oBAAoB,GAAG,CAAA;AAAA,MACxD,UAAU,CAAC,GAAA,EAAK,SAAS,IAAA,CAAK,QAAA,EAAU,KAAK,IAAI;AAAA,KAClD,CAAA;AAED,IAAA,MAAM,kBAAA,GAAqBC,YAAAA,CAAS,MAAM,KAAA,CAAM,cAAc,MAAS,CAAA;AACvE,IAAA,MAAM,iBAAA,GAAoBC,OAAAA,CAAI,KAAA,CAAM,gBAAgB,CAAA;AACpD,IAAA,MAAM,SAAA,GAAYD,YAAAA;AAAA,MAAS,MACzB,kBAAA,CAAmB,KAAA,GAAS,KAAA,CAAM,YAAwB,iBAAA,CAAkB;AAAA,KAC9E;AACA,IAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAyB;AAC7C,MAAA,IAAI,CAAC,kBAAA,CAAmB,KAAA,EAAO,iBAAA,CAAkB,KAAA,GAAQ,KAAA;AACzD,MAAA,IAAA,CAAK,oBAAoB,KAAK,CAAA;AAAA,IAChC,CAAA;AAGA,IAAA,MAAM,QAAA,GAAW,CAAC,IAAA,EAAc,IAAA,KAAwB,SAAS,IAAI,CAAA;AAIrE,IAAA,IAAI,MAAM,IAAA,EAAM;AACd,MAAA,MAAM,aAAaC,OAAAA,CAAI,KAAA,CAAM,IAAA,CAAK,QAAA,GAAW,SAAS,CAAA;AACtD,MAAA,MAAM,WAAA,GAAc,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,CAAC,CAAA,KAAM;AAC9C,QAAA,UAAA,CAAW,QAAQ,CAAA,CAAE,SAAA;AAAA,MACvB,CAAC,CAAA;AACD,MAAAO,oBAAgB,WAAW,CAAA;AAC3B,MAAAN,SAAAA,CAAM,UAAA,EAAY,CAAC,GAAA,KAAQ;AACzB,QAAA,IAAI,GAAA,cAAiB,GAAG,CAAA;AAAA,MAC1B,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAAmD;AACrE,MAAA,IAAI,KAAA,CAAM,IAAA,EAAM,OAAO,KAAA,CAAM,KAAK,KAAK,CAAA;AACvC,MAAA,OAAOC,KAAAA;AAAA,QACL,KAAA;AAAA,QACA;AAAA,UACE,sBAAA,EAAwB,EAAA;AAAA,UACxB,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,UAAA,EAAY,QAAA;AAAA,YACZ,GAAA,EAAK,4BAAA;AAAA,YACL,MAAA,EAAQ,MAAA;AAAA,YACR,OAAA,EAAS,8BAAA;AAAA,YACT,KAAA,EAAO,wBAAA;AAAA,YACP,UAAA,EAAY,KAAA;AAAA,YACZ,QAAA,EAAU,gCAAA;AAAA,YACV,UAAA,EAAY,QAAA;AAAA,YACZ,QAAA,EAAU,QAAA;AAAA,YACV,UAAA,EAAY;AAAA;AACd,SACF;AAAA,QACA;AAAA,UACEA,KAAAA;AAAA,YACE,MAAA;AAAA,YACA;AAAA,cACE,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,aAAA;AAAA,gBACT,UAAA,EAAY,QAAA;AAAA,gBACZ,cAAA,EAAgB,QAAA;AAAA,gBAChB,KAAA,EAAO,MAAA;AAAA,gBACP,MAAA,EAAQ,MAAA;AAAA,gBACR,YAAA,EAAc,4BAAA;AAAA,gBACd,UAAA,EAAY,qBAAA;AAAA,gBACZ,KAAA,EAAO,sCAAA;AAAA,gBACP,UAAA,EAAY;AAAA;AACd,aACF;AAAA,YACA,CAACA,MAAE,QAAA,EAAU,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,CAAC;AAAA,WAC1C;AAAA,UACA,MAAM,SAAA,GAAY,IAAA,GAAOA,KAAAA,CAAE,MAAA,EAAQ,MAAM,QAAQ;AAAA;AACnD,OACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,iBAAiB,MACrBA,KAAAA;AAAA,MACE,QAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM,QAAA;AAAA,QACN,0BAAA,EAA4B,EAAA;AAAA,QAC5B,cAAc,SAAA,CAAU,KAAA,GAAQ,EAAE,qBAAqB,CAAA,GAAI,EAAE,uBAAuB,CAAA;AAAA,QACpF,cAAA,EAAgB,SAAA,CAAU,KAAA,GAAQ,MAAA,GAAS,OAAA;AAAA,QAC3C,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,aAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,QAAA;AAAA,UAChB,KAAA,EAAO,MAAA;AAAA,UACP,MAAA,EAAQ,MAAA;AAAA,UACR,MAAA,EAAQ,MAAA;AAAA,UACR,YAAA,EAAc,4BAAA;AAAA,UACd,UAAA,EAAY,aAAA;AAAA,UACZ,KAAA,EAAO,wBAAA;AAAA,UACP,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA,OAAA,EAAS,MAAM,YAAA,CAAa,CAAC,UAAU,KAAK;AAAA,OAC9C;AAAA,MACA,CAACA,KAAAA,CAAE,QAAA,EAAU,EAAE,IAAA,EAAM,SAAA,CAAU,KAAA,GAAQ,eAAA,GAAkB,MAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,CAAC;AAAA,KAC9E;AAEF,IAAA,MAAM,kBAAkB,MACtBA,KAAAA;AAAA,MACE,KAAA;AAAA,MACA;AAAA,QACE,2BAAA,EAA6B,EAAA;AAAA,QAC7B,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,GAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS,QAAA;AAAA,UACT,YAAA,EAAc,8BAAA;AAAA,UACd,UAAA,EAAY;AAAA;AACd,OACF;AAAA,MACA;AAAA,QACE,cAAA,EAAe;AAAA,QACf,KAAA,CAAM,cAAA,GACFA,KAAAA,CAAE,mBAAA,EAAqB,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,QAAA,EAAU,CAAA,GAC1E,IAAA;AAAA,QACJA,KAAAA,CAAE,OAAO,EAAE,KAAA,EAAO,EAAE,IAAA,EAAM,GAAA,IAAO,CAAA;AAAA,QACjC,MAAM,OAAA,GACFA,KAAAA;AAAA,UACE,KAAA;AAAA,UACA;AAAA,YACE,yBAAA,EAA2B,EAAA;AAAA,YAC3B,OAAO,EAAE,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,KAAK,KAAA;AAAM,WAC7D;AAAA,UACA,MAAM,OAAA;AAAQ,SAChB,GACA;AAAA;AACN,KACF;AAEF,IAAA,MAAM,aAAA,GAAgB,CAAC,UAAA,GAAa,KAAA,KAClCA,KAAAA;AAAA,MACE,KAAA;AAAA,MACA;AAAA,QACE,yBAAA,EAA2B,EAAA;AAAA,QAC3B,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,KAAA,EAAO;AAAA,UACL,SAAA,EAAW,YAAA;AAAA,UACX,KAAA,EAAO,MAAA;AAAA,UACP,QAAA,EAAU,KAAA,CAAM,YAAA,KAAiB,UAAA,GAAa,OAAA,GAAU,MAAA;AAAA,UACxD,YAAA,EAAc,KAAA,CAAM,YAAA,KAAiB,UAAA,GAAa,MAAA,GAAS,MAAA;AAAA,UAC3D,OAAA,EAAS;AAAA;AACX,OACF;AAAA,MACA;AAAA,QACE,UAAA,IAAc,KAAA,CAAM,cAAA,GAChBA,KAAAA,CAAE,mBAAA,EAAqB,EAAE,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,QAAA,EAAU,CAAA,GAC1E,IAAA;AAAA,QACJ,GAAI,MAAM,OAAA,GAAU,EAAE,WAAW,SAAA,CAAU,KAAA,EAAO,CAAA,IAAK;AAAC;AAC1D,KACF;AAEF,IAAA,MAAM,UAAA,GAAa,MACjB,KAAA,CAAM,IAAA,IAAQ,MAAM,QAAA,GAChBA,KAAAA;AAAA,MACE,KAAA;AAAA,MACA;AAAA,QACE,6BAAA,EAA+B,EAAA;AAAA,QAC/B,aAAA,EAAe,KAAA,CAAM,UAAA,GAAa,MAAA,GAAS,MAAA;AAAA,QAC3C,KAAA,EAAO;AAAA,UACL,UAAU,KAAA,CAAM,UAAA,IAAc,CAAC,KAAA,CAAM,eAAe,QAAA,GAAW,UAAA;AAAA,UAC/D,GAAA,EAAK,GAAA;AAAA,UACL,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,CAACA,MAAE,aAAA,EAAe,EAAE,KAAK,KAAA,CAAM,IAAA,EAAM,CAAC;AAAA,KACxC,GACA,IAAA;AAEN,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,KAAA,CAAM,SAAS,cAAA,EAAgB;AACjC,QAAA,OAAOA,KAAAA;AAAA,UACL,KAAA;AAAA,UACA;AAAA,YACE,GAAG,KAAA;AAAA,YACH,wBAAA,EAA0B,EAAA;AAAA,YAC1B,WAAA,EAAa,cAAA;AAAA,YACb,KAAA,EAAO;AAAA,cACL,MAAA,EAAQ,MAAA;AAAA,cACR,GAAK,KAAA,CAAM,KAAA,IAAgD;AAAC;AAC9D,WACF;AAAA,UACA,KAAA,CAAM,UAAU,EAAE,SAAA,EAAW,UAAU,KAAA,EAAO,KAAK;AAAC,SACtD;AAAA,MACF;AAEA,MAAA,IAAI,KAAA,CAAM,SAAS,YAAA,EAAc;AAC/B,QAAA,MAAM,cAAA,GACJ,MAAM,SAAA,KAAc,QAAA,GAChB,WACA,KAAA,CAAM,SAAA,KAAc,QAClB,UAAA,GACA,YAAA;AACR,QAAA,OAAOA,KAAAA;AAAA,UACL,KAAA;AAAA,UACA;AAAA,YACE,GAAG,KAAA;AAAA,YACH,wBAAA,EAA0B,EAAA;AAAA,YAC1B,WAAA,EAAa,YAAA;AAAA,YACb,KAAA,EAAO;AAAA,cACL,MAAA,EAAQ,KAAA,CAAM,aAAA,KAAkB,UAAA,GAAa,OAAA,GAAU,MAAA;AAAA,cACvD,SAAA,EAAW,OAAA;AAAA,cACX,GAAK,KAAA,CAAM,KAAA,IAAgD;AAAC;AAC9D,WACF;AAAA,UACA;AAAA,YACEA,KAAAA;AAAA,cACE,gBAAA;AAAA,cACA,EAAE,MAAA,EAAQ,KAAA,CAAM,YAAA,EAAa;AAAA,cAC7B;AAAA,gBACE,QAAQ,MACNA,KAAAA,CAAE,OAAO,EAAE,wBAAA,EAA0B,IAAG,EAAG;AAAA,kBACzCA,KAAAA;AAAA,oBACE,KAAA;AAAA,oBACA;AAAA,sBACE,2BAAA,EAA6B,EAAA;AAAA,sBAC7B,KAAA,EAAO;AAAA,wBACL,OAAA,EAAS,MAAA;AAAA,wBACT,UAAA,EAAY,QAAA;AAAA,wBACZ,GAAA,EAAK,MAAA;AAAA,wBACL,SAAA,EAAW,MAAA;AAAA,wBACX,OAAA,EAAS,QAAA;AAAA,wBACT,UAAA,EAAY;AAAA;AACd,qBACF;AAAA,oBACA;AAAA,sBACE,UAAA,CAAW,EAAE,SAAA,EAAW,KAAA,EAAO,CAAA;AAAA,sBAC/BA,KAAAA;AAAA,wBACE,KAAA;AAAA,wBACA;AAAA,0BACE,wBAAA,EAA0B,EAAA;AAAA,0BAC1B,KAAA,EAAO;AAAA,4BACL,OAAA,EAAS,MAAA;AAAA,4BACT,IAAA,EAAM,GAAA;AAAA,4BACN,QAAA,EAAU,GAAA;AAAA,4BACV;AAAA;AACF,yBACF;AAAA,wBACA;AAAA,0BACEA,MAAE,WAAA,EAAa;AAAA,4BACb,OAAO,KAAA,CAAM,KAAA;AAAA,4BACb,WAAW,SAAA,CAAU,KAAA;AAAA,4BACrB,WAAA,EAAa,YAAA;AAAA,4BACb;AAAA,2BACD;AAAA;AACH,uBACF;AAAA,sBACA,MAAM,OAAA,GACFA,KAAAA;AAAA,wBACE,KAAA;AAAA,wBACA;AAAA,0BACE,yBAAA,EAA2B,EAAA;AAAA,0BAC3B,OAAO,EAAE,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,KAAK,KAAA;AAAM,yBAC7D;AAAA,wBACA,MAAM,OAAA;AAAQ,uBAChB,GACA;AAAA;AACN,mBACF;AAAA,kBACA,UAAA;AAAW,iBACZ,CAAA;AAAA,gBACH,OAAA,EAAS,MAAM,aAAA,CAAc,IAAI,CAAA;AAAA,gBACjC,GAAI,KAAA,CAAM,MAAA,GAAS,EAAE,MAAA,EAAQ,MAAM,KAAA,CAAM,MAAA,EAAQ,EAAE,GAAI;AAAC;AAC1D;AACF;AACF,SACF;AAAA,MACF;AAEA,MAAA,OAAOA,KAAAA;AAAA,QACL,iBAAA;AAAA,QACA;AAAA,UACE,GAAG,KAAA;AAAA,UACH,WAAW,SAAA,CAAU,KAAA;AAAA,UACrB,OAAO,KAAA,CAAM,YAAA;AAAA,UACb,gBAAgB,KAAA,CAAM,cAAA;AAAA,UACtB,oBAAA,EAAsB,YAAA;AAAA,UACtB,wBAAA,EAA0B,EAAA;AAAA,UAC1B,WAAA,EAAa,SAAA;AAAA,UACb,KAAA,EAAO;AAAA,YACL,MAAA,EAAQ,OAAA;AAAA,YACR,GAAK,KAAA,CAAM,KAAA,IAAgD;AAAC;AAC9D,SACF;AAAA,QACA;AAAA,UACE,OAAA,EAAS,CAAC,KAAA,KACRA,KAAAA;AAAA,YACE,KAAA;AAAA,YACA;AAAA,cACE,yBAAA,EAA2B,EAAA;AAAA,cAC3B,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,MAAA;AAAA,gBACT,aAAA,EAAe,QAAA;AAAA,gBACf,MAAA,EAAQ,MAAA;AAAA,gBACR,eAAA,EAAiB,8BAAA;AAAA,gBACjB,UAAA,EAAY;AAAA;AACd,aACF;AAAA,YACA;AAAA,cACE,WAAW,KAAK,CAAA;AAAA,cAChBA,KAAAA;AAAA,gBACE,KAAA;AAAA,gBACA,EAAE,KAAA,EAAO,EAAE,IAAA,EAAM,GAAA,EAAK,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,KAAA,EAAM,EAAE;AAAA,gBAC/E;AAAA,kBACEA,MAAE,WAAA,EAAa;AAAA,oBACb,OAAO,KAAA,CAAM,KAAA;AAAA,oBACb,WAAW,SAAA,CAAU,KAAA;AAAA,oBACrB,WAAW,KAAA,CAAM,SAAA;AAAA,oBACjB;AAAA,mBACD;AAAA;AACH;AACF;AACF,WACF;AAAA,UACF,SAAS,MACPA,KAAAA;AAAA,YACE,gBAAA;AAAA,YACA,EAAE,MAAA,EAAQ,KAAA,CAAM,YAAA,EAAa;AAAA,YAC7B;AAAA,cACE,MAAA,EAAQ,MACNA,KAAAA,CAAE,KAAA,EAAO,EAAE,wBAAA,EAA0B,EAAA,EAAG,EAAG,CAAC,eAAA,EAAgB,EAAG,UAAA,EAAY,CAAC,CAAA;AAAA,cAC9E,OAAA,EAAS,MAAM,aAAA,EAAc;AAAA,cAC7B,GAAI,KAAA,CAAM,MAAA,GAAS,EAAE,MAAA,EAAQ,MAAM,KAAA,CAAM,MAAA,EAAQ,EAAE,GAAI;AAAC;AAC1D;AACF;AACJ,OACF;AAAA,IACF,CAAA;AAAA,EACF;AACF,CAAC;ACrZM,SAAS,mBAAA,CACd,WAAA,EACA,OAAA,GAAU,IAAA,EACiB;AAC3B,EAAA,MAAM,KAAA,GAAQF,OAAAA,CAAI,WAAA,CAAY,QAAA,EAAU,CAAA;AACxC,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,SAAA,CAAU,CAAC,IAAA,KAAS;AAClD,IAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAAA,EAChB,CAAC,CAAA;AACD,EAAAK,cAAU,MAAM;AACd,IAAA,IAAI,OAAA,EAAS,KAAK,WAAA,CAAY,OAAA,EAAQ;AAAA,EACxC,CAAC,CAAA;AACD,EAAAE,oBAAgB,WAAW,CAAA;AAC3B,EAAA,OAAO;AAAA,IACL,KAAA,EAAOR,YAAAA,CAAS,MAAM,KAAA,CAAM,KAAK,CAAA;AAAA,IACjC,KAAK,WAAA,CAAY,GAAA;AAAA,IACjB,OAAO,WAAA,CAAY,KAAA;AAAA,IACnB,OAAO,WAAA,CAAY,KAAA;AAAA,IACnB,SAAS,WAAA,CAAY,OAAA;AAAA,IACrB,OAAO,WAAA,CAAY;AAAA,GACrB;AACF","file":"admin.cjs","sourcesContent":["import { computed, defineComponent, h, ref, watch } from 'vue'\n\n/**\n * Two-column layout with a collapsible sidebar.\n *\n * Slots:\n * - `sidebar` — content rendered in the sidebar (kept mounted across collapses).\n * - `default` — the main content area.\n *\n * Use `:collapsed` for controlled mode or `:default-collapsed` for the\n * uncontrolled initial state. When collapsed, the sidebar shrinks to\n * `:collapsed-width` so icon-only navigation still fits.\n */\nexport const IrisSidebarLayout = defineComponent({\n name: 'IrisSidebarLayout',\n inheritAttrs: false,\n props: {\n collapsed: { type: Boolean, default: undefined },\n defaultCollapsed: { type: Boolean, default: false },\n /** Sidebar width when expanded (px or CSS length). */\n width: { type: [Number, String], default: 240 },\n /** Sidebar width when collapsed. */\n collapsedWidth: { type: [Number, String], default: 60 },\n /** Sidebar position. */\n side: { type: String as () => 'left' | 'right', default: 'left' },\n },\n emits: {\n 'update:collapsed': (_value: boolean) => true,\n },\n setup(props, { slots, attrs, emit }) {\n const isControlled = computed(() => props.collapsed !== undefined)\n const internalCollapsed = ref(props.defaultCollapsed)\n const collapsed = computed(() =>\n isControlled.value ? Boolean(props.collapsed) : internalCollapsed.value,\n )\n\n // Sync controlled prop changes into internal state on first run so a later\n // detach to uncontrolled mode preserves the last-known value. `immediate`\n // fires the watcher on mount; the `value !== undefined` guard keeps the\n // first run a no-op for pure-uncontrolled mounts so `defaultCollapsed`\n // stays untouched.\n watch(\n () => props.collapsed,\n (value) => {\n if (value !== undefined) internalCollapsed.value = value\n },\n { immediate: true },\n )\n\n const setCollapsed = (value: boolean) => {\n if (!isControlled.value) internalCollapsed.value = value\n emit('update:collapsed', value)\n }\n\n const asLen = (v: number | string) => (typeof v === 'number' ? `${v}px` : v)\n\n return () => {\n const sidebarStyle: Record<string, string> = {\n width: collapsed.value ? asLen(props.collapsedWidth) : asLen(props.width),\n flexShrink: '0',\n background: 'var(--iris-surface)',\n borderRight: props.side === 'left' ? '1px solid var(--iris-border)' : 'none',\n borderLeft: props.side === 'right' ? '1px solid var(--iris-border)' : 'none',\n transition: 'width 180ms ease',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n }\n const mainStyle: Record<string, string> = {\n flex: '1',\n minWidth: '0',\n overflow: 'auto',\n background: 'var(--iris-background)',\n }\n const direction = props.side === 'right' ? 'row-reverse' : 'row'\n\n return h(\n 'div',\n {\n ...attrs,\n 'data-iris-sidebar-layout': '',\n 'data-collapsed': collapsed.value ? '' : undefined,\n 'data-side': props.side,\n style: {\n display: 'flex',\n flexDirection: direction,\n width: '100%',\n height: '100%',\n minHeight: '0',\n color: 'var(--iris-foreground)',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n h(\n 'aside',\n {\n role: 'complementary',\n 'data-iris-sidebar': '',\n 'data-collapsed': collapsed.value ? '' : undefined,\n style: sidebarStyle,\n },\n slots.sidebar?.({ collapsed: collapsed.value, setCollapsed }),\n ),\n h('div', { 'data-iris-sidebar-main': '', style: mainStyle }, slots.default?.()),\n ],\n )\n }\n },\n})\n","import { defineComponent, h, type PropType } from 'vue'\n\n/**\n * Two-region vertical layout: a sticky header on top, scrollable main below.\n *\n * Slots:\n * - `header` — fixed at top.\n * - `footer` — optional fixed at bottom.\n * - `default` — scrollable main region.\n */\nexport const IrisHeaderLayout = defineComponent({\n name: 'IrisHeaderLayout',\n inheritAttrs: false,\n props: {\n /** Header height (px or CSS length). Default `'auto'`. */\n headerHeight: { type: [Number, String] as PropType<number | string>, default: 'auto' },\n /** Footer height (px or CSS length). Default `'auto'`. */\n footerHeight: { type: [Number, String] as PropType<number | string>, default: 'auto' },\n /** When true, header sticks via `position: sticky` instead of static. */\n sticky: { type: Boolean, default: true },\n },\n setup(props, { slots, attrs }) {\n const asLen = (v: number | string) => (typeof v === 'number' ? `${v}px` : v)\n return () =>\n h(\n 'div',\n {\n ...attrs,\n 'data-iris-header-layout': '',\n style: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n height: '100%',\n minHeight: '0',\n background: 'var(--iris-background)',\n color: 'var(--iris-foreground)',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n slots.header\n ? h(\n 'header',\n {\n role: 'banner',\n 'data-iris-header': '',\n style: {\n flexShrink: '0',\n height: asLen(props.headerHeight),\n borderBottom: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n position: props.sticky ? 'sticky' : 'static',\n top: '0',\n zIndex: '50',\n },\n },\n slots.header(),\n )\n : null,\n h(\n 'main',\n {\n role: 'main',\n 'data-iris-header-main': '',\n style: { flex: '1', minHeight: '0', overflow: 'auto' },\n },\n slots.default?.(),\n ),\n slots.footer\n ? h(\n 'footer',\n {\n role: 'contentinfo',\n 'data-iris-footer': '',\n style: {\n flexShrink: '0',\n height: asLen(props.footerHeight),\n borderTop: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n },\n },\n slots.footer(),\n )\n : null,\n ],\n )\n },\n})\n","import {\n computed,\n defineComponent,\n inject,\n onBeforeUnmount,\n onMounted,\n provide,\n ref,\n watch,\n type ComputedRef,\n type InjectionKey,\n type PropType,\n type Ref,\n} from 'vue'\nimport {\n applyDirection,\n applyTheme,\n injectGlobalStyles,\n type ApplyDirectionResult,\n type ApplyThemeResult,\n type Direction,\n type ThemeStore,\n} from '@iris-ui-kit/theme'\nimport type { IrisTheme } from '@iris-ui-kit/tokens'\n\nexport interface IrisThemeContext {\n store: ThemeStore\n current: Ref<IrisTheme>\n dir: ComputedRef<Direction>\n}\n\nexport const IrisThemeKey: InjectionKey<IrisThemeContext> = Symbol('IrisTheme')\n\n/**\n * Renderless provider that:\n * 1. exposes the theme store to descendants via `provide`,\n * 2. applies the current theme to a target element on mount and on change,\n * 3. reverts the inline custom properties on unmount.\n *\n * `target` defaults to `document.documentElement`. Pass an element ref to\n * scope a theme to a subtree.\n */\nexport const ThemeProvider = defineComponent({\n name: 'IrisThemeProvider',\n props: {\n store: {\n type: Object as PropType<ThemeStore>,\n required: true,\n },\n target: {\n type: Object as PropType<HTMLElement | null>,\n default: null,\n },\n /** Writing direction; sets `dir` on the target for RTL. Default `'ltr'`. */\n dir: {\n type: String as PropType<Direction>,\n default: 'ltr',\n },\n /** CSP nonce for injected inline stylesheets. */\n cspNonce: {\n type: String,\n default: undefined,\n },\n },\n setup(props, { slots }) {\n const current = ref(props.store.store.getState()) as Ref<IrisTheme>\n let unsubscribe = props.store.store.subscribe((next) => {\n current.value = next\n })\n\n let applied: ApplyThemeResult | null = null\n let dirApplied: ApplyDirectionResult | null = null\n\n const targetEl = () => props.target ?? document.documentElement\n\n const applyCurrent = () => {\n applied?.revert()\n applied = applyTheme(current.value, targetEl())\n }\n\n const applyDir = () => {\n dirApplied?.revert()\n dirApplied = applyDirection(props.dir, targetEl())\n }\n\n onMounted(() => {\n injectGlobalStyles(props.cspNonce)\n applyCurrent()\n applyDir()\n })\n\n watch(current, () => {\n if (applied) applyCurrent()\n })\n\n watch(\n () => props.store,\n (nextStore) => {\n unsubscribe()\n unsubscribe = nextStore.store.subscribe((next) => {\n current.value = next\n })\n current.value = nextStore.store.getState()\n if (applied) applyCurrent()\n },\n )\n\n watch(\n () => props.target,\n () => {\n if (applied) applyCurrent()\n if (dirApplied) applyDir()\n },\n )\n\n watch(\n () => props.dir,\n () => {\n if (dirApplied) applyDir()\n },\n )\n\n onBeforeUnmount(() => {\n unsubscribe()\n applied?.revert()\n applied = null\n dirApplied?.revert()\n dirApplied = null\n })\n\n provide(IrisThemeKey, { store: props.store, current, dir: computed(() => props.dir) })\n\n return () => slots.default?.()\n },\n})\n\nexport function useThemeContext(): IrisThemeContext {\n const ctx = inject(IrisThemeKey)\n if (!ctx) {\n throw new Error('[iris-ui] useTheme(): no <ThemeProvider> ancestor found')\n }\n return ctx\n}\n\n/**\n * Current writing direction (`'ltr'` / `'rtl'`) from the nearest\n * `<ThemeProvider>`, or a static `'ltr'` ref when there is none.\n */\nexport function useDirection(): ComputedRef<Direction> {\n const ctx = inject(IrisThemeKey, null)\n return ctx ? ctx.dir : computed(() => 'ltr' as Direction)\n}\n","import { defineComponent, h, inject, type PropType, type VNode } from 'vue'\nimport { defaultIconRegistry, resolveThemedIcon, type IrisIconRegistry } from '@iris-ui-kit/icons'\nimport { IrisThemeKey } from '../../theme'\n\n/**\n * Renders a registered icon as inline SVG. Resolves `name` through an\n * `@iris-ui-kit/icons` registry and renders the icon's structured nodes as real\n * SVG child elements (no raw-HTML injection). Colors follow `currentColor`, so\n * the surrounding CSS `color` themes it. Renders nothing for an unresolved name.\n */\nexport const IrisIcon = defineComponent({\n name: 'IrisIcon',\n inheritAttrs: false,\n props: {\n /** Semantic icon name resolved via the registry (e.g. 'check'). */\n name: { type: String, required: true },\n /** Width & height (number → px). */\n size: { type: [Number, String] as PropType<number | string>, default: 24 },\n /** Stroke width for line icons. */\n strokeWidth: { type: Number, default: 2 },\n /** Render as a filled glyph instead of a stroked line icon. */\n fill: { type: Boolean, default: false },\n /** Accessible title; sets role=\"img\" + aria-label. Omit for decorative icons. */\n title: { type: String, default: undefined },\n /** Registry to resolve `name` against. Defaults to the built-in set. */\n registry: { type: Object as PropType<IrisIconRegistry>, default: () => defaultIconRegistry },\n },\n setup(props, { attrs }) {\n const themeCtx = inject(IrisThemeKey, undefined)\n return () => {\n const icon = resolveThemedIcon(props.registry, props.name, themeCtx?.current.value)\n if (!icon) return null\n\n const paint = props.fill\n ? { fill: 'currentColor' }\n : {\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': props.strokeWidth,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n }\n\n const children: VNode[] = icon.nodes.map((node, i) => h(node.tag, { key: i, ...node.attrs }))\n if (props.title) children.unshift(h('title', props.title))\n\n return h(\n 'svg',\n {\n ...attrs,\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: icon.viewBox ?? '0 0 24 24',\n width: props.size,\n height: props.size,\n ...paint,\n role: props.title ? 'img' : undefined,\n 'aria-label': props.title || undefined,\n 'aria-hidden': props.title ? undefined : 'true',\n 'data-iris-icon': props.name,\n style: {\n display: 'inline-block',\n verticalAlign: 'middle',\n flexShrink: 0,\n ...((attrs.style as Record<string, string>) ?? {}),\n },\n },\n children,\n )\n }\n },\n})\n","import { type InjectionKey } from 'vue'\nimport type { I18n } from '@iris-ui-kit/core'\n\n/** Injection key carrying the active {@link I18n} instance to `useI18n`. */\nexport const I18nInjectionKey: InjectionKey<I18n> = Symbol('IrisI18n')\n","import { computed, inject, onBeforeUnmount, ref, type ComputedRef, type Ref } from 'vue'\nimport { createI18n, type I18n, type I18nState } from '@iris-ui-kit/core'\nimport { I18nInjectionKey } from './context'\n\nexport interface UseI18nReturn {\n locale: ComputedRef<string>\n t: I18n['t']\n formatDate: I18n['formatDate']\n formatNumber: I18n['formatNumber']\n formatRelativeTime: I18n['formatRelativeTime']\n setLocale: I18n['setLocale']\n setMessages: I18n['setMessages']\n}\n\n// Shared fallback so components can call `useI18n()` without an enclosing\n// provider — they get English defaults rather than throwing.\nlet fallbackI18n: I18n | null = null\nfunction getFallback(): I18n {\n if (fallbackI18n === null) fallbackI18n = createI18n()\n return fallbackI18n\n}\n\n/**\n * Reactive access to the active locale + translation/formatting helpers.\n * Works with or without an `<IrisI18nProvider>` (falls back to English\n * defaults). `t` / formatters read the live locale at call time, and `locale`\n * is a reactive ref so templates re-render on change.\n */\nexport function useI18n(): UseI18nReturn {\n const i18n = inject(I18nInjectionKey, null) ?? getFallback()\n const state = ref(i18n.getState()) as Ref<I18nState>\n const unsubscribe = i18n.subscribe((next) => {\n state.value = next\n })\n onBeforeUnmount(unsubscribe)\n\n return {\n locale: computed(() => state.value.locale),\n t: (key, params) => {\n void state.value.locale\n return i18n.t(key, params)\n },\n formatDate: (value, options) => {\n void state.value.locale\n return i18n.formatDate(value, options)\n },\n formatNumber: (value, options) => {\n void state.value.locale\n return i18n.formatNumber(value, options)\n },\n formatRelativeTime: (value, unit, options) => {\n void state.value.locale\n return i18n.formatRelativeTime(value, unit, options)\n },\n setLocale: i18n.setLocale,\n setMessages: i18n.setMessages,\n }\n}\n","export const __NAV_MENU_STYLE_ID = 'iris-nav-menu-styles'\n\nconst CSS = `\n:where(.iris-nav-menu) {\n --iris-nav-indent-step: 16px;\n --iris-nav-item-padding-inline: 12px;\n --iris-nav-item-padding-block: 8px;\n --iris-nav-item-border-radius: var(--iris-radius-md, 6px);\n --iris-nav-item-hover: var(--iris-surface-hover, var(--iris-surface));\n --iris-nav-item-active-hover: color-mix(in srgb, var(--iris-primary) 88%, black);\n --iris-nav-item-height: 34px;\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--iris-space-xxs, 4px);\n width: 100%;\n}\n\n:where(.iris-nav-menu--horizontal) {\n flex-direction: row;\n align-items: center;\n width: auto;\n}\n\n:where(.iris-nav-menu-group) {\n position: relative;\n}\n\n:where(.iris-nav-menu-item) {\n appearance: none;\n box-sizing: border-box;\n display: flex;\n flex: 0 1 auto;\n align-items: center;\n width: 100%;\n min-height: var(--iris-nav-item-height);\n border: none;\n border-radius: var(--iris-nav-item-border-radius);\n background: transparent;\n color: var(--iris-foreground);\n font: inherit;\n font-size: var(--iris-font-size-md, 14px);\n line-height: 1.2;\n font-weight: 400;\n text-align: start;\n cursor: pointer;\n opacity: 1;\n margin: 0;\n gap: var(--iris-space-sm, 12px);\n padding-block: var(--iris-nav-item-padding-block);\n padding-inline: var(--iris-nav-item-padding-inline);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n:where(.iris-nav-menu--horizontal > .iris-nav-menu-group > .iris-nav-menu-item) {\n width: auto;\n padding-inline-start: var(--iris-nav-item-padding-inline);\n}\n\n:where(.iris-nav-menu-item[data-depth='0']) {\n --iris-nav-item-padding-inline-start: 12px;\n}\n\n:where(.iris-nav-menu-item[data-depth='1']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step));\n}\n\n:where(.iris-nav-menu-item[data-depth='2']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 2);\n}\n\n:where(.iris-nav-menu-item[data-depth='3']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 3);\n}\n\n:where(.iris-nav-menu-item[data-depth='4']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 4);\n}\n\n:where(.iris-nav-menu-item[data-depth='5']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 5);\n}\n\n:where(.iris-nav-menu-item[data-depth='6']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 6);\n}\n\n:where(.iris-nav-menu-item[data-depth='7']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 7);\n}\n\n:where(.iris-nav-menu-item[data-depth='8']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 8);\n}\n\n:where(.iris-nav-menu-item[data-depth='9']) {\n --iris-nav-item-padding-inline-start: calc(12px + var(--iris-nav-indent-step) * 9);\n}\n\n:where(.iris-nav-menu--vertical .iris-nav-menu-item[data-depth]) {\n padding-inline-start: var(--iris-nav-item-padding-inline-start);\n}\n\n:where(.iris-nav-menu-item:hover),\n:where(.iris-nav-menu-item.is-hovered):not([disabled], .is-disabled) {\n background: var(--iris-nav-item-hover);\n}\n\n.iris-nav-menu-item[data-active='true'] {\n background: var(--iris-primary);\n color: var(--iris-primary-foreground, #fff);\n font-weight: 600;\n}\n\n/* active 项的 hover 反馈:primary 加深变体(皮肤可用\n --iris-nav-item-active-hover 覆盖);特异度高于 :hover/:where 规则 */\n.iris-nav-menu-item[data-active='true']:hover,\n.iris-nav-menu-item[data-active='true'].is-hovered:not([disabled], .is-disabled) {\n background: var(--iris-nav-item-active-hover, color-mix(in srgb, var(--iris-primary) 88%, black));\n}\n\n:where(.iris-nav-menu-item[data-active-trail='true']) {\n color: var(--iris-primary);\n font-weight: 600;\n}\n\n:where(.iris-nav-menu-item[disabled], .iris-nav-menu-item.is-disabled) {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n:where(.iris-nav-menu-item:focus-visible) {\n outline: 2px solid var(--iris-ring, var(--iris-primary));\n outline-offset: 1px;\n}\n\n:where(.iris-nav-menu-label) {\n flex: 0 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n:where(.iris-nav-menu-badge) {\n margin-inline-start: var(--iris-space-xs, 8px);\n font-size: var(--iris-font-size-xs, 12px);\n line-height: 1;\n padding: var(--iris-space-xxs, 4px) var(--iris-space-xs, 8px);\n border-radius: 999px;\n background: var(--iris-danger, #ef4444);\n color: var(--iris-primary-foreground, #fff);\n flex: 0 0 auto;\n}\n\n:where(.iris-nav-menu-arrow) {\n flex: 0 0 auto;\n opacity: 0.6;\n transform: rotate(0deg);\n transform-origin: center;\n transition: transform 160ms ease;\n margin-inline-start: auto;\n}\n\n:where(.iris-nav-menu-arrow[data-reversed='true']) {\n transform: rotate(180deg);\n}\n\n:where(.iris-nav-menu-fallback-icon) {\n display: inline-flex;\n width: 20px;\n height: 20px;\n align-items: center;\n justify-content: center;\n font-weight: 700;\n}\n\n:where(.iris-nav-menu-item.is-disabled) .iris-nav-menu-label {\n opacity: 0.75;\n}\n\n/* Vertical branches stay in the DOM and animate height via the grid-rows\n trick (0fr → 1fr); the inner wrapper provides the overflow clipping so the\n transition is a smooth accordion without a max-height cap. */\n:where(.iris-nav-menu--vertical .iris-nav-menu-group > .iris-nav-menu-children) {\n display: grid;\n grid-template-rows: 0fr;\n opacity: 0;\n visibility: hidden;\n transition:\n grid-template-rows 200ms ease,\n opacity 150ms ease,\n visibility 0s linear 200ms;\n}\n\n:where(.iris-nav-menu--vertical .iris-nav-menu-group > .iris-nav-menu-children > .iris-nav-menu-children-inner) {\n overflow: hidden;\n min-height: 0;\n}\n\n:where(.iris-nav-menu--vertical .iris-nav-menu-group[data-open='true'] > .iris-nav-menu-children) {\n grid-template-rows: 1fr;\n opacity: 1;\n visibility: visible;\n transition:\n grid-template-rows 200ms ease,\n opacity 150ms ease;\n}\n\n/* Flyout popups (horizontal mode + the collapsed rail) share the popup chrome\n and are hard-hidden when closed (no height animation needed). */\n:where(.iris-nav-menu--horizontal .iris-nav-menu-group > .iris-nav-menu-children),\n:where(.iris-nav-menu--collapsed .iris-nav-menu-group > .iris-nav-menu-children) {\n display: none;\n position: absolute;\n min-width: 220px;\n padding: var(--iris-space-xs, 8px);\n border: 1px solid var(--iris-border);\n border-radius: var(--iris-radius-md, 6px);\n background: var(--iris-surface);\n box-shadow: var(--iris-shadow-md);\n}\n\n:where(.iris-nav-menu--horizontal .iris-nav-menu-group[data-open='true'] > .iris-nav-menu-children),\n:where(.iris-nav-menu--collapsed .iris-nav-menu-group[data-open='true'] > .iris-nav-menu-children) {\n display: block;\n}\n\n:where(.iris-nav-menu--horizontal .iris-nav-menu-group[data-depth='0'] > .iris-nav-menu-children) {\n inset-block-start: 100%;\n inset-inline-start: 0;\n z-index: 60;\n}\n\n/* A9: the collapsed rail popup opens to the right of the icon. */\n:where(.iris-nav-menu--collapsed .iris-nav-menu-group[data-depth='0'] > .iris-nav-menu-children) {\n inset-block-start: 0;\n inset-inline-start: 100%;\n z-index: 60;\n}\n\n:where(.iris-nav-menu--horizontal .iris-nav-menu-group[data-depth]:not([data-depth='0']) > .iris-nav-menu-children),\n:where(.iris-nav-menu--collapsed .iris-nav-menu-group[data-depth]:not([data-depth='0']) > .iris-nav-menu-children) {\n inset-block-start: 0;\n inset-inline-start: 100%;\n z-index: 61;\n}\n\n:where(.iris-nav-menu--collapsed .iris-nav-menu-item) {\n justify-content: center;\n padding-inline-start: var(--iris-nav-item-padding-inline);\n}\n\n:where(.iris-nav-menu-item.is-collapsed) {\n justify-content: center;\n padding-inline: var(--iris-nav-item-padding-inline);\n}\n\n/* A9: the collapsed rail stays centered even though rows carry data-depth\n (the vertical indent rules would otherwise win the specificity tie). */\n:where(.iris-nav-menu--collapsed .iris-nav-menu-item[data-depth]) {\n justify-content: center;\n padding-inline: var(--iris-nav-item-padding-inline);\n}\n\n@media (prefers-reduced-motion: reduce) {\n :where(.iris-nav-menu-arrow) {\n transition: none;\n }\n :where(.iris-nav-menu--vertical .iris-nav-menu-group > .iris-nav-menu-children) {\n transition: none;\n }\n}\n`.trim()\n\nlet installed = false\n\nexport function installNavMenuStyles(): void {\n if (installed) return\n if (typeof document === 'undefined') return\n if (document.getElementById(__NAV_MENU_STYLE_ID)) {\n installed = true\n return\n }\n const style = document.createElement('style')\n style.id = __NAV_MENU_STYLE_ID\n style.textContent = CSS\n document.head.appendChild(style)\n installed = true\n}\n\n/** Test-only: remove the singleton stylesheet and reset installation state. */\nexport function __resetNavMenuStyles(): void {\n installed = false\n if (typeof document !== 'undefined') {\n document.getElementById(__NAV_MENU_STYLE_ID)?.remove()\n }\n}\n","import { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport { findNavPath, isBranch, type NavNode } from '@iris-ui-kit/core'\n\n/**\n * Flyout interaction controller for IrisNavMenu (horizontal + collapsed\n * rail): hover open/close latencies, click pinning, pointer containment,\n * viewport pinning, and the keyboard-focus visibility model. Aligned with\n * ant-design-vue Menu menubar semantics (A2/A3/A6/A9/A10).\n */\nexport interface NavMenuFlyoutCtx {\n items: NavNode[]\n tree: { value: NavNode[] }\n expanded: { value: string[] }\n flyoutMode: { value: boolean }\n collapsed: boolean\n toggle: (key: string) => void\n emitSelect: (key: string, node: NavNode) => void\n}\n\nconst HOVER_OPEN_DELAY_VAL = 60\nconst HOVER_CLOSE_DELAY_VAL = 150\n\nexport function createNavMenuFlyout(ctx: NavMenuFlyoutCtx) {\n const hovered = ref<string | null>(null)\n const hoveredBranches = ref<string[]>([])\n const focusedBranches = ref<string[]>([])\n /** Branches pinned open by a click (horizontal mode) — sticky across hover. */\n const clickedBranches = ref<string[]>([])\n /** Set while Escape is returning focus to a trigger: the group focusin\n * handler must not re-open the flyout it just closed. */\n let suppressFocusOpen = false\n\n // Hover open/close latencies: a single open timer plus per-branch close\n // timers so fast pointer travel across branches never flickers a popup.\n let openTimer: ReturnType<typeof setTimeout> | null = null\n const closeTimers = new Map<string, ReturnType<typeof setTimeout>>()\n\n const clearOpenTimer = (): void => {\n if (openTimer) {\n clearTimeout(openTimer)\n openTimer = null\n }\n }\n const cancelClose = (key: string): void => {\n const timer = closeTimers.get(key)\n if (timer) {\n clearTimeout(timer)\n closeTimers.delete(key)\n }\n }\n const cancelAllTimers = (): void => {\n clearOpenTimer()\n for (const timer of closeTimers.values()) clearTimeout(timer)\n closeTimers.clear()\n }\n onBeforeUnmount(cancelAllTimers)\n\n // --- Flyout viewport pinning ----------------------------------------\n // Top-level flyout popups (horizontal + collapsed rail) are rendered\n // in-flow, but the admin shell hosts the rail inside scroll containers\n // (sidebar overflow) — plain `position: absolute` popups get clipped.\n // Pin each top-level popup to the viewport with `position: fixed` from\n // the trigger's rect and keep it glued while open via scroll/resize\n // listeners. Nested popups stay absolute: their containing block is the\n // already-pinned top-level popup.\n const flyoutTriggers = new Map<string, HTMLElement>()\n const flyoutPanels = new Map<string, HTMLElement>()\n\n const setFlyoutRef = (map: Map<string, HTMLElement>, key: string, el: unknown): void => {\n if (el instanceof HTMLElement) map.set(key, el)\n else map.delete(key)\n }\n\n const positionFlyout = (key: string): void => {\n const trigger = flyoutTriggers.get(key)\n const panel = flyoutPanels.get(key)\n if (!trigger || !panel || typeof document === 'undefined') return\n const rect = trigger.getBoundingClientRect()\n const dir = getComputedStyle(trigger).direction\n panel.style.position = 'fixed'\n panel.style.top = `${ctx.collapsed ? rect.top : rect.bottom}px`\n if (dir === 'rtl') {\n // Rail: popup opens on the inline-start side (left in RTL).\n panel.style.left = ''\n panel.style.right = `${window.innerWidth - (ctx.collapsed ? rect.left : rect.right)}px`\n } else {\n panel.style.right = ''\n panel.style.left = `${ctx.collapsed ? rect.right : rect.left}px`\n }\n }\n\n onBeforeUnmount(() => {\n detachViewportListeners()\n flyoutTriggers.clear()\n flyoutPanels.clear()\n })\n\n /** Menubar semantics: at most one flyout per depth. Opening (hover / click\n * / keyboard) a branch closes any other branch's popup at the same depth,\n * so a pinned popup never coexists with a sibling hover popup and clicking\n * a sibling branch visibly switches the open popup. */\n const isolateAtDepth = (key: string): void => {\n const depth = findNavPath(ctx.items, key).length - 1\n const isSameDepthOther = (k: string): boolean =>\n k !== key && findNavPath(ctx.items, k).length - 1 === depth\n for (const state of [hoveredBranches, clickedBranches, focusedBranches]) {\n if (state.value.some(isSameDepthOther)) {\n state.value = state.value.filter((k) => !isSameDepthOther(k))\n }\n }\n }\n\n const scheduleOpen = (key: string): void => {\n clearOpenTimer()\n openTimer = setTimeout(() => {\n openTimer = null\n isolateAtDepth(key)\n setBranchInteraction(hoveredBranches, key, true)\n }, HOVER_OPEN_DELAY_VAL)\n }\n const scheduleClose = (key: string): void => {\n cancelClose(key)\n closeTimers.set(\n key,\n setTimeout(() => {\n closeTimers.delete(key)\n setBranchInteraction(hoveredBranches, key, false)\n }, HOVER_CLOSE_DELAY_VAL),\n )\n }\n\n const closeHorizontalMenus = (): void => {\n if (!ctx.flyoutMode.value) return\n cancelAllTimers()\n hovered.value = null\n hoveredBranches.value = []\n focusedBranches.value = []\n clickedBranches.value = []\n }\n\n const select = (node: NavNode): void => {\n if (node.disabled) return\n closeHorizontalMenus()\n ctx.emitSelect(node.key, node)\n }\n\n /** Horizontal branch click: toggle the flyout without touching expandedKeys. */\n const toggleFlyout = (key: string): void => {\n cancelAllTimers()\n const current = clickedBranches.value\n if (current.includes(key)) {\n clickedBranches.value = current.filter((k) => k !== key)\n setBranchInteraction(hoveredBranches, key, false)\n setBranchInteraction(focusedBranches, key, false)\n } else {\n // Clicking a sibling branch switches the pinned popup (antd behavior).\n isolateAtDepth(key)\n clickedBranches.value = [...clickedBranches.value, key]\n }\n }\n\n /** Keyboard open: mark the branch as focused (instant, menubar pattern). */\n const openFlyout = (key: string): void => {\n cancelAllTimers()\n isolateAtDepth(key)\n setBranchInteraction(focusedBranches, key, true)\n }\n\n const setBranchInteraction = (\n state: typeof hoveredBranches,\n key: string,\n enabled: boolean,\n ): void => {\n const current = state.value\n if (enabled) {\n if (!current.includes(key)) state.value = [...current, key]\n } else if (current.includes(key)) {\n state.value = current.filter((item) => item !== key)\n }\n }\n\n const keepsPointerInside = (\n container: EventTarget | null,\n event: { relatedTarget?: EventTarget | null },\n ): boolean => {\n if (!container || !(container instanceof HTMLElement)) return false\n const next = event.relatedTarget\n return !!(next && next instanceof Node && container.contains(next))\n }\n\n const interactionKeyAtDepth = (keys: string[], depth: number): string | undefined =>\n keys.find((key) => findNavPath(ctx.items, key).length === depth + 1)\n\n const horizontalBranchVisible = (key: string, depth: number): boolean => {\n const hoveredAtDepth = interactionKeyAtDepth(hoveredBranches.value, depth)\n if (hoveredAtDepth) return hoveredAtDepth === key\n const clickedAtDepth = interactionKeyAtDepth(clickedBranches.value, depth)\n if (clickedAtDepth) return clickedAtDepth === key\n return interactionKeyAtDepth(focusedBranches.value, depth) === key\n }\n\n // Watch the set of currently-visible top-level flyouts: pin each to the\n // viewport as it opens and keep them glued via scroll/resize listeners.\n const shownFlyoutKeys = computed(() => {\n if (!ctx.flyoutMode.value) return []\n const keys: string[] = []\n for (const node of ctx.tree.value) {\n if (isBranch(node) && horizontalBranchVisible(node.key, 0)) keys.push(node.key)\n }\n return keys\n })\n\n const repositionOpenFlyouts = (): void => {\n for (const key of shownFlyoutKeys.value) positionFlyout(key)\n }\n\n let viewportListenersActive = false\n const attachViewportListeners = (): void => {\n if (viewportListenersActive || typeof document === 'undefined') return\n viewportListenersActive = true\n // Capture phase: sidebar/header scroll containers don't bubble scroll.\n document.addEventListener('scroll', repositionOpenFlyouts, true)\n window.addEventListener('resize', repositionOpenFlyouts)\n }\n const detachViewportListeners = (): void => {\n if (!viewportListenersActive || typeof document === 'undefined') return\n viewportListenersActive = false\n document.removeEventListener('scroll', repositionOpenFlyouts, true)\n window.removeEventListener('resize', repositionOpenFlyouts)\n }\n\n watch(\n shownFlyoutKeys,\n (keys, prev) => {\n if (keys.length > 0 && prev.length === 0) attachViewportListeners()\n else if (keys.length === 0 && prev.length > 0) detachViewportListeners()\n for (const key of keys) positionFlyout(key)\n },\n { flush: 'post' },\n )\n\n return {\n hovered,\n hoveredBranches,\n focusedBranches,\n clickedBranches,\n select,\n toggleFlyout,\n openFlyout,\n closeHorizontalMenus,\n setBranchInteraction,\n keepsPointerInside,\n interactionKeyAtDepth,\n horizontalBranchVisible,\n shownFlyoutKeys,\n setFlyoutRef,\n flyoutTriggers,\n flyoutPanels,\n suppressFocusOpen: { get: () => suppressFocusOpen },\n setSuppressFocusOpen: (value: boolean) => {\n suppressFocusOpen = value\n },\n cancelClose,\n scheduleOpen,\n scheduleClose,\n cancelAllTimers,\n }\n}\n","import type { NavNode } from '@iris-ui-kit/core'\nimport { findNavNode, findNavPath, isBranch } from '@iris-ui-kit/core'\nimport { nextTick, type Ref } from 'vue'\n\n/**\n * Keyboard navigation for IrisNavMenu (WAI-ARIA menu pattern, aligned with\n * ant-design-vue Menu): ArrowUp/Down/Home/End move focus, ArrowRight opens a\n * flyout branch and steps in, ArrowLeft/Up close, Escape closes flyouts and\n * returns focus to the trigger (A3/A4/A5).\n */\nexport interface NavMenuKeydownDeps {\n items: NavNode[]\n flyoutMode: () => boolean\n expanded: () => string[]\n toggle: (key: string) => void\n openFlyout: (key: string) => void\n closeHorizontalMenus: () => void\n horizontalBranchVisible: (key: string, depth: number) => boolean\n setBranchInteraction: (state: Ref<string[]>, key: string, enabled: boolean) => void\n focusedBranches: Ref<string[]>\n collapsed: boolean\n hoveredBranches: Ref<string[]>\n clickedBranches: Ref<string[]>\n suppressFocusOpen: () => boolean\n setSuppressFocusOpen: (value: boolean) => void\n}\n\nexport function createNavMenuKeydownHandler(deps: NavMenuKeydownDeps) {\n const {\n items,\n flyoutMode,\n expanded,\n toggle,\n openFlyout,\n closeHorizontalMenus,\n horizontalBranchVisible,\n setBranchInteraction,\n focusedBranches,\n collapsed,\n hoveredBranches,\n clickedBranches,\n setSuppressFocusOpen,\n } = deps\n\n return (e: KeyboardEvent): void => {\n const root = e.currentTarget as HTMLElement\n const buttons = Array.from(root.querySelectorAll<HTMLElement>('[data-iris-nav-item]')).filter(\n (button) => !button.closest('[data-iris-nav-children][aria-hidden=\"true\"]'),\n )\n if (buttons.length === 0) return\n const idx = buttons.indexOf(document.activeElement as HTMLElement)\n const focusAt = (i: number): void => buttons[(i + buttons.length) % buttons.length]?.focus()\n const key = idx >= 0 ? buttons[idx]?.getAttribute('data-key') : undefined\n const node = key ? findNavNode(items, key) : undefined\n const depth = idx >= 0 ? Number(buttons[idx]?.getAttribute('data-depth') ?? 0) : 0\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n // A4: flyout mode — Down on a branch opens its popup and steps in.\n if (flyoutMode() && node && isBranch(node)) {\n openFlyout(key!)\n const group = buttons[idx]!.closest('[data-iris-nav-group]')\n void nextTick(() => {\n group\n ?.querySelector<HTMLElement>('[data-iris-nav-children] [data-iris-nav-item]')\n ?.focus()\n })\n return\n }\n focusAt(idx < 0 ? 0 : idx + 1)\n return\n }\n case 'ArrowUp': {\n e.preventDefault()\n // A4: Up on an open flyout trigger closes it and keeps focus there\n // (clears the click-pinned state too, so ArrowUp closes pinned popups\n // exactly like ArrowLeft).\n if (flyoutMode() && node && isBranch(node) && horizontalBranchVisible(key!, depth)) {\n setBranchInteraction(focusedBranches, key!, false)\n setBranchInteraction(clickedBranches, key!, false)\n return\n }\n focusAt(idx < 0 ? buttons.length - 1 : idx - 1)\n return\n }\n case 'Home':\n e.preventDefault()\n buttons[0]?.focus()\n return\n case 'End':\n e.preventDefault()\n buttons[buttons.length - 1]?.focus()\n return\n case 'Escape': {\n // A3: Escape closes open flyouts and returns focus to the trigger.\n if (flyoutMode()) {\n const openKeys = [\n ...hoveredBranches.value,\n ...clickedBranches.value,\n ...focusedBranches.value,\n ]\n if (openKeys.length > 0) {\n e.preventDefault()\n const openTop = openKeys.find((k) => findNavPath(items, k).length === 1)\n closeHorizontalMenus()\n if (openTop) {\n setSuppressFocusOpen(true)\n buttons.find((b) => b.getAttribute('data-key') === openTop)?.focus()\n void nextTick(() => {\n setSuppressFocusOpen(false)\n })\n }\n }\n }\n return\n }\n }\n\n if (collapsed || idx < 0 || !key || !node) return\n\n if (e.key === 'ArrowRight') {\n e.preventDefault()\n if (isBranch(node)) {\n if (flyoutMode() || !expanded().includes(key)) {\n // A4 (flyout) / A5 (vertical): open and step into the first child.\n if (flyoutMode()) openFlyout(key)\n else toggle(key)\n const group = buttons[idx]!.closest('[data-iris-nav-group]')\n void nextTick(() => {\n group\n ?.querySelector<HTMLElement>('[data-iris-nav-children] [data-iris-nav-item]')\n ?.focus()\n })\n } else {\n focusAt(idx + 1)\n }\n }\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault()\n if (flyoutMode() && isBranch(node)) {\n setBranchInteraction(focusedBranches, key, false)\n setBranchInteraction(clickedBranches, key, false)\n return\n }\n if (isBranch(node) && expanded().includes(key)) {\n toggle(key)\n } else {\n const parentKey = findNavPath(items, key).at(-2)?.key\n if (parentKey) {\n buttons.find((b) => b.getAttribute('data-key') === parentKey)?.focus()\n }\n }\n }\n }\n}\n","import {\n computed,\n defineComponent,\n h,\n onBeforeUnmount,\n shallowRef,\n watch,\n type PropType,\n type VNode,\n} from 'vue'\nimport {\n branchTrail,\n createExpansion,\n findNavPath,\n isBranch,\n visibleNav,\n firstLeaf,\n type NavNode,\n} from '@iris-ui-kit/core'\nimport { IrisIcon } from '../primitives/icon/Icon'\nimport { useI18n } from '../i18n'\nimport { installNavMenuStyles } from './styles'\nimport { createNavMenuFlyout } from './NavMenuFlyout'\nimport { createNavMenuKeydownHandler } from './NavMenuKeyboard'\n\n/** Hover open/close latencies for flyouts (horizontal mode + collapsed rail). */\n\n/**\n * Data-driven nested navigation menu — the sidebar nav of the admin shell.\n * Renders a normalized `NavNode[]` tree as an accordion of expandable branches\n * and selectable leaves; the active leaf and its ancestor branches are\n * highlighted, and the active branch trail auto-expands. Router-agnostic: it\n * takes `activeKey` + emits `select(key, node)`; the host owns navigation.\n *\n * `collapsed` switches to an icon-only rail (top-level items only); hovering a\n * branch pops the full submenu flyout out to the right and a branch click\n * jumps to its first leaf.\n */\nexport const IrisNavMenu = defineComponent({\n name: 'IrisNavMenu',\n inheritAttrs: false,\n props: {\n /** Normalized nav tree. */\n items: { type: Array as PropType<NavNode[]>, required: true },\n /** Key of the active leaf. */\n activeKey: { type: String, default: undefined },\n /** Controlled expanded branch keys (v-model:expandedKeys). */\n expandedKeys: { type: Array as PropType<string[]>, default: undefined },\n /** Initial expanded keys when uncontrolled (else the active trail expands). */\n defaultExpandedKeys: { type: Array as PropType<string[]>, default: undefined },\n /** Icon-only rail (top-level items only). */\n collapsed: { type: Boolean, default: false },\n orientation: {\n type: String as PropType<'vertical' | 'horizontal'>,\n default: 'vertical',\n },\n ariaLabel: { type: String, default: undefined },\n },\n emits: {\n select: (_key: string, _node: NavNode) => true,\n 'update:expandedKeys': (_keys: string[]) => true,\n },\n setup(props, { emit, attrs }) {\n installNavMenuStyles()\n const { t } = useI18n()\n const tree = computed(() => visibleNav(props.items))\n const activePath = computed(() =>\n props.activeKey ? findNavPath(props.items, props.activeKey).map((n) => n.key) : [],\n )\n\n // Branches with flyouts (horizontal popups + the collapsed rail popup) use\n // the hover/focus/click state instead of the vertical expansion model.\n const flyoutMode = computed(() => props.orientation === 'horizontal' || props.collapsed)\n\n const isControlled = computed(() => props.expandedKeys !== undefined)\n\n // The expand/collapse set — toggle, dedup and the active-trail union — lives in\n // the core expansion model; this component only layers on the controlled /\n // uncontrolled split. v-model here is *strict*: while controlled, rendering\n // reads the `expandedKeys` prop (not the store) so a toggle stays closed until\n // the parent updates it. The model therefore backs the uncontrolled state, and\n // `branchTrail` feeds the auto-open union through `merge`.\n const model = createExpansion({\n mode: 'multiple',\n defaultExpanded:\n props.defaultExpandedKeys ??\n (props.activeKey ? branchTrail(props.items, props.activeKey) : []),\n })\n const internalExpanded = shallowRef<string[]>(model.get())\n onBeforeUnmount(\n model.store.subscribe((keys) => {\n internalExpanded.value = keys\n }),\n )\n const expanded = computed(() =>\n isControlled.value ? (props.expandedKeys as string[]) : internalExpanded.value,\n )\n\n // Auto-open the active branch trail as the active leaf changes *or as the\n // tree arrives late* (async navigation data: the mount-time seed may have\n // seen `items = []`). `merge` is a union, so manual collapses survive and\n // repeated pushes are idempotent.\n watch([() => props.activeKey, () => props.items], ([key]) => {\n if (!isControlled.value) model.merge(key ? branchTrail(props.items, key) : [])\n })\n\n const toggle = (key: string): void => {\n if (isControlled.value) {\n const cur = props.expandedKeys as string[]\n emit(\n 'update:expandedKeys',\n cur.includes(key) ? cur.filter((k) => k !== key) : [...cur, key],\n )\n } else {\n model.toggle(key)\n emit('update:expandedKeys', model.get())\n }\n }\n\n // Flyout 状态机(hover/click 钉住/视口定位/键盘可见性)——NavMenuFlyout.ts\n const flyout = createNavMenuFlyout({\n items: props.items,\n tree,\n expanded,\n flyoutMode: { value: flyoutMode.value },\n collapsed: props.collapsed,\n toggle,\n emitSelect: (key: string, node: NavNode) => emit('select', key, node),\n })\n const {\n hovered,\n hoveredBranches,\n focusedBranches,\n clickedBranches,\n select,\n toggleFlyout,\n openFlyout,\n closeHorizontalMenus,\n setBranchInteraction,\n keepsPointerInside,\n horizontalBranchVisible,\n setFlyoutRef,\n flyoutTriggers,\n flyoutPanels,\n suppressFocusOpen,\n cancelClose,\n scheduleOpen,\n scheduleClose,\n } = flyout\n const itemClass = (opts: {\n depth: number\n active: boolean\n trail: boolean\n hovered: boolean\n open: boolean\n disabled: boolean\n branch: boolean\n }): string[] => {\n const depth = Math.min(9, opts.depth)\n return [\n 'iris-nav-menu-item',\n `iris-nav-menu-item--depth-${depth}`,\n `iris-nav-menu-item--${opts.branch ? 'branch' : 'leaf'}`,\n opts.active ? 'is-active' : undefined,\n opts.trail ? 'is-trail' : undefined,\n opts.hovered ? 'is-hovered' : undefined,\n opts.open ? 'is-open' : undefined,\n opts.disabled ? 'is-disabled' : undefined,\n ].filter(Boolean) as string[]\n }\n\n const iconNode = (node: NavNode, size = 18): VNode | null =>\n node.icon ? h(IrisIcon, { name: node.icon, size }) : null\n\n const badgeNode = (node: NavNode): VNode | null =>\n node.badge !== undefined && node.badge !== '' && !props.collapsed\n ? h(\n 'span',\n {\n class: 'iris-nav-menu-badge',\n 'data-iris-nav-badge': '',\n },\n String(node.badge),\n )\n : null\n\n const renderItem = (node: NavNode, depth: number): VNode => {\n const branch = isBranch(node)\n const horizontal = flyoutMode.value\n const open = expanded.value.includes(node.key)\n const shown = horizontal ? horizontalBranchVisible(node.key, depth) : open\n const active = node.key === props.activeKey\n const trail = branch && !active && activePath.value.includes(node.key)\n // A6: keep the row highlighted while its flyout stays open (pointer has\n // moved from the trigger into the popup).\n const rowHovered = hovered.value === node.key || (horizontal && shown)\n const arrowReversed = branch && !node.disabled && (active || trail || shown || rowHovered)\n\n // Top-level flyout popups are pinned to the viewport (fixed) so they\n // escape ancestor overflow; their trigger + panel refs feed that.\n const isFlyoutRoot = horizontal && branch && depth === 0\n\n const row = h(\n 'button',\n {\n type: 'button',\n ref: (el: unknown) => {\n if (isFlyoutRoot) setFlyoutRef(flyoutTriggers, node.key, el)\n },\n class: [\n ...itemClass({\n depth,\n active,\n trail,\n hovered: rowHovered,\n open: branch ? shown : false,\n disabled: !!node.disabled,\n branch,\n }),\n ...(props.collapsed && depth === 0 ? ['is-collapsed'] : []),\n ],\n 'data-iris-nav-item': '',\n 'data-key': node.key,\n 'data-branch': branch ? 'true' : undefined,\n 'data-active': active ? 'true' : undefined,\n 'data-active-trail': trail ? 'true' : undefined,\n 'data-open': branch && shown ? 'true' : undefined,\n 'data-hovered': rowHovered ? 'true' : undefined,\n 'data-depth': String(depth),\n 'data-orientation': props.orientation,\n disabled: node.disabled,\n title: props.collapsed ? node.title : undefined,\n 'aria-label': props.collapsed\n ? branch\n ? `${node.title} (section)`\n : node.title\n : undefined,\n 'aria-expanded': branch ? (shown ? 'true' : 'false') : undefined,\n 'aria-current': active ? 'page' : undefined,\n onMouseenter: () => {\n if (!node.disabled) hovered.value = node.key\n },\n onMouseleave: (event: MouseEvent) => {\n if (hovered.value === node.key && !keepsPointerInside(event.currentTarget, event)) {\n hovered.value = null\n }\n },\n onClick: () => {\n if (props.collapsed && branch) {\n select(firstLeaf(node))\n } else if (horizontal && branch) {\n // A2: horizontal clicks drive the flyout, not the expansion set.\n toggleFlyout(node.key)\n } else if (branch) {\n toggle(node.key)\n } else {\n select(node)\n }\n },\n },\n [\n iconNode(node),\n h(\n 'span',\n {\n class: 'iris-nav-menu-label',\n },\n node.title,\n ),\n badgeNode(node),\n branch && !(props.collapsed && depth === 0)\n ? h(IrisIcon, {\n name:\n horizontal && depth === 0 && !props.collapsed ? 'chevron-down' : 'chevron-right',\n size: 16,\n class: 'iris-nav-menu-arrow',\n 'data-reversed': arrowReversed ? 'true' : undefined,\n })\n : null,\n ],\n )\n\n // Children are always in the DOM (vertical: animated height via CSS;\n // horizontal/collapsed: flyout popups); `aria-hidden` keeps hidden items\n // out of the a11y tree and out of arrow-key navigation.\n return h(\n 'div',\n {\n key: node.key,\n 'data-iris-nav-group': branch ? '' : undefined,\n 'data-open': branch && shown ? 'true' : undefined,\n 'data-depth': String(depth),\n class: ['iris-nav-menu-group', `iris-nav-menu-group--depth-${Math.min(9, depth)}`],\n ...(horizontal && branch\n ? {\n onMouseenter: (event: MouseEvent) => {\n if (!node.disabled && !keepsPointerInside(event.currentTarget, event)) {\n cancelClose(node.key)\n scheduleOpen(node.key)\n }\n },\n onMouseover: (event: MouseEvent) => {\n if (!node.disabled && !keepsPointerInside(event.currentTarget, event)) {\n cancelClose(node.key)\n scheduleOpen(node.key)\n }\n },\n onMouseout: (event: MouseEvent) => {\n if (!node.disabled && !keepsPointerInside(event.currentTarget, event)) {\n scheduleClose(node.key)\n }\n },\n onMouseleave: (event: MouseEvent) => {\n if (!node.disabled && !keepsPointerInside(event.currentTarget, event)) {\n scheduleClose(node.key)\n }\n },\n onFocusin: () => {\n if (suppressFocusOpen.get()) return\n setBranchInteraction(focusedBranches, node.key, true)\n },\n onFocusout: (event: FocusEvent) => {\n const group = event.currentTarget as HTMLElement\n const next = event.relatedTarget as Node | null\n if (!next || !group.contains(next)) {\n setBranchInteraction(focusedBranches, node.key, false)\n }\n },\n }\n : {}),\n },\n [\n row,\n branch\n ? h(\n 'div',\n {\n class: 'iris-nav-menu-children',\n 'data-iris-nav-children': '',\n ref: (el: unknown) => {\n if (isFlyoutRoot) setFlyoutRef(flyoutPanels, node.key, el)\n },\n role: 'group',\n 'aria-hidden': shown ? undefined : 'true',\n },\n [\n h(\n 'div',\n { class: 'iris-nav-menu-children-inner' },\n (node.children ?? []).map((child) => renderItem(child, depth + 1)),\n ),\n ],\n )\n : null,\n ],\n )\n }\n\n // Keep the active item in view when the tree or active key changes (deep\n // links into long menus). jsdom-safe: no scrollIntoView / matchMedia there.\n const rootRef = shallowRef<HTMLElement | null>(null)\n watch(\n [() => props.activeKey, () => props.items],\n () => {\n if (!props.activeKey) return\n const root = rootRef.value\n if (!root) return\n const el = root.querySelector<HTMLElement>('[data-iris-nav-item][data-active=\"true\"]')\n if (!el || typeof el.scrollIntoView !== 'function') return\n let behavior: ScrollBehavior = 'auto'\n if (\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n !window.matchMedia('(prefers-reduced-motion: reduce)').matches\n ) {\n behavior = 'smooth'\n }\n el.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior })\n },\n { flush: 'post' },\n )\n\n // Arrow-key navigation over the visible items (Tab still works as a fallback).\n // Up/Down/Home/End move focus; Right expands a branch then steps into it;\n // Left collapses an open branch else moves to the parent. In flyout mode\n // (horizontal / collapsed) Down/Right open the popup and step into it,\n // Up/Left close it, and Escape closes everything (focus returns to the\n // owning top-level trigger).\n // 键盘导航(A3/A4/A5 + Up/Down/Home/End)——见 NavMenuKeyboard.ts\n const onKeydown = createNavMenuKeydownHandler({\n items: props.items,\n flyoutMode: () => flyoutMode.value,\n expanded: () => expanded.value,\n toggle,\n openFlyout,\n closeHorizontalMenus,\n horizontalBranchVisible,\n setBranchInteraction,\n focusedBranches,\n hoveredBranches,\n clickedBranches,\n suppressFocusOpen: () => suppressFocusOpen.get(),\n setSuppressFocusOpen: (v: boolean) => {\n flyout.setSuppressFocusOpen(v)\n },\n collapsed: props.collapsed,\n })\n const menuClass = [\n 'iris-nav-menu',\n `iris-nav-menu--${props.orientation}`,\n props.collapsed ? 'iris-nav-menu--collapsed' : 'iris-nav-menu--expanded',\n ]\n return () =>\n h(\n 'nav',\n {\n ...attrs,\n ref: (el: unknown) => {\n rootRef.value = (el ?? null) as HTMLElement | null\n },\n class: [...menuClass, attrs.class as unknown as string | string[] | undefined],\n 'data-iris-nav-menu': '',\n 'data-collapsed': props.collapsed ? 'true' : undefined,\n 'data-orientation': props.orientation,\n 'aria-label': props.ariaLabel ?? t('admin.nav'),\n onKeydown,\n style: attrs.style as Record<string, string> | undefined,\n },\n tree.value.map((node) => renderItem(node, 0)),\n )\n },\n})\n","import { Fragment, defineComponent, h, type VNode } from 'vue'\nimport { useI18n } from '../../i18n'\n\n/**\n * Container for breadcrumb navigation. Renders a `<nav>` with `<ol>` per\n * WAI-ARIA. The `separator` slot (or prop) is inserted between items;\n * defaults to `/`.\n *\n * Children should be `IrisBreadcrumbItem`s.\n */\nexport const IrisBreadcrumb = defineComponent({\n name: 'IrisBreadcrumb',\n inheritAttrs: false,\n props: {\n /** String separator. Ignored if the `separator` slot is provided. */\n separator: { type: String, default: '/' },\n },\n setup(props, { slots, attrs }) {\n const { t } = useI18n()\n return () => {\n const children = slots.default?.() ?? []\n // Flatten Fragment / array children to a flat list of VNodes.\n const flat: VNode[] = []\n const walk = (nodes: VNode[] | undefined) => {\n if (!nodes) return\n nodes.forEach((n) => {\n if (n.type === Fragment) walk(n.children as VNode[])\n else flat.push(n)\n })\n }\n walk(children as VNode[])\n\n const total = flat.length\n const slotsSep = slots.separator\n const sep = (key: number) =>\n h(\n 'li',\n {\n key: `sep-${key}`,\n 'data-iris-breadcrumb-separator': '',\n 'aria-hidden': 'true',\n style: { color: 'var(--iris-muted)', display: 'inline-flex', alignItems: 'center' },\n },\n slotsSep ? slotsSep() : props.separator,\n )\n\n const items: VNode[] = []\n flat.forEach((child, i) => {\n // Inject is-last hint so the item can self-mark as `aria-current=page`.\n const isLast = i === total - 1\n const wrapped = h(\n 'li',\n {\n key: `item-${i}`,\n 'data-iris-breadcrumb-item': '',\n 'data-iris-breadcrumb-last': isLast ? 'true' : undefined,\n style: { display: 'inline-flex', alignItems: 'center' },\n },\n // Pass isCurrent=true to the last child so it self-marks aria-current.\n h(\n child.type as never,\n { ...(child.props ?? {}), isCurrent: isLast } as Record<string, unknown>,\n child.children as never,\n ),\n )\n items.push(wrapped)\n if (!isLast) items.push(sep(i))\n })\n\n return h(\n 'nav',\n {\n ...attrs,\n 'aria-label': t('breadcrumb.label'),\n 'data-iris-breadcrumb': '',\n },\n h(\n 'ol',\n {\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--iris-space-xs, 8px)',\n margin: '0',\n padding: '0',\n listStyle: 'none',\n fontSize: 'var(--iris-font-size-md, 14px)',\n },\n },\n items,\n ),\n )\n }\n },\n})\n","import { defineComponent, h } from 'vue'\n\n/**\n * A single breadcrumb crumb. Renders an `<a>` when `href` is given and the\n * crumb is not the last one; otherwise a `<span>`.\n *\n * The `isCurrent` flag (set by the parent IrisBreadcrumb based on position)\n * adds `aria-current=\"page\"` and switches to the non-link rendering.\n */\nexport const IrisBreadcrumbItem = defineComponent({\n name: 'IrisBreadcrumbItem',\n inheritAttrs: false,\n props: {\n href: { type: String, default: '' },\n /** Internal: set by parent IrisBreadcrumb when this is the last item. */\n isCurrent: { type: Boolean, default: false },\n },\n setup(props, { slots, attrs }) {\n return () => {\n const last = props.isCurrent\n const baseStyle: Record<string, string> = {\n color: last ? 'var(--iris-muted)' : 'var(--iris-primary)',\n textDecoration: 'none',\n cursor: last ? 'default' : props.href ? 'pointer' : 'default',\n }\n\n const baseAttrs = {\n ...attrs,\n 'aria-current': last ? 'page' : undefined,\n 'data-iris-breadcrumb-crumb': '',\n style: { ...baseStyle, ...((attrs.style as Record<string, string> | undefined) ?? {}) },\n }\n\n if (props.href && !last) {\n return h('a', { ...baseAttrs, href: props.href }, slots.default?.())\n }\n return h('span', baseAttrs, slots.default?.())\n }\n },\n})\n","import { defineComponent, h, type PropType, type VNode } from 'vue'\nimport type { NavNode } from '@iris-ui-kit/core'\nimport { IrisBreadcrumb } from '../primitives/breadcrumb/Breadcrumb'\nimport { IrisBreadcrumbItem } from '../primitives/breadcrumb/BreadcrumbItem'\nimport { IrisIcon } from '../primitives/icon/Icon'\n\n/**\n * Breadcrumb trail for the admin header, driven by a `NavNode[]` ancestor chain\n * (typically `findNavPath(menus, activeKey)`). The last crumb is the current\n * page (auto-marked `aria-current` by IrisBreadcrumb); earlier crumbs are\n * clickable and emit `select(key, node)` so the host can navigate.\n */\nexport const IrisAdminBreadcrumb = defineComponent({\n name: 'IrisAdminBreadcrumb',\n inheritAttrs: false,\n props: {\n /** Root→current ancestor chain. */\n trail: { type: Array as PropType<NavNode[]>, required: true },\n /** Show each node's icon before its title. */\n showIcon: { type: Boolean, default: true },\n /** Hide the breadcrumb when the trail has a single crumb. */\n hideSingle: { type: Boolean, default: false },\n separator: { type: String, default: '/' },\n },\n emits: {\n select: (_key: string, _node: NavNode) => true,\n },\n setup(props, { emit, attrs }) {\n return () => {\n const trail = props.trail\n if (trail.length === 0 || (props.hideSingle && trail.length === 1)) return null\n\n return h(\n IrisBreadcrumb,\n { ...attrs, separator: props.separator },\n {\n default: () =>\n trail.map((node, i) => {\n const last = i === trail.length - 1\n const content: VNode[] = []\n if (props.showIcon && node.icon) {\n content.push(\n h(IrisIcon, { name: node.icon, size: 14, style: { marginInlineEnd: '4px' } }),\n )\n }\n content.push(h('span', node.title))\n return h(\n IrisBreadcrumbItem,\n {\n key: node.key,\n 'data-iris-admin-crumb': '',\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n cursor: last ? 'default' : 'pointer',\n },\n onClick: last ? undefined : () => emit('select', node.key, node),\n },\n { default: () => content },\n )\n }),\n },\n )\n }\n },\n})\n","import { computed, onBeforeUnmount, ref, type ComputedRef, type Ref } from 'vue'\nimport type { TabsNav, TabsNavState, TabItem } from '@iris-ui-kit/core'\n\nexport interface UseTabsNavReturn {\n tabs: ComputedRef<TabItem[]>\n activeKey: ComputedRef<string | undefined>\n /** Keep-alive include-set (composite cache keys of all open tabs). */\n cacheKeys: ComputedRef<string[]>\n open: TabsNav['open']\n activate: TabsNav['activate']\n close: TabsNav['close']\n closeOthers: TabsNav['closeOthers']\n closeAll: TabsNav['closeAll']\n closeLeft: TabsNav['closeLeft']\n closeRight: TabsNav['closeRight']\n refresh: TabsNav['refresh']\n setPinned: TabsNav['setPinned']\n move: TabsNav['move']\n cacheKey: TabsNav['cacheKey']\n}\n\n/**\n * Vue binding for a framework-agnostic {@link TabsNav} store. Pass a shared\n * `createTabsNav()` instance (the host owns it so the tab bar and the keep-alive\n * content can read the same state) and get reactive `tabs` / `activeKey` /\n * `cacheKeys` plus the store's mutators.\n *\n * ```ts\n * const nav = createTabsNav({ tabs: [{ key: 'home', title: 'Home', pinned: true }] })\n * const { tabs, activeKey, open, close } = useTabsNav(nav)\n * ```\n */\nexport function useTabsNav(nav: TabsNav): UseTabsNavReturn {\n const state = ref(nav.getState()) as Ref<TabsNavState>\n const unsubscribe = nav.subscribe((next) => {\n state.value = next\n })\n onBeforeUnmount(unsubscribe)\n\n return {\n tabs: computed(() => state.value.tabs),\n activeKey: computed(() => state.value.activeKey),\n cacheKeys: computed(() => state.value.tabs.map((t) => nav.cacheKey(t.key))),\n open: nav.open,\n activate: nav.activate,\n close: nav.close,\n closeOthers: nav.closeOthers,\n closeAll: nav.closeAll,\n closeLeft: nav.closeLeft,\n closeRight: nav.closeRight,\n refresh: nav.refresh,\n setPinned: nav.setPinned,\n move: nav.move,\n cacheKey: nav.cacheKey,\n }\n}\n","import { onScopeDispose, ref, type Ref } from 'vue'\nimport type { Machine, MachineEvent, MachineState } from '@iris-ui-kit/core'\n\n/**\n * Bridge a framework-agnostic `Machine` into Vue reactivity.\n *\n * Returns a reactive ref of the current `{ value, context }` state and a\n * stable `send` function. Subscription is created eagerly and cleaned up on\n * scope dispose, so this hook is safe to call from any component's `setup()`.\n *\n * Teardown semantics: when the owning scope is disposed (component unmount,\n * `effectScope().stop()`, end of SSR render), the store subscription is\n * detached AND — by default — `machine.stop()` is called: pending `after`\n * timers are cancelled and further `send` calls become no-ops, so a delayed\n * transition can never fire into a disposed consumer (see the core `Machine`\n * contract). Pass `{ stopOnUnmount: false }` only when the machine is shared\n * with other consumers that outlive this scope — the subscription is still\n * detached, the machine keeps running.\n */\nexport function useMachine<TState extends string, TContext, TEvent extends MachineEvent>(\n machine: Machine<TState, TContext, TEvent>,\n options: { stopOnUnmount?: boolean } = {},\n): {\n state: Ref<MachineState<TState, TContext>>\n send: (event: TEvent) => void\n} {\n const state = ref(machine.store.getState()) as Ref<MachineState<TState, TContext>>\n const unsubscribe = machine.store.subscribe((next) => {\n state.value = next\n })\n onScopeDispose(\n () => {\n // Detach the bridge first (conservative order), then stop the machine.\n unsubscribe()\n if (options.stopOnUnmount !== false) machine.stop()\n },\n // failSilently: outside any effect scope there is nothing to dispose —\n // registering is a no-op and must not emit the \"no active effect scope\"\n // dev warning. Within a component/effectScope this arg changes nothing.\n true,\n )\n return { state, send: machine.send }\n}\n","import type { ComputedRef, InjectionKey, Ref } from 'vue'\nimport type { Placement } from '@iris-ui-kit/core'\n\nexport interface DropdownContext {\n open: ComputedRef<boolean>\n setOpen: (value: boolean) => void\n triggerRef: Ref<HTMLElement | null>\n contentRef: Ref<HTMLElement | null>\n contentId: string\n placement: Placement\n offset: number\n}\n\nexport const DropdownContextKey: InjectionKey<DropdownContext> = Symbol('IrisDropdown')\n","import { computed, defineComponent, provide, ref, useId, watch, type PropType } from 'vue'\nimport { createFloatingMachine, type Placement } from '@iris-ui-kit/core'\nimport { useMachine } from '../../machine/useMachine'\nimport { DropdownContextKey } from './context'\n\n/**\n * Dropdown menu root. Composes `createFloatingMachine` (state) with\n * `useFloating` (positioning) and `useDismiss` (close-on-outside / Escape) —\n * all delegated to the standard hooks used by `IrisPopover`. The dropdown\n * panel's semantics differ from a popover: it uses `role=\"menu\"`, supports\n * arrow-key navigation among items, and items auto-close the menu when\n * selected.\n *\n * @example\n * <IrisDropdown placement=\"bottom-end\">\n * <IrisDropdownTrigger as-child>\n * <IrisButton>Actions</IrisButton>\n * </IrisDropdownTrigger>\n * <IrisDropdownMenu>\n * <IrisDropdownItem @select=\"onCopy\">Copy</IrisDropdownItem>\n * <IrisDropdownItem @select=\"onDelete\">Delete</IrisDropdownItem>\n * </IrisDropdownMenu>\n * </IrisDropdown>\n */\nexport const IrisDropdown = defineComponent({\n name: 'IrisDropdown',\n props: {\n open: { type: Boolean, default: undefined },\n defaultOpen: { type: Boolean, default: false },\n placement: { type: String as PropType<Placement>, default: 'bottom-start' },\n offset: { type: Number, default: 6 },\n },\n emits: {\n 'update:open': (_value: boolean) => true,\n },\n setup(props, { slots, emit }) {\n const isControlled = computed(() => props.open !== undefined)\n const machine = createFloatingMachine(props.defaultOpen ? 'open' : 'closed')\n const { state, send } = useMachine(machine)\n\n watch(\n () => props.open,\n (value) => {\n if (value === undefined) return\n const currentlyOpen = state.value.value === 'open'\n if (value && !currentlyOpen) send({ type: 'OPEN' })\n if (!value && currentlyOpen) send({ type: 'CLOSE' })\n },\n { immediate: true },\n )\n\n const open = computed(() =>\n isControlled.value ? Boolean(props.open) : state.value.value === 'open',\n )\n\n const setOpen = (value: boolean) => {\n if (!isControlled.value) send({ type: value ? 'OPEN' : 'CLOSE' })\n emit('update:open', value)\n }\n\n provide(DropdownContextKey, {\n open,\n setOpen,\n triggerRef: ref(null),\n contentRef: ref(null),\n contentId: useId(),\n placement: props.placement,\n offset: props.offset,\n })\n\n return () => slots.default?.()\n },\n})\n","import { defineComponent, Fragment, h, type VNode } from 'vue'\nimport { composeEventHandlers } from '@iris-ui-kit/core'\n\n/** Test whether a prop key looks like a Vue event listener: `onXxx`. */\nfunction isEventListenerKey(key: string): boolean {\n return key.startsWith('on') && key.length > 2 && /[A-Z]/.test(key.charAt(2))\n}\n\n/**\n * Compose multiple Vue template refs into a single function ref. Each input\n * may be a `Ref<HTMLElement | null>`, a function ref `(el) => void`, or null.\n * All non-null inputs are invoked / assigned with the same element.\n */\nexport function composeRefs(...refs: Array<unknown>): (el: unknown) => void {\n return (el: unknown) => {\n for (const r of refs) {\n if (r == null) continue\n if (typeof r === 'function') {\n ;(r as (el: unknown) => void)(el)\n } else if (typeof r === 'object' && 'value' in (r as object)) {\n ;(r as { value: unknown }).value = el\n }\n }\n }\n}\n\n/**\n * Merge parent (slot) props onto a child VNode's props with Radix-style\n * semantics:\n *\n * - **Event handlers (`on*`)**: composed via `composeEventHandlers` — the\n * parent's handler runs first; if it calls `event.preventDefault()`, the\n * child's handler is skipped. This lets the parent intercept (e.g. when\n * IrisButton is `disabled`).\n * - **`class`**: concatenated, parent first.\n * - **`style`**: shallow-merged, child wins on key conflicts.\n * - **Anything else**: child wins (the user's explicit prop is authoritative).\n */\nexport function mergeSlotProps(\n parent: Record<string, unknown>,\n child: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = { ...child }\n\n for (const key in parent) {\n const parentVal = parent[key]\n const childVal = child[key]\n\n if (isEventListenerKey(key)) {\n if (typeof parentVal === 'function' && typeof childVal === 'function') {\n out[key] = composeEventHandlers(\n parentVal as (e: { defaultPrevented: boolean }) => void,\n childVal as (e: { defaultPrevented: boolean }) => void,\n )\n } else if (typeof parentVal === 'function' && childVal == null) {\n out[key] = parentVal\n }\n // If only child has it, child wins (already in `out`).\n } else if (key === 'ref') {\n if (parentVal != null && childVal != null) {\n out[key] = composeRefs(parentVal, childVal)\n } else if (parentVal != null) {\n out[key] = parentVal\n }\n // If only child has a ref, child wins (already in `out`).\n } else if (key === 'class') {\n const merged = [parentVal, childVal].filter(Boolean).join(' ').trim()\n if (merged) out[key] = merged\n } else if (key === 'style') {\n if (parentVal || childVal) {\n out[key] = { ...(parentVal as object | undefined), ...(childVal as object | undefined) }\n }\n } else if (!(key in child)) {\n out[key] = parentVal\n }\n // else: non-handler, present in both — child wins (already in `out`).\n }\n\n return out\n}\n\n/**\n * Polymorphic root helper. Renders the user's single child VNode with the\n * parent's attrs merged onto it via `mergeSlotProps`.\n *\n * Inspired by Radix UI's `<Slot>`. Used by primitives that need to render\n * \"as\" the user's child element instead of their own default element.\n *\n * **Limitation (intentional in this iteration)**: template `ref`s placed on\n * the slotted child are not forwarded. Use a wrapping element or wait for a\n * future iteration.\n *\n * @example\n * <IrisSlot class=\"iris-button\" data-iris-button-variant=\"solid\">\n * <RouterLink to=\"/save\">Save</RouterLink>\n * </IrisSlot>\n * // → <RouterLink class=\"iris-button\" data-iris-button-variant=\"solid\" to=\"/save\">Save</RouterLink>\n */\nexport const IrisSlot = defineComponent({\n name: 'IrisSlot',\n inheritAttrs: false,\n setup(_, { slots, attrs }) {\n return () => {\n const children = slots.default?.()\n const root = findFirstElement(children)\n if (!root) {\n if (typeof process === 'undefined' || process.env?.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisSlot expected exactly one child element; got none.')\n }\n return null\n }\n const merged = mergeSlotProps(\n attrs as Record<string, unknown>,\n (root.props ?? {}) as Record<string, unknown>,\n )\n return h(root.type as string, merged, root.children as unknown as VNode[])\n }\n },\n})\n\n/**\n * Walk a VNode array (which may contain Fragments / Comments / Text) and\n * return the first usable element VNode. Warns in dev if there are multiple\n * sibling roots.\n */\nexport function findFirstElement(children: VNode[] | undefined): VNode | null {\n if (!children || children.length === 0) return null\n\n let found: VNode | null = null\n let extraCount = 0\n\n const walk = (nodes: VNode[]) => {\n for (const node of nodes) {\n if (node.type === Fragment) {\n const fragChildren = Array.isArray(node.children) ? (node.children as VNode[]) : []\n walk(fragChildren)\n continue\n }\n if (\n typeof node.type === 'string' ||\n typeof node.type === 'object' ||\n typeof node.type === 'function'\n ) {\n if (found) {\n extraCount += 1\n } else {\n found = node\n }\n }\n }\n }\n walk(children)\n\n if (\n extraCount > 0 &&\n (typeof process === 'undefined' || process.env?.NODE_ENV !== 'production')\n ) {\n console.warn(`[iris-ui] IrisSlot got ${extraCount + 1} root elements; only the first is used.`)\n }\n\n return found\n}\n","import { defineComponent, h, inject, type VNode } from 'vue'\nimport { findFirstElement, mergeSlotProps } from '../slot/Slot'\nimport { DropdownContextKey } from './context'\n\nexport const IrisDropdownTrigger = defineComponent({\n name: 'IrisDropdownTrigger',\n inheritAttrs: false,\n props: {\n asChild: { type: Boolean, default: false },\n },\n setup(props, { slots, attrs }) {\n const ctx = inject(DropdownContextKey)\n if (!ctx) {\n throw new Error('[iris-ui] IrisDropdownTrigger must be a descendant of IrisDropdown')\n }\n\n const onClick = (event: MouseEvent) => {\n if (event.defaultPrevented) return\n ctx.setOpen(!ctx.open.value)\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n // Pressing ArrowDown / Enter / Space on the trigger opens AND focuses the menu.\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n ctx.setOpen(true)\n }\n }\n\n const captureRef = (el: unknown) => {\n ctx.triggerRef.value = (el ?? null) as HTMLElement | null\n }\n\n return () => {\n const triggerProps: Record<string, unknown> = {\n 'aria-haspopup': 'menu',\n 'aria-expanded': ctx.open.value ? 'true' : 'false',\n 'aria-controls': ctx.contentId,\n 'data-state': ctx.open.value ? 'open' : 'closed',\n onClick,\n onKeydown: onKeyDown,\n ref: captureRef,\n }\n\n if (props.asChild) {\n const root = findFirstElement(slots.default?.())\n if (!root) {\n if (typeof process === 'undefined' || process.env?.NODE_ENV !== 'production') {\n console.warn('[iris-ui] IrisDropdownTrigger: as-child requires a single child element')\n }\n return null\n }\n const merged = mergeSlotProps(\n { ...triggerProps, ...attrs },\n (root.props ?? {}) as Record<string, unknown>,\n )\n return h(root.type as string, merged, root.children as unknown as VNode[])\n }\n\n return h('button', { type: 'button', ...attrs, ...triggerProps }, slots.default?.())\n }\n },\n})\n","import { computed, onScopeDispose, ref, shallowRef, watch, type ComputedRef, type Ref } from 'vue'\nimport {\n autoUpdate,\n computePosition,\n arrow as arrowMiddleware,\n flip as flipMiddleware,\n offset as offsetMiddleware,\n shift as shiftMiddleware,\n size as sizeMiddleware,\n type Middleware,\n type Placement,\n type Strategy,\n} from '@floating-ui/dom'\n\nexport interface UseFloatingOptions {\n /** Element the floating panel is positioned relative to. */\n anchor: Ref<HTMLElement | null | undefined>\n /** The floating element itself. */\n floating: Ref<HTMLElement | null | undefined>\n /** Whether the floating element is visible. Controls `autoUpdate` lifecycle. */\n open: Ref<boolean>\n /** Default placement. Floating UI may flip it if `flip` is true. */\n placement?: Placement\n /** CSS position strategy. */\n strategy?: Strategy\n /** Pixel offset between anchor and floating element. */\n offset?: number\n /** Flip to the opposite side when the requested side overflows. Default `true`. */\n flip?: boolean\n /** Shift along the cross-axis to stay in view. Default `true`. */\n shift?: boolean\n /**\n * Constrain the floating element to the available viewport space — sets\n * `maxWidth`/`maxHeight` (minus 8px padding) on it so a long dropdown/popover\n * never overflows the screen (pair with `overflow:auto` for scroll). Off by\n * default. Pass a number to override the viewport padding.\n */\n size?: boolean | number\n /** Extra Floating UI middleware to append. */\n middleware?: Middleware[]\n /**\n * Optional ref to an arrow element inside the floating panel. When provided,\n * `arrowX`, `arrowY`, and `arrowSide` in the return value are populated.\n */\n arrow?: Ref<HTMLElement | null | undefined>\n}\n\nexport interface UseFloatingReturn {\n /** Computed x coordinate (px). */\n x: Ref<number>\n /** Computed y coordinate (px). */\n y: Ref<number>\n /** Final strategy (echo of input). */\n strategy: Ref<Strategy>\n /** Final placement, possibly flipped from the input placement. */\n finalPlacement: Ref<Placement>\n /** Ready-to-bind inline style object for the floating element. */\n floatingStyles: ComputedRef<Record<string, string>>\n /** Trigger a manual recompute. Usually not needed — `autoUpdate` handles scrolling/resizing. */\n update: () => Promise<void>\n /** Arrow x offset (px). Present when `arrow` option is set. */\n arrowX: Ref<number | undefined>\n /** Arrow y offset (px). Present when `arrow` option is set. */\n arrowY: Ref<number | undefined>\n /**\n * Side of the floating element the arrow is on.\n * E.g. `'bottom'` placement → `'top'` (arrow at top pointing up).\n */\n arrowSide: ComputedRef<'top' | 'right' | 'bottom' | 'left' | undefined>\n}\n\n/**\n * Reactive Floating UI integration. Subscribes `autoUpdate` whenever\n * `open === true` and both refs are populated; tears it down on close,\n * unmount, or ref clearing. Returns `floatingStyles` ready to be spread onto\n * the floating element.\n *\n * Pure positioning — does NOT render anything, does NOT manage focus,\n * does NOT handle dismiss behavior. Those concerns live in the consuming\n * primitive (Popover, Tooltip, Dialog, Menu, ...).\n *\n * @example\n * const triggerEl = ref<HTMLElement | null>(null)\n * const contentEl = ref<HTMLElement | null>(null)\n * const open = ref(false)\n * const { floatingStyles } = useFloating({\n * anchor: triggerEl,\n * floating: contentEl,\n * open,\n * placement: 'bottom-start',\n * offset: 8,\n * })\n */\nexport function useFloating(options: UseFloatingOptions): UseFloatingReturn {\n const x = ref(0)\n const y = ref(0)\n // True once the first positioning cycle lands. Until then the panel stays\n // `visibility: hidden` so it never flashes at the viewport origin (0,0).\n const positioned = ref(false)\n const strategy = ref<Strategy>(options.strategy ?? 'absolute')\n const finalPlacement = ref<Placement>(options.placement ?? 'bottom')\n const arrowX = ref<number | undefined>()\n const arrowY = ref<number | undefined>()\n\n const middleware = shallowRef<Middleware[]>([])\n rebuildMiddleware()\n\n function rebuildMiddleware() {\n const mw: Middleware[] = []\n if (options.offset !== undefined) mw.push(offsetMiddleware(options.offset))\n if (options.flip !== false) mw.push(flipMiddleware())\n if (options.shift !== false) mw.push(shiftMiddleware({ padding: 8 }))\n if (options.size) {\n const padding = typeof options.size === 'number' ? options.size : 8\n mw.push(\n sizeMiddleware({\n padding,\n apply({ availableWidth, availableHeight, elements }) {\n Object.assign(elements.floating.style, {\n maxWidth: `${Math.max(0, Math.floor(availableWidth))}px`,\n maxHeight: `${Math.max(0, Math.floor(availableHeight))}px`,\n })\n },\n }),\n )\n }\n if (options.arrow?.value) mw.push(arrowMiddleware({ element: options.arrow.value }))\n if (options.middleware) mw.push(...options.middleware)\n middleware.value = mw\n }\n\n let cleanupAutoUpdate: (() => void) | null = null\n // Monotonic token bumped on every new positioning cycle and on teardown, so a\n // computePosition() that resolves after the panel closed/re-opened (or after a\n // newer update started) drops its result instead of applying stale coords.\n let epoch = 0\n\n async function update() {\n const a = options.anchor.value\n const f = options.floating.value\n if (!a || !f) return\n rebuildMiddleware()\n const token = ++epoch\n const result = await computePosition(a, f, {\n placement: options.placement ?? 'bottom',\n strategy: strategy.value,\n middleware: middleware.value,\n })\n if (token !== epoch) return\n x.value = result.x\n y.value = result.y\n positioned.value = true\n finalPlacement.value = result.placement\n const arrowData = result.middlewareData.arrow as { x?: number; y?: number } | undefined\n arrowX.value = arrowData?.x\n arrowY.value = arrowData?.y\n }\n\n watch(\n [options.open, options.anchor, options.floating],\n ([isOpen, anchorEl, floatingEl]) => {\n cleanupAutoUpdate?.()\n cleanupAutoUpdate = null\n epoch++\n if (isOpen && anchorEl && floatingEl) {\n positioned.value = false\n cleanupAutoUpdate = autoUpdate(anchorEl, floatingEl, () => {\n void update()\n })\n }\n },\n { flush: 'post', immediate: true },\n )\n\n onScopeDispose(() => {\n cleanupAutoUpdate?.()\n cleanupAutoUpdate = null\n epoch++\n })\n\n const OPPOSITE: Record<string, 'top' | 'right' | 'bottom' | 'left'> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n }\n const arrowSide = computed(\n () =>\n OPPOSITE[finalPlacement.value.split('-')[0]] as\n 'top' | 'right' | 'bottom' | 'left' | undefined,\n )\n\n const floatingStyles = computed<Record<string, string>>(() => ({\n position: strategy.value,\n top: '0',\n left: '0',\n transform: `translate3d(${Math.round(x.value)}px, ${Math.round(y.value)}px, 0)`,\n width: 'max-content',\n // Hidden until the first positioning cycle lands — prevents a flash at\n // the viewport origin. visibility (not display:none) keeps the panel\n // measurable so Floating UI can compute its real coordinates.\n visibility: positioned.value ? 'visible' : 'hidden',\n }))\n\n return { x, y, strategy, finalPlacement, floatingStyles, update, arrowX, arrowY, arrowSide }\n}\n","import { onScopeDispose, watch, type Ref } from 'vue'\n\nexport interface UseDismissOptions {\n /** While true, the dismiss listeners are active. */\n enabled: Ref<boolean>\n /** Elements that, if clicked, should NOT trigger dismiss (typically trigger + content). */\n exclude: Array<Ref<HTMLElement | null | undefined>>\n /** Called when the user attempts to dismiss the surface. */\n onDismiss: () => void\n /** Close on Escape key. Default `true`. */\n escape?: boolean\n /** Close on pointerdown outside the excluded elements. Default `true`. */\n outsidePointerDown?: boolean\n /**\n * Extra \"inside\" test for pointerdown targets — e.g. teleported sibling\n * surfaces that belong to the same widget but live outside the excluded\n * refs' DOM trees.\n */\n excludePredicate?: (target: EventTarget | null) => boolean\n}\n\n/**\n * Listen for the universal \"dismiss\" gestures: Escape key and outside\n * pointer-down. Used by Popover / Dialog / Menu / Combobox. Tooltip does\n * NOT use this — it dismisses on mouseleave/blur instead.\n *\n * Listeners are attached to `document` only while `enabled` is true, and\n * removed on disable / unmount. SSR-safe (no-op without `document`).\n */\nexport function useDismiss(options: UseDismissOptions): void {\n const escape = options.escape !== false\n const outsidePointerDown = options.outsidePointerDown !== false\n\n const isExcluded = (target: EventTarget | null): boolean => {\n if (!target || !(target instanceof Node)) return false\n for (const r of options.exclude) {\n const el = r.value\n if (!el) continue\n if (el === target || el.contains(target)) return true\n }\n return false\n }\n\n const onPointerDown = (event: PointerEvent) => {\n if (!options.enabled.value) return\n if (isExcluded(event.target)) return\n if (options.excludePredicate?.(event.target)) return\n options.onDismiss()\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (!options.enabled.value) return\n if (event.key === 'Escape') {\n event.stopPropagation()\n options.onDismiss()\n }\n }\n\n const attach = () => {\n if (typeof document === 'undefined') return\n if (outsidePointerDown) {\n document.addEventListener('pointerdown', onPointerDown, true)\n }\n if (escape) {\n document.addEventListener('keydown', onKeyDown)\n }\n }\n\n const detach = () => {\n if (typeof document === 'undefined') return\n document.removeEventListener('pointerdown', onPointerDown, true)\n document.removeEventListener('keydown', onKeyDown)\n }\n\n watch(\n options.enabled,\n (enabled) => {\n detach()\n if (enabled) attach()\n },\n { immediate: true, flush: 'post' },\n )\n\n onScopeDispose(detach)\n}\n","import { Teleport, defineComponent, h, inject, nextTick, ref, watch, type PropType } from 'vue'\nimport { matchTypeahead, nextEnabledIndex } from '@iris-ui-kit/core'\nimport { useFloating } from '../floating/useFloating'\nimport { useDismiss } from '../floating/useDismiss'\nimport { DropdownContextKey } from './context'\n\n/**\n * The menu surface. Renders `role=\"menu\"` and handles ArrowUp/Down navigation\n * across child `IrisDropdownItem`s. Closes on Escape and outside pointerdown.\n * Teleports to body by default.\n */\nexport const IrisDropdownMenu = defineComponent({\n name: 'IrisDropdownMenu',\n inheritAttrs: false,\n props: {\n teleport: {\n type: [String, Object, Boolean] as PropType<string | HTMLElement | false>,\n default: 'body',\n },\n },\n setup(props, { slots, attrs }) {\n const ctx = inject(DropdownContextKey)\n if (!ctx) {\n throw new Error('[iris-ui] IrisDropdownMenu must be a descendant of IrisDropdown')\n }\n\n const innerRef = ref<HTMLElement | null>(null)\n watch(innerRef, (el) => {\n ctx.contentRef.value = el\n })\n\n const { floatingStyles } = useFloating({\n anchor: ctx.triggerRef,\n floating: innerRef,\n open: ctx.open,\n placement: ctx.placement,\n offset: ctx.offset,\n })\n\n useDismiss({\n enabled: ctx.open,\n exclude: [ctx.triggerRef, innerRef],\n onDismiss: () => ctx.setOpen(false),\n })\n\n // Focus first menu item on open.\n watch(ctx.open, async (open) => {\n if (open) {\n await nextTick()\n const items = innerRef.value?.querySelectorAll<HTMLElement>('[role=\"menuitem\"]')\n items?.[0]?.focus()\n } else {\n // Restore focus to trigger.\n ctx.triggerRef.value?.focus?.()\n }\n })\n\n // Typeahead buffer: accumulated printable chars, reset after a ~500ms pause.\n // Plain closure state — does not need to be reactive.\n const typeahead: { buffer: string; timer: ReturnType<typeof setTimeout> | null } = {\n buffer: '',\n timer: null,\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (!ctx.open.value) return\n const items = Array.from(\n innerRef.value?.querySelectorAll<HTMLElement>(\n '[role=\"menuitem\"]:not([aria-disabled=\"true\"])',\n ) ?? [],\n )\n if (items.length === 0) return\n const current = document.activeElement as HTMLElement | null\n const index = current ? items.indexOf(current) : -1\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault()\n items[nextEnabledIndex(index, 1, items.length)]?.focus()\n break\n }\n case 'ArrowUp': {\n event.preventDefault()\n items[nextEnabledIndex(index, -1, items.length)]?.focus()\n break\n }\n case 'Home':\n event.preventDefault()\n items[0]?.focus()\n break\n case 'End':\n event.preventDefault()\n items[items.length - 1]?.focus()\n break\n case 'Tab':\n // Tab closes the menu and lets focus continue.\n ctx.setOpen(false)\n break\n default: {\n // Typeahead: a single printable char jumps to (and repeated chars\n // cycle through) items whose label matches the accumulated buffer.\n if (event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey) {\n typeahead.buffer += event.key\n if (typeahead.timer) clearTimeout(typeahead.timer)\n typeahead.timer = setTimeout(() => {\n typeahead.buffer = ''\n }, 500)\n const match = matchTypeahead(\n items.map((it) => it.textContent ?? ''),\n typeahead.buffer,\n index,\n )\n if (match >= 0) {\n event.preventDefault()\n items[match]?.focus()\n }\n }\n }\n }\n }\n\n return () => {\n if (!ctx.open.value) return null\n const menuNode = h(\n 'div',\n {\n ...attrs,\n ref: (el: unknown) => {\n innerRef.value = (el ?? null) as HTMLElement | null\n },\n id: ctx.contentId,\n role: 'menu',\n tabindex: -1,\n 'data-iris-dropdown-menu': '',\n 'data-state': 'open',\n onKeydown: onKeyDown,\n style: {\n ...floatingStyles.value,\n background: 'var(--iris-surface-floating)',\n color: 'var(--iris-foreground)',\n border: '1px solid var(--iris-border)',\n borderRadius: 'var(--iris-radius-md)',\n padding: 'var(--iris-padding-sm)',\n boxShadow: 'var(--iris-shadow-lg)',\n minWidth: '160px',\n outline: 'none',\n zIndex: '1000',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n slots.default?.(),\n )\n if (props.teleport === false) return menuNode\n return h(Teleport, { to: props.teleport as string | HTMLElement }, [menuNode])\n }\n },\n})\n","import { defineComponent, h, inject, ref } from 'vue'\nimport { DropdownContextKey } from './context'\n\n/**\n * A single selectable menu item. Emits `select` (with the underlying event)\n * and auto-closes the parent dropdown after selection. Disabled items are\n * skipped by arrow-key navigation in the parent menu.\n */\nexport const IrisDropdownItem = defineComponent({\n name: 'IrisDropdownItem',\n inheritAttrs: false,\n props: {\n disabled: { type: Boolean, default: false },\n /** When true, selecting does NOT close the dropdown. Useful for sub-actions. */\n keepOpen: { type: Boolean, default: false },\n },\n emits: {\n select: (_event: Event) => true,\n },\n setup(props, { slots, attrs, emit }) {\n const ctx = inject(DropdownContextKey)\n if (!ctx) {\n throw new Error('[iris-ui] IrisDropdownItem must be a descendant of IrisDropdownMenu')\n }\n\n const hovered = ref(false)\n\n const fire = (event: Event) => {\n if (props.disabled) return\n emit('select', event)\n if (!props.keepOpen) ctx.setOpen(false)\n }\n\n const onClick = (event: MouseEvent) => {\n if (event.defaultPrevented) return\n fire(event)\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n fire(event)\n }\n }\n\n return () =>\n h(\n 'div',\n {\n ...attrs,\n role: 'menuitem',\n tabindex: props.disabled ? -1 : 0,\n 'aria-disabled': props.disabled ? 'true' : undefined,\n 'data-iris-dropdown-item': '',\n 'data-disabled': props.disabled ? '' : undefined,\n onClick,\n onKeydown: onKeyDown,\n onPointerenter: () => (hovered.value = true),\n onPointerleave: () => (hovered.value = false),\n onFocus: () => (hovered.value = true),\n onBlur: () => (hovered.value = false),\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--iris-gap-sm)',\n padding: 'var(--iris-padding-sm, 6px) var(--iris-padding-md)',\n borderRadius: 'var(--iris-radius-sm)',\n cursor: props.disabled ? 'not-allowed' : 'pointer',\n opacity: props.disabled ? '0.5' : '1',\n background:\n hovered.value && !props.disabled ? 'var(--iris-surface-hover)' : 'transparent',\n color: 'inherit',\n outline: 'none',\n fontSize: 'var(--iris-font-size-md, 14px)',\n transition: 'background-color 80ms ease',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n slots.default?.(),\n )\n },\n})\n\n/** Visual divider between groups of items. */\nexport const IrisDropdownSeparator = defineComponent({\n name: 'IrisDropdownSeparator',\n inheritAttrs: false,\n setup(_, { attrs }) {\n return () =>\n h('div', {\n ...attrs,\n role: 'separator',\n 'data-iris-dropdown-separator': '',\n style: {\n height: '1px',\n background: 'var(--iris-border)',\n margin: '4px 0',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n })\n },\n})\n","import { defineComponent, h, onBeforeUnmount, ref, type PropType, type VNode } from 'vue'\nimport { createSortable, type SortableRect } from '@iris-ui-kit/core'\n\n/** The data attribute on each sortable item for the collision system. */\nexport const SORTABLE_ITEM_ATTR = 'data-iris-sortable-item'\n\n/**\n * Behavior wrapper: makes a list of items sortable via drag-and-drop. Wraps\n * each direct child in a sortable item context. The consumer supplies the\n * `items` array and an `onReorder` callback. Items render through the default\n * slot; each item is wrapped with drag detection from `createSortable`.\n *\n * Composable: stack with `IrisResizable` / `IrisMovable` / `IrisHotkey` for\n * richer interactions on the same wrapped UI.\n *\n * @example\n * <IrisSortable :items=\"items\" @reorder=\"items = $event\">\n * <div v-for=\"(label, i) in items\" :key=\"i\">{{ label }}</div>\n * </IrisSortable>\n */\nexport const IrisSortable = defineComponent({\n name: 'IrisSortable',\n inheritAttrs: false,\n props: {\n /** The ordered items. Used to detect which item is at which position. */\n items: {\n type: Array as PropType<readonly unknown[]>,\n required: true,\n },\n /** Called when the user drops an item in a new position. */\n onReorder: {\n type: Function as PropType<(next: unknown[]) => void>,\n default: undefined,\n },\n /** Optional item key getter. Defaults to `String(index)`. */\n getKey: {\n type: Function as PropType<(item: unknown, index: number) => string>,\n default: undefined,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n orientation: {\n type: String as PropType<'vertical' | 'horizontal'>,\n default: 'vertical',\n },\n class: {\n type: String,\n default: undefined,\n },\n style: {\n type: Object as PropType<Record<string, string | number>>,\n default: undefined,\n },\n },\n emits: {\n reorder: (_next: unknown[]) => true,\n },\n setup(props, { slots, attrs, emit }) {\n const containerRef = ref<HTMLElement | null>(null)\n const sortable = createSortable()\n const activeKey = ref<string | null>(null)\n\n // Subscribe to sortable state changes to track the active drag key\n const unsub = sortable.subscribe((state) => {\n activeKey.value = state.activeId\n })\n onBeforeUnmount(unsub)\n\n // Find the DOM order index of a child by its data-iris-sortable-item value.\n const indexOf = (key: string): number => {\n const container = containerRef.value\n if (!container) return -1\n return Array.from(\n container.querySelectorAll<HTMLElement>(`[${SORTABLE_ITEM_ATTR}]`),\n ).findIndex((el) => el.getAttribute(SORTABLE_ITEM_ATTR) === key)\n }\n\n const onPointerDown = (e: PointerEvent) => {\n if (props.disabled) return\n const target = (e.target as HTMLElement).closest(`[${SORTABLE_ITEM_ATTR}]`)\n if (!target) return\n const container = containerRef.value\n if (!container) return\n const key = target.getAttribute(SORTABLE_ITEM_ATTR) ?? ''\n const index = indexOf(key)\n if (index < 0) return\n sortable.press(key, e.clientX, e.clientY)\n }\n\n const onPointerMove = (e: PointerEvent) => {\n if (!sortable.isPending() && sortable.getState().activeId === null) return\n const items = containerRef.value?.querySelectorAll<HTMLElement>(`[${SORTABLE_ITEM_ATTR}]`)\n const rects: SortableRect[] = Array.from(items ?? []).map((el) => {\n const rect = el.getBoundingClientRect()\n return {\n id: el.getAttribute(SORTABLE_ITEM_ATTR) ?? '',\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n }\n })\n // Promote pending press to active drag once past the movement threshold\n sortable.tryStart(e.clientX, e.clientY)\n if (sortable.getState().activeId !== null) {\n sortable.moveOver({ x: e.clientX, y: e.clientY }, rects)\n }\n }\n\n const onPointerUp = () => {\n const state = sortable.getState()\n if (state.activeId === null) {\n sortable.cancel()\n return\n }\n const result = sortable.end()\n if (result.activeId && result.overId && result.activeId !== result.overId) {\n const from = indexOf(result.activeId)\n const to = indexOf(result.overId)\n if (from >= 0 && to >= 0) {\n const next = [...(props.items as unknown[])]\n const [moved] = next.splice(from, 1)\n next.splice(to, 0, moved!)\n if (props.onReorder) {\n props.onReorder(next)\n }\n emit('reorder', next)\n }\n }\n }\n\n const resolveKey = (item: unknown, index: number): string =>\n props.getKey ? props.getKey(item, index) : String(index)\n\n return () => {\n const children: VNode[] = []\n const defaultSlots = slots.default?.()\n if (defaultSlots) {\n const itemsArray = props.items as unknown[]\n defaultSlots.forEach((child, index) => {\n const item = itemsArray[index]\n const key = resolveKey(item, index)\n const isDragging = key === activeKey.value\n children.push(\n h(\n 'div',\n {\n key,\n [SORTABLE_ITEM_ATTR]: key,\n 'data-iris-sortable-dragging': isDragging ? '' : undefined,\n style: {\n transition: isDragging ? 'none' : 'transform 150ms ease',\n opacity: isDragging ? 0.4 : 1,\n position: 'relative',\n zIndex: isDragging ? 100 : undefined,\n },\n },\n [child],\n ),\n )\n })\n }\n\n return h(\n 'div',\n {\n ...attrs,\n ref: (el: unknown) => {\n containerRef.value = (el ?? null) as HTMLElement | null\n },\n 'data-iris-sortable': '',\n 'data-state': activeKey.value ? 'dragging' : 'idle',\n class: props.class,\n style: {\n display: 'flex',\n flexDirection: props.orientation === 'horizontal' ? 'row' : 'column',\n gap: 'var(--iris-gap-sm, 4px)',\n opacity: props.disabled ? 0.6 : 1,\n userSelect: activeKey.value ? 'none' : undefined,\n ...((props.style as Record<string, string | number> | undefined) ?? {}),\n },\n onPointerdown: onPointerDown,\n onPointermove: onPointerMove,\n onPointerup: onPointerUp,\n onPointerleave: onPointerUp,\n },\n children,\n )\n }\n },\n})\n","import { defineComponent, h, nextTick, type PropType, type VNode } from 'vue'\nimport { isClosable, type TabsNav, type TabItem } from '@iris-ui-kit/core'\nimport { useTabsNav } from './useTabsNav'\nimport { IrisIcon } from '../primitives/icon/Icon'\nimport { IrisDropdown } from '../primitives/dropdown/Dropdown'\nimport { IrisDropdownTrigger } from '../primitives/dropdown/DropdownTrigger'\nimport { IrisDropdownMenu } from '../primitives/dropdown/DropdownMenu'\nimport { IrisDropdownItem, IrisDropdownSeparator } from '../primitives/dropdown/DropdownItem'\nimport { IrisSortable } from '../behaviors/Sortable'\nimport { useI18n } from '../i18n'\n\n/**\n * Vben-style multi-tab bar over a shared {@link TabsNav} store. Each open page\n * is a closable chip; clicking activates (`@change`), the × closes, and a\n * trailing actions dropdown runs Refresh / Close / Close-others / Close-all on\n * the active tab. The store owns the tab list + active key; the host watches it\n * to sync routing + keep-alive.\n *\n * Keyboard (WAI-ARIA tablist, automatic activation): ←/→ move + activate the\n * adjacent tab, Home/End jump to the first/last, Delete/Backspace closes the\n * focused tab. Roving tabindex keeps a single tab stop.\n */\nexport const IrisAdminTabs = defineComponent({\n name: 'IrisAdminTabs',\n inheritAttrs: false,\n props: {\n /** Shared tabs store (from `createTabsNav`). */\n nav: { type: Object as PropType<TabsNav>, required: true },\n reorderable: { type: Boolean, default: true },\n },\n emits: {\n change: (_key: string) => true,\n close: (_key: string) => true,\n refresh: (_key: string) => true,\n reorder: (_tabs: TabItem[]) => true,\n },\n setup(props, { emit, attrs }) {\n const { t: tr } = useI18n()\n const t = useTabsNav(props.nav)\n\n const activate = (key: string): void => {\n props.nav.activate(key)\n emit('change', key)\n }\n const close = (key: string): void => {\n props.nav.close(key)\n emit('close', key)\n }\n const refresh = (key: string): void => {\n props.nav.refresh(key)\n emit('refresh', key)\n }\n const reorder = (tabs: TabItem[]): void => {\n tabs.forEach((tab, index) => props.nav.move(tab.key, index))\n emit('reorder', tabs)\n }\n\n const focusTab = (root: HTMLElement | null, key: string | undefined): void => {\n if (!root || !key) return\n const labels = root.querySelectorAll<HTMLElement>('[data-iris-tab-label]')\n labels.forEach((el) => {\n if (el.getAttribute('data-key') === key) el.focus()\n })\n }\n\n const onTablistKeydown = (e: KeyboardEvent): void => {\n const root = e.currentTarget as HTMLElement\n const tabs = t.tabs.value\n const idx = tabs.findIndex((x) => x.key === t.activeKey.value)\n if (idx < 0 || tabs.length === 0) return\n\n if (e.key === 'Delete' || e.key === 'Backspace') {\n const cur = tabs[idx]\n if (cur && isClosable(cur)) {\n e.preventDefault()\n close(cur.key)\n void nextTick(() => focusTab(root, props.nav.getState().activeKey))\n }\n return\n }\n\n let target = -1\n if (e.key === 'ArrowRight') target = (idx + 1) % tabs.length\n else if (e.key === 'ArrowLeft') target = (idx - 1 + tabs.length) % tabs.length\n else if (e.key === 'Home') target = 0\n else if (e.key === 'End') target = tabs.length - 1\n else return\n\n e.preventDefault()\n const key = tabs[target]?.key\n if (!key) return\n activate(key)\n void nextTick(() => focusTab(root, key))\n }\n\n const chip = (tab: TabItem): VNode => {\n const active = tab.key === t.activeKey.value\n const closable = isClosable(tab)\n const labelChildren: VNode[] = []\n if (tab.icon) labelChildren.push(h(IrisIcon, { name: tab.icon, size: 14 }))\n labelChildren.push(h('span', { style: { whiteSpace: 'nowrap' } }, tab.title))\n\n const label = h(\n 'button',\n {\n type: 'button',\n role: 'tab',\n 'data-iris-tab-label': '',\n 'data-key': tab.key,\n 'aria-selected': active ? 'true' : 'false',\n 'aria-current': active ? 'page' : undefined,\n tabindex: active ? 0 : -1,\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: 'var(--iris-space-xs, 8px)',\n border: 'none',\n background: 'transparent',\n color: 'inherit',\n font: 'inherit',\n fontSize: 'var(--iris-font-size-sm, 13px)',\n cursor: 'pointer',\n padding: '0',\n },\n onClick: () => activate(tab.key),\n },\n labelChildren,\n )\n\n const closeBtn = closable\n ? h(\n 'button',\n {\n type: 'button',\n tabindex: -1,\n 'data-iris-tab-close': '',\n 'aria-label': tr('admin.closeTab', { title: tab.title }),\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '16px',\n height: '16px',\n border: 'none',\n borderRadius: '4px',\n background: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n padding: '0',\n opacity: '0.6',\n },\n onClick: (e: Event) => {\n e.stopPropagation()\n close(tab.key)\n const root = (e.currentTarget as HTMLElement).closest(\n '[role=\"tablist\"]',\n ) as HTMLElement | null\n void nextTick(() => focusTab(root, props.nav.getState().activeKey))\n },\n },\n [h(IrisIcon, { name: 'x', size: 12 })],\n )\n : tab.pinned\n ? h(IrisIcon, { name: 'check-circle', size: 12, style: { opacity: '0.5' } })\n : null\n\n return h(\n 'div',\n {\n key: tab.key,\n 'data-iris-tab': '',\n 'data-active': active ? 'true' : undefined,\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n padding:\n 'var(--iris-padding-sm, 6px) var(--iris-space-xs, 8px) var(--iris-padding-sm, 6px) var(--iris-space-sm, 12px)',\n borderRadius: 'var(--iris-radius-md, 6px)',\n border: `1px solid ${active ? 'var(--iris-primary)' : 'var(--iris-border)'}`,\n background: active ? 'var(--iris-primary)' : 'var(--iris-surface)',\n color: active ? 'var(--iris-primary-foreground, #fff)' : 'var(--iris-foreground)',\n flex: '0 0 auto',\n },\n },\n [label, closeBtn],\n )\n }\n\n const action = (label: string, run: () => void, disabled = false): VNode =>\n h(IrisDropdownItem, { disabled, onSelect: run }, { default: () => label })\n\n const actionsMenu = (): VNode =>\n h(IrisDropdown, null, {\n default: () => [\n h(\n IrisDropdownTrigger,\n {\n 'aria-label': tr('admin.tabActions'),\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: 'var(--iris-radius-md, 6px)',\n border: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n color: 'var(--iris-foreground)',\n cursor: 'pointer',\n },\n },\n {\n default: () => h(IrisIcon, { name: 'more-horizontal', size: 16 }),\n },\n ),\n h(IrisDropdownMenu, null, {\n default: () => {\n const key = t.activeKey.value\n if (!key) return [action('No active tab', () => {}, true)]\n return [\n action(tr('admin.refresh'), () => refresh(key)),\n action(tr('admin.close'), () => close(key)),\n h(IrisDropdownSeparator),\n action(tr('admin.closeLeft'), () => props.nav.closeLeft(key)),\n action(tr('admin.closeRight'), () => props.nav.closeRight(key)),\n action(tr('admin.closeOthers'), () => props.nav.closeOthers(key)),\n action(tr('admin.closeAll'), () => props.nav.closeAll()),\n ]\n },\n }),\n ],\n })\n\n return () =>\n h(\n 'div',\n {\n ...attrs,\n 'data-iris-admin-tabs': '',\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--iris-space-xs, 8px)',\n padding: 'var(--iris-space-xs, 8px) var(--iris-space-sm, 12px)',\n borderBottom: '1px solid var(--iris-border)',\n background: 'var(--iris-background)',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n h(\n 'div',\n {\n 'data-iris-tabs-scroll': '',\n role: 'tablist',\n 'aria-label': tr('admin.openPages'),\n onKeydown: onTablistKeydown,\n style: {\n overflowX: 'auto',\n flex: '1',\n },\n },\n [\n h(\n IrisSortable,\n {\n items: t.tabs.value,\n getKey: (item: unknown) => (item as TabItem).key,\n onReorder: (items: unknown[]) => reorder(items as TabItem[]),\n disabled: !props.reorderable,\n orientation: 'horizontal',\n style: {\n alignItems: 'center',\n gap: 'var(--iris-space-xs, 8px)',\n width: 'max-content',\n },\n },\n { default: () => t.tabs.value.map((tab) => chip(tab)) },\n ),\n ],\n ),\n actionsMenu(),\n ],\n )\n },\n})\n","import { shallowRef, onScopeDispose, type ShallowRef } from 'vue'\nimport type { ReadonlyStore, Store } from '@iris-ui-kit/core'\n\n/**\n * Bridge a framework-agnostic `@iris-ui-kit/core` store into a Vue ref — updates on\n * every store emission. The mirror of React's `useSyncExternalStore`, Solid's\n * `createSignal`, and Svelte's `readable`. Seeds synchronously from\n * `store.getState()` (SSR-safe); detaches on scope dispose.\n */\nexport function useStore<T>(store: ReadonlyStore<T>): Readonly<ShallowRef<T>> {\n const state = shallowRef(store.getState()) as ShallowRef<T>\n onScopeDispose(store.subscribe((next) => (state.value = next)))\n return state\n}\n\n/**\n * Subscribe to a DERIVED slice of a core store — the ref updates only when\n * `selector(state)` changes per `equals` (default `Object.is`), not on every\n * store emission. Built on {@link Store.subscribeWith}.\n */\nexport function useStoreSelector<T, U>(\n store: Store<T>,\n selector: (state: T) => U,\n equals?: (a: U, b: U) => boolean,\n): Readonly<ShallowRef<U>> {\n const slice = shallowRef(selector(store.getState())) as ShallowRef<U>\n onScopeDispose(store.subscribeWith(selector, (v) => (slice.value = v), equals))\n return slice\n}\n","import { computed, watch, watchEffect, type ComputedRef, type MaybeRefOrGetter, toValue } from 'vue'\nimport {\n createAdminShell,\n findNavPath,\n type AdminShell,\n type NavNode,\n type TabsNav,\n} from '@iris-ui-kit/core'\nimport { useStore } from '../useStore'\n\nexport interface UseAdminShellConfig {\n /** Normalized nav tree driving menu + breadcrumb. */\n menus: MaybeRefOrGetter<NavNode[]>\n /** Active page key (controlled); undefined = uncontrolled. */\n activeKey?: MaybeRefOrGetter<string | undefined>\n defaultActiveKey?: string\n onActiveKeyChange?: (key: string) => void\n /** Fired whenever a nav node / tab becomes active, with the resolved leaf node. */\n onSelect?: (key: string, node: NavNode) => void\n /** Optional shared tabs store; the shell opens/reconciles tabs through it. */\n tabs?: TabsNav\n}\n\nexport interface UseAdminShellReturn {\n /** Current active leaf key ('' when none). */\n activeKey: ComputedRef<string>\n /** Select a nav node: a branch redirects to its first leaf, opens its tab. */\n navigate: (node: NavNode) => void\n /** Reconcile when the active TAB changed (e.g. a close picked a neighbor). */\n syncFromTab: (key: string) => void\n /** Ancestor→node breadcrumb trail of the active key. */\n breadcrumb: ComputedRef<NavNode[]>\n}\n\n/**\n * Vue binding for the framework-agnostic {@link createAdminShell} controller —\n * the menu→tab→active-key wiring that every AdminLayout used to re-implement\n * byte-for-byte. The composable owns the controlled/uncontrolled `activeKey`\n * reconciliation (idiomatic to Vue) and delegates navigate / syncFromTab /\n * branch-resolution / breadcrumb to the shared core shell.\n *\n * Controlled mode renders from the prop directly (no flicker); a watcher keeps\n * the shell's guard-base synced to the prop so the active-change callback fires\n * with the same semantics as before.\n */\nexport function useAdminShell(config: UseAdminShellConfig): UseAdminShellReturn {\n const { defaultActiveKey, onActiveKeyChange, onSelect, tabs } = config\n\n const menus = (): NavNode[] => toValue(config.menus)\n const activeKeyProp = (): string | undefined => toValue(config.activeKey)\n const activeControlled = (): boolean => activeKeyProp() !== undefined\n\n // The shell instance is stable for the composable's lifetime; it reads the\n // latest callbacks via the closure-captured config.\n const shell: AdminShell = createAdminShell({\n menus: menus(),\n defaultActiveKey: activeKeyProp() ?? defaultActiveKey,\n tabs,\n onActiveChange: (key, node) => {\n onActiveKeyChange?.(key)\n if (node) onSelect?.(key, node)\n },\n })\n const state = useStore(shell.store)\n\n // Keep the shell reconciling against the live menu tree.\n watch(menus, (next) => shell.setMenus(next), { flush: 'sync' })\n\n // Controlled: keep the shell's guard-base aligned with the prop (silent — no\n // callback), so navigate fires the active-change callback exactly as before\n // even when a controlled parent does not write the new key back.\n watchEffect(() => {\n const prop = activeKeyProp()\n if (prop !== undefined && shell.getActiveKey() !== prop) {\n shell.store.setState({ activeKey: prop })\n }\n })\n\n const activeKey = computed(() =>\n activeControlled() ? (activeKeyProp() ?? '') : (state.value.activeKey ?? ''),\n )\n\n return {\n activeKey,\n navigate: shell.navigate,\n syncFromTab: shell.syncFromTab,\n breadcrumb: computed(() => (activeKey.value ? findNavPath(menus(), activeKey.value) : [])),\n }\n}\n","import {\n computed,\n defineComponent,\n h,\n onBeforeUnmount,\n ref,\n watch,\n type PropType,\n type VNode,\n} from 'vue'\nimport { type NavNode, type TabsNav } from '@iris-ui-kit/core'\nimport { IrisSidebarLayout } from '../layouts/SidebarLayout'\nimport { IrisHeaderLayout } from '../layouts/HeaderLayout'\nimport { IrisNavMenu } from './NavMenu'\nimport { IrisAdminBreadcrumb } from './AdminBreadcrumb'\nimport { IrisAdminTabs } from './AdminTabs'\nimport { IrisIcon } from '../primitives/icon/Icon'\nimport { useI18n } from '../i18n'\nimport { useAdminShell } from './useAdminShell'\n\nexport type IrisAdminLayoutMode = 'sidebar' | 'horizontal' | 'full-content'\nexport type IrisAdminMenuAlign = 'start' | 'center' | 'end'\nexport type IrisAdminContentWidth = 'fluid' | 'centered'\nexport type IrisAdminContentHeight = 'auto' | 'viewport'\n\n/**\n * The CMS / admin shell — a Vben-style, router-agnostic, data-driven layout that\n * composes IrisSidebarLayout + IrisHeaderLayout with the admin nav pieces. One\n * `menus` tree drives the collapsible sidebar nav, the header breadcrumb, and\n * (when a `tabs` store is passed) the multi-tab bar; `activeKey` is the current\n * page (v-model). The host owns routing: react to `@select` / `update:activeKey`\n * and render the page in the default slot (wrap it in `<KeepAlive>` keyed by\n * `tabs.cacheKey` for Vben-style tab caching).\n *\n * Slots: `logo({ collapsed })`, `toolbar` (header end), default `({ activeKey })`,\n * `footer`. Modes: `sidebar` (default) and `full-content` (chrome hidden).\n */\nexport const IrisAdminLayout = defineComponent({\n name: 'IrisAdminLayout',\n inheritAttrs: false,\n props: {\n /** Normalized nav tree driving menu + breadcrumb. */\n menus: { type: Array as PropType<NavNode[]>, required: true },\n /** Active page key (v-model:activeKey). */\n activeKey: { type: String, default: undefined },\n /** Initial active page key when `activeKey` is uncontrolled. */\n defaultActiveKey: { type: String, default: undefined },\n /** Sidebar collapsed (v-model:collapsed); undefined = uncontrolled. */\n collapsed: { type: Boolean as PropType<boolean | undefined>, default: undefined },\n defaultCollapsed: { type: Boolean, default: false },\n mode: { type: String as PropType<IrisAdminLayoutMode>, default: 'sidebar' },\n /** Brand text shown next to the logo when expanded. */\n appTitle: { type: String, default: 'Iris Admin' },\n /** Optional shared tabs store; when present the tab bar is rendered. */\n tabs: { type: Object as PropType<TabsNav>, default: undefined },\n showTabs: { type: Boolean, default: true },\n showBreadcrumb: { type: Boolean, default: true },\n stickyHeader: { type: Boolean, default: true },\n stickyTabs: { type: Boolean, default: true },\n menuAlign: { type: String as PropType<IrisAdminMenuAlign>, default: 'start' },\n contentWidth: { type: String as PropType<IrisAdminContentWidth>, default: 'fluid' },\n contentHeight: {\n type: String as PropType<IrisAdminContentHeight>,\n default: 'viewport',\n },\n sidebarWidth: { type: [Number, String] as PropType<number | string>, default: 240 },\n collapsedWidth: { type: [Number, String] as PropType<number | string>, default: 64 },\n },\n emits: {\n 'update:activeKey': (_key: string) => true,\n 'update:collapsed': (_value: boolean) => true,\n select: (_key: string, _node: NavNode) => true,\n },\n setup(props, { emit, slots, attrs }) {\n const { t } = useI18n()\n\n const {\n activeKey,\n navigate,\n syncFromTab,\n breadcrumb: trail,\n } = useAdminShell({\n menus: () => props.menus,\n activeKey: () => props.activeKey,\n defaultActiveKey: props.defaultActiveKey,\n tabs: props.tabs,\n onActiveKeyChange: (key) => emit('update:activeKey', key),\n onSelect: (key, node) => emit('select', key, node),\n })\n\n const collapseControlled = computed(() => props.collapsed !== undefined)\n const internalCollapsed = ref(props.defaultCollapsed)\n const collapsed = computed(() =>\n collapseControlled.value ? (props.collapsed as boolean) : internalCollapsed.value,\n )\n const setCollapsed = (value: boolean): void => {\n if (!collapseControlled.value) internalCollapsed.value = value\n emit('update:collapsed', value)\n }\n\n // NavMenu / Breadcrumb emit (key, node); route the node through navigate.\n const onSelect = (_key: string, node: NavNode): void => navigate(node)\n\n // Tab activation (incl. close → neighbor) is the store's job; mirror it into\n // the layout's active key so the breadcrumb + content stay in sync.\n if (props.tabs) {\n const tabsActive = ref(props.tabs.getState().activeKey)\n const unsubscribe = props.tabs.subscribe((s) => {\n tabsActive.value = s.activeKey\n })\n onBeforeUnmount(unsubscribe)\n watch(tabsActive, (key) => {\n if (key) syncFromTab(key)\n })\n }\n\n const renderLogo = (state: { collapsed: boolean }): VNode | VNode[] => {\n if (slots.logo) return slots.logo(state) as VNode[]\n return h(\n 'div',\n {\n 'data-iris-admin-logo': '',\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--iris-space-sm, 12px)',\n height: '52px',\n padding: '0 var(--iris-space-md, 16px)',\n color: 'var(--iris-foreground)',\n fontWeight: '700',\n fontSize: 'var(--iris-font-size-lg, 16px)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n flexShrink: 0,\n },\n },\n [\n h(\n 'span',\n {\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: 'var(--iris-radius-md, 6px)',\n background: 'var(--iris-primary)',\n color: 'var(--iris-primary-foreground, #fff)',\n flexShrink: 0,\n },\n },\n [h(IrisIcon, { name: 'menu', size: 18 })],\n ),\n state.collapsed ? null : h('span', props.appTitle),\n ],\n )\n }\n\n const collapseToggle = (): VNode =>\n h(\n 'button',\n {\n type: 'button',\n 'data-iris-admin-collapse': '',\n 'aria-label': collapsed.value ? t('admin.expandSidebar') : t('admin.collapseSidebar'),\n 'aria-pressed': collapsed.value ? 'true' : 'false',\n style: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '32px',\n height: '32px',\n border: 'none',\n borderRadius: 'var(--iris-radius-md, 6px)',\n background: 'transparent',\n color: 'var(--iris-foreground)',\n cursor: 'pointer',\n flexShrink: 0,\n },\n onClick: () => setCollapsed(!collapsed.value),\n },\n [h(IrisIcon, { name: collapsed.value ? 'chevron-right' : 'menu', size: 18 })],\n )\n\n const renderHeaderBar = (): VNode =>\n h(\n 'div',\n {\n 'data-iris-admin-headerbar': '',\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n height: '52px',\n padding: '0 16px',\n borderBottom: '1px solid var(--iris-border)',\n background: 'var(--iris-background)',\n },\n },\n [\n collapseToggle(),\n props.showBreadcrumb\n ? h(IrisAdminBreadcrumb, { trail: trail.value, hideSingle: false, onSelect })\n : null,\n h('div', { style: { flex: '1' } }),\n slots.toolbar\n ? h(\n 'div',\n {\n 'data-iris-admin-toolbar': '',\n style: { display: 'flex', alignItems: 'center', gap: '8px' },\n },\n slots.toolbar(),\n )\n : null,\n ],\n )\n\n const renderContent = (horizontal = false): VNode =>\n h(\n 'div',\n {\n 'data-iris-admin-content': '',\n 'data-width': props.contentWidth,\n style: {\n boxSizing: 'border-box',\n width: '100%',\n maxWidth: props.contentWidth === 'centered' ? '72rem' : undefined,\n marginInline: props.contentWidth === 'centered' ? 'auto' : undefined,\n padding: '16px',\n },\n },\n [\n horizontal && props.showBreadcrumb\n ? h(IrisAdminBreadcrumb, { trail: trail.value, hideSingle: false, onSelect })\n : null,\n ...(slots.default?.({ activeKey: activeKey.value }) ?? []),\n ],\n )\n\n const renderTabs = (): VNode | null =>\n props.tabs && props.showTabs\n ? h(\n 'div',\n {\n 'data-iris-admin-tabs-region': '',\n 'data-sticky': props.stickyTabs ? 'true' : undefined,\n style: {\n position: props.stickyTabs && !props.stickyHeader ? 'sticky' : 'relative',\n top: '0',\n zIndex: '49',\n },\n },\n [h(IrisAdminTabs, { nav: props.tabs })],\n )\n : null\n\n return () => {\n if (props.mode === 'full-content') {\n return h(\n 'div',\n {\n ...attrs,\n 'data-iris-admin-layout': '',\n 'data-mode': 'full-content',\n style: {\n height: '100%',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n slots.default?.({ activeKey: activeKey.value }) ?? [],\n )\n }\n\n if (props.mode === 'horizontal') {\n const justifyContent =\n props.menuAlign === 'center'\n ? 'center'\n : props.menuAlign === 'end'\n ? 'flex-end'\n : 'flex-start'\n return h(\n 'div',\n {\n ...attrs,\n 'data-iris-admin-layout': '',\n 'data-mode': 'horizontal',\n style: {\n height: props.contentHeight === 'viewport' ? '100vh' : 'auto',\n minHeight: '100vh',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n [\n h(\n IrisHeaderLayout,\n { sticky: props.stickyHeader },\n {\n header: () =>\n h('div', { 'data-iris-admin-header': '' }, [\n h(\n 'div',\n {\n 'data-iris-admin-headerbar': '',\n style: {\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n minHeight: '52px',\n padding: '0 16px',\n background: 'var(--iris-background)',\n },\n },\n [\n renderLogo({ collapsed: false }),\n h(\n 'div',\n {\n 'data-iris-admin-topnav': '',\n style: {\n display: 'flex',\n flex: '1',\n minWidth: '0',\n justifyContent,\n },\n },\n [\n h(IrisNavMenu, {\n items: props.menus,\n activeKey: activeKey.value,\n orientation: 'horizontal',\n onSelect,\n }),\n ],\n ),\n slots.toolbar\n ? h(\n 'div',\n {\n 'data-iris-admin-toolbar': '',\n style: { display: 'flex', alignItems: 'center', gap: '8px' },\n },\n slots.toolbar(),\n )\n : null,\n ],\n ),\n renderTabs(),\n ]),\n default: () => renderContent(true),\n ...(slots.footer ? { footer: () => slots.footer!() } : {}),\n },\n ),\n ],\n )\n }\n\n return h(\n IrisSidebarLayout,\n {\n ...attrs,\n collapsed: collapsed.value,\n width: props.sidebarWidth,\n collapsedWidth: props.collapsedWidth,\n 'onUpdate:collapsed': setCollapsed,\n 'data-iris-admin-layout': '',\n 'data-mode': 'sidebar',\n style: {\n height: '100vh',\n ...((attrs.style as Record<string, string> | undefined) ?? {}),\n },\n },\n {\n sidebar: (state: { collapsed: boolean }) =>\n h(\n 'div',\n {\n 'data-iris-admin-sidebar': '',\n style: {\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n borderInlineEnd: '1px solid var(--iris-border)',\n background: 'var(--iris-surface)',\n },\n },\n [\n renderLogo(state),\n h(\n 'div',\n { style: { flex: '1', overflowY: 'auto', overflowX: 'hidden', padding: '8px' } },\n [\n h(IrisNavMenu, {\n items: props.menus,\n activeKey: activeKey.value,\n collapsed: state.collapsed,\n onSelect,\n }),\n ],\n ),\n ],\n ),\n default: () =>\n h(\n IrisHeaderLayout,\n { sticky: props.stickyHeader },\n {\n header: () =>\n h('div', { 'data-iris-admin-header': '' }, [renderHeaderBar(), renderTabs()]),\n default: () => renderContent(),\n ...(slots.footer ? { footer: () => slots.footer!() } : {}),\n },\n ),\n },\n )\n }\n },\n})\n\n/** Public input/event surface inferred from the runtime Vue component. */\nexport type IrisAdminLayoutProps = InstanceType<typeof IrisAdminLayout>['$props']\n","import { computed, onBeforeUnmount, onMounted, ref, type ComputedRef, type Ref } from 'vue'\nimport type { AdminPreferences, AdminPreferencesState } from '@iris-ui-kit/core'\n\nexport interface UseAdminPreferencesReturn {\n state: ComputedRef<AdminPreferencesState>\n set: AdminPreferences['set']\n patch: AdminPreferences['patch']\n reset: AdminPreferences['reset']\n hydrate: AdminPreferences['hydrate']\n flush: AdminPreferences['flush']\n}\n\n/** Thin Vue bridge for the framework-agnostic admin preferences controller. */\nexport function useAdminPreferences(\n preferences: AdminPreferences,\n hydrate = true,\n): UseAdminPreferencesReturn {\n const state = ref(preferences.getState()) as Ref<AdminPreferencesState>\n const unsubscribe = preferences.subscribe((next) => {\n state.value = next\n })\n onMounted(() => {\n if (hydrate) void preferences.hydrate()\n })\n onBeforeUnmount(unsubscribe)\n return {\n state: computed(() => state.value),\n set: preferences.set,\n patch: preferences.patch,\n reset: preferences.reset,\n hydrate: preferences.hydrate,\n flush: preferences.flush,\n }\n}\n"]}