@polymarbot/nuxt-layer-shadcn-ui 0.2.2 → 0.3.1

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 (58) hide show
  1. package/app/assets/styles/globals.css +1 -20
  2. package/app/assets/styles/index.stories.ts +1 -1
  3. package/app/assets/styles/tailwind-preset.css +15 -0
  4. package/app/components/ui/Accordion/index.stories.ts +5 -0
  5. package/app/components/ui/AdminLayout/index.stories.ts +72 -56
  6. package/app/components/ui/Alert/index.stories.ts +4 -0
  7. package/app/components/ui/AlertDialog/index.stories.ts +6 -0
  8. package/app/components/ui/AsyncDataTable/index.stories.ts +6 -0
  9. package/app/components/ui/AsyncDataTable/index.vue +8 -4
  10. package/app/components/ui/AsyncDataTable/types.ts +2 -0
  11. package/app/components/ui/Avatar/index.stories.ts +6 -0
  12. package/app/components/ui/Badge/index.stories.ts +5 -0
  13. package/app/components/ui/Breadcrumb/index.stories.ts +5 -0
  14. package/app/components/ui/Button/index.stories.ts +9 -0
  15. package/app/components/ui/ButtonGroup/index.stories.ts +6 -0
  16. package/app/components/ui/Card/index.stories.ts +5 -0
  17. package/app/components/ui/Checkbox/index.stories.ts +5 -0
  18. package/app/components/ui/CopyButton/index.stories.ts +7 -0
  19. package/app/components/ui/DataTable/index.stories.ts +37 -4
  20. package/app/components/ui/DataTable/index.vue +16 -9
  21. package/app/components/ui/DataTable/types.ts +2 -0
  22. package/app/components/ui/DatePicker/index.stories.ts +9 -0
  23. package/app/components/ui/DateRangePicker/index.stories.ts +7 -0
  24. package/app/components/ui/Divider/index.stories.ts +4 -0
  25. package/app/components/ui/Drawer/index.stories.ts +6 -0
  26. package/app/components/ui/Dropdown/index.stories.ts +9 -0
  27. package/app/components/ui/FormItem/index.stories.ts +7 -0
  28. package/app/components/ui/Help/index.stories.ts +4 -0
  29. package/app/components/ui/Icon/index.stories.ts +4 -0
  30. package/app/components/ui/Input/index.stories.ts +9 -0
  31. package/app/components/ui/InputCurrency/index.stories.ts +7 -0
  32. package/app/components/ui/InputNumber/index.stories.ts +7 -0
  33. package/app/components/ui/Loading/index.stories.ts +3 -0
  34. package/app/components/ui/Modal/index.stories.ts +6 -0
  35. package/app/components/ui/ModalContent/index.stories.ts +5 -0
  36. package/app/components/ui/PageCard/index.stories.ts +14 -0
  37. package/app/components/ui/Pagination/index.stories.ts +5 -0
  38. package/app/components/ui/Popover/index.stories.ts +4 -0
  39. package/app/components/ui/Qrcode/index.stories.ts +4 -0
  40. package/app/components/ui/RadioCardGroup/index.stories.ts +30 -7
  41. package/app/components/ui/RadioGroup/index.stories.ts +7 -0
  42. package/app/components/ui/ScrollArea/index.stories.ts +4 -0
  43. package/app/components/ui/SearchSelect/index.stories.ts +6 -0
  44. package/app/components/ui/SearchSelect/index.vue +5 -4
  45. package/app/components/ui/Select/index.stories.ts +8 -0
  46. package/app/components/ui/Skeleton/index.stories.ts +4 -0
  47. package/app/components/ui/Slider/index.stories.ts +6 -0
  48. package/app/components/ui/Surface/index.stories.ts +5 -0
  49. package/app/components/ui/Tabs/index.stories.ts +8 -0
  50. package/app/components/ui/Tag/index.stories.ts +5 -0
  51. package/app/components/ui/Textarea/index.stories.ts +7 -0
  52. package/app/components/ui/Toast/index.stories.ts +5 -0
  53. package/app/components/ui/Tooltip/index.stories.ts +4 -0
  54. package/app/components/ui/WebLink/index.stories.ts +7 -0
  55. package/nuxt.config.ts +1 -6
  56. package/package.json +5 -5
  57. /package/app/assets/styles/{colors.css → tailwind-colors.css} +0 -0
  58. /package/app/assets/styles/{utilities.css → tailwind-utilities.css} +0 -0
