@reni-corp/reni-2c-ui 0.4.10 → 0.4.12

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 (90) 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/CategoryBanner.vue.d.ts +1 -1
  27. package/dist/components/features/CategoryBanner.vue.d.ts.map +1 -1
  28. package/dist/components/features/ImageGrid.vue.d.ts +1 -1
  29. package/dist/components/features/ImageGrid.vue.d.ts.map +1 -1
  30. package/dist/components/features/ProductList.vue.d.ts +3 -0
  31. package/dist/components/features/ProductList.vue.d.ts.map +1 -1
  32. package/dist/components/features/ProductListItem.vue.d.ts +21 -1
  33. package/dist/components/features/ProductListItem.vue.d.ts.map +1 -1
  34. package/dist/components/features/ProductPurchase.vue.d.ts +1 -1
  35. package/dist/components/features/SnsLink.vue.d.ts +1 -1
  36. package/dist/components/features/SnsLink.vue.d.ts.map +1 -1
  37. package/dist/components/foundation/AppBar.vue.d.ts +10 -1
  38. package/dist/components/foundation/AppBar.vue.d.ts.map +1 -1
  39. package/dist/components/foundation/AppBottomBar.vue.d.ts +23 -0
  40. package/dist/components/foundation/AppBottomBar.vue.d.ts.map +1 -0
  41. package/dist/components/foundation/AppFooter.vue.d.ts +1 -1
  42. package/dist/components/foundation/AppFooter.vue.d.ts.map +1 -1
  43. package/dist/components/interactive/Disclosure.vue.d.ts +4 -4
  44. package/dist/components/interactive/Disclosure.vue.d.ts.map +1 -1
  45. package/dist/components/interactive/Tab.vue.d.ts +2 -2
  46. package/dist/components/interactive/Tab.vue.d.ts.map +1 -1
  47. package/dist/components/layouts/List.vue.d.ts +1 -1
  48. package/dist/components/layouts/List.vue.d.ts.map +1 -1
  49. package/dist/components/renderless/ItemFilter.vue.d.ts +1 -1
  50. package/dist/components/renderless/ItemFilter.vue.d.ts.map +1 -1
  51. package/dist/index.d.ts +12 -3
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.es.js +7537 -10611
  54. package/dist/placeholder-1200x400.svg +4 -0
  55. package/dist/placeholder-1200x600.svg +4 -0
  56. package/dist/placeholder-400x400.svg +4 -0
  57. package/dist/placeholder-600x600.svg +4 -0
  58. package/dist/placeholder-800x450.svg +4 -0
  59. package/dist/placeholder-800x600.svg +4 -0
  60. package/dist/script.es.js +8009 -11085
  61. package/dist/script.umd.js +20 -588
  62. package/dist/style.css +1 -1
  63. package/dist/utils.d.ts.map +1 -1
  64. package/package.json +10 -10
  65. package/src/stories/AppBar.stories.ts +8 -8
  66. package/src/stories/AppBottomBar.stories.ts +443 -0
  67. package/src/stories/AppLayout.stories.ts +17 -27
  68. package/src/stories/Banner.stories.ts +5 -5
  69. package/src/stories/Callout.stories.ts +286 -0
  70. package/src/stories/Card.stories.ts +5 -5
  71. package/src/stories/ComboBox.stories.ts +1 -1
  72. package/src/stories/Disclosure.stories.ts +1 -1
  73. package/src/stories/Drawer.stories.ts +2 -2
  74. package/src/stories/Hero.stories.ts +5 -5
  75. package/src/stories/Icon.stories.ts +10 -88
  76. package/src/stories/Image.stories.ts +5 -1
  77. package/src/stories/ItemFilter.stories.ts +2 -2
  78. package/src/stories/Label.stories.ts +2 -1
  79. package/src/stories/List.stories.ts +4 -4
  80. package/src/stories/Modal.stories.ts +3 -3
  81. package/src/stories/ProductList.stories.ts +72 -6
  82. package/src/stories/ProductPurchase.stories.ts +3 -3
  83. package/src/stories/Tab.stories.ts +1 -1
  84. package/src/stories/TabGroup.stories.ts +5 -5
  85. package/src/stories/Tabs.stories.ts +13 -4
  86. package/src/stories/compositions/DomainMixedHome.stories.ts +217 -0
  87. package/src/stories/compositions/EventPage.stories.ts +2 -2
  88. package/src/stories/compositions/TicketPage.stories.ts +300 -0
  89. package/src/stories/compositions/TopPage.stories.ts +8 -8
  90. package/src/stories/SnsLink.stories.ts +0 -259
