@reni-corp/reni-2c-ui 0.4.11 → 0.4.13

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 (99) hide show
  1. package/dist/components/elements/Callout.vue.d.ts +47 -0
  2. package/dist/components/elements/Callout.vue.d.ts.map +1 -0
  3. package/dist/components/elements/CheckBox.vue.d.ts.map +1 -1
  4. package/dist/components/elements/ComboBox.vue.d.ts +3 -3
  5. package/dist/components/elements/ComboBox.vue.d.ts.map +1 -1
  6. package/dist/components/elements/Icon.vue.d.ts +2 -2
  7. package/dist/components/elements/Icon.vue.d.ts.map +1 -1
  8. package/dist/components/elements/Image.vue.d.ts +2 -2
  9. package/dist/components/elements/Image.vue.d.ts.map +1 -1
  10. package/dist/components/elements/Label.vue.d.ts +2 -2
  11. package/dist/components/elements/Label.vue.d.ts.map +1 -1
  12. package/dist/components/elements/Pagination.vue.d.ts.map +1 -1
  13. package/dist/components/elements/SelectBox.vue.d.ts +1 -1
  14. package/dist/components/elements/SelectBox.vue.d.ts.map +1 -1
  15. package/dist/components/elements/SpinButton.vue.d.ts.map +1 -1
  16. package/dist/components/elements/Switch.vue.d.ts +19 -0
  17. package/dist/components/elements/Switch.vue.d.ts.map +1 -0
  18. package/dist/components/elements/Text.vue.d.ts +1 -1
  19. package/dist/components/elements/Text.vue.d.ts.map +1 -1
  20. package/dist/components/elements/TextArea.vue.d.ts +35 -0
  21. package/dist/components/elements/TextArea.vue.d.ts.map +1 -0
  22. package/dist/components/elements/TextField.vue.d.ts +1 -1
  23. package/dist/components/elements/TextField.vue.d.ts.map +1 -1
  24. package/dist/components/elements/ToolChip.vue.d.ts +1 -1
  25. package/dist/components/elements/ToolChip.vue.d.ts.map +1 -1
  26. package/dist/components/features/AnnounceBar.vue.d.ts +2 -0
  27. package/dist/components/features/AnnounceBar.vue.d.ts.map +1 -1
  28. package/dist/components/features/CategoryBanner.vue.d.ts +1 -1
  29. package/dist/components/features/CategoryBanner.vue.d.ts.map +1 -1
  30. package/dist/components/features/ImageGrid.vue.d.ts +1 -1
  31. package/dist/components/features/ImageGrid.vue.d.ts.map +1 -1
  32. package/dist/components/features/ProductList.vue.d.ts +3 -0
  33. package/dist/components/features/ProductList.vue.d.ts.map +1 -1
  34. package/dist/components/features/ProductListItem.vue.d.ts +21 -1
  35. package/dist/components/features/ProductListItem.vue.d.ts.map +1 -1
  36. package/dist/components/features/SnsLink.vue.d.ts +1 -1
  37. package/dist/components/features/SnsLink.vue.d.ts.map +1 -1
  38. package/dist/components/foundation/AppBar.vue.d.ts +10 -1
  39. package/dist/components/foundation/AppBar.vue.d.ts.map +1 -1
  40. package/dist/components/foundation/AppBottomBar.vue.d.ts +23 -0
  41. package/dist/components/foundation/AppBottomBar.vue.d.ts.map +1 -0
  42. package/dist/components/foundation/AppFooter.vue.d.ts +1 -1
  43. package/dist/components/foundation/AppFooter.vue.d.ts.map +1 -1
  44. package/dist/components/interactive/Disclosure.vue.d.ts +4 -4
  45. package/dist/components/interactive/Disclosure.vue.d.ts.map +1 -1
  46. package/dist/components/interactive/SwipeConfirm.vue.d.ts +38 -0
  47. package/dist/components/interactive/SwipeConfirm.vue.d.ts.map +1 -0
  48. package/dist/components/interactive/Tab.vue.d.ts +2 -2
  49. package/dist/components/interactive/Tab.vue.d.ts.map +1 -1
  50. package/dist/components/layouts/List.vue.d.ts +1 -1
  51. package/dist/components/layouts/List.vue.d.ts.map +1 -1
  52. package/dist/components/renderless/ItemFilter.vue.d.ts +1 -1
  53. package/dist/components/renderless/ItemFilter.vue.d.ts.map +1 -1
  54. package/dist/composables.es.js +1 -1
  55. package/dist/{index-D7ldGb8i.js → index-DRqJOqUR.js} +27 -27
  56. package/dist/index.d.ts +14 -3
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.es.js +7710 -10757
  59. package/dist/placeholder-1200x400.svg +4 -0
  60. package/dist/placeholder-1200x600.svg +4 -0
  61. package/dist/placeholder-400x400.svg +4 -0
  62. package/dist/placeholder-600x600.svg +4 -0
  63. package/dist/placeholder-800x450.svg +4 -0
  64. package/dist/placeholder-800x600.svg +4 -0
  65. package/dist/script.es.js +8631 -11683
  66. package/dist/script.umd.js +17 -597
  67. package/dist/style.css +1 -1
  68. package/dist/{useAppDialogGuidance-Bs1h3YmP.js → useAppDialogGuidance-CVHevNgf.js} +71 -70
  69. package/dist/utils.d.ts.map +1 -1
  70. package/dist/valueObjects-XKjx9Hu_.js +66 -0
  71. package/dist/valueObjects.es.js +1 -1
  72. package/package.json +10 -13
  73. package/src/stories/AnnounceBar.stories.ts +52 -1
  74. package/src/stories/AppBar.stories.ts +8 -8
  75. package/src/stories/AppBottomBar.stories.ts +443 -0
  76. package/src/stories/AppLayout.stories.ts +17 -27
  77. package/src/stories/Banner.stories.ts +5 -5
  78. package/src/stories/Callout.stories.ts +286 -0
  79. package/src/stories/Card.stories.ts +5 -5
  80. package/src/stories/ComboBox.stories.ts +1 -1
  81. package/src/stories/Disclosure.stories.ts +1 -1
  82. package/src/stories/Drawer.stories.ts +2 -2
  83. package/src/stories/Hero.stories.ts +5 -5
  84. package/src/stories/Icon.stories.ts +10 -88
  85. package/src/stories/Image.stories.ts +5 -1
  86. package/src/stories/Label.stories.ts +2 -1
  87. package/src/stories/List.stories.ts +4 -4
  88. package/src/stories/Modal.stories.ts +3 -3
  89. package/src/stories/ProductList.stories.ts +71 -5
  90. package/src/stories/SwipeConfirm.stories.ts +144 -0
  91. package/src/stories/Tab.stories.ts +1 -1
  92. package/src/stories/TabGroup.stories.ts +5 -5
  93. package/src/stories/Tabs.stories.ts +13 -4
  94. package/src/stories/compositions/DomainMixedHome.stories.ts +217 -0
  95. package/src/stories/compositions/EventPage.stories.ts +2 -2
  96. package/src/stories/compositions/TicketPage.stories.ts +300 -0
  97. package/src/stories/compositions/TopPage.stories.ts +8 -8
  98. package/dist/valueObjects-CvF0zaqR.js +0 -71
  99. package/src/stories/SnsLink.stories.ts +0 -259
