@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.
Files changed (76) hide show
  1. package/README.md +3 -6
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +5 -4
  4. package/dist/runtime/components/Accordion.vue +9 -9
  5. package/dist/runtime/components/Alert.vue +9 -9
  6. package/dist/runtime/components/Avatar.vue +4 -4
  7. package/dist/runtime/components/AvatarGroup.vue +3 -3
  8. package/dist/runtime/components/Badge.vue +5 -5
  9. package/dist/runtime/components/Breadcrumb.vue +9 -9
  10. package/dist/runtime/components/Button.vue +5 -5
  11. package/dist/runtime/components/Calendar.vue +11 -11
  12. package/dist/runtime/components/Card.vue +6 -6
  13. package/dist/runtime/components/Carousel.vue +10 -10
  14. package/dist/runtime/components/Checkbox.vue +9 -9
  15. package/dist/runtime/components/CheckboxGroup.vue +4 -4
  16. package/dist/runtime/components/Chip.vue +2 -2
  17. package/dist/runtime/components/Collapsible.vue +2 -2
  18. package/dist/runtime/components/ContextMenuContent.vue +18 -18
  19. package/dist/runtime/components/Drawer.vue +9 -9
  20. package/dist/runtime/components/DropdownMenu.vue +2 -2
  21. package/dist/runtime/components/DropdownMenuContent.vue +19 -19
  22. package/dist/runtime/components/FieldGroup.vue +1 -1
  23. package/dist/runtime/components/FileUpload.vue +15 -15
  24. package/dist/runtime/components/Form.vue +1 -1
  25. package/dist/runtime/components/FormField.vue +9 -9
  26. package/dist/runtime/components/Input.vue +7 -7
  27. package/dist/runtime/components/InputNumber.vue +4 -4
  28. package/dist/runtime/components/InputTags.vue +12 -12
  29. package/dist/runtime/components/Kbd.vue +1 -1
  30. package/dist/runtime/components/Marquee.vue +2 -2
  31. package/dist/runtime/components/Modal.vue +9 -9
  32. package/dist/runtime/components/NavigationMenu.vue +40 -40
  33. package/dist/runtime/components/Pagination.vue +8 -8
  34. package/dist/runtime/components/PinInput.vue +2 -2
  35. package/dist/runtime/components/Popover.vue +2 -2
  36. package/dist/runtime/components/Progress.vue +6 -6
  37. package/dist/runtime/components/RadioGroup.vue +10 -10
  38. package/dist/runtime/components/ScrollArea.vue +7 -7
  39. package/dist/runtime/components/Select.vue +31 -31
  40. package/dist/runtime/components/Separator.vue +7 -7
  41. package/dist/runtime/components/Skeleton.vue +1 -1
  42. package/dist/runtime/components/Slider.vue +4 -4
  43. package/dist/runtime/components/Stepper.vue +12 -12
  44. package/dist/runtime/components/Switch.vue +10 -10
  45. package/dist/runtime/components/Table.vue +22 -22
  46. package/dist/runtime/components/Tabs.vue +9 -9
  47. package/dist/runtime/components/Textarea.vue +7 -7
  48. package/dist/runtime/components/Timeline.vue +9 -9
  49. package/dist/runtime/components/Toast.vue +10 -9
  50. package/dist/runtime/components/ToastProvider.vue +2 -2
  51. package/dist/runtime/components/Tooltip.vue +4 -4
  52. package/dist/runtime/components/Tree.vue +10 -10
  53. package/dist/runtime/composables/defineShortcuts.js +1 -1
  54. package/dist/runtime/composables/useOverlay.d.ts +3 -1
  55. package/dist/runtime/utils/style.d.ts +10 -10
  56. package/dist/runtime/vue/overrides/none/Link.vue +119 -0
  57. package/dist/runtime/vue/overrides/none/Link.vue.d.ts +79 -0
  58. package/dist/runtime/vue/{components → overrides/vue-router}/Link.vue +42 -42
  59. package/dist/runtime/vue/{components → overrides/vue-router}/Link.vue.d.ts +8 -8
  60. package/dist/runtime/vue/{stubs.d.ts → stubs/base.d.ts} +1 -2
  61. package/dist/runtime/vue/{stubs.js → stubs/base.js} +1 -2
  62. package/dist/runtime/vue/stubs/none.d.ts +56 -0
  63. package/dist/runtime/vue/stubs/none.js +48 -0
  64. package/dist/runtime/vue/stubs/vue-router.d.ts +2 -0
  65. package/dist/runtime/vue/stubs/vue-router.js +2 -0
  66. package/dist/setup.d.mts +1 -1
  67. package/dist/shared/{ui.Cakz_vv4.mjs → ui.B6u-xvto.mjs} +42 -44
  68. package/dist/shared/{ui.CGCKYv7g.d.mts → ui.Cec0yP1b.d.mts} +11 -2
  69. package/dist/shared/{ui.DYMXCXO6.mjs → ui.Dy7aH7sf.mjs} +12 -6
  70. package/dist/unocss.d.mts +20 -2
  71. package/dist/unocss.mjs +25 -2
  72. package/dist/unplugin.d.mts +1 -1
  73. package/dist/unplugin.mjs +68 -25
  74. package/dist/vite.d.mts +1 -1
  75. package/dist/vite.mjs +4 -3
  76. 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@byyuurin/ui",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "configKey": "ui",
