@byyuurin/ui 0.5.0 → 0.5.2
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/README.md +3 -6
- package/dist/module.json +1 -1
- package/dist/module.mjs +5 -4
- package/dist/runtime/components/Accordion.vue +9 -9
- package/dist/runtime/components/Alert.vue +9 -9
- package/dist/runtime/components/Avatar.vue +4 -4
- package/dist/runtime/components/AvatarGroup.vue +3 -3
- package/dist/runtime/components/Badge.vue +5 -5
- package/dist/runtime/components/Breadcrumb.vue +9 -9
- package/dist/runtime/components/Button.vue +5 -5
- package/dist/runtime/components/Calendar.vue +11 -11
- package/dist/runtime/components/Card.vue +6 -6
- package/dist/runtime/components/Carousel.vue +10 -10
- package/dist/runtime/components/Checkbox.vue +9 -9
- package/dist/runtime/components/CheckboxGroup.vue +4 -4
- package/dist/runtime/components/Chip.vue +2 -2
- package/dist/runtime/components/Collapsible.vue +2 -2
- package/dist/runtime/components/ContextMenuContent.vue +18 -18
- package/dist/runtime/components/Drawer.vue +9 -9
- package/dist/runtime/components/DropdownMenu.vue +2 -2
- package/dist/runtime/components/DropdownMenuContent.vue +19 -19
- package/dist/runtime/components/FieldGroup.vue +1 -1
- package/dist/runtime/components/FileUpload.vue +15 -15
- package/dist/runtime/components/Form.vue +1 -1
- package/dist/runtime/components/FormField.vue +9 -9
- package/dist/runtime/components/Input.vue +7 -7
- package/dist/runtime/components/InputNumber.vue +4 -4
- package/dist/runtime/components/InputTags.vue +12 -12
- package/dist/runtime/components/Kbd.vue +1 -1
- package/dist/runtime/components/Marquee.vue +2 -2
- package/dist/runtime/components/Modal.vue +9 -9
- package/dist/runtime/components/NavigationMenu.vue +40 -40
- package/dist/runtime/components/Pagination.vue +8 -8
- package/dist/runtime/components/PinInput.vue +2 -2
- package/dist/runtime/components/Popover.vue +2 -2
- package/dist/runtime/components/Progress.vue +6 -6
- package/dist/runtime/components/RadioGroup.vue +10 -10
- package/dist/runtime/components/ScrollArea.vue +7 -7
- package/dist/runtime/components/Select.vue +31 -31
- package/dist/runtime/components/Separator.vue +7 -7
- package/dist/runtime/components/Skeleton.vue +1 -1
- package/dist/runtime/components/Slider.vue +4 -4
- package/dist/runtime/components/Stepper.vue +12 -12
- package/dist/runtime/components/Switch.vue +10 -10
- package/dist/runtime/components/Table.vue +22 -22
- package/dist/runtime/components/Tabs.vue +9 -9
- package/dist/runtime/components/Textarea.vue +7 -7
- package/dist/runtime/components/Timeline.vue +9 -9
- package/dist/runtime/components/Toast.vue +10 -9
- package/dist/runtime/components/ToastProvider.vue +2 -2
- package/dist/runtime/components/Tooltip.vue +4 -4
- package/dist/runtime/components/Tree.vue +10 -10
- package/dist/runtime/composables/defineShortcuts.js +1 -1
- package/dist/runtime/composables/useOverlay.d.ts +3 -1
- package/dist/runtime/utils/style.d.ts +10 -10
- package/dist/runtime/vue/overrides/none/Link.vue +119 -0
- package/dist/runtime/vue/overrides/none/Link.vue.d.ts +79 -0
- package/dist/runtime/vue/{components → overrides/vue-router}/Link.vue +42 -42
- package/dist/runtime/vue/{components → overrides/vue-router}/Link.vue.d.ts +8 -8
- package/dist/runtime/vue/{stubs.d.ts → stubs/base.d.ts} +1 -2
- package/dist/runtime/vue/{stubs.js → stubs/base.js} +1 -2
- package/dist/runtime/vue/stubs/none.d.ts +56 -0
- package/dist/runtime/vue/stubs/none.js +48 -0
- package/dist/runtime/vue/stubs/vue-router.d.ts +2 -0
- package/dist/runtime/vue/stubs/vue-router.js +2 -0
- package/dist/setup.d.mts +1 -1
- package/dist/shared/{ui.Cakz_vv4.mjs → ui.B6u-xvto.mjs} +42 -44
- package/dist/shared/{ui.CGCKYv7g.d.mts → ui.Cec0yP1b.d.mts} +11 -2
- package/dist/shared/{ui.DYMXCXO6.mjs → ui.Dy7aH7sf.mjs} +12 -6
- package/dist/unocss.d.mts +20 -2
- package/dist/unocss.mjs +25 -2
- package/dist/unplugin.d.mts +1 -1
- package/dist/unplugin.mjs +68 -25
- package/dist/vite.d.mts +1 -1
- package/dist/vite.mjs +4 -3
- package/package.json +34 -33
package/README.md
CHANGED
|
@@ -13,20 +13,17 @@ https://byyuurin-ui.netlify.app/
|
|
|
13
13
|
## Installation
|
|
14
14
|
|
|
15
15
|
```bash [pnpm]
|
|
16
|
-
pnpm add @byyuurin/ui
|
|
16
|
+
pnpm add @byyuurin/ui unocss
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
```bash [yarn]
|
|
20
|
-
yarn add @byyuurin/ui
|
|
20
|
+
yarn add @byyuurin/ui unocss
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
```bash [npm]
|
|
24
|
-
npm install @byyuurin/ui
|
|
24
|
+
npm install @byyuurin/ui unocss
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
> [!WARNING]
|
|
28
|
-
> If you're using pnpm, ensure that you either set [`shamefully-hoist=true`](https://pnpm.io/settings#shamefully-hoist) in your `.npmrc` file or install `@byyuurin/ui-kit` in your project's root directory.
|
|
29
|
-
|
|
30
27
|
### Nuxt
|
|
31
28
|
|
|
32
29
|
1. Add the UI module in your `nuxt.config.ts`:
|
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { defineNuxtModule, createResolver, addPlugin, addComponentsDir, addImportsDir, hasNuxtModule, installModule } from '@nuxt/kit';
|
|
2
2
|
import { defu } from 'defu';
|
|
3
|
-
import { v as version, n as name, a as addTemplates } from './shared/ui.
|
|
4
|
-
import { d as defaultOptions, r as resolveColors, g as
|
|
5
|
-
import 'node:
|
|
3
|
+
import { v as version, n as name, a as addTemplates } from './shared/ui.B6u-xvto.mjs';
|
|
4
|
+
import { d as defaultOptions, r as resolveColors, g as getDefaultConfig } from './shared/ui.Dy7aH7sf.mjs';
|
|
5
|
+
import 'node:module';
|
|
6
6
|
import 'node:url';
|
|
7
7
|
import '@unocss/config';
|
|
8
8
|
import 'knitwork';
|
|
9
|
+
import 'pathe';
|
|
9
10
|
import 'scule';
|
|
10
11
|
import '@byyuurin/ui-kit';
|
|
11
12
|
import '../dist/runtime/utils/index.js';
|
|
@@ -26,7 +27,7 @@ const module = defineNuxtModule({
|
|
|
26
27
|
options.theme.colors = resolveColors(options.theme.colors);
|
|
27
28
|
nuxt.options.ui = options;
|
|
28
29
|
nuxt.options.alias["#ui"] = resolve("./runtime");
|
|
29
|
-
nuxt.options.appConfig.ui = defu(nuxt.options.appConfig.ui || {},
|
|
30
|
+
nuxt.options.appConfig.ui = defu(nuxt.options.appConfig.ui || {}, getDefaultConfig(options.theme));
|
|
30
31
|
nuxt.options.app.rootAttrs ||= {};
|
|
31
32
|
nuxt.options.app.rootAttrs.class = [nuxt.options.app.rootAttrs.class, "isolate"].filter(Boolean).join(" ");
|
|
32
33
|
async function registerModule(name2, key, options2) {
|
|
@@ -35,39 +35,39 @@ const ui = computed(() => {
|
|
|
35
35
|
</script>
|
|
36
36
|
|
|
37
37
|
<template>
|
|
38
|
-
<AccordionRoot v-bind="rootProps" :class="ui.root({ class: [props.ui?.root, props.class] })"
|
|
38
|
+
<AccordionRoot v-bind="rootProps" data-part="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
|
|
39
39
|
<AccordionItem
|
|
40
40
|
v-for="(item, index) in props.items"
|
|
41
41
|
v-slot="{ open }"
|
|
42
42
|
:key="index"
|
|
43
43
|
:value="item.value || String(index)"
|
|
44
44
|
:disabled="item.disabled"
|
|
45
|
-
:class="ui.item({ class: [props.ui?.item, item.ui?.item, item.class] })"
|
|
46
45
|
data-part="item"
|
|
46
|
+
:class="ui.item({ class: [props.ui?.item, item.ui?.item, item.class] })"
|
|
47
47
|
>
|
|
48
|
-
<AccordionHeader as="div" :class="ui.header({ class: [props.ui?.header, item.ui?.header] })"
|
|
49
|
-
<AccordionTrigger :class="ui.trigger({ class: [props.ui?.trigger, item.ui?.trigger], disabled: item.disabled })"
|
|
48
|
+
<AccordionHeader as="div" data-part="header" :class="ui.header({ class: [props.ui?.header, item.ui?.header] })">
|
|
49
|
+
<AccordionTrigger data-part="trigger" :class="ui.trigger({ class: [props.ui?.trigger, item.ui?.trigger], disabled: item.disabled })">
|
|
50
50
|
<slot name="leading" v-bind="{ item, index, open, ui }">
|
|
51
|
-
<Icon v-if="item.icon" :name="item.icon" :class="ui.leadingIcon({ class: [props.ui?.leadingIcon, item.ui?.leadingIcon] })"
|
|
51
|
+
<Icon v-if="item.icon" :name="item.icon" data-part="leadingIcon" :class="ui.leadingIcon({ class: [props.ui?.leadingIcon, item.ui?.leadingIcon] })" />
|
|
52
52
|
</slot>
|
|
53
53
|
|
|
54
|
-
<span v-if="get(item, props.labelKey) || !!slots.default" :class="ui.label({ class: [props.ui?.label, item.ui?.label] })"
|
|
54
|
+
<span v-if="get(item, props.labelKey) || !!slots.default" data-part="label" :class="ui.label({ class: [props.ui?.label, item.ui?.label] })">
|
|
55
55
|
<slot v-bind="{ item, index, open }">{{ get(item, props.labelKey) }}</slot>
|
|
56
56
|
</span>
|
|
57
57
|
|
|
58
58
|
<slot name="trailing" v-bind="{ item, index, open, ui }">
|
|
59
|
-
<Icon :name="item.trailingIcon || props.trailingIcon || appConfig.ui.icons.chevronDown" :class="ui.trailingIcon({ class: [props.ui?.trailingIcon, item.ui?.trailingIcon] })"
|
|
59
|
+
<Icon :name="item.trailingIcon || props.trailingIcon || appConfig.ui.icons.chevronDown" data-part="trailingIcon" :class="ui.trailingIcon({ class: [props.ui?.trailingIcon, item.ui?.trailingIcon] })" />
|
|
60
60
|
</slot>
|
|
61
61
|
</AccordionTrigger>
|
|
62
62
|
</AccordionHeader>
|
|
63
63
|
|
|
64
64
|
<AccordionContent
|
|
65
65
|
v-if="item.content || !!slots.content || item.slot && slots[item.slot] || !!slots.body || item.slot && slots[`${item.slot}-body`]"
|
|
66
|
-
:class="ui.content({ class: [props.ui?.content, item.ui?.content] })"
|
|
67
66
|
data-part="content"
|
|
67
|
+
:class="ui.content({ class: [props.ui?.content, item.ui?.content] })"
|
|
68
68
|
>
|
|
69
69
|
<slot :name="item.slot || 'content'" :item="item" :index="index" :open="open" :ui="ui">
|
|
70
|
-
<div :class="ui.body({ class: [props.ui?.body, item.ui?.body] })"
|
|
70
|
+
<div data-part="body" :class="ui.body({ class: [props.ui?.body, item.ui?.body] })">
|
|
71
71
|
<slot :name="item.slot ? `${item.slot}-body` : 'body'" :item="item" :index="index" :open="open" :ui="ui">
|
|
72
72
|
{{ item.content }}
|
|
73
73
|
</slot>
|
|
@@ -43,46 +43,46 @@ const ui = computed(() => {
|
|
|
43
43
|
<template>
|
|
44
44
|
<Primitive
|
|
45
45
|
:as="props.as"
|
|
46
|
-
:class="ui.root({ class: [props.ui?.root, props.class] })"
|
|
47
46
|
:data-orientation="props.orientation"
|
|
48
47
|
data-part="root"
|
|
48
|
+
:class="ui.root({ class: [props.ui?.root, props.class] })"
|
|
49
49
|
>
|
|
50
50
|
<slot name="leading" :ui="ui">
|
|
51
51
|
<Avatar
|
|
52
52
|
v-if="props.avatar"
|
|
53
53
|
:size="props.ui?.avatarSize || ui.avatarSize()"
|
|
54
54
|
v-bind="props.avatar"
|
|
55
|
-
:class="ui.avatar({ class: props.ui?.avatar })"
|
|
56
55
|
data-part="avatar"
|
|
56
|
+
:class="ui.avatar({ class: props.ui?.avatar })"
|
|
57
57
|
/>
|
|
58
58
|
<Icon
|
|
59
59
|
v-else-if="props.icon"
|
|
60
60
|
:name="props.icon"
|
|
61
|
-
:class="ui.icon({ class: props.ui?.icon })"
|
|
62
61
|
data-part="icon"
|
|
62
|
+
:class="ui.icon({ class: props.ui?.icon })"
|
|
63
63
|
/>
|
|
64
64
|
</slot>
|
|
65
65
|
|
|
66
|
-
<div :class="ui.wrapper({ class: props.ui?.wrapper })"
|
|
67
|
-
<div v-if="props.title || slots.title" :class="ui.title({ class: props.ui?.title })"
|
|
66
|
+
<div data-part="wrapper" :class="ui.wrapper({ class: props.ui?.wrapper })">
|
|
67
|
+
<div v-if="props.title || slots.title" data-part="title" :class="ui.title({ class: props.ui?.title })">
|
|
68
68
|
<slot name="title">
|
|
69
69
|
{{ props.title }}
|
|
70
70
|
</slot>
|
|
71
71
|
</div>
|
|
72
|
-
<div v-if="props.description || slots.description" :class="ui.description({ class: props.ui?.description })"
|
|
72
|
+
<div v-if="props.description || slots.description" data-part="description" :class="ui.description({ class: props.ui?.description })">
|
|
73
73
|
<slot name="description">
|
|
74
74
|
{{ props.description }}
|
|
75
75
|
</slot>
|
|
76
76
|
</div>
|
|
77
77
|
|
|
78
|
-
<div v-if="props.orientation === 'vertical' && (props.actions?.length || slots.actions)" :class="ui.actions({ class: props.ui?.actions })"
|
|
78
|
+
<div v-if="props.orientation === 'vertical' && (props.actions?.length || slots.actions)" data-part="actions" :class="ui.actions({ class: props.ui?.actions })">
|
|
79
79
|
<slot name="actions">
|
|
80
80
|
<Button v-for="(action, index) in props.actions" :key="index" size="xs" v-bind="action" />
|
|
81
81
|
</slot>
|
|
82
82
|
</div>
|
|
83
83
|
</div>
|
|
84
84
|
|
|
85
|
-
<div v-if="props.orientation === 'horizontal' && (props.actions?.length || slots.actions) || props.close" :class="ui.actions({ class: props.ui?.actions, orientation: 'horizontal' })"
|
|
85
|
+
<div v-if="props.orientation === 'horizontal' && (props.actions?.length || slots.actions) || props.close" data-part="actions" :class="ui.actions({ class: props.ui?.actions, orientation: 'horizontal' })">
|
|
86
86
|
<template v-if="props.orientation === 'horizontal' && (props.actions?.length || slots.actions)">
|
|
87
87
|
<slot name="actions">
|
|
88
88
|
<Button v-for="(action, index) in props.actions" :key="index" size="xs" v-bind="action" />
|
|
@@ -97,8 +97,8 @@ const ui = computed(() => {
|
|
|
97
97
|
variant="link"
|
|
98
98
|
:aria-label="t('alert.close')"
|
|
99
99
|
v-bind="typeof props.close === 'object' ? props.close : {}"
|
|
100
|
-
:class="ui.close({ class: props.ui?.close })"
|
|
101
100
|
data-part="close"
|
|
101
|
+
:class="ui.close({ class: props.ui?.close })"
|
|
102
102
|
@click="emit('update:open', false)"
|
|
103
103
|
/>
|
|
104
104
|
</slot>
|
|
@@ -67,8 +67,8 @@ function onError() {
|
|
|
67
67
|
:is="props.chip ? Chip : Primitive"
|
|
68
68
|
:as="as.root"
|
|
69
69
|
v-bind="props.chip ? typeof props.chip === 'object' ? { inset: true, ...props.chip } : { inset: true } : {}"
|
|
70
|
-
:class="ui.root({ class: [props.ui?.root, props.class] })"
|
|
71
70
|
data-part="root"
|
|
71
|
+
:class="ui.root({ class: [props.ui?.root, props.class] })"
|
|
72
72
|
:style="props.style"
|
|
73
73
|
>
|
|
74
74
|
<component
|
|
@@ -79,14 +79,14 @@ function onError() {
|
|
|
79
79
|
:width="sizePx"
|
|
80
80
|
:height="sizePx"
|
|
81
81
|
v-bind="$attrs"
|
|
82
|
-
:class="ui.image({ class: props.ui?.image })"
|
|
83
82
|
data-part="image"
|
|
83
|
+
:class="ui.image({ class: props.ui?.image })"
|
|
84
84
|
@error="onError"
|
|
85
85
|
/>
|
|
86
86
|
|
|
87
87
|
<slot v-else v-bind="$attrs">
|
|
88
|
-
<Icon v-if="props.icon" :name="props.icon" :class="ui.icon({ class: props.ui?.icon })"
|
|
89
|
-
<span v-else :class="ui.fallback({ class: props.ui?.fallback })"
|
|
88
|
+
<Icon v-if="props.icon" :name="props.icon" data-part="icon" :class="ui.icon({ class: props.ui?.icon })" />
|
|
89
|
+
<span v-else data-part="fallback" :class="ui.fallback({ class: props.ui?.fallback })">
|
|
90
90
|
<template v-if="fallback">{{ fallback }}</template>
|
|
91
91
|
<template v-else> </template>
|
|
92
92
|
</span>
|
|
@@ -54,8 +54,8 @@ provideAvatarGroup(computed(() => props));
|
|
|
54
54
|
</script>
|
|
55
55
|
|
|
56
56
|
<template>
|
|
57
|
-
<Primitive :as="props.as" :class="ui.root({ class: [props.ui?.root, props.class] })"
|
|
58
|
-
<Avatar v-if="hiddenCount > 0" :text="`+${hiddenCount}`" :class="ui.base({ class: props.ui?.base })"
|
|
59
|
-
<component :is="avatar" v-for="(avatar, index) in visibleAvatars" :key="index" :class="ui.base({ class: props.ui?.base })"
|
|
57
|
+
<Primitive :as="props.as" data-part="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
|
|
58
|
+
<Avatar v-if="hiddenCount > 0" :text="`+${hiddenCount}`" data-part="base" :class="ui.base({ class: props.ui?.base })" />
|
|
59
|
+
<component :is="avatar" v-for="(avatar, index) in visibleAvatars" :key="index" data-part="base" :class="ui.base({ class: props.ui?.base })" />
|
|
60
60
|
</Primitive>
|
|
61
61
|
</template>
|
|
@@ -44,25 +44,25 @@ const ui = computed(() => {
|
|
|
44
44
|
</script>
|
|
45
45
|
|
|
46
46
|
<template>
|
|
47
|
-
<Primitive :as="props.as" :class="ui.base({ class: [props.ui?.base, props.class] })"
|
|
47
|
+
<Primitive :as="props.as" data-part="base" :class="ui.base({ class: [props.ui?.base, props.class] })">
|
|
48
48
|
<slot name="leading" :ui="ui">
|
|
49
49
|
<Icon
|
|
50
50
|
v-if="isLeading && leadingIconName"
|
|
51
51
|
:name="leadingIconName"
|
|
52
|
-
:class="ui.leadingIcon({ class: props.ui?.leadingIcon })"
|
|
53
52
|
data-part="leadingIcon"
|
|
53
|
+
:class="ui.leadingIcon({ class: props.ui?.leadingIcon })"
|
|
54
54
|
/>
|
|
55
55
|
<Avatar
|
|
56
56
|
v-else-if="props.avatar"
|
|
57
57
|
:size="props.ui?.leadingAvatarSize || ui.leadingAvatarSize()"
|
|
58
58
|
v-bind="props.avatar"
|
|
59
|
-
:class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })"
|
|
60
59
|
data-part="leadingAvatar"
|
|
60
|
+
:class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })"
|
|
61
61
|
/>
|
|
62
62
|
</slot>
|
|
63
63
|
|
|
64
64
|
<slot :ui="ui">
|
|
65
|
-
<span v-if="props.label" :class="ui.label({ class: props.ui?.label })"
|
|
65
|
+
<span v-if="props.label" data-part="label" :class="ui.label({ class: props.ui?.label })">
|
|
66
66
|
{{ props.label }}
|
|
67
67
|
</span>
|
|
68
68
|
</slot>
|
|
@@ -71,8 +71,8 @@ const ui = computed(() => {
|
|
|
71
71
|
<Icon
|
|
72
72
|
v-if="isTrailing && trailingIconName"
|
|
73
73
|
:name="trailingIconName"
|
|
74
|
-
:class="ui.trailingIcon({ class: props.ui?.trailingIcon })"
|
|
75
74
|
data-part="trailingIcon"
|
|
75
|
+
:class="ui.trailingIcon({ class: props.ui?.trailingIcon })"
|
|
76
76
|
/>
|
|
77
77
|
</slot>
|
|
78
78
|
</Primitive>
|
|
@@ -32,36 +32,36 @@ const ui = computed(() => {
|
|
|
32
32
|
</script>
|
|
33
33
|
|
|
34
34
|
<template>
|
|
35
|
-
<Primitive :as="props.as" aria-label="breadcrumb" :class="ui.root({ class: [props.ui?.root, props.class] })"
|
|
36
|
-
<ol :class="ui.list({ class: props.ui?.list })"
|
|
35
|
+
<Primitive :as="props.as" aria-label="breadcrumb" data-part="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
|
|
36
|
+
<ol data-part="list" :class="ui.list({ class: props.ui?.list })">
|
|
37
37
|
<template v-for="(item, index) in props.items" :key="index">
|
|
38
|
-
<li :class="ui.item({ class: [props.ui?.item, item.ui?.item] })"
|
|
38
|
+
<li data-part="item" :class="ui.item({ class: [props.ui?.item, item.ui?.item] })">
|
|
39
39
|
<Link v-slot="{ active, ...slotProps }" v-bind="pickLinkProps(item)" custom>
|
|
40
40
|
<LinkBase
|
|
41
41
|
v-bind="slotProps"
|
|
42
42
|
as="span"
|
|
43
43
|
:aria-current="(item.active ?? active) && index === items.length - 1 ? 'page' : void 0"
|
|
44
|
-
:class="ui.link({ class: [props.ui?.link, item.ui?.link, item.class], active: item.active ?? index === items.length - 1, disabled: item.disabled, to: !!item.to })"
|
|
45
44
|
data-part="link"
|
|
45
|
+
:class="ui.link({ class: [props.ui?.link, item.ui?.link, item.class], active: item.active ?? index === items.length - 1, disabled: item.disabled, to: !!item.to })"
|
|
46
46
|
>
|
|
47
47
|
<slot :name="item.slot || 'item'" :item="item" :index="index" :active="item.active ?? index === items.length - 1" :ui="ui">
|
|
48
48
|
<slot :name="`${item.slot || 'item'}-leading`" :item="item" :active="item.active ?? index === items.length - 1" :index="index" :ui="ui">
|
|
49
49
|
<Icon
|
|
50
50
|
v-if="item.icon"
|
|
51
51
|
:name="item.icon"
|
|
52
|
-
:class="ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, item.ui?.linkLeadingIcon], active: item.active ?? index === items.length - 1 })"
|
|
53
52
|
data-part="linkLeadingIcon"
|
|
53
|
+
:class="ui.linkLeadingIcon({ class: [props.ui?.linkLeadingIcon, item.ui?.linkLeadingIcon], active: item.active ?? index === items.length - 1 })"
|
|
54
54
|
/>
|
|
55
55
|
<Avatar
|
|
56
56
|
v-else-if="item.avatar"
|
|
57
57
|
:size="props.ui?.linkLeadingAvatarSize || ui.linkLeadingAvatarSize()"
|
|
58
58
|
v-bind="item.avatar"
|
|
59
|
-
:class="ui.linkLeadingAvatar({ class: [props.ui?.linkLeadingAvatar, item.ui?.linkLeadingAvatar], active: item.active ?? index === items.length - 1 })"
|
|
60
59
|
data-part="linkLeadingAvatar"
|
|
60
|
+
:class="ui.linkLeadingAvatar({ class: [props.ui?.linkLeadingAvatar, item.ui?.linkLeadingAvatar], active: item.active ?? index === items.length - 1 })"
|
|
61
61
|
/>
|
|
62
62
|
</slot>
|
|
63
63
|
|
|
64
|
-
<span v-if="get(item, props.labelKey) || slots[`${item.slot || 'item'}-label`]" :class="ui.linkLabel({ class: [props.ui?.linkLabel, item.ui?.linkLabel] })"
|
|
64
|
+
<span v-if="get(item, props.labelKey) || slots[`${item.slot || 'item'}-label`]" data-part="linkLabel" :class="ui.linkLabel({ class: [props.ui?.linkLabel, item.ui?.linkLabel] })">
|
|
65
65
|
<slot :name="`${item.slot || 'item'}-label`" :item="item" :active="item.active ?? index === items.length - 1" :index="index">
|
|
66
66
|
{{ get(item, props.labelKey) }}
|
|
67
67
|
</slot>
|
|
@@ -73,9 +73,9 @@ const ui = computed(() => {
|
|
|
73
73
|
</Link>
|
|
74
74
|
</li>
|
|
75
75
|
|
|
76
|
-
<li v-if="index < items.length - 1" role="presentation" aria-hidden="true" :class="ui.separator({ class: [props.ui?.separator, item.ui?.separator] })"
|
|
76
|
+
<li v-if="index < items.length - 1" role="presentation" aria-hidden="true" data-part="separator" :class="ui.separator({ class: [props.ui?.separator, item.ui?.separator] })">
|
|
77
77
|
<slot name="separator" :ui="ui">
|
|
78
|
-
<Icon :name="separatorIcon" :class="ui.separatorIcon({ class: [props.ui?.separatorIcon, item.ui?.separatorIcon] })"
|
|
78
|
+
<Icon :name="separatorIcon" data-part="separatorIcon" :class="ui.separatorIcon({ class: [props.ui?.separatorIcon, item.ui?.separatorIcon] })" />
|
|
79
79
|
</slot>
|
|
80
80
|
</li>
|
|
81
81
|
</template>
|
|
@@ -114,11 +114,11 @@ const ui = computed(() => {
|
|
|
114
114
|
:type="props.type"
|
|
115
115
|
:disabled="props.disabled || props.loading"
|
|
116
116
|
v-bind="omit(linkProps, ['type', 'disabled', 'onClick'])"
|
|
117
|
-
data-part="base"
|
|
118
117
|
custom
|
|
119
118
|
>
|
|
120
119
|
<LinkBase
|
|
121
120
|
v-bind="slotProps"
|
|
121
|
+
data-part="base"
|
|
122
122
|
:class="ui.base({
|
|
123
123
|
class: [props.ui?.base, props.class],
|
|
124
124
|
active,
|
|
@@ -131,23 +131,23 @@ const ui = computed(() => {
|
|
|
131
131
|
<Icon
|
|
132
132
|
v-if="isLeading && leadingIconName"
|
|
133
133
|
:name="leadingIconName"
|
|
134
|
-
:class="ui.leadingIcon({ class: props.ui?.leadingIcon, active })"
|
|
135
134
|
data-part="leadingIcon"
|
|
135
|
+
:class="ui.leadingIcon({ class: props.ui?.leadingIcon, active })"
|
|
136
136
|
/>
|
|
137
137
|
<Avatar
|
|
138
138
|
v-else-if="props.avatar"
|
|
139
139
|
:size="props.ui?.leadingAvatarSize || ui.leadingAvatarSize()"
|
|
140
140
|
v-bind="props.avatar"
|
|
141
|
-
:class="ui.leadingAvatar({ class: props.ui?.leadingAvatar, active })"
|
|
142
141
|
data-part="leadingAvatar"
|
|
142
|
+
:class="ui.leadingAvatar({ class: props.ui?.leadingAvatar, active })"
|
|
143
143
|
/>
|
|
144
144
|
</slot>
|
|
145
145
|
|
|
146
146
|
<slot :ui="ui">
|
|
147
147
|
<span
|
|
148
148
|
v-if="props.label"
|
|
149
|
-
:class="ui.label({ class: props.ui?.label, active })"
|
|
150
149
|
data-part="label"
|
|
150
|
+
:class="ui.label({ class: props.ui?.label, active })"
|
|
151
151
|
>
|
|
152
152
|
{{ label }}
|
|
153
153
|
</span>
|
|
@@ -157,8 +157,8 @@ const ui = computed(() => {
|
|
|
157
157
|
<Icon
|
|
158
158
|
v-if="isTrailing && trailingIconName"
|
|
159
159
|
:name="trailingIconName"
|
|
160
|
-
:class="ui.trailingIcon({ class: props.ui?.trailingIcon, active })"
|
|
161
160
|
data-part="trailingIcon"
|
|
161
|
+
:class="ui.trailingIcon({ class: props.ui?.trailingIcon, active })"
|
|
162
162
|
/>
|
|
163
163
|
</slot>
|
|
164
164
|
</LinkBase>
|
|
@@ -86,10 +86,10 @@ const Calendar = computed(() => props.range ? RangeCalendar : BaseCalendar);
|
|
|
86
86
|
v-bind="rootProps"
|
|
87
87
|
:model-value="props.modelValue"
|
|
88
88
|
:default-value="props.defaultValue"
|
|
89
|
-
:class="ui.root({ class: [props.class, props.ui?.root] })"
|
|
90
89
|
data-part="root"
|
|
90
|
+
:class="ui.root({ class: [props.class, props.ui?.root] })"
|
|
91
91
|
>
|
|
92
|
-
<Calendar.Header :class="ui.header({ class: props.ui?.header })"
|
|
92
|
+
<Calendar.Header data-part="header" :class="ui.header({ class: props.ui?.header })">
|
|
93
93
|
<Calendar.Prev v-if="props.yearControls" :prev-page="(date) => paginateYear(date, -1)" :aria-label="t('calendar.prevYear')" as-child>
|
|
94
94
|
<Button :icon="prevYearIcon" :size="props.size" color="neutral" variant="ghost" v-bind="props.prevYear" />
|
|
95
95
|
</Calendar.Prev>
|
|
@@ -97,7 +97,7 @@ const Calendar = computed(() => props.range ? RangeCalendar : BaseCalendar);
|
|
|
97
97
|
<Button :icon="prevMonthIcon" :size="props.size" color="neutral" variant="ghost" v-bind="props.prevMonth" />
|
|
98
98
|
</Calendar.Prev>
|
|
99
99
|
|
|
100
|
-
<Calendar.Heading v-slot="{ headingValue }" :class="ui.heading({ class: props.ui?.heading })"
|
|
100
|
+
<Calendar.Heading v-slot="{ headingValue }" data-part="heading" :class="ui.heading({ class: props.ui?.heading })">
|
|
101
101
|
<slot name="heading" :value="headingValue">
|
|
102
102
|
{{ headingValue }}
|
|
103
103
|
</slot>
|
|
@@ -109,41 +109,41 @@ const Calendar = computed(() => props.range ? RangeCalendar : BaseCalendar);
|
|
|
109
109
|
<Button :icon="nextYearIcon" :size="props.size" color="neutral" variant="ghost" v-bind="props.nextYear" />
|
|
110
110
|
</Calendar.Next>
|
|
111
111
|
</Calendar.Header>
|
|
112
|
-
<div :class="ui.body({ class: props.ui?.body })"
|
|
112
|
+
<div data-part="body" :class="ui.body({ class: props.ui?.body })">
|
|
113
113
|
<Calendar.Grid
|
|
114
114
|
v-for="month in grid"
|
|
115
115
|
:key="month.value.toString()"
|
|
116
|
-
:class="ui.grid({ class: props.ui?.grid })"
|
|
117
116
|
data-part="grid"
|
|
117
|
+
:class="ui.grid({ class: props.ui?.grid })"
|
|
118
118
|
>
|
|
119
119
|
<Calendar.GridHead>
|
|
120
|
-
<Calendar.GridRow :class="ui.gridWeekDaysRow({ class: props.ui?.gridWeekDaysRow })"
|
|
121
|
-
<Calendar.HeadCell v-for="day in weekDays" :key="day" :class="ui.headCell({ class: props.ui?.headCell })"
|
|
120
|
+
<Calendar.GridRow data-part="gridWeekDaysRow" :class="ui.gridWeekDaysRow({ class: props.ui?.gridWeekDaysRow })">
|
|
121
|
+
<Calendar.HeadCell v-for="day in weekDays" :key="day" data-part="headCell" :class="ui.headCell({ class: props.ui?.headCell })">
|
|
122
122
|
<slot name="week-day" :day="day">
|
|
123
123
|
{{ day }}
|
|
124
124
|
</slot>
|
|
125
125
|
</Calendar.HeadCell>
|
|
126
126
|
</Calendar.GridRow>
|
|
127
127
|
</Calendar.GridHead>
|
|
128
|
-
<Calendar.GridBody :class="ui.gridBody({ class: props.ui?.gridBody })"
|
|
128
|
+
<Calendar.GridBody data-part="gridBody" :class="ui.gridBody({ class: props.ui?.gridBody })">
|
|
129
129
|
<Calendar.GridRow
|
|
130
130
|
v-for="(weekDates, index) in month.rows"
|
|
131
131
|
:key="`weekDates-${index}`"
|
|
132
|
-
:class="ui.gridRow({ class: props.ui?.gridRow })"
|
|
133
132
|
data-part="gridRow"
|
|
133
|
+
:class="ui.gridRow({ class: props.ui?.gridRow })"
|
|
134
134
|
>
|
|
135
135
|
<Calendar.Cell
|
|
136
136
|
v-for="weekDate in weekDates"
|
|
137
137
|
:key="weekDate.toString()"
|
|
138
138
|
:date="weekDate"
|
|
139
|
-
:class="ui.cell({ class: props.ui?.cell })"
|
|
140
139
|
data-part="cell"
|
|
140
|
+
:class="ui.cell({ class: props.ui?.cell })"
|
|
141
141
|
>
|
|
142
142
|
<Calendar.CellTrigger
|
|
143
143
|
:day="weekDate"
|
|
144
144
|
:month="month.value"
|
|
145
|
-
:class="ui.cellTrigger({ class: props.ui?.cellTrigger })"
|
|
146
145
|
data-part="cellTrigger"
|
|
146
|
+
:class="ui.cellTrigger({ class: props.ui?.cellTrigger })"
|
|
147
147
|
>
|
|
148
148
|
<slot name="day" :day="weekDate">
|
|
149
149
|
{{ weekDate.day }}
|
|
@@ -25,19 +25,19 @@ const ui = computed(() => {
|
|
|
25
25
|
</script>
|
|
26
26
|
|
|
27
27
|
<template>
|
|
28
|
-
<Primitive :as="props.as" :class="ui.root({ class: [props.class, props.ui?.root] })"
|
|
28
|
+
<Primitive :as="props.as" data-part="root" :class="ui.root({ class: [props.class, props.ui?.root] })">
|
|
29
29
|
<slot name="content">
|
|
30
30
|
<div
|
|
31
31
|
v-if="slots.header || props.title || slots.title || props.description || slots.description"
|
|
32
|
-
:class="ui.header({ class: props.ui?.header })"
|
|
33
32
|
data-part="header"
|
|
33
|
+
:class="ui.header({ class: props.ui?.header })"
|
|
34
34
|
>
|
|
35
35
|
<slot name="header">
|
|
36
36
|
<Primitive
|
|
37
37
|
v-if="props.title || slots.title"
|
|
38
38
|
:as="!!slots.title ? void 0 : 'h2'"
|
|
39
|
-
:class="ui.title({ class: props.ui?.title })"
|
|
40
39
|
data-part="title"
|
|
40
|
+
:class="ui.title({ class: props.ui?.title })"
|
|
41
41
|
>
|
|
42
42
|
<slot name="title">
|
|
43
43
|
{{ props.title }}
|
|
@@ -47,8 +47,8 @@ const ui = computed(() => {
|
|
|
47
47
|
v-if="props.description || slots.description"
|
|
48
48
|
:as="!!slots.description ? void 0 : 'p'"
|
|
49
49
|
:as-child="!!slots.description"
|
|
50
|
-
:class="ui.description({ class: props.ui?.description })"
|
|
51
50
|
data-part="description"
|
|
51
|
+
:class="ui.description({ class: props.ui?.description })"
|
|
52
52
|
>
|
|
53
53
|
<slot name="description">
|
|
54
54
|
{{ props.description }}
|
|
@@ -57,11 +57,11 @@ const ui = computed(() => {
|
|
|
57
57
|
</slot>
|
|
58
58
|
</div>
|
|
59
59
|
|
|
60
|
-
<div v-if="!!slots.default" :class="ui.body({ class: props.ui?.body })"
|
|
60
|
+
<div v-if="!!slots.default" data-part="body" :class="ui.body({ class: props.ui?.body })">
|
|
61
61
|
<slot></slot>
|
|
62
62
|
</div>
|
|
63
63
|
|
|
64
|
-
<div v-if="!!slots.footer" :class="ui.footer({ class: props.ui?.footer })"
|
|
64
|
+
<div v-if="!!slots.footer" data-part="footer" :class="ui.footer({ class: props.ui?.footer })">
|
|
65
65
|
<slot name="footer"></slot>
|
|
66
66
|
</div>
|
|
67
67
|
</slot>
|
|
@@ -194,28 +194,28 @@ defineExpose({
|
|
|
194
194
|
:as="props.as"
|
|
195
195
|
role="region"
|
|
196
196
|
tabindex="0"
|
|
197
|
-
:class="ui.root({ class: [props.class, props.ui?.root] })"
|
|
198
197
|
aria-roledescription="carousel"
|
|
199
198
|
:data-orientation="props.orientation"
|
|
200
199
|
data-part="root"
|
|
200
|
+
:class="ui.root({ class: [props.class, props.ui?.root] })"
|
|
201
201
|
@keydown="onKeyDown"
|
|
202
202
|
>
|
|
203
|
-
<div ref="emblaRef" :class="ui.viewport({ class: props.ui?.viewport })"
|
|
204
|
-
<div :class="ui.container({ class: props.ui?.container })"
|
|
203
|
+
<div ref="emblaRef" data-part="viewport" :class="ui.viewport({ class: props.ui?.viewport })">
|
|
204
|
+
<div data-part="container" :class="ui.container({ class: props.ui?.container })">
|
|
205
205
|
<div
|
|
206
206
|
v-for="(item, index) in props.items"
|
|
207
207
|
:key="index"
|
|
208
208
|
v-bind="props.dots ? { role: 'tabpanel' } : { 'role': 'group', 'aria-roledescription': 'slide' }"
|
|
209
|
-
:class="ui.item({ class: [props.ui?.item, ...isCarouselItem(item) ? [item.ui?.item, item.class] : []] })"
|
|
210
209
|
data-part="item"
|
|
210
|
+
:class="ui.item({ class: [props.ui?.item, ...isCarouselItem(item) ? [item.ui?.item, item.class] : []] })"
|
|
211
211
|
>
|
|
212
212
|
<slot :item="item" :index="index"></slot>
|
|
213
213
|
</div>
|
|
214
214
|
</div>
|
|
215
215
|
</div>
|
|
216
216
|
|
|
217
|
-
<div v-if="props.arrows || props.dots" :class="ui.controls({ class: props.ui?.controls })"
|
|
218
|
-
<div v-if="props.arrows" :class="ui.arrows({ class: props.ui?.arrows })"
|
|
217
|
+
<div v-if="props.arrows || props.dots" data-part="controls" :class="ui.controls({ class: props.ui?.controls })">
|
|
218
|
+
<div v-if="props.arrows" data-part="arrows" :class="ui.arrows({ class: props.ui?.arrows })">
|
|
219
219
|
<Button
|
|
220
220
|
:disabled="!canScrollPrev"
|
|
221
221
|
:icon="prevIcon"
|
|
@@ -223,8 +223,8 @@ defineExpose({
|
|
|
223
223
|
variant="outline"
|
|
224
224
|
:aria-label="t('carousel.prev')"
|
|
225
225
|
v-bind="typeof props.prev === 'object' ? props.prev : void 0"
|
|
226
|
-
:class="ui.prev({ class: props.ui?.prev })"
|
|
227
226
|
data-part="prev"
|
|
227
|
+
:class="ui.prev({ class: props.ui?.prev })"
|
|
228
228
|
@click="scrollPrev"
|
|
229
229
|
/>
|
|
230
230
|
<Button
|
|
@@ -234,21 +234,21 @@ defineExpose({
|
|
|
234
234
|
variant="outline"
|
|
235
235
|
:aria-label="t('carousel.next')"
|
|
236
236
|
v-bind="typeof props.next === 'object' ? props.next : void 0"
|
|
237
|
-
:class="ui.next({ class: props.ui?.next })"
|
|
238
237
|
data-part="next"
|
|
238
|
+
:class="ui.next({ class: props.ui?.next })"
|
|
239
239
|
@click="scrollNext"
|
|
240
240
|
/>
|
|
241
241
|
</div>
|
|
242
242
|
|
|
243
|
-
<div v-if="props.dots" role="tablist" :aria-label="t('carousel.dots')" :class="ui.dots({ class: props.ui?.dots })"
|
|
243
|
+
<div v-if="props.dots" role="tablist" :aria-label="t('carousel.dots')" data-part="dots" :class="ui.dots({ class: props.ui?.dots })">
|
|
244
244
|
<template v-for="(_, index) in scrollSnaps" :key="index">
|
|
245
245
|
<button
|
|
246
246
|
type="button"
|
|
247
247
|
role="tab"
|
|
248
248
|
:aria-label="t('carousel.goto', { page: index + 1 })"
|
|
249
249
|
:aria-selected="selectedIndex === index"
|
|
250
|
-
:class="ui.dot({ class: props.ui?.dot, active: selectedIndex === index })"
|
|
251
250
|
data-part="dot"
|
|
251
|
+
:class="ui.dot({ class: props.ui?.dot, active: selectedIndex === index })"
|
|
252
252
|
:data-state="selectedIndex === index ? 'active' : void 0"
|
|
253
253
|
@click="scrollTo(index)"
|
|
254
254
|
></button>
|
|
@@ -57,46 +57,46 @@ function onUpdate(value) {
|
|
|
57
57
|
</script>
|
|
58
58
|
|
|
59
59
|
<template>
|
|
60
|
-
<Primitive :as="props.variant && props.variant !== 'list' ? Label : props.as" :class="ui.root({ class: [props.ui?.root, props.class] })"
|
|
61
|
-
<div :class="ui.container({ class: props.ui?.container })"
|
|
60
|
+
<Primitive :as="props.variant && props.variant !== 'list' ? Label : props.as" data-part="root" :class="ui.root({ class: [props.ui?.root, props.class] })">
|
|
61
|
+
<div data-part="container" :class="ui.container({ class: props.ui?.container })">
|
|
62
62
|
<CheckboxRoot
|
|
63
63
|
v-bind="{ id, ...rootProps, ...$attrs, ...ariaAttrs, name, disabled }"
|
|
64
64
|
v-model="modelValue"
|
|
65
|
-
:class="ui.base({ class: props.ui?.base })"
|
|
66
65
|
data-part="base"
|
|
66
|
+
:class="ui.base({ class: props.ui?.base })"
|
|
67
67
|
@update:model-value="onUpdate"
|
|
68
68
|
>
|
|
69
69
|
<template #default="{ modelValue }">
|
|
70
|
-
<CheckboxIndicator :class="ui.indicator({ class: props.ui?.indicator })"
|
|
70
|
+
<CheckboxIndicator data-part="indicator" :class="ui.indicator({ class: props.ui?.indicator })">
|
|
71
71
|
<Icon
|
|
72
72
|
v-if="modelValue === 'indeterminate'"
|
|
73
73
|
:name="props.indeterminateIcon || appConfig.ui.icons.minus"
|
|
74
|
-
:class="ui.icon({ class: props.ui?.icon })"
|
|
75
74
|
data-part="icon"
|
|
75
|
+
:class="ui.icon({ class: props.ui?.icon })"
|
|
76
76
|
/>
|
|
77
77
|
<Icon
|
|
78
78
|
v-else
|
|
79
79
|
:name="props.icon || appConfig.ui.icons.check"
|
|
80
|
-
:class="ui.icon({ class: props.ui?.icon })"
|
|
81
80
|
data-part="icon"
|
|
81
|
+
:class="ui.icon({ class: props.ui?.icon })"
|
|
82
82
|
/>
|
|
83
83
|
</CheckboxIndicator>
|
|
84
84
|
</template>
|
|
85
85
|
</CheckboxRoot>
|
|
86
86
|
</div>
|
|
87
|
-
<div v-if="props.label || !!slots.label || props.description || !!slots.description" :class="ui.wrapper({ class: props.ui?.wrapper })"
|
|
87
|
+
<div v-if="props.label || !!slots.label || props.description || !!slots.description" data-part="wrapper" :class="ui.wrapper({ class: props.ui?.wrapper })">
|
|
88
88
|
<component
|
|
89
89
|
:is="!props.variant || props.variant === 'list' ? Label : 'p'"
|
|
90
90
|
v-if="props.label || !!slots.label"
|
|
91
91
|
:for="id"
|
|
92
|
-
:class="ui.label({ class: props.ui?.label })"
|
|
93
92
|
data-part="label"
|
|
93
|
+
:class="ui.label({ class: props.ui?.label })"
|
|
94
94
|
>
|
|
95
95
|
<slot name="label" :label="props.label">
|
|
96
96
|
{{ props.label }}
|
|
97
97
|
</slot>
|
|
98
98
|
</component>
|
|
99
|
-
<p v-if="props.description || !!slots.description" :class="ui.description({ class: props.ui?.description })"
|
|
99
|
+
<p v-if="props.description || !!slots.description" data-part="description" :class="ui.description({ class: props.ui?.description })">
|
|
100
100
|
<slot name="description" :description="props.description">
|
|
101
101
|
{{ props.description }}
|
|
102
102
|
</slot>
|