@@ -0,0 +1,300 @@
1
+ /**
2
+ * Composition Story: 整理券ページ
3
+ *
4
+ * イベント物販の整理券発行画面を模した構成。
5
+ * AppFrame をルートに、AppBar・AppBody・AppBottomBar の3層を組み、
6
+ * AppBottomBar に「ページ固有CTA + グローバルタブ」を Stack するパターンの実例。
7
+ */
8
+ import type { Meta, StoryObj } from '@storybook/vue3-vite'
9
+ import AppFrame from '@/components/foundation/AppFrame.vue'
10
+ import AppBar from '@/components/foundation/AppBar.vue'
11
+ import AppBody from '@/components/foundation/AppBody.vue'
12
+ import AppBottomBar from '@/components/foundation/AppBottomBar.vue'
13
+ import Tabs from '@/components/interactive/Tabs.vue'
14
+ import Tab from '@/components/interactive/Tab.vue'
15
+ import Button from '@/components/elements/Button.vue'
16
+ import Label from '@/components/elements/Label.vue'
17
+ import Text from '@/components/elements/Text.vue'
18
+ import Icon from '@/components/elements/Icon.vue'
19
+ import Divider from '@/components/elements/Divider.vue'
20
+ import Callout from '@/components/elements/Callout.vue'
21
+ import AnnounceBar from '@/components/features/AnnounceBar.vue'
22
+ import Stack from '@/components/layouts/Stack.vue'
23
+ import Card from '@/components/layouts/Card.vue'
24
+
25
+ const meta: Meta = {
26
+ title: 'Example/整理券ページ',
27
+ parameters: {
28
+ layout: 'fullscreen',
29
+ },
30
+ }
31
+
32
+ export default meta
33
+ type Story = StoryObj
34
+
35
+ export const 受付中: Story = {
36
+ render: () => ({
37
+ components: {
38
+ 'rn-app-frame': AppFrame,
39
+ 'rn-app-bar': AppBar,
40
+ 'rn-app-body': AppBody,
41
+ 'rn-app-bottom-bar': AppBottomBar,
42
+ 'rn-tabs': Tabs,
43
+ 'rn-tab': Tab,
44
+ 'rn-button': Button,
45
+ 'rn-label': Label,
46
+ 'rn-text': Text,
47
+ 'rn-icon': Icon,
48
+ 'rn-divider': Divider,
49
+ 'rn-callout': Callout,
50
+ 'rn-stack': Stack,
51
+ 'rn-card': Card,
52
+ },
53
+ setup() {
54
+ // 店舗配下の画面。AppBar 左端から店舗横断ホームへ戻れるようにする
55
+ const home = { title: 'すべての店舗トップ', action: () => {} }
56
+ return { home }
57
+ },
58
+ template: /* html */ `
59
+ <rn-app-frame>
60
+ <rn-app-bar title="KIRITO OFFICIAL GOODS STORE" :home="home" />
61
+
62
+ <rn-app-body>
63
+ <rn-card>
64
+ <rn-stack direction="vertical" gap="lg" horizontalReSize="fill">
65
+ <!-- ステータス + 整理券名(近接グルーピング) -->
66
+ <rn-stack direction="vertical" gap="sm" horizontalReSize="fill">
67
+ <rn-stack horizontalReSize="fill">
68
+ <rn-label variant="outline" color="success">受付中</rn-label>
69
+ </rn-stack>
70
+ <rn-text size="title" weight="bold">
71
+ RENI Official Store ドームツアー2025 整理券
72
+ </rn-text>
73
+ </rn-stack>
74
+
75
+ <!-- 開催情報 -->
76
+ <rn-stack direction="vertical" gap="sm" horizontalReSize="fill">
77
+ <rn-stack gap="sm" verticalAlign="center">
78
+ <rn-icon icon="calendar-outline" color="subtle" />
79
+ <rn-text size="body" color="subtle">
80
+ 2025年12月14日15:00 - 21:00
81
+ </rn-text>
82
+ </rn-stack>
83
+ <rn-stack gap="sm" verticalAlign="center">
84
+ <rn-icon icon="location-dot-outline" color="subtle" />
85
+ <rn-text size="body" color="subtle">
86
+ 苗場スキー場 オフィシャルグッズ売り場
87
+ </rn-text>
88
+ </rn-stack>
89
+ </rn-stack>
90
+
91
+ <!-- 注意事項: 案内系 Callout と同じデフォルトのテイスト(白背景+枠線+グレー info アイコン) -->
92
+ <rn-callout title="注意事項">
93
+ ※ このデバイスで取得できるのは1枚のみです。<br />
94
+ ※ 発行後のキャンセル・変更はできません。
95
+ </rn-callout>
96
+
97
+ <!-- 発行ボタン: 受付中のため活性 -->
98
+ <rn-button block color="default">整理券を発行</rn-button>
99
+ </rn-stack>
100
+ </rn-card>
101
+ </rn-app-body>
102
+
103
+ <rn-app-bottom-bar>
104
+ <rn-tabs variant="icon" :isStretched="true">
105
+ <rn-tab icon="ticket-outline" label="整理券" :active="true" />
106
+ <rn-tab icon="tote-bag-outline" label="オーダーシート" />
107
+ </rn-tabs>
108
+ </rn-app-bottom-bar>
109
+ </rn-app-frame>
110
+ `,
111
+ }),
112
+ }
113
+
114
+ export const 受付開始前: Story = {
115
+ render: () => ({
116
+ components: {
117
+ 'rn-app-frame': AppFrame,
118
+ 'rn-app-bar': AppBar,
119
+ 'rn-app-body': AppBody,
120
+ 'rn-app-bottom-bar': AppBottomBar,
121
+ 'rn-tabs': Tabs,
122
+ 'rn-tab': Tab,
123
+ 'rn-button': Button,
124
+ 'rn-label': Label,
125
+ 'rn-text': Text,
126
+ 'rn-icon': Icon,
127
+ 'rn-divider': Divider,
128
+ 'rn-callout': Callout,
129
+ 'rn-stack': Stack,
130
+ 'rn-card': Card,
131
+ },
132
+ setup() {
133
+ // 店舗配下の画面。AppBar 左端から店舗横断ホームへ戻れるようにする
134
+ const home = { title: 'すべての店舗トップ', action: () => {} }
135
+ return { home }
136
+ },
137
+ template: /* html */ `
138
+ <rn-app-frame>
139
+ <rn-app-bar title="KIRITO OFFICIAL GOODS STORE" :home="home" />
140
+
141
+ <rn-app-body>
142
+ <rn-card>
143
+ <rn-stack direction="vertical" gap="lg" horizontalReSize="fill">
144
+ <!-- ステータス + 整理券名(近接グルーピング) -->
145
+ <rn-stack direction="vertical" gap="sm" horizontalReSize="fill">
146
+ <rn-stack horizontalReSize="fill">
147
+ <rn-label variant="solid" color="subtle">受付開始前</rn-label>
148
+ </rn-stack>
149
+ <rn-text size="title" weight="bold">
150
+ RENI Official Store ドームツアー2025 整理券
151
+ </rn-text>
152
+ </rn-stack>
153
+
154
+ <!-- 開催情報 -->
155
+ <rn-stack direction="vertical" gap="sm" horizontalReSize="fill">
156
+ <rn-stack gap="sm" verticalAlign="center">
157
+ <rn-icon icon="calendar-outline" color="subtle" />
158
+ <rn-text size="body" color="subtle">
159
+ 2025年12月14日15:00 - 21:00
160
+ </rn-text>
161
+ </rn-stack>
162
+ <rn-stack gap="sm" verticalAlign="center">
163
+ <rn-icon icon="location-dot-outline" color="subtle" />
164
+ <rn-text size="body" color="subtle">
165
+ 苗場スキー場 オフィシャルグッズ売り場
166
+ </rn-text>
167
+ </rn-stack>
168
+ </rn-stack>
169
+
170
+ <!-- 注意事項: 案内系 Callout と同じデフォルトのテイスト(白背景+枠線+グレー info アイコン) -->
171
+ <rn-callout title="注意事項">
172
+ ※ このデバイスで取得できるのは1枚のみです。<br />
173
+ ※ 発行後のキャンセル・変更はできません。
174
+ </rn-callout>
175
+
176
+ <!-- 発行ボタン: 受付開始前のため非活性 -->
177
+ <rn-button block disabled>現在発行していません</rn-button>
178
+ </rn-stack>
179
+ </rn-card>
180
+ </rn-app-body>
181
+
182
+ <rn-app-bottom-bar>
183
+ <rn-tabs variant="icon" :isStretched="true">
184
+ <rn-tab icon="ticket-outline" label="整理券" :active="true" />
185
+ <rn-tab icon="tote-bag-outline" label="オーダーシート" />
186
+ </rn-tabs>
187
+ </rn-app-bottom-bar>
188
+ </rn-app-frame>
189
+ `,
190
+ }),
191
+ }
192
+
193
+ export const 呼び出し待ち: Story = {
194
+ render: () => ({
195
+ components: {
196
+ 'rn-app-frame': AppFrame,
197
+ 'rn-app-bar': AppBar,
198
+ 'rn-app-body': AppBody,
199
+ 'rn-app-bottom-bar': AppBottomBar,
200
+ 'rn-tabs': Tabs,
201
+ 'rn-tab': Tab,
202
+ 'rn-button': Button,
203
+ 'rn-label': Label,
204
+ 'rn-text': Text,
205
+ 'rn-callout': Callout,
206
+ 'rn-announce-bar': AnnounceBar,
207
+ 'rn-stack': Stack,
208
+ 'rn-card': Card,
209
+ },
210
+ setup() {
211
+ // 店舗配下の画面。AppBar 左端から店舗横断ホームへ戻れるようにする
212
+ const home = { title: 'すべての店舗トップ', action: () => {} }
213
+ return { home }
214
+ },
215
+ template: /* html */ `
216
+ <rn-app-frame>
217
+ <rn-app-bar title="KIRITO OFFICIAL GOODS STORE" :home="home" />
218
+
219
+ <rn-app-body>
220
+ <rn-card>
221
+ <rn-stack direction="vertical" gap="lg" horizontalReSize="fill">
222
+ <rn-text size="title" weight="bold">
223
+ 東京ドーム 公演前物販 A ゲート 整理券
224
+ </rn-text>
225
+
226
+ <!-- 整理番号: 画面の主役。caption ラベル + 巨大な番号を中央に -->
227
+ <rn-stack
228
+ direction="vertical"
229
+ horizontalAlign="center"
230
+ horizontalReSize="fill"
231
+ >
232
+ <rn-text size="subtitle" color="subtle">あなたの整理番号</rn-text>
233
+ <!-- 整理番号は画面の主役。headline をさらに拡大して視認性を最大化 -->
234
+ <rn-text
235
+ size="headline"
236
+ weight="bold"
237
+ fontType="accent"
238
+ style="font-size: 7rem; line-height: 1.1;"
239
+ >
240
+ 150
241
+ </rn-text>
242
+ <rn-label size="lg" color="success" variant="solid">
243
+ 呼び出し待ち
244
+ </rn-label>
245
+ </rn-stack>
246
+
247
+ <!-- 現在の呼び出し範囲: 数値を強調 -->
248
+ <rn-stack
249
+ gap="xs"
250
+ horizontalAlign="center"
251
+ verticalAlign="baseline"
252
+ horizontalReSize="fill"
253
+ >
254
+ <rn-text size="subtitle">現在</rn-text>
255
+ <rn-text size="subtitle" weight="bold">30〜90</rn-text>
256
+ <rn-text size="subtitle">番を呼び出し中</rn-text>
257
+ </rn-stack>
258
+
259
+ <!-- 案内系の Callout は関連が近いため gap を詰めてグルーピング -->
260
+ <rn-stack direction="vertical" horizontalReSize="fill">
261
+ <!-- 自動切り替えの案内 -->
262
+ <rn-callout
263
+ message="お呼び出し時、この画面は自動で切り替わります。"
264
+ />
265
+
266
+ <!-- 通知設定への導線: action スロットに CTA -->
267
+ <rn-callout
268
+ color="warning"
269
+ variant="tonal"
270
+ icon="bell-outline"
271
+ title="お呼び出し通知を設定"
272
+ message="メールでお呼び出しの通知を受け取れます。"
273
+ >
274
+ <template #action>
275
+ <rn-button color="warning" size="sm">設定する</rn-button>
276
+ </template>
277
+ </rn-callout>
278
+ </rn-stack>
279
+ </rn-stack>
280
+ </rn-card>
281
+ </rn-app-body>
282
+
283
+ <rn-app-bottom-bar>
284
+ <!-- タブ上に常駐する案内バー。オーダーシートの事前作成を訴求 -->
285
+ <!-- info(default): 本文とタブ帯の境界に置く帯。ベタ塗りでゾーンの区切りを明確にする -->
286
+ <rn-announce-bar
287
+ color="info"
288
+ title="オーダーシートを作成しましょう"
289
+ subtitle="事前に作成するとスムーズにお会計ができます"
290
+ url="#"
291
+ />
292
+ <rn-tabs variant="icon" :isStretched="true">
293
+ <rn-tab icon="ticket-outline" label="整理券" :active="true" />
294
+ <rn-tab icon="tote-bag-outline" label="オーダーシート" />
295
+ </rn-tabs>
296
+ </rn-app-bottom-bar>
297
+ </rn-app-frame>
298
+ `,
299
+ }),
300
+ }
@@ -33,37 +33,37 @@ const mockProducts = [
33
33
  product_id: '1',
34
34
  title: 'オリジナルTシャツ',
35
35
  price_sale: 3980,
36
- img_urls: ['https://placehold.co/400x400?text=T-shirt'],
36
+ img_urls: ['/placeholder-400x400.svg'],
37
37
  },