5
5
  "compatibility": {
6
6
  "nuxt": ">=3.16.2"
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.Cakz_vv4.mjs';
4
- import { d as defaultOptions, r as resolveColors, g as getDefaultUIConfig } from './shared/ui.DYMXCXO6.mjs';
5
- import 'node:process';
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 || {}, getDefaultUIConfig(options.theme.colors));
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] })" data-part="root">
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] })" data-part="header">
49
- <AccordionTrigger :class="ui.trigger({ class: [props.ui?.trigger, item.ui?.trigger], disabled: item.disabled })" data-part="trigger">
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] })" data-part="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] })" data-part="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] })" data-part="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] })" data-part="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 })" data-part="wrapper">
67
- <div v-if="props.title || slots.title" :class="ui.title({ class: props.ui?.title })" data-part="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 })" data-part="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 })" data-part="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' })" data-part="actions">
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 })" data-part="icon" />
89
- <span v-else :class="ui.fallback({ class: props.ui?.fallback })" data-part="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>&nbsp;</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] })" data-part="root">
58
- <Avatar v-if="hiddenCount > 0" :text="`+${hiddenCount}`" :class="ui.base({ class: props.ui?.base })" data-part="base" />
59
- <component :is="avatar" v-for="(avatar, index) in visibleAvatars" :key="index" :class="ui.base({ class: props.ui?.base })" data-part="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] })" data-part="base">
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 })" data-part="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] })" data-part="root">
36
- <ol :class="ui.list({ class: props.ui?.list })" data-part="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] })" data-part="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] })" data-part="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] })" data-part="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] })" data-part="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 })" data-part="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 })" data-part="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 })" data-part="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 })" data-part="gridWeekDaysRow">
121
- <Calendar.HeadCell v-for="day in weekDays" :key="day" :class="ui.headCell({ class: props.ui?.headCell })" data-part="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 })" data-part="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] })" data-part="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 })" data-part="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 })" data-part="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 })" data-part="viewport">
204
- <div :class="ui.container({ class: props.ui?.container })" data-part="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 })" data-part="controls">
218
- <div v-if="props.arrows" :class="ui.arrows({ class: props.ui?.arrows })" data-part="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 })" data-part="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] })" data-part="root">
61
- <div :class="ui.container({ class: props.ui?.container })" data-part="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 })" data-part="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 })" data-part="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 })" data-part="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>