@@ -110,15 +110,15 @@ const generateMockProducts = (count: number) => {
110
110
  product_code: `ZMY-DESIGN3-${String(i).padStart(3, '0')}`,
111
111
  title: `ZUTOMAYO 商品 ${i}`,
112
112
  title2: `THE WORLD IS CHANGING ${i}`,
113
- price_sale: Math.floor(Math.random() * 8000) + 1000,
114
- price_prefix_freeWord: '', // 空文字(CurrencyValueで円記号が自動追加される)
113
+ price_sale: 1000 + (i * 1234) % 8000,
114
+ price_prefix_freeword: '', // 空文字(CurrencyValueで円記号が自動追加される)
115
115
  slide: 1,
116
116
  product_url: `https://example.com/products/product_${i}`,
117
117
  img_urls: [
118
- `https://placehold.jp/400x400.png?text=Product${i}`,
119
- `https://placehold.jp/400x400.png?text=Image${i}-2`,
120
- `https://placehold.jp/400x400.png?text=Image${i}-3`,
121
- `https://placehold.jp/400x400.png?text=Image${i}-4`,
118
+ `/placeholder-400x400.svg`,
119
+ `/placeholder-400x400.svg`,
120
+ `/placeholder-400x400.svg`,
121
+ `/placeholder-400x400.svg`,
122
122
  ],
123
123
  label_urls: labelUrls,
124
124
  label_texts: labelTexts,
@@ -151,6 +151,45 @@ export const 基本リスト: Story = {
151
151
  }),
152
152
  }
153
153
 
154
+ export const NEWバッジ: Story = {
155
+ args: {
156
+ displayMode: 'list',
157
+ promotedLabelIds: ['NEW'],
158
+ data: (() => {
159
+ const products = generateMockProducts(8)
160
+ // 一部の商品に NEW ラベルを追加
161
+ products[0].label_texts = [
162
+ { id: 'NEW', text: 'NEW' },
163
+ ...products[0].label_texts,
164
+ ]
165
+ products[2].label_texts = [
166
+ { id: 'NEW', text: 'NEW' },
167
+ ...products[2].label_texts,
168
+ ]
169
+ products[5].label_texts = [
170
+ { id: 'NEW', text: 'NEW' },
171
+ ...products[5].label_texts,
172
+ ]
173
+ return products
174
+ })(),
175
+ },
176
+ render: (args: StoryArgs) => ({
177
+ components: {
178
+ 'rn-product-list': ProductList,
179
+ },
180
+ setup() {
181
+ return { args }
182
+ },
183
+ template: `
184
+ <div class="sb-canvas" style="padding: 20px;">
185
+ <h3>NEWバッジ(promotedLabelIds)</h3>
186
+ <p>label_texts に id: "NEW" を持つ商品に上部バッジが表示されます</p>
187
+ <rn-product-list v-bind="args" />
188
+ </div>
189
+ `,
190
+ }),
191
+ }
192
+
154
193
  export const カルーセル: Story = {
155
194
  args: {
156
195
  displayMode: 'carousel',
@@ -173,6 +212,33 @@ export const カルーセル: Story = {
173
212
  }),
174
213
  }
175
214
 