38
38
  {
39
39
  product_id: '2',
40
40
  title: 'アクリルキーホルダー',
41
41
  price_sale: 1200,
42
- img_urls: ['https://placehold.co/400x400?text=Keychain'],
42
+ img_urls: ['/placeholder-400x400.svg'],
43
43
  },
44
44
  {
45
45
  product_id: '3',
46
46
  title: 'トートバッグ',
47
47
  price_sale: 2500,
48
- img_urls: ['https://placehold.co/400x400?text=Tote+Bag'],
48
+ img_urls: ['/placeholder-400x400.svg'],
49
49
  },
50
50
  {
51
51
  product_id: '4',
52
52
  title: 'ステッカーセット',
53
53
  price_sale: 800,
54
- img_urls: ['https://placehold.co/400x400?text=Stickers'],
54
+ img_urls: ['/placeholder-400x400.svg'],
55
55
  },
56
56
  {
57
57
  product_id: '5',
58
58
  title: 'マグカップ',
59
59
  price_sale: 1800,
60
- img_urls: ['https://placehold.co/400x400?text=Mug'],
60
+ img_urls: ['/placeholder-400x400.svg'],
61
61
  },
62
62
  {
63
63
  product_id: '6',
64
64
  title: 'ポスター A2',
65
65
  price_sale: 1500,
66
- img_urls: ['https://placehold.co/400x400?text=Poster'],
66
+ img_urls: ['/placeholder-400x400.svg'],
67
67
  },
