@cakejp/design-system 0.15.0 → 0.17.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 (186) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/CLAUDE.md +1 -0
  3. package/bin/init.js +29 -6
  4. package/contracts/components.json +45 -8
  5. package/contracts/composition.json +8 -2
  6. package/contracts/rules.json +14 -2
  7. package/contracts/screen-patterns.json +1 -1
  8. package/dist/components/ec/_mypage-menu-data.js +166 -0
  9. package/dist/components/ec/admin-shell.js +202 -0
  10. package/dist/components/ec/anniversary-card.js +63 -0
  11. package/dist/components/ec/cake-logo.js +38 -0
  12. package/dist/components/ec/chart-controls.js +91 -0
  13. package/dist/components/ec/countdown-timer.js +50 -0
  14. package/dist/components/ec/coupon-card.js +136 -0
  15. package/dist/components/ec/delivery-calendar.js +105 -0
  16. package/dist/components/ec/mypage-shell.js +98 -0
  17. package/dist/components/ec/order-section.js +53 -0
  18. package/dist/components/ec/order-summary.js +78 -0
  19. package/dist/components/ec/payment-method.js +81 -0
  20. package/dist/components/ec/product-card.js +235 -0
  21. package/dist/components/ec/product-carousel.js +106 -0
  22. package/dist/components/ec/product-cta.js +80 -0
  23. package/dist/components/ec/product-detail-bar.js +86 -0
  24. package/dist/components/ec/product-detail-sidebar.js +296 -0
  25. package/dist/components/ec/product-list-item.js +266 -0
  26. package/dist/components/ec/product-option.js +165 -0
  27. package/dist/components/ec/rating-stars.js +74 -0
  28. package/dist/components/ec/review-card.js +126 -0
  29. package/dist/components/ec/review-form.js +181 -0
  30. package/dist/components/ec/review-summary.js +95 -0
  31. package/dist/components/ec/shop-card.js +179 -0
  32. package/dist/components/ec/stat-card.js +50 -0
  33. package/dist/components/foundations/accordion.js +67 -0
  34. package/dist/components/foundations/alert-dialog.js +165 -0
  35. package/dist/components/foundations/alert.js +218 -0
  36. package/dist/components/foundations/aspect-ratio.js +10 -0
  37. package/dist/components/foundations/avatar.js +58 -0
  38. package/dist/components/foundations/badge.js +54 -0
  39. package/dist/components/foundations/breadcrumb.js +104 -0
  40. package/dist/components/foundations/button.js +99 -0
  41. package/dist/components/foundations/calendar.js +173 -0
  42. package/dist/components/foundations/card.js +109 -0
  43. package/dist/components/foundations/checkbox-card.js +111 -0
  44. package/dist/components/foundations/checkbox-group.js +92 -0
  45. package/dist/components/foundations/checkbox.js +90 -0
  46. package/dist/components/foundations/chip-variants.js +41 -0
  47. package/dist/components/foundations/collapsible.js +34 -0
  48. package/dist/components/foundations/command.js +171 -0
  49. package/dist/components/foundations/context-menu.js +225 -0
  50. package/dist/components/foundations/data-table.js +59 -0
  51. package/dist/components/foundations/dialog.js +148 -0
  52. package/dist/components/foundations/drawer.js +129 -0
  53. package/dist/components/foundations/dropdown-menu.js +232 -0
  54. package/dist/components/foundations/field.js +150 -0
  55. package/dist/components/foundations/file-input.js +116 -0
  56. package/dist/components/foundations/form.js +101 -0
  57. package/dist/components/foundations/hover-card.js +41 -0
  58. package/dist/components/foundations/icon-badge.js +41 -0
  59. package/dist/components/foundations/input.js +74 -0
  60. package/dist/components/foundations/label.js +29 -0
  61. package/dist/components/foundations/menubar.js +252 -0
  62. package/dist/components/foundations/navigation-menu.js +171 -0
  63. package/dist/components/foundations/pagination.js +120 -0
  64. package/dist/components/foundations/popover.js +45 -0
  65. package/dist/components/foundations/progress.js +34 -0
  66. package/dist/components/foundations/radio-group.js +134 -0
  67. package/dist/components/foundations/responsive-dialog.js +76 -0
  68. package/dist/components/foundations/scroll-area.js +62 -0
  69. package/dist/components/foundations/select.js +190 -0
  70. package/dist/components/foundations/separator.js +27 -0
  71. package/dist/components/foundations/sheet.js +130 -0
  72. package/dist/components/foundations/skeleton.js +15 -0
  73. package/dist/components/foundations/skip-link.js +27 -0
  74. package/dist/components/foundations/slider.js +81 -0
  75. package/dist/components/foundations/social-icon.js +36 -0
  76. package/dist/components/foundations/sonner.js +49 -0
  77. package/dist/components/foundations/spinner.js +28 -0
  78. package/dist/components/foundations/switch.js +54 -0
  79. package/dist/components/foundations/table.js +115 -0
  80. package/dist/components/foundations/tabs.js +102 -0
  81. package/dist/components/foundations/textarea.js +65 -0
  82. package/dist/components/foundations/toggle-group.js +107 -0
  83. package/dist/components/foundations/toggle.js +44 -0
  84. package/dist/components/foundations/tooltip.js +56 -0
  85. package/dist/components/primitives/admin-header.js +31 -0
  86. package/dist/components/primitives/admin-side-nav.js +135 -0
  87. package/dist/components/primitives/banner-carousel.js +97 -0
  88. package/dist/components/primitives/bottom-tab-bar.js +81 -0
  89. package/dist/components/primitives/bulk-action-bar.js +27 -0
  90. package/dist/components/primitives/category-scroll.js +110 -0
  91. package/dist/components/primitives/category-shortcuts.js +66 -0
  92. package/dist/components/primitives/chat-composer.js +141 -0
  93. package/dist/components/primitives/chip.js +123 -0
  94. package/dist/components/primitives/coach-mark.js +102 -0
  95. package/dist/components/primitives/combobox.js +88 -0
  96. package/dist/components/primitives/container.js +50 -0
  97. package/dist/components/primitives/content-carousel.js +144 -0
  98. package/dist/components/primitives/date-picker.js +175 -0
  99. package/dist/components/primitives/empty-state.js +32 -0
  100. package/dist/components/primitives/error-state.js +115 -0
  101. package/dist/components/primitives/filter-bar.js +144 -0
  102. package/dist/components/primitives/footer.js +247 -0
  103. package/dist/components/primitives/form-field.js +38 -0
  104. package/dist/components/primitives/funnel-shell.js +99 -0
  105. package/dist/components/primitives/header.js +257 -0
  106. package/dist/components/primitives/image-carousel.js +156 -0
  107. package/dist/components/primitives/image-gallery.js +177 -0
  108. package/dist/components/primitives/image-input.js +207 -0
  109. package/dist/components/primitives/image-uploader.js +69 -0
  110. package/dist/components/primitives/kebab-menu.js +40 -0
  111. package/dist/components/primitives/list-item.js +80 -0
  112. package/dist/components/primitives/menu-drawer.js +154 -0
  113. package/dist/components/primitives/multi-select.js +93 -0
  114. package/dist/components/primitives/notification-badge.js +61 -0
  115. package/dist/components/primitives/notification-list.js +72 -0
  116. package/dist/components/primitives/number-input.js +235 -0
  117. package/dist/components/primitives/price-display.js +101 -0
  118. package/dist/components/primitives/progress-steps.js +62 -0
  119. package/dist/components/primitives/search-bar.js +81 -0
  120. package/dist/components/primitives/search-panel.js +43 -0
  121. package/dist/components/primitives/section-header.js +148 -0
  122. package/dist/components/primitives/section-nav.js +85 -0
  123. package/dist/components/primitives/section.js +78 -0
  124. package/dist/components/primitives/share-buttons.js +102 -0
  125. package/dist/components/primitives/side-nav.js +98 -0
  126. package/dist/components/primitives/social-login-button.js +53 -0
  127. package/dist/components/primitives/standard-page-shell.js +34 -0
  128. package/dist/components/primitives/status-count-tabs.js +42 -0
  129. package/dist/components/primitives/sticky-action-bar.js +26 -0
  130. package/dist/components/primitives/sub-nav.js +67 -0
  131. package/dist/components/primitives/tag.js +57 -0
  132. package/dist/components/primitives/timeline.js +55 -0
  133. package/dist/components/primitives/workspace-shell.js +57 -0
  134. package/dist/index.css +1 -1
  135. package/dist/index.js +22961 -13082
  136. package/dist/lib/field-labelling.js +29 -0
  137. package/dist/lib/focus-ring.js +6 -0
  138. package/dist/lib/pagination-range.js +42 -0
  139. package/dist/lib/use-value-length.js +63 -0
  140. package/dist/lib/utils.js +33 -0
  141. package/dist/types/components/ec/_mypage-menu-data.d.ts +3 -3
  142. package/dist/types/components/ec/admin-shell.d.ts +1 -1
  143. package/dist/types/components/ec/anniversary-card.d.ts +1 -1
  144. package/dist/types/components/ec/mypage-shell.d.ts +3 -3
  145. package/dist/types/components/ec/product-card.d.ts +1 -1
  146. package/dist/types/components/ec/product-carousel.d.ts +3 -3
  147. package/dist/types/components/ec/stat-card.d.ts +1 -1
  148. package/dist/types/components/foundations/accordion.d.ts +8 -1
  149. package/dist/types/components/foundations/alert-dialog.d.ts +1 -1
  150. package/dist/types/components/foundations/calendar.d.ts +1 -1
  151. package/dist/types/components/foundations/checkbox-group.d.ts +1 -1
  152. package/dist/types/components/foundations/command.d.ts +1 -1
  153. package/dist/types/components/foundations/data-table.d.ts +6 -1
  154. package/dist/types/components/foundations/field.d.ts +2 -2
  155. package/dist/types/components/foundations/file-input.d.ts +1 -1
  156. package/dist/types/components/foundations/pagination.d.ts +1 -1
  157. package/dist/types/components/foundations/responsive-dialog.d.ts +1 -1
  158. package/dist/types/components/foundations/skip-link.d.ts +1 -1
  159. package/dist/types/components/foundations/slider.d.ts +13 -1
  160. package/dist/types/components/primitives/admin-header.d.ts +11 -1
  161. package/dist/types/components/primitives/admin-side-nav.d.ts +19 -1
  162. package/dist/types/components/primitives/banner-carousel.d.ts +2 -2
  163. package/dist/types/components/primitives/category-scroll.d.ts +2 -2
  164. package/dist/types/components/primitives/category-shortcuts.d.ts +1 -1
  165. package/dist/types/components/primitives/chat-composer.d.ts +1 -1
  166. package/dist/types/components/primitives/chip.d.ts +1 -1
  167. package/dist/types/components/primitives/combobox.d.ts +9 -1
  168. package/dist/types/components/primitives/content-carousel.d.ts +1 -1
  169. package/dist/types/components/primitives/form-field.d.ts +1 -1
  170. package/dist/types/components/primitives/image-input.d.ts +1 -1
  171. package/dist/types/components/primitives/kebab-menu.d.ts +1 -1
  172. package/dist/types/components/primitives/menu-drawer.d.ts +0 -16
  173. package/dist/types/components/primitives/multi-select.d.ts +9 -1
  174. package/dist/types/components/primitives/notification-list.d.ts +1 -1
  175. package/dist/types/components/primitives/search-panel.d.ts +1 -1
  176. package/dist/types/components/primitives/section-nav.d.ts +1 -1
  177. package/dist/types/components/primitives/side-nav.d.ts +1 -1
  178. package/dist/types/components/primitives/social-login-button.d.ts +1 -1
  179. package/dist/types/index.d.ts +1 -0
  180. package/dist/types/lib/field-labelling.d.ts +66 -0
  181. package/dist/types/lib/focus-ring.d.ts +42 -0
  182. package/package.json +2 -2
  183. package/scripts/codemod/README.md +9 -0
  184. package/src/components/COMPONENT_LOOKUP.md +1 -1
  185. package/src/preset-standalone.css +15 -0
  186. package/src/preset.css +15 -1
