@astronox/core 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 (259) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +66 -0
  3. package/package.json +77 -0
  4. package/src/client/clipboard.ts +7 -0
  5. package/src/client/focus.ts +17 -0
  6. package/src/client/index.ts +3 -0
  7. package/src/client/scroll.ts +15 -0
  8. package/src/components/actions/ActionListItem/ActionListItem.astro +78 -0
  9. package/src/components/actions/ActionListItem/ActionListItem.css +43 -0
  10. package/src/components/actions/Button/Button.astro +100 -0
  11. package/src/components/actions/Button/Button.css +165 -0
  12. package/src/components/actions/CardAction/CardAction.astro +97 -0
  13. package/src/components/actions/CardAction/CardAction.css +188 -0
  14. package/src/components/actions/MediaTrigger/MediaTrigger.astro +55 -0
  15. package/src/components/actions/MediaTrigger/MediaTrigger.css +175 -0
  16. package/src/components/actions/ScrollToTop/ScrollToTop.astro +36 -0
  17. package/src/components/actions/ScrollToTop/ScrollToTop.css +19 -0
  18. package/src/components/actions/ScrollToTop/scrollToTopController.ts +32 -0
  19. package/src/components/content/CardBody/CardBody.astro +31 -0
  20. package/src/components/content/CardBody/CardBody.css +74 -0
  21. package/src/components/content/CardFooter/CardFooter.astro +58 -0
  22. package/src/components/content/CardFooter/CardFooter.css +102 -0
  23. package/src/components/content/CardHeader/CardHeader.astro +96 -0
  24. package/src/components/content/CardHeader/CardHeader.css +164 -0
  25. package/src/components/content/CardLink/CardLink.astro +138 -0
  26. package/src/components/content/CardLink/CardLink.css +362 -0
  27. package/src/components/content/CodeBlock/CodeBlock.astro +102 -0
  28. package/src/components/content/CodeBlock/CodeBlock.css +85 -0
  29. package/src/components/content/CodeBlock/codeBlockController.ts +60 -0
  30. package/src/components/content/CodeBlock/contracts.ts +8 -0
  31. package/src/components/content/InlineDefinition/InlineDefinition.astro +31 -0
  32. package/src/components/content/InlineDefinition/InlineDefinition.css +9 -0
  33. package/src/components/content/MarkdownContent/MarkdownContent.astro +32 -0
  34. package/src/components/content/MarkdownContent/MarkdownContent.css +358 -0
  35. package/src/components/content/MarkdownContent/MarkdownInline.astro +44 -0
  36. package/src/components/content/MarkdownContent/MarkdownNode.astro +280 -0
  37. package/src/components/content/MarkdownContent/MarkdownSymbol.astro +47 -0
  38. package/src/components/content/MarkdownContent/contracts.ts +181 -0
  39. package/src/components/data-display/BadgeList/BadgeList.astro +54 -0
  40. package/src/components/data-display/BadgeList/BadgeList.css +29 -0
  41. package/src/components/data-display/IconList/IconList.astro +64 -0
  42. package/src/components/data-display/IconList/IconList.css +55 -0
  43. package/src/components/data-display/MetricTile/MetricTile.astro +68 -0
  44. package/src/components/data-display/MetricTile/MetricTile.css +103 -0
  45. package/src/components/data-display/MetricTile/MetricTileContent.astro +70 -0
  46. package/src/components/data-display/MetricTile/metricTileController.ts +9 -0
  47. package/src/components/data-display/Tag/Tag.astro +67 -0
  48. package/src/components/data-display/Tag/Tag.css +134 -0
  49. package/src/components/data-display/Tag/TagAffix.astro +33 -0
  50. package/src/components/data-display/TextPair/TextPair.astro +63 -0
  51. package/src/components/data-display/TextPair/TextPair.css +99 -0
  52. package/src/components/feedback/Spinner/Spinner.astro +32 -0
  53. package/src/components/feedback/Spinner/Spinner.css +37 -0
  54. package/src/components/feedback/Tooltip/Tooltip.astro +66 -0
  55. package/src/components/feedback/Tooltip/Tooltip.css +67 -0
  56. package/src/components/feedback/Tooltip/tooltipController.ts +371 -0
  57. package/src/components/forms/FieldError/FieldError.astro +31 -0
  58. package/src/components/forms/FieldError/FieldError.css +12 -0
  59. package/src/components/forms/FieldError/fieldErrorState.ts +21 -0
  60. package/src/components/forms/FieldLabel/FieldLabel.astro +32 -0
  61. package/src/components/forms/FieldLabel/FieldLabel.css +17 -0
  62. package/src/components/forms/TextInput/TextInput.astro +79 -0
  63. package/src/components/forms/TextInput/TextInput.css +121 -0
  64. package/src/components/forms/TextInput/textInputController.ts +53 -0
  65. package/src/components/icons/ArrowDownIcon.astro +26 -0
  66. package/src/components/icons/ArrowLeftIcon.astro +26 -0
  67. package/src/components/icons/ArrowRightIcon.astro +26 -0
  68. package/src/components/icons/ArrowUpDownIcon.astro +26 -0
  69. package/src/components/icons/ArrowUpIcon.astro +26 -0
  70. package/src/components/icons/BulletIcon.astro +21 -0
  71. package/src/components/icons/BurnIcon.astro +24 -0
  72. package/src/components/icons/CircleSymbolIcon.css +66 -0
  73. package/src/components/icons/ClearIcon.astro +28 -0
  74. package/src/components/icons/CloseIcon.astro +21 -0
  75. package/src/components/icons/CopyIcon.astro +30 -0
  76. package/src/components/icons/CurrencyIcon.css +9 -0
  77. package/src/components/icons/DayIcon.astro +33 -0
  78. package/src/components/icons/DollarIcon.astro +28 -0
  79. package/src/components/icons/DownloadIcon.astro +22 -0
  80. package/src/components/icons/EnterFullscreenIcon.astro +22 -0
  81. package/src/components/icons/EqualIcon.astro +25 -0
  82. package/src/components/icons/ExitFullscreenIcon.astro +22 -0
  83. package/src/components/icons/ExternalLinkIcon.astro +22 -0
  84. package/src/components/icons/FieldIcon.astro +28 -0
  85. package/src/components/icons/GrassIcon.astro +29 -0
  86. package/src/components/icons/InfoIcon.astro +24 -0
  87. package/src/components/icons/MinusIcon.astro +21 -0
  88. package/src/components/icons/MountainIcon.astro +31 -0
  89. package/src/components/icons/NightIcon.astro +32 -0
  90. package/src/components/icons/PlayIcon.astro +22 -0
  91. package/src/components/icons/PlusIcon.astro +21 -0
  92. package/src/components/icons/PoisonIcon.astro +24 -0
  93. package/src/components/icons/RibbonIcon.astro +25 -0
  94. package/src/components/icons/SlashIcon.astro +22 -0
  95. package/src/components/icons/SlowIcon.astro +25 -0
  96. package/src/components/icons/StarIcon.astro +28 -0
  97. package/src/components/icons/StunIcon.astro +22 -0
  98. package/src/components/icons/TableSortIcon.astro +34 -0
  99. package/src/components/icons/WaterIcon.astro +30 -0
  100. package/src/components/index.ts +83 -0
  101. package/src/components/media/CanvasFrame/CanvasFrame.astro +130 -0
  102. package/src/components/media/CanvasFrame/CanvasFrame.css +59 -0
  103. package/src/components/media/CanvasFrame/canvasFrameController.ts +104 -0
  104. package/src/components/media/EmbedFrame/EmbedFrame.astro +147 -0
  105. package/src/components/media/EmbedFrame/EmbedFrame.css +51 -0
  106. package/src/components/media/EmbedFrame/embedFrameController.ts +66 -0
  107. package/src/components/media/MediaFrame/MediaFrame.astro +34 -0
  108. package/src/components/media/MediaFrame/MediaFrame.css +66 -0
  109. package/src/components/navigation/Breadcrumbs/Breadcrumbs.astro +55 -0
  110. package/src/components/navigation/Breadcrumbs/Breadcrumbs.css +89 -0
  111. package/src/components/navigation/DesktopNavigation.astro +92 -0
  112. package/src/components/navigation/DesktopNavigation.css +99 -0
  113. package/src/components/navigation/Header.astro +73 -0
  114. package/src/components/navigation/Header.css +20 -0
  115. package/src/components/navigation/MobileNavigation.astro +124 -0
  116. package/src/components/navigation/MobileNavigation.css +177 -0
  117. package/src/components/navigation/NavigationBrand.astro +63 -0
  118. package/src/components/navigation/NavigationBrand.css +52 -0
  119. package/src/components/navigation/NavigationControl.css +166 -0
  120. package/src/components/navigation/NavigationItemContent.astro +24 -0
  121. package/src/components/navigation/NavigationLink.astro +121 -0
  122. package/src/components/navigation/NavigationLinks.astro +27 -0
  123. package/src/components/navigation/NavigationMenuList.astro +37 -0
  124. package/src/components/navigation/NavigationMenuList.css +6 -0
  125. package/src/components/navigation/SkipLink/SkipLink.astro +18 -0
  126. package/src/components/navigation/SkipLink/SkipLink.css +26 -0
  127. package/src/components/navigation/SubNavigation/SubNavigation.astro +124 -0
  128. package/src/components/navigation/SubNavigation/SubNavigation.css +211 -0
  129. package/src/components/navigation/mobileNavigationController.ts +122 -0
  130. package/src/components/navigation/navigationState.ts +35 -0
  131. package/src/components/navigation/navigationTypes.ts +18 -0
  132. package/src/components/seo/SeoHead.astro +194 -0
  133. package/src/components/widgetTypes.ts +3 -0
  134. package/src/composition/Grid/Grid.astro +82 -0
  135. package/src/composition/Grid/Grid.css +314 -0
  136. package/src/composition/GridItem/GridItem.astro +50 -0
  137. package/src/composition/GridItem/GridItem.css +95 -0
  138. package/src/composition/Inline/Inline.astro +48 -0
  139. package/src/composition/Inline/Inline.css +65 -0
  140. package/src/composition/Stack/Stack.astro +37 -0
  141. package/src/composition/Stack/Stack.css +31 -0
  142. package/src/composition/SurfaceGroup/SurfaceGroup.astro +44 -0
  143. package/src/composition/SurfaceGroup/SurfaceGroup.css +76 -0
  144. package/src/composition/SurfaceGroup/stickySurfaceGroupController.ts +89 -0
  145. package/src/composition/index.ts +6 -0
  146. package/src/config/index.ts +2 -0
  147. package/src/config/pageMeta.ts +55 -0
  148. package/src/config/siteConfig.ts +90 -0
  149. package/src/data/collectionValidation.ts +61 -0
  150. package/src/data/index.ts +1 -0
  151. package/src/display/contracts.ts +284 -0
  152. package/src/display/index.ts +1 -0
  153. package/src/index.ts +6 -0
  154. package/src/layouts/BaseLayout.astro +74 -0
  155. package/src/layouts/PageSurface.astro +15 -0
  156. package/src/layouts/PageSurface.css +24 -0
  157. package/src/layouts/index.ts +2 -0
  158. package/src/patterns/CircuitPuzzle/CircuitPuzzle.astro +93 -0
  159. package/src/patterns/CircuitPuzzle/CircuitPuzzle.css +118 -0
  160. package/src/patterns/CircuitPuzzle/circuitPuzzleController.ts +205 -0
  161. package/src/patterns/CircuitPuzzle/contracts.ts +42 -0
  162. package/src/patterns/Combobox/Combobox.astro +462 -0
  163. package/src/patterns/Combobox/Combobox.css +403 -0
  164. package/src/patterns/Combobox/comboboxController.ts +788 -0
  165. package/src/patterns/Combobox/contracts.ts +18 -0
  166. package/src/patterns/Dropdown/Dropdown.astro +127 -0
  167. package/src/patterns/Dropdown/Dropdown.css +100 -0
  168. package/src/patterns/Dropdown/dropdownController.ts +157 -0
  169. package/src/patterns/Fullscreen/FullscreenControl.astro +103 -0
  170. package/src/patterns/Fullscreen/FullscreenControl.css +49 -0
  171. package/src/patterns/Fullscreen/fullscreenController.ts +73 -0
  172. package/src/patterns/GlitchOverlay/GlitchOverlay.astro +50 -0
  173. package/src/patterns/GlitchOverlay/GlitchOverlay.css +234 -0
  174. package/src/patterns/GlitchOverlay/glitchOverlayController.ts +152 -0
  175. package/src/patterns/GuidedFlow/GuidedFlow.astro +60 -0
  176. package/src/patterns/GuidedFlow/GuidedFlow.css +82 -0
  177. package/src/patterns/GuidedFlow/contracts.ts +3 -0
  178. package/src/patterns/GuidedFlow/guidedFlowController.ts +49 -0
  179. package/src/patterns/MagneticFieldPuzzle/MagneticFieldPuzzle.astro +217 -0
  180. package/src/patterns/MagneticFieldPuzzle/MagneticFieldPuzzle.css +383 -0
  181. package/src/patterns/MagneticFieldPuzzle/contracts.ts +81 -0
  182. package/src/patterns/MagneticFieldPuzzle/magneticFieldPuzzleController.ts +802 -0
  183. package/src/patterns/MagneticFieldPuzzle/simulation.ts +244 -0
  184. package/src/patterns/MapViewport/MapViewport.astro +296 -0
  185. package/src/patterns/MapViewport/MapViewport.css +257 -0
  186. package/src/patterns/MapViewport/contracts.ts +79 -0
  187. package/src/patterns/MapViewport/geometry.ts +80 -0
  188. package/src/patterns/MapViewport/mapViewportController.ts +636 -0
  189. package/src/patterns/Modal/Modal.astro +64 -0
  190. package/src/patterns/Modal/Modal.css +87 -0
  191. package/src/patterns/Modal/ModalClose.astro +37 -0
  192. package/src/patterns/Modal/ModalOpen.astro +36 -0
  193. package/src/patterns/Modal/modalController.ts +118 -0
  194. package/src/patterns/PuzzleGrid/PuzzleGrid.astro +22 -0
  195. package/src/patterns/PuzzleGrid/PuzzleGrid.css +149 -0
  196. package/src/patterns/PuzzleGrid/contracts.ts +2 -0
  197. package/src/patterns/PuzzleGrid/selectionDismissal.ts +27 -0
  198. package/src/patterns/PuzzleGrid/state.ts +25 -0
  199. package/src/patterns/SpriteProjectilePreview/SpriteProjectilePreview.astro +65 -0
  200. package/src/patterns/SpriteProjectilePreview/SpriteProjectilePreview.css +35 -0
  201. package/src/patterns/SpriteProjectilePreview/contracts.ts +33 -0
  202. package/src/patterns/SpriteProjectilePreview/spriteProjectilePreviewController.ts +586 -0
  203. package/src/patterns/StageFlow/StageFlow.astro +57 -0
  204. package/src/patterns/StageFlow/StageFlow.css +54 -0
  205. package/src/patterns/StageFlow/StageFlowAlternative.astro +23 -0
  206. package/src/patterns/StageFlow/StageFlowArrow.astro +22 -0
  207. package/src/patterns/StageFlow/StageFlowConnector.astro +7 -0
  208. package/src/patterns/StageFlow/StageFlowConnector.css +4 -0
  209. package/src/patterns/StageFlow/StageFlowStage.astro +51 -0
  210. package/src/patterns/StageFlow/StageFlowStage.css +106 -0
  211. package/src/patterns/StageFlow/StageFlowStep.astro +24 -0
  212. package/src/patterns/StageFlow/StageFlowStep.css +19 -0
  213. package/src/patterns/StageFlow/StageFlowSymbol.css +28 -0
  214. package/src/patterns/Table/Table.astro +176 -0
  215. package/src/patterns/Table/Table.css +70 -0
  216. package/src/patterns/Table/TableBody.astro +185 -0
  217. package/src/patterns/Table/TableBody.css +262 -0
  218. package/src/patterns/Table/TableCell.astro +59 -0
  219. package/src/patterns/Table/TableCell.css +99 -0
  220. package/src/patterns/Table/TableCellValue.astro +86 -0
  221. package/src/patterns/Table/TableFooter.astro +32 -0
  222. package/src/patterns/Table/TableFooter.css +31 -0
  223. package/src/patterns/Table/TableHeader.astro +118 -0
  224. package/src/patterns/Table/TableHeader.css +209 -0
  225. package/src/patterns/Table/TablePagination.astro +70 -0
  226. package/src/patterns/Table/TablePagination.css +133 -0
  227. package/src/patterns/Table/TableSkeleton.astro +36 -0
  228. package/src/patterns/Table/TableSkeleton.css +81 -0
  229. package/src/patterns/Table/tableCellController.ts +11 -0
  230. package/src/patterns/Table/tableFilterController.ts +206 -0
  231. package/src/patterns/Table/tableHeaderOverflowController.ts +105 -0
  232. package/src/patterns/Table/tableLayout.ts +113 -0
  233. package/src/patterns/Table/tableProgressiveController.ts +319 -0
  234. package/src/patterns/Table/tableRowNavigationController.ts +91 -0
  235. package/src/patterns/Table/tableScrollController.ts +192 -0
  236. package/src/patterns/Table/tableSortController.ts +272 -0
  237. package/src/patterns/index.ts +46 -0
  238. package/src/primitives/index.ts +4 -0
  239. package/src/primitives/layout/Separator/Separator.astro +29 -0
  240. package/src/primitives/layout/Separator/Separator.css +20 -0
  241. package/src/primitives/media/AmbientAudio/AmbientAudio.astro +28 -0
  242. package/src/primitives/media/Media/Media.astro +122 -0
  243. package/src/primitives/media/Media/Media.css +161 -0
  244. package/src/primitives/text/TextBlock/TextBlock.astro +46 -0
  245. package/src/primitives/text/TextBlock/TextBlock.css +21 -0
  246. package/src/seo/StaticRedirect.astro +32 -0
  247. package/src/seo/index.ts +6 -0
  248. package/src/seo/pageSeo.ts +99 -0
  249. package/src/seo/robots.ts +16 -0
  250. package/src/seo/sitemap.ts +38 -0
  251. package/src/seo/structuredData.ts +133 -0
  252. package/src/seo/url.ts +64 -0
  253. package/src/styles/base.css +148 -0
  254. package/src/styles/interaction.css +108 -0
  255. package/src/styles/style.css +93 -0
  256. package/src/styles/tokens.css +256 -0
  257. package/src/theme/contracts.ts +7 -0
  258. package/src/theme/index.ts +1 -0
  259. package/tsconfig.json +20 -0