68
68
  ]
69
69
 
@@ -94,7 +94,7 @@ export const トップページ: Story = {
94
94
 
95
95
  <rn-hero
96
96
  layout="overlay"
97
- media="https://placehold.co/1200x600?text=Hero+Image"
97
+ media="/placeholder-1200x600.svg"
98
98
  eyebrow="NEW ARRIVAL"
99
99
  title="Spring Collection 2025"
100
100
  subtitle="新作アイテムが続々入荷"
@@ -129,7 +129,7 @@ export const トップページ: Story = {
129
129
  </div>
130
130
 
131
131
  <rn-banner
132
- imageUrl="https://placehold.co/1200x400?text=Campaign+Banner"
132
+ imageUrl="/placeholder-1200x400.svg"
133
133
  title="コラボレーション企画"
134
134
  description="人気クリエイター × ブランドの限定コラボアイテム"
135
135
  variant="overlay"
@@ -1,71 +0,0 @@
1
- var l = Object.defineProperty;
2
- var i = (e, r, t) => r in e ? l(e, r, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[r] = t;
3
- var n = (e, r, t) => i(e, typeof r != "symbol" ? r + "" : r, t);
4
- class u {
5
- constructor(r) {
6
- n(this, "_value");
7
- this._value = c(r), this.init();
8
- }
9
- init() {
10
- }
11
- get value() {
12
- return this._value;
13
- }
14
- toString() {
15
- return String(this.value);
16
- }
17
- toJSON() {
18
- return this.value;
19
- }
20
- }
21
- function c(e) {
22
- return e instanceof u ? e.value : e;
23
- }
24
- const h = "ja-JP", m = "JPY";
25
- class v extends u {
26
- constructor(t, {
27
- locale: a = h,
28
- currency: o = m
29
- } = {}) {
30
- super(t);
31
- n(this, "locale");
32
- n(this, "currency");
33
- this.locale = a, this.currency = o;
34
- }
35
- toString() {
36
- let a = new Intl.NumberFormat(this.locale, {
37
- style: "currency",
38
- currency: this.currency
39
- }).format(this.value);
40
- return this.currency === "JPY" && (a = a.replace(/\uFFE5|\u00A5/g, "¥")), a;
41
- }
42
- }
43
- const f = "ja-JP";
44
- class s extends u {
45
- constructor(t, { locale: a = f } = {}) {
46
- super(t);
47
- n(this, "locale");
48
- this.locale = a;
49
- }
50
- add(t) {
51
- return new s(this.value + c(t));
52
- }
53
- subtract(t) {
54
- return new s(this.value - c(t));
55
- }
56
- toString() {
57
- return new Intl.NumberFormat(this.locale).format(this.value);
58
- }
59
- toPercentageString() {
60
- return new Intl.NumberFormat(this.locale, {
61
- style: "percent",
62
- maximumSignificantDigits: 3
63
- }).format(this.value);
64
- }
65
- }
66
- export {
67
- v as C,
68
- s as N,
69
- u as V,
70
- c as g
71
- };
@@ -1,259 +0,0 @@
1
- import type { Meta, StoryObj } from '@storybook/vue3-vite'
2
- import SnsLink, { SnsLinkProps } from '@/components/features/SnsLink.vue'
3
- import { ColorOptions, SNSOptions } from '@/constants'
4
- import { Color } from '@/types'
5
-
6
- const meta: Meta<typeof SnsLink> = {
7
- title: 'Features/SnsLink',
8
- component: SnsLink,
9
- tags: ['autodocs'],
10
- argTypes: {
11
- type: {
12
- control: 'select',
13
- options: Object.keys(SNSOptions),
14
- },
15
- href: {
16
- control: 'text',
17
- },
18
- color: {
19
- control: 'select',
20
- options: Object.keys(ColorOptions) as Color[],
21
- },
22
- size: {
23
- control: 'select',
24
- options: ['xs', 'sm', 'md', 'lg', 'xl'],
25
- },
26
- target: {
27
- control: 'select',
28
- options: ['_blank', '_self'],
29
- },
30
- variant: {
31
- control: 'select',
32
- options: ['icon', 'label'],
33
- },
34
- },
35
- args: {
36
- type: 'x-twitter',
37
- href: '#',
38
- color: 'default',
39
- size: 'md',
40
- target: '_blank',
41
- variant: 'icon',
42
- },
43
- }
44
-
45
- export default meta
46
- type StoryArgs = SnsLinkProps
47
- type Story = StoryObj<StoryArgs>
48
- type OverridesStory = Omit<Story, 'argTypes'> & {
49
- argTypes?: Record<string, any>
50
- }
51
-
52
- export const 基本: OverridesStory = {
53
- args: {},
54
- argTypes: {
55
- default: { table: { disable: true } },
56
- },
57
- render: (args: StoryArgs) => ({
58
- components: { 'rn-sns-link': SnsLink },
59
- setup() {
60
- return { args }
61
- },
62
- template: /* html */ `
63
- <div class='sb-canvas'>
64
- <rn-sns-link
65
- :type="args.type"
66
- :href="args.href"
67
- :color="args.color"
68
- :size="args.size"
69
- :target="args.target"
70
- :variant="args.variant"
71
- />
72
- </div>
73
- `,
74
- }),
75
- }
76
-
77
- export const アイコン一覧: OverridesStory = {
78
- args: {
79
- variant: 'icon',
80
- size: 'lg',
81
- },
82
- argTypes: {
83
- default: { table: { disable: true } },
84
- },
85
- render: (args: StoryArgs) => ({
86
- components: { 'rn-sns-link': SnsLink },
87
- setup() {
88
- return { args }
89
- },
90
- template: /* html */ `
91
- <div class='sb-canvas' style='display: flex; gap: 16px; align-items: center;'>
92
- <rn-sns-link
93
- type="x-twitter"
94
- href="#"
95
- :size="args.size"
96
- :variant="args.variant"
97
- />
98
- <rn-sns-link
99
- type="youtube"
100
- href="#"
101
- :size="args.size"
102
- :variant="args.variant"
103
- />
104
- <rn-sns-link
105
- type="instagram"
106
- href="#"
107
- :size="args.size"
108
- :variant="args.variant"
109
- />
110
- <rn-sns-link
111
- type="tiktok"
112
- href="#"
113
- :size="args.size"
114
- :variant="args.variant"
115
- />
116
- <rn-sns-link
117
- type="facebook"
118
- href="#"
119
- :size="args.size"
120
- :variant="args.variant"
121
- />
122
- <rn-sns-link
123
- type="line"
124
- href="#"
125
- :size="args.size"
126
- :variant="args.variant"
127
- />
128
- <rn-sns-link
129
- type="pixiv"
130
- href="#"
131
- :size="args.size"
132
- :variant="args.variant"
133
- />
134
- <rn-sns-link
135
- type="twitch"
136
- href="#"
137
- :size="args.size"
138
- :variant="args.variant"
139
- />
140
- <rn-sns-link
141
- type="spotify"
142
- href="#"
143
- :size="args.size"
144
- :variant="args.variant"
145
- />
146
- <rn-sns-link
147
- type="nicovideo"
148
- href="#"
149
- :size="args.size"
150
- :variant="args.variant"
151
- />
152
- <rn-sns-link
153
- type="music_line"
154
- href="#"
155
- :size="args.size"
156
- :variant="args.variant"
157
- />
158
- <rn-sns-link
159
- type="music_apple"
160
- href="#"
161
- :size="args.size"
162
- :variant="args.variant"
163
- />
164
- </div>
165
- `,
166
- }),
167
- }
168
-
169
- export const ラベル付き: OverridesStory = {
170
- args: {
171
- variant: 'label',
172
- size: 'md',
173
- },
174
- argTypes: {
175
- default: { table: { disable: true } },
176
- },
177
- render: (args: StoryArgs) => ({
178
- components: { 'rn-sns-link': SnsLink },
179
- setup() {
180
- return { args }
181
- },
182
- template: /* html */ `
183
- <div class='sb-canvas' style='display: flex; flex-direction: column; gap: 12px;'>
184
- <rn-sns-link
185
- type="x-twitter"
186
- href="#"
187
- :size="args.size"
188
- :variant="args.variant"
189
- />
190
- <rn-sns-link
191
- type="youtube"
192
- href="#"
193
- :size="args.size"
194
- :variant="args.variant"
195
- />
196
- <rn-sns-link
197
- type="instagram"
198
- href="#"
199
- :size="args.size"
200
- :variant="args.variant"
201
- />
202
- <rn-sns-link
203
- type="tiktok"
204
- href="#"
205
- :size="args.size"
206
- :variant="args.variant"
207
- />
208
- <rn-sns-link
209
- type="facebook"
210
- href="#"
211
- :size="args.size"
212
- :variant="args.variant"
213
- />
214
- <rn-sns-link
215
- type="line"
216
- href="#"
217
- :size="args.size"
218
- :variant="args.variant"
219
- />
220
- <rn-sns-link
221
- type="pixiv"
222
- href="#"
223
- :size="args.size"
224
- :variant="args.variant"
225
- />
226
- <rn-sns-link
227
- type="twitch"
228
- href="#"
229
- :size="args.size"
230
- :variant="args.variant"
231
- />
232
- <rn-sns-link
233
- type="spotify"
234
- href="#"
235
- :size="args.size"
236
- :variant="args.variant"
237
- />
238
- <rn-sns-link
239
- type="nicovideo"
240
- href="#"
241
- :size="args.size"
242
- :variant="args.variant"
243
- />
244
- <rn-sns-link
245
- type="music_line"
246
- href="#"
247
- :size="args.size"
248
- :variant="args.variant"
249
- />
250
- <rn-sns-link
251
- type="music_apple"
252
- href="#"
253
- :size="args.size"
254
- :variant="args.variant"
255
- />
256
- </div>
257
- `,
258
- }),
259
- }