@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
@@ -4,9 +4,9 @@ function chartColor(index) {
4
4
  return `var(--chart-${index % CHART_SERIES_COUNT + 1})`;
5
5
  }
6
6
  var TONE_VAR = {
7
- edition: "var(--tone-edition)",
8
- collectible: "var(--tone-collectible)",
9
- standard: "var(--tone-standard)",
7
+ "1": "var(--tone-1)",
8
+ "2": "var(--tone-2)",
9
+ "3": "var(--tone-3)",
10
10
  info: "var(--tone-info)",
11
11
  warning: "var(--tone-warning)",
12
12
  primary: "var(--primary)",
@@ -0,0 +1,5 @@
1
+ // src/lib/is-promise.ts
2
+ var isPromise = (value) => typeof value?.then === "function";
3
+ export {
4
+ isPromise
5
+ };
@@ -0,0 +1,103 @@
1
+ // src/lib/palette.ts
2
+ var PALETTE_STEPS = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
3
+ var PALETTE_FAMILIES = [
4
+ { name: "red", hue: 25, light: { l: 0.6, c: 0.21 }, dark: { l: 0.64, c: 0.2 } },
5
+ { name: "orange", hue: 50, light: { l: 0.69, c: 0.18 }, dark: { l: 0.71, c: 0.17 } },
6
+ // Yellow is only yellow when it is light; at 0.6 it is olive.
7
+ { name: "yellow", hue: 92, light: { l: 0.83, c: 0.16 }, dark: { l: 0.82, c: 0.15 } },
8
+ { name: "green", hue: 145, light: { l: 0.64, c: 0.17 }, dark: { l: 0.68, c: 0.16 } },
9
+ { name: "teal", hue: 190, light: { l: 0.7, c: 0.12 }, dark: { l: 0.74, c: 0.12 } },
10
+ { name: "blue", hue: 262, light: { l: 0.6, c: 0.19 }, dark: { l: 0.64, c: 0.17 } },
11
+ { name: "purple", hue: 305, light: { l: 0.56, c: 0.22 }, dark: { l: 0.64, c: 0.2 } },
12
+ { name: "pink", hue: 350, light: { l: 0.65, c: 0.2 }, dark: { l: 0.69, c: 0.18 } }
13
+ ];
14
+ var PALETTE_COLORS = ["red", "orange", "yellow", "green", "teal", "blue", "purple", "pink"];
15
+ var isPaletteColor = (value) => PALETTE_COLORS.includes(value);
16
+ var PALETTE_SLOTS = {
17
+ wash: 100,
18
+ "wash-strong": 200,
19
+ edge: 300,
20
+ dot: 500,
21
+ solid: 700,
22
+ text: 800,
23
+ "solid-ink": 50
24
+ };
25
+ var PALETTE_TONES = ["tone-1", "tone-2", "tone-3", "tone-info", "tone-warning", "success", "destructive"];
26
+ var PALETTE_SCALES = ["neutral", ...PALETTE_FAMILIES.map((family) => family.name), ...PALETTE_TONES];
27
+ var STEP_CURVES = {
28
+ light: {
29
+ 50: { target: 0.985, pull: 0.94, chroma: 0.12 },
30
+ 100: { target: 0.985, pull: 0.86, chroma: 0.22 },
31
+ 200: { target: 0.985, pull: 0.7, chroma: 0.4 },
32
+ 300: { target: 0.985, pull: 0.5, chroma: 0.62 },
33
+ 400: { target: 0.985, pull: 0.26, chroma: 0.85 },
34
+ 500: { target: 0, pull: 0, chroma: 1 },
35
+ // The far half pulls toward the ink, by shares of whatever distance is
36
+ // left, so any anchor walks away from the page: a dark one (a deep tone)
37
+ // cannot turn back lighter, and a light one (yellow) still reaches text
38
+ // strength by 700 instead of stopping at olive.
39
+ 600: { target: 0.2, pull: 0.2, chroma: 1 },
40
+ 700: { target: 0.2, pull: 0.5, chroma: 0.92 },
41
+ 800: { target: 0.2, pull: 0.6, chroma: 0.8 },
42
+ 900: { target: 0.2, pull: 0.75, chroma: 0.66 },
43
+ 950: { target: 0.2, pull: 0.88, chroma: 0.52 }
44
+ },
45
+ dark: {
46
+ 50: { target: 0.17, pull: 0.93, chroma: 0.25 },
47
+ 100: { target: 0.17, pull: 0.85, chroma: 0.32 },
48
+ 200: { target: 0.17, pull: 0.7, chroma: 0.45 },
49
+ 300: { target: 0.17, pull: 0.5, chroma: 0.62 },
50
+ 400: { target: 0.17, pull: 0.27, chroma: 0.82 },
51
+ 500: { target: 0, pull: 0, chroma: 1 },
52
+ 600: { target: 0.97, pull: 0.2, chroma: 0.95 },
53
+ 700: { target: 0.97, pull: 0.42, chroma: 0.8 },
54
+ 800: { target: 0.97, pull: 0.6, chroma: 0.6 },
55
+ 900: { target: 0.97, pull: 0.75, chroma: 0.42 },
56
+ 950: { target: 0.97, pull: 0.88, chroma: 0.28 }
57
+ }
58
+ };
59
+ var NEUTRAL_MIX = {
60
+ 50: 3,
61
+ 100: 6,
62
+ 200: 12,
63
+ 300: 22,
64
+ 400: 38,
65
+ 500: 50,
66
+ 600: 62,
67
+ 700: 72,
68
+ 800: 82,
69
+ 900: 90,
70
+ 950: 95
71
+ };
72
+ var TONE_CHROMA_CAP = {
73
+ light: { 50: 0.02, 100: 0.04, 200: 0.07, 300: 0.11 },
74
+ dark: { 50: 0.035, 100: 0.05, 200: 0.07, 300: 0.1 }
75
+ };
76
+ var LEAN = { amount: 0.5, cap: 15, fullAt: 0.06, maxHarmony: 2 };
77
+ var LEAN_REACH = LEAN.cap * LEAN.maxHarmony;
78
+ var clamp = (n, lo, hi) => Math.min(hi, Math.max(lo, n));
79
+ function familyHue(hue, brand, harmony = 1) {
80
+ const gap = ((brand.h - hue + 540) % 360 + 360) % 360 - 180;
81
+ const lean = clamp(gap * LEAN.amount, -LEAN.cap, LEAN.cap) * clamp(harmony, 0, LEAN.maxHarmony) * clamp(brand.c / LEAN.fullAt, 0, 1);
82
+ return ((hue + lean) % 360 + 360) % 360;
83
+ }
84
+ function stepFrom(anchor, step, mode) {
85
+ const curve = STEP_CURVES[mode][step];
86
+ return { l: anchor.l + (curve.target - anchor.l) * curve.pull, c: anchor.c * curve.chroma };
87
+ }
88
+ export {
89
+ LEAN,
90
+ LEAN_REACH,
91
+ NEUTRAL_MIX,
92
+ PALETTE_COLORS,
93
+ PALETTE_FAMILIES,
94
+ PALETTE_SCALES,
95
+ PALETTE_SLOTS,
96
+ PALETTE_STEPS,
97
+ PALETTE_TONES,
98
+ STEP_CURVES,
99
+ TONE_CHROMA_CAP,
100
+ familyHue,
101
+ isPaletteColor,
102
+ stepFrom
103
+ };
@@ -14,12 +14,12 @@ var SELECTION_CARD_LAYOUT = {
14
14
  };
15
15
  var SELECTION_CARD_TILE_HEAD = "flex w-full items-start justify-between gap-3";
16
16
  var SELECTION_CARD_GLYPH = "shrink-0 text-2xl leading-none motion-interactive";
17
- var SELECTION_CARD_TONES = ["neutral", "standard", "collectible", "edition", "info", "warning"];
17
+ var SELECTION_CARD_TONES = ["neutral", "3", "2", "1", "info", "warning"];
18
18
  var SELECTION_CARD_CHECKED = {
19
19
  neutral: "data-[checked]:border-transparent data-[checked]:ring-[1.5px] data-[checked]:ring-inset data-[checked]:ring-primary data-[checked]:bg-muted",
20
- standard: "data-[checked]:border-transparent data-[checked]:ring-[1.5px] data-[checked]:ring-inset data-[checked]:ring-tone-standard",
21
- collectible: "data-[checked]:border-transparent data-[checked]:ring-[1.5px] data-[checked]:ring-inset data-[checked]:ring-tone-collectible",
22
- edition: "data-[checked]:border-transparent data-[checked]:ring-[1.5px] data-[checked]:ring-inset data-[checked]:ring-tone-edition",
20
+ "3": "data-[checked]:border-transparent data-[checked]:ring-[1.5px] data-[checked]:ring-inset data-[checked]:ring-tone-3",
21
+ "2": "data-[checked]:border-transparent data-[checked]:ring-[1.5px] data-[checked]:ring-inset data-[checked]:ring-tone-2",
22
+ "1": "data-[checked]:border-transparent data-[checked]:ring-[1.5px] data-[checked]:ring-inset data-[checked]:ring-tone-1",
23
23
  info: "data-[checked]:border-transparent data-[checked]:ring-[1.5px] data-[checked]:ring-inset data-[checked]:ring-tone-info",
24
24
  warning: "data-[checked]:border-transparent data-[checked]:ring-[1.5px] data-[checked]:ring-inset data-[checked]:ring-tone-warning"
25
25
  };