@master/internal-site 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (687) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +66 -2
  3. package/dist/astro.d.mts +3 -0
  4. package/dist/astro.mjs +510 -0
  5. package/dist/config.d.mts +64 -0
  6. package/dist/config.mjs +10 -0
  7. package/package.json +384 -4
  8. package/src/astro/Page.astro +12 -0
  9. package/src/astro/content-pages.ts +75 -0
  10. package/src/astro/index.ts +124 -0
  11. package/src/astro/module-id.ts +4 -0
  12. package/src/astro/propagated-assets.ts +29 -0
  13. package/src/astro/route-paths.ts +78 -0
  14. package/src/astro/routes.template.ts +110 -0
  15. package/src/astro/server-styles.ts +26 -0
  16. package/src/astro/site-context.ts +27 -0
  17. package/src/astro/source-url.ts +22 -0
  18. package/src/astro/svelte-renderer.ts +45 -0
  19. package/src/astro/svg-markup.ts +23 -0
  20. package/src/benchmarks/BenchmarkBarRows.astro +34 -0
  21. package/src/benchmarks/BenchmarkBars.astro +14 -0
  22. package/src/benchmarks/BenchmarkChart.astro +53 -0
  23. package/src/benchmarks/BenchmarkChartGroup.astro +24 -0
  24. package/src/benchmarks/BenchmarkDataTable.astro +24 -0
  25. package/src/benchmarks/BenchmarkDelta.astro +23 -0
  26. package/src/benchmarks/BenchmarkFigure.astro +30 -0
  27. package/src/benchmarks/BenchmarkMetricTable.astro +38 -0
  28. package/src/benchmarks/BenchmarkMetrics.astro +23 -0
  29. package/src/benchmarks/BenchmarkSampleSummary.astro +30 -0
  30. package/src/benchmarks/BenchmarkScrollRegion.svelte +27 -0
  31. package/src/benchmarks/BenchmarkSource.astro +20 -0
  32. package/src/benchmarks/BenchmarkStackedBars.astro +54 -0
  33. package/src/benchmarks/BenchmarkStatus.astro +16 -0
  34. package/src/benchmarks/types.ts +98 -0
  35. package/src/benchmarks/utils.ts +42 -0
  36. package/src/blog/BlogAuthors.astro +25 -0
  37. package/src/blog/article/BlogArticleContents.svelte +24 -0
  38. package/src/blog/article/BlogArticleEnd.astro +55 -0
  39. package/src/blog/article/BlogArticleMasthead.astro +61 -0
  40. package/src/blog/article/language.ts +29 -0
  41. package/src/blog/article/neighbors.ts +27 -0
  42. package/src/blog/article/title-lines.astro +14 -0
  43. package/src/blog/article/title-parts.ts +9 -0
  44. package/src/components.d.ts +5 -0
  45. package/src/config.ts +66 -0
  46. package/src/css/ButtonPreview.astro +22 -0
  47. package/src/css/ConfiguredExample.astro +15 -0
  48. package/src/css/NamespaceUtilityTable.astro +50 -0
  49. package/src/css/StylesheetExample.astro +15 -0
  50. package/src/css/ThemeNumberVariableTable.astro +57 -0
  51. package/src/css/configured-example.ts +53 -0
  52. package/src/css/foundation-data/elevation/shadow-data.ts +52 -0
  53. package/src/css/foundation-data/sizing/scale-data.ts +37 -0
  54. package/src/css/foundation-data/specimen-content.ts +10 -0
  55. package/src/css/foundation-data/specimens.ts +96 -0
  56. package/src/css/foundation-data/tokens.ts +32 -0
  57. package/src/css/generate-preset-css.ts +12 -0
  58. package/src/css/highlight.ts +34 -0
  59. package/src/css/manifest-utilities.ts +29 -0
  60. package/src/css/markdown.ts +279 -0
  61. package/src/css/preset-css.ts +15 -0
  62. package/src/css/preset-manifest.ts +3 -0
  63. package/src/css/stylesheet-example.ts +26 -0
  64. package/src/css/theme-variables.ts +74 -0
  65. package/src/css/variable-namespace-sources.ts +20 -0
  66. package/src/demo/Demo.svelte +55 -0
  67. package/src/demo/DemoAsset.astro +38 -0
  68. package/src/demo/DemoAxes.svelte +22 -0
  69. package/src/demo/DemoBadge.svelte +18 -0
  70. package/src/demo/DemoCatalog.astro +36 -0
  71. package/src/demo/DemoComparison.svelte +36 -0
  72. package/src/demo/DemoConfiguredExample.astro +48 -0
  73. package/src/demo/DemoContainer.svelte +48 -0
  74. package/src/demo/DemoControls.svelte +16 -0
  75. package/src/demo/DemoCopyButton.svelte +50 -0
  76. package/src/demo/DemoCopyGroup.svelte +15 -0
  77. package/src/demo/DemoExample.astro +27 -0
  78. package/src/demo/DemoFeatureSupport.svelte +18 -0
  79. package/src/demo/DemoGeneratedCSS.svelte +8 -0
  80. package/src/demo/DemoIndex.astro +23 -0
  81. package/src/demo/DemoInstallation.astro +17 -0
  82. package/src/demo/DemoItem.svelte +17 -0
  83. package/src/demo/DemoLabel.svelte +15 -0
  84. package/src/demo/DemoLegend.svelte +15 -0
  85. package/src/demo/DemoMeasure.svelte +28 -0
  86. package/src/demo/DemoMedia.svelte +43 -0
  87. package/src/demo/DemoMotion.svelte +41 -0
  88. package/src/demo/DemoPageViewport.astro +17 -0
  89. package/src/demo/DemoPalette.astro +29 -0
  90. package/src/demo/DemoPaletteGroups.svelte +15 -0
  91. package/src/demo/DemoScrollArea.svelte +15 -0
  92. package/src/demo/DemoStyleComparison.astro +25 -0
  93. package/src/demo/DemoSurface.svelte +15 -0
  94. package/src/demo/DemoSwatch.svelte +19 -0
  95. package/src/demo/DemoThemeComparison.astro +30 -0
  96. package/src/demo/DemoTokenTable.astro +34 -0
  97. package/src/demo/DemoViewTransition.astro +18 -0
  98. package/src/demo/DemoViewport.svelte +324 -0
  99. package/src/demo/DemoWaterfall.astro +30 -0
  100. package/src/demo/FoundationBreakpoint.astro +12 -0
  101. package/src/demo/ProjectStyleExample.astro +13 -0
  102. package/src/demo/copy-feedback.ts +10 -0
  103. package/src/demo/demo-waterfall.ts +17 -0
  104. package/src/demo/drag-readings.ts +20 -0
  105. package/src/demo/foundations/FoundationAxes.astro +12 -0
  106. package/src/demo/foundations/FoundationColorRoles.astro +5 -0
  107. package/src/demo/foundations/FoundationContainerGrid.astro +24 -0
  108. package/src/demo/foundations/FoundationDialog.astro +14 -0
  109. package/src/demo/foundations/FoundationElevation.astro +5 -0
  110. package/src/demo/foundations/FoundationElevationState.astro +5 -0
  111. package/src/demo/foundations/FoundationHue.astro +5 -0
  112. package/src/demo/foundations/FoundationLines.astro +5 -0
  113. package/src/demo/foundations/FoundationMedia.astro +28 -0
  114. package/src/demo/foundations/FoundationMotion.astro +5 -0
  115. package/src/demo/foundations/FoundationPalette.astro +8 -0
  116. package/src/demo/foundations/FoundationRadius.astro +13 -0
  117. package/src/demo/foundations/FoundationShapes.astro +12 -0
  118. package/src/demo/foundations/FoundationShrink.astro +14 -0
  119. package/src/demo/foundations/FoundationSizing.astro +19 -0
  120. package/src/demo/foundations/FoundationSpecimen.astro +20 -0
  121. package/src/demo/foundations/FoundationSurfaces.astro +5 -0
  122. package/src/demo/foundations/FoundationTextHue.astro +5 -0
  123. package/src/demo/foundations/FoundationTextRoles.astro +5 -0
  124. package/src/demo/foundations/FoundationTokens.astro +22 -0
  125. package/src/demo/foundations/FoundationTokensView.astro +65 -0
  126. package/src/demo/foundations/FoundationTransition.astro +5 -0
  127. package/src/demo/foundations/FoundationTypeComparison.astro +12 -0
  128. package/src/demo/foundations/FoundationTypography.astro +5 -0
  129. package/src/demo/foundations/Palette.svelte +37 -0
  130. package/src/demo/foundations/ShadowScaleDemo.astro +22 -0
  131. package/src/demo/illustration-materials.ts +180 -0
  132. package/src/demo/maintenance-example.ts +62 -0
  133. package/src/demo/playback.ts +75 -0
  134. package/src/demo/project-style-examples.ts +128 -0
  135. package/src/demo/reference/alignment.ts +42 -0
  136. package/src/demo/reference/animations.ts +30 -0
  137. package/src/demo/reference/backgrounds.ts +39 -0
  138. package/src/demo/reference/border-paint.ts +31 -0
  139. package/src/demo/reference/clipping.ts +26 -0
  140. package/src/demo/reference/document.ts +55 -0
  141. package/src/demo/reference/edges.ts +40 -0
  142. package/src/demo/reference/effects.ts +27 -0
  143. package/src/demo/reference/flexbox.ts +33 -0
  144. package/src/demo/reference/frame.css +118 -0
  145. package/src/demo/reference/grid.ts +42 -0
  146. package/src/demo/reference/html.ts +40 -0
  147. package/src/demo/reference/interaction.ts +42 -0
  148. package/src/demo/reference/layout-html.ts +10 -0
  149. package/src/demo/reference/layout.ts +102 -0
  150. package/src/demo/reference/media.ts +29 -0
  151. package/src/demo/reference/positioning.ts +90 -0
  152. package/src/demo/reference/scenes.ts +197 -0
  153. package/src/demo/reference/scrolling.ts +66 -0
  154. package/src/demo/reference/shapes.ts +22 -0
  155. package/src/demo/reference/sizing.ts +43 -0
  156. package/src/demo/reference/source.ts +8 -0
  157. package/src/demo/reference/text-effects.ts +37 -0
  158. package/src/demo/reference/text-flow.ts +41 -0
  159. package/src/demo/reference/transforms.ts +26 -0
  160. package/src/demo/reference/transitions.ts +24 -0
  161. package/src/demo/reference/type-specimens.ts +56 -0
  162. package/src/demo/reference/types.ts +30 -0
  163. package/src/demo/reference/typography.ts +32 -0
  164. package/src/demo/specimens/accent-color.json +50 -0
  165. package/src/demo/specimens/align-items.json +56 -0
  166. package/src/demo/specimens/animation-delay.json +55 -0
  167. package/src/demo/specimens/animation-direction.json +49 -0
  168. package/src/demo/specimens/animation-fill-mode.json +55 -0
  169. package/src/demo/specimens/animation-iteration-count.json +55 -0
  170. package/src/demo/specimens/animation-play-state.json +83 -0
  171. package/src/demo/specimens/animation-timing-function.json +48 -0
  172. package/src/demo/specimens/appearance.json +44 -0
  173. package/src/demo/specimens/aspect-ratio.json +28 -0
  174. package/src/demo/specimens/backdrop-filter.json +44 -0
  175. package/src/demo/specimens/background-attachment.json +49 -0
  176. package/src/demo/specimens/background-image.json +25 -0
  177. package/src/demo/specimens/background-origin.json +36 -0
  178. package/src/demo/specimens/background-size.json +29 -0
  179. package/src/demo/specimens/border-collapse.json +45 -0
  180. package/src/demo/specimens/border-color.json +35 -0
  181. package/src/demo/specimens/border-image-repeat.json +50 -0
  182. package/src/demo/specimens/border-image-slice.json +45 -0
  183. package/src/demo/specimens/border-radius.json +30 -0
  184. package/src/demo/specimens/box-decoration-break.json +35 -0
  185. package/src/demo/specimens/box-shadow.json +33 -0
  186. package/src/demo/specimens/clear.json +77 -0
  187. package/src/demo/specimens/clip-path.json +38 -0
  188. package/src/demo/specimens/content.json +27 -0
  189. package/src/demo/specimens/counter-set.json +31 -0
  190. package/src/demo/specimens/fill.json +23 -0
  191. package/src/demo/specimens/filter.json +23 -0
  192. package/src/demo/specimens/flex-direction.json +27 -0
  193. package/src/demo/specimens/flex-grow.json +27 -0
  194. package/src/demo/specimens/font-style.json +23 -0
  195. package/src/demo/specimens/font-variant-numeric.json +28 -0
  196. package/src/demo/specimens/grid-auto-columns.json +29 -0
  197. package/src/demo/specimens/grid-auto-flow.json +37 -0
  198. package/src/demo/specimens/grid-template-areas.json +34 -0
  199. package/src/demo/specimens/grid-template-columns.json +36 -0
  200. package/src/demo/specimens/isolation.json +25 -0
  201. package/src/demo/specimens/justify-content.json +36 -0
  202. package/src/demo/specimens/line-height.json +28 -0
  203. package/src/demo/specimens/list-style-position.json +36 -0
  204. package/src/demo/specimens/mask-image.json +54 -0
  205. package/src/demo/specimens/min-width.json +39 -0
  206. package/src/demo/specimens/mix-blend-mode.json +43 -0
  207. package/src/demo/specimens/object-fit.json +27 -0
  208. package/src/demo/specimens/object-position.json +27 -0
  209. package/src/demo/specimens/opacity.json +37 -0
  210. package/src/demo/specimens/order.json +28 -0
  211. package/src/demo/specimens/overflow-wrap.json +26 -0
  212. package/src/demo/specimens/overflow.json +53 -0
  213. package/src/demo/specimens/overscroll-behavior.json +29 -0
  214. package/src/demo/specimens/padding.json +84 -0
  215. package/src/demo/specimens/place-content.json +31 -0
  216. package/src/demo/specimens/pointer-events.json +46 -0
  217. package/src/demo/specimens/position.json +29 -0
  218. package/src/demo/specimens/resize.json +32 -0
  219. package/src/demo/specimens/screen-readers.json +37 -0
  220. package/src/demo/specimens/scroll-padding.json +29 -0
  221. package/src/demo/specimens/scroll-snap-stop.json +33 -0
  222. package/src/demo/specimens/shape-image-threshold.json +37 -0
  223. package/src/demo/specimens/shape-margin.json +40 -0
  224. package/src/demo/specimens/shape-outside.json +37 -0
  225. package/src/demo/specimens/stroke-width.json +27 -0
  226. package/src/demo/specimens/text-fill-color.json +23 -0
  227. package/src/demo/specimens/text-stroke-width.json +32 -0
  228. package/src/demo/specimens/touch-action.json +45 -0
  229. package/src/demo/specimens/transform-box.json +37 -0
  230. package/src/demo/specimens/transform-origin.json +56 -0
  231. package/src/demo/specimens/transform-style.json +55 -0
  232. package/src/demo/specimens/transform.json +47 -0
  233. package/src/demo/specimens/transition-delay.json +57 -0
  234. package/src/demo/specimens/transition-duration.json +60 -0
  235. package/src/demo/specimens/transition-property.json +60 -0
  236. package/src/demo/specimens/transition-timing-function.json +65 -0
  237. package/src/demo/specimens/user-drag.json +28 -0
  238. package/src/demo/specimens/user-select.json +25 -0
  239. package/src/demo/specimens/vertical-align.json +28 -0
  240. package/src/demo/specimens/width.json +56 -0
  241. package/src/demo/specimens/will-change.json +50 -0
  242. package/src/demo/specimens/writing-mode.json +26 -0
  243. package/src/demo/specimens/z-index.json +35 -0
  244. package/src/demo/style.ts +15 -0
  245. package/src/demo/tone.ts +4 -0
  246. package/src/demo/useDemoViewTransition.svelte.ts +71 -0
  247. package/src/docs-shell/common/i18n.config.d.ts +2 -0
  248. package/src/docs-shell/common/i18n.config.js +13 -0
  249. package/src/docs-shell/common/svgo.config.d.ts +2 -0
  250. package/src/docs-shell/common/svgo.config.js +11 -0
  251. package/src/docs-shell/components/ArticleHeader.astro +65 -0
  252. package/src/docs-shell/components/ArticleTOC.astro +18 -0
  253. package/src/docs-shell/components/Callout.astro +26 -0
  254. package/src/docs-shell/components/Code.astro +25 -0
  255. package/src/docs-shell/components/CodeCopyButton.astro +25 -0
  256. package/src/docs-shell/components/CodeTabBar.astro +40 -0
  257. package/src/docs-shell/components/CodeTabs.astro +53 -0
  258. package/src/docs-shell/components/CodeView.astro +23 -0
  259. package/src/docs-shell/components/Do.astro +5 -0
  260. package/src/docs-shell/components/DoNot.astro +5 -0
  261. package/src/docs-shell/components/DocArticle.astro +14 -0
  262. package/src/docs-shell/components/DocHeader.svelte +87 -0
  263. package/src/docs-shell/components/DocHeading.astro +28 -0
  264. package/src/docs-shell/components/DocMain.astro +19 -0
  265. package/src/docs-shell/components/DocMenuButton.svelte +95 -0
  266. package/src/docs-shell/components/DocSidebar.svelte +62 -0
  267. package/src/docs-shell/components/DocVersionSelect.svelte +22 -0
  268. package/src/docs-shell/components/DocWrapper.astro +11 -0
  269. package/src/docs-shell/components/DocumentAPIIndex.astro +24 -0
  270. package/src/docs-shell/components/DocumentChoices.astro +24 -0
  271. package/src/docs-shell/components/DocumentCodeExample.astro +20 -0
  272. package/src/docs-shell/components/DocumentCodeExampleView.astro +35 -0
  273. package/src/docs-shell/components/DocumentCodeTable.astro +19 -0
  274. package/src/docs-shell/components/DocumentComparison.astro +7 -0
  275. package/src/docs-shell/components/DocumentCopyButton.svelte +41 -0
  276. package/src/docs-shell/components/DocumentDeclaration.astro +17 -0
  277. package/src/docs-shell/components/DocumentDeclarationView.astro +12 -0
  278. package/src/docs-shell/components/DocumentDisclosure.astro +14 -0
  279. package/src/docs-shell/components/DocumentFileTree.astro +34 -0
  280. package/src/docs-shell/components/DocumentFlow.astro +27 -0
  281. package/src/docs-shell/components/DocumentIdentifier.astro +14 -0
  282. package/src/docs-shell/components/DocumentIllustration.astro +46 -0
  283. package/src/docs-shell/components/DocumentKeyList.astro +22 -0
  284. package/src/docs-shell/components/DocumentNamespaceTable.astro +20 -0
  285. package/src/docs-shell/components/DocumentOptionEntry.astro +15 -0
  286. package/src/docs-shell/components/DocumentOptionList.astro +11 -0
  287. package/src/docs-shell/components/DocumentOptions.astro +23 -0
  288. package/src/docs-shell/components/DocumentParameters.astro +30 -0
  289. package/src/docs-shell/components/DocumentPrompt.astro +16 -0
  290. package/src/docs-shell/components/DocumentValueList.astro +25 -0
  291. package/src/docs-shell/components/DocumentationIndex.svelte +144 -0
  292. package/src/docs-shell/components/Dropped.astro +21 -0
  293. package/src/docs-shell/components/ExpandContent.svelte +21 -0
  294. package/src/docs-shell/components/ExplorerView.astro +37 -0
  295. package/src/docs-shell/components/FileIcon.astro +123 -0
  296. package/src/docs-shell/components/Footer.svelte +80 -0
  297. package/src/docs-shell/components/GeneratedCSS.astro +8 -0
  298. package/src/docs-shell/components/Header.svelte +121 -0
  299. package/src/docs-shell/components/HeaderIcon.astro +14 -0
  300. package/src/docs-shell/components/HeaderNav.svelte +18 -0
  301. package/src/docs-shell/components/Image.svelte +56 -0
  302. package/src/docs-shell/components/Info.astro +5 -0
  303. package/src/docs-shell/components/InlineCode.astro +30 -0
  304. package/src/docs-shell/components/InteractingIndicator.astro +19 -0
  305. package/src/docs-shell/components/LanguageButton.svelte +18 -0
  306. package/src/docs-shell/components/LanguageSelect.svelte +44 -0
  307. package/src/docs-shell/components/Link.svelte +127 -0
  308. package/src/docs-shell/components/ModeImg.astro +11 -0
  309. package/src/docs-shell/components/NotFound.astro +21 -0
  310. package/src/docs-shell/components/OverviewButtons.astro +36 -0
  311. package/src/docs-shell/components/PMAction.astro +25 -0
  312. package/src/docs-shell/components/PackageBadges.astro +39 -0
  313. package/src/docs-shell/components/PageContent.svelte +38 -0
  314. package/src/docs-shell/components/PageContentBootstrap.astro +13 -0
  315. package/src/docs-shell/components/PageContentDisclosure.astro +25 -0
  316. package/src/docs-shell/components/PageContentList.svelte +70 -0
  317. package/src/docs-shell/components/PageContentProvider.svelte +15 -0
  318. package/src/docs-shell/components/PageContentTitle.svelte +16 -0
  319. package/src/docs-shell/components/PageNavs.astro +40 -0
  320. package/src/docs-shell/components/PreparedCodeView.astro +12 -0
  321. package/src/docs-shell/components/RenderNode.astro +16 -0
  322. package/src/docs-shell/components/RouteLayers.astro +17 -0
  323. package/src/docs-shell/components/SearchButton.svelte +31 -0
  324. package/src/docs-shell/components/SearchDialog.svelte +174 -0
  325. package/src/docs-shell/components/Segments.svelte +62 -0
  326. package/src/docs-shell/components/Step.astro +13 -0
  327. package/src/docs-shell/components/StepL.astro +10 -0
  328. package/src/docs-shell/components/StepR.astro +10 -0
  329. package/src/docs-shell/components/StepSection.astro +12 -0
  330. package/src/docs-shell/components/Tab.astro +8 -0
  331. package/src/docs-shell/components/Tabs.astro +10 -0
  332. package/src/docs-shell/components/ThemeIcon.astro +19 -0
  333. package/src/docs-shell/components/ThemeSelect.svelte +20 -0
  334. package/src/docs-shell/components/TimeAgo.svelte +32 -0
  335. package/src/docs-shell/components/Translate.astro +14 -0
  336. package/src/docs-shell/components/Warn.astro +5 -0
  337. package/src/docs-shell/components/code-props.ts +28 -0
  338. package/src/docs-shell/components/document-types.ts +119 -0
  339. package/src/docs-shell/components/markdown/Anchor.astro +5 -0
  340. package/src/docs-shell/components/markdown/Heading2.astro +5 -0
  341. package/src/docs-shell/components/markdown/Heading3.astro +5 -0
  342. package/src/docs-shell/components/markdown/Table.astro +6 -0
  343. package/src/docs-shell/components/markdown-components.ts +36 -0
  344. package/src/docs-shell/components/page-content-bootstrap.ts +115 -0
  345. package/src/docs-shell/components/page-content.svelte.ts +125 -0
  346. package/src/docs-shell/contexts/search.ts +18 -0
  347. package/src/docs-shell/contexts/theme-mode.svelte.ts +61 -0
  348. package/src/docs-shell/data/authors.ts +17 -0
  349. package/src/docs-shell/data/base-colors.ts +29 -0
  350. package/src/docs-shell/data/brands.ts +79 -0
  351. package/src/docs-shell/data/color-names.ts +1 -0
  352. package/src/docs-shell/data/color-palette.ts +50 -0
  353. package/src/docs-shell/data/colors.ts +1 -0
  354. package/src/docs-shell/factories/Page.astro +35 -0
  355. package/src/docs-shell/factories/create-page.ts +31 -0
  356. package/src/docs-shell/layouts/BlogArticle.astro +53 -0
  357. package/src/docs-shell/layouts/Doc.astro +41 -0
  358. package/src/docs-shell/remark/markdown-components.d.ts +2 -0
  359. package/src/docs-shell/remark/markdown-components.js +101 -0
  360. package/src/docs-shell/remark/slug-and-toc.d.ts +2 -0
  361. package/src/docs-shell/remark/slug-and-toc.js +53 -0
  362. package/src/docs-shell/scripts/code-tabs-bootstrap.ts +34 -0
  363. package/src/docs-shell/scripts/code.ts +124 -0
  364. package/src/docs-shell/scripts/document-anchor.ts +57 -0
  365. package/src/docs-shell/scripts/document.ts +47 -0
  366. package/src/docs-shell/site.ts +67 -0
  367. package/src/docs-shell/types/IllustrationImages.ts +2 -0
  368. package/src/docs-shell/types/Metadata.ts +17 -0
  369. package/src/docs-shell/types/Props.ts +9 -0
  370. package/src/docs-shell/types/StaticImage.ts +6 -0
  371. package/src/docs-shell/uses/use-selected-preview-syntax.svelte.ts +16 -0
  372. package/src/docs-shell/utils/anchor.ts +24 -0
  373. package/src/docs-shell/utils/beautify-css.ts +14 -0
  374. package/src/docs-shell/utils/beautify-html.ts +12 -0
  375. package/src/docs-shell/utils/beautify-js.ts +9 -0
  376. package/src/docs-shell/utils/create-highlighter.ts +50 -0
  377. package/src/docs-shell/utils/css-modern-grammar.ts +339 -0
  378. package/src/docs-shell/utils/documentation-search.ts +68 -0
  379. package/src/docs-shell/utils/generate-metadata.ts +60 -0
  380. package/src/docs-shell/utils/group-page-content.ts +10 -0
  381. package/src/docs-shell/utils/head.ts +72 -0
  382. package/src/docs-shell/utils/highlight-code-core.ts +146 -0
  383. package/src/docs-shell/utils/highlight-code.ts +1 -0
  384. package/src/docs-shell/utils/highlighted-code-text.ts +27 -0
  385. package/src/docs-shell/utils/i18n-pathname.ts +98 -0
  386. package/src/docs-shell/utils/i18n.ts +12 -0
  387. package/src/docs-shell/utils/is-date-within-seven-days.ts +16 -0
  388. package/src/docs-shell/utils/isBrowser.ts +1 -0
  389. package/src/docs-shell/utils/isInteractOutside.ts +16 -0
  390. package/src/docs-shell/utils/markdown-tree.ts +22 -0
  391. package/src/docs-shell/utils/metadata.ts +25 -0
  392. package/src/docs-shell/utils/prepared-code.ts +21 -0
  393. package/src/docs-shell/utils/resolve-heading.d.ts +1 -0
  394. package/src/docs-shell/utils/resolve-heading.js +19 -0
  395. package/src/docs-shell/utils/search-pages.ts +271 -0
  396. package/src/docs-shell/utils/slot-text.ts +15 -0
  397. package/src/docs-shell/utils/snackbar.ts +39 -0
  398. package/src/docs-shell/utils/syntax-theme.ts +53 -0
  399. package/src/docs-shell/utils/transformer-notation-word-mark.ts +146 -0
  400. package/src/docs-shell/utils/unique-id.ts +11 -0
  401. package/src/examples/article-transitions/page.astro +7 -0
  402. package/src/examples/article-transitions/transitions.css +10 -0
  403. package/src/examples/components/ArticleTransitionScene.svelte +83 -0
  404. package/src/examples/components/ViewTransitionScene.svelte +31 -0
  405. package/src/examples/images/article-aurora.jpg +0 -0
  406. package/src/examples/images/article-coast.jpg +0 -0
  407. package/src/examples/images/article-grid.jpg +0 -0
  408. package/src/examples/images/article-studio.jpg +0 -0
  409. package/src/examples/layout-system/page.astro +59 -0
  410. package/src/examples/scene.css +3 -0
  411. package/src/examples/view-transitions/page.astro +7 -0
  412. package/src/examples/view-transitions/transitions.css +9 -0
  413. package/src/home/HeroCanvas.svelte +617 -0
  414. package/src/home/HomeAction.astro +17 -0
  415. package/src/home/HomeBentoFrame.astro +9 -0
  416. package/src/home/HomeBentoGrid.astro +9 -0
  417. package/src/home/HomeCompactIcon.astro +15 -0
  418. package/src/home/HomeFooter.svelte +63 -0
  419. package/src/home/HomeIllustration.astro +17 -0
  420. package/src/home/HomeIllustrationArt.svelte +15 -0
  421. package/src/home/HomeLamp.svelte +18 -0
  422. package/src/home/design.css +532 -0
  423. package/src/home/footer.css +225 -0
  424. package/src/home/hero-shaders.ts +460 -0
  425. package/src/home/hero-title-mask.ts +175 -0
  426. package/src/home/hero.css +547 -0
  427. package/src/home/home-illustration.ts +5 -0
  428. package/src/home/home-lamp.ts +225 -0
  429. package/src/home/home.css +1077 -0
  430. package/src/home/icons/agent-check-preview-apply.svg +24 -0
  431. package/src/home/icons/agent-clients.svg +26 -0
  432. package/src/home/icons/agent-project-tools.svg +23 -0
  433. package/src/home/icons/artwork/agent-check-preview-apply-dark.webp +0 -0
  434. package/src/home/icons/artwork/agent-check-preview-apply-light.webp +0 -0
  435. package/src/home/icons/artwork/agent-clients-dark.webp +0 -0
  436. package/src/home/icons/artwork/agent-clients-light.webp +0 -0
  437. package/src/home/icons/artwork/agent-edit-file-dark.webp +0 -0
  438. package/src/home/icons/artwork/agent-edit-file-light.webp +0 -0
  439. package/src/home/icons/artwork/agent-project-tools-dark.webp +0 -0
  440. package/src/home/icons/artwork/agent-project-tools-light.webp +0 -0
  441. package/src/home/icons/artwork/design-cascade-layers-dark.webp +0 -0
  442. package/src/home/icons/artwork/design-cascade-layers-light.webp +0 -0
  443. package/src/home/icons/artwork/design-layout-motion-dark.webp +0 -0
  444. package/src/home/icons/artwork/design-layout-motion-light.webp +0 -0
  445. package/src/home/icons/artwork/design-p3-gamut-dark.webp +0 -0
  446. package/src/home/icons/artwork/design-p3-gamut-light.webp +0 -0
  447. package/src/home/icons/artwork/design-theme-modes-dark.webp +0 -0
  448. package/src/home/icons/artwork/design-theme-modes-light.webp +0 -0
  449. package/src/home/icons/artwork/design-theme-tokens-dark.webp +0 -0
  450. package/src/home/icons/artwork/design-theme-tokens-light.webp +0 -0
  451. package/src/home/icons/artwork/editor-color-tools-dark.webp +0 -0
  452. package/src/home/icons/artwork/editor-color-tools-light.webp +0 -0
  453. package/src/home/icons/artwork/editor-focused-highlighting-dark.webp +0 -0
  454. package/src/home/icons/artwork/editor-focused-highlighting-light.webp +0 -0
  455. package/src/home/icons/artwork/editor-hover-inspection-dark.webp +0 -0
  456. package/src/home/icons/artwork/editor-hover-inspection-light.webp +0 -0
  457. package/src/home/icons/artwork/editor-manifest-completions-dark.webp +0 -0
  458. package/src/home/icons/artwork/editor-manifest-completions-light.webp +0 -0
  459. package/src/home/icons/artwork/lint-class-order-dark.webp +0 -0
  460. package/src/home/icons/artwork/lint-class-order-light.webp +0 -0
  461. package/src/home/icons/artwork/lint-conflicting-classes-dark.webp +0 -0
  462. package/src/home/icons/artwork/lint-conflicting-classes-light.webp +0 -0
  463. package/src/home/icons/artwork/lint-fix-previews-dark.webp +0 -0
  464. package/src/home/icons/artwork/lint-fix-previews-light.webp +0 -0
  465. package/src/home/icons/artwork/lint-invalid-classes-dark.webp +0 -0
  466. package/src/home/icons/artwork/lint-invalid-classes-light.webp +0 -0
  467. package/src/home/icons/artwork/lint-strict-vocabulary-dark.webp +0 -0
  468. package/src/home/icons/artwork/lint-strict-vocabulary-light.webp +0 -0
  469. package/src/home/icons/artwork/lint-theme-tokens-dark.webp +0 -0
  470. package/src/home/icons/artwork/lint-theme-tokens-light.webp +0 -0
  471. package/src/home/icons/artwork/mcp-apply-preview-dark.webp +0 -0
  472. package/src/home/icons/artwork/mcp-apply-preview-light.webp +0 -0
  473. package/src/home/icons/artwork/mcp-css-compare-dark.webp +0 -0
  474. package/src/home/icons/artwork/mcp-css-compare-light.webp +0 -0
  475. package/src/home/icons/artwork/mcp-inspect-class-dark.webp +0 -0
  476. package/src/home/icons/artwork/mcp-inspect-class-light.webp +0 -0
  477. package/src/home/icons/artwork/mcp-lint-project-dark.webp +0 -0
  478. package/src/home/icons/artwork/mcp-lint-project-light.webp +0 -0
  479. package/src/home/icons/artwork/mcp-manifest-query-dark.webp +0 -0
  480. package/src/home/icons/artwork/mcp-manifest-query-light.webp +0 -0
  481. package/src/home/icons/artwork/mcp-preview-fixes-dark.webp +0 -0
  482. package/src/home/icons/artwork/mcp-preview-fixes-light.webp +0 -0
  483. package/src/home/icons/artwork/mcp-render-css-dark.webp +0 -0
  484. package/src/home/icons/artwork/mcp-render-css-light.webp +0 -0
  485. package/src/home/icons/artwork/mcp-scan-project-dark.webp +0 -0
  486. package/src/home/icons/artwork/mcp-scan-project-light.webp +0 -0
  487. package/src/home/icons/artwork/mcp-trace-class-dark.webp +0 -0
  488. package/src/home/icons/artwork/mcp-trace-class-light.webp +0 -0
  489. package/src/home/icons/artwork/render-progressive-dark.webp +0 -0
  490. package/src/home/icons/artwork/render-progressive-light.webp +0 -0
  491. package/src/home/icons/artwork/render-runtime-dark.webp +0 -0
  492. package/src/home/icons/artwork/render-runtime-light.webp +0 -0
  493. package/src/home/icons/artwork/render-static-dark.webp +0 -0
  494. package/src/home/icons/artwork/render-static-light.webp +0 -0
  495. package/src/home/icons/artwork/section-ai-agents-dark.webp +0 -0
  496. package/src/home/icons/artwork/section-ai-agents-light.webp +0 -0
  497. package/src/home/icons/artwork/section-css-size-dark.webp +0 -0
  498. package/src/home/icons/artwork/section-css-size-light.webp +0 -0
  499. package/src/home/icons/artwork/section-design-system-dark.webp +0 -0
  500. package/src/home/icons/artwork/section-design-system-light.webp +0 -0
  501. package/src/home/icons/artwork/section-editor-dark.webp +0 -0
  502. package/src/home/icons/artwork/section-editor-light.webp +0 -0
  503. package/src/home/icons/artwork/section-lint-dark.webp +0 -0
  504. package/src/home/icons/artwork/section-lint-light.webp +0 -0
  505. package/src/home/icons/artwork/section-rendering-dark.webp +0 -0
  506. package/src/home/icons/artwork/section-rendering-light.webp +0 -0
  507. package/src/home/icons/artwork/section-workflow-dark.webp +0 -0
  508. package/src/home/icons/artwork/section-workflow-light.webp +0 -0
  509. package/src/home/icons/artwork/source.json +303 -0
  510. package/src/home/icons/artwork/workflow-integrations-dark.webp +0 -0
  511. package/src/home/icons/artwork/workflow-integrations-light.webp +0 -0
  512. package/src/home/icons/artwork/workflow-monorepo-dark.webp +0 -0
  513. package/src/home/icons/artwork/workflow-monorepo-light.webp +0 -0
  514. package/src/home/icons/artwork/workflow-route-styles-dark.webp +0 -0
  515. package/src/home/icons/artwork/workflow-route-styles-light.webp +0 -0
  516. package/src/home/icons/artwork/workflow-trace-change-dark.webp +0 -0
  517. package/src/home/icons/artwork/workflow-trace-change-light.webp +0 -0
  518. package/src/home/icons/artwork.css +4 -0
  519. package/src/home/icons/artwork.ts +131 -0
  520. package/src/home/icons/catalog.ts +381 -0
  521. package/src/home/icons/design-cascade-layers.svg +32 -0
  522. package/src/home/icons/design-layout-motion.svg +16 -0
  523. package/src/home/icons/design-p3-gamut.svg +12 -0
  524. package/src/home/icons/design-theme-modes.svg +12 -0
  525. package/src/home/icons/design-theme-tokens.svg +20 -0
  526. package/src/home/icons/editor-color-tools.svg +18 -0
  527. package/src/home/icons/editor-focused-highlighting.svg +15 -0
  528. package/src/home/icons/editor-hover-inspection.svg +19 -0
  529. package/src/home/icons/editor-manifest-completions.svg +24 -0
  530. package/src/home/icons/lint-class-order-compact.svg +15 -0
  531. package/src/home/icons/lint-class-order.svg +28 -0
  532. package/src/home/icons/lint-conflicting-classes-compact.svg +11 -0
  533. package/src/home/icons/lint-conflicting-classes.svg +24 -0
  534. package/src/home/icons/lint-fix-previews-compact.svg +9 -0
  535. package/src/home/icons/lint-fix-previews.svg +19 -0
  536. package/src/home/icons/lint-invalid-classes-compact.svg +7 -0
  537. package/src/home/icons/lint-invalid-classes.svg +17 -0
  538. package/src/home/icons/lint-strict-vocabulary-compact.svg +8 -0
  539. package/src/home/icons/lint-strict-vocabulary.svg +16 -0
  540. package/src/home/icons/lint-theme-tokens-compact.svg +7 -0
  541. package/src/home/icons/lint-theme-tokens.svg +14 -0
  542. package/src/home/icons/mcp-apply-preview-compact.svg +9 -0
  543. package/src/home/icons/mcp-apply-preview.svg +18 -0
  544. package/src/home/icons/mcp-css-compare-compact.svg +9 -0
  545. package/src/home/icons/mcp-css-compare.svg +20 -0
  546. package/src/home/icons/mcp-inspect-class-compact.svg +9 -0
  547. package/src/home/icons/mcp-inspect-class.svg +18 -0
  548. package/src/home/icons/mcp-lint-project-compact.svg +14 -0
  549. package/src/home/icons/mcp-lint-project.svg +30 -0
  550. package/src/home/icons/mcp-manifest-query-compact.svg +14 -0
  551. package/src/home/icons/mcp-manifest-query.svg +27 -0
  552. package/src/home/icons/mcp-preview-fixes-compact.svg +9 -0
  553. package/src/home/icons/mcp-preview-fixes.svg +15 -0
  554. package/src/home/icons/mcp-render-css-compact.svg +13 -0
  555. package/src/home/icons/mcp-render-css.svg +30 -0
  556. package/src/home/icons/mcp-scan-project-compact.svg +7 -0
  557. package/src/home/icons/mcp-scan-project.svg +13 -0
  558. package/src/home/icons/mcp-trace-class-compact.svg +11 -0
  559. package/src/home/icons/mcp-trace-class.svg +24 -0
  560. package/src/home/icons/render-progressive.svg +17 -0
  561. package/src/home/icons/render-runtime.svg +23 -0
  562. package/src/home/icons/render-static.svg +29 -0
  563. package/src/home/icons/section-ai-agents.svg +24 -0
  564. package/src/home/icons/section-css-size.svg +13 -0
  565. package/src/home/icons/section-design-system.svg +24 -0
  566. package/src/home/icons/section-editor.svg +14 -0
  567. package/src/home/icons/section-lint.svg +14 -0
  568. package/src/home/icons/section-rendering.svg +30 -0
  569. package/src/home/icons/section-workflow.svg +22 -0
  570. package/src/home/icons/workflow-integrations.svg +15 -0
  571. package/src/home/icons/workflow-monorepo.svg +27 -0
  572. package/src/home/icons/workflow-route-styles.svg +24 -0
  573. package/src/home/icons/workflow-trace-change.svg +21 -0
  574. package/src/layouts/Document.astro +71 -0
  575. package/src/public/brand/v2/logo/mark/master-mark-small-on-dark.svg +1 -0
  576. package/src/public/brand/v2/logo/master-css/master-css-horizontal-on-dark.svg +1 -0
  577. package/src/public/brand/v2/logo/master-css/master-css-horizontal-on-light.svg +1 -0
  578. package/src/public/demo/border-grid.svg +7 -0
  579. package/src/public/demo/landscape.svg +1 -0
  580. package/src/public/demo/marker.svg +1 -0
  581. package/src/public/demo/mask.svg +1 -0
  582. package/src/public/fonts/Geist-Medium.ttf +0 -0
  583. package/src/public/fonts/Geist-Regular.ttf +0 -0
  584. package/src/public/fonts/GeistVariable.woff2 +0 -0
  585. package/src/public/fonts/IBMPlexMono-Bold.woff2 +0 -0
  586. package/src/public/fonts/IBMPlexMono-Medium.woff2 +0 -0
  587. package/src/public/fonts/IBMPlexMono-Regular.woff2 +0 -0
  588. package/src/public/fonts/IBMPlexMono-SemiBold.woff2 +0 -0
  589. package/src/public/fonts/index.css +40 -0
  590. package/src/public/icons/csharp.svg +1 -0
  591. package/src/public/icons/css.svg +1 -0
  592. package/src/public/icons/eslint.svg +1 -0
  593. package/src/public/icons/folder.svg +12 -0
  594. package/src/public/icons/html.svg +1 -0
  595. package/src/public/icons/php.svg +1 -0
  596. package/src/public/icons/sass.svg +1 -0
  597. package/src/public/icons/storybook.svg +1 -0
  598. package/src/public/icons/visualstudiocode.svg +41 -0
  599. package/src/public/images/authors/aron.jpg +0 -0
  600. package/src/public/images/authors/benseage.jpg +0 -0
  601. package/src/public/images/authors/joy.jpg +0 -0
  602. package/src/public/images/authors/lola.jpg +0 -0
  603. package/src/public/images/authors/miles.jpg +0 -0
  604. package/src/public/images/bootstrap.svg +23 -0
  605. package/src/public/images/build-tools/rsbuild.svg +1 -0
  606. package/src/public/images/build-tools/rspack.svg +1 -0
  607. package/src/public/images/build-tools/vite.svg +15 -0
  608. package/src/public/images/build-tools/webpack.svg +10 -0
  609. package/src/public/images/cdns/esm-sh.svg +1 -0
  610. package/src/public/images/chevron-left.svg +4 -0
  611. package/src/public/images/cover-bg.jpg +0 -0
  612. package/src/public/images/emotion.svg +1 -0
  613. package/src/public/images/frameworks/angular.svg +29 -0
  614. package/src/public/images/frameworks/astro.svg +4 -0
  615. package/src/public/images/frameworks/blazor.svg +22 -0
  616. package/src/public/images/frameworks/express.svg +1 -0
  617. package/src/public/images/frameworks/laravel.svg +8 -0
  618. package/src/public/images/frameworks/line-liff.svg +1 -0
  619. package/src/public/images/frameworks/lit.svg +1 -0
  620. package/src/public/images/frameworks/nextjs.svg +16 -0
  621. package/src/public/images/frameworks/nuxtjs.svg +3 -0
  622. package/src/public/images/frameworks/rails.svg +1 -0
  623. package/src/public/images/frameworks/react.svg +8 -0
  624. package/src/public/images/frameworks/remix.svg +5 -0
  625. package/src/public/images/frameworks/shopify.svg +1 -0
  626. package/src/public/images/frameworks/svelte.svg +6 -0
  627. package/src/public/images/frameworks/tanstack.svg +1 -0
  628. package/src/public/images/frameworks/vuejs.svg +11 -0
  629. package/src/public/images/frameworks/wordpress.svg +1 -0
  630. package/src/public/images/mui.svg +1 -0
  631. package/src/public/images/styled-components.svg +4 -0
  632. package/src/public/images/tailwindcss.svg +1 -0
  633. package/src/scripts/bundler-imports.ts +25 -0
  634. package/src/scripts/static-social.ts +333 -0
  635. package/src/scripts/write-if-changed.ts +26 -0
  636. package/src/sections/blog.astro +11 -0
  637. package/src/sections/design-system.astro +14 -0
  638. package/src/sections/document.astro +8 -0
  639. package/src/sections/examples.astro +6 -0
  640. package/src/sections/guide.astro +26 -0
  641. package/src/sections/home.astro +7 -0
  642. package/src/sections/page.astro +12 -0
  643. package/src/styles/base.css +57 -0
  644. package/src/styles/benchmarks.css +20 -0
  645. package/src/styles/blog-article.css +670 -0
  646. package/src/styles/blog-materials.css +399 -0
  647. package/src/styles/blog.css +568 -0
  648. package/src/styles/demo.css +30 -0
  649. package/src/styles/design-system.css +15 -0
  650. package/src/styles/docs-shell/code.css +61 -0
  651. package/src/styles/docs-shell/docs.css +79 -0
  652. package/src/styles/docs-shell/documentation-search.css +42 -0
  653. package/src/styles/docs-shell/footer.css +38 -0
  654. package/src/styles/docs-shell/header.css +69 -0
  655. package/src/styles/docs-shell/materials.css +25 -0
  656. package/src/styles/docs-shell/menu.css +19 -0
  657. package/src/styles/docs-shell/not-found.css +10 -0
  658. package/src/styles/docs-shell/page-content.css +37 -0
  659. package/src/styles/docs-shell/prose.css +89 -0
  660. package/src/styles/docs-shell/segments.css +13 -0
  661. package/src/styles/docs-shell/steps.css +39 -0
  662. package/src/styles/docs-shell/syntax-theme.css +18 -0
  663. package/src/styles/docs-shell/theme.css +68 -0
  664. package/src/styles/docs-shell/wrapper.css +10 -0
  665. package/src/styles/document-comparison.css +7 -0
  666. package/src/styles/documentation-illustration.css +34 -0
  667. package/src/styles/documentation-index.css +100 -0
  668. package/src/styles/documents.css +4 -0
  669. package/src/styles/documents.ts +2 -0
  670. package/src/styles/foundation.css +4 -0
  671. package/src/styles/globals.css +2 -0
  672. package/src/styles/interface.css +3 -0
  673. package/src/styles/interface.ts +2 -0
  674. package/src/styles/site.ts +2 -0
  675. package/src/styles/system/DESIGN.md +108 -0
  676. package/src/styles/system/buttons.css +51 -0
  677. package/src/styles/system/code.css +85 -0
  678. package/src/styles/system/controls.css +110 -0
  679. package/src/styles/system/data.css +134 -0
  680. package/src/styles/system/mixins.css +7 -0
  681. package/src/styles/system/prose.css +75 -0
  682. package/src/styles/system/shell.css +102 -0
  683. package/src/styles/system/specimens.css +98 -0
  684. package/src/styles/system/surfaces.css +104 -0
  685. package/src/styles/system/tokens.css +136 -0
  686. package/src/utils/cloudflare-image-loader.js +85 -0
  687. package/src/virtual.d.ts +36 -0
