@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,197 @@
1
+ import { transitions } from '@master/internal-site/demo/reference/transitions.ts'
2
+ import { transforms } from '@master/internal-site/demo/reference/transforms.ts'
3
+ import { shapes } from '@master/internal-site/demo/reference/shapes.ts'
4
+ import { media } from '@master/internal-site/demo/reference/media.ts'
5
+ import { borderPaint } from '@master/internal-site/demo/reference/border-paint.ts'
6
+ import { edges } from '@master/internal-site/demo/reference/edges.ts'
7
+ import { overscroll, scrolling } from '@master/internal-site/demo/reference/scrolling.ts'
8
+ import { flexbox } from '@master/internal-site/demo/reference/flexbox.ts'
9
+ import { alignment } from '@master/internal-site/demo/reference/alignment.ts'
10
+ import { grid } from '@master/internal-site/demo/reference/grid.ts'
11
+ import { position, inset, stacking, isolation } from '@master/internal-site/demo/reference/positioning.ts'
12
+ import { overflow } from '@master/internal-site/demo/reference/clipping.ts'
13
+ import type { SceneFactory } from '@master/internal-site/demo/reference/types.ts'
14
+ import { flow } from '@master/internal-site/demo/reference/layout.ts'
15
+ import { sizing } from '@master/internal-site/demo/reference/sizing.ts'
16
+ import { textEffects } from '@master/internal-site/demo/reference/text-effects.ts'
17
+ import { textFlow } from '@master/internal-site/demo/reference/text-flow.ts'
18
+ import { typeSpecimens } from '@master/internal-site/demo/reference/type-specimens.ts'
19
+ import { typography } from '@master/internal-site/demo/reference/typography.ts'
20
+ import { effects } from '@master/internal-site/demo/reference/effects.ts'
21
+ import { backgrounds } from '@master/internal-site/demo/reference/backgrounds.ts'
22
+ import { interaction } from '@master/internal-site/demo/reference/interaction.ts'
23
+ import { animations } from '@master/internal-site/demo/reference/animations.ts'
24
+
25
+ /** Explicit utility ownership: no catch-all scene can silently satisfy coverage. */
26
+ export const referenceScenes: Record<string, SceneFactory> = {
27
+ 'accent-color': interaction,
28
+ 'animate': animations,
29
+ 'clamp-lines': textFlow,
30
+ 'column-count': flow,
31
+ 'column-width': flow,
32
+ 'white-space-collapse': textFlow,
33
+ 'text-wrap-mode': textFlow,
34
+ 'text-wrap-style': textFlow,
35
+ 'align-content': alignment,
36
+ 'align-items': alignment,
37
+ 'align-self': alignment,
38
+ 'animation-delay': animations,
39
+ 'animation-direction': animations,
40
+ 'animation-duration': animations,
41
+ 'animation-fill-mode': animations,
42
+ 'animation-iteration-count': animations,
43
+ 'animation-name': animations,
44
+ 'animation-play-state': animations,
45
+ 'animation-timing-function': animations,
46
+ 'appearance': interaction,
47
+ 'aspect-ratio': sizing,
48
+ 'backdrop-filter': effects,
49
+ 'background-attachment': backgrounds,
50
+ 'background-blend-mode': backgrounds,
51
+ 'background-clip': backgrounds,
52
+ 'background-color': backgrounds,
53
+ 'background-image': backgrounds,
54
+ 'background-origin': backgrounds,
55
+ 'background-position': backgrounds,
56
+ 'background-repeat': backgrounds,
57
+ 'background-size': backgrounds,
58
+ 'border-collapse': borderPaint,
59
+ 'border-color': edges,
60
+ 'border-image-outset': borderPaint,
61
+ 'border-image-repeat': borderPaint,
62
+ 'border-image-slice': borderPaint,
63
+ 'border-image-source': borderPaint,
64
+ 'border-image-width': borderPaint,
65
+ 'border-radius': edges,
66
+ 'border-style': edges,
67
+ 'border-width': edges,
68
+ 'box-decoration-break': borderPaint,
69
+ 'box-shadow': edges,
70
+ 'box-sizing': flow,
71
+ 'break-after': flow,
72
+ 'break-before': flow,
73
+ 'break-inside': flow,
74
+ 'caret-color': interaction,
75
+ 'clear': flow,
76
+ 'clip-path': effects,
77
+ 'color': backgrounds,
78
+ 'column-span': flow,
79
+ 'contain': flow,
80
+ 'content': typography,
81
+ 'counter-increment': typography,
82
+ 'counter-reset': typography,
83
+ 'counter-set': typography,
84
+ 'cursor': interaction,
85
+ 'direction': textFlow,
86
+ 'display': flow,
87
+ 'fill': media,
88
+ 'filter': effects,
89
+ 'flex-basis': flexbox,
90
+ 'flex-direction': flexbox,
91
+ 'flex-grow': flexbox,
92
+ 'flex-shrink': flexbox,
93
+ 'flex-wrap': flexbox,
94
+ 'float': flow,
95
+ 'font-family': typeSpecimens,
96
+ 'font-feature-settings': typeSpecimens,
97
+ 'font-size': typeSpecimens,
98
+ 'font-style': typeSpecimens,
99
+ 'font-variant-numeric': typeSpecimens,
100
+ 'font-weight': typeSpecimens,
101
+ 'gap': sizing,
102
+ 'grid-area': grid,
103
+ 'grid-auto-columns': grid,
104
+ 'grid-auto-flow': grid,
105
+ 'grid-auto-rows': grid,
106
+ 'grid-column': grid,
107
+ 'grid-columns': grid,
108
+ 'grid-row': grid,
109
+ 'grid-rows': grid,
110
+ 'grid-template-areas': grid,
111
+ 'grid-template-columns': grid,
112
+ 'grid-template-rows': grid,
113
+ 'height': sizing,
114
+ 'hyphens': textFlow,
115
+ 'inset': inset,
116
+ 'isolation': isolation,
117
+ 'justify-content': alignment,
118
+ 'justify-items': alignment,
119
+ 'justify-self': alignment,
120
+ 'letter-spacing': typeSpecimens,
121
+ 'line-height': typeSpecimens,
122
+ 'list-style-image': typography,
123
+ 'list-style-position': typography,
124
+ 'list-style-type': typography,
125
+ 'margin': sizing,
126
+ 'mask-image': effects,
127
+ 'max-height': sizing,
128
+ 'max-width': sizing,
129
+ 'min-height': sizing,
130
+ 'min-width': sizing,
131
+ 'mix-blend-mode': effects,
132
+ 'object-fit': media,
133
+ 'object-position': media,
134
+ 'opacity': effects,
135
+ 'order': flexbox,
136
+ 'outline-color': edges,
137
+ 'outline-offset': edges,
138
+ 'outline-style': edges,
139
+ 'outline-width': edges,
140
+ 'overflow': overflow,
141
+ 'overflow-wrap': textFlow,
142
+ 'overscroll-behavior': overscroll,
143
+ 'padding': sizing,
144
+ 'place-content': alignment,
145
+ 'place-items': alignment,
146
+ 'place-self': alignment,
147
+ 'pointer-events': interaction,
148
+ 'position': position,
149
+ 'resize': interaction,
150
+ 'screen-readers': interaction,
151
+ 'scroll-behavior': scrolling,
152
+ 'scroll-margin': scrolling,
153
+ 'scroll-padding': scrolling,
154
+ 'scroll-snap-align': scrolling,
155
+ 'scroll-snap-stop': scrolling,
156
+ 'scroll-snap-type': scrolling,
157
+ 'shape-image-threshold': shapes,
158
+ 'shape-margin': shapes,
159
+ 'shape-outside': shapes,
160
+ 'stroke': media,
161
+ 'stroke-width': media,
162
+ 'text-align': textFlow,
163
+ 'text-decoration-color': textEffects,
164
+ 'text-decoration-line': textEffects,
165
+ 'text-decoration-style': textEffects,
166
+ 'text-decoration-thickness': textEffects,
167
+ 'text-fill-color': textEffects,
168
+ 'text-indent': textFlow,
169
+ 'text-orientation': textFlow,
170
+ 'text-overflow': textFlow,
171
+ 'text-rendering': textFlow,
172
+ 'text-shadow': textEffects,
173
+ 'text-size': typeSpecimens,
174
+ 'text-stroke-color': textEffects,
175
+ 'text-stroke-width': textEffects,
176
+ 'text-transform': textFlow,
177
+ 'text-underline-offset': textEffects,
178
+ 'touch-action': interaction,
179
+ 'transform': transforms,
180
+ 'transform-box': transforms,
181
+ 'transform-origin': transforms,
182
+ 'transform-style': transforms,
183
+ 'transition-delay': transitions,
184
+ 'transition-duration': transitions,
185
+ 'transition-property': transitions,
186
+ 'transition-timing-function': transitions,
187
+ 'user-drag': interaction,
188
+ 'user-select': interaction,
189
+ 'vertical-align': typeSpecimens,
190
+ 'visibility': flow,
191
+ 'width': sizing,
192
+ 'will-change': transforms,
193
+ 'word-break': textFlow,
194
+ 'word-spacing': typeSpecimens,
195
+ 'writing-mode': textFlow,
196
+ 'z-index': stacking,
197
+ }
@@ -0,0 +1,66 @@
1
+ import type { DemoScene, ReferenceDemoSection } from '@master/internal-site/demo/reference/types.ts'
2
+ import { classValue, comparison, label } from '@master/internal-site/demo/reference/html.ts'
3
+
4
+ const positionReadout = (id: string) => `<output data-scroll-readout="${id}">x 0 · y 0 px</output>`
5
+ const scrollActions = (content: string) => `<div data-ui="scroll-actions" role="group" aria-label="Scroll destinations">${content}</div>`
6
+ const destination = (id: string, name: string) => `<button type="button" data-scroll-to="${id}">${name}</button>`
7
+
8
+ /** Keep all layout, overflow and snap prerequisites in the portable authored HTML. */
9
+ function decorate(html: string, target: string) {
10
+ return html.replace(/<(div|section|article|header|nav|a)(\s[^>]*|)>/g, (tag: string, element: string, attributes: string) => {
11
+ const id = attributes.match(/\bid="([^"]+)"/)?.[1]
12
+ const ui = id === 'scrollport' ? 'scrollport'
13
+ : id && /^(?:overview|details|resources|panel-\d)$/.test(id) ? 'scroll-panel'
14
+ : element === 'header' ? 'scroll-header' : element === 'nav' ? 'scroll-actions' : undefined
15
+ const href = element === 'a' && attributes.match(/\bhref="#([\w-]+)"/)?.[1]
16
+ return `<${element}${attributes}${ui ? ` data-ui="${ui}"` : ''}${id === target ? ' data-target' : ''}${href ? ` data-scroll-to="${href}"` : ''}>`
17
+ })
18
+ }
19
+
20
+ export function overscroll(section: ReferenceDemoSection): DemoScene {
21
+ const horizontal = section.id === 'keep-horizontal-gestures-local'
22
+ const sample = (baseline: boolean) => {
23
+ const prefix = baseline ? 'auto' : 'class'
24
+ const outer = `${prefix}-outer`, inner = `${prefix}-inner`
25
+ const html = section.html[0]
26
+ .replace('id="outer-scroll"', `id="${outer}" data-ui="nested-outer"`)
27
+ .replace('id="inner-scroll"', `id="${inner}" data-ui="nested-inner"${baseline ? ' style="overscroll-behavior:auto"' : ' data-target'}`)
28
+ .replace(/<div class="([^\"]+)">(Inner collection|Outer collection continues)<\/div>/g, (_, classes: string, text: string) => `<div data-ui="nested-content" class="${classValue(classes)}">${text}<span aria-hidden="true">${text.startsWith('Inner') ? 'Inner end' : 'Outer end'}</span></div>`)
29
+ return `${scrollActions(`<button type="button" data-scroll-container="${inner}" data-scroll-edge="end">Inner to end</button><button type="button" data-scroll-container="${outer}" data-scroll-edge="start">Reset outer</button>`)}${html}<div data-ui="scroll-readings"><span>Inner ${positionReadout(inner)}</span><span>Outer ${positionReadout(outer)}</span></div>`
30
+ }
31
+ return {
32
+ html: comparison([{ name: 'Automatic · allows chaining', content: sample(true) }, { name: 'With class', content: sample(false) }]).replace('data-ui="comparison"', 'data-ui="comparison" data-scenario="nested-scrolling"'),
33
+ caption: horizontal ? 'Send the inner track to its right edge, then scroll horizontally over it. The outer x value exposes whether the gesture chains.' : 'Send the inner list to its bottom edge, then continue scrolling over it. Compare the outer y value; the iframe keeps both experiments separate from the document.',
34
+ inspect: ['overscroll-behavior-x', 'overscroll-behavior-y'], sizing: 'content',
35
+ }
36
+ }
37
+
38
+ export function scrolling(section: ReferenceDemoSection): DemoScene {
39
+ const { page, id } = section
40
+ const source = section.html[0]
41
+ const panels = source.includes('id="panel-1"')
42
+ const target = page === 'scroll-margin' ? panels ? 'panel-2' : 'details'
43
+ : page === 'scroll-snap-align' ? id === 'disable-item-snapping' ? 'panel-2' : 'panel-4' : page === 'scroll-snap-stop' ? 'panel-2' : 'scrollport'
44
+ let controls = source.includes('<nav') ? '' : scrollActions(panels
45
+ ? (source.includes('id="panel-6"') ? [1, 2, 4, 6] : [1, 2, 3, 4]).map(index => destination(`panel-${index}`, `Panel ${index}`)).join('')
46
+ : destination('overview', 'Overview') + destination('details', 'Details') + destination('resources', 'Resources'))
47
+ if (page === 'scroll-snap-stop') {
48
+ controls = scrollActions('<button type="button" data-scroll-container="scrollport" data-scroll-edge="start">Reset</button><button type="button" data-scroll-by="scrollport" data-scroll-distance="600">Advance</button>')
49
+ }
50
+ const captions: Record<string, string> = {
51
+ 'scroll-behavior': id === 'keep-static-output-immediate' ? 'Choose a destination to make an immediate native jump.' : 'Choose a destination to trigger native navigation. Smooth timing belongs to the browser; reduced motion keeps navigation immediate.',
52
+ 'scroll-margin': 'The blue target owns the scroll margin. Choose it to inspect the inset; its layout size and the spacing between items stay unchanged.',
53
+ 'scroll-padding': 'The scroll container owns the viewing inset. Choose an interior target to see its alignment without reaching the track’s boundary.',
54
+ 'scroll-snap-align': id === 'disable-item-snapping' ? 'The second panel remains in the layout but supplies no snap position. The other panels keep their start-aligned stops.' : 'Choose Panel 4 or scroll the track. Snap alignment determines where the selected item settles within the viewing area.',
55
+ 'scroll-snap-stop': 'Reset, then Advance by the same immediate 600px request. Always stops a directional scroll at the next eligible point; normal allows it to pass.',
56
+ 'scroll-snap-type': id === 'apply-conditionally' ? 'Resize to change both the track direction and snapping axis. The panels use the same responsive classes as the displayed HTML.' : 'Scroll the actual track. Mandatory requires an available stop; proximity leaves the browser discretion about nearby positions.',
57
+ }
58
+ const inset = page === 'scroll-margin' || page === 'scroll-padding'
59
+ ? `<span>Target inset <output data-scroll-offset="${panels ? 'panel-2' : 'details'}" data-scrollport="scrollport" data-scroll-axis="${panels ? 'x' : 'y'}">—</output></span>` : ''
60
+ const property = page === 'scroll-margin' ? panels ? 'scroll-margin-left' : 'scroll-margin-top'
61
+ : page === 'scroll-padding' ? panels ? 'scroll-padding-left' : 'scroll-padding-top' : page
62
+ return {
63
+ html: `${controls}${decorate(source, target)}<div data-ui="scroll-readings"><span>Scroll ${positionReadout('scrollport')}</span>${inset}</div>${page === 'scroll-snap-stop' ? label('Advance is a relative scroll request; direct endpoint navigation can skip a stop.') : ''}`,
64
+ caption: captions[page], inspect: [property], sizing: 'content',
65
+ }
66
+ }
@@ -0,0 +1,22 @@
1
+ import type { DemoScene, ReferenceDemoSection } from '@master/internal-site/demo/reference/types.ts'
2
+ import { typeSpecimens } from '@master/internal-site/demo/reference/type-specimens.ts'
3
+
4
+ const properties: Record<string, string[]> = {
5
+ 'shape-outside': ['shape-outside'],
6
+ 'shape-margin': ['shape-outside', 'shape-margin'],
7
+ 'shape-image-threshold': ['shape-outside', 'shape-image-threshold'],
8
+ }
9
+
10
+ const captions: Record<string, string> = {
11
+ 'shape-outside': 'The artwork and float box are explicit. Shape-outside changes the space available to adjacent inline content without clipping the artwork.',
12
+ 'shape-margin': 'The same painted circle and ordinary margins are preserved. Shape-margin expands the wrap boundary within the float’s margin box.',
13
+ 'shape-image-threshold': 'Image paint is unchanged. The browser extracts the wrap shape from pixels whose alpha exceeds the threshold; a basic shape uses its own geometry.',
14
+ }
15
+
16
+ /** Keep actual float placement, inline flow and image-alpha geometry in authored HTML. */
17
+ export function shapes(section: ReferenceDemoSection): DemoScene {
18
+ return typeSpecimens(section, {
19
+ appearance: 'plain', properties: properties[section.page],
20
+ measure: true, caption: captions[section.page],
21
+ })
22
+ }
@@ -0,0 +1,43 @@
1
+ import type { DemoScene, ReferenceDemoSection } from '@master/internal-site/demo/reference/types.ts'
2
+ import { label } from '@master/internal-site/demo/reference/html.ts'
3
+ import { paintLayout } from '@master/internal-site/demo/reference/layout-html.ts'
4
+
5
+ const properties: Record<string, string[]> = {
6
+ width: ['width'], height: ['height'],
7
+ 'min-width': ['min-width'], 'min-height': ['min-height'],
8
+ 'max-width': ['max-width'], 'max-height': ['max-height'],
9
+ 'aspect-ratio': ['aspect-ratio'], gap: ['row-gap', 'column-gap'], margin: ['margin'], padding: ['padding'],
10
+ }
11
+
12
+ /** The displayed HTML owns every dimension, constraint, gap and content item. */
13
+ export function sizing(section: ReferenceDemoSection): DemoScene {
14
+ const { page, id } = section
15
+ const viewportHeight = ['use-viewport-and-intrinsic-values', 'build-viewport-sections', 'use-viewport-caps'].includes(id)
16
+ const responsive = page === 'width' && id === 'use-container-widths-for-wrappers'
17
+ || page === 'max-width' && id === 'use-viewport-and-container-caps'
18
+ const html = section.html.map((source, index) => {
19
+ const prefix = section.html.length > 1 ? `example-${index}-` : ''
20
+ const layout = `${prefix}layout`, target = `${prefix}target`, content = `${prefix}item-3`
21
+ const title = source.match(/^<!-- ([^>]+) -->/)?.[1]
22
+ const subject = page === 'gap' ? layout : target
23
+ const style = properties[page].map(property => `<span>${property} <output data-style-readout="${subject}" data-style-property="${property}" data-round-pixels>—</output></span>`).join('')
24
+ const contentReading = page === 'padding' ? `<span>Content <output data-size-readout="${content}">—</output></span><span>Content inset <output data-position-readout="${content}" data-position-origin="${target}">—</output></span>` : ''
25
+ const scroll = page === 'max-height' && source.includes('tabindex="0"') ? `<span>Scroll <output data-scroll-readout="${target}">—</output></span>` : ''
26
+ const position = page === 'margin' ? `<span>Blue offset <output data-position-readout="${target}" data-position-origin="${layout}">—</output></span>` : ''
27
+ const readingSpace = page === 'min-height' && id === 'let-content-define-the-final-size' && index === 0 ? ' class="mt-xl"' : ''
28
+ return `<section data-ui="layout-example">${title ? label(title) : ''}${paintLayout(source, prefix, index === 0 ? page === 'gap' ? 'layout' : 'target' : '')}<div data-ui="layout-readings"${readingSpace}><span>Parent <output data-size-readout="${layout}">—</output></span><span>Blue box <output data-size-readout="${target}">—</output></span>${style}${contentReading}${position}${scroll}</div></section>`
29
+ }).join('')
30
+ const captions: Record<string, string> = {
31
+ width: 'The dashed outline is the authored containing block. Read the actual blue border-box width alongside its parent.',
32
+ height: viewportHeight ? 'This is a real 320px-tall viewport. Scroll inside it to compare the viewport-based and content-based heights.' : 'The parent and blue box are measured separately. Percentage height needs a definite reference in these normal-flow examples.',
33
+ 'min-width': 'Compare the preferred width with its actual lower bound. The blue measurement includes padding but excludes its decorative outline.',
34
+ 'min-height': viewportHeight ? 'The blue minimum is 100% of this 320px viewport. Scroll inside to reach the lower edge; the frame does not grow with its content.' : 'A minimum establishes a floor. Real content can make the blue box taller than that floor.',
35
+ 'max-width': 'The maximum limits the preferred width. A viewport cap, a parent percentage and a theme token use different references.',
36
+ 'max-height': 'The blue box is measured independently of its content. Named scroll regions keep excess content reachable with a keyboard or pointer.',
37
+ 'aspect-ratio': 'The ratio is a preferred constraint. An automatic dimension can follow it; two definite dimensions take precedence.',
38
+ gap: 'The parent owns the gaps. The colored children have no margins; extra space at the outer edge is not a gap.',
39
+ margin: 'Margin is outside the painted blue border box. The dashed parent shows its actual position and surrounding space.',
40
+ padding: 'Blue surrounds the neutral content. The content inset reports physical left and top padding; the padding value lists the physical sides.',
41
+ }
42
+ return { html, caption: captions[page], height: viewportHeight ? 320 : undefined, sizing: viewportHeight ? 'viewport' : 'content', responsive: responsive || undefined, inspect: id === 'apply-conditionally' ? [] : undefined }
43
+ }
@@ -0,0 +1,8 @@
1
+ import { readFile } from 'node:fs/promises'
2
+ import type { ReferenceDemoSection } from '@master/internal-site/demo/reference/types.ts'
3
+
4
+ /** Authored specimens retained for the site design-system gallery, independent of retired articles. */
5
+ export async function referenceDemoSections(page: string): Promise<ReferenceDemoSection[]> {
6
+ if (!/^[a-z][a-z0-9-]+$/.test(page)) throw new Error(`Invalid demo specimen: ${page}`)
7
+ return JSON.parse(await readFile(new URL(`../specimens/${page}.json`, import.meta.url), 'utf8'))
8
+ }
@@ -0,0 +1,37 @@
1
+ import type { DemoScene, ReferenceDemoSection } from '@master/internal-site/demo/reference/types.ts'
2
+ import { typeSpecimens } from '@master/internal-site/demo/reference/type-specimens.ts'
3
+
4
+ const properties: Record<string, string[]> = {
5
+ 'text-decoration': ['text-decoration-line', 'text-decoration-style', 'text-decoration-color', 'text-decoration-thickness'],
6
+ 'text-decoration-color': ['color', 'text-decoration-color', 'text-decoration-line'],
7
+ 'text-decoration-line': ['text-decoration-line', 'text-decoration-style', 'text-decoration-color'],
8
+ 'text-decoration-style': ['text-decoration-line', 'text-decoration-style', 'text-decoration-thickness'],
9
+ 'text-decoration-thickness': ['text-decoration-line', 'text-decoration-thickness', 'text-underline-offset'],
10
+ 'text-underline-offset': ['text-underline-offset', 'text-decoration-thickness'],
11
+ 'text-fill-color': ['color', '-webkit-text-fill-color'],
12
+ 'text-shadow': ['text-shadow'],
13
+ 'text-stroke': ['-webkit-text-stroke-width', '-webkit-text-stroke-color', '-webkit-text-fill-color'],
14
+ 'text-stroke-color': ['-webkit-text-stroke-color', '-webkit-text-stroke-width', '-webkit-text-fill-color'],
15
+ 'text-stroke-width': ['-webkit-text-stroke-width', '-webkit-text-stroke-color'],
16
+ }
17
+ const captions: Record<string, string> = {
18
+ 'text-decoration': 'The readings describe the element that originates the decoration. A descendant can have no decoration of its own while the ancestor’s line still paints through its inline text.',
19
+ 'text-decoration-color': 'Compare the actual foreground and line colors. A transparent decoration hides its paint without hiding the glyphs.',
20
+ 'text-decoration-line': 'Choose the decoration line independently from its style, color and thickness.',
21
+ 'text-decoration-style': 'The authored underline supplies a real line. Its style changes the pattern while preserving its thickness.',
22
+ 'text-decoration-thickness': 'The computed value can remain auto or from-font; those keywords are not pixel measurements. Explicit thickness changes paint without resizing the text box.',
23
+ 'text-underline-offset': 'The underline moves relative to the text baseline. Offset does not add padding or increase the line box.',
24
+ 'text-fill-color': 'Glyph fill is independent of the foreground color. The plain surface adds no fill, stroke or background to the subject.',
25
+ 'text-shadow': 'These are native glyph shadows. The surrounding surface gives the paint room; the shadow does not increase the text’s layout box.',
26
+ 'text-stroke': 'The authored width, edge color and fill determine the visible glyph. A transparent fill needs a visible outline; zero-width strokes paint no edge.',
27
+ 'text-stroke-color': 'Every specimen supplies a nonzero stroke width. Changing edge color leaves the fill and font geometry intact.',
28
+ 'text-stroke-width': 'Compare the same glyphs at the same font size. The width changes the painted edge; box measurements expose the unchanged layout geometry.',
29
+ }
30
+
31
+ /** Leave the authored glyph paint untouched; keep labels and readings outside it. */
32
+ export function textEffects(section: ReferenceDemoSection): DemoScene {
33
+ return typeSpecimens(section, {
34
+ properties: properties[section.page], caption: captions[section.page],
35
+ appearance: 'plain', measure: true,
36
+ })
37
+ }
@@ -0,0 +1,41 @@
1
+ import type { DemoScene, ReferenceDemoSection } from '@master/internal-site/demo/reference/types.ts'
2
+ import { typeSpecimens } from '@master/internal-site/demo/reference/type-specimens.ts'
3
+
4
+ const properties: Record<string, string[]> = {
5
+ 'text-align': ['text-align', 'direction'], 'text-indent': ['text-indent'],
6
+ 'text-transform': ['text-transform'], 'text-wrap-mode': ['text-wrap-mode'], 'text-wrap-style': ['text-wrap-style'],
7
+ 'white-space-collapse': ['white-space-collapse'], 'word-break': ['word-break'],
8
+ 'overflow-wrap': ['overflow-wrap'], 'hyphens': ['hyphens'],
9
+ 'clamp-lines': ['-webkit-line-clamp', 'display', 'overflow'],
10
+ 'text-overflow': ['text-overflow', 'white-space', 'overflow'],
11
+ 'direction': ['direction', 'unicode-bidi'],
12
+ 'writing-mode': ['writing-mode', 'text-orientation'],
13
+ 'text-orientation': ['writing-mode', 'text-orientation'],
14
+ 'text-rendering': ['text-rendering'],
15
+ }
16
+ const captions: Record<string, string> = {
17
+ 'text-align': 'The blue outline is the paragraph’s box. Alignment moves its inline content; it does not position the paragraph itself.',
18
+ 'text-indent': 'Follow the first line’s starting edge. Later lines retain their normal position inside the same paragraph.',
19
+ 'text-transform': 'The browser changes the presentation. The authored words, language and underlying text remain intact.',
20
+ 'text-wrap-mode': 'Wrapping controls whether text fits within the available inline size.',
21
+ 'text-wrap-style': 'The text and line width are identical across the comparison. Exact breaks depend on the browser’s wrapping algorithm and loaded font.',
22
+ 'white-space-collapse': 'The specimens preserve the exact spaces and line breaks in the adjacent source. Annotation text stays outside that context.',
23
+ 'word-break': 'Real text and native line-breaking rules determine the result. Any deliberate overflow remains available in the named scroll region.',
24
+ 'overflow-wrap': 'Compare the authored constraints and actual box sizes. Emergency breaks and intrinsic width are separate parts of text layout.',
25
+ 'hyphens': 'Automatic hyphenation depends on the declared language and the browser’s dictionaries. Manual soft hyphens provide explicit opportunities.',
26
+ 'clamp-lines': 'Clamping limits the visible lines. Preserve the complete source and provide another reading path whenever the omitted text is needed.',
27
+ 'text-overflow': 'A marker needs actual clipped inline content. The example owns its width, display, wrapping and overflow rules.',
28
+ 'direction': 'Language and semantic direction remain in the markup. CSS direction sets the local base direction without reversing the source characters.',
29
+ 'writing-mode': 'Writing mode sets line orientation and block progression. The authored dimensions make the column direction visible.',
30
+ 'text-orientation': 'These are native vertical text runs. Compare Latin and CJK glyph orientation without rotating the entire element.',
31
+ 'text-rendering': 'This is a rendering hint, not a measured speed or quality improvement. Visible differences depend on the browser, platform and font.',
32
+ }
33
+
34
+ /** Use the authored language, whitespace, nested context and clipping prerequisites. */
35
+ export function textFlow(section: ReferenceDemoSection): DemoScene {
36
+ return typeSpecimens(section, {
37
+ properties: properties[section.page], measure: true,
38
+ caption: captions[section.page],
39
+ pseudo: section.page === 'text-transform' && section.id === 'sentence' ? '::first-letter' : undefined,
40
+ })
41
+ }
@@ -0,0 +1,26 @@
1
+ import type { DemoScene, ReferenceDemoSection } from '@master/internal-site/demo/reference/types.ts'
2
+ import { typeSpecimens } from '@master/internal-site/demo/reference/type-specimens.ts'
3
+
4
+ const properties: Record<string, string[]> = {
5
+ 'transform': ['transform', 'transform-origin'],
6
+ 'transform-origin': ['transform-origin', 'transform'],
7
+ 'transform-box': ['transform-box'],
8
+ 'transform-style': ['transform-style', 'opacity'],
9
+ 'will-change': ['will-change', 'transform', 'opacity'],
10
+ }
11
+ const captions: Record<string, string> = {
12
+ 'transform': 'The authored guide keeps the original layout slot visible. Client bounds follow the transformed element’s getBoundingClientRect, not its unchanged layout dimensions.',
13
+ 'transform-origin': 'The reference dimensions, pivot and transform are authored together. Markers stay outside the transformed element; the guides reveal displacement while client bounds report transformed width and height.',
14
+ 'transform-box': 'The complete HTML or SVG preserves source geometry. Reference boxes control percentages and pivots; client bounds use getBoundingClientRect and do not include an SVG stroke’s full paint.',
15
+ 'transform-style': 'The parent, front layer and perspective form a real 3D context. Compare the child’s geometry: grouping effects can flatten it even when the computed keyword remains preserve-3d.',
16
+ 'will-change': 'The readout observes the actual hint. Native controls remain visible and operable; this specimen does not measure speed or prove compositing-layer promotion.',
17
+ }
18
+
19
+ /** Keep native control states, SVG coordinates and nested 3D contexts in authored HTML. */
20
+ export function transforms(section: ReferenceDemoSection): DemoScene {
21
+ return typeSpecimens(section, {
22
+ appearance: 'plain', properties: properties[section.page],
23
+ measure: section.page !== 'transform-style', measureLabel: 'Client bounds',
24
+ caption: captions[section.page],
25
+ })
26
+ }
@@ -0,0 +1,24 @@
1
+ import type { DemoScene, ReferenceDemoSection } from '@master/internal-site/demo/reference/types.ts'
2
+ import { typeSpecimens } from '@master/internal-site/demo/reference/type-specimens.ts'
3
+
4
+ const properties: Record<string, string[]> = {
5
+ 'transition': ['transition-property', 'transition-duration', 'transition-timing-function', 'transition-delay'],
6
+ 'transition-property': ['transition-property', 'transition-duration'],
7
+ 'transition-duration': ['transition-duration', 'transition-timing-function'],
8
+ 'transition-delay': ['transition-delay', 'transition-duration'],
9
+ 'transition-timing-function': ['transition-timing-function', 'transition-duration'],
10
+ }
11
+ const captions: Record<string, string> = {
12
+ 'transition': 'The native control changes an authored CSS endpoint. The transition comes from the displayed classes; reduced motion and print keep the update immediate.',
13
+ 'transition-property': 'Each control changes the same authored endpoints. Only properties in the selected list interpolate; unrelated changes remain immediate.',
14
+ 'transition-duration': 'The control, travel distance and easing stay explicit. Duration is the interpolation interval, independent of any start delay.',
15
+ 'transition-delay': 'The visible control changes the endpoint before the layer starts moving. Each changing child owns its duration and delay; they are not inherited.',
16
+ 'transition-timing-function': 'The native transition keeps its authored duration and endpoints. Compare how the curve distributes progress, or how steps advances at discrete boundaries.',
17
+ }
18
+
19
+ /** Native controls and complete authored states own each transition timeline. */
20
+ export function transitions(section: ReferenceDemoSection): DemoScene {
21
+ return typeSpecimens(section, {
22
+ appearance: 'plain', properties: properties[section.page], caption: captions[section.page],
23
+ })
24
+ }
@@ -0,0 +1,56 @@
1
+ import type { DemoScene, ReferenceDemoSection } from '@master/internal-site/demo/reference/types.ts'
2
+ import { escape, label } from '@master/internal-site/demo/reference/html.ts'
3
+
4
+ const properties: Record<string, string[]> = {
5
+ 'font-family': ['font-family'], 'font-size': ['font-size', 'line-height'],
6
+ 'font-weight': ['font-weight'], 'font-style': ['font-style'],
7
+ 'font-feature-settings': ['font-feature-settings'], 'font-variant-numeric': ['font-variant-numeric'],
8
+ 'letter-spacing': ['letter-spacing'], 'word-spacing': ['word-spacing'],
9
+ 'line-height': ['font-size', 'line-height'], 'vertical-align': ['vertical-align'],
10
+ 'text-size': ['font-size', 'line-height', 'letter-spacing'],
11
+ }
12
+
13
+ /** Keep authored inline contexts, inheritance, font resources and table structure intact. */
14
+ export function typeSpecimens(section: ReferenceDemoSection, options?: { properties: string[], caption: string, measure?: boolean, measureLabel?: string, pseudo?: string, appearance?: 'plain' }): DemoScene {
15
+ const { page, id } = section
16
+ let head = '', bodyClass = ''
17
+ const html = section.html.map((source, index) => {
18
+ const prefix = section.html.length > 1 ? `example-${index}-` : ''
19
+ const title = source.match(/^<!-- ([^>]+) -->/)?.[1]
20
+ head += source.match(/<head>([\s\S]*?)<\/head>/)?.[1] ?? ''
21
+ const body = source.match(/<body(?: class="([^"]*)")?>([\s\S]*?)<\/body>/)
22
+ if (body) { bodyClass = body[1] ?? ''; source = body[2] }
23
+ const target = `${prefix}target`
24
+ const ids = new Set([...source.matchAll(/\bid="([^"]+)"/g)].map(match => match[1]))
25
+ let content = source.replace(/\bid="([^"]+)"/g, (_, name: string) => `id="${prefix}${name}"${name === 'target' ? ` data-target data-ui="type-target"${options?.appearance ? ` data-appearance="${options.appearance}"` : ''}` : ''}`)
26
+ // Independent comparisons scope both IDs and their native/accessible references.
27
+ if (prefix) {
28
+ content = content.replace(/\b(for|list|headers|aria-labelledby|aria-describedby|aria-controls|aria-activedescendant|aria-details|aria-errormessage|aria-owns|aria-flowto|popovertarget)="([^"]+)"/g,
29
+ (_, attribute: string, value: string) => `${attribute}="${value.split(/\s+/).map(id => ids.has(id) ? prefix + id : id).join(' ')}"`)
30
+ content = content.replace(/\bhref="#([^"]+)"/g, (attribute, id: string) => ids.has(id) ? `href="#${prefix}${id}"` : attribute)
31
+ }
32
+ const observed = options?.properties ?? (page === 'font-feature-settings' && id === 'prefer-semantic-numeric-utilities' ? [...properties[page], 'font-variant-numeric'] : properties[page])
33
+ const readings = observed.map(property => `<span>${options?.pseudo ? `${escape(options.pseudo)} ` : ''}${property} <output data-style-readout="${target}" data-style-property="${property}" ${options?.pseudo ? `data-style-pseudo="${escape(options.pseudo)}" ` : ''}${/^(font-size|line-height)$/.test(property) ? 'data-round-pixels' : ''}>—</output></span>`).join('')
34
+ const runs = ['ones', 'eights', 'inherited'].filter(name => source.includes(`id="${name}"`)).map(name => `<span>${name} <output data-size-readout="${prefix}${name}">—</output></span>`).join('')
35
+ const size = options?.measure ? `<span>${escape(options.measureLabel ?? 'Box')} <output data-size-readout="${target}">—</output></span>` : source.match(/id="target" class="[^"]*\binline-block\b/) && /letter-spacing|word-spacing/.test(page) ? `<span>Run box <output data-size-readout="${target}">—</output></span>` : ''
36
+ const family = page === 'font-family' && id === 'google-fonts' ? 'Roboto'
37
+ : page === 'font-family' && id === 'self-hosted-fonts' ? 'Geist'
38
+ : page === 'font-variant-numeric' && id === 'show-slashed-zeroes' ? 'JetBrains Mono' : undefined
39
+ const loading = family ? `<span>${escape(family)} <output data-font-status="${escape(family)}">Checking font…</output></span>` : ''
40
+ return `<section data-ui="type-example" data-tone="${index % 2 ? 'violet' : 'blue'}">${title ? label(title) : ''}<div data-ui="type-surface">${content}</div><div data-ui="type-readings">${readings}${runs}${size}${loading}</div></section>`
41
+ }).join('')
42
+ const captions: Record<string, string> = {
43
+ 'font-family': 'The examples keep their real inheritance and font sources. A computed family list names the requested stack; it does not identify which face rendered every glyph.',
44
+ 'font-size': 'Read the computed font size and line height separately. The preview grows with its content, so a larger type size remains visible.',
45
+ 'font-weight': 'The local variable font supports 100–900. Every specimen keeps the same text; available faces determine the result in another family.',
46
+ 'font-style': id === 'reset-font-style' ? 'The blue child resets its inherited slant. The surrounding words keep their italic style.' : 'The readout follows the styled subject. The selected font and available faces determine whether the browser uses a designed or synthesized slant.',
47
+ 'font-feature-settings': 'Glyph-run measurements include the actual text advance. Raw feature settings are reported independently of numeric variants.',
48
+ 'font-variant-numeric': 'The selected font must support the feature. Compare actual digits as well as computed values; equal digit counts make advances comparable.',
49
+ 'letter-spacing': 'The label, computed value and comparison stay outside the text context. Tracking can also change wrapping.',
50
+ 'line-height': 'The readout is the computed line height, not glyph height. Mixed sizes, inline objects and inherited values can affect the final line box.',
51
+ 'word-spacing': 'The value adds to the normal word separator. Compare the same content at the same size to isolate the effect.',
52
+ 'vertical-align': 'These are actual inline boxes and table cells. The annotations are outside the formatting context and cannot become extra inline content.',
53
+ 'text-size': 'One utility controls three properties. Compare the actual size, leading and tracking at the preview’s reading width.',
54
+ }
55
+ return { html, head, bodyClass, caption: options?.caption ?? captions[page], sizing: 'content', responsive: page === 'font-size' && id === 'use-an-explicit-font-size' || undefined, inspect: [] }
56
+ }
@@ -0,0 +1,30 @@
1
+ export interface ReferenceDemoSection {
2
+ page: string
3
+ id: string
4
+ title: string
5
+ html: string[]
6
+ css: string
7
+ classes: string[]
8
+ classLists: string[]
9
+ highlighted: string[]
10
+ }
11
+
12
+ export interface DemoScene {
13
+ html: string
14
+ /** Trusted resources and body classes from authored whole-document examples. */
15
+ head?: string
16
+ bodyClass?: string
17
+ /** Supporting interface only; taught class examples must remain independent of private ui-* styles. */
18
+ systemButtons?: boolean
19
+ caption: string
20
+ height?: number
21
+ maxWidth?: number
22
+ sizing?: 'viewport' | 'content'
23
+ inspect?: string[]
24
+ motion?: boolean
25
+ theme?: boolean
26
+ responsive?: boolean
27
+ css?: string
28
+ }
29
+
30
+ export type SceneFactory = (section: ReferenceDemoSection) => DemoScene
@@ -0,0 +1,32 @@
1
+ import type { DemoScene, ReferenceDemoSection } from '@master/internal-site/demo/reference/types.ts'
2
+ import { typeSpecimens } from '@master/internal-site/demo/reference/type-specimens.ts'
3
+
4
+ const properties: Record<string, string[]> = {
5
+ content: ['content'],
6
+ 'counter-increment': ['counter-increment'],
7
+ 'counter-reset': ['counter-reset'],
8
+ 'counter-set': ['counter-set', 'counter-increment'],
9
+ 'list-style': ['list-style-type', 'list-style-position', 'list-style-image'],
10
+ 'list-style-image': ['list-style-image', 'list-style-type', 'list-style-position'],
11
+ 'list-style-position': ['list-style-position', 'list-style-type'],
12
+ 'list-style-type': ['list-style-type', 'list-style-position', 'list-style-image'],
13
+ }
14
+ const captions: Record<string, string> = {
15
+ content: 'The readout observes the actual ::after pseudo-element. The link remains a native, keyboard-accessible anchor with meaningful text in the HTML.',
16
+ 'counter-increment': 'The first heading or item supplies the reported increment. The visible prefixes are resolved by the browser’s native counter, not inserted numbers.',
17
+ 'counter-reset': 'The readout reports the scope’s initial counter declaration. Each item then changes the value before its generated prefix is painted.',
18
+ 'counter-set': 'The readout follows the element that sets the counter. Reset, increment and set are separate operations; following elements continue from the resulting value.',
19
+ 'list-style': 'The authored list keeps real list items and room for outside markers. Read the type, position and image properties independently.',
20
+ 'list-style-image': 'These are native image markers. The image takes precedence over the type; the type remains available when the image is absent or unavailable.',
21
+ 'list-style-position': 'Identical content and width reveal the wrapped-line alignment. Marker position is independent of the surrounding label and property readout.',
22
+ 'list-style-type': 'Marker appearance does not change the list’s HTML meaning. The readout distinguishes the requested type from a potentially overriding image.',
23
+ }
24
+
25
+ /** Keep counter scopes, descendant selectors and semantic list structure exactly as authored. */
26
+ export function typography(section: ReferenceDemoSection): DemoScene {
27
+ if (!properties[section.page]) throw new Error(`Unassigned typography recipe: ${section.page}#${section.id}`)
28
+ return typeSpecimens(section, {
29
+ properties: properties[section.page], caption: captions[section.page],
30
+ appearance: 'plain', pseudo: section.page === 'content' ? '::after' : undefined,
31
+ })
32
+ }