@byyuurin/ui 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +5 -3
  3. package/dist/module.json +1 -1
  4. package/dist/module.mjs +2 -2
  5. package/dist/runtime/components/Accordion.vue +41 -41
  6. package/dist/runtime/components/Accordion.vue.d.ts +11 -7
  7. package/dist/runtime/components/Alert.vue +63 -63
  8. package/dist/runtime/components/Alert.vue.d.ts +4 -4
  9. package/dist/runtime/components/App.vue +11 -10
  10. package/dist/runtime/components/App.vue.d.ts +11 -7
  11. package/dist/runtime/components/Avatar.vue +29 -29
  12. package/dist/runtime/components/Avatar.vue.d.ts +4 -3
  13. package/dist/runtime/components/AvatarGroup.vue +4 -4
  14. package/dist/runtime/components/AvatarGroup.vue.d.ts +1 -1
  15. package/dist/runtime/components/Badge.vue +32 -32
  16. package/dist/runtime/components/Badge.vue.d.ts +2 -2
  17. package/dist/runtime/components/Breadcrumb.vue +49 -49
  18. package/dist/runtime/components/Breadcrumb.vue.d.ts +10 -6
  19. package/dist/runtime/components/Button.vue +52 -51
  20. package/dist/runtime/components/Button.vue.d.ts +1 -1
  21. package/dist/runtime/components/Calendar.vue +75 -77
  22. package/dist/runtime/components/Calendar.vue.d.ts +16 -12
  23. package/dist/runtime/components/Card.vue +41 -41
  24. package/dist/runtime/components/Card.vue.d.ts +1 -1
  25. package/dist/runtime/components/Carousel.vue +85 -66
  26. package/dist/runtime/components/Carousel.vue.d.ts +14 -10
  27. package/dist/runtime/components/Checkbox.vue +46 -46
  28. package/dist/runtime/components/Checkbox.vue.d.ts +4 -3
  29. package/dist/runtime/components/CheckboxGroup.vue +131 -0
  30. package/dist/runtime/components/CheckboxGroup.vue.d.ts +93 -0
  31. package/dist/runtime/components/Chip.vue +15 -15
  32. package/dist/runtime/components/Chip.vue.d.ts +2 -2
  33. package/dist/runtime/components/Collapsible.vue +14 -14
  34. package/dist/runtime/components/Collapsible.vue.d.ts +2 -2
  35. package/dist/runtime/components/Drawer.vue +76 -76
  36. package/dist/runtime/components/Drawer.vue.d.ts +6 -6
  37. package/dist/runtime/components/DropdownMenu.vue +28 -28
  38. package/dist/runtime/components/DropdownMenu.vue.d.ts +17 -9
  39. package/dist/runtime/components/DropdownMenuContent.vue +152 -153
  40. package/dist/runtime/components/DropdownMenuContent.vue.d.ts +11 -7
  41. package/dist/runtime/components/FieldGroup.vue +3 -3
  42. package/dist/runtime/components/FieldGroup.vue.d.ts +2 -2
  43. package/dist/runtime/components/Form.vue +9 -9
  44. package/dist/runtime/components/Form.vue.d.ts +13 -8
  45. package/dist/runtime/components/FormField.vue +39 -38
  46. package/dist/runtime/components/FormField.vue.d.ts +7 -2
  47. package/dist/runtime/components/Icon.vue +2 -2
  48. package/dist/runtime/components/Icon.vue.d.ts +1 -1
  49. package/dist/runtime/components/Input.vue +48 -48
  50. package/dist/runtime/components/Input.vue.d.ts +16 -12
  51. package/dist/runtime/components/InputNumber.vue +48 -50
  52. package/dist/runtime/components/InputNumber.vue.d.ts +128 -129
  53. package/dist/runtime/components/InputTags.vue +156 -0
  54. package/dist/runtime/components/InputTags.vue.d.ts +90 -0
  55. package/dist/runtime/components/Kbd.vue +3 -3
  56. package/dist/runtime/components/Kbd.vue.d.ts +2 -2
  57. package/dist/runtime/components/Link.vue +26 -25
  58. package/dist/runtime/components/Link.vue.d.ts +16 -6
  59. package/dist/runtime/components/LinkBase.vue +3 -3
  60. package/dist/runtime/components/LinkBase.vue.d.ts +2 -2
  61. package/dist/runtime/components/Marquee.vue +38 -0
  62. package/dist/runtime/components/Marquee.vue.d.ts +54 -0
  63. package/dist/runtime/components/Modal.vue +74 -74
  64. package/dist/runtime/components/Modal.vue.d.ts +6 -6
  65. package/dist/runtime/components/NavigationMenu.vue +243 -234
  66. package/dist/runtime/components/NavigationMenu.vue.d.ts +53 -14
  67. package/dist/runtime/components/OverlayProvider.vue +9 -9
  68. package/dist/runtime/components/Pagination.vue +47 -47
  69. package/dist/runtime/components/Pagination.vue.d.ts +4 -4
  70. package/dist/runtime/components/PinInput.vue +23 -23
  71. package/dist/runtime/components/PinInput.vue.d.ts +14 -10
  72. package/dist/runtime/components/Popover.vue +22 -22
  73. package/dist/runtime/components/Popover.vue.d.ts +11 -7
  74. package/dist/runtime/components/Progress.vue +25 -25
  75. package/dist/runtime/components/Progress.vue.d.ts +2 -2
  76. package/dist/runtime/components/RadioGroup.vue +50 -50
  77. package/dist/runtime/components/RadioGroup.vue.d.ts +13 -9
  78. package/dist/runtime/components/ScrollArea.vue +32 -32
  79. package/dist/runtime/components/ScrollArea.vue.d.ts +2 -2
  80. package/dist/runtime/components/Select.vue +299 -148
  81. package/dist/runtime/components/Select.vue.d.ts +103 -123
  82. package/dist/runtime/components/Separator.vue +30 -30
  83. package/dist/runtime/components/Separator.vue.d.ts +2 -2
  84. package/dist/runtime/components/Skeleton.vue +11 -11
  85. package/dist/runtime/components/Skeleton.vue.d.ts +2 -2
  86. package/dist/runtime/components/Slider.vue +25 -25
  87. package/dist/runtime/components/Slider.vue.d.ts +11 -7
  88. package/dist/runtime/components/Stepper.vue +116 -0
  89. package/dist/runtime/components/Stepper.vue.d.ts +83 -0
  90. package/dist/runtime/components/Switch.vue +30 -30
  91. package/dist/runtime/components/Switch.vue.d.ts +4 -3
  92. package/dist/runtime/components/Table.vue +188 -166
  93. package/dist/runtime/components/Table.vue.d.ts +27 -22
  94. package/dist/runtime/components/Tabs.vue +74 -74
  95. package/dist/runtime/components/Tabs.vue.d.ts +12 -8
  96. package/dist/runtime/components/Textarea.vue +47 -47
  97. package/dist/runtime/components/Textarea.vue.d.ts +16 -11
  98. package/dist/runtime/components/Timeline.vue +102 -0
  99. package/dist/runtime/components/Timeline.vue.d.ts +78 -0
  100. package/dist/runtime/components/Toast.vue +93 -93
  101. package/dist/runtime/components/Toast.vue.d.ts +5 -5
  102. package/dist/runtime/components/ToastProvider.vue +29 -29
  103. package/dist/runtime/components/ToastProvider.vue.d.ts +3 -3
  104. package/dist/runtime/components/Tooltip.vue +24 -25
  105. package/dist/runtime/components/Tooltip.vue.d.ts +2 -2
  106. package/dist/runtime/components/Tree.vue +241 -0
  107. package/dist/runtime/components/Tree.vue.d.ts +121 -0
  108. package/dist/runtime/composables/defineShortcuts.d.ts +1 -0
  109. package/dist/runtime/composables/defineShortcuts.js +44 -8
  110. package/dist/runtime/composables/useLocale.d.ts +12 -0
  111. package/dist/runtime/locale/en.d.ts +6 -0
  112. package/dist/runtime/locale/en.js +6 -0
  113. package/dist/runtime/locale/zh_tw.d.ts +6 -0
  114. package/dist/runtime/locale/zh_tw.js +6 -0
  115. package/dist/runtime/types/html.d.ts +8 -0
  116. package/dist/runtime/types/html.js +0 -0
  117. package/dist/runtime/types/index.d.ts +7 -0
  118. package/dist/runtime/types/index.js +7 -0
  119. package/dist/runtime/types/input.d.ts +5 -5
  120. package/dist/runtime/types/locale.d.ts +6 -0
  121. package/dist/runtime/types/unocss.d.ts +4 -4
  122. package/dist/runtime/types/utils.d.ts +9 -6
  123. package/dist/runtime/utils/index.d.ts +3 -3
  124. package/dist/runtime/utils/link.d.ts +2 -1
  125. package/dist/runtime/utils/link.js +40 -29
  126. package/dist/runtime/vue/components/Icon.vue +2 -2
  127. package/dist/runtime/vue/components/Icon.vue.d.ts +1 -1
  128. package/dist/runtime/vue/components/Link.vue +7 -12
  129. package/dist/runtime/vue/components/Link.vue.d.ts +11 -40
  130. package/dist/setup.d.mts +1 -1
  131. package/dist/shared/{ui.CzIlLITK.mjs → ui.9kQouwss.mjs} +5 -3
  132. package/dist/shared/{ui.DpbffTXs.d.mts → ui.D8Bg1HWt.d.mts} +2 -0
  133. package/dist/shared/{ui.DSyJHSTk.mjs → ui.DpkP12cX.mjs} +784 -84
  134. package/dist/unocss.mjs +1 -1
  135. package/dist/unplugin.d.mts +1 -1
  136. package/dist/unplugin.mjs +2 -2
  137. package/dist/vite.d.mts +1 -1
  138. package/dist/vite.mjs +2 -2
  139. package/package.json +29 -29
  140. package/vue-plugin.d.ts +5 -5
