@reni-corp/reni-2c-ui 0.3.291 → 0.4.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 (242) hide show
  1. package/README.md +131 -0
  2. package/dist/__tests__/helpers/assert-contract.d.ts +9 -0
  3. package/dist/__tests__/helpers/assert-contract.d.ts.map +1 -0
  4. package/dist/__tests__/helpers/contract-helpers.d.ts +45 -0
  5. package/dist/__tests__/helpers/contract-helpers.d.ts.map +1 -0
  6. package/dist/__tests__/setup.d.ts +1 -0
  7. package/dist/__tests__/setup.d.ts.map +1 -0
  8. package/dist/components/elements/Alert.vue.d.ts +14 -36
  9. package/dist/components/elements/Alert.vue.d.ts.map +1 -1
  10. package/dist/components/elements/Button.vue.d.ts +13 -41
  11. package/dist/components/elements/Button.vue.d.ts.map +1 -1
  12. package/dist/components/elements/CheckBox.vue.d.ts +11 -60
  13. package/dist/components/elements/CheckBox.vue.d.ts.map +1 -1
  14. package/dist/components/elements/ComboBox.vue.d.ts +34 -116
  15. package/dist/components/elements/ComboBox.vue.d.ts.map +1 -1
  16. package/dist/components/elements/DescriptionList.vue.d.ts +12 -27
  17. package/dist/components/elements/DescriptionList.vue.d.ts.map +1 -1
  18. package/dist/components/elements/Divider.vue.d.ts +3 -27
  19. package/dist/components/elements/Divider.vue.d.ts.map +1 -1
  20. package/dist/components/elements/Html.vue.d.ts +2 -32
  21. package/dist/components/elements/Html.vue.d.ts.map +1 -1
  22. package/dist/components/elements/Icon.vue.d.ts +4 -28
  23. package/dist/components/elements/Icon.vue.d.ts.map +1 -1
  24. package/dist/components/elements/Image.vue.d.ts +19 -43
  25. package/dist/components/elements/Image.vue.d.ts.map +1 -1
  26. package/dist/components/elements/Label.vue.d.ts +13 -33
  27. package/dist/components/elements/Label.vue.d.ts.map +1 -1
  28. package/dist/components/elements/PasswordField.vue.d.ts +13 -151
  29. package/dist/components/elements/PasswordField.vue.d.ts.map +1 -1
  30. package/dist/components/elements/Progress.vue.d.ts +3 -31
  31. package/dist/components/elements/Progress.vue.d.ts.map +1 -1
  32. package/dist/components/elements/RadioButton.vue.d.ts +17 -28
  33. package/dist/components/elements/RadioButton.vue.d.ts.map +1 -1
  34. package/dist/components/elements/RadioButtonGroup.vue.d.ts +26 -75
  35. package/dist/components/elements/RadioButtonGroup.vue.d.ts.map +1 -1
  36. package/dist/components/elements/SelectBox.vue.d.ts +30 -121
  37. package/dist/components/elements/SelectBox.vue.d.ts.map +1 -1
  38. package/dist/components/elements/SkeletonLoader.vue.d.ts +2 -24
  39. package/dist/components/elements/SkeletonLoader.vue.d.ts.map +1 -1
  40. package/dist/components/elements/SpinButton.vue.d.ts +23 -52
  41. package/dist/components/elements/SpinButton.vue.d.ts.map +1 -1
  42. package/dist/components/elements/Spinner.vue.d.ts +3 -27
  43. package/dist/components/elements/Spinner.vue.d.ts.map +1 -1
  44. package/dist/components/elements/Text.vue.d.ts +12 -34
  45. package/dist/components/elements/Text.vue.d.ts.map +1 -1
  46. package/dist/components/elements/TextField.vue.d.ts +23 -146
  47. package/dist/components/elements/TextField.vue.d.ts.map +1 -1
  48. package/dist/components/elements/ToolChip.vue.d.ts +11 -33
  49. package/dist/components/elements/ToolChip.vue.d.ts.map +1 -1
  50. package/dist/components/features/AnnounceBar.vue.d.ts +11 -29
  51. package/dist/components/features/AnnounceBar.vue.d.ts.map +1 -1
  52. package/dist/components/features/AnnounceBarCollection.vue.d.ts +10 -34
  53. package/dist/components/features/AnnounceBarCollection.vue.d.ts.map +1 -1
  54. package/dist/components/features/Banner.vue.d.ts +22 -0
  55. package/dist/components/features/Banner.vue.d.ts.map +1 -0
  56. package/dist/components/features/BrandLogo.vue.d.ts +2 -24
  57. package/dist/components/features/BrandLogo.vue.d.ts.map +1 -1
  58. package/dist/components/features/CategoryBanner.vue.d.ts +3 -30
  59. package/dist/components/features/CategoryBanner.vue.d.ts.map +1 -1
  60. package/dist/components/features/FloatingBanner.vue.d.ts +3 -21
  61. package/dist/components/features/FloatingBanner.vue.d.ts.map +1 -1
  62. package/dist/components/features/Hero.vue.d.ts +32 -52
  63. package/dist/components/features/Hero.vue.d.ts.map +1 -1
  64. package/dist/components/features/ImageGrid.vue.d.ts +3 -30
  65. package/dist/components/features/ImageGrid.vue.d.ts.map +1 -1
  66. package/dist/components/features/LinkList.vue.d.ts +3 -28
  67. package/dist/components/features/LinkList.vue.d.ts.map +1 -1
  68. package/dist/components/features/Marquee.vue.d.ts +19 -49
  69. package/dist/components/features/Marquee.vue.d.ts.map +1 -1
  70. package/dist/components/features/MediaContent.vue.d.ts +14 -36
  71. package/dist/components/features/MediaContent.vue.d.ts.map +1 -1
  72. package/dist/components/features/ProductLabels.vue.d.ts +1 -19
  73. package/dist/components/features/ProductLabels.vue.d.ts.map +1 -1
  74. package/dist/components/features/ProductList.vue.d.ts +63 -88
  75. package/dist/components/features/ProductList.vue.d.ts.map +1 -1
  76. package/dist/components/features/ProductListItem.vue.d.ts +7 -35
  77. package/dist/components/features/ProductListItem.vue.d.ts.map +1 -1
  78. package/dist/components/features/ProductPurchase.vue.d.ts +12 -43
  79. package/dist/components/features/ProductPurchase.vue.d.ts.map +1 -1
  80. package/dist/components/features/Schedule.vue.d.ts +11 -29
  81. package/dist/components/features/Schedule.vue.d.ts.map +1 -1
  82. package/dist/components/features/ScheduleDateItem.vue.d.ts +2 -26
  83. package/dist/components/features/ScheduleDateItem.vue.d.ts.map +1 -1
  84. package/dist/components/features/ScheduleDelivery.vue.d.ts +10 -26
  85. package/dist/components/features/ScheduleDelivery.vue.d.ts.map +1 -1
  86. package/dist/components/features/ScheduleDeliveryItem.vue.d.ts +2 -24
  87. package/dist/components/features/ScheduleDeliveryItem.vue.d.ts.map +1 -1
  88. package/dist/components/features/SchedulePeriod.vue.d.ts +2 -26
  89. package/dist/components/features/SchedulePeriod.vue.d.ts.map +1 -1
  90. package/dist/components/features/SchedulePickup.vue.d.ts +10 -26
  91. package/dist/components/features/SchedulePickup.vue.d.ts.map +1 -1
  92. package/dist/components/features/SchedulePickupItem.vue.d.ts +2 -24
  93. package/dist/components/features/SchedulePickupItem.vue.d.ts.map +1 -1
  94. package/dist/components/features/Schedules.vue.d.ts +10 -22
  95. package/dist/components/features/Schedules.vue.d.ts.map +1 -1
  96. package/dist/components/features/SnsLink.vue.d.ts +3 -29
  97. package/dist/components/features/SnsLink.vue.d.ts.map +1 -1
  98. package/dist/components/foundation/AppBar.vue.d.ts +15 -40
  99. package/dist/components/foundation/AppBar.vue.d.ts.map +1 -1
  100. package/dist/components/foundation/AppBody.vue.d.ts +9 -4
  101. package/dist/components/foundation/AppBody.vue.d.ts.map +1 -1
  102. package/dist/components/foundation/AppFooter.vue.d.ts +13 -35
  103. package/dist/components/foundation/AppFooter.vue.d.ts.map +1 -1
  104. package/dist/components/foundation/AppFrame.vue.d.ts +10 -5
  105. package/dist/components/foundation/AppFrame.vue.d.ts.map +1 -1
  106. package/dist/components/interactive/Dialog.vue.d.ts +18 -40
  107. package/dist/components/interactive/Dialog.vue.d.ts.map +1 -1
  108. package/dist/components/interactive/Disclosure.vue.d.ts +22 -37
  109. package/dist/components/interactive/Disclosure.vue.d.ts.map +1 -1
  110. package/dist/components/interactive/DropDown.vue.d.ts +20 -34
  111. package/dist/components/interactive/DropDown.vue.d.ts.map +1 -1
  112. package/dist/components/interactive/Gallery.vue.d.ts +2 -34
  113. package/dist/components/interactive/Gallery.vue.d.ts.map +1 -1
  114. package/dist/components/interactive/Lightbox.vue.d.ts +32 -0
  115. package/dist/components/interactive/Lightbox.vue.d.ts.map +1 -0
  116. package/dist/components/interactive/Modal.vue.d.ts +15 -33
  117. package/dist/components/interactive/Modal.vue.d.ts.map +1 -1
  118. package/dist/components/interactive/Notification.vue.d.ts +5 -35
  119. package/dist/components/interactive/Notification.vue.d.ts.map +1 -1
  120. package/dist/components/interactive/Slider.vue.d.ts +32 -28
  121. package/dist/components/interactive/Slider.vue.d.ts.map +1 -1
  122. package/dist/components/interactive/Tab.vue.d.ts +17 -25
  123. package/dist/components/interactive/Tab.vue.d.ts.map +1 -1
  124. package/dist/components/interactive/TabGroup.vue.d.ts +25 -0
  125. package/dist/components/interactive/TabGroup.vue.d.ts.map +1 -0
  126. package/dist/components/interactive/TabPanel.vue.d.ts +9 -3
  127. package/dist/components/interactive/TabPanel.vue.d.ts.map +1 -1
  128. package/dist/components/interactive/TabPanels.vue.d.ts +27 -32
  129. package/dist/components/interactive/TabPanels.vue.d.ts.map +1 -1
  130. package/dist/components/interactive/Tabs.vue.d.ts +31 -31
  131. package/dist/components/interactive/Tabs.vue.d.ts.map +1 -1
  132. package/dist/components/layouts/Card.vue.d.ts +12 -30
  133. package/dist/components/layouts/Card.vue.d.ts.map +1 -1
  134. package/dist/components/layouts/Grid.vue.d.ts +11 -32
  135. package/dist/components/layouts/Grid.vue.d.ts.map +1 -1
  136. package/dist/components/layouts/List.vue.d.ts +28 -42
  137. package/dist/components/layouts/List.vue.d.ts.map +1 -1
  138. package/dist/components/layouts/Page.vue.d.ts +33 -62
  139. package/dist/components/layouts/Page.vue.d.ts.map +1 -1
  140. package/dist/components/layouts/Section.vue.d.ts +22 -41
  141. package/dist/components/layouts/Section.vue.d.ts.map +1 -1
  142. package/dist/components/layouts/Stack.vue.d.ts +12 -40
  143. package/dist/components/layouts/Stack.vue.d.ts.map +1 -1
  144. package/dist/components/navigation/BottomBar.vue.d.ts +10 -26
  145. package/dist/components/navigation/BottomBar.vue.d.ts.map +1 -1
  146. package/dist/components/navigation/Drawer.vue.d.ts +14 -32
  147. package/dist/components/navigation/Drawer.vue.d.ts.map +1 -1
  148. package/dist/components/renderless/DataProvider.vue.d.ts +19 -42
  149. package/dist/components/renderless/DataProvider.vue.d.ts.map +1 -1
  150. package/dist/components/renderless/Form.vue.d.ts +22 -43
  151. package/dist/components/renderless/Form.vue.d.ts.map +1 -1
  152. package/dist/components/renderless/OptionGroupSwitchController.vue.d.ts +20 -43
  153. package/dist/components/renderless/OptionGroupSwitchController.vue.d.ts.map +1 -1
  154. package/dist/composable/useAppNotifications.d.ts +0 -1
  155. package/dist/composable/useToolChip.d.ts +0 -1
  156. package/dist/composables.d.ts +0 -1
  157. package/dist/composables.es.js +5 -6
  158. package/dist/contexts/tabGroup.d.ts +17 -0
  159. package/dist/contexts/tabGroup.d.ts.map +1 -0
  160. package/dist/directives/auto-scale.d.ts +0 -1
  161. package/dist/directives/glitch.d.ts +0 -1
  162. package/dist/{index-a725a791.js → index-D7ldGb8i.js} +18 -30
  163. package/dist/index.d.ts +8 -11
  164. package/dist/index.d.ts.map +1 -1
  165. package/dist/index.es.js +6795 -6735
  166. package/dist/script.es.js +8571 -8506
  167. package/dist/script.umd.js +28 -28
  168. package/dist/style.css +1 -1
  169. package/dist/types.d.ts +0 -1
  170. package/dist/{composables-93778bb4.js → useAppDialogGuidance-Bs1h3YmP.js} +1060 -1044
  171. package/dist/utils.d.ts +46 -1
  172. package/dist/utils.d.ts.map +1 -1
  173. package/dist/validation.d.ts +0 -1
  174. package/dist/valueObjects/CurrencyValue.d.ts +0 -1
  175. package/dist/valueObjects/NumberValue.d.ts +0 -1
  176. package/dist/{valueObjects-e0ea7f1b.js → valueObjects-CvF0zaqR.js} +1 -1
  177. package/dist/valueObjects.es.js +1 -1
  178. package/package.json +29 -28
  179. package/src/stories/Alert.stories.ts +1 -1
  180. package/src/stories/AnnounceBar.stories.ts +1 -1
  181. package/src/stories/AnnounceBarCollection.stories.ts +135 -0
  182. package/src/stories/AppBar.stories.ts +6 -2
  183. package/src/stories/AppFooter.stories.ts +1 -1
  184. package/src/stories/AppFrame.stories.ts +1 -1
  185. package/src/stories/AppLayout.stories.ts +5 -16
  186. package/src/stories/Banner.stories.ts +235 -0
  187. package/src/stories/Button.stories.ts +1 -1
  188. package/src/stories/Card.stories.ts +1 -1
  189. package/src/stories/CheckBox.stories.ts +84 -22
  190. package/src/stories/ComboBox.stories.ts +62 -2
  191. package/src/stories/Dialog.stories.ts +1 -1
  192. package/src/stories/Disclosure.stories.ts +1 -1
  193. package/src/stories/Divider.stories.ts +1 -1
  194. package/src/stories/Drawer.stories.ts +1 -1
  195. package/src/stories/DropDown.stories.ts +1 -1
  196. package/src/stories/FloatingBanner.stories.ts +1 -1
  197. package/src/stories/Form.stories.ts +96 -1
  198. package/src/stories/Gallery.stories.ts +1 -1
  199. package/src/stories/Grid.stories.ts +1 -1
  200. package/src/stories/Hero.stories.ts +175 -26
  201. package/src/stories/Html.stories.ts +69 -1
  202. package/src/stories/Icon.stories.ts +1 -1
  203. package/src/stories/Image.stories.ts +1 -1
  204. package/src/stories/Label.stories.ts +97 -4
  205. package/src/stories/Lightbox.stories.ts +231 -0
  206. package/src/stories/List.stories.ts +62 -15
  207. package/src/stories/Modal.stories.ts +1 -1
  208. package/src/stories/Notification.stories.ts +1 -1
  209. package/src/stories/Page.stories.ts +36 -1
  210. package/src/stories/PasswordField.stories.ts +1 -1
  211. package/src/stories/ProductList.stories.ts +65 -3
  212. package/src/stories/ProductPurchase.stories.ts +2 -2
  213. package/src/stories/Progress.stories.ts +1 -1
  214. package/src/stories/Radio.stories.ts +130 -12
  215. package/src/stories/Section.stories.ts +29 -4
  216. package/src/stories/SelectBox.stories.ts +56 -1
  217. package/src/stories/SkeletonLoader.stories.ts +1 -1
  218. package/src/stories/Slider.stories.ts +365 -7
  219. package/src/stories/SnsLink.stories.ts +1 -1
  220. package/src/stories/SpinButton.stories.ts +1 -1
  221. package/src/stories/Spinner.stories.ts +1 -1
  222. package/src/stories/Stack.stories.ts +1 -1
  223. package/src/stories/Switch.stories.ts +1 -1
  224. package/src/stories/Tab.stories.ts +28 -11
  225. package/src/stories/TabGroup.stories.ts +290 -0
  226. package/src/stories/TabPanels.stories.ts +1 -1
  227. package/src/stories/Tabs.stories.ts +104 -3
  228. package/src/stories/Text.stories.ts +24 -1
  229. package/src/stories/TextArea.stories.ts +78 -1
  230. package/src/stories/TextField.stories.ts +75 -2
  231. package/src/stories/ToolChip.stories.ts +1 -1
  232. package/src/stories/compositions/EventPage.stories.ts +184 -0
  233. package/src/stories/compositions/FormPage.stories.ts +222 -0
  234. package/src/stories/compositions/TopPage.stories.ts +164 -0
  235. package/dist/components/features/CarouselBanner.vue.d.ts +0 -36
  236. package/dist/components/features/CarouselBanner.vue.d.ts.map +0 -1
  237. package/dist/components/features/VariationSelector.vue.d.ts +0 -39
  238. package/dist/components/features/VariationSelector.vue.d.ts.map +0 -1
  239. package/src/stories/Carousel.stories.ts +0 -62
  240. package/src/stories/CarouselBanner.stories.ts +0 -103
  241. package/src/stories/ProductLabels.stories.ts +0 -65
  242. package/src/stories/SoldStacker.stories.ts +0 -68
