@rtkelly-labs/design-system 0.0.0-bootstrap.0 → 0.16.0-dev.0.37dedac

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 (284) hide show
  1. package/CHANGELOG.md +347 -0
  2. package/LICENSE +21 -0
  3. package/README.md +317 -2
  4. package/dist/components/AlertDialog.js +95 -0
  5. package/dist/components/AlertDialog.js.map +1 -0
  6. package/dist/components/AppShell.js +261 -0
  7. package/dist/components/AppShell.js.map +1 -0
  8. package/dist/components/AsciiDivider.js +8 -0
  9. package/dist/components/AsciiDivider.js.map +1 -0
  10. package/dist/components/AsciiGauge.js +130 -0
  11. package/dist/components/AsciiGauge.js.map +1 -0
  12. package/dist/components/Avatar.js +87 -0
  13. package/dist/components/Avatar.js.map +1 -0
  14. package/dist/components/Badge.js +25 -0
  15. package/dist/components/Badge.js.map +1 -0
  16. package/dist/components/BarChart.js +288 -0
  17. package/dist/components/BarChart.js.map +1 -0
  18. package/dist/components/BracketText.js +23 -0
  19. package/dist/components/BracketText.js.map +1 -0
  20. package/dist/components/BulletChart.js +50 -0
  21. package/dist/components/BulletChart.js.map +1 -0
  22. package/dist/components/Button.js +130 -0
  23. package/dist/components/Button.js.map +1 -0
  24. package/dist/components/Card.js +181 -0
  25. package/dist/components/Card.js.map +1 -0
  26. package/dist/components/ChartTooltip.js +54 -0
  27. package/dist/components/ChartTooltip.js.map +1 -0
  28. package/dist/components/Checkbox.js +55 -0
  29. package/dist/components/Checkbox.js.map +1 -0
  30. package/dist/components/ColophonCard.js +122 -0
  31. package/dist/components/ColophonCard.js.map +1 -0
  32. package/dist/components/DataTable.js +299 -0
  33. package/dist/components/DataTable.js.map +1 -0
  34. package/dist/components/Divider.js +42 -0
  35. package/dist/components/Divider.js.map +1 -0
  36. package/dist/components/Drawer.js +81 -0
  37. package/dist/components/Drawer.js.map +1 -0
  38. package/dist/components/EmptyState.js +39 -0
  39. package/dist/components/EmptyState.js.map +1 -0
  40. package/dist/components/ErrorSummary.js +122 -0
  41. package/dist/components/ErrorSummary.js.map +1 -0
  42. package/dist/components/Fieldset.js +37 -0
  43. package/dist/components/Fieldset.js.map +1 -0
  44. package/dist/components/Glyph.js +60 -0
  45. package/dist/components/Glyph.js.map +1 -0
  46. package/dist/components/Input.js +111 -0
  47. package/dist/components/Input.js.map +1 -0
  48. package/dist/components/LinkProvider.js +76 -0
  49. package/dist/components/LinkProvider.js.map +1 -0
  50. package/dist/components/Menu.js +144 -0
  51. package/dist/components/Menu.js.map +1 -0
  52. package/dist/components/MetadataGrid.js +184 -0
  53. package/dist/components/MetadataGrid.js.map +1 -0
  54. package/dist/components/MobileNav.js +120 -0
  55. package/dist/components/MobileNav.js.map +1 -0
  56. package/dist/components/Modal.js +79 -0
  57. package/dist/components/Modal.js.map +1 -0
  58. package/dist/components/NerdIcon.js +177 -0
  59. package/dist/components/NerdIcon.js.map +1 -0
  60. package/dist/components/NoteBlock.js +84 -0
  61. package/dist/components/NoteBlock.js.map +1 -0
  62. package/dist/components/PageHeader.js +34 -0
  63. package/dist/components/PageHeader.js.map +1 -0
  64. package/dist/components/PageTitle.js +21 -0
  65. package/dist/components/PageTitle.js.map +1 -0
  66. package/dist/components/Pagination.js +96 -0
  67. package/dist/components/Pagination.js.map +1 -0
  68. package/dist/components/Popover.js +87 -0
  69. package/dist/components/Popover.js.map +1 -0
  70. package/dist/components/Progress.js +83 -0
  71. package/dist/components/Progress.js.map +1 -0
  72. package/dist/components/RadioGroup.js +74 -0
  73. package/dist/components/RadioGroup.js.map +1 -0
  74. package/dist/components/ReportDocument.js +75 -0
  75. package/dist/components/ReportDocument.js.map +1 -0
  76. package/dist/components/SectionContainer.js +18 -0
  77. package/dist/components/SectionContainer.js.map +1 -0
  78. package/dist/components/Select.js +199 -0
  79. package/dist/components/Select.js.map +1 -0
  80. package/dist/components/SiteFooter.js +29 -0
  81. package/dist/components/SiteFooter.js.map +1 -0
  82. package/dist/components/SiteHeader.js +59 -0
  83. package/dist/components/SiteHeader.js.map +1 -0
  84. package/dist/components/SiteNav.js +141 -0
  85. package/dist/components/SiteNav.js.map +1 -0
  86. package/dist/components/Skeleton.js +51 -0
  87. package/dist/components/Skeleton.js.map +1 -0
  88. package/dist/components/SocialIcon.js +77 -0
  89. package/dist/components/SocialIcon.js.map +1 -0
  90. package/dist/components/Sparkline.js +104 -0
  91. package/dist/components/Sparkline.js.map +1 -0
  92. package/dist/components/Spinner.js +65 -0
  93. package/dist/components/Spinner.js.map +1 -0
  94. package/dist/components/StatCard.js +53 -0
  95. package/dist/components/StatCard.js.map +1 -0
  96. package/dist/components/StatusPage.js +99 -0
  97. package/dist/components/StatusPage.js.map +1 -0
  98. package/dist/components/Swatch.js +55 -0
  99. package/dist/components/Swatch.js.map +1 -0
  100. package/dist/components/Switch.js +53 -0
  101. package/dist/components/Switch.js.map +1 -0
  102. package/dist/components/TLDR.js +53 -0
  103. package/dist/components/TLDR.js.map +1 -0
  104. package/dist/components/Table.js +155 -0
  105. package/dist/components/Table.js.map +1 -0
  106. package/dist/components/Tabs.js +325 -0
  107. package/dist/components/Tabs.js.map +1 -0
  108. package/dist/components/Tag.js +19 -0
  109. package/dist/components/Tag.js.map +1 -0
  110. package/dist/components/TelemetryGauge.js +112 -0
  111. package/dist/components/TelemetryGauge.js.map +1 -0
  112. package/dist/components/ThemeProvider.js +87 -0
  113. package/dist/components/ThemeProvider.js.map +1 -0
  114. package/dist/components/TickerTape.js +196 -0
  115. package/dist/components/TickerTape.js.map +1 -0
  116. package/dist/components/Toast.js +200 -0
  117. package/dist/components/Toast.js.map +1 -0
  118. package/dist/components/Tooltip.js +69 -0
  119. package/dist/components/Tooltip.js.map +1 -0
  120. package/dist/components/TrackCard.js +206 -0
  121. package/dist/components/TrackCard.js.map +1 -0
  122. package/dist/components/blog/BlogPost.js +116 -0
  123. package/dist/components/blog/BlogPost.js.map +1 -0
  124. package/dist/components/blog/LoremIpsumPost.js +62 -0
  125. package/dist/components/blog/LoremIpsumPost.js.map +1 -0
  126. package/dist/components/blog/author.js +25 -0
  127. package/dist/components/blog/author.js.map +1 -0
  128. package/dist/components/booleanControl.js +50 -0
  129. package/dist/components/booleanControl.js.map +1 -0
  130. package/dist/components/dialogPopupRef.js +28 -0
  131. package/dist/components/dialogPopupRef.js.map +1 -0
  132. package/dist/components/dialogSurface.js +75 -0
  133. package/dist/components/dialogSurface.js.map +1 -0
  134. package/dist/components/docs/AnchorHeading.js +80 -0
  135. package/dist/components/docs/AnchorHeading.js.map +1 -0
  136. package/dist/components/docs/Breadcrumbs.js +26 -0
  137. package/dist/components/docs/Breadcrumbs.js.map +1 -0
  138. package/dist/components/docs/CodeBlock.js +63 -0
  139. package/dist/components/docs/CodeBlock.js.map +1 -0
  140. package/dist/components/docs/CodeTabs.js +71 -0
  141. package/dist/components/docs/CodeTabs.js.map +1 -0
  142. package/dist/components/docs/DocPager.js +28 -0
  143. package/dist/components/docs/DocPager.js.map +1 -0
  144. package/dist/components/docs/DocsHeader.js +124 -0
  145. package/dist/components/docs/DocsHeader.js.map +1 -0
  146. package/dist/components/docs/DocsLayout.js +61 -0
  147. package/dist/components/docs/DocsLayout.js.map +1 -0
  148. package/dist/components/docs/DocsLinkProvider.js +25 -0
  149. package/dist/components/docs/DocsLinkProvider.js.map +1 -0
  150. package/dist/components/docs/DocsSidebar.js +147 -0
  151. package/dist/components/docs/DocsSidebar.js.map +1 -0
  152. package/dist/components/docs/Prose.js +56 -0
  153. package/dist/components/docs/Prose.js.map +1 -0
  154. package/dist/components/docs/TableOfContents.js +71 -0
  155. package/dist/components/docs/TableOfContents.js.map +1 -0
  156. package/dist/components/docs/codeTabsStore.js +75 -0
  157. package/dist/components/docs/codeTabsStore.js.map +1 -0
  158. package/dist/components/docs/figures/ActivityGrid.js +116 -0
  159. package/dist/components/docs/figures/ActivityGrid.js.map +1 -0
  160. package/dist/components/docs/figures/BeforeAfter.js +64 -0
  161. package/dist/components/docs/figures/BeforeAfter.js.map +1 -0
  162. package/dist/components/docs/figures/ChangeSummary.js +74 -0
  163. package/dist/components/docs/figures/ChangeSummary.js.map +1 -0
  164. package/dist/components/docs/figures/Decision.js +34 -0
  165. package/dist/components/docs/figures/Decision.js.map +1 -0
  166. package/dist/components/docs/figures/DrawingSheet.js +37 -0
  167. package/dist/components/docs/figures/DrawingSheet.js.map +1 -0
  168. package/dist/components/docs/figures/FigureFrame.js +226 -0
  169. package/dist/components/docs/figures/FigureFrame.js.map +1 -0
  170. package/dist/components/docs/figures/FileChangeTree.js +134 -0
  171. package/dist/components/docs/figures/FileChangeTree.js.map +1 -0
  172. package/dist/components/docs/figures/FlowDiagram.js +82 -0
  173. package/dist/components/docs/figures/FlowDiagram.js.map +1 -0
  174. package/dist/components/docs/figures/GanttChart.js +79 -0
  175. package/dist/components/docs/figures/GanttChart.js.map +1 -0
  176. package/dist/components/docs/figures/IndexedSection.js +45 -0
  177. package/dist/components/docs/figures/IndexedSection.js.map +1 -0
  178. package/dist/components/docs/figures/MetricStrip.js +23 -0
  179. package/dist/components/docs/figures/MetricStrip.js.map +1 -0
  180. package/dist/components/docs/figures/Steps.js +58 -0
  181. package/dist/components/docs/figures/Steps.js.map +1 -0
  182. package/dist/components/docs/figures/SwatchCompare.js +42 -0
  183. package/dist/components/docs/figures/SwatchCompare.js.map +1 -0
  184. package/dist/components/docs/figures/TermGrid.js +22 -0
  185. package/dist/components/docs/figures/TermGrid.js.map +1 -0
  186. package/dist/components/docs/figures/Terminal.js +37 -0
  187. package/dist/components/docs/figures/Terminal.js.map +1 -0
  188. package/dist/components/docs/figures/Timeline.js +61 -0
  189. package/dist/components/docs/figures/Timeline.js.map +1 -0
  190. package/dist/components/docs/figures/TokenTable.js +42 -0
  191. package/dist/components/docs/figures/TokenTable.js.map +1 -0
  192. package/dist/components/docs/figures/TreeDiagram.js +76 -0
  193. package/dist/components/docs/figures/TreeDiagram.js.map +1 -0
  194. package/dist/components/docs/figures/UptimeStrip.js +68 -0
  195. package/dist/components/docs/figures/UptimeStrip.js.map +1 -0
  196. package/dist/components/docs/figures/index.js +24 -0
  197. package/dist/components/docs/figures/index.js.map +1 -0
  198. package/dist/components/docs/index.js +15 -0
  199. package/dist/components/docs/index.js.map +1 -0
  200. package/dist/components/docs/mdxComponents.js +108 -0
  201. package/dist/components/docs/mdxComponents.js.map +1 -0
  202. package/dist/components/experiments/DesignSandbox.js +206 -0
  203. package/dist/components/experiments/DesignSandbox.js.map +1 -0
  204. package/dist/components/experiments/ExperimentsView.js +138 -0
  205. package/dist/components/experiments/ExperimentsView.js.map +1 -0
  206. package/dist/components/fieldFrame.js +200 -0
  207. package/dist/components/fieldFrame.js.map +1 -0
  208. package/dist/components/floatingSurface.js +35 -0
  209. package/dist/components/floatingSurface.js.map +1 -0
  210. package/dist/components/marketing/CTASection.js +47 -0
  211. package/dist/components/marketing/CTASection.js.map +1 -0
  212. package/dist/components/marketing/FeatureGrid.js +49 -0
  213. package/dist/components/marketing/FeatureGrid.js.map +1 -0
  214. package/dist/components/marketing/Hero.js +44 -0
  215. package/dist/components/marketing/Hero.js.map +1 -0
  216. package/dist/components/marketing/PricingGrid.js +65 -0
  217. package/dist/components/marketing/PricingGrid.js.map +1 -0
  218. package/dist/components/marketing/SectionGrid.js +51 -0
  219. package/dist/components/marketing/SectionGrid.js.map +1 -0
  220. package/dist/components/paginationRange.js +28 -0
  221. package/dist/components/paginationRange.js.map +1 -0
  222. package/dist/components/portalTheme.js +14 -0
  223. package/dist/components/portalTheme.js.map +1 -0
  224. package/dist/components/saas/SaasLandingPage.js +201 -0
  225. package/dist/components/saas/SaasLandingPage.js.map +1 -0
  226. package/dist/components/siteNavContext.js +24 -0
  227. package/dist/components/siteNavContext.js.map +1 -0
  228. package/dist/components/slides/Slide.js +84 -0
  229. package/dist/components/slides/Slide.js.map +1 -0
  230. package/dist/components/slides/SlideDeck.js +228 -0
  231. package/dist/components/slides/SlideDeck.js.map +1 -0
  232. package/dist/components/themeInitScript.js +16 -0
  233. package/dist/components/themeInitScript.js.map +1 -0
  234. package/dist/components/themeScope.js +9 -0
  235. package/dist/components/themeScope.js.map +1 -0
  236. package/dist/components/toastLifetime.js +21 -0
  237. package/dist/components/toastLifetime.js.map +1 -0
  238. package/dist/fonts/DSSymbols-OFL.txt +98 -0
  239. package/dist/fonts/DSSymbols-Regular.woff2 +0 -0
  240. package/dist/fonts/SymbolsNerdFontMono-Regular.woff2 +0 -0
  241. package/dist/hooks/useActiveHeading.js +59 -0
  242. package/dist/hooks/useActiveHeading.js.map +1 -0
  243. package/dist/hooks/useCopyToClipboard.js +58 -0
  244. package/dist/hooks/useCopyToClipboard.js.map +1 -0
  245. package/dist/index.d.ts +6394 -0
  246. package/dist/index.js +117 -0
  247. package/dist/index.js.map +1 -0
  248. package/dist/lib/accentClasses.js +87 -0
  249. package/dist/lib/accentClasses.js.map +1 -0
  250. package/dist/lib/recipe.js +33 -0
  251. package/dist/lib/recipe.js.map +1 -0
  252. package/dist/lib/slug.js +39 -0
  253. package/dist/lib/slug.js.map +1 -0
  254. package/dist/lib/theme.js +76 -0
  255. package/dist/lib/theme.js.map +1 -0
  256. package/dist/lib/tokenRules.js +51 -0
  257. package/dist/lib/tokenRules.js.map +1 -0
  258. package/dist/prose.css +766 -0
  259. package/dist/styles.css +203 -0
  260. package/dist/theme/ansi.js +77 -0
  261. package/dist/theme/ansi.js.map +1 -0
  262. package/dist/theme/contrast.js +342 -0
  263. package/dist/theme/contrast.js.map +1 -0
  264. package/dist/theme/levels.js +234 -0
  265. package/dist/theme/levels.js.map +1 -0
  266. package/dist/theme/media.js +115 -0
  267. package/dist/theme/media.js.map +1 -0
  268. package/dist/theme/recommended.js +105 -0
  269. package/dist/theme/recommended.js.map +1 -0
  270. package/dist/theme.css +538 -0
  271. package/dist/tokens.js +1 -0
  272. package/dist/tokens.js.map +1 -0
  273. package/package.json +209 -6
  274. package/skills/design-system-usage/SKILL.md +75 -0
  275. package/terminal/rtk-midnight.alacritty.toml +33 -0
  276. package/terminal/rtk-midnight.ghostty.conf +24 -0
  277. package/terminal/rtk-midnight.itermcolors +167 -0
  278. package/terminal/rtk-midnight.windows-terminal.json +23 -0
  279. package/terminal/rtk-sketch.alacritty.toml +33 -0
  280. package/terminal/rtk-sketch.ghostty.conf +24 -0
  281. package/terminal/rtk-sketch.itermcolors +167 -0
  282. package/terminal/rtk-sketch.windows-terminal.json +23 -0
  283. package/tokens/palette.midnight.tokens.json +477 -0
  284. package/tokens/palette.sketch.tokens.json +477 -0
