@cakejp/design-system 0.16.0 → 0.17.1

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 (151) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/CLAUDE.md +1 -0
  3. package/bin/init.js +29 -6
  4. package/contracts/components.json +42 -7
  5. package/contracts/composition.json +8 -2
  6. package/contracts/rules.json +5 -1
  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 -13130
  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/foundations/accordion.d.ts +8 -1
  142. package/dist/types/components/foundations/data-table.d.ts +6 -1
  143. package/dist/types/components/foundations/slider.d.ts +13 -1
  144. package/dist/types/components/primitives/admin-header.d.ts +10 -0
  145. package/dist/types/components/primitives/admin-side-nav.d.ts +18 -0
  146. package/dist/types/components/primitives/combobox.d.ts +9 -1
  147. package/dist/types/components/primitives/menu-drawer.d.ts +0 -16
  148. package/dist/types/components/primitives/multi-select.d.ts +9 -1
  149. package/dist/types/lib/field-labelling.d.ts +66 -0
  150. package/package.json +8 -4
  151. package/scripts/codemod/README.md +9 -0
@@ -0,0 +1,67 @@
1
+ import { jsx as e, jsxs as i } from "react/jsx-runtime";
2
+ import "react";
3
+ import { cn as a } from "../../lib/utils.js";
4
+ function u({
5
+ className: s,
6
+ items: n,
7
+ variant: c = "text",
8
+ ...l
9
+ }) {
10
+ return c === "chip" ? /* @__PURE__ */ e(
11
+ "div",
12
+ {
13
+ "data-slot": "sub-nav",
14
+ className: a(
15
+ "flex gap-2 overflow-x-auto px-4 py-2 scrollbar-hide",
16
+ s
17
+ ),
18
+ ...l,
19
+ children: n.map((r) => {
20
+ const o = r.href ? "a" : "button", t = r.href ? { href: r.href } : { type: "button", onClick: r.onClick };
21
+ return /* @__PURE__ */ e(
22
+ o,
23
+ {
24
+ className: a(
25
+ "shrink-0 rounded-full px-3 typo-label-sm transition-colors h-8 inline-flex items-center justify-center",
26
+ r.isActive ? "bg-[var(--Brand-Cake-Orange)] text-[var(--Text-on-Inverse)]" : "bg-[var(--Surface-Secondary)] text-[var(--Text-Medium-Emphasis)] hover:bg-[var(--Surface-Tertiary)]"
27
+ ),
28
+ ...t,
29
+ children: r.label
30
+ },
31
+ r.label
32
+ );
33
+ })
34
+ }
35
+ ) : /* @__PURE__ */ e(
36
+ "nav",
37
+ {
38
+ "data-slot": "sub-nav",
39
+ className: a(
40
+ "flex gap-4 overflow-x-auto border-b border-[var(--Border-Low-Emphasis)] px-4 scrollbar-hide",
41
+ s
42
+ ),
43
+ ...l,
44
+ children: n.map((r) => {
45
+ const o = r.href ? "a" : "button", t = r.href ? { href: r.href } : { type: "button", onClick: r.onClick };
46
+ return /* @__PURE__ */ i(
47
+ o,
48
+ {
49
+ className: a(
50
+ "relative shrink-0 py-2.5 typo-label-md transition-colors",
51
+ r.isActive ? "text-[var(--Text-High-Emphasis)]" : "text-[var(--Text-Medium-Emphasis)] hover:text-[var(--Text-High-Emphasis)]"
52
+ ),
53
+ ...t,
54
+ children: [
55
+ r.label,
56
+ r.isActive && /* @__PURE__ */ e("span", { className: "absolute inset-x-0 bottom-0 h-0.5 rounded-full bg-[var(--Text-High-Emphasis)]" })
57
+ ]
58
+ },
59
+ r.label
60
+ );
61
+ })
62
+ }
63
+ );
64
+ }
65
+ export {
66
+ u as SubNav
67
+ };
@@ -0,0 +1,57 @@
1
+ import { jsxs as n } from "react/jsx-runtime";
2
+ import "react";
3
+ import { cva as o } from "class-variance-authority";
4
+ import { cn as s } from "../../lib/utils.js";
5
+ const x = o(
6
+ "inline-flex items-center gap-1 rounded text-nowrap",
7
+ {
8
+ variants: {
9
+ variant: {
10
+ default: "bg-[var(--Surface-Secondary)] text-[var(--Text-High-Emphasis)] dark:bg-[var(--Surface-Tertiary)] dark:text-[var(--Text-High-Emphasis)] dark:ring-1 dark:ring-[var(--Border-Medium-Emphasis)]",
11
+ caution: "bg-[var(--Caution-Ultra-Light)] text-[var(--Text-Caution)] dark:bg-[var(--Text-Caution)]/20 dark:text-[var(--Text-Caution)]",
12
+ sale: "bg-[var(--Surface-Caution)] text-[var(--Text-on-Inverse)]",
13
+ warning: "bg-[var(--Primitive-Wood-100)] text-[var(--Text-Warning)]",
14
+ info: "bg-[var(--Primitive-Sea-50)] text-[var(--Primitive-Sea-600)] dark:bg-[var(--Primitive-Sea-600)] dark:text-[var(--Primitive-White-alpha-1000)]",
15
+ "info-fill": "bg-[var(--Primitive-Sea-600)] text-[var(--Text-on-Inverse)]",
16
+ success: "bg-[var(--Primitive-Forest-50)] text-[var(--Text-Success)]",
17
+ accent: "bg-[var(--Surface-Accent-Primary-Light)] text-[var(--Brand-Cake-Orange)]",
18
+ timesale: "bg-[var(--Primitive-Wood-400)] text-[var(--Text-on-Inverse)]",
19
+ berry: "bg-[var(--Primitive-Berry-700)] text-[var(--Text-on-Inverse)]",
20
+ coupon: "bg-[var(--Primitive-Sea-500)] text-[var(--Text-on-Inverse)]"
21
+ },
22
+ size: {
23
+ sm: "px-1.5 py-0.5 typo-label-xs",
24
+ md: "px-2 py-1 typo-label-sm"
25
+ }
26
+ },
27
+ defaultVariants: {
28
+ variant: "default",
29
+ size: "sm"
30
+ }
31
+ }
32
+ );
33
+ function u({
34
+ className: a,
35
+ variant: r,
36
+ size: t,
37
+ icon: e,
38
+ children: i,
39
+ ...v
40
+ }) {
41
+ return /* @__PURE__ */ n(
42
+ "span",
43
+ {
44
+ "data-slot": "tag",
45
+ className: s(x({ variant: r, size: t }), a),
46
+ ...v,
47
+ children: [
48
+ e,
49
+ i
50
+ ]
51
+ }
52
+ );
53
+ }
54
+ export {
55
+ u as Tag,
56
+ x as tagVariants
57
+ };
@@ -0,0 +1,55 @@
1
+ import { jsx as e, jsxs as r } from "react/jsx-runtime";
2
+ import "react";
3
+ import { cn as m } from "../../lib/utils.js";
4
+ function h({
5
+ items: a,
6
+ ariaLabel: i = "タイムライン",
7
+ className: s,
8
+ ...n
9
+ }) {
10
+ return a.length === 0 ? null : /* @__PURE__ */ e(
11
+ "ol",
12
+ {
13
+ "data-slot": "timeline",
14
+ "aria-label": i,
15
+ className: m("flex flex-col gap-4", s),
16
+ ...n,
17
+ children: a.map((t, l) => {
18
+ const c = l === a.length - 1;
19
+ return /* @__PURE__ */ r(
20
+ "li",
21
+ {
22
+ "data-slot": "timeline-item",
23
+ className: "relative grid grid-cols-[48px_minmax(0,1fr)] items-start gap-4",
24
+ children: [
25
+ /* @__PURE__ */ e(
26
+ "div",
27
+ {
28
+ "data-slot": "timeline-marker",
29
+ className: "relative z-10 flex w-12 justify-center",
30
+ children: t.marker ?? /* @__PURE__ */ e("span", { className: "grid size-10 place-items-center rounded-full bg-[var(--Surface-Accent-Primary-Light)] typo-label-md text-[var(--Text-Accent-Primary)]", children: l + 1 })
31
+ }
32
+ ),
33
+ !c && /* @__PURE__ */ e(
34
+ "span",
35
+ {
36
+ "data-slot": "timeline-connector",
37
+ "aria-hidden": "true",
38
+ className: "absolute -bottom-4 left-6 top-12 w-px bg-[var(--Border-Medium-Emphasis)]"
39
+ }
40
+ ),
41
+ /* @__PURE__ */ r("div", { className: "flex min-w-0 flex-col gap-2", children: [
42
+ /* @__PURE__ */ e("div", { className: "typo-heading-md text-[var(--Text-High-Emphasis)]", children: t.title }),
43
+ t.children
44
+ ] })
45
+ ]
46
+ },
47
+ l
48
+ );
49
+ })
50
+ }
51
+ );
52
+ }
53
+ export {
54
+ h as Timeline
55
+ };
@@ -0,0 +1,57 @@
1
+ import { jsxs as c, jsx as r } from "react/jsx-runtime";
2
+ import "react";
3
+ import { cn as p } from "../../lib/utils.js";
4
+ import { SkipLink as g } from "../foundations/skip-link.js";
5
+ import { Header as h } from "./header.js";
6
+ import { Container as v } from "./container.js";
7
+ function b({
8
+ title: o,
9
+ onBack: s,
10
+ backLabel: n = "戻る",
11
+ primaryAction: d,
12
+ sectionNav: a,
13
+ asidePanel: e,
14
+ children: i,
15
+ className: m,
16
+ mainId: l = "main-content",
17
+ skipLink: t,
18
+ headerLayout: f = "start"
19
+ }) {
20
+ return /* @__PURE__ */ c(
21
+ "div",
22
+ {
23
+ "data-slot": "workspace-shell",
24
+ className: p(
25
+ // 地が Surface-Secondary なので、配下 Card の既定サーフェスを白に切り替える文脈を宣言する
26
+ // (#150 の Section と同じ仕組み。dark は半透明白が重なって浮くため据え置き)。
27
+ "@container min-h-screen bg-[var(--Surface-Secondary)] [--card-surface:var(--Surface-Primary)] dark:[--card-surface:var(--Surface-Secondary)]",
28
+ m
29
+ ),
30
+ children: [
31
+ t !== !1 && /* @__PURE__ */ r(g, { href: `#${l}` }),
32
+ /* @__PURE__ */ r(
33
+ h,
34
+ {
35
+ variant: "back",
36
+ title: o,
37
+ onBack: s,
38
+ backLabel: n,
39
+ rightSlot: d,
40
+ className: f === "center" ? "grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)]" : void 0
41
+ }
42
+ ),
43
+ /* @__PURE__ */ r("main", { id: l, children: /* @__PURE__ */ r(v, { size: "page", className: "py-4 @md:py-6", children: a || e ? (
44
+ // 2カラム化は @lg(960)で行う。aside 320px を食っても本文が窮屈にならない幅に達してから。
45
+ /* @__PURE__ */ c("div", { className: "flex flex-col gap-4 @lg:flex-row @lg:gap-6", children: [
46
+ a && /* @__PURE__ */ r("aside", { className: "@container hidden @lg:block @lg:w-64 @lg:shrink-0", children: /* @__PURE__ */ r("div", { className: "@lg:sticky @lg:top-20 overflow-hidden rounded-2xl border border-[var(--Border-Low-Emphasis)] bg-[var(--Surface-Primary)] [&_[data-slot=side-nav]]:w-full [&_[data-slot=side-nav]]:border-r-0", children: a }) }),
47
+ /* @__PURE__ */ r("div", { className: "@container min-w-0 flex-1", children: i }),
48
+ e && /* @__PURE__ */ r("aside", { className: "@container @lg:w-80 @lg:shrink-0", children: /* @__PURE__ */ r("div", { className: "@lg:sticky @lg:top-20 space-y-4", children: e }) })
49
+ ] })
50
+ ) : i }) })
51
+ ]
52
+ }
53
+ );
54
+ }
55
+ export {
56
+ b as WorkspaceShell
57
+ };