@@ -1,20 +1 @@
1
- @import 'tailwindcss';
2
- @import 'tw-animate-css';
3
- @import './colors.css';
4
- @import './utilities.css';
5
- @import './z-index.css';
6
-
7
- /* Ensure Tailwind scans the layer's own source files */
8
- @source '../../..';
9
-
10
- /* Dark mode configuration for Tailwind v4 */
11
- @custom-variant dark (&:where(.dark, .dark *));
12
-
13
- @layer base {
14
- * {
15
- @apply border-border outline-ring/50;
16
- }
17
- body {
18
- @apply bg-background text-foreground;
19
- }
20
- }
1
+ @import './z-index.css';
@@ -72,7 +72,7 @@ const foregrounds = [
72
72
  ]
73
73
 
74
74
  const meta = {
75
- title: 'Foundations/Colors',
75
+ title: 'Theme/Colors',
76
76
  parameters: {
77
77
  layout: 'padded',
78
78
  docs: {
@@ -0,0 +1,15 @@
1
+ @import 'tw-animate-css';
2
+ @import './tailwind-colors.css';
3
+ @import './tailwind-utilities.css';
4
+
5
+ @source '../../..';
6
+ @custom-variant dark (&:where(.dark, .dark *));
7
+
8
+ @layer base {
9
+ * {
10
+ @apply border-border outline-ring/50;
11
+ }
12
+ body {
13
+ @apply bg-background text-foreground;
14
+ }
15
+ }
@@ -52,9 +52,12 @@ const meta = {
52
52
  export default meta
53
53
  type Story = StoryObj<typeof meta>
54
54
 
55
+ const noControls = { controls: { disable: true }} satisfies Story['parameters']
56
+
55
57
  export const Default: Story = {}
56
58
 
57
59
  export const Multiple: Story = {
60
+ parameters: noControls,
58
61
  render: () => ({
59
62
  components: { Accordion, Surface },
60
63
  setup () {
@@ -73,6 +76,7 @@ export const Multiple: Story = {
73
76
  }
74
77
 
75
78
  export const Disabled: Story = {
79
+ parameters: noControls,
76
80
  render: () => ({
77
81
  components: { Accordion, Surface },
78
82
  setup: () => ({ items }),
@@ -85,6 +89,7 @@ export const Disabled: Story = {
85
89
  }
86
90
 
87
91
  export const CustomSlots: Story = {
92
+ parameters: noControls,
88
93
  render: () => ({
89
94
  components: { Accordion, Surface, Icon },
90
95
  setup () {
@@ -90,6 +90,59 @@ const profile: AdminLayoutSidebarDropdownProfile = {
90
90
  subtitle: 'demo@example.com',
91
91
  }
92
92
 
93
+ const layoutContent = `
94
+ <template #navbar-left>
95
+ <Breadcrumb :model="breadcrumb" />
96
+ </template>
97
+ <template #navbar-right>
98
+ <Button variant="ghost" size="icon" icon="search" aria-label="Search" />
99
+ <Button variant="ghost" size="icon" icon="bell" aria-label="Notifications" />
100
+ <Avatar label="DU" size="small" />
101
+ </template>
102
+
103
+ <div class="space-y-6 p-6">
104
+ <div class="flex items-center justify-between">
105
+ <div>
106
+ <h1 class="text-2xl font-semibold tracking-tight">Overview</h1>
107
+ <p class="text-sm text-muted-foreground">Welcome back, here is what is happening today.</p>
108
+ </div>
109
+ <Button icon="plus">New Project</Button>
110
+ </div>
111
+
112
+ <div class="grid gap-4 md:grid-cols-3">
113
+ <Card title="Total Revenue">
114
+ <div class="text-2xl font-semibold">$45,231.89</div>
115
+ <p class="text-xs text-muted-foreground">+20.1% from last month</p>
116
+ </Card>
117
+ <Card title="Subscriptions">
118
+ <div class="text-2xl font-semibold">+2,350</div>
119
+ <p class="text-xs text-muted-foreground">+180.1% from last month</p>
120
+ </Card>
121
+ <Card title="Active Users">
122
+ <div class="text-2xl font-semibold">+12,234</div>
123
+ <p class="text-xs text-muted-foreground">+19% from last month</p>
124
+ </Card>
125
+ </div>
126
+
127
+ <Card title="Recent Activity">
128
+ <ul class="divide-y divide-border text-sm">
129
+ <li class="flex items-center justify-between py-3">
130
+ <span>Alice updated the design system</span>
131
+ <span class="text-xs text-muted-foreground">2 min ago</span>
132
+ </li>
133
+ <li class="flex items-center justify-between py-3">
134
+ <span>Bob deployed v1.4.0 to production</span>
135
+ <span class="text-xs text-muted-foreground">1 hour ago</span>
136
+ </li>
137
+ <li class="flex items-center justify-between py-3">
138
+ <span>Charlie opened a new issue</span>
139
+ <span class="text-xs text-muted-foreground">3 hours ago</span>
140
+ </li>
141
+ </ul>
142
+ </Card>
143
+ </div>
144
+ `
145
+
93
146
  const meta = {
94
147
  title: 'UI/AdminLayout',
95
148
  component: AdminLayout,
@@ -116,60 +169,7 @@ const meta = {
116
169
  ]
117
170
  return { args, breadcrumb }
118
171
  },
119
- template: `
120
- <AdminLayout v-bind="args">
121
- <template #navbar-left>
122
- <Breadcrumb :model="breadcrumb" />
123
- </template>
124
- <template #navbar-right>
125
- <Button variant="ghost" size="icon" icon="search" aria-label="Search" />
126
- <Button variant="ghost" size="icon" icon="bell" aria-label="Notifications" />
127
- <Avatar label="DU" size="small" />
128
- </template>
129
-
130
- <div class="space-y-6 p-6">
131
- <div class="flex items-center justify-between">
132
- <div>
133
- <h1 class="text-2xl font-semibold tracking-tight">Overview</h1>
134
- <p class="text-sm text-muted-foreground">Welcome back, here is what is happening today.</p>
135
- </div>
136
- <Button icon="plus">New Project</Button>
137
- </div>
138
-
139
- <div class="grid gap-4 md:grid-cols-3">
140
- <Card title="Total Revenue">
141
- <div class="text-2xl font-semibold">$45,231.89</div>
142
- <p class="text-xs text-muted-foreground">+20.1% from last month</p>
143
- </Card>
144
- <Card title="Subscriptions">
145
- <div class="text-2xl font-semibold">+2,350</div>
146
- <p class="text-xs text-muted-foreground">+180.1% from last month</p>
147
- </Card>
148
- <Card title="Active Users">
149
- <div class="text-2xl font-semibold">+12,234</div>
150
- <p class="text-xs text-muted-foreground">+19% from last month</p>
151
- </Card>
152
- </div>
153
-
154
- <Card title="Recent Activity">
155
- <ul class="divide-y divide-border text-sm">
156
- <li class="flex items-center justify-between py-3">
157
- <span>Alice updated the design system</span>
158
- <span class="text-xs text-muted-foreground">2 min ago</span>
159
- </li>
160
- <li class="flex items-center justify-between py-3">
161
- <span>Bob deployed v1.4.0 to production</span>
162
- <span class="text-xs text-muted-foreground">1 hour ago</span>
163
- </li>
164
- <li class="flex items-center justify-between py-3">
165
- <span>Charlie opened a new issue</span>
166
- <span class="text-xs text-muted-foreground">3 hours ago</span>
167
- </li>
168
- </ul>
169
- </Card>
170
- </div>
171
- </AdminLayout>
172
- `,
172
+ template: `<AdminLayout v-bind="args">${layoutContent}</AdminLayout>`,
173
173
  }),
174
174
  decorators: [
175
175
  () => ({
@@ -189,12 +189,28 @@ const meta = {
189
189
  export default meta
190
190
  type Story = StoryObj<typeof meta>
191
191
 
192
+ const noControls = { controls: { disable: true }} satisfies Story['parameters']
193
+
194
+ const renderAdminLayoutVariant = (variant: 'floating' | 'inset') => () => ({
195
+ components: { AdminLayout, Avatar, Breadcrumb, Button, Card },
196
+ setup () {
197
+ const breadcrumb = [
198
+ { label: 'Dashboard', href: '#' },
199
+ { label: 'Overview' },
200
+ ]
201
+ return { menus, footerDropdown: { profile, menuItems }, breadcrumb, variant }
202
+ },
203
+ template: `<AdminLayout :variant="variant" collapsible="icon" :menus="menus" :footer-dropdown="footerDropdown">${layoutContent}</AdminLayout>`,
204
+ })
205
+
192
206
  export const Default: Story = {}
193
207
 
194
208
  export const Floating: Story = {
195
- args: { variant: 'floating' },
209
+ parameters: noControls,
210
+ render: renderAdminLayoutVariant('floating'),
196
211
  }
197
212
 
198
213
  export const Inset: Story = {
199
- args: { variant: 'inset' },
214
+ parameters: noControls,
215
+ render: renderAdminLayoutVariant('inset'),
200
216
  }
@@ -25,9 +25,12 @@ const meta = {
25
25
  export default meta
26
26
  type Story = StoryObj<typeof meta>
27
27
 
28
+ const noControls = { controls: { disable: true }} satisfies Story['parameters']
29
+
28
30
  export const Default: Story = {}
29
31
 
30
32
  export const Types: Story = {
33
+ parameters: noControls,
31
34
  render: () => ({
32
35
  components: { Alert },
33
36
  setup: () => ({ types }),
@@ -42,6 +45,7 @@ export const Types: Story = {
42
45
  }
43
46
 
44
47
  export const WithIcons: Story = {
48
+ parameters: noControls,
45
49
  render: () => ({
46
50
  components: { Alert },
47
51
  template: `
@@ -35,9 +35,12 @@ const meta = {
35
35
  export default meta
36
36
  type Story = StoryObj<typeof meta>
37
37
 
38
+ const noControls = { controls: { disable: true }} satisfies Story['parameters']
39
+
38
40
  export const Default: Story = {}
39
41
 
40
42
  export const Alert: Story = {
43
+ parameters: noControls,
41
44
  render: () => ({
42
45
  components: { Button },
43
46
  setup () {
@@ -59,6 +62,7 @@ export const Alert: Story = {
59
62
  }
60
63
 
61
64
  export const Destroy: Story = {
65
+ parameters: noControls,
62
66
  render: () => ({
63
67
  components: { Button },
64
68
  setup () {
@@ -80,6 +84,7 @@ export const Destroy: Story = {
80
84
  }
81
85
 
82
86
  export const MultiDialog: Story = {
87
+ parameters: noControls,
83
88
  render: () => ({
84
89
  components: { Button },
85
90
  setup () {
@@ -105,6 +110,7 @@ export const MultiDialog: Story = {
105
110
  }
106
111
 
107
112
  export const WithTypes: Story = {
113
+ parameters: noControls,
108
114
  render: () => ({
109
115
  components: { Button },
110
116
  setup () {
@@ -84,6 +84,7 @@ const meta = {
84
84
  pageSizeOptions: { control: 'object' },
85
85
  showPagination: { control: 'boolean' },
86
86
  selectable: { control: 'boolean' },
87
+ clickable: { control: 'boolean' },
87
88
  batchActions: { control: 'object' },
88
89
  selection: { control: 'object' },
89
90
  },
@@ -98,6 +99,7 @@ const meta = {
98
99
  pageSizeOptions: [ 10, 20, 50 ],
99
100
  showPagination: true,
100
101
  selectable: false,
102
+ clickable: false,
101
103
  batchActions: [],
102
104
  selection: [],
103
105
  },
@@ -111,11 +113,14 @@ const meta = {
111
113
  export default meta
112
114
  type Story = StoryObj<typeof meta>
113
115
 
116
+ const noControls = { controls: { disable: true }} satisfies Story['parameters']
117
+
114
118
  /** Async fetch with pagination, sorting, page size selector */
115
119
  export const Default: Story = {}
116
120
 
117
121
  /** Batch actions with row selection and dual toolbars */
118
122
  export const WithBatchActions: Story = {
123
+ parameters: noControls,
119
124
  render: () => ({
120
125
  components: { AsyncDataTable },
121
126
  setup () {
@@ -139,6 +144,7 @@ export const WithBatchActions: Story = {
139
144
 
140
145
  /** Custom toolbar slot with action button */
141
146
  export const WithCustomToolbar: Story = {
147
+ parameters: noControls,
142
148
  render: () => ({
143
149
  components: { AsyncDataTable },
144
150
  setup: () => ({ columns, mockFetch }),
@@ -21,6 +21,7 @@ const props = withDefaults(defineProps<AsyncDataTableProps<TData>>(), {
21
21
  pageSizeOptions: () => [ 10, 20, 50, 100 ],
22
22
  showPagination: true,
23
23
  selectable: false,
24
+ clickable: false,
24
25
  batchActions: () => [],
25
26
  selection: () => [],
26
27
  })
@@ -28,6 +29,7 @@ const props = withDefaults(defineProps<AsyncDataTableProps<TData>>(), {
28
29
  const emit = defineEmits<{
29
30
  'update:filters': [filters: Record<string, any>]
30
31
  'update:selection': [value: TData[]]
32
+ 'rowClick': [row: TData, event: MouseEvent]
31
33
  }>()
32
34
 
33
35
  const T = useTranslations('components.ui.AsyncDataTable')
@@ -213,9 +215,9 @@ onMounted(() => {
213
215
  <!-- Top toolbar -->
214
216
  <div
215
217
  v-if="shouldShowTopToolbar && (!!$slots.toolbar || hasBatchActions || (showPagination && hasPaginationData))"
216
- class="mb-4 flex flex-wrap items-center justify-between gap-4"
218
+ class="mb-4 gap-4 flex flex-wrap items-center justify-between"
217
219
  >
218
- <div class="flex items-center gap-2">
220
+ <div class="gap-2 flex items-center">
219
221
  <Dropdown
220
222
  v-if="hasBatchActions"
221
223
  :menus="batchMenuItems"
@@ -256,11 +258,13 @@ onMounted(() => {
256
258
  :columns="columns"
257
259
  :loading="loading"
258
260
  :selectionMode="showSelectionColumn ? 'multiple' : undefined"
261
+ :clickable="clickable"
259
262
  :sortBy="sortState.sortBy"
260
263
  :sortOrder="sortState.sortOrder"
261
264
  @update:selection="onSelectionChange"
262
265
  @update:sortBy="onSortByUpdate"
263
266
  @update:sortOrder="onSortOrderUpdate"
267
+ @rowClick="(row: TData, event: MouseEvent) => emit('rowClick', row, event)"
264
268
  >
265
269
  <template
266
270
  v-for="name in Object.keys($slots).filter(n => n !== 'toolbar')"
@@ -277,9 +281,9 @@ onMounted(() => {
277
281
  <!-- Bottom toolbar -->
278
282
  <div
279
283
  v-if="shouldShowBottomToolbar && (!!$slots.toolbar || hasBatchActions || (showPagination && hasPaginationData))"
280
- class="mt-4 flex flex-wrap items-center justify-between gap-4"
284
+ class="mt-4 gap-4 flex flex-wrap items-center justify-between"
281
285
  >
282
- <div class="flex items-center gap-2">
286
+ <div class="gap-2 flex items-center">
283
287
  <Dropdown
284
288
  v-if="hasBatchActions"
285
289
  :menus="batchMenuItems"
@@ -38,6 +38,8 @@ export interface AsyncDataTableProps<T = Record<string, any>> {
38
38
  showPagination?: boolean
39
39
  /** Whether rows are selectable */
40
40
  selectable?: boolean
41
+ /** Whether rows are clickable (shows pointer cursor and pairs with `@rowClick`) */
42
+ clickable?: boolean
41
43
  /** Batch action definitions for selected rows */
42
44
  batchActions?: AsyncDataTableBatchAction<T>[]
43
45
  /** Selected rows (v-model:selection) */
@@ -32,9 +32,12 @@ const meta = {
32
32
  export default meta
33
33
  type Story = StoryObj<typeof meta>
34
34
 
35
+ const noControls = { controls: { disable: true }} satisfies Story['parameters']
36
+
35
37
  export const Default: Story = {}
36
38
 
37
39
  export const Sizes: Story = {
40
+ parameters: noControls,
38
41
  render: () => ({
39
42
  components: { Avatar },
40
43
  setup: () => ({ sizes }),
@@ -50,6 +53,7 @@ export const Sizes: Story = {
50
53
  }
51
54
 
52
55
  export const Shapes: Story = {
56
+ parameters: noControls,
53
57
  render: () => ({
54
58
  components: { Avatar },
55
59
  setup: () => ({ shapes }),
@@ -65,6 +69,7 @@ export const Shapes: Story = {
65
69
  }
66
70
 
67
71
  export const WithImage: Story = {
72
+ parameters: noControls,
68
73
  render: () => ({
69
74
  components: { Avatar },
70
75
  template: `
@@ -77,6 +82,7 @@ export const WithImage: Story = {
77
82
  }
78
83
 
79
84
  export const FallbackLabel: Story = {
85
+ parameters: noControls,
80
86
  render: () => ({
81
87
  components: { Avatar },
82
88
  template: `
@@ -24,9 +24,12 @@ const meta = {
24
24
  export default meta
25
25
  type Story = StoryObj<typeof meta>
26
26
 
27
+ const noControls = { controls: { disable: true }} satisfies Story['parameters']
28
+
27
29
  export const Default: Story = {}
28
30
 
29
31
  export const Variants: Story = {
32
+ parameters: noControls,
30
33
  render: () => ({
31
34
  components: { Badge },
32
35
  setup: () => ({ variants }),
@@ -39,6 +42,7 @@ export const Variants: Story = {
39
42
  }
40
43
 
41
44
  export const Numeric: Story = {
45
+ parameters: noControls,
42
46
  render: () => ({
43
47
  components: { Badge },
44
48
  template: `
@@ -53,6 +57,7 @@ export const Numeric: Story = {
53
57
  }
54
58
 
55
59
  export const WithIcons: Story = {
60
+ parameters: noControls,
56
61
  render: () => ({
57
62
  components: { Badge, Icon },
58
63
  template: `
@@ -36,9 +36,12 @@ const meta = {
36
36
  export default meta
37
37
  type Story = StoryObj<typeof meta>
38
38
 
39
+ const noControls = { controls: { disable: true }} satisfies Story['parameters']
40
+
39
41
  export const Default: Story = {}
40
42
 
41
43
  export const WithHome: Story = {
44
+ parameters: noControls,
42
45
  render: () => ({
43
46
  components: { Breadcrumb },
44
47
  setup: () => ({ home, basicItems }),
@@ -47,6 +50,7 @@ export const WithHome: Story = {
47
50
  }
48
51
 
49
52
  export const WithIcons: Story = {
53
+ parameters: noControls,
50
54
  render: () => ({
51
55
  components: { Breadcrumb },
52
56
  setup: () => ({ home, withIconItems }),
@@ -55,6 +59,7 @@ export const WithIcons: Story = {
55
59
  }
56
60
 
57
61
  export const SingleItem: Story = {
62
+ parameters: noControls,
58
63
  render: () => ({
59
64
  components: { Breadcrumb },
60
65
  setup: () => ({ home }),
@@ -52,9 +52,12 @@ const meta = {
52
52
  export default meta
53
53
  type Story = StoryObj<typeof meta>
54
54
 
55
+ const noControls = { controls: { disable: true }} satisfies Story['parameters']
56
+
55
57
  export const Default: Story = {}
56
58
 
57
59
  export const Variants: Story = {
60
+ parameters: noControls,
58
61
  render: () => ({
59
62
  components: { Button },
60
63
  setup: () => ({ variants }),
@@ -67,6 +70,7 @@ export const Variants: Story = {
67
70
  }
68
71
 
69
72
  export const Sizes: Story = {
73
+ parameters: noControls,
70
74
  render: () => ({
71
75
  components: { Button, Icon },
72
76
  setup: () => ({ sizes }),
@@ -82,6 +86,7 @@ export const Sizes: Story = {
82
86
  }
83
87
 
84
88
  export const WithIcons: Story = {
89
+ parameters: noControls,
85
90
  render: () => ({
86
91
  components: { Button },
87
92
  template: `
@@ -96,6 +101,7 @@ export const WithIcons: Story = {
96
101
  }
97
102
 
98
103
  export const Loading: Story = {
104
+ parameters: noControls,
99
105
  render: () => ({
100
106
  components: { Button },
101
107
  template: `
@@ -110,6 +116,7 @@ export const Loading: Story = {
110
116
  }
111
117
 
112
118
  export const Disabled: Story = {
119
+ parameters: noControls,
113
120
  render: () => ({
114
121
  components: { Button },
115
122
  setup: () => ({ variants }),
@@ -122,6 +129,7 @@ export const Disabled: Story = {
122
129
  }
123
130
 
124
131
  export const Rounded: Story = {
132
+ parameters: noControls,
125
133
  render: () => ({
126
134
  components: { Button },
127
135
  template: `
@@ -137,6 +145,7 @@ export const Rounded: Story = {
137
145
  }
138
146
 
139
147
  export const LinkButtons: Story = {
148
+ parameters: noControls,
140
149
  render: () => ({
141
150
  components: { Button },
142
151
  template: `
@@ -29,9 +29,12 @@ const meta = {
29
29
  export default meta
30
30
  type Story = StoryObj<typeof meta>
31
31
 
32
+ const noControls = { controls: { disable: true }} satisfies Story['parameters']
33
+
32
34
  export const Default: Story = {}
33
35
 
34
36
  export const WithIcons: Story = {
37
+ parameters: noControls,
35
38
  render: () => ({
36
39
  components: { ButtonGroup, Button, Icon },
37
40
  template: `
@@ -46,6 +49,7 @@ export const WithIcons: Story = {
46
49
  }
47
50
 
48
51
  export const InputWithButton: Story = {
52
+ parameters: noControls,
49
53
  render: () => ({
50
54
  components: { ButtonGroup, Button, Input, Icon },
51
55
  setup () {
@@ -62,6 +66,7 @@ export const InputWithButton: Story = {
62
66
  }
63
67
 
64
68
  export const ButtonWithInputWithButton: Story = {
69
+ parameters: noControls,
65
70
  render: () => ({
66
71
  components: { ButtonGroup, Button, Input, Icon },
67
72
  template: `
@@ -75,6 +80,7 @@ export const ButtonWithInputWithButton: Story = {
75
80
  }
76
81
 
77
82
  export const MixedVariants: Story = {
83
+ parameters: noControls,
78
84
  render: () => ({
79
85
  components: { ButtonGroup, Button },
80
86
  template: `
@@ -25,9 +25,12 @@ const meta = {
25
25
  export default meta
26
26
  type Story = StoryObj<typeof meta>
27
27
 
28
+ const noControls = { controls: { disable: true }} satisfies Story['parameters']
29
+
28
30
  export const Default: Story = {}
29
31
 
30
32
  export const WithTitle: Story = {
33
+ parameters: noControls,
31
34
  render: () => ({
32
35
  components: { Card },
33
36
  template: `
@@ -39,6 +42,7 @@ export const WithTitle: Story = {
39
42
  }
40
43
 
41
44
  export const CustomHeader: Story = {
45
+ parameters: noControls,
42
46
  render: () => ({
43
47
  components: { Card, Button },
44
48
  template: `
@@ -56,6 +60,7 @@ export const CustomHeader: Story = {
56
60
  }
57
61
 
58
62
  export const WithFooter: Story = {
63
+ parameters: noControls,
59
64
  render: () => ({
60
65
  components: { Card, Button },
61
66
  template: `
@@ -35,9 +35,12 @@ const meta = {
35
35
  export default meta
36
36
  type Story = StoryObj<typeof meta>
37
37
 
38
+ const noControls = { controls: { disable: true }} satisfies Story['parameters']
39
+
38
40
  export const Default: Story = {}
39
41
 
40
42
  export const Checked: Story = {
43
+ parameters: noControls,
41
44
  render: () => ({
42
45
  components: { Checkbox },
43
46
  setup () {
@@ -57,6 +60,7 @@ export const Checked: Story = {
57
60
  }
58
61
 
59
62
  export const Indeterminate: Story = {
63
+ parameters: noControls,
60
64
  render: () => ({
61
65
  components: { Checkbox },
62
66
  template: `
@@ -69,6 +73,7 @@ export const Indeterminate: Story = {
69
73
  }
70
74
 
71
75
  export const Disabled: Story = {
76
+ parameters: noControls,
72
77
  render: () => ({
73
78
  components: { Checkbox },
74
79
  template: `
@@ -37,9 +37,12 @@ const meta = {
37
37
  export default meta
38
38
  type Story = StoryObj<typeof meta>
39
39
 
40
+ const noControls = { controls: { disable: true }} satisfies Story['parameters']
41
+
40
42
  export const Default: Story = {}
41
43
 
42
44
  export const IconOnly: Story = {
45
+ parameters: noControls,
43
46
  render: () => ({
44
47
  components: { CopyButton },
45
48
  template: `
@@ -53,6 +56,7 @@ export const IconOnly: Story = {
53
56
  }
54
57
 
55
58
  export const WithLabel: Story = {
59
+ parameters: noControls,
56
60
  render: () => ({
57
61
  components: { CopyButton },
58
62
  template: `
@@ -65,6 +69,7 @@ export const WithLabel: Story = {
65
69
  }
66
70
 
67
71
  export const Variants: Story = {
72
+ parameters: noControls,
68
73
  render: () => ({
69
74
  components: { CopyButton },
70
75
  setup: () => ({ variants }),
@@ -84,6 +89,7 @@ export const Variants: Story = {
84
89
  }
85
90
 
86
91
  export const Sizes: Story = {
92
+ parameters: noControls,
87
93
  render: () => ({
88
94
  components: { CopyButton },
89
95
  template: `
@@ -97,6 +103,7 @@ export const Sizes: Story = {
97
103
  }
98
104
 
99
105
  export const CustomTooltipText: Story = {
106
+ parameters: noControls,
100
107
  render: () => ({
101
108
  components: { CopyButton },
102
109
  template: `