@reni-corp/reni-2c-ui 0.3.27 → 0.3.29

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 (101) hide show
  1. package/README.md +139 -16
  2. package/dist/components/elements/Alert.vue.d.ts +21 -3
  3. package/dist/components/elements/Alert.vue.d.ts.map +1 -1
  4. package/dist/components/elements/CheckBox.vue.d.ts +42 -2
  5. package/dist/components/elements/CheckBox.vue.d.ts.map +1 -1
  6. package/dist/components/elements/ComboBox.vue.d.ts +153 -0
  7. package/dist/components/elements/ComboBox.vue.d.ts.map +1 -0
  8. package/dist/components/elements/Icon.vue.d.ts.map +1 -1
  9. package/dist/components/elements/PasswordField.vue.d.ts +75 -25
  10. package/dist/components/elements/PasswordField.vue.d.ts.map +1 -1
  11. package/dist/components/elements/Progress.vue.d.ts +45 -0
  12. package/dist/components/elements/Progress.vue.d.ts.map +1 -0
  13. package/dist/components/elements/SelectBox.vue.d.ts +30 -10
  14. package/dist/components/elements/SelectBox.vue.d.ts.map +1 -1
  15. package/dist/components/elements/SkeletonLoader.vue.d.ts +30 -0
  16. package/dist/components/elements/SkeletonLoader.vue.d.ts.map +1 -0
  17. package/dist/components/elements/SpinButton.vue.d.ts +4 -2
  18. package/dist/components/elements/SpinButton.vue.d.ts.map +1 -1
  19. package/dist/components/elements/TextField.vue.d.ts +21 -6
  20. package/dist/components/elements/TextField.vue.d.ts.map +1 -1
  21. package/dist/components/features/ProductList.vue.d.ts +4 -0
  22. package/dist/components/features/ProductList.vue.d.ts.map +1 -1
  23. package/dist/components/features/ProductListItem.vue.d.ts +4 -0
  24. package/dist/components/features/ProductListItem.vue.d.ts.map +1 -1
  25. package/dist/components/features/ProductPurchase.vue.d.ts +102 -0
  26. package/dist/components/features/ProductPurchase.vue.d.ts.map +1 -0
  27. package/dist/components/foundation/AppBar.vue.d.ts +28 -3
  28. package/dist/components/foundation/AppBar.vue.d.ts.map +1 -1
  29. package/dist/components/foundation/AppFooter.vue.d.ts +51 -1
  30. package/dist/components/foundation/AppFooter.vue.d.ts.map +1 -1
  31. package/dist/components/interactive/Disclosure.vue.d.ts +54 -0
  32. package/dist/components/interactive/Disclosure.vue.d.ts.map +1 -0
  33. package/dist/components/layouts/Page.vue.d.ts +2 -0
  34. package/dist/components/layouts/Page.vue.d.ts.map +1 -1
  35. package/dist/components/renderless/Form.vue.d.ts +27 -1
  36. package/dist/components/renderless/Form.vue.d.ts.map +1 -1
  37. package/dist/index.d.ts +11 -3
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.es.js +7442 -6048
  40. package/dist/script.es.js +8881 -7489
  41. package/dist/script.umd.js +26 -26
  42. package/dist/style.css +1 -1
  43. package/dist/types.d.ts +7 -0
  44. package/dist/types.d.ts.map +1 -1
  45. package/dist/utils.d.ts.map +1 -1
  46. package/package.json +22 -13
  47. package/src/stories/Alert.stories.ts +260 -0
  48. package/src/stories/AnnounceBar.stories.ts +138 -0
  49. package/src/stories/AppBar.stories.ts +277 -0
  50. package/src/stories/AppFooter.stories.ts +274 -0
  51. package/src/stories/AppFrame.stories.ts +46 -0
  52. package/src/stories/AppLayout.stories.ts +870 -0
  53. package/src/stories/Button.stories.ts +101 -0
  54. package/src/stories/Card.stories.ts +152 -0
  55. package/src/stories/Carousel.stories.ts +62 -0
  56. package/src/stories/CarouselBanner.stories.ts +103 -0
  57. package/src/stories/CheckBox.stories.ts +76 -0
  58. package/src/stories/ComboBox.stories.ts +524 -0
  59. package/src/stories/Dialog.stories.ts +174 -0
  60. package/src/stories/Disclosure.stories.ts +217 -0
  61. package/src/stories/Divider.stories.ts +68 -0
  62. package/src/stories/Drawer.stories.ts +135 -0
  63. package/src/stories/DropDown.stories.ts +195 -0
  64. package/src/stories/FloatingBanner.stories.ts +79 -0
  65. package/src/stories/Form.stories.ts +704 -0
  66. package/src/stories/Gallery.stories.ts +78 -0
  67. package/src/stories/Grid.stories.ts +357 -0
  68. package/src/stories/Hero.stories.ts +52 -0
  69. package/src/stories/Html.stories.ts +178 -0
  70. package/src/stories/Icon.stories.ts +176 -0
  71. package/src/stories/Image.stories.ts +613 -0
  72. package/src/stories/Label.stories.ts +54 -0
  73. package/src/stories/List.stories.ts +112 -0
  74. package/src/stories/Modal.stories.ts +123 -0
  75. package/src/stories/Notification.stories.ts +82 -0
  76. package/src/stories/Page.stories.ts +414 -0
  77. package/src/stories/PasswordField.stories.ts +304 -0
  78. package/src/stories/ProductLabels.stories.ts +65 -0
  79. package/src/stories/ProductList.stories.ts +679 -0
  80. package/src/stories/ProductPurchase.stories.ts +807 -0
  81. package/src/stories/Progress.stories.ts +192 -0
  82. package/src/stories/Radio.stories.ts +81 -0
  83. package/src/stories/Section.stories.ts +244 -0
  84. package/src/stories/SelectBox.stories.ts +377 -0
  85. package/src/stories/SkeletonLoader.stories.ts +170 -0
  86. package/src/stories/Slider.stories.ts +79 -0
  87. package/src/stories/SnsLink.stories.ts +259 -0
  88. package/src/stories/SoldStacker.stories.ts +68 -0
  89. package/src/stories/SpinButton.stories.ts +134 -0
  90. package/src/stories/Spinner.stories.ts +58 -0
  91. package/src/stories/Stack.stories.ts +104 -0
  92. package/src/stories/Switch.stories.ts +68 -0
  93. package/src/stories/Tab.stories.ts +52 -0
  94. package/src/stories/TabPanels.stories.ts +67 -0
  95. package/src/stories/Tabs.stories.ts +68 -0
  96. package/src/stories/Text.stories.ts +69 -0
  97. package/src/stories/TextArea.stories.ts +78 -0
  98. package/src/stories/TextField.stories.ts +97 -0
  99. package/src/stories/ToolChip.stories.ts +125 -0
  100. package/dist/components/elements/SkeltonLoader.vue.d.ts +0 -7
  101. package/dist/components/elements/SkeltonLoader.vue.d.ts.map +0 -1