215
+ export const カルーセル_ナビ非表示: Story = {
216
+ args: {
217
+ displayMode: 'carousel',
218
+ paginationType: 'bullets',
219
+ pcRows: 1,
220
+ pcColumns: 4,
221
+ spRows: 1,
222
+ spColumns: 2,
223
+ data: generateMockProducts(4),
224
+ },
225
+ render: (args: StoryArgs) => ({
226
+ components: {
227
+ 'rn-product-list': ProductList,
228
+ },
229
+ setup() {
230
+ return { args }
231
+ },
232
+ template: `
233
+ <div class="sb-canvas" style="padding: 20px;">
234
+ <h3>カルーセル(ナビ非表示)</h3>
235
+ <p>アイテム数が1ページに収まる場合、左右の矢印が非表示になります</p>
236
+ <rn-product-list v-bind="args" />
237
+ </div>
238
+ `,
239
+ }),
240
+ }
241
+
176
242
  export const カルーセルピーク: Story = {
177
243
  args: {
178
244
  displayMode: 'carousel-peek',
@@ -96,7 +96,7 @@ const meta: Meta<typeof ProductPurchase> = {
96
96
  id: 'product-1',
97
97
  title: 'Product name',
98
98
  price: 3000,
99
- price_prefix_freeWord: '各種 ',
99
+ price_prefix_freeword: '各種 ',
100
100
  subtitle1: 'Title1',
101
101
  subtitle2: 'Title2',
102
102
  imageUrls: [
@@ -134,7 +134,7 @@ const createMockProduct = (overrides = {}) => ({
134
134
  id: 'product-1',
135
135
  title: 'オフィシャルTシャツ',
136
136
  price: 3500,
137
- price_prefix_freeWord: '各種 ',
137
+ price_prefix_freeword: '各種 ',
138
138
  subtitle1: 'RENI',
139
139
  subtitle2: 'Official Merchandise',
140
140
  imageUrls: [
@@ -158,7 +158,7 @@ const createMockProduct = (overrides = {}) => ({
158
158
  export const 価格プレフィックスなし: Story = {
159
159
  args: {
160
160
  product: createMockProduct({
161
- price_prefix_freeWord: '', // プレフィックスなし
161
+ price_prefix_freeword: '', // プレフィックスなし
162
162
  price: 2980,
163
163
  }),
164
164
  },
@@ -31,7 +31,7 @@ const meta: Meta<typeof Tab> = {
31
31
  args: {
32
32
  active: false,
33
33
  variant: 'inline',
34
- icon: 'check',
34
+ icon: 'check-outline',
35
35
  label: 'タブ',
36
36
  },
37
37
  render: (args: TabProps) => ({
@@ -47,11 +47,11 @@ type OverridesStory = Omit<Story, 'argTypes'> & {
47
47
 
48
48
  const tabLabels = ['ホーム', 'カテゴリ', 'お気に入り', 'カート', 'マイページ']
49
49
  const tabIcons: string[] = [
50
- 'check',
51
- 'check',
52
- 'check',
53
- 'check',
54
- 'check',
50
+ 'home-outline',
51
+ 'bars-outline',
52
+ 'star-outline',
53
+ 'cart-shopping-outline',
54
+ 'user-outline',
55
55
  ]
56
56
 
57
57
  export const Inline: OverridesStory = {
@@ -94,7 +94,7 @@ export const WithIconLabel: OverridesStory = {
94
94
  <rn-tab
95
95
  v-for="(_value, index) in new Array(5)"
96
96
  :active="slotProps.currentIndex === index"
97
- :icon="'check'"
97
+ :icon="'check-outline'"
98
98
  :label="'Tab ' + index"
99
99
  @click=handleVisible(index)
100
100
  />
@@ -107,6 +107,14 @@ export const WithIconLabel: OverridesStory = {
107
107
  export const Bottom: OverridesStory = {
108
108
  args: {},
109
109
  argTypes: {},
110
+ parameters: {
111
+ docs: {
112
+ description: {
113
+ story:
114
+ 'variant="icon" でボトムナビゲーション用のスタイルになります。実際のアプリでは AppBottomBar に入れて下端固定で使います。',
115
+ },
116
+ },
117
+ },
110
118
  render: (args: TabsProps) => ({
111
119
  components: { 'rn-tabs': Tabs, 'rn-tab': Tab },
112
120
  setup() {
@@ -120,13 +128,14 @@ export const Bottom: OverridesStory = {
120
128
  <div class='sb-canvas'>
121
129
  <rn-tabs
122
130
  :modelValue=current
123
- variant="bottom"
131
+ variant="icon"
132
+ :isStretched="true"
124
133
  v-slot=slotProps
125
134
  >
126
135
  <rn-tab
127
136
  v-for="(_value, index) in new Array(4)"
128
137
  :active="slotProps.currentIndex === index"
129
- :icon="'check'"
138
+ :icon="'check-outline'"
130
139
  :label="'Tab ' + index"
131
140
  @click=handleVisible(index)
132
141
  />
@@ -158,7 +167,7 @@ export const Stretched: OverridesStory = {
158
167
  <rn-tab
159
168
  v-for="(_value, index) in new Array(5)"
160
169
  :active="slotProps.currentIndex === index"
161
- :icon="'check'"
170
+ :icon="'check-outline'"
162
171
  :label="'Tab ' + index"
163
172
  @click=handleVisible(index)
164
173
  />
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Composition Story: ドメイン機能混合ホーム
3
+ *
4
+ * イベント物販アプリのホーム画面を模した構成。
5
+ * 整理券・オーダーシートという複数ドメイン機能を 1 画面に混在させて一覧する。
6
+ *
7
+ * 構成のポイント:
8
+ * - 「呼び出し中」ヒーローカード: Card に data-dark 属性 + success 背景を与え、
9
+ * ダークサーフェスのトークン切り替え(テキスト・Divider が白系に反転)を活用する実例
10
+ * - 待機中カード: Progress による呼び出し待ち人数の可視化
11
+ */
12
+ import type { Meta, StoryObj } from '@storybook/vue3-vite'
13
+ import AppFrame from '@/components/foundation/AppFrame.vue'
14
+ import AppBar from '@/components/foundation/AppBar.vue'
15
+ import AppBody from '@/components/foundation/AppBody.vue'
16
+ import Button from '@/components/elements/Button.vue'
17
+ import Label from '@/components/elements/Label.vue'
18
+ import Text from '@/components/elements/Text.vue'
19
+ import Icon from '@/components/elements/Icon.vue'
20
+ import Divider from '@/components/elements/Divider.vue'
21
+ import Progress from '@/components/elements/Progress.vue'
22
+ import Stack from '@/components/layouts/Stack.vue'
23
+ import Card from '@/components/layouts/Card.vue'
24
+ import Page from '@/components/layouts/Page.vue'
25
+
26
+ const meta: Meta = {
27
+ title: 'Example/ホーム',
28
+ parameters: {
29
+ layout: 'fullscreen',
30
+ },
31
+ }
32
+
33
+ export default meta
34
+ type Story = StoryObj
35
+
36
+ export const ドメイン機能混合: Story = {
37
+ render: () => ({
38
+ components: {
39
+ 'rn-app-frame': AppFrame,
40
+ 'rn-app-bar': AppBar,
41
+ 'rn-app-body': AppBody,
42
+ 'rn-button': Button,
43
+ 'rn-label': Label,
44
+ 'rn-text': Text,
45
+ 'rn-icon': Icon,
46
+ 'rn-divider': Divider,
47
+ 'rn-progress': Progress,
48
+ 'rn-stack': Stack,
49
+ 'rn-card': Card,
50
+ 'rn-page': Page,
51
+ },
52
+ template: /* html */ `
53
+ <rn-app-frame>
54
+ <rn-app-bar title="ホーム" />
55
+
56
+ <rn-app-body>
57
+ <rn-page>
58
+ <template #body>
59
+ <rn-stack direction="vertical" gap="md" horizontalReSize="fill">
60
+
61
+
62
+ <!-- 呼び出し中: ダークサーフェス(data-dark + success 背景) -->
63
+ <rn-card
64
+ :elevation="true"
65
+ data-dark
66
+ style="background: var(--rn-success); border: none;"
67
+ >
68
+ <rn-stack direction="vertical" gap="md" horizontalReSize="fill">
69
+ <rn-stack
70
+ direction="horizontal"
71
+ horizontalAlign="between"
72
+ verticalAlign="center"
73
+ horizontalReSize="fill"
74
+ >
75
+ <rn-label variant="outline">呼び出し中</rn-label>
76
+ </rn-stack>
77
+
78
+ <rn-stack direction="vertical" gap="xs" horizontalReSize="fill">
79
+ <rn-text size="subtitle" weight="bold">RENI Official Store</rn-text>
80
+ <rn-text size="headline" weight="bold" fontType="accent">
81
+ 142
82
+ </rn-text>
83
+ <rn-text color="subtle">
84
+ ただいまお呼び出し中です。入場口へお越しください。
85
+ </rn-text>
86
+ </rn-stack>
87
+
88
+ <!-- data-dark 配下では --rn-text-primary が白に反転し、
89
+ light ボタン(白背景)の文字が見えなくなるため明示的に戻す -->
90
+ <rn-button
91
+ block
92
+ color="light"
93
+ withArrow
94
+ style="--rn-text-primary: var(--rn-grey-800);"
95
+ >
96
+ 受け取りへ進む
97
+ </rn-button>
98
+
99
+ <rn-divider />
100
+
101
+ <rn-stack
102
+ direction="horizontal"
103
+ horizontalAlign="between"
104
+ verticalAlign="center"
105
+ horizontalReSize="fill"
106
+ >
107
+ <rn-stack gap="xs" verticalAlign="center">
108
+ <rn-icon icon="clipboard-outline" color="inherit" />
109
+ <rn-text size="body" weight="bold">
110
+ オーダーシート
111
+ </rn-text>
112
+ </rn-stack>
113
+ <rn-stack gap="xs" verticalAlign="center">
114
+ <rn-text size="body" weight="bold">4点 · ¥8,400</rn-text>
115
+ <rn-icon icon="chevron-right-outline" color="inherit" />
116
+ </rn-stack>
117
+ </rn-stack>
118
+ </rn-stack>
119
+ </rn-card>
120
+
121
+ <!-- 呼び出し待ち: Progress で待ち状況を可視化 -->
122
+ <rn-card :elevation="false">
123
+ <rn-stack direction="vertical" gap="md" horizontalReSize="fill">
124
+ <rn-stack gap="sm" verticalAlign="center" direction="vertical">
125
+ <rn-text size="subtitle" weight="bold">Sampleストア A</rn-text>
126
+ <rn-text size="caption" color="subtle">
127
+ 幕張メッセ 9-11 ホール · 物販
128
+ </rn-text>
129
+ </rn-stack>
130
+
131
+ <rn-divider />
132
+
133
+ <rn-stack
134
+ direction="horizontal"
135
+ horizontalAlign="between"
136
+ verticalAlign="center"
137
+ horizontalReSize="fill"
138
+ >
139
+ <rn-text size="caption" color="subtle">マイ整理券</rn-text>
140
+ <rn-label size="sm" color="success">呼び出し待ち</rn-label>
141
+ </rn-stack>
142
+
143
+ <rn-stack
144
+ direction="horizontal"
145
+ horizontalAlign="between"
146
+ verticalAlign="center"
147
+ horizontalReSize="fill"
148
+ >
149
+ <rn-text size="headline" weight="bold" fontType="accent">
150
+ C-124
151
+ </rn-text>
152
+ <rn-icon icon="chevron-right-outline" color="subtle" />
153
+ </rn-stack>
154
+
155
+ <rn-stack gap="sm" verticalAlign="center" horizontalReSize="fill">
156
+ <div style="flex: 1;">
157
+ <rn-progress :value="6" :max="12" color="success" />
158
+ </div>
159
+ <rn-text size="caption" color="subtle">あと 6人</rn-text>
160
+ </rn-stack>
161
+
162
+ <rn-divider />
163
+
164
+ <rn-stack
165
+ direction="horizontal"
166
+ horizontalAlign="between"
167
+ verticalAlign="center"
168
+ horizontalReSize="fill"
169
+ >
170
+ <rn-stack gap="xs" verticalAlign="center">
171
+ <rn-icon icon="plus-outline" color="success" />
172
+ <rn-text size="body" weight="bold" color="success">
173
+ オーダーシートを作成
174
+ </rn-text>
175
+ </rn-stack>
176
+ <rn-text size="caption" color="subtle">
177
+ 待ち時間に注文を準備
178
+ </rn-text>
179
+ </rn-stack>
180
+ </rn-stack>
181
+ </rn-card>
182
+
183
+ <!-- オーダーシートのみ -->
184
+ <rn-card :elevation="false">
185
+ <rn-stack direction="vertical" gap="md" horizontalReSize="fill">
186
+ <rn-stack gap="sm" verticalAlign="center" direction="vertical">
187
+ <rn-text size="subtitle" weight="bold">Sampleストア B</rn-text>
188
+ <rn-text size="caption" color="subtle">
189
+ 渋谷 PARCO 4F · 期間限定
190
+ </rn-text>
191
+ </rn-stack>
192
+
193
+ <rn-divider />
194
+
195
+ <rn-stack
196
+ direction="horizontal"
197
+ horizontalAlign="between"
198
+ verticalAlign="center"
199
+ horizontalReSize="fill"
200
+ >
201
+ <rn-text size="body" color="subtle">オーダーシート</rn-text>
202
+ <rn-stack gap="xs" verticalAlign="center">
203
+ <rn-text size="body" weight="bold">4点 · ¥8,400</rn-text>
204
+ <rn-icon icon="chevron-right-outline" color="subtle" />
205
+ </rn-stack>
206
+ </rn-stack>
207
+ </rn-stack>
208
+ </rn-card>
209
+
210
+ </rn-stack>
211
+ </template>
212
+ </rn-page>
213
+ </rn-app-body>
214
+ </rn-app-frame>
215
+ `,
216
+ }),
217
+ }
@@ -116,14 +116,14 @@ export const イベント一覧: Story = {
116
116
  :active="slotProps.currentIndex === 0"
117
117
  @click="handleTabChange(0)"
118
118
  >
119
- <rn-icon icon="calendar" />
119
+ <rn-icon icon="calendar-outline" />
120
120
  開催予定
121
121
  </rn-tab>
122
122
  <rn-tab
123
123
  :active="slotProps.currentIndex === 1"
124
124
  @click="handleTabChange(1)"
125
125
  >
126
- <rn-icon icon="check-circle" />
126
+ <rn-icon icon="circle-check-outline" />
127
127
  開催済み
128
128
  </rn-tab>
129
129
  </rn-tabs>