@sableui/react 0.9.0 → 0.10.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 (221) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +124 -0
  3. package/CONTRIBUTING.md +2 -2
  4. package/DESIGN.md +55 -16
  5. package/README.md +12 -0
  6. package/dist/{_contract-C2M1SjBf.d.ts → _contract-CkqXDVww.d.ts} +25 -2
  7. package/dist/blocks/danger-zone-block.js +3 -3
  8. package/dist/blocks/danger-zone-block.meta.js +1 -1
  9. package/dist/blocks/faq-block.js +3 -3
  10. package/dist/blocks/goal-progress-block.js +1 -1
  11. package/dist/blocks/notification-list-block.js +1 -1
  12. package/dist/blocks/pricing-table-block.js +12 -12
  13. package/dist/blocks/product-card-block.js +3 -3
  14. package/dist/blocks/product-card-block.meta.js +3 -3
  15. package/dist/blocks/profile-card-block.js +1 -1
  16. package/dist/blocks/profile-form-block.js +3 -3
  17. package/dist/blocks/revenue-breakdown-block.js +5 -5
  18. package/dist/blocks/stat-row-block.js +3 -3
  19. package/dist/blocks/task-list-block.js +2 -2
  20. package/dist/blocks/team-members-block.js +1 -1
  21. package/dist/blocks/wallet-block.js +4 -4
  22. package/dist/blocks/wallet-block.meta.js +3 -3
  23. package/dist/components/accordion/accordion.meta.js +2 -2
  24. package/dist/components/app-header/app-header.meta.js +1 -1
  25. package/dist/components/app-shell/app-shell.meta.js +2 -2
  26. package/dist/components/area-chart/area-chart.meta.js +3 -3
  27. package/dist/components/badge/badge.js +13 -4
  28. package/dist/components/badge/badge.meta.js +24 -13
  29. package/dist/components/badge/badge.variants.js +37 -23
  30. package/dist/components/banner/banner.meta.js +8 -8
  31. package/dist/components/banner/banner.variants.js +3 -3
  32. package/dist/components/bar-chart/bar-chart.meta.js +4 -4
  33. package/dist/components/breadcrumbs/breadcrumbs.meta.js +1 -1
  34. package/dist/components/button/button.js +13 -2
  35. package/dist/components/button/button.meta.js +3 -3
  36. package/dist/components/card/card.js +16 -7
  37. package/dist/components/card/card.meta.js +4 -4
  38. package/dist/components/checkbox-card/checkbox-card.meta.js +10 -10
  39. package/dist/components/checkbox-card/checkbox-card.variants.js +15 -15
  40. package/dist/components/code-block/code-block.meta.js +1 -1
  41. package/dist/components/command-menu/command-menu.js +2 -0
  42. package/dist/components/command-menu/command-menu.meta.js +1 -1
  43. package/dist/components/context-card/context-card.meta.js +2 -2
  44. package/dist/components/destructive-action-modal/destructive-action-modal.meta.js +1 -1
  45. package/dist/components/dialog/dialog.meta.js +2 -2
  46. package/dist/components/disclosure-picker/disclosure-picker.js +48 -2
  47. package/dist/components/disclosure-picker/disclosure-picker.meta.js +3 -2
  48. package/dist/components/empty-state/empty-state.meta.js +4 -4
  49. package/dist/components/form/form.js +10 -5
  50. package/dist/components/gradient-art/gradient-art.meta.js +3 -3
  51. package/dist/components/label/label.meta.js +1 -1
  52. package/dist/components/line-chart/line-chart.meta.js +3 -3
  53. package/dist/components/meter/meter.js +1 -1
  54. package/dist/components/meter/meter.meta.js +2 -2
  55. package/dist/components/meter/meter.variants.js +1 -1
  56. package/dist/components/middle-truncate/middle-truncate.meta.js +4 -4
  57. package/dist/components/note/note.meta.js +3 -3
  58. package/dist/components/page-header/page-header.js +1 -1
  59. package/dist/components/pagination/pagination.meta.js +2 -2
  60. package/dist/components/phone/phone.meta.js +1 -1
  61. package/dist/components/pie-chart/pie-chart.meta.js +3 -3
  62. package/dist/components/pill/pill.js +4 -2
  63. package/dist/components/pill/pill.meta.js +19 -2
  64. package/dist/components/pill/pill.variants.js +23 -2
  65. package/dist/components/popover/popover.meta.js +2 -2
  66. package/dist/components/radar-chart/radar-chart.meta.js +3 -3
  67. package/dist/components/radial-chart/radial-chart.meta.js +3 -3
  68. package/dist/components/radio/radio.meta.js +2 -2
  69. package/dist/components/radio-card/radio-card.meta.js +6 -6
  70. package/dist/components/radio-card/radio-card.variants.js +15 -15
  71. package/dist/components/scroller/scroller.meta.js +1 -1
  72. package/dist/components/search-input/search-input.meta.js +1 -1
  73. package/dist/components/section-header/section-header.js +1 -1
  74. package/dist/components/segmented-bar/segmented-bar.js +1 -1
  75. package/dist/components/segmented-bar/segmented-bar.meta.js +6 -6
  76. package/dist/components/segmented-bar/segmented-bar.variants.js +4 -4
  77. package/dist/components/select/select.meta.js +2 -2
  78. package/dist/components/sheet/sheet.js +15 -1
  79. package/dist/components/sheet/sheet.meta.js +1 -1
  80. package/dist/components/side-nav/side-nav.meta.js +1 -1
  81. package/dist/components/sidebar/sidebar.meta.js +1 -1
  82. package/dist/components/sparkline/sparkline.meta.js +4 -4
  83. package/dist/components/spinner/spinner.meta.js +1 -1
  84. package/dist/components/status-dot/status-dot.js +4 -1
  85. package/dist/components/status-dot/status-dot.meta.js +8 -16
  86. package/dist/components/status-dot/status-dot.variants.js +13 -4
  87. package/dist/components/stepper/stepper.js +11 -2
  88. package/dist/components/table/table.meta.js +4 -4
  89. package/dist/components/tabs/tabs.meta.js +1 -1
  90. package/dist/components/textarea/textarea.meta.js +2 -2
  91. package/dist/components/toast/toast.js +1 -0
  92. package/dist/components/toast/toast.meta.js +1 -1
  93. package/dist/components/tooltip/tooltip.meta.js +2 -2
  94. package/dist/file-hashes.json +127 -124
  95. package/dist/foundations/spacing.js +8 -8
  96. package/dist/index.d.ts +138 -73
  97. package/dist/index.js +12 -1
  98. package/dist/lib/chart/types.js +3 -3
  99. package/dist/lib/is-promise.js +5 -0
  100. package/dist/lib/palette.js +103 -0
  101. package/dist/lib/selection-card.js +4 -4
  102. package/dist/palette.css +669 -0
  103. package/dist/patterns/auth-page.js +6 -6
  104. package/dist/patterns/auth-page.meta.js +3 -3
  105. package/dist/patterns/brand-landing-page.js +2 -2
  106. package/dist/patterns/chat-panel.js +2 -2
  107. package/dist/patterns/dashboard-page.js +71 -71
  108. package/dist/patterns/dashboard-page.meta.js +5 -5
  109. package/dist/patterns/feed-page.js +25 -25
  110. package/dist/patterns/feed-page.meta.js +3 -3
  111. package/dist/patterns/landing-page.js +1 -1
  112. package/dist/patterns/list-detail-page.js +17 -17
  113. package/dist/patterns/settings-page.js +17 -17
  114. package/dist/presets/index.d.ts +1 -1
  115. package/dist/presets/index.js +17 -2
  116. package/dist/styles.css +163 -55
  117. package/dist/{theme-provider-S0NVJs2Y.d.ts → theme-provider-CdSicAad.d.ts} +1 -1
  118. package/dist/themes/_contract.js +22 -8
  119. package/dist/themes/atelier/atelier.css +13 -13
  120. package/dist/themes/atelier/index.d.ts +1 -1
  121. package/dist/themes/ember/ember.css +13 -13
  122. package/dist/themes/ember/index.d.ts +1 -1
  123. package/dist/themes/index.d.ts +2 -2
  124. package/dist/themes/meridian/index.d.ts +1 -1
  125. package/dist/themes/meridian/meridian.css +13 -13
  126. package/dist/themes/poppy/index.d.ts +1 -1
  127. package/dist/themes/poppy/poppy.css +19 -16
  128. package/dist/themes/prism/index.d.ts +1 -1
  129. package/dist/themes/prism/prism.css +18 -15
  130. package/dist/themes/sable/index.d.ts +1 -1
  131. package/dist/themes/sable/sable.css +18 -22
  132. package/dist/themes/verdant/index.d.ts +1 -1
  133. package/dist/themes/verdant/verdant.css +15 -15
  134. package/llms/blocks/danger-zone-block.md +4 -4
  135. package/llms/blocks/faq-block.md +3 -3
  136. package/llms/blocks/goal-progress-block.md +1 -1
  137. package/llms/blocks/notification-list-block.md +1 -1
  138. package/llms/blocks/pricing-table-block.md +12 -12
  139. package/llms/blocks/product-card-block.md +6 -6
  140. package/llms/blocks/profile-card-block.md +1 -1
  141. package/llms/blocks/profile-form-block.md +3 -3
  142. package/llms/blocks/revenue-breakdown-block.md +5 -5
  143. package/llms/blocks/stat-row-block.md +3 -3
  144. package/llms/blocks/task-list-block.md +2 -2
  145. package/llms/blocks/team-members-block.md +1 -1
  146. package/llms/blocks/wallet-block.md +7 -7
  147. package/llms/components/accordion.md +2 -2
  148. package/llms/components/app-header.md +1 -1
  149. package/llms/components/app-shell.md +2 -2
  150. package/llms/components/area-chart.md +1 -1
  151. package/llms/components/badge.md +15 -7
  152. package/llms/components/banner.md +6 -6
  153. package/llms/components/bar-chart.md +2 -2
  154. package/llms/components/breadcrumbs.md +1 -1
  155. package/llms/components/button.md +3 -3
  156. package/llms/components/card.md +4 -4
  157. package/llms/components/checkbox-card.md +5 -5
  158. package/llms/components/code-block.md +1 -1
  159. package/llms/components/command-menu.md +1 -1
  160. package/llms/components/context-card.md +2 -2
  161. package/llms/components/destructive-action-modal.md +1 -1
  162. package/llms/components/dialog.md +2 -2
  163. package/llms/components/disclosure-picker.md +2 -1
  164. package/llms/components/empty-state.md +4 -4
  165. package/llms/components/gradient-art.md +3 -3
  166. package/llms/components/label.md +1 -1
  167. package/llms/components/line-chart.md +1 -1
  168. package/llms/components/meter.md +2 -2
  169. package/llms/components/middle-truncate.md +5 -5
  170. package/llms/components/note.md +3 -3
  171. package/llms/components/pagination.md +2 -2
  172. package/llms/components/phone.md +1 -1
  173. package/llms/components/pie-chart.md +1 -1
  174. package/llms/components/pill.md +12 -2
  175. package/llms/components/popover.md +2 -2
  176. package/llms/components/radar-chart.md +1 -1
  177. package/llms/components/radial-chart.md +1 -1
  178. package/llms/components/radio-card.md +4 -4
  179. package/llms/components/radio.md +2 -2
  180. package/llms/components/scroller.md +1 -1
  181. package/llms/components/search-input.md +1 -1
  182. package/llms/components/segmented-bar.md +7 -7
  183. package/llms/components/select.md +2 -2
  184. package/llms/components/sheet.md +1 -1
  185. package/llms/components/side-nav.md +1 -1
  186. package/llms/components/sidebar.md +1 -1
  187. package/llms/components/sparkline.md +2 -2
  188. package/llms/components/spinner.md +1 -1
  189. package/llms/components/status-dot.md +4 -4
  190. package/llms/components/table.md +8 -8
  191. package/llms/components/tabs.md +1 -1
  192. package/llms/components/textarea.md +2 -2
  193. package/llms/components/toast.md +1 -1
  194. package/llms/components/tooltip.md +2 -2
  195. package/llms/foundations/spacing.md +7 -7
  196. package/llms/layout/grid.md +1 -1
  197. package/llms/layout/page.md +1 -1
  198. package/llms/layout/region.md +1 -1
  199. package/llms/layout/split-pane.md +1 -1
  200. package/llms/patterns/auth-page.md +11 -11
  201. package/llms/patterns/brand-landing-page.md +2 -2
  202. package/llms/patterns/chat-panel.md +2 -2
  203. package/llms/patterns/dashboard-page.md +78 -78
  204. package/llms/patterns/feed-page.md +31 -31
  205. package/llms/patterns/landing-page.md +1 -1
  206. package/llms/patterns/list-detail-page.md +18 -18
  207. package/llms/patterns/settings-page.md +18 -18
  208. package/llms/reference/token-intent.md +25 -11
  209. package/llms/reference/utilities.md +1 -1
  210. package/llms/tasks/adding-a-component.md +4 -1
  211. package/llms/tasks/building-a-page.md +40 -0
  212. package/llms/tasks/building-with-sable.md +4 -0
  213. package/llms/tasks/converting-an-app.md +3 -1
  214. package/llms/tasks/using-presets.md +4 -0
  215. package/llms-full.txt +433 -347
  216. package/llms.txt +7 -7
  217. package/package.json +4 -4
  218. package/registry.json +369 -233
  219. package/scripts/lint-rules.mjs +26 -5
  220. package/scripts/sources.mjs +4 -1
  221. package/skills/sable/SKILL.md +14 -3
