@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.
- package/dist/blocks/OcBlockDataTable.vue.d.ts +1 -1
- package/dist/blocks/OcBlockProfileHeader.vue.d.ts +4 -2
- package/dist/components/OcAvatarPicker.vue.d.ts +21 -0
- package/dist/components/OcBarcode.vue.d.ts +12 -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/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/OcMeterRow.vue.d.ts +9 -0
- package/dist/components/{OcColumnMenu.vue.d.ts → OcNameCard.vue.d.ts} +15 -16
- 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/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/components/OcUser.vue.d.ts +0 -1
- package/dist/index.d.ts +22 -3
- package/dist/omniaui-vue.js +5271 -4107
- package/dist/omniaui-vue.js.map +1 -1
- package/manifest.json +102 -6
- package/package.json +1 -1
- package/src/blocks/OcBlockAppHeader.vue +1 -1
- 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/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/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/OcLanguageSelect.vue +1 -1
- package/src/components/OcLazyImage.vue +17 -0
- package/src/components/OcListToolbar.vue +5 -5
- package/src/components/OcMessage.vue +4 -4
- package/src/components/OcMessageList.vue +6 -6
- package/src/components/OcMessageThread.vue +12 -12
- package/src/components/OcMeterRow.vue +18 -0
- package/src/components/OcNameCard.vue +28 -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/OcRibbon.vue +9 -0
- package/src/components/OcSpecList.vue +17 -0
- package/src/components/OcStock.vue +13 -0
- package/src/components/OcUser.vue +7 -3
- package/src/index.ts +55 -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,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
|
-
|
|
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>{{
|
|
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>
|