@@ -0,0 +1,108 @@
1
+ [data-interaction-accent] {
2
+ --nox-interaction-accent-hover-background: color-mix(
3
+ in srgb,
4
+ var(--nox-tone-color) 3%,
5
+ var(--nox-surface)
6
+ );
7
+ --nox-interaction-accent-active-background: color-mix(
8
+ in srgb,
9
+ var(--nox-link-active) 8%,
10
+ var(--nox-surface)
11
+ );
12
+ --nox-interaction-accent-color: var(--nox-link-active);
13
+
14
+ position: relative;
15
+ }
16
+
17
+ [data-interaction-accent='start']::before {
18
+ position: absolute;
19
+ z-index: 1;
20
+ inset-block: 0;
21
+ inset-inline-start: 0;
22
+ width: 4px;
23
+ border-start-end-radius: var(--nox-radius-pill);
24
+ border-end-end-radius: var(--nox-radius-pill);
25
+ background: var(--nox-interaction-accent-color);
26
+ content: '';
27
+ opacity: 0;
28
+ transform: scaleY(0.68);
29
+ transform-origin: center;
30
+ }
31
+
32
+ @media (hover: hover) and (pointer: fine) {
33
+ [data-interaction-accent]:hover {
34
+ background: var(--nox-interaction-accent-hover-background);
35
+ }
36
+
37
+ [data-interaction-accent]:hover::before {
38
+ opacity: 0.72;
39
+ transform: scaleY(0.86);
40
+ }
41
+ }
42
+
43
+ [data-interaction-accent][data-interaction-accent-hover] {
44
+ background: var(--nox-interaction-accent-hover-background);
45
+ }
46
+
47
+ [data-interaction-accent='start'][data-interaction-accent-hover]::before {
48
+ opacity: 0.72;
49
+ transform: scaleY(0.86);
50
+ }
51
+
52
+ [data-interaction-accent]:focus-visible,
53
+ [data-interaction-accent][data-interaction-accent-within]:focus-within,
54
+ [data-interaction-accent][data-interaction-accent-active],
55
+ [data-interaction-accent][aria-selected='true'] {
56
+ background: var(--nox-interaction-accent-active-background);
57
+ }
58
+
59
+ [data-interaction-accent]:where(
60
+ :focus-visible,
61
+ [aria-current='page'],
62
+ [aria-selected='true']
63
+ )::before,
64
+ [data-interaction-accent][data-interaction-accent-within]:focus-within::before,
65
+ [data-interaction-accent][data-interaction-accent-active]::before {
66
+ opacity: 1;
67
+ transform: scaleY(1);
68
+ }
69
+
70
+ [data-interaction-accent]:where([aria-disabled='true'], [disabled])::before {
71
+ opacity: 0;
72
+ }
73
+
74
+ @media (prefers-reduced-motion: no-preference) {
75
+ [data-interaction-accent],
76
+ [data-interaction-accent]::before {
77
+ transition:
78
+ background-color var(--nox-motion-duration-sm)
79
+ var(--nox-motion-easing-standard),
80
+ opacity var(--nox-motion-duration-sm) var(--nox-motion-easing-standard),
81
+ transform var(--nox-motion-duration-sm) var(--nox-motion-easing-standard);
82
+ }
83
+
84
+ [data-entry-animation='attention']:not([hidden]) {
85
+ animation: nox-entry-attention 560ms var(--nox-motion-easing-standard)
86
+ backwards;
87
+ }
88
+ }
89
+
90
+ @keyframes nox-entry-attention {
91
+ 0% {
92
+ opacity: 0;
93
+ transform: translateY(var(--nox-space-3)) scale(0.98);
94
+ }
95
+
96
+ 62% {
97
+ opacity: 1;
98
+ box-shadow: 0 0 0 var(--nox-space-2)
99
+ color-mix(in srgb, var(--nox-tone-color) 18%, transparent);
100
+ transform: translateY(0) scale(1.015);
101
+ }
102
+
103
+ 100% {
104
+ opacity: 1;
105
+ box-shadow: 0 0 0 0 transparent;
106
+ transform: translateY(0) scale(1);
107
+ }
108
+ }
@@ -0,0 +1,93 @@
1
+ @layer settings, base, composition, primitives, components, patterns, surfaces, states, responsive;
2
+
3
+ @import './tokens.css' layer(settings);
4
+ @import './base.css' layer(base);
5
+ @import './interaction.css' layer(states);
6
+
7
+ @import '../composition/Grid/Grid.css' layer(composition);
8
+ @import '../composition/GridItem/GridItem.css' layer(composition);
9
+ @import '../composition/Inline/Inline.css' layer(composition);
10
+ @import '../composition/Stack/Stack.css' layer(composition);
11
+
12
+ @import '../primitives/layout/Separator/Separator.css' layer(primitives);
13
+ @import '../primitives/media/Media/Media.css' layer(primitives);
14
+ @import '../primitives/text/TextBlock/TextBlock.css' layer(primitives);
15
+
16
+ @import '../layouts/PageSurface.css' layer(components);
17
+ @import '../components/actions/ActionListItem/ActionListItem.css'
18
+ layer(components);
19
+ @import '../components/actions/Button/Button.css' layer(components);
20
+ @import '../components/actions/CardAction/CardAction.css'
21
+ layer(components);
22
+ @import '../components/actions/ScrollToTop/ScrollToTop.css'
23
+ layer(components);
24
+ @import '../components/actions/MediaTrigger/MediaTrigger.css'
25
+ layer(components);
26
+ @import '../components/content/CodeBlock/CodeBlock.css' layer(components);
27
+ @import '../components/content/CardBody/CardBody.css' layer(components);
28
+ @import '../components/content/CardFooter/CardFooter.css' layer(components);
29
+ @import '../components/content/CardHeader/CardHeader.css' layer(components);
30
+ @import '../components/content/CardLink/CardLink.css' layer(components);
31
+ @import '../components/content/InlineDefinition/InlineDefinition.css'
32
+ layer(components);
33
+ @import '../components/content/MarkdownContent/MarkdownContent.css'
34
+ layer(components);
35
+ @import '../components/data-display/BadgeList/BadgeList.css'
36
+ layer(components);
37
+ @import '../components/data-display/IconList/IconList.css'
38
+ layer(components);
39
+ @import '../components/data-display/MetricTile/MetricTile.css'
40
+ layer(components);
41
+ @import '../components/data-display/Tag/Tag.css' layer(components);
42
+ @import '../components/data-display/TextPair/TextPair.css'
43
+ layer(components);
44
+ @import '../components/forms/FieldLabel/FieldLabel.css' layer(components);
45
+ @import '../components/forms/FieldError/FieldError.css' layer(components);
46
+ @import '../components/forms/TextInput/TextInput.css' layer(components);
47
+ @import '../components/feedback/Tooltip/Tooltip.css' layer(components);
48
+ @import '../components/feedback/Spinner/Spinner.css' layer(components);
49
+ @import '../components/icons/CurrencyIcon.css' layer(components);
50
+ @import '../components/icons/CircleSymbolIcon.css' layer(components);
51
+ @import '../components/media/CanvasFrame/CanvasFrame.css'
52
+ layer(components);
53
+ @import '../components/media/EmbedFrame/EmbedFrame.css'
54
+ layer(components);
55
+ @import '../components/media/MediaFrame/MediaFrame.css' layer(components);
56
+ @import '../components/navigation/Breadcrumbs/Breadcrumbs.css'
57
+ layer(components);
58
+ @import '../components/navigation/Header.css' layer(components);
59
+ @import '../components/navigation/NavigationBrand.css' layer(components);
60
+ @import '../components/navigation/NavigationControl.css' layer(components);
61
+ @import '../components/navigation/NavigationMenuList.css' layer(components);
62
+ @import '../components/navigation/SkipLink/SkipLink.css' layer(components);
63
+ @import '../components/navigation/SubNavigation/SubNavigation.css'
64
+ layer(components);
65
+ @import '../components/navigation/DesktopNavigation.css' layer(patterns);
66
+ @import '../components/navigation/MobileNavigation.css' layer(patterns);
67
+ @import '../patterns/PuzzleGrid/PuzzleGrid.css' layer(patterns);
68
+ @import '../patterns/CircuitPuzzle/CircuitPuzzle.css' layer(patterns);
69
+ @import '../patterns/Combobox/Combobox.css' layer(patterns);
70
+ @import '../patterns/Dropdown/Dropdown.css' layer(patterns);
71
+ @import '../patterns/Fullscreen/FullscreenControl.css' layer(patterns);
72
+ @import '../patterns/GuidedFlow/GuidedFlow.css' layer(patterns);
73
+ @import '../patterns/GlitchOverlay/GlitchOverlay.css' layer(patterns);
74
+ @import '../patterns/MapViewport/MapViewport.css' layer(patterns);
75
+ @import '../patterns/MagneticFieldPuzzle/MagneticFieldPuzzle.css'
76
+ layer(patterns);
77
+ @import '../patterns/Modal/Modal.css' layer(patterns);
78
+ @import '../patterns/SpriteProjectilePreview/SpriteProjectilePreview.css'
79
+ layer(patterns);
80
+ @import '../patterns/StageFlow/StageFlow.css' layer(patterns);
81
+ @import '../patterns/StageFlow/StageFlowSymbol.css' layer(patterns);
82
+ @import '../patterns/StageFlow/StageFlowConnector.css' layer(patterns);
83
+ @import '../patterns/StageFlow/StageFlowStage.css' layer(patterns);
84
+ @import '../patterns/StageFlow/StageFlowStep.css' layer(patterns);
85
+ @import '../patterns/Table/Table.css' layer(patterns);
86
+ @import '../patterns/Table/TableBody.css' layer(patterns);
87
+ @import '../patterns/Table/TableCell.css' layer(patterns);
88
+ @import '../patterns/Table/TableFooter.css' layer(patterns);
89
+ @import '../patterns/Table/TableHeader.css' layer(patterns);
90
+ @import '../patterns/Table/TablePagination.css' layer(patterns);
91
+ @import '../patterns/Table/TableSkeleton.css' layer(patterns);
92
+
93
+ @import '../composition/SurfaceGroup/SurfaceGroup.css' layer(surfaces);
@@ -0,0 +1,256 @@
1
+ :root {
2
+ color-scheme: light;
3
+
4
+ /* Public tone seeds. */
5
+ --nox-source-tone-neutral: #64748b;
6
+ --nox-source-tone-primary: #7c3aed;
7
+ --nox-source-tone-info: #2f6bff;
8
+ --nox-source-tone-success: #039855;
9
+ --nox-source-tone-warning: #d97706;
10
+ --nox-source-tone-danger: #dc2626;
11
+
12
+ /* Public map seeds. Component states derive their full treatment from these. */
13
+ --nox-source-map-available: #00b86b;
14
+ --nox-source-map-unavailable: #f43f5e;
15
+ --nox-source-map-field: #f59e0b;
16
+ --nox-source-map-grass: #65a30d;
17
+ --nox-source-map-mountain: #64748b;
18
+ --nox-source-map-water: #0ea5e9;
19
+ --nox-source-map-range: #0000ff;
20
+
21
+ /* Internal recipe anchors. */
22
+ --nox-mix-light: #ffffff;
23
+ --nox-mix-dark: #020617;
24
+ --nox-tone-seed: var(--nox-source-tone-neutral);
25
+ }
26
+
27
+ :root,
28
+ [data-tone] {
29
+ /* Tone-scaled page, surface, text, border, and interaction slots. */
30
+ --nox-page-background: color-mix(
31
+ in srgb,
32
+ var(--nox-tone-seed) 11%,
33
+ var(--nox-mix-light)
34
+ );
35
+ --nox-surface: color-mix(
36
+ in srgb,
37
+ var(--nox-tone-seed) 2%,
38
+ var(--nox-mix-light)
39
+ );
40
+ --nox-surface-muted: color-mix(
41
+ in srgb,
42
+ var(--nox-tone-seed) 8%,
43
+ var(--nox-mix-light)
44
+ );
45
+ --nox-surface-strong: color-mix(
46
+ in srgb,
47
+ var(--nox-tone-seed) 14%,
48
+ var(--nox-mix-light)
49
+ );
50
+
51
+ --nox-text: color-mix(in srgb, var(--nox-tone-seed) 18%, var(--nox-mix-dark));
52
+ --nox-text-muted: color-mix(
53
+ in srgb,
54
+ var(--nox-tone-seed) 52%,
55
+ var(--nox-mix-dark)
56
+ );
57
+ --nox-text-subtle: color-mix(
58
+ in srgb,
59
+ var(--nox-tone-seed) 68%,
60
+ var(--nox-mix-dark)
61
+ );
62
+ --nox-text-disabled: color-mix(
63
+ in srgb,
64
+ var(--nox-tone-seed) 36%,
65
+ var(--nox-mix-light)
66
+ );
67
+ --nox-text-inverse: var(--nox-mix-light);
68
+
69
+ --nox-border: color-mix(
70
+ in srgb,
71
+ var(--nox-tone-seed) 28%,
72
+ var(--nox-mix-light)
73
+ );
74
+ --nox-border-muted: color-mix(
75
+ in srgb,
76
+ var(--nox-tone-seed) 18%,
77
+ var(--nox-mix-light)
78
+ );
79
+
80
+ /* Tone interaction slots. */
81
+ --nox-tone-color: var(--nox-tone-seed);
82
+ --nox-tone-background: var(--nox-surface-muted);
83
+ --nox-tone-background-strong: var(--nox-surface-strong);
84
+ --nox-tone-hover-background: color-mix(
85
+ in srgb,
86
+ var(--nox-tone-seed) 12%,
87
+ var(--nox-mix-light)
88
+ );
89
+ --nox-tone-active-background: color-mix(
90
+ in srgb,
91
+ var(--nox-tone-seed) 20%,
92
+ var(--nox-mix-light)
93
+ );
94
+ --nox-tone-border: color-mix(
95
+ in srgb,
96
+ var(--nox-tone-seed) 38%,
97
+ var(--nox-border)
98
+ );
99
+ --nox-tone-text: color-mix(
100
+ in srgb,
101
+ var(--nox-tone-seed) 72%,
102
+ var(--nox-mix-dark)
103
+ );
104
+ --nox-tone-focus-ring: var(--nox-tone-seed);
105
+ --nox-tone-shadow: color-mix(
106
+ in srgb,
107
+ var(--nox-tone-seed) 24%,
108
+ var(--nox-mix-dark)
109
+ );
110
+
111
+ /* Shared framed-data surface slots. */
112
+ --nox-data-surface-border: var(--nox-border);
113
+ --nox-data-surface-background: color-mix(
114
+ in srgb,
115
+ var(--nox-tone-color) 8%,
116
+ var(--nox-surface)
117
+ );
118
+
119
+ --nox-link: var(--nox-tone-color);
120
+ --nox-link-hover: var(--nox-tone-text);
121
+ --nox-link-active: var(--nox-tone-text);
122
+ --nox-focus-ring: var(--nox-tone-focus-ring);
123
+
124
+ /* Shared form-control slots. */
125
+ --nox-field-background: var(--nox-surface-muted);
126
+ --nox-field-background-disabled: var(--nox-surface-strong);
127
+ --nox-field-border: var(--nox-border);
128
+ --nox-field-border-hover: var(--nox-tone-border);
129
+ --nox-field-border-active: var(--nox-tone-color);
130
+ --nox-field-border-invalid: var(--nox-source-tone-danger);
131
+ --nox-field-color: var(--nox-text);
132
+ --nox-field-control-block-size: 2.75rem;
133
+ --nox-field-control-font-size: var(--nox-font-size-sm);
134
+ --nox-field-control-padding-inline: var(--nox-space-4);
135
+ --nox-field-placeholder: var(--nox-text-subtle);
136
+ --nox-field-focus-ring: color-mix(
137
+ in srgb,
138
+ var(--nox-tone-focus-ring) 24%,
139
+ transparent
140
+ );
141
+ --nox-field-focus-shadow: 0 0 0 var(--nox-border-width)
142
+ var(--nox-field-focus-ring);
143
+
144
+ /* Scrollbar presentation tokens. */
145
+ --nox-scrollbar-size: 0.625rem;
146
+ --nox-scrollbar-track: transparent;
147
+ --nox-scrollbar-thumb: color-mix(
148
+ in srgb,
149
+ var(--nox-text-subtle) 42%,
150
+ transparent
151
+ );
152
+ --nox-scrollbar-thumb-hover: color-mix(
153
+ in srgb,
154
+ var(--nox-text-muted) 56%,
155
+ transparent
156
+ );
157
+
158
+ --nox-shadow-surface: 0 1rem 2rem
159
+ color-mix(in srgb, var(--nox-tone-shadow) 8%, transparent);
160
+ }
161
+
162
+ :root {
163
+ /* Layout tokens. */
164
+ --nox-page-gutter: clamp(1rem, 4vw, 2rem);
165
+ --nox-page-max-width: 72rem;
166
+ --nox-page-width: min(
167
+ var(--nox-page-max-width),
168
+ calc(100% - var(--nox-page-gutter) * 2)
169
+ );
170
+ --nox-layout-gap: clamp(1rem, 3vw, 1.5rem);
171
+ --nox-section-block-size: 4rem;
172
+ --nox-section-compact-block-size: 3.5rem;
173
+ --nox-section-responsive-block-size: var(--nox-section-block-size);
174
+ --nox-section-media-size: 3.75rem;
175
+ --nox-compact-media-size: 2.5rem;
176
+ --nox-compact-media-responsive-size: var(--nox-compact-media-size);
177
+ --nox-navigation-block-size: 3.25rem;
178
+ --nox-navigation-compact-block-size: 3rem;
179
+ --nox-site-header-height: 4.75rem;
180
+ --nox-site-header-compact-height: 4rem;
181
+
182
+ /* Spacing scale. */
183
+ --nox-space: 0.25rem;
184
+ --nox-space-1: var(--nox-space);
185
+ --nox-space-2: calc(var(--nox-space) * 2);
186
+ --nox-space-3: calc(var(--nox-space) * 3);
187
+ --nox-space-4: calc(var(--nox-space) * 4);
188
+ --nox-space-5: calc(var(--nox-space) * 6);
189
+ --nox-space-6: calc(var(--nox-space) * 8);
190
+ --nox-space-7: calc(var(--nox-space) * 12);
191
+ --nox-page-surface-padding: clamp(
192
+ var(--nox-space-4),
193
+ 3vw,
194
+ var(--nox-space-6)
195
+ );
196
+
197
+ /* Radius scale. */
198
+ --nox-radius-base: 0.25rem;
199
+ --nox-radius-sm: calc(var(--nox-radius-base) * 2);
200
+ --nox-radius-md: calc(var(--nox-radius-base) * 3);
201
+ --nox-radius-lg: calc(var(--nox-radius-base) * 4);
202
+ --nox-radius-pill: 999px;
203
+
204
+ /* Typography scale. */
205
+ --nox-font-body:
206
+ system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
207
+ --nox-font-size-xs: 0.75rem;
208
+ --nox-font-size-sm: 0.875rem;
209
+ --nox-font-size-md: 1rem;
210
+ --nox-font-size-lg: 1.125rem;
211
+ --nox-font-size-xl: 1.35rem;
212
+ --nox-line-height-tight: 1.1;
213
+ --nox-font-weight-regular: 400;
214
+ --nox-font-weight-medium: 550;
215
+ --nox-font-weight-strong: 700;
216
+ --nox-letter-spacing-wide: 0.045em;
217
+ --nox-letter-spacing-wider: 0.08em;
218
+
219
+ /* Focus, border, shadow, and motion tokens. */
220
+ --nox-border-width: 1px;
221
+ --nox-focus-ring-width: 3px;
222
+ --nox-focus-ring-offset: 3px;
223
+ --nox-motion-duration-sm: 160ms;
224
+ --nox-motion-easing-standard: ease;
225
+ }
226
+
227
+ [data-tone='neutral'] {
228
+ --nox-tone-seed: var(--nox-source-tone-neutral);
229
+ }
230
+
231
+ [data-tone='primary'] {
232
+ --nox-tone-seed: var(--nox-source-tone-primary);
233
+ }
234
+
235
+ [data-tone='info'] {
236
+ --nox-tone-seed: var(--nox-source-tone-info);
237
+ }
238
+
239
+ [data-tone='success'] {
240
+ --nox-tone-seed: var(--nox-source-tone-success);
241
+ }
242
+
243
+ [data-tone='warning'] {
244
+ --nox-tone-seed: var(--nox-source-tone-warning);
245
+ }
246
+
247
+ [data-tone='danger'] {
248
+ --nox-tone-seed: var(--nox-source-tone-danger);
249
+ }
250
+
251
+ @media (width < 48rem) {
252
+ :root {
253
+ --nox-section-responsive-block-size: var(--nox-section-compact-block-size);
254
+ --nox-compact-media-responsive-size: 2.125rem;
255
+ }
256
+ }
@@ -0,0 +1,7 @@
1
+ export type Tone =
2
+ | 'neutral'
3
+ | 'primary'
4
+ | 'info'
5
+ | 'success'
6
+ | 'warning'
7
+ | 'danger';
@@ -0,0 +1 @@
1
+ export * from './contracts';
package/tsconfig.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/tsconfig",
3
+ "compilerOptions": {
4
+ "target": "ESNext",
5
+ "module": "ESNext",
6
+ "moduleResolution": "Bundler",
7
+ "allowImportingTsExtensions": true,
8
+ "resolveJsonModule": true,
9
+ "verbatimModuleSyntax": true,
10
+ "isolatedModules": true,
11
+ "noEmit": true,
12
+ "forceConsistentCasingInFileNames": true,
13
+ "esModuleInterop": true,
14
+ "skipLibCheck": true,
15
+ "allowJs": true,
16
+ "jsx": "preserve",
17
+ "strict": true
18
+ },
19
+ "include": ["src/**/*"]
20
+ }