@birdycom/omniaui-vue 0.12.6 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blocks/OcBlockContactForm.vue.d.ts +71 -0
- package/dist/blocks/OcBlockProfileHeader.vue.d.ts +1 -1
- package/dist/components/OcBrandMark.vue.d.ts +23 -0
- package/dist/components/OcButton.vue.d.ts +3 -3
- package/dist/components/OcCallout.vue.d.ts +14 -0
- package/dist/components/OcDropdownItem.vue.d.ts +8 -6
- package/dist/components/OcFeatureCard.vue.d.ts +23 -0
- package/dist/components/OcGroup.vue.d.ts +24 -0
- package/dist/components/OcLanguageSelect.vue.d.ts +2 -0
- package/dist/components/OcLinkCard.vue.d.ts +22 -0
- package/dist/components/OcMenuStatic.vue.d.ts +16 -0
- package/dist/components/OcMeterRow.vue.d.ts +3 -0
- package/dist/components/OcPanel.vue.d.ts +16 -0
- package/dist/components/OcParticleField.vue.d.ts +8 -0
- package/dist/components/OcReading.vue.d.ts +16 -0
- package/dist/components/OcResult.vue.d.ts +23 -0
- package/dist/index.d.ts +13 -1
- package/dist/omniaui-vue.js +3516 -2853
- package/dist/omniaui-vue.js.map +1 -1
- package/manifest.json +66 -0
- package/package.json +1 -1
- package/src/blocks/OcBlockContactForm.vue +146 -0
- package/src/components/OcBrandMark.vue +15 -0
- package/src/components/OcButton.vue +2 -2
- package/src/components/OcCallout.vue +11 -0
- package/src/components/OcDropdownItem.vue +14 -4
- package/src/components/OcFeatureCard.vue +15 -0
- package/src/components/OcGroup.vue +16 -0
- package/src/components/OcLanguageSelect.vue +3 -1
- package/src/components/OcLinkCard.vue +16 -0
- package/src/components/OcMenuStatic.vue +9 -0
- package/src/components/OcMeterRow.vue +3 -2
- package/src/components/OcPanel.vue +9 -0
- package/src/components/OcParticleField.vue +23 -0
- package/src/components/OcReading.vue +9 -0
- package/src/components/OcResult.vue +16 -0
- package/src/index.ts +34 -0
package/dist/omniaui-vue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"omniaui-vue.js","sources":["../src/composables/useUid.ts","../src/components/OcAccordion.vue","../src/components/OcAccordionAccent.vue","../src/components/OcAccordionItem.vue","../src/composables/useAttrsSplit.ts","../src/components/OcAffixInput.vue","../src/components/OcAlert.vue","../src/composables/useDialog.ts","../src/components/OcAlertDialog.vue","../src/components/OcAlphaTabs.vue","../src/components/OcAspectRatio.vue","../src/components/OcAttachment.vue","../src/components/OcAttachmentImage.vue","../src/components/OcAttachmentList.vue","../src/components/OcAttachmentThumb.vue","../src/components/OcAvatar.vue","../src/components/OcAvatarGroup.vue","../../ui/src/form-extras.js","../src/components/OcAvatarPicker.vue","../src/components/OcBackLink.vue","../src/components/OcBadge.vue","../../ui/src/barcode.js","../src/components/OcBarcode.vue","../src/components/OcBarcodeInput.vue","../src/components/OcBreadcrumb.vue","../src/components/OcBrowserFrame.vue","../src/components/OcProgress.vue","../src/components/OcBusyOverlay.vue","../src/components/OcButton.vue","../src/components/OcButtonGroup.vue","../src/components/OcButtonGroupText.vue","../src/components/OcCard.vue","../src/composables/chartLine.ts","../src/components/OcChartLine.vue","../src/components/OcChatComposer.vue","../src/components/OcCheckbox.vue","../src/components/OcChecklist.vue","../src/components/OcChipFilter.vue","../src/components/OcCollapsible.vue","../src/components/OcColorField.vue","../src/components/OcColorSelect.vue","../src/components/OcCommand.vue","../src/components/OcConfirmDialog.vue","../src/components/OcCookieConsent.vue","../src/components/OcCopyField.vue","../src/components/OcCounter.vue","../../ui/src/data-table.js","../src/components/OcDataTable.vue","../src/components/OcDataTableName.vue","../src/components/OcDateField.vue","../src/components/OcDecimalInput.vue","../src/components/OcDefinitionList.vue","../src/components/OcDocViewer.vue","../src/components/OcDropdown.vue","../src/components/OcDropdownItem.vue","../src/components/OcDropdownLabel.vue","../src/components/OcDropdownSeparator.vue","../src/components/OcDropzone.vue","../src/components/OcEmojiPicker.vue","../src/components/OcEmptyState.vue","../src/components/OcEntityCard.vue","../src/components/OcFactList.vue","../src/components/OcFilterCounts.vue","../src/components/OcFlipCard.vue","../src/components/OcFormField.vue","../src/components/OcFormSection.vue","../src/components/OcGallery.vue","../src/components/OcGlass.vue","../src/components/OcGlassBar.vue","../src/components/OcGlassPanel.vue","../src/components/OcGreeting.vue","../src/components/OcHeading.vue","../src/components/OcHoverCard.vue","../src/components/OcImageZoom.vue","../src/components/OcInput.vue","../src/components/OcInputGroup.vue","../src/components/OcItem.vue","../src/components/OcItemGroup.vue","../src/components/OcItemSeparator.vue","../src/components/OcKbd.vue","../src/components/OcKbdGroup.vue","../src/components/OcLabel.vue","../src/components/OcLanguageSelect.vue","../src/components/OcLauncherCard.vue","../src/components/OcLazyImage.vue","../src/components/OcLightbox.vue","../src/components/OcLinkArrow.vue","../src/components/OcLinkRow.vue","../src/components/OcListToolbar.vue","../src/components/OcLiveFrame.vue","../src/components/OcMarquee.vue","../src/components/OcMediaThumb.vue","../src/components/OcMediaCard.vue","../src/components/OcMediaRow.vue","../src/components/OcMessage.vue","../src/components/OcMessageList.vue","../src/components/OcMessageThread.vue","../src/components/OcMeterRow.vue","../src/components/OcModal.vue","../src/components/OcNameCard.vue","../src/components/OcNavmenuList.vue","../src/components/OcNavmenu.vue","../src/components/OcNextTeaser.vue","../src/components/OcNumberInput.vue","../src/components/OcOtpInput.vue","../src/components/OcPageHeader.vue","../src/components/OcPagination.vue","../src/components/OcPasswordInput.vue","../src/components/OcPasswordRequirements.vue","../src/components/OcPhoneInput.vue","../src/components/OcPopover.vue","../src/components/OcPrice.vue","../src/components/OcPriceCard.vue","../src/components/OcProductMark.vue","../src/components/OcProjectCard.vue","../src/components/OcProse.vue","../src/components/OcQuantity.vue","../src/composables/keys.ts","../src/components/OcRadio.vue","../src/components/OcRadioGroup.vue","../src/components/OcRating.vue","../src/components/OcRatingInput.vue","../src/components/OcRecoveryCodes.vue","../src/components/OcRibbon.vue","../src/components/OcScrollArea.vue","../src/components/OcSegmented.vue","../src/components/OcSelect.vue","../src/components/OcSeparator.vue","../src/components/OcSeverityCard.vue","../src/components/OcSheet.vue","../src/components/OcSidebar.vue","../src/components/OcSidebarCollapsible.vue","../src/components/OcSidebarGroup.vue","../src/components/OcSidebarMenu.vue","../src/components/OcSidebarMenuButton.vue","../src/components/OcSidebarSeparator.vue","../src/components/OcSkeleton.vue","../src/components/OcSlider.vue","../src/components/OcSortableRow.vue","../src/components/OcSpecList.vue","../src/components/OcSpinner.vue","../src/components/OcStackCard.vue","../src/components/OcStackList.vue","../src/components/OcStatCard.vue","../src/components/OcStatusDot.vue","../src/components/OcStatus.vue","../src/components/OcStepper.vue","../src/components/OcStock.vue","../src/components/OcSwitch.vue","../src/components/OcTable.vue","../src/components/OcTableActions.vue","../src/components/OcTableCompact.vue","../src/components/OcTabs.vue","../src/components/OcTagInput.vue","../src/components/OcTerminalLog.vue","../src/components/OcTextarea.vue","../src/components/OcThemeSwitch.vue","../src/components/OcTimeInput.vue","../src/components/OcTimeline.vue","../src/components/OcTitlebar.vue","../src/components/OcTitlebarBody.vue","../src/components/OcTitlebarButton.vue","../src/components/OcTitlebarWindow.vue","../src/components/OcToast.vue","../src/composables/useToast.ts","../src/components/OcToastContainer.vue","../src/components/OcToggle.vue","../src/components/OcToggleField.vue","../src/components/OcToggleGroup.vue","../src/components/OcTooltip.vue","../src/components/OcTopProgress.vue","../src/components/OcTree.vue","../src/components/OcUpgradeBanner.vue","../src/components/OcUser.vue","../src/components/OcVersionBanner.vue","../src/components/OcWatermark.vue","../src/blocks/OcBlockAboutTimeline.vue","../src/blocks/OcBlockAppHeader.vue","../src/blocks/OcBlockAppShell.vue","../src/blocks/OcBlockAuth.vue","../src/blocks/OcBlockAuthSplit.vue","../src/blocks/OcBlockContactGrid.vue","../src/blocks/OcBlockCta.vue","../src/blocks/OcBlockDataTable.vue","../src/blocks/OcBlockFaq.vue","../src/blocks/OcBlockFeatures.vue","../src/blocks/OcBlockFooter.vue","../src/blocks/OcBlockFormPage.vue","../src/blocks/OcBlockHero.vue","../src/blocks/OcBlockHeroCode.vue","../src/blocks/OcBlockHeroOrbit.vue","../src/blocks/OcBlockHeroSplit.vue","../src/blocks/OcBlockModuleHeader.vue","../src/blocks/OcBlockPageHero.vue","../src/blocks/OcBlockPortfolioGrid.vue","../src/blocks/OcBlockPricing.vue","../src/blocks/OcBlockProcess.vue","../src/blocks/OcBlockProductGrid.vue","../src/blocks/OcBlockProfileHeader.vue","../src/blocks/OcBlockShowcase.vue","../src/blocks/OcBlockSiteFooter.vue","../src/blocks/OcBlockSiteHeader.vue","../src/blocks/OcBlockSpotlight.vue","../src/blocks/OcBlockStats.vue","../src/blocks/OcBlockStatsCounter.vue","../src/blocks/OcBlockTeamList.vue","../src/blocks/OcBlockTwoFactor.vue","../src/blocks/OcBlockWizardDialog.vue","../src/index.ts"],"sourcesContent":["import * as Vue from 'vue'\r\n\r\nlet counter = 0\r\n\r\n/**\r\n * Stable unique id for aria-labelledby / popovertarget / label-for wiring.\r\n * Uses Vue's built-in useId() when available (Vue >= 3.5, SSR safe), otherwise a counter.\r\n */\r\nexport function useUid(prefix = 'oc'): string {\r\n const useId = (Vue as Record<string, unknown>)['useId'] as (() => string) | undefined\r\n return `${prefix}-${useId ? useId() : ++counter}`\r\n}\r\n","<script setup lang=\"ts\">\r\n/** Exclusive accordion on <details name>. Put OcAccordionItem children inside; they share one group name. */\r\nimport { provide } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = defineProps<{ name?: string }>()\r\nprovide('oc-accordion-name', props.name ?? useUid('oc-accordion'))\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-accordion\"><slot /></div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcAccordionAccent.vue | Map: div.oc-accordion.oc-accordion--accent (+ color classes) -> OcAccordionItem children -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Accent accordion: separate item cards with a colored start edge. Put OcAccordionItem children inside;\r\n * they share one group name (like OcAccordion). Color one item with class \"oc-accent--violet\" or \"oc-accordion-item--warning\".\r\n * Classes: .oc-accordion--accent, .oc-accent--*, .oc-accordion--success/--warning/--danger, .oc-accordion--flush, .oc-accordion-accent-meta\r\n */\r\nimport { provide } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = defineProps<{\r\n name?: string\r\n /** Color preset for all items. */\r\n accent?: 'blue' | 'cyan' | 'green' | 'orange' | 'red' | 'violet' | 'yellow'\r\n /** Semantic color for all items. */\r\n tone?: 'success' | 'warning' | 'danger'\r\n flush?: boolean\r\n}>()\r\n// Same key as OcAccordion, so OcAccordionItem picks up the group name.\r\nprovide('oc-accordion-name', props.name ?? useUid('oc-accordion'))\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-accordion', 'oc-accordion--accent', flush && 'oc-accordion--flush', accent && `oc-accent--${accent}`, tone && `oc-accordion--${tone}`]\">\r\n <slot />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** One accordion section (details/summary). v-model:open; default slot = content, `title` prop or slot = trigger. */\r\nimport { inject } from 'vue'\r\n\r\ndefineProps<{ title?: string }>()\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst name = inject<string | undefined>('oc-accordion-name', undefined)\r\n\r\nfunction onToggle(e: Event) {\r\n open.value = (e.target as HTMLDetailsElement).open\r\n}\r\n</script>\r\n\r\n<template>\r\n <details class=\"oc-accordion-item\" :name=\"name\" :open=\"open\" @toggle=\"onToggle\">\r\n <summary class=\"oc-accordion-trigger\"><slot name=\"title\">{{ title }}</slot></summary>\r\n <div class=\"oc-accordion-content\"><slot /></div>\r\n </details>\r\n</template>\r\n","import { computed, useAttrs } from 'vue'\r\n\r\n/**\r\n * For components whose root is a wrapper (label, div) around the real form control:\r\n * `class` and `style` stay on the wrapper, every other attribute (id, name, disabled,\r\n * autocomplete, aria-*, listeners) goes to the control. Use with defineOptions({ inheritAttrs: false }).\r\n */\r\nexport function useAttrsSplit() {\r\n const attrs = useAttrs()\r\n const root = computed(() => ({ class: attrs.class, style: attrs.style }))\r\n const control = computed(() => {\r\n const { class: _c, style: _s, ...rest } = attrs\r\n return rest\r\n })\r\n return { root, control }\r\n}\r\n","<!-- File: packages/vue/src/components/OcAffixInput.vue | Map: props -> variant presets -> template (input group --affix with inline symbol) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Input with a symbol inside the frame. variant: currency (€), percent (%) or email (@); or own prefix / suffix (props or slots).\r\n * Same markup as packages/ui/snippets/affix-input.html. v-model: string.\r\n * class/style stay on the wrapper, other attributes go to the input.\r\n */\r\nimport { computed } from 'vue'\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\nexport type AffixInputKind = 'currency' | 'percent' | 'email'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\n// alignEnd defaults to undefined (not false), so the variant preset can decide.\r\nconst props = withDefaults(defineProps<{ variant?: AffixInputKind; prefix?: string; suffix?: string; alignEnd?: boolean; error?: boolean }>(), {\r\n alignEnd: undefined,\r\n})\r\nconst model = defineModel<string>({ default: '' })\r\nconst { root, control } = useAttrsSplit()\r\n\r\n// Preset per variant. Email uses type=\"email\" so :user-invalid checks the address.\r\nconst PRESETS = {\r\n currency: { prefix: '\\u20AC', suffix: undefined, end: false, input: { type: 'text', inputmode: 'decimal' } },\r\n percent: { prefix: '%', suffix: undefined, end: false, input: { type: 'text', inputmode: 'decimal' } },\r\n email: { prefix: '@', suffix: undefined, end: false, input: { type: 'email', autocomplete: 'email' } },\r\n} as const\r\n\r\nconst preset = computed(() => (props.variant ? PRESETS[props.variant] : undefined))\r\nconst before = computed(() => props.prefix ?? preset.value?.prefix)\r\nconst after = computed(() => props.suffix ?? preset.value?.suffix)\r\nconst end = computed(() => props.alignEnd ?? preset.value?.end ?? false)\r\n</script>\r\n\r\n<template>\r\n <div v-bind=\"root\" :class=\"['oc-input-group', 'oc-input-group--affix', end && 'oc-input-group--end', error && 'oc-input-group--error']\">\r\n <span v-if=\"before || $slots.prefix\" class=\"oc-input-addon\" aria-hidden=\"true\"><slot name=\"prefix\">{{ before }}</slot></span>\r\n <input v-bind=\"{ type: 'text', ...preset?.input, ...control }\" v-model=\"model\" class=\"oc-input\" :aria-invalid=\"error ? 'true' : undefined\" />\r\n <span v-if=\"after || $slots.suffix\" class=\"oc-input-addon\" aria-hidden=\"true\"><slot name=\"suffix\">{{ after }}</slot></span>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Alert. Classes: .oc-alert--info/success/warning/danger, --inline (compact, under a field). Default slot = description. */\r\nwithDefaults(\r\n defineProps<{\r\n variant?: 'info' | 'success' | 'warning' | 'danger'\r\n title?: string\r\n inline?: boolean\r\n }>(),\r\n { variant: 'info' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-alert', `oc-alert--${variant}`, inline && 'oc-alert--inline']\" :role=\"variant === 'danger' && inline ? 'alert' : 'status'\">\r\n <h4 v-if=\"title || $slots.title\" class=\"oc-alert-title\"><slot name=\"title\">{{ title }}</slot></h4>\r\n <p v-if=\"$slots.default\" class=\"oc-alert-description\"><slot /></p>\r\n </div>\r\n</template>\r\n","import { onMounted, watch, type Ref } from 'vue'\r\n\r\n/**\r\n * Keeps a native <dialog> in sync with a boolean `open` model:\r\n * open -> showModal(), closed -> close(). Native close (Esc, backdrop, form method=dialog)\r\n * is reported through `onClose` so v-model:open stays correct.\r\n */\r\nexport function useDialog(open: Ref<boolean | undefined>, el: Ref<HTMLDialogElement | null>) {\r\n function sync() {\r\n const dialog = el.value\r\n if (!dialog) return\r\n if (open.value && !dialog.open) dialog.showModal()\r\n else if (!open.value && dialog.open) dialog.close()\r\n }\r\n watch(open, sync, { flush: 'post' })\r\n onMounted(sync)\r\n function onClose() {\r\n if (open.value) open.value = false\r\n }\r\n return { onClose }\r\n}\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Confirmation modal with a status icon. v-model:open. Emits `confirm` / `cancel` (both close the dialog).\r\n * Slots: icon, title, default (message), footer (scoped: { close }).\r\n * Classes: .oc-alert-dialog(--success/--error/--warning/--info/--question), .oc-alert-dialog-icon\r\n */\r\nimport { computed, ref } from 'vue'\r\nimport { useDialog } from '../composables/useDialog'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n type?: 'success' | 'error' | 'warning' | 'info' | 'question'\r\n title?: string\r\n message?: string\r\n confirmLabel?: string\r\n cancelLabel?: string\r\n /** Variant of the confirm button; defaults to destructive for warning/error. */\r\n confirmVariant?: 'default' | 'destructive' | 'success'\r\n }>(),\r\n { type: 'warning', confirmLabel: 'Confirm', cancelLabel: 'Cancel' },\r\n)\r\nconst emit = defineEmits<{ confirm: []; cancel: [] }>()\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst el = ref<HTMLDialogElement | null>(null)\r\nconst { onClose } = useDialog(open, el)\r\nconst titleId = useUid('oc-alert-dialog-title')\r\nconst textId = `${titleId}-text`\r\n\r\nconst glyphs = { success: '✓', error: '×', warning: '!', info: 'i', question: '?' } as const\r\nconst variant = computed(() => props.confirmVariant ?? (props.type === 'warning' || props.type === 'error' ? 'destructive' : 'default'))\r\nconst close = () => (open.value = false)\r\n\r\nfunction confirm() {\r\n emit('confirm')\r\n close()\r\n}\r\nfunction cancel() {\r\n emit('cancel')\r\n close()\r\n}\r\n</script>\r\n\r\n<template>\r\n <dialog\r\n ref=\"el\"\r\n class=\"oc-modal\"\r\n closedby=\"closerequest\"\r\n role=\"alertdialog\"\r\n :aria-labelledby=\"titleId\"\r\n :aria-describedby=\"textId\"\r\n @close=\"onClose\"\r\n >\r\n <div :class=\"['oc-modal-content', 'oc-modal-content--sm', 'oc-alert-dialog', `oc-alert-dialog--${type}`]\">\r\n <span class=\"oc-alert-dialog-icon\" aria-hidden=\"true\"><slot name=\"icon\">{{ glyphs[type] }}</slot></span>\r\n <h2 :id=\"titleId\" class=\"oc-modal-title\"><slot name=\"title\">{{ title }}</slot></h2>\r\n <div :id=\"textId\" class=\"oc-modal-body\"><slot>{{ message }}</slot></div>\r\n <div class=\"oc-modal-footer\">\r\n <slot name=\"footer\" :close=\"close\" :confirm=\"confirm\" :cancel=\"cancel\">\r\n <button class=\"oc-btn oc-btn--outline\" type=\"button\" @click=\"cancel\">{{ cancelLabel }}</button>\r\n <button :class=\"['oc-btn', variant !== 'default' && `oc-btn--${variant}`]\" type=\"button\" @click=\"confirm\">{{ confirmLabel }}</button>\r\n </slot>\r\n </div>\r\n </div>\r\n </dialog>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcAlphaTabs.vue | Map: nav -> \"All\" item -> one item per letter (current / disabled) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * All + A-Z letter filter. v-model = current letter (\"all\" by default).\r\n * With `href` (e.g. \"?letter={letter}\") the items are links; otherwise buttons that update v-model.\r\n * Classes: nav.oc-alpha-tabs(--wrap/--sm/--plain), .oc-alpha-tabs-item(--all), aria-current, aria-disabled\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n letters?: string[]\r\n /** Letters with entries; the others are disabled. Default: all. */\r\n available?: string[]\r\n /** Link pattern; \"{letter}\" is replaced, e.g. \"?letter={letter}\". */\r\n href?: string\r\n allLabel?: string\r\n wrap?: boolean\r\n size?: 'sm'\r\n plain?: boolean\r\n }>(),\r\n { letters: () => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''), allLabel: 'All' },\r\n)\r\nconst current = defineModel<string>({ default: 'all' })\r\n\r\nconst items = computed(() => [\r\n { key: 'all', label: props.allLabel, all: true },\r\n ...props.letters.map((l) => ({ key: l, label: l, all: false })),\r\n])\r\nconst isDisabled = (key: string) => key !== 'all' && props.available !== undefined && !props.available.includes(key)\r\nconst link = (key: string) => props.href?.replace('{letter}', key)\r\n</script>\r\n\r\n<template>\r\n <nav :class=\"['oc-alpha-tabs', wrap && 'oc-alpha-tabs--wrap', size && `oc-alpha-tabs--${size}`, plain && 'oc-alpha-tabs--plain']\" aria-label=\"Filter by letter\">\r\n <template v-for=\"item in items\" :key=\"item.key\">\r\n <a\r\n v-if=\"href\"\r\n :class=\"['oc-alpha-tabs-item', item.all && 'oc-alpha-tabs-item--all']\"\r\n :href=\"isDisabled(item.key) ? undefined : link(item.key)\"\r\n :aria-current=\"current === item.key ? 'true' : undefined\"\r\n :aria-disabled=\"isDisabled(item.key) ? 'true' : undefined\"\r\n >{{ item.label }}</a>\r\n <button\r\n v-else\r\n type=\"button\"\r\n :class=\"['oc-alpha-tabs-item', item.all && 'oc-alpha-tabs-item--all']\"\r\n :aria-current=\"current === item.key ? 'true' : undefined\"\r\n :disabled=\"isDisabled(item.key)\"\r\n @click=\"current = item.key\"\r\n >{{ item.label }}</button>\r\n </template>\r\n </nav>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Aspect-ratio box. `ratio` is a preset (square | photo | portrait | wide), a number (1.5) or a CSS ratio (\"5 / 2\");\r\n * default 16 / 9. `center` centers the content. Classes: .oc-aspect(--square/--photo/--portrait/--wide/--center), --oc-aspect\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst presets = ['square', 'photo', 'portrait', 'wide']\r\nconst props = defineProps<{ ratio?: 'square' | 'photo' | 'portrait' | 'wide' | number | string; center?: boolean }>()\r\nconst preset = computed(() => (typeof props.ratio === 'string' && presets.includes(props.ratio) ? props.ratio : undefined))\r\nconst custom = computed(() => (props.ratio !== undefined && !preset.value ? String(props.ratio) : undefined))\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"['oc-aspect', preset && `oc-aspect--${preset}`, center && 'oc-aspect--center']\"\r\n :style=\"custom ? { '--oc-aspect': custom } : undefined\"\r\n >\r\n <slot />\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcAttachment.vue | Map: type / extension helpers -> props -> a[download] or div chip (icon, name, size, remove) -->\r\n<script lang=\"ts\">\r\nexport type AttachmentType = 'pdf' | 'doc' | 'sheet' | 'zip' | 'image'\r\nexport interface AttachmentFile {\r\n name: string\r\n size?: string\r\n type?: AttachmentType\r\n ext?: string\r\n href?: string\r\n image?: string\r\n state?: 'uploading' | 'error'\r\n progress?: number\r\n removable?: boolean\r\n removeLabel?: string\r\n}\r\nconst TYPES: Record<string, AttachmentType> = {\r\n pdf: 'pdf', doc: 'doc', docx: 'doc', odt: 'doc', rtf: 'doc', txt: 'doc', xls: 'sheet', xlsx: 'sheet', csv: 'sheet', ods: 'sheet',\r\n zip: 'zip', rar: 'zip', '7z': 'zip', gz: 'zip', jpg: 'image', jpeg: 'image', png: 'image', gif: 'image', webp: 'image', heic: 'image', avif: 'image',\r\n}\r\nconst extOf = (name: string) => (name.includes('.') ? name.split('.').pop()!.toLowerCase() : '')\r\n/** Icon text and tint of a file name (Plan.xlsx -> XLS, sheet). */\r\nexport const attachmentMeta = (f: AttachmentFile) => ({\r\n ext: f.ext ?? extOf(f.name).toUpperCase().replace(/^(DOC|XLS|PPT)X$/, '$1'),\r\n type: f.type ?? TYPES[extOf(f.name)],\r\n})\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\n/**\r\n * File chip (same markup as snippets/attachment.html): icon tile by type, name, size, upload / error state and remove button.\r\n * With href (and not removable) it is an <a download>. Emits: remove. Classes: .oc-attachment(--pdf/--doc/--sheet/--zip/--image,\r\n * --uploading/--error) __icon __body __name __size __remove; --oc-attachment-progress while uploading.\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(defineProps<AttachmentFile>(), { progress: 0 })\r\nconst emit = defineEmits<{ remove: [] }>()\r\nconst meta = computed(() => attachmentMeta(props))\r\nconst uploading = computed(() => props.state === 'uploading')\r\nconst link = computed(() => !!props.href && !props.removable)\r\n</script>\r\n\r\n<template>\r\n <component\r\n :is=\"link ? 'a' : 'div'\"\r\n :class=\"['oc-attachment', meta.type && `oc-attachment--${meta.type}`, state && `oc-attachment--${state}`]\"\r\n :href=\"link ? href : undefined\"\r\n :download=\"link ? '' : undefined\"\r\n :style=\"uploading ? `--oc-attachment-progress:${progress}%` : undefined\"\r\n >\r\n <span class=\"oc-attachment__icon\" aria-hidden=\"true\"><img v-if=\"image\" :src=\"image\" alt=\"\" /><template v-else>{{ meta.ext }}</template></span>\r\n <span class=\"oc-attachment__body\">\r\n <span class=\"oc-attachment__name\">{{ name }}</span>\r\n <span v-if=\"uploading\" class=\"oc-attachment__size\" role=\"status\">{{ size ?? `Uploading… ${progress}%` }}</span>\r\n <span v-else-if=\"size\" class=\"oc-attachment__size\">{{ size }}</span>\r\n </span>\r\n <button v-if=\"removable\" type=\"button\" class=\"oc-attachment__remove\" :aria-label=\"removeLabel ?? (uploading ? `Cancel upload of ${name}` : `Remove ${name}`)\" @click=\"emit('remove')\">✕</button>\r\n </component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcAttachmentImage.vue | Map: props -> a.oc-attachment-image (img or placeholder art, caption) -->\r\n<script setup lang=\"ts\">\r\n/** Image preview inside a message (4 : 3, same markup as snippets/attachment.html). No src = placeholder art. Classes: .oc-attachment-image, __caption */\r\ndefineProps<{ href?: string; src?: string; alt: string; art?: number; caption?: string }>()\r\n</script>\r\n\r\n<template>\r\n <a class=\"oc-attachment-image\" :href=\"href\">\r\n <img v-if=\"src\" :src=\"src\" :alt=\"alt\" />\r\n <span v-else :class=\"['oc-media-art', art != null && `oc-media-art--${art}`]\" role=\"img\" :aria-label=\"alt\"></span>\r\n <span v-if=\"caption\" class=\"oc-attachment-image__caption\">{{ caption }}</span>\r\n </a>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcAttachmentList.vue | Map: props + demo files -> ul (li > chip) or div of chips -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Wrapping row of file chips (snippets/attachment.html). items = AttachmentFile[] (demo files when empty); slot default replaces them.\r\n * stack = one per line. as = ul (default) or div. Emits: remove(file, index). Classes: .oc-attachment-list(--stack)\r\n */\r\nimport OcAttachment, { type AttachmentFile } from './OcAttachment.vue'\r\n\r\nwithDefaults(defineProps<{ items?: AttachmentFile[]; stack?: boolean; as?: 'ul' | 'div'; label?: string }>(), {\r\n as: 'ul',\r\n label: 'Files in this message',\r\n items: () => [\r\n { name: 'Quote kitchen Project 1 v2.pdf', size: '1.2 MB', href: '#quote.pdf' },\r\n { name: 'Measurements ground floor.xlsx', size: '86 KB', href: '#measurements.xlsx' },\r\n { name: 'Contract addendum.docx', size: '240 KB', href: '#contract.docx' },\r\n { name: 'Plans architect.zip', size: '14.8 MB', href: '#plans.zip' },\r\n ],\r\n})\r\nconst emit = defineEmits<{ remove: [file: AttachmentFile, index: number] }>()\r\n</script>\r\n\r\n<template>\r\n <component :is=\"as\" :class=\"['oc-attachment-list', stack && 'oc-attachment-list--stack']\" :aria-label=\"label\">\r\n <slot>\r\n <template v-for=\"(f, i) in items\" :key=\"i\">\r\n <li v-if=\"as === 'ul'\"><OcAttachment v-bind=\"f\" @remove=\"emit('remove', f, i)\" /></li>\r\n <OcAttachment v-else v-bind=\"f\" @remove=\"emit('remove', f, i)\" />\r\n </template>\r\n </slot>\r\n </component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcAttachmentThumb.vue | Map: props -> .oc-attachment-thumb (img or placeholder art, remove button) -->\r\n<script setup lang=\"ts\">\r\n/** Square thumbnail of a pasted screenshot (snippets/attachment.html). removeLabel adds the remove button. Emits: remove. */\r\nwithDefaults(defineProps<{ src?: string; alt: string; art?: number; removeLabel?: string; as?: 'div' | 'span' }>(), { as: 'div' })\r\nconst emit = defineEmits<{ remove: [] }>()\r\n</script>\r\n\r\n<template>\r\n <component :is=\"as\" class=\"oc-attachment-thumb\">\r\n <img v-if=\"src\" :src=\"src\" :alt=\"alt\" />\r\n <span v-else :class=\"['oc-media-art', art != null && `oc-media-art--${art}`]\" role=\"img\" :aria-label=\"alt\"></span>\r\n <button v-if=\"removeLabel\" type=\"button\" class=\"oc-attachment__remove\" :aria-label=\"removeLabel\" @click=\"emit('remove')\">✕</button>\r\n </component>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Avatar (initials via the default slot, or an image via `src`). Classes: .oc-avatar--sm/lg/xl */\r\nwithDefaults(\r\n defineProps<{\r\n size?: 'sm' | 'md' | 'lg' | 'xl'\r\n src?: string\r\n alt?: string\r\n }>(),\r\n { size: 'md', alt: '' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <span :class=\"['oc-avatar', size !== 'md' && `oc-avatar--${size}`]\">\r\n <img v-if=\"src\" :src=\"src\" :alt=\"alt\" />\r\n <slot v-else />\r\n </span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Overlapping avatars. Put <OcAvatar> elements in the default slot. */\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-avatar-group\"><slot /></div>\r\n</template>\r\n","// File: packages/ui/src/form-extras.js\r\n// Map: ISO week -> date field (week label) -> name card (rename) -> avatar picker (preview, drop, remove) -> quantity\r\n// (step buttons) -> init -> boot\r\n// Small behaviour for four CSS components; each works without it (native date input, <details>, file input, number input).\r\n// Events on the component root: oc-namecard-rename { name }, oc-avatar-change { file } (null when removed),\r\n// oc-avatar-invalid { file, reason } (wrong type or too large).\r\n\r\n/** ISO 8601 week of a date: { week, year } (the week with the year's first Thursday is week 1). */\r\nexport function isoWeek(date) {\r\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\r\n const day = d.getUTCDay() || 7;\r\n d.setUTCDate(d.getUTCDate() + 4 - day);\r\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\r\n return { week: Math.ceil(((d - yearStart) / 86400000 + 1) / 7), year: d.getUTCFullYear() };\r\n}\r\n\r\n/** .oc-date-field: write \"Week 45\" (or the template in data-oc-week, e.g. \"W{week} · {year}\") into its __week. */\r\nexport function bindDateField(root) {\r\n const input = root.querySelector(\".oc-date-field__input\");\r\n const out = root.querySelector(\".oc-date-field__week\");\r\n if (!input || !out || root.dataset.ocBound) return;\r\n root.dataset.ocBound = \"\";\r\n const template = out.dataset.ocWeek || \"Week {week}\";\r\n const show = () => {\r\n const [y, m, d] = (input.value || \"\").split(\"-\").map(Number);\r\n if (!y) { out.textContent = \"\"; return; }\r\n const { week, year } = isoWeek(new Date(y, m - 1, d));\r\n out.textContent = template.replace(\"{week}\", String(week)).replace(\"{year}\", String(year));\r\n };\r\n input.addEventListener(\"input\", show);\r\n input.addEventListener(\"change\", show);\r\n show();\r\n}\r\n\r\n/** .oc-name-card: the [data-oc-rename] button swaps the title for an input; Enter or blur saves, Escape cancels. */\r\nexport function bindNameCard(root) {\r\n const head = root.querySelector(\":scope > .oc-name-card__head\");\r\n const title = head?.querySelector(\".oc-name-card__title\");\r\n const button = head?.querySelector(\"[data-oc-rename]\");\r\n if (!title || !button || root.dataset.ocBound) return;\r\n root.dataset.ocBound = \"\";\r\n const input = document.createElement(\"input\");\r\n input.className = \"oc-name-card__input\";\r\n input.hidden = true;\r\n input.setAttribute(\"aria-label\", button.getAttribute(\"aria-label\") || \"Name\");\r\n title.after(input);\r\n const finish = (save) => {\r\n if (input.hidden) return;\r\n const name = input.value.trim();\r\n if (save && name && name !== title.textContent) {\r\n title.textContent = name;\r\n root.dispatchEvent(new CustomEvent(\"oc-namecard-rename\", { bubbles: true, detail: { name } }));\r\n }\r\n input.hidden = true;\r\n title.hidden = false;\r\n button.focus();\r\n };\r\n button.addEventListener(\"click\", (event) => {\r\n event.preventDefault(); // a button in <summary> would also toggle the card\r\n input.value = title.textContent.trim();\r\n title.hidden = true;\r\n input.hidden = false;\r\n input.focus();\r\n input.select();\r\n });\r\n // Typing in the input must not toggle the card (Space and Enter in a <summary>).\r\n input.addEventListener(\"click\", (event) => event.preventDefault());\r\n input.addEventListener(\"keydown\", (event) => {\r\n if (event.key === \"Enter\") { event.preventDefault(); finish(true); }\r\n if (event.key === \"Escape\") { event.preventDefault(); finish(false); }\r\n if (event.key === \" \") event.stopPropagation();\r\n });\r\n input.addEventListener(\"keyup\", (event) => { if (event.key === \" \") event.preventDefault(); });\r\n input.addEventListener(\"blur\", () => finish(true));\r\n}\r\n\r\n/** Does file match an accept list (\"image/*\", \"image/png,.svg\")? An empty list accepts images only. */\r\nexport function acceptsFile(file, accept = \"image/*\") {\r\n if (!file) return false;\r\n const rules = (accept || \"image/*\").split(\",\").map((r) => r.trim().toLowerCase()).filter(Boolean);\r\n const type = (file.type || \"\").toLowerCase();\r\n const name = (file.name || \"\").toLowerCase();\r\n return rules.some((r) => (r.startsWith(\".\") ? name.endsWith(r) : r.endsWith(\"/*\") ? type.startsWith(r.slice(0, -1)) : type === r));\r\n}\r\n\r\n/** .oc-avatar-picker: preview the chosen or dropped image; [data-oc-avatar-remove] goes back to the initials.\r\n * A file that does not match the input's accept (a PDF picked through \"All files\") or is larger than\r\n * data-oc-max-kb is refused: the input is cleared and .oc-avatar-picker__error says why (oc-avatar-invalid). */\r\nexport function bindAvatarPicker(root) {\r\n const preview = root.querySelector(\".oc-avatar-picker__preview\");\r\n const file = root.querySelector(\".oc-avatar-picker__file\");\r\n if (!preview || !file || root.dataset.ocBound) return;\r\n root.dataset.ocBound = \"\";\r\n const initials = preview.querySelector(\"[data-oc-initials]\") || null;\r\n let url = \"\";\r\n const error = (text) => {\r\n let box = root.querySelector(\".oc-avatar-picker__error\");\r\n if (!box && text) {\r\n box = document.createElement(\"span\");\r\n box.className = \"oc-avatar-picker__error\";\r\n box.setAttribute(\"role\", \"alert\");\r\n (root.querySelector(\".oc-avatar-picker__text\") || root).append(box);\r\n }\r\n if (box) { box.textContent = text; box.hidden = !text; }\r\n root.classList.toggle(\"is-invalid\", Boolean(text));\r\n };\r\n const show = (picked) => {\r\n if (url) URL.revokeObjectURL(url);\r\n url = \"\";\r\n preview.querySelector(\"img\")?.remove();\r\n if (initials) initials.hidden = Boolean(picked);\r\n if (picked) {\r\n url = URL.createObjectURL(picked);\r\n const img = document.createElement(\"img\");\r\n img.src = url;\r\n img.alt = \"\";\r\n preview.prepend(img);\r\n }\r\n root.dispatchEvent(new CustomEvent(\"oc-avatar-change\", { bubbles: true, detail: { file: picked || null } }));\r\n };\r\n const take = (picked) => {\r\n if (!picked) return show(null);\r\n const maxKb = Number(root.dataset.ocMaxKb || 0);\r\n const reason = !acceptsFile(picked, file.accept) ? (root.dataset.ocTypeError || \"This file is not an image. Choose a PNG, JPG, WebP or SVG.\")\r\n : maxKb && picked.size > maxKb * 1024 ? (root.dataset.ocSizeError || `This image is larger than ${maxKb >= 1024 ? `${Math.round(maxKb / 102.4) / 10} MB` : `${maxKb} KB`}.`) : \"\";\r\n if (reason) {\r\n file.value = \"\";\r\n error(reason);\r\n root.dispatchEvent(new CustomEvent(\"oc-avatar-invalid\", { bubbles: true, detail: { file: picked, reason } }));\r\n return;\r\n }\r\n error(\"\");\r\n show(picked);\r\n };\r\n file.addEventListener(\"change\", () => take(file.files?.[0] || null));\r\n root.addEventListener(\"click\", (event) => {\r\n if (event.target.closest(\"[data-oc-avatar-upload]\")) file.click();\r\n if (event.target.closest(\"[data-oc-avatar-remove]\")) { file.value = \"\"; error(\"\"); show(null); }\r\n });\r\n root.addEventListener(\"dragover\", (event) => { event.preventDefault(); root.classList.add(\"is-dragover\"); });\r\n root.addEventListener(\"dragleave\", () => root.classList.remove(\"is-dragover\"));\r\n root.addEventListener(\"drop\", (event) => {\r\n event.preventDefault();\r\n root.classList.remove(\"is-dragover\");\r\n const picked = event.dataTransfer?.files?.[0];\r\n if (!picked) return;\r\n // A dropped file never reaches the input, so put it there for the form (where the browser allows it).\r\n if (acceptsFile(picked, file.accept)) try { const dt = new DataTransfer(); dt.items.add(picked); file.files = dt.files; } catch { /* old browsers */ }\r\n take(picked);\r\n });\r\n}\r\n\r\n/** Next value of a quantity: one step (data-oc-step = -1 or 1) within min and max, on the step grid. */\r\nexport function stepQuantity(value, direction, { min = -Infinity, max = Infinity, step = 1 } = {}) {\r\n const size = step > 0 ? step : 1;\r\n const base = Number.isFinite(min) ? min : 0;\r\n const current = Number.isFinite(value) ? value : base;\r\n // Off the step grid (2.5 with step 1), the first step lands on the grid: 3 up, 2 down.\r\n const k = (current - base) / size;\r\n const onGrid = Math.abs(k - Math.round(k)) < 1e-9;\r\n const next = onGrid ? current + direction * size : base + (direction > 0 ? Math.ceil(k) : Math.floor(k)) * size;\r\n return Math.min(max, Math.max(min, Number(next.toFixed(6))));\r\n}\r\n\r\n/** .oc-quantity: the [data-oc-step] buttons change the number input and disable themselves at min / max. */\r\nexport function bindQuantity(root) {\r\n const input = root.querySelector(\".oc-quantity__input\");\r\n if (!input || root.dataset.ocBound) return;\r\n root.dataset.ocBound = \"\";\r\n const num = (attr, fallback) => (input.getAttribute(attr) === null || input.getAttribute(attr) === \"\" ? fallback : Number(input.getAttribute(attr)));\r\n const limits = () => ({ min: num(\"min\", -Infinity), max: num(\"max\", Infinity), step: num(\"step\", 1) });\r\n const sync = () => {\r\n const { min, max } = limits();\r\n const value = Number(input.value);\r\n root.querySelectorAll(\"[data-oc-step]\").forEach((button) => {\r\n const down = Number(button.dataset.ocStep) < 0;\r\n button.disabled = input.disabled || (down ? value <= min : value >= max);\r\n });\r\n };\r\n root.addEventListener(\"click\", (event) => {\r\n const button = event.target.closest(\"[data-oc-step]\");\r\n if (!button || !root.contains(button) || input.disabled || input.readOnly) return;\r\n const next = stepQuantity(Number(input.value), Number(button.dataset.ocStep) < 0 ? -1 : 1, limits());\r\n if (String(next) === input.value) return;\r\n input.value = String(next);\r\n input.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n input.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n });\r\n input.addEventListener(\"input\", sync);\r\n input.addEventListener(\"change\", sync);\r\n sync();\r\n}\r\n\r\n/** Wire every date field, name card, avatar picker and quantity field under scope. */\r\nexport function initFormExtras(scope = document) {\r\n scope.querySelectorAll(\".oc-date-field\").forEach(bindDateField);\r\n scope.querySelectorAll(\".oc-name-card\").forEach(bindNameCard);\r\n scope.querySelectorAll(\".oc-avatar-picker\").forEach(bindAvatarPicker);\r\n scope.querySelectorAll(\".oc-quantity\").forEach(bindQuantity);\r\n}\r\n\r\n// Starts on its own as /js/oc-form-extras.js (`npx omniaui copy-js`), with ?auto in the URL or data-oc-auto on the tag.\r\nfunction autoStart() {\r\n if (typeof document === \"undefined\") return false;\r\n const url = String(import.meta.url);\r\n if (url.includes(\"oc-form-extras\") || /[?&]auto(=|&|$)/.test(url)) return true;\r\n const file = url.split(/[?#]/)[0];\r\n return [...document.querySelectorAll(\"script[data-oc-auto][src]\")].some((s) => s.src.split(/[?#]/)[0] === file);\r\n}\r\nif (autoStart()) {\r\n const boot = () => initFormExtras(document);\r\n if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", boot);\r\n else boot();\r\n}\r\n","<!-- File: packages/vue/src/components/OcAvatarPicker.vue | Map: props -> preview + file input -> text and buttons -> change event on mount -->\r\n<script setup lang=\"ts\">\r\n/** Avatar or logo picker with a preview, Upload and Remove, and drag and drop. Emits change (File or null) and invalid (File, reason) for a wrong type or a file over maxKb. */\r\nimport { onMounted, useId, useTemplateRef } from 'vue'\r\nimport { bindAvatarPicker } from '../../../ui/src/form-extras.js'\r\n\r\nwithDefaults(defineProps<{ initials: string; label?: string; hint?: string; logo?: boolean; name?: string; accept?: string; maxKb?: number }>(), { label: 'Profile picture', logo: false, accept: 'image/*' })\r\nconst emit = defineEmits<{ change: [file: File | null]; invalid: [file: File, reason: string] }>()\r\nconst id = useId()\r\nconst root = useTemplateRef<HTMLDivElement>('root')\r\nonMounted(() => {\r\n if (!root.value) return\r\n bindAvatarPicker(root.value)\r\n root.value.addEventListener('oc-avatar-change', (e) => emit('change', (e as CustomEvent<{ file: File | null }>).detail.file))\r\n root.value.addEventListener('oc-avatar-invalid', (e) => { const d = (e as CustomEvent<{ file: File; reason: string }>).detail; emit('invalid', d.file, d.reason) })\r\n})\r\n</script>\r\n\r\n<template>\r\n <div ref=\"root\" :class=\"['oc-avatar-picker', logo && 'oc-avatar-picker--square oc-avatar-picker--logo']\" :data-oc-max-kb=\"maxKb\">\r\n <label class=\"oc-avatar-picker__preview\" :for=\"id\" title=\"Choose an image\">\r\n <span data-oc-initials>{{ initials }}</span>\r\n <input :id=\"id\" class=\"oc-avatar-picker__file\" type=\"file\" :accept=\"accept\" :name=\"name\">\r\n </label>\r\n <div class=\"oc-avatar-picker__text\">\r\n <span class=\"oc-avatar-picker__label\">{{ label }}</span>\r\n <span v-if=\"hint\" class=\"oc-avatar-picker__hint\">{{ hint }}</span>\r\n <div class=\"oc-avatar-picker__actions\">\r\n <button type=\"button\" class=\"oc-btn oc-btn--outline oc-btn--sm\" data-oc-avatar-upload><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M9 16v-6H5l7-7l7 7h-4v6zm-4 4v-2h14v2z\" /></svg>Upload</button>\r\n <button type=\"button\" class=\"oc-btn oc-btn--ghost oc-btn--sm\" data-oc-avatar-remove><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12z\" /></svg>Remove</button>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Outline link that names its destination (Back to Products). */\r\nwithDefaults(defineProps<{ href?: string }>(), { href: '#' })\r\n</script>\r\n\r\n<template>\r\n <a class=\"oc-back-link\" :href=\"href\"><slot /></a>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Badge. Classes: .oc-badge + --secondary/--outline/--destructive/--success/--warning/--info */\r\nwithDefaults(\r\n defineProps<{\r\n variant?: 'default' | 'secondary' | 'outline' | 'destructive' | 'success' | 'warning' | 'info'\r\n }>(),\r\n { variant: 'default' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <span :class=\"['oc-badge', variant !== 'default' && `oc-badge--${variant}`]\"><slot /></span>\r\n</template>\r\n","// File: packages/ui/src/barcode.js\r\n// Map: format guess -> EAN-13 / EAN-8 / UPC-A -> Code 128 (B, or C for even digit runs) -> bars to SVG -> SVG file -> bind -> boot\r\n// Barcode display without a dependency : <figure class=\"oc-barcode\" data-value=\"5412345678908\">\r\n// gets an SVG with the bars and the digits under it. data-format=\"auto|EAN13|EAN8|UPC|CODE128\" (default auto).\r\n\r\n/** Module widths of the Code 128 symbols 0–105 (6 elements, 11 modules each) and the stop (7 elements, 13 modules). */\r\nexport const CODE128 = [\r\n \"212222\", \"222122\", \"222221\", \"121223\", \"121322\", \"131222\", \"122213\", \"122312\", \"132212\", \"221213\",\r\n \"221312\", \"231212\", \"112232\", \"122132\", \"122231\", \"113222\", \"123122\", \"123221\", \"223211\", \"221132\",\r\n \"221231\", \"213212\", \"223112\", \"312131\", \"311222\", \"321122\", \"321221\", \"312212\", \"322112\", \"322211\",\r\n \"212123\", \"212321\", \"232121\", \"111323\", \"131123\", \"131321\", \"112313\", \"132113\", \"132311\", \"211313\",\r\n \"231113\", \"231311\", \"112133\", \"112331\", \"132131\", \"113123\", \"113321\", \"133121\", \"313121\", \"211331\",\r\n \"231131\", \"213113\", \"213311\", \"213131\", \"311123\", \"311321\", \"331121\", \"312113\", \"312311\", \"332111\",\r\n \"314111\", \"221411\", \"431111\", \"111224\", \"111422\", \"121124\", \"121421\", \"141122\", \"141221\", \"112214\",\r\n \"112412\", \"122114\", \"122411\", \"142112\", \"142211\", \"241211\", \"221114\", \"413111\", \"241112\", \"134111\",\r\n \"111242\", \"121142\", \"121241\", \"114212\", \"124112\", \"124211\", \"411212\", \"421112\", \"421211\", \"212141\",\r\n \"214121\", \"412121\", \"111143\", \"111341\", \"131141\", \"114113\", \"114311\", \"411113\", \"411311\", \"113141\",\r\n \"114131\", \"311141\", \"411131\", \"211412\", \"211214\", \"211232\",\r\n];\r\nconst STOP = \"2331112\";\r\nconst START_B = 104;\r\nconst START_C = 105;\r\n\r\nconst L = [\"0001101\", \"0011001\", \"0010011\", \"0111101\", \"0100011\", \"0110001\", \"0101111\", \"0111011\", \"0110111\", \"0001011\"];\r\nconst G = [\"0100111\", \"0110011\", \"0011011\", \"0100001\", \"0011101\", \"0111001\", \"0000101\", \"0010001\", \"0001001\", \"0010111\"];\r\nconst R = L.map((code) => code.replace(/./g, (bit) => (bit === \"1\" ? \"0\" : \"1\")));\r\nconst PARITY = [\"LLLLLL\", \"LLGLGG\", \"LLGGLG\", \"LLGGGL\", \"LGLLGG\", \"LGGLLG\", \"LGGGLL\", \"LGLGLG\", \"LGLGGL\", \"LGGLGL\"];\r\n\r\n/** EAN-13, EAN-8 or UPC-A for plain digit strings of that length (with or without the check digit); else Code 128. */\r\nexport function guessFormat(value) {\r\n if (/^\\d{12,13}$/.test(value)) return \"EAN13\";\r\n if (/^\\d{7,8}$/.test(value)) return \"EAN8\";\r\n if (/^\\d{11}$/.test(value)) return \"UPC\";\r\n return \"CODE128\";\r\n}\r\n\r\n/** Check digit of an EAN/UPC body: weights 3 and 1 from the right. */\r\nexport function eanCheck(body) {\r\n let sum = 0;\r\n [...body].reverse().forEach((d, i) => { sum += Number(d) * (i % 2 === 0 ? 3 : 1); });\r\n return String((10 - (sum % 10)) % 10);\r\n}\r\n\r\n/** Bars (a \"1010…\" module string) and the full digits for EAN-13 / EAN-8; throws on a wrong check digit. */\r\nexport function encodeEan(value, length) {\r\n const body = value.slice(0, length - 1);\r\n const check = eanCheck(body);\r\n if (value.length === length && value[length - 1] !== check) throw new Error(`check digit should be ${check}`);\r\n const digits = body + check;\r\n if (length === 8) {\r\n const left = [...digits.slice(0, 4)].map((d) => L[d]).join(\"\");\r\n const right = [...digits.slice(4)].map((d) => R[d]).join(\"\");\r\n return { bits: `101${left}01010${right}101`, text: digits };\r\n }\r\n const parity = PARITY[digits[0]];\r\n const left = [...digits.slice(1, 7)].map((d, i) => (parity[i] === \"L\" ? L : G)[d]).join(\"\");\r\n const right = [...digits.slice(7)].map((d) => R[d]).join(\"\");\r\n return { bits: `101${left}01010${right}101`, text: digits };\r\n}\r\n\r\n/** Code 128 symbol values for a text: code C for an all-digit text of even length (4+), else code B (ASCII 32–126). */\r\nexport function code128Values(text) {\r\n let values;\r\n if (/^(\\d\\d){2,}$/.test(text)) {\r\n values = [START_C, ...text.match(/\\d\\d/g).map(Number)];\r\n } else {\r\n if (/[^\\x20-\\x7e]/.test(text)) throw new Error(\"Code 128 B takes ASCII characters 32–126 only\");\r\n values = [START_B, ...[...text].map((ch) => ch.charCodeAt(0) - 32)];\r\n }\r\n const check = values.reduce((sum, v, i) => sum + v * (i === 0 ? 1 : i), 0) % 103;\r\n return [...values, check];\r\n}\r\n\r\n/** Module string (\"1\" = bar) for Code 128. */\r\nexport function encodeCode128(text) {\r\n const widths = code128Values(text).map((v) => CODE128[v]).join(\"\") + STOP;\r\n let bits = \"\";\r\n [...widths].forEach((w, i) => { bits += (i % 2 === 0 ? \"1\" : \"0\").repeat(Number(w)); });\r\n return { bits, text };\r\n}\r\n\r\n/** Encode a value in a format (auto picks one). Returns the module string and the human-readable text. */\r\nexport function encodeBarcode(value, format = \"auto\") {\r\n const code = String(value ?? \"\").trim();\r\n if (!code) throw new Error(\"empty value\");\r\n const kind = format === \"auto\" ? guessFormat(code) : format.toUpperCase();\r\n if (kind === \"EAN13\") return encodeEan(code.padStart(code.length === 12 ? 12 : 13, \"0\"), 13);\r\n if (kind === \"UPC\") return encodeEan(`0${code}`, 13);\r\n if (kind === \"EAN8\") return encodeEan(code, 8);\r\n return encodeCode128(code);\r\n}\r\n\r\n/** Text for HTML: the value can come from user input (Code 128 encodes < > & \" too). */\r\nconst escapeHtml = (text) => String(text).replace(/[&<>\"']/g, (ch) => `&#${ch.charCodeAt(0)};`);\r\n\r\n/** SVG markup of the bars, with a quiet zone of 10 modules on both sides. Bars use currentColor. */\r\nexport function barsToSvg(bits, label = \"\") {\r\n const quiet = 10;\r\n let rects = \"\";\r\n for (let i = 0; i < bits.length; ) {\r\n if (bits[i] !== \"1\") { i++; continue; }\r\n let w = 1;\r\n while (bits[i + w] === \"1\") w++;\r\n rects += `<rect x=\"${i + quiet}\" y=\"0\" width=\"${w}\" height=\"50\"/>`;\r\n i += w;\r\n }\r\n const width = bits.length + quiet * 2;\r\n return `<svg viewBox=\"0 0 ${width} 50\" preserveAspectRatio=\"none\" fill=\"currentColor\" role=\"img\" aria-label=\"${escapeHtml(label)}\" style=\"aspect-ratio:${width}/50\">${rects}</svg>`;\r\n}\r\n\r\n/** A standalone SVG file (white background, black bars, digits under it) to download, print or put on a label.\r\n * The barcode maker form (download, live preview) is part of OmniaUI Pro: @birdycom/omniaui-pro/barcode-maker.js.\r\n * moduleWidth and height are in px; throws like encodeBarcode for a value it cannot encode. */\r\nexport function barcodeFile(value, { format = \"auto\", digits = true, moduleWidth = 2, height = 70 } = {}) {\r\n const { bits, text } = encodeBarcode(value, format);\r\n const quiet = 10;\r\n const font = 14;\r\n const width = (bits.length + quiet * 2) * moduleWidth;\r\n const full = height + (digits ? font + 8 : 0) + 8;\r\n let rects = \"\";\r\n for (let i = 0; i < bits.length; ) {\r\n if (bits[i] !== \"1\") { i++; continue; }\r\n let w = 1;\r\n while (bits[i + w] === \"1\") w++;\r\n rects += `<rect x=\"${(i + quiet) * moduleWidth}\" y=\"4\" width=\"${w * moduleWidth}\" height=\"${height}\"/>`;\r\n i += w;\r\n }\r\n const caption = digits ? `<text x=\"${width / 2}\" y=\"${height + font + 8}\" text-anchor=\"middle\" font-family=\"ui-monospace, Consolas, monospace\" font-size=\"${font}\" letter-spacing=\"1\">${escapeHtml(text)}</text>` : \"\";\r\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${full}\" viewBox=\"0 0 ${width} ${full}\"><rect width=\"100%\" height=\"100%\" fill=\"#fff\"/><g fill=\"#000\">${rects}${caption}</g></svg>`;\r\n}\r\n\r\n/** Draw one .oc-barcode from its data-value and data-format. Shows a short error instead of bars when it cannot. */\r\nexport function renderBarcode(el) {\r\n if (!el) return;\r\n const value = el.dataset.value ?? \"\";\r\n const digits = el.dataset.digits !== \"false\";\r\n try {\r\n const { bits, text } = encodeBarcode(value, el.dataset.format || \"auto\");\r\n el.removeAttribute(\"data-error\");\r\n el.innerHTML = barsToSvg(bits, `Barcode ${text}`) + (digits ? `<figcaption class=\"oc-barcode__digits\">${escapeHtml(text)}</figcaption>` : \"\");\r\n } catch (err) {\r\n el.setAttribute(\"data-error\", \"\");\r\n el.innerHTML = `<figcaption class=\"oc-barcode__digits\">${escapeHtml(value)}: ${escapeHtml(err.message)}</figcaption>`;\r\n }\r\n}\r\n\r\n/** Draw every .oc-barcode[data-value] under scope. */\r\nexport function initBarcodes(scope = document) {\r\n scope.querySelectorAll(\".oc-barcode[data-value]\").forEach(renderBarcode);\r\n}\r\n\r\n// Starts on its own as /js/oc-barcode.js (`npx omniaui copy-js`), with ?auto in the URL or data-oc-auto on the tag.\r\nfunction autoStart() {\r\n if (typeof document === \"undefined\") return false;\r\n const url = String(import.meta.url);\r\n if (url.includes(\"oc-barcode\") || /[?&]auto(=|&|$)/.test(url)) return true;\r\n const file = url.split(/[?#]/)[0];\r\n return [...document.querySelectorAll(\"script[data-oc-auto][src]\")].some((s) => s.src.split(/[?#]/)[0] === file);\r\n}\r\nif (autoStart()) {\r\n const boot = () => initBarcodes(document);\r\n if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", boot);\r\n else boot();\r\n}\r\n","<!-- File: packages/vue/src/components/OcBarcode.vue | Map: props -> encode -> svg + digits -->\r\n<script setup lang=\"ts\">\r\n/** EAN-13, EAN-8, UPC-A or Code 128 as SVG; shows the reason when the value cannot be encoded. */\r\nimport { computed } from 'vue'\r\nimport { barsToSvg, encodeBarcode } from '../../../ui/src/barcode.js'\r\n\r\nconst props = withDefaults(defineProps<{ value: string; format?: 'auto' | 'EAN13' | 'EAN8' | 'UPC' | 'CODE128'; digits?: boolean; size?: 'md' | 'hero' | 'compact' }>(), { format: 'auto', digits: true, size: 'md' })\r\nconst result = computed(() => {\r\n try {\r\n const { bits, text } = encodeBarcode(props.value, props.format)\r\n return { svg: barsToSvg(bits, `Barcode ${text}`), text, error: '' }\r\n } catch (err) {\r\n return { svg: '', text: props.value, error: (err as Error).message }\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <figure :class=\"['oc-barcode', size !== 'md' && `oc-barcode--${size}`]\" :data-error=\"result.error ? '' : undefined\">\r\n <span v-if=\"result.svg\" style=\"display: contents\" v-html=\"result.svg\"></span>\r\n <figcaption v-if=\"digits || result.error\" class=\"oc-barcode__digits\">{{ result.error ? `${value}: ${result.error}` : result.text }}</figcaption>\r\n </figure>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcBarcodeInput.vue | Map: props + model -> template (label, digits-only field, preview figure + slot) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Barcode / EAN field with a preview. v-model: string (digits only).\r\n * Slot `preview`: your own <svg>/<canvas> barcode; default = decorative placeholder bars.\r\n * Same markup as packages/ui/snippets/barcode-input.html. class/style on the wrapper, other attributes on the input.\r\n */\r\nimport { computed } from 'vue'\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nconst props = withDefaults(defineProps<{ label?: string; id?: string; emptyText?: string; error?: boolean }>(), { emptyText: 'No code yet' })\r\nconst model = defineModel<string>({ default: '' })\r\nconst { root, control } = useAttrsSplit()\r\nconst auto = useUid('oc-barcode')\r\nconst inputId = computed(() => props.id ?? auto)\r\n\r\nfunction onInput(e: Event) {\r\n const input = e.target as HTMLInputElement\r\n model.value = input.value\r\n}\r\n</script>\r\n\r\n<template>\r\n <div v-bind=\"root\" class=\"oc-barcode-input\">\r\n <label v-if=\"label\" class=\"oc-field-label\" :for=\"inputId\">{{ label }}</label>\r\n <div class=\"oc-input-group oc-input-group--affix\">\r\n <span class=\"oc-input-addon\" aria-hidden=\"true\">\r\n <svg viewBox=\"0 0 16 16\"><path fill=\"currentColor\" d=\"M1 1h1.4v14H1zm2.2 0h.7v14h-.7zm1.6 0h1.5v14H4.8zm2.4 0h.7v14H7.2zm1.6 0h.7v14H8.8zm1.5 0h1.4v14h-1.4zm2.2 0H15v14h-.9z\" /></svg>\r\n </span>\r\n <input\r\n v-bind=\"control\"\r\n :id=\"inputId\"\r\n class=\"oc-input oc-barcode-input-field\"\r\n type=\"text\"\r\n autocomplete=\"off\"\r\n spellcheck=\"false\"\r\n maxlength=\"80\"\r\n placeholder=\"EAN-13 or internal code\"\r\n :aria-invalid=\"error ? 'true' : undefined\"\r\n :value=\"model\"\r\n @input=\"onInput\"\r\n />\r\n </div>\r\n <figure :class=\"['oc-barcode-preview', !model && 'oc-barcode-preview--empty']\" aria-label=\"Barcode preview\">\r\n <slot name=\"preview\"><div class=\"oc-barcode-preview-bars\" aria-hidden=\"true\"></div></slot>\r\n <figcaption class=\"oc-barcode-preview-code\">{{ model || emptyText }}</figcaption>\r\n </figure>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Breadcrumb. Pass `items` (the last one is the current page) or use the default slot.\r\n * `icon` per item is a webicon name (mdi:home-outline …), drawn with <iconify-icon>; separator=\"chevron\" puts › between.\r\n */\r\nexport interface BreadcrumbItem {\r\n label: string\r\n href?: string\r\n icon?: string\r\n}\r\nwithDefaults(defineProps<{ items?: BreadcrumbItem[]; label?: string; separator?: 'slash' | 'chevron' }>(), {\r\n items: () => [],\r\n label: 'Breadcrumb',\r\n separator: 'slash',\r\n})\r\n</script>\r\n\r\n<template>\r\n <nav :class=\"['oc-breadcrumb', separator === 'chevron' && 'oc-breadcrumb--chevron']\" :aria-label=\"label\">\r\n <slot>\r\n <template v-for=\"(item, i) in items\" :key=\"i\">\r\n <a v-if=\"item.href && i < items.length - 1\" class=\"oc-breadcrumb-item\" :href=\"item.href\"\r\n ><iconify-icon v-if=\"item.icon\" :icon=\"item.icon\" aria-hidden=\"true\" />{{ item.label }}</a\r\n >\r\n <span v-else class=\"oc-breadcrumb-item\" aria-current=\"page\"\r\n ><iconify-icon v-if=\"item.icon\" :icon=\"item.icon\" aria-hidden=\"true\" />{{ item.label }}</span\r\n >\r\n </template>\r\n </slot>\r\n </nav>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcBrowserFrame.vue | Map: props -> figure -> bar (dots, address, actions) -> view (slot or img) -> caption -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Fake browser chrome (same markup as snippets/browser-frame.html).\r\n * Props: url (address pill), src / alt (screenshot), caption, minimal, dark, tilt, auto (free height), ratio (\"16 / 9\").\r\n * Slots: default (live content, replaces the screenshot), actions (glyphs right in the bar), caption.\r\n * Classes: .oc-browser-frame(--minimal/--dark/--tilt/--auto), __bar, __address, __actions, __view, __caption\r\n */\r\nwithDefaults(\r\n defineProps<{ url?: string; src?: string; alt?: string; caption?: string; minimal?: boolean; dark?: boolean; tilt?: boolean; auto?: boolean; ratio?: string }>(),\r\n { alt: '' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <figure\r\n :class=\"['oc-browser-frame', minimal && 'oc-browser-frame--minimal', dark && 'oc-browser-frame--dark', tilt && 'oc-browser-frame--tilt', auto && 'oc-browser-frame--auto']\"\r\n :style=\"ratio ? { '--oc-browser-frame-ratio': ratio } : undefined\"\r\n >\r\n <div class=\"oc-browser-frame__bar\">\r\n <i /><i /><i />\r\n <span v-if=\"url\" class=\"oc-browser-frame__address\">{{ url }}</span>\r\n <span v-if=\"$slots.actions\" class=\"oc-browser-frame__actions\" aria-hidden=\"true\"><slot name=\"actions\" /></span>\r\n </div>\r\n <div class=\"oc-browser-frame__view\">\r\n <slot>\r\n <img v-if=\"src\" :src=\"src\" :alt=\"alt\" />\r\n <div v-else class=\"oc-media-art\" role=\"img\" :aria-label=\"alt\" />\r\n </slot>\r\n </div>\r\n <figcaption v-if=\"caption || $slots.caption\" class=\"oc-browser-frame__caption\"><slot name=\"caption\">{{ caption }}</slot></figcaption>\r\n </figure>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Progress bar. `value` of `max` (default 100). Classes: .oc-progress(--sm/--xs/--glow), .oc-progress-bar--success/warning/danger,\r\n * .oc-progress-marker. `levels`: warning from 70 %, danger from 90 % (or [warning, danger]); an explicit variant wins.\r\n * `marker`: a target point in the unit of `value`. */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n value: number\r\n max?: number\r\n variant?: 'default' | 'success' | 'warning' | 'danger'\r\n size?: 'xs' | 'sm' | 'md'\r\n glow?: boolean\r\n levels?: boolean | [number, number]\r\n marker?: number\r\n label?: string\r\n }>(),\r\n { max: 100, variant: 'default', size: 'md', levels: false },\r\n)\r\nconst pct = (v: number) => (props.max > 0 ? Math.min(100, Math.max(0, (v / props.max) * 100)) : 0)\r\nconst percent = computed(() => Math.round(pct(props.value)))\r\nconst tone = computed(() => {\r\n if (props.variant !== 'default' || !props.levels) return props.variant\r\n const [warn, danger] = props.levels === true ? [70, 90] : props.levels\r\n return percent.value >= danger ? 'danger' : percent.value >= warn ? 'warning' : 'default'\r\n})\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"['oc-progress', size !== 'md' && `oc-progress--${size}`, glow && 'oc-progress--glow']\"\r\n role=\"progressbar\"\r\n :aria-valuenow=\"value\"\r\n aria-valuemin=\"0\"\r\n :aria-valuemax=\"max\"\r\n :aria-label=\"label\"\r\n >\r\n <div :class=\"['oc-progress-bar', tone !== 'default' && `oc-progress-bar--${tone}`]\" :style=\"{ width: `${percent}%` }\"></div>\r\n <span v-if=\"marker != null\" class=\"oc-progress-marker\" :style=\"{ left: `${pct(marker)}%` }\"></span>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcBusyOverlay.vue | Map: props + model -> <dialog closedby=\"none\"> (spinner or progress, title, text) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Modal \"please wait\" overlay (same markup as snippets/busy-overlay.html). v-model:open shows it while a long submit or\r\n * upload runs; the page is inert and Esc does not close it. `progress` (0-100) swaps the spinner for a progress bar.\r\n * Slot: default (replaces the text). Classes: .oc-busy-overlay __title __text; .oc-spinner / .oc-progress\r\n */\r\nimport { ref } from 'vue'\r\nimport { useDialog } from '../composables/useDialog'\r\nimport { useUid } from '../composables/useUid'\r\nimport OcProgress from './OcProgress.vue'\r\n\r\nconst props = withDefaults(defineProps<{ title?: string; text?: string; progress?: number; label?: string; id?: string }>(), {\r\n title: 'Saving…',\r\n text: 'The photos are being processed. This can take a minute; please keep this page open.',\r\n label: 'Busy',\r\n})\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst el = ref<HTMLDialogElement | null>(null)\r\nconst { onClose } = useDialog(open, el)\r\nconst auto = useUid('oc-busy-overlay')\r\nconst base = props.id ?? auto\r\n</script>\r\n\r\n<template>\r\n <dialog :id=\"base\" ref=\"el\" class=\"oc-busy-overlay\" closedby=\"none\" :aria-labelledby=\"`${base}-title`\" :aria-describedby=\"`${base}-text`\" @close=\"onClose\">\r\n <span v-if=\"progress == null\" class=\"oc-spinner\" role=\"status\" :aria-label=\"label\"></span>\r\n <OcProgress v-else :value=\"progress\" :label=\"label\" />\r\n <h2 :id=\"`${base}-title`\" class=\"oc-busy-overlay__title\">{{ title }}</h2>\r\n <p :id=\"`${base}-text`\" class=\"oc-busy-overlay__text\"><slot>{{ text }}</slot></p>\r\n </dialog>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Button. Renders <a> when `href` is set, otherwise <button>.\r\n * Classes: .oc-btn + --secondary/--outline/--ghost/--link/--destructive/--success/--gradient/--glass,\r\n * --soft-primary/-success/-warning/-destructive/-info (row actions), --plain (icon only, no surface),\r\n * --xs/--sm/--lg, --icon, --pill, --inline (link button inside running text). `loading` sets aria-busy (spinner).\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n variant?:\r\n | 'default' | 'secondary' | 'outline' | 'ghost' | 'link' | 'destructive' | 'success' | 'gradient' | 'glass'\r\n | 'soft-primary' | 'soft-success' | 'soft-warning' | 'soft-destructive' | 'soft-info' | 'plain'\r\n size?: 'xs' | 'sm' | 'md' | 'lg'\r\n icon?: boolean\r\n pill?: boolean\r\n inline?: boolean\r\n loading?: boolean\r\n disabled?: boolean\r\n href?: string\r\n type?: 'button' | 'submit' | 'reset'\r\n }>(),\r\n { variant: 'default', size: 'md', type: 'button' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <a\r\n v-if=\"href\"\r\n :href=\"href\"\r\n :aria-busy=\"loading || undefined\"\r\n :class=\"[\r\n 'oc-btn',\r\n variant !== 'default' && `oc-btn--${variant}`,\r\n size !== 'md' && `oc-btn--${size}`,\r\n icon && 'oc-btn--icon',\r\n pill && 'oc-btn--pill',\r\n inline && 'oc-btn--inline',\r\n ]\"\r\n >\r\n <slot />\r\n </a>\r\n <button\r\n v-else\r\n :type=\"type\"\r\n :aria-busy=\"loading || undefined\"\r\n :disabled=\"disabled || loading\"\r\n :class=\"[\r\n 'oc-btn',\r\n variant !== 'default' && `oc-btn--${variant}`,\r\n size !== 'md' && `oc-btn--${size}`,\r\n icon && 'oc-btn--icon',\r\n pill && 'oc-btn--pill',\r\n inline && 'oc-btn--inline',\r\n ]\"\r\n >\r\n <slot />\r\n </button>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Joined buttons with shared borders. `label` becomes aria-label. Put OcButton (usually variant outline) and OcButtonGroupText inside. Classes: .oc-btn-group(--vertical) */\r\ndefineProps<{ vertical?: boolean; label?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-btn-group', vertical && 'oc-btn-group--vertical']\" role=\"group\" :aria-label=\"label\">\r\n <slot />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Static text cell inside OcButtonGroup (a count, a unit). Class: .oc-btn-group-text */\r\n</script>\r\n\r\n<template>\r\n <span class=\"oc-btn-group-text\"><slot /></span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Card with header, content and footer.\r\n * Slots: header (replaces title/description), default (content), footer. Classes: .oc-card--sm\r\n */\r\nwithDefaults(defineProps<{ title?: string; description?: string; size?: 'sm' | 'md' }>(), { size: 'md' })\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-card', size === 'sm' && 'oc-card--sm']\">\r\n <div v-if=\"title || description || $slots.header\" class=\"oc-card-header\">\r\n <slot name=\"header\">\r\n <h3 v-if=\"title\" class=\"oc-card-title\">{{ title }}</h3>\r\n <p v-if=\"description\" class=\"oc-card-description\">{{ description }}</p>\r\n </slot>\r\n </div>\r\n <div v-if=\"$slots.default\" class=\"oc-card-content\"><slot /></div>\r\n <div v-if=\"$slots.footer\" class=\"oc-card-footer\"><slot name=\"footer\" /></div>\r\n </div>\r\n</template>\r\n","// File: packages/vue/src/composables/chartLine.ts\r\n// Map: number format -> nice axis maximum -> smooth path (same geometry as the chart-line snippet and the React wrapper)\r\n\r\n/** Number with at most 2 decimals and no trailing zeros (\"75\", \"37.5\", \"4.69\"). */\r\nexport const n2 = (n: number) => String(parseFloat(n.toFixed(2)))\r\n\r\n/** Round axis maximum: step = max / rows rounded up to 1, 1.5, 2, 2.5, 3, 4, 5, 6, 8 or 10 x 10^k. */\r\nexport function niceMax(value: number, rows = 4) {\r\n if (value <= 0) return rows\r\n const raw = value / rows\r\n const pow = 10 ** Math.floor(Math.log10(raw))\r\n return ([1, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10].find((s) => s * pow >= raw) ?? 10) * pow * rows\r\n}\r\n\r\n/** Smooth path through the points (x 0-100, y = 100 - value / max * 100); control points stay between their two ends. */\r\nexport function chartLinePath(values: number[], max: number) {\r\n const pts = values.map((v, i) => [values.length > 1 ? (i / (values.length - 1)) * 100 : 50, 100 - (v / max) * 100])\r\n if (!pts.length) return ''\r\n const clamp = (v: number, a: number, b: number) => Math.min(Math.max(v, Math.min(a, b)), Math.max(a, b))\r\n let d = `M${n2(pts[0][0])} ${n2(pts[0][1])}`\r\n for (let i = 0; i < pts.length - 1; i++) {\r\n const p0 = pts[i - 1] ?? pts[i], p1 = pts[i], p2 = pts[i + 1], p3 = pts[i + 2] ?? p2\r\n const c1 = [p1[0] + (p2[0] - p0[0]) / 6, clamp(p1[1] + (p2[1] - p0[1]) / 6, p1[1], p2[1])]\r\n const c2 = [p2[0] - (p3[0] - p1[0]) / 6, clamp(p2[1] - (p3[1] - p1[1]) / 6, p1[1], p2[1])]\r\n d += ` C${n2(c1[0])} ${n2(c1[1])} ${n2(c2[0])} ${n2(c2[1])} ${n2(p2[0])} ${n2(p2[1])}`\r\n }\r\n return d\r\n}\r\n","<!-- File: packages/vue/src/components/OcChartLine.vue | Map: props + demo data -> computed axis / paths -> figure (head, y axis, plot: svg + hover columns, x axis, legend) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Line / area chart in inline SVG (same markup as snippets/chart-line.html); tooltips open on :hover / :focus-visible (CSS only).\r\n * series: { name, values, dashed? }[]; labels = one per point (tooltips), xLabels = short axis labels. max defaults to a round\r\n * number above the data. variant: line | area | spark; dots = always visible. Classes: .oc-chart-line(--area/--dots/--spark) __head\r\n * __title __sub __value __body __y __plot __svg __series __area __path(--dashed) __cols __col __dot __tip __row __x; .oc-chart-legend\r\n */\r\nimport { computed } from 'vue'\r\nimport { chartLinePath, n2, niceMax } from '../composables/chartLine'\r\n\r\nexport interface ChartLineSeries { name: string; values: number[]; dashed?: boolean }\r\nconst props = withDefaults(\r\n defineProps<{\r\n title?: string\r\n sub?: string\r\n value?: string\r\n series?: ChartLineSeries[]\r\n labels?: string[]\r\n xLabels?: string[]\r\n max?: number\r\n rows?: number\r\n variant?: 'line' | 'area' | 'spark'\r\n dots?: boolean\r\n label?: string\r\n }>(),\r\n {\r\n title: 'Visitors',\r\n sub: 'January – June 2026',\r\n series: () => [\r\n { name: 'Desktop', values: [186, 305, 237, 73, 209, 214] },\r\n { name: 'Mobile', values: [80, 200, 120, 190, 130, 140] },\r\n ],\r\n rows: 4,\r\n variant: 'line',\r\n dots: true,\r\n label: 'Visitors per month',\r\n },\r\n)\r\nconst MONTHS = ['January', 'February', 'March', 'April', 'May', 'June']\r\nconst labels = computed(() => props.labels ?? MONTHS)\r\nconst axis = computed(() => props.xLabels ?? props.labels ?? MONTHS.map((m) => m.slice(0, 3)))\r\nconst top = computed(() => props.max ?? niceMax(Math.max(0, ...props.series.flatMap((s) => s.values)), props.rows))\r\nconst count = computed(() => Math.max(0, ...props.series.map((s) => s.values.length)))\r\nconst paths = computed(() => props.series.map((s) => chartLinePath(s.values, top.value)))\r\nconst yLabels = computed(() => Array.from({ length: props.rows + 1 }, (_, i) => top.value - (top.value / props.rows) * i))\r\nconst colLabel = (i: number) => `${labels.value[i] ?? i + 1}: ${props.series.map((s) => `${s.name} ${s.values[i]}`).join(', ')}`\r\n</script>\r\n\r\n<template>\r\n <figure :class=\"['oc-chart-line', variant !== 'line' && `oc-chart-line--${variant}`, dots && 'oc-chart-line--dots']\">\r\n <figcaption v-if=\"title || sub || value\" class=\"oc-chart-line__head\">\r\n <span v-if=\"title\" class=\"oc-chart-line__title\">{{ title }}</span>\r\n <span v-if=\"sub\" class=\"oc-chart-line__sub\">{{ sub }}</span>\r\n <span v-if=\"value\" class=\"oc-chart-line__value\">{{ value }}</span>\r\n </figcaption>\r\n <div class=\"oc-chart-line__body\">\r\n <ul class=\"oc-chart-line__y\" aria-hidden=\"true\"><li v-for=\"(y, i) in yLabels\" :key=\"i\">{{ y }}</li></ul>\r\n <div class=\"oc-chart-line__plot\" :style=\"rows !== 4 ? `--oc-chart-line-rows:${rows}` : undefined\">\r\n <svg class=\"oc-chart-line__svg\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\" aria-hidden=\"true\">\r\n <g v-for=\"(s, i) in series\" :key=\"i\" class=\"oc-chart-line__series\">\r\n <path class=\"oc-chart-line__area\" :d=\"`${paths[i]} L100 100 L0 100 Z`\" />\r\n <path :class=\"['oc-chart-line__path', s.dashed && 'oc-chart-line__path--dashed']\" :d=\"paths[i]\" />\r\n </g>\r\n </svg>\r\n <ul class=\"oc-chart-line__cols\" :style=\"`--n:${count}`\" :aria-label=\"label\">\r\n <li v-for=\"i in count\" :key=\"i\" class=\"oc-chart-line__col\" :style=\"`--x:${i - 1}`\" tabindex=\"0\" :aria-label=\"colLabel(i - 1)\">\r\n <i v-for=\"(s, j) in series\" :key=\"j\" class=\"oc-chart-line__dot\" :style=\"`--y:${n2((s.values[i - 1] / top) * 100)}%`\"></i>\r\n <span class=\"oc-chart-line__tip\" aria-hidden=\"true\">\r\n <strong>{{ labels[i - 1] ?? i }}</strong>\r\n <span v-for=\"(s, j) in series\" :key=\"j\" class=\"oc-chart-line__row\">{{ s.name }}<b>{{ s.values[i - 1] }}</b></span>\r\n </span>\r\n </li>\r\n </ul>\r\n </div>\r\n <ol class=\"oc-chart-line__x\" aria-hidden=\"true\"><li v-for=\"(l, i) in axis\" :key=\"i\">{{ l }}</li></ol>\r\n </div>\r\n <ul class=\"oc-chart-legend\"><li v-for=\"(s, i) in series\" :key=\"i\"><span class=\"oc-chart-swatch\"></span>{{ s.name }}</li></ul>\r\n </figure>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcChatComposer.vue | Map: props + v-model -> form -> label + textarea -> bar (tools slot, hint, send) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Chat composer (same markup as snippets/chat-composer.html). v-model = text. Emits send(text) on submit\r\n * (then clears the field). Enter sends, Shift+Enter adds a line (sendOnEnter, default true).\r\n * Props: placeholder, label, hint, inline, disabled. Slot: tools (.oc-chat-composer__tool buttons).\r\n * Classes: .oc-chat-composer(--inline), __input, __bar, __tools, __tool, __hint, __send\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = withDefaults(\r\n defineProps<{ placeholder?: string; label?: string; hint?: string; inline?: boolean; sendOnEnter?: boolean; disabled?: boolean }>(),\r\n { placeholder: 'Write a message…', label: 'Message', sendOnEnter: true },\r\n)\r\nconst text = defineModel<string>({ default: '' })\r\nconst emit = defineEmits<{ send: [text: string] }>()\r\nconst id = useUid('oc-chat')\r\n\r\nfunction submit() {\r\n if (!text.value.trim() || props.disabled) return\r\n emit('send', text.value.trim())\r\n text.value = ''\r\n}\r\nfunction onKeydown(e: KeyboardEvent) {\r\n if (props.sendOnEnter && e.key === 'Enter' && !e.shiftKey && !e.isComposing) {\r\n e.preventDefault()\r\n ;(e.target as HTMLTextAreaElement).form?.requestSubmit()\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <form :class=\"['oc-chat-composer', inline && 'oc-chat-composer--inline']\" @submit.prevent=\"submit\">\r\n <label class=\"oc-visually-hidden\" :for=\"id\">{{ label }}</label>\r\n <textarea :id=\"id\" v-model=\"text\" class=\"oc-chat-composer__input\" rows=\"1\" :placeholder=\"placeholder\" required :disabled=\"disabled\" @keydown=\"onKeydown\" />\r\n <div class=\"oc-chat-composer__bar\">\r\n <div v-if=\"$slots.tools\" class=\"oc-chat-composer__tools\"><slot name=\"tools\" /></div>\r\n <span v-if=\"hint\" class=\"oc-chat-composer__hint\">{{ hint }}</span>\r\n <button type=\"submit\" class=\"oc-chat-composer__send\" aria-label=\"Send\" :disabled=\"disabled\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M2 21l21-9L2 3v7l15 2l-15 2z\"/></svg></button>\r\n </div>\r\n </form>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Checkbox or radio inside a label. v-model: boolean (checkbox), array (checkbox group with `value`)\r\n * or the selected `value` (radio). Attributes other than class/style go to the input.\r\n */\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nwithDefaults(\r\n defineProps<{\r\n type?: 'checkbox' | 'radio'\r\n value?: unknown\r\n label?: string\r\n }>(),\r\n { type: 'checkbox' },\r\n)\r\nconst model = defineModel<any>()\r\nconst { root, control } = useAttrsSplit()\r\n</script>\r\n\r\n<template>\r\n <label v-bind=\"root\">\r\n <input v-bind=\"control\" v-model=\"model\" :class=\"type === 'radio' ? 'oc-radio' : 'oc-checkbox'\" :type=\"type\" :value=\"value\" />\r\n <slot><template v-if=\"label\"> {{ label }}</template></slot>\r\n </label>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Rule / step list with met and unmet states. Classes: .oc-checklist(--card), .oc-checklist-item.is-done\r\n * Slots: default (replaces all rows), action (scoped: item) in the card variant.\r\n */\r\nexport interface ChecklistItem {\r\n title: string\r\n hint?: string\r\n done?: boolean\r\n}\r\nwithDefaults(defineProps<{ items?: ChecklistItem[]; card?: boolean; label?: string }>(), { items: () => [] })\r\n</script>\r\n\r\n<template>\r\n <ul :class=\"['oc-checklist', card && 'oc-checklist--card']\" aria-live=\"polite\" :aria-label=\"label\">\r\n <slot>\r\n <li v-for=\"(item, i) in items\" :key=\"i\" :class=\"['oc-checklist-item', item.done && 'is-done']\">\r\n <template v-if=\"card\">\r\n <span class=\"oc-checklist-text\">\r\n <span class=\"oc-checklist-title\">{{ item.title }}</span>\r\n <span v-if=\"item.hint\" class=\"oc-checklist-hint\">{{ item.hint }}</span>\r\n </span>\r\n <slot name=\"action\" :item=\"item\" />\r\n </template>\r\n <template v-else>{{ item.title }}</template>\r\n </li>\r\n </slot>\r\n </ul>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcChipFilter.vue | Map: types + props -> template (group -> chip label per option) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Rounded filter chips. `multiple`: checkboxes, v-model = string[]. Otherwise radios, v-model = string.\r\n * Same markup as packages/ui/snippets/chip-filter.html. Classes: .oc-chip-filter(--sm/--scroll), -item, -count\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface ChipFilterItem {\r\n value: string\r\n label: string\r\n count?: number\r\n disabled?: boolean\r\n}\r\nconst props = defineProps<{\r\n options: ChipFilterItem[]\r\n multiple?: boolean\r\n /** aria-label of the group */\r\n label?: string\r\n size?: 'sm' | 'md'\r\n scroll?: boolean\r\n name?: string\r\n}>()\r\nconst model = defineModel<string | string[]>()\r\nconst uid = useUid('oc-chip')\r\n\r\nconst isChecked = (v: string) => (Array.isArray(model.value) ? model.value.includes(v) : model.value === v)\r\n\r\n/** Checkbox: add or remove the value (works when v-model starts undefined). Radio: replace it. */\r\nfunction toggle(v: string) {\r\n if (!props.multiple) {\r\n model.value = v\r\n return\r\n }\r\n const list = Array.isArray(model.value) ? model.value : []\r\n model.value = list.includes(v) ? list.filter((x) => x !== v) : [...list, v]\r\n}\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-chip-filter', size === 'sm' && 'oc-chip-filter--sm', scroll && 'oc-chip-filter--scroll']\" :role=\"multiple ? 'group' : 'radiogroup'\" :aria-label=\"label\">\r\n <label v-for=\"option in options\" :key=\"option.value\" class=\"oc-chip-filter-item\">\r\n <input :type=\"multiple ? 'checkbox' : 'radio'\" :name=\"name ?? uid\" :value=\"option.value\" :checked=\"isChecked(option.value)\" :disabled=\"option.disabled\" @change=\"toggle(option.value)\" />\r\n {{ option.label }}\r\n <span v-if=\"option.count != null\" class=\"oc-chip-filter-count\">{{ option.count }}</span>\r\n </label>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Card-style details/summary section. v-model:open. Slots: icon, title, default (content). Classes: --dense */\r\ndefineProps<{ title?: string; dense?: boolean }>()\r\nconst open = defineModel<boolean>('open', { default: false })\r\n\r\nfunction onToggle(e: Event) {\r\n open.value = (e.target as HTMLDetailsElement).open\r\n}\r\n</script>\r\n\r\n<template>\r\n <details :class=\"['oc-collapsible', dense && 'oc-collapsible--dense']\" :open=\"open\" @toggle=\"onToggle\">\r\n <summary>\r\n <slot name=\"icon\" />\r\n <span class=\"oc-collapsible-title\"><slot name=\"title\">{{ title }}</slot></span>\r\n </summary>\r\n <div class=\"oc-collapsible-content\"><slot /></div>\r\n </details>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Native color picker next to a hex text input, kept in sync. v-model: color string (#rrggbb). */\r\nwithDefaults(defineProps<{ pickerLabel?: string; valueLabel?: string }>(), {\r\n pickerLabel: 'Pick a color',\r\n valueLabel: 'Color value',\r\n})\r\nconst model = defineModel<string>({ default: '#000000' })\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-color-field\">\r\n <input v-model=\"model\" type=\"color\" :aria-label=\"pickerLabel\" />\r\n <input v-model=\"model\" class=\"oc-input\" type=\"text\" :aria-label=\"valueLabel\" />\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcColorSelect.vue | Map: types + props -> template (fieldset radiogroup -> label per color) -->\r\n<script setup lang=\"ts\">\r\n/** Pick one color from swatches. v-model = selected value. Classes: .oc-color-select(--list/--sm), -option, -swatch, -name */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface ColorSelectItem {\r\n value: string\r\n label: string\r\n /** CSS color, use Omnia tokens: \"var(--color-red-70)\". */\r\n color: string\r\n disabled?: boolean\r\n}\r\ndefineProps<{\r\n options: ColorSelectItem[]\r\n /** aria-label of the group */\r\n label?: string\r\n list?: boolean\r\n size?: 'sm' | 'md'\r\n name?: string\r\n}>()\r\nconst model = defineModel<string>()\r\nconst uid = useUid('oc-color')\r\n</script>\r\n\r\n<template>\r\n <fieldset :class=\"['oc-color-select', list && 'oc-color-select--list', size === 'sm' && 'oc-color-select--sm']\" role=\"radiogroup\" :aria-label=\"label\">\r\n <label v-for=\"option in options\" :key=\"option.value\" class=\"oc-color-select-option\" :style=\"{ '--oc-swatch': option.color }\">\r\n <input v-model=\"model\" type=\"radio\" :name=\"name ?? uid\" :value=\"option.value\" :disabled=\"option.disabled\" />\r\n <span class=\"oc-color-select-swatch\"></span>\r\n <span class=\"oc-color-select-name\">{{ option.label }}</span>\r\n </label>\r\n </fieldset>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Command palette / searchable list. Filtering, aria-selected and keyboard navigation\r\n * (ArrowUp/ArrowDown/Enter) are handled here (the CSS only styles the markup).\r\n * v-model:query is the search text. Emits `select` with the chosen item.\r\n * Classes: .oc-command, -input, -list, -group-label, -item, -shortcut, -separator, -empty\r\n */\r\nimport { computed, ref, watch } from 'vue'\r\n\r\nexport interface CommandItem {\r\n label: string\r\n value?: string\r\n group?: string\r\n shortcut?: string\r\n disabled?: boolean\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n items: CommandItem[]\r\n placeholder?: string\r\n label?: string\r\n emptyText?: string\r\n }>(),\r\n { placeholder: 'Type a command or search...', label: 'Search commands', emptyText: 'No results found.' },\r\n)\r\nconst emit = defineEmits<{ select: [item: CommandItem] }>()\r\nconst query = defineModel<string>('query', { default: '' })\r\n\r\nconst filtered = computed(() => {\r\n const q = query.value.trim().toLowerCase()\r\n return q ? props.items.filter((i) => i.label.toLowerCase().includes(q)) : props.items\r\n})\r\n\r\nconst sections = computed(() => {\r\n const order: string[] = []\r\n const map = new Map<string, CommandItem[]>()\r\n for (const item of filtered.value) {\r\n const key = item.group ?? ''\r\n if (!map.has(key)) {\r\n map.set(key, [])\r\n order.push(key)\r\n }\r\n map.get(key)!.push(item)\r\n }\r\n return order.map((key) => ({ label: key, items: map.get(key)! }))\r\n})\r\n\r\nconst flat = computed(() => sections.value.flatMap((s) => s.items))\r\nconst active = ref(0)\r\n\r\nfunction firstEnabled(from = 0, step = 1) {\r\n const list = flat.value\r\n for (let i = from; i >= 0 && i < list.length; i += step) if (!list[i].disabled) return i\r\n return -1\r\n}\r\n\r\nwatch(flat, () => {\r\n active.value = Math.max(firstEnabled(), 0)\r\n})\r\n\r\nfunction move(step: 1 | -1) {\r\n const next = firstEnabled(active.value + step, step)\r\n if (next !== -1) active.value = next\r\n}\r\n\r\nfunction choose(item: CommandItem) {\r\n if (!item.disabled) emit('select', item)\r\n}\r\n\r\nfunction onKeydown(e: KeyboardEvent) {\r\n if (e.key === 'ArrowDown') {\r\n e.preventDefault()\r\n move(1)\r\n } else if (e.key === 'ArrowUp') {\r\n e.preventDefault()\r\n move(-1)\r\n } else if (e.key === 'Enter') {\r\n const item = flat.value[active.value]\r\n if (item) {\r\n e.preventDefault()\r\n choose(item)\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-command\" role=\"combobox\" aria-expanded=\"true\" aria-haspopup=\"listbox\">\r\n <input\r\n v-model=\"query\"\r\n class=\"oc-command-input\"\r\n type=\"search\"\r\n :placeholder=\"placeholder\"\r\n :aria-label=\"label\"\r\n @keydown=\"onKeydown\"\r\n />\r\n <ul class=\"oc-command-list\" role=\"listbox\">\r\n <template v-for=\"(section, s) in sections\" :key=\"section.label + s\">\r\n <li v-if=\"s > 0\" class=\"oc-command-separator\" role=\"separator\"></li>\r\n <li v-if=\"section.label\" class=\"oc-command-group-label\" role=\"presentation\">{{ section.label }}</li>\r\n <li\r\n v-for=\"item in section.items\"\r\n :key=\"item.value ?? item.label\"\r\n class=\"oc-command-item\"\r\n role=\"option\"\r\n :aria-selected=\"flat[active] === item ? 'true' : undefined\"\r\n :aria-disabled=\"item.disabled ? 'true' : undefined\"\r\n @click=\"choose(item)\"\r\n @mousemove=\"!item.disabled && (active = flat.indexOf(item))\"\r\n >\r\n {{ item.label }}\r\n <span v-if=\"item.shortcut\" class=\"oc-command-shortcut\">{{ item.shortcut }}</span>\r\n </li>\r\n </template>\r\n </ul>\r\n <div class=\"oc-command-empty\" :hidden=\"flat.length > 0\">{{ emptyText }}</div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcConfirmDialog.vue | Map: dialog.oc-modal -> confirm content (close X, icon ring, title) -> form (message, typed field, footer: discard, cancel, confirm) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Confirm variant of the alert dialog. v-model:open. Emits `confirm`, `cancel`, `discard` (all close the dialog).\r\n * With `confirmWord` the browser blocks the submit until the typed value matches (pattern + required).\r\n * Slots: icon, title, default (message).\r\n * Classes: .oc-alert-dialog--confirm, .oc-alert-dialog-close, .oc-alert-dialog-form, .oc-alert-dialog-typed,\r\n * .oc-alert-dialog-confirm, .oc-alert-dialog-discard\r\n */\r\nimport { ref } from 'vue'\r\nimport { useDialog } from '../composables/useDialog'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n type?: 'success' | 'error' | 'warning' | 'info' | 'question'\r\n title?: string\r\n message?: string\r\n confirmLabel?: string\r\n cancelLabel?: string\r\n discardLabel?: string\r\n confirmWord?: string\r\n closeLabel?: string\r\n }>(),\r\n { type: 'error', confirmLabel: 'Confirm', cancelLabel: 'Cancel', closeLabel: 'Close' },\r\n)\r\nconst emit = defineEmits<{ confirm: []; cancel: []; discard: [] }>()\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst el = ref<HTMLDialogElement | null>(null)\r\nconst { onClose } = useDialog(open, el)\r\nconst titleId = useUid('oc-confirm-dialog-title')\r\nconst textId = `${titleId}-text`\r\nconst glyphs = { success: '✓', error: '×', warning: '!', info: 'i', question: '?' } as const\r\n\r\n// Every action emits its event, then closes through the model (Vue stays the source of truth).\r\nfunction done(event: 'confirm' | 'cancel' | 'discard') {\r\n if (event === 'confirm') emit('confirm')\r\n else if (event === 'cancel') emit('cancel')\r\n else emit('discard')\r\n open.value = false\r\n}\r\nconst destructive = () => props.type === 'error'\r\n</script>\r\n\r\n<template>\r\n <dialog ref=\"el\" class=\"oc-modal\" closedby=\"any\" :aria-labelledby=\"titleId\" :aria-describedby=\"textId\" @close=\"onClose\">\r\n <div :class=\"['oc-modal-content', 'oc-alert-dialog', `oc-alert-dialog--${type}`, 'oc-alert-dialog--confirm']\">\r\n <button class=\"oc-alert-dialog-close\" type=\"button\" :aria-label=\"closeLabel\" @click=\"done('cancel')\">×</button>\r\n <span class=\"oc-alert-dialog-icon\" aria-hidden=\"true\"><slot name=\"icon\">{{ glyphs[type] }}</slot></span>\r\n <h2 :id=\"titleId\" class=\"oc-modal-title\"><slot name=\"title\">{{ title }}</slot></h2>\r\n <form class=\"oc-alert-dialog-form\" @submit.prevent=\"done('confirm')\">\r\n <div :id=\"textId\" class=\"oc-modal-body\"><slot>{{ message }}</slot></div>\r\n <label v-if=\"confirmWord\" class=\"oc-alert-dialog-typed\">\r\n <span>Type <code>{{ confirmWord }}</code> to confirm</span>\r\n <input class=\"oc-input\" name=\"confirm\" :pattern=\"confirmWord\" required autocomplete=\"off\" />\r\n </label>\r\n <div class=\"oc-modal-footer\">\r\n <button v-if=\"discardLabel\" class=\"oc-btn oc-btn--ghost oc-alert-dialog-discard\" type=\"button\" @click=\"done('discard')\">{{ discardLabel }}</button>\r\n <button class=\"oc-btn oc-btn--outline\" type=\"button\" @click=\"done('cancel')\">{{ cancelLabel }}</button>\r\n <button :class=\"['oc-btn', destructive() && 'oc-btn--destructive', 'oc-alert-dialog-confirm']\" type=\"submit\" value=\"confirm\">{{ confirmLabel }}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </dialog>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcCookieConsent.vue | Map: props -> storage helpers -> reopen button -> popover (title, text, categories, actions) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Cookie banner on popover=\"manual\" (same markup as snippets/cookie-consent.html). Like the snippet script it shows itself\r\n * when no choice is stored, saves { necessary, <categories>, date } in localStorage and fires \"oc-consent\" on document.\r\n * Emits: consent (the choice, also on load when one is stored). Slot: text (replaces the paragraph content).\r\n * Classes: .oc-cookie-consent(--bar) __title __text __prefs __category __category-name __category-text __actions\r\n */\r\nimport { onBeforeUnmount, onMounted, ref } from 'vue'\r\n\r\nexport interface CookieCategory {\r\n name: string\r\n label: string\r\n text?: string\r\n required?: boolean\r\n}\r\nexport type ConsentChoice = { necessary: boolean; date: string } & Record<string, boolean | string>\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n categories?: CookieCategory[]\r\n title?: string\r\n policyHref?: string\r\n customizeLabel?: string\r\n necessaryLabel?: string\r\n selectedLabel?: string\r\n allLabel?: string\r\n /** Text of the \"Cookie settings\" button; empty string hides it. */\r\n openLabel?: string\r\n bar?: boolean\r\n manual?: boolean\r\n storageKey?: string\r\n id?: string\r\n }>(),\r\n {\r\n categories: () => [\r\n { name: 'necessary', label: 'Necessary', text: 'Session, security and your cookie choice. Always on.', required: true },\r\n { name: 'statistics', label: 'Statistics', text: 'Anonymous visit counts.' },\r\n { name: 'marketing', label: 'Marketing', text: 'Embedded videos and ads that track you.' },\r\n ],\r\n title: 'We use cookies',\r\n policyHref: '#cookie-policy',\r\n customizeLabel: 'Customize',\r\n necessaryLabel: 'Only necessary',\r\n selectedLabel: 'Save choice',\r\n allLabel: 'Accept all',\r\n openLabel: 'Cookie settings',\r\n storageKey: 'oc-consent',\r\n id: 'oc-cookie-consent',\r\n },\r\n)\r\nconst emit = defineEmits<{ consent: [choice: ConsentChoice] }>()\r\ndefineOptions({ inheritAttrs: false })\r\nconst box = ref<HTMLElement | null>(null)\r\n\r\nconst read = (): ConsentChoice | null => {\r\n try { return JSON.parse(localStorage.getItem(props.storageKey) ?? 'null') } catch { return null }\r\n}\r\nconst inputs = () => Array.from(box.value?.querySelectorAll<HTMLInputElement>('input[name]') ?? [])\r\nfunction tell(choice: ConsentChoice) {\r\n document.dispatchEvent(new CustomEvent('oc-consent', { detail: choice }))\r\n emit('consent', choice)\r\n}\r\n// Any [data-oc-consent-open] (also outside this component) opens the banner with the stored choice.\r\nfunction reopen(e: Event) {\r\n if (!(e.target as Element | null)?.closest?.('[data-oc-consent-open]')) return\r\n const choice = read()\r\n for (const i of inputs()) if (!i.disabled) i.checked = !!choice?.[i.name]\r\n box.value?.showPopover?.()\r\n}\r\nfunction choose(e: MouseEvent) {\r\n const mode = (e.target as HTMLElement).closest<HTMLElement>('[data-oc-consent]')?.dataset.ocConsent\r\n if (!mode) return\r\n const choice: ConsentChoice = { necessary: true, date: new Date().toISOString() }\r\n for (const i of inputs()) if (!i.disabled) choice[i.name] = mode === 'all' || (mode === 'selected' && i.checked)\r\n try { localStorage.setItem(props.storageKey, JSON.stringify(choice)) } catch { /* storage blocked */ }\r\n box.value?.hidePopover?.()\r\n tell(choice)\r\n}\r\nonMounted(() => {\r\n const stored = read()\r\n if (stored) tell(stored)\r\n else if (!props.manual) box.value?.showPopover?.()\r\n document.addEventListener('click', reopen)\r\n})\r\nonBeforeUnmount(() => document.removeEventListener('click', reopen))\r\n</script>\r\n\r\n<template>\r\n <button v-if=\"openLabel\" type=\"button\" class=\"oc-btn oc-btn--outline oc-btn--sm\" data-oc-consent-open>{{ openLabel }}</button>\r\n <aside\r\n :id=\"id\"\r\n ref=\"box\"\r\n v-bind=\"$attrs\"\r\n :class=\"['oc-cookie-consent', bar && 'oc-cookie-consent--bar']\"\r\n popover=\"manual\"\r\n :data-oc-consent-manual=\"manual ? '' : undefined\"\r\n :aria-labelledby=\"`${id}-title`\"\r\n @click=\"choose\"\r\n >\r\n <h2 :id=\"`${id}-title`\" class=\"oc-cookie-consent__title\"><span aria-hidden=\"true\">🍪</span> {{ title }}</h2>\r\n <p class=\"oc-cookie-consent__text\">\r\n <slot name=\"text\">Necessary cookies keep the site working. With your permission we also measure visits to improve the site. Read the <a :href=\"policyHref\">cookie policy</a>.</slot>\r\n </p>\r\n <details class=\"oc-cookie-consent__prefs\">\r\n <summary>{{ customizeLabel }}</summary>\r\n <div v-for=\"c in categories\" :key=\"c.name\" class=\"oc-cookie-consent__category\">\r\n <span class=\"oc-cookie-consent__category-name\">{{ c.label }}</span>\r\n <span v-if=\"c.text\" class=\"oc-cookie-consent__category-text\">{{ c.text }}</span>\r\n <label class=\"oc-switch\"><input type=\"checkbox\" role=\"switch\" :name=\"c.name\" :checked=\"c.required\" :disabled=\"c.required\" :aria-label=\"`${c.label} cookies`\" /><span class=\"oc-switch-track\"></span></label>\r\n </div>\r\n </details>\r\n <div class=\"oc-cookie-consent__actions\">\r\n <button type=\"button\" class=\"oc-btn oc-btn--outline\" data-oc-consent=\"necessary\">{{ necessaryLabel }}</button>\r\n <button type=\"button\" class=\"oc-btn oc-btn--secondary\" data-oc-consent=\"selected\">{{ selectedLabel }}</button>\r\n <button type=\"button\" class=\"oc-btn\" data-oc-consent=\"all\">{{ allLabel }}</button>\r\n </div>\r\n </aside>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Read-only monospace value with a copy button. Copies via navigator.clipboard and\r\n * adds .is-copied for 2 seconds. Emits `copy` with the value.\r\n */\r\nimport { onBeforeUnmount, ref } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n value: string\r\n label?: string\r\n buttonLabel?: string\r\n }>(),\r\n { label: 'Value', buttonLabel: 'Copy' },\r\n)\r\nconst emit = defineEmits<{ copy: [value: string] }>()\r\n\r\nconst copied = ref(false)\r\nlet timer: ReturnType<typeof setTimeout> | undefined\r\n\r\nasync function copy() {\r\n await navigator.clipboard.writeText(props.value)\r\n copied.value = true\r\n emit('copy', props.value)\r\n clearTimeout(timer)\r\n timer = setTimeout(() => (copied.value = false), 2000)\r\n}\r\n\r\nonBeforeUnmount(() => clearTimeout(timer))\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-copy-field\">\r\n <input class=\"oc-copy-field-value\" type=\"text\" readonly :value=\"value\" :aria-label=\"label\" />\r\n <button :class=\"['oc-copy-field-button', copied && 'is-copied']\" type=\"button\" @click=\"copy\">{{ buttonLabel }}</button>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Animated number (@property). Starts when scrolled into view unless `onView` is false. */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(defineProps<{ to: number; suffix?: string; onView?: boolean }>(), { onView: true })\r\nconst style = computed(() => {\r\n const s: Record<string, string> = { '--oc-counter-to': String(props.to) }\r\n if (props.suffix) s['--oc-counter-suffix'] = `'${props.suffix}'`\r\n return s\r\n})\r\n</script>\r\n\r\n<template>\r\n <strong :class=\"['oc-counter', onView && 'oc-counter--on-view']\" :style=\"style\"></strong>\r\n</template>\r\n","// File: packages/ui/src/data-table.js\r\n// Map: page numbers -> compare -> csv -> row filter -> bind one table (search, column filters, sort, pages, columns, trash,\r\n// bulk, cards) -> boot. Column width and row drag are OmniaUI Pro (data-table-pro.js).\r\n// The list table for business apps. Markup stays plain HTML.\r\n// This script adds the behaviour. Excel, PDF and the real delete API stay in the app:\r\n// listen for oc-datatable-bulk, oc-datatable-row, oc-datatable-search and oc-datatable-import.\r\n\r\n/** Page numbers with ellipses, a window around the current page (current and last are 1-based). */\r\nexport function pageItems(current, last) {\r\n if (last < 1) return [];\r\n if (last === 1) return [1];\r\n const range = [];\r\n for (let i = Math.max(2, current - 2); i <= Math.min(last - 1, current + 2); i++) range.push(i);\r\n const out = [1];\r\n if (range.length && range[0] > 2) out.push(\"…\");\r\n for (const n of range) out.push(n);\r\n if (range.length && range[range.length - 1] < last - 1) out.push(\"…\");\r\n if (last > 1) out.push(last);\r\n return out;\r\n}\r\n\r\n/** Sort two cell values. Numeric columns accept 5,15 and 5.15. */\r\nexport function compareValues(a, b, numeric) {\r\n if (numeric) {\r\n const n = (v) => Number(String(v ?? \"\").replace(/\\s/g, \"\").replace(\",\", \".\"));\r\n const na = n(a);\r\n const nb = n(b);\r\n if (Number.isFinite(na) && Number.isFinite(nb)) return na - nb;\r\n }\r\n return String(a ?? \"\").localeCompare(String(b ?? \"\"), undefined, { numeric: true, sensitivity: \"base\" });\r\n}\r\n\r\n/** One CSV field. Quotes when the value contains a comma, quote or newline. */\r\nfunction csvField(value) {\r\n const s = String(value ?? \"\");\r\n return /[\",\\n]/.test(s) ? `\"${s.replaceAll('\"', '\"\"')}\"` : s;\r\n}\r\n\r\n/** Headers plus rows, as a CSV string the browser can download. */\r\nexport function toCsv(headers, rows) {\r\n return [headers, ...rows].map((line) => line.map(csvField).join(\",\")).join(\"\\n\");\r\n}\r\n\r\n/**\r\n * Does this row stay visible?\r\n * filter is \"active\", \"deleted\", \"archived\" or \"all\". query is already lower-case.\r\n */\r\nexport function rowPasses(status, filter, text, query) {\r\n const state = status || \"active\";\r\n if (filter === \"active\" && state !== \"active\") return false;\r\n if (filter === \"deleted\" && state !== \"deleted\") return false;\r\n if (filter === \"archived\" && state !== \"archived\") return false;\r\n if (!query) return true;\r\n return String(text).toLowerCase().includes(query);\r\n}\r\n\r\nconst controls = new WeakMap();\r\nconst SKIP_COL = new Set([\"select\", \"order\", \"actions\"]);\r\n\r\nfunction readStore(id, name) {\r\n try {\r\n return JSON.parse(localStorage.getItem(`oc-data-table:${id}:${name}`) || \"null\");\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction writeStore(id, name, value) {\r\n try {\r\n localStorage.setItem(`oc-data-table:${id}:${name}`, JSON.stringify(value));\r\n } catch {\r\n // Private mode can block storage. The table still works for this visit.\r\n }\r\n}\r\n\r\nfunction download(filename, text) {\r\n const url = URL.createObjectURL(new Blob([text], { type: \"text/csv;charset=utf-8\" }));\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n link.download = filename;\r\n link.click();\r\n URL.revokeObjectURL(url);\r\n}\r\n\r\n/** Wire one .oc-data-table. Calling it again only refreshes the rows. */\r\nexport function bindDataTable(root) {\r\n if (!root) return;\r\n const prev = controls.get(root);\r\n if (prev) {\r\n prev.apply();\r\n return;\r\n }\r\n\r\n const table = root.querySelector(\"table\");\r\n const tbody = table?.tBodies[0];\r\n if (!table || !tbody) return;\r\n\r\n const id = root.id || \"data-table\";\r\n const search = root.querySelector(\".oc-data-table-search\");\r\n const summary = root.querySelector(\"[data-oc-summary]\");\r\n const pager = root.querySelector(\"[data-oc-pager]\");\r\n const pageSelect = root.querySelector(\"[data-oc-page-size]\");\r\n const selectAll = root.querySelector(\"[data-oc-select-all]\");\r\n const bulk = root.querySelector(\".oc-data-table-bulk\");\r\n const count = root.querySelector(\"[data-oc-selected-count]\");\r\n const empty = root.querySelector(\".oc-data-table-empty\");\r\n const sortSummary = root.querySelector(\"[data-oc-sort-summary]\");\r\n const frame = root.querySelector(\".oc-data-table-frame\") || table.parentElement;\r\n const live = root.dataset.ocLive === \"true\";\r\n\r\n let query = \"\";\r\n let filter = root.querySelector(\"[data-oc-filter][aria-current='true']\")?.dataset.ocFilter\r\n || (root.querySelector(\"[data-oc-filter]\") ? \"active\" : \"all\");\r\n // Column filters: a <select data-oc-col-filter=\"type\"> or tab buttons with data-oc-col-filter=\"type\" data-oc-value=\"…\".\r\n // A row passes when its cell in that column has that value (data-oc-value or its text); \"\" means all.\r\n const colFilters = new Map();\r\n root.querySelectorAll(\"select[data-oc-col-filter]\").forEach((sel) => colFilters.set(sel.dataset.ocColFilter, sel.value));\r\n root.querySelectorAll(\"[data-oc-col-filter][aria-selected='true']\").forEach((tab) => colFilters.set(tab.dataset.ocColFilter, tab.dataset.ocValue ?? \"\"));\r\n // aria-sort on a header in the HTML: that column is sorted when the table starts.\r\n const sortedTh = [...table.tHead.rows[0].cells].find((th) => th.dataset.ocCol && th.hasAttribute(\"aria-sort\"));\r\n let sortKey = sortedTh ? sortedTh.dataset.ocCol : \"\";\r\n let sortDir = sortedTh?.getAttribute(\"aria-sort\") === \"descending\" ? \"desc\" : \"asc\";\r\n let page = 0;\r\n let pageSize = Number(pageSelect?.value || root.dataset.pageSize || 15);\r\n const selected = new Set();\r\n\r\n // Remembered choices from the last visit: page size, density, view, hidden columns.\r\n const savedSize = readStore(id, \"pageSize\");\r\n if (savedSize && pageSelect?.querySelector(`option[value=\"${savedSize}\"]`)) {\r\n pageSelect.value = String(savedSize);\r\n pageSize = Number(savedSize);\r\n }\r\n if (readStore(id, \"density\") === \"compact\") root.classList.add(\"oc-data-table--compact\");\r\n if (readStore(id, \"view\") === \"grid\") root.classList.add(\"oc-data-table--grid\");\r\n const savedCols = readStore(id, \"cols\") || {};\r\n root.querySelectorAll(\"[data-col]\").forEach((box) => {\r\n if (!box.disabled && savedCols[box.dataset.col] != null) box.checked = savedCols[box.dataset.col];\r\n });\r\n\r\n const rows = () => [...tbody.querySelectorAll(\"[data-oc-row]\")];\r\n // Move a row to the end without taking it out of the page (Element.moveBefore), so <iconify-icon> and other web\r\n // components keep their content; where moveBefore is missing, append and let the icons draw again.\r\n // <iconify-icon> empties itself while its row is hidden (another page, another filter) and does not always draw\r\n // again when the row comes back: set its icon again so it renders.\r\n const redrawIcons = (row) => {\r\n row.querySelectorAll(\"iconify-icon[icon]\").forEach((icon) => {\r\n if (icon.shadowRoot?.querySelector(\"svg\")) return;\r\n const name = icon.getAttribute(\"icon\");\r\n icon.removeAttribute(\"icon\");\r\n icon.setAttribute(\"icon\", name);\r\n });\r\n };\r\n const moveRow = (row) => {\r\n if (tbody.lastElementChild === row) return;\r\n if (typeof tbody.moveBefore === \"function\") { tbody.moveBefore(row, null); return; }\r\n tbody.append(row);\r\n redrawIcons(row);\r\n };\r\n const textOf = (row) => [...row.cells]\r\n .filter((td) => td.dataset.ocCol && !SKIP_COL.has(td.dataset.ocCol))\r\n .map((td) => td.dataset.ocValue || td.textContent)\r\n .join(\" \");\r\n const valueOf = (row, key) => {\r\n const td = [...row.cells].find((cell) => cell.dataset.ocCol === key);\r\n return td ? (td.dataset.ocValue || td.textContent.trim()) : \"\";\r\n };\r\n const passesColumns = (row) => [...colFilters].every(([key, want]) => !want || valueOf(row, key) === want);\r\n const matched = () => rows().filter((row) => rowPasses(row.dataset.ocStatus, filter, textOf(row), query) && passesColumns(row));\r\n\r\n function paintChecks() {\r\n for (const row of rows()) {\r\n const on = selected.has(row.dataset.ocKey);\r\n row.setAttribute(\"aria-selected\", on ? \"true\" : \"false\");\r\n const box = row.querySelector(\"[data-oc-select]\");\r\n if (box) box.checked = on;\r\n }\r\n const keys = matched().map((row) => row.dataset.ocKey);\r\n const picked = keys.filter((key) => selected.has(key)).length;\r\n if (selectAll) {\r\n selectAll.checked = keys.length > 0 && picked === keys.length;\r\n selectAll.indeterminate = picked > 0 && picked < keys.length;\r\n }\r\n if (count) count.textContent = selected.size === 1 ? \"1 selected\" : `${selected.size} selected`;\r\n if (bulk) bulk.hidden = selected.size === 0;\r\n }\r\n\r\n function renderPager(current, last) {\r\n if (!pager) return;\r\n pager.replaceChildren();\r\n if (last <= 1) return;\r\n const add = (label, target, extra) => {\r\n const button = document.createElement(\"button\");\r\n button.type = \"button\";\r\n button.className = \"oc-data-table-page\";\r\n button.textContent = label;\r\n button.dataset.ocPage = String(target);\r\n if (extra?.current) button.setAttribute(\"aria-current\", \"page\");\r\n if (extra?.disabled) button.disabled = true;\r\n if (extra?.label) button.setAttribute(\"aria-label\", extra.label);\r\n pager.append(button);\r\n };\r\n add(\"«\", 1, { disabled: current === 1, label: \"First page\" });\r\n add(\"‹\", current - 1, { disabled: current === 1, label: \"Previous page\" });\r\n for (const item of pageItems(current, last)) {\r\n if (item === \"…\") {\r\n const span = document.createElement(\"span\");\r\n span.className = \"oc-data-table-ellipsis\";\r\n span.textContent = \"…\";\r\n pager.append(span);\r\n } else add(String(item), item, { current: item === current });\r\n }\r\n add(\"›\", current + 1, { disabled: current === last, label: \"Next page\" });\r\n add(\"»\", last, { disabled: current === last, label: \"Last page\" });\r\n }\r\n\r\n function syncGrid(list) {\r\n let grid = root.querySelector(\".oc-data-table-grid\");\r\n if (!grid && frame) {\r\n grid = document.createElement(\"div\");\r\n grid.className = \"oc-data-table-grid\";\r\n frame.append(grid);\r\n }\r\n if (!grid) return;\r\n const onPage = new Set(list.map((row) => row.dataset.ocKey));\r\n const heads = [...table.tHead.rows[0].cells];\r\n const hiddenCols = new Set([...root.querySelectorAll(\"[data-col]:not(:checked)\")].map((box) => box.dataset.col));\r\n grid.replaceChildren();\r\n for (const row of rows()) {\r\n if (!onPage.has(row.dataset.ocKey)) continue;\r\n const card = document.createElement(\"article\");\r\n card.className = \"oc-data-table-card\";\r\n card.dataset.ocKey = row.dataset.ocKey;\r\n const cells = [...row.cells];\r\n const name = cells.find((td) => td.dataset.ocCol === \"name\") || cells.find((td) => td.dataset.ocCol && !SKIP_COL.has(td.dataset.ocCol));\r\n // Title: the rich name cell (avatar, badge, second line) when there is one, else its text.\r\n const title = document.createElement(\"div\");\r\n title.className = \"oc-data-table-card-title\";\r\n if (name?.querySelector(\".oc-data-table-name\")) title.append(name.querySelector(\".oc-data-table-name\").cloneNode(true));\r\n else title.textContent = name ? name.textContent.trim() : row.dataset.ocKey;\r\n card.append(title);\r\n // The other visible columns as label / value.\r\n const fields = document.createElement(\"dl\");\r\n fields.className = \"oc-data-table-card-fields\";\r\n cells.forEach((td, index) => {\r\n const col = td.dataset.ocCol;\r\n if (!col || td === name || SKIP_COL.has(col) || hiddenCols.has(String(index + 1))) return;\r\n const dt = document.createElement(\"dt\");\r\n dt.textContent = heads[index]?.textContent.trim() || col;\r\n const dd = document.createElement(\"dd\");\r\n dd.append(...[...td.childNodes].map((node) => node.cloneNode(true)));\r\n if (dd.textContent.trim()) fields.append(dt, dd);\r\n });\r\n if (fields.childElementCount) card.append(fields);\r\n // Row actions (buttons and links; popover ids are not copied).\r\n const actions = cells.find((td) => td.dataset.ocCol === \"actions\");\r\n if (actions?.children.length) {\r\n const bar = document.createElement(\"div\");\r\n bar.className = \"oc-data-table-card-actions\";\r\n const trashed = row.dataset.ocStatus === \"deleted\";\r\n for (const el of actions.querySelectorAll(\"button, a\")) {\r\n const when = el.closest(\"[data-oc-when]\")?.dataset.ocWhen;\r\n if (when && (when === \"deleted\") !== trashed) continue;\r\n const copy = el.cloneNode(true);\r\n copy.removeAttribute(\"id\");\r\n copy.removeAttribute(\"popovertarget\");\r\n bar.append(copy);\r\n }\r\n card.append(bar);\r\n }\r\n grid.append(card);\r\n }\r\n }\r\n\r\n function apply() {\r\n const all = rows();\r\n const list = matched();\r\n if (sortKey) {\r\n const th = [...table.tHead.rows[0].cells].find((cell) => cell.dataset.ocCol === sortKey);\r\n const numeric = th?.dataset.ocSort === \"numeric\" || th?.hasAttribute(\"data-numeric\");\r\n const dir = sortDir === \"desc\" ? -1 : 1;\r\n list.sort((a, b) => dir * compareValues(valueOf(a, sortKey), valueOf(b, sortKey), numeric));\r\n const rest = all.filter((row) => !list.includes(row));\r\n for (const row of [...list, ...rest]) moveRow(row);\r\n }\r\n const last = pageSize > 0 ? Math.max(1, Math.ceil(list.length / pageSize)) : 1;\r\n if (page > last - 1) page = Math.max(0, last - 1);\r\n const start = pageSize > 0 ? page * pageSize : 0;\r\n const visible = new Set((pageSize > 0 ? list.slice(start, start + pageSize) : list));\r\n for (const row of all) {\r\n const shown = visible.has(row);\r\n if (row.hidden && shown) queueMicrotask(() => redrawIcons(row));\r\n row.hidden = !shown;\r\n }\r\n if (empty) empty.hidden = list.length !== 0;\r\n if (summary) {\r\n // data-oc-summary=\"Toont {from} t/m {to} van {total} resultaten\" translates the line; empty = English.\r\n const template = summary.dataset.ocSummary || \"Showing {from}–{to} of {total}\";\r\n const values = { from: list.length ? start + 1 : 0, to: start + visible.size, total: list.length };\r\n summary.textContent = template.replace(/\\{(from|to|total)\\}/g, (_, key) => String(values[key]));\r\n }\r\n if (sortSummary) {\r\n const label = sortKey ? table.querySelector(`th[data-oc-col=\"${sortKey}\"] .oc-table-sort`)?.textContent?.trim() : \"\";\r\n sortSummary.textContent = label ? `Sorted by ${label}, ${sortDir === \"asc\" ? \"ascending\" : \"descending\"}` : \"\";\r\n }\r\n renderPager(page + 1, list.length === 0 ? 1 : last);\r\n syncGrid([...visible]);\r\n paintChecks();\r\n }\r\n\r\n function exportCsv(onlyKeys) {\r\n const hidden = new Set([...root.querySelectorAll(\"[data-col]:not(:checked)\")].map((box) => box.dataset.col));\r\n const heads = [...table.tHead.rows[0].cells].filter((th, index) => {\r\n return th.dataset.ocCol && !SKIP_COL.has(th.dataset.ocCol) && !hidden.has(String(index + 1));\r\n });\r\n const source = onlyKeys\r\n ? rows().filter((row) => onlyKeys.has(row.dataset.ocKey))\r\n : matched();\r\n const body = source.map((row) => heads.map((th) => valueOf(row, th.dataset.ocCol)));\r\n download(`${id}.csv`, toCsv(heads.map((th) => th.textContent.trim()), body));\r\n }\r\n\r\n function emit(name, detail) {\r\n root.dispatchEvent(new CustomEvent(name, { bubbles: true, detail }));\r\n }\r\n\r\n // Live mode (the docs demo) changes the rows in the page. An app listens and updates its own data.\r\n function liveAction(action) {\r\n if (!live) return false;\r\n for (const key of selected) {\r\n const row = tbody.querySelector(`[data-oc-key=\"${CSS.escape(key)}\"]`);\r\n if (!row) continue;\r\n if (action === \"archive\" && (row.dataset.ocStatus || \"active\") === \"active\") row.dataset.ocStatus = \"deleted\";\r\n if (action === \"restore\" && row.dataset.ocStatus === \"deleted\") row.dataset.ocStatus = \"active\";\r\n if (action === \"delete\") row.remove();\r\n if (action === \"duplicate\" && (row.dataset.ocStatus || \"active\") === \"active\") {\r\n const copy = row.cloneNode(true);\r\n copy.dataset.ocKey = `${key}-copy`;\r\n tbody.insertBefore(copy, row.nextSibling);\r\n }\r\n }\r\n selected.clear();\r\n apply();\r\n return true;\r\n }\r\n\r\n root.addEventListener(\"input\", (event) => {\r\n const target = event.target;\r\n if (target === search) {\r\n query = target.value.trim().toLowerCase();\r\n page = 0;\r\n apply();\r\n }\r\n });\r\n\r\n root.addEventListener(\"change\", (event) => {\r\n const target = event.target;\r\n if (target === pageSelect) {\r\n pageSize = Number(target.value) || 0;\r\n page = 0;\r\n writeStore(id, \"pageSize\", pageSize);\r\n apply();\r\n }\r\n if (target.matches?.(\"select[data-oc-col-filter]\")) {\r\n colFilters.set(target.dataset.ocColFilter, target.value);\r\n page = 0;\r\n apply();\r\n }\r\n if (target.matches?.(\"[data-col]\")) {\r\n const cols = {};\r\n root.querySelectorAll(\"[data-col]\").forEach((box) => { cols[box.dataset.col] = box.checked; });\r\n writeStore(id, \"cols\", cols);\r\n }\r\n if (target.matches?.(\"[data-oc-select]\")) {\r\n const row = target.closest(\"[data-oc-row]\");\r\n if (!row || row.dataset.ocSelectable === \"false\") return;\r\n if (target.checked) selected.add(row.dataset.ocKey);\r\n else selected.delete(row.dataset.ocKey);\r\n paintChecks();\r\n }\r\n if (target === selectAll) {\r\n for (const row of matched()) {\r\n if (row.dataset.ocSelectable === \"false\") continue;\r\n if (target.checked) selected.add(row.dataset.ocKey);\r\n else selected.delete(row.dataset.ocKey);\r\n }\r\n paintChecks();\r\n }\r\n if (target.matches?.(\"[data-oc-file]\")) {\r\n const file = target.files?.[0];\r\n if (file) emit(\"oc-datatable-import\", { file });\r\n target.value = \"\";\r\n }\r\n });\r\n\r\n root.addEventListener(\"keydown\", (event) => {\r\n if (event.key === \"Enter\" && event.target === search) {\r\n emit(\"oc-datatable-search\", { query: search.value });\r\n }\r\n });\r\n\r\n root.addEventListener(\"click\", (event) => {\r\n // The whole header cell sorts, not only its label (wide columns leave a lot of empty cell around the label).\r\n const headCell = event.target.closest(\"thead th\");\r\n const sortBtn = event.target.closest(\".oc-table-sort\")\r\n || (headCell && !event.target.closest(\"a, button, input, select, label, .oc-data-table-resize\") ? headCell.querySelector(\".oc-table-sort\") : null);\r\n if (sortBtn && root.contains(sortBtn)) {\r\n const th = sortBtn.closest(\"th\");\r\n if (!th?.dataset.ocCol) return;\r\n event.preventDefault();\r\n if (sortKey === th.dataset.ocCol) sortDir = sortDir === \"asc\" ? \"desc\" : \"asc\";\r\n else { sortKey = th.dataset.ocCol; sortDir = \"asc\"; }\r\n for (const head of table.tHead.rows[0].cells) head.removeAttribute(\"aria-sort\");\r\n th.setAttribute(\"aria-sort\", sortDir === \"asc\" ? \"ascending\" : \"descending\");\r\n page = 0;\r\n apply();\r\n return;\r\n }\r\n const filterBtn = event.target.closest(\"[data-oc-filter]\");\r\n if (filterBtn && root.contains(filterBtn)) {\r\n filter = filterBtn.dataset.ocFilter;\r\n page = 0;\r\n root.querySelectorAll(\"[data-oc-filter]\").forEach((btn) => {\r\n if (btn === filterBtn) btn.setAttribute(\"aria-current\", \"true\");\r\n else btn.removeAttribute(\"aria-current\");\r\n });\r\n apply();\r\n return;\r\n }\r\n // Per-row actions of a trashed row: data-oc-row-action=\"restore\" or \"delete\" fires oc-datatable-row { action, key };\r\n // in the demo (data-oc-live) restore makes the row active again and delete removes it.\r\n const rowBtn = event.target.closest(\"[data-oc-row-action]\");\r\n if (rowBtn && root.contains(rowBtn)) {\r\n const row = rowBtn.closest(\"[data-oc-row]\");\r\n if (!row) return;\r\n const action = rowBtn.dataset.ocRowAction;\r\n emit(\"oc-datatable-row\", { action, key: row.dataset.ocKey });\r\n if (live && action === \"restore\") row.dataset.ocStatus = \"active\";\r\n if (live && action === \"delete\") { selected.delete(row.dataset.ocKey); row.remove(); }\r\n apply();\r\n return;\r\n }\r\n // The sliders button next to the title shows or hides the filter row.\r\n const filtersBtn = event.target.closest(\"[data-oc-filters-toggle]\");\r\n if (filtersBtn && root.contains(filtersBtn)) {\r\n const row = root.querySelector(\".oc-data-table-filters\");\r\n if (row) {\r\n row.hidden = !row.hidden;\r\n filtersBtn.setAttribute(\"aria-expanded\", row.hidden ? \"false\" : \"true\");\r\n }\r\n return;\r\n }\r\n const colTab = event.target.closest(\"button[data-oc-col-filter]\");\r\n if (colTab && root.contains(colTab)) {\r\n const key = colTab.dataset.ocColFilter;\r\n colFilters.set(key, colTab.dataset.ocValue ?? \"\");\r\n root.querySelectorAll(`button[data-oc-col-filter=\"${key}\"]`).forEach((tab) => {\r\n tab.setAttribute(\"aria-selected\", tab === colTab ? \"true\" : \"false\");\r\n });\r\n page = 0;\r\n apply();\r\n return;\r\n }\r\n const viewBtn = event.target.closest(\"[data-oc-view]\");\r\n if (viewBtn && root.contains(viewBtn)) {\r\n const mode = viewBtn.dataset.ocView;\r\n root.classList.toggle(\"oc-data-table--grid\", mode === \"grid\");\r\n root.querySelectorAll(\"[data-oc-view]\").forEach((btn) => {\r\n btn.setAttribute(\"aria-pressed\", btn === viewBtn ? \"true\" : \"false\");\r\n });\r\n writeStore(id, \"view\", mode);\r\n return;\r\n }\r\n const densityBtn = event.target.closest(\"[data-oc-density]\");\r\n if (densityBtn && root.contains(densityBtn)) {\r\n const compact = densityBtn.dataset.ocDensity === \"compact\";\r\n root.classList.toggle(\"oc-data-table--compact\", compact);\r\n writeStore(id, \"density\", compact ? \"compact\" : \"comfortable\");\r\n return;\r\n }\r\n const pageBtn = event.target.closest(\"[data-oc-page]\");\r\n if (pageBtn && root.contains(pageBtn) && !pageBtn.disabled) {\r\n page = Number(pageBtn.dataset.ocPage) - 1;\r\n apply();\r\n return;\r\n }\r\n if (event.target.closest(\"[data-oc-export]\")) {\r\n exportCsv(null);\r\n return;\r\n }\r\n if (event.target.closest(\"[data-oc-import]\")) {\r\n root.querySelector(\"[data-oc-file]\")?.click();\r\n return;\r\n }\r\n const bulkBtn = event.target.closest(\"[data-oc-bulk]\");\r\n if (bulkBtn && root.contains(bulkBtn)) {\r\n const action = bulkBtn.dataset.ocBulk;\r\n // Snapshot first: live mode clears the selection while it updates the rows.\r\n const keys = [...selected];\r\n if (action === \"clear\") { selected.clear(); paintChecks(); return; }\r\n if (action === \"export\") { exportCsv(selected); return; }\r\n liveAction(action);\r\n emit(\"oc-datatable-bulk\", { action, keys });\r\n return;\r\n }\r\n // Row click opens data-oc-href, except when the click is on a control inside the row.\r\n if (event.target.closest(\"a, button, input, select, textarea, label\")) return;\r\n const row = event.target.closest(\"[data-oc-row]\");\r\n if (!row || !root.contains(row) || !row.dataset.ocHref) return;\r\n if (event.metaKey || event.ctrlKey) window.open(row.dataset.ocHref, \"_blank\", \"noopener\");\r\n else window.location.href = row.dataset.ocHref;\r\n });\r\n\r\n // OmniaUI Pro (data-table-pro.js) changes the rows (drag) and asks the table to show them again.\r\n root.addEventListener(\"oc-datatable-refresh\", () => apply());\r\n\r\n // Column widths from all rows (every page, also the trash), measured before the first page is shown, so the header\r\n // does not jump when sorting or paging brings other rows. Pro column resizing sets its own widths.\r\n for (const th of table.tHead.rows[0].cells) {\r\n const width = th.getBoundingClientRect().width;\r\n if (width && !th.style.width) th.style.minWidth = `${Math.ceil(width)}px`;\r\n }\r\n\r\n root.querySelectorAll(\"[data-oc-view]\").forEach((btn) => {\r\n const on = (btn.dataset.ocView === \"grid\") === root.classList.contains(\"oc-data-table--grid\");\r\n btn.setAttribute(\"aria-pressed\", on ? \"true\" : \"false\");\r\n });\r\n\r\n apply();\r\n controls.set(root, { apply });\r\n}\r\n\r\n/** Wire every table under scope that is not wired yet (also the data table block: [data-oc-data-table]). */\r\nexport function initDataTables(scope = document) {\r\n scope.querySelectorAll(\".oc-data-table, [data-oc-data-table]\").forEach((root) => bindDataTable(root));\r\n}\r\n\r\n// Starts on its own when loaded straight from a <script type=\"module\"> tag: as /js/oc-data-table.js (the docs site,\r\n// `npx omniaui copy-js`), with ?auto in the URL, or with data-oc-auto on the tag. An import from a bundler or a\r\n// wrapper does not scan the page: call the init function yourself there.\r\nfunction autoStart() {\r\n if (typeof document === \"undefined\") return false;\r\n const url = String(import.meta.url);\r\n if (url.includes(\"oc-data-table\") || /[?&]auto(=|&|$)/.test(url)) return true;\r\n const file = url.split(/[?#]/)[0];\r\n return [...document.querySelectorAll(\"script[data-oc-auto][src]\")].some((s) => s.src.split(/[?#]/)[0] === file);\r\n}\r\nif (autoStart()) {\r\n const boot = () => initDataTables(document);\r\n if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", boot);\r\n else boot();\r\n}\r\n","<!-- File: packages/vue/src/components/OcDataTable.vue | Map: props -> markup (tabs, toolbar, filters, table, footer) -> bind the list-table script on mount -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * List table for business apps. Same markup as packages/ui/snippets/data-table.html.\r\n * Search, column filters, sort, pages, columns, resize, drag and bulk actions come from data-table.js.\r\n * Listen on the root for oc-datatable-bulk, oc-datatable-reorder, oc-datatable-search, oc-datatable-import.\r\n * Slots: cell-<key> ({ row }) for a rich cell (an OcDataTableName, a badge …), actions ({ row }) for the row buttons\r\n * (default: one soft edit button), page-actions for the toolbar (New customer …).\r\n * Icons of tabs and filters are webicon names (mdi:account-outline …), drawn with <iconify-icon>.\r\n */\r\nimport { onMounted, useTemplateRef } from 'vue'\r\nimport { bindDataTable } from '../../../ui/src/data-table.js'\r\n\r\nexport interface DataTableColumn {\r\n key: string\r\n header: string\r\n numeric?: boolean\r\n sortable?: boolean\r\n hideable?: boolean\r\n defaultHidden?: boolean\r\n /** Cut long text with an ellipsis at this width (e.g. \"12rem\"); the full text goes in the title. */\r\n truncate?: string\r\n /** Sort the table on this column when it starts. */\r\n defaultSort?: 'ascending' | 'descending'\r\n}\r\nexport interface DataTableRow {\r\n key: string\r\n status?: 'active' | 'deleted' | 'archived'\r\n cells: Record<string, string>\r\n /** Sort, filter, search and export value when it differs from the visible text. */\r\n values?: Record<string, string>\r\n href?: string\r\n}\r\nexport interface DataTableTabs {\r\n column: string\r\n label?: string\r\n /** tone colors the count like the type badge in the table. */\r\n items: { value: string; label: string; icon?: string; count?: number; tone?: 'success' | 'info' | 'warning' }[]\r\n}\r\nexport interface DataTableColumnFilter {\r\n column: string\r\n label: string\r\n icon?: string\r\n options: { value: string; label: string }[]\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n tableId?: string\r\n title?: string\r\n columns: DataTableColumn[]\r\n rows: DataTableRow[]\r\n pageSize?: number\r\n searchPlaceholder?: string\r\n selectable?: boolean\r\n /** Grip column to drag rows; the drag is OmniaUI Pro (data-table-pro.js). */\r\n draggable?: boolean\r\n /** Handles to drag a column width; the resize is OmniaUI Pro (data-table-pro.js). */\r\n resizable?: boolean\r\n /** Column chooser in the actions header (show or hide columns). Needs the OmniaUI Pro CSS. */\r\n columnMenu?: boolean\r\n filters?: boolean\r\n archive?: boolean\r\n tabs?: DataTableTabs\r\n columnFilters?: DataTableColumnFilter[]\r\n /** Footer count, e.g. \"Showing {from}–{to} of {total} customers\". */\r\n summary?: string\r\n /** Offer \"Import CSV\" in the settings (fires oc-datatable-import with the file). */\r\n importable?: boolean\r\n /** 'bordered' = version 2: tinted header, lines between the columns, sort chevrons always visible. */\r\n variant?: 'default' | 'bordered'\r\n /** Striped rows (default true). */\r\n striped?: boolean\r\n live?: boolean\r\n }>(),\r\n { title: 'List', pageSize: 15, searchPlaceholder: 'Search...', selectable: true, draggable: false, resizable: false, columnMenu: false, filters: true, archive: true, summary: '', importable: false, variant: 'default', striped: true, live: false },\r\n)\r\n\r\nconst root = useTemplateRef<HTMLElement>('root')\r\nconst sizes = [...new Set([10, 15, 20, 50, 100, props.pageSize])].sort((a, b) => a - b)\r\nconst lead = (props.selectable ? 1 : 0) + (props.draggable ? 1 : 0)\r\nconst id = props.tableId || `oc-dt-${Math.random().toString(36).slice(2, 8)}`\r\nconst label = (row: DataTableRow) => row.values?.name ?? row.cells.name ?? row.key\r\n\r\nonMounted(() => {\r\n if (root.value) bindDataTable(root.value)\r\n})\r\n</script>\r\n\r\n<template>\r\n <div ref=\"root\" :class=\"['oc-data-table', variant === 'bordered' && 'oc-data-table--bordered', !striped && 'oc-data-table--plain', columnMenu && 'oc-column-menu-scope']\" :id=\"id\" :data-page-size=\"pageSize\" :data-oc-live=\"live ? 'true' : undefined\">\r\n <div v-if=\"tabs\" class=\"oc-tab-list oc-data-table-tabs\" role=\"tablist\" :aria-label=\"tabs.label ?? 'Filter'\">\r\n <button\r\n v-for=\"(tab, i) in tabs.items\"\r\n :key=\"tab.value\"\r\n class=\"oc-tab-trigger\"\r\n role=\"tab\"\r\n type=\"button\"\r\n :data-oc-col-filter=\"tabs.column\"\r\n :data-oc-value=\"tab.value\"\r\n :aria-selected=\"i === 0 ? 'true' : 'false'\"\r\n ><iconify-icon v-if=\"tab.icon\" :icon=\"tab.icon\" aria-hidden=\"true\" />{{ tab.label }}<span v-if=\"tab.count != null\" :class=\"['oc-data-table-tab-count', tab.tone && `oc-data-table-tab-count--${tab.tone}`]\">{{ tab.count }}</span></button>\r\n </div>\r\n <div class=\"oc-data-table-toolbar\">\r\n <div class=\"oc-data-table-heading\">\r\n <span class=\"oc-data-table-title\">{{ title }}</span>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--icon oc-btn--sm\" type=\"button\" :popovertarget=\"`${id}-menu`\" aria-label=\"List actions\" title=\"List actions\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M8 13c-1.86 0-3.41 1.28-3.86 3H2v2h2.14c.45 1.72 2 3 3.86 3s3.41-1.28 3.86-3H22v-2H11.86c-.45-1.72-2-3-3.86-3m0 6c-1.1 0-2-.9-2-2s.9-2 2-2s2 .9 2 2s-.9 2-2 2M19.86 6c-.45-1.72-2-3-3.86-3s-3.41 1.28-3.86 3H2v2h10.14c.45 1.72 2 3 3.86 3s3.41-1.28 3.86-3H22V6zM16 9c-1.1 0-2-.9-2-2s.9-2 2-2s2 .9 2 2s-.9 2-2 2\" /></svg></button>\r\n <div class=\"oc-dropdown-menu\" :id=\"`${id}-menu`\" popover>\r\n <button class=\"oc-dropdown-item\" type=\"button\" data-oc-export>Export CSV</button>\r\n <template v-if=\"importable\">\r\n <button class=\"oc-dropdown-item\" type=\"button\" data-oc-import>Import CSV</button>\r\n <input class=\"oc-data-table-file\" type=\"file\" accept=\".csv,text/csv\" data-oc-file>\r\n </template>\r\n <button class=\"oc-dropdown-item\" type=\"button\" data-oc-bulk=\"duplicate\">Duplicate selection</button>\r\n <button class=\"oc-dropdown-item\" type=\"button\" data-oc-bulk=\"archive\">Move selection to trash</button>\r\n <div class=\"oc-dropdown-separator\"></div>\r\n <button class=\"oc-dropdown-item\" type=\"button\" data-oc-density=\"comfortable\">Comfortable rows</button>\r\n <button class=\"oc-dropdown-item\" type=\"button\" data-oc-density=\"compact\">Compact rows</button>\r\n </div>\r\n </div>\r\n <input class=\"oc-input oc-data-table-search\" type=\"search\" :placeholder=\"searchPlaceholder\" :aria-label=\"`Search ${title}`\">\r\n <div v-if=\"filters\" class=\"oc-filter-pills\" role=\"group\" aria-label=\"Trash filter\">\r\n <button class=\"oc-filter-pill\" type=\"button\" data-oc-filter=\"active\" aria-current=\"true\">Active only</button>\r\n <button class=\"oc-filter-pill\" type=\"button\" data-oc-filter=\"all\">Including trash</button>\r\n <button class=\"oc-filter-pill\" type=\"button\" data-oc-filter=\"deleted\">Trash only</button>\r\n <button v-if=\"archive\" class=\"oc-filter-pill\" type=\"button\" data-oc-filter=\"archived\">Archive only</button>\r\n </div>\r\n <div class=\"oc-data-table-view\" role=\"group\" aria-label=\"View\">\r\n <button class=\"oc-btn oc-btn--outline oc-btn--icon oc-btn--sm\" type=\"button\" data-oc-view=\"table\" aria-pressed=\"true\" aria-label=\"Table\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M7 5h14v2H7zm0 8v-2h14v2zM4 4.5A1.5 1.5 0 0 1 5.5 6A1.5 1.5 0 0 1 4 7.5A1.5 1.5 0 0 1 2.5 6A1.5 1.5 0 0 1 4 4.5m0 6A1.5 1.5 0 0 1 5.5 12A1.5 1.5 0 0 1 4 13.5A1.5 1.5 0 0 1 2.5 12A1.5 1.5 0 0 1 4 10.5M7 19v-2h14v2zm-3-2.5A1.5 1.5 0 0 1 5.5 18A1.5 1.5 0 0 1 4 19.5A1.5 1.5 0 0 1 2.5 18A1.5 1.5 0 0 1 4 16.5\" /></svg></button>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--icon oc-btn--sm\" type=\"button\" data-oc-view=\"grid\" aria-label=\"Cards\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M3 11h8V3H3m2 2h4v4H5m8 12h8v-8h-8m2 2h4v4h-4M3 21h8v-8H3m2 2h4v4H5m8-16v8h8V3m-2 6h-4V5h4Z\" /></svg></button>\r\n </div>\r\n <div v-if=\"$slots['page-actions']\" class=\"oc-data-table-actions\"><slot name=\"page-actions\" /></div>\r\n <p class=\"oc-data-table-sort-summary\" data-oc-sort-summary role=\"status\"></p>\r\n </div>\r\n <div v-if=\"columnFilters?.length\" :id=\"`${id}-filters`\" class=\"oc-data-table-filters\">\r\n <label v-for=\"f in columnFilters\" :key=\"f.column\" class=\"oc-data-table-filter\">\r\n <iconify-icon v-if=\"f.icon\" :icon=\"f.icon\" aria-hidden=\"true\" />\r\n <template v-else><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M15 19.88c.04.3-.06.62-.29.83a.996.996 0 0 1-1.41 0L9.29 16.7a.99.99 0 0 1-.29-.83v-5.12L4.21 4.62a1 1 0 0 1 .17-1.4c.19-.14.4-.22.62-.22h14c.22 0 .43.08.62.22a1 1 0 0 1 .17 1.4L15 10.75zM7.04 5L11 10.06v5.52l2 2v-7.53L16.96 5z\" /></svg></template>\r\n <select class=\"oc-select\" :data-oc-col-filter=\"f.column\" :aria-label=\"f.label\">\r\n <option v-for=\"o in f.options\" :key=\"o.value\" :value=\"o.value\" :selected=\"o.value === ''\">{{ o.label }}</option>\r\n </select>\r\n </label>\r\n </div>\r\n <div v-if=\"columnMenu\" class=\"oc-column-menu\" :id=\"`${id}-columns`\" popover>\r\n <p class=\"oc-column-menu-title\">Columns</p>\r\n <template v-if=\"resizable\">\r\n <button class=\"oc-dropdown-item\" type=\"button\" data-oc-reset-widths>Reset column widths</button>\r\n <div class=\"oc-dropdown-separator\"></div>\r\n </template>\r\n <form class=\"oc-column-menu-list\">\r\n <template v-for=\"(col, index) in columns\" :key=\"col.key\">\r\n <label v-if=\"col.hideable !== false\" class=\"oc-column-menu-item\">\r\n <input type=\"checkbox\" :data-col=\"lead + index + 1\" :checked=\"!col.defaultHidden\"> {{ col.header }}\r\n </label>\r\n </template>\r\n </form>\r\n </div>\r\n <div class=\"oc-data-table-bulk\" hidden>\r\n <span data-oc-selected-count>0 selected</span>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" data-oc-bulk=\"export\">Export selection</button>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" data-oc-bulk=\"duplicate\">Duplicate</button>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" data-oc-bulk=\"archive\">Move to trash</button>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" data-oc-bulk=\"restore\">Restore</button>\r\n <button class=\"oc-btn oc-btn--destructive oc-btn--sm\" type=\"button\" data-oc-bulk=\"delete\">Delete permanently</button>\r\n <button class=\"oc-btn oc-btn--ghost oc-btn--sm\" type=\"button\" data-oc-bulk=\"clear\">Clear</button>\r\n </div>\r\n <div class=\"oc-data-table-frame\">\r\n <div class=\"oc-data-table-scroll\">\r\n <table class=\"oc-table oc-data-table-table\">\r\n <thead>\r\n <tr>\r\n <th v-if=\"selectable\" data-oc-col=\"select\"><input class=\"oc-checkbox\" type=\"checkbox\" data-oc-select-all aria-label=\"Select all\"></th>\r\n <th v-if=\"draggable\" data-oc-col=\"order\"><span class=\"oc-visually-hidden\">Order</span></th>\r\n <th v-for=\"col in columns\" :key=\"col.key\" :data-oc-col=\"col.key\" :data-oc-sort=\"col.numeric ? 'numeric' : 'text'\" :data-numeric=\"col.numeric ? '' : undefined\" :aria-sort=\"col.defaultSort\">\r\n <span class=\"oc-data-table-th\">\r\n <button v-if=\"col.sortable !== false\" class=\"oc-table-sort\" type=\"button\">{{ col.header }}</button>\r\n <template v-else>{{ col.header }}</template>\r\n <span v-if=\"resizable\" class=\"oc-data-table-resize\" role=\"separator\" aria-orientation=\"vertical\" :aria-label=\"`Resize ${col.header}`\"></span>\r\n </span>\r\n </th>\r\n <th data-oc-col=\"actions\">\r\n <span class=\"oc-data-table-th\">Actions<button v-if=\"columnMenu\" class=\"oc-btn oc-btn--plain oc-data-table-columns-btn\" type=\"button\" :popovertarget=\"`${id}-columns`\" aria-label=\"Columns\" title=\"Columns\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M4 5v13h17V5zm10 2v9h-3V7zM6 7h3v9H6zm13 9h-3V7h3z\" /></svg></button></span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr v-for=\"row in rows\" :key=\"row.key\" data-oc-row :data-oc-key=\"row.key\" :data-oc-status=\"row.status || 'active'\" :data-oc-href=\"row.href\">\r\n <td v-if=\"selectable\" data-oc-col=\"select\"><input class=\"oc-checkbox\" type=\"checkbox\" data-oc-select :aria-label=\"`Select ${label(row)}`\"></td>\r\n <td v-if=\"draggable\" data-oc-col=\"order\" class=\"oc-sortable-row-grip-cell\"><button class=\"oc-sortable-row-grip\" type=\"button\" :aria-label=\"`Move ${label(row)}`\"></button></td>\r\n <td v-for=\"col in columns\" :key=\"col.key\" :data-oc-col=\"col.key\" :data-numeric=\"col.numeric ? '' : undefined\" :data-oc-value=\"row.values?.[col.key]\">\r\n <slot :name=\"`cell-${col.key}`\" :row=\"row\">\r\n <span v-if=\"col.truncate\" class=\"oc-data-table-truncate\" :style=\"{ '--oc-data-table-truncate': col.truncate }\" :title=\"row.cells[col.key]\">{{ row.cells[col.key] ?? '' }}</span>\r\n <template v-else>{{ row.cells[col.key] ?? '' }}</template>\r\n </slot>\r\n </td>\r\n <td data-oc-col=\"actions\">\r\n <div style=\"display: flex; gap: 0.375rem; justify-content: flex-end\">\r\n <slot name=\"actions\" :row=\"row\">\r\n <button class=\"oc-btn oc-btn--soft-primary oc-btn--icon oc-btn--sm\" type=\"button\" :aria-label=\"`Edit ${label(row)}`\" title=\"Edit\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z\" /></svg></button>\r\n </slot>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <p class=\"oc-data-table-empty\" hidden>No results</p>\r\n </div>\r\n <div class=\"oc-data-table-footer\">\r\n <p class=\"oc-data-table-summary\" :data-oc-summary=\"summary\"></p>\r\n <label class=\"oc-data-table-per-page\">Rows per page\r\n <select class=\"oc-select\" data-oc-page-size aria-label=\"Rows per page\">\r\n <option v-for=\"n in sizes\" :key=\"n\" :value=\"n\" :selected=\"n === pageSize\">{{ n }}</option>\r\n </select>\r\n </label>\r\n <nav class=\"oc-data-table-pager\" data-oc-pager aria-label=\"Pagination\"></nav>\r\n </div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcDataTableName.vue | Map: props -> avatar + name line + second line -->\r\n<script setup lang=\"ts\">\r\n/** Name cell of a data table: avatar (initials or image), name with a badge (slot) and a muted second line. */\r\nimport { computed } from 'vue'\r\n\r\nconst props = defineProps<{ name: string; initials?: string; avatar?: string; sub?: string }>()\r\nconst letters = computed(() => props.initials ?? props.name.split(/[\\s&-]+/).filter(Boolean).slice(0, 2).map((w) => w[0]).join('').toUpperCase())\r\n</script>\r\n\r\n<template>\r\n <span class=\"oc-data-table-name\">\r\n <span class=\"oc-avatar\" aria-hidden=\"true\"><img v-if=\"avatar\" :src=\"avatar\" alt=\"\"><template v-else>{{ letters }}</template></span>\r\n <span class=\"oc-data-table-name-text\">\r\n <span class=\"oc-data-table-name-line\">{{ name }} <slot name=\"badge\" /></span>\r\n <span v-if=\"sub || $slots.sub\" class=\"oc-data-table-name-sub\"><slot name=\"sub\">{{ sub }}</slot></span>\r\n </span>\r\n </span>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcDateField.vue | Map: v-model date -> ISO week label -> markup -->\r\n<script setup lang=\"ts\">\r\n/** Native date input with a calendar icon zone and the ISO week. v-model is the YYYY-MM-DD string. */\r\nimport { computed } from 'vue'\r\nimport { isoWeek } from '../../../ui/src/form-extras.js'\r\n\r\nconst props = withDefaults(defineProps<{ week?: boolean; weekLabel?: string; size?: 'md' | 'sm'; id?: string }>(), { week: true, weekLabel: 'Week {week}', size: 'md' })\r\nconst model = defineModel<string>({ default: '' })\r\nconst label = computed(() => {\r\n const [y, m, d] = (model.value || '').split('-').map(Number)\r\n if (!props.week || !y) return ''\r\n const w = isoWeek(new Date(y, m - 1, d))\r\n return props.weekLabel.replace('{week}', String(w.week)).replace('{year}', String(w.year))\r\n})\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-date-field', size === 'sm' && 'oc-date-field--sm']\">\r\n <span class=\"oc-date-field__icon\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M19 3h-1V1h-2v2H8V1H6v2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.11 0 2-.89 2-2V5a2 2 0 0 0-2-2m0 16H5V9h14zm0-12H5V5h14z\" /></svg></span>\r\n <input :id=\"id\" v-model=\"model\" type=\"date\" class=\"oc-date-field__input\">\r\n <output v-if=\"week\" class=\"oc-date-field__week\">{{ label }}</output>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcDecimalInput.vue | Map: props + model -> locale helpers (parse / format) -> template (field, optional unit frame) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Locale decimal field (1.234,56). v-model: number | null. Formats on blur with Intl.NumberFormat.\r\n * Same markup as packages/ui/snippets/decimal-input.html. All attributes (also class) go to the input.\r\n */\r\nimport { ref, watch } from 'vue'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nconst props = withDefaults(defineProps<{ locale?: string; decimals?: number; unit?: string; alignStart?: boolean; error?: boolean }>(), {\r\n locale: 'nl-BE',\r\n decimals: 2,\r\n})\r\nconst model = defineModel<number | null>({ default: null })\r\n\r\n/** Group and decimal separator of the locale, e.g. nl-BE -> \".\" and \",\". */\r\nfunction separators() {\r\n const parts = new Intl.NumberFormat(props.locale).formatToParts(1234.5)\r\n return { group: parts.find((p) => p.type === 'group')?.value ?? ',', decimal: parts.find((p) => p.type === 'decimal')?.value ?? '.' }\r\n}\r\nfunction parse(text: string): number | null {\r\n const { group, decimal } = separators()\r\n const clean = text.trim().split(group).join('').replace(decimal, '.').replace(/\\s/g, '')\r\n const n = Number(clean)\r\n return clean && Number.isFinite(n) ? n : null\r\n}\r\nfunction format(n: number | null): string {\r\n return n == null ? '' : new Intl.NumberFormat(props.locale, { minimumFractionDigits: props.decimals, maximumFractionDigits: props.decimals }).format(n)\r\n}\r\n\r\nconst text = ref(format(model.value))\r\nconst focused = ref(false)\r\n// Show outside changes, but never while the user is typing.\r\nwatch(model, (n) => { if (!focused.value) text.value = format(n) })\r\n\r\nfunction onInput(e: Event) {\r\n text.value = (e.target as HTMLInputElement).value\r\n model.value = parse(text.value)\r\n}\r\nfunction onBlur() {\r\n focused.value = false\r\n const n = parse(text.value)\r\n if (n != null || !text.value.trim()) text.value = format(n)\r\n}\r\n</script>\r\n\r\n<template>\r\n <div v-if=\"unit\" class=\"oc-decimal-field\">\r\n <input v-bind=\"$attrs\" :class=\"['oc-input', 'oc-decimal-input', alignStart && 'oc-decimal-input--start']\" type=\"text\" inputmode=\"decimal\" :aria-invalid=\"error ? 'true' : undefined\" :value=\"text\" @focus=\"focused = true\" @input=\"onInput\" @blur=\"onBlur\" />\r\n <span class=\"oc-decimal-field-unit\">{{ unit }}</span>\r\n </div>\r\n <input v-else v-bind=\"$attrs\" :class=\"['oc-input', 'oc-decimal-input', alignStart && 'oc-decimal-input--start']\" type=\"text\" inputmode=\"decimal\" :aria-invalid=\"error ? 'true' : undefined\" :value=\"text\" @focus=\"focused = true\" @input=\"onInput\" @blur=\"onBlur\" />\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Label / value rows in a panel (dl). Pass `rows`, or put your own .oc-dl-row elements in the default slot.\r\n * Slots: title, description, default (rows), footer.\r\n */\r\nexport interface DefinitionRow {\r\n term: string\r\n detail: string\r\n}\r\nwithDefaults(\r\n defineProps<{\r\n title?: string\r\n description?: string\r\n rows?: DefinitionRow[]\r\n label?: string\r\n }>(),\r\n { rows: () => [] },\r\n)\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-dl-panel\" role=\"region\" :aria-label=\"label ?? title\">\r\n <h3 v-if=\"title || $slots.title\" class=\"oc-dl-title\"><slot name=\"title\">{{ title }}</slot></h3>\r\n <p v-if=\"description || $slots.description\" class=\"oc-dl-description\"><slot name=\"description\">{{ description }}</slot></p>\r\n <dl class=\"oc-dl\">\r\n <slot>\r\n <div v-for=\"(row, i) in rows\" :key=\"i\" class=\"oc-dl-row\">\r\n <dt class=\"oc-dl-term\">{{ row.term }}</dt>\r\n <dd class=\"oc-dl-detail\">{{ row.detail }}</dd>\r\n </div>\r\n </slot>\r\n </dl>\r\n <div v-if=\"$slots.footer\" class=\"oc-dl-footer\"><slot name=\"footer\" /></div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcDocViewer.vue | Map: props + demo items -> grid of cards (bar, frame) -> one full-screen <dialog> per card -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * PDF, video or image cards with a full-screen view (same markup as snippets/doc-viewer.html). No JavaScript:\r\n * the buttons open the dialog with invoker commands (command=\"show-modal\" commandfor), closedby=\"any\" closes it.\r\n * items: { label, meta?, src?, type?: pdf|video|image, id?, alt?, art?, download?, open?: bar|frame, fullscreen? }[]\r\n * Classes: .oc-doc-viewer-grid, .oc-doc-viewer(--video/--image) __bar __label __meta __expand __frame __open;\r\n * .oc-doc-viewer-dialog(--video) __bar __title __actions __close __body\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface DocViewerItem {\r\n label: string\r\n meta?: string\r\n src?: string\r\n type?: 'pdf' | 'video' | 'image'\r\n id?: string\r\n alt?: string\r\n art?: number\r\n download?: string\r\n open?: 'bar' | 'frame'\r\n fullscreen?: boolean\r\n}\r\nconst props = withDefaults(\r\n defineProps<{ items?: DocViewerItem[]; openText?: string; downloadText?: string; idPrefix?: string }>(),\r\n {\r\n items: () => [\r\n { label: 'Brochure 2026', meta: 'PDF · 2.4 MB', alt: 'First page of Brochure 2026', art: 2, download: '#brochure.pdf' },\r\n { label: 'Site visit', meta: '1:42', type: 'video', alt: 'Video still: site visit', art: 5 },\r\n ],\r\n openText: 'Click for full screen',\r\n downloadText: 'Download',\r\n },\r\n)\r\ndefineOptions({ inheritAttrs: false })\r\nconst auto = useUid('oc-doc-viewer')\r\nconst idOf = (doc: DocViewerItem, i: number) => doc.id ?? `${props.idPrefix ?? auto}-${i + 1}`\r\nconst full = (doc: DocViewerItem) => doc.fullscreen !== false\r\nconst inFrame = (doc: DocViewerItem) => full(doc) && (doc.open ?? (doc.type === 'video' ? 'frame' : 'bar')) === 'frame'\r\nconst art = (doc: DocViewerItem) => ['oc-media-art', doc.art != null && `oc-media-art--${doc.art}`]\r\nconst dialogAlt = (doc: DocViewerItem) => (doc.type === 'video' ? `${doc.label} video` : doc.label)\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-doc-viewer-grid\" v-bind=\"$attrs\">\r\n <figure v-for=\"(doc, i) in items\" :key=\"i\" :class=\"['oc-doc-viewer', doc.type === 'video' && 'oc-doc-viewer--video', doc.type === 'image' && 'oc-doc-viewer--image']\">\r\n <figcaption class=\"oc-doc-viewer__bar\">\r\n <span class=\"oc-doc-viewer__label\">{{ doc.label }}</span>\r\n <span v-if=\"doc.meta\" class=\"oc-doc-viewer__meta\">{{ doc.meta }}</span>\r\n <button v-if=\"full(doc) && !inFrame(doc)\" type=\"button\" class=\"oc-doc-viewer__expand\" command=\"show-modal\" :commandfor=\"idOf(doc, i)\" :aria-label=\"`Open ${doc.label} full screen`\">⤢</button>\r\n </figcaption>\r\n <div class=\"oc-doc-viewer__frame\">\r\n <div v-if=\"!doc.src\" :class=\"art(doc)\" role=\"img\" :aria-label=\"doc.alt ?? doc.label\"></div>\r\n <video v-else-if=\"doc.type === 'video'\" :src=\"doc.src\" controls preload=\"metadata\" :aria-label=\"doc.alt ?? doc.label\"></video>\r\n <img v-else-if=\"doc.type === 'image'\" :src=\"doc.src\" :alt=\"doc.alt ?? doc.label\" />\r\n <iframe v-else :src=\"`${doc.src}#toolbar=0&view=FitH`\" :title=\"doc.alt ?? doc.label\" loading=\"lazy\"></iframe>\r\n <button v-if=\"inFrame(doc)\" type=\"button\" class=\"oc-doc-viewer__open\" command=\"show-modal\" :commandfor=\"idOf(doc, i)\">{{ openText }}</button>\r\n </div>\r\n </figure>\r\n </div>\r\n <template v-for=\"(doc, i) in items\" :key=\"i\">\r\n <dialog v-if=\"full(doc)\" :id=\"idOf(doc, i)\" :class=\"['oc-doc-viewer-dialog', doc.type === 'video' && 'oc-doc-viewer-dialog--video']\" closedby=\"any\" :aria-labelledby=\"`${idOf(doc, i)}-title`\">\r\n <div class=\"oc-doc-viewer-dialog__bar\">\r\n <h2 :id=\"`${idOf(doc, i)}-title`\" class=\"oc-doc-viewer-dialog__title\">{{ doc.label }}</h2>\r\n <div v-if=\"doc.download\" class=\"oc-doc-viewer-dialog__actions\">\r\n <a class=\"oc-btn oc-btn--outline oc-btn--sm\" :href=\"doc.download\" download>{{ downloadText }}</a>\r\n <button type=\"button\" class=\"oc-doc-viewer-dialog__close\" command=\"close\" :commandfor=\"idOf(doc, i)\" aria-label=\"Close\">✕</button>\r\n </div>\r\n <button v-else type=\"button\" class=\"oc-doc-viewer-dialog__close\" command=\"close\" :commandfor=\"idOf(doc, i)\" aria-label=\"Close\">✕</button>\r\n </div>\r\n <div class=\"oc-doc-viewer-dialog__body\">\r\n <div v-if=\"!doc.src\" :class=\"art(doc)\" role=\"img\" :aria-label=\"dialogAlt(doc)\"></div>\r\n <video v-else-if=\"doc.type === 'video'\" :src=\"doc.src\" controls preload=\"metadata\" :aria-label=\"dialogAlt(doc)\"></video>\r\n <img v-else-if=\"doc.type === 'image'\" :src=\"doc.src\" :alt=\"dialogAlt(doc)\" />\r\n <iframe v-else :src=\"`${doc.src}#toolbar=0&view=FitH`\" :title=\"dialogAlt(doc)\" loading=\"lazy\"></iframe>\r\n </div>\r\n </dialog>\r\n </template>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Dropdown menu on the popover attribute + anchor positioning. The trigger is the `trigger` slot\r\n * (scoped: { id }) or a default outline button showing `label`. Default slot = menu content\r\n * (OcDropdownLabel / OcDropdownItem / OcDropdownSeparator). Attributes land on the menu element.\r\n */\r\nimport { useAttrs } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\ndefineProps<{ label?: string }>()\r\nconst attrs = useAttrs()\r\nconst id = (attrs.id as string | undefined) ?? useUid('oc-menu')\r\n</script>\r\n\r\n<template>\r\n <slot name=\"trigger\" :id=\"id\">\r\n <button class=\"oc-btn oc-btn--outline\" type=\"button\" :popovertarget=\"id\">{{ label }}</button>\r\n </slot>\r\n <div v-bind=\"attrs\" :id=\"id\" class=\"oc-dropdown-menu\" popover>\r\n <slot />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Menu item: <a> with `href`, otherwise <button>. */\r\ndefineProps<{ href?: string }>()\r\n</script>\r\n\r\n<template>\r\n <a v-if=\"href\" class=\"oc-dropdown-item\" :href=\"href\"><slot /></a>\r\n <button v-else class=\"oc-dropdown-item\" type=\"button\"><slot /></button>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Heading inside a dropdown menu. */\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-dropdown-label\"><slot /></div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Divider inside a dropdown menu. */\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-dropdown-separator\"></div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * File upload target: a label around a real file input. v-model: File[].\r\n * .is-dragover is toggled while dragging over. Slots: icon, default (text), hint.\r\n */\r\nimport { ref } from 'vue'\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\ndefineProps<{ accept?: string; multiple?: boolean; disabled?: boolean; hint?: string }>()\r\nconst model = defineModel<File[]>({ default: () => [] })\r\nconst { root, control } = useAttrsSplit()\r\nconst dragover = ref(false)\r\n\r\nfunction onChange(e: Event) {\r\n model.value = Array.from((e.target as HTMLInputElement).files ?? [])\r\n}\r\nfunction onDrop() {\r\n dragover.value = false\r\n}\r\n</script>\r\n\r\n<template>\r\n <label\r\n v-bind=\"root\"\r\n :class=\"['oc-dropzone', dragover && 'is-dragover']\"\r\n @dragover.prevent=\"dragover = true\"\r\n @dragleave=\"dragover = false\"\r\n @drop=\"onDrop\"\r\n >\r\n <input v-bind=\"control\" type=\"file\" :accept=\"accept\" :multiple=\"multiple\" :disabled=\"disabled\" @change=\"onChange\" />\r\n <span v-if=\"$slots.icon\" class=\"oc-dropzone-icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <span><slot /></span>\r\n <span v-if=\"hint || $slots.hint\" class=\"oc-dropzone-hint\"><slot name=\"hint\">{{ hint }}</slot></span>\r\n </label>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcEmojiPicker.vue | Map: props + emit -> trigger button -> popover panel -> groups (label + grid) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Emoji picker on the popover attribute (same markup as snippets/emoji-picker.html).\r\n * Props: groups ({ label?, emojis[] }[]), inline (always visible, no popover), triggerLabel, label.\r\n * Emits: select(emoji) and then closes the popover. Slot: trigger (button content, default a smiley webicon).\r\n * Classes: .oc-emoji-picker(--inline), __trigger, __label, __grid, __item\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{ groups?: { label?: string; emojis: string[] }[]; inline?: boolean; triggerLabel?: string; label?: string }>(),\r\n {\r\n groups: () => [\r\n { label: 'Smileys', emojis: ['😀', '😃', '😄', '😁', '😂', '🙂', '😉', '😍', '🤔', '😎', '😢', '😴', '😯', '🥳', '😤', '🤗'] },\r\n { label: 'Gestures', emojis: ['👍', '👎', '👏', '🙌', '👋', '🙏', '✌️', '💪'] },\r\n { label: 'Objects', emojis: ['❤️', '⭐', '🔥', '🎉', '✅', '🚀', '💡', '☕'] },\r\n ],\r\n triggerLabel: 'Insert emoji',\r\n label: 'Emoji',\r\n },\r\n)\r\nconst emit = defineEmits<{ select: [emoji: string] }>()\r\nconst id = useUid('oc-emoji')\r\n\r\nfunction pick(e: MouseEvent, emoji: string) {\r\n emit('select', emoji)\r\n const panel = (e.currentTarget as HTMLElement).closest('[popover]') as (HTMLElement & { hidePopover?: () => void }) | null\r\n panel?.hidePopover?.()\r\n}\r\n</script>\r\n\r\n<template>\r\n <button v-if=\"!inline\" type=\"button\" class=\"oc-emoji-picker__trigger\" :popovertarget=\"id\" :aria-label=\"triggerLabel\">\r\n <slot name=\"trigger\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M20 12a8 8 0 0 0-8-8a8 8 0 0 0-8 8a8 8 0 0 0 8 8a8 8 0 0 0 8-8m2 0a10 10 0 0 1-10 10A10 10 0 0 1 2 12A10 10 0 0 1 12 2a10 10 0 0 1 10 10m-12-3.5c0 .8-.7 1.5-1.5 1.5S7 9.3 7 8.5S7.7 7 8.5 7s1.5.7 1.5 1.5m7 0c0 .8-.7 1.5-1.5 1.5S14 9.3 14 8.5S14.7 7 15.5 7s1.5.7 1.5 1.5m-5 9.73c-1.75 0-3.29-.73-4.19-1.81L9.23 14c.45.72 1.52 1.23 2.77 1.23s2.32-.51 2.77-1.23l1.42 1.42c-.9 1.08-2.44 1.81-4.19 1.81\"/></svg></slot>\r\n </button>\r\n <div :id=\"id\" :class=\"['oc-emoji-picker', inline && 'oc-emoji-picker--inline']\" :popover=\"inline ? undefined : ''\" :role=\"inline ? 'group' : undefined\" :aria-label=\"label\">\r\n <div v-for=\"(g, gi) in groups\" :key=\"gi\">\r\n <p v-if=\"g.label\" class=\"oc-emoji-picker__label\">{{ g.label }}</p>\r\n <div class=\"oc-emoji-picker__grid\">\r\n <button v-for=\"emoji in g.emojis\" :key=\"emoji\" type=\"button\" class=\"oc-emoji-picker__item\" @click=\"pick($event, emoji)\">{{ emoji }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Icon, title, text and actions for lists without data. Slots: icon, title, default (text), actions. */\r\ndefineProps<{ icon?: string; title?: string; text?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-empty\">\r\n <span v-if=\"icon || $slots.icon\" class=\"oc-empty-icon\" aria-hidden=\"true\"><slot name=\"icon\">{{ icon }}</slot></span>\r\n <h3 v-if=\"title || $slots.title\" class=\"oc-empty-title\"><slot name=\"title\">{{ title }}</slot></h3>\r\n <p v-if=\"text || $slots.default\" class=\"oc-empty-text\"><slot>{{ text }}</slot></p>\r\n <div v-if=\"$slots.actions\" class=\"oc-empty-actions\"><slot name=\"actions\" /></div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcEntityCard.vue | Map: props -> article -> grid (frame | body: eyebrow, title, description, facts) -> footer -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Framed media cell + detail column (same markup as snippets/entity-card.html).\r\n * Props: title, eyebrow, description, src / alt or glyph (frame content), contain, facts ([key, value][]), stacked, size (sm|md).\r\n * Slots: media (frame content), default (extra body content), footer. Classes: .oc-entity-card(--stacked/--sm), __grid,\r\n * __frame(--contain), __glyph, __body, __eyebrow, __title, __description, __facts, __footer\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n title: string\r\n eyebrow?: string\r\n description?: string\r\n src?: string\r\n alt?: string\r\n glyph?: string\r\n contain?: boolean\r\n facts?: [string, string][]\r\n stacked?: boolean\r\n size?: 'sm' | 'md'\r\n }>(),\r\n { alt: '', size: 'md' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <article :class=\"['oc-entity-card', stacked && 'oc-entity-card--stacked', size === 'sm' && 'oc-entity-card--sm']\">\r\n <div class=\"oc-entity-card__grid\">\r\n <div :class=\"['oc-entity-card__frame', contain && 'oc-entity-card__frame--contain']\">\r\n <slot name=\"media\">\r\n <img v-if=\"src\" :src=\"src\" :alt=\"alt\" />\r\n <span v-else-if=\"glyph\" class=\"oc-entity-card__glyph\" aria-hidden=\"true\">{{ glyph }}</span>\r\n </slot>\r\n </div>\r\n <div class=\"oc-entity-card__body\">\r\n <p v-if=\"eyebrow\" class=\"oc-entity-card__eyebrow\">{{ eyebrow }}</p>\r\n <h3 class=\"oc-entity-card__title\">{{ title }}</h3>\r\n <p v-if=\"description\" class=\"oc-entity-card__description\">{{ description }}</p>\r\n <dl v-if=\"facts?.length\" class=\"oc-entity-card__facts\">\r\n <template v-for=\"([k, v], i) in facts\" :key=\"i\"><dt>{{ k }}</dt><dd>{{ v }}</dd></template>\r\n </dl>\r\n <slot />\r\n </div>\r\n </div>\r\n <div v-if=\"$slots.footer\" class=\"oc-entity-card__footer\"><slot name=\"footer\" /></div>\r\n </article>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcFactList.vue | Map: props (items + modifiers) -> dl.oc-fact-list -> div > dt + dd -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Key / value product facts (variant of the definition list). Pass `items`, or your own <div><dt><dd> rows in the slot.\r\n * Classes: .oc-fact-list (--plain, --compact, --stacked, --accent)\r\n */\r\nexport interface FactListRow {\r\n label: string\r\n value: string\r\n}\r\nwithDefaults(\r\n defineProps<{\r\n items?: FactListRow[]\r\n plain?: boolean\r\n compact?: boolean\r\n stacked?: boolean\r\n accent?: boolean\r\n }>(),\r\n { items: () => [] },\r\n)\r\n</script>\r\n\r\n<template>\r\n <dl\r\n :class=\"[\r\n 'oc-fact-list',\r\n plain && 'oc-fact-list--plain',\r\n compact && 'oc-fact-list--compact',\r\n stacked && 'oc-fact-list--stacked',\r\n accent && 'oc-fact-list--accent',\r\n ]\"\r\n >\r\n <slot>\r\n <div v-for=\"(row, i) in items\" :key=\"i\"><dt>{{ row.label }}</dt><dd>{{ row.value }}</dd></div>\r\n </slot>\r\n </dl>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcFilterCounts.vue | Map: types + props -> template (fieldset radiogroup -> tile per view) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * View filter tiles with counts (Active / Deleted / All). v-model = selected value.\r\n * Same markup as packages/ui/snippets/filter-counts.html. Classes: .oc-filter-counts(--compact), -item(--success/--destructive/--muted), -value, -label, -hint\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface FilterCountsItem {\r\n value: string\r\n label: string\r\n count: number | string\r\n hint?: string\r\n /** Accent color of the tile; default primary. */\r\n tone?: 'primary' | 'success' | 'destructive' | 'muted'\r\n disabled?: boolean\r\n}\r\ndefineProps<{\r\n options: FilterCountsItem[]\r\n /** aria-label of the group */\r\n label?: string\r\n compact?: boolean\r\n name?: string\r\n}>()\r\nconst model = defineModel<string>()\r\nconst uid = useUid('oc-filter')\r\n</script>\r\n\r\n<template>\r\n <fieldset :class=\"['oc-filter-counts', compact && 'oc-filter-counts--compact']\" role=\"radiogroup\" :aria-label=\"label\">\r\n <label v-for=\"option in options\" :key=\"option.value\" :class=\"['oc-filter-counts-item', option.tone && option.tone !== 'primary' && `oc-filter-counts-item--${option.tone}`]\">\r\n <input v-model=\"model\" type=\"radio\" :name=\"name ?? uid\" :value=\"option.value\" :disabled=\"option.disabled\" />\r\n <span class=\"oc-filter-counts-value\">{{ option.count }}</span>\r\n <span class=\"oc-filter-counts-label\">{{ option.label }}</span>\r\n <span v-if=\"option.hint\" class=\"oc-filter-counts-hint\">{{ option.hint }}</span>\r\n </label>\r\n </fieldset>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcFlipCard.vue | Map: props + v-model:flipped -> card -> checkbox (toggle) -> inner -> front / back faces -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * 3D flip card (same markup as snippets/flip-card.html). v-model:flipped. trigger: toggle (checkbox, default) |\r\n * hover (--hover, tabindex 0) | manual (.is-flipped from the model only). Props: vertical, frontLabel, backLabel.\r\n * Slots: front, back. Classes: .oc-flip-card(--hover/--vertical, .is-flipped), __toggle, __inner, __face(--front/--back),\r\n * __title, __text, __flip\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{ trigger?: 'toggle' | 'hover' | 'manual'; vertical?: boolean; frontLabel?: string; backLabel?: string }>(),\r\n { trigger: 'toggle', frontLabel: 'Show answer', backLabel: 'Back' },\r\n)\r\nconst flipped = defineModel<boolean>('flipped', { default: false })\r\nconst id = useUid('oc-flip')\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"['oc-flip-card', trigger === 'hover' && 'oc-flip-card--hover', vertical && 'oc-flip-card--vertical', trigger !== 'toggle' && flipped && 'is-flipped']\"\r\n :tabindex=\"trigger === 'hover' ? 0 : undefined\"\r\n >\r\n <input v-if=\"trigger === 'toggle'\" :id=\"id\" v-model=\"flipped\" type=\"checkbox\" class=\"oc-flip-card__toggle\" />\r\n <div class=\"oc-flip-card__inner\">\r\n <div class=\"oc-flip-card__face oc-flip-card__face--front\">\r\n <slot name=\"front\" />\r\n <label v-if=\"trigger === 'toggle'\" class=\"oc-flip-card__flip\" :for=\"id\">{{ frontLabel }}</label>\r\n </div>\r\n <div class=\"oc-flip-card__face oc-flip-card__face--back\">\r\n <slot name=\"back\" />\r\n <label v-if=\"trigger === 'toggle'\" class=\"oc-flip-card__flip\" :for=\"id\">{{ backLabel }}</label>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Form field: label, control (default slot), description and error.\r\n * The slot receives { id, describedBy, invalid } so the control can be wired:\r\n * <OcFormField label=\"Email\" description=\"...\" v-slot=\"f\"><OcInput :id=\"f.id\" :aria-describedby=\"f.describedBy\" /></OcFormField>\r\n * Classes: .oc-field(--horizontal), .oc-field-label, .oc-field-description, .oc-field-error\r\n */\r\nimport { computed } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = defineProps<{\r\n label?: string\r\n description?: string\r\n error?: string\r\n /** id of the control; generated when omitted */\r\n for?: string\r\n horizontal?: boolean\r\n}>()\r\nconst generated = useUid('oc-field')\r\nconst id = computed(() => props.for ?? generated)\r\nconst helpId = computed(() => `${id.value}-help`)\r\nconst errorId = computed(() => `${id.value}-error`)\r\nconst describedBy = computed(() => {\r\n const ids = [props.description && helpId.value, props.error && errorId.value].filter(Boolean)\r\n return ids.length ? ids.join(' ') : undefined\r\n})\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-field', horizontal && 'oc-field--horizontal']\">\r\n <label v-if=\"label || $slots.label\" class=\"oc-field-label\" :for=\"id\"><slot name=\"label\">{{ label }}</slot></label>\r\n <slot :id=\"id\" :described-by=\"describedBy\" :invalid=\"!!error\" />\r\n <p v-if=\"description\" :id=\"helpId\" class=\"oc-field-description\">{{ description }}</p>\r\n <p v-if=\"error\" :id=\"errorId\" class=\"oc-field-error\" role=\"alert\">{{ error }}</p>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcFormSection.vue | Map: props -> details (summary: icon, heading, status) -> fields slot -->\r\n<script setup lang=\"ts\">\r\n/** Collapsible form section. Slots: icon, status, default (the fields). Same `name` on siblings = one open at a time. */\r\nwithDefaults(defineProps<{ title: string; hint?: string; name?: string; open?: boolean }>(), { open: false })\r\n</script>\r\n\r\n<template>\r\n <details class=\"oc-form-section\" :name=\"name\" :open=\"open\">\r\n <summary class=\"oc-form-section__summary\">\r\n <span class=\"oc-form-section__icon\"><slot name=\"icon\" /></span>\r\n <span class=\"oc-form-section__heading\">\r\n <span class=\"oc-form-section__title\">{{ title }}</span>\r\n <span v-if=\"hint\" class=\"oc-form-section__hint\">{{ hint }}</span>\r\n </span>\r\n <span class=\"oc-form-section__status\"><slot name=\"status\" /></span>\r\n </summary>\r\n <div class=\"oc-form-section__body\"><slot /></div>\r\n </details>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcGallery.vue | Map: images (max 8) -> stage with slides -> thumbnail radios -->\r\n<script setup lang=\"ts\">\r\n/** Product photos with thumbnails (same markup as snippets/gallery.html), CSS only: radios and :has(). */\r\nimport { computed } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface GalleryImage { src: string; alt: string; thumb?: string; thumbAlt?: string }\r\nconst props = withDefaults(defineProps<{ images: GalleryImage[]; label?: string; badge?: string; side?: boolean; name?: string }>(), { label: 'Photos' })\r\nconst group = props.name ?? useUid('oc-gallery')\r\nconst list = computed(() => props.images.slice(0, 8))\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-gallery', side && 'oc-gallery--side']\">\r\n <div class=\"oc-gallery__stage\">\r\n <span v-if=\"badge\" class=\"oc-badge oc-badge--destructive oc-gallery__badge\">{{ badge }}</span>\r\n <figure v-for=\"(img, i) in list\" :key=\"i\" class=\"oc-gallery__slide\"><img :src=\"img.src\" :alt=\"img.alt\" :loading=\"i ? 'lazy' : undefined\"></figure>\r\n </div>\r\n <fieldset v-if=\"list.length > 1\" class=\"oc-gallery__thumbs\">\r\n <legend>{{ label }}</legend>\r\n <label v-for=\"(img, i) in list\" :key=\"i\" class=\"oc-gallery__thumb\">\r\n <input type=\"radio\" :name=\"group\" :checked=\"i === 0\">\r\n <img :src=\"img.thumb ?? img.src\" :alt=\"img.thumbAlt ?? img.alt\">\r\n </label>\r\n </fieldset>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcGlass.vue | Map: props (strong, flat, liquid, as) -> .oc-glass sheet -> default slot -->\r\n<script setup lang=\"ts\">\r\n/** See-through glass sheet with a light top edge; .oc-card inside becomes a glass panel.\r\n * Classes: .oc-glass + --strong, --flat (desktop window where the OS draws the blur), --liquid (liquid glass) */\r\nwithDefaults(defineProps<{ strong?: boolean; flat?: boolean; liquid?: boolean; as?: 'div' | 'section' | 'aside' | 'article' | 'main' }>(), { as: 'div' })\r\n</script>\r\n\r\n<template>\r\n <component :is=\"as\" :class=\"['oc-glass', strong && 'oc-glass--strong', flat && 'oc-glass--flat', liquid && 'oc-glass--liquid']\"><slot /></component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcGlassBar.vue | Map: props (items, icons, label) -> nav.oc-glass-bar -> links or buttons (icon slot per item) -->\r\n<script setup lang=\"ts\">\r\n/** Liquid glass menu bar: items with an icon and a label; the current item sits in a raised bubble.\r\n * Slots: icon-<index> (the icon of an item). Emits select(index) for items without href. */\r\nexport interface GlassBarItem { label: string; href?: string; current?: boolean }\r\nwithDefaults(defineProps<{ items: GlassBarItem[]; icons?: boolean; label?: string }>(), { label: 'Main' })\r\ndefineEmits<{ select: [index: number] }>()\r\n</script>\r\n\r\n<template>\r\n <nav :class=\"['oc-glass-bar', icons && 'oc-glass-bar--icons']\" :aria-label=\"label\">\r\n <template v-for=\"(item, i) in items\" :key=\"i\">\r\n <a v-if=\"item.href != null\" class=\"oc-glass-bar__item\" :href=\"item.href\" :aria-current=\"item.current ? 'page' : undefined\" :aria-label=\"icons ? item.label : undefined\"><slot :name=\"`icon-${i}`\" /><span v-if=\"!icons\">{{ item.label }}</span></a>\r\n <button v-else class=\"oc-glass-bar__item\" type=\"button\" :aria-pressed=\"item.current ?? false\" :aria-label=\"icons ? item.label : undefined\" @click=\"$emit('select', i)\"><slot :name=\"`icon-${i}`\" /><span v-if=\"!icons\">{{ item.label }}</span></button>\r\n </template>\r\n </nav>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcGlassPanel.vue | Map: props (strong) -> div.oc-glass-panel -> default slot -->\r\n<script setup lang=\"ts\">\r\n/** A lighter layer inside a glass sheet. Classes: .oc-glass-panel(--strong) */\r\ndefineProps<{ strong?: boolean }>()\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-glass-panel', strong && 'oc-glass-panel--strong']\"><slot /></div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcGreeting.vue | Map: time-of-day logic -> header -> icon slot -> body (eyebrow, title + name, date) -> actions slot -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Dashboard greeting. The time of day comes from `date` (default now): morning 05-12, afternoon 12-18, evening otherwise.\r\n * Slots: icon, actions. Classes: .oc-greeting(--morning/--afternoon/--evening/--lg), -icon, -body, -eyebrow, -title, -name, -date, -actions\r\n */\r\nimport { computed } from 'vue'\r\n\r\ntype TimeOfDay = 'morning' | 'afternoon' | 'evening'\r\n\r\nconst props = defineProps<{\r\n name?: string\r\n date?: Date\r\n timeOfDay?: TimeOfDay\r\n /** Translated greetings, e.g. { morning: 'Goedemorgen' }. */\r\n words?: Partial<Record<TimeOfDay, string>>\r\n locale?: string\r\n hideDate?: boolean\r\n eyebrow?: string\r\n size?: 'lg'\r\n}>()\r\n\r\nconst WORDS: Record<TimeOfDay, string> = { morning: 'Good morning', afternoon: 'Good afternoon', evening: 'Good evening' }\r\n\r\nconst when = computed(() => props.date ?? new Date())\r\nconst tod = computed<TimeOfDay>(() => {\r\n if (props.timeOfDay) return props.timeOfDay\r\n const h = when.value.getHours()\r\n return h >= 5 && h < 12 ? 'morning' : h >= 12 && h < 18 ? 'afternoon' : 'evening'\r\n})\r\nconst word = computed(() => props.words?.[tod.value] ?? WORDS[tod.value])\r\nconst dateText = computed(() =>\r\n new Intl.DateTimeFormat(props.locale, { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' }).format(when.value),\r\n)\r\n// Local YYYY-MM-DD for datetime (toISOString would use UTC).\r\nconst iso = computed(() => {\r\n const d = when.value\r\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\r\n})\r\n</script>\r\n\r\n<template>\r\n <header :class=\"['oc-greeting', `oc-greeting--${tod}`, size && `oc-greeting--${size}`]\">\r\n <span v-if=\"$slots.icon\" class=\"oc-greeting-icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <div class=\"oc-greeting-body\">\r\n <p v-if=\"eyebrow\" class=\"oc-greeting-eyebrow\">{{ eyebrow }}</p>\r\n <h2 class=\"oc-greeting-title\">{{ word }}<template v-if=\"name\">, <span class=\"oc-greeting-name\">{{ name }}</span></template></h2>\r\n <time v-if=\"!hideDate\" class=\"oc-greeting-date\" :datetime=\"iso\">{{ dateText }}</time>\r\n </div>\r\n <div v-if=\"$slots.actions\" class=\"oc-greeting-actions\"><slot name=\"actions\" /></div>\r\n </header>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Page or section title with a muted description. Classes: .oc-heading(--sm). `as` picks the title tag. */\r\nwithDefaults(\r\n defineProps<{\r\n title?: string\r\n description?: string\r\n size?: 'sm' | 'md'\r\n as?: 'h1' | 'h2' | 'h3' | 'h4'\r\n }>(),\r\n { size: 'md', as: 'h2' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-heading', size === 'sm' && 'oc-heading--sm']\">\r\n <component :is=\"as\" class=\"oc-heading-title\"><slot name=\"title\">{{ title }}</slot></component>\r\n <p v-if=\"description || $slots.default\" class=\"oc-heading-description\"><slot>{{ description }}</slot></p>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Preview on hover/focus (interestfor + popover, CSS hover fallback). The trigger is the `trigger` slot\r\n * (scoped: { id }) or a link with `label` and `href`; default slot = card content.\r\n * Classes: .oc-hover-card(--top), -trigger, -content(--sm). Attributes land on the content element.\r\n */\r\nimport { useAttrs } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\ndefineProps<{ label?: string; href?: string; top?: boolean; small?: boolean }>()\r\nconst attrs = useAttrs()\r\nconst id = (attrs.id as string | undefined) ?? useUid('oc-hover-card')\r\n</script>\r\n\r\n<template>\r\n <span :class=\"['oc-hover-card', top && 'oc-hover-card--top']\">\r\n <slot name=\"trigger\" :id=\"id\">\r\n <a class=\"oc-hover-card-trigger\" :href=\"href ?? '#'\" :interestfor=\"id\">{{ label }}</a>\r\n </slot>\r\n <div v-bind=\"attrs\" :id=\"id\" :class=\"['oc-hover-card-content', small && 'oc-hover-card-content--sm']\" popover>\r\n <slot />\r\n </div>\r\n </span>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcImageZoom.vue | Map: props + v-model:zoom -> toolbar (radio levels) -> viewport -> canvas -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Zoom / pan viewport (same markup as snippets/image-zoom.html). v-model:zoom = current level (default 1).\r\n * levels: toolbar values (default [1, 1.5, 2, 3]; [] = no toolbar). ratio: square | photo | CSS ratio.\r\n * Default slot replaces the <img>. Classes: .oc-image-zoom(--square/--photo), __toolbar, __label, __level, __viewport, __canvas\r\n */\r\nimport { computed } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = withDefaults(defineProps<{ src?: string; alt?: string; levels?: number[]; ratio?: string }>(), {\r\n alt: '',\r\n levels: () => [1, 1.5, 2, 3],\r\n})\r\nconst zoom = defineModel<number>('zoom', { default: 1 })\r\nconst name = useUid('oc-zoom')\r\nconst preset = computed(() => (props.ratio === 'square' || props.ratio === 'photo' ? props.ratio : undefined))\r\n// Writing --oc-zoom inline means any level works, not only the ones the CSS :has() rules know.\r\nconst vars = computed(() => ({ '--oc-zoom': String(zoom.value), ...(props.ratio && !preset.value ? { '--oc-image-zoom-ratio': props.ratio } : {}) }))\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-image-zoom', preset && `oc-image-zoom--${preset}`]\" :style=\"vars\">\r\n <div v-if=\"levels.length\" class=\"oc-image-zoom__toolbar\" role=\"radiogroup\" aria-label=\"Zoom level\">\r\n <span class=\"oc-image-zoom__label\">Zoom</span>\r\n <label v-for=\"l in levels\" :key=\"l\" class=\"oc-image-zoom__level\">\r\n <input v-model=\"zoom\" type=\"radio\" :name=\"name\" :value=\"l\" />{{ Math.round(l * 100) }}%\r\n </label>\r\n </div>\r\n <div class=\"oc-image-zoom__viewport\" tabindex=\"0\" role=\"region\" :aria-label=\"alt ? `${alt}, scroll to pan` : 'Scroll to pan'\">\r\n <div class=\"oc-image-zoom__canvas\">\r\n <slot>\r\n <img v-if=\"src\" :src=\"src\" :alt=\"alt\" />\r\n <div v-else class=\"oc-media-art\" role=\"img\" :aria-label=\"alt\" />\r\n </slot>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Text input. v-model. `error` sets .oc-input--error + aria-invalid. Any native attribute falls through. */\r\ndefineProps<{ error?: boolean }>()\r\nconst model = defineModel<string | number>()\r\n</script>\r\n\r\n<template>\r\n <input v-model=\"model\" :class=\"['oc-input', error && 'oc-input--error']\" :aria-invalid=\"error ? 'true' : undefined\" />\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Input with prefix/suffix addon. Default slot = the input(s); `prefix` / `suffix` are text props or slots. */\r\ndefineProps<{ prefix?: string; suffix?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-input-group\">\r\n <span v-if=\"prefix || $slots.prefix\" class=\"oc-input-addon\"><slot name=\"prefix\">{{ prefix }}</slot></span>\r\n <slot />\r\n <span v-if=\"suffix || $slots.suffix\" class=\"oc-input-addon\"><slot name=\"suffix\">{{ suffix }}</slot></span>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * List row. Renders <a> when `href` is set. Slots: media (left; `icon` boxes it, `image` makes it an image),\r\n * default (replaces title + description), actions (right), header / footer (full-width rows).\r\n * Classes: .oc-item(--outline/--muted/--sm/--interactive), -media(--icon/--image), -content, -title, -description,\r\n * -actions, -header, -footer\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n variant?: 'default' | 'outline' | 'muted'\r\n size?: 'sm' | 'md'\r\n interactive?: boolean\r\n href?: string\r\n title?: string\r\n description?: string\r\n icon?: boolean\r\n image?: boolean\r\n }>(),\r\n { variant: 'default', size: 'md' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <component\r\n :is=\"href ? 'a' : 'div'\"\r\n :href=\"href\"\r\n :class=\"['oc-item', variant !== 'default' && `oc-item--${variant}`, size === 'sm' && 'oc-item--sm', interactive && 'oc-item--interactive']\"\r\n >\r\n <div v-if=\"$slots.header\" class=\"oc-item-header\"><slot name=\"header\" /></div>\r\n <div v-if=\"$slots.media\" :class=\"['oc-item-media', icon && 'oc-item-media--icon', image && 'oc-item-media--image']\"><slot name=\"media\" /></div>\r\n <div class=\"oc-item-content\">\r\n <slot>\r\n <p v-if=\"title\" class=\"oc-item-title\">{{ title }}</p>\r\n <p v-if=\"description\" class=\"oc-item-description\">{{ description }}</p>\r\n </slot>\r\n </div>\r\n <div v-if=\"$slots.actions\" class=\"oc-item-actions\"><slot name=\"actions\" /></div>\r\n <div v-if=\"$slots.footer\" class=\"oc-item-footer\"><slot name=\"footer\" /></div>\r\n </component>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Vertical list of OcItem. `separated` puts a separator between the direct children is left to OcItemSeparator. Class: .oc-item-group */\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-item-group\"><slot /></div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Divider between items in an OcItemGroup. Class: .oc-item-separator */\r\n</script>\r\n\r\n<template>\r\n <hr class=\"oc-item-separator\" />\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** One key. Class: .oc-kbd */\r\n</script>\r\n\r\n<template>\r\n <kbd class=\"oc-kbd\"><slot /></kbd>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Shortcut: `keys` [\"Ctrl\", \"K\"] renders one key per entry, with a \"+\" separator when `separator` is set. Or pass OcKbd in the slot. Classes: .oc-kbd-group, .oc-kbd-sep */\r\ndefineProps<{ keys?: string[]; separator?: boolean }>()\r\n</script>\r\n\r\n<template>\r\n <span class=\"oc-kbd-group\">\r\n <slot>\r\n <template v-for=\"(key, i) in keys\" :key=\"key + i\">\r\n <span v-if=\"separator && i > 0\" class=\"oc-kbd-sep\">+</span>\r\n <kbd class=\"oc-kbd\">{{ key }}</kbd>\r\n </template>\r\n </slot>\r\n </span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Form label. `for` links it to a control. Classes: .oc-label(--required/--inline/--muted) */\r\ndefineProps<{ for?: string; required?: boolean; inline?: boolean; muted?: boolean }>()\r\n</script>\r\n\r\n<template>\r\n <label :class=\"['oc-label', required && 'oc-label--required', inline && 'oc-label--inline', muted && 'oc-label--muted']\" :for=\"$props.for\">\r\n <slot />\r\n </label>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcLanguageSelect.vue | Map: types + props -> template (label pill: icon slot + native select) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Compact language / currency switcher. v-model = selected value. Slot `icon` replaces the globe / symbol.\r\n * Same markup as packages/ui/snippets/language-select.html. class/style on the pill, other attributes on the select.\r\n */\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\nexport interface LanguageSelectItem {\r\n value: string\r\n label: string\r\n}\r\n\r\ndefineOptions({ inheritAttrs: false })\r\ndefineProps<{\r\n options: LanguageSelectItem[]\r\n /** aria-label of the select (default \"Language\" / \"Currency\") */\r\n label?: string\r\n currency?: boolean\r\n ghost?: boolean\r\n /** Text icon, e.g. \"€\" (default: globe, or € with `currency`) */\r\n icon?: string\r\n}>()\r\nconst model = defineModel<string>()\r\nconst { root, control } = useAttrsSplit()\r\n</script>\r\n\r\n<template>\r\n <label v-bind=\"root\" :class=\"['oc-language-select', ghost && 'oc-language-select--ghost', currency && 'oc-language-select--currency']\">\r\n <span class=\"oc-language-select-icon\" aria-hidden=\"true\">\r\n <slot name=\"icon\">\r\n <template v-if=\"icon || currency\">{{ icon ?? '€' }}</template>\r\n <svg data-icon=\"mdi:web\" v-else viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M16.36 14c.08-.66.14-1.32.14-2s-.06-1.34-.14-2h3.38c.16.64.26 1.31.26 2s-.1 1.36-.26 2m-5.15 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95a8.03 8.03 0 0 1-4.33 3.56M14.34 14H9.66c-.1-.66-.16-1.32-.16-2s.06-1.35.16-2h4.68c.09.65.16 1.32.16 2s-.07 1.34-.16 2M12 19.96c-.83-1.2-1.5-2.53-1.91-3.96h3.82c-.41 1.43-1.08 2.76-1.91 3.96M8 8H5.08A7.92 7.92 0 0 1 9.4 4.44C8.8 5.55 8.35 6.75 8 8m-2.92 8H8c.35 1.25.8 2.45 1.4 3.56A8 8 0 0 1 5.08 16m-.82-2C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32-.14 2s.06 1.34.14 2M12 4.03c.83 1.2 1.5 2.54 1.91 3.97h-3.82c.41-1.43 1.08-2.77 1.91-3.97M18.92 8h-2.95a15.7 15.7 0 0 0-1.38-3.56c1.84.63 3.37 1.9 4.33 3.56M12 2C6.47 2 2 6.5 2 12a10 10 0 0 0 10 10a10 10 0 0 0 10-10A10 10 0 0 0 12 2\"/></svg>\r\n </slot>\r\n </span>\r\n <select v-bind=\"control\" v-model=\"model\" class=\"oc-language-select-control\" :aria-label=\"label ?? (currency ? 'Currency' : 'Language')\">\r\n <option v-for=\"option in options\" :key=\"option.value\" :value=\"option.value\">{{ option.label }}</option>\r\n </select>\r\n </label>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Large clickable card with icon, title and description. Renders <a> with `href`, <span> when disabled,\r\n * otherwise <button>. State: `current` (aria-current), `disabled` (aria-disabled).\r\n * Slots: icon, title (+ trailing badge), description, footer.\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst props = defineProps<{\r\n href?: string\r\n title?: string\r\n description?: string\r\n footer?: string\r\n current?: boolean\r\n disabled?: boolean\r\n}>()\r\nconst tag = computed(() => (props.disabled ? 'span' : props.href ? 'a' : 'button'))\r\n</script>\r\n\r\n<template>\r\n <component\r\n :is=\"tag\"\r\n class=\"oc-launcher\"\r\n :href=\"tag === 'a' ? href : undefined\"\r\n :type=\"tag === 'button' ? 'button' : undefined\"\r\n :aria-current=\"current ? 'true' : undefined\"\r\n :aria-disabled=\"disabled ? 'true' : undefined\"\r\n >\r\n <span v-if=\"$slots.icon\" class=\"oc-launcher-icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <h3 class=\"oc-launcher-title\"><slot name=\"title\">{{ title }}</slot></h3>\r\n <p v-if=\"description || $slots.description\" class=\"oc-launcher-description\"><slot name=\"description\">{{ description }}</slot></p>\r\n <span v-if=\"footer || $slots.footer\" class=\"oc-launcher-footer\"><slot name=\"footer\">{{ footer }}</slot></span>\r\n </component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcLazyImage.vue | Map: props -> figure.oc-lazy (ratio, preview) -> img loading=lazy -> loaded / error state -->\r\n<script setup lang=\"ts\">\r\n/** An image that keeps its place, shows a shimmer (or a blurred preview) and fades in once loaded (same markup as\r\n * snippets/lazy.html). Props: src, alt, width, height, ratio, preview, caption, loading. Slot: caption. */\r\nimport { computed, ref } from 'vue'\r\n\r\nconst props = withDefaults(defineProps<{ src: string; alt: string; width?: number; height?: number; ratio?: string; preview?: string; caption?: string; loading?: 'lazy' | 'eager' }>(), { loading: 'lazy' })\r\nconst state = ref<'' | 'is-loaded' | 'is-error'>('')\r\nconst vars = computed(() => ({ ...(props.ratio ? { '--oc-lazy-ratio': props.ratio } : {}), ...(props.preview ? { '--oc-lazy-preview': `url(${props.preview})` } : {}) }))\r\n</script>\r\n\r\n<template>\r\n <figure :class=\"['oc-lazy', state]\" :style=\"vars\">\r\n <img :src=\"src\" :alt=\"alt\" :width=\"width\" :height=\"height\" :loading=\"loading\" decoding=\"async\" @load=\"state = 'is-loaded'\" @error=\"state = 'is-error'\">\r\n <figcaption v-if=\"caption || $slots.caption\"><slot name=\"caption\">{{ caption }}</slot></figcaption>\r\n </figure>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcLightbox.vue | Map: props + model -> open at photo -> thumbnails -> <dialog> (bar, track of slides) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Lightbox on a native <dialog> (same markup as snippets/lightbox.html). v-model:open controls it.\r\n * images: { src?, alt, caption?, thumb? }[] (no src = placeholder art). Prev / next are anchor links; with JavaScript\r\n * they scroll without putting #slide in the address, and closing removes a slide hash of this viewer.\r\n * Slot: caption (scoped: { image, index }). Classes: .oc-lightbox(--single), __bar, __title, __close, __track,\r\n * __slide, __media, __nav(--prev/--next), __caption, __counter; .oc-lightbox-thumbs / -thumb.\r\n */\r\nimport { nextTick, ref } from 'vue'\r\nimport { useDialog } from '../composables/useDialog'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = withDefaults(\r\n defineProps<{ images: { src?: string; alt: string; caption?: string; thumb?: string }[]; title?: string; label?: string; thumbnails?: boolean }>(),\r\n { label: 'Photo viewer', thumbnails: true },\r\n)\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst el = ref<HTMLDialogElement | null>(null)\r\nconst { onClose: dialogClose } = useDialog(open, el)\r\nconst onClose = () => {\r\n const slide = location.hash && document.getElementById(decodeURIComponent(location.hash.slice(1)))\r\n if (slide && el.value?.contains(slide)) history.replaceState(history.state, '', location.pathname + location.search)\r\n dialogClose()\r\n}\r\n// Prev / next: scroll to the slide without changing the address (the href still works without JavaScript).\r\nfunction go(event: MouseEvent, i: number) {\r\n const slide = document.getElementById(slideId(i))\r\n if (!slide) return\r\n event.preventDefault()\r\n slide.scrollIntoView?.({ behavior: matchMedia('(prefers-reduced-motion: reduce)').matches ? 'instant' as ScrollBehavior : 'smooth', block: 'nearest', inline: 'center' })\r\n}\r\nconst base = useUid('oc-lightbox')\r\nconst n = () => props.images.length\r\nconst slideId = (i: number) => `${base}-${((i % n()) + n()) % n() + 1}`\r\n\r\n// Open the viewer and jump (without animation) to photo i.\r\nasync function show(i: number) {\r\n open.value = true\r\n await nextTick()\r\n document.getElementById(slideId(i))?.scrollIntoView?.({ behavior: 'instant' as ScrollBehavior, block: 'nearest', inline: 'center' })\r\n}\r\ndefineExpose({ show, close: () => (open.value = false) })\r\n</script>\r\n\r\n<template>\r\n <div v-if=\"thumbnails\" class=\"oc-lightbox-thumbs\">\r\n <button v-for=\"(img, i) in images\" :key=\"i\" type=\"button\" class=\"oc-lightbox-thumb\" :aria-label=\"`Open photo ${i + 1}: ${img.alt}`\" @click=\"show(i)\">\r\n <img v-if=\"img.thumb || img.src\" :src=\"img.thumb || img.src\" :alt=\"img.alt\" />\r\n <span v-else class=\"oc-media-art\" />\r\n </button>\r\n </div>\r\n <dialog ref=\"el\" :class=\"['oc-lightbox', images.length === 1 && 'oc-lightbox--single']\" closedby=\"any\" :aria-label=\"label\" @close=\"onClose\">\r\n <div class=\"oc-lightbox__bar\">\r\n <h2 v-if=\"title\" class=\"oc-lightbox__title\">{{ title }}</h2>\r\n <span v-else />\r\n <button type=\"button\" class=\"oc-lightbox__close\" aria-label=\"Close\" @click=\"open = false\">✕</button>\r\n </div>\r\n <div class=\"oc-lightbox__track\" tabindex=\"0\" aria-label=\"Photos, use the arrow keys\">\r\n <figure v-for=\"(img, i) in images\" :id=\"slideId(i)\" :key=\"i\" class=\"oc-lightbox__slide\">\r\n <div class=\"oc-lightbox__media\">\r\n <img v-if=\"img.src\" :src=\"img.src\" :alt=\"img.alt\" />\r\n <span v-else class=\"oc-media-art\" role=\"img\" :aria-label=\"img.alt\" />\r\n </div>\r\n <template v-if=\"images.length > 1\">\r\n <a class=\"oc-lightbox__nav oc-lightbox__nav--prev\" :href=\"`#${slideId(i - 1)}`\" aria-label=\"Previous photo\" @click=\"go($event, i - 1)\">←</a>\r\n <a class=\"oc-lightbox__nav oc-lightbox__nav--next\" :href=\"`#${slideId(i + 1)}`\" aria-label=\"Next photo\" @click=\"go($event, i + 1)\">→</a>\r\n </template>\r\n <figcaption class=\"oc-lightbox__caption\">\r\n <span v-if=\"images.length > 1\" class=\"oc-lightbox__counter\">{{ i + 1 }} / {{ images.length }}</span>\r\n <slot name=\"caption\" :image=\"img\" :index=\"i\">{{ img.caption ?? img.alt }}</slot>\r\n </figcaption>\r\n </figure>\r\n </div>\r\n </dialog>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcLinkArrow.vue | Map: props (direction, tone, size) -> a.oc-link-arrow -->\r\n<script setup lang=\"ts\">\r\n/** Text link with a moving arrow. Classes: .oc-link-arrow + --back/--external, --accent/--muted, --sm/--lg */\r\nwithDefaults(\r\n defineProps<{\r\n href: string\r\n direction?: 'forward' | 'back' | 'external'\r\n tone?: 'default' | 'accent' | 'muted'\r\n size?: 'sm' | 'default' | 'lg'\r\n }>(),\r\n { direction: 'forward', tone: 'default', size: 'default' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <a\r\n :class=\"[\r\n 'oc-link-arrow',\r\n direction !== 'forward' && `oc-link-arrow--${direction}`,\r\n tone !== 'default' && `oc-link-arrow--${tone}`,\r\n size !== 'default' && `oc-link-arrow--${size}`,\r\n ]\"\r\n :href=\"href\"\r\n ><slot /></a>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcLinkRow.vue | Map: props (links, tone, size) -> ul.oc-link-row -> li > a per link, or the slot -->\r\n<script setup lang=\"ts\">\r\n/** A row of links under a card; external links get an arrow, github.com links the GitHub mark (CSS, by the href).\r\n * Classes: .oc-link-row + --accent/--muted, --sm/--lg */\r\nwithDefaults(\r\n defineProps<{ links?: { href: string; label: string }[]; tone?: 'default' | 'accent' | 'muted'; size?: 'sm' | 'default' | 'lg' }>(),\r\n { tone: 'default', size: 'default' },\r\n)\r\nconst external = (href: string) => /^https?:\\/\\//.test(href)\r\n</script>\r\n\r\n<template>\r\n <ul :class=\"['oc-link-row', tone !== 'default' && `oc-link-row--${tone}`, size !== 'default' && `oc-link-row--${size}`]\">\r\n <template v-if=\"links\">\r\n <li v-for=\"(l, i) in links\" :key=\"i\"><a :href=\"l.href\" :rel=\"external(l.href) ? 'noopener' : undefined\">{{ l.label }}</a></li>\r\n </template>\r\n <slot v-else />\r\n </ul>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcListToolbar.vue | Map: toolbar row -> search slot -> count -> spacer -> view radios (built-in icons) -> actions slot -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Toolbar above a list. v-model:view picks the view (\"cards\", \"table\" or \"list\"); render the matching view yourself.\r\n * Slots: search, actions, view-icon (scoped { view } to replace the built-in icons).\r\n * Classes: .oc-list-toolbar(--sticky/--bordered), -search, -count, -spacer, -views, -view, -actions\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n count?: string\r\n views?: Array<{ value: string; label: string }>\r\n viewsLabel?: string\r\n sticky?: boolean\r\n bordered?: boolean\r\n }>(),\r\n { views: () => [], viewsLabel: 'View' },\r\n)\r\nconst view = defineModel<string>('view', { default: 'cards' })\r\nconst name = useUid('oc-list-view')\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-list-toolbar', sticky && 'oc-list-toolbar--sticky', bordered && 'oc-list-toolbar--bordered']\" role=\"toolbar\">\r\n <div v-if=\"$slots.search\" class=\"oc-list-toolbar-search\"><slot name=\"search\" /></div>\r\n <span v-if=\"count\" class=\"oc-list-toolbar-count\">{{ count }}</span>\r\n <span class=\"oc-list-toolbar-spacer\"></span>\r\n <div v-if=\"views.length\" class=\"oc-list-toolbar-views\" role=\"radiogroup\" :aria-label=\"viewsLabel\">\r\n <label v-for=\"v in views\" :key=\"v.value\" class=\"oc-list-toolbar-view\" :title=\"v.label\">\r\n <input v-model=\"view\" type=\"radio\" :name=\"name\" :value=\"v.value\" :aria-label=\"v.label\" />\r\n <slot name=\"view-icon\" :view=\"v\">\r\n <!-- Built-in webicons for the three common views (mdi:view-grid-outline, mdi:table, mdi:format-list-bulleted). -->\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\r\n <path v-if=\"v.value === 'cards'\" d=\"M3 11h8V3H3m2 2h4v4H5m8 12h8v-8h-8m2 2h4v4h-4M3 21h8v-8H3m2 2h4v4H5m8-16v8h8V3m-2 6h-4V5h4Z\" />\r\n <path v-else-if=\"v.value === 'table'\" d=\"M5 4h14a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2m0 4v4h6V8zm8 0v4h6V8zm-8 6v4h6v-4zm8 0v4h6v-4z\" />\r\n <path v-else d=\"M7 5h14v2H7zm0 8v-2h14v2zM4 4.5A1.5 1.5 0 0 1 5.5 6A1.5 1.5 0 0 1 4 7.5A1.5 1.5 0 0 1 2.5 6A1.5 1.5 0 0 1 4 4.5m0 6A1.5 1.5 0 0 1 5.5 12A1.5 1.5 0 0 1 4 13.5A1.5 1.5 0 0 1 2.5 12A1.5 1.5 0 0 1 4 10.5M7 19v-2h14v2zm-3-2.5A1.5 1.5 0 0 1 5.5 18A1.5 1.5 0 0 1 4 19.5A1.5 1.5 0 0 1 2.5 18A1.5 1.5 0 0 1 4 16.5\" />\r\n </svg>\r\n </slot>\r\n </label>\r\n </div>\r\n <div v-if=\"$slots.actions\" class=\"oc-list-toolbar-actions\"><slot name=\"actions\" /></div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcLiveFrame.vue | Map: props (src, title, width, height, static) -> div.oc-live-frame -> iframe or slot -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * A live page at a virtual size (default 1280x720), scaled down to the frame width in pure CSS. Without src the slot\r\n * goes in (an <img>, <video> or .oc-live-frame__content). Classes: .oc-live-frame, --static, .oc-browser-frame__view\r\n */\r\nwithDefaults(\r\n defineProps<{ src?: string; title?: string; width?: number; height?: number; static?: boolean; inBrowserFrame?: boolean }>(),\r\n { title: '', width: 1280, height: 720, static: false, inBrowserFrame: false },\r\n)\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"[inBrowserFrame && 'oc-browser-frame__view', 'oc-live-frame', static && 'oc-live-frame--static']\"\r\n :style=\"{ '--oc-live-w': width, '--oc-live-h': height }\"\r\n >\r\n <iframe v-if=\"src\" :src=\"src\" :title=\"title\" loading=\"lazy\" scrolling=\"no\" :tabindex=\"static ? -1 : undefined\" />\r\n <slot v-else />\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMarquee.vue | Map: props -> .oc-marquee -> track (items + aria-hidden copy) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Endless strip; pauses on hover / focus, stands still with reduced motion. The items are rendered twice\r\n * (the copy is aria-hidden). Classes: .oc-marquee (--reverse, --slow, --fast, --plain, --no-fade), __track, __item\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n items: string[]\r\n label?: string\r\n reverse?: boolean\r\n speed?: 'default' | 'slow' | 'fast'\r\n plain?: boolean\r\n noFade?: boolean\r\n }>(),\r\n { speed: 'default' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"[\r\n 'oc-marquee',\r\n reverse && 'oc-marquee--reverse',\r\n speed !== 'default' && `oc-marquee--${speed}`,\r\n plain && 'oc-marquee--plain',\r\n noFade && 'oc-marquee--no-fade',\r\n ]\"\r\n :aria-label=\"label\"\r\n >\r\n <div class=\"oc-marquee__track\">\r\n <span v-for=\"(item, i) in items\" :key=\"i\" class=\"oc-marquee__item\">{{ item }}</span>\r\n <span v-for=\"(item, i) in items\" :key=\"'copy-' + i\" class=\"oc-marquee__item\" aria-hidden=\"true\">{{ item }}</span>\r\n </div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMediaThumb.vue | Map: props -> <a>/<div> -> picture -> badge -> duration -> progress -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * 16:9 video thumbnail (same markup as snippets/media-thumb.html). href renders an <a>.\r\n * Props: src, alt, art (placeholder variant 1-6), duration, badge, live, progress (0-100), watched, ratio (video|square|portrait).\r\n * Default slot: extra overlay content. Classes: .oc-media-thumb(--square/--portrait, .is-watched), __badge(--live), __duration, __progress\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n src?: string\r\n alt?: string\r\n art?: number\r\n href?: string\r\n duration?: string\r\n badge?: string\r\n live?: boolean\r\n progress?: number\r\n watched?: boolean\r\n ratio?: 'video' | 'square' | 'portrait'\r\n }>(),\r\n { alt: '', ratio: 'video' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <component\r\n :is=\"href ? 'a' : 'div'\"\r\n :href=\"href\"\r\n :class=\"['oc-media-thumb', ratio !== 'video' && `oc-media-thumb--${ratio}`, watched && 'is-watched']\"\r\n >\r\n <img v-if=\"src\" :src=\"src\" :alt=\"alt\" />\r\n <div v-else :class=\"['oc-media-art', art && art > 1 && `oc-media-art--${art}`]\" />\r\n <span v-if=\"badge\" :class=\"['oc-media-thumb__badge', live && 'oc-media-thumb__badge--live']\">{{ badge }}</span>\r\n <span v-if=\"duration\" class=\"oc-media-thumb__duration\">{{ duration }}</span>\r\n <progress v-if=\"progress != null\" class=\"oc-media-thumb__progress\" :value=\"progress\" max=\"100\" :aria-label=\"`Watched ${progress}%`\">{{ progress }}%</progress>\r\n <slot />\r\n </component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMediaCard.vue | Map: props -> article -> OcMediaThumb -> body (avatar, title + meta, menu) -> popover menu -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Video feed card (same markup as snippets/media-card.html). Props: title, href (title link covers the card), meta,\r\n * avatar (initials), thumb (props for OcMediaThumb), compact. Slots: avatar (replaces initials), meta, menu (dropdown items;\r\n * shows the ⋮ button). Classes: .oc-media-card(--compact), __body, __avatar, __text, __title, __meta, __menu\r\n */\r\nimport OcMediaThumb from './OcMediaThumb.vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineProps<{ title: string; href: string; meta?: string; avatar?: string; thumb?: Record<string, unknown>; compact?: boolean }>()\r\nconst menuId = useUid('oc-media-card-menu')\r\n</script>\r\n\r\n<template>\r\n <article :class=\"['oc-media-card', compact && 'oc-media-card--compact']\">\r\n <OcMediaThumb v-bind=\"thumb\" />\r\n <div class=\"oc-media-card__body\">\r\n <span v-if=\"avatar || $slots.avatar\" class=\"oc-media-card__avatar\" aria-hidden=\"true\"><slot name=\"avatar\">{{ avatar }}</slot></span>\r\n <div class=\"oc-media-card__text\">\r\n <h3 class=\"oc-media-card__title\"><a :href=\"href\">{{ title }}</a></h3>\r\n <p v-if=\"meta || $slots.meta\" class=\"oc-media-card__meta\"><slot name=\"meta\">{{ meta }}</slot></p>\r\n </div>\r\n <button v-if=\"$slots.menu\" type=\"button\" class=\"oc-media-card__menu\" :popovertarget=\"menuId\" aria-label=\"More actions\">⋮</button>\r\n </div>\r\n <div v-if=\"$slots.menu\" :id=\"menuId\" class=\"oc-dropdown-menu\" popover><slot name=\"menu\" /></div>\r\n </article>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMediaRow.vue | Map: props -> li row -> OcMediaThumb -> title link + meta -> menu button + popover -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Compact media row (same markup as snippets/media-row.html). Put rows in\r\n * <ul class=\"oc-media-row-list\"> or <ol class=\"oc-media-row-list oc-media-row-list--numbered\"> (numbered playlist).\r\n * Props: title, href (link covers the row), meta, thumb (props for OcMediaThumb), current (aria-current).\r\n * Slots: meta, menu (dropdown items; shows the ⋮ button). Classes: .oc-media-row, __text, __title, __meta, __menu\r\n */\r\nimport OcMediaThumb from './OcMediaThumb.vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineProps<{ title: string; href: string; meta?: string; thumb?: Record<string, unknown>; current?: boolean }>()\r\nconst menuId = useUid('oc-media-row-menu')\r\n</script>\r\n\r\n<template>\r\n <li class=\"oc-media-row\" :aria-current=\"current ? 'true' : undefined\">\r\n <OcMediaThumb v-bind=\"thumb\" />\r\n <div class=\"oc-media-row__text\">\r\n <h3 class=\"oc-media-row__title\"><a :href=\"href\">{{ title }}</a></h3>\r\n <p v-if=\"meta || $slots.meta\" class=\"oc-media-row__meta\"><slot name=\"meta\">{{ meta }}</slot></p>\r\n </div>\r\n <template v-if=\"$slots.menu\">\r\n <button type=\"button\" class=\"oc-media-row__menu\" :popovertarget=\"menuId\" aria-label=\"More actions\">⋮</button>\r\n <div :id=\"menuId\" class=\"oc-dropdown-menu\" popover><slot name=\"menu\" /></div>\r\n </template>\r\n </li>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMessage.vue | Map: types + icons -> props -> article (avatar, bubble: sender, quote, text, attachments, meta; actions) -->\r\n<script lang=\"ts\">\r\nimport type { AttachmentFile } from './OcAttachment.vue'\r\n\r\n/** File chip (default), image preview or square thumbnail inside a message. */\r\nexport type MessageAttachment =\r\n | (AttachmentFile & { kind?: 'file' })\r\n | { kind: 'image'; href?: string; src?: string; alt: string; art?: number; caption?: string }\r\n | { kind: 'thumb'; src?: string; alt: string; art?: number }\r\nexport interface MessageAction { name: string; label: string; icon?: 'reply' | 'delete'; destructive?: boolean }\r\nexport interface MessageData {\r\n direction?: 'in' | 'out'\r\n sender?: string\r\n avatar?: string\r\n time?: string\r\n datetime?: string\r\n status?: 'sent' | 'read' | 'failed'\r\n statusLabel?: string\r\n statusIcon?: boolean\r\n continued?: boolean\r\n quote?: { href?: string; sender: string; text: string }\r\n /** Plain text: one paragraph. */\r\n text?: string\r\n /** Trusted markup (p, ul, ol, a, strong, code); escape user text on the server. */\r\n html?: string\r\n attachments?: MessageAttachment[]\r\n actions?: MessageAction[]\r\n label?: string\r\n id?: string\r\n}\r\nexport const MESSAGE_ICONS: Record<string, string> = {\r\n reply: 'M8 9.8v.9l1.7.3c2.6.4 4.5 1.4 5.9 2.7c-1.7-.5-3.5-.8-5.6-.8H8v1.3L5.8 12zM10 5l-7 7l7 7v-4.1c5 0 8.5 1.6 11 5.1c-1-5-4-10-11-11',\r\n delete: 'M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zM7 6h10v13H7zm2 2v9h2V8zm4 0v9h2V8z',\r\n}\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\n/**\r\n * Chat bubble (same markup as snippets/message.html): incoming / outgoing, sender, avatar, time, read receipt, reply quote,\r\n * attachments and hover actions. Slot default = extra text content. Emits: action(name).\r\n * Classes: .oc-message(--out/--continued) __avatar __bubble __sender __quote __text __attachments __meta __status(--read/--failed) __actions __action\r\n */\r\nimport { computed } from 'vue'\r\nimport OcAttachment from './OcAttachment.vue'\r\nimport OcAttachmentImage from './OcAttachmentImage.vue'\r\nimport OcAttachmentThumb from './OcAttachmentThumb.vue'\r\n\r\nconst props = withDefaults(defineProps<MessageData>(), { direction: 'in' })\r\nconst emit = defineEmits<{ action: [name: string] }>()\r\nconst STATUS = { sent: 'Sent', read: 'Read', failed: 'Failed' }\r\nconst thumbsOnly = computed(() => !!props.attachments?.length && props.attachments.every((a) => a.kind === 'thumb'))\r\n// Props of one attachment without its `kind`.\r\ntype ImageAttachment = Extract<MessageAttachment, { kind: 'image' }>\r\ntype ThumbAttachment = Extract<MessageAttachment, { kind: 'thumb' }>\r\nconst strip = (a: MessageAttachment) => {\r\n const { kind: _k, ...p } = a\r\n return p\r\n}\r\nconst image = (a: MessageAttachment) => strip(a) as Omit<ImageAttachment, 'kind'>\r\nconst thumb = (a: MessageAttachment) => strip(a) as Omit<ThumbAttachment, 'kind'>\r\nconst file = (a: MessageAttachment) => strip(a) as AttachmentFile\r\n</script>\r\n\r\n<template>\r\n <article :id=\"id\" :class=\"['oc-message', direction === 'out' && 'oc-message--out', continued && 'oc-message--continued']\" :aria-label=\"label\">\r\n <span class=\"oc-avatar oc-message__avatar\">{{ avatar }}</span>\r\n <div class=\"oc-message__bubble\">\r\n <p v-if=\"sender && !continued\" class=\"oc-message__sender\">{{ sender }}</p>\r\n <a v-if=\"quote\" class=\"oc-message__quote\" :href=\"quote.href\"><strong>{{ quote.sender }}</strong><span>{{ quote.text }}</span></a>\r\n <div v-if=\"html\" class=\"oc-message__text\" v-html=\"html\"></div>\r\n <div v-else-if=\"text || $slots.default\" class=\"oc-message__text\"><p v-if=\"text\">{{ text }}</p><slot /></div>\r\n <div v-if=\"attachments?.length\" class=\"oc-message__attachments\">\r\n <div v-if=\"thumbsOnly\" class=\"oc-attachment-list\"><OcAttachmentThumb v-for=\"(a, i) in attachments\" :key=\"i\" v-bind=\"thumb(a)\" as=\"span\" /></div>\r\n <template v-for=\"(a, i) in attachments\" v-else :key=\"i\">\r\n <OcAttachmentImage v-if=\"a.kind === 'image'\" v-bind=\"image(a)\" />\r\n <OcAttachmentThumb v-else-if=\"a.kind === 'thumb'\" v-bind=\"thumb(a)\" as=\"span\" />\r\n <OcAttachment v-else v-bind=\"file(a)\" />\r\n </template>\r\n </div>\r\n <p v-if=\"time || status\" class=\"oc-message__meta\">\r\n <time v-if=\"time\" :datetime=\"datetime\">{{ time }}</time>\r\n <span v-if=\"status\" :class=\"['oc-message__status', status !== 'sent' && `oc-message__status--${status}`]\"><svg data-icon=\"mdi:check-all\" v-if=\"statusIcon\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M.41 13.41L6 19l1.41-1.42L1.83 12m20.41-6.42L11.66 16.17L7.5 12l-1.43 1.41L11.66 19l12-12M18 7l-1.41-1.42l-6.35 6.35l1.42 1.41z\"/></svg>{{ statusLabel ?? STATUS[status] }}</span>\r\n </p>\r\n </div>\r\n <div v-if=\"actions?.length\" class=\"oc-message__actions\">\r\n <button v-for=\"a in actions\" :key=\"a.name\" type=\"button\" :class=\"['oc-message__action', a.destructive && 'oc-message__action--destructive']\" :aria-label=\"a.label\" @click=\"emit('action', a.name)\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path :d=\"MESSAGE_ICONS[a.icon ?? a.name] ?? MESSAGE_ICONS.reply\" /></svg>\r\n </button>\r\n </div>\r\n </article>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMessageList.vue | Map: props + demo conversation -> .oc-message-list -> dividers and OcMessage rows -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Column of messages and dividers (snippets/message.html). items: (MessageData | { divider, system? })[]; demo conversation\r\n * when empty; slot default replaces them. log = role=\"log\" (default true). Emits: action(name, message, index).\r\n * Classes: .oc-message-list, .oc-message-divider(--system)\r\n */\r\nimport OcMessage, { type MessageData } from './OcMessage.vue'\r\n\r\nexport type MessageListItem = MessageData | { divider: string; system?: boolean }\r\nwithDefaults(defineProps<{ items?: MessageListItem[]; log?: boolean; label?: string }>(), {\r\n log: true,\r\n label: 'Conversation with Customer 1',\r\n items: () => [\r\n { divider: 'Tuesday 14 October' },\r\n { sender: 'Customer 1', avatar: 'C1', time: '09:12', datetime: '2026-10-14T09:12', label: 'Customer 1, 09:12', text: 'Morning Tom! The worktop supplier sent two samples for Project 1.' },\r\n {\r\n sender: 'Customer 1', avatar: 'C1', time: '09:13', datetime: '2026-10-14T09:13', label: 'Customer 1, 09:13', continued: true, id: 'oc-message-demo-question',\r\n html: '<p>Which finish should we order?</p><ul><li><strong>Calacatta</strong> matt, 20 mm</li><li><strong>Nero Marquina</strong> polished, 12 mm</li></ul><p>Details are on the <a href=\"#supplier-sheet\">supplier sheet</a>.</p>',\r\n },\r\n {\r\n direction: 'out', avatar: 'C6', time: '09:20', datetime: '2026-10-14T09:20', label: 'You, 09:20', status: 'read', statusIcon: true,\r\n quote: { href: '#oc-message-demo-question', sender: 'Customer 1', text: 'Which finish should we order? Calacatta matt, 20 mm or Nero Marquina polished, 12 mm' },\r\n text: 'Calacatta matt. The client wants the lighter look next to the oak fronts.',\r\n actions: [{ name: 'reply', label: 'Reply to this message' }, { name: 'delete', label: 'Delete this message', destructive: true }],\r\n },\r\n { divider: 'Customer 1 marked this question as answered', system: true },\r\n ],\r\n})\r\nconst emit = defineEmits<{ action: [name: string, message: MessageData, index: number] }>()\r\nconst isDivider = (item: MessageListItem): item is { divider: string; system?: boolean } => 'divider' in item\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-message-list\" :role=\"log ? 'log' : undefined\" :aria-label=\"log ? label : undefined\">\r\n <slot>\r\n <template v-for=\"(item, i) in items\" :key=\"i\">\r\n <div v-if=\"isDivider(item)\" :class=\"['oc-message-divider', item.system && 'oc-message-divider--system']\" :role=\"item.system ? 'note' : undefined\"><span>{{ item.divider }}</span></div>\r\n <OcMessage v-else v-bind=\"item\" @action=\"(name: string) => emit('action', name, item as MessageData, i)\" />\r\n </template>\r\n </slot>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMessageThread.vue | Map: props + demo -> state (messages, sending) -> header (back slot, heading, people, badge, menu)\r\n -> scroll (OcMessageList) -> footer (composer slot / form / note) -> busy overlay -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Scrolling conversation (same markup as snippets/message-thread.html). Like the snippet script, a sent text is appended as an\r\n * outgoing bubble after the @send handler (prop onSend, may return a Promise) resolves; aria-busy shows the overlay meanwhile.\r\n * Ctrl/Cmd + Enter sends. `manual` = you append messages yourself. Emits: menu(name), tool(name).\r\n * Slots: back (start of the header), composer (replaces the form). Classes: .oc-message-thread(--plain) __header __heading __title\r\n * __meta __people __actions __icon-btn __scroll __footer __note __busy\r\n */\r\nimport { ref, watch } from 'vue'\r\nimport OcMessageList, { type MessageListItem } from './OcMessageList.vue'\r\nimport type { MessageData } from './OcMessage.vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface ThreadParticipant { initials: string; name?: string }\r\nexport type ThreadMenuItem = { name: string; label: string; destructive?: boolean } | { separator: true }\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n title?: string\r\n project?: string\r\n meta?: string\r\n participants?: ThreadParticipant[]\r\n status?: { label: string; variant?: string } | null\r\n menu?: ThreadMenuItem[] | null\r\n messages?: MessageListItem[]\r\n scrollLabel?: string\r\n live?: boolean\r\n busy?: boolean\r\n /** Overlay title; empty string leaves the overlay out. */\r\n busyTitle?: string\r\n busyText?: string\r\n note?: string\r\n placeholder?: string\r\n composerLabel?: string\r\n inline?: boolean\r\n tools?: Array<'attach' | 'emoji'>\r\n hint?: string\r\n manual?: boolean\r\n me?: string\r\n plain?: boolean\r\n id?: string\r\n onSend?: (text: string) => void | Promise<void>\r\n }>(),\r\n {\r\n title: 'Kitchen worktop: which finish?',\r\n project: 'Project 1',\r\n meta: 'Customer 1 → Customer 6 · 14 Oct 2026',\r\n participants: () => [{ initials: 'C1', name: 'Customer 1' }, { initials: 'C6', name: 'Customer 6' }],\r\n status: () => ({ label: 'Urgent', variant: 'destructive' }),\r\n menu: () => [{ name: 'unread', label: 'Mark as unread' }, { name: 'archive', label: 'Move to archive' }, { separator: true }, { name: 'delete', label: 'Delete conversation', destructive: true }],\r\n messages: () => [\r\n { divider: 'Tuesday 14 October' },\r\n { sender: 'Customer 1', avatar: 'C1', time: '09:12', datetime: '2026-10-14T09:12', text: 'The supplier dropped off two worktop samples at the workshop. Photo attached.',\r\n attachments: [{ kind: 'image', href: '#samples.jpg', alt: 'Two worktop samples on the workbench', art: 6, caption: 'samples.jpg · 2.1 MB' }] },\r\n { sender: 'Customer 1', avatar: 'C1', time: '09:13', datetime: '2026-10-14T09:13', continued: true,\r\n html: '<p>Which one should we order: <strong>Calacatta matt</strong> or <strong>Nero Marquina polished</strong>? The cutting slot is Friday.</p>' },\r\n { direction: 'out', avatar: 'C6', time: '09:20', datetime: '2026-10-14T09:20', status: 'read', text: 'Calacatta matt, 20 mm. I\\'ll send the updated quote to the client today.',\r\n attachments: [{ name: 'Quote kitchen Project 1 v2.pdf', size: '1.2 MB', href: '#quote.pdf' }], actions: [{ name: 'delete', label: 'Delete this message', destructive: true }] },\r\n { divider: 'Today' },\r\n { sender: 'Customer 1', avatar: 'C1', time: '10:02', datetime: '2026-10-24T10:02', text: 'Client signed. Can you confirm the edge profile before 16:00?' },\r\n ],\r\n scrollLabel: 'Messages',\r\n live: true,\r\n busyTitle: 'Sending message…',\r\n busyText: 'Please wait, do not close this conversation.',\r\n placeholder: 'Type your reply…',\r\n composerLabel: 'Reply',\r\n tools: () => ['attach', 'emoji'],\r\n hint: 'Ctrl + Enter to send',\r\n },\r\n)\r\nconst emit = defineEmits<{ menu: [name: string]; tool: [name: 'attach' | 'emoji'] }>()\r\nconst auto = useUid('oc-thread')\r\nconst base = props.id ?? auto\r\nconst list = ref<MessageListItem[]>([...props.messages])\r\nconst sending = ref(false)\r\nwatch(() => props.messages, (m) => (list.value = [...m]))\r\nconst isOut = (m?: MessageListItem): m is MessageData => !!m && !('divider' in m) && m.direction === 'out'\r\n\r\nasync function send(e: Event) {\r\n const form = e.target as HTMLFormElement\r\n const field = form.elements.namedItem('message') as HTMLTextAreaElement\r\n const text = field.value.trim()\r\n if (!text) return\r\n sending.value = true\r\n try { await props.onSend?.(text) } catch { sending.value = false; return }\r\n if (!props.manual) {\r\n const l = list.value\r\n const mine = props.me ?? [...l].reverse().find(isOut)?.avatar ?? 'Me'\r\n list.value = [...l, { direction: 'out', avatar: mine, continued: isOut(l[l.length - 1]), text, time: new Date().toTimeString().slice(0, 5), status: 'sent' }]\r\n }\r\n field.value = ''\r\n sending.value = false\r\n field.focus()\r\n}\r\nfunction ctrlEnter(e: KeyboardEvent) {\r\n if (e.key !== 'Enter' || !(e.ctrlKey || e.metaKey)) return\r\n e.preventDefault()\r\n ;(e.currentTarget as HTMLFormElement).requestSubmit()\r\n}\r\n</script>\r\n\r\n<template>\r\n <section :class=\"['oc-message-thread', plain && 'oc-message-thread--plain']\" :aria-labelledby=\"`${base}-title`\" :aria-busy=\"busy || sending ? 'true' : undefined\">\r\n <header class=\"oc-message-thread__header\">\r\n <slot name=\"back\" />\r\n <div class=\"oc-message-thread__heading\">\r\n <h3 :id=\"`${base}-title`\" class=\"oc-message-thread__title\">{{ title }}</h3>\r\n <p v-if=\"project || meta\" class=\"oc-message-thread__meta\"><strong v-if=\"project\">{{ project }}</strong><template v-if=\"project && meta\"> · </template>{{ meta }}</p>\r\n </div>\r\n <div v-if=\"participants.length\" class=\"oc-avatar-group oc-message-thread__people\" :aria-label=\"`${participants.length} participants`\">\r\n <span v-for=\"(p, i) in participants\" :key=\"i\" class=\"oc-avatar\" :title=\"p.name\">{{ p.initials }}</span>\r\n </div>\r\n <div v-if=\"status || menu\" class=\"oc-message-thread__actions\">\r\n <span v-if=\"status\" :class=\"['oc-badge', status.variant && `oc-badge--${status.variant}`]\">{{ status.label }}</span>\r\n <template v-if=\"menu\">\r\n <button type=\"button\" class=\"oc-message-thread__icon-btn\" :popovertarget=\"`${base}-menu`\" aria-label=\"Conversation actions\"><svg data-icon=\"mdi:dots-vertical\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M12 16a2 2 0 0 1 2 2a2 2 0 0 1-2 2a2 2 0 0 1-2-2a2 2 0 0 1 2-2m0-6a2 2 0 0 1 2 2a2 2 0 0 1-2 2a2 2 0 0 1-2-2a2 2 0 0 1 2-2m0-6a2 2 0 0 1 2 2a2 2 0 0 1-2 2a2 2 0 0 1-2-2a2 2 0 0 1 2-2\"/></svg></button>\r\n <div :id=\"`${base}-menu`\" class=\"oc-dropdown-menu\" popover role=\"menu\">\r\n <template v-for=\"(m, i) in menu\" :key=\"i\">\r\n <div v-if=\"'separator' in m\" class=\"oc-dropdown-separator\" role=\"separator\"></div>\r\n <button v-else type=\"button\" :class=\"['oc-dropdown-item', m.destructive && 'oc-dropdown-item--destructive']\" role=\"menuitem\" @click=\"emit('menu', m.name)\">{{ m.label }}</button>\r\n </template>\r\n </div>\r\n </template>\r\n </div>\r\n </header>\r\n <div class=\"oc-message-thread__scroll\" tabindex=\"0\" role=\"log\" :aria-label=\"scrollLabel\" :aria-live=\"live ? 'polite' : undefined\">\r\n <OcMessageList :items=\"list\" :log=\"false\" />\r\n </div>\r\n <div class=\"oc-message-thread__footer\">\r\n <p v-if=\"note\" class=\"oc-message-thread__note\">{{ note }}</p>\r\n <slot v-else name=\"composer\">\r\n <form :class=\"['oc-chat-composer', inline && 'oc-chat-composer--inline']\" action=\"#\" :aria-label=\"composerLabel\" @submit.prevent=\"send\" @keydown=\"ctrlEnter\">\r\n <label class=\"oc-visually-hidden\" :for=\"`${base}-input`\">Message</label>\r\n <textarea :id=\"`${base}-input`\" class=\"oc-chat-composer__input\" name=\"message\" rows=\"1\" :placeholder=\"placeholder\" required></textarea>\r\n <div class=\"oc-chat-composer__bar\">\r\n <div v-if=\"tools.length\" class=\"oc-chat-composer__tools\">\r\n <button v-if=\"tools.includes('attach')\" type=\"button\" class=\"oc-chat-composer__tool\" aria-label=\"Attach a file\" @click=\"emit('tool', 'attach')\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M16.5 6v11.5a4 4 0 0 1-4 4a4 4 0 0 1-4-4V5a2.5 2.5 0 0 1 2.5-2.5A2.5 2.5 0 0 1 13.5 5v10.5a1 1 0 0 1-1 1a1 1 0 0 1-1-1V6H10v9.5a2.5 2.5 0 0 0 2.5 2.5a2.5 2.5 0 0 0 2.5-2.5V5a4 4 0 0 0-4-4a4 4 0 0 0-4 4v12.5a5.5 5.5 0 0 0 5.5 5.5a5.5 5.5 0 0 0 5.5-5.5V6z\"/></svg></button>\r\n <button v-if=\"tools.includes('emoji')\" type=\"button\" class=\"oc-chat-composer__tool\" aria-label=\"Insert emoji\" @click=\"emit('tool', 'emoji')\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M20 12a8 8 0 0 0-8-8a8 8 0 0 0-8 8a8 8 0 0 0 8 8a8 8 0 0 0 8-8m2 0a10 10 0 0 1-10 10A10 10 0 0 1 2 12A10 10 0 0 1 12 2a10 10 0 0 1 10 10m-12-3.5c0 .8-.7 1.5-1.5 1.5S7 9.3 7 8.5S7.7 7 8.5 7s1.5.7 1.5 1.5m7 0c0 .8-.7 1.5-1.5 1.5S14 9.3 14 8.5S14.7 7 15.5 7s1.5.7 1.5 1.5m-5 9.73c-1.75 0-3.29-.73-4.19-1.81L9.23 14c.45.72 1.52 1.23 2.77 1.23s2.32-.51 2.77-1.23l1.42 1.42c-.9 1.08-2.44 1.81-4.19 1.81\"/></svg></button>\r\n </div>\r\n <span v-if=\"hint\" class=\"oc-chat-composer__hint\">{{ hint }}</span>\r\n <button type=\"submit\" class=\"oc-chat-composer__send\" aria-label=\"Send\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M2 21l21-9L2 3v7l15 2l-15 2z\"/></svg></button>\r\n </div>\r\n </form>\r\n </slot>\r\n </div>\r\n <div v-if=\"busyTitle\" class=\"oc-message-thread__busy\" role=\"status\">\r\n <span class=\"oc-spinner oc-spinner--lg\" aria-hidden=\"true\"></span>\r\n <strong>{{ busyTitle }}</strong>\r\n <span v-if=\"busyText\">{{ busyText }}</span>\r\n </div>\r\n </section>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMeterRow.vue | Map: props -> level from the percentage -> row markup -->\r\n<script setup lang=\"ts\">\r\n/** Usage line: label, percentage and amount, a colored bar (warn from 75, critical from 90) and the reset line. */\r\nimport { computed } from 'vue'\r\n\r\nconst props = defineProps<{ label: string; percent: number; value?: string; reset?: string; level?: 'ok' | 'warn' | 'critical' }>()\r\nconst pct = computed(() => Math.max(0, Math.min(100, Math.round(props.percent))))\r\nconst tone = computed(() => props.level ?? (pct.value >= 90 ? 'critical' : pct.value >= 75 ? 'warn' : 'ok'))\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-meter-row\" :data-level=\"tone === 'ok' ? undefined : tone\" :style=\"{ '--oc-meter': `${pct}%` }\">\r\n <span class=\"oc-meter-row__label\">{{ label }}</span>\r\n <span class=\"oc-meter-row__value\"><strong>{{ pct }}%</strong><template v-if=\"value\"> · {{ value }}</template></span>\r\n <span class=\"oc-meter-row__bar\" role=\"meter\" aria-valuemin=\"0\" aria-valuemax=\"100\" :aria-valuenow=\"pct\" :aria-label=\"label\"></span>\r\n <span v-if=\"reset\" class=\"oc-meter-row__reset\">{{ reset }}</span>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Modal on a native <dialog> opened with showModal(). v-model:open controls it; Esc / backdrop /\r\n * close() update the model. Slots: header (replaces title + description), default (body),\r\n * footer (scoped: { close }). Classes: .oc-modal, .oc-modal-content(--sm/--lg/--xl/--full), -header, -title,\r\n * -description, -body, -footer.\r\n */\r\nimport { ref } from 'vue'\r\nimport { useDialog } from '../composables/useDialog'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n title?: string\r\n description?: string\r\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full'\r\n closedby?: 'any' | 'closerequest' | 'none'\r\n }>(),\r\n { size: 'md', closedby: 'any' },\r\n)\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst el = ref<HTMLDialogElement | null>(null)\r\nconst { onClose } = useDialog(open, el)\r\nconst titleId = useUid('oc-modal-title')\r\nconst close = () => (open.value = false)\r\ndefineExpose({ close })\r\n</script>\r\n\r\n<template>\r\n <dialog ref=\"el\" class=\"oc-modal\" :closedby=\"closedby\" :aria-labelledby=\"title ? titleId : undefined\" @close=\"onClose\">\r\n <div :class=\"['oc-modal-content', size !== 'md' && `oc-modal-content--${size}`]\">\r\n <div v-if=\"title || description || $slots.header\" class=\"oc-modal-header\">\r\n <slot name=\"header\">\r\n <h2 v-if=\"title\" :id=\"titleId\" class=\"oc-modal-title\">{{ title }}</h2>\r\n <p v-if=\"description\" class=\"oc-modal-description\">{{ description }}</p>\r\n </slot>\r\n </div>\r\n <div v-if=\"$slots.default\" class=\"oc-modal-body\"><slot /></div>\r\n <div v-if=\"$slots.footer\" class=\"oc-modal-footer\"><slot name=\"footer\" :close=\"close\" /></div>\r\n </div>\r\n </dialog>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcNameCard.vue | Map: props -> details (head, body slot) -> rename event on mount -->\r\n<script setup lang=\"ts\">\r\n/** Name card: name, rename pencil (when renamable), meta, amount and an actions slot; default slot = content. Emits rename. */\r\nimport { onMounted, useTemplateRef } from 'vue'\r\nimport { bindNameCard } from '../../../ui/src/form-extras.js'\r\n\r\nconst props = withDefaults(defineProps<{ name: string; amount?: string; meta?: string; renamable?: boolean; total?: boolean; open?: boolean }>(), { renamable: false, total: false, open: false })\r\nconst emit = defineEmits<{ rename: [name: string] }>()\r\nconst root = useTemplateRef<HTMLDetailsElement>('root')\r\nonMounted(() => {\r\n if (!root.value || !props.renamable) return\r\n bindNameCard(root.value)\r\n root.value.addEventListener('oc-namecard-rename', (e) => emit('rename', (e as CustomEvent<{ name: string }>).detail.name))\r\n})\r\n</script>\r\n\r\n<template>\r\n <details ref=\"root\" :class=\"['oc-name-card', total && 'oc-name-card--total']\" :open=\"open\">\r\n <summary class=\"oc-name-card__head\">\r\n <span class=\"oc-name-card__title\">{{ name }}</span>\r\n <button v-if=\"renamable\" type=\"button\" class=\"oc-btn oc-btn--plain\" data-oc-rename :aria-label=\"`Rename ${name}`\" title=\"Rename\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z\" /></svg></button>\r\n <span v-if=\"meta\" class=\"oc-name-card__meta\">{{ meta }}</span>\r\n <span v-if=\"amount\" class=\"oc-name-card__amount\">{{ amount }}</span>\r\n <span v-if=\"$slots.actions\" class=\"oc-name-card__actions\"><slot name=\"actions\" /></span>\r\n </summary>\r\n <div class=\"oc-name-card__body\"><slot /></div>\r\n </details>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * The <ul class=\"oc-navmenu\"> of the navigation menu, without the surrounding <nav>\r\n * (used by OcNavmenu and by blocks that provide their own <nav>).\r\n * Pass `items`, or put your own <li> elements in the default slot.\r\n * Classes: .oc-navmenu, .oc-navmenu-link(--caret) with aria-current=\"page\"\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface NavmenuItem {\r\n label: string\r\n href?: string\r\n current?: boolean\r\n /** Dropdown entries; turns the item into a popover trigger. */\r\n children?: { label: string; href: string }[]\r\n /** Heading inside the dropdown. */\r\n heading?: string\r\n}\r\nwithDefaults(defineProps<{ items?: NavmenuItem[] }>(), { items: () => [] })\r\nconst base = useUid('oc-navmenu')\r\n</script>\r\n\r\n<template>\r\n <ul class=\"oc-navmenu\">\r\n <slot>\r\n <li v-for=\"(item, i) in items\" :key=\"i\">\r\n <template v-if=\"item.children?.length\">\r\n <button class=\"oc-navmenu-link oc-navmenu-link--caret\" type=\"button\" :popovertarget=\"`${base}-${i}`\">{{ item.label }}</button>\r\n <div :id=\"`${base}-${i}`\" class=\"oc-dropdown-menu\" popover>\r\n <div v-if=\"item.heading\" class=\"oc-dropdown-label\">{{ item.heading }}</div>\r\n <a v-for=\"child in item.children\" :key=\"child.href + child.label\" class=\"oc-dropdown-item\" :href=\"child.href\">{{ child.label }}</a>\r\n </div>\r\n </template>\r\n <a v-else class=\"oc-navmenu-link\" :href=\"item.href ?? '#'\" :aria-current=\"item.current ? 'page' : undefined\">{{ item.label }}</a>\r\n </li>\r\n </slot>\r\n </ul>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Horizontal navigation links with optional dropdown children, wrapped in a <nav>.\r\n * Pass `items` (see OcNavmenuList) or put your own <li> elements in the default slot.\r\n */\r\nimport OcNavmenuList, { type NavmenuItem } from './OcNavmenuList.vue'\r\n\r\nwithDefaults(defineProps<{ items?: NavmenuItem[]; label?: string }>(), {\r\n items: () => [],\r\n label: 'Navigation',\r\n})\r\n</script>\r\n\r\n<template>\r\n <nav :aria-label=\"label\">\r\n <OcNavmenuList :items=\"items\"><slot /></OcNavmenuList>\r\n </nav>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcNextTeaser.vue | Map: props -> a.oc-next-teaser -> label -> name (mark slot) -> tagline -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * \"Next product\" teaser card. Slots: mark (e.g. an OcProductMark size=\"sm\"), name, tagline.\r\n * Classes: .oc-next-teaser (--prev), __label, __name, __tagline\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n href: string\r\n label?: string\r\n name?: string\r\n tagline?: string\r\n prev?: boolean\r\n }>(),\r\n { label: 'Next product' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <a :class=\"['oc-next-teaser', prev && 'oc-next-teaser--prev']\" :href=\"href\">\r\n <span v-if=\"label\" class=\"oc-next-teaser__label\">{{ label }}</span>\r\n <span class=\"oc-next-teaser__name\"><slot name=\"mark\" /><slot name=\"name\">{{ name }}</slot></span>\r\n <span v-if=\"tagline || $slots.tagline\" class=\"oc-next-teaser__tagline\"><slot name=\"tagline\">{{ tagline }}</slot></span>\r\n </a>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcNumberInput.vue | Map: props + model -> step helper -> template (minus, number field, plus) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Number field with - / + buttons. v-model: number | null. Buttons disable themselves at min / max.\r\n * Same markup as packages/ui/snippets/number-input.html (no page script needed here).\r\n * class/style stay on the frame, other attributes (id, name, aria-label) go to the input.\r\n */\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nconst props = withDefaults(\r\n defineProps<{ min?: number; max?: number; step?: number; size?: 'sm' | 'md'; block?: boolean; error?: boolean; disabled?: boolean; decrementLabel?: string; incrementLabel?: string }>(),\r\n { step: 1, size: 'md', decrementLabel: 'Decrease', incrementLabel: 'Increase' },\r\n)\r\nconst model = defineModel<number | null>({ default: null })\r\nconst { root, control } = useAttrsSplit()\r\n\r\n/** Add one step, keep the result inside min/max and drop float noise (0.1 + 0.2). */\r\nfunction stepBy(dir: 1 | -1) {\r\n const next = Math.round(((model.value ?? props.min ?? 0) + dir * props.step) * 1e6) / 1e6\r\n model.value = Math.min(props.max ?? Infinity, Math.max(props.min ?? -Infinity, next))\r\n}\r\n\r\nfunction onInput(e: Event) {\r\n const raw = (e.target as HTMLInputElement).value\r\n model.value = raw === '' ? null : Number(raw)\r\n}\r\n</script>\r\n\r\n<template>\r\n <div v-bind=\"root\" :class=\"['oc-number-input', size === 'sm' && 'oc-number-input--sm', block && 'oc-number-input--block', error && 'oc-number-input--error']\">\r\n <button class=\"oc-number-input-step\" type=\"button\" :aria-label=\"decrementLabel\" :disabled=\"disabled || (min != null && model != null && model <= min)\" @click=\"stepBy(-1)\">−</button>\r\n <input\r\n v-bind=\"control\"\r\n class=\"oc-number-input-field\"\r\n type=\"number\"\r\n :min=\"min\"\r\n :max=\"max\"\r\n :step=\"step\"\r\n :disabled=\"disabled\"\r\n :aria-invalid=\"error ? 'true' : undefined\"\r\n :value=\"model ?? ''\"\r\n @input=\"onInput\"\r\n />\r\n <button class=\"oc-number-input-step\" type=\"button\" :aria-label=\"incrementLabel\" :disabled=\"disabled || (max != null && model != null && model >= max)\" @click=\"stepBy(1)\">+</button>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * One-time code field drawn as separate cells on a single real input.\r\n * v-model: the code string. `length` sets maxlength and --oc-otp-length. `invalid` sets aria-invalid.\r\n * Emits `complete` with the code when it reaches `length`.\r\n */\r\nimport { computed, watch } from 'vue'\r\n\r\nconst props = withDefaults(defineProps<{ length?: number; invalid?: boolean; numeric?: boolean }>(), {\r\n length: 6,\r\n numeric: true,\r\n})\r\nconst emit = defineEmits<{ complete: [code: string] }>()\r\nconst model = defineModel<string>({ default: '' })\r\nconst style = computed(() => ({ '--oc-otp-length': String(props.length) }))\r\n\r\nwatch(model, (code) => {\r\n if (code.length === props.length) emit('complete', code)\r\n})\r\n</script>\r\n\r\n<template>\r\n <input\r\n v-model=\"model\"\r\n class=\"oc-otp\"\r\n type=\"text\"\r\n :inputmode=\"numeric ? 'numeric' : 'text'\"\r\n autocomplete=\"one-time-code\"\r\n :maxlength=\"length\"\r\n :pattern=\"numeric ? '[0-9]*' : undefined\"\r\n :aria-invalid=\"invalid ? 'true' : undefined\"\r\n :style=\"style\"\r\n />\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcPageHeader.vue | Map: header -> back slot -> main (text: title, subtitle, meta slot | actions slot) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Title row of an app page (size container: actions sit next to the title from a 36rem header width).\r\n * Slots: back, title, subtitle, meta, actions.\r\n * Classes: .oc-page-header(--bordered/--sticky/--sm), -back, -main, -text, -title, -subtitle, -meta, -actions\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n title?: string\r\n subtitle?: string\r\n /** Heading level of the title (default 1). */\r\n level?: 1 | 2 | 3\r\n bordered?: boolean\r\n sticky?: boolean\r\n size?: 'sm'\r\n }>(),\r\n { level: 1 },\r\n)\r\n</script>\r\n\r\n<template>\r\n <header :class=\"['oc-page-header', bordered && 'oc-page-header--bordered', sticky && 'oc-page-header--sticky', size && `oc-page-header--${size}`]\">\r\n <div v-if=\"$slots.back\" class=\"oc-page-header-back\"><slot name=\"back\" /></div>\r\n <div class=\"oc-page-header-main\">\r\n <div class=\"oc-page-header-text\">\r\n <component :is=\"`h${level}`\" class=\"oc-page-header-title\"><slot name=\"title\">{{ title }}</slot></component>\r\n <p v-if=\"$slots.subtitle || subtitle\" class=\"oc-page-header-subtitle\"><slot name=\"subtitle\">{{ subtitle }}</slot></p>\r\n <div v-if=\"$slots.meta\" class=\"oc-page-header-meta\"><slot name=\"meta\" /></div>\r\n </div>\r\n <div v-if=\"$slots.actions\" class=\"oc-page-header-actions\"><slot name=\"actions\" /></div>\r\n </div>\r\n </header>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Pagination. v-model = current page (1-based), `pages` = page count. Links point to\r\n * `hrefFor(page)` (default ?page=n); without a custom hrefFor, clicks update the model instead of navigating.\r\n */\r\nconst props = withDefaults(\r\n defineProps<{\r\n pages: number\r\n hrefFor?: (page: number) => string\r\n label?: string\r\n }>(),\r\n { label: 'Pagination' },\r\n)\r\nconst page = defineModel<number>({ default: 1 })\r\n\r\nfunction go(e: Event, n: number) {\r\n if (!props.hrefFor) e.preventDefault()\r\n page.value = n\r\n}\r\n</script>\r\n\r\n<template>\r\n <nav class=\"oc-pagination\" :aria-label=\"label\">\r\n <a\r\n v-for=\"n in pages\"\r\n :key=\"n\"\r\n class=\"oc-pagination-item\"\r\n :href=\"hrefFor ? hrefFor(n) : `?page=${n}`\"\r\n :aria-current=\"n === page ? 'page' : undefined\"\r\n @click=\"go($event, n)\"\r\n >{{ n }}</a>\r\n </nav>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Password field with show/hide button (aria-pressed reflects the state). v-model.\r\n * class/style stay on the wrapper, every other attribute (id, name, autocomplete...) goes to the input.\r\n */\r\nimport { ref } from 'vue'\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nwithDefaults(defineProps<{ showLabel?: string; hideLabel?: string; toggleLabel?: string }>(), {\r\n showLabel: 'Show',\r\n hideLabel: 'Hide',\r\n toggleLabel: 'Toggle password visibility',\r\n})\r\nconst model = defineModel<string>({ default: '' })\r\nconst { root, control } = useAttrsSplit()\r\nconst visible = ref(false)\r\n</script>\r\n\r\n<template>\r\n <div v-bind=\"root\" class=\"oc-input-reveal\">\r\n <input v-bind=\"control\" v-model=\"model\" class=\"oc-input\" :type=\"visible ? 'text' : 'password'\" />\r\n <button class=\"oc-input-reveal-button\" type=\"button\" :aria-pressed=\"visible ? 'true' : 'false'\" :aria-label=\"toggleLabel\" @click=\"visible = !visible\">\r\n {{ visible ? hideLabel : showLabel }}\r\n </button>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcPasswordRequirements.vue | Map: rule type + defaults -> props -> template (live list, --met per rule) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Live password rule checklist. Pass the password; each rule turns green (--met) when it passes.\r\n * Same markup as packages/ui/snippets/password-requirements.html.\r\n */\r\nexport interface PasswordRequirementRule {\r\n label: string\r\n /** True when the password meets the rule. */\r\n test: (password: string) => boolean\r\n}\r\n\r\nwithDefaults(defineProps<{ password: string; rules?: PasswordRequirementRule[]; inline?: boolean; hideWhenEmpty?: boolean }>(), {\r\n // Common rules: length, uppercase, number, symbol.\r\n rules: () => [\r\n { label: 'At least 8 characters', test: (p: string) => p.length >= 8 },\r\n { label: 'One uppercase letter', test: (p: string) => /[A-Z]/.test(p) },\r\n { label: 'One number', test: (p: string) => /[0-9]/.test(p) },\r\n { label: 'One symbol', test: (p: string) => /[^A-Za-z0-9]/.test(p) },\r\n ],\r\n})\r\n</script>\r\n\r\n<template>\r\n <ul v-if=\"!hideWhenEmpty || password\" :class=\"['oc-password-requirements', inline && 'oc-password-requirements--inline']\" aria-live=\"polite\">\r\n <li v-for=\"(rule, i) in rules\" :key=\"i\" :class=\"['oc-password-requirement', rule.test(password) && 'oc-password-requirement--met']\">{{ rule.label }}</li>\r\n </ul>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcPhoneInput.vue | Map: props + model -> split / group helpers -> template (dial select + tel input) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Phone field: dial code select + national number. v-model = full value without spaces (\"+32470123456\").\r\n * Same markup as packages/ui/snippets/phone-input.html. JS only groups digits (\"470 12 34 56\").\r\n * class/style stay on the frame, other attributes (id, name, placeholder, aria-*) go to the number input.\r\n */\r\nimport { computed, ref } from 'vue'\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\nexport interface PhoneInputCountry {\r\n dial: string\r\n label: string\r\n}\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nconst props = withDefaults(\r\n defineProps<{ countries?: PhoneInputCountry[]; defaultDial?: string; size?: 'sm' | 'md'; error?: boolean; disabled?: boolean; dialLabel?: string }>(),\r\n {\r\n countries: () => [\r\n { dial: '+32', label: 'BE +32' },\r\n { dial: '+31', label: 'NL +31' },\r\n { dial: '+33', label: 'FR +33' },\r\n { dial: '+49', label: 'DE +49' },\r\n ],\r\n size: 'md',\r\n dialLabel: 'Country code',\r\n },\r\n)\r\nconst model = defineModel<string>({ default: '' })\r\nconst { root, control } = useAttrsSplit()\r\n\r\n// Longest dial code that the value starts with, e.g. \"+32\" from \"+32470...\".\r\nconst parsed = computed(() => {\r\n const match = [...props.countries].sort((a, b) => b.dial.length - a.dial.length).find((c) => model.value.startsWith(c.dial))\r\n return match ? { dial: match.dial, national: model.value.slice(match.dial.length) } : { dial: '', national: model.value.replace(/^\\+/, '') }\r\n})\r\n// Remember the chosen dial code while the number is still empty.\r\nconst dialState = ref(parsed.value.dial || props.defaultDial || props.countries[0]?.dial || '')\r\nconst dial = computed(() => parsed.value.dial || dialState.value)\r\n\r\n/** \"470123456\" -> \"470 12 34 56\": a group of 3, then pairs. */\r\nconst grouped = computed(() => {\r\n const d = parsed.value.national.replace(/\\D/g, '')\r\n return [d.slice(0, 3), ...(d.slice(3).match(/.{1,2}/g) ?? [])].filter(Boolean).join(' ')\r\n})\r\n\r\nfunction emit(nextDial: string, national: string) {\r\n dialState.value = nextDial\r\n const digits = national.replace(/\\D/g, '')\r\n model.value = digits ? nextDial + digits : ''\r\n}\r\n</script>\r\n\r\n<template>\r\n <div v-bind=\"root\" :class=\"['oc-phone-input', size === 'sm' && 'oc-phone-input--sm', error && 'oc-phone-input--error']\">\r\n <select class=\"oc-phone-input-dial\" :aria-label=\"dialLabel\" :value=\"dial\" :disabled=\"disabled\" @change=\"emit(($event.target as HTMLSelectElement).value, parsed.national)\">\r\n <option v-for=\"c in countries\" :key=\"c.dial\" :value=\"c.dial\">{{ c.label }}</option>\r\n </select>\r\n <input\r\n v-bind=\"control\"\r\n class=\"oc-phone-input-number\"\r\n type=\"tel\"\r\n inputmode=\"tel\"\r\n autocomplete=\"tel-national\"\r\n :aria-invalid=\"error ? 'true' : undefined\"\r\n :disabled=\"disabled\"\r\n :value=\"grouped\"\r\n @input=\"emit(dial, ($event.target as HTMLInputElement).value)\"\r\n />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Floating panel on the popover attribute + anchor positioning. Trigger = `trigger` slot (scoped: { id })\r\n * or a default outline button with `label`. Default slot = panel content. Classes: .oc-popover(--sm/--lg),\r\n * -title, -text. Attributes land on the panel.\r\n */\r\nimport { useAttrs } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nwithDefaults(defineProps<{ label?: string; title?: string; text?: string; size?: 'sm' | 'md' | 'lg' }>(), { size: 'md' })\r\nconst attrs = useAttrs()\r\nconst id = (attrs.id as string | undefined) ?? useUid('oc-popover')\r\n</script>\r\n\r\n<template>\r\n <slot name=\"trigger\" :id=\"id\">\r\n <button class=\"oc-btn oc-btn--outline\" type=\"button\" :popovertarget=\"id\">{{ label }}</button>\r\n </slot>\r\n <div v-bind=\"attrs\" :id=\"id\" :class=\"['oc-popover', size !== 'md' && `oc-popover--${size}`]\" popover>\r\n <h3 v-if=\"title\" class=\"oc-popover-title\">{{ title }}</h3>\r\n <p v-if=\"text\" class=\"oc-popover-text\">{{ text }}</p>\r\n <slot />\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcPrice.vue | Map: props -> formatted amounts -> main line, note, alternative -->\r\n<script setup lang=\"ts\">\r\n/** A price with old price, discount, VAT note and the other amount (same markup as snippets/price.html). */\r\nconst props = withDefaults(defineProps<{\r\n amount: number | string\r\n old?: number | string\r\n discount?: string\r\n note?: string\r\n alt?: string\r\n currency?: string\r\n locale?: string\r\n size?: 'sm' | 'md' | 'lg'\r\n sale?: boolean\r\n inline?: boolean\r\n end?: boolean\r\n}>(), { currency: 'EUR', locale: 'nl-BE', size: 'md' })\r\nconst format = (v: number | string) => (typeof v === 'number' ? new Intl.NumberFormat(props.locale, { style: 'currency', currency: props.currency }).format(v) : v)\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-price', size !== 'md' && `oc-price--${size}`, sale && 'oc-price--sale', inline && 'oc-price--inline', end && 'oc-price--end']\">\r\n <div class=\"oc-price__main\">\r\n <span class=\"oc-price__amount\">{{ format(amount) }}</span>\r\n <s v-if=\"old != null\" class=\"oc-price__old\">{{ format(old) }}</s>\r\n <span v-if=\"discount\" class=\"oc-badge oc-badge--destructive\">{{ discount }}</span>\r\n </div>\r\n <span v-if=\"note\" class=\"oc-price__note\">{{ note }}</span>\r\n <span v-if=\"alt\" class=\"oc-price__alt\">{{ alt }}</span>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcPriceCard.vue | Map: props -> head -> toggle (radios) -> monthly / yearly / lifetime price -> features -> cta slot -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Plan card with a CSS-only monthly / yearly switch (radio + :has). Slots: cta, features (replaces the list items).\r\n * Classes: .oc-price-card (--featured), __head, __name, __discount, __desc, __toggle, __price(--monthly/--yearly),\r\n * __amount, __period, __was, __note, __features, __feature(--excluded), __cta\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface PriceCardFeature {\r\n label: string\r\n excluded?: boolean\r\n}\r\nexport interface PriceCardPrice {\r\n amount: string\r\n period?: string\r\n was?: string\r\n note?: string\r\n}\r\nwithDefaults(\r\n defineProps<{\r\n name: string\r\n description?: string\r\n discount?: string\r\n monthly: PriceCardPrice\r\n yearly?: PriceCardPrice\r\n /** Optional third option, e.g. a one-time price. Needs `yearly`. */\r\n lifetime?: PriceCardPrice\r\n defaultPeriod?: 'monthly' | 'yearly' | 'lifetime'\r\n features?: PriceCardFeature[]\r\n featured?: boolean\r\n monthlyLabel?: string\r\n yearlyLabel?: string\r\n lifetimeLabel?: string\r\n }>(),\r\n { defaultPeriod: 'monthly', features: () => [], monthlyLabel: 'Monthly', yearlyLabel: 'Yearly', lifetimeLabel: 'Lifetime' },\r\n)\r\n// Every card needs its own radio group name.\r\nconst group = useUid('oc-price')\r\n</script>\r\n\r\n<template>\r\n <article :class=\"['oc-price-card', featured && 'oc-price-card--featured']\">\r\n <div class=\"oc-price-card__head\">\r\n <h3 class=\"oc-price-card__name\">{{ name }}</h3>\r\n <span v-if=\"discount\" class=\"oc-price-card__discount\">{{ discount }}</span>\r\n </div>\r\n <p v-if=\"description\" class=\"oc-price-card__desc\">{{ description }}</p>\r\n <div v-if=\"yearly\" class=\"oc-segmented oc-price-card__toggle\" role=\"radiogroup\" aria-label=\"Billing period\">\r\n <label class=\"oc-segmented-item\"><input type=\"radio\" :name=\"group\" value=\"monthly\" :checked=\"defaultPeriod === 'monthly'\" /> {{ monthlyLabel }}</label>\r\n <label class=\"oc-segmented-item\"><input type=\"radio\" :name=\"group\" value=\"yearly\" :checked=\"defaultPeriod === 'yearly'\" /> {{ yearlyLabel }}</label>\r\n <label v-if=\"lifetime\" class=\"oc-segmented-item\"><input type=\"radio\" :name=\"group\" value=\"lifetime\" :checked=\"defaultPeriod === 'lifetime'\" /> {{ lifetimeLabel }}</label>\r\n </div>\r\n <p class=\"oc-price-card__price oc-price-card__price--monthly\">\r\n <span class=\"oc-price-card__amount\">{{ monthly.amount }}</span>\r\n <span v-if=\"monthly.period\" class=\"oc-price-card__period\">{{ monthly.period }}</span>\r\n <s v-if=\"monthly.was\" class=\"oc-price-card__was\">{{ monthly.was }}</s>\r\n <span v-if=\"monthly.note\" class=\"oc-price-card__note\">{{ monthly.note }}</span>\r\n </p>\r\n <p v-if=\"yearly\" class=\"oc-price-card__price oc-price-card__price--yearly\">\r\n <span class=\"oc-price-card__amount\">{{ yearly.amount }}</span>\r\n <span v-if=\"yearly.period\" class=\"oc-price-card__period\">{{ yearly.period }}</span>\r\n <s v-if=\"yearly.was\" class=\"oc-price-card__was\">{{ yearly.was }}</s>\r\n <span v-if=\"yearly.note\" class=\"oc-price-card__note\">{{ yearly.note }}</span>\r\n </p>\r\n <p v-if=\"yearly && lifetime\" class=\"oc-price-card__price oc-price-card__price--lifetime\">\r\n <span class=\"oc-price-card__amount\">{{ lifetime.amount }}</span>\r\n <span v-if=\"lifetime.period\" class=\"oc-price-card__period\">{{ lifetime.period }}</span>\r\n <s v-if=\"lifetime.was\" class=\"oc-price-card__was\">{{ lifetime.was }}</s>\r\n <span v-if=\"lifetime.note\" class=\"oc-price-card__note\">{{ lifetime.note }}</span>\r\n </p>\r\n <ul v-if=\"features.length || $slots.features\" class=\"oc-price-card__features\">\r\n <slot name=\"features\">\r\n <li v-for=\"(f, i) in features\" :key=\"i\" :class=\"['oc-price-card__feature', f.excluded && 'oc-price-card__feature--excluded']\">{{ f.label }}</li>\r\n </slot>\r\n </ul>\r\n <slot name=\"cta\" />\r\n </article>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcProductMark.vue | Map: props (size, accent, soft, glow, cover) -> span.oc-product-mark -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Squircle app-icon tile in the accent gradient. Slot: glyph, <img alt=\"\"> or SVG. Decorative (aria-hidden).\r\n * Classes: .oc-product-mark (--sm, --lg, --xl, --soft, --glow, --cover) + .oc-accent--*\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n size?: 'sm' | 'default' | 'lg' | 'xl'\r\n accent?: 'blue' | 'cyan' | 'green' | 'orange' | 'red' | 'violet' | 'yellow'\r\n soft?: boolean\r\n glow?: boolean\r\n cover?: boolean\r\n }>(),\r\n { size: 'default' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <span\r\n :class=\"[\r\n 'oc-product-mark',\r\n size !== 'default' && `oc-product-mark--${size}`,\r\n soft && 'oc-product-mark--soft',\r\n glow && 'oc-product-mark--glow',\r\n cover && 'oc-product-mark--cover',\r\n accent && `oc-accent--${accent}`,\r\n ]\"\r\n aria-hidden=\"true\"\r\n ><slot /></span>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcProjectCard.vue | Map: props -> a.oc-project-card -> frame (bar + shot) -> body -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Portfolio card with a browser-like preview. Without `image` the preview is an accent gradient.\r\n * Slots: type, name, meta, more. Classes: .oc-project-card (--flat), __frame, __bar, __shot, __body, __type, __name, __meta, __more\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n href: string\r\n name?: string\r\n type?: string\r\n meta?: string\r\n more?: string\r\n image?: string\r\n imageAlt?: string\r\n flat?: boolean\r\n }>(),\r\n { more: 'View project', imageAlt: '' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <a :class=\"['oc-project-card', flat && 'oc-project-card--flat']\" :href=\"href\">\r\n <span class=\"oc-project-card__frame\">\r\n <span class=\"oc-project-card__bar\" aria-hidden=\"true\"><i></i><i></i><i></i></span>\r\n <img v-if=\"image\" class=\"oc-project-card__shot\" :src=\"image\" :alt=\"imageAlt\" loading=\"lazy\" />\r\n <span v-else class=\"oc-project-card__shot\" role=\"img\" :aria-label=\"imageAlt || undefined\" :aria-hidden=\"imageAlt ? undefined : 'true'\"></span>\r\n </span>\r\n <span class=\"oc-project-card__body\">\r\n <span v-if=\"type || $slots.type\" class=\"oc-project-card__type\"><slot name=\"type\">{{ type }}</slot></span>\r\n <span class=\"oc-project-card__name\"><slot name=\"name\">{{ name }}</slot></span>\r\n <span v-if=\"meta || $slots.meta\" class=\"oc-project-card__meta\"><slot name=\"meta\">{{ meta }}</slot></span>\r\n <span v-if=\"more\" class=\"oc-project-card__more\"><slot name=\"more\">{{ more }}</slot></span>\r\n </span>\r\n </a>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcProse.vue | Map: props -> wrapper with size modifiers -> default slot (demo article when empty) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Typography for long-form text written without classes (same markup as snippets/prose.html). Slot default = the text\r\n * (put .oc-prose-lead on the intro paragraph); the snippet's demo article when empty. size: compact (widgets, 13 px) | sm | md | lg, full = no max width.\r\n * Classes: .oc-prose(--compact/--sm/--lg/--full), .oc-prose-lead\r\n */\r\nwithDefaults(defineProps<{ size?: 'compact' | 'sm' | 'md' | 'lg'; full?: boolean; as?: 'article' | 'div' | 'section' }>(), { size: 'md', as: 'article' })\r\n</script>\r\n\r\n<template>\r\n <component :is=\"as\" :class=\"['oc-prose', size !== 'md' && `oc-prose--${size}`, full && 'oc-prose--full']\">\r\n <slot>\r\n <h1>Planning a kitchen renovation</h1>\r\n <p class=\"oc-prose-lead\">A new kitchen takes eight to twelve weeks from the first visit to the last cabinet handle. This guide explains every step, so you know what to expect and when we need you.</p>\r\n <h2>Before the first visit</h2>\r\n <p>Collect a few photos of kitchens you like and measure the room roughly. Exact measurements are not needed yet: our site manager does that during the visit. Read the <a href=\"#checklist\">preparation checklist</a> if you want to be fully ready.</p>\r\n <ul>\r\n <li>The <strong>budget range</strong> you have in mind, including appliances</li>\r\n <li>Which walls, doors and windows can move, and which cannot\r\n <ul><li>Load-bearing walls need a structural engineer</li><li>Moving a window needs a permit in most towns</li></ul>\r\n </li>\r\n <li>Appliances you want to keep</li>\r\n </ul>\r\n <figure>\r\n <div class=\"oc-media-art oc-media-art--6\" role=\"img\" aria-label=\"Kitchen with oak fronts and a light stone worktop\"></div>\r\n <figcaption>Project 1: oak fronts with a Calacatta matt worktop, finished in October 2026.</figcaption>\r\n </figure>\r\n <h3>From design to installation</h3>\r\n <ol>\r\n <li>Site visit and measurements (week 1)</li>\r\n <li>Design and quote, with two revision rounds (weeks 2–3)</li>\r\n <li>Order and production of the cabinets (weeks 4–9)</li>\r\n <li>Installation, worktop and finishing (weeks 10–11)</li>\r\n </ol>\r\n <blockquote>\r\n <p>The planning was clear from day one. We always knew who was coming and when, and the kitchen was ready a week early.</p>\r\n <footer>— Customer 8, client in Ghent</footer>\r\n </blockquote>\r\n <h2>Worktop materials compared</h2>\r\n <table>\r\n <caption>Prices per running metre, 60 cm deep, installed.</caption>\r\n <thead><tr><th>Material</th><th>Thickness</th><th>Heat resistant</th><th>Price</th></tr></thead>\r\n <tbody>\r\n <tr><td>Compact laminate</td><td>12 mm</td><td>Up to 180 °C</td><td>€ 290</td></tr>\r\n <tr><td>Quartz composite</td><td>20 mm</td><td>Up to 150 °C</td><td>€ 540</td></tr>\r\n <tr><td>Natural stone</td><td>20 mm</td><td>Yes</td><td>€ 720</td></tr>\r\n </tbody>\r\n </table>\r\n <h3>Sharing your floor plan</h3>\r\n <p>Upload a PDF or a photo in the client portal, or send it by e-mail. Press <kbd>Ctrl</kbd> + <kbd>V</kbd> in the chat to paste a screenshot. Files are stored as <code>project-id/plans/</code> and only your project team can see them.</p>\r\n <pre><code>{{ 'Project: 2026-114 Project 1\\nRoom: Kitchen, ground floor\\nWall A: 412 cm (window at 160 cm)\\nWall B: 298 cm (door at the left)' }}</code></pre>\r\n <hr />\r\n <p><small>Lead times are an estimate. <mark>Natural stone</mark> can take two weeks longer in summer.</small></p>\r\n </slot>\r\n </component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcQuantity.vue | Map: v-model number -> minus / input / plus within min, max, step -->\r\n<script setup lang=\"ts\">\r\n/** Minus, number and plus in one frame (same markup as snippets/quantity.html). v-model is the number. */\r\nimport { stepQuantity } from '../../../ui/src/form-extras.js'\r\n\r\nconst props = withDefaults(defineProps<{ min?: number; max?: number; step?: number; size?: 'sm' | 'md'; label?: string; name?: string; id?: string; disabled?: boolean }>(), { min: 0, step: 1, size: 'md', label: 'Quantity' })\r\nconst model = defineModel<number>({ default: 1 })\r\nconst move = (direction: -1 | 1) => { model.value = stepQuantity(model.value, direction, { min: props.min, max: props.max ?? Infinity, step: props.step }) }\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-quantity', size === 'sm' && 'oc-quantity--sm']\">\r\n <button class=\"oc-quantity__step\" type=\"button\" :aria-label=\"`Decrease ${label.toLowerCase()}`\" :disabled=\"disabled || model <= min\" @click=\"move(-1)\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M19 13H5v-2h14z\" /></svg>\r\n </button>\r\n <input :id=\"id\" v-model.number=\"model\" class=\"oc-quantity__input\" type=\"number\" inputmode=\"numeric\" :name=\"name\" :min=\"min\" :max=\"max\" :step=\"step\" :aria-label=\"label\" :disabled=\"disabled\">\r\n <button class=\"oc-quantity__step\" type=\"button\" :aria-label=\"`Increase ${label.toLowerCase()}`\" :disabled=\"disabled || (max != null && model >= max)\" @click=\"move(1)\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z\" /></svg>\r\n </button>\r\n </div>\r\n</template>\r\n","import type { InjectionKey, Ref } from 'vue'\r\n\r\n/** Provided by OcRadioGroup, injected by OcRadio. */\r\nexport interface RadioGroupContext {\r\n model: Ref<string | number | undefined>\r\n name: Ref<string>\r\n card: Ref<boolean>\r\n}\r\nexport const radioGroupKey: InjectionKey<RadioGroupContext> = Symbol('oc-radio-group')\r\n\r\n/** Provided by OcToggleGroup, injected by OcToggle. */\r\nexport interface ToggleGroupContext {\r\n /** Currently pressed values. */\r\n values: Ref<string[]>\r\n type: Ref<'single' | 'multiple'>\r\n name: Ref<string>\r\n toggle: (value: string) => void\r\n}\r\nexport const toggleGroupKey: InjectionKey<ToggleGroupContext> = Symbol('oc-toggle-group')\r\n\r\n/** Provided by OcResizable, injected by OcResizablePanel. */\r\nexport const resizableVerticalKey: InjectionKey<Ref<boolean>> = Symbol('oc-resizable-vertical')\r\n","<script setup lang=\"ts\">\r\n/**\r\n * One radio. Inside OcRadioGroup it reads and writes the group's v-model; standalone it has its own v-model\r\n * and needs a `name` attribute. `description` (or `card`, or the group's `card`) renders the bordered card form.\r\n * Classes: .oc-radio, .oc-radio-item(--card)\r\n */\r\nimport { computed, inject } from 'vue'\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\nimport { radioGroupKey } from '../composables/keys'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nconst props = defineProps<{ value: string | number; description?: string; card?: boolean; disabled?: boolean }>()\r\nconst own = defineModel<string | number>()\r\nconst group = inject(radioGroupKey, null)\r\nconst { root, control } = useAttrsSplit()\r\n\r\nconst checked = computed(() => (group ? group.model.value : own.value) === props.value)\r\nconst isCard = computed(() => props.card || !!group?.card.value || !!props.description)\r\nfunction onChange() {\r\n if (group) group.model.value = props.value\r\n else own.value = props.value\r\n}\r\n</script>\r\n\r\n<template>\r\n <label v-bind=\"root\" :class=\"['oc-radio-item', isCard && 'oc-radio-item--card']\">\r\n <input\r\n v-bind=\"control\"\r\n class=\"oc-radio\"\r\n type=\"radio\"\r\n :name=\"group ? group.name.value : (control.name as string | undefined)\"\r\n :value=\"value\"\r\n :checked=\"checked\"\r\n :disabled=\"disabled\"\r\n @change=\"onChange\"\r\n />\r\n <span v-if=\"description\"><slot /><small>{{ description }}</small></span>\r\n <slot v-else />\r\n </label>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Radio group (fieldset). v-model = value of the checked radio. Pass `options` or put OcRadio items in the default slot.\r\n * `legend` renders a legend; `row` lays the items out horizontally; `card` makes the option items bordered cards.\r\n * Classes: .oc-radio-group(--row)\r\n */\r\nimport { computed, provide } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\nimport { radioGroupKey } from '../composables/keys'\r\nimport OcRadio from './OcRadio.vue'\r\n\r\nexport interface RadioOption {\r\n value: string | number\r\n label: string\r\n description?: string\r\n disabled?: boolean\r\n}\r\n\r\nconst props = defineProps<{ legend?: string; options?: RadioOption[]; name?: string; row?: boolean; card?: boolean }>()\r\nconst model = defineModel<string | number>()\r\nconst uid = useUid('oc-radio')\r\nprovide(radioGroupKey, { model, name: computed(() => props.name ?? uid), card: computed(() => !!props.card) })\r\n</script>\r\n\r\n<template>\r\n <fieldset :class=\"['oc-radio-group', row && 'oc-radio-group--row']\">\r\n <legend v-if=\"legend\" class=\"oc-label\">{{ legend }}</legend>\r\n <slot>\r\n <OcRadio v-for=\"o in options\" :key=\"o.value\" :value=\"o.value\" :disabled=\"o.disabled\" :description=\"o.description\">{{ o.label }}</OcRadio>\r\n </slot>\r\n </fieldset>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcRating.vue | Map: props -> clamped score -> star bar -->\r\n<script setup lang=\"ts\">\r\n/** Stars of a score (same markup as snippets/rating.html): halves and decimals, any number of stars. */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(defineProps<{ value: number; max?: number; size?: 'sm' | 'md' | 'lg'; label?: string }>(), { max: 5, size: 'md' })\r\nconst score = computed(() => Math.max(0, Math.min(props.max, props.value)))\r\n</script>\r\n\r\n<template>\r\n <span\r\n :class=\"['oc-rating', size !== 'md' && `oc-rating--${size}`]\"\r\n :style=\"{ '--oc-rating': String(score), ...(max !== 5 ? { '--oc-rating-max': String(max) } : {}) }\"\r\n role=\"img\"\r\n :aria-label=\"label ?? `${score} out of ${max}`\"\r\n ></span>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcRatingInput.vue | Map: v-model (1–5) -> fieldset with five star radios -->\r\n<script setup lang=\"ts\">\r\n/** Five radio buttons drawn as stars (same markup as snippets/rating.html); v-model is 0 (none) to 5. */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = withDefaults(defineProps<{ name?: string; legend?: string; size?: 'sm' | 'md' | 'lg'; disabled?: boolean }>(), { legend: 'Rating', size: 'md' })\r\nconst model = defineModel<number>({ default: 0 })\r\nconst group = props.name ?? useUid('oc-rating')\r\nconst text = (n: number) => (n === 1 ? '1 star' : `${n} stars`)\r\n</script>\r\n\r\n<template>\r\n <fieldset :class=\"['oc-rating-input', size !== 'md' && `oc-rating-input--${size}`]\" :disabled=\"disabled\">\r\n <legend>{{ legend }}</legend>\r\n <label v-for=\"n in 5\" :key=\"n\"><input v-model=\"model\" type=\"radio\" :name=\"group\" :value=\"n\"><span>{{ text(n) }}</span></label>\r\n </fieldset>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Warning panel with a code grid plus \"copy all\" and \"download .txt\" actions (handled here).\r\n * Emits `copy` and `download`. Slot: actions (replaces the two buttons).\r\n */\r\nconst props = withDefaults(\r\n defineProps<{\r\n codes: string[]\r\n title?: string\r\n warning?: string\r\n copyLabel?: string\r\n downloadLabel?: string\r\n filename?: string\r\n }>(),\r\n {\r\n title: 'Recovery codes',\r\n warning: 'Store these codes somewhere safe. Each code works once.',\r\n copyLabel: 'Copy all',\r\n downloadLabel: 'Download .txt',\r\n filename: 'recovery-codes.txt',\r\n },\r\n)\r\nconst emit = defineEmits<{ copy: []; download: [] }>()\r\n\r\nasync function copyAll() {\r\n await navigator.clipboard.writeText(props.codes.join('\\n'))\r\n emit('copy')\r\n}\r\n\r\nfunction download() {\r\n const url = URL.createObjectURL(new Blob([props.codes.join('\\n') + '\\n'], { type: 'text/plain' }))\r\n const a = document.createElement('a')\r\n a.href = url\r\n a.download = props.filename\r\n a.click()\r\n URL.revokeObjectURL(url)\r\n emit('download')\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-recovery-codes\">\r\n <h3 class=\"oc-recovery-codes-title\">{{ title }}</h3>\r\n <p class=\"oc-recovery-codes-warning\">{{ warning }}</p>\r\n <ul class=\"oc-recovery-codes-list\">\r\n <li v-for=\"code in codes\" :key=\"code\">{{ code }}</li>\r\n </ul>\r\n <div class=\"oc-recovery-codes-actions\">\r\n <slot name=\"actions\">\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" @click=\"copyAll\">{{ copyLabel }}</button>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" @click=\"download\">{{ downloadLabel }}</button>\r\n </slot>\r\n </div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcRibbon.vue | Map: corner, tone, size -> classes -> band with the slot -->\r\n<script setup lang=\"ts\">\r\n/** Diagonal band across a corner of its parent (same markup as snippets/ribbon.html). Default slot = the text. */\r\nwithDefaults(defineProps<{ corner?: 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end'; tone?: 'primary' | 'success' | 'warning' | 'destructive' | 'muted'; size?: 'sm' | 'md' | 'lg' }>(), { corner: 'top-end', tone: 'primary', size: 'md' })\r\n</script>\r\n\r\n<template>\r\n <span :class=\"['oc-ribbon', corner !== 'top-end' && `oc-ribbon--${corner}`, tone !== 'primary' && `oc-ribbon--${tone}`, size !== 'md' && `oc-ribbon--${size}`]\"><slot /></span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Bounded scroll region (focusable, role=region) with themed scrollbar. `label` = aria-label. Classes: .oc-scroll-area(--x/--shadows) */\r\ndefineProps<{ horizontal?: boolean; shadows?: boolean; label?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"['oc-scroll-area', horizontal && 'oc-scroll-area--x', shadows && 'oc-scroll-area--shadows']\"\r\n tabindex=\"0\"\r\n role=\"region\"\r\n :aria-label=\"label\"\r\n >\r\n <slot />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Radio group as a pill switcher. v-model = selected value. Classes: .oc-segmented(--block/--sm), -item */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface SegmentedOption {\r\n value: string\r\n label: string\r\n}\r\ndefineProps<{\r\n options: SegmentedOption[]\r\n /** aria-label of the group */\r\n label?: string\r\n block?: boolean\r\n size?: 'sm' | 'md'\r\n name?: string\r\n}>()\r\nconst model = defineModel<string>()\r\nconst uid = useUid('oc-segmented')\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-segmented', block && 'oc-segmented--block', size === 'sm' && 'oc-segmented--sm']\" role=\"radiogroup\" :aria-label=\"label\">\r\n <label v-for=\"option in options\" :key=\"option.value\" class=\"oc-segmented-item\">\r\n <input v-model=\"model\" type=\"radio\" :name=\"name ?? uid\" :value=\"option.value\" />\r\n {{ option.label }}\r\n </label>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Native select. v-model. Pass `options` (strings or { value, label }) or <option> elements in the default slot. */\r\nexport interface SelectOption {\r\n value: string | number\r\n label: string\r\n disabled?: boolean\r\n}\r\ndefineProps<{ options?: (string | SelectOption)[] }>()\r\nconst model = defineModel<any>()\r\n</script>\r\n\r\n<template>\r\n <select v-model=\"model\" class=\"oc-select\">\r\n <slot>\r\n <template v-for=\"o in options\" :key=\"typeof o === 'string' ? o : o.value\">\r\n <option v-if=\"typeof o === 'string'\" :value=\"o\">{{ o }}</option>\r\n <option v-else :value=\"o.value\" :disabled=\"o.disabled\">{{ o.label }}</option>\r\n </template>\r\n </slot>\r\n </select>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Divider. Default = <hr>. `vertical` = inline separator for flex rows. `label` (or the default slot) renders the\r\n * line-text-line form. Classes: .oc-separator(--vertical/--strong), .oc-separator-text\r\n */\r\ndefineProps<{ vertical?: boolean; strong?: boolean; label?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div v-if=\"label || $slots.default\" class=\"oc-separator-text\" role=\"separator\"><span><slot>{{ label }}</slot></span></div>\r\n <span\r\n v-else-if=\"vertical\"\r\n :class=\"['oc-separator', 'oc-separator--vertical', strong && 'oc-separator--strong']\"\r\n role=\"separator\"\r\n aria-orientation=\"vertical\"\r\n ></span>\r\n <hr v-else :class=\"['oc-separator', strong && 'oc-separator--strong']\" />\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcSeverityCard.vue | Map: details -> summary head (icon, title + tags, level badge) -> body (default slot, actions slot) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Expandable card colored by risk level. v-model:open. Cards with the same `name` open one at a time.\r\n * Slots: icon, default (body), actions.\r\n * Classes: details.oc-severity-card(--low/--medium/--high/--critical, .is-resolved), -head, -icon, -main, -title, -tags, -tag, -level, -body, -actions\r\n */\r\nconst props = defineProps<{\r\n level: 'low' | 'medium' | 'high' | 'critical'\r\n title: string\r\n tags?: string[]\r\n levelLabel?: string\r\n resolved?: boolean\r\n name?: string\r\n}>()\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst LEVEL_TEXT = { low: 'Low', medium: 'Medium', high: 'High', critical: 'Critical' } as const\r\n\r\nfunction onToggle(e: Event) {\r\n open.value = (e.target as HTMLDetailsElement).open\r\n}\r\n</script>\r\n\r\n<template>\r\n <details\r\n :class=\"['oc-severity-card', `oc-severity-card--${level}`, resolved && 'is-resolved']\"\r\n :name=\"name\"\r\n :open=\"open\"\r\n @toggle=\"onToggle\"\r\n >\r\n <summary class=\"oc-severity-card-head\">\r\n <span v-if=\"$slots.icon\" class=\"oc-severity-card-icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <span class=\"oc-severity-card-main\">\r\n <span class=\"oc-severity-card-title\">{{ title }}</span>\r\n <span v-if=\"tags?.length\" class=\"oc-severity-card-tags\">\r\n <span v-for=\"t in tags\" :key=\"t\" class=\"oc-severity-card-tag\">{{ t }}</span>\r\n </span>\r\n </span>\r\n <span class=\"oc-severity-card-level\">{{ levelLabel ?? LEVEL_TEXT[props.level] }}</span>\r\n </summary>\r\n <div class=\"oc-severity-card-body\">\r\n <slot />\r\n <div v-if=\"$slots.actions\" class=\"oc-severity-card-actions\"><slot name=\"actions\" /></div>\r\n </div>\r\n </details>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Side panel on a native <dialog>. v-model:open. Slots: header (replaces title + description),\r\n * default (body), footer (scoped: { close }). Classes: dialog.oc-sheet(--left/--top/--bottom),\r\n * .oc-sheet-content(--wide), -header, -title, -description, -body, -footer, -close.\r\n */\r\nimport { ref } from 'vue'\r\nimport { useDialog } from '../composables/useDialog'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n side?: 'right' | 'left' | 'top' | 'bottom'\r\n wide?: boolean\r\n title?: string\r\n description?: string\r\n closeLabel?: string\r\n }>(),\r\n { side: 'right', closeLabel: 'Close' },\r\n)\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst el = ref<HTMLDialogElement | null>(null)\r\nconst { onClose } = useDialog(open, el)\r\nconst titleId = useUid('oc-sheet-title')\r\nconst close = () => (open.value = false)\r\ndefineExpose({ close })\r\n</script>\r\n\r\n<template>\r\n <dialog\r\n ref=\"el\"\r\n :class=\"['oc-sheet', side !== 'right' && `oc-sheet--${side}`]\"\r\n closedby=\"any\"\r\n :aria-labelledby=\"title ? titleId : undefined\"\r\n @close=\"onClose\"\r\n >\r\n <div :class=\"['oc-sheet-content', wide && 'oc-sheet-content--wide']\">\r\n <button class=\"oc-sheet-close\" type=\"button\" :aria-label=\"closeLabel\" @click=\"close\">×</button>\r\n <div v-if=\"title || description || $slots.header\" class=\"oc-sheet-header\">\r\n <slot name=\"header\">\r\n <h2 v-if=\"title\" :id=\"titleId\" class=\"oc-sheet-title\">{{ title }}</h2>\r\n <p v-if=\"description\" class=\"oc-sheet-description\">{{ description }}</p>\r\n </slot>\r\n </div>\r\n <div v-if=\"$slots.default\" class=\"oc-sheet-body\"><slot /></div>\r\n <div v-if=\"$slots.footer\" class=\"oc-sheet-footer\"><slot name=\"footer\" :close=\"close\" /></div>\r\n </div>\r\n </dialog>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Vertical navigation shell. Slots: header, default (scrolling content: OcSidebarGroup...), footer.\r\n * Classes: .oc-sidebar(--collapsed/--right/--floating/--dark), -header, -content, -footer.\r\n * Compose with OcSidebarGroup, OcSidebarMenu, OcSidebarMenuButton, OcSidebarCollapsible, OcSidebarSeparator.\r\n */\r\ndefineProps<{ collapsed?: boolean; right?: boolean; floating?: boolean; dark?: boolean; label?: string }>()\r\n</script>\r\n\r\n<template>\r\n <aside :class=\"['oc-sidebar', collapsed && 'oc-sidebar--collapsed', right && 'oc-sidebar--right', floating && 'oc-sidebar--floating', dark && 'oc-sidebar--dark']\" :aria-label=\"label\">\r\n <div v-if=\"$slots.header\" class=\"oc-sidebar-header\"><slot name=\"header\" /></div>\r\n <div class=\"oc-sidebar-content\"><slot /></div>\r\n <div v-if=\"$slots.footer\" class=\"oc-sidebar-footer\"><slot name=\"footer\" /></div>\r\n </aside>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Expandable sidebar item (details). v-model:open. Slots: icon, label (or `label` prop), default (sub items as <li>). */\r\ndefineProps<{ label?: string }>()\r\nconst open = defineModel<boolean>('open', { default: false })\r\n\r\nfunction onToggle(e: Event) {\r\n open.value = (e.target as HTMLDetailsElement).open\r\n}\r\n</script>\r\n\r\n<template>\r\n <details class=\"oc-sidebar-collapsible\" :open=\"open\" @toggle=\"onToggle\">\r\n <summary class=\"oc-sidebar-menu-button\">\r\n <slot name=\"icon\" />\r\n <span class=\"oc-sidebar-menu-label\"><slot name=\"label\">{{ label }}</slot></span>\r\n </summary>\r\n <ul class=\"oc-sidebar-menu-sub\"><slot /></ul>\r\n </details>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Group of sidebar items with an optional heading (`label`). */\r\ndefineProps<{ label?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-sidebar-group\">\r\n <div v-if=\"label\" class=\"oc-sidebar-group-label\">{{ label }}</div>\r\n <slot />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** The <ul class=\"oc-sidebar-menu\">; put <li> elements (each with an OcSidebarMenuButton or OcSidebarCollapsible) inside. */\r\n</script>\r\n\r\n<template>\r\n <ul class=\"oc-sidebar-menu\"><slot /></ul>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Sidebar item: <a> with `href`, otherwise <button>. State: `current` (aria-current=\"page\"), `disabled`.\r\n * Slots: icon (inline svg with class oc-sidebar-menu-icon), default (label). `badge` shows a count pill.\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst props = defineProps<{\r\n href?: string\r\n current?: boolean\r\n disabled?: boolean\r\n large?: boolean\r\n badge?: string | number\r\n}>()\r\nconst tag = computed(() => (props.href ? 'a' : 'button'))\r\n</script>\r\n\r\n<template>\r\n <component\r\n :is=\"tag\"\r\n :class=\"['oc-sidebar-menu-button', large && 'oc-sidebar-menu-button--lg']\"\r\n :href=\"href\"\r\n :type=\"tag === 'button' ? 'button' : undefined\"\r\n :aria-current=\"current ? 'page' : undefined\"\r\n :aria-disabled=\"disabled ? 'true' : undefined\"\r\n >\r\n <slot name=\"icon\" />\r\n <span class=\"oc-sidebar-menu-label\"><slot /></span>\r\n <span v-if=\"badge !== undefined\" class=\"oc-sidebar-menu-badge\">{{ badge }}</span>\r\n </component>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Divider line between sidebar groups. */\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-sidebar-separator\"></div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Loading skeleton. Classes: .oc-skeleton--circle/rect/text/title */\r\nwithDefaults(defineProps<{ variant?: 'text' | 'title' | 'circle' | 'rect' }>(), { variant: 'text' })\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-skeleton', `oc-skeleton--${variant}`]\"></div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Native range input. v-model: number. Keeps --oc-slider-progress in sync (the fill for Chromium/WebKit).\r\n * Native attributes (id, aria-label, disabled...) fall through to the input. Classes: .oc-slider(--vertical)\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(defineProps<{ min?: number; max?: number; step?: number; vertical?: boolean }>(), { min: 0, max: 100 })\r\nconst model = defineModel<number>({ default: 0 })\r\nconst progress = computed(() => {\r\n const span = props.max - props.min\r\n const pct = span > 0 ? ((model.value - props.min) / span) * 100 : 0\r\n return `${Math.min(100, Math.max(0, pct))}%`\r\n})\r\n</script>\r\n\r\n<template>\r\n <input\r\n v-model.number=\"model\"\r\n :class=\"['oc-slider', vertical && 'oc-slider--vertical']\"\r\n type=\"range\"\r\n :min=\"min\"\r\n :max=\"max\"\r\n :step=\"step\"\r\n :style=\"{ '--oc-slider-progress': progress }\"\r\n />\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcSortableRow.vue | Map: tr.oc-sortable-row -> grip cell (button) -> default slot (cells) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Table row with a drag grip. Styling only: listen to @dragstart / @dragover / @drop on the component\r\n * (they fall through to the <tr>) and set `dragging` / `drop` yourself. Emits `grip-keydown` for keyboard moves.\r\n * Classes: tr.oc-sortable-row(.is-dragging/.is-drop-before/.is-drop-after), td.oc-sortable-row-grip-cell, button.oc-sortable-row-grip\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n gripLabel: string\r\n dragging?: boolean\r\n drop?: 'before' | 'after' | null\r\n locked?: boolean\r\n /** Picked up with the keyboard (aria-pressed). Leave undefined when not used. */\r\n grabbed?: boolean\r\n }>(),\r\n // Vue casts a missing boolean prop to false; undefined keeps aria-pressed off the grip.\r\n { grabbed: undefined, drop: null },\r\n)\r\nconst emit = defineEmits<{ 'grip-keydown': [e: KeyboardEvent] }>()\r\n</script>\r\n\r\n<template>\r\n <tr\r\n :class=\"['oc-sortable-row', dragging && 'is-dragging', drop && `is-drop-${drop}`]\"\r\n :draggable=\"locked ? undefined : 'true'\"\r\n >\r\n <td class=\"oc-sortable-row-grip-cell\">\r\n <button\r\n class=\"oc-sortable-row-grip\"\r\n type=\"button\"\r\n :aria-label=\"gripLabel\"\r\n :aria-pressed=\"grabbed\"\r\n :disabled=\"locked\"\r\n @keydown=\"emit('grip-keydown', $event)\"\r\n ></button>\r\n </td>\r\n <slot />\r\n </tr>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcSpecList.vue | Map: groups -> group title -> rows (label, value, note) -->\r\n<script setup lang=\"ts\">\r\n/** Technical specifications in named groups (same markup as snippets/spec-list.html). */\r\nexport interface SpecGroup { title: string; rows: { label: string; value: string; note?: string }[] }\r\ndefineProps<{ groups: SpecGroup[]; stack?: boolean }>()\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-spec-list', stack && 'oc-spec-list--stack']\">\r\n <section v-for=\"(group, g) in groups\" :key=\"g\" class=\"oc-spec-group\">\r\n <h3 class=\"oc-spec-group__title\">{{ group.title }}</h3>\r\n <dl class=\"oc-spec-group__rows\">\r\n <div v-for=\"(row, r) in group.rows\" :key=\"r\" class=\"oc-spec-row\"><dt>{{ row.label }}</dt><dd>{{ row.value }}<small v-if=\"row.note\">{{ row.note }}</small></dd></div>\r\n </dl>\r\n </section>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Loading ring (inherits currentColor). With a `label` it is a role=status; without one it is aria-hidden (e.g. inside a button). Classes: .oc-spinner(--sm/--lg/--xl/--primary/--muted) */\r\ndefineProps<{ size?: 'sm' | 'md' | 'lg' | 'xl'; color?: 'primary' | 'muted'; label?: string }>()\r\n</script>\r\n\r\n<template>\r\n <span\r\n :class=\"['oc-spinner', size && size !== 'md' && `oc-spinner--${size}`, color && `oc-spinner--${color}`]\"\r\n :role=\"label ? 'status' : undefined\"\r\n :aria-label=\"label\"\r\n :aria-hidden=\"label ? undefined : 'true'\"\r\n ></span>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcStackCard.vue | Map: props -> article -> deck (OcMediaThumb cover + count) -> title link + meta -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Stacked deck card for playlists / courses (same markup as snippets/stack-card.html).\r\n * Props: title, href (link covers the card), meta, count (\"12 videos\"), panel (side panel count), thumb (props for OcMediaThumb).\r\n * Slots: count (replaces the count text), meta. Classes: .oc-stack-card(--panel), __deck, __count, __title, __meta\r\n */\r\nimport OcMediaThumb from './OcMediaThumb.vue'\r\n\r\ndefineProps<{ title: string; href: string; meta?: string; count?: string; panel?: boolean; thumb?: Record<string, unknown> }>()\r\n</script>\r\n\r\n<template>\r\n <article :class=\"['oc-stack-card', panel && 'oc-stack-card--panel']\">\r\n <div class=\"oc-stack-card__deck\">\r\n <OcMediaThumb v-bind=\"thumb\" />\r\n <span v-if=\"count || $slots.count\" class=\"oc-stack-card__count\"><slot name=\"count\">{{ count }}</slot></span>\r\n </div>\r\n <div>\r\n <h3 class=\"oc-stack-card__title\"><a :href=\"href\">{{ title }}</a></h3>\r\n <p v-if=\"meta || $slots.meta\" class=\"oc-stack-card__meta\"><slot name=\"meta\">{{ meta }}</slot></p>\r\n </div>\r\n </article>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcStackList.vue | Map: props (items, neutral, size) -> ul.oc-stack-list -> li pills -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Technology pills. Pass `items` (strings or { label, icon }), or your own li.oc-stack-list__item in the default slot.\r\n * Classes: .oc-stack-list (--neutral, --sm), __item, __icon. Accent: class=\"oc-accent--violet\".\r\n */\r\nexport interface StackListItem {\r\n label: string\r\n icon?: string\r\n}\r\nwithDefaults(\r\n defineProps<{\r\n items?: Array<string | StackListItem>\r\n neutral?: boolean\r\n size?: 'default' | 'sm'\r\n }>(),\r\n { items: () => [], size: 'default' },\r\n)\r\nconst label = (item: string | StackListItem) => (typeof item === 'string' ? item : item.label)\r\nconst icon = (item: string | StackListItem) => (typeof item === 'string' ? undefined : item.icon)\r\n</script>\r\n\r\n<template>\r\n <ul :class=\"['oc-stack-list', neutral && 'oc-stack-list--neutral', size === 'sm' && 'oc-stack-list--sm']\">\r\n <slot>\r\n <li v-for=\"(item, i) in items\" :key=\"i\" class=\"oc-stack-list__item\">\r\n <span v-if=\"icon(item)\" class=\"oc-stack-list__icon\" aria-hidden=\"true\">{{ icon(item) }}</span>{{ label(item) }}\r\n </li>\r\n </slot>\r\n </ul>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcStatCard.vue | Map: card (div / a / button) -> icon slot -> body (value + trend, label) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Compact KPI tile. With `href` it is a link, with `button` a button (listen to @click), otherwise a div.\r\n * Put several in a <div class=\"oc-stat-card-grid\">. Slots: icon.\r\n * Classes: .oc-stat-card(--accent/--success/--warning/--stripe), -icon, -body, -value, -label, -trend(--up/--down)\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n value: string | number\r\n label: string\r\n trend?: string\r\n trendDirection?: 'up' | 'down'\r\n tone?: 'default' | 'accent' | 'success' | 'warning'\r\n stripe?: boolean\r\n href?: string\r\n button?: boolean\r\n }>(),\r\n { trendDirection: 'up', tone: 'default' },\r\n)\r\nconst tag = computed(() => (props.href ? 'a' : props.button ? 'button' : 'div'))\r\n</script>\r\n\r\n<template>\r\n <component\r\n :is=\"tag\"\r\n :class=\"['oc-stat-card', tone !== 'default' && `oc-stat-card--${tone}`, stripe && 'oc-stat-card--stripe']\"\r\n :href=\"href\"\r\n :type=\"button && !href ? 'button' : undefined\"\r\n >\r\n <span v-if=\"$slots.icon\" class=\"oc-stat-card-icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <span class=\"oc-stat-card-body\">\r\n <span class=\"oc-stat-card-value\">{{ value }}<span v-if=\"trend\" :class=\"['oc-stat-card-trend', `oc-stat-card-trend--${trendDirection}`]\">{{ trend }}</span></span>\r\n <span class=\"oc-stat-card-label\">{{ label }}</span>\r\n </span>\r\n </component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcStatusDot.vue | Map: props (tone, size, label) -> span.oc-status-dot (role=\"img\" with a label, else aria-hidden) -->\r\n<script setup lang=\"ts\">\r\n/** A live state light; --working pulses. With `label` the dot stands alone (role=\"img\"), without it is decoration.\r\n * Classes: .oc-status-dot + --working/--waiting/--done/--error/--idle, --sm/--lg */\r\nwithDefaults(\r\n defineProps<{ tone?: 'default' | 'working' | 'waiting' | 'done' | 'error' | 'idle'; size?: 'sm' | 'md' | 'lg'; label?: string }>(),\r\n { tone: 'default', size: 'md' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <span\r\n :class=\"['oc-status-dot', tone !== 'default' && `oc-status-dot--${tone}`, size !== 'md' && `oc-status-dot--${size}`]\"\r\n :role=\"label ? 'img' : undefined\"\r\n :aria-label=\"label\"\r\n :aria-hidden=\"label ? undefined : 'true'\"\r\n ></span>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcStatus.vue | Map: props (tone, meta) -> p.oc-status -> OcStatusDot + __text (slot) + __meta -->\r\n<script setup lang=\"ts\">\r\n/** Status row: dot + one line of state text (slot, cuts off with …) + optional meta on the right.\r\n * Classes: .oc-status, .oc-status__text, .oc-status__meta */\r\nimport OcStatusDot from './OcStatusDot.vue'\r\n\r\nwithDefaults(defineProps<{ tone?: 'default' | 'working' | 'waiting' | 'done' | 'error' | 'idle'; meta?: string }>(), { tone: 'default' })\r\n</script>\r\n\r\n<template>\r\n <p class=\"oc-status\">\r\n <OcStatusDot :tone=\"tone\" />\r\n <span class=\"oc-status__text\"><slot /></span>\r\n <span v-if=\"meta || $slots.meta\" class=\"oc-status__meta\"><slot name=\"meta\">{{ meta }}</slot></span>\r\n </p>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Wizard step navigation. v-model = index of the active step (0-based); earlier steps are done and\r\n * clickable, later steps are disabled. Classes: .oc-stepper(--horizontal), .oc-stepper-item(--done/--active),\r\n * -label, -meta.\r\n */\r\nexport interface StepperStep {\r\n label: string\r\n /** Small text under the label, e.g. 2/4 */\r\n meta?: string\r\n}\r\ndefineProps<{ steps: StepperStep[]; horizontal?: boolean; label?: string }>()\r\nconst current = defineModel<number>({ default: 0 })\r\n</script>\r\n\r\n<template>\r\n <ol :class=\"['oc-stepper', horizontal && 'oc-stepper--horizontal']\" :aria-label=\"label\">\r\n <li v-for=\"(step, i) in steps\" :key=\"i\">\r\n <button\r\n :class=\"['oc-stepper-item', i < current && 'oc-stepper-item--done', i === current && 'oc-stepper-item--active']\"\r\n type=\"button\"\r\n :aria-current=\"i === current ? 'step' : undefined\"\r\n :disabled=\"i > current\"\r\n @click=\"current = i\"\r\n >\r\n <span v-if=\"step.meta\">\r\n <span class=\"oc-stepper-label\">{{ step.label }}</span>\r\n <span class=\"oc-stepper-meta\">{{ step.meta }}</span>\r\n </span>\r\n <span v-else class=\"oc-stepper-label\">{{ step.label }}</span>\r\n </button>\r\n </li>\r\n </ol>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcStock.vue | Map: level -> default text -> dot, text and note -->\r\n<script setup lang=\"ts\">\r\n/** Stock status with a colored dot (same markup as snippets/stock.html). Default slot = the text. */\r\nconst props = withDefaults(defineProps<{ level?: 'ok' | 'low' | 'out' | 'order'; badge?: boolean; note?: string }>(), { level: 'ok' })\r\nconst TEXT = { ok: 'In stock', low: 'Low stock', out: 'Out of stock', order: 'On order' } as const\r\n</script>\r\n\r\n<template>\r\n <span :class=\"['oc-stock', badge && 'oc-stock--badge']\" :data-level=\"props.level === 'ok' ? undefined : props.level\">\r\n <slot>{{ TEXT[props.level] }}</slot>\r\n <span v-if=\"note\" class=\"oc-stock__note\"> · {{ note }}</span>\r\n </span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Toggle switch on a checkbox (role=\"switch\"). v-model: boolean. Extra attributes go to the input. */\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nconst model = defineModel<boolean>({ default: false })\r\nconst { root, control } = useAttrsSplit()\r\n</script>\r\n\r\n<template>\r\n <label v-bind=\"root\" class=\"oc-switch\">\r\n <input v-bind=\"control\" v-model=\"model\" type=\"checkbox\" role=\"switch\" />\r\n <span class=\"oc-switch-track\"></span>\r\n </label>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Data table: sortable header (v-model:sort), row selection (v-model:selected), row actions, empty state,\r\n * density modifiers. Slots: `cell-<key>` (scoped: { row, value }), `actions` (scoped: { row }), `empty`.\r\n * Classes: .oc-table-wrap > .oc-table(--striped/--compact/--borderless/--sticky), .oc-table-sort,\r\n * .oc-table-actions, .oc-table-empty; aria-sort / aria-selected / data-numeric attributes.\r\n */\r\nimport { computed, useSlots } from 'vue'\r\n\r\nexport interface TableColumn {\r\n key: string\r\n label: string\r\n sortable?: boolean\r\n numeric?: boolean\r\n width?: string\r\n}\r\nexport interface TableSort {\r\n key: string\r\n direction: 'ascending' | 'descending'\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n columns: TableColumn[]\r\n rows: Record<string, any>[]\r\n rowKey?: string\r\n caption?: string\r\n striped?: boolean\r\n compact?: boolean\r\n borderless?: boolean\r\n sticky?: boolean\r\n selectable?: boolean\r\n actionsLabel?: string\r\n selectAllLabel?: string\r\n }>(),\r\n { rowKey: 'id', actionsLabel: 'Actions', selectAllLabel: 'Select all' },\r\n)\r\nconst selected = defineModel<(string | number)[]>('selected', { default: () => [] })\r\nconst sort = defineModel<TableSort | null>('sort', { default: null })\r\nconst slots = useSlots()\r\n\r\nconst hasActions = computed(() => !!slots.actions)\r\nconst colspan = computed(() => props.columns.length + (props.selectable ? 1 : 0) + (hasActions.value ? 1 : 0))\r\nconst allSelected = computed(() => props.rows.length > 0 && props.rows.every((r) => selected.value.includes(r[props.rowKey])))\r\n\r\nfunction toggleAll(e: Event) {\r\n selected.value = (e.target as HTMLInputElement).checked ? props.rows.map((r) => r[props.rowKey]) : []\r\n}\r\nfunction toggleRow(id: string | number, checked: boolean) {\r\n selected.value = checked ? [...selected.value, id] : selected.value.filter((x) => x !== id)\r\n}\r\nfunction ariaSort(key: string) {\r\n return sort.value?.key === key ? sort.value.direction : undefined\r\n}\r\nfunction toggleSort(e: Event, key: string) {\r\n e.preventDefault()\r\n const next = sort.value?.key === key && sort.value.direction === 'ascending' ? 'descending' : 'ascending'\r\n sort.value = { key, direction: next }\r\n}\r\nfunction rowLabel(row: Record<string, any>) {\r\n return `Select ${String(row[props.columns[0]?.key] ?? '')}`.trim()\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-table-wrap\">\r\n <table\r\n :class=\"['oc-table', striped && 'oc-table--striped', compact && 'oc-table--compact', borderless && 'oc-table--borderless', sticky && 'oc-table--sticky']\"\r\n >\r\n <caption v-if=\"caption\">{{ caption }}</caption>\r\n <thead>\r\n <tr>\r\n <th v-if=\"selectable\" style=\"width: 2.5rem\">\r\n <input class=\"oc-checkbox\" type=\"checkbox\" :checked=\"allSelected\" :aria-label=\"selectAllLabel\" @change=\"toggleAll\" />\r\n </th>\r\n <th\r\n v-for=\"col in columns\"\r\n :key=\"col.key\"\r\n :aria-sort=\"ariaSort(col.key)\"\r\n :data-numeric=\"col.numeric ? '' : undefined\"\r\n :style=\"col.width ? { width: col.width } : undefined\"\r\n >\r\n <a v-if=\"col.sortable\" class=\"oc-table-sort\" :href=\"`?sort=${col.key}`\" @click=\"toggleSort($event, col.key)\">{{ col.label }}</a>\r\n <template v-else>{{ col.label }}</template>\r\n </th>\r\n <th v-if=\"hasActions\"><span class=\"oc-visually-hidden\">{{ actionsLabel }}</span></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n v-for=\"row in rows\"\r\n :key=\"row[rowKey]\"\r\n :aria-selected=\"selected.includes(row[rowKey]) ? 'true' : undefined\"\r\n >\r\n <td v-if=\"selectable\">\r\n <input\r\n class=\"oc-checkbox\"\r\n type=\"checkbox\"\r\n :checked=\"selected.includes(row[rowKey])\"\r\n :aria-label=\"rowLabel(row)\"\r\n @change=\"toggleRow(row[rowKey], ($event.target as HTMLInputElement).checked)\"\r\n />\r\n </td>\r\n <td v-for=\"col in columns\" :key=\"col.key\" :data-numeric=\"col.numeric ? '' : undefined\">\r\n <slot :name=\"`cell-${col.key}`\" :row=\"row\" :value=\"row[col.key]\">{{ row[col.key] }}</slot>\r\n </td>\r\n <td v-if=\"hasActions\" class=\"oc-table-actions\"><slot name=\"actions\" :row=\"row\" /></td>\r\n </tr>\r\n <tr v-if=\"rows.length === 0 && $slots.empty\" class=\"oc-table-empty\">\r\n <td :colspan=\"colspan\"><slot name=\"empty\" :row=\"{}\" /></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTableActions.vue | Map: td.oc-table-actions -> icon actions (default slot) OR overflow trigger + popover menu (default slot = menu items) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Row actions cell. Two modes:\r\n * - no `menuLabel`: the default slot holds icon actions (`a` / `button` with class oc-table-actions-icon(--primary/--success/--destructive)).\r\n * - with `menuLabel`: a three dots trigger opens a native popover; the default slot holds `.oc-dropdown-item`s.\r\n * Classes: td.oc-table-actions(--icons), .oc-table-actions-icon, .oc-table-actions-more, .oc-dropdown-menu[popover]\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineProps<{\r\n /** Accessible name of the overflow trigger, e.g. \"Actions for Ada\". Turns on menu mode. */\r\n menuLabel?: string\r\n}>()\r\nconst menuId = useUid('oc-table-actions-menu')\r\n</script>\r\n\r\n<template>\r\n <td :class=\"['oc-table-actions', !menuLabel && 'oc-table-actions--icons']\">\r\n <template v-if=\"menuLabel\">\r\n <button class=\"oc-table-actions-more\" type=\"button\" :popovertarget=\"menuId\" :aria-label=\"menuLabel\"></button>\r\n <div :id=\"menuId\" class=\"oc-dropdown-menu\" popover><slot /></div>\r\n </template>\r\n <slot v-else />\r\n </td>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTableCompact.vue | Map: wrapper div -> table.oc-table (thead from columns, tbody from rows, tfoot from footer) OR default slot -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Small striped table for inside cards. Pass `columns` + `rows` (+ `footer` total row), or put your own\r\n * <table class=\"oc-table\"> in the default slot. Scoped slot `cell` ({ row, column }) customises body cells.\r\n * Classes: .oc-table-compact(--bordered/--plain), .oc-table-compact-muted, [data-numeric], [data-wrap]\r\n */\r\nexport interface TableCompactColumn {\r\n key: string\r\n label: string\r\n numeric?: boolean\r\n wrap?: boolean\r\n}\r\n\r\nwithDefaults(\r\n defineProps<{\r\n columns?: TableCompactColumn[]\r\n rows?: Array<Record<string, unknown>>\r\n footer?: Record<string, unknown>\r\n bordered?: boolean\r\n plain?: boolean\r\n }>(),\r\n { rows: () => [] },\r\n)\r\n// data-* attributes only when switched on (an empty string means \"present\").\r\nconst cellAttrs = (c: TableCompactColumn) => ({ 'data-numeric': c.numeric ? '' : undefined, 'data-wrap': c.wrap ? '' : undefined })\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-table-compact', bordered && 'oc-table-compact--bordered', plain && 'oc-table-compact--plain']\">\r\n <table v-if=\"columns\" class=\"oc-table\">\r\n <thead>\r\n <tr><th v-for=\"c in columns\" :key=\"c.key\" v-bind=\"cellAttrs(c)\">{{ c.label }}</th></tr>\r\n </thead>\r\n <tbody>\r\n <tr v-for=\"(row, i) in rows\" :key=\"i\">\r\n <td v-for=\"c in columns\" :key=\"c.key\" v-bind=\"cellAttrs(c)\"><slot name=\"cell\" :row=\"row\" :column=\"c\">{{ row[c.key] }}</slot></td>\r\n </tr>\r\n </tbody>\r\n <tfoot v-if=\"footer\">\r\n <tr><td v-for=\"c in columns\" :key=\"c.key\" v-bind=\"cellAttrs(c)\">{{ footer[c.key] }}</td></tr>\r\n </tfoot>\r\n </table>\r\n <slot v-else />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Tabs with radio inputs and :has() (the CSS switches the panels). v-model = value of the active tab.\r\n * One named slot per tab value renders its panel: <template #account>...</template>.\r\n * Classes: .oc-tabset, .oc-tab-list, .oc-tab-trigger, .oc-tab-panel\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface TabItem {\r\n label: string\r\n /** Slot name and model value; defaults to the label. */\r\n value?: string\r\n}\r\ndefineProps<{ tabs: TabItem[]; name?: string }>()\r\nconst model = defineModel<string>()\r\nconst uid = useUid('oc-tabs')\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-tabset\">\r\n <div class=\"oc-tab-list\" role=\"tablist\">\r\n <label v-for=\"(tab, i) in tabs\" :key=\"tab.value ?? tab.label\" class=\"oc-tab-trigger\">\r\n <input\r\n v-model=\"model\"\r\n type=\"radio\"\r\n :name=\"name ?? uid\"\r\n :value=\"tab.value ?? tab.label\"\r\n :checked=\"model === undefined && i === 0\"\r\n />\r\n {{ tab.label }}\r\n </label>\r\n </div>\r\n <div v-for=\"tab in tabs\" :key=\"tab.value ?? tab.label\" class=\"oc-tab-panel\">\r\n <slot :name=\"tab.value ?? tab.label\" />\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Chips with remove buttons and a free-text input with suggestions. v-model: string[].\r\n * Enter or comma adds the typed tag, Backspace on an empty input removes the last one.\r\n * Classes: .oc-tag, .oc-tag-remove, .oc-tag-input, .oc-tag-suggestions\r\n */\r\nimport { computed, ref } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n suggestions?: string[]\r\n placeholder?: string\r\n label?: string\r\n }>(),\r\n { suggestions: () => [], placeholder: 'Add tag...', label: 'Add tag' },\r\n)\r\nconst tags = defineModel<string[]>({ default: () => [] })\r\nconst draft = ref('')\r\nconst available = computed(() => props.suggestions.filter((s) => !tags.value.includes(s)))\r\n\r\nfunction add(value: string) {\r\n const tag = value.trim()\r\n if (tag && !tags.value.includes(tag)) tags.value = [...tags.value, tag]\r\n draft.value = ''\r\n}\r\nfunction remove(tag: string) {\r\n tags.value = tags.value.filter((t) => t !== tag)\r\n}\r\nfunction onKeydown(e: KeyboardEvent) {\r\n if (e.key === 'Enter' || e.key === ',') {\r\n e.preventDefault()\r\n add(draft.value)\r\n } else if (e.key === 'Backspace' && !draft.value && tags.value.length) {\r\n tags.value = tags.value.slice(0, -1)\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-tag-input\">\r\n <span v-for=\"tag in tags\" :key=\"tag\" class=\"oc-tag\">\r\n {{ tag }}\r\n <button class=\"oc-tag-remove\" type=\"button\" :aria-label=\"`Remove ${tag}`\" @click=\"remove(tag)\">×</button>\r\n </span>\r\n <input v-model=\"draft\" type=\"text\" :placeholder=\"placeholder\" :aria-label=\"label\" @keydown=\"onKeydown\" />\r\n </div>\r\n <div v-if=\"available.length\" class=\"oc-tag-suggestions\">\r\n <button v-for=\"s in available\" :key=\"s\" type=\"button\" @click=\"add(s)\">{{ s }}</button>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTerminalLog.vue | Map: props -> frame -> bar (dots, title, status) -> body (lines + prompt) -> auto-scroll -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Dark console window (same markup as snippets/terminal-log.html).\r\n * Props: lines ({ level: info|success|warn|error|debug, message, time?, label? }[]), title, status (\"Live\" + pulsing dot),\r\n * prompt (text, or true for an empty prompt with cursor), height (max body height), autoScroll (default true), label.\r\n * Classes: .oc-terminal-log, __bar, __title, __status, __body, __line(--info/--success/--warn/--error/--debug), __time, __level, __msg, __prompt\r\n */\r\nimport { nextTick, ref, watch } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n lines: { level: 'info' | 'success' | 'warn' | 'error' | 'debug'; message: string; time?: string; label?: string }[]\r\n title?: string\r\n status?: string\r\n prompt?: string | boolean\r\n height?: string\r\n autoScroll?: boolean\r\n label?: string\r\n }>(),\r\n { autoScroll: true, label: 'Log output', prompt: false },\r\n)\r\nconst body = ref<HTMLDivElement | null>(null)\r\n// Keep the newest line in view.\r\nwatch(\r\n () => props.lines.length,\r\n async () => {\r\n await nextTick()\r\n if (props.autoScroll && body.value) body.value.scrollTop = body.value.scrollHeight\r\n },\r\n)\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-terminal-log\" :style=\"height ? { '--oc-terminal-log-height': height } : undefined\">\r\n <div class=\"oc-terminal-log__bar\">\r\n <i /><i /><i />\r\n <span v-if=\"title\" class=\"oc-terminal-log__title\">{{ title }}</span>\r\n <span v-if=\"status\" class=\"oc-terminal-log__status\">{{ status }}</span>\r\n </div>\r\n <div ref=\"body\" class=\"oc-terminal-log__body\" role=\"log\" aria-live=\"polite\" :aria-label=\"label\" tabindex=\"0\">\r\n <p v-for=\"(l, i) in lines\" :key=\"i\" :class=\"['oc-terminal-log__line', `oc-terminal-log__line--${l.level}`]\">\r\n <time v-if=\"l.time\" class=\"oc-terminal-log__time\">{{ l.time }}</time>\r\n <span class=\"oc-terminal-log__level\">{{ l.label ?? (l.level === 'success' ? 'ok' : l.level) }}</span>\r\n <span class=\"oc-terminal-log__msg\">{{ l.message }}</span>\r\n </p>\r\n <p v-if=\"prompt !== false\" class=\"oc-terminal-log__prompt\">{{ prompt === true ? '' : prompt }}</p>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Multi-line input (uses .oc-input). v-model. */\r\ndefineProps<{ error?: boolean }>()\r\nconst model = defineModel<string>()\r\n</script>\r\n\r\n<template>\r\n <textarea v-model=\"model\" :class=\"['oc-input', error && 'oc-input--error']\" :aria-invalid=\"error ? 'true' : undefined\"></textarea>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * System / light / dark switch (CSS only: color-scheme + :has()). v-model: 'system' | 'light' | 'dark'.\r\n * `options` limits the choices; `as=\"div\"` renders a role=\"radiogroup\" div instead of a fieldset.\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\ntype Theme = 'system' | 'light' | 'dark'\r\nconst labels: Record<Theme, string> = { system: 'System', light: 'Light', dark: 'Dark' }\r\n\r\nwithDefaults(\r\n defineProps<{\r\n options?: Theme[]\r\n as?: 'fieldset' | 'div'\r\n label?: string\r\n name?: string\r\n }>(),\r\n { options: () => ['system', 'light', 'dark'], as: 'fieldset', label: 'Color theme' },\r\n)\r\nconst model = defineModel<Theme>({ default: 'system' })\r\nconst uid = useUid('oc-theme')\r\n</script>\r\n\r\n<template>\r\n <component :is=\"as\" class=\"oc-theme-switch\" :role=\"as === 'div' ? 'radiogroup' : undefined\" :aria-label=\"label\">\r\n <label v-for=\"o in options\" :key=\"o\">\r\n <input v-model=\"model\" type=\"radio\" :name=\"name ?? uid\" :value=\"o\" />\r\n {{ labels[o] }}\r\n </label>\r\n </component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTimeInput.vue | Map: props + model -> format helpers -> template (text field + datalist) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * 24h time field (HH:mm). v-model: \"HH:mm\" or \"\". `slots` fills a datalist with suggestions.\r\n * Same markup as packages/ui/snippets/time-input.html. JS only adds the colon (\"0930\" -> \"09:30\").\r\n * All attributes go to the input.\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\ndefineProps<{ slots?: string[]; error?: boolean; placeholder?: string }>()\r\nconst model = defineModel<string>({ default: '' })\r\nconst listId = useUid('oc-time')\r\n\r\n/** Up to 4 digits with a colon after the first two. A picked datalist option is kept as is. */\r\nfunction onInput(e: Event) {\r\n const input = e.target as HTMLInputElement\r\n const v = input.value\r\n const digits = v.replace(/\\D/g, '').slice(0, 4)\r\n model.value = /^\\d{2}:\\d{2}$/.test(v) ? v : digits.length <= 2 ? digits : `${digits.slice(0, 2)}:${digits.slice(2)}`\r\n input.value = model.value\r\n}\r\n\r\n/** On blur: \"9\" -> \"09:00\", \"930\" -> \"09:30\". */\r\nfunction onBlur() {\r\n const d = model.value.replace(/\\D/g, '')\r\n if (d.length === 1 || d.length === 2) model.value = `${d.padStart(2, '0')}:00`\r\n else if (d.length === 3) model.value = `0${d[0]}:${d.slice(1)}`\r\n}\r\n</script>\r\n\r\n<template>\r\n <input\r\n v-bind=\"$attrs\"\r\n class=\"oc-input oc-time-input\"\r\n type=\"text\"\r\n inputmode=\"numeric\"\r\n maxlength=\"5\"\r\n pattern=\"([01][0-9]|2[0-3]):[0-5][0-9]\"\r\n :placeholder=\"placeholder ?? 'hh:mm'\"\r\n :list=\"slots?.length ? listId : undefined\"\r\n :aria-invalid=\"error ? 'true' : undefined\"\r\n :value=\"model\"\r\n @input=\"onInput\"\r\n @blur=\"onBlur\"\r\n />\r\n <datalist v-if=\"slots?.length\" :id=\"listId\">\r\n <option v-for=\"s in slots\" :key=\"s\" :value=\"s\"></option>\r\n </datalist>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTimeline.vue | Map: props (items, size, accent) -> ol.oc-timeline -> li.oc-timeline__item -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Vertical timeline. Pass `items`, or put your own li.oc-timeline__item elements in the default slot.\r\n * Classes: .oc-timeline (--lg, --accent), .oc-timeline__item (--current), __date, __title, __text\r\n */\r\nexport interface TimelineEntry {\r\n date: string\r\n /** Renders a <time datetime> when set. */\r\n dateTime?: string\r\n title?: string\r\n text?: string\r\n current?: boolean\r\n}\r\nwithDefaults(\r\n defineProps<{\r\n items?: TimelineEntry[]\r\n size?: 'default' | 'lg'\r\n accent?: boolean\r\n }>(),\r\n { items: () => [], size: 'default', accent: false },\r\n)\r\n</script>\r\n\r\n<template>\r\n <ol :class=\"['oc-timeline', size === 'lg' && 'oc-timeline--lg', accent && 'oc-timeline--accent']\">\r\n <slot>\r\n <li v-for=\"(item, i) in items\" :key=\"i\" :class=\"['oc-timeline__item', item.current && 'oc-timeline__item--current']\">\r\n <time v-if=\"item.dateTime\" class=\"oc-timeline__date\" :datetime=\"item.dateTime\">{{ item.date }}</time>\r\n <span v-else class=\"oc-timeline__date\">{{ item.date }}</span>\r\n <h3 v-if=\"item.title\" class=\"oc-timeline__title\">{{ item.title }}</h3>\r\n <p v-if=\"item.text\" class=\"oc-timeline__text\">{{ item.text }}</p>\r\n </li>\r\n </slot>\r\n </ol>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTitlebar.vue | Map: props (title, subtitle, bordered, size) -> header.oc-titlebar -> __main (icon slot, title, subtitle) -> __actions (default slot) -->\r\n<script setup lang=\"ts\">\r\n/** Drag area of a frameless desktop window (app-region: drag); buttons in it stay clickable.\r\n * Slots: icon, title, subtitle, default (the OcTitlebarButton actions).\r\n * Classes: .oc-titlebar(--bordered/--sm), __main, __icon, __title, __subtitle, __actions */\r\nwithDefaults(defineProps<{ title?: string; subtitle?: string; bordered?: boolean; size?: 'sm' | 'md' }>(), { size: 'md' })\r\n</script>\r\n\r\n<template>\r\n <header :class=\"['oc-titlebar', bordered && 'oc-titlebar--bordered', size === 'sm' && 'oc-titlebar--sm']\">\r\n <div class=\"oc-titlebar__main\">\r\n <span v-if=\"$slots.icon\" class=\"oc-titlebar__icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <span v-if=\"title || $slots.title\" class=\"oc-titlebar__title\"><slot name=\"title\">{{ title }}</slot></span>\r\n <span v-if=\"subtitle || $slots.subtitle\" class=\"oc-titlebar__subtitle\"><slot name=\"subtitle\">{{ subtitle }}</slot></span>\r\n </div>\r\n <div v-if=\"$slots.default\" class=\"oc-titlebar__actions\"><slot /></div>\r\n </header>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTitlebarBody.vue | Map: div.oc-titlebar-body -> slot -->\r\n<script setup lang=\"ts\">\r\n/** The part of the window that scrolls; the title bar gets its hairline once it does. Class: .oc-titlebar-body */\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-titlebar-body\"><slot /></div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTitlebarButton.vue | Map: props (label, close) -> button.oc-titlebar__btn -> slot (icon) -->\r\n<script setup lang=\"ts\">\r\n/** Compact icon button in the title bar; `label` names it for screen readers, `close` turns it red on hover.\r\n * Classes: .oc-titlebar__btn(--close) */\r\ndefineProps<{ label: string; close?: boolean }>()\r\n</script>\r\n\r\n<template>\r\n <button type=\"button\" :class=\"['oc-titlebar__btn', close && 'oc-titlebar__btn--close']\" :aria-label=\"label\" :title=\"label\"><slot /></button>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTitlebarWindow.vue | Map: div.oc-titlebar-window -> slot (OcTitlebar + OcTitlebarBody) -->\r\n<script setup lang=\"ts\">\r\n/** Column around the title bar and the body, so the bar sees the body scroll. Class: .oc-titlebar-window */\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-titlebar-window\"><slot /></div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * One notification. Emits `dismiss`. role=\"alert\" for errors, role=\"status\" otherwise.\r\n * Slots: icon, title, default (description). Classes: .oc-toast--success/error/warning/info, -icon, -body,\r\n * -title, -description, -close\r\n */\r\nconst glyphs = { success: '✓', error: '!', warning: '!', info: 'i' } as const\r\n\r\nwithDefaults(\r\n defineProps<{\r\n variant?: 'success' | 'error' | 'warning' | 'info'\r\n title?: string\r\n description?: string\r\n dismissible?: boolean\r\n dismissLabel?: string\r\n }>(),\r\n { variant: 'info', dismissible: true, dismissLabel: 'Dismiss' },\r\n)\r\ndefineEmits<{ dismiss: [] }>()\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-toast', `oc-toast--${variant}`]\" :role=\"variant === 'error' ? 'alert' : 'status'\">\r\n <span class=\"oc-toast-icon\" aria-hidden=\"true\"><slot name=\"icon\">{{ glyphs[variant] }}</slot></span>\r\n <div class=\"oc-toast-body\">\r\n <p class=\"oc-toast-title\"><slot name=\"title\">{{ title }}</slot></p>\r\n <p v-if=\"description || $slots.default\" class=\"oc-toast-description\"><slot>{{ description }}</slot></p>\r\n </div>\r\n <button v-if=\"dismissible\" class=\"oc-toast-close\" type=\"button\" :aria-label=\"dismissLabel\" @click=\"$emit('dismiss')\">×</button>\r\n </div>\r\n</template>\r\n","import { reactive, readonly } from 'vue'\r\n\r\nexport type ToastVariant = 'success' | 'error' | 'warning' | 'info'\r\n\r\nexport interface ToastOptions {\r\n title: string\r\n description?: string\r\n variant?: ToastVariant\r\n /** Milliseconds before auto-dismiss. 0 keeps the toast until dismissed. Default 5000. */\r\n duration?: number\r\n}\r\n\r\nexport interface ToastItem extends Required<Pick<ToastOptions, 'title' | 'variant'>> {\r\n id: number\r\n description?: string\r\n duration: number\r\n}\r\n\r\nconst state = reactive<{ toasts: ToastItem[] }>({ toasts: [] })\r\nconst timers = new Map<number, ReturnType<typeof setTimeout>>()\r\nlet nextId = 1\r\n\r\nfunction dismiss(id: number) {\r\n const timer = timers.get(id)\r\n if (timer) clearTimeout(timer)\r\n timers.delete(id)\r\n const i = state.toasts.findIndex((t) => t.id === id)\r\n if (i !== -1) state.toasts.splice(i, 1)\r\n}\r\n\r\nfunction push(options: ToastOptions): number {\r\n const id = nextId++\r\n const item: ToastItem = {\r\n id,\r\n title: options.title,\r\n description: options.description,\r\n variant: options.variant ?? 'info',\r\n duration: options.duration ?? 5000,\r\n }\r\n state.toasts.push(item)\r\n if (item.duration > 0) timers.set(id, setTimeout(() => dismiss(id), item.duration))\r\n return id\r\n}\r\n\r\nfunction clear() {\r\n for (const t of [...state.toasts]) dismiss(t.id)\r\n}\r\n\r\nconst shortcut =\r\n (variant: ToastVariant) =>\r\n (title: string, description?: string, options: Omit<ToastOptions, 'title' | 'description' | 'variant'> = {}) =>\r\n push({ ...options, title, description, variant })\r\n\r\n/** Shared toast queue. Render it once with <OcToastContainer />. */\r\nexport function useToast() {\r\n return {\r\n toasts: readonly(state).toasts,\r\n push,\r\n dismiss,\r\n clear,\r\n success: shortcut('success'),\r\n error: shortcut('error'),\r\n warning: shortcut('warning'),\r\n info: shortcut('info'),\r\n }\r\n}\r\n","<script setup lang=\"ts\">\r\n/** Fixed stack that renders the useToast() queue. Mount once near the app root. Classes: .oc-toast-container(--top/--static) */\r\nimport { useToast } from '../composables/useToast'\r\nimport OcToast from './OcToast.vue'\r\n\r\nwithDefaults(defineProps<{ position?: 'bottom' | 'top'; static?: boolean }>(), { position: 'bottom' })\r\nconst { toasts, dismiss } = useToast()\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-toast-container', position === 'top' && 'oc-toast-container--top', static && 'oc-toast-container--static']\">\r\n <OcToast\r\n v-for=\"t in toasts\"\r\n :key=\"t.id\"\r\n :variant=\"t.variant\"\r\n :title=\"t.title\"\r\n :description=\"t.description\"\r\n @dismiss=\"dismiss(t.id)\"\r\n />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Toggle. Inside OcToggleGroup (give it a `value`) it is a label around a radio/checkbox bound to the group's v-model.\r\n * Standalone: v-model boolean on a label + checkbox, or `button` for a <button aria-pressed>.\r\n * Pass an aria-label attribute for icon-only toggles (it lands on the input/button).\r\n * Classes: .oc-toggle(--outline/--sm/--lg/--icon)\r\n */\r\nimport { computed, inject } from 'vue'\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\nimport { toggleGroupKey } from '../composables/keys'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nconst props = defineProps<{\r\n value?: string\r\n variant?: 'default' | 'outline'\r\n size?: 'sm' | 'md' | 'lg'\r\n icon?: boolean\r\n button?: boolean\r\n disabled?: boolean\r\n}>()\r\nconst pressed = defineModel<boolean>({ default: false })\r\nconst group = inject(toggleGroupKey, null)\r\nconst { root, control } = useAttrsSplit()\r\n\r\nconst classes = computed(() => [\r\n 'oc-toggle',\r\n props.variant === 'outline' && 'oc-toggle--outline',\r\n props.size && props.size !== 'md' && `oc-toggle--${props.size}`,\r\n props.icon && 'oc-toggle--icon',\r\n])\r\nconst inGroup = computed(() => !!group && props.value !== undefined)\r\nconst isOn = computed(() => (inGroup.value ? group!.values.value.includes(props.value!) : pressed.value))\r\nfunction onChange() {\r\n if (inGroup.value) group!.toggle(props.value!)\r\n else pressed.value = !pressed.value\r\n}\r\n</script>\r\n\r\n<template>\r\n <button\r\n v-if=\"button && !inGroup\"\r\n v-bind=\"{ ...root, ...control }\"\r\n type=\"button\"\r\n :class=\"classes\"\r\n :aria-pressed=\"pressed ? 'true' : 'false'\"\r\n :disabled=\"disabled\"\r\n @click=\"pressed = !pressed\"\r\n >\r\n <slot />\r\n </button>\r\n <label v-else v-bind=\"root\" :class=\"classes\">\r\n <input\r\n v-bind=\"control\"\r\n :type=\"inGroup && group!.type.value === 'single' ? 'radio' : 'checkbox'\"\r\n :name=\"inGroup ? group!.name.value : (control.name as string | undefined)\"\r\n :value=\"value\"\r\n :checked=\"isOn\"\r\n :disabled=\"disabled\"\r\n @change=\"onChange\"\r\n />\r\n <slot />\r\n </label>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcToggleField.vue | Map: props + model -> template (label row: text + span.oc-switch) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Settings row: title, description and a switch. v-model: boolean. Slots `label` / `description` override the props.\r\n * Same markup as packages/ui/snippets/toggle-field.html. class/style on the row, other attributes on the checkbox.\r\n */\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\ndefineProps<{ label?: string; description?: string; card?: boolean; reverse?: boolean }>()\r\nconst model = defineModel<boolean>({ default: false })\r\nconst { root, control } = useAttrsSplit()\r\nconst descId = useUid('oc-toggle-field')\r\n</script>\r\n\r\n<template>\r\n <label v-bind=\"root\" :class=\"['oc-toggle-field', card && 'oc-toggle-field--card', reverse && 'oc-toggle-field--reverse']\">\r\n <span class=\"oc-toggle-field-text\">\r\n <span class=\"oc-toggle-field-label\"><slot name=\"label\">{{ label }}</slot></span>\r\n <span v-if=\"description || $slots.description\" :id=\"descId\" class=\"oc-toggle-field-description\"><slot name=\"description\">{{ description }}</slot></span>\r\n </span>\r\n <span class=\"oc-switch\">\r\n <input v-bind=\"control\" v-model=\"model\" type=\"checkbox\" role=\"switch\" :aria-describedby=\"description || $slots.description ? descId : undefined\" />\r\n <span class=\"oc-switch-track\"></span>\r\n </span>\r\n </label>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Connected toggles. v-model = array of pressed values (type \"multiple\", checkbox inputs) or a single value\r\n * string (type \"single\", radio inputs). Put OcToggle items with a `value` inside.\r\n * Classes: .oc-toggle-group(--spaced)\r\n */\r\nimport { computed, provide } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\nimport { toggleGroupKey } from '../composables/keys'\r\n\r\nconst props = withDefaults(defineProps<{ type?: 'single' | 'multiple'; spaced?: boolean; label?: string; name?: string }>(), { type: 'multiple' })\r\nconst model = defineModel<string | string[]>()\r\nconst uid = useUid('oc-toggle')\r\n\r\nconst values = computed(() => (Array.isArray(model.value) ? model.value : model.value ? [model.value] : []))\r\nfunction toggle(value: string) {\r\n if (props.type === 'single') {\r\n model.value = value\r\n } else {\r\n const list = values.value\r\n model.value = list.includes(value) ? list.filter((v) => v !== value) : [...list, value]\r\n }\r\n}\r\nprovide(toggleGroupKey, {\r\n values,\r\n type: computed(() => props.type),\r\n name: computed(() => props.name ?? uid),\r\n toggle,\r\n})\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"['oc-toggle-group', spaced && 'oc-toggle-group--spaced']\"\r\n :role=\"type === 'single' ? 'radiogroup' : 'group'\"\r\n :aria-label=\"label\"\r\n >\r\n <slot />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** CSS-only tooltip: wraps the default slot and shows `text` via data-tooltip. `multiline` keeps its line breaks;\r\n * `heading` puts a title above `text` (.oc-tooltip__content); `side` is the preferred side (default top), with\r\n * anchor positioning it flips when there is no room. */\r\ndefineProps<{ text: string; multiline?: boolean; heading?: string; side?: 'top' | 'bottom' | 'left' | 'right' }>()\r\n</script>\r\n\r\n<template>\r\n <span\r\n :class=\"['oc-tooltip', { 'oc-tooltip--multiline': multiline && !heading, [`oc-tooltip--${side}`]: side && side !== 'top' }]\"\r\n :data-tooltip=\"heading ? undefined : text\"\r\n >\r\n <slot />\r\n <span v-if=\"heading\" class=\"oc-tooltip__content\" role=\"tooltip\"><span class=\"oc-tooltip__title\">{{ heading }}</span>{{ text }}</span>\r\n </span>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTopProgress.vue | Map: progress.oc-top-progress -> phase (hidden / active / done) -> fade-out timer -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Thin page-top loading bar. `active` shows it; when `active` turns false the bar fades out (.is-done)\r\n * and is hidden after `fadeMs`. Without `value` it is indeterminate.\r\n * Classes: progress.oc-top-progress(--success/--warning/--danger/--brand/--lg/--static), .is-done, [hidden]\r\n */\r\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n active?: boolean\r\n value?: number\r\n max?: number\r\n tone?: 'default' | 'success' | 'warning' | 'danger' | 'brand'\r\n large?: boolean\r\n /** In the normal flow (inside a card) instead of fixed at the top. */\r\n static?: boolean\r\n fadeMs?: number\r\n }>(),\r\n { active: true, tone: 'default', fadeMs: 400, value: undefined, max: undefined },\r\n)\r\n\r\nconst phase = ref<'hidden' | 'active' | 'done'>(props.active ? 'active' : 'hidden')\r\nlet timer: ReturnType<typeof setTimeout> | undefined\r\n\r\nwatch(\r\n () => props.active,\r\n (on) => {\r\n clearTimeout(timer)\r\n if (on) {\r\n phase.value = 'active'\r\n return\r\n }\r\n // Only fade out when the bar was visible.\r\n if (phase.value === 'hidden') return\r\n phase.value = 'done'\r\n timer = setTimeout(() => (phase.value = 'hidden'), props.fadeMs)\r\n },\r\n)\r\nonBeforeUnmount(() => clearTimeout(timer))\r\n\r\nconst classes = computed(() => [\r\n 'oc-top-progress',\r\n props.tone !== 'default' && `oc-top-progress--${props.tone}`,\r\n props.large && 'oc-top-progress--lg',\r\n props.static && 'oc-top-progress--static',\r\n phase.value === 'done' && 'is-done',\r\n])\r\n</script>\r\n\r\n<template>\r\n <progress :class=\"classes\" :value=\"value\" :max=\"max\" :hidden=\"phase === 'hidden'\"></progress>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTree.vue | Map: box (+ head row) -> list -> item: folder (details/summary + nested OcTree) or leaf (div row) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Nested tree list on details / summary. Renders itself recursively for child lists (`nested`).\r\n * Slots (scoped, { item }): icon, actions; plus `head-actions` for the head row.\r\n * Classes: .oc-tree(--quiet/--flush), .oc-tree-head, ul.oc-tree-list, details.oc-tree-node, .oc-tree-row(.is-muted),\r\n * .oc-tree-icon, .oc-tree-label, .oc-tree-count, .oc-tree-actions\r\n */\r\nexport interface OcTreeItem {\r\n label: string\r\n href?: string\r\n count?: string | number\r\n children?: OcTreeItem[]\r\n open?: boolean\r\n current?: boolean\r\n muted?: boolean\r\n}\r\n\r\ndefineOptions({ name: 'OcTree' })\r\ndefineProps<{\r\n items: OcTreeItem[]\r\n head?: string\r\n quiet?: boolean\r\n flush?: boolean\r\n /** Internal: render only the list (used for child lists). */\r\n nested?: boolean\r\n}>()\r\n// Typed slots: the component renders itself, so TypeScript cannot infer these on its own.\r\ndefineSlots<{\r\n icon?(props: { item: OcTreeItem }): unknown\r\n actions?(props: { item: OcTreeItem }): unknown\r\n 'head-actions'?(): unknown\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <ul v-if=\"nested\" class=\"oc-tree-list\">\r\n <li v-for=\"(item, i) in items\" :key=\"i\">\r\n <details v-if=\"item.children?.length\" class=\"oc-tree-node\" :open=\"item.open\">\r\n <summary :class=\"['oc-tree-row', item.muted && 'is-muted']\" :aria-current=\"item.current && !item.href ? 'true' : undefined\">\r\n <span v-if=\"$slots.icon\" class=\"oc-tree-icon\" aria-hidden=\"true\"><slot name=\"icon\" :item=\"item\" /></span>\r\n <span class=\"oc-tree-label\">{{ item.label }}</span>\r\n <span v-if=\"item.count != null\" class=\"oc-tree-count\">{{ item.count }}</span>\r\n <span v-if=\"$slots.actions\" class=\"oc-tree-actions\"><slot name=\"actions\" :item=\"item\" /></span>\r\n </summary>\r\n <OcTree :items=\"item.children\" nested>\r\n <template v-if=\"$slots.icon\" #icon=\"{ item: child }\"><slot name=\"icon\" :item=\"child\" /></template>\r\n <template v-if=\"$slots.actions\" #actions=\"{ item: child }\"><slot name=\"actions\" :item=\"child\" /></template>\r\n </OcTree>\r\n </details>\r\n <div v-else :class=\"['oc-tree-row', item.muted && 'is-muted']\" :aria-current=\"item.current && !item.href ? 'true' : undefined\">\r\n <span v-if=\"$slots.icon\" class=\"oc-tree-icon\" aria-hidden=\"true\"><slot name=\"icon\" :item=\"item\" /></span>\r\n <a v-if=\"item.href\" class=\"oc-tree-label\" :href=\"item.href\" :aria-current=\"item.current ? 'true' : undefined\">{{ item.label }}</a>\r\n <span v-else class=\"oc-tree-label\">{{ item.label }}</span>\r\n <span v-if=\"item.count != null\" class=\"oc-tree-count\">{{ item.count }}</span>\r\n <span v-if=\"$slots.actions\" class=\"oc-tree-actions\"><slot name=\"actions\" :item=\"item\" /></span>\r\n </div>\r\n </li>\r\n </ul>\r\n <div v-else :class=\"['oc-tree', quiet && 'oc-tree--quiet', flush && 'oc-tree--flush']\">\r\n <div v-if=\"head\" class=\"oc-tree-row oc-tree-head\">\r\n <span class=\"oc-tree-label\">{{ head }}</span>\r\n <span v-if=\"$slots['head-actions']\" class=\"oc-tree-actions\"><slot name=\"head-actions\" /></span>\r\n </div>\r\n <OcTree :items=\"items\" nested>\r\n <template v-if=\"$slots.icon\" #icon=\"{ item: child }\"><slot name=\"icon\" :item=\"child\" /></template>\r\n <template v-if=\"$slots.actions\" #actions=\"{ item: child }\"><slot name=\"actions\" :item=\"child\" /></template>\r\n </OcTree>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcUpgradeBanner.vue | Map: aside -> icon slot -> body (title + plan pill, text slot, usage meter) -> actions slot -> dismiss button -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Free-plan limits callout. `dismissible` adds an X that emits `dismiss` (your app hides the banner).\r\n * Slots: icon, default (text, may hold links), actions.\r\n * Classes: .oc-upgrade-banner(--premium/--compact), -icon, -body, -title, -plan, -text, -usage, meter.oc-upgrade-banner-meter, -actions, -dismiss\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n title: string\r\n plan?: string\r\n text?: string\r\n usage?: { label: string; value: number; max: number }\r\n premium?: boolean\r\n compact?: boolean\r\n dismissible?: boolean\r\n dismissLabel?: string\r\n }>(),\r\n { dismissLabel: 'Dismiss' },\r\n)\r\nconst emit = defineEmits<{ dismiss: [] }>()\r\n</script>\r\n\r\n<template>\r\n <aside :class=\"['oc-upgrade-banner', premium && 'oc-upgrade-banner--premium', compact && 'oc-upgrade-banner--compact']\">\r\n <span v-if=\"$slots.icon\" class=\"oc-upgrade-banner-icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <div class=\"oc-upgrade-banner-body\">\r\n <p class=\"oc-upgrade-banner-title\">{{ title }} <span v-if=\"plan\" class=\"oc-upgrade-banner-plan\">{{ plan }}</span></p>\r\n <p v-if=\"$slots.default || text\" class=\"oc-upgrade-banner-text\"><slot>{{ text }}</slot></p>\r\n <div v-if=\"usage\" class=\"oc-upgrade-banner-usage\">\r\n <span>{{ usage.label }}</span>\r\n <!-- low / high make the meter turn \"less good\" near the limit. -->\r\n <meter class=\"oc-upgrade-banner-meter\" min=\"0\" :max=\"usage.max\" :low=\"usage.max * 0.6\" :high=\"usage.max * 0.8\" optimum=\"0\" :value=\"usage.value\">\r\n {{ usage.value }} of {{ usage.max }}\r\n </meter>\r\n <span>{{ usage.value }} / {{ usage.max }}</span>\r\n </div>\r\n </div>\r\n <div v-if=\"$slots.actions\" class=\"oc-upgrade-banner-actions\"><slot name=\"actions\" /></div>\r\n <button v-if=\"dismissible\" class=\"oc-upgrade-banner-dismiss\" type=\"button\" :aria-label=\"dismissLabel\" @click=\"emit('dismiss')\">×</button>\r\n </aside>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Avatar with name and e-mail (truncating). `initials` (default: from `name`) or `src` fill the avatar; slot `avatar` replaces it. */\r\nimport { computed } from 'vue'\r\n\r\nconst props = defineProps<{\r\n name: string\r\n email?: string\r\n initials?: string\r\n src?: string\r\n avatarSize?: 'sm' | 'md' | 'lg' | 'xl'\r\n}>()\r\n\r\nconst shownInitials = computed(() => props.initials ?? props.name.trim().split(/\\s+/).filter(Boolean).slice(0, 2).map((w) => w[0].toUpperCase()).join(''))\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-user\">\r\n <slot name=\"avatar\">\r\n <span :class=\"['oc-avatar', avatarSize && avatarSize !== 'md' && `oc-avatar--${avatarSize}`]\">\r\n <img v-if=\"src\" :src=\"src\" alt=\"\" />\r\n <template v-else>{{ shownInitials }}</template>\r\n </span>\r\n </slot>\r\n <span class=\"oc-user-text\">\r\n <span class=\"oc-user-name\">{{ name }}</span>\r\n <span v-if=\"email\" class=\"oc-user-email\">{{ email }}</span>\r\n </span>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcVersionBanner.vue | Map: chip (role=status) -> dot -> long text -> short text -> reload action -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * \"New version available - reload\" chip. Renders nothing while `version` is empty.\r\n * Without an @reload listener the action is a plain link to the current page; with one it is a button.\r\n * Slots: default (long text). Classes: .oc-version-banner(--info/--success/--floating), -dot, -text, -short, -action\r\n */\r\nconst props = withDefaults(\r\n defineProps<{\r\n version?: string | null\r\n short?: string\r\n actionLabel?: string\r\n tone?: 'warning' | 'info' | 'success'\r\n floating?: boolean\r\n /** Declared as a prop so the component can see whether a listener is set. */\r\n onReload?: () => void\r\n }>(),\r\n { short: 'New version', actionLabel: 'Reload', tone: 'warning', version: null, onReload: undefined },\r\n)\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"version\"\r\n :class=\"['oc-version-banner', tone !== 'warning' && `oc-version-banner--${tone}`, floating && 'oc-version-banner--floating']\"\r\n role=\"status\"\r\n >\r\n <span class=\"oc-version-banner-dot\" aria-hidden=\"true\"></span>\r\n <span class=\"oc-version-banner-text\"><slot>New version ({{ version }}) available - reload the page</slot></span>\r\n <span class=\"oc-version-banner-short\">{{ short }}</span>\r\n <button v-if=\"props.onReload\" class=\"oc-version-banner-action\" type=\"button\" @click=\"props.onReload()\">{{ actionLabel }}</button>\r\n <a v-else class=\"oc-version-banner-action\" href=\"\">{{ actionLabel }}</a>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcWatermark.vue | Map: props (text, variant, tone, repeat) -> span.oc-watermark (text once or tiled) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Light text over its positioned parent (put it last inside an element with class=\"relative\"). Click-through and\r\n * aria-hidden. A logo or icon goes in the \"mark\" slot (<img> or <svg>) instead of text. Classes: .oc-watermark + --straight/--tile/--corner/--corner-top, --light/--primary/--destructive\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n text?: string\r\n variant?: 'diagonal' | 'straight' | 'tile' | 'corner' | 'corner-top'\r\n tone?: 'default' | 'light' | 'primary' | 'destructive'\r\n repeat?: number\r\n mono?: boolean\r\n }>(),\r\n { text: 'Concept', variant: 'diagonal', tone: 'default', repeat: 12, mono: false },\r\n)\r\n</script>\r\n\r\n<template>\r\n <span\r\n :class=\"['oc-watermark', variant !== 'diagonal' && `oc-watermark--${variant}`, tone !== 'default' && `oc-watermark--${tone}`, mono && 'oc-watermark--mono']\"\r\n aria-hidden=\"true\"\r\n >\r\n <template v-for=\"i in (variant === 'tile' ? Math.max(1, repeat) : 1)\" :key=\"i\">\r\n <slot v-if=\"$slots.mark\" name=\"mark\" />\r\n <span v-else><slot>{{ text }}</slot></span>\r\n </template>\r\n </span>\r\n</template>\r\n","<!-- File: packages/vue/src/blocks/OcBlockAboutTimeline.vue | Map: props -> media (+ badge slot) -> copy (title, default slot) -> OcTimeline -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * About section: picture with a badge next to the company story and a year timeline.\r\n * `title` + `highlight` (gradient part), or the `title` slot. Slots: title, default (paragraphs), badge.\r\n * Classes: .oc-block-about (--reverse), -inner, -media, -badge, -copy, -title + .oc-timeline\r\n */\r\nimport OcTimeline from '../components/OcTimeline.vue'\r\nimport type { TimelineEntry } from '../components/OcTimeline.vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n eyebrow?: string\r\n title?: string\r\n highlight?: string\r\n timeline?: TimelineEntry[]\r\n image?: string\r\n imageAlt?: string\r\n reverse?: boolean\r\n }>(),\r\n { timeline: () => [], imageAlt: '' },\r\n)\r\nconst titleId = useUid('oc-about-title')\r\n</script>\r\n\r\n<template>\r\n <section :class=\"['oc-block-about', reverse && 'oc-block-about--reverse']\" :aria-labelledby=\"titleId\">\r\n <div class=\"oc-block-about-inner\">\r\n <figure class=\"oc-block-about-media\" :aria-hidden=\"image ? undefined : 'true'\">\r\n <img v-if=\"image\" :src=\"image\" :alt=\"imageAlt\" loading=\"lazy\" />\r\n <span v-if=\"$slots.badge\" class=\"oc-block-about-badge\"><slot name=\"badge\" /></span>\r\n </figure>\r\n <div class=\"oc-block-about-copy\">\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h2 :id=\"titleId\" class=\"oc-block-about-title\">\r\n <slot name=\"title\">{{ title }} <span v-if=\"highlight\" class=\"oc-text-gradient\">{{ highlight }}</span></slot>\r\n </h2>\r\n <slot />\r\n <OcTimeline v-if=\"timeline.length\" :items=\"timeline\" />\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Top bar with sidebar toggle, module navigation and user actions.\r\n * `toggleFor` = id of the checkbox that collapses the sidebar (see OcBlockAppShell).\r\n * Slots: toggle (replaces the default hamburger label), nav (replaces the items), title, actions.\r\n * Classes: .oc-block-appbar, -nav, -actions, -title\r\n */\r\nimport OcNavmenuList, { type NavmenuItem } from '../components/OcNavmenuList.vue'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n toggleFor?: string\r\n toggleLabel?: string\r\n navItems?: NavmenuItem[]\r\n navLabel?: string\r\n title?: string\r\n }>(),\r\n { toggleLabel: 'Toggle sidebar', navLabel: 'Module navigation' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <header class=\"oc-block-appbar\">\r\n <slot name=\"toggle\">\r\n <label v-if=\"toggleFor\" class=\"oc-btn oc-btn--ghost oc-btn--icon\" :for=\"toggleFor\" :title=\"toggleLabel\">\r\n <svg data-icon=\"mdi:menu\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z\"/></svg>\r\n <span class=\"oc-visually-hidden\">{{ toggleLabel }}</span>\r\n </label>\r\n </slot>\r\n <span v-if=\"title\" class=\"oc-block-appbar-title\">{{ title }}</span>\r\n <nav v-if=\"navItems?.length || $slots.nav\" class=\"oc-block-appbar-nav\" :aria-label=\"navLabel\">\r\n <slot name=\"nav\"><OcNavmenuList :items=\"navItems\" /></slot>\r\n </nav>\r\n <div v-if=\"$slots.actions\" class=\"oc-block-appbar-actions\"><slot name=\"actions\" /></div>\r\n </header>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Application layout: sidebar, header bar, breadcrumb strip and scrolling content.\r\n * v-model:collapsed drives the hidden checkbox (`toggleId`) that collapses the sidebar; point the header's\r\n * toggle label at the same id. `height` sets --oc-block-shell-height (default 100dvh).\r\n * Slots: sidebar (an OcSidebar), header (an OcBlockAppHeader), breadcrumbs, default (content).\r\n * Classes: .oc-block-shell, -toggle, -main, -breadcrumbs, -content\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(defineProps<{ toggleId?: string; height?: string; toggleLabel?: string }>(), {\r\n toggleId: 'oc-shell-toggle',\r\n toggleLabel: 'Collapse sidebar',\r\n})\r\nconst collapsed = defineModel<boolean>('collapsed', { default: false })\r\nconst style = computed(() => (props.height ? { '--oc-block-shell-height': props.height } : undefined))\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-shell\" :style=\"style\">\r\n <input :id=\"toggleId\" v-model=\"collapsed\" class=\"oc-block-shell-toggle\" type=\"checkbox\" :aria-label=\"toggleLabel\" />\r\n <slot name=\"sidebar\" />\r\n <div class=\"oc-block-shell-main\">\r\n <slot name=\"header\" />\r\n <div v-if=\"$slots.breadcrumbs\" class=\"oc-block-shell-breadcrumbs\"><slot name=\"breadcrumbs\" /></div>\r\n <main class=\"oc-block-shell-content\"><slot /></main>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Sign-in card. Slots: default (fields, e.g. .oc-form-group blocks), actions (primary button),\r\n * social (alternative sign-in buttons, shown under the divider text), footer.\r\n * Classes: .oc-block-auth, -card, -divider, -footer, .oc-block-subtitle\r\n */\r\ndefineProps<{ title?: string; subtitle?: string; divider?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-auth\">\r\n <div class=\"oc-block-auth-card\">\r\n <h2 v-if=\"title\">{{ title }}</h2>\r\n <p v-if=\"subtitle\" class=\"oc-block-subtitle\">{{ subtitle }}</p>\r\n <slot />\r\n <slot name=\"actions\" />\r\n <template v-if=\"$slots.social\">\r\n <div v-if=\"divider\" class=\"oc-block-auth-divider\">{{ divider }}</div>\r\n <slot name=\"social\" />\r\n </template>\r\n </div>\r\n <div v-if=\"$slots.footer\" class=\"oc-block-auth-footer\"><slot name=\"footer\" /></div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Sign-in with a brand panel (logo, quote) next to the form. Emits `submit` (the native submit event).\r\n * Slots: logo, quote (or `quote` + `quoteAuthor` props), default (fields), row (remember me / forgot password),\r\n * submit (default: a full-width primary button with `submitLabel`), footer.\r\n * Classes: .oc-block-authsplit, -brand, -logo, -quote, -form, -card, -title, -subtitle, -fields, -row\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n title?: string\r\n subtitle?: string\r\n quote?: string\r\n quoteAuthor?: string\r\n submitLabel?: string\r\n action?: string\r\n method?: string\r\n }>(),\r\n { submitLabel: 'Sign in', action: '#', method: 'post' },\r\n)\r\ndefineEmits<{ submit: [event: SubmitEvent] }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-authsplit\">\r\n <aside class=\"oc-block-authsplit-brand\">\r\n <a v-if=\"$slots.logo\" class=\"oc-block-authsplit-logo\" href=\"/\"><slot name=\"logo\" /></a>\r\n <blockquote v-if=\"quote || $slots.quote\" class=\"oc-block-authsplit-quote\">\r\n <slot name=\"quote\">\r\n <p>{{ quote }}</p>\r\n <footer v-if=\"quoteAuthor\">{{ quoteAuthor }}</footer>\r\n </slot>\r\n </blockquote>\r\n </aside>\r\n <div class=\"oc-block-authsplit-form\">\r\n <form class=\"oc-block-authsplit-card\" :action=\"action\" :method=\"method\" @submit=\"$emit('submit', $event)\">\r\n <h1 v-if=\"title\" class=\"oc-block-authsplit-title\">{{ title }}</h1>\r\n <p v-if=\"subtitle\" class=\"oc-block-authsplit-subtitle\">{{ subtitle }}</p>\r\n <div class=\"oc-block-authsplit-fields\">\r\n <slot />\r\n <div v-if=\"$slots.row\" class=\"oc-block-authsplit-row\"><slot name=\"row\" /></div>\r\n <slot name=\"submit\"><button class=\"oc-btn\" type=\"submit\" style=\"width: 100%\">{{ submitLabel }}</button></slot>\r\n </div>\r\n <slot name=\"footer\" />\r\n </form>\r\n </div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/blocks/OcBlockContactGrid.vue | Map: props -> head -> grid -> cards (mark, title, lines) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Contact info cards (e-mail, phone, address, hours). A card with `address: true` renders as <address>.\r\n * Slot: default (own cards). Classes: .oc-block-contact (--plain), -head, -heading, -lead, -grid, -card, -title, -line\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface ContactGridLine {\r\n text: string\r\n href?: string\r\n}\r\nexport interface ContactGridCard {\r\n title: string\r\n lines: ContactGridLine[]\r\n icon?: string\r\n accent?: string\r\n address?: boolean\r\n}\r\nwithDefaults(\r\n defineProps<{\r\n eyebrow?: string\r\n title?: string\r\n lead?: string\r\n cards?: ContactGridCard[]\r\n plain?: boolean\r\n }>(),\r\n { cards: () => [] },\r\n)\r\nconst titleId = useUid('oc-contact-title')\r\n</script>\r\n\r\n<template>\r\n <section :class=\"['oc-block-contact', plain && 'oc-block-contact--plain']\" :aria-labelledby=\"title ? titleId : undefined\">\r\n <div v-if=\"eyebrow || title || lead\" class=\"oc-block-contact-head\">\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h2 v-if=\"title\" :id=\"titleId\" class=\"oc-block-contact-heading\">{{ title }}</h2>\r\n <p v-if=\"lead\" class=\"oc-block-contact-lead\">{{ lead }}</p>\r\n </div>\r\n <div class=\"oc-block-contact-grid\">\r\n <slot>\r\n <component :is=\"card.address ? 'address' : 'article'\" v-for=\"(card, i) in cards\" :key=\"i\" class=\"oc-block-contact-card\">\r\n <span v-if=\"card.icon\" :class=\"['oc-product-mark oc-product-mark--sm oc-product-mark--soft', card.accent && `oc-accent--${card.accent}`]\" aria-hidden=\"true\">{{ card.icon }}</span>\r\n <component :is=\"card.address ? 'span' : 'h3'\" class=\"oc-block-contact-title\">{{ card.title }}</component>\r\n <template v-for=\"(line, j) in card.lines\" :key=\"j\">\r\n <a v-if=\"line.href\" class=\"oc-block-contact-line\" :href=\"line.href\">{{ line.text }}</a>\r\n <component :is=\"card.address ? 'span' : 'p'\" v-else class=\"oc-block-contact-line\">{{ line.text }}</component>\r\n </template>\r\n </component>\r\n </slot>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Call to action banner. Slot `actions` holds the buttons (inside .oc-block-hero-actions). */\r\ndefineProps<{ title?: string; text?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-cta\">\r\n <h2 v-if=\"title\">{{ title }}</h2>\r\n <p v-if=\"text\">{{ text }}</p>\r\n <div v-if=\"$slots.actions\" class=\"oc-block-hero-actions\"><slot name=\"actions\" /></div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Card with title, actions, toolbar, table, bulk bar and footer. Put an <OcTable> in the default slot.\r\n * Slots: actions (header buttons), toolbar (.oc-table-toolbar content: search, filter pills),\r\n * bulk (selection bar, shown when `selectedCount` > 0), default (table), footer (.oc-table-footer: entries text, page size, pagination).\r\n * Classes: .oc-card.oc-block-datatable, -head, -title, -description, -body, -bulk, .oc-table-toolbar, .oc-table-footer\r\n */\r\ndefineProps<{ title?: string; description?: string; selectedCount?: number }>()\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-card oc-block-datatable\">\r\n <header v-if=\"title || description || $slots.actions\" class=\"oc-block-datatable-head\">\r\n <div>\r\n <h2 v-if=\"title\" class=\"oc-block-datatable-title\">{{ title }}</h2>\r\n <p v-if=\"description\" class=\"oc-block-datatable-description\">{{ description }}</p>\r\n </div>\r\n <div v-if=\"$slots.actions\"><slot name=\"actions\" /></div>\r\n </header>\r\n <div class=\"oc-block-datatable-body\">\r\n <div v-if=\"$slots.toolbar\" class=\"oc-table-toolbar\"><slot name=\"toolbar\" /></div>\r\n <div v-if=\"$slots.bulk && selectedCount\" class=\"oc-block-datatable-bulk\"><slot name=\"bulk\" :count=\"selectedCount\" /></div>\r\n <slot />\r\n <div v-if=\"$slots.footer\" class=\"oc-table-footer\"><slot name=\"footer\" /></div>\r\n </div>\r\n </section>\r\n</template>\r\n","<!-- File: packages/vue/src/blocks/OcBlockFaq.vue | Map: props -> section.oc-block-faq -> head -> accordion (details name) -> more slot -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * FAQ section: title + exclusive accordion on native <details name> (no JavaScript).\r\n * Slots: lead, default (own details items), more. Classes: .oc-block-faq (--split), -inner, -head, -title, -lead, -list, -more\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface FaqItem {\r\n question: string\r\n answer: string\r\n}\r\nconst props = withDefaults(\r\n defineProps<{\r\n eyebrow?: string\r\n title: string\r\n lead?: string\r\n items?: FaqItem[]\r\n openIndex?: number\r\n split?: boolean\r\n name?: string\r\n }>(),\r\n { items: () => [], openIndex: 0 },\r\n)\r\nconst titleId = useUid('oc-faq-title')\r\nconst autoGroup = useUid('oc-faq')\r\nconst group = props.name ?? autoGroup\r\n</script>\r\n\r\n<template>\r\n <section :class=\"['oc-block-faq', split && 'oc-block-faq--split']\" :aria-labelledby=\"titleId\">\r\n <div class=\"oc-block-faq-inner\">\r\n <div class=\"oc-block-faq-head\">\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h2 :id=\"titleId\" class=\"oc-block-faq-title\">{{ title }}</h2>\r\n <p v-if=\"lead || $slots.lead\" class=\"oc-block-faq-lead\"><slot name=\"lead\">{{ lead }}</slot></p>\r\n </div>\r\n <div class=\"oc-accordion oc-block-faq-list\">\r\n <slot>\r\n <details v-for=\"(item, i) in items\" :key=\"i\" class=\"oc-accordion-item\" :name=\"group\" :open=\"i === openIndex\">\r\n <summary class=\"oc-accordion-trigger\">{{ item.question }}</summary>\r\n <div class=\"oc-accordion-content\">{{ item.answer }}</div>\r\n </details>\r\n </slot>\r\n </div>\r\n <p v-if=\"$slots.more\" class=\"oc-block-faq-more\"><slot name=\"more\" /></p>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Feature grid with icons. Slot `icon` (scoped: { item }) overrides the glyph. Classes: .oc-block-features, -grid, .oc-block-feature-card, -icon */\r\nexport interface FeatureItem {\r\n icon?: string\r\n title: string\r\n text: string\r\n}\r\ndefineProps<{ title?: string; description?: string; items: FeatureItem[] }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-features\">\r\n <h2 v-if=\"title\">{{ title }}</h2>\r\n <p v-if=\"description\">{{ description }}</p>\r\n <div class=\"oc-block-features-grid\">\r\n <div v-for=\"(item, i) in items\" :key=\"i\" class=\"oc-block-feature-card\">\r\n <div class=\"oc-block-feature-icon\"><slot name=\"icon\" :item=\"item\">{{ item.icon }}</slot></div>\r\n <h3>{{ item.title }}</h3>\r\n <p>{{ item.text }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Multi-column site footer. Slots: bottom-start, bottom-end (default text via `copyright` / `credit`). Classes: .oc-block-footer, -grid, -col, -bottom */\r\nexport interface FooterColumn {\r\n title: string\r\n links: { label: string; href: string }[]\r\n}\r\ndefineProps<{ columns: FooterColumn[]; copyright?: string; credit?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-footer\">\r\n <div class=\"oc-block-footer-grid\">\r\n <div v-for=\"col in columns\" :key=\"col.title\" class=\"oc-block-footer-col\">\r\n <h4>{{ col.title }}</h4>\r\n <ul>\r\n <li v-for=\"link in col.links\" :key=\"link.href + link.label\"><a :href=\"link.href\">{{ link.label }}</a></li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div v-if=\"copyright || credit || $slots['bottom-start'] || $slots['bottom-end']\" class=\"oc-block-footer-bottom\">\r\n <span><slot name=\"bottom-start\">{{ copyright }}</slot></span>\r\n <span><slot name=\"bottom-end\">{{ credit }}</slot></span>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Collapsible form sections with a sticky action bar. Default slot = sections (OcCollapsible containing a\r\n * `<div class=\"oc-block-formpage-grid\">` for the two-column field grid). Emits `submit`.\r\n * Slot `actions` replaces the default Cancel / Save buttons. Classes: .oc-block-formpage, -grid, -actions\r\n */\r\nwithDefaults(\r\n defineProps<{ cancelLabel?: string; submitLabel?: string; action?: string; method?: string }>(),\r\n { cancelLabel: 'Cancel', submitLabel: 'Save', action: '#', method: 'post' },\r\n)\r\ndefineEmits<{ submit: [event: SubmitEvent]; cancel: [] }>()\r\n</script>\r\n\r\n<template>\r\n <form class=\"oc-block-formpage\" :action=\"action\" :method=\"method\" @submit=\"$emit('submit', $event)\">\r\n <slot />\r\n <div class=\"oc-block-formpage-actions\">\r\n <slot name=\"actions\">\r\n <button class=\"oc-btn oc-btn--outline\" type=\"button\" @click=\"$emit('cancel')\">{{ cancelLabel }}</button>\r\n <button class=\"oc-btn\" type=\"submit\">{{ submitLabel }}</button>\r\n </slot>\r\n </div>\r\n </form>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Centered hero with badge, headline, text and actions. Classes: .oc-block-hero, -badge, -actions */\r\ndefineProps<{ badge?: string; title?: string; text?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-hero\">\r\n <span v-if=\"badge\" class=\"oc-block-hero-badge\">{{ badge }}</span>\r\n <h1 v-if=\"title\">{{ title }}</h1>\r\n <p v-if=\"text\">{{ text }}</p>\r\n <div v-if=\"$slots.actions\" class=\"oc-block-hero-actions\"><slot name=\"actions\" /></div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Landing hero: eyebrow, display title with a gradient word, lead, buttons and a code window with floating icon tiles.\r\n * `title` + `highlight` (gradient word) + `titleEnd`, or the `title` slot. Slots: lead, actions, visual (replaces the code window).\r\n * Classes: .oc-section-pad, .oc-container, .oc-split, .oc-eyebrow, .oc-display, .oc-text-gradient, .oc-lead, .oc-code-window\r\n */\r\ndefineProps<{\r\n eyebrow?: string\r\n title?: string\r\n highlight?: string\r\n titleEnd?: string\r\n lead?: string\r\n code?: string\r\n codeTitle?: string\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-section-pad\">\r\n <div class=\"oc-container oc-split\">\r\n <div>\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h1 class=\"oc-display\">\r\n <slot name=\"title\">{{ title }} <span v-if=\"highlight\" class=\"oc-text-gradient\">{{ highlight }}</span>{{ titleEnd }}</slot>\r\n </h1>\r\n <p v-if=\"lead || $slots.lead\" class=\"oc-lead\"><slot name=\"lead\">{{ lead }}</slot></p>\r\n <div v-if=\"$slots.actions\" class=\"flex flex-wrap gap-1 mt-2\"><slot name=\"actions\" /></div>\r\n </div>\r\n <div class=\"relative p-2\">\r\n <slot name=\"visual\">\r\n <span class=\"oc-icon-tile oc-icon-tile--float oc-accent--green absolute\" style=\"inset: -0.5rem auto auto 8%\" aria-hidden=\"true\">◆</span>\r\n <span class=\"oc-icon-tile oc-icon-tile--float oc-accent--violet absolute\" style=\"inset: 0 6% auto auto; animation-delay: -2s\" aria-hidden=\"true\">◉</span>\r\n <span class=\"oc-icon-tile oc-icon-tile--float oc-accent--orange absolute\" style=\"inset: auto 10% -0.5rem auto; animation-delay: -4s\" aria-hidden=\"true\">▲</span>\r\n <div class=\"oc-code-window\">\r\n <div class=\"oc-code-window__bar\"><i></i><i></i><i></i><span v-if=\"codeTitle\" class=\"oc-code-window__title\">{{ codeTitle }}</span></div>\r\n <pre class=\"oc-code-window__body\">{{ code }}</pre>\r\n </div>\r\n </slot>\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<!-- File: packages/vue/src/blocks/OcBlockHeroOrbit.vue | Map: props + default marks -> copy -> visual (ring with marks + center slot / code window) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Hero with a code window and product marks that orbit around it (reduced motion: they stand still).\r\n * `title` + `highlight` + `titleEnd`, or the `title` slot. Slots: lead, actions, center (replaces the code window;\r\n * give it class=\"oc-block-orbit-center\"). Classes: .oc-block-orbit-visual, -ring, -mark (--oc-orbit-angle), -center\r\n */\r\nimport { computed } from 'vue'\r\n\r\nexport interface HeroOrbitMark {\r\n glyph: string\r\n accent: string\r\n}\r\nconst props = withDefaults(\r\n defineProps<{\r\n eyebrow?: string\r\n title?: string\r\n highlight?: string\r\n titleEnd?: string\r\n lead?: string\r\n code?: string\r\n codeTitle?: string\r\n marks?: HeroOrbitMark[]\r\n duration?: string\r\n }>(),\r\n {\r\n code: '',\r\n marks: () => [\r\n { glyph: '◆', accent: 'green' },\r\n { glyph: '◉', accent: 'violet' },\r\n { glyph: '▲', accent: 'orange' },\r\n { glyph: '★', accent: 'cyan' },\r\n { glyph: '♥', accent: 'red' },\r\n { glyph: '☀', accent: 'yellow' },\r\n ],\r\n },\r\n)\r\n// Spread the marks evenly over the ring.\r\nconst angle = (i: number) => `--oc-orbit-angle: ${(360 / props.marks.length) * i}deg`\r\nconst visualStyle = computed(() => (props.duration ? `--oc-orbit-duration: ${props.duration}` : undefined))\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-block-orbit oc-section-pad\">\r\n <div class=\"oc-container oc-split\">\r\n <div>\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h1 class=\"oc-display\">\r\n <slot name=\"title\">{{ title }} <span v-if=\"highlight\" class=\"oc-text-gradient\">{{ highlight }}</span>{{ titleEnd }}</slot>\r\n </h1>\r\n <p v-if=\"lead || $slots.lead\" class=\"oc-lead\"><slot name=\"lead\">{{ lead }}</slot></p>\r\n <div v-if=\"$slots.actions\" class=\"flex flex-wrap gap-1 mt-2\"><slot name=\"actions\" /></div>\r\n </div>\r\n <div class=\"oc-block-orbit-visual\" :style=\"visualStyle\">\r\n <div class=\"oc-block-orbit-ring\" aria-hidden=\"true\">\r\n <span v-for=\"(mark, i) in marks\" :key=\"i\" class=\"oc-block-orbit-mark\" :style=\"angle(i)\">\r\n <span :class=\"['oc-product-mark oc-product-mark--sm', `oc-accent--${mark.accent}`]\">{{ mark.glyph }}</span>\r\n </span>\r\n </div>\r\n <slot name=\"center\">\r\n <div class=\"oc-code-window oc-block-orbit-center\">\r\n <div class=\"oc-code-window__bar\"><i></i><i></i><i></i><span v-if=\"codeTitle\" class=\"oc-code-window__title\">{{ codeTitle }}</span></div>\r\n <pre class=\"oc-code-window__body\">{{ code }}</pre>\r\n </div>\r\n </slot>\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Hero with text left and visual right. Slots: actions, visual. Classes: .oc-block-hero-split, -actions, -visual */\r\ndefineProps<{ title?: string; text?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-hero-split\">\r\n <div>\r\n <h1 v-if=\"title\">{{ title }}</h1>\r\n <p v-if=\"text\">{{ text }}</p>\r\n <div v-if=\"$slots.actions\" class=\"oc-block-hero-actions justify-start\"><slot name=\"actions\" /></div>\r\n </div>\r\n <div class=\"oc-block-hero-visual\"><slot name=\"visual\" /></div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Page header with icon tile, title, intro, meta badges and an action row.\r\n * Slots: icon, meta (badges), actions. Classes: .oc-block-modulehead, -band, -icon, -body, -title, -intro, -meta, -actions\r\n */\r\ndefineProps<{ title: string; intro?: string }>()\r\n</script>\r\n\r\n<template>\r\n <header class=\"oc-block-modulehead\">\r\n <div class=\"oc-block-modulehead-band\">\r\n <span v-if=\"$slots.icon\" class=\"oc-block-modulehead-icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <div class=\"oc-block-modulehead-body\">\r\n <h1 class=\"oc-block-modulehead-title\">{{ title }}</h1>\r\n <p v-if=\"intro\" class=\"oc-block-modulehead-intro\">{{ intro }}</p>\r\n <div v-if=\"$slots.meta\" class=\"oc-block-modulehead-meta\"><slot name=\"meta\" /></div>\r\n </div>\r\n </div>\r\n <div v-if=\"$slots.actions\" class=\"oc-block-modulehead-actions\"><slot name=\"actions\" /></div>\r\n </header>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Page header (the oc-hero used on every docs page): eyebrow, title, text, actions. Classes: .oc-hero, -eyebrow, -title, -text, -actions */\r\ndefineProps<{ eyebrow?: string; title: string; text?: string }>()\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-hero\">\r\n <span v-if=\"eyebrow\" class=\"oc-hero-eyebrow\">{{ eyebrow }}</span>\r\n <h1 class=\"oc-hero-title\">{{ title }}</h1>\r\n <p v-if=\"text\" class=\"oc-hero-text\">{{ text }}</p>\r\n <div v-if=\"$slots.actions\" class=\"oc-hero-actions\"><slot name=\"actions\" /></div>\r\n </section>\r\n</template>\r\n","<!-- File: packages/vue/src/blocks/OcBlockPortfolioGrid.vue | Map: props -> head (title, lead, link slot) -> grid of OcProjectCard -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Portfolio section: heading, lead, \"all projects\" link and a grid of project cards.\r\n * `title` + `highlight` (gradient word). Slots: link, default (own cards). Classes: .oc-block-portfolio (--two), -head, -lead, -grid\r\n */\r\nimport OcProjectCard from '../components/OcProjectCard.vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface PortfolioGridProject {\r\n href: string\r\n name: string\r\n type?: string\r\n meta?: string\r\n more?: string\r\n image?: string\r\n imageAlt?: string\r\n accent?: string\r\n}\r\nwithDefaults(\r\n defineProps<{\r\n eyebrow?: string\r\n title?: string\r\n highlight?: string\r\n lead?: string\r\n projects?: PortfolioGridProject[]\r\n two?: boolean\r\n }>(),\r\n { projects: () => [] },\r\n)\r\nconst titleId = useUid('oc-portfolio-title')\r\n</script>\r\n\r\n<template>\r\n <section :class=\"['oc-block-portfolio oc-section-pad', two && 'oc-block-portfolio--two']\" :aria-labelledby=\"titleId\">\r\n <div class=\"oc-container\">\r\n <div class=\"oc-block-portfolio-head\">\r\n <div>\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h2 :id=\"titleId\" class=\"oc-display oc-display--md\">{{ title }} <span v-if=\"highlight\" class=\"oc-text-gradient\">{{ highlight }}</span></h2>\r\n <p v-if=\"lead\" class=\"oc-block-portfolio-lead\">{{ lead }}</p>\r\n </div>\r\n <slot name=\"link\" />\r\n </div>\r\n <div class=\"oc-block-portfolio-grid\">\r\n <slot>\r\n <OcProjectCard\r\n v-for=\"(p, i) in projects\"\r\n :key=\"i\"\r\n :class=\"p.accent && `oc-accent--${p.accent}`\"\r\n :href=\"p.href\"\r\n :name=\"p.name\"\r\n :type=\"p.type\"\r\n :meta=\"p.meta\"\r\n :more=\"p.more ?? 'View project'\"\r\n :image=\"p.image\"\r\n :image-alt=\"p.imageAlt\"\r\n />\r\n </slot>\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Pricing cards with a featured plan. Emits `select` with the plan when its button is clicked.\r\n * Slot `action` (scoped: { plan }) replaces the button. Classes: .oc-block-pricing, -grid, -card(--featured),\r\n * -name, -desc, -price, -features\r\n */\r\nexport interface PricingPlan {\r\n name: string\r\n description?: string\r\n price: string\r\n /** e.g. \"/month\" */\r\n period?: string\r\n features: string[]\r\n cta: string\r\n featured?: boolean\r\n}\r\ndefineProps<{ title?: string; description?: string; plans: PricingPlan[] }>()\r\ndefineEmits<{ select: [plan: PricingPlan] }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-pricing\">\r\n <h2 v-if=\"title\">{{ title }}</h2>\r\n <p v-if=\"description\">{{ description }}</p>\r\n <div class=\"oc-block-pricing-grid\">\r\n <div v-for=\"plan in plans\" :key=\"plan.name\" :class=\"['oc-block-pricing-card', plan.featured && 'oc-block-pricing-card--featured']\">\r\n <p class=\"oc-block-pricing-name\">{{ plan.name }}</p>\r\n <p v-if=\"plan.description\" class=\"oc-block-pricing-desc\">{{ plan.description }}</p>\r\n <p class=\"oc-block-pricing-price\">{{ plan.price }} <span v-if=\"plan.period\">{{ plan.period }}</span></p>\r\n <ul class=\"oc-block-pricing-features\">\r\n <li v-for=\"f in plan.features\" :key=\"f\">{{ f }}</li>\r\n </ul>\r\n <slot name=\"action\" :plan=\"plan\">\r\n <button :class=\"['oc-btn', !plan.featured && 'oc-btn--outline']\" type=\"button\" style=\"width: 100%\" @click=\"$emit('select', plan)\">{{ plan.cta }}</button>\r\n </slot>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Numbered steps (CSS counter) + an endless marquee of technologies (the list is rendered twice, the copy aria-hidden).\r\n * Classes: .oc-section-pad, .oc-container, .oc-eyebrow, .oc-display(--md), .oc-text-gradient, .oc-steps, .oc-marquee\r\n */\r\nexport interface ProcessStep {\r\n title: string\r\n text: string\r\n}\r\ndefineProps<{\r\n eyebrow?: string\r\n title?: string\r\n highlight?: string\r\n steps: ProcessStep[]\r\n marquee?: string[]\r\n marqueeLabel?: string\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-section-pad\">\r\n <div class=\"oc-container\">\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h2 class=\"oc-display oc-display--md\">{{ title }} <span v-if=\"highlight\" class=\"oc-text-gradient\">{{ highlight }}</span></h2>\r\n <ol class=\"oc-steps\">\r\n <li v-for=\"step in steps\" :key=\"step.title\">\r\n <h3>{{ step.title }}</h3>\r\n <p>{{ step.text }}</p>\r\n </li>\r\n </ol>\r\n <div v-if=\"marquee?.length\" class=\"oc-marquee mt-4\" :aria-label=\"marqueeLabel\">\r\n <div class=\"oc-marquee__track\">\r\n <span v-for=\"item in marquee\" :key=\"item\" class=\"oc-marquee__item\">{{ item }}</span>\r\n <span v-for=\"item in marquee\" :key=\"'copy-' + item\" class=\"oc-marquee__item\" aria-hidden=\"true\">{{ item }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Section title + grid of product cards, each with its own accent color (oc-accent--green|orange|violet|cyan...).\r\n * Classes: .oc-card-grid, .oc-product-card, -top, -name, -tagline, -summary, -more, .oc-icon-tile, .oc-pill\r\n */\r\nexport interface ProductItem {\r\n name: string\r\n tagline?: string\r\n summary?: string\r\n /** Pill text, e.g. \"Own product\" */\r\n tag?: string\r\n /** Glyph for the icon tile */\r\n icon?: string\r\n /** Accent name: green, orange, violet, cyan, ... */\r\n accent?: string\r\n href?: string\r\n more?: string\r\n}\r\ndefineProps<{ eyebrow?: string; title?: string; highlight?: string; products: ProductItem[] }>()\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-section-pad\">\r\n <div class=\"oc-container\">\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h2 class=\"oc-display oc-display--md\">{{ title }} <span v-if=\"highlight\" class=\"oc-text-gradient\">{{ highlight }}</span></h2>\r\n <div class=\"oc-card-grid\">\r\n <a v-for=\"p in products\" :key=\"p.name\" :class=\"['oc-product-card', p.accent && `oc-accent--${p.accent}`]\" :href=\"p.href ?? '#'\">\r\n <div class=\"oc-product-card__top\">\r\n <span class=\"oc-icon-tile\" aria-hidden=\"true\">{{ p.icon }}</span>\r\n <span v-if=\"p.tag\" class=\"oc-pill\">{{ p.tag }}</span>\r\n </div>\r\n <h3 class=\"oc-product-card__name\">{{ p.name }}</h3>\r\n <p v-if=\"p.tagline\" class=\"oc-product-card__tagline\">{{ p.tagline }}</p>\r\n <p v-if=\"p.summary\" class=\"oc-product-card__summary\">{{ p.summary }}</p>\r\n <span v-if=\"p.more\" class=\"oc-product-card__more\">{{ p.more }}</span>\r\n </a>\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<!-- File: packages/vue/src/blocks/OcBlockProfileHeader.vue | Map: props -> banner -> bar (avatar slot, info, actions slot) -> tabs -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Profile / channel header: banner, overhanging avatar, name, meta, bio, actions and link tabs.\r\n * Slots: avatar (initials or <img>), actions, bio, panel-0, panel-1 … (with panel slots the tabs switch on the page\r\n * itself: radios + panels, CSS only; without them the tabs are links). Classes: .oc-block-profile (--compact), -banner, -bar, -avatar,\r\n * -info, -name, -meta, -bio, -actions, -tabs, -tab (aria-current=\"page\")\r\n */\r\nimport { computed, useSlots } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface ProfileHeaderTab {\r\n label: string\r\n href?: string\r\n current?: boolean\r\n}\r\nconst props = withDefaults(\r\n defineProps<{\r\n name: string\r\n meta?: string\r\n bio?: string\r\n initials?: string\r\n banner?: string\r\n tabs?: ProfileHeaderTab[]\r\n tabsLabel?: string\r\n compact?: boolean\r\n headingLevel?: 1 | 2\r\n }>(),\r\n { tabs: () => [], tabsLabel: 'Profile sections', headingLevel: 1 },\r\n)\r\nconst nameId = useUid('oc-profile-name')\r\nconst slots = useSlots()\r\nconst panels = computed(() => props.tabs.some((_, i) => Boolean(slots[`panel-${i}`])))\r\nconst bannerStyle = computed(() => (props.banner ? `--oc-profile-banner: url(\"${props.banner}\")` : undefined))\r\n</script>\r\n\r\n<template>\r\n <section :class=\"['oc-block-profile', compact && 'oc-block-profile--compact']\" :aria-labelledby=\"nameId\">\r\n <div class=\"oc-block-profile-banner\" :style=\"bannerStyle\" aria-hidden=\"true\"></div>\r\n <div class=\"oc-block-profile-bar\">\r\n <span class=\"oc-avatar oc-block-profile-avatar\" aria-hidden=\"true\"><slot name=\"avatar\">{{ initials }}</slot></span>\r\n <div class=\"oc-block-profile-info\">\r\n <component :is=\"headingLevel === 1 ? 'h1' : 'h2'\" :id=\"nameId\" class=\"oc-block-profile-name\">{{ name }}</component>\r\n <p v-if=\"meta\" class=\"oc-block-profile-meta\">{{ meta }}</p>\r\n <p v-if=\"bio || $slots.bio\" class=\"oc-block-profile-bio\"><slot name=\"bio\">{{ bio }}</slot></p>\r\n </div>\r\n <div v-if=\"$slots.actions\" class=\"oc-block-profile-actions\"><slot name=\"actions\" /></div>\r\n </div>\r\n <template v-if=\"tabs.length && panels\">\r\n <div class=\"oc-block-profile-tabs\" role=\"radiogroup\" :aria-label=\"tabsLabel\">\r\n <label v-for=\"(tab, i) in tabs\" :key=\"i\" class=\"oc-block-profile-tab\"><input type=\"radio\" :name=\"`${nameId}-tab`\" :checked=\"tab.current ?? i === 0\">{{ tab.label }}</label>\r\n </div>\r\n <div class=\"oc-block-profile-panels\">\r\n <div v-for=\"(tab, i) in tabs\" :key=\"i\" class=\"oc-block-profile-panel\"><slot :name=\"`panel-${i}`\" /></div>\r\n </div>\r\n </template>\r\n <nav v-else-if=\"tabs.length\" class=\"oc-block-profile-tabs\" :aria-label=\"tabsLabel\">\r\n <a v-for=\"(tab, i) in tabs\" :key=\"i\" class=\"oc-block-profile-tab\" :href=\"tab.href\" :aria-current=\"tab.current ? 'page' : undefined\">{{ tab.label }}</a>\r\n </nav>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Portfolio grid: project cards with a browser frame around the screenshot.\r\n * `background` is any CSS background (use Omnia tokens, e.g. linear-gradient(135deg, var(--color-green-40), var(--color-teal-80))); `image` shows an img.\r\n * Classes: .oc-card-grid, .oc-product-card, .oc-browser-frame(__bar/__body), .oc-pill--accent\r\n */\r\nexport interface ShowcaseProject {\r\n name: string\r\n summary?: string\r\n tag?: string\r\n accent?: string\r\n href?: string\r\n background?: string\r\n image?: string\r\n more?: string\r\n}\r\ndefineProps<{ eyebrow?: string; title?: string; highlight?: string; projects: ShowcaseProject[] }>()\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-section-pad\">\r\n <div class=\"oc-container\">\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h2 class=\"oc-display oc-display--md\">{{ title }} <span v-if=\"highlight\" class=\"oc-text-gradient\">{{ highlight }}</span></h2>\r\n <div class=\"oc-card-grid\" style=\"--oc-card-min: 26rem\">\r\n <a v-for=\"p in projects\" :key=\"p.name\" :class=\"['oc-product-card', p.accent && `oc-accent--${p.accent}`, 'p-0 overflow-hidden']\" :href=\"p.href ?? '#'\">\r\n <span class=\"oc-browser-frame m-1\">\r\n <span class=\"oc-browser-frame__bar\"><i></i><i></i><i></i></span>\r\n <span class=\"oc-browser-frame__body\" :style=\"p.background ? { background: p.background } : undefined\">\r\n <img v-if=\"p.image\" :src=\"p.image\" alt=\"\" />\r\n </span>\r\n </span>\r\n <span class=\"grid gap-0.5 p-1.5 pt-0\">\r\n <span v-if=\"p.tag\" class=\"oc-pill oc-pill--accent\">{{ p.tag }}</span>\r\n <span class=\"oc-product-card__name\">{{ p.name }}</span>\r\n <span v-if=\"p.summary\" class=\"oc-product-card__summary\">{{ p.summary }}</span>\r\n <span v-if=\"p.more\" class=\"oc-product-card__more\">{{ p.more }}</span>\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Brand column, link columns, a contact column and a bottom bar.\r\n * Slots: brand (the logo link), about (default: `about` text), bottom-start, bottom-end.\r\n * Classes: .oc-site-footer, __grid, __about, __title, __list, __bottom, .oc-site-header__brand\r\n */\r\nexport interface SiteFooterColumn {\r\n title: string\r\n links: { label: string; href: string }[]\r\n}\r\nexport interface SiteFooterContact {\r\n title: string\r\n lines: { label: string; href?: string }[]\r\n}\r\ndefineProps<{\r\n about?: string\r\n columns?: SiteFooterColumn[]\r\n contact?: SiteFooterContact\r\n copyright?: string\r\n credit?: string\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <footer class=\"oc-site-footer\">\r\n <div class=\"oc-container\">\r\n <div class=\"oc-site-footer__grid\">\r\n <div class=\"oc-site-footer__about\">\r\n <slot name=\"brand\" />\r\n <p v-if=\"about\">{{ about }}</p>\r\n </div>\r\n <div v-for=\"col in columns\" :key=\"col.title\">\r\n <h2 class=\"oc-site-footer__title\">{{ col.title }}</h2>\r\n <ul class=\"oc-site-footer__list\">\r\n <li v-for=\"link in col.links\" :key=\"link.href + link.label\"><a :href=\"link.href\">{{ link.label }}</a></li>\r\n </ul>\r\n </div>\r\n <div v-if=\"contact\">\r\n <h2 class=\"oc-site-footer__title\">{{ contact.title }}</h2>\r\n <address class=\"oc-site-footer__list\">\r\n <template v-for=\"line in contact.lines\" :key=\"line.label\">\r\n <a v-if=\"line.href\" :href=\"line.href\">{{ line.label }}</a>\r\n <span v-else>{{ line.label }}</span>\r\n </template>\r\n </address>\r\n </div>\r\n </div>\r\n <div v-if=\"copyright || credit || $slots['bottom-start'] || $slots['bottom-end']\" class=\"oc-site-footer__bottom\">\r\n <span><slot name=\"bottom-start\">{{ copyright }}</slot></span>\r\n <span><slot name=\"bottom-end\">{{ credit }}</slot></span>\r\n </div>\r\n </div>\r\n </footer>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Sticky header that turns into glass after scrolling; the mobile menu is a popover. No JavaScript needed.\r\n * Slots: brand (inside the brand link), nav (replaces the items), cta (the trailing button).\r\n * Classes: .oc-site-header, __inner, __brand, __toggle, __nav, .oc-container\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface SiteHeaderLink {\r\n label: string\r\n href: string\r\n current?: boolean\r\n}\r\nwithDefaults(\r\n defineProps<{ items?: SiteHeaderLink[]; homeHref?: string; menuLabel?: string; navLabel?: string }>(),\r\n { items: () => [], homeHref: '/', menuLabel: 'Menu', navLabel: 'Main' },\r\n)\r\nconst navId = useUid('oc-site-nav')\r\n</script>\r\n\r\n<template>\r\n <header class=\"oc-site-header\">\r\n <div class=\"oc-container oc-site-header__inner\">\r\n <a class=\"oc-site-header__brand\" :href=\"homeHref\"><slot name=\"brand\" /></a>\r\n <button class=\"oc-site-header__toggle\" type=\"button\" :popovertarget=\"navId\" :aria-label=\"menuLabel\">☰</button>\r\n <nav :id=\"navId\" class=\"oc-site-header__nav\" popover :aria-label=\"navLabel\">\r\n <slot name=\"nav\">\r\n <a v-for=\"item in items\" :key=\"item.href + item.label\" :href=\"item.href\" :aria-current=\"item.current ? 'page' : undefined\">{{ item.label }}</a>\r\n </slot>\r\n <slot name=\"cta\" />\r\n </nav>\r\n </div>\r\n </header>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Highlighted flagship product: badge, big title with icon tile, tagline, copy, button and a module list.\r\n * Slots: cta (default: a gradient link from `ctaLabel` / `ctaHref`). Classes: .oc-spotlight(__title/__tagline/__modules),\r\n * .oc-accent--<name>, .oc-pill--accent, .oc-status-dot, .oc-icon-tile(--lg/--sm), .oc-lead\r\n */\r\nexport interface SpotlightModule {\r\n icon?: string\r\n label: string\r\n}\r\ndefineProps<{\r\n accent?: string\r\n badge?: string\r\n icon?: string\r\n title: string\r\n tagline?: string\r\n lead?: string\r\n ctaLabel?: string\r\n ctaHref?: string\r\n modules?: SpotlightModule[]\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-section-pad\">\r\n <div class=\"oc-container\">\r\n <div :class=\"['oc-spotlight', accent && `oc-accent--${accent}`]\">\r\n <div>\r\n <span v-if=\"badge\" class=\"oc-pill oc-pill--accent\"><span class=\"oc-status-dot\"></span>{{ badge }}</span>\r\n <h2 class=\"oc-spotlight__title\">\r\n <span v-if=\"icon\" class=\"oc-icon-tile oc-icon-tile--lg\" aria-hidden=\"true\">{{ icon }}</span>{{ title }}\r\n </h2>\r\n <p v-if=\"tagline\" class=\"oc-spotlight__tagline\">{{ tagline }}</p>\r\n <p v-if=\"lead\" class=\"oc-lead\">{{ lead }}</p>\r\n <slot name=\"cta\">\r\n <a v-if=\"ctaLabel\" class=\"oc-btn oc-btn--gradient oc-btn--lg\" :href=\"ctaHref ?? '#'\">{{ ctaLabel }}</a>\r\n </slot>\r\n </div>\r\n <ul v-if=\"modules?.length\" class=\"oc-spotlight__modules\">\r\n <li v-for=\"m in modules\" :key=\"m.label\">\r\n <span class=\"oc-icon-tile oc-icon-tile--sm\" aria-hidden=\"true\">{{ m.icon }}</span>{{ m.label }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Key figures row. Classes: .oc-block-stats, -stat, -stat-value, -stat-label */\r\nexport interface StatItem {\r\n value: string\r\n label: string\r\n}\r\ndefineProps<{ items: StatItem[] }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-stats\">\r\n <div v-for=\"item in items\" :key=\"item.label\" class=\"oc-block-stat\">\r\n <div class=\"oc-block-stat-value\">{{ item.value }}</div>\r\n <div class=\"oc-block-stat-label\">{{ item.label }}</div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Key figures that count up when they scroll into view (CSS only). Classes: .oc-block-stats, -stat, -stat-value + .oc-counter, -stat-label */\r\nimport OcCounter from '../components/OcCounter.vue'\r\n\r\nexport interface CounterStat {\r\n to: number\r\n suffix?: string\r\n label: string\r\n}\r\ndefineProps<{ items: CounterStat[] }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-stats\">\r\n <div v-for=\"item in items\" :key=\"item.label\" class=\"oc-block-stat\">\r\n <OcCounter class=\"oc-block-stat-value\" :to=\"item.to\" :suffix=\"item.suffix\" />\r\n <span class=\"oc-block-stat-label\">{{ item.label }}</span>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Member rows with avatar, role badge and a row action menu (popover). Emits `action` ({ member, action }).\r\n * Slot `meta` (scoped: { member }) adds extra badges. Classes: .oc-block-team, -row, -meta, .oc-user, .oc-dropdown-menu\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface TeamAction {\r\n label: string\r\n href?: string\r\n /** Draw a separator line before this action */\r\n separator?: boolean\r\n}\r\nexport interface TeamMember {\r\n name: string\r\n email?: string\r\n initials?: string\r\n role?: string\r\n roleVariant?: 'default' | 'secondary' | 'outline' | 'destructive' | 'success' | 'warning' | 'info'\r\n actions?: TeamAction[]\r\n}\r\ndefineProps<{ members: TeamMember[]; actionsLabel?: string }>()\r\ndefineEmits<{ action: [payload: { member: TeamMember; action: TeamAction }] }>()\r\nconst base = useUid('oc-team-menu')\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-team\">\r\n <div v-for=\"(member, i) in members\" :key=\"member.email ?? member.name\" class=\"oc-block-team-row\">\r\n <div class=\"oc-user\">\r\n <span class=\"oc-avatar\">{{ member.initials }}</span>\r\n <span class=\"oc-user-text\">\r\n <span class=\"oc-user-name\">{{ member.name }}</span>\r\n <span v-if=\"member.email\" class=\"oc-user-email\">{{ member.email }}</span>\r\n </span>\r\n </div>\r\n <div class=\"oc-block-team-meta\">\r\n <span v-if=\"member.role\" :class=\"['oc-badge', member.roleVariant && member.roleVariant !== 'default' && `oc-badge--${member.roleVariant}`]\">{{ member.role }}</span>\r\n <slot name=\"meta\" :member=\"member\" />\r\n <template v-if=\"member.actions?.length\">\r\n <button class=\"oc-btn oc-btn--ghost oc-btn--icon oc-btn--sm\" type=\"button\" :popovertarget=\"`${base}-${i}`\" :aria-label=\"actionsLabel ?? 'Member actions'\">…</button>\r\n <div :id=\"`${base}-${i}`\" class=\"oc-dropdown-menu\" popover>\r\n <template v-for=\"action in member.actions\" :key=\"action.label\">\r\n <div v-if=\"action.separator\" class=\"oc-dropdown-separator\"></div>\r\n <a v-if=\"action.href\" class=\"oc-dropdown-item\" :href=\"action.href\" @click=\"$emit('action', { member, action })\">{{ action.label }}</a>\r\n <button v-else class=\"oc-dropdown-item\" type=\"button\" @click=\"$emit('action', { member, action })\">{{ action.label }}</button>\r\n </template>\r\n </div>\r\n </template>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Authenticator setup: QR, copyable key, OTP code and recovery codes. v-model = the typed code.\r\n * Emits `submit` with the code (form submit of the confirm step). Slot `qr` replaces the QR placeholder.\r\n * Classes: .oc-block-twofactor, -step, -center, -qr; reuses copy-field, otp, recovery-codes components.\r\n */\r\nimport OcCopyField from '../components/OcCopyField.vue'\r\nimport OcOtpInput from '../components/OcOtpInput.vue'\r\nimport OcRecoveryCodes from '../components/OcRecoveryCodes.vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n setupKey: string\r\n recoveryCodes?: string[]\r\n length?: number\r\n scanTitle?: string\r\n scanText?: string\r\n confirmTitle?: string\r\n codeLabel?: string\r\n submitLabel?: string\r\n }>(),\r\n {\r\n length: 6,\r\n scanTitle: '1. Scan the QR code',\r\n scanText: 'Use an authenticator app, or enter the key manually.',\r\n confirmTitle: '2. Confirm with a code',\r\n codeLabel: 'Authentication code',\r\n submitLabel: 'Enable two-factor',\r\n },\r\n)\r\ndefineEmits<{ submit: [code: string] }>()\r\nconst code = defineModel<string>({ default: '' })\r\nconst codeId = useUid('oc-twofactor-code')\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-twofactor\">\r\n <section class=\"oc-block-twofactor-step\">\r\n <div class=\"oc-heading oc-heading--sm\">\r\n <h2 class=\"oc-heading-title\">{{ scanTitle }}</h2>\r\n <p v-if=\"scanText\" class=\"oc-heading-description\">{{ scanText }}</p>\r\n </div>\r\n <div class=\"oc-block-twofactor-center\">\r\n <slot name=\"qr\"><div class=\"oc-block-twofactor-qr\" role=\"img\" aria-label=\"QR code\">QR code</div></slot>\r\n <OcCopyField :value=\"setupKey\" label=\"Setup key\" />\r\n </div>\r\n </section>\r\n <section class=\"oc-block-twofactor-step\">\r\n <div class=\"oc-heading oc-heading--sm\"><h2 class=\"oc-heading-title\">{{ confirmTitle }}</h2></div>\r\n <div class=\"oc-field\">\r\n <label class=\"oc-field-label\" :for=\"codeId\">{{ codeLabel }}</label>\r\n <OcOtpInput :id=\"codeId\" v-model=\"code\" name=\"code\" :length=\"length\" />\r\n </div>\r\n <button class=\"oc-btn\" type=\"submit\" @click=\"$emit('submit', code)\">{{ submitLabel }}</button>\r\n </section>\r\n <section v-if=\"recoveryCodes?.length\" class=\"oc-block-twofactor-step\">\r\n <OcRecoveryCodes :codes=\"recoveryCodes\" />\r\n </section>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Modal wizard: stepper rail on the left, step content and a Back / Next footer.\r\n * v-model:open opens the dialog, v-model:step is the active step index. Emits `finish` on the last step's button.\r\n * Slots: step-<index> (or default, scoped: { step, index }) for the content of each step.\r\n * Classes: dialog.oc-modal > .oc-modal-content--xl, .oc-block-wizard(-rail/-main/-step), .oc-stepper, .oc-modal-footer\r\n */\r\nimport { computed, ref } from 'vue'\r\nimport OcStepper from '../components/OcStepper.vue'\r\nimport { useDialog } from '../composables/useDialog'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n steps: { label: string }[]\r\n backLabel?: string\r\n nextLabel?: string\r\n finishLabel?: string\r\n stepsLabel?: string\r\n /** Text for \"Step 2 of 3\"; receives the 1-based index and the count */\r\n stepText?: (index: number, total: number) => string\r\n }>(),\r\n { backLabel: 'Back', nextLabel: 'Next', finishLabel: 'Finish', stepsLabel: 'Setup steps' },\r\n)\r\nconst emit = defineEmits<{ finish: [] }>()\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst step = defineModel<number>('step', { default: 0 })\r\nconst el = ref<HTMLDialogElement | null>(null)\r\nconst { onClose } = useDialog(open, el)\r\nconst titleId = useUid('oc-wizard-title')\r\nconst last = computed(() => step.value >= props.steps.length - 1)\r\nconst description = computed(() => (props.stepText ?? ((i, n) => `Step ${i} of ${n}`))(step.value + 1, props.steps.length))\r\n\r\nfunction next() {\r\n if (last.value) {\r\n emit('finish')\r\n open.value = false\r\n } else {\r\n step.value++\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <dialog ref=\"el\" class=\"oc-modal\" closedby=\"closerequest\" :aria-labelledby=\"titleId\" @close=\"onClose\">\r\n <div class=\"oc-modal-content oc-modal-content--xl\">\r\n <div class=\"oc-block-wizard\">\r\n <div class=\"oc-block-wizard-rail\">\r\n <OcStepper v-model=\"step\" :steps=\"steps\" :label=\"stepsLabel\" />\r\n </div>\r\n <div class=\"oc-block-wizard-main\">\r\n <div class=\"oc-modal-header\">\r\n <h2 :id=\"titleId\" class=\"oc-modal-title\">{{ steps[step]?.label }}</h2>\r\n <p class=\"oc-modal-description\">{{ description }}</p>\r\n </div>\r\n <div class=\"oc-block-wizard-step\">\r\n <slot :name=\"`step-${step}`\" :step=\"steps[step]\" :index=\"step\"><slot :step=\"steps[step]\" :index=\"step\" /></slot>\r\n </div>\r\n <div class=\"oc-modal-footer\">\r\n <button class=\"oc-btn oc-btn--outline\" type=\"button\" :disabled=\"step === 0\" @click=\"step--\">{{ backLabel }}</button>\r\n <button class=\"oc-btn\" type=\"button\" @click=\"next\">{{ last ? finishLabel : nextLabel }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </dialog>\r\n</template>\r\n","// File: packages/vue/src/index.ts (generated by scripts/generate-index.mjs - do not edit by hand)\nimport type { App, Component } from 'vue'\n\nimport OcAccordion from './components/OcAccordion.vue'\nimport OcAccordionAccent from './components/OcAccordionAccent.vue'\nimport OcAccordionItem from './components/OcAccordionItem.vue'\nimport OcAffixInput from './components/OcAffixInput.vue'\nimport OcAlert from './components/OcAlert.vue'\nimport OcAlertDialog from './components/OcAlertDialog.vue'\nimport OcAlphaTabs from './components/OcAlphaTabs.vue'\nimport OcAspectRatio from './components/OcAspectRatio.vue'\nimport OcAttachment from './components/OcAttachment.vue'\nimport OcAttachmentImage from './components/OcAttachmentImage.vue'\nimport OcAttachmentList from './components/OcAttachmentList.vue'\nimport OcAttachmentThumb from './components/OcAttachmentThumb.vue'\nimport OcAvatar from './components/OcAvatar.vue'\nimport OcAvatarGroup from './components/OcAvatarGroup.vue'\nimport OcAvatarPicker from './components/OcAvatarPicker.vue'\nimport OcBackLink from './components/OcBackLink.vue'\nimport OcBadge from './components/OcBadge.vue'\nimport OcBarcode from './components/OcBarcode.vue'\nimport OcBarcodeInput from './components/OcBarcodeInput.vue'\nimport OcBreadcrumb from './components/OcBreadcrumb.vue'\nimport OcBrowserFrame from './components/OcBrowserFrame.vue'\nimport OcBusyOverlay from './components/OcBusyOverlay.vue'\nimport OcButton from './components/OcButton.vue'\nimport OcButtonGroup from './components/OcButtonGroup.vue'\nimport OcButtonGroupText from './components/OcButtonGroupText.vue'\nimport OcCard from './components/OcCard.vue'\nimport OcChartLine from './components/OcChartLine.vue'\nimport OcChatComposer from './components/OcChatComposer.vue'\nimport OcCheckbox from './components/OcCheckbox.vue'\nimport OcChecklist from './components/OcChecklist.vue'\nimport OcChipFilter from './components/OcChipFilter.vue'\nimport OcCollapsible from './components/OcCollapsible.vue'\nimport OcColorField from './components/OcColorField.vue'\nimport OcColorSelect from './components/OcColorSelect.vue'\nimport OcCommand from './components/OcCommand.vue'\nimport OcConfirmDialog from './components/OcConfirmDialog.vue'\nimport OcCookieConsent from './components/OcCookieConsent.vue'\nimport OcCopyField from './components/OcCopyField.vue'\nimport OcCounter from './components/OcCounter.vue'\nimport OcDataTable from './components/OcDataTable.vue'\nimport OcDataTableName from './components/OcDataTableName.vue'\nimport OcDateField from './components/OcDateField.vue'\nimport OcDecimalInput from './components/OcDecimalInput.vue'\nimport OcDefinitionList from './components/OcDefinitionList.vue'\nimport OcDocViewer from './components/OcDocViewer.vue'\nimport OcDropdown from './components/OcDropdown.vue'\nimport OcDropdownItem from './components/OcDropdownItem.vue'\nimport OcDropdownLabel from './components/OcDropdownLabel.vue'\nimport OcDropdownSeparator from './components/OcDropdownSeparator.vue'\nimport OcDropzone from './components/OcDropzone.vue'\nimport OcEmojiPicker from './components/OcEmojiPicker.vue'\nimport OcEmptyState from './components/OcEmptyState.vue'\nimport OcEntityCard from './components/OcEntityCard.vue'\nimport OcFactList from './components/OcFactList.vue'\nimport OcFilterCounts from './components/OcFilterCounts.vue'\nimport OcFlipCard from './components/OcFlipCard.vue'\nimport OcFormField from './components/OcFormField.vue'\nimport OcFormSection from './components/OcFormSection.vue'\nimport OcGallery from './components/OcGallery.vue'\nimport OcGlass from './components/OcGlass.vue'\nimport OcGlassBar from './components/OcGlassBar.vue'\nimport OcGlassPanel from './components/OcGlassPanel.vue'\nimport OcGreeting from './components/OcGreeting.vue'\nimport OcHeading from './components/OcHeading.vue'\nimport OcHoverCard from './components/OcHoverCard.vue'\nimport OcImageZoom from './components/OcImageZoom.vue'\nimport OcInput from './components/OcInput.vue'\nimport OcInputGroup from './components/OcInputGroup.vue'\nimport OcItem from './components/OcItem.vue'\nimport OcItemGroup from './components/OcItemGroup.vue'\nimport OcItemSeparator from './components/OcItemSeparator.vue'\nimport OcKbd from './components/OcKbd.vue'\nimport OcKbdGroup from './components/OcKbdGroup.vue'\nimport OcLabel from './components/OcLabel.vue'\nimport OcLanguageSelect from './components/OcLanguageSelect.vue'\nimport OcLauncherCard from './components/OcLauncherCard.vue'\nimport OcLazyImage from './components/OcLazyImage.vue'\nimport OcLightbox from './components/OcLightbox.vue'\nimport OcLinkArrow from './components/OcLinkArrow.vue'\nimport OcLinkRow from './components/OcLinkRow.vue'\nimport OcListToolbar from './components/OcListToolbar.vue'\nimport OcLiveFrame from './components/OcLiveFrame.vue'\nimport OcMarquee from './components/OcMarquee.vue'\nimport OcMediaCard from './components/OcMediaCard.vue'\nimport OcMediaRow from './components/OcMediaRow.vue'\nimport OcMediaThumb from './components/OcMediaThumb.vue'\nimport OcMessage from './components/OcMessage.vue'\nimport OcMessageList from './components/OcMessageList.vue'\nimport OcMessageThread from './components/OcMessageThread.vue'\nimport OcMeterRow from './components/OcMeterRow.vue'\nimport OcModal from './components/OcModal.vue'\nimport OcNameCard from './components/OcNameCard.vue'\nimport OcNavmenu from './components/OcNavmenu.vue'\nimport OcNavmenuList from './components/OcNavmenuList.vue'\nimport OcNextTeaser from './components/OcNextTeaser.vue'\nimport OcNumberInput from './components/OcNumberInput.vue'\nimport OcOtpInput from './components/OcOtpInput.vue'\nimport OcPageHeader from './components/OcPageHeader.vue'\nimport OcPagination from './components/OcPagination.vue'\nimport OcPasswordInput from './components/OcPasswordInput.vue'\nimport OcPasswordRequirements from './components/OcPasswordRequirements.vue'\nimport OcPhoneInput from './components/OcPhoneInput.vue'\nimport OcPopover from './components/OcPopover.vue'\nimport OcPrice from './components/OcPrice.vue'\nimport OcPriceCard from './components/OcPriceCard.vue'\nimport OcProductMark from './components/OcProductMark.vue'\nimport OcProgress from './components/OcProgress.vue'\nimport OcProjectCard from './components/OcProjectCard.vue'\nimport OcProse from './components/OcProse.vue'\nimport OcQuantity from './components/OcQuantity.vue'\nimport OcRadio from './components/OcRadio.vue'\nimport OcRadioGroup from './components/OcRadioGroup.vue'\nimport OcRating from './components/OcRating.vue'\nimport OcRatingInput from './components/OcRatingInput.vue'\nimport OcRecoveryCodes from './components/OcRecoveryCodes.vue'\nimport OcRibbon from './components/OcRibbon.vue'\nimport OcScrollArea from './components/OcScrollArea.vue'\nimport OcSegmented from './components/OcSegmented.vue'\nimport OcSelect from './components/OcSelect.vue'\nimport OcSeparator from './components/OcSeparator.vue'\nimport OcSeverityCard from './components/OcSeverityCard.vue'\nimport OcSheet from './components/OcSheet.vue'\nimport OcSidebar from './components/OcSidebar.vue'\nimport OcSidebarCollapsible from './components/OcSidebarCollapsible.vue'\nimport OcSidebarGroup from './components/OcSidebarGroup.vue'\nimport OcSidebarMenu from './components/OcSidebarMenu.vue'\nimport OcSidebarMenuButton from './components/OcSidebarMenuButton.vue'\nimport OcSidebarSeparator from './components/OcSidebarSeparator.vue'\nimport OcSkeleton from './components/OcSkeleton.vue'\nimport OcSlider from './components/OcSlider.vue'\nimport OcSortableRow from './components/OcSortableRow.vue'\nimport OcSpecList from './components/OcSpecList.vue'\nimport OcSpinner from './components/OcSpinner.vue'\nimport OcStackCard from './components/OcStackCard.vue'\nimport OcStackList from './components/OcStackList.vue'\nimport OcStatCard from './components/OcStatCard.vue'\nimport OcStatus from './components/OcStatus.vue'\nimport OcStatusDot from './components/OcStatusDot.vue'\nimport OcStepper from './components/OcStepper.vue'\nimport OcStock from './components/OcStock.vue'\nimport OcSwitch from './components/OcSwitch.vue'\nimport OcTable from './components/OcTable.vue'\nimport OcTableActions from './components/OcTableActions.vue'\nimport OcTableCompact from './components/OcTableCompact.vue'\nimport OcTabs from './components/OcTabs.vue'\nimport OcTagInput from './components/OcTagInput.vue'\nimport OcTerminalLog from './components/OcTerminalLog.vue'\nimport OcTextarea from './components/OcTextarea.vue'\nimport OcThemeSwitch from './components/OcThemeSwitch.vue'\nimport OcTimeInput from './components/OcTimeInput.vue'\nimport OcTimeline from './components/OcTimeline.vue'\nimport OcTitlebar from './components/OcTitlebar.vue'\nimport OcTitlebarBody from './components/OcTitlebarBody.vue'\nimport OcTitlebarButton from './components/OcTitlebarButton.vue'\nimport OcTitlebarWindow from './components/OcTitlebarWindow.vue'\nimport OcToast from './components/OcToast.vue'\nimport OcToastContainer from './components/OcToastContainer.vue'\nimport OcToggle from './components/OcToggle.vue'\nimport OcToggleField from './components/OcToggleField.vue'\nimport OcToggleGroup from './components/OcToggleGroup.vue'\nimport OcTooltip from './components/OcTooltip.vue'\nimport OcTopProgress from './components/OcTopProgress.vue'\nimport OcTree from './components/OcTree.vue'\nimport OcUpgradeBanner from './components/OcUpgradeBanner.vue'\nimport OcUser from './components/OcUser.vue'\nimport OcVersionBanner from './components/OcVersionBanner.vue'\nimport OcWatermark from './components/OcWatermark.vue'\nimport OcBlockAboutTimeline from './blocks/OcBlockAboutTimeline.vue'\nimport OcBlockAppHeader from './blocks/OcBlockAppHeader.vue'\nimport OcBlockAppShell from './blocks/OcBlockAppShell.vue'\nimport OcBlockAuth from './blocks/OcBlockAuth.vue'\nimport OcBlockAuthSplit from './blocks/OcBlockAuthSplit.vue'\nimport OcBlockContactGrid from './blocks/OcBlockContactGrid.vue'\nimport OcBlockCta from './blocks/OcBlockCta.vue'\nimport OcBlockDataTable from './blocks/OcBlockDataTable.vue'\nimport OcBlockFaq from './blocks/OcBlockFaq.vue'\nimport OcBlockFeatures from './blocks/OcBlockFeatures.vue'\nimport OcBlockFooter from './blocks/OcBlockFooter.vue'\nimport OcBlockFormPage from './blocks/OcBlockFormPage.vue'\nimport OcBlockHero from './blocks/OcBlockHero.vue'\nimport OcBlockHeroCode from './blocks/OcBlockHeroCode.vue'\nimport OcBlockHeroOrbit from './blocks/OcBlockHeroOrbit.vue'\nimport OcBlockHeroSplit from './blocks/OcBlockHeroSplit.vue'\nimport OcBlockModuleHeader from './blocks/OcBlockModuleHeader.vue'\nimport OcBlockPageHero from './blocks/OcBlockPageHero.vue'\nimport OcBlockPortfolioGrid from './blocks/OcBlockPortfolioGrid.vue'\nimport OcBlockPricing from './blocks/OcBlockPricing.vue'\nimport OcBlockProcess from './blocks/OcBlockProcess.vue'\nimport OcBlockProductGrid from './blocks/OcBlockProductGrid.vue'\nimport OcBlockProfileHeader from './blocks/OcBlockProfileHeader.vue'\nimport OcBlockShowcase from './blocks/OcBlockShowcase.vue'\nimport OcBlockSiteFooter from './blocks/OcBlockSiteFooter.vue'\nimport OcBlockSiteHeader from './blocks/OcBlockSiteHeader.vue'\nimport OcBlockSpotlight from './blocks/OcBlockSpotlight.vue'\nimport OcBlockStats from './blocks/OcBlockStats.vue'\nimport OcBlockStatsCounter from './blocks/OcBlockStatsCounter.vue'\nimport OcBlockTeamList from './blocks/OcBlockTeamList.vue'\nimport OcBlockTwoFactor from './blocks/OcBlockTwoFactor.vue'\nimport OcBlockWizardDialog from './blocks/OcBlockWizardDialog.vue'\n\nexport {\n OcAccordion,\n OcAccordionAccent,\n OcAccordionItem,\n OcAffixInput,\n OcAlert,\n OcAlertDialog,\n OcAlphaTabs,\n OcAspectRatio,\n OcAttachment,\n OcAttachmentImage,\n OcAttachmentList,\n OcAttachmentThumb,\n OcAvatar,\n OcAvatarGroup,\n OcAvatarPicker,\n OcBackLink,\n OcBadge,\n OcBarcode,\n OcBarcodeInput,\n OcBreadcrumb,\n OcBrowserFrame,\n OcBusyOverlay,\n OcButton,\n OcButtonGroup,\n OcButtonGroupText,\n OcCard,\n OcChartLine,\n OcChatComposer,\n OcCheckbox,\n OcChecklist,\n OcChipFilter,\n OcCollapsible,\n OcColorField,\n OcColorSelect,\n OcCommand,\n OcConfirmDialog,\n OcCookieConsent,\n OcCopyField,\n OcCounter,\n OcDataTable,\n OcDataTableName,\n OcDateField,\n OcDecimalInput,\n OcDefinitionList,\n OcDocViewer,\n OcDropdown,\n OcDropdownItem,\n OcDropdownLabel,\n OcDropdownSeparator,\n OcDropzone,\n OcEmojiPicker,\n OcEmptyState,\n OcEntityCard,\n OcFactList,\n OcFilterCounts,\n OcFlipCard,\n OcFormField,\n OcFormSection,\n OcGallery,\n OcGlass,\n OcGlassBar,\n OcGlassPanel,\n OcGreeting,\n OcHeading,\n OcHoverCard,\n OcImageZoom,\n OcInput,\n OcInputGroup,\n OcItem,\n OcItemGroup,\n OcItemSeparator,\n OcKbd,\n OcKbdGroup,\n OcLabel,\n OcLanguageSelect,\n OcLauncherCard,\n OcLazyImage,\n OcLightbox,\n OcLinkArrow,\n OcLinkRow,\n OcListToolbar,\n OcLiveFrame,\n OcMarquee,\n OcMediaCard,\n OcMediaRow,\n OcMediaThumb,\n OcMessage,\n OcMessageList,\n OcMessageThread,\n OcMeterRow,\n OcModal,\n OcNameCard,\n OcNavmenu,\n OcNavmenuList,\n OcNextTeaser,\n OcNumberInput,\n OcOtpInput,\n OcPageHeader,\n OcPagination,\n OcPasswordInput,\n OcPasswordRequirements,\n OcPhoneInput,\n OcPopover,\n OcPrice,\n OcPriceCard,\n OcProductMark,\n OcProgress,\n OcProjectCard,\n OcProse,\n OcQuantity,\n OcRadio,\n OcRadioGroup,\n OcRating,\n OcRatingInput,\n OcRecoveryCodes,\n OcRibbon,\n OcScrollArea,\n OcSegmented,\n OcSelect,\n OcSeparator,\n OcSeverityCard,\n OcSheet,\n OcSidebar,\n OcSidebarCollapsible,\n OcSidebarGroup,\n OcSidebarMenu,\n OcSidebarMenuButton,\n OcSidebarSeparator,\n OcSkeleton,\n OcSlider,\n OcSortableRow,\n OcSpecList,\n OcSpinner,\n OcStackCard,\n OcStackList,\n OcStatCard,\n OcStatus,\n OcStatusDot,\n OcStepper,\n OcStock,\n OcSwitch,\n OcTable,\n OcTableActions,\n OcTableCompact,\n OcTabs,\n OcTagInput,\n OcTerminalLog,\n OcTextarea,\n OcThemeSwitch,\n OcTimeInput,\n OcTimeline,\n OcTitlebar,\n OcTitlebarBody,\n OcTitlebarButton,\n OcTitlebarWindow,\n OcToast,\n OcToastContainer,\n OcToggle,\n OcToggleField,\n OcToggleGroup,\n OcTooltip,\n OcTopProgress,\n OcTree,\n OcUpgradeBanner,\n OcUser,\n OcVersionBanner,\n OcWatermark,\n OcBlockAboutTimeline,\n OcBlockAppHeader,\n OcBlockAppShell,\n OcBlockAuth,\n OcBlockAuthSplit,\n OcBlockContactGrid,\n OcBlockCta,\n OcBlockDataTable,\n OcBlockFaq,\n OcBlockFeatures,\n OcBlockFooter,\n OcBlockFormPage,\n OcBlockHero,\n OcBlockHeroCode,\n OcBlockHeroOrbit,\n OcBlockHeroSplit,\n OcBlockModuleHeader,\n OcBlockPageHero,\n OcBlockPortfolioGrid,\n OcBlockPricing,\n OcBlockProcess,\n OcBlockProductGrid,\n OcBlockProfileHeader,\n OcBlockShowcase,\n OcBlockSiteFooter,\n OcBlockSiteHeader,\n OcBlockSpotlight,\n OcBlockStats,\n OcBlockStatsCounter,\n OcBlockTeamList,\n OcBlockTwoFactor,\n OcBlockWizardDialog,\n}\n\nexport type { AffixInputKind } from './components/OcAffixInput.vue'\nexport type { AttachmentType, AttachmentFile } from './components/OcAttachment.vue'\nexport type { BreadcrumbItem } from './components/OcBreadcrumb.vue'\nexport type { ChartLineSeries } from './components/OcChartLine.vue'\nexport type { ChecklistItem } from './components/OcChecklist.vue'\nexport type { ChipFilterItem } from './components/OcChipFilter.vue'\nexport type { ColorSelectItem } from './components/OcColorSelect.vue'\nexport type { CommandItem } from './components/OcCommand.vue'\nexport type { CookieCategory, ConsentChoice } from './components/OcCookieConsent.vue'\nexport type { DataTableColumn, DataTableRow, DataTableTabs, DataTableColumnFilter } from './components/OcDataTable.vue'\nexport type { DefinitionRow } from './components/OcDefinitionList.vue'\nexport type { DocViewerItem } from './components/OcDocViewer.vue'\nexport type { FactListRow } from './components/OcFactList.vue'\nexport type { FilterCountsItem } from './components/OcFilterCounts.vue'\nexport type { GalleryImage } from './components/OcGallery.vue'\nexport type { GlassBarItem } from './components/OcGlassBar.vue'\nexport type { LanguageSelectItem } from './components/OcLanguageSelect.vue'\nexport type { MessageAttachment, MessageAction, MessageData } from './components/OcMessage.vue'\nexport type { MessageListItem } from './components/OcMessageList.vue'\nexport type { ThreadParticipant, ThreadMenuItem } from './components/OcMessageThread.vue'\nexport type { NavmenuItem } from './components/OcNavmenuList.vue'\nexport type { PasswordRequirementRule } from './components/OcPasswordRequirements.vue'\nexport type { PhoneInputCountry } from './components/OcPhoneInput.vue'\nexport type { PriceCardFeature, PriceCardPrice } from './components/OcPriceCard.vue'\nexport type { RadioOption } from './components/OcRadioGroup.vue'\nexport type { SegmentedOption } from './components/OcSegmented.vue'\nexport type { SelectOption } from './components/OcSelect.vue'\nexport type { SpecGroup } from './components/OcSpecList.vue'\nexport type { StackListItem } from './components/OcStackList.vue'\nexport type { StepperStep } from './components/OcStepper.vue'\nexport type { TableColumn, TableSort } from './components/OcTable.vue'\nexport type { TableCompactColumn } from './components/OcTableCompact.vue'\nexport type { TabItem } from './components/OcTabs.vue'\nexport type { TimelineEntry } from './components/OcTimeline.vue'\nexport type { OcTreeItem } from './components/OcTree.vue'\nexport type { ContactGridLine, ContactGridCard } from './blocks/OcBlockContactGrid.vue'\nexport type { FaqItem } from './blocks/OcBlockFaq.vue'\nexport type { FeatureItem } from './blocks/OcBlockFeatures.vue'\nexport type { FooterColumn } from './blocks/OcBlockFooter.vue'\nexport type { HeroOrbitMark } from './blocks/OcBlockHeroOrbit.vue'\nexport type { PortfolioGridProject } from './blocks/OcBlockPortfolioGrid.vue'\nexport type { PricingPlan } from './blocks/OcBlockPricing.vue'\nexport type { ProcessStep } from './blocks/OcBlockProcess.vue'\nexport type { ProductItem } from './blocks/OcBlockProductGrid.vue'\nexport type { ProfileHeaderTab } from './blocks/OcBlockProfileHeader.vue'\nexport type { ShowcaseProject } from './blocks/OcBlockShowcase.vue'\nexport type { SiteFooterColumn, SiteFooterContact } from './blocks/OcBlockSiteFooter.vue'\nexport type { SiteHeaderLink } from './blocks/OcBlockSiteHeader.vue'\nexport type { SpotlightModule } from './blocks/OcBlockSpotlight.vue'\nexport type { StatItem } from './blocks/OcBlockStats.vue'\nexport type { CounterStat } from './blocks/OcBlockStatsCounter.vue'\nexport type { TeamAction, TeamMember } from './blocks/OcBlockTeamList.vue'\n\nexport { useToast } from './composables/useToast'\nexport type { ToastItem, ToastOptions, ToastVariant } from './composables/useToast'\nexport { useUid } from './composables/useUid'\n\n/** Every component and block by name, e.g. { OcButton, OcBlockHero, ... }. */\nexport const components: Record<string, Component> = {\n OcAccordion,\n OcAccordionAccent,\n OcAccordionItem,\n OcAffixInput,\n OcAlert,\n OcAlertDialog,\n OcAlphaTabs,\n OcAspectRatio,\n OcAttachment,\n OcAttachmentImage,\n OcAttachmentList,\n OcAttachmentThumb,\n OcAvatar,\n OcAvatarGroup,\n OcAvatarPicker,\n OcBackLink,\n OcBadge,\n OcBarcode,\n OcBarcodeInput,\n OcBreadcrumb,\n OcBrowserFrame,\n OcBusyOverlay,\n OcButton,\n OcButtonGroup,\n OcButtonGroupText,\n OcCard,\n OcChartLine,\n OcChatComposer,\n OcCheckbox,\n OcChecklist,\n OcChipFilter,\n OcCollapsible,\n OcColorField,\n OcColorSelect,\n OcCommand,\n OcConfirmDialog,\n OcCookieConsent,\n OcCopyField,\n OcCounter,\n OcDataTable,\n OcDataTableName,\n OcDateField,\n OcDecimalInput,\n OcDefinitionList,\n OcDocViewer,\n OcDropdown,\n OcDropdownItem,\n OcDropdownLabel,\n OcDropdownSeparator,\n OcDropzone,\n OcEmojiPicker,\n OcEmptyState,\n OcEntityCard,\n OcFactList,\n OcFilterCounts,\n OcFlipCard,\n OcFormField,\n OcFormSection,\n OcGallery,\n OcGlass,\n OcGlassBar,\n OcGlassPanel,\n OcGreeting,\n OcHeading,\n OcHoverCard,\n OcImageZoom,\n OcInput,\n OcInputGroup,\n OcItem,\n OcItemGroup,\n OcItemSeparator,\n OcKbd,\n OcKbdGroup,\n OcLabel,\n OcLanguageSelect,\n OcLauncherCard,\n OcLazyImage,\n OcLightbox,\n OcLinkArrow,\n OcLinkRow,\n OcListToolbar,\n OcLiveFrame,\n OcMarquee,\n OcMediaCard,\n OcMediaRow,\n OcMediaThumb,\n OcMessage,\n OcMessageList,\n OcMessageThread,\n OcMeterRow,\n OcModal,\n OcNameCard,\n OcNavmenu,\n OcNavmenuList,\n OcNextTeaser,\n OcNumberInput,\n OcOtpInput,\n OcPageHeader,\n OcPagination,\n OcPasswordInput,\n OcPasswordRequirements,\n OcPhoneInput,\n OcPopover,\n OcPrice,\n OcPriceCard,\n OcProductMark,\n OcProgress,\n OcProjectCard,\n OcProse,\n OcQuantity,\n OcRadio,\n OcRadioGroup,\n OcRating,\n OcRatingInput,\n OcRecoveryCodes,\n OcRibbon,\n OcScrollArea,\n OcSegmented,\n OcSelect,\n OcSeparator,\n OcSeverityCard,\n OcSheet,\n OcSidebar,\n OcSidebarCollapsible,\n OcSidebarGroup,\n OcSidebarMenu,\n OcSidebarMenuButton,\n OcSidebarSeparator,\n OcSkeleton,\n OcSlider,\n OcSortableRow,\n OcSpecList,\n OcSpinner,\n OcStackCard,\n OcStackList,\n OcStatCard,\n OcStatus,\n OcStatusDot,\n OcStepper,\n OcStock,\n OcSwitch,\n OcTable,\n OcTableActions,\n OcTableCompact,\n OcTabs,\n OcTagInput,\n OcTerminalLog,\n OcTextarea,\n OcThemeSwitch,\n OcTimeInput,\n OcTimeline,\n OcTitlebar,\n OcTitlebarBody,\n OcTitlebarButton,\n OcTitlebarWindow,\n OcToast,\n OcToastContainer,\n OcToggle,\n OcToggleField,\n OcToggleGroup,\n OcTooltip,\n OcTopProgress,\n OcTree,\n OcUpgradeBanner,\n OcUser,\n OcVersionBanner,\n OcWatermark,\n OcBlockAboutTimeline,\n OcBlockAppHeader,\n OcBlockAppShell,\n OcBlockAuth,\n OcBlockAuthSplit,\n OcBlockContactGrid,\n OcBlockCta,\n OcBlockDataTable,\n OcBlockFaq,\n OcBlockFeatures,\n OcBlockFooter,\n OcBlockFormPage,\n OcBlockHero,\n OcBlockHeroCode,\n OcBlockHeroOrbit,\n OcBlockHeroSplit,\n OcBlockModuleHeader,\n OcBlockPageHero,\n OcBlockPortfolioGrid,\n OcBlockPricing,\n OcBlockProcess,\n OcBlockProductGrid,\n OcBlockProfileHeader,\n OcBlockShowcase,\n OcBlockSiteFooter,\n OcBlockSiteHeader,\n OcBlockSpotlight,\n OcBlockStats,\n OcBlockStatsCounter,\n OcBlockTeamList,\n OcBlockTwoFactor,\n OcBlockWizardDialog,\n}\n\n/** Vue plugin: app.use(OmniaVue) registers every Oc* component globally. */\nexport const OmniaVue = {\n install(app: App) {\n for (const [name, component] of Object.entries(components)) app.component(name, component)\n },\n}\n\nexport default OmniaVue\n"],"names":["counter","useUid","prefix","useId","Vue","provide","__props","_openBlock","_createElementBlock","_hoisted_1","_renderSlot","_ctx","_normalizeClass","open","_useModel","name","inject","onToggle","e","_unref","_createElementVNode","_hoisted_2","_hoisted_3","useAttrsSplit","attrs","useAttrs","root","computed","control","_c","_s","rest","props","model","PRESETS","preset","before","after","end","_mergeProps","$slots","_withDirectives","$event","useDialog","el","sync","dialog","watch","onMounted","onClose","emit","__emit","ref","titleId","textId","glyphs","variant","close","confirm","cancel","_cache","args","_createTextVNode","_toDisplayString","_hoisted_4","current","items","l","isDisabled","key","link","_Fragment","_renderList","item","presets","custom","_normalizeStyle","TYPES","extOf","attachmentMeta","f","meta","uploading","_createBlock","_resolveDynamicComponent","_hoisted_5","_hoisted_6","_hoisted_7","i","_createVNode","OcAttachment","isoWeek","date","d","day","yearStart","bindDateField","input","out","template","show","y","m","week","year","bindNameCard","head","title","button","finish","save","event","acceptsFile","file","accept","rules","type","bindAvatarPicker","preview","initials","url","error","text","box","picked","img","take","maxKb","reason","dt","stepQuantity","value","direction","min","max","step","size","base","k","next","bindQuantity","num","attr","fallback","limits","down","initFormExtras","scope","autoStart","boot","id","useTemplateRef","CODE128","STOP","START_B","START_C","L","G","R","code","bit","PARITY","guessFormat","eanCheck","body","sum","encodeEan","length","check","digits","left","right","parity","code128Values","values","ch","v","encodeCode128","widths","bits","w","encodeBarcode","format","kind","escapeHtml","barsToSvg","label","rects","width","renderBarcode","err","initBarcodes","result","auto","inputId","onInput","pct","percent","tone","warn","danger","OcProgress","n2","n","niceMax","rows","raw","pow","s","chartLinePath","pts","clamp","a","p0","p1","p2","p3","c1","c2","MONTHS","labels","axis","top","count","paths","yLabels","_","colLabel","j","_hoisted_12","_hoisted_13","_hoisted_14","submit","onKeydown","uid","isChecked","toggle","list","x","option","query","filtered","q","sections","order","map","flat","active","firstEnabled","from","move","choose","section","_hoisted_8","done","destructive","read","inputs","tell","choice","reopen","mode","stored","onBeforeUnmount","$attrs","c","_hoisted_9","_hoisted_11","copied","timer","copy","style","pageItems","last","range","compareValues","b","numeric","na","nb","csvField","toCsv","headers","line","rowPasses","status","filter","state","controls","SKIP_COL","readStore","writeStore","download","filename","bindDataTable","prev","table","tbody","search","summary","pager","pageSelect","selectAll","bulk","empty","sortSummary","frame","live","colFilters","sel","tab","sortedTh","th","sortKey","sortDir","page","pageSize","selected","savedSize","savedCols","redrawIcons","row","icon","moveRow","textOf","td","valueOf","cell","passesColumns","want","matched","paintChecks","on","keys","renderPager","add","target","extra","span","syncGrid","grid","onPage","heads","hiddenCols","card","cells","fields","index","col","dd","node","actions","bar","trashed","when","apply","all","dir","start","visible","shown","exportCsv","onlyKeys","hidden","detail","liveAction","action","cols","headCell","sortBtn","filterBtn","btn","rowBtn","filtersBtn","colTab","viewBtn","densityBtn","compact","pageBtn","bulkBtn","initDataTables","sizes","lead","_hoisted_16","o","_hoisted_18","_hoisted_20","_hoisted_21","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_29","_hoisted_30","_hoisted_32","_hoisted_33","_hoisted_36","_hoisted_38","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_45","_hoisted_47","_hoisted_48","_hoisted_49","letters","separators","parts","p","parse","group","decimal","clean","focused","onBlur","idOf","doc","full","inFrame","art","dialogAlt","_hoisted_10","_hoisted_15","_hoisted_17","dragover","onChange","onDrop","pick","emoji","g","gi","flipped","generated","helpId","errorId","describedBy","ids","$emit","WORDS","tod","h","word","dateText","iso","zoom","vars","$props","tag","dialogClose","slide","go","slideId","nextTick","__expose","external","href","view","menuId","OcMediaThumb","MESSAGE_ICONS","STATUS","thumbsOnly","strip","_k","image","thumb","OcAttachmentThumb","OcAttachmentImage","isDivider","OcMessage","sending","isOut","send","field","mine","ctrlEnter","OcMessageList","_hoisted_22","child","OcNavmenuList","stepBy","rule","parsed","match","dialState","dial","grouped","nextDial","national","_hoisted_19","radioGroupKey","toggleGroupKey","own","checked","isCard","OcRadio","score","copyAll","LEVEL_TEXT","t","progress","r","OcStatusDot","TEXT","sort","slots","useSlots","hasActions","colspan","allSelected","toggleAll","toggleRow","ariaSort","toggleSort","rowLabel","cellAttrs","tags","draft","available","remove","listId","reactive","timers","nextId","dismiss","push","options","clear","shortcut","description","useToast","readonly","toasts","OcToast","pressed","classes","inGroup","isOn","descId","phase","_component_OcTree","_withCtx","shownInitials","OcTimeline","collapsed","autoGroup","angle","visualStyle","mark","OcProjectCard","plan","nameId","panels","bannerStyle","navId","OcCounter","member","codeId","OcCopyField","OcOtpInput","OcRecoveryCodes","OcStepper","components","OcAccordion","OcAccordionAccent","OcAccordionItem","OcAffixInput","OcAlert","OcAlertDialog","OcAlphaTabs","OcAspectRatio","OcAttachmentList","OcAvatar","OcAvatarGroup","OcAvatarPicker","OcBackLink","OcBadge","OcBarcode","OcBarcodeInput","OcBreadcrumb","OcBrowserFrame","OcBusyOverlay","OcButton","OcButtonGroup","OcButtonGroupText","OcCard","OcChartLine","OcChatComposer","OcCheckbox","OcChecklist","OcChipFilter","OcCollapsible","OcColorField","OcColorSelect","OcCommand","OcConfirmDialog","OcCookieConsent","OcDataTable","OcDataTableName","OcDateField","OcDecimalInput","OcDefinitionList","OcDocViewer","OcDropdown","OcDropdownItem","OcDropdownLabel","OcDropdownSeparator","OcDropzone","OcEmojiPicker","OcEmptyState","OcEntityCard","OcFactList","OcFilterCounts","OcFlipCard","OcFormField","OcFormSection","OcGallery","OcGlass","OcGlassBar","OcGlassPanel","OcGreeting","OcHeading","OcHoverCard","OcImageZoom","OcInput","OcInputGroup","OcItem","OcItemGroup","OcItemSeparator","OcKbd","OcKbdGroup","OcLabel","OcLanguageSelect","OcLauncherCard","OcLazyImage","OcLightbox","OcLinkArrow","OcLinkRow","OcListToolbar","OcLiveFrame","OcMarquee","OcMediaCard","OcMediaRow","OcMessageThread","OcMeterRow","OcModal","OcNameCard","OcNavmenu","OcNextTeaser","OcNumberInput","OcPageHeader","OcPagination","OcPasswordInput","OcPasswordRequirements","OcPhoneInput","OcPopover","OcPrice","OcPriceCard","OcProductMark","OcProse","OcQuantity","OcRadioGroup","OcRating","OcRatingInput","OcRibbon","OcScrollArea","OcSegmented","OcSelect","OcSeparator","OcSeverityCard","OcSheet","OcSidebar","OcSidebarCollapsible","OcSidebarGroup","OcSidebarMenu","OcSidebarMenuButton","OcSidebarSeparator","OcSkeleton","OcSlider","OcSortableRow","OcSpecList","OcSpinner","OcStackCard","OcStackList","OcStatCard","OcStatus","OcStock","OcSwitch","OcTable","OcTableActions","OcTableCompact","OcTabs","OcTagInput","OcTerminalLog","OcTextarea","OcThemeSwitch","OcTimeInput","OcTitlebar","OcTitlebarBody","OcTitlebarButton","OcTitlebarWindow","OcToastContainer","OcToggle","OcToggleField","OcToggleGroup","OcTooltip","OcTopProgress","OcTree","OcUpgradeBanner","OcUser","OcVersionBanner","OcWatermark","OcBlockAboutTimeline","OcBlockAppHeader","OcBlockAppShell","OcBlockAuth","OcBlockAuthSplit","OcBlockContactGrid","OcBlockCta","OcBlockDataTable","OcBlockFaq","OcBlockFeatures","OcBlockFooter","OcBlockFormPage","OcBlockHero","OcBlockHeroCode","OcBlockHeroOrbit","OcBlockHeroSplit","OcBlockModuleHeader","OcBlockPageHero","OcBlockPortfolioGrid","OcBlockPricing","OcBlockProcess","OcBlockProductGrid","OcBlockProfileHeader","OcBlockShowcase","OcBlockSiteFooter","OcBlockSiteHeader","OcBlockSpotlight","OcBlockStats","OcBlockStatsCounter","OcBlockTeamList","OcBlockTwoFactor","OcBlockWizardDialog","OmniaVue","app","component"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"omniaui-vue.js","sources":["../src/composables/useUid.ts","../src/components/OcAccordion.vue","../src/components/OcAccordionAccent.vue","../src/components/OcAccordionItem.vue","../src/composables/useAttrsSplit.ts","../src/components/OcAffixInput.vue","../src/components/OcAlert.vue","../src/composables/useDialog.ts","../src/components/OcAlertDialog.vue","../src/components/OcAlphaTabs.vue","../src/components/OcAspectRatio.vue","../src/components/OcAttachment.vue","../src/components/OcAttachmentImage.vue","../src/components/OcAttachmentList.vue","../src/components/OcAttachmentThumb.vue","../src/components/OcAvatar.vue","../src/components/OcAvatarGroup.vue","../../ui/src/form-extras.js","../src/components/OcAvatarPicker.vue","../src/components/OcBackLink.vue","../src/components/OcBadge.vue","../../ui/src/barcode.js","../src/components/OcBarcode.vue","../src/components/OcBarcodeInput.vue","../src/components/OcBrandMark.vue","../src/components/OcBreadcrumb.vue","../src/components/OcBrowserFrame.vue","../src/components/OcProgress.vue","../src/components/OcBusyOverlay.vue","../src/components/OcButton.vue","../src/components/OcButtonGroup.vue","../src/components/OcButtonGroupText.vue","../src/components/OcCallout.vue","../src/components/OcCard.vue","../src/composables/chartLine.ts","../src/components/OcChartLine.vue","../src/components/OcChatComposer.vue","../src/components/OcCheckbox.vue","../src/components/OcChecklist.vue","../src/components/OcChipFilter.vue","../src/components/OcCollapsible.vue","../src/components/OcColorField.vue","../src/components/OcColorSelect.vue","../src/components/OcCommand.vue","../src/components/OcConfirmDialog.vue","../src/components/OcCookieConsent.vue","../src/components/OcCopyField.vue","../src/components/OcCounter.vue","../../ui/src/data-table.js","../src/components/OcDataTable.vue","../src/components/OcDataTableName.vue","../src/components/OcDateField.vue","../src/components/OcDecimalInput.vue","../src/components/OcDefinitionList.vue","../src/components/OcDocViewer.vue","../src/components/OcDropdown.vue","../src/components/OcDropdownItem.vue","../src/components/OcDropdownLabel.vue","../src/components/OcDropdownSeparator.vue","../src/components/OcDropzone.vue","../src/components/OcEmojiPicker.vue","../src/components/OcEmptyState.vue","../src/components/OcEntityCard.vue","../src/components/OcFactList.vue","../src/components/OcFeatureCard.vue","../src/components/OcFilterCounts.vue","../src/components/OcFlipCard.vue","../src/components/OcFormField.vue","../src/components/OcFormSection.vue","../src/components/OcGallery.vue","../src/components/OcGlass.vue","../src/components/OcGlassBar.vue","../src/components/OcGlassPanel.vue","../src/components/OcGreeting.vue","../src/components/OcGroup.vue","../src/components/OcHeading.vue","../src/components/OcHoverCard.vue","../src/components/OcImageZoom.vue","../src/components/OcInput.vue","../src/components/OcInputGroup.vue","../src/components/OcItem.vue","../src/components/OcItemGroup.vue","../src/components/OcItemSeparator.vue","../src/components/OcKbd.vue","../src/components/OcKbdGroup.vue","../src/components/OcLabel.vue","../src/components/OcLanguageSelect.vue","../src/components/OcLauncherCard.vue","../src/components/OcLazyImage.vue","../src/components/OcLightbox.vue","../src/components/OcLinkArrow.vue","../src/components/OcLinkCard.vue","../src/components/OcLinkRow.vue","../src/components/OcListToolbar.vue","../src/components/OcLiveFrame.vue","../src/components/OcMarquee.vue","../src/components/OcMediaThumb.vue","../src/components/OcMediaCard.vue","../src/components/OcMediaRow.vue","../src/components/OcMenuStatic.vue","../src/components/OcMessage.vue","../src/components/OcMessageList.vue","../src/components/OcMessageThread.vue","../src/components/OcMeterRow.vue","../src/components/OcModal.vue","../src/components/OcNameCard.vue","../src/components/OcNavmenuList.vue","../src/components/OcNavmenu.vue","../src/components/OcNextTeaser.vue","../src/components/OcNumberInput.vue","../src/components/OcOtpInput.vue","../src/components/OcPageHeader.vue","../src/components/OcPagination.vue","../src/components/OcPanel.vue","../../ui/src/particles.js","../src/components/OcParticleField.vue","../src/components/OcPasswordInput.vue","../src/components/OcPasswordRequirements.vue","../src/components/OcPhoneInput.vue","../src/components/OcPopover.vue","../src/components/OcPrice.vue","../src/components/OcPriceCard.vue","../src/components/OcProductMark.vue","../src/components/OcProjectCard.vue","../src/components/OcProse.vue","../src/components/OcQuantity.vue","../src/composables/keys.ts","../src/components/OcRadio.vue","../src/components/OcRadioGroup.vue","../src/components/OcRating.vue","../src/components/OcRatingInput.vue","../src/components/OcReading.vue","../src/components/OcRecoveryCodes.vue","../src/components/OcResult.vue","../src/components/OcRibbon.vue","../src/components/OcScrollArea.vue","../src/components/OcSegmented.vue","../src/components/OcSelect.vue","../src/components/OcSeparator.vue","../src/components/OcSeverityCard.vue","../src/components/OcSheet.vue","../src/components/OcSidebar.vue","../src/components/OcSidebarCollapsible.vue","../src/components/OcSidebarGroup.vue","../src/components/OcSidebarMenu.vue","../src/components/OcSidebarMenuButton.vue","../src/components/OcSidebarSeparator.vue","../src/components/OcSkeleton.vue","../src/components/OcSlider.vue","../src/components/OcSortableRow.vue","../src/components/OcSpecList.vue","../src/components/OcSpinner.vue","../src/components/OcStackCard.vue","../src/components/OcStackList.vue","../src/components/OcStatCard.vue","../src/components/OcStatusDot.vue","../src/components/OcStatus.vue","../src/components/OcStepper.vue","../src/components/OcStock.vue","../src/components/OcSwitch.vue","../src/components/OcTable.vue","../src/components/OcTableActions.vue","../src/components/OcTableCompact.vue","../src/components/OcTabs.vue","../src/components/OcTagInput.vue","../src/components/OcTerminalLog.vue","../src/components/OcTextarea.vue","../src/components/OcThemeSwitch.vue","../src/components/OcTimeInput.vue","../src/components/OcTimeline.vue","../src/components/OcTitlebar.vue","../src/components/OcTitlebarBody.vue","../src/components/OcTitlebarButton.vue","../src/components/OcTitlebarWindow.vue","../src/components/OcToast.vue","../src/composables/useToast.ts","../src/components/OcToastContainer.vue","../src/components/OcToggle.vue","../src/components/OcToggleField.vue","../src/components/OcToggleGroup.vue","../src/components/OcTooltip.vue","../src/components/OcTopProgress.vue","../src/components/OcTree.vue","../src/components/OcUpgradeBanner.vue","../src/components/OcUser.vue","../src/components/OcVersionBanner.vue","../src/components/OcWatermark.vue","../src/blocks/OcBlockAboutTimeline.vue","../src/blocks/OcBlockAppHeader.vue","../src/blocks/OcBlockAppShell.vue","../src/blocks/OcBlockAuth.vue","../src/blocks/OcBlockAuthSplit.vue","../src/blocks/OcBlockContactForm.vue","../src/blocks/OcBlockContactGrid.vue","../src/blocks/OcBlockCta.vue","../src/blocks/OcBlockDataTable.vue","../src/blocks/OcBlockFaq.vue","../src/blocks/OcBlockFeatures.vue","../src/blocks/OcBlockFooter.vue","../src/blocks/OcBlockFormPage.vue","../src/blocks/OcBlockHero.vue","../src/blocks/OcBlockHeroCode.vue","../src/blocks/OcBlockHeroOrbit.vue","../src/blocks/OcBlockHeroSplit.vue","../src/blocks/OcBlockModuleHeader.vue","../src/blocks/OcBlockPageHero.vue","../src/blocks/OcBlockPortfolioGrid.vue","../src/blocks/OcBlockPricing.vue","../src/blocks/OcBlockProcess.vue","../src/blocks/OcBlockProductGrid.vue","../src/blocks/OcBlockProfileHeader.vue","../src/blocks/OcBlockShowcase.vue","../src/blocks/OcBlockSiteFooter.vue","../src/blocks/OcBlockSiteHeader.vue","../src/blocks/OcBlockSpotlight.vue","../src/blocks/OcBlockStats.vue","../src/blocks/OcBlockStatsCounter.vue","../src/blocks/OcBlockTeamList.vue","../src/blocks/OcBlockTwoFactor.vue","../src/blocks/OcBlockWizardDialog.vue","../src/index.ts"],"sourcesContent":["import * as Vue from 'vue'\r\n\r\nlet counter = 0\r\n\r\n/**\r\n * Stable unique id for aria-labelledby / popovertarget / label-for wiring.\r\n * Uses Vue's built-in useId() when available (Vue >= 3.5, SSR safe), otherwise a counter.\r\n */\r\nexport function useUid(prefix = 'oc'): string {\r\n const useId = (Vue as Record<string, unknown>)['useId'] as (() => string) | undefined\r\n return `${prefix}-${useId ? useId() : ++counter}`\r\n}\r\n","<script setup lang=\"ts\">\r\n/** Exclusive accordion on <details name>. Put OcAccordionItem children inside; they share one group name. */\r\nimport { provide } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = defineProps<{ name?: string }>()\r\nprovide('oc-accordion-name', props.name ?? useUid('oc-accordion'))\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-accordion\"><slot /></div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcAccordionAccent.vue | Map: div.oc-accordion.oc-accordion--accent (+ color classes) -> OcAccordionItem children -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Accent accordion: separate item cards with a colored start edge. Put OcAccordionItem children inside;\r\n * they share one group name (like OcAccordion). Color one item with class \"oc-accent--violet\" or \"oc-accordion-item--warning\".\r\n * Classes: .oc-accordion--accent, .oc-accent--*, .oc-accordion--success/--warning/--danger, .oc-accordion--flush, .oc-accordion-accent-meta\r\n */\r\nimport { provide } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = defineProps<{\r\n name?: string\r\n /** Color preset for all items. */\r\n accent?: 'blue' | 'cyan' | 'green' | 'orange' | 'red' | 'violet' | 'yellow'\r\n /** Semantic color for all items. */\r\n tone?: 'success' | 'warning' | 'danger'\r\n flush?: boolean\r\n}>()\r\n// Same key as OcAccordion, so OcAccordionItem picks up the group name.\r\nprovide('oc-accordion-name', props.name ?? useUid('oc-accordion'))\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-accordion', 'oc-accordion--accent', flush && 'oc-accordion--flush', accent && `oc-accent--${accent}`, tone && `oc-accordion--${tone}`]\">\r\n <slot />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** One accordion section (details/summary). v-model:open; default slot = content, `title` prop or slot = trigger. */\r\nimport { inject } from 'vue'\r\n\r\ndefineProps<{ title?: string }>()\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst name = inject<string | undefined>('oc-accordion-name', undefined)\r\n\r\nfunction onToggle(e: Event) {\r\n open.value = (e.target as HTMLDetailsElement).open\r\n}\r\n</script>\r\n\r\n<template>\r\n <details class=\"oc-accordion-item\" :name=\"name\" :open=\"open\" @toggle=\"onToggle\">\r\n <summary class=\"oc-accordion-trigger\"><slot name=\"title\">{{ title }}</slot></summary>\r\n <div class=\"oc-accordion-content\"><slot /></div>\r\n </details>\r\n</template>\r\n","import { computed, useAttrs } from 'vue'\r\n\r\n/**\r\n * For components whose root is a wrapper (label, div) around the real form control:\r\n * `class` and `style` stay on the wrapper, every other attribute (id, name, disabled,\r\n * autocomplete, aria-*, listeners) goes to the control. Use with defineOptions({ inheritAttrs: false }).\r\n */\r\nexport function useAttrsSplit() {\r\n const attrs = useAttrs()\r\n const root = computed(() => ({ class: attrs.class, style: attrs.style }))\r\n const control = computed(() => {\r\n const { class: _c, style: _s, ...rest } = attrs\r\n return rest\r\n })\r\n return { root, control }\r\n}\r\n","<!-- File: packages/vue/src/components/OcAffixInput.vue | Map: props -> variant presets -> template (input group --affix with inline symbol) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Input with a symbol inside the frame. variant: currency (€), percent (%) or email (@); or own prefix / suffix (props or slots).\r\n * Same markup as packages/ui/snippets/affix-input.html. v-model: string.\r\n * class/style stay on the wrapper, other attributes go to the input.\r\n */\r\nimport { computed } from 'vue'\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\nexport type AffixInputKind = 'currency' | 'percent' | 'email'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\n// alignEnd defaults to undefined (not false), so the variant preset can decide.\r\nconst props = withDefaults(defineProps<{ variant?: AffixInputKind; prefix?: string; suffix?: string; alignEnd?: boolean; error?: boolean }>(), {\r\n alignEnd: undefined,\r\n})\r\nconst model = defineModel<string>({ default: '' })\r\nconst { root, control } = useAttrsSplit()\r\n\r\n// Preset per variant. Email uses type=\"email\" so :user-invalid checks the address.\r\nconst PRESETS = {\r\n currency: { prefix: '\\u20AC', suffix: undefined, end: false, input: { type: 'text', inputmode: 'decimal' } },\r\n percent: { prefix: '%', suffix: undefined, end: false, input: { type: 'text', inputmode: 'decimal' } },\r\n email: { prefix: '@', suffix: undefined, end: false, input: { type: 'email', autocomplete: 'email' } },\r\n} as const\r\n\r\nconst preset = computed(() => (props.variant ? PRESETS[props.variant] : undefined))\r\nconst before = computed(() => props.prefix ?? preset.value?.prefix)\r\nconst after = computed(() => props.suffix ?? preset.value?.suffix)\r\nconst end = computed(() => props.alignEnd ?? preset.value?.end ?? false)\r\n</script>\r\n\r\n<template>\r\n <div v-bind=\"root\" :class=\"['oc-input-group', 'oc-input-group--affix', end && 'oc-input-group--end', error && 'oc-input-group--error']\">\r\n <span v-if=\"before || $slots.prefix\" class=\"oc-input-addon\" aria-hidden=\"true\"><slot name=\"prefix\">{{ before }}</slot></span>\r\n <input v-bind=\"{ type: 'text', ...preset?.input, ...control }\" v-model=\"model\" class=\"oc-input\" :aria-invalid=\"error ? 'true' : undefined\" />\r\n <span v-if=\"after || $slots.suffix\" class=\"oc-input-addon\" aria-hidden=\"true\"><slot name=\"suffix\">{{ after }}</slot></span>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Alert. Classes: .oc-alert--info/success/warning/danger, --inline (compact, under a field). Default slot = description. */\r\nwithDefaults(\r\n defineProps<{\r\n variant?: 'info' | 'success' | 'warning' | 'danger'\r\n title?: string\r\n inline?: boolean\r\n }>(),\r\n { variant: 'info' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-alert', `oc-alert--${variant}`, inline && 'oc-alert--inline']\" :role=\"variant === 'danger' && inline ? 'alert' : 'status'\">\r\n <h4 v-if=\"title || $slots.title\" class=\"oc-alert-title\"><slot name=\"title\">{{ title }}</slot></h4>\r\n <p v-if=\"$slots.default\" class=\"oc-alert-description\"><slot /></p>\r\n </div>\r\n</template>\r\n","import { onMounted, watch, type Ref } from 'vue'\r\n\r\n/**\r\n * Keeps a native <dialog> in sync with a boolean `open` model:\r\n * open -> showModal(), closed -> close(). Native close (Esc, backdrop, form method=dialog)\r\n * is reported through `onClose` so v-model:open stays correct.\r\n */\r\nexport function useDialog(open: Ref<boolean | undefined>, el: Ref<HTMLDialogElement | null>) {\r\n function sync() {\r\n const dialog = el.value\r\n if (!dialog) return\r\n if (open.value && !dialog.open) dialog.showModal()\r\n else if (!open.value && dialog.open) dialog.close()\r\n }\r\n watch(open, sync, { flush: 'post' })\r\n onMounted(sync)\r\n function onClose() {\r\n if (open.value) open.value = false\r\n }\r\n return { onClose }\r\n}\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Confirmation modal with a status icon. v-model:open. Emits `confirm` / `cancel` (both close the dialog).\r\n * Slots: icon, title, default (message), footer (scoped: { close }).\r\n * Classes: .oc-alert-dialog(--success/--error/--warning/--info/--question), .oc-alert-dialog-icon\r\n */\r\nimport { computed, ref } from 'vue'\r\nimport { useDialog } from '../composables/useDialog'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n type?: 'success' | 'error' | 'warning' | 'info' | 'question'\r\n title?: string\r\n message?: string\r\n confirmLabel?: string\r\n cancelLabel?: string\r\n /** Variant of the confirm button; defaults to destructive for warning/error. */\r\n confirmVariant?: 'default' | 'destructive' | 'success'\r\n }>(),\r\n { type: 'warning', confirmLabel: 'Confirm', cancelLabel: 'Cancel' },\r\n)\r\nconst emit = defineEmits<{ confirm: []; cancel: [] }>()\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst el = ref<HTMLDialogElement | null>(null)\r\nconst { onClose } = useDialog(open, el)\r\nconst titleId = useUid('oc-alert-dialog-title')\r\nconst textId = `${titleId}-text`\r\n\r\nconst glyphs = { success: '✓', error: '×', warning: '!', info: 'i', question: '?' } as const\r\nconst variant = computed(() => props.confirmVariant ?? (props.type === 'warning' || props.type === 'error' ? 'destructive' : 'default'))\r\nconst close = () => (open.value = false)\r\n\r\nfunction confirm() {\r\n emit('confirm')\r\n close()\r\n}\r\nfunction cancel() {\r\n emit('cancel')\r\n close()\r\n}\r\n</script>\r\n\r\n<template>\r\n <dialog\r\n ref=\"el\"\r\n class=\"oc-modal\"\r\n closedby=\"closerequest\"\r\n role=\"alertdialog\"\r\n :aria-labelledby=\"titleId\"\r\n :aria-describedby=\"textId\"\r\n @close=\"onClose\"\r\n >\r\n <div :class=\"['oc-modal-content', 'oc-modal-content--sm', 'oc-alert-dialog', `oc-alert-dialog--${type}`]\">\r\n <span class=\"oc-alert-dialog-icon\" aria-hidden=\"true\"><slot name=\"icon\">{{ glyphs[type] }}</slot></span>\r\n <h2 :id=\"titleId\" class=\"oc-modal-title\"><slot name=\"title\">{{ title }}</slot></h2>\r\n <div :id=\"textId\" class=\"oc-modal-body\"><slot>{{ message }}</slot></div>\r\n <div class=\"oc-modal-footer\">\r\n <slot name=\"footer\" :close=\"close\" :confirm=\"confirm\" :cancel=\"cancel\">\r\n <button class=\"oc-btn oc-btn--outline\" type=\"button\" @click=\"cancel\">{{ cancelLabel }}</button>\r\n <button :class=\"['oc-btn', variant !== 'default' && `oc-btn--${variant}`]\" type=\"button\" @click=\"confirm\">{{ confirmLabel }}</button>\r\n </slot>\r\n </div>\r\n </div>\r\n </dialog>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcAlphaTabs.vue | Map: nav -> \"All\" item -> one item per letter (current / disabled) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * All + A-Z letter filter. v-model = current letter (\"all\" by default).\r\n * With `href` (e.g. \"?letter={letter}\") the items are links; otherwise buttons that update v-model.\r\n * Classes: nav.oc-alpha-tabs(--wrap/--sm/--plain), .oc-alpha-tabs-item(--all), aria-current, aria-disabled\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n letters?: string[]\r\n /** Letters with entries; the others are disabled. Default: all. */\r\n available?: string[]\r\n /** Link pattern; \"{letter}\" is replaced, e.g. \"?letter={letter}\". */\r\n href?: string\r\n allLabel?: string\r\n wrap?: boolean\r\n size?: 'sm'\r\n plain?: boolean\r\n }>(),\r\n { letters: () => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''), allLabel: 'All' },\r\n)\r\nconst current = defineModel<string>({ default: 'all' })\r\n\r\nconst items = computed(() => [\r\n { key: 'all', label: props.allLabel, all: true },\r\n ...props.letters.map((l) => ({ key: l, label: l, all: false })),\r\n])\r\nconst isDisabled = (key: string) => key !== 'all' && props.available !== undefined && !props.available.includes(key)\r\nconst link = (key: string) => props.href?.replace('{letter}', key)\r\n</script>\r\n\r\n<template>\r\n <nav :class=\"['oc-alpha-tabs', wrap && 'oc-alpha-tabs--wrap', size && `oc-alpha-tabs--${size}`, plain && 'oc-alpha-tabs--plain']\" aria-label=\"Filter by letter\">\r\n <template v-for=\"item in items\" :key=\"item.key\">\r\n <a\r\n v-if=\"href\"\r\n :class=\"['oc-alpha-tabs-item', item.all && 'oc-alpha-tabs-item--all']\"\r\n :href=\"isDisabled(item.key) ? undefined : link(item.key)\"\r\n :aria-current=\"current === item.key ? 'true' : undefined\"\r\n :aria-disabled=\"isDisabled(item.key) ? 'true' : undefined\"\r\n >{{ item.label }}</a>\r\n <button\r\n v-else\r\n type=\"button\"\r\n :class=\"['oc-alpha-tabs-item', item.all && 'oc-alpha-tabs-item--all']\"\r\n :aria-current=\"current === item.key ? 'true' : undefined\"\r\n :disabled=\"isDisabled(item.key)\"\r\n @click=\"current = item.key\"\r\n >{{ item.label }}</button>\r\n </template>\r\n </nav>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Aspect-ratio box. `ratio` is a preset (square | photo | portrait | wide), a number (1.5) or a CSS ratio (\"5 / 2\");\r\n * default 16 / 9. `center` centers the content. Classes: .oc-aspect(--square/--photo/--portrait/--wide/--center), --oc-aspect\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst presets = ['square', 'photo', 'portrait', 'wide']\r\nconst props = defineProps<{ ratio?: 'square' | 'photo' | 'portrait' | 'wide' | number | string; center?: boolean }>()\r\nconst preset = computed(() => (typeof props.ratio === 'string' && presets.includes(props.ratio) ? props.ratio : undefined))\r\nconst custom = computed(() => (props.ratio !== undefined && !preset.value ? String(props.ratio) : undefined))\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"['oc-aspect', preset && `oc-aspect--${preset}`, center && 'oc-aspect--center']\"\r\n :style=\"custom ? { '--oc-aspect': custom } : undefined\"\r\n >\r\n <slot />\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcAttachment.vue | Map: type / extension helpers -> props -> a[download] or div chip (icon, name, size, remove) -->\r\n<script lang=\"ts\">\r\nexport type AttachmentType = 'pdf' | 'doc' | 'sheet' | 'zip' | 'image'\r\nexport interface AttachmentFile {\r\n name: string\r\n size?: string\r\n type?: AttachmentType\r\n ext?: string\r\n href?: string\r\n image?: string\r\n state?: 'uploading' | 'error'\r\n progress?: number\r\n removable?: boolean\r\n removeLabel?: string\r\n}\r\nconst TYPES: Record<string, AttachmentType> = {\r\n pdf: 'pdf', doc: 'doc', docx: 'doc', odt: 'doc', rtf: 'doc', txt: 'doc', xls: 'sheet', xlsx: 'sheet', csv: 'sheet', ods: 'sheet',\r\n zip: 'zip', rar: 'zip', '7z': 'zip', gz: 'zip', jpg: 'image', jpeg: 'image', png: 'image', gif: 'image', webp: 'image', heic: 'image', avif: 'image',\r\n}\r\nconst extOf = (name: string) => (name.includes('.') ? name.split('.').pop()!.toLowerCase() : '')\r\n/** Icon text and tint of a file name (Plan.xlsx -> XLS, sheet). */\r\nexport const attachmentMeta = (f: AttachmentFile) => ({\r\n ext: f.ext ?? extOf(f.name).toUpperCase().replace(/^(DOC|XLS|PPT)X$/, '$1'),\r\n type: f.type ?? TYPES[extOf(f.name)],\r\n})\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\n/**\r\n * File chip (same markup as snippets/attachment.html): icon tile by type, name, size, upload / error state and remove button.\r\n * With href (and not removable) it is an <a download>. Emits: remove. Classes: .oc-attachment(--pdf/--doc/--sheet/--zip/--image,\r\n * --uploading/--error) __icon __body __name __size __remove; --oc-attachment-progress while uploading.\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(defineProps<AttachmentFile>(), { progress: 0 })\r\nconst emit = defineEmits<{ remove: [] }>()\r\nconst meta = computed(() => attachmentMeta(props))\r\nconst uploading = computed(() => props.state === 'uploading')\r\nconst link = computed(() => !!props.href && !props.removable)\r\n</script>\r\n\r\n<template>\r\n <component\r\n :is=\"link ? 'a' : 'div'\"\r\n :class=\"['oc-attachment', meta.type && `oc-attachment--${meta.type}`, state && `oc-attachment--${state}`]\"\r\n :href=\"link ? href : undefined\"\r\n :download=\"link ? '' : undefined\"\r\n :style=\"uploading ? `--oc-attachment-progress:${progress}%` : undefined\"\r\n >\r\n <span class=\"oc-attachment__icon\" aria-hidden=\"true\"><img v-if=\"image\" :src=\"image\" alt=\"\" /><template v-else>{{ meta.ext }}</template></span>\r\n <span class=\"oc-attachment__body\">\r\n <span class=\"oc-attachment__name\">{{ name }}</span>\r\n <span v-if=\"uploading\" class=\"oc-attachment__size\" role=\"status\">{{ size ?? `Uploading… ${progress}%` }}</span>\r\n <span v-else-if=\"size\" class=\"oc-attachment__size\">{{ size }}</span>\r\n </span>\r\n <button v-if=\"removable\" type=\"button\" class=\"oc-attachment__remove\" :aria-label=\"removeLabel ?? (uploading ? `Cancel upload of ${name}` : `Remove ${name}`)\" @click=\"emit('remove')\">✕</button>\r\n </component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcAttachmentImage.vue | Map: props -> a.oc-attachment-image (img or placeholder art, caption) -->\r\n<script setup lang=\"ts\">\r\n/** Image preview inside a message (4 : 3, same markup as snippets/attachment.html). No src = placeholder art. Classes: .oc-attachment-image, __caption */\r\ndefineProps<{ href?: string; src?: string; alt: string; art?: number; caption?: string }>()\r\n</script>\r\n\r\n<template>\r\n <a class=\"oc-attachment-image\" :href=\"href\">\r\n <img v-if=\"src\" :src=\"src\" :alt=\"alt\" />\r\n <span v-else :class=\"['oc-media-art', art != null && `oc-media-art--${art}`]\" role=\"img\" :aria-label=\"alt\"></span>\r\n <span v-if=\"caption\" class=\"oc-attachment-image__caption\">{{ caption }}</span>\r\n </a>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcAttachmentList.vue | Map: props + demo files -> ul (li > chip) or div of chips -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Wrapping row of file chips (snippets/attachment.html). items = AttachmentFile[] (demo files when empty); slot default replaces them.\r\n * stack = one per line. as = ul (default) or div. Emits: remove(file, index). Classes: .oc-attachment-list(--stack)\r\n */\r\nimport OcAttachment, { type AttachmentFile } from './OcAttachment.vue'\r\n\r\nwithDefaults(defineProps<{ items?: AttachmentFile[]; stack?: boolean; as?: 'ul' | 'div'; label?: string }>(), {\r\n as: 'ul',\r\n label: 'Files in this message',\r\n items: () => [\r\n { name: 'Quote kitchen Project 1 v2.pdf', size: '1.2 MB', href: '#quote.pdf' },\r\n { name: 'Measurements ground floor.xlsx', size: '86 KB', href: '#measurements.xlsx' },\r\n { name: 'Contract addendum.docx', size: '240 KB', href: '#contract.docx' },\r\n { name: 'Plans architect.zip', size: '14.8 MB', href: '#plans.zip' },\r\n ],\r\n})\r\nconst emit = defineEmits<{ remove: [file: AttachmentFile, index: number] }>()\r\n</script>\r\n\r\n<template>\r\n <component :is=\"as\" :class=\"['oc-attachment-list', stack && 'oc-attachment-list--stack']\" :aria-label=\"label\">\r\n <slot>\r\n <template v-for=\"(f, i) in items\" :key=\"i\">\r\n <li v-if=\"as === 'ul'\"><OcAttachment v-bind=\"f\" @remove=\"emit('remove', f, i)\" /></li>\r\n <OcAttachment v-else v-bind=\"f\" @remove=\"emit('remove', f, i)\" />\r\n </template>\r\n </slot>\r\n </component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcAttachmentThumb.vue | Map: props -> .oc-attachment-thumb (img or placeholder art, remove button) -->\r\n<script setup lang=\"ts\">\r\n/** Square thumbnail of a pasted screenshot (snippets/attachment.html). removeLabel adds the remove button. Emits: remove. */\r\nwithDefaults(defineProps<{ src?: string; alt: string; art?: number; removeLabel?: string; as?: 'div' | 'span' }>(), { as: 'div' })\r\nconst emit = defineEmits<{ remove: [] }>()\r\n</script>\r\n\r\n<template>\r\n <component :is=\"as\" class=\"oc-attachment-thumb\">\r\n <img v-if=\"src\" :src=\"src\" :alt=\"alt\" />\r\n <span v-else :class=\"['oc-media-art', art != null && `oc-media-art--${art}`]\" role=\"img\" :aria-label=\"alt\"></span>\r\n <button v-if=\"removeLabel\" type=\"button\" class=\"oc-attachment__remove\" :aria-label=\"removeLabel\" @click=\"emit('remove')\">✕</button>\r\n </component>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Avatar (initials via the default slot, or an image via `src`). Classes: .oc-avatar--sm/lg/xl */\r\nwithDefaults(\r\n defineProps<{\r\n size?: 'sm' | 'md' | 'lg' | 'xl'\r\n src?: string\r\n alt?: string\r\n }>(),\r\n { size: 'md', alt: '' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <span :class=\"['oc-avatar', size !== 'md' && `oc-avatar--${size}`]\">\r\n <img v-if=\"src\" :src=\"src\" :alt=\"alt\" />\r\n <slot v-else />\r\n </span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Overlapping avatars. Put <OcAvatar> elements in the default slot. */\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-avatar-group\"><slot /></div>\r\n</template>\r\n","// File: packages/ui/src/form-extras.js\r\n// Map: ISO week -> date field (week label) -> name card (rename) -> avatar picker (preview, drop, remove) -> quantity\r\n// (step buttons) -> language code (the closed code select) -> init -> boot\r\n// Small behaviour for five CSS components; each works without it (native date input, <details>, file input, number input,\r\n// native select).\r\n// Events on the component root: oc-namecard-rename { name }, oc-avatar-change { file } (null when removed),\r\n// oc-avatar-invalid { file, reason } (wrong type or too large).\r\n\r\n/** ISO 8601 week of a date: { week, year } (the week with the year's first Thursday is week 1). */\r\nexport function isoWeek(date) {\r\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\r\n const day = d.getUTCDay() || 7;\r\n d.setUTCDate(d.getUTCDate() + 4 - day);\r\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\r\n return { week: Math.ceil(((d - yearStart) / 86400000 + 1) / 7), year: d.getUTCFullYear() };\r\n}\r\n\r\n/** .oc-date-field: write \"Week 45\" (or the template in data-oc-week, e.g. \"W{week} · {year}\") into its __week. */\r\nexport function bindDateField(root) {\r\n const input = root.querySelector(\".oc-date-field__input\");\r\n const out = root.querySelector(\".oc-date-field__week\");\r\n if (!input || !out || root.dataset.ocBound) return;\r\n root.dataset.ocBound = \"\";\r\n const template = out.dataset.ocWeek || \"Week {week}\";\r\n const show = () => {\r\n const [y, m, d] = (input.value || \"\").split(\"-\").map(Number);\r\n if (!y) { out.textContent = \"\"; return; }\r\n const { week, year } = isoWeek(new Date(y, m - 1, d));\r\n out.textContent = template.replace(\"{week}\", String(week)).replace(\"{year}\", String(year));\r\n };\r\n input.addEventListener(\"input\", show);\r\n input.addEventListener(\"change\", show);\r\n show();\r\n}\r\n\r\n/** .oc-name-card: the [data-oc-rename] button swaps the title for an input; Enter or blur saves, Escape cancels. */\r\nexport function bindNameCard(root) {\r\n const head = root.querySelector(\":scope > .oc-name-card__head\");\r\n const title = head?.querySelector(\".oc-name-card__title\");\r\n const button = head?.querySelector(\"[data-oc-rename]\");\r\n if (!title || !button || root.dataset.ocBound) return;\r\n root.dataset.ocBound = \"\";\r\n const input = document.createElement(\"input\");\r\n input.className = \"oc-name-card__input\";\r\n input.hidden = true;\r\n input.setAttribute(\"aria-label\", button.getAttribute(\"aria-label\") || \"Name\");\r\n title.after(input);\r\n const finish = (save) => {\r\n if (input.hidden) return;\r\n const name = input.value.trim();\r\n if (save && name && name !== title.textContent) {\r\n title.textContent = name;\r\n root.dispatchEvent(new CustomEvent(\"oc-namecard-rename\", { bubbles: true, detail: { name } }));\r\n }\r\n input.hidden = true;\r\n title.hidden = false;\r\n button.focus();\r\n };\r\n button.addEventListener(\"click\", (event) => {\r\n event.preventDefault(); // a button in <summary> would also toggle the card\r\n input.value = title.textContent.trim();\r\n title.hidden = true;\r\n input.hidden = false;\r\n input.focus();\r\n input.select();\r\n });\r\n // Typing in the input must not toggle the card (Space and Enter in a <summary>).\r\n input.addEventListener(\"click\", (event) => event.preventDefault());\r\n input.addEventListener(\"keydown\", (event) => {\r\n if (event.key === \"Enter\") { event.preventDefault(); finish(true); }\r\n if (event.key === \"Escape\") { event.preventDefault(); finish(false); }\r\n if (event.key === \" \") event.stopPropagation();\r\n });\r\n input.addEventListener(\"keyup\", (event) => { if (event.key === \" \") event.preventDefault(); });\r\n input.addEventListener(\"blur\", () => finish(true));\r\n}\r\n\r\n/** Does file match an accept list (\"image/*\", \"image/png,.svg\")? An empty list accepts images only. */\r\nexport function acceptsFile(file, accept = \"image/*\") {\r\n if (!file) return false;\r\n const rules = (accept || \"image/*\").split(\",\").map((r) => r.trim().toLowerCase()).filter(Boolean);\r\n const type = (file.type || \"\").toLowerCase();\r\n const name = (file.name || \"\").toLowerCase();\r\n return rules.some((r) => (r.startsWith(\".\") ? name.endsWith(r) : r.endsWith(\"/*\") ? type.startsWith(r.slice(0, -1)) : type === r));\r\n}\r\n\r\n/** .oc-avatar-picker: preview the chosen or dropped image; [data-oc-avatar-remove] goes back to the initials.\r\n * A file that does not match the input's accept (a PDF picked through \"All files\") or is larger than\r\n * data-oc-max-kb is refused: the input is cleared and .oc-avatar-picker__error says why (oc-avatar-invalid). */\r\nexport function bindAvatarPicker(root) {\r\n const preview = root.querySelector(\".oc-avatar-picker__preview\");\r\n const file = root.querySelector(\".oc-avatar-picker__file\");\r\n if (!preview || !file || root.dataset.ocBound) return;\r\n root.dataset.ocBound = \"\";\r\n const initials = preview.querySelector(\"[data-oc-initials]\") || null;\r\n let url = \"\";\r\n const error = (text) => {\r\n let box = root.querySelector(\".oc-avatar-picker__error\");\r\n if (!box && text) {\r\n box = document.createElement(\"span\");\r\n box.className = \"oc-avatar-picker__error\";\r\n box.setAttribute(\"role\", \"alert\");\r\n (root.querySelector(\".oc-avatar-picker__text\") || root).append(box);\r\n }\r\n if (box) { box.textContent = text; box.hidden = !text; }\r\n root.classList.toggle(\"is-invalid\", Boolean(text));\r\n };\r\n const show = (picked) => {\r\n if (url) URL.revokeObjectURL(url);\r\n url = \"\";\r\n preview.querySelector(\"img\")?.remove();\r\n if (initials) initials.hidden = Boolean(picked);\r\n if (picked) {\r\n url = URL.createObjectURL(picked);\r\n const img = document.createElement(\"img\");\r\n img.src = url;\r\n img.alt = \"\";\r\n preview.prepend(img);\r\n }\r\n root.dispatchEvent(new CustomEvent(\"oc-avatar-change\", { bubbles: true, detail: { file: picked || null } }));\r\n };\r\n const take = (picked) => {\r\n if (!picked) return show(null);\r\n const maxKb = Number(root.dataset.ocMaxKb || 0);\r\n const reason = !acceptsFile(picked, file.accept) ? (root.dataset.ocTypeError || \"This file is not an image. Choose a PNG, JPG, WebP or SVG.\")\r\n : maxKb && picked.size > maxKb * 1024 ? (root.dataset.ocSizeError || `This image is larger than ${maxKb >= 1024 ? `${Math.round(maxKb / 102.4) / 10} MB` : `${maxKb} KB`}.`) : \"\";\r\n if (reason) {\r\n file.value = \"\";\r\n error(reason);\r\n root.dispatchEvent(new CustomEvent(\"oc-avatar-invalid\", { bubbles: true, detail: { file: picked, reason } }));\r\n return;\r\n }\r\n error(\"\");\r\n show(picked);\r\n };\r\n file.addEventListener(\"change\", () => take(file.files?.[0] || null));\r\n root.addEventListener(\"click\", (event) => {\r\n if (event.target.closest(\"[data-oc-avatar-upload]\")) file.click();\r\n if (event.target.closest(\"[data-oc-avatar-remove]\")) { file.value = \"\"; error(\"\"); show(null); }\r\n });\r\n root.addEventListener(\"dragover\", (event) => { event.preventDefault(); root.classList.add(\"is-dragover\"); });\r\n root.addEventListener(\"dragleave\", () => root.classList.remove(\"is-dragover\"));\r\n root.addEventListener(\"drop\", (event) => {\r\n event.preventDefault();\r\n root.classList.remove(\"is-dragover\");\r\n const picked = event.dataTransfer?.files?.[0];\r\n if (!picked) return;\r\n // A dropped file never reaches the input, so put it there for the form (where the browser allows it).\r\n if (acceptsFile(picked, file.accept)) try { const dt = new DataTransfer(); dt.items.add(picked); file.files = dt.files; } catch { /* old browsers */ }\r\n take(picked);\r\n });\r\n}\r\n\r\n/** Next value of a quantity: one step (data-oc-step = -1 or 1) within min and max, on the step grid. */\r\nexport function stepQuantity(value, direction, { min = -Infinity, max = Infinity, step = 1 } = {}) {\r\n const size = step > 0 ? step : 1;\r\n const base = Number.isFinite(min) ? min : 0;\r\n const current = Number.isFinite(value) ? value : base;\r\n // Off the step grid (2.5 with step 1), the first step lands on the grid: 3 up, 2 down.\r\n const k = (current - base) / size;\r\n const onGrid = Math.abs(k - Math.round(k)) < 1e-9;\r\n const next = onGrid ? current + direction * size : base + (direction > 0 ? Math.ceil(k) : Math.floor(k)) * size;\r\n return Math.min(max, Math.max(min, Number(next.toFixed(6))));\r\n}\r\n\r\n/** .oc-quantity: the [data-oc-step] buttons change the number input and disable themselves at min / max. */\r\nexport function bindQuantity(root) {\r\n const input = root.querySelector(\".oc-quantity__input\");\r\n if (!input || root.dataset.ocBound) return;\r\n root.dataset.ocBound = \"\";\r\n const num = (attr, fallback) => (input.getAttribute(attr) === null || input.getAttribute(attr) === \"\" ? fallback : Number(input.getAttribute(attr)));\r\n const limits = () => ({ min: num(\"min\", -Infinity), max: num(\"max\", Infinity), step: num(\"step\", 1) });\r\n const sync = () => {\r\n const { min, max } = limits();\r\n const value = Number(input.value);\r\n root.querySelectorAll(\"[data-oc-step]\").forEach((button) => {\r\n const down = Number(button.dataset.ocStep) < 0;\r\n button.disabled = input.disabled || (down ? value <= min : value >= max);\r\n });\r\n };\r\n root.addEventListener(\"click\", (event) => {\r\n const button = event.target.closest(\"[data-oc-step]\");\r\n if (!button || !root.contains(button) || input.disabled || input.readOnly) return;\r\n const next = stepQuantity(Number(input.value), Number(button.dataset.ocStep) < 0 ? -1 : 1, limits());\r\n if (String(next) === input.value) return;\r\n input.value = String(next);\r\n input.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n input.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n });\r\n input.addEventListener(\"input\", sync);\r\n input.addEventListener(\"change\", sync);\r\n sync();\r\n}\r\n\r\n/** The code shown by a closed .oc-language-select--code: the chosen option's data-code, else its value, upper case. */\r\nexport function languageCode(select) {\r\n const option = select.selectedOptions?.[0] ?? select.options?.[select.selectedIndex];\r\n return String(option?.dataset.code || select.value || \"\").toUpperCase();\r\n}\r\n\r\n/** .oc-language-select--code: keep data-code on the wrapper in step with the select. */\r\nexport function bindLanguageCode(root) {\r\n const select = root.querySelector(\"select\");\r\n if (!select || root.dataset.ocBound) return;\r\n root.dataset.ocBound = \"\";\r\n const sync = () => { root.dataset.code = languageCode(select); };\r\n select.addEventListener(\"change\", sync);\r\n sync();\r\n}\r\n\r\n/** Wire every date field, name card, avatar picker, quantity field and code language select under scope. */\r\nexport function initFormExtras(scope = document) {\r\n scope.querySelectorAll(\".oc-date-field\").forEach(bindDateField);\r\n scope.querySelectorAll(\".oc-name-card\").forEach(bindNameCard);\r\n scope.querySelectorAll(\".oc-avatar-picker\").forEach(bindAvatarPicker);\r\n scope.querySelectorAll(\".oc-quantity\").forEach(bindQuantity);\r\n scope.querySelectorAll(\".oc-language-select--code\").forEach(bindLanguageCode);\r\n}\r\n\r\n// Starts on its own as /js/oc-form-extras.js (`npx omniaui copy-js`), with ?auto in the URL or data-oc-auto on the tag.\r\nfunction autoStart() {\r\n if (typeof document === \"undefined\") return false;\r\n const url = String(import.meta.url);\r\n if (url.includes(\"oc-form-extras\") || /[?&]auto(=|&|$)/.test(url)) return true;\r\n const file = url.split(/[?#]/)[0];\r\n return [...document.querySelectorAll(\"script[data-oc-auto][src]\")].some((s) => s.src.split(/[?#]/)[0] === file);\r\n}\r\nif (autoStart()) {\r\n const boot = () => initFormExtras(document);\r\n if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", boot);\r\n else boot();\r\n}\r\n","<!-- File: packages/vue/src/components/OcAvatarPicker.vue | Map: props -> preview + file input -> text and buttons -> change event on mount -->\r\n<script setup lang=\"ts\">\r\n/** Avatar or logo picker with a preview, Upload and Remove, and drag and drop. Emits change (File or null) and invalid (File, reason) for a wrong type or a file over maxKb. */\r\nimport { onMounted, useId, useTemplateRef } from 'vue'\r\nimport { bindAvatarPicker } from '../../../ui/src/form-extras.js'\r\n\r\nwithDefaults(defineProps<{ initials: string; label?: string; hint?: string; logo?: boolean; name?: string; accept?: string; maxKb?: number }>(), { label: 'Profile picture', logo: false, accept: 'image/*' })\r\nconst emit = defineEmits<{ change: [file: File | null]; invalid: [file: File, reason: string] }>()\r\nconst id = useId()\r\nconst root = useTemplateRef<HTMLDivElement>('root')\r\nonMounted(() => {\r\n if (!root.value) return\r\n bindAvatarPicker(root.value)\r\n root.value.addEventListener('oc-avatar-change', (e) => emit('change', (e as CustomEvent<{ file: File | null }>).detail.file))\r\n root.value.addEventListener('oc-avatar-invalid', (e) => { const d = (e as CustomEvent<{ file: File; reason: string }>).detail; emit('invalid', d.file, d.reason) })\r\n})\r\n</script>\r\n\r\n<template>\r\n <div ref=\"root\" :class=\"['oc-avatar-picker', logo && 'oc-avatar-picker--square oc-avatar-picker--logo']\" :data-oc-max-kb=\"maxKb\">\r\n <label class=\"oc-avatar-picker__preview\" :for=\"id\" title=\"Choose an image\">\r\n <span data-oc-initials>{{ initials }}</span>\r\n <input :id=\"id\" class=\"oc-avatar-picker__file\" type=\"file\" :accept=\"accept\" :name=\"name\">\r\n </label>\r\n <div class=\"oc-avatar-picker__text\">\r\n <span class=\"oc-avatar-picker__label\">{{ label }}</span>\r\n <span v-if=\"hint\" class=\"oc-avatar-picker__hint\">{{ hint }}</span>\r\n <div class=\"oc-avatar-picker__actions\">\r\n <button type=\"button\" class=\"oc-btn oc-btn--outline oc-btn--sm\" data-oc-avatar-upload><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M9 16v-6H5l7-7l7 7h-4v6zm-4 4v-2h14v2z\" /></svg>Upload</button>\r\n <button type=\"button\" class=\"oc-btn oc-btn--ghost oc-btn--sm\" data-oc-avatar-remove><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12z\" /></svg>Remove</button>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Outline link that names its destination (Back to Products). */\r\nwithDefaults(defineProps<{ href?: string }>(), { href: '#' })\r\n</script>\r\n\r\n<template>\r\n <a class=\"oc-back-link\" :href=\"href\"><slot /></a>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Badge. Classes: .oc-badge + --secondary/--outline/--destructive/--success/--warning/--info */\r\nwithDefaults(\r\n defineProps<{\r\n variant?: 'default' | 'secondary' | 'outline' | 'destructive' | 'success' | 'warning' | 'info'\r\n }>(),\r\n { variant: 'default' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <span :class=\"['oc-badge', variant !== 'default' && `oc-badge--${variant}`]\"><slot /></span>\r\n</template>\r\n","// File: packages/ui/src/barcode.js\r\n// Map: format guess -> EAN-13 / EAN-8 / UPC-A -> Code 128 (B, or C for even digit runs) -> bars to SVG -> SVG file -> bind -> boot\r\n// Barcode display without a dependency : <figure class=\"oc-barcode\" data-value=\"5412345678908\">\r\n// gets an SVG with the bars and the digits under it. data-format=\"auto|EAN13|EAN8|UPC|CODE128\" (default auto).\r\n\r\n/** Module widths of the Code 128 symbols 0–105 (6 elements, 11 modules each) and the stop (7 elements, 13 modules). */\r\nexport const CODE128 = [\r\n \"212222\", \"222122\", \"222221\", \"121223\", \"121322\", \"131222\", \"122213\", \"122312\", \"132212\", \"221213\",\r\n \"221312\", \"231212\", \"112232\", \"122132\", \"122231\", \"113222\", \"123122\", \"123221\", \"223211\", \"221132\",\r\n \"221231\", \"213212\", \"223112\", \"312131\", \"311222\", \"321122\", \"321221\", \"312212\", \"322112\", \"322211\",\r\n \"212123\", \"212321\", \"232121\", \"111323\", \"131123\", \"131321\", \"112313\", \"132113\", \"132311\", \"211313\",\r\n \"231113\", \"231311\", \"112133\", \"112331\", \"132131\", \"113123\", \"113321\", \"133121\", \"313121\", \"211331\",\r\n \"231131\", \"213113\", \"213311\", \"213131\", \"311123\", \"311321\", \"331121\", \"312113\", \"312311\", \"332111\",\r\n \"314111\", \"221411\", \"431111\", \"111224\", \"111422\", \"121124\", \"121421\", \"141122\", \"141221\", \"112214\",\r\n \"112412\", \"122114\", \"122411\", \"142112\", \"142211\", \"241211\", \"221114\", \"413111\", \"241112\", \"134111\",\r\n \"111242\", \"121142\", \"121241\", \"114212\", \"124112\", \"124211\", \"411212\", \"421112\", \"421211\", \"212141\",\r\n \"214121\", \"412121\", \"111143\", \"111341\", \"131141\", \"114113\", \"114311\", \"411113\", \"411311\", \"113141\",\r\n \"114131\", \"311141\", \"411131\", \"211412\", \"211214\", \"211232\",\r\n];\r\nconst STOP = \"2331112\";\r\nconst START_B = 104;\r\nconst START_C = 105;\r\n\r\nconst L = [\"0001101\", \"0011001\", \"0010011\", \"0111101\", \"0100011\", \"0110001\", \"0101111\", \"0111011\", \"0110111\", \"0001011\"];\r\nconst G = [\"0100111\", \"0110011\", \"0011011\", \"0100001\", \"0011101\", \"0111001\", \"0000101\", \"0010001\", \"0001001\", \"0010111\"];\r\nconst R = L.map((code) => code.replace(/./g, (bit) => (bit === \"1\" ? \"0\" : \"1\")));\r\nconst PARITY = [\"LLLLLL\", \"LLGLGG\", \"LLGGLG\", \"LLGGGL\", \"LGLLGG\", \"LGGLLG\", \"LGGGLL\", \"LGLGLG\", \"LGLGGL\", \"LGGLGL\"];\r\n\r\n/** EAN-13, EAN-8 or UPC-A for plain digit strings of that length (with or without the check digit); else Code 128. */\r\nexport function guessFormat(value) {\r\n if (/^\\d{12,13}$/.test(value)) return \"EAN13\";\r\n if (/^\\d{7,8}$/.test(value)) return \"EAN8\";\r\n if (/^\\d{11}$/.test(value)) return \"UPC\";\r\n return \"CODE128\";\r\n}\r\n\r\n/** Check digit of an EAN/UPC body: weights 3 and 1 from the right. */\r\nexport function eanCheck(body) {\r\n let sum = 0;\r\n [...body].reverse().forEach((d, i) => { sum += Number(d) * (i % 2 === 0 ? 3 : 1); });\r\n return String((10 - (sum % 10)) % 10);\r\n}\r\n\r\n/** Bars (a \"1010…\" module string) and the full digits for EAN-13 / EAN-8; throws on a wrong check digit. */\r\nexport function encodeEan(value, length) {\r\n const body = value.slice(0, length - 1);\r\n const check = eanCheck(body);\r\n if (value.length === length && value[length - 1] !== check) throw new Error(`check digit should be ${check}`);\r\n const digits = body + check;\r\n if (length === 8) {\r\n const left = [...digits.slice(0, 4)].map((d) => L[d]).join(\"\");\r\n const right = [...digits.slice(4)].map((d) => R[d]).join(\"\");\r\n return { bits: `101${left}01010${right}101`, text: digits };\r\n }\r\n const parity = PARITY[digits[0]];\r\n const left = [...digits.slice(1, 7)].map((d, i) => (parity[i] === \"L\" ? L : G)[d]).join(\"\");\r\n const right = [...digits.slice(7)].map((d) => R[d]).join(\"\");\r\n return { bits: `101${left}01010${right}101`, text: digits };\r\n}\r\n\r\n/** Code 128 symbol values for a text: code C for an all-digit text of even length (4+), else code B (ASCII 32–126). */\r\nexport function code128Values(text) {\r\n let values;\r\n if (/^(\\d\\d){2,}$/.test(text)) {\r\n values = [START_C, ...text.match(/\\d\\d/g).map(Number)];\r\n } else {\r\n if (/[^\\x20-\\x7e]/.test(text)) throw new Error(\"Code 128 B takes ASCII characters 32–126 only\");\r\n values = [START_B, ...[...text].map((ch) => ch.charCodeAt(0) - 32)];\r\n }\r\n const check = values.reduce((sum, v, i) => sum + v * (i === 0 ? 1 : i), 0) % 103;\r\n return [...values, check];\r\n}\r\n\r\n/** Module string (\"1\" = bar) for Code 128. */\r\nexport function encodeCode128(text) {\r\n const widths = code128Values(text).map((v) => CODE128[v]).join(\"\") + STOP;\r\n let bits = \"\";\r\n [...widths].forEach((w, i) => { bits += (i % 2 === 0 ? \"1\" : \"0\").repeat(Number(w)); });\r\n return { bits, text };\r\n}\r\n\r\n/** Encode a value in a format (auto picks one). Returns the module string and the human-readable text. */\r\nexport function encodeBarcode(value, format = \"auto\") {\r\n const code = String(value ?? \"\").trim();\r\n if (!code) throw new Error(\"empty value\");\r\n const kind = format === \"auto\" ? guessFormat(code) : format.toUpperCase();\r\n if (kind === \"EAN13\") return encodeEan(code.padStart(code.length === 12 ? 12 : 13, \"0\"), 13);\r\n if (kind === \"UPC\") return encodeEan(`0${code}`, 13);\r\n if (kind === \"EAN8\") return encodeEan(code, 8);\r\n return encodeCode128(code);\r\n}\r\n\r\n/** Text for HTML: the value can come from user input (Code 128 encodes < > & \" too). */\r\nconst escapeHtml = (text) => String(text).replace(/[&<>\"']/g, (ch) => `&#${ch.charCodeAt(0)};`);\r\n\r\n/** SVG markup of the bars, with a quiet zone of 10 modules on both sides. Bars use currentColor. */\r\nexport function barsToSvg(bits, label = \"\") {\r\n const quiet = 10;\r\n let rects = \"\";\r\n for (let i = 0; i < bits.length; ) {\r\n if (bits[i] !== \"1\") { i++; continue; }\r\n let w = 1;\r\n while (bits[i + w] === \"1\") w++;\r\n rects += `<rect x=\"${i + quiet}\" y=\"0\" width=\"${w}\" height=\"50\"/>`;\r\n i += w;\r\n }\r\n const width = bits.length + quiet * 2;\r\n return `<svg viewBox=\"0 0 ${width} 50\" preserveAspectRatio=\"none\" fill=\"currentColor\" role=\"img\" aria-label=\"${escapeHtml(label)}\" style=\"aspect-ratio:${width}/50\">${rects}</svg>`;\r\n}\r\n\r\n/** A standalone SVG file (white background, black bars, digits under it) to download, print or put on a label.\r\n * The barcode maker form (download, live preview) is part of OmniaUI Pro: @birdycom/omniaui-pro/barcode-maker.js.\r\n * moduleWidth and height are in px; throws like encodeBarcode for a value it cannot encode. */\r\nexport function barcodeFile(value, { format = \"auto\", digits = true, moduleWidth = 2, height = 70 } = {}) {\r\n const { bits, text } = encodeBarcode(value, format);\r\n const quiet = 10;\r\n const font = 14;\r\n const width = (bits.length + quiet * 2) * moduleWidth;\r\n const full = height + (digits ? font + 8 : 0) + 8;\r\n let rects = \"\";\r\n for (let i = 0; i < bits.length; ) {\r\n if (bits[i] !== \"1\") { i++; continue; }\r\n let w = 1;\r\n while (bits[i + w] === \"1\") w++;\r\n rects += `<rect x=\"${(i + quiet) * moduleWidth}\" y=\"4\" width=\"${w * moduleWidth}\" height=\"${height}\"/>`;\r\n i += w;\r\n }\r\n const caption = digits ? `<text x=\"${width / 2}\" y=\"${height + font + 8}\" text-anchor=\"middle\" font-family=\"ui-monospace, Consolas, monospace\" font-size=\"${font}\" letter-spacing=\"1\">${escapeHtml(text)}</text>` : \"\";\r\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${full}\" viewBox=\"0 0 ${width} ${full}\"><rect width=\"100%\" height=\"100%\" fill=\"#fff\"/><g fill=\"#000\">${rects}${caption}</g></svg>`;\r\n}\r\n\r\n/** Draw one .oc-barcode from its data-value and data-format. Shows a short error instead of bars when it cannot. */\r\nexport function renderBarcode(el) {\r\n if (!el) return;\r\n const value = el.dataset.value ?? \"\";\r\n const digits = el.dataset.digits !== \"false\";\r\n try {\r\n const { bits, text } = encodeBarcode(value, el.dataset.format || \"auto\");\r\n el.removeAttribute(\"data-error\");\r\n el.innerHTML = barsToSvg(bits, `Barcode ${text}`) + (digits ? `<figcaption class=\"oc-barcode__digits\">${escapeHtml(text)}</figcaption>` : \"\");\r\n } catch (err) {\r\n el.setAttribute(\"data-error\", \"\");\r\n el.innerHTML = `<figcaption class=\"oc-barcode__digits\">${escapeHtml(value)}: ${escapeHtml(err.message)}</figcaption>`;\r\n }\r\n}\r\n\r\n/** Draw every .oc-barcode[data-value] under scope. */\r\nexport function initBarcodes(scope = document) {\r\n scope.querySelectorAll(\".oc-barcode[data-value]\").forEach(renderBarcode);\r\n}\r\n\r\n// Starts on its own as /js/oc-barcode.js (`npx omniaui copy-js`), with ?auto in the URL or data-oc-auto on the tag.\r\nfunction autoStart() {\r\n if (typeof document === \"undefined\") return false;\r\n const url = String(import.meta.url);\r\n if (url.includes(\"oc-barcode\") || /[?&]auto(=|&|$)/.test(url)) return true;\r\n const file = url.split(/[?#]/)[0];\r\n return [...document.querySelectorAll(\"script[data-oc-auto][src]\")].some((s) => s.src.split(/[?#]/)[0] === file);\r\n}\r\nif (autoStart()) {\r\n const boot = () => initBarcodes(document);\r\n if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", boot);\r\n else boot();\r\n}\r\n","<!-- File: packages/vue/src/components/OcBarcode.vue | Map: props -> encode -> svg + digits -->\r\n<script setup lang=\"ts\">\r\n/** EAN-13, EAN-8, UPC-A or Code 128 as SVG; shows the reason when the value cannot be encoded. */\r\nimport { computed } from 'vue'\r\nimport { barsToSvg, encodeBarcode } from '../../../ui/src/barcode.js'\r\n\r\nconst props = withDefaults(defineProps<{ value: string; format?: 'auto' | 'EAN13' | 'EAN8' | 'UPC' | 'CODE128'; digits?: boolean; size?: 'md' | 'hero' | 'compact' }>(), { format: 'auto', digits: true, size: 'md' })\r\nconst result = computed(() => {\r\n try {\r\n const { bits, text } = encodeBarcode(props.value, props.format)\r\n return { svg: barsToSvg(bits, `Barcode ${text}`), text, error: '' }\r\n } catch (err) {\r\n return { svg: '', text: props.value, error: (err as Error).message }\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <figure :class=\"['oc-barcode', size !== 'md' && `oc-barcode--${size}`]\" :data-error=\"result.error ? '' : undefined\">\r\n <span v-if=\"result.svg\" style=\"display: contents\" v-html=\"result.svg\"></span>\r\n <figcaption v-if=\"digits || result.error\" class=\"oc-barcode__digits\">{{ result.error ? `${value}: ${result.error}` : result.text }}</figcaption>\r\n </figure>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcBarcodeInput.vue | Map: props + model -> template (label, digits-only field, preview figure + slot) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Barcode / EAN field with a preview. v-model: string (digits only).\r\n * Slot `preview`: your own <svg>/<canvas> barcode; default = decorative placeholder bars.\r\n * Same markup as packages/ui/snippets/barcode-input.html. class/style on the wrapper, other attributes on the input.\r\n */\r\nimport { computed } from 'vue'\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nconst props = withDefaults(defineProps<{ label?: string; id?: string; emptyText?: string; error?: boolean }>(), { emptyText: 'No code yet' })\r\nconst model = defineModel<string>({ default: '' })\r\nconst { root, control } = useAttrsSplit()\r\nconst auto = useUid('oc-barcode')\r\nconst inputId = computed(() => props.id ?? auto)\r\n\r\nfunction onInput(e: Event) {\r\n const input = e.target as HTMLInputElement\r\n model.value = input.value\r\n}\r\n</script>\r\n\r\n<template>\r\n <div v-bind=\"root\" class=\"oc-barcode-input\">\r\n <label v-if=\"label\" class=\"oc-field-label\" :for=\"inputId\">{{ label }}</label>\r\n <div class=\"oc-input-group oc-input-group--affix\">\r\n <span class=\"oc-input-addon\" aria-hidden=\"true\">\r\n <svg viewBox=\"0 0 16 16\"><path fill=\"currentColor\" d=\"M1 1h1.4v14H1zm2.2 0h.7v14h-.7zm1.6 0h1.5v14H4.8zm2.4 0h.7v14H7.2zm1.6 0h.7v14H8.8zm1.5 0h1.4v14h-1.4zm2.2 0H15v14h-.9z\" /></svg>\r\n </span>\r\n <input\r\n v-bind=\"control\"\r\n :id=\"inputId\"\r\n class=\"oc-input oc-barcode-input-field\"\r\n type=\"text\"\r\n autocomplete=\"off\"\r\n spellcheck=\"false\"\r\n maxlength=\"80\"\r\n placeholder=\"EAN-13 or internal code\"\r\n :aria-invalid=\"error ? 'true' : undefined\"\r\n :value=\"model\"\r\n @input=\"onInput\"\r\n />\r\n </div>\r\n <figure :class=\"['oc-barcode-preview', !model && 'oc-barcode-preview--empty']\" aria-label=\"Barcode preview\">\r\n <slot name=\"preview\"><div class=\"oc-barcode-preview-bars\" aria-hidden=\"true\"></div></slot>\r\n <figcaption class=\"oc-barcode-preview-code\">{{ model || emptyText }}</figcaption>\r\n </figure>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcBrandMark.vue | Map: link -> icon (slot) -> word (name + accent) -> tagline -->\r\n<script setup lang=\"ts\">\r\n/** Logo from an icon and text (snippets/brand-mark.html). Slot icon: an <svg class=\"oc-brand-mark__icon\"> or <img>. */\r\nwithDefaults(defineProps<{ name: string; accent?: string; tagline?: string; href?: string; size?: 'sm' | 'md' | 'lg' }>(), { href: '/', size: 'md' })\r\n</script>\r\n\r\n<template>\r\n <a :class=\"['oc-brand-mark', size !== 'md' && `oc-brand-mark--${size}`]\" :href=\"href\">\r\n <slot name=\"icon\" />\r\n <span class=\"oc-brand-mark__text\">\r\n <span class=\"oc-brand-mark__word\">{{ name }}<span v-if=\"accent\" class=\"oc-brand-mark__accent\">{{ accent }}</span></span>\r\n <span v-if=\"tagline\" class=\"oc-brand-mark__tagline\">{{ tagline }}</span>\r\n </span>\r\n </a>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Breadcrumb. Pass `items` (the last one is the current page) or use the default slot.\r\n * `icon` per item is a webicon name (mdi:home-outline …), drawn with <iconify-icon>; separator=\"chevron\" puts › between.\r\n */\r\nexport interface BreadcrumbItem {\r\n label: string\r\n href?: string\r\n icon?: string\r\n}\r\nwithDefaults(defineProps<{ items?: BreadcrumbItem[]; label?: string; separator?: 'slash' | 'chevron' }>(), {\r\n items: () => [],\r\n label: 'Breadcrumb',\r\n separator: 'slash',\r\n})\r\n</script>\r\n\r\n<template>\r\n <nav :class=\"['oc-breadcrumb', separator === 'chevron' && 'oc-breadcrumb--chevron']\" :aria-label=\"label\">\r\n <slot>\r\n <template v-for=\"(item, i) in items\" :key=\"i\">\r\n <a v-if=\"item.href && i < items.length - 1\" class=\"oc-breadcrumb-item\" :href=\"item.href\"\r\n ><iconify-icon v-if=\"item.icon\" :icon=\"item.icon\" aria-hidden=\"true\" />{{ item.label }}</a\r\n >\r\n <span v-else class=\"oc-breadcrumb-item\" aria-current=\"page\"\r\n ><iconify-icon v-if=\"item.icon\" :icon=\"item.icon\" aria-hidden=\"true\" />{{ item.label }}</span\r\n >\r\n </template>\r\n </slot>\r\n </nav>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcBrowserFrame.vue | Map: props -> figure -> bar (dots, address, actions) -> view (slot or img) -> caption -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Fake browser chrome (same markup as snippets/browser-frame.html).\r\n * Props: url (address pill), src / alt (screenshot), caption, minimal, dark, tilt, auto (free height), ratio (\"16 / 9\").\r\n * Slots: default (live content, replaces the screenshot), actions (glyphs right in the bar), caption.\r\n * Classes: .oc-browser-frame(--minimal/--dark/--tilt/--auto), __bar, __address, __actions, __view, __caption\r\n */\r\nwithDefaults(\r\n defineProps<{ url?: string; src?: string; alt?: string; caption?: string; minimal?: boolean; dark?: boolean; tilt?: boolean; auto?: boolean; ratio?: string }>(),\r\n { alt: '' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <figure\r\n :class=\"['oc-browser-frame', minimal && 'oc-browser-frame--minimal', dark && 'oc-browser-frame--dark', tilt && 'oc-browser-frame--tilt', auto && 'oc-browser-frame--auto']\"\r\n :style=\"ratio ? { '--oc-browser-frame-ratio': ratio } : undefined\"\r\n >\r\n <div class=\"oc-browser-frame__bar\">\r\n <i /><i /><i />\r\n <span v-if=\"url\" class=\"oc-browser-frame__address\">{{ url }}</span>\r\n <span v-if=\"$slots.actions\" class=\"oc-browser-frame__actions\" aria-hidden=\"true\"><slot name=\"actions\" /></span>\r\n </div>\r\n <div class=\"oc-browser-frame__view\">\r\n <slot>\r\n <img v-if=\"src\" :src=\"src\" :alt=\"alt\" />\r\n <div v-else class=\"oc-media-art\" role=\"img\" :aria-label=\"alt\" />\r\n </slot>\r\n </div>\r\n <figcaption v-if=\"caption || $slots.caption\" class=\"oc-browser-frame__caption\"><slot name=\"caption\">{{ caption }}</slot></figcaption>\r\n </figure>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Progress bar. `value` of `max` (default 100). Classes: .oc-progress(--sm/--xs/--glow), .oc-progress-bar--success/warning/danger,\r\n * .oc-progress-marker. `levels`: warning from 70 %, danger from 90 % (or [warning, danger]); an explicit variant wins.\r\n * `marker`: a target point in the unit of `value`. */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n value: number\r\n max?: number\r\n variant?: 'default' | 'success' | 'warning' | 'danger'\r\n size?: 'xs' | 'sm' | 'md'\r\n glow?: boolean\r\n levels?: boolean | [number, number]\r\n marker?: number\r\n label?: string\r\n }>(),\r\n { max: 100, variant: 'default', size: 'md', levels: false },\r\n)\r\nconst pct = (v: number) => (props.max > 0 ? Math.min(100, Math.max(0, (v / props.max) * 100)) : 0)\r\nconst percent = computed(() => Math.round(pct(props.value)))\r\nconst tone = computed(() => {\r\n if (props.variant !== 'default' || !props.levels) return props.variant\r\n const [warn, danger] = props.levels === true ? [70, 90] : props.levels\r\n return percent.value >= danger ? 'danger' : percent.value >= warn ? 'warning' : 'default'\r\n})\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"['oc-progress', size !== 'md' && `oc-progress--${size}`, glow && 'oc-progress--glow']\"\r\n role=\"progressbar\"\r\n :aria-valuenow=\"value\"\r\n aria-valuemin=\"0\"\r\n :aria-valuemax=\"max\"\r\n :aria-label=\"label\"\r\n >\r\n <div :class=\"['oc-progress-bar', tone !== 'default' && `oc-progress-bar--${tone}`]\" :style=\"{ width: `${percent}%` }\"></div>\r\n <span v-if=\"marker != null\" class=\"oc-progress-marker\" :style=\"{ left: `${pct(marker)}%` }\"></span>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcBusyOverlay.vue | Map: props + model -> <dialog closedby=\"none\"> (spinner or progress, title, text) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Modal \"please wait\" overlay (same markup as snippets/busy-overlay.html). v-model:open shows it while a long submit or\r\n * upload runs; the page is inert and Esc does not close it. `progress` (0-100) swaps the spinner for a progress bar.\r\n * Slot: default (replaces the text). Classes: .oc-busy-overlay __title __text; .oc-spinner / .oc-progress\r\n */\r\nimport { ref } from 'vue'\r\nimport { useDialog } from '../composables/useDialog'\r\nimport { useUid } from '../composables/useUid'\r\nimport OcProgress from './OcProgress.vue'\r\n\r\nconst props = withDefaults(defineProps<{ title?: string; text?: string; progress?: number; label?: string; id?: string }>(), {\r\n title: 'Saving…',\r\n text: 'The photos are being processed. This can take a minute; please keep this page open.',\r\n label: 'Busy',\r\n})\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst el = ref<HTMLDialogElement | null>(null)\r\nconst { onClose } = useDialog(open, el)\r\nconst auto = useUid('oc-busy-overlay')\r\nconst base = props.id ?? auto\r\n</script>\r\n\r\n<template>\r\n <dialog :id=\"base\" ref=\"el\" class=\"oc-busy-overlay\" closedby=\"none\" :aria-labelledby=\"`${base}-title`\" :aria-describedby=\"`${base}-text`\" @close=\"onClose\">\r\n <span v-if=\"progress == null\" class=\"oc-spinner\" role=\"status\" :aria-label=\"label\"></span>\r\n <OcProgress v-else :value=\"progress\" :label=\"label\" />\r\n <h2 :id=\"`${base}-title`\" class=\"oc-busy-overlay__title\">{{ title }}</h2>\r\n <p :id=\"`${base}-text`\" class=\"oc-busy-overlay__text\"><slot>{{ text }}</slot></p>\r\n </dialog>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Button. Renders <a> when `href` is set, otherwise <button>.\r\n * Classes: .oc-btn + --secondary/--outline/--ghost/--link/--destructive/--success/--gradient/--glass/--neon,\r\n * --soft-primary/-success/-warning/-destructive/-info (row actions), --plain (icon only, no surface),\r\n * --xs/--sm/--lg, --icon, --pill, --inline (link button inside running text). `loading` sets aria-busy (spinner).\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n variant?:\r\n | 'default' | 'secondary' | 'outline' | 'ghost' | 'link' | 'destructive' | 'success' | 'gradient' | 'glass' | 'neon'\r\n | 'soft-primary' | 'soft-success' | 'soft-warning' | 'soft-destructive' | 'soft-info' | 'plain'\r\n size?: 'xs' | 'sm' | 'md' | 'lg'\r\n icon?: boolean\r\n pill?: boolean\r\n inline?: boolean\r\n loading?: boolean\r\n disabled?: boolean\r\n href?: string\r\n type?: 'button' | 'submit' | 'reset'\r\n }>(),\r\n { variant: 'default', size: 'md', type: 'button' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <a\r\n v-if=\"href\"\r\n :href=\"href\"\r\n :aria-busy=\"loading || undefined\"\r\n :class=\"[\r\n 'oc-btn',\r\n variant !== 'default' && `oc-btn--${variant}`,\r\n size !== 'md' && `oc-btn--${size}`,\r\n icon && 'oc-btn--icon',\r\n pill && 'oc-btn--pill',\r\n inline && 'oc-btn--inline',\r\n ]\"\r\n >\r\n <slot />\r\n </a>\r\n <button\r\n v-else\r\n :type=\"type\"\r\n :aria-busy=\"loading || undefined\"\r\n :disabled=\"disabled || loading\"\r\n :class=\"[\r\n 'oc-btn',\r\n variant !== 'default' && `oc-btn--${variant}`,\r\n size !== 'md' && `oc-btn--${size}`,\r\n icon && 'oc-btn--icon',\r\n pill && 'oc-btn--pill',\r\n inline && 'oc-btn--inline',\r\n ]\"\r\n >\r\n <slot />\r\n </button>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Joined buttons with shared borders. `label` becomes aria-label. Put OcButton (usually variant outline) and OcButtonGroupText inside. Classes: .oc-btn-group(--vertical) */\r\ndefineProps<{ vertical?: boolean; label?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-btn-group', vertical && 'oc-btn-group--vertical']\" role=\"group\" :aria-label=\"label\">\r\n <slot />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Static text cell inside OcButtonGroup (a count, a unit). Class: .oc-btn-group-text */\r\n</script>\r\n\r\n<template>\r\n <span class=\"oc-btn-group-text\"><slot /></span>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcCallout.vue | Map: card row -> text (default slot) -> action (slot) -->\r\n<script setup lang=\"ts\">\r\n/** Small card with a text on the left (default slot) and an action on the right (slot `action`). */\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-callout\">\r\n <div class=\"oc-callout__text\"><slot /></div>\r\n <div v-if=\"$slots.action\" class=\"oc-callout__action\"><slot name=\"action\" /></div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Card with header, content and footer.\r\n * Slots: header (replaces title/description), default (content), footer. Classes: .oc-card--sm\r\n */\r\nwithDefaults(defineProps<{ title?: string; description?: string; size?: 'sm' | 'md' }>(), { size: 'md' })\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-card', size === 'sm' && 'oc-card--sm']\">\r\n <div v-if=\"title || description || $slots.header\" class=\"oc-card-header\">\r\n <slot name=\"header\">\r\n <h3 v-if=\"title\" class=\"oc-card-title\">{{ title }}</h3>\r\n <p v-if=\"description\" class=\"oc-card-description\">{{ description }}</p>\r\n </slot>\r\n </div>\r\n <div v-if=\"$slots.default\" class=\"oc-card-content\"><slot /></div>\r\n <div v-if=\"$slots.footer\" class=\"oc-card-footer\"><slot name=\"footer\" /></div>\r\n </div>\r\n</template>\r\n","// File: packages/vue/src/composables/chartLine.ts\r\n// Map: number format -> nice axis maximum -> smooth path (same geometry as the chart-line snippet and the React wrapper)\r\n\r\n/** Number with at most 2 decimals and no trailing zeros (\"75\", \"37.5\", \"4.69\"). */\r\nexport const n2 = (n: number) => String(parseFloat(n.toFixed(2)))\r\n\r\n/** Round axis maximum: step = max / rows rounded up to 1, 1.5, 2, 2.5, 3, 4, 5, 6, 8 or 10 x 10^k. */\r\nexport function niceMax(value: number, rows = 4) {\r\n if (value <= 0) return rows\r\n const raw = value / rows\r\n const pow = 10 ** Math.floor(Math.log10(raw))\r\n return ([1, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10].find((s) => s * pow >= raw) ?? 10) * pow * rows\r\n}\r\n\r\n/** Smooth path through the points (x 0-100, y = 100 - value / max * 100); control points stay between their two ends. */\r\nexport function chartLinePath(values: number[], max: number) {\r\n const pts = values.map((v, i) => [values.length > 1 ? (i / (values.length - 1)) * 100 : 50, 100 - (v / max) * 100])\r\n if (!pts.length) return ''\r\n const clamp = (v: number, a: number, b: number) => Math.min(Math.max(v, Math.min(a, b)), Math.max(a, b))\r\n let d = `M${n2(pts[0][0])} ${n2(pts[0][1])}`\r\n for (let i = 0; i < pts.length - 1; i++) {\r\n const p0 = pts[i - 1] ?? pts[i], p1 = pts[i], p2 = pts[i + 1], p3 = pts[i + 2] ?? p2\r\n const c1 = [p1[0] + (p2[0] - p0[0]) / 6, clamp(p1[1] + (p2[1] - p0[1]) / 6, p1[1], p2[1])]\r\n const c2 = [p2[0] - (p3[0] - p1[0]) / 6, clamp(p2[1] - (p3[1] - p1[1]) / 6, p1[1], p2[1])]\r\n d += ` C${n2(c1[0])} ${n2(c1[1])} ${n2(c2[0])} ${n2(c2[1])} ${n2(p2[0])} ${n2(p2[1])}`\r\n }\r\n return d\r\n}\r\n","<!-- File: packages/vue/src/components/OcChartLine.vue | Map: props + demo data -> computed axis / paths -> figure (head, y axis, plot: svg + hover columns, x axis, legend) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Line / area chart in inline SVG (same markup as snippets/chart-line.html); tooltips open on :hover / :focus-visible (CSS only).\r\n * series: { name, values, dashed? }[]; labels = one per point (tooltips), xLabels = short axis labels. max defaults to a round\r\n * number above the data. variant: line | area | spark; dots = always visible. Classes: .oc-chart-line(--area/--dots/--spark) __head\r\n * __title __sub __value __body __y __plot __svg __series __area __path(--dashed) __cols __col __dot __tip __row __x; .oc-chart-legend\r\n */\r\nimport { computed } from 'vue'\r\nimport { chartLinePath, n2, niceMax } from '../composables/chartLine'\r\n\r\nexport interface ChartLineSeries { name: string; values: number[]; dashed?: boolean }\r\nconst props = withDefaults(\r\n defineProps<{\r\n title?: string\r\n sub?: string\r\n value?: string\r\n series?: ChartLineSeries[]\r\n labels?: string[]\r\n xLabels?: string[]\r\n max?: number\r\n rows?: number\r\n variant?: 'line' | 'area' | 'spark'\r\n dots?: boolean\r\n label?: string\r\n }>(),\r\n {\r\n title: 'Visitors',\r\n sub: 'January – June 2026',\r\n series: () => [\r\n { name: 'Desktop', values: [186, 305, 237, 73, 209, 214] },\r\n { name: 'Mobile', values: [80, 200, 120, 190, 130, 140] },\r\n ],\r\n rows: 4,\r\n variant: 'line',\r\n dots: true,\r\n label: 'Visitors per month',\r\n },\r\n)\r\nconst MONTHS = ['January', 'February', 'March', 'April', 'May', 'June']\r\nconst labels = computed(() => props.labels ?? MONTHS)\r\nconst axis = computed(() => props.xLabels ?? props.labels ?? MONTHS.map((m) => m.slice(0, 3)))\r\nconst top = computed(() => props.max ?? niceMax(Math.max(0, ...props.series.flatMap((s) => s.values)), props.rows))\r\nconst count = computed(() => Math.max(0, ...props.series.map((s) => s.values.length)))\r\nconst paths = computed(() => props.series.map((s) => chartLinePath(s.values, top.value)))\r\nconst yLabels = computed(() => Array.from({ length: props.rows + 1 }, (_, i) => top.value - (top.value / props.rows) * i))\r\nconst colLabel = (i: number) => `${labels.value[i] ?? i + 1}: ${props.series.map((s) => `${s.name} ${s.values[i]}`).join(', ')}`\r\n</script>\r\n\r\n<template>\r\n <figure :class=\"['oc-chart-line', variant !== 'line' && `oc-chart-line--${variant}`, dots && 'oc-chart-line--dots']\">\r\n <figcaption v-if=\"title || sub || value\" class=\"oc-chart-line__head\">\r\n <span v-if=\"title\" class=\"oc-chart-line__title\">{{ title }}</span>\r\n <span v-if=\"sub\" class=\"oc-chart-line__sub\">{{ sub }}</span>\r\n <span v-if=\"value\" class=\"oc-chart-line__value\">{{ value }}</span>\r\n </figcaption>\r\n <div class=\"oc-chart-line__body\">\r\n <ul class=\"oc-chart-line__y\" aria-hidden=\"true\"><li v-for=\"(y, i) in yLabels\" :key=\"i\">{{ y }}</li></ul>\r\n <div class=\"oc-chart-line__plot\" :style=\"rows !== 4 ? `--oc-chart-line-rows:${rows}` : undefined\">\r\n <svg class=\"oc-chart-line__svg\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\" aria-hidden=\"true\">\r\n <g v-for=\"(s, i) in series\" :key=\"i\" class=\"oc-chart-line__series\">\r\n <path class=\"oc-chart-line__area\" :d=\"`${paths[i]} L100 100 L0 100 Z`\" />\r\n <path :class=\"['oc-chart-line__path', s.dashed && 'oc-chart-line__path--dashed']\" :d=\"paths[i]\" />\r\n </g>\r\n </svg>\r\n <ul class=\"oc-chart-line__cols\" :style=\"`--n:${count}`\" :aria-label=\"label\">\r\n <li v-for=\"i in count\" :key=\"i\" class=\"oc-chart-line__col\" :style=\"`--x:${i - 1}`\" tabindex=\"0\" :aria-label=\"colLabel(i - 1)\">\r\n <i v-for=\"(s, j) in series\" :key=\"j\" class=\"oc-chart-line__dot\" :style=\"`--y:${n2((s.values[i - 1] / top) * 100)}%`\"></i>\r\n <span class=\"oc-chart-line__tip\" aria-hidden=\"true\">\r\n <strong>{{ labels[i - 1] ?? i }}</strong>\r\n <span v-for=\"(s, j) in series\" :key=\"j\" class=\"oc-chart-line__row\">{{ s.name }}<b>{{ s.values[i - 1] }}</b></span>\r\n </span>\r\n </li>\r\n </ul>\r\n </div>\r\n <ol class=\"oc-chart-line__x\" aria-hidden=\"true\"><li v-for=\"(l, i) in axis\" :key=\"i\">{{ l }}</li></ol>\r\n </div>\r\n <ul class=\"oc-chart-legend\"><li v-for=\"(s, i) in series\" :key=\"i\"><span class=\"oc-chart-swatch\"></span>{{ s.name }}</li></ul>\r\n </figure>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcChatComposer.vue | Map: props + v-model -> form -> label + textarea -> bar (tools slot, hint, send) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Chat composer (same markup as snippets/chat-composer.html). v-model = text. Emits send(text) on submit\r\n * (then clears the field). Enter sends, Shift+Enter adds a line (sendOnEnter, default true).\r\n * Props: placeholder, label, hint, inline, disabled. Slot: tools (.oc-chat-composer__tool buttons).\r\n * Classes: .oc-chat-composer(--inline), __input, __bar, __tools, __tool, __hint, __send\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = withDefaults(\r\n defineProps<{ placeholder?: string; label?: string; hint?: string; inline?: boolean; sendOnEnter?: boolean; disabled?: boolean }>(),\r\n { placeholder: 'Write a message…', label: 'Message', sendOnEnter: true },\r\n)\r\nconst text = defineModel<string>({ default: '' })\r\nconst emit = defineEmits<{ send: [text: string] }>()\r\nconst id = useUid('oc-chat')\r\n\r\nfunction submit() {\r\n if (!text.value.trim() || props.disabled) return\r\n emit('send', text.value.trim())\r\n text.value = ''\r\n}\r\nfunction onKeydown(e: KeyboardEvent) {\r\n if (props.sendOnEnter && e.key === 'Enter' && !e.shiftKey && !e.isComposing) {\r\n e.preventDefault()\r\n ;(e.target as HTMLTextAreaElement).form?.requestSubmit()\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <form :class=\"['oc-chat-composer', inline && 'oc-chat-composer--inline']\" @submit.prevent=\"submit\">\r\n <label class=\"oc-visually-hidden\" :for=\"id\">{{ label }}</label>\r\n <textarea :id=\"id\" v-model=\"text\" class=\"oc-chat-composer__input\" rows=\"1\" :placeholder=\"placeholder\" required :disabled=\"disabled\" @keydown=\"onKeydown\" />\r\n <div class=\"oc-chat-composer__bar\">\r\n <div v-if=\"$slots.tools\" class=\"oc-chat-composer__tools\"><slot name=\"tools\" /></div>\r\n <span v-if=\"hint\" class=\"oc-chat-composer__hint\">{{ hint }}</span>\r\n <button type=\"submit\" class=\"oc-chat-composer__send\" aria-label=\"Send\" :disabled=\"disabled\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M2 21l21-9L2 3v7l15 2l-15 2z\"/></svg></button>\r\n </div>\r\n </form>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Checkbox or radio inside a label. v-model: boolean (checkbox), array (checkbox group with `value`)\r\n * or the selected `value` (radio). Attributes other than class/style go to the input.\r\n */\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nwithDefaults(\r\n defineProps<{\r\n type?: 'checkbox' | 'radio'\r\n value?: unknown\r\n label?: string\r\n }>(),\r\n { type: 'checkbox' },\r\n)\r\nconst model = defineModel<any>()\r\nconst { root, control } = useAttrsSplit()\r\n</script>\r\n\r\n<template>\r\n <label v-bind=\"root\">\r\n <input v-bind=\"control\" v-model=\"model\" :class=\"type === 'radio' ? 'oc-radio' : 'oc-checkbox'\" :type=\"type\" :value=\"value\" />\r\n <slot><template v-if=\"label\"> {{ label }}</template></slot>\r\n </label>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Rule / step list with met and unmet states. Classes: .oc-checklist(--card), .oc-checklist-item.is-done\r\n * Slots: default (replaces all rows), action (scoped: item) in the card variant.\r\n */\r\nexport interface ChecklistItem {\r\n title: string\r\n hint?: string\r\n done?: boolean\r\n}\r\nwithDefaults(defineProps<{ items?: ChecklistItem[]; card?: boolean; label?: string }>(), { items: () => [] })\r\n</script>\r\n\r\n<template>\r\n <ul :class=\"['oc-checklist', card && 'oc-checklist--card']\" aria-live=\"polite\" :aria-label=\"label\">\r\n <slot>\r\n <li v-for=\"(item, i) in items\" :key=\"i\" :class=\"['oc-checklist-item', item.done && 'is-done']\">\r\n <template v-if=\"card\">\r\n <span class=\"oc-checklist-text\">\r\n <span class=\"oc-checklist-title\">{{ item.title }}</span>\r\n <span v-if=\"item.hint\" class=\"oc-checklist-hint\">{{ item.hint }}</span>\r\n </span>\r\n <slot name=\"action\" :item=\"item\" />\r\n </template>\r\n <template v-else>{{ item.title }}</template>\r\n </li>\r\n </slot>\r\n </ul>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcChipFilter.vue | Map: types + props -> template (group -> chip label per option) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Rounded filter chips. `multiple`: checkboxes, v-model = string[]. Otherwise radios, v-model = string.\r\n * Same markup as packages/ui/snippets/chip-filter.html. Classes: .oc-chip-filter(--sm/--scroll), -item, -count\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface ChipFilterItem {\r\n value: string\r\n label: string\r\n count?: number\r\n disabled?: boolean\r\n}\r\nconst props = defineProps<{\r\n options: ChipFilterItem[]\r\n multiple?: boolean\r\n /** aria-label of the group */\r\n label?: string\r\n size?: 'sm' | 'md'\r\n scroll?: boolean\r\n name?: string\r\n}>()\r\nconst model = defineModel<string | string[]>()\r\nconst uid = useUid('oc-chip')\r\n\r\nconst isChecked = (v: string) => (Array.isArray(model.value) ? model.value.includes(v) : model.value === v)\r\n\r\n/** Checkbox: add or remove the value (works when v-model starts undefined). Radio: replace it. */\r\nfunction toggle(v: string) {\r\n if (!props.multiple) {\r\n model.value = v\r\n return\r\n }\r\n const list = Array.isArray(model.value) ? model.value : []\r\n model.value = list.includes(v) ? list.filter((x) => x !== v) : [...list, v]\r\n}\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-chip-filter', size === 'sm' && 'oc-chip-filter--sm', scroll && 'oc-chip-filter--scroll']\" :role=\"multiple ? 'group' : 'radiogroup'\" :aria-label=\"label\">\r\n <label v-for=\"option in options\" :key=\"option.value\" class=\"oc-chip-filter-item\">\r\n <input :type=\"multiple ? 'checkbox' : 'radio'\" :name=\"name ?? uid\" :value=\"option.value\" :checked=\"isChecked(option.value)\" :disabled=\"option.disabled\" @change=\"toggle(option.value)\" />\r\n {{ option.label }}\r\n <span v-if=\"option.count != null\" class=\"oc-chip-filter-count\">{{ option.count }}</span>\r\n </label>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Card-style details/summary section. v-model:open. Slots: icon, title, default (content). Classes: --dense */\r\ndefineProps<{ title?: string; dense?: boolean }>()\r\nconst open = defineModel<boolean>('open', { default: false })\r\n\r\nfunction onToggle(e: Event) {\r\n open.value = (e.target as HTMLDetailsElement).open\r\n}\r\n</script>\r\n\r\n<template>\r\n <details :class=\"['oc-collapsible', dense && 'oc-collapsible--dense']\" :open=\"open\" @toggle=\"onToggle\">\r\n <summary>\r\n <slot name=\"icon\" />\r\n <span class=\"oc-collapsible-title\"><slot name=\"title\">{{ title }}</slot></span>\r\n </summary>\r\n <div class=\"oc-collapsible-content\"><slot /></div>\r\n </details>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Native color picker next to a hex text input, kept in sync. v-model: color string (#rrggbb). */\r\nwithDefaults(defineProps<{ pickerLabel?: string; valueLabel?: string }>(), {\r\n pickerLabel: 'Pick a color',\r\n valueLabel: 'Color value',\r\n})\r\nconst model = defineModel<string>({ default: '#000000' })\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-color-field\">\r\n <input v-model=\"model\" type=\"color\" :aria-label=\"pickerLabel\" />\r\n <input v-model=\"model\" class=\"oc-input\" type=\"text\" :aria-label=\"valueLabel\" />\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcColorSelect.vue | Map: types + props -> template (fieldset radiogroup -> label per color) -->\r\n<script setup lang=\"ts\">\r\n/** Pick one color from swatches. v-model = selected value. Classes: .oc-color-select(--list/--sm), -option, -swatch, -name */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface ColorSelectItem {\r\n value: string\r\n label: string\r\n /** CSS color, use Omnia tokens: \"var(--color-red-70)\". */\r\n color: string\r\n disabled?: boolean\r\n}\r\ndefineProps<{\r\n options: ColorSelectItem[]\r\n /** aria-label of the group */\r\n label?: string\r\n list?: boolean\r\n size?: 'sm' | 'md'\r\n name?: string\r\n}>()\r\nconst model = defineModel<string>()\r\nconst uid = useUid('oc-color')\r\n</script>\r\n\r\n<template>\r\n <fieldset :class=\"['oc-color-select', list && 'oc-color-select--list', size === 'sm' && 'oc-color-select--sm']\" role=\"radiogroup\" :aria-label=\"label\">\r\n <label v-for=\"option in options\" :key=\"option.value\" class=\"oc-color-select-option\" :style=\"{ '--oc-swatch': option.color }\">\r\n <input v-model=\"model\" type=\"radio\" :name=\"name ?? uid\" :value=\"option.value\" :disabled=\"option.disabled\" />\r\n <span class=\"oc-color-select-swatch\"></span>\r\n <span class=\"oc-color-select-name\">{{ option.label }}</span>\r\n </label>\r\n </fieldset>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Command palette / searchable list. Filtering, aria-selected and keyboard navigation\r\n * (ArrowUp/ArrowDown/Enter) are handled here (the CSS only styles the markup).\r\n * v-model:query is the search text. Emits `select` with the chosen item.\r\n * Classes: .oc-command, -input, -list, -group-label, -item, -shortcut, -separator, -empty\r\n */\r\nimport { computed, ref, watch } from 'vue'\r\n\r\nexport interface CommandItem {\r\n label: string\r\n value?: string\r\n group?: string\r\n shortcut?: string\r\n disabled?: boolean\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n items: CommandItem[]\r\n placeholder?: string\r\n label?: string\r\n emptyText?: string\r\n }>(),\r\n { placeholder: 'Type a command or search...', label: 'Search commands', emptyText: 'No results found.' },\r\n)\r\nconst emit = defineEmits<{ select: [item: CommandItem] }>()\r\nconst query = defineModel<string>('query', { default: '' })\r\n\r\nconst filtered = computed(() => {\r\n const q = query.value.trim().toLowerCase()\r\n return q ? props.items.filter((i) => i.label.toLowerCase().includes(q)) : props.items\r\n})\r\n\r\nconst sections = computed(() => {\r\n const order: string[] = []\r\n const map = new Map<string, CommandItem[]>()\r\n for (const item of filtered.value) {\r\n const key = item.group ?? ''\r\n if (!map.has(key)) {\r\n map.set(key, [])\r\n order.push(key)\r\n }\r\n map.get(key)!.push(item)\r\n }\r\n return order.map((key) => ({ label: key, items: map.get(key)! }))\r\n})\r\n\r\nconst flat = computed(() => sections.value.flatMap((s) => s.items))\r\nconst active = ref(0)\r\n\r\nfunction firstEnabled(from = 0, step = 1) {\r\n const list = flat.value\r\n for (let i = from; i >= 0 && i < list.length; i += step) if (!list[i].disabled) return i\r\n return -1\r\n}\r\n\r\nwatch(flat, () => {\r\n active.value = Math.max(firstEnabled(), 0)\r\n})\r\n\r\nfunction move(step: 1 | -1) {\r\n const next = firstEnabled(active.value + step, step)\r\n if (next !== -1) active.value = next\r\n}\r\n\r\nfunction choose(item: CommandItem) {\r\n if (!item.disabled) emit('select', item)\r\n}\r\n\r\nfunction onKeydown(e: KeyboardEvent) {\r\n if (e.key === 'ArrowDown') {\r\n e.preventDefault()\r\n move(1)\r\n } else if (e.key === 'ArrowUp') {\r\n e.preventDefault()\r\n move(-1)\r\n } else if (e.key === 'Enter') {\r\n const item = flat.value[active.value]\r\n if (item) {\r\n e.preventDefault()\r\n choose(item)\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-command\" role=\"combobox\" aria-expanded=\"true\" aria-haspopup=\"listbox\">\r\n <input\r\n v-model=\"query\"\r\n class=\"oc-command-input\"\r\n type=\"search\"\r\n :placeholder=\"placeholder\"\r\n :aria-label=\"label\"\r\n @keydown=\"onKeydown\"\r\n />\r\n <ul class=\"oc-command-list\" role=\"listbox\">\r\n <template v-for=\"(section, s) in sections\" :key=\"section.label + s\">\r\n <li v-if=\"s > 0\" class=\"oc-command-separator\" role=\"separator\"></li>\r\n <li v-if=\"section.label\" class=\"oc-command-group-label\" role=\"presentation\">{{ section.label }}</li>\r\n <li\r\n v-for=\"item in section.items\"\r\n :key=\"item.value ?? item.label\"\r\n class=\"oc-command-item\"\r\n role=\"option\"\r\n :aria-selected=\"flat[active] === item ? 'true' : undefined\"\r\n :aria-disabled=\"item.disabled ? 'true' : undefined\"\r\n @click=\"choose(item)\"\r\n @mousemove=\"!item.disabled && (active = flat.indexOf(item))\"\r\n >\r\n {{ item.label }}\r\n <span v-if=\"item.shortcut\" class=\"oc-command-shortcut\">{{ item.shortcut }}</span>\r\n </li>\r\n </template>\r\n </ul>\r\n <div class=\"oc-command-empty\" :hidden=\"flat.length > 0\">{{ emptyText }}</div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcConfirmDialog.vue | Map: dialog.oc-modal -> confirm content (close X, icon ring, title) -> form (message, typed field, footer: discard, cancel, confirm) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Confirm variant of the alert dialog. v-model:open. Emits `confirm`, `cancel`, `discard` (all close the dialog).\r\n * With `confirmWord` the browser blocks the submit until the typed value matches (pattern + required).\r\n * Slots: icon, title, default (message).\r\n * Classes: .oc-alert-dialog--confirm, .oc-alert-dialog-close, .oc-alert-dialog-form, .oc-alert-dialog-typed,\r\n * .oc-alert-dialog-confirm, .oc-alert-dialog-discard\r\n */\r\nimport { ref } from 'vue'\r\nimport { useDialog } from '../composables/useDialog'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n type?: 'success' | 'error' | 'warning' | 'info' | 'question'\r\n title?: string\r\n message?: string\r\n confirmLabel?: string\r\n cancelLabel?: string\r\n discardLabel?: string\r\n confirmWord?: string\r\n closeLabel?: string\r\n }>(),\r\n { type: 'error', confirmLabel: 'Confirm', cancelLabel: 'Cancel', closeLabel: 'Close' },\r\n)\r\nconst emit = defineEmits<{ confirm: []; cancel: []; discard: [] }>()\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst el = ref<HTMLDialogElement | null>(null)\r\nconst { onClose } = useDialog(open, el)\r\nconst titleId = useUid('oc-confirm-dialog-title')\r\nconst textId = `${titleId}-text`\r\nconst glyphs = { success: '✓', error: '×', warning: '!', info: 'i', question: '?' } as const\r\n\r\n// Every action emits its event, then closes through the model (Vue stays the source of truth).\r\nfunction done(event: 'confirm' | 'cancel' | 'discard') {\r\n if (event === 'confirm') emit('confirm')\r\n else if (event === 'cancel') emit('cancel')\r\n else emit('discard')\r\n open.value = false\r\n}\r\nconst destructive = () => props.type === 'error'\r\n</script>\r\n\r\n<template>\r\n <dialog ref=\"el\" class=\"oc-modal\" closedby=\"any\" :aria-labelledby=\"titleId\" :aria-describedby=\"textId\" @close=\"onClose\">\r\n <div :class=\"['oc-modal-content', 'oc-alert-dialog', `oc-alert-dialog--${type}`, 'oc-alert-dialog--confirm']\">\r\n <button class=\"oc-alert-dialog-close\" type=\"button\" :aria-label=\"closeLabel\" @click=\"done('cancel')\">×</button>\r\n <span class=\"oc-alert-dialog-icon\" aria-hidden=\"true\"><slot name=\"icon\">{{ glyphs[type] }}</slot></span>\r\n <h2 :id=\"titleId\" class=\"oc-modal-title\"><slot name=\"title\">{{ title }}</slot></h2>\r\n <form class=\"oc-alert-dialog-form\" @submit.prevent=\"done('confirm')\">\r\n <div :id=\"textId\" class=\"oc-modal-body\"><slot>{{ message }}</slot></div>\r\n <label v-if=\"confirmWord\" class=\"oc-alert-dialog-typed\">\r\n <span>Type <code>{{ confirmWord }}</code> to confirm</span>\r\n <input class=\"oc-input\" name=\"confirm\" :pattern=\"confirmWord\" required autocomplete=\"off\" />\r\n </label>\r\n <div class=\"oc-modal-footer\">\r\n <button v-if=\"discardLabel\" class=\"oc-btn oc-btn--ghost oc-alert-dialog-discard\" type=\"button\" @click=\"done('discard')\">{{ discardLabel }}</button>\r\n <button class=\"oc-btn oc-btn--outline\" type=\"button\" @click=\"done('cancel')\">{{ cancelLabel }}</button>\r\n <button :class=\"['oc-btn', destructive() && 'oc-btn--destructive', 'oc-alert-dialog-confirm']\" type=\"submit\" value=\"confirm\">{{ confirmLabel }}</button>\r\n </div>\r\n </form>\r\n </div>\r\n </dialog>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcCookieConsent.vue | Map: props -> storage helpers -> reopen button -> popover (title, text, categories, actions) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Cookie banner on popover=\"manual\" (same markup as snippets/cookie-consent.html). Like the snippet script it shows itself\r\n * when no choice is stored, saves { necessary, <categories>, date } in localStorage and fires \"oc-consent\" on document.\r\n * Emits: consent (the choice, also on load when one is stored). Slot: text (replaces the paragraph content).\r\n * Classes: .oc-cookie-consent(--bar) __title __text __prefs __category __category-name __category-text __actions\r\n */\r\nimport { onBeforeUnmount, onMounted, ref } from 'vue'\r\n\r\nexport interface CookieCategory {\r\n name: string\r\n label: string\r\n text?: string\r\n required?: boolean\r\n}\r\nexport type ConsentChoice = { necessary: boolean; date: string } & Record<string, boolean | string>\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n categories?: CookieCategory[]\r\n title?: string\r\n policyHref?: string\r\n customizeLabel?: string\r\n necessaryLabel?: string\r\n selectedLabel?: string\r\n allLabel?: string\r\n /** Text of the \"Cookie settings\" button; empty string hides it. */\r\n openLabel?: string\r\n bar?: boolean\r\n manual?: boolean\r\n storageKey?: string\r\n id?: string\r\n }>(),\r\n {\r\n categories: () => [\r\n { name: 'necessary', label: 'Necessary', text: 'Session, security and your cookie choice. Always on.', required: true },\r\n { name: 'statistics', label: 'Statistics', text: 'Anonymous visit counts.' },\r\n { name: 'marketing', label: 'Marketing', text: 'Embedded videos and ads that track you.' },\r\n ],\r\n title: 'We use cookies',\r\n policyHref: '#cookie-policy',\r\n customizeLabel: 'Customize',\r\n necessaryLabel: 'Only necessary',\r\n selectedLabel: 'Save choice',\r\n allLabel: 'Accept all',\r\n openLabel: 'Cookie settings',\r\n storageKey: 'oc-consent',\r\n id: 'oc-cookie-consent',\r\n },\r\n)\r\nconst emit = defineEmits<{ consent: [choice: ConsentChoice] }>()\r\ndefineOptions({ inheritAttrs: false })\r\nconst box = ref<HTMLElement | null>(null)\r\n\r\nconst read = (): ConsentChoice | null => {\r\n try { return JSON.parse(localStorage.getItem(props.storageKey) ?? 'null') } catch { return null }\r\n}\r\nconst inputs = () => Array.from(box.value?.querySelectorAll<HTMLInputElement>('input[name]') ?? [])\r\nfunction tell(choice: ConsentChoice) {\r\n document.dispatchEvent(new CustomEvent('oc-consent', { detail: choice }))\r\n emit('consent', choice)\r\n}\r\n// Any [data-oc-consent-open] (also outside this component) opens the banner with the stored choice.\r\nfunction reopen(e: Event) {\r\n if (!(e.target as Element | null)?.closest?.('[data-oc-consent-open]')) return\r\n const choice = read()\r\n for (const i of inputs()) if (!i.disabled) i.checked = !!choice?.[i.name]\r\n box.value?.showPopover?.()\r\n}\r\nfunction choose(e: MouseEvent) {\r\n const mode = (e.target as HTMLElement).closest<HTMLElement>('[data-oc-consent]')?.dataset.ocConsent\r\n if (!mode) return\r\n const choice: ConsentChoice = { necessary: true, date: new Date().toISOString() }\r\n for (const i of inputs()) if (!i.disabled) choice[i.name] = mode === 'all' || (mode === 'selected' && i.checked)\r\n try { localStorage.setItem(props.storageKey, JSON.stringify(choice)) } catch { /* storage blocked */ }\r\n box.value?.hidePopover?.()\r\n tell(choice)\r\n}\r\nonMounted(() => {\r\n const stored = read()\r\n if (stored) tell(stored)\r\n else if (!props.manual) box.value?.showPopover?.()\r\n document.addEventListener('click', reopen)\r\n})\r\nonBeforeUnmount(() => document.removeEventListener('click', reopen))\r\n</script>\r\n\r\n<template>\r\n <button v-if=\"openLabel\" type=\"button\" class=\"oc-btn oc-btn--outline oc-btn--sm\" data-oc-consent-open>{{ openLabel }}</button>\r\n <aside\r\n :id=\"id\"\r\n ref=\"box\"\r\n v-bind=\"$attrs\"\r\n :class=\"['oc-cookie-consent', bar && 'oc-cookie-consent--bar']\"\r\n popover=\"manual\"\r\n :data-oc-consent-manual=\"manual ? '' : undefined\"\r\n :aria-labelledby=\"`${id}-title`\"\r\n @click=\"choose\"\r\n >\r\n <h2 :id=\"`${id}-title`\" class=\"oc-cookie-consent__title\"><span aria-hidden=\"true\">🍪</span> {{ title }}</h2>\r\n <p class=\"oc-cookie-consent__text\">\r\n <slot name=\"text\">Necessary cookies keep the site working. With your permission we also measure visits to improve the site. Read the <a :href=\"policyHref\">cookie policy</a>.</slot>\r\n </p>\r\n <details class=\"oc-cookie-consent__prefs\">\r\n <summary>{{ customizeLabel }}</summary>\r\n <div v-for=\"c in categories\" :key=\"c.name\" class=\"oc-cookie-consent__category\">\r\n <span class=\"oc-cookie-consent__category-name\">{{ c.label }}</span>\r\n <span v-if=\"c.text\" class=\"oc-cookie-consent__category-text\">{{ c.text }}</span>\r\n <label class=\"oc-switch\"><input type=\"checkbox\" role=\"switch\" :name=\"c.name\" :checked=\"c.required\" :disabled=\"c.required\" :aria-label=\"`${c.label} cookies`\" /><span class=\"oc-switch-track\"></span></label>\r\n </div>\r\n </details>\r\n <div class=\"oc-cookie-consent__actions\">\r\n <button type=\"button\" class=\"oc-btn oc-btn--outline\" data-oc-consent=\"necessary\">{{ necessaryLabel }}</button>\r\n <button type=\"button\" class=\"oc-btn oc-btn--secondary\" data-oc-consent=\"selected\">{{ selectedLabel }}</button>\r\n <button type=\"button\" class=\"oc-btn\" data-oc-consent=\"all\">{{ allLabel }}</button>\r\n </div>\r\n </aside>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Read-only monospace value with a copy button. Copies via navigator.clipboard and\r\n * adds .is-copied for 2 seconds. Emits `copy` with the value.\r\n */\r\nimport { onBeforeUnmount, ref } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n value: string\r\n label?: string\r\n buttonLabel?: string\r\n }>(),\r\n { label: 'Value', buttonLabel: 'Copy' },\r\n)\r\nconst emit = defineEmits<{ copy: [value: string] }>()\r\n\r\nconst copied = ref(false)\r\nlet timer: ReturnType<typeof setTimeout> | undefined\r\n\r\nasync function copy() {\r\n await navigator.clipboard.writeText(props.value)\r\n copied.value = true\r\n emit('copy', props.value)\r\n clearTimeout(timer)\r\n timer = setTimeout(() => (copied.value = false), 2000)\r\n}\r\n\r\nonBeforeUnmount(() => clearTimeout(timer))\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-copy-field\">\r\n <input class=\"oc-copy-field-value\" type=\"text\" readonly :value=\"value\" :aria-label=\"label\" />\r\n <button :class=\"['oc-copy-field-button', copied && 'is-copied']\" type=\"button\" @click=\"copy\">{{ buttonLabel }}</button>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Animated number (@property). Starts when scrolled into view unless `onView` is false. */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(defineProps<{ to: number; suffix?: string; onView?: boolean }>(), { onView: true })\r\nconst style = computed(() => {\r\n const s: Record<string, string> = { '--oc-counter-to': String(props.to) }\r\n if (props.suffix) s['--oc-counter-suffix'] = `'${props.suffix}'`\r\n return s\r\n})\r\n</script>\r\n\r\n<template>\r\n <strong :class=\"['oc-counter', onView && 'oc-counter--on-view']\" :style=\"style\"></strong>\r\n</template>\r\n","// File: packages/ui/src/data-table.js\r\n// Map: page numbers -> compare -> csv -> row filter -> bind one table (search, column filters, sort, pages, columns, trash,\r\n// bulk, cards) -> boot. Column width and row drag are OmniaUI Pro (data-table-pro.js).\r\n// The list table for business apps. Markup stays plain HTML.\r\n// This script adds the behaviour. Excel, PDF and the real delete API stay in the app:\r\n// listen for oc-datatable-bulk, oc-datatable-row, oc-datatable-search and oc-datatable-import.\r\n\r\n/** Page numbers with ellipses, a window around the current page (current and last are 1-based). */\r\nexport function pageItems(current, last) {\r\n if (last < 1) return [];\r\n if (last === 1) return [1];\r\n const range = [];\r\n for (let i = Math.max(2, current - 2); i <= Math.min(last - 1, current + 2); i++) range.push(i);\r\n const out = [1];\r\n if (range.length && range[0] > 2) out.push(\"…\");\r\n for (const n of range) out.push(n);\r\n if (range.length && range[range.length - 1] < last - 1) out.push(\"…\");\r\n if (last > 1) out.push(last);\r\n return out;\r\n}\r\n\r\n/** Sort two cell values. Numeric columns accept 5,15 and 5.15. */\r\nexport function compareValues(a, b, numeric) {\r\n if (numeric) {\r\n const n = (v) => Number(String(v ?? \"\").replace(/\\s/g, \"\").replace(\",\", \".\"));\r\n const na = n(a);\r\n const nb = n(b);\r\n if (Number.isFinite(na) && Number.isFinite(nb)) return na - nb;\r\n }\r\n return String(a ?? \"\").localeCompare(String(b ?? \"\"), undefined, { numeric: true, sensitivity: \"base\" });\r\n}\r\n\r\n/** One CSV field. Quotes when the value contains a comma, quote or newline. */\r\nfunction csvField(value) {\r\n const s = String(value ?? \"\");\r\n return /[\",\\n]/.test(s) ? `\"${s.replaceAll('\"', '\"\"')}\"` : s;\r\n}\r\n\r\n/** Headers plus rows, as a CSV string the browser can download. */\r\nexport function toCsv(headers, rows) {\r\n return [headers, ...rows].map((line) => line.map(csvField).join(\",\")).join(\"\\n\");\r\n}\r\n\r\n/**\r\n * Does this row stay visible?\r\n * filter is \"active\", \"deleted\", \"archived\" or \"all\". query is already lower-case.\r\n */\r\nexport function rowPasses(status, filter, text, query) {\r\n const state = status || \"active\";\r\n if (filter === \"active\" && state !== \"active\") return false;\r\n if (filter === \"deleted\" && state !== \"deleted\") return false;\r\n if (filter === \"archived\" && state !== \"archived\") return false;\r\n if (!query) return true;\r\n return String(text).toLowerCase().includes(query);\r\n}\r\n\r\nconst controls = new WeakMap();\r\nconst SKIP_COL = new Set([\"select\", \"order\", \"actions\"]);\r\n\r\nfunction readStore(id, name) {\r\n try {\r\n return JSON.parse(localStorage.getItem(`oc-data-table:${id}:${name}`) || \"null\");\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction writeStore(id, name, value) {\r\n try {\r\n localStorage.setItem(`oc-data-table:${id}:${name}`, JSON.stringify(value));\r\n } catch {\r\n // Private mode can block storage. The table still works for this visit.\r\n }\r\n}\r\n\r\nfunction download(filename, text) {\r\n const url = URL.createObjectURL(new Blob([text], { type: \"text/csv;charset=utf-8\" }));\r\n const link = document.createElement(\"a\");\r\n link.href = url;\r\n link.download = filename;\r\n link.click();\r\n URL.revokeObjectURL(url);\r\n}\r\n\r\n/** Wire one .oc-data-table. Calling it again only refreshes the rows. */\r\nexport function bindDataTable(root) {\r\n if (!root) return;\r\n const prev = controls.get(root);\r\n if (prev) {\r\n prev.apply();\r\n return;\r\n }\r\n\r\n const table = root.querySelector(\"table\");\r\n const tbody = table?.tBodies[0];\r\n if (!table || !tbody) return;\r\n\r\n const id = root.id || \"data-table\";\r\n const search = root.querySelector(\".oc-data-table-search\");\r\n const summary = root.querySelector(\"[data-oc-summary]\");\r\n const pager = root.querySelector(\"[data-oc-pager]\");\r\n const pageSelect = root.querySelector(\"[data-oc-page-size]\");\r\n const selectAll = root.querySelector(\"[data-oc-select-all]\");\r\n const bulk = root.querySelector(\".oc-data-table-bulk\");\r\n const count = root.querySelector(\"[data-oc-selected-count]\");\r\n const empty = root.querySelector(\".oc-data-table-empty\");\r\n const sortSummary = root.querySelector(\"[data-oc-sort-summary]\");\r\n const frame = root.querySelector(\".oc-data-table-frame\") || table.parentElement;\r\n const live = root.dataset.ocLive === \"true\";\r\n\r\n let query = \"\";\r\n let filter = root.querySelector(\"[data-oc-filter][aria-current='true']\")?.dataset.ocFilter\r\n || (root.querySelector(\"[data-oc-filter]\") ? \"active\" : \"all\");\r\n // Column filters: a <select data-oc-col-filter=\"type\"> or tab buttons with data-oc-col-filter=\"type\" data-oc-value=\"…\".\r\n // A row passes when its cell in that column has that value (data-oc-value or its text); \"\" means all.\r\n const colFilters = new Map();\r\n root.querySelectorAll(\"select[data-oc-col-filter]\").forEach((sel) => colFilters.set(sel.dataset.ocColFilter, sel.value));\r\n root.querySelectorAll(\"[data-oc-col-filter][aria-selected='true']\").forEach((tab) => colFilters.set(tab.dataset.ocColFilter, tab.dataset.ocValue ?? \"\"));\r\n // aria-sort on a header in the HTML: that column is sorted when the table starts.\r\n const sortedTh = [...table.tHead.rows[0].cells].find((th) => th.dataset.ocCol && th.hasAttribute(\"aria-sort\"));\r\n let sortKey = sortedTh ? sortedTh.dataset.ocCol : \"\";\r\n let sortDir = sortedTh?.getAttribute(\"aria-sort\") === \"descending\" ? \"desc\" : \"asc\";\r\n let page = 0;\r\n let pageSize = Number(pageSelect?.value || root.dataset.pageSize || 15);\r\n const selected = new Set();\r\n\r\n // Remembered choices from the last visit: page size, density, view, hidden columns.\r\n const savedSize = readStore(id, \"pageSize\");\r\n if (savedSize && pageSelect?.querySelector(`option[value=\"${savedSize}\"]`)) {\r\n pageSelect.value = String(savedSize);\r\n pageSize = Number(savedSize);\r\n }\r\n if (readStore(id, \"density\") === \"compact\") root.classList.add(\"oc-data-table--compact\");\r\n if (readStore(id, \"view\") === \"grid\") root.classList.add(\"oc-data-table--grid\");\r\n const savedCols = readStore(id, \"cols\") || {};\r\n root.querySelectorAll(\"[data-col]\").forEach((box) => {\r\n if (!box.disabled && savedCols[box.dataset.col] != null) box.checked = savedCols[box.dataset.col];\r\n });\r\n\r\n const rows = () => [...tbody.querySelectorAll(\"[data-oc-row]\")];\r\n // Move a row to the end without taking it out of the page (Element.moveBefore), so <iconify-icon> and other web\r\n // components keep their content; where moveBefore is missing, append and let the icons draw again.\r\n // <iconify-icon> empties itself while its row is hidden (another page, another filter) and does not always draw\r\n // again when the row comes back: set its icon again so it renders.\r\n const redrawIcons = (row) => {\r\n row.querySelectorAll(\"iconify-icon[icon]\").forEach((icon) => {\r\n if (icon.shadowRoot?.querySelector(\"svg\")) return;\r\n const name = icon.getAttribute(\"icon\");\r\n icon.removeAttribute(\"icon\");\r\n icon.setAttribute(\"icon\", name);\r\n });\r\n };\r\n const moveRow = (row) => {\r\n if (tbody.lastElementChild === row) return;\r\n if (typeof tbody.moveBefore === \"function\") { tbody.moveBefore(row, null); return; }\r\n tbody.append(row);\r\n redrawIcons(row);\r\n };\r\n const textOf = (row) => [...row.cells]\r\n .filter((td) => td.dataset.ocCol && !SKIP_COL.has(td.dataset.ocCol))\r\n .map((td) => td.dataset.ocValue || td.textContent)\r\n .join(\" \");\r\n const valueOf = (row, key) => {\r\n const td = [...row.cells].find((cell) => cell.dataset.ocCol === key);\r\n return td ? (td.dataset.ocValue || td.textContent.trim()) : \"\";\r\n };\r\n const passesColumns = (row) => [...colFilters].every(([key, want]) => !want || valueOf(row, key) === want);\r\n const matched = () => rows().filter((row) => rowPasses(row.dataset.ocStatus, filter, textOf(row), query) && passesColumns(row));\r\n\r\n function paintChecks() {\r\n for (const row of rows()) {\r\n const on = selected.has(row.dataset.ocKey);\r\n row.setAttribute(\"aria-selected\", on ? \"true\" : \"false\");\r\n const box = row.querySelector(\"[data-oc-select]\");\r\n if (box) box.checked = on;\r\n }\r\n const keys = matched().map((row) => row.dataset.ocKey);\r\n const picked = keys.filter((key) => selected.has(key)).length;\r\n if (selectAll) {\r\n selectAll.checked = keys.length > 0 && picked === keys.length;\r\n selectAll.indeterminate = picked > 0 && picked < keys.length;\r\n }\r\n if (count) count.textContent = selected.size === 1 ? \"1 selected\" : `${selected.size} selected`;\r\n if (bulk) bulk.hidden = selected.size === 0;\r\n }\r\n\r\n function renderPager(current, last) {\r\n if (!pager) return;\r\n pager.replaceChildren();\r\n if (last <= 1) return;\r\n const add = (label, target, extra) => {\r\n const button = document.createElement(\"button\");\r\n button.type = \"button\";\r\n button.className = \"oc-data-table-page\";\r\n button.textContent = label;\r\n button.dataset.ocPage = String(target);\r\n if (extra?.current) button.setAttribute(\"aria-current\", \"page\");\r\n if (extra?.disabled) button.disabled = true;\r\n if (extra?.label) button.setAttribute(\"aria-label\", extra.label);\r\n pager.append(button);\r\n };\r\n add(\"«\", 1, { disabled: current === 1, label: \"First page\" });\r\n add(\"‹\", current - 1, { disabled: current === 1, label: \"Previous page\" });\r\n for (const item of pageItems(current, last)) {\r\n if (item === \"…\") {\r\n const span = document.createElement(\"span\");\r\n span.className = \"oc-data-table-ellipsis\";\r\n span.textContent = \"…\";\r\n pager.append(span);\r\n } else add(String(item), item, { current: item === current });\r\n }\r\n add(\"›\", current + 1, { disabled: current === last, label: \"Next page\" });\r\n add(\"»\", last, { disabled: current === last, label: \"Last page\" });\r\n }\r\n\r\n function syncGrid(list) {\r\n let grid = root.querySelector(\".oc-data-table-grid\");\r\n if (!grid && frame) {\r\n grid = document.createElement(\"div\");\r\n grid.className = \"oc-data-table-grid\";\r\n frame.append(grid);\r\n }\r\n if (!grid) return;\r\n const onPage = new Set(list.map((row) => row.dataset.ocKey));\r\n const heads = [...table.tHead.rows[0].cells];\r\n const hiddenCols = new Set([...root.querySelectorAll(\"[data-col]:not(:checked)\")].map((box) => box.dataset.col));\r\n grid.replaceChildren();\r\n for (const row of rows()) {\r\n if (!onPage.has(row.dataset.ocKey)) continue;\r\n const card = document.createElement(\"article\");\r\n card.className = \"oc-data-table-card\";\r\n card.dataset.ocKey = row.dataset.ocKey;\r\n const cells = [...row.cells];\r\n const name = cells.find((td) => td.dataset.ocCol === \"name\") || cells.find((td) => td.dataset.ocCol && !SKIP_COL.has(td.dataset.ocCol));\r\n // Title: the rich name cell (avatar, badge, second line) when there is one, else its text.\r\n const title = document.createElement(\"div\");\r\n title.className = \"oc-data-table-card-title\";\r\n if (name?.querySelector(\".oc-data-table-name\")) title.append(name.querySelector(\".oc-data-table-name\").cloneNode(true));\r\n else title.textContent = name ? name.textContent.trim() : row.dataset.ocKey;\r\n card.append(title);\r\n // The other visible columns as label / value.\r\n const fields = document.createElement(\"dl\");\r\n fields.className = \"oc-data-table-card-fields\";\r\n cells.forEach((td, index) => {\r\n const col = td.dataset.ocCol;\r\n if (!col || td === name || SKIP_COL.has(col) || hiddenCols.has(String(index + 1))) return;\r\n const dt = document.createElement(\"dt\");\r\n dt.textContent = heads[index]?.textContent.trim() || col;\r\n const dd = document.createElement(\"dd\");\r\n dd.append(...[...td.childNodes].map((node) => node.cloneNode(true)));\r\n if (dd.textContent.trim()) fields.append(dt, dd);\r\n });\r\n if (fields.childElementCount) card.append(fields);\r\n // Row actions (buttons and links; popover ids are not copied).\r\n const actions = cells.find((td) => td.dataset.ocCol === \"actions\");\r\n if (actions?.children.length) {\r\n const bar = document.createElement(\"div\");\r\n bar.className = \"oc-data-table-card-actions\";\r\n const trashed = row.dataset.ocStatus === \"deleted\";\r\n for (const el of actions.querySelectorAll(\"button, a\")) {\r\n const when = el.closest(\"[data-oc-when]\")?.dataset.ocWhen;\r\n if (when && (when === \"deleted\") !== trashed) continue;\r\n const copy = el.cloneNode(true);\r\n copy.removeAttribute(\"id\");\r\n copy.removeAttribute(\"popovertarget\");\r\n bar.append(copy);\r\n }\r\n card.append(bar);\r\n }\r\n grid.append(card);\r\n }\r\n }\r\n\r\n function apply() {\r\n const all = rows();\r\n const list = matched();\r\n if (sortKey) {\r\n const th = [...table.tHead.rows[0].cells].find((cell) => cell.dataset.ocCol === sortKey);\r\n const numeric = th?.dataset.ocSort === \"numeric\" || th?.hasAttribute(\"data-numeric\");\r\n const dir = sortDir === \"desc\" ? -1 : 1;\r\n list.sort((a, b) => dir * compareValues(valueOf(a, sortKey), valueOf(b, sortKey), numeric));\r\n const rest = all.filter((row) => !list.includes(row));\r\n for (const row of [...list, ...rest]) moveRow(row);\r\n }\r\n const last = pageSize > 0 ? Math.max(1, Math.ceil(list.length / pageSize)) : 1;\r\n if (page > last - 1) page = Math.max(0, last - 1);\r\n const start = pageSize > 0 ? page * pageSize : 0;\r\n const visible = new Set((pageSize > 0 ? list.slice(start, start + pageSize) : list));\r\n for (const row of all) {\r\n const shown = visible.has(row);\r\n if (row.hidden && shown) queueMicrotask(() => redrawIcons(row));\r\n row.hidden = !shown;\r\n }\r\n if (empty) empty.hidden = list.length !== 0;\r\n if (summary) {\r\n // data-oc-summary=\"Toont {from} t/m {to} van {total} resultaten\" translates the line; empty = English.\r\n const template = summary.dataset.ocSummary || \"Showing {from}–{to} of {total}\";\r\n const values = { from: list.length ? start + 1 : 0, to: start + visible.size, total: list.length };\r\n summary.textContent = template.replace(/\\{(from|to|total)\\}/g, (_, key) => String(values[key]));\r\n }\r\n if (sortSummary) {\r\n const label = sortKey ? table.querySelector(`th[data-oc-col=\"${sortKey}\"] .oc-table-sort`)?.textContent?.trim() : \"\";\r\n sortSummary.textContent = label ? `Sorted by ${label}, ${sortDir === \"asc\" ? \"ascending\" : \"descending\"}` : \"\";\r\n }\r\n renderPager(page + 1, list.length === 0 ? 1 : last);\r\n syncGrid([...visible]);\r\n paintChecks();\r\n }\r\n\r\n function exportCsv(onlyKeys) {\r\n const hidden = new Set([...root.querySelectorAll(\"[data-col]:not(:checked)\")].map((box) => box.dataset.col));\r\n const heads = [...table.tHead.rows[0].cells].filter((th, index) => {\r\n return th.dataset.ocCol && !SKIP_COL.has(th.dataset.ocCol) && !hidden.has(String(index + 1));\r\n });\r\n const source = onlyKeys\r\n ? rows().filter((row) => onlyKeys.has(row.dataset.ocKey))\r\n : matched();\r\n const body = source.map((row) => heads.map((th) => valueOf(row, th.dataset.ocCol)));\r\n download(`${id}.csv`, toCsv(heads.map((th) => th.textContent.trim()), body));\r\n }\r\n\r\n function emit(name, detail) {\r\n root.dispatchEvent(new CustomEvent(name, { bubbles: true, detail }));\r\n }\r\n\r\n // Live mode (the docs demo) changes the rows in the page. An app listens and updates its own data.\r\n function liveAction(action) {\r\n if (!live) return false;\r\n for (const key of selected) {\r\n const row = tbody.querySelector(`[data-oc-key=\"${CSS.escape(key)}\"]`);\r\n if (!row) continue;\r\n if (action === \"archive\" && (row.dataset.ocStatus || \"active\") === \"active\") row.dataset.ocStatus = \"deleted\";\r\n if (action === \"restore\" && row.dataset.ocStatus === \"deleted\") row.dataset.ocStatus = \"active\";\r\n if (action === \"delete\") row.remove();\r\n if (action === \"duplicate\" && (row.dataset.ocStatus || \"active\") === \"active\") {\r\n const copy = row.cloneNode(true);\r\n copy.dataset.ocKey = `${key}-copy`;\r\n tbody.insertBefore(copy, row.nextSibling);\r\n }\r\n }\r\n selected.clear();\r\n apply();\r\n return true;\r\n }\r\n\r\n root.addEventListener(\"input\", (event) => {\r\n const target = event.target;\r\n if (target === search) {\r\n query = target.value.trim().toLowerCase();\r\n page = 0;\r\n apply();\r\n }\r\n });\r\n\r\n root.addEventListener(\"change\", (event) => {\r\n const target = event.target;\r\n if (target === pageSelect) {\r\n pageSize = Number(target.value) || 0;\r\n page = 0;\r\n writeStore(id, \"pageSize\", pageSize);\r\n apply();\r\n }\r\n if (target.matches?.(\"select[data-oc-col-filter]\")) {\r\n colFilters.set(target.dataset.ocColFilter, target.value);\r\n page = 0;\r\n apply();\r\n }\r\n if (target.matches?.(\"[data-col]\")) {\r\n const cols = {};\r\n root.querySelectorAll(\"[data-col]\").forEach((box) => { cols[box.dataset.col] = box.checked; });\r\n writeStore(id, \"cols\", cols);\r\n }\r\n if (target.matches?.(\"[data-oc-select]\")) {\r\n const row = target.closest(\"[data-oc-row]\");\r\n if (!row || row.dataset.ocSelectable === \"false\") return;\r\n if (target.checked) selected.add(row.dataset.ocKey);\r\n else selected.delete(row.dataset.ocKey);\r\n paintChecks();\r\n }\r\n if (target === selectAll) {\r\n for (const row of matched()) {\r\n if (row.dataset.ocSelectable === \"false\") continue;\r\n if (target.checked) selected.add(row.dataset.ocKey);\r\n else selected.delete(row.dataset.ocKey);\r\n }\r\n paintChecks();\r\n }\r\n if (target.matches?.(\"[data-oc-file]\")) {\r\n const file = target.files?.[0];\r\n if (file) emit(\"oc-datatable-import\", { file });\r\n target.value = \"\";\r\n }\r\n });\r\n\r\n root.addEventListener(\"keydown\", (event) => {\r\n if (event.key === \"Enter\" && event.target === search) {\r\n emit(\"oc-datatable-search\", { query: search.value });\r\n }\r\n });\r\n\r\n root.addEventListener(\"click\", (event) => {\r\n // The whole header cell sorts, not only its label (wide columns leave a lot of empty cell around the label).\r\n const headCell = event.target.closest(\"thead th\");\r\n const sortBtn = event.target.closest(\".oc-table-sort\")\r\n || (headCell && !event.target.closest(\"a, button, input, select, label, .oc-data-table-resize\") ? headCell.querySelector(\".oc-table-sort\") : null);\r\n if (sortBtn && root.contains(sortBtn)) {\r\n const th = sortBtn.closest(\"th\");\r\n if (!th?.dataset.ocCol) return;\r\n event.preventDefault();\r\n if (sortKey === th.dataset.ocCol) sortDir = sortDir === \"asc\" ? \"desc\" : \"asc\";\r\n else { sortKey = th.dataset.ocCol; sortDir = \"asc\"; }\r\n for (const head of table.tHead.rows[0].cells) head.removeAttribute(\"aria-sort\");\r\n th.setAttribute(\"aria-sort\", sortDir === \"asc\" ? \"ascending\" : \"descending\");\r\n page = 0;\r\n apply();\r\n return;\r\n }\r\n const filterBtn = event.target.closest(\"[data-oc-filter]\");\r\n if (filterBtn && root.contains(filterBtn)) {\r\n filter = filterBtn.dataset.ocFilter;\r\n page = 0;\r\n root.querySelectorAll(\"[data-oc-filter]\").forEach((btn) => {\r\n if (btn === filterBtn) btn.setAttribute(\"aria-current\", \"true\");\r\n else btn.removeAttribute(\"aria-current\");\r\n });\r\n apply();\r\n return;\r\n }\r\n // Per-row actions of a trashed row: data-oc-row-action=\"restore\" or \"delete\" fires oc-datatable-row { action, key };\r\n // in the demo (data-oc-live) restore makes the row active again and delete removes it.\r\n const rowBtn = event.target.closest(\"[data-oc-row-action]\");\r\n if (rowBtn && root.contains(rowBtn)) {\r\n const row = rowBtn.closest(\"[data-oc-row]\");\r\n if (!row) return;\r\n const action = rowBtn.dataset.ocRowAction;\r\n emit(\"oc-datatable-row\", { action, key: row.dataset.ocKey });\r\n if (live && action === \"restore\") row.dataset.ocStatus = \"active\";\r\n if (live && action === \"delete\") { selected.delete(row.dataset.ocKey); row.remove(); }\r\n apply();\r\n return;\r\n }\r\n // The sliders button next to the title shows or hides the filter row.\r\n const filtersBtn = event.target.closest(\"[data-oc-filters-toggle]\");\r\n if (filtersBtn && root.contains(filtersBtn)) {\r\n const row = root.querySelector(\".oc-data-table-filters\");\r\n if (row) {\r\n row.hidden = !row.hidden;\r\n filtersBtn.setAttribute(\"aria-expanded\", row.hidden ? \"false\" : \"true\");\r\n }\r\n return;\r\n }\r\n const colTab = event.target.closest(\"button[data-oc-col-filter]\");\r\n if (colTab && root.contains(colTab)) {\r\n const key = colTab.dataset.ocColFilter;\r\n colFilters.set(key, colTab.dataset.ocValue ?? \"\");\r\n root.querySelectorAll(`button[data-oc-col-filter=\"${key}\"]`).forEach((tab) => {\r\n tab.setAttribute(\"aria-selected\", tab === colTab ? \"true\" : \"false\");\r\n });\r\n page = 0;\r\n apply();\r\n return;\r\n }\r\n const viewBtn = event.target.closest(\"[data-oc-view]\");\r\n if (viewBtn && root.contains(viewBtn)) {\r\n const mode = viewBtn.dataset.ocView;\r\n root.classList.toggle(\"oc-data-table--grid\", mode === \"grid\");\r\n root.querySelectorAll(\"[data-oc-view]\").forEach((btn) => {\r\n btn.setAttribute(\"aria-pressed\", btn === viewBtn ? \"true\" : \"false\");\r\n });\r\n writeStore(id, \"view\", mode);\r\n return;\r\n }\r\n const densityBtn = event.target.closest(\"[data-oc-density]\");\r\n if (densityBtn && root.contains(densityBtn)) {\r\n const compact = densityBtn.dataset.ocDensity === \"compact\";\r\n root.classList.toggle(\"oc-data-table--compact\", compact);\r\n writeStore(id, \"density\", compact ? \"compact\" : \"comfortable\");\r\n return;\r\n }\r\n const pageBtn = event.target.closest(\"[data-oc-page]\");\r\n if (pageBtn && root.contains(pageBtn) && !pageBtn.disabled) {\r\n page = Number(pageBtn.dataset.ocPage) - 1;\r\n apply();\r\n return;\r\n }\r\n if (event.target.closest(\"[data-oc-export]\")) {\r\n exportCsv(null);\r\n return;\r\n }\r\n if (event.target.closest(\"[data-oc-import]\")) {\r\n root.querySelector(\"[data-oc-file]\")?.click();\r\n return;\r\n }\r\n const bulkBtn = event.target.closest(\"[data-oc-bulk]\");\r\n if (bulkBtn && root.contains(bulkBtn)) {\r\n const action = bulkBtn.dataset.ocBulk;\r\n // Snapshot first: live mode clears the selection while it updates the rows.\r\n const keys = [...selected];\r\n if (action === \"clear\") { selected.clear(); paintChecks(); return; }\r\n if (action === \"export\") { exportCsv(selected); return; }\r\n liveAction(action);\r\n emit(\"oc-datatable-bulk\", { action, keys });\r\n return;\r\n }\r\n // Row click opens data-oc-href, except when the click is on a control inside the row.\r\n if (event.target.closest(\"a, button, input, select, textarea, label\")) return;\r\n const row = event.target.closest(\"[data-oc-row]\");\r\n if (!row || !root.contains(row) || !row.dataset.ocHref) return;\r\n if (event.metaKey || event.ctrlKey) window.open(row.dataset.ocHref, \"_blank\", \"noopener\");\r\n else window.location.href = row.dataset.ocHref;\r\n });\r\n\r\n // OmniaUI Pro (data-table-pro.js) changes the rows (drag) and asks the table to show them again.\r\n root.addEventListener(\"oc-datatable-refresh\", () => apply());\r\n\r\n // Column widths from all rows (every page, also the trash), measured before the first page is shown, so the header\r\n // does not jump when sorting or paging brings other rows. Pro column resizing sets its own widths.\r\n for (const th of table.tHead.rows[0].cells) {\r\n const width = th.getBoundingClientRect().width;\r\n if (width && !th.style.width) th.style.minWidth = `${Math.ceil(width)}px`;\r\n }\r\n\r\n root.querySelectorAll(\"[data-oc-view]\").forEach((btn) => {\r\n const on = (btn.dataset.ocView === \"grid\") === root.classList.contains(\"oc-data-table--grid\");\r\n btn.setAttribute(\"aria-pressed\", on ? \"true\" : \"false\");\r\n });\r\n\r\n apply();\r\n controls.set(root, { apply });\r\n}\r\n\r\n/** Wire every table under scope that is not wired yet (also the data table block: [data-oc-data-table]). */\r\nexport function initDataTables(scope = document) {\r\n scope.querySelectorAll(\".oc-data-table, [data-oc-data-table]\").forEach((root) => bindDataTable(root));\r\n}\r\n\r\n// Starts on its own when loaded straight from a <script type=\"module\"> tag: as /js/oc-data-table.js (the docs site,\r\n// `npx omniaui copy-js`), with ?auto in the URL, or with data-oc-auto on the tag. An import from a bundler or a\r\n// wrapper does not scan the page: call the init function yourself there.\r\nfunction autoStart() {\r\n if (typeof document === \"undefined\") return false;\r\n const url = String(import.meta.url);\r\n if (url.includes(\"oc-data-table\") || /[?&]auto(=|&|$)/.test(url)) return true;\r\n const file = url.split(/[?#]/)[0];\r\n return [...document.querySelectorAll(\"script[data-oc-auto][src]\")].some((s) => s.src.split(/[?#]/)[0] === file);\r\n}\r\nif (autoStart()) {\r\n const boot = () => initDataTables(document);\r\n if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", boot);\r\n else boot();\r\n}\r\n","<!-- File: packages/vue/src/components/OcDataTable.vue | Map: props -> markup (tabs, toolbar, filters, table, footer) -> bind the list-table script on mount -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * List table for business apps. Same markup as packages/ui/snippets/data-table.html.\r\n * Search, column filters, sort, pages, columns, resize, drag and bulk actions come from data-table.js.\r\n * Listen on the root for oc-datatable-bulk, oc-datatable-reorder, oc-datatable-search, oc-datatable-import.\r\n * Slots: cell-<key> ({ row }) for a rich cell (an OcDataTableName, a badge …), actions ({ row }) for the row buttons\r\n * (default: one soft edit button), page-actions for the toolbar (New customer …).\r\n * Icons of tabs and filters are webicon names (mdi:account-outline …), drawn with <iconify-icon>.\r\n */\r\nimport { onMounted, useTemplateRef } from 'vue'\r\nimport { bindDataTable } from '../../../ui/src/data-table.js'\r\n\r\nexport interface DataTableColumn {\r\n key: string\r\n header: string\r\n numeric?: boolean\r\n sortable?: boolean\r\n hideable?: boolean\r\n defaultHidden?: boolean\r\n /** Cut long text with an ellipsis at this width (e.g. \"12rem\"); the full text goes in the title. */\r\n truncate?: string\r\n /** Sort the table on this column when it starts. */\r\n defaultSort?: 'ascending' | 'descending'\r\n}\r\nexport interface DataTableRow {\r\n key: string\r\n status?: 'active' | 'deleted' | 'archived'\r\n cells: Record<string, string>\r\n /** Sort, filter, search and export value when it differs from the visible text. */\r\n values?: Record<string, string>\r\n href?: string\r\n}\r\nexport interface DataTableTabs {\r\n column: string\r\n label?: string\r\n /** tone colors the count like the type badge in the table. */\r\n items: { value: string; label: string; icon?: string; count?: number; tone?: 'success' | 'info' | 'warning' }[]\r\n}\r\nexport interface DataTableColumnFilter {\r\n column: string\r\n label: string\r\n icon?: string\r\n options: { value: string; label: string }[]\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n tableId?: string\r\n title?: string\r\n columns: DataTableColumn[]\r\n rows: DataTableRow[]\r\n pageSize?: number\r\n searchPlaceholder?: string\r\n selectable?: boolean\r\n /** Grip column to drag rows; the drag is OmniaUI Pro (data-table-pro.js). */\r\n draggable?: boolean\r\n /** Handles to drag a column width; the resize is OmniaUI Pro (data-table-pro.js). */\r\n resizable?: boolean\r\n /** Column chooser in the actions header (show or hide columns). Needs the OmniaUI Pro CSS. */\r\n columnMenu?: boolean\r\n filters?: boolean\r\n archive?: boolean\r\n tabs?: DataTableTabs\r\n columnFilters?: DataTableColumnFilter[]\r\n /** Footer count, e.g. \"Showing {from}–{to} of {total} customers\". */\r\n summary?: string\r\n /** Offer \"Import CSV\" in the settings (fires oc-datatable-import with the file). */\r\n importable?: boolean\r\n /** 'bordered' = version 2: tinted header, lines between the columns, sort chevrons always visible. */\r\n variant?: 'default' | 'bordered'\r\n /** Striped rows (default true). */\r\n striped?: boolean\r\n live?: boolean\r\n }>(),\r\n { title: 'List', pageSize: 15, searchPlaceholder: 'Search...', selectable: true, draggable: false, resizable: false, columnMenu: false, filters: true, archive: true, summary: '', importable: false, variant: 'default', striped: true, live: false },\r\n)\r\n\r\nconst root = useTemplateRef<HTMLElement>('root')\r\nconst sizes = [...new Set([10, 15, 20, 50, 100, props.pageSize])].sort((a, b) => a - b)\r\nconst lead = (props.selectable ? 1 : 0) + (props.draggable ? 1 : 0)\r\nconst id = props.tableId || `oc-dt-${Math.random().toString(36).slice(2, 8)}`\r\nconst label = (row: DataTableRow) => row.values?.name ?? row.cells.name ?? row.key\r\n\r\nonMounted(() => {\r\n if (root.value) bindDataTable(root.value)\r\n})\r\n</script>\r\n\r\n<template>\r\n <div ref=\"root\" :class=\"['oc-data-table', variant === 'bordered' && 'oc-data-table--bordered', !striped && 'oc-data-table--plain', columnMenu && 'oc-column-menu-scope']\" :id=\"id\" :data-page-size=\"pageSize\" :data-oc-live=\"live ? 'true' : undefined\">\r\n <div v-if=\"tabs\" class=\"oc-tab-list oc-data-table-tabs\" role=\"tablist\" :aria-label=\"tabs.label ?? 'Filter'\">\r\n <button\r\n v-for=\"(tab, i) in tabs.items\"\r\n :key=\"tab.value\"\r\n class=\"oc-tab-trigger\"\r\n role=\"tab\"\r\n type=\"button\"\r\n :data-oc-col-filter=\"tabs.column\"\r\n :data-oc-value=\"tab.value\"\r\n :aria-selected=\"i === 0 ? 'true' : 'false'\"\r\n ><iconify-icon v-if=\"tab.icon\" :icon=\"tab.icon\" aria-hidden=\"true\" />{{ tab.label }}<span v-if=\"tab.count != null\" :class=\"['oc-data-table-tab-count', tab.tone && `oc-data-table-tab-count--${tab.tone}`]\">{{ tab.count }}</span></button>\r\n </div>\r\n <div class=\"oc-data-table-toolbar\">\r\n <div class=\"oc-data-table-heading\">\r\n <span class=\"oc-data-table-title\">{{ title }}</span>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--icon oc-btn--sm\" type=\"button\" :popovertarget=\"`${id}-menu`\" aria-label=\"List actions\" title=\"List actions\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M8 13c-1.86 0-3.41 1.28-3.86 3H2v2h2.14c.45 1.72 2 3 3.86 3s3.41-1.28 3.86-3H22v-2H11.86c-.45-1.72-2-3-3.86-3m0 6c-1.1 0-2-.9-2-2s.9-2 2-2s2 .9 2 2s-.9 2-2 2M19.86 6c-.45-1.72-2-3-3.86-3s-3.41 1.28-3.86 3H2v2h10.14c.45 1.72 2 3 3.86 3s3.41-1.28 3.86-3H22V6zM16 9c-1.1 0-2-.9-2-2s.9-2 2-2s2 .9 2 2s-.9 2-2 2\" /></svg></button>\r\n <div class=\"oc-dropdown-menu\" :id=\"`${id}-menu`\" popover>\r\n <button class=\"oc-dropdown-item\" type=\"button\" data-oc-export>Export CSV</button>\r\n <template v-if=\"importable\">\r\n <button class=\"oc-dropdown-item\" type=\"button\" data-oc-import>Import CSV</button>\r\n <input class=\"oc-data-table-file\" type=\"file\" accept=\".csv,text/csv\" data-oc-file>\r\n </template>\r\n <button class=\"oc-dropdown-item\" type=\"button\" data-oc-bulk=\"duplicate\">Duplicate selection</button>\r\n <button class=\"oc-dropdown-item\" type=\"button\" data-oc-bulk=\"archive\">Move selection to trash</button>\r\n <div class=\"oc-dropdown-separator\"></div>\r\n <button class=\"oc-dropdown-item\" type=\"button\" data-oc-density=\"comfortable\">Comfortable rows</button>\r\n <button class=\"oc-dropdown-item\" type=\"button\" data-oc-density=\"compact\">Compact rows</button>\r\n </div>\r\n </div>\r\n <input class=\"oc-input oc-data-table-search\" type=\"search\" :placeholder=\"searchPlaceholder\" :aria-label=\"`Search ${title}`\">\r\n <div v-if=\"filters\" class=\"oc-filter-pills\" role=\"group\" aria-label=\"Trash filter\">\r\n <button class=\"oc-filter-pill\" type=\"button\" data-oc-filter=\"active\" aria-current=\"true\">Active only</button>\r\n <button class=\"oc-filter-pill\" type=\"button\" data-oc-filter=\"all\">Including trash</button>\r\n <button class=\"oc-filter-pill\" type=\"button\" data-oc-filter=\"deleted\">Trash only</button>\r\n <button v-if=\"archive\" class=\"oc-filter-pill\" type=\"button\" data-oc-filter=\"archived\">Archive only</button>\r\n </div>\r\n <div class=\"oc-data-table-view\" role=\"group\" aria-label=\"View\">\r\n <button class=\"oc-btn oc-btn--outline oc-btn--icon oc-btn--sm\" type=\"button\" data-oc-view=\"table\" aria-pressed=\"true\" aria-label=\"Table\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M7 5h14v2H7zm0 8v-2h14v2zM4 4.5A1.5 1.5 0 0 1 5.5 6A1.5 1.5 0 0 1 4 7.5A1.5 1.5 0 0 1 2.5 6A1.5 1.5 0 0 1 4 4.5m0 6A1.5 1.5 0 0 1 5.5 12A1.5 1.5 0 0 1 4 13.5A1.5 1.5 0 0 1 2.5 12A1.5 1.5 0 0 1 4 10.5M7 19v-2h14v2zm-3-2.5A1.5 1.5 0 0 1 5.5 18A1.5 1.5 0 0 1 4 19.5A1.5 1.5 0 0 1 2.5 18A1.5 1.5 0 0 1 4 16.5\" /></svg></button>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--icon oc-btn--sm\" type=\"button\" data-oc-view=\"grid\" aria-label=\"Cards\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M3 11h8V3H3m2 2h4v4H5m8 12h8v-8h-8m2 2h4v4h-4M3 21h8v-8H3m2 2h4v4H5m8-16v8h8V3m-2 6h-4V5h4Z\" /></svg></button>\r\n </div>\r\n <div v-if=\"$slots['page-actions']\" class=\"oc-data-table-actions\"><slot name=\"page-actions\" /></div>\r\n <p class=\"oc-data-table-sort-summary\" data-oc-sort-summary role=\"status\"></p>\r\n </div>\r\n <div v-if=\"columnFilters?.length\" :id=\"`${id}-filters`\" class=\"oc-data-table-filters\">\r\n <label v-for=\"f in columnFilters\" :key=\"f.column\" class=\"oc-data-table-filter\">\r\n <iconify-icon v-if=\"f.icon\" :icon=\"f.icon\" aria-hidden=\"true\" />\r\n <template v-else><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M15 19.88c.04.3-.06.62-.29.83a.996.996 0 0 1-1.41 0L9.29 16.7a.99.99 0 0 1-.29-.83v-5.12L4.21 4.62a1 1 0 0 1 .17-1.4c.19-.14.4-.22.62-.22h14c.22 0 .43.08.62.22a1 1 0 0 1 .17 1.4L15 10.75zM7.04 5L11 10.06v5.52l2 2v-7.53L16.96 5z\" /></svg></template>\r\n <select class=\"oc-select\" :data-oc-col-filter=\"f.column\" :aria-label=\"f.label\">\r\n <option v-for=\"o in f.options\" :key=\"o.value\" :value=\"o.value\" :selected=\"o.value === ''\">{{ o.label }}</option>\r\n </select>\r\n </label>\r\n </div>\r\n <div v-if=\"columnMenu\" class=\"oc-column-menu\" :id=\"`${id}-columns`\" popover>\r\n <p class=\"oc-column-menu-title\">Columns</p>\r\n <template v-if=\"resizable\">\r\n <button class=\"oc-dropdown-item\" type=\"button\" data-oc-reset-widths>Reset column widths</button>\r\n <div class=\"oc-dropdown-separator\"></div>\r\n </template>\r\n <form class=\"oc-column-menu-list\">\r\n <template v-for=\"(col, index) in columns\" :key=\"col.key\">\r\n <label v-if=\"col.hideable !== false\" class=\"oc-column-menu-item\">\r\n <input type=\"checkbox\" :data-col=\"lead + index + 1\" :checked=\"!col.defaultHidden\"> {{ col.header }}\r\n </label>\r\n </template>\r\n </form>\r\n </div>\r\n <div class=\"oc-data-table-bulk\" hidden>\r\n <span data-oc-selected-count>0 selected</span>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" data-oc-bulk=\"export\">Export selection</button>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" data-oc-bulk=\"duplicate\">Duplicate</button>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" data-oc-bulk=\"archive\">Move to trash</button>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" data-oc-bulk=\"restore\">Restore</button>\r\n <button class=\"oc-btn oc-btn--destructive oc-btn--sm\" type=\"button\" data-oc-bulk=\"delete\">Delete permanently</button>\r\n <button class=\"oc-btn oc-btn--ghost oc-btn--sm\" type=\"button\" data-oc-bulk=\"clear\">Clear</button>\r\n </div>\r\n <div class=\"oc-data-table-frame\">\r\n <div class=\"oc-data-table-scroll\">\r\n <table class=\"oc-table oc-data-table-table\">\r\n <thead>\r\n <tr>\r\n <th v-if=\"selectable\" data-oc-col=\"select\"><input class=\"oc-checkbox\" type=\"checkbox\" data-oc-select-all aria-label=\"Select all\"></th>\r\n <th v-if=\"draggable\" data-oc-col=\"order\"><span class=\"oc-visually-hidden\">Order</span></th>\r\n <th v-for=\"col in columns\" :key=\"col.key\" :data-oc-col=\"col.key\" :data-oc-sort=\"col.numeric ? 'numeric' : 'text'\" :data-numeric=\"col.numeric ? '' : undefined\" :aria-sort=\"col.defaultSort\">\r\n <span class=\"oc-data-table-th\">\r\n <button v-if=\"col.sortable !== false\" class=\"oc-table-sort\" type=\"button\">{{ col.header }}</button>\r\n <template v-else>{{ col.header }}</template>\r\n <span v-if=\"resizable\" class=\"oc-data-table-resize\" role=\"separator\" aria-orientation=\"vertical\" :aria-label=\"`Resize ${col.header}`\"></span>\r\n </span>\r\n </th>\r\n <th data-oc-col=\"actions\">\r\n <span class=\"oc-data-table-th\">Actions<button v-if=\"columnMenu\" class=\"oc-btn oc-btn--plain oc-data-table-columns-btn\" type=\"button\" :popovertarget=\"`${id}-columns`\" aria-label=\"Columns\" title=\"Columns\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M4 5v13h17V5zm10 2v9h-3V7zM6 7h3v9H6zm13 9h-3V7h3z\" /></svg></button></span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr v-for=\"row in rows\" :key=\"row.key\" data-oc-row :data-oc-key=\"row.key\" :data-oc-status=\"row.status || 'active'\" :data-oc-href=\"row.href\">\r\n <td v-if=\"selectable\" data-oc-col=\"select\"><input class=\"oc-checkbox\" type=\"checkbox\" data-oc-select :aria-label=\"`Select ${label(row)}`\"></td>\r\n <td v-if=\"draggable\" data-oc-col=\"order\" class=\"oc-sortable-row-grip-cell\"><button class=\"oc-sortable-row-grip\" type=\"button\" :aria-label=\"`Move ${label(row)}`\"></button></td>\r\n <td v-for=\"col in columns\" :key=\"col.key\" :data-oc-col=\"col.key\" :data-numeric=\"col.numeric ? '' : undefined\" :data-oc-value=\"row.values?.[col.key]\">\r\n <slot :name=\"`cell-${col.key}`\" :row=\"row\">\r\n <span v-if=\"col.truncate\" class=\"oc-data-table-truncate\" :style=\"{ '--oc-data-table-truncate': col.truncate }\" :title=\"row.cells[col.key]\">{{ row.cells[col.key] ?? '' }}</span>\r\n <template v-else>{{ row.cells[col.key] ?? '' }}</template>\r\n </slot>\r\n </td>\r\n <td data-oc-col=\"actions\">\r\n <div style=\"display: flex; gap: 0.375rem; justify-content: flex-end\">\r\n <slot name=\"actions\" :row=\"row\">\r\n <button class=\"oc-btn oc-btn--soft-primary oc-btn--icon oc-btn--sm\" type=\"button\" :aria-label=\"`Edit ${label(row)}`\" title=\"Edit\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z\" /></svg></button>\r\n </slot>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <p class=\"oc-data-table-empty\" hidden>No results</p>\r\n </div>\r\n <div class=\"oc-data-table-footer\">\r\n <p class=\"oc-data-table-summary\" :data-oc-summary=\"summary\"></p>\r\n <label class=\"oc-data-table-per-page\">Rows per page\r\n <select class=\"oc-select\" data-oc-page-size aria-label=\"Rows per page\">\r\n <option v-for=\"n in sizes\" :key=\"n\" :value=\"n\" :selected=\"n === pageSize\">{{ n }}</option>\r\n </select>\r\n </label>\r\n <nav class=\"oc-data-table-pager\" data-oc-pager aria-label=\"Pagination\"></nav>\r\n </div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcDataTableName.vue | Map: props -> avatar + name line + second line -->\r\n<script setup lang=\"ts\">\r\n/** Name cell of a data table: avatar (initials or image), name with a badge (slot) and a muted second line. */\r\nimport { computed } from 'vue'\r\n\r\nconst props = defineProps<{ name: string; initials?: string; avatar?: string; sub?: string }>()\r\nconst letters = computed(() => props.initials ?? props.name.split(/[\\s&-]+/).filter(Boolean).slice(0, 2).map((w) => w[0]).join('').toUpperCase())\r\n</script>\r\n\r\n<template>\r\n <span class=\"oc-data-table-name\">\r\n <span class=\"oc-avatar\" aria-hidden=\"true\"><img v-if=\"avatar\" :src=\"avatar\" alt=\"\"><template v-else>{{ letters }}</template></span>\r\n <span class=\"oc-data-table-name-text\">\r\n <span class=\"oc-data-table-name-line\">{{ name }} <slot name=\"badge\" /></span>\r\n <span v-if=\"sub || $slots.sub\" class=\"oc-data-table-name-sub\"><slot name=\"sub\">{{ sub }}</slot></span>\r\n </span>\r\n </span>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcDateField.vue | Map: v-model date -> ISO week label -> markup -->\r\n<script setup lang=\"ts\">\r\n/** Native date input with a calendar icon zone and the ISO week. v-model is the YYYY-MM-DD string. */\r\nimport { computed } from 'vue'\r\nimport { isoWeek } from '../../../ui/src/form-extras.js'\r\n\r\nconst props = withDefaults(defineProps<{ week?: boolean; weekLabel?: string; size?: 'md' | 'sm'; id?: string }>(), { week: true, weekLabel: 'Week {week}', size: 'md' })\r\nconst model = defineModel<string>({ default: '' })\r\nconst label = computed(() => {\r\n const [y, m, d] = (model.value || '').split('-').map(Number)\r\n if (!props.week || !y) return ''\r\n const w = isoWeek(new Date(y, m - 1, d))\r\n return props.weekLabel.replace('{week}', String(w.week)).replace('{year}', String(w.year))\r\n})\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-date-field', size === 'sm' && 'oc-date-field--sm']\">\r\n <span class=\"oc-date-field__icon\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M19 3h-1V1h-2v2H8V1H6v2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14c1.11 0 2-.89 2-2V5a2 2 0 0 0-2-2m0 16H5V9h14zm0-12H5V5h14z\" /></svg></span>\r\n <input :id=\"id\" v-model=\"model\" type=\"date\" class=\"oc-date-field__input\">\r\n <output v-if=\"week\" class=\"oc-date-field__week\">{{ label }}</output>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcDecimalInput.vue | Map: props + model -> locale helpers (parse / format) -> template (field, optional unit frame) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Locale decimal field (1.234,56). v-model: number | null. Formats on blur with Intl.NumberFormat.\r\n * Same markup as packages/ui/snippets/decimal-input.html. All attributes (also class) go to the input.\r\n */\r\nimport { ref, watch } from 'vue'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nconst props = withDefaults(defineProps<{ locale?: string; decimals?: number; unit?: string; alignStart?: boolean; error?: boolean }>(), {\r\n locale: 'nl-BE',\r\n decimals: 2,\r\n})\r\nconst model = defineModel<number | null>({ default: null })\r\n\r\n/** Group and decimal separator of the locale, e.g. nl-BE -> \".\" and \",\". */\r\nfunction separators() {\r\n const parts = new Intl.NumberFormat(props.locale).formatToParts(1234.5)\r\n return { group: parts.find((p) => p.type === 'group')?.value ?? ',', decimal: parts.find((p) => p.type === 'decimal')?.value ?? '.' }\r\n}\r\nfunction parse(text: string): number | null {\r\n const { group, decimal } = separators()\r\n const clean = text.trim().split(group).join('').replace(decimal, '.').replace(/\\s/g, '')\r\n const n = Number(clean)\r\n return clean && Number.isFinite(n) ? n : null\r\n}\r\nfunction format(n: number | null): string {\r\n return n == null ? '' : new Intl.NumberFormat(props.locale, { minimumFractionDigits: props.decimals, maximumFractionDigits: props.decimals }).format(n)\r\n}\r\n\r\nconst text = ref(format(model.value))\r\nconst focused = ref(false)\r\n// Show outside changes, but never while the user is typing.\r\nwatch(model, (n) => { if (!focused.value) text.value = format(n) })\r\n\r\nfunction onInput(e: Event) {\r\n text.value = (e.target as HTMLInputElement).value\r\n model.value = parse(text.value)\r\n}\r\nfunction onBlur() {\r\n focused.value = false\r\n const n = parse(text.value)\r\n if (n != null || !text.value.trim()) text.value = format(n)\r\n}\r\n</script>\r\n\r\n<template>\r\n <div v-if=\"unit\" class=\"oc-decimal-field\">\r\n <input v-bind=\"$attrs\" :class=\"['oc-input', 'oc-decimal-input', alignStart && 'oc-decimal-input--start']\" type=\"text\" inputmode=\"decimal\" :aria-invalid=\"error ? 'true' : undefined\" :value=\"text\" @focus=\"focused = true\" @input=\"onInput\" @blur=\"onBlur\" />\r\n <span class=\"oc-decimal-field-unit\">{{ unit }}</span>\r\n </div>\r\n <input v-else v-bind=\"$attrs\" :class=\"['oc-input', 'oc-decimal-input', alignStart && 'oc-decimal-input--start']\" type=\"text\" inputmode=\"decimal\" :aria-invalid=\"error ? 'true' : undefined\" :value=\"text\" @focus=\"focused = true\" @input=\"onInput\" @blur=\"onBlur\" />\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Label / value rows in a panel (dl). Pass `rows`, or put your own .oc-dl-row elements in the default slot.\r\n * Slots: title, description, default (rows), footer.\r\n */\r\nexport interface DefinitionRow {\r\n term: string\r\n detail: string\r\n}\r\nwithDefaults(\r\n defineProps<{\r\n title?: string\r\n description?: string\r\n rows?: DefinitionRow[]\r\n label?: string\r\n }>(),\r\n { rows: () => [] },\r\n)\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-dl-panel\" role=\"region\" :aria-label=\"label ?? title\">\r\n <h3 v-if=\"title || $slots.title\" class=\"oc-dl-title\"><slot name=\"title\">{{ title }}</slot></h3>\r\n <p v-if=\"description || $slots.description\" class=\"oc-dl-description\"><slot name=\"description\">{{ description }}</slot></p>\r\n <dl class=\"oc-dl\">\r\n <slot>\r\n <div v-for=\"(row, i) in rows\" :key=\"i\" class=\"oc-dl-row\">\r\n <dt class=\"oc-dl-term\">{{ row.term }}</dt>\r\n <dd class=\"oc-dl-detail\">{{ row.detail }}</dd>\r\n </div>\r\n </slot>\r\n </dl>\r\n <div v-if=\"$slots.footer\" class=\"oc-dl-footer\"><slot name=\"footer\" /></div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcDocViewer.vue | Map: props + demo items -> grid of cards (bar, frame) -> one full-screen <dialog> per card -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * PDF, video or image cards with a full-screen view (same markup as snippets/doc-viewer.html). No JavaScript:\r\n * the buttons open the dialog with invoker commands (command=\"show-modal\" commandfor), closedby=\"any\" closes it.\r\n * items: { label, meta?, src?, type?: pdf|video|image, id?, alt?, art?, download?, open?: bar|frame, fullscreen? }[]\r\n * Classes: .oc-doc-viewer-grid, .oc-doc-viewer(--video/--image) __bar __label __meta __expand __frame __open;\r\n * .oc-doc-viewer-dialog(--video) __bar __title __actions __close __body\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface DocViewerItem {\r\n label: string\r\n meta?: string\r\n src?: string\r\n type?: 'pdf' | 'video' | 'image'\r\n id?: string\r\n alt?: string\r\n art?: number\r\n download?: string\r\n open?: 'bar' | 'frame'\r\n fullscreen?: boolean\r\n}\r\nconst props = withDefaults(\r\n defineProps<{ items?: DocViewerItem[]; openText?: string; downloadText?: string; idPrefix?: string }>(),\r\n {\r\n items: () => [\r\n { label: 'Brochure 2026', meta: 'PDF · 2.4 MB', alt: 'First page of Brochure 2026', art: 2, download: '#brochure.pdf' },\r\n { label: 'Site visit', meta: '1:42', type: 'video', alt: 'Video still: site visit', art: 5 },\r\n ],\r\n openText: 'Click for full screen',\r\n downloadText: 'Download',\r\n },\r\n)\r\ndefineOptions({ inheritAttrs: false })\r\nconst auto = useUid('oc-doc-viewer')\r\nconst idOf = (doc: DocViewerItem, i: number) => doc.id ?? `${props.idPrefix ?? auto}-${i + 1}`\r\nconst full = (doc: DocViewerItem) => doc.fullscreen !== false\r\nconst inFrame = (doc: DocViewerItem) => full(doc) && (doc.open ?? (doc.type === 'video' ? 'frame' : 'bar')) === 'frame'\r\nconst art = (doc: DocViewerItem) => ['oc-media-art', doc.art != null && `oc-media-art--${doc.art}`]\r\nconst dialogAlt = (doc: DocViewerItem) => (doc.type === 'video' ? `${doc.label} video` : doc.label)\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-doc-viewer-grid\" v-bind=\"$attrs\">\r\n <figure v-for=\"(doc, i) in items\" :key=\"i\" :class=\"['oc-doc-viewer', doc.type === 'video' && 'oc-doc-viewer--video', doc.type === 'image' && 'oc-doc-viewer--image']\">\r\n <figcaption class=\"oc-doc-viewer__bar\">\r\n <span class=\"oc-doc-viewer__label\">{{ doc.label }}</span>\r\n <span v-if=\"doc.meta\" class=\"oc-doc-viewer__meta\">{{ doc.meta }}</span>\r\n <button v-if=\"full(doc) && !inFrame(doc)\" type=\"button\" class=\"oc-doc-viewer__expand\" command=\"show-modal\" :commandfor=\"idOf(doc, i)\" :aria-label=\"`Open ${doc.label} full screen`\">⤢</button>\r\n </figcaption>\r\n <div class=\"oc-doc-viewer__frame\">\r\n <div v-if=\"!doc.src\" :class=\"art(doc)\" role=\"img\" :aria-label=\"doc.alt ?? doc.label\"></div>\r\n <video v-else-if=\"doc.type === 'video'\" :src=\"doc.src\" controls preload=\"metadata\" :aria-label=\"doc.alt ?? doc.label\"></video>\r\n <img v-else-if=\"doc.type === 'image'\" :src=\"doc.src\" :alt=\"doc.alt ?? doc.label\" />\r\n <iframe v-else :src=\"`${doc.src}#toolbar=0&view=FitH`\" :title=\"doc.alt ?? doc.label\" loading=\"lazy\"></iframe>\r\n <button v-if=\"inFrame(doc)\" type=\"button\" class=\"oc-doc-viewer__open\" command=\"show-modal\" :commandfor=\"idOf(doc, i)\">{{ openText }}</button>\r\n </div>\r\n </figure>\r\n </div>\r\n <template v-for=\"(doc, i) in items\" :key=\"i\">\r\n <dialog v-if=\"full(doc)\" :id=\"idOf(doc, i)\" :class=\"['oc-doc-viewer-dialog', doc.type === 'video' && 'oc-doc-viewer-dialog--video']\" closedby=\"any\" :aria-labelledby=\"`${idOf(doc, i)}-title`\">\r\n <div class=\"oc-doc-viewer-dialog__bar\">\r\n <h2 :id=\"`${idOf(doc, i)}-title`\" class=\"oc-doc-viewer-dialog__title\">{{ doc.label }}</h2>\r\n <div v-if=\"doc.download\" class=\"oc-doc-viewer-dialog__actions\">\r\n <a class=\"oc-btn oc-btn--outline oc-btn--sm\" :href=\"doc.download\" download>{{ downloadText }}</a>\r\n <button type=\"button\" class=\"oc-doc-viewer-dialog__close\" command=\"close\" :commandfor=\"idOf(doc, i)\" aria-label=\"Close\">✕</button>\r\n </div>\r\n <button v-else type=\"button\" class=\"oc-doc-viewer-dialog__close\" command=\"close\" :commandfor=\"idOf(doc, i)\" aria-label=\"Close\">✕</button>\r\n </div>\r\n <div class=\"oc-doc-viewer-dialog__body\">\r\n <div v-if=\"!doc.src\" :class=\"art(doc)\" role=\"img\" :aria-label=\"dialogAlt(doc)\"></div>\r\n <video v-else-if=\"doc.type === 'video'\" :src=\"doc.src\" controls preload=\"metadata\" :aria-label=\"dialogAlt(doc)\"></video>\r\n <img v-else-if=\"doc.type === 'image'\" :src=\"doc.src\" :alt=\"dialogAlt(doc)\" />\r\n <iframe v-else :src=\"`${doc.src}#toolbar=0&view=FitH`\" :title=\"dialogAlt(doc)\" loading=\"lazy\"></iframe>\r\n </div>\r\n </dialog>\r\n </template>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Dropdown menu on the popover attribute + anchor positioning. The trigger is the `trigger` slot\r\n * (scoped: { id }) or a default outline button showing `label`. Default slot = menu content\r\n * (OcDropdownLabel / OcDropdownItem / OcDropdownSeparator). Attributes land on the menu element.\r\n */\r\nimport { useAttrs } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\ndefineProps<{ label?: string }>()\r\nconst attrs = useAttrs()\r\nconst id = (attrs.id as string | undefined) ?? useUid('oc-menu')\r\n</script>\r\n\r\n<template>\r\n <slot name=\"trigger\" :id=\"id\">\r\n <button class=\"oc-btn oc-btn--outline\" type=\"button\" :popovertarget=\"id\">{{ label }}</button>\r\n </slot>\r\n <div v-bind=\"attrs\" :id=\"id\" class=\"oc-dropdown-menu\" popover>\r\n <slot />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Menu item: <a> with `href`, otherwise <button>. checked (true/false) adds a check column, hint a muted text on the right. */\r\nwithDefaults(defineProps<{ href?: string; checked?: boolean; hint?: string }>(), { checked: undefined })\r\n</script>\r\n\r\n<template>\r\n <component\r\n :is=\"href ? 'a' : 'button'\"\r\n class=\"oc-dropdown-item\"\r\n :href=\"href\"\r\n :type=\"href ? undefined : 'button'\"\r\n :role=\"checked !== undefined ? 'menuitemcheckbox' : undefined\"\r\n :aria-checked=\"checked !== undefined ? String(checked) : undefined\"\r\n >\r\n <span v-if=\"checked !== undefined\" class=\"oc-dropdown-check\" aria-hidden=\"true\"></span>\r\n <slot />\r\n <span v-if=\"hint\" class=\"oc-dropdown-hint\">{{ hint }}</span>\r\n </component>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Heading inside a dropdown menu. */\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-dropdown-label\"><slot /></div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Divider inside a dropdown menu. */\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-dropdown-separator\"></div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * File upload target: a label around a real file input. v-model: File[].\r\n * .is-dragover is toggled while dragging over. Slots: icon, default (text), hint.\r\n */\r\nimport { ref } from 'vue'\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\ndefineProps<{ accept?: string; multiple?: boolean; disabled?: boolean; hint?: string }>()\r\nconst model = defineModel<File[]>({ default: () => [] })\r\nconst { root, control } = useAttrsSplit()\r\nconst dragover = ref(false)\r\n\r\nfunction onChange(e: Event) {\r\n model.value = Array.from((e.target as HTMLInputElement).files ?? [])\r\n}\r\nfunction onDrop() {\r\n dragover.value = false\r\n}\r\n</script>\r\n\r\n<template>\r\n <label\r\n v-bind=\"root\"\r\n :class=\"['oc-dropzone', dragover && 'is-dragover']\"\r\n @dragover.prevent=\"dragover = true\"\r\n @dragleave=\"dragover = false\"\r\n @drop=\"onDrop\"\r\n >\r\n <input v-bind=\"control\" type=\"file\" :accept=\"accept\" :multiple=\"multiple\" :disabled=\"disabled\" @change=\"onChange\" />\r\n <span v-if=\"$slots.icon\" class=\"oc-dropzone-icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <span><slot /></span>\r\n <span v-if=\"hint || $slots.hint\" class=\"oc-dropzone-hint\"><slot name=\"hint\">{{ hint }}</slot></span>\r\n </label>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcEmojiPicker.vue | Map: props + emit -> trigger button -> popover panel -> groups (label + grid) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Emoji picker on the popover attribute (same markup as snippets/emoji-picker.html).\r\n * Props: groups ({ label?, emojis[] }[]), inline (always visible, no popover), triggerLabel, label.\r\n * Emits: select(emoji) and then closes the popover. Slot: trigger (button content, default a smiley webicon).\r\n * Classes: .oc-emoji-picker(--inline), __trigger, __label, __grid, __item\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{ groups?: { label?: string; emojis: string[] }[]; inline?: boolean; triggerLabel?: string; label?: string }>(),\r\n {\r\n groups: () => [\r\n { label: 'Smileys', emojis: ['😀', '😃', '😄', '😁', '😂', '🙂', '😉', '😍', '🤔', '😎', '😢', '😴', '😯', '🥳', '😤', '🤗'] },\r\n { label: 'Gestures', emojis: ['👍', '👎', '👏', '🙌', '👋', '🙏', '✌️', '💪'] },\r\n { label: 'Objects', emojis: ['❤️', '⭐', '🔥', '🎉', '✅', '🚀', '💡', '☕'] },\r\n ],\r\n triggerLabel: 'Insert emoji',\r\n label: 'Emoji',\r\n },\r\n)\r\nconst emit = defineEmits<{ select: [emoji: string] }>()\r\nconst id = useUid('oc-emoji')\r\n\r\nfunction pick(e: MouseEvent, emoji: string) {\r\n emit('select', emoji)\r\n const panel = (e.currentTarget as HTMLElement).closest('[popover]') as (HTMLElement & { hidePopover?: () => void }) | null\r\n panel?.hidePopover?.()\r\n}\r\n</script>\r\n\r\n<template>\r\n <button v-if=\"!inline\" type=\"button\" class=\"oc-emoji-picker__trigger\" :popovertarget=\"id\" :aria-label=\"triggerLabel\">\r\n <slot name=\"trigger\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M20 12a8 8 0 0 0-8-8a8 8 0 0 0-8 8a8 8 0 0 0 8 8a8 8 0 0 0 8-8m2 0a10 10 0 0 1-10 10A10 10 0 0 1 2 12A10 10 0 0 1 12 2a10 10 0 0 1 10 10m-12-3.5c0 .8-.7 1.5-1.5 1.5S7 9.3 7 8.5S7.7 7 8.5 7s1.5.7 1.5 1.5m7 0c0 .8-.7 1.5-1.5 1.5S14 9.3 14 8.5S14.7 7 15.5 7s1.5.7 1.5 1.5m-5 9.73c-1.75 0-3.29-.73-4.19-1.81L9.23 14c.45.72 1.52 1.23 2.77 1.23s2.32-.51 2.77-1.23l1.42 1.42c-.9 1.08-2.44 1.81-4.19 1.81\"/></svg></slot>\r\n </button>\r\n <div :id=\"id\" :class=\"['oc-emoji-picker', inline && 'oc-emoji-picker--inline']\" :popover=\"inline ? undefined : ''\" :role=\"inline ? 'group' : undefined\" :aria-label=\"label\">\r\n <div v-for=\"(g, gi) in groups\" :key=\"gi\">\r\n <p v-if=\"g.label\" class=\"oc-emoji-picker__label\">{{ g.label }}</p>\r\n <div class=\"oc-emoji-picker__grid\">\r\n <button v-for=\"emoji in g.emojis\" :key=\"emoji\" type=\"button\" class=\"oc-emoji-picker__item\" @click=\"pick($event, emoji)\">{{ emoji }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Icon, title, text and actions for lists without data. Slots: icon, title, default (text), actions. */\r\ndefineProps<{ icon?: string; title?: string; text?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-empty\">\r\n <span v-if=\"icon || $slots.icon\" class=\"oc-empty-icon\" aria-hidden=\"true\"><slot name=\"icon\">{{ icon }}</slot></span>\r\n <h3 v-if=\"title || $slots.title\" class=\"oc-empty-title\"><slot name=\"title\">{{ title }}</slot></h3>\r\n <p v-if=\"text || $slots.default\" class=\"oc-empty-text\"><slot>{{ text }}</slot></p>\r\n <div v-if=\"$slots.actions\" class=\"oc-empty-actions\"><slot name=\"actions\" /></div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcEntityCard.vue | Map: props -> article -> grid (frame | body: eyebrow, title, description, facts) -> footer -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Framed media cell + detail column (same markup as snippets/entity-card.html).\r\n * Props: title, eyebrow, description, src / alt or glyph (frame content), contain, facts ([key, value][]), stacked, size (sm|md).\r\n * Slots: media (frame content), default (extra body content), footer. Classes: .oc-entity-card(--stacked/--sm), __grid,\r\n * __frame(--contain), __glyph, __body, __eyebrow, __title, __description, __facts, __footer\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n title: string\r\n eyebrow?: string\r\n description?: string\r\n src?: string\r\n alt?: string\r\n glyph?: string\r\n contain?: boolean\r\n facts?: [string, string][]\r\n stacked?: boolean\r\n size?: 'sm' | 'md'\r\n }>(),\r\n { alt: '', size: 'md' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <article :class=\"['oc-entity-card', stacked && 'oc-entity-card--stacked', size === 'sm' && 'oc-entity-card--sm']\">\r\n <div class=\"oc-entity-card__grid\">\r\n <div :class=\"['oc-entity-card__frame', contain && 'oc-entity-card__frame--contain']\">\r\n <slot name=\"media\">\r\n <img v-if=\"src\" :src=\"src\" :alt=\"alt\" />\r\n <span v-else-if=\"glyph\" class=\"oc-entity-card__glyph\" aria-hidden=\"true\">{{ glyph }}</span>\r\n </slot>\r\n </div>\r\n <div class=\"oc-entity-card__body\">\r\n <p v-if=\"eyebrow\" class=\"oc-entity-card__eyebrow\">{{ eyebrow }}</p>\r\n <h3 class=\"oc-entity-card__title\">{{ title }}</h3>\r\n <p v-if=\"description\" class=\"oc-entity-card__description\">{{ description }}</p>\r\n <dl v-if=\"facts?.length\" class=\"oc-entity-card__facts\">\r\n <template v-for=\"([k, v], i) in facts\" :key=\"i\"><dt>{{ k }}</dt><dd>{{ v }}</dd></template>\r\n </dl>\r\n <slot />\r\n </div>\r\n </div>\r\n <div v-if=\"$slots.footer\" class=\"oc-entity-card__footer\"><slot name=\"footer\" /></div>\r\n </article>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcFactList.vue | Map: props (items + modifiers) -> dl.oc-fact-list -> div > dt + dd -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Key / value product facts (variant of the definition list). Pass `items`, or your own <div><dt><dd> rows in the slot.\r\n * Classes: .oc-fact-list (--plain, --compact, --stacked, --accent)\r\n */\r\nexport interface FactListRow {\r\n label: string\r\n value: string\r\n}\r\nwithDefaults(\r\n defineProps<{\r\n items?: FactListRow[]\r\n plain?: boolean\r\n compact?: boolean\r\n stacked?: boolean\r\n accent?: boolean\r\n }>(),\r\n { items: () => [] },\r\n)\r\n</script>\r\n\r\n<template>\r\n <dl\r\n :class=\"[\r\n 'oc-fact-list',\r\n plain && 'oc-fact-list--plain',\r\n compact && 'oc-fact-list--compact',\r\n stacked && 'oc-fact-list--stacked',\r\n accent && 'oc-fact-list--accent',\r\n ]\"\r\n >\r\n <slot>\r\n <div v-for=\"(row, i) in items\" :key=\"i\"><dt>{{ row.label }}</dt><dd>{{ row.value }}</dd></div>\r\n </slot>\r\n </dl>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcFeatureCard.vue | Map: tile (icon) -> title -> text (slot) -->\r\n<script setup lang=\"ts\">\r\n/** Service or feature card (snippets/feature-card.html). icon = webicon name; slots: default (text), icon. */\r\nwithDefaults(defineProps<{ title: string; icon?: string; accent?: string; headingLevel?: 2 | 3 | 4 }>(), { headingLevel: 3 })\r\n</script>\r\n\r\n<template>\r\n <article class=\"oc-feature-card\">\r\n <span v-if=\"icon || $slots.icon\" :class=\"['oc-icon-tile oc-icon-tile--sm', accent && `oc-accent--${accent}`]\" aria-hidden=\"true\">\r\n <slot name=\"icon\"><iconify-icon :icon=\"icon\" /></slot>\r\n </span>\r\n <component :is=\"`h${headingLevel}`\" class=\"oc-feature-card__title\">{{ title }}</component>\r\n <p v-if=\"$slots.default\" class=\"oc-feature-card__text\"><slot /></p>\r\n </article>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcFilterCounts.vue | Map: types + props -> template (fieldset radiogroup -> tile per view) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * View filter tiles with counts (Active / Deleted / All). v-model = selected value.\r\n * Same markup as packages/ui/snippets/filter-counts.html. Classes: .oc-filter-counts(--compact), -item(--success/--destructive/--muted), -value, -label, -hint\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface FilterCountsItem {\r\n value: string\r\n label: string\r\n count: number | string\r\n hint?: string\r\n /** Accent color of the tile; default primary. */\r\n tone?: 'primary' | 'success' | 'destructive' | 'muted'\r\n disabled?: boolean\r\n}\r\ndefineProps<{\r\n options: FilterCountsItem[]\r\n /** aria-label of the group */\r\n label?: string\r\n compact?: boolean\r\n name?: string\r\n}>()\r\nconst model = defineModel<string>()\r\nconst uid = useUid('oc-filter')\r\n</script>\r\n\r\n<template>\r\n <fieldset :class=\"['oc-filter-counts', compact && 'oc-filter-counts--compact']\" role=\"radiogroup\" :aria-label=\"label\">\r\n <label v-for=\"option in options\" :key=\"option.value\" :class=\"['oc-filter-counts-item', option.tone && option.tone !== 'primary' && `oc-filter-counts-item--${option.tone}`]\">\r\n <input v-model=\"model\" type=\"radio\" :name=\"name ?? uid\" :value=\"option.value\" :disabled=\"option.disabled\" />\r\n <span class=\"oc-filter-counts-value\">{{ option.count }}</span>\r\n <span class=\"oc-filter-counts-label\">{{ option.label }}</span>\r\n <span v-if=\"option.hint\" class=\"oc-filter-counts-hint\">{{ option.hint }}</span>\r\n </label>\r\n </fieldset>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcFlipCard.vue | Map: props + v-model:flipped -> card -> checkbox (toggle) -> inner -> front / back faces -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * 3D flip card (same markup as snippets/flip-card.html). v-model:flipped. trigger: toggle (checkbox, default) |\r\n * hover (--hover, tabindex 0) | manual (.is-flipped from the model only). Props: vertical, frontLabel, backLabel.\r\n * Slots: front, back. Classes: .oc-flip-card(--hover/--vertical, .is-flipped), __toggle, __inner, __face(--front/--back),\r\n * __title, __text, __flip\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{ trigger?: 'toggle' | 'hover' | 'manual'; vertical?: boolean; frontLabel?: string; backLabel?: string }>(),\r\n { trigger: 'toggle', frontLabel: 'Show answer', backLabel: 'Back' },\r\n)\r\nconst flipped = defineModel<boolean>('flipped', { default: false })\r\nconst id = useUid('oc-flip')\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"['oc-flip-card', trigger === 'hover' && 'oc-flip-card--hover', vertical && 'oc-flip-card--vertical', trigger !== 'toggle' && flipped && 'is-flipped']\"\r\n :tabindex=\"trigger === 'hover' ? 0 : undefined\"\r\n >\r\n <input v-if=\"trigger === 'toggle'\" :id=\"id\" v-model=\"flipped\" type=\"checkbox\" class=\"oc-flip-card__toggle\" />\r\n <div class=\"oc-flip-card__inner\">\r\n <div class=\"oc-flip-card__face oc-flip-card__face--front\">\r\n <slot name=\"front\" />\r\n <label v-if=\"trigger === 'toggle'\" class=\"oc-flip-card__flip\" :for=\"id\">{{ frontLabel }}</label>\r\n </div>\r\n <div class=\"oc-flip-card__face oc-flip-card__face--back\">\r\n <slot name=\"back\" />\r\n <label v-if=\"trigger === 'toggle'\" class=\"oc-flip-card__flip\" :for=\"id\">{{ backLabel }}</label>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Form field: label, control (default slot), description and error.\r\n * The slot receives { id, describedBy, invalid } so the control can be wired:\r\n * <OcFormField label=\"Email\" description=\"...\" v-slot=\"f\"><OcInput :id=\"f.id\" :aria-describedby=\"f.describedBy\" /></OcFormField>\r\n * Classes: .oc-field(--horizontal), .oc-field-label, .oc-field-description, .oc-field-error\r\n */\r\nimport { computed } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = defineProps<{\r\n label?: string\r\n description?: string\r\n error?: string\r\n /** id of the control; generated when omitted */\r\n for?: string\r\n horizontal?: boolean\r\n}>()\r\nconst generated = useUid('oc-field')\r\nconst id = computed(() => props.for ?? generated)\r\nconst helpId = computed(() => `${id.value}-help`)\r\nconst errorId = computed(() => `${id.value}-error`)\r\nconst describedBy = computed(() => {\r\n const ids = [props.description && helpId.value, props.error && errorId.value].filter(Boolean)\r\n return ids.length ? ids.join(' ') : undefined\r\n})\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-field', horizontal && 'oc-field--horizontal']\">\r\n <label v-if=\"label || $slots.label\" class=\"oc-field-label\" :for=\"id\"><slot name=\"label\">{{ label }}</slot></label>\r\n <slot :id=\"id\" :described-by=\"describedBy\" :invalid=\"!!error\" />\r\n <p v-if=\"description\" :id=\"helpId\" class=\"oc-field-description\">{{ description }}</p>\r\n <p v-if=\"error\" :id=\"errorId\" class=\"oc-field-error\" role=\"alert\">{{ error }}</p>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcFormSection.vue | Map: props -> details (summary: icon, heading, status) -> fields slot -->\r\n<script setup lang=\"ts\">\r\n/** Collapsible form section. Slots: icon, status, default (the fields). Same `name` on siblings = one open at a time. */\r\nwithDefaults(defineProps<{ title: string; hint?: string; name?: string; open?: boolean }>(), { open: false })\r\n</script>\r\n\r\n<template>\r\n <details class=\"oc-form-section\" :name=\"name\" :open=\"open\">\r\n <summary class=\"oc-form-section__summary\">\r\n <span class=\"oc-form-section__icon\"><slot name=\"icon\" /></span>\r\n <span class=\"oc-form-section__heading\">\r\n <span class=\"oc-form-section__title\">{{ title }}</span>\r\n <span v-if=\"hint\" class=\"oc-form-section__hint\">{{ hint }}</span>\r\n </span>\r\n <span class=\"oc-form-section__status\"><slot name=\"status\" /></span>\r\n </summary>\r\n <div class=\"oc-form-section__body\"><slot /></div>\r\n </details>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcGallery.vue | Map: images (max 8) -> stage with slides -> thumbnail radios -->\r\n<script setup lang=\"ts\">\r\n/** Product photos with thumbnails (same markup as snippets/gallery.html), CSS only: radios and :has(). */\r\nimport { computed } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface GalleryImage { src: string; alt: string; thumb?: string; thumbAlt?: string }\r\nconst props = withDefaults(defineProps<{ images: GalleryImage[]; label?: string; badge?: string; side?: boolean; name?: string }>(), { label: 'Photos' })\r\nconst group = props.name ?? useUid('oc-gallery')\r\nconst list = computed(() => props.images.slice(0, 8))\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-gallery', side && 'oc-gallery--side']\">\r\n <div class=\"oc-gallery__stage\">\r\n <span v-if=\"badge\" class=\"oc-badge oc-badge--destructive oc-gallery__badge\">{{ badge }}</span>\r\n <figure v-for=\"(img, i) in list\" :key=\"i\" class=\"oc-gallery__slide\"><img :src=\"img.src\" :alt=\"img.alt\" :loading=\"i ? 'lazy' : undefined\"></figure>\r\n </div>\r\n <fieldset v-if=\"list.length > 1\" class=\"oc-gallery__thumbs\">\r\n <legend>{{ label }}</legend>\r\n <label v-for=\"(img, i) in list\" :key=\"i\" class=\"oc-gallery__thumb\">\r\n <input type=\"radio\" :name=\"group\" :checked=\"i === 0\">\r\n <img :src=\"img.thumb ?? img.src\" :alt=\"img.thumbAlt ?? img.alt\">\r\n </label>\r\n </fieldset>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcGlass.vue | Map: props (strong, flat, liquid, as) -> .oc-glass sheet -> default slot -->\r\n<script setup lang=\"ts\">\r\n/** See-through glass sheet with a light top edge; .oc-card inside becomes a glass panel.\r\n * Classes: .oc-glass + --strong, --flat (desktop window where the OS draws the blur), --liquid (liquid glass) */\r\nwithDefaults(defineProps<{ strong?: boolean; flat?: boolean; liquid?: boolean; as?: 'div' | 'section' | 'aside' | 'article' | 'main' }>(), { as: 'div' })\r\n</script>\r\n\r\n<template>\r\n <component :is=\"as\" :class=\"['oc-glass', strong && 'oc-glass--strong', flat && 'oc-glass--flat', liquid && 'oc-glass--liquid']\"><slot /></component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcGlassBar.vue | Map: props (items, icons, label) -> nav.oc-glass-bar -> links or buttons (icon slot per item) -->\r\n<script setup lang=\"ts\">\r\n/** Liquid glass menu bar: items with an icon and a label; the current item sits in a raised bubble.\r\n * Slots: icon-<index> (the icon of an item). Emits select(index) for items without href. */\r\nexport interface GlassBarItem { label: string; href?: string; current?: boolean }\r\nwithDefaults(defineProps<{ items: GlassBarItem[]; icons?: boolean; label?: string }>(), { label: 'Main' })\r\ndefineEmits<{ select: [index: number] }>()\r\n</script>\r\n\r\n<template>\r\n <nav :class=\"['oc-glass-bar', icons && 'oc-glass-bar--icons']\" :aria-label=\"label\">\r\n <template v-for=\"(item, i) in items\" :key=\"i\">\r\n <a v-if=\"item.href != null\" class=\"oc-glass-bar__item\" :href=\"item.href\" :aria-current=\"item.current ? 'page' : undefined\" :aria-label=\"icons ? item.label : undefined\"><slot :name=\"`icon-${i}`\" /><span v-if=\"!icons\">{{ item.label }}</span></a>\r\n <button v-else class=\"oc-glass-bar__item\" type=\"button\" :aria-pressed=\"item.current ?? false\" :aria-label=\"icons ? item.label : undefined\" @click=\"$emit('select', i)\"><slot :name=\"`icon-${i}`\" /><span v-if=\"!icons\">{{ item.label }}</span></button>\r\n </template>\r\n </nav>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcGlassPanel.vue | Map: props (strong) -> div.oc-glass-panel -> default slot -->\r\n<script setup lang=\"ts\">\r\n/** A lighter layer inside a glass sheet. Classes: .oc-glass-panel(--strong) */\r\ndefineProps<{ strong?: boolean }>()\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-glass-panel', strong && 'oc-glass-panel--strong']\"><slot /></div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcGreeting.vue | Map: time-of-day logic -> header -> icon slot -> body (eyebrow, title + name, date) -> actions slot -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Dashboard greeting. The time of day comes from `date` (default now): morning 05-12, afternoon 12-18, evening otherwise.\r\n * Slots: icon, actions. Classes: .oc-greeting(--morning/--afternoon/--evening/--lg), -icon, -body, -eyebrow, -title, -name, -date, -actions\r\n */\r\nimport { computed } from 'vue'\r\n\r\ntype TimeOfDay = 'morning' | 'afternoon' | 'evening'\r\n\r\nconst props = defineProps<{\r\n name?: string\r\n date?: Date\r\n timeOfDay?: TimeOfDay\r\n /** Translated greetings, e.g. { morning: 'Goedemorgen' }. */\r\n words?: Partial<Record<TimeOfDay, string>>\r\n locale?: string\r\n hideDate?: boolean\r\n eyebrow?: string\r\n size?: 'lg'\r\n}>()\r\n\r\nconst WORDS: Record<TimeOfDay, string> = { morning: 'Good morning', afternoon: 'Good afternoon', evening: 'Good evening' }\r\n\r\nconst when = computed(() => props.date ?? new Date())\r\nconst tod = computed<TimeOfDay>(() => {\r\n if (props.timeOfDay) return props.timeOfDay\r\n const h = when.value.getHours()\r\n return h >= 5 && h < 12 ? 'morning' : h >= 12 && h < 18 ? 'afternoon' : 'evening'\r\n})\r\nconst word = computed(() => props.words?.[tod.value] ?? WORDS[tod.value])\r\nconst dateText = computed(() =>\r\n new Intl.DateTimeFormat(props.locale, { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' }).format(when.value),\r\n)\r\n// Local YYYY-MM-DD for datetime (toISOString would use UTC).\r\nconst iso = computed(() => {\r\n const d = when.value\r\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\r\n})\r\n</script>\r\n\r\n<template>\r\n <header :class=\"['oc-greeting', `oc-greeting--${tod}`, size && `oc-greeting--${size}`]\">\r\n <span v-if=\"$slots.icon\" class=\"oc-greeting-icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <div class=\"oc-greeting-body\">\r\n <p v-if=\"eyebrow\" class=\"oc-greeting-eyebrow\">{{ eyebrow }}</p>\r\n <h2 class=\"oc-greeting-title\">{{ word }}<template v-if=\"name\">, <span class=\"oc-greeting-name\">{{ name }}</span></template></h2>\r\n <time v-if=\"!hideDate\" class=\"oc-greeting-date\" :datetime=\"iso\">{{ dateText }}</time>\r\n </div>\r\n <div v-if=\"$slots.actions\" class=\"oc-greeting-actions\"><slot name=\"actions\" /></div>\r\n </header>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcGroup.vue | Map: section -> head (title + aside) -> meta -> content (slot) -->\r\n<script setup lang=\"ts\">\r\n/** One section in a panel: title, a status on the right (aside, asideTone), a muted line (meta) and the content. */\r\nwithDefaults(defineProps<{ title: string; aside?: string; asideTone?: 'busy' | 'ok' | 'warn' | 'error'; meta?: string; headingLevel?: 2 | 3 | 4 }>(), { headingLevel: 2 })\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-group\">\r\n <header class=\"oc-group__head\">\r\n <component :is=\"`h${headingLevel}`\" class=\"oc-group__title\">{{ title }}</component>\r\n <span v-if=\"aside || $slots.aside\" class=\"oc-group__aside\" :data-tone=\"asideTone\"><slot name=\"aside\">{{ aside }}</slot></span>\r\n </header>\r\n <p v-if=\"meta\" class=\"oc-group__meta\">{{ meta }}</p>\r\n <slot />\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Page or section title with a muted description. Classes: .oc-heading(--sm). `as` picks the title tag. */\r\nwithDefaults(\r\n defineProps<{\r\n title?: string\r\n description?: string\r\n size?: 'sm' | 'md'\r\n as?: 'h1' | 'h2' | 'h3' | 'h4'\r\n }>(),\r\n { size: 'md', as: 'h2' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-heading', size === 'sm' && 'oc-heading--sm']\">\r\n <component :is=\"as\" class=\"oc-heading-title\"><slot name=\"title\">{{ title }}</slot></component>\r\n <p v-if=\"description || $slots.default\" class=\"oc-heading-description\"><slot>{{ description }}</slot></p>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Preview on hover/focus (interestfor + popover, CSS hover fallback). The trigger is the `trigger` slot\r\n * (scoped: { id }) or a link with `label` and `href`; default slot = card content.\r\n * Classes: .oc-hover-card(--top), -trigger, -content(--sm). Attributes land on the content element.\r\n */\r\nimport { useAttrs } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\ndefineProps<{ label?: string; href?: string; top?: boolean; small?: boolean }>()\r\nconst attrs = useAttrs()\r\nconst id = (attrs.id as string | undefined) ?? useUid('oc-hover-card')\r\n</script>\r\n\r\n<template>\r\n <span :class=\"['oc-hover-card', top && 'oc-hover-card--top']\">\r\n <slot name=\"trigger\" :id=\"id\">\r\n <a class=\"oc-hover-card-trigger\" :href=\"href ?? '#'\" :interestfor=\"id\">{{ label }}</a>\r\n </slot>\r\n <div v-bind=\"attrs\" :id=\"id\" :class=\"['oc-hover-card-content', small && 'oc-hover-card-content--sm']\" popover>\r\n <slot />\r\n </div>\r\n </span>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcImageZoom.vue | Map: props + v-model:zoom -> toolbar (radio levels) -> viewport -> canvas -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Zoom / pan viewport (same markup as snippets/image-zoom.html). v-model:zoom = current level (default 1).\r\n * levels: toolbar values (default [1, 1.5, 2, 3]; [] = no toolbar). ratio: square | photo | CSS ratio.\r\n * Default slot replaces the <img>. Classes: .oc-image-zoom(--square/--photo), __toolbar, __label, __level, __viewport, __canvas\r\n */\r\nimport { computed } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = withDefaults(defineProps<{ src?: string; alt?: string; levels?: number[]; ratio?: string }>(), {\r\n alt: '',\r\n levels: () => [1, 1.5, 2, 3],\r\n})\r\nconst zoom = defineModel<number>('zoom', { default: 1 })\r\nconst name = useUid('oc-zoom')\r\nconst preset = computed(() => (props.ratio === 'square' || props.ratio === 'photo' ? props.ratio : undefined))\r\n// Writing --oc-zoom inline means any level works, not only the ones the CSS :has() rules know.\r\nconst vars = computed(() => ({ '--oc-zoom': String(zoom.value), ...(props.ratio && !preset.value ? { '--oc-image-zoom-ratio': props.ratio } : {}) }))\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-image-zoom', preset && `oc-image-zoom--${preset}`]\" :style=\"vars\">\r\n <div v-if=\"levels.length\" class=\"oc-image-zoom__toolbar\" role=\"radiogroup\" aria-label=\"Zoom level\">\r\n <span class=\"oc-image-zoom__label\">Zoom</span>\r\n <label v-for=\"l in levels\" :key=\"l\" class=\"oc-image-zoom__level\">\r\n <input v-model=\"zoom\" type=\"radio\" :name=\"name\" :value=\"l\" />{{ Math.round(l * 100) }}%\r\n </label>\r\n </div>\r\n <div class=\"oc-image-zoom__viewport\" tabindex=\"0\" role=\"region\" :aria-label=\"alt ? `${alt}, scroll to pan` : 'Scroll to pan'\">\r\n <div class=\"oc-image-zoom__canvas\">\r\n <slot>\r\n <img v-if=\"src\" :src=\"src\" :alt=\"alt\" />\r\n <div v-else class=\"oc-media-art\" role=\"img\" :aria-label=\"alt\" />\r\n </slot>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Text input. v-model. `error` sets .oc-input--error + aria-invalid. Any native attribute falls through. */\r\ndefineProps<{ error?: boolean }>()\r\nconst model = defineModel<string | number>()\r\n</script>\r\n\r\n<template>\r\n <input v-model=\"model\" :class=\"['oc-input', error && 'oc-input--error']\" :aria-invalid=\"error ? 'true' : undefined\" />\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Input with prefix/suffix addon. Default slot = the input(s); `prefix` / `suffix` are text props or slots. */\r\ndefineProps<{ prefix?: string; suffix?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-input-group\">\r\n <span v-if=\"prefix || $slots.prefix\" class=\"oc-input-addon\"><slot name=\"prefix\">{{ prefix }}</slot></span>\r\n <slot />\r\n <span v-if=\"suffix || $slots.suffix\" class=\"oc-input-addon\"><slot name=\"suffix\">{{ suffix }}</slot></span>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * List row. Renders <a> when `href` is set. Slots: media (left; `icon` boxes it, `image` makes it an image),\r\n * default (replaces title + description), actions (right), header / footer (full-width rows).\r\n * Classes: .oc-item(--outline/--muted/--sm/--interactive), -media(--icon/--image), -content, -title, -description,\r\n * -actions, -header, -footer\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n variant?: 'default' | 'outline' | 'muted'\r\n size?: 'sm' | 'md'\r\n interactive?: boolean\r\n href?: string\r\n title?: string\r\n description?: string\r\n icon?: boolean\r\n image?: boolean\r\n }>(),\r\n { variant: 'default', size: 'md' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <component\r\n :is=\"href ? 'a' : 'div'\"\r\n :href=\"href\"\r\n :class=\"['oc-item', variant !== 'default' && `oc-item--${variant}`, size === 'sm' && 'oc-item--sm', interactive && 'oc-item--interactive']\"\r\n >\r\n <div v-if=\"$slots.header\" class=\"oc-item-header\"><slot name=\"header\" /></div>\r\n <div v-if=\"$slots.media\" :class=\"['oc-item-media', icon && 'oc-item-media--icon', image && 'oc-item-media--image']\"><slot name=\"media\" /></div>\r\n <div class=\"oc-item-content\">\r\n <slot>\r\n <p v-if=\"title\" class=\"oc-item-title\">{{ title }}</p>\r\n <p v-if=\"description\" class=\"oc-item-description\">{{ description }}</p>\r\n </slot>\r\n </div>\r\n <div v-if=\"$slots.actions\" class=\"oc-item-actions\"><slot name=\"actions\" /></div>\r\n <div v-if=\"$slots.footer\" class=\"oc-item-footer\"><slot name=\"footer\" /></div>\r\n </component>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Vertical list of OcItem. `separated` puts a separator between the direct children is left to OcItemSeparator. Class: .oc-item-group */\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-item-group\"><slot /></div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Divider between items in an OcItemGroup. Class: .oc-item-separator */\r\n</script>\r\n\r\n<template>\r\n <hr class=\"oc-item-separator\" />\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** One key. Class: .oc-kbd */\r\n</script>\r\n\r\n<template>\r\n <kbd class=\"oc-kbd\"><slot /></kbd>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Shortcut: `keys` [\"Ctrl\", \"K\"] renders one key per entry, with a \"+\" separator when `separator` is set. Or pass OcKbd in the slot. Classes: .oc-kbd-group, .oc-kbd-sep */\r\ndefineProps<{ keys?: string[]; separator?: boolean }>()\r\n</script>\r\n\r\n<template>\r\n <span class=\"oc-kbd-group\">\r\n <slot>\r\n <template v-for=\"(key, i) in keys\" :key=\"key + i\">\r\n <span v-if=\"separator && i > 0\" class=\"oc-kbd-sep\">+</span>\r\n <kbd class=\"oc-kbd\">{{ key }}</kbd>\r\n </template>\r\n </slot>\r\n </span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Form label. `for` links it to a control. Classes: .oc-label(--required/--inline/--muted) */\r\ndefineProps<{ for?: string; required?: boolean; inline?: boolean; muted?: boolean }>()\r\n</script>\r\n\r\n<template>\r\n <label :class=\"['oc-label', required && 'oc-label--required', inline && 'oc-label--inline', muted && 'oc-label--muted']\" :for=\"$props.for\">\r\n <slot />\r\n </label>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcLanguageSelect.vue | Map: types + props -> template (label pill: icon slot + native select) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Compact language / currency switcher. v-model = selected value. Slot `icon` replaces the globe / symbol.\r\n * Same markup as packages/ui/snippets/language-select.html. class/style on the pill, other attributes on the select.\r\n */\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\nexport interface LanguageSelectItem {\r\n value: string\r\n label: string\r\n}\r\n\r\ndefineOptions({ inheritAttrs: false })\r\ndefineProps<{\r\n options: LanguageSelectItem[]\r\n /** aria-label of the select (default \"Language\" / \"Currency\") */\r\n label?: string\r\n currency?: boolean\r\n ghost?: boolean\r\n /** Closed it shows only the code (\"NL\"), the value in upper case */\r\n code?: boolean\r\n /** Text icon, e.g. \"€\" (default: globe, or € with `currency`) */\r\n icon?: string\r\n}>()\r\nconst model = defineModel<string>()\r\nconst { root, control } = useAttrsSplit()\r\n</script>\r\n\r\n<template>\r\n <label v-bind=\"root\" :class=\"['oc-language-select', ghost && 'oc-language-select--ghost', currency && 'oc-language-select--currency', code && 'oc-language-select--code']\" :data-code=\"code ? String(model ?? options[0]?.value ?? '').toUpperCase() : undefined\">\r\n <span class=\"oc-language-select-icon\" aria-hidden=\"true\">\r\n <slot name=\"icon\">\r\n <template v-if=\"icon || currency\">{{ icon ?? '€' }}</template>\r\n <svg data-icon=\"mdi:web\" v-else viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M16.36 14c.08-.66.14-1.32.14-2s-.06-1.34-.14-2h3.38c.16.64.26 1.31.26 2s-.1 1.36-.26 2m-5.15 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95a8.03 8.03 0 0 1-4.33 3.56M14.34 14H9.66c-.1-.66-.16-1.32-.16-2s.06-1.35.16-2h4.68c.09.65.16 1.32.16 2s-.07 1.34-.16 2M12 19.96c-.83-1.2-1.5-2.53-1.91-3.96h3.82c-.41 1.43-1.08 2.76-1.91 3.96M8 8H5.08A7.92 7.92 0 0 1 9.4 4.44C8.8 5.55 8.35 6.75 8 8m-2.92 8H8c.35 1.25.8 2.45 1.4 3.56A8 8 0 0 1 5.08 16m-.82-2C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32-.14 2s.06 1.34.14 2M12 4.03c.83 1.2 1.5 2.54 1.91 3.97h-3.82c.41-1.43 1.08-2.77 1.91-3.97M18.92 8h-2.95a15.7 15.7 0 0 0-1.38-3.56c1.84.63 3.37 1.9 4.33 3.56M12 2C6.47 2 2 6.5 2 12a10 10 0 0 0 10 10a10 10 0 0 0 10-10A10 10 0 0 0 12 2\"/></svg>\r\n </slot>\r\n </span>\r\n <select v-bind=\"control\" v-model=\"model\" class=\"oc-language-select-control\" :aria-label=\"label ?? (currency ? 'Currency' : 'Language')\">\r\n <option v-for=\"option in options\" :key=\"option.value\" :value=\"option.value\">{{ option.label }}</option>\r\n </select>\r\n </label>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Large clickable card with icon, title and description. Renders <a> with `href`, <span> when disabled,\r\n * otherwise <button>. State: `current` (aria-current), `disabled` (aria-disabled).\r\n * Slots: icon, title (+ trailing badge), description, footer.\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst props = defineProps<{\r\n href?: string\r\n title?: string\r\n description?: string\r\n footer?: string\r\n current?: boolean\r\n disabled?: boolean\r\n}>()\r\nconst tag = computed(() => (props.disabled ? 'span' : props.href ? 'a' : 'button'))\r\n</script>\r\n\r\n<template>\r\n <component\r\n :is=\"tag\"\r\n class=\"oc-launcher\"\r\n :href=\"tag === 'a' ? href : undefined\"\r\n :type=\"tag === 'button' ? 'button' : undefined\"\r\n :aria-current=\"current ? 'true' : undefined\"\r\n :aria-disabled=\"disabled ? 'true' : undefined\"\r\n >\r\n <span v-if=\"$slots.icon\" class=\"oc-launcher-icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <h3 class=\"oc-launcher-title\"><slot name=\"title\">{{ title }}</slot></h3>\r\n <p v-if=\"description || $slots.description\" class=\"oc-launcher-description\"><slot name=\"description\">{{ description }}</slot></p>\r\n <span v-if=\"footer || $slots.footer\" class=\"oc-launcher-footer\"><slot name=\"footer\">{{ footer }}</slot></span>\r\n </component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcLazyImage.vue | Map: props -> figure.oc-lazy (ratio, preview) -> img loading=lazy -> loaded / error state -->\r\n<script setup lang=\"ts\">\r\n/** An image that keeps its place, shows a shimmer (or a blurred preview) and fades in once loaded (same markup as\r\n * snippets/lazy.html). Props: src, alt, width, height, ratio, preview, caption, loading. Slot: caption. */\r\nimport { computed, ref } from 'vue'\r\n\r\nconst props = withDefaults(defineProps<{ src: string; alt: string; width?: number; height?: number; ratio?: string; preview?: string; caption?: string; loading?: 'lazy' | 'eager' }>(), { loading: 'lazy' })\r\nconst state = ref<'' | 'is-loaded' | 'is-error'>('')\r\nconst vars = computed(() => ({ ...(props.ratio ? { '--oc-lazy-ratio': props.ratio } : {}), ...(props.preview ? { '--oc-lazy-preview': `url(${props.preview})` } : {}) }))\r\n</script>\r\n\r\n<template>\r\n <figure :class=\"['oc-lazy', state]\" :style=\"vars\">\r\n <img :src=\"src\" :alt=\"alt\" :width=\"width\" :height=\"height\" :loading=\"loading\" decoding=\"async\" @load=\"state = 'is-loaded'\" @error=\"state = 'is-error'\">\r\n <figcaption v-if=\"caption || $slots.caption\"><slot name=\"caption\">{{ caption }}</slot></figcaption>\r\n </figure>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcLightbox.vue | Map: props + model -> open at photo -> thumbnails -> <dialog> (bar, track of slides) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Lightbox on a native <dialog> (same markup as snippets/lightbox.html). v-model:open controls it.\r\n * images: { src?, alt, caption?, thumb? }[] (no src = placeholder art). Prev / next are anchor links; with JavaScript\r\n * they scroll without putting #slide in the address, and closing removes a slide hash of this viewer.\r\n * Slot: caption (scoped: { image, index }). Classes: .oc-lightbox(--single), __bar, __title, __close, __track,\r\n * __slide, __media, __nav(--prev/--next), __caption, __counter; .oc-lightbox-thumbs / -thumb.\r\n */\r\nimport { nextTick, ref } from 'vue'\r\nimport { useDialog } from '../composables/useDialog'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = withDefaults(\r\n defineProps<{ images: { src?: string; alt: string; caption?: string; thumb?: string }[]; title?: string; label?: string; thumbnails?: boolean }>(),\r\n { label: 'Photo viewer', thumbnails: true },\r\n)\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst el = ref<HTMLDialogElement | null>(null)\r\nconst { onClose: dialogClose } = useDialog(open, el)\r\nconst onClose = () => {\r\n const slide = location.hash && document.getElementById(decodeURIComponent(location.hash.slice(1)))\r\n if (slide && el.value?.contains(slide)) history.replaceState(history.state, '', location.pathname + location.search)\r\n dialogClose()\r\n}\r\n// Prev / next: scroll to the slide without changing the address (the href still works without JavaScript).\r\nfunction go(event: MouseEvent, i: number) {\r\n const slide = document.getElementById(slideId(i))\r\n if (!slide) return\r\n event.preventDefault()\r\n slide.scrollIntoView?.({ behavior: matchMedia('(prefers-reduced-motion: reduce)').matches ? 'instant' as ScrollBehavior : 'smooth', block: 'nearest', inline: 'center' })\r\n}\r\nconst base = useUid('oc-lightbox')\r\nconst n = () => props.images.length\r\nconst slideId = (i: number) => `${base}-${((i % n()) + n()) % n() + 1}`\r\n\r\n// Open the viewer and jump (without animation) to photo i.\r\nasync function show(i: number) {\r\n open.value = true\r\n await nextTick()\r\n document.getElementById(slideId(i))?.scrollIntoView?.({ behavior: 'instant' as ScrollBehavior, block: 'nearest', inline: 'center' })\r\n}\r\ndefineExpose({ show, close: () => (open.value = false) })\r\n</script>\r\n\r\n<template>\r\n <div v-if=\"thumbnails\" class=\"oc-lightbox-thumbs\">\r\n <button v-for=\"(img, i) in images\" :key=\"i\" type=\"button\" class=\"oc-lightbox-thumb\" :aria-label=\"`Open photo ${i + 1}: ${img.alt}`\" @click=\"show(i)\">\r\n <img v-if=\"img.thumb || img.src\" :src=\"img.thumb || img.src\" :alt=\"img.alt\" />\r\n <span v-else class=\"oc-media-art\" />\r\n </button>\r\n </div>\r\n <dialog ref=\"el\" :class=\"['oc-lightbox', images.length === 1 && 'oc-lightbox--single']\" closedby=\"any\" :aria-label=\"label\" @close=\"onClose\">\r\n <div class=\"oc-lightbox__bar\">\r\n <h2 v-if=\"title\" class=\"oc-lightbox__title\">{{ title }}</h2>\r\n <span v-else />\r\n <button type=\"button\" class=\"oc-lightbox__close\" aria-label=\"Close\" @click=\"open = false\">✕</button>\r\n </div>\r\n <div class=\"oc-lightbox__track\" tabindex=\"0\" aria-label=\"Photos, use the arrow keys\">\r\n <figure v-for=\"(img, i) in images\" :id=\"slideId(i)\" :key=\"i\" class=\"oc-lightbox__slide\">\r\n <div class=\"oc-lightbox__media\">\r\n <img v-if=\"img.src\" :src=\"img.src\" :alt=\"img.alt\" />\r\n <span v-else class=\"oc-media-art\" role=\"img\" :aria-label=\"img.alt\" />\r\n </div>\r\n <template v-if=\"images.length > 1\">\r\n <a class=\"oc-lightbox__nav oc-lightbox__nav--prev\" :href=\"`#${slideId(i - 1)}`\" aria-label=\"Previous photo\" @click=\"go($event, i - 1)\">←</a>\r\n <a class=\"oc-lightbox__nav oc-lightbox__nav--next\" :href=\"`#${slideId(i + 1)}`\" aria-label=\"Next photo\" @click=\"go($event, i + 1)\">→</a>\r\n </template>\r\n <figcaption class=\"oc-lightbox__caption\">\r\n <span v-if=\"images.length > 1\" class=\"oc-lightbox__counter\">{{ i + 1 }} / {{ images.length }}</span>\r\n <slot name=\"caption\" :image=\"img\" :index=\"i\">{{ img.caption ?? img.alt }}</slot>\r\n </figcaption>\r\n </figure>\r\n </div>\r\n </dialog>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcLinkArrow.vue | Map: props (direction, tone, size) -> a.oc-link-arrow -->\r\n<script setup lang=\"ts\">\r\n/** Text link with a moving arrow. Classes: .oc-link-arrow + --back/--external, --accent/--muted, --sm/--lg */\r\nwithDefaults(\r\n defineProps<{\r\n href: string\r\n direction?: 'forward' | 'back' | 'external'\r\n tone?: 'default' | 'accent' | 'muted'\r\n size?: 'sm' | 'default' | 'lg'\r\n }>(),\r\n { direction: 'forward', tone: 'default', size: 'default' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <a\r\n :class=\"[\r\n 'oc-link-arrow',\r\n direction !== 'forward' && `oc-link-arrow--${direction}`,\r\n tone !== 'default' && `oc-link-arrow--${tone}`,\r\n size !== 'default' && `oc-link-arrow--${size}`,\r\n ]\"\r\n :href=\"href\"\r\n ><slot /></a>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcLinkCard.vue | Map: link -> tile (icon) -> title -> text (slot) -> more -->\r\n<script setup lang=\"ts\">\r\n/** A card that is a whole link (snippets/feature-card.html). icon = webicon name; slots: default (text), icon. */\r\ndefineProps<{ title: string; href: string; icon?: string; accent?: string; more?: string }>()\r\n</script>\r\n\r\n<template>\r\n <a :class=\"['oc-link-card', accent && `oc-accent--${accent}`]\" :href=\"href\">\r\n <span v-if=\"icon || $slots.icon\" class=\"oc-icon-tile oc-icon-tile--sm\" aria-hidden=\"true\">\r\n <slot name=\"icon\"><iconify-icon :icon=\"icon\" /></slot>\r\n </span>\r\n <span class=\"oc-link-card__title\">{{ title }}</span>\r\n <span v-if=\"$slots.default\" class=\"oc-link-card__text\"><slot /></span>\r\n <span v-if=\"more\" class=\"oc-link-card__more\">{{ more }}</span>\r\n </a>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcLinkRow.vue | Map: props (links, tone, size) -> ul.oc-link-row -> li > a per link, or the slot -->\r\n<script setup lang=\"ts\">\r\n/** A row of links under a card; external links get an arrow, github.com links the GitHub mark (CSS, by the href).\r\n * Classes: .oc-link-row + --accent/--muted, --sm/--lg */\r\nwithDefaults(\r\n defineProps<{ links?: { href: string; label: string }[]; tone?: 'default' | 'accent' | 'muted'; size?: 'sm' | 'default' | 'lg' }>(),\r\n { tone: 'default', size: 'default' },\r\n)\r\nconst external = (href: string) => /^https?:\\/\\//.test(href)\r\n</script>\r\n\r\n<template>\r\n <ul :class=\"['oc-link-row', tone !== 'default' && `oc-link-row--${tone}`, size !== 'default' && `oc-link-row--${size}`]\">\r\n <template v-if=\"links\">\r\n <li v-for=\"(l, i) in links\" :key=\"i\"><a :href=\"l.href\" :rel=\"external(l.href) ? 'noopener' : undefined\">{{ l.label }}</a></li>\r\n </template>\r\n <slot v-else />\r\n </ul>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcListToolbar.vue | Map: toolbar row -> search slot -> count -> spacer -> view radios (built-in icons) -> actions slot -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Toolbar above a list. v-model:view picks the view (\"cards\", \"table\" or \"list\"); render the matching view yourself.\r\n * Slots: search, actions, view-icon (scoped { view } to replace the built-in icons).\r\n * Classes: .oc-list-toolbar(--sticky/--bordered), -search, -count, -spacer, -views, -view, -actions\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n count?: string\r\n views?: Array<{ value: string; label: string }>\r\n viewsLabel?: string\r\n sticky?: boolean\r\n bordered?: boolean\r\n }>(),\r\n { views: () => [], viewsLabel: 'View' },\r\n)\r\nconst view = defineModel<string>('view', { default: 'cards' })\r\nconst name = useUid('oc-list-view')\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-list-toolbar', sticky && 'oc-list-toolbar--sticky', bordered && 'oc-list-toolbar--bordered']\" role=\"toolbar\">\r\n <div v-if=\"$slots.search\" class=\"oc-list-toolbar-search\"><slot name=\"search\" /></div>\r\n <span v-if=\"count\" class=\"oc-list-toolbar-count\">{{ count }}</span>\r\n <span class=\"oc-list-toolbar-spacer\"></span>\r\n <div v-if=\"views.length\" class=\"oc-list-toolbar-views\" role=\"radiogroup\" :aria-label=\"viewsLabel\">\r\n <label v-for=\"v in views\" :key=\"v.value\" class=\"oc-list-toolbar-view\" :title=\"v.label\">\r\n <input v-model=\"view\" type=\"radio\" :name=\"name\" :value=\"v.value\" :aria-label=\"v.label\" />\r\n <slot name=\"view-icon\" :view=\"v\">\r\n <!-- Built-in webicons for the three common views (mdi:view-grid-outline, mdi:table, mdi:format-list-bulleted). -->\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\r\n <path v-if=\"v.value === 'cards'\" d=\"M3 11h8V3H3m2 2h4v4H5m8 12h8v-8h-8m2 2h4v4h-4M3 21h8v-8H3m2 2h4v4H5m8-16v8h8V3m-2 6h-4V5h4Z\" />\r\n <path v-else-if=\"v.value === 'table'\" d=\"M5 4h14a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2m0 4v4h6V8zm8 0v4h6V8zm-8 6v4h6v-4zm8 0v4h6v-4z\" />\r\n <path v-else d=\"M7 5h14v2H7zm0 8v-2h14v2zM4 4.5A1.5 1.5 0 0 1 5.5 6A1.5 1.5 0 0 1 4 7.5A1.5 1.5 0 0 1 2.5 6A1.5 1.5 0 0 1 4 4.5m0 6A1.5 1.5 0 0 1 5.5 12A1.5 1.5 0 0 1 4 13.5A1.5 1.5 0 0 1 2.5 12A1.5 1.5 0 0 1 4 10.5M7 19v-2h14v2zm-3-2.5A1.5 1.5 0 0 1 5.5 18A1.5 1.5 0 0 1 4 19.5A1.5 1.5 0 0 1 2.5 18A1.5 1.5 0 0 1 4 16.5\" />\r\n </svg>\r\n </slot>\r\n </label>\r\n </div>\r\n <div v-if=\"$slots.actions\" class=\"oc-list-toolbar-actions\"><slot name=\"actions\" /></div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcLiveFrame.vue | Map: props (src, title, width, height, static) -> div.oc-live-frame -> iframe or slot -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * A live page at a virtual size (default 1280x720), scaled down to the frame width in pure CSS. Without src the slot\r\n * goes in (an <img>, <video> or .oc-live-frame__content). Classes: .oc-live-frame, --static, .oc-browser-frame__view\r\n */\r\nwithDefaults(\r\n defineProps<{ src?: string; title?: string; width?: number; height?: number; static?: boolean; inBrowserFrame?: boolean }>(),\r\n { title: '', width: 1280, height: 720, static: false, inBrowserFrame: false },\r\n)\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"[inBrowserFrame && 'oc-browser-frame__view', 'oc-live-frame', static && 'oc-live-frame--static']\"\r\n :style=\"{ '--oc-live-w': width, '--oc-live-h': height }\"\r\n >\r\n <iframe v-if=\"src\" :src=\"src\" :title=\"title\" loading=\"lazy\" scrolling=\"no\" :tabindex=\"static ? -1 : undefined\" />\r\n <slot v-else />\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMarquee.vue | Map: props -> .oc-marquee -> track (items + aria-hidden copy) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Endless strip; pauses on hover / focus, stands still with reduced motion. The items are rendered twice\r\n * (the copy is aria-hidden). Classes: .oc-marquee (--reverse, --slow, --fast, --plain, --no-fade), __track, __item\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n items: string[]\r\n label?: string\r\n reverse?: boolean\r\n speed?: 'default' | 'slow' | 'fast'\r\n plain?: boolean\r\n noFade?: boolean\r\n }>(),\r\n { speed: 'default' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"[\r\n 'oc-marquee',\r\n reverse && 'oc-marquee--reverse',\r\n speed !== 'default' && `oc-marquee--${speed}`,\r\n plain && 'oc-marquee--plain',\r\n noFade && 'oc-marquee--no-fade',\r\n ]\"\r\n :aria-label=\"label\"\r\n >\r\n <div class=\"oc-marquee__track\">\r\n <span v-for=\"(item, i) in items\" :key=\"i\" class=\"oc-marquee__item\">{{ item }}</span>\r\n <span v-for=\"(item, i) in items\" :key=\"'copy-' + i\" class=\"oc-marquee__item\" aria-hidden=\"true\">{{ item }}</span>\r\n </div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMediaThumb.vue | Map: props -> <a>/<div> -> picture -> badge -> duration -> progress -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * 16:9 video thumbnail (same markup as snippets/media-thumb.html). href renders an <a>.\r\n * Props: src, alt, art (placeholder variant 1-6), duration, badge, live, progress (0-100), watched, ratio (video|square|portrait).\r\n * Default slot: extra overlay content. Classes: .oc-media-thumb(--square/--portrait, .is-watched), __badge(--live), __duration, __progress\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n src?: string\r\n alt?: string\r\n art?: number\r\n href?: string\r\n duration?: string\r\n badge?: string\r\n live?: boolean\r\n progress?: number\r\n watched?: boolean\r\n ratio?: 'video' | 'square' | 'portrait'\r\n }>(),\r\n { alt: '', ratio: 'video' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <component\r\n :is=\"href ? 'a' : 'div'\"\r\n :href=\"href\"\r\n :class=\"['oc-media-thumb', ratio !== 'video' && `oc-media-thumb--${ratio}`, watched && 'is-watched']\"\r\n >\r\n <img v-if=\"src\" :src=\"src\" :alt=\"alt\" />\r\n <div v-else :class=\"['oc-media-art', art && art > 1 && `oc-media-art--${art}`]\" />\r\n <span v-if=\"badge\" :class=\"['oc-media-thumb__badge', live && 'oc-media-thumb__badge--live']\">{{ badge }}</span>\r\n <span v-if=\"duration\" class=\"oc-media-thumb__duration\">{{ duration }}</span>\r\n <progress v-if=\"progress != null\" class=\"oc-media-thumb__progress\" :value=\"progress\" max=\"100\" :aria-label=\"`Watched ${progress}%`\">{{ progress }}%</progress>\r\n <slot />\r\n </component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMediaCard.vue | Map: props -> article -> OcMediaThumb -> body (avatar, title + meta, menu) -> popover menu -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Video feed card (same markup as snippets/media-card.html). Props: title, href (title link covers the card), meta,\r\n * avatar (initials), thumb (props for OcMediaThumb), compact. Slots: avatar (replaces initials), meta, menu (dropdown items;\r\n * shows the ⋮ button). Classes: .oc-media-card(--compact), __body, __avatar, __text, __title, __meta, __menu\r\n */\r\nimport OcMediaThumb from './OcMediaThumb.vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineProps<{ title: string; href: string; meta?: string; avatar?: string; thumb?: Record<string, unknown>; compact?: boolean }>()\r\nconst menuId = useUid('oc-media-card-menu')\r\n</script>\r\n\r\n<template>\r\n <article :class=\"['oc-media-card', compact && 'oc-media-card--compact']\">\r\n <OcMediaThumb v-bind=\"thumb\" />\r\n <div class=\"oc-media-card__body\">\r\n <span v-if=\"avatar || $slots.avatar\" class=\"oc-media-card__avatar\" aria-hidden=\"true\"><slot name=\"avatar\">{{ avatar }}</slot></span>\r\n <div class=\"oc-media-card__text\">\r\n <h3 class=\"oc-media-card__title\"><a :href=\"href\">{{ title }}</a></h3>\r\n <p v-if=\"meta || $slots.meta\" class=\"oc-media-card__meta\"><slot name=\"meta\">{{ meta }}</slot></p>\r\n </div>\r\n <button v-if=\"$slots.menu\" type=\"button\" class=\"oc-media-card__menu\" :popovertarget=\"menuId\" aria-label=\"More actions\">⋮</button>\r\n </div>\r\n <div v-if=\"$slots.menu\" :id=\"menuId\" class=\"oc-dropdown-menu\" popover><slot name=\"menu\" /></div>\r\n </article>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMediaRow.vue | Map: props -> li row -> OcMediaThumb -> title link + meta -> menu button + popover -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Compact media row (same markup as snippets/media-row.html). Put rows in\r\n * <ul class=\"oc-media-row-list\"> or <ol class=\"oc-media-row-list oc-media-row-list--numbered\"> (numbered playlist).\r\n * Props: title, href (link covers the row), meta, thumb (props for OcMediaThumb), current (aria-current).\r\n * Slots: meta, menu (dropdown items; shows the ⋮ button). Classes: .oc-media-row, __text, __title, __meta, __menu\r\n */\r\nimport OcMediaThumb from './OcMediaThumb.vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineProps<{ title: string; href: string; meta?: string; thumb?: Record<string, unknown>; current?: boolean }>()\r\nconst menuId = useUid('oc-media-row-menu')\r\n</script>\r\n\r\n<template>\r\n <li class=\"oc-media-row\" :aria-current=\"current ? 'true' : undefined\">\r\n <OcMediaThumb v-bind=\"thumb\" />\r\n <div class=\"oc-media-row__text\">\r\n <h3 class=\"oc-media-row__title\"><a :href=\"href\">{{ title }}</a></h3>\r\n <p v-if=\"meta || $slots.meta\" class=\"oc-media-row__meta\"><slot name=\"meta\">{{ meta }}</slot></p>\r\n </div>\r\n <template v-if=\"$slots.menu\">\r\n <button type=\"button\" class=\"oc-media-row__menu\" :popovertarget=\"menuId\" aria-label=\"More actions\">⋮</button>\r\n <div :id=\"menuId\" class=\"oc-dropdown-menu\" popover><slot name=\"menu\" /></div>\r\n </template>\r\n </li>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMenuStatic.vue | Map: div.oc-dropdown-menu--static -> items (slot) -->\r\n<script setup lang=\"ts\">\r\n/** The dropdown menu as a surface of its own (a tray menu). Items: OcDropdownItem (checked, hint), OcDropdownLabel. */\r\ndefineProps<{ flat?: boolean }>()\r\n</script>\r\n\r\n<template>\r\n <div role=\"menu\" :class=\"['oc-dropdown-menu', 'oc-dropdown-menu--static', flat && 'oc-dropdown-menu--flat']\"><slot /></div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMessage.vue | Map: types + icons -> props -> article (avatar, bubble: sender, quote, text, attachments, meta; actions) -->\r\n<script lang=\"ts\">\r\nimport type { AttachmentFile } from './OcAttachment.vue'\r\n\r\n/** File chip (default), image preview or square thumbnail inside a message. */\r\nexport type MessageAttachment =\r\n | (AttachmentFile & { kind?: 'file' })\r\n | { kind: 'image'; href?: string; src?: string; alt: string; art?: number; caption?: string }\r\n | { kind: 'thumb'; src?: string; alt: string; art?: number }\r\nexport interface MessageAction { name: string; label: string; icon?: 'reply' | 'delete'; destructive?: boolean }\r\nexport interface MessageData {\r\n direction?: 'in' | 'out'\r\n sender?: string\r\n avatar?: string\r\n time?: string\r\n datetime?: string\r\n status?: 'sent' | 'read' | 'failed'\r\n statusLabel?: string\r\n statusIcon?: boolean\r\n continued?: boolean\r\n quote?: { href?: string; sender: string; text: string }\r\n /** Plain text: one paragraph. */\r\n text?: string\r\n /** Trusted markup (p, ul, ol, a, strong, code); escape user text on the server. */\r\n html?: string\r\n attachments?: MessageAttachment[]\r\n actions?: MessageAction[]\r\n label?: string\r\n id?: string\r\n}\r\nexport const MESSAGE_ICONS: Record<string, string> = {\r\n reply: 'M8 9.8v.9l1.7.3c2.6.4 4.5 1.4 5.9 2.7c-1.7-.5-3.5-.8-5.6-.8H8v1.3L5.8 12zM10 5l-7 7l7 7v-4.1c5 0 8.5 1.6 11 5.1c-1-5-4-10-11-11',\r\n delete: 'M9 3v1H4v2h1v13a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6h1V4h-5V3zM7 6h10v13H7zm2 2v9h2V8zm4 0v9h2V8z',\r\n}\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\n/**\r\n * Chat bubble (same markup as snippets/message.html): incoming / outgoing, sender, avatar, time, read receipt, reply quote,\r\n * attachments and hover actions. Slot default = extra text content. Emits: action(name).\r\n * Classes: .oc-message(--out/--continued) __avatar __bubble __sender __quote __text __attachments __meta __status(--read/--failed) __actions __action\r\n */\r\nimport { computed } from 'vue'\r\nimport OcAttachment from './OcAttachment.vue'\r\nimport OcAttachmentImage from './OcAttachmentImage.vue'\r\nimport OcAttachmentThumb from './OcAttachmentThumb.vue'\r\n\r\nconst props = withDefaults(defineProps<MessageData>(), { direction: 'in' })\r\nconst emit = defineEmits<{ action: [name: string] }>()\r\nconst STATUS = { sent: 'Sent', read: 'Read', failed: 'Failed' }\r\nconst thumbsOnly = computed(() => !!props.attachments?.length && props.attachments.every((a) => a.kind === 'thumb'))\r\n// Props of one attachment without its `kind`.\r\ntype ImageAttachment = Extract<MessageAttachment, { kind: 'image' }>\r\ntype ThumbAttachment = Extract<MessageAttachment, { kind: 'thumb' }>\r\nconst strip = (a: MessageAttachment) => {\r\n const { kind: _k, ...p } = a\r\n return p\r\n}\r\nconst image = (a: MessageAttachment) => strip(a) as Omit<ImageAttachment, 'kind'>\r\nconst thumb = (a: MessageAttachment) => strip(a) as Omit<ThumbAttachment, 'kind'>\r\nconst file = (a: MessageAttachment) => strip(a) as AttachmentFile\r\n</script>\r\n\r\n<template>\r\n <article :id=\"id\" :class=\"['oc-message', direction === 'out' && 'oc-message--out', continued && 'oc-message--continued']\" :aria-label=\"label\">\r\n <span class=\"oc-avatar oc-message__avatar\">{{ avatar }}</span>\r\n <div class=\"oc-message__bubble\">\r\n <p v-if=\"sender && !continued\" class=\"oc-message__sender\">{{ sender }}</p>\r\n <a v-if=\"quote\" class=\"oc-message__quote\" :href=\"quote.href\"><strong>{{ quote.sender }}</strong><span>{{ quote.text }}</span></a>\r\n <div v-if=\"html\" class=\"oc-message__text\" v-html=\"html\"></div>\r\n <div v-else-if=\"text || $slots.default\" class=\"oc-message__text\"><p v-if=\"text\">{{ text }}</p><slot /></div>\r\n <div v-if=\"attachments?.length\" class=\"oc-message__attachments\">\r\n <div v-if=\"thumbsOnly\" class=\"oc-attachment-list\"><OcAttachmentThumb v-for=\"(a, i) in attachments\" :key=\"i\" v-bind=\"thumb(a)\" as=\"span\" /></div>\r\n <template v-for=\"(a, i) in attachments\" v-else :key=\"i\">\r\n <OcAttachmentImage v-if=\"a.kind === 'image'\" v-bind=\"image(a)\" />\r\n <OcAttachmentThumb v-else-if=\"a.kind === 'thumb'\" v-bind=\"thumb(a)\" as=\"span\" />\r\n <OcAttachment v-else v-bind=\"file(a)\" />\r\n </template>\r\n </div>\r\n <p v-if=\"time || status\" class=\"oc-message__meta\">\r\n <time v-if=\"time\" :datetime=\"datetime\">{{ time }}</time>\r\n <span v-if=\"status\" :class=\"['oc-message__status', status !== 'sent' && `oc-message__status--${status}`]\"><svg data-icon=\"mdi:check-all\" v-if=\"statusIcon\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M.41 13.41L6 19l1.41-1.42L1.83 12m20.41-6.42L11.66 16.17L7.5 12l-1.43 1.41L11.66 19l12-12M18 7l-1.41-1.42l-6.35 6.35l1.42 1.41z\"/></svg>{{ statusLabel ?? STATUS[status] }}</span>\r\n </p>\r\n </div>\r\n <div v-if=\"actions?.length\" class=\"oc-message__actions\">\r\n <button v-for=\"a in actions\" :key=\"a.name\" type=\"button\" :class=\"['oc-message__action', a.destructive && 'oc-message__action--destructive']\" :aria-label=\"a.label\" @click=\"emit('action', a.name)\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path :d=\"MESSAGE_ICONS[a.icon ?? a.name] ?? MESSAGE_ICONS.reply\" /></svg>\r\n </button>\r\n </div>\r\n </article>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMessageList.vue | Map: props + demo conversation -> .oc-message-list -> dividers and OcMessage rows -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Column of messages and dividers (snippets/message.html). items: (MessageData | { divider, system? })[]; demo conversation\r\n * when empty; slot default replaces them. log = role=\"log\" (default true). Emits: action(name, message, index).\r\n * Classes: .oc-message-list, .oc-message-divider(--system)\r\n */\r\nimport OcMessage, { type MessageData } from './OcMessage.vue'\r\n\r\nexport type MessageListItem = MessageData | { divider: string; system?: boolean }\r\nwithDefaults(defineProps<{ items?: MessageListItem[]; log?: boolean; label?: string }>(), {\r\n log: true,\r\n label: 'Conversation with Customer 1',\r\n items: () => [\r\n { divider: 'Tuesday 14 October' },\r\n { sender: 'Customer 1', avatar: 'C1', time: '09:12', datetime: '2026-10-14T09:12', label: 'Customer 1, 09:12', text: 'Morning Tom! The worktop supplier sent two samples for Project 1.' },\r\n {\r\n sender: 'Customer 1', avatar: 'C1', time: '09:13', datetime: '2026-10-14T09:13', label: 'Customer 1, 09:13', continued: true, id: 'oc-message-demo-question',\r\n html: '<p>Which finish should we order?</p><ul><li><strong>Calacatta</strong> matt, 20 mm</li><li><strong>Nero Marquina</strong> polished, 12 mm</li></ul><p>Details are on the <a href=\"#supplier-sheet\">supplier sheet</a>.</p>',\r\n },\r\n {\r\n direction: 'out', avatar: 'C6', time: '09:20', datetime: '2026-10-14T09:20', label: 'You, 09:20', status: 'read', statusIcon: true,\r\n quote: { href: '#oc-message-demo-question', sender: 'Customer 1', text: 'Which finish should we order? Calacatta matt, 20 mm or Nero Marquina polished, 12 mm' },\r\n text: 'Calacatta matt. The client wants the lighter look next to the oak fronts.',\r\n actions: [{ name: 'reply', label: 'Reply to this message' }, { name: 'delete', label: 'Delete this message', destructive: true }],\r\n },\r\n { divider: 'Customer 1 marked this question as answered', system: true },\r\n ],\r\n})\r\nconst emit = defineEmits<{ action: [name: string, message: MessageData, index: number] }>()\r\nconst isDivider = (item: MessageListItem): item is { divider: string; system?: boolean } => 'divider' in item\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-message-list\" :role=\"log ? 'log' : undefined\" :aria-label=\"log ? label : undefined\">\r\n <slot>\r\n <template v-for=\"(item, i) in items\" :key=\"i\">\r\n <div v-if=\"isDivider(item)\" :class=\"['oc-message-divider', item.system && 'oc-message-divider--system']\" :role=\"item.system ? 'note' : undefined\"><span>{{ item.divider }}</span></div>\r\n <OcMessage v-else v-bind=\"item\" @action=\"(name: string) => emit('action', name, item as MessageData, i)\" />\r\n </template>\r\n </slot>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMessageThread.vue | Map: props + demo -> state (messages, sending) -> header (back slot, heading, people, badge, menu)\r\n -> scroll (OcMessageList) -> footer (composer slot / form / note) -> busy overlay -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Scrolling conversation (same markup as snippets/message-thread.html). Like the snippet script, a sent text is appended as an\r\n * outgoing bubble after the @send handler (prop onSend, may return a Promise) resolves; aria-busy shows the overlay meanwhile.\r\n * Ctrl/Cmd + Enter sends. `manual` = you append messages yourself. Emits: menu(name), tool(name).\r\n * Slots: back (start of the header), composer (replaces the form). Classes: .oc-message-thread(--plain) __header __heading __title\r\n * __meta __people __actions __icon-btn __scroll __footer __note __busy\r\n */\r\nimport { ref, watch } from 'vue'\r\nimport OcMessageList, { type MessageListItem } from './OcMessageList.vue'\r\nimport type { MessageData } from './OcMessage.vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface ThreadParticipant { initials: string; name?: string }\r\nexport type ThreadMenuItem = { name: string; label: string; destructive?: boolean } | { separator: true }\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n title?: string\r\n project?: string\r\n meta?: string\r\n participants?: ThreadParticipant[]\r\n status?: { label: string; variant?: string } | null\r\n menu?: ThreadMenuItem[] | null\r\n messages?: MessageListItem[]\r\n scrollLabel?: string\r\n live?: boolean\r\n busy?: boolean\r\n /** Overlay title; empty string leaves the overlay out. */\r\n busyTitle?: string\r\n busyText?: string\r\n note?: string\r\n placeholder?: string\r\n composerLabel?: string\r\n inline?: boolean\r\n tools?: Array<'attach' | 'emoji'>\r\n hint?: string\r\n manual?: boolean\r\n me?: string\r\n plain?: boolean\r\n id?: string\r\n onSend?: (text: string) => void | Promise<void>\r\n }>(),\r\n {\r\n title: 'Kitchen worktop: which finish?',\r\n project: 'Project 1',\r\n meta: 'Customer 1 → Customer 6 · 14 Oct 2026',\r\n participants: () => [{ initials: 'C1', name: 'Customer 1' }, { initials: 'C6', name: 'Customer 6' }],\r\n status: () => ({ label: 'Urgent', variant: 'destructive' }),\r\n menu: () => [{ name: 'unread', label: 'Mark as unread' }, { name: 'archive', label: 'Move to archive' }, { separator: true }, { name: 'delete', label: 'Delete conversation', destructive: true }],\r\n messages: () => [\r\n { divider: 'Tuesday 14 October' },\r\n { sender: 'Customer 1', avatar: 'C1', time: '09:12', datetime: '2026-10-14T09:12', text: 'The supplier dropped off two worktop samples at the workshop. Photo attached.',\r\n attachments: [{ kind: 'image', href: '#samples.jpg', alt: 'Two worktop samples on the workbench', art: 6, caption: 'samples.jpg · 2.1 MB' }] },\r\n { sender: 'Customer 1', avatar: 'C1', time: '09:13', datetime: '2026-10-14T09:13', continued: true,\r\n html: '<p>Which one should we order: <strong>Calacatta matt</strong> or <strong>Nero Marquina polished</strong>? The cutting slot is Friday.</p>' },\r\n { direction: 'out', avatar: 'C6', time: '09:20', datetime: '2026-10-14T09:20', status: 'read', text: 'Calacatta matt, 20 mm. I\\'ll send the updated quote to the client today.',\r\n attachments: [{ name: 'Quote kitchen Project 1 v2.pdf', size: '1.2 MB', href: '#quote.pdf' }], actions: [{ name: 'delete', label: 'Delete this message', destructive: true }] },\r\n { divider: 'Today' },\r\n { sender: 'Customer 1', avatar: 'C1', time: '10:02', datetime: '2026-10-24T10:02', text: 'Client signed. Can you confirm the edge profile before 16:00?' },\r\n ],\r\n scrollLabel: 'Messages',\r\n live: true,\r\n busyTitle: 'Sending message…',\r\n busyText: 'Please wait, do not close this conversation.',\r\n placeholder: 'Type your reply…',\r\n composerLabel: 'Reply',\r\n tools: () => ['attach', 'emoji'],\r\n hint: 'Ctrl + Enter to send',\r\n },\r\n)\r\nconst emit = defineEmits<{ menu: [name: string]; tool: [name: 'attach' | 'emoji'] }>()\r\nconst auto = useUid('oc-thread')\r\nconst base = props.id ?? auto\r\nconst list = ref<MessageListItem[]>([...props.messages])\r\nconst sending = ref(false)\r\nwatch(() => props.messages, (m) => (list.value = [...m]))\r\nconst isOut = (m?: MessageListItem): m is MessageData => !!m && !('divider' in m) && m.direction === 'out'\r\n\r\nasync function send(e: Event) {\r\n const form = e.target as HTMLFormElement\r\n const field = form.elements.namedItem('message') as HTMLTextAreaElement\r\n const text = field.value.trim()\r\n if (!text) return\r\n sending.value = true\r\n try { await props.onSend?.(text) } catch { sending.value = false; return }\r\n if (!props.manual) {\r\n const l = list.value\r\n const mine = props.me ?? [...l].reverse().find(isOut)?.avatar ?? 'Me'\r\n list.value = [...l, { direction: 'out', avatar: mine, continued: isOut(l[l.length - 1]), text, time: new Date().toTimeString().slice(0, 5), status: 'sent' }]\r\n }\r\n field.value = ''\r\n sending.value = false\r\n field.focus()\r\n}\r\nfunction ctrlEnter(e: KeyboardEvent) {\r\n if (e.key !== 'Enter' || !(e.ctrlKey || e.metaKey)) return\r\n e.preventDefault()\r\n ;(e.currentTarget as HTMLFormElement).requestSubmit()\r\n}\r\n</script>\r\n\r\n<template>\r\n <section :class=\"['oc-message-thread', plain && 'oc-message-thread--plain']\" :aria-labelledby=\"`${base}-title`\" :aria-busy=\"busy || sending ? 'true' : undefined\">\r\n <header class=\"oc-message-thread__header\">\r\n <slot name=\"back\" />\r\n <div class=\"oc-message-thread__heading\">\r\n <h3 :id=\"`${base}-title`\" class=\"oc-message-thread__title\">{{ title }}</h3>\r\n <p v-if=\"project || meta\" class=\"oc-message-thread__meta\"><strong v-if=\"project\">{{ project }}</strong><template v-if=\"project && meta\"> · </template>{{ meta }}</p>\r\n </div>\r\n <div v-if=\"participants.length\" class=\"oc-avatar-group oc-message-thread__people\" :aria-label=\"`${participants.length} participants`\">\r\n <span v-for=\"(p, i) in participants\" :key=\"i\" class=\"oc-avatar\" :title=\"p.name\">{{ p.initials }}</span>\r\n </div>\r\n <div v-if=\"status || menu\" class=\"oc-message-thread__actions\">\r\n <span v-if=\"status\" :class=\"['oc-badge', status.variant && `oc-badge--${status.variant}`]\">{{ status.label }}</span>\r\n <template v-if=\"menu\">\r\n <button type=\"button\" class=\"oc-message-thread__icon-btn\" :popovertarget=\"`${base}-menu`\" aria-label=\"Conversation actions\"><svg data-icon=\"mdi:dots-vertical\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M12 16a2 2 0 0 1 2 2a2 2 0 0 1-2 2a2 2 0 0 1-2-2a2 2 0 0 1 2-2m0-6a2 2 0 0 1 2 2a2 2 0 0 1-2 2a2 2 0 0 1-2-2a2 2 0 0 1 2-2m0-6a2 2 0 0 1 2 2a2 2 0 0 1-2 2a2 2 0 0 1-2-2a2 2 0 0 1 2-2\"/></svg></button>\r\n <div :id=\"`${base}-menu`\" class=\"oc-dropdown-menu\" popover role=\"menu\">\r\n <template v-for=\"(m, i) in menu\" :key=\"i\">\r\n <div v-if=\"'separator' in m\" class=\"oc-dropdown-separator\" role=\"separator\"></div>\r\n <button v-else type=\"button\" :class=\"['oc-dropdown-item', m.destructive && 'oc-dropdown-item--destructive']\" role=\"menuitem\" @click=\"emit('menu', m.name)\">{{ m.label }}</button>\r\n </template>\r\n </div>\r\n </template>\r\n </div>\r\n </header>\r\n <div class=\"oc-message-thread__scroll\" tabindex=\"0\" role=\"log\" :aria-label=\"scrollLabel\" :aria-live=\"live ? 'polite' : undefined\">\r\n <OcMessageList :items=\"list\" :log=\"false\" />\r\n </div>\r\n <div class=\"oc-message-thread__footer\">\r\n <p v-if=\"note\" class=\"oc-message-thread__note\">{{ note }}</p>\r\n <slot v-else name=\"composer\">\r\n <form :class=\"['oc-chat-composer', inline && 'oc-chat-composer--inline']\" action=\"#\" :aria-label=\"composerLabel\" @submit.prevent=\"send\" @keydown=\"ctrlEnter\">\r\n <label class=\"oc-visually-hidden\" :for=\"`${base}-input`\">Message</label>\r\n <textarea :id=\"`${base}-input`\" class=\"oc-chat-composer__input\" name=\"message\" rows=\"1\" :placeholder=\"placeholder\" required></textarea>\r\n <div class=\"oc-chat-composer__bar\">\r\n <div v-if=\"tools.length\" class=\"oc-chat-composer__tools\">\r\n <button v-if=\"tools.includes('attach')\" type=\"button\" class=\"oc-chat-composer__tool\" aria-label=\"Attach a file\" @click=\"emit('tool', 'attach')\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M16.5 6v11.5a4 4 0 0 1-4 4a4 4 0 0 1-4-4V5a2.5 2.5 0 0 1 2.5-2.5A2.5 2.5 0 0 1 13.5 5v10.5a1 1 0 0 1-1 1a1 1 0 0 1-1-1V6H10v9.5a2.5 2.5 0 0 0 2.5 2.5a2.5 2.5 0 0 0 2.5-2.5V5a4 4 0 0 0-4-4a4 4 0 0 0-4 4v12.5a5.5 5.5 0 0 0 5.5 5.5a5.5 5.5 0 0 0 5.5-5.5V6z\"/></svg></button>\r\n <button v-if=\"tools.includes('emoji')\" type=\"button\" class=\"oc-chat-composer__tool\" aria-label=\"Insert emoji\" @click=\"emit('tool', 'emoji')\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M20 12a8 8 0 0 0-8-8a8 8 0 0 0-8 8a8 8 0 0 0 8 8a8 8 0 0 0 8-8m2 0a10 10 0 0 1-10 10A10 10 0 0 1 2 12A10 10 0 0 1 12 2a10 10 0 0 1 10 10m-12-3.5c0 .8-.7 1.5-1.5 1.5S7 9.3 7 8.5S7.7 7 8.5 7s1.5.7 1.5 1.5m7 0c0 .8-.7 1.5-1.5 1.5S14 9.3 14 8.5S14.7 7 15.5 7s1.5.7 1.5 1.5m-5 9.73c-1.75 0-3.29-.73-4.19-1.81L9.23 14c.45.72 1.52 1.23 2.77 1.23s2.32-.51 2.77-1.23l1.42 1.42c-.9 1.08-2.44 1.81-4.19 1.81\"/></svg></button>\r\n </div>\r\n <span v-if=\"hint\" class=\"oc-chat-composer__hint\">{{ hint }}</span>\r\n <button type=\"submit\" class=\"oc-chat-composer__send\" aria-label=\"Send\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M2 21l21-9L2 3v7l15 2l-15 2z\"/></svg></button>\r\n </div>\r\n </form>\r\n </slot>\r\n </div>\r\n <div v-if=\"busyTitle\" class=\"oc-message-thread__busy\" role=\"status\">\r\n <span class=\"oc-spinner oc-spinner--lg\" aria-hidden=\"true\"></span>\r\n <strong>{{ busyTitle }}</strong>\r\n <span v-if=\"busyText\">{{ busyText }}</span>\r\n </div>\r\n </section>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcMeterRow.vue | Map: props -> level from the percentage -> row markup -->\r\n<script setup lang=\"ts\">\r\n/** Usage line: label, percentage and amount, a colored bar (warn from 75, critical from 90), a sub-line (sub, subPercent) and the reset line. */\r\nimport { computed } from 'vue'\r\n\r\nconst props = defineProps<{ label: string; percent: number; value?: string; reset?: string; level?: 'ok' | 'warn' | 'critical'; sub?: string; subPercent?: number; subLevel?: 'warn' | 'critical' }>()\r\nconst pct = computed(() => Math.max(0, Math.min(100, Math.round(props.percent))))\r\nconst tone = computed(() => props.level ?? (pct.value >= 90 ? 'critical' : pct.value >= 75 ? 'warn' : 'ok'))\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-meter-row\" :data-level=\"tone === 'ok' ? undefined : tone\" :style=\"{ '--oc-meter': `${pct}%` }\">\r\n <span class=\"oc-meter-row__label\">{{ label }}</span>\r\n <span class=\"oc-meter-row__value\"><strong>{{ pct }}%</strong><template v-if=\"value\"> · {{ value }}</template></span>\r\n <span class=\"oc-meter-row__bar\" role=\"meter\" aria-valuemin=\"0\" aria-valuemax=\"100\" :aria-valuenow=\"pct\" :aria-label=\"label\"></span>\r\n <span v-if=\"sub\" class=\"oc-meter-row__sub\">{{ sub }}<span v-if=\"subPercent != null\" class=\"oc-meter-row__subbar\" :data-level=\"subLevel\" :style=\"{ '--oc-meter': `${Math.max(0, Math.min(100, subPercent))}%` }\"></span></span>\r\n <span v-if=\"reset\" class=\"oc-meter-row__reset\">{{ reset }}</span>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Modal on a native <dialog> opened with showModal(). v-model:open controls it; Esc / backdrop /\r\n * close() update the model. Slots: header (replaces title + description), default (body),\r\n * footer (scoped: { close }). Classes: .oc-modal, .oc-modal-content(--sm/--lg/--xl/--full), -header, -title,\r\n * -description, -body, -footer.\r\n */\r\nimport { ref } from 'vue'\r\nimport { useDialog } from '../composables/useDialog'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n title?: string\r\n description?: string\r\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full'\r\n closedby?: 'any' | 'closerequest' | 'none'\r\n }>(),\r\n { size: 'md', closedby: 'any' },\r\n)\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst el = ref<HTMLDialogElement | null>(null)\r\nconst { onClose } = useDialog(open, el)\r\nconst titleId = useUid('oc-modal-title')\r\nconst close = () => (open.value = false)\r\ndefineExpose({ close })\r\n</script>\r\n\r\n<template>\r\n <dialog ref=\"el\" class=\"oc-modal\" :closedby=\"closedby\" :aria-labelledby=\"title ? titleId : undefined\" @close=\"onClose\">\r\n <div :class=\"['oc-modal-content', size !== 'md' && `oc-modal-content--${size}`]\">\r\n <div v-if=\"title || description || $slots.header\" class=\"oc-modal-header\">\r\n <slot name=\"header\">\r\n <h2 v-if=\"title\" :id=\"titleId\" class=\"oc-modal-title\">{{ title }}</h2>\r\n <p v-if=\"description\" class=\"oc-modal-description\">{{ description }}</p>\r\n </slot>\r\n </div>\r\n <div v-if=\"$slots.default\" class=\"oc-modal-body\"><slot /></div>\r\n <div v-if=\"$slots.footer\" class=\"oc-modal-footer\"><slot name=\"footer\" :close=\"close\" /></div>\r\n </div>\r\n </dialog>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcNameCard.vue | Map: props -> details (head, body slot) -> rename event on mount -->\r\n<script setup lang=\"ts\">\r\n/** Name card: name, rename pencil (when renamable), meta, amount and an actions slot; default slot = content. Emits rename. */\r\nimport { onMounted, useTemplateRef } from 'vue'\r\nimport { bindNameCard } from '../../../ui/src/form-extras.js'\r\n\r\nconst props = withDefaults(defineProps<{ name: string; amount?: string; meta?: string; renamable?: boolean; total?: boolean; open?: boolean }>(), { renamable: false, total: false, open: false })\r\nconst emit = defineEmits<{ rename: [name: string] }>()\r\nconst root = useTemplateRef<HTMLDetailsElement>('root')\r\nonMounted(() => {\r\n if (!root.value || !props.renamable) return\r\n bindNameCard(root.value)\r\n root.value.addEventListener('oc-namecard-rename', (e) => emit('rename', (e as CustomEvent<{ name: string }>).detail.name))\r\n})\r\n</script>\r\n\r\n<template>\r\n <details ref=\"root\" :class=\"['oc-name-card', total && 'oc-name-card--total']\" :open=\"open\">\r\n <summary class=\"oc-name-card__head\">\r\n <span class=\"oc-name-card__title\">{{ name }}</span>\r\n <button v-if=\"renamable\" type=\"button\" class=\"oc-btn oc-btn--plain\" data-oc-rename :aria-label=\"`Rename ${name}`\" title=\"Rename\"><svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"m14.06 9l.94.94L5.92 19H5v-.92zm3.6-6c-.25 0-.51.1-.7.29l-1.83 1.83l3.75 3.75l1.83-1.83c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29m-3.6 3.19L3 17.25V21h3.75L17.81 9.94z\" /></svg></button>\r\n <span v-if=\"meta\" class=\"oc-name-card__meta\">{{ meta }}</span>\r\n <span v-if=\"amount\" class=\"oc-name-card__amount\">{{ amount }}</span>\r\n <span v-if=\"$slots.actions\" class=\"oc-name-card__actions\"><slot name=\"actions\" /></span>\r\n </summary>\r\n <div class=\"oc-name-card__body\"><slot /></div>\r\n </details>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * The <ul class=\"oc-navmenu\"> of the navigation menu, without the surrounding <nav>\r\n * (used by OcNavmenu and by blocks that provide their own <nav>).\r\n * Pass `items`, or put your own <li> elements in the default slot.\r\n * Classes: .oc-navmenu, .oc-navmenu-link(--caret) with aria-current=\"page\"\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface NavmenuItem {\r\n label: string\r\n href?: string\r\n current?: boolean\r\n /** Dropdown entries; turns the item into a popover trigger. */\r\n children?: { label: string; href: string }[]\r\n /** Heading inside the dropdown. */\r\n heading?: string\r\n}\r\nwithDefaults(defineProps<{ items?: NavmenuItem[] }>(), { items: () => [] })\r\nconst base = useUid('oc-navmenu')\r\n</script>\r\n\r\n<template>\r\n <ul class=\"oc-navmenu\">\r\n <slot>\r\n <li v-for=\"(item, i) in items\" :key=\"i\">\r\n <template v-if=\"item.children?.length\">\r\n <button class=\"oc-navmenu-link oc-navmenu-link--caret\" type=\"button\" :popovertarget=\"`${base}-${i}`\">{{ item.label }}</button>\r\n <div :id=\"`${base}-${i}`\" class=\"oc-dropdown-menu\" popover>\r\n <div v-if=\"item.heading\" class=\"oc-dropdown-label\">{{ item.heading }}</div>\r\n <a v-for=\"child in item.children\" :key=\"child.href + child.label\" class=\"oc-dropdown-item\" :href=\"child.href\">{{ child.label }}</a>\r\n </div>\r\n </template>\r\n <a v-else class=\"oc-navmenu-link\" :href=\"item.href ?? '#'\" :aria-current=\"item.current ? 'page' : undefined\">{{ item.label }}</a>\r\n </li>\r\n </slot>\r\n </ul>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Horizontal navigation links with optional dropdown children, wrapped in a <nav>.\r\n * Pass `items` (see OcNavmenuList) or put your own <li> elements in the default slot.\r\n */\r\nimport OcNavmenuList, { type NavmenuItem } from './OcNavmenuList.vue'\r\n\r\nwithDefaults(defineProps<{ items?: NavmenuItem[]; label?: string }>(), {\r\n items: () => [],\r\n label: 'Navigation',\r\n})\r\n</script>\r\n\r\n<template>\r\n <nav :aria-label=\"label\">\r\n <OcNavmenuList :items=\"items\"><slot /></OcNavmenuList>\r\n </nav>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcNextTeaser.vue | Map: props -> a.oc-next-teaser -> label -> name (mark slot) -> tagline -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * \"Next product\" teaser card. Slots: mark (e.g. an OcProductMark size=\"sm\"), name, tagline.\r\n * Classes: .oc-next-teaser (--prev), __label, __name, __tagline\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n href: string\r\n label?: string\r\n name?: string\r\n tagline?: string\r\n prev?: boolean\r\n }>(),\r\n { label: 'Next product' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <a :class=\"['oc-next-teaser', prev && 'oc-next-teaser--prev']\" :href=\"href\">\r\n <span v-if=\"label\" class=\"oc-next-teaser__label\">{{ label }}</span>\r\n <span class=\"oc-next-teaser__name\"><slot name=\"mark\" /><slot name=\"name\">{{ name }}</slot></span>\r\n <span v-if=\"tagline || $slots.tagline\" class=\"oc-next-teaser__tagline\"><slot name=\"tagline\">{{ tagline }}</slot></span>\r\n </a>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcNumberInput.vue | Map: props + model -> step helper -> template (minus, number field, plus) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Number field with - / + buttons. v-model: number | null. Buttons disable themselves at min / max.\r\n * Same markup as packages/ui/snippets/number-input.html (no page script needed here).\r\n * class/style stay on the frame, other attributes (id, name, aria-label) go to the input.\r\n */\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nconst props = withDefaults(\r\n defineProps<{ min?: number; max?: number; step?: number; size?: 'sm' | 'md'; block?: boolean; error?: boolean; disabled?: boolean; decrementLabel?: string; incrementLabel?: string }>(),\r\n { step: 1, size: 'md', decrementLabel: 'Decrease', incrementLabel: 'Increase' },\r\n)\r\nconst model = defineModel<number | null>({ default: null })\r\nconst { root, control } = useAttrsSplit()\r\n\r\n/** Add one step, keep the result inside min/max and drop float noise (0.1 + 0.2). */\r\nfunction stepBy(dir: 1 | -1) {\r\n const next = Math.round(((model.value ?? props.min ?? 0) + dir * props.step) * 1e6) / 1e6\r\n model.value = Math.min(props.max ?? Infinity, Math.max(props.min ?? -Infinity, next))\r\n}\r\n\r\nfunction onInput(e: Event) {\r\n const raw = (e.target as HTMLInputElement).value\r\n model.value = raw === '' ? null : Number(raw)\r\n}\r\n</script>\r\n\r\n<template>\r\n <div v-bind=\"root\" :class=\"['oc-number-input', size === 'sm' && 'oc-number-input--sm', block && 'oc-number-input--block', error && 'oc-number-input--error']\">\r\n <button class=\"oc-number-input-step\" type=\"button\" :aria-label=\"decrementLabel\" :disabled=\"disabled || (min != null && model != null && model <= min)\" @click=\"stepBy(-1)\">−</button>\r\n <input\r\n v-bind=\"control\"\r\n class=\"oc-number-input-field\"\r\n type=\"number\"\r\n :min=\"min\"\r\n :max=\"max\"\r\n :step=\"step\"\r\n :disabled=\"disabled\"\r\n :aria-invalid=\"error ? 'true' : undefined\"\r\n :value=\"model ?? ''\"\r\n @input=\"onInput\"\r\n />\r\n <button class=\"oc-number-input-step\" type=\"button\" :aria-label=\"incrementLabel\" :disabled=\"disabled || (max != null && model != null && model >= max)\" @click=\"stepBy(1)\">+</button>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * One-time code field drawn as separate cells on a single real input.\r\n * v-model: the code string. `length` sets maxlength and --oc-otp-length. `invalid` sets aria-invalid.\r\n * Emits `complete` with the code when it reaches `length`.\r\n */\r\nimport { computed, watch } from 'vue'\r\n\r\nconst props = withDefaults(defineProps<{ length?: number; invalid?: boolean; numeric?: boolean }>(), {\r\n length: 6,\r\n numeric: true,\r\n})\r\nconst emit = defineEmits<{ complete: [code: string] }>()\r\nconst model = defineModel<string>({ default: '' })\r\nconst style = computed(() => ({ '--oc-otp-length': String(props.length) }))\r\n\r\nwatch(model, (code) => {\r\n if (code.length === props.length) emit('complete', code)\r\n})\r\n</script>\r\n\r\n<template>\r\n <input\r\n v-model=\"model\"\r\n class=\"oc-otp\"\r\n type=\"text\"\r\n :inputmode=\"numeric ? 'numeric' : 'text'\"\r\n autocomplete=\"one-time-code\"\r\n :maxlength=\"length\"\r\n :pattern=\"numeric ? '[0-9]*' : undefined\"\r\n :aria-invalid=\"invalid ? 'true' : undefined\"\r\n :style=\"style\"\r\n />\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcPageHeader.vue | Map: header -> back slot -> main (text: title, subtitle, meta slot | actions slot) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Title row of an app page (size container: actions sit next to the title from a 36rem header width).\r\n * Slots: back, title, subtitle, meta, actions.\r\n * Classes: .oc-page-header(--bordered/--sticky/--sm), -back, -main, -text, -title, -subtitle, -meta, -actions\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n title?: string\r\n subtitle?: string\r\n /** Heading level of the title (default 1). */\r\n level?: 1 | 2 | 3\r\n bordered?: boolean\r\n sticky?: boolean\r\n size?: 'sm'\r\n }>(),\r\n { level: 1 },\r\n)\r\n</script>\r\n\r\n<template>\r\n <header :class=\"['oc-page-header', bordered && 'oc-page-header--bordered', sticky && 'oc-page-header--sticky', size && `oc-page-header--${size}`]\">\r\n <div v-if=\"$slots.back\" class=\"oc-page-header-back\"><slot name=\"back\" /></div>\r\n <div class=\"oc-page-header-main\">\r\n <div class=\"oc-page-header-text\">\r\n <component :is=\"`h${level}`\" class=\"oc-page-header-title\"><slot name=\"title\">{{ title }}</slot></component>\r\n <p v-if=\"$slots.subtitle || subtitle\" class=\"oc-page-header-subtitle\"><slot name=\"subtitle\">{{ subtitle }}</slot></p>\r\n <div v-if=\"$slots.meta\" class=\"oc-page-header-meta\"><slot name=\"meta\" /></div>\r\n </div>\r\n <div v-if=\"$slots.actions\" class=\"oc-page-header-actions\"><slot name=\"actions\" /></div>\r\n </div>\r\n </header>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Pagination. v-model = current page (1-based), `pages` = page count. Links point to\r\n * `hrefFor(page)` (default ?page=n); without a custom hrefFor, clicks update the model instead of navigating.\r\n */\r\nconst props = withDefaults(\r\n defineProps<{\r\n pages: number\r\n hrefFor?: (page: number) => string\r\n label?: string\r\n }>(),\r\n { label: 'Pagination' },\r\n)\r\nconst page = defineModel<number>({ default: 1 })\r\n\r\nfunction go(e: Event, n: number) {\r\n if (!props.hrefFor) e.preventDefault()\r\n page.value = n\r\n}\r\n</script>\r\n\r\n<template>\r\n <nav class=\"oc-pagination\" :aria-label=\"label\">\r\n <a\r\n v-for=\"n in pages\"\r\n :key=\"n\"\r\n class=\"oc-pagination-item\"\r\n :href=\"hrefFor ? hrefFor(n) : `?page=${n}`\"\r\n :aria-current=\"n === page ? 'page' : undefined\"\r\n @click=\"go($event, n)\"\r\n >{{ n }}</a>\r\n </nav>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcPanel.vue | Map: glow -> classes -> panel with the slot -->\r\n<script setup lang=\"ts\">\r\n/** Framed panel for a form, a call to action or a feature (same markup as snippets/panel.html). glow: start | end | both. */\r\ndefineProps<{ glow?: 'start' | 'end' | 'both' }>()\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-panel', (glow === 'start' || glow === 'end') && 'oc-panel--glow', glow === 'end' && 'oc-panel--glow-end', glow === 'both' && 'oc-panel--glow-both']\"><slot /></div>\r\n</template>\r\n","// File: packages/ui/src/particles.js\r\n// Map: options (data attributes) -> colors from CSS (re-read on a theme change) -> size (the canvas box x device pixels)\r\n// -> particles -> frame (move, dot, lines to close neighbours) -> pause when hidden -> boot\r\n// Particle field (canvas.oc-particles): slowly drifting points with thin lines between points that are close together.\r\n// Colors come from the canvas's CSS: color (points and lines) and border-color (a second point color), so a theme\r\n// switch (data-theme or a class on <html>, or the OS setting) recolors it. With \"reduce motion\" it draws one still frame.\r\n// Options (data attributes on the canvas): data-count (110), data-speed (0.35), data-link (115, the line distance in px).\r\n\r\n/** Numbers from the canvas's data attributes, with the defaults. */\r\nexport function particleOptions(canvas) {\r\n const num = (name, fallback) => {\r\n const n = parseFloat(canvas.dataset?.[name] ?? \"\");\r\n return Number.isFinite(n) && n >= 0 ? n : fallback;\r\n };\r\n return { count: Math.round(num(\"count\", 110)), speed: num(\"speed\", 0.35), link: num(\"link\", 115) };\r\n}\r\n\r\n/** Start the field on one canvas (once). Returns a function that stops it. */\r\nexport function initParticles(canvas, options = {}) {\r\n if (!canvas || canvas.dataset.ocBound !== undefined) return () => {};\r\n const ctx = canvas.getContext?.(\"2d\");\r\n const win = canvas.ownerDocument?.defaultView;\r\n if (!ctx || !win) return () => {};\r\n canvas.dataset.ocBound = \"\";\r\n const { count, speed, link } = { ...particleOptions(canvas), ...options };\r\n const still = win.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\r\n\r\n let width = 0, height = 0;\r\n const resize = () => {\r\n const ratio = win.devicePixelRatio || 1;\r\n width = canvas.clientWidth || win.innerWidth;\r\n height = canvas.clientHeight || win.innerHeight;\r\n canvas.width = Math.round(width * ratio);\r\n canvas.height = Math.round(height * ratio);\r\n ctx.setTransform(ratio, 0, 0, ratio, 0, 0);\r\n };\r\n resize();\r\n\r\n let lineColor = \"\", colors = [];\r\n const readColors = () => {\r\n const cs = win.getComputedStyle(canvas);\r\n lineColor = cs.color;\r\n colors = [cs.color, cs.borderTopColor, cs.color];\r\n };\r\n readColors();\r\n\r\n const particles = Array.from({ length: count }, (_, i) => ({\r\n x: Math.random() * width,\r\n y: Math.random() * height,\r\n vx: (Math.random() - 0.5) * speed,\r\n vy: (Math.random() - 0.5) * speed,\r\n r: Math.random() * 1.8 + 0.4,\r\n alpha: Math.random() * 0.55 + 0.1,\r\n tone: i % 3,\r\n }));\r\n\r\n const frame = (move) => {\r\n ctx.clearRect(0, 0, width, height);\r\n particles.forEach((p, i) => {\r\n if (move) {\r\n p.x += p.vx; p.y += p.vy;\r\n if (p.x < 0 || p.x > width) p.vx *= -1;\r\n if (p.y < 0 || p.y > height) p.vy *= -1;\r\n }\r\n ctx.beginPath();\r\n ctx.arc(p.x, p.y, p.r, 0, Math.PI * 2);\r\n ctx.fillStyle = colors[p.tone];\r\n ctx.globalAlpha = p.alpha;\r\n ctx.fill();\r\n // Lines only to the next few points: cheap, and enough to look like a network.\r\n for (let j = i + 1; j < Math.min(i + 5, particles.length); j++) {\r\n const q = particles[j];\r\n const d = Math.hypot(p.x - q.x, p.y - q.y);\r\n if (d >= link) continue;\r\n ctx.beginPath();\r\n ctx.moveTo(p.x, p.y);\r\n ctx.lineTo(q.x, q.y);\r\n ctx.strokeStyle = lineColor;\r\n ctx.globalAlpha = (1 - d / link) * 0.1;\r\n ctx.lineWidth = 0.5;\r\n ctx.stroke();\r\n }\r\n });\r\n ctx.globalAlpha = 1;\r\n };\r\n\r\n let raf = 0;\r\n const loop = () => { frame(true); raf = win.requestAnimationFrame(loop); };\r\n const start = () => { if (!still && !raf) raf = win.requestAnimationFrame(loop); };\r\n const pause = () => { win.cancelAnimationFrame(raf); raf = 0; };\r\n const onVisibility = () => (canvas.ownerDocument.hidden ? pause() : start());\r\n const onResize = () => { resize(); if (still) frame(false); };\r\n const recolor = () => { readColors(); if (still) frame(false); };\r\n\r\n const themeObserver = new win.MutationObserver(recolor);\r\n themeObserver.observe(canvas.ownerDocument.documentElement, { attributes: true, attributeFilter: [\"data-theme\", \"class\", \"style\"] });\r\n const scheme = win.matchMedia?.(\"(prefers-color-scheme: dark)\");\r\n scheme?.addEventListener?.(\"change\", recolor);\r\n const sizeObserver = typeof win.ResizeObserver === \"function\" ? new win.ResizeObserver(onResize) : null;\r\n if (sizeObserver) sizeObserver.observe(canvas); else win.addEventListener(\"resize\", onResize);\r\n canvas.ownerDocument.addEventListener(\"visibilitychange\", onVisibility);\r\n\r\n if (still) frame(false); else start();\r\n return () => {\r\n pause();\r\n themeObserver.disconnect();\r\n scheme?.removeEventListener?.(\"change\", recolor);\r\n sizeObserver?.disconnect();\r\n win.removeEventListener(\"resize\", onResize);\r\n canvas.ownerDocument.removeEventListener(\"visibilitychange\", onVisibility);\r\n delete canvas.dataset.ocBound;\r\n };\r\n}\r\n\r\n/** Start every canvas.oc-particles under scope. Returns a function that stops them all. */\r\nexport function initParticleFields(scope = document) {\r\n const stops = [...scope.querySelectorAll(\"canvas.oc-particles\")].map((c) => initParticles(c));\r\n return () => stops.forEach((stop) => stop());\r\n}\r\n\r\n// Starts on its own as /js/oc-particles.js (`npx omniaui copy-js`), with ?auto in the URL or data-oc-auto on the tag.\r\nfunction autoStart() {\r\n if (typeof document === \"undefined\") return false;\r\n const url = String(import.meta.url);\r\n if (url.includes(\"oc-particles\") || /[?&]auto(=|&|$)/.test(url)) return true;\r\n const file = url.split(/[?#]/)[0];\r\n return [...document.querySelectorAll(\"script[data-oc-auto][src]\")].some((s) => s.src.split(/[?#]/)[0] === file);\r\n}\r\nif (autoStart()) {\r\n const boot = () => initParticleFields(document);\r\n if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", boot);\r\n else boot();\r\n}\r\n","<!-- File: packages/vue/src/components/OcParticleField.vue | Map: canvas.oc-particles -> start on mount (particles.js) -> stop on unmount -->\r\n<script setup lang=\"ts\">\r\n/** Background canvas with drifting points and lines; one still frame with reduced motion. local = fill the positioned parent. */\r\nimport { onBeforeUnmount, onMounted, ref, watch } from 'vue'\r\nimport { initParticles } from '../../../ui/src/particles.js'\r\n\r\nconst props = defineProps<{ count?: number; speed?: number; link?: number; local?: boolean }>()\r\nconst canvas = ref<HTMLCanvasElement | null>(null)\r\nlet stop = () => {}\r\nconst start = () => {\r\n stop()\r\n if (!canvas.value) return\r\n const options = Object.fromEntries(Object.entries({ count: props.count, speed: props.speed, link: props.link }).filter(([, v]) => v != null))\r\n stop = initParticles(canvas.value, options)\r\n}\r\nonMounted(start)\r\nwatch(() => [props.count, props.speed, props.link], start)\r\nonBeforeUnmount(() => stop())\r\n</script>\r\n\r\n<template>\r\n <canvas ref=\"canvas\" aria-hidden=\"true\" :class=\"['oc-particles', local && 'oc-particles--local']\"></canvas>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Password field with show/hide button (aria-pressed reflects the state). v-model.\r\n * class/style stay on the wrapper, every other attribute (id, name, autocomplete...) goes to the input.\r\n */\r\nimport { ref } from 'vue'\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nwithDefaults(defineProps<{ showLabel?: string; hideLabel?: string; toggleLabel?: string }>(), {\r\n showLabel: 'Show',\r\n hideLabel: 'Hide',\r\n toggleLabel: 'Toggle password visibility',\r\n})\r\nconst model = defineModel<string>({ default: '' })\r\nconst { root, control } = useAttrsSplit()\r\nconst visible = ref(false)\r\n</script>\r\n\r\n<template>\r\n <div v-bind=\"root\" class=\"oc-input-reveal\">\r\n <input v-bind=\"control\" v-model=\"model\" class=\"oc-input\" :type=\"visible ? 'text' : 'password'\" />\r\n <button class=\"oc-input-reveal-button\" type=\"button\" :aria-pressed=\"visible ? 'true' : 'false'\" :aria-label=\"toggleLabel\" @click=\"visible = !visible\">\r\n {{ visible ? hideLabel : showLabel }}\r\n </button>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcPasswordRequirements.vue | Map: rule type + defaults -> props -> template (live list, --met per rule) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Live password rule checklist. Pass the password; each rule turns green (--met) when it passes.\r\n * Same markup as packages/ui/snippets/password-requirements.html.\r\n */\r\nexport interface PasswordRequirementRule {\r\n label: string\r\n /** True when the password meets the rule. */\r\n test: (password: string) => boolean\r\n}\r\n\r\nwithDefaults(defineProps<{ password: string; rules?: PasswordRequirementRule[]; inline?: boolean; hideWhenEmpty?: boolean }>(), {\r\n // Common rules: length, uppercase, number, symbol.\r\n rules: () => [\r\n { label: 'At least 8 characters', test: (p: string) => p.length >= 8 },\r\n { label: 'One uppercase letter', test: (p: string) => /[A-Z]/.test(p) },\r\n { label: 'One number', test: (p: string) => /[0-9]/.test(p) },\r\n { label: 'One symbol', test: (p: string) => /[^A-Za-z0-9]/.test(p) },\r\n ],\r\n})\r\n</script>\r\n\r\n<template>\r\n <ul v-if=\"!hideWhenEmpty || password\" :class=\"['oc-password-requirements', inline && 'oc-password-requirements--inline']\" aria-live=\"polite\">\r\n <li v-for=\"(rule, i) in rules\" :key=\"i\" :class=\"['oc-password-requirement', rule.test(password) && 'oc-password-requirement--met']\">{{ rule.label }}</li>\r\n </ul>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcPhoneInput.vue | Map: props + model -> split / group helpers -> template (dial select + tel input) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Phone field: dial code select + national number. v-model = full value without spaces (\"+32470123456\").\r\n * Same markup as packages/ui/snippets/phone-input.html. JS only groups digits (\"470 12 34 56\").\r\n * class/style stay on the frame, other attributes (id, name, placeholder, aria-*) go to the number input.\r\n */\r\nimport { computed, ref } from 'vue'\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\nexport interface PhoneInputCountry {\r\n dial: string\r\n label: string\r\n}\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nconst props = withDefaults(\r\n defineProps<{ countries?: PhoneInputCountry[]; defaultDial?: string; size?: 'sm' | 'md'; error?: boolean; disabled?: boolean; dialLabel?: string }>(),\r\n {\r\n countries: () => [\r\n { dial: '+32', label: 'BE +32' },\r\n { dial: '+31', label: 'NL +31' },\r\n { dial: '+33', label: 'FR +33' },\r\n { dial: '+49', label: 'DE +49' },\r\n ],\r\n size: 'md',\r\n dialLabel: 'Country code',\r\n },\r\n)\r\nconst model = defineModel<string>({ default: '' })\r\nconst { root, control } = useAttrsSplit()\r\n\r\n// Longest dial code that the value starts with, e.g. \"+32\" from \"+32470...\".\r\nconst parsed = computed(() => {\r\n const match = [...props.countries].sort((a, b) => b.dial.length - a.dial.length).find((c) => model.value.startsWith(c.dial))\r\n return match ? { dial: match.dial, national: model.value.slice(match.dial.length) } : { dial: '', national: model.value.replace(/^\\+/, '') }\r\n})\r\n// Remember the chosen dial code while the number is still empty.\r\nconst dialState = ref(parsed.value.dial || props.defaultDial || props.countries[0]?.dial || '')\r\nconst dial = computed(() => parsed.value.dial || dialState.value)\r\n\r\n/** \"470123456\" -> \"470 12 34 56\": a group of 3, then pairs. */\r\nconst grouped = computed(() => {\r\n const d = parsed.value.national.replace(/\\D/g, '')\r\n return [d.slice(0, 3), ...(d.slice(3).match(/.{1,2}/g) ?? [])].filter(Boolean).join(' ')\r\n})\r\n\r\nfunction emit(nextDial: string, national: string) {\r\n dialState.value = nextDial\r\n const digits = national.replace(/\\D/g, '')\r\n model.value = digits ? nextDial + digits : ''\r\n}\r\n</script>\r\n\r\n<template>\r\n <div v-bind=\"root\" :class=\"['oc-phone-input', size === 'sm' && 'oc-phone-input--sm', error && 'oc-phone-input--error']\">\r\n <select class=\"oc-phone-input-dial\" :aria-label=\"dialLabel\" :value=\"dial\" :disabled=\"disabled\" @change=\"emit(($event.target as HTMLSelectElement).value, parsed.national)\">\r\n <option v-for=\"c in countries\" :key=\"c.dial\" :value=\"c.dial\">{{ c.label }}</option>\r\n </select>\r\n <input\r\n v-bind=\"control\"\r\n class=\"oc-phone-input-number\"\r\n type=\"tel\"\r\n inputmode=\"tel\"\r\n autocomplete=\"tel-national\"\r\n :aria-invalid=\"error ? 'true' : undefined\"\r\n :disabled=\"disabled\"\r\n :value=\"grouped\"\r\n @input=\"emit(dial, ($event.target as HTMLInputElement).value)\"\r\n />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Floating panel on the popover attribute + anchor positioning. Trigger = `trigger` slot (scoped: { id })\r\n * or a default outline button with `label`. Default slot = panel content. Classes: .oc-popover(--sm/--lg),\r\n * -title, -text. Attributes land on the panel.\r\n */\r\nimport { useAttrs } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nwithDefaults(defineProps<{ label?: string; title?: string; text?: string; size?: 'sm' | 'md' | 'lg' }>(), { size: 'md' })\r\nconst attrs = useAttrs()\r\nconst id = (attrs.id as string | undefined) ?? useUid('oc-popover')\r\n</script>\r\n\r\n<template>\r\n <slot name=\"trigger\" :id=\"id\">\r\n <button class=\"oc-btn oc-btn--outline\" type=\"button\" :popovertarget=\"id\">{{ label }}</button>\r\n </slot>\r\n <div v-bind=\"attrs\" :id=\"id\" :class=\"['oc-popover', size !== 'md' && `oc-popover--${size}`]\" popover>\r\n <h3 v-if=\"title\" class=\"oc-popover-title\">{{ title }}</h3>\r\n <p v-if=\"text\" class=\"oc-popover-text\">{{ text }}</p>\r\n <slot />\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcPrice.vue | Map: props -> formatted amounts -> main line, note, alternative -->\r\n<script setup lang=\"ts\">\r\n/** A price with old price, discount, VAT note and the other amount (same markup as snippets/price.html). */\r\nconst props = withDefaults(defineProps<{\r\n amount: number | string\r\n old?: number | string\r\n discount?: string\r\n note?: string\r\n alt?: string\r\n currency?: string\r\n locale?: string\r\n size?: 'sm' | 'md' | 'lg'\r\n sale?: boolean\r\n inline?: boolean\r\n end?: boolean\r\n}>(), { currency: 'EUR', locale: 'nl-BE', size: 'md' })\r\nconst format = (v: number | string) => (typeof v === 'number' ? new Intl.NumberFormat(props.locale, { style: 'currency', currency: props.currency }).format(v) : v)\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-price', size !== 'md' && `oc-price--${size}`, sale && 'oc-price--sale', inline && 'oc-price--inline', end && 'oc-price--end']\">\r\n <div class=\"oc-price__main\">\r\n <span class=\"oc-price__amount\">{{ format(amount) }}</span>\r\n <s v-if=\"old != null\" class=\"oc-price__old\">{{ format(old) }}</s>\r\n <span v-if=\"discount\" class=\"oc-badge oc-badge--destructive\">{{ discount }}</span>\r\n </div>\r\n <span v-if=\"note\" class=\"oc-price__note\">{{ note }}</span>\r\n <span v-if=\"alt\" class=\"oc-price__alt\">{{ alt }}</span>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcPriceCard.vue | Map: props -> head -> toggle (radios) -> monthly / yearly / lifetime price -> features -> cta slot -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Plan card with a CSS-only monthly / yearly switch (radio + :has). Slots: cta, features (replaces the list items).\r\n * Classes: .oc-price-card (--featured), __head, __name, __discount, __desc, __toggle, __price(--monthly/--yearly),\r\n * __amount, __period, __was, __note, __features, __feature(--excluded), __cta\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface PriceCardFeature {\r\n label: string\r\n excluded?: boolean\r\n}\r\nexport interface PriceCardPrice {\r\n amount: string\r\n period?: string\r\n was?: string\r\n note?: string\r\n}\r\nwithDefaults(\r\n defineProps<{\r\n name: string\r\n description?: string\r\n discount?: string\r\n monthly: PriceCardPrice\r\n yearly?: PriceCardPrice\r\n /** Optional third option, e.g. a one-time price. Needs `yearly`. */\r\n lifetime?: PriceCardPrice\r\n defaultPeriod?: 'monthly' | 'yearly' | 'lifetime'\r\n features?: PriceCardFeature[]\r\n featured?: boolean\r\n monthlyLabel?: string\r\n yearlyLabel?: string\r\n lifetimeLabel?: string\r\n }>(),\r\n { defaultPeriod: 'monthly', features: () => [], monthlyLabel: 'Monthly', yearlyLabel: 'Yearly', lifetimeLabel: 'Lifetime' },\r\n)\r\n// Every card needs its own radio group name.\r\nconst group = useUid('oc-price')\r\n</script>\r\n\r\n<template>\r\n <article :class=\"['oc-price-card', featured && 'oc-price-card--featured']\">\r\n <div class=\"oc-price-card__head\">\r\n <h3 class=\"oc-price-card__name\">{{ name }}</h3>\r\n <span v-if=\"discount\" class=\"oc-price-card__discount\">{{ discount }}</span>\r\n </div>\r\n <p v-if=\"description\" class=\"oc-price-card__desc\">{{ description }}</p>\r\n <div v-if=\"yearly\" class=\"oc-segmented oc-price-card__toggle\" role=\"radiogroup\" aria-label=\"Billing period\">\r\n <label class=\"oc-segmented-item\"><input type=\"radio\" :name=\"group\" value=\"monthly\" :checked=\"defaultPeriod === 'monthly'\" /> {{ monthlyLabel }}</label>\r\n <label class=\"oc-segmented-item\"><input type=\"radio\" :name=\"group\" value=\"yearly\" :checked=\"defaultPeriod === 'yearly'\" /> {{ yearlyLabel }}</label>\r\n <label v-if=\"lifetime\" class=\"oc-segmented-item\"><input type=\"radio\" :name=\"group\" value=\"lifetime\" :checked=\"defaultPeriod === 'lifetime'\" /> {{ lifetimeLabel }}</label>\r\n </div>\r\n <p class=\"oc-price-card__price oc-price-card__price--monthly\">\r\n <span class=\"oc-price-card__amount\">{{ monthly.amount }}</span>\r\n <span v-if=\"monthly.period\" class=\"oc-price-card__period\">{{ monthly.period }}</span>\r\n <s v-if=\"monthly.was\" class=\"oc-price-card__was\">{{ monthly.was }}</s>\r\n <span v-if=\"monthly.note\" class=\"oc-price-card__note\">{{ monthly.note }}</span>\r\n </p>\r\n <p v-if=\"yearly\" class=\"oc-price-card__price oc-price-card__price--yearly\">\r\n <span class=\"oc-price-card__amount\">{{ yearly.amount }}</span>\r\n <span v-if=\"yearly.period\" class=\"oc-price-card__period\">{{ yearly.period }}</span>\r\n <s v-if=\"yearly.was\" class=\"oc-price-card__was\">{{ yearly.was }}</s>\r\n <span v-if=\"yearly.note\" class=\"oc-price-card__note\">{{ yearly.note }}</span>\r\n </p>\r\n <p v-if=\"yearly && lifetime\" class=\"oc-price-card__price oc-price-card__price--lifetime\">\r\n <span class=\"oc-price-card__amount\">{{ lifetime.amount }}</span>\r\n <span v-if=\"lifetime.period\" class=\"oc-price-card__period\">{{ lifetime.period }}</span>\r\n <s v-if=\"lifetime.was\" class=\"oc-price-card__was\">{{ lifetime.was }}</s>\r\n <span v-if=\"lifetime.note\" class=\"oc-price-card__note\">{{ lifetime.note }}</span>\r\n </p>\r\n <ul v-if=\"features.length || $slots.features\" class=\"oc-price-card__features\">\r\n <slot name=\"features\">\r\n <li v-for=\"(f, i) in features\" :key=\"i\" :class=\"['oc-price-card__feature', f.excluded && 'oc-price-card__feature--excluded']\">{{ f.label }}</li>\r\n </slot>\r\n </ul>\r\n <slot name=\"cta\" />\r\n </article>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcProductMark.vue | Map: props (size, accent, soft, glow, cover) -> span.oc-product-mark -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Squircle app-icon tile in the accent gradient. Slot: glyph, <img alt=\"\"> or SVG. Decorative (aria-hidden).\r\n * Classes: .oc-product-mark (--sm, --lg, --xl, --soft, --glow, --cover) + .oc-accent--*\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n size?: 'sm' | 'default' | 'lg' | 'xl'\r\n accent?: 'blue' | 'cyan' | 'green' | 'orange' | 'red' | 'violet' | 'yellow'\r\n soft?: boolean\r\n glow?: boolean\r\n cover?: boolean\r\n }>(),\r\n { size: 'default' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <span\r\n :class=\"[\r\n 'oc-product-mark',\r\n size !== 'default' && `oc-product-mark--${size}`,\r\n soft && 'oc-product-mark--soft',\r\n glow && 'oc-product-mark--glow',\r\n cover && 'oc-product-mark--cover',\r\n accent && `oc-accent--${accent}`,\r\n ]\"\r\n aria-hidden=\"true\"\r\n ><slot /></span>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcProjectCard.vue | Map: props -> a.oc-project-card -> frame (bar + shot) -> body -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Portfolio card with a browser-like preview. Without `image` the preview is an accent gradient.\r\n * Slots: type, name, meta, more. Classes: .oc-project-card (--flat), __frame, __bar, __shot, __body, __type, __name, __meta, __more\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n href: string\r\n name?: string\r\n type?: string\r\n meta?: string\r\n more?: string\r\n image?: string\r\n imageAlt?: string\r\n flat?: boolean\r\n }>(),\r\n { more: 'View project', imageAlt: '' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <a :class=\"['oc-project-card', flat && 'oc-project-card--flat']\" :href=\"href\">\r\n <span class=\"oc-project-card__frame\">\r\n <span class=\"oc-project-card__bar\" aria-hidden=\"true\"><i></i><i></i><i></i></span>\r\n <img v-if=\"image\" class=\"oc-project-card__shot\" :src=\"image\" :alt=\"imageAlt\" loading=\"lazy\" />\r\n <span v-else class=\"oc-project-card__shot\" role=\"img\" :aria-label=\"imageAlt || undefined\" :aria-hidden=\"imageAlt ? undefined : 'true'\"></span>\r\n </span>\r\n <span class=\"oc-project-card__body\">\r\n <span v-if=\"type || $slots.type\" class=\"oc-project-card__type\"><slot name=\"type\">{{ type }}</slot></span>\r\n <span class=\"oc-project-card__name\"><slot name=\"name\">{{ name }}</slot></span>\r\n <span v-if=\"meta || $slots.meta\" class=\"oc-project-card__meta\"><slot name=\"meta\">{{ meta }}</slot></span>\r\n <span v-if=\"more\" class=\"oc-project-card__more\"><slot name=\"more\">{{ more }}</slot></span>\r\n </span>\r\n </a>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcProse.vue | Map: props -> wrapper with size modifiers -> default slot (demo article when empty) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Typography for long-form text written without classes (same markup as snippets/prose.html). Slot default = the text\r\n * (put .oc-prose-lead on the intro paragraph); the snippet's demo article when empty. size: compact (widgets, 13 px) | sm | md | lg, full = no max width.\r\n * Classes: .oc-prose(--compact/--sm/--lg/--full), .oc-prose-lead\r\n */\r\nwithDefaults(defineProps<{ size?: 'compact' | 'sm' | 'md' | 'lg'; full?: boolean; as?: 'article' | 'div' | 'section' }>(), { size: 'md', as: 'article' })\r\n</script>\r\n\r\n<template>\r\n <component :is=\"as\" :class=\"['oc-prose', size !== 'md' && `oc-prose--${size}`, full && 'oc-prose--full']\">\r\n <slot>\r\n <h1>Planning a kitchen renovation</h1>\r\n <p class=\"oc-prose-lead\">A new kitchen takes eight to twelve weeks from the first visit to the last cabinet handle. This guide explains every step, so you know what to expect and when we need you.</p>\r\n <h2>Before the first visit</h2>\r\n <p>Collect a few photos of kitchens you like and measure the room roughly. Exact measurements are not needed yet: our site manager does that during the visit. Read the <a href=\"#checklist\">preparation checklist</a> if you want to be fully ready.</p>\r\n <ul>\r\n <li>The <strong>budget range</strong> you have in mind, including appliances</li>\r\n <li>Which walls, doors and windows can move, and which cannot\r\n <ul><li>Load-bearing walls need a structural engineer</li><li>Moving a window needs a permit in most towns</li></ul>\r\n </li>\r\n <li>Appliances you want to keep</li>\r\n </ul>\r\n <figure>\r\n <div class=\"oc-media-art oc-media-art--6\" role=\"img\" aria-label=\"Kitchen with oak fronts and a light stone worktop\"></div>\r\n <figcaption>Project 1: oak fronts with a Calacatta matt worktop, finished in October 2026.</figcaption>\r\n </figure>\r\n <h3>From design to installation</h3>\r\n <ol>\r\n <li>Site visit and measurements (week 1)</li>\r\n <li>Design and quote, with two revision rounds (weeks 2–3)</li>\r\n <li>Order and production of the cabinets (weeks 4–9)</li>\r\n <li>Installation, worktop and finishing (weeks 10–11)</li>\r\n </ol>\r\n <blockquote>\r\n <p>The planning was clear from day one. We always knew who was coming and when, and the kitchen was ready a week early.</p>\r\n <footer>— Customer 8, client in Ghent</footer>\r\n </blockquote>\r\n <h2>Worktop materials compared</h2>\r\n <table>\r\n <caption>Prices per running metre, 60 cm deep, installed.</caption>\r\n <thead><tr><th>Material</th><th>Thickness</th><th>Heat resistant</th><th>Price</th></tr></thead>\r\n <tbody>\r\n <tr><td>Compact laminate</td><td>12 mm</td><td>Up to 180 °C</td><td>€ 290</td></tr>\r\n <tr><td>Quartz composite</td><td>20 mm</td><td>Up to 150 °C</td><td>€ 540</td></tr>\r\n <tr><td>Natural stone</td><td>20 mm</td><td>Yes</td><td>€ 720</td></tr>\r\n </tbody>\r\n </table>\r\n <h3>Sharing your floor plan</h3>\r\n <p>Upload a PDF or a photo in the client portal, or send it by e-mail. Press <kbd>Ctrl</kbd> + <kbd>V</kbd> in the chat to paste a screenshot. Files are stored as <code>project-id/plans/</code> and only your project team can see them.</p>\r\n <pre><code>{{ 'Project: 2026-114 Project 1\\nRoom: Kitchen, ground floor\\nWall A: 412 cm (window at 160 cm)\\nWall B: 298 cm (door at the left)' }}</code></pre>\r\n <hr />\r\n <p><small>Lead times are an estimate. <mark>Natural stone</mark> can take two weeks longer in summer.</small></p>\r\n </slot>\r\n </component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcQuantity.vue | Map: v-model number -> minus / input / plus within min, max, step -->\r\n<script setup lang=\"ts\">\r\n/** Minus, number and plus in one frame (same markup as snippets/quantity.html). v-model is the number. */\r\nimport { stepQuantity } from '../../../ui/src/form-extras.js'\r\n\r\nconst props = withDefaults(defineProps<{ min?: number; max?: number; step?: number; size?: 'sm' | 'md'; label?: string; name?: string; id?: string; disabled?: boolean }>(), { min: 0, step: 1, size: 'md', label: 'Quantity' })\r\nconst model = defineModel<number>({ default: 1 })\r\nconst move = (direction: -1 | 1) => { model.value = stepQuantity(model.value, direction, { min: props.min, max: props.max ?? Infinity, step: props.step }) }\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-quantity', size === 'sm' && 'oc-quantity--sm']\">\r\n <button class=\"oc-quantity__step\" type=\"button\" :aria-label=\"`Decrease ${label.toLowerCase()}`\" :disabled=\"disabled || model <= min\" @click=\"move(-1)\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M19 13H5v-2h14z\" /></svg>\r\n </button>\r\n <input :id=\"id\" v-model.number=\"model\" class=\"oc-quantity__input\" type=\"number\" inputmode=\"numeric\" :name=\"name\" :min=\"min\" :max=\"max\" :step=\"step\" :aria-label=\"label\" :disabled=\"disabled\">\r\n <button class=\"oc-quantity__step\" type=\"button\" :aria-label=\"`Increase ${label.toLowerCase()}`\" :disabled=\"disabled || (max != null && model >= max)\" @click=\"move(1)\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z\" /></svg>\r\n </button>\r\n </div>\r\n</template>\r\n","import type { InjectionKey, Ref } from 'vue'\r\n\r\n/** Provided by OcRadioGroup, injected by OcRadio. */\r\nexport interface RadioGroupContext {\r\n model: Ref<string | number | undefined>\r\n name: Ref<string>\r\n card: Ref<boolean>\r\n}\r\nexport const radioGroupKey: InjectionKey<RadioGroupContext> = Symbol('oc-radio-group')\r\n\r\n/** Provided by OcToggleGroup, injected by OcToggle. */\r\nexport interface ToggleGroupContext {\r\n /** Currently pressed values. */\r\n values: Ref<string[]>\r\n type: Ref<'single' | 'multiple'>\r\n name: Ref<string>\r\n toggle: (value: string) => void\r\n}\r\nexport const toggleGroupKey: InjectionKey<ToggleGroupContext> = Symbol('oc-toggle-group')\r\n\r\n/** Provided by OcResizable, injected by OcResizablePanel. */\r\nexport const resizableVerticalKey: InjectionKey<Ref<boolean>> = Symbol('oc-resizable-vertical')\r\n","<script setup lang=\"ts\">\r\n/**\r\n * One radio. Inside OcRadioGroup it reads and writes the group's v-model; standalone it has its own v-model\r\n * and needs a `name` attribute. `description` (or `card`, or the group's `card`) renders the bordered card form.\r\n * Classes: .oc-radio, .oc-radio-item(--card)\r\n */\r\nimport { computed, inject } from 'vue'\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\nimport { radioGroupKey } from '../composables/keys'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nconst props = defineProps<{ value: string | number; description?: string; card?: boolean; disabled?: boolean }>()\r\nconst own = defineModel<string | number>()\r\nconst group = inject(radioGroupKey, null)\r\nconst { root, control } = useAttrsSplit()\r\n\r\nconst checked = computed(() => (group ? group.model.value : own.value) === props.value)\r\nconst isCard = computed(() => props.card || !!group?.card.value || !!props.description)\r\nfunction onChange() {\r\n if (group) group.model.value = props.value\r\n else own.value = props.value\r\n}\r\n</script>\r\n\r\n<template>\r\n <label v-bind=\"root\" :class=\"['oc-radio-item', isCard && 'oc-radio-item--card']\">\r\n <input\r\n v-bind=\"control\"\r\n class=\"oc-radio\"\r\n type=\"radio\"\r\n :name=\"group ? group.name.value : (control.name as string | undefined)\"\r\n :value=\"value\"\r\n :checked=\"checked\"\r\n :disabled=\"disabled\"\r\n @change=\"onChange\"\r\n />\r\n <span v-if=\"description\"><slot /><small>{{ description }}</small></span>\r\n <slot v-else />\r\n </label>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Radio group (fieldset). v-model = value of the checked radio. Pass `options` or put OcRadio items in the default slot.\r\n * `legend` renders a legend; `row` lays the items out horizontally; `card` makes the option items bordered cards.\r\n * Classes: .oc-radio-group(--row)\r\n */\r\nimport { computed, provide } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\nimport { radioGroupKey } from '../composables/keys'\r\nimport OcRadio from './OcRadio.vue'\r\n\r\nexport interface RadioOption {\r\n value: string | number\r\n label: string\r\n description?: string\r\n disabled?: boolean\r\n}\r\n\r\nconst props = defineProps<{ legend?: string; options?: RadioOption[]; name?: string; row?: boolean; card?: boolean }>()\r\nconst model = defineModel<string | number>()\r\nconst uid = useUid('oc-radio')\r\nprovide(radioGroupKey, { model, name: computed(() => props.name ?? uid), card: computed(() => !!props.card) })\r\n</script>\r\n\r\n<template>\r\n <fieldset :class=\"['oc-radio-group', row && 'oc-radio-group--row']\">\r\n <legend v-if=\"legend\" class=\"oc-label\">{{ legend }}</legend>\r\n <slot>\r\n <OcRadio v-for=\"o in options\" :key=\"o.value\" :value=\"o.value\" :disabled=\"o.disabled\" :description=\"o.description\">{{ o.label }}</OcRadio>\r\n </slot>\r\n </fieldset>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcRating.vue | Map: props -> clamped score -> star bar -->\r\n<script setup lang=\"ts\">\r\n/** Stars of a score (same markup as snippets/rating.html): halves and decimals, any number of stars. */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(defineProps<{ value: number; max?: number; size?: 'sm' | 'md' | 'lg'; label?: string }>(), { max: 5, size: 'md' })\r\nconst score = computed(() => Math.max(0, Math.min(props.max, props.value)))\r\n</script>\r\n\r\n<template>\r\n <span\r\n :class=\"['oc-rating', size !== 'md' && `oc-rating--${size}`]\"\r\n :style=\"{ '--oc-rating': String(score), ...(max !== 5 ? { '--oc-rating-max': String(max) } : {}) }\"\r\n role=\"img\"\r\n :aria-label=\"label ?? `${score} out of ${max}`\"\r\n ></span>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcRatingInput.vue | Map: v-model (1–5) -> fieldset with five star radios -->\r\n<script setup lang=\"ts\">\r\n/** Five radio buttons drawn as stars (same markup as snippets/rating.html); v-model is 0 (none) to 5. */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = withDefaults(defineProps<{ name?: string; legend?: string; size?: 'sm' | 'md' | 'lg'; disabled?: boolean }>(), { legend: 'Rating', size: 'md' })\r\nconst model = defineModel<number>({ default: 0 })\r\nconst group = props.name ?? useUid('oc-rating')\r\nconst text = (n: number) => (n === 1 ? '1 star' : `${n} stars`)\r\n</script>\r\n\r\n<template>\r\n <fieldset :class=\"['oc-rating-input', size !== 'md' && `oc-rating-input--${size}`]\" :disabled=\"disabled\">\r\n <legend>{{ legend }}</legend>\r\n <label v-for=\"n in 5\" :key=\"n\"><input v-model=\"model\" type=\"radio\" :name=\"group\" :value=\"n\"><span>{{ text(n) }}</span></label>\r\n </fieldset>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcReading.vue | Map: span.oc-reading (+ level) -> value (slot) -->\r\n<script setup lang=\"ts\">\r\n/** A small measured value (\"57 °C\") in tabular numbers. level: cool (default), warm, hot. */\r\ndefineProps<{ level?: 'cool' | 'warm' | 'hot' }>()\r\n</script>\r\n\r\n<template>\r\n <span :class=\"['oc-reading', level && level !== 'cool' && `oc-reading--${level}`]\"><slot /></span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Warning panel with a code grid plus \"copy all\" and \"download .txt\" actions (handled here).\r\n * Emits `copy` and `download`. Slot: actions (replaces the two buttons).\r\n */\r\nconst props = withDefaults(\r\n defineProps<{\r\n codes: string[]\r\n title?: string\r\n warning?: string\r\n copyLabel?: string\r\n downloadLabel?: string\r\n filename?: string\r\n }>(),\r\n {\r\n title: 'Recovery codes',\r\n warning: 'Store these codes somewhere safe. Each code works once.',\r\n copyLabel: 'Copy all',\r\n downloadLabel: 'Download .txt',\r\n filename: 'recovery-codes.txt',\r\n },\r\n)\r\nconst emit = defineEmits<{ copy: []; download: [] }>()\r\n\r\nasync function copyAll() {\r\n await navigator.clipboard.writeText(props.codes.join('\\n'))\r\n emit('copy')\r\n}\r\n\r\nfunction download() {\r\n const url = URL.createObjectURL(new Blob([props.codes.join('\\n') + '\\n'], { type: 'text/plain' }))\r\n const a = document.createElement('a')\r\n a.href = url\r\n a.download = props.filename\r\n a.click()\r\n URL.revokeObjectURL(url)\r\n emit('download')\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-recovery-codes\">\r\n <h3 class=\"oc-recovery-codes-title\">{{ title }}</h3>\r\n <p class=\"oc-recovery-codes-warning\">{{ warning }}</p>\r\n <ul class=\"oc-recovery-codes-list\">\r\n <li v-for=\"code in codes\" :key=\"code\">{{ code }}</li>\r\n </ul>\r\n <div class=\"oc-recovery-codes-actions\">\r\n <slot name=\"actions\">\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" @click=\"copyAll\">{{ copyLabel }}</button>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" @click=\"download\">{{ downloadLabel }}</button>\r\n </slot>\r\n </div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcResult.vue | Map: tile (icon) -> title -> text (slot) -> actions (slot) -->\r\n<script setup lang=\"ts\">\r\n/** Outcome of an action in place of the form (snippets/result.html). icon = webicon name; slots: default (text), icon, actions. */\r\ndefineProps<{ title: string; icon?: string; accent?: string; center?: boolean }>()\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-result', center && 'oc-result--center']\" role=\"status\" tabindex=\"-1\">\r\n <span v-if=\"icon || $slots.icon\" :class=\"['oc-icon-tile oc-icon-tile--sm', accent && `oc-accent--${accent}`]\" aria-hidden=\"true\">\r\n <slot name=\"icon\"><iconify-icon :icon=\"icon\" /></slot>\r\n </span>\r\n <h2 class=\"oc-result__title\">{{ title }}</h2>\r\n <p v-if=\"$slots.default\" class=\"oc-result__text\"><slot /></p>\r\n <div v-if=\"$slots.actions\" class=\"oc-result__actions\"><slot name=\"actions\" /></div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcRibbon.vue | Map: corner, tone, size -> classes -> band with the slot -->\r\n<script setup lang=\"ts\">\r\n/** Diagonal band across a corner of its parent (same markup as snippets/ribbon.html). Default slot = the text. */\r\nwithDefaults(defineProps<{ corner?: 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end'; tone?: 'primary' | 'success' | 'warning' | 'destructive' | 'muted'; size?: 'sm' | 'md' | 'lg' }>(), { corner: 'top-end', tone: 'primary', size: 'md' })\r\n</script>\r\n\r\n<template>\r\n <span :class=\"['oc-ribbon', corner !== 'top-end' && `oc-ribbon--${corner}`, tone !== 'primary' && `oc-ribbon--${tone}`, size !== 'md' && `oc-ribbon--${size}`]\"><slot /></span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Bounded scroll region (focusable, role=region) with themed scrollbar. `label` = aria-label. Classes: .oc-scroll-area(--x/--shadows) */\r\ndefineProps<{ horizontal?: boolean; shadows?: boolean; label?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"['oc-scroll-area', horizontal && 'oc-scroll-area--x', shadows && 'oc-scroll-area--shadows']\"\r\n tabindex=\"0\"\r\n role=\"region\"\r\n :aria-label=\"label\"\r\n >\r\n <slot />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Radio group as a pill switcher. v-model = selected value. Classes: .oc-segmented(--block/--sm), -item */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface SegmentedOption {\r\n value: string\r\n label: string\r\n}\r\ndefineProps<{\r\n options: SegmentedOption[]\r\n /** aria-label of the group */\r\n label?: string\r\n block?: boolean\r\n size?: 'sm' | 'md'\r\n name?: string\r\n}>()\r\nconst model = defineModel<string>()\r\nconst uid = useUid('oc-segmented')\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-segmented', block && 'oc-segmented--block', size === 'sm' && 'oc-segmented--sm']\" role=\"radiogroup\" :aria-label=\"label\">\r\n <label v-for=\"option in options\" :key=\"option.value\" class=\"oc-segmented-item\">\r\n <input v-model=\"model\" type=\"radio\" :name=\"name ?? uid\" :value=\"option.value\" />\r\n {{ option.label }}\r\n </label>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Native select. v-model. Pass `options` (strings or { value, label }) or <option> elements in the default slot. */\r\nexport interface SelectOption {\r\n value: string | number\r\n label: string\r\n disabled?: boolean\r\n}\r\ndefineProps<{ options?: (string | SelectOption)[] }>()\r\nconst model = defineModel<any>()\r\n</script>\r\n\r\n<template>\r\n <select v-model=\"model\" class=\"oc-select\">\r\n <slot>\r\n <template v-for=\"o in options\" :key=\"typeof o === 'string' ? o : o.value\">\r\n <option v-if=\"typeof o === 'string'\" :value=\"o\">{{ o }}</option>\r\n <option v-else :value=\"o.value\" :disabled=\"o.disabled\">{{ o.label }}</option>\r\n </template>\r\n </slot>\r\n </select>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Divider. Default = <hr>. `vertical` = inline separator for flex rows. `label` (or the default slot) renders the\r\n * line-text-line form. Classes: .oc-separator(--vertical/--strong), .oc-separator-text\r\n */\r\ndefineProps<{ vertical?: boolean; strong?: boolean; label?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div v-if=\"label || $slots.default\" class=\"oc-separator-text\" role=\"separator\"><span><slot>{{ label }}</slot></span></div>\r\n <span\r\n v-else-if=\"vertical\"\r\n :class=\"['oc-separator', 'oc-separator--vertical', strong && 'oc-separator--strong']\"\r\n role=\"separator\"\r\n aria-orientation=\"vertical\"\r\n ></span>\r\n <hr v-else :class=\"['oc-separator', strong && 'oc-separator--strong']\" />\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcSeverityCard.vue | Map: details -> summary head (icon, title + tags, level badge) -> body (default slot, actions slot) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Expandable card colored by risk level. v-model:open. Cards with the same `name` open one at a time.\r\n * Slots: icon, default (body), actions.\r\n * Classes: details.oc-severity-card(--low/--medium/--high/--critical, .is-resolved), -head, -icon, -main, -title, -tags, -tag, -level, -body, -actions\r\n */\r\nconst props = defineProps<{\r\n level: 'low' | 'medium' | 'high' | 'critical'\r\n title: string\r\n tags?: string[]\r\n levelLabel?: string\r\n resolved?: boolean\r\n name?: string\r\n}>()\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst LEVEL_TEXT = { low: 'Low', medium: 'Medium', high: 'High', critical: 'Critical' } as const\r\n\r\nfunction onToggle(e: Event) {\r\n open.value = (e.target as HTMLDetailsElement).open\r\n}\r\n</script>\r\n\r\n<template>\r\n <details\r\n :class=\"['oc-severity-card', `oc-severity-card--${level}`, resolved && 'is-resolved']\"\r\n :name=\"name\"\r\n :open=\"open\"\r\n @toggle=\"onToggle\"\r\n >\r\n <summary class=\"oc-severity-card-head\">\r\n <span v-if=\"$slots.icon\" class=\"oc-severity-card-icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <span class=\"oc-severity-card-main\">\r\n <span class=\"oc-severity-card-title\">{{ title }}</span>\r\n <span v-if=\"tags?.length\" class=\"oc-severity-card-tags\">\r\n <span v-for=\"t in tags\" :key=\"t\" class=\"oc-severity-card-tag\">{{ t }}</span>\r\n </span>\r\n </span>\r\n <span class=\"oc-severity-card-level\">{{ levelLabel ?? LEVEL_TEXT[props.level] }}</span>\r\n </summary>\r\n <div class=\"oc-severity-card-body\">\r\n <slot />\r\n <div v-if=\"$slots.actions\" class=\"oc-severity-card-actions\"><slot name=\"actions\" /></div>\r\n </div>\r\n </details>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Side panel on a native <dialog>. v-model:open. Slots: header (replaces title + description),\r\n * default (body), footer (scoped: { close }). Classes: dialog.oc-sheet(--left/--top/--bottom),\r\n * .oc-sheet-content(--wide), -header, -title, -description, -body, -footer, -close.\r\n */\r\nimport { ref } from 'vue'\r\nimport { useDialog } from '../composables/useDialog'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n side?: 'right' | 'left' | 'top' | 'bottom'\r\n wide?: boolean\r\n title?: string\r\n description?: string\r\n closeLabel?: string\r\n }>(),\r\n { side: 'right', closeLabel: 'Close' },\r\n)\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst el = ref<HTMLDialogElement | null>(null)\r\nconst { onClose } = useDialog(open, el)\r\nconst titleId = useUid('oc-sheet-title')\r\nconst close = () => (open.value = false)\r\ndefineExpose({ close })\r\n</script>\r\n\r\n<template>\r\n <dialog\r\n ref=\"el\"\r\n :class=\"['oc-sheet', side !== 'right' && `oc-sheet--${side}`]\"\r\n closedby=\"any\"\r\n :aria-labelledby=\"title ? titleId : undefined\"\r\n @close=\"onClose\"\r\n >\r\n <div :class=\"['oc-sheet-content', wide && 'oc-sheet-content--wide']\">\r\n <button class=\"oc-sheet-close\" type=\"button\" :aria-label=\"closeLabel\" @click=\"close\">×</button>\r\n <div v-if=\"title || description || $slots.header\" class=\"oc-sheet-header\">\r\n <slot name=\"header\">\r\n <h2 v-if=\"title\" :id=\"titleId\" class=\"oc-sheet-title\">{{ title }}</h2>\r\n <p v-if=\"description\" class=\"oc-sheet-description\">{{ description }}</p>\r\n </slot>\r\n </div>\r\n <div v-if=\"$slots.default\" class=\"oc-sheet-body\"><slot /></div>\r\n <div v-if=\"$slots.footer\" class=\"oc-sheet-footer\"><slot name=\"footer\" :close=\"close\" /></div>\r\n </div>\r\n </dialog>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Vertical navigation shell. Slots: header, default (scrolling content: OcSidebarGroup...), footer.\r\n * Classes: .oc-sidebar(--collapsed/--right/--floating/--dark), -header, -content, -footer.\r\n * Compose with OcSidebarGroup, OcSidebarMenu, OcSidebarMenuButton, OcSidebarCollapsible, OcSidebarSeparator.\r\n */\r\ndefineProps<{ collapsed?: boolean; right?: boolean; floating?: boolean; dark?: boolean; label?: string }>()\r\n</script>\r\n\r\n<template>\r\n <aside :class=\"['oc-sidebar', collapsed && 'oc-sidebar--collapsed', right && 'oc-sidebar--right', floating && 'oc-sidebar--floating', dark && 'oc-sidebar--dark']\" :aria-label=\"label\">\r\n <div v-if=\"$slots.header\" class=\"oc-sidebar-header\"><slot name=\"header\" /></div>\r\n <div class=\"oc-sidebar-content\"><slot /></div>\r\n <div v-if=\"$slots.footer\" class=\"oc-sidebar-footer\"><slot name=\"footer\" /></div>\r\n </aside>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Expandable sidebar item (details). v-model:open. Slots: icon, label (or `label` prop), default (sub items as <li>). */\r\ndefineProps<{ label?: string }>()\r\nconst open = defineModel<boolean>('open', { default: false })\r\n\r\nfunction onToggle(e: Event) {\r\n open.value = (e.target as HTMLDetailsElement).open\r\n}\r\n</script>\r\n\r\n<template>\r\n <details class=\"oc-sidebar-collapsible\" :open=\"open\" @toggle=\"onToggle\">\r\n <summary class=\"oc-sidebar-menu-button\">\r\n <slot name=\"icon\" />\r\n <span class=\"oc-sidebar-menu-label\"><slot name=\"label\">{{ label }}</slot></span>\r\n </summary>\r\n <ul class=\"oc-sidebar-menu-sub\"><slot /></ul>\r\n </details>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Group of sidebar items with an optional heading (`label`). */\r\ndefineProps<{ label?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-sidebar-group\">\r\n <div v-if=\"label\" class=\"oc-sidebar-group-label\">{{ label }}</div>\r\n <slot />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** The <ul class=\"oc-sidebar-menu\">; put <li> elements (each with an OcSidebarMenuButton or OcSidebarCollapsible) inside. */\r\n</script>\r\n\r\n<template>\r\n <ul class=\"oc-sidebar-menu\"><slot /></ul>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Sidebar item: <a> with `href`, otherwise <button>. State: `current` (aria-current=\"page\"), `disabled`.\r\n * Slots: icon (inline svg with class oc-sidebar-menu-icon), default (label). `badge` shows a count pill.\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst props = defineProps<{\r\n href?: string\r\n current?: boolean\r\n disabled?: boolean\r\n large?: boolean\r\n badge?: string | number\r\n}>()\r\nconst tag = computed(() => (props.href ? 'a' : 'button'))\r\n</script>\r\n\r\n<template>\r\n <component\r\n :is=\"tag\"\r\n :class=\"['oc-sidebar-menu-button', large && 'oc-sidebar-menu-button--lg']\"\r\n :href=\"href\"\r\n :type=\"tag === 'button' ? 'button' : undefined\"\r\n :aria-current=\"current ? 'page' : undefined\"\r\n :aria-disabled=\"disabled ? 'true' : undefined\"\r\n >\r\n <slot name=\"icon\" />\r\n <span class=\"oc-sidebar-menu-label\"><slot /></span>\r\n <span v-if=\"badge !== undefined\" class=\"oc-sidebar-menu-badge\">{{ badge }}</span>\r\n </component>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Divider line between sidebar groups. */\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-sidebar-separator\"></div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Loading skeleton. Classes: .oc-skeleton--circle/rect/text/title */\r\nwithDefaults(defineProps<{ variant?: 'text' | 'title' | 'circle' | 'rect' }>(), { variant: 'text' })\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-skeleton', `oc-skeleton--${variant}`]\"></div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Native range input. v-model: number. Keeps --oc-slider-progress in sync (the fill for Chromium/WebKit).\r\n * Native attributes (id, aria-label, disabled...) fall through to the input. Classes: .oc-slider(--vertical)\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(defineProps<{ min?: number; max?: number; step?: number; vertical?: boolean }>(), { min: 0, max: 100 })\r\nconst model = defineModel<number>({ default: 0 })\r\nconst progress = computed(() => {\r\n const span = props.max - props.min\r\n const pct = span > 0 ? ((model.value - props.min) / span) * 100 : 0\r\n return `${Math.min(100, Math.max(0, pct))}%`\r\n})\r\n</script>\r\n\r\n<template>\r\n <input\r\n v-model.number=\"model\"\r\n :class=\"['oc-slider', vertical && 'oc-slider--vertical']\"\r\n type=\"range\"\r\n :min=\"min\"\r\n :max=\"max\"\r\n :step=\"step\"\r\n :style=\"{ '--oc-slider-progress': progress }\"\r\n />\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcSortableRow.vue | Map: tr.oc-sortable-row -> grip cell (button) -> default slot (cells) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Table row with a drag grip. Styling only: listen to @dragstart / @dragover / @drop on the component\r\n * (they fall through to the <tr>) and set `dragging` / `drop` yourself. Emits `grip-keydown` for keyboard moves.\r\n * Classes: tr.oc-sortable-row(.is-dragging/.is-drop-before/.is-drop-after), td.oc-sortable-row-grip-cell, button.oc-sortable-row-grip\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n gripLabel: string\r\n dragging?: boolean\r\n drop?: 'before' | 'after' | null\r\n locked?: boolean\r\n /** Picked up with the keyboard (aria-pressed). Leave undefined when not used. */\r\n grabbed?: boolean\r\n }>(),\r\n // Vue casts a missing boolean prop to false; undefined keeps aria-pressed off the grip.\r\n { grabbed: undefined, drop: null },\r\n)\r\nconst emit = defineEmits<{ 'grip-keydown': [e: KeyboardEvent] }>()\r\n</script>\r\n\r\n<template>\r\n <tr\r\n :class=\"['oc-sortable-row', dragging && 'is-dragging', drop && `is-drop-${drop}`]\"\r\n :draggable=\"locked ? undefined : 'true'\"\r\n >\r\n <td class=\"oc-sortable-row-grip-cell\">\r\n <button\r\n class=\"oc-sortable-row-grip\"\r\n type=\"button\"\r\n :aria-label=\"gripLabel\"\r\n :aria-pressed=\"grabbed\"\r\n :disabled=\"locked\"\r\n @keydown=\"emit('grip-keydown', $event)\"\r\n ></button>\r\n </td>\r\n <slot />\r\n </tr>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcSpecList.vue | Map: groups -> group title -> rows (label, value, note) -->\r\n<script setup lang=\"ts\">\r\n/** Technical specifications in named groups (same markup as snippets/spec-list.html). */\r\nexport interface SpecGroup { title: string; rows: { label: string; value: string; note?: string }[] }\r\ndefineProps<{ groups: SpecGroup[]; stack?: boolean }>()\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-spec-list', stack && 'oc-spec-list--stack']\">\r\n <section v-for=\"(group, g) in groups\" :key=\"g\" class=\"oc-spec-group\">\r\n <h3 class=\"oc-spec-group__title\">{{ group.title }}</h3>\r\n <dl class=\"oc-spec-group__rows\">\r\n <div v-for=\"(row, r) in group.rows\" :key=\"r\" class=\"oc-spec-row\"><dt>{{ row.label }}</dt><dd>{{ row.value }}<small v-if=\"row.note\">{{ row.note }}</small></dd></div>\r\n </dl>\r\n </section>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Loading ring (inherits currentColor). With a `label` it is a role=status; without one it is aria-hidden (e.g. inside a button). Classes: .oc-spinner(--sm/--lg/--xl/--primary/--muted) */\r\ndefineProps<{ size?: 'sm' | 'md' | 'lg' | 'xl'; color?: 'primary' | 'muted'; label?: string }>()\r\n</script>\r\n\r\n<template>\r\n <span\r\n :class=\"['oc-spinner', size && size !== 'md' && `oc-spinner--${size}`, color && `oc-spinner--${color}`]\"\r\n :role=\"label ? 'status' : undefined\"\r\n :aria-label=\"label\"\r\n :aria-hidden=\"label ? undefined : 'true'\"\r\n ></span>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcStackCard.vue | Map: props -> article -> deck (OcMediaThumb cover + count) -> title link + meta -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Stacked deck card for playlists / courses (same markup as snippets/stack-card.html).\r\n * Props: title, href (link covers the card), meta, count (\"12 videos\"), panel (side panel count), thumb (props for OcMediaThumb).\r\n * Slots: count (replaces the count text), meta. Classes: .oc-stack-card(--panel), __deck, __count, __title, __meta\r\n */\r\nimport OcMediaThumb from './OcMediaThumb.vue'\r\n\r\ndefineProps<{ title: string; href: string; meta?: string; count?: string; panel?: boolean; thumb?: Record<string, unknown> }>()\r\n</script>\r\n\r\n<template>\r\n <article :class=\"['oc-stack-card', panel && 'oc-stack-card--panel']\">\r\n <div class=\"oc-stack-card__deck\">\r\n <OcMediaThumb v-bind=\"thumb\" />\r\n <span v-if=\"count || $slots.count\" class=\"oc-stack-card__count\"><slot name=\"count\">{{ count }}</slot></span>\r\n </div>\r\n <div>\r\n <h3 class=\"oc-stack-card__title\"><a :href=\"href\">{{ title }}</a></h3>\r\n <p v-if=\"meta || $slots.meta\" class=\"oc-stack-card__meta\"><slot name=\"meta\">{{ meta }}</slot></p>\r\n </div>\r\n </article>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcStackList.vue | Map: props (items, neutral, size) -> ul.oc-stack-list -> li pills -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Technology pills. Pass `items` (strings or { label, icon }), or your own li.oc-stack-list__item in the default slot.\r\n * Classes: .oc-stack-list (--neutral, --sm), __item, __icon. Accent: class=\"oc-accent--violet\".\r\n */\r\nexport interface StackListItem {\r\n label: string\r\n icon?: string\r\n}\r\nwithDefaults(\r\n defineProps<{\r\n items?: Array<string | StackListItem>\r\n neutral?: boolean\r\n size?: 'default' | 'sm'\r\n }>(),\r\n { items: () => [], size: 'default' },\r\n)\r\nconst label = (item: string | StackListItem) => (typeof item === 'string' ? item : item.label)\r\nconst icon = (item: string | StackListItem) => (typeof item === 'string' ? undefined : item.icon)\r\n</script>\r\n\r\n<template>\r\n <ul :class=\"['oc-stack-list', neutral && 'oc-stack-list--neutral', size === 'sm' && 'oc-stack-list--sm']\">\r\n <slot>\r\n <li v-for=\"(item, i) in items\" :key=\"i\" class=\"oc-stack-list__item\">\r\n <span v-if=\"icon(item)\" class=\"oc-stack-list__icon\" aria-hidden=\"true\">{{ icon(item) }}</span>{{ label(item) }}\r\n </li>\r\n </slot>\r\n </ul>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcStatCard.vue | Map: card (div / a / button) -> icon slot -> body (value + trend, label) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Compact KPI tile. With `href` it is a link, with `button` a button (listen to @click), otherwise a div.\r\n * Put several in a <div class=\"oc-stat-card-grid\">. Slots: icon.\r\n * Classes: .oc-stat-card(--accent/--success/--warning/--stripe), -icon, -body, -value, -label, -trend(--up/--down)\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n value: string | number\r\n label: string\r\n trend?: string\r\n trendDirection?: 'up' | 'down'\r\n tone?: 'default' | 'accent' | 'success' | 'warning'\r\n stripe?: boolean\r\n href?: string\r\n button?: boolean\r\n }>(),\r\n { trendDirection: 'up', tone: 'default' },\r\n)\r\nconst tag = computed(() => (props.href ? 'a' : props.button ? 'button' : 'div'))\r\n</script>\r\n\r\n<template>\r\n <component\r\n :is=\"tag\"\r\n :class=\"['oc-stat-card', tone !== 'default' && `oc-stat-card--${tone}`, stripe && 'oc-stat-card--stripe']\"\r\n :href=\"href\"\r\n :type=\"button && !href ? 'button' : undefined\"\r\n >\r\n <span v-if=\"$slots.icon\" class=\"oc-stat-card-icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <span class=\"oc-stat-card-body\">\r\n <span class=\"oc-stat-card-value\">{{ value }}<span v-if=\"trend\" :class=\"['oc-stat-card-trend', `oc-stat-card-trend--${trendDirection}`]\">{{ trend }}</span></span>\r\n <span class=\"oc-stat-card-label\">{{ label }}</span>\r\n </span>\r\n </component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcStatusDot.vue | Map: props (tone, size, label) -> span.oc-status-dot (role=\"img\" with a label, else aria-hidden) -->\r\n<script setup lang=\"ts\">\r\n/** A live state light; --working pulses. With `label` the dot stands alone (role=\"img\"), without it is decoration.\r\n * Classes: .oc-status-dot + --working/--waiting/--done/--error/--idle, --sm/--lg */\r\nwithDefaults(\r\n defineProps<{ tone?: 'default' | 'working' | 'waiting' | 'done' | 'error' | 'idle'; size?: 'sm' | 'md' | 'lg'; label?: string }>(),\r\n { tone: 'default', size: 'md' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <span\r\n :class=\"['oc-status-dot', tone !== 'default' && `oc-status-dot--${tone}`, size !== 'md' && `oc-status-dot--${size}`]\"\r\n :role=\"label ? 'img' : undefined\"\r\n :aria-label=\"label\"\r\n :aria-hidden=\"label ? undefined : 'true'\"\r\n ></span>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcStatus.vue | Map: props (tone, meta) -> p.oc-status -> OcStatusDot + __text (slot) + __meta -->\r\n<script setup lang=\"ts\">\r\n/** Status row: dot + one line of state text (slot, cuts off with …) + optional meta on the right.\r\n * Classes: .oc-status, .oc-status__text, .oc-status__meta */\r\nimport OcStatusDot from './OcStatusDot.vue'\r\n\r\nwithDefaults(defineProps<{ tone?: 'default' | 'working' | 'waiting' | 'done' | 'error' | 'idle'; meta?: string }>(), { tone: 'default' })\r\n</script>\r\n\r\n<template>\r\n <p class=\"oc-status\">\r\n <OcStatusDot :tone=\"tone\" />\r\n <span class=\"oc-status__text\"><slot /></span>\r\n <span v-if=\"meta || $slots.meta\" class=\"oc-status__meta\"><slot name=\"meta\">{{ meta }}</slot></span>\r\n </p>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Wizard step navigation. v-model = index of the active step (0-based); earlier steps are done and\r\n * clickable, later steps are disabled. Classes: .oc-stepper(--horizontal), .oc-stepper-item(--done/--active),\r\n * -label, -meta.\r\n */\r\nexport interface StepperStep {\r\n label: string\r\n /** Small text under the label, e.g. 2/4 */\r\n meta?: string\r\n}\r\ndefineProps<{ steps: StepperStep[]; horizontal?: boolean; label?: string }>()\r\nconst current = defineModel<number>({ default: 0 })\r\n</script>\r\n\r\n<template>\r\n <ol :class=\"['oc-stepper', horizontal && 'oc-stepper--horizontal']\" :aria-label=\"label\">\r\n <li v-for=\"(step, i) in steps\" :key=\"i\">\r\n <button\r\n :class=\"['oc-stepper-item', i < current && 'oc-stepper-item--done', i === current && 'oc-stepper-item--active']\"\r\n type=\"button\"\r\n :aria-current=\"i === current ? 'step' : undefined\"\r\n :disabled=\"i > current\"\r\n @click=\"current = i\"\r\n >\r\n <span v-if=\"step.meta\">\r\n <span class=\"oc-stepper-label\">{{ step.label }}</span>\r\n <span class=\"oc-stepper-meta\">{{ step.meta }}</span>\r\n </span>\r\n <span v-else class=\"oc-stepper-label\">{{ step.label }}</span>\r\n </button>\r\n </li>\r\n </ol>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcStock.vue | Map: level -> default text -> dot, text and note -->\r\n<script setup lang=\"ts\">\r\n/** Stock status with a colored dot (same markup as snippets/stock.html). Default slot = the text. */\r\nconst props = withDefaults(defineProps<{ level?: 'ok' | 'low' | 'out' | 'order'; badge?: boolean; note?: string }>(), { level: 'ok' })\r\nconst TEXT = { ok: 'In stock', low: 'Low stock', out: 'Out of stock', order: 'On order' } as const\r\n</script>\r\n\r\n<template>\r\n <span :class=\"['oc-stock', badge && 'oc-stock--badge']\" :data-level=\"props.level === 'ok' ? undefined : props.level\">\r\n <slot>{{ TEXT[props.level] }}</slot>\r\n <span v-if=\"note\" class=\"oc-stock__note\"> · {{ note }}</span>\r\n </span>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Toggle switch on a checkbox (role=\"switch\"). v-model: boolean. Extra attributes go to the input. */\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nconst model = defineModel<boolean>({ default: false })\r\nconst { root, control } = useAttrsSplit()\r\n</script>\r\n\r\n<template>\r\n <label v-bind=\"root\" class=\"oc-switch\">\r\n <input v-bind=\"control\" v-model=\"model\" type=\"checkbox\" role=\"switch\" />\r\n <span class=\"oc-switch-track\"></span>\r\n </label>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Data table: sortable header (v-model:sort), row selection (v-model:selected), row actions, empty state,\r\n * density modifiers. Slots: `cell-<key>` (scoped: { row, value }), `actions` (scoped: { row }), `empty`.\r\n * Classes: .oc-table-wrap > .oc-table(--striped/--compact/--borderless/--sticky), .oc-table-sort,\r\n * .oc-table-actions, .oc-table-empty; aria-sort / aria-selected / data-numeric attributes.\r\n */\r\nimport { computed, useSlots } from 'vue'\r\n\r\nexport interface TableColumn {\r\n key: string\r\n label: string\r\n sortable?: boolean\r\n numeric?: boolean\r\n width?: string\r\n}\r\nexport interface TableSort {\r\n key: string\r\n direction: 'ascending' | 'descending'\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n columns: TableColumn[]\r\n rows: Record<string, any>[]\r\n rowKey?: string\r\n caption?: string\r\n striped?: boolean\r\n compact?: boolean\r\n borderless?: boolean\r\n sticky?: boolean\r\n selectable?: boolean\r\n actionsLabel?: string\r\n selectAllLabel?: string\r\n }>(),\r\n { rowKey: 'id', actionsLabel: 'Actions', selectAllLabel: 'Select all' },\r\n)\r\nconst selected = defineModel<(string | number)[]>('selected', { default: () => [] })\r\nconst sort = defineModel<TableSort | null>('sort', { default: null })\r\nconst slots = useSlots()\r\n\r\nconst hasActions = computed(() => !!slots.actions)\r\nconst colspan = computed(() => props.columns.length + (props.selectable ? 1 : 0) + (hasActions.value ? 1 : 0))\r\nconst allSelected = computed(() => props.rows.length > 0 && props.rows.every((r) => selected.value.includes(r[props.rowKey])))\r\n\r\nfunction toggleAll(e: Event) {\r\n selected.value = (e.target as HTMLInputElement).checked ? props.rows.map((r) => r[props.rowKey]) : []\r\n}\r\nfunction toggleRow(id: string | number, checked: boolean) {\r\n selected.value = checked ? [...selected.value, id] : selected.value.filter((x) => x !== id)\r\n}\r\nfunction ariaSort(key: string) {\r\n return sort.value?.key === key ? sort.value.direction : undefined\r\n}\r\nfunction toggleSort(e: Event, key: string) {\r\n e.preventDefault()\r\n const next = sort.value?.key === key && sort.value.direction === 'ascending' ? 'descending' : 'ascending'\r\n sort.value = { key, direction: next }\r\n}\r\nfunction rowLabel(row: Record<string, any>) {\r\n return `Select ${String(row[props.columns[0]?.key] ?? '')}`.trim()\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-table-wrap\">\r\n <table\r\n :class=\"['oc-table', striped && 'oc-table--striped', compact && 'oc-table--compact', borderless && 'oc-table--borderless', sticky && 'oc-table--sticky']\"\r\n >\r\n <caption v-if=\"caption\">{{ caption }}</caption>\r\n <thead>\r\n <tr>\r\n <th v-if=\"selectable\" style=\"width: 2.5rem\">\r\n <input class=\"oc-checkbox\" type=\"checkbox\" :checked=\"allSelected\" :aria-label=\"selectAllLabel\" @change=\"toggleAll\" />\r\n </th>\r\n <th\r\n v-for=\"col in columns\"\r\n :key=\"col.key\"\r\n :aria-sort=\"ariaSort(col.key)\"\r\n :data-numeric=\"col.numeric ? '' : undefined\"\r\n :style=\"col.width ? { width: col.width } : undefined\"\r\n >\r\n <a v-if=\"col.sortable\" class=\"oc-table-sort\" :href=\"`?sort=${col.key}`\" @click=\"toggleSort($event, col.key)\">{{ col.label }}</a>\r\n <template v-else>{{ col.label }}</template>\r\n </th>\r\n <th v-if=\"hasActions\"><span class=\"oc-visually-hidden\">{{ actionsLabel }}</span></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n v-for=\"row in rows\"\r\n :key=\"row[rowKey]\"\r\n :aria-selected=\"selected.includes(row[rowKey]) ? 'true' : undefined\"\r\n >\r\n <td v-if=\"selectable\">\r\n <input\r\n class=\"oc-checkbox\"\r\n type=\"checkbox\"\r\n :checked=\"selected.includes(row[rowKey])\"\r\n :aria-label=\"rowLabel(row)\"\r\n @change=\"toggleRow(row[rowKey], ($event.target as HTMLInputElement).checked)\"\r\n />\r\n </td>\r\n <td v-for=\"col in columns\" :key=\"col.key\" :data-numeric=\"col.numeric ? '' : undefined\">\r\n <slot :name=\"`cell-${col.key}`\" :row=\"row\" :value=\"row[col.key]\">{{ row[col.key] }}</slot>\r\n </td>\r\n <td v-if=\"hasActions\" class=\"oc-table-actions\"><slot name=\"actions\" :row=\"row\" /></td>\r\n </tr>\r\n <tr v-if=\"rows.length === 0 && $slots.empty\" class=\"oc-table-empty\">\r\n <td :colspan=\"colspan\"><slot name=\"empty\" :row=\"{}\" /></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTableActions.vue | Map: td.oc-table-actions -> icon actions (default slot) OR overflow trigger + popover menu (default slot = menu items) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Row actions cell. Two modes:\r\n * - no `menuLabel`: the default slot holds icon actions (`a` / `button` with class oc-table-actions-icon(--primary/--success/--destructive)).\r\n * - with `menuLabel`: a three dots trigger opens a native popover; the default slot holds `.oc-dropdown-item`s.\r\n * Classes: td.oc-table-actions(--icons), .oc-table-actions-icon, .oc-table-actions-more, .oc-dropdown-menu[popover]\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineProps<{\r\n /** Accessible name of the overflow trigger, e.g. \"Actions for Ada\". Turns on menu mode. */\r\n menuLabel?: string\r\n}>()\r\nconst menuId = useUid('oc-table-actions-menu')\r\n</script>\r\n\r\n<template>\r\n <td :class=\"['oc-table-actions', !menuLabel && 'oc-table-actions--icons']\">\r\n <template v-if=\"menuLabel\">\r\n <button class=\"oc-table-actions-more\" type=\"button\" :popovertarget=\"menuId\" :aria-label=\"menuLabel\"></button>\r\n <div :id=\"menuId\" class=\"oc-dropdown-menu\" popover><slot /></div>\r\n </template>\r\n <slot v-else />\r\n </td>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTableCompact.vue | Map: wrapper div -> table.oc-table (thead from columns, tbody from rows, tfoot from footer) OR default slot -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Small striped table for inside cards. Pass `columns` + `rows` (+ `footer` total row), or put your own\r\n * <table class=\"oc-table\"> in the default slot. Scoped slot `cell` ({ row, column }) customises body cells.\r\n * Classes: .oc-table-compact(--bordered/--plain), .oc-table-compact-muted, [data-numeric], [data-wrap]\r\n */\r\nexport interface TableCompactColumn {\r\n key: string\r\n label: string\r\n numeric?: boolean\r\n wrap?: boolean\r\n}\r\n\r\nwithDefaults(\r\n defineProps<{\r\n columns?: TableCompactColumn[]\r\n rows?: Array<Record<string, unknown>>\r\n footer?: Record<string, unknown>\r\n bordered?: boolean\r\n plain?: boolean\r\n }>(),\r\n { rows: () => [] },\r\n)\r\n// data-* attributes only when switched on (an empty string means \"present\").\r\nconst cellAttrs = (c: TableCompactColumn) => ({ 'data-numeric': c.numeric ? '' : undefined, 'data-wrap': c.wrap ? '' : undefined })\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-table-compact', bordered && 'oc-table-compact--bordered', plain && 'oc-table-compact--plain']\">\r\n <table v-if=\"columns\" class=\"oc-table\">\r\n <thead>\r\n <tr><th v-for=\"c in columns\" :key=\"c.key\" v-bind=\"cellAttrs(c)\">{{ c.label }}</th></tr>\r\n </thead>\r\n <tbody>\r\n <tr v-for=\"(row, i) in rows\" :key=\"i\">\r\n <td v-for=\"c in columns\" :key=\"c.key\" v-bind=\"cellAttrs(c)\"><slot name=\"cell\" :row=\"row\" :column=\"c\">{{ row[c.key] }}</slot></td>\r\n </tr>\r\n </tbody>\r\n <tfoot v-if=\"footer\">\r\n <tr><td v-for=\"c in columns\" :key=\"c.key\" v-bind=\"cellAttrs(c)\">{{ footer[c.key] }}</td></tr>\r\n </tfoot>\r\n </table>\r\n <slot v-else />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Tabs with radio inputs and :has() (the CSS switches the panels). v-model = value of the active tab.\r\n * One named slot per tab value renders its panel: <template #account>...</template>.\r\n * Classes: .oc-tabset, .oc-tab-list, .oc-tab-trigger, .oc-tab-panel\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface TabItem {\r\n label: string\r\n /** Slot name and model value; defaults to the label. */\r\n value?: string\r\n}\r\ndefineProps<{ tabs: TabItem[]; name?: string }>()\r\nconst model = defineModel<string>()\r\nconst uid = useUid('oc-tabs')\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-tabset\">\r\n <div class=\"oc-tab-list\" role=\"tablist\">\r\n <label v-for=\"(tab, i) in tabs\" :key=\"tab.value ?? tab.label\" class=\"oc-tab-trigger\">\r\n <input\r\n v-model=\"model\"\r\n type=\"radio\"\r\n :name=\"name ?? uid\"\r\n :value=\"tab.value ?? tab.label\"\r\n :checked=\"model === undefined && i === 0\"\r\n />\r\n {{ tab.label }}\r\n </label>\r\n </div>\r\n <div v-for=\"tab in tabs\" :key=\"tab.value ?? tab.label\" class=\"oc-tab-panel\">\r\n <slot :name=\"tab.value ?? tab.label\" />\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Chips with remove buttons and a free-text input with suggestions. v-model: string[].\r\n * Enter or comma adds the typed tag, Backspace on an empty input removes the last one.\r\n * Classes: .oc-tag, .oc-tag-remove, .oc-tag-input, .oc-tag-suggestions\r\n */\r\nimport { computed, ref } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n suggestions?: string[]\r\n placeholder?: string\r\n label?: string\r\n }>(),\r\n { suggestions: () => [], placeholder: 'Add tag...', label: 'Add tag' },\r\n)\r\nconst tags = defineModel<string[]>({ default: () => [] })\r\nconst draft = ref('')\r\nconst available = computed(() => props.suggestions.filter((s) => !tags.value.includes(s)))\r\n\r\nfunction add(value: string) {\r\n const tag = value.trim()\r\n if (tag && !tags.value.includes(tag)) tags.value = [...tags.value, tag]\r\n draft.value = ''\r\n}\r\nfunction remove(tag: string) {\r\n tags.value = tags.value.filter((t) => t !== tag)\r\n}\r\nfunction onKeydown(e: KeyboardEvent) {\r\n if (e.key === 'Enter' || e.key === ',') {\r\n e.preventDefault()\r\n add(draft.value)\r\n } else if (e.key === 'Backspace' && !draft.value && tags.value.length) {\r\n tags.value = tags.value.slice(0, -1)\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-tag-input\">\r\n <span v-for=\"tag in tags\" :key=\"tag\" class=\"oc-tag\">\r\n {{ tag }}\r\n <button class=\"oc-tag-remove\" type=\"button\" :aria-label=\"`Remove ${tag}`\" @click=\"remove(tag)\">×</button>\r\n </span>\r\n <input v-model=\"draft\" type=\"text\" :placeholder=\"placeholder\" :aria-label=\"label\" @keydown=\"onKeydown\" />\r\n </div>\r\n <div v-if=\"available.length\" class=\"oc-tag-suggestions\">\r\n <button v-for=\"s in available\" :key=\"s\" type=\"button\" @click=\"add(s)\">{{ s }}</button>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTerminalLog.vue | Map: props -> frame -> bar (dots, title, status) -> body (lines + prompt) -> auto-scroll -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Dark console window (same markup as snippets/terminal-log.html).\r\n * Props: lines ({ level: info|success|warn|error|debug, message, time?, label? }[]), title, status (\"Live\" + pulsing dot),\r\n * prompt (text, or true for an empty prompt with cursor), height (max body height), autoScroll (default true), label.\r\n * Classes: .oc-terminal-log, __bar, __title, __status, __body, __line(--info/--success/--warn/--error/--debug), __time, __level, __msg, __prompt\r\n */\r\nimport { nextTick, ref, watch } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n lines: { level: 'info' | 'success' | 'warn' | 'error' | 'debug'; message: string; time?: string; label?: string }[]\r\n title?: string\r\n status?: string\r\n prompt?: string | boolean\r\n height?: string\r\n autoScroll?: boolean\r\n label?: string\r\n }>(),\r\n { autoScroll: true, label: 'Log output', prompt: false },\r\n)\r\nconst body = ref<HTMLDivElement | null>(null)\r\n// Keep the newest line in view.\r\nwatch(\r\n () => props.lines.length,\r\n async () => {\r\n await nextTick()\r\n if (props.autoScroll && body.value) body.value.scrollTop = body.value.scrollHeight\r\n },\r\n)\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-terminal-log\" :style=\"height ? { '--oc-terminal-log-height': height } : undefined\">\r\n <div class=\"oc-terminal-log__bar\">\r\n <i /><i /><i />\r\n <span v-if=\"title\" class=\"oc-terminal-log__title\">{{ title }}</span>\r\n <span v-if=\"status\" class=\"oc-terminal-log__status\">{{ status }}</span>\r\n </div>\r\n <div ref=\"body\" class=\"oc-terminal-log__body\" role=\"log\" aria-live=\"polite\" :aria-label=\"label\" tabindex=\"0\">\r\n <p v-for=\"(l, i) in lines\" :key=\"i\" :class=\"['oc-terminal-log__line', `oc-terminal-log__line--${l.level}`]\">\r\n <time v-if=\"l.time\" class=\"oc-terminal-log__time\">{{ l.time }}</time>\r\n <span class=\"oc-terminal-log__level\">{{ l.label ?? (l.level === 'success' ? 'ok' : l.level) }}</span>\r\n <span class=\"oc-terminal-log__msg\">{{ l.message }}</span>\r\n </p>\r\n <p v-if=\"prompt !== false\" class=\"oc-terminal-log__prompt\">{{ prompt === true ? '' : prompt }}</p>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Multi-line input (uses .oc-input). v-model. */\r\ndefineProps<{ error?: boolean }>()\r\nconst model = defineModel<string>()\r\n</script>\r\n\r\n<template>\r\n <textarea v-model=\"model\" :class=\"['oc-input', error && 'oc-input--error']\" :aria-invalid=\"error ? 'true' : undefined\"></textarea>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * System / light / dark switch (CSS only: color-scheme + :has()). v-model: 'system' | 'light' | 'dark'.\r\n * `options` limits the choices; `as=\"div\"` renders a role=\"radiogroup\" div instead of a fieldset.\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\ntype Theme = 'system' | 'light' | 'dark'\r\nconst labels: Record<Theme, string> = { system: 'System', light: 'Light', dark: 'Dark' }\r\n\r\nwithDefaults(\r\n defineProps<{\r\n options?: Theme[]\r\n as?: 'fieldset' | 'div'\r\n label?: string\r\n name?: string\r\n }>(),\r\n { options: () => ['system', 'light', 'dark'], as: 'fieldset', label: 'Color theme' },\r\n)\r\nconst model = defineModel<Theme>({ default: 'system' })\r\nconst uid = useUid('oc-theme')\r\n</script>\r\n\r\n<template>\r\n <component :is=\"as\" class=\"oc-theme-switch\" :role=\"as === 'div' ? 'radiogroup' : undefined\" :aria-label=\"label\">\r\n <label v-for=\"o in options\" :key=\"o\">\r\n <input v-model=\"model\" type=\"radio\" :name=\"name ?? uid\" :value=\"o\" />\r\n {{ labels[o] }}\r\n </label>\r\n </component>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTimeInput.vue | Map: props + model -> format helpers -> template (text field + datalist) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * 24h time field (HH:mm). v-model: \"HH:mm\" or \"\". `slots` fills a datalist with suggestions.\r\n * Same markup as packages/ui/snippets/time-input.html. JS only adds the colon (\"0930\" -> \"09:30\").\r\n * All attributes go to the input.\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\ndefineProps<{ slots?: string[]; error?: boolean; placeholder?: string }>()\r\nconst model = defineModel<string>({ default: '' })\r\nconst listId = useUid('oc-time')\r\n\r\n/** Up to 4 digits with a colon after the first two. A picked datalist option is kept as is. */\r\nfunction onInput(e: Event) {\r\n const input = e.target as HTMLInputElement\r\n const v = input.value\r\n const digits = v.replace(/\\D/g, '').slice(0, 4)\r\n model.value = /^\\d{2}:\\d{2}$/.test(v) ? v : digits.length <= 2 ? digits : `${digits.slice(0, 2)}:${digits.slice(2)}`\r\n input.value = model.value\r\n}\r\n\r\n/** On blur: \"9\" -> \"09:00\", \"930\" -> \"09:30\". */\r\nfunction onBlur() {\r\n const d = model.value.replace(/\\D/g, '')\r\n if (d.length === 1 || d.length === 2) model.value = `${d.padStart(2, '0')}:00`\r\n else if (d.length === 3) model.value = `0${d[0]}:${d.slice(1)}`\r\n}\r\n</script>\r\n\r\n<template>\r\n <input\r\n v-bind=\"$attrs\"\r\n class=\"oc-input oc-time-input\"\r\n type=\"text\"\r\n inputmode=\"numeric\"\r\n maxlength=\"5\"\r\n pattern=\"([01][0-9]|2[0-3]):[0-5][0-9]\"\r\n :placeholder=\"placeholder ?? 'hh:mm'\"\r\n :list=\"slots?.length ? listId : undefined\"\r\n :aria-invalid=\"error ? 'true' : undefined\"\r\n :value=\"model\"\r\n @input=\"onInput\"\r\n @blur=\"onBlur\"\r\n />\r\n <datalist v-if=\"slots?.length\" :id=\"listId\">\r\n <option v-for=\"s in slots\" :key=\"s\" :value=\"s\"></option>\r\n </datalist>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTimeline.vue | Map: props (items, size, accent) -> ol.oc-timeline -> li.oc-timeline__item -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Vertical timeline. Pass `items`, or put your own li.oc-timeline__item elements in the default slot.\r\n * Classes: .oc-timeline (--lg, --accent), .oc-timeline__item (--current), __date, __title, __text\r\n */\r\nexport interface TimelineEntry {\r\n date: string\r\n /** Renders a <time datetime> when set. */\r\n dateTime?: string\r\n title?: string\r\n text?: string\r\n current?: boolean\r\n}\r\nwithDefaults(\r\n defineProps<{\r\n items?: TimelineEntry[]\r\n size?: 'default' | 'lg'\r\n accent?: boolean\r\n }>(),\r\n { items: () => [], size: 'default', accent: false },\r\n)\r\n</script>\r\n\r\n<template>\r\n <ol :class=\"['oc-timeline', size === 'lg' && 'oc-timeline--lg', accent && 'oc-timeline--accent']\">\r\n <slot>\r\n <li v-for=\"(item, i) in items\" :key=\"i\" :class=\"['oc-timeline__item', item.current && 'oc-timeline__item--current']\">\r\n <time v-if=\"item.dateTime\" class=\"oc-timeline__date\" :datetime=\"item.dateTime\">{{ item.date }}</time>\r\n <span v-else class=\"oc-timeline__date\">{{ item.date }}</span>\r\n <h3 v-if=\"item.title\" class=\"oc-timeline__title\">{{ item.title }}</h3>\r\n <p v-if=\"item.text\" class=\"oc-timeline__text\">{{ item.text }}</p>\r\n </li>\r\n </slot>\r\n </ol>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTitlebar.vue | Map: props (title, subtitle, bordered, size) -> header.oc-titlebar -> __main (icon slot, title, subtitle) -> __actions (default slot) -->\r\n<script setup lang=\"ts\">\r\n/** Drag area of a frameless desktop window (app-region: drag); buttons in it stay clickable.\r\n * Slots: icon, title, subtitle, default (the OcTitlebarButton actions).\r\n * Classes: .oc-titlebar(--bordered/--sm), __main, __icon, __title, __subtitle, __actions */\r\nwithDefaults(defineProps<{ title?: string; subtitle?: string; bordered?: boolean; size?: 'sm' | 'md' }>(), { size: 'md' })\r\n</script>\r\n\r\n<template>\r\n <header :class=\"['oc-titlebar', bordered && 'oc-titlebar--bordered', size === 'sm' && 'oc-titlebar--sm']\">\r\n <div class=\"oc-titlebar__main\">\r\n <span v-if=\"$slots.icon\" class=\"oc-titlebar__icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <span v-if=\"title || $slots.title\" class=\"oc-titlebar__title\"><slot name=\"title\">{{ title }}</slot></span>\r\n <span v-if=\"subtitle || $slots.subtitle\" class=\"oc-titlebar__subtitle\"><slot name=\"subtitle\">{{ subtitle }}</slot></span>\r\n </div>\r\n <div v-if=\"$slots.default\" class=\"oc-titlebar__actions\"><slot /></div>\r\n </header>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTitlebarBody.vue | Map: div.oc-titlebar-body -> slot -->\r\n<script setup lang=\"ts\">\r\n/** The part of the window that scrolls; the title bar gets its hairline once it does. Class: .oc-titlebar-body */\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-titlebar-body\"><slot /></div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTitlebarButton.vue | Map: props (label, close) -> button.oc-titlebar__btn -> slot (icon) -->\r\n<script setup lang=\"ts\">\r\n/** Compact icon button in the title bar; `label` names it for screen readers, `close` turns it red on hover.\r\n * Classes: .oc-titlebar__btn(--close) */\r\ndefineProps<{ label: string; close?: boolean }>()\r\n</script>\r\n\r\n<template>\r\n <button type=\"button\" :class=\"['oc-titlebar__btn', close && 'oc-titlebar__btn--close']\" :aria-label=\"label\" :title=\"label\"><slot /></button>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTitlebarWindow.vue | Map: div.oc-titlebar-window -> slot (OcTitlebar + OcTitlebarBody) -->\r\n<script setup lang=\"ts\">\r\n/** Column around the title bar and the body, so the bar sees the body scroll. Class: .oc-titlebar-window */\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-titlebar-window\"><slot /></div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * One notification. Emits `dismiss`. role=\"alert\" for errors, role=\"status\" otherwise.\r\n * Slots: icon, title, default (description). Classes: .oc-toast--success/error/warning/info, -icon, -body,\r\n * -title, -description, -close\r\n */\r\nconst glyphs = { success: '✓', error: '!', warning: '!', info: 'i' } as const\r\n\r\nwithDefaults(\r\n defineProps<{\r\n variant?: 'success' | 'error' | 'warning' | 'info'\r\n title?: string\r\n description?: string\r\n dismissible?: boolean\r\n dismissLabel?: string\r\n }>(),\r\n { variant: 'info', dismissible: true, dismissLabel: 'Dismiss' },\r\n)\r\ndefineEmits<{ dismiss: [] }>()\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-toast', `oc-toast--${variant}`]\" :role=\"variant === 'error' ? 'alert' : 'status'\">\r\n <span class=\"oc-toast-icon\" aria-hidden=\"true\"><slot name=\"icon\">{{ glyphs[variant] }}</slot></span>\r\n <div class=\"oc-toast-body\">\r\n <p class=\"oc-toast-title\"><slot name=\"title\">{{ title }}</slot></p>\r\n <p v-if=\"description || $slots.default\" class=\"oc-toast-description\"><slot>{{ description }}</slot></p>\r\n </div>\r\n <button v-if=\"dismissible\" class=\"oc-toast-close\" type=\"button\" :aria-label=\"dismissLabel\" @click=\"$emit('dismiss')\">×</button>\r\n </div>\r\n</template>\r\n","import { reactive, readonly } from 'vue'\r\n\r\nexport type ToastVariant = 'success' | 'error' | 'warning' | 'info'\r\n\r\nexport interface ToastOptions {\r\n title: string\r\n description?: string\r\n variant?: ToastVariant\r\n /** Milliseconds before auto-dismiss. 0 keeps the toast until dismissed. Default 5000. */\r\n duration?: number\r\n}\r\n\r\nexport interface ToastItem extends Required<Pick<ToastOptions, 'title' | 'variant'>> {\r\n id: number\r\n description?: string\r\n duration: number\r\n}\r\n\r\nconst state = reactive<{ toasts: ToastItem[] }>({ toasts: [] })\r\nconst timers = new Map<number, ReturnType<typeof setTimeout>>()\r\nlet nextId = 1\r\n\r\nfunction dismiss(id: number) {\r\n const timer = timers.get(id)\r\n if (timer) clearTimeout(timer)\r\n timers.delete(id)\r\n const i = state.toasts.findIndex((t) => t.id === id)\r\n if (i !== -1) state.toasts.splice(i, 1)\r\n}\r\n\r\nfunction push(options: ToastOptions): number {\r\n const id = nextId++\r\n const item: ToastItem = {\r\n id,\r\n title: options.title,\r\n description: options.description,\r\n variant: options.variant ?? 'info',\r\n duration: options.duration ?? 5000,\r\n }\r\n state.toasts.push(item)\r\n if (item.duration > 0) timers.set(id, setTimeout(() => dismiss(id), item.duration))\r\n return id\r\n}\r\n\r\nfunction clear() {\r\n for (const t of [...state.toasts]) dismiss(t.id)\r\n}\r\n\r\nconst shortcut =\r\n (variant: ToastVariant) =>\r\n (title: string, description?: string, options: Omit<ToastOptions, 'title' | 'description' | 'variant'> = {}) =>\r\n push({ ...options, title, description, variant })\r\n\r\n/** Shared toast queue. Render it once with <OcToastContainer />. */\r\nexport function useToast() {\r\n return {\r\n toasts: readonly(state).toasts,\r\n push,\r\n dismiss,\r\n clear,\r\n success: shortcut('success'),\r\n error: shortcut('error'),\r\n warning: shortcut('warning'),\r\n info: shortcut('info'),\r\n }\r\n}\r\n","<script setup lang=\"ts\">\r\n/** Fixed stack that renders the useToast() queue. Mount once near the app root. Classes: .oc-toast-container(--top/--static) */\r\nimport { useToast } from '../composables/useToast'\r\nimport OcToast from './OcToast.vue'\r\n\r\nwithDefaults(defineProps<{ position?: 'bottom' | 'top'; static?: boolean }>(), { position: 'bottom' })\r\nconst { toasts, dismiss } = useToast()\r\n</script>\r\n\r\n<template>\r\n <div :class=\"['oc-toast-container', position === 'top' && 'oc-toast-container--top', static && 'oc-toast-container--static']\">\r\n <OcToast\r\n v-for=\"t in toasts\"\r\n :key=\"t.id\"\r\n :variant=\"t.variant\"\r\n :title=\"t.title\"\r\n :description=\"t.description\"\r\n @dismiss=\"dismiss(t.id)\"\r\n />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Toggle. Inside OcToggleGroup (give it a `value`) it is a label around a radio/checkbox bound to the group's v-model.\r\n * Standalone: v-model boolean on a label + checkbox, or `button` for a <button aria-pressed>.\r\n * Pass an aria-label attribute for icon-only toggles (it lands on the input/button).\r\n * Classes: .oc-toggle(--outline/--sm/--lg/--icon)\r\n */\r\nimport { computed, inject } from 'vue'\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\nimport { toggleGroupKey } from '../composables/keys'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\nconst props = defineProps<{\r\n value?: string\r\n variant?: 'default' | 'outline'\r\n size?: 'sm' | 'md' | 'lg'\r\n icon?: boolean\r\n button?: boolean\r\n disabled?: boolean\r\n}>()\r\nconst pressed = defineModel<boolean>({ default: false })\r\nconst group = inject(toggleGroupKey, null)\r\nconst { root, control } = useAttrsSplit()\r\n\r\nconst classes = computed(() => [\r\n 'oc-toggle',\r\n props.variant === 'outline' && 'oc-toggle--outline',\r\n props.size && props.size !== 'md' && `oc-toggle--${props.size}`,\r\n props.icon && 'oc-toggle--icon',\r\n])\r\nconst inGroup = computed(() => !!group && props.value !== undefined)\r\nconst isOn = computed(() => (inGroup.value ? group!.values.value.includes(props.value!) : pressed.value))\r\nfunction onChange() {\r\n if (inGroup.value) group!.toggle(props.value!)\r\n else pressed.value = !pressed.value\r\n}\r\n</script>\r\n\r\n<template>\r\n <button\r\n v-if=\"button && !inGroup\"\r\n v-bind=\"{ ...root, ...control }\"\r\n type=\"button\"\r\n :class=\"classes\"\r\n :aria-pressed=\"pressed ? 'true' : 'false'\"\r\n :disabled=\"disabled\"\r\n @click=\"pressed = !pressed\"\r\n >\r\n <slot />\r\n </button>\r\n <label v-else v-bind=\"root\" :class=\"classes\">\r\n <input\r\n v-bind=\"control\"\r\n :type=\"inGroup && group!.type.value === 'single' ? 'radio' : 'checkbox'\"\r\n :name=\"inGroup ? group!.name.value : (control.name as string | undefined)\"\r\n :value=\"value\"\r\n :checked=\"isOn\"\r\n :disabled=\"disabled\"\r\n @change=\"onChange\"\r\n />\r\n <slot />\r\n </label>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcToggleField.vue | Map: props + model -> template (label row: text + span.oc-switch) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Settings row: title, description and a switch. v-model: boolean. Slots `label` / `description` override the props.\r\n * Same markup as packages/ui/snippets/toggle-field.html. class/style on the row, other attributes on the checkbox.\r\n */\r\nimport { useAttrsSplit } from '../composables/useAttrsSplit'\r\nimport { useUid } from '../composables/useUid'\r\n\r\ndefineOptions({ inheritAttrs: false })\r\ndefineProps<{ label?: string; description?: string; card?: boolean; reverse?: boolean }>()\r\nconst model = defineModel<boolean>({ default: false })\r\nconst { root, control } = useAttrsSplit()\r\nconst descId = useUid('oc-toggle-field')\r\n</script>\r\n\r\n<template>\r\n <label v-bind=\"root\" :class=\"['oc-toggle-field', card && 'oc-toggle-field--card', reverse && 'oc-toggle-field--reverse']\">\r\n <span class=\"oc-toggle-field-text\">\r\n <span class=\"oc-toggle-field-label\"><slot name=\"label\">{{ label }}</slot></span>\r\n <span v-if=\"description || $slots.description\" :id=\"descId\" class=\"oc-toggle-field-description\"><slot name=\"description\">{{ description }}</slot></span>\r\n </span>\r\n <span class=\"oc-switch\">\r\n <input v-bind=\"control\" v-model=\"model\" type=\"checkbox\" role=\"switch\" :aria-describedby=\"description || $slots.description ? descId : undefined\" />\r\n <span class=\"oc-switch-track\"></span>\r\n </span>\r\n </label>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Connected toggles. v-model = array of pressed values (type \"multiple\", checkbox inputs) or a single value\r\n * string (type \"single\", radio inputs). Put OcToggle items with a `value` inside.\r\n * Classes: .oc-toggle-group(--spaced)\r\n */\r\nimport { computed, provide } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\nimport { toggleGroupKey } from '../composables/keys'\r\n\r\nconst props = withDefaults(defineProps<{ type?: 'single' | 'multiple'; spaced?: boolean; label?: string; name?: string }>(), { type: 'multiple' })\r\nconst model = defineModel<string | string[]>()\r\nconst uid = useUid('oc-toggle')\r\n\r\nconst values = computed(() => (Array.isArray(model.value) ? model.value : model.value ? [model.value] : []))\r\nfunction toggle(value: string) {\r\n if (props.type === 'single') {\r\n model.value = value\r\n } else {\r\n const list = values.value\r\n model.value = list.includes(value) ? list.filter((v) => v !== value) : [...list, value]\r\n }\r\n}\r\nprovide(toggleGroupKey, {\r\n values,\r\n type: computed(() => props.type),\r\n name: computed(() => props.name ?? uid),\r\n toggle,\r\n})\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"['oc-toggle-group', spaced && 'oc-toggle-group--spaced']\"\r\n :role=\"type === 'single' ? 'radiogroup' : 'group'\"\r\n :aria-label=\"label\"\r\n >\r\n <slot />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** CSS-only tooltip: wraps the default slot and shows `text` via data-tooltip. `multiline` keeps its line breaks;\r\n * `heading` puts a title above `text` (.oc-tooltip__content); `side` is the preferred side (default top), with\r\n * anchor positioning it flips when there is no room. */\r\ndefineProps<{ text: string; multiline?: boolean; heading?: string; side?: 'top' | 'bottom' | 'left' | 'right' }>()\r\n</script>\r\n\r\n<template>\r\n <span\r\n :class=\"['oc-tooltip', { 'oc-tooltip--multiline': multiline && !heading, [`oc-tooltip--${side}`]: side && side !== 'top' }]\"\r\n :data-tooltip=\"heading ? undefined : text\"\r\n >\r\n <slot />\r\n <span v-if=\"heading\" class=\"oc-tooltip__content\" role=\"tooltip\"><span class=\"oc-tooltip__title\">{{ heading }}</span>{{ text }}</span>\r\n </span>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTopProgress.vue | Map: progress.oc-top-progress -> phase (hidden / active / done) -> fade-out timer -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Thin page-top loading bar. `active` shows it; when `active` turns false the bar fades out (.is-done)\r\n * and is hidden after `fadeMs`. Without `value` it is indeterminate.\r\n * Classes: progress.oc-top-progress(--success/--warning/--danger/--brand/--lg/--static), .is-done, [hidden]\r\n */\r\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n active?: boolean\r\n value?: number\r\n max?: number\r\n tone?: 'default' | 'success' | 'warning' | 'danger' | 'brand'\r\n large?: boolean\r\n /** In the normal flow (inside a card) instead of fixed at the top. */\r\n static?: boolean\r\n fadeMs?: number\r\n }>(),\r\n { active: true, tone: 'default', fadeMs: 400, value: undefined, max: undefined },\r\n)\r\n\r\nconst phase = ref<'hidden' | 'active' | 'done'>(props.active ? 'active' : 'hidden')\r\nlet timer: ReturnType<typeof setTimeout> | undefined\r\n\r\nwatch(\r\n () => props.active,\r\n (on) => {\r\n clearTimeout(timer)\r\n if (on) {\r\n phase.value = 'active'\r\n return\r\n }\r\n // Only fade out when the bar was visible.\r\n if (phase.value === 'hidden') return\r\n phase.value = 'done'\r\n timer = setTimeout(() => (phase.value = 'hidden'), props.fadeMs)\r\n },\r\n)\r\nonBeforeUnmount(() => clearTimeout(timer))\r\n\r\nconst classes = computed(() => [\r\n 'oc-top-progress',\r\n props.tone !== 'default' && `oc-top-progress--${props.tone}`,\r\n props.large && 'oc-top-progress--lg',\r\n props.static && 'oc-top-progress--static',\r\n phase.value === 'done' && 'is-done',\r\n])\r\n</script>\r\n\r\n<template>\r\n <progress :class=\"classes\" :value=\"value\" :max=\"max\" :hidden=\"phase === 'hidden'\"></progress>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcTree.vue | Map: box (+ head row) -> list -> item: folder (details/summary + nested OcTree) or leaf (div row) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Nested tree list on details / summary. Renders itself recursively for child lists (`nested`).\r\n * Slots (scoped, { item }): icon, actions; plus `head-actions` for the head row.\r\n * Classes: .oc-tree(--quiet/--flush), .oc-tree-head, ul.oc-tree-list, details.oc-tree-node, .oc-tree-row(.is-muted),\r\n * .oc-tree-icon, .oc-tree-label, .oc-tree-count, .oc-tree-actions\r\n */\r\nexport interface OcTreeItem {\r\n label: string\r\n href?: string\r\n count?: string | number\r\n children?: OcTreeItem[]\r\n open?: boolean\r\n current?: boolean\r\n muted?: boolean\r\n}\r\n\r\ndefineOptions({ name: 'OcTree' })\r\ndefineProps<{\r\n items: OcTreeItem[]\r\n head?: string\r\n quiet?: boolean\r\n flush?: boolean\r\n /** Internal: render only the list (used for child lists). */\r\n nested?: boolean\r\n}>()\r\n// Typed slots: the component renders itself, so TypeScript cannot infer these on its own.\r\ndefineSlots<{\r\n icon?(props: { item: OcTreeItem }): unknown\r\n actions?(props: { item: OcTreeItem }): unknown\r\n 'head-actions'?(): unknown\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <ul v-if=\"nested\" class=\"oc-tree-list\">\r\n <li v-for=\"(item, i) in items\" :key=\"i\">\r\n <details v-if=\"item.children?.length\" class=\"oc-tree-node\" :open=\"item.open\">\r\n <summary :class=\"['oc-tree-row', item.muted && 'is-muted']\" :aria-current=\"item.current && !item.href ? 'true' : undefined\">\r\n <span v-if=\"$slots.icon\" class=\"oc-tree-icon\" aria-hidden=\"true\"><slot name=\"icon\" :item=\"item\" /></span>\r\n <span class=\"oc-tree-label\">{{ item.label }}</span>\r\n <span v-if=\"item.count != null\" class=\"oc-tree-count\">{{ item.count }}</span>\r\n <span v-if=\"$slots.actions\" class=\"oc-tree-actions\"><slot name=\"actions\" :item=\"item\" /></span>\r\n </summary>\r\n <OcTree :items=\"item.children\" nested>\r\n <template v-if=\"$slots.icon\" #icon=\"{ item: child }\"><slot name=\"icon\" :item=\"child\" /></template>\r\n <template v-if=\"$slots.actions\" #actions=\"{ item: child }\"><slot name=\"actions\" :item=\"child\" /></template>\r\n </OcTree>\r\n </details>\r\n <div v-else :class=\"['oc-tree-row', item.muted && 'is-muted']\" :aria-current=\"item.current && !item.href ? 'true' : undefined\">\r\n <span v-if=\"$slots.icon\" class=\"oc-tree-icon\" aria-hidden=\"true\"><slot name=\"icon\" :item=\"item\" /></span>\r\n <a v-if=\"item.href\" class=\"oc-tree-label\" :href=\"item.href\" :aria-current=\"item.current ? 'true' : undefined\">{{ item.label }}</a>\r\n <span v-else class=\"oc-tree-label\">{{ item.label }}</span>\r\n <span v-if=\"item.count != null\" class=\"oc-tree-count\">{{ item.count }}</span>\r\n <span v-if=\"$slots.actions\" class=\"oc-tree-actions\"><slot name=\"actions\" :item=\"item\" /></span>\r\n </div>\r\n </li>\r\n </ul>\r\n <div v-else :class=\"['oc-tree', quiet && 'oc-tree--quiet', flush && 'oc-tree--flush']\">\r\n <div v-if=\"head\" class=\"oc-tree-row oc-tree-head\">\r\n <span class=\"oc-tree-label\">{{ head }}</span>\r\n <span v-if=\"$slots['head-actions']\" class=\"oc-tree-actions\"><slot name=\"head-actions\" /></span>\r\n </div>\r\n <OcTree :items=\"items\" nested>\r\n <template v-if=\"$slots.icon\" #icon=\"{ item: child }\"><slot name=\"icon\" :item=\"child\" /></template>\r\n <template v-if=\"$slots.actions\" #actions=\"{ item: child }\"><slot name=\"actions\" :item=\"child\" /></template>\r\n </OcTree>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcUpgradeBanner.vue | Map: aside -> icon slot -> body (title + plan pill, text slot, usage meter) -> actions slot -> dismiss button -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Free-plan limits callout. `dismissible` adds an X that emits `dismiss` (your app hides the banner).\r\n * Slots: icon, default (text, may hold links), actions.\r\n * Classes: .oc-upgrade-banner(--premium/--compact), -icon, -body, -title, -plan, -text, -usage, meter.oc-upgrade-banner-meter, -actions, -dismiss\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n title: string\r\n plan?: string\r\n text?: string\r\n usage?: { label: string; value: number; max: number }\r\n premium?: boolean\r\n compact?: boolean\r\n dismissible?: boolean\r\n dismissLabel?: string\r\n }>(),\r\n { dismissLabel: 'Dismiss' },\r\n)\r\nconst emit = defineEmits<{ dismiss: [] }>()\r\n</script>\r\n\r\n<template>\r\n <aside :class=\"['oc-upgrade-banner', premium && 'oc-upgrade-banner--premium', compact && 'oc-upgrade-banner--compact']\">\r\n <span v-if=\"$slots.icon\" class=\"oc-upgrade-banner-icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <div class=\"oc-upgrade-banner-body\">\r\n <p class=\"oc-upgrade-banner-title\">{{ title }} <span v-if=\"plan\" class=\"oc-upgrade-banner-plan\">{{ plan }}</span></p>\r\n <p v-if=\"$slots.default || text\" class=\"oc-upgrade-banner-text\"><slot>{{ text }}</slot></p>\r\n <div v-if=\"usage\" class=\"oc-upgrade-banner-usage\">\r\n <span>{{ usage.label }}</span>\r\n <!-- low / high make the meter turn \"less good\" near the limit. -->\r\n <meter class=\"oc-upgrade-banner-meter\" min=\"0\" :max=\"usage.max\" :low=\"usage.max * 0.6\" :high=\"usage.max * 0.8\" optimum=\"0\" :value=\"usage.value\">\r\n {{ usage.value }} of {{ usage.max }}\r\n </meter>\r\n <span>{{ usage.value }} / {{ usage.max }}</span>\r\n </div>\r\n </div>\r\n <div v-if=\"$slots.actions\" class=\"oc-upgrade-banner-actions\"><slot name=\"actions\" /></div>\r\n <button v-if=\"dismissible\" class=\"oc-upgrade-banner-dismiss\" type=\"button\" :aria-label=\"dismissLabel\" @click=\"emit('dismiss')\">×</button>\r\n </aside>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Avatar with name and e-mail (truncating). `initials` (default: from `name`) or `src` fill the avatar; slot `avatar` replaces it. */\r\nimport { computed } from 'vue'\r\n\r\nconst props = defineProps<{\r\n name: string\r\n email?: string\r\n initials?: string\r\n src?: string\r\n avatarSize?: 'sm' | 'md' | 'lg' | 'xl'\r\n}>()\r\n\r\nconst shownInitials = computed(() => props.initials ?? props.name.trim().split(/\\s+/).filter(Boolean).slice(0, 2).map((w) => w[0].toUpperCase()).join(''))\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-user\">\r\n <slot name=\"avatar\">\r\n <span :class=\"['oc-avatar', avatarSize && avatarSize !== 'md' && `oc-avatar--${avatarSize}`]\">\r\n <img v-if=\"src\" :src=\"src\" alt=\"\" />\r\n <template v-else>{{ shownInitials }}</template>\r\n </span>\r\n </slot>\r\n <span class=\"oc-user-text\">\r\n <span class=\"oc-user-name\">{{ name }}</span>\r\n <span v-if=\"email\" class=\"oc-user-email\">{{ email }}</span>\r\n </span>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcVersionBanner.vue | Map: chip (role=status) -> dot -> long text -> short text -> reload action -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * \"New version available - reload\" chip. Renders nothing while `version` is empty.\r\n * Without an @reload listener the action is a plain link to the current page; with one it is a button.\r\n * Slots: default (long text). Classes: .oc-version-banner(--info/--success/--floating), -dot, -text, -short, -action\r\n */\r\nconst props = withDefaults(\r\n defineProps<{\r\n version?: string | null\r\n short?: string\r\n actionLabel?: string\r\n tone?: 'warning' | 'info' | 'success'\r\n floating?: boolean\r\n /** Declared as a prop so the component can see whether a listener is set. */\r\n onReload?: () => void\r\n }>(),\r\n { short: 'New version', actionLabel: 'Reload', tone: 'warning', version: null, onReload: undefined },\r\n)\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"version\"\r\n :class=\"['oc-version-banner', tone !== 'warning' && `oc-version-banner--${tone}`, floating && 'oc-version-banner--floating']\"\r\n role=\"status\"\r\n >\r\n <span class=\"oc-version-banner-dot\" aria-hidden=\"true\"></span>\r\n <span class=\"oc-version-banner-text\"><slot>New version ({{ version }}) available - reload the page</slot></span>\r\n <span class=\"oc-version-banner-short\">{{ short }}</span>\r\n <button v-if=\"props.onReload\" class=\"oc-version-banner-action\" type=\"button\" @click=\"props.onReload()\">{{ actionLabel }}</button>\r\n <a v-else class=\"oc-version-banner-action\" href=\"\">{{ actionLabel }}</a>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/components/OcWatermark.vue | Map: props (text, variant, tone, repeat) -> span.oc-watermark (text once or tiled) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Light text over its positioned parent (put it last inside an element with class=\"relative\"). Click-through and\r\n * aria-hidden. A logo or icon goes in the \"mark\" slot (<img> or <svg>) instead of text. Classes: .oc-watermark + --straight/--tile/--corner/--corner-top, --light/--primary/--destructive\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n text?: string\r\n variant?: 'diagonal' | 'straight' | 'tile' | 'corner' | 'corner-top'\r\n tone?: 'default' | 'light' | 'primary' | 'destructive'\r\n repeat?: number\r\n mono?: boolean\r\n }>(),\r\n { text: 'Concept', variant: 'diagonal', tone: 'default', repeat: 12, mono: false },\r\n)\r\n</script>\r\n\r\n<template>\r\n <span\r\n :class=\"['oc-watermark', variant !== 'diagonal' && `oc-watermark--${variant}`, tone !== 'default' && `oc-watermark--${tone}`, mono && 'oc-watermark--mono']\"\r\n aria-hidden=\"true\"\r\n >\r\n <template v-for=\"i in (variant === 'tile' ? Math.max(1, repeat) : 1)\" :key=\"i\">\r\n <slot v-if=\"$slots.mark\" name=\"mark\" />\r\n <span v-else><slot>{{ text }}</slot></span>\r\n </template>\r\n </span>\r\n</template>\r\n","<!-- File: packages/vue/src/blocks/OcBlockAboutTimeline.vue | Map: props -> media (+ badge slot) -> copy (title, default slot) -> OcTimeline -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * About section: picture with a badge next to the company story and a year timeline.\r\n * `title` + `highlight` (gradient part), or the `title` slot. Slots: title, default (paragraphs), badge.\r\n * Classes: .oc-block-about (--reverse), -inner, -media, -badge, -copy, -title + .oc-timeline\r\n */\r\nimport OcTimeline from '../components/OcTimeline.vue'\r\nimport type { TimelineEntry } from '../components/OcTimeline.vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n eyebrow?: string\r\n title?: string\r\n highlight?: string\r\n timeline?: TimelineEntry[]\r\n image?: string\r\n imageAlt?: string\r\n reverse?: boolean\r\n }>(),\r\n { timeline: () => [], imageAlt: '' },\r\n)\r\nconst titleId = useUid('oc-about-title')\r\n</script>\r\n\r\n<template>\r\n <section :class=\"['oc-block-about', reverse && 'oc-block-about--reverse']\" :aria-labelledby=\"titleId\">\r\n <div class=\"oc-block-about-inner\">\r\n <figure class=\"oc-block-about-media\" :aria-hidden=\"image ? undefined : 'true'\">\r\n <img v-if=\"image\" :src=\"image\" :alt=\"imageAlt\" loading=\"lazy\" />\r\n <span v-if=\"$slots.badge\" class=\"oc-block-about-badge\"><slot name=\"badge\" /></span>\r\n </figure>\r\n <div class=\"oc-block-about-copy\">\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h2 :id=\"titleId\" class=\"oc-block-about-title\">\r\n <slot name=\"title\">{{ title }} <span v-if=\"highlight\" class=\"oc-text-gradient\">{{ highlight }}</span></slot>\r\n </h2>\r\n <slot />\r\n <OcTimeline v-if=\"timeline.length\" :items=\"timeline\" />\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Top bar with sidebar toggle, module navigation and user actions.\r\n * `toggleFor` = id of the checkbox that collapses the sidebar (see OcBlockAppShell).\r\n * Slots: toggle (replaces the default hamburger label), nav (replaces the items), title, actions.\r\n * Classes: .oc-block-appbar, -nav, -actions, -title\r\n */\r\nimport OcNavmenuList, { type NavmenuItem } from '../components/OcNavmenuList.vue'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n toggleFor?: string\r\n toggleLabel?: string\r\n navItems?: NavmenuItem[]\r\n navLabel?: string\r\n title?: string\r\n }>(),\r\n { toggleLabel: 'Toggle sidebar', navLabel: 'Module navigation' },\r\n)\r\n</script>\r\n\r\n<template>\r\n <header class=\"oc-block-appbar\">\r\n <slot name=\"toggle\">\r\n <label v-if=\"toggleFor\" class=\"oc-btn oc-btn--ghost oc-btn--icon\" :for=\"toggleFor\" :title=\"toggleLabel\">\r\n <svg data-icon=\"mdi:menu\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><path d=\"M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z\"/></svg>\r\n <span class=\"oc-visually-hidden\">{{ toggleLabel }}</span>\r\n </label>\r\n </slot>\r\n <span v-if=\"title\" class=\"oc-block-appbar-title\">{{ title }}</span>\r\n <nav v-if=\"navItems?.length || $slots.nav\" class=\"oc-block-appbar-nav\" :aria-label=\"navLabel\">\r\n <slot name=\"nav\"><OcNavmenuList :items=\"navItems\" /></slot>\r\n </nav>\r\n <div v-if=\"$slots.actions\" class=\"oc-block-appbar-actions\"><slot name=\"actions\" /></div>\r\n </header>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Application layout: sidebar, header bar, breadcrumb strip and scrolling content.\r\n * v-model:collapsed drives the hidden checkbox (`toggleId`) that collapses the sidebar; point the header's\r\n * toggle label at the same id. `height` sets --oc-block-shell-height (default 100dvh).\r\n * Slots: sidebar (an OcSidebar), header (an OcBlockAppHeader), breadcrumbs, default (content).\r\n * Classes: .oc-block-shell, -toggle, -main, -breadcrumbs, -content\r\n */\r\nimport { computed } from 'vue'\r\n\r\nconst props = withDefaults(defineProps<{ toggleId?: string; height?: string; toggleLabel?: string }>(), {\r\n toggleId: 'oc-shell-toggle',\r\n toggleLabel: 'Collapse sidebar',\r\n})\r\nconst collapsed = defineModel<boolean>('collapsed', { default: false })\r\nconst style = computed(() => (props.height ? { '--oc-block-shell-height': props.height } : undefined))\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-shell\" :style=\"style\">\r\n <input :id=\"toggleId\" v-model=\"collapsed\" class=\"oc-block-shell-toggle\" type=\"checkbox\" :aria-label=\"toggleLabel\" />\r\n <slot name=\"sidebar\" />\r\n <div class=\"oc-block-shell-main\">\r\n <slot name=\"header\" />\r\n <div v-if=\"$slots.breadcrumbs\" class=\"oc-block-shell-breadcrumbs\"><slot name=\"breadcrumbs\" /></div>\r\n <main class=\"oc-block-shell-content\"><slot /></main>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Sign-in card. Slots: default (fields, e.g. .oc-form-group blocks), actions (primary button),\r\n * social (alternative sign-in buttons, shown under the divider text), footer.\r\n * Classes: .oc-block-auth, -card, -divider, -footer, .oc-block-subtitle\r\n */\r\ndefineProps<{ title?: string; subtitle?: string; divider?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-auth\">\r\n <div class=\"oc-block-auth-card\">\r\n <h2 v-if=\"title\">{{ title }}</h2>\r\n <p v-if=\"subtitle\" class=\"oc-block-subtitle\">{{ subtitle }}</p>\r\n <slot />\r\n <slot name=\"actions\" />\r\n <template v-if=\"$slots.social\">\r\n <div v-if=\"divider\" class=\"oc-block-auth-divider\">{{ divider }}</div>\r\n <slot name=\"social\" />\r\n </template>\r\n </div>\r\n <div v-if=\"$slots.footer\" class=\"oc-block-auth-footer\"><slot name=\"footer\" /></div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Sign-in with a brand panel (logo, quote) next to the form. Emits `submit` (the native submit event).\r\n * Slots: logo, quote (or `quote` + `quoteAuthor` props), default (fields), row (remember me / forgot password),\r\n * submit (default: a full-width primary button with `submitLabel`), footer.\r\n * Classes: .oc-block-authsplit, -brand, -logo, -quote, -form, -card, -title, -subtitle, -fields, -row\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n title?: string\r\n subtitle?: string\r\n quote?: string\r\n quoteAuthor?: string\r\n submitLabel?: string\r\n action?: string\r\n method?: string\r\n }>(),\r\n { submitLabel: 'Sign in', action: '#', method: 'post' },\r\n)\r\ndefineEmits<{ submit: [event: SubmitEvent] }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-authsplit\">\r\n <aside class=\"oc-block-authsplit-brand\">\r\n <a v-if=\"$slots.logo\" class=\"oc-block-authsplit-logo\" href=\"/\"><slot name=\"logo\" /></a>\r\n <blockquote v-if=\"quote || $slots.quote\" class=\"oc-block-authsplit-quote\">\r\n <slot name=\"quote\">\r\n <p>{{ quote }}</p>\r\n <footer v-if=\"quoteAuthor\">{{ quoteAuthor }}</footer>\r\n </slot>\r\n </blockquote>\r\n </aside>\r\n <div class=\"oc-block-authsplit-form\">\r\n <form class=\"oc-block-authsplit-card\" :action=\"action\" :method=\"method\" @submit=\"$emit('submit', $event)\">\r\n <h1 v-if=\"title\" class=\"oc-block-authsplit-title\">{{ title }}</h1>\r\n <p v-if=\"subtitle\" class=\"oc-block-authsplit-subtitle\">{{ subtitle }}</p>\r\n <div class=\"oc-block-authsplit-fields\">\r\n <slot />\r\n <div v-if=\"$slots.row\" class=\"oc-block-authsplit-row\"><slot name=\"row\" /></div>\r\n <slot name=\"submit\"><button class=\"oc-btn\" type=\"submit\" style=\"width: 100%\">{{ submitLabel }}</button></slot>\r\n </div>\r\n <slot name=\"footer\" />\r\n </form>\r\n </div>\r\n </div>\r\n</template>\r\n","<!-- File: packages/vue/src/blocks/OcBlockContactForm.vue | Map: props -> panel (result | title, intro, alert, form: honeypot, fields, actions) -> cards -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Contact form in a panel next to a column of contact cards. Server errors come in as `errors` (field name -> text,\r\n * `form` = message above the form); `sent` shows the result, `busy` sets aria-busy and disables the button.\r\n * Slots: fields (own fields instead of name, e-mail, phone, subject, message), note, success, card-icon ({ card }).\r\n * Emits submit (the native event; call preventDefault for Inertia) and again (back to the form).\r\n * Classes: .oc-block-contact-form, -layout, -title, -intro, -cards; .oc-panel--glow, .oc-form--filled, .oc-result\r\n */\r\nimport { computed } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface ContactFormLine {\r\n text: string\r\n href?: string\r\n}\r\nexport interface ContactFormCard {\r\n title: string\r\n lines: ContactFormLine[]\r\n /** Webicon name (mdi:email-outline …), drawn with <iconify-icon>. */\r\n icon?: string\r\n}\r\nexport interface ContactFormSubject {\r\n value: string\r\n label: string\r\n}\r\nconst props = withDefaults(\r\n defineProps<{\r\n title?: string\r\n intro?: string\r\n action?: string\r\n method?: string\r\n subjects?: ContactFormSubject[]\r\n values?: Record<string, string>\r\n errors?: Record<string, string>\r\n sent?: boolean\r\n busy?: boolean\r\n submitLabel?: string\r\n busyLabel?: string\r\n note?: string\r\n successTitle?: string\r\n successText?: string\r\n againLabel?: string\r\n errorText?: string\r\n cards?: ContactFormCard[]\r\n }>(),\r\n {\r\n title: 'Send us a message',\r\n method: 'post',\r\n subjects: () => [],\r\n values: () => ({}),\r\n errors: () => ({}),\r\n submitLabel: 'Send message',\r\n busyLabel: 'Sending…',\r\n successTitle: 'Thank you, your message was sent',\r\n againLabel: 'Send another message',\r\n errorText: 'Please check the fields in red.',\r\n cards: () => [],\r\n },\r\n)\r\nconst emit = defineEmits<{ submit: [event: Event]; again: [] }>()\r\nconst uid = useUid('oc-contact')\r\nconst fid = (name: string) => `${uid}-${name}`\r\nconst invalid = (name: string) => (props.errors[name] ? { 'aria-invalid': true as const, 'aria-describedby': `err-${name}` } : {})\r\nconst alertText = computed(() => props.errors.form ?? (Object.keys(props.errors).some((k) => k !== 'form') ? props.errorText : null))\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-block-contact-form\" aria-label=\"Contact\">\r\n <div class=\"oc-block-contact-form-layout\">\r\n <div :id=\"uid\" class=\"oc-panel oc-panel--glow\">\r\n <div v-if=\"sent\" class=\"oc-result\" role=\"status\" tabindex=\"-1\">\r\n <slot name=\"success\">\r\n <span class=\"oc-icon-tile oc-icon-tile--sm oc-accent--green\" aria-hidden=\"true\"><iconify-icon icon=\"mdi:check\" /></span>\r\n <h2 class=\"oc-result__title\">{{ successTitle }}</h2>\r\n <p v-if=\"successText\" class=\"oc-result__text\">{{ successText }}</p>\r\n <div class=\"oc-result__actions\">\r\n <button type=\"button\" class=\"oc-btn oc-btn--outline\" @click=\"emit('again')\">{{ againLabel }}</button>\r\n </div>\r\n </slot>\r\n </div>\r\n <div v-else>\r\n <h2 v-if=\"title\" class=\"oc-block-contact-form-title\">{{ title }}</h2>\r\n <p v-if=\"intro\" class=\"oc-block-contact-form-intro\">{{ intro }}</p>\r\n <p v-if=\"alertText\" class=\"oc-alert oc-alert--danger\" role=\"alert\">{{ alertText }}</p>\r\n <form class=\"oc-form oc-form--filled\" :action=\"action\" :method=\"method\" novalidate :aria-busy=\"busy || undefined\" @submit=\"emit('submit', $event)\">\r\n <div class=\"oc-honeypot\" aria-hidden=\"true\">\r\n <label :for=\"fid('website')\">Leave this field empty</label>\r\n <input :id=\"fid('website')\" type=\"text\" name=\"website\" tabindex=\"-1\" autocomplete=\"off\" />\r\n </div>\r\n <slot name=\"fields\">\r\n <div class=\"oc-field-group oc-field-group--row\">\r\n <div class=\"oc-field\">\r\n <label class=\"oc-field-label\" :for=\"fid('name')\">Name</label>\r\n <input :id=\"fid('name')\" class=\"oc-input\" type=\"text\" name=\"name\" required maxlength=\"100\" autocomplete=\"name\" :value=\"values.name\" v-bind=\"invalid('name')\" />\r\n <p v-if=\"errors.name\" id=\"err-name\" class=\"oc-field-error\">{{ errors.name }}</p>\r\n </div>\r\n <div class=\"oc-field\">\r\n <label class=\"oc-field-label\" :for=\"fid('email')\">E-mail</label>\r\n <input :id=\"fid('email')\" class=\"oc-input\" type=\"email\" name=\"email\" required maxlength=\"254\" autocomplete=\"email\" :value=\"values.email\" v-bind=\"invalid('email')\" />\r\n <p v-if=\"errors.email\" id=\"err-email\" class=\"oc-field-error\">{{ errors.email }}</p>\r\n </div>\r\n </div>\r\n <div :class=\"['oc-field-group', subjects.length && 'oc-field-group--row']\">\r\n <div class=\"oc-field\">\r\n <label class=\"oc-field-label\" :for=\"fid('phone')\">Phone <span class=\"oc-field-label__hint\">(optional)</span></label>\r\n <input :id=\"fid('phone')\" class=\"oc-input\" type=\"tel\" name=\"phone\" maxlength=\"40\" autocomplete=\"tel\" inputmode=\"tel\" :value=\"values.phone\" v-bind=\"invalid('phone')\" />\r\n <p v-if=\"errors.phone\" id=\"err-phone\" class=\"oc-field-error\">{{ errors.phone }}</p>\r\n </div>\r\n <div v-if=\"subjects.length\" class=\"oc-field\">\r\n <label class=\"oc-field-label\" :for=\"fid('subject')\">What is it about?</label>\r\n <select :id=\"fid('subject')\" class=\"oc-select\" name=\"subject\" required v-bind=\"invalid('subject')\">\r\n <option value=\"\" :selected=\"!values.subject\">Choose a subject</option>\r\n <option v-for=\"s in subjects\" :key=\"s.value\" :value=\"s.value\" :selected=\"values.subject === s.value\">{{ s.label }}</option>\r\n </select>\r\n <p v-if=\"errors.subject\" id=\"err-subject\" class=\"oc-field-error\">{{ errors.subject }}</p>\r\n </div>\r\n </div>\r\n <div class=\"oc-field\">\r\n <label class=\"oc-field-label\" :for=\"fid('message')\">Your message</label>\r\n <textarea :id=\"fid('message')\" class=\"oc-input oc-textarea\" name=\"message\" rows=\"6\" required maxlength=\"5000\" :value=\"values.message\" v-bind=\"invalid('message')\" />\r\n <p v-if=\"errors.message\" id=\"err-message\" class=\"oc-field-error\">{{ errors.message }}</p>\r\n </div>\r\n </slot>\r\n <div class=\"oc-form-actions\">\r\n <button class=\"oc-btn oc-btn--lg\" type=\"submit\" :disabled=\"busy\">{{ busy ? busyLabel : submitLabel }}</button>\r\n <p v-if=\"note || $slots.note\" class=\"oc-form-note\"><slot name=\"note\">{{ note }}</slot></p>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div v-if=\"cards.length\" class=\"oc-block-contact-form-cards\">\r\n <article v-for=\"(card, i) in cards\" :key=\"i\" class=\"oc-block-contact-card\">\r\n <span v-if=\"card.icon || $slots['card-icon']\" class=\"oc-icon-tile oc-icon-tile--sm\" aria-hidden=\"true\">\r\n <slot name=\"card-icon\" :card=\"card\"><iconify-icon :icon=\"card.icon\" /></slot>\r\n </span>\r\n <h3 class=\"oc-block-contact-title\">{{ card.title }}</h3>\r\n <template v-for=\"(line, j) in card.lines\" :key=\"j\">\r\n <a v-if=\"line.href\" class=\"oc-block-contact-line\" :href=\"line.href\">{{ line.text }}</a>\r\n <p v-else class=\"oc-block-contact-line\">{{ line.text }}</p>\r\n </template>\r\n </article>\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<!-- File: packages/vue/src/blocks/OcBlockContactGrid.vue | Map: props -> head -> grid -> cards (mark, title, lines) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Contact info cards (e-mail, phone, address, hours). A card with `address: true` renders as <address>.\r\n * Slot: default (own cards). Classes: .oc-block-contact (--plain), -head, -heading, -lead, -grid, -card, -title, -line\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface ContactGridLine {\r\n text: string\r\n href?: string\r\n}\r\nexport interface ContactGridCard {\r\n title: string\r\n lines: ContactGridLine[]\r\n icon?: string\r\n accent?: string\r\n address?: boolean\r\n}\r\nwithDefaults(\r\n defineProps<{\r\n eyebrow?: string\r\n title?: string\r\n lead?: string\r\n cards?: ContactGridCard[]\r\n plain?: boolean\r\n }>(),\r\n { cards: () => [] },\r\n)\r\nconst titleId = useUid('oc-contact-title')\r\n</script>\r\n\r\n<template>\r\n <section :class=\"['oc-block-contact', plain && 'oc-block-contact--plain']\" :aria-labelledby=\"title ? titleId : undefined\">\r\n <div v-if=\"eyebrow || title || lead\" class=\"oc-block-contact-head\">\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h2 v-if=\"title\" :id=\"titleId\" class=\"oc-block-contact-heading\">{{ title }}</h2>\r\n <p v-if=\"lead\" class=\"oc-block-contact-lead\">{{ lead }}</p>\r\n </div>\r\n <div class=\"oc-block-contact-grid\">\r\n <slot>\r\n <component :is=\"card.address ? 'address' : 'article'\" v-for=\"(card, i) in cards\" :key=\"i\" class=\"oc-block-contact-card\">\r\n <span v-if=\"card.icon\" :class=\"['oc-product-mark oc-product-mark--sm oc-product-mark--soft', card.accent && `oc-accent--${card.accent}`]\" aria-hidden=\"true\">{{ card.icon }}</span>\r\n <component :is=\"card.address ? 'span' : 'h3'\" class=\"oc-block-contact-title\">{{ card.title }}</component>\r\n <template v-for=\"(line, j) in card.lines\" :key=\"j\">\r\n <a v-if=\"line.href\" class=\"oc-block-contact-line\" :href=\"line.href\">{{ line.text }}</a>\r\n <component :is=\"card.address ? 'span' : 'p'\" v-else class=\"oc-block-contact-line\">{{ line.text }}</component>\r\n </template>\r\n </component>\r\n </slot>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Call to action banner. Slot `actions` holds the buttons (inside .oc-block-hero-actions). */\r\ndefineProps<{ title?: string; text?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-cta\">\r\n <h2 v-if=\"title\">{{ title }}</h2>\r\n <p v-if=\"text\">{{ text }}</p>\r\n <div v-if=\"$slots.actions\" class=\"oc-block-hero-actions\"><slot name=\"actions\" /></div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Card with title, actions, toolbar, table, bulk bar and footer. Put an <OcTable> in the default slot.\r\n * Slots: actions (header buttons), toolbar (.oc-table-toolbar content: search, filter pills),\r\n * bulk (selection bar, shown when `selectedCount` > 0), default (table), footer (.oc-table-footer: entries text, page size, pagination).\r\n * Classes: .oc-card.oc-block-datatable, -head, -title, -description, -body, -bulk, .oc-table-toolbar, .oc-table-footer\r\n */\r\ndefineProps<{ title?: string; description?: string; selectedCount?: number }>()\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-card oc-block-datatable\">\r\n <header v-if=\"title || description || $slots.actions\" class=\"oc-block-datatable-head\">\r\n <div>\r\n <h2 v-if=\"title\" class=\"oc-block-datatable-title\">{{ title }}</h2>\r\n <p v-if=\"description\" class=\"oc-block-datatable-description\">{{ description }}</p>\r\n </div>\r\n <div v-if=\"$slots.actions\"><slot name=\"actions\" /></div>\r\n </header>\r\n <div class=\"oc-block-datatable-body\">\r\n <div v-if=\"$slots.toolbar\" class=\"oc-table-toolbar\"><slot name=\"toolbar\" /></div>\r\n <div v-if=\"$slots.bulk && selectedCount\" class=\"oc-block-datatable-bulk\"><slot name=\"bulk\" :count=\"selectedCount\" /></div>\r\n <slot />\r\n <div v-if=\"$slots.footer\" class=\"oc-table-footer\"><slot name=\"footer\" /></div>\r\n </div>\r\n </section>\r\n</template>\r\n","<!-- File: packages/vue/src/blocks/OcBlockFaq.vue | Map: props -> section.oc-block-faq -> head -> accordion (details name) -> more slot -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * FAQ section: title + exclusive accordion on native <details name> (no JavaScript).\r\n * Slots: lead, default (own details items), more. Classes: .oc-block-faq (--split), -inner, -head, -title, -lead, -list, -more\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface FaqItem {\r\n question: string\r\n answer: string\r\n}\r\nconst props = withDefaults(\r\n defineProps<{\r\n eyebrow?: string\r\n title: string\r\n lead?: string\r\n items?: FaqItem[]\r\n openIndex?: number\r\n split?: boolean\r\n name?: string\r\n }>(),\r\n { items: () => [], openIndex: 0 },\r\n)\r\nconst titleId = useUid('oc-faq-title')\r\nconst autoGroup = useUid('oc-faq')\r\nconst group = props.name ?? autoGroup\r\n</script>\r\n\r\n<template>\r\n <section :class=\"['oc-block-faq', split && 'oc-block-faq--split']\" :aria-labelledby=\"titleId\">\r\n <div class=\"oc-block-faq-inner\">\r\n <div class=\"oc-block-faq-head\">\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h2 :id=\"titleId\" class=\"oc-block-faq-title\">{{ title }}</h2>\r\n <p v-if=\"lead || $slots.lead\" class=\"oc-block-faq-lead\"><slot name=\"lead\">{{ lead }}</slot></p>\r\n </div>\r\n <div class=\"oc-accordion oc-block-faq-list\">\r\n <slot>\r\n <details v-for=\"(item, i) in items\" :key=\"i\" class=\"oc-accordion-item\" :name=\"group\" :open=\"i === openIndex\">\r\n <summary class=\"oc-accordion-trigger\">{{ item.question }}</summary>\r\n <div class=\"oc-accordion-content\">{{ item.answer }}</div>\r\n </details>\r\n </slot>\r\n </div>\r\n <p v-if=\"$slots.more\" class=\"oc-block-faq-more\"><slot name=\"more\" /></p>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Feature grid with icons. Slot `icon` (scoped: { item }) overrides the glyph. Classes: .oc-block-features, -grid, .oc-block-feature-card, -icon */\r\nexport interface FeatureItem {\r\n icon?: string\r\n title: string\r\n text: string\r\n}\r\ndefineProps<{ title?: string; description?: string; items: FeatureItem[] }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-features\">\r\n <h2 v-if=\"title\">{{ title }}</h2>\r\n <p v-if=\"description\">{{ description }}</p>\r\n <div class=\"oc-block-features-grid\">\r\n <div v-for=\"(item, i) in items\" :key=\"i\" class=\"oc-block-feature-card\">\r\n <div class=\"oc-block-feature-icon\"><slot name=\"icon\" :item=\"item\">{{ item.icon }}</slot></div>\r\n <h3>{{ item.title }}</h3>\r\n <p>{{ item.text }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Multi-column site footer. Slots: bottom-start, bottom-end (default text via `copyright` / `credit`). Classes: .oc-block-footer, -grid, -col, -bottom */\r\nexport interface FooterColumn {\r\n title: string\r\n links: { label: string; href: string }[]\r\n}\r\ndefineProps<{ columns: FooterColumn[]; copyright?: string; credit?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-footer\">\r\n <div class=\"oc-block-footer-grid\">\r\n <div v-for=\"col in columns\" :key=\"col.title\" class=\"oc-block-footer-col\">\r\n <h4>{{ col.title }}</h4>\r\n <ul>\r\n <li v-for=\"link in col.links\" :key=\"link.href + link.label\"><a :href=\"link.href\">{{ link.label }}</a></li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div v-if=\"copyright || credit || $slots['bottom-start'] || $slots['bottom-end']\" class=\"oc-block-footer-bottom\">\r\n <span><slot name=\"bottom-start\">{{ copyright }}</slot></span>\r\n <span><slot name=\"bottom-end\">{{ credit }}</slot></span>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Collapsible form sections with a sticky action bar. Default slot = sections (OcCollapsible containing a\r\n * `<div class=\"oc-block-formpage-grid\">` for the two-column field grid). Emits `submit`.\r\n * Slot `actions` replaces the default Cancel / Save buttons. Classes: .oc-block-formpage, -grid, -actions\r\n */\r\nwithDefaults(\r\n defineProps<{ cancelLabel?: string; submitLabel?: string; action?: string; method?: string }>(),\r\n { cancelLabel: 'Cancel', submitLabel: 'Save', action: '#', method: 'post' },\r\n)\r\ndefineEmits<{ submit: [event: SubmitEvent]; cancel: [] }>()\r\n</script>\r\n\r\n<template>\r\n <form class=\"oc-block-formpage\" :action=\"action\" :method=\"method\" @submit=\"$emit('submit', $event)\">\r\n <slot />\r\n <div class=\"oc-block-formpage-actions\">\r\n <slot name=\"actions\">\r\n <button class=\"oc-btn oc-btn--outline\" type=\"button\" @click=\"$emit('cancel')\">{{ cancelLabel }}</button>\r\n <button class=\"oc-btn\" type=\"submit\">{{ submitLabel }}</button>\r\n </slot>\r\n </div>\r\n </form>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Centered hero with badge, headline, text and actions. Classes: .oc-block-hero, -badge, -actions */\r\ndefineProps<{ badge?: string; title?: string; text?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-hero\">\r\n <span v-if=\"badge\" class=\"oc-block-hero-badge\">{{ badge }}</span>\r\n <h1 v-if=\"title\">{{ title }}</h1>\r\n <p v-if=\"text\">{{ text }}</p>\r\n <div v-if=\"$slots.actions\" class=\"oc-block-hero-actions\"><slot name=\"actions\" /></div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Landing hero: eyebrow, display title with a gradient word, lead, buttons and a code window with floating icon tiles.\r\n * `title` + `highlight` (gradient word) + `titleEnd`, or the `title` slot. Slots: lead, actions, visual (replaces the code window).\r\n * Classes: .oc-section-pad, .oc-container, .oc-split, .oc-eyebrow, .oc-display, .oc-text-gradient, .oc-lead, .oc-code-window\r\n */\r\ndefineProps<{\r\n eyebrow?: string\r\n title?: string\r\n highlight?: string\r\n titleEnd?: string\r\n lead?: string\r\n code?: string\r\n codeTitle?: string\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-section-pad\">\r\n <div class=\"oc-container oc-split\">\r\n <div>\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h1 class=\"oc-display\">\r\n <slot name=\"title\">{{ title }} <span v-if=\"highlight\" class=\"oc-text-gradient\">{{ highlight }}</span>{{ titleEnd }}</slot>\r\n </h1>\r\n <p v-if=\"lead || $slots.lead\" class=\"oc-lead\"><slot name=\"lead\">{{ lead }}</slot></p>\r\n <div v-if=\"$slots.actions\" class=\"flex flex-wrap gap-1 mt-2\"><slot name=\"actions\" /></div>\r\n </div>\r\n <div class=\"relative p-2\">\r\n <slot name=\"visual\">\r\n <span class=\"oc-icon-tile oc-icon-tile--float oc-accent--green absolute\" style=\"inset: -0.5rem auto auto 8%\" aria-hidden=\"true\">◆</span>\r\n <span class=\"oc-icon-tile oc-icon-tile--float oc-accent--violet absolute\" style=\"inset: 0 6% auto auto; animation-delay: -2s\" aria-hidden=\"true\">◉</span>\r\n <span class=\"oc-icon-tile oc-icon-tile--float oc-accent--orange absolute\" style=\"inset: auto 10% -0.5rem auto; animation-delay: -4s\" aria-hidden=\"true\">▲</span>\r\n <div class=\"oc-code-window\">\r\n <div class=\"oc-code-window__bar\"><i></i><i></i><i></i><span v-if=\"codeTitle\" class=\"oc-code-window__title\">{{ codeTitle }}</span></div>\r\n <pre class=\"oc-code-window__body\">{{ code }}</pre>\r\n </div>\r\n </slot>\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<!-- File: packages/vue/src/blocks/OcBlockHeroOrbit.vue | Map: props + default marks -> copy -> visual (ring with marks + center slot / code window) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Hero with a code window and product marks that orbit around it (reduced motion: they stand still).\r\n * `title` + `highlight` + `titleEnd`, or the `title` slot. Slots: lead, actions, center (replaces the code window;\r\n * give it class=\"oc-block-orbit-center\"). Classes: .oc-block-orbit-visual, -ring, -mark (--oc-orbit-angle), -center\r\n */\r\nimport { computed } from 'vue'\r\n\r\nexport interface HeroOrbitMark {\r\n glyph: string\r\n accent: string\r\n}\r\nconst props = withDefaults(\r\n defineProps<{\r\n eyebrow?: string\r\n title?: string\r\n highlight?: string\r\n titleEnd?: string\r\n lead?: string\r\n code?: string\r\n codeTitle?: string\r\n marks?: HeroOrbitMark[]\r\n duration?: string\r\n }>(),\r\n {\r\n code: '',\r\n marks: () => [\r\n { glyph: '◆', accent: 'green' },\r\n { glyph: '◉', accent: 'violet' },\r\n { glyph: '▲', accent: 'orange' },\r\n { glyph: '★', accent: 'cyan' },\r\n { glyph: '♥', accent: 'red' },\r\n { glyph: '☀', accent: 'yellow' },\r\n ],\r\n },\r\n)\r\n// Spread the marks evenly over the ring.\r\nconst angle = (i: number) => `--oc-orbit-angle: ${(360 / props.marks.length) * i}deg`\r\nconst visualStyle = computed(() => (props.duration ? `--oc-orbit-duration: ${props.duration}` : undefined))\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-block-orbit oc-section-pad\">\r\n <div class=\"oc-container oc-split\">\r\n <div>\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h1 class=\"oc-display\">\r\n <slot name=\"title\">{{ title }} <span v-if=\"highlight\" class=\"oc-text-gradient\">{{ highlight }}</span>{{ titleEnd }}</slot>\r\n </h1>\r\n <p v-if=\"lead || $slots.lead\" class=\"oc-lead\"><slot name=\"lead\">{{ lead }}</slot></p>\r\n <div v-if=\"$slots.actions\" class=\"flex flex-wrap gap-1 mt-2\"><slot name=\"actions\" /></div>\r\n </div>\r\n <div class=\"oc-block-orbit-visual\" :style=\"visualStyle\">\r\n <div class=\"oc-block-orbit-ring\" aria-hidden=\"true\">\r\n <span v-for=\"(mark, i) in marks\" :key=\"i\" class=\"oc-block-orbit-mark\" :style=\"angle(i)\">\r\n <span :class=\"['oc-product-mark oc-product-mark--sm', `oc-accent--${mark.accent}`]\">{{ mark.glyph }}</span>\r\n </span>\r\n </div>\r\n <slot name=\"center\">\r\n <div class=\"oc-code-window oc-block-orbit-center\">\r\n <div class=\"oc-code-window__bar\"><i></i><i></i><i></i><span v-if=\"codeTitle\" class=\"oc-code-window__title\">{{ codeTitle }}</span></div>\r\n <pre class=\"oc-code-window__body\">{{ code }}</pre>\r\n </div>\r\n </slot>\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Hero with text left and visual right. Slots: actions, visual. Classes: .oc-block-hero-split, -actions, -visual */\r\ndefineProps<{ title?: string; text?: string }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-hero-split\">\r\n <div>\r\n <h1 v-if=\"title\">{{ title }}</h1>\r\n <p v-if=\"text\">{{ text }}</p>\r\n <div v-if=\"$slots.actions\" class=\"oc-block-hero-actions justify-start\"><slot name=\"actions\" /></div>\r\n </div>\r\n <div class=\"oc-block-hero-visual\"><slot name=\"visual\" /></div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Page header with icon tile, title, intro, meta badges and an action row.\r\n * Slots: icon, meta (badges), actions. Classes: .oc-block-modulehead, -band, -icon, -body, -title, -intro, -meta, -actions\r\n */\r\ndefineProps<{ title: string; intro?: string }>()\r\n</script>\r\n\r\n<template>\r\n <header class=\"oc-block-modulehead\">\r\n <div class=\"oc-block-modulehead-band\">\r\n <span v-if=\"$slots.icon\" class=\"oc-block-modulehead-icon\" aria-hidden=\"true\"><slot name=\"icon\" /></span>\r\n <div class=\"oc-block-modulehead-body\">\r\n <h1 class=\"oc-block-modulehead-title\">{{ title }}</h1>\r\n <p v-if=\"intro\" class=\"oc-block-modulehead-intro\">{{ intro }}</p>\r\n <div v-if=\"$slots.meta\" class=\"oc-block-modulehead-meta\"><slot name=\"meta\" /></div>\r\n </div>\r\n </div>\r\n <div v-if=\"$slots.actions\" class=\"oc-block-modulehead-actions\"><slot name=\"actions\" /></div>\r\n </header>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Page header (the oc-hero used on every docs page): eyebrow, title, text, actions. Classes: .oc-hero, -eyebrow, -title, -text, -actions */\r\ndefineProps<{ eyebrow?: string; title: string; text?: string }>()\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-hero\">\r\n <span v-if=\"eyebrow\" class=\"oc-hero-eyebrow\">{{ eyebrow }}</span>\r\n <h1 class=\"oc-hero-title\">{{ title }}</h1>\r\n <p v-if=\"text\" class=\"oc-hero-text\">{{ text }}</p>\r\n <div v-if=\"$slots.actions\" class=\"oc-hero-actions\"><slot name=\"actions\" /></div>\r\n </section>\r\n</template>\r\n","<!-- File: packages/vue/src/blocks/OcBlockPortfolioGrid.vue | Map: props -> head (title, lead, link slot) -> grid of OcProjectCard -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Portfolio section: heading, lead, \"all projects\" link and a grid of project cards.\r\n * `title` + `highlight` (gradient word). Slots: link, default (own cards). Classes: .oc-block-portfolio (--two), -head, -lead, -grid\r\n */\r\nimport OcProjectCard from '../components/OcProjectCard.vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface PortfolioGridProject {\r\n href: string\r\n name: string\r\n type?: string\r\n meta?: string\r\n more?: string\r\n image?: string\r\n imageAlt?: string\r\n accent?: string\r\n}\r\nwithDefaults(\r\n defineProps<{\r\n eyebrow?: string\r\n title?: string\r\n highlight?: string\r\n lead?: string\r\n projects?: PortfolioGridProject[]\r\n two?: boolean\r\n }>(),\r\n { projects: () => [] },\r\n)\r\nconst titleId = useUid('oc-portfolio-title')\r\n</script>\r\n\r\n<template>\r\n <section :class=\"['oc-block-portfolio oc-section-pad', two && 'oc-block-portfolio--two']\" :aria-labelledby=\"titleId\">\r\n <div class=\"oc-container\">\r\n <div class=\"oc-block-portfolio-head\">\r\n <div>\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h2 :id=\"titleId\" class=\"oc-display oc-display--md\">{{ title }} <span v-if=\"highlight\" class=\"oc-text-gradient\">{{ highlight }}</span></h2>\r\n <p v-if=\"lead\" class=\"oc-block-portfolio-lead\">{{ lead }}</p>\r\n </div>\r\n <slot name=\"link\" />\r\n </div>\r\n <div class=\"oc-block-portfolio-grid\">\r\n <slot>\r\n <OcProjectCard\r\n v-for=\"(p, i) in projects\"\r\n :key=\"i\"\r\n :class=\"p.accent && `oc-accent--${p.accent}`\"\r\n :href=\"p.href\"\r\n :name=\"p.name\"\r\n :type=\"p.type\"\r\n :meta=\"p.meta\"\r\n :more=\"p.more ?? 'View project'\"\r\n :image=\"p.image\"\r\n :image-alt=\"p.imageAlt\"\r\n />\r\n </slot>\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Pricing cards with a featured plan. Emits `select` with the plan when its button is clicked.\r\n * Slot `action` (scoped: { plan }) replaces the button. Classes: .oc-block-pricing, -grid, -card(--featured),\r\n * -name, -desc, -price, -features\r\n */\r\nexport interface PricingPlan {\r\n name: string\r\n description?: string\r\n price: string\r\n /** e.g. \"/month\" */\r\n period?: string\r\n features: string[]\r\n cta: string\r\n featured?: boolean\r\n}\r\ndefineProps<{ title?: string; description?: string; plans: PricingPlan[] }>()\r\ndefineEmits<{ select: [plan: PricingPlan] }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-pricing\">\r\n <h2 v-if=\"title\">{{ title }}</h2>\r\n <p v-if=\"description\">{{ description }}</p>\r\n <div class=\"oc-block-pricing-grid\">\r\n <div v-for=\"plan in plans\" :key=\"plan.name\" :class=\"['oc-block-pricing-card', plan.featured && 'oc-block-pricing-card--featured']\">\r\n <p class=\"oc-block-pricing-name\">{{ plan.name }}</p>\r\n <p v-if=\"plan.description\" class=\"oc-block-pricing-desc\">{{ plan.description }}</p>\r\n <p class=\"oc-block-pricing-price\">{{ plan.price }} <span v-if=\"plan.period\">{{ plan.period }}</span></p>\r\n <ul class=\"oc-block-pricing-features\">\r\n <li v-for=\"f in plan.features\" :key=\"f\">{{ f }}</li>\r\n </ul>\r\n <slot name=\"action\" :plan=\"plan\">\r\n <button :class=\"['oc-btn', !plan.featured && 'oc-btn--outline']\" type=\"button\" style=\"width: 100%\" @click=\"$emit('select', plan)\">{{ plan.cta }}</button>\r\n </slot>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Numbered steps (CSS counter) + an endless marquee of technologies (the list is rendered twice, the copy aria-hidden).\r\n * Classes: .oc-section-pad, .oc-container, .oc-eyebrow, .oc-display(--md), .oc-text-gradient, .oc-steps, .oc-marquee\r\n */\r\nexport interface ProcessStep {\r\n title: string\r\n text: string\r\n}\r\ndefineProps<{\r\n eyebrow?: string\r\n title?: string\r\n highlight?: string\r\n steps: ProcessStep[]\r\n marquee?: string[]\r\n marqueeLabel?: string\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-section-pad\">\r\n <div class=\"oc-container\">\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h2 class=\"oc-display oc-display--md\">{{ title }} <span v-if=\"highlight\" class=\"oc-text-gradient\">{{ highlight }}</span></h2>\r\n <ol class=\"oc-steps\">\r\n <li v-for=\"step in steps\" :key=\"step.title\">\r\n <h3>{{ step.title }}</h3>\r\n <p>{{ step.text }}</p>\r\n </li>\r\n </ol>\r\n <div v-if=\"marquee?.length\" class=\"oc-marquee mt-4\" :aria-label=\"marqueeLabel\">\r\n <div class=\"oc-marquee__track\">\r\n <span v-for=\"item in marquee\" :key=\"item\" class=\"oc-marquee__item\">{{ item }}</span>\r\n <span v-for=\"item in marquee\" :key=\"'copy-' + item\" class=\"oc-marquee__item\" aria-hidden=\"true\">{{ item }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Section title + grid of product cards, each with its own accent color (oc-accent--green|orange|violet|cyan...).\r\n * Classes: .oc-card-grid, .oc-product-card, -top, -name, -tagline, -summary, -more, .oc-icon-tile, .oc-pill\r\n */\r\nexport interface ProductItem {\r\n name: string\r\n tagline?: string\r\n summary?: string\r\n /** Pill text, e.g. \"Own product\" */\r\n tag?: string\r\n /** Glyph for the icon tile */\r\n icon?: string\r\n /** Accent name: green, orange, violet, cyan, ... */\r\n accent?: string\r\n href?: string\r\n more?: string\r\n}\r\ndefineProps<{ eyebrow?: string; title?: string; highlight?: string; products: ProductItem[] }>()\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-section-pad\">\r\n <div class=\"oc-container\">\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h2 class=\"oc-display oc-display--md\">{{ title }} <span v-if=\"highlight\" class=\"oc-text-gradient\">{{ highlight }}</span></h2>\r\n <div class=\"oc-card-grid\">\r\n <a v-for=\"p in products\" :key=\"p.name\" :class=\"['oc-product-card', p.accent && `oc-accent--${p.accent}`]\" :href=\"p.href ?? '#'\">\r\n <div class=\"oc-product-card__top\">\r\n <span class=\"oc-icon-tile\" aria-hidden=\"true\">{{ p.icon }}</span>\r\n <span v-if=\"p.tag\" class=\"oc-pill\">{{ p.tag }}</span>\r\n </div>\r\n <h3 class=\"oc-product-card__name\">{{ p.name }}</h3>\r\n <p v-if=\"p.tagline\" class=\"oc-product-card__tagline\">{{ p.tagline }}</p>\r\n <p v-if=\"p.summary\" class=\"oc-product-card__summary\">{{ p.summary }}</p>\r\n <span v-if=\"p.more\" class=\"oc-product-card__more\">{{ p.more }}</span>\r\n </a>\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<!-- File: packages/vue/src/blocks/OcBlockProfileHeader.vue | Map: props -> banner -> bar (avatar slot, info, actions slot) -> tabs -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Profile / channel header: banner, overhanging avatar, name, meta, bio, actions and link tabs.\r\n * Slots: avatar (initials or <img>), actions, bio, panel-0, panel-1 … (with panel slots the tabs switch on the page\r\n * itself: radios + panels, CSS only; without them the tabs are links). Classes: .oc-block-profile (--compact), -banner, -bar, -avatar,\r\n * -info, -name, -meta, -bio, -actions, -tabs, -tab (aria-current=\"page\")\r\n */\r\nimport { computed, useSlots } from 'vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface ProfileHeaderTab {\r\n label: string\r\n href?: string\r\n current?: boolean\r\n}\r\nconst props = withDefaults(\r\n defineProps<{\r\n name: string\r\n meta?: string\r\n bio?: string\r\n initials?: string\r\n banner?: string\r\n tabs?: ProfileHeaderTab[]\r\n tabsLabel?: string\r\n compact?: boolean\r\n headingLevel?: 1 | 2\r\n }>(),\r\n { tabs: () => [], tabsLabel: 'Profile sections', headingLevel: 1 },\r\n)\r\nconst nameId = useUid('oc-profile-name')\r\nconst slots = useSlots()\r\nconst panels = computed(() => props.tabs.some((_, i) => Boolean(slots[`panel-${i}`])))\r\nconst bannerStyle = computed(() => (props.banner ? `--oc-profile-banner: url(\"${props.banner}\")` : undefined))\r\n</script>\r\n\r\n<template>\r\n <section :class=\"['oc-block-profile', compact && 'oc-block-profile--compact']\" :aria-labelledby=\"nameId\">\r\n <div class=\"oc-block-profile-banner\" :style=\"bannerStyle\" aria-hidden=\"true\"></div>\r\n <div class=\"oc-block-profile-bar\">\r\n <span class=\"oc-avatar oc-block-profile-avatar\" aria-hidden=\"true\"><slot name=\"avatar\">{{ initials }}</slot></span>\r\n <div class=\"oc-block-profile-info\">\r\n <component :is=\"headingLevel === 1 ? 'h1' : 'h2'\" :id=\"nameId\" class=\"oc-block-profile-name\">{{ name }}</component>\r\n <p v-if=\"meta\" class=\"oc-block-profile-meta\">{{ meta }}</p>\r\n <p v-if=\"bio || $slots.bio\" class=\"oc-block-profile-bio\"><slot name=\"bio\">{{ bio }}</slot></p>\r\n </div>\r\n <div v-if=\"$slots.actions\" class=\"oc-block-profile-actions\"><slot name=\"actions\" /></div>\r\n </div>\r\n <template v-if=\"tabs.length && panels\">\r\n <div class=\"oc-block-profile-tabs\" role=\"radiogroup\" :aria-label=\"tabsLabel\">\r\n <label v-for=\"(tab, i) in tabs\" :key=\"i\" class=\"oc-block-profile-tab\"><input type=\"radio\" :name=\"`${nameId}-tab`\" :checked=\"tab.current ?? i === 0\">{{ tab.label }}</label>\r\n </div>\r\n <div class=\"oc-block-profile-panels\">\r\n <div v-for=\"(tab, i) in tabs\" :key=\"i\" class=\"oc-block-profile-panel\"><slot :name=\"`panel-${i}`\" /></div>\r\n </div>\r\n </template>\r\n <nav v-else-if=\"tabs.length\" class=\"oc-block-profile-tabs\" :aria-label=\"tabsLabel\">\r\n <a v-for=\"(tab, i) in tabs\" :key=\"i\" class=\"oc-block-profile-tab\" :href=\"tab.href\" :aria-current=\"tab.current ? 'page' : undefined\">{{ tab.label }}</a>\r\n </nav>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Portfolio grid: project cards with a browser frame around the screenshot.\r\n * `background` is any CSS background (use Omnia tokens, e.g. linear-gradient(135deg, var(--color-green-40), var(--color-teal-80))); `image` shows an img.\r\n * Classes: .oc-card-grid, .oc-product-card, .oc-browser-frame(__bar/__body), .oc-pill--accent\r\n */\r\nexport interface ShowcaseProject {\r\n name: string\r\n summary?: string\r\n tag?: string\r\n accent?: string\r\n href?: string\r\n background?: string\r\n image?: string\r\n more?: string\r\n}\r\ndefineProps<{ eyebrow?: string; title?: string; highlight?: string; projects: ShowcaseProject[] }>()\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-section-pad\">\r\n <div class=\"oc-container\">\r\n <p v-if=\"eyebrow\" class=\"oc-eyebrow\">{{ eyebrow }}</p>\r\n <h2 class=\"oc-display oc-display--md\">{{ title }} <span v-if=\"highlight\" class=\"oc-text-gradient\">{{ highlight }}</span></h2>\r\n <div class=\"oc-card-grid\" style=\"--oc-card-min: 26rem\">\r\n <a v-for=\"p in projects\" :key=\"p.name\" :class=\"['oc-product-card', p.accent && `oc-accent--${p.accent}`, 'p-0 overflow-hidden']\" :href=\"p.href ?? '#'\">\r\n <span class=\"oc-browser-frame m-1\">\r\n <span class=\"oc-browser-frame__bar\"><i></i><i></i><i></i></span>\r\n <span class=\"oc-browser-frame__body\" :style=\"p.background ? { background: p.background } : undefined\">\r\n <img v-if=\"p.image\" :src=\"p.image\" alt=\"\" />\r\n </span>\r\n </span>\r\n <span class=\"grid gap-0.5 p-1.5 pt-0\">\r\n <span v-if=\"p.tag\" class=\"oc-pill oc-pill--accent\">{{ p.tag }}</span>\r\n <span class=\"oc-product-card__name\">{{ p.name }}</span>\r\n <span v-if=\"p.summary\" class=\"oc-product-card__summary\">{{ p.summary }}</span>\r\n <span v-if=\"p.more\" class=\"oc-product-card__more\">{{ p.more }}</span>\r\n </span>\r\n </a>\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Brand column, link columns, a contact column and a bottom bar.\r\n * Slots: brand (the logo link), about (default: `about` text), bottom-start, bottom-end.\r\n * Classes: .oc-site-footer, __grid, __about, __title, __list, __bottom, .oc-site-header__brand\r\n */\r\nexport interface SiteFooterColumn {\r\n title: string\r\n links: { label: string; href: string }[]\r\n}\r\nexport interface SiteFooterContact {\r\n title: string\r\n lines: { label: string; href?: string }[]\r\n}\r\ndefineProps<{\r\n about?: string\r\n columns?: SiteFooterColumn[]\r\n contact?: SiteFooterContact\r\n copyright?: string\r\n credit?: string\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <footer class=\"oc-site-footer\">\r\n <div class=\"oc-container\">\r\n <div class=\"oc-site-footer__grid\">\r\n <div class=\"oc-site-footer__about\">\r\n <slot name=\"brand\" />\r\n <p v-if=\"about\">{{ about }}</p>\r\n </div>\r\n <div v-for=\"col in columns\" :key=\"col.title\">\r\n <h2 class=\"oc-site-footer__title\">{{ col.title }}</h2>\r\n <ul class=\"oc-site-footer__list\">\r\n <li v-for=\"link in col.links\" :key=\"link.href + link.label\"><a :href=\"link.href\">{{ link.label }}</a></li>\r\n </ul>\r\n </div>\r\n <div v-if=\"contact\">\r\n <h2 class=\"oc-site-footer__title\">{{ contact.title }}</h2>\r\n <address class=\"oc-site-footer__list\">\r\n <template v-for=\"line in contact.lines\" :key=\"line.label\">\r\n <a v-if=\"line.href\" :href=\"line.href\">{{ line.label }}</a>\r\n <span v-else>{{ line.label }}</span>\r\n </template>\r\n </address>\r\n </div>\r\n </div>\r\n <div v-if=\"copyright || credit || $slots['bottom-start'] || $slots['bottom-end']\" class=\"oc-site-footer__bottom\">\r\n <span><slot name=\"bottom-start\">{{ copyright }}</slot></span>\r\n <span><slot name=\"bottom-end\">{{ credit }}</slot></span>\r\n </div>\r\n </div>\r\n </footer>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Sticky header that turns into glass after scrolling; the mobile menu is a popover. No JavaScript needed.\r\n * Slots: brand (inside the brand link), nav (replaces the items), cta (the trailing button).\r\n * Classes: .oc-site-header, __inner, __brand, __toggle, __nav, .oc-container\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface SiteHeaderLink {\r\n label: string\r\n href: string\r\n current?: boolean\r\n}\r\nwithDefaults(\r\n defineProps<{ items?: SiteHeaderLink[]; homeHref?: string; menuLabel?: string; navLabel?: string }>(),\r\n { items: () => [], homeHref: '/', menuLabel: 'Menu', navLabel: 'Main' },\r\n)\r\nconst navId = useUid('oc-site-nav')\r\n</script>\r\n\r\n<template>\r\n <header class=\"oc-site-header\">\r\n <div class=\"oc-container oc-site-header__inner\">\r\n <a class=\"oc-site-header__brand\" :href=\"homeHref\"><slot name=\"brand\" /></a>\r\n <button class=\"oc-site-header__toggle\" type=\"button\" :popovertarget=\"navId\" :aria-label=\"menuLabel\">☰</button>\r\n <nav :id=\"navId\" class=\"oc-site-header__nav\" popover :aria-label=\"navLabel\">\r\n <slot name=\"nav\">\r\n <a v-for=\"item in items\" :key=\"item.href + item.label\" :href=\"item.href\" :aria-current=\"item.current ? 'page' : undefined\">{{ item.label }}</a>\r\n </slot>\r\n <slot name=\"cta\" />\r\n </nav>\r\n </div>\r\n </header>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Highlighted flagship product: badge, big title with icon tile, tagline, copy, button and a module list.\r\n * Slots: cta (default: a gradient link from `ctaLabel` / `ctaHref`). Classes: .oc-spotlight(__title/__tagline/__modules),\r\n * .oc-accent--<name>, .oc-pill--accent, .oc-status-dot, .oc-icon-tile(--lg/--sm), .oc-lead\r\n */\r\nexport interface SpotlightModule {\r\n icon?: string\r\n label: string\r\n}\r\ndefineProps<{\r\n accent?: string\r\n badge?: string\r\n icon?: string\r\n title: string\r\n tagline?: string\r\n lead?: string\r\n ctaLabel?: string\r\n ctaHref?: string\r\n modules?: SpotlightModule[]\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <section class=\"oc-section-pad\">\r\n <div class=\"oc-container\">\r\n <div :class=\"['oc-spotlight', accent && `oc-accent--${accent}`]\">\r\n <div>\r\n <span v-if=\"badge\" class=\"oc-pill oc-pill--accent\"><span class=\"oc-status-dot\"></span>{{ badge }}</span>\r\n <h2 class=\"oc-spotlight__title\">\r\n <span v-if=\"icon\" class=\"oc-icon-tile oc-icon-tile--lg\" aria-hidden=\"true\">{{ icon }}</span>{{ title }}\r\n </h2>\r\n <p v-if=\"tagline\" class=\"oc-spotlight__tagline\">{{ tagline }}</p>\r\n <p v-if=\"lead\" class=\"oc-lead\">{{ lead }}</p>\r\n <slot name=\"cta\">\r\n <a v-if=\"ctaLabel\" class=\"oc-btn oc-btn--gradient oc-btn--lg\" :href=\"ctaHref ?? '#'\">{{ ctaLabel }}</a>\r\n </slot>\r\n </div>\r\n <ul v-if=\"modules?.length\" class=\"oc-spotlight__modules\">\r\n <li v-for=\"m in modules\" :key=\"m.label\">\r\n <span class=\"oc-icon-tile oc-icon-tile--sm\" aria-hidden=\"true\">{{ m.icon }}</span>{{ m.label }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </section>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Key figures row. Classes: .oc-block-stats, -stat, -stat-value, -stat-label */\r\nexport interface StatItem {\r\n value: string\r\n label: string\r\n}\r\ndefineProps<{ items: StatItem[] }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-stats\">\r\n <div v-for=\"item in items\" :key=\"item.label\" class=\"oc-block-stat\">\r\n <div class=\"oc-block-stat-value\">{{ item.value }}</div>\r\n <div class=\"oc-block-stat-label\">{{ item.label }}</div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/** Key figures that count up when they scroll into view (CSS only). Classes: .oc-block-stats, -stat, -stat-value + .oc-counter, -stat-label */\r\nimport OcCounter from '../components/OcCounter.vue'\r\n\r\nexport interface CounterStat {\r\n to: number\r\n suffix?: string\r\n label: string\r\n}\r\ndefineProps<{ items: CounterStat[] }>()\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-stats\">\r\n <div v-for=\"item in items\" :key=\"item.label\" class=\"oc-block-stat\">\r\n <OcCounter class=\"oc-block-stat-value\" :to=\"item.to\" :suffix=\"item.suffix\" />\r\n <span class=\"oc-block-stat-label\">{{ item.label }}</span>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Member rows with avatar, role badge and a row action menu (popover). Emits `action` ({ member, action }).\r\n * Slot `meta` (scoped: { member }) adds extra badges. Classes: .oc-block-team, -row, -meta, .oc-user, .oc-dropdown-menu\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nexport interface TeamAction {\r\n label: string\r\n href?: string\r\n /** Draw a separator line before this action */\r\n separator?: boolean\r\n}\r\nexport interface TeamMember {\r\n name: string\r\n email?: string\r\n initials?: string\r\n role?: string\r\n roleVariant?: 'default' | 'secondary' | 'outline' | 'destructive' | 'success' | 'warning' | 'info'\r\n actions?: TeamAction[]\r\n}\r\ndefineProps<{ members: TeamMember[]; actionsLabel?: string }>()\r\ndefineEmits<{ action: [payload: { member: TeamMember; action: TeamAction }] }>()\r\nconst base = useUid('oc-team-menu')\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-team\">\r\n <div v-for=\"(member, i) in members\" :key=\"member.email ?? member.name\" class=\"oc-block-team-row\">\r\n <div class=\"oc-user\">\r\n <span class=\"oc-avatar\">{{ member.initials }}</span>\r\n <span class=\"oc-user-text\">\r\n <span class=\"oc-user-name\">{{ member.name }}</span>\r\n <span v-if=\"member.email\" class=\"oc-user-email\">{{ member.email }}</span>\r\n </span>\r\n </div>\r\n <div class=\"oc-block-team-meta\">\r\n <span v-if=\"member.role\" :class=\"['oc-badge', member.roleVariant && member.roleVariant !== 'default' && `oc-badge--${member.roleVariant}`]\">{{ member.role }}</span>\r\n <slot name=\"meta\" :member=\"member\" />\r\n <template v-if=\"member.actions?.length\">\r\n <button class=\"oc-btn oc-btn--ghost oc-btn--icon oc-btn--sm\" type=\"button\" :popovertarget=\"`${base}-${i}`\" :aria-label=\"actionsLabel ?? 'Member actions'\">…</button>\r\n <div :id=\"`${base}-${i}`\" class=\"oc-dropdown-menu\" popover>\r\n <template v-for=\"action in member.actions\" :key=\"action.label\">\r\n <div v-if=\"action.separator\" class=\"oc-dropdown-separator\"></div>\r\n <a v-if=\"action.href\" class=\"oc-dropdown-item\" :href=\"action.href\" @click=\"$emit('action', { member, action })\">{{ action.label }}</a>\r\n <button v-else class=\"oc-dropdown-item\" type=\"button\" @click=\"$emit('action', { member, action })\">{{ action.label }}</button>\r\n </template>\r\n </div>\r\n </template>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Authenticator setup: QR, copyable key, OTP code and recovery codes. v-model = the typed code.\r\n * Emits `submit` with the code (form submit of the confirm step). Slot `qr` replaces the QR placeholder.\r\n * Classes: .oc-block-twofactor, -step, -center, -qr; reuses copy-field, otp, recovery-codes components.\r\n */\r\nimport OcCopyField from '../components/OcCopyField.vue'\r\nimport OcOtpInput from '../components/OcOtpInput.vue'\r\nimport OcRecoveryCodes from '../components/OcRecoveryCodes.vue'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n setupKey: string\r\n recoveryCodes?: string[]\r\n length?: number\r\n scanTitle?: string\r\n scanText?: string\r\n confirmTitle?: string\r\n codeLabel?: string\r\n submitLabel?: string\r\n }>(),\r\n {\r\n length: 6,\r\n scanTitle: '1. Scan the QR code',\r\n scanText: 'Use an authenticator app, or enter the key manually.',\r\n confirmTitle: '2. Confirm with a code',\r\n codeLabel: 'Authentication code',\r\n submitLabel: 'Enable two-factor',\r\n },\r\n)\r\ndefineEmits<{ submit: [code: string] }>()\r\nconst code = defineModel<string>({ default: '' })\r\nconst codeId = useUid('oc-twofactor-code')\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-block-twofactor\">\r\n <section class=\"oc-block-twofactor-step\">\r\n <div class=\"oc-heading oc-heading--sm\">\r\n <h2 class=\"oc-heading-title\">{{ scanTitle }}</h2>\r\n <p v-if=\"scanText\" class=\"oc-heading-description\">{{ scanText }}</p>\r\n </div>\r\n <div class=\"oc-block-twofactor-center\">\r\n <slot name=\"qr\"><div class=\"oc-block-twofactor-qr\" role=\"img\" aria-label=\"QR code\">QR code</div></slot>\r\n <OcCopyField :value=\"setupKey\" label=\"Setup key\" />\r\n </div>\r\n </section>\r\n <section class=\"oc-block-twofactor-step\">\r\n <div class=\"oc-heading oc-heading--sm\"><h2 class=\"oc-heading-title\">{{ confirmTitle }}</h2></div>\r\n <div class=\"oc-field\">\r\n <label class=\"oc-field-label\" :for=\"codeId\">{{ codeLabel }}</label>\r\n <OcOtpInput :id=\"codeId\" v-model=\"code\" name=\"code\" :length=\"length\" />\r\n </div>\r\n <button class=\"oc-btn\" type=\"submit\" @click=\"$emit('submit', code)\">{{ submitLabel }}</button>\r\n </section>\r\n <section v-if=\"recoveryCodes?.length\" class=\"oc-block-twofactor-step\">\r\n <OcRecoveryCodes :codes=\"recoveryCodes\" />\r\n </section>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * Modal wizard: stepper rail on the left, step content and a Back / Next footer.\r\n * v-model:open opens the dialog, v-model:step is the active step index. Emits `finish` on the last step's button.\r\n * Slots: step-<index> (or default, scoped: { step, index }) for the content of each step.\r\n * Classes: dialog.oc-modal > .oc-modal-content--xl, .oc-block-wizard(-rail/-main/-step), .oc-stepper, .oc-modal-footer\r\n */\r\nimport { computed, ref } from 'vue'\r\nimport OcStepper from '../components/OcStepper.vue'\r\nimport { useDialog } from '../composables/useDialog'\r\nimport { useUid } from '../composables/useUid'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n steps: { label: string }[]\r\n backLabel?: string\r\n nextLabel?: string\r\n finishLabel?: string\r\n stepsLabel?: string\r\n /** Text for \"Step 2 of 3\"; receives the 1-based index and the count */\r\n stepText?: (index: number, total: number) => string\r\n }>(),\r\n { backLabel: 'Back', nextLabel: 'Next', finishLabel: 'Finish', stepsLabel: 'Setup steps' },\r\n)\r\nconst emit = defineEmits<{ finish: [] }>()\r\nconst open = defineModel<boolean>('open', { default: false })\r\nconst step = defineModel<number>('step', { default: 0 })\r\nconst el = ref<HTMLDialogElement | null>(null)\r\nconst { onClose } = useDialog(open, el)\r\nconst titleId = useUid('oc-wizard-title')\r\nconst last = computed(() => step.value >= props.steps.length - 1)\r\nconst description = computed(() => (props.stepText ?? ((i, n) => `Step ${i} of ${n}`))(step.value + 1, props.steps.length))\r\n\r\nfunction next() {\r\n if (last.value) {\r\n emit('finish')\r\n open.value = false\r\n } else {\r\n step.value++\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <dialog ref=\"el\" class=\"oc-modal\" closedby=\"closerequest\" :aria-labelledby=\"titleId\" @close=\"onClose\">\r\n <div class=\"oc-modal-content oc-modal-content--xl\">\r\n <div class=\"oc-block-wizard\">\r\n <div class=\"oc-block-wizard-rail\">\r\n <OcStepper v-model=\"step\" :steps=\"steps\" :label=\"stepsLabel\" />\r\n </div>\r\n <div class=\"oc-block-wizard-main\">\r\n <div class=\"oc-modal-header\">\r\n <h2 :id=\"titleId\" class=\"oc-modal-title\">{{ steps[step]?.label }}</h2>\r\n <p class=\"oc-modal-description\">{{ description }}</p>\r\n </div>\r\n <div class=\"oc-block-wizard-step\">\r\n <slot :name=\"`step-${step}`\" :step=\"steps[step]\" :index=\"step\"><slot :step=\"steps[step]\" :index=\"step\" /></slot>\r\n </div>\r\n <div class=\"oc-modal-footer\">\r\n <button class=\"oc-btn oc-btn--outline\" type=\"button\" :disabled=\"step === 0\" @click=\"step--\">{{ backLabel }}</button>\r\n <button class=\"oc-btn\" type=\"button\" @click=\"next\">{{ last ? finishLabel : nextLabel }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </dialog>\r\n</template>\r\n","// File: packages/vue/src/index.ts (generated by scripts/generate-index.mjs - do not edit by hand)\nimport type { App, Component } from 'vue'\n\nimport OcAccordion from './components/OcAccordion.vue'\nimport OcAccordionAccent from './components/OcAccordionAccent.vue'\nimport OcAccordionItem from './components/OcAccordionItem.vue'\nimport OcAffixInput from './components/OcAffixInput.vue'\nimport OcAlert from './components/OcAlert.vue'\nimport OcAlertDialog from './components/OcAlertDialog.vue'\nimport OcAlphaTabs from './components/OcAlphaTabs.vue'\nimport OcAspectRatio from './components/OcAspectRatio.vue'\nimport OcAttachment from './components/OcAttachment.vue'\nimport OcAttachmentImage from './components/OcAttachmentImage.vue'\nimport OcAttachmentList from './components/OcAttachmentList.vue'\nimport OcAttachmentThumb from './components/OcAttachmentThumb.vue'\nimport OcAvatar from './components/OcAvatar.vue'\nimport OcAvatarGroup from './components/OcAvatarGroup.vue'\nimport OcAvatarPicker from './components/OcAvatarPicker.vue'\nimport OcBackLink from './components/OcBackLink.vue'\nimport OcBadge from './components/OcBadge.vue'\nimport OcBarcode from './components/OcBarcode.vue'\nimport OcBarcodeInput from './components/OcBarcodeInput.vue'\nimport OcBrandMark from './components/OcBrandMark.vue'\nimport OcBreadcrumb from './components/OcBreadcrumb.vue'\nimport OcBrowserFrame from './components/OcBrowserFrame.vue'\nimport OcBusyOverlay from './components/OcBusyOverlay.vue'\nimport OcButton from './components/OcButton.vue'\nimport OcButtonGroup from './components/OcButtonGroup.vue'\nimport OcButtonGroupText from './components/OcButtonGroupText.vue'\nimport OcCallout from './components/OcCallout.vue'\nimport OcCard from './components/OcCard.vue'\nimport OcChartLine from './components/OcChartLine.vue'\nimport OcChatComposer from './components/OcChatComposer.vue'\nimport OcCheckbox from './components/OcCheckbox.vue'\nimport OcChecklist from './components/OcChecklist.vue'\nimport OcChipFilter from './components/OcChipFilter.vue'\nimport OcCollapsible from './components/OcCollapsible.vue'\nimport OcColorField from './components/OcColorField.vue'\nimport OcColorSelect from './components/OcColorSelect.vue'\nimport OcCommand from './components/OcCommand.vue'\nimport OcConfirmDialog from './components/OcConfirmDialog.vue'\nimport OcCookieConsent from './components/OcCookieConsent.vue'\nimport OcCopyField from './components/OcCopyField.vue'\nimport OcCounter from './components/OcCounter.vue'\nimport OcDataTable from './components/OcDataTable.vue'\nimport OcDataTableName from './components/OcDataTableName.vue'\nimport OcDateField from './components/OcDateField.vue'\nimport OcDecimalInput from './components/OcDecimalInput.vue'\nimport OcDefinitionList from './components/OcDefinitionList.vue'\nimport OcDocViewer from './components/OcDocViewer.vue'\nimport OcDropdown from './components/OcDropdown.vue'\nimport OcDropdownItem from './components/OcDropdownItem.vue'\nimport OcDropdownLabel from './components/OcDropdownLabel.vue'\nimport OcDropdownSeparator from './components/OcDropdownSeparator.vue'\nimport OcDropzone from './components/OcDropzone.vue'\nimport OcEmojiPicker from './components/OcEmojiPicker.vue'\nimport OcEmptyState from './components/OcEmptyState.vue'\nimport OcEntityCard from './components/OcEntityCard.vue'\nimport OcFactList from './components/OcFactList.vue'\nimport OcFeatureCard from './components/OcFeatureCard.vue'\nimport OcFilterCounts from './components/OcFilterCounts.vue'\nimport OcFlipCard from './components/OcFlipCard.vue'\nimport OcFormField from './components/OcFormField.vue'\nimport OcFormSection from './components/OcFormSection.vue'\nimport OcGallery from './components/OcGallery.vue'\nimport OcGlass from './components/OcGlass.vue'\nimport OcGlassBar from './components/OcGlassBar.vue'\nimport OcGlassPanel from './components/OcGlassPanel.vue'\nimport OcGreeting from './components/OcGreeting.vue'\nimport OcGroup from './components/OcGroup.vue'\nimport OcHeading from './components/OcHeading.vue'\nimport OcHoverCard from './components/OcHoverCard.vue'\nimport OcImageZoom from './components/OcImageZoom.vue'\nimport OcInput from './components/OcInput.vue'\nimport OcInputGroup from './components/OcInputGroup.vue'\nimport OcItem from './components/OcItem.vue'\nimport OcItemGroup from './components/OcItemGroup.vue'\nimport OcItemSeparator from './components/OcItemSeparator.vue'\nimport OcKbd from './components/OcKbd.vue'\nimport OcKbdGroup from './components/OcKbdGroup.vue'\nimport OcLabel from './components/OcLabel.vue'\nimport OcLanguageSelect from './components/OcLanguageSelect.vue'\nimport OcLauncherCard from './components/OcLauncherCard.vue'\nimport OcLazyImage from './components/OcLazyImage.vue'\nimport OcLightbox from './components/OcLightbox.vue'\nimport OcLinkArrow from './components/OcLinkArrow.vue'\nimport OcLinkCard from './components/OcLinkCard.vue'\nimport OcLinkRow from './components/OcLinkRow.vue'\nimport OcListToolbar from './components/OcListToolbar.vue'\nimport OcLiveFrame from './components/OcLiveFrame.vue'\nimport OcMarquee from './components/OcMarquee.vue'\nimport OcMediaCard from './components/OcMediaCard.vue'\nimport OcMediaRow from './components/OcMediaRow.vue'\nimport OcMediaThumb from './components/OcMediaThumb.vue'\nimport OcMenuStatic from './components/OcMenuStatic.vue'\nimport OcMessage from './components/OcMessage.vue'\nimport OcMessageList from './components/OcMessageList.vue'\nimport OcMessageThread from './components/OcMessageThread.vue'\nimport OcMeterRow from './components/OcMeterRow.vue'\nimport OcModal from './components/OcModal.vue'\nimport OcNameCard from './components/OcNameCard.vue'\nimport OcNavmenu from './components/OcNavmenu.vue'\nimport OcNavmenuList from './components/OcNavmenuList.vue'\nimport OcNextTeaser from './components/OcNextTeaser.vue'\nimport OcNumberInput from './components/OcNumberInput.vue'\nimport OcOtpInput from './components/OcOtpInput.vue'\nimport OcPageHeader from './components/OcPageHeader.vue'\nimport OcPagination from './components/OcPagination.vue'\nimport OcPanel from './components/OcPanel.vue'\nimport OcParticleField from './components/OcParticleField.vue'\nimport OcPasswordInput from './components/OcPasswordInput.vue'\nimport OcPasswordRequirements from './components/OcPasswordRequirements.vue'\nimport OcPhoneInput from './components/OcPhoneInput.vue'\nimport OcPopover from './components/OcPopover.vue'\nimport OcPrice from './components/OcPrice.vue'\nimport OcPriceCard from './components/OcPriceCard.vue'\nimport OcProductMark from './components/OcProductMark.vue'\nimport OcProgress from './components/OcProgress.vue'\nimport OcProjectCard from './components/OcProjectCard.vue'\nimport OcProse from './components/OcProse.vue'\nimport OcQuantity from './components/OcQuantity.vue'\nimport OcRadio from './components/OcRadio.vue'\nimport OcRadioGroup from './components/OcRadioGroup.vue'\nimport OcRating from './components/OcRating.vue'\nimport OcRatingInput from './components/OcRatingInput.vue'\nimport OcReading from './components/OcReading.vue'\nimport OcRecoveryCodes from './components/OcRecoveryCodes.vue'\nimport OcResult from './components/OcResult.vue'\nimport OcRibbon from './components/OcRibbon.vue'\nimport OcScrollArea from './components/OcScrollArea.vue'\nimport OcSegmented from './components/OcSegmented.vue'\nimport OcSelect from './components/OcSelect.vue'\nimport OcSeparator from './components/OcSeparator.vue'\nimport OcSeverityCard from './components/OcSeverityCard.vue'\nimport OcSheet from './components/OcSheet.vue'\nimport OcSidebar from './components/OcSidebar.vue'\nimport OcSidebarCollapsible from './components/OcSidebarCollapsible.vue'\nimport OcSidebarGroup from './components/OcSidebarGroup.vue'\nimport OcSidebarMenu from './components/OcSidebarMenu.vue'\nimport OcSidebarMenuButton from './components/OcSidebarMenuButton.vue'\nimport OcSidebarSeparator from './components/OcSidebarSeparator.vue'\nimport OcSkeleton from './components/OcSkeleton.vue'\nimport OcSlider from './components/OcSlider.vue'\nimport OcSortableRow from './components/OcSortableRow.vue'\nimport OcSpecList from './components/OcSpecList.vue'\nimport OcSpinner from './components/OcSpinner.vue'\nimport OcStackCard from './components/OcStackCard.vue'\nimport OcStackList from './components/OcStackList.vue'\nimport OcStatCard from './components/OcStatCard.vue'\nimport OcStatus from './components/OcStatus.vue'\nimport OcStatusDot from './components/OcStatusDot.vue'\nimport OcStepper from './components/OcStepper.vue'\nimport OcStock from './components/OcStock.vue'\nimport OcSwitch from './components/OcSwitch.vue'\nimport OcTable from './components/OcTable.vue'\nimport OcTableActions from './components/OcTableActions.vue'\nimport OcTableCompact from './components/OcTableCompact.vue'\nimport OcTabs from './components/OcTabs.vue'\nimport OcTagInput from './components/OcTagInput.vue'\nimport OcTerminalLog from './components/OcTerminalLog.vue'\nimport OcTextarea from './components/OcTextarea.vue'\nimport OcThemeSwitch from './components/OcThemeSwitch.vue'\nimport OcTimeInput from './components/OcTimeInput.vue'\nimport OcTimeline from './components/OcTimeline.vue'\nimport OcTitlebar from './components/OcTitlebar.vue'\nimport OcTitlebarBody from './components/OcTitlebarBody.vue'\nimport OcTitlebarButton from './components/OcTitlebarButton.vue'\nimport OcTitlebarWindow from './components/OcTitlebarWindow.vue'\nimport OcToast from './components/OcToast.vue'\nimport OcToastContainer from './components/OcToastContainer.vue'\nimport OcToggle from './components/OcToggle.vue'\nimport OcToggleField from './components/OcToggleField.vue'\nimport OcToggleGroup from './components/OcToggleGroup.vue'\nimport OcTooltip from './components/OcTooltip.vue'\nimport OcTopProgress from './components/OcTopProgress.vue'\nimport OcTree from './components/OcTree.vue'\nimport OcUpgradeBanner from './components/OcUpgradeBanner.vue'\nimport OcUser from './components/OcUser.vue'\nimport OcVersionBanner from './components/OcVersionBanner.vue'\nimport OcWatermark from './components/OcWatermark.vue'\nimport OcBlockAboutTimeline from './blocks/OcBlockAboutTimeline.vue'\nimport OcBlockAppHeader from './blocks/OcBlockAppHeader.vue'\nimport OcBlockAppShell from './blocks/OcBlockAppShell.vue'\nimport OcBlockAuth from './blocks/OcBlockAuth.vue'\nimport OcBlockAuthSplit from './blocks/OcBlockAuthSplit.vue'\nimport OcBlockContactForm from './blocks/OcBlockContactForm.vue'\nimport OcBlockContactGrid from './blocks/OcBlockContactGrid.vue'\nimport OcBlockCta from './blocks/OcBlockCta.vue'\nimport OcBlockDataTable from './blocks/OcBlockDataTable.vue'\nimport OcBlockFaq from './blocks/OcBlockFaq.vue'\nimport OcBlockFeatures from './blocks/OcBlockFeatures.vue'\nimport OcBlockFooter from './blocks/OcBlockFooter.vue'\nimport OcBlockFormPage from './blocks/OcBlockFormPage.vue'\nimport OcBlockHero from './blocks/OcBlockHero.vue'\nimport OcBlockHeroCode from './blocks/OcBlockHeroCode.vue'\nimport OcBlockHeroOrbit from './blocks/OcBlockHeroOrbit.vue'\nimport OcBlockHeroSplit from './blocks/OcBlockHeroSplit.vue'\nimport OcBlockModuleHeader from './blocks/OcBlockModuleHeader.vue'\nimport OcBlockPageHero from './blocks/OcBlockPageHero.vue'\nimport OcBlockPortfolioGrid from './blocks/OcBlockPortfolioGrid.vue'\nimport OcBlockPricing from './blocks/OcBlockPricing.vue'\nimport OcBlockProcess from './blocks/OcBlockProcess.vue'\nimport OcBlockProductGrid from './blocks/OcBlockProductGrid.vue'\nimport OcBlockProfileHeader from './blocks/OcBlockProfileHeader.vue'\nimport OcBlockShowcase from './blocks/OcBlockShowcase.vue'\nimport OcBlockSiteFooter from './blocks/OcBlockSiteFooter.vue'\nimport OcBlockSiteHeader from './blocks/OcBlockSiteHeader.vue'\nimport OcBlockSpotlight from './blocks/OcBlockSpotlight.vue'\nimport OcBlockStats from './blocks/OcBlockStats.vue'\nimport OcBlockStatsCounter from './blocks/OcBlockStatsCounter.vue'\nimport OcBlockTeamList from './blocks/OcBlockTeamList.vue'\nimport OcBlockTwoFactor from './blocks/OcBlockTwoFactor.vue'\nimport OcBlockWizardDialog from './blocks/OcBlockWizardDialog.vue'\n\nexport {\n OcAccordion,\n OcAccordionAccent,\n OcAccordionItem,\n OcAffixInput,\n OcAlert,\n OcAlertDialog,\n OcAlphaTabs,\n OcAspectRatio,\n OcAttachment,\n OcAttachmentImage,\n OcAttachmentList,\n OcAttachmentThumb,\n OcAvatar,\n OcAvatarGroup,\n OcAvatarPicker,\n OcBackLink,\n OcBadge,\n OcBarcode,\n OcBarcodeInput,\n OcBrandMark,\n OcBreadcrumb,\n OcBrowserFrame,\n OcBusyOverlay,\n OcButton,\n OcButtonGroup,\n OcButtonGroupText,\n OcCallout,\n OcCard,\n OcChartLine,\n OcChatComposer,\n OcCheckbox,\n OcChecklist,\n OcChipFilter,\n OcCollapsible,\n OcColorField,\n OcColorSelect,\n OcCommand,\n OcConfirmDialog,\n OcCookieConsent,\n OcCopyField,\n OcCounter,\n OcDataTable,\n OcDataTableName,\n OcDateField,\n OcDecimalInput,\n OcDefinitionList,\n OcDocViewer,\n OcDropdown,\n OcDropdownItem,\n OcDropdownLabel,\n OcDropdownSeparator,\n OcDropzone,\n OcEmojiPicker,\n OcEmptyState,\n OcEntityCard,\n OcFactList,\n OcFeatureCard,\n OcFilterCounts,\n OcFlipCard,\n OcFormField,\n OcFormSection,\n OcGallery,\n OcGlass,\n OcGlassBar,\n OcGlassPanel,\n OcGreeting,\n OcGroup,\n OcHeading,\n OcHoverCard,\n OcImageZoom,\n OcInput,\n OcInputGroup,\n OcItem,\n OcItemGroup,\n OcItemSeparator,\n OcKbd,\n OcKbdGroup,\n OcLabel,\n OcLanguageSelect,\n OcLauncherCard,\n OcLazyImage,\n OcLightbox,\n OcLinkArrow,\n OcLinkCard,\n OcLinkRow,\n OcListToolbar,\n OcLiveFrame,\n OcMarquee,\n OcMediaCard,\n OcMediaRow,\n OcMediaThumb,\n OcMenuStatic,\n OcMessage,\n OcMessageList,\n OcMessageThread,\n OcMeterRow,\n OcModal,\n OcNameCard,\n OcNavmenu,\n OcNavmenuList,\n OcNextTeaser,\n OcNumberInput,\n OcOtpInput,\n OcPageHeader,\n OcPagination,\n OcPanel,\n OcParticleField,\n OcPasswordInput,\n OcPasswordRequirements,\n OcPhoneInput,\n OcPopover,\n OcPrice,\n OcPriceCard,\n OcProductMark,\n OcProgress,\n OcProjectCard,\n OcProse,\n OcQuantity,\n OcRadio,\n OcRadioGroup,\n OcRating,\n OcRatingInput,\n OcReading,\n OcRecoveryCodes,\n OcResult,\n OcRibbon,\n OcScrollArea,\n OcSegmented,\n OcSelect,\n OcSeparator,\n OcSeverityCard,\n OcSheet,\n OcSidebar,\n OcSidebarCollapsible,\n OcSidebarGroup,\n OcSidebarMenu,\n OcSidebarMenuButton,\n OcSidebarSeparator,\n OcSkeleton,\n OcSlider,\n OcSortableRow,\n OcSpecList,\n OcSpinner,\n OcStackCard,\n OcStackList,\n OcStatCard,\n OcStatus,\n OcStatusDot,\n OcStepper,\n OcStock,\n OcSwitch,\n OcTable,\n OcTableActions,\n OcTableCompact,\n OcTabs,\n OcTagInput,\n OcTerminalLog,\n OcTextarea,\n OcThemeSwitch,\n OcTimeInput,\n OcTimeline,\n OcTitlebar,\n OcTitlebarBody,\n OcTitlebarButton,\n OcTitlebarWindow,\n OcToast,\n OcToastContainer,\n OcToggle,\n OcToggleField,\n OcToggleGroup,\n OcTooltip,\n OcTopProgress,\n OcTree,\n OcUpgradeBanner,\n OcUser,\n OcVersionBanner,\n OcWatermark,\n OcBlockAboutTimeline,\n OcBlockAppHeader,\n OcBlockAppShell,\n OcBlockAuth,\n OcBlockAuthSplit,\n OcBlockContactForm,\n OcBlockContactGrid,\n OcBlockCta,\n OcBlockDataTable,\n OcBlockFaq,\n OcBlockFeatures,\n OcBlockFooter,\n OcBlockFormPage,\n OcBlockHero,\n OcBlockHeroCode,\n OcBlockHeroOrbit,\n OcBlockHeroSplit,\n OcBlockModuleHeader,\n OcBlockPageHero,\n OcBlockPortfolioGrid,\n OcBlockPricing,\n OcBlockProcess,\n OcBlockProductGrid,\n OcBlockProfileHeader,\n OcBlockShowcase,\n OcBlockSiteFooter,\n OcBlockSiteHeader,\n OcBlockSpotlight,\n OcBlockStats,\n OcBlockStatsCounter,\n OcBlockTeamList,\n OcBlockTwoFactor,\n OcBlockWizardDialog,\n}\n\nexport type { AffixInputKind } from './components/OcAffixInput.vue'\nexport type { AttachmentType, AttachmentFile } from './components/OcAttachment.vue'\nexport type { BreadcrumbItem } from './components/OcBreadcrumb.vue'\nexport type { ChartLineSeries } from './components/OcChartLine.vue'\nexport type { ChecklistItem } from './components/OcChecklist.vue'\nexport type { ChipFilterItem } from './components/OcChipFilter.vue'\nexport type { ColorSelectItem } from './components/OcColorSelect.vue'\nexport type { CommandItem } from './components/OcCommand.vue'\nexport type { CookieCategory, ConsentChoice } from './components/OcCookieConsent.vue'\nexport type { DataTableColumn, DataTableRow, DataTableTabs, DataTableColumnFilter } from './components/OcDataTable.vue'\nexport type { DefinitionRow } from './components/OcDefinitionList.vue'\nexport type { DocViewerItem } from './components/OcDocViewer.vue'\nexport type { FactListRow } from './components/OcFactList.vue'\nexport type { FilterCountsItem } from './components/OcFilterCounts.vue'\nexport type { GalleryImage } from './components/OcGallery.vue'\nexport type { GlassBarItem } from './components/OcGlassBar.vue'\nexport type { LanguageSelectItem } from './components/OcLanguageSelect.vue'\nexport type { MessageAttachment, MessageAction, MessageData } from './components/OcMessage.vue'\nexport type { MessageListItem } from './components/OcMessageList.vue'\nexport type { ThreadParticipant, ThreadMenuItem } from './components/OcMessageThread.vue'\nexport type { NavmenuItem } from './components/OcNavmenuList.vue'\nexport type { PasswordRequirementRule } from './components/OcPasswordRequirements.vue'\nexport type { PhoneInputCountry } from './components/OcPhoneInput.vue'\nexport type { PriceCardFeature, PriceCardPrice } from './components/OcPriceCard.vue'\nexport type { RadioOption } from './components/OcRadioGroup.vue'\nexport type { SegmentedOption } from './components/OcSegmented.vue'\nexport type { SelectOption } from './components/OcSelect.vue'\nexport type { SpecGroup } from './components/OcSpecList.vue'\nexport type { StackListItem } from './components/OcStackList.vue'\nexport type { StepperStep } from './components/OcStepper.vue'\nexport type { TableColumn, TableSort } from './components/OcTable.vue'\nexport type { TableCompactColumn } from './components/OcTableCompact.vue'\nexport type { TabItem } from './components/OcTabs.vue'\nexport type { TimelineEntry } from './components/OcTimeline.vue'\nexport type { OcTreeItem } from './components/OcTree.vue'\nexport type { ContactFormLine, ContactFormCard, ContactFormSubject } from './blocks/OcBlockContactForm.vue'\nexport type { ContactGridLine, ContactGridCard } from './blocks/OcBlockContactGrid.vue'\nexport type { FaqItem } from './blocks/OcBlockFaq.vue'\nexport type { FeatureItem } from './blocks/OcBlockFeatures.vue'\nexport type { FooterColumn } from './blocks/OcBlockFooter.vue'\nexport type { HeroOrbitMark } from './blocks/OcBlockHeroOrbit.vue'\nexport type { PortfolioGridProject } from './blocks/OcBlockPortfolioGrid.vue'\nexport type { PricingPlan } from './blocks/OcBlockPricing.vue'\nexport type { ProcessStep } from './blocks/OcBlockProcess.vue'\nexport type { ProductItem } from './blocks/OcBlockProductGrid.vue'\nexport type { ProfileHeaderTab } from './blocks/OcBlockProfileHeader.vue'\nexport type { ShowcaseProject } from './blocks/OcBlockShowcase.vue'\nexport type { SiteFooterColumn, SiteFooterContact } from './blocks/OcBlockSiteFooter.vue'\nexport type { SiteHeaderLink } from './blocks/OcBlockSiteHeader.vue'\nexport type { SpotlightModule } from './blocks/OcBlockSpotlight.vue'\nexport type { StatItem } from './blocks/OcBlockStats.vue'\nexport type { CounterStat } from './blocks/OcBlockStatsCounter.vue'\nexport type { TeamAction, TeamMember } from './blocks/OcBlockTeamList.vue'\n\nexport { useToast } from './composables/useToast'\nexport type { ToastItem, ToastOptions, ToastVariant } from './composables/useToast'\nexport { useUid } from './composables/useUid'\n\n/** Every component and block by name, e.g. { OcButton, OcBlockHero, ... }. */\nexport const components: Record<string, Component> = {\n OcAccordion,\n OcAccordionAccent,\n OcAccordionItem,\n OcAffixInput,\n OcAlert,\n OcAlertDialog,\n OcAlphaTabs,\n OcAspectRatio,\n OcAttachment,\n OcAttachmentImage,\n OcAttachmentList,\n OcAttachmentThumb,\n OcAvatar,\n OcAvatarGroup,\n OcAvatarPicker,\n OcBackLink,\n OcBadge,\n OcBarcode,\n OcBarcodeInput,\n OcBrandMark,\n OcBreadcrumb,\n OcBrowserFrame,\n OcBusyOverlay,\n OcButton,\n OcButtonGroup,\n OcButtonGroupText,\n OcCallout,\n OcCard,\n OcChartLine,\n OcChatComposer,\n OcCheckbox,\n OcChecklist,\n OcChipFilter,\n OcCollapsible,\n OcColorField,\n OcColorSelect,\n OcCommand,\n OcConfirmDialog,\n OcCookieConsent,\n OcCopyField,\n OcCounter,\n OcDataTable,\n OcDataTableName,\n OcDateField,\n OcDecimalInput,\n OcDefinitionList,\n OcDocViewer,\n OcDropdown,\n OcDropdownItem,\n OcDropdownLabel,\n OcDropdownSeparator,\n OcDropzone,\n OcEmojiPicker,\n OcEmptyState,\n OcEntityCard,\n OcFactList,\n OcFeatureCard,\n OcFilterCounts,\n OcFlipCard,\n OcFormField,\n OcFormSection,\n OcGallery,\n OcGlass,\n OcGlassBar,\n OcGlassPanel,\n OcGreeting,\n OcGroup,\n OcHeading,\n OcHoverCard,\n OcImageZoom,\n OcInput,\n OcInputGroup,\n OcItem,\n OcItemGroup,\n OcItemSeparator,\n OcKbd,\n OcKbdGroup,\n OcLabel,\n OcLanguageSelect,\n OcLauncherCard,\n OcLazyImage,\n OcLightbox,\n OcLinkArrow,\n OcLinkCard,\n OcLinkRow,\n OcListToolbar,\n OcLiveFrame,\n OcMarquee,\n OcMediaCard,\n OcMediaRow,\n OcMediaThumb,\n OcMenuStatic,\n OcMessage,\n OcMessageList,\n OcMessageThread,\n OcMeterRow,\n OcModal,\n OcNameCard,\n OcNavmenu,\n OcNavmenuList,\n OcNextTeaser,\n OcNumberInput,\n OcOtpInput,\n OcPageHeader,\n OcPagination,\n OcPanel,\n OcParticleField,\n OcPasswordInput,\n OcPasswordRequirements,\n OcPhoneInput,\n OcPopover,\n OcPrice,\n OcPriceCard,\n OcProductMark,\n OcProgress,\n OcProjectCard,\n OcProse,\n OcQuantity,\n OcRadio,\n OcRadioGroup,\n OcRating,\n OcRatingInput,\n OcReading,\n OcRecoveryCodes,\n OcResult,\n OcRibbon,\n OcScrollArea,\n OcSegmented,\n OcSelect,\n OcSeparator,\n OcSeverityCard,\n OcSheet,\n OcSidebar,\n OcSidebarCollapsible,\n OcSidebarGroup,\n OcSidebarMenu,\n OcSidebarMenuButton,\n OcSidebarSeparator,\n OcSkeleton,\n OcSlider,\n OcSortableRow,\n OcSpecList,\n OcSpinner,\n OcStackCard,\n OcStackList,\n OcStatCard,\n OcStatus,\n OcStatusDot,\n OcStepper,\n OcStock,\n OcSwitch,\n OcTable,\n OcTableActions,\n OcTableCompact,\n OcTabs,\n OcTagInput,\n OcTerminalLog,\n OcTextarea,\n OcThemeSwitch,\n OcTimeInput,\n OcTimeline,\n OcTitlebar,\n OcTitlebarBody,\n OcTitlebarButton,\n OcTitlebarWindow,\n OcToast,\n OcToastContainer,\n OcToggle,\n OcToggleField,\n OcToggleGroup,\n OcTooltip,\n OcTopProgress,\n OcTree,\n OcUpgradeBanner,\n OcUser,\n OcVersionBanner,\n OcWatermark,\n OcBlockAboutTimeline,\n OcBlockAppHeader,\n OcBlockAppShell,\n OcBlockAuth,\n OcBlockAuthSplit,\n OcBlockContactForm,\n OcBlockContactGrid,\n OcBlockCta,\n OcBlockDataTable,\n OcBlockFaq,\n OcBlockFeatures,\n OcBlockFooter,\n OcBlockFormPage,\n OcBlockHero,\n OcBlockHeroCode,\n OcBlockHeroOrbit,\n OcBlockHeroSplit,\n OcBlockModuleHeader,\n OcBlockPageHero,\n OcBlockPortfolioGrid,\n OcBlockPricing,\n OcBlockProcess,\n OcBlockProductGrid,\n OcBlockProfileHeader,\n OcBlockShowcase,\n OcBlockSiteFooter,\n OcBlockSiteHeader,\n OcBlockSpotlight,\n OcBlockStats,\n OcBlockStatsCounter,\n OcBlockTeamList,\n OcBlockTwoFactor,\n OcBlockWizardDialog,\n}\n\n/** Vue plugin: app.use(OmniaVue) registers every Oc* component globally. */\nexport const OmniaVue = {\n install(app: App) {\n for (const [name, component] of Object.entries(components)) app.component(name, component)\n },\n}\n\nexport default OmniaVue\n"],"names":["counter","useUid","prefix","useId","Vue","provide","__props","_openBlock","_createElementBlock","_hoisted_1","_renderSlot","_ctx","_normalizeClass","open","_useModel","name","inject","onToggle","e","_unref","_createElementVNode","_hoisted_2","_hoisted_3","useAttrsSplit","attrs","useAttrs","root","computed","control","_c","_s","rest","props","model","PRESETS","preset","before","after","end","_mergeProps","$slots","_withDirectives","$event","useDialog","el","sync","dialog","watch","onMounted","onClose","emit","__emit","ref","titleId","textId","glyphs","variant","close","confirm","cancel","_cache","args","_createTextVNode","_toDisplayString","_hoisted_4","current","items","l","isDisabled","key","link","_Fragment","_renderList","item","presets","custom","_normalizeStyle","TYPES","extOf","attachmentMeta","f","meta","uploading","_createBlock","_resolveDynamicComponent","_hoisted_5","_hoisted_6","_hoisted_7","i","_createVNode","OcAttachment","isoWeek","date","d","day","yearStart","bindDateField","input","out","template","show","y","m","week","year","bindNameCard","head","title","button","finish","save","event","acceptsFile","file","accept","rules","type","bindAvatarPicker","preview","initials","url","error","text","box","picked","img","take","maxKb","reason","dt","stepQuantity","value","direction","min","max","step","size","base","k","next","bindQuantity","num","attr","fallback","limits","down","languageCode","select","option","bindLanguageCode","initFormExtras","scope","autoStart","boot","id","useTemplateRef","CODE128","STOP","START_B","START_C","L","G","R","code","bit","PARITY","guessFormat","eanCheck","body","sum","encodeEan","length","check","digits","left","right","parity","code128Values","values","ch","v","encodeCode128","widths","bits","w","encodeBarcode","format","kind","escapeHtml","barsToSvg","label","rects","width","renderBarcode","err","initBarcodes","result","auto","inputId","onInput","pct","percent","tone","warn","danger","OcProgress","n2","n","niceMax","rows","raw","pow","s","chartLinePath","pts","clamp","a","p0","p1","p2","p3","c1","c2","MONTHS","labels","axis","top","count","paths","yLabels","_","colLabel","j","_hoisted_12","_hoisted_13","_hoisted_14","submit","onKeydown","uid","isChecked","toggle","list","x","query","filtered","q","sections","order","map","flat","active","firstEnabled","from","move","choose","section","_hoisted_8","done","destructive","read","inputs","tell","choice","reopen","mode","stored","onBeforeUnmount","$attrs","c","_hoisted_9","_hoisted_11","copied","timer","copy","style","pageItems","last","range","compareValues","b","numeric","na","nb","csvField","toCsv","headers","line","rowPasses","status","filter","state","controls","SKIP_COL","readStore","writeStore","download","filename","bindDataTable","prev","table","tbody","search","summary","pager","pageSelect","selectAll","bulk","empty","sortSummary","frame","live","colFilters","sel","tab","sortedTh","th","sortKey","sortDir","page","pageSize","selected","savedSize","savedCols","redrawIcons","row","icon","moveRow","textOf","td","valueOf","cell","passesColumns","want","matched","paintChecks","on","keys","renderPager","add","target","extra","span","syncGrid","grid","onPage","heads","hiddenCols","card","cells","fields","index","col","dd","node","actions","bar","trashed","when","apply","all","dir","start","visible","shown","exportCsv","onlyKeys","hidden","detail","liveAction","action","cols","headCell","sortBtn","filterBtn","btn","rowBtn","filtersBtn","colTab","viewBtn","densityBtn","compact","pageBtn","bulkBtn","initDataTables","sizes","lead","_hoisted_16","o","_hoisted_18","_hoisted_20","_hoisted_21","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_29","_hoisted_30","_hoisted_32","_hoisted_33","_hoisted_36","_hoisted_38","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_45","_hoisted_47","_hoisted_48","_hoisted_49","letters","separators","parts","p","parse","group","decimal","clean","focused","onBlur","idOf","doc","full","inFrame","art","dialogAlt","_hoisted_10","_hoisted_15","_hoisted_17","dragover","onChange","onDrop","pick","emoji","g","gi","flipped","generated","helpId","errorId","describedBy","ids","$emit","WORDS","tod","h","word","dateText","iso","zoom","vars","$props","tag","dialogClose","slide","go","slideId","nextTick","__expose","external","href","view","menuId","OcMediaThumb","MESSAGE_ICONS","STATUS","thumbsOnly","strip","_k","image","thumb","OcAttachmentThumb","OcAttachmentImage","isDivider","OcMessage","sending","isOut","send","field","mine","ctrlEnter","OcMessageList","_hoisted_22","child","OcNavmenuList","stepBy","particleOptions","canvas","initParticles","options","ctx","win","speed","still","height","resize","ratio","lineColor","colors","readColors","cs","particles","raf","loop","pause","onVisibility","onResize","recolor","themeObserver","scheme","sizeObserver","initParticleFields","stops","stop","rule","parsed","match","dialState","dial","grouped","nextDial","national","_hoisted_19","radioGroupKey","toggleGroupKey","own","checked","isCard","OcRadio","score","copyAll","LEVEL_TEXT","t","progress","r","OcStatusDot","TEXT","sort","slots","useSlots","hasActions","colspan","allSelected","toggleAll","toggleRow","ariaSort","toggleSort","rowLabel","cellAttrs","tags","draft","available","remove","listId","reactive","timers","nextId","dismiss","push","clear","shortcut","description","useToast","readonly","toasts","OcToast","pressed","classes","inGroup","isOn","descId","phase","_component_OcTree","_withCtx","shownInitials","OcTimeline","collapsed","fid","invalid","alertText","_hoisted_28","_hoisted_34","_hoisted_35","_hoisted_37","_hoisted_39","_hoisted_40","_hoisted_46","autoGroup","angle","visualStyle","mark","OcProjectCard","plan","nameId","panels","bannerStyle","navId","OcCounter","member","codeId","OcCopyField","OcOtpInput","OcRecoveryCodes","OcStepper","components","OcAccordion","OcAccordionAccent","OcAccordionItem","OcAffixInput","OcAlert","OcAlertDialog","OcAlphaTabs","OcAspectRatio","OcAttachmentList","OcAvatar","OcAvatarGroup","OcAvatarPicker","OcBackLink","OcBadge","OcBarcode","OcBarcodeInput","OcBrandMark","OcBreadcrumb","OcBrowserFrame","OcBusyOverlay","OcButton","OcButtonGroup","OcButtonGroupText","OcCallout","OcCard","OcChartLine","OcChatComposer","OcCheckbox","OcChecklist","OcChipFilter","OcCollapsible","OcColorField","OcColorSelect","OcCommand","OcConfirmDialog","OcCookieConsent","OcDataTable","OcDataTableName","OcDateField","OcDecimalInput","OcDefinitionList","OcDocViewer","OcDropdown","OcDropdownItem","OcDropdownLabel","OcDropdownSeparator","OcDropzone","OcEmojiPicker","OcEmptyState","OcEntityCard","OcFactList","OcFeatureCard","OcFilterCounts","OcFlipCard","OcFormField","OcFormSection","OcGallery","OcGlass","OcGlassBar","OcGlassPanel","OcGreeting","OcGroup","OcHeading","OcHoverCard","OcImageZoom","OcInput","OcInputGroup","OcItem","OcItemGroup","OcItemSeparator","OcKbd","OcKbdGroup","OcLabel","OcLanguageSelect","OcLauncherCard","OcLazyImage","OcLightbox","OcLinkArrow","OcLinkCard","OcLinkRow","OcListToolbar","OcLiveFrame","OcMarquee","OcMediaCard","OcMediaRow","OcMenuStatic","OcMessageThread","OcMeterRow","OcModal","OcNameCard","OcNavmenu","OcNextTeaser","OcNumberInput","OcPageHeader","OcPagination","OcPanel","OcParticleField","OcPasswordInput","OcPasswordRequirements","OcPhoneInput","OcPopover","OcPrice","OcPriceCard","OcProductMark","OcProse","OcQuantity","OcRadioGroup","OcRating","OcRatingInput","OcReading","OcResult","OcRibbon","OcScrollArea","OcSegmented","OcSelect","OcSeparator","OcSeverityCard","OcSheet","OcSidebar","OcSidebarCollapsible","OcSidebarGroup","OcSidebarMenu","OcSidebarMenuButton","OcSidebarSeparator","OcSkeleton","OcSlider","OcSortableRow","OcSpecList","OcSpinner","OcStackCard","OcStackList","OcStatCard","OcStatus","OcStock","OcSwitch","OcTable","OcTableActions","OcTableCompact","OcTabs","OcTagInput","OcTerminalLog","OcTextarea","OcThemeSwitch","OcTimeInput","OcTitlebar","OcTitlebarBody","OcTitlebarButton","OcTitlebarWindow","OcToastContainer","OcToggle","OcToggleField","OcToggleGroup","OcTooltip","OcTopProgress","OcTree","OcUpgradeBanner","OcUser","OcVersionBanner","OcWatermark","OcBlockAboutTimeline","OcBlockAppHeader","OcBlockAppShell","OcBlockAuth","OcBlockAuthSplit","OcBlockContactForm","OcBlockContactGrid","OcBlockCta","OcBlockDataTable","OcBlockFaq","OcBlockFeatures","OcBlockFooter","OcBlockFormPage","OcBlockHero","OcBlockHeroCode","OcBlockHeroOrbit","OcBlockHeroSplit","OcBlockModuleHeader","OcBlockPageHero","OcBlockPortfolioGrid","OcBlockPricing","OcBlockProcess","OcBlockProductGrid","OcBlockProfileHeader","OcBlockShowcase","OcBlockSiteFooter","OcBlockSiteHeader","OcBlockSpotlight","OcBlockStats","OcBlockStatsCounter","OcBlockTeamList","OcBlockTwoFactor","OcBlockWizardDialog","OmniaVue","app","component"],"mappings":";;AAEA,IAAIA,KAAU;AAMP,SAASC,EAAOC,IAAS,MAAc;AAC5C,QAAMC,IAASC,GAAgC;AAC/C,SAAO,GAAGF,CAAM,IAAIC,IAAQA,EAAA,IAAU,EAAEH,EAAO;AACjD;;;;;;;ACLA,WAAAK,GAAQ,qBADMC,EACqB,QAAQL,EAAO,cAAc,CAAC,cAI/DM,EAAA,GAAAC,EAAwC,OAAxCC,IAAwC;AAAA,MAAdC,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;ACSpC,WAAAN,GAAQ,qBATMC,EASqB,QAAQL,EAAO,cAAc,CAAC,mBAI/DO,EAEM,OAAA;AAAA,MAFA,OAAKI,EAAA,CAAA,gBAAA,wBAA2CN,WAAK,uBAA2BA,EAAA,wBAAwBA,EAAA,MAAM,IAAIA,EAAA,QAAI,iBAAqBA,EAAA,IAAI,EAAA,CAAA;AAAA,IAAA;MACnJI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;ACnBZ,UAAME,IAAOC,EAAoBR,GAAC,MAA0B,GACtDS,IAAOC,GAA2B,qBAAqB,MAAS;AAEtE,aAASC,EAASC,GAAU;AAC1B,MAAAL,EAAK,QAASK,EAAE,OAA8B;AAAA,IAChD;2BAIEV,EAGU,WAAA;AAAA,MAHD,OAAM;AAAA,MAAqB,MAAMW,EAAAJ,CAAA;AAAA,MAAO,MAAMF,EAAA;AAAA,MAAO,UAAAI;AAAA,IAAA;MAC5DG,EAAqF,WAArFC,IAAqF;AAAA,QAA/CX,EAAqCC,uBAArC,MAAqC;AAAA,cAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;MACjEc,EAAgD,OAAhDE,IAAgD;AAAA,QAAdZ,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;ACTvC,SAASY,KAAgB;AAC9B,QAAMC,IAAQC,GAAA,GACRC,IAAOC,EAAS,OAAO,EAAE,OAAOH,EAAM,OAAO,OAAOA,EAAM,MAAA,EAAQ,GAClEI,IAAUD,EAAS,MAAM;AAC7B,UAAM,EAAE,OAAOE,GAAI,OAAOC,GAAI,GAAGC,MAASP;AAC1C,WAAOO;AAAA,EACT,CAAC;AACD,SAAO,EAAE,MAAAL,GAAM,SAAAE,EAAA;AACjB;;;;;;;;;;;;;;;;;;;;;;;;ACDA,UAAMI,IAAQ1B,GAGR2B,IAAQnB,EAAmBR,GAAA,YAAgB,GAC3C,EAAE,MAAAoB,GAAM,SAAAE,EAAA,IAAYL,GAAA,GAGpBW,IAAU;AAAA,MACd,UAAU,EAAE,QAAQ,KAAU,QAAQ,QAAW,KAAK,IAAO,OAAO,EAAE,MAAM,QAAQ,WAAW,YAAU;AAAA,MACzG,SAAS,EAAE,QAAQ,KAAK,QAAQ,QAAW,KAAK,IAAO,OAAO,EAAE,MAAM,QAAQ,WAAW,YAAU;AAAA,MACnG,OAAO,EAAE,QAAQ,KAAK,QAAQ,QAAW,KAAK,IAAO,OAAO,EAAE,MAAM,SAAS,cAAc,UAAQ;AAAA,IAAE,GAGjGC,IAASR,EAAS,MAAOK,EAAM,UAAUE,EAAQF,EAAM,OAAO,IAAI,MAAU,GAC5EI,IAAST,EAAS,MAAMK,EAAM,UAAUG,EAAO,OAAO,MAAM,GAC5DE,IAAQV,EAAS,MAAMK,EAAM,UAAUG,EAAO,OAAO,MAAM,GAC3DG,IAAMX,EAAS,MAAMK,EAAM,YAAYG,EAAO,OAAO,OAAO,EAAK;2BAIrE3B,EAIM,OAJN+B,EAIMpB,EAAAO,CAAA,GAJW;AAAA,MAAG,OAAK,CAAA,kBAAA,yBAA8CY,EAAA,SAAG,uBAA2BhC,EAAA,SAAK,uBAAA;AAAA,IAAA;MAC5F8B,EAAA,SAAUI,EAAAA,OAAO,UAA7BjC,KAAAC,EAA6H,QAA7HC,IAA6H;AAAA,QAA9CC,EAAuCC,wBAAvC,MAAuC;AAAA,cAAhByB,EAAA,KAAM,GAAA,CAAA;AAAA,QAAA;;MAC5GK,EAAArB,EAA6I,SAA7ImB,EAA6I,EAAA,MAAA,QAAA,GAA3GJ,SAAQ,UAAUhB,EAAAS,CAAA,KAAO;AAAA,sDAAaK,EAAK,QAAAS;AAAA,QAAE,OAAM;AAAA,QAAY,gBAAcpC,EAAA,QAAK,SAAY;AAAA,MAAA;aAAxD2B,EAAA,KAAK;AAAA,MAAA;MACjEI,EAAA,SAASG,EAAAA,OAAO,UAA5BjC,KAAAC,EAA2H,QAA3Hc,IAA2H;AAAA,QAA7CZ,EAAsCC,wBAAtC,MAAsC;AAAA,cAAf0B,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;2BCxB5G7B,EAGM,OAAA;AAAA,MAHA,OAAKI,EAAA,CAAA,YAAA,aAA4BN,EAAA,OAAO,IAAIA,EAAA,UAAM,kBAAA,CAAA;AAAA,MAA0B,MAAMA,EAAA,YAAO,YAAiBA,EAAA,SAAM,UAAA;AAAA,IAAA;MAC1GA,EAAA,SAASkC,EAAAA,OAAO,SAA1BjC,KAAAC,EAAkG,MAAlGa,IAAkG;AAAA,QAA1CX,EAAqCC,uBAArC,MAAqC;AAAA,cAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;MAC1EkC,EAAAA,OAAO,WAAhBjC,KAAAC,EAAkE,KAAlEc,IAAkE;AAAA,QAAZZ,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;ACR3D,SAASgC,GAAU9B,GAAgC+B,GAAmC;AAC3F,WAASC,IAAO;AACd,UAAMC,IAASF,EAAG;AAClB,IAAKE,MACDjC,EAAK,SAAS,CAACiC,EAAO,SAAa,UAAA,IAC9B,CAACjC,EAAK,SAASiC,EAAO,UAAa,MAAA;AAAA,EAC9C;AACA,EAAAC,GAAMlC,GAAMgC,GAAM,EAAE,OAAO,QAAQ,GACnCG,GAAUH,CAAI;AACd,WAASI,IAAU;AACjB,IAAIpC,EAAK,UAAOA,EAAK,QAAQ;AAAA,EAC/B;AACA,SAAO,EAAE,SAAAoC,EAAA;AACX;;;;;;;;;;;;;;;;;;;ACVA,UAAMjB,IAAQ1B,GAYR4C,IAAOC,GACPtC,IAAOC,EAAoBR,GAAC,MAA0B,GACtDsC,IAAKQ,EAA8B,IAAI,GACvC,EAAE,SAAAH,EAAA,IAAYN,GAAU9B,GAAM+B,CAAE,GAChCS,IAAUpD,EAAO,uBAAuB,GACxCqD,IAAS,GAAGD,CAAO,SAEnBE,IAAS,EAAE,SAAS,KAAK,OAAO,KAAK,SAAS,KAAK,MAAM,KAAK,UAAU,IAAA,GACxEC,IAAU7B,EAAS,MAAMK,EAAM,mBAAmBA,EAAM,SAAS,aAAaA,EAAM,SAAS,UAAU,gBAAgB,UAAU,GACjIyB,IAAQ,MAAO5C,EAAK,QAAQ;AAElC,aAAS6C,IAAU;AACjB,MAAAR,EAAK,SAAS,GACdO,EAAA;AAAA,IACF;AACA,aAASE,IAAS;AAChB,MAAAT,EAAK,QAAQ,GACbO,EAAA;AAAA,IACF;2BAIEjD,EAoBS,UAAA;AAAA,eAnBH;AAAA,MAAJ,KAAIoC;AAAA,MACJ,OAAM;AAAA,MACN,UAAS;AAAA,MACT,MAAK;AAAA,MACJ,mBAAiBzB,EAAAkC,CAAA;AAAA,MACjB,oBAAkBC;AAAA,MAClB,SAAKM,EAAA,CAAA,MAAAA,EAAA,CAAA;AAAA,gBAAEzC,EAAA8B,CAAA,KAAA9B,EAAA8B,CAAA,EAAA,GAAAY,CAAA;AAAA,IAAA;MAERzC,EAUM,OAAA;AAAA,QAVA,6FAA2Fd,EAAA,IAAI,EAAA,CAAA;AAAA,MAAA;QACnGc,EAAwG,QAAxGC,IAAwG;AAAA,UAAlDX,EAA2CC,sBAA3C,MAA2C;AAAA,YAAtBmD,EAAAC,EAAAR,EAAOjD,EAAA,IAAI,CAAA,GAAA,CAAA;AAAA,UAAA;;QACtFc,EAAmF,MAAA;AAAA,UAA9E,IAAID,EAAAkC,CAAA;AAAA,UAAS,OAAM;AAAA,QAAA;UAAiB3C,EAAqCC,uBAArC,MAAqC;AAAA,gBAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;QACpEc,EAAwE,OAAA;AAAA,UAAlE,IAAIkC;AAAA,UAAQ,OAAM;AAAA,QAAA;UAAgB5C,EAA0BC,yBAA1B,MAA0B;AAAA,gBAAjBL,EAAA,OAAO,GAAA,CAAA;AAAA,UAAA;;QACxDc,EAKM,OALN4C,IAKM;AAAA,UAJJtD,EAGOC,EAAA,QAAA,UAAA;AAAA,YAHc,OAAA8C;AAAA,YAAe,SAAAC;AAAA,YAAmB,QAAAC;AAAA,UAAA,GAAvD,MAGO;AAAA,YAFLvC,EAA+F,UAAA;AAAA,cAAvF,OAAM;AAAA,cAAyB,MAAK;AAAA,cAAU,SAAOuC;AAAA,YAAA,KAAWrD,EAAA,WAAW,GAAA,CAAA;AAAA,YACnFc,EAAqI,UAAA;AAAA,cAA5H,OAAKR,EAAA,CAAA,UAAa4C,EAAA,UAAO,aAAA,WAA6BA,EAAA,KAAO,EAAA,CAAA;AAAA,cAAK,MAAK;AAAA,cAAU,SAAOE;AAAA,YAAA,KAAYpD,EAAA,YAAY,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;;ACnDnI,UAAM0B,IAAQ1B,GAcR2D,IAAUnD,EAAmBR,GAAA,YAAmB,GAEhD4D,IAAQvC,EAAS,MAAM;AAAA,MAC3B,EAAE,KAAK,OAAO,OAAOK,EAAM,UAAU,KAAK,GAAA;AAAA,MAC1C,GAAGA,EAAM,QAAQ,IAAI,CAACmC,OAAO,EAAE,KAAKA,GAAG,OAAOA,GAAG,KAAK,KAAQ;AAAA,IAAA,CAC/D,GACKC,IAAa,CAACC,MAAgBA,MAAQ,SAASrC,EAAM,cAAc,UAAa,CAACA,EAAM,UAAU,SAASqC,CAAG,GAC7GC,IAAO,CAACD,MAAgBrC,EAAM,MAAM,QAAQ,YAAYqC,CAAG;2BAI/D7D,EAkBM,OAAA;AAAA,MAlBA,2BAAyBF,EAAA,QAAI,uBAA2BA,UAAI,kBAAsBA,EAAA,IAAI,IAAIA,EAAA,SAAK,sBAAA,CAAA;AAAA,MAA6B,cAAW;AAAA,IAAA;cAC3IE,EAgBW+D,GAAA,MAAAC,EAhBcN,EAAA,OAAK,CAAbO;QAAqB,KAAAA,EAAK;AAAA,MAAA;QAEjCnE,EAAA,aADRE,EAMqB,KAAA;AAAA;UAJlB,OAAKI,EAAA,CAAA,sBAAyB6D,EAAK,OAAG,yBAAA,CAAA;AAAA,UACtC,MAAML,EAAWK,EAAK,GAAG,IAAI,SAAYH,EAAKG,EAAK,GAAG;AAAA,UACtD,gBAAcR,EAAA,UAAYQ,EAAK,eAAe;AAAA,UAC9C,iBAAeL,EAAWK,EAAK,GAAG,aAAa;AAAA,QAAA,GAC9CV,EAAAU,EAAK,KAAK,GAAA,IAAAhE,EAAA,WACdD,EAO0B,UAAA;AAAA;UALxB,MAAK;AAAA,UACJ,OAAKI,EAAA,CAAA,sBAAyB6D,EAAK,OAAG,yBAAA,CAAA;AAAA,UACtC,gBAAcR,EAAA,UAAYQ,EAAK,eAAe;AAAA,UAC9C,UAAUL,EAAWK,EAAK,GAAG;AAAA,UAC7B,SAAK,CAAA/B,MAAEuB,EAAA,QAAUQ,EAAK;AAAA,QAAA,GACrBV,EAAAU,EAAK,KAAK,GAAA,IAAApD,EAAA;AAAA,MAAA;;;;;;;;;;AC3CpB,UAAMqD,IAAU,CAAC,UAAU,SAAS,YAAY,MAAM,GAChD1C,IAAQ1B,GACR6B,IAASR,EAAS,MAAO,OAAOK,EAAM,SAAU,YAAY0C,EAAQ,SAAS1C,EAAM,KAAK,IAAIA,EAAM,QAAQ,MAAU,GACpH2C,IAAShD,EAAS,MAAOK,EAAM,UAAU,UAAa,CAACG,EAAO,QAAQ,OAAOH,EAAM,KAAK,IAAI,MAAU;2BAI1GxB,EAKM,OAAA;AAAA,MAJH,OAAKI,EAAA,CAAA,aAAgBuB,EAAA,SAAM,cAAkBA,EAAA,KAAM,IAAI7B,EAAA,UAAM,mBAAA,CAAA;AAAA,MAC7D,OAAKsE,EAAED,EAAA,QAAM,EAAA,eAAoBA,EAAA,MAAA,IAAW,MAAS;AAAA,IAAA;MAEtDjE,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;wBCHNkE,KAAwC;AAAA,EAC5C,KAAK;AAAA,EAAO,KAAK;AAAA,EAAO,MAAM;AAAA,EAAO,KAAK;AAAA,EAAO,KAAK;AAAA,EAAO,KAAK;AAAA,EAAO,KAAK;AAAA,EAAS,MAAM;AAAA,EAAS,KAAK;AAAA,EAAS,KAAK;AAAA,EACzH,KAAK;AAAA,EAAO,KAAK;AAAA,EAAO,MAAM;AAAA,EAAO,IAAI;AAAA,EAAO,KAAK;AAAA,EAAS,MAAM;AAAA,EAAS,KAAK;AAAA,EAAS,KAAK;AAAA,EAAS,MAAM;AAAA,EAAS,MAAM;AAAA,EAAS,MAAM;AAC/I,GACMC,KAAQ,CAAC/D,MAAkBA,EAAK,SAAS,GAAG,IAAIA,EAAK,MAAM,GAAG,EAAE,IAAA,EAAO,gBAAgB,IAEhFgE,KAAiB,CAACC,OAAuB;AAAA,EACpD,KAAKA,EAAE,OAAOF,GAAME,EAAE,IAAI,EAAE,YAAA,EAAc,QAAQ,oBAAoB,IAAI;AAAA,EAC1E,MAAMA,EAAE,QAAQH,GAAMC,GAAME,EAAE,IAAI,CAAC;AACrC;;;;;;;;;;;;;;;;AAWA,UAAMhD,IAAQ1B,GACR4C,IAAOC,GACP8B,IAAOtD,EAAS,MAAMoD,GAAe/C,CAAK,CAAC,GAC3CkD,IAAYvD,EAAS,MAAMK,EAAM,UAAU,WAAW,GACtDsC,IAAO3C,EAAS,MAAM,CAAC,CAACK,EAAM,QAAQ,CAACA,EAAM,SAAS;sBAI1DzB,EAAA,GAAA4E,EAcYC,EAbLd,EAAA,QAAI,MAAA,KAAA,GAAA;AAAA,MACR,OAAK1D,EAAA,CAAA,iBAAoBqE,EAAA,MAAK,QAAI,kBAAsBA,EAAA,MAAK,IAAI,IAAI3E,EAAA,SAAK,kBAAsBA,EAAA,KAAK,EAAA,CAAA;AAAA,MACrG,MAAMgE,EAAA,QAAOhE,EAAA,OAAO;AAAA,MACpB,UAAUgE,EAAA,QAAI,KAAQ;AAAA,MACtB,OAAKM,EAAEM,EAAA,QAAS,4BAA+B5E,EAAA,QAAQ,MAAM,MAAS;AAAA,IAAA;iBAEvE,MAA8I;AAAA,QAA9Ic,EAA8I,QAA9IX,IAA8I;AAAA,UAA9EH,EAAA,cAAXE,EAAwC,OAAA;AAAA;YAArB,KAAKF,EAAA;AAAA,YAAO,KAAI;AAAA,UAAA,yBAAKE,EAA0C+D,GAAA,EAAA,KAAA,KAAA;AAAA,YAAtBT,EAAAC,EAAAkB,EAAA,MAAK,GAAG,GAAA,CAAA;AAAA,UAAA;;QACzH7D,EAIO,QAJPE,IAIO;AAAA,UAHLF,EAAmD,QAAnD4C,IAAmDD,EAAdzD,EAAA,IAAI,GAAA,CAAA;AAAA,UAC7B4E,EAAA,SAAZ3E,EAAA,GAAAC,EAA+G,QAA/G6E,IAA+GtB,EAA3CzD,EAAA,sBAAsBA,EAAA,QAAQ,GAAA,GAAA,CAAA,KACjFA,EAAA,aAAjBE,EAAoE,QAApE8E,IAAoEvB,EAAdzD,EAAA,IAAI,GAAA,CAAA;;QAE9CA,EAAA,kBAAdE,EAAuM,UAAA;AAAA;UAA9K,MAAK;AAAA,UAAS,OAAM;AAAA,UAAyB,cAAYF,EAAA,gBAAgB4E,UAAS,oBAAuB5E,EAAA,IAAI,eAAeA,EAAA,IAAI;AAAA,UAAM,gCAAO4C,EAAI,QAAA;AAAA,QAAA,GAAY,KAAQ,GAAAqC,EAAA;;;;;;;;;;;;;;;;;;2BCjDhM/E,EAII,KAAA;AAAA,MAJD,OAAM;AAAA,MAAuB,MAAMF,EAAA;AAAA,IAAA;MACzBA,EAAA,YAAXE,EAAwC,OAAA;AAAA;QAAvB,KAAKF,EAAA;AAAA,QAAM,KAAKA,EAAA;AAAA,MAAA,yBACjCE,EAAkH,QAAA;AAAA;QAApG,OAAKI,EAAA,CAAA,gBAAmBN,EAAA,OAAG,QAAA,iBAA6BA,EAAA,GAAG,EAAA,CAAA;AAAA,QAAK,MAAK;AAAA,QAAO,cAAYA,EAAA;AAAA,MAAA;MAC1FA,EAAA,gBAAZE,EAA8E,QAA9EwD,IAA8ED,EAAjBzD,EAAA,OAAO,GAAA,CAAA;;;;;;;;;;;;;;;;;;ACQxE,UAAM4C,IAAOC;sBAIX5C,KAAA4E,EAOYC,EAPI9E,EAAA,EAAE,GAAA;AAAA,MAAG,gCAA8BA,EAAA,SAAK,2BAAA,CAAA;AAAA,MAAmC,cAAYA,EAAA;AAAA,IAAA;iBACrG,MAKO;AAAA,QALPI,EAKOC,yBALP,MAKO;AAAA,WAJLJ,EAAA,EAAA,GAAAC,EAGW+D,GAAA,MAAAC,EAHgBlE,EAAA,OAAK,CAAd0E,GAAGQ,wBAAmBA,KAAC;AAAA,YAC7BlF,EAAA,OAAE,aAAZE,EAAsF,MAAAC,IAAA;AAAA,cAA/DgF,GAA0DC,IAA1DnD,EAA0D,EAAA,SAAA,GAAA,GAApCyC,GAAC;AAAA,gBAAG,UAAM,CAAAtC,MAAEQ,EAAI,UAAW8B,GAAGQ,CAAC;AAAA,cAAA;mBAC5EjF,EAAA,GAAA4E,EAAiEO,IAAjEnD,EAAiE;AAAA;;eAApCyC,GAAC;AAAA,cAAG,UAAM,CAAAtC,MAAEQ,EAAI,UAAW8B,GAAGQ,CAAC;AAAA,YAAA;;;;;;;;;;;;;;;;;;ACtBpE,UAAMtC,IAAOC;sBAIX5C,EAAA,GAAA4E,EAIYC,EAJI9E,EAAA,EAAE,GAAA,EAAE,OAAM,yBAAqB;AAAA,iBAC7C,MAAwC;AAAA,QAA7BA,EAAA,YAAXE,EAAwC,OAAA;AAAA;UAAvB,KAAKF,EAAA;AAAA,UAAM,KAAKA,EAAA;AAAA,QAAA,yBACjCE,EAAkH,QAAA;AAAA;UAApG,OAAKI,EAAA,CAAA,gBAAmBN,EAAA,OAAG,QAAA,iBAA6BA,EAAA,GAAG,EAAA,CAAA;AAAA,UAAK,MAAK;AAAA,UAAO,cAAYA,EAAA;AAAA,QAAA;QACxFA,EAAA,oBAAdE,EAA0I,UAAA;AAAA;UAA/G,MAAK;AAAA,UAAS,OAAM;AAAA,UAAyB,cAAYF,EAAA;AAAA,UAAc,gCAAO4C,EAAI,QAAA;AAAA,QAAA,GAAY,KAAQ,GAAA5B,EAAA;;;;;;;;;;;;;2BCEnId,EAGO,QAAA;AAAA,MAHA,OAAKI,EAAA,CAAA,aAAgBN,EAAA,SAAI,QAAA,cAA2BA,EAAA,IAAI,EAAA,CAAA;AAAA,IAAA;MAClDA,EAAA,YAAXE,EAAwC,OAAA;AAAA;QAAvB,KAAKF,EAAA;AAAA,QAAM,KAAKA,EAAA;AAAA,MAAA,mBACjCI,EAAeC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,QAAA,CAAA;AAAA,IAAA;;;;;sBCVjBJ,EAAA,GAAAC,EAA2C,OAA3CC,IAA2C;AAAA,MAAdC,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;ACIhC,SAASgF,GAAQC,GAAM;AAC5B,QAAMC,IAAI,IAAI,KAAK,KAAK,IAAID,EAAK,eAAeA,EAAK,SAAQ,GAAIA,EAAK,QAAO,CAAE,CAAC,GAC1EE,IAAMD,EAAE,UAAS,KAAM;AAC7B,EAAAA,EAAE,WAAWA,EAAE,WAAU,IAAK,IAAIC,CAAG;AACrC,QAAMC,IAAY,IAAI,KAAK,KAAK,IAAIF,EAAE,kBAAkB,GAAG,CAAC,CAAC;AAC7D,SAAO,EAAE,MAAM,KAAK,OAAOA,IAAIE,KAAa,QAAW,KAAK,CAAC,GAAG,MAAMF,EAAE,eAAc,EAAE;AAC1F;AAGO,SAASG,GAActE,GAAM;AAClC,QAAMuE,IAAQvE,EAAK,cAAc,uBAAuB,GAClDwE,IAAMxE,EAAK,cAAc,sBAAsB;AACrD,MAAI,CAACuE,KAAS,CAACC,KAAOxE,EAAK,QAAQ,QAAS;AAC5C,EAAAA,EAAK,QAAQ,UAAU;AACvB,QAAMyE,IAAWD,EAAI,QAAQ,UAAU,eACjCE,IAAO,MAAM;AACjB,UAAM,CAACC,GAAGC,GAAGT,CAAC,KAAKI,EAAM,SAAS,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM;AAC3D,QAAI,CAACI,GAAG;AAAE,MAAAH,EAAI,cAAc;AAAI;AAAA,IAAQ;AACxC,UAAM,EAAE,MAAAK,GAAM,MAAAC,EAAI,IAAKb,GAAQ,IAAI,KAAKU,GAAGC,IAAI,GAAGT,CAAC,CAAC;AACpD,IAAAK,EAAI,cAAcC,EAAS,QAAQ,UAAU,OAAOI,CAAI,CAAC,EAAE,QAAQ,UAAU,OAAOC,CAAI,CAAC;AAAA,EAC3F;AACA,EAAAP,EAAM,iBAAiB,SAASG,CAAI,GACpCH,EAAM,iBAAiB,UAAUG,CAAI,GACrCA;AACF;AAGO,SAASK,GAAa/E,GAAM;AACjC,QAAMgF,IAAOhF,EAAK,cAAc,8BAA8B,GACxDiF,IAAQD,GAAM,cAAc,sBAAsB,GAClDE,IAASF,GAAM,cAAc,kBAAkB;AACrD,MAAI,CAACC,KAAS,CAACC,KAAUlF,EAAK,QAAQ,QAAS;AAC/C,EAAAA,EAAK,QAAQ,UAAU;AACvB,QAAMuE,IAAQ,SAAS,cAAc,OAAO;AAC5C,EAAAA,EAAM,YAAY,uBAClBA,EAAM,SAAS,IACfA,EAAM,aAAa,cAAcW,EAAO,aAAa,YAAY,KAAK,MAAM,GAC5ED,EAAM,MAAMV,CAAK;AACjB,QAAMY,IAAS,CAACC,MAAS;AACvB,QAAIb,EAAM,OAAQ;AAClB,UAAMlF,IAAOkF,EAAM,MAAM,KAAI;AAC7B,IAAIa,KAAQ/F,KAAQA,MAAS4F,EAAM,gBACjCA,EAAM,cAAc5F,GACpBW,EAAK,cAAc,IAAI,YAAY,sBAAsB,EAAE,SAAS,IAAM,QAAQ,EAAE,MAAAX,EAAI,EAAE,CAAE,CAAC,IAE/FkF,EAAM,SAAS,IACfU,EAAM,SAAS,IACfC,EAAO,MAAK;AAAA,EACd;AACA,EAAAA,EAAO,iBAAiB,SAAS,CAACG,MAAU;AAC1C,IAAAA,EAAM,eAAc,GACpBd,EAAM,QAAQU,EAAM,YAAY,KAAI,GACpCA,EAAM,SAAS,IACfV,EAAM,SAAS,IACfA,EAAM,MAAK,GACXA,EAAM,OAAM;AAAA,EACd,CAAC,GAEDA,EAAM,iBAAiB,SAAS,CAACc,MAAUA,EAAM,eAAc,CAAE,GACjEd,EAAM,iBAAiB,WAAW,CAACc,MAAU;AAC3C,IAAIA,EAAM,QAAQ,YAAWA,EAAM,eAAc,GAAIF,EAAO,EAAI,IAC5DE,EAAM,QAAQ,aAAYA,EAAM,eAAc,GAAIF,EAAO,EAAK,IAC9DE,EAAM,QAAQ,OAAKA,EAAM,gBAAe;AAAA,EAC9C,CAAC,GACDd,EAAM,iBAAiB,SAAS,CAACc,MAAU;AAAE,IAAIA,EAAM,QAAQ,OAAKA,EAAM,eAAc;AAAA,EAAI,CAAC,GAC7Fd,EAAM,iBAAiB,QAAQ,MAAMY,EAAO,EAAI,CAAC;AACnD;AAGO,SAASG,GAAYC,GAAMC,IAAS,WAAW;AACpD,MAAI,CAACD,EAAM,QAAO;AAClB,QAAME,KAASD,KAAU,WAAW,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,YAAW,CAAE,EAAE,OAAO,OAAO,GAC1FE,KAAQH,EAAK,QAAQ,IAAI,YAAW,GACpClG,KAAQkG,EAAK,QAAQ,IAAI,YAAW;AAC1C,SAAOE,EAAM,KAAK,CAAC,MAAO,EAAE,WAAW,GAAG,IAAIpG,EAAK,SAAS,CAAC,IAAI,EAAE,SAAS,IAAI,IAAIqG,EAAK,WAAW,EAAE,MAAM,GAAG,EAAE,CAAC,IAAIA,MAAS,CAAE;AACnI;AAKO,SAASC,GAAiB3F,GAAM;AACrC,QAAM4F,IAAU5F,EAAK,cAAc,4BAA4B,GACzDuF,IAAOvF,EAAK,cAAc,yBAAyB;AACzD,MAAI,CAAC4F,KAAW,CAACL,KAAQvF,EAAK,QAAQ,QAAS;AAC/C,EAAAA,EAAK,QAAQ,UAAU;AACvB,QAAM6F,IAAWD,EAAQ,cAAc,oBAAoB,KAAK;AAChE,MAAIE,IAAM;AACV,QAAMC,IAAQ,CAACC,MAAS;AACtB,QAAIC,IAAMjG,EAAK,cAAc,0BAA0B;AACvD,IAAI,CAACiG,KAAOD,MACVC,IAAM,SAAS,cAAc,MAAM,GACnCA,EAAI,YAAY,2BAChBA,EAAI,aAAa,QAAQ,OAAO,IAC/BjG,EAAK,cAAc,yBAAyB,KAAKA,GAAM,OAAOiG,CAAG,IAEhEA,MAAOA,EAAI,cAAcD,GAAMC,EAAI,SAAS,CAACD,IACjDhG,EAAK,UAAU,OAAO,cAAc,EAAQgG,CAAK;AAAA,EACnD,GACMtB,IAAO,CAACwB,MAAW;AAKvB,QAJIJ,KAAK,IAAI,gBAAgBA,CAAG,GAChCA,IAAM,IACNF,EAAQ,cAAc,KAAK,GAAG,OAAM,GAChCC,MAAUA,EAAS,SAAS,EAAQK,IACpCA,GAAQ;AACV,MAAAJ,IAAM,IAAI,gBAAgBI,CAAM;AAChC,YAAMC,IAAM,SAAS,cAAc,KAAK;AACxC,MAAAA,EAAI,MAAML,GACVK,EAAI,MAAM,IACVP,EAAQ,QAAQO,CAAG;AAAA,IACrB;AACA,IAAAnG,EAAK,cAAc,IAAI,YAAY,oBAAoB,EAAE,SAAS,IAAM,QAAQ,EAAE,MAAMkG,KAAU,KAAI,EAAE,CAAE,CAAC;AAAA,EAC7G,GACME,IAAO,CAACF,MAAW;AACvB,QAAI,CAACA,EAAQ,QAAOxB,EAAK,IAAI;AAC7B,UAAM2B,IAAQ,OAAOrG,EAAK,QAAQ,WAAW,CAAC,GACxCsG,IAAUhB,GAAYY,GAAQX,EAAK,MAAM,IAC3Cc,KAASH,EAAO,OAAOG,IAAQ,OAAQrG,EAAK,QAAQ,eAAe,6BAA6BqG,KAAS,OAAO,GAAG,KAAK,MAAMA,IAAQ,KAAK,IAAI,EAAE,QAAQ,GAAGA,CAAK,KAAK,MAAO,KAD7HrG,EAAK,QAAQ,eAAe;AAEhF,QAAIsG,GAAQ;AACV,MAAAf,EAAK,QAAQ,IACbQ,EAAMO,CAAM,GACZtG,EAAK,cAAc,IAAI,YAAY,qBAAqB,EAAE,SAAS,IAAM,QAAQ,EAAE,MAAMkG,GAAQ,QAAAI,EAAM,EAAE,CAAE,CAAC;AAC5G;AAAA,IACF;AACA,IAAAP,EAAM,EAAE,GACRrB,EAAKwB,CAAM;AAAA,EACb;AACA,EAAAX,EAAK,iBAAiB,UAAU,MAAMa,EAAKb,EAAK,QAAQ,CAAC,KAAK,IAAI,CAAC,GACnEvF,EAAK,iBAAiB,SAAS,CAACqF,MAAU;AACxC,IAAIA,EAAM,OAAO,QAAQ,yBAAyB,KAAGE,EAAK,SACtDF,EAAM,OAAO,QAAQ,yBAAyB,MAAKE,EAAK,QAAQ,IAAIQ,EAAM,EAAE,GAAGrB,EAAK,IAAI;AAAA,EAC9F,CAAC,GACD1E,EAAK,iBAAiB,YAAY,CAACqF,MAAU;AAAE,IAAAA,EAAM,eAAc,GAAIrF,EAAK,UAAU,IAAI,aAAa;AAAA,EAAG,CAAC,GAC3GA,EAAK,iBAAiB,aAAa,MAAMA,EAAK,UAAU,OAAO,aAAa,CAAC,GAC7EA,EAAK,iBAAiB,QAAQ,CAACqF,MAAU;AACvC,IAAAA,EAAM,eAAc,GACpBrF,EAAK,UAAU,OAAO,aAAa;AACnC,UAAMkG,IAASb,EAAM,cAAc,QAAQ,CAAC;AAC5C,QAAKa,GAEL;AAAA,UAAIZ,GAAYY,GAAQX,EAAK,MAAM,EAAG,KAAI;AAAE,cAAMgB,IAAK,IAAI,aAAY;AAAI,QAAAA,EAAG,MAAM,IAAIL,CAAM,GAAGX,EAAK,QAAQgB,EAAG;AAAA,MAAO,QAAQ;AAAA,MAAqB;AACrJ,MAAAH,EAAKF,CAAM;AAAA;AAAA,EACb,CAAC;AACH;AAGO,SAASM,GAAaC,GAAOC,GAAW,EAAE,KAAAC,IAAM,QAAW,KAAAC,IAAM,OAAU,MAAAC,IAAO,EAAC,IAAK,CAAA,GAAI;AACjG,QAAMC,IAAOD,IAAO,IAAIA,IAAO,GACzBE,IAAO,OAAO,SAASJ,CAAG,IAAIA,IAAM,GACpCpE,IAAU,OAAO,SAASkE,CAAK,IAAIA,IAAQM,GAE3CC,KAAKzE,IAAUwE,KAAQD,GAEvBG,IADS,KAAK,IAAID,IAAI,KAAK,MAAMA,CAAC,CAAC,IAAI,OACvBzE,IAAUmE,IAAYI,IAAOC,KAAQL,IAAY,IAAI,KAAK,KAAKM,CAAC,IAAI,KAAK,MAAMA,CAAC,KAAKF;AAC3G,SAAO,KAAK,IAAIF,GAAK,KAAK,IAAID,GAAK,OAAOM,EAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC7D;AAGO,SAASC,GAAalH,GAAM;AACjC,QAAMuE,IAAQvE,EAAK,cAAc,qBAAqB;AACtD,MAAI,CAACuE,KAASvE,EAAK,QAAQ,QAAS;AACpC,EAAAA,EAAK,QAAQ,UAAU;AACvB,QAAMmH,IAAM,CAACC,GAAMC,MAAc9C,EAAM,aAAa6C,CAAI,MAAM,QAAQ7C,EAAM,aAAa6C,CAAI,MAAM,KAAKC,IAAW,OAAO9C,EAAM,aAAa6C,CAAI,CAAC,GAC5IE,IAAS,OAAO,EAAE,KAAKH,EAAI,OAAO,MAAS,GAAG,KAAKA,EAAI,OAAO,KAAQ,GAAG,MAAMA,EAAI,QAAQ,CAAC,EAAC,IAC7FhG,IAAO,MAAM;AACjB,UAAM,EAAE,KAAAwF,GAAK,KAAAC,EAAG,IAAKU,EAAM,GACrBb,IAAQ,OAAOlC,EAAM,KAAK;AAChC,IAAAvE,EAAK,iBAAiB,gBAAgB,EAAE,QAAQ,CAACkF,MAAW;AAC1D,YAAMqC,IAAO,OAAOrC,EAAO,QAAQ,MAAM,IAAI;AAC7C,MAAAA,EAAO,WAAWX,EAAM,aAAagD,IAAOd,KAASE,IAAMF,KAASG;AAAA,IACtE,CAAC;AAAA,EACH;AACA,EAAA5G,EAAK,iBAAiB,SAAS,CAACqF,MAAU;AACxC,UAAMH,IAASG,EAAM,OAAO,QAAQ,gBAAgB;AACpD,QAAI,CAACH,KAAU,CAAClF,EAAK,SAASkF,CAAM,KAAKX,EAAM,YAAYA,EAAM,SAAU;AAC3E,UAAM0C,IAAOT,GAAa,OAAOjC,EAAM,KAAK,GAAG,OAAOW,EAAO,QAAQ,MAAM,IAAI,IAAI,KAAK,GAAGoC,EAAM,CAAE;AACnG,IAAI,OAAOL,CAAI,MAAM1C,EAAM,UAC3BA,EAAM,QAAQ,OAAO0C,CAAI,GACzB1C,EAAM,cAAc,IAAI,MAAM,SAAS,EAAE,SAAS,GAAI,CAAE,CAAC,GACzDA,EAAM,cAAc,IAAI,MAAM,UAAU,EAAE,SAAS,GAAI,CAAE,CAAC;AAAA,EAC5D,CAAC,GACDA,EAAM,iBAAiB,SAASpD,CAAI,GACpCoD,EAAM,iBAAiB,UAAUpD,CAAI,GACrCA;AACF;AAGO,SAASqG,GAAaC,GAAQ;AACnC,QAAMC,IAASD,EAAO,kBAAkB,CAAC,KAAKA,EAAO,UAAUA,EAAO,aAAa;AACnF,SAAO,OAAOC,GAAQ,QAAQ,QAAQD,EAAO,SAAS,EAAE,EAAE;AAC5D;AAGO,SAASE,GAAiB3H,GAAM;AACrC,QAAMyH,IAASzH,EAAK,cAAc,QAAQ;AAC1C,MAAI,CAACyH,KAAUzH,EAAK,QAAQ,QAAS;AACrC,EAAAA,EAAK,QAAQ,UAAU;AACvB,QAAMmB,IAAO,MAAM;AAAE,IAAAnB,EAAK,QAAQ,OAAOwH,GAAaC,CAAM;AAAA,EAAG;AAC/D,EAAAA,EAAO,iBAAiB,UAAUtG,CAAI,GACtCA;AACF;AAGO,SAASyG,GAAeC,IAAQ,UAAU;AAC/C,EAAAA,EAAM,iBAAiB,gBAAgB,EAAE,QAAQvD,EAAa,GAC9DuD,EAAM,iBAAiB,eAAe,EAAE,QAAQ9C,EAAY,GAC5D8C,EAAM,iBAAiB,mBAAmB,EAAE,QAAQlC,EAAgB,GACpEkC,EAAM,iBAAiB,cAAc,EAAE,QAAQX,EAAY,GAC3DW,EAAM,iBAAiB,2BAA2B,EAAE,QAAQF,EAAgB;AAC9E;AAGA,SAASG,KAAY;AACnB,MAAI,OAAO,WAAa,IAAa,QAAO;AAC5C,QAAMhC,IAAM,OAAO,YAAY,GAAG;AAClC,MAAIA,EAAI,SAAS,gBAAgB,KAAK,kBAAkB,KAAKA,CAAG,EAAG,QAAO;AAC1E,QAAMP,IAAOO,EAAI,MAAM,MAAM,EAAE,CAAC;AAChC,SAAO,CAAC,GAAG,SAAS,iBAAiB,2BAA2B,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,MAAM,MAAM,EAAE,CAAC,MAAMP,CAAI;AAChH;AACA,IAAIuC,MAAa;AACf,QAAMC,IAAO,MAAMH,GAAe,QAAQ;AAC1C,EAAI,SAAS,eAAe,YAAW,SAAS,iBAAiB,oBAAoBG,CAAI,IACpFA;AACP;;;;;;;;;;;;;;;;;AChOA,UAAMvG,IAAOC,GACPuG,IAAKvJ,GAAA,GACLuB,IAAOiI,GAA+B,MAAM;AAClD,WAAA3G,GAAU,MAAM;AACd,MAAKtB,EAAK,UACV2F,GAAiB3F,EAAK,KAAK,GAC3BA,EAAK,MAAM,iBAAiB,oBAAoB,CAACR,MAAMgC,EAAK,UAAWhC,EAAyC,OAAO,IAAI,CAAC,GAC5HQ,EAAK,MAAM,iBAAiB,qBAAqB,CAACR,MAAM;AAAE,cAAM2E,IAAK3E,EAAkD;AAAQ,QAAAgC,EAAK,WAAW2C,EAAE,MAAMA,EAAE,MAAM;AAAA,MAAE,CAAC;AAAA,IACpK,CAAC,mBAICrF,EAaM,OAAA;AAAA,eAbG;AAAA,MAAJ,KAAIkB;AAAA,MAAQ,8BAA4BpB,EAAA,QAAI,iDAAA,CAAA;AAAA,MAAyD,kBAAgBA,EAAA;AAAA,IAAA;MACxHc,EAGQ,SAAA;AAAA,QAHD,OAAM;AAAA,QAA6B,KAAKD,EAAAuI,CAAA;AAAA,QAAI,OAAM;AAAA,MAAA;QACvDtI,EAA4C,QAA5CE,IAA4CyC,EAAlBzD,EAAA,QAAQ,GAAA,CAAA;AAAA,QAClCc,EAAyF,SAAA;AAAA,UAAjF,IAAID,EAAAuI,CAAA;AAAA,UAAI,OAAM;AAAA,UAAyB,MAAK;AAAA,UAAQ,QAAQpJ,EAAA;AAAA,UAAS,MAAMA,EAAA;AAAA,QAAA;;MAErFc,EAOM,OAPNiE,IAOM;AAAA,QANJjE,EAAwD,QAAxDkE,IAAwDvB,EAAfzD,EAAA,KAAK,GAAA,CAAA;AAAA,QAClCA,EAAA,aAAZE,EAAkE,QAAlE+E,IAAkExB,EAAdzD,EAAA,IAAI,GAAA,CAAA;;;;;;;;;;;2BCpB5DE,EAAiD,KAAA;AAAA,MAA9C,OAAM;AAAA,MAAgB,MAAMF,EAAA;AAAA,IAAA;MAAMI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;2BCK7CH,EAA4F,QAAA;AAAA,MAArF,OAAKI,EAAA,CAAA,YAAeN,EAAA,YAAO,aAAA,aAA+BA,EAAA,OAAO,EAAA,CAAA;AAAA,IAAA;MAAKI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;ICL1EiJ,KAAU;AAAA,EACrB;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAC1F;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAC1F;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAC1F;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAC1F;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAC1F;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAC1F;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAC1F;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAC1F;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAC1F;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAC1F;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AAAA,EAAU;AACpD,GACMC,KAAO,WACPC,KAAU,KACVC,KAAU,KAEVC,KAAI,CAAC,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,GACjHC,KAAI,CAAC,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,GACjHC,KAAIF,GAAE,IAAI,CAACG,MAASA,EAAK,QAAQ,MAAM,CAACC,MAASA,MAAQ,MAAM,MAAM,GAAI,CAAC,GAC1EC,KAAS,CAAC,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,QAAQ;AAG3G,SAASC,GAAYnC,GAAO;AACjC,SAAI,cAAc,KAAKA,CAAK,IAAU,UAClC,YAAY,KAAKA,CAAK,IAAU,SAChC,WAAW,KAAKA,CAAK,IAAU,QAC5B;AACT;AAGO,SAASoC,GAASC,GAAM;AAC7B,MAAIC,IAAM;AACV,UAAC,GAAGD,CAAI,EAAE,QAAO,EAAG,QAAQ,CAAC3E,GAAGL,MAAM;AAAE,IAAAiF,KAAO,OAAO5E,CAAC,KAAKL,IAAI,MAAM,IAAI,IAAI;AAAA,EAAI,CAAC,GAC5E,QAAQ,KAAMiF,IAAM,MAAO,EAAE;AACtC;AAGO,SAASC,GAAUvC,GAAOwC,GAAQ;AACvC,QAAMH,IAAOrC,EAAM,MAAM,GAAGwC,IAAS,CAAC,GAChCC,IAAQL,GAASC,CAAI;AAC3B,MAAIrC,EAAM,WAAWwC,KAAUxC,EAAMwC,IAAS,CAAC,MAAMC,EAAO,OAAM,IAAI,MAAM,yBAAyBA,CAAK,EAAE;AAC5G,QAAMC,IAASL,IAAOI;AACtB,MAAID,MAAW,GAAG;AAChB,UAAMG,IAAO,CAAC,GAAGD,EAAO,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAChF,MAAMmE,GAAEnE,CAAC,CAAC,EAAE,KAAK,EAAE,GACvDkF,IAAQ,CAAC,GAAGF,EAAO,MAAM,CAAC,CAAC,EAAE,IAAI,CAAChF,MAAMqE,GAAErE,CAAC,CAAC,EAAE,KAAK,EAAE;AAC3D,WAAO,EAAE,MAAM,MAAMiF,CAAI,QAAQC,CAAK,OAAO,MAAMF;EACrD;AACA,QAAMG,IAASX,GAAOQ,EAAO,CAAC,CAAC,GACzBC,IAAO,CAAC,GAAGD,EAAO,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAChF,GAAGL,OAAOwF,EAAOxF,CAAC,MAAM,MAAMwE,KAAIC,IAAGpE,CAAC,CAAC,EAAE,KAAK,EAAE,GACpFkF,IAAQ,CAAC,GAAGF,EAAO,MAAM,CAAC,CAAC,EAAE,IAAI,CAAChF,MAAMqE,GAAErE,CAAC,CAAC,EAAE,KAAK,EAAE;AAC3D,SAAO,EAAE,MAAM,MAAMiF,CAAI,QAAQC,CAAK,OAAO,MAAMF;AACrD;AAGO,SAASI,GAAcvD,GAAM;AAClC,MAAIwD;AACJ,MAAI,eAAe,KAAKxD,CAAI;AAC1B,IAAAwD,IAAS,CAACnB,IAAS,GAAGrC,EAAK,MAAM,OAAO,EAAE,IAAI,MAAM,CAAC;AAAA,OAChD;AACL,QAAI,eAAe,KAAKA,CAAI,EAAG,OAAM,IAAI,MAAM,+CAA+C;AAC9F,IAAAwD,IAAS,CAACpB,IAAS,GAAG,CAAC,GAAGpC,CAAI,EAAE,IAAI,CAACyD,MAAOA,EAAG,WAAW,CAAC,IAAI,EAAE,CAAC;AAAA,EACpE;AACA,QAAMP,IAAQM,EAAO,OAAO,CAACT,GAAKW,GAAG5F,MAAMiF,IAAMW,KAAK5F,MAAM,IAAI,IAAIA,IAAI,CAAC,IAAI;AAC7E,SAAO,CAAC,GAAG0F,GAAQN,CAAK;AAC1B;AAGO,SAASS,GAAc3D,GAAM;AAClC,QAAM4D,IAASL,GAAcvD,CAAI,EAAE,IAAI,CAAC0D,MAAMxB,GAAQwB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAIvB;AACrE,MAAI0B,IAAO;AACX,UAAC,GAAGD,CAAM,EAAE,QAAQ,CAACE,GAAGhG,MAAM;AAAE,IAAA+F,MAAS/F,IAAI,MAAM,IAAI,MAAM,KAAK,OAAO,OAAOgG,CAAC,CAAC;AAAA,EAAG,CAAC,GAC/E,EAAE,MAAAD,GAAM,MAAA7D;AACjB;AAGO,SAAS+D,GAActD,GAAOuD,IAAS,QAAQ;AACpD,QAAMvB,IAAO,OAAOhC,KAAS,EAAE,EAAE,KAAI;AACrC,MAAI,CAACgC,EAAM,OAAM,IAAI,MAAM,aAAa;AACxC,QAAMwB,IAAOD,MAAW,SAASpB,GAAYH,CAAI,IAAIuB,EAAO;AAC5D,SAAIC,MAAS,UAAgBjB,GAAUP,EAAK,SAASA,EAAK,WAAW,KAAK,KAAK,IAAI,GAAG,GAAG,EAAE,IACvFwB,MAAS,QAAcjB,GAAU,IAAIP,CAAI,IAAI,EAAE,IAC/CwB,MAAS,SAAejB,GAAUP,GAAM,CAAC,IACtCkB,GAAclB,CAAI;AAC3B;AAGA,MAAMyB,KAAa,CAAClE,MAAS,OAAOA,CAAI,EAAE,QAAQ,YAAY,CAACyD,MAAO,KAAKA,EAAG,WAAW,CAAC,CAAC,GAAG;AAGvF,SAASU,GAAUN,GAAMO,IAAQ,IAAI;AAE1C,MAAIC,IAAQ;AACZ,WAASvG,IAAI,GAAGA,IAAI+F,EAAK,UAAU;AACjC,QAAIA,EAAK/F,CAAC,MAAM,KAAK;AAAE,MAAAA;AAAK;AAAA,IAAU;AACtC,QAAIgG,IAAI;AACR,WAAOD,EAAK/F,IAAIgG,CAAC,MAAM,MAAK,CAAAA;AAC5B,IAAAO,KAAS,YAAYvG,IAAI,EAAK,kBAAkBgG,CAAC,mBACjDhG,KAAKgG;AAAA,EACP;AACA,QAAMQ,IAAQT,EAAK,SAAS;AAC5B,SAAO,qBAAqBS,CAAK,8EAA8EJ,GAAWE,CAAK,CAAC,yBAAyBE,CAAK,QAAQD,CAAK;AAC7K;AAwBO,SAASE,GAAcrJ,GAAI;AAChC,MAAI,CAACA,EAAI;AACT,QAAMuF,IAAQvF,EAAG,QAAQ,SAAS,IAC5BiI,IAASjI,EAAG,QAAQ,WAAW;AACrC,MAAI;AACF,UAAM,EAAE,MAAA2I,GAAM,MAAA7D,EAAI,IAAK+D,GAActD,GAAOvF,EAAG,QAAQ,UAAU,MAAM;AACvE,IAAAA,EAAG,gBAAgB,YAAY,GAC/BA,EAAG,YAAYiJ,GAAUN,GAAM,WAAW7D,CAAI,EAAE,KAAKmD,IAAS,0CAA0Ce,GAAWlE,CAAI,CAAC,kBAAkB;AAAA,EAC5I,SAASwE,GAAK;AACZ,IAAAtJ,EAAG,aAAa,cAAc,EAAE,GAChCA,EAAG,YAAY,0CAA0CgJ,GAAWzD,CAAK,CAAC,KAAKyD,GAAWM,EAAI,OAAO,CAAC;AAAA,EACxG;AACF;AAGO,SAASC,GAAa5C,IAAQ,UAAU;AAC7C,EAAAA,EAAM,iBAAiB,yBAAyB,EAAE,QAAQ0C,EAAa;AACzE;AAGA,SAASzC,KAAY;AACnB,MAAI,OAAO,WAAa,IAAa,QAAO;AAC5C,QAAMhC,IAAM,OAAO,YAAY,GAAG;AAClC,MAAIA,EAAI,SAAS,YAAY,KAAK,kBAAkB,KAAKA,CAAG,EAAG,QAAO;AACtE,QAAMP,IAAOO,EAAI,MAAM,MAAM,EAAE,CAAC;AAChC,SAAO,CAAC,GAAG,SAAS,iBAAiB,2BAA2B,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,MAAM,MAAM,EAAE,CAAC,MAAMP,CAAI;AAChH;AACA,IAAIuC,MAAa;AACf,QAAMC,IAAO,MAAM0C,GAAa,QAAQ;AACxC,EAAI,SAAS,eAAe,YAAW,SAAS,iBAAiB,oBAAoB1C,CAAI,IACpFA;AACP;;;;;;;;;;;;;AC7JA,UAAMzH,IAAQ1B,GACR8L,IAASzK,EAAS,MAAM;AAC5B,UAAI;AACF,cAAM,EAAE,MAAA4J,GAAM,MAAA7D,MAAS+D,GAAczJ,EAAM,OAAOA,EAAM,MAAM;AAC9D,eAAO,EAAE,KAAK6J,GAAUN,GAAM,WAAW7D,CAAI,EAAE,GAAG,MAAAA,GAAM,OAAO,GAAA;AAAA,MACjE,SAASwE,GAAK;AACZ,eAAO,EAAE,KAAK,IAAI,MAAMlK,EAAM,OAAO,OAAQkK,EAAc,QAAA;AAAA,MAC7D;AAAA,IACF,CAAC;2BAIC1L,EAGS,UAAA;AAAA,MAHA,OAAKI,EAAA,CAAA,cAAiBN,EAAA,SAAI,QAAA,eAA4BA,EAAA,IAAI,EAAA,CAAA;AAAA,MAAM,cAAY8L,EAAA,MAAO,aAAa;AAAA,IAAA;MAC3FA,EAAA,MAAO,YAAnB5L,EAA6E,QAAA;AAAA;QAArD,OAAA,EAAA,SAAA,WAAA;AAAA,QAA0B,WAAQ4L,EAAA,MAAO;AAAA,MAAA;MAC/C9L,EAAA,UAAU8L,EAAA,MAAO,SAAnC7L,EAAA,GAAAC,EAAgJ,cAAhJc,IAAgJyC,EAAxEqI,EAAA,MAAO,QAAK,GAAM9L,EAAA,KAAK,KAAK8L,QAAO,KAAK,KAAKA,EAAA,MAAO,IAAI,GAAA,CAAA;;;;;;;;;;;;;;;;;ACRpI,UAAMpK,IAAQ1B,GACR2B,IAAQnB,EAAmBR,GAAA,YAAgB,GAC3C,EAAE,MAAAoB,GAAM,SAAAE,EAAA,IAAYL,GAAA,GACpB8K,IAAOpM,EAAO,YAAY,GAC1BqM,IAAU3K,EAAS,MAAMK,EAAM,MAAMqK,CAAI;AAE/C,aAASE,EAAQrL,GAAU;AACzB,YAAM+E,IAAQ/E,EAAE;AAChB,MAAAe,EAAM,QAAQgE,EAAM;AAAA,IACtB;sBAIE1F,EAAA,GAAAC,EAwBM,OAxBN+B,EAwBMpB,MAxBW,EAAE,OAAM,mBAAA,CAAkB,GAAA;AAAA,MAC5Bb,EAAA,cAAbE,EAA6E,SAAA;AAAA;QAAzD,OAAM;AAAA,QAAkB,KAAK8L,EAAA;AAAA,MAAA,KAAYhM,EAAA,KAAK,GAAA,GAAAG,EAAA;MAClEW,EAiBM,OAjBNC,IAiBM;AAAA,wBAhBJD,EAEO,QAAA;AAAA,UAFD,OAAM;AAAA,UAAiB,eAAY;AAAA,QAAA;UACvCA,EAAuL,OAAA,EAAlL,SAAQ,eAAW;AAAA,YAACA,EAAwJ,QAAA;AAAA,cAAlJ,MAAK;AAAA,cAAe,GAAE;AAAA,YAAA;;;QAEvDA,EAYE,SAZFmB,EAYEpB,EAAAS,CAAA,GAXe;AAAA,UACd,IAAI0K,EAAA;AAAA,UACL,OAAM;AAAA,UACN,MAAK;AAAA,UACL,cAAa;AAAA,UACb,YAAW;AAAA,UACX,WAAU;AAAA,UACV,aAAY;AAAA,UACX,gBAAchM,EAAA,QAAK,SAAY;AAAA,UAC/B,OAAO2B,EAAA;AAAA,UACP,SAAAsK;AAAA,QAAA;;MAGLnL,EAGS,UAAA;AAAA,QAHA,iCAA+Ba,EAAA,SAAK,2BAAA,CAAA;AAAA,QAAkC,cAAW;AAAA,MAAA;QACxFvB,EAA0FC,yBAA1F,MAA0F;AAAA,0BAArES,EAA8D,OAAA;AAAA,YAAzD,OAAM;AAAA,YAA0B,eAAY;AAAA,UAAA;;QACtEA,EAAiF,cAAjF4C,IAAiFD,EAAlC9B,EAAA,SAAS3B,EAAA,SAAS,GAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;2BCxCrEE,EAMI,KAAA;AAAA,MANA,OAAKI,EAAA,CAAA,iBAAoBN,EAAA,SAAI,QAAA,kBAA+BA,EAAA,IAAI,EAAA,CAAA;AAAA,MAAM,MAAMA,EAAA;AAAA,IAAA;MAC9EI,EAAoBC,EAAA,QAAA,MAAA;AAAA,MACpBS,EAGO,QAHPC,IAGO;AAAA,QAFLD,EAAwH,QAAxHE,IAAwH;AAAA,cAAnFhB,EAAA,IAAI,GAAA,CAAA;AAAA,UAAeA,EAAA,eAAZE,EAAqE,QAArEwD,IAAqED,EAAhBzD,EAAA,MAAM,GAAA,CAAA;;QAC3FA,EAAA,gBAAZE,EAAwE,QAAxE6E,IAAwEtB,EAAjBzD,EAAA,OAAO,GAAA,CAAA;;;;;;;;;;;;;;;;2BCOlEE,EAWM,OAAA;AAAA,MAXA,2BAAyBF,EAAA,cAAS,aAAA,wBAAA,CAAA;AAAA,MAA8C,cAAYA,EAAA;AAAA,IAAA;MAChGI,EASOC,yBATP,MASO;AAAA,SARLJ,EAAA,EAAA,GAAAC,EAOW+D,GAAA,MAAAC,EAPmBlE,EAAA,OAAK,CAAjBmE,GAAMe,wBAAmBA,KAAC;AAAA,UACjCf,EAAK,QAAQe,IAAIlF,EAAA,MAAM,SAAM,UAAtCE,EACuG,KAAA;AAAA;YAD3D,OAAM;AAAA,YAAsB,MAAMiE,EAAK;AAAA,UAAA;YAC5DA,EAAK,aAAzBjE,EAAsE,gBAAA;AAAA;cAAtC,MAAMiE,EAAK;AAAA,cAAM,eAAY;AAAA,YAAA;YAAYX,EAAAC,EAAAU,EAAK,KAAK,GAAA,CAAA;AAAA,UAAA,cAEtFlE,KAAAC,EAC0G,QAD1GwD,IAC0G;AAAA,YAAnFS,EAAK,aAAzBjE,EAAsE,gBAAA;AAAA;cAAtC,MAAMiE,EAAK;AAAA,cAAM,eAAY;AAAA,YAAA;YAAYX,EAAAC,EAAAU,EAAK,KAAK,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BCV5FjE,EAgBS,UAAA;AAAA,MAfN,8BAA4BF,EAAA,WAAO,6BAAiCA,UAAI,0BAA8BA,EAAA,kCAAkCA,EAAA,QAAI,wBAAA,CAAA;AAAA,MAC5I,OAAKsE,EAAEtE,EAAA,QAAK,EAAA,4BAAiCA,EAAA,MAAA,IAAU,MAAS;AAAA,IAAA;MAEjEc,EAIM,OAJNX,IAIM;AAAA,wBAHJW,EAAK,KAAA,MAAA,MAAA,EAAA;AAAA,wBAAAA,EAAK,KAAA,MAAA,MAAA,EAAA;AAAA,wBAAAA,EAAK,KAAA,MAAA,MAAA,EAAA;AAAA,QACHd,EAAA,YAAZE,EAAmE,QAAnEa,IAAmE0C,EAAbzD,EAAA,GAAG,GAAA,CAAA;QAC7CkC,EAAAA,OAAO,WAAnBjC,KAAAC,EAA+G,QAA/Gc,IAA+G;AAAA,UAA9BZ,EAAuBC,EAAA,QAAA,SAAA;AAAA,QAAA;;MAE1GS,EAKM,OALN4C,IAKM;AAAA,QAJJtD,EAGOC,yBAHP,MAGO;AAAA,UAFML,EAAA,YAAXE,EAAwC,OAAA;AAAA;YAAvB,KAAKF,EAAA;AAAA,YAAM,KAAKA,EAAA;AAAA,UAAA,yBACjCE,EAAgE,OAAA;AAAA;YAApD,OAAM;AAAA,YAAe,MAAK;AAAA,YAAO,cAAYF,EAAA;AAAA,UAAA;;;MAG3CA,EAAA,WAAWkC,EAAAA,OAAO,WAApCjC,KAAAC,EAAqI,cAArI+E,IAAqI;AAAA,QAAtD7E,EAAyCC,yBAAzC,MAAyC;AAAA,cAAjBL,EAAA,OAAO,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;ACxBlH,UAAM0B,IAAQ1B,GAaRkM,IAAM,CAACpB,MAAepJ,EAAM,MAAM,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,GAAIoJ,IAAIpJ,EAAM,MAAO,GAAG,CAAC,IAAI,GAC1FyK,IAAU9K,EAAS,MAAM,KAAK,MAAM6K,EAAIxK,EAAM,KAAK,CAAC,CAAC,GACrD0K,IAAO/K,EAAS,MAAM;AAC1B,UAAIK,EAAM,YAAY,aAAa,CAACA,EAAM,eAAeA,EAAM;AAC/D,YAAM,CAAC2K,GAAMC,CAAM,IAAI5K,EAAM,WAAW,KAAO,CAAC,IAAI,EAAE,IAAIA,EAAM;AAChE,aAAOyK,EAAQ,SAASG,IAAS,WAAWH,EAAQ,SAASE,IAAO,YAAY;AAAA,IAClF,CAAC;2BAICnM,EAUM,OAAA;AAAA,MATH,OAAKI,EAAA,CAAA,eAAkBN,EAAA,SAAI,QAAA,gBAA6BA,EAAA,IAAI,IAAIA,EAAA,QAAI,mBAAA,CAAA;AAAA,MACrE,MAAK;AAAA,MACJ,iBAAeA,EAAA;AAAA,MAChB,iBAAc;AAAA,MACb,iBAAeA,EAAA;AAAA,MACf,cAAYA,EAAA;AAAA,IAAA;MAEbc,EAA4H,OAAA;AAAA,QAAtH,OAAKR,EAAA,CAAA,mBAAsB8L,EAAA,UAAI,aAAA,oBAAsCA,EAAA,KAAI,EAAA,CAAA;AAAA,QAAM,qBAAmBD,EAAA,KAAO,KAAA;AAAA,MAAA;MACnGnM,EAAA,UAAM,aAAlBE,EAAmG,QAAA;AAAA;QAAvE,OAAM;AAAA,QAAsB,OAAKoE,EAAA,EAAA,MAAA,GAAa4H,EAAIlM,EAAA,MAAM,CAAA,IAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;AC1BxF,UAAM0B,IAAQ1B,GAKRO,IAAOC,EAAoBR,GAAC,MAA0B,GACtDsC,IAAKQ,EAA8B,IAAI,GACvC,EAAE,SAAAH,EAAA,IAAYN,GAAU9B,GAAM+B,CAAE,GAChCyJ,IAAOpM,EAAO,iBAAiB,GAC/BwI,IAAOzG,EAAM,MAAMqK;2BAIvB7L,EAKS,UAAA;AAAA,MALA,IAAIW,EAAAsH,CAAA;AAAA,eAAU;AAAA,MAAJ,KAAI7F;AAAA,MAAK,OAAM;AAAA,MAAkB,UAAS;AAAA,MAAQ,sBAAoBzB,EAAAsH,CAAA,CAAI;AAAA,MAAW,uBAAqBtH,EAAAsH,CAAA,CAAI;AAAA,MAAU,SAAK7E,EAAA,CAAA,MAAAA,EAAA,CAAA;AAAA,gBAAEzC,EAAA8B,CAAA,KAAA9B,EAAA8B,CAAA,EAAA,GAAAY,CAAA;AAAA,IAAA;MACpIvD,EAAA,YAAQ,aAApBE,EAA0F,QAAA;AAAA;QAA5D,OAAM;AAAA,QAAa,MAAK;AAAA,QAAU,cAAYF,EAAA;AAAA,MAAA,yBAC5E6E,EAAsD0H,IAAA;AAAA;QAAlC,OAAOvM,EAAA;AAAA,QAAW,OAAOA,EAAA;AAAA,MAAA;MAC7Cc,EAAyE,MAAA;AAAA,QAApE,OAAOD,EAAAsH,CAAA,CAAI;AAAA,QAAU,OAAM;AAAA,MAAA,KAA4BnI,EAAA,KAAK,GAAA,GAAAgB,EAAA;AAAA,MACjEF,EAAiF,KAAA;AAAA,QAA7E,OAAOD,EAAAsH,CAAA,CAAI;AAAA,QAAS,OAAM;AAAA,MAAA;QAAwB/H,EAAuBC,yBAAvB,MAAuB;AAAA,cAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;qBCF7DA,EAAA,aADRE,EAcI,KAAA;AAAA;MAZD,MAAMF,EAAA;AAAA,MACN,aAAWA,EAAA,WAAW;AAAA,MACtB,OAAKM,EAAA;AAAA;QAA4BN,EAAA,oCAAoCA,EAAA,OAAO;AAAA,QAAWA,EAAA,4BAA4BA,EAAA,IAAI;AAAA,QAAWA,EAAA,QAAI;AAAA,QAA2BA,EAAA,QAAI;AAAA,QAA2BA,EAAA,UAAM;AAAA,MAAA;;MASvMI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA,oBAEVH,EAeS,UAAA;AAAA;MAbN,MAAMF,EAAA;AAAA,MACN,aAAWA,EAAA,WAAW;AAAA,MACtB,UAAUA,EAAA,YAAYA,EAAA;AAAA,MACtB,OAAKM,EAAA;AAAA;QAA4BN,EAAA,oCAAoCA,EAAA,OAAO;AAAA,QAAWA,EAAA,4BAA4BA,EAAA,IAAI;AAAA,QAAWA,EAAA,QAAI;AAAA,QAA2BA,EAAA,QAAI;AAAA,QAA2BA,EAAA,UAAM;AAAA,MAAA;;MASvMI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;2BCjDVH,EAEM,OAAA;AAAA,MAFA,0BAAwBF,EAAA,YAAQ,wBAAA,CAAA;AAAA,MAA+B,MAAK;AAAA,MAAS,cAAYA,EAAA;AAAA,IAAA;MAC7FI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;sBCFVJ,EAAA,GAAAC,EAA+C,QAA/CC,IAA+C;AAAA,MAAfC,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;sBCCxCJ,EAAA,GAAAC,EAGM,OAHNC,IAGM;AAAA,MAFJW,EAA4C,OAA5CC,IAA4C;AAAA,QAAdX,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MAC3B6B,EAAAA,OAAO,UAAlBjC,KAAAC,EAAiF,OAAjFc,IAAiF;AAAA,QAA5BZ,EAAsBC,EAAA,QAAA,QAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;2BCC7EH,EASM,OAAA;AAAA,MATA,qBAAmBF,EAAA,SAAI,QAAA,aAAA,CAAA;AAAA,IAAA;MAChBA,EAAA,SAASA,EAAA,eAAekC,EAAAA,OAAO,UAA1CjC,EAAA,GAAAC,EAKM,OALNC,IAKM;AAAA,QAJJC,EAGOC,wBAHP,MAGO;AAAA,UAFKL,EAAA,cAAVE,EAAuD,MAAvDa,IAAuD0C,EAAbzD,EAAA,KAAK,GAAA,CAAA;UACtCA,EAAA,oBAATE,EAAuE,KAAvEc,IAAuEyC,EAAlBzD,EAAA,WAAW,GAAA,CAAA;;;MAGzDkC,EAAAA,OAAO,WAAlBjC,KAAAC,EAAiE,OAAjEwD,IAAiE;AAAA,QAAdtD,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MAChD6B,EAAAA,OAAO,UAAlBjC,KAAAC,EAA6E,OAA7E6E,IAA6E;AAAA,QAA5B3E,EAAsBC,EAAA,QAAA,QAAA;AAAA,MAAA;;;ICb9DmM,KAAK,CAACC,MAAc,OAAO,WAAWA,EAAE,QAAQ,CAAC,CAAC,CAAC;AAGzD,SAASC,GAAQ7E,GAAe8E,IAAO,GAAG;AAC/C,MAAI9E,KAAS,EAAG,QAAO8E;AACvB,QAAMC,IAAM/E,IAAQ8E,GACdE,IAAM,MAAM,KAAK,MAAM,KAAK,MAAMD,CAAG,CAAC;AAC5C,UAAQ,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,KAAK,CAACE,MAAMA,IAAID,KAAOD,CAAG,KAAK,MAAMC,IAAMF;AACzF;AAGO,SAASI,GAAcnC,GAAkB5C,GAAa;AAC3D,QAAMgF,IAAMpC,EAAO,IAAI,CAACE,GAAG5F,MAAM,CAAC0F,EAAO,SAAS,IAAK1F,KAAK0F,EAAO,SAAS,KAAM,MAAM,IAAI,MAAOE,IAAI9C,IAAO,GAAG,CAAC;AAClH,MAAI,CAACgF,EAAI,OAAQ,QAAO;AACxB,QAAMC,IAAQ,CAACnC,GAAWoC,GAAW,MAAc,KAAK,IAAI,KAAK,IAAIpC,GAAG,KAAK,IAAIoC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAIA,GAAG,CAAC,CAAC;AACvG,MAAI3H,IAAI,IAAIiH,GAAGQ,EAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAIR,GAAGQ,EAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,WAAS9H,IAAI,GAAGA,IAAI8H,EAAI,SAAS,GAAG9H,KAAK;AACvC,UAAMiI,IAAKH,EAAI9H,IAAI,CAAC,KAAK8H,EAAI9H,CAAC,GAAGkI,IAAKJ,EAAI9H,CAAC,GAAGmI,IAAKL,EAAI9H,IAAI,CAAC,GAAGoI,IAAKN,EAAI9H,IAAI,CAAC,KAAKmI,GAC5EE,IAAK,CAACH,EAAG,CAAC,KAAKC,EAAG,CAAC,IAAIF,EAAG,CAAC,KAAK,GAAGF,EAAMG,EAAG,CAAC,KAAKC,EAAG,CAAC,IAAIF,EAAG,CAAC,KAAK,GAAGC,EAAG,CAAC,GAAGC,EAAG,CAAC,CAAC,CAAC,GACnFG,IAAK,CAACH,EAAG,CAAC,KAAKC,EAAG,CAAC,IAAIF,EAAG,CAAC,KAAK,GAAGH,EAAMI,EAAG,CAAC,KAAKC,EAAG,CAAC,IAAIF,EAAG,CAAC,KAAK,GAAGA,EAAG,CAAC,GAAGC,EAAG,CAAC,CAAC,CAAC;AACzF,IAAA9H,KAAK,KAAKiH,GAAGe,EAAG,CAAC,CAAC,CAAC,IAAIf,GAAGe,EAAG,CAAC,CAAC,CAAC,IAAIf,GAAGgB,EAAG,CAAC,CAAC,CAAC,IAAIhB,GAAGgB,EAAG,CAAC,CAAC,CAAC,IAAIhB,GAAGa,EAAG,CAAC,CAAC,CAAC,IAAIb,GAAGa,EAAG,CAAC,CAAC,CAAC;AAAA,EACtF;AACA,SAAO9H;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACfA,UAAM7D,IAAQ1B,GA2BRyN,IAAS,CAAC,WAAW,YAAY,SAAS,SAAS,OAAO,MAAM,GAChEC,IAASrM,EAAS,MAAMK,EAAM,UAAU+L,CAAM,GAC9CE,IAAOtM,EAAS,MAAMK,EAAM,WAAWA,EAAM,UAAU+L,EAAO,IAAI,CAACzH,MAAMA,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,GACvF4H,IAAMvM,EAAS,MAAMK,EAAM,OAAOgL,GAAQ,KAAK,IAAI,GAAG,GAAGhL,EAAM,OAAO,QAAQ,CAACoL,MAAMA,EAAE,MAAM,CAAC,GAAGpL,EAAM,IAAI,CAAC,GAC5GmM,IAAQxM,EAAS,MAAM,KAAK,IAAI,GAAG,GAAGK,EAAM,OAAO,IAAI,CAACoL,MAAMA,EAAE,OAAO,MAAM,CAAC,CAAC,GAC/EgB,IAAQzM,EAAS,MAAMK,EAAM,OAAO,IAAI,CAACoL,MAAMC,GAAcD,EAAE,QAAQc,EAAI,KAAK,CAAC,CAAC,GAClFG,IAAU1M,EAAS,MAAM,MAAM,KAAK,EAAE,QAAQK,EAAM,OAAO,EAAA,GAAK,CAACsM,GAAG9I,MAAM0I,EAAI,QAASA,EAAI,QAAQlM,EAAM,OAAQwD,CAAC,CAAC,GACnH+I,IAAW,CAAC/I,MAAc,GAAGwI,EAAO,MAAMxI,CAAC,KAAKA,IAAI,CAAC,KAAKxD,EAAM,OAAO,IAAI,CAACoL,MAAM,GAAGA,EAAE,IAAI,IAAIA,EAAE,OAAO5H,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC;2BAI5HhF,EA4BS,UAAA;AAAA,MA5BA,OAAKI,EAAA,CAAA,iBAAoBN,EAAA,YAAO,UAAA,kBAAiCA,EAAA,OAAO,IAAIA,EAAA,QAAI,qBAAA,CAAA;AAAA,IAAA;MACrEA,EAAA,SAASA,EAAA,OAAOA,EAAA,SAAlCC,KAAAC,EAIa,cAJbC,IAIa;AAAA,QAHCH,EAAA,cAAZE,EAAkE,QAAlEa,IAAkE0C,EAAfzD,EAAA,KAAK,GAAA,CAAA;QAC5CA,EAAA,YAAZE,EAA4D,QAA5Dc,IAA4DyC,EAAbzD,EAAA,GAAG,GAAA,CAAA;QACtCA,EAAA,cAAZE,EAAkE,QAAlEwD,IAAkED,EAAfzD,EAAA,KAAK,GAAA,CAAA;;MAE1Dc,EAoBM,OApBNiE,IAoBM;AAAA,QAnBJjE,EAAwG,MAAxGkE,IAAwG;AAAA,WAAxD/E,EAAA,EAAA,GAAAC,EAAmD+D,GAAA,MAAAC,EAA9B6J,EAAA,OAAO,CAAhBhI,GAAGb,OAAfjF,EAAA,GAAAC,EAAmD,MAAA,EAApB,KAAKgF,EAAA,KAAMa,CAAC,GAAA,CAAA;;QAC3FjF,EAgBM,OAAA;AAAA,UAhBD,OAAM;AAAA,UAAuB,OAAKwD,EAAEtE,EAAA,SAAI,IAAA,wBAAiCA,EAAA,IAAI,KAAK,MAAS;AAAA,QAAA;WAC9FC,KAAAC,EAKM,OALN+E,IAKM;AAAA,aAJJhF,EAAA,EAAA,GAAAC,EAGI+D,GAAA,MAAAC,EAHgBlE,EAAA,QAAM,CAAf8M,GAAG5H,YAAdhF,EAGI,KAAA;AAAA,cAHyB,KAAKgF;AAAA,cAAG,OAAM;AAAA,YAAA;cACzCpE,EAAyE,QAAA;AAAA,gBAAnE,OAAM;AAAA,gBAAuB,GAAC,GAAKgN,EAAA,MAAM5I,CAAC,CAAA;AAAA,cAAA;cAChDpE,EAAkG,QAAA;AAAA,gBAA3F,OAAKR,EAAA,CAAA,uBAA0BwM,EAAE,UAAM,6BAAA,CAAA;AAAA,gBAAqC,GAAGgB,EAAA,MAAM5I,CAAC;AAAA,cAAA;;;UAGjGpE,EAQK,MAAA;AAAA,YARD,OAAM;AAAA,YAAuB,gBAAc+M,EAAA,KAAK,EAAA;AAAA,YAAK,cAAY7N,EAAA;AAAA,UAAA;oBACnEE,EAMK+D,GAAA,MAAAC,EANW2J,EAAA,OAAK,CAAV3I,YAAXhF,EAMK,MAAA;AAAA,cANmB,KAAKgF;AAAA,cAAG,OAAM;AAAA,cAAsB,gBAAcA,IAAC,CAAA,EAAA;AAAA,cAAQ,UAAS;AAAA,cAAK,cAAY+I,EAAS/I,IAAC,CAAA;AAAA,YAAA;eACrHjF,EAAA,EAAA,GAAAC,EAAyH+D,GAAA,MAAAC,EAArGlE,EAAA,QAAM,CAAf8M,GAAGoB,YAAdhO,EAAyH,KAAA;AAAA,gBAA5F,KAAKgO;AAAA,gBAAG,OAAM;AAAA,gBAAsB,OAAK5J,EAAA,OAASzD,MAAIiM,EAAE,OAAO5H,IAAC,CAAA,IAAQ0I,EAAA,QAAG,GAAA,CAAA,GAAA;AAAA,cAAA;cACxG9M,EAGO,QAHPqN,IAGO;AAAA,gBAFLrN,EAAyC,UAAA,MAAA2C,EAA9BiK,EAAA,MAAOxI,UAAUA,CAAC,GAAA,CAAA;AAAA,iBAC7BjF,EAAA,EAAA,GAAAC,EAAkH+D,GAAA,MAAAC,EAA3FlE,EAAA,QAAM,CAAf8M,GAAGoB,YAAjBhO,EAAkH,QAAA;AAAA,kBAAlF,KAAKgO;AAAA,kBAAG,OAAM;AAAA,gBAAA;kBAAwB1K,EAAAC,EAAAqJ,EAAE,IAAI,GAAA,CAAA;AAAA,kBAAGhM,EAA4B,KAAA,MAAA2C,EAAtBqJ,EAAE,OAAO5H,IAAC,CAAA,CAAA,GAAA,CAAA;AAAA,gBAAA;;;;;QAKvGpE,EAAqG,MAArGsN,IAAqG;AAAA,WAArDnO,EAAA,EAAA,GAAAC,EAAgD+D,GAAA,MAAAC,EAA3ByJ,EAAA,OAAI,CAAb9J,GAAGqB,OAAfjF,EAAA,GAAAC,EAAgD,MAAA,EAApB,KAAKgF,EAAA,KAAMrB,CAAC,GAAA,CAAA;;;MAE1F/C,EAA6H,MAA7HuN,IAA6H;AAAA,SAAjGpO,EAAA,EAAA,GAAAC,EAA4F+D,GAAA,MAAAC,EAAvElE,EAAA,QAAM,CAAf8M,GAAG5H,YAAfhF,EAA4F,MAAA,EAA9D,KAAKgF,KAAC;AAAA,0BAAEpE,EAAqC,QAAA,EAA/B,OAAM,kBAAA,GAAiB,MAAA,EAAA;AAAA,UAAW0C,EAAAC,EAAAqJ,EAAE,IAAI,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACnEpH,UAAMpL,IAAQ1B,GAIRoH,IAAO5G,EAAmBR,GAAA,YAAgB,GAC1C4C,IAAOC,GACPuG,IAAKzJ,EAAO,SAAS;AAE3B,aAAS2O,IAAS;AAChB,MAAI,CAAClH,EAAK,MAAM,KAAA,KAAU1F,EAAM,aAChCkB,EAAK,QAAQwE,EAAK,MAAM,KAAA,CAAM,GAC9BA,EAAK,QAAQ;AAAA,IACf;AACA,aAASmH,EAAU3N,GAAkB;AACnC,MAAIc,EAAM,eAAed,EAAE,QAAQ,WAAW,CAACA,EAAE,YAAY,CAACA,EAAE,gBAC9DA,EAAE,eAAA,GACAA,EAAE,OAA+B,MAAM,cAAA;AAAA,IAE7C;2BAIEV,EAQO,QAAA;AAAA,MARA,8BAA4BF,EAAA,UAAM,0BAAA,CAAA;AAAA,MAAkC,aAAgBsO,GAAM,CAAA,SAAA,CAAA;AAAA,IAAA;MAC/FxN,EAA+D,SAAA;AAAA,QAAxD,OAAM;AAAA,QAAsB,KAAKD,EAAAuI,CAAA;AAAA,MAAA,KAAOpJ,EAAA,KAAK,GAAA,GAAAG,EAAA;AAAA,QACpDW,EAA2J,YAAA;AAAA,QAAhJ,IAAID,EAAAuI,CAAA;AAAA,sDAAahC,EAAI,QAAAhF;AAAA,QAAE,OAAM;AAAA,QAA0B,MAAK;AAAA,QAAK,aAAapC,EAAA;AAAA,QAAa,UAAA;AAAA,QAAU,UAAUA,EAAA;AAAA,QAAW,WAAAuO;AAAA,MAAA;aAAzGnH,EAAA,KAAI;AAAA,MAAA;MAChCtG,EAIM,OAJNE,IAIM;AAAA,QAHOkB,EAAAA,OAAO,SAAlBjC,KAAAC,EAAoF,OAApFwD,IAAoF;AAAA,UAA3BtD,EAAqBC,EAAA,QAAA,OAAA;AAAA,QAAA;QAClEL,EAAA,aAAZE,EAAkE,QAAlE6E,IAAkEtB,EAAdzD,EAAA,IAAI,GAAA,CAAA;QACxDc,EAAmN,UAAA;AAAA,UAA3M,MAAK;AAAA,UAAS,OAAM;AAAA,UAAyB,cAAW;AAAA,UAAQ,UAAUd,EAAA;AAAA,QAAA;UAAUc,EAA8G,OAAA;AAAA,YAAzG,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAe,eAAY;AAAA,UAAA;YAAOA,EAAwC,QAAA,EAAlC,GAAE,gCAA8B;AAAA,UAAA;;;;;;;;;;;;;;;;;;ACtBxM,UAAMa,IAAQnB,iBAAiB,GACzB,EAAE,MAAAY,GAAM,SAAAE,EAAA,IAAYL,GAAA;sBAIxBhB,EAAA,GAAAC,EAGQ,eAHOW,EAAAO,CAAA,CAAI,CAAA,GAAA;AAAA,QACjBN,EAA6H,SAA7HmB,EAA6HpB,EAAAS,CAAA,GAAvG;AAAA,sDAAWK,EAAK,QAAAS;AAAA,QAAG,OAAOpC,EAAA,SAAI,UAAA,aAAA;AAAA,QAA4C,MAAMA,EAAA;AAAA,QAAO,OAAOA,EAAA;AAAA,MAAA;aAAnF2B,EAAA,KAAK;AAAA,MAAA;MACtCvB,EAA2DC,yBAA3D,MAA2D;AAAA,QAArCL,EAAA,cAAhBE,EAA8C+D,GAAA,EAAA,KAAA,KAAA;AAAA,cAAnBjE,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;2BCTxCE,EAaK,MAAA;AAAA,MAbA,0BAAwBF,EAAA,QAAI,oBAAA,CAAA;AAAA,MAA2B,aAAU;AAAA,MAAU,cAAYA,EAAA;AAAA,IAAA;MAC1FI,EAWOC,yBAXP,MAWO;AAAA,SAVLJ,EAAA,EAAA,GAAAC,EASK+D,GAAA,MAAAC,EATmBlE,EAAA,OAAK,CAAjBmE,GAAMe,YAAlBhF,EASK,MAAA;AAAA,UAT2B,KAAKgF;AAAA,UAAI,OAAK5E,EAAA,CAAA,qBAAwB6D,EAAK,QAAI,SAAA,CAAA;AAAA,QAAA;UAC7DnE,EAAA,aAAhBE,EAMW+D,GAAA,EAAA,KAAA,KAAA;AAAA,YALTnD,EAGO,QAHPC,IAGO;AAAA,cAFLD,EAAwD,QAAxDE,IAAwDyC,EAApBU,EAAK,KAAK,GAAA,CAAA;AAAA,cAClCA,EAAK,QAAjBlE,EAAA,GAAAC,EAAuE,QAAvEwD,IAAuED,EAAnBU,EAAK,IAAI,GAAA,CAAA;;YAE/D/D,EAAmCC,EAAA,QAAA,UAAA,EAAd,MAAA8D,GAAU;AAAA,UAAA,gBAEjCjE,EAA4C+D,GAAA,EAAA,KAAA,KAAA;AAAA,YAAxBT,EAAAC,EAAAU,EAAK,KAAK,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;;;;ACVtC,UAAMzC,IAAQ1B,GASR2B,IAAQnB,iBAA+B,GACvCgO,IAAM7O,EAAO,SAAS,GAEtB8O,IAAY,CAAC3D,MAAe,MAAM,QAAQnJ,EAAM,KAAK,IAAIA,EAAM,MAAM,SAASmJ,CAAC,IAAInJ,EAAM,UAAUmJ;AAGzG,aAAS4D,EAAO5D,GAAW;AACzB,UAAI,CAACpJ,EAAM,UAAU;AACnB,QAAAC,EAAM,QAAQmJ;AACd;AAAA,MACF;AACA,YAAM6D,IAAO,MAAM,QAAQhN,EAAM,KAAK,IAAIA,EAAM,QAAQ,CAAA;AACxD,MAAAA,EAAM,QAAQgN,EAAK,SAAS7D,CAAC,IAAI6D,EAAK,OAAO,CAACC,MAAMA,MAAM9D,CAAC,IAAI,CAAC,GAAG6D,GAAM7D,CAAC;AAAA,IAC5E;2BAIE5K,EAMM,OAAA;AAAA,MANA,OAAKI,EAAA,CAAA,kBAAqBN,EAAA,SAAI,QAAA,sBAAmCA,EAAA,UAAM,wBAAA,CAAA;AAAA,MAAgC,MAAMA,EAAA,WAAQ,UAAA;AAAA,MAA4B,cAAYA,EAAA;AAAA,IAAA;cACjKE,EAIQ+D,GAAA,MAAAC,EAJgBlE,EAAA,SAAO,CAAjB8I,YAAd5I,EAIQ,SAAA;AAAA,QAJ0B,KAAK4I,EAAO;AAAA,QAAO,OAAM;AAAA,MAAA;QACzDhI,EAAyL,SAAA;AAAA,UAAjL,MAAMd,EAAA,WAAQ,aAAA;AAAA,UAA0B,MAAMA,EAAA,QAAQa,EAAA2N,CAAA;AAAA,UAAM,OAAO1F,EAAO;AAAA,UAAQ,SAAS2F,EAAU3F,EAAO,KAAK;AAAA,UAAI,UAAUA,EAAO;AAAA,UAAW,UAAM,CAAA1G,MAAEsM,EAAO5F,EAAO,KAAK;AAAA,QAAA;QAAKtF,EAAA,MACzLC,EAAGqF,EAAO,KAAK,IAAG,KAClB,CAAA;AAAA,QAAYA,EAAO,SAAK,QAAxB7I,EAAA,GAAAC,EAAwF,QAAxFc,IAAwFyC,EAAtBqF,EAAO,KAAK,GAAA,CAAA;;;;;;;;;;;;;;;ACzCpF,UAAMvI,IAAOC,EAAoBR,GAAC,MAA0B;AAE5D,aAASW,EAASC,GAAU;AAC1B,MAAAL,EAAK,QAASK,EAAE,OAA8B;AAAA,IAChD;2BAIEV,EAMU,WAAA;AAAA,MANA,4BAA0BF,EAAA,SAAK,uBAAA,CAAA;AAAA,MAA+B,MAAMO,EAAA;AAAA,MAAO,UAAAI;AAAA,IAAA;MACnFG,EAGU,WAAA,MAAA;AAAA,QAFRV,EAAoBC,EAAA,QAAA,MAAA;AAAA,QACpBS,EAA+E,QAA/EC,IAA+E;AAAA,UAA5CX,EAAqCC,uBAArC,MAAqC;AAAA,gBAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;;MAEhEc,EAAkD,OAAlDE,IAAkD;AAAA,QAAdZ,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;ACVhD,UAAMsB,IAAQnB,EAAmBR,GAAA,YAAuB;sBAItDC,EAAA,GAAAC,EAGM,OAHNC,IAGM;AAAA,QAFJW,EAAgE,SAAA;AAAA,sDAAhDa,EAAK,QAAAS;AAAA,QAAE,MAAK;AAAA,QAAS,cAAYpC,EAAA;AAAA,MAAA;aAAjC2B,EAAA,KAAK;AAAA,MAAA;QACrBb,EAA+E,SAAA;AAAA,sDAA/Da,EAAK,QAAAS;AAAA,QAAE,OAAM;AAAA,QAAW,MAAK;AAAA,QAAQ,cAAYpC,EAAA;AAAA,MAAA;aAAjD2B,EAAA,KAAK;AAAA,MAAA;;;;;;;;;;;;;;;;;ACQzB,UAAMA,IAAQnB,EAAmBR,GAAA,YAAC,GAC5BwO,IAAM7O,EAAO,UAAU;2BAI3BO,EAMW,YAAA;AAAA,MANA,OAAKI,EAAA,CAAA,mBAAsBN,EAAA,QAAI,yBAA6BA,EAAA,SAAI,QAAA,qBAAA,CAAA;AAAA,MAAqC,MAAK;AAAA,MAAc,cAAYA,EAAA;AAAA,IAAA;cAC7IE,EAIQ+D,GAAA,MAAAC,EAJgBlE,EAAA,SAAO,CAAjB8I,YAAd5I,EAIQ,SAAA;AAAA,QAJ0B,KAAK4I,EAAO;AAAA,QAAO,OAAM;AAAA,QAA0B,OAAKxE,EAAA,EAAA,eAAmBwE,EAAO,OAAK;AAAA,MAAA;UACvHhI,EAA4G,SAAA;AAAA,wDAA5Fa,EAAK,QAAAS;AAAA,UAAE,MAAK;AAAA,UAAS,MAAMpC,EAAA,QAAQa,EAAA2N,CAAA;AAAA,UAAM,OAAO1F,EAAO;AAAA,UAAQ,UAAUA,EAAO;AAAA,QAAA;eAAhFnH,EAAA,KAAK;AAAA,QAAA;wBACrBb,EAA4C,QAAA,EAAtC,OAAM,yBAAA,GAAwB,MAAA,EAAA;AAAA,QACpCA,EAA4D,QAA5DE,IAA4DyC,EAAtBqF,EAAO,KAAK,GAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACZxD,UAAMpH,IAAQ1B,GASR4C,IAAOC,GACPgM,IAAQrO,EAAmBR,GAAC,OAAwB,GAEpD8O,IAAWzN,EAAS,MAAM;AAC9B,YAAM0N,IAAIF,EAAM,MAAM,KAAA,EAAO,YAAA;AAC7B,aAAOE,IAAIrN,EAAM,MAAM,OAAO,CAACwD,MAAMA,EAAE,MAAM,YAAA,EAAc,SAAS6J,CAAC,CAAC,IAAIrN,EAAM;AAAA,IAClF,CAAC,GAEKsN,IAAW3N,EAAS,MAAM;AAC9B,YAAM4N,IAAkB,CAAA,GAClBC,wBAAU,IAAA;AAChB,iBAAW/K,KAAQ2K,EAAS,OAAO;AACjC,cAAM/K,IAAMI,EAAK,SAAS;AAC1B,QAAK+K,EAAI,IAAInL,CAAG,MACdmL,EAAI,IAAInL,GAAK,EAAE,GACfkL,EAAM,KAAKlL,CAAG,IAEhBmL,EAAI,IAAInL,CAAG,EAAG,KAAKI,CAAI;AAAA,MACzB;AACA,aAAO8K,EAAM,IAAI,CAAClL,OAAS,EAAE,OAAOA,GAAK,OAAOmL,EAAI,IAAInL,CAAG,EAAA,EAAK;AAAA,IAClE,CAAC,GAEKoL,IAAO9N,EAAS,MAAM2N,EAAS,MAAM,QAAQ,CAAClC,MAAMA,EAAE,KAAK,CAAC,GAC5DsC,IAAStM,EAAI,CAAC;AAEpB,aAASuM,EAAaC,IAAO,GAAGrH,IAAO,GAAG;AACxC,YAAM0G,IAAOQ,EAAK;AAClB,eAASjK,IAAIoK,GAAMpK,KAAK,KAAKA,IAAIyJ,EAAK,QAAQzJ,KAAK+C,OAAU,CAAC0G,EAAKzJ,CAAC,EAAE,SAAU,QAAOA;AACvF,aAAO;AAAA,IACT;AAEA,IAAAzC,GAAM0M,GAAM,MAAM;AAChB,MAAAC,EAAO,QAAQ,KAAK,IAAIC,EAAA,GAAgB,CAAC;AAAA,IAC3C,CAAC;AAED,aAASE,EAAKtH,GAAc;AAC1B,YAAMI,IAAOgH,EAAaD,EAAO,QAAQnH,GAAMA,CAAI;AACnD,MAAII,MAAS,OAAI+G,EAAO,QAAQ/G;AAAA,IAClC;AAEA,aAASmH,EAAOrL,GAAmB;AACjC,MAAKA,EAAK,YAAUvB,EAAK,UAAUuB,CAAI;AAAA,IACzC;AAEA,aAASoK,EAAU3N,GAAkB;AACnC,UAAIA,EAAE,QAAQ;AACZ,QAAAA,EAAE,eAAA,GACF2O,EAAK,CAAC;AAAA,eACG3O,EAAE,QAAQ;AACnB,QAAAA,EAAE,eAAA,GACF2O,EAAK,EAAE;AAAA,eACE3O,EAAE,QAAQ,SAAS;AAC5B,cAAMuD,IAAOgL,EAAK,MAAMC,EAAO,KAAK;AACpC,QAAIjL,MACFvD,EAAE,eAAA,GACF4O,EAAOrL,CAAI;AAAA,MAEf;AAAA,IACF;sBAIElE,EAAA,GAAAC,EA6BM,OA7BNC,IA6BM;AAAA,QA5BJW,EAOE,SAAA;AAAA,sDANS+N,EAAK,QAAAzM;AAAA,QACd,OAAM;AAAA,QACN,MAAK;AAAA,QACJ,aAAapC,EAAA;AAAA,QACb,cAAYA,EAAA;AAAA,QACZ,WAAAuO;AAAA,MAAA;aALQM,EAAA,KAAK;AAAA,MAAA;MAOhB/N,EAkBK,MAlBLE,IAkBK;AAAA,SAjBHf,EAAA,EAAA,GAAAC,EAgBW+D,GAAA,MAAAC,EAhBsB8K,EAAA,OAAQ,CAAvBS,GAAS3C;eAAsB2C,EAAQ,QAAQ3C;AAAA,QAAA;UACrDA,IAAC,KAAX7M,EAAA,GAAAC,EAAoE,MAApEwD,EAAoE;UAC1D+L,EAAQ,SAAlBxP,EAAA,GAAAC,EAAoG,MAApG6E,IAAoGtB,EAArBgM,EAAQ,KAAK,GAAA,CAAA;WAC5FxP,EAAA,EAAA,GAAAC,EAYK+D,GAAA,MAAAC,EAXYuL,EAAQ,QAAhBtL,YADTjE,EAYK,MAAA;AAAA,YAVF,KAAKiE,EAAK,SAASA,EAAK;AAAA,YACzB,OAAM;AAAA,YACN,MAAK;AAAA,YACJ,iBAAegL,EAAA,MAAKC,OAAM,MAAMjL,aAAgB;AAAA,YAChD,iBAAeA,EAAK,oBAAoB;AAAA,YACxC,SAAK,CAAA/B,OAAEoN,EAAOrL,CAAI;AAAA,YAClB,aAAS,CAAA/B,OAAA,CAAG+B,EAAK,aAAaiL,EAAA,QAASD,EAAA,MAAK,QAAQhL,CAAI;AAAA,UAAA;gBAEtDA,EAAK,KAAK,IAAG,KAChB,CAAA;AAAA,YAAYA,EAAK,YAAjBlE,EAAA,GAAAC,EAAiF,QAAjF+E,IAAiFxB,EAAvBU,EAAK,QAAQ,GAAA,CAAA;;;;MAI7ErD,EAA6E,OAAA;AAAA,QAAxE,OAAM;AAAA,QAAoB,QAAQqO,EAAA,MAAK,SAAM;AAAA,MAAA,KAASnP,EAAA,SAAS,GAAA,GAAA0P,EAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACvGxE,UAAMhO,IAAQ1B,GAaR4C,IAAOC,GACPtC,IAAOC,EAAoBR,GAAC,MAA0B,GACtDsC,IAAKQ,EAA8B,IAAI,GACvC,EAAE,SAAAH,EAAA,IAAYN,GAAU9B,GAAM+B,CAAE,GAChCS,IAAUpD,EAAO,yBAAyB,GAC1CqD,IAAS,GAAGD,CAAO,SACnBE,IAAS,EAAE,SAAS,KAAK,OAAO,KAAK,SAAS,KAAK,MAAM,KAAK,UAAU,IAAA;AAG9E,aAAS0M,EAAKlJ,GAAyC;AACrD,MAAyB7D,EAArB6D,MAAU,YAAgB,YACrBA,MAAU,WAAe,WACxB,SAF6B,GAGvClG,EAAK,QAAQ;AAAA,IACf;AACA,UAAMqP,IAAc,MAAMlO,EAAM,SAAS;2BAIvCxB,EAkBS,UAAA;AAAA,eAlBG;AAAA,MAAJ,KAAIoC;AAAA,MAAK,OAAM;AAAA,MAAW,UAAS;AAAA,MAAO,mBAAiBzB,EAAAkC,CAAA;AAAA,MAAU,oBAAkBC;AAAA,MAAS,SAAKM,EAAA,CAAA,MAAAA,EAAA,CAAA;AAAA,gBAAEzC,EAAA8B,CAAA,KAAA9B,EAAA8B,CAAA,EAAA,GAAAY,CAAA;AAAA,IAAA;MAC7GzC,EAgBM,OAAA;AAAA,QAhBA,qEAAmEd,EAAA,IAAI,IAAA,0BAAA,CAAA;AAAA,MAAA;QAC3Ec,EAA+G,UAAA;AAAA,UAAvG,OAAM;AAAA,UAAwB,MAAK;AAAA,UAAU,cAAYd,EAAA;AAAA,UAAa,gCAAO2P,EAAI,QAAA;AAAA,QAAA,GAAY,KAAC,GAAA5O,EAAA;AAAA,QACtGD,EAAwG,QAAxGE,IAAwG;AAAA,UAAlDZ,EAA2CC,sBAA3C,MAA2C;AAAA,YAAtBmD,EAAAC,EAAAR,EAAOjD,EAAA,IAAI,CAAA,GAAA,CAAA;AAAA,UAAA;;QACtFc,EAAmF,MAAA;AAAA,UAA9E,IAAID,EAAAkC,CAAA;AAAA,UAAS,OAAM;AAAA,QAAA;UAAiB3C,EAAqCC,uBAArC,MAAqC;AAAA,gBAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;QACpEc,EAWO,QAAA;AAAA,UAXD,OAAM;AAAA,UAAwB,oCAAgB6O,EAAI,SAAA,GAAA,CAAA,SAAA,CAAA;AAAA,QAAA;UACtD7O,EAAwE,OAAA;AAAA,YAAlE,IAAIkC;AAAA,YAAQ,OAAM;AAAA,UAAA;YAAgB5C,EAA0BC,yBAA1B,MAA0B;AAAA,kBAAjBL,EAAA,OAAO,GAAA,CAAA;AAAA,YAAA;;UAC3CA,EAAA,eAAbC,EAAA,GAAAC,EAGQ,SAHR6E,IAGQ;AAAA,YAFNjE,EAA2D,QAAA,MAAA;AAAA,gCAArD,SAAK,EAAA;AAAA,cAAAA,EAA8B,gBAArBd,EAAA,WAAW,GAAA,CAAA;AAAA,gCAAU,eAAW,EAAA;AAAA,YAAA;YACpDc,EAA4F,SAAA;AAAA,cAArF,OAAM;AAAA,cAAW,MAAK;AAAA,cAAW,SAASd,EAAA;AAAA,cAAa,UAAA;AAAA,cAAS,cAAa;AAAA,YAAA;;UAEtFc,EAIM,OAJNmE,IAIM;AAAA,YAHUjF,EAAA,qBAAdE,EAAmJ,UAAA;AAAA;cAAvH,OAAM;AAAA,cAA+C,MAAK;AAAA,cAAU,gCAAOyP,EAAI,SAAA;AAAA,YAAA,KAAgB3P,EAAA,YAAY,GAAA,CAAA;YACvIc,EAAuG,UAAA;AAAA,cAA/F,OAAM;AAAA,cAAyB,MAAK;AAAA,cAAU,gCAAO6O,EAAI,QAAA;AAAA,YAAA,KAAe3P,EAAA,WAAW,GAAA,CAAA;AAAA,YAC3Fc,EAAwJ,UAAA;AAAA,cAA/I,oBAAkB8O,OAAW,uBAAA,yBAAA,CAAA;AAAA,cAAyD,MAAK;AAAA,cAAS,OAAM;AAAA,YAAA,KAAa5P,EAAA,YAAY,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzCtJ,UAAM0B,IAAQ1B,GAiCR4C,IAAOC,GAEPwE,IAAMvE,EAAwB,IAAI,GAElC+M,IAAO,MAA4B;AACvC,UAAI;AAAE,eAAO,KAAK,MAAM,aAAa,QAAQnO,EAAM,UAAU,KAAK,MAAM;AAAA,MAAE,QAAQ;AAAE,eAAO;AAAA,MAAK;AAAA,IAClG,GACMoO,IAAS,MAAM,MAAM,KAAKzI,EAAI,OAAO,iBAAmC,aAAa,KAAK,EAAE;AAClG,aAAS0I,EAAKC,GAAuB;AACnC,eAAS,cAAc,IAAI,YAAY,cAAc,EAAE,QAAQA,EAAA,CAAQ,CAAC,GACxEpN,EAAK,WAAWoN,CAAM;AAAA,IACxB;AAEA,aAASC,EAAOrP,GAAU;AACxB,UAAI,CAAEA,EAAE,QAA2B,UAAU,wBAAwB,EAAG;AACxE,YAAMoP,IAASH,EAAA;AACf,iBAAW3K,KAAK4K,IAAU,CAAK5K,EAAE,aAAUA,EAAE,UAAU,CAAC,CAAC8K,IAAS9K,EAAE,IAAI;AACxE,MAAAmC,EAAI,OAAO,cAAA;AAAA,IACb;AACA,aAASmI,EAAO5O,GAAe;AAC7B,YAAMsP,IAAQtP,EAAE,OAAuB,QAAqB,mBAAmB,GAAG,QAAQ;AAC1F,UAAI,CAACsP,EAAM;AACX,YAAMF,IAAwB,EAAE,WAAW,IAAM,OAAM,oBAAI,QAAO,cAAY;AAC9E,iBAAW9K,KAAK4K,EAAA,EAAU,CAAK5K,EAAE,aAAU8K,EAAO9K,EAAE,IAAI,IAAIgL,MAAS,SAAUA,MAAS,cAAchL,EAAE;AACxG,UAAI;AAAE,qBAAa,QAAQxD,EAAM,YAAY,KAAK,UAAUsO,CAAM,CAAC;AAAA,MAAE,QAAQ;AAAA,MAAwB;AACrG,MAAA3I,EAAI,OAAO,cAAA,GACX0I,EAAKC,CAAM;AAAA,IACb;AACA,WAAAtN,GAAU,MAAM;AACd,YAAMyN,IAASN,EAAA;AACf,MAAIM,MAAaA,CAAM,IACbzO,EAAM,UAAQ2F,EAAI,OAAO,cAAA,GACnC,SAAS,iBAAiB,SAAS4I,CAAM;AAAA,IAC3C,CAAC,GACDG,GAAgB,MAAM,SAAS,oBAAoB,SAASH,CAAM,CAAC;MAInDjQ,EAAA,kBAAdE,EAA8H,UAA9HC,IAA8HsD,EAArBzD,EAAA,SAAS,GAAA,CAAA;MAClHc,EA2BQ,SA3BRmB,EA2BQ;AAAA,QA1BL,IAAIjC,EAAA;AAAA,iBACD;AAAA,QAAJ,KAAIqH;AAAA,MAAA,GACIgJ,EAAAA,QAAM;AAAA,QACb,6BAA6BrQ,EAAA,OAAG,wBAAA;AAAA,QACjC,SAAQ;AAAA,QACP,0BAAwBA,EAAA,SAAM,KAAQ;AAAA,QACtC,sBAAoBA,EAAA,EAAE;AAAA,QACtB,SAAOwP;AAAA,MAAA;QAER1O,EAAmH,MAAA;AAAA,UAA9G,OAAOd,EAAA,EAAE;AAAA,UAAU,OAAM;AAAA,QAAA;UAA2BsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAxC,EAAyC,QAAA,EAAnC,eAAY,OAAA,GAAO,MAAS,EAAA;AAAA,UAAO0C,EAAA,QAAIxD,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;QAC3Gc,EAEI,KAFJ4C,IAEI;AAAA,UADFtD,EAAoLC,sBAApL,MAAoL;AAAA,8BAAlK,uHAAmH,EAAA;AAAA,YAAAS,EAAuC,KAAA,EAAnC,MAAMd,EAAA,cAAY,iBAAa,GAAA+E,EAAA;AAAA,8BAAI,KAAC,EAAA;AAAA,UAAA;;QAE/KjE,EAOU,WAPVkE,IAOU;AAAA,UANRlE,EAAuC,mBAA3Bd,EAAA,cAAc,GAAA,CAAA;AAAA,kBAC1BE,EAIM+D,GAAA,MAAAC,EAJWlE,EAAA,YAAU,CAAfsQ,YAAZpQ,EAIM,OAAA;AAAA,YAJwB,KAAKoQ,EAAE;AAAA,YAAM,OAAM;AAAA,UAAA;YAC/CxP,EAAmE,QAAnEmE,IAAmExB,EAAjB6M,EAAE,KAAK,GAAA,CAAA;AAAA,YAC7CA,EAAE,QAAdrQ,EAAA,GAAAC,EAAgF,QAAhFwP,IAAgFjM,EAAhB6M,EAAE,IAAI,GAAA,CAAA;YACtExP,EAA4M,SAA5MyP,IAA4M;AAAA,cAAnLzP,EAAsI,SAAA;AAAA,gBAA/H,MAAK;AAAA,gBAAW,MAAK;AAAA,gBAAU,MAAMwP,EAAE;AAAA,gBAAO,SAASA,EAAE;AAAA,gBAAW,UAAUA,EAAE;AAAA,gBAAW,cAAU,GAAKA,EAAE,KAAK;AAAA,cAAA;8BAAcxP,EAAqC,QAAA,EAA/B,OAAM,qBAAiB,MAAA,EAAA;AAAA,YAAA;;;QAGhMA,EAIM,OAJN0P,IAIM;AAAA,UAHJ1P,EAA8G,UAA9GqN,IAA8G1K,EAA1BzD,EAAA,cAAc,GAAA,CAAA;AAAA,UAClGc,EAA8G,UAA9GsN,IAA8G3K,EAAzBzD,EAAA,aAAa,GAAA,CAAA;AAAA,UAClGc,EAAkF,UAAlFuN,IAAkF5K,EAApBzD,EAAA,QAAQ,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;AC5G5E,UAAM0B,IAAQ1B,GAQR4C,IAAOC,GAEP4N,IAAS3N,EAAI,EAAK;AACxB,QAAI4N;AAEJ,mBAAeC,IAAO;AACpB,YAAM,UAAU,UAAU,UAAUjP,EAAM,KAAK,GAC/C+O,EAAO,QAAQ,IACf7N,EAAK,QAAQlB,EAAM,KAAK,GACxB,aAAagP,CAAK,GAClBA,IAAQ,WAAW,MAAOD,EAAO,QAAQ,IAAQ,GAAI;AAAA,IACvD;AAEA,WAAAL,GAAgB,MAAM,aAAaM,CAAK,CAAC,cAIvCzQ,EAAA,GAAAC,EAGM,OAHNC,IAGM;AAAA,MAFJW,EAA6F,SAAA;AAAA,QAAtF,OAAM;AAAA,QAAsB,MAAK;AAAA,QAAO,UAAA;AAAA,QAAU,OAAOd,EAAA;AAAA,QAAQ,cAAYA,EAAA;AAAA,MAAA;MACpFc,EAAuH,UAAA;AAAA,QAA9G,kCAAgC2P,EAAA,SAAM,WAAA,CAAA;AAAA,QAAkB,MAAK;AAAA,QAAU,SAAOE;AAAA,MAAA,KAAS3Q,EAAA,WAAW,GAAA,CAAA;AAAA,IAAA;;;;;;;;;;AC9B/G,UAAM0B,IAAQ1B,GACR4Q,IAAQvP,EAAS,MAAM;AAC3B,YAAMyL,IAA4B,EAAE,mBAAmB,OAAOpL,EAAM,EAAE,EAAA;AACtE,aAAIA,EAAM,WAAQoL,EAAE,qBAAqB,IAAI,IAAIpL,EAAM,MAAM,MACtDoL;AAAA,IACT,CAAC;2BAIC5M,EAAyF,UAAA;AAAA,MAAhF,wBAAsBF,EAAA,UAAM,qBAAA,CAAA;AAAA,MAA6B,SAAO4Q,EAAA,KAAK;AAAA,IAAA;;;ACLzE,SAASC,GAAUlN,GAASmN,GAAM;AACvC,MAAIA,IAAO,EAAG,QAAO;AACrB,MAAIA,MAAS,EAAG,QAAO,CAAC,CAAC;AACzB,QAAMC,IAAQ,CAAA;AACd,WAAS7L,IAAI,KAAK,IAAI,GAAGvB,IAAU,CAAC,GAAGuB,KAAK,KAAK,IAAI4L,IAAO,GAAGnN,IAAU,CAAC,GAAGuB,IAAK,CAAA6L,EAAM,KAAK7L,CAAC;AAC9F,QAAMU,IAAM,CAAC,CAAC;AACd,EAAImL,EAAM,UAAUA,EAAM,CAAC,IAAI,KAAGnL,EAAI,KAAK,GAAG;AAC9C,aAAW6G,KAAKsE,EAAO,CAAAnL,EAAI,KAAK6G,CAAC;AACjC,SAAIsE,EAAM,UAAUA,EAAMA,EAAM,SAAS,CAAC,IAAID,IAAO,KAAGlL,EAAI,KAAK,GAAG,GAChEkL,IAAO,KAAGlL,EAAI,KAAKkL,CAAI,GACpBlL;AACT;AAGO,SAASoL,GAAc9D,GAAG+D,GAAGC,GAAS;AAC3C,MAAIA,GAAS;AACX,UAAM,IAAI,CAACpG,MAAM,OAAO,OAAOA,KAAK,EAAE,EAAE,QAAQ,OAAO,EAAE,EAAE,QAAQ,KAAK,GAAG,CAAC,GACtEqG,IAAK,EAAEjE,CAAC,GACRkE,IAAK,EAAEH,CAAC;AACd,QAAI,OAAO,SAASE,CAAE,KAAK,OAAO,SAASC,CAAE,EAAG,QAAOD,IAAKC;AAAA,EAC9D;AACA,SAAO,OAAOlE,KAAK,EAAE,EAAE,cAAc,OAAO+D,KAAK,EAAE,GAAG,QAAW,EAAE,SAAS,IAAM,aAAa,OAAM,CAAE;AACzG;AAGA,SAASI,GAASxJ,GAAO;AACvB,QAAMiF,IAAI,OAAOjF,KAAS,EAAE;AAC5B,SAAO,SAAS,KAAKiF,CAAC,IAAI,IAAIA,EAAE,WAAW,KAAK,IAAI,CAAC,MAAMA;AAC7D;AAGO,SAASwE,GAAMC,GAAS5E,GAAM;AACnC,SAAO,CAAC4E,GAAS,GAAG5E,CAAI,EAAE,IAAI,CAAC6E,MAASA,EAAK,IAAIH,EAAQ,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK;AAAA,CAAI;AACjF;AAMO,SAASI,GAAUC,GAAQC,GAAQvK,GAAMyH,GAAO;AACrD,QAAM+C,IAAQF,KAAU;AAGxB,SAFIC,MAAW,YAAYC,MAAU,YACjCD,MAAW,aAAaC,MAAU,aAClCD,MAAW,cAAcC,MAAU,aAAmB,KACrD/C,IACE,OAAOzH,CAAI,EAAE,YAAW,EAAG,SAASyH,CAAK,IAD7B;AAErB;AAEA,MAAMgD,KAAW,oBAAI,WACfC,KAAW,oBAAI,IAAI,CAAC,UAAU,SAAS,SAAS,CAAC;AAEvD,SAASC,GAAU3I,GAAI3I,GAAM;AAC3B,MAAI;AACF,WAAO,KAAK,MAAM,aAAa,QAAQ,iBAAiB2I,CAAE,IAAI3I,CAAI,EAAE,KAAK,MAAM;AAAA,EACjF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAASuR,GAAW5I,GAAI3I,GAAMoH,GAAO;AACnC,MAAI;AACF,iBAAa,QAAQ,iBAAiBuB,CAAE,IAAI3I,CAAI,IAAI,KAAK,UAAUoH,CAAK,CAAC;AAAA,EAC3E,QAAQ;AAAA,EAER;AACF;AAEA,SAASoK,GAASC,GAAU9K,GAAM;AAChC,QAAMF,IAAM,IAAI,gBAAgB,IAAI,KAAK,CAACE,CAAI,GAAG,EAAE,MAAM,yBAAwB,CAAE,CAAC,GAC9EpD,IAAO,SAAS,cAAc,GAAG;AACvC,EAAAA,EAAK,OAAOkD,GACZlD,EAAK,WAAWkO,GAChBlO,EAAK,MAAK,GACV,IAAI,gBAAgBkD,CAAG;AACzB;AAGO,SAASiL,GAAc/Q,GAAM;AAClC,MAAI,CAACA,EAAM;AACX,QAAMgR,IAAOP,GAAS,IAAIzQ,CAAI;AAC9B,MAAIgR,GAAM;AACR,IAAAA,EAAK,MAAK;AACV;AAAA,EACF;AAEA,QAAMC,IAAQjR,EAAK,cAAc,OAAO,GAClCkR,IAAQD,GAAO,QAAQ,CAAC;AAC9B,MAAI,CAACA,KAAS,CAACC,EAAO;AAEtB,QAAMlJ,IAAKhI,EAAK,MAAM,cAChBmR,IAASnR,EAAK,cAAc,uBAAuB,GACnDoR,IAAUpR,EAAK,cAAc,mBAAmB,GAChDqR,IAAQrR,EAAK,cAAc,iBAAiB,GAC5CsR,IAAatR,EAAK,cAAc,qBAAqB,GACrDuR,IAAYvR,EAAK,cAAc,sBAAsB,GACrDwR,IAAOxR,EAAK,cAAc,qBAAqB,GAC/CyM,IAAQzM,EAAK,cAAc,0BAA0B,GACrDyR,IAAQzR,EAAK,cAAc,sBAAsB,GACjD0R,IAAc1R,EAAK,cAAc,wBAAwB,GACzD2R,IAAQ3R,EAAK,cAAc,sBAAsB,KAAKiR,EAAM,eAC5DW,IAAO5R,EAAK,QAAQ,WAAW;AAErC,MAAIyN,IAAQ,IACR8C,IAASvQ,EAAK,cAAc,uCAAuC,GAAG,QAAQ,aAC5EA,EAAK,cAAc,kBAAkB,IAAI,WAAW;AAG1D,QAAM6R,KAAa,oBAAI;AACvB,EAAA7R,EAAK,iBAAiB,4BAA4B,EAAE,QAAQ,CAAC8R,MAAQD,GAAW,IAAIC,EAAI,QAAQ,aAAaA,EAAI,KAAK,CAAC,GACvH9R,EAAK,iBAAiB,4CAA4C,EAAE,QAAQ,CAAC+R,MAAQF,GAAW,IAAIE,EAAI,QAAQ,aAAaA,EAAI,QAAQ,WAAW,EAAE,CAAC;AAEvJ,QAAMC,KAAW,CAAC,GAAGf,EAAM,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAACgB,MAAOA,EAAG,QAAQ,SAASA,EAAG,aAAa,WAAW,CAAC;AAC7G,MAAIC,KAAUF,KAAWA,GAAS,QAAQ,QAAQ,IAC9CG,KAAUH,IAAU,aAAa,WAAW,MAAM,eAAe,SAAS,OAC1EI,IAAO,GACPC,KAAW,OAAOf,GAAY,SAAStR,EAAK,QAAQ,YAAY,EAAE;AACtE,QAAMsS,IAAW,oBAAI,OAGfC,KAAY5B,GAAU3I,GAAI,UAAU;AAC1C,EAAIuK,MAAajB,GAAY,cAAc,iBAAiBiB,EAAS,IAAI,MACvEjB,EAAW,QAAQ,OAAOiB,EAAS,GACnCF,KAAW,OAAOE,EAAS,IAEzB5B,GAAU3I,GAAI,SAAS,MAAM,aAAWhI,EAAK,UAAU,IAAI,wBAAwB,GACnF2Q,GAAU3I,GAAI,MAAM,MAAM,UAAQhI,EAAK,UAAU,IAAI,qBAAqB;AAC9E,QAAMwS,KAAY7B,GAAU3I,GAAI,MAAM,KAAK,CAAA;AAC3C,EAAAhI,EAAK,iBAAiB,YAAY,EAAE,QAAQ,CAACiG,MAAQ;AACnD,IAAI,CAACA,EAAI,YAAYuM,GAAUvM,EAAI,QAAQ,GAAG,KAAK,SAAMA,EAAI,UAAUuM,GAAUvM,EAAI,QAAQ,GAAG;AAAA,EAClG,CAAC;AAED,QAAMsF,IAAO,MAAM,CAAC,GAAG2F,EAAM,iBAAiB,eAAe,CAAC,GAKxDuB,KAAc,CAACC,MAAQ;AAC3B,IAAAA,EAAI,iBAAiB,oBAAoB,EAAE,QAAQ,CAACC,MAAS;AAC3D,UAAIA,EAAK,YAAY,cAAc,KAAK,EAAG;AAC3C,YAAMtT,IAAOsT,EAAK,aAAa,MAAM;AACrC,MAAAA,EAAK,gBAAgB,MAAM,GAC3BA,EAAK,aAAa,QAAQtT,CAAI;AAAA,IAChC,CAAC;AAAA,EACH,GACMuT,KAAU,CAACF,MAAQ;AACvB,QAAIxB,EAAM,qBAAqBwB,GAC/B;AAAA,UAAI,OAAOxB,EAAM,cAAe,YAAY;AAAE,QAAAA,EAAM,WAAWwB,GAAK,IAAI;AAAG;AAAA,MAAQ;AACnF,MAAAxB,EAAM,OAAOwB,CAAG,GAChBD,GAAYC,CAAG;AAAA;AAAA,EACjB,GACMG,KAAS,CAACH,MAAQ,CAAC,GAAGA,EAAI,KAAK,EAClC,OAAO,CAACI,MAAOA,EAAG,QAAQ,SAAS,CAACpC,GAAS,IAAIoC,EAAG,QAAQ,KAAK,CAAC,EAClE,IAAI,CAACA,MAAOA,EAAG,QAAQ,WAAWA,EAAG,WAAW,EAChD,KAAK,GAAG,GACLC,KAAU,CAACL,GAAK/P,MAAQ;AAC5B,UAAMmQ,IAAK,CAAC,GAAGJ,EAAI,KAAK,EAAE,KAAK,CAACM,MAASA,EAAK,QAAQ,UAAUrQ,CAAG;AACnE,WAAOmQ,IAAMA,EAAG,QAAQ,WAAWA,EAAG,YAAY,KAAI,IAAM;AAAA,EAC9D,GACMG,KAAgB,CAACP,MAAQ,CAAC,GAAGb,EAAU,EAAE,MAAM,CAAC,CAAClP,GAAKuQ,CAAI,MAAM,CAACA,KAAQH,GAAQL,GAAK/P,CAAG,MAAMuQ,CAAI,GACnGC,KAAU,MAAM5H,EAAI,EAAG,OAAO,CAACmH,MAAQrC,GAAUqC,EAAI,QAAQ,UAAUnC,GAAQsC,GAAOH,CAAG,GAAGjF,CAAK,KAAKwF,GAAcP,CAAG,CAAC;AAE9H,WAASU,KAAc;AACrB,eAAWV,KAAOnH,KAAQ;AACxB,YAAM8H,IAAKf,EAAS,IAAII,EAAI,QAAQ,KAAK;AACzC,MAAAA,EAAI,aAAa,iBAAiBW,IAAK,SAAS,OAAO;AACvD,YAAMpN,IAAMyM,EAAI,cAAc,kBAAkB;AAChD,MAAIzM,MAAKA,EAAI,UAAUoN;AAAA,IACzB;AACA,UAAMC,IAAOH,GAAO,EAAG,IAAI,CAACT,MAAQA,EAAI,QAAQ,KAAK,GAC/CxM,IAASoN,EAAK,OAAO,CAAC3Q,MAAQ2P,EAAS,IAAI3P,CAAG,CAAC,EAAE;AACvD,IAAI4O,MACFA,EAAU,UAAU+B,EAAK,SAAS,KAAKpN,MAAWoN,EAAK,QACvD/B,EAAU,gBAAgBrL,IAAS,KAAKA,IAASoN,EAAK,SAEpD7G,MAAOA,EAAM,cAAc6F,EAAS,SAAS,IAAI,eAAe,GAAGA,EAAS,IAAI,cAChFd,MAAMA,EAAK,SAASc,EAAS,SAAS;AAAA,EAC5C;AAEA,WAASiB,GAAYhR,GAASmN,GAAM;AAGlC,QAFI,CAAC2B,MACLA,EAAM,gBAAe,GACjB3B,KAAQ,GAAG;AACf,UAAM8D,IAAM,CAACpJ,GAAOqJ,GAAQC,MAAU;AACpC,YAAMxO,IAAS,SAAS,cAAc,QAAQ;AAC9C,MAAAA,EAAO,OAAO,UACdA,EAAO,YAAY,sBACnBA,EAAO,cAAckF,GACrBlF,EAAO,QAAQ,SAAS,OAAOuO,CAAM,GACjCC,GAAO,WAASxO,EAAO,aAAa,gBAAgB,MAAM,GAC1DwO,GAAO,aAAUxO,EAAO,WAAW,KACnCwO,GAAO,SAAOxO,EAAO,aAAa,cAAcwO,EAAM,KAAK,GAC/DrC,EAAM,OAAOnM,CAAM;AAAA,IACrB;AACA,IAAAsO,EAAI,KAAK,GAAG,EAAE,UAAUjR,MAAY,GAAG,OAAO,aAAY,CAAE,GAC5DiR,EAAI,KAAKjR,IAAU,GAAG,EAAE,UAAUA,MAAY,GAAG,OAAO,gBAAe,CAAE;AACzE,eAAWQ,KAAQ0M,GAAUlN,GAASmN,CAAI;AACxC,UAAI3M,MAAS,KAAK;AAChB,cAAM4Q,IAAO,SAAS,cAAc,MAAM;AAC1C,QAAAA,EAAK,YAAY,0BACjBA,EAAK,cAAc,KACnBtC,EAAM,OAAOsC,CAAI;AAAA,MACnB,MAAO,CAAAH,EAAI,OAAOzQ,CAAI,GAAGA,GAAM,EAAE,SAASA,MAASR,EAAO,CAAE;AAE9D,IAAAiR,EAAI,KAAKjR,IAAU,GAAG,EAAE,UAAUA,MAAYmN,GAAM,OAAO,YAAW,CAAE,GACxE8D,EAAI,KAAK9D,GAAM,EAAE,UAAUnN,MAAYmN,GAAM,OAAO,YAAW,CAAE;AAAA,EACnE;AAEA,WAASkE,GAASrG,GAAM;AACtB,QAAIsG,IAAO7T,EAAK,cAAc,qBAAqB;AAMnD,QALI,CAAC6T,KAAQlC,MACXkC,IAAO,SAAS,cAAc,KAAK,GACnCA,EAAK,YAAY,sBACjBlC,EAAM,OAAOkC,CAAI,IAEf,CAACA,EAAM;AACX,UAAMC,IAAS,IAAI,IAAIvG,EAAK,IAAI,CAACmF,MAAQA,EAAI,QAAQ,KAAK,CAAC,GACrDqB,IAAQ,CAAC,GAAG9C,EAAM,MAAM,KAAK,CAAC,EAAE,KAAK,GACrC+C,IAAa,IAAI,IAAI,CAAC,GAAGhU,EAAK,iBAAiB,0BAA0B,CAAC,EAAE,IAAI,CAACiG,MAAQA,EAAI,QAAQ,GAAG,CAAC;AAC/G,IAAA4N,EAAK,gBAAe;AACpB,eAAWnB,KAAOnH,KAAQ;AACxB,UAAI,CAACuI,EAAO,IAAIpB,EAAI,QAAQ,KAAK,EAAG;AACpC,YAAMuB,IAAO,SAAS,cAAc,SAAS;AAC7C,MAAAA,EAAK,YAAY,sBACjBA,EAAK,QAAQ,QAAQvB,EAAI,QAAQ;AACjC,YAAMwB,KAAQ,CAAC,GAAGxB,EAAI,KAAK,GACrBrT,KAAO6U,GAAM,KAAK,CAACpB,MAAOA,EAAG,QAAQ,UAAU,MAAM,KAAKoB,GAAM,KAAK,CAACpB,MAAOA,EAAG,QAAQ,SAAS,CAACpC,GAAS,IAAIoC,EAAG,QAAQ,KAAK,CAAC,GAEhI7N,IAAQ,SAAS,cAAc,KAAK;AAC1C,MAAAA,EAAM,YAAY,4BACd5F,IAAM,cAAc,qBAAqB,IAAG4F,EAAM,OAAO5F,GAAK,cAAc,qBAAqB,EAAE,UAAU,EAAI,CAAC,IACjH4F,EAAM,cAAc5F,KAAOA,GAAK,YAAY,SAASqT,EAAI,QAAQ,OACtEuB,EAAK,OAAOhP,CAAK;AAEjB,YAAMkP,KAAS,SAAS,cAAc,IAAI;AAC1C,MAAAA,GAAO,YAAY,6BACnBD,GAAM,QAAQ,CAACpB,GAAIsB,MAAU;AAC3B,cAAMC,KAAMvB,EAAG,QAAQ;AACvB,YAAI,CAACuB,MAAOvB,MAAOzT,MAAQqR,GAAS,IAAI2D,EAAG,KAAKL,EAAW,IAAI,OAAOI,IAAQ,CAAC,CAAC,EAAG;AACnF,cAAM7N,KAAK,SAAS,cAAc,IAAI;AACtC,QAAAA,GAAG,cAAcwN,EAAMK,CAAK,GAAG,YAAY,KAAI,KAAMC;AACrD,cAAMC,KAAK,SAAS,cAAc,IAAI;AACtC,QAAAA,GAAG,OAAO,GAAG,CAAC,GAAGxB,EAAG,UAAU,EAAE,IAAI,CAACyB,OAASA,GAAK,UAAU,EAAI,CAAC,CAAC,GAC/DD,GAAG,YAAY,KAAI,KAAIH,GAAO,OAAO5N,IAAI+N,EAAE;AAAA,MACjD,CAAC,GACGH,GAAO,qBAAmBF,EAAK,OAAOE,EAAM;AAEhD,YAAMK,KAAUN,GAAM,KAAK,CAACpB,MAAOA,EAAG,QAAQ,UAAU,SAAS;AACjE,UAAI0B,IAAS,SAAS,QAAQ;AAC5B,cAAMC,IAAM,SAAS,cAAc,KAAK;AACxC,QAAAA,EAAI,YAAY;AAChB,cAAMC,IAAUhC,EAAI,QAAQ,aAAa;AACzC,mBAAWxR,MAAMsT,GAAQ,iBAAiB,WAAW,GAAG;AACtD,gBAAMG,KAAOzT,GAAG,QAAQ,gBAAgB,GAAG,QAAQ;AACnD,cAAIyT,MAASA,OAAS,cAAeD,EAAS;AAC9C,gBAAMnF,KAAOrO,GAAG,UAAU,EAAI;AAC9B,UAAAqO,GAAK,gBAAgB,IAAI,GACzBA,GAAK,gBAAgB,eAAe,GACpCkF,EAAI,OAAOlF,EAAI;AAAA,QACjB;AACA,QAAA0E,EAAK,OAAOQ,CAAG;AAAA,MACjB;AACA,MAAAZ,EAAK,OAAOI,CAAI;AAAA,IAClB;AAAA,EACF;AAEA,WAASW,KAAQ;AACf,UAAMC,IAAMtJ,KACNgC,IAAO4F;AACb,QAAIjB,IAAS;AACX,YAAMD,IAAK,CAAC,GAAGhB,EAAM,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC+B,MAASA,EAAK,QAAQ,UAAUd,EAAO,GACjFpC,IAAUmC,GAAI,QAAQ,WAAW,aAAaA,GAAI,aAAa,cAAc,GAC7E6C,KAAM3C,OAAY,SAAS,KAAK;AACtC,MAAA5E,EAAK,KAAK,CAACzB,GAAG+D,OAAMiF,KAAMlF,GAAcmD,GAAQjH,GAAGoG,EAAO,GAAGa,GAAQlD,IAAGqC,EAAO,GAAGpC,CAAO,CAAC;AAC1F,YAAMzP,KAAOwU,EAAI,OAAO,CAACnC,MAAQ,CAACnF,EAAK,SAASmF,CAAG,CAAC;AACpD,iBAAWA,KAAO,CAAC,GAAGnF,GAAM,GAAGlN,EAAI,EAAG,CAAAuS,GAAQF,CAAG;AAAA,IACnD;AACA,UAAMhD,IAAO2C,KAAW,IAAI,KAAK,IAAI,GAAG,KAAK,KAAK9E,EAAK,SAAS8E,EAAQ,CAAC,IAAI;AAC7E,IAAID,IAAO1C,IAAO,MAAG0C,IAAO,KAAK,IAAI,GAAG1C,IAAO,CAAC;AAChD,UAAMqF,IAAQ1C,KAAW,IAAID,IAAOC,KAAW,GACzC2C,IAAU,IAAI,IAAK3C,KAAW,IAAI9E,EAAK,MAAMwH,GAAOA,IAAQ1C,EAAQ,IAAI9E,CAAI;AAClF,eAAWmF,KAAOmC,GAAK;AACrB,YAAMI,IAAQD,EAAQ,IAAItC,CAAG;AAC7B,MAAIA,EAAI,UAAUuC,KAAO,eAAe,MAAMxC,GAAYC,CAAG,CAAC,GAC9DA,EAAI,SAAS,CAACuC;AAAA,IAChB;AAEA,QADIxD,MAAOA,EAAM,SAASlE,EAAK,WAAW,IACtC6D,GAAS;AAEX,YAAM3M,IAAW2M,EAAQ,QAAQ,aAAa,kCACxC5H,IAAS,EAAE,MAAM+D,EAAK,SAASwH,IAAQ,IAAI,GAAG,IAAIA,IAAQC,EAAQ,MAAM,OAAOzH,EAAK;AAC1F,MAAA6D,EAAQ,cAAc3M,EAAS,QAAQ,wBAAwB,CAACmI,IAAGjK,OAAQ,OAAO6G,EAAO7G,EAAG,CAAC,CAAC;AAAA,IAChG;AACA,QAAI+O,GAAa;AACf,YAAMtH,IAAQ8H,KAAUjB,EAAM,cAAc,mBAAmBiB,EAAO,mBAAmB,GAAG,aAAa,KAAI,IAAK;AAClH,MAAAR,EAAY,cAActH,IAAQ,aAAaA,CAAK,KAAK+H,OAAY,QAAQ,cAAc,YAAY,KAAK;AAAA,IAC9G;AACA,IAAAoB,GAAYnB,IAAO,GAAG7E,EAAK,WAAW,IAAI,IAAImC,CAAI,GAClDkE,GAAS,CAAC,GAAGoB,CAAO,CAAC,GACrB5B;EACF;AAEA,WAAS8B,GAAUC,GAAU;AAC3B,UAAMC,IAAS,IAAI,IAAI,CAAC,GAAGpV,EAAK,iBAAiB,0BAA0B,CAAC,EAAE,IAAI,CAACiG,MAAQA,EAAI,QAAQ,GAAG,CAAC,GACrG8N,IAAQ,CAAC,GAAG9C,EAAM,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAACgB,GAAImC,MAChDnC,EAAG,QAAQ,SAAS,CAACvB,GAAS,IAAIuB,EAAG,QAAQ,KAAK,KAAK,CAACmD,EAAO,IAAI,OAAOhB,IAAQ,CAAC,CAAC,CAC5F,GAIKtL,KAHSqM,IACX5J,EAAI,EAAG,OAAO,CAACmH,MAAQyC,EAAS,IAAIzC,EAAI,QAAQ,KAAK,CAAC,IACtDS,MACgB,IAAI,CAACT,MAAQqB,EAAM,IAAI,CAAC9B,MAAOc,GAAQL,GAAKT,EAAG,QAAQ,KAAK,CAAC,CAAC;AAClF,IAAApB,GAAS,GAAG7I,CAAE,QAAQkI,GAAM6D,EAAM,IAAI,CAAC9B,MAAOA,EAAG,YAAY,KAAI,CAAE,GAAGnJ,CAAI,CAAC;AAAA,EAC7E;AAEA,WAAStH,GAAKnC,GAAMgW,GAAQ;AAC1B,IAAArV,EAAK,cAAc,IAAI,YAAYX,GAAM,EAAE,SAAS,IAAM,QAAAgW,EAAM,CAAE,CAAC;AAAA,EACrE;AAGA,WAASC,GAAWC,GAAQ;AAC1B,QAAI,CAAC3D,EAAM,QAAO;AAClB,eAAWjP,KAAO2P,GAAU;AAC1B,YAAMI,IAAMxB,EAAM,cAAc,iBAAiB,IAAI,OAAOvO,CAAG,CAAC,IAAI;AACpE,UAAK+P,MACD6C,MAAW,cAAc7C,EAAI,QAAQ,YAAY,cAAc,aAAUA,EAAI,QAAQ,WAAW,YAChG6C,MAAW,aAAa7C,EAAI,QAAQ,aAAa,cAAWA,EAAI,QAAQ,WAAW,WACnF6C,MAAW,YAAU7C,EAAI,OAAM,GAC/B6C,MAAW,gBAAgB7C,EAAI,QAAQ,YAAY,cAAc,WAAU;AAC7E,cAAMnD,IAAOmD,EAAI,UAAU,EAAI;AAC/B,QAAAnD,EAAK,QAAQ,QAAQ,GAAG5M,CAAG,SAC3BuO,EAAM,aAAa3B,GAAMmD,EAAI,WAAW;AAAA,MAC1C;AAAA,IACF;AACA,WAAAJ,EAAS,MAAK,GACdsC,MACO;AAAA,EACT;AAEA,EAAA5U,EAAK,iBAAiB,SAAS,CAACqF,MAAU;AACxC,UAAMoO,IAASpO,EAAM;AACrB,IAAIoO,MAAWtC,MACb1D,IAAQgG,EAAO,MAAM,KAAI,EAAG,YAAW,GACvCrB,IAAO,GACPwC;EAEJ,CAAC,GAED5U,EAAK,iBAAiB,UAAU,CAACqF,MAAU;AACzC,UAAMoO,IAASpO,EAAM;AAYrB,QAXIoO,MAAWnC,MACbe,KAAW,OAAOoB,EAAO,KAAK,KAAK,GACnCrB,IAAO,GACPxB,GAAW5I,GAAI,YAAYqK,EAAQ,GACnCuC,OAEEnB,EAAO,UAAU,4BAA4B,MAC/C5B,GAAW,IAAI4B,EAAO,QAAQ,aAAaA,EAAO,KAAK,GACvDrB,IAAO,GACPwC,OAEEnB,EAAO,UAAU,YAAY,GAAG;AAClC,YAAM+B,IAAO,CAAA;AACb,MAAAxV,EAAK,iBAAiB,YAAY,EAAE,QAAQ,CAACiG,MAAQ;AAAE,QAAAuP,EAAKvP,EAAI,QAAQ,GAAG,IAAIA,EAAI;AAAA,MAAS,CAAC,GAC7F2K,GAAW5I,GAAI,QAAQwN,CAAI;AAAA,IAC7B;AACA,QAAI/B,EAAO,UAAU,kBAAkB,GAAG;AACxC,YAAMf,IAAMe,EAAO,QAAQ,eAAe;AAC1C,UAAI,CAACf,KAAOA,EAAI,QAAQ,iBAAiB,QAAS;AAClD,MAAIe,EAAO,UAASnB,EAAS,IAAII,EAAI,QAAQ,KAAK,IAC7CJ,EAAS,OAAOI,EAAI,QAAQ,KAAK,GACtCU;IACF;AACA,QAAIK,MAAWlC,GAAW;AACxB,iBAAWmB,KAAOS;AAChB,QAAIT,EAAI,QAAQ,iBAAiB,YAC7Be,EAAO,UAASnB,EAAS,IAAII,EAAI,QAAQ,KAAK,IAC7CJ,EAAS,OAAOI,EAAI,QAAQ,KAAK;AAExC,MAAAU;IACF;AACA,QAAIK,EAAO,UAAU,gBAAgB,GAAG;AACtC,YAAMlO,IAAOkO,EAAO,QAAQ,CAAC;AAC7B,MAAIlO,KAAM/D,GAAK,uBAAuB,EAAE,MAAA+D,EAAI,CAAE,GAC9CkO,EAAO,QAAQ;AAAA,IACjB;AAAA,EACF,CAAC,GAEDzT,EAAK,iBAAiB,WAAW,CAACqF,MAAU;AAC1C,IAAIA,EAAM,QAAQ,WAAWA,EAAM,WAAW8L,KAC5C3P,GAAK,uBAAuB,EAAE,OAAO2P,EAAO,MAAK,CAAE;AAAA,EAEvD,CAAC,GAEDnR,EAAK,iBAAiB,SAAS,CAACqF,MAAU;AAExC,UAAMoQ,IAAWpQ,EAAM,OAAO,QAAQ,UAAU,GAC1CqQ,IAAUrQ,EAAM,OAAO,QAAQ,gBAAgB,MAC/CoQ,KAAY,CAACpQ,EAAM,OAAO,QAAQ,wDAAwD,IAAIoQ,EAAS,cAAc,gBAAgB,IAAI;AAC/I,QAAIC,KAAW1V,EAAK,SAAS0V,CAAO,GAAG;AACrC,YAAMzD,IAAKyD,EAAQ,QAAQ,IAAI;AAC/B,UAAI,CAACzD,GAAI,QAAQ,MAAO;AACxB,MAAA5M,EAAM,eAAc,GAChB6M,OAAYD,EAAG,QAAQ,QAAOE,KAAUA,OAAY,QAAQ,SAAS,SAClED,KAAUD,EAAG,QAAQ,OAAOE,KAAU;AAC7C,iBAAWnN,KAAQiM,EAAM,MAAM,KAAK,CAAC,EAAE,MAAO,CAAAjM,EAAK,gBAAgB,WAAW;AAC9E,MAAAiN,EAAG,aAAa,aAAaE,OAAY,QAAQ,cAAc,YAAY,GAC3EC,IAAO,GACPwC;AACA;AAAA,IACF;AACA,UAAMe,IAAYtQ,EAAM,OAAO,QAAQ,kBAAkB;AACzD,QAAIsQ,KAAa3V,EAAK,SAAS2V,CAAS,GAAG;AACzC,MAAApF,IAASoF,EAAU,QAAQ,UAC3BvD,IAAO,GACPpS,EAAK,iBAAiB,kBAAkB,EAAE,QAAQ,CAAC4V,MAAQ;AACzD,QAAIA,MAAQD,IAAWC,EAAI,aAAa,gBAAgB,MAAM,IACzDA,EAAI,gBAAgB,cAAc;AAAA,MACzC,CAAC,GACDhB;AACA;AAAA,IACF;AAGA,UAAMiB,IAASxQ,EAAM,OAAO,QAAQ,sBAAsB;AAC1D,QAAIwQ,KAAU7V,EAAK,SAAS6V,CAAM,GAAG;AACnC,YAAMnD,IAAMmD,EAAO,QAAQ,eAAe;AAC1C,UAAI,CAACnD,EAAK;AACV,YAAM6C,IAASM,EAAO,QAAQ;AAC9B,MAAArU,GAAK,oBAAoB,EAAE,QAAA+T,GAAQ,KAAK7C,EAAI,QAAQ,MAAK,CAAE,GACvDd,KAAQ2D,MAAW,cAAW7C,EAAI,QAAQ,WAAW,WACrDd,KAAQ2D,MAAW,aAAYjD,EAAS,OAAOI,EAAI,QAAQ,KAAK,GAAGA,EAAI,OAAM,IACjFkC;AACA;AAAA,IACF;AAEA,UAAMkB,IAAazQ,EAAM,OAAO,QAAQ,0BAA0B;AAClE,QAAIyQ,KAAc9V,EAAK,SAAS8V,CAAU,GAAG;AAC3C,YAAMpD,IAAM1S,EAAK,cAAc,wBAAwB;AACvD,MAAI0S,MACFA,EAAI,SAAS,CAACA,EAAI,QAClBoD,EAAW,aAAa,iBAAiBpD,EAAI,SAAS,UAAU,MAAM;AAExE;AAAA,IACF;AACA,UAAMqD,IAAS1Q,EAAM,OAAO,QAAQ,4BAA4B;AAChE,QAAI0Q,KAAU/V,EAAK,SAAS+V,CAAM,GAAG;AACnC,YAAMpT,IAAMoT,EAAO,QAAQ;AAC3B,MAAAlE,GAAW,IAAIlP,GAAKoT,EAAO,QAAQ,WAAW,EAAE,GAChD/V,EAAK,iBAAiB,8BAA8B2C,CAAG,IAAI,EAAE,QAAQ,CAACoP,MAAQ;AAC5E,QAAAA,EAAI,aAAa,iBAAiBA,MAAQgE,IAAS,SAAS,OAAO;AAAA,MACrE,CAAC,GACD3D,IAAO,GACPwC;AACA;AAAA,IACF;AACA,UAAMoB,KAAU3Q,EAAM,OAAO,QAAQ,gBAAgB;AACrD,QAAI2Q,MAAWhW,EAAK,SAASgW,EAAO,GAAG;AACrC,YAAMlH,IAAOkH,GAAQ,QAAQ;AAC7B,MAAAhW,EAAK,UAAU,OAAO,uBAAuB8O,MAAS,MAAM,GAC5D9O,EAAK,iBAAiB,gBAAgB,EAAE,QAAQ,CAAC4V,MAAQ;AACvD,QAAAA,EAAI,aAAa,gBAAgBA,MAAQI,KAAU,SAAS,OAAO;AAAA,MACrE,CAAC,GACDpF,GAAW5I,GAAI,QAAQ8G,CAAI;AAC3B;AAAA,IACF;AACA,UAAMmH,KAAa5Q,EAAM,OAAO,QAAQ,mBAAmB;AAC3D,QAAI4Q,MAAcjW,EAAK,SAASiW,EAAU,GAAG;AAC3C,YAAMC,IAAUD,GAAW,QAAQ,cAAc;AACjD,MAAAjW,EAAK,UAAU,OAAO,0BAA0BkW,CAAO,GACvDtF,GAAW5I,GAAI,WAAWkO,IAAU,YAAY,aAAa;AAC7D;AAAA,IACF;AACA,UAAMC,IAAU9Q,EAAM,OAAO,QAAQ,gBAAgB;AACrD,QAAI8Q,KAAWnW,EAAK,SAASmW,CAAO,KAAK,CAACA,EAAQ,UAAU;AAC1D,MAAA/D,IAAO,OAAO+D,EAAQ,QAAQ,MAAM,IAAI,GACxCvB;AACA;AAAA,IACF;AACA,QAAIvP,EAAM,OAAO,QAAQ,kBAAkB,GAAG;AAC5C,MAAA6P,GAAU,IAAI;AACd;AAAA,IACF;AACA,QAAI7P,EAAM,OAAO,QAAQ,kBAAkB,GAAG;AAC5C,MAAArF,EAAK,cAAc,gBAAgB,GAAG,MAAK;AAC3C;AAAA,IACF;AACA,UAAMoW,KAAU/Q,EAAM,OAAO,QAAQ,gBAAgB;AACrD,QAAI+Q,MAAWpW,EAAK,SAASoW,EAAO,GAAG;AACrC,YAAMb,IAASa,GAAQ,QAAQ,QAEzB9C,IAAO,CAAC,GAAGhB,CAAQ;AACzB,UAAIiD,MAAW,SAAS;AAAE,QAAAjD,EAAS,MAAK,GAAIc,GAAW;AAAI;AAAA,MAAQ;AACnE,UAAImC,MAAW,UAAU;AAAE,QAAAL,GAAU5C,CAAQ;AAAG;AAAA,MAAQ;AACxD,MAAAgD,GAAWC,CAAM,GACjB/T,GAAK,qBAAqB,EAAE,QAAA+T,GAAQ,MAAAjC,EAAI,CAAE;AAC1C;AAAA,IACF;AAEA,QAAIjO,EAAM,OAAO,QAAQ,2CAA2C,EAAG;AACvE,UAAMqN,KAAMrN,EAAM,OAAO,QAAQ,eAAe;AAChD,IAAI,CAACqN,MAAO,CAAC1S,EAAK,SAAS0S,EAAG,KAAK,CAACA,GAAI,QAAQ,WAC5CrN,EAAM,WAAWA,EAAM,UAAS,OAAO,KAAKqN,GAAI,QAAQ,QAAQ,UAAU,UAAU,IACnF,OAAO,SAAS,OAAOA,GAAI,QAAQ;AAAA,EAC1C,CAAC,GAGD1S,EAAK,iBAAiB,wBAAwB,MAAM4U,GAAK,CAAE;AAI3D,aAAW3C,KAAMhB,EAAM,MAAM,KAAK,CAAC,EAAE,OAAO;AAC1C,UAAM3G,IAAQ2H,EAAG,sBAAqB,EAAG;AACzC,IAAI3H,KAAS,CAAC2H,EAAG,MAAM,UAAOA,EAAG,MAAM,WAAW,GAAG,KAAK,KAAK3H,CAAK,CAAC;AAAA,EACvE;AAEA,EAAAtK,EAAK,iBAAiB,gBAAgB,EAAE,QAAQ,CAAC4V,MAAQ;AACvD,UAAMvC,IAAMuC,EAAI,QAAQ,WAAW,WAAY5V,EAAK,UAAU,SAAS,qBAAqB;AAC5F,IAAA4V,EAAI,aAAa,gBAAgBvC,IAAK,SAAS,OAAO;AAAA,EACxD,CAAC,GAEDuB,MACAnE,GAAS,IAAIzQ,GAAM,EAAE,OAAA4U,GAAK,CAAE;AAC9B;AAGO,SAASyB,GAAexO,IAAQ,UAAU;AAC/C,EAAAA,EAAM,iBAAiB,sCAAsC,EAAE,QAAQ,CAAC7H,MAAS+Q,GAAc/Q,CAAI,CAAC;AACtG;AAKA,SAAS8H,KAAY;AACnB,MAAI,OAAO,WAAa,IAAa,QAAO;AAC5C,QAAMhC,IAAM,OAAO,YAAY,GAAG;AAClC,MAAIA,EAAI,SAAS,eAAe,KAAK,kBAAkB,KAAKA,CAAG,EAAG,QAAO;AACzE,QAAMP,IAAOO,EAAI,MAAM,MAAM,EAAE,CAAC;AAChC,SAAO,CAAC,GAAG,SAAS,iBAAiB,2BAA2B,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,MAAM,MAAM,EAAE,CAAC,MAAMP,CAAI;AAChH;AACA,IAAIuC,MAAa;AACf,QAAMC,IAAO,MAAMsO,GAAe,QAAQ;AAC1C,EAAI,SAAS,eAAe,YAAW,SAAS,iBAAiB,oBAAoBtO,CAAI,IACpFA;AACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxfA,UAAMzH,IAAQ1B,GAgCRoB,IAAOiI,GAA4B,MAAM,GACzCqO,IAAQ,CAAC,GAAG,oBAAI,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,KAAKhW,EAAM,QAAQ,CAAC,CAAC,EAAE,KAAK,CAACwL,GAAG+D,MAAM/D,IAAI+D,CAAC,GAChF0G,KAAQjW,EAAM,aAAa,IAAI,MAAMA,EAAM,YAAY,IAAI,IAC3D0H,IAAK1H,EAAM,WAAW,SAAS,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,IACrE8J,IAAQ,CAACsI,MAAsBA,EAAI,QAAQ,QAAQA,EAAI,MAAM,QAAQA,EAAI;AAE/E,WAAApR,GAAU,MAAM;AACd,MAAItB,EAAK,SAAO+Q,GAAc/Q,EAAK,KAAK;AAAA,IAC1C,CAAC,mBAIClB,EA+HM,OAAA;AAAA,eA/HG;AAAA,MAAJ,KAAIkB;AAAA,MAAQ,OAAKd,EAAA,CAAA,iBAAoBN,EAAA,YAAO,cAAA,2BAAA,CAA+CA,EAAA,mCAAmCA,EAAA,cAAU,sBAAA,CAAA;AAAA,MAA8B,IAAIa,EAAAuI,CAAA;AAAA,MAAK,kBAAgBpJ,EAAA;AAAA,MAAW,gBAAcA,EAAA,OAAI,SAAY;AAAA,IAAA;MAChOA,EAAA,aAAXE,EAWM,OAAA;AAAA;QAXW,OAAM;AAAA,QAAiC,MAAK;AAAA,QAAW,cAAYF,EAAA,KAAK,SAAK;AAAA,MAAA;SAC5FC,EAAA,EAAA,GAAAC,EAS2O+D,WARtNjE,EAAA,KAAK,OAAK,CAArBmT,GAAKjO,YADfhF,EAS2O,UAAA;AAAA,UAPxO,KAAKiT,EAAI;AAAA,UACV,OAAM;AAAA,UACN,MAAK;AAAA,UACL,MAAK;AAAA,UACJ,sBAAoBnT,EAAA,KAAK;AAAA,UACzB,iBAAemT,EAAI;AAAA,UACnB,iBAAejO,MAAC,IAAA,SAAA;AAAA,QAAA;UACEiO,EAAI,aAAxBjT,EAAoE,gBAAA;AAAA;YAArC,MAAMiT,EAAI;AAAA,YAAM,eAAY;AAAA,UAAA;UAAY3P,EAAAC,EAAA0P,EAAI,KAAK,GAAA,CAAA;AAAA,UAAeA,EAAI,SAAK,aAArBjT,EAA8I,QAAA;AAAA;YAA9G,qCAAmCiT,EAAI,QAAI,4BAAgCA,EAAI,IAAI,EAAA,CAAA;AAAA,UAAA,GAAQ1P,EAAA0P,EAAI,KAAK,GAAA,CAAA;;;MAE1NrS,EA8BM,OA9BNiE,IA8BM;AAAA,QA7BJjE,EAeM,OAfNkE,IAeM;AAAA,UAdJlE,EAAoD,QAApDmE,IAAoDxB,EAAfzD,EAAA,KAAK,GAAA,CAAA;AAAA,UAC1Cc,EAAwiB,UAAA;AAAA,YAAhiB,OAAM;AAAA,YAAiD,MAAK;AAAA,YAAU,kBAAkBD,EAAAuI,CAAA,CAAE;AAAA,YAAS,cAAW;AAAA,YAAe,OAAM;AAAA,UAAA;YAAetI,EAAqY,OAAA;AAAA,cAAhY,SAAQ;AAAA,cAAY,MAAK;AAAA,cAAe,eAAY;AAAA,YAAA;cAAOA,EAA+T,QAAA,EAAzT,GAAE,sTAAoT;AAAA,YAAA;;UACthBA,EAWM,OAAA;AAAA,YAXD,OAAM;AAAA,YAAoB,OAAOD,EAAAuI,CAAA,CAAE;AAAA,YAAS,SAAA;AAAA,UAAA;4BAC/CtI,EAAiF,UAAA;AAAA,cAAzE,OAAM;AAAA,cAAmB,MAAK;AAAA,cAAS,kBAAA;AAAA,YAAA,GAAe,cAAU,EAAA;AAAA,YACxDd,EAAA,mBAAhBE,EAGW+D,GAAA,EAAA,KAAA,KAAA;AAAA,8BAFTnD,EAAiF,UAAA;AAAA,gBAAzE,OAAM;AAAA,gBAAmB,MAAK;AAAA,gBAAS,kBAAA;AAAA,cAAA,GAAe,cAAU,EAAA;AAAA,8BACxEA,EAAkF,SAAA;AAAA,gBAA3E,OAAM;AAAA,gBAAqB,MAAK;AAAA,gBAAO,QAAO;AAAA,gBAAgB,gBAAA;AAAA,cAAA;;;;;QAS3EA,EAA4H,SAAA;AAAA,UAArH,OAAM;AAAA,UAAgC,MAAK;AAAA,UAAU,aAAad,EAAA;AAAA,UAAoB,wBAAsBA,EAAA,KAAK;AAAA,QAAA;QAC7GA,EAAA,WAAXC,EAAA,GAAAC,EAKM,OALNsQ,IAKM;AAAA,0BAJJ1P,EAA6G,UAAA;AAAA,YAArG,OAAM;AAAA,YAAiB,MAAK;AAAA,YAAS,kBAAe;AAAA,YAAS,gBAAa;AAAA,UAAA,GAAO,eAAW,EAAA;AAAA,0BACpGA,EAA0F,UAAA;AAAA,YAAlF,OAAM;AAAA,YAAiB,MAAK;AAAA,YAAS,kBAAe;AAAA,UAAA,GAAM,mBAAe,EAAA;AAAA,0BACjFA,EAAyF,UAAA;AAAA,YAAjF,OAAM;AAAA,YAAiB,MAAK;AAAA,YAAS,kBAAe;AAAA,UAAA,GAAU,cAAU,EAAA;AAAA,UAClEd,EAAA,gBAAdE,EAA2G,UAA3GiO,IAAsF,cAAY;;wBAEpGrN,EAGM,OAAA;AAAA,UAHD,OAAM;AAAA,UAAqB,MAAK;AAAA,UAAQ,cAAW;AAAA,QAAA;UACtDA,EAAqhB,UAAA;AAAA,YAA7gB,OAAM;AAAA,YAAiD,MAAK;AAAA,YAAS,gBAAa;AAAA,YAAQ,gBAAa;AAAA,YAAO,cAAW;AAAA,UAAA;YAAQA,EAAmY,OAAA;AAAA,cAA9X,SAAQ;AAAA,cAAY,MAAK;AAAA,cAAe,eAAY;AAAA,YAAA;cAAOA,EAA6T,QAAA,EAAvT,GAAE,oTAAkT;AAAA,YAAA;;UACngBA,EAA2S,UAAA;AAAA,YAAnS,OAAM;AAAA,YAAiD,MAAK;AAAA,YAAS,gBAAa;AAAA,YAAO,cAAW;AAAA,UAAA;YAAQA,EAA8K,OAAA;AAAA,cAAzK,SAAQ;AAAA,cAAY,MAAK;AAAA,cAAe,eAAY;AAAA,YAAA;cAAOA,EAAwG,QAAA,EAAlG,GAAE,+FAA6F;AAAA,YAAA;;;QAEhRoB,EAAAA,OAAM,cAAA,KAAjBjC,KAAAC,EAAmG,OAAnGkO,IAAmG;AAAA,UAAlChO,EAA4BC,EAAA,QAAA,cAAA;AAAA,QAAA;wBAC7FS,EAA6E,KAAA;AAAA,UAA1E,OAAM;AAAA,UAA6B,wBAAA;AAAA,UAAqB,MAAK;AAAA,QAAA;;MAEvDd,EAAA,eAAe,eAA1BE,EAQM,OAAA;AAAA;QAR6B,OAAOW,EAAAuI,CAAA,CAAE;AAAA,QAAY,OAAM;AAAA,MAAA;gBAC5DlJ,EAMQ+D,GAAA,MAAAC,EANWlE,EAAA,eAAa,CAAlB0E,YAAdxE,EAMQ,SAAA;AAAA,UAN2B,KAAKwE,EAAE;AAAA,UAAQ,OAAM;AAAA,QAAA;UAClCA,EAAE,aAAtBxE,EAAgE,gBAAA;AAAA;YAAnC,MAAMwE,EAAE;AAAA,YAAM,eAAY;AAAA,UAAA,oBACtCzE,KAAAC,EAAsT,OAAtT0X,IAAsT,CAAA,GAAAtU,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA,YAAtPxC,EAAgP,QAAA,EAA1O,GAAE,sOAAA,GAAqO,MAAA,EAAA;AAAA,UAAA;UAC9TA,EAES,UAAA;AAAA,YAFD,OAAM;AAAA,YAAa,sBAAoB4D,EAAE;AAAA,YAAS,cAAYA,EAAE;AAAA,UAAA;aACtEzE,EAAA,EAAA,GAAAC,EAAgH+D,GAAA,MAAAC,EAA5FQ,EAAE,UAAPmT,YAAf3X,EAAgH,UAAA;AAAA,cAAhF,KAAK2X,EAAE;AAAA,cAAQ,OAAOA,EAAE;AAAA,cAAQ,UAAUA,EAAE,UAAK;AAAA,YAAA,GAAYpU,EAAAoU,EAAE,KAAK,GAAA,GAAAC,EAAA;;;;MAI/F9X,EAAA,mBAAXE,EAaM,OAAA;AAAA;QAbiB,OAAM;AAAA,QAAkB,OAAOW,EAAAuI,CAAA,CAAE;AAAA,QAAY,SAAA;AAAA,MAAA;QAClE9F,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAxC,EAA2C,KAAA,EAAxC,OAAM,uBAAA,GAAuB,WAAO,EAAA;AAAA,QACvBd,EAAA,kBAAhBE,EAGW+D,GAAA,EAAA,KAAA,KAAA;AAAA,4BAFTnD,EAAgG,UAAA;AAAA,YAAxF,OAAM;AAAA,YAAmB,MAAK;AAAA,YAAS,wBAAA;AAAA,UAAA,GAAqB,uBAAmB,EAAA;AAAA,4BACvFA,EAAyC,OAAA,EAApC,OAAM,2BAAuB,MAAA,EAAA;AAAA,QAAA;QAEpCA,EAMO,QANPiX,IAMO;AAAA,WALL9X,EAAA,EAAA,GAAAC,EAIW+D,GAAA,MAAAC,EAJsBlE,EAAA,SAAO,CAAtByV,GAAKD;YAAyB,KAAAC,EAAI;AAAA,UAAA;YACrCA,EAAI,aAAQ,MAAzBxV,KAAAC,EAEQ,SAFR8X,IAEQ;AAAA,cADNlX,EAAkF,SAAA;AAAA,gBAA3E,MAAK;AAAA,gBAAY,YAAU6W,IAAOnC,IAAK;AAAA,gBAAO,SAAO,CAAGC,EAAI;AAAA,cAAA;gBAAe,MAAChS,EAAGgS,EAAI,MAAM,GAAA,CAAA;AAAA,YAAA;;;;;MAcxG3U,EAyCM,OAzCNmX,IAyCM;AAAA,QAxCJnX,EAsCM,OAtCNoX,IAsCM;AAAA,UArCJpX,EAoCQ,SApCRqX,IAoCQ;AAAA,YAnCNrX,EAeQ,SAAA,MAAA;AAAA,cAdNA,EAaK,MAAA,MAAA;AAAA,gBAZOd,EAAA,cAAVC,KAAAC,EAAsI,MAAtIkY,IAAsI,CAAA,GAAA9U,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA,kBAA3FxC,EAAsF,SAAA;AAAA,oBAA/E,OAAM;AAAA,oBAAc,MAAK;AAAA,oBAAW,sBAAA;AAAA,oBAAmB,cAAW;AAAA,kBAAA;;gBAC1Gd,EAAA,aAAVC,KAAAC,EAA2F,MAA3FmY,IAA2F,CAAA,GAAA/U,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA,kBAAlDxC,EAA6C,QAAA,EAAvC,OAAM,qBAAA,GAAqB,SAAK,EAAA;AAAA,gBAAA;wBAC/EZ,EAMK+D,GAAA,MAAAC,EANalE,EAAA,SAAO,CAAdyV,YAAXvV,EAMK,MAAA;AAAA,kBANuB,KAAKuV,EAAI;AAAA,kBAAM,eAAaA,EAAI;AAAA,kBAAM,gBAAcA,EAAI,UAAO,YAAA;AAAA,kBAAwB,gBAAcA,EAAI,eAAe;AAAA,kBAAY,aAAWA,EAAI;AAAA,gBAAA;kBAC7K3U,EAIO,QAJPwX,IAIO;AAAA,oBAHS7C,EAAI,aAAQ,MAA1BxV,EAAA,GAAAC,EAAmG,UAAnGqY,IAAmG9U,EAAtBgS,EAAI,MAAM,GAAA,CAAA,WACvFvV,EAA4C+D,GAAA,EAAA,KAAA,KAAA;AAAA,sBAAxBT,EAAAC,EAAAgS,EAAI,MAAM,GAAA,CAAA;AAAA,oBAAA;oBAClBzV,EAAA,kBAAZE,EAA6I,QAAA;AAAA;sBAAtH,OAAM;AAAA,sBAAuB,MAAK;AAAA,sBAAY,oBAAiB;AAAA,sBAAY,cAAU,UAAYuV,EAAI,MAAM;AAAA,oBAAA;;;gBAGtI3U,EAEK,MAFL0X,IAEK;AAAA,kBADH1X,EAAgW,QAAhW2X,IAAgW;AAAA,wCAAjU,WAAO,EAAA;AAAA,oBAAczY,EAAA,mBAAdE,EAAmT,UAAA;AAAA;sBAAzR,OAAM;AAAA,sBAAiD,MAAK;AAAA,sBAAU,kBAAkBW,EAAAuI,CAAA,CAAE;AAAA,sBAAY,cAAW;AAAA,sBAAU,OAAM;AAAA,oBAAA;sBAAUtI,EAAqI,OAAA;AAAA,wBAAhI,SAAQ;AAAA,wBAAY,MAAK;AAAA,wBAAe,eAAY;AAAA,sBAAA;wBAAOA,EAA+D,QAAA,EAAzD,GAAE,sDAAoD;AAAA,sBAAA;;;;;;YAI7UA,EAkBQ,SAAA,MAAA;AAAA,sBAjBNZ,EAgBK+D,GAAA,MAAAC,EAhBalE,EAAA,MAAI,CAAX8T,YAAX5T,EAgBK,MAAA;AAAA,gBAhBoB,KAAK4T,EAAI;AAAA,gBAAK,eAAA;AAAA,gBAAa,eAAaA,EAAI;AAAA,gBAAM,kBAAgBA,EAAI,UAAM;AAAA,gBAAe,gBAAcA,EAAI;AAAA,cAAA;gBAC1H9T,EAAA,cAAVC,EAAA,GAAAC,EAA+I,MAA/IwY,IAA+I;AAAA,kBAApG5X,EAA+F,SAAA;AAAA,oBAAxF,OAAM;AAAA,oBAAc,MAAK;AAAA,oBAAW,kBAAA;AAAA,oBAAgB,cAAU,UAAY0K,EAAMsI,CAAG,CAAA;AAAA,kBAAA;;gBAC3H9T,EAAA,aAAVC,EAAA,GAAAC,EAA+K,MAA/KyY,IAA+K;AAAA,kBAApG7X,EAA+F,UAAA;AAAA,oBAAvF,OAAM;AAAA,oBAAuB,MAAK;AAAA,oBAAU,cAAU,QAAU0K,EAAMsI,CAAG,CAAA;AAAA,kBAAA;;wBAC5J5T,EAKK+D,GAAA,MAAAC,EALalE,EAAA,SAAO,CAAdyV,YAAXvV,EAKK,MAAA;AAAA,kBALuB,KAAKuV,EAAI;AAAA,kBAAM,eAAaA,EAAI;AAAA,kBAAM,gBAAcA,EAAI,eAAe;AAAA,kBAAY,iBAAe3B,EAAI,SAAS2B,EAAI,GAAG;AAAA,gBAAA;kBAChJrV,EAGOC,EAAA,QAAA,QAHcoV,EAAI,GAAG,MAAK,KAAA3B,EAAA,GAAjC,MAGO;AAAA,oBAFO2B,EAAI,iBAAhBvV,EAAgL,QAAA;AAAA;sBAAtJ,OAAM;AAAA,sBAA0B,OAAKoE,EAAA,EAAA,4BAAgCmR,EAAI,UAAQ;AAAA,sBAAK,OAAO3B,EAAI,MAAM2B,EAAI,GAAG;AAAA,oBAAA,GAAMhS,EAAAqQ,EAAI,MAAM2B,EAAI,GAAG,KAAA,EAAA,GAAA,IAAAmD,EAAA,WAC/J1Y,EAA0D+D,GAAA,EAAA,KAAA,KAAA;AAAA,sBAAtCT,EAAAC,EAAAqQ,EAAI,MAAM2B,EAAI,GAAG,KAAA,EAAA,GAAA,CAAA;AAAA,oBAAA;;;gBAGzC3U,EAMK,MANL+X,IAMK;AAAA,kBALH/X,EAIM,OAJNgY,IAIM;AAAA,oBAHJ1Y,EAEOC,EAAA,QAAA,WAAA,EAFe,KAAAyT,EAAA,GAAtB,MAEO;AAAA,sBADLhT,EAAoZ,UAAA;AAAA,wBAA5Y,OAAM;AAAA,wBAAsD,MAAK;AAAA,wBAAU,cAAU,QAAU0K,EAAMsI,CAAG,CAAA;AAAA,wBAAK,OAAM;AAAA,sBAAA;wBAAOhT,EAAyQ,OAAA;AAAA,0BAApQ,SAAQ;AAAA,0BAAY,MAAK;AAAA,0BAAe,eAAY;AAAA,wBAAA;0BAAOA,EAAmM,QAAA,EAA7L,GAAE,0LAAwL;AAAA,wBAAA;;;;;;;;;0BAQhZA,EAAoD,KAAA;AAAA,UAAjD,OAAM;AAAA,UAAsB,QAAA;AAAA,QAAA,GAAO,cAAU,EAAA;AAAA,MAAA;MAElDA,EAQM,OARNiY,IAQM;AAAA,QAPJjY,EAAgE,KAAA;AAAA,UAA7D,OAAM;AAAA,UAAyB,mBAAiBd,EAAA;AAAA,QAAA;QACnDc,EAIQ,SAJRkY,IAIQ;AAAA,8BAJ8B,kBACpC,EAAA;AAAA,UAAAlY,EAES,UAFTmY,IAES;AAAA,oBADP/Y,EAA0F+D,GAAA,MAAAC,EAAtErD,EAAA6W,CAAA,GAAK,CAAVjL,YAAfvM,EAA0F,UAAA;AAAA,cAA9D,KAAKuM;AAAA,cAAI,OAAOA;AAAA,cAAI,UAAUA,MAAMzM,EAAA;AAAA,YAAA,KAAayM,CAAC,GAAA,GAAAyM,EAAA;;;0BAGlFpY,EAA6E,OAAA;AAAA,UAAxE,OAAM;AAAA,UAAsB,iBAAA;AAAA,UAAc,cAAW;AAAA,QAAA;;;;;;;;;;;;;;;;;;;AClNhE,UAAMY,IAAQ1B,GACRmZ,IAAU9X,EAAS,MAAMK,EAAM,YAAYA,EAAM,KAAK,MAAM,SAAS,EAAE,OAAO,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,CAACwJ,MAAMA,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,YAAA,CAAa;sBAI9IjL,EAAA,GAAAC,EAMO,QANPC,IAMO;AAAA,MALLW,EAAmI,QAAnIC,IAAmI;AAAA,QAA7Ef,EAAA,eAAXE,EAAwC,OAAA;AAAA;UAApB,KAAKF,EAAA;AAAA,UAAQ,KAAI;AAAA,QAAA,yBAAGE,EAAyC+D,GAAA,EAAA,KAAA,KAAA;AAAA,cAArBkV,EAAA,KAAO,GAAA,CAAA;AAAA,QAAA;;MAC9GrY,EAGO,QAHP4C,IAGO;AAAA,QAFL5C,EAA6E,QAA7EiE,IAA6E;AAAA,UAApCvB,EAAAC,EAAAzD,EAAA,IAAI,IAAG,KAAC,CAAA;AAAA,UAAAI,EAAqBC,EAAA,QAAA,OAAA;AAAA,QAAA;QAC1DL,EAAA,OAAOkC,EAAAA,OAAO,OAA1BjC,KAAAC,EAAsG,QAAtG8E,IAAsG;AAAA,UAAxC5E,EAAiCC,qBAAjC,MAAiC;AAAA,gBAAbL,EAAA,GAAG,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;;ACR3F,UAAM0B,IAAQ1B,GACR2B,IAAQnB,EAAmBR,GAAA,YAAgB,GAC3CwL,IAAQnK,EAAS,MAAM;AAC3B,YAAM,CAAC0E,GAAGC,GAAGT,CAAC,KAAK5D,EAAM,SAAS,IAAI,MAAM,GAAG,EAAE,IAAI,MAAM;AAC3D,UAAI,CAACD,EAAM,QAAQ,CAACqE,EAAG,QAAO;AAC9B,YAAMmF,IAAI7F,GAAQ,IAAI,KAAKU,GAAGC,IAAI,GAAGT,CAAC,CAAC;AACvC,aAAO7D,EAAM,UAAU,QAAQ,UAAU,OAAOwJ,EAAE,IAAI,CAAC,EAAE,QAAQ,UAAU,OAAOA,EAAE,IAAI,CAAC;AAAA,IAC3F,CAAC;2BAIChL,EAIM,OAAA;AAAA,MAJA,2BAAyBF,EAAA,SAAI,QAAA,mBAAA,CAAA;AAAA,IAAA;sBACjCc,EAAkP,QAAA,EAA5O,OAAM,yBAAqB;AAAA,QAACA,EAAyM,OAAA;AAAA,UAApM,SAAQ;AAAA,UAAY,MAAK;AAAA,UAAe,eAAY;AAAA,QAAA;UAAOA,EAAmI,QAAA,EAA7H,GAAE,0HAAwH;AAAA,QAAA;;QAClOA,EAAyE,SAAA;AAAA,QAAjE,IAAId,EAAA;AAAA,sDAAa2B,EAAK,QAAAS;AAAA,QAAE,MAAK;AAAA,QAAO,OAAM;AAAA,MAAA;aAAzBT,EAAA,KAAK;AAAA,MAAA;MAChB3B,EAAA,aAAdE,EAAoE,UAApEa,IAAoE0C,EAAjB+H,EAAA,KAAK,GAAA,CAAA;;;;;;;;;;;;;;;;;;;;;ACX5D,UAAM9J,IAAQ1B,GAIR2B,IAAQnB,iBAA4C;AAG1D,aAAS4Y,IAAa;AACpB,YAAMC,IAAQ,IAAI,KAAK,aAAa3X,EAAM,MAAM,EAAE,cAAc,MAAM;AACtE,aAAO,EAAE,OAAO2X,EAAM,KAAK,CAACC,MAAMA,EAAE,SAAS,OAAO,GAAG,SAAS,KAAK,SAASD,EAAM,KAAK,CAACC,MAAMA,EAAE,SAAS,SAAS,GAAG,SAAS,IAAA;AAAA,IAClI;AACA,aAASC,EAAMnS,GAA6B;AAC1C,YAAM,EAAE,OAAAoS,GAAO,SAAAC,EAAA,IAAYL,EAAA,GACrBM,IAAQtS,EAAK,KAAA,EAAO,MAAMoS,CAAK,EAAE,KAAK,EAAE,EAAE,QAAQC,GAAS,GAAG,EAAE,QAAQ,OAAO,EAAE,GACjFhN,IAAI,OAAOiN,CAAK;AACtB,aAAOA,KAAS,OAAO,SAASjN,CAAC,IAAIA,IAAI;AAAA,IAC3C;AACA,aAASrB,EAAOqB,GAA0B;AACxC,aAAOA,KAAK,OAAO,KAAK,IAAI,KAAK,aAAa/K,EAAM,QAAQ,EAAE,uBAAuBA,EAAM,UAAU,uBAAuBA,EAAM,UAAU,EAAE,OAAO+K,CAAC;AAAA,IACxJ;AAEA,UAAMrF,IAAOtE,EAAIsI,EAAOzJ,EAAM,KAAK,CAAC,GAC9BgY,IAAU7W,EAAI,EAAK;AAEzB,IAAAL,GAAMd,GAAO,CAAC8K,MAAM;AAAE,MAAKkN,EAAQ,UAAOvS,EAAK,QAAQgE,EAAOqB,CAAC;AAAA,IAAE,CAAC;AAElE,aAASR,EAAQrL,GAAU;AACzB,MAAAwG,EAAK,QAASxG,EAAE,OAA4B,OAC5Ce,EAAM,QAAQ4X,EAAMnS,EAAK,KAAK;AAAA,IAChC;AACA,aAASwS,IAAS;AAChB,MAAAD,EAAQ,QAAQ;AAChB,YAAMlN,IAAI8M,EAAMnS,EAAK,KAAK;AAC1B,OAAIqF,KAAK,QAAQ,CAACrF,EAAK,MAAM,YAAQA,EAAK,QAAQgE,EAAOqB,CAAC;AAAA,IAC5D;qBAIazM,EAAA,QAAXC,EAAA,GAAAC,EAGM,OAHNC,IAGM;AAAA,MAFJW,EAA6P,SAA7PmB,EAA6P5B,EAAA,QAAxO;AAAA,QAAG,wCAAwCL,EAAA,cAAU,yBAAA;AAAA,QAAgC,MAAK;AAAA,QAAO,WAAU;AAAA,QAAW,gBAAcA,EAAA,QAAK,SAAY;AAAA,QAAY,OAAOoH,EAAA;AAAA,QAAO,gCAAOuS,EAAA,QAAO;AAAA,QAAU,SAAA1N;AAAA,QAAiB,QAAA2N;AAAA,MAAA;MAC7O9Y,EAAqD,QAArDE,IAAqDyC,EAAdzD,EAAA,IAAI,GAAA,CAAA;AAAA,IAAA,YAE7CE,EAAoQ,SAApQ+B,EAAoQ,EAAA,KAAA,EAAA,GAA9OoO,EAAAA,QAAM;AAAA,MAAG,wCAAwCrQ,EAAA,cAAU,yBAAA;AAAA,MAAgC,MAAK;AAAA,MAAO,WAAU;AAAA,MAAW,gBAAcA,EAAA,QAAK,SAAY;AAAA,MAAY,OAAOoH,EAAA;AAAA,MAAO,gCAAOuS,EAAA,QAAO;AAAA,MAAU,SAAA1N;AAAA,MAAiB,QAAA2N;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;2BC9BpP1Z,EAYM,OAAA;AAAA,MAZD,OAAM;AAAA,MAAc,MAAK;AAAA,MAAU,cAAYF,EAAA,SAASA,EAAA;AAAA,IAAA;MACjDA,EAAA,SAASkC,EAAAA,OAAO,SAA1BjC,KAAAC,EAA+F,MAA/Fa,IAA+F;AAAA,QAA1CX,EAAqCC,uBAArC,MAAqC;AAAA,cAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;MACvEA,EAAA,eAAekC,EAAAA,OAAO,eAA/BjC,KAAAC,EAA2H,KAA3Hc,IAA2H;AAAA,QAArDZ,EAAiDC,6BAAjD,MAAiD;AAAA,cAArBL,EAAA,WAAW,GAAA,CAAA;AAAA,QAAA;;MAC7Gc,EAOK,MAPL4C,IAOK;AAAA,QANHtD,EAKOC,yBALP,MAKO;AAAA,WAJLJ,EAAA,EAAA,GAAAC,EAGM+D,GAAA,MAAAC,EAHkBlE,EAAA,MAAI,CAAf8T,GAAK5O,YAAlBhF,EAGM,OAAA;AAAA,YAHyB,KAAKgF;AAAA,YAAG,OAAM;AAAA,UAAA;YAC3CpE,EAA0C,MAA1CiE,IAA0CtB,EAAhBqQ,EAAI,IAAI,GAAA,CAAA;AAAA,YAClChT,EAA8C,MAA9CkE,IAA8CvB,EAAlBqQ,EAAI,MAAM,GAAA,CAAA;AAAA,UAAA;;;MAIjC5R,EAAAA,OAAO,UAAlBjC,KAAAC,EAA2E,OAA3E+E,IAA2E;AAAA,QAA5B7E,EAAsBC,EAAA,QAAA,QAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;ACTzE,UAAMqB,IAAQ1B,GAYR+L,IAAOpM,EAAO,eAAe,GAC7Bka,IAAO,CAACC,GAAoB5U,MAAc4U,EAAI,MAAM,GAAGpY,EAAM,YAAYqK,CAAI,IAAI7G,IAAI,CAAC,IACtF6U,IAAO,CAACD,MAAuBA,EAAI,eAAe,IAClDE,IAAU,CAACF,MAAuBC,EAAKD,CAAG,MAAMA,EAAI,SAASA,EAAI,SAAS,UAAU,UAAU,YAAY,SAC1GG,IAAM,CAACH,MAAuB,CAAC,gBAAgBA,EAAI,OAAO,QAAQ,iBAAiBA,EAAI,GAAG,EAAE,GAC5FI,IAAY,CAACJ,MAAwBA,EAAI,SAAS,UAAU,GAAGA,EAAI,KAAK,WAAWA,EAAI;;MAI3FhZ,EAeM,OAfNmB,EAeM,EAfD,OAAM,wBAA6BoO,EAAAA,MAAM,GAAA;AAAA,SAC5CpQ,EAAA,EAAA,GAAAC,EAaS+D,GAAA,MAAAC,EAbkBlE,EAAA,OAAK,CAAhB8Z,GAAK5U,YAArBhF,EAaS,UAAA;AAAA,UAb0B,KAAKgF;AAAA,UAAI,2BAAyB4U,EAAI,SAAI,WAAA,wBAAwCA,EAAI,SAAI,WAAA,sBAAA,CAAA;AAAA,QAAA;UAC3HhZ,EAIa,cAJbX,IAIa;AAAA,YAHXW,EAAyD,QAAzDC,IAAyD0C,EAAnBqW,EAAI,KAAK,GAAA,CAAA;AAAA,YACnCA,EAAI,QAAhB7Z,EAAA,GAAAC,EAAuE,QAAvEc,IAAuEyC,EAAlBqW,EAAI,IAAI,GAAA,CAAA;YAC/CC,EAAKD,CAAG,KAAA,CAAME,EAAQF,CAAG,UAAvC5Z,EAAqM,UAAA;AAAA;cAA3J,MAAK;AAAA,cAAS,OAAM;AAAA,cAAwB,SAAQ;AAAA,cAAc,YAAY2Z,EAAKC,GAAK5U,CAAC;AAAA,cAAI,cAAU,QAAU4U,EAAI,KAAK;AAAA,YAAA,GAAgB,KAAQ,GAAApW,EAAA;;UAE9L5C,EAMM,OANNiE,IAMM;AAAA,YALQ+U,EAAI,MACEA,EAAI,SAAI,gBAA1B5Z,EAA8H,SAAA;AAAA;cAArF,KAAK4Z,EAAI;AAAA,cAAK,UAAA;AAAA,cAAS,SAAQ;AAAA,cAAY,cAAYA,EAAI,OAAOA,EAAI;AAAA,YAAA,mBAC/FA,EAAI,SAAI,gBAAxB5Z,EAAmF,OAAA;AAAA;cAA5C,KAAK4Z,EAAI;AAAA,cAAM,KAAKA,EAAI,OAAOA,EAAI;AAAA,YAAA,yBAC1E5Z,EAA6G,UAAA;AAAA;cAA7F,KAAG,GAAK4Z,EAAI,GAAG;AAAA,cAAyB,OAAOA,EAAI,OAAOA,EAAI;AAAA,cAAO,SAAQ;AAAA,YAAA,yBAH7F5Z,EAA2F,OAAA;AAAA;cAArE,OAAKI,EAAE2Z,EAAIH,CAAG,CAAA;AAAA,cAAG,MAAK;AAAA,cAAO,cAAYA,EAAI,OAAOA,EAAI;AAAA,YAAA;YAIhEE,EAAQF,CAAG,UAAzB5Z,EAA6I,UAAA;AAAA;cAAjH,MAAK;AAAA,cAAS,OAAM;AAAA,cAAsB,SAAQ;AAAA,cAAc,YAAY2Z,EAAKC,GAAK5U,CAAC;AAAA,YAAA,KAAMlF,EAAA,QAAQ,GAAA,GAAAma,EAAA;;;;OAIvIla,EAAA,EAAA,GAAAC,EAiBW+D,GAAA,MAAAC,EAjBkBlE,EAAA,OAAK,CAAhB8Z,GAAK5U,wBAAmBA,KAAC;AAAA,QAC3B6U,EAAKD,CAAG,UAAtB5Z,EAeS,UAAA;AAAA;UAfiB,IAAI2Z,EAAKC,GAAK5U,CAAC;AAAA,UAAI,OAAK5E,EAAA,CAAA,wBAA2BwZ,EAAI,SAAI,WAAA,6BAAA,CAAA;AAAA,UAAgD,UAAS;AAAA,UAAO,mBAAe,GAAKD,EAAKC,GAAK5U,CAAC,CAAA;AAAA,QAAA;UAClLpE,EAOM,OAPNqN,IAOM;AAAA,YANJrN,EAA0F,MAAA;AAAA,cAArF,IAAE,GAAK+Y,EAAKC,GAAK5U,CAAC,CAAA;AAAA,cAAW,OAAM;AAAA,YAAA,GAAiCzB,EAAAqW,EAAI,KAAK,GAAA,GAAA1L,EAAA;AAAA,YACvE0L,EAAI,YAAf7Z,EAAA,GAAAC,EAGM,OAHNmO,IAGM;AAAA,cAFJvN,EAAiG,KAAA;AAAA,gBAA9F,OAAM;AAAA,gBAAqC,MAAMgZ,EAAI;AAAA,gBAAU,UAAA;AAAA,cAAA,KAAY9Z,EAAA,YAAY,GAAA,GAAAoa,EAAA;AAAA,cAC1FtZ,EAAyI,UAAA;AAAA,gBAAjI,MAAK;AAAA,gBAAS,OAAM;AAAA,gBAA8B,SAAQ;AAAA,gBAAS,YAAY+Y,EAAKC,GAAK5U,CAAC;AAAA,gBAAG,cAAW;AAAA,cAAA,GAAQ,KAAQ,GAAA0S,EAAA;AAAA,YAAA,YAElI1X,EAAgJ,UAAA;AAAA;cAAjI,MAAK;AAAA,cAAS,OAAM;AAAA,cAA8B,SAAQ;AAAA,cAAS,YAAY2Z,EAAKC,GAAK5U,CAAC;AAAA,cAAG,cAAW;AAAA,YAAA,GAAQ,KAAQ,GAAAmV,EAAA;AAAA,UAAA;UAEzIvZ,EAKM,OALNgX,IAKM;AAAA,YAJQgC,EAAI,MACEA,EAAI,SAAI,gBAA1B5Z,EAAwH,SAAA;AAAA;cAA/E,KAAK4Z,EAAI;AAAA,cAAK,UAAA;AAAA,cAAS,SAAQ;AAAA,cAAY,cAAYI,EAAUJ,CAAG;AAAA,YAAA,mBAC7FA,EAAI,SAAI,gBAAxB5Z,EAA6E,OAAA;AAAA;cAAtC,KAAK4Z,EAAI;AAAA,cAAM,KAAKI,EAAUJ,CAAG;AAAA,YAAA,yBACxE5Z,EAAuG,UAAA;AAAA;cAAvF,KAAG,GAAK4Z,EAAI,GAAG;AAAA,cAAyB,OAAOI,EAAUJ,CAAG;AAAA,cAAG,SAAQ;AAAA,YAAA,yBAHvF5Z,EAAqF,OAAA;AAAA;cAA/D,OAAKI,EAAE2Z,EAAIH,CAAG,CAAA;AAAA,cAAG,MAAK;AAAA,cAAO,cAAYI,EAAUJ,CAAG;AAAA,YAAA;;;;;;;;;;;;;AC5DpF,UAAM5Y,IAAQC,GAAA,GACRiI,IAAMlI,EAAM,MAA6BvB,EAAO,SAAS;;MAI7DS,EAEOC,EAAA,QAAA,WAAA,EAFe,IAAIQ,EAAAuI,CAAA,EAAA,GAA1B,MAEO;AAAA,QADLtI,EAA6F,UAAA;AAAA,UAArF,OAAM;AAAA,UAAyB,MAAK;AAAA,UAAU,eAAeD,EAAAuI,CAAA;AAAA,QAAA,KAAOpJ,EAAA,KAAK,GAAA,GAAAG,EAAA;AAAA,MAAA;MAEnFW,EAEM,OAFNmB,EAEMpB,EAAAK,CAAA,GAFY;AAAA,QAAG,IAAIL,EAAAuI,CAAA;AAAA,QAAI,OAAM;AAAA,QAAmB,SAAA;AAAA,MAAA;QACpDhJ,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;sBCdVJ,EAAA,GAAA4E,EAWYC,EAVL9E,EAAA,OAAI,MAAA,QAAA,GAAA;AAAA,MACT,OAAM;AAAA,MACL,MAAMA,EAAA;AAAA,MACN,MAAMA,EAAA,OAAO,SAAS;AAAA,MACtB,MAAMA,EAAA,YAAY,8BAAiC;AAAA,MACnD,gBAAcA,cAAY,SAAY,OAAOA,EAAA,OAAO,IAAI;AAAA,IAAA;iBAEzD,MAAuF;AAAA,QAA3EA,EAAA,YAAY,UAAxBC,KAAAC,EAAuF,QAAvFC,EAAuF;QACvFC,EAAQC,EAAA,QAAA,SAAA;AAAA,QACIL,EAAA,aAAZE,EAA4D,QAA5Da,IAA4D0C,EAAdzD,EAAA,IAAI,GAAA,CAAA;;;;;;;;sBCXpDC,EAAA,GAAAC,EAA6C,OAA7CC,IAA6C;AAAA,MAAdC,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;sBCAvCJ,EAAA,GAAAC,EAAyC,OAAzCC,EAAyC;AAAA;;;;;;;;;;;;;;;;;;;;;;ACK3C,UAAMwB,IAAQnB,EAAmBR,GAAA,YAAsB,GACjD,EAAE,MAAAoB,GAAM,SAAAE,EAAA,IAAYL,GAAA,GACpBqZ,IAAWxX,EAAI,EAAK;AAE1B,aAASyX,EAAS3Z,GAAU;AAC1B,MAAAe,EAAM,QAAQ,MAAM,KAAMf,EAAE,OAA4B,SAAS,EAAE;AAAA,IACrE;AACA,aAAS4Z,IAAS;AAChB,MAAAF,EAAS,QAAQ;AAAA,IACnB;2BAIEpa,EAWQ,SAXR+B,EAWQpB,EAAAO,CAAA,GAVM;AAAA,MACX,uBAAuBkZ,EAAA,SAAQ,aAAA;AAAA,MAC/B,sCAAkBA,EAAA,QAAQ,IAAA,CAAA,SAAA,CAAA;AAAA,MAC1B,oCAAWA,EAAA,QAAQ;AAAA,MACnB,QAAAE;AAAA,IAAA;MAED1Z,EAAoH,SAApHmB,EAAoHpB,EAAAS,CAAA,GAA9F;AAAA,QAAE,MAAK;AAAA,QAAQ,QAAQtB,EAAA;AAAA,QAAS,UAAUA,EAAA;AAAA,QAAW,UAAUA,EAAA;AAAA,QAAW,UAAAua;AAAA,MAAA;MACpFrY,EAAAA,OAAO,QAAnBjC,KAAAC,EAAgG,QAAhGa,IAAgG;AAAA,QAA3BX,EAAoBC,EAAA,QAAA,MAAA;AAAA,MAAA;MACzFS,EAAqB,QAAA,MAAA;AAAA,QAAfV,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MACFL,EAAA,QAAQkC,EAAAA,OAAO,QAA3BjC,KAAAC,EAAoG,QAApGc,IAAoG;AAAA,QAA1CZ,EAAmCC,sBAAnC,MAAmC;AAAA,cAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;ACXvF,UAAM4C,IAAOC,GACPuG,IAAKzJ,EAAO,UAAU;AAE5B,aAAS8a,EAAK7Z,GAAe8Z,GAAe;AAC1C,MAAA9X,EAAK,UAAU8X,CAAK,GACL9Z,EAAE,cAA8B,QAAQ,WAAW,GAC3D,cAAA;AAAA,IACT;;MAIiBZ,EAAA,2BAAfE,EAES,UAAA;AAAA;QAFc,MAAK;AAAA,QAAS,OAAM;AAAA,QAA4B,eAAeW,EAAAuI,CAAA;AAAA,QAAK,cAAYpJ,EAAA;AAAA,MAAA;QACrGI,EAA0fC,yBAA1f,MAA0f;AAAA,0BAAreS,EAA8d,OAAA;AAAA,YAAzd,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAe,eAAY;AAAA,UAAA;YAAOA,EAAwZ,QAAA,EAAlZ,GAAE,gZAA8Y;AAAA,UAAA;;;MAE7eA,EAOM,OAAA;AAAA,QAPA,IAAID,EAAAuI,CAAA;AAAA,QAAK,6BAA2BpJ,EAAA,UAAM,yBAAA,CAAA;AAAA,QAAiC,SAASA,EAAA,SAAS,SAAS;AAAA,QAAQ,MAAMA,EAAA,SAAM,UAAa;AAAA,QAAY,cAAYA,EAAA;AAAA,MAAA;SACnKC,EAAA,EAAA,GAAAC,EAKM+D,GAAA,MAAAC,EALiBlE,EAAA,QAAM,CAAhB2a,GAAGC,YAAhB1a,EAKM,OAAA,EAL0B,KAAK0a,KAAE;AAAA,UAC5BD,EAAE,SAAX1a,EAAA,GAAAC,EAAkE,KAAlEc,IAAkEyC,EAAdkX,EAAE,KAAK,GAAA,CAAA;UAC3D7Z,EAEM,OAFN4C,IAEM;AAAA,aADJzD,EAAA,EAAA,GAAAC,EAA4I+D,GAAA,MAAAC,EAApHyW,EAAE,SAAXD,YAAfxa,EAA4I,UAAA;AAAA,cAAzG,KAAKwa;AAAA,cAAO,MAAK;AAAA,cAAS,OAAM;AAAA,cAAyB,SAAK,CAAAtY,MAAEqY,EAAKrY,GAAQsY,CAAK;AAAA,YAAA,KAAMA,CAAK,GAAA,GAAA3V,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;sBClCtI9E,EAAA,GAAAC,EAKM,OALNC,IAKM;AAAA,MAJQH,EAAA,QAAQkC,EAAAA,OAAO,QAA3BjC,KAAAC,EAAoH,QAApHa,IAAoH;AAAA,QAA1CX,EAAmCC,sBAAnC,MAAmC;AAAA,cAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,QAAA;;MACzFA,EAAA,SAASkC,EAAAA,OAAO,SAA1BjC,KAAAC,EAAkG,MAAlGc,IAAkG;AAAA,QAA1CZ,EAAqCC,uBAArC,MAAqC;AAAA,cAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;MAC1EA,EAAA,QAAQkC,EAAAA,OAAO,WAAxBjC,KAAAC,EAAkF,KAAlFwD,IAAkF;AAAA,QAA3BtD,EAAuBC,yBAAvB,MAAuB;AAAA,cAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,QAAA;;MACzDkC,EAAAA,OAAO,WAAlBjC,KAAAC,EAAiF,OAAjF6E,IAAiF;AAAA,QAA7B3E,EAAuBC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BCgB7EH,EAmBU,WAAA;AAAA,MAnBA,OAAKI,EAAA,CAAA,kBAAqBN,EAAA,WAAO,2BAA+BA,EAAA,SAAI,QAAA,oBAAA,CAAA;AAAA,IAAA;MAC5Ec,EAgBM,OAhBNX,IAgBM;AAAA,QAfJW,EAKM,OAAA;AAAA,UALA,mCAAiCd,EAAA,WAAO,gCAAA,CAAA;AAAA,QAAA;UAC5CI,EAGOC,uBAHP,MAGO;AAAA,YAFML,EAAA,YAAXE,EAAwC,OAAA;AAAA;cAAvB,KAAKF,EAAA;AAAA,cAAM,KAAKA,EAAA;AAAA,YAAA,mBAChBA,EAAA,cAAjBE,EAA2F,QAA3Fc,IAA2FyC,EAAfzD,EAAA,KAAK,GAAA,CAAA;;;QAGrFc,EAQM,OARN4C,IAQM;AAAA,UAPK1D,EAAA,gBAATE,EAAmE,KAAnE6E,IAAmEtB,EAAdzD,EAAA,OAAO,GAAA,CAAA;UAC5Dc,EAAkD,MAAlDkE,IAAkDvB,EAAbzD,EAAA,KAAK,GAAA,CAAA;AAAA,UACjCA,EAAA,oBAATE,EAA+E,KAA/E+E,IAA+ExB,EAAlBzD,EAAA,WAAW,GAAA,CAAA;UAC9DA,EAAA,OAAO,UAAjBC,KAAAC,EAEK,MAFLwP,IAEK;AAAA,aADHzP,EAAA,EAAA,GAAAC,EAA2F+D,WAA3DjE,EAAA,OAAK,CAAA,CAAlBoI,GAAG0C,CAAC,GAAG5F,wBAAmBA,KAAC;AAAA,cAAEpE,EAAgB,cAATsH,CAAC,GAAA,CAAA;AAAA,cAAQtH,EAAgB,cAATgK,CAAC,GAAA,CAAA;AAAA,YAAA;;UAE1E1K,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;;MAGD6B,EAAAA,OAAO,UAAlBjC,KAAAC,EAAqF,OAArFqQ,IAAqF;AAAA,QAA5BnQ,EAAsBC,EAAA,QAAA,QAAA;AAAA,MAAA;;;;;;;;;;;;;2BCrBjFH,EAYK,MAAA;AAAA,MAXF,OAAKI,EAAA;AAAA;QAAkCN,EAAA,SAAK;AAAA,QAAkCA,EAAA,WAAO;AAAA,QAAoCA,EAAA,WAAO;AAAA,QAAoCA,EAAA,UAAM;AAAA,MAAA;;MAQ3KI,EAEOC,yBAFP,MAEO;AAAA,SADLJ,EAAA,EAAA,GAAAC,EAA8F+D,GAAA,MAAAC,EAAtElE,EAAA,OAAK,CAAhB8T,GAAK5O,YAAlBhF,EAA8F,OAAA,EAA9D,KAAKgF,KAAC;AAAA,UAAEpE,EAAwB,MAAA,MAAA2C,EAAjBqQ,EAAI,KAAK,GAAA,CAAA;AAAA,UAAQhT,EAAwB,MAAA,MAAA2C,EAAjBqQ,EAAI,KAAK,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;sBC1BpF7T,EAAA,GAAAC,EAMU,WANVC,IAMU;AAAA,MALIH,EAAA,QAAQkC,EAAAA,OAAO,aAA3BhC,EAEO,QAAA;AAAA;QAF2B,OAAKI,EAAA,CAAA,iCAAoCN,EAAA,UAAM,cAAkBA,EAAA,MAAM,EAAA,CAAA;AAAA,QAAK,eAAY;AAAA,MAAA;QACxHI,EAAsDC,sBAAtD,MAAsD;AAAA,UAApCS,EAA6B,gBAAA,EAAd,MAAMd,EAAA,QAAI,MAAA,GAAAe,EAAA;AAAA,QAAA;;OAE7Cd,KAAA4E,EAA0FC,EAAA,IAAtE9E,EAAA,YAAY,EAAA,GAAA,EAAI,OAAM,yBAAA,GAAwB;AAAA,mBAAC,MAAW;AAAA,cAARA,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;;MAClEkC,EAAAA,OAAO,WAAhBjC,KAAAC,EAAmE,KAAnEc,IAAmE;AAAA,QAAZZ,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;ACYnE,UAAMsB,IAAQnB,EAAmBR,GAAA,YAAC,GAC5BwO,IAAM7O,EAAO,WAAW;2BAI5BO,EAOW,YAAA;AAAA,MAPA,8BAA4BF,EAAA,WAAO,2BAAA,CAAA;AAAA,MAAkC,MAAK;AAAA,MAAc,cAAYA,EAAA;AAAA,IAAA;cAC7GE,EAKQ+D,GAAA,MAAAC,EALgBlE,EAAA,SAAO,CAAjB8I,YAAd5I,EAKQ,SAAA;AAAA,QAL0B,KAAK4I,EAAO;AAAA,QAAQ,OAAKxI,EAAA,CAAA,yBAA4BwI,EAAO,QAAQA,EAAO,SAAI,aAAA,0BAA4CA,EAAO,IAAI,EAAA,CAAA;AAAA,MAAA;UACtKhI,EAA4G,SAAA;AAAA,wDAA5Fa,EAAK,QAAAS;AAAA,UAAE,MAAK;AAAA,UAAS,MAAMpC,EAAA,QAAQa,EAAA2N,CAAA;AAAA,UAAM,OAAO1F,EAAO;AAAA,UAAQ,UAAUA,EAAO;AAAA,QAAA;eAAhFnH,EAAA,KAAK;AAAA,QAAA;QACrBb,EAA8D,QAA9DE,IAA8DyC,EAAtBqF,EAAO,KAAK,GAAA,CAAA;AAAA,QACpDhI,EAA8D,QAA9D4C,IAA8DD,EAAtBqF,EAAO,KAAK,GAAA,CAAA;AAAA,QACxCA,EAAO,QAAnB7I,EAAA,GAAAC,EAA+E,QAA/E6E,IAA+EtB,EAArBqF,EAAO,IAAI,GAAA,CAAA;;;;;;;;;;;;;;;;;ACpB3E,UAAM+R,IAAUra,EAAoBR,GAAC,SAA6B,GAC5DoJ,IAAKzJ,EAAO,SAAS;2BAIzBO,EAeM,OAAA;AAAA,MAdH,0BAAwBF,EAAA,YAAO,WAAA,uBAAuCA,cAAQ,0BAA8BA,EAAA,wBAAwB6a,EAAA,SAAO,YAAA,CAAA;AAAA,MAC3I,UAAU7a,EAAA,YAAO,UAAA,IAAmB;AAAA,IAAA;MAExBA,EAAA,YAAO,mBAApBE,EAA6G,SAAA;AAAA;QAAzE,IAAIW,EAAAuI,CAAA;AAAA,sDAAayR,EAAO,QAAAzY;AAAA,QAAE,MAAK;AAAA,QAAW,OAAM;AAAA,MAAA;aAA/ByY,EAAA,KAAO;AAAA,MAAA;MAC5D/Z,EASM,OATNE,IASM;AAAA,QARJF,EAGM,OAHN4C,IAGM;AAAA,UAFJtD,EAAqBC,EAAA,QAAA,OAAA;AAAA,UACRL,EAAA,YAAO,iBAApBE,EAAgG,SAAA;AAAA;YAA7D,OAAM;AAAA,YAAsB,KAAKW,EAAAuI,CAAA;AAAA,UAAA,KAAOpJ,EAAA,UAAU,GAAA,GAAA+E,EAAA;;QAEvFjE,EAGM,OAHNkE,IAGM;AAAA,UAFJ5E,EAAoBC,EAAA,QAAA,MAAA;AAAA,UACPL,EAAA,YAAO,iBAApBE,EAA+F,SAAA;AAAA;YAA5D,OAAM;AAAA,YAAsB,KAAKW,EAAAuI,CAAA;AAAA,UAAA,KAAOpJ,EAAA,SAAS,GAAA,GAAAiF,EAAA;;;;;;;;;;;;;;;ACrB5F,UAAMvD,IAAQ1B,GAQR8a,IAAYnb,EAAO,UAAU,GAC7ByJ,IAAK/H,EAAS,MAAMK,EAAM,OAAOoZ,CAAS,GAC1CC,IAAS1Z,EAAS,MAAM,GAAG+H,EAAG,KAAK,OAAO,GAC1C4R,IAAU3Z,EAAS,MAAM,GAAG+H,EAAG,KAAK,QAAQ,GAC5C6R,IAAc5Z,EAAS,MAAM;AACjC,YAAM6Z,IAAM,CAACxZ,EAAM,eAAeqZ,EAAO,OAAOrZ,EAAM,SAASsZ,EAAQ,KAAK,EAAE,OAAO,OAAO;AAC5F,aAAOE,EAAI,SAASA,EAAI,KAAK,GAAG,IAAI;AAAA,IACtC,CAAC;2BAIChb,EAKM,OAAA;AAAA,MALA,sBAAoBF,EAAA,cAAU,sBAAA,CAAA;AAAA,IAAA;MACrBA,EAAA,SAASkC,EAAAA,OAAO,cAA7BhC,EAAkH,SAAA;AAAA;QAA9E,OAAM;AAAA,QAAkB,KAAKkJ,EAAA;AAAA,MAAA;QAAIhJ,EAAqCC,uBAArC,MAAqC;AAAA,cAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;MAChGI,EAAgEC,EAAA,QAAA,WAAA;AAAA,QAAzD,IAAI+I,EAAA;AAAA,QAAK,aAAc6R,EAAA;AAAA,QAAc,WAAWjb,EAAA;AAAA,MAAA;MAC9CA,EAAA,oBAATE,EAAqF,KAAA;AAAA;QAA9D,IAAI6a,EAAA;AAAA,QAAQ,OAAM;AAAA,MAAA,KAA0B/a,EAAA,WAAW,GAAA,GAAAe,EAAA;MACrEf,EAAA,cAATE,EAAiF,KAAA;AAAA;QAAhE,IAAI8a,EAAA;AAAA,QAAS,OAAM;AAAA,QAAiB,MAAK;AAAA,MAAA,KAAWhb,EAAA,KAAK,GAAA,GAAAgB,EAAA;;;;;;;;;;;;;;;2BC1B5Ed,EAUU,WAAA;AAAA,MAVD,OAAM;AAAA,MAAmB,MAAMF,EAAA;AAAA,MAAO,MAAMA,EAAA;AAAA,IAAA;MACnDc,EAOU,WAPVC,IAOU;AAAA,QANRD,EAA+D,QAA/DE,IAA+D;AAAA,UAA3BZ,EAAoBC,EAAA,QAAA,MAAA;AAAA,QAAA;QACxDS,EAGO,QAHP4C,IAGO;AAAA,UAFL5C,EAAuD,QAAvDiE,IAAuDtB,EAAfzD,EAAA,KAAK,GAAA,CAAA;AAAA,UACjCA,EAAA,aAAZE,EAAiE,QAAjE8E,IAAiEvB,EAAdzD,EAAA,IAAI,GAAA,CAAA;;QAEzDc,EAAmE,QAAnEmE,IAAmE;AAAA,UAA7B7E,EAAsBC,EAAA,QAAA,QAAA;AAAA,QAAA;;MAE9DS,EAAiD,OAAjD4O,IAAiD;AAAA,QAAdtP,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;ACT/C,UAAMqB,IAAQ1B,GACRwZ,IAAQ9X,EAAM,QAAQ/B,EAAO,YAAY,GACzCgP,IAAOtN,EAAS,MAAMK,EAAM,OAAO,MAAM,GAAG,CAAC,CAAC;2BAIlDxB,EAYM,OAAA;AAAA,MAZA,wBAAsBF,EAAA,QAAI,kBAAA,CAAA;AAAA,IAAA;MAC9Bc,EAGM,OAHNX,IAGM;AAAA,QAFQH,EAAA,cAAZE,EAA8F,QAA9Fa,IAA8F0C,EAAfzD,EAAA,KAAK,GAAA,CAAA;SACpFC,EAAA,EAAA,GAAAC,EAAkJ+D,GAAA,MAAAC,EAAvHyK,EAAA,OAAI,CAAfpH,GAAKrC,YAArBhF,EAAkJ,UAAA;AAAA,UAAhH,KAAKgF;AAAA,UAAG,OAAM;AAAA,QAAA;UAAoBpE,EAAqE,OAAA;AAAA,YAA/D,KAAKyG,EAAI;AAAA,YAAM,KAAKA,EAAI;AAAA,YAAM,SAASrC,IAAC,SAAY;AAAA,UAAA;;;MAEhHyJ,EAAA,MAAK,SAAM,KAA3B1O,KAAAC,EAMW,YANXwD,IAMW;AAAA,QALT5C,EAA4B,kBAAjBd,EAAA,KAAK,GAAA,CAAA;AAAA,SAChBC,EAAA,EAAA,GAAAC,EAGQ+D,GAAA,MAAAC,EAHkByK,EAAA,OAAI,CAAfpH,GAAKrC,YAApBhF,EAGQ,SAAA;AAAA,UAHyB,KAAKgF;AAAA,UAAG,OAAM;AAAA,QAAA;UAC7CpE,EAAqD,SAAA;AAAA,YAA9C,MAAK;AAAA,YAAS,MAAMD,EAAA2Y,CAAA;AAAA,YAAQ,SAAStU,MAAC;AAAA,UAAA;UAC7CpE,EAAgE,OAAA;AAAA,YAA1D,KAAKyG,EAAI,SAASA,EAAI;AAAA,YAAM,KAAKA,EAAI,YAAYA,EAAI;AAAA,UAAA;;;;;;;;;;;;;;sBCdjEtH,KAAA4E,EAAoJC,EAApI9E,EAAA,EAAE,GAAA;AAAA,MAAG,OAAKM,EAAA,CAAA,YAAeN,EAAA,UAAM,oBAAwBA,EAAA,0BAA0BA,EAAA,UAAM,kBAAA,CAAA;AAAA,IAAA;iBAAyB,MAAQ;AAAA,QAARI,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;2BCExIH,EAKM,OAAA;AAAA,MALA,0BAAwBF,EAAA,SAAK,qBAAA,CAAA;AAAA,MAA6B,cAAYA,EAAA;AAAA,IAAA;OAC1EC,EAAA,EAAA,GAAAC,EAGW+D,GAAA,MAAAC,EAHmBlE,EAAA,OAAK,CAAjBmE,GAAMe,wBAAmBA,KAAC;AAAA,QACjCf,EAAK,QAAI,aAAlBjE,EAAmP,KAAA;AAAA;UAAvN,OAAM;AAAA,UAAsB,MAAMiE,EAAK;AAAA,UAAO,gBAAcA,EAAK,mBAAmB;AAAA,UAAY,cAAYnE,EAAA,QAAQmE,EAAK,QAAQ;AAAA,QAAA;UAAW/D,EAA4BC,kBAAP6E,CAAC,EAAA;AAAA,UAAmBlF,EAAA,0BAAbE,EAA2C,QAAAc,IAAAyC,EAApBU,EAAK,KAAK,GAAA,CAAA;AAAA,2BACrOjE,EAAuP,UAAA;AAAA;UAAxO,OAAM;AAAA,UAAqB,MAAK;AAAA,UAAU,gBAAciE,EAAK,WAAO;AAAA,UAAY,cAAYnE,EAAA,QAAQmE,EAAK,QAAQ;AAAA,UAAY,SAAK,CAAA/B,MAAE+Y,EAAAA,MAAK,UAAWjW,CAAC;AAAA,QAAA;UAAG9E,EAA4BC,kBAAP6E,CAAC,EAAA;AAAA,UAAmBlF,EAAA,0BAAbE,EAA2C,QAAA6E,IAAAtB,EAApBU,EAAK,KAAK,GAAA,CAAA;AAAA;;;;;;;;;;2BCNxOjE,EAAmF,OAAA;AAAA,MAA7E,4BAA0BF,EAAA,UAAM,wBAAA,CAAA;AAAA,IAAA;MAA+BI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACG/E,UAAMqB,IAAQ1B,GAYRob,IAAmC,EAAE,SAAS,gBAAgB,WAAW,kBAAkB,SAAS,eAAA,GAEpGrF,IAAO1U,EAAS,MAAMK,EAAM,QAAQ,oBAAI,MAAM,GAC9C2Z,IAAMha,EAAoB,MAAM;AACpC,UAAIK,EAAM,UAAW,QAAOA,EAAM;AAClC,YAAM4Z,IAAIvF,EAAK,MAAM,SAAA;AACrB,aAAOuF,KAAK,KAAKA,IAAI,KAAK,YAAYA,KAAK,MAAMA,IAAI,KAAK,cAAc;AAAA,IAC1E,CAAC,GACKC,IAAOla,EAAS,MAAMK,EAAM,QAAQ2Z,EAAI,KAAK,KAAKD,EAAMC,EAAI,KAAK,CAAC,GAClEG,IAAWna;AAAA,MAAS,MACxB,IAAI,KAAK,eAAeK,EAAM,QAAQ,EAAE,SAAS,QAAQ,KAAK,WAAW,OAAO,QAAQ,MAAM,UAAA,CAAW,EAAE,OAAOqU,EAAK,KAAK;AAAA,IAAA,GAGxH0F,IAAMpa,EAAS,MAAM;AACzB,YAAMkE,IAAIwQ,EAAK;AACf,aAAO,GAAGxQ,EAAE,YAAA,CAAa,IAAI,OAAOA,EAAE,SAAA,IAAa,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAOA,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AAAA,IAChH,CAAC;2BAICrF,EAQS,UAAA;AAAA,MARA,OAAKI,EAAA,CAAA,eAAA,gBAAkC+a,EAAA,KAAG,IAAIrb,EAAA,wBAAwBA,EAAA,IAAI,EAAA,CAAA;AAAA,IAAA;MACrEkC,EAAAA,OAAO,QAAnBjC,KAAAC,EAAgG,QAAhGC,IAAgG;AAAA,QAA3BC,EAAoBC,EAAA,QAAA,MAAA;AAAA,MAAA;MACzFS,EAIM,OAJNC,IAIM;AAAA,QAHKf,EAAA,gBAATE,EAA+D,KAA/Dc,IAA+DyC,EAAdzD,EAAA,OAAO,GAAA,CAAA;QACxDc,EAAgI,MAAhI4C,IAAgI;AAAA,cAA/F6X,EAAA,KAAI,GAAA,CAAA;AAAA,UAAmBvb,EAAA,aAAhBE,EAAmF+D,GAAA,EAAA,KAAA,KAAA;AAAA,8BAA7D,MAAE,EAAA;AAAA,YAAAnD,EAAgD,QAAhDiE,IAAgDtB,EAAdzD,EAAA,IAAI,GAAA,CAAA;AAAA,UAAA;;QACzFA,EAAA,6BAAbE,EAAqF,QAAA;AAAA;UAA9D,OAAM;AAAA,UAAoB,UAAUub,EAAA;AAAA,QAAA,KAAQD,EAAA,KAAQ,GAAA,GAAAxW,EAAA;AAAA;MAElE9C,EAAAA,OAAO,WAAlBjC,KAAAC,EAAoF,OAApF+E,IAAoF;AAAA,QAA7B7E,EAAuBC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;sBC1ChFJ,EAAA,GAAAC,EAOU,WAPVC,IAOU;AAAA,MANRW,EAGS,UAHTC,IAGS;AAAA,SAFPd,KAAA4E,EAAmFC,EAAA,IAA/D9E,EAAA,YAAY,EAAA,GAAA,EAAI,OAAM,kBAAA,GAAiB;AAAA,qBAAC,MAAW;AAAA,gBAARA,EAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;;QACxDA,EAAA,SAASkC,EAAAA,OAAO,cAA5BhC,EAA8H,QAAA;AAAA;UAA3F,OAAM;AAAA,UAAmB,aAAWF,EAAA;AAAA,QAAA;UAAWI,EAAqCC,uBAArC,MAAqC;AAAA,gBAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;;MAEtGA,EAAA,aAATE,EAAoD,KAApDwD,IAAoDD,EAAXzD,EAAA,IAAI,GAAA,CAAA;MAC7CI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;;;2BCCVH,EAGM,OAAA;AAAA,MAHA,wBAAsBF,EAAA,SAAI,QAAA,gBAAA,CAAA;AAAA,IAAA;OAC9BC,EAAA,GAAA4E,EAA8FC,EAA9E9E,EAAA,EAAE,GAAA,EAAE,OAAM,sBAAkB;AAAA,mBAAC,MAAqC;AAAA,UAArCI,EAAqCC,uBAArC,MAAqC;AAAA,gBAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;;;MAC/DA,EAAA,eAAekC,EAAAA,OAAO,WAA/BjC,KAAAC,EAAyG,KAAzGC,IAAyG;AAAA,QAAlCC,EAA8BC,yBAA9B,MAA8B;AAAA,cAArBL,EAAA,WAAW,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;ACL/F,UAAMkB,IAAQC,GAAA,GACRiI,IAAMlI,EAAM,MAA6BvB,EAAO,eAAe;2BAInEO,EAOO,QAAA;AAAA,MAPA,2BAAyBF,EAAA,OAAG,oBAAA,CAAA;AAAA,IAAA;MACjCI,EAEOC,EAAA,QAAA,WAAA,EAFe,IAAIQ,EAAAuI,CAAA,EAAA,GAA1B,MAEO;AAAA,QADLtI,EAAsF,KAAA;AAAA,UAAnF,OAAM;AAAA,UAAyB,MAAMd,EAAA,QAAI;AAAA,UAAU,aAAaa,EAAAuI,CAAA;AAAA,QAAA,KAAOpJ,EAAA,KAAK,GAAA,GAAAG,EAAA;AAAA,MAAA;MAEjFW,EAEM,OAFNmB,EAEMpB,EAAAK,CAAA,GAFY;AAAA,QAAG,IAAIL,EAAAuI,CAAA;AAAA,QAAK,iCAAiCpJ,EAAA,SAAK,2BAAA;AAAA,QAAkC,SAAA;AAAA,MAAA;QACpGI,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;ACXd,UAAMqB,IAAQ1B,GAIR0b,IAAOlb,EAAmBR,GAAC,MAAsB,GACjDS,IAAOd,EAAO,SAAS,GACvBkC,IAASR,EAAS,MAAOK,EAAM,UAAU,YAAYA,EAAM,UAAU,UAAUA,EAAM,QAAQ,MAAU,GAEvGia,IAAOta,EAAS,OAAO,EAAE,aAAa,OAAOqa,EAAK,KAAK,GAAG,GAAIha,EAAM,SAAS,CAACG,EAAO,QAAQ,EAAE,yBAAyBH,EAAM,MAAA,IAAU,CAAA,EAAC,EAAK;2BAIlJxB,EAeM,OAAA;AAAA,MAfA,OAAKI,EAAA,CAAA,iBAAoBuB,EAAA,SAAM,kBAAsBA,EAAA,KAAM,EAAA,CAAA;AAAA,MAAM,SAAO8Z,EAAA,KAAI;AAAA,IAAA;MACrE3b,EAAA,OAAO,UAAlBC,KAAAC,EAKM,OALNC,IAKM;AAAA,QAJJmD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAxC,EAA8C,QAAA,EAAxC,OAAM,uBAAA,GAAuB,QAAI,EAAA;AAAA,gBACvCZ,EAEQ+D,GAAA,MAAAC,EAFWlE,EAAA,QAAM,CAAX6D,YAAd3D,EAEQ,SAAA;AAAA,UAFoB,KAAK2D;AAAA,UAAG,OAAM;AAAA,QAAA;YACxC/C,EAA6D,SAAA;AAAA,0DAA7C4a,EAAI,QAAAtZ;AAAA,YAAE,MAAK;AAAA,YAAS,MAAMvB,EAAAJ,CAAA;AAAA,YAAO,OAAOoD;AAAA,UAAA;iBAAxC6X,EAAA,KAAI;AAAA,UAAA;UAA4ClY,EAAAC,EAAA,KAAK,MAAMI,YAAW,MACxF,CAAA;AAAA,QAAA;;MAEF/C,EAOM,OAAA;AAAA,QAPD,OAAM;AAAA,QAA0B,UAAS;AAAA,QAAI,MAAK;AAAA,QAAU,cAAYd,EAAA,MAAG,GAAMA,EAAA,GAAG,oBAAA;AAAA,MAAA;QACvFc,EAKM,OALN4C,IAKM;AAAA,UAJJtD,EAGOC,yBAHP,MAGO;AAAA,YAFML,EAAA,YAAXE,EAAwC,OAAA;AAAA;cAAvB,KAAKF,EAAA;AAAA,cAAM,KAAKA,EAAA;AAAA,YAAA,yBACjCE,EAAgE,OAAA;AAAA;cAApD,OAAM;AAAA,cAAe,MAAK;AAAA,cAAO,cAAYF,EAAA;AAAA,YAAA;;;;;;;;;;;;;;;;AC9BnE,UAAM2B,IAAQnB,iBAA6B;6BAIzCN,EAAsH,SAAA;AAAA,oDAAtGyB,EAAK,QAAAS;AAAA,MAAG,sBAAoBpC,EAAA,SAAK,iBAAA,CAAA;AAAA,MAAyB,gBAAcA,EAAA,QAAK,SAAY;AAAA,IAAA;WAAzF2B,EAAA,KAAK;AAAA,IAAA;;;;;;;;;;;;;;;sBCDrB1B,EAAA,GAAAC,EAIM,OAJNC,IAIM;AAAA,MAHQH,EAAA,UAAUkC,EAAAA,OAAO,UAA7BjC,KAAAC,EAA0G,QAA1Ga,IAA0G;AAAA,QAA9CX,EAAuCC,wBAAvC,MAAuC;AAAA,cAAhBL,EAAA,MAAM,GAAA,CAAA;AAAA,QAAA;;MACzFI,EAAQC,EAAA,QAAA,SAAA;AAAA,MACIL,EAAA,UAAUkC,EAAAA,OAAO,UAA7BjC,KAAAC,EAA0G,QAA1Gc,IAA0G;AAAA,QAA9CZ,EAAuCC,wBAAvC,MAAuC;AAAA,cAAhBL,EAAA,MAAM,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBCc3FC,EAAA,GAAA4E,EAeYC,EAdL9E,EAAA,OAAI,MAAA,KAAA,GAAA;AAAA,MACR,MAAMA,EAAA;AAAA,MACN,qBAAmBA,EAAA,YAAO,aAAA,YAA8BA,SAAO,IAAIA,EAAA,gCAAgCA,EAAA,eAAW,sBAAA,CAAA;AAAA,IAAA;iBAE/G,MAA6E;AAAA,QAAlEkC,EAAAA,OAAO,UAAlBjC,KAAAC,EAA6E,OAA7EC,IAA6E;AAAA,UAA5BC,EAAsBC,EAAA,QAAA,QAAA;AAAA,QAAA;QAC5D6B,EAAAA,OAAO,cAAlBhC,EAA+I,OAAA;AAAA;UAArH,OAAKI,EAAA,CAAA,iBAAoBN,EAAA,QAAI,uBAA2BA,EAAA,SAAK,sBAAA,CAAA;AAAA,QAAA;UAA6BI,EAAqBC,EAAA,QAAA,OAAA;AAAA,QAAA;QACzIS,EAKM,OALNC,IAKM;AAAA,UAJJX,EAGOC,yBAHP,MAGO;AAAA,YAFIL,EAAA,cAATE,EAAqD,KAArDc,IAAqDyC,EAAZzD,EAAA,KAAK,GAAA,CAAA;YACrCA,EAAA,oBAATE,EAAuE,KAAvEwD,IAAuED,EAAlBzD,EAAA,WAAW,GAAA,CAAA;;;QAGzDkC,EAAAA,OAAO,WAAlBjC,KAAAC,EAAgF,OAAhF6E,IAAgF;AAAA,UAA7B3E,EAAuBC,EAAA,QAAA,SAAA;AAAA,QAAA;QAC/D6B,EAAAA,OAAO,UAAlBjC,KAAAC,EAA6E,OAA7E8E,IAA6E;AAAA,UAA5B5E,EAAsBC,EAAA,QAAA,QAAA;AAAA,QAAA;;;;;;;;sBChCzEJ,EAAA,GAAAC,EAAyC,OAAzCC,IAAyC;AAAA,MAAdC,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;sBCAnCJ,EAAA,GAAAC,EAAgC,MAAhCC,EAAgC;AAAA;;;;sBCAhCF,EAAA,GAAAC,EAAkC,OAAlCC,IAAkC;AAAA,MAAdC,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;sBCC5BJ,EAAA,GAAAC,EAOO,QAPPC,IAOO;AAAA,MANLC,EAKOC,yBALP,MAKO;AAAA,SAJLJ,EAAA,EAAA,GAAAC,EAGW+D,GAAA,MAAAC,EAHkBlE,EAAA,MAAI,CAAf+D,GAAKmB;UAAkB,KAAAnB,IAAMmB;AAAA,QAAA;UACjClF,EAAA,aAAakF,IAAC,UAA1BhF,EAA2D,QAA3Da,IAAmD,GAAC;UACpDD,EAAmC,OAAnCE,IAAmCyC,EAAZM,CAAG,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;2BCJhC7D,EAEQ,SAAA;AAAA,MAFA,OAAKI,EAAA,CAAA,YAAeN,EAAA,YAAQ,sBAA0BA,EAAA,8BAA8BA,EAAA,SAAK,iBAAA,CAAA;AAAA,MAAyB,KAAK4b,EAAAA,OAAO;AAAA,IAAA;MACpIxb,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;ACkBZ,UAAMsB,IAAQnB,EAAmBR,GAAA,YAAC,GAC5B,EAAE,MAAAoB,GAAM,SAAAE,EAAA,IAAYL,GAAA;2BAIxBf,EAUQ,SAVR+B,EAUQpB,EAAAO,CAAA,GAVW;AAAA,MAAG,OAAK,CAAA,sBAAyBpB,EAAA,SAAK,6BAAiCA,EAAA,4CAA4CA,EAAA,QAAI,0BAAA;AAAA,MAAkC,aAAWA,EAAA,OAAO,OAAO2B,EAAA,SAAS3B,EAAA,QAAO,CAAA,GAAK,SAAK,EAAA,EAAQ,gBAAgB;AAAA,IAAA;MACrPc,EAKO,QALPC,IAKO;AAAA,QAJLX,EAGOC,sBAHP,MAGO;AAAA,UAFWL,EAAA,QAAQA,EAAA,iBAAxBE,EAA8D+D,GAAA,EAAA,KAAA,KAAA;AAAA,gBAAzBjE,EAAA,QAAI,GAAA,GAAA,CAAA;AAAA,UAAA,WACzCC,KAAAC,EAAkzB,OAAlzBc,IAAkzB,CAAA,GAAAsC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,YAA1uBxC,EAAouB,QAAA,EAA9tB,GAAE,2tBAAA,GAA0tB,MAAA,EAAA;AAAA,UAAA;;;QAG9yBA,EAES,UAFTmB,EAESpB,EAAAS,CAAA,GAFc;AAAA,sDAAWK,EAAK,QAAAS;AAAA,QAAE,OAAM;AAAA,QAA8B,cAAYpC,EAAA,UAAUA,EAAA,WAAQ,aAAA;AAAA,MAAA;gBACzGE,EAAuG+D,GAAA,MAAAC,EAA9ElE,EAAA,SAAO,CAAjB8I,YAAf5I,EAAuG,UAAA;AAAA,UAApE,KAAK4I,EAAO;AAAA,UAAQ,OAAOA,EAAO;AAAA,QAAA,GAAUrF,EAAAqF,EAAO,KAAK,GAAA,GAAA/D,EAAA;;aAD3DpD,EAAA,KAAK;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;AC7B3C,UAAMD,IAAQ1B,GAQR6b,IAAMxa,EAAS,MAAOK,EAAM,WAAW,SAASA,EAAM,OAAO,MAAM,QAAS;sBAIhFzB,KAAA4E,EAYYC,EAXL+W,EAAA,KAAG,GAAA;AAAA,MACR,OAAM;AAAA,MACL,MAAMA,EAAA,UAAG,MAAW7b,EAAA,OAAO;AAAA,MAC3B,MAAM6b,EAAA,UAAG,WAAA,WAA2B;AAAA,MACpC,gBAAc7b,EAAA,UAAO,SAAY;AAAA,MACjC,iBAAeA,EAAA,WAAQ,SAAY;AAAA,IAAA;iBAEpC,MAAgG;AAAA,QAApFkC,EAAAA,OAAO,QAAnBjC,KAAAC,EAAgG,QAAhGC,IAAgG;AAAA,UAA3BC,EAAoBC,EAAA,QAAA,MAAA;AAAA,QAAA;QACzFS,EAAwE,MAAxEC,IAAwE;AAAA,UAA1CX,EAAqCC,uBAArC,MAAqC;AAAA,gBAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;QAChDA,EAAA,eAAekC,EAAAA,OAAO,eAA/BjC,KAAAC,EAAiI,KAAjIc,IAAiI;AAAA,UAArDZ,EAAiDC,6BAAjD,MAAiD;AAAA,gBAArBL,EAAA,WAAW,GAAA,CAAA;AAAA,UAAA;;QACvGA,EAAA,UAAUkC,EAAAA,OAAO,UAA7BjC,KAAAC,EAA8G,QAA9GwD,IAA8G;AAAA,UAA9CtD,EAAuCC,wBAAvC,MAAuC;AAAA,gBAAhBL,EAAA,MAAM,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;ACzBjG,UAAM0B,IAAQ1B,GACR4R,IAAQ9O,EAAmC,EAAE,GAC7C6Y,IAAOta,EAAS,OAAO,EAAE,GAAIK,EAAM,QAAQ,EAAE,mBAAmBA,EAAM,MAAA,IAAU,CAAA,GAAK,GAAIA,EAAM,UAAU,EAAE,qBAAqB,OAAOA,EAAM,OAAO,IAAA,IAAQ,CAAA,EAAC,EAAK;2BAItKxB,EAGS,UAAA;AAAA,MAHA,qBAAmB0R,EAAA,KAAK,CAAA;AAAA,MAAI,SAAO+J,EAAA,KAAI;AAAA,IAAA;MAC9C7a,EAAuJ,OAAA;AAAA,QAAjJ,KAAKd,EAAA;AAAA,QAAM,KAAKA,EAAA;AAAA,QAAM,OAAOA,EAAA;AAAA,QAAQ,QAAQA,EAAA;AAAA,QAAS,SAASA,EAAA;AAAA,QAAS,UAAS;AAAA,QAAS,+BAAM4R,EAAA,QAAK;AAAA,QAAiB,gCAAOA,EAAA,QAAK;AAAA,MAAA;MACtH5R,EAAA,WAAWkC,EAAAA,OAAO,gBAApChC,EAAmG,cAAAa,IAAA;AAAA,QAAtDX,EAAyCC,yBAAzC,MAAyC;AAAA,cAAjBL,EAAA,OAAO,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDhF,UAAM0B,IAAQ1B,GAIRO,IAAOC,EAAoBR,GAAC,MAA0B,GACtDsC,IAAKQ,EAA8B,IAAI,GACvC,EAAE,SAASgZ,EAAA,IAAgBzZ,GAAU9B,GAAM+B,CAAE,GAC7CK,IAAU,MAAM;AACpB,YAAMoZ,IAAQ,SAAS,QAAQ,SAAS,eAAe,mBAAmB,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC;AACjG,MAAIA,KAASzZ,EAAG,OAAO,SAASyZ,CAAK,KAAG,QAAQ,aAAa,QAAQ,OAAO,IAAI,SAAS,WAAW,SAAS,MAAM,GACnHD,EAAA;AAAA,IACF;AAEA,aAASE,EAAGvV,GAAmBvB,GAAW;AACxC,YAAM6W,IAAQ,SAAS,eAAeE,EAAQ/W,CAAC,CAAC;AAChD,MAAK6W,MACLtV,EAAM,eAAA,GACNsV,EAAM,iBAAiB,EAAE,UAAU,WAAW,kCAAkC,EAAE,UAAU,YAA8B,UAAU,OAAO,WAAW,QAAQ,UAAU;AAAA,IAC1K;AACA,UAAM5T,IAAOxI,EAAO,aAAa,GAC3B8M,IAAI,MAAM/K,EAAM,OAAO,QACvBua,IAAU,CAAC/W,MAAc,GAAGiD,CAAI,KAAMjD,IAAIuH,EAAA,IAAOA,EAAA,KAAOA,EAAA,IAAM,CAAC;AAGrE,mBAAe3G,EAAKZ,GAAW;AAC7B,MAAA3E,EAAK,QAAQ,IACb,MAAM2b,GAAA,GACN,SAAS,eAAeD,EAAQ/W,CAAC,CAAC,GAAG,iBAAiB,EAAE,UAAU,WAA6B,OAAO,WAAW,QAAQ,UAAU;AAAA,IACrI;AACA,WAAAiX,EAAa,EAAE,MAAArW,GAAM,OAAO,MAAOvF,EAAK,QAAQ,IAAQ;MAI3CP,EAAA,cAAXC,EAAA,GAAAC,EAKM,OALNC,IAKM;AAAA,SAJJF,EAAA,EAAA,GAAAC,EAGS+D,GAAA,MAAAC,EAHkBlE,EAAA,QAAM,CAAjBuH,GAAKrC,YAArBhF,EAGS,UAAA;AAAA,UAH2B,KAAKgF;AAAA,UAAG,MAAK;AAAA,UAAS,OAAM;AAAA,UAAqB,cAAU,cAAgBA,IAAC,CAAA,KAASqC,EAAI,GAAG;AAAA,UAAK,SAAK,CAAAnF,MAAE0D,EAAKZ,CAAC;AAAA,QAAA;UACrIqC,EAAI,SAASA,EAAI,YAA5BrH,EAA8E,OAAA;AAAA;YAA5C,KAAKqH,EAAI,SAASA,EAAI;AAAA,YAAM,KAAKA,EAAI;AAAA,UAAA,oBACvEtH,EAAA,GAAAC,EAAoC,QAApCwD,EAAoC;AAAA,QAAA;;MAGxC5C,EAsBS,UAAA;AAAA,iBAtBG;AAAA,QAAJ,KAAIwB;AAAA,QAAM,OAAKhC,EAAA,CAAA,eAAkBN,EAAA,OAAO,WAAM,KAAA,qBAAA,CAAA;AAAA,QAAkC,UAAS;AAAA,QAAO,cAAYA,EAAA;AAAA,QAAQ,SAAA2C;AAAA,MAAA;QAC1H7B,EAIM,OAJNkE,IAIM;AAAA,UAHMhF,EAAA,cAAVE,EAA4D,MAA5D+E,IAA4DxB,EAAbzD,EAAA,KAAK,GAAA,CAAA,WACpDE,EAAe,QAAAwP,EAAA;AAAA,UACf5O,EAA2G,UAAA;AAAA,YAAnG,MAAK;AAAA,YAAS,OAAM;AAAA,YAAqB,cAAW;AAAA,YAAS,gCAAOP,EAAA,QAAI;AAAA,UAAA,GAAU,GAAQ;AAAA,QAAA;QAEpGO,EAeM,OAfNyP,IAeM;AAAA,WAdJtQ,EAAA,EAAA,GAAAC,EAaS+D,GAAA,MAAAC,EAbkBlE,EAAA,QAAM,CAAjBuH,GAAKrC,YAArBhF,EAaS,UAAA;AAAA,YAb2B,IAAI+b,EAAQ/W,CAAC;AAAA,YAAI,KAAKA;AAAA,YAAG,OAAM;AAAA,UAAA;YACjEpE,EAGM,OAHN0P,IAGM;AAAA,cAFOjJ,EAAI,YAAfrH,EAAoD,OAAA;AAAA;gBAA/B,KAAKqH,EAAI;AAAA,gBAAM,KAAKA,EAAI;AAAA,cAAA,yBAC7CrH,EAAqE,QAAA;AAAA;gBAAxD,OAAM;AAAA,gBAAe,MAAK;AAAA,gBAAO,cAAYqH,EAAI;AAAA,cAAA;;YAEhDvH,EAAA,OAAO,SAAM,UAA7BE,EAGW+D,GAAA,EAAA,KAAA,KAAA;AAAA,cAFTnD,EAAkJ,KAAA;AAAA,gBAA/I,OAAM;AAAA,gBAA2C,MAAI,IAAMmb,EAAQ/W,IAAC,CAAA,CAAA;AAAA,gBAAS,cAAW;AAAA,gBAAkB,SAAK,CAAA9C,MAAE4Z,EAAG5Z,GAAQ8C,IAAC,CAAA;AAAA,cAAA,GAAO,KAAO,GAAAmJ,EAAA;AAAA,cAC9IvN,EAA8I,KAAA;AAAA,gBAA3I,OAAM;AAAA,gBAA2C,MAAI,IAAMmb,EAAQ/W,IAAC,CAAA,CAAA;AAAA,gBAAS,cAAW;AAAA,gBAAc,SAAK,CAAA9C,MAAE4Z,EAAG5Z,GAAQ8C,IAAC,CAAA;AAAA,cAAA,GAAO,KAAO,GAAAkV,EAAA;AAAA,YAAA;YAE5ItZ,EAGa,cAHb8W,IAGa;AAAA,cAFC5X,EAAA,OAAO,SAAM,UAAzBE,EAAoG,QAApGma,IAAoG5W,EAArCyB,SAAQ,QAAGzB,EAAGzD,EAAA,OAAO,MAAM,GAAA,CAAA;cAC1FI,EAAgFC,EAAA,QAAA,WAAA;AAAA,gBAA1D,OAAOkH;AAAA,gBAAM,OAAOrC;AAAA,cAAA,GAA1C,MAAgF;AAAA,gBAAhC1B,EAAAC,EAAA8D,EAAI,WAAWA,EAAI,GAAG,GAAA,CAAA;AAAA,cAAA;;;;;;;;;;;;;;;;2BCvD9ErH,EAQa,KAAA;AAAA,MAPV,OAAKI,EAAA;AAAA;QAAmCN,EAAA,6CAA6CA,EAAA,SAAS;AAAA,QAAWA,EAAA,wCAAwCA,EAAA,IAAI;AAAA,QAAWA,EAAA,wCAAwCA,EAAA,IAAI;AAAA,MAAA;MAM5M,MAAMA,EAAA;AAAA,IAAA;MACRI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;2BChBTH,EAOI,KAAA;AAAA,MAPA,OAAKI,EAAA,CAAA,gBAAmBN,EAAA,UAAM,cAAkBA,EAAA,MAAM,EAAA,CAAA;AAAA,MAAM,MAAMA,EAAA;AAAA,IAAA;MACxDA,EAAA,QAAQkC,EAAAA,OAAO,QAA3BjC,KAAAC,EAEO,QAFPa,IAEO;AAAA,QADLX,EAAsDC,sBAAtD,MAAsD;AAAA,UAApCS,EAA6B,gBAAA,EAAd,MAAMd,EAAA,QAAI,MAAA,GAAAgB,EAAA;AAAA,QAAA;;MAE7CF,EAAoD,QAApD4C,IAAoDD,EAAfzD,EAAA,KAAK,GAAA,CAAA;AAAA,MAC9BkC,EAAAA,OAAO,WAAnBjC,KAAAC,EAAsE,QAAtE6E,IAAsE;AAAA,QAAf3E,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MACnDL,EAAA,aAAZE,EAA8D,QAA9D8E,IAA8DvB,EAAdzD,EAAA,IAAI,GAAA,CAAA;;;;;;;;;;;ACLxD,UAAMoc,IAAW,CAACC,MAAiB,eAAe,KAAKA,CAAI;2BAIzDnc,EAKK,MAAA;AAAA,MALA,yBAAuBF,EAAA,SAAI,aAAA,gBAAkCA,MAAI,IAAIA,EAAA,sCAAsCA,EAAA,IAAI,EAAA,CAAA;AAAA,IAAA;MAClGA,EAAA,SACdC,EAAA,EAAA,GAAAC,EAA8H+D,GAAA,EAAA,KAAA,EAAA,GAAAC,EAAzGlE,EAAA,OAAK,CAAd6D,GAAGqB,YAAfhF,EAA8H,MAAA,EAAjG,KAAKgF,KAAC;AAAA,QAAEpE,EAAoF,KAAA;AAAA,UAAhF,MAAM+C,EAAE;AAAA,UAAO,KAAKuY,EAASvY,EAAE,IAAI,iBAAiB;AAAA,QAAA,GAAcJ,EAAAI,EAAE,KAAK,GAAA,GAAA1D,EAAA;AAAA,MAAA,cAEpHC,EAAeC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,QAAA,CAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACGnB,UAAMic,IAAO9b,EAAmBR,GAAC,MAA4B,GACvDS,IAAOd,EAAO,cAAc;2BAIhCO,EAkBM,OAAA;AAAA,MAlBA,OAAKI,EAAA,CAAA,mBAAsBN,EAAA,UAAM,2BAA+BA,EAAA,YAAQ,2BAAA,CAAA;AAAA,MAAkC,MAAK;AAAA,IAAA;MACxGkC,EAAAA,OAAO,UAAlBjC,KAAAC,EAAqF,OAArFC,IAAqF;AAAA,QAA5BC,EAAsBC,EAAA,QAAA,QAAA;AAAA,MAAA;MACnEL,EAAA,cAAZE,EAAmE,QAAnEa,IAAmE0C,EAAfzD,EAAA,KAAK,GAAA,CAAA;sBACzDc,EAA4C,QAAA,EAAtC,OAAM,yBAAA,GAAwB,MAAA,EAAA;AAAA,MACzBd,EAAA,MAAM,eAAjBE,EAYM,OAAA;AAAA;QAZmB,OAAM;AAAA,QAAwB,MAAK;AAAA,QAAc,cAAYF,EAAA;AAAA,MAAA;gBACpFE,EAUQ+D,GAAA,MAAAC,EAVWlE,EAAA,OAAK,CAAV8K,YAAd5K,EAUQ,SAAA;AAAA,UAVmB,KAAK4K,EAAE;AAAA,UAAO,OAAM;AAAA,UAAwB,OAAOA,EAAE;AAAA,QAAA;YAC9EhK,EAAyF,SAAA;AAAA,0DAAzEwb,EAAI,QAAAla;AAAA,YAAE,MAAK;AAAA,YAAS,MAAMvB,EAAAJ,CAAA;AAAA,YAAO,OAAOqK,EAAE;AAAA,YAAQ,cAAYA,EAAE;AAAA,UAAA;iBAAhEwR,EAAA,KAAI;AAAA,UAAA;UACpBlc,EAOOC,EAAA,QAAA,aAAA,EAPiB,MAAMyK,EAAA,GAA9B,MAOO;AAAA,aALL7K,KAAAC,EAIM,OAJN8E,IAIM;AAAA,cAHQ8F,EAAE,UAAK,WAAnB7K,EAAA,GAAAC,EAAmI,QAAnI+E,EAAmI,KAClH6F,EAAE,UAAK,WAAxB7K,EAAA,GAAAC,EAAkK,QAAlKwP,EAAkK,MAClKzP,KAAAC,EAAoU,QAApUqQ,EAAoU;AAAA,YAAA;;;;MAKjUrO,EAAAA,OAAO,WAAlBjC,KAAAC,EAAwF,OAAxFia,IAAwF;AAAA,QAA7B/Z,EAAuBC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;2BC5BpFH,EAMM,OAAA;AAAA,MALH,OAAKI,EAAA,CAAGN,EAAA,kBAAc,0BAAA,iBAA+CA,EAAA,UAAM,uBAAA,CAAA;AAAA,MAC3E,OAAKsE,EAAA,EAAA,eAAmBtE,EAAA,OAAK,eAAiBA,EAAA,OAAA,CAAM;AAAA,IAAA;MAEvCA,EAAA,YAAdE,EAAiH,UAAA;AAAA;QAA7F,KAAKF,EAAA;AAAA,QAAM,OAAOA,EAAA;AAAA,QAAO,SAAQ;AAAA,QAAO,WAAU;AAAA,QAAM,UAAUA,EAAA,SAAM,KAAQ;AAAA,MAAA,mBACpGI,EAAeC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,QAAA,CAAA;AAAA,IAAA;;;;;;;;;;;;;2BCEjBH,EAcM,OAAA;AAAA,MAbH,OAAKI,EAAA;AAAA;QAAgCN,EAAA,WAAO;AAAA,QAAkCA,EAAA,sCAAsCA,EAAA,KAAK;AAAA,QAAWA,EAAA,SAAK;AAAA,QAAgCA,EAAA,UAAM;AAAA,MAAA;MAO/K,cAAYA,EAAA;AAAA,IAAA;MAEbc,EAGM,OAHNC,IAGM;AAAA,SAFJd,EAAA,EAAA,GAAAC,EAAoF+D,GAAA,MAAAC,EAA1DlE,EAAA,OAAK,CAAjBmE,GAAMe,YAApBhF,EAAoF,QAAA;AAAA,UAAlD,KAAKgF;AAAA,UAAG,OAAM;AAAA,QAAA,KAAsBf,CAAI,GAAA,CAAA;SAC1ElE,EAAA,EAAA,GAAAC,EAAiH+D,GAAA,MAAAC,EAAvFlE,EAAA,OAAK,CAAjBmE,GAAMe,YAApBhF,EAAiH,QAAA;AAAA,UAA/E,eAAegF;AAAA,UAAG,OAAM;AAAA,UAAmB,eAAY;AAAA,QAAA,KAAUf,CAAI,GAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;sBCP3GlE,EAAA,GAAA4E,EAWYC,EAVL9E,EAAA,OAAI,MAAA,KAAA,GAAA;AAAA,MACR,MAAMA,EAAA;AAAA,MACN,OAAKM,EAAA,CAAA,kBAAqBN,EAAA,UAAK,WAAA,mBAAmCA,EAAA,KAAK,IAAIA,EAAA,WAAO,YAAA,CAAA;AAAA,IAAA;iBAEnF,MAAwC;AAAA,QAA7BA,EAAA,YAAXE,EAAwC,OAAA;AAAA;UAAvB,KAAKF,EAAA;AAAA,UAAM,KAAKA,EAAA;AAAA,QAAA,yBACjCE,EAAkF,OAAA;AAAA;UAArE,OAAKI,EAAA,CAAA,gBAAmBN,EAAA,OAAOA,EAAA,4BAA4BA,EAAA,GAAG,EAAA,CAAA;AAAA,QAAA;QAC/DA,EAAA,cAAZE,EAA+G,QAAA;AAAA;UAA3F,mCAAiCF,EAAA,QAAI,6BAAA,CAAA;AAAA,QAAA,KAAuCA,EAAA,KAAK,GAAA,CAAA;QACzFA,EAAA,iBAAZE,EAA4E,QAA5Ea,IAA4E0C,EAAlBzD,EAAA,QAAQ,GAAA,CAAA;QAClDA,EAAA,YAAQ,aAAxBE,EAA8J,YAAA;AAAA;UAA5H,OAAM;AAAA,UAA4B,OAAOF,EAAA;AAAA,UAAU,KAAI;AAAA,UAAO,yBAAuBA,EAAA,QAAQ;AAAA,QAAA,GAAQyD,EAAAzD,EAAA,QAAQ,IAAG,KAAC,GAAAgB,EAAA;QACnJZ,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;ACxBZ,UAAMkc,IAAS5c,EAAO,oBAAoB;2BAIxCO,EAWU,WAAA;AAAA,MAXA,2BAAyBF,EAAA,WAAO,wBAAA,CAAA;AAAA,IAAA;MACxCmF,GAA+BqX,UAATxc,EAAA,KAAK,CAAA,GAAA,MAAA,EAAA;AAAA,MAC3Bc,EAOM,OAPNX,IAOM;AAAA,QANQH,EAAA,UAAUkC,EAAAA,OAAO,UAA7BjC,KAAAC,EAAoI,QAApIa,IAAoI;AAAA,UAA9CX,EAAuCC,wBAAvC,MAAuC;AAAA,gBAAhBL,EAAA,MAAM,GAAA,CAAA;AAAA,UAAA;;QACnHc,EAGM,OAHNE,IAGM;AAAA,UAFJF,EAAqE,MAArE4C,IAAqE;AAAA,YAApC5C,EAA+B,KAAA,EAA3B,MAAMd,EAAA,UAASA,EAAA,KAAK,GAAA,GAAA+E,EAAA;AAAA,UAAA;UAChD/E,EAAA,QAAQkC,EAAAA,OAAO,QAAxBjC,KAAAC,EAAiG,KAAjG8E,IAAiG;AAAA,YAAvC5E,EAAmCC,sBAAnC,MAAmC;AAAA,kBAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,YAAA;;;QAEvEkC,EAAAA,OAAO,aAArBhC,EAAuI,UAAA;AAAA;UAA5G,MAAK;AAAA,UAAS,OAAM;AAAA,UAAuB,eAAeW,EAAA0b,CAAA;AAAA,UAAQ,cAAW;AAAA,QAAA,GAAe,KAAO,GAAAtX,EAAA;;MAErH/C,EAAAA,OAAO,aAAlBhC,EAAgG,OAAA;AAAA;QAAvE,IAAIW,EAAA0b,CAAA;AAAA,QAAQ,OAAM;AAAA,QAAmB,SAAA;AAAA,MAAA;QAAQnc,EAAoBC,EAAA,QAAA,MAAA;AAAA,MAAA;;;;;;;;;;;;;;;;ACb9F,UAAMkc,IAAS5c,EAAO,mBAAmB;2BAIvCO,EAUK,MAAA;AAAA,MAVD,OAAM;AAAA,MAAgB,gBAAcF,EAAA,UAAO,SAAY;AAAA,IAAA;MACzDmF,GAA+BqX,UAATxc,EAAA,KAAK,CAAA,GAAA,MAAA,EAAA;AAAA,MAC3Bc,EAGM,OAHNC,IAGM;AAAA,QAFJD,EAAoE,MAApEE,IAAoE;AAAA,UAApCF,EAA+B,KAAA,EAA3B,MAAMd,EAAA,UAASA,EAAA,KAAK,GAAA,GAAA0D,EAAA;AAAA,QAAA;QAC/C1D,EAAA,QAAQkC,EAAAA,OAAO,QAAxBjC,KAAAC,EAAgG,KAAhG6E,IAAgG;AAAA,UAAvC3E,EAAmCC,sBAAnC,MAAmC;AAAA,gBAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,UAAA;;;MAEpEkC,EAAAA,OAAO,aAAvBhC,EAGW+D,GAAA,EAAA,KAAA,KAAA;AAAA,QAFTnD,EAAmH,UAAA;AAAA,UAA3G,MAAK;AAAA,UAAS,OAAM;AAAA,UAAsB,eAAeD,EAAA0b,CAAA;AAAA,UAAQ,cAAW;AAAA,QAAA,GAAe,KAAO,GAAAvX,EAAA;AAAA,QAC1GlE,EAA6E,OAAA;AAAA,UAAvE,IAAID,EAAA0b,CAAA;AAAA,UAAQ,OAAM;AAAA,UAAmB,SAAA;AAAA,QAAA;UAAQnc,EAAoBC,EAAA,QAAA,MAAA;AAAA,QAAA;;;;;;;;;;2BCjB3EH,EAA2H,OAAA;AAAA,MAAtH,MAAK;AAAA,MAAQ,0DAAwDF,EAAA,QAAI,wBAAA,CAAA;AAAA,IAAA;MAA+BI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eCuB1Goc,KAAwC;AAAA,EACnD,OAAO;AAAA,EACP,QAAQ;AACV;;;;;;;;;;;;;;;;;;;;;;AAcA,UAAM/a,IAAQ1B,GACR4C,IAAOC,GACP6Z,IAAS,EAAE,MAAM,QAAQ,MAAM,QAAQ,QAAQ,SAAA,GAC/CC,IAAatb,EAAS,MAAM,CAAC,CAACK,EAAM,aAAa,UAAUA,EAAM,YAAY,MAAM,CAACwL,MAAMA,EAAE,SAAS,OAAO,CAAC,GAI7G0P,IAAQ,CAAC1P,MAAyB;AACtC,YAAM,EAAE,MAAM2P,GAAI,GAAGvD,MAAMpM;AAC3B,aAAOoM;AAAA,IACT,GACMwD,IAAQ,CAAC5P,MAAyB0P,EAAM1P,CAAC,GACzC6P,IAAQ,CAAC7P,MAAyB0P,EAAM1P,CAAC,GACzCvG,IAAO,CAACuG,MAAyB0P,EAAM1P,CAAC;2BAI5ChN,EAyBU,WAAA;AAAA,MAzBA,IAAIF,EAAA;AAAA,MAAK,OAAKM,EAAA,CAAA,cAAiBN,EAAA,cAAS,SAAA,mBAAiCA,EAAA,aAAS,uBAAA,CAAA;AAAA,MAA+B,cAAYA,EAAA;AAAA,IAAA;MACrIc,EAA8D,QAA9DC,IAA8D0C,EAAhBzD,EAAA,MAAM,GAAA,CAAA;AAAA,MACpDc,EAiBM,OAjBNE,IAiBM;AAAA,QAhBKhB,EAAA,WAAWA,EAAA,kBAApBE,EAA0E,KAA1EwD,IAA0ED,EAAbzD,EAAA,MAAM,GAAA,CAAA;QAC1DA,EAAA,cAATE,EAAiI,KAAA;AAAA;UAAjH,OAAM;AAAA,UAAqB,MAAMF,EAAA,MAAM;AAAA,QAAA;UAAMc,EAAmC,UAAA,MAAA2C,EAAxBzD,EAAA,MAAM,MAAM,GAAA,CAAA;AAAA,UAAYc,EAA6B,QAAA,MAAA2C,EAApBzD,EAAA,MAAM,IAAI,GAAA,CAAA;AAAA,QAAA;QACxGA,EAAA,aAAXE,EAA8D,OAAA;AAAA;UAA7C,OAAM;AAAA,UAAmB,WAAQF,EAAA;AAAA,QAAA,mBAClCA,EAAA,QAAQkC,EAAAA,OAAO,WAA/BjC,EAAA,GAAAC,EAA4G,OAA5G+E,IAA4G;AAAA,UAAlCjF,EAAA,QAATC,EAAA,GAAAC,EAA6B,WAAXF,EAAA,IAAI,GAAA,CAAA;UAAOI,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;QAC3FL,EAAA,aAAa,UAAxBC,KAAAC,EAOM,OAPNqQ,IAOM;AAAA,UANOoM,EAAA,SAAX1c,EAAA,GAAAC,EAAgJ,OAAhJia,IAAgJ;AAAA,aAA9Fla,EAAA,EAAA,GAAAC,EAAwF+D,GAAA,MAAAC,EAApDlE,EAAA,aAAW,CAApBkN,GAAGhI,OAA9BjF,EAAA,GAAA4E,EAAwFmY,IAAxF/a,EAAwF,EAAtC,KAAKiD,EAAA,GAAC,EAAA,SAAA,MAAU6X,EAAM7P,CAAC,GAAA,EAAG,IAAG,OAAA,CAAM,GAAA,MAAA,EAAA;iBACvIjN,EAAA,EAAA,GAAAC,EAIW+D,GAAA,EAAA,KAAA,EAAA,GAAAC,EAJgBlE,EAAA,aAAW,CAApBkN,GAAGhI,wBAAgCA,KAAC;AAAA,YAC3BgI,EAAE,SAAI,WAA/BjN,KAAA4E,EAAiEoY,IAAjEhb,EAAiE;AAAA;;eAAZ6a,EAAM5P,CAAC,CAAA,GAAA,MAAA,EAAA,KAC9BA,EAAE,SAAI,WAApCjN,EAAA,GAAA4E,EAAgFmY,IAAhF/a,EAAgF;AAAA;;eAAtB8a,EAAM7P,CAAC,GAAA,EAAG,IAAG,OAAA,CAAM,GAAA,MAAA,EAAA,MAC7EjN,EAAA,GAAA4E,EAAwCO,IAAxCnD,EAAwC;AAAA;;eAAX0E,EAAKuG,CAAC,CAAA,GAAA,MAAA,EAAA;AAAA,UAAA;;QAG9BlN,EAAA,QAAQA,EAAA,UAAjBC,KAAAC,EAGI,KAHJsQ,IAGI;AAAA,UAFUxQ,EAAA,aAAZE,EAAwD,QAAA;AAAA;YAArC,UAAUF,EAAA;AAAA,UAAA,KAAaA,EAAA,IAAI,GAAA,GAAAmO,EAAA;UAClCnO,EAAA,eAAZE,EAAiZ,QAAA;AAAA;YAA5X,OAAKI,EAAA,CAAA,sBAAyBN,EAAA,WAAM,UAAA,uBAAsCA,EAAA,MAAM,EAAA,CAAA;AAAA,UAAA;YAA0CA,EAAA,cAArCC,KAAAC,EAA6P,OAA7PkO,IAA6P,CAAA,GAAA9K,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,cAAjJxC,EAA2I,QAAA,EAArI,GAAE,kIAAA,GAAiI,MAAA,EAAA;AAAA,YAAA;gBAAWd,EAAA,eAAe0c,EAAO1c,EAAA,MAAM,CAAA,GAAA,CAAA;AAAA,UAAA;;;MAG/XA,EAAA,SAAS,UAApBC,KAAAC,EAIM,OAJNmO,IAIM;AAAA,gBAHJnO,EAES+D,GAAA,MAAAC,EAFWlE,EAAA,SAAO,CAAZkN,YAAfhN,EAES,UAAA;AAAA,UAFqB,KAAKgN,EAAE;AAAA,UAAM,MAAK;AAAA,UAAU,OAAK5M,EAAA,CAAA,sBAAyB4M,EAAE,eAAW,iCAAA,CAAA;AAAA,UAAyC,cAAYA,EAAE;AAAA,UAAQ,SAAK,CAAA9K,MAAEQ,EAAI,UAAWsK,EAAE,IAAI;AAAA,QAAA;WAC9LjN,KAAAC,EAA0I,OAA1I0X,IAA0I;AAAA,YAA1E9W,EAAoE,QAAA;AAAA,cAA7D,GAAG2b,GAAcvP,EAAE,QAAQA,EAAE,IAAI,KAAKuP,GAAc;AAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzDnI,UAAM7Z,IAAOC,GACPqa,IAAY,CAAC/Y,MAAyE,aAAaA;2BAIvGjE,EAOM,OAAA;AAAA,MAPD,OAAM;AAAA,MAAmB,MAAMF,EAAA,MAAG,QAAW;AAAA,MAAY,cAAYA,EAAA,MAAMA,EAAA,QAAQ;AAAA,IAAA;MACtFI,EAKOC,yBALP,MAKO;AAAA,SAJLJ,EAAA,EAAA,GAAAC,EAGW+D,GAAA,MAAAC,EAHmBlE,EAAA,OAAK,CAAjBmE,GAAMe,wBAAmBA,KAAC;AAAA,UAC/BgY,EAAU/Y,CAAI,UAAzBjE,EAAuL,OAAA;AAAA;YAA1J,OAAKI,EAAA,CAAA,sBAAyB6D,EAAK,UAAM,4BAAA,CAAA;AAAA,YAAoC,MAAMA,EAAK,kBAAkB;AAAA,UAAA;YAAWrD,EAA+B,QAAA,MAAA2C,EAAtBU,EAAK,OAAO,GAAA,CAAA;AAAA,UAAA,eACvKlE,KAAA4E,EAA2GsY,IAA3Glb,EAA2G;AAAA;;aAAjFkC,GAAI;AAAA,YAAG,UAAM,CAAG1D,MAAiBmC,YAAenC,GAAM0D,GAAqBe,CAAC;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpB9G,UAAMxD,IAAQ1B,GAuDR4C,IAAOC,GACPkJ,IAAOpM,EAAO,WAAW,GACzBwI,IAAOzG,EAAM,MAAMqK,GACnB4C,IAAO7L,EAAuB,CAAC,GAAGpB,EAAM,QAAQ,CAAC,GACjD0b,IAAUta,EAAI,EAAK;AACzB,IAAAL,GAAM,MAAMf,EAAM,UAAU,CAACsE,MAAO2I,EAAK,QAAQ,CAAC,GAAG3I,CAAC,CAAE;AACxD,UAAMqX,IAAQ,CAACrX,MAA0C,CAAC,CAACA,KAAK,EAAE,aAAaA,MAAMA,EAAE,cAAc;AAErG,mBAAesX,EAAK1c,GAAU;AAE5B,YAAM2c,IADO3c,EAAE,OACI,SAAS,UAAU,SAAS,GACzCwG,IAAOmW,EAAM,MAAM,KAAA;AACzB,UAAKnW,GACL;AAAA,QAAAgW,EAAQ,QAAQ;AAChB,YAAI;AAAE,gBAAM1b,EAAM,SAAS0F,CAAI;AAAA,QAAE,QAAQ;AAAE,UAAAgW,EAAQ,QAAQ;AAAO;AAAA,QAAO;AACzE,YAAI,CAAC1b,EAAM,QAAQ;AACjB,gBAAMmC,IAAI8K,EAAK,OACT6O,IAAO9b,EAAM,MAAM,CAAC,GAAGmC,CAAC,EAAE,QAAA,EAAU,KAAKwZ,CAAK,GAAG,UAAU;AACjE,UAAA1O,EAAK,QAAQ,CAAC,GAAG9K,GAAG,EAAE,WAAW,OAAO,QAAQ2Z,GAAM,WAAWH,EAAMxZ,EAAEA,EAAE,SAAS,CAAC,CAAC,GAAG,MAAAuD,GAAM,OAAM,oBAAI,KAAA,GAAO,eAAe,MAAM,GAAG,CAAC,GAAG,QAAQ,QAAQ;AAAA,QAC9J;AACA,QAAAmW,EAAM,QAAQ,IACdH,EAAQ,QAAQ,IAChBG,EAAM,MAAA;AAAA;AAAA,IACR;AACA,aAASE,EAAU7c,GAAkB;AACnC,MAAIA,EAAE,QAAQ,WAAW,EAAEA,EAAE,WAAWA,EAAE,aAC1CA,EAAE,eAAA,GACAA,EAAE,cAAkC,cAAA;AAAA,IACxC;2BAIEV,EAgDU,WAAA;AAAA,MAhDA,+BAA6BF,EAAA,SAAK,0BAAA,CAAA;AAAA,MAAkC,sBAAoBa,EAAAsH,CAAA,CAAI;AAAA,MAAW,aAAWnI,EAAA,QAAQod,EAAA,iBAAmB;AAAA,IAAA;MACrJtc,EAqBS,UArBTC,IAqBS;AAAA,QApBPX,EAAoBC,EAAA,QAAA,MAAA;AAAA,QACpBS,EAGM,OAHNE,IAGM;AAAA,UAFJF,EAA2E,MAAA;AAAA,YAAtE,OAAOD,EAAAsH,CAAA,CAAI;AAAA,YAAU,OAAM;AAAA,UAAA,KAA8BnI,EAAA,KAAK,GAAA,GAAA0D,EAAA;AAAA,UAC1D1D,EAAA,WAAWA,EAAA,QAApBC,KAAAC,EAAoK,KAApK6E,IAAoK;AAAA,YAA5F/E,EAAA,WAAdC,EAAA,GAAAC,EAA6C,gBAAnBF,EAAA,OAAO,GAAA,CAAA;YAA4BA,EAAA,WAAWA,EAAA,aAA3BE,EAA+C+D,GAAA,EAAA,KAAA,KAAA;AAAA,gBAAd,KAAG;AAAA,YAAA;gBAAcjE,EAAA,IAAI,GAAA,CAAA;AAAA,UAAA;;QAEpJA,EAAA,aAAa,eAAxBE,EAEM,OAAA;AAAA;UAF0B,OAAM;AAAA,UAA6C,cAAU,GAAKF,EAAA,aAAa,MAAM;AAAA,QAAA;WACnHC,EAAA,EAAA,GAAAC,EAAuG+D,GAAA,MAAAC,EAAhFlE,EAAA,cAAY,CAArBsZ,GAAGpU,YAAjBhF,EAAuG,QAAA;AAAA,YAAjE,KAAKgF;AAAA,YAAG,OAAM;AAAA,YAAa,OAAOoU,EAAE;AAAA,UAAA,GAAS7V,EAAA6V,EAAE,QAAQ,GAAA,GAAA5J,EAAA;;QAEpF1P,EAAA,UAAUA,EAAA,QAArBC,KAAAC,EAWM,OAXNqQ,IAWM;AAAA,UAVQvQ,EAAA,eAAZE,EAAoH,QAAA;AAAA;YAA/F,sBAAoBF,EAAA,OAAO,WAAO,aAAiBA,EAAA,OAAO,OAAO,EAAA,CAAA;AAAA,UAAA,GAAQyD,EAAAzD,EAAA,OAAO,KAAK,GAAA,CAAA;UAC1FA,EAAA,aAAhBE,EAQW+D,GAAA,EAAA,KAAA,KAAA;AAAA,YAPTnD,EAA2a,UAAA;AAAA,cAAna,MAAK;AAAA,cAAS,OAAM;AAAA,cAA+B,kBAAkBD,EAAAsH,CAAA,CAAI;AAAA,cAAS,cAAW;AAAA,YAAA;cAAuBrH,EAAsS,OAAA;AAAA,gBAAjS,aAAU;AAAA,gBAAoB,SAAQ;AAAA,gBAAY,MAAK;AAAA,gBAAe,eAAY;AAAA,cAAA;gBAAOA,EAAkM,QAAA,EAA5L,GAAE,0LAAwL;AAAA,cAAA;;YAC1ZA,EAKM,OAAA;AAAA,cALA,OAAOD,EAAAsH,CAAA,CAAI;AAAA,cAAS,OAAM;AAAA,cAAmB,SAAA;AAAA,cAAQ,MAAK;AAAA,YAAA;eAC9DlI,EAAA,EAAA,GAAAC,EAGW+D,GAAA,MAAAC,EAHgBlE,EAAA,MAAI,CAAbgG,GAAGd,wBAAkBA,KAAC;AAAA,+BACZc,KAA1B/F,EAAA,GAAAC,EAAkF,OAAlFiO,EAAkF,WAClFjO,EAAiL,UAAA;AAAA;kBAAlK,MAAK;AAAA,kBAAU,OAAKI,EAAA,CAAA,oBAAuB0F,EAAE,eAAW,+BAAA,CAAA;AAAA,kBAAsC,MAAK;AAAA,kBAAY,SAAK,CAAA5D,MAAEQ,EAAI,QAASoD,EAAE,IAAI;AAAA,gBAAA,GAAMvC,EAAAuC,EAAE,KAAK,GAAA,IAAAoI,EAAA;AAAA,cAAA;;;;;MAM/KtN,EAEM,OAAA;AAAA,QAFD,OAAM;AAAA,QAA4B,UAAS;AAAA,QAAI,MAAK;AAAA,QAAO,cAAYd,EAAA;AAAA,QAAc,aAAWA,EAAA,OAAI,WAAc;AAAA,MAAA;QACrHmF,GAA4CuY,IAAA;AAAA,UAA5B,OAAO/O,EAAA;AAAA,UAAO,KAAK;AAAA,QAAA;;MAErC7N,EAgBM,OAhBNsZ,IAgBM;AAAA,QAfKpa,EAAA,aAATE,EAA6D,KAA7D0X,IAA6DnU,EAAXzD,EAAA,IAAI,GAAA,CAAA,KACtDI,EAaOC,0BAbP,MAaO;AAAA,UAZLS,EAWO,QAAA;AAAA,YAXA,8BAA4Bd,EAAA,UAAM,0BAAA,CAAA;AAAA,YAAiC,QAAO;AAAA,YAAK,cAAYA,EAAA;AAAA,YAAgB,aAAgBsd,GAAI,CAAA,SAAA,CAAA;AAAA,YAAG,WAASG;AAAA,UAAA;YAChJ3c,EAAwE,SAAA;AAAA,cAAjE,OAAM;AAAA,cAAsB,QAAQD,EAAAsH,CAAA,CAAI;AAAA,YAAA,GAAU,WAAO,GAAA2P,EAAA;AAAA,YAChEhX,EAAuI,YAAA;AAAA,cAA5H,OAAOD,EAAAsH,CAAA,CAAI;AAAA,cAAU,OAAM;AAAA,cAA0B,MAAK;AAAA,cAAU,MAAK;AAAA,cAAK,aAAanI,EAAA;AAAA,cAAa,UAAA;AAAA,YAAA;YACnHc,EAOM,OAPNiX,IAOM;AAAA,cANO/X,EAAA,MAAM,UAAjBC,KAAAC,EAGM,OAHN8X,IAGM;AAAA,gBAFUhY,EAAA,MAAM,SAAQ,QAAA,UAA5BE,EAAwe,UAAA;AAAA;kBAAhc,MAAK;AAAA,kBAAS,OAAM;AAAA,kBAAyB,cAAW;AAAA,kBAAiB,gCAAO0C,EAAI,QAAA,QAAA;AAAA,gBAAA;kBAAoB9B,EAA+U,OAAA;AAAA,oBAA1U,SAAQ;AAAA,oBAAY,MAAK;AAAA,oBAAe,eAAY;AAAA,kBAAA;oBAAOA,EAAyQ,QAAA,EAAnQ,GAAE,iQAA+P;AAAA,kBAAA;;gBACzcd,EAAA,MAAM,SAAQ,OAAA,UAA5BE,EAAonB,UAAA;AAAA;kBAA7kB,MAAK;AAAA,kBAAS,OAAM;AAAA,kBAAyB,cAAW;AAAA,kBAAgB,gCAAO0C,EAAI,QAAA,OAAA;AAAA,gBAAA;kBAAmB9B,EAA8d,OAAA;AAAA,oBAAzd,SAAQ;AAAA,oBAAY,MAAK;AAAA,oBAAe,eAAY;AAAA,kBAAA;oBAAOA,EAAwZ,QAAA,EAAlZ,GAAE,gZAA8Y;AAAA,kBAAA;;;cAEzlBd,EAAA,aAAZE,EAAkE,QAAlEyd,IAAkEla,EAAdzD,EAAA,IAAI,GAAA,CAAA;8BACxDc,EAA8L,UAAA;AAAA,gBAAtL,MAAK;AAAA,gBAAS,OAAM;AAAA,gBAAyB,cAAW;AAAA,cAAA;gBAAOA,EAA8G,OAAA;AAAA,kBAAzG,SAAQ;AAAA,kBAAY,MAAK;AAAA,kBAAe,eAAY;AAAA,gBAAA;kBAAOA,EAAwC,QAAA,EAAlC,GAAE,gCAA8B;AAAA,gBAAA;;;;;;MAK1Kd,EAAA,aAAXC,EAAA,GAAAC,EAIM,OAJN+X,IAIM;AAAA,wBAHJnX,EAAkE,QAAA;AAAA,UAA5D,OAAM;AAAA,UAA4B,eAAY;AAAA,QAAA;QACpDA,EAAgC,kBAArBd,EAAA,SAAS,GAAA,CAAA;AAAA,QACRA,EAAA,YAAZC,EAAA,GAAAC,EAA2C,cAAlBF,EAAA,QAAQ,GAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;AClJvC,UAAM0B,IAAQ1B,GACRkM,IAAM7K,EAAS,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAMK,EAAM,OAAO,CAAC,CAAC,CAAC,GAC1E0K,IAAO/K,EAAS,MAAMK,EAAM,UAAUwK,EAAI,SAAS,KAAK,aAAaA,EAAI,SAAS,KAAK,SAAS,KAAK;2BAIzGhM,EAMM,OAAA;AAAA,MAND,OAAM;AAAA,MAAgB,cAAYkM,EAAA,UAAI,OAAY,SAAYA,EAAA;AAAA,MAAO,4BAA0BF,EAAA,KAAG,KAAA;AAAA,IAAA;MACrGpL,EAAoD,QAApDC,IAAoD0C,EAAfzD,EAAA,KAAK,GAAA,CAAA;AAAA,MAC1Cc,EAAoH,QAApHE,IAAoH;AAAA,QAAlFF,EAA2B,UAAA,MAAA2C,EAAhByI,EAAA,KAAG,IAAG,KAAC,CAAA;AAAA,QAAyBlM,EAAA,cAAhBE,EAAgD+D,GAAA,EAAA,KAAA,KAAA;AAAA,UAAzBT,EAAA,UAAMxD,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;MAC/Fc,EAAmI,QAAA;AAAA,QAA7H,OAAM;AAAA,QAAoB,MAAK;AAAA,QAAQ,iBAAc;AAAA,QAAI,iBAAc;AAAA,QAAO,iBAAeoL,EAAA;AAAA,QAAM,cAAYlM,EAAA;AAAA,MAAA;MACzGA,EAAA,OAAZC,EAAA,GAAAC,EAA8N,QAA9N6E,IAA8N;AAAA,YAAhL/E,EAAA,GAAG,GAAA,CAAA;AAAA,QAAeA,EAAA,cAAU,aAAtBE,EAAmK,QAAA;AAAA;UAAnI,OAAM;AAAA,UAAwB,cAAYF,EAAA;AAAA,UAAW,OAAKsE,EAAA,EAAA,cAAA,GAAqB,KAAK,OAAO,KAAK,IAAG,KAAMtE,EAAA,UAAU,CAAA,CAAA,KAAA;AAAA,QAAA;;MAC3LA,EAAA,cAAZE,EAAiE,QAAjE+E,IAAiExB,EAAfzD,EAAA,KAAK,GAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACI3D,UAAMO,IAAOC,EAAoBR,GAAC,MAA0B,GACtDsC,IAAKQ,EAA8B,IAAI,GACvC,EAAE,SAAAH,EAAA,IAAYN,GAAU9B,GAAM+B,CAAE,GAChCS,IAAUpD,EAAO,gBAAgB,GACjCwD,IAAQ,MAAO5C,EAAK,QAAQ;AAClC,WAAA4b,EAAa,EAAE,OAAAhZ,GAAO,mBAIpBjD,EAWS,UAAA;AAAA,eAXG;AAAA,MAAJ,KAAIoC;AAAA,MAAK,OAAM;AAAA,MAAY,UAAUtC,EAAA;AAAA,MAAW,mBAAiBA,EAAA,QAAQa,EAAAkC,CAAA,IAAU;AAAA,MAAY,SAAKO,EAAA,CAAA,MAAAA,EAAA,CAAA;AAAA,gBAAEzC,EAAA8B,CAAA,KAAA9B,EAAA8B,CAAA,EAAA,GAAAY,CAAA;AAAA,IAAA;MAC5GzC,EASM,OAAA;AAAA,QATA,OAAKR,EAAA,CAAA,oBAAuBN,EAAA,SAAI,QAAA,qBAAkCA,EAAA,IAAI,EAAA,CAAA;AAAA,MAAA;QAC/DA,EAAA,SAASA,EAAA,eAAekC,EAAAA,OAAO,UAA1CjC,EAAA,GAAAC,EAKM,OALNa,IAKM;AAAA,UAJJX,EAGOC,wBAHP,MAGO;AAAA,YAFKL,EAAA,cAAVE,EAAsE,MAAA;AAAA;cAApD,IAAIW,EAAAkC,CAAA;AAAA,cAAS,OAAM;AAAA,YAAA,KAAoB/C,EAAA,KAAK,GAAA,GAAAgB,EAAA;YACrDhB,EAAA,oBAATE,EAAwE,KAAxEwD,IAAwED,EAAlBzD,EAAA,WAAW,GAAA,CAAA;;;QAG1DkC,EAAAA,OAAO,WAAlBjC,KAAAC,EAA+D,OAA/D6E,IAA+D;AAAA,UAAd3E,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;QAC9C6B,EAAAA,OAAO,UAAlBjC,KAAAC,EAA6F,OAA7F8E,IAA6F;AAAA,UAA3C5E,EAAqCC,EAAA,QAAA,UAAA,EAAhB,OAAA8C,GAAY;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;AChCzF,UAAMzB,IAAQ1B,GACR4C,IAAOC,GACPzB,IAAOiI,GAAmC,MAAM;AACtD,WAAA3G,GAAU,MAAM;AACd,MAAI,CAACtB,EAAK,SAAS,CAACM,EAAM,cAC1ByE,GAAa/E,EAAK,KAAK,GACvBA,EAAK,MAAM,iBAAiB,sBAAsB,CAACR,MAAMgC,EAAK,UAAWhC,EAAoC,OAAO,IAAI,CAAC;AAAA,IAC3H,CAAC,mBAICV,EASU,WAAA;AAAA,eATG;AAAA,MAAJ,KAAIkB;AAAA,MAAQ,0BAAwBpB,EAAA,SAAK,qBAAA,CAAA;AAAA,MAA6B,MAAMA,EAAA;AAAA,IAAA;MACnFc,EAMU,WANVC,IAMU;AAAA,QALRD,EAAmD,QAAnDE,IAAmDyC,EAAdzD,EAAA,IAAI,GAAA,CAAA;AAAA,QAC3BA,EAAA,kBAAdE,EAAmZ,UAAA;AAAA;UAA1X,MAAK;AAAA,UAAS,OAAM;AAAA,UAAuB,kBAAA;AAAA,UAAgB,wBAAsBF,EAAA,IAAI;AAAA,UAAI,OAAM;AAAA,QAAA;UAASc,EAAyQ,OAAA;AAAA,YAApQ,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAe,eAAY;AAAA,UAAA;YAAOA,EAAmM,QAAA,EAA7L,GAAE,0LAAwL;AAAA,UAAA;;QACrXd,EAAA,aAAZE,EAA8D,QAA9D6E,IAA8DtB,EAAdzD,EAAA,IAAI,GAAA,CAAA;QACxCA,EAAA,eAAZE,EAAoE,QAApE8E,IAAoEvB,EAAhBzD,EAAA,MAAM,GAAA,CAAA;QAC9CkC,EAAAA,OAAO,WAAnBjC,KAAAC,EAAwF,QAAxF+E,IAAwF;AAAA,UAA9B7E,EAAuBC,EAAA,QAAA,SAAA;AAAA,QAAA;;MAEnFS,EAA8C,OAA9C4O,IAA8C;AAAA,QAAdtP,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;ACN5C,UAAM8H,IAAOxI,EAAO,YAAY;sBAI9BM,EAAA,GAAAC,EAaK,MAbLC,IAaK;AAAA,MAZHC,EAWOC,yBAXP,MAWO;AAAA,SAVLJ,EAAA,EAAA,GAAAC,EASK+D,GAAA,MAAAC,EATmBlE,EAAA,OAAK,CAAjBmE,GAAMe,YAAlBhF,EASK,MAAA,EAT2B,KAAKgF,KAAC;AAAA,UACpBf,EAAK,UAAU,eAA/BjE,EAMW+D,GAAA,EAAA,KAAA,KAAA;AAAA,YALTnD,EAA8H,UAAA;AAAA,cAAtH,OAAM;AAAA,cAAyC,MAAK;AAAA,cAAU,eAAa,GAAKD,EAAAsH,CAAA,CAAI,IAAIjD,CAAC;AAAA,YAAA,GAAOzB,EAAAU,EAAK,KAAK,GAAA,GAAApD,EAAA;AAAA,YAClHD,EAGM,OAAA;AAAA,cAHA,IAAE,GAAKD,EAAAsH,CAAA,CAAI,IAAIjD,CAAC;AAAA,cAAI,OAAM;AAAA,cAAmB,SAAA;AAAA,YAAA;cACtCf,EAAK,WAAhBlE,EAAA,GAAAC,EAA2E,OAA3EwD,IAA2ED,EAArBU,EAAK,OAAO,GAAA,CAAA;eAClElE,EAAA,EAAA,GAAAC,EAAmI+D,GAAA,MAAAC,EAAhHC,EAAK,WAAdyZ,YAAV1d,EAAmI,KAAA;AAAA,gBAAhG,KAAK0d,EAAM,OAAOA,EAAM;AAAA,gBAAO,OAAM;AAAA,gBAAoB,MAAMA,EAAM;AAAA,cAAA,GAASna,EAAAma,EAAM,KAAK,GAAA,GAAA7Y,EAAA;;0BAGhI7E,EAAiI,KAAA;AAAA;YAAvH,OAAM;AAAA,YAAmB,MAAMiE,EAAK,QAAI;AAAA,YAAU,gBAAcA,EAAK,mBAAmB;AAAA,UAAA,GAAcV,EAAAU,EAAK,KAAK,GAAA,GAAAa,EAAA;AAAA,QAAA;;;;;;;;;;;2BCnBhI9E,EAEM,OAAA,EAFA,cAAYF,EAAA,SAAK;AAAA,MACrBmF,GAAsD0Y,IAAA,EAAtC,OAAO7d,EAAA,SAAK;AAAA,mBAAE,MAAQ;AAAA,UAARI,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;2BCIxCH,EAII,KAAA;AAAA,MAJA,4BAA0BF,EAAA,QAAI,sBAAA,CAAA;AAAA,MAA8B,MAAMA,EAAA;AAAA,IAAA;MACxDA,EAAA,cAAZE,EAAmE,QAAnEa,IAAmE0C,EAAfzD,EAAA,KAAK,GAAA,CAAA;MACzDc,EAAiG,QAAjGE,IAAiG;AAAA,QAA9DZ,EAAoBC,EAAA,QAAA,MAAA;AAAA,QAAAD,EAAmCC,sBAAnC,MAAmC;AAAA,cAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,QAAA;;MACpEA,EAAA,WAAWkC,EAAAA,OAAO,WAA9BjC,KAAAC,EAAuH,QAAvHwD,IAAuH;AAAA,QAAhDtD,EAAyCC,yBAAzC,MAAyC;AAAA,cAAjBL,EAAA,OAAO,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;ACZ1G,UAAM0B,IAAQ1B,GAIR2B,IAAQnB,iBAA4C,GACpD,EAAE,MAAAY,GAAM,SAAAE,EAAA,IAAYL,GAAA;AAG1B,aAAS6c,EAAO5H,GAAa;AAC3B,YAAM7N,IAAO,KAAK,QAAQ1G,EAAM,SAASD,EAAM,OAAO,KAAKwU,IAAMxU,EAAM,QAAQ,GAAG,IAAI;AACtF,MAAAC,EAAM,QAAQ,KAAK,IAAID,EAAM,OAAO,OAAU,KAAK,IAAIA,EAAM,OAAO,QAAW2G,CAAI,CAAC;AAAA,IACtF;AAEA,aAAS4D,EAAQrL,GAAU;AACzB,YAAMgM,IAAOhM,EAAE,OAA4B;AAC3C,MAAAe,EAAM,QAAQiL,MAAQ,KAAK,OAAO,OAAOA,CAAG;AAAA,IAC9C;2BAIE1M,EAeM,OAfN+B,EAeMpB,EAAAO,CAAA,GAfW;AAAA,MAAG,OAAK,CAAA,mBAAsBpB,EAAA,SAAI,QAAA,uBAAoCA,EAAA,mCAAmCA,EAAA,SAAK,wBAAA;AAAA,IAAA;MAC7Hc,EAA2L,UAAA;AAAA,QAAnL,OAAM;AAAA,QAAuB,MAAK;AAAA,QAAU,cAAYd,EAAA;AAAA,QAAiB,UAAUA,cAAaA,EAAA,eAAe2B,EAAA,SAAK,QAAYA,EAAA,SAAS3B,EAAA;AAAA,QAAO,gCAAO8d,EAAM,EAAA;AAAA,MAAA,GAAM,KAAO,GAAA3d,EAAA;AAAA,MAClLW,EAWE,SAXFmB,EAWEpB,EAAAS,CAAA,GAVe;AAAA,QACf,OAAM;AAAA,QACN,MAAK;AAAA,QACJ,KAAKtB,EAAA;AAAA,QACL,KAAKA,EAAA;AAAA,QACL,MAAMA,EAAA;AAAA,QACN,UAAUA,EAAA;AAAA,QACV,gBAAcA,EAAA,QAAK,SAAY;AAAA,QAC/B,OAAO2B,EAAA,SAAK;AAAA,QACZ,SAAAsK;AAAA,MAAA;MAEHnL,EAAoL,UAAA;AAAA,QAA5K,OAAM;AAAA,QAAuB,MAAK;AAAA,QAAU,cAAYd,EAAA;AAAA,QAAiB,UAAUA,cAAaA,EAAA,eAAe2B,EAAA,SAAK,QAAYA,EAAA,SAAS3B,EAAA;AAAA,QAAO,gCAAO8d,EAAM,CAAA;AAAA,MAAA,GAAK,KAAC,GAAA9c,EAAA;AAAA,IAAA;;;;;;;;;;;;;;ACpC/K,UAAMU,IAAQ1B,GAIR4C,IAAOC,GACPlB,IAAQnB,EAAmBR,GAAA,YAAgB,GAC3C4Q,IAAQvP,EAAS,OAAO,EAAE,mBAAmB,OAAOK,EAAM,MAAM,EAAA,EAAI;AAE1E,WAAAe,GAAMd,GAAO,CAACkI,MAAS;AACrB,MAAIA,EAAK,WAAWnI,EAAM,UAAQkB,EAAK,YAAYiH,CAAI;AAAA,IACzD,CAAC,qBAIC3J,EAUE,SAAA;AAAA,oDATSyB,EAAK,QAAAS;AAAA,MACd,OAAM;AAAA,MACN,MAAK;AAAA,MACJ,WAAWpC,EAAA,UAAO,YAAA;AAAA,MACnB,cAAa;AAAA,MACZ,WAAWA,EAAA;AAAA,MACX,SAASA,EAAA,UAAO,WAAc;AAAA,MAC9B,gBAAcA,EAAA,UAAO,SAAY;AAAA,MACjC,SAAO4Q,EAAA,KAAK;AAAA,IAAA;WARJjP,EAAA,KAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;2BCDhBzB,EAUS,UAAA;AAAA,MAVA,4BAA0BF,EAAA,YAAQ,4BAAgCA,YAAM,0BAA8BA,EAAA,2BAA2BA,EAAA,IAAI,EAAA,CAAA;AAAA,IAAA;MACjIkC,EAAAA,OAAO,QAAlBjC,KAAAC,EAA8E,OAA9EC,IAA8E;AAAA,QAA1BC,EAAoBC,EAAA,QAAA,MAAA;AAAA,MAAA;MACxES,EAOM,OAPNC,IAOM;AAAA,QANJD,EAIM,OAJNE,IAIM;AAAA,WAHJf,KAAA4E,EAA2GC,EAAA,IAAvF9E,EAAA,KAAK,EAAA,GAAA,EAAI,OAAM,uBAAA,GAAsB;AAAA,uBAAC,MAAqC;AAAA,cAArCI,EAAqCC,uBAArC,MAAqC;AAAA,oBAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,cAAA;;;;UAC5EkC,EAAAA,OAAO,YAAYlC,EAAA,YAA5BC,KAAAC,EAAqH,KAArHwD,IAAqH;AAAA,YAA/CtD,EAA2CC,0BAA3C,MAA2C;AAAA,kBAAlBL,EAAA,QAAQ,GAAA,CAAA;AAAA,YAAA;;UAC5FkC,EAAAA,OAAO,QAAlBjC,KAAAC,EAA8E,OAA9E6E,IAA8E;AAAA,YAA1B3E,EAAoBC,EAAA,QAAA,MAAA;AAAA,UAAA;;QAE/D6B,EAAAA,OAAO,WAAlBjC,KAAAC,EAAuF,OAAvF8E,IAAuF;AAAA,UAA7B5E,EAAuBC,EAAA,QAAA,SAAA;AAAA,QAAA;;;;;;;;;;;;;;;;ACzBvF,UAAMqB,IAAQ1B,GAQRwT,IAAOhT,EAAmBR,GAAA,YAAe;AAE/C,aAASgc,EAAGpb,GAAU6L,GAAW;AAC/B,MAAK/K,EAAM,WAASd,EAAE,eAAA,GACtB4S,EAAK,QAAQ/G;AAAA,IACf;2BAIEvM,EASM,OAAA;AAAA,MATD,OAAM;AAAA,MAAiB,cAAYF,EAAA;AAAA,IAAA;cACtCE,EAOY+D,GAAA,MAAAC,EANElE,EAAA,OAAK,CAAVyM,YADTvM,EAOY,KAAA;AAAA,QALT,KAAKuM;AAAA,QACN,OAAM;AAAA,QACL,MAAMzM,EAAA,UAAUA,UAAQyM,CAAC,aAAaA,CAAC;AAAA,QACvC,gBAAcA,MAAM+G,EAAA,iBAAgB;AAAA,QACpC,SAAK,CAAApR,MAAE4Z,EAAG5Z,GAAQqK,CAAC;AAAA,MAAA,KAClBA,CAAC,GAAA,GAAA1L,EAAA;;;;;;;;;2BCvBPb,EAAqL,OAAA;AAAA,MAA/K,uBAAqBF,EAAA,SAAI,WAAgBA,WAAI,UAAA,kBAAiCA,EAAA,wCAAwCA,EAAA,SAAI,UAAA,qBAAA,CAAA;AAAA,IAAA;MAAuCI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;ACE1K,SAAS0d,GAAgBC,GAAQ;AACtC,QAAMzV,IAAM,CAAC9H,GAAMgI,MAAa;AAC9B,UAAMgE,IAAI,WAAWuR,EAAO,UAAUvd,CAAI,KAAK,EAAE;AACjD,WAAO,OAAO,SAASgM,CAAC,KAAKA,KAAK,IAAIA,IAAIhE;AAAA,EAC5C;AACA,SAAO,EAAE,OAAO,KAAK,MAAMF,EAAI,SAAS,GAAG,CAAC,GAAG,OAAOA,EAAI,SAAS,IAAI,GAAG,MAAMA,EAAI,QAAQ,GAAG;AACjG;AAGO,SAAS0V,GAAcD,GAAQE,IAAU,IAAI;AAClD,MAAI,CAACF,KAAUA,EAAO,QAAQ,YAAY,OAAW,QAAO,MAAM;AAAA,EAAC;AACnE,QAAMG,IAAMH,EAAO,aAAa,IAAI,GAC9BI,IAAMJ,EAAO,eAAe;AAClC,MAAI,CAACG,KAAO,CAACC,EAAK,QAAO,MAAM;AAAA,EAAC;AAChC,EAAAJ,EAAO,QAAQ,UAAU;AACzB,QAAM,EAAE,OAAAnQ,GAAO,OAAAwQ,GAAO,MAAAra,EAAI,IAAK,EAAE,GAAG+Z,GAAgBC,CAAM,GAAG,GAAGE,KAC1DI,IAAQF,EAAI,aAAa,kCAAkC,EAAE;AAEnE,MAAI1S,IAAQ,GAAG6S,IAAS;AACxB,QAAMC,IAAS,MAAM;AACnB,UAAMC,KAAQL,EAAI,oBAAoB;AACtC,IAAA1S,IAAQsS,EAAO,eAAeI,EAAI,YAClCG,IAASP,EAAO,gBAAgBI,EAAI,aACpCJ,EAAO,QAAQ,KAAK,MAAMtS,IAAQ+S,EAAK,GACvCT,EAAO,SAAS,KAAK,MAAMO,IAASE,EAAK,GACzCN,EAAI,aAAaM,IAAO,GAAG,GAAGA,IAAO,GAAG,CAAC;AAAA,EAC3C;AACA,EAAAD;AAEA,MAAIE,IAAY,IAAIC,IAAS;AAC7B,QAAMC,IAAa,MAAM;AACvB,UAAMC,KAAKT,EAAI,iBAAiBJ,CAAM;AACtC,IAAAU,IAAYG,GAAG,OACfF,IAAS,CAACE,GAAG,OAAOA,GAAG,gBAAgBA,GAAG,KAAK;AAAA,EACjD;AACA,EAAAD;AAEA,QAAME,IAAY,MAAM,KAAK,EAAE,QAAQjR,EAAK,GAAI,CAACG,IAAG9I,OAAO;AAAA,IACzD,GAAG,KAAK,OAAM,IAAKwG;AAAA,IACnB,GAAG,KAAK,OAAM,IAAK6S;AAAA,IACnB,KAAK,KAAK,OAAM,IAAK,OAAOF;AAAA,IAC5B,KAAK,KAAK,OAAM,IAAK,OAAOA;AAAA,IAC5B,GAAG,KAAK,OAAM,IAAK,MAAM;AAAA,IACzB,OAAO,KAAK,OAAM,IAAK,OAAO;AAAA,IAC9B,MAAMnZ,IAAI;AAAA,EACd,EAAI,GAEI6N,IAAQ,CAACxD,OAAS;AACtB,IAAA4O,EAAI,UAAU,GAAG,GAAGzS,GAAO6S,CAAM,GACjCO,EAAU,QAAQ,CAACxF,GAAGpU,OAAM;AAC1B,MAAIqK,OACF+J,EAAE,KAAKA,EAAE,IAAIA,EAAE,KAAKA,EAAE,KAClBA,EAAE,IAAI,KAAKA,EAAE,IAAI5N,OAAO4N,EAAE,MAAM,MAChCA,EAAE,IAAI,KAAKA,EAAE,IAAIiF,OAAQjF,EAAE,MAAM,MAEvC6E,EAAI,UAAS,GACbA,EAAI,IAAI7E,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAG,GAAG,KAAK,KAAK,CAAC,GACrC6E,EAAI,YAAYQ,EAAOrF,EAAE,IAAI,GAC7B6E,EAAI,cAAc7E,EAAE,OACpB6E,EAAI,KAAI;AAER,eAASjQ,KAAIhJ,KAAI,GAAGgJ,KAAI,KAAK,IAAIhJ,KAAI,GAAG4Z,EAAU,MAAM,GAAG5Q,MAAK;AAC9D,cAAMa,KAAI+P,EAAU5Q,EAAC,GACf3I,KAAI,KAAK,MAAM+T,EAAE,IAAIvK,GAAE,GAAGuK,EAAE,IAAIvK,GAAE,CAAC;AACzC,QAAIxJ,MAAKvB,MACTma,EAAI,UAAS,GACbA,EAAI,OAAO7E,EAAE,GAAGA,EAAE,CAAC,GACnB6E,EAAI,OAAOpP,GAAE,GAAGA,GAAE,CAAC,GACnBoP,EAAI,cAAcO,GAClBP,EAAI,eAAe,IAAI5Y,KAAIvB,KAAQ,KACnCma,EAAI,YAAY,KAChBA,EAAI,OAAM;AAAA,MACZ;AAAA,IACF,CAAC,GACDA,EAAI,cAAc;AAAA,EACpB;AAEA,MAAIY,IAAM;AACV,QAAMC,IAAO,MAAM;AAAE,IAAAjM,EAAM,EAAI,GAAGgM,IAAMX,EAAI,sBAAsBY,CAAI;AAAA,EAAG,GACnE7I,KAAQ,MAAM;AAAE,IAAI,CAACmI,KAAS,CAACS,MAAKA,IAAMX,EAAI,sBAAsBY,CAAI;AAAA,EAAG,GAC3EC,KAAQ,MAAM;AAAE,IAAAb,EAAI,qBAAqBW,CAAG,GAAGA,IAAM;AAAA,EAAG,GACxDG,KAAe,MAAOlB,EAAO,cAAc,SAASiB,GAAK,IAAK9I,GAAK,GACnEgJ,KAAW,MAAM;AAAE,IAAAX,KAAcF,KAAOvL,EAAM,EAAK;AAAA,EAAG,GACtDqM,IAAU,MAAM;AAAE,IAAAR,KAAkBN,KAAOvL,EAAM,EAAK;AAAA,EAAG,GAEzDsM,KAAgB,IAAIjB,EAAI,iBAAiBgB,CAAO;AACtD,EAAAC,GAAc,QAAQrB,EAAO,cAAc,iBAAiB,EAAE,YAAY,IAAM,iBAAiB,CAAC,cAAc,SAAS,OAAO,EAAC,CAAE;AACnI,QAAMsB,IAASlB,EAAI,aAAa,8BAA8B;AAC9D,EAAAkB,GAAQ,mBAAmB,UAAUF,CAAO;AAC5C,QAAMG,KAAe,OAAOnB,EAAI,kBAAmB,aAAa,IAAIA,EAAI,eAAee,EAAQ,IAAI;AACnG,SAAII,KAAcA,GAAa,QAAQvB,CAAM,IAAQI,EAAI,iBAAiB,UAAUe,EAAQ,GAC5FnB,EAAO,cAAc,iBAAiB,oBAAoBkB,EAAY,GAElEZ,IAAOvL,EAAM,EAAK,IAAQoD,GAAK,GAC5B,MAAM;AACX,IAAA8I,MACAI,GAAc,WAAU,GACxBC,GAAQ,sBAAsB,UAAUF,CAAO,GAC/CG,IAAc,WAAU,GACxBnB,EAAI,oBAAoB,UAAUe,EAAQ,GAC1CnB,EAAO,cAAc,oBAAoB,oBAAoBkB,EAAY,GACzE,OAAOlB,EAAO,QAAQ;AAAA,EACxB;AACF;AAGO,SAASwB,GAAmBvW,IAAQ,UAAU;AACnD,QAAMwW,IAAQ,CAAC,GAAGxW,EAAM,iBAAiB,qBAAqB,CAAC,EAAE,IAAI,CAACqH,MAAM2N,GAAc3N,CAAC,CAAC;AAC5F,SAAO,MAAMmP,EAAM,QAAQ,CAACC,MAASA,EAAI,CAAE;AAC7C;AAGA,SAASxW,KAAY;AACnB,MAAI,OAAO,WAAa,IAAa,QAAO;AAC5C,QAAMhC,IAAM,OAAO,YAAY,GAAG;AAClC,MAAIA,EAAI,SAAS,cAAc,KAAK,kBAAkB,KAAKA,CAAG,EAAG,QAAO;AACxE,QAAMP,IAAOO,EAAI,MAAM,MAAM,EAAE,CAAC;AAChC,SAAO,CAAC,GAAG,SAAS,iBAAiB,2BAA2B,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,MAAM,MAAM,EAAE,CAAC,MAAMP,CAAI;AAChH;AACA,IAAIuC,MAAa;AACf,QAAMC,IAAO,MAAMqW,GAAmB,QAAQ;AAC9C,EAAI,SAAS,eAAe,YAAW,SAAS,iBAAiB,oBAAoBrW,CAAI,IACpFA;AACP;;;;;;;;;;AC9HA,UAAMzH,IAAQ1B,GACRge,IAASlb,EAA8B,IAAI;AACjD,QAAI4c,IAAO,MAAM;AAAA,IAAC;AAClB,UAAMvJ,IAAQ,MAAM;AAElB,UADAuJ,EAAA,GACI,CAAC1B,EAAO,MAAO;AACnB,YAAME,IAAU,OAAO,YAAY,OAAO,QAAQ,EAAE,OAAOxc,EAAM,OAAO,OAAOA,EAAM,OAAO,MAAMA,EAAM,KAAA,CAAM,EAAE,OAAO,CAAC,CAAA,EAAGoJ,CAAC,MAAMA,KAAK,IAAI,CAAC;AAC5I,MAAA4U,IAAOzB,GAAcD,EAAO,OAAOE,CAAO;AAAA,IAC5C;AACA,WAAAxb,GAAUyT,CAAK,GACf1T,GAAM,MAAM,CAACf,EAAM,OAAOA,EAAM,OAAOA,EAAM,IAAI,GAAGyU,CAAK,GACzD/F,GAAgB,MAAMsP,GAAM,mBAI1Bxf,EAA2G,UAAA;AAAA,eAA/F;AAAA,MAAJ,KAAI8d;AAAA,MAAS,eAAY;AAAA,MAAQ,0BAAwBhe,EAAA,SAAK,qBAAA,CAAA;AAAA,IAAA;;;;;;;;;;;;;;;ACPxE,UAAM2B,IAAQnB,EAAmBR,GAAA,YAAgB,GAC3C,EAAE,MAAAoB,GAAM,SAAAE,EAAA,IAAYL,GAAA,GACpBmV,IAAUtT,EAAI,EAAK;sBAIvB7C,EAAA,GAAAC,EAKM,OALN+B,EAKMpB,MALW,EAAE,OAAM,kBAAA,CAAiB,GAAA;AAAA,QACxCC,EAAiG,SAAjGmB,EAAiGpB,EAAAS,CAAA,GAA3E;AAAA,sDAAWK,EAAK,QAAAS;AAAA,QAAE,OAAM;AAAA,QAAY,MAAMgU,EAAA,QAAO,SAAA;AAAA,MAAA;aAAtCzU,EAAA,KAAK;AAAA,MAAA;MACtCb,EAES,UAAA;AAAA,QAFD,OAAM;AAAA,QAAyB,MAAK;AAAA,QAAU,gBAAcsV,EAAA,QAAO,SAAA;AAAA,QAAsB,cAAYpW,EAAA;AAAA,QAAc,SAAKsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAlB,MAAEgU,EAAA,QAAO,CAAIA,EAAA;AAAA,MAAA,KACxIA,EAAA,QAAUpW,EAAA,YAAYA,EAAA,SAAS,GAAA,GAAAe,EAAA;AAAA,IAAA;;;;;;;;;;;;;;;;qBCC3B,CAAAf,EAAA,iBAAiBA,EAAA,iBAA5BE,EAEK,MAAA;AAAA;MAFkC,sCAAoCF,EAAA,UAAM,kCAAA,CAAA;AAAA,MAAyC,aAAU;AAAA,IAAA;OAClIC,EAAA,EAAA,GAAAC,EAAyJ+D,GAAA,MAAAC,EAAjIlE,EAAA,OAAK,CAAjB2f,GAAMza,YAAlBhF,EAAyJ,MAAA;AAAA,QAAzH,KAAKgF;AAAA,QAAI,OAAK5E,EAAA,CAAA,2BAA8Bqf,EAAK,KAAK3f,EAAA,QAAQ,KAAA,8BAAA,CAAA;AAAA,MAAA,GAAyCyD,EAAAkc,EAAK,KAAK,GAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;ACTrJ,UAAMje,IAAQ1B,GAaR2B,IAAQnB,EAAmBR,GAAA,YAAgB,GAC3C,EAAE,MAAAoB,GAAM,SAAAE,EAAA,IAAYL,GAAA,GAGpB2e,IAASve,EAAS,MAAM;AAC5B,YAAMwe,IAAQ,CAAC,GAAGne,EAAM,SAAS,EAAE,KAAK,CAACwL,GAAG+D,MAAMA,EAAE,KAAK,SAAS/D,EAAE,KAAK,MAAM,EAAE,KAAK,CAACoD,MAAM3O,EAAM,MAAM,WAAW2O,EAAE,IAAI,CAAC;AAC3H,aAAOuP,IAAQ,EAAE,MAAMA,EAAM,MAAM,UAAUle,EAAM,MAAM,MAAMke,EAAM,KAAK,MAAM,MAAM,EAAE,MAAM,IAAI,UAAUle,EAAM,MAAM,QAAQ,OAAO,EAAE,EAAA;AAAA,IAC3I,CAAC,GAEKme,IAAYhd,EAAI8c,EAAO,MAAM,QAAQle,EAAM,eAAeA,EAAM,UAAU,CAAC,GAAG,QAAQ,EAAE,GACxFqe,IAAO1e,EAAS,MAAMue,EAAO,MAAM,QAAQE,EAAU,KAAK,GAG1DE,IAAU3e,EAAS,MAAM;AAC7B,YAAMkE,IAAIqa,EAAO,MAAM,SAAS,QAAQ,OAAO,EAAE;AACjD,aAAO,CAACra,EAAE,MAAM,GAAG,CAAC,GAAG,GAAIA,EAAE,MAAM,CAAC,EAAE,MAAM,SAAS,KAAK,EAAG,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IACzF,CAAC;AAED,aAAS3C,EAAKqd,GAAkBC,GAAkB;AAChD,MAAAJ,EAAU,QAAQG;AAClB,YAAM1V,IAAS2V,EAAS,QAAQ,OAAO,EAAE;AACzC,MAAAve,EAAM,QAAQ4I,IAAS0V,IAAW1V,IAAS;AAAA,IAC7C;2BAIErK,EAeM,OAfN+B,EAeMpB,EAAAO,CAAA,GAfW;AAAA,MAAG,OAAK,CAAA,kBAAqBpB,EAAA,SAAI,QAAA,sBAAmCA,EAAA,SAAK,uBAAA;AAAA,IAAA;MACxFc,EAES,UAAA;AAAA,QAFD,OAAM;AAAA,QAAuB,cAAYd,EAAA;AAAA,QAAY,OAAO+f,EAAA;AAAA,QAAO,UAAU/f,EAAA;AAAA,QAAW,UAAMsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAlB,MAAEQ,EAAMR,EAAO,OAA6B,OAAOwd,EAAA,MAAO,QAAQ;AAAA,MAAA;gBACtK1f,EAAmF+D,GAAA,MAAAC,EAA/DlE,EAAA,WAAS,CAAdsQ,YAAfpQ,EAAmF,UAAA;AAAA,UAAnD,KAAKoQ,EAAE;AAAA,UAAO,OAAOA,EAAE;AAAA,QAAA,GAAS7M,EAAA6M,EAAE,KAAK,GAAA,GAAAvP,EAAA;;MAEzED,EAUE,SAVFmB,EAUEpB,EAAAS,CAAA,GATe;AAAA,QACf,OAAM;AAAA,QACN,MAAK;AAAA,QACL,WAAU;AAAA,QACV,cAAa;AAAA,QACZ,gBAActB,EAAA,QAAK,SAAY;AAAA,QAC/B,UAAUA,EAAA;AAAA,QACV,OAAOggB,EAAA;AAAA,QACP,SAAK1c,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAlB,MAAEQ,EAAKmd,EAAA,OAAO3d,EAAO,OAA4B,KAAK;AAAA,MAAA;;;;;;;;;;;;;;;;;;;ACzDlE,UAAMlB,IAAQC,GAAA,GACRiI,IAAMlI,EAAM,MAA6BvB,EAAO,YAAY;;MAIhES,EAEOC,EAAA,QAAA,WAAA,EAFe,IAAIQ,EAAAuI,CAAA,EAAA,GAA1B,MAEO;AAAA,QADLtI,EAA6F,UAAA;AAAA,UAArF,OAAM;AAAA,UAAyB,MAAK;AAAA,UAAU,eAAeD,EAAAuI,CAAA;AAAA,QAAA,KAAOpJ,EAAA,KAAK,GAAA,GAAAG,EAAA;AAAA,MAAA;MAEnFW,EAIM,OAJNmB,EAIMpB,EAAAK,CAAA,GAJY;AAAA,QAAG,IAAIL,EAAAuI,CAAA;AAAA,QAAK,OAAK,CAAA,cAAiBpJ,EAAA,SAAI,QAAA,eAA4BA,EAAA,IAAI,EAAA;AAAA,QAAK,SAAA;AAAA,MAAA;QACjFA,EAAA,cAAVE,EAA0D,MAA1Dc,IAA0DyC,EAAbzD,EAAA,KAAK,GAAA,CAAA;QACzCA,EAAA,aAATE,EAAqD,KAArDwD,IAAqDD,EAAXzD,EAAA,IAAI,GAAA,CAAA;QAC9CI,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBZ,UAAMqB,IAAQ1B,GAaRoL,IAAS,CAACN,MAAwB,OAAOA,KAAM,WAAW,IAAI,KAAK,aAAapJ,EAAM,QAAQ,EAAE,OAAO,YAAY,UAAUA,EAAM,UAAU,EAAE,OAAOoJ,CAAC,IAAIA;2BAI/J5K,EAQM,OAAA;AAAA,MARA,OAAKI,EAAA,CAAA,YAAeN,WAAI,QAAA,aAA0BA,EAAA,IAAI,IAAIA,EAAA,QAAI,kBAAsBA,EAAA,UAAM,oBAAwBA,EAAA,OAAG,eAAA,CAAA;AAAA,IAAA;MACzHc,EAIM,OAJNX,IAIM;AAAA,QAHJW,EAA0D,QAA1DC,IAA0D0C,EAAxB2H,EAAOpL,EAAA,MAAM,CAAA,GAAA,CAAA;AAAA,QACtCA,EAAA,OAAG,QAAZC,KAAAC,EAAiE,KAAjEc,IAAiEyC,EAAlB2H,EAAOpL,EAAA,GAAG,CAAA,GAAA,CAAA;QAC7CA,EAAA,iBAAZE,EAAkF,QAAlFwD,IAAkFD,EAAlBzD,EAAA,QAAQ,GAAA,CAAA;;MAE9DA,EAAA,aAAZE,EAA0D,QAA1D6E,IAA0DtB,EAAdzD,EAAA,IAAI,GAAA,CAAA;MACpCA,EAAA,YAAZE,EAAuD,QAAvD8E,IAAuDvB,EAAbzD,EAAA,GAAG,GAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACWjD,UAAMwZ,IAAQ7Z,EAAO,UAAU;2BAI7BO,EAmCU,WAAA;AAAA,MAnCA,2BAAyBF,EAAA,YAAQ,yBAAA,CAAA;AAAA,IAAA;MACzCc,EAGM,OAHNX,IAGM;AAAA,QAFJW,EAA+C,MAA/CC,IAA+C0C,EAAZzD,EAAA,IAAI,GAAA,CAAA;AAAA,QAC3BA,EAAA,iBAAZE,EAA2E,QAA3Ec,IAA2EyC,EAAlBzD,EAAA,QAAQ,GAAA,CAAA;;MAE1DA,EAAA,oBAATE,EAAuE,KAAvEwD,IAAuED,EAAlBzD,EAAA,WAAW,GAAA,CAAA;MACrDA,EAAA,UAAXC,EAAA,GAAAC,EAIM,OAJN6E,IAIM;AAAA,QAHJjE,EAAuJ,SAAvJkE,IAAuJ;AAAA,UAAtHlE,EAA2F,SAAA;AAAA,YAApF,MAAK;AAAA,YAAS,MAAMD,EAAA2Y,CAAA;AAAA,YAAO,OAAM;AAAA,YAAW,SAASxZ,EAAA,kBAAa;AAAA,UAAA;UAAkBwD,EAAA,QAAIxD,EAAA,YAAY,GAAA,CAAA;AAAA,QAAA;QAC5Ic,EAAoJ,SAApJ4O,IAAoJ;AAAA,UAAnH5O,EAAyF,SAAA;AAAA,YAAlF,MAAK;AAAA,YAAS,MAAMD,EAAA2Y,CAAA;AAAA,YAAO,OAAM;AAAA,YAAU,SAASxZ,EAAA,kBAAa;AAAA,UAAA;UAAiBwD,EAAA,QAAIxD,EAAA,WAAW,GAAA,CAAA;AAAA,QAAA;QAC5HA,EAAA,YAAbC,EAAA,GAAAC,EAA0K,SAA1Kia,IAA0K;AAAA,UAAzHrZ,EAA6F,SAAA;AAAA,YAAtF,MAAK;AAAA,YAAS,MAAMD,EAAA2Y,CAAA;AAAA,YAAO,OAAM;AAAA,YAAY,SAASxZ,EAAA,kBAAa;AAAA,UAAA;UAAmBwD,EAAA,QAAIxD,EAAA,aAAa,GAAA,CAAA;AAAA,QAAA;;MAEjKc,EAKI,KALJqN,IAKI;AAAA,QAJFrN,EAA+D,QAA/DsN,IAA+D3K,EAAxBzD,EAAA,QAAQ,MAAM,GAAA,CAAA;AAAA,QACzCA,EAAA,QAAQ,UAApBC,EAAA,GAAAC,EAAqF,QAArFmO,IAAqF5K,EAAxBzD,EAAA,QAAQ,MAAM,GAAA,CAAA;QAClEA,EAAA,QAAQ,OAAjBC,EAAA,GAAAC,EAAsE,KAAtEka,IAAsE3W,EAAlBzD,EAAA,QAAQ,GAAG,GAAA,CAAA;QACnDA,EAAA,QAAQ,QAApBC,EAAA,GAAAC,EAA+E,QAA/E0X,IAA+EnU,EAAtBzD,EAAA,QAAQ,IAAI,GAAA,CAAA;;MAE9DA,EAAA,UAATC,EAAA,GAAAC,EAKI,KALJma,IAKI;AAAA,QAJFvZ,EAA8D,QAA9DgX,IAA8DrU,EAAvBzD,EAAA,OAAO,MAAM,GAAA,CAAA;AAAA,QACxCA,EAAA,OAAO,UAAnBC,EAAA,GAAAC,EAAmF,QAAnFigB,IAAmF1c,EAAvBzD,EAAA,OAAO,MAAM,GAAA,CAAA;QAChEA,EAAA,OAAO,OAAhBC,EAAA,GAAAC,EAAoE,KAApE6X,IAAoEtU,EAAjBzD,EAAA,OAAO,GAAG,GAAA,CAAA;QACjDA,EAAA,OAAO,QAAnBC,EAAA,GAAAC,EAA6E,QAA7E8X,IAA6EvU,EAArBzD,EAAA,OAAO,IAAI,GAAA,CAAA;;MAE5DA,EAAA,UAAUA,EAAA,YAAnBC,KAAAC,EAKI,KALJyd,IAKI;AAAA,QAJF7c,EAAgE,QAAhEmX,IAAgExU,EAAzBzD,EAAA,SAAS,MAAM,GAAA,CAAA;AAAA,QAC1CA,EAAA,SAAS,UAArBC,EAAA,GAAAC,EAAuF,QAAvFgY,IAAuFzU,EAAzBzD,EAAA,SAAS,MAAM,GAAA,CAAA;QACpEA,EAAA,SAAS,OAAlBC,EAAA,GAAAC,EAAwE,KAAxEiY,IAAwE1U,EAAnBzD,EAAA,SAAS,GAAG,GAAA,CAAA;QACrDA,EAAA,SAAS,QAArBC,EAAA,GAAAC,EAAiF,QAAjFkY,IAAiF3U,EAAvBzD,EAAA,SAAS,IAAI,GAAA,CAAA;;MAE/DA,EAAA,SAAS,UAAUkC,EAAAA,OAAO,YAApCjC,KAAAC,EAIK,MAJLmY,IAIK;AAAA,QAHHjY,EAEOC,0BAFP,MAEO;AAAA,WADLJ,EAAA,EAAA,GAAAC,EAAgJ+D,GAAA,MAAAC,EAA3HlE,EAAA,UAAQ,CAAjB0E,GAAGQ,YAAfhF,EAAgJ,MAAA;AAAA,YAAhH,KAAKgF;AAAA,YAAI,OAAK5E,EAAA,CAAA,0BAA6BoE,EAAE,YAAQ,kCAAA,CAAA;AAAA,UAAA,GAA4CjB,EAAAiB,EAAE,KAAK,GAAA,CAAA;;;MAG5ItE,EAAmBC,EAAA,QAAA,KAAA;AAAA,IAAA;;;;;;;;;;;;2BCzDrBH,EAUgB,QAAA;AAAA,MATb,OAAKI,EAAA;AAAA;QAAqCN,EAAA,0CAA0CA,EAAA,IAAI;AAAA,QAAWA,EAAA,QAAI;AAAA,QAAoCA,EAAA,QAAI;AAAA,QAAoCA,EAAA,SAAK;AAAA,QAAqCA,EAAA,wBAAwBA,EAAA,MAAM;AAAA,MAAA;MAQ5P,eAAY;AAAA,IAAA;MACbI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;2BCPTH,EAYI,KAAA;AAAA,MAZA,6BAA2BF,EAAA,QAAI,uBAAA,CAAA;AAAA,MAA+B,MAAMA,EAAA;AAAA,IAAA;MACtEc,EAIO,QAJPC,IAIO;AAAA,wBAHLD,EAAkF,QAAA;AAAA,UAA5E,OAAM;AAAA,UAAuB,eAAY;AAAA,QAAA;UAAOA,EAAO,GAAA;AAAA,UAAAA,EAAO,GAAA;AAAA,UAAAA,EAAO,GAAA;AAAA,QAAA;QAChEd,EAAA,cAAXE,EAA8F,OAAA;AAAA;UAA5E,OAAM;AAAA,UAAyB,KAAKF,EAAA;AAAA,UAAQ,KAAKA,EAAA;AAAA,UAAU,SAAQ;AAAA,QAAA,yBACrFE,EAA8I,QAAA;AAAA;UAAjI,OAAM;AAAA,UAAwB,MAAK;AAAA,UAAO,cAAYF,EAAA,YAAY;AAAA,UAAY,eAAaA,EAAA,WAAW,SAAS;AAAA,QAAA;;MAE9Hc,EAKO,QALPiE,IAKO;AAAA,QAJO/E,EAAA,QAAQkC,EAAAA,OAAO,QAA3BjC,KAAAC,EAAyG,QAAzG8E,IAAyG;AAAA,UAA1C5E,EAAmCC,sBAAnC,MAAmC;AAAA,gBAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,UAAA;;QACxFc,EAA8E,QAA9EmE,IAA8E;AAAA,UAA1C7E,EAAmCC,sBAAnC,MAAmC;AAAA,gBAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,UAAA;;QACjDA,EAAA,QAAQkC,EAAAA,OAAO,QAA3BjC,KAAAC,EAAyG,QAAzGwP,IAAyG;AAAA,UAA1CtP,EAAmCC,sBAAnC,MAAmC;AAAA,gBAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,UAAA;;QAC5EA,EAAA,QAAZC,EAAA,GAAAC,EAA0F,QAA1FqQ,IAA0F;AAAA,UAA1CnQ,EAAmCC,sBAAnC,MAAmC;AAAA,gBAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;sBCrB7EC,KAAA4E,EA4CYC,EA5CI9E,EAAA,EAAE,GAAA;AAAA,MAAG,OAAKM,EAAA,CAAA,YAAeN,EAAA,SAAI,QAAA,aAA0BA,EAAA,IAAI,IAAIA,EAAA,QAAI,gBAAA,CAAA;AAAA,IAAA;iBACjF,MA0CO;AAAA,QA1CPI,EA0COC,yBA1CP,MA0CO;AAAA,UAzCLiD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAxC,EAAsC,YAAlC,iCAA6B,EAAA;AAAA,UACjCwC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAxC,EAAwM,KAAA,EAArM,OAAM,gBAAA,GAAgB,+KAA2K,EAAA;AAAA,UACpMwC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAxC,EAA+B,YAA3B,0BAAsB,EAAA;AAAA,0BAC1BA,EAAyP,KAAA,MAAA;AAAA,cAAtP,uKAAqK;AAAA,YAAAA,EAA8C,KAAA,EAA3C,MAAK,aAAA,GAAa,uBAAqB;AAAA,cAAI,iCAA+B;AAAA,UAAA;0BACrPA,EAMK,MAAA,MAAA;AAAA,YALHA,EAAiF,MAAA,MAAA;AAAA,gBAA7E,MAAI;AAAA,cAAAA,EAA6B,gBAArB,cAAY;AAAA,gBAAS,yCAAuC;AAAA,YAAA;YAC5EA,EAEK,MAAA,MAAA;AAAA,gBAFD,4DACF;AAAA,cAAAA,EAAoH,MAAA,MAAA;AAAA,gBAAhHA,EAAsD,YAAlD,+CAA6C;AAAA,gBAAKA,EAAqD,YAAjD,8CAA4C;AAAA,cAAA;;YAE5GA,EAAoC,YAAhC,6BAA2B;AAAA,UAAA;0BAEjCA,EAGS,UAAA,MAAA;AAAA,YAFPA,EAA0H,OAAA;AAAA,cAArH,OAAM;AAAA,cAA+B,MAAK;AAAA,cAAM,cAAW;AAAA,YAAA;YAChEA,EAAuG,oBAA3F,gFAA8E;AAAA,UAAA;UAE5FwC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAxC,EAAoC,YAAhC,+BAA2B,EAAA;AAAA,0BAC/BA,EAKK,MAAA,MAAA;AAAA,YAJHA,EAA6C,YAAzC,sCAAoC;AAAA,YACxCA,EAA+D,YAA3D,wDAAsD;AAAA,YAC1DA,EAAyD,YAArD,kDAAgD;AAAA,YACpDA,EAA0D,YAAtD,mDAAiD;AAAA,UAAA;0BAEvDA,EAGa,cAAA,MAAA;AAAA,YAFXA,EAA2H,WAAxH,sHAAoH;AAAA,YACvHA,EAA8C,gBAAtC,+BAA6B;AAAA,UAAA;UAEvCwC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAxC,EAAmC,YAA/B,8BAA0B,EAAA;AAAA,4BAC9BA,EAQQ,SAAA,MAAA;AAAA,YAPNA,EAAmE,iBAA1D,kDAAgD;AAAA,YACzDA,EAAgG,SAAA,MAAA;AAAA,cAAzFA,EAAiF,MAAA,MAAA;AAAA,gBAA7EA,EAAiB,YAAb,UAAQ;AAAA,gBAAKA,EAAkB,YAAd,WAAS;AAAA,gBAAKA,EAAuB,YAAnB,gBAAc;AAAA,gBAAKA,EAAc,YAAV,OAAK;AAAA,cAAA;;YAC9EA,EAIQ,SAAA,MAAA;AAAA,cAHNA,EAAmF,MAAA,MAAA;AAAA,gBAA/EA,EAAyB,YAArB,kBAAgB;AAAA,gBAAKA,EAAc,YAAV,OAAK;AAAA,gBAAKA,EAAqB,YAAjB,cAAY;AAAA,gBAAKA,EAAc,YAAV,OAAK;AAAA,cAAA;cACzEA,EAAmF,MAAA,MAAA;AAAA,gBAA/EA,EAAyB,YAArB,kBAAgB;AAAA,gBAAKA,EAAc,YAAV,OAAK;AAAA,gBAAKA,EAAqB,YAAjB,cAAY;AAAA,gBAAKA,EAAc,YAAV,OAAK;AAAA,cAAA;cACzEA,EAAuE,MAAA,MAAA;AAAA,gBAAnEA,EAAsB,YAAlB,eAAa;AAAA,gBAAKA,EAAc,YAAV,OAAK;AAAA,gBAAKA,EAAY,YAAR,KAAG;AAAA,gBAAKA,EAAc,YAAV,OAAK;AAAA,cAAA;;;UAGjEwC,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAxC,EAAgC,YAA5B,2BAAuB,EAAA;AAAA,4BAC3BA,EAA8O,KAAA,MAAA;AAAA,cAA3O,4EAA0E;AAAA,YAAAA,EAAe,aAAV,MAAI;AAAA,cAAM,KAAG;AAAA,YAAAA,EAAY,aAAP,GAAC;AAAA,cAAM,0DAAwD;AAAA,YAAAA,EAA8B,cAAxB,mBAAiB;AAAA,cAAO,2CAAyC;AAAA,UAAA;4BAC1OA,EAA2K,OAAA,MAAA;AAAA,YAAtKA,EAAgK,gBAAvJ;AAAA;AAAA;AAAA,qCAA6I,CAAA;AAAA,UAAA;4BAC3JA,EAAM,MAAA,MAAA,MAAA,EAAA;AAAA,4BACNA,EAAiH,KAAA,MAAA;AAAA,YAA9GA,EAA0G,SAAA,MAAA;AAAA,gBAAnG,8BAA4B;AAAA,cAAAA,EAA0B,cAApB,eAAa;AAAA,gBAAO,uCAAqC;AAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;AChD3G,UAAMY,IAAQ1B,GACR2B,IAAQnB,EAAmBR,GAAA,YAAe,GAC1CuP,IAAO,CAACzH,MAAsB;AAAE,MAAAnG,EAAM,QAAQiG,GAAajG,EAAM,OAAOmG,GAAW,EAAE,KAAKpG,EAAM,KAAK,KAAKA,EAAM,OAAO,OAAU,MAAMA,EAAM,MAAM;AAAA,IAAE;2BAIzJxB,EAQM,OAAA;AAAA,MARA,yBAAuBF,EAAA,SAAI,QAAA,iBAAA,CAAA;AAAA,IAAA;MAC/Bc,EAES,UAAA;AAAA,QAFD,OAAM;AAAA,QAAoB,MAAK;AAAA,QAAU,cAAU,YAAcd,EAAA,MAAM,aAAW;AAAA,QAAO,UAAUA,EAAA,YAAY2B,EAAA,SAAS3B,EAAA;AAAA,QAAM,gCAAOuP,EAAI,EAAA;AAAA,MAAA;QAC/IzO,EAAkG,OAAA;AAAA,UAA7F,SAAQ;AAAA,UAAY,MAAK;AAAA,UAAe,eAAY;AAAA,QAAA;UAAOA,EAA4B,QAAA,EAAtB,GAAE,mBAAiB;AAAA,QAAA;;QAE3FA,EAA6L,SAAA;AAAA,QAArL,IAAId,EAAA;AAAA,sDAAoB2B,EAAK,QAAAS;AAAA,QAAE,OAAM;AAAA,QAAqB,MAAK;AAAA,QAAS,WAAU;AAAA,QAAW,MAAMpC,EAAA;AAAA,QAAO,KAAKA,EAAA;AAAA,QAAM,KAAKA,EAAA;AAAA,QAAM,MAAMA,EAAA;AAAA,QAAO,cAAYA,EAAA;AAAA,QAAQ,UAAUA,EAAA;AAAA,MAAA;;;UAAnJ2B,EAAA;AAAA;UAAR,EAAA,QAAR,GAAA;AAAA,QAAsB;AAAA;MACtCb,EAES,UAAA;AAAA,QAFD,OAAM;AAAA,QAAoB,MAAK;AAAA,QAAU,cAAU,YAAcd,EAAA,MAAM,aAAW;AAAA,QAAO,UAAUA,EAAA,YAAaA,SAAG,QAAY2B,EAAA,SAAS3B,EAAA;AAAA,QAAO,gCAAOuP,EAAI,CAAA;AAAA,MAAA;QAChKzO,EAAoH,OAAA;AAAA,UAA/G,SAAQ;AAAA,UAAY,MAAK;AAAA,UAAe,eAAY;AAAA,QAAA;UAAOA,EAA8C,QAAA,EAAxC,GAAE,qCAAmC;AAAA,QAAA;;;;ICTpGsf,4BAAwD,gBAAgB,GAUxEC,4BAA0D,iBAAiB;;;;;;;;;;;;;;ACPxF,UAAM3e,IAAQ1B,GACRsgB,IAAM9f,iBAA6B,GACnCgZ,IAAQ9Y,GAAO0f,IAAe,IAAI,GAClC,EAAE,MAAAhf,GAAM,SAAAE,EAAA,IAAYL,GAAA,GAEpBsf,IAAUlf,EAAS,OAAOmY,IAAQA,EAAM,MAAM,QAAQ8G,EAAI,WAAW5e,EAAM,KAAK,GAChF8e,IAASnf,EAAS,MAAMK,EAAM,QAAQ,CAAC,CAAC8X,GAAO,KAAK,SAAS,CAAC,CAAC9X,EAAM,WAAW;AACtF,aAAS6Y,IAAW;AAClB,MAAIf,IAAOA,EAAM,MAAM,QAAQ9X,EAAM,QAChC4e,EAAI,QAAQ5e,EAAM;AAAA,IACzB;2BAIExB,EAaQ,SAbR+B,EAaQpB,EAAAO,CAAA,GAbW;AAAA,MAAG,yBAAyBof,EAAA,SAAM,qBAAA;AAAA,IAAA;MACnD1f,EASE,SATFmB,EASEpB,EAAAS,CAAA,GARe;AAAA,QACf,OAAM;AAAA,QACN,MAAK;AAAA,QACJ,MAAMT,EAAA2Y,CAAA,IAAQ3Y,EAAA2Y,CAAA,EAAM,KAAK,QAAS3Y,EAAAS,CAAA,EAAQ;AAAA,QAC1C,OAAOtB,EAAA;AAAA,QACP,SAASugB,EAAA;AAAA,QACT,UAAUvgB,EAAA;AAAA,QACV,UAAAua;AAAA,MAAA;MAESva,EAAA,oBAAZE,EAAwE,QAAAa,IAAA;AAAA,QAA/CX,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAAS,EAAgC,iBAAtBd,EAAA,WAAW,GAAA,CAAA;AAAA,MAAA,MACtDI,EAAeC,EAAA,QAAA,WAAA,IAAA,QAAA,QAAA,CAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;ACnBnB,UAAMqB,IAAQ1B,GACR2B,IAAQnB,iBAA6B,GACrCgO,IAAM7O,EAAO,UAAU;AAC7B,WAAAI,GAAQqgB,IAAe,EAAE,OAAAze,GAAO,MAAMN,EAAS,MAAMK,EAAM,QAAQ8M,CAAG,GAAG,MAAMnN,EAAS,MAAM,CAAC,CAACK,EAAM,IAAI,GAAG,mBAI3GxB,EAKW,YAAA;AAAA,MALA,4BAA0BF,EAAA,OAAG,qBAAA,CAAA;AAAA,IAAA;MACxBA,EAAA,eAAdE,EAA4D,UAA5DC,IAA4DsD,EAAlBzD,EAAA,MAAM,GAAA,CAAA;MAChDI,EAEOC,yBAFP,MAEO;AAAA,gBADLH,EAAyI+D,GAAA,MAAAC,EAApHlE,EAAA,SAAO,CAAZ6X,YAAhBhT,EAAyI4b,IAAA;AAAA,UAA1G,KAAK5I,EAAE;AAAA,UAAQ,OAAOA,EAAE;AAAA,UAAQ,UAAUA,EAAE;AAAA,UAAW,aAAaA,EAAE;AAAA,QAAA;qBAAa,MAAa;AAAA,YAAVrU,EAAAC,EAAAoU,EAAE,KAAK,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;ACvBlI,UAAMnW,IAAQ1B,GACR0gB,IAAQrf,EAAS,MAAM,KAAK,IAAI,GAAG,KAAK,IAAIK,EAAM,KAAKA,EAAM,KAAK,CAAC,CAAC;2BAIxExB,EAKQ,QAAA;AAAA,MAJL,OAAKI,EAAA,CAAA,aAAgBN,EAAA,SAAI,QAAA,cAA2BA,EAAA,IAAI,EAAA,CAAA;AAAA,MACxD,OAAKsE,EAAA,EAAA,eAAmB,OAAOoc,EAAA,KAAK,MAAO1gB,EAAA,QAAG,IAAA,EAAA,mBAA8B,OAAOA,EAAA,GAAG,EAAA,IAAA,CAAA,GAAA;AAAA,MACvF,MAAK;AAAA,MACJ,cAAYA,EAAA,SAAK,GAAO0gB,EAAA,KAAK,WAAW1gB,EAAA,GAAG;AAAA,IAAA;;;;;;;;;;;;;;;ACThD,UAAM0B,IAAQ1B,GACR2B,IAAQnB,EAAmBR,GAAA,YAAe,GAC1CwZ,IAAQ9X,EAAM,QAAQ/B,EAAO,WAAW,GACxCyH,IAAO,CAACqF,MAAeA,MAAM,IAAI,WAAW,GAAGA,CAAC;2BAIpDvM,EAGW,YAAA;AAAA,MAHA,OAAKI,EAAA,CAAA,mBAAsBN,EAAA,SAAI,QAAA,oBAAiCA,EAAA,IAAI,EAAA,CAAA;AAAA,MAAM,UAAUA,EAAA;AAAA,IAAA;MAC7Fc,EAA6B,kBAAlBd,EAAA,MAAM,GAAA,CAAA;AAAA,YACjBE,EAA8H+D,GAAA,MAAAC,EAA3G,GAAC,CAANuI,MAAd3L,EAA8H,SAAA,EAAvG,KAAK2L,KAAC;AAAA,UAAE3L,EAA6D,SAAA;AAAA,wDAA7Ca,EAAK,QAAAS;AAAA,UAAE,MAAK;AAAA,UAAS,MAAMvB,EAAA2Y,CAAA;AAAA,UAAQ,OAAO/M;AAAA,QAAA;eAA1C9K,EAAA,KAAK;AAAA,QAAA;QAAwCb,EAA0B,QAAA,MAAA2C,EAAjB2D,EAAKqF,CAAC,CAAA,GAAA,CAAA;AAAA,MAAA;;;;;;;;;2BCP7GvM,EAAkG,QAAA;AAAA,MAA3F,OAAKI,EAAA,CAAA,cAAiBN,EAAA,SAASA,EAAA,mCAAmCA,EAAA,KAAK,EAAA,CAAA;AAAA,IAAA;MAAKI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;;;ACF7F,UAAMqB,IAAQ1B,GAiBR4C,IAAOC;AAEb,mBAAe8d,IAAU;AACvB,YAAM,UAAU,UAAU,UAAUjf,EAAM,MAAM,KAAK;AAAA,CAAI,CAAC,GAC1DkB,EAAK,MAAM;AAAA,IACb;AAEA,aAASqP,IAAW;AAClB,YAAM/K,IAAM,IAAI,gBAAgB,IAAI,KAAK,CAACxF,EAAM,MAAM,KAAK;AAAA,CAAI,IAAI;AAAA,CAAI,GAAG,EAAE,MAAM,aAAA,CAAc,CAAC,GAC3FwL,IAAI,SAAS,cAAc,GAAG;AACpC,MAAAA,EAAE,OAAOhG,GACTgG,EAAE,WAAWxL,EAAM,UACnBwL,EAAE,MAAA,GACF,IAAI,gBAAgBhG,CAAG,GACvBtE,EAAK,UAAU;AAAA,IACjB;sBAIE3C,EAAA,GAAAC,EAYM,OAZNC,IAYM;AAAA,MAXJW,EAAoD,MAApDC,IAAoD0C,EAAbzD,EAAA,KAAK,GAAA,CAAA;AAAA,MAC5Cc,EAAsD,KAAtDE,IAAsDyC,EAAdzD,EAAA,OAAO,GAAA,CAAA;AAAA,MAC/Cc,EAEK,MAFL4C,IAEK;AAAA,gBADHxD,EAAqD+D,GAAA,MAAAC,EAAlClE,EAAA,OAAK,CAAb6J,OAAX5J,EAAA,GAAAC,EAAqD,MAAA,EAA1B,KAAK2J,EAAA,KAASA,CAAI,GAAA,CAAA;;MAE/C/I,EAKM,OALNiE,IAKM;AAAA,QAJJ3E,EAGOC,yBAHP,MAGO;AAAA,UAFLS,EAAyG,UAAA;AAAA,YAAjG,OAAM;AAAA,YAAoC,MAAK;AAAA,YAAU,SAAO6f;AAAA,UAAA,KAAY3gB,EAAA,SAAS,GAAA,CAAA;AAAA,UAC7Fc,EAA8G,UAAA;AAAA,YAAtG,OAAM;AAAA,YAAoC,MAAK;AAAA,YAAU,SAAOmR;AAAA,UAAA,KAAajS,EAAA,aAAa,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;2BC3CxGE,EAOM,OAAA;AAAA,MAPA,uBAAqBF,EAAA,UAAM,mBAAA,CAAA;AAAA,MAA0B,MAAK;AAAA,MAAS,UAAS;AAAA,IAAA;MACpEA,EAAA,QAAQkC,EAAAA,OAAO,aAA3BhC,EAEO,QAAA;AAAA;QAF2B,OAAKI,EAAA,CAAA,iCAAoCN,EAAA,UAAM,cAAkBA,EAAA,MAAM,EAAA,CAAA;AAAA,QAAK,eAAY;AAAA,MAAA;QACxHI,EAAsDC,sBAAtD,MAAsD;AAAA,UAApCS,EAA6B,gBAAA,EAAd,MAAMd,EAAA,QAAI,MAAA,GAAAG,EAAA;AAAA,QAAA;;MAE7CW,EAA6C,MAA7CC,IAA6C0C,EAAbzD,EAAA,KAAK,GAAA,CAAA;AAAA,MAC5BkC,EAAAA,OAAO,WAAhBjC,KAAAC,EAA6D,KAA7Dc,IAA6D;AAAA,QAAZZ,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MAC9C6B,EAAAA,OAAO,WAAlBjC,KAAAC,EAAmF,OAAnFwD,IAAmF;AAAA,QAA7BtD,EAAuBC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;2BCN/EH,EAA+K,QAAA;AAAA,MAAxK,OAAKI,EAAA,CAAA,aAAgBN,EAAA,WAAM,aAAA,cAAgCA,EAAA,MAAM,IAAIA,EAAA,SAAI,aAAA,cAAgCA,EAAA,IAAI,IAAIA,EAAA,SAAI,QAAA,cAA2BA,EAAA,IAAI,EAAA,CAAA;AAAA,IAAA;MAAKI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;2BCDxKH,EAOM,OAAA;AAAA,MANH,OAAKI,EAAA,CAAA,kBAAqBN,EAAA,cAAU,qBAAyBA,EAAA,WAAO,yBAAA,CAAA;AAAA,MACrE,UAAS;AAAA,MACT,MAAK;AAAA,MACJ,cAAYA,EAAA;AAAA,IAAA;MAEbI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;;;;;ACIZ,UAAMsB,IAAQnB,EAAmBR,GAAA,YAAC,GAC5BwO,IAAM7O,EAAO,cAAc;2BAI/BO,EAKM,OAAA;AAAA,MALA,OAAKI,EAAA,CAAA,gBAAmBN,EAAA,SAAK,uBAA2BA,EAAA,SAAI,QAAA,kBAAA,CAAA;AAAA,MAAkC,MAAK;AAAA,MAAc,cAAYA,EAAA;AAAA,IAAA;cACjIE,EAGQ+D,GAAA,MAAAC,EAHgBlE,EAAA,SAAO,CAAjB8I,YAAd5I,EAGQ,SAAA;AAAA,QAH0B,KAAK4I,EAAO;AAAA,QAAO,OAAM;AAAA,MAAA;UACzDhI,EAAgF,SAAA;AAAA,wDAAhEa,EAAK,QAAAS;AAAA,UAAE,MAAK;AAAA,UAAS,MAAMpC,EAAA,QAAQa,EAAA2N,CAAA;AAAA,UAAM,OAAO1F,EAAO;AAAA,QAAA;eAAvDnH,EAAA,KAAK;AAAA,QAAA;UAA2D,MAChF8B,EAAGqF,EAAO,KAAK,GAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;;AChBrB,UAAMnH,IAAQnB,iBAAiB;6BAI7BN,EAOS,UAAA;AAAA,oDAPQyB,EAAK,QAAAS;AAAA,MAAE,OAAM;AAAA,IAAA;MAC5BhC,EAKOC,yBALP,MAKO;AAAA,gBAJLH,EAGW+D,GAAA,MAAAC,EAHWlE,EAAA,SAAO,CAAZ6X;UAA2B,KAAA,OAAAA,KAAC,WAAgBA,IAAIA,EAAE;AAAA,QAAA;iBAC5CA,KAAC,iBAAtB3X,EAAgE,UAAA;AAAA;YAA1B,OAAO2X;AAAA,UAAA,KAAMA,CAAC,GAAA,GAAA1X,EAAA,WACpDD,EAA6E,UAAA;AAAA;YAA7D,OAAO2X,EAAE;AAAA,YAAQ,UAAUA,EAAE;AAAA,UAAA,GAAapU,EAAAoU,EAAE,KAAK,GAAA,GAAA9W,EAAA;AAAA,QAAA;;;WAJtDY,EAAA,KAAK;AAAA,IAAA;;;;;;;;;;;;;;qBCHX3B,EAAA,SAASkC,EAAAA,OAAO,WAA3BjC,KAAAC,EAA0H,OAA1HC,IAA0H;AAAA,MAA3CW,EAAqC,QAAA,MAAA;AAAA,QAA/BV,EAAwBC,yBAAxB,MAAwB;AAAA,cAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;UAEtFA,EAAA,iBADbE,EAKQ,QAAA;AAAA;MAHL,oDAAkDF,EAAA,UAAM,sBAAA,CAAA;AAAA,MACzD,MAAK;AAAA,MACL,oBAAiB;AAAA,IAAA,qBAEnBE,EAAyE,MAAA;AAAA;MAA7D,0BAAwBF,EAAA,UAAM,sBAAA,CAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACT5C,UAAM0B,IAAQ1B,GAQRO,IAAOC,EAAoBR,GAAC,MAA0B,GACtD4gB,IAAa,EAAE,KAAK,OAAO,QAAQ,UAAU,MAAM,QAAQ,UAAU,WAAA;AAE3E,aAASjgB,EAASC,GAAU;AAC1B,MAAAL,EAAK,QAASK,EAAE,OAA8B;AAAA,IAChD;2BAIEV,EAoBU,WAAA;AAAA,MAnBP,OAAKI,EAAA,CAAA,oBAAA,qBAA4CN,EAAA,KAAK,IAAIA,EAAA,YAAQ,aAAA,CAAA;AAAA,MAClE,MAAMA,EAAA;AAAA,MACN,MAAMO,EAAA;AAAA,MACN,UAAAI;AAAA,IAAA;MAEDG,EASU,WATVC,IASU;AAAA,QARImB,EAAAA,OAAO,QAAnBjC,KAAAC,EAAqG,QAArGc,IAAqG;AAAA,UAA3BZ,EAAoBC,EAAA,QAAA,MAAA;AAAA,QAAA;QAC9FS,EAKO,QALP4C,IAKO;AAAA,UAJL5C,EAAuD,QAAvDiE,IAAuDtB,EAAfzD,EAAA,KAAK,GAAA,CAAA;AAAA,UACjCA,EAAA,MAAM,UAAlBC,KAAAC,EAEO,QAFP8E,IAEO;AAAA,oBADL9E,EAA4E+D,GAAA,MAAAC,EAA1DlE,EAAA,MAAI,CAAT6gB,YAAb3gB,EAA4E,QAAA;AAAA,cAAnD,KAAK2gB;AAAA,cAAG,OAAM;AAAA,YAAA,KAA0BA,CAAC,GAAA,CAAA;;;QAGtE/f,EAAuF,QAAvFmE,IAAuFxB,EAA/CzD,EAAA,cAAc4gB,EAAWlf,EAAM,KAAK,CAAA,GAAA,CAAA;AAAA,MAAA;MAE9EZ,EAGM,OAHN4O,IAGM;AAAA,QAFJtP,EAAQC,EAAA,QAAA,SAAA;AAAA,QACG6B,EAAAA,OAAO,WAAlBjC,KAAAC,EAAyF,OAAzFqQ,IAAyF;AAAA,UAA7BnQ,EAAuBC,EAAA,QAAA,SAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBzF,UAAME,IAAOC,EAAoBR,GAAC,MAA0B,GACtDsC,IAAKQ,EAA8B,IAAI,GACvC,EAAE,SAAAH,EAAA,IAAYN,GAAU9B,GAAM+B,CAAE,GAChCS,IAAUpD,EAAO,gBAAgB,GACjCwD,IAAQ,MAAO5C,EAAK,QAAQ;AAClC,WAAA4b,EAAa,EAAE,OAAAhZ,GAAO,mBAIpBjD,EAkBS,UAAA;AAAA,eAjBH;AAAA,MAAJ,KAAIoC;AAAA,MACH,OAAKhC,EAAA,CAAA,YAAeN,EAAA,SAAI,WAAA,aAA6BA,EAAA,IAAI,EAAA,CAAA;AAAA,MAC1D,UAAS;AAAA,MACR,mBAAiBA,EAAA,QAAQa,EAAAkC,CAAA,IAAU;AAAA,MACnC,SAAKO,EAAA,CAAA,MAAAA,EAAA,CAAA;AAAA,gBAAEzC,EAAA8B,CAAA,KAAA9B,EAAA8B,CAAA,EAAA,GAAAY,CAAA;AAAA,IAAA;MAERzC,EAUM,OAAA;AAAA,QAVA,8BAA4Bd,EAAA,QAAI,wBAAA,CAAA;AAAA,MAAA;QACpCc,EAAqG,UAAA;AAAA,UAA7F,OAAM;AAAA,UAAiB,MAAK;AAAA,UAAU,cAAYd,EAAA;AAAA,UAAa,SAAOmD;AAAA,QAAA,GAAO,KAAO,GAAApC,EAAA;AAAA,QACjFf,EAAA,SAASA,EAAA,eAAekC,EAAAA,OAAO,UAA1CjC,EAAA,GAAAC,EAKM,OALNc,IAKM;AAAA,UAJJZ,EAGOC,wBAHP,MAGO;AAAA,YAFKL,EAAA,cAAVE,EAAsE,MAAA;AAAA;cAApD,IAAIW,EAAAkC,CAAA;AAAA,cAAS,OAAM;AAAA,YAAA,KAAoB/C,EAAA,KAAK,GAAA,GAAA0D,EAAA;YACrD1D,EAAA,oBAATE,EAAwE,KAAxE6E,IAAwEtB,EAAlBzD,EAAA,WAAW,GAAA,CAAA;;;QAG1DkC,EAAAA,OAAO,WAAlBjC,KAAAC,EAA+D,OAA/D8E,IAA+D;AAAA,UAAd5E,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;QAC9C6B,EAAAA,OAAO,UAAlBjC,KAAAC,EAA6F,OAA7F+E,IAA6F;AAAA,UAA3C7E,EAAqCC,EAAA,QAAA,UAAA,EAAhB,OAAA8C,GAAY;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;2BCnCvFjD,EAIQ,SAAA;AAAA,MAJA,wBAAsBF,EAAA,aAAS,yBAA6BA,WAAK,qBAAyBA,EAAA,oCAAoCA,EAAA,QAAI,kBAAA,CAAA;AAAA,MAA0B,cAAYA,EAAA;AAAA,IAAA;MACnKkC,EAAAA,OAAO,UAAlBjC,KAAAC,EAAgF,OAAhFa,IAAgF;AAAA,QAA5BX,EAAsBC,EAAA,QAAA,QAAA;AAAA,MAAA;MAC1ES,EAA8C,OAA9CE,IAA8C;AAAA,QAAdZ,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MAC7B6B,EAAAA,OAAO,UAAlBjC,KAAAC,EAAgF,OAAhFwD,IAAgF;AAAA,QAA5BtD,EAAsBC,EAAA,QAAA,QAAA;AAAA,MAAA;;;;;;;;;;;;;ACV9E,UAAME,IAAOC,EAAoBR,GAAC,MAA0B;AAE5D,aAASW,EAASC,GAAU;AAC1B,MAAAL,EAAK,QAASK,EAAE,OAA8B;AAAA,IAChD;2BAIEV,EAMU,WAAA;AAAA,MAND,OAAM;AAAA,MAA0B,MAAMK,EAAA;AAAA,MAAO,UAAAI;AAAA,IAAA;MACpDG,EAGU,WAHVC,IAGU;AAAA,QAFRX,EAAoBC,EAAA,QAAA,MAAA;AAAA,QACpBS,EAAgF,QAAhFE,IAAgF;AAAA,UAA5CZ,EAAqCC,uBAArC,MAAqC;AAAA,gBAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;;MAEjEc,EAA6C,MAA7C4C,IAA6C;AAAA,QAAbtD,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;sBCV1CJ,EAAA,GAAAC,EAGM,OAHNC,IAGM;AAAA,MAFOH,EAAA,cAAXE,EAAkE,OAAlEa,IAAkE0C,EAAdzD,EAAA,KAAK,GAAA,CAAA;MACzDI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;sBCHVJ,EAAA,GAAAC,EAAyC,MAAzCC,IAAyC;AAAA,MAAbC,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;;;;ACEtC,UAAMqB,IAAQ1B,GAOR6b,IAAMxa,EAAS,MAAOK,EAAM,OAAO,MAAM,QAAS;sBAItDzB,KAAA4E,EAWYC,EAVL+W,EAAA,KAAG,GAAA;AAAA,MACP,oCAAkC7b,EAAA,SAAK,4BAAA,CAAA;AAAA,MACvC,MAAMA,EAAA;AAAA,MACN,MAAM6b,EAAA,UAAG,WAAA,WAA2B;AAAA,MACpC,gBAAc7b,EAAA,UAAO,SAAY;AAAA,MACjC,iBAAeA,EAAA,WAAQ,SAAY;AAAA,IAAA;iBAEpC,MAAoB;AAAA,QAApBI,EAAoBC,EAAA,QAAA,MAAA;AAAA,QACpBS,EAAmD,QAAnDX,IAAmD;AAAA,UAAfC,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;QAChCL,EAAA,UAAU,eAAtBE,EAAiF,QAAjFa,IAAiF0C,EAAfzD,EAAA,KAAK,GAAA,CAAA;;;;;;;;sBCvBzEC,EAAA,GAAAC,EAAwC,OAAxCC,EAAwC;AAAA;;;;;;;2BCCxCD,EAA+D,OAAA;AAAA,MAAzD,yCAAuCF,EAAA,OAAO,EAAA,CAAA;AAAA,IAAA;;;;;;;;;;;;;;;ACCtD,UAAM0B,IAAQ1B,GACR2B,IAAQnB,EAAmBR,GAAA,YAAe,GAC1C8gB,IAAWzf,EAAS,MAAM;AAC9B,YAAM0T,IAAOrT,EAAM,MAAMA,EAAM,KACzBwK,IAAM6I,IAAO,KAAMpT,EAAM,QAAQD,EAAM,OAAOqT,IAAQ,MAAM;AAClE,aAAO,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG7I,CAAG,CAAC,CAAC;AAAA,IAC3C,CAAC;6BAIChM,EAQE,SAAA;AAAA,oDAPgByB,EAAK,QAAAS;AAAA,MACpB,uBAAqBpC,EAAA,YAAQ,qBAAA,CAAA;AAAA,MAC9B,MAAK;AAAA,MACJ,KAAKA,EAAA;AAAA,MACL,KAAKA,EAAA;AAAA,MACL,MAAMA,EAAA;AAAA,MACN,mCAAiC8gB,EAAA,OAAQ;AAAA,IAAA;;;QAN1Bnf,EAAA;AAAA;QAAR,EAAA,QAAR,GAAA;AAAA,MAAsB;AAAA;;;;;;;;;;;;;ACC1B,UAAMiB,IAAOC;2BAIX3C,EAeK,MAAA;AAAA,MAdF,OAAKI,EAAA,CAAA,mBAAsBN,EAAA,YAAQ,eAAmBA,EAAA,mBAAmBA,EAAA,IAAI,EAAA,CAAA;AAAA,MAC7E,WAAWA,EAAA,SAAS,SAAS;AAAA,IAAA;MAE9Bc,EASK,MATLC,IASK;AAAA,QARHD,EAOU,UAAA;AAAA,UANR,OAAM;AAAA,UACN,MAAK;AAAA,UACJ,cAAYd,EAAA;AAAA,UACZ,gBAAcA,EAAA;AAAA,UACd,UAAUA,EAAA;AAAA,UACV,WAAOsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAlB,MAAEQ,EAAI,gBAAiBR,CAAM;AAAA,QAAA;;MAGzChC,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;2BC7BVH,EAOM,OAAA;AAAA,MAPA,0BAAwBF,EAAA,SAAK,qBAAA,CAAA;AAAA,IAAA;OACjCC,EAAA,EAAA,GAAAC,EAKU+D,GAAA,MAAAC,EALoBlE,EAAA,QAAM,CAAnBwZ,GAAOmB,YAAxBza,EAKU,WAAA;AAAA,QAL6B,KAAKya;AAAA,QAAG,OAAM;AAAA,MAAA;QACnD7Z,EAAuD,MAAvDX,IAAuDsD,EAAnB+V,EAAM,KAAK,GAAA,CAAA;AAAA,QAC/C1Y,EAEK,MAFLC,IAEK;AAAA,WADHd,EAAA,EAAA,GAAAC,EAAoK+D,WAA5IuV,EAAM,MAAI,CAArB1F,GAAKiN,YAAlB7gB,EAAoK,OAAA;AAAA,YAA/H,KAAK6gB;AAAA,YAAG,OAAM;AAAA,UAAA;YAAcjgB,EAAwB,MAAA,MAAA2C,EAAjBqQ,EAAI,KAAK,GAAA,CAAA;AAAA,YAAQhT,EAAqE,MAAA,MAAA;AAAA,cAA9D0C,EAAAC,EAAAqQ,EAAI,KAAK,GAAA,CAAA;AAAA,cAAgBA,EAAI,aAAjB5T,EAA6C,SAAAc,IAAAyC,EAAnBqQ,EAAI,IAAI,GAAA,CAAA;;;;;;;;;;;;;;;2BCNpJ5T,EAKQ,QAAA;AAAA,MAJL,OAAKI,EAAA,CAAA,cAAiBN,UAAQA,EAAA,gCAAgCA,EAAA,IAAI,IAAIA,EAAA,SAAK,eAAmBA,EAAA,KAAK,EAAA,CAAA;AAAA,MACnG,MAAMA,EAAA,QAAK,WAAc;AAAA,MACzB,cAAYA,EAAA;AAAA,MACZ,eAAaA,EAAA,QAAQ,SAAS;AAAA,IAAA;;;;;;;;;;;;;;;;;;;2BCGjCE,EASU,WAAA;AAAA,MATA,2BAAyBF,EAAA,SAAK,sBAAA,CAAA;AAAA,IAAA;MACtCc,EAGM,OAHNX,IAGM;AAAA,QAFJgF,GAA+BqX,UAATxc,EAAA,KAAK,CAAA,GAAA,MAAA,EAAA;AAAA,QACfA,EAAA,SAASkC,EAAAA,OAAO,SAA5BjC,KAAAC,EAA4G,QAA5Ga,IAA4G;AAAA,UAA5CX,EAAqCC,uBAArC,MAAqC;AAAA,gBAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;;MAE7Fc,EAGM,OAAA,MAAA;AAAA,QAFJA,EAAqE,MAArEE,IAAqE;AAAA,UAApCF,EAA+B,KAAA,EAA3B,MAAMd,EAAA,UAASA,EAAA,KAAK,GAAA,GAAA0D,EAAA;AAAA,QAAA;QAChD1D,EAAA,QAAQkC,EAAAA,OAAO,QAAxBjC,KAAAC,EAAiG,KAAjG6E,IAAiG;AAAA,UAAvC3E,EAAmCC,sBAAnC,MAAmC;AAAA,gBAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;ACFzF,UAAMwL,IAAQ,CAACrH,MAAkC,OAAOA,KAAS,WAAWA,IAAOA,EAAK,OAClF4P,IAAO,CAAC5P,MAAkC,OAAOA,KAAS,WAAW,SAAYA,EAAK;2BAI1FjE,EAMK,MAAA;AAAA,MANA,OAAKI,EAAA,CAAA,iBAAoBN,EAAA,WAAO,0BAA8BA,EAAA,SAAI,QAAA,mBAAA,CAAA;AAAA,IAAA;MACrEI,EAIOC,yBAJP,MAIO;AAAA,SAHLJ,EAAA,EAAA,GAAAC,EAEK+D,GAAA,MAAAC,EAFmBlE,EAAA,OAAK,CAAjBmE,GAAMe,YAAlBhF,EAEK,MAAA;AAAA,UAF2B,KAAKgF;AAAA,UAAG,OAAM;AAAA,QAAA;UAChC6O,EAAK5P,CAAI,KAArBlE,EAAA,GAAAC,EAA8F,QAA9FC,IAA8FsD,EAApBsQ,EAAK5P,CAAI,CAAA,GAAA,CAAA;UAAcX,EAAAC,EAAA+H,EAAMrH,CAAI,CAAA,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;ACjBnH,UAAMzC,IAAQ1B,GAaR6b,IAAMxa,EAAS,MAAOK,EAAM,OAAO,MAAMA,EAAM,SAAS,WAAW,KAAM;sBAI7EzB,KAAA4E,EAWYC,EAVL+W,EAAA,KAAG,GAAA;AAAA,MACP,OAAKvb,EAAA,CAAA,gBAAmBN,EAAA,SAAI,aAAA,iBAAmCA,EAAA,IAAI,IAAIA,EAAA,UAAM,sBAAA,CAAA;AAAA,MAC7E,MAAMA,EAAA;AAAA,MACN,MAAMA,EAAA,UAAM,CAAKA,EAAA,kBAAkB;AAAA,IAAA;iBAEpC,MAAiG;AAAA,QAArFkC,EAAAA,OAAO,QAAnBjC,KAAAC,EAAiG,QAAjGC,IAAiG;AAAA,UAA3BC,EAAoBC,EAAA,QAAA,MAAA;AAAA,QAAA;QAC1FS,EAGO,QAHPC,IAGO;AAAA,UAFLD,EAAiK,QAAjKE,IAAiK;AAAA,gBAA7HhB,EAAA,KAAK,GAAA,CAAA;AAAA,YAAeA,EAAA,cAAZE,EAA8G,QAAA;AAAA;cAA1F,uDAAqDF,EAAA,cAAc,EAAA,CAAA;AAAA,YAAA,KAAQA,EAAA,KAAK,GAAA,CAAA;;UAChJc,EAAmD,QAAnD4C,IAAmDD,EAAfzD,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;2BCxB7CE,EAKQ,QAAA;AAAA,MAJL,2BAAyBF,EAAA,SAAI,aAAA,kBAAoCA,MAAI,IAAIA,EAAA,mCAAmCA,EAAA,IAAI,EAAA,CAAA;AAAA,MAChH,MAAMA,EAAA,QAAK,QAAW;AAAA,MACtB,cAAYA,EAAA;AAAA,MACZ,eAAaA,EAAA,QAAQ,SAAS;AAAA,IAAA;;;;;;;;;;;;sBCLjCC,EAAA,GAAAC,EAII,KAJJC,IAII;AAAA,MAHFgF,GAA4B6b,IAAA,EAAd,MAAMhhB,EAAA,KAAA,GAAI,MAAA,GAAA,CAAA,MAAA,CAAA;AAAA,MACxBc,EAA6C,QAA7CC,IAA6C;AAAA,QAAfX,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MAC1BL,EAAA,QAAQkC,EAAAA,OAAO,QAA3BjC,KAAAC,EAAmG,QAAnGc,IAAmG;AAAA,QAA1CZ,EAAmCC,sBAAnC,MAAmC;AAAA,cAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;ACDtF,UAAM2D,IAAUnD,EAAmBR,GAAA,YAAe;2BAIhDE,EAgBK,MAAA;AAAA,MAhBA,wBAAsBF,EAAA,cAAU,wBAAA,CAAA;AAAA,MAAgC,cAAYA,EAAA;AAAA,IAAA;OAC/EC,EAAA,EAAA,GAAAC,EAcK+D,GAAA,MAAAC,EAdmBlE,EAAA,OAAK,CAAjBiI,GAAM/C,YAAlBhF,EAcK,MAAA,EAd2B,KAAKgF,KAAC;AAAA,QACpCpE,EAYS,UAAA;AAAA,UAXN,6BAA2BoE,IAAIvB,WAAO,yBAA6BuB,MAAMvB,EAAA,SAAO,yBAAA,CAAA;AAAA,UACjF,MAAK;AAAA,UACJ,gBAAcuB,MAAMvB,EAAA,iBAAmB;AAAA,UACvC,UAAUuB,IAAIvB,EAAA;AAAA,UACd,SAAK,CAAAvB,MAAEuB,EAAA,QAAUuB;AAAA,QAAA;UAEN+C,EAAK,aAAjB/H,EAGO,QAAAc,IAAA;AAAA,YAFLF,EAAsD,QAAtD4C,IAAsDD,EAApBwE,EAAK,KAAK,GAAA,CAAA;AAAA,YAC5CnH,EAAoD,QAApDiE,IAAoDtB,EAAnBwE,EAAK,IAAI,GAAA,CAAA;AAAA,UAAA,OAE5ChI,KAAAC,EAA6D,QAA7D8E,IAA6DvB,EAApBwE,EAAK,KAAK,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;AC1B3D,UAAMvG,IAAQ1B,GACRihB,IAAO,EAAE,IAAI,YAAY,KAAK,aAAa,KAAK,gBAAgB,OAAO,WAAA;2BAI3E/gB,EAGO,QAAA;AAAA,MAHA,sBAAoBF,EAAA,SAAK,iBAAA,CAAA;AAAA,MAAyB,cAAY0B,EAAM,iBAAiB,SAAYA,EAAM;AAAA,IAAA;MAC5GtB,EAAoCC,yBAApC,MAAoC;AAAA,YAA3B4gB,EAAKvf,EAAM,KAAK,CAAA,GAAA,CAAA;AAAA,MAAA;MACb1B,EAAA,QAAZC,EAAA,GAAAC,EAA6D,QAA7Da,IAAyC,UAAMf,EAAA,IAAI,GAAA,CAAA;;;;;;;;;;;;ACLvD,UAAM2B,IAAQnB,EAAoBR,GAAA,YAAmB,GAC/C,EAAE,MAAAoB,GAAM,SAAAE,EAAA,IAAYL,GAAA;sBAIxBhB,EAAA,GAAAC,EAGQ,SAHR+B,EAGQpB,MAHW,EAAE,OAAM,YAAA,CAAW,GAAA;AAAA,QACpCC,EAAwE,SAAxEmB,EAAwEpB,EAAAS,CAAA,GAAlD;AAAA,sDAAWK,EAAK,QAAAS;AAAA,QAAE,MAAK;AAAA,QAAW,MAAK;AAAA,MAAA;aAA5BT,EAAA,KAAK;AAAA,MAAA;sBACtCb,EAAqC,QAAA,EAA/B,OAAM,qBAAiB,MAAA,EAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACSjC,UAAMY,IAAQ1B,GAgBR0T,IAAWlT,EAAgCR,GAAC,UAAiC,GAC7EkhB,IAAO1gB,KAA8B,MAAyB,GAC9D2gB,IAAQC,GAAA,GAERC,IAAahgB,EAAS,MAAM,CAAC,CAAC8f,EAAM,OAAO,GAC3CG,IAAUjgB,EAAS,MAAMK,EAAM,QAAQ,UAAUA,EAAM,aAAa,IAAI,MAAM2f,EAAW,QAAQ,IAAI,EAAE,GACvGE,IAAclgB,EAAS,MAAMK,EAAM,KAAK,SAAS,KAAKA,EAAM,KAAK,MAAM,CAACqf,MAAMrN,EAAS,MAAM,SAASqN,EAAErf,EAAM,MAAM,CAAC,CAAC,CAAC;AAE7H,aAAS8f,EAAU5gB,GAAU;AAC3B,MAAA8S,EAAS,QAAS9S,EAAE,OAA4B,UAAUc,EAAM,KAAK,IAAI,CAACqf,MAAMA,EAAErf,EAAM,MAAM,CAAC,IAAI,CAAA;AAAA,IACrG;AACA,aAAS+f,EAAUrY,GAAqBmX,GAAkB;AACxD,MAAA7M,EAAS,QAAQ6M,IAAU,CAAC,GAAG7M,EAAS,OAAOtK,CAAE,IAAIsK,EAAS,MAAM,OAAO,CAAC9E,MAAMA,MAAMxF,CAAE;AAAA,IAC5F;AACA,aAASsY,EAAS3d,GAAa;AAC7B,aAAOmd,EAAK,OAAO,QAAQnd,IAAMmd,EAAK,MAAM,YAAY;AAAA,IAC1D;AACA,aAASS,EAAW/gB,GAAUmD,GAAa;AACzC,MAAAnD,EAAE,eAAA;AACF,YAAMyH,IAAO6Y,EAAK,OAAO,QAAQnd,KAAOmd,EAAK,MAAM,cAAc,cAAc,eAAe;AAC9F,MAAAA,EAAK,QAAQ,EAAE,KAAAnd,GAAK,WAAWsE,EAAA;AAAA,IACjC;AACA,aAASuZ,EAAS9N,GAA0B;AAC1C,aAAO,UAAU,OAAOA,EAAIpS,EAAM,QAAQ,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,GAAG,KAAA;AAAA,IAC9D;sBAIEzB,EAAA,GAAAC,EAgDM,OAhDNC,IAgDM;AAAA,MA/CJW,EA8CQ,SAAA;AAAA,QA7CL,sBAAoBd,EAAA,WAAO,qBAAyBA,aAAO,qBAAyBA,EAAA,sCAAsCA,EAAA,UAAM,kBAAA,CAAA;AAAA,MAAA;QAElHA,EAAA,WAAfC,EAAA,GAAAC,EAA+C,iBAApBF,EAAA,OAAO,GAAA,CAAA;QAClCc,EAiBQ,SAAA,MAAA;AAAA,UAhBNA,EAeK,MAAA,MAAA;AAAA,YAdOd,EAAA,cAAVC,EAAA,GAAAC,EAEK,MAFLc,IAEK;AAAA,cADHF,EAAqH,SAAA;AAAA,gBAA9G,OAAM;AAAA,gBAAc,MAAK;AAAA,gBAAY,SAASygB,EAAA;AAAA,gBAAc,cAAYvhB,EAAA;AAAA,gBAAiB,UAAQwhB;AAAA,cAAA;;oBAE1GthB,EASK+D,GAAA,MAAAC,EARWlE,EAAA,SAAO,CAAdyV,YADTvV,EASK,MAAA;AAAA,cAPF,KAAKuV,EAAI;AAAA,cACT,aAAWiM,EAASjM,EAAI,GAAG;AAAA,cAC3B,gBAAcA,EAAI,eAAe;AAAA,cACjC,OAAKnR,EAAEmR,EAAI,iBAAiBA,EAAI,MAAA,IAAU,MAAS;AAAA,YAAA;cAE3CA,EAAI,iBAAbvV,EAAgI,KAAA;AAAA;gBAAzG,OAAM;AAAA,gBAAiB,MAAI,SAAWuV,EAAI,GAAG;AAAA,gBAAK,gBAAOkM,EAAWvf,GAAQqT,EAAI,GAAG;AAAA,cAAA,GAAMhS,EAAAgS,EAAI,KAAK,GAAA,GAAAzQ,EAAA,WACzH9E,EAA2C+D,GAAA,EAAA,KAAA,KAAA;AAAA,gBAAvBT,EAAAC,EAAAgS,EAAI,KAAK,GAAA,CAAA;AAAA,cAAA;;YAErB4L,EAAA,cAAVnhB,EAAqF,MAAA+E,IAAA;AAAA,cAA/DnE,EAA0D,QAA1D4O,IAA0DjM,EAAtBzD,EAAA,YAAY,GAAA,CAAA;AAAA,YAAA;;;QAG1Ec,EAuBQ,SAAA,MAAA;AAAA,kBAtBNZ,EAkBK+D,GAAA,MAAAC,EAjBWlE,EAAA,MAAI,CAAX8T,YADT5T,EAkBK,MAAA;AAAA,YAhBF,KAAK4T,EAAI9T,EAAA,MAAM;AAAA,YACf,iBAAe0T,QAAS,SAASI,EAAI9T,EAAA,MAAM,CAAA,IAAA,SAAc;AAAA,UAAA;YAEhDA,EAAA,mBAAVE,EAQK,MAAAia,IAAA;AAAA,cAPHrZ,EAME,SAAA;AAAA,gBALA,OAAM;AAAA,gBACN,MAAK;AAAA,gBACJ,SAAS4S,EAAA,MAAS,SAASI,EAAI9T,EAAA,MAAM,CAAA;AAAA,gBACrC,cAAY4hB,EAAS9N,CAAG;AAAA,gBACxB,UAAM,CAAA1R,MAAEqf,EAAU3N,EAAI9T,EAAA,MAAM,GAAIoC,EAAO,OAA4B,OAAO;AAAA,cAAA;;oBAG/ElC,EAEK+D,GAAA,MAAAC,EAFalE,EAAA,SAAO,CAAdyV,YAAXvV,EAEK,MAAA;AAAA,cAFuB,KAAKuV,EAAI;AAAA,cAAM,gBAAcA,EAAI,eAAe;AAAA,YAAA;cAC1ErV,EAA0FC,EAAA,QAAA,QAArEoV,EAAI,GAAG,IAAA;AAAA,gBAAK,KAAA3B;AAAA,gBAAW,OAAOA,EAAI2B,EAAI,GAAG;AAAA,cAAA,GAA9D,MAA0F;AAAA,oBAAtB3B,EAAI2B,EAAI,GAAG,CAAA,GAAA,CAAA;AAAA,cAAA;;YAEvE4L,EAAA,SAAVphB,EAAA,GAAAC,EAAsF,MAAtFkO,IAAsF;AAAA,cAAvChO,EAAkCC,EAAA,QAAA,WAAA,EAAZ,KAAAyT,GAAQ;AAAA,YAAA;;UAErE9T,EAAA,KAAK,WAAM,KAAUkC,EAAAA,OAAO,SAAtCjC,EAAA,GAAAC,EAEK,MAFLmO,IAEK;AAAA,YADHvN,EAA2D,MAAA,EAAtD,SAASwgB,EAAA,SAAO;AAAA,cAAElhB,EAA+BC,EAAA,QAAA,SAAA,EAAX,KAAK,CAAA,GAAE;AAAA,YAAA;;;;;;;;;;;;AC/F5D,UAAMkc,IAAS5c,EAAO,uBAAuB;2BAI3CO,EAMK,MAAA;AAAA,MANA,+BAA6BF,EAAA,aAAS,yBAAA,CAAA;AAAA,IAAA;MACzBA,EAAA,kBAAhBE,EAGW+D,GAAA,EAAA,KAAA,KAAA;AAAA,QAFTnD,EAA6G,UAAA;AAAA,UAArG,OAAM;AAAA,UAAwB,MAAK;AAAA,UAAU,eAAeD,EAAA0b,CAAA;AAAA,UAAS,cAAYvc,EAAA;AAAA,QAAA;QACzFc,EAAiE,OAAA;AAAA,UAA3D,IAAID,EAAA0b,CAAA;AAAA,UAAQ,OAAM;AAAA,UAAmB,SAAA;AAAA,QAAA;UAAQnc,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;gBAE7DD,EAAeC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,QAAA,CAAA;AAAA,IAAA;;;;;;;;;;;;;;;ACEnB,UAAMwhB,IAAY,CAACvR,OAA2B,EAAE,gBAAgBA,EAAE,UAAU,KAAK,QAAW,aAAaA,EAAE,OAAO,KAAK,OAAA;2BAIrHpQ,EAeM,OAAA;AAAA,MAfA,OAAKI,EAAA,CAAA,oBAAuBN,EAAA,YAAQ,8BAAkCA,EAAA,SAAK,yBAAA,CAAA;AAAA,IAAA;MAClEA,EAAA,WAAbC,EAAA,GAAAC,EAYQ,SAZRC,IAYQ;AAAA,QAXNW,EAEQ,SAAA,MAAA;AAAA,UADNA,EAAuF,MAAA,MAAA;AAAA,oBAAnFZ,EAA8E+D,GAAA,MAAAC,EAA9DlE,EAAA,SAAO,CAAZ,OAAXC,EAAA,GAAAC,EAA8E,MAA9E+B,EAA8E;AAAA,cAApD,KAAK,EAAE;AAAA,YAAA,GAAa,EAAA,SAAA,GAAA,GAAA4f,EAAU,CAAC,CAAA,GAAApe,EAAM,EAAE,KAAK,GAAA,EAAA;;;QAE5E3C,EAIQ,SAAA,MAAA;AAAA,WAHNb,EAAA,EAAA,GAAAC,EAEK+D,GAAA,MAAAC,EAFkBlE,EAAA,MAAI,CAAf8T,GAAK5O,YAAjBhF,EAEK,MAAA,EAFyB,KAAKgF,KAAC;AAAA,oBAClChF,EAAiI+D,GAAA,MAAAC,EAAjHlE,EAAA,SAAO,CAAZsQ,OAAXrQ,EAAA,GAAAC,EAAiI,MAAjI+B,EAAiI;AAAA,cAAvG,KAAKqO,EAAE;AAAA,YAAA,GAAa,EAAA,SAAA,GAAA,GAAAuR,EAAUvR,CAAC,CAAA,GAAA;AAAA,cAAGlQ,EAAgEC,EAAA,QAAA,QAAA;AAAA,gBAA7C,KAAAyT;AAAA,gBAAW,QAAQxD;AAAA,cAAA,GAAtC,MAAgE;AAAA,oBAApBwD,EAAIxD,EAAE,GAAG,CAAA,GAAA,CAAA;AAAA,cAAA;;;;QAGxGtQ,EAAA,eAAbE,EAEQ,SAAAa,IAAA;AAAA,UADND,EAA6F,MAAA,MAAA;AAAA,oBAAzFZ,EAAoF+D,GAAA,MAAAC,EAApElE,EAAA,SAAO,CAAZ,OAAXC,EAAA,GAAAC,EAAoF,MAApF+B,EAAoF;AAAA,cAA1D,KAAK,EAAE;AAAA,YAAA,GAAa,EAAA,SAAA,GAAA,GAAA4f,EAAU,CAAC,CAAA,GAAApe,EAAMzD,SAAO,EAAE,GAAG,CAAA,GAAA,EAAA;;;YAGnFI,EAAeC,EAAA,QAAA,WAAA,IAAA,QAAA,QAAA,CAAA;AAAA,IAAA;;;;;;;;;;;;;;;;AC7BnB,UAAMsB,IAAQnB,EAAmBR,GAAA,YAAC,GAC5BwO,IAAM7O,EAAO,SAAS;sBAI1BM,EAAA,GAAAC,EAgBM,OAhBNC,IAgBM;AAAA,MAfJW,EAWM,OAXNC,IAWM;AAAA,SAVJd,EAAA,EAAA,GAAAC,EASQ+D,GAAA,MAAAC,EATkBlE,EAAA,MAAI,CAAfmT,GAAKjO,YAApBhF,EASQ,SAAA;AAAA,UATyB,KAAKiT,EAAI,SAASA,EAAI;AAAA,UAAO,OAAM;AAAA,QAAA;YAClErS,EAME,SAAA;AAAA,0DALSa,EAAK,QAAAS;AAAA,YACd,MAAK;AAAA,YACJ,MAAMpC,EAAA,QAAQa,EAAA2N,CAAA;AAAA,YACd,OAAO2E,EAAI,SAASA,EAAI;AAAA,YACxB,SAASxR,EAAA,UAAU,UAAauD,MAAC;AAAA,UAAA;iBAJzBvD,EAAA,KAAK;AAAA,UAAA;YAKd,MACF8B,EAAG0P,EAAI,KAAK,GAAA,CAAA;AAAA,QAAA;;cAGhBjT,EAEM+D,GAAA,MAAAC,EAFalE,EAAA,MAAI,CAAXmT,YAAZjT,EAEM,OAAA;AAAA,QAFoB,KAAKiT,EAAI,SAASA,EAAI;AAAA,QAAO,OAAM;AAAA,MAAA;QAC3D/S,EAAuCC,UAA1B8S,EAAI,SAASA,EAAI,KAAK;AAAA,MAAA;;;;;;;;;;;;;;;;;;ACzBzC,UAAMzR,IAAQ1B,GAQR8hB,IAAOthB,EAAqBR,GAAA,YAAsB,GAClD+hB,IAAQjf,EAAI,EAAE,GACdkf,IAAY3gB,EAAS,MAAMK,EAAM,YAAY,OAAO,CAACoL,MAAM,CAACgV,EAAK,MAAM,SAAShV,CAAC,CAAC,CAAC;AAEzF,aAAS8H,EAAI/M,GAAe;AAC1B,YAAMgU,IAAMhU,EAAM,KAAA;AAClB,MAAIgU,KAAO,CAACiG,EAAK,MAAM,SAASjG,CAAG,MAAGiG,EAAK,QAAQ,CAAC,GAAGA,EAAK,OAAOjG,CAAG,IACtEkG,EAAM,QAAQ;AAAA,IAChB;AACA,aAASE,EAAOpG,GAAa;AAC3B,MAAAiG,EAAK,QAAQA,EAAK,MAAM,OAAO,CAACjB,MAAMA,MAAMhF,CAAG;AAAA,IACjD;AACA,aAAStN,EAAU3N,GAAkB;AACnC,MAAIA,EAAE,QAAQ,WAAWA,EAAE,QAAQ,OACjCA,EAAE,eAAA,GACFgU,EAAImN,EAAM,KAAK,KACNnhB,EAAE,QAAQ,eAAe,CAACmhB,EAAM,SAASD,EAAK,MAAM,WAC7DA,EAAK,QAAQA,EAAK,MAAM,MAAM,GAAG,EAAE;AAAA,IAEvC;;MAIEhhB,EAMM,OANNX,IAMM;AAAA,gBALJD,EAGO+D,GAAA,MAAAC,EAHa4d,EAAA,OAAI,CAAXjG,YAAb3b,EAGO,QAAA;AAAA,UAHoB,KAAK2b;AAAA,UAAK,OAAM;AAAA,QAAA;UACtCrY,EAAAC,EAAAoY,CAAG,IAAG,KACT,CAAA;AAAA,UAAA/a,EAA+G,UAAA;AAAA,YAAvG,OAAM;AAAA,YAAgB,MAAK;AAAA,YAAU,wBAAsB+a,CAAG;AAAA,YAAK,SAAK,CAAAzZ,MAAE6f,EAAOpG,CAAG;AAAA,UAAA,GAAG,KAAO,GAAA9a,EAAA;AAAA,QAAA;UAExGD,EAAyG,SAAA;AAAA,wDAAzFihB,EAAK,QAAA3f;AAAA,UAAE,MAAK;AAAA,UAAQ,aAAapC,EAAA;AAAA,UAAc,cAAYA,EAAA;AAAA,UAAQ,WAAAuO;AAAA,QAAA;eAAnEwT,EAAA,KAAK;AAAA,QAAA;;MAEZC,EAAA,MAAU,UAArB/hB,KAAAC,EAEM,OAFNwD,IAEM;AAAA,gBADJxD,EAAsF+D,GAAA,MAAAC,EAAlE8d,EAAA,OAAS,CAAdlV,YAAf5M,EAAsF,UAAA;AAAA,UAAtD,KAAK4M;AAAA,UAAG,MAAK;AAAA,UAAU,SAAK,CAAA1K,MAAEwS,EAAI9H,CAAC;AAAA,QAAA,KAAMA,CAAC,GAAA,GAAA/H,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrC9E,UAAMrD,IAAQ1B,GAYRkK,IAAOpH,EAA2B,IAAI;AAE5C,WAAAL;AAAA,MACE,MAAMf,EAAM,MAAM;AAAA,MAClB,YAAY;AACV,cAAMwa,GAAA,GACFxa,EAAM,cAAcwI,EAAK,YAAY,MAAM,YAAYA,EAAK,MAAM;AAAA,MACxE;AAAA,IAAA,mBAKAhK,EAcM,OAAA;AAAA,MAdD,OAAM;AAAA,MAAmB,OAAKoE,EAAEtE,EAAA,SAAM,EAAA,4BAAiCA,EAAA,OAAA,IAAW,MAAS;AAAA,IAAA;MAC9Fc,EAIM,OAJNX,IAIM;AAAA,wBAHJW,EAAK,KAAA,MAAA,MAAA,EAAA;AAAA,wBAAAA,EAAK,KAAA,MAAA,MAAA,EAAA;AAAA,wBAAAA,EAAK,KAAA,MAAA,MAAA,EAAA;AAAA,QACHd,EAAA,cAAZE,EAAoE,QAApEa,IAAoE0C,EAAfzD,EAAA,KAAK,GAAA,CAAA;QAC9CA,EAAA,eAAZE,EAAuE,QAAvEc,IAAuEyC,EAAhBzD,EAAA,MAAM,GAAA,CAAA;;MAE/Dc,EAOM,OAAA;AAAA,iBAPG;AAAA,QAAJ,KAAIoJ;AAAA,QAAO,OAAM;AAAA,QAAwB,MAAK;AAAA,QAAM,aAAU;AAAA,QAAU,cAAYlK,EAAA;AAAA,QAAO,UAAS;AAAA,MAAA;SACvGC,EAAA,EAAA,GAAAC,EAII+D,GAAA,MAAAC,EAJgBlE,EAAA,OAAK,CAAd6D,GAAGqB,YAAdhF,EAII,KAAA;AAAA,UAJwB,KAAKgF;AAAA,UAAI,OAAK5E,EAAA,CAAA,yBAAA,0BAAsDuD,EAAE,KAAK,EAAA,CAAA;AAAA,QAAA;UACzFA,EAAE,QAAd5D,EAAA,GAAAC,EAAqE,QAArE6E,IAAqEtB,EAAhBI,EAAE,IAAI,GAAA,CAAA;UAC3D/C,EAAqG,QAArGkE,IAAqGvB,EAA7DI,EAAE,UAAUA,EAAE,UAAK,YAAA,OAAwBA,EAAE,MAAK,GAAA,CAAA;AAAA,UAC1F/C,EAAyD,QAAzDmE,IAAyDxB,EAAnBI,EAAE,OAAO,GAAA,CAAA;AAAA,QAAA;QAExC7D,EAAA,WAAM,MAAfC,EAAA,GAAAC,EAAkG,KAAlGwP,IAAkGjM,EAApCzD,EAAA,qBAAuBA,EAAA,MAAM,GAAA,CAAA;;;;;;;;;;;;;;AC3CjG,UAAM2B,IAAQnB,EAAmBR,GAAA,YAAC;6BAIhCE,EAAkI,YAAA;AAAA,oDAA/GyB,EAAK,QAAAS;AAAA,MAAG,sBAAoBpC,EAAA,SAAK,iBAAA,CAAA;AAAA,MAAyB,gBAAcA,EAAA,QAAK,SAAY;AAAA,IAAA;WAAzF2B,EAAA,KAAK;AAAA,IAAA;;;;;;;;;;;;;;;ACC1B,UAAM+L,IAAgC,EAAE,QAAQ,UAAU,OAAO,SAAS,MAAM,OAAA,GAW1E/L,IAAQnB,EAAkBR,GAAA,YAAsB,GAChDwO,IAAM7O,EAAO,UAAU;sBAI3BM,KAAA4E,EAKYC,EALI9E,EAAA,EAAE,GAAA;AAAA,MAAE,OAAM;AAAA,MAAmB,MAAMA,EAAA,OAAE,QAAA,eAA4B;AAAA,MAAY,cAAYA,EAAA;AAAA,IAAA;iBAChG,MAAoB;AAAA,gBAA3BE,EAGQ+D,GAAA,MAAAC,EAHWlE,EAAA,SAAO,CAAZ6X,YAAd3X,EAGQ,SAAA,EAHqB,KAAK2X,KAAC;AAAA,YACjC/W,EAAqE,SAAA;AAAA,0DAArDa,EAAK,QAAAS;AAAA,YAAE,MAAK;AAAA,YAAS,MAAMpC,EAAA,QAAQa,EAAA2N,CAAA;AAAA,YAAM,OAAOqJ;AAAA,UAAA;iBAAhDlW,EAAA,KAAK;AAAA,UAAA;YAAgD,MACrE8B,EAAGiK,EAAOmK,CAAC,CAAA,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;AChBjB,UAAMlW,IAAQnB,EAAmBR,GAAA,YAAgB,GAC3CkiB,IAASviB,EAAO,SAAS;AAG/B,aAASsM,EAAQrL,GAAU;AACzB,YAAM+E,IAAQ/E,EAAE,QACVkK,IAAInF,EAAM,OACV4E,IAASO,EAAE,QAAQ,OAAO,EAAE,EAAE,MAAM,GAAG,CAAC;AAC9C,MAAAnJ,EAAM,QAAQ,gBAAgB,KAAKmJ,CAAC,IAAIA,IAAIP,EAAO,UAAU,IAAIA,IAAS,GAAGA,EAAO,MAAM,GAAG,CAAC,CAAC,IAAIA,EAAO,MAAM,CAAC,CAAC,IAClH5E,EAAM,QAAQhE,EAAM;AAAA,IACtB;AAGA,aAASiY,IAAS;AAChB,YAAMrU,IAAI5D,EAAM,MAAM,QAAQ,OAAO,EAAE;AACvC,MAAI4D,EAAE,WAAW,KAAKA,EAAE,WAAW,IAAG5D,EAAM,QAAQ,GAAG4D,EAAE,SAAS,GAAG,GAAG,CAAC,QAChEA,EAAE,WAAW,MAAG5D,EAAM,QAAQ,IAAI4D,EAAE,CAAC,CAAC,IAAIA,EAAE,MAAM,CAAC,CAAC;AAAA,IAC/D;;MAIEzE,EAaE,SAbFmB,EAaE5B,EAAA,QAZc;AAAA,QACd,OAAM;AAAA,QACN,MAAK;AAAA,QACL,WAAU;AAAA,QACV,WAAU;AAAA,QACV,SAAQ;AAAA,QACP,aAAaL,EAAA,eAAW;AAAA,QACxB,MAAMA,EAAA,OAAO,SAASa,EAAAqhB,CAAA,IAAS;AAAA,QAC/B,gBAAcliB,EAAA,QAAK,SAAY;AAAA,QAC/B,OAAO2B,EAAA;AAAA,QACP,SAAAsK;AAAA,QACA,QAAA2N;AAAA,MAAA;MAEa5Z,EAAA,OAAO,eAAvBE,EAEW,YAAA;AAAA;QAFqB,IAAIW,EAAAqhB,CAAA;AAAA,MAAA;gBAClChiB,EAAwD+D,GAAA,MAAAC,EAApClE,EAAA,OAAK,CAAV8M,YAAf5M,EAAwD,UAAA;AAAA,UAA5B,KAAK4M;AAAA,UAAI,OAAOA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;2BCtB9C5M,EASK,MAAA;AAAA,MATA,OAAKI,EAAA,CAAA,eAAkBN,EAAA,SAAI,QAAA,mBAAgCA,EAAA,UAAM,qBAAA,CAAA;AAAA,IAAA;MACpEI,EAOOC,yBAPP,MAOO;AAAA,SANLJ,EAAA,EAAA,GAAAC,EAKK+D,GAAA,MAAAC,EALmBlE,EAAA,OAAK,CAAjBmE,GAAMe,YAAlBhF,EAKK,MAAA;AAAA,UAL2B,KAAKgF;AAAA,UAAI,OAAK5E,EAAA,CAAA,qBAAwB6D,EAAK,WAAO,4BAAA,CAAA;AAAA,QAAA;UACpEA,EAAK,iBAAjBjE,EAAqG,QAAA;AAAA;YAA1E,OAAM;AAAA,YAAqB,UAAUiE,EAAK;AAAA,UAAA,GAAaV,EAAAU,EAAK,IAAI,GAAA,GAAAhE,EAAA,MAC3FF,EAAA,GAAAC,EAA6D,QAA7Da,IAA6D0C,EAAnBU,EAAK,IAAI,GAAA,CAAA;AAAA,UACzCA,EAAK,SAAflE,EAAA,GAAAC,EAAsE,MAAtEc,IAAsEyC,EAAlBU,EAAK,KAAK,GAAA,CAAA;UACrDA,EAAK,QAAdlE,EAAA,GAAAC,EAAiE,KAAjEwD,IAAiED,EAAhBU,EAAK,IAAI,GAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;2BCtBhEjE,EAOS,UAAA;AAAA,MAPA,OAAKI,EAAA,CAAA,eAAkBN,EAAA,YAAQ,yBAA6BA,EAAA,SAAI,QAAA,iBAAA,CAAA;AAAA,IAAA;MACvEc,EAIM,OAJNX,IAIM;AAAA,QAHQ+B,EAAAA,OAAO,QAAnBjC,KAAAC,EAAiG,QAAjGa,IAAiG;AAAA,UAA3BX,EAAoBC,EAAA,QAAA,MAAA;AAAA,QAAA;QAC9EL,EAAA,SAASkC,EAAAA,OAAO,SAA5BjC,KAAAC,EAA0G,QAA1Gc,IAA0G;AAAA,UAA5CZ,EAAqCC,uBAArC,MAAqC;AAAA,gBAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;QAC7EA,EAAA,YAAYkC,EAAAA,OAAO,YAA/BjC,KAAAC,EAAyH,QAAzHwD,IAAyH;AAAA,UAAlDtD,EAA2CC,0BAA3C,MAA2C;AAAA,gBAAlBL,EAAA,QAAQ,GAAA,CAAA;AAAA,UAAA;;;MAE/FkC,EAAAA,OAAO,WAAlBjC,KAAAC,EAAsE,OAAtE6E,IAAsE;AAAA,QAAd3E,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;sBCTlEJ,EAAA,GAAAC,EAA4C,OAA5CC,IAA4C;AAAA,MAAdC,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;2BCEtCH,EAA4I,UAAA;AAAA,MAApI,MAAK;AAAA,MAAU,8BAA4BF,EAAA,SAAK,yBAAA,CAAA;AAAA,MAAiC,cAAYA,EAAA;AAAA,MAAQ,OAAOA,EAAA;AAAA,IAAA;MAAOI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;sBCFnIJ,EAAA,GAAAC,EAA8C,OAA9CC,IAA8C;AAAA,MAAdC,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;;;;;;;;ACA1C,UAAM4C,IAAS,EAAE,SAAS,KAAK,OAAO,KAAK,SAAS,KAAK,MAAM,IAAA;2BAgB7D/C,EAOM,OAAA;AAAA,MAPA,mCAAiCF,EAAA,OAAO,EAAA,CAAA;AAAA,MAAM,MAAMA,EAAA,YAAO,UAAA,UAAA;AAAA,IAAA;MAC/Dc,EAAoG,QAApGC,IAAoG;AAAA,QAArDX,EAA8CC,sBAA9C,MAA8C;AAAA,UAAzBmD,EAAAC,EAAAR,EAAOjD,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,QAAA;;MAClFc,EAGM,OAHNE,IAGM;AAAA,QAFJF,EAAmE,KAAnE4C,IAAmE;AAAA,UAAzCtD,EAAqCC,uBAArC,MAAqC;AAAA,gBAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;QAC5CA,EAAA,eAAekC,EAAAA,OAAO,WAA/BjC,KAAAC,EAAuG,KAAvG6E,IAAuG;AAAA,UAAlC3E,EAA8BC,yBAA9B,MAA8B;AAAA,gBAArBL,EAAA,WAAW,GAAA,CAAA;AAAA,UAAA;;;MAE7EA,EAAA,oBAAdE,EAAqI,UAAA;AAAA;QAA1G,OAAM;AAAA,QAAiB,MAAK;AAAA,QAAU,cAAYF,EAAA;AAAA,QAAe,gCAAOmb,EAAAA,MAAK,SAAA;AAAA,MAAA,GAAa,KAAO,GAAAnW,EAAA;;;ICV1H4M,KAAQuQ,GAAkC,EAAE,QAAQ,CAAA,GAAI,GACxDC,yBAAa,IAAA;AACnB,IAAIC,KAAS;AAEb,SAASC,GAAQlZ,GAAY;AAC3B,QAAMsH,IAAQ0R,GAAO,IAAIhZ,CAAE;AAC3B,EAAIsH,kBAAoBA,CAAK,GAC7B0R,GAAO,OAAOhZ,CAAE;AAChB,QAAMlE,IAAI0M,GAAM,OAAO,UAAU,CAACiP,MAAMA,EAAE,OAAOzX,CAAE;AACnD,EAAIlE,MAAM,MAAI0M,GAAM,OAAO,OAAO1M,GAAG,CAAC;AACxC;AAEA,SAASqd,GAAKrE,GAA+B;AAC3C,QAAM9U,IAAKiZ,MACLle,IAAkB;AAAA,IACtB,IAAAiF;AAAA,IACA,OAAO8U,EAAQ;AAAA,IACf,aAAaA,EAAQ;AAAA,IACrB,SAASA,EAAQ,WAAW;AAAA,IAC5B,UAAUA,EAAQ,YAAY;AAAA,EAAA;AAEhC,SAAAtM,GAAM,OAAO,KAAKzN,CAAI,GAClBA,EAAK,WAAW,KAAGie,GAAO,IAAIhZ,GAAI,WAAW,MAAMkZ,GAAQlZ,CAAE,GAAGjF,EAAK,QAAQ,CAAC,GAC3EiF;AACT;AAEA,SAASoZ,KAAQ;AACf,aAAW3B,KAAK,CAAC,GAAGjP,GAAM,MAAM,EAAG,CAAA0Q,GAAQzB,EAAE,EAAE;AACjD;AAEA,MAAM4B,KACJ,CAACvf,MACD,CAACmD,GAAeqc,GAAsBxE,IAAmE,CAAA,MACvGqE,GAAK,EAAE,GAAGrE,GAAS,OAAA7X,GAAO,aAAAqc,GAAa,SAAAxf,GAAS;AAG7C,SAASyf,KAAW;AACzB,SAAO;AAAA,IACL,QAAQC,GAAShR,EAAK,EAAE;AAAA,IACxB,MAAA2Q;AAAA,IACA,SAAAD;AAAA,IACA,OAAAE;AAAA,IACA,SAASC,GAAS,SAAS;AAAA,IAC3B,OAAOA,GAAS,OAAO;AAAA,IACvB,SAASA,GAAS,SAAS;AAAA,IAC3B,MAAMA,GAAS,MAAM;AAAA,EAAA;AAEzB;;;;;;;;AC3DA,UAAM,EAAE,QAAAI,GAAQ,SAAAP,EAAA,IAAYK,GAAA;2BAI1BziB,EASM,OAAA;AAAA,MATA,OAAKI,EAAA,CAAA,sBAAyBN,EAAA,aAAQ,SAAA,2BAAyCA,EAAA,UAAM,4BAAA,CAAA;AAAA,IAAA;cACzFE,EAOE+D,GAAA,MAAAC,EANYrD,EAAAgiB,CAAA,GAAM,CAAXhC,YADThc,EAOEie,IAAA;AAAA,QALC,KAAKjC,EAAE;AAAA,QACP,SAASA,EAAE;AAAA,QACX,OAAOA,EAAE;AAAA,QACT,aAAaA,EAAE;AAAA,QACf,WAAO,CAAAze,MAAEvB,EAAAyhB,CAAA,EAAQzB,EAAE,EAAE;AAAA,MAAA;;;;;;;;;;;;;;;;;;;ACL5B,UAAMnf,IAAQ1B,GAQR+iB,IAAUviB,EAAoBR,GAAA,YAAmB,GACjDwZ,IAAQ9Y,GAAO2f,IAAgB,IAAI,GACnC,EAAE,MAAAjf,GAAM,SAAAE,EAAA,IAAYL,GAAA,GAEpB+hB,IAAU3hB,EAAS,MAAM;AAAA,MAC7B;AAAA,MACAK,EAAM,YAAY,aAAa;AAAA,MAC/BA,EAAM,QAAQA,EAAM,SAAS,QAAQ,cAAcA,EAAM,IAAI;AAAA,MAC7DA,EAAM,QAAQ;AAAA,IAAA,CACf,GACKuhB,IAAU5hB,EAAS,MAAM,CAAC,CAACmY,KAAS9X,EAAM,UAAU,MAAS,GAC7DwhB,IAAO7hB,EAAS,MAAO4hB,EAAQ,QAAQzJ,EAAO,OAAO,MAAM,SAAS9X,EAAM,KAAM,IAAIqhB,EAAQ,KAAM;AACxG,aAASxI,IAAW;AAClB,MAAI0I,EAAQ,QAAOzJ,EAAO,OAAO9X,EAAM,KAAM,IACxCqhB,EAAQ,QAAQ,CAACA,EAAQ;AAAA,IAChC;qBAKU/iB,EAAA,WAAWijB,EAAA,SADnBhjB,EAAA,GAAAC,EAUS,UAVT+B,EAUS,EAAA,KAAA,EAAA,GAAA,EAAA,GARMpB,EAAAO,CAAA,MAASP,EAAAS,CAAA,KAAO;AAAA,MAC7B,MAAK;AAAA,MACJ,OAAO0hB,EAAA;AAAA,MACP,gBAAcD,EAAA,QAAO,SAAA;AAAA,MACrB,UAAU/iB,EAAA;AAAA,MACV,SAAKsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAlB,MAAE2gB,EAAA,QAAO,CAAIA,EAAA;AAAA,IAAA;MAEnB3iB,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA,eAEVJ,KAAAC,EAWQ,SAXR+B,EAWQ,EAAA,KAAA,EAAA,GAXcpB,MAAI,EAAG,OAAOmiB,EAAA,MAAA,CAAO,GAAA;AAAA,MACzCliB,EAQE,SARFmB,EAQEpB,EAAAS,CAAA,GAPe;AAAA,QACd,MAAM2hB,EAAA,SAAWpiB,KAAO,KAAK,UAAK,WAAA,UAAA;AAAA,QAClC,MAAMoiB,EAAA,QAAUpiB,EAAA2Y,CAAA,EAAO,KAAK,QAAS3Y,EAAAS,CAAA,EAAQ;AAAA,QAC7C,OAAOtB,EAAA;AAAA,QACP,SAASkjB,EAAA;AAAA,QACT,UAAUljB,EAAA;AAAA,QACV,UAAAua;AAAA,MAAA;MAEHna,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;;;;;ACjDZ,UAAMsB,IAAQnB,EAAoBR,GAAA,YAAmB,GAC/C,EAAE,MAAAoB,GAAM,SAAAE,EAAA,IAAYL,GAAA,GACpBkiB,IAASxjB,EAAO,iBAAiB;2BAIrCO,EASQ,SATR+B,EASQpB,EAAAO,CAAA,GATW;AAAA,MAAG,OAAK,CAAA,mBAAsBpB,EAAA,QAAI,yBAA6BA,EAAA,WAAO,0BAAA;AAAA,IAAA;MACvFc,EAGO,QAHPX,IAGO;AAAA,QAFLW,EAAgF,QAAhFC,IAAgF;AAAA,UAA5CX,EAAqCC,uBAArC,MAAqC;AAAA,gBAAfL,EAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;QACnDA,EAAA,eAAekC,EAAAA,OAAO,oBAAlChC,EAAwJ,QAAA;AAAA;UAAxG,IAAIW,EAAAsiB,CAAA;AAAA,UAAQ,OAAM;AAAA,QAAA;UAA8B/iB,EAAiDC,6BAAjD,MAAiD;AAAA,gBAArBL,EAAA,WAAW,GAAA,CAAA;AAAA,UAAA;;;MAEzIc,EAGO,QAHP4C,IAGO;AAAA,UAFL5C,EAAmJ,SAAnJmB,EAAmJpB,EAAAS,CAAA,GAA7H;AAAA,wDAAWK,EAAK,QAAAS;AAAA,UAAE,MAAK;AAAA,UAAW,MAAK;AAAA,UAAU,oBAAkBpC,iBAAekC,EAAAA,OAAO,cAAcrB,EAAAsiB,CAAA,IAAS;AAAA,QAAA;eAArGxhB,EAAA,KAAK;AAAA,QAAA;wBACtCb,EAAqC,QAAA,EAA/B,OAAM,qBAAiB,MAAA,EAAA;AAAA,MAAA;;;;;;;;;;;;;;;;ACdnC,UAAMY,IAAQ1B,GACR2B,IAAQnB,iBAA+B,GACvCgO,IAAM7O,EAAO,WAAW,GAExBiL,IAASvJ,EAAS,MAAO,MAAM,QAAQM,EAAM,KAAK,IAAIA,EAAM,QAAQA,EAAM,QAAQ,CAACA,EAAM,KAAK,IAAI,EAAG;AAC3G,aAAS+M,EAAO7G,GAAe;AAC7B,UAAInG,EAAM,SAAS;AACjB,QAAAC,EAAM,QAAQkG;AAAA,WACT;AACL,cAAM8G,IAAO/D,EAAO;AACpB,QAAAjJ,EAAM,QAAQgN,EAAK,SAAS9G,CAAK,IAAI8G,EAAK,OAAO,CAAC7D,MAAMA,MAAMjD,CAAK,IAAI,CAAC,GAAG8G,GAAM9G,CAAK;AAAA,MACxF;AAAA,IACF;AACA,WAAA9H,GAAQsgB,IAAgB;AAAA,MACtB,QAAAzV;AAAA,MACA,MAAMvJ,EAAS,MAAMK,EAAM,IAAI;AAAA,MAC/B,MAAML,EAAS,MAAMK,EAAM,QAAQ8M,CAAG;AAAA,MACtC,QAAAE;AAAA,IAAA,CACD,mBAICxO,EAMM,OAAA;AAAA,MALH,6BAA2BF,EAAA,UAAM,yBAAA,CAAA;AAAA,MACjC,MAAMA,EAAA,SAAI,WAAA,eAAA;AAAA,MACV,cAAYA,EAAA;AAAA,IAAA;MAEbI,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;;;;2BC7BVH,EAMO,QAAA;AAAA,MALJ,OAAKI,EAAA,CAAA,cAAA,EAAA,yBAA4CN,eAAS,CAAKA,EAAA,yBAAyBA,EAAA,IAAI,EAAA,GAAKA,EAAA,QAAQA,EAAA,SAAI,MAAA,CAAA,CAAA;AAAA,MAC7G,gBAAcA,EAAA,UAAU,SAAYA,EAAA;AAAA,IAAA;MAErCI,EAAQC,EAAA,QAAA,SAAA;AAAA,MACIL,EAAA,WAAZC,EAAA,GAAAC,EAAqI,QAArIa,IAAqI;AAAA,QAArED,EAAoD,QAApDE,IAAoDyC,EAAjBzD,EAAA,OAAO,GAAA,CAAA;AAAA,YAAaA,EAAA,IAAI,GAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;;;;ACJ/H,UAAM0B,IAAQ1B,GAcRojB,IAAQtgB,EAAkCpB,EAAM,SAAS,WAAW,QAAQ;AAClF,QAAIgP;AAEJ,IAAAjO;AAAA,MACE,MAAMf,EAAM;AAAA,MACZ,CAAC+S,MAAO;AAEN,YADA,aAAa/D,CAAK,GACd+D,GAAI;AACN,UAAA2O,EAAM,QAAQ;AACd;AAAA,QACF;AAEA,QAAIA,EAAM,UAAU,aACpBA,EAAM,QAAQ,QACd1S,IAAQ,WAAW,MAAO0S,EAAM,QAAQ,UAAW1hB,EAAM,MAAM;AAAA,MACjE;AAAA,IAAA,GAEF0O,GAAgB,MAAM,aAAaM,CAAK,CAAC;AAEzC,UAAMsS,IAAU3hB,EAAS,MAAM;AAAA,MAC7B;AAAA,MACAK,EAAM,SAAS,aAAa,oBAAoBA,EAAM,IAAI;AAAA,MAC1DA,EAAM,SAAS;AAAA,MACfA,EAAM,UAAU;AAAA,MAChB0hB,EAAM,UAAU,UAAU;AAAA,IAAA,CAC3B;2BAICljB,EAA6F,YAAA;AAAA,MAAlF,SAAO8iB,EAAA,KAAO;AAAA,MAAG,OAAOhjB,EAAA;AAAA,MAAQ,KAAKA,EAAA;AAAA,MAAM,QAAQojB,EAAA,UAAK;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aChBzDpjB,EAAA,UAAVC,EAAA,GAAAC,EAsBK,MAtBLC,IAsBK;AAAA,SArBHF,EAAA,EAAA,GAAAC,EAoBK+D,GAAA,MAAAC,EApBmBlE,EAAA,OAAK,CAAjBmE,GAAMe,YAAlBhF,EAoBK,MAAA,EApB2B,KAAKgF,KAAC;AAAA,UACrBf,EAAK,UAAU,eAA9BjE,EAWU,WAAA;AAAA;YAX4B,OAAM;AAAA,YAAgB,MAAMiE,EAAK;AAAA,UAAA;YACrErD,EAKU,WAAA;AAAA,cALA,OAAKR,EAAA,CAAA,eAAkB6D,EAAK,SAAK,UAAA,CAAA;AAAA,cAAkB,gBAAcA,EAAK,YAAYA,EAAK,OAAI,SAAY;AAAA,YAAA;cACnGjC,EAAAA,OAAO,QAAnBjC,KAAAC,EAAyG,QAAzGwD,IAAyG;AAAA,gBAAxCtD,EAAiCC,EAAA,QAAA,QAAA,EAAd,MAAA8D,GAAU;AAAA,cAAA;cAC9FrD,EAAmD,QAAnDiE,IAAmDtB,EAApBU,EAAK,KAAK,GAAA,CAAA;AAAA,cAC7BA,EAAK,SAAK,QAAtBlE,EAAA,GAAAC,EAA6E,QAA7E8E,IAA6EvB,EAApBU,EAAK,KAAK,GAAA,CAAA;cACvDjC,EAAAA,OAAO,WAAnBjC,KAAAC,EAA+F,QAA/F+E,IAA+F;AAAA,gBAA3C7E,EAAoCC,EAAA,QAAA,WAAA,EAAd,MAAA8D,GAAU;AAAA,cAAA;;YAEtFgB,GAGSke,GAAA;AAAA,cAHA,OAAOlf,EAAK;AAAA,cAAU,QAAA;AAAA,YAAA;cACbjC,EAAAA,OAAO;sBAAO;AAAA,gBAAuB,IAAAohB,EAAA,CAAkC,QAA3C1F,QAAK;AAAA,kBAAIxd,EAAkCC,EAAA,QAAA,QAAA,EAAf,MAAMud,GAAK;AAAA,gBAAA;;;cACnE1b,EAAAA,OAAO;sBAAU;AAAA,gBAA0B,IAAAohB,EAAA,CAAqC,QAA9C1F,QAAK;AAAA,kBAAIxd,EAAqCC,EAAA,QAAA,WAAA,EAAf,MAAMud,GAAK;AAAA,gBAAA;;;;6BAGhG1d,EAMM,OAAA;AAAA;YANO,OAAKI,EAAA,CAAA,eAAkB6D,EAAK,SAAK,UAAA,CAAA;AAAA,YAAkB,gBAAcA,EAAK,YAAYA,EAAK,OAAI,SAAY;AAAA,UAAA;YACtGjC,EAAAA,OAAO,QAAnBjC,KAAAC,EAAyG,QAAzGqQ,IAAyG;AAAA,cAAxCnQ,EAAiCC,EAAA,QAAA,QAAA,EAAd,MAAA8D,GAAU;AAAA,YAAA;YACrFA,EAAK,aAAdjE,EAAkI,KAAA;AAAA;cAA9G,OAAM;AAAA,cAAiB,MAAMiE,EAAK;AAAA,cAAO,gBAAcA,EAAK,mBAAmB;AAAA,YAAA,GAAcV,EAAAU,EAAK,KAAK,GAAA,GAAAgW,EAAA,MAC3Hla,EAAA,GAAAC,EAA0D,QAA1DsQ,IAA0D/M,EAApBU,EAAK,KAAK,GAAA,CAAA;AAAA,YACpCA,EAAK,SAAK,QAAtBlE,EAAA,GAAAC,EAA6E,QAA7EiO,IAA6E1K,EAApBU,EAAK,KAAK,GAAA,CAAA;YACvDjC,EAAAA,OAAO,WAAnBjC,KAAAC,EAA+F,QAA/FkO,IAA+F;AAAA,cAA3ChO,EAAoCC,EAAA,QAAA,WAAA,EAAd,MAAA8D,GAAU;AAAA,YAAA;;;kBAI1FjE,EASM,OAAA;AAAA;QATO,OAAKI,EAAA,CAAA,WAAcN,EAAA,SAAK,kBAAsBA,EAAA,SAAK,gBAAA,CAAA;AAAA,MAAA;QACnDA,EAAA,QAAXC,EAAA,GAAAC,EAGM,OAHNmO,IAGM;AAAA,UAFJvN,EAA6C,QAA7CsZ,IAA6C3W,EAAdzD,EAAA,IAAI,GAAA,CAAA;AAAA,UACvBkC,EAAAA,OAAM,cAAA,KAAlBjC,KAAAC,EAA+F,QAA/F0X,IAA+F;AAAA,YAAnCxX,EAA4BC,EAAA,QAAA,cAAA;AAAA,UAAA;;QAE1F8E,GAGSke,GAAA;AAAA,UAHA,OAAOrjB,EAAA;AAAA,UAAO,QAAA;AAAA,QAAA;UACLkC,EAAAA,OAAO;kBAAO;AAAA,YAAuB,IAAAohB,EAAA,CAAkC,QAA3C1F,QAAK;AAAA,cAAIxd,EAAkCC,EAAA,QAAA,QAAA,EAAf,MAAMud,GAAK;AAAA,YAAA;;;UACnE1b,EAAAA,OAAO;kBAAU;AAAA,YAA0B,IAAAohB,EAAA,CAAqC,QAA9C1F,QAAK;AAAA,cAAIxd,EAAqCC,EAAA,QAAA,WAAA,EAAf,MAAMud,GAAK;AAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9ClG,UAAMhb,IAAOC;2BAIX3C,EAgBQ,SAAA;AAAA,MAhBA,OAAKI,EAAA,CAAA,qBAAwBN,EAAA,WAAO,8BAAkCA,EAAA,WAAO,4BAAA,CAAA;AAAA,IAAA;MACvEkC,EAAAA,OAAO,QAAnBjC,KAAAC,EAAsG,QAAtGC,IAAsG;AAAA,QAA3BC,EAAoBC,EAAA,QAAA,MAAA;AAAA,MAAA;MAC/FS,EAWM,OAXNC,IAWM;AAAA,QAVJD,EAAqH,KAArHE,IAAqH;AAAA,UAA/EwC,EAAAC,EAAAzD,EAAA,KAAK,IAAG,KAAC,CAAA;AAAA,UAAYA,EAAA,aAAZE,EAAkE,QAAlEwD,IAAkED,EAAdzD,EAAA,IAAI,GAAA,CAAA;;QAC9FkC,EAAAA,OAAO,WAAWlC,EAAA,QAA3BC,KAAAC,EAA2F,KAA3F6E,IAA2F;AAAA,UAA3B3E,EAAuBC,yBAAvB,MAAuB;AAAA,gBAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,UAAA;;QAClEA,EAAA,SAAXC,EAAA,GAAAC,EAOM,OAPN8E,IAOM;AAAA,UANJlE,EAA8B,QAAA,MAAA2C,EAArBzD,EAAA,MAAM,KAAK,GAAA,CAAA;AAAA,UAEpBc,EAEQ,SAAA;AAAA,YAFD,OAAM;AAAA,YAA0B,KAAI;AAAA,YAAK,KAAKd,EAAA,MAAM;AAAA,YAAM,KAAKA,EAAA,MAAM,MAAG;AAAA,YAAS,MAAMA,EAAA,MAAM,MAAG;AAAA,YAAQ,SAAQ;AAAA,YAAK,OAAOA,EAAA,MAAM;AAAA,UAAA,GACpIyD,EAAAzD,EAAA,MAAM,KAAK,IAAG,SAAIyD,EAAGzD,EAAA,MAAM,GAAG,GAAA,GAAAiF,EAAA;AAAA,UAEnCnE,EAAgD,QAAA,MAAA2C,EAAvCzD,QAAM,KAAK,IAAG,QAAGyD,EAAGzD,EAAA,MAAM,GAAG,GAAA,CAAA;AAAA,QAAA;;MAG/BkC,EAAAA,OAAO,WAAlBjC,KAAAC,EAA0F,OAA1FwP,IAA0F;AAAA,QAA7BtP,EAAuBC,EAAA,QAAA,SAAA;AAAA,MAAA;MACtEL,EAAA,oBAAdE,EAAyI,UAAA;AAAA;QAA9G,OAAM;AAAA,QAA4B,MAAK;AAAA,QAAU,cAAYF,EAAA;AAAA,QAAe,gCAAO4C,EAAI,SAAA;AAAA,MAAA,GAAa,KAAC,GAAA2N,EAAA;;;;;;;;;;;;;;;;ACnCpI,UAAM7O,IAAQ1B,GAQRujB,IAAgBliB,EAAS,MAAMK,EAAM,YAAYA,EAAM,KAAK,KAAA,EAAO,MAAM,KAAK,EAAE,OAAO,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,CAACwJ,MAAMA,EAAE,CAAC,EAAE,YAAA,CAAa,EAAE,KAAK,EAAE,CAAC;sBAIvJjL,EAAA,GAAAC,EAWM,OAXNC,IAWM;AAAA,MAVJC,EAKOC,wBALP,MAKO;AAAA,QAJLS,EAGO,QAAA;AAAA,UAHA,OAAKR,EAAA,CAAA,aAAgBN,EAAA,cAAcA,EAAA,qCAAqCA,EAAA,UAAU,EAAA,CAAA;AAAA,QAAA;UAC5EA,EAAA,YAAXE,EAAoC,OAAA;AAAA;YAAnB,KAAKF,EAAA;AAAA,YAAK,KAAI;AAAA,UAAA,yBAC/BE,EAA+C+D,GAAA,EAAA,KAAA,KAAA;AAAA,gBAA3Bsf,EAAA,KAAa,GAAA,CAAA;AAAA,UAAA;;;MAGrCziB,EAGO,QAHPE,IAGO;AAAA,QAFLF,EAA4C,QAA5C4C,IAA4CD,EAAdzD,EAAA,IAAI,GAAA,CAAA;AAAA,QACtBA,EAAA,cAAZE,EAA2D,QAA3D6E,IAA2DtB,EAAfzD,EAAA,KAAK,GAAA,CAAA;;;;;;;;;;;;;;;;;;;AClBvD,UAAM0B,IAAQ1B;qBAgBJA,EAAA,gBADRE,EAUM,OAAA;AAAA;MARH,OAAKI,EAAA,CAAA,qBAAwBN,EAAA,SAAI,aAAA,sBAAwCA,EAAA,IAAI,IAAIA,EAAA,YAAQ,6BAAA,CAAA;AAAA,MAC1F,MAAK;AAAA,IAAA;sBAELc,EAA8D,QAAA;AAAA,QAAxD,OAAM;AAAA,QAAwB,eAAY;AAAA,MAAA;MAChDA,EAAgH,QAAhHX,IAAgH;AAAA,QAA3EC,EAAoEC,yBAApE,MAAoE;AAAA,YAA9D,kBAAaoD,EAAGzD,EAAA,OAAO,IAAG,iCAA6B,CAAA;AAAA,QAAA;;MAClGc,EAAwD,QAAxDC,IAAwD0C,EAAfzD,EAAA,KAAK,GAAA,CAAA;AAAA,MAChC0B,EAAM,iBAApBxB,EAAiI,UAAA;AAAA;QAAnG,OAAM;AAAA,QAA2B,MAAK;AAAA,QAAU,SAAKoD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAlB,MAAEV,EAAM,SAAA;AAAA,MAAQ,KAAO1B,EAAA,WAAW,GAAA,CAAA,WACrHE,EAAwE,KAAxEc,IAAwEyC,EAAlBzD,EAAA,WAAW,GAAA,CAAA;AAAA,IAAA;;;;;;;;;;;;2BCZnEE,EAQO,QAAA;AAAA,MAPJ,OAAKI,EAAA,CAAA,gBAAmBN,cAAO,cAAA,iBAAoCA,EAAA,OAAO,IAAIA,EAAA,SAAI,aAAA,iBAAmCA,EAAA,IAAI,IAAIA,EAAA,QAAI,oBAAA,CAAA;AAAA,MAClI,eAAY;AAAA,IAAA;cAEZE,EAGW+D,GAAA,MAAAC,EAHYlE,cAAO,SAAc,KAAK,IAAG,GAAIA,EAAA,MAAM,IAAA,GAAA,CAA7CkF,wBAA2DA,KAAC;AAAA,QAC/DhD,EAAAA,OAAO,OAAnB9B,EAAuCC,EAAA,QAAA,QAAA,CAAA,GAAA,QAAA,QAAA,CAAA,UACvCH,EAA2C,QAAAC,IAAA;AAAA,UAA9BC,EAAuBC,yBAAvB,MAAuB;AAAA,gBAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;;;;;;;ACFhC,UAAM+C,IAAUpD,EAAO,gBAAgB;2BAIrCO,EAeU,WAAA;AAAA,MAfA,4BAA0BF,EAAA,WAAO,yBAAA,CAAA;AAAA,MAAiC,mBAAiBa,EAAAkC,CAAA;AAAA,IAAA;MAC3FjC,EAaM,OAbNC,IAaM;AAAA,QAZJD,EAGS,UAAA;AAAA,UAHD,OAAM;AAAA,UAAwB,eAAad,EAAA,QAAQ,SAAS;AAAA,QAAA;UACvDA,EAAA,cAAXE,EAAgE,OAAA;AAAA;YAA7C,KAAKF,EAAA;AAAA,YAAQ,KAAKA,EAAA;AAAA,YAAU,SAAQ;AAAA,UAAA;UAC3CkC,EAAAA,OAAO,SAAnBjC,KAAAC,EAAmF,QAAnF6E,IAAmF;AAAA,YAA5B3E,EAAqBC,EAAA,QAAA,OAAA;AAAA,UAAA;;QAE9ES,EAOM,OAPNkE,IAOM;AAAA,UANKhF,EAAA,gBAATE,EAAsD,KAAtD+E,IAAsDxB,EAAdzD,EAAA,OAAO,GAAA,CAAA;UAC/Cc,EAEK,MAAA;AAAA,YAFA,IAAID,EAAAkC,CAAA;AAAA,YAAS,OAAM;AAAA,UAAA;YACtB3C,EAA4GC,uBAA5G,MAA4G;AAAA,cAAtFmD,EAAAC,EAAAzD,EAAA,KAAK,IAAG,KAAC,CAAA;AAAA,cAAYA,EAAA,kBAAZE,EAAsE,QAAtEqQ,IAAsE9M,EAAnBzD,EAAA,SAAS,GAAA,CAAA;;;UAE7FI,EAAQC,EAAA,QAAA,SAAA;AAAA,UACUL,EAAA,SAAS,eAA3B6E,EAAuD2e,IAAA;AAAA;YAAnB,OAAOxjB,EAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;;sBCjBjDC,EAAA,GAAAC,EAYS,UAZTC,IAYS;AAAA,MAXPC,EAKOC,wBALP,MAKO;AAAA,QAJQL,EAAA,kBAAbE,EAGQ,SAAA;AAAA;UAHgB,OAAM;AAAA,UAAqC,KAAKF,EAAA;AAAA,UAAY,OAAOA,EAAA;AAAA,QAAA;0BACzFc,EAA2I,OAAA;AAAA,YAAtI,aAAU;AAAA,YAAW,SAAQ;AAAA,YAAY,MAAK;AAAA,YAAe,eAAY;AAAA,UAAA;YAAOA,EAAgD,QAAA,EAA1C,GAAE,wCAAsC;AAAA,UAAA;UACnIA,EAAyD,QAAzDE,IAAyDyC,EAArBzD,EAAA,WAAW,GAAA,CAAA;AAAA,QAAA;;MAGvCA,EAAA,cAAZE,EAAmE,QAAnEwD,IAAmED,EAAfzD,EAAA,KAAK,GAAA,CAAA;MAC9CA,EAAA,UAAU,UAAUkC,EAAAA,OAAO,YAAtChC,EAEM,OAAA;AAAA;QAFqC,OAAM;AAAA,QAAuB,cAAYF,EAAA;AAAA,MAAA;QAClFI,EAA2DC,qBAA3D,MAA2D;AAAA,UAA1C8E,GAAmC0Y,IAAA,EAAnB,OAAO7d,EAAA,SAAA,GAAQ,MAAA,GAAA,CAAA,OAAA,CAAA;AAAA,QAAA;;MAEvCkC,EAAAA,OAAO,WAAlBjC,KAAAC,EAAwF,OAAxF8E,IAAwF;AAAA,QAA7B5E,EAAuBC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;ACvBtF,UAAMqB,IAAQ1B,GAIRyjB,IAAYjjB,KAAqB,WAA+B,GAChEoQ,IAAQvP,EAAS,MAAOK,EAAM,SAAS,EAAE,2BAA2BA,EAAM,OAAA,IAAW,MAAU;2BAInGxB,EAQM,OAAA;AAAA,MARD,OAAM;AAAA,MAAkB,SAAO0Q,EAAA,KAAK;AAAA,IAAA;QACvC9P,EAAoH,SAAA;AAAA,QAA5G,IAAId,EAAA;AAAA,sDAAmByjB,EAAS,QAAArhB;AAAA,QAAE,OAAM;AAAA,QAAwB,MAAK;AAAA,QAAY,cAAYpC,EAAA;AAAA,MAAA;aAAtEyjB,EAAA,KAAS;AAAA,MAAA;MACxCrjB,EAAuBC,EAAA,QAAA,SAAA;AAAA,MACvBS,EAIM,OAJNC,IAIM;AAAA,QAHJX,EAAsBC,EAAA,QAAA,QAAA;AAAA,QACX6B,EAAAA,OAAO,eAAlBjC,KAAAC,EAAmG,OAAnGc,IAAmG;AAAA,UAAjCZ,EAA2BC,EAAA,QAAA,aAAA;AAAA,QAAA;QAC7FS,EAAoD,QAApD4C,IAAoD;AAAA,UAAftD,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;sBCfjDJ,EAAA,GAAAC,EAYM,OAZNC,IAYM;AAAA,MAXJW,EASM,OATNC,IASM;AAAA,QARMf,EAAA,SAAVC,EAAA,GAAAC,EAAiC,YAAbF,EAAA,KAAK,GAAA,CAAA;QAChBA,EAAA,iBAATE,EAA+D,KAA/DwD,IAA+DD,EAAfzD,EAAA,QAAQ,GAAA,CAAA;QACxDI,EAAQC,EAAA,QAAA,SAAA;AAAA,QACRD,EAAuBC,EAAA,QAAA,SAAA;AAAA,QACP6B,EAAAA,OAAO,eAAvBhC,EAGW+D,GAAA,EAAA,KAAA,KAAA;AAAA,UAFEjE,EAAA,gBAAXE,EAAqE,OAArE6E,IAAqEtB,EAAhBzD,EAAA,OAAO,GAAA,CAAA;UAC5DI,EAAsBC,EAAA,QAAA,QAAA;AAAA,QAAA;;MAGf6B,EAAAA,OAAO,UAAlBjC,KAAAC,EAAmF,OAAnF8E,IAAmF;AAAA,QAA5B5E,EAAsBC,EAAA,QAAA,QAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBCE/EJ,EAAA,GAAAC,EAsBM,OAtBNC,IAsBM;AAAA,MArBJW,EAQQ,SARRC,IAQQ;AAAA,QAPGmB,EAAAA,OAAO,QAAhBjC,KAAAC,EAAuF,KAAvFc,IAAuF;AAAA,UAAxBZ,EAAoBC,EAAA,QAAA,MAAA;AAAA,QAAA;QACjEL,EAAA,SAASkC,EAAAA,OAAO,SAAlCjC,KAAAC,EAKa,cALbwD,IAKa;AAAA,UAJXtD,EAGOC,uBAHP,MAGO;AAAA,YAFLS,EAAkB,aAAZd,EAAA,KAAK,GAAA,CAAA;AAAA,YACGA,EAAA,eAAdC,EAAA,GAAAC,EAAqD,gBAAvBF,EAAA,WAAW,GAAA,CAAA;;;;MAI/Cc,EAWM,OAXNkE,IAWM;AAAA,QAVJlE,EASO,QAAA;AAAA,UATD,OAAM;AAAA,UAA2B,QAAQd,EAAA;AAAA,UAAS,QAAQA,EAAA;AAAA,UAAS,UAAMsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAlB,MAAE+Y,EAAAA,MAAK,UAAW/Y,CAAM;AAAA,QAAA;UAC3FpC,EAAA,cAAVE,EAAkE,MAAlEwP,IAAkEjM,EAAbzD,EAAA,KAAK,GAAA,CAAA;UACjDA,EAAA,iBAATE,EAAyE,KAAzEqQ,IAAyE9M,EAAfzD,EAAA,QAAQ,GAAA,CAAA;UAClEc,EAIM,OAJNqZ,IAIM;AAAA,YAHJ/Z,EAAQC,EAAA,QAAA,SAAA;AAAA,YACG6B,EAAAA,OAAO,OAAlBjC,KAAAC,EAA+E,OAA/EsQ,IAA+E;AAAA,cAAzBpQ,EAAmBC,EAAA,QAAA,KAAA;AAAA,YAAA;YACzED,EAA8GC,wBAA9G,MAA8G;AAAA,cAA1FS,EAAmF,UAAnFqN,IAAmF1K,EAAvBzD,EAAA,WAAW,GAAA,CAAA;AAAA,YAAA;;UAE7FI,EAAsBC,EAAA,QAAA,QAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChB9B,UAAMqB,IAAQ1B,GAkCR4C,IAAOC,GACP2L,IAAM7O,EAAO,YAAY,GACzB+jB,IAAM,CAACjjB,MAAiB,GAAG+N,CAAG,IAAI/N,CAAI,IACtCkjB,IAAU,CAACljB,MAAkBiB,EAAM,OAAOjB,CAAI,IAAI,EAAE,gBAAgB,IAAe,oBAAoB,OAAOA,CAAI,GAAA,IAAO,CAAA,GACzHmjB,IAAYviB,EAAS,MAAMK,EAAM,OAAO,SAAS,OAAO,KAAKA,EAAM,MAAM,EAAE,KAAK,CAAC0G,MAAMA,MAAM,MAAM,IAAI1G,EAAM,YAAY,KAAK;sBAIlIzB,EAAA,GAAAC,EA4EU,WA5EVC,IA4EU;AAAA,MA3ERW,EA0EM,OA1ENC,IA0EM;AAAA,QAzEJD,EA4DM,OAAA;AAAA,UA5DA,IAAID,EAAA2N,CAAA;AAAA,UAAK,OAAM;AAAA,QAAA;UACRxO,EAAA,QAAXC,EAAA,GAAAC,EASM,OATNwD,IASM;AAAA,YARJtD,EAOOC,yBAPP,MAOO;AAAA,8BANLS,EAAwH,QAAA;AAAA,gBAAlH,OAAM;AAAA,gBAAiD,eAAY;AAAA,cAAA;gBAAOA,EAAiC,gBAAA,EAAnB,MAAK,aAAW;AAAA,cAAA;cAC9GA,EAAoD,MAApDiE,IAAoDtB,EAApBzD,EAAA,YAAY,GAAA,CAAA;AAAA,cACnCA,EAAA,oBAATE,EAAmE,KAAnE8E,IAAmEvB,EAAlBzD,EAAA,WAAW,GAAA,CAAA;cAC5Dc,EAEM,OAFNmE,IAEM;AAAA,gBADJnE,EAAqG,UAAA;AAAA,kBAA7F,MAAK;AAAA,kBAAS,OAAM;AAAA,kBAA0B,gCAAO8B,EAAI,OAAA;AAAA,gBAAA,KAAc5C,EAAA,UAAU,GAAA,CAAA;AAAA,cAAA;;sBAI/FE,EAgDM,OAAAwP,IAAA;AAAA,YA/CM1P,EAAA,cAAVE,EAAqE,MAArEqQ,IAAqE9M,EAAbzD,EAAA,KAAK,GAAA,CAAA;YACpDA,EAAA,cAATE,EAAmE,KAAnEia,IAAmE1W,EAAZzD,EAAA,KAAK,GAAA,CAAA;YACnD4jB,EAAA,cAAT1jB,EAAsF,KAAtFsQ,IAAsF/M,EAAhBmgB,EAAA,KAAS,GAAA,CAAA;YAC/E9iB,EA2CO,QAAA;AAAA,cA3CD,OAAM;AAAA,cAA2B,QAAQd,EAAA;AAAA,cAAS,QAAQA,EAAA;AAAA,cAAQ,YAAA;AAAA,cAAY,aAAWA,EAAA,QAAQ;AAAA,cAAY,UAAMsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAlB,MAAEQ,EAAI,UAAWR,CAAM;AAAA,YAAA;cAC9ItB,EAGM,OAHNsN,IAGM;AAAA,gBAFJtN,EAA2D,SAAA;AAAA,kBAAnD,KAAK4iB,EAAG,SAAA;AAAA,gBAAA,GAAa,0BAAsB,GAAArV,EAAA;AAAA,gBACnDvN,EAA0F,SAAA;AAAA,kBAAlF,IAAI4iB,EAAG,SAAA;AAAA,kBAAa,MAAK;AAAA,kBAAO,MAAK;AAAA,kBAAU,UAAS;AAAA,kBAAK,cAAa;AAAA,gBAAA;;cAEpFtjB,EAiCOC,wBAjCP,MAiCO;AAAA,gBAhCLS,EAWM,OAXN8W,IAWM;AAAA,kBAVJ9W,EAIM,OAJNuZ,IAIM;AAAA,oBAHJvZ,EAA6D,SAAA;AAAA,sBAAtD,OAAM;AAAA,sBAAkB,KAAK4iB,EAAG,MAAA;AAAA,oBAAA,GAAU,QAAI,GAAA5L,EAAA;AAAA,oBACrDhX,EAA+J,SAA/JmB,EAA+J;AAAA,sBAAvJ,IAAIyhB,EAAG,MAAA;AAAA,sBAAU,OAAM;AAAA,sBAAW,MAAK;AAAA,sBAAO,MAAK;AAAA,sBAAO,UAAA;AAAA,sBAAS,WAAU;AAAA,sBAAM,cAAa;AAAA,sBAAQ,OAAO1jB,EAAA,OAAO;AAAA,oBAAA,GAAc2jB,EAAO,MAAA,CAAA,GAAA,MAAA,IAAAxD,EAAA;AAAA,oBAC1IngB,EAAA,OAAO,QAAhBC,EAAA,GAAAC,EAAgF,KAAhF6X,IAAgFtU,EAAlBzD,EAAA,OAAO,IAAI,GAAA,CAAA;;kBAE3Ec,EAIM,OAJNkX,IAIM;AAAA,oBAHJlX,EAAgE,SAAA;AAAA,sBAAzD,OAAM;AAAA,sBAAkB,KAAK4iB,EAAG,OAAA;AAAA,oBAAA,GAAW,UAAM,GAAA/F,EAAA;AAAA,oBACxD7c,EAAqK,SAArKmB,EAAqK;AAAA,sBAA7J,IAAIyhB,EAAG,OAAA;AAAA,sBAAW,OAAM;AAAA,sBAAW,MAAK;AAAA,sBAAQ,MAAK;AAAA,sBAAQ,UAAA;AAAA,sBAAS,WAAU;AAAA,sBAAM,cAAa;AAAA,sBAAS,OAAO1jB,EAAA,OAAO;AAAA,oBAAA,GAAe2jB,EAAO,OAAA,CAAA,GAAA,MAAA,IAAA1L,EAAA;AAAA,oBAC/IjY,EAAA,OAAO,SAAhBC,EAAA,GAAAC,EAAmF,KAAnFgY,IAAmFzU,EAAnBzD,EAAA,OAAO,KAAK,GAAA,CAAA;;;gBAGhFc,EAcM,OAAA;AAAA,kBAdA,OAAKR,EAAA,CAAA,kBAAqBN,EAAA,SAAS,UAAM,qBAAA,CAAA;AAAA,gBAAA;kBAC7Cc,EAIM,OAJNqX,IAIM;AAAA,oBAHJrX,EAAoH,SAAA;AAAA,sBAA7G,OAAM;AAAA,sBAAkB,KAAK4iB,EAAG,OAAA;AAAA,oBAAA;wBAAW,UAAM,EAAA;AAAA,sBAAA5iB,EAAoD,QAAA,EAA9C,OAAM,uBAAA,GAAuB,cAAU,EAAA;AAAA,oBAAA;oBACrGA,EAAuK,SAAvKmB,EAAuK;AAAA,sBAA/J,IAAIyhB,EAAG,OAAA;AAAA,sBAAW,OAAM;AAAA,sBAAW,MAAK;AAAA,sBAAM,MAAK;AAAA,sBAAQ,WAAU;AAAA,sBAAK,cAAa;AAAA,sBAAM,WAAU;AAAA,sBAAO,OAAO1jB,EAAA,OAAO;AAAA,oBAAA,GAAe2jB,EAAO,OAAA,CAAA,GAAA,MAAA,IAAAtL,EAAA;AAAA,oBACjJrY,EAAA,OAAO,SAAhBC,EAAA,GAAAC,EAAmF,KAAnF2jB,IAAmFpgB,EAAnBzD,EAAA,OAAO,KAAK,GAAA,CAAA;;kBAEnEA,EAAA,SAAS,UAApBC,KAAAC,EAOM,OAPNoY,IAOM;AAAA,oBANJxX,EAA6E,SAAA;AAAA,sBAAtE,OAAM;AAAA,sBAAkB,KAAK4iB,EAAG,SAAA;AAAA,oBAAA,GAAa,qBAAiB,GAAAnL,EAAA;AAAA,oBACrEzX,EAGS,UAHTmB,EAGS;AAAA,sBAHA,IAAIyhB,EAAG,SAAA;AAAA,sBAAa,OAAM;AAAA,sBAAY,MAAK;AAAA,sBAAU,UAAA;AAAA,oBAAA,GAAiBC,EAAO,SAAA,CAAA,GAAA;AAAA,sBACpF7iB,EAAsE,UAAA;AAAA,wBAA9D,OAAM;AAAA,wBAAI,UAAQ,CAAGd,EAAA,OAAO;AAAA,sBAAA,GAAS,oBAAgB,GAAAwY,EAAA;AAAA,8BAC7DtY,EAA2H+D,GAAA,MAAAC,EAAvGlE,EAAA,UAAQ,CAAb8M,YAAf5M,EAA2H,UAAA;AAAA,wBAA5F,KAAK4M,EAAE;AAAA,wBAAQ,OAAOA,EAAE;AAAA,wBAAQ,UAAU9M,EAAA,OAAO,YAAY8M,EAAE;AAAA,sBAAA,GAAUrJ,EAAAqJ,EAAE,KAAK,GAAA,GAAA2L,EAAA;;oBAExGzY,EAAA,OAAO,WAAhBC,EAAA,GAAAC,EAAyF,KAAzF4jB,IAAyFrgB,EAArBzD,EAAA,OAAO,OAAO,GAAA,CAAA;;;gBAGtFc,EAIM,OAJNijB,IAIM;AAAA,kBAHJjjB,EAAwE,SAAA;AAAA,oBAAjE,OAAM;AAAA,oBAAkB,KAAK4iB,EAAG,SAAA;AAAA,kBAAA,GAAa,gBAAY,GAAAhL,EAAA;AAAA,kBAChE5X,EAAoK,YAApKmB,EAAoK;AAAA,oBAAzJ,IAAIyhB,EAAG,SAAA;AAAA,oBAAa,OAAM;AAAA,oBAAuB,MAAK;AAAA,oBAAU,MAAK;AAAA,oBAAI,UAAA;AAAA,oBAAS,WAAU;AAAA,oBAAQ,OAAO1jB,EAAA,OAAO;AAAA,kBAAA,GAAiB2jB,EAAO,SAAA,CAAA,GAAA,MAAA,IAAAK,EAAA;AAAA,kBAC5IhkB,EAAA,OAAO,WAAhBC,EAAA,GAAAC,EAAyF,KAAzFyY,IAAyFlV,EAArBzD,EAAA,OAAO,OAAO,GAAA,CAAA;;;cAGtFc,EAGM,OAHNmjB,IAGM;AAAA,gBAFJnjB,EAA8G,UAAA;AAAA,kBAAtG,OAAM;AAAA,kBAAoB,MAAK;AAAA,kBAAU,UAAUd,EAAA;AAAA,gBAAA,KAASA,EAAA,OAAOA,EAAA,YAAYA,EAAA,WAAW,GAAA,GAAAkkB,EAAA;AAAA,gBACzFlkB,EAAA,QAAQkC,EAAAA,OAAO,QAAxBjC,KAAAC,EAA0F,KAA1F0Y,IAA0F;AAAA,kBAAvCxY,EAAmCC,sBAAnC,MAAmC;AAAA,wBAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,kBAAA;;;;;;QAKzEA,EAAA,MAAM,UAAjBC,KAAAC,EAWM,OAXN2Y,IAWM;AAAA,WAVJ5Y,EAAA,EAAA,GAAAC,EASU+D,GAAA,MAAAC,EATmBlE,EAAA,OAAK,CAAjBqV,GAAMnQ,YAAvBhF,EASU,WAAA;AAAA,YAT2B,KAAKgF;AAAA,YAAG,OAAM;AAAA,UAAA;YACrCmQ,EAAK,QAAQnT,EAAAA,OAAM,WAAA,KAA/BjC,KAAAC,EAEO,QAFP4Y,IAEO;AAAA,cADL1Y,EAA6EC,EAAA,QAAA,aAAA,EAArD,MAAAgV,EAAA,GAAxB,MAA6E;AAAA,gBAAzCvU,EAAkC,gBAAA;AAAA,kBAAnB,MAAMuU,EAAK;AAAA,gBAAA;;;YAEhEvU,EAAwD,MAAxDiY,IAAwDtV,EAAlB4R,EAAK,KAAK,GAAA,CAAA;AAAA,aAChDpV,EAAA,EAAA,GAAAC,EAGW+D,WAHmBoR,EAAK,OAAK,CAAtB7D,GAAMtD,wBAAwBA,KAAC;AAAA,cACtCsD,EAAK,aAAdtR,EAAuF,KAAA;AAAA;gBAAnE,OAAM;AAAA,gBAAyB,MAAMsR,EAAK;AAAA,cAAA,GAAS/N,EAAA+N,EAAK,IAAI,GAAA,GAAA2S,EAAA,MAChFlkB,EAAA,GAAAC,EAA2D,KAA3D8Y,IAA2DvV,EAAhB+N,EAAK,IAAI,GAAA,CAAA;AAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;AC9GhE,UAAMzO,IAAUpD,EAAO,kBAAkB;2BAIvCO,EAkBU,WAAA;AAAA,MAlBA,8BAA4BF,EAAA,SAAK,yBAAA,CAAA;AAAA,MAAiC,mBAAiBA,EAAA,QAAQa,EAAAkC,CAAA,IAAU;AAAA,IAAA;MAClG/C,EAAA,WAAWA,EAAA,SAASA,EAAA,QAA/BC,KAAAC,EAIM,OAJNa,IAIM;AAAA,QAHKf,EAAA,gBAATE,EAAsD,KAAtDc,IAAsDyC,EAAdzD,EAAA,OAAO,GAAA,CAAA;QACrCA,EAAA,cAAVE,EAAgF,MAAA;AAAA;UAA9D,IAAIW,EAAAkC,CAAA;AAAA,UAAS,OAAM;AAAA,QAAA,KAA8B/C,EAAA,KAAK,GAAA,GAAA0D,EAAA;QAC/D1D,EAAA,aAATE,EAA2D,KAA3D6E,IAA2DtB,EAAXzD,EAAA,IAAI,GAAA,CAAA;;MAEtDc,EAWM,OAXNkE,IAWM;AAAA,QAVJ5E,EASOC,yBATP,MASO;AAAA,WARLJ,EAAA,EAAA,GAAAC,EAOY+D,GAAA,MAAAC,EAP8DlE,EAAA,OAAK,CAAjBqV,GAAMnQ,YAApEL,EAOYC,EAPIuQ,EAAK,UAAO,YAAA,SAAA,GAAA;AAAA,YAAsD,KAAKnQ;AAAA,YAAG,OAAM;AAAA,UAAA;uBAC9F,MAAmL;AAAA,cAAvKmQ,EAAK,aAAjBnV,EAAmL,QAAA;AAAA;gBAA3J,uEAAqEmV,EAAK,UAAM,cAAkBA,EAAK,MAAM,EAAA,CAAA;AAAA,gBAAK,eAAY;AAAA,cAAA,GAAU5R,EAAA4R,EAAK,IAAI,GAAA,CAAA;eACzKpV,KAAA4E,EAAyGC,EAAzFuQ,EAAK,UAAO,SAAA,IAAA,GAAA,EAAkB,OAAM,yBAAA,GAAwB;AAAA,2BAAC,MAAgB;AAAA,kBAAb7R,EAAAC,EAAA4R,EAAK,KAAK,GAAA,CAAA;AAAA,gBAAA;;;eAC1FpV,EAAA,EAAA,GAAAC,EAGW+D,WAHmBoR,EAAK,OAAK,CAAtB7D,GAAMtD,wBAAwBA,KAAC;AAAA,gBACtCsD,EAAK,aAAdtR,EAAuF,KAAA;AAAA;kBAAnE,OAAM;AAAA,kBAAyB,MAAMsR,EAAK;AAAA,gBAAA,GAAS/N,EAAA+N,EAAK,IAAI,GAAA,GAAAvM,EAAA,WAChFJ,EAA6GC,EAA7FuQ,EAAK,UAAO,SAAA,GAAA,GAAA;AAAA;kBAAwB,OAAM;AAAA,gBAAA;6BAAwB,MAAe;AAAA,oBAAZ7R,EAAAC,EAAA+N,EAAK,IAAI,GAAA,CAAA;AAAA,kBAAA;;;;;;;;;;;;;;;;;;;;;sBCxCxGvR,EAAA,GAAAC,EAIM,OAJNC,IAIM;AAAA,MAHMH,EAAA,SAAVC,EAAA,GAAAC,EAAiC,YAAbF,EAAA,KAAK,GAAA,CAAA;MAChBA,EAAA,QAATC,EAAA,GAAAC,EAA6B,WAAXF,EAAA,IAAI,GAAA,CAAA;MACXkC,EAAAA,OAAO,WAAlBjC,KAAAC,EAAsF,OAAtFwD,IAAsF;AAAA,QAA7BtD,EAAuBC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBCElFJ,EAAA,GAAAC,EAcU,WAdVC,IAcU;AAAA,MAbMH,EAAA,SAASA,EAAA,eAAekC,EAAAA,OAAO,WAA7CjC,EAAA,GAAAC,EAMS,UANTa,IAMS;AAAA,QALPD,EAGM,OAAA,MAAA;AAAA,UAFMd,EAAA,cAAVE,EAAkE,MAAlEc,IAAkEyC,EAAbzD,EAAA,KAAK,GAAA,CAAA;UACjDA,EAAA,oBAATE,EAAkF,KAAlFwD,IAAkFD,EAAlBzD,EAAA,WAAW,GAAA,CAAA;;QAElEkC,EAAAA,OAAO,gBAAlBhC,EAAwD,OAAA6E,IAAA;AAAA,UAA7B3E,EAAuBC,EAAA,QAAA,SAAA;AAAA,QAAA;;MAEpDS,EAKM,OALNkE,IAKM;AAAA,QAJO9C,EAAAA,OAAO,WAAlBjC,KAAAC,EAAiF,OAAjF+E,IAAiF;AAAA,UAA7B7E,EAAuBC,EAAA,QAAA,SAAA;AAAA,QAAA;QAChE6B,EAAAA,OAAO,QAAQlC,EAAA,iBAA1BC,KAAAC,EAA0H,OAA1HwP,IAA0H;AAAA,UAAjDtP,EAA2CC,EAAA,QAAA,QAAA,EAAxB,OAAOL,EAAA,eAAa;AAAA,QAAA;QAChHI,EAAQC,EAAA,QAAA,SAAA;AAAA,QACG6B,EAAAA,OAAO,UAAlBjC,KAAAC,EAA8E,OAA9EqQ,IAA8E;AAAA,UAA5BnQ,EAAsBC,EAAA,QAAA,QAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACX9E,UAAMqB,IAAQ1B,GAYR+C,IAAUpD,EAAO,cAAc,GAC/BykB,IAAYzkB,EAAO,QAAQ,GAC3B6Z,IAAQ9X,EAAM,QAAQ0iB;2BAI1BlkB,EAiBU,WAAA;AAAA,MAjBA,0BAAwBF,EAAA,SAAK,qBAAA,CAAA;AAAA,MAA6B,mBAAiBa,EAAAkC,CAAA;AAAA,IAAA;MACnFjC,EAeM,OAfNC,IAeM;AAAA,QAdJD,EAIM,OAJNE,IAIM;AAAA,UAHKhB,EAAA,gBAATE,EAAsD,KAAtDwD,IAAsDD,EAAdzD,EAAA,OAAO,GAAA,CAAA;UAC/Cc,EAA6D,MAAA;AAAA,YAAxD,IAAID,EAAAkC,CAAA;AAAA,YAAS,OAAM;AAAA,UAAA,KAAwB/C,EAAA,KAAK,GAAA,GAAA+E,EAAA;AAAA,UAC5C/E,EAAA,QAAQkC,EAAAA,OAAO,QAAxBjC,KAAAC,EAA+F,KAA/F8E,IAA+F;AAAA,YAAvC5E,EAAmCC,sBAAnC,MAAmC;AAAA,kBAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,YAAA;;;QAEnFc,EAOM,OAPNmE,IAOM;AAAA,UANJ7E,EAKOC,yBALP,MAKO;AAAA,aAJLJ,EAAA,EAAA,GAAAC,EAGU+D,GAAA,MAAAC,EAHmBlE,EAAA,OAAK,CAAjBmE,GAAMe,YAAvBhF,EAGU,WAAA;AAAA,cAH2B,KAAKgF;AAAA,cAAG,OAAM;AAAA,cAAqB,MAAMrE,EAAA2Y,CAAA;AAAA,cAAQ,MAAMtU,MAAMlF,EAAA;AAAA,YAAA;cAChGc,EAAmE,WAAnEyP,IAAmE9M,EAA1BU,EAAK,QAAQ,GAAA,CAAA;AAAA,cACtDrD,EAAyD,OAAzDqZ,IAAyD1W,EAApBU,EAAK,MAAM,GAAA,CAAA;AAAA,YAAA;;;QAI7CjC,EAAAA,OAAO,QAAhBjC,KAAAC,EAAwE,KAAxEsQ,IAAwE;AAAA,UAAxBpQ,EAAoBC,EAAA,QAAA,MAAA;AAAA,QAAA;;;;;;;;;;;;sBClCxEJ,EAAA,GAAAC,EAUM,OAVNC,IAUM;AAAA,MATMH,EAAA,SAAVC,EAAA,GAAAC,EAAiC,YAAbF,EAAA,KAAK,GAAA,CAAA;MAChBA,EAAA,eAATC,EAAA,GAAAC,EAA2C,WAAlBF,EAAA,WAAW,GAAA,CAAA;MACpCc,EAMM,OANN4C,IAMM;AAAA,SALJzD,EAAA,EAAA,GAAAC,EAIM+D,GAAA,MAAAC,EAJmBlE,EAAA,OAAK,CAAjBmE,GAAMe,YAAnBhF,EAIM,OAAA;AAAA,UAJ2B,KAAKgF;AAAA,UAAG,OAAM;AAAA,QAAA;UAC7CpE,EAA8F,OAA9FiE,IAA8F;AAAA,YAA3D3E,EAAqDC,EAAA,QAAA,QAAA,EAAlC,MAAA8D,EAAA,GAAnB,MAAqD;AAAA,cAAnBX,EAAAC,EAAAU,EAAK,IAAI,GAAA,CAAA;AAAA,YAAA;;UAC9ErD,EAAyB,MAAA,MAAA2C,EAAlBU,EAAK,KAAK,GAAA,CAAA;AAAA,UACjBrD,EAAsB,KAAA,MAAA2C,EAAhBU,EAAK,IAAI,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;sBCRrBlE,EAAA,GAAAC,EAaM,OAbNC,IAaM;AAAA,MAZJW,EAOM,OAPNC,IAOM;AAAA,gBANJb,EAKM+D,GAAA,MAAAC,EALalE,EAAA,SAAO,CAAdyV,YAAZvV,EAKM,OAAA;AAAA,UALuB,KAAKuV,EAAI;AAAA,UAAO,OAAM;AAAA,QAAA;UACjD3U,EAAwB,MAAA,MAAA2C,EAAjBgS,EAAI,KAAK,GAAA,CAAA;AAAA,UAChB3U,EAEK,MAAA,MAAA;AAAA,aADHb,EAAA,EAAA,GAAAC,EAA0G+D,GAAA,MAAAC,EAAvFuR,EAAI,QAAZzR,YAAX9D,EAA0G,MAAA;AAAA,cAA3E,KAAK8D,EAAK,OAAOA,EAAK;AAAA,YAAA;cAAOlD,EAAyC,KAAA;AAAA,gBAArC,MAAMkD,EAAK;AAAA,cAAA,GAASP,EAAAO,EAAK,KAAK,GAAA,GAAAhD,EAAA;AAAA,YAAA;;;;MAIzFhB,EAAA,aAAaA,EAAA,UAAUkC,EAAAA,0BAA0BA,EAAAA,OAAM,YAAA,KAAlEjC,EAAA,GAAAC,EAGM,OAHNwD,IAGM;AAAA,QAFJ5C,EAA6D,QAAA,MAAA;AAAA,UAAvDV,EAAgDC,8BAAhD,MAAgD;AAAA,gBAAnBL,EAAA,SAAS,GAAA,CAAA;AAAA,UAAA;;QAC5Cc,EAAwD,QAAA,MAAA;AAAA,UAAlDV,EAA2CC,4BAA3C,MAA2C;AAAA,gBAAhBL,EAAA,MAAM,GAAA,CAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;2BCP3CE,EAQO,QAAA;AAAA,MARD,OAAM;AAAA,MAAqB,QAAQF,EAAA;AAAA,MAAS,QAAQA,EAAA;AAAA,MAAS,UAAMsD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAlB,MAAE+Y,EAAAA,MAAK,UAAW/Y,CAAM;AAAA,IAAA;MAC/FhC,EAAQC,EAAA,QAAA,SAAA;AAAA,MACRS,EAKM,OALNC,IAKM;AAAA,QAJJX,EAGOC,yBAHP,MAGO;AAAA,UAFLS,EAAwG,UAAA;AAAA,YAAhG,OAAM;AAAA,YAAyB,MAAK;AAAA,YAAU,gCAAOqa,EAAAA,MAAK,QAAA;AAAA,UAAA,KAAenb,EAAA,WAAW,GAAA,CAAA;AAAA,UAC5Fc,EAA+D,UAA/DE,IAA+DyC,EAAvBzD,EAAA,WAAW,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;sBCbzDC,EAAA,GAAAC,EAKM,OALNC,IAKM;AAAA,MAJQH,EAAA,cAAZE,EAAiE,QAAjEa,IAAiE0C,EAAfzD,EAAA,KAAK,GAAA,CAAA;MAC7CA,EAAA,SAAVC,EAAA,GAAAC,EAAiC,YAAbF,EAAA,KAAK,GAAA,CAAA;MAChBA,EAAA,QAATC,EAAA,GAAAC,EAA6B,WAAXF,EAAA,IAAI,GAAA,CAAA;MACXkC,EAAAA,OAAO,WAAlBjC,KAAAC,EAAsF,OAAtF6E,IAAsF;AAAA,QAA7B3E,EAAuBC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBCQlFJ,EAAA,GAAAC,EAsBU,WAtBVC,IAsBU;AAAA,MArBRW,EAoBM,OApBNC,IAoBM;AAAA,QAnBJD,EAOM,OAAA,MAAA;AAAA,UANKd,EAAA,gBAATE,EAAsD,KAAtDc,IAAsDyC,EAAdzD,EAAA,OAAO,GAAA,CAAA;UAC/Cc,EAEK,MAFL4C,IAEK;AAAA,YADHtD,EAA0HC,uBAA1H,MAA0H;AAAA,cAApGmD,EAAAC,EAAAzD,EAAA,KAAK,IAAG,KAAC,CAAA;AAAA,cAAYA,EAAA,kBAAZE,EAAsE,QAAtE6E,IAAsEtB,EAAnBzD,EAAA,SAAS,GAAA,CAAA;kBAAaA,EAAA,QAAQ,GAAA,CAAA;AAAA,YAAA;;UAEzGA,EAAA,QAAQkC,EAAAA,OAAO,QAAxBjC,KAAAC,EAAqF,KAArF8E,IAAqF;AAAA,YAAvC5E,EAAmCC,sBAAnC,MAAmC;AAAA,kBAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,YAAA;;UAC5DkC,EAAAA,OAAO,WAAlBjC,KAAAC,EAA0F,OAA1F+E,IAA0F;AAAA,YAA7B7E,EAAuBC,EAAA,QAAA,SAAA;AAAA,UAAA;;QAEtFS,EAUM,OAVN4O,IAUM;AAAA,UATJtP,EAQOC,wBARP,MAQO;AAAA,4BAPLS,EAA8I,QAAA;AAAA,cAAxI,OAAM;AAAA,cAA6D,OAAA,EAAA,OAAA,uBAAA;AAAA,cAAoC,eAAY;AAAA,YAAA,GAAO,KAAO,EAAA;AAAA,4BACvIA,EAA+J,QAAA;AAAA,cAAzJ,OAAM;AAAA,cAA8D,OAAA,EAAA,OAAA,kBAAA,mBAAA,MAAA;AAAA,cAAoD,eAAY;AAAA,YAAA,GAAO,KAAO,EAAA;AAAA,4BACxJA,EAAsK,QAAA;AAAA,cAAhK,OAAM;AAAA,cAA8D,OAAA,EAAA,OAAA,yBAAA,mBAAA,MAAA;AAAA,cAA2D,eAAY;AAAA,YAAA,GAAO,KAAO,EAAA;AAAA,YAC/JA,EAGM,OAHNyP,IAGM;AAAA,cAFJzP,EAAuI,OAAvIqZ,IAAuI;AAAA,gCAAtGrZ,EAAO,KAAA,MAAA,MAAA,EAAA;AAAA,gCAAAA,EAAO,KAAA,MAAA,MAAA,EAAA;AAAA,gCAAAA,EAAO,KAAA,MAAA,MAAA,EAAA;AAAA,gBAAYd,EAAA,kBAAZE,EAA2E,QAA3EsQ,IAA2E/M,EAAnBzD,EAAA,SAAS,GAAA,CAAA;;cACvHc,EAAkD,OAAlDqN,IAAkD1K,EAAbzD,EAAA,IAAI,GAAA,CAAA;AAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtBrD,UAAM0B,IAAQ1B,GAyBRqkB,IAAQ,CAACnf,MAAc,qBAAsB,MAAMxD,EAAM,MAAM,SAAUwD,CAAC,OAC1Eof,IAAcjjB,EAAS,MAAOK,EAAM,WAAW,wBAAwBA,EAAM,QAAQ,KAAK,MAAU;sBAIxGzB,EAAA,GAAAC,EAwBU,WAxBVC,IAwBU;AAAA,MAvBRW,EAsBM,OAtBNC,IAsBM;AAAA,QArBJD,EAOM,OAAA,MAAA;AAAA,UANKd,EAAA,gBAATE,EAAsD,KAAtDc,IAAsDyC,EAAdzD,EAAA,OAAO,GAAA,CAAA;UAC/Cc,EAEK,MAFL4C,IAEK;AAAA,YADHtD,EAA0HC,uBAA1H,MAA0H;AAAA,cAApGmD,EAAAC,EAAAzD,EAAA,KAAK,IAAG,KAAC,CAAA;AAAA,cAAYA,EAAA,kBAAZE,EAAsE,QAAtE6E,IAAsEtB,EAAnBzD,EAAA,SAAS,GAAA,CAAA;kBAAaA,EAAA,QAAQ,GAAA,CAAA;AAAA,YAAA;;UAEzGA,EAAA,QAAQkC,EAAAA,OAAO,QAAxBjC,KAAAC,EAAqF,KAArF8E,IAAqF;AAAA,YAAvC5E,EAAmCC,sBAAnC,MAAmC;AAAA,kBAAdL,EAAA,IAAI,GAAA,CAAA;AAAA,YAAA;;UAC5DkC,EAAAA,OAAO,WAAlBjC,KAAAC,EAA0F,OAA1F+E,IAA0F;AAAA,YAA7B7E,EAAuBC,EAAA,QAAA,SAAA;AAAA,UAAA;;QAEtFS,EAYM,OAAA;AAAA,UAZD,OAAM;AAAA,UAAyB,SAAOwjB,EAAA,KAAW;AAAA,QAAA;UACpDxjB,EAIM,OAJN4O,IAIM;AAAA,aAHJzP,EAAA,EAAA,GAAAC,EAEO+D,GAAA,MAAAC,EAFmBlE,EAAA,OAAK,CAAjBukB,GAAMrf,YAApBhF,EAEO,QAAA;AAAA,cAF2B,KAAKgF;AAAA,cAAG,OAAM;AAAA,cAAuB,OAAKZ,EAAE+f,EAAMnf,CAAC,CAAA;AAAA,YAAA;cACnFpE,EAA2G,QAAA;AAAA,gBAApG,OAAKR,EAAA,CAAA,uCAAA,cAAwDikB,EAAK,MAAM,EAAA,CAAA;AAAA,cAAA,GAAQ9gB,EAAA8gB,EAAK,KAAK,GAAA,CAAA;AAAA,YAAA;;UAGrGnkB,EAKOC,wBALP,MAKO;AAAA,YAJLS,EAGM,OAHNyP,IAGM;AAAA,cAFJzP,EAAuI,OAAvIqZ,IAAuI;AAAA,gCAAtGrZ,EAAO,KAAA,MAAA,MAAA,EAAA;AAAA,gCAAAA,EAAO,KAAA,MAAA,MAAA,EAAA;AAAA,gCAAAA,EAAO,KAAA,MAAA,MAAA,EAAA;AAAA,gBAAYd,EAAA,kBAAZE,EAA2E,QAA3EsQ,IAA2E/M,EAAnBzD,EAAA,SAAS,GAAA,CAAA;;cACvHc,EAAkD,OAAlDqN,IAAkD1K,EAAbzD,EAAA,IAAI,GAAA,CAAA;AAAA,YAAA;;;;;;;;;;;;;;;;sBCxDnDC,EAAA,GAAAC,EAOM,OAPNC,IAOM;AAAA,MANJW,EAIM,OAAA,MAAA;AAAA,QAHMd,EAAA,SAAVC,EAAA,GAAAC,EAAiC,YAAbF,EAAA,KAAK,GAAA,CAAA;QAChBA,EAAA,QAATC,EAAA,GAAAC,EAA6B,WAAXF,EAAA,IAAI,GAAA,CAAA;QACXkC,EAAAA,OAAO,WAAlBjC,KAAAC,EAAoG,OAApGwD,IAAoG;AAAA,UAA7BtD,EAAuBC,EAAA,QAAA,SAAA;AAAA,QAAA;;MAEhGS,EAA8D,OAA9DiE,IAA8D;AAAA,QAA5B3E,EAAsBC,EAAA,QAAA,QAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;sBCH1DJ,EAAA,GAAAC,EAUS,UAVTC,IAUS;AAAA,MATPW,EAOM,OAPNC,IAOM;AAAA,QANQmB,EAAAA,OAAO,QAAnBjC,KAAAC,EAAwG,QAAxGc,IAAwG;AAAA,UAA3BZ,EAAoBC,EAAA,QAAA,MAAA;AAAA,QAAA;QACjGS,EAIM,OAJN4C,IAIM;AAAA,UAHJ5C,EAAsD,MAAtDiE,IAAsDtB,EAAbzD,EAAA,KAAK,GAAA,CAAA;AAAA,UACrCA,EAAA,cAATE,EAAiE,KAAjE8E,IAAiEvB,EAAZzD,EAAA,KAAK,GAAA,CAAA;UAC/CkC,EAAAA,OAAO,QAAlBjC,KAAAC,EAAmF,OAAnF+E,IAAmF;AAAA,YAA1B7E,EAAoBC,EAAA,QAAA,MAAA;AAAA,UAAA;;;MAGtE6B,EAAAA,OAAO,WAAlBjC,KAAAC,EAA4F,OAA5FwP,IAA4F;AAAA,QAA7BtP,EAAuBC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;sBCZxFJ,EAAA,GAAAC,EAKU,WALVC,IAKU;AAAA,MAJIH,EAAA,gBAAZE,EAAiE,QAAjEa,IAAiE0C,EAAjBzD,EAAA,OAAO,GAAA,CAAA;MACvDc,EAA0C,MAA1CE,IAA0CyC,EAAbzD,EAAA,KAAK,GAAA,CAAA;AAAA,MACzBA,EAAA,aAATE,EAAkD,KAAlDwD,IAAkDD,EAAXzD,EAAA,IAAI,GAAA,CAAA;MAChCkC,EAAAA,OAAO,WAAlBjC,KAAAC,EAAgF,OAAhF6E,IAAgF;AAAA,QAA7B3E,EAAuBC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;ACoB9E,UAAM0C,IAAUpD,EAAO,oBAAoB;2BAIzCO,EA2BU,WAAA;AAAA,MA3BA,+CAA6CF,EAAA,OAAG,yBAAA,CAAA;AAAA,MAAiC,mBAAiBa,EAAAkC,CAAA;AAAA,IAAA;MAC1GjC,EAyBM,OAzBNC,IAyBM;AAAA,QAxBJD,EAOM,OAPNE,IAOM;AAAA,UANJF,EAIM,OAAA,MAAA;AAAA,YAHKd,EAAA,gBAATE,EAAsD,KAAtDwD,IAAsDD,EAAdzD,EAAA,OAAO,GAAA,CAAA;YAC/Cc,EAA2I,MAAA;AAAA,cAAtI,IAAID,EAAAkC,CAAA;AAAA,cAAS,OAAM;AAAA,YAAA;cAA+BS,EAAAC,EAAAzD,EAAA,KAAK,IAAG,KAAC,CAAA;AAAA,cAAYA,EAAA,kBAAZE,EAAsE,QAAtE8E,IAAsEvB,EAAnBzD,EAAA,SAAS,GAAA,CAAA;;YACnHA,EAAA,aAATE,EAA6D,KAA7D+E,IAA6DxB,EAAXzD,EAAA,IAAI,GAAA,CAAA;;UAExDI,EAAoBC,EAAA,QAAA,MAAA;AAAA,QAAA;QAEtBS,EAeM,OAfN4O,IAeM;AAAA,UAdJtP,EAaOC,yBAbP,MAaO;AAAA,aAZLJ,EAAA,EAAA,GAAAC,EAWE+D,GAAA,MAAAC,EAViBlE,EAAA,UAAQ,CAAjBsZ,GAAGpU,YADbL,EAWE2f,IAAA;AAAA,cATC,KAAKtf;AAAA,cACL,SAAOoU,EAAE,UAAM,cAAkBA,EAAE,MAAM,EAAA;AAAA,cACzC,MAAMA,EAAE;AAAA,cACR,MAAMA,EAAE;AAAA,cACR,MAAMA,EAAE;AAAA,cACR,MAAMA,EAAE;AAAA,cACR,MAAMA,EAAE,QAAI;AAAA,cACZ,OAAOA,EAAE;AAAA,cACT,aAAWA,EAAE;AAAA,YAAA;;;;;;;;;;;;;;;;;;sBCnCxBrZ,EAAA,GAAAC,EAgBM,OAhBNC,IAgBM;AAAA,MAfMH,EAAA,SAAVC,EAAA,GAAAC,EAAiC,YAAbF,EAAA,KAAK,GAAA,CAAA;MAChBA,EAAA,eAATC,EAAA,GAAAC,EAA2C,WAAlBF,EAAA,WAAW,GAAA,CAAA;MACpCc,EAYM,OAZN4C,IAYM;AAAA,gBAXJxD,EAUM+D,GAAA,MAAAC,EAVclE,EAAA,OAAK,CAAbykB,YAAZvkB,EAUM,OAAA;AAAA,UAVsB,KAAKukB,EAAK;AAAA,UAAO,OAAKnkB,EAAA,CAAA,yBAA4BmkB,EAAK,YAAQ,iCAAA,CAAA;AAAA,QAAA;UACzF3jB,EAAoD,KAApDiE,IAAoDtB,EAAhBghB,EAAK,IAAI,GAAA,CAAA;AAAA,UACpCA,EAAK,eAAdxkB,EAAA,GAAAC,EAAmF,KAAnF8E,IAAmFvB,EAAvBghB,EAAK,WAAW,GAAA,CAAA;UAC5E3jB,EAAwG,KAAxGmE,IAAwG;AAAA,gBAAnEwf,EAAK,KAAK,IAAG,KAAC,CAAA;AAAA,YAAYA,EAAK,eAAjBvkB,EAAiD,QAAAwP,IAAAjM,EAArBghB,EAAK,MAAM,GAAA,CAAA;;UAC1F3jB,EAEK,MAFLyP,IAEK;AAAA,aADHtQ,EAAA,EAAA,GAAAC,EAAoD+D,GAAA,MAAAC,EAApCugB,EAAK,WAAV/f,OAAXzE,EAAA,GAAAC,EAAoD,MAAA,EAApB,KAAKwE,EAAA,KAAMA,CAAC,GAAA,CAAA;;UAE9CtE,EAEOC,EAAA,QAAA,UAAA,EAFc,MAAAokB,EAAA,GAArB,MAEO;AAAA,YADL3jB,EAAyJ,UAAA;AAAA,cAAhJ,OAAKR,EAAA,CAAA,UAAA,CAAcmkB,EAAK,YAAQ,iBAAA,CAAA;AAAA,cAAwB,MAAK;AAAA,cAAS,OAAA,EAAA,OAAA,OAAA;AAAA,cAAqB,SAAK,CAAAriB,MAAE+Y,EAAAA,MAAK,UAAWsJ,CAAI;AAAA,YAAA,GAAMhhB,EAAAghB,EAAK,GAAG,GAAA,IAAAtK,EAAA;AAAA,UAAA;;;;;;;;;;;;;;;;;;;;;;sBCbrJla,EAAA,GAAAC,EAiBU,WAjBVC,IAiBU;AAAA,MAhBRW,EAeM,OAfNC,IAeM;AAAA,QAdKf,EAAA,gBAATE,EAAsD,KAAtDc,IAAsDyC,EAAdzD,EAAA,OAAO,GAAA,CAAA;QAC/Cc,EAA6H,MAA7H4C,IAA6H;AAAA,UAApFF,EAAAC,EAAAzD,EAAA,KAAK,IAAG,KAAC,CAAA;AAAA,UAAYA,EAAA,kBAAZE,EAAsE,QAAtE6E,IAAsEtB,EAAnBzD,EAAA,SAAS,GAAA,CAAA;;QAC9Gc,EAKK,MALLkE,IAKK;AAAA,kBAJH9E,EAGK+D,GAAA,MAAAC,EAHclE,EAAA,OAAK,CAAbiI,YAAX/H,EAGK,MAAA;AAAA,YAHsB,KAAK+H,EAAK;AAAA,UAAA;YACnCnH,EAAyB,MAAA,MAAA2C,EAAlBwE,EAAK,KAAK,GAAA,CAAA;AAAA,YACjBnH,EAAsB,KAAA,MAAA2C,EAAhBwE,EAAK,IAAI,GAAA,CAAA;AAAA,UAAA;;QAGRjI,EAAA,SAAS,eAApBE,EAKM,OAAA;AAAA;UALsB,OAAM;AAAA,UAAmB,cAAYF,EAAA;AAAA,QAAA;UAC/Dc,EAGM,OAHN4O,IAGM;AAAA,oBAFJxP,EAAoF+D,GAAA,MAAAC,EAA/DlE,EAAA,SAAO,CAAfmE,YAAbjE,EAAoF,QAAA;AAAA,cAArD,KAAKiE;AAAA,cAAM,OAAM;AAAA,YAAA,KAAsBA,CAAI,GAAA,CAAA;oBAC1EjE,EAAiH+D,GAAA,MAAAC,EAA5FlE,EAAA,SAAO,CAAfmE,YAAbjE,EAAiH,QAAA;AAAA,cAAlF,eAAeiE;AAAA,cAAM,OAAM;AAAA,cAAmB,eAAY;AAAA,YAAA,KAAUA,CAAI,GAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBCX/GlE,EAAA,GAAAC,EAiBU,WAjBVC,IAiBU;AAAA,MAhBRW,EAeM,OAfNC,IAeM;AAAA,QAdKf,EAAA,gBAATE,EAAsD,KAAtDc,IAAsDyC,EAAdzD,EAAA,OAAO,GAAA,CAAA;QAC/Cc,EAA6H,MAA7H4C,IAA6H;AAAA,UAApFF,EAAAC,EAAAzD,EAAA,KAAK,IAAG,KAAC,CAAA;AAAA,UAAYA,EAAA,kBAAZE,EAAsE,QAAtE6E,IAAsEtB,EAAnBzD,EAAA,SAAS,GAAA,CAAA;;QAC9Gc,EAWM,OAXNkE,IAWM;AAAA,kBAVJ9E,EASI+D,GAAA,MAAAC,EATWlE,EAAA,UAAQ,CAAbsZ,YAAVpZ,EASI,KAAA;AAAA,YATsB,KAAKoZ,EAAE;AAAA,YAAO,6BAA2BA,EAAE,UAAM,cAAkBA,EAAE,MAAM,EAAA,CAAA;AAAA,YAAM,MAAMA,EAAE,QAAI;AAAA,UAAA;YACrHxY,EAGM,OAHN4O,IAGM;AAAA,cAFJ5O,EAAiE,QAAjEyP,IAAiE9M,EAAhB6V,EAAE,IAAI,GAAA,CAAA;AAAA,cAC3CA,EAAE,OAAdrZ,EAAA,GAAAC,EAAqD,QAArDia,IAAqD1W,EAAf6V,EAAE,GAAG,GAAA,CAAA;;YAE7CxY,EAAmD,MAAnD0P,IAAmD/M,EAAd6V,EAAE,IAAI,GAAA,CAAA;AAAA,YAClCA,EAAE,WAAXrZ,EAAA,GAAAC,EAAwE,KAAxEiO,IAAwE1K,EAAhB6V,EAAE,OAAO,GAAA,CAAA;YACxDA,EAAE,WAAXrZ,EAAA,GAAAC,EAAwE,KAAxEkO,IAAwE3K,EAAhB6V,EAAE,OAAO,GAAA,CAAA;YACrDA,EAAE,QAAdrZ,EAAA,GAAAC,EAAqE,QAArEmO,IAAqE5K,EAAhB6V,EAAE,IAAI,GAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnBrE,UAAM5X,IAAQ1B,GAcR0kB,IAAS/kB,EAAO,iBAAiB,GACjCwhB,IAAQC,GAAA,GACRuD,IAAStjB,EAAS,MAAMK,EAAM,KAAK,KAAK,CAACsM,GAAG9I,MAAM,EAAQic,EAAM,SAASjc,CAAC,EAAE,CAAE,CAAC,GAC/E0f,IAAcvjB,EAAS,MAAOK,EAAM,SAAS,6BAA6BA,EAAM,MAAM,OAAO,MAAU;2BAI3GxB,EAsBU,WAAA;AAAA,MAtBA,8BAA4BF,EAAA,WAAO,2BAAA,CAAA;AAAA,MAAmC,mBAAiBa,EAAA6jB,CAAA;AAAA,IAAA;MAC/F5jB,EAAmF,OAAA;AAAA,QAA9E,OAAM;AAAA,QAA2B,SAAO8jB,EAAA,KAAW;AAAA,QAAE,eAAY;AAAA,MAAA;MACtE9jB,EAQM,OARNC,IAQM;AAAA,QAPJD,EAAmH,QAAnHE,IAAmH;AAAA,UAAhDZ,EAAyCC,wBAAzC,MAAyC;AAAA,gBAAlBL,EAAA,QAAQ,GAAA,CAAA;AAAA,UAAA;;QAClGc,EAIM,OAJN4C,IAIM;AAAA,WAHJzD,EAAA,GAAA4E,EAAmHC,EAAnG9E,EAAA,iBAAY,IAAA,OAAA,IAAA,GAAA;AAAA,YAAuB,IAAIa,EAAA6jB,CAAA;AAAA,YAAQ,OAAM;AAAA,UAAA;uBAAwB,MAAU;AAAA,kBAAP1kB,EAAA,IAAI,GAAA,CAAA;AAAA,YAAA;;;UAC3FA,EAAA,aAATE,EAA2D,KAA3D6E,IAA2DtB,EAAXzD,EAAA,IAAI,GAAA,CAAA;UAC3CA,EAAA,OAAOkC,EAAAA,OAAO,OAAvBjC,KAAAC,EAA8F,KAA9F8E,IAA8F;AAAA,YAArC5E,EAAiCC,qBAAjC,MAAiC;AAAA,kBAAbL,EAAA,GAAG,GAAA,CAAA;AAAA,YAAA;;;QAEvEkC,EAAAA,OAAO,WAAlBjC,KAAAC,EAAyF,OAAzF+E,IAAyF;AAAA,UAA7B7E,EAAuBC,EAAA,QAAA,SAAA;AAAA,QAAA;;MAErEL,EAAA,KAAK,UAAU2kB,EAAA,cAA/BzkB,EAOW+D,GAAA,EAAA,KAAA,EAAA,GAAA;AAAA,QANTnD,EAEM,OAAA;AAAA,UAFD,OAAM;AAAA,UAAwB,MAAK;AAAA,UAAc,cAAYd,EAAA;AAAA,QAAA;WAChEC,EAAA,EAAA,GAAAC,EAA2K+D,GAAA,MAAAC,EAAjJlE,EAAA,MAAI,CAAfmT,GAAKjO,YAApBhF,EAA2K,SAAA;AAAA,YAA1I,KAAKgF;AAAA,YAAG,OAAM;AAAA,UAAA;YAAuBpE,EAA8E,SAAA;AAAA,cAAvE,MAAK;AAAA,cAAS,SAASD,EAAA6jB,CAAA,CAAM;AAAA,cAAS,SAASvR,EAAI,WAAWjO,MAAC;AAAA,YAAA;YAAW1B,EAAAC,EAAA0P,EAAI,KAAK,GAAA,CAAA;AAAA,UAAA;;QAElKrS,EAEM,OAFNqZ,IAEM;AAAA,WADJla,EAAA,EAAA,GAAAC,EAAyG+D,GAAA,MAAAC,EAAjFlE,EAAA,MAAI,CAAfmT,GAAKjO,YAAlBhF,EAAyG,OAAA;AAAA,YAA1E,KAAKgF;AAAA,YAAG,OAAM;AAAA,UAAA;YAAyB9E,EAA6BC,mBAAP6E,CAAC,EAAA;AAAA,UAAA;;gBAGjFlF,EAAA,KAAK,eAArBE,EAEM,OAAA;AAAA;QAFuB,OAAM;AAAA,QAAyB,cAAYF,EAAA;AAAA,MAAA;SACtEC,EAAA,EAAA,GAAAC,EAAuJ+D,GAAA,MAAAC,EAAjIlE,EAAA,MAAI,CAAfmT,GAAKjO,YAAhBhF,EAAuJ,KAAA;AAAA,UAA1H,KAAKgF;AAAA,UAAG,OAAM;AAAA,UAAwB,MAAMiO,EAAI;AAAA,UAAO,gBAAcA,EAAI,mBAAmB;AAAA,QAAA,GAAc1P,EAAA0P,EAAI,KAAK,GAAA,GAAAhF,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBCrCpJlO,EAAA,GAAAC,EAqBU,WArBVC,IAqBU;AAAA,MApBRW,EAmBM,OAnBNC,IAmBM;AAAA,QAlBKf,EAAA,gBAATE,EAAsD,KAAtDc,IAAsDyC,EAAdzD,EAAA,OAAO,GAAA,CAAA;QAC/Cc,EAA6H,MAA7H4C,IAA6H;AAAA,UAApFF,EAAAC,EAAAzD,EAAA,KAAK,IAAG,KAAC,CAAA;AAAA,UAAYA,EAAA,kBAAZE,EAAsE,QAAtE6E,IAAsEtB,EAAnBzD,EAAA,SAAS,GAAA,CAAA;;QAC9Gc,EAeM,OAfNkE,IAeM;AAAA,kBAdJ9E,EAaI+D,GAAA,MAAAC,EAbWlE,EAAA,UAAQ,CAAbsZ,YAAVpZ,EAaI,KAAA;AAAA,YAbsB,KAAKoZ,EAAE;AAAA,YAAO,6BAA2BA,EAAE,UAAM,cAAkBA,EAAE,MAAM,IAAA,qBAAA,CAAA;AAAA,YAA6B,MAAMA,EAAE,QAAI;AAAA,UAAA;YAC5IxY,EAKO,QALP4O,IAKO;AAAA,8BAJL5O,EAAgE,QAAA,EAA1D,OAAM,2BAAuB;AAAA,gBAACA,EAAO,GAAA;AAAA,gBAAAA,EAAO,GAAA;AAAA,gBAAAA,EAAO,GAAA;AAAA,cAAA;cACzDA,EAEO,QAAA;AAAA,gBAFD,OAAM;AAAA,gBAA0B,OAAKwD,EAAEgV,EAAE,2BAA2BA,EAAE,WAAA,IAAe,MAAS;AAAA,cAAA;gBACvFA,EAAE,cAAbpZ,EAA4C,OAAA;AAAA;kBAAvB,KAAKoZ,EAAE;AAAA,kBAAO,KAAI;AAAA,gBAAA;;;YAG3CxY,EAKO,QALPqZ,IAKO;AAAA,cAJOb,EAAE,OAAdrZ,EAAA,GAAAC,EAAqE,QAArEsQ,IAAqE/M,EAAf6V,EAAE,GAAG,GAAA,CAAA;cAC3DxY,EAAuD,QAAvDqN,IAAuD1K,EAAhB6V,EAAE,IAAI,GAAA,CAAA;AAAA,cACjCA,EAAE,WAAdrZ,EAAA,GAAAC,EAA8E,QAA9EkO,IAA8E3K,EAAnB6V,EAAE,OAAO,GAAA,CAAA;cACxDA,EAAE,QAAdrZ,EAAA,GAAAC,EAAqE,QAArEmO,IAAqE5K,EAAhB6V,EAAE,IAAI,GAAA,CAAA;;;;;;;;;;;;;;;;;;;;sBCZrErZ,EAAA,GAAAC,EA4BS,UA5BTC,IA4BS;AAAA,MA3BPW,EA0BM,OA1BNC,IA0BM;AAAA,QAzBJD,EAoBM,OApBNE,IAoBM;AAAA,UAnBJF,EAGM,OAHN4C,IAGM;AAAA,YAFJtD,EAAqBC,EAAA,QAAA,OAAA;AAAA,YACZL,EAAA,SAATC,EAAA,GAAAC,EAA+B,WAAZF,EAAA,KAAK,GAAA,CAAA;;kBAE1BE,EAKM+D,GAAA,MAAAC,EALalE,EAAA,SAAO,CAAdyV,YAAZvV,EAKM,OAAA;AAAA,YALuB,KAAKuV,EAAI;AAAA,UAAA;YACpC3U,EAAsD,MAAtDkE,IAAsDvB,EAAjBgS,EAAI,KAAK,GAAA,CAAA;AAAA,YAC9C3U,EAEK,MAFLmE,IAEK;AAAA,eADHhF,EAAA,EAAA,GAAAC,EAA0G+D,GAAA,MAAAC,EAAvFuR,EAAI,QAAZzR,YAAX9D,EAA0G,MAAA;AAAA,gBAA3E,KAAK8D,EAAK,OAAOA,EAAK;AAAA,cAAA;gBAAOlD,EAAyC,KAAA;AAAA,kBAArC,MAAMkD,EAAK;AAAA,gBAAA,GAASP,EAAAO,EAAK,KAAK,GAAA,GAAA0L,EAAA;AAAA,cAAA;;;UAGvF1P,EAAA,gBAAXE,EAQM,OAAAqQ,IAAA;AAAA,YAPJzP,EAA0D,MAA1DqZ,IAA0D1W,EAArBzD,EAAA,QAAQ,KAAK,GAAA,CAAA;AAAA,YAClDc,EAKU,WALV0P,IAKU;AAAA,eAJRvQ,EAAA,EAAA,GAAAC,EAGW+D,GAAA,MAAAC,EAHclE,EAAA,QAAQ,QAAhBwR;gBAA6B,KAAAA,EAAK;AAAA,cAAA;gBACxCA,EAAK,aAAdtR,EAA0D,KAAA;AAAA;kBAArC,MAAMsR,EAAK;AAAA,gBAAA,GAAS/N,EAAA+N,EAAK,KAAK,GAAA,GAAArD,EAAA,WACnDjO,EAAoC,QAAAkO,IAAA3K,EAApB+N,EAAK,KAAK,GAAA,CAAA;AAAA,cAAA;;;;QAKvBxR,EAAA,aAAaA,EAAA,UAAUkC,EAAAA,0BAA0BA,EAAAA,OAAM,YAAA,KAAlEjC,EAAA,GAAAC,EAGM,OAHNmO,IAGM;AAAA,UAFJvN,EAA6D,QAAA,MAAA;AAAA,YAAvDV,EAAgDC,8BAAhD,MAAgD;AAAA,kBAAnBL,EAAA,SAAS,GAAA,CAAA;AAAA,YAAA;;UAC5Cc,EAAwD,QAAA,MAAA;AAAA,YAAlDV,EAA2CC,4BAA3C,MAA2C;AAAA,kBAAhBL,EAAA,MAAM,GAAA,CAAA;AAAA,YAAA;;;;;;;;;;;;;;;AChC/C,UAAM6kB,IAAQllB,EAAO,aAAa;sBAIhCM,EAAA,GAAAC,EAWS,UAXTC,IAWS;AAAA,MAVPW,EASM,OATNC,IASM;AAAA,QARJD,EAA2E,KAAA;AAAA,UAAxE,OAAM;AAAA,UAAyB,MAAMd,EAAA;AAAA,QAAA;UAAUI,EAAqBC,EAAA,QAAA,OAAA;AAAA,QAAA;QACvES,EAAoH,UAAA;AAAA,UAA5G,OAAM;AAAA,UAAyB,MAAK;AAAA,UAAU,eAAeD,EAAAgkB,CAAA;AAAA,UAAQ,cAAY7kB,EAAA;AAAA,QAAA,GAAW,KAAO,GAAA0D,EAAA;AAAA,QAC3G5C,EAKM,OAAA;AAAA,UALA,IAAID,EAAAgkB,CAAA;AAAA,UAAO,OAAM;AAAA,UAAsB,SAAA;AAAA,UAAS,cAAY7kB,EAAA;AAAA,QAAA;UAChEI,EAEOC,qBAFP,MAEO;AAAA,oBADLH,EAA+I+D,GAAA,MAAAC,EAA7HlE,EAAA,OAAK,CAAbmE,YAAVjE,EAA+I,KAAA;AAAA,cAArH,KAAKiE,EAAK,OAAOA,EAAK;AAAA,cAAQ,MAAMA,EAAK;AAAA,cAAO,gBAAcA,EAAK,mBAAmB;AAAA,YAAA,GAAcV,EAAAU,EAAK,KAAK,GAAA,GAAAa,EAAA;;UAE1I5E,EAAmBC,EAAA,QAAA,KAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBCLzBJ,EAAA,GAAAC,EAqBU,WArBVC,IAqBU;AAAA,MApBRW,EAmBM,OAnBNC,IAmBM;AAAA,QAlBJD,EAiBM,OAAA;AAAA,UAjBA,OAAKR,EAAA,CAAA,gBAAmBN,EAAA,UAAM,cAAkBA,EAAA,MAAM,EAAA,CAAA;AAAA,QAAA;UAC1Dc,EAUM,OAAA,MAAA;AAAA,YATQd,EAAA,SAAZC,EAAA,GAAAC,EAAwG,QAAxGc,IAAwG;AAAA,8BAArDF,EAAmC,QAAA,EAA7B,OAAM,gBAAA,GAAe,MAAA,EAAA;AAAA,kBAAWd,EAAA,KAAK,GAAA,CAAA;AAAA,YAAA;YAC9Fc,EAEK,MAFL4C,IAEK;AAAA,cADS1D,EAAA,aAAZE,EAA4F,QAA5F6E,IAA4FtB,EAAdzD,EAAA,IAAI,GAAA,CAAA;kBAAaA,EAAA,KAAK,GAAA,CAAA;AAAA,YAAA;YAE7FA,EAAA,gBAATE,EAAiE,KAAjE8E,IAAiEvB,EAAdzD,EAAA,OAAO,GAAA,CAAA;YACjDA,EAAA,aAATE,EAA6C,KAA7C+E,IAA6CxB,EAAXzD,EAAA,IAAI,GAAA,CAAA;YACtCI,EAEOC,qBAFP,MAEO;AAAA,cADIL,EAAA,iBAATE,EAAuG,KAAA;AAAA;gBAApF,OAAM;AAAA,gBAAsC,MAAMF,EAAA,WAAO;AAAA,cAAA,KAAYA,EAAA,QAAQ,GAAA,GAAA0P,EAAA;;;UAG1F1P,EAAA,SAAS,UAAnBC,KAAAC,EAIK,MAJLqQ,IAIK;AAAA,oBAHHrQ,EAEK+D,GAAA,MAAAC,EAFWlE,EAAA,SAAO,CAAZgG,YAAX9F,EAEK,MAAA;AAAA,cAFqB,KAAK8F,EAAE;AAAA,YAAA;cAC/BlF,EAAkF,QAAlFqZ,IAAkF1W,EAAhBuC,EAAE,IAAI,GAAA,CAAA;AAAA,cAAaxC,EAAAC,EAAAuC,EAAE,KAAK,GAAA,CAAA;AAAA,YAAA;;;;;;;;;;;;sBC9BtG/F,EAAA,GAAAC,EAKM,OALNC,IAKM;AAAA,cAJJD,EAGM+D,GAAA,MAAAC,EAHclE,EAAA,OAAK,CAAbmE,YAAZjE,EAGM,OAAA;AAAA,QAHsB,KAAKiE,EAAK;AAAA,QAAO,OAAM;AAAA,MAAA;QACjDrD,EAAuD,OAAvDC,IAAuD0C,EAAnBU,EAAK,KAAK,GAAA,CAAA;AAAA,QAC9CrD,EAAuD,OAAvDE,IAAuDyC,EAAnBU,EAAK,KAAK,GAAA,CAAA;AAAA,MAAA;;;;;;;;;sBCAlDlE,EAAA,GAAAC,EAKM,OALNC,IAKM;AAAA,cAJJD,EAGM+D,GAAA,MAAAC,EAHclE,EAAA,OAAK,CAAbmE,YAAZjE,EAGM,OAAA;AAAA,QAHsB,KAAKiE,EAAK;AAAA,QAAO,OAAM;AAAA,MAAA;QACjDgB,GAA6E2f,IAAA;AAAA,UAAlE,OAAM;AAAA,UAAuB,IAAI3gB,EAAK;AAAA,UAAK,QAAQA,EAAK;AAAA,QAAA;QACnErD,EAAyD,QAAzDC,IAAyD0C,EAApBU,EAAK,KAAK,GAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;ACOrD,UAAMgE,IAAOxI,EAAO,cAAc;sBAIhCM,EAAA,GAAAC,EAwBM,OAxBNC,IAwBM;AAAA,OAvBJF,EAAA,EAAA,GAAAC,EAsBM+D,GAAA,MAAAC,EAtBqBlE,EAAA,SAAO,CAArB+kB,GAAQ7f,YAArBhF,EAsBM,OAAA;AAAA,QAtB+B,KAAK6kB,EAAO,SAASA,EAAO;AAAA,QAAM,OAAM;AAAA,MAAA;QAC3EjkB,EAMM,OANNC,IAMM;AAAA,UALJD,EAAoD,QAApDE,IAAoDyC,EAAzBshB,EAAO,QAAQ,GAAA,CAAA;AAAA,UAC1CjkB,EAGO,QAHP4C,IAGO;AAAA,YAFL5C,EAAmD,QAAnDiE,IAAmDtB,EAArBshB,EAAO,IAAI,GAAA,CAAA;AAAA,YAC7BA,EAAO,SAAnB9kB,EAAA,GAAAC,EAAyE,QAAzE8E,IAAyEvB,EAAtBshB,EAAO,KAAK,GAAA,CAAA;;;QAGnEjkB,EAaM,OAbNmE,IAaM;AAAA,UAZQ8f,EAAO,aAAnB7kB,EAAoK,QAAA;AAAA;YAA1I,OAAKI,EAAA,CAAA,YAAeykB,EAAO,eAAeA,EAAO,gBAAW,aAAA,aAA+BA,EAAO,WAAW,EAAA,CAAA;AAAA,UAAA,GAAQthB,EAAAshB,EAAO,IAAI,GAAA,CAAA;UAC1J3kB,EAAqCC,EAAA,QAAA,QAAA,EAAlB,QAAA0kB,GAAc;AAAA,UACjBA,EAAO,SAAS,eAAhC7kB,EASW+D,GAAA,EAAA,KAAA,KAAA;AAAA,YARTnD,EAA2K,UAAA;AAAA,cAAnK,OAAM;AAAA,cAA+C,MAAK;AAAA,cAAU,eAAa,GAAKD,EAAAsH,CAAA,CAAI,IAAIjD,CAAC;AAAA,cAAK,cAAYlF,EAAA,gBAAY;AAAA,YAAA,GAAsB,KAAQ,GAAA0P,EAAA;AAAA,YAClK5O,EAMM,OAAA;AAAA,cANA,IAAE,GAAKD,EAAAsH,CAAA,CAAI,IAAIjD,CAAC;AAAA,cAAI,OAAM;AAAA,cAAmB,SAAA;AAAA,YAAA;eACjDjF,EAAA,EAAA,GAAAC,EAIW+D,GAAA,MAAAC,EAJgB6gB,EAAO,UAAjBpO;gBAAgC,KAAAA,EAAO;AAAA,cAAA;gBAC3CA,EAAO,aAAlB1W,EAAA,GAAAC,EAAiE,OAAjEia,EAAiE;gBACxDxD,EAAO,aAAhBzW,EAAsI,KAAA;AAAA;kBAAhH,OAAM;AAAA,kBAAoB,MAAMyW,EAAO;AAAA,kBAAO,SAAK,CAAAvU,MAAE+Y,EAAAA,MAAK,UAAA,EAAa,QAAA4J,GAAQ,QAAApO,EAAA,CAAM;AAAA,gBAAA,GAAQlT,EAAAkT,EAAO,KAAK,GAAA,GAAAnG,EAAA,WAC/HtQ,EAA8H,UAAA;AAAA;kBAA/G,OAAM;AAAA,kBAAmB,MAAK;AAAA,kBAAU,SAAK,CAAAkC,MAAE+Y,EAAAA,MAAK,UAAA,EAAa,QAAA4J,GAAQ,QAAApO,EAAA,CAAM;AAAA,gBAAA,GAAQlT,EAAAkT,EAAO,KAAK,GAAA,GAAAxI,EAAA;AAAA,cAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACbhI,UAAMtE,IAAOrJ,EAAmBR,GAAA,YAAgB,GAC1CglB,IAASrlB,EAAO,mBAAmB;sBAIvCM,EAAA,GAAAC,EAsBM,OAtBNC,IAsBM;AAAA,MArBJW,EASU,WATVC,IASU;AAAA,QARRD,EAGM,OAHNE,IAGM;AAAA,UAFJF,EAAiD,MAAjD4C,IAAiDD,EAAjBzD,EAAA,SAAS,GAAA,CAAA;AAAA,UAChCA,EAAA,iBAATE,EAAoE,KAApE6E,IAAoEtB,EAAfzD,EAAA,QAAQ,GAAA,CAAA;;QAE/Dc,EAGM,OAHNkE,IAGM;AAAA,UAFJ5E,EAAuGC,oBAAvG,MAAuG;AAAA,4BAAvFS,EAAgF,OAAA;AAAA,cAA3E,OAAM;AAAA,cAAwB,MAAK;AAAA,cAAM,cAAW;AAAA,YAAA,GAAU,WAAO,EAAA;AAAA,UAAA;UAC1FqE,GAAmD8f,IAAA;AAAA,YAArC,OAAOjlB,EAAA;AAAA,YAAU,OAAM;AAAA,UAAA;;;MAGzCc,EAOU,WAPVmE,IAOU;AAAA,QANRnE,EAAiG,OAAjG4O,IAAiG;AAAA,UAA1D5O,EAAoD,MAApDyP,IAAoD9M,EAApBzD,EAAA,YAAY,GAAA,CAAA;AAAA,QAAA;QACnFc,EAGM,OAHNqZ,IAGM;AAAA,UAFJrZ,EAAmE,SAAA;AAAA,YAA5D,OAAM;AAAA,YAAkB,KAAKD,EAAAmkB,CAAA;AAAA,UAAA,KAAWhlB,EAAA,SAAS,GAAA,GAAAwQ,EAAA;AAAA,UACxDrL,GAAuE+f,IAAA;AAAA,YAA1D,IAAIrkB,EAAAmkB,CAAA;AAAA,wBAAiBnb,EAAA;AAAA,0DAAAA,EAAI,QAAAzH;AAAA,YAAE,MAAK;AAAA,YAAQ,QAAQpC,EAAA;AAAA,UAAA;;QAE/Dc,EAA8F,UAAA;AAAA,UAAtF,OAAM;AAAA,UAAS,MAAK;AAAA,UAAU,SAAKwC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAlB,MAAE+Y,EAAAA,MAAK,UAAWtR,EAAA,KAAI;AAAA,QAAA,KAAM7J,EAAA,WAAW,GAAA,CAAA;AAAA,MAAA;MAErEA,EAAA,eAAe,UAA9BC,KAAAC,EAEU,WAFViO,IAEU;AAAA,QADRhJ,GAA0CggB,IAAA,EAAxB,OAAOnlB,EAAA,cAAA,GAAa,MAAA,GAAA,CAAA,OAAA,CAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;AC7C5C,UAAM0B,IAAQ1B,GAYR4C,IAAOC,GACPtC,IAAOC,EAAoBR,GAAC,MAA0B,GACtDiI,IAAOzH,EAAmBR,GAAC,MAAsB,GACjDsC,IAAKQ,EAA8B,IAAI,GACvC,EAAE,SAAAH,EAAA,IAAYN,GAAU9B,GAAM+B,CAAE,GAChCS,IAAUpD,EAAO,iBAAiB,GAClCmR,IAAOzP,EAAS,MAAM4G,EAAK,SAASvG,EAAM,MAAM,SAAS,CAAC,GAC1DghB,IAAcrhB,EAAS,OAAOK,EAAM,aAAa,CAACwD,GAAGuH,MAAM,QAAQvH,CAAC,OAAOuH,CAAC,KAAKxE,EAAK,QAAQ,GAAGvG,EAAM,MAAM,MAAM,CAAC;AAE1H,aAAS2G,IAAO;AACd,MAAIyI,EAAK,SACPlO,EAAK,QAAQ,GACbrC,EAAK,QAAQ,MAEb0H,EAAK;AAAA,IAET;2BAIE/H,EAqBS,UAAA;AAAA,eArBG;AAAA,MAAJ,KAAIoC;AAAA,MAAK,OAAM;AAAA,MAAW,UAAS;AAAA,MAAgB,mBAAiBzB,EAAAkC,CAAA;AAAA,MAAU,SAAKO,EAAA,CAAA,MAAAA,EAAA,CAAA;AAAA,gBAAEzC,EAAA8B,CAAA,KAAA9B,EAAA8B,CAAA,EAAA,GAAAY,CAAA;AAAA,IAAA;MAC3FzC,EAmBM,OAnBNC,IAmBM;AAAA,QAlBJD,EAiBM,OAjBNE,IAiBM;AAAA,UAhBJF,EAEM,OAFN4C,IAEM;AAAA,YADJyB,GAA+DigB,IAAA;AAAA,0BAA3Cnd,EAAA;AAAA,4DAAAA,EAAI,QAAA7F;AAAA,cAAG,OAAOpC,EAAA;AAAA,cAAQ,OAAOA,EAAA;AAAA,YAAA;;UAEnDc,EAYM,OAZNiE,IAYM;AAAA,YAXJjE,EAGM,OAHNkE,IAGM;AAAA,cAFJlE,EAAsE,MAAA;AAAA,gBAAjE,IAAID,EAAAkC,CAAA;AAAA,gBAAS,OAAM;AAAA,cAAA,KAAoB/C,EAAA,MAAMiI,EAAA,KAAI,GAAG,KAAK,GAAA,GAAAhD,EAAA;AAAA,cAC9DnE,EAAqD,KAArD4O,IAAqDjM,EAAlBif,EAAA,KAAW,GAAA,CAAA;AAAA,YAAA;YAEhD5hB,EAEM,OAFNyP,IAEM;AAAA,cADJnQ,EAAgHC,kBAA3F4H,EAAA,KAAI,IAAA;AAAA,gBAAK,MAAMjI,EAAA,MAAMiI,EAAA,KAAI;AAAA,gBAAI,OAAOA,EAAA;AAAA,cAAA,GAAzD,MAAgH;AAAA,gBAAjD7H,EAA0CC,EAAA,QAAA,WAAA;AAAA,kBAAnC,MAAML,EAAA,MAAMiI,EAAA,KAAI;AAAA,kBAAI,OAAOA,EAAA;AAAA,gBAAA;;;YAEnGnH,EAGM,OAHNqZ,IAGM;AAAA,cAFJrZ,EAAoH,UAAA;AAAA,gBAA5G,OAAM;AAAA,gBAAyB,MAAK;AAAA,gBAAU,UAAUmH,EAAA,UAAI;AAAA,gBAAS,gCAAOA,EAAA;AAAA,cAAA,KAAWjI,EAAA,SAAS,GAAA,GAAAwQ,EAAA;AAAA,cACxG1P,EAAgG,UAAA;AAAA,gBAAxF,OAAM;AAAA,gBAAS,MAAK;AAAA,gBAAU,SAAOuH;AAAA,cAAA,KAASyI,EAAA,QAAO9Q,EAAA,cAAcA,EAAA,SAAS,GAAA,CAAA;AAAA,YAAA;;;;;;IC0anFqlB,KAAwC;AAAA,EAAA,aACnDC;AAAAA,EAAA,mBACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,cACAC;AAAAA,EAAA,SACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,cACAzgB;AAAAA,EAAA,mBACA6X;AAAAA,EAAA,kBACA6I;AAAAA,EAAA,mBACA9I;AAAAA,EAAA,UACA+I;AAAAA,EAAA,eACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,SACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,cACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,UACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,mBACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,QACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,cACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,cACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,aACAxC;AAAAA,EAAA,WACAH;AAAAA,EAAA,aACA4C;AAAAA,EAAA,iBACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,kBACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,qBACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,cACAC;AAAAA,EAAA,cACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,SACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,cACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,SACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,SACAC;AAAAA,EAAA,cACAC;AAAAA,EAAA,QACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,OACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,SACAC;AAAAA,EAAA,kBACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,cACAlO;AAAAA,EAAA,cACAmO;AAAAA,EAAA,WACAxN;AAAAA,EAAA,eACAO;AAAAA,EAAA,iBACAkN;AAAAA,EAAA,YACAC;AAAAA,EAAA,SACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,eACAnN;AAAAA,EAAA,cACAoN;AAAAA,EAAA,eACAC;AAAAA,EAAA,YACAhG;AAAAA,EAAA,cACAiG;AAAAA,EAAA,cACAC;AAAAA,EAAA,SACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,wBACAC;AAAAA,EAAA,cACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,SACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,YACAtf;AAAAA,EAAA,eACAiY;AAAAA,EAAA,SACAsH;AAAAA,EAAA,YACAC;AAAAA,EAAA,SACAtL;AAAAA,EAAA,cACAuL;AAAAA,EAAA,UACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,iBACAhH;AAAAA,EAAA,UACAiH;AAAAA,EAAA,UACAC;AAAAA,EAAA,cACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,UACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,SACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,sBACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,qBACAC;AAAAA,EAAA,oBACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,UACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,UACAC;AAAAA,EAAA,aACA1M;AAAAA,EAAA,WACAoE;AAAAA,EAAA,SACAuI;AAAAA,EAAA,UACAC;AAAAA,EAAA,SACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,QACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,YACA7K;AAAAA,EAAA,YACA8K;AAAAA,EAAA,gBACAC;AAAAA,EAAA,kBACAC;AAAAA,EAAA,kBACAC;AAAAA,EAAA,SACA3L;AAAAA,EAAA,kBACA4L;AAAAA,EAAA,UACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,WACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,QACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,QACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,sBACAC;AAAAA,EAAA,kBACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,kBACAC;AAAAA,EAAA,oBACAC;AAAAA,EAAA,oBACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,kBACAC;AAAAA,EAAA,YACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,eACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,aACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,kBACAC;AAAAA,EAAA,kBACAC;AAAAA,EAAA,qBACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,sBACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,gBACAC;AAAAA,EAAA,oBACAC;AAAAA,EAAA,sBACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,mBACAC;AAAAA,EAAA,mBACAC;AAAAA,EAAA,kBACAC;AAAAA,EAAA,cACAC;AAAAA,EAAA,qBACAC;AAAAA,EAAA,iBACAC;AAAAA,EAAA,kBACAC;AAAAA,EAAA,qBACAC;AACF,GAGaC,KAAW;AAAA,EACtB,QAAQC,GAAU;AAChB,eAAW,CAAC9wB,GAAM+wB,CAAS,KAAK,OAAO,QAAQnM,EAAU,EAAG,CAAAkM,EAAI,UAAU9wB,GAAM+wB,CAAS;AAAA,EAC3F;AACF;"}
|