@polymarbot/nuxt-layer-shadcn-ui 0.1.9 → 0.2.0-w

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 (103) hide show
  1. package/app/assets/styles/colors.css +10 -10
  2. package/app/assets/styles/globals.css +1 -0
  3. package/app/assets/styles/z-index.css +27 -0
  4. package/app/components/ui/Accordion/index.stories.ts +60 -56
  5. package/app/components/ui/Accordion/index.vue +1 -1
  6. package/app/components/ui/AdminLayout/SidebarMenus.vue +0 -2
  7. package/app/components/ui/AdminLayout/index.stories.ts +9 -8
  8. package/app/components/ui/Alert/index.stories.ts +28 -26
  9. package/app/components/ui/Alert/index.vue +6 -6
  10. package/app/components/ui/Alert/types.ts +2 -1
  11. package/app/components/ui/AlertDialog/index.stories.ts +85 -50
  12. package/app/components/ui/AsyncDataTable/index.stories.ts +53 -36
  13. package/app/components/ui/Avatar/index.stories.ts +56 -51
  14. package/app/components/ui/Avatar/index.vue +1 -1
  15. package/app/components/ui/Avatar/types.ts +5 -2
  16. package/app/components/ui/Badge/index.stories.ts +41 -41
  17. package/app/components/ui/Badge/index.vue +1 -1
  18. package/app/components/ui/Badge/types.ts +3 -1
  19. package/app/components/ui/Breadcrumb/index.stories.ts +48 -37
  20. package/app/components/ui/Breadcrumb/index.vue +1 -1
  21. package/app/components/ui/Button/index.stories.ts +94 -90
  22. package/app/components/ui/Button/index.vue +1 -1
  23. package/app/components/ui/Button/types.ts +4 -1
  24. package/app/components/ui/ButtonGroup/index.stories.ts +61 -49
  25. package/app/components/ui/Card/index.stories.ts +55 -47
  26. package/app/components/ui/Card/index.vue +1 -1
  27. package/app/components/ui/Checkbox/index.stories.ts +69 -46
  28. package/app/components/ui/Checkbox/index.vue +1 -1
  29. package/app/components/ui/CopyButton/index.stories.ts +89 -31
  30. package/app/components/ui/DataTable/index.stories.ts +218 -168
  31. package/app/components/ui/DataTable/index.vue +1 -1
  32. package/app/components/ui/DatePicker/index.stories.ts +131 -37
  33. package/app/components/ui/DateRangePicker/index.stories.ts +107 -33
  34. package/app/components/ui/Divider/index.stories.ts +46 -24
  35. package/app/components/ui/Divider/index.vue +1 -1
  36. package/app/components/ui/Drawer/index.stories.ts +131 -81
  37. package/app/components/ui/Drawer/index.vue +1 -7
  38. package/app/components/ui/Drawer/types.ts +1 -1
  39. package/app/components/ui/Dropdown/index.stories.ts +134 -89
  40. package/app/components/ui/Dropdown/index.vue +5 -1
  41. package/app/components/ui/Dropdown/types.ts +1 -1
  42. package/app/components/ui/FormItem/index.stories.ts +87 -43
  43. package/app/components/ui/FormItem/index.vue +1 -1
  44. package/app/components/ui/Help/index.stories.ts +46 -35
  45. package/app/components/ui/Icon/index.stories.ts +41 -43
  46. package/app/components/ui/Input/index.stories.ts +95 -41
  47. package/app/components/ui/Input/index.vue +1 -1
  48. package/app/components/ui/InputCurrency/index.stories.ts +89 -49
  49. package/app/components/ui/InputNumber/index.stories.ts +93 -29
  50. package/app/components/ui/InputNumber/index.vue +1 -1
  51. package/app/components/ui/InputOtp/index.stories.ts +6 -7
  52. package/app/components/ui/InputOtp/index.vue +1 -1
  53. package/app/components/ui/InputPercent/index.stories.ts +6 -7
  54. package/app/components/ui/InputRange/index.stories.ts +6 -7
  55. package/app/components/ui/Loading/index.stories.ts +19 -19
  56. package/app/components/ui/Markdown/index.stories.ts +7 -10
  57. package/app/components/ui/Modal/index.stories.ts +135 -80
  58. package/app/components/ui/Modal/index.vue +1 -6
  59. package/app/components/ui/Modal/types.ts +1 -1
  60. package/app/components/ui/ModalContent/index.stories.ts +54 -26
  61. package/app/components/ui/ModalContent/index.vue +2 -2
  62. package/app/components/ui/PageCard/index.stories.ts +177 -67
  63. package/app/components/ui/Pagination/index.stories.ts +68 -51
  64. package/app/components/ui/Pagination/index.vue +2 -2
  65. package/app/components/ui/Popover/index.stories.ts +47 -45
  66. package/app/components/ui/Popover/index.vue +1 -1
  67. package/app/components/ui/Qrcode/index.stories.ts +42 -34
  68. package/app/components/ui/RadioCardGroup/index.stories.ts +23 -32
  69. package/app/components/ui/RadioCardGroup/index.vue +1 -1
  70. package/app/components/ui/RadioGroup/index.stories.ts +123 -0
  71. package/app/components/ui/RadioGroup/index.vue +73 -0
  72. package/app/components/ui/RadioGroup/types.ts +13 -0
  73. package/app/components/ui/ScrollArea/index.stories.ts +69 -37
  74. package/app/components/ui/ScrollArea/index.vue +1 -1
  75. package/app/components/ui/SearchSelect/index.stories.ts +104 -66
  76. package/app/components/ui/Select/index.stories.ts +152 -98
  77. package/app/components/ui/Select/index.vue +3 -3
  78. package/app/components/ui/Skeleton/index.stories.ts +27 -30
  79. package/app/components/ui/Skeleton/index.vue +1 -1
  80. package/app/components/ui/Slider/index.stories.ts +73 -31
  81. package/app/components/ui/Slider/index.vue +1 -1
  82. package/app/components/ui/Surface/index.stories.ts +47 -21
  83. package/app/components/ui/Surface/index.vue +39 -28
  84. package/app/components/ui/Surface/types.ts +2 -2
  85. package/app/components/ui/Switch/index.stories.ts +6 -7
  86. package/app/components/ui/Switch/index.vue +1 -1
  87. package/app/components/ui/Tabs/index.stories.ts +103 -61
  88. package/app/components/ui/Tabs/index.vue +1 -1
  89. package/app/components/ui/Tag/index.stories.ts +42 -25
  90. package/app/components/ui/Tag/index.vue +39 -28
  91. package/app/components/ui/Tag/types.ts +2 -2
  92. package/app/components/ui/Textarea/index.stories.ts +73 -9
  93. package/app/components/ui/Textarea/index.vue +1 -1
  94. package/app/components/ui/Toast/index.stories.ts +71 -18
  95. package/app/components/ui/Toast/index.vue +1 -1
  96. package/app/components/ui/Tooltip/index.stories.ts +45 -38
  97. package/app/components/ui/Tooltip/index.vue +1 -1
  98. package/app/components/ui/WebLink/index.stories.ts +76 -41
  99. package/app/components/ui/WebLink/index.vue +1 -1
  100. package/package.json +2 -2
  101. package/app/components/ui/Radio/index.stories.ts +0 -71
  102. package/app/components/ui/Radio/index.vue +0 -10
  103. package/app/components/ui/Radio/types.ts +0 -3