@@ -0,0 +1,76 @@
1
+ // src/components/docs/figures/TreeDiagram.tsx
2
+ import * as React from "react";
3
+ import {
4
+ childItems,
5
+ defineAsciiItem,
6
+ AsciiFrameBody,
7
+ hasHost,
8
+ itemText,
9
+ listItems,
10
+ nestedList,
11
+ textOf
12
+ } from "./FigureFrame.js";
13
+ import { cn } from "../../../lib/recipe.js";
14
+ import { jsx, jsxs } from "react/jsx-runtime";
15
+ var Node = defineAsciiItem("Node");
16
+ function directTextOf(children) {
17
+ return React.Children.toArray(children).filter((child) => !(React.isValidElement(child) && (child.type === "ul" || child.type === "ol"))).map((child) => React.isValidElement(child) ? directTextOf(child.props.children) : String(child)).join("").replace(/\s+/g, " ").trim();
18
+ }
19
+ function nodesFromList(items) {
20
+ return items.map((item) => {
21
+ const kids = nodesFromList(nestedList(item));
22
+ const text = directTextOf(item.props.children) || itemText(item);
23
+ const [label, meta] = text.split(/\s+[—–]\s+/);
24
+ return {
25
+ label: label || text,
26
+ meta,
27
+ accent: hasHost(item.props.children, ["strong", "b"]),
28
+ children: kids.length > 0 ? kids : void 0
29
+ };
30
+ });
31
+ }
32
+ function nodesOf(children) {
33
+ const listed = nodesFromList(listItems(children));
34
+ if (listed.length > 0) return listed;
35
+ return childItems(children, Node).map((node) => {
36
+ const kids = nodesOf(node.children);
37
+ return { label: node.label ?? (kids.length === 0 ? textOf(node.children) : ""), meta: node.meta, accent: node.accent, children: kids.length > 0 ? kids : void 0 };
38
+ });
39
+ }
40
+ function flatten(nodes, prefix = "", trail = "root", isRoot = true) {
41
+ const singleRoot = isRoot && nodes.length === 1;
42
+ return nodes.flatMap((node, index) => {
43
+ const last = index === nodes.length - 1;
44
+ const branch = singleRoot ? "" : prefix + (last ? "\u2514\u2500 " : "\u251C\u2500 ");
45
+ const key = `${trail}/${node.label}-${index}`;
46
+ const childPrefix = singleRoot ? "" : prefix + (last ? " " : "\u2502 ");
47
+ const row = { key, branch, label: node.label, meta: node.meta, accent: node.accent };
48
+ return [row, ...node.children ? flatten(node.children, childPrefix, key, false) : []];
49
+ });
50
+ }
51
+ var TreeDiagram = React.forwardRef(function TreeDiagram2({ label = "Tree diagram", nodes, children, className, ...rest }, ref) {
52
+ const rows = flatten(nodes ?? nodesOf(children));
53
+ const hasAccent = rows.some((row) => row.accent);
54
+ return /* @__PURE__ */ jsxs(AsciiFrameBody, { "data-slot": "tree-diagram", ref, ...rest, className: cn("overflow-x-auto", className), children: [
55
+ /* @__PURE__ */ jsx("ul", { className: "flex min-w-max flex-col gap-1", "aria-label": label, children: rows.map((row) => {
56
+ const emphasized = hasAccent && row.accent;
57
+ return /* @__PURE__ */ jsxs("li", { className: "grid grid-cols-[minmax(0,1fr)_auto] items-baseline gap-x-6", children: [
58
+ /* @__PURE__ */ jsxs("span", { className: "whitespace-nowrap", children: [
59
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: "select-none text-content-muted", children: row.branch }),
60
+ /* @__PURE__ */ jsx("span", { className: cn(emphasized ? "text-accent-primary" : "text-content-primary"), children: row.label })
61
+ ] }),
62
+ row.meta ? /* @__PURE__ */ jsx("span", { className: cn("tabular-nums", emphasized ? "text-accent-secondary" : "text-content-secondary"), children: row.meta }) : /* @__PURE__ */ jsx("span", {})
63
+ ] }, row.key);
64
+ }) }),
65
+ /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
66
+ "Tree with ",
67
+ rows.length,
68
+ " nodes."
69
+ ] })
70
+ ] });
71
+ });
72
+ export {
73
+ Node,
74
+ TreeDiagram
75
+ };
76
+ //# sourceMappingURL=TreeDiagram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/docs/figures/TreeDiagram.tsx"],"sourcesContent":["/**\n * Adapted from mdxcn by Keshav Bagaade, MIT licensed.\n * Source: https://github.com/keshav-exe/mdxcn/blob/2928126ba146ebbae9c2351deca27d27bb40e744/registry/default/graph-tree/graph-tree.tsx\n * The local port removes motion and graph variables while retaining nested\n * Markdown and `<Node>` children as the data interface.\n */\n\nimport type { ReactNode } from 'react';\nimport * as React from 'react';\nimport {\n childItems,\n defineAsciiItem,\n AsciiFrameBody,\n hasHost,\n itemText,\n listItems,\n nestedList,\n textOf,\n} from './FigureFrame';\nimport { cn } from '../../../lib/recipe';\n\nexport interface TreeNode {\n label: string;\n meta?: string;\n accent?: boolean;\n children?: TreeNode[];\n}\n\nexport interface NodeProps {\n /** Label falls back to child text when there are no nested nodes. */\n label?: string;\n meta?: string;\n accent?: boolean;\n children?: ReactNode;\n}\n\nexport interface TreeDiagramProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Accessible name; the enclosing FigureFrame owns the caption. */\n label?: string;\n /** Data form. If omitted, the component reads nested Markdown or `<Node>` children. */\n nodes?: TreeNode[];\n /** Nested Markdown list or `<Node>` content used to derive nodes. */\n children?: ReactNode;\n /** Additional classes for this tree. */\n className?: string;\n}\n\n/** MDX-only tree item, for example `<Node meta=\"ui\">graph-frame.tsx</Node>`. */\nexport const Node = defineAsciiItem<NodeProps>('Node');\n\nfunction directTextOf(children: ReactNode): string {\n return React.Children.toArray(children)\n .filter((child) => !(React.isValidElement(child) && (child.type === 'ul' || child.type === 'ol')))\n .map((child) => React.isValidElement(child) ? directTextOf((child.props as { children?: ReactNode }).children) : String(child))\n .join('')\n .replace(/\\s+/g, ' ')\n .trim();\n}\n\nfunction nodesFromList(items: ReturnType<typeof listItems>): TreeNode[] {\n return items.map((item) => {\n const kids = nodesFromList(nestedList(item));\n const text = directTextOf((item.props as { children?: ReactNode }).children) || itemText(item);\n const [label, meta] = text.split(/\\s+[—–]\\s+/);\n return {\n label: label || text,\n meta,\n accent: hasHost((item.props as { children?: ReactNode }).children, ['strong', 'b']),\n children: kids.length > 0 ? kids : undefined,\n };\n });\n}\n\nfunction nodesOf(children: ReactNode): TreeNode[] {\n const listed = nodesFromList(listItems(children));\n if (listed.length > 0) return listed;\n return childItems(children, Node).map((node) => {\n const kids = nodesOf(node.children);\n return { label: node.label ?? (kids.length === 0 ? textOf(node.children) : ''), meta: node.meta, accent: node.accent, children: kids.length > 0 ? kids : undefined };\n });\n}\n\ninterface FlatRow extends Omit<TreeNode, 'children'> {\n key: string;\n branch: string;\n}\n\nfunction flatten(nodes: TreeNode[], prefix = '', trail = 'root', isRoot = true): FlatRow[] {\n const singleRoot = isRoot && nodes.length === 1;\n return nodes.flatMap((node, index) => {\n const last = index === nodes.length - 1;\n const branch = singleRoot ? '' : prefix + (last ? '└─ ' : '├─ ');\n const key = `${trail}/${node.label}-${index}`;\n const childPrefix = singleRoot ? '' : prefix + (last ? ' ' : '│ ');\n const row: FlatRow = { key, branch, label: node.label, meta: node.meta, accent: node.accent };\n return [row, ...(node.children ? flatten(node.children, childPrefix, key, false) : [])];\n });\n}\n\n/** Renders a nested file-like tree and keeps the node count available to screen readers. */\nexport const TreeDiagram = React.forwardRef<HTMLDivElement, TreeDiagramProps>(function TreeDiagram({ label = 'Tree diagram', nodes, children, className, ...rest }, ref) {\n const rows = flatten(nodes ?? nodesOf(children));\n const hasAccent = rows.some((row) => row.accent);\n\n return (\n <AsciiFrameBody data-slot=\"tree-diagram\" ref={ref} {...rest} className={cn('overflow-x-auto', className)}>\n <ul className=\"flex min-w-max flex-col gap-1\" aria-label={label}>\n {rows.map((row) => {\n const emphasized = hasAccent && row.accent;\n return <li className=\"grid grid-cols-[minmax(0,1fr)_auto] items-baseline gap-x-6\" key={row.key}>\n <span className=\"whitespace-nowrap\"><span aria-hidden=\"true\" className=\"select-none text-content-muted\">{row.branch}</span><span className={cn(emphasized ? 'text-accent-primary' : 'text-content-primary')}>{row.label}</span></span>\n {row.meta ? <span className={cn('tabular-nums', emphasized ? 'text-accent-secondary' : 'text-content-secondary')}>{row.meta}</span> : <span />}\n </li>;\n })}\n </ul>\n <span className=\"sr-only\">Tree with {rows.length} nodes.</span>\n </AsciiFrameBody>\n );\n});\n"],"mappings":"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","names":["TreeDiagram"]}
@@ -0,0 +1,68 @@
1
+ // src/components/docs/figures/UptimeStrip.tsx
2
+ import * as React from "react";
3
+ import { AsciiFrameBody, AsciiFrameTick, AsciiFrameTrack, resolveGlyphs, words } from "./FigureFrame.js";
4
+ import { cn } from "../../../lib/recipe.js";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ function statusClass(palette, status) {
7
+ if (status === "ok") return "text-accent-primary";
8
+ if (status === "degraded") return palette === "multi" ? "text-accent-secondary" : "text-content-secondary";
9
+ return "text-content-muted";
10
+ }
11
+ var UptimeStrip = React.forwardRef(function UptimeStrip2({ label = "Uptime", days: daysProp, from, to, columns = 30, glyphs, palette, className, ...rest }, ref) {
12
+ const days = words(daysProp);
13
+ const known = days.filter((day) => day !== "empty");
14
+ const ok = known.filter((day) => day === "ok").length;
15
+ const percent = known.length === 0 ? 0 : Math.round(ok / known.length * 100);
16
+ const cols = Math.max(1, columns);
17
+ const set = resolveGlyphs(glyphs);
18
+ const last = set.length - 1;
19
+ const mark = {
20
+ ok: set[last] ?? "\u2588",
21
+ degraded: set[Math.min(2, last)] ?? "\u2592",
22
+ down: set[0] ?? "\xB7",
23
+ empty: "-"
24
+ };
25
+ const rows = [];
26
+ for (let index = 0; index < days.length; index += cols) rows.push(days.slice(index, index + cols));
27
+ return /* @__PURE__ */ jsxs(AsciiFrameBody, { "data-slot": "uptime-strip", ref, ...rest, className: cn("flex flex-col items-start gap-4", className), children: [
28
+ /* @__PURE__ */ jsxs("div", { className: "flex w-fit max-w-full flex-col gap-4 overflow-x-auto", role: "region", tabIndex: 0, "aria-label": `${label} status chart`, children: [
29
+ /* @__PURE__ */ jsx("div", { "aria-hidden": "true", className: "flex select-none flex-col gap-1", children: rows.map((row, rowIndex) => /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(AsciiFrameTrack, { className: "w-auto justify-start gap-0.5", children: row.map((day, index) => /* @__PURE__ */ jsx(AsciiFrameTick, { className: cn("flex-none", statusClass(palette, day)), children: mark[day] }, `${rowIndex}-${index}`)) }) }, rowIndex)) }),
30
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-baseline justify-between gap-3", children: [
31
+ /* @__PURE__ */ jsxs("p", { className: "tabular-nums text-accent-primary", children: [
32
+ percent,
33
+ "%"
34
+ ] }),
35
+ from || to ? /* @__PURE__ */ jsxs("p", { className: "flex gap-3 text-content-muted", children: [
36
+ from ? /* @__PURE__ */ jsx("span", { children: from }) : null,
37
+ to ? /* @__PURE__ */ jsx("span", { children: to }) : null
38
+ ] }) : null
39
+ ] })
40
+ ] }),
41
+ /* @__PURE__ */ jsxs("p", { className: "flex flex-wrap gap-x-4 gap-y-1 text-content-muted", children: [
42
+ /* @__PURE__ */ jsxs("span", { children: [
43
+ /* @__PURE__ */ jsx("span", { className: "text-accent-primary", children: mark.ok }),
44
+ " up"
45
+ ] }),
46
+ /* @__PURE__ */ jsxs("span", { children: [
47
+ /* @__PURE__ */ jsx("span", { className: statusClass(palette, "degraded"), children: mark.degraded }),
48
+ " slow"
49
+ ] }),
50
+ /* @__PURE__ */ jsxs("span", { children: [
51
+ /* @__PURE__ */ jsx("span", { className: "text-content-muted", children: mark.down }),
52
+ " down"
53
+ ] })
54
+ ] }),
55
+ /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
56
+ percent,
57
+ " percent uptime over ",
58
+ known.length,
59
+ " days",
60
+ from && to ? `, ${from} to ${to}` : "",
61
+ "."
62
+ ] })
63
+ ] });
64
+ });
65
+ export {
66
+ UptimeStrip
67
+ };
68
+ //# sourceMappingURL=UptimeStrip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/docs/figures/UptimeStrip.tsx"],"sourcesContent":["/**\n * Adapted from mdxcn by Keshav Bagaade, MIT licensed.\n * Source: https://github.com/keshav-exe/mdxcn/blob/2928126ba146ebbae9c2351deca27d27bb40e744/registry/default/graph-uptime/graph-uptime.tsx\n * The local port removes motion and graph variables in favour of deterministic\n * rendering and the design system's semantic token classes.\n */\n\nimport * as React from 'react';\nimport { AsciiFrameBody, AsciiFrameTick, AsciiFrameTrack, resolveGlyphs, words, type Glyphs, type FigurePalette } from './FigureFrame';\nimport { cn } from '../../../lib/recipe';\n\nexport type UptimeStatus = 'ok' | 'degraded' | 'down' | 'empty';\n\nexport interface UptimeStripProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Accessible name; the enclosing FigureFrame owns the caption. */\n label?: string;\n /** `['ok', 'down']` or `'ok ok down'`; accepted values are ok, degraded, down, and empty. */\n days: UptimeStatus[] | string;\n /** Optional label for the first status mark. */\n from?: string;\n /** Optional label for the last status mark. */\n to?: string;\n /** Number of status marks per row. */\n columns?: number;\n /** Glyph set name or custom glyph sequence. */\n glyphs?: Glyphs;\n /** Accent palette used for health states. */\n palette?: FigurePalette;\n /** Additional classes for this strip. */\n className?: string;\n}\n\nfunction statusClass(palette: FigurePalette | undefined, status: UptimeStatus): string {\n if (status === 'ok') return 'text-accent-primary';\n if (status === 'degraded') return palette === 'multi' ? 'text-accent-secondary' : 'text-content-secondary';\n return 'text-content-muted';\n}\n\n/** Renders compact service health marks with a text summary for assistive technology. */\nexport const UptimeStrip = React.forwardRef<HTMLDivElement, UptimeStripProps>(function UptimeStrip({ label = 'Uptime', days: daysProp, from, to, columns = 30, glyphs, palette, className, ...rest }, ref) {\n const days = words<UptimeStatus>(daysProp);\n const known = days.filter((day) => day !== 'empty');\n const ok = known.filter((day) => day === 'ok').length;\n const percent = known.length === 0 ? 0 : Math.round((ok / known.length) * 100);\n const cols = Math.max(1, columns);\n const set = resolveGlyphs(glyphs);\n const last = set.length - 1;\n const mark: Record<UptimeStatus, string> = {\n ok: set[last] ?? '█',\n degraded: set[Math.min(2, last)] ?? '▒',\n down: set[0] ?? '·',\n empty: '-',\n };\n const rows: UptimeStatus[][] = [];\n for (let index = 0; index < days.length; index += cols) rows.push(days.slice(index, index + cols));\n\n return (\n <AsciiFrameBody data-slot=\"uptime-strip\" ref={ref} {...rest} className={cn('flex flex-col items-start gap-4', className)}>\n <div className=\"flex w-fit max-w-full flex-col gap-4 overflow-x-auto\" role=\"region\" tabIndex={0} aria-label={`${label} status chart`}>\n <div aria-hidden=\"true\" className=\"flex select-none flex-col gap-1\">\n {rows.map((row, rowIndex) => (\n <div key={rowIndex}>\n <AsciiFrameTrack className=\"w-auto justify-start gap-0.5\">\n {row.map((day, index) => <AsciiFrameTick className={cn('flex-none', statusClass(palette, day))} key={`${rowIndex}-${index}`}>{mark[day]}</AsciiFrameTick>)}\n </AsciiFrameTrack>\n </div>\n ))}\n </div>\n <div className=\"flex flex-wrap items-baseline justify-between gap-3\">\n <p className=\"tabular-nums text-accent-primary\">{percent}%</p>\n {from || to ? <p className=\"flex gap-3 text-content-muted\">{from ? <span>{from}</span> : null}{to ? <span>{to}</span> : null}</p> : null}\n </div>\n </div>\n <p className=\"flex flex-wrap gap-x-4 gap-y-1 text-content-muted\">\n <span><span className=\"text-accent-primary\">{mark.ok}</span> up</span>\n <span><span className={statusClass(palette, 'degraded')}>{mark.degraded}</span> slow</span>\n <span><span className=\"text-content-muted\">{mark.down}</span> down</span>\n </p>\n <span className=\"sr-only\">{percent} percent uptime over {known.length} days{from && to ? `, ${from} to ${to}` : ''}.</span>\n </AsciiFrameBody>\n );\n});\n"],"mappings":";AAOA,YAAY,WAAW;AACvB,SAAS,gBAAgB,gBAAgB,iBAAiB,eAAe,aAA8C;AACvH,SAAS,UAAU;AAsDwB,cAM/B,YAN+B;AA/B3C,SAAS,YAAY,SAAoC,QAA8B;AACrF,MAAI,WAAW,KAAM,QAAO;AAC5B,MAAI,WAAW,WAAY,QAAO,YAAY,UAAU,0BAA0B;AAClF,SAAO;AACT;AAGO,IAAM,cAAoB,iBAA6C,SAASA,aAAY,EAAE,QAAQ,UAAU,MAAM,UAAU,MAAM,IAAI,UAAU,IAAI,QAAQ,SAAS,WAAW,GAAG,KAAK,GAAG,KAAK;AACzM,QAAM,OAAO,MAAoB,QAAQ;AACzC,QAAM,QAAQ,KAAK,OAAO,CAAC,QAAQ,QAAQ,OAAO;AAClD,QAAM,KAAK,MAAM,OAAO,CAAC,QAAQ,QAAQ,IAAI,EAAE;AAC/C,QAAM,UAAU,MAAM,WAAW,IAAI,IAAI,KAAK,MAAO,KAAK,MAAM,SAAU,GAAG;AAC7E,QAAM,OAAO,KAAK,IAAI,GAAG,OAAO;AAChC,QAAM,MAAM,cAAc,MAAM;AAChC,QAAM,OAAO,IAAI,SAAS;AAC1B,QAAM,OAAqC;AAAA,IACzC,IAAI,IAAI,IAAI,KAAK;AAAA,IACjB,UAAU,IAAI,KAAK,IAAI,GAAG,IAAI,CAAC,KAAK;AAAA,IACpC,MAAM,IAAI,CAAC,KAAK;AAAA,IAChB,OAAO;AAAA,EACT;AACA,QAAM,OAAyB,CAAC;AAChC,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS,KAAM,MAAK,KAAK,KAAK,MAAM,OAAO,QAAQ,IAAI,CAAC;AAEjG,SACI,qBAAC,kBAAe,aAAU,gBAAe,KAAW,GAAG,MAAM,WAAW,GAAG,mCAAmC,SAAS,GACrH;AAAA,yBAAC,SAAI,WAAU,wDAAuD,MAAK,UAAS,UAAU,GAAG,cAAY,GAAG,KAAK,iBACnH;AAAA,0BAAC,SAAI,eAAY,QAAO,WAAU,mCAC/B,eAAK,IAAI,CAAC,KAAK,aACd,oBAAC,SACC,8BAAC,mBAAgB,WAAU,gCACxB,cAAI,IAAI,CAAC,KAAK,UAAU,oBAAC,kBAAe,WAAW,GAAG,aAAa,YAAY,SAAS,GAAG,CAAC,GAAiC,eAAK,GAAG,KAAjC,GAAG,QAAQ,IAAI,KAAK,EAAe,CAAiB,GAC3J,KAHQ,QAIV,CACD,GACH;AAAA,MACA,qBAAC,SAAI,WAAU,uDACb;AAAA,6BAAC,OAAE,WAAU,oCAAoC;AAAA;AAAA,UAAQ;AAAA,WAAC;AAAA,QACzD,QAAQ,KAAK,qBAAC,OAAE,WAAU,iCAAiC;AAAA,iBAAO,oBAAC,UAAM,gBAAK,IAAU;AAAA,UAAM,KAAK,oBAAC,UAAM,cAAG,IAAU;AAAA,WAAK,IAAO;AAAA,SACtI;AAAA,OACF;AAAA,IACA,qBAAC,OAAE,WAAU,qDACX;AAAA,2BAAC,UAAK;AAAA,4BAAC,UAAK,WAAU,uBAAuB,eAAK,IAAG;AAAA,QAAO;AAAA,SAAG;AAAA,MAC/D,qBAAC,UAAK;AAAA,4BAAC,UAAK,WAAW,YAAY,SAAS,UAAU,GAAI,eAAK,UAAS;AAAA,QAAO;AAAA,SAAK;AAAA,MACpF,qBAAC,UAAK;AAAA,4BAAC,UAAK,WAAU,sBAAsB,eAAK,MAAK;AAAA,QAAO;AAAA,SAAK;AAAA,OACpE;AAAA,IACA,qBAAC,UAAK,WAAU,WAAW;AAAA;AAAA,MAAQ;AAAA,MAAsB,MAAM;AAAA,MAAO;AAAA,MAAM,QAAQ,KAAK,KAAK,IAAI,OAAO,EAAE,KAAK;AAAA,MAAG;AAAA,OAAC;AAAA,KACtH;AAEN,CAAC;","names":["UptimeStrip"]}
@@ -0,0 +1,24 @@
1
+ // src/components/docs/figures/index.ts
2
+ import { FigureFrame } from "./FigureFrame.js";
3
+ export { FlowDiagram, Path } from "./FlowDiagram.js";
4
+ export { Event, Timeline } from "./Timeline.js";
5
+ export { ChangeSummary, Line } from "./ChangeSummary.js";
6
+ export { BeforeAfter, Slope } from "./BeforeAfter.js";
7
+ export { UptimeStrip } from "./UptimeStrip.js";
8
+ export { Node, TreeDiagram } from "./TreeDiagram.js";
9
+ export { FileChangeTree } from "./FileChangeTree.js";
10
+ export { DrawingSheet } from "./DrawingSheet.js";
11
+ export { IndexedSection } from "./IndexedSection.js";
12
+ export { ActivityGrid } from "./ActivityGrid.js";
13
+ export { GanttChart } from "./GanttChart.js";
14
+ export { Terminal } from "./Terminal.js";
15
+ export { Step, Steps } from "./Steps.js";
16
+ export { SwatchCompare } from "./SwatchCompare.js";
17
+ export { MetricStrip } from "./MetricStrip.js";
18
+ export { TokenTable } from "./TokenTable.js";
19
+ export { Decision, Option } from "./Decision.js";
20
+ export { Term, TermGrid } from "./TermGrid.js";
21
+ export {
22
+ FigureFrame
23
+ };
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/docs/figures/index.ts"],"sourcesContent":["export { FigureFrame } from './FigureFrame';\nexport type { FigureFrameProps } from './FigureFrame';\nexport * from './FlowDiagram';\nexport * from './Timeline';\nexport * from './ChangeSummary';\nexport * from './BeforeAfter';\nexport * from './UptimeStrip';\nexport * from './TreeDiagram';\nexport * from './FileChangeTree';\nexport * from './DrawingSheet';\nexport * from './IndexedSection';\nexport * from './ActivityGrid';\nexport * from './GanttChart';\nexport * from './Terminal';\nexport * from './Steps';\nexport * from './SwatchCompare';\nexport * from './MetricStrip';\nexport * from './TokenTable';\nexport * from './Decision';\nexport * from './TermGrid';\n"],"mappings":";AAAA,SAAS,mBAAmB;AAE5B,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,15 @@
1
+ // src/components/docs/index.ts
2
+ export { AnchorHeading, createAnchorHeading } from "./AnchorHeading.js";
3
+ export { Breadcrumbs } from "./Breadcrumbs.js";
4
+ export { CodeBlock, CodeBlockAttachment } from "./CodeBlock.js";
5
+ export { CodeTab, CodeTabs } from "./CodeTabs.js";
6
+ export { DocPager } from "./DocPager.js";
7
+ export { DocsHeader } from "./DocsHeader.js";
8
+ export { DocsLayout } from "./DocsLayout.js";
9
+ export { DocsLink, DocsLinkProvider, useDocsLinkComponent } from "./DocsLinkProvider.js";
10
+ export { DocsSidebar } from "./DocsSidebar.js";
11
+ export { Prose } from "./Prose.js";
12
+ export { TableOfContents, collectHeadings } from "./TableOfContents.js";
13
+ export { mdxComponents } from "./mdxComponents.js";
14
+ export { ActivityGrid, BeforeAfter, ChangeSummary, Decision, DrawingSheet, Event, FigureFrame, FileChangeTree, FlowDiagram, GanttChart, IndexedSection, Line, MetricStrip, Node, Option, Path, Slope, Step, Steps, SwatchCompare, Term, TermGrid, Terminal, Timeline, TokenTable, TreeDiagram, UptimeStrip } from "./figures/index.js";
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/docs/index.ts"],"sourcesContent":["// Documentation portal surface: layout chrome, navigation, and the MDX bridge.\n\nexport * from './AnchorHeading';\nexport * from './Breadcrumbs';\nexport * from './CodeBlock';\nexport * from './CodeTabs';\nexport * from './DocPager';\nexport * from './DocsHeader';\nexport * from './DocsLayout';\nexport * from './DocsLinkProvider';\nexport * from './DocsSidebar';\nexport * from './Prose';\nexport * from './TableOfContents';\nexport * from './mdxComponents';\nexport * from './figures';\n"],"mappings":";AAEA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,108 @@
1
+ "use client";
2
+
3
+ // src/components/docs/mdxComponents.tsx
4
+ import { isValidElement } from "react";
5
+ import { AnchorHeading, createAnchorHeading } from "./AnchorHeading.js";
6
+ import { CodeBlock } from "./CodeBlock.js";
7
+ import { CodeTab, CodeTabs } from "./CodeTabs.js";
8
+ import { DocsLink } from "./DocsLinkProvider.js";
9
+ import { NoteBlock } from "../NoteBlock.js";
10
+ import { TLDR } from "../TLDR.js";
11
+ import { Badge } from "../Badge.js";
12
+ import { Card } from "../Card.js";
13
+ import { Tag } from "../Tag.js";
14
+ import { AsciiDivider } from "../AsciiDivider.js";
15
+ import {
16
+ FigureFrame,
17
+ ActivityGrid,
18
+ BeforeAfter,
19
+ ChangeSummary,
20
+ FlowDiagram,
21
+ GanttChart,
22
+ Timeline,
23
+ TreeDiagram,
24
+ FileChangeTree,
25
+ DrawingSheet,
26
+ IndexedSection,
27
+ UptimeStrip,
28
+ Event,
29
+ Line,
30
+ Node,
31
+ Path,
32
+ Slope,
33
+ Step,
34
+ Steps,
35
+ Terminal,
36
+ SwatchCompare,
37
+ MetricStrip,
38
+ TokenTable,
39
+ Decision,
40
+ Option,
41
+ TermGrid,
42
+ Term
43
+ } from "./figures/index.js";
44
+ import { jsx } from "react/jsx-runtime";
45
+ function languageOf(children) {
46
+ if (!isValidElement(children)) return void 0;
47
+ const match = /language-([\w-]+)/.exec(children.props.className ?? "");
48
+ return match?.[1];
49
+ }
50
+ function MdxPre({ children, ...rest }) {
51
+ return /* @__PURE__ */ jsx(CodeBlock, { language: languageOf(children), ...rest, children });
52
+ }
53
+ function MdxAnchor({ href, children, ...rest }) {
54
+ if (!href) return /* @__PURE__ */ jsx("a", { ...rest, children });
55
+ return /* @__PURE__ */ jsx(DocsLink, { href, ...rest, children });
56
+ }
57
+ var mdxComponents = {
58
+ h1: createAnchorHeading(1),
59
+ h2: createAnchorHeading(2),
60
+ h3: createAnchorHeading(3),
61
+ h4: createAnchorHeading(4),
62
+ h5: createAnchorHeading(5),
63
+ h6: createAnchorHeading(6),
64
+ pre: MdxPre,
65
+ a: MdxAnchor,
66
+ // Available to authors as JSX inside MDX.
67
+ AnchorHeading,
68
+ NoteBlock,
69
+ TLDR,
70
+ Badge,
71
+ Card,
72
+ Tag,
73
+ AsciiDivider,
74
+ CodeBlock,
75
+ CodeTabs,
76
+ CodeTab,
77
+ FigureFrame,
78
+ ActivityGrid,
79
+ BeforeAfter,
80
+ ChangeSummary,
81
+ FlowDiagram,
82
+ GanttChart,
83
+ Timeline,
84
+ TreeDiagram,
85
+ FileChangeTree,
86
+ DrawingSheet,
87
+ IndexedSection,
88
+ UptimeStrip,
89
+ Terminal,
90
+ Steps,
91
+ Path,
92
+ Event,
93
+ Line,
94
+ Slope,
95
+ Node,
96
+ Step,
97
+ SwatchCompare,
98
+ MetricStrip,
99
+ TokenTable,
100
+ Decision,
101
+ Option,
102
+ TermGrid,
103
+ Term
104
+ };
105
+ export {
106
+ mdxComponents
107
+ };
108
+ //# sourceMappingURL=mdxComponents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/docs/mdxComponents.tsx"],"sourcesContent":["'use client';\n\nimport { isValidElement } from 'react';\nimport type { AnchorHTMLAttributes, HTMLAttributes, ReactNode } from 'react';\nimport { AnchorHeading, createAnchorHeading } from './AnchorHeading';\nimport { CodeBlock } from './CodeBlock';\nimport { CodeTab, CodeTabs } from './CodeTabs';\nimport { DocsLink } from './DocsLinkProvider';\nimport { NoteBlock } from '../NoteBlock';\nimport { TLDR } from '../TLDR';\nimport { Badge } from '../Badge';\nimport { Card } from '../Card';\nimport { Tag } from '../Tag';\nimport { AsciiDivider } from '../AsciiDivider';\nimport {\n FigureFrame,\n ActivityGrid,\n BeforeAfter,\n ChangeSummary,\n FlowDiagram,\n GanttChart,\n Timeline,\n TreeDiagram,\n FileChangeTree,\n DrawingSheet,\n IndexedSection,\n UptimeStrip,\n Event,\n Line,\n Node,\n Path,\n Slope,\n Step,\n Steps,\n Terminal,\n SwatchCompare,\n MetricStrip,\n TokenTable,\n Decision,\n Option,\n TermGrid,\n Term,\n} from './figures';\n\n/**\n * Pull `language-ts` off the `<code>` child that MDX nests inside every `<pre>`,\n * so the code block can label itself without the caller threading metadata\n * through the compiler.\n */\nfunction languageOf(children: ReactNode): string | undefined {\n if (!isValidElement<{ className?: string }>(children)) return undefined;\n const match = /language-([\\w-]+)/.exec(children.props.className ?? '');\n return match?.[1];\n}\n\nfunction MdxPre({ children, ...rest }: HTMLAttributes<HTMLPreElement>) {\n return (\n <CodeBlock language={languageOf(children)} {...rest}>\n {children}\n </CodeBlock>\n );\n}\n\nfunction MdxAnchor({ href, children, ...rest }: AnchorHTMLAttributes<HTMLAnchorElement>) {\n // MDX types `href` as optional; an anchor without one is a bare fragment\n // target and must not go through the router.\n if (!href) return <a {...rest}>{children}</a>;\n\n return (\n <DocsLink href={href} {...rest}>\n {children}\n </DocsLink>\n );\n}\n\n/**\n * The shared HTML-tag → component map for compiled MDX.\n *\n * Exported as one object so every consumer — the docs portal, the blog, a\n * Storybook preview — renders Markdown identically. Divergence here is the\n * usual way two sites drift apart while nominally sharing a design system.\n *\n * Headings resolve to {@link AnchorHeading}, giving every section a `#slug`\n * target and a copy-link affordance. Pass the map straight to an\n * `<MDXProvider components={...}>` or to `getMDXComponent(code)(...)`.\n *\n * Elements not listed (`ul`, `ol`, `table`, `blockquote`, `hr`, inline `code`)\n * are deliberately left as native tags and styled by `prose.css` — wrapping\n * them in components would cost a lot of bundle for no visual gain.\n */\nexport const mdxComponents = {\n h1: createAnchorHeading(1),\n h2: createAnchorHeading(2),\n h3: createAnchorHeading(3),\n h4: createAnchorHeading(4),\n h5: createAnchorHeading(5),\n h6: createAnchorHeading(6),\n pre: MdxPre,\n a: MdxAnchor,\n\n // Available to authors as JSX inside MDX.\n AnchorHeading,\n NoteBlock,\n TLDR,\n Badge,\n Card,\n Tag,\n AsciiDivider,\n CodeBlock,\n CodeTabs,\n CodeTab,\n FigureFrame,\n ActivityGrid,\n BeforeAfter,\n ChangeSummary,\n FlowDiagram,\n GanttChart,\n Timeline,\n TreeDiagram,\n FileChangeTree,\n DrawingSheet,\n IndexedSection,\n UptimeStrip,\n Terminal,\n Steps,\n Path,\n Event,\n Line,\n Slope,\n Node,\n Step,\n SwatchCompare,\n MetricStrip,\n TokenTable,\n Decision,\n Option,\n TermGrid,\n Term,\n};\n\nexport type MdxComponents = typeof mdxComponents;\n"],"mappings":";;;AAEA,SAAS,sBAAsB;AAE/B,SAAS,eAAe,2BAA2B;AACnD,SAAS,iBAAiB;AAC1B,SAAS,SAAS,gBAAgB;AAClC,SAAS,gBAAgB;AACzB,SAAS,iBAAiB;AAC1B,SAAS,YAAY;AACrB,SAAS,aAAa;AACtB,SAAS,YAAY;AACrB,SAAS,WAAW;AACpB,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAeH;AARJ,SAAS,WAAW,UAAyC;AAC3D,MAAI,CAAC,eAAuC,QAAQ,EAAG,QAAO;AAC9D,QAAM,QAAQ,oBAAoB,KAAK,SAAS,MAAM,aAAa,EAAE;AACrE,SAAO,QAAQ,CAAC;AAClB;AAEA,SAAS,OAAO,EAAE,UAAU,GAAG,KAAK,GAAmC;AACrE,SACE,oBAAC,aAAU,UAAU,WAAW,QAAQ,GAAI,GAAG,MAC5C,UACH;AAEJ;AAEA,SAAS,UAAU,EAAE,MAAM,UAAU,GAAG,KAAK,GAA4C;AAGvF,MAAI,CAAC,KAAM,QAAO,oBAAC,OAAG,GAAG,MAAO,UAAS;AAEzC,SACE,oBAAC,YAAS,MAAa,GAAG,MACvB,UACH;AAEJ;AAiBO,IAAM,gBAAgB;AAAA,EAC3B,IAAI,oBAAoB,CAAC;AAAA,EACzB,IAAI,oBAAoB,CAAC;AAAA,EACzB,IAAI,oBAAoB,CAAC;AAAA,EACzB,IAAI,oBAAoB,CAAC;AAAA,EACzB,IAAI,oBAAoB,CAAC;AAAA,EACzB,IAAI,oBAAoB,CAAC;AAAA,EACzB,KAAK;AAAA,EACL,GAAG;AAAA;AAAA,EAGH;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
@@ -0,0 +1,206 @@
1
+ "use client";
2
+
3
+ // src/components/experiments/DesignSandbox.tsx
4
+ import React, { useState } from "react";
5
+ import { cn } from "../../lib/recipe.js";
6
+ import { PageTitle } from "../PageTitle.js";
7
+ import { Card } from "../Card.js";
8
+ import { Button } from "../Button.js";
9
+ import { Badge } from "../Badge.js";
10
+ import { NoteBlock } from "../NoteBlock.js";
11
+ import { TLDR } from "../TLDR.js";
12
+ import { Input } from "../Input.js";
13
+ import { Select } from "../Select.js";
14
+ import { StatCard } from "../StatCard.js";
15
+ import { DataTable } from "../DataTable.js";
16
+ import { Modal } from "../Modal.js";
17
+ import { Tag } from "../Tag.js";
18
+ import { PageHeader } from "../PageHeader.js";
19
+ import { SectionContainer } from "../SectionContainer.js";
20
+ import { SlideDeck } from "../slides/SlideDeck.js";
21
+ import { Slide } from "../slides/Slide.js";
22
+ import { LoremIpsumPost } from "../blog/LoremIpsumPost.js";
23
+ import { useTheme } from "../ThemeProvider.js";
24
+ import { LEVELS } from "../../theme/levels.js";
25
+ import { Activity, ShieldCheck, Cpu, DollarSign, ShoppingBag } from "lucide-react";
26
+ import { jsx, jsxs } from "react/jsx-runtime";
27
+ var DesignSandbox = () => {
28
+ const { level, cycleLevel, setLevel, levels } = useTheme();
29
+ const [activeTab, setActiveTab] = useState("components");
30
+ const [isModalOpen, setIsModalOpen] = useState(false);
31
+ const [searchQuery, setSearchQuery] = useState("");
32
+ const usersData = [
33
+ { id: "usr-001", name: "Ryan Kelly", role: "Architect & Lead", status: "active", usage: "98.4%" },
34
+ { id: "usr-002", name: "Alex Vance", role: "DevOps Engineer", status: "active", usage: "74.2%" },
35
+ { id: "usr-003", name: "Elena Rostova", role: "Security Ops", status: "pending", usage: "12.0%" },
36
+ { id: "usr-004", name: "Marcus Chen", role: "Data Pipeline", status: "disabled", usage: "0.0%" }
37
+ ];
38
+ const filteredUsers = usersData.filter(
39
+ (u) => u.name.toLowerCase().includes(searchQuery.toLowerCase()) || u.role.toLowerCase().includes(searchQuery.toLowerCase())
40
+ );
41
+ return /* @__PURE__ */ jsxs("div", { "data-slot": "design-sandbox", className: "max-w-7xl mx-auto px-4 sm:px-6 py-8 text-content-primary font-mono", children: [
42
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-start flex-wrap gap-4 mb-8", children: [
43
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(PageTitle, { subtitle: "Universal Brutalist Component Library & Dual-Mode Surface", bracketed: true, children: "DESIGN SYSTEM SURFACE" }) }),
44
+ /* @__PURE__ */ jsx("div", { className: "flex gap-2 bg-surface-base p-2 border-2 border-edge-strong", children: levels.map((t) => /* @__PURE__ */ jsx(
45
+ "button",
46
+ {
47
+ type: "button",
48
+ onClick: () => setLevel(t),
49
+ "aria-pressed": level === t,
50
+ title: LEVELS[t].description,
51
+ className: cn(
52
+ "font-mono font-bold text-xs px-3 py-1.5 border-2 border-edge-strong uppercase transition-all",
53
+ level === t ? "bg-accent-primary text-content-inverse" : "bg-transparent text-content-primary hover:bg-surface-raised"
54
+ ),
55
+ children: LEVELS[t].label
56
+ },
57
+ t
58
+ )) })
59
+ ] }),
60
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2 mb-8 border-b-2 border-edge-strong pb-4 overflow-x-auto", children: [
61
+ /* @__PURE__ */ jsx(Button, { onClick: () => setActiveTab("components"), variant: activeTab === "components" ? "tertiary" : "default", bracketed: true, size: "sm", children: "COMPONENTS & THEMES" }),
62
+ /* @__PURE__ */ jsx(Button, { onClick: () => setActiveTab("saas"), variant: activeTab === "saas" ? "tertiary" : "default", bracketed: true, size: "sm", children: "SAAS DASHBOARD" }),
63
+ /* @__PURE__ */ jsx(Button, { onClick: () => setActiveTab("ecommerce"), variant: activeTab === "ecommerce" ? "tertiary" : "default", bracketed: true, size: "sm", children: "E-COMMERCE SHOWCASE" }),
64
+ /* @__PURE__ */ jsx(Button, { onClick: () => setActiveTab("slides"), variant: activeTab === "slides" ? "tertiary" : "default", bracketed: true, size: "sm", children: "PRESENTATION DECK" }),
65
+ /* @__PURE__ */ jsx(Button, { onClick: () => setActiveTab("post"), variant: activeTab === "post" ? "tertiary" : "default", bracketed: true, size: "sm", children: "EDITORIAL BLOG" })
66
+ ] }),
67
+ activeTab === "components" && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-8", children: [
68
+ /* @__PURE__ */ jsxs(TLDR, { children: [
69
+ "The design system operates across a ladder of ",
70
+ levels.length,
71
+ " first-class levels, darkest to lightest:",
72
+ " ",
73
+ levels.map((t, i) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
74
+ i > 0 && (i === levels.length - 1 ? ", and " : ", "),
75
+ /* @__PURE__ */ jsx("strong", { children: LEVELS[t].label.toUpperCase() }),
76
+ " (",
77
+ LEVELS[t].description.replace(/\.$/, ""),
78
+ ")"
79
+ ] }, t)),
80
+ ". Every level declares its own surfaces, inks and accents; components address roles, never levels."
81
+ ] }),
82
+ /* @__PURE__ */ jsxs(Card, { children: [
83
+ /* @__PURE__ */ jsx("h3", { className: "font-display text-xl font-bold text-accent-primary mb-4", children: "[ BADGES & BUTTON VARIANTS ]" }),
84
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-3 flex-wrap mb-6", children: [
85
+ /* @__PURE__ */ jsx(Badge, { accent: "primary", children: "CYAN BADGE" }),
86
+ /* @__PURE__ */ jsx(Badge, { accent: "tertiary", children: "PINK BADGE" }),
87
+ /* @__PURE__ */ jsx(Badge, { accent: "secondary", children: "YELLOW BADGE" }),
88
+ /* @__PURE__ */ jsx(Badge, { accent: "success", children: "NEON GREEN" })
89
+ ] }),
90
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-3 flex-wrap", children: [
91
+ /* @__PURE__ */ jsx(Button, { variant: "primary", bracketed: true, children: "PRIMARY CYAN" }),
92
+ /* @__PURE__ */ jsx(Button, { variant: "tertiary", bracketed: true, children: "ACCENT PINK" }),
93
+ /* @__PURE__ */ jsx(Button, { variant: "secondary", bracketed: true, children: "WARNING YELLOW" }),
94
+ /* @__PURE__ */ jsxs(Button, { onClick: cycleLevel, bracketed: true, children: [
95
+ "CYCLE LEVEL: ",
96
+ LEVELS[level].label.toUpperCase()
97
+ ] })
98
+ ] })
99
+ ] }),
100
+ /* @__PURE__ */ jsxs("div", { className: "bg-surface-raised border-2 border-edge-strong p-6", children: [
101
+ /* @__PURE__ */ jsx("h3", { className: "font-display text-xl font-bold text-accent-secondary mb-4", children: "[ FORM & INPUT PRIMITIVES ]" }),
102
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 mb-4", children: [
103
+ /* @__PURE__ */ jsx(Input, { label: "System API Key", placeholder: "sk-brutalist-...", helperText: "Required for cloud SDK initialization" }),
104
+ /* @__PURE__ */ jsx(
105
+ Select,
106
+ {
107
+ label: "Environment Tier",
108
+ options: [
109
+ { label: "Production (US-East)", value: "prod-us" },
110
+ { label: "Staging (EU-West)", value: "stage-eu" },
111
+ { label: "Local Development Sandbox", value: "dev-local" }
112
+ ]
113
+ }
114
+ )
115
+ ] }),
116
+ /* @__PURE__ */ jsx(Button, { onClick: () => setIsModalOpen(true), variant: "secondary", bracketed: true, size: "sm", children: "TRIGGER ACTION DIALOG" })
117
+ ] }),
118
+ /* @__PURE__ */ jsx(NoteBlock, { title: "SECURITY COMPLIANCE DIRECTIVE", type: "warning", children: "All design system primitives strictly enforce dual-mode token remappings. Direct hardcoded hex literals are forbidden to ensure ink-on-paper sketch mode readability." })
119
+ ] }),
120
+ activeTab === "saas" && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-6", children: [
121
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-center flex-wrap gap-4", children: [
122
+ /* @__PURE__ */ jsx("h2", { className: "font-display text-2xl font-bold text-accent-primary uppercase", children: "[ CLOUD OPERATIONS COMMAND CENTER ]" }),
123
+ /* @__PURE__ */ jsx("div", { className: "w-full sm:w-72", children: /* @__PURE__ */ jsx(
124
+ Input,
125
+ {
126
+ placeholder: "Search cluster workloads...",
127
+ value: searchQuery,
128
+ onChange: (e) => setSearchQuery(e.target.value)
129
+ }
130
+ ) })
131
+ ] }),
132
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4", children: [
133
+ /* @__PURE__ */ jsx(StatCard, { title: "SYSTEM HEALTH", value: "99.98%", change: "+0.04%", changeType: "positive", icon: Activity, accent: "primary", subtitle: "42 Nodes Healthy" }),
134
+ /* @__PURE__ */ jsx(StatCard, { title: "COMPUTE LATENCY", value: "14.2 ms", change: "-3.1 ms", changeType: "positive", icon: Cpu, accent: "tertiary", subtitle: "Sub-20ms SLA MET" }),
135
+ /* @__PURE__ */ jsx(StatCard, { title: "SECURITY AUDIT", value: "100%", change: "PASSED", changeType: "positive", icon: ShieldCheck, accent: "success", subtitle: "0 Critical Alerts" }),
136
+ /* @__PURE__ */ jsx(StatCard, { title: "EST. CLOUD COST", value: "$2,410", change: "+$120", changeType: "negative", icon: DollarSign, accent: "secondary", subtitle: "Monthly Budget" })
137
+ ] }),
138
+ /* @__PURE__ */ jsxs("div", { className: "mt-4", children: [
139
+ /* @__PURE__ */ jsx("h3", { className: "font-display text-lg font-bold text-content-primary mb-3 uppercase", children: "[ AUTHORIZED WORKSPACE OPERATORS ]" }),
140
+ /* @__PURE__ */ jsx(
141
+ DataTable,
142
+ {
143
+ keyExtractor: (r) => r.id,
144
+ columns: [
145
+ { header: "USER ID", accessor: "id" },
146
+ { header: "OPERATOR NAME", accessor: "name" },
147
+ { header: "ROLE ASSIGNMENT", accessor: "role" },
148
+ {
149
+ header: "STATUS",
150
+ accessor: (r) => /* @__PURE__ */ jsx(Badge, { accent: r.status === "active" ? "success" : r.status === "pending" ? "secondary" : "tertiary", children: r.status.toUpperCase() })
151
+ },
152
+ { header: "RESOURCE USAGE", accessor: "usage" }
153
+ ],
154
+ data: filteredUsers
155
+ }
156
+ )
157
+ ] })
158
+ ] }),
159
+ activeTab === "ecommerce" && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-6", children: [
160
+ /* @__PURE__ */ jsx(PageHeader, { title: "BRUTALIST HARDWARE GEAR", subtitle: "High-performance developer gear & edge modules", accent: "tertiary", icon: ShoppingBag }),
161
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2 flex-wrap mb-4", children: [
162
+ /* @__PURE__ */ jsx(Tag, { text: "ALL GEAR", accent: "tertiary" }),
163
+ /* @__PURE__ */ jsx(Tag, { text: "EDGE NODES", accent: "primary" }),
164
+ /* @__PURE__ */ jsx(Tag, { text: "TERMINAL HARDWARE", accent: "secondary" }),
165
+ /* @__PURE__ */ jsx(Tag, { text: "SECURITY KEYS", accent: "success" })
166
+ ] }),
167
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: [
168
+ /* @__PURE__ */ jsx(Card, { title: "NEON TERMINAL DISPLAY", description: "Ultra-wide 4K brutalist developer monitor with anti-glare matte coating.", filename: "hardware_display.spec", children: /* @__PURE__ */ jsxs("div", { className: "mt-4 flex justify-between items-center", children: [
169
+ /* @__PURE__ */ jsx("span", { className: "font-display text-2xl font-bold text-accent-primary", children: "$899.00" }),
170
+ /* @__PURE__ */ jsx(Button, { variant: "primary", size: "sm", bracketed: true, children: "ADD TO CART" })
171
+ ] }) }),
172
+ /* @__PURE__ */ jsx(Card, { title: "CYBERDECK MECHANICAL", description: "Hotswappable mechanical keyboard with custom laser-engraved keycaps.", filename: "keyboard_v2.spec", children: /* @__PURE__ */ jsxs("div", { className: "mt-4 flex justify-between items-center", children: [
173
+ /* @__PURE__ */ jsx("span", { className: "font-display text-2xl font-bold text-accent-tertiary", children: "$349.00" }),
174
+ /* @__PURE__ */ jsx(Button, { variant: "tertiary", size: "sm", bracketed: true, children: "ADD TO CART" })
175
+ ] }) }),
176
+ /* @__PURE__ */ jsx(Card, { title: "HSM HARDWARE TOKEN", description: "FIPS 140-3 Level 4 physical cryptographic key with hardware destruction.", filename: "hsm_security.spec", children: /* @__PURE__ */ jsxs("div", { className: "mt-4 flex justify-between items-center", children: [
177
+ /* @__PURE__ */ jsx("span", { className: "font-display text-2xl font-bold text-accent-secondary", children: "$199.00" }),
178
+ /* @__PURE__ */ jsx(Button, { variant: "secondary", size: "sm", bracketed: true, children: "ADD TO CART" })
179
+ ] }) })
180
+ ] })
181
+ ] }),
182
+ activeTab === "slides" && /* @__PURE__ */ jsx("div", { className: "border-4 border-edge-strong p-6 bg-surface-base", children: /* @__PURE__ */ jsxs(SlideDeck, { children: [
183
+ /* @__PURE__ */ jsxs(Slide, { title: "BUILDING SINGULAR DESIGN SURFACES", children: [
184
+ /* @__PURE__ */ jsx("p", { className: "text-xl text-content-secondary font-mono mb-4", children: "> Dual-Mode Token Remappings across Dark, Dim, and Sketch." }),
185
+ /* @__PURE__ */ jsx(Badge, { accent: "primary", children: "REUSABLE ENGINE" })
186
+ ] }),
187
+ /* @__PURE__ */ jsxs(Slide, { title: "ZERO TOKEN DRIFT PRINCIPLE", children: [
188
+ /* @__PURE__ */ jsx("p", { className: "text-xl text-content-secondary font-mono mb-4", children: "> Every downstream app imports @rtkelly-labs/design-system/tailwind-preset." }),
189
+ /* @__PURE__ */ jsx(Badge, { accent: "tertiary", children: "SINGLE SOURCE OF TRUTH" })
190
+ ] })
191
+ ] }) }),
192
+ activeTab === "post" && /* @__PURE__ */ jsx(SectionContainer, { children: /* @__PURE__ */ jsx(LoremIpsumPost, {}) }),
193
+ /* @__PURE__ */ jsxs(Modal, { isOpen: isModalOpen, onClose: () => setIsModalOpen(false), title: "CONFIRM SYSTEM OVERRIDE", children: [
194
+ /* @__PURE__ */ jsxs("p", { className: "mb-4", children: [
195
+ "Are you sure you want to execute system configuration override on node ",
196
+ /* @__PURE__ */ jsx("strong", { children: "cluster-us-east-1" }),
197
+ "?"
198
+ ] }),
199
+ /* @__PURE__ */ jsx("p", { className: "text-xs font-mono text-content-muted", children: "> This action will trigger a rolling reload of active workload containers." })
200
+ ] })
201
+ ] });
202
+ };
203
+ export {
204
+ DesignSandbox
205
+ };
206
+ //# sourceMappingURL=DesignSandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/experiments/DesignSandbox.tsx"],"sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { cn } from '../../lib/recipe';\nimport { PageTitle } from '../PageTitle';\nimport { Card } from '../Card';\nimport { Button } from '../Button';\nimport { Badge } from '../Badge';\nimport { NoteBlock } from '../NoteBlock';\nimport { TLDR } from '../TLDR';\nimport { Input } from '../Input';\nimport { Select } from '../Select';\nimport { StatCard } from '../StatCard';\nimport { DataTable } from '../DataTable';\nimport { Modal } from '../Modal';\nimport { Tag } from '../Tag';\nimport { PageHeader } from '../PageHeader';\nimport { SectionContainer } from '../SectionContainer';\nimport { SlideDeck } from '../slides/SlideDeck';\nimport { Slide } from '../slides/Slide';\nimport { LoremIpsumPost } from '../blog/LoremIpsumPost';\nimport { useTheme } from '../ThemeProvider';\nimport { LEVELS } from '../../theme/levels';\nimport { Activity, ShieldCheck, Cpu, DollarSign, Layers, Search, ShoppingBag } from 'lucide-react';\n\ninterface UserRecord {\n id: string;\n name: string;\n role: string;\n status: 'active' | 'pending' | 'disabled';\n usage: string;\n}\n\nexport const DesignSandbox: React.FC = () => {\n /*\n * The strict hook, deliberately. Unlike `DocsHeader`, this component does\n * not *adapt* to the level — a\n * sandbox whose whole purpose is switching between Levels cannot render\n * meaningfully without a provider, so failing loudly is correct. The\n * distinction is required-versus-adapts; see `useOptionalTheme` for the other\n * side of it.\n */\n const { level, cycleLevel, setLevel, levels } = useTheme();\n const [activeTab, setActiveTab] = useState<'components' | 'saas' | 'ecommerce' | 'slides' | 'post'>('components');\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n\n const usersData: UserRecord[] = [\n { id: 'usr-001', name: 'Ryan Kelly', role: 'Architect & Lead', status: 'active', usage: '98.4%' },\n { id: 'usr-002', name: 'Alex Vance', role: 'DevOps Engineer', status: 'active', usage: '74.2%' },\n { id: 'usr-003', name: 'Elena Rostova', role: 'Security Ops', status: 'pending', usage: '12.0%' },\n { id: 'usr-004', name: 'Marcus Chen', role: 'Data Pipeline', status: 'disabled', usage: '0.0%' },\n ];\n\n const filteredUsers = usersData.filter(\n (u) => u.name.toLowerCase().includes(searchQuery.toLowerCase()) || u.role.toLowerCase().includes(searchQuery.toLowerCase())\n );\n\n return (\n <div data-slot=\"design-sandbox\" className=\"max-w-7xl mx-auto px-4 sm:px-6 py-8 text-content-primary font-mono\">\n {/* Sandbox Header */}\n <div className=\"flex justify-between items-start flex-wrap gap-4 mb-8\">\n <div>\n <PageTitle subtitle=\"Universal Brutalist Component Library & Dual-Mode Surface\" bracketed>\n DESIGN SYSTEM SURFACE\n </PageTitle>\n </div>\n\n {/* 3-Way Theme Switcher Controls */}\n <div className=\"flex gap-2 bg-surface-base p-2 border-2 border-edge-strong\">\n {levels.map((t) => (\n <button\n key={t}\n type=\"button\"\n onClick={() => setLevel(t)}\n aria-pressed={level === t}\n title={LEVELS[t].description}\n className={cn(\n 'font-mono font-bold text-xs px-3 py-1.5 border-2 border-edge-strong uppercase transition-all',\n level === t\n ? 'bg-accent-primary text-content-inverse'\n : 'bg-transparent text-content-primary hover:bg-surface-raised'\n )}\n >\n {LEVELS[t].label}\n </button>\n ))}\n </div>\n </div>\n\n {/* Navigation Sub-Tabs */}\n <div className=\"flex gap-2 mb-8 border-b-2 border-edge-strong pb-4 overflow-x-auto\">\n <Button onClick={() => setActiveTab('components')} variant={activeTab === 'components' ? 'tertiary' : 'default'} bracketed size=\"sm\">\n COMPONENTS & THEMES\n </Button>\n <Button onClick={() => setActiveTab('saas')} variant={activeTab === 'saas' ? 'tertiary' : 'default'} bracketed size=\"sm\">\n SAAS DASHBOARD\n </Button>\n <Button onClick={() => setActiveTab('ecommerce')} variant={activeTab === 'ecommerce' ? 'tertiary' : 'default'} bracketed size=\"sm\">\n E-COMMERCE SHOWCASE\n </Button>\n <Button onClick={() => setActiveTab('slides')} variant={activeTab === 'slides' ? 'tertiary' : 'default'} bracketed size=\"sm\">\n PRESENTATION DECK\n </Button>\n <Button onClick={() => setActiveTab('post')} variant={activeTab === 'post' ? 'tertiary' : 'default'} bracketed size=\"sm\">\n EDITORIAL BLOG\n </Button>\n </div>\n\n {/* Tab 1: Core Components & Themes Grid */}\n {activeTab === 'components' && (\n <div className=\"flex flex-col gap-8\">\n {/* Theme Matrix Callout */}\n <TLDR>\n The design system operates across a ladder of {levels.length} first-class levels, darkest to lightest:{' '}\n {levels.map((t, i) => (\n <React.Fragment key={t}>\n {i > 0 && (i === levels.length - 1 ? ', and ' : ', ')}\n <strong>{LEVELS[t].label.toUpperCase()}</strong> ({LEVELS[t].description.replace(/\\.$/, '')})\n </React.Fragment>\n ))}\n . Every level declares its own surfaces, inks and accents; components address roles, never levels.\n </TLDR>\n\n {/* Card & Button Primitives */}\n <Card>\n <h3 className=\"font-display text-xl font-bold text-accent-primary mb-4\">\n [ BADGES & BUTTON VARIANTS ]\n </h3>\n <div className=\"flex gap-3 flex-wrap mb-6\">\n <Badge accent=\"primary\">CYAN BADGE</Badge>\n <Badge accent=\"tertiary\">PINK BADGE</Badge>\n <Badge accent=\"secondary\">YELLOW BADGE</Badge>\n <Badge accent=\"success\">NEON GREEN</Badge>\n </div>\n <div className=\"flex gap-3 flex-wrap\">\n <Button variant=\"primary\" bracketed>PRIMARY CYAN</Button>\n <Button variant=\"tertiary\" bracketed>ACCENT PINK</Button>\n <Button variant=\"secondary\" bracketed>WARNING YELLOW</Button>\n <Button onClick={cycleLevel} bracketed>CYCLE LEVEL: {LEVELS[level].label.toUpperCase()}</Button>\n </div>\n </Card>\n\n {/* Form Primitives */}\n <div className=\"bg-surface-raised border-2 border-edge-strong p-6\">\n <h3 className=\"font-display text-xl font-bold text-accent-secondary mb-4\">\n [ FORM & INPUT PRIMITIVES ]\n </h3>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4 mb-4\">\n <Input label=\"System API Key\" placeholder=\"sk-brutalist-...\" helperText=\"Required for cloud SDK initialization\" />\n <Select\n label=\"Environment Tier\"\n options={[\n { label: 'Production (US-East)', value: 'prod-us' },\n { label: 'Staging (EU-West)', value: 'stage-eu' },\n { label: 'Local Development Sandbox', value: 'dev-local' },\n ]}\n />\n </div>\n <Button onClick={() => setIsModalOpen(true)} variant=\"secondary\" bracketed size=\"sm\">\n TRIGGER ACTION DIALOG\n </Button>\n </div>\n\n {/* Callouts */}\n <NoteBlock title=\"SECURITY COMPLIANCE DIRECTIVE\" type=\"warning\">\n All design system primitives strictly enforce dual-mode token remappings. Direct hardcoded hex literals are forbidden to ensure ink-on-paper sketch mode readability.\n </NoteBlock>\n </div>\n )}\n\n {/* Tab 2: SaaS Dashboard Sample Page */}\n {activeTab === 'saas' && (\n <div className=\"flex flex-col gap-6\">\n <div className=\"flex justify-between items-center flex-wrap gap-4\">\n <h2 className=\"font-display text-2xl font-bold text-accent-primary uppercase\">\n [ CLOUD OPERATIONS COMMAND CENTER ]\n </h2>\n <div className=\"w-full sm:w-72\">\n <Input\n placeholder=\"Search cluster workloads...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n </div>\n </div>\n\n {/* KPI Stat Cards Grid */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4\">\n <StatCard title=\"SYSTEM HEALTH\" value=\"99.98%\" change=\"+0.04%\" changeType=\"positive\" icon={Activity} accent=\"primary\" subtitle=\"42 Nodes Healthy\" />\n <StatCard title=\"COMPUTE LATENCY\" value=\"14.2 ms\" change=\"-3.1 ms\" changeType=\"positive\" icon={Cpu} accent=\"tertiary\" subtitle=\"Sub-20ms SLA MET\" />\n <StatCard title=\"SECURITY AUDIT\" value=\"100%\" change=\"PASSED\" changeType=\"positive\" icon={ShieldCheck} accent=\"success\" subtitle=\"0 Critical Alerts\" />\n <StatCard title=\"EST. CLOUD COST\" value=\"$2,410\" change=\"+$120\" changeType=\"negative\" icon={DollarSign} accent=\"secondary\" subtitle=\"Monthly Budget\" />\n </div>\n\n {/* Data Table */}\n <div className=\"mt-4\">\n <h3 className=\"font-display text-lg font-bold text-content-primary mb-3 uppercase\">\n [ AUTHORIZED WORKSPACE OPERATORS ]\n </h3>\n <DataTable<UserRecord>\n keyExtractor={(r) => r.id}\n columns={[\n { header: 'USER ID', accessor: 'id' },\n { header: 'OPERATOR NAME', accessor: 'name' },\n { header: 'ROLE ASSIGNMENT', accessor: 'role' },\n {\n header: 'STATUS',\n accessor: (r) => (\n <Badge accent={r.status === 'active' ? 'success' : r.status === 'pending' ? 'secondary' : 'tertiary'}>\n {r.status.toUpperCase()}\n </Badge>\n ),\n },\n { header: 'RESOURCE USAGE', accessor: 'usage' },\n ]}\n data={filteredUsers}\n />\n </div>\n </div>\n )}\n\n {/* Tab 3: E-Commerce & Product Showcase */}\n {activeTab === 'ecommerce' && (\n <div className=\"flex flex-col gap-6\">\n <PageHeader title=\"BRUTALIST HARDWARE GEAR\" subtitle=\"High-performance developer gear & edge modules\" accent=\"tertiary\" icon={ShoppingBag} />\n\n <div className=\"flex gap-2 flex-wrap mb-4\">\n <Tag text=\"ALL GEAR\" accent=\"tertiary\" />\n <Tag text=\"EDGE NODES\" accent=\"primary\" />\n <Tag text=\"TERMINAL HARDWARE\" accent=\"secondary\" />\n <Tag text=\"SECURITY KEYS\" accent=\"success\" />\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n <Card title=\"NEON TERMINAL DISPLAY\" description=\"Ultra-wide 4K brutalist developer monitor with anti-glare matte coating.\" filename=\"hardware_display.spec\">\n <div className=\"mt-4 flex justify-between items-center\">\n <span className=\"font-display text-2xl font-bold text-accent-primary\">$899.00</span>\n <Button variant=\"primary\" size=\"sm\" bracketed>ADD TO CART</Button>\n </div>\n </Card>\n <Card title=\"CYBERDECK MECHANICAL\" description=\"Hotswappable mechanical keyboard with custom laser-engraved keycaps.\" filename=\"keyboard_v2.spec\">\n <div className=\"mt-4 flex justify-between items-center\">\n <span className=\"font-display text-2xl font-bold text-accent-tertiary\">$349.00</span>\n <Button variant=\"tertiary\" size=\"sm\" bracketed>ADD TO CART</Button>\n </div>\n </Card>\n <Card title=\"HSM HARDWARE TOKEN\" description=\"FIPS 140-3 Level 4 physical cryptographic key with hardware destruction.\" filename=\"hsm_security.spec\">\n <div className=\"mt-4 flex justify-between items-center\">\n <span className=\"font-display text-2xl font-bold text-accent-secondary\">$199.00</span>\n <Button variant=\"secondary\" size=\"sm\" bracketed>ADD TO CART</Button>\n </div>\n </Card>\n </div>\n </div>\n )}\n\n {/* Tab 4: Slide Deck Engine */}\n {activeTab === 'slides' && (\n <div className=\"border-4 border-edge-strong p-6 bg-surface-base\">\n <SlideDeck>\n <Slide title=\"BUILDING SINGULAR DESIGN SURFACES\">\n <p className=\"text-xl text-content-secondary font-mono mb-4\">&gt; Dual-Mode Token Remappings across Dark, Dim, and Sketch.</p>\n <Badge accent=\"primary\">REUSABLE ENGINE</Badge>\n </Slide>\n <Slide title=\"ZERO TOKEN DRIFT PRINCIPLE\">\n <p className=\"text-xl text-content-secondary font-mono mb-4\">&gt; Every downstream app imports @rtkelly-labs/design-system/tailwind-preset.</p>\n <Badge accent=\"tertiary\">SINGLE SOURCE OF TRUTH</Badge>\n </Slide>\n </SlideDeck>\n </div>\n )}\n\n {/* Tab 5: Editorial & Blog Post */}\n {activeTab === 'post' && (\n <SectionContainer>\n <LoremIpsumPost />\n </SectionContainer>\n )}\n\n {/* Modal Dialog */}\n <Modal isOpen={isModalOpen} onClose={() => setIsModalOpen(false)} title=\"CONFIRM SYSTEM OVERRIDE\">\n <p className=\"mb-4\">Are you sure you want to execute system configuration override on node <strong>cluster-us-east-1</strong>?</p>\n <p className=\"text-xs font-mono text-content-muted\">&gt; This action will trigger a rolling reload of active workload containers.</p>\n </Modal>\n </div>\n );\n};\n"],"mappings":"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","names":[]}