@@ -6,6 +6,7 @@ import type { PrimitiveProps } from 'reka-ui';
6
6
  import type { WatchOptions } from 'vue';
7
7
  import theme from '#build/ui/table';
8
8
  import type { ComponentBaseProps, ComponentUIProps } from '../types';
9
+ import type { TableHTMLAttributes } from '../types/html';
9
10
  import type { MaybeNull, StaticSlot } from '../types/utils';
10
11
  declare module '@tanstack/table-core' {
11
12
  interface ColumnMeta<TData extends RowData, TValue> {
@@ -42,7 +43,7 @@ export interface TableOptions<T extends TableData = TableData> extends Omit<Core
42
43
  renderFallbackValue?: CoreOptions<T>['renderFallbackValue'];
43
44
  }
44
45
  type ThemeVariants = VariantProps<typeof theme>;
45
- export interface TableProps<T extends TableData = TableData> extends ComponentBaseProps, TableOptions<T> {
46
+ export interface TableProps<T extends TableData = TableData> extends ComponentBaseProps, TableOptions<T>, /** @vue-ignore */ TableHTMLAttributes {
46
47
  /**
47
48
  * The element or component this component should render as.
48
49
  * @default "div"
@@ -186,8 +187,10 @@ export type TableSlots<T> = {
186
187
  'body-top': StaticSlot;
187
188
  'body-bottom': StaticSlot;
188
189
  } & DynamicHeaderSlots<T> & DynamicFooterSlots<T> & DynamicCellSlots<T>;
189
- declare const __VLS_export: <T extends TableData>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
190
- props: __VLS_PrettifyLocal<(TableProps<T> & {
190
+ declare const _default: typeof __VLS_export;
191
+ export default _default;
192
+ declare const __VLS_export: <T extends TableData>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
193
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<(TableProps<T> & {
191
194
  globalFilter?: string;
192
195
  columnFilters?: ColumnFiltersState;
193
196
  columnOrder?: ColumnOrderState;
@@ -202,20 +205,22 @@ declare const __VLS_export: <T extends TableData>(__VLS_props: NonNullable<Await
202
205
  expanded?: ExpandedState;
203
206
  pagination?: PaginationState;
204
207
  }) & {
205
- "onUpdate:globalFilter"?: ((value: string) => any) | undefined;
206
- "onUpdate:columnFilters"?: ((value: ColumnFiltersState) => any) | undefined;
207
- "onUpdate:columnOrder"?: ((value: ColumnOrderState) => any) | undefined;
208
- "onUpdate:columnVisibility"?: ((value: VisibilityState) => any) | undefined;
209
- "onUpdate:columnPinning"?: ((value: ColumnPinningState) => any) | undefined;
210
- "onUpdate:columnSizing"?: ((value: ColumnSizingState) => any) | undefined;
211
- "onUpdate:columnSizingInfo"?: ((value: ColumnSizingInfoState) => any) | undefined;
212
- "onUpdate:rowSelection"?: ((value: RowSelectionState) => any) | undefined;
213
- "onUpdate:rowPinning"?: ((value: RowPinningState) => any) | undefined;
214
- "onUpdate:sorting"?: ((value: SortingState) => any) | undefined;
215
- "onUpdate:grouping"?: ((value: GroupingState) => any) | undefined;
216
- "onUpdate:expanded"?: ((value: ExpandedState) => any) | undefined;
217
- "onUpdate:pagination"?: ((value: PaginationState) => any) | undefined;
218
- }> & import("vue").PublicProps;
208
+ "onUpdate:globalFilter"?: ((value: string | undefined) => any) | undefined;
209
+ "onUpdate:columnFilters"?: ((value: ColumnFiltersState | undefined) => any) | undefined;
210
+ "onUpdate:columnOrder"?: ((value: ColumnOrderState | undefined) => any) | undefined;
211
+ "onUpdate:columnVisibility"?: ((value: VisibilityState | undefined) => any) | undefined;
212
+ "onUpdate:columnPinning"?: ((value: ColumnPinningState | undefined) => any) | undefined;
213
+ "onUpdate:columnSizing"?: ((value: ColumnSizingState | undefined) => any) | undefined;
214
+ "onUpdate:columnSizingInfo"?: ((value: ColumnSizingInfoState | undefined) => any) | undefined;
215
+ "onUpdate:rowSelection"?: ((value: RowSelectionState | undefined) => any) | undefined;
216
+ "onUpdate:rowPinning"?: ((value: RowPinningState | undefined) => any) | undefined;
217
+ "onUpdate:sorting"?: ((value: SortingState | undefined) => any) | undefined;
218
+ "onUpdate:grouping"?: ((value: GroupingState | undefined) => any) | undefined;
219
+ "onUpdate:expanded"?: ((value: ExpandedState | undefined) => any) | undefined;
220
+ "onUpdate:pagination"?: ((value: PaginationState | undefined) => any) | undefined;
221
+ }> & (typeof globalThis extends {
222
+ __VLS_PROPS_FALLBACK: infer P;
223
+ } ? P : {});
219
224
  expose: (exposed: import("vue").ShallowUnwrapRef<{
220
225
  readonly $el: any;
221
226
  tableRef: import("vue").ShallowRef<MaybeNull<HTMLTableElement>, MaybeNull<HTMLTableElement>>;
@@ -223,12 +228,12 @@ declare const __VLS_export: <T extends TableData>(__VLS_props: NonNullable<Await
223
228
  }>) => void;
224
229
  attrs: any;
225
230
  slots: TableSlots<T>;
226
- emit: ((evt: "update:globalFilter", value: string) => void) & ((evt: "update:columnFilters", value: ColumnFiltersState) => void) & ((evt: "update:columnOrder", value: ColumnOrderState) => void) & ((evt: "update:columnVisibility", value: VisibilityState) => void) & ((evt: "update:columnPinning", value: ColumnPinningState) => void) & ((evt: "update:columnSizing", value: ColumnSizingState) => void) & ((evt: "update:columnSizingInfo", value: ColumnSizingInfoState) => void) & ((evt: "update:rowSelection", value: RowSelectionState) => void) & ((evt: "update:rowPinning", value: RowPinningState) => void) & ((evt: "update:sorting", value: SortingState) => void) & ((evt: "update:grouping", value: GroupingState) => void) & ((evt: "update:expanded", value: ExpandedState) => void) & ((evt: "update:pagination", value: PaginationState) => void);
231
+ emit: ((evt: "update:globalFilter", value: string | undefined) => void) & ((evt: "update:columnFilters", value: ColumnFiltersState | undefined) => void) & ((evt: "update:columnOrder", value: ColumnOrderState | undefined) => void) & ((evt: "update:columnVisibility", value: VisibilityState | undefined) => void) & ((evt: "update:columnPinning", value: ColumnPinningState | undefined) => void) & ((evt: "update:columnSizing", value: ColumnSizingState | undefined) => void) & ((evt: "update:columnSizingInfo", value: ColumnSizingInfoState | undefined) => void) & ((evt: "update:rowSelection", value: RowSelectionState | undefined) => void) & ((evt: "update:rowPinning", value: RowPinningState | undefined) => void) & ((evt: "update:sorting", value: SortingState | undefined) => void) & ((evt: "update:grouping", value: GroupingState | undefined) => void) & ((evt: "update:expanded", value: ExpandedState | undefined) => void) & ((evt: "update:pagination", value: PaginationState | undefined) => void);
227
232
  }>) => import("vue").VNode & {
228
233
  __ctx?: Awaited<typeof __VLS_setup>;
229
234
  };
230
- declare const _default: typeof __VLS_export;
231
- export default _default;
232
- type __VLS_PrettifyLocal<T> = {
235
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
236
+ [K in keyof T]: T[K];
237
+ } : {
233
238
  [K in keyof T as K]: T[K];
234
- } & {};
239
+ }) & {};
@@ -43,78 +43,78 @@ defineExpose({
43
43
  </script>
44
44
 
45
45
  <template>
46
- <TabsRoot
47
- v-bind="rootProps"
48
- :model-value="props.modelValue"
49
- :default-value="props.defaultValue"
50
- :orientation="props.orientation"
51
- :activation-mode="props.activationMode"
52
- :class="ui.root({ class: [props.ui?.root, props.class] })"
53
- data-part="root"
54
- >
55
- <TabsList :class="ui.list({ class: props.ui?.list })" data-part="list">
56
- <TabsIndicator :class="ui.indicator({ class: props.ui?.indicator })" data-part="indicator" />
57
-
58
- <slot name="list-leading">
59
- </slot>
60
-
61
- <TabsTrigger
62
- v-for="(item, index) of items"
63
- :ref="(el) => triggersRef[index] = el"
64
- :key="index"
65
- :value="item.value ?? String(index)"
66
- :disabled="item.disabled"
67
- :class="ui.trigger({ class: [props.ui?.trigger, item.ui?.trigger] })"
68
- data-part="trigger"
69
- >
70
- <slot name="leading" :item="item" :index="index" :ui="ui">
71
- <Icon
72
- v-if="item.icon"
73
- :name="item.icon"
74
- :class="ui.leadingIcon({ class: [props.ui?.leadingIcon, item.ui?.leadingIcon] })"
75
- data-part="leading-icon"
76
- />
77
- <Avatar
78
- v-else-if="item.avatar"
79
- :size="item.ui?.leadingAvatarSize || props.ui?.leadingAvatarSize || ui.leadingAvatarSize()"
80
- v-bind="item.avatar"
81
- :class="ui.leadingAvatar({ class: [props.ui?.leadingAvatar, item.ui?.leadingAvatar] })"
82
- data-part="leading-avatar"
83
- />
84
- </slot>
85
-
86
- <span v-if="get(item, props.labelKey) || !!slots.default" :class="ui.label({ class: [props.ui?.label, item.ui?.label] })" data-part="label">
87
- <slot :item="item" :index="index">{{ get(item, props.labelKey) }}</slot>
88
- </span>
89
-
90
- <slot name="trailing" :item="item" :index="index" :ui="ui">
91
- <Badge
92
- v-if="item.badge !== void 0"
93
- color="neutral"
94
- variant="outline"
95
- :size="item.ui?.trailingBadgeSize || props.ui?.trailingBadgeSize || ui.trailingBadgeSize()"
96
- v-bind="typeof item.badge === 'string' || typeof item.badge === 'number' ? { label: item.badge } : item.badge"
97
- :class="ui.trailingBadge({ class: [props.ui?.trailingBadge, item.ui?.trailingBadge] })"
98
- data-part="trailing-badge"
99
- />
100
- </slot>
101
- </TabsTrigger>
102
-
103
- <slot name="list-trailing"></slot>
104
- </TabsList>
105
-
106
- <template v-if="props.content">
107
- <TabsContent
108
- v-for="(item, index) of items"
109
- :key="index"
110
- :value="item.value ?? String(index)"
111
- :class="ui.content({ class: [props.ui?.content, item.ui?.content] })"
112
- data-part="content"
113
- >
114
- <slot :name="item.slot || 'content'" :item="item" :index="index" :ui="ui">
115
- {{ item.content }}
116
- </slot>
117
- </TabsContent>
118
- </template>
119
- </TabsRoot>
46
+ <TabsRoot
47
+ v-bind="rootProps"
48
+ :model-value="props.modelValue"
49
+ :default-value="props.defaultValue"
50
+ :orientation="props.orientation"
51
+ :activation-mode="props.activationMode"
52
+ :class="ui.root({ class: [props.ui?.root, props.class] })"
53
+ data-part="root"
54
+ >
55
+ <TabsList :class="ui.list({ class: props.ui?.list })" data-part="list">
56
+ <TabsIndicator :class="ui.indicator({ class: props.ui?.indicator })" data-part="indicator" />
57
+
58
+ <slot name="list-leading">
59
+ </slot>
60
+
61
+ <TabsTrigger
62
+ v-for="(item, index) of items"
63
+ :ref="(el) => triggersRef[index] = el"
64
+ :key="index"
65
+ :value="item.value ?? String(index)"
66
+ :disabled="item.disabled"
67
+ :class="ui.trigger({ class: [props.ui?.trigger, item.ui?.trigger] })"
68
+ data-part="trigger"
69
+ >
70
+ <slot name="leading" :item="item" :index="index" :ui="ui">
71
+ <Icon
72
+ v-if="item.icon"
73
+ :name="item.icon"
74
+ :class="ui.leadingIcon({ class: [props.ui?.leadingIcon, item.ui?.leadingIcon] })"
75
+ data-part="leadingIcon"
76
+ />
77
+ <Avatar
78
+ v-else-if="item.avatar"
79
+ :size="item.ui?.leadingAvatarSize || props.ui?.leadingAvatarSize || ui.leadingAvatarSize()"
80
+ v-bind="item.avatar"
81
+ :class="ui.leadingAvatar({ class: [props.ui?.leadingAvatar, item.ui?.leadingAvatar] })"
82
+ data-part="leadingAvatar"
83
+ />
84
+ </slot>
85
+
86
+ <span v-if="get(item, props.labelKey) || !!slots.default" :class="ui.label({ class: [props.ui?.label, item.ui?.label] })" data-part="label">
87
+ <slot :item="item" :index="index">{{ get(item, props.labelKey) }}</slot>
88
+ </span>
89
+
90
+ <slot name="trailing" :item="item" :index="index" :ui="ui">
91
+ <Badge
92
+ v-if="item.badge !== void 0"
93
+ color="neutral"
94
+ variant="outline"
95
+ :size="item.ui?.trailingBadgeSize || props.ui?.trailingBadgeSize || ui.trailingBadgeSize()"
96
+ v-bind="typeof item.badge === 'string' || typeof item.badge === 'number' ? { label: item.badge } : item.badge"
97
+ :class="ui.trailingBadge({ class: [props.ui?.trailingBadge, item.ui?.trailingBadge] })"
98
+ data-part="trailingBadge"
99
+ />
100
+ </slot>
101
+ </TabsTrigger>
102
+
103
+ <slot name="list-trailing"></slot>
104
+ </TabsList>
105
+
106
+ <template v-if="props.content">
107
+ <TabsContent
108
+ v-for="(item, index) of items"
109
+ :key="index"
110
+ :value="item.value ?? String(index)"
111
+ :class="ui.content({ class: [props.ui?.content, item.ui?.content] })"
112
+ data-part="content"
113
+ >
114
+ <slot :name="item.slot || 'content'" :item="item" :index="index" :ui="ui">
115
+ {{ item.content }}
116
+ </slot>
117
+ </TabsContent>
118
+ </template>
119
+ </TabsRoot>
120
120
  </template>
@@ -1,6 +1,6 @@
1
- import type { ComponentPublicInstance } from 'vue';
2
1
  import type { VariantProps } from '@byyuurin/ui-kit';
3
2
  import type { TabsRootEmits, TabsRootProps } from 'reka-ui';
3
+ import type { ComponentPublicInstance } from 'vue';
4
4
  import theme from '#build/ui/tabs';
5
5
  import type { AvatarProps, BadgeProps, ComponentBaseProps, ComponentStyler, ComponentUIProps, IconProps } from '../types';
6
6
  import type { DynamicSlots, GetItemKeys, StaticSlot } from '../types/utils';
@@ -77,10 +77,14 @@ export type TabsSlots<T extends TabsItem = TabsItem> = {
77
77
  index: number;
78
78
  ui: ComponentStyler<typeof theme>;
79
79
  }>;
80
- declare const __VLS_export: <T extends TabsItem>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
81
- props: __VLS_PrettifyLocal<TabsProps<T> & {
80
+ declare const _default: typeof __VLS_export;
81
+ export default _default;
82
+ declare const __VLS_export: <T extends TabsItem>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
83
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<TabsProps<T> & {
82
84
  "onUpdate:modelValue"?: ((payload: string | number) => any) | undefined;
83
- }> & import("vue").PublicProps;
85
+ }> & (typeof globalThis extends {
86
+ __VLS_PROPS_FALLBACK: infer P;
87
+ } ? P : {});
84
88
  expose: (exposed: import("vue").ShallowUnwrapRef<{
85
89
  triggersRef: import("vue").Ref<ComponentPublicInstance[], ComponentPublicInstance[]>;
86
90
  }>) => void;
@@ -90,8 +94,8 @@ declare const __VLS_export: <T extends TabsItem>(__VLS_props: NonNullable<Awaite
90
94
  }>) => import("vue").VNode & {
91
95
  __ctx?: Awaited<typeof __VLS_setup>;
92
96
  };
93
- declare const _default: typeof __VLS_export;
94
- export default _default;
95
- type __VLS_PrettifyLocal<T> = {
97
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
98
+ [K in keyof T]: T[K];
99
+ } : {
96
100
  [K in keyof T as K]: T[K];
97
- } & {};
101
+ }) & {};
@@ -125,51 +125,51 @@ defineExpose({
125
125
  </script>
126
126
 
127
127
  <template>
128
- <Primitive :as="props.as" :class="ui.root({ class: [props.ui?.root, props.class] })" data-part="root">
129
- <span v-if="isLeading || props.avatar || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })" data-part="leading">
130
- <slot name="leading" :ui="ui">
131
- <Icon
132
- v-if="isLeading && leadingIconName"
133
- :name="leadingIconName"
134
- :class="ui.leadingIcon({ class: props.ui?.leadingIcon })"
135
- data-part="leading-icon"
136
- />
137
- <Avatar
138
- v-else-if="props.avatar"
139
- :size="props.ui?.leadingAvatarSize || ui.leadingAvatarSize()"
140
- v-bind="props.avatar"
141
- :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })"
142
- data-part="leading-avatar"
143
- />
144
- </slot>
145
- </span>
146
-
147
- <textarea
148
- ref="textareaRef"
149
- :value="modelValue"
150
- :rows="props.rows"
151
- :placeholder="props.placeholder"
152
- :required="props.required"
153
- v-bind="{ id, name, disabled, ...$attrs, ...ariaAttrs }"
154
- :class="ui.base({ class: props.ui?.base })"
155
- data-part="base"
156
- @input="onInput"
157
- @blur="onBlur"
158
- @change="onChange"
159
- @focus="emitFormFocus"
160
- ></textarea>
161
-
162
- <slot :ui="ui"></slot>
163
-
164
- <span v-if="isTrailing || !!slots.trailing" :class="ui.trailing({ class: props.ui?.trailing })" data-part="trailing">
165
- <slot name="trailing" :ui="ui">
166
- <Icon
167
- v-if="trailingIconName"
168
- :name="trailingIconName"
169
- :class="ui.trailingIcon({ class: props.ui?.trailingIcon })"
170
- data-part="trailing-icon"
171
- />
172
- </slot>
173
- </span>
174
- </Primitive>
128
+ <Primitive :as="props.as" :class="ui.root({ class: [props.ui?.root, props.class] })" data-part="root">
129
+ <span v-if="isLeading || props.avatar || !!slots.leading" :class="ui.leading({ class: props.ui?.leading })" data-part="leading">
130
+ <slot name="leading" :ui="ui">
131
+ <Icon
132
+ v-if="isLeading && leadingIconName"
133
+ :name="leadingIconName"
134
+ :class="ui.leadingIcon({ class: props.ui?.leadingIcon })"
135
+ data-part="leadingIcon"
136
+ />
137
+ <Avatar
138
+ v-else-if="props.avatar"
139
+ :size="props.ui?.leadingAvatarSize || ui.leadingAvatarSize()"
140
+ v-bind="props.avatar"
141
+ :class="ui.leadingAvatar({ class: props.ui?.leadingAvatar })"
142
+ data-part="leadingAvatar"
143
+ />
144
+ </slot>
145
+ </span>
146
+
147
+ <textarea
148
+ ref="textareaRef"
149
+ :value="modelValue"
150
+ :rows="props.rows"
151
+ :placeholder="props.placeholder"
152
+ :required="props.required"
153
+ v-bind="{ id, name, disabled, ...$attrs, ...ariaAttrs }"
154
+ :class="ui.base({ class: props.ui?.base })"
155
+ data-part="base"
156
+ @input="onInput"
157
+ @blur="onBlur"
158
+ @change="onChange"
159
+ @focus="emitFormFocus"
160
+ ></textarea>
161
+
162
+ <slot :ui="ui"></slot>
163
+
164
+ <span v-if="isTrailing || !!slots.trailing" :class="ui.trailing({ class: props.ui?.trailing })" data-part="trailing">
165
+ <slot name="trailing" :ui="ui">
166
+ <Icon
167
+ v-if="trailingIconName"
168
+ :name="trailingIconName"
169
+ :class="ui.trailingIcon({ class: props.ui?.trailingIcon })"
170
+ data-part="trailingIcon"
171
+ />
172
+ </slot>
173
+ </span>
174
+ </Primitive>
175
175
  </template>
@@ -3,11 +3,12 @@ import type { PrimitiveProps } from 'reka-ui';
3
3
  import theme from '#build/ui/textarea';
4
4
  import type { UseComponentIconsProps } from '../composables/useComponentIcons';
5
5
  import type { ComponentBaseProps, ComponentStyler, ComponentUIProps } from '../types';
6
+ import type { TextareaHTMLAttributes } from '../types/html';
6
7
  import type { ModelModifiers } from '../types/input';
7
8
  import type { MaybeNull, StaticSlot } from '../types/utils';
8
9
  type TextareaValue = MaybeNull<string | number>;
9
10
  type ThemeVariants = VariantProps<typeof theme>;
10
- export interface TextareaProps<T extends TextareaValue = TextareaValue> extends ComponentBaseProps, UseComponentIconsProps {
11
+ export interface TextareaProps<T extends TextareaValue = TextareaValue> extends ComponentBaseProps, UseComponentIconsProps, /** @vue-ignore */ Omit<TextareaHTMLAttributes, 'name' | 'placeholder' | 'required' | 'autofocus' | 'disabled' | 'rows'> {
11
12
  /**
12
13
  * The element or component this component should render as.
13
14
  * @default "div"
@@ -35,7 +36,7 @@ export interface TextareaProps<T extends TextareaValue = TextareaValue> extends
35
36
  autoresizeDelay?: number;
36
37
  modelValue?: T;
37
38
  defaultValue?: T;
38
- modelModifiers?: ModelModifiers;
39
+ modelModifiers?: ModelModifiers<T>;
39
40
  ui?: ComponentUIProps<typeof theme>;
40
41
  }
41
42
  export interface TextareaEmits<T extends TextareaValue = TextareaValue> {
@@ -54,23 +55,27 @@ export interface TextareaSlots {
54
55
  ui: ComponentStyler<typeof theme>;
55
56
  }>;
56
57
  }
57
- declare const __VLS_export: <T extends TextareaValue>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
58
- props: __VLS_PrettifyLocal<TextareaProps<T> & {
59
- onChange?: ((event: Event) => any) | undefined;
58
+ declare const _default: typeof __VLS_export;
59
+ export default _default;
60
+ declare const __VLS_export: <T extends TextareaValue>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
61
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<TextareaProps<T> & {
60
62
  onBlur?: ((event: FocusEvent) => any) | undefined;
63
+ onChange?: ((event: Event) => any) | undefined;
61
64
  "onUpdate:modelValue"?: ((payload: TextareaValue) => any) | undefined;
62
- }> & import("vue").PublicProps;
65
+ }> & (typeof globalThis extends {
66
+ __VLS_PROPS_FALLBACK: infer P;
67
+ } ? P : {});
63
68
  expose: (exposed: import("vue").ShallowUnwrapRef<{
64
69
  textareaRef: import("vue").ShallowRef<MaybeNull<HTMLTextAreaElement>, MaybeNull<HTMLTextAreaElement>>;
65
70
  }>) => void;
66
71
  attrs: any;
67
72
  slots: TextareaSlots;
68
- emit: ((evt: "change", event: Event) => void) & ((evt: "blur", event: FocusEvent) => void) & ((evt: "update:modelValue", payload: TextareaValue) => void);
73
+ emit: ((evt: "blur", event: FocusEvent) => void) & ((evt: "change", event: Event) => void) & ((evt: "update:modelValue", payload: TextareaValue) => void);
69
74
  }>) => import("vue").VNode & {
70
75
  __ctx?: Awaited<typeof __VLS_setup>;
71
76
  };
72
- declare const _default: typeof __VLS_export;
73
- export default _default;
74
- type __VLS_PrettifyLocal<T> = {
77
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
78
+ [K in keyof T]: T[K];
79
+ } : {
75
80
  [K in keyof T as K]: T[K];
76
- } & {};
81
+ }) & {};
@@ -0,0 +1,102 @@
1
+ <script>
2
+ import theme from "#build/ui/timeline";
3
+ </script>
4
+
5
+ <script setup>
6
+ import { useVModel } from "@vueuse/core";
7
+ import { Primitive, Separator } from "reka-ui";
8
+ import { computed } from "vue";
9
+ import { useAppConfig } from "#imports";
10
+ import { cv, merge } from "../utils/style";
11
+ import Avatar from "./Avatar.vue";
12
+ const props = defineProps({
13
+ as: { type: null, required: false },
14
+ items: { type: Array, required: true },
15
+ size: { type: null, required: false },
16
+ color: { type: null, required: false },
17
+ orientation: { type: null, required: false, default: "vertical" },
18
+ defaultValue: { type: [String, Number], required: false },
19
+ modelValue: { type: [String, Number], required: false },
20
+ reverse: { type: Boolean, required: false },
21
+ ui: { type: null, required: false },
22
+ class: { type: [Object, String, Number, Boolean, null, Array], required: false, skipCheck: true }
23
+ });
24
+ const emit = defineEmits(["update:model-value"]);
25
+ const slots = defineSlots();
26
+ const modelValue = useVModel(props, "modelValue", emit);
27
+ const currentStepIndex = computed(() => {
28
+ const value = modelValue.value ?? props.defaultValue;
29
+ if (typeof value === "string")
30
+ return props.items.findIndex((item) => item.value === value) ?? -1;
31
+ if (props.reverse)
32
+ return value == null ? -1 : props.items.length - 1 - value;
33
+ return value ?? -1;
34
+ });
35
+ function getItemState(index) {
36
+ if (currentStepIndex.value === -1)
37
+ return void 0;
38
+ if (index === currentStepIndex.value)
39
+ return "active";
40
+ if (props.reverse)
41
+ return index > currentStepIndex.value ? "completed" : void 0;
42
+ return index < currentStepIndex.value ? "completed" : void 0;
43
+ }
44
+ const appConfig = useAppConfig();
45
+ const ui = computed(() => {
46
+ const styler = cv(merge(theme, appConfig.ui.timeline));
47
+ return styler(props);
48
+ });
49
+ </script>
50
+
51
+ <template>
52
+ <Primitive :as="props.as" :data-orientation="props.orientation" :class="ui.root({ class: [props.ui?.root, props.class] })" data-part="root">
53
+ <div
54
+ v-for="(item, index) in props.items"
55
+ :key="item.value ?? index"
56
+ :class="ui.item({ class: [props.ui?.item, item.ui?.item, item.class] })"
57
+ data-part="item"
58
+ :data-state="getItemState(index)"
59
+ >
60
+ <div :class="ui.container({ class: [props.ui?.container, item.ui?.container] })" data-part="container">
61
+ <Avatar
62
+ :size="props.size"
63
+ :icon="item.icon"
64
+ v-bind="typeof item.avatar === 'object' ? item.avatar : {}"
65
+ :ui="{
66
+ icon: ui.indicatorIcon({ class: props.ui?.indicatorIcon }),
67
+ fallback: ui.indicatorFallback({ class: props.ui?.indicatorFallback })
68
+ }"
69
+ :class="ui.indicator({ class: [props.ui?.indicator, item.ui?.indicator] })"
70
+ data-part="indicator"
71
+ >
72
+ <slot :name="item.slot ? `${item.slot}-indicator` : 'indicator'" :item="item"></slot>
73
+ </Avatar>
74
+
75
+ <Separator
76
+ v-if="index < items.length - 1"
77
+ :orientation="props.orientation"
78
+ :class="ui.separator({ class: [props.ui?.separator, item.ui?.separator] })"
79
+ data-part="separator"
80
+ />
81
+ </div>
82
+
83
+ <div :class="ui.wrapper({ class: [props.ui?.wrapper, item.ui?.wrapper] })" data-part="wrapper">
84
+ <div v-if="item.date" :class="ui.date({ class: [props.ui?.date, item.ui?.date] })" data-part="date">
85
+ <slot :name="item.slot ? `${item.slot}-date` : 'date'" :item="item">
86
+ {{ item.date }}
87
+ </slot>
88
+ </div>
89
+ <div v-if="item.title || !!slots.title" :class="ui.title({ class: [props.ui?.title, item.ui?.title] })" data-part="title">
90
+ <slot :name="item.slot ? `${item.slot}-title` : 'title'" :item="item">
91
+ {{ item.title }}
92
+ </slot>
93
+ </div>
94
+ <div v-if="item.description || !!slots.description" :class="ui.description({ class: [props.ui?.description, item.ui?.description] })" data-part="description">
95
+ <slot :name="item.slot ? `${item.slot}-description` : 'description'" :item="item">
96
+ {{ item.description }}
97
+ </slot>
98
+ </div>
99
+ </div>
100
+ </div>
101
+ </Primitive>
102
+ </template>
@@ -0,0 +1,78 @@
1
+ import type { VariantProps } from '@byyuurin/ui-kit';
2
+ import type { PrimitiveProps } from 'reka-ui';
3
+ import theme from '#build/ui/timeline';
4
+ import type { AvatarProps, ComponentBaseProps, ComponentUIProps, IconProps } from '../types';
5
+ import type { DynamicSlots, StaticSlot } from '../types/utils';
6
+ export interface TimelineItem {
7
+ date?: string;
8
+ title?: string;
9
+ description?: string;
10
+ icon?: IconProps['name'];
11
+ avatar?: AvatarProps;
12
+ value?: string | number;
13
+ slot?: string;
14
+ class?: ComponentBaseProps['class'];
15
+ ui?: Pick<ComponentUIProps<typeof theme>, 'item' | 'container' | 'indicator' | 'separator' | 'wrapper' | 'date' | 'title' | 'description'>;
16
+ [key: string]: any;
17
+ }
18
+ type ThemeVariants = VariantProps<typeof theme>;
19
+ export interface TimelineProps<T extends TimelineItem = TimelineItem> extends ComponentBaseProps {
20
+ /**
21
+ * The element or component this component should render as.
22
+ * @default "div"
23
+ */
24
+ as?: PrimitiveProps['as'];
25
+ items: T[];
26
+ /** @default "md" */
27
+ size?: ThemeVariants['size'];
28
+ /** @default "primary" */
29
+ color?: ThemeVariants['color'];
30
+ /**
31
+ * The orientation of the Timeline.
32
+ * @default "vertical"
33
+ */
34
+ orientation?: ThemeVariants['orientation'];
35
+ defaultValue?: string | number;
36
+ modelValue?: string | number;
37
+ reverse?: boolean;
38
+ ui?: ComponentUIProps<typeof theme>;
39
+ }
40
+ export interface TimelineEmits {
41
+ 'update:model-value': [value: string | number];
42
+ }
43
+ export type TimelineSlots<T extends TimelineItem = TimelineItem> = {
44
+ indicator: StaticSlot<{
45
+ item: T;
46
+ }>;
47
+ date: StaticSlot<{
48
+ item: T;
49
+ }>;
50
+ title: StaticSlot<{
51
+ item: T;
52
+ }>;
53
+ description: StaticSlot<{
54
+ item: T;
55
+ }>;
56
+ } & DynamicSlots<T, 'indicator' | 'date' | 'title' | 'description', {
57
+ item: T;
58
+ }, false>;
59
+ declare const _default: typeof __VLS_export;
60
+ export default _default;
61
+ declare const __VLS_export: <T extends TimelineItem>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
62
+ props: import("vue").PublicProps & __VLS_PrettifyLocal<TimelineProps<T> & {
63
+ "onUpdate:model-value"?: ((value: string | number) => any) | undefined;
64
+ }> & (typeof globalThis extends {
65
+ __VLS_PROPS_FALLBACK: infer P;
66
+ } ? P : {});
67
+ expose: (exposed: {}) => void;
68
+ attrs: any;
69
+ slots: TimelineSlots<T>;
70
+ emit: (evt: "update:model-value", value: string | number) => void;
71
+ }>) => import("vue").VNode & {
72
+ __ctx?: Awaited<typeof __VLS_setup>;
73
+ };
74
+ type __VLS_PrettifyLocal<T> = (T extends any ? {
75
+ [K in keyof T]: T[K];
76
+ } : {
77
+ [K in keyof T as K]: T[K];
78
+ }) & {};