@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.
- package/dist/blocks/OcBlockContactForm.vue.d.ts +71 -0
- package/dist/blocks/OcBlockDataTable.vue.d.ts +1 -1
- package/dist/blocks/OcBlockProfileHeader.vue.d.ts +5 -3
- package/dist/components/OcAvatarPicker.vue.d.ts +21 -0
- package/dist/components/OcBarcode.vue.d.ts +12 -0
- package/dist/components/OcBrandMark.vue.d.ts +23 -0
- package/dist/components/OcBreadcrumb.vue.d.ts +7 -1
- package/dist/components/OcButton.vue.d.ts +6 -3
- package/dist/components/OcDataTable.vue.d.ts +68 -1
- package/dist/components/OcDataTableName.vue.d.ts +20 -0
- package/dist/components/OcDateField.vue.d.ts +19 -0
- package/dist/components/OcEmojiPicker.vue.d.ts +1 -1
- package/dist/components/OcFeatureCard.vue.d.ts +23 -0
- package/dist/components/OcFormSection.vue.d.ts +25 -0
- package/dist/components/OcGallery.vue.d.ts +17 -0
- package/dist/components/OcGlass.vue.d.ts +2 -1
- package/dist/components/OcGlassBar.vue.d.ts +32 -0
- package/dist/components/OcLazyImage.vue.d.ts +24 -0
- package/dist/components/OcLinkCard.vue.d.ts +22 -0
- package/dist/components/OcMeterRow.vue.d.ts +9 -0
- package/dist/components/{OcColumnMenu.vue.d.ts → OcNameCard.vue.d.ts} +15 -16
- package/dist/components/OcPanel.vue.d.ts +16 -0
- package/dist/components/OcPrice.vue.d.ts +20 -0
- package/dist/components/OcQuantity.vue.d.ts +24 -0
- package/dist/components/OcRating.vue.d.ts +11 -0
- package/dist/components/OcRatingInput.vue.d.ts +18 -0
- package/dist/components/OcResult.vue.d.ts +23 -0
- package/dist/components/OcRibbon.vue.d.ts +22 -0
- package/dist/components/OcSpecList.vue.d.ts +15 -0
- package/dist/components/OcStock.vue.d.ts +20 -0
- package/dist/index.d.ts +29 -3
- package/dist/omniaui-vue.js +4994 -3338
- package/dist/omniaui-vue.js.map +1 -1
- package/manifest.json +138 -6
- package/package.json +1 -1
- package/src/blocks/OcBlockContactForm.vue +146 -0
- package/src/blocks/OcBlockDataTable.vue +1 -1
- package/src/blocks/OcBlockProfileHeader.vue +15 -4
- package/src/components/OcAttachmentList.vue +1 -1
- package/src/components/OcAvatarPicker.vue +34 -0
- package/src/components/OcBarcode.vue +23 -0
- package/src/components/OcBrandMark.vue +15 -0
- package/src/components/OcBreadcrumb.vue +14 -5
- package/src/components/OcButton.vue +10 -2
- package/src/components/OcChatComposer.vue +1 -1
- package/src/components/OcDataTable.vue +100 -25
- package/src/components/OcDataTableName.vue +18 -0
- package/src/components/OcDateField.vue +23 -0
- package/src/components/OcEmojiPicker.vue +2 -2
- package/src/components/OcFeatureCard.vue +15 -0
- package/src/components/OcFormSection.vue +19 -0
- package/src/components/OcGallery.vue +27 -0
- package/src/components/OcGlass.vue +4 -4
- package/src/components/OcGlassBar.vue +17 -0
- package/src/components/OcLazyImage.vue +17 -0
- package/src/components/OcLinkCard.vue +16 -0
- package/src/components/OcMessageList.vue +6 -6
- package/src/components/OcMessageThread.vue +11 -11
- package/src/components/OcMeterRow.vue +18 -0
- package/src/components/OcNameCard.vue +28 -0
- package/src/components/OcPanel.vue +9 -0
- package/src/components/OcPrice.vue +30 -0
- package/src/components/OcProse.vue +3 -3
- package/src/components/OcQuantity.vue +21 -0
- package/src/components/OcRating.vue +17 -0
- package/src/components/OcRatingInput.vue +17 -0
- package/src/components/OcResult.vue +16 -0
- package/src/components/OcRibbon.vue +9 -0
- package/src/components/OcSpecList.vue +17 -0
- package/src/components/OcStock.vue +13 -0
- package/src/index.ts +74 -4
- 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>
|
|
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>—
|
|
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
|
|
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>
|