@@ -0,0 +1,118 @@
1
+ @font-face { font-family: Geist; font-style: normal; font-weight: 100 900; src: url('/fonts/GeistVariable.woff2') format('woff2'); font-display: swap; }
2
+ @font-face { font-family: 'IBM Plex Mono'; src: url('/fonts/IBMPlexMono-Regular.woff2') format('woff2'); font-display: swap; }
3
+
4
+ @layer defaults {
5
+ html { color-scheme: light dark; background: var(--ui-surface-stage); }
6
+ html.light { color-scheme: light; }
7
+ html.dark { color-scheme: dark; }
8
+ body { margin: 0; padding: 24px; font-family: Geist, system-ui, sans-serif; font-size: 13px; line-height: 1.6; color: var(--ui-text-body); }
9
+ *, ::before, ::after { box-sizing: border-box; }
10
+ p { margin: 0 0 12px; }
11
+ img, svg { vertical-align: middle; }
12
+ button, input, textarea, select { font: inherit; color: inherit; }
13
+ button, input, textarea, select {
14
+ border: 1px solid var(--ui-line-divider); border-radius: 4px; background: var(--ui-surface-sheet); padding: 8px 12px;
15
+ }
16
+ button { cursor: pointer; }
17
+ button:hover { border-color: var(--ui-line-mark); }
18
+ input:not([type='checkbox']):not([type='radio']):not([type='range']), textarea { max-width: 100%; }
19
+ input[type='checkbox'], input[type='radio'] { width: 16px; height: 16px; }
20
+ a { color: var(--ui-tone-blue); }
21
+ :focus-visible { outline: 2px solid var(--ui-focus); outline-offset: 3px; }
22
+ /* Captions and readings inside a specimen are small sans with tabular figures, like every caption in the system. */
23
+ [data-ui='label'] { margin-bottom: 10px; color: var(--ui-text-muted); font: 400 12px/1.6 var(--font-family-sans, system-ui, sans-serif); font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
24
+ [data-ui='tile'], [data-ui='inline'] {
25
+ --sample-tone: var(--ui-tone-blue);
26
+ padding: 12px; border: 1px solid color-mix(in srgb, var(--sample-tone) 40%, transparent); border-radius: 4px;
27
+ background: color-mix(in srgb, var(--sample-tone) 10%, var(--ui-surface-sheet)); color: var(--ui-text-body);
28
+ font-size: 12px; text-align: center;
29
+ }
30
+ [data-tone='neutral'] { --sample-tone: var(--ui-tone-neutral); }
31
+ [data-tone='violet'] { --sample-tone: var(--ui-tone-violet); }
32
+ [data-tone='amber'] { --sample-tone: var(--ui-tone-amber); }
33
+ [data-ui='comparison'] { display: grid; grid-template-columns: repeat(auto-fit,minmax(min(100%,160px),1fr)); gap: 24px; }
34
+ [data-ui='comparison'] > section { min-width: 0; }
35
+ [data-ui='comparison'][data-scenario='box-sizing'] { grid-template-columns: repeat(auto-fit,minmax(min(100%,200px),1fr)); }
36
+ [data-ui='comparison'][data-scenario='containment'] { grid-template-columns: repeat(auto-fit,minmax(min(100%,280px),1fr)); }
37
+ [data-ui='surface'], [data-ui='type-frame'] { padding: 16px; border: 1px solid var(--ui-line-divider); border-radius: 4px; background: var(--ui-surface-sheet); }
38
+ [data-ui='type-frame'] { margin-bottom: 16px; }
39
+ [data-ui='type-example'] + [data-ui='type-example'] { margin-top: 24px; }
40
+ [data-ui='type-example'] { --type-tone: var(--ui-tone-blue); }
41
+ [data-ui='type-example'][data-tone='violet'] { --type-tone: var(--ui-tone-violet); }
42
+ [data-ui='type-surface'] { padding: 16px; border: 1px solid var(--ui-line-divider); border-radius: 4px; background: var(--ui-surface-sheet); }
43
+ :where([data-ui='type-target']:not([data-appearance='plain'])) { outline: 1px solid color-mix(in srgb,var(--type-tone) 24%,transparent); background: color-mix(in srgb,var(--type-tone) 5%,transparent); }
44
+ [data-ui='type-readings'] { display: flex; flex-wrap: wrap; gap: 6px 20px; margin-top: 10px; color: var(--ui-text-muted); font: 400 12px/1.6 var(--font-family-sans, system-ui, sans-serif); font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
45
+ [data-ui='type-readings'] > span { min-width: 0; }
46
+
47
+ [data-ui='flex'] { display: flex; gap: 12px; min-height: 160px; border: 1px dashed var(--ui-line-divider); padding: 12px; }
48
+ [data-ui='flex'] > [data-ui='tile'] { min-width: 40px; }
49
+ [data-scenario='visibility'] { min-height: 0; }
50
+ [data-scenario='visibility'] > [data-ui='tile'] { flex: 1; }
51
+ :where([data-ui='flex-layout']) { outline: 1px dashed var(--ui-line-divider); }
52
+ :where([data-ui='flex-cell']) {
53
+ --sample-tone: var(--ui-tone-blue);
54
+ outline: 1px solid color-mix(in srgb, var(--sample-tone) 45%, transparent); outline-offset: -1px; border-radius: 4px;
55
+ color: var(--ui-text-body); font-size: 12px;
56
+ }
57
+ [data-ui='flex-cell'] { background: color-mix(in srgb, var(--sample-tone) 10%, var(--ui-surface-sheet)); }
58
+ [data-ui='layout-example'] + [data-ui='layout-example'] { margin-top: 24px; }
59
+ [data-ui='layout-readings'] { display: flex; flex-wrap: wrap; gap: 8px 20px; margin-top: 12px; color: var(--ui-text-muted); font: 400 12px/1.6 var(--font-family-sans, system-ui, sans-serif); font-variant-numeric: tabular-nums; }
60
+ [data-ui='float-context'] { display: flow-root; width: 100%; min-height: 200px; }
61
+ [data-ui='float-image'] { width: 128px; height: 90px; margin-bottom: 12px; border-radius: 4px; }
62
+ [data-ui='float-quote'] { width: 128px; margin-bottom: 12px; border-inline-start: 2px solid var(--ui-tone-violet); padding: 12px; background: var(--ui-surface-sheet); }
63
+ [data-ui='columns'] { columns: 2; height: 230px; column-gap: 16px; }
64
+ [data-ui='columns'] > [data-ui='tile'] { margin-bottom: 12px; }
65
+ [data-scenario='prose-flow'] { height: auto; }
66
+ [data-scenario='prose-flow'] :is(h2,h3) { margin: 0 0 12px; padding: 12px; border: 1px solid var(--ui-tone-blue); background: var(--ui-surface-sheet); color: var(--ui-tone-blue); font-size: 14px; font-weight: 550; }
67
+ [data-scenario='fragmentation'] > [data-ui='tile'] { margin: 0; border-radius: 0; text-align: left; }
68
+ [data-ui='contain'] { width: 180px; height: 120px; border: 1px dashed var(--ui-tone-blue); padding: 16px; }
69
+ [data-ui='display'] { gap: 12px; }
70
+ [data-ui='inline'] { padding: 3px 8px; }
71
+ [data-ui='inline-layout'] { gap: 8px; padding: 8px; border: 1px solid color-mix(in srgb,var(--ui-tone-blue) 45%,transparent); border-radius: 4px; vertical-align: middle; }
72
+ [data-ui='table'] { width: 100%; border: 1px solid var(--ui-line-divider); border-spacing: 8px; }
73
+ [data-ui='table'] :is(td,th,.table-cell) { border: 1px solid var(--ui-line-divider); padding: 12px; background: var(--ui-surface-sheet); }
74
+ [data-ui='table'] :is(thead,tfoot,.table-header-group,.table-footer-group) { color: var(--ui-tone-blue); font-weight: 550; }
75
+ [data-ui='table'] [data-ui='collapse-row'] > td { background: color-mix(in srgb,var(--ui-tone-blue) 10%,var(--ui-surface-sheet)); }
76
+ [data-ui='table'] .table-caption { padding: 8px; }
77
+ [data-ui='position-context'] { outline: 1px dashed var(--ui-line-divider); }
78
+ [data-ui='original-slot'] { outline: 1px dashed var(--ui-tone-violet); }
79
+ [data-ui='local-context'] { outline: 1px dashed var(--ui-tone-blue); }
80
+ [data-ui='local-card'] { background: var(--ui-surface-sheet); border-radius: 4px; }
81
+ [data-ui='fixed-search'] { box-shadow: 0 2px 8px #0001; }
82
+ [data-ui='asset-collection'] > div { margin-bottom: 8px; }
83
+ [data-ui='scroll'] { border: 1px solid var(--ui-line-divider); }
84
+ [data-ui='isolation-backdrop'] { border-radius: 4px; }
85
+ [data-ui='blend-layer'] { color: #fff; font-weight: 550; text-align: center; border-radius: 3px; }
86
+ [data-ui='box-size-guide'] { width: 160px; border-top: 1px dashed var(--ui-tone-violet); padding-top: 12px; }
87
+ [data-ui='text'] { margin: 0; }
88
+ [data-ui='display-text'] { margin: 0; font-size: 32px; line-height: 1.35; font-weight: 550; }
89
+ [data-ui='list'] { padding-left: 28px; max-width: 320px; }
90
+ [data-ui='media-sample'] { width: 100%; height: 170px; object-fit: cover; background: var(--ui-surface-sheet); outline: 1px solid var(--ui-line-divider); }
91
+ [data-ui='media-sample'][data-ratio] { height: auto; }
92
+ [data-ui='truncate'] { padding: 12px; border: 1px solid var(--ui-line-divider); border-radius: 4px; }
93
+ [data-ui='overflow-frame'] { border: 1px dashed var(--ui-tone-violet); }
94
+ [data-ui='overflow-content'] { display: flex; flex-direction: column; justify-content: space-between; padding: 16px; background: repeating-linear-gradient(135deg,transparent 0 23px,var(--ui-line-hair) 23px 24px),color-mix(in srgb,var(--ui-tone-blue) 10%,var(--ui-surface-sheet)); }
95
+ [data-ui='overflow-content'] > :last-child { align-self: end; color: var(--ui-tone-violet); }
96
+ [data-scenario='scroll-containers'] { grid-template-columns: repeat(auto-fit,minmax(min(100%,224px),1fr)); }
97
+ [data-ui='scroll-actions'] { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; }
98
+ :where([data-ui='scrollport'], [data-ui='nested-outer']) { outline: 1px solid var(--ui-line-divider); border-radius: 4px; }
99
+ [data-ui='scroll-panel'] { padding: 16px; border: 1px solid var(--ui-line-divider); background: var(--ui-surface-sheet); font-size: 13px; }
100
+ [data-ui='scroll-panel'] strong { font-weight: 550; }
101
+ [data-ui='scroll-panel'] p { margin: 12px 0 0; color: var(--ui-text-muted); max-width: 36ch; }
102
+ [data-ui='scroll-panel']:nth-of-type(even) { background: color-mix(in srgb,var(--ui-tone-violet) 8%,var(--ui-surface-sheet)); }
103
+ [data-ui='scroll-panel'][data-target] { border-color: var(--ui-tone-blue); background: color-mix(in srgb,var(--ui-tone-blue) 10%,var(--ui-surface-sheet)); }
104
+ [data-ui='scroll-header'] { padding: 12px 16px; border-bottom: 1px solid var(--ui-tone-blue); background: var(--ui-surface-sheet); color: var(--ui-tone-blue); }
105
+ [data-ui='scroll-actions'] a { padding: 8px 12px; border: 1px solid var(--ui-line-divider); border-radius: 4px; background: var(--ui-surface-sheet); text-decoration: none; }
106
+ [data-ui='scroll-readings'] { display: flex; flex-wrap: wrap; gap: 8px 20px; padding-block: 12px; font: 400 12px/1.6 var(--font-family-sans, system-ui, sans-serif); font-variant-numeric: tabular-nums; color: var(--ui-text-muted); }
107
+ [data-ui='scroll-readings'] output { color: var(--ui-text-body); }
108
+ [data-scenario='nested-scrolling'] { grid-template-columns: repeat(auto-fit,minmax(min(100%,200px),1fr)); }
109
+ :where([data-ui='nested-inner']) { outline: 1px solid var(--ui-tone-blue); border-radius: 3px; }
110
+ [data-ui='nested-content'] { display: flex; flex-direction: column; justify-content: space-between; padding: 12px; background: color-mix(in srgb,var(--ui-tone-violet) 8%,var(--ui-surface-sheet)); }
111
+ [data-ui='nested-inner'] > [data-ui='nested-content'] { background: color-mix(in srgb,var(--ui-tone-blue) 10%,var(--ui-surface-sheet)); }
112
+ [data-ui='nested-content'] > span { align-self: end; font: 400 12px/1.6 var(--font-family-sans, system-ui, sans-serif); font-variant-numeric: tabular-nums; color: var(--ui-text-muted); }
113
+ html[data-demo-paused] * { animation-play-state: paused !important; }
114
+ @media (prefers-reduced-motion: reduce) {
115
+ html:not([data-motion-allowed]) *, html:not([data-motion-allowed]) ::before, html:not([data-motion-allowed]) ::after { animation-play-state: paused !important; transition-duration: 0s !important; scroll-behavior: auto !important; }
116
+ }
117
+ @media (width < 360px) { body { padding: 16px; } }
118
+ }
@@ -0,0 +1,42 @@
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 comparisons: Record<string, string[]> = {
6
+ 'fill-by-column': ['Row flow', 'Column flow'],
7
+ 'fill-gaps-densely': ['Sparse · keep moving forward', 'Dense · fill earlier holes'],
8
+ 'place-an-item-by-columns': ['Column lines 2 → 4', 'Column lines 1 → −1'],
9
+ 'place-an-item-by-rows': ['Row lines 1 → 3', 'Row lines 1 → −1'],
10
+ }
11
+
12
+ /** Track definitions and placement come only from each section's complete HTML. */
13
+ export function grid(section: ReferenceDemoSection): DemoScene {
14
+ const { page, id } = section
15
+ const item = ['grid-area', 'grid-column', 'grid-row'].includes(page)
16
+ const property = ({ 'grid-columns': 'grid-template-columns', 'grid-rows': 'grid-template-rows' } as Record<string, string>)[page] ?? page
17
+ const names = id === 'use-minmax'
18
+ ? page === 'grid-template-columns' ? ['Automatic track minimum', 'Zero track minimum'] : ['One line · minimum height', 'Four lines · content height']
19
+ : comparisons[id]
20
+ const html = section.html.map((source, index) => {
21
+ const prefix = section.html.length > 1 ? `example-${index}-` : ''
22
+ const layout = `${prefix}layout`, target = `${prefix}target`
23
+ const reading = (name: string, element: string, value: string) => `<span>${name} <output data-style-readout="${element}" data-style-property="${value}"${/grid-template-(columns|rows)/.test(value) ? ' data-round-pixels' : ''}>—</output></span>`
24
+ const placement = item ? reading('Blue placement', target, property) : ''
25
+ const areas = page === 'grid-template-areas' ? reading('Areas', layout, 'grid-template-areas') : ''
26
+ return `<section data-ui="layout-example">${names ? label(names[index]) : ''}${paintLayout(source, prefix, index === 0 ? item ? 'target' : 'layout' : '')}<div data-ui="layout-readings">${reading('Columns', layout, 'grid-template-columns')}${reading('Rows', layout, 'grid-template-rows')}${reading('Flow', layout, 'grid-auto-flow')}${placement}${areas}<span>Blue item <output data-size-readout="${target}">—</output></span><span>Blue offset <output data-position-readout="${target}" data-position-origin="${layout}">—</output></span></div></section>`
27
+ }).join('')
28
+ const captions: Record<string, string> = {
29
+ 'grid-area': 'The blue region follows its authored line boundaries or area name. Siblings occupy the same real grid; labels do not add cells.',
30
+ 'grid-auto-columns': 'The violet first column is explicit. The blue column and its following sibling use the implicit-column size.',
31
+ 'grid-auto-rows': 'The first row is explicit. The blue item belongs to an implicit row created for additional content.',
32
+ 'grid-auto-flow': id === 'fill-gaps-densely' ? 'Compare the position of 03, then focus 01 and press Tab. Visual packing changes; source-order keyboard traversal does not.' : 'Read the numbers in DOM order. Track definitions stay the same while placement searches across rows or down columns.',
33
+ 'grid-column': 'Column lines bound each track. The blue width includes every track and internal gap in its span.',
34
+ 'grid-row': 'Row lines bound each track. The blue height includes every track and internal gap in its span.',
35
+ 'grid-columns': 'The columns share the width left after gaps. Additional items create new rows while preserving source order.',
36
+ 'grid-rows': 'Follow the numbers down each column. The fixed container height makes the equal row sizes measurable.',
37
+ 'grid-template-areas': 'Header, Nav and Content keep their area names. The parent supplies both the region map and its track sizes.',
38
+ 'grid-template-columns': id === 'use-minmax' ? 'The content stays 192px wide in both examples. The blue cell clips excess content when its track is allowed to shrink.' : 'Fixed tracks and gaps reserve space first. Fractional tracks divide what remains, subject to their minimums.',
39
+ 'grid-template-rows': id === 'use-minmax' ? 'The taller content grows the first row; the fractional second row receives less of the fixed height.' : 'The row readings include every resolved track. The gap is space between tracks, not part of their individual heights.',
40
+ }
41
+ return { html, caption: captions[page], sizing: 'content', inspect: id === 'apply-conditionally' ? [] : undefined }
42
+ }
@@ -0,0 +1,40 @@
1
+ import type { ReferenceDemoSection } from '@master/internal-site/demo/reference/types.ts'
2
+
3
+ export const prose = 'Good tools make room for clear thinking. Arrange the canvas, explore a small detail, and see how each decision changes the whole composition.'
4
+ export const longText = 'Design systems give teams a shared language for building thoughtful interfaces. A clear hierarchy helps people find what matters, while consistent spacing makes each relationship easier to understand.'
5
+ export const artwork = '/demo/landscape.svg'
6
+ export const mask = '/demo/mask.svg'
7
+
8
+ export function escape(value: string) {
9
+ return value.replaceAll('&', '&amp;').replaceAll('"', '&quot;').replaceAll('<', '&lt;').replaceAll('>', '&gt;')
10
+ }
11
+
12
+ export function classValue(value = '') {
13
+ return escape(value.replaceAll('/hero.jpg', artwork).replaceAll('/mask.png', mask).replaceAll('/marker.svg', '/demo/marker.svg'))
14
+ }
15
+
16
+ export function tile(label: string, classes = '', tone = 'blue', style = '', attributes = '') {
17
+ return `<div data-ui="tile" data-tone="${tone}"${classes ? ' data-target' : ''} class="${classValue(classes)}"${style ? ` style="${escape(style)}"` : ''}${attributes ? ` ${attributes}` : ''}>${label}</div>`
18
+ }
19
+
20
+ export function label(text: string) { return `<div data-ui="label">${escape(text)}</div>` }
21
+
22
+ export function specimen(content: string, classes = '', attrs = '') {
23
+ return `<div data-target class="${classValue(classes)}" ${attrs}>${content}</div>`
24
+ }
25
+
26
+ export function samples(section: ReferenceDemoSection): string[] {
27
+ return section.classLists.filter(Boolean)
28
+ }
29
+
30
+ export function comparison(samples: { name: string, content: string }[]) {
31
+ return `<div data-ui="comparison">${samples.map(sample => `<section>${label(sample.name)}${sample.content}</section>`).join('')}</div>`
32
+ }
33
+
34
+ export function image(classes = '', attrs = '') {
35
+ return `<img${classes ? ' data-target' : ''} src="${artwork}" alt="Sun above layered mountains" class="${classValue(classes)}" ${attrs}>`
36
+ }
37
+
38
+ export function numbered(count = 4, classes = '') {
39
+ return Array.from({ length: count }, (_, index) => tile(String(index + 1).padStart(2, '0'), classes, index === 1 ? 'violet' : 'blue')).join('')
40
+ }
@@ -0,0 +1,42 @@
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
+ 'accent-color': ['accent-color'], 'appearance': ['appearance'],
6
+ 'caret-color': ['caret-color', 'color'], 'cursor': ['cursor'],
7
+ 'pointer-events': ['pointer-events'], 'resize': ['resize'],
8
+ 'screen-readers': ['position', 'width', 'height'],
9
+ 'touch-action': ['touch-action'], 'user-drag': ['-webkit-user-drag'],
10
+ 'user-select': ['user-select'],
11
+ }
12
+ const captions: Record<string, string> = {
13
+ 'accent-color': 'Use the actual checkbox, radio group and range. The browser and platform decide how a requested accent is painted; the controls retain their native keyboard behavior.',
14
+ 'appearance': 'The full authored select and its options remain native. Change its value with the platform picker or keyboard; appearance changes paint without replacing the accessible label.',
15
+ 'caret-color': 'Focus and edit the named text field. The insertion caret, text color, focus outline and mouse pointer are separate. Native blinking may hide the caret in a still image.',
16
+ 'cursor': 'The cursor is a platform-rendered affordance. Try the real disclosure, reset control or native draggable image; the cursor itself does not implement the action.',
17
+ 'pointer-events': 'Pointer hit testing and keyboard access are independent. Use the real checkbox or reset button to verify the action; transparent overlays keep their authored geometry.',
18
+ 'resize': 'Drag the native resize handle where supported. The readout measures the real control box as it changes. Editing and scrolling remain available when handles are absent.',
19
+ 'screen-readers': 'Visible annotations explain the actual accessible name or description. Use Tab to reach the visible native control; its hidden label is not a separate focus target.',
20
+ 'touch-action': 'Swipe on a touch device to test native panning. Keyboard scrolling remains available. The rules allow or restrict browser gestures; no custom drawing or drag handler is supplied.',
21
+ 'user-drag': 'Try a native pointer drag in a supporting browser. The event readout observes actual drag starts; vendor property support and touch behavior depend on the platform.',
22
+ 'user-select': 'Use the platform’s text-selection gesture on the authored content. Selection rules do not disable native control actions or protect text from copying.',
23
+ }
24
+
25
+ /** Native controls, their labels and the complete teaching context stay authored in MDX. */
26
+ export function interaction(section: ReferenceDemoSection): DemoScene {
27
+ const scene = typeSpecimens(section, {
28
+ appearance: 'plain', properties: properties[section.page], caption: captions[section.page],
29
+ measure: section.page === 'resize', measureLabel: 'Control box',
30
+ })
31
+ if (section.page === 'touch-action' || section.page === 'user-drag') {
32
+ scene.html = scene.html.replace(/(<div data-ui="type-readings">)([\s\S]*?)(<\/div>)/g, (_, open: string, readings: string, close: string) => {
33
+ const target = readings.match(/data-style-readout="([^"]+)"/)?.[1]
34
+ return section.page === 'touch-action' && section.id !== 'optimize-tap-controls'
35
+ ? `${open}${readings}<span>Scroll <output data-scroll-readout="${target}">—</output></span>${close}`
36
+ : section.page === 'user-drag'
37
+ ? `${open}${readings.replace('data-style-property="-webkit-user-drag"', 'data-style-property="-webkit-user-drag" data-empty-value="Not exposed"')}<span>Native drag <output data-drag-readout="${target}">No start observed</output></span>${close}`
38
+ : `${open}${readings}${close}`
39
+ })
40
+ }
41
+ return scene
42
+ }
@@ -0,0 +1,10 @@
1
+ /** Paint known authored boxes without supplying layout, sizing or positioning. */
2
+ export function paintLayout(source: string, prefix: string, inspected: string, measured = 'target') {
3
+ return source.replace(/<([a-z]+)(\s[^>]*|)>/g, (tag: string, element: string, attributes: string) => {
4
+ const id = attributes.match(/\bid="([\w-]+)"/)?.[1]
5
+ if (!id || !/^(?:layout|target|peer|item-\d+)$/.test(id)) return tag
6
+ const layout = id === 'layout'
7
+ const tone = id === measured ? 'blue' : id === 'peer' || id === 'item-2' ? 'violet' : 'neutral'
8
+ return `<${element}${attributes.replace(`id="${id}"`, `id="${prefix}${id}"`)} data-ui="${layout ? 'flex-layout' : 'flex-cell'}"${layout ? '' : ` data-tone="${tone}"`}${id === inspected ? ' data-target' : ''}>`
9
+ })
10
+ }
@@ -0,0 +1,102 @@
1
+ import type { DemoScene, ReferenceDemoSection } from '@master/internal-site/demo/reference/types.ts'
2
+ import { classValue, comparison, image, label, longText, numbered, prose, specimen, tile } from '@master/internal-site/demo/reference/html.ts'
3
+
4
+ export function flow(section: ReferenceDemoSection): DemoScene {
5
+ const { page, id, classLists: lists } = section
6
+ const target = lists[0] ?? ''
7
+ if (page === 'clear') {
8
+ const cleared = lists.find(value => value.includes('(clear:')) ?? '(clear:both)'
9
+ const left = lists.find(value => value.includes('(float:left)')) ?? '(float:left) (width:34%) (height:4.5rem)'
10
+ const right = lists.find(value => value.includes('(float:right)')) ?? '(float:right) (width:34%) (height:8.5rem)'
11
+ const conditional = id === 'apply-conditionally'
12
+ return {
13
+ html: `<div data-ui="float-context">${tile('Left float', left, 'neutral').replace(' data-target', '')}${tile('Right float', right, 'violet').replace(' data-target', '')}${tile(conditional ? 'Focus with Tab' : 'Clear target', cleared, 'blue', 'width:58%;min-height:56px', conditional ? 'tabindex="0"' : '')}</div>`,
14
+ caption: conditional ? 'Focus the blue element with Tab to clear both floats. The same change applies in the wider viewport and print preview.' : id === 'clearing-right-floats' ? 'The blue block clears the right float. Its text still wraps around the taller left float, whose box overlaps the blue background.' : 'The blue element clears the requested side. Unequal float heights make left, right and both visibly different.',
15
+ inspect: ['clear'], sizing: 'content',
16
+ }
17
+ }
18
+ if (page === 'float') {
19
+ return {
20
+ html: `<div data-ui="float-context">${id === 'float-elements-to-the-right' ? `<aside data-target data-ui="float-quote" class="${classValue(target)}">Good tools make room for clear thinking.</aside>` : image(target, 'data-ui="float-image"')}<p>${longText} ${prose}</p></div>`,
21
+ caption: 'Follow how the paragraph wraps beside the floated object, then returns to the full line width.', height: 300, sizing: 'content',
22
+ }
23
+ }
24
+ if (page === 'box-sizing') {
25
+ return {
26
+ html: comparison((lists.length ? lists : ['box-border', 'box-content']).map(value => ({ name: value, content: `${label('160px reference')}<div data-ui="box-size-guide">${tile('Content', value)}</div>` }))).replace('data-ui="comparison"', 'data-ui="comparison" data-scenario="box-sizing"'),
27
+ caption: 'The dashed reference is 160px wide. Border-box fits inside it; content-box adds its padding and border to that width.', inspect: ['box-sizing', 'width'], sizing: 'content',
28
+ }
29
+ }
30
+ if (page === 'column-count' || page === 'column-width' || page === 'column-span') {
31
+ const html = section.html[0]
32
+ .replace(/<(article|div) class="/, `<$1 data-ui="columns" data-scenario="prose-flow"${page !== 'column-span' ? ' data-target' : ''} class="`)
33
+ .replace(/<(h2|h3) class="/, '<$1 data-target class="')
34
+ return {
35
+ html,
36
+ caption: page !== 'column-span' ? 'Read down each column, then across to the next. The container grows naturally instead of forcing overflow columns.' : 'The highlighted heading belongs to the column flow. With all, it crosses the column set and the following text resumes below it.',
37
+ sizing: 'content',
38
+ }
39
+ }
40
+ if (page.startsWith('break-')) {
41
+ const parent = lists.find(value => /columns:|column-count:/.test(value)) ?? '(column-count:2) (height:12.5rem) (column-fill:auto)'
42
+ const values = lists.length > 1 ? lists.slice(1, 5) : ['h(130)', target, 'h(60)', 'h(40)']
43
+ const preview = (baseline: boolean) => `<div data-ui="columns" data-scenario="fragmentation" class="${classValue(parent)}">${values.map((value, index) => tile(index === 1 ? '02 · Target' : `0${index + 1}`, value, index === 1 ? 'blue' : 'neutral', baseline && index === 1 ? `${page}:auto` : '').replace(baseline || index !== 1 ? ' data-target' : ' data-unused', '')).join('')}</div>`
44
+ const caption = page === 'break-inside' ? 'Both column sets are 200px tall. The blue block can split in the automatic flow; avoid keeps it together when the condition applies.' : `Both column sets are 200px tall. The forced break moves content to the next column ${page === 'break-before' ? 'before' : 'after'} the blue block when the condition applies.`
45
+ return { html: comparison([{ name: 'Automatic breaks', content: preview(true) }, { name: 'With class', content: preview(false) }]), caption, sizing: 'content' }
46
+ }
47
+ if (page === 'contain') {
48
+ const panel = (baseline: boolean) => `<div data-ui="contain"${baseline ? ' style="contain:none"' : ' data-target'} class="${classValue(target)}">${tile('Wide content', lists[1], 'violet').replace(' data-target', '')}</div>`
49
+ return {
50
+ html: comparison([{ name: 'No containment', content: panel(true) }, { name: 'With class', content: panel(false) }]).replace('data-ui="comparison"', 'data-ui="comparison" data-scenario="containment"'),
51
+ caption: 'Both violet blocks keep their full width. Paint containment changes which part is visible, without resizing the child.', inspect: ['contain'], sizing: 'content',
52
+ }
53
+ }
54
+ if (page === 'visibility') {
55
+ if (section.classes.some(value => value.includes('collapse'))) {
56
+ const table = (collapsed: boolean) => `<table data-ui="table"><tbody><tr><td>01</td><td>First row</td></tr><tr data-ui="collapse-row"${collapsed ? ' data-target' : ''} class="${classValue(collapsed ? target : '')}"><td>02</td><td>Middle row</td></tr><tr><td>03</td><td>Last row</td></tr></tbody></table>`
57
+ return { html: comparison([{ name: 'Visible middle row', content: table(false) }, { name: 'Collapsed middle row', content: table(true) }]), caption: 'Compare the gap between rows 01 and 03. Collapsing a table row removes its space; hidden visibility on an ordinary block does not.', inspect: ['visibility'], sizing: 'content' }
58
+ }
59
+ return { html: `<div data-ui="flex" data-scenario="visibility">${tile('01', '', 'neutral')}${tile('02', target)}${tile('03', '', 'violet')}</div>`, caption: 'Item 02 receives the visibility class. Its space remains even when it is invisible.', inspect: ['visibility'], sizing: 'content' }
60
+ }
61
+ return display(section)
62
+ }
63
+
64
+ function display(section: ReferenceDemoSection): DemoScene {
65
+ const { id, classLists: lists } = section
66
+ const target = lists[0] ?? 'block'
67
+ let html: string
68
+ if (id.includes('table')) {
69
+ html = section.html[0].replace("<div class=\"table\">", "<div class=\"table\" data-ui=\"table\" data-target>")
70
+ } else if (id === 'contents') {
71
+ html = `<div data-ui="flex" class="${classValue(target)}">${tile('01', lists[1])}<div class="contents">${tile('02', lists[3], 'violet')}${tile('03', lists[4], 'violet')}</div>${tile('04', lists[5])}</div>`
72
+ } else if (id === 'flow-root') {
73
+ html = `<div class="flow-root" data-ui="surface">${image(lists[1], 'data-ui="float-image"')}<p>${prose}</p></div>`
74
+ } else if (id === 'hidden') {
75
+ html = `<div data-ui="flex" class="${classValue(target)}">${tile('01')}${tile('02', 'hidden')}${tile('03', '', 'violet')}</div>`
76
+ } else if (id === 'inline-grid') {
77
+ html = `<p>Before <span data-ui="inline-layout" data-target class="${classValue(target)}">${['01', '02', '03', '04'].map(value => `<span data-ui="tile">${value}</span>`).join('')}</span> after. The grid stays in the surrounding text flow.</p>`
78
+ } else if (id === 'inline-flex') {
79
+ html = `<p>Before <span data-ui="inline-layout" data-target class="${classValue(target)}"><span aria-hidden="true">●</span><span>In progress</span></span> after. The badge stays in the surrounding text flow.</p>`
80
+ } else if (id === 'list-item') {
81
+ html = `<div data-ui="list">${['01', '02', '03'].map(value => `<div data-ui="inline" data-target class="list-item">${value}</div>`).join('')}</div>`
82
+ } else if (id === 'block--inline') {
83
+ const variants = ['block', 'inline', 'inline-block']
84
+ html = variants.map(value => `<p>Before <span data-ui="inline" data-target class="${classValue(value)}">${value}</span> after. Follow where this line continues.</p>`).join('')
85
+ } else {
86
+ html = specimen(numbered(id === 'grid' ? 4 : 3), target, 'data-ui="display"')
87
+ }
88
+ const captions: Record<string, string> = {
89
+ 'block--inline': 'A block starts a new line. Inline and inline-block boxes remain beside the surrounding text.',
90
+ flex: 'The three direct children share a flex row with the authored gap.',
91
+ 'inline-flex': 'The badge aligns its children with flex while staying in the paragraph’s line of text.',
92
+ grid: 'Four direct children occupy two explicitly defined grid columns.',
93
+ 'inline-grid': 'The four cells form a grid inside one inline box; the paragraph continues beside it.',
94
+ table: 'Header, body and footer groups share the same table columns. This CSS-only structure has no native table semantics.',
95
+ contents: 'The violet items belong to the contents wrapper. All four items participate in the outer flex layout.',
96
+ 'flow-root': 'The outlined parent contains the floated image as well as the paragraph.',
97
+ 'list-item': 'Each element produces its own list marker. Use native list elements when the content is a semantic list.',
98
+ hidden: 'Item 02 is still in the DOM, but hidden removes its box and its space.',
99
+ 'apply-conditionally': 'Resize to switch between grid and flex. Print preview uses ordinary block flow at every page width.',
100
+ }
101
+ return { html, caption: captions[id], height: 280, sizing: 'content' }
102
+ }
@@ -0,0 +1,29 @@
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
+ 'object-fit': ['object-fit', 'object-position'],
6
+ 'object-position': ['object-position', 'object-fit'],
7
+ 'fill': ['fill', 'stroke'],
8
+ 'stroke': ['stroke', 'stroke-width', 'fill'],
9
+ 'stroke-width': ['stroke-width', 'stroke'],
10
+ }
11
+ const captions: Record<string, string> = {
12
+ 'object-fit': 'The source is 320 × 200. The measured box belongs to the image element; fitting changes the content inside it.',
13
+ 'object-position': 'The 240 × 100 image box contains a 240 × 150 cover image. Positioning changes its crop without moving the element.',
14
+ 'fill': 'The shapes and paint are explicitly authored. Fill is inherited independently of stroke; controls retain their native accessible names.',
15
+ 'stroke': 'Paint, width and paths remain explicit. The values are inherited by the actual shapes, including the icon inside a native control.',
16
+ 'stroke-width': 'The 24 × 24 viewBox scales into a 96 × 96 viewport. Computed width and final painted thickness are different measurements.',
17
+ }
18
+
19
+ /** Preserve actual image content boxes, SVG viewports and inherited paint. */
20
+ export function media(section: ReferenceDemoSection): DemoScene {
21
+ return {
22
+ ...typeSpecimens(section, {
23
+ appearance: 'plain',
24
+ properties: section.id === 'apply-conditionally' && /^(fill|stroke)$/.test(section.page) ? [section.page] : properties[section.page],
25
+ measure: true, caption: captions[section.page],
26
+ }),
27
+ theme: section.id === 'use-theme-colors' || undefined,
28
+ }
29
+ }
@@ -0,0 +1,90 @@
1
+ import type { DemoScene, ReferenceDemoSection } from '@master/internal-site/demo/reference/types.ts'
2
+ import { classValue, comparison, label, tile } from '@master/internal-site/demo/reference/html.ts'
3
+
4
+ const context = (content: string, classes: string, attrs = '') => `<div data-ui="position-context" class="${classValue(classes)}" ${attrs}>${content}</div>`
5
+ const quiet = (html: string) => html.replaceAll(' data-target', '')
6
+
7
+ /** Offsets and containing blocks come from the adjacent authored example. */
8
+ export function position(section: ReferenceDemoSection): DemoScene {
9
+ const { id, classLists: lists } = section
10
+ if (id.includes('static') || id.includes('relative')) {
11
+ return {
12
+ html: `${label('Dashed outline · original slot')}<div data-ui="original-slot" class="${classValue(lists[0])}">${tile('Target', lists[1])}</div>${quiet(tile('Next in flow', lists[2], 'violet'))}`,
13
+ caption: id.includes('static') ? 'The inset values are ignored. The target stays inside its original slot.' : 'The target moves 20px right and down. Its original slot and the next box stay in place.',
14
+ height: 250, inspect: ['position', 'top', 'left'],
15
+ }
16
+ }
17
+ if (id.includes('fixed')) {
18
+ return {
19
+ html: `<div class="${classValue(lists[0])}"><input type="search" aria-label="Filter assets" placeholder="Filter assets" data-target data-ui="fixed-search" class="${classValue(lists[1])}"><div data-ui="asset-collection" class="${classValue(lists[2])}">${Array.from({ length: 10 }, (_, i) => tile(`Asset ${String(i + 1).padStart(2, '0')}`, '', i % 2 ? 'neutral' : 'blue')).join('')}</div></div>`,
20
+ caption: 'Scroll inside the preview. The field stays fixed to this iframe viewport while the collection moves beneath it.',
21
+ height: 300, inspect: ['position'],
22
+ }
23
+ }
24
+ if (id.includes('sticky')) {
25
+ return {
26
+ html: `<div data-ui="scroll" class="${classValue(lists[0])}" tabindex="0" aria-label="Scrollable asset list">${quiet(tile('Scroll down', lists[1], 'neutral'))}${tile('Pinned collection', lists[2])}<div data-ui="asset-collection" class="${classValue(lists[3])}">${Array.from({ length: 8 }, (_, i) => tile(`Asset ${i + 1}`, '', 'neutral')).join('')}</div></div>`,
27
+ caption: 'Focus the list and scroll with the arrow keys. The blue row sticks to its top edge after the first row scrolls away.',
28
+ height: 288, inspect: ['position', 'top'],
29
+ }
30
+ }
31
+ const conditional = id === 'apply-conditionally'
32
+ return {
33
+ html: `${label('Containing block · relative parent')}${context(tile(conditional ? 'Focus with Tab' : 'Target', lists[1], 'blue', '', conditional ? 'tabindex="0"' : ''), lists[0])}`,
34
+ caption: conditional ? 'Focus the blue box or widen to sm. Absolute positioning moves it to the parent’s bottom-right corner.' : 'Top and right insets measure from this parent’s padding edge. The child contributes no height to normal flow.',
35
+ height: 244, inspect: conditional ? ['position', 'right', 'bottom'] : ['position', 'top', 'right'],
36
+ }
37
+ }
38
+
39
+ export function inset(section: ReferenceDemoSection): DemoScene {
40
+ const { id, classLists: lists } = section
41
+ const conditional = id === 'apply-conditionally'
42
+ const child = id === 'pin-one-side'
43
+ ? `<button type="button" data-target class="${classValue(lists[1])}">Close</button>`
44
+ : tile(conditional ? 'Focus with Tab' : id === 'center-overlays-with-inset' ? 'Overlay' : 'Inset on all four sides', lists[1], 'blue', '', conditional ? 'tabindex="0"' : '')
45
+ return {
46
+ html: `${label('Dashed boundary · positioned parent')}${context(child, lists[0])}`,
47
+ caption: conditional ? 'The box stretches between four insets. Focus increases the space around it; the viewport condition sets a larger resting inset.' : id === 'pin-one-side' ? 'Only the top and right edges are pinned. The button keeps its content width and height.' : 'Automatic width and height let the opposing insets determine the overlay’s dimensions.',
48
+ inspect: id === 'pin-one-side' ? ['top', 'right'] : ['top', 'right', 'bottom', 'left'], height: 244,
49
+ }
50
+ }
51
+
52
+ function negativeLayer(lists: string[]): DemoScene {
53
+ return {
54
+ html: `<article data-ui="local-card" class="${classValue(lists[0])}">${tile('', lists[1], 'blue', '', 'aria-hidden="true"')}<p>Foreground content</p></article>`,
55
+ caption: 'The isolated parent contains the negative layer. The blue decoration paints above the parent’s surface and behind its text.',
56
+ inspect: ['z-index'], height: 208,
57
+ }
58
+ }
59
+
60
+ export function stacking(section: ReferenceDemoSection): DemoScene {
61
+ const { id, classLists: lists } = section
62
+ if (id.includes('negative')) return negativeLayer(lists)
63
+ const layer = (text: string, classes: string, tone: string) => tile(text, classes, tone, 'display:grid;align-content:end;text-align:right;padding:4px 12px')
64
+ if (id.includes('local')) {
65
+ return {
66
+ html: `${label('Context 0 contains child 99 · sibling 1 paints above both')}${context(`<article data-ui="local-context" class="${classValue(lists[1])}">${tile('Child 99', lists[2], 'blue', 'text-left')}</article>${layer('Sibling 1', lists[3], 'violet')}`, lists[0])}`,
67
+ caption: 'Z-index values are compared within their own stacking context. Raising the child to 99 cannot lift its parent above sibling 1.', sizing: 'content',
68
+ }
69
+ }
70
+ const conditional = id === 'apply-conditionally'
71
+ return {
72
+ html: `${label(conditional ? 'Blue target · violet comparison' : 'Larger z-index paints above smaller values')}${context(conditional
73
+ ? tile('Focus with Tab', lists[1], 'blue', '', 'tabindex="0"') + quiet(layer('Layer 10', lists[2], 'violet'))
74
+ : lists.slice(1).map((value, index) => layer(`Layer ${30 - index * 10}`, value, index === 1 ? 'violet' : index === 2 ? 'neutral' : 'blue')).join(''), lists[0])}`,
75
+ caption: conditional ? 'Focus the blue box to bring it forward. Widening to sm gives it the same higher paint order.' : 'All three boxes are absolute children of one isolated parent. Their visible edges reveal the paint order.',
76
+ inspect: ['z-index'], sizing: 'content',
77
+ }
78
+ }
79
+
80
+ export function isolation(section: ReferenceDemoSection): DemoScene {
81
+ const { id, classLists: lists } = section
82
+ if (id === 'protect-layered-components') return negativeLayer(lists)
83
+ const conditional = id === 'apply-conditionally'
84
+ const sample = (baseline: boolean) => `<div data-ui="isolation-backdrop" class="${classValue(lists[0])}"><section${baseline ? '' : ' data-target'} class="${classValue(baseline ? '(isolation:auto)' : lists[1])}"${conditional && !baseline ? ' tabindex="0"' : ''}><div data-ui="blend-layer" class="${classValue(lists[2])}">${conditional && !baseline ? 'Focus with Tab' : 'Blend layer'}</div></section></div>`
85
+ return {
86
+ html: comparison([{ name: 'Automatic · external blend', content: sample(true) }, { name: 'With class', content: sample(false) }]),
87
+ caption: 'Both blue backgrounds sit outside the tested section. An isolated section prevents its purple child from blending with that external backdrop.',
88
+ inspect: ['isolation'], sizing: 'content',
89
+ }
90
+ }