@cakejp/design-system 0.17.0 → 0.19.0

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 (118) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/CLAUDE.md +15 -0
  3. package/contracts/components.json +144 -16
  4. package/contracts/composition.json +1 -1
  5. package/contracts/rules.json +5 -1
  6. package/contracts/screen-patterns.json +1 -1
  7. package/dist/components/ec/admin-shell.js +7 -6
  8. package/dist/components/ec/product-card.js +107 -102
  9. package/dist/components/ec/product-option.js +1 -0
  10. package/dist/components/ec/review-card.js +22 -20
  11. package/dist/components/ec/review-form.js +1 -0
  12. package/dist/components/foundations/accordion.js +23 -22
  13. package/dist/components/foundations/alert.js +1 -0
  14. package/dist/components/foundations/aspect-ratio.js +3 -2
  15. package/dist/components/foundations/avatar.js +1 -0
  16. package/dist/components/foundations/button.js +7 -1
  17. package/dist/components/foundations/calendar.js +1 -0
  18. package/dist/components/foundations/checkbox-group.js +1 -0
  19. package/dist/components/foundations/checkbox.js +1 -0
  20. package/dist/components/foundations/command.js +1 -0
  21. package/dist/components/foundations/context-menu.js +1 -0
  22. package/dist/components/foundations/drawer.js +1 -0
  23. package/dist/components/foundations/file-input.js +1 -0
  24. package/dist/components/foundations/form.js +26 -25
  25. package/dist/components/foundations/pagination.js +49 -46
  26. package/dist/components/foundations/popover.js +9 -8
  27. package/dist/components/foundations/radio-group.js +3 -2
  28. package/dist/components/foundations/responsive-dialog.js +1 -0
  29. package/dist/components/foundations/separator.js +7 -6
  30. package/dist/components/foundations/sheet.js +40 -33
  31. package/dist/components/foundations/slider.js +7 -6
  32. package/dist/components/foundations/social-icon.js +30 -10
  33. package/dist/components/foundations/sonner.js +5 -4
  34. package/dist/components/foundations/tabs.js +45 -25
  35. package/dist/components/foundations/toggle-group.js +6 -5
  36. package/dist/components/primitives/admin-side-nav.js +1 -0
  37. package/dist/components/primitives/chat-composer.js +1 -0
  38. package/dist/components/primitives/combobox.js +1 -0
  39. package/dist/components/primitives/content-card.js +111 -0
  40. package/dist/components/primitives/content-carousel.js +9 -8
  41. package/dist/components/primitives/date-picker.js +9 -8
  42. package/dist/components/primitives/footer.js +169 -100
  43. package/dist/components/primitives/form-field.js +1 -0
  44. package/dist/components/primitives/header.js +220 -176
  45. package/dist/components/primitives/image-carousel.js +8 -7
  46. package/dist/components/primitives/image-gallery.js +15 -14
  47. package/dist/components/primitives/image-input.js +9 -8
  48. package/dist/components/primitives/list-item.js +9 -8
  49. package/dist/components/primitives/menu-drawer.js +60 -56
  50. package/dist/components/primitives/multi-select.js +7 -6
  51. package/dist/components/primitives/number-input.js +1 -0
  52. package/dist/components/primitives/prose.js +52 -0
  53. package/dist/components/primitives/search-bar.js +81 -66
  54. package/dist/components/primitives/section-header.js +58 -55
  55. package/dist/components/primitives/share-buttons.js +93 -85
  56. package/dist/components/primitives/status-count-tabs.js +8 -7
  57. package/dist/components/primitives/sub-nav.js +52 -52
  58. package/dist/index.css +1 -1
  59. package/dist/index.js +1785 -831
  60. package/dist/lib/field-labelling.js +7 -6
  61. package/dist/lib/link-component.js +6 -0
  62. package/dist/lib/use-value-length.js +1 -0
  63. package/dist/types/components/ec/_mypage-menu-data.d.ts +3 -3
  64. package/dist/types/components/ec/admin-shell.d.ts +1 -1
  65. package/dist/types/components/ec/anniversary-card.d.ts +1 -1
  66. package/dist/types/components/ec/mypage-shell.d.ts +3 -3
  67. package/dist/types/components/ec/product-card.d.ts +13 -20
  68. package/dist/types/components/ec/product-carousel.d.ts +3 -3
  69. package/dist/types/components/ec/review-card.d.ts +6 -1
  70. package/dist/types/components/ec/stat-card.d.ts +1 -1
  71. package/dist/types/components/foundations/alert-dialog.d.ts +1 -1
  72. package/dist/types/components/foundations/button.d.ts +1 -1
  73. package/dist/types/components/foundations/calendar.d.ts +1 -1
  74. package/dist/types/components/foundations/checkbox-group.d.ts +1 -1
  75. package/dist/types/components/foundations/chip-variants.d.ts +1 -1
  76. package/dist/types/components/foundations/command.d.ts +1 -1
  77. package/dist/types/components/foundations/data-table.d.ts +9 -1
  78. package/dist/types/components/foundations/field.d.ts +2 -2
  79. package/dist/types/components/foundations/file-input.d.ts +1 -1
  80. package/dist/types/components/foundations/pagination.d.ts +8 -2
  81. package/dist/types/components/foundations/responsive-dialog.d.ts +1 -1
  82. package/dist/types/components/foundations/sheet.d.ts +6 -1
  83. package/dist/types/components/foundations/skip-link.d.ts +1 -1
  84. package/dist/types/components/foundations/social-icon.d.ts +1 -1
  85. package/dist/types/components/foundations/tabs.d.ts +2 -1
  86. package/dist/types/components/primitives/admin-header.d.ts +1 -1
  87. package/dist/types/components/primitives/admin-side-nav.d.ts +1 -1
  88. package/dist/types/components/primitives/banner-carousel.d.ts +2 -2
  89. package/dist/types/components/primitives/category-scroll.d.ts +2 -2
  90. package/dist/types/components/primitives/category-shortcuts.d.ts +1 -1
  91. package/dist/types/components/primitives/chat-composer.d.ts +1 -1
  92. package/dist/types/components/primitives/chip.d.ts +1 -1
  93. package/dist/types/components/primitives/content-card.d.ts +67 -0
  94. package/dist/types/components/primitives/content-carousel.d.ts +1 -1
  95. package/dist/types/components/primitives/footer.d.ts +21 -1
  96. package/dist/types/components/primitives/form-field.d.ts +1 -1
  97. package/dist/types/components/primitives/header.d.ts +30 -2
  98. package/dist/types/components/primitives/image-input.d.ts +1 -1
  99. package/dist/types/components/primitives/kebab-menu.d.ts +1 -1
  100. package/dist/types/components/primitives/menu-drawer.d.ts +7 -1
  101. package/dist/types/components/primitives/notification-list.d.ts +1 -1
  102. package/dist/types/components/primitives/prose.d.ts +35 -0
  103. package/dist/types/components/primitives/search-bar.d.ts +14 -1
  104. package/dist/types/components/primitives/search-panel.d.ts +1 -1
  105. package/dist/types/components/primitives/section-header.d.ts +2 -1
  106. package/dist/types/components/primitives/section-nav.d.ts +1 -1
  107. package/dist/types/components/primitives/share-buttons.d.ts +26 -4
  108. package/dist/types/components/primitives/side-nav.d.ts +1 -1
  109. package/dist/types/components/primitives/social-login-button.d.ts +1 -1
  110. package/dist/types/components/primitives/sub-nav.d.ts +16 -1
  111. package/dist/types/index.d.ts +4 -0
  112. package/dist/types/lib/link-component.d.ts +26 -0
  113. package/package.json +10 -5
  114. package/src/components/COMPONENT_LOOKUP.md +7 -5
  115. package/src/preset-standalone.css +1 -0
  116. package/src/preset.css +8 -0
  117. package/src/styles/semantic.css +1 -0
  118. package/tokens.json +8 -1