@@ -38,9 +38,9 @@ var roleLabel = {
38
38
  };
39
39
  var roleSummary = {
40
40
  owner: "Full access, including payouts and billing. Transfer ownership in studio settings.",
41
- admin: "Manages members, editions and payouts.",
42
- editor: "Drafts, prices and releases editions.",
43
- viewer: "Sees editions and sales, but can't change them."
41
+ admin: "Manages members, projects and billing.",
42
+ editor: "Drafts, edits and publishes projects.",
43
+ viewer: "Sees projects and reports, but can't change them."
44
44
  };
45
45
  var seats = 10;
46
46
  var initialMembers = [
@@ -54,9 +54,9 @@ var initialMembers = [
54
54
  pending: false,
55
55
  joined: "Mar 4, 2024",
56
56
  lastActive: "Online now",
57
- editions: 12,
57
+ projects: 12,
58
58
  activity: [
59
- { id: "a1", icon: "gem", text: "Released Analytical Engine No. 3 \u2014 edition of 50", when: "2 hours ago" },
59
+ { id: "a1", icon: "file", text: "Published the Analytical Engine No. 3 roadmap", when: "2 hours ago" },
60
60
  { id: "a2", icon: "mail", text: "Invited louise@bourgeois.studio as Editor", when: "2 days ago" }
61
61
  ]
62
62
  },
@@ -70,11 +70,11 @@ var initialMembers = [
70
70
  pending: false,
71
71
  joined: "Mar 9, 2024",
72
72
  lastActive: "20 minutes ago",
73
- editions: 4,
73
+ projects: 4,
74
74
  activity: [
75
75
  { id: "a1", icon: "user", text: "Changed Frida Kahlo's role to Viewer", when: "Yesterday" },
76
- { id: "a2", icon: "edit", text: "Updated pricing on First Compiler \u2014 edition of 10", when: "3 days ago" },
77
- { id: "a3", icon: "gem", text: "Released First Compiler \u2014 edition of 10", when: "Sep 28" }
76
+ { id: "a2", icon: "edit", text: "Updated the budget on First Compiler", when: "3 days ago" },
77
+ { id: "a3", icon: "file", text: "Created the First Compiler project", when: "Sep 28" }
78
78
  ]
79
79
  },
80
80
  {
@@ -87,10 +87,10 @@ var initialMembers = [
87
87
  pending: false,
88
88
  joined: "Jun 18, 2024",
89
89
  lastActive: "3 hours ago",
90
- editions: 7,
90
+ projects: 7,
91
91
  activity: [
92
92
  { id: "a1", icon: "calendar", text: "Scheduled Frankenstein Studies for Oct 14", when: "3 hours ago" },
93
- { id: "a2", icon: "gem", text: "Released The Last Man \u2014 edition of 25", when: "Sep 21" }
93
+ { id: "a2", icon: "file", text: "Published The Last Man report", when: "Sep 21" }
94
94
  ]
95
95
  },
96
96
  {
@@ -103,10 +103,10 @@ var initialMembers = [
103
103
  pending: false,
104
104
  joined: "Jan 12, 2025",
105
105
  lastActive: "Yesterday",
106
- editions: 3,
106
+ projects: 3,
107
107
  activity: [
108
- { id: "a1", icon: "upload", text: "Uploaded artwork for Little Girl Blue", when: "Yesterday" },
109
- { id: "a2", icon: "gem", text: "Released Feeling Good \u2014 edition of 100", when: "Aug 30" }
108
+ { id: "a1", icon: "upload", text: "Uploaded files for Little Girl Blue", when: "Yesterday" },
109
+ { id: "a2", icon: "file", text: "Published the Feeling Good brief", when: "Aug 30" }
110
110
  ]
111
111
  },
112
112
  {
@@ -119,7 +119,7 @@ var initialMembers = [
119
119
  pending: false,
120
120
  joined: "Jul 2, 2025",
121
121
  lastActive: "4 days ago",
122
- editions: 0,
122
+ projects: 0,
123
123
  activity: [{ id: "a1", icon: "comment", text: "Commented on the Las Dos Fridas draft", when: "4 days ago" }]
124
124
  },
125
125
  {
@@ -321,8 +321,8 @@ function ListDetailPage() {
321
321
  /* @__PURE__ */ jsx("dd", { children: selected.joined }),
322
322
  /* @__PURE__ */ jsx("dt", { children: "Last active" }),
323
323
  /* @__PURE__ */ jsx("dd", { className: selected.lastActive === "Online now" ? "text-success" : void 0, children: selected.lastActive }),
324
- /* @__PURE__ */ jsx("dt", { children: "Editions released" }),
325
- /* @__PURE__ */ jsx("dd", { children: selected.editions })
324
+ /* @__PURE__ */ jsx("dt", { children: "Projects owned" }),
325
+ /* @__PURE__ */ jsx("dd", { children: selected.projects })
326
326
  ] }) })
327
327
  ] }) }),
