@reni-corp/reni-2c-ui 0.4.11 → 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.
- package/dist/components/elements/Callout.vue.d.ts +47 -0
- package/dist/components/elements/Callout.vue.d.ts.map +1 -0
- package/dist/components/elements/CheckBox.vue.d.ts.map +1 -1
- package/dist/components/elements/ComboBox.vue.d.ts +3 -3
- package/dist/components/elements/ComboBox.vue.d.ts.map +1 -1
- package/dist/components/elements/Icon.vue.d.ts +2 -2
- package/dist/components/elements/Icon.vue.d.ts.map +1 -1
- package/dist/components/elements/Image.vue.d.ts +2 -2
- package/dist/components/elements/Image.vue.d.ts.map +1 -1
- package/dist/components/elements/Label.vue.d.ts +2 -2
- package/dist/components/elements/Label.vue.d.ts.map +1 -1
- package/dist/components/elements/Pagination.vue.d.ts.map +1 -1
- package/dist/components/elements/SelectBox.vue.d.ts +1 -1
- package/dist/components/elements/SelectBox.vue.d.ts.map +1 -1
- package/dist/components/elements/SpinButton.vue.d.ts.map +1 -1
- package/dist/components/elements/Switch.vue.d.ts +19 -0
- package/dist/components/elements/Switch.vue.d.ts.map +1 -0
- package/dist/components/elements/Text.vue.d.ts +1 -1
- package/dist/components/elements/Text.vue.d.ts.map +1 -1
- package/dist/components/elements/TextArea.vue.d.ts +35 -0
- package/dist/components/elements/TextArea.vue.d.ts.map +1 -0
- package/dist/components/elements/TextField.vue.d.ts +1 -1
- package/dist/components/elements/TextField.vue.d.ts.map +1 -1
- package/dist/components/elements/ToolChip.vue.d.ts +1 -1
- package/dist/components/elements/ToolChip.vue.d.ts.map +1 -1
- package/dist/components/features/CategoryBanner.vue.d.ts +1 -1
- package/dist/components/features/CategoryBanner.vue.d.ts.map +1 -1
- package/dist/components/features/ImageGrid.vue.d.ts +1 -1
- package/dist/components/features/ImageGrid.vue.d.ts.map +1 -1
- package/dist/components/features/ProductList.vue.d.ts +3 -0
- package/dist/components/features/ProductList.vue.d.ts.map +1 -1
- package/dist/components/features/ProductListItem.vue.d.ts +21 -1
- package/dist/components/features/ProductListItem.vue.d.ts.map +1 -1
- package/dist/components/features/SnsLink.vue.d.ts +1 -1
- package/dist/components/features/SnsLink.vue.d.ts.map +1 -1
- package/dist/components/foundation/AppBar.vue.d.ts +10 -1
- package/dist/components/foundation/AppBar.vue.d.ts.map +1 -1
- package/dist/components/foundation/AppBottomBar.vue.d.ts +23 -0
- package/dist/components/foundation/AppBottomBar.vue.d.ts.map +1 -0
- package/dist/components/foundation/AppFooter.vue.d.ts +1 -1
- package/dist/components/foundation/AppFooter.vue.d.ts.map +1 -1
- package/dist/components/interactive/Disclosure.vue.d.ts +4 -4
- package/dist/components/interactive/Disclosure.vue.d.ts.map +1 -1
- package/dist/components/interactive/Tab.vue.d.ts +2 -2
- package/dist/components/interactive/Tab.vue.d.ts.map +1 -1
- package/dist/components/layouts/List.vue.d.ts +1 -1
- package/dist/components/layouts/List.vue.d.ts.map +1 -1
- package/dist/components/renderless/ItemFilter.vue.d.ts +1 -1
- package/dist/components/renderless/ItemFilter.vue.d.ts.map +1 -1
- package/dist/index.d.ts +12 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +7537 -10611
- package/dist/placeholder-1200x400.svg +4 -0
- package/dist/placeholder-1200x600.svg +4 -0
- package/dist/placeholder-400x400.svg +4 -0
- package/dist/placeholder-600x600.svg +4 -0
- package/dist/placeholder-800x450.svg +4 -0
- package/dist/placeholder-800x600.svg +4 -0
- package/dist/script.es.js +8009 -11085
- package/dist/script.umd.js +20 -588
- package/dist/style.css +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/package.json +6 -9
- package/src/stories/AppBar.stories.ts +8 -8
- package/src/stories/AppBottomBar.stories.ts +443 -0
- package/src/stories/AppLayout.stories.ts +17 -27
- package/src/stories/Banner.stories.ts +5 -5
- package/src/stories/Callout.stories.ts +286 -0
- package/src/stories/Card.stories.ts +5 -5
- package/src/stories/ComboBox.stories.ts +1 -1
- package/src/stories/Disclosure.stories.ts +1 -1
- package/src/stories/Drawer.stories.ts +2 -2
- package/src/stories/Hero.stories.ts +5 -5
- package/src/stories/Icon.stories.ts +10 -88
- package/src/stories/Image.stories.ts +5 -1
- package/src/stories/Label.stories.ts +2 -1
- package/src/stories/List.stories.ts +4 -4
- package/src/stories/Modal.stories.ts +3 -3
- package/src/stories/ProductList.stories.ts +71 -5
- package/src/stories/Tab.stories.ts +1 -1
- package/src/stories/TabGroup.stories.ts +5 -5
- package/src/stories/Tabs.stories.ts +13 -4
- package/src/stories/compositions/DomainMixedHome.stories.ts +217 -0
- package/src/stories/compositions/EventPage.stories.ts +2 -2
- package/src/stories/compositions/TicketPage.stories.ts +300 -0
- package/src/stories/compositions/TopPage.stories.ts +8 -8
- package/src/stories/SnsLink.stories.ts +0 -259
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reni-corp/reni-2c-ui",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.12",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/script.umd.js",
|
|
6
6
|
"module": "./dist/index.es.js",
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
"types": "./dist/valueObjects.d.ts",
|
|
16
16
|
"import": "./dist/valueObjects.es.js"
|
|
17
17
|
},
|
|
18
|
+
"./composables": {
|
|
19
|
+
"types": "./dist/composables.d.ts",
|
|
20
|
+
"import": "./dist/composables.es.js"
|
|
21
|
+
},
|
|
18
22
|
"./constants": {
|
|
19
23
|
"types": "./dist/constants.d.ts",
|
|
20
24
|
"import": "./dist/constants.es.js"
|
|
@@ -57,14 +61,7 @@
|
|
|
57
61
|
"test:vrt:docker:update": "docker run --rm -v $(pwd):/work -w /work mcr.microsoft.com/playwright:v1.58.2-noble npx playwright test --config playwright.config.ts --update-snapshots"
|
|
58
62
|
},
|
|
59
63
|
"dependencies": {
|
|
60
|
-
"@
|
|
61
|
-
"@fortawesome/fontawesome-svg-core": "^6.7.2",
|
|
62
|
-
"@fortawesome/free-brands-svg-icons": "^6.4.2",
|
|
63
|
-
"@fortawesome/free-regular-svg-icons": "^6.4.2",
|
|
64
|
-
"@fortawesome/free-solid-svg-icons": "^6.7.2",
|
|
65
|
-
"@fortawesome/pro-regular-svg-icons": "^6.7.2",
|
|
66
|
-
"@fortawesome/vue-fontawesome": "^3.0.8",
|
|
67
|
-
"@reni-corp/mani-editor": "^0.1.6",
|
|
64
|
+
"@reni-corp/reni-icon": "1.0.6",
|
|
68
65
|
"@vee-validate/i18n": "^4.15.1",
|
|
69
66
|
"@vee-validate/rules": "^4.11.3",
|
|
70
67
|
"@vueuse/components": "^10.5.0",
|
|
@@ -75,11 +75,11 @@ const sampleMenu: AppBarMenuItem[] = [
|
|
|
75
75
|
const sampleActions: AppBarAction[] = [
|
|
76
76
|
{
|
|
77
77
|
title: '検索',
|
|
78
|
-
icon:
|
|
78
|
+
icon: 'magnifying-glass-outline',
|
|
79
79
|
action: () => alert('検索'),
|
|
80
80
|
},
|
|
81
|
-
{ title: 'アカウント', icon:
|
|
82
|
-
{ title: 'カート', icon:
|
|
81
|
+
{ title: 'アカウント', icon: 'user-outline', url: '/account' },
|
|
82
|
+
{ title: 'カート', icon: 'cart-shopping-outline', url: '/cart' },
|
|
83
83
|
]
|
|
84
84
|
|
|
85
85
|
// ★ Defaultを最初に配置(autodocsのPrimary storyになる)
|
|
@@ -166,9 +166,9 @@ export const Slotカスタマイズ: OverridesStory = {
|
|
|
166
166
|
</rn-stack>
|
|
167
167
|
</template>
|
|
168
168
|
<template #actions>
|
|
169
|
-
<rn-icon
|
|
170
|
-
<rn-icon
|
|
171
|
-
<rn-icon
|
|
169
|
+
<rn-icon icon="magnifying-glass-outline" />
|
|
170
|
+
<rn-icon icon="user-outline" />
|
|
171
|
+
<rn-icon icon="cart-shopping-outline" />
|
|
172
172
|
</template>
|
|
173
173
|
</rn-app-bar>
|
|
174
174
|
</div>
|
|
@@ -194,10 +194,10 @@ export const Slotのみ: OverridesStory = {
|
|
|
194
194
|
</p>
|
|
195
195
|
<rn-app-bar v-bind="args">
|
|
196
196
|
<template #title>
|
|
197
|
-
<rn-icon
|
|
197
|
+
<rn-icon icon="bars-outline" />
|
|
198
198
|
</template>
|
|
199
199
|
<template #actions>
|
|
200
|
-
<rn-icon icon="
|
|
200
|
+
<rn-icon icon="ellipsis-vertical-outline" />
|
|
201
201
|
</template>
|
|
202
202
|
</rn-app-bar>
|
|
203
203
|
</div>
|
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/vue3-vite'
|
|
2
|
+
import AppBottomBar, {
|
|
3
|
+
type AppBottomBarProps,
|
|
4
|
+
} from '@/components/foundation/AppBottomBar.vue'
|
|
5
|
+
import AppBar from '@/components/foundation/AppBar.vue'
|
|
6
|
+
import AppBody from '@/components/foundation/AppBody.vue'
|
|
7
|
+
import AppFrame from '@/components/foundation/AppFrame.vue'
|
|
8
|
+
import AnnounceBar from '@/components/features/AnnounceBar.vue'
|
|
9
|
+
import Button from '@/components/elements/Button.vue'
|
|
10
|
+
import Tabs from '@/components/interactive/Tabs.vue'
|
|
11
|
+
import Tab from '@/components/interactive/Tab.vue'
|
|
12
|
+
import { ref } from 'vue'
|
|
13
|
+
|
|
14
|
+
const meta: Meta<typeof AppBottomBar> = {
|
|
15
|
+
title: 'Foundation/AppBottomBar',
|
|
16
|
+
component: AppBottomBar,
|
|
17
|
+
tags: ['autodocs'],
|
|
18
|
+
argTypes: {
|
|
19
|
+
flat: {
|
|
20
|
+
control: 'boolean',
|
|
21
|
+
description: 'true でボーダー・影なし',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
args: {
|
|
25
|
+
flat: false,
|
|
26
|
+
},
|
|
27
|
+
parameters: {
|
|
28
|
+
docs: {
|
|
29
|
+
description: {
|
|
30
|
+
component: `
|
|
31
|
+
画面下端に固定される sticky スタック領域。\`AppFrame\` の末尾に配置し、\`position: sticky; bottom: 0\` でビューポート下端に固定されます。
|
|
32
|
+
|
|
33
|
+
中身は **任意の数のレイヤーを縦に積める Stack 構造**(\`display: flex; flex-direction: column;\`)として動作します。タブ単独はもちろん、CTA・AnnounceBar など複数のレイヤーを同居させる場合も、子要素を並べるだけで上下に積み上がります。
|
|
34
|
+
|
|
35
|
+
## 基本的な使い方(単独)
|
|
36
|
+
|
|
37
|
+
\`\`\`html
|
|
38
|
+
<rn-app-frame>
|
|
39
|
+
<rn-app-bar title="ストア名" />
|
|
40
|
+
<rn-app-body><!-- コンテンツ --></rn-app-body>
|
|
41
|
+
<rn-app-bottom-bar>
|
|
42
|
+
<rn-tabs variant="icon">
|
|
43
|
+
<rn-tab icon="home-outline" label="ホーム" :active="true" />
|
|
44
|
+
<rn-tab icon="bars-outline" label="カテゴリ" />
|
|
45
|
+
<rn-tab icon="star-outline" label="お気に入り" />
|
|
46
|
+
<rn-tab icon="user-outline" label="マイページ" />
|
|
47
|
+
</rn-tabs>
|
|
48
|
+
</rn-app-bottom-bar>
|
|
49
|
+
</rn-app-frame>
|
|
50
|
+
\`\`\`
|
|
51
|
+
|
|
52
|
+
## 複数レイヤーを Stack する
|
|
53
|
+
|
|
54
|
+
\`\`\`html
|
|
55
|
+
<rn-app-bottom-bar>
|
|
56
|
+
<rn-announce-bar v-if="announce" title="お知らせ" />
|
|
57
|
+
<PriceCta v-if="hasCta" :price="3000" />
|
|
58
|
+
<rn-tabs>...</rn-tabs>
|
|
59
|
+
</rn-app-bottom-bar>
|
|
60
|
+
\`\`\`
|
|
61
|
+
|
|
62
|
+
- 子要素の DOM 順がそのまま表示順
|
|
63
|
+
- 各レイヤーの表示・非表示は子の \`v-if\` で制御
|
|
64
|
+
- 境界線・余白は各レイヤー側の責務(AppBottomBar は外側 chrome と safe-area のみ担当)
|
|
65
|
+
|
|
66
|
+
## Props
|
|
67
|
+
- \`flat\`: 外側のボーダー・影を非表示にする(AppBar と同じ概念)
|
|
68
|
+
|
|
69
|
+
## 備考
|
|
70
|
+
- 子要素間に divider が必要な場合は、子コンポーネント側で \`border-top\` 等を持たせる
|
|
71
|
+
- iOS セーフエリア(ホームインジケーター領域)を \`env(safe-area-inset-bottom)\` で自動吸収
|
|
72
|
+
- ページごとに変わる中身(CTA 等)は \`<Teleport>\` でレイアウト内に差し込むパターンを推奨
|
|
73
|
+
`,
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export default meta
|
|
80
|
+
type StoryArgs = AppBottomBarProps
|
|
81
|
+
type Story = StoryObj<StoryArgs>
|
|
82
|
+
type OverridesStory = Omit<Story, 'argTypes'> & {
|
|
83
|
+
argTypes?: Record<string, unknown>
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const tabItems = [
|
|
87
|
+
{ icon: 'home-outline', label: 'ホーム' },
|
|
88
|
+
{ icon: 'bars-outline', label: 'カテゴリ' },
|
|
89
|
+
{ icon: 'star-outline', label: 'お気に入り' },
|
|
90
|
+
{ icon: 'user-outline', label: 'マイページ' },
|
|
91
|
+
]
|
|
92
|
+
|
|
93
|
+
export const 基本: OverridesStory = {
|
|
94
|
+
args: {},
|
|
95
|
+
argTypes: {},
|
|
96
|
+
parameters: {
|
|
97
|
+
layout: 'fullscreen',
|
|
98
|
+
},
|
|
99
|
+
render: (args) => ({
|
|
100
|
+
components: {
|
|
101
|
+
'rn-app-frame': AppFrame,
|
|
102
|
+
'rn-app-bar': AppBar,
|
|
103
|
+
'rn-app-body': AppBody,
|
|
104
|
+
'rn-app-bottom-bar': AppBottomBar,
|
|
105
|
+
'rn-tabs': Tabs,
|
|
106
|
+
'rn-tab': Tab,
|
|
107
|
+
},
|
|
108
|
+
setup() {
|
|
109
|
+
const current = ref(0)
|
|
110
|
+
const tabs = tabItems
|
|
111
|
+
return { args, current, tabs }
|
|
112
|
+
},
|
|
113
|
+
template: /* html */ `
|
|
114
|
+
<rn-app-frame>
|
|
115
|
+
<rn-app-bar title="ストア名" />
|
|
116
|
+
<rn-app-body>
|
|
117
|
+
<div style="display: flex; flex-direction: column; gap: 16px;">
|
|
118
|
+
<p>コンテンツエリア。スクロールしてもボトムバーが下端に固定されます。</p>
|
|
119
|
+
<div
|
|
120
|
+
v-for="i in 10"
|
|
121
|
+
:key="i"
|
|
122
|
+
style="height: 80px; background: var(--rn-bg-surface); border-radius: 8px; display: flex; align-items: center; justify-content: center; color: var(--rn-text-tertiary);"
|
|
123
|
+
>
|
|
124
|
+
コンテンツ {{ i }}
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
</rn-app-body>
|
|
128
|
+
<rn-app-bottom-bar v-bind="args">
|
|
129
|
+
<rn-tabs variant="icon" :isStretched="true">
|
|
130
|
+
<rn-tab
|
|
131
|
+
v-for="(tab, index) in tabs"
|
|
132
|
+
:key="index"
|
|
133
|
+
:icon="tab.icon"
|
|
134
|
+
:label="tab.label"
|
|
135
|
+
:active="current === index"
|
|
136
|
+
@click="current = index"
|
|
137
|
+
/>
|
|
138
|
+
</rn-tabs>
|
|
139
|
+
</rn-app-bottom-bar>
|
|
140
|
+
</rn-app-frame>
|
|
141
|
+
`,
|
|
142
|
+
}),
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export const CTAとタブをStackする: OverridesStory = {
|
|
146
|
+
args: {},
|
|
147
|
+
argTypes: {},
|
|
148
|
+
parameters: {
|
|
149
|
+
layout: 'fullscreen',
|
|
150
|
+
docs: {
|
|
151
|
+
description: {
|
|
152
|
+
story: `
|
|
153
|
+
ページ固有の主アクション(CTA)とグローバルタブを 1 つの \`AppBottomBar\` に積むパターン。整理券ページや商品詳細ページなど、購買・申し込み導線をタブと併存させる典型構成。
|
|
154
|
+
|
|
155
|
+
\`\`\`vue
|
|
156
|
+
<rn-app-bottom-bar>
|
|
157
|
+
<div style="padding: 12px 16px;">
|
|
158
|
+
<rn-button block color="dark">発行手続きを行う</rn-button>
|
|
159
|
+
</div>
|
|
160
|
+
<rn-tabs variant="icon" :isStretched="true">
|
|
161
|
+
<rn-tab icon="home-outline" label="ホーム" />
|
|
162
|
+
<rn-tab icon="clipboard-outline" label="オーダーシート" />
|
|
163
|
+
<rn-tab icon="tag-outline" label="整理券" :active="true" />
|
|
164
|
+
</rn-tabs>
|
|
165
|
+
</rn-app-bottom-bar>
|
|
166
|
+
\`\`\`
|
|
167
|
+
|
|
168
|
+
- CTA とタブの間に divider は置かず、AppBottomBar 外側の border-top と各レイヤーの padding で視覚的分離する
|
|
169
|
+
- CTA の左右余白は CTA 側(外側の div)の責務。AppBottomBar 自体は padding を持たない
|
|
170
|
+
- フルページの構成例は \`Example/整理券ページ\` を参照
|
|
171
|
+
`,
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
render: (args) => ({
|
|
176
|
+
components: {
|
|
177
|
+
'rn-app-frame': AppFrame,
|
|
178
|
+
'rn-app-bar': AppBar,
|
|
179
|
+
'rn-app-body': AppBody,
|
|
180
|
+
'rn-app-bottom-bar': AppBottomBar,
|
|
181
|
+
'rn-button': Button,
|
|
182
|
+
'rn-tabs': Tabs,
|
|
183
|
+
'rn-tab': Tab,
|
|
184
|
+
},
|
|
185
|
+
setup() {
|
|
186
|
+
return { args }
|
|
187
|
+
},
|
|
188
|
+
template: /* html */ `
|
|
189
|
+
<rn-app-frame>
|
|
190
|
+
<rn-app-bar title="KIRITO OFFICIAL GOODS STORE" />
|
|
191
|
+
<rn-app-body>
|
|
192
|
+
<div style="display: flex; flex-direction: column; gap: 16px;">
|
|
193
|
+
<p>ページ本体。下端には CTA(発行手続きを行う)とタブが Stack されています。</p>
|
|
194
|
+
<div
|
|
195
|
+
v-for="i in 4"
|
|
196
|
+
:key="i"
|
|
197
|
+
style="height: 80px; background: var(--rn-bg-surface); border-radius: 8px; display: flex; align-items: center; justify-content: center; color: var(--rn-text-tertiary);"
|
|
198
|
+
>
|
|
199
|
+
コンテンツ {{ i }}
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
202
|
+
</rn-app-body>
|
|
203
|
+
<rn-app-bottom-bar>
|
|
204
|
+
<div style="padding: 12px 16px;">
|
|
205
|
+
<rn-button block color="dark">発行手続きを行う</rn-button>
|
|
206
|
+
</div>
|
|
207
|
+
<rn-tabs variant="icon" :isStretched="true">
|
|
208
|
+
<rn-tab icon="home-outline" label="ホーム" />
|
|
209
|
+
<rn-tab icon="clipboard-outline" label="オーダーシート" />
|
|
210
|
+
<rn-tab icon="tag-outline" label="整理券" :active="true" />
|
|
211
|
+
</rn-tabs>
|
|
212
|
+
</rn-app-bottom-bar>
|
|
213
|
+
</rn-app-frame>
|
|
214
|
+
`,
|
|
215
|
+
}),
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
export const 複数レイヤーをStackする: OverridesStory = {
|
|
219
|
+
args: {},
|
|
220
|
+
argTypes: {},
|
|
221
|
+
parameters: {
|
|
222
|
+
layout: 'fullscreen',
|
|
223
|
+
docs: {
|
|
224
|
+
description: {
|
|
225
|
+
story: `
|
|
226
|
+
\`AppBottomBar\` は \`display: flex; flex-direction: column;\` で Stack 構造として動作するため、複数のレイヤーを子要素として並べるだけで上下に積み上がります。
|
|
227
|
+
|
|
228
|
+
\`\`\`vue
|
|
229
|
+
<rn-app-bottom-bar>
|
|
230
|
+
<rn-announce-bar v-if="announce" title="お知らせ" />
|
|
231
|
+
<PriceCta :price="3000" />
|
|
232
|
+
<rn-tabs>...</rn-tabs>
|
|
233
|
+
</rn-app-bottom-bar>
|
|
234
|
+
\`\`\`
|
|
235
|
+
|
|
236
|
+
- 子要素の DOM 順 = 表示順(上から AnnounceBar → CTA → Tabs)
|
|
237
|
+
- 各レイヤーの表示・非表示は \`v-if\` で素直に制御
|
|
238
|
+
- sticky の責務は AppBottomBar が一括で持つため、Stack 内部のレイヤー同士で位置調整は不要
|
|
239
|
+
- 境界線・余白は各レイヤー側(AnnounceBar の背景色、Tabs 自身の divider など)の責務
|
|
240
|
+
`,
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
render: (args) => ({
|
|
245
|
+
components: {
|
|
246
|
+
'rn-app-frame': AppFrame,
|
|
247
|
+
'rn-app-bar': AppBar,
|
|
248
|
+
'rn-app-body': AppBody,
|
|
249
|
+
'rn-app-bottom-bar': AppBottomBar,
|
|
250
|
+
'rn-announce-bar': AnnounceBar,
|
|
251
|
+
'rn-button': Button,
|
|
252
|
+
'rn-tabs': Tabs,
|
|
253
|
+
'rn-tab': Tab,
|
|
254
|
+
},
|
|
255
|
+
setup() {
|
|
256
|
+
const current = ref(0)
|
|
257
|
+
const tabs = tabItems
|
|
258
|
+
return { args, current, tabs }
|
|
259
|
+
},
|
|
260
|
+
template: /* html */ `
|
|
261
|
+
<rn-app-frame>
|
|
262
|
+
<rn-app-bar title="ストア名" />
|
|
263
|
+
<rn-app-body>
|
|
264
|
+
<div style="display: flex; flex-direction: column; gap: 16px;">
|
|
265
|
+
<p>AnnounceBar・CTA・Tabs の 3 レイヤーを 1 つの AppBottomBar に Stack しています。</p>
|
|
266
|
+
<div
|
|
267
|
+
v-for="i in 4"
|
|
268
|
+
:key="i"
|
|
269
|
+
style="height: 80px; background: var(--rn-bg-surface); border-radius: 8px; display: flex; align-items: center; justify-content: center; color: var(--rn-text-tertiary);"
|
|
270
|
+
>
|
|
271
|
+
商品コンテンツ {{ i }}
|
|
272
|
+
</div>
|
|
273
|
+
</div>
|
|
274
|
+
</rn-app-body>
|
|
275
|
+
<rn-app-bottom-bar>
|
|
276
|
+
<rn-announce-bar title="期間限定キャンペーン開催中" color="warning" />
|
|
277
|
+
<div style="display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; gap: 12px; border-top: 1px solid var(--rn-line-default);">
|
|
278
|
+
<div style="display: flex; flex-direction: column; line-height: 1.2;">
|
|
279
|
+
<span style="font-size: 12px; color: var(--rn-text-tertiary);">価格</span>
|
|
280
|
+
<span style="font-size: 18px; font-weight: bold;">¥3,000</span>
|
|
281
|
+
</div>
|
|
282
|
+
<rn-button>カートに追加</rn-button>
|
|
283
|
+
</div>
|
|
284
|
+
<rn-tabs variant="icon" :isStretched="true">
|
|
285
|
+
<rn-tab
|
|
286
|
+
v-for="(tab, index) in tabs"
|
|
287
|
+
:key="index"
|
|
288
|
+
:icon="tab.icon"
|
|
289
|
+
:label="tab.label"
|
|
290
|
+
:active="current === index"
|
|
291
|
+
@click="current = index"
|
|
292
|
+
/>
|
|
293
|
+
</rn-tabs>
|
|
294
|
+
</rn-app-bottom-bar>
|
|
295
|
+
</rn-app-frame>
|
|
296
|
+
`,
|
|
297
|
+
}),
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export const ページCTAをTeleportで差し込む: OverridesStory = {
|
|
301
|
+
args: {},
|
|
302
|
+
argTypes: {},
|
|
303
|
+
parameters: {
|
|
304
|
+
layout: 'fullscreen',
|
|
305
|
+
docs: {
|
|
306
|
+
description: {
|
|
307
|
+
story: `
|
|
308
|
+
ページごとに変わる CTA は、レイアウト側の \`AppBottomBar\` 内に差し込み口を置き、ページから \`<Teleport>\` で注入するパターンを推奨します。Stack 構造になっているため、タブと共存させる場合でも 1 つの \`AppBottomBar\` の中に並ぶだけで sticky の重なり問題は発生しません。
|
|
309
|
+
|
|
310
|
+
\`\`\`vue
|
|
311
|
+
<!-- レイアウト側 -->
|
|
312
|
+
<rn-app-frame>
|
|
313
|
+
<rn-app-bar />
|
|
314
|
+
<rn-app-body><slot /></rn-app-body>
|
|
315
|
+
<rn-app-bottom-bar>
|
|
316
|
+
<div id="page-cta-outlet"></div> <!-- ページCTA 差し込み口 -->
|
|
317
|
+
<rn-tabs>...</rn-tabs> <!-- グローバルタブ -->
|
|
318
|
+
</rn-app-bottom-bar>
|
|
319
|
+
</rn-app-frame>
|
|
320
|
+
|
|
321
|
+
<!-- ページ側 -->
|
|
322
|
+
<Teleport defer to="#page-cta-outlet">
|
|
323
|
+
<!-- 価格・CTA など、ページ固有の中身 -->
|
|
324
|
+
</Teleport>
|
|
325
|
+
\`\`\`
|
|
326
|
+
|
|
327
|
+
- \`<Teleport defer>\` は Vue 3.5+ の機能。outlet が後に描画される場合の mount 順問題を吸収する
|
|
328
|
+
- ライブラリ側に追加 API は不要(既存 slot に差し込むだけ)
|
|
329
|
+
- ページに CTA が無い場合は \`<Teleport>\` を書かないだけ
|
|
330
|
+
- 商品詳細など購買フォーカス画面では、タブを表示せず CTA だけ差し込む運用も可能
|
|
331
|
+
`,
|
|
332
|
+
},
|
|
333
|
+
},
|
|
334
|
+
},
|
|
335
|
+
render: (args) => ({
|
|
336
|
+
components: {
|
|
337
|
+
'rn-app-frame': AppFrame,
|
|
338
|
+
'rn-app-bar': AppBar,
|
|
339
|
+
'rn-app-body': AppBody,
|
|
340
|
+
'rn-app-bottom-bar': AppBottomBar,
|
|
341
|
+
'rn-button': Button,
|
|
342
|
+
'rn-tabs': Tabs,
|
|
343
|
+
'rn-tab': Tab,
|
|
344
|
+
'product-page': {
|
|
345
|
+
components: {
|
|
346
|
+
'rn-button': Button,
|
|
347
|
+
},
|
|
348
|
+
template: /* html */ `
|
|
349
|
+
<div style="display: flex; flex-direction: column; gap: 16px;">
|
|
350
|
+
<p>商品詳細ページ。価格+CTA を Teleport で AppBottomBar の差し込み口に投入しています。</p>
|
|
351
|
+
<div
|
|
352
|
+
v-for="i in 4"
|
|
353
|
+
:key="i"
|
|
354
|
+
style="height: 80px; background: var(--rn-bg-surface); border-radius: 8px; display: flex; align-items: center; justify-content: center; color: var(--rn-text-tertiary);"
|
|
355
|
+
>
|
|
356
|
+
商品コンテンツ {{ i }}
|
|
357
|
+
</div>
|
|
358
|
+
</div>
|
|
359
|
+
<teleport defer to="#page-cta-outlet">
|
|
360
|
+
<div style="display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; gap: 12px;">
|
|
361
|
+
<div style="display: flex; flex-direction: column; line-height: 1.2;">
|
|
362
|
+
<span style="font-size: 12px; color: var(--rn-text-tertiary);">価格</span>
|
|
363
|
+
<span style="font-size: 18px; font-weight: bold;">¥3,000</span>
|
|
364
|
+
</div>
|
|
365
|
+
<rn-button>カートに追加</rn-button>
|
|
366
|
+
</div>
|
|
367
|
+
</teleport>
|
|
368
|
+
`,
|
|
369
|
+
},
|
|
370
|
+
},
|
|
371
|
+
setup() {
|
|
372
|
+
const current = ref(0)
|
|
373
|
+
const tabs = tabItems
|
|
374
|
+
return { args, current, tabs }
|
|
375
|
+
},
|
|
376
|
+
template: /* html */ `
|
|
377
|
+
<rn-app-frame>
|
|
378
|
+
<rn-app-bar title="ストア名" />
|
|
379
|
+
<rn-app-body>
|
|
380
|
+
<product-page />
|
|
381
|
+
</rn-app-body>
|
|
382
|
+
<rn-app-bottom-bar>
|
|
383
|
+
<div id="page-cta-outlet" style="border-top: 1px solid var(--rn-line-default);"></div>
|
|
384
|
+
<rn-tabs variant="icon" :isStretched="true">
|
|
385
|
+
<rn-tab
|
|
386
|
+
v-for="(tab, index) in tabs"
|
|
387
|
+
:key="index"
|
|
388
|
+
:icon="tab.icon"
|
|
389
|
+
:label="tab.label"
|
|
390
|
+
:active="current === index"
|
|
391
|
+
@click="current = index"
|
|
392
|
+
/>
|
|
393
|
+
</rn-tabs>
|
|
394
|
+
</rn-app-bottom-bar>
|
|
395
|
+
</rn-app-frame>
|
|
396
|
+
`,
|
|
397
|
+
}),
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
export const Flat: OverridesStory = {
|
|
401
|
+
args: {
|
|
402
|
+
flat: true,
|
|
403
|
+
},
|
|
404
|
+
argTypes: {},
|
|
405
|
+
parameters: {
|
|
406
|
+
layout: 'fullscreen',
|
|
407
|
+
},
|
|
408
|
+
render: (args) => ({
|
|
409
|
+
components: {
|
|
410
|
+
'rn-app-frame': AppFrame,
|
|
411
|
+
'rn-app-bar': AppBar,
|
|
412
|
+
'rn-app-body': AppBody,
|
|
413
|
+
'rn-app-bottom-bar': AppBottomBar,
|
|
414
|
+
'rn-tabs': Tabs,
|
|
415
|
+
'rn-tab': Tab,
|
|
416
|
+
},
|
|
417
|
+
setup() {
|
|
418
|
+
const current = ref(0)
|
|
419
|
+
const tabs = tabItems
|
|
420
|
+
return { args, current, tabs }
|
|
421
|
+
},
|
|
422
|
+
template: /* html */ `
|
|
423
|
+
<rn-app-frame>
|
|
424
|
+
<rn-app-bar title="ストア名" :flat="true" />
|
|
425
|
+
<rn-app-body>
|
|
426
|
+
<p>flat モード。ボーダー・影なし。AppBar の flat と組み合わせて使います。</p>
|
|
427
|
+
</rn-app-body>
|
|
428
|
+
<rn-app-bottom-bar v-bind="args">
|
|
429
|
+
<rn-tabs variant="icon" :isStretched="true">
|
|
430
|
+
<rn-tab
|
|
431
|
+
v-for="(tab, index) in tabs"
|
|
432
|
+
:key="index"
|
|
433
|
+
:icon="tab.icon"
|
|
434
|
+
:label="tab.label"
|
|
435
|
+
:active="current === index"
|
|
436
|
+
@click="current = index"
|
|
437
|
+
/>
|
|
438
|
+
</rn-tabs>
|
|
439
|
+
</rn-app-bottom-bar>
|
|
440
|
+
</rn-app-frame>
|
|
441
|
+
`,
|
|
442
|
+
}),
|
|
443
|
+
}
|
|
@@ -29,6 +29,7 @@ import Image from '@/components/elements/Image.vue'
|
|
|
29
29
|
import Spinner from '@/components/elements/Spinner.vue'
|
|
30
30
|
import Card from '@/components/layouts/Card.vue'
|
|
31
31
|
import Alert from '@/components/elements/Alert.vue'
|
|
32
|
+
import Callout from '@/components/elements/Callout.vue'
|
|
32
33
|
|
|
33
34
|
const meta: Meta<typeof AppFrame> = {
|
|
34
35
|
title: 'Example/配送通販',
|
|
@@ -83,11 +84,11 @@ const mockAppBarMenu: AppBarMenuItem[] = [
|
|
|
83
84
|
const mockAppBarActions: AppBarAction[] = [
|
|
84
85
|
{
|
|
85
86
|
title: '検索',
|
|
86
|
-
icon:
|
|
87
|
+
icon: 'magnifying-glass-outline',
|
|
87
88
|
action: () => console.log('検索'),
|
|
88
89
|
},
|
|
89
|
-
{ title: 'アカウント', icon:
|
|
90
|
-
{ title: 'カート', icon:
|
|
90
|
+
{ title: 'アカウント', icon: 'user-outline', url: '/account' },
|
|
91
|
+
{ title: 'カート', icon: 'cart-shopping-outline', url: '/cart' },
|
|
91
92
|
]
|
|
92
93
|
|
|
93
94
|
// AppFooter用データ
|
|
@@ -396,9 +397,9 @@ export const Slotカスタマイズ版: Story = {
|
|
|
396
397
|
</rn-stack>
|
|
397
398
|
</template>
|
|
398
399
|
<template #actions>
|
|
399
|
-
<rn-icon
|
|
400
|
-
<rn-icon
|
|
401
|
-
<rn-icon
|
|
400
|
+
<rn-icon icon="magnifying-glass-outline" />
|
|
401
|
+
<rn-icon icon="user-outline" />
|
|
402
|
+
<rn-icon icon="cart-shopping-outline" />
|
|
402
403
|
</template>
|
|
403
404
|
<template #extra>
|
|
404
405
|
<div style="background: #fef3c7; padding: 8px 16px; text-align: center; font-size: 12px;">
|
|
@@ -530,6 +531,7 @@ export const カートページ: Story = {
|
|
|
530
531
|
'rn-image': Image,
|
|
531
532
|
'rn-card': Card,
|
|
532
533
|
'rn-alert': Alert,
|
|
534
|
+
'rn-callout': Callout,
|
|
533
535
|
'rn-spinner': Spinner,
|
|
534
536
|
},
|
|
535
537
|
setup() {
|
|
@@ -638,7 +640,7 @@ export const カートページ: Story = {
|
|
|
638
640
|
@delete="deleteCartListItemHandle(item)"
|
|
639
641
|
/>
|
|
640
642
|
<rn-button variant="text" @click="deleteCartListItemHandle(item)">
|
|
641
|
-
<rn-icon
|
|
643
|
+
<rn-icon icon="trash-outline" />
|
|
642
644
|
</rn-button>
|
|
643
645
|
</rn-stack>
|
|
644
646
|
<rn-text>¥{{ formatPrice(item.unit_price * item.quantity) }}</rn-text>
|
|
@@ -659,7 +661,7 @@ export const カートページ: Story = {
|
|
|
659
661
|
>
|
|
660
662
|
<rn-text size="subtitle" weight="bold">カートに商品はありません。</rn-text>
|
|
661
663
|
<rn-button variant="text">
|
|
662
|
-
<rn-icon
|
|
664
|
+
<rn-icon icon="arrow-left-outline" size="sm" />
|
|
663
665
|
TOPに戻る
|
|
664
666
|
</rn-button>
|
|
665
667
|
</rn-stack>
|
|
@@ -697,31 +699,19 @@ export const カートページ: Story = {
|
|
|
697
699
|
<rn-stack horizontal-re-size="fill" horizontal-align="center">
|
|
698
700
|
<rn-button variant="text">
|
|
699
701
|
<rn-stack direction="horizontal" vertical-align="center" gap="sm">
|
|
700
|
-
<rn-icon
|
|
702
|
+
<rn-icon icon="chevron-left-outline" size="sm" color="subtle" />
|
|
701
703
|
<rn-text color="subtle">買い物を続ける</rn-text>
|
|
702
704
|
</rn-stack>
|
|
703
705
|
</rn-button>
|
|
704
706
|
</rn-stack>
|
|
705
707
|
|
|
706
|
-
<rn-
|
|
707
|
-
<template #header>
|
|
708
|
-
<rn-stack gap="xs" vertical-align="center">
|
|
709
|
-
<rn-icon :icon="['far', 'circle-info']" size="sm" />
|
|
710
|
-
<rn-text size="subtitle" weight="bold">注意事項</rn-text>
|
|
711
|
-
</rn-stack>
|
|
712
|
-
</template>
|
|
708
|
+
<rn-callout title="注意事項" variant="tonal">
|
|
713
709
|
<rn-stack direction="vertical" gap="xs">
|
|
714
|
-
<rn-text size="caption">
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
<rn-text size="caption">
|
|
718
|
-
※在庫の少ない商品は、ご注文手続き中に在庫切れとなる場合があります。
|
|
719
|
-
</rn-text>
|
|
720
|
-
<rn-text size="caption">
|
|
721
|
-
※ご注文手続き中に、ご注文商品の販売期間が終了してしまった場合、ご注文はできません
|
|
722
|
-
</rn-text>
|
|
710
|
+
<rn-text size="caption">※ご注文確定するまでは、カートに商品が入っていても在庫は確保されません。予めご了承ください。</rn-text>
|
|
711
|
+
<rn-text size="caption">※在庫の少ない商品は、ご注文手続き中に在庫切れとなる場合があります。</rn-text>
|
|
712
|
+
<rn-text size="caption">※ご注文手続き中に、ご注文商品の販売期間が終了してしまった場合、ご注文はできません</rn-text>
|
|
723
713
|
</rn-stack>
|
|
724
|
-
</rn-
|
|
714
|
+
</rn-callout>
|
|
725
715
|
</rn-stack>
|
|
726
716
|
</template>
|
|
727
717
|
</rn-page>
|
|
@@ -782,7 +772,7 @@ export const カートページ_空の状態: Story = {
|
|
|
782
772
|
>
|
|
783
773
|
<rn-text size="subtitle" weight="bold">カートに商品はありません。</rn-text>
|
|
784
774
|
<rn-button variant="text">
|
|
785
|
-
<rn-icon
|
|
775
|
+
<rn-icon icon="arrow-left-outline" size="sm" />
|
|
786
776
|
TOPに戻る
|
|
787
777
|
</rn-button>
|
|
788
778
|
</rn-stack>
|