@master/internal-site 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (687) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +68 -2
  3. package/dist/astro.d.mts +3 -0
  4. package/dist/astro.mjs +510 -0
  5. package/dist/config.d.mts +69 -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 +68 -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 +93 -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 +96 -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 +20 -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 +1081 -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 +73 -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,8 @@
1
+ ---
2
+ import { paletteKeys } from '@master/internal-site/css/foundation-data/tokens.ts'
3
+ import FoundationTokensView from '@master/internal-site/demo/foundations/FoundationTokensView.astro'
4
+
5
+ /** The full palette is the comparison: keep it beside the color lesson. */
6
+ ---
7
+
8
+ <FoundationTokensView namespace="color" keys={paletteKeys} presentation="guide" />
@@ -0,0 +1,13 @@
1
+ ---
2
+ import Demo from '@master/internal-site/demo/Demo.svelte'
3
+ import DemoItem from '@master/internal-site/demo/DemoItem.svelte'
4
+ import DemoLabel from '@master/internal-site/demo/DemoLabel.svelte'
5
+ ---
6
+
7
+ <Demo title="One scale, related surfaces" data-foundation="radius">
8
+ <div class="grid-cols(3) gap-sm w-full">
9
+ <div><DemoLabel>r-sm</DemoLabel><DemoItem class="grid (place-content:center) (height:5rem) mt-sm r-sm text-sm">Control</DemoItem></div>
10
+ <div><DemoLabel>r-lg</DemoLabel><DemoItem class="grid (place-content:center) (height:5rem) mt-sm r-lg text-sm">Panel</DemoItem></div>
11
+ <div><DemoLabel>r-2xl</DemoLabel><DemoItem class="grid (place-content:center) (height:5rem) mt-sm r-2xl text-sm">Feature</DemoItem></div>
12
+ </div>
13
+ </Demo>
@@ -0,0 +1,12 @@
1
+ ---
2
+ import IconArrowUp from '@tabler/icons-svelte-runes/icons/arrow-up'
3
+ import Demo from '@master/internal-site/demo/Demo.svelte'
4
+ import DemoLabel from '@master/internal-site/demo/DemoLabel.svelte'
5
+ ---
6
+
7
+ <Demo title="Content-sized pill and width-led circle" data-foundation="shapes" caption="These links share a destination. Their shape is independent of their native navigation behavior.">
8
+ <div class="flex flex-wrap items-end gap-lg">
9
+ <div><DemoLabel>pill</DemoLabel><div class="mt-sm"><a href="#use-shape-shortcuts" class="inline-flex items-center justify-center min-h(44) py-sm px-md pill b-solid b(1) b-line-divider text-sm (text-decoration:none) bg-surface-raised fg-text-body">Pills and circles</a></div></div>
10
+ <div><DemoLabel>w(48) (aspect-ratio:1/1) pill</DemoLabel><div class="mt-sm"><a href="#use-shape-shortcuts" aria-label="Pills and circles" class="inline-flex items-center justify-center w(48) (aspect-ratio:1/1) pill b-solid b(1) b-line-divider bg-surface-raised fg-text-blue"><IconArrowUp size={20} aria-hidden="true" /></a></div></div>
11
+ </div>
12
+ </Demo>
@@ -0,0 +1,14 @@
1
+ ---
2
+ import DemoContainer from '@master/internal-site/demo/DemoContainer.svelte'
3
+ import DemoItem from '@master/internal-site/demo/DemoItem.svelte'
4
+ ---
5
+
6
+ <DemoContainer client:idle={{ timeout: 500 }} title="Keep long content within its cap" data-foundation="shrink" caption="The row stops at sm. The flexible text region can shrink below its content width.">
7
+ <article class="flex gap-md w-full max-w-sm mx-auto p-md ui-sheet" data-elevation="1">
8
+ <DemoItem class="grid shrink(0) (place-content:center) (height:2.5rem) (width:2.5rem) text-sm font-mono">FN</DemoItem>
9
+ <div class="(flex:1) min-w(0)">
10
+ <div class="text-sm font-semibold">Project archive</div>
11
+ <p class="truncate mb(0) mx(0) mt-2xs text-sm fg-text-muted">field-notes-autumn-collection-final-v03.fig</p>
12
+ </div>
13
+ </article>
14
+ </DemoContainer>
@@ -0,0 +1,19 @@
1
+ ---
2
+ import Demo from '@master/internal-site/demo/Demo.svelte'
3
+ import DemoItem from '@master/internal-site/demo/DemoItem.svelte'
4
+ import DemoLabel from '@master/internal-site/demo/DemoLabel.svelte'
5
+ import DemoSurface from '@master/internal-site/demo/DemoSurface.svelte'
6
+ ---
7
+
8
+ <Demo title="Fluid space, measured object" data-foundation="sizing">
9
+ <DemoSurface class="w-full max-w-sm mx-auto p-md">
10
+ <DemoLabel>w-full · max-w-sm</DemoLabel>
11
+ <div class="flex items-center gap-md mt-md">
12
+ <DemoItem class="grid shrink(0) (place-content:center) (height:var(--spacing-2xl)) (width:var(--spacing-2xl)) (aspect-ratio:1/1) pill text-sm font-mono">FN</DemoItem>
13
+ <div class="wrap-anywhere (flex:1) min-w(0)">
14
+ <div class="text-sm font-semibold">Field notes</div>
15
+ <p class="mb(0) mx(0) mt-2xs text-sm fg-text-muted">Measured avatar. Flexible content.</p>
16
+ </div>
17
+ </div>
18
+ </DemoSurface>
19
+ </Demo>
@@ -0,0 +1,20 @@
1
+ ---
2
+ import Demo from '@master/internal-site/demo/Demo.svelte'
3
+ import DemoViewport from '@master/internal-site/demo/DemoViewport.svelte'
4
+ import { demoDocument } from '@master/internal-site/demo/reference/document.ts'
5
+ import type { DemoScene, ReferenceDemoSection } from '@master/internal-site/demo/reference/types.ts'
6
+
7
+ interface Props {
8
+ name: string
9
+ title: string
10
+ scene: DemoScene
11
+ }
12
+
13
+ /** One type or motion foundation in its own document. */
14
+ const { name, title, scene } = Astro.props
15
+ const section: ReferenceDemoSection = { page: 'foundations', id: name, title, html: [], css: '', classes: [], classLists: [], highlighted: [] }
16
+ ---
17
+
18
+ <Demo title={title} frame="none" data-foundation-type-motion={name} caption={scene.caption}>
19
+ <DemoViewport client:idle={{ timeout: 500 }} title={title} document={demoDocument(section, scene)} sizing={scene.sizing ?? 'content'} height={scene.height} motion={scene.motion} />
20
+ </Demo>
@@ -0,0 +1,5 @@
1
+ ---
2
+ import DemoThemeComparison from '@master/internal-site/demo/DemoThemeComparison.astro'
3
+ ---
4
+
5
+ <DemoThemeComparison name="surfaces" title="Surface hierarchy" html={"<section class=\"p-md r-lg bg-surface-inset\">\n<p class=\"mb-sm font-mono font-xs fg-text-muted\">bg-surface-inset</p>\n<article class=\"p-md r-sm b(1) b-solid b-line-divider bg-surface-raised\">\n<h2 class=\"m(0) text-md font-medium fg-text-strong\">Collection settings</h2>\n<p class=\"mt-xs mb(0) fg-text-muted\">A raised panel on a subdued section.</p>\n</article></section>"} caption="Color separates these surfaces. This example adds no shadow." />
@@ -0,0 +1,5 @@
1
+ ---
2
+ import DemoThemeComparison from '@master/internal-site/demo/DemoThemeComparison.astro'
3
+ ---
4
+
5
+ <DemoThemeComparison name="text-hue" title="Foreground color by role" html={"<article class=\"p-md r-sm b(1) b-solid b-line-divider bg-surface-raised\">\n<p class=\"m(0) text-sm font-medium fg-text-blue\">Editorial notes</p>\n<h2 class=\"mt-xs mb-sm text-xl font-medium fg-text-strong\">A clearer perspective</h2>\n<p class=\"m(0) fg-text-body\">Use a colored label alongside a clear heading and readable body copy.</p>\n</article>"} caption="fg-text-blue uses the foreground-oriented alias. Check the actual foreground and surface together." />
@@ -0,0 +1,5 @@
1
+ ---
2
+ import DemoThemeComparison from '@master/internal-site/demo/DemoThemeComparison.astro'
3
+ ---
4
+
5
+ <DemoThemeComparison name="text-roles" title="Readable hierarchy" html={"<article class=\"grid gap-sm p-md r-lg b(1) b-solid b-line-divider bg-surface-raised fg-text-body\">\n<h2 class=\"m(0) text-lg font-medium fg-text-strong\">Quarterly report</h2>\n<p class=\"m(0)\">The current cycle is on track.</p>\n<p class=\"m(0) text-sm fg-text-muted\">Updated 12 minutes ago</p>\n<button type=\"button\" class=\"fg-text-disabled (cursor:not-allowed)\" disabled>Archive unavailable</button>\n<a class=\"fg-text-link fg-text-link-hover:hover underline\" href=\"/reference/tokens/color-roles#color-text\" target=\"_top\">Explore text roles</a>\n<span class=\"w-fit px-sm py-2xs r-sm bg-surface-inverse fg-text-inverse\">Private note</span>\n</article>"} caption="The archive action is natively disabled. Inverse text is paired with its inverse surface." />
@@ -0,0 +1,22 @@
1
+ ---
2
+ import Code from '@master/internal-site/components/Code.astro'
3
+ import { configuredExampleCSS, configuredMarkupClasses } from '@master/internal-site/css/configured-example.ts'
4
+ import { foundationScene } from '@master/internal-site/css/foundation-data/specimens.ts'
5
+ import DocumentDisclosure from '@master/internal-site/components/DocumentDisclosure.astro'
6
+ import FoundationTokensView from '@master/internal-site/demo/foundations/FoundationTokensView.astro'
7
+
8
+ interface Props {
9
+ namespace: string
10
+ keys?: string[]
11
+ }
12
+
13
+ const { namespace, keys } = Astro.props
14
+ const scene = keys && namespace !== 'color' && namespace !== 'breakpoints' ? foundationScene(namespace, keys) : undefined
15
+ ---
16
+
17
+ <FoundationTokensView namespace={namespace} keys={keys} presentation="guide">
18
+ {scene?.html && <DocumentDisclosure slot="source" title="Example code">
19
+ <Code lang="html" beautify code={scene.html} />
20
+ <Code lang="css" beautify code={configuredExampleCSS(scene.css ?? '', configuredMarkupClasses(scene.html))} />
21
+ </DocumentDisclosure>}
22
+ </FoundationTokensView>
@@ -0,0 +1,65 @@
1
+ ---
2
+ import Demo from '@master/internal-site/demo/Demo.svelte'
3
+ import DemoViewport from '@master/internal-site/demo/DemoViewport.svelte'
4
+ import DemoThemeComparison from '@master/internal-site/demo/DemoThemeComparison.astro'
5
+ import ThemeNumberVariableTable from '@master/internal-site/css/ThemeNumberVariableTable.astro'
6
+ import Palette, { type PaletteGroup } from '@master/internal-site/demo/foundations/Palette.svelte'
7
+ import { demoDocument } from '@master/internal-site/demo/reference/document.ts'
8
+ import { defaultValue, foundationScene, specimenCaption, specimenTokens, type FoundationToken } from '@master/internal-site/css/foundation-data/specimens.ts'
9
+
10
+ interface Props {
11
+ namespace: string
12
+ keys?: string[]
13
+ presentation?: 'guide' | 'reference'
14
+ }
15
+
16
+ /** Extra example markup, such as a source disclosure, follows the specimens in the `source` slot. */
17
+ const { namespace, keys, presentation = 'reference' } = Astro.props
18
+ const tokens = namespace === 'breakpoints' ? [] : specimenTokens(namespace, keys)
19
+ const tokenKeys = tokens.map(token => token.key).join(' ')
20
+
21
+ function tokenScene(tokens: FoundationToken[], title: string, compare = false) {
22
+ const scene = foundationScene(namespace, tokens.map(token => token.key))
23
+ return scene.html ? { scene, title, compare } : undefined
24
+ }
25
+
26
+ let palette: PaletteGroup[] = []
27
+ let scenes: NonNullable<ReturnType<typeof tokenScene>>[] = []
28
+ if (namespace === 'color') {
29
+ const groups = new Map<string, PaletteGroup>()
30
+ const rest: FoundationToken[] = []
31
+ for (const token of tokens) {
32
+ const match = token.key.match(/^(.+)-(\d+)$/)
33
+ if (!match) { rest.push(token); continue }
34
+ const [, family, step] = match
35
+ if (!groups.has(family)) groups.set(family, { family, colors: [] })
36
+ groups.get(family)!.colors.push({ name: token.name, step: Number(step), value: defaultValue(token) })
37
+ }
38
+ palette = [...groups.values()].map(group => ({ ...group, colors: group.colors.sort((a, b) => a.step - b.step) }))
39
+ const aliases = rest.filter(token => defaultValue(token).startsWith('var('))
40
+ const specials = rest.filter(token => !aliases.includes(token))
41
+ scenes = [
42
+ aliases.length > 0 ? tokenScene(aliases, 'Hue aliases', true) : undefined,
43
+ specials.length > 0 ? tokenScene(specials, 'Special colors', true) : undefined,
44
+ ].filter(scene => scene !== undefined)
45
+ } else if (namespace !== 'breakpoints' && namespace !== 'spacing') {
46
+ const scene = tokenScene(tokens, namespace === 'shadow' ? 'Shadow scale' : namespace === 'radius' ? 'Corner radius scale' : namespace.replaceAll('-', ' '), namespace.startsWith('color-') || (namespace === 'shadow' && presentation === 'reference'))
47
+ scenes = scene ? [scene] : []
48
+ }
49
+ ---
50
+
51
+ {namespace === 'breakpoints' ? <ThemeNumberVariableTable namespace="breakpoint" />
52
+ : namespace === 'color' ? <div data-foundation-tokens={namespace} data-token-keys={tokenKeys}>
53
+ {palette.length > 0 && <Demo title="Fixed color steps" padding="sm" caption={specimenCaption.color}><Palette client:idle={{ timeout: 500 }} groups={palette} /></Demo>}
54
+ {scenes.map(({ scene, title }) => <DemoThemeComparison name={`tokens-${namespace}`} title={title} html={scene.html!} css={scene.css} caption={scene.caption} />)}
55
+ </div>
56
+ : <div data-foundation-tokens={namespace} data-token-keys={tokenKeys}>
57
+ {namespace === 'spacing' ? <><ThemeNumberVariableTable namespace="spacing" keys={keys} representation="spacing" referenceUnits={presentation !== 'guide'} /><p class="m(0) font-xs fg-text-muted">{presentation === 'guide' ? 'The striped area is the actual gap between two equal blocks.' : specimenCaption.spacing}</p></>
58
+ : scenes.map(({ scene, title, compare }) => compare
59
+ ? <DemoThemeComparison name={`tokens-${namespace}`} title={title} html={scene.html!} css={scene.css} caption={scene.caption} />
60
+ : <Demo title={title} frame="none" caption={scene.caption}>
61
+ <DemoViewport client:idle={{ timeout: 500 }} title={title} document={demoDocument({ page: 'tokens', id: namespace, title, html: [], css: '', classes: [], classLists: [], highlighted: [] }, scene)} sizing="content" theme={namespace === 'shadow'} motion={scene.motion} />
62
+ </Demo>)}
63
+ {namespace === 'container' && <ThemeNumberVariableTable namespace="container" keys={keys} />}
64
+ <slot name="source" />
65
+ </div>}
@@ -0,0 +1,5 @@
1
+ ---
2
+ import FoundationSpecimen from '@master/internal-site/demo/foundations/FoundationSpecimen.astro'
3
+ ---
4
+
5
+ <FoundationSpecimen name="state-transition" title="A transition needs two states" scene={{ html: "<label class=\"block w(280) max-w-full font-sm (transform:translateX(96px)):has(input:checked)>span>span@media(screen)\">\n<input type=\"checkbox\" class=\"mr-xs accent-blue\"> Move layer\n<span aria-hidden=\"true\" class=\"block h(64) mt-md p-xs outline(1) outline-dashed outline-line-subtle\"><span id=\"layer\" class=\"grid (place-items:center) h(48) w(128) b(1) b-solid b-blue-60 r-sm font-sm bg-blue-10 fg-blue-80 (transform:none) (transition-property:transform)@media(screen)@motion-safe (transition-duration:var(--duration-slow))@media(screen)@motion-safe (transition-timing-function:var(--easing-overshoot))@media(screen)@motion-safe (transition-delay:150ms)@media(screen)@motion-safe\">Layer 01</span></span>\n</label><div data-ui=\"type-readings\"><span>Duration <output data-style-readout=\"layer\" data-style-property=\"transition-duration\">—</output></span><span>Delay <output data-style-readout=\"layer\" data-style-property=\"transition-delay\">—</output></span></div>", caption: 'The checkbox changes translateX from 0 to 96px. The 300ms transition starts after a 150ms delay. Reduced motion changes the state immediately; print keeps the initial position.' }} />
@@ -0,0 +1,12 @@
1
+ ---
2
+ import FoundationSpecimen from '@master/internal-site/demo/foundations/FoundationSpecimen.astro'
3
+ import { typeSpecimens } from '@master/internal-site/demo/reference/type-specimens.ts'
4
+ import type { ReferenceDemoSection } from '@master/internal-site/demo/reference/types.ts'
5
+
6
+ const authored: ReferenceDemoSection = { page: 'text-size', id: 'type-comparison', title: 'Font size and text scale', css: '', classes: [], classLists: [], highlighted: [], html: [
7
+ "<!-- font-3xl · inherited leading and tracking -->\n<div class=\"leading-md tracking-normal wrap-anywhere\"><p id=\"target\" class=\"m(0) font-3xl font-regular\">Designing for a clearer reading experience.</p></div>",
8
+ "<!-- text-3xl · size, leading and tracking -->\n<div class=\"leading-md tracking-normal wrap-anywhere\"><p id=\"target\" class=\"m(0) text-3xl font-regular\">Designing for a clearer reading experience.</p></div>",
9
+ ] }
10
+ ---
11
+
12
+ <FoundationSpecimen name="type-comparison" title="One size, two type treatments" scene={typeSpecimens(authored, { properties: ['font-size', 'line-height', 'letter-spacing'], appearance: 'plain', caption: 'Both specimens have the same font size and content. font-3xl inherits the parent’s leading and tracking; text-3xl sets all three properties.' })} />
@@ -0,0 +1,5 @@
1
+ ---
2
+ import FoundationSpecimen from '@master/internal-site/demo/foundations/FoundationSpecimen.astro'
3
+ ---
4
+
5
+ <FoundationSpecimen name="type-hierarchy" title="A readable type hierarchy" scene={{ html: "<article class=\"p-md r-sm b(1) b-solid b-line-divider bg-surface-raised fg-text-body\">\n<p class=\"m(0) text-xs font-regular fg-text-muted\">Field notes / 024</p>\n<h2 class=\"mt-xs mb-sm text-2xl font-regular fg-text-strong\">Make room for the details.</h2>\n<p class=\"m(0) text-sm\">A consistent type scale helps readers move from the main idea to the supporting detail.</p>\n<p class=\"mt-md mb(0) font-mono font-xs fg-text-muted\">4 min read · Updated today</p>\n</article>", caption: 'Size, spacing and text roles establish hierarchy with regular weight. The full body copy stays visible at every preview width.' }} />
@@ -0,0 +1,37 @@
1
+ <script module lang="ts">
2
+ export interface PaletteGroup { family: string; colors: { name: string; step: number; value: string }[] }
3
+ </script>
4
+
5
+ <script lang="ts">
6
+ import '@master/internal-site/styles/system/specimens.css'
7
+ import '@master/internal-site/styles/demo.css'
8
+ import DemoCopyButton from '@master/internal-site/demo/DemoCopyButton.svelte'
9
+ import DemoCopyGroup from '@master/internal-site/demo/DemoCopyGroup.svelte'
10
+
11
+ /** Wide pages show a hue matrix; narrow pages wrap each hue into two rows. Every chip names its step. */
12
+ let { groups }: { groups: PaletteGroup[] } = $props()
13
+ let format = $state('value')
14
+ const id = $props.id()
15
+ const endId = `${id}-end`
16
+ </script>
17
+
18
+ <div class="w-full"><DemoCopyGroup instruction={format === 'value' ? 'Choose a swatch to copy its original CSS color value.' : 'Choose a swatch to copy its CSS variable reference.'}>
19
+ <label class="w-fit ui-field" for={id}>Copy as
20
+ <select {id} class="ui-select" data-variant="raised" bind:value={format}>
21
+ <option value="value">CSS value</option><option value="variable">CSS variable</option>
22
+ </select>
23
+ </label>
24
+ <a class="ui-skip" href={`#${endId}`}>Skip color swatches</a>
25
+ <div class="ui-palette">
26
+ {#each groups as group (group.family)}<div class="ui-palette-row" role="group" aria-label={`${group.family} palette`}>
27
+ <span>{group.family}</span>
28
+ {#each group.colors as color (color.name)}<div class="ui-palette-cell">
29
+ <DemoCopyButton icon={null} class="ui-palette-chip" style={`background-color:${color.value}`}
30
+ value={format === 'value' ? color.value : `var(--${color.name})`}
31
+ label={`Copy ${color.name} ${format === 'value' ? 'CSS value' : 'CSS variable'}`} title={`${color.name}: ${color.value}`} />
32
+ <span aria-hidden="true">{color.step}</span>
33
+ </div>{/each}
34
+ </div>{/each}
35
+ </div>
36
+ <div id={endId} tabindex="-1"><span class="sr-only">End of color palette</span></div>
37
+ </DemoCopyGroup></div>
@@ -0,0 +1,22 @@
1
+ ---
2
+ import Demo from '@master/internal-site/demo/Demo.svelte'
3
+ import DemoLabel from '@master/internal-site/demo/DemoLabel.svelte'
4
+
5
+ import { getShadowRows } from '@master/internal-site/css/foundation-data/elevation/shadow-data.ts'
6
+
7
+ /** Every preset shadow on the same raised surface; used by the design-system review pages. */
8
+ ---
9
+
10
+ <Demo align="start">
11
+ <div class="container-inline w-full">
12
+ <div class="grid-cols(1) gap-xl w-full grid-cols(2)@container(width>=18rem)">
13
+ {getShadowRows().map(({ utility, role, description }) => (
14
+ <div class={`bg-surface-raised r-lg p-lg ${utility}`}>
15
+ <DemoLabel>{utility}</DemoLabel>
16
+ <div class="font-medium fg-text-strong">{role}</div>
17
+ <p class="mb(0) mx(0) mt-xs text-sm fg-text-muted">{description}</p>
18
+ </div>
19
+ ))}
20
+ </div>
21
+ </div>
22
+ </Demo>
@@ -0,0 +1,180 @@
1
+ /** Illustration primitives shared by the documentation scenes, painted by the site's tokens in `illustration.css`. */
2
+ export type Theme = 'light' | 'dark'
3
+
4
+ /** The scene is drawn at the article's wide media width, so its sizes match the interface around it. */
5
+ export const sceneWidth = 720
6
+ export const sceneHeight = 480
7
+
8
+ /** Tabler outline icons, the set the site's interface uses. */
9
+ const icons = {
10
+ braces: ['M7 4a2 2 0 0 0 -2 2v3a2 3 0 0 1 -2 3a2 3 0 0 1 2 3v3a2 2 0 0 0 2 2', 'M17 4a2 2 0 0 1 2 2v3a2 3 0 0 0 2 3a2 3 0 0 0 -2 3v3a2 2 0 0 1 -2 2'],
11
+ check: ['M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0', 'M9 12l2 2l4 -4'],
12
+ code: ['M7 8l-4 4l4 4', 'M17 8l4 4l-4 4', 'M14 4l-4 16'],
13
+ compare: ['M4 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0', 'M16 18a2 2 0 1 0 4 0a2 2 0 1 0 -4 0', 'M11 6h5a2 2 0 0 1 2 2v8', 'M14 9l-3 -3l3 -3', 'M13 18h-5a2 2 0 0 1 -2 -2v-8', 'M10 15l3 3l-3 3'],
14
+ cpu: ['M5 6a1 1 0 0 1 1 -1h12a1 1 0 0 1 1 1v12a1 1 0 0 1 -1 1h-12a1 1 0 0 1 -1 -1l0 -12', 'M9 9h6v6h-6l0 -6', 'M3 10h2', 'M3 14h2', 'M10 3v2', 'M14 3v2', 'M21 10h-2', 'M21 14h-2', 'M14 21v-2', 'M10 21v-2'],
15
+ file: ['M14 3v4a1 1 0 0 0 1 1h4', 'M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2', 'M9 17h6', 'M9 13h6'],
16
+ fileCode: ['M14 3v4a1 1 0 0 0 1 1h4', 'M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2', 'M10 13l-1 2l1 2', 'M14 13l1 2l-1 2'],
17
+ filter: ['M4 4h16v2.172a2 2 0 0 1 -.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48 -4.928a2 2 0 0 1 -.52 -1.345v-2.227'],
18
+ layers: ['M12 4l-8 4l8 4l8 -4l-8 -4', 'M4 12l8 4l8 -4', 'M4 16l8 4l8 -4'],
19
+ refresh: ['M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4', 'M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4'],
20
+ scan: ['M5 12h14', 'M3 7v-2a2 2 0 0 1 2 -2h2', 'M3 17v2a2 2 0 0 0 2 2h2', 'M17 3h2a2 2 0 0 1 2 2v2', 'M17 21h2a2 2 0 0 0 2 -2v-2'],
21
+ server: ['M3 7a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-2', 'M3 15a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3l0 -2', 'M7 8l0 .01', 'M7 16l0 .01'],
22
+ window: ['M3 7a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10', 'M6 8h.01', 'M9 8h.01']
23
+ } as const
24
+
25
+ export type IconName = keyof typeof icons
26
+ export type TextKind = 'title' | 'note' | 'body' | 'edge' | 'code' | 'eyebrow'
27
+ type Align = 'start' | 'center' | 'end'
28
+ type AnnotationTone = 'blue' | 'violet' | 'amber'
29
+
30
+ export function escapeHtml(value: string) {
31
+ return value.replace(/[&<>"']/g, character => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;', "'": '&#39;' })[character]!)
32
+ }
33
+
34
+ const box = (x: number, y: number, width?: number, height?: number) =>
35
+ `left:${x}px;top:${y}px;${width === undefined ? '' : `width:${width}px;`}${height === undefined ? '' : `height:${height}px;`}`
36
+
37
+ export function drawing(theme: Theme) {
38
+ const routes: string[] = []
39
+ const icon = (name: IconName) => `<span class="icon"><svg viewBox="0 0 24 24">${icons[name].map(d => `<path d="${d}"/>`).join('')}</svg></span>`
40
+ /** A label inside a sheet, chip or mark; every label carries a shared figure label. */
41
+ const label = (value: string, kind: TextKind = 'title') => `<span class="${kind}" data-label>${escapeHtml(value)}</span>`
42
+ /** A free label, its box's top edge at y, anchored at x. */
43
+ const text = (x: number, y: number, value: string, kind: TextKind = 'note', align: Align = 'start') =>
44
+ `<span class="${kind}${align === 'start' ? '' : ` ${align}`}" style="${box(x, y)}" data-label>${escapeHtml(value)}</span>`
45
+ const row = (content: string) => `<div class="row">${content}</div>`
46
+ const rule = '<div class="rule"></div>'
47
+ /** Placeholder lines for content the figure does not spell out, as percentages of the sheet's inner width. */
48
+ const bars = (...widths: number[]) => `<div class="bars">${widths.map(width => `<i style="width:${width}%"></i>`).join('')}</div>`
49
+ /** Omit dimensions for intrinsic content sizing; an anchor keeps positioning independent of the resulting width. */
50
+ const sheet = (x: number, y: number, width: number | undefined, height: number | undefined, content: string, anchor: Align = 'start') =>
51
+ `<div class="sheet${anchor === 'start' ? '' : ` anchor-${anchor}`}" style="${box(x, y, width, height)}">${content}</div>`
52
+ const chip = (x: number, y: number, width: number | undefined, name: IconName, value: string) =>
53
+ `<div class="chip" style="${box(x, y, width)}">${icon(name)}<span data-label>${escapeHtml(value)}</span></div>`
54
+ const mark = (x: number, y: number, name: IconName, value: string, align: Align = 'start') =>
55
+ `<div class="mark${align === 'start' ? '' : ` ${align}`}" style="${box(x, y)}">${icon(name)}${label(value)}</div>`
56
+ /** A vertical hairline between two places; caption each side with an eyebrow `text`. */
57
+ const divider = (x: number, top: number, bottom: number) => `<i class="divider" style="${box(x, top, undefined, bottom - top)}"></i>`
58
+ const window = (x: number, y: number, width: number, height: number, content = '') =>
59
+ `<div class="window" style="${box(x, y, width, height)}"><div class="toolbar"><i></i><i></i><i></i></div>${content}</div>`
60
+ /** A measured control specimen: center anchored, with its real padding exposed by inspection guides. */
61
+ const spacingControl = (x: number, y: number, value: string, padding: number, measurement: string, accent = false) =>
62
+ `<div class="spacing-study${accent ? ' accented' : ''}" style="${box(x, y)}--sample-padding:${padding}px">
63
+ <div class="spacing-control"><i class="padding-start"></i>${label(value, 'body')}<i class="padding-end"></i></div>
64
+ <div class="spacing-ruler"><i></i>${label(measurement, 'edge')}<i></i></div>
65
+ </div>`
66
+ /** Matched article specimens isolate selector attachment under the same pointer state. */
67
+ const selectorSpecimen = (x: number, y: number, test: 'owner' | 'target', title: string, firstLink: string, secondLink: string) =>
68
+ `<article class="sheet selector-specimen anchor-center" data-test="${test}" style="${box(x, y)}">
69
+ <p>${label(title)}</p>
70
+ <a>${label(firstLink, 'body')}<svg class="selector-pointer" viewBox="0 0 24 24" aria-hidden="true"><path d="M4 3l15 9-7 1-3 7z"/></svg></a>
71
+ <a>${label(secondLink, 'body')}</a>
72
+ </article>`
73
+ /** Measured query boundaries share one width scale; heights still follow content. */
74
+ const queryScopes = (x: number, y: number, viewportWidth: number, containerWidth: number, labels: {
75
+ viewport: string; media: string; viewportWidth: string; container: string; query: string; containerWidth: string; child: string
76
+ }) => `<div class="query-scopes anchor-center" style="${box(x, y, viewportWidth)}">
77
+ <div class="query-ruler">${label(labels.viewportWidth, 'code')}</div>
78
+ <div class="query-viewport">
79
+ <div class="query-scope-heading">${label(labels.viewport)}${label(labels.media, 'code')}</div>
80
+ <div class="query-container-study" style="width:${containerWidth}px">
81
+ <div class="query-ruler">${label(labels.containerWidth, 'code')}</div>
82
+ <div class="query-container">${label(labels.container)}${label(labels.query, 'code')}<div class="query-descendant">${label(labels.child, 'body')}</div></div>
83
+ </div>
84
+ </div>
85
+ </div>`
86
+ /** A file's current contribution; a removed source loses its solid artifact and connection. */
87
+ const sourceContribution = (x: number, y: number, name: string, source: string, removed = false) =>
88
+ `<div class="sheet source-contribution anchor-center" style="${box(x, y)}"${removed ? ' data-removed' : ''}>${row(icon('fileCode') + label(name))}${row(label(source, 'code'))}</div>`
89
+ /** An ordered layer list; unlayered CSS is separated because it is not a sixth named layer. */
90
+ const priorityStack = (x: number, y: number, layers: readonly string[], unlayered: string) =>
91
+ `<div class="priority-stack anchor-center" style="${box(x, y)}">${layers.map(value => `<div>${label(value, 'code')}</div>`).join('')}<div class="unlayered">${label(unlayered, 'body')}</div></div>`
92
+ /** Two DOM scopes expose inherited computed values; sample paint is the literal result being compared. */
93
+ const variableScope = (x: number, y: number, inline: boolean, labels: {
94
+ root: string; rootValue: string; resolved: string; omitted: string; region: string; regionValue: string; sample: string; blue: string; plum: string
95
+ }) => `<div class="variable-scope anchor-center" style="${box(x, y)}" data-inline="${inline}">
96
+ ${label(labels.root, 'code')}${label(labels.rootValue, 'code')}${label(inline ? labels.omitted : labels.resolved, inline ? 'edge' : 'code')}
97
+ <div class="variable-region">${label(labels.region, 'code')}${label(labels.regionValue, 'code')}
98
+ <div class="variable-sample">${label(labels.sample, 'code')}</div>
99
+ ${label(inline ? labels.plum : labels.blue, 'note')}
100
+ </div>
101
+ </div>`
102
+ /** A native CSS block: indentation and a scope guide expose containment, not execution order. */
103
+ const codeScope = (opening: string, content: string, tone?: AnnotationTone) =>
104
+ `<div class="code-scope"${tone ? ` data-tone="${tone}"` : ''}>${label(opening, 'code')}<div class="code-scope-body">${content}</div>${label('}', 'code')}</div>`
105
+ /** Equal swatches compare actual preset paint; the marked one is an alias target. */
106
+ const colorScale = (x: number, y: number, hue: string, steps: readonly string[], selected: number, tone: AnnotationTone) =>
107
+ `<div class="color-scale anchor-center" data-tone="${tone}" style="${box(x, y)}">${steps.map(step => `<div class="color-scale-step"><i class="bg-${hue}-${step}"${Number(step) === selected ? ` data-selected data-anchor="${hue}-selected"` : ''}></i>${label(step, 'code')}</div>`).join('')}</div>`
108
+ /** Matched content and geometry isolate native light-dark() selection. */
109
+ const roleSelection = (x: number, y: number, mode: Theme, heading: string, sample: string, surface: string, tone: AnnotationTone) =>
110
+ `<div class="role-selection anchor-center" data-tone="${tone}" style="${box(x, y)}">
111
+ <span class="code" data-label data-anchor="${mode}-scheme">${escapeHtml(heading)}</span>
112
+ <div class="role-selection-sample bg-surface-base" style="color-scheme:${mode}"><span class="fg-text-muted" data-label>${escapeHtml(sample)}</span></div>
113
+ ${label(surface, 'edge')}
114
+ </div>`
115
+ /** The two layouts share actual content; colored bands expose the native spacing. */
116
+ const spacingSpecimen = (x: number, y: number, kind: 'padding' | 'gap', first: string, second: string) =>
117
+ `<div class="spacing-sample grid ${kind === 'padding' ? 'p-md' : 'gap-md'} anchor-center" data-kind="${kind}" data-tone="${kind === 'padding' ? 'blue' : 'violet'}" style="${box(x, y)}"><div class="spacing-item">${label(first, 'body')}</div><div class="spacing-item">${label(second, 'body')}</div></div>`
118
+ /** Parent widths encode the measured constraint. The capped child's height remains intrinsic. */
119
+ const sizingSpecimen = (x: number, y: number, width: number, available: string, content: string, result: string) =>
120
+ `<div class="sizing-study" style="${box(x, y, width)}">${label(available, 'note')}<div class="sizing-parent"><div class="sizing-child max-w-3xs">${label(content, 'body')}${label(result, 'code')}</div></div></div>`
121
+ /** A real child paints into a rounded parent; only the compared clipping policy changes. */
122
+ const radiusSpecimen = (x: number, y: number, clip: boolean, child: string, parent: string) =>
123
+ `<div class="radius-sample r-4xl${clip ? ' overflow-hidden' : ''} anchor-center" style="${box(x, y)}"><div class="radius-child">${label(child, 'body')}</div><div class="radius-parent-content">${label(parent, 'body')}</div></div>`
124
+ /** Matched flow boxes keep their real gap while shadow paint extends beyond them. */
125
+ const shadowSpecimen = (x: number, y: number, token: string, title: string, content: string, next: string, gap: string) =>
126
+ `<div class="shadow-study anchor-center" style="${box(x, y)}"><div class="shadow-sample ${escapeHtml(token)}">${label(title, 'title')}${label(content, 'body')}</div><div class="shadow-following">${label(next, 'body')}<div class="shadow-gap">${label(gap, 'edge')}</div></div></div>`
127
+ /** Actual font properties change independently against the same baseline. */
128
+ const fontComparison = (x: number, y: number, baseline: string, headings: readonly string[], rows: readonly { class: string, classes: string }[], sample: string) =>
129
+ `<div class="font-comparison anchor-center" style="${box(x, y)}">${headings.map(value => label(value, 'edge')).join('')}${rows.map(item => `${label(item.class, 'code')}<span class="font-specimen ${escapeHtml(baseline)}" data-label>${escapeHtml(sample)}</span><span class="font-specimen ${escapeHtml(item.classes)}" data-label>${escapeHtml(sample)}</span>`).join('')}</div>`
130
+ /** Unitless line-height is inherited into real, equally wide text columns. */
131
+ const leadingComparison = (x: number, y: number, classes: readonly string[], sizes: readonly string[], lines: readonly string[], results: readonly string[]) =>
132
+ `<div class="leading-study leading-md anchor-center" style="${box(x, y)}">${classes.map((name, i) => `<section class="leading-column" data-tone="${i ? 'violet' : 'blue'}">${label(sizes[i], 'code')}<div class="leading-lines ${escapeHtml(name)}">${lines.map(line => `<span data-label>${escapeHtml(line)}</span>`).join('')}</div>${label(results[i], 'edge')}</section>`).join('')}</div>`
133
+ /** A real parent supplies computed tracking; only the second child declares it again. */
134
+ const trackingComparison = (x: number, y: number, classes: readonly string[], sample: string, results: readonly string[]) =>
135
+ `<div class="tracking-scope font-md tracking-widest anchor-center" style="${box(x, y)}">${classes.map((name, i) => `<section class="tracking-row" data-tone="${i ? 'violet' : 'blue'}">${label(name, 'code')}<div class="tracking-sample ${escapeHtml(name)}" data-label>${escapeHtml(sample)}</div>${label(results[i], 'edge')}</section>`).join('')}</div>`
136
+ /** Adjacent literal fragments preserve the original string; each bracket follows its fragment's intrinsic width. */
137
+ const codeParts = (x: number, y: number, parts: ({ id: string, value: string, tone: AnnotationTone } | { value: string })[]) =>
138
+ `<div class="annotated-code anchor-center" style="${box(x, y)}">${parts.map(part =>
139
+ 'id' in part
140
+ ? `<span class="code-part" data-tone="${part.tone}">${label(part.value, 'code')}<i class="code-bracket" data-anchor="${escapeHtml(part.id)}"></i></span>`
141
+ : `<span class="code-part">${label(part.value, 'code')}</span>`).join('')}</div>`
142
+ const annotation = (x: number, y: number, id: string, title: string, detail: string, tone: AnnotationTone) =>
143
+ `<div class="annotation anchor-center" style="${box(x, y)}" data-tone="${tone}"><span class="title" data-label data-anchor="${escapeHtml(id)}">${escapeHtml(title)}</span>${label(detail, 'note')}</div>`
144
+ /** The renderer resolves these leaders after fonts load, so they attach to actual content rather than estimated coordinates. */
145
+ const leader = (from: string, to: string, viaY: number, tone: AnnotationTone) => {
146
+ routes.push(`<path data-from="${escapeHtml(from)}" data-to="${escapeHtml(to)}" data-via-y="${viaY}" data-tone="${tone}"/>`)
147
+ return ''
148
+ }
149
+ /** A connector in scene coordinates: arrowed unless it only joins other routes, dashed only for a labelled condition. */
150
+ const route = (d: string, { arrow = true, dashed = false, emphasis = false } = {}) => {
151
+ routes.push(`<path d="${d}"${arrow ? ` marker-end="url(#${emphasis ? 'arrow-emphasis' : 'arrow'})"` : ''}${emphasis ? ' data-emphasis' : ''}${dashed ? ' data-dashed' : ''}/>`)
152
+ return ''
153
+ }
154
+
155
+ function scene(title: string, description: string, content: string) {
156
+ const asset = (path: string) => new URL(path, import.meta.url).href
157
+ const html = `<!doctype html>
158
+ <html lang="en" class="${theme}">
159
+ <head>
160
+ <meta charset="utf-8">
161
+ <title>${escapeHtml(title)}</title>
162
+ <link rel="stylesheet" href="${asset('../../../../styles/system/tokens.css')}">
163
+ <link rel="stylesheet" href="${asset('./illustration.css')}">
164
+ </head>
165
+ <body>
166
+ <main class="scene" style="width:${sceneWidth}px;height:${sceneHeight}px" role="img" aria-label="${escapeHtml(description)}">
167
+ <svg class="routes" width="${sceneWidth}" height="${sceneHeight}" viewBox="0 0 ${sceneWidth} ${sceneHeight}" aria-hidden="true">
168
+ <defs><marker id="arrow" viewBox="0 0 8 8" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto" markerUnits="userSpaceOnUse"><path d="M2.5 1l4 3-4 3"/></marker><marker id="arrow-emphasis" viewBox="0 0 8 8" markerWidth="8" markerHeight="8" refX="7" refY="4" orient="auto" markerUnits="userSpaceOnUse"><path d="M2.5 1l4 3-4 3"/></marker></defs>
169
+ ${routes.join('\n')}
170
+ </svg>
171
+ ${content}
172
+ </main>
173
+ </body>
174
+ </html>
175
+ `
176
+ return { width: sceneWidth, height: sceneHeight, title, description, html }
177
+ }
178
+
179
+ return { theme, icon, label, text, row, rule, bars, sheet, chip, mark, divider, window, spacingControl, selectorSpecimen, queryScopes, sourceContribution, priorityStack, variableScope, codeScope, colorScale, roleSelection, spacingSpecimen, sizingSpecimen, radiusSpecimen, shadowSpecimen, fontComparison, leadingComparison, trackingComparison, codeParts, annotation, leader, route, scene }
180
+ }
@@ -0,0 +1,62 @@
1
+ /** One authored panel shared by the Guide preview, portable source and verification. */
2
+ const maintenanceExample = {
3
+ title: 'Independent roles in one panel',
4
+ source: `@theme {
5
+ --color-brand: light-dark(#4f46e5, #818cf8);
6
+ --color-text-on-brand: light-dark(#ffffff, #18181b);
7
+ --color-information: light-dark(#4f46e5, #c7d2fe);
8
+ }
9
+
10
+ @utility panel-stack(--gap <number>: 1) {
11
+ display: flex;
12
+ flex-direction: column;
13
+ gap: calc(var(--gap) * 1rem);
14
+ }
15
+
16
+ @layer components {
17
+ .card-region { container-type: inline-size; }
18
+ .card { display: grid; gap: 1rem; }
19
+ @container (width >= 30rem) {
20
+ .card { grid-template-columns: 1fr 1fr; }
21
+ }
22
+ .button {
23
+ padding: .625rem 1rem;
24
+ background-color: var(--color-brand);
25
+ color: var(--color-text-on-brand);
26
+ }
27
+ .button:focus-visible { outline: 2px solid var(--color-text-strong); outline-offset: 2px; }
28
+ .button:disabled { opacity: .5; cursor: not-allowed; }
29
+ .progress-fill {
30
+ transform-origin: left;
31
+ transform: scaleX(var(--progress, 0));
32
+ transition: transform 150ms;
33
+ }
34
+ @media (prefers-reduced-motion: reduce) {
35
+ .progress-fill { transition: none; }
36
+ }
37
+ }
38
+
39
+ [data-theme='dark'] { --color-brand: #c4b5fd; color-scheme: dark; }`,
40
+ html: `<section class="card-region p-lg r-lg bg-surface-raised">
41
+ <article class="card">
42
+ <div class="panel-stack(1.5)">
43
+ <h2 class="m(0) fg-brand">Workspace</h2>
44
+ <p class="fg-information">Your files stay available during updates.</p>
45
+ <div class="flex flex-wrap gap-sm">
46
+ <button class="button" type="button">Save</button>
47
+ <button class="button" type="button" disabled>Saving</button>
48
+ </div>
49
+ </div>
50
+ <div aria-hidden="true" class="grid items-center">
51
+ <div class="(height:.5rem) bg-surface-inset">
52
+ <div class="progress-fill (height:.5rem) bg-brand" style="--progress:.4"></div>
53
+ </div>
54
+ </div>
55
+ </article>
56
+ </section>`,
57
+ caption: 'Switch Theme to compare the color roles. The heading, action and progress fill share the brand color; information and action text have their own roles. The buttons demonstrate enabled and disabled states without saving data.',
58
+ guide: '/guide/global-styles',
59
+ theme: true,
60
+ }
61
+
62
+ export default maintenanceExample