@master/internal-site 0.0.0-stage → 0.1.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 (687) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +66 -2
  3. package/dist/astro.d.mts +3 -0
  4. package/dist/astro.mjs +510 -0
  5. package/dist/config.d.mts +64 -0
  6. package/dist/config.mjs +10 -0
  7. package/package.json +384 -4
  8. package/src/astro/Page.astro +12 -0
  9. package/src/astro/content-pages.ts +75 -0
  10. package/src/astro/index.ts +124 -0
  11. package/src/astro/module-id.ts +4 -0
  12. package/src/astro/propagated-assets.ts +29 -0
  13. package/src/astro/route-paths.ts +78 -0
  14. package/src/astro/routes.template.ts +110 -0
  15. package/src/astro/server-styles.ts +26 -0
  16. package/src/astro/site-context.ts +27 -0
  17. package/src/astro/source-url.ts +22 -0
  18. package/src/astro/svelte-renderer.ts +45 -0
  19. package/src/astro/svg-markup.ts +23 -0
  20. package/src/benchmarks/BenchmarkBarRows.astro +34 -0
  21. package/src/benchmarks/BenchmarkBars.astro +14 -0
  22. package/src/benchmarks/BenchmarkChart.astro +53 -0
  23. package/src/benchmarks/BenchmarkChartGroup.astro +24 -0
  24. package/src/benchmarks/BenchmarkDataTable.astro +24 -0
  25. package/src/benchmarks/BenchmarkDelta.astro +23 -0
  26. package/src/benchmarks/BenchmarkFigure.astro +30 -0
  27. package/src/benchmarks/BenchmarkMetricTable.astro +38 -0
  28. package/src/benchmarks/BenchmarkMetrics.astro +23 -0
  29. package/src/benchmarks/BenchmarkSampleSummary.astro +30 -0
  30. package/src/benchmarks/BenchmarkScrollRegion.svelte +27 -0
  31. package/src/benchmarks/BenchmarkSource.astro +20 -0
  32. package/src/benchmarks/BenchmarkStackedBars.astro +54 -0
  33. package/src/benchmarks/BenchmarkStatus.astro +16 -0
  34. package/src/benchmarks/types.ts +98 -0
  35. package/src/benchmarks/utils.ts +42 -0
  36. package/src/blog/BlogAuthors.astro +25 -0
  37. package/src/blog/article/BlogArticleContents.svelte +24 -0
  38. package/src/blog/article/BlogArticleEnd.astro +55 -0
  39. package/src/blog/article/BlogArticleMasthead.astro +61 -0
  40. package/src/blog/article/language.ts +29 -0
  41. package/src/blog/article/neighbors.ts +27 -0
  42. package/src/blog/article/title-lines.astro +14 -0
  43. package/src/blog/article/title-parts.ts +9 -0
  44. package/src/components.d.ts +5 -0
  45. package/src/config.ts +66 -0
  46. package/src/css/ButtonPreview.astro +22 -0
  47. package/src/css/ConfiguredExample.astro +15 -0
  48. package/src/css/NamespaceUtilityTable.astro +50 -0
  49. package/src/css/StylesheetExample.astro +15 -0
  50. package/src/css/ThemeNumberVariableTable.astro +57 -0
  51. package/src/css/configured-example.ts +53 -0
  52. package/src/css/foundation-data/elevation/shadow-data.ts +52 -0
  53. package/src/css/foundation-data/sizing/scale-data.ts +37 -0
  54. package/src/css/foundation-data/specimen-content.ts +10 -0
  55. package/src/css/foundation-data/specimens.ts +96 -0
  56. package/src/css/foundation-data/tokens.ts +32 -0
  57. package/src/css/generate-preset-css.ts +12 -0
  58. package/src/css/highlight.ts +34 -0
  59. package/src/css/manifest-utilities.ts +29 -0
  60. package/src/css/markdown.ts +279 -0
  61. package/src/css/preset-css.ts +15 -0
  62. package/src/css/preset-manifest.ts +3 -0
  63. package/src/css/stylesheet-example.ts +26 -0
  64. package/src/css/theme-variables.ts +74 -0
  65. package/src/css/variable-namespace-sources.ts +20 -0
  66. package/src/demo/Demo.svelte +55 -0
  67. package/src/demo/DemoAsset.astro +38 -0
  68. package/src/demo/DemoAxes.svelte +22 -0
  69. package/src/demo/DemoBadge.svelte +18 -0
  70. package/src/demo/DemoCatalog.astro +36 -0
  71. package/src/demo/DemoComparison.svelte +36 -0
  72. package/src/demo/DemoConfiguredExample.astro +48 -0
  73. package/src/demo/DemoContainer.svelte +48 -0
  74. package/src/demo/DemoControls.svelte +16 -0
  75. package/src/demo/DemoCopyButton.svelte +50 -0
  76. package/src/demo/DemoCopyGroup.svelte +15 -0
  77. package/src/demo/DemoExample.astro +27 -0
  78. package/src/demo/DemoFeatureSupport.svelte +18 -0
  79. package/src/demo/DemoGeneratedCSS.svelte +8 -0
  80. package/src/demo/DemoIndex.astro +23 -0
  81. package/src/demo/DemoInstallation.astro +17 -0
  82. package/src/demo/DemoItem.svelte +17 -0
  83. package/src/demo/DemoLabel.svelte +15 -0
  84. package/src/demo/DemoLegend.svelte +15 -0
  85. package/src/demo/DemoMeasure.svelte +28 -0
  86. package/src/demo/DemoMedia.svelte +43 -0
  87. package/src/demo/DemoMotion.svelte +41 -0
  88. package/src/demo/DemoPageViewport.astro +17 -0
  89. package/src/demo/DemoPalette.astro +29 -0
  90. package/src/demo/DemoPaletteGroups.svelte +15 -0
  91. package/src/demo/DemoScrollArea.svelte +15 -0
  92. package/src/demo/DemoStyleComparison.astro +25 -0
  93. package/src/demo/DemoSurface.svelte +15 -0
  94. package/src/demo/DemoSwatch.svelte +19 -0
  95. package/src/demo/DemoThemeComparison.astro +30 -0
  96. package/src/demo/DemoTokenTable.astro +34 -0
  97. package/src/demo/DemoViewTransition.astro +18 -0
  98. package/src/demo/DemoViewport.svelte +324 -0
  99. package/src/demo/DemoWaterfall.astro +30 -0
  100. package/src/demo/FoundationBreakpoint.astro +12 -0
  101. package/src/demo/ProjectStyleExample.astro +13 -0
  102. package/src/demo/copy-feedback.ts +10 -0
  103. package/src/demo/demo-waterfall.ts +17 -0
  104. package/src/demo/drag-readings.ts +20 -0
  105. package/src/demo/foundations/FoundationAxes.astro +12 -0
  106. package/src/demo/foundations/FoundationColorRoles.astro +5 -0
  107. package/src/demo/foundations/FoundationContainerGrid.astro +24 -0
  108. package/src/demo/foundations/FoundationDialog.astro +14 -0
  109. package/src/demo/foundations/FoundationElevation.astro +5 -0
  110. package/src/demo/foundations/FoundationElevationState.astro +5 -0
  111. package/src/demo/foundations/FoundationHue.astro +5 -0
  112. package/src/demo/foundations/FoundationLines.astro +5 -0
  113. package/src/demo/foundations/FoundationMedia.astro +28 -0
  114. package/src/demo/foundations/FoundationMotion.astro +5 -0
  115. package/src/demo/foundations/FoundationPalette.astro +8 -0
  116. package/src/demo/foundations/FoundationRadius.astro +13 -0
  117. package/src/demo/foundations/FoundationShapes.astro +12 -0
  118. package/src/demo/foundations/FoundationShrink.astro +14 -0
  119. package/src/demo/foundations/FoundationSizing.astro +19 -0
  120. package/src/demo/foundations/FoundationSpecimen.astro +20 -0
  121. package/src/demo/foundations/FoundationSurfaces.astro +5 -0
  122. package/src/demo/foundations/FoundationTextHue.astro +5 -0
  123. package/src/demo/foundations/FoundationTextRoles.astro +5 -0
  124. package/src/demo/foundations/FoundationTokens.astro +22 -0
  125. package/src/demo/foundations/FoundationTokensView.astro +65 -0
  126. package/src/demo/foundations/FoundationTransition.astro +5 -0
  127. package/src/demo/foundations/FoundationTypeComparison.astro +12 -0
  128. package/src/demo/foundations/FoundationTypography.astro +5 -0
  129. package/src/demo/foundations/Palette.svelte +37 -0
  130. package/src/demo/foundations/ShadowScaleDemo.astro +22 -0
  131. package/src/demo/illustration-materials.ts +180 -0
  132. package/src/demo/maintenance-example.ts +62 -0
  133. package/src/demo/playback.ts +75 -0
  134. package/src/demo/project-style-examples.ts +128 -0
  135. package/src/demo/reference/alignment.ts +42 -0
  136. package/src/demo/reference/animations.ts +30 -0
  137. package/src/demo/reference/backgrounds.ts +39 -0
  138. package/src/demo/reference/border-paint.ts +31 -0
  139. package/src/demo/reference/clipping.ts +26 -0
  140. package/src/demo/reference/document.ts +55 -0
  141. package/src/demo/reference/edges.ts +40 -0
  142. package/src/demo/reference/effects.ts +27 -0
  143. package/src/demo/reference/flexbox.ts +33 -0
  144. package/src/demo/reference/frame.css +118 -0
  145. package/src/demo/reference/grid.ts +42 -0
  146. package/src/demo/reference/html.ts +40 -0
  147. package/src/demo/reference/interaction.ts +42 -0
  148. package/src/demo/reference/layout-html.ts +10 -0
  149. package/src/demo/reference/layout.ts +102 -0
  150. package/src/demo/reference/media.ts +29 -0
  151. package/src/demo/reference/positioning.ts +90 -0
  152. package/src/demo/reference/scenes.ts +197 -0
  153. package/src/demo/reference/scrolling.ts +66 -0
  154. package/src/demo/reference/shapes.ts +22 -0
  155. package/src/demo/reference/sizing.ts +43 -0
  156. package/src/demo/reference/source.ts +8 -0
  157. package/src/demo/reference/text-effects.ts +37 -0
  158. package/src/demo/reference/text-flow.ts +41 -0
  159. package/src/demo/reference/transforms.ts +26 -0
  160. package/src/demo/reference/transitions.ts +24 -0
  161. package/src/demo/reference/type-specimens.ts +56 -0
  162. package/src/demo/reference/types.ts +30 -0
  163. package/src/demo/reference/typography.ts +32 -0
  164. package/src/demo/specimens/accent-color.json +50 -0
  165. package/src/demo/specimens/align-items.json +56 -0
  166. package/src/demo/specimens/animation-delay.json +55 -0
  167. package/src/demo/specimens/animation-direction.json +49 -0
  168. package/src/demo/specimens/animation-fill-mode.json +55 -0
  169. package/src/demo/specimens/animation-iteration-count.json +55 -0
  170. package/src/demo/specimens/animation-play-state.json +83 -0
  171. package/src/demo/specimens/animation-timing-function.json +48 -0
  172. package/src/demo/specimens/appearance.json +44 -0
  173. package/src/demo/specimens/aspect-ratio.json +28 -0
  174. package/src/demo/specimens/backdrop-filter.json +44 -0
  175. package/src/demo/specimens/background-attachment.json +49 -0
  176. package/src/demo/specimens/background-image.json +25 -0
  177. package/src/demo/specimens/background-origin.json +36 -0
  178. package/src/demo/specimens/background-size.json +29 -0
  179. package/src/demo/specimens/border-collapse.json +45 -0
  180. package/src/demo/specimens/border-color.json +35 -0
  181. package/src/demo/specimens/border-image-repeat.json +50 -0
  182. package/src/demo/specimens/border-image-slice.json +45 -0
  183. package/src/demo/specimens/border-radius.json +30 -0
  184. package/src/demo/specimens/box-decoration-break.json +35 -0
  185. package/src/demo/specimens/box-shadow.json +33 -0
  186. package/src/demo/specimens/clear.json +77 -0
  187. package/src/demo/specimens/clip-path.json +38 -0
  188. package/src/demo/specimens/content.json +27 -0
  189. package/src/demo/specimens/counter-set.json +31 -0
  190. package/src/demo/specimens/fill.json +23 -0
  191. package/src/demo/specimens/filter.json +23 -0
  192. package/src/demo/specimens/flex-direction.json +27 -0
  193. package/src/demo/specimens/flex-grow.json +27 -0
  194. package/src/demo/specimens/font-style.json +23 -0
  195. package/src/demo/specimens/font-variant-numeric.json +28 -0
  196. package/src/demo/specimens/grid-auto-columns.json +29 -0
  197. package/src/demo/specimens/grid-auto-flow.json +37 -0
  198. package/src/demo/specimens/grid-template-areas.json +34 -0
  199. package/src/demo/specimens/grid-template-columns.json +36 -0
  200. package/src/demo/specimens/isolation.json +25 -0
  201. package/src/demo/specimens/justify-content.json +36 -0
  202. package/src/demo/specimens/line-height.json +28 -0
  203. package/src/demo/specimens/list-style-position.json +36 -0
  204. package/src/demo/specimens/mask-image.json +54 -0
  205. package/src/demo/specimens/min-width.json +39 -0
  206. package/src/demo/specimens/mix-blend-mode.json +43 -0
  207. package/src/demo/specimens/object-fit.json +27 -0
  208. package/src/demo/specimens/object-position.json +27 -0
  209. package/src/demo/specimens/opacity.json +37 -0
  210. package/src/demo/specimens/order.json +28 -0
  211. package/src/demo/specimens/overflow-wrap.json +26 -0
  212. package/src/demo/specimens/overflow.json +53 -0
  213. package/src/demo/specimens/overscroll-behavior.json +29 -0
  214. package/src/demo/specimens/padding.json +84 -0
  215. package/src/demo/specimens/place-content.json +31 -0
  216. package/src/demo/specimens/pointer-events.json +46 -0
  217. package/src/demo/specimens/position.json +29 -0
  218. package/src/demo/specimens/resize.json +32 -0
  219. package/src/demo/specimens/screen-readers.json +37 -0
  220. package/src/demo/specimens/scroll-padding.json +29 -0
  221. package/src/demo/specimens/scroll-snap-stop.json +33 -0
  222. package/src/demo/specimens/shape-image-threshold.json +37 -0
  223. package/src/demo/specimens/shape-margin.json +40 -0
  224. package/src/demo/specimens/shape-outside.json +37 -0
  225. package/src/demo/specimens/stroke-width.json +27 -0
  226. package/src/demo/specimens/text-fill-color.json +23 -0
  227. package/src/demo/specimens/text-stroke-width.json +32 -0
  228. package/src/demo/specimens/touch-action.json +45 -0
  229. package/src/demo/specimens/transform-box.json +37 -0
  230. package/src/demo/specimens/transform-origin.json +56 -0
  231. package/src/demo/specimens/transform-style.json +55 -0
  232. package/src/demo/specimens/transform.json +47 -0
  233. package/src/demo/specimens/transition-delay.json +57 -0
  234. package/src/demo/specimens/transition-duration.json +60 -0
  235. package/src/demo/specimens/transition-property.json +60 -0
  236. package/src/demo/specimens/transition-timing-function.json +65 -0
  237. package/src/demo/specimens/user-drag.json +28 -0
  238. package/src/demo/specimens/user-select.json +25 -0
  239. package/src/demo/specimens/vertical-align.json +28 -0
  240. package/src/demo/specimens/width.json +56 -0
  241. package/src/demo/specimens/will-change.json +50 -0
  242. package/src/demo/specimens/writing-mode.json +26 -0
  243. package/src/demo/specimens/z-index.json +35 -0
  244. package/src/demo/style.ts +15 -0
  245. package/src/demo/tone.ts +4 -0
  246. package/src/demo/useDemoViewTransition.svelte.ts +71 -0
  247. package/src/docs-shell/common/i18n.config.d.ts +2 -0
  248. package/src/docs-shell/common/i18n.config.js +13 -0
  249. package/src/docs-shell/common/svgo.config.d.ts +2 -0
  250. package/src/docs-shell/common/svgo.config.js +11 -0
  251. package/src/docs-shell/components/ArticleHeader.astro +65 -0
  252. package/src/docs-shell/components/ArticleTOC.astro +18 -0
  253. package/src/docs-shell/components/Callout.astro +26 -0
  254. package/src/docs-shell/components/Code.astro +25 -0
  255. package/src/docs-shell/components/CodeCopyButton.astro +25 -0
  256. package/src/docs-shell/components/CodeTabBar.astro +40 -0
  257. package/src/docs-shell/components/CodeTabs.astro +53 -0
  258. package/src/docs-shell/components/CodeView.astro +23 -0
  259. package/src/docs-shell/components/Do.astro +5 -0
  260. package/src/docs-shell/components/DoNot.astro +5 -0
  261. package/src/docs-shell/components/DocArticle.astro +14 -0
  262. package/src/docs-shell/components/DocHeader.svelte +87 -0
  263. package/src/docs-shell/components/DocHeading.astro +28 -0
  264. package/src/docs-shell/components/DocMain.astro +19 -0
  265. package/src/docs-shell/components/DocMenuButton.svelte +95 -0
  266. package/src/docs-shell/components/DocSidebar.svelte +62 -0
  267. package/src/docs-shell/components/DocVersionSelect.svelte +22 -0
  268. package/src/docs-shell/components/DocWrapper.astro +11 -0
  269. package/src/docs-shell/components/DocumentAPIIndex.astro +24 -0
  270. package/src/docs-shell/components/DocumentChoices.astro +24 -0
  271. package/src/docs-shell/components/DocumentCodeExample.astro +20 -0
  272. package/src/docs-shell/components/DocumentCodeExampleView.astro +35 -0
  273. package/src/docs-shell/components/DocumentCodeTable.astro +19 -0
  274. package/src/docs-shell/components/DocumentComparison.astro +7 -0
  275. package/src/docs-shell/components/DocumentCopyButton.svelte +41 -0
  276. package/src/docs-shell/components/DocumentDeclaration.astro +17 -0
  277. package/src/docs-shell/components/DocumentDeclarationView.astro +12 -0
  278. package/src/docs-shell/components/DocumentDisclosure.astro +14 -0
  279. package/src/docs-shell/components/DocumentFileTree.astro +34 -0
  280. package/src/docs-shell/components/DocumentFlow.astro +27 -0
  281. package/src/docs-shell/components/DocumentIdentifier.astro +14 -0
  282. package/src/docs-shell/components/DocumentIllustration.astro +46 -0
  283. package/src/docs-shell/components/DocumentKeyList.astro +22 -0
  284. package/src/docs-shell/components/DocumentNamespaceTable.astro +20 -0
  285. package/src/docs-shell/components/DocumentOptionEntry.astro +15 -0
  286. package/src/docs-shell/components/DocumentOptionList.astro +11 -0
  287. package/src/docs-shell/components/DocumentOptions.astro +23 -0
  288. package/src/docs-shell/components/DocumentParameters.astro +30 -0
  289. package/src/docs-shell/components/DocumentPrompt.astro +16 -0
  290. package/src/docs-shell/components/DocumentValueList.astro +25 -0
  291. package/src/docs-shell/components/DocumentationIndex.svelte +144 -0
  292. package/src/docs-shell/components/Dropped.astro +21 -0
  293. package/src/docs-shell/components/ExpandContent.svelte +21 -0
  294. package/src/docs-shell/components/ExplorerView.astro +37 -0
  295. package/src/docs-shell/components/FileIcon.astro +123 -0
  296. package/src/docs-shell/components/Footer.svelte +80 -0
  297. package/src/docs-shell/components/GeneratedCSS.astro +8 -0
  298. package/src/docs-shell/components/Header.svelte +121 -0
  299. package/src/docs-shell/components/HeaderIcon.astro +14 -0
  300. package/src/docs-shell/components/HeaderNav.svelte +18 -0
  301. package/src/docs-shell/components/Image.svelte +56 -0
  302. package/src/docs-shell/components/Info.astro +5 -0
  303. package/src/docs-shell/components/InlineCode.astro +30 -0
  304. package/src/docs-shell/components/InteractingIndicator.astro +19 -0
  305. package/src/docs-shell/components/LanguageButton.svelte +18 -0
  306. package/src/docs-shell/components/LanguageSelect.svelte +44 -0
  307. package/src/docs-shell/components/Link.svelte +127 -0
  308. package/src/docs-shell/components/ModeImg.astro +11 -0
  309. package/src/docs-shell/components/NotFound.astro +21 -0
  310. package/src/docs-shell/components/OverviewButtons.astro +36 -0
  311. package/src/docs-shell/components/PMAction.astro +25 -0
  312. package/src/docs-shell/components/PackageBadges.astro +39 -0
  313. package/src/docs-shell/components/PageContent.svelte +38 -0
  314. package/src/docs-shell/components/PageContentBootstrap.astro +13 -0
  315. package/src/docs-shell/components/PageContentDisclosure.astro +25 -0
  316. package/src/docs-shell/components/PageContentList.svelte +70 -0
  317. package/src/docs-shell/components/PageContentProvider.svelte +15 -0
  318. package/src/docs-shell/components/PageContentTitle.svelte +16 -0
  319. package/src/docs-shell/components/PageNavs.astro +40 -0
  320. package/src/docs-shell/components/PreparedCodeView.astro +12 -0
  321. package/src/docs-shell/components/RenderNode.astro +16 -0
  322. package/src/docs-shell/components/RouteLayers.astro +17 -0
  323. package/src/docs-shell/components/SearchButton.svelte +31 -0
  324. package/src/docs-shell/components/SearchDialog.svelte +174 -0
  325. package/src/docs-shell/components/Segments.svelte +62 -0
  326. package/src/docs-shell/components/Step.astro +13 -0
  327. package/src/docs-shell/components/StepL.astro +10 -0
  328. package/src/docs-shell/components/StepR.astro +10 -0
  329. package/src/docs-shell/components/StepSection.astro +12 -0
  330. package/src/docs-shell/components/Tab.astro +8 -0
  331. package/src/docs-shell/components/Tabs.astro +10 -0
  332. package/src/docs-shell/components/ThemeIcon.astro +19 -0
  333. package/src/docs-shell/components/ThemeSelect.svelte +20 -0
  334. package/src/docs-shell/components/TimeAgo.svelte +32 -0
  335. package/src/docs-shell/components/Translate.astro +14 -0
  336. package/src/docs-shell/components/Warn.astro +5 -0
  337. package/src/docs-shell/components/code-props.ts +28 -0
  338. package/src/docs-shell/components/document-types.ts +119 -0
  339. package/src/docs-shell/components/markdown/Anchor.astro +5 -0
  340. package/src/docs-shell/components/markdown/Heading2.astro +5 -0
  341. package/src/docs-shell/components/markdown/Heading3.astro +5 -0
  342. package/src/docs-shell/components/markdown/Table.astro +6 -0
  343. package/src/docs-shell/components/markdown-components.ts +36 -0
  344. package/src/docs-shell/components/page-content-bootstrap.ts +115 -0
  345. package/src/docs-shell/components/page-content.svelte.ts +125 -0
  346. package/src/docs-shell/contexts/search.ts +18 -0
  347. package/src/docs-shell/contexts/theme-mode.svelte.ts +61 -0
  348. package/src/docs-shell/data/authors.ts +17 -0
  349. package/src/docs-shell/data/base-colors.ts +29 -0
  350. package/src/docs-shell/data/brands.ts +79 -0
  351. package/src/docs-shell/data/color-names.ts +1 -0
  352. package/src/docs-shell/data/color-palette.ts +50 -0
  353. package/src/docs-shell/data/colors.ts +1 -0
  354. package/src/docs-shell/factories/Page.astro +35 -0
  355. package/src/docs-shell/factories/create-page.ts +31 -0
  356. package/src/docs-shell/layouts/BlogArticle.astro +53 -0
  357. package/src/docs-shell/layouts/Doc.astro +41 -0
  358. package/src/docs-shell/remark/markdown-components.d.ts +2 -0
  359. package/src/docs-shell/remark/markdown-components.js +101 -0
  360. package/src/docs-shell/remark/slug-and-toc.d.ts +2 -0
  361. package/src/docs-shell/remark/slug-and-toc.js +53 -0
  362. package/src/docs-shell/scripts/code-tabs-bootstrap.ts +34 -0
  363. package/src/docs-shell/scripts/code.ts +124 -0
  364. package/src/docs-shell/scripts/document-anchor.ts +57 -0
  365. package/src/docs-shell/scripts/document.ts +47 -0
  366. package/src/docs-shell/site.ts +67 -0
  367. package/src/docs-shell/types/IllustrationImages.ts +2 -0
  368. package/src/docs-shell/types/Metadata.ts +17 -0
  369. package/src/docs-shell/types/Props.ts +9 -0
  370. package/src/docs-shell/types/StaticImage.ts +6 -0
  371. package/src/docs-shell/uses/use-selected-preview-syntax.svelte.ts +16 -0
  372. package/src/docs-shell/utils/anchor.ts +24 -0
  373. package/src/docs-shell/utils/beautify-css.ts +14 -0
  374. package/src/docs-shell/utils/beautify-html.ts +12 -0
  375. package/src/docs-shell/utils/beautify-js.ts +9 -0
  376. package/src/docs-shell/utils/create-highlighter.ts +50 -0
  377. package/src/docs-shell/utils/css-modern-grammar.ts +339 -0
  378. package/src/docs-shell/utils/documentation-search.ts +68 -0
  379. package/src/docs-shell/utils/generate-metadata.ts +60 -0
  380. package/src/docs-shell/utils/group-page-content.ts +10 -0
  381. package/src/docs-shell/utils/head.ts +72 -0
  382. package/src/docs-shell/utils/highlight-code-core.ts +146 -0
  383. package/src/docs-shell/utils/highlight-code.ts +1 -0
  384. package/src/docs-shell/utils/highlighted-code-text.ts +27 -0
  385. package/src/docs-shell/utils/i18n-pathname.ts +98 -0
  386. package/src/docs-shell/utils/i18n.ts +12 -0
  387. package/src/docs-shell/utils/is-date-within-seven-days.ts +16 -0
  388. package/src/docs-shell/utils/isBrowser.ts +1 -0
  389. package/src/docs-shell/utils/isInteractOutside.ts +16 -0
  390. package/src/docs-shell/utils/markdown-tree.ts +22 -0
  391. package/src/docs-shell/utils/metadata.ts +25 -0
  392. package/src/docs-shell/utils/prepared-code.ts +21 -0
  393. package/src/docs-shell/utils/resolve-heading.d.ts +1 -0
  394. package/src/docs-shell/utils/resolve-heading.js +19 -0
  395. package/src/docs-shell/utils/search-pages.ts +271 -0
  396. package/src/docs-shell/utils/slot-text.ts +15 -0
  397. package/src/docs-shell/utils/snackbar.ts +39 -0
  398. package/src/docs-shell/utils/syntax-theme.ts +53 -0
  399. package/src/docs-shell/utils/transformer-notation-word-mark.ts +146 -0
  400. package/src/docs-shell/utils/unique-id.ts +11 -0
  401. package/src/examples/article-transitions/page.astro +7 -0
  402. package/src/examples/article-transitions/transitions.css +10 -0
  403. package/src/examples/components/ArticleTransitionScene.svelte +83 -0
  404. package/src/examples/components/ViewTransitionScene.svelte +31 -0
  405. package/src/examples/images/article-aurora.jpg +0 -0
  406. package/src/examples/images/article-coast.jpg +0 -0
  407. package/src/examples/images/article-grid.jpg +0 -0
  408. package/src/examples/images/article-studio.jpg +0 -0
  409. package/src/examples/layout-system/page.astro +59 -0
  410. package/src/examples/scene.css +3 -0
  411. package/src/examples/view-transitions/page.astro +7 -0
  412. package/src/examples/view-transitions/transitions.css +9 -0
  413. package/src/home/HeroCanvas.svelte +617 -0
  414. package/src/home/HomeAction.astro +17 -0
  415. package/src/home/HomeBentoFrame.astro +9 -0
  416. package/src/home/HomeBentoGrid.astro +9 -0
  417. package/src/home/HomeCompactIcon.astro +15 -0
  418. package/src/home/HomeFooter.svelte +63 -0
  419. package/src/home/HomeIllustration.astro +17 -0
  420. package/src/home/HomeIllustrationArt.svelte +15 -0
  421. package/src/home/HomeLamp.svelte +18 -0
  422. package/src/home/design.css +532 -0
  423. package/src/home/footer.css +225 -0
  424. package/src/home/hero-shaders.ts +460 -0
  425. package/src/home/hero-title-mask.ts +175 -0
  426. package/src/home/hero.css +547 -0
  427. package/src/home/home-illustration.ts +5 -0
  428. package/src/home/home-lamp.ts +225 -0
  429. package/src/home/home.css +1077 -0
  430. package/src/home/icons/agent-check-preview-apply.svg +24 -0
  431. package/src/home/icons/agent-clients.svg +26 -0
  432. package/src/home/icons/agent-project-tools.svg +23 -0
  433. package/src/home/icons/artwork/agent-check-preview-apply-dark.webp +0 -0
  434. package/src/home/icons/artwork/agent-check-preview-apply-light.webp +0 -0
  435. package/src/home/icons/artwork/agent-clients-dark.webp +0 -0
  436. package/src/home/icons/artwork/agent-clients-light.webp +0 -0
  437. package/src/home/icons/artwork/agent-edit-file-dark.webp +0 -0
  438. package/src/home/icons/artwork/agent-edit-file-light.webp +0 -0
  439. package/src/home/icons/artwork/agent-project-tools-dark.webp +0 -0
  440. package/src/home/icons/artwork/agent-project-tools-light.webp +0 -0
  441. package/src/home/icons/artwork/design-cascade-layers-dark.webp +0 -0
  442. package/src/home/icons/artwork/design-cascade-layers-light.webp +0 -0
  443. package/src/home/icons/artwork/design-layout-motion-dark.webp +0 -0
  444. package/src/home/icons/artwork/design-layout-motion-light.webp +0 -0
  445. package/src/home/icons/artwork/design-p3-gamut-dark.webp +0 -0
  446. package/src/home/icons/artwork/design-p3-gamut-light.webp +0 -0
  447. package/src/home/icons/artwork/design-theme-modes-dark.webp +0 -0
  448. package/src/home/icons/artwork/design-theme-modes-light.webp +0 -0
  449. package/src/home/icons/artwork/design-theme-tokens-dark.webp +0 -0
  450. package/src/home/icons/artwork/design-theme-tokens-light.webp +0 -0
  451. package/src/home/icons/artwork/editor-color-tools-dark.webp +0 -0
  452. package/src/home/icons/artwork/editor-color-tools-light.webp +0 -0
  453. package/src/home/icons/artwork/editor-focused-highlighting-dark.webp +0 -0
  454. package/src/home/icons/artwork/editor-focused-highlighting-light.webp +0 -0
  455. package/src/home/icons/artwork/editor-hover-inspection-dark.webp +0 -0
  456. package/src/home/icons/artwork/editor-hover-inspection-light.webp +0 -0
  457. package/src/home/icons/artwork/editor-manifest-completions-dark.webp +0 -0
  458. package/src/home/icons/artwork/editor-manifest-completions-light.webp +0 -0
  459. package/src/home/icons/artwork/lint-class-order-dark.webp +0 -0
  460. package/src/home/icons/artwork/lint-class-order-light.webp +0 -0
  461. package/src/home/icons/artwork/lint-conflicting-classes-dark.webp +0 -0
  462. package/src/home/icons/artwork/lint-conflicting-classes-light.webp +0 -0
  463. package/src/home/icons/artwork/lint-fix-previews-dark.webp +0 -0
  464. package/src/home/icons/artwork/lint-fix-previews-light.webp +0 -0
  465. package/src/home/icons/artwork/lint-invalid-classes-dark.webp +0 -0
  466. package/src/home/icons/artwork/lint-invalid-classes-light.webp +0 -0
  467. package/src/home/icons/artwork/lint-strict-vocabulary-dark.webp +0 -0
  468. package/src/home/icons/artwork/lint-strict-vocabulary-light.webp +0 -0
  469. package/src/home/icons/artwork/lint-theme-tokens-dark.webp +0 -0
  470. package/src/home/icons/artwork/lint-theme-tokens-light.webp +0 -0
  471. package/src/home/icons/artwork/mcp-apply-preview-dark.webp +0 -0
  472. package/src/home/icons/artwork/mcp-apply-preview-light.webp +0 -0
  473. package/src/home/icons/artwork/mcp-css-compare-dark.webp +0 -0
  474. package/src/home/icons/artwork/mcp-css-compare-light.webp +0 -0
  475. package/src/home/icons/artwork/mcp-inspect-class-dark.webp +0 -0
  476. package/src/home/icons/artwork/mcp-inspect-class-light.webp +0 -0
  477. package/src/home/icons/artwork/mcp-lint-project-dark.webp +0 -0
  478. package/src/home/icons/artwork/mcp-lint-project-light.webp +0 -0
  479. package/src/home/icons/artwork/mcp-manifest-query-dark.webp +0 -0
  480. package/src/home/icons/artwork/mcp-manifest-query-light.webp +0 -0
  481. package/src/home/icons/artwork/mcp-preview-fixes-dark.webp +0 -0
  482. package/src/home/icons/artwork/mcp-preview-fixes-light.webp +0 -0
  483. package/src/home/icons/artwork/mcp-render-css-dark.webp +0 -0
  484. package/src/home/icons/artwork/mcp-render-css-light.webp +0 -0
  485. package/src/home/icons/artwork/mcp-scan-project-dark.webp +0 -0
  486. package/src/home/icons/artwork/mcp-scan-project-light.webp +0 -0
  487. package/src/home/icons/artwork/mcp-trace-class-dark.webp +0 -0
  488. package/src/home/icons/artwork/mcp-trace-class-light.webp +0 -0
  489. package/src/home/icons/artwork/render-progressive-dark.webp +0 -0
  490. package/src/home/icons/artwork/render-progressive-light.webp +0 -0
  491. package/src/home/icons/artwork/render-runtime-dark.webp +0 -0
  492. package/src/home/icons/artwork/render-runtime-light.webp +0 -0
  493. package/src/home/icons/artwork/render-static-dark.webp +0 -0
  494. package/src/home/icons/artwork/render-static-light.webp +0 -0
  495. package/src/home/icons/artwork/section-ai-agents-dark.webp +0 -0
  496. package/src/home/icons/artwork/section-ai-agents-light.webp +0 -0
  497. package/src/home/icons/artwork/section-css-size-dark.webp +0 -0
  498. package/src/home/icons/artwork/section-css-size-light.webp +0 -0
  499. package/src/home/icons/artwork/section-design-system-dark.webp +0 -0
  500. package/src/home/icons/artwork/section-design-system-light.webp +0 -0
  501. package/src/home/icons/artwork/section-editor-dark.webp +0 -0
  502. package/src/home/icons/artwork/section-editor-light.webp +0 -0
  503. package/src/home/icons/artwork/section-lint-dark.webp +0 -0
  504. package/src/home/icons/artwork/section-lint-light.webp +0 -0
  505. package/src/home/icons/artwork/section-rendering-dark.webp +0 -0
  506. package/src/home/icons/artwork/section-rendering-light.webp +0 -0
  507. package/src/home/icons/artwork/section-workflow-dark.webp +0 -0
  508. package/src/home/icons/artwork/section-workflow-light.webp +0 -0
  509. package/src/home/icons/artwork/source.json +303 -0
  510. package/src/home/icons/artwork/workflow-integrations-dark.webp +0 -0
  511. package/src/home/icons/artwork/workflow-integrations-light.webp +0 -0
  512. package/src/home/icons/artwork/workflow-monorepo-dark.webp +0 -0
  513. package/src/home/icons/artwork/workflow-monorepo-light.webp +0 -0
  514. package/src/home/icons/artwork/workflow-route-styles-dark.webp +0 -0
  515. package/src/home/icons/artwork/workflow-route-styles-light.webp +0 -0
  516. package/src/home/icons/artwork/workflow-trace-change-dark.webp +0 -0
  517. package/src/home/icons/artwork/workflow-trace-change-light.webp +0 -0
  518. package/src/home/icons/artwork.css +4 -0
  519. package/src/home/icons/artwork.ts +131 -0
  520. package/src/home/icons/catalog.ts +381 -0
  521. package/src/home/icons/design-cascade-layers.svg +32 -0
  522. package/src/home/icons/design-layout-motion.svg +16 -0
  523. package/src/home/icons/design-p3-gamut.svg +12 -0
  524. package/src/home/icons/design-theme-modes.svg +12 -0
  525. package/src/home/icons/design-theme-tokens.svg +20 -0
  526. package/src/home/icons/editor-color-tools.svg +18 -0
  527. package/src/home/icons/editor-focused-highlighting.svg +15 -0
  528. package/src/home/icons/editor-hover-inspection.svg +19 -0
  529. package/src/home/icons/editor-manifest-completions.svg +24 -0
  530. package/src/home/icons/lint-class-order-compact.svg +15 -0
  531. package/src/home/icons/lint-class-order.svg +28 -0
  532. package/src/home/icons/lint-conflicting-classes-compact.svg +11 -0
  533. package/src/home/icons/lint-conflicting-classes.svg +24 -0
  534. package/src/home/icons/lint-fix-previews-compact.svg +9 -0
  535. package/src/home/icons/lint-fix-previews.svg +19 -0
  536. package/src/home/icons/lint-invalid-classes-compact.svg +7 -0
  537. package/src/home/icons/lint-invalid-classes.svg +17 -0
  538. package/src/home/icons/lint-strict-vocabulary-compact.svg +8 -0
  539. package/src/home/icons/lint-strict-vocabulary.svg +16 -0
  540. package/src/home/icons/lint-theme-tokens-compact.svg +7 -0
  541. package/src/home/icons/lint-theme-tokens.svg +14 -0
  542. package/src/home/icons/mcp-apply-preview-compact.svg +9 -0
  543. package/src/home/icons/mcp-apply-preview.svg +18 -0
  544. package/src/home/icons/mcp-css-compare-compact.svg +9 -0
  545. package/src/home/icons/mcp-css-compare.svg +20 -0
  546. package/src/home/icons/mcp-inspect-class-compact.svg +9 -0
  547. package/src/home/icons/mcp-inspect-class.svg +18 -0
  548. package/src/home/icons/mcp-lint-project-compact.svg +14 -0
  549. package/src/home/icons/mcp-lint-project.svg +30 -0
  550. package/src/home/icons/mcp-manifest-query-compact.svg +14 -0
  551. package/src/home/icons/mcp-manifest-query.svg +27 -0
  552. package/src/home/icons/mcp-preview-fixes-compact.svg +9 -0
  553. package/src/home/icons/mcp-preview-fixes.svg +15 -0
  554. package/src/home/icons/mcp-render-css-compact.svg +13 -0
  555. package/src/home/icons/mcp-render-css.svg +30 -0
  556. package/src/home/icons/mcp-scan-project-compact.svg +7 -0
  557. package/src/home/icons/mcp-scan-project.svg +13 -0
  558. package/src/home/icons/mcp-trace-class-compact.svg +11 -0
  559. package/src/home/icons/mcp-trace-class.svg +24 -0
  560. package/src/home/icons/render-progressive.svg +17 -0
  561. package/src/home/icons/render-runtime.svg +23 -0
  562. package/src/home/icons/render-static.svg +29 -0
  563. package/src/home/icons/section-ai-agents.svg +24 -0
  564. package/src/home/icons/section-css-size.svg +13 -0
  565. package/src/home/icons/section-design-system.svg +24 -0
  566. package/src/home/icons/section-editor.svg +14 -0
  567. package/src/home/icons/section-lint.svg +14 -0
  568. package/src/home/icons/section-rendering.svg +30 -0
  569. package/src/home/icons/section-workflow.svg +22 -0
  570. package/src/home/icons/workflow-integrations.svg +15 -0
  571. package/src/home/icons/workflow-monorepo.svg +27 -0
  572. package/src/home/icons/workflow-route-styles.svg +24 -0
  573. package/src/home/icons/workflow-trace-change.svg +21 -0
  574. package/src/layouts/Document.astro +71 -0
  575. package/src/public/brand/v2/logo/mark/master-mark-small-on-dark.svg +1 -0
  576. package/src/public/brand/v2/logo/master-css/master-css-horizontal-on-dark.svg +1 -0
  577. package/src/public/brand/v2/logo/master-css/master-css-horizontal-on-light.svg +1 -0
  578. package/src/public/demo/border-grid.svg +7 -0
  579. package/src/public/demo/landscape.svg +1 -0
  580. package/src/public/demo/marker.svg +1 -0
  581. package/src/public/demo/mask.svg +1 -0
  582. package/src/public/fonts/Geist-Medium.ttf +0 -0
  583. package/src/public/fonts/Geist-Regular.ttf +0 -0
  584. package/src/public/fonts/GeistVariable.woff2 +0 -0
  585. package/src/public/fonts/IBMPlexMono-Bold.woff2 +0 -0
  586. package/src/public/fonts/IBMPlexMono-Medium.woff2 +0 -0
  587. package/src/public/fonts/IBMPlexMono-Regular.woff2 +0 -0
  588. package/src/public/fonts/IBMPlexMono-SemiBold.woff2 +0 -0
  589. package/src/public/fonts/index.css +40 -0
  590. package/src/public/icons/csharp.svg +1 -0
  591. package/src/public/icons/css.svg +1 -0
  592. package/src/public/icons/eslint.svg +1 -0
  593. package/src/public/icons/folder.svg +12 -0
  594. package/src/public/icons/html.svg +1 -0
  595. package/src/public/icons/php.svg +1 -0
  596. package/src/public/icons/sass.svg +1 -0
  597. package/src/public/icons/storybook.svg +1 -0
  598. package/src/public/icons/visualstudiocode.svg +41 -0
  599. package/src/public/images/authors/aron.jpg +0 -0
  600. package/src/public/images/authors/benseage.jpg +0 -0
  601. package/src/public/images/authors/joy.jpg +0 -0
  602. package/src/public/images/authors/lola.jpg +0 -0
  603. package/src/public/images/authors/miles.jpg +0 -0
  604. package/src/public/images/bootstrap.svg +23 -0
  605. package/src/public/images/build-tools/rsbuild.svg +1 -0
  606. package/src/public/images/build-tools/rspack.svg +1 -0
  607. package/src/public/images/build-tools/vite.svg +15 -0
  608. package/src/public/images/build-tools/webpack.svg +10 -0
  609. package/src/public/images/cdns/esm-sh.svg +1 -0
  610. package/src/public/images/chevron-left.svg +4 -0
  611. package/src/public/images/cover-bg.jpg +0 -0
  612. package/src/public/images/emotion.svg +1 -0
  613. package/src/public/images/frameworks/angular.svg +29 -0
  614. package/src/public/images/frameworks/astro.svg +4 -0
  615. package/src/public/images/frameworks/blazor.svg +22 -0
  616. package/src/public/images/frameworks/express.svg +1 -0
  617. package/src/public/images/frameworks/laravel.svg +8 -0
  618. package/src/public/images/frameworks/line-liff.svg +1 -0
  619. package/src/public/images/frameworks/lit.svg +1 -0
  620. package/src/public/images/frameworks/nextjs.svg +16 -0
  621. package/src/public/images/frameworks/nuxtjs.svg +3 -0
  622. package/src/public/images/frameworks/rails.svg +1 -0
  623. package/src/public/images/frameworks/react.svg +8 -0
  624. package/src/public/images/frameworks/remix.svg +5 -0
  625. package/src/public/images/frameworks/shopify.svg +1 -0
  626. package/src/public/images/frameworks/svelte.svg +6 -0
  627. package/src/public/images/frameworks/tanstack.svg +1 -0
  628. package/src/public/images/frameworks/vuejs.svg +11 -0
  629. package/src/public/images/frameworks/wordpress.svg +1 -0
  630. package/src/public/images/mui.svg +1 -0
  631. package/src/public/images/styled-components.svg +4 -0
  632. package/src/public/images/tailwindcss.svg +1 -0
  633. package/src/scripts/bundler-imports.ts +25 -0
  634. package/src/scripts/static-social.ts +333 -0
  635. package/src/scripts/write-if-changed.ts +26 -0
  636. package/src/sections/blog.astro +11 -0
  637. package/src/sections/design-system.astro +14 -0
  638. package/src/sections/document.astro +8 -0
  639. package/src/sections/examples.astro +6 -0
  640. package/src/sections/guide.astro +26 -0
  641. package/src/sections/home.astro +7 -0
  642. package/src/sections/page.astro +12 -0
  643. package/src/styles/base.css +57 -0
  644. package/src/styles/benchmarks.css +20 -0
  645. package/src/styles/blog-article.css +670 -0
  646. package/src/styles/blog-materials.css +399 -0
  647. package/src/styles/blog.css +568 -0
  648. package/src/styles/demo.css +30 -0
  649. package/src/styles/design-system.css +15 -0
  650. package/src/styles/docs-shell/code.css +61 -0
  651. package/src/styles/docs-shell/docs.css +79 -0
  652. package/src/styles/docs-shell/documentation-search.css +42 -0
  653. package/src/styles/docs-shell/footer.css +38 -0
  654. package/src/styles/docs-shell/header.css +69 -0
  655. package/src/styles/docs-shell/materials.css +25 -0
  656. package/src/styles/docs-shell/menu.css +19 -0
  657. package/src/styles/docs-shell/not-found.css +10 -0
  658. package/src/styles/docs-shell/page-content.css +37 -0
  659. package/src/styles/docs-shell/prose.css +89 -0
  660. package/src/styles/docs-shell/segments.css +13 -0
  661. package/src/styles/docs-shell/steps.css +39 -0
  662. package/src/styles/docs-shell/syntax-theme.css +18 -0
  663. package/src/styles/docs-shell/theme.css +68 -0
  664. package/src/styles/docs-shell/wrapper.css +10 -0
  665. package/src/styles/document-comparison.css +7 -0
  666. package/src/styles/documentation-illustration.css +34 -0
  667. package/src/styles/documentation-index.css +100 -0
  668. package/src/styles/documents.css +4 -0
  669. package/src/styles/documents.ts +2 -0
  670. package/src/styles/foundation.css +4 -0
  671. package/src/styles/globals.css +2 -0
  672. package/src/styles/interface.css +3 -0
  673. package/src/styles/interface.ts +2 -0
  674. package/src/styles/site.ts +2 -0
  675. package/src/styles/system/DESIGN.md +108 -0
  676. package/src/styles/system/buttons.css +51 -0
  677. package/src/styles/system/code.css +85 -0
  678. package/src/styles/system/controls.css +110 -0
  679. package/src/styles/system/data.css +134 -0
  680. package/src/styles/system/mixins.css +7 -0
  681. package/src/styles/system/prose.css +75 -0
  682. package/src/styles/system/shell.css +102 -0
  683. package/src/styles/system/specimens.css +98 -0
  684. package/src/styles/system/surfaces.css +104 -0
  685. package/src/styles/system/tokens.css +136 -0
  686. package/src/utils/cloudflare-image-loader.js +85 -0
  687. package/src/virtual.d.ts +36 -0