@@ -0,0 +1,290 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3-vite'
2
+ import TabGroup, {
3
+ type TabGroupProps,
4
+ } from '@/components/interactive/TabGroup.vue'
5
+ import Tabs from '@/components/interactive/Tabs.vue'
6
+ import Tab from '@/components/interactive/Tab.vue'
7
+ import TabPanels from '@/components/interactive/TabPanels.vue'
8
+ import TabPanel from '@/components/interactive/TabPanel.vue'
9
+ import Icon from '@/components/elements/Icon.vue'
10
+
11
+ const meta: Meta<typeof TabGroup> = {
12
+ title: 'Interactive/TabGroup',
13
+ component: TabGroup,
14
+ tags: ['autodocs'],
15
+ parameters: {
16
+ docs: {
17
+ description: {
18
+ component:
19
+ 'TabGroupコンポーネント。layout propsでタブの配置を切り替えられます。layout に応じて Tabs の variant と Tab の variant が自動解決されます。アクティブバーの色は --rn-tab-active-color CSS変数で設定可能です。',
20
+ },
21
+ },
22
+ },
23
+ argTypes: {
24
+ modelValue: {
25
+ control: 'number',
26
+ description: 'アクティブなタブのインデックス',
27
+ },
28
+ layout: {
29
+ control: 'select',
30
+ options: ['inline', 'bottom'],
31
+ description:
32
+ 'タブのレイアウト。inline: 上部配置、bottom: 下部固定',
33
+ },
34
+ },
35
+ args: {
36
+ modelValue: 0,
37
+ layout: 'inline',
38
+ },
39
+ }
40
+ export default meta
41
+
42
+ type StoryArgs = TabGroupProps
43
+ type Story = StoryObj<StoryArgs>
44
+ type OverridesStory = Omit<Story, 'argTypes'> & {
45
+ argTypes?: Record<string, TabGroupProps>
46
+ }
47
+
48
+ const tabLabels = ['ホーム', 'カテゴリ', 'お気に入り', 'カート', 'マイページ']
49
+ const tabIcons: string[] = [
50
+ 'check',
51
+ 'check',
52
+ 'check',
53
+ 'check',
54
+ 'check',
55
+ ]
56
+
57
+ export const Inline: OverridesStory = {
58
+ args: {
59
+ layout: 'inline',
60
+ },
61
+ argTypes: {},
62
+ render: (args) => ({
63
+ components: {
64
+ 'rn-tab-group': TabGroup,
65
+ 'rn-tabs': Tabs,
66
+ 'rn-tab': Tab,
67
+ 'rn-tab-panels': TabPanels,
68
+ 'rn-tab-panel': TabPanel,
69
+ },
70
+ setup() {
71
+ const labels = tabLabels
72
+ return { args, labels }
73
+ },
74
+ template: /* html */ `
75
+ <div class='sb-canvas'>
76
+ <rn-tab-group v-bind="args">
77
+ <rn-tabs>
78
+ <rn-tab v-for="(label, index) in labels" :key="index" :label="label" />
79
+ </rn-tabs>
80
+ <rn-tab-panels>
81
+ <rn-tab-panel v-for="(label, index) in labels" :key="index">
82
+ <div style="padding: 24px;">
83
+ <h3>{{ label }}</h3>
84
+ <p>{{ label }}のコンテンツです。</p>
85
+ </div>
86
+ </rn-tab-panel>
87
+ </rn-tab-panels>
88
+ </rn-tab-group>
89
+ </div>
90
+ `,
91
+ }),
92
+ }
93
+
94
+ export const InlineWithIcon: OverridesStory = {
95
+ args: {
96
+ layout: 'inline',
97
+ },
98
+ argTypes: {},
99
+ render: (args) => ({
100
+ components: {
101
+ 'rn-tab-group': TabGroup,
102
+ 'rn-tabs': Tabs,
103
+ 'rn-tab': Tab,
104
+ 'rn-tab-panels': TabPanels,
105
+ 'rn-tab-panel': TabPanel,
106
+ },
107
+ setup() {
108
+ const labels = tabLabels
109
+ const icons = tabIcons
110
+ return { args, labels, icons }
111
+ },
112
+ template: /* html */ `
113
+ <div class='sb-canvas'>
114
+ <rn-tab-group v-bind="args">
115
+ <rn-tabs>
116
+ <rn-tab v-for="(label, index) in labels" :key="index" :icon="icons[index]" :label="label" />
117
+ </rn-tabs>
118
+ <rn-tab-panels>
119
+ <rn-tab-panel v-for="(label, index) in labels" :key="index">
120
+ <div style="padding: 24px;">
121
+ <h3>{{ label }}</h3>
122
+ <p>icon + label プロップスで指定。inlineではアイコンがsmサイズで表示されます。</p>
123
+ </div>
124
+ </rn-tab-panel>
125
+ </rn-tab-panels>
126
+ </rn-tab-group>
127
+ </div>
128
+ `,
129
+ }),
130
+ }
131
+
132
+ export const InlineStretched: OverridesStory = {
133
+ args: {
134
+ layout: 'inline',
135
+ },
136
+ argTypes: {},
137
+ render: (args) => ({
138
+ components: {
139
+ 'rn-tab-group': TabGroup,
140
+ 'rn-tabs': Tabs,
141
+ 'rn-tab': Tab,
142
+ 'rn-tab-panels': TabPanels,
143
+ 'rn-tab-panel': TabPanel,
144
+ },
145
+ setup() {
146
+ const labels = tabLabels
147
+ return { args, labels }
148
+ },
149
+ template: /* html */ `
150
+ <div class='sb-canvas'>
151
+ <rn-tab-group v-bind="args">
152
+ <rn-tabs :isStretched="true">
153
+ <rn-tab v-for="(label, index) in labels" :key="index" :label="label" />
154
+ </rn-tabs>
155
+ <rn-tab-panels>
156
+ <rn-tab-panel v-for="(label, index) in labels" :key="index">
157
+ <div style="padding: 24px;">
158
+ <h3>{{ label }}</h3>
159
+ <p>isStretched を有効にして、各タブが均等幅でストレッチしています。</p>
160
+ </div>
161
+ </rn-tab-panel>
162
+ </rn-tab-panels>
163
+ </rn-tab-group>
164
+ </div>
165
+ `,
166
+ }),
167
+ }
168
+
169
+ export const InlineWithCustomColor: OverridesStory = {
170
+ args: {
171
+ layout: 'inline',
172
+ },
173
+ argTypes: {},
174
+ render: (args) => ({
175
+ components: {
176
+ 'rn-tab-group': TabGroup,
177
+ 'rn-tabs': Tabs,
178
+ 'rn-tab': Tab,
179
+ 'rn-tab-panels': TabPanels,
180
+ 'rn-tab-panel': TabPanel,
181
+ },
182
+ setup() {
183
+ const labels = tabLabels
184
+ return { args, labels }
185
+ },
186
+ template: /* html */ `
187
+ <div class='sb-canvas'>
188
+ <rn-tab-group v-bind="args" style="--rn-tab-active-color: #6c50d9;">
189
+ <rn-tabs>
190
+ <rn-tab v-for="(label, index) in labels" :key="index" :label="label" />
191
+ </rn-tabs>
192
+ <rn-tab-panels>
193
+ <rn-tab-panel v-for="(label, index) in labels" :key="index">
194
+ <div style="padding: 24px;">
195
+ <h3>{{ label }}</h3>
196
+ <p>--rn-tab-active-color でアクティブバーの色をカスタマイズしています。</p>
197
+ </div>
198
+ </rn-tab-panel>
199
+ </rn-tab-panels>
200
+ </rn-tab-group>
201
+ </div>
202
+ `,
203
+ }),
204
+ }
205
+
206
+ export const Bottom: OverridesStory = {
207
+ args: {
208
+ layout: 'bottom',
209
+ },
210
+ argTypes: {},
211
+ parameters: {
212
+ layout: 'fullscreen',
213
+ },
214
+ render: (args) => ({
215
+ components: {
216
+ 'rn-tab-group': TabGroup,
217
+ 'rn-tabs': Tabs,
218
+ 'rn-tab': Tab,
219
+ 'rn-tab-panels': TabPanels,
220
+ 'rn-tab-panel': TabPanel,
221
+ },
222
+ setup() {
223
+ const labels = tabLabels
224
+ const icons = tabIcons
225
+ return { args, labels, icons }
226
+ },
227
+ template: /* html */ `
228
+ <rn-tab-group v-bind="args">
229
+ <rn-tabs>
230
+ <rn-tab v-for="(label, index) in labels" :key="index" :icon="icons[index]" :label="label" />
231
+ </rn-tabs>
232
+ <rn-tab-panels>
233
+ <rn-tab-panel v-for="(label, index) in labels" :key="index">
234
+ <div style="padding: 24px;">
235
+ <h3>{{ label }}</h3>
236
+ <p>{{ label }}のコンテンツです。icon/labelプロップスで指定。アイコンはlg、ラベルは10pxで自動表示されます。</p>
237
+ <div style="height: 800px; background: linear-gradient(to bottom, #f0f0f0, #e0e0e0); border-radius: 8px; margin-top: 16px; display: flex; align-items: center; justify-content: center; color: #999;">
238
+ スクロール領域
239
+ </div>
240
+ </div>
241
+ </rn-tab-panel>
242
+ </rn-tab-panels>
243
+ </rn-tab-group>
244
+ `,
245
+ }),
246
+ }
247
+
248
+ export const BottomSlot: OverridesStory = {
249
+ args: {
250
+ layout: 'bottom',
251
+ },
252
+ argTypes: {},
253
+ parameters: {
254
+ layout: 'fullscreen',
255
+ },
256
+ render: (args) => ({
257
+ components: {
258
+ 'rn-tab-group': TabGroup,
259
+ 'rn-tabs': Tabs,
260
+ 'rn-tab': Tab,
261
+ 'rn-tab-panels': TabPanels,
262
+ 'rn-tab-panel': TabPanel,
263
+ 'rn-icon': Icon,
264
+ },
265
+ setup() {
266
+ const labels = tabLabels
267
+ const icons = tabIcons
268
+ return { args, labels, icons }
269
+ },
270
+ template: /* html */ `
271
+ <rn-tab-group v-bind="args">
272
+ <rn-tabs>
273
+ <rn-tab v-for="(label, index) in labels" :key="index">
274
+ <rn-icon :icon="icons[index]" size="md" />
275
+ <span style="font-size: 10px;">{{ label }}</span>
276
+ </rn-tab>
277
+ </rn-tabs>
278
+ <rn-tab-panels>
279
+ <rn-tab-panel v-for="(label, index) in labels" :key="index">
280
+ <div style="padding: 24px;">
281
+ <h3>{{ label }}</h3>
282
+ <p>{{ label }}のコンテンツです。従来のslotベースの記述方法です。</p>
283
+ </div>
284
+ </rn-tab-panel>
285
+ </rn-tab-panels>
286
+ </rn-tab-group>
287
+ `,
288
+ }),
289
+ }
290
+
@@ -1,5 +1,5 @@
1
1
  import { ref } from 'vue'
