@birdycom/omniaui-vue 0.12.4 → 0.12.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/dist/blocks/OcBlockDataTable.vue.d.ts +1 -1
  2. package/dist/blocks/OcBlockProfileHeader.vue.d.ts +4 -2
  3. package/dist/components/OcAvatarPicker.vue.d.ts +21 -0
  4. package/dist/components/OcBarcode.vue.d.ts +12 -0
  5. package/dist/components/OcBreadcrumb.vue.d.ts +7 -1
  6. package/dist/components/OcButton.vue.d.ts +6 -3
  7. package/dist/components/OcDataTable.vue.d.ts +68 -1
  8. package/dist/components/OcDataTableName.vue.d.ts +20 -0
  9. package/dist/components/OcDateField.vue.d.ts +19 -0
  10. package/dist/components/OcEmojiPicker.vue.d.ts +1 -1
  11. package/dist/components/OcFormSection.vue.d.ts +25 -0
  12. package/dist/components/OcGallery.vue.d.ts +17 -0
  13. package/dist/components/OcGlass.vue.d.ts +2 -1
  14. package/dist/components/OcGlassBar.vue.d.ts +32 -0
  15. package/dist/components/OcLazyImage.vue.d.ts +24 -0
  16. package/dist/components/OcMeterRow.vue.d.ts +9 -0
  17. package/dist/components/{OcColumnMenu.vue.d.ts → OcNameCard.vue.d.ts} +15 -16
  18. package/dist/components/OcPrice.vue.d.ts +20 -0
  19. package/dist/components/OcQuantity.vue.d.ts +24 -0
  20. package/dist/components/OcRating.vue.d.ts +11 -0
  21. package/dist/components/OcRatingInput.vue.d.ts +18 -0
  22. package/dist/components/OcRibbon.vue.d.ts +22 -0
  23. package/dist/components/OcSpecList.vue.d.ts +15 -0
  24. package/dist/components/OcStock.vue.d.ts +20 -0
  25. package/dist/components/OcUser.vue.d.ts +0 -1
  26. package/dist/index.d.ts +22 -3
  27. package/dist/omniaui-vue.js +5271 -4107
  28. package/dist/omniaui-vue.js.map +1 -1
  29. package/manifest.json +102 -6
  30. package/package.json +1 -1
  31. package/src/blocks/OcBlockAppHeader.vue +1 -1
  32. package/src/blocks/OcBlockDataTable.vue +1 -1
  33. package/src/blocks/OcBlockProfileHeader.vue +15 -4
  34. package/src/components/OcAttachmentList.vue +1 -1
  35. package/src/components/OcAvatarPicker.vue +34 -0
  36. package/src/components/OcBarcode.vue +23 -0
  37. package/src/components/OcBreadcrumb.vue +14 -5
  38. package/src/components/OcButton.vue +10 -2
  39. package/src/components/OcChatComposer.vue +1 -1
  40. package/src/components/OcDataTable.vue +100 -25
  41. package/src/components/OcDataTableName.vue +18 -0
  42. package/src/components/OcDateField.vue +23 -0
  43. package/src/components/OcEmojiPicker.vue +2 -2
  44. package/src/components/OcFormSection.vue +19 -0
  45. package/src/components/OcGallery.vue +27 -0
  46. package/src/components/OcGlass.vue +4 -4
  47. package/src/components/OcGlassBar.vue +17 -0
  48. package/src/components/OcLanguageSelect.vue +1 -1
  49. package/src/components/OcLazyImage.vue +17 -0
  50. package/src/components/OcListToolbar.vue +5 -5
  51. package/src/components/OcMessage.vue +4 -4
  52. package/src/components/OcMessageList.vue +6 -6
  53. package/src/components/OcMessageThread.vue +12 -12
  54. package/src/components/OcMeterRow.vue +18 -0
  55. package/src/components/OcNameCard.vue +28 -0
  56. package/src/components/OcPrice.vue +30 -0
  57. package/src/components/OcProse.vue +3 -3
  58. package/src/components/OcQuantity.vue +21 -0
  59. package/src/components/OcRating.vue +17 -0
  60. package/src/components/OcRatingInput.vue +17 -0
  61. package/src/components/OcRibbon.vue +9 -0
  62. package/src/components/OcSpecList.vue +17 -0
  63. package/src/components/OcStock.vue +13 -0
  64. package/src/components/OcUser.vue +7 -3
  65. package/src/index.ts +55 -4
  66. 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,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>