@@ -0,0 +1,50 @@
1
+ ---
2
+ import '@master/internal-site/styles/system/data.css'
3
+ import { siteOf } from '@master/internal-site/astro/site-context'
4
+ import { uniqueId } from '@master/internal-site/utils/unique-id'
5
+ import InlineCode from '@master/internal-site/components/InlineCode.astro'
6
+ import RenderNode from '@master/internal-site/components/RenderNode.astro'
7
+ import { filterNamespaceKeys } from '@master/internal-site/css/manifest-utilities.ts'
8
+ import type { NamespaceUtilityGroup } from '@master/internal-site/components/document-types.ts'
9
+
10
+ export type { NamespaceUtilityGroup } from '@master/internal-site/components/document-types.ts'
11
+
12
+ interface Props {
13
+ groups: NamespaceUtilityGroup[]
14
+ }
15
+
16
+ const { t } = siteOf(Astro)
17
+ const captionId = uniqueId(Astro, 'namespace-utility-table')
18
+ const groups = Astro.props.groups
19
+ .map((group) => ({
20
+ ...group,
21
+ keys: filterNamespaceKeys(group)
22
+ }))
23
+ .filter((group) => group.keys.length)
24
+ const hasDescriptions = groups.some((group) => group.description)
25
+ ---
26
+
27
+ {/* The table's narrow overflow region must be focusable for native keyboard scrolling. */}
28
+ <div class="ui-table" role="region" aria-labelledby={captionId} tabindex="0">
29
+ <table>
30
+ <caption id={captionId} class="sr-only">{t('Utility groups table')}</caption>
31
+ <thead>
32
+ <tr>
33
+ <th scope="col">{t('Group')}</th>
34
+ <th scope="col">{t('Utility keys')}</th>
35
+ {hasDescriptions && <th scope="col">{t('Description')}</th>}
36
+ </tr>
37
+ </thead>
38
+ <tbody>
39
+ {
40
+ groups.map((group) => (
41
+ <tr>
42
+ <th scope="row">{t(group.label)}</th>
43
+ <td>{group.keys.map((key, index) => <span><InlineCode code={key} />{index !== group.keys.length - 1 && ', '}</span>)}</td>
44
+ {hasDescriptions && <td>{typeof group.description === 'string' ? t(group.description) : <RenderNode node={group.description} />}</td>}
45
+ </tr>
46
+ ))
47
+ }
48
+ </tbody>
49
+ </table>
50
+ </div>
@@ -0,0 +1,15 @@
1
+ ---
2
+ import DocumentCodeExample from '@master/internal-site/components/DocumentCodeExample.astro'
3
+ import { stylesheetExampleCSS } from '@master/internal-site/css/stylesheet-example.ts'
4
+
5
+ interface Props {
6
+ title: string
7
+ source: string
8
+ }
9
+
10
+ /** Server-only: source and its complete compiled CSS, without a simulated preview. */
11
+ const { title, source } = Astro.props
12
+ const css = await stylesheetExampleCSS(source)
13
+ ---
14
+
15
+ <DocumentCodeExample title={title} language="css" source={source} result={css} resultKind="generated-css" />
@@ -0,0 +1,57 @@
1
+ ---
2
+ import '@master/internal-site/styles/system/data.css'
3
+ import { siteOf } from '@master/internal-site/astro/site-context'
4
+ import { uniqueId } from '@master/internal-site/utils/unique-id'
5
+ import InlineCode from '@master/internal-site/components/InlineCode.astro'
6
+ import { getThemeNumericVariableEntries } from '@master/internal-site/css/theme-variables.ts'
7
+
8
+ interface Props {
9
+ namespace: string
10
+ keys?: string[]
11
+ variablePrefix?: string
12
+ descriptions?: Record<string, string>
13
+ representation?: 'spacing'
14
+ referenceUnits?: boolean
15
+ }
16
+
17
+ const formatRem = (value: number) => `${Number(value.toFixed(4))}rem`
18
+ const formatPx = (value: number) => `${Number(value.toFixed(4))}px`
19
+
20
+ const { t } = siteOf(Astro)
21
+ const captionId = uniqueId(Astro, 'theme-number-variable-table')
22
+ const { namespace, variablePrefix = namespace, descriptions, representation, referenceUnits = true } = Astro.props
23
+ const entries = getThemeNumericVariableEntries(namespace).filter(entry => !Astro.props.keys || Astro.props.keys.includes(entry.key))
24
+ const hasDescriptions = descriptions && entries.some(({ key }) => descriptions[key])
25
+ const hasSpacingRepresentation = representation === 'spacing'
26
+ const referenceUnit = entries.every(({ unit }) => unit === 'rem') ? 'px' : 'rem'
27
+ ---
28
+
29
+ {/* Numeric tables scroll within the document column and need native keyboard access. */}
30
+ <div class="ui-table" role="region" aria-labelledby={captionId} tabindex="0">
31
+ <table>
32
+ <caption id={captionId} class="sr-only">{t(namespace === 'breakpoint' ? 'Viewport breakpoints' : 'Numeric theme variables')}</caption>
33
+ <thead>
34
+ <tr>
35
+ <th scope="col">{t(namespace === 'breakpoint' ? 'Query' : 'Token')}</th>
36
+ <th scope="col">{t(namespace === 'breakpoint' ? 'Minimum width' : 'Value')}</th>
37
+ {referenceUnits && <th scope="col" data-align="end">{referenceUnit}</th>}
38
+ {hasSpacingRepresentation && <th scope="col">{t('Representation')}</th>}
39
+ {hasDescriptions && <th scope="col" class="(min-width:12rem)">{t('Description')}</th>}
40
+ </tr>
41
+ </thead>
42
+ <tbody>
43
+ {
44
+ entries.map((entry) => (
45
+ <tr>
46
+ <th scope="row"><InlineCode code={namespace === 'breakpoint' ? `@${entry.key}` : `--${variablePrefix}-${entry.key}`} /></th>
47
+ <td><InlineCode code={entry.value} /></td>
48
+ {referenceUnits && <td data-align="end">{referenceUnit === 'px' ? formatPx(entry.px) : formatRem(entry.rem)}</td>}
49
+ {/* The hatched width is the measured space itself. */}
50
+ {hasSpacingRepresentation && <td><span aria-hidden="true" class="ui-preview" style={{ width: entry.value, background: 'var(--ui-hatch)' }} /></td>}
51
+ {hasDescriptions && <td>{t(descriptions?.[entry.key])}</td>}
52
+ </tr>
53
+ ))
54
+ }
55
+ </tbody>
56
+ </table>
57
+ </div>
@@ -0,0 +1,53 @@
1
+ import { compileManifestSync } from '@master/css-compiler/node'
2
+ import { createRenderSessionSync } from '@master/css/node'
3
+ import { cssSyntaxStatus, validateRuleDeclarations } from '@master/css-tooling/validator'
4
+ import preset from '@master/internal-site/css/preset-manifest.ts'
5
+
6
+ /** Only site-authored literal HTML is accepted by the configured preview components. */
7
+ export function configuredMarkupClasses(html: string) {
8
+ return [...new Set([...html.matchAll(/\bclass="([^"]*)"/g)].flatMap(match => match[1].split(/\s+/)).filter(Boolean))]
9
+ }
10
+
11
+ export function configuredMarkupMarkdown(source: string, html: string, css = configuredExampleCSS(source, configuredMarkupClasses(html))) {
12
+ return `${source.trim() ? `\`\`\`css\n${source}\n\`\`\`\n\n` : ''}\`\`\`html\n${html}\n\`\`\`\n\n\`\`\`css disclosure=generated-css\n${css}\n\`\`\``
13
+ }
14
+
15
+ export function configuredExampleHTML(classes: string[], element: 'div' | 'button' = 'div', label = 'Example') {
16
+ return `<${element}${element === 'button' ? ' type="button"' : ''} class="${classes.join(' ')}">${label}</${element}>`
17
+ }
18
+
19
+ // Pages and generated content repeat the same configurations; each compile costs tens of milliseconds.
20
+ const configurations = new Map<string, ReturnType<typeof compileManifestSync>>()
21
+ const examples = new Map<string, string>()
22
+
23
+ function compileConfiguration(source: string) {
24
+ let result = configurations.get(source)
25
+ if (result) return result
26
+ result = compileManifestSync(source, { baseManifest: preset })
27
+ const errors = result.diagnostics.filter(diagnostic => diagnostic.severity === 'error')
28
+ if (errors.length) throw new Error(`Invalid documentation configuration: ${JSON.stringify(errors)}`)
29
+ configurations.set(source, result)
30
+ return result
31
+ }
32
+
33
+ /** Compile the complete configuration before validating any class that depends on it. */
34
+ export function configuredExampleCSS(source: string, classes: string[]) {
35
+ const key = JSON.stringify([source, classes])
36
+ const cached = examples.get(key)
37
+ if (cached !== undefined) return cached
38
+ const result = compileConfiguration(source)
39
+ const engine = createRenderSessionSync({ manifest: result.manifest })
40
+ try {
41
+ engine.ensureStylesheetResources(result.css)
42
+ const snapshot = engine.ensureClassRules(classes)
43
+ for (const className of classes) {
44
+ if (!result.nativeClassNames.includes(className) && (snapshot.invalidClassNames.includes(className) || snapshot.classRules[className].some(rule => cssSyntaxStatus(rule.text) === 'invalid' || validateRuleDeclarations(rule.text).some(declaration => declaration.status === 'invalid')))) {
45
+ throw new Error(`Invalid configured documentation class: ${className}`)
46
+ }
47
+ }
48
+ // Resource registration retains dependencies; the compiler owns the native rules.
49
+ const css = [result.css, snapshot.cssText].filter(Boolean).join('\n\n')
50
+ examples.set(key, css)
51
+ return css
52
+ } finally { engine.dispose() }
53
+ }
@@ -0,0 +1,52 @@
1
+ import { getThemeVariables } from '@master/internal-site/css/theme-variables.ts'
2
+
3
+ const shadowRoles: Record<string, { utility: string, role: string, description: string }> = {
4
+ xs: {
5
+ utility: 'shadow-xs',
6
+ role: 'Quiet separation',
7
+ description: 'Small controls, table rows, and subtle raised states.'
8
+ },
9
+ sm: {
10
+ utility: 'shadow-sm',
11
+ role: 'Standard surface',
12
+ description: 'Cards, reusable panels, and quiet product surfaces.'
13
+ },
14
+ md: {
15
+ utility: 'shadow-md',
16
+ role: 'Temporary lift',
17
+ description: 'Hover lift, floating toolbars, and command surfaces.'
18
+ },
19
+ lg: {
20
+ utility: 'shadow-lg',
21
+ role: 'Detached overlay',
22
+ description: 'Dropdowns, popovers, toasts, and menus.'
23
+ },
24
+ xl: {
25
+ utility: 'shadow-xl',
26
+ role: 'Workflow interruption',
27
+ description: 'Drawers, dialogs, and focused panels.'
28
+ },
29
+ '2xl': {
30
+ utility: 'shadow-2xl',
31
+ role: 'Blocking layer',
32
+ description: 'Modals and spotlight surfaces above a dimmed page.'
33
+ },
34
+ inset: {
35
+ utility: 'shadow-inset',
36
+ role: 'Sunken well',
37
+ description: 'Inputs, tracks, pressed states, and recessed wells.'
38
+ }
39
+ }
40
+
41
+ export function getShadowRows() {
42
+ return getThemeVariables('shadow').flatMap(({ key }) => {
43
+ const role = shadowRoles[key]
44
+ if (!role) return []
45
+
46
+ return [{
47
+ key,
48
+ token: `--shadow-${key}`,
49
+ ...role
50
+ }]
51
+ })
52
+ }
@@ -0,0 +1,37 @@
1
+ export const sizingRoles = [
2
+ {
3
+ utility: 'w-<token>, width:<value>',
4
+ role: 'Physical width',
5
+ description: 'Set the width of wrappers, columns, panels, media, and proportional regions.'
6
+ },
7
+ {
8
+ utility: 'h-<token>, height:<value>',
9
+ role: 'Physical height',
10
+ description: 'Set the height of fixed regions, viewport sections, media slots, and controls.'
11
+ },
12
+ {
13
+ utility: '(width:*), (height:*)',
14
+ role: 'Equal axes',
15
+ description: 'Set both dimensions explicitly when the element is square by design.'
16
+ },
17
+ {
18
+ utility: 'min-w-<token>, min-h-<token>',
19
+ role: 'Lower bound',
20
+ description: 'Prevent collapse, allow flex children to shrink, or set a minimum usable region.'
21
+ },
22
+ {
23
+ utility: 'max-w-<token>, max-h-<token>',
24
+ role: 'Upper bound',
25
+ description: 'Cap growth for page wrappers, readable measures, panels, menus, and media.'
26
+ },
27
+ {
28
+ utility: '(flex-basis:*)',
29
+ role: 'Flex starting size',
30
+ description: 'Give flex items a shared starting main-axis size before free space is distributed.'
31
+ },
32
+ {
33
+ utility: '@sm, @container(...)',
34
+ role: 'Sizing boundary',
35
+ description: 'Change sizing at the viewport or component container that owns the decision.'
36
+ }
37
+ ]
@@ -0,0 +1,10 @@
1
+ import { foundationScene, specimenTokens, tokenAdvice } from '@master/internal-site/css/foundation-data/specimens.ts'
2
+ import { configuredMarkupMarkdown } from '@master/internal-site/css/configured-example.ts'
3
+
4
+ export function specimenFactsMarkdown(namespace: string, keys?: string[]) {
5
+ return specimenTokens(namespace, keys).map(token => `- \`--${token.name}\`: ${token.values.map(value => `\`${value.value}\` (${value.path.join(' → ')})`).join('; ')}${tokenAdvice(namespace, token.key) ? ` — ${tokenAdvice(namespace, token.key)}` : ''}`).join('\n')
6
+ }
7
+ export function selectedSpecimensMarkdown(namespace: string, keys: string[]) {
8
+ const scene = foundationScene(namespace, keys)
9
+ return `${scene.caption}\n\n${specimenFactsMarkdown(namespace, keys)}${scene.html && namespace !== 'color' ? `\n\n${configuredMarkupMarkdown(scene.css ?? '', scene.html)}` : ''}`
10
+ }
@@ -0,0 +1,96 @@
1
+ import { namespaceTokens, selectFoundationTokens } from '@master/internal-site/css/foundation-data/tokens.ts'
2
+ import { getShadowRows } from '@master/internal-site/css/foundation-data/elevation/shadow-data.ts'
3
+ import { escape } from '@master/internal-site/demo/reference/html.ts'
4
+ import type { DemoScene } from '@master/internal-site/demo/reference/types.ts'
5
+
6
+ export type FoundationToken = ReturnType<typeof namespaceTokens>[number]
7
+ export function specimenTokens(namespace: string, keys?: string[]) {
8
+ return keys ? selectFoundationTokens(namespace, keys) : namespaceTokens(namespace)
9
+ }
10
+ export const defaultValue = (token: FoundationToken) => token.values.find(value => value.path.length === 1 && value.path[0] === ':root,:host')?.value ?? token.values[0]?.value ?? ''
11
+ export const primaryTokens = (tokens: FoundationToken[]) => tokens.filter(token => !token.key.includes('--'))
12
+ export function tokenClass(namespace: string, key: string) {
13
+ const prefixes: Record<string, string> = { color: 'bg', 'color-surface': 'bg-surface', 'color-line': 'b-line', 'color-text': 'fg-text', radius: 'r', spacing: 'gap', container: 'max-w', 'font-family': 'font', 'font-size': 'font', 'font-weight': 'font', duration: 'animation', easing: 'animation' }
14
+ return `${prefixes[namespace] ?? namespace}-${key}`
15
+ }
16
+ const descriptions: Record<string, Record<string, string>> = {
17
+ 'color-surface': { base: 'Root page or app background.', inset: 'Recessed regions and inset sections.', raised: 'Raised cards, controls, and stacked surfaces.', floating: 'Floating dialogs, popovers, and menus.', inverse: 'High-contrast inverse surfaces.' },
18
+ 'color-line': { divider: 'Decorative dividers; not required control boundaries.', control: 'Required control boundaries on opaque preset surfaces.', subtle: 'Low-contrast hairlines and soft outlines.' },
19
+ 'color-text': { body: 'Default readable foreground text.', strong: 'Headings, labels, and emphasized text.', muted: 'Secondary text on base, inset, or raised; use body on floating.', disabled: 'Unavailable actions and disabled controls.', inverse: 'Text on inverse surfaces.', link: 'Default inline links.', 'link-hover': 'Interactive link hover state.' },
20
+ }
21
+ export function tokenAdvice(namespace: string, key: string) {
22
+ if (namespace === 'shadow') { const row = getShadowRows().find(row => row.key === key); return row ? `${row.role}. ${row.description}` : '' }
23
+ return descriptions[namespace]?.[key] ?? (namespace === 'color-text' ? `Mode-aware ${key} foreground text.` : namespace === 'color' ? `${key} color; inspect the authored value and scope below.` : '')
24
+ }
25
+ export const specimenCaption: Record<string, string> = {
26
+ color: 'Numbered palette steps keep their colors across light and dark modes. Choose a swatch to copy its original CSS value or variable reference.',
27
+ 'color-surface': 'Compare complete surfaces in light and dark. Inverse surfaces use inverse text. Role descriptions are design guidance, not component restrictions.',
28
+ 'color-line': 'Each token paints a boundary, with identical line width in both modes. Divider and subtle are decorative; control is intended for required boundaries.',
29
+ 'color-text': 'Each token paints real text, on its intended surface, in both modes. Check contrast in your actual composition.',
30
+ radius: 'The highlighted corner shows the radius on equal-sized shapes.',
31
+ shadow: 'The same raised surface, radius and padding at every level. The full shadow has room to spread. Suggested uses are design guidance.',
32
+ spacing: 'Pink stripes show the actual gap between equal blocks. Pixel equivalents assume a 16px root; authored rem values follow the root font size.',
33
+ container: 'Bars show relative width caps on one shared scale. Exact values remain in the table; changing a size token does not change a container-query threshold.',
34
+ 'font-size': 'Actual preset font sizes, without scaling or fixed-height clipping. Large specimens wrap within the reading column.',
35
+ text: 'Each treatment applies its actual size, line height and tracking. Weight, family and color are separate choices.',
36
+ 'font-family': 'Compare the same sentence and letterforms in each font stack. Available system fonts determine the rendered face.',
37
+ 'font-weight': 'Identical text, size and family isolate the selected weight. The available font determines which weights it can draw.',
38
+ leading: 'The same multi-line paragraph at every line height. Compare reading rhythm and block height.',
39
+ tracking: 'The same long phrase at every letter spacing. Compare the space between glyphs without changing size.',
40
+ animate: 'Every animation specimen starts paused. Play, Pause and Replay control the native timelines; reduced motion keeps the content still. Complete shorthand values are listed below.',
41
+ duration: 'All markers travel the same path with linear timing; only duration changes. Start paused, then Play or Replay together. Reduced motion keeps them still.',
42
+ easing: 'All markers travel the same path over one second; only timing changes. Overshoot and rewind may pass the endpoints. Reduced motion keeps them still.',
43
+ }
44
+ const label = (namespace: string, token: FoundationToken) => namespace === 'shadow'
45
+ ? `<div data-ui="label"><code>${escape(tokenClass(namespace, token.key))}</code><span class="sr-only"> · --${escape(token.name)}</span></div>`
46
+ : `<div data-ui="label"><code>${escape(tokenClass(namespace, token.key))}</code> · <code>--${escape(token.name)}</code>${['color', 'color-line', 'color-surface', 'color-text'].includes(namespace) ? '' : ` · ${escape(defaultValue(token))}`}</div>`
47
+ const paragraph = 'Good typography makes room for the reader. A comfortable measure and a steady rhythm help the eye move from one line to the next, keeping the focus on the ideas rather than the interface.'
48
+
49
+ /** Site-authored presentation only. Classes and var() references are resolved by the public compiler. */
50
+ export function foundationScene(namespace: string, selected?: string[]): DemoScene {
51
+ const tokens = primaryTokens(specimenTokens(namespace, selected))
52
+ const caption = specimenCaption[namespace]
53
+ const scene: DemoScene = { html: '', caption, sizing: 'content', bodyClass: 'bg-surface-base fg-text-body', css: '' }
54
+ if (namespace === 'color') {
55
+ if (tokens.every(token => !/-\d+$/.test(token.key))) scene.caption = 'General hue aliases keep a fixed swatch in both modes. Native values such as currentColor and transparent keep their CSS meaning.'
56
+ scene.html = `<div data-foundation="colors">${tokens.map(token => `<section>${label(namespace, token)}<div data-color-swatch role="img" class="bg-${token.key}" aria-label="${escape(token.key)} swatch"></div><p data-ui="label">${escape(defaultValue(token))}</p></section>`).join('')}</div>`
57
+ scene.css = '[data-foundation="colors"] { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,140px),1fr)); gap:24px; } [data-color-swatch] { height:64px; border-radius:var(--radius-sm); outline:1px solid var(--color-line-divider); outline-offset:-1px; }'
58
+ } else if (namespace.startsWith('color-')) {
59
+ scene.html = `<div data-foundation="roles">${tokens.map(token => {
60
+ const advice = tokenAdvice(namespace, token.key)
61
+ const utility = tokenClass(namespace, token.key)
62
+ const inverse = token.key === 'inverse'
63
+ const preview = namespace === 'color-text'
64
+ ? `<div class="p-lg r-sm ${inverse ? 'bg-surface-inverse' : 'bg-surface-raised'}"><p data-role-preview="text" class="m(0) text-xl font-medium ${utility}">The details make the difference.</p><p class="m(0) text-sm ${utility}">0123456789 · ${escape(token.key)}</p></div>`
65
+ : namespace === 'color-line'
66
+ ? `<div data-role-preview="line" class="p-lg r-sm b(1) b-solid bg-surface-raised ${utility}"><span class="text-sm">${escape(token.key === 'control' ? 'Email address' : 'Collection details')}</span><div class="mt-md bt(1) bt-solid ${utility}"></div></div>`
67
+ : `<div data-role-preview="surface" class="p-lg r-sm ${utility} ${inverse ? 'fg-text-inverse' : 'fg-text-body'}"><strong class="text-md">${escape(token.key)}</strong><p class="m(0) text-sm">A surface for your content.</p></div>`
68
+ return `<section>${label(namespace, token)}${preview}<p data-ui="label">${escape(advice)}</p></section>`
69
+ }).join('')}</div>`
70
+ scene.css = '[data-foundation="roles"] { display:grid; grid-template-columns:minmax(0,1fr); gap:24px; overflow-wrap:anywhere; }'
71
+ } else if (namespace === 'radius') {
72
+ scene.html = `<div data-foundation="radius">${tokens.map(token => `<section><div data-ui="label"><code>r-${escape(token.key)}</code></div><div data-radius-shape class="r-${token.key}"></div><div data-ui="label"><code>${escape(defaultValue(token))}</code></div><span class="sr-only">--${escape(token.name)}</span></section>`).join('')}</div>`
73
+ scene.css = 'body { padding:32px 24px; } [data-foundation="radius"] { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:32px 20px; } @media (min-width:528px) { [data-foundation="radius"] { grid-template-columns:repeat(4,minmax(0,1fr)); } } [data-foundation="radius"] section { display:grid; align-content:start; justify-items:start; gap:12px; } [data-foundation="radius"] [data-ui="label"] { margin:0; font-size:12px; } [data-radius-shape] { position:relative; width:76px; height:76px; border:4px solid var(--color-line-divider); } [data-radius-shape]::after { content:""; position:absolute; inset:-4px; border:4px solid var(--color-text-pink); border-radius:inherit; mask-image:conic-gradient(black 0deg 90deg,transparent 90deg 360deg); }'
74
+ } else if (namespace === 'shadow') {
75
+ scene.html = `<div data-foundation="shadow">${tokens.map(token => `<section>${label(namespace, token)}<article data-shadow-card class="p-lg r-lg bg-surface-raised shadow-${token.key}"><div class="text-md font-medium fg-text-strong">${escape(getShadowRows().find(row => row.key === token.key)?.role ?? token.key)}</div><p class="mt-xs mb(0) text-sm fg-text-muted">${escape(getShadowRows().find(row => row.key === token.key)?.description ?? '')}</p></article></section>`).join('')}</div>`
76
+ scene.css = 'body { padding:32px 32px 64px; } [data-foundation="shadow"] { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,192px),1fr)); gap:48px 40px; } [data-shadow-card] { min-height:144px; } [data-foundation="shadow"] [data-ui="label"] { font-size:12px; }'
77
+ } else if (['font-family', 'font-size', 'font-weight', 'text', 'leading', 'tracking'].includes(namespace)) {
78
+ scene.html = `<div data-foundation="typography">${tokens.map(token => {
79
+ const utility = tokenClass(namespace, token.key)
80
+ const text = namespace === 'leading' ? paragraph : namespace === 'font-family' ? 'The quick brown fox jumps over the lazy dog. 0123456789' : ['font-size', 'text'].includes(namespace) ? 'Design for people.' : namespace === 'tracking' ? 'Make space for extraordinary ideas.' : 'A thoughtful balance. Aa 0123456789'
81
+ return `<section>${label(namespace, token)}<p data-type-target class="m(0) ${['font-size', 'text', 'leading'].includes(namespace) ? '' : 'font-xl'} ${utility}">${text}</p></section>`
82
+ }).join('')}</div>`
83
+ scene.css = '[data-foundation="typography"] { display:grid; gap:32px; } [data-foundation="typography"] > section + section { border-top:1px solid var(--color-line-divider); padding-top:24px; } [data-type-target] { overflow-wrap:anywhere; }'
84
+ if (namespace === 'leading') scene.css += ' [data-type-target] { max-width:38ch; font-size:16px; }'
85
+ } else if (['animate', 'duration', 'easing'].includes(namespace)) {
86
+ scene.motion = true
87
+ scene.html = `<div data-foundation="motion">${tokens.map(token => `<section>${label(namespace, token)}<div data-motion-path><div id="motion-${token.key}" data-motion-marker class="bg-blue-60 r-sm ${namespace === 'animate' ? `animate-${token.key}@motion-safe (animation-iteration-count:1)@motion-safe` : `(animation-name:foundation-travel)@motion-safe (animation-duration:${namespace === 'duration' ? `var(--${token.name})` : '1s'}) (animation-timing-function:${namespace === 'easing' ? `var(--${token.name})` : 'linear'}) (animation-fill-mode:both)`}">${namespace === 'animate' ? 'M' : '→'}</div></div><output data-ui="label" data-animation-readout="motion-${token.key}">Paused</output></section>`).join('')}</div>`
88
+ scene.css = '@keyframes foundation-travel { from { left:0; } to { left:calc(100% - 40px); } } [data-foundation="motion"] { display:grid; gap:24px; } [data-motion-path] { position:relative; height:64px; margin:12px 24px; border-bottom:1px dashed var(--color-line-divider); } [data-motion-marker] { position:relative; display:grid; place-items:center; width:40px; height:40px; color:white; } @media(prefers-reduced-motion:reduce) { [data-motion-marker] { animation:none!important; } }'
89
+ } else if (namespace === 'container') {
90
+ const max = Math.max(...tokens.map(token => token.numeric?.value ?? 0))
91
+ scene.html = tokens.map(token => `<section>${label(namespace, token)}<div data-size-bar style="width:${(token.numeric?.value ?? 0) / max * 100}%" class="bg-blue-60 r-xs"></div></section>`).join('')
92
+ scene.css = '[data-size-bar] { height:16px; margin-bottom:24px; }'
93
+ }
94
+ if (namespace === 'radius' || namespace === 'shadow') scene.css += ' body { background-image:linear-gradient(135deg,var(--color-line-subtle) 4.5%,transparent 0,transparent 50%,var(--color-line-subtle) 0,var(--color-line-subtle) 54.5%,transparent 0); background-size:7.5px 7.5px; }'
95
+ return scene
96
+ }
@@ -0,0 +1,32 @@
1
+ import { flattenMasterCSSManifestVariables } from '@master/css-schema/manifest'
2
+ import { tokenFamilies } from '@master/internal-site/css/manifest-utilities.ts'
3
+ import preset from '@master/internal-site/css/preset-manifest.ts'
4
+
5
+ /** Authored facts only: scope/dependency resolution remains owned by the engine. */
6
+ export const foundationTokens = flattenMasterCSSManifestVariables(preset.variables)
7
+ export const foundationFamilies = tokenFamilies
8
+ export function namespaceTokens(namespace: string) {
9
+ return foundationTokens.filter(token => token.namespace === namespace)
10
+ }
11
+
12
+ /** The Guide's visual palette and its portable export use the same fixed steps. */
13
+ export const paletteKeys = namespaceTokens('color').filter(token => /^.+-\d+$/.test(token.key)).map(token => token.key)
14
+ export function namespaceFamilies(namespace: string) {
15
+ return foundationFamilies.filter(family => family.namespaces.includes(namespace.startsWith('color-') ? 'color' : namespace))
16
+ }
17
+ export function selectFoundationTokens(namespace: string, keys: string[]) {
18
+ const entries = namespaceTokens(namespace)
19
+ return keys.map(key => {
20
+ const token = entries.find(token => token.key === key)
21
+ if (!token) throw new Error(`Unknown ${namespace} token: ${key}`)
22
+ return token
23
+ })
24
+ }
25
+
26
+ /** Presentation choices only; token values and output semantics remain source-owned. */
27
+ export const tokenSpecimenProperties: Record<string, string> = {
28
+ radius: 'borderRadius', shadow: 'boxShadow', 'font-family': 'fontFamily',
29
+ 'font-size': 'fontSize', 'font-weight': 'fontWeight', leading: 'lineHeight', tracking: 'letterSpacing', text: 'fontSize',
30
+ }
31
+ export const hasTokenSpecimens = (namespace: string) => namespace.startsWith('color') || Object.hasOwn(tokenSpecimenProperties, namespace)
32
+ || ['spacing', 'container', 'animate', 'duration', 'easing'].includes(namespace)
@@ -0,0 +1,12 @@
1
+ import { createPresetEngine } from '@master/internal-site/css/preset-css.ts'
2
+
3
+ const engine = createPresetEngine()
4
+
5
+ export function generatePresetCSS(classNames: readonly string[]): string {
6
+ try {
7
+ engine.ensureClassRules(classNames)
8
+ return engine.snapshot().text
9
+ } finally {
10
+ engine.deleteClassRules(classNames)
11
+ }
12
+ }
@@ -0,0 +1,34 @@
1
+ import type { LanguageRegistration, ShikiTransformer } from 'shiki/core'
2
+ import {
3
+ getMasterCSSShikiLanguageId,
4
+ isMasterCSSClassListLanguage,
5
+ isMasterCSSShikiSupportedLanguage,
6
+ type MasterCSSShikiOptions,
7
+ transformerMasterCSS,
8
+ } from '@master/css-language-service/shiki'
9
+ import { createLanguageSessionSync, type MasterCSSLanguageSession } from '@master/css-tooling/language/node'
10
+ import defaultManifest from '@master/css-preset/default-manifest.json' with { type: 'json' }
11
+ import grammar from '@master/css-language-service/syntaxes/master-css.tmLanguage.json' with { type: 'json' }
12
+ import type { MasterCSSManifest } from '@master/css-schema/manifest'
13
+ import { createCodeHighlighter } from '@master/internal-site/utils/highlight-code-core'
14
+ import { cssInjectionHosts } from '@master/internal-site/utils/css-modern-grammar'
15
+
16
+ const sessions = new WeakMap<MasterCSSManifest, MasterCSSLanguageSession>()
17
+
18
+ export default createCodeHighlighter({
19
+ languages: [{ ...(grammar as unknown as LanguageRegistration), injectTo: cssInjectionHosts }],
20
+ resolveLanguage: language => isMasterCSSClassListLanguage(language) ? 'plaintext' : getMasterCSSShikiLanguageId(language) ?? language,
21
+ transformers(language, options) {
22
+ const classList = isMasterCSSClassListLanguage(language)
23
+ if (!classList && !isMasterCSSShikiSupportedLanguage(language)) return []
24
+ const settings = options.masterCSS as MasterCSSShikiOptions | undefined
25
+ const manifest = settings?.manifest ?? settings?.settings?.manifest ?? defaultManifest as MasterCSSManifest
26
+ let session = settings?.session ?? sessions.get(manifest)
27
+ if (!session) {
28
+ const created = createLanguageSessionSync({ manifest })
29
+ sessions.set(manifest, created)
30
+ session = created
31
+ }
32
+ return [transformerMasterCSS({ ...settings, session, classList }) as unknown as ShikiTransformer]
33
+ },
34
+ })
@@ -0,0 +1,29 @@
1
+ import type { MasterCSSTokenFamily } from '@master/css-tooling/language'
2
+ import { createToolingSessionSync } from '@master/css-tooling/node'
3
+ import preset from './preset-manifest'
4
+
5
+ const session = createToolingSessionSync({ manifest: preset })
6
+ const catalog = (() => { try { return session.tokenFamilies() } finally { session.dispose() } })()
7
+
8
+ /** Build-time Rust analysis; client code only reads serializable display facts. */
9
+ export const tokenFamilies = (catalog.families as MasterCSSTokenFamily[]).map(family => ({
10
+ ...family,
11
+ property: family.properties.join(', '),
12
+ namespaces: [family.namespace]
13
+ }))
14
+
15
+ export function getVariableNamespacePublicKeys(namespace: string) {
16
+ return tokenFamilies.filter(family => family.namespace === namespace).map(family => family.prefix).sort()
17
+ }
18
+
19
+ export function getTokenNamespacePublicKeys(namespace: string) {
20
+ return tokenFamilies.filter(family => family.argument === 'value' && family.namespace === namespace).map(family => family.prefix).sort()
21
+ }
22
+
23
+ /** Keep curated documentation groups aligned with the loaded namespace consumers. */
24
+ export function filterNamespaceKeys(group: { keys: string[], namespace?: string, namespaces?: string[] }) {
25
+ const namespaces = group.namespaces || (group.namespace ? [group.namespace] : [])
26
+ if (!namespaces.length) return group.keys
27
+ const keys = new Set(namespaces.flatMap(getVariableNamespacePublicKeys))
28
+ return group.keys.filter(key => keys.has(key))
29
+ }