2
- import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import type { Meta, StoryObj } from '@storybook/vue3-vite'
3
3
  import TabPanels, {
4
4
  type TabPanelsProps,
5
5
  } from '@/components/interactive/TabPanels.vue'
@@ -1,5 +1,5 @@
1
1
  import { ref } from 'vue'
2
- import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import type { Meta, StoryObj } from '@storybook/vue3-vite'
3
3
  import Tabs, { type TabsProps } from '@/components/interactive/Tabs.vue'
4
4
  import Tab from '@/components/interactive/Tab.vue'
5
5
 
@@ -10,7 +10,8 @@ const meta: Meta<typeof Tabs> = {
10
10
  parameters: {
11
11
  docs: {
12
12
  description: {
13
- component: 'Tabsコンポーネント',
13
+ component:
14
+ 'Tabsコンポーネント。variant で見た目を切り替えられます。inline: 上部配置、bottom: ボトムバー風。',
14
15
  },
15
16
  },
16
17
  },
@@ -21,12 +22,17 @@ const meta: Meta<typeof Tabs> = {
21
22
  isScrollable: {
22
23
  control: 'boolean',
23
24
  },
25
+ variant: {
26
+ control: 'select',
27
+ options: ['inline', 'bottom'],
28
+ },
24
29
  },
25
30
  args: {
26
31
  modelValue: 1,
27
32
  isScrollable: true,
33
+ variant: 'inline',
28
34
  },
29
- render: (args) => ({
35
+ render: (args: TabsProps) => ({
30
36
  components: { 'rn-tabs': Tabs, 'rn-tab': Tab },
31
37
  setup() {
32
38
  const current = ref(0)
@@ -66,3 +72,98 @@ export const 基本: OverridesStory = {
66
72
  args: {},
67
73
  argTypes: {},
68
74
  }
75
+
76
+ export const WithIconLabel: OverridesStory = {
77
+ args: {},
78
+ argTypes: {},
79
+ render: (args: TabsProps) => ({
80
+ components: { 'rn-tabs': Tabs, 'rn-tab': Tab },
81
+ setup() {
82
+ const current = ref(0)
83
+ const handleVisible = (num: number) => {
84
+ current.value = num
85
+ }
86
+ return { args, handleVisible, current }
87
+ },
88
+ template: /* html */ `
89
+ <div class='sb-canvas'>
90
+ <rn-tabs
91
+ :modelValue=current
92
+ v-slot=slotProps
93
+ >
94
+ <rn-tab
95
+ v-for="(_value, index) in new Array(5)"
96
+ :active="slotProps.currentIndex === index"
97
+ :icon="'check'"
98
+ :label="'Tab ' + index"
99
+ @click=handleVisible(index)
100
+ />
101
+ </rn-tabs>
102
+ </div>
103
+ `,
104
+ }),
105
+ }
106
+
107
+ export const Bottom: OverridesStory = {
108
+ args: {},
109
+ argTypes: {},
110
+ render: (args: TabsProps) => ({
111
+ components: { 'rn-tabs': Tabs, 'rn-tab': Tab },
112
+ setup() {
113
+ const current = ref(0)
114
+ const handleVisible = (num: number) => {
115
+ current.value = num
116
+ }
117
+ return { args, handleVisible, current }
118
+ },
119
+ template: /* html */ `
120
+ <div class='sb-canvas'>
121
+ <rn-tabs
122
+ :modelValue=current
123
+ variant="bottom"
124
+ v-slot=slotProps
125
+ >
126
+ <rn-tab
127
+ v-for="(_value, index) in new Array(4)"
128
+ :active="slotProps.currentIndex === index"
129
+ :icon="'check'"
130
+ :label="'Tab ' + index"
131
+ @click=handleVisible(index)
132
+ />
133
+ </rn-tabs>
134
+ </div>
135
+ `,
136
+ }),
137
+ }
138
+
139
+ export const Stretched: OverridesStory = {
140
+ args: {},
141
+ argTypes: {},
142
+ render: (args: TabsProps) => ({
143
+ components: { 'rn-tabs': Tabs, 'rn-tab': Tab },
144
+ setup() {
145
+ const current = ref(0)
146
+ const handleVisible = (num: number) => {
147
+ current.value = num
148
+ }
149
+ return { args, handleVisible, current }
150
+ },
151
+ template: /* html */ `
152
+ <div class='sb-canvas'>
153
+ <rn-tabs
154
+ :modelValue=current
155
+ :isStretched="true"
156
+ v-slot=slotProps
157
+ >
158
+ <rn-tab
159
+ v-for="(_value, index) in new Array(5)"
160
+ :active="slotProps.currentIndex === index"
161
+ :icon="'check'"
162
+ :label="'Tab ' + index"
163
+ @click=handleVisible(index)
164
+ />
165
+ </rn-tabs>
166
+ </div>
167
+ `,
168
+ }),
169
+ }
@@ -1,4 +1,4 @@
1
- import type { Meta, StoryObj } from '@storybook/vue3'
1
+ import type { Meta, StoryObj } from '@storybook/vue3-vite'
2
2
  import Text, { TextProps } from '@/components/elements/Text.vue'
3
3
 
4
4
  const meta: Meta<typeof Text> = {
@@ -67,3 +67,26 @@ export const 基本: OverridesStory = {
67
67
  `,
68
68
  }),
69
69
  }
70
+
71
+ export const Nl2br: OverridesStory = {
72
+ args: {
73
+ nl2br: true,
74
+ slotText: '1行目のテキスト\n2行目のテキスト\n3行目のテキスト',
75
+ },
76
+ argTypes: {
77
+ default: { table: { disable: true } },
78
+ },
79
+ render: (args: StoryArgs) => ({
80
+ components: { 'rn-text': Text },
81
+ setup() {
82
+ return { args }
83
+ },
84
+ template: /* html */ `
85
+ <div class='sb-canvas'>
86
+ <rn-text :size=args.size :color=args.color :weight=args.weight :nl2br=args.nl2br>
87
+ {{ args.slotText }}
88
+ </rn-text>
89
+ </div>
90
+ `,
91
+ }),
92
+ }
@@ -1,5 +1,5 @@
1
1
  import { ref } from 'vue'
2
- import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import type { Meta, StoryObj } from '@storybook/vue3-vite'
3
3
  import TextArea, {
4
4
  type TextAreaProps,
5
5
  } from '@/components/elements/TextArea.vue'
@@ -12,6 +12,10 @@ const meta: Meta<typeof TextArea> = {
12
12
  label: {
13
13
  control: 'text',
14
14
  },
15
+ variant: {
16
+ control: 'select',
17
+ options: ['default', 'floating'],
18
+ },
15
19
  placeholder: {
16
20
  control: 'text',
17
21
  },
@@ -30,6 +34,7 @@ const meta: Meta<typeof TextArea> = {
30
34
  },
31
35
  args: {
32
36
  label: 'label',
37
+ variant: 'default',
33
38
  placeholder: 'メールアドレスを入力してください',
34
39
  rows: 4,
35
40
  dynamicRows: true,
@@ -50,6 +55,7 @@ const meta: Meta<typeof TextArea> = {
50
55
  <rn-text-area
51
56
  v-model=myRef
52
57
  :label=args.label
58
+ :variant=args.variant
53
59
  :rows=args.rows
54
60
  :dynamicRows=args.dynamicRows
55
61
  :disabled=args.disabled
@@ -76,3 +82,74 @@ export const 基本: OverridesStory = {
76
82
  default: { table: { disable: true } },
77
83
  },
78
84
  }
85
+
86
+ export const FloatingLabel: OverridesStory = {
87
+ args: {
88
+ variant: 'floating',
89
+ label: 'メッセージ',
90
+ modelValue: '',
91
+ },
92
+ argTypes: {
93
+ default: { table: { disable: true } },
94
+ },
95
+ render: (args: StoryArgs) => ({
96
+ components: { 'rn-text-area': TextArea },
97
+ setup() {
98
+ const myRef = ref('')
99
+ return { args, myRef }
100
+ },
101
+ template: /* html */ `
102
+ <div class='sb-canvas'>
103
+ <div style='display: flex; flex-direction: column; gap: 24px;'>
104
+ <div>
105
+ <h3>未入力</h3>
106
+ <rn-text-area
107
+ variant='floating'
108
+ label='メッセージ'
109
+ :rows='4'
110
+ />
111
+ </div>
112
+ <div>
113
+ <h3>入力済み</h3>
114
+ <rn-text-area
115
+ variant='floating'
116
+ label='メッセージ'
117
+ modelValue='お問い合わせ内容を入力してください'
118
+ :rows='4'
119
+ />
120
+ </div>
121
+ <div>
122
+ <h3>プレースホルダー付き</h3>
123
+ <rn-text-area
124
+ variant='floating'
125
+ label='メッセージ'
126
+ placeholder='詳細を入力してください'
127
+ :rows='4'
128
+ />
129
+ </div>
130
+ <div>
131
+ <h3>エラー時</h3>
132
+ <rn-text-area
133
+ variant='floating'
134
+ label='メッセージ'
135
+ name='message'
136
+ rules='required'
137
+ :validateOnMount='true'
138
+ :rows='4'
139
+ />
140
+ </div>
141
+ <div>
142
+ <h3>無効時</h3>
143
+ <rn-text-area
144
+ variant='floating'
145
+ label='メッセージ'
146
+ modelValue='お問い合わせ内容'
147
+ :disabled='true'
148
+ :rows='4'
149
+ />
150
+ </div>
151
+ </div>
152
+ </div>
153
+ `,
154
+ }),
155
+ }
@@ -1,5 +1,5 @@
1
1
  import { ref } from 'vue'
2
- import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import type { Meta, StoryObj } from '@storybook/vue3-vite'
3
3
  import TextField, {
4
4
  type TextFieldProps,
5
5
  } from '@/components/elements/TextField.vue'
@@ -12,6 +12,10 @@ const meta: Meta<typeof TextField> = {
12
12
  label: {
13
13
  control: 'text',
14
14
  },
15
+ variant: {
16
+ control: 'select',
17
+ options: ['default', 'floating'],
18
+ },
15
19
  modelValue: {
16
20
  control: 'text',
17
21
  },
@@ -24,6 +28,7 @@ const meta: Meta<typeof TextField> = {
24
28
  },
25
29
  args: {
26
30
  label: 'label',
31
+ variant: 'default',
27
32
  modelValue: 'value',
28
33
  disabled: false,
29
34
  rules: '',
@@ -56,6 +61,7 @@ export const 基本: OverridesStory = {
56
61
  <rn-text-field
57
62
  v-model=myRef
58
63
  :label=args.label
64
+ :variant=args.variant
59
65
  :disabled=args.disabled
60
66
  :rules=args.rules
61
67
  @update:modelValue=handleUpload
@@ -80,6 +86,7 @@ export const 応用: OverridesStory = {
80
86
  <div class='sb-canvas'>
81
87
  <rn-text-field
82
88
  :label=args.label
89
+ :variant=args.variant
83
90
  :modelValue=args.modelValue
84
91
  :disabled=args.disabled
85
92
  :rules=args.rules
@@ -88,10 +95,76 @@ export const 応用: OverridesStory = {
88
95
  prepend
89
96
  </template>
90
97
  <template #append>
91
- append
98
+ append
92
99
  </template>
93
100
  </rn-text-field>
94
101
  </div>
95
102
  `,
96
103
  }),
97
104
  }
105
+
106
+ export const FloatingLabel: OverridesStory = {
107
+ args: {
108
+ variant: 'floating',
109
+ label: 'ご注文番号',
110
+ modelValue: '',
111
+ },
112
+ argTypes: {
113
+ default: { table: { disable: true } },
114
+ },
115
+ render: (args: StoryArgs) => ({
116
+ components: { 'rn-text-field': TextField },
117
+ setup() {
118
+ const myRef = ref('')
119
+ return { args, myRef }
120
+ },
121
+ template: /* html */ `
122
+ <div class='sb-canvas'>
123
+ <div style='display: flex; flex-direction: column; gap: 24px;'>
124
+ <div>
125
+ <h3>未入力</h3>
126
+ <rn-text-field
127
+ variant='floating'
128
+ label='ご注文番号'
129
+ />
130
+ </div>
131
+ <div>
132
+ <h3>入力済み</h3>
133
+ <rn-text-field
134
+ variant='floating'
135
+ label='ご注文番号'
136
+ modelValue='001'
137
+ />
138
+ </div>
139
+ <div>
140
+ <h3>プレースホルダー付き</h3>
141
+ <rn-text-field
142
+ variant='floating'
143
+ label='ご注文番号'
144
+ placeholder='注文番号を入力してください'
145
+ />
146
+ </div>
147
+ <div>
148
+ <h3>エラー時</h3>
149
+ <rn-text-field
150
+ variant='floating'
151
+ label='ご注文番号'
152
+ name='orderNumber'
153
+ rules='required'
154
+ :validateOnMount='true'
155
+ />
156
+ </div>
157
+ <div>
158
+ <h3>無効時</h3>
159
+ <rn-text-field
160
+ variant='floating'
161
+ label='ご注文番号'
162
+ modelValue='001'
163
+ :disabled='true'
164
+ />
165
+ </div>
166
+ </div>
167
+ </div>
168
+ `,
169
+ }),
170
+ }
@@ -1,4 +1,4 @@
1
- import type { Meta, StoryObj } from '@storybook/vue3'
1
+ import type { Meta, StoryObj } from '@storybook/vue3-vite'
2
2
  import ToolChip, {
3
3
  type ToolChipProps,
4
4
  } from '@/components/elements/ToolChip.vue'