@@ -1,10 +1,7 @@
1
1
  import type { Meta, StoryObj } from '@storybook/vue3'
2
2
  import type { AsyncDataTableBatchAction, AsyncDataTableFetchParams, AsyncDataTableFetchResult } from './types'
3
3
  import type { DataTableColumn } from '../DataTable/types'
4
- import AsyncDataTableRaw from './index.vue'
5
-
6
- // Cast generic component for Storybook compatibility
7
- const AsyncDataTable = AsyncDataTableRaw as any
4
+ import AsyncDataTable from './index.vue'
8
5
 
9
6
  interface User {
10
7
  id: number
@@ -59,50 +56,70 @@ function mockFetch (params: AsyncDataTableFetchParams): Promise<AsyncDataTableFe
59
56
  })
60
57
  }
61
58
 
59
+ const batchActions: AsyncDataTableBatchAction<User>[] = [
60
+ {
61
+ label: 'Delete',
62
+ icon: 'trash-2',
63
+ color: 'danger',
64
+ action: items => console.debug(`Delete ${items.length} items`),
65
+ },
66
+ {
67
+ label: 'Export',
68
+ icon: 'download',
69
+ action: items => console.debug(`Export ${items.length} items`),
70
+ },
71
+ ]
72
+
62
73
  const meta = {
63
74
  title: 'UI/AsyncDataTable',
64
- component: AsyncDataTable,
65
- } satisfies Meta
75
+ component: AsyncDataTable as any,
76
+ argTypes: {
77
+ columns: { control: 'object' },
78
+ fetchMethod: { control: false },
79
+ autoFetch: { control: 'boolean' },
80
+ data: { control: 'object' },
81
+ filters: { control: 'object' },
82
+ showTopToolbar: { control: 'boolean' },
83
+ showBottomToolbar: { control: 'boolean' },
84
+ pageSizeOptions: { control: 'object' },
85
+ showPagination: { control: 'boolean' },
86
+ selectable: { control: 'boolean' },
87
+ batchActions: { control: 'object' },
88
+ selection: { control: 'object' },
89
+ },
90
+ args: {
91
+ columns,
92
+ fetchMethod: mockFetch,
93
+ autoFetch: true,
94
+ data: [],
95
+ filters: undefined,
96
+ showTopToolbar: undefined,
97
+ showBottomToolbar: true,
98
+ pageSizeOptions: [ 10, 20, 50 ],
99
+ showPagination: true,
100
+ selectable: false,
101
+ batchActions: [],
102
+ selection: [],
103
+ },
104
+ render: args => ({
105
+ components: { AsyncDataTable },
106
+ setup: () => ({ args }),
107
+ template: '<AsyncDataTable v-bind="args" />',
108
+ }),
109
+ } satisfies Meta<typeof AsyncDataTable>
66
110
 