328
328
  selected.role !== "owner" ? /* @__PURE__ */ jsx(CardFooter, { children: /* @__PURE__ */ jsxs(Row, { gap: 2, wrap: true, children: [
@@ -358,7 +358,7 @@ function ListDetailPage() {
358
358
  open: confirming,
359
359
  onOpenChange: setConfirming,
360
360
  title: selected.pending ? "Revoke this invite?" : `Remove ${selected.name}?`,
361
- description: selected.pending ? `${selected.email} won't be able to join with the link they were sent.` : "They lose access to the studio right away. Editions they released stay on sale.",
361
+ description: selected.pending ? `${selected.email} won't be able to join with the link they were sent.` : "They lose access to the workspace right away. Projects they own stay with the team.",
362
362
  confirmLabel: selected.pending ? "Revoke invite" : "Remove member",
363
363
  onConfirm: () => remove(selected.id)
364
364
  }
@@ -52,16 +52,16 @@ var timezones = [
52
52
  { value: "asia-tokyo", label: "Tokyo (GMT+9)" }
53
53
  ];
54
54
  var notifications = [
55
- { name: "notifyCollects", title: "New collects", description: "When someone collects your work", on: true },
56
- { name: "notifySoldOut", title: "Sold out", description: "When an edition sells its last copy", on: true },
57
- { name: "notifyFollowers", title: "New followers", description: "When a collector follows you", on: false },
58
- { name: "notifyDigest", title: "Weekly digest", description: "Sales and collectors, every Monday", on: true },
55
+ { name: "notifyComments", title: "New comments", description: "When someone comments on your work", on: true },
56
+ { name: "notifyInvoicePaid", title: "Invoice paid", description: "When a customer pays an invoice", on: true },
57
+ { name: "notifyMembers", title: "New members", description: "When someone joins your workspace", on: false },
58
+ { name: "notifyDigest", title: "Weekly digest", description: "Activity and usage, every Monday", on: true },
59
59
  { name: "notifyProduct", title: "Product updates", description: "New Atelier features", on: false }
60
60
  ];
61
61
  var payouts = [
62
62
  { label: "Next payout", value: "$1,284.60", note: "Friday, Oct 16" },
63
63
  { label: "Pending", value: "$412.00", note: "Clears in 7 days" },
64
- { label: "Paid this year", value: "$18,920.00", note: "Across 214 collects" }
64
+ { label: "Paid this year", value: "$18,920.00", note: "Across 214 invoices" }
65
65
  ];
66
66
  function SettingsPage() {
67
67
  const [activeSection, setActiveSection] = useState("profile");
@@ -81,8 +81,8 @@ function SettingsPage() {
81
81
  ),
82
82
  bottomNav: /* @__PURE__ */ jsxs(BottomNav, { "aria-label": "Primary", children: [
83
83
  /* @__PURE__ */ jsx(BottomNavItem, { icon: /* @__PURE__ */ jsx(Icon, { name: "grid" }), label: "Overview", showLabel: true, render: /* @__PURE__ */ jsx("a", { href: "/" }) }),
84
- /* @__PURE__ */ jsx(BottomNavItem, { icon: /* @__PURE__ */ jsx(Icon, { name: "image-stack" }), label: "Editions", showLabel: true, render: /* @__PURE__ */ jsx("a", { href: "/editions" }) }),
85
- /* @__PURE__ */ jsx(BottomNavItem, { icon: /* @__PURE__ */ jsx(Icon, { name: "user" }), label: "Collectors", showLabel: true, render: /* @__PURE__ */ jsx("a", { href: "/collectors" }) }),
84
+ /* @__PURE__ */ jsx(BottomNavItem, { icon: /* @__PURE__ */ jsx(Icon, { name: "folder" }), label: "Accounts", showLabel: true, render: /* @__PURE__ */ jsx("a", { href: "/accounts" }) }),
85
+ /* @__PURE__ */ jsx(BottomNavItem, { icon: /* @__PURE__ */ jsx(Icon, { name: "user" }), label: "Customers", showLabel: true, render: /* @__PURE__ */ jsx("a", { href: "/customers" }) }),
86
86
  /* @__PURE__ */ jsx(BottomNavItem, { icon: /* @__PURE__ */ jsx(Icon, { name: "bell" }), label: "Activity", showLabel: true, render: /* @__PURE__ */ jsx("a", { href: "/activity" }) }),
87
87
  /* @__PURE__ */ jsx(BottomNavItem, { icon: /* @__PURE__ */ jsx(Icon, { name: "gear" }), label: "Settings", showLabel: true, active: true, render: /* @__PURE__ */ jsx("a", { href: "/settings" }) })
88
88
  ] }),
@@ -90,8 +90,8 @@ function SettingsPage() {
90
90
  /* @__PURE__ */ jsx(SidebarHeader, { children: /* @__PURE__ */ jsx(SidebarBrand, { mark: /* @__PURE__ */ jsx(Icon, { name: "gem", variant: "solid" }), label: "Atelier", render: /* @__PURE__ */ jsx("a", { href: "/" }) }) }),
91
91
  /* @__PURE__ */ jsxs(SidebarNav, { children: [
92
92
  /* @__PURE__ */ jsx(SidebarItem, { icon: /* @__PURE__ */ jsx(Icon, { name: "grid" }), label: "Overview", render: /* @__PURE__ */ jsx("a", { href: "/" }) }),
93
- /* @__PURE__ */ jsx(SidebarItem, { icon: /* @__PURE__ */ jsx(Icon, { name: "image-stack" }), label: "Editions", render: /* @__PURE__ */ jsx("a", { href: "/editions" }) }),
94
- /* @__PURE__ */ jsx(SidebarItem, { icon: /* @__PURE__ */ jsx(Icon, { name: "user" }), label: "Collectors", render: /* @__PURE__ */ jsx("a", { href: "/collectors" }) }),
93
+ /* @__PURE__ */ jsx(SidebarItem, { icon: /* @__PURE__ */ jsx(Icon, { name: "folder" }), label: "Accounts", render: /* @__PURE__ */ jsx("a", { href: "/accounts" }) }),
94
+ /* @__PURE__ */ jsx(SidebarItem, { icon: /* @__PURE__ */ jsx(Icon, { name: "user" }), label: "Customers", render: /* @__PURE__ */ jsx("a", { href: "/customers" }) }),
95
95
  /* @__PURE__ */ jsx(
96
96
  SidebarItem,
97
97
  {
@@ -143,7 +143,7 @@ function SettingsPage() {
143
143
  /* @__PURE__ */ jsxs(Card, { id: "profile", className: "scroll-mt-6", children: [
144
144
  /* @__PURE__ */ jsxs(CardHeader, { children: [
145
145
  /* @__PURE__ */ jsx(CardTitle, { render: /* @__PURE__ */ jsx("h2", {}), children: "Profile" }),
146
- /* @__PURE__ */ jsx(CardDescription, { children: "How collectors see you on Atelier." })
146
+ /* @__PURE__ */ jsx(CardDescription, { children: "How your team sees you on Atelier." })
147
147
  ] }),
148
148
  /* @__PURE__ */ jsxs(Form, { onSubmit: (event) => event.preventDefault(), className: "gap-0", children: [
149
149
  /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs(Stack, { gap: 3, children: [
@@ -161,14 +161,14 @@ function SettingsPage() {
161
161
  /* @__PURE__ */ jsx(Field, { label: "Display name", name: "displayName", required: true, children: /* @__PURE__ */ jsx(Input, { defaultValue: "Ada Lovelace", autoComplete: "name" }) }),
162
162
  /* @__PURE__ */ jsx(Field, { label: "Handle", name: "handle", description: "atelier.com/@ada", required: true, children: /* @__PURE__ */ jsx(Input, { defaultValue: "ada", autoComplete: "username", spellCheck: false }) })
163
163
  ] }),
164
- /* @__PURE__ */ jsx(Field, { label: "Bio", name: "bio", description: "Shown on your profile and edition pages.", children: /* @__PURE__ */ jsx(
164
+ /* @__PURE__ */ jsx(Field, { label: "Bio", name: "bio", description: "Shown on your profile and in comments.", children: /* @__PURE__ */ jsx(
165
165
  Textarea,
166
166
  {
167
167
  rows: 3,
168
- defaultValue: "Generative artist working in plotted ink and code. New editions of 25 to 100 every month."
168
+ defaultValue: "Product designer working on tools for small teams. Writing about process every month."
169
169
  }
170
170
  ) }),
171
- /* @__PURE__ */ jsx(Grid, { cols: { base: 1, sm: 2 }, gap: 3, children: /* @__PURE__ */ jsx(Field, { label: "Timezone", name: "timezone", description: "Release times use this zone.", children: /* @__PURE__ */ jsxs(Select, { defaultValue: "europe-london", items: timezones, children: [
171
+ /* @__PURE__ */ jsx(Grid, { cols: { base: 1, sm: 2 }, gap: 3, children: /* @__PURE__ */ jsx(Field, { label: "Timezone", name: "timezone", description: "Due dates use this zone.", children: /* @__PURE__ */ jsxs(Select, { defaultValue: "europe-london", items: timezones, children: [
172
172
  /* @__PURE__ */ jsx(SelectTrigger, {}),
173
173
  /* @__PURE__ */ jsx(SelectContent, { children: timezones.map((zone) => /* @__PURE__ */ jsx(SelectItem, { value: zone.value, children: zone.label }, zone.value)) })
174
174
  ] }) }) })
@@ -179,7 +179,7 @@ function SettingsPage() {
179
179
  /* @__PURE__ */ jsxs(Card, { id: "notifications", className: "scroll-mt-6", children: [
180
180
  /* @__PURE__ */ jsxs(CardHeader, { children: [
181
181
  /* @__PURE__ */ jsx(CardTitle, { render: /* @__PURE__ */ jsx("h2", {}), children: "Notifications" }),
182
- /* @__PURE__ */ jsx(CardDescription, { children: "Email updates about your editions. Changes save automatically." })
182
+ /* @__PURE__ */ jsx(CardDescription, { children: "Email updates about your projects. Changes save automatically." })
183
183
  ] }),
184
184
  /* @__PURE__ */ jsx(CardList, { children: notifications.map((item) => /* @__PURE__ */ jsx(
185
185
  Entity,
@@ -230,7 +230,7 @@ function SettingsPage() {
230
230
  {
231
231
  leading: /* @__PURE__ */ jsx(Icon, { name: "download", className: "text-lg text-muted-foreground" }),
232
232
  title: "Export data",
233
- subtitle: "Editions, sales, and collectors",
233
+ subtitle: "Projects, invoices, and members",
234
234
  action: /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", children: "Export" })
235
235
  }
236
236
  )
@@ -239,7 +239,7 @@ function SettingsPage() {
239
239
  /* @__PURE__ */ jsxs(Card, { children: [
240
240
  /* @__PURE__ */ jsxs(CardHeader, { children: [
241
241
  /* @__PURE__ */ jsx(CardTitle, { render: /* @__PURE__ */ jsx("h2", {}), children: "Delete account" }),
242
- /* @__PURE__ */ jsx(CardDescription, { children: "Permanently remove your profile, editions, and sales history. Collectors keep the editions they own." })
242
+ /* @__PURE__ */ jsx(CardDescription, { children: "Permanently remove your profile, projects, and billing history. Files you shared stay with your team." })
243
243
  ] }),
244
244
  /* @__PURE__ */ jsx(CardFooter, { className: "justify-end", children: /* @__PURE__ */ jsx(Button, { variant: "destructive", onClick: () => setDeleteOpen(true), children: "Delete account" }) })
245
245
  ] })
@@ -252,7 +252,7 @@ function SettingsPage() {
252
252
  open: deleteOpen,
253
253
  onOpenChange: setDeleteOpen,
254
254
  title: "Delete your account?",
255
- description: "This permanently removes your profile, 12 editions, and sales history. Pending payouts are still sent. This can't be undone.",
255
+ description: "This permanently removes your profile, 12 projects, and billing history. Your final invoice is still sent. This can't be undone.",
256
256
  confirmLabel: "Delete account",
257
257
  confirmingLabel: "Deleting\u2026",
258
258
  confirmText: "ada",
@@ -1,4 +1,4 @@
1
- import { T as ThemeManifest } from '../_contract-C2M1SjBf.js';
1
+ import { T as ThemeManifest } from '../_contract-CkqXDVww.js';
2
2
 
3
3
  /** An OKLCH colour, lightness 0–1. Extra fields (alpha) ride along untouched. */
4
4
  interface OklchColor {
@@ -7,11 +7,13 @@ import {
7
7
  TYPE_REFINEMENT_TOKENS,
8
8
  TYPE_OVERLINE_TOKENS,
9
9
  DENSITY_TOKENS,
10
+ RHYTHM_TOKENS,
10
11
  LAYERING_TOKENS,
11
12
  WORKSPACE_SURFACE_TOKENS,
12
13
  DERIVED_EDGE_TOKENS,
13
14
  TYPE_UI_TOKENS,
14
- ART_TOKENS
15
+ ART_TOKENS,
16
+ PALETTE_TOKENS
15
17
  } from "../themes/_contract.js";
16
18
  import { LABEL_CONTRAST_RULE, LABELLED_FILLS, checkLabelledFills } from "../themes/contrast.js";
17
19
  import {
@@ -39,6 +41,7 @@ var PRESET_TOKEN_NAMES = [.../* @__PURE__ */ new Set([
39
41
  ...DERIVED_EDGE_TOKENS.map((name) => `theme-${name}`),
40
42
  // Art direction: optional hooks — a preset without them paints the default art.
41
43
  ...ART_TOKENS.map((name) => `theme-${name}`),
44
+ ...PALETTE_TOKENS.map((name) => `theme-${name}`),
42
45
  ...WORKSPACE_SURFACE_TOKENS,
43
46
  ...DERIVED_EDGE_TOKENS,
44
47
  ...RADIUS_TOKENS,
@@ -47,6 +50,7 @@ var PRESET_TOKEN_NAMES = [.../* @__PURE__ */ new Set([
47
50
  ...TYPE_REFINEMENT_TOKENS,
48
51
  ...TYPE_OVERLINE_TOKENS,
49
52
  ...DENSITY_TOKENS,
53
+ ...RHYTHM_TOKENS,
50
54
  ...LAYERING_TOKENS,
51
55
  ...TYPE_UI_TOKENS,
52
56
  "font-sans",
@@ -79,9 +83,20 @@ var STATUS_TEXT_FROM_FILL = {
79
83
  "tone-warning-text": "tone-warning",
80
84
  "tone-info-text": "tone-info"
81
85
  };
86
+ var TONE_RENAMES = [
87
+ [/\btone-edition\b/g, "tone-1"],
88
+ [/\btone-collectible\b/g, "tone-2"],
89
+ [/\btone-standard\b/g, "tone-3"]
90
+ ];
91
+ var renameTones = (name) => TONE_RENAMES.reduce((out, [from, to]) => out.replace(from, to), name);
82
92
  function upgradePreset(input) {
83
93
  if (!record(input) || !record(input.tokens)) return input;
84
- const tokens = input.tokens;
94
+ const tokens = { ...input.tokens };
95
+ for (const group of ["shared", "light", "dark"]) {
96
+ const values = tokens[group];
97
+ if (!record(values)) continue;
98
+ tokens[group] = Object.fromEntries(Object.entries(values).map(([name, value]) => [renameTones(name), typeof value === "string" ? renameTones(value) : value]));
99
+ }
85
100
  const shared = record(tokens.shared) ? tokens.shared : {};
86
101
  const upgraded = { ...tokens };
87
102
  for (const mode of ["light", "dark"]) {