@@ -0,0 +1,377 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import SelectBox, {
3
+ type SelectBoxProps,
4
+ } from '@/components/elements/SelectBox.vue'
5
+ import Stack from '@/components/layouts/Stack.vue'
6
+ import { ref } from 'vue'
7
+
8
+ const meta: Meta<typeof SelectBox> = {
9
+ title: 'Elements/SelectBox',
10
+ component: SelectBox,
11
+ tags: ['autodocs'],
12
+ argTypes: {
13
+ label: {
14
+ control: 'text',
15
+ description: 'ラベルテキスト',
16
+ },
17
+ placeholder: {
18
+ control: 'text',
19
+ description: 'プレースホルダーテキスト',
20
+ },
21
+ itemTitle: {
22
+ control: 'text',
23
+ description: 'アイテムの表示名プロパティ',
24
+ },
25
+ itemValue: {
26
+ control: 'text',
27
+ description: 'アイテムの値プロパティ',
28
+ },
29
+ returnObject: {
30
+ control: 'boolean',
31
+ description: 'オブジェクトとして値を返すかどうか',
32
+ },
33
+ disabled: {
34
+ control: 'boolean',
35
+ description: '無効状態',
36
+ },
37
+ autocomplete: {
38
+ control: 'boolean',
39
+ description: 'オートコンプリート機能',
40
+ },
41
+ multiple: {
42
+ control: 'boolean',
43
+ description: '複数選択可能',
44
+ },
45
+ clearable: {
46
+ control: 'boolean',
47
+ description: 'クリアボタン表示',
48
+ },
49
+ rules: {
50
+ control: 'text',
51
+ description: 'バリデーションルール',
52
+ },
53
+ },
54
+ args: {
55
+ label: 'オプション選択',
56
+ placeholder: '',
57
+ itemTitle: 'label',
58
+ itemValue: 'value',
59
+ returnObject: false,
60
+ disabled: false,
61
+ autocomplete: false,
62
+ multiple: false,
63
+ clearable: false,
64
+ rules: '',
65
+ },
66
+ }
67
+
68
+ export default meta
69
+ type StoryArgs = SelectBoxProps & { modelValue?: any }
70
+ type Story = StoryObj<StoryArgs>
71
+ type OverridesStory = Omit<Story, 'argTypes'> & {
72
+ argTypes?: Record<string, any>
73
+ }
74
+
75
+ export const 基本: OverridesStory = {
76
+ args: {
77
+ label: 'フルーツを選択',
78
+ items: [
79
+ { value: 'apple', label: 'りんご' },
80
+ { value: 'banana', label: 'バナナ' },
81
+ { value: 'orange', label: 'オレンジ' },
82
+ { value: 'grape', label: 'ぶどう' },
83
+ { value: 'strawberry', label: 'いちご' },
84
+ ],
85
+ },
86
+ render: (args: StoryArgs) => ({
87
+ components: { 'rn-select-box': SelectBox },
88
+ setup() {
89
+ const selectedValue = ref('')
90
+
91
+ const handleChange = (value: any) => {
92
+ console.log('選択値:', value)
93
+ }
94
+
95
+ return { args, selectedValue, handleChange }
96
+ },
97
+ template: /* html */ `
98
+ <div class='sb-canvas'>
99
+ <rn-select-box
100
+ v-model="selectedValue"
101
+ :label="args.label"
102
+ :placeholder="args.placeholder"
103
+ :items="args.items"
104
+ :item-title="args.itemTitle"
105
+ :item-value="args.itemValue"
106
+ :return-object="args.returnObject"
107
+ :disabled="args.disabled"
108
+ :autocomplete="args.autocomplete"
109
+ :multiple="args.multiple"
110
+ :clearable="args.clearable"
111
+ :rules="args.rules"
112
+ @update:modelValue="handleChange"
113
+ />
114
+ <div style="margin-top: 16px;">
115
+ <p>選択値: {{ selectedValue }}</p>
116
+ </div>
117
+ </div>
118
+ `,
119
+ }),
120
+ }
121
+
122
+ export const 複数選択: OverridesStory = {
123
+ args: {
124
+ label: '好きな色を選択(複数可)',
125
+ multiple: true,
126
+ clearable: true,
127
+ items: [
128
+ { value: 'red', label: '赤' },
129
+ { value: 'blue', label: '青' },
130
+ { value: 'green', label: '緑' },
131
+ { value: 'yellow', label: '黄' },
132
+ { value: 'purple', label: '紫' },
133
+ { value: 'orange', label: 'オレンジ' },
134
+ { value: 'pink', label: 'ピンク' },
135
+ ],
136
+ },
137
+ argTypes: {
138
+ label: { control: { disable: true } },
139
+ items: { control: { disable: true } },
140
+ multiple: { control: { disable: true } },
141
+ clearable: { control: { disable: true } },
142
+ },
143
+ render: (args: StoryArgs) => ({
144
+ components: { 'rn-select-box': SelectBox, 'rn-stack': Stack },
145
+ setup() {
146
+ const selectedValues = ref([])
147
+
148
+ const handleChange = (values: any) => {
149
+ console.log('選択値:', values)
150
+ }
151
+
152
+ return { args, selectedValues, handleChange }
153
+ },
154
+ template: /* html */ `
155
+ <div class='sb-canvas'>
156
+ <rn-stack direction="vertical" gap="md">
157
+ <rn-select-box
158
+ v-model="selectedValues"
159
+ :label="args.label"
160
+ :placeholder="args.placeholder"
161
+ :items="args.items"
162
+ :multiple="args.multiple"
163
+ :clearable="args.clearable"
164
+ @update:modelValue="handleChange"
165
+ />
166
+ <div>
167
+ <p><strong>選択された値:</strong></p>
168
+ <p>{{ selectedValues.length > 0 ? selectedValues.join(', ') : '未選択' }}</p>
169
+ </div>
170
+ </rn-stack>
171
+ </div>
172
+ `,
173
+ }),
174
+ }
175
+
176
+ export const オートコンプリート: OverridesStory = {
177
+ args: {
178
+ label: '国を検索・選択',
179
+ autocomplete: true,
180
+ clearable: true,
181
+ items: [
182
+ { value: 'jp', label: '日本' },
183
+ { value: 'us', label: 'アメリカ' },
184
+ { value: 'uk', label: 'イギリス' },
185
+ { value: 'fr', label: 'フランス' },
186
+ { value: 'de', label: 'ドイツ' },
187
+ { value: 'it', label: 'イタリア' },
188
+ { value: 'es', label: 'スペイン' },
189
+ { value: 'kr', label: '韓国' },
190
+ { value: 'cn', label: '中国' },
191
+ { value: 'au', label: 'オーストラリア' },
192
+ { value: 'ca', label: 'カナダ' },
193
+ { value: 'br', label: 'ブラジル' },
194
+ ],
195
+ },
196
+ argTypes: {
197
+ label: { control: { disable: true } },
198
+ items: { control: { disable: true } },
199
+ autocomplete: { control: { disable: true } },
200
+ clearable: { control: { disable: true } },
201
+ },
202
+ render: (args: StoryArgs) => ({
203
+ components: { 'rn-select-box': SelectBox, 'rn-stack': Stack },
204
+ setup() {
205
+ const selectedCountry = ref('')
206
+
207
+ const handleChange = (value: any) => {
208
+ console.log('選択国:', value)
209
+ }
210
+
211
+ return { args, selectedCountry, handleChange }
212
+ },
213
+ template: /* html */ `
214
+ <div class='sb-canvas'>
215
+ <rn-stack direction="vertical" gap="md">
216
+ <div>
217
+ <p>国名を入力して検索・選択してください</p>
218
+ </div>
219
+ <rn-select-box
220
+ v-model="selectedCountry"
221
+ :label="args.label"
222
+ :placeholder="args.placeholder"
223
+ :items="args.items"
224
+ :autocomplete="args.autocomplete"
225
+ :clearable="args.clearable"
226
+ @update:modelValue="handleChange"
227
+ />
228
+ <div>
229
+ <p><strong>選択された国:</strong></p>
230
+ <p>{{ selectedCountry || '未選択' }}</p>
231
+ </div>
232
+ </rn-stack>
233
+ </div>
234
+ `,
235
+ }),
236
+ }
237
+
238
+ export const バリデーション: OverridesStory = {
239
+ args: {
240
+ label: '必須項目',
241
+ rules: 'required',
242
+ clearable: true,
243
+ items: [
244
+ { value: 'option1', label: 'オプション1' },
245
+ { value: 'option2', label: 'オプション2' },
246
+ { value: 'option3', label: 'オプション3' },
247
+ ],
248
+ },
249
+ argTypes: {
250
+ label: { control: { disable: true } },
251
+ items: { control: { disable: true } },
252
+ rules: { control: { disable: true } },
253
+ clearable: { control: { disable: true } },
254
+ },
255
+ render: (args: StoryArgs) => ({
256
+ components: { 'rn-select-box': SelectBox, 'rn-stack': Stack },
257
+ setup() {
258
+ const selectedOption = ref('')
259
+
260
+ const handleChange = (value: any) => {
261
+ console.log('選択値:', value)
262
+ }
263
+
264
+ return { args, selectedOption, handleChange }
265
+ },
266
+ template: /* html */ `
267
+ <div class='sb-canvas'>
268
+ <rn-stack direction="vertical" gap="md">
269
+ <div>
270
+ <p>※この項目は必須です。何も選択しないとエラーが表示されます。</p>
271
+ </div>
272
+ <rn-select-box
273
+ v-model="selectedOption"
274
+ :label="args.label"
275
+ :placeholder="args.placeholder"
276
+ :items="args.items"
277
+ :rules="args.rules"
278
+ :clearable="args.clearable"
279
+ @update:modelValue="handleChange"
280
+ />
281
+ <div>
282
+ <p><strong>選択値:</strong> {{ selectedOption || '未選択' }}</p>
283
+ </div>
284
+ </rn-stack>
285
+ </div>
286
+ `,
287
+ }),
288
+ }
289
+
290
+ export const プレースホルダー指定: OverridesStory = {
291
+ args: {
292
+ label: '配送方法',
293
+ placeholder: '配送方法を選択してください',
294
+ items: [
295
+ { value: 'standard', label: '通常配送(3-5日)' },
296
+ { value: 'express', label: '速達配送(1-2日)' },
297
+ { value: 'overnight', label: '翌日配送' },
298
+ { value: 'pickup', label: '店舗受取' },
299
+ ],
300
+ },
301
+ argTypes: {
302
+ label: { control: { disable: true } },
303
+ placeholder: { control: { disable: true } },
304
+ items: { control: { disable: true } },
305
+ },
306
+ render: (args: StoryArgs) => ({
307
+ components: { 'rn-select-box': SelectBox, 'rn-stack': Stack },
308
+ setup() {
309
+ const selectedMethod = ref('')
310
+
311
+ const handleChange = (value: any) => {
312
+ console.log('選択配送方法:', value)
313
+ }
314
+
315
+ return { args, selectedMethod, handleChange }
316
+ },
317
+ template: /* html */ `
318
+ <div class='sb-canvas'>
319
+ <rn-stack direction="vertical" gap="md">
320
+ <div>
321
+ <p>ラベル「{{ args.label }}」とプレースホルダー「{{ args.placeholder }}」が別々に設定されています。</p>
322
+ </div>
323
+ <rn-select-box
324
+ v-model="selectedMethod"
325
+ :label="args.label"
326
+ :placeholder="args.placeholder"
327
+ :items="args.items"
328
+ @update:modelValue="handleChange"
329
+ />
330
+ <div>
331
+ <p><strong>選択値:</strong> {{ selectedMethod || '未選択' }}</p>
332
+ </div>
333
+ </rn-stack>
334
+ </div>
335
+ `,
336
+ }),
337
+ }
338
+
339
+ export const 無効状態: OverridesStory = {
340
+ args: {
341
+ label: '無効な選択ボックス',
342
+ disabled: true,
343
+ items: [
344
+ { value: 'option1', label: 'オプション1' },
345
+ { value: 'option2', label: 'オプション2' },
346
+ ],
347
+ },
348
+ argTypes: {
349
+ label: { control: { disable: true } },
350
+ items: { control: { disable: true } },
351
+ disabled: { control: { disable: true } },
352
+ },
353
+ render: (args: StoryArgs) => ({
354
+ components: { 'rn-select-box': SelectBox, 'rn-stack': Stack },
355
+ setup() {
356
+ const selectedOption = ref('option1')
357
+
358
+ return { args, selectedOption }
359
+ },
360
+ template: /* html */ `
361
+ <div class='sb-canvas'>
362
+ <rn-stack direction="vertical" gap="md">
363
+ <div>
364
+ <p>この選択ボックスは無効状態です。クリックしても操作できません。</p>
365
+ </div>
366
+ <rn-select-box
367
+ v-model="selectedOption"
368
+ :label="args.label"
369
+ :placeholder="args.placeholder"
370
+ :items="args.items"
371
+ :disabled="args.disabled"
372
+ />
373
+ </rn-stack>
374
+ </div>
375
+ `,
376
+ }),
377
+ }
@@ -0,0 +1,170 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import SkeletonLoader, {
3
+ type SkeletonLoaderProps,
4
+ } from '@/components/elements/SkeletonLoader.vue'
5
+
6
+ const meta: Meta<typeof SkeletonLoader> = {
7
+ title: 'Elements/SkeletonLoader',
8
+ component: SkeletonLoader,
9
+ tags: ['autodocs'],
10
+ argTypes: {
11
+ type: {
12
+ control: 'select',
13
+ options: [
14
+ 'article-thumbnail',
15
+ 'image-portrait',
16
+ 'image-cinema',
17
+ 'gallery',
18
+ 'list-item-image-vertical',
19
+ 'list-item-image-horizontal',
20
+ 'text-title-line-1',
21
+ 'text-title-line-2',
22
+ 'text-body-line-2',
23
+ 'text-body-line-3',
24
+ 'text-body-line-4',
25
+ 'description-list',
26
+ 'button-fill-block',
27
+ 'button-text-inline',
28
+ 'input',
29
+ 'input-group-2',
30
+ 'stepper',
31
+ ],
32
+ },
33
+ },
34
+ args: {
35
+ type: 'article-thumbnail',
36
+ },
37
+ }
38
+
39
+ export default meta
40
+ type StoryArgs = SkeletonLoaderProps
41
+ type Story = StoryObj<StoryArgs>
42
+ type OverridesStory = Omit<Story, 'argTypes'> & {
43
+ argTypes?: Record<string, any>
44
+ }
45
+
46
+ export const 基本: OverridesStory = {
47
+ args: {},
48
+ argTypes: {
49
+ default: { table: { disable: true } },
50
+ },
51
+ render: (args: StoryArgs) => ({
52
+ components: { 'rn-skeleton-loader': SkeletonLoader },
53
+ setup() {
54
+ return { args }
55
+ },
56
+ template: /* html */ `
57
+ <div class='sb-canvas'>
58
+ <rn-skeleton-loader
59
+ :type=args.type
60
+ >
61
+ </rn-skeleton-loader>
62
+ </div>
63
+ `,
64
+ }),
65
+ }
66
+
67
+ export const 全パターン: OverridesStory = {
68
+ args: {},
69
+ argTypes: {
70
+ type: { table: { disable: true } },
71
+ default: { table: { disable: true } },
72
+ },
73
+ render: () => ({
74
+ components: { 'rn-skeleton-loader': SkeletonLoader },
75
+ template: /* html */ `
76
+ <div class='sb-canvas'>
77
+ <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 24px;">
78
+ <!-- 画像系 -->
79
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
80
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">article-thumbnail</h3>
81
+ <rn-skeleton-loader type="article-thumbnail" />
82
+ </div>
83
+
84
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
85
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">image-portrait</h3>
86
+ <rn-skeleton-loader type="image-portrait" />
87
+ </div>
88
+
89
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
90
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">image-cinema</h3>
91
+ <rn-skeleton-loader type="image-cinema" />
92
+ </div>
93
+
94
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
95
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">gallery</h3>
96
+ <rn-skeleton-loader type="gallery" />
97
+ </div>
98
+
99
+ <!-- リスト系 -->
100
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
101
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">list-item-image-vertical</h3>
102
+ <rn-skeleton-loader type="list-item-image-vertical" />
103
+ </div>
104
+
105
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
106
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">list-item-image-horizontal</h3>
107
+ <rn-skeleton-loader type="list-item-image-horizontal" />
108
+ </div>
109
+
110
+ <!-- テキスト系 -->
111
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
112
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">text-title-line-1</h3>
113
+ <rn-skeleton-loader type="text-title-line-1" />
114
+ </div>
115
+
116
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
117
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">text-title-line-2</h3>
118
+ <rn-skeleton-loader type="text-title-line-2" />
119
+ </div>
120
+
121
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
122
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">text-body-line-2</h3>
123
+ <rn-skeleton-loader type="text-body-line-2" />
124
+ </div>
125
+
126
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
127
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">text-body-line-3</h3>
128
+ <rn-skeleton-loader type="text-body-line-3" />
129
+ </div>
130
+
131
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
132
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">text-body-line-4</h3>
133
+ <rn-skeleton-loader type="text-body-line-4" />
134
+ </div>
135
+
136
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
137
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">description-list</h3>
138
+ <rn-skeleton-loader type="description-list" />
139
+ </div>
140
+
141
+ <!-- ボタン・フォーム系 -->
142
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
143
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">button-fill-block</h3>
144
+ <rn-skeleton-loader type="button-fill-block" />
145
+ </div>
146
+
147
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
148
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">button-text-inline</h3>
149
+ <rn-skeleton-loader type="button-text-inline" />
150
+ </div>
151
+
152
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
153
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">input</h3>
154
+ <rn-skeleton-loader type="input" />
155
+ </div>
156
+
157
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
158
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">input-group-2</h3>
159
+ <rn-skeleton-loader type="input-group-2" />
160
+ </div>
161
+
162
+ <div style="border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px;">
163
+ <h3 style="margin: 0 0 12px 0; font-size: 14px; color: #666;">stepper</h3>
164
+ <rn-skeleton-loader type="stepper" />
165
+ </div>
166
+ </div>
167
+ </div>
168
+ `,
169
+ }),
170
+ }
@@ -0,0 +1,79 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import Slider, { type SliderProps } from '@/components/interactive/Slider.vue'
3
+ import Stack from '@/components/layouts/Stack.vue'
4
+ import Card from '@/components/layouts/Card.vue'
5
+ import Text from '@/components/elements/Text.vue'
6
+ import Image from '@/components/elements/Image.vue'
7
+
8
+ const meta: Meta<typeof Slider> = {
9
+ title: 'Interactive/Slider',
10
+ component: Slider,
11
+ tags: ['autodocs'],
12
+ argTypes: {
13
+ autoplay: {
14
+ control: 'text',
15
+ description: 'オートプレイ(true、false、またはミリ秒)',
16
+ },
17
+ variant: {
18
+ control: 'select',
19
+ options: ['slide', 'instant', 'fade', 'carousel', 'cards'],
20
+ description: 'スライダーのバリエーション',
21
+ },
22
+ slidesPerView: {
23
+ control: 'number',
24
+ description: 'スライド表示数(数値またはレスポンシブ設定)',
25
+ },
26
+ spaceBetween: {
27
+ control: 'number',
28
+ description: 'スライド間の間隔(数値またはレスポンシブ設定)',
29
+ },
30
+ loop: {
31
+ control: 'boolean',
32
+ description: 'ループ再生',
33
+ },
34
+ },
35
+ args: {
36
+ autoplay: false,
37
+ variant: 'slide',
38
+ slidesPerView: 1,
39
+ spaceBetween: 0,
40
+ loop: true,
41
+ },
42
+ }
43
+
44
+ export default meta
45
+ type StoryArgs = SliderProps
46
+ type Story = StoryObj<StoryArgs>
47
+ type OverridesStory = Omit<Story, 'argTypes'> & {
48
+ argTypes?: Record<string, any>
49
+ }
50
+
51
+ export const 基本: OverridesStory = {
52
+ args: {
53
+ variant: 'slide',
54
+ loop: true,
55
+ },
56
+ render: (args: StoryArgs) => ({
57
+ components: { 'rn-slider': Slider, 'rn-image': Image },
58
+ setup() {
59
+ return { args }
60
+ },
61
+ template: /* html */ `
62
+ <div class='sb-canvas'>
63
+ <rn-slider
64
+ :autoplay="args.autoplay"
65
+ :variant="args.variant"
66
+ :slides-per-view="args.slidesPerView"
67
+ :space-between="args.spaceBetween"
68
+ :loop="args.loop"
69
+ >
70
+ <rn-image src="https://placehold.jp/900x400.png" />
71
+ <rn-image src="https://placehold.jp/900x400.png" />
72
+ <rn-image src="https://placehold.jp/900x400.png" />
73
+ <rn-image src="https://placehold.jp/900x400.png" />
74
+ <rn-image src="https://placehold.jp/900x400.png" />
75
+ </rn-slider>
76
+ </div>
77
+ `,
78
+ }),
79
+ }