67
111
  export default meta
68
112
  type Story = StoryObj<typeof meta>
69
113
 
70
114
  /** Async fetch with pagination, sorting, page size selector */
71
- export const Default: Story = {
72
- render: () => ({
73
- components: { AsyncDataTable },
74
- setup: () => ({ columns, mockFetch }),
75
- template: `
76
- <AsyncDataTable
77
- :columns="columns"
78
- :fetchMethod="mockFetch"
79
- :pageSizeOptions="[10, 20, 50]"
80
- />
81
- `,
82
- }),
83
- }
115
+ export const Default: Story = {}
84
116
 
85
117
  /** Batch actions with row selection and dual toolbars */
86
- export const BatchActions: Story = {
118
+ export const WithBatchActions: Story = {
87
119
  render: () => ({
88
120
  components: { AsyncDataTable },
89
121
  setup () {
90
122
  const selection = ref<User[]>([])
91
-
92
- const batchActions: AsyncDataTableBatchAction<User>[] = [
93
- {
94
- label: 'Delete',
95
- icon: 'trash-2',
96
- color: 'danger',
97
- action: items => console.debug(`Delete ${items.length} items`),
98
- },
99
- {
100
- label: 'Export',
101
- icon: 'download',
102
- action: items => console.debug(`Export ${items.length} items`),
103
- },
104
- ]
105
-
106
123
  return { columns, mockFetch, selection, batchActions }
107
124
  },
108
125
  template: `
@@ -121,7 +138,7 @@ export const BatchActions: Story = {
121
138
  }
122
139
 
123
140
  /** Custom toolbar slot with action button */
124
- export const CustomToolbar: Story = {
141
+ export const WithCustomToolbar: Story = {
125
142
  render: () => ({
126
143
  components: { AsyncDataTable },
127
144
  setup: () => ({ columns, mockFetch }),
@@ -1,11 +1,9 @@
1
1
  import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import type { AvatarShape, AvatarSize } from './types'
2
3
  import Avatar from './index.vue'
3
4
 
4
- type AvatarSize = 'small' | 'normal' | 'large' | 'xlarge'
5
- type AvatarShape = 'circle' | 'square'
6
-
7
- const sizes: AvatarSize[] = [ 'small', 'normal', 'large', 'xlarge' ]
8
- const shapes: AvatarShape[] = [ 'circle', 'square' ]
5
+ const sizes = [ 'small', 'normal', 'large', 'xlarge' ] as const satisfies readonly AvatarSize[]
6
+ const shapes = [ 'circle', 'square' ] as const satisfies readonly AvatarShape[]
9
7
 
10
8
  const meta = {
11
9
  title: 'UI/Avatar',
@@ -20,64 +18,71 @@ const meta = {
20
18
  args: {
21
19
  size: 'normal',
22
20
  shape: 'circle',
21
+ image: '',
23
22
  label: 'AB',
23
+ fallbackLabel: '',
24
24
  },
25
+ render: args => ({
26
+ components: { Avatar },
27
+ setup: () => ({ args }),
28
+ template: '<Avatar v-bind="args" />',
29
+ }),
25
30
  } satisfies Meta<typeof Avatar>
26
31
 
27
32
  export default meta
28
33
  type Story = StoryObj<typeof meta>
29
34
 
30
- export const Default: Story = {
31
- render: args => ({
35
+ export const Default: Story = {}
36
+
37
+ export const Sizes: Story = {
38
+ render: () => ({
32
39
  components: { Avatar },
33
- setup: () => ({ args, sizes, shapes }),
40
+ setup: () => ({ sizes }),
34
41
  template: `
35
- <div class="space-y-10">
36
- <!-- Controlled -->
37
- <section>
38
- <h3 class="mb-4 text-lg font-medium">Controlled</h3>
39
- <Avatar v-bind="args" />
40
- </section>
41
-
42
- <!-- Sizes -->
43
- <section>
44
- <h3 class="mb-4 text-lg font-medium">Sizes</h3>
45
- <div class="flex items-end gap-4">
46
- <div v-for="s in sizes" :key="s" class="flex flex-col items-center gap-2">
47
- <Avatar :size="s" label="AB" />
48
- <span class="text-xs text-muted-foreground">{{ s }}</span>
49
- </div>
50
- </div>
51
- </section>
42
+ <div class="flex items-end gap-4">
43
+ <div v-for="s in sizes" :key="s" class="flex flex-col items-center gap-2">
44
+ <Avatar :size="s" label="AB" />
45
+ <span class="text-xs text-muted-foreground">{{ s }}</span>
46
+ </div>
47
+ </div>
48
+ `,
49
+ }),
50
+ }
52
51
 
53
- <!-- Shapes -->
54
- <section>
55
- <h3 class="mb-4 text-lg font-medium">Shapes</h3>
56
- <div class="flex items-center gap-4">
57
- <div v-for="sh in shapes" :key="sh" class="flex flex-col items-center gap-2">
58
- <Avatar :shape="sh" label="AB" size="large" />
59
- <span class="text-xs text-muted-foreground">{{ sh }}</span>
60
- </div>
61
- </div>
62
- </section>
52
+ export const Shapes: Story = {
53
+ render: () => ({
54
+ components: { Avatar },
55
+ setup: () => ({ shapes }),
56
+ template: `
57
+ <div class="flex items-center gap-4">
58
+ <div v-for="sh in shapes" :key="sh" class="flex flex-col items-center gap-2">
59
+ <Avatar :shape="sh" label="AB" size="large" />
60
+ <span class="text-xs text-muted-foreground">{{ sh }}</span>
61
+ </div>
62
+ </div>
63
+ `,
64
+ }),
65
+ }
63
66
 
64
- <!-- With Image -->
65
- <section>
66
- <h3 class="mb-4 text-lg font-medium">With Image</h3>
67
- <div class="flex items-center gap-4">
68
- <Avatar image="https://i.pravatar.cc/150?u=1" size="large" />
69
- <Avatar image="https://i.pravatar.cc/150?u=2" size="large" shape="square" />
70
- </div>
71
- </section>
67
+ export const WithImage: Story = {
68
+ render: () => ({
69
+ components: { Avatar },
70
+ template: `
71
+ <div class="flex items-center gap-4">
72
+ <Avatar image="https://i.pravatar.cc/150?u=1" size="large" />
73
+ <Avatar image="https://i.pravatar.cc/150?u=2" size="large" shape="square" />
74
+ </div>
75
+ `,
76
+ }),
77
+ }
72
78
 
73
- <!-- Fallback Label -->
74
- <section>
75
- <h3 class="mb-4 text-lg font-medium">Fallback Label</h3>
76
- <div class="flex items-center gap-4">
77
- <Avatar label="John Doe" fallback-label="JD" />
78
- <Avatar fallback-label="??" />
79
- </div>
80
- </section>
79
+ export const FallbackLabel: Story = {
80
+ render: () => ({
81
+ components: { Avatar },
82
+ template: `
83
+ <div class="flex items-center gap-4">
84
+ <Avatar label="John Doe" fallback-label="JD" />
85
+ <Avatar fallback-label="??" />
81
86
  </div>
82
87
  `,
83
88
  }),
@@ -3,7 +3,7 @@ import {
3
3
  Avatar as ShadcnAvatar,
4
4
  AvatarFallback,
5
5
  AvatarImage,
6
- } from '@polymarbot/nuxt-layer-shadcn-ui/app/components/shadcn/avatar'
6
+ } from '../../shadcn/avatar'
7
7
  import type { AvatarProps } from './types'
8
8
 
9
9
  const props = withDefaults(defineProps<AvatarProps>(), {
@@ -1,8 +1,11 @@
1
+ export type AvatarSize = 'small' | 'normal' | 'large' | 'xlarge'
2
+ export type AvatarShape = 'circle' | 'square'
3
+
1
4
  export interface AvatarProps {
2
5
  image?: string
3
6
  label?: string
4
7
  fallbackLabel?: string
5
- size?: 'small' | 'normal' | 'large' | 'xlarge'
6
- shape?: 'circle' | 'square'
8
+ size?: AvatarSize
9
+ shape?: AvatarShape
7
10
  class?: ClassValue
8
11
  }
@@ -1,10 +1,9 @@
1
1
  import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import type { BadgeVariant } from './types'
2
3
  import Icon from '../Icon/index.vue'
3
4
  import Badge from './index.vue'
4
5
 
5
- type BadgeVariant = 'default' | 'secondary' | 'outline' | 'destructive'
6
-
7
- const variants: BadgeVariant[] = [ 'default', 'secondary', 'outline', 'destructive' ]
6
+ const variants = [ 'default', 'secondary', 'outline', 'destructive' ] as const satisfies readonly BadgeVariant[]
8
7
 
9
8
  const meta = {
10
9
  title: 'UI/Badge',
@@ -15,52 +14,53 @@ const meta = {
15
14
  args: {
16
15
  variant: 'default',
17
16
  },
17
+ render: args => ({
18
+ components: { Badge },
19
+ setup: () => ({ args }),
20
+ template: '<Badge v-bind="args">Badge</Badge>',
21
+ }),
18
22
  } satisfies Meta<typeof Badge>
19
23
 
20
24
  export default meta
21
25
  type Story = StoryObj<typeof meta>
22
26
 
23
- export const Default: Story = {
24
- render: args => ({
25
- components: { Badge, Icon },
26
- setup: () => ({ args, variants }),
27
- template: `
28
- <div class="space-y-10">
29
- <!-- Controlled -->
30
- <section>
31
- <h3 class="mb-4 text-lg font-medium">Controlled</h3>
32
- <Badge v-bind="args">Badge</Badge>
33
- </section>
27
+ export const Default: Story = {}
34
28
 
35
- <!-- Variants -->
36
- <section>
37
- <h3 class="mb-4 text-lg font-medium">Variants</h3>
38
- <div class="flex flex-wrap items-center gap-3">
39
- <Badge v-for="v in variants" :key="v" :variant="v">{{ v }}</Badge>
40
- </div>
41
- </section>
29
+ export const Variants: Story = {
30
+ render: () => ({
31
+ components: { Badge },
32
+ setup: () => ({ variants }),
33
+ template: `
34
+ <div class="flex flex-wrap items-center gap-3">
35
+ <Badge v-for="v in variants" :key="v" :variant="v">{{ v }}</Badge>
36
+ </div>
37
+ `,
38
+ }),
39
+ }
42
40
 
43
- <!-- Numeric -->
44
- <section>
45
- <h3 class="mb-4 text-lg font-medium">Numeric</h3>
46
- <div class="flex flex-wrap items-center gap-3">
47
- <Badge>1</Badge>
48
- <Badge variant="secondary">42</Badge>
49
- <Badge variant="destructive">99+</Badge>
50
- <Badge variant="outline">0</Badge>
51
- </div>
52
- </section>
41
+ export const Numeric: Story = {
42
+ render: () => ({
43
+ components: { Badge },
44
+ template: `
45
+ <div class="flex flex-wrap items-center gap-3">
46
+ <Badge>1</Badge>
47
+ <Badge variant="secondary">42</Badge>
48
+ <Badge variant="destructive">99+</Badge>
49
+ <Badge variant="outline">0</Badge>
50
+ </div>
51
+ `,
52
+ }),
53
+ }
53
54
 
54
- <!-- With Icons -->
55
- <section>
56
- <h3 class="mb-4 text-lg font-medium">With Icons</h3>
57
- <div class="flex flex-wrap items-center gap-3">
58
- <Badge><Icon name="check" /> Approved</Badge>
59
- <Badge variant="secondary"><Icon name="clock" /> Pending</Badge>
60
- <Badge variant="destructive"><Icon name="x" /> Rejected</Badge>
61
- <Badge variant="outline"><Icon name="star" /> Featured</Badge>
62
- </div>
63
- </section>
55
+ export const WithIcons: Story = {
56
+ render: () => ({
57
+ components: { Badge, Icon },
58
+ template: `
59
+ <div class="flex flex-wrap items-center gap-3">
60
+ <Badge><Icon name="check" /> Approved</Badge>
61
+ <Badge variant="secondary"><Icon name="clock" /> Pending</Badge>
62
+ <Badge variant="destructive"><Icon name="x" /> Rejected</Badge>
63
+ <Badge variant="outline"><Icon name="star" /> Featured</Badge>
64
64
  </div>
65
65
  `,
66
66
  }),
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { Badge as ShadcnBadge } from '@polymarbot/nuxt-layer-shadcn-ui/app/components/shadcn/badge'
2
+ import { Badge as ShadcnBadge } from '../../shadcn/badge'
3
3
  import type { BadgeProps } from './types'
4
4
 
5
5
  defineProps<BadgeProps>()
@@ -1,3 +1,5 @@
1
- import type { BadgeVariants } from '@polymarbot/nuxt-layer-shadcn-ui/app/components/shadcn/badge'
1
+ import type { BadgeVariants } from '../../shadcn/badge'
2
+
3
+ export type BadgeVariant = NonNullable<BadgeVariants['variant']>
2
4
 
3
5
  export interface BadgeProps extends /* @vue-ignore */ BadgeVariants {}
@@ -1,52 +1,63 @@
1
1
  import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import type { BreadcrumbItem } from './types'
2
3
  import Breadcrumb from './index.vue'
3
4
 
5
+ const home: BreadcrumbItem = { label: 'Home', icon: 'house', href: '/' }
6
+
7
+ const basicItems: BreadcrumbItem[] = [
8
+ { label: 'Products', href: '/products' },
9
+ { label: 'Electronics', href: '/products/electronics' },
10
+ { label: 'Laptops' },
11
+ ]
12
+
13
+ const withIconItems: BreadcrumbItem[] = [
14
+ { label: 'Settings', icon: 'settings', href: '/settings' },
15
+ { label: 'Profile' },
16
+ ]
17
+
4
18
  const meta = {
5
19
  title: 'UI/Breadcrumb',
6
20
  component: Breadcrumb,
21
+ argTypes: {
22
+ model: { control: 'object' },
23
+ home: { control: 'object' },
24
+ },
25
+ args: {
26
+ model: basicItems,
27
+ home,
28
+ },
29
+ render: args => ({
30
+ components: { Breadcrumb },
31
+ setup: () => ({ args }),
32
+ template: '<Breadcrumb v-bind="args" />',
33
+ }),
7
34
  } satisfies Meta<typeof Breadcrumb>
8
35
 
9
36
  export default meta
10
37
  type Story = StoryObj<typeof meta>
11
38
 
12
- export const Default: Story = {
39
+ export const Default: Story = {}
40
+
41
+ export const WithHome: Story = {
42
+ render: () => ({
43
+ components: { Breadcrumb },
44
+ setup: () => ({ home, basicItems }),
45
+ template: '<Breadcrumb :home="home" :model="basicItems" />',
46
+ }),
47
+ }
48
+
49
+ export const WithIcons: Story = {
50
+ render: () => ({
51
+ components: { Breadcrumb },
52
+ setup: () => ({ home, withIconItems }),
53
+ template: '<Breadcrumb :home="home" :model="withIconItems" />',
54
+ }),
55
+ }
56
+
57
+ export const SingleItem: Story = {
13
58
  render: () => ({
14
59
  components: { Breadcrumb },
15
- setup () {
16
- const home = { label: 'Home', icon: 'house', href: '/' }
17
- const basicItems = [
18
- { label: 'Products', href: '/products' },
19
- { label: 'Electronics', href: '/products/electronics' },
20
- { label: 'Laptops' },
21
- ]
22
- const withIcons = [
23
- { label: 'Settings', icon: 'settings', href: '/settings' },
24
- { label: 'Profile' },
25
- ]
26
- return { home, basicItems, withIcons }
27
- },
28
- template: `
29
- <div class="space-y-10">
30
- <section>
31
- <h3 class="mb-4 text-lg font-medium">Basic</h3>
32
- <Breadcrumb :model="basicItems" />
33
- </section>
34
-
35
- <section>
36
- <h3 class="mb-4 text-lg font-medium">With Home</h3>
37
- <Breadcrumb :home="home" :model="basicItems" />
38
- </section>
39
-
40
- <section>
41
- <h3 class="mb-4 text-lg font-medium">With Icons</h3>
42
- <Breadcrumb :home="home" :model="withIcons" />
43
- </section>
44
-
45
- <section>
46
- <h3 class="mb-4 text-lg font-medium">Single Item</h3>
47
- <Breadcrumb :home="home" />
48
- </section>
49
- </div>
50
- `,
60
+ setup: () => ({ home }),
61
+ template: '<Breadcrumb :home="home" />',
51
62
  }),
52
63
  }
@@ -6,7 +6,7 @@ import {
6
6
  BreadcrumbList,
7
7
  BreadcrumbPage,
8
8
  BreadcrumbSeparator,
9
- } from '@polymarbot/nuxt-layer-shadcn-ui/app/components/shadcn/breadcrumb'
9
+ } from '../../shadcn/breadcrumb'
10
10
  import type { BreadcrumbItem as BreadcrumbItemType, BreadcrumbProps } from './types'
11
11
 
12
12
  const props = defineProps<BreadcrumbProps>()