@@ -1,36 +1,38 @@
1
- import { jsxs as t, Fragment as u, jsx as e } from "react/jsx-runtime";
2
- import * as h from "react";
3
- import { cn as c } from "../../lib/utils.js";
4
- function y({
1
+ "use client";
2
+ import { jsxs as s, Fragment as H, jsx as e } from "react/jsx-runtime";
3
+ import * as v from "react";
4
+ import { cn as d } from "../../lib/utils.js";
5
+ import { resolveLinkComponent as w } from "../../lib/link-component.js";
6
+ function B({
5
7
  title: l,
6
- children: s
8
+ children: i
7
9
  }) {
8
- const [i, a] = h.useState(!1), o = h.useRef(null), [d, m] = h.useState(0);
9
- return h.useEffect(() => {
10
- o.current && m(o.current.scrollHeight);
11
- }, [i]), /* @__PURE__ */ t("div", { "data-slot": "footer-accordion", children: [
12
- /* @__PURE__ */ t(
10
+ const [r, o] = v.useState(!1), t = v.useRef(null), [n, c] = v.useState(0);
11
+ return v.useEffect(() => {
12
+ t.current && c(t.current.scrollHeight);
13
+ }, [r]), /* @__PURE__ */ s("div", { "data-slot": "footer-accordion", children: [
14
+ /* @__PURE__ */ s(
13
15
  "button",
14
16
  {
15
17
  type: "button",
16
- className: c(
18
+ className: d(
17
19
  "flex w-full items-center justify-between",
18
20
  "border-t border-[var(--Border-Low-Emphasis)] px-5 py-5",
19
21
  "typo-body-md text-[var(--Text-High-Emphasis)]",
20
22
  "cursor-pointer"
21
23
  ),
22
- onClick: () => a(!i),
23
- "aria-expanded": i,
24
+ onClick: () => o(!r),
25
+ "aria-expanded": r,
24
26
  children: [
25
27
  /* @__PURE__ */ e("span", { children: l }),
26
- /* @__PURE__ */ t("span", { className: "relative size-3 shrink-0", children: [
28
+ /* @__PURE__ */ s("span", { className: "relative size-3 shrink-0", children: [
27
29
  /* @__PURE__ */ e("span", { className: "absolute top-1/2 left-0 block h-px w-3 -translate-y-1/2 bg-[var(--Text-High-Emphasis)] transition-transform duration-[var(--Motion-Duration-Base)]" }),
28
30
  /* @__PURE__ */ e(
29
31
  "span",
30
32
  {
31
- className: c(
33
+ className: d(
32
34
  "absolute top-1/2 left-0 block h-px w-3 -translate-y-1/2 bg-[var(--Text-High-Emphasis)] transition-transform duration-[var(--Motion-Duration-Base)]",
33
- i ? "rotate-0" : "rotate-90"
35
+ r ? "rotate-0" : "rotate-90"
34
36
  )
35
37
  }
36
38
  )
@@ -41,54 +43,71 @@ function y({
41
43
  /* @__PURE__ */ e(
42
44
  "div",
43
45
  {
44
- ref: o,
46
+ ref: t,
45
47
  className: "overflow-hidden transition-[max-height] duration-[var(--Motion-Duration-Base)] ease-in-out",
46
- style: { maxHeight: i ? `${d}px` : "0px" },
47
- children: /* @__PURE__ */ e("div", { className: "bg-[var(--Surface-Secondary)]", children: s })
48
+ style: { maxHeight: r ? `${n}px` : "0px" },
49
+ children: /* @__PURE__ */ e("div", { className: "bg-[var(--Surface-Secondary)]", children: i })
48
50
  }
49
51
  )
50
52
  ] });
51
53
  }
52
- function N({ groups: l }) {
53
- const s = l.length <= 4 ? "@lg:grid-cols-4" : l.length === 5 ? "@lg:grid-cols-5" : "@lg:grid-cols-6";
54
- return /* @__PURE__ */ e("div", { className: c("grid grid-cols-3 gap-6", s), children: l.map((i) => /* @__PURE__ */ t("div", { children: [
55
- /* @__PURE__ */ e("h3", { className: "typo-label-md text-[var(--Text-High-Emphasis)] mb-3", children: i.title }),
56
- /* @__PURE__ */ e("ul", { className: "space-y-1.5", children: i.links.map((a) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
57
- "a",
54
+ function g({ groups: l, linkComponent: i }) {
55
+ const r = l.length <= 4 ? "@lg:grid-cols-4" : l.length === 5 ? "@lg:grid-cols-5" : "@lg:grid-cols-6";
56
+ return /* @__PURE__ */ e("div", { className: d("grid grid-cols-3 gap-6", r), children: l.map((o) => /* @__PURE__ */ s("div", { children: [
57
+ /* @__PURE__ */ e("h3", { className: "typo-label-md text-[var(--Text-High-Emphasis)] mb-3", children: o.title }),
58
+ /* @__PURE__ */ e("ul", { className: "space-y-1.5", children: o.links.map((t) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
59
+ b,
58
60
  {
59
- href: a.href,
61
+ link: t,
62
+ linkComponent: i,
60
63
  className: "typo-body-sm text-[var(--Text-Medium-Emphasis)] hover:text-[var(--Text-High-Emphasis)] transition-colors duration-[var(--Motion-Duration-Fast)]",
61
- ...a.external ? { target: "_blank", rel: "noopener noreferrer" } : {},
62
- children: a.label
64
+ children: t.label
63
65
  }
64
- ) }, a.label)) }),
65
- i.subGroups?.map((a) => /* @__PURE__ */ t("div", { className: "mt-4", children: [
66
- /* @__PURE__ */ e("h4", { className: "typo-label-md text-[var(--Text-High-Emphasis)] mb-3", children: a.title }),
67
- /* @__PURE__ */ e("ul", { className: "space-y-1.5", children: a.links.map((o) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
68
- "a",
66
+ ) }, t.label)) }),
67
+ o.subGroups?.map((t) => /* @__PURE__ */ s("div", { className: "mt-4", children: [
68
+ /* @__PURE__ */ e("h4", { className: "typo-label-md text-[var(--Text-High-Emphasis)] mb-3", children: t.title }),
69
+ /* @__PURE__ */ e("ul", { className: "space-y-1.5", children: t.links.map((n) => /* @__PURE__ */ e("li", { children: /* @__PURE__ */ e(
70
+ b,
69
71
  {
70
- href: o.href,
72
+ link: n,
73
+ linkComponent: i,
71
74
  className: "typo-body-sm text-[var(--Text-Medium-Emphasis)] hover:text-[var(--Text-High-Emphasis)] transition-colors duration-[var(--Motion-Duration-Fast)]",
72
- ...o.external ? { target: "_blank", rel: "noopener noreferrer" } : {},
73
- children: o.label
75
+ children: n.label
74
76
  }
75
- ) }, o.label)) })
76
- ] }, a.title))
77
- ] }, i.title)) });
77
+ ) }, n.label)) })
78
+ ] }, t.title))
79
+ ] }, o.title)) });
78
80
  }
79
- function b({ links: l }) {
80
- return /* @__PURE__ */ e("ul", { children: l.map((s) => /* @__PURE__ */ e("li", { className: "border-b border-[var(--Border-Low-Emphasis)] last:border-b-0", children: /* @__PURE__ */ t(
81
- "a",
81
+ function b({
82
+ link: l,
83
+ linkComponent: i,
84
+ className: r,
85
+ children: o
86
+ }) {
87
+ const t = w(i, l.external);
88
+ return /* @__PURE__ */ e(
89
+ t,
90
+ {
91
+ href: l.href,
92
+ className: r,
93
+ ...l.external ? { target: "_blank", rel: "noopener noreferrer" } : {},
94
+ children: o
95
+ }
96
+ );
97
+ }
98
+ function E({ links: l, linkComponent: i }) {
99
+ return /* @__PURE__ */ e("ul", { children: l.map((r) => /* @__PURE__ */ e("li", { className: "border-b border-[var(--Border-Low-Emphasis)] last:border-b-0", children: /* @__PURE__ */ s(
100
+ b,
82
101
  {
83
- href: s.href,
84
- className: c(
102
+ link: r,
103
+ linkComponent: i,
104
+ className: d(
85
105
  "flex items-center justify-between px-5 py-5",
86
106
  "typo-body-sm text-[var(--Text-Medium-Emphasis)]",
87
107
  "hover:text-[var(--Text-High-Emphasis)] transition-colors duration-[var(--Motion-Duration-Fast)]"
88
108
  ),
89
- ...s.external ? { target: "_blank", rel: "noopener noreferrer" } : {},
90
109
  children: [
91
- /* @__PURE__ */ e("span", { children: s.label }),
110
+ /* @__PURE__ */ e("span", { children: r.label }),
92
111
  /* @__PURE__ */ e(
93
112
  "svg",
94
113
  {
@@ -102,139 +121,189 @@ function b({ links: l }) {
102
121
  )
103
122
  ]
104
123
  }
105
- ) }, s.label)) });
124
+ ) }, r.label)) });
106
125
  }
107
- function w({
126
+ function D({
108
127
  className: l,
109
- linkGroups: s = [],
110
- copyright: i = "© Cake.jp Co., Ltd.",
111
- logo: a,
112
- logoHref: o = "/",
113
- socialLinks: d = [],
114
- description: m,
115
- paymentMethods: x = [],
116
- trustBadge: n,
117
- bottomLinks: v = [],
118
- ...f
128
+ linkGroups: i = [],
129
+ copyright: r = "© Cake.jp Co., Ltd.",
130
+ logo: o,
131
+ logoHref: t = "/",
132
+ socialLinks: n = [],
133
+ description: c,
134
+ paymentMethods: u = [],
135
+ trustBadge: m,
136
+ bottomLinks: y = [],
137
+ variant: T = "default",
138
+ bottomRightSlot: L,
139
+ linkComponent: h,
140
+ ...M
119
141
  }) {
120
- return /* @__PURE__ */ t(
142
+ const x = T === "brand-first", N = w(h), p = (o || c) && /* @__PURE__ */ s("div", { "data-slot": "footer-brand", className: "grid content-start gap-4", children: [
143
+ o && /* @__PURE__ */ e(N, { href: t, className: "block w-fit text-[var(--Text-High-Emphasis)]", children: o }),
144
+ c && /* @__PURE__ */ e("p", { className: "typo-body-sm text-[var(--Text-Low-Emphasis)]", children: c })
145
+ ] });
146
+ return /* @__PURE__ */ s(
121
147
  "footer",
122
148
  {
123
149
  "data-slot": "footer",
124
150
  style: { containerType: "inline-size" },
125
- className: c(
151
+ className: d(
126
152
  "bg-[var(--Surface-Primary)] text-[var(--Text-Medium-Emphasis)]",
127
153
  l
128
154
  ),
129
- ...f,
155
+ ...M,
130
156
  children: [
131
- s.length > 0 && /* @__PURE__ */ t(u, { children: [
132
- /* @__PURE__ */ e("nav", { "aria-label": "フッターナビゲーション", "data-slot": "footer-links", className: "border-t border-[var(--Border-Medium-Emphasis)] @lg:hidden", children: s.map((r) => /* @__PURE__ */ t(y, { title: r.title, children: [
133
- /* @__PURE__ */ e(b, { links: r.links }),
134
- r.subGroups?.map((p) => /* @__PURE__ */ t("div", { children: [
135
- /* @__PURE__ */ e("div", { className: "border-t border-[var(--Border-Low-Emphasis)] px-5 py-5 typo-body-md text-[var(--Text-High-Emphasis)]", children: p.title }),
136
- /* @__PURE__ */ e(b, { links: p.links })
137
- ] }, p.title))
138
- ] }, r.title)) }),
157
+ i.length > 0 && /* @__PURE__ */ s(H, { children: [
158
+ x && p && /* @__PURE__ */ e("div", { className: "border-t border-[var(--Border-Medium-Emphasis)] px-5 py-8 @lg:hidden", children: p }),
159
+ /* @__PURE__ */ e("nav", { "aria-label": "フッターナビゲーション", "data-slot": "footer-links", className: d("border-t border-[var(--Border-Medium-Emphasis)] @lg:hidden", x && "border-t-0"), children: i.map((a) => /* @__PURE__ */ s(B, { title: a.title, children: [
160
+ /* @__PURE__ */ e(E, { links: a.links, linkComponent: h }),
161
+ a.subGroups?.map((f) => /* @__PURE__ */ s("div", { children: [
162
+ /* @__PURE__ */ e("div", { className: "border-t border-[var(--Border-Low-Emphasis)] px-5 py-5 typo-body-md text-[var(--Text-High-Emphasis)]", children: f.title }),
163
+ /* @__PURE__ */ e(E, { links: f.links, linkComponent: h })
164
+ ] }, f.title))
165
+ ] }, a.title)) }),
139
166
  /* @__PURE__ */ e(
140
167
  "nav",
141
168
  {
142
169
  "aria-label": "フッターナビゲーション",
143
170
  "data-slot": "footer-links-pc",
144
171
  className: "hidden @lg:block border-t border-[var(--Border-Medium-Emphasis)]",
145
- children: /* @__PURE__ */ e("div", { className: "mx-auto max-w-[1065px] px-5 py-16", children: /* @__PURE__ */ e(N, { groups: s }) })
172
+ children: /* @__PURE__ */ e("div", { className: "mx-auto max-w-[1065px] px-5 py-16", children: x ? (
173
+ // FooterColumnNav は 1 つの grid 子としてリンク群をまとめて持つ。
174
+ // auto-fit だと nav 全体が 1 トラックに潰れて中で再分割されるため、
175
+ // ブランド列と nav 領域の比率を明示する(求人サイトの 1.6 : 3.4 相当)。
176
+ // brandBlock が無い(logo も description も未指定)ときに 2 カラムへ
177
+ // すると nav が 1.6fr のブランド側トラックへ入って左に寄るため、
178
+ // その場合は nav 単独レイアウトにする。
179
+ /* @__PURE__ */ s(
180
+ "div",
181
+ {
182
+ className: d(
183
+ "grid gap-8",
184
+ p && "@lg:grid-cols-[minmax(0,1.6fr)_minmax(0,3.4fr)]"
185
+ ),
186
+ children: [
187
+ p,
188
+ /* @__PURE__ */ e(g, { groups: i, linkComponent: h })
189
+ ]
190
+ }
191
+ )
192
+ ) : /* @__PURE__ */ e(g, { groups: i, linkComponent: h }) })
146
193
  }
147
194
  )
148
195
  ] }),
149
- d.length > 0 && /* @__PURE__ */ e(
196
+ x && i.length === 0 && p && /* @__PURE__ */ e(
197
+ "div",
198
+ {
199
+ "data-slot": "footer-brand-only",
200
+ className: "border-t border-[var(--Border-Medium-Emphasis)] px-5 py-8 @lg:py-16",
201
+ children: /* @__PURE__ */ e("div", { className: "mx-auto max-w-[1065px]", children: p })
202
+ }
203
+ ),
204
+ n.length > 0 && /* @__PURE__ */ e(
150
205
  "div",
151
206
  {
152
207
  "data-slot": "footer-social",
153
208
  className: "flex flex-wrap items-center justify-center gap-4 px-4 py-6 @sm:gap-8 @sm:px-0 @sm:py-8",
154
- children: d.map((r) => /* @__PURE__ */ e(
209
+ children: n.map((a) => /* @__PURE__ */ e(
155
210
  "a",
156
211
  {
157
- href: r.href,
158
- className: c(
212
+ href: a.href,
213
+ className: d(
159
214
  // shrink-0 必須: SNS アイコンの 40px タッチターゲットを flex row で保つ
160
215
  "flex size-10 shrink-0 items-center justify-center",
161
216
  "text-[var(--Text-High-Emphasis)]",
162
217
  "transition-colors duration-[var(--Motion-Duration-Fast)] hover:text-[var(--Text-Medium-Emphasis)]"
163
218
  ),
164
- "aria-label": r.label,
219
+ "aria-label": a.label,
165
220
  target: "_blank",
166
221
  rel: "noopener noreferrer",
167
- children: r.icon
222
+ children: a.icon
168
223
  },
169
- r.label
224
+ a.label
170
225
  ))
171
226
  }
172
227
  ),
173
- x.length > 0 && /* @__PURE__ */ t(
228
+ u.length > 0 && /* @__PURE__ */ s(
174
229
  "div",
175
230
  {
176
231
  "data-slot": "footer-payment",
177
232
  className: "border-t border-[var(--Border-Low-Emphasis)] px-5 py-6",
178
233
  children: [
179
234
  /* @__PURE__ */ e("p", { className: "typo-label-sm text-[var(--Text-Low-Emphasis)] text-center mb-3", children: "お支払い方法" }),
180
- /* @__PURE__ */ e("div", { className: "flex flex-wrap items-center justify-center gap-1.5 @sm:gap-2", children: x.map((r) => /* @__PURE__ */ e(
235
+ /* @__PURE__ */ e("div", { className: "flex flex-wrap items-center justify-center gap-1.5 @sm:gap-2", children: u.map((a) => /* @__PURE__ */ e(
181
236
  "div",
182
237
  {
183
238
  className: "flex items-center justify-center",
184
- "aria-label": r.label,
185
- children: r.icon
239
+ "aria-label": a.label,
240
+ children: a.icon
186
241
  },
187
- r.label
242
+ a.label
188
243
  )) })
189
244
  ]
190
245
  }
191
246
  ),
192
- n && /* @__PURE__ */ t(
247
+ m && /* @__PURE__ */ s(
193
248
  "div",
194
249
  {
195
250
  "data-slot": "footer-trust",
196
251
  className: "flex items-center gap-3 border-t border-[var(--Border-Low-Emphasis)] px-5 py-5",
197
252
  children: [
198
- n.href ? /* @__PURE__ */ e(
253
+ m.href ? /* @__PURE__ */ e(
199
254
  "a",
200
255
  {
201
- href: n.href,
256
+ href: m.href,
202
257
  target: "_blank",
203
258
  rel: "noopener noreferrer",
204
259
  className: "shrink-0",
205
- children: n.icon
260
+ children: m.icon
206
261
  }
207
- ) : /* @__PURE__ */ e("div", { className: "shrink-0", children: n.icon }),
208
- n.description && /* @__PURE__ */ e("p", { className: "typo-body-xs text-[var(--Text-Low-Emphasis)]", children: n.description })
262
+ ) : /* @__PURE__ */ e("div", { className: "shrink-0", children: m.icon }),
263
+ m.description && /* @__PURE__ */ e("p", { className: "typo-body-xs text-[var(--Text-Low-Emphasis)]", children: m.description })
209
264
  ]
210
265
  }
211
266
  ),
212
- v.length > 0 && /* @__PURE__ */ e(
267
+ y.length > 0 && /* @__PURE__ */ e(
213
268
  "div",
214
269
  {
215
270
  "data-slot": "footer-bottom-links",
216
271
  className: "border-t border-[var(--Border-Low-Emphasis)] px-5 py-4",
217
- children: /* @__PURE__ */ e("div", { className: "flex flex-wrap items-center justify-center gap-x-3 gap-y-2 @sm:gap-x-4", children: v.map((r) => /* @__PURE__ */ e(
218
- "a",
272
+ children: /* @__PURE__ */ e("div", { className: "flex flex-wrap items-center justify-center gap-x-3 gap-y-2 @sm:gap-x-4", children: y.map((a) => /* @__PURE__ */ e(
273
+ b,
219
274
  {
220
- href: r.href,
275
+ link: a,
276
+ linkComponent: h,
221
277
  className: "typo-body-xs text-[var(--Text-Low-Emphasis)] hover:text-[var(--Text-Medium-Emphasis)] transition-colors duration-[var(--Motion-Duration-Fast)]",
222
- ...r.external ? { target: "_blank", rel: "noopener noreferrer" } : {},
223
- children: r.label
278
+ children: a.label
224
279
  },
225
- r.label
280
+ a.label
226
281
  )) })
227
282
  }
228
283
  ),
229
- /* @__PURE__ */ t(
284
+ x ? (
285
+ // ロゴ・説明文はブランド列で出し済みなので、ここはコピーライトと
286
+ // bottomRightSlot(Powered by 等)を左右に振り分けるだけにする。
287
+ /* @__PURE__ */ e(
288
+ "div",
289
+ {
290
+ "data-slot": "footer-bottom",
291
+ className: "border-t border-[var(--Border-Medium-Emphasis)] px-5 py-5",
292
+ children: /* @__PURE__ */ s("div", { className: "mx-auto flex max-w-[1065px] flex-col gap-3 typo-body-sm text-[var(--Text-Low-Emphasis)] @lg:flex-row @lg:items-center @lg:justify-between", children: [
293
+ /* @__PURE__ */ e("p", { children: r }),
294
+ L
295
+ ] })
296
+ }
297
+ )
298
+ ) : /* @__PURE__ */ s(
230
299
  "div",
231
300
  {
232
301
  "data-slot": "footer-bottom",
233
302
  className: "border-t border-[var(--Border-Medium-Emphasis)] px-5 pt-8 pb-9 text-center",
234
303
  children: [
235
- a && /* @__PURE__ */ e("div", { className: "mx-auto w-fit max-w-[160px]", children: /* @__PURE__ */ e("a", { href: o, className: "block text-[var(--Text-High-Emphasis)]", children: a }) }),
236
- m && /* @__PURE__ */ e("p", { className: "mt-6 typo-body-sm text-[var(--Text-Low-Emphasis)]", children: m }),
237
- /* @__PURE__ */ e("p", { className: "mt-5 typo-body-sm text-[var(--Text-Low-Emphasis)]", children: i })
304
+ o && /* @__PURE__ */ e("div", { className: "mx-auto w-fit max-w-[160px]", children: /* @__PURE__ */ e(N, { href: t, className: "block text-[var(--Text-High-Emphasis)]", children: o }) }),
305
+ c && /* @__PURE__ */ e("p", { className: "mt-6 typo-body-sm text-[var(--Text-Low-Emphasis)]", children: c }),
306
+ /* @__PURE__ */ e("p", { className: "mt-5 typo-body-sm text-[var(--Text-Low-Emphasis)]", children: r })
238
307
  ]
239
308
  }
240
309
  )
@@ -243,5 +312,5 @@ function w({
243
312
  );
244
313
  }
245
314
  export {
246
- w as Footer
315
+ D as Footer
247
316
  };
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { jsxs as c, jsx as e } from "react/jsx-runtime";
2
3
  import * as u from "react";
3
4
  import { cn as y } from "../../lib/utils.js";