@birdycom/omniaui-vue 0.12.5 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/blocks/OcBlockContactForm.vue.d.ts +71 -0
  2. package/dist/blocks/OcBlockDataTable.vue.d.ts +1 -1
  3. package/dist/blocks/OcBlockProfileHeader.vue.d.ts +5 -3
  4. package/dist/components/OcAvatarPicker.vue.d.ts +21 -0
  5. package/dist/components/OcBarcode.vue.d.ts +12 -0
  6. package/dist/components/OcBrandMark.vue.d.ts +23 -0
  7. package/dist/components/OcBreadcrumb.vue.d.ts +7 -1
  8. package/dist/components/OcButton.vue.d.ts +6 -3
  9. package/dist/components/OcDataTable.vue.d.ts +68 -1
  10. package/dist/components/OcDataTableName.vue.d.ts +20 -0
  11. package/dist/components/OcDateField.vue.d.ts +19 -0
  12. package/dist/components/OcEmojiPicker.vue.d.ts +1 -1
  13. package/dist/components/OcFeatureCard.vue.d.ts +23 -0
  14. package/dist/components/OcFormSection.vue.d.ts +25 -0
  15. package/dist/components/OcGallery.vue.d.ts +17 -0
  16. package/dist/components/OcGlass.vue.d.ts +2 -1
  17. package/dist/components/OcGlassBar.vue.d.ts +32 -0
  18. package/dist/components/OcLazyImage.vue.d.ts +24 -0
  19. package/dist/components/OcLinkCard.vue.d.ts +22 -0
  20. package/dist/components/OcMeterRow.vue.d.ts +9 -0
  21. package/dist/components/{OcColumnMenu.vue.d.ts → OcNameCard.vue.d.ts} +15 -16
  22. package/dist/components/OcPanel.vue.d.ts +16 -0
  23. package/dist/components/OcPrice.vue.d.ts +20 -0
  24. package/dist/components/OcQuantity.vue.d.ts +24 -0
  25. package/dist/components/OcRating.vue.d.ts +11 -0
  26. package/dist/components/OcRatingInput.vue.d.ts +18 -0
  27. package/dist/components/OcResult.vue.d.ts +23 -0
  28. package/dist/components/OcRibbon.vue.d.ts +22 -0
  29. package/dist/components/OcSpecList.vue.d.ts +15 -0
  30. package/dist/components/OcStock.vue.d.ts +20 -0
  31. package/dist/index.d.ts +29 -3
  32. package/dist/omniaui-vue.js +4994 -3338
  33. package/dist/omniaui-vue.js.map +1 -1
  34. package/manifest.json +138 -6
  35. package/package.json +1 -1
  36. package/src/blocks/OcBlockContactForm.vue +146 -0
  37. package/src/blocks/OcBlockDataTable.vue +1 -1
  38. package/src/blocks/OcBlockProfileHeader.vue +15 -4
  39. package/src/components/OcAttachmentList.vue +1 -1
  40. package/src/components/OcAvatarPicker.vue +34 -0
  41. package/src/components/OcBarcode.vue +23 -0
  42. package/src/components/OcBrandMark.vue +15 -0
  43. package/src/components/OcBreadcrumb.vue +14 -5
  44. package/src/components/OcButton.vue +10 -2
  45. package/src/components/OcChatComposer.vue +1 -1
  46. package/src/components/OcDataTable.vue +100 -25
  47. package/src/components/OcDataTableName.vue +18 -0
  48. package/src/components/OcDateField.vue +23 -0
  49. package/src/components/OcEmojiPicker.vue +2 -2
  50. package/src/components/OcFeatureCard.vue +15 -0
  51. package/src/components/OcFormSection.vue +19 -0
  52. package/src/components/OcGallery.vue +27 -0
  53. package/src/components/OcGlass.vue +4 -4
  54. package/src/components/OcGlassBar.vue +17 -0
  55. package/src/components/OcLazyImage.vue +17 -0
  56. package/src/components/OcLinkCard.vue +16 -0
  57. package/src/components/OcMessageList.vue +6 -6
  58. package/src/components/OcMessageThread.vue +11 -11
  59. package/src/components/OcMeterRow.vue +18 -0
  60. package/src/components/OcNameCard.vue +28 -0
  61. package/src/components/OcPanel.vue +9 -0
  62. package/src/components/OcPrice.vue +30 -0
  63. package/src/components/OcProse.vue +3 -3
  64. package/src/components/OcQuantity.vue +21 -0
  65. package/src/components/OcRating.vue +17 -0
  66. package/src/components/OcRatingInput.vue +17 -0
  67. package/src/components/OcResult.vue +16 -0
  68. package/src/components/OcRibbon.vue +9 -0
  69. package/src/components/OcSpecList.vue +17 -0
  70. package/src/components/OcStock.vue +13 -0
  71. package/src/index.ts +74 -4
  72. package/src/components/OcColumnMenu.vue +0 -50