@@ -0,0 +1,106 @@
1
+ import { jsxs as a, jsx as s, Fragment as _ } from "react/jsx-runtime";
2
+ import "react";
3
+ import { cn as i } from "../../lib/utils.js";
4
+ import { SectionHeader as w } from "../primitives/section-header.js";
5
+ import { ProductCard as k } from "./product-card.js";
6
+ const E = {
7
+ sm: "w-40",
8
+ md: "w-[200px]",
9
+ lg: "w-[240px]",
10
+ /** 本番準拠レスポンシブ: SP 2.6枚 / Tablet 5枚 / PC 6枚 */
11
+ responsive: "w-[calc((100vw_-_48px)/2.6)] @[736px]:w-[calc((100vw_-_96px)/5)] @[928px]:w-[calc((100vw_-_184px)/6)]"
12
+ };
13
+ function M({
14
+ title: m,
15
+ subtitle: p,
16
+ description: e,
17
+ sectionImage: r,
18
+ sectionImageAlt: u,
19
+ sectionImageHref: n,
20
+ moreHref: x,
21
+ moreLabel: d,
22
+ onMoreClick: o,
23
+ headerSize: t,
24
+ products: N,
25
+ cardSize: h = "sm",
26
+ showRanking: b = !1,
27
+ showCartButton: c = !1,
28
+ className: y
29
+ }) {
30
+ const v = !!r, f = v && /* @__PURE__ */ s("div", { className: "shrink-0 overflow-hidden rounded-xl size-20 @sm:size-[100px] @md:size-[140px]", children: /* @__PURE__ */ s(
31
+ "img",
32
+ {
33
+ src: r,
34
+ alt: u ?? m,
35
+ className: "size-full object-cover",
36
+ loading: "lazy"
37
+ }
38
+ ) }), z = n ? /* @__PURE__ */ s("a", { href: n, className: "shrink-0", children: f }) : f;
39
+ return /* @__PURE__ */ a(
40
+ "section",
41
+ {
42
+ "data-slot": "product-carousel",
43
+ className: i("@container py-4 @[960px]:max-w-[960px] @[960px]:mx-auto", y),
44
+ children: [
45
+ v ? /* @__PURE__ */ a("div", { className: "flex gap-3 px-4 @md:gap-4", children: [
46
+ z,
47
+ /* @__PURE__ */ a("div", { className: "min-w-0 flex-1", children: [
48
+ /* @__PURE__ */ s(
49
+ w,
50
+ {
51
+ title: m,
52
+ subtitle: p,
53
+ moreHref: x,
54
+ moreLabel: d,
55
+ onMoreClick: o,
56
+ size: t
57
+ }
58
+ ),
59
+ e && /* @__PURE__ */ s("p", { className: "mt-1 line-clamp-3 typo-body-md text-[var(--Text-Medium-Emphasis)]", children: e })
60
+ ] })
61
+ ] }) : /* @__PURE__ */ a(_, { children: [
62
+ /* @__PURE__ */ s(
63
+ w,
64
+ {
65
+ title: m,
66
+ subtitle: p,
67
+ moreHref: x,
68
+ moreLabel: d,
69
+ onMoreClick: o,
70
+ size: t,
71
+ className: "px-4"
72
+ }
73
+ ),
74
+ e && /* @__PURE__ */ s("p", { className: "mt-1 px-4 line-clamp-3 typo-body-md text-[var(--Text-Medium-Emphasis)]", children: e })
75
+ ] }),
76
+ /* @__PURE__ */ a("div", { tabIndex: 0, className: i(
77
+ "flex overflow-x-auto pl-4 pb-2 pt-3 scrollbar-hide",
78
+ "focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-[var(--Focus-High-Emphasis)]/50",
79
+ h === "responsive" ? "gap-2 @[736px]:gap-4 @[928px]:gap-6" : "gap-3",
80
+ c && "items-stretch"
81
+ ), children: [
82
+ N.map((l, g) => /* @__PURE__ */ s(
83
+ "div",
84
+ {
85
+ className: i("shrink-0", E[h]),
86
+ children: /* @__PURE__ */ s(
87
+ k,
88
+ {
89
+ ...l,
90
+ ranking: b ? g + 1 : l.ranking,
91
+ showCartButton: c,
92
+ className: i(l.className, c && "h-full")
93
+ }
94
+ )
95
+ },
96
+ l.name + g
97
+ )),
98
+ /* @__PURE__ */ s("div", { className: "shrink-0 w-4 @[736px]:w-4 @[928px]:w-4", "aria-hidden": "true" })
99
+ ] })
100
+ ]
101
+ }
102
+ );
103
+ }
104
+ export {
105
+ M as ProductCarousel
106
+ };
@@ -0,0 +1,80 @@
1
+ import { jsxs as n, jsx as t } from "react/jsx-runtime";
2
+ import "react";
3
+ import { cn as p } from "../../lib/utils.js";
4
+ import { Button as a } from "../foundations/button.js";
5
+ function b({
6
+ variant: e = "add-to-cart",
7
+ onAddToCart: o,
8
+ onBookmark: s,
9
+ isBookmarked: l = !1,
10
+ countdownText: c,
11
+ resaleText: r,
12
+ className: i,
13
+ ...d
14
+ }) {
15
+ const m = e === "sold-out" || e === "timesale-ended" || e === "pre-sale", u = {
16
+ "add-to-cart": "カートに追加",
17
+ resale: "再販通知を受け取る",
18
+ timesale: "タイムセール カートに追加",
19
+ "not-logged-in": "ログインしてカートに追加",
20
+ backorder: "入荷待ち注文する",
21
+ "out-of-stock-waiting": "現在入荷待ちです",
22
+ "pre-sale": "販売開始前です",
23
+ countdown: c ?? "カートに追加",
24
+ "sold-out": "完売しました",
25
+ "timesale-ended": "タイムセール終了"
26
+ };
27
+ return /* @__PURE__ */ n(
28
+ "div",
29
+ {
30
+ "data-slot": "product-cta",
31
+ className: p("space-y-2", i),
32
+ ...d,
33
+ children: [
34
+ /* @__PURE__ */ t(
35
+ a,
36
+ {
37
+ size: "lg",
38
+ className: "w-full",
39
+ disabled: m,
40
+ onClick: o,
41
+ children: u[e]
42
+ }
43
+ ),
44
+ s && /* @__PURE__ */ n(
45
+ a,
46
+ {
47
+ variant: "tertiary",
48
+ size: "lg",
49
+ className: "w-full",
50
+ onClick: s,
51
+ children: [
52
+ /* @__PURE__ */ t(f, { className: "mr-1.5 size-4", filled: l }),
53
+ l ? "ブックマーク済み" : "ブックマークに追加"
54
+ ]
55
+ }
56
+ ),
57
+ e === "resale" && r && /* @__PURE__ */ t("p", { className: "text-center typo-body-xs text-[var(--Text-Low-Emphasis)]", children: r })
58
+ ]
59
+ }
60
+ );
61
+ }
62
+ function f({ className: e, filled: o = !1 }) {
63
+ return /* @__PURE__ */ t(
64
+ "svg",
65
+ {
66
+ xmlns: "http://www.w3.org/2000/svg",
67
+ viewBox: "0 0 24 24",
68
+ fill: o ? "currentColor" : "none",
69
+ stroke: "currentColor",
70
+ strokeWidth: 2,
71
+ strokeLinecap: "round",
72
+ strokeLinejoin: "round",
73
+ className: e,
74
+ children: /* @__PURE__ */ t("path", { d: "m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z" })
75
+ }
76
+ );
77
+ }
78
+ export {
79
+ b as ProductCTA
80
+ };
@@ -0,0 +1,86 @@
1
+ import { jsx as e, jsxs as a } from "react/jsx-runtime";
2
+ import "react";
3
+ import { cn as r } from "../../lib/utils.js";
4
+ import { Button as u } from "../foundations/button.js";
5
+ import { RatingStars as N } from "./rating-stars.js";
6
+ function j({
7
+ className: l,
8
+ tabs: m,
9
+ productName: c,
10
+ price: n,
11
+ isSale: d = !1,
12
+ rating: i,
13
+ reviewCount: o,
14
+ ctaLabel: h = "カートに追加",
15
+ onCtaClick: x,
16
+ ctaDisabled: p = !1,
17
+ onTabClick: s,
18
+ ...v
19
+ }) {
20
+ return /* @__PURE__ */ e(
21
+ "div",
22
+ {
23
+ "data-slot": "product-detail-bar",
24
+ className: r(
25
+ "hidden border-t border-[var(--Border-Low-Emphasis)] @md:block",
26
+ l
27
+ ),
28
+ ...v,
29
+ children: /* @__PURE__ */ a("div", { className: "mx-auto flex max-w-[1064px] items-center justify-between", children: [
30
+ /* @__PURE__ */ e("nav", { className: "flex items-center self-stretch", "aria-label": "商品詳細ナビゲーション", children: m.map((t) => /* @__PURE__ */ e(
31
+ "a",
32
+ {
33
+ href: t.href,
34
+ className: r(
35
+ "flex h-14 items-center justify-center px-3 typo-label-md transition-colors",
36
+ t.active ? "border-b-2 border-[var(--Text-High-Emphasis)] text-[var(--Text-High-Emphasis)]" : "text-[var(--Text-Disable)] hover:text-[var(--Text-Medium-Emphasis)]"
37
+ ),
38
+ onClick: (f) => {
39
+ s && (f.preventDefault(), s(t));
40
+ },
41
+ "aria-current": t.active ? "true" : void 0,
42
+ children: t.label
43
+ },
44
+ t.label
45
+ )) }),
46
+ /* @__PURE__ */ a("div", { className: "flex items-center gap-4 py-2", children: [
47
+ /* @__PURE__ */ a("div", { className: "max-w-[270px]", children: [
48
+ /* @__PURE__ */ e("p", { className: "line-clamp-1 typo-label-sm text-[var(--Text-High-Emphasis)]", children: c }),
49
+ /* @__PURE__ */ a("div", { className: "flex items-center", children: [
50
+ /* @__PURE__ */ a("div", { className: r(
51
+ "flex items-baseline text-[var(--Text-High-Emphasis)]",
52
+ d && "text-[var(--Text-Caution)]"
53
+ ), children: [
54
+ /* @__PURE__ */ a("span", { className: "typo-heading-md text-inherit", children: [
55
+ "¥",
56
+ n.toLocaleString()
57
+ ] }),
58
+ /* @__PURE__ */ e("span", { className: "ml-1 typo-body-sm text-inherit", children: "税込" })
59
+ ] }),
60
+ i != null && i > 0 && /* @__PURE__ */ e("div", { className: "ml-1", children: /* @__PURE__ */ e(
61
+ N,
62
+ {
63
+ rating: i,
64
+ reviewCount: o,
65
+ size: "sm"
66
+ }
67
+ ) })
68
+ ] })
69
+ ] }),
70
+ /* @__PURE__ */ e(
71
+ u,
72
+ {
73
+ size: "lg",
74
+ onClick: x,
75
+ disabled: p,
76
+ children: h
77
+ }
78
+ )
79
+ ] })
80
+ ] })
81
+ }
82
+ );
83
+ }
84
+ export {
85
+ j as ProductDetailBar
86
+ };
@@ -0,0 +1,296 @@
1
+ import { jsxs as a, jsx as e } from "react/jsx-runtime";
2
+ import * as A from "react";
3
+ import P from "iconsax-reactjs/dist/esm/Shop.js";
4
+ import D from "iconsax-reactjs/dist/esm/Tag2.js";
5
+ import L from "iconsax-reactjs/dist/esm/Ticket2.js";
6
+ import B from "iconsax-reactjs/dist/esm/InfoCircle.js";
7
+ import Z from "iconsax-reactjs/dist/esm/ArrowRight2.js";
8
+ import q from "iconsax-reactjs/dist/esm/ArrowDown2.js";
9
+ import { cn as F } from "../../lib/utils.js";
10
+ import { BookmarkRibbonIcon as V } from "./product-card.js";
11
+ import { Tag as G } from "../primitives/tag.js";
12
+ import { RatingStars as J } from "./rating-stars.js";
13
+ import { NumberInput as K } from "../primitives/number-input.js";
14
+ import { PriceDisplay as O } from "../primitives/price-display.js";
15
+ import { Chip as U } from "../primitives/chip.js";
16
+ import { Button as g } from "../foundations/button.js";
17
+ function me({
18
+ className: T,
19
+ productName: w,
20
+ price: k,
21
+ tags: c,
22
+ shopName: d,
23
+ shopHref: h,
24
+ brandLabel: m,
25
+ brandHref: f,
26
+ rating: v,
27
+ reviewCount: E,
28
+ coupons: n,
29
+ sizeOptions: o,
30
+ selectedSize: C,
31
+ onSizeChange: S,
32
+ sizeInfoLabel: u,
33
+ onSizeInfoClick: z,
34
+ deliveryPrefecture: p,
35
+ onPrefectureChange: M,
36
+ earliestDelivery: x,
37
+ quantity: I = 1,
38
+ onQuantityChange: b,
39
+ pointInfo: s,
40
+ onAddToCart: N,
41
+ addToCartLabel: R = "カートに追加",
42
+ onBookmark: H,
43
+ isBookmarked: y = !1,
44
+ promoBanner: i,
45
+ ...j
46
+ }) {
47
+ return /* @__PURE__ */ a(
48
+ "div",
49
+ {
50
+ "data-slot": "product-detail-sidebar",
51
+ className: F(
52
+ "flex w-[400px] max-w-full flex-col rounded-2xl border-2 border-[var(--Surface-Tertiary)] bg-[var(--Surface-Primary)]",
53
+ T
54
+ ),
55
+ ...j,
56
+ children: [
57
+ /* @__PURE__ */ a("div", { className: "flex flex-col gap-4 overflow-hidden px-6 pb-2 pt-6", children: [
58
+ /* @__PURE__ */ a("div", { className: "flex flex-col gap-2", children: [
59
+ c && c.length > 0 && /* @__PURE__ */ e("div", { className: "flex flex-wrap gap-2", children: c.map((l, r) => /* @__PURE__ */ e(G, { variant: l.variant, size: "md", children: l.label }, r)) }),
60
+ /* @__PURE__ */ e("h2", { className: "typo-heading-2xl text-[var(--Text-High-Emphasis)]", children: w }),
61
+ d && /* @__PURE__ */ a("div", { className: "flex w-full items-center gap-1", children: [
62
+ /* @__PURE__ */ e(
63
+ P,
64
+ {
65
+ size: 20,
66
+ className: "shrink-0 text-[var(--Text-Medium-Emphasis)]"
67
+ }
68
+ ),
69
+ h ? /* @__PURE__ */ e(
70
+ "a",
71
+ {
72
+ href: h,
73
+ className: "typo-label-md text-[var(--Text-Medium-Emphasis)] underline",
74
+ children: d
75
+ }
76
+ ) : /* @__PURE__ */ e("span", { className: "typo-label-md text-[var(--Text-Medium-Emphasis)]", children: d })
77
+ ] }),
78
+ m && /* @__PURE__ */ a("div", { className: "flex w-full items-center gap-1", children: [
79
+ /* @__PURE__ */ e(
80
+ D,
81
+ {
82
+ size: 20,
83
+ className: "shrink-0 text-[var(--Text-Medium-Emphasis)]"
84
+ }
85
+ ),
86
+ f ? /* @__PURE__ */ e(
87
+ "a",
88
+ {
89
+ href: f,
90
+ className: "typo-label-md text-[var(--Text-Medium-Emphasis)] underline",
91
+ children: m
92
+ }
93
+ ) : /* @__PURE__ */ e("span", { className: "typo-label-md text-[var(--Text-Medium-Emphasis)]", children: m })
94
+ ] })
95
+ ] }),
96
+ /* @__PURE__ */ a("div", { className: "flex flex-col gap-2", children: [
97
+ /* @__PURE__ */ e(O, { price: k, size: "xl" }),
98
+ v != null && /* @__PURE__ */ e(
99
+ J,
100
+ {
101
+ rating: v,
102
+ reviewCount: E,
103
+ size: "md",
104
+ showValue: !0,
105
+ showCount: !0
106
+ }
107
+ )
108
+ ] }),
109
+ n && n.length > 0 && /* @__PURE__ */ a("div", { className: "flex flex-col pb-2", children: [
110
+ /* @__PURE__ */ a("div", { className: "z-[var(--Z-Local-2)] flex items-center gap-0.5 self-start rounded bg-[var(--Surface-Info)] px-2 py-1", children: [
111
+ /* @__PURE__ */ e(L, { size: 16, className: "text-[var(--Text-on-Inverse)]" }),
112
+ /* @__PURE__ */ e("span", { className: "typo-label-sm text-[var(--Text-on-Inverse)]", children: "対象クーポン" })
113
+ ] }),
114
+ /* @__PURE__ */ e("div", { className: "-mt-2 z-[var(--Z-Local-1)] flex flex-col gap-0 rounded-lg bg-[var(--Surface-Info-Light)] px-4 py-3 pt-5", children: n.map((l, r) => /* @__PURE__ */ a(A.Fragment, { children: [
115
+ r > 0 && /* @__PURE__ */ e("div", { className: "my-2 border-t border-dashed border-[var(--Border-Info)]" }),
116
+ /* @__PURE__ */ a("div", { className: "flex items-center justify-between gap-2 py-1", children: [
117
+ /* @__PURE__ */ e("span", { className: "min-w-0 truncate typo-label-lg text-[var(--Text-Info)]", children: l.label }),
118
+ l.actionLabel && /* @__PURE__ */ e(
119
+ "button",
120
+ {
121
+ type: "button",
122
+ className: "shrink-0 typo-body-md text-[var(--Text-Info)] underline",
123
+ onClick: l.onAction,
124
+ children: l.actionLabel
125
+ }
126
+ )
127
+ ] })
128
+ ] }, r)) })
129
+ ] })
130
+ ] }),
131
+ o && o.length > 0 && /* @__PURE__ */ a("div", { className: "flex flex-col py-2", children: [
132
+ /* @__PURE__ */ e("div", { className: "flex flex-col gap-3 overflow-hidden px-6 py-2", children: o.map((l, r) => (
133
+ // lint-scratch-allow: gap-[11px] は Figma サイズチップ間隔の固有値
134
+ /* @__PURE__ */ e("div", { className: "flex flex-wrap gap-[11px]", children: l.map((t) => /* @__PURE__ */ e(
135
+ U,
136
+ {
137
+ shape: "square",
138
+ size: "tile",
139
+ variant: "filled",
140
+ selected: C === t.value,
141
+ soldOut: t.soldOut,
142
+ onClick: () => S?.(t.value),
143
+ children: t.label
144
+ },
145
+ t.value
146
+ )) }, r)
147
+ )) }),
148
+ u && /* @__PURE__ */ a(
149
+ "button",
150
+ {
151
+ type: "button",
152
+ className: "flex items-center gap-0.5 px-6 pb-3 pt-1",
153
+ onClick: z,
154
+ children: [
155
+ /* @__PURE__ */ e(
156
+ B,
157
+ {
158
+ size: 16,
159
+ className: "shrink-0 text-[var(--Text-Medium-Emphasis)]"
160
+ }
161
+ ),
162
+ /* @__PURE__ */ e("span", { className: "typo-label-md text-[var(--Text-Medium-Emphasis)]", children: u })
163
+ ]
164
+ }
165
+ )
166
+ ] }),
167
+ (p || x) && /* @__PURE__ */ a("div", { className: "flex min-w-0 items-center gap-2 rounded-lg px-4 py-2", children: [
168
+ p && /* @__PURE__ */ a(
169
+ "button",
170
+ {
171
+ type: "button",
172
+ onClick: M,
173
+ className: "flex min-w-0 shrink items-center justify-between gap-2 rounded-lg border border-[var(--Border-High-Emphasis)] bg-[var(--Surface-Primary)] px-4 py-3",
174
+ children: [
175
+ /* @__PURE__ */ e("span", { className: "min-w-0 truncate typo-body-lg text-[var(--Text-High-Emphasis)]", children: p }),
176
+ /* @__PURE__ */ e(
177
+ q,
178
+ {
179
+ size: 16,
180
+ className: "shrink-0 text-[var(--Text-High-Emphasis)]"
181
+ }
182
+ )
183
+ ]
184
+ }
185
+ ),
186
+ x && /* @__PURE__ */ a("div", { className: "min-w-0 shrink text-[var(--Text-High-Emphasis)]", children: [
187
+ /* @__PURE__ */ e("span", { className: "typo-body-md", children: "への最短お届け日は" }),
188
+ /* @__PURE__ */ e("br", {}),
189
+ /* @__PURE__ */ e("span", { className: "typo-label-md", children: x }),
190
+ /* @__PURE__ */ e("span", { className: "typo-body-md", children: "です" })
191
+ ] })
192
+ ] }),
193
+ b && /* @__PURE__ */ a("div", { className: "flex items-center gap-6 px-6 py-2", children: [
194
+ /* @__PURE__ */ e("span", { className: "typo-label-md text-[var(--Text-High-Emphasis)]", children: "数量" }),
195
+ /* @__PURE__ */ e(
196
+ K,
197
+ {
198
+ value: I,
199
+ onChange: b,
200
+ size: "md",
201
+ editable: !1
202
+ }
203
+ )
204
+ ] }),
205
+ /* @__PURE__ */ e("div", { className: "flex flex-col px-6 py-2", children: /* @__PURE__ */ a("div", { className: "flex w-full flex-col gap-2", children: [
206
+ s && /* @__PURE__ */ a("div", { className: "flex flex-col gap-2 rounded-lg bg-[var(--Surface-Secondary)] px-4 py-3", children: [
207
+ /* @__PURE__ */ a("div", { className: "flex items-center gap-4", children: [
208
+ /* @__PURE__ */ a("div", { className: "flex items-center gap-0.5", children: [
209
+ /* @__PURE__ */ e("span", { className: "typo-body-md text-[var(--Text-Medium-Emphasis)]", children: "獲得ポイント:" }),
210
+ /* @__PURE__ */ e("span", { className: "typo-body-lg text-[var(--Text-Accent-Primary)]", children: s.points }),
211
+ s.pointsSuffix && /* @__PURE__ */ e("span", { className: "typo-body-md text-[var(--Text-Medium-Emphasis)]", children: s.pointsSuffix })
212
+ ] }),
213
+ /* @__PURE__ */ e(
214
+ "button",
215
+ {
216
+ type: "button",
217
+ className: "typo-body-md text-[var(--Text-High-Emphasis)] underline",
218
+ onClick: s.onDetailClick,
219
+ children: "詳細"
220
+ }
221
+ )
222
+ ] }),
223
+ s.cardReward && /* @__PURE__ */ a("div", { className: "flex items-center gap-4", children: [
224
+ /* @__PURE__ */ a("div", { className: "flex items-center gap-1", children: [
225
+ /* @__PURE__ */ e("span", { className: "typo-body-md text-[var(--Text-Medium-Emphasis)]", children: "Cake.jp CARDなら" }),
226
+ /* @__PURE__ */ e("span", { className: "typo-body-lg text-[var(--Text-Accent-Primary)]", children: s.cardReward })
227
+ ] }),
228
+ /* @__PURE__ */ e(
229
+ "button",
230
+ {
231
+ type: "button",
232
+ className: "typo-body-md text-[var(--Text-High-Emphasis)] underline",
233
+ onClick: s.onDetailClick,
234
+ children: "詳細"
235
+ }
236
+ )
237
+ ] })
238
+ ] }),
239
+ /* @__PURE__ */ e(
240
+ g,
241
+ {
242
+ size: "xl",
243
+ className: "w-full",
244
+ onClick: N,
245
+ disabled: !N,
246
+ children: R
247
+ }
248
+ ),
249
+ /* @__PURE__ */ a(
250
+ g,
251
+ {
252
+ variant: "tertiary",
253
+ size: "xl",
254
+ className: "mb-2 w-full",
255
+ onClick: H,
256
+ children: [
257
+ /* @__PURE__ */ e(
258
+ V,
259
+ {
260
+ size: 20,
261
+ filled: y
262
+ }
263
+ ),
264
+ y ? "ブックマーク済み" : "ブックマークに追加"
265
+ ]
266
+ }
267
+ )
268
+ ] }) }),
269
+ i && /* @__PURE__ */ e("div", { className: "p-4", "data-missing-component": "PromoBanner", children: /* @__PURE__ */ a(
270
+ "button",
271
+ {
272
+ type: "button",
273
+ className: "flex w-full items-center gap-2 rounded-lg border border-[var(--Border-Info)] bg-[var(--Surface-Info-Light)] px-4 py-4",
274
+ onClick: i.onClick,
275
+ children: [
276
+ /* @__PURE__ */ a("div", { className: "flex flex-1 flex-col items-start gap-2", children: [
277
+ /* @__PURE__ */ e("span", { className: "rounded bg-[var(--Surface-Info)] px-2 py-1 typo-label-md text-[var(--Text-on-Inverse)]", children: i.badge }),
278
+ /* @__PURE__ */ e("span", { className: "typo-body-md text-left text-[var(--Text-Info)]", children: i.text })
279
+ ] }),
280
+ /* @__PURE__ */ e(
281
+ Z,
282
+ {
283
+ size: 24,
284
+ className: "shrink-0 text-[var(--Text-Info)]"
285
+ }
286
+ )
287
+ ]
288
+ }
289
+ ) })
290
+ ]
291
+ }
292
+ );
293
+ }
294
+ export {
295
+ me as ProductDetailSidebar
296
+ };