@@ -1,12 +1,16 @@
1
1
  <script setup lang="ts">
2
- /** Avatar with name and e-mail (truncating). `initials` or `src` fill the avatar; slot `avatar` replaces it. */
3
- defineProps<{
2
+ /** Avatar with name and e-mail (truncating). `initials` (default: from `name`) or `src` fill the avatar; slot `avatar` replaces it. */
3
+ import { computed } from 'vue'
4
+
5
+ const props = defineProps<{
4
6
  name: string
5
7
  email?: string
6
8
  initials?: string
7
9
  src?: string
8
10
  avatarSize?: 'sm' | 'md' | 'lg' | 'xl'
9
11
  }>()
12
+
13
+ const shownInitials = computed(() => props.initials ?? props.name.trim().split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0].toUpperCase()).join(''))
10
14
  </script>
11
15
 
12
16
  <template>
@@ -14,7 +18,7 @@ defineProps<{
14
18
  <slot name="avatar">
15
19
  <span :class="['oc-avatar', avatarSize && avatarSize !== 'md' && `oc-avatar--${avatarSize}`]">
16
20
  <img v-if="src" :src="src" alt="" />
17
- <template v-else>{{ initials }}</template>
21
+ <template v-else>{{ shownInitials }}</template>
18
22
  </span>
19
23
  </slot>
20
24
  <span class="oc-user-text">
package/src/index.ts CHANGED
@@ -15,8 +15,10 @@ 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'
21
23
  import OcBreadcrumb from './components/OcBreadcrumb.vue'
22
24
  import OcBrowserFrame from './components/OcBrowserFrame.vue'
@@ -33,13 +35,14 @@ import OcChipFilter from './components/OcChipFilter.vue'
33
35
  import OcCollapsible from './components/OcCollapsible.vue'
34
36
  import OcColorField from './components/OcColorField.vue'
35
37
  import OcColorSelect from './components/OcColorSelect.vue'
36
- import OcColumnMenu from './components/OcColumnMenu.vue'
37
38
  import OcCommand from './components/OcCommand.vue'
38
39
  import OcConfirmDialog from './components/OcConfirmDialog.vue'
39
40
  import OcCookieConsent from './components/OcCookieConsent.vue'
40
41
  import OcCopyField from './components/OcCopyField.vue'
41
42
  import OcCounter from './components/OcCounter.vue'
42
43
  import OcDataTable from './components/OcDataTable.vue'
44
+ import OcDataTableName from './components/OcDataTableName.vue'
45
+ import OcDateField from './components/OcDateField.vue'
43
46
  import OcDecimalInput from './components/OcDecimalInput.vue'
44
47
  import OcDefinitionList from './components/OcDefinitionList.vue'
45
48
  import OcDocViewer from './components/OcDocViewer.vue'
@@ -55,7 +58,10 @@ import OcFactList from './components/OcFactList.vue'
55
58
  import OcFilterCounts from './components/OcFilterCounts.vue'
56
59
  import OcFlipCard from './components/OcFlipCard.vue'
57
60
  import OcFormField from './components/OcFormField.vue'
61
+ import OcFormSection from './components/OcFormSection.vue'
62
+ import OcGallery from './components/OcGallery.vue'
58
63
  import OcGlass from './components/OcGlass.vue'
64
+ import OcGlassBar from './components/OcGlassBar.vue'
59
65
  import OcGlassPanel from './components/OcGlassPanel.vue'
60
66
  import OcGreeting from './components/OcGreeting.vue'
61
67
  import OcHeading from './components/OcHeading.vue'
@@ -71,6 +77,7 @@ import OcKbdGroup from './components/OcKbdGroup.vue'
71
77
  import OcLabel from './components/OcLabel.vue'
72
78
  import OcLanguageSelect from './components/OcLanguageSelect.vue'
73
79
  import OcLauncherCard from './components/OcLauncherCard.vue'
80
+ import OcLazyImage from './components/OcLazyImage.vue'
74
81
  import OcLightbox from './components/OcLightbox.vue'
75
82
  import OcLinkArrow from './components/OcLinkArrow.vue'
76
83
  import OcLinkRow from './components/OcLinkRow.vue'
@@ -83,7 +90,9 @@ import OcMediaThumb from './components/OcMediaThumb.vue'
83
90
  import OcMessage from './components/OcMessage.vue'
84
91
  import OcMessageList from './components/OcMessageList.vue'
85
92
  import OcMessageThread from './components/OcMessageThread.vue'
93
+ import OcMeterRow from './components/OcMeterRow.vue'
86
94
  import OcModal from './components/OcModal.vue'
95
+ import OcNameCard from './components/OcNameCard.vue'
87
96
  import OcNavmenu from './components/OcNavmenu.vue'
88
97
  import OcNavmenuList from './components/OcNavmenuList.vue'
89
98
  import OcNextTeaser from './components/OcNextTeaser.vue'
@@ -95,14 +104,19 @@ import OcPasswordInput from './components/OcPasswordInput.vue'
95
104
  import OcPasswordRequirements from './components/OcPasswordRequirements.vue'
96
105
  import OcPhoneInput from './components/OcPhoneInput.vue'
97
106
  import OcPopover from './components/OcPopover.vue'
107
+ import OcPrice from './components/OcPrice.vue'
98
108
  import OcPriceCard from './components/OcPriceCard.vue'
99
109
  import OcProductMark from './components/OcProductMark.vue'
100
110
  import OcProgress from './components/OcProgress.vue'
101
111
  import OcProjectCard from './components/OcProjectCard.vue'
102
112
  import OcProse from './components/OcProse.vue'
113
+ import OcQuantity from './components/OcQuantity.vue'
103
114
  import OcRadio from './components/OcRadio.vue'
104
115
  import OcRadioGroup from './components/OcRadioGroup.vue'
116
+ import OcRating from './components/OcRating.vue'
117
+ import OcRatingInput from './components/OcRatingInput.vue'
105
118
  import OcRecoveryCodes from './components/OcRecoveryCodes.vue'
119
+ import OcRibbon from './components/OcRibbon.vue'
106
120
  import OcScrollArea from './components/OcScrollArea.vue'
107
121
  import OcSegmented from './components/OcSegmented.vue'
108
122
  import OcSelect from './components/OcSelect.vue'
@@ -118,6 +132,7 @@ import OcSidebarSeparator from './components/OcSidebarSeparator.vue'
118
132
  import OcSkeleton from './components/OcSkeleton.vue'
119
133
  import OcSlider from './components/OcSlider.vue'
120
134
  import OcSortableRow from './components/OcSortableRow.vue'
135
+ import OcSpecList from './components/OcSpecList.vue'
121
136
  import OcSpinner from './components/OcSpinner.vue'
122
137
  import OcStackCard from './components/OcStackCard.vue'
123
138
  import OcStackList from './components/OcStackList.vue'
@@ -125,6 +140,7 @@ import OcStatCard from './components/OcStatCard.vue'
125
140
  import OcStatus from './components/OcStatus.vue'
126
141
  import OcStatusDot from './components/OcStatusDot.vue'
127
142
  import OcStepper from './components/OcStepper.vue'
143
+ import OcStock from './components/OcStock.vue'
128
144
  import OcSwitch from './components/OcSwitch.vue'
129
145
  import OcTable from './components/OcTable.vue'
130
146
  import OcTableActions from './components/OcTableActions.vue'
@@ -200,8 +216,10 @@ export {
200
216
  OcAttachmentThumb,
201
217
  OcAvatar,
202
218
  OcAvatarGroup,
219
+ OcAvatarPicker,
203
220
  OcBackLink,
204
221
  OcBadge,
222
+ OcBarcode,
205
223
  OcBarcodeInput,
206
224
  OcBreadcrumb,
207
225
  OcBrowserFrame,
@@ -218,13 +236,14 @@ export {
218
236
  OcCollapsible,
219
237
  OcColorField,
220
238
  OcColorSelect,
221
- OcColumnMenu,
222
239
  OcCommand,
223
240
  OcConfirmDialog,
224
241
  OcCookieConsent,
225
242
  OcCopyField,
226
243
  OcCounter,
227
244
  OcDataTable,
245
+ OcDataTableName,
246
+ OcDateField,
228
247
  OcDecimalInput,
229
248
  OcDefinitionList,
230
249
  OcDocViewer,
@@ -240,7 +259,10 @@ export {
240
259
  OcFilterCounts,
241
260
  OcFlipCard,
242
261
  OcFormField,
262
+ OcFormSection,
263
+ OcGallery,
243
264
  OcGlass,
265
+ OcGlassBar,
244
266
  OcGlassPanel,
245
267
  OcGreeting,
246
268
  OcHeading,
@@ -256,6 +278,7 @@ export {
256
278
  OcLabel,
257
279
  OcLanguageSelect,
258
280
  OcLauncherCard,
281
+ OcLazyImage,
259
282
  OcLightbox,
260
283
  OcLinkArrow,
261
284
  OcLinkRow,
@@ -268,7 +291,9 @@ export {
268
291
  OcMessage,
269
292
  OcMessageList,
270
293
  OcMessageThread,
294
+ OcMeterRow,
271
295
  OcModal,
296
+ OcNameCard,
272
297
  OcNavmenu,
273
298
  OcNavmenuList,
274
299
  OcNextTeaser,
@@ -280,14 +305,19 @@ export {
280
305
  OcPasswordRequirements,
281
306
  OcPhoneInput,
282
307
  OcPopover,
308
+ OcPrice,
283
309
  OcPriceCard,
284
310
  OcProductMark,
285
311
  OcProgress,
286
312
  OcProjectCard,
287
313
  OcProse,
314
+ OcQuantity,
288
315
  OcRadio,
289
316
  OcRadioGroup,
317
+ OcRating,
318
+ OcRatingInput,
290
319
  OcRecoveryCodes,
320
+ OcRibbon,
291
321
  OcScrollArea,
292
322
  OcSegmented,
293
323
  OcSelect,
@@ -303,6 +333,7 @@ export {
303
333
  OcSkeleton,
304
334
  OcSlider,
305
335
  OcSortableRow,
336
+ OcSpecList,
306
337
  OcSpinner,
307
338
  OcStackCard,
308
339
  OcStackList,
@@ -310,6 +341,7 @@ export {
310
341
  OcStatus,
311
342
  OcStatusDot,
312
343
  OcStepper,
344
+ OcStock,
313
345
  OcSwitch,
314
346
  OcTable,
315
347
  OcTableActions,
@@ -380,11 +412,13 @@ export type { ChipFilterItem } from './components/OcChipFilter.vue'
380
412
  export type { ColorSelectItem } from './components/OcColorSelect.vue'
381
413
  export type { CommandItem } from './components/OcCommand.vue'
382
414
  export type { CookieCategory, ConsentChoice } from './components/OcCookieConsent.vue'
383
- export type { DataTableColumn, DataTableRow } from './components/OcDataTable.vue'
415
+ export type { DataTableColumn, DataTableRow, DataTableTabs, DataTableColumnFilter } from './components/OcDataTable.vue'
384
416
  export type { DefinitionRow } from './components/OcDefinitionList.vue'
385
417
  export type { DocViewerItem } from './components/OcDocViewer.vue'
386
418
  export type { FactListRow } from './components/OcFactList.vue'
387
419
  export type { FilterCountsItem } from './components/OcFilterCounts.vue'
420
+ export type { GalleryImage } from './components/OcGallery.vue'
421
+ export type { GlassBarItem } from './components/OcGlassBar.vue'
388
422
  export type { LanguageSelectItem } from './components/OcLanguageSelect.vue'
389
423
  export type { MessageAttachment, MessageAction, MessageData } from './components/OcMessage.vue'
390
424
  export type { MessageListItem } from './components/OcMessageList.vue'
@@ -396,6 +430,7 @@ export type { PriceCardFeature, PriceCardPrice } from './components/OcPriceCard.
396
430
  export type { RadioOption } from './components/OcRadioGroup.vue'
397
431
  export type { SegmentedOption } from './components/OcSegmented.vue'
398
432
  export type { SelectOption } from './components/OcSelect.vue'
433
+ export type { SpecGroup } from './components/OcSpecList.vue'
399
434
  export type { StackListItem } from './components/OcStackList.vue'
400
435
  export type { StepperStep } from './components/OcStepper.vue'
401
436
  export type { TableColumn, TableSort } from './components/OcTable.vue'
@@ -441,8 +476,10 @@ export const components: Record<string, Component> = {
441
476
  OcAttachmentThumb,
442
477
  OcAvatar,
443
478
  OcAvatarGroup,
479
+ OcAvatarPicker,
444
480
  OcBackLink,
445
481
  OcBadge,
482
+ OcBarcode,
446
483
  OcBarcodeInput,
447
484
  OcBreadcrumb,
448
485
  OcBrowserFrame,
@@ -459,13 +496,14 @@ export const components: Record<string, Component> = {
459
496
  OcCollapsible,
460
497
  OcColorField,
461
498
  OcColorSelect,
462
- OcColumnMenu,
463
499
  OcCommand,
464
500
  OcConfirmDialog,
465
501
  OcCookieConsent,
466
502
  OcCopyField,
467
503
  OcCounter,
468
504
  OcDataTable,
505
+ OcDataTableName,
506
+ OcDateField,
469
507
  OcDecimalInput,
470
508
  OcDefinitionList,
471
509
  OcDocViewer,
@@ -481,7 +519,10 @@ export const components: Record<string, Component> = {
481
519
  OcFilterCounts,
482
520
  OcFlipCard,
483
521
  OcFormField,
522
+ OcFormSection,
523
+ OcGallery,
484
524
  OcGlass,
525
+ OcGlassBar,
485
526
  OcGlassPanel,
486
527
  OcGreeting,
487
528
  OcHeading,
@@ -497,6 +538,7 @@ export const components: Record<string, Component> = {
497
538
  OcLabel,
498
539
  OcLanguageSelect,
499
540
  OcLauncherCard,
541
+ OcLazyImage,
500
542
  OcLightbox,
501
543
  OcLinkArrow,
502
544
  OcLinkRow,
@@ -509,7 +551,9 @@ export const components: Record<string, Component> = {
509
551
  OcMessage,
510
552
  OcMessageList,
511
553
  OcMessageThread,
554
+ OcMeterRow,
512
555
  OcModal,
556
+ OcNameCard,
513
557
  OcNavmenu,
514
558
  OcNavmenuList,
515
559
  OcNextTeaser,
@@ -521,14 +565,19 @@ export const components: Record<string, Component> = {
521
565
  OcPasswordRequirements,
522
566
  OcPhoneInput,
523
567
  OcPopover,
568
+ OcPrice,
524
569
  OcPriceCard,
525
570
  OcProductMark,
526
571
  OcProgress,
527
572
  OcProjectCard,
528
573
  OcProse,
574
+ OcQuantity,
529
575
  OcRadio,
530
576
  OcRadioGroup,
577
+ OcRating,
578
+ OcRatingInput,
531
579
  OcRecoveryCodes,
580
+ OcRibbon,
532
581
  OcScrollArea,
533
582
  OcSegmented,
534
583
  OcSelect,
@@ -544,6 +593,7 @@ export const components: Record<string, Component> = {
544
593
  OcSkeleton,
545
594
  OcSlider,
546
595
  OcSortableRow,
596
+ OcSpecList,
547
597
  OcSpinner,
548
598
  OcStackCard,
549
599
  OcStackList,
@@ -551,6 +601,7 @@ export const components: Record<string, Component> = {
551
601
  OcStatus,
552
602
  OcStatusDot,
553
603
  OcStepper,
604
+ OcStock,
554
605
  OcSwitch,
555
606
  OcTable,
556
607
  OcTableActions,
@@ -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>