@@ -0,0 +1,30 @@
1
+ <!-- File: packages/vue/src/components/OcPrice.vue | Map: props -> formatted amounts -> main line, note, alternative -->
2
+ <script setup lang="ts">
3
+ /** A price with old price, discount, VAT note and the other amount (same markup as snippets/price.html). */
4
+ const props = withDefaults(defineProps<{
5
+ amount: number | string
6
+ old?: number | string
7
+ discount?: string
8
+ note?: string
9
+ alt?: string
10
+ currency?: string
11
+ locale?: string
12
+ size?: 'sm' | 'md' | 'lg'
13
+ sale?: boolean
14
+ inline?: boolean
15
+ end?: boolean
16
+ }>(), { currency: 'EUR', locale: 'nl-BE', size: 'md' })
17
+ const format = (v: number | string) => (typeof v === 'number' ? new Intl.NumberFormat(props.locale, { style: 'currency', currency: props.currency }).format(v) : v)
18
+ </script>
19
+
20
+ <template>
21
+ <div :class="['oc-price', size !== 'md' && `oc-price--${size}`, sale && 'oc-price--sale', inline && 'oc-price--inline', end && 'oc-price--end']">
22
+ <div class="oc-price__main">
23
+ <span class="oc-price__amount">{{ format(amount) }}</span>
24
+ <s v-if="old != null" class="oc-price__old">{{ format(old) }}</s>
25
+ <span v-if="discount" class="oc-badge oc-badge--destructive">{{ discount }}</span>
26
+ </div>
27
+ <span v-if="note" class="oc-price__note">{{ note }}</span>
28
+ <span v-if="alt" class="oc-price__alt">{{ alt }}</span>
29
+ </div>
30
+ </template>
@@ -24,7 +24,7 @@ withDefaults(defineProps<{ size?: 'compact' | 'sm' | 'md' | 'lg'; full?: boolean
24
24
  </ul>
25
25
  <figure>
26
26
  <div class="oc-media-art oc-media-art--6" role="img" aria-label="Kitchen with oak fronts and a light stone worktop"></div>
27
- <figcaption>Villa Dewitte: oak fronts with a Calacatta matt worktop, finished in October 2026.</figcaption>
27
+ <figcaption>Project 1: oak fronts with a Calacatta matt worktop, finished in October 2026.</figcaption>
28
28
  </figure>
29
29
  <h3>From design to installation</h3>
30
30
  <ol>
@@ -35,7 +35,7 @@ withDefaults(defineProps<{ size?: 'compact' | 'sm' | 'md' | 'lg'; full?: boolean
35
35
  </ol>
36
36
  <blockquote>
37
37
  <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>
38
- <footer>— Ann Dewitte, client in Ghent</footer>
38
+ <footer>— Customer 8, client in Ghent</footer>
39
39
  </blockquote>
40
40
  <h2>Worktop materials compared</h2>
41
41
  <table>
@@ -49,7 +49,7 @@ withDefaults(defineProps<{ size?: 'compact' | 'sm' | 'md' | 'lg'; full?: boolean
49
49
  </table>
50
50
  <h3>Sharing your floor plan</h3>
51
51
  <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>
52
- <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>
52
+ <pre><code>{{ 'Project: 2026-114 Project 1\nRoom: Kitchen, ground floor\nWall A: 412 cm (window at 160 cm)\nWall B: 298 cm (door at the left)' }}</code></pre>
53
53
  <hr />
54
54
  <p><small>Lead times are an estimate. <mark>Natural stone</mark> can take two weeks longer in summer.</small></p>
55
55
  </slot>
@@ -0,0 +1,21 @@
1
+ <!-- File: packages/vue/src/components/OcQuantity.vue | Map: v-model number -> minus / input / plus within min, max, step -->
2
+ <script setup lang="ts">
3
+ /** Minus, number and plus in one frame (same markup as snippets/quantity.html). v-model is the number. */
4
+ import { stepQuantity } from '../../../ui/src/form-extras.js'
5
+
6
+ const props = withDefaults(defineProps<{ min?: number; max?: number; step?: number; size?: 'sm' | 'md'; label?: string; name?: string; id?: string; disabled?: boolean }>(), { min: 0, step: 1, size: 'md', label: 'Quantity' })
7
+ const model = defineModel<number>({ default: 1 })
8
+ const move = (direction: -1 | 1) => { model.value = stepQuantity(model.value, direction, { min: props.min, max: props.max ?? Infinity, step: props.step }) }
9
+ </script>
10
+
11
+ <template>
12
+ <div :class="['oc-quantity', size === 'sm' && 'oc-quantity--sm']">
13
+ <button class="oc-quantity__step" type="button" :aria-label="`Decrease ${label.toLowerCase()}`" :disabled="disabled || model <= min" @click="move(-1)">
14
+ <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M19 13H5v-2h14z" /></svg>
15
+ </button>
16
+ <input :id="id" v-model.number="model" class="oc-quantity__input" type="number" inputmode="numeric" :name="name" :min="min" :max="max" :step="step" :aria-label="label" :disabled="disabled">
17
+ <button class="oc-quantity__step" type="button" :aria-label="`Increase ${label.toLowerCase()}`" :disabled="disabled || (max != null && model >= max)" @click="move(1)">
18
+ <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z" /></svg>
19
+ </button>
20
+ </div>
21
+ </template>
@@ -0,0 +1,17 @@
1
+ <!-- File: packages/vue/src/components/OcRating.vue | Map: props -> clamped score -> star bar -->
2
+ <script setup lang="ts">
3
+ /** Stars of a score (same markup as snippets/rating.html): halves and decimals, any number of stars. */
4
+ import { computed } from 'vue'
5
+
6
+ const props = withDefaults(defineProps<{ value: number; max?: number; size?: 'sm' | 'md' | 'lg'; label?: string }>(), { max: 5, size: 'md' })
7
+ const score = computed(() => Math.max(0, Math.min(props.max, props.value)))
8
+ </script>
9
+
10
+ <template>
11
+ <span
12
+ :class="['oc-rating', size !== 'md' && `oc-rating--${size}`]"
13
+ :style="{ '--oc-rating': String(score), ...(max !== 5 ? { '--oc-rating-max': String(max) } : {}) }"
14
+ role="img"
15
+ :aria-label="label ?? `${score} out of ${max}`"
16
+ ></span>
17
+ </template>
@@ -0,0 +1,17 @@
1
+ <!-- File: packages/vue/src/components/OcRatingInput.vue | Map: v-model (1–5) -> fieldset with five star radios -->
2
+ <script setup lang="ts">
3
+ /** Five radio buttons drawn as stars (same markup as snippets/rating.html); v-model is 0 (none) to 5. */
4
+ import { useUid } from '../composables/useUid'
5
+
6
+ const props = withDefaults(defineProps<{ name?: string; legend?: string; size?: 'sm' | 'md' | 'lg'; disabled?: boolean }>(), { legend: 'Rating', size: 'md' })
7
+ const model = defineModel<number>({ default: 0 })
8
+ const group = props.name ?? useUid('oc-rating')
9
+ const text = (n: number) => (n === 1 ? '1 star' : `${n} stars`)
10
+ </script>
11
+
12
+ <template>
13
+ <fieldset :class="['oc-rating-input', size !== 'md' && `oc-rating-input--${size}`]" :disabled="disabled">
14
+ <legend>{{ legend }}</legend>
15
+ <label v-for="n in 5" :key="n"><input v-model="model" type="radio" :name="group" :value="n"><span>{{ text(n) }}</span></label>
16
+ </fieldset>
17
+ </template>
@@ -0,0 +1,16 @@
1
+ <!-- File: packages/vue/src/components/OcResult.vue | Map: tile (icon) -> title -> text (slot) -> actions (slot) -->
2
+ <script setup lang="ts">
3
+ /** Outcome of an action in place of the form (snippets/result.html). icon = webicon name; slots: default (text), icon, actions. */
4
+ defineProps<{ title: string; icon?: string; accent?: string; center?: boolean }>()
5
+ </script>
6
+
7
+ <template>
8
+ <div :class="['oc-result', center && 'oc-result--center']" role="status" tabindex="-1">
9
+ <span v-if="icon || $slots.icon" :class="['oc-icon-tile oc-icon-tile--sm', accent && `oc-accent--${accent}`]" aria-hidden="true">
10
+ <slot name="icon"><iconify-icon :icon="icon" /></slot>
11
+ </span>
12
+ <h2 class="oc-result__title">{{ title }}</h2>
13
+ <p v-if="$slots.default" class="oc-result__text"><slot /></p>
14
+ <div v-if="$slots.actions" class="oc-result__actions"><slot name="actions" /></div>
15
+ </div>
16
+ </template>
@@ -0,0 +1,9 @@
1
+ <!-- File: packages/vue/src/components/OcRibbon.vue | Map: corner, tone, size -> classes -> band with the slot -->
2
+ <script setup lang="ts">
3
+ /** Diagonal band across a corner of its parent (same markup as snippets/ribbon.html). Default slot = the text. */
4
+ withDefaults(defineProps<{ corner?: 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end'; tone?: 'primary' | 'success' | 'warning' | 'destructive' | 'muted'; size?: 'sm' | 'md' | 'lg' }>(), { corner: 'top-end', tone: 'primary', size: 'md' })
5
+ </script>
6
+
7
+ <template>
8
+ <span :class="['oc-ribbon', corner !== 'top-end' && `oc-ribbon--${corner}`, tone !== 'primary' && `oc-ribbon--${tone}`, size !== 'md' && `oc-ribbon--${size}`]"><slot /></span>
9
+ </template>
@@ -0,0 +1,17 @@
1
+ <!-- File: packages/vue/src/components/OcSpecList.vue | Map: groups -> group title -> rows (label, value, note) -->
2
+ <script setup lang="ts">
3
+ /** Technical specifications in named groups (same markup as snippets/spec-list.html). */
4
+ export interface SpecGroup { title: string; rows: { label: string; value: string; note?: string }[] }
5
+ defineProps<{ groups: SpecGroup[]; stack?: boolean }>()
6
+ </script>
7
+
8
+ <template>
9
+ <div :class="['oc-spec-list', stack && 'oc-spec-list--stack']">
10
+ <section v-for="(group, g) in groups" :key="g" class="oc-spec-group">
11
+ <h3 class="oc-spec-group__title">{{ group.title }}</h3>
12
+ <dl class="oc-spec-group__rows">
13
+ <div v-for="(row, r) in group.rows" :key="r" class="oc-spec-row"><dt>{{ row.label }}</dt><dd>{{ row.value }}<small v-if="row.note">{{ row.note }}</small></dd></div>
14
+ </dl>
15
+ </section>
16
+ </div>
17
+ </template>
@@ -0,0 +1,13 @@
1
+ <!-- File: packages/vue/src/components/OcStock.vue | Map: level -> default text -> dot, text and note -->
2
+ <script setup lang="ts">
3
+ /** Stock status with a colored dot (same markup as snippets/stock.html). Default slot = the text. */
4
+ const props = withDefaults(defineProps<{ level?: 'ok' | 'low' | 'out' | 'order'; badge?: boolean; note?: string }>(), { level: 'ok' })
5
+ const TEXT = { ok: 'In stock', low: 'Low stock', out: 'Out of stock', order: 'On order' } as const
6
+ </script>
7
+
8
+ <template>
9
+ <span :class="['oc-stock', badge && 'oc-stock--badge']" :data-level="props.level === 'ok' ? undefined : props.level">
10
+ <slot>{{ TEXT[props.level] }}</slot>
11
+ <span v-if="note" class="oc-stock__note"> · {{ note }}</span>
12
+ </span>
13
+ </template>
package/src/index.ts CHANGED
@@ -15,9 +15,12 @@ import OcAttachmentList from './components/OcAttachmentList.vue'
15
15
  import OcAttachmentThumb from './components/OcAttachmentThumb.vue'
16
16
  import OcAvatar from './components/OcAvatar.vue'
17
17
  import OcAvatarGroup from './components/OcAvatarGroup.vue'
18
+ import OcAvatarPicker from './components/OcAvatarPicker.vue'
18
19
  import OcBackLink from './components/OcBackLink.vue'
19
20
  import OcBadge from './components/OcBadge.vue'
21
+ import OcBarcode from './components/OcBarcode.vue'
20
22
  import OcBarcodeInput from './components/OcBarcodeInput.vue'
23
+ import OcBrandMark from './components/OcBrandMark.vue'
21
24
  import OcBreadcrumb from './components/OcBreadcrumb.vue'
22
25
  import OcBrowserFrame from './components/OcBrowserFrame.vue'
23
26
  import OcBusyOverlay from './components/OcBusyOverlay.vue'
@@ -33,13 +36,14 @@ import OcChipFilter from './components/OcChipFilter.vue'
33
36
  import OcCollapsible from './components/OcCollapsible.vue'
34
37
  import OcColorField from './components/OcColorField.vue'
35
38
  import OcColorSelect from './components/OcColorSelect.vue'
36
- import OcColumnMenu from './components/OcColumnMenu.vue'
37
39
  import OcCommand from './components/OcCommand.vue'
38
40
  import OcConfirmDialog from './components/OcConfirmDialog.vue'
39
41
  import OcCookieConsent from './components/OcCookieConsent.vue'
40
42
  import OcCopyField from './components/OcCopyField.vue'
41
43
  import OcCounter from './components/OcCounter.vue'
42
44
  import OcDataTable from './components/OcDataTable.vue'
45
+ import OcDataTableName from './components/OcDataTableName.vue'
46
+ import OcDateField from './components/OcDateField.vue'
43
47
  import OcDecimalInput from './components/OcDecimalInput.vue'
44
48
  import OcDefinitionList from './components/OcDefinitionList.vue'
45
49
  import OcDocViewer from './components/OcDocViewer.vue'
@@ -52,10 +56,14 @@ import OcEmojiPicker from './components/OcEmojiPicker.vue'
52
56
  import OcEmptyState from './components/OcEmptyState.vue'
53
57
  import OcEntityCard from './components/OcEntityCard.vue'
54
58
  import OcFactList from './components/OcFactList.vue'
59
+ import OcFeatureCard from './components/OcFeatureCard.vue'
55
60
  import OcFilterCounts from './components/OcFilterCounts.vue'
56
61
  import OcFlipCard from './components/OcFlipCard.vue'
57
62
  import OcFormField from './components/OcFormField.vue'
63
+ import OcFormSection from './components/OcFormSection.vue'
64
+ import OcGallery from './components/OcGallery.vue'
58
65
  import OcGlass from './components/OcGlass.vue'
66
+ import OcGlassBar from './components/OcGlassBar.vue'
59
67
  import OcGlassPanel from './components/OcGlassPanel.vue'
60
68
  import OcGreeting from './components/OcGreeting.vue'
61
69
  import OcHeading from './components/OcHeading.vue'
@@ -71,8 +79,10 @@ import OcKbdGroup from './components/OcKbdGroup.vue'
71
79
  import OcLabel from './components/OcLabel.vue'
72
80
  import OcLanguageSelect from './components/OcLanguageSelect.vue'
73
81
  import OcLauncherCard from './components/OcLauncherCard.vue'
82
+ import OcLazyImage from './components/OcLazyImage.vue'
74
83
  import OcLightbox from './components/OcLightbox.vue'
75
84
  import OcLinkArrow from './components/OcLinkArrow.vue'
85
+ import OcLinkCard from './components/OcLinkCard.vue'
76
86
  import OcLinkRow from './components/OcLinkRow.vue'
77
87
  import OcListToolbar from './components/OcListToolbar.vue'
78
88
  import OcLiveFrame from './components/OcLiveFrame.vue'
@@ -83,7 +93,9 @@ import OcMediaThumb from './components/OcMediaThumb.vue'
83
93
  import OcMessage from './components/OcMessage.vue'
84
94
  import OcMessageList from './components/OcMessageList.vue'
85
95
  import OcMessageThread from './components/OcMessageThread.vue'
96
+ import OcMeterRow from './components/OcMeterRow.vue'
86
97
  import OcModal from './components/OcModal.vue'
98
+ import OcNameCard from './components/OcNameCard.vue'
87
99
  import OcNavmenu from './components/OcNavmenu.vue'
88
100
  import OcNavmenuList from './components/OcNavmenuList.vue'
89
101
  import OcNextTeaser from './components/OcNextTeaser.vue'
@@ -91,18 +103,25 @@ import OcNumberInput from './components/OcNumberInput.vue'
91
103
  import OcOtpInput from './components/OcOtpInput.vue'
92
104
  import OcPageHeader from './components/OcPageHeader.vue'
93
105
  import OcPagination from './components/OcPagination.vue'
106
+ import OcPanel from './components/OcPanel.vue'
94
107
  import OcPasswordInput from './components/OcPasswordInput.vue'
95
108
  import OcPasswordRequirements from './components/OcPasswordRequirements.vue'
96
109
  import OcPhoneInput from './components/OcPhoneInput.vue'
97
110
  import OcPopover from './components/OcPopover.vue'
111
+ import OcPrice from './components/OcPrice.vue'
98
112
  import OcPriceCard from './components/OcPriceCard.vue'
99
113
  import OcProductMark from './components/OcProductMark.vue'
100
114
  import OcProgress from './components/OcProgress.vue'
101
115
  import OcProjectCard from './components/OcProjectCard.vue'
102
116
  import OcProse from './components/OcProse.vue'
117
+ import OcQuantity from './components/OcQuantity.vue'
103
118
  import OcRadio from './components/OcRadio.vue'
104
119
  import OcRadioGroup from './components/OcRadioGroup.vue'
120
+ import OcRating from './components/OcRating.vue'
121
+ import OcRatingInput from './components/OcRatingInput.vue'
105
122
  import OcRecoveryCodes from './components/OcRecoveryCodes.vue'
123
+ import OcResult from './components/OcResult.vue'
124
+ import OcRibbon from './components/OcRibbon.vue'
106
125
  import OcScrollArea from './components/OcScrollArea.vue'
107
126
  import OcSegmented from './components/OcSegmented.vue'
108
127
  import OcSelect from './components/OcSelect.vue'
@@ -118,6 +137,7 @@ import OcSidebarSeparator from './components/OcSidebarSeparator.vue'
118
137
  import OcSkeleton from './components/OcSkeleton.vue'
119
138
  import OcSlider from './components/OcSlider.vue'
120
139
  import OcSortableRow from './components/OcSortableRow.vue'
140
+ import OcSpecList from './components/OcSpecList.vue'
121
141
  import OcSpinner from './components/OcSpinner.vue'
122
142
  import OcStackCard from './components/OcStackCard.vue'
123
143
  import OcStackList from './components/OcStackList.vue'
@@ -125,6 +145,7 @@ import OcStatCard from './components/OcStatCard.vue'
125
145
  import OcStatus from './components/OcStatus.vue'
126
146
  import OcStatusDot from './components/OcStatusDot.vue'
127
147
  import OcStepper from './components/OcStepper.vue'
148
+ import OcStock from './components/OcStock.vue'
128
149
  import OcSwitch from './components/OcSwitch.vue'
129
150
  import OcTable from './components/OcTable.vue'
130
151
  import OcTableActions from './components/OcTableActions.vue'
@@ -157,6 +178,7 @@ import OcBlockAppHeader from './blocks/OcBlockAppHeader.vue'
157
178
  import OcBlockAppShell from './blocks/OcBlockAppShell.vue'
158
179
  import OcBlockAuth from './blocks/OcBlockAuth.vue'
159
180
  import OcBlockAuthSplit from './blocks/OcBlockAuthSplit.vue'
181
+ import OcBlockContactForm from './blocks/OcBlockContactForm.vue'
160
182
  import OcBlockContactGrid from './blocks/OcBlockContactGrid.vue'
161
183
  import OcBlockCta from './blocks/OcBlockCta.vue'
162
184
  import OcBlockDataTable from './blocks/OcBlockDataTable.vue'
@@ -200,9 +222,12 @@ export {
200
222
  OcAttachmentThumb,
201
223
  OcAvatar,
202
224
  OcAvatarGroup,
225
+ OcAvatarPicker,
203
226
  OcBackLink,
204
227
  OcBadge,
228
+ OcBarcode,
205
229
  OcBarcodeInput,
230
+ OcBrandMark,
206
231
  OcBreadcrumb,
207
232
  OcBrowserFrame,
208
233
  OcBusyOverlay,
@@ -218,13 +243,14 @@ export {
218
243
  OcCollapsible,
219
244
  OcColorField,
220
245
  OcColorSelect,
221
- OcColumnMenu,
222
246
  OcCommand,
223
247
  OcConfirmDialog,
224
248
  OcCookieConsent,
225
249
  OcCopyField,
226
250
  OcCounter,
227
251
  OcDataTable,
252
+ OcDataTableName,
253
+ OcDateField,
228
254
  OcDecimalInput,
229
255
  OcDefinitionList,
230
256
  OcDocViewer,
@@ -237,10 +263,14 @@ export {
237
263
  OcEmptyState,
238
264
  OcEntityCard,
239
265
  OcFactList,
266
+ OcFeatureCard,
240
267
  OcFilterCounts,
241
268
  OcFlipCard,
242
269
  OcFormField,
270
+ OcFormSection,
271
+ OcGallery,
243
272
  OcGlass,
273
+ OcGlassBar,
244
274
  OcGlassPanel,
245
275
  OcGreeting,
246
276
  OcHeading,
@@ -256,8 +286,10 @@ export {
256
286
  OcLabel,
257
287
  OcLanguageSelect,
258
288
  OcLauncherCard,
289
+ OcLazyImage,
259
290
  OcLightbox,
260
291
  OcLinkArrow,
292
+ OcLinkCard,
261
293
  OcLinkRow,
262
294
  OcListToolbar,
263
295
  OcLiveFrame,
@@ -268,7 +300,9 @@ export {
268
300
  OcMessage,
269
301
  OcMessageList,
270
302
  OcMessageThread,
303
+ OcMeterRow,
271
304
  OcModal,
305
+ OcNameCard,
272
306
  OcNavmenu,
273
307
  OcNavmenuList,
274
308
  OcNextTeaser,
@@ -276,18 +310,25 @@ export {
276
310
  OcOtpInput,
277
311
  OcPageHeader,
278
312
  OcPagination,
313
+ OcPanel,
279
314
  OcPasswordInput,
280
315
  OcPasswordRequirements,
281
316
  OcPhoneInput,
282
317
  OcPopover,
318
+ OcPrice,
283
319
  OcPriceCard,
284
320
  OcProductMark,
285
321
  OcProgress,
286
322
  OcProjectCard,
287
323
  OcProse,
324
+ OcQuantity,
288
325
  OcRadio,
289
326
  OcRadioGroup,
327
+ OcRating,
328
+ OcRatingInput,
290
329
  OcRecoveryCodes,
330
+ OcResult,
331
+ OcRibbon,
291
332
  OcScrollArea,
292
333
  OcSegmented,
293
334
  OcSelect,
@@ -303,6 +344,7 @@ export {
303
344
  OcSkeleton,
304
345
  OcSlider,
305
346
  OcSortableRow,
347
+ OcSpecList,
306
348
  OcSpinner,
307
349
  OcStackCard,
308
350
  OcStackList,
@@ -310,6 +352,7 @@ export {
310
352
  OcStatus,
311
353
  OcStatusDot,
312
354
  OcStepper,
355
+ OcStock,
313
356
  OcSwitch,
314
357
  OcTable,
315
358
  OcTableActions,
@@ -342,6 +385,7 @@ export {
342
385
  OcBlockAppShell,
343
386
  OcBlockAuth,
344
387
  OcBlockAuthSplit,
388
+ OcBlockContactForm,
345
389
  OcBlockContactGrid,
346
390
  OcBlockCta,
347
391
  OcBlockDataTable,
@@ -380,11 +424,13 @@ export type { ChipFilterItem } from './components/OcChipFilter.vue'
380
424
  export type { ColorSelectItem } from './components/OcColorSelect.vue'
381
425
  export type { CommandItem } from './components/OcCommand.vue'
382
426
  export type { CookieCategory, ConsentChoice } from './components/OcCookieConsent.vue'
383
- export type { DataTableColumn, DataTableRow } from './components/OcDataTable.vue'
427
+ export type { DataTableColumn, DataTableRow, DataTableTabs, DataTableColumnFilter } from './components/OcDataTable.vue'
384
428
  export type { DefinitionRow } from './components/OcDefinitionList.vue'
385
429
  export type { DocViewerItem } from './components/OcDocViewer.vue'
386
430
  export type { FactListRow } from './components/OcFactList.vue'
387
431
  export type { FilterCountsItem } from './components/OcFilterCounts.vue'
432
+ export type { GalleryImage } from './components/OcGallery.vue'
433
+ export type { GlassBarItem } from './components/OcGlassBar.vue'
388
434
  export type { LanguageSelectItem } from './components/OcLanguageSelect.vue'
389
435
  export type { MessageAttachment, MessageAction, MessageData } from './components/OcMessage.vue'
390
436
  export type { MessageListItem } from './components/OcMessageList.vue'
@@ -396,6 +442,7 @@ export type { PriceCardFeature, PriceCardPrice } from './components/OcPriceCard.
396
442
  export type { RadioOption } from './components/OcRadioGroup.vue'
397
443
  export type { SegmentedOption } from './components/OcSegmented.vue'
398
444
  export type { SelectOption } from './components/OcSelect.vue'
445
+ export type { SpecGroup } from './components/OcSpecList.vue'
399
446
  export type { StackListItem } from './components/OcStackList.vue'
400
447
  export type { StepperStep } from './components/OcStepper.vue'
401
448
  export type { TableColumn, TableSort } from './components/OcTable.vue'
@@ -403,6 +450,7 @@ export type { TableCompactColumn } from './components/OcTableCompact.vue'
403
450
  export type { TabItem } from './components/OcTabs.vue'
404
451
  export type { TimelineEntry } from './components/OcTimeline.vue'
405
452
  export type { OcTreeItem } from './components/OcTree.vue'
453
+ export type { ContactFormLine, ContactFormCard, ContactFormSubject } from './blocks/OcBlockContactForm.vue'
406
454
  export type { ContactGridLine, ContactGridCard } from './blocks/OcBlockContactGrid.vue'
407
455
  export type { FaqItem } from './blocks/OcBlockFaq.vue'
408
456
  export type { FeatureItem } from './blocks/OcBlockFeatures.vue'
@@ -441,9 +489,12 @@ export const components: Record<string, Component> = {
441
489
  OcAttachmentThumb,
442
490
  OcAvatar,
443
491
  OcAvatarGroup,
492
+ OcAvatarPicker,
444
493
  OcBackLink,
445
494
  OcBadge,
495
+ OcBarcode,
446
496
  OcBarcodeInput,
497
+ OcBrandMark,
447
498
  OcBreadcrumb,
448
499
  OcBrowserFrame,
449
500
  OcBusyOverlay,
@@ -459,13 +510,14 @@ export const components: Record<string, Component> = {
459
510
  OcCollapsible,
460
511
  OcColorField,
461
512
  OcColorSelect,
462
- OcColumnMenu,
463
513
  OcCommand,
464
514
  OcConfirmDialog,
465
515
  OcCookieConsent,
466
516
  OcCopyField,
467
517
  OcCounter,
468
518
  OcDataTable,
519
+ OcDataTableName,
520
+ OcDateField,
469
521
  OcDecimalInput,
470
522
  OcDefinitionList,
471
523
  OcDocViewer,
@@ -478,10 +530,14 @@ export const components: Record<string, Component> = {
478
530
  OcEmptyState,
479
531
  OcEntityCard,
480
532
  OcFactList,
533
+ OcFeatureCard,
481
534
  OcFilterCounts,
482
535
  OcFlipCard,
483
536
  OcFormField,
537
+ OcFormSection,
538
+ OcGallery,
484
539
  OcGlass,
540
+ OcGlassBar,
485
541
  OcGlassPanel,
486
542
  OcGreeting,
487
543
  OcHeading,
@@ -497,8 +553,10 @@ export const components: Record<string, Component> = {
497
553
  OcLabel,
498
554
  OcLanguageSelect,
499
555
  OcLauncherCard,
556
+ OcLazyImage,
500
557
  OcLightbox,
501
558
  OcLinkArrow,
559
+ OcLinkCard,
502
560
  OcLinkRow,
503
561
  OcListToolbar,
504
562
  OcLiveFrame,
@@ -509,7 +567,9 @@ export const components: Record<string, Component> = {
509
567
  OcMessage,
510
568
  OcMessageList,
511
569
  OcMessageThread,
570
+ OcMeterRow,
512
571
  OcModal,
572
+ OcNameCard,
513
573
  OcNavmenu,
514
574
  OcNavmenuList,
515
575
  OcNextTeaser,
@@ -517,18 +577,25 @@ export const components: Record<string, Component> = {
517
577
  OcOtpInput,
518
578
  OcPageHeader,
519
579
  OcPagination,
580
+ OcPanel,
520
581
  OcPasswordInput,
521
582
  OcPasswordRequirements,
522
583
  OcPhoneInput,
523
584
  OcPopover,
585
+ OcPrice,
524
586
  OcPriceCard,
525
587
  OcProductMark,
526
588
  OcProgress,
527
589
  OcProjectCard,
528
590
  OcProse,
591
+ OcQuantity,
529
592
  OcRadio,
530
593
  OcRadioGroup,
594
+ OcRating,
595
+ OcRatingInput,
531
596
  OcRecoveryCodes,
597
+ OcResult,
598
+ OcRibbon,
532
599
  OcScrollArea,
533
600
  OcSegmented,
534
601
  OcSelect,
@@ -544,6 +611,7 @@ export const components: Record<string, Component> = {
544
611
  OcSkeleton,
545
612
  OcSlider,
546
613
  OcSortableRow,
614
+ OcSpecList,
547
615
  OcSpinner,
548
616
  OcStackCard,
549
617
  OcStackList,
@@ -551,6 +619,7 @@ export const components: Record<string, Component> = {
551
619
  OcStatus,
552
620
  OcStatusDot,
553
621
  OcStepper,
622
+ OcStock,
554
623
  OcSwitch,
555
624
  OcTable,
556
625
  OcTableActions,
@@ -583,6 +652,7 @@ export const components: Record<string, Component> = {
583
652
  OcBlockAppShell,
584
653
  OcBlockAuth,
585
654
  OcBlockAuthSplit,
655
+ OcBlockContactForm,
586
656
  OcBlockContactGrid,
587
657
  OcBlockCta,
588
658
  OcBlockDataTable,
@@ -1,50 +0,0 @@
1
- <!-- File: packages/vue/src/components/OcColumnMenu.vue | Map: scope -> toolbar trigger -> popover (title, form with one checkbox per column, reset) -> default slot (the table) -->
2
- <script setup lang="ts">
3
- /**
4
- * Column visibility menu. CSS hides column n of the table in the default slot when [data-col="n"] is unchecked.
5
- * Checkboxes are uncontrolled, so "Reset" (form reset) restores the defaults. Emits `toggle(column, visible)`.
6
- * Classes: .oc-column-menu-scope, .oc-column-menu[popover], -title, form.oc-column-menu-list, -item, -footer
7
- */
8
- import { useUid } from '../composables/useUid'
9
-
10
- withDefaults(
11
- defineProps<{
12
- /** One entry per column, in order (max 10). */
13
- columns: Array<{ label: string; visible?: boolean; locked?: boolean }>
14
- triggerLabel?: string
15
- title?: string
16
- resetLabel?: string
17
- }>(),
18
- { triggerLabel: 'Columns', title: 'Visible columns', resetLabel: 'Reset' },
19
- )
20
- const emit = defineEmits<{ toggle: [column: number, visible: boolean] }>()
21
- const menuId = useUid('oc-column-menu')
22
- </script>
23
-
24
- <template>
25
- <div class="oc-column-menu-scope">
26
- <div class="oc-table-toolbar">
27
- <span class="oc-table-toolbar-spacer"></span>
28
- <button class="oc-btn oc-btn--outline oc-btn--sm" type="button" :popovertarget="menuId">{{ triggerLabel }}</button>
29
- </div>
30
- <div :id="menuId" class="oc-column-menu" popover>
31
- <p class="oc-column-menu-title">{{ title }}</p>
32
- <form class="oc-column-menu-list">
33
- <label v-for="(col, i) in columns" :key="i" class="oc-column-menu-item">
34
- <input
35
- type="checkbox"
36
- :data-col="i + 1"
37
- :checked="col.locked || col.visible !== false"
38
- :disabled="col.locked"
39
- @change="emit('toggle', i + 1, ($event.target as HTMLInputElement).checked)"
40
- />
41
- {{ col.label }}
42
- </label>
43
- <div class="oc-column-menu-footer">
44
- <button class="oc-btn oc-btn--ghost oc-btn--sm" type="reset">{{ resetLabel }}</button>
45
- </div>
46
- </form>
47
- </div>
48
- <slot />
49
- </div>
50
- </template>