@birdycom/omniaui-vue 0.12.2 → 0.12.3
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/components/OcAlert.vue.d.ts +2 -1
- package/dist/components/OcButton.vue.d.ts +2 -1
- package/dist/components/OcGlass.vue.d.ts +21 -0
- package/dist/components/OcGlassPanel.vue.d.ts +16 -0
- package/dist/components/OcProgress.vue.d.ts +6 -0
- package/dist/components/OcProse.vue.d.ts +4 -4
- package/dist/components/OcStatus.vue.d.ts +20 -0
- package/dist/components/OcStatusDot.vue.d.ts +12 -0
- package/dist/components/OcTitlebar.vue.d.ts +29 -0
- package/dist/components/OcTitlebarBody.vue.d.ts +12 -0
- package/dist/components/OcTitlebarButton.vue.d.ts +18 -0
- package/dist/components/OcTitlebarWindow.vue.d.ts +12 -0
- package/dist/index.d.ts +9 -1
- package/dist/omniaui-vue.js +2977 -2796
- package/dist/omniaui-vue.js.map +1 -1
- package/manifest.json +48 -0
- package/package.json +1 -1
- package/src/components/OcAlert.vue +3 -2
- package/src/components/OcButton.vue +4 -1
- package/src/components/OcGlass.vue +10 -0
- package/src/components/OcGlassPanel.vue +9 -0
- package/src/components/OcProgress.vue +25 -5
- package/src/components/OcProse.vue +3 -3
- package/src/components/OcStatus.vue +16 -0
- package/src/components/OcStatusDot.vue +18 -0
- package/src/components/OcTitlebar.vue +18 -0
- package/src/components/OcTitlebarBody.vue +8 -0
- package/src/components/OcTitlebarButton.vue +10 -0
- package/src/components/OcTitlebarWindow.vue +8 -0
- package/src/index.ts +24 -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","../src/components/OcBackLink.vue","../src/components/OcBadge.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/OcColumnMenu.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/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/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/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/OcModal.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/OcPriceCard.vue","../src/components/OcProductMark.vue","../src/components/OcProjectCard.vue","../src/components/OcProse.vue","../src/composables/keys.ts","../src/components/OcRadio.vue","../src/components/OcRadioGroup.vue","../src/components/OcRecoveryCodes.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/OcSpinner.vue","../src/components/OcStackCard.vue","../src/components/OcStackList.vue","../src/components/OcStatCard.vue","../src/components/OcStepper.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/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. Default slot = description. */\r\nwithDefaults(\r\n defineProps<{\r\n variant?: 'info' | 'success' | 'warning' | 'danger'\r\n title?: string\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}`]\" role=\"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 Dewitte 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","<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/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/** Breadcrumb. Pass `items` (the last one is the current page) or use the default slot. */\r\nexport interface BreadcrumbItem {\r\n label: string\r\n href?: string\r\n}\r\nwithDefaults(defineProps<{ items?: BreadcrumbItem[]; label?: string }>(), {\r\n items: () => [],\r\n label: 'Breadcrumb',\r\n})\r\n</script>\r\n\r\n<template>\r\n <nav class=\"oc-breadcrumb\" :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\">{{ item.label }}</a>\r\n <span v-else class=\"oc-breadcrumb-item\" aria-current=\"page\">{{ item.label }}</span>\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-bar--success/warning/danger */\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 label?: string\r\n }>(),\r\n { max: 100, variant: 'default' },\r\n)\r\nconst percent = computed(() => Math.min(100, Math.max(0, Math.round((props.value / props.max) * 100))))\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-progress\" role=\"progressbar\" :aria-valuenow=\"value\" aria-valuemin=\"0\" :aria-valuemax=\"max\" :aria-label=\"label\">\r\n <div :class=\"['oc-progress-bar', variant !== 'default' && `oc-progress-bar--${variant}`]\" :style=\"{ width: `${percent}%` }\"></div>\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 * --xs/--sm/--lg, --icon, --pill\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n variant?: 'default' | 'secondary' | 'outline' | 'ghost' | 'link' | 'destructive' | 'success' | 'gradient' | 'glass'\r\n size?: 'xs' | 'sm' | 'md' | 'lg'\r\n icon?: boolean\r\n pill?: 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 :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 ]\"\r\n >\r\n <slot />\r\n </a>\r\n <button\r\n v-else\r\n :type=\"type\"\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 ]\"\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\">➤</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","<!-- File: packages/vue/src/components/OcColumnMenu.vue | Map: scope -> toolbar trigger -> popover (title, form with one checkbox per column, reset) -> default slot (the table) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Column visibility menu. CSS hides column n of the table in the default slot when [data-col=\"n\"] is unchecked.\r\n * Checkboxes are uncontrolled, so \"Reset\" (form reset) restores the defaults. Emits `toggle(column, visible)`.\r\n * Classes: .oc-column-menu-scope, .oc-column-menu[popover], -title, form.oc-column-menu-list, -item, -footer\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n /** One entry per column, in order (max 10). */\r\n columns: Array<{ label: string; visible?: boolean; locked?: boolean }>\r\n triggerLabel?: string\r\n title?: string\r\n resetLabel?: string\r\n }>(),\r\n { triggerLabel: 'Columns', title: 'Visible columns', resetLabel: 'Reset' },\r\n)\r\nconst emit = defineEmits<{ toggle: [column: number, visible: boolean] }>()\r\nconst menuId = useUid('oc-column-menu')\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-column-menu-scope\">\r\n <div class=\"oc-table-toolbar\">\r\n <span class=\"oc-table-toolbar-spacer\"></span>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" :popovertarget=\"menuId\">{{ triggerLabel }}</button>\r\n </div>\r\n <div :id=\"menuId\" class=\"oc-column-menu\" popover>\r\n <p class=\"oc-column-menu-title\">{{ title }}</p>\r\n <form class=\"oc-column-menu-list\">\r\n <label v-for=\"(col, i) in columns\" :key=\"i\" class=\"oc-column-menu-item\">\r\n <input\r\n type=\"checkbox\"\r\n :data-col=\"i + 1\"\r\n :checked=\"col.locked || col.visible !== false\"\r\n :disabled=\"col.locked\"\r\n @change=\"emit('toggle', i + 1, ($event.target as HTMLInputElement).checked)\"\r\n />\r\n {{ col.label }}\r\n </label>\r\n <div class=\"oc-column-menu-footer\">\r\n <button class=\"oc-btn oc-btn--ghost oc-btn--sm\" type=\"reset\">{{ resetLabel }}</button>\r\n </div>\r\n </form>\r\n </div>\r\n <slot />\r\n </div>\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, sort, pages, columns, resize, drag, trash, bulk) -> boot\r\n// The list table used in Korrekt and OmniaDesk. 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-reorder, oc-datatable-search and oc-datatable-import.\r\n\r\n/** Page numbers with ellipses, same window as OmniaDesk (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 let sortKey = \"\";\r\n let sortDir = \"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, column widths, 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 savedWidths = readStore(id, \"widths\") || {};\r\n for (const th of table.tHead.rows[0].cells) {\r\n if (savedWidths[th.dataset.ocCol]) {\r\n th.style.width = savedWidths[th.dataset.ocCol];\r\n table.classList.add(\"oc-data-table-table--sized\");\r\n }\r\n }\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 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 matched = () => rows().filter((row) => rowPasses(row.dataset.ocStatus, filter, textOf(row), query));\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 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 title = document.createElement(\"h3\");\r\n title.className = \"oc-data-table-card-title\";\r\n const name = [...row.cells].find((td) => td.dataset.ocCol === \"name\") || [...row.cells].find((td) => td.dataset.ocCol && !SKIP_COL.has(td.dataset.ocCol));\r\n title.textContent = name ? name.textContent.trim() : row.dataset.ocKey;\r\n card.append(title);\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]) tbody.append(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) row.hidden = !visible.has(row);\r\n if (empty) empty.hidden = list.length !== 0;\r\n if (summary) {\r\n summary.textContent = list.length === 0\r\n ? \"Showing 0 of 0\"\r\n : `Showing ${start + 1}–${start + visible.size} of ${list.length}`;\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?.(\"[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 const sortBtn = event.target.closest(\".oc-table-sort\");\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 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-reset-widths]\")) {\r\n for (const th of table.tHead.rows[0].cells) th.style.width = \"\";\r\n table.classList.remove(\"oc-data-table-table--sized\");\r\n writeStore(id, \"widths\", {});\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 // Column resize: drag the handle on the header. Width is remembered per table id.\r\n root.addEventListener(\"pointerdown\", (event) => {\r\n const handle = event.target.closest(\".oc-data-table-resize\");\r\n if (!handle || !root.contains(handle)) return;\r\n const th = handle.closest(\"th\");\r\n if (!th) return;\r\n event.preventDefault();\r\n const startX = event.clientX;\r\n const startW = th.getBoundingClientRect().width;\r\n const min = Number(th.dataset.ocMin || 64);\r\n root.classList.add(\"is-resizing\");\r\n table.classList.add(\"oc-data-table-table--sized\");\r\n const move = (ev) => {\r\n const width = Math.max(min, Math.round(startW + ev.clientX - startX));\r\n th.style.width = `${width}px`;\r\n };\r\n const up = () => {\r\n root.classList.remove(\"is-resizing\");\r\n window.removeEventListener(\"pointermove\", move);\r\n window.removeEventListener(\"pointerup\", up);\r\n const widths = {};\r\n for (const head of table.tHead.rows[0].cells) if (head.style.width) widths[head.dataset.ocCol] = head.style.width;\r\n writeStore(id, \"widths\", widths);\r\n };\r\n window.addEventListener(\"pointermove\", move);\r\n window.addEventListener(\"pointerup\", up);\r\n });\r\n\r\n // Row drag starts from the grip only, so selecting text in a cell still works.\r\n let dragKey = \"\";\r\n root.addEventListener(\"pointerdown\", (event) => {\r\n const grip = event.target.closest(\".oc-sortable-row-grip\");\r\n const row = grip?.closest(\"[data-oc-row]\");\r\n if (row && root.contains(row)) row.draggable = true;\r\n });\r\n root.addEventListener(\"dragstart\", (event) => {\r\n const row = event.target.closest?.(\"[data-oc-row]\");\r\n if (!row?.draggable) return;\r\n dragKey = row.dataset.ocKey;\r\n row.classList.add(\"is-dragging\", \"oc-sortable-row\");\r\n event.dataTransfer.effectAllowed = \"move\";\r\n });\r\n root.addEventListener(\"dragover\", (event) => {\r\n const row = event.target.closest?.(\"[data-oc-row]\");\r\n if (!row || !dragKey || row.dataset.ocKey === dragKey) return;\r\n event.preventDefault();\r\n const box = row.getBoundingClientRect();\r\n const after = event.clientY > box.top + box.height / 2;\r\n tbody.querySelectorAll(\".is-drop-before, .is-drop-after\").forEach((el) => el.classList.remove(\"is-drop-before\", \"is-drop-after\"));\r\n row.classList.add(\"oc-sortable-row\", after ? \"is-drop-after\" : \"is-drop-before\");\r\n });\r\n root.addEventListener(\"drop\", (event) => {\r\n const row = event.target.closest?.(\"[data-oc-row]\");\r\n const from = dragKey ? tbody.querySelector(`[data-oc-key=\"${CSS.escape(dragKey)}\"]`) : null;\r\n if (!row || !from || row === from) return;\r\n event.preventDefault();\r\n tbody.insertBefore(from, row.classList.contains(\"is-drop-after\") ? row.nextSibling : row);\r\n emit(\"oc-datatable-reorder\", { keys: rows().map((item) => item.dataset.ocKey) });\r\n apply();\r\n });\r\n root.addEventListener(\"dragend\", () => {\r\n dragKey = \"\";\r\n for (const row of rows()) {\r\n row.draggable = false;\r\n row.classList.remove(\"is-dragging\", \"is-drop-before\", \"is-drop-after\");\r\n }\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. */\r\nexport function initDataTables(scope = document) {\r\n scope.querySelectorAll(\".oc-data-table\").forEach((root) => bindDataTable(root));\r\n}\r\n\r\n// The docs site loads this file as /js/oc-data-table.js. A wrapper import must not scan the page.\r\nif (typeof document !== \"undefined\" && String(import.meta.url).includes(\"oc-data-table\")) {\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 (toolbar, table, footer) -> bind the list-table script on mount -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Korrekt / OmniaDesk list table. Same markup as packages/ui/snippets/data-table.html.\r\n * Search, 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 */\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}\r\nexport interface DataTableRow {\r\n key: string\r\n status?: 'active' | 'deleted' | 'archived'\r\n cells: Record<string, string>\r\n values?: Record<string, string>\r\n href?: 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 draggable?: boolean\r\n filters?: boolean\r\n live?: boolean\r\n }>(),\r\n { title: 'List', pageSize: 15, searchPlaceholder: 'Search...', selectable: true, draggable: true, filters: 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\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 oc-column-menu-scope\" :id=\"id\" :data-page-size=\"pageSize\" :data-oc-live=\"live ? 'true' : undefined\">\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=\"Table actions\">⚙</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 <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 <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 <button class=\"oc-dropdown-item\" type=\"button\" data-oc-reset-widths>Reset column widths</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 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--sm\" type=\"button\" data-oc-view=\"table\" aria-pressed=\"true\">Table</button>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" data-oc-view=\"grid\">Cards</button>\r\n </div>\r\n <p class=\"oc-data-table-sort-summary\" data-oc-sort-summary role=\"status\"></p>\r\n </div>\r\n <div class=\"oc-table-toolbar\">\r\n <span class=\"oc-table-toolbar-spacer\"></span>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" :popovertarget=\"`${id}-columns`\">Columns</button>\r\n </div>\r\n <div class=\"oc-column-menu\" :id=\"`${id}-columns`\" popover>\r\n <p class=\"oc-column-menu-title\">Visible columns</p>\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\">\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 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\"><span class=\"oc-visually-hidden\">Actions</span></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 ${row.cells.name || row.key}`\"></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 ${row.cells.name || row.key}`\"></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]\">{{ row.cells[col.key] ?? '' }}</td>\r\n <td data-oc-col=\"actions\" class=\"oc-table-actions\"><button class=\"oc-table-row-action\" type=\"button\">Edit</button></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></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/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 🙂).\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\">🙂</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/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 v-else viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\" /><path d=\"M3 12h18M12 3a14 14 0 0 1 0 18M12 3a14 14 0 0 0 0 18\" /></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/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 icons for the three common views. -->\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n <template v-if=\"v.value === 'cards'\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\" /><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\" /><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\" /><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\" /></template>\r\n <path v-else-if=\"v.value === 'table'\" d=\"M3 5h18M3 12h18M3 19h18\" />\r\n <path v-else d=\"M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01\" />\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: 'M9 14 4 9l5-5M4 9h10a6 6 0 0 1 6 6v4',\r\n delete: 'M3 6h18M8 6V4h8v2M19 6l-1 14H6L5 6M10 11v6M14 11v6',\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 v-if=\"statusIcon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M2 12.5 7 17.5 18 6.5M13 16.5l1 1L22.5 9\" /></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=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" 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 Lisa Verbeke',\r\n items: () => [\r\n { divider: 'Tuesday 14 October' },\r\n { sender: 'Lisa Verbeke', avatar: 'LV', time: '09:12', datetime: '2026-10-14T09:12', label: 'Lisa Verbeke, 09:12', text: 'Morning Tom! The worktop supplier sent two samples for Villa Dewitte.' },\r\n {\r\n sender: 'Lisa Verbeke', avatar: 'LV', time: '09:13', datetime: '2026-10-14T09:13', label: 'Lisa Verbeke, 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: 'TP', 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: 'Lisa Verbeke', 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: 'Lisa Verbeke 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: 'Villa Dewitte',\r\n meta: 'Lisa Verbeke → Tom Peeters · 14 Oct 2026',\r\n participants: () => [{ initials: 'LV', name: 'Lisa Verbeke' }, { initials: 'TP', name: 'Tom Peeters' }],\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: 'Lisa Verbeke', avatar: 'LV', 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: 'Lisa Verbeke', avatar: 'LV', 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: 'TP', 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 Dewitte 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: 'Lisa Verbeke', avatar: 'LV', 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 viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"5\" r=\"1.8\" /><circle cx=\"12\" cy=\"12\" r=\"1.8\" /><circle cx=\"12\" cy=\"19\" r=\"1.8\" /></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')\">📎</button>\r\n <button v-if=\"tools.includes('emoji')\" type=\"button\" class=\"oc-chat-composer__tool\" aria-label=\"Insert emoji\" @click=\"emit('tool', 'emoji')\">🙂</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\">➤</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","<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","<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/OcPriceCard.vue | Map: props -> head -> toggle (radios) -> monthly / yearly 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 defaultPeriod?: 'monthly' | 'yearly'\r\n features?: PriceCardFeature[]\r\n featured?: boolean\r\n monthlyLabel?: string\r\n yearlyLabel?: string\r\n }>(),\r\n { defaultPeriod: 'monthly', features: () => [], monthlyLabel: 'Monthly', yearlyLabel: 'Yearly' },\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 </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 <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: sm | md | lg, full = no max width.\r\n * Classes: .oc-prose(--sm/--lg/--full), .oc-prose-lead\r\n */\r\nwithDefaults(defineProps<{ size?: '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>Villa Dewitte: 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>— Ann Dewitte, 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 Villa Dewitte\\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","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","<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","<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","<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","<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","<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","<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` or `src` fill the avatar; slot `avatar` replaces it. */\r\ndefineProps<{\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</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>{{ initials }}</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 viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 6h16M4 12h16M4 18h16\" /></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, columns popover),\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. 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 } 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 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 <nav v-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 OcBackLink from './components/OcBackLink.vue'\nimport OcBadge from './components/OcBadge.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 OcColumnMenu from './components/OcColumnMenu.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 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 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 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 OcModal from './components/OcModal.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 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 OcRadio from './components/OcRadio.vue'\nimport OcRadioGroup from './components/OcRadioGroup.vue'\nimport OcRecoveryCodes from './components/OcRecoveryCodes.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 OcSpinner from './components/OcSpinner.vue'\nimport OcStackCard from './components/OcStackCard.vue'\nimport OcStackList from './components/OcStackList.vue'\nimport OcStatCard from './components/OcStatCard.vue'\nimport OcStepper from './components/OcStepper.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 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 OcBackLink,\n OcBadge,\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 OcColumnMenu,\n OcCommand,\n OcConfirmDialog,\n OcCookieConsent,\n OcCopyField,\n OcCounter,\n OcDataTable,\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 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 OcLightbox,\n OcLinkArrow,\n OcLinkRow,\n OcListToolbar,\n OcLiveFrame,\n OcMarquee,\n OcMediaCard,\n OcMediaRow,\n OcMediaThumb,\n OcMessage,\n OcMessageList,\n OcMessageThread,\n OcModal,\n OcNavmenu,\n OcNavmenuList,\n OcNextTeaser,\n OcNumberInput,\n OcOtpInput,\n OcPageHeader,\n OcPagination,\n OcPasswordInput,\n OcPasswordRequirements,\n OcPhoneInput,\n OcPopover,\n OcPriceCard,\n OcProductMark,\n OcProgress,\n OcProjectCard,\n OcProse,\n OcRadio,\n OcRadioGroup,\n OcRecoveryCodes,\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 OcSpinner,\n OcStackCard,\n OcStackList,\n OcStatCard,\n OcStepper,\n OcSwitch,\n OcTable,\n OcTableActions,\n OcTableCompact,\n OcTabs,\n OcTagInput,\n OcTerminalLog,\n OcTextarea,\n OcThemeSwitch,\n OcTimeInput,\n OcTimeline,\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 } 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 { 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 { 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 OcBackLink,\n OcBadge,\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 OcColumnMenu,\n OcCommand,\n OcConfirmDialog,\n OcCookieConsent,\n OcCopyField,\n OcCounter,\n OcDataTable,\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 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 OcLightbox,\n OcLinkArrow,\n OcLinkRow,\n OcListToolbar,\n OcLiveFrame,\n OcMarquee,\n OcMediaCard,\n OcMediaRow,\n OcMediaThumb,\n OcMessage,\n OcMessageList,\n OcMessageThread,\n OcModal,\n OcNavmenu,\n OcNavmenuList,\n OcNextTeaser,\n OcNumberInput,\n OcOtpInput,\n OcPageHeader,\n OcPagination,\n OcPasswordInput,\n OcPasswordRequirements,\n OcPhoneInput,\n OcPopover,\n OcPriceCard,\n OcProductMark,\n OcProgress,\n OcProjectCard,\n OcProse,\n OcRadio,\n OcRadioGroup,\n OcRecoveryCodes,\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 OcSpinner,\n OcStackCard,\n OcStackList,\n OcStatCard,\n OcStepper,\n OcSwitch,\n OcTable,\n OcTableActions,\n OcTableCompact,\n OcTabs,\n OcTagInput,\n OcTerminalLog,\n OcTextarea,\n OcThemeSwitch,\n OcTimeInput,\n OcTimeline,\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","auto","inputId","onInput","input","percent","base","OcProgress","n2","n","niceMax","value","rows","raw","pow","s","chartLinePath","values","max","pts","v","clamp","a","b","d","p0","p1","p2","p3","c1","c2","MONTHS","labels","axis","m","top","count","paths","yLabels","_","colLabel","y","j","_hoisted_12","_hoisted_13","_hoisted_14","text","id","submit","onKeydown","uid","isChecked","toggle","list","x","option","menuId","col","_hoisted_8","_hoisted_9","query","filtered","q","sections","order","map","flat","active","firstEnabled","from","step","move","next","choose","section","done","event","destructive","box","read","inputs","tell","choice","reopen","mode","stored","onBeforeUnmount","$attrs","c","_hoisted_11","copied","timer","copy","style","pageItems","last","range","out","compareValues","numeric","na","nb","csvField","toCsv","headers","line","rowPasses","status","filter","state","controls","SKIP_COL","readStore","writeStore","download","filename","url","bindDataTable","prev","table","tbody","search","summary","pager","pageSelect","selectAll","bulk","empty","sortSummary","frame","live","sortKey","sortDir","page","pageSize","selected","savedSize","savedWidths","th","savedCols","textOf","row","td","valueOf","cell","matched","paintChecks","on","keys","picked","renderPager","add","label","target","extra","button","span","syncGrid","grid","onPage","card","title","apply","all","dir","start","visible","exportCsv","onlyKeys","hidden","heads","index","body","detail","liveAction","action","cols","file","sortBtn","head","filterBtn","btn","viewBtn","densityBtn","compact","pageBtn","bulkBtn","handle","startX","startW","min","ev","width","up","widths","dragKey","initDataTables","scope","boot","useTemplateRef","sizes","lead","_hoisted_10","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_21","_hoisted_22","_hoisted_25","_hoisted_27","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","separators","parts","p","parse","group","decimal","clean","format","focused","onBlur","idOf","doc","full","inFrame","art","dialogAlt","dragover","onChange","onDrop","pick","emoji","g","gi","k","flipped","generated","helpId","errorId","describedBy","ids","WORDS","when","tod","h","word","dateText","iso","zoom","vars","$props","tag","dialogClose","slide","go","slideId","show","nextTick","__expose","img","external","href","view","OcMediaThumb","MESSAGE_ICONS","STATUS","thumbsOnly","strip","_k","image","thumb","OcAttachmentThumb","OcAttachmentImage","isDivider","OcMessage","sending","isOut","send","field","mine","ctrlEnter","OcMessageList","_hoisted_20","_hoisted_23","child","OcNavmenuList","stepBy","code","rule","parsed","match","dialState","dial","grouped","nextDial","national","digits","radioGroupKey","toggleGroupKey","own","checked","isCard","o","OcRadio","copyAll","LEVEL_TEXT","t","progress","pct","icon","sort","slots","useSlots","hasActions","colspan","allSelected","r","toggleAll","toggleRow","ariaSort","toggleSort","rowLabel","cellAttrs","tab","tags","draft","available","remove","listId","$emit","reactive","timers","nextId","dismiss","push","options","clear","shortcut","description","useToast","readonly","toasts","OcToast","pressed","classes","inGroup","isOn","descId","phase","_component_OcTree","_withCtx","OcTimeline","collapsed","autoGroup","angle","visualStyle","mark","OcProjectCard","plan","nameId","bannerStyle","navId","OcCounter","member","codeId","OcCopyField","OcOtpInput","OcRecoveryCodes","OcStepper","components","OcAccordion","OcAccordionAccent","OcAccordionItem","OcAffixInput","OcAlert","OcAlertDialog","OcAlphaTabs","OcAspectRatio","OcAttachmentList","OcAvatar","OcAvatarGroup","OcBackLink","OcBadge","OcBarcodeInput","OcBreadcrumb","OcBrowserFrame","OcBusyOverlay","OcButton","OcButtonGroup","OcButtonGroupText","OcCard","OcChartLine","OcChatComposer","OcCheckbox","OcChecklist","OcChipFilter","OcCollapsible","OcColorField","OcColorSelect","OcColumnMenu","OcCommand","OcConfirmDialog","OcCookieConsent","OcDataTable","OcDecimalInput","OcDefinitionList","OcDocViewer","OcDropdown","OcDropdownItem","OcDropdownLabel","OcDropdownSeparator","OcDropzone","OcEmojiPicker","OcEmptyState","OcEntityCard","OcFactList","OcFilterCounts","OcFlipCard","OcFormField","OcGreeting","OcHeading","OcHoverCard","OcImageZoom","OcInput","OcInputGroup","OcItem","OcItemGroup","OcItemSeparator","OcKbd","OcKbdGroup","OcLabel","OcLanguageSelect","OcLauncherCard","OcLightbox","OcLinkArrow","OcLinkRow","OcListToolbar","OcLiveFrame","OcMarquee","OcMediaCard","OcMediaRow","OcMessageThread","OcModal","OcNavmenu","OcNextTeaser","OcNumberInput","OcPageHeader","OcPagination","OcPasswordInput","OcPasswordRequirements","OcPhoneInput","OcPopover","OcPriceCard","OcProductMark","OcProse","OcRadioGroup","OcScrollArea","OcSegmented","OcSelect","OcSeparator","OcSeverityCard","OcSheet","OcSidebar","OcSidebarCollapsible","OcSidebarGroup","OcSidebarMenu","OcSidebarMenuButton","OcSidebarSeparator","OcSkeleton","OcSlider","OcSortableRow","OcSpinner","OcStackCard","OcStackList","OcStatCard","OcSwitch","OcTable","OcTableActions","OcTableCompact","OcTabs","OcTagInput","OcTerminalLog","OcTextarea","OcThemeSwitch","OcTimeInput","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","../src/components/OcBackLink.vue","../src/components/OcBadge.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/OcColumnMenu.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/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/OcGlass.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/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/OcModal.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/OcPriceCard.vue","../src/components/OcProductMark.vue","../src/components/OcProjectCard.vue","../src/components/OcProse.vue","../src/composables/keys.ts","../src/components/OcRadio.vue","../src/components/OcRadioGroup.vue","../src/components/OcRecoveryCodes.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/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/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 Dewitte 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","<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/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/** Breadcrumb. Pass `items` (the last one is the current page) or use the default slot. */\r\nexport interface BreadcrumbItem {\r\n label: string\r\n href?: string\r\n}\r\nwithDefaults(defineProps<{ items?: BreadcrumbItem[]; label?: string }>(), {\r\n items: () => [],\r\n label: 'Breadcrumb',\r\n})\r\n</script>\r\n\r\n<template>\r\n <nav class=\"oc-breadcrumb\" :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\">{{ item.label }}</a>\r\n <span v-else class=\"oc-breadcrumb-item\" aria-current=\"page\">{{ item.label }}</span>\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 * --xs/--sm/--lg, --icon, --pill, --inline (link button inside running text)\r\n */\r\nwithDefaults(\r\n defineProps<{\r\n variant?: 'default' | 'secondary' | 'outline' | 'ghost' | 'link' | 'destructive' | 'success' | 'gradient' | 'glass'\r\n size?: 'xs' | 'sm' | 'md' | 'lg'\r\n icon?: boolean\r\n pill?: boolean\r\n inline?: 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 :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 :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\">➤</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","<!-- File: packages/vue/src/components/OcColumnMenu.vue | Map: scope -> toolbar trigger -> popover (title, form with one checkbox per column, reset) -> default slot (the table) -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Column visibility menu. CSS hides column n of the table in the default slot when [data-col=\"n\"] is unchecked.\r\n * Checkboxes are uncontrolled, so \"Reset\" (form reset) restores the defaults. Emits `toggle(column, visible)`.\r\n * Classes: .oc-column-menu-scope, .oc-column-menu[popover], -title, form.oc-column-menu-list, -item, -footer\r\n */\r\nimport { useUid } from '../composables/useUid'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n /** One entry per column, in order (max 10). */\r\n columns: Array<{ label: string; visible?: boolean; locked?: boolean }>\r\n triggerLabel?: string\r\n title?: string\r\n resetLabel?: string\r\n }>(),\r\n { triggerLabel: 'Columns', title: 'Visible columns', resetLabel: 'Reset' },\r\n)\r\nconst emit = defineEmits<{ toggle: [column: number, visible: boolean] }>()\r\nconst menuId = useUid('oc-column-menu')\r\n</script>\r\n\r\n<template>\r\n <div class=\"oc-column-menu-scope\">\r\n <div class=\"oc-table-toolbar\">\r\n <span class=\"oc-table-toolbar-spacer\"></span>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" :popovertarget=\"menuId\">{{ triggerLabel }}</button>\r\n </div>\r\n <div :id=\"menuId\" class=\"oc-column-menu\" popover>\r\n <p class=\"oc-column-menu-title\">{{ title }}</p>\r\n <form class=\"oc-column-menu-list\">\r\n <label v-for=\"(col, i) in columns\" :key=\"i\" class=\"oc-column-menu-item\">\r\n <input\r\n type=\"checkbox\"\r\n :data-col=\"i + 1\"\r\n :checked=\"col.locked || col.visible !== false\"\r\n :disabled=\"col.locked\"\r\n @change=\"emit('toggle', i + 1, ($event.target as HTMLInputElement).checked)\"\r\n />\r\n {{ col.label }}\r\n </label>\r\n <div class=\"oc-column-menu-footer\">\r\n <button class=\"oc-btn oc-btn--ghost oc-btn--sm\" type=\"reset\">{{ resetLabel }}</button>\r\n </div>\r\n </form>\r\n </div>\r\n <slot />\r\n </div>\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, sort, pages, columns, resize, drag, trash, bulk) -> boot\r\n// The list table used in Korrekt and OmniaDesk. 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-reorder, oc-datatable-search and oc-datatable-import.\r\n\r\n/** Page numbers with ellipses, same window as OmniaDesk (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 let sortKey = \"\";\r\n let sortDir = \"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, column widths, 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 savedWidths = readStore(id, \"widths\") || {};\r\n for (const th of table.tHead.rows[0].cells) {\r\n if (savedWidths[th.dataset.ocCol]) {\r\n th.style.width = savedWidths[th.dataset.ocCol];\r\n table.classList.add(\"oc-data-table-table--sized\");\r\n }\r\n }\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 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 matched = () => rows().filter((row) => rowPasses(row.dataset.ocStatus, filter, textOf(row), query));\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 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 title = document.createElement(\"h3\");\r\n title.className = \"oc-data-table-card-title\";\r\n const name = [...row.cells].find((td) => td.dataset.ocCol === \"name\") || [...row.cells].find((td) => td.dataset.ocCol && !SKIP_COL.has(td.dataset.ocCol));\r\n title.textContent = name ? name.textContent.trim() : row.dataset.ocKey;\r\n card.append(title);\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]) tbody.append(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) row.hidden = !visible.has(row);\r\n if (empty) empty.hidden = list.length !== 0;\r\n if (summary) {\r\n summary.textContent = list.length === 0\r\n ? \"Showing 0 of 0\"\r\n : `Showing ${start + 1}–${start + visible.size} of ${list.length}`;\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?.(\"[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 const sortBtn = event.target.closest(\".oc-table-sort\");\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 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-reset-widths]\")) {\r\n for (const th of table.tHead.rows[0].cells) th.style.width = \"\";\r\n table.classList.remove(\"oc-data-table-table--sized\");\r\n writeStore(id, \"widths\", {});\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 // Column resize: drag the handle on the header. Width is remembered per table id.\r\n root.addEventListener(\"pointerdown\", (event) => {\r\n const handle = event.target.closest(\".oc-data-table-resize\");\r\n if (!handle || !root.contains(handle)) return;\r\n const th = handle.closest(\"th\");\r\n if (!th) return;\r\n event.preventDefault();\r\n const startX = event.clientX;\r\n const startW = th.getBoundingClientRect().width;\r\n const min = Number(th.dataset.ocMin || 64);\r\n root.classList.add(\"is-resizing\");\r\n table.classList.add(\"oc-data-table-table--sized\");\r\n const move = (ev) => {\r\n const width = Math.max(min, Math.round(startW + ev.clientX - startX));\r\n th.style.width = `${width}px`;\r\n };\r\n const up = () => {\r\n root.classList.remove(\"is-resizing\");\r\n window.removeEventListener(\"pointermove\", move);\r\n window.removeEventListener(\"pointerup\", up);\r\n const widths = {};\r\n for (const head of table.tHead.rows[0].cells) if (head.style.width) widths[head.dataset.ocCol] = head.style.width;\r\n writeStore(id, \"widths\", widths);\r\n };\r\n window.addEventListener(\"pointermove\", move);\r\n window.addEventListener(\"pointerup\", up);\r\n });\r\n\r\n // Row drag starts from the grip only, so selecting text in a cell still works.\r\n let dragKey = \"\";\r\n root.addEventListener(\"pointerdown\", (event) => {\r\n const grip = event.target.closest(\".oc-sortable-row-grip\");\r\n const row = grip?.closest(\"[data-oc-row]\");\r\n if (row && root.contains(row)) row.draggable = true;\r\n });\r\n root.addEventListener(\"dragstart\", (event) => {\r\n const row = event.target.closest?.(\"[data-oc-row]\");\r\n if (!row?.draggable) return;\r\n dragKey = row.dataset.ocKey;\r\n row.classList.add(\"is-dragging\", \"oc-sortable-row\");\r\n event.dataTransfer.effectAllowed = \"move\";\r\n });\r\n root.addEventListener(\"dragover\", (event) => {\r\n const row = event.target.closest?.(\"[data-oc-row]\");\r\n if (!row || !dragKey || row.dataset.ocKey === dragKey) return;\r\n event.preventDefault();\r\n const box = row.getBoundingClientRect();\r\n const after = event.clientY > box.top + box.height / 2;\r\n tbody.querySelectorAll(\".is-drop-before, .is-drop-after\").forEach((el) => el.classList.remove(\"is-drop-before\", \"is-drop-after\"));\r\n row.classList.add(\"oc-sortable-row\", after ? \"is-drop-after\" : \"is-drop-before\");\r\n });\r\n root.addEventListener(\"drop\", (event) => {\r\n const row = event.target.closest?.(\"[data-oc-row]\");\r\n const from = dragKey ? tbody.querySelector(`[data-oc-key=\"${CSS.escape(dragKey)}\"]`) : null;\r\n if (!row || !from || row === from) return;\r\n event.preventDefault();\r\n tbody.insertBefore(from, row.classList.contains(\"is-drop-after\") ? row.nextSibling : row);\r\n emit(\"oc-datatable-reorder\", { keys: rows().map((item) => item.dataset.ocKey) });\r\n apply();\r\n });\r\n root.addEventListener(\"dragend\", () => {\r\n dragKey = \"\";\r\n for (const row of rows()) {\r\n row.draggable = false;\r\n row.classList.remove(\"is-dragging\", \"is-drop-before\", \"is-drop-after\");\r\n }\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. */\r\nexport function initDataTables(scope = document) {\r\n scope.querySelectorAll(\".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 (toolbar, table, footer) -> bind the list-table script on mount -->\r\n<script setup lang=\"ts\">\r\n/**\r\n * Korrekt / OmniaDesk list table. Same markup as packages/ui/snippets/data-table.html.\r\n * Search, 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 */\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}\r\nexport interface DataTableRow {\r\n key: string\r\n status?: 'active' | 'deleted' | 'archived'\r\n cells: Record<string, string>\r\n values?: Record<string, string>\r\n href?: 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 draggable?: boolean\r\n filters?: boolean\r\n live?: boolean\r\n }>(),\r\n { title: 'List', pageSize: 15, searchPlaceholder: 'Search...', selectable: true, draggable: true, filters: 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\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 oc-column-menu-scope\" :id=\"id\" :data-page-size=\"pageSize\" :data-oc-live=\"live ? 'true' : undefined\">\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=\"Table actions\">⚙</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 <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 <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 <button class=\"oc-dropdown-item\" type=\"button\" data-oc-reset-widths>Reset column widths</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 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--sm\" type=\"button\" data-oc-view=\"table\" aria-pressed=\"true\">Table</button>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" data-oc-view=\"grid\">Cards</button>\r\n </div>\r\n <p class=\"oc-data-table-sort-summary\" data-oc-sort-summary role=\"status\"></p>\r\n </div>\r\n <div class=\"oc-table-toolbar\">\r\n <span class=\"oc-table-toolbar-spacer\"></span>\r\n <button class=\"oc-btn oc-btn--outline oc-btn--sm\" type=\"button\" :popovertarget=\"`${id}-columns`\">Columns</button>\r\n </div>\r\n <div class=\"oc-column-menu\" :id=\"`${id}-columns`\" popover>\r\n <p class=\"oc-column-menu-title\">Visible columns</p>\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\">\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 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\"><span class=\"oc-visually-hidden\">Actions</span></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 ${row.cells.name || row.key}`\"></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 ${row.cells.name || row.key}`\"></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]\">{{ row.cells[col.key] ?? '' }}</td>\r\n <td data-oc-col=\"actions\" class=\"oc-table-actions\"><button class=\"oc-table-row-action\" type=\"button\">Edit</button></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></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/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 🙂).\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\">🙂</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/OcGlass.vue | Map: props (strong, flat, 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) */\r\nwithDefaults(defineProps<{ strong?: boolean; flat?: 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']\"><slot /></component>\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 v-else viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\" /><path d=\"M3 12h18M12 3a14 14 0 0 1 0 18M12 3a14 14 0 0 0 0 18\" /></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/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 icons for the three common views. -->\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\r\n <template v-if=\"v.value === 'cards'\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\" /><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\" rx=\"1\" /><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\" /><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\" rx=\"1\" /></template>\r\n <path v-else-if=\"v.value === 'table'\" d=\"M3 5h18M3 12h18M3 19h18\" />\r\n <path v-else d=\"M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01\" />\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: 'M9 14 4 9l5-5M4 9h10a6 6 0 0 1 6 6v4',\r\n delete: 'M3 6h18M8 6V4h8v2M19 6l-1 14H6L5 6M10 11v6M14 11v6',\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 v-if=\"statusIcon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M2 12.5 7 17.5 18 6.5M13 16.5l1 1L22.5 9\" /></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=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" 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 Lisa Verbeke',\r\n items: () => [\r\n { divider: 'Tuesday 14 October' },\r\n { sender: 'Lisa Verbeke', avatar: 'LV', time: '09:12', datetime: '2026-10-14T09:12', label: 'Lisa Verbeke, 09:12', text: 'Morning Tom! The worktop supplier sent two samples for Villa Dewitte.' },\r\n {\r\n sender: 'Lisa Verbeke', avatar: 'LV', time: '09:13', datetime: '2026-10-14T09:13', label: 'Lisa Verbeke, 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: 'TP', 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: 'Lisa Verbeke', 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: 'Lisa Verbeke 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: 'Villa Dewitte',\r\n meta: 'Lisa Verbeke → Tom Peeters · 14 Oct 2026',\r\n participants: () => [{ initials: 'LV', name: 'Lisa Verbeke' }, { initials: 'TP', name: 'Tom Peeters' }],\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: 'Lisa Verbeke', avatar: 'LV', 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: 'Lisa Verbeke', avatar: 'LV', 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: 'TP', 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 Dewitte 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: 'Lisa Verbeke', avatar: 'LV', 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 viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"5\" r=\"1.8\" /><circle cx=\"12\" cy=\"12\" r=\"1.8\" /><circle cx=\"12\" cy=\"19\" r=\"1.8\" /></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')\">📎</button>\r\n <button v-if=\"tools.includes('emoji')\" type=\"button\" class=\"oc-chat-composer__tool\" aria-label=\"Insert emoji\" @click=\"emit('tool', 'emoji')\">🙂</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\">➤</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","<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","<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/OcPriceCard.vue | Map: props -> head -> toggle (radios) -> monthly / yearly 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 defaultPeriod?: 'monthly' | 'yearly'\r\n features?: PriceCardFeature[]\r\n featured?: boolean\r\n monthlyLabel?: string\r\n yearlyLabel?: string\r\n }>(),\r\n { defaultPeriod: 'monthly', features: () => [], monthlyLabel: 'Monthly', yearlyLabel: 'Yearly' },\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 </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 <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>Villa Dewitte: 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>— Ann Dewitte, 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 Villa Dewitte\\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","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","<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","<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","<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","<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` or `src` fill the avatar; slot `avatar` replaces it. */\r\ndefineProps<{\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</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>{{ initials }}</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 viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 6h16M4 12h16M4 18h16\" /></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, columns popover),\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. 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 } 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 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 <nav v-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 OcBackLink from './components/OcBackLink.vue'\nimport OcBadge from './components/OcBadge.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 OcColumnMenu from './components/OcColumnMenu.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 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 OcGlass from './components/OcGlass.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 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 OcModal from './components/OcModal.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 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 OcRadio from './components/OcRadio.vue'\nimport OcRadioGroup from './components/OcRadioGroup.vue'\nimport OcRecoveryCodes from './components/OcRecoveryCodes.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 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 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 OcBackLink,\n OcBadge,\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 OcColumnMenu,\n OcCommand,\n OcConfirmDialog,\n OcCookieConsent,\n OcCopyField,\n OcCounter,\n OcDataTable,\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 OcGlass,\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 OcLightbox,\n OcLinkArrow,\n OcLinkRow,\n OcListToolbar,\n OcLiveFrame,\n OcMarquee,\n OcMediaCard,\n OcMediaRow,\n OcMediaThumb,\n OcMessage,\n OcMessageList,\n OcMessageThread,\n OcModal,\n OcNavmenu,\n OcNavmenuList,\n OcNextTeaser,\n OcNumberInput,\n OcOtpInput,\n OcPageHeader,\n OcPagination,\n OcPasswordInput,\n OcPasswordRequirements,\n OcPhoneInput,\n OcPopover,\n OcPriceCard,\n OcProductMark,\n OcProgress,\n OcProjectCard,\n OcProse,\n OcRadio,\n OcRadioGroup,\n OcRecoveryCodes,\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 OcSpinner,\n OcStackCard,\n OcStackList,\n OcStatCard,\n OcStatus,\n OcStatusDot,\n OcStepper,\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 } 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 { 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 { 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 OcBackLink,\n OcBadge,\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 OcColumnMenu,\n OcCommand,\n OcConfirmDialog,\n OcCookieConsent,\n OcCopyField,\n OcCounter,\n OcDataTable,\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 OcGlass,\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 OcLightbox,\n OcLinkArrow,\n OcLinkRow,\n OcListToolbar,\n OcLiveFrame,\n OcMarquee,\n OcMediaCard,\n OcMediaRow,\n OcMediaThumb,\n OcMessage,\n OcMessageList,\n OcMessageThread,\n OcModal,\n OcNavmenu,\n OcNavmenuList,\n OcNextTeaser,\n OcNumberInput,\n OcOtpInput,\n OcPageHeader,\n OcPagination,\n OcPasswordInput,\n OcPasswordRequirements,\n OcPhoneInput,\n OcPopover,\n OcPriceCard,\n OcProductMark,\n OcProgress,\n OcProjectCard,\n OcProse,\n OcRadio,\n OcRadioGroup,\n OcRecoveryCodes,\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 OcSpinner,\n OcStackCard,\n OcStackList,\n OcStatCard,\n OcStatus,\n OcStatusDot,\n OcStepper,\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","auto","inputId","onInput","input","pct","v","percent","tone","warn","danger","base","OcProgress","n2","n","niceMax","value","rows","raw","pow","s","chartLinePath","values","max","pts","clamp","a","b","d","p0","p1","p2","p3","c1","c2","MONTHS","labels","axis","m","top","count","paths","yLabels","_","colLabel","y","j","_hoisted_12","_hoisted_13","_hoisted_14","text","id","submit","onKeydown","uid","isChecked","toggle","list","x","option","menuId","col","_hoisted_8","_hoisted_9","query","filtered","q","sections","order","map","flat","active","firstEnabled","from","step","move","next","choose","section","done","event","destructive","box","read","inputs","tell","choice","reopen","mode","stored","onBeforeUnmount","$attrs","c","_hoisted_11","copied","timer","copy","style","pageItems","last","range","out","compareValues","numeric","na","nb","csvField","toCsv","headers","line","rowPasses","status","filter","state","controls","SKIP_COL","readStore","writeStore","download","filename","url","bindDataTable","prev","table","tbody","search","summary","pager","pageSelect","selectAll","bulk","empty","sortSummary","frame","live","sortKey","sortDir","page","pageSize","selected","savedSize","savedWidths","th","savedCols","textOf","row","td","valueOf","cell","matched","paintChecks","on","keys","picked","renderPager","add","label","target","extra","button","span","syncGrid","grid","onPage","card","title","apply","all","dir","start","visible","exportCsv","onlyKeys","hidden","heads","index","body","detail","liveAction","action","cols","file","sortBtn","head","filterBtn","btn","viewBtn","densityBtn","compact","pageBtn","bulkBtn","handle","startX","startW","min","ev","width","up","widths","dragKey","initDataTables","scope","autoStart","boot","useTemplateRef","sizes","lead","_hoisted_10","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_21","_hoisted_22","_hoisted_25","_hoisted_27","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","separators","parts","p","parse","group","decimal","clean","format","focused","onBlur","idOf","doc","full","inFrame","art","dialogAlt","dragover","onChange","onDrop","pick","emoji","g","gi","k","flipped","generated","helpId","errorId","describedBy","ids","WORDS","when","tod","h","word","dateText","iso","zoom","vars","$props","tag","dialogClose","slide","go","slideId","show","nextTick","__expose","img","external","href","view","OcMediaThumb","MESSAGE_ICONS","STATUS","thumbsOnly","strip","_k","image","thumb","OcAttachmentThumb","OcAttachmentImage","isDivider","OcMessage","sending","isOut","send","field","mine","ctrlEnter","OcMessageList","_hoisted_20","_hoisted_23","child","OcNavmenuList","stepBy","code","rule","parsed","match","dialState","dial","grouped","nextDial","national","digits","radioGroupKey","toggleGroupKey","own","checked","isCard","o","OcRadio","copyAll","LEVEL_TEXT","t","progress","icon","OcStatusDot","sort","slots","useSlots","hasActions","colspan","allSelected","r","toggleAll","toggleRow","ariaSort","toggleSort","rowLabel","cellAttrs","tab","tags","draft","available","remove","listId","$emit","reactive","timers","nextId","dismiss","push","options","clear","shortcut","description","useToast","readonly","toasts","OcToast","pressed","classes","inGroup","isOn","descId","phase","_component_OcTree","_withCtx","OcTimeline","collapsed","autoGroup","angle","visualStyle","mark","OcProjectCard","plan","nameId","bannerStyle","navId","OcCounter","member","codeId","OcCopyField","OcOtpInput","OcRecoveryCodes","OcStepper","components","OcAccordion","OcAccordionAccent","OcAccordionItem","OcAffixInput","OcAlert","OcAlertDialog","OcAlphaTabs","OcAspectRatio","OcAttachmentList","OcAvatar","OcAvatarGroup","OcBackLink","OcBadge","OcBarcodeInput","OcBreadcrumb","OcBrowserFrame","OcBusyOverlay","OcButton","OcButtonGroup","OcButtonGroupText","OcCard","OcChartLine","OcChatComposer","OcCheckbox","OcChecklist","OcChipFilter","OcCollapsible","OcColorField","OcColorSelect","OcColumnMenu","OcCommand","OcConfirmDialog","OcCookieConsent","OcDataTable","OcDecimalInput","OcDefinitionList","OcDocViewer","OcDropdown","OcDropdownItem","OcDropdownLabel","OcDropdownSeparator","OcDropzone","OcEmojiPicker","OcEmptyState","OcEntityCard","OcFactList","OcFilterCounts","OcFlipCard","OcFormField","OcGlass","OcGlassPanel","OcGreeting","OcHeading","OcHoverCard","OcImageZoom","OcInput","OcInputGroup","OcItem","OcItemGroup","OcItemSeparator","OcKbd","OcKbdGroup","OcLabel","OcLanguageSelect","OcLauncherCard","OcLightbox","OcLinkArrow","OcLinkRow","OcListToolbar","OcLiveFrame","OcMarquee","OcMediaCard","OcMediaRow","OcMessageThread","OcModal","OcNavmenu","OcNextTeaser","OcNumberInput","OcPageHeader","OcPagination","OcPasswordInput","OcPasswordRequirements","OcPhoneInput","OcPopover","OcPriceCard","OcProductMark","OcProse","OcRadioGroup","OcScrollArea","OcSegmented","OcSelect","OcSeparator","OcSeverityCard","OcSheet","OcSidebar","OcSidebarCollapsible","OcSidebarGroup","OcSidebarMenu","OcSidebarMenuButton","OcSidebarSeparator","OcSkeleton","OcSlider","OcSortableRow","OcSpinner","OcStackCard","OcStackList","OcStatCard","OcStatus","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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"}
|