noecosystem-design 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 (653) hide show
  1. package/.editorconfig +12 -0
  2. package/.github/CODEOWNERS +10 -0
  3. package/.github/dependabot.yml +12 -0
  4. package/.github/pull_request_template.md +17 -0
  5. package/.github/workflows/ci.yml +173 -0
  6. package/.github/workflows/security.yml +40 -0
  7. package/.mcp.json +8 -0
  8. package/.node-version +1 -0
  9. package/AGENTS.md +62 -0
  10. package/CONTRIBUTING.md +9 -0
  11. package/README.md +48 -0
  12. package/SECURITY.md +7 -0
  13. package/apps/showcase/index.html +28 -0
  14. package/apps/showcase/package.json +30 -0
  15. package/apps/showcase/src/app.css +8 -0
  16. package/apps/showcase/src/app.tsx +10 -0
  17. package/apps/showcase/src/catalog/agent-composer-preview.tsx +17 -0
  18. package/apps/showcase/src/catalog/catalog-index.tsx +2676 -0
  19. package/apps/showcase/src/catalog/catalog-shell.browser.test.tsx +73 -0
  20. package/apps/showcase/src/catalog/catalog-shell.tsx +506 -0
  21. package/apps/showcase/src/main.tsx +17 -0
  22. package/apps/showcase/tsconfig.json +11 -0
  23. package/apps/showcase/vite.config.ts +15 -0
  24. package/apps/storybook/.storybook/main.ts +21 -0
  25. package/apps/storybook/.storybook/preview.tsx +87 -0
  26. package/apps/storybook/.storybook/vitest.setup.ts +26 -0
  27. package/apps/storybook/README.md +5 -0
  28. package/apps/storybook/package.json +31 -0
  29. package/apps/storybook/stories/AgentStates.stories.tsx +72 -0
  30. package/apps/storybook/stories/Bidi.stories.tsx +31 -0
  31. package/apps/storybook/stories/Button.stories.tsx +19 -0
  32. package/apps/storybook/stories/Surfaces.stories.tsx +28 -0
  33. package/apps/storybook/stories/catalog/about-page.stories.tsx +18 -0
  34. package/apps/storybook/stories/catalog/activity-feed.stories.tsx +50 -0
  35. package/apps/storybook/stories/catalog/activity-gauge.stories.tsx +18 -0
  36. package/apps/storybook/stories/catalog/agent-composer.stories.tsx +49 -0
  37. package/apps/storybook/stories/catalog/agent-message.stories.tsx +37 -0
  38. package/apps/storybook/stories/catalog/agent-plan.stories.tsx +35 -0
  39. package/apps/storybook/stories/catalog/agent-workspace.stories.tsx +60 -0
  40. package/apps/storybook/stories/catalog/alert.stories.tsx +41 -0
  41. package/apps/storybook/stories/catalog/app-frame.stories.tsx +47 -0
  42. package/apps/storybook/stories/catalog/approval-request.stories.tsx +30 -0
  43. package/apps/storybook/stories/catalog/avatar.stories.tsx +18 -0
  44. package/apps/storybook/stories/catalog/badge-group.stories.tsx +18 -0
  45. package/apps/storybook/stories/catalog/badge.stories.tsx +18 -0
  46. package/apps/storybook/stories/catalog/banner.stories.tsx +18 -0
  47. package/apps/storybook/stories/catalog/bidi-text.stories.tsx +47 -0
  48. package/apps/storybook/stories/catalog/blog-index-page.stories.tsx +18 -0
  49. package/apps/storybook/stories/catalog/blog-post-page.stories.tsx +18 -0
  50. package/apps/storybook/stories/catalog/blog-section.stories.tsx +18 -0
  51. package/apps/storybook/stories/catalog/bottom-navigation.stories.tsx +27 -0
  52. package/apps/storybook/stories/catalog/button-group.stories.tsx +18 -0
  53. package/apps/storybook/stories/catalog/button.stories.tsx +27 -0
  54. package/apps/storybook/stories/catalog/calendar.stories.tsx +47 -0
  55. package/apps/storybook/stories/catalog/card.stories.tsx +40 -0
  56. package/apps/storybook/stories/catalog/careers-section.stories.tsx +18 -0
  57. package/apps/storybook/stories/catalog/carousel.stories.tsx +18 -0
  58. package/apps/storybook/stories/catalog/chart-frame.stories.tsx +34 -0
  59. package/apps/storybook/stories/catalog/chart.stories.tsx +43 -0
  60. package/apps/storybook/stories/catalog/checkbox.stories.tsx +18 -0
  61. package/apps/storybook/stories/catalog/code-and-terminal.stories.tsx +39 -0
  62. package/apps/storybook/stories/catalog/color-picker.stories.tsx +18 -0
  63. package/apps/storybook/stories/catalog/command-menu.stories.tsx +18 -0
  64. package/apps/storybook/stories/catalog/contact-page.stories.tsx +18 -0
  65. package/apps/storybook/stories/catalog/contact-section.stories.tsx +18 -0
  66. package/apps/storybook/stories/catalog/content-divider.stories.tsx +18 -0
  67. package/apps/storybook/stories/catalog/content-section.stories.tsx +18 -0
  68. package/apps/storybook/stories/catalog/context-menu.stories.tsx +66 -0
  69. package/apps/storybook/stories/catalog/credit-card.stories.tsx +18 -0
  70. package/apps/storybook/stories/catalog/cta-section.stories.tsx +18 -0
  71. package/apps/storybook/stories/catalog/dashboard-01.stories.tsx +28 -0
  72. package/apps/storybook/stories/catalog/dashboard-02.stories.tsx +28 -0
  73. package/apps/storybook/stories/catalog/dashboard-shell.stories.tsx +65 -0
  74. package/apps/storybook/stories/catalog/data-list.stories.tsx +37 -0
  75. package/apps/storybook/stories/catalog/data-table.stories.tsx +51 -0
  76. package/apps/storybook/stories/catalog/date-picker.stories.tsx +31 -0
  77. package/apps/storybook/stories/catalog/dialog.stories.tsx +68 -0
  78. package/apps/storybook/stories/catalog/direction-provider.stories.tsx +36 -0
  79. package/apps/storybook/stories/catalog/drawer.stories.tsx +58 -0
  80. package/apps/storybook/stories/catalog/dropdown.stories.tsx +67 -0
  81. package/apps/storybook/stories/catalog/email-template.stories.tsx +18 -0
  82. package/apps/storybook/stories/catalog/empty-state.stories.tsx +19 -0
  83. package/apps/storybook/stories/catalog/error-state.stories.tsx +19 -0
  84. package/apps/storybook/stories/catalog/fab.stories.tsx +22 -0
  85. package/apps/storybook/stories/catalog/faq-page.stories.tsx +18 -0
  86. package/apps/storybook/stories/catalog/faq-section.stories.tsx +18 -0
  87. package/apps/storybook/stories/catalog/feature-section.stories.tsx +18 -0
  88. package/apps/storybook/stories/catalog/featured-icon.stories.tsx +45 -0
  89. package/apps/storybook/stories/catalog/field.stories.tsx +35 -0
  90. package/apps/storybook/stories/catalog/file-uploader.stories.tsx +18 -0
  91. package/apps/storybook/stories/catalog/filter-bar.stories.tsx +33 -0
  92. package/apps/storybook/stories/catalog/footer.stories.tsx +18 -0
  93. package/apps/storybook/stories/catalog/forgot-password-page.stories.tsx +18 -0
  94. package/apps/storybook/stories/catalog/gradient-picker.stories.tsx +18 -0
  95. package/apps/storybook/stories/catalog/header-navigation.stories.tsx +46 -0
  96. package/apps/storybook/stories/catalog/hero-header.stories.tsx +36 -0
  97. package/apps/storybook/stories/catalog/icon-system.stories.tsx +48 -0
  98. package/apps/storybook/stories/catalog/illustration.stories.tsx +18 -0
  99. package/apps/storybook/stories/catalog/image-picker.stories.tsx +18 -0
  100. package/apps/storybook/stories/catalog/informational-page-01.stories.tsx +18 -0
  101. package/apps/storybook/stories/catalog/informational-page-02.stories.tsx +18 -0
  102. package/apps/storybook/stories/catalog/inline-cta.stories.tsx +18 -0
  103. package/apps/storybook/stories/catalog/input.stories.tsx +21 -0
  104. package/apps/storybook/stories/catalog/landing-page.stories.tsx +28 -0
  105. package/apps/storybook/stories/catalog/legal-page.stories.tsx +18 -0
  106. package/apps/storybook/stories/catalog/login-page.stories.tsx +42 -0
  107. package/apps/storybook/stories/catalog/marketing-404-page.stories.tsx +18 -0
  108. package/apps/storybook/stories/catalog/marketing-header.stories.tsx +35 -0
  109. package/apps/storybook/stories/catalog/menu.stories.tsx +46 -0
  110. package/apps/storybook/stories/catalog/messaging.stories.tsx +33 -0
  111. package/apps/storybook/stories/catalog/metric-card.stories.tsx +20 -0
  112. package/apps/storybook/stories/catalog/metrics-section.stories.tsx +18 -0
  113. package/apps/storybook/stories/catalog/mobile-screen.stories.tsx +56 -0
  114. package/apps/storybook/stories/catalog/multi-select.stories.tsx +18 -0
  115. package/apps/storybook/stories/catalog/newsletter.stories.tsx +18 -0
  116. package/apps/storybook/stories/catalog/not-found.stories.tsx +30 -0
  117. package/apps/storybook/stories/catalog/notification.stories.tsx +18 -0
  118. package/apps/storybook/stories/catalog/page-header.stories.tsx +37 -0
  119. package/apps/storybook/stories/catalog/pagination.stories.tsx +27 -0
  120. package/apps/storybook/stories/catalog/pie-chart.stories.tsx +18 -0
  121. package/apps/storybook/stories/catalog/pricing-page.stories.tsx +18 -0
  122. package/apps/storybook/stories/catalog/pricing-section.stories.tsx +18 -0
  123. package/apps/storybook/stories/catalog/progress-indicator.stories.tsx +18 -0
  124. package/apps/storybook/stories/catalog/progress-steps.stories.tsx +33 -0
  125. package/apps/storybook/stories/catalog/qr-code.stories.tsx +18 -0
  126. package/apps/storybook/stories/catalog/radar-chart.stories.tsx +18 -0
  127. package/apps/storybook/stories/catalog/radio-group.stories.tsx +18 -0
  128. package/apps/storybook/stories/catalog/rating.stories.tsx +18 -0
  129. package/apps/storybook/stories/catalog/rich-text-editor.stories.tsx +18 -0
  130. package/apps/storybook/stories/catalog/run-inspector.stories.tsx +23 -0
  131. package/apps/storybook/stories/catalog/section-footer.stories.tsx +18 -0
  132. package/apps/storybook/stories/catalog/section-header.stories.tsx +31 -0
  133. package/apps/storybook/stories/catalog/select.stories.tsx +18 -0
  134. package/apps/storybook/stories/catalog/settings-01.stories.tsx +24 -0
  135. package/apps/storybook/stories/catalog/settings-02.stories.tsx +24 -0
  136. package/apps/storybook/stories/catalog/settings-page.stories.tsx +48 -0
  137. package/apps/storybook/stories/catalog/sidebar-navigation.stories.tsx +40 -0
  138. package/apps/storybook/stories/catalog/sign-in-form.stories.tsx +28 -0
  139. package/apps/storybook/stories/catalog/sign-up-page.stories.tsx +18 -0
  140. package/apps/storybook/stories/catalog/skeleton.stories.tsx +21 -0
  141. package/apps/storybook/stories/catalog/slider.stories.tsx +18 -0
  142. package/apps/storybook/stories/catalog/social-button.stories.tsx +18 -0
  143. package/apps/storybook/stories/catalog/social-proof.stories.tsx +18 -0
  144. package/apps/storybook/stories/catalog/spinner.stories.tsx +15 -0
  145. package/apps/storybook/stories/catalog/store-button.stories.tsx +18 -0
  146. package/apps/storybook/stories/catalog/tabs.stories.tsx +38 -0
  147. package/apps/storybook/stories/catalog/tags.stories.tsx +18 -0
  148. package/apps/storybook/stories/catalog/team-page.stories.tsx +18 -0
  149. package/apps/storybook/stories/catalog/team-section.stories.tsx +18 -0
  150. package/apps/storybook/stories/catalog/testimonial-section.stories.tsx +18 -0
  151. package/apps/storybook/stories/catalog/textarea.stories.tsx +22 -0
  152. package/apps/storybook/stories/catalog/toggle.stories.tsx +18 -0
  153. package/apps/storybook/stories/catalog/tool-call.stories.tsx +40 -0
  154. package/apps/storybook/stories/catalog/tooltip.stories.tsx +30 -0
  155. package/apps/storybook/stories/catalog/tree-view.stories.tsx +18 -0
  156. package/apps/storybook/stories/catalog/utility-button.stories.tsx +60 -0
  157. package/apps/storybook/stories/catalog/verification-code.stories.tsx +18 -0
  158. package/apps/storybook/stories/catalog/verification-page.stories.tsx +18 -0
  159. package/apps/storybook/stories/catalog/video-player.stories.tsx +18 -0
  160. package/apps/storybook/stories/catalog/workflow-canvas.stories.tsx +45 -0
  161. package/apps/storybook/stories/catalog/workflow-node.stories.tsx +24 -0
  162. package/apps/storybook/vitest.config.ts +39 -0
  163. package/apps/web/README.md +13 -0
  164. package/apps/web/app.js +483 -0
  165. package/apps/web/favicon.svg +6 -0
  166. package/apps/web/index.html +205 -0
  167. package/apps/web/styles.css +1823 -0
  168. package/artifacts/original-delivery/NOE-Design-System-Delivery/README-FIRST.txt +20 -0
  169. package/artifacts/original-delivery/NOE-Design-System-Delivery/SHA256SUMS.txt +11 -0
  170. package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-delivery-metadata.json +25 -0
  171. package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-design-system-evidence.zip +0 -0
  172. package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-design-system-execution-report.md +60 -0
  173. package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-design-system-manifest.json +106 -0
  174. package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-design-system-source.tar.gz +0 -0
  175. package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-design-system-source.zip +0 -0
  176. package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-design-system.bundle +0 -0
  177. package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-evidence-index.html +38 -0
  178. package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-verification-status.txt +15 -0
  179. package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-visual-contact-sheet.png +0 -0
  180. package/artifacts/original-delivery/noe-design-system-evidence/README.txt +13 -0
  181. package/artifacts/original-delivery/noe-design-system-evidence/evidence/browser-console.json +4 -0
  182. package/artifacts/original-delivery/noe-design-system-evidence/evidence/layout-audit.json +4 -0
  183. package/artifacts/original-delivery/noe-design-system-evidence/evidence/review/contact-sheet.png +0 -0
  184. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-dark-1024.png +0 -0
  185. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-dark-1280.png +0 -0
  186. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-dark-1440.png +0 -0
  187. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-dark-390.png +0 -0
  188. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-dark-768.png +0 -0
  189. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-light-1024.png +0 -0
  190. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-light-1280.png +0 -0
  191. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-light-1440.png +0 -0
  192. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-light-390.png +0 -0
  193. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-light-768.png +0 -0
  194. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-dark-1024.png +0 -0
  195. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-dark-1280.png +0 -0
  196. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-dark-1440.png +0 -0
  197. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-dark-390.png +0 -0
  198. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-dark-768.png +0 -0
  199. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-light-1024.png +0 -0
  200. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-light-1280.png +0 -0
  201. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-light-1440.png +0 -0
  202. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-light-390.png +0 -0
  203. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-light-768.png +0 -0
  204. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-pseudo-ltr-1024.png +0 -0
  205. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-pseudo-rtl-1024.png +0 -0
  206. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/consumer-en-light-1440.png +0 -0
  207. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/consumer-fa-dark-1440.png +0 -0
  208. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/dashboard-en-light-1440.png +0 -0
  209. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/dashboard-fa-dark-1440.png +0 -0
  210. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/workflow-en-light-1440.png +0 -0
  211. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/workflow-fa-dark-1440.png +0 -0
  212. package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots-manifest.json +203 -0
  213. package/artifacts/original-delivery/noe-design-system-evidence/evidence/verification-result.json +165 -0
  214. package/artifacts/original-delivery/noe-design-system-evidence/evidence/verification-result.txt +32 -0
  215. package/artifacts/original-delivery/noe-design-system-evidence/evidence/visual-index.html +1 -0
  216. package/artifacts/original-delivery/noe-design-system-evidence/noe-delivery-metadata.json +25 -0
  217. package/artifacts/original-delivery/noe-design-system-evidence/noe-design-system-execution-report.md +60 -0
  218. package/artifacts/original-delivery/noe-design-system-evidence/noe-design-system-manifest.json +106 -0
  219. package/artifacts/original-delivery/noe-design-system-evidence/noe-verification-status.txt +15 -0
  220. package/artifacts/original-delivery/noe-design-system.bundle +0 -0
  221. package/artifacts/original-delivery/source-evidence/verification-result.json +165 -0
  222. package/artifacts/original-delivery/source-evidence/verification-result.txt +32 -0
  223. package/artifacts/registry-consumer-report.json +153 -0
  224. package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-Black.woff +0 -0
  225. package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-Bold.woff +0 -0
  226. package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-DemiBold.woff +0 -0
  227. package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-ExtraBlack.woff +0 -0
  228. package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-ExtraBold.woff +0 -0
  229. package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-Heavy.woff +0 -0
  230. package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-Light.woff +0 -0
  231. package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-Medium.woff +0 -0
  232. package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-Regular.woff +0 -0
  233. package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-Thin.woff +0 -0
  234. package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-UltraLight.woff +0 -0
  235. package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-Black.woff2 +0 -0
  236. package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-Bold.woff2 +0 -0
  237. package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-DemiBold.woff2 +0 -0
  238. package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-ExtraBlack.woff2 +0 -0
  239. package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-ExtraBold.woff2 +0 -0
  240. package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-Heavy.woff2 +0 -0
  241. package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-Light.woff2 +0 -0
  242. package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-Medium.woff2 +0 -0
  243. package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-Regular.woff2 +0 -0
  244. package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-Thin.woff2 +0 -0
  245. package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-UltraLight.woff2 +0 -0
  246. package/biome.json +170 -0
  247. package/components.json +23 -0
  248. package/docs/adr/0001-semantic-foundation.md +5 -0
  249. package/docs/adr/0002-locale-direction.md +5 -0
  250. package/docs/adr/0003-registry-mcp.md +5 -0
  251. package/docs/adr/0004-testing-evidence.md +5 -0
  252. package/docs/adr/0005-noe-package-namespace.md +9 -0
  253. package/docs/adr/0006-icons8-icon-policy.md +9 -0
  254. package/docs/adr/0007-registry-publication-contract.md +9 -0
  255. package/docs/adr/0008-capability-library-adapter-boundaries.md +16 -0
  256. package/docs/adr/0009-calendar-system-jalali.md +29 -0
  257. package/docs/adr/0010-canonical-manifest-ownership.md +29 -0
  258. package/docs/adr/0011-palette-graphite-governance.md +27 -0
  259. package/docs/adr/0012-persian-font-gating.md +25 -0
  260. package/docs/adr/0013-cinematic-token-exception.md +32 -0
  261. package/docs/design-system/README.md +16 -0
  262. package/docs/design-system/accessibility.md +20 -0
  263. package/docs/design-system/agent-guide.md +11 -0
  264. package/docs/design-system/agentic-ui.md +21 -0
  265. package/docs/design-system/architecture.md +40 -0
  266. package/docs/design-system/brand.md +59 -0
  267. package/docs/design-system/ci-cd.md +46 -0
  268. package/docs/design-system/components.md +88 -0
  269. package/docs/design-system/contributing.md +7 -0
  270. package/docs/design-system/foundations.md +40 -0
  271. package/docs/design-system/i18n.md +24 -0
  272. package/docs/design-system/inventory.md +389 -0
  273. package/docs/design-system/mcp.md +7 -0
  274. package/docs/design-system/motion.md +7 -0
  275. package/docs/design-system/noe-brand-audit.md +33 -0
  276. package/docs/design-system/registry.md +16 -0
  277. package/docs/design-system/rtl.md +27 -0
  278. package/docs/design-system/security.md +16 -0
  279. package/docs/design-system/testing.md +39 -0
  280. package/docs/design-system/tokens.md +38 -0
  281. package/docs/design-system/visual-qa.md +10 -0
  282. package/docs/superpowers/plans/2026-08-25-noe-design-system-development-ready.md +833 -0
  283. package/docs/superpowers/plans/2026-08-26-noe-complete-catalog.md +422 -0
  284. package/docs/superpowers/specs/2026-08-25-noe-design-system-development-ready-design.md +260 -0
  285. package/docs/superpowers/specs/2026-08-26-noe-complete-catalog-design.md +187 -0
  286. package/llms.txt +20 -0
  287. package/package.json +68 -0
  288. package/packages/ai-ui/package.json +15 -0
  289. package/packages/ai-ui/src/activity-feed.tsx +60 -0
  290. package/packages/ai-ui/src/agent-composer.tsx +54 -0
  291. package/packages/ai-ui/src/agent-message.tsx +50 -0
  292. package/packages/ai-ui/src/agent-plan.tsx +69 -0
  293. package/packages/ai-ui/src/agent-workspace.tsx +63 -0
  294. package/packages/ai-ui/src/approval-request.tsx +93 -0
  295. package/packages/ai-ui/src/index.ts +8 -0
  296. package/packages/ai-ui/src/run-inspector.tsx +54 -0
  297. package/packages/ai-ui/src/tool-call.tsx +71 -0
  298. package/packages/data-ui/package.json +16 -0
  299. package/packages/data-ui/src/activity-gauge.tsx +38 -0
  300. package/packages/data-ui/src/chart-frame.tsx +41 -0
  301. package/packages/data-ui/src/chart.tsx +131 -0
  302. package/packages/data-ui/src/dashboard-01.tsx +39 -0
  303. package/packages/data-ui/src/dashboard-02.tsx +33 -0
  304. package/packages/data-ui/src/dashboard-shell.tsx +56 -0
  305. package/packages/data-ui/src/data-table.tsx +99 -0
  306. package/packages/data-ui/src/filter-bar.tsx +28 -0
  307. package/packages/data-ui/src/index.ts +12 -0
  308. package/packages/data-ui/src/metric-card.tsx +43 -0
  309. package/packages/data-ui/src/pagination.tsx +67 -0
  310. package/packages/data-ui/src/pie-chart.tsx +38 -0
  311. package/packages/data-ui/src/radar-chart.tsx +38 -0
  312. package/packages/design-tokens/package.json +23 -0
  313. package/packages/design-tokens/src/base.css +255 -0
  314. package/packages/design-tokens/src/fonts/IRANYekanXFaNum-Bold.woff2 +0 -0
  315. package/packages/design-tokens/src/fonts/IRANYekanXFaNum-DemiBold.woff2 +0 -0
  316. package/packages/design-tokens/src/fonts/IRANYekanXFaNum-Medium.woff2 +0 -0
  317. package/packages/design-tokens/src/fonts/IRANYekanXFaNum-Regular.woff2 +0 -0
  318. package/packages/design-tokens/src/fonts/IRANYekanXVF.ttf +0 -0
  319. package/packages/design-tokens/src/fonts/README.md +13 -0
  320. package/packages/design-tokens/src/fonts.css +49 -0
  321. package/packages/design-tokens/src/index.test.ts +36 -0
  322. package/packages/design-tokens/src/index.ts +5 -0
  323. package/packages/design-tokens/src/palette.ts +27 -0
  324. package/packages/design-tokens/src/tailwind.css +3 -0
  325. package/packages/design-tokens/src/theme.css +67 -0
  326. package/packages/design-tokens/src/tokens.css +251 -0
  327. package/packages/design-tokens/src/tokens.json +275 -0
  328. package/packages/design-tokens/src/tokens.mjs +276 -0
  329. package/packages/i18n/package.json +13 -0
  330. package/packages/i18n/src/index.ts +17 -0
  331. package/packages/i18n/src/messages/en.json +116 -0
  332. package/packages/i18n/src/messages/fa.json +116 -0
  333. package/packages/i18n/src/runtime.d.mts +42 -0
  334. package/packages/i18n/src/runtime.mjs +113 -0
  335. package/packages/i18n/src/translate.test.ts +50 -0
  336. package/packages/i18n/src/translate.ts +29 -0
  337. package/packages/icons/package.json +12 -0
  338. package/packages/icons/src/adapters.tsx +167 -0
  339. package/packages/icons/src/index.tsx +103 -0
  340. package/packages/registry/README.md +7 -0
  341. package/packages/registry/catalog-index.json +1345 -0
  342. package/packages/registry/component-audit.json +1038 -0
  343. package/packages/registry/coss-adoption.json +281 -0
  344. package/packages/registry/docs-index.json +1881 -0
  345. package/packages/registry/manifest.json +11081 -0
  346. package/packages/registry/manifest.schema.json +135 -0
  347. package/packages/registry/package.json +10 -0
  348. package/packages/registry/r/activity-feed.json +67 -0
  349. package/packages/registry/r/agent-composer.json +79 -0
  350. package/packages/registry/r/agent-message.json +72 -0
  351. package/packages/registry/r/agent-plan.json +67 -0
  352. package/packages/registry/r/agent-workspace.json +67 -0
  353. package/packages/registry/r/alert.json +68 -0
  354. package/packages/registry/r/app-frame.json +67 -0
  355. package/packages/registry/r/approval-request.json +84 -0
  356. package/packages/registry/r/badge.json +68 -0
  357. package/packages/registry/r/bidi-text.json +70 -0
  358. package/packages/registry/r/bottom-navigation.json +67 -0
  359. package/packages/registry/r/button.json +83 -0
  360. package/packages/registry/r/calendar.json +97 -0
  361. package/packages/registry/r/card.json +67 -0
  362. package/packages/registry/r/chart-frame.json +67 -0
  363. package/packages/registry/r/chart.json +67 -0
  364. package/packages/registry/r/code-block.json +67 -0
  365. package/packages/registry/r/context-menu.json +81 -0
  366. package/packages/registry/r/dashboard-01.json +86 -0
  367. package/packages/registry/r/dashboard-02.json +84 -0
  368. package/packages/registry/r/dashboard-shell.json +67 -0
  369. package/packages/registry/r/data-list.json +67 -0
  370. package/packages/registry/r/data-table.json +72 -0
  371. package/packages/registry/r/date-picker.json +117 -0
  372. package/packages/registry/r/dialog.json +84 -0
  373. package/packages/registry/r/direction-provider.json +54 -0
  374. package/packages/registry/r/drawer.json +80 -0
  375. package/packages/registry/r/dropdown.json +78 -0
  376. package/packages/registry/r/empty-state.json +67 -0
  377. package/packages/registry/r/error-state.json +67 -0
  378. package/packages/registry/r/fab.json +80 -0
  379. package/packages/registry/r/featured-icon.json +71 -0
  380. package/packages/registry/r/filter-bar.json +69 -0
  381. package/packages/registry/r/gradient-picker.json +62 -0
  382. package/packages/registry/r/header-navigation.json +67 -0
  383. package/packages/registry/r/hero-header.json +63 -0
  384. package/packages/registry/r/icon-system.json +59 -0
  385. package/packages/registry/r/image-picker.json +62 -0
  386. package/packages/registry/r/inline-cta.json +73 -0
  387. package/packages/registry/r/input.json +73 -0
  388. package/packages/registry/r/landing-page.json +70 -0
  389. package/packages/registry/r/login-page.json +71 -0
  390. package/packages/registry/r/marketing-header.json +63 -0
  391. package/packages/registry/r/menu.json +74 -0
  392. package/packages/registry/r/messaging.json +69 -0
  393. package/packages/registry/r/metric-card.json +67 -0
  394. package/packages/registry/r/mobile-screen.json +67 -0
  395. package/packages/registry/r/not-found.json +63 -0
  396. package/packages/registry/r/page-header.json +67 -0
  397. package/packages/registry/r/pagination.json +91 -0
  398. package/packages/registry/r/progress-steps.json +69 -0
  399. package/packages/registry/r/run-inspector.json +72 -0
  400. package/packages/registry/r/section-header.json +67 -0
  401. package/packages/registry/r/settings-01.json +94 -0
  402. package/packages/registry/r/settings-02.json +99 -0
  403. package/packages/registry/r/settings-page.json +67 -0
  404. package/packages/registry/r/sidebar-navigation.json +67 -0
  405. package/packages/registry/r/sign-in-form.json +89 -0
  406. package/packages/registry/r/skeleton.json +67 -0
  407. package/packages/registry/r/spinner.json +67 -0
  408. package/packages/registry/r/tabs.json +69 -0
  409. package/packages/registry/r/textarea.json +73 -0
  410. package/packages/registry/r/tool-call.json +72 -0
  411. package/packages/registry/r/tooltip.json +73 -0
  412. package/packages/registry/r/utility-button.json +83 -0
  413. package/packages/registry/r/workflow-canvas.json +67 -0
  414. package/packages/registry/r/workflow-node.json +72 -0
  415. package/packages/registry/r-planned-backup/about-page.json +14 -0
  416. package/packages/registry/r-planned-backup/activity-gauge.json +14 -0
  417. package/packages/registry/r-planned-backup/avatar.json +14 -0
  418. package/packages/registry/r-planned-backup/badge-group.json +14 -0
  419. package/packages/registry/r-planned-backup/banner.json +14 -0
  420. package/packages/registry/r-planned-backup/blog-index-page.json +14 -0
  421. package/packages/registry/r-planned-backup/blog-post-page.json +14 -0
  422. package/packages/registry/r-planned-backup/blog-section.json +14 -0
  423. package/packages/registry/r-planned-backup/button-group.json +14 -0
  424. package/packages/registry/r-planned-backup/careers-section.json +14 -0
  425. package/packages/registry/r-planned-backup/carousel.json +14 -0
  426. package/packages/registry/r-planned-backup/checkbox.json +14 -0
  427. package/packages/registry/r-planned-backup/color-picker.json +14 -0
  428. package/packages/registry/r-planned-backup/command-menu.json +14 -0
  429. package/packages/registry/r-planned-backup/contact-page.json +14 -0
  430. package/packages/registry/r-planned-backup/contact-section.json +14 -0
  431. package/packages/registry/r-planned-backup/content-divider.json +14 -0
  432. package/packages/registry/r-planned-backup/content-section.json +14 -0
  433. package/packages/registry/r-planned-backup/credit-card.json +14 -0
  434. package/packages/registry/r-planned-backup/cta-section.json +14 -0
  435. package/packages/registry/r-planned-backup/email-template.json +14 -0
  436. package/packages/registry/r-planned-backup/faq-page.json +14 -0
  437. package/packages/registry/r-planned-backup/faq-section.json +14 -0
  438. package/packages/registry/r-planned-backup/feature-section.json +14 -0
  439. package/packages/registry/r-planned-backup/file-uploader.json +14 -0
  440. package/packages/registry/r-planned-backup/footer.json +14 -0
  441. package/packages/registry/r-planned-backup/forgot-password-page.json +14 -0
  442. package/packages/registry/r-planned-backup/illustration.json +14 -0
  443. package/packages/registry/r-planned-backup/informational-page-01.json +14 -0
  444. package/packages/registry/r-planned-backup/informational-page-02.json +14 -0
  445. package/packages/registry/r-planned-backup/legal-page.json +14 -0
  446. package/packages/registry/r-planned-backup/marketing-404-page.json +14 -0
  447. package/packages/registry/r-planned-backup/metrics-section.json +14 -0
  448. package/packages/registry/r-planned-backup/multi-select.json +14 -0
  449. package/packages/registry/r-planned-backup/newsletter.json +14 -0
  450. package/packages/registry/r-planned-backup/notification.json +14 -0
  451. package/packages/registry/r-planned-backup/pie-chart.json +14 -0
  452. package/packages/registry/r-planned-backup/pricing-page.json +14 -0
  453. package/packages/registry/r-planned-backup/pricing-section.json +14 -0
  454. package/packages/registry/r-planned-backup/progress-indicator.json +14 -0
  455. package/packages/registry/r-planned-backup/qr-code.json +14 -0
  456. package/packages/registry/r-planned-backup/radar-chart.json +14 -0
  457. package/packages/registry/r-planned-backup/radio-group.json +14 -0
  458. package/packages/registry/r-planned-backup/rating.json +14 -0
  459. package/packages/registry/r-planned-backup/rich-text-editor.json +14 -0
  460. package/packages/registry/r-planned-backup/section-footer.json +14 -0
  461. package/packages/registry/r-planned-backup/select.json +14 -0
  462. package/packages/registry/r-planned-backup/sign-up-page.json +14 -0
  463. package/packages/registry/r-planned-backup/slider.json +14 -0
  464. package/packages/registry/r-planned-backup/social-button.json +14 -0
  465. package/packages/registry/r-planned-backup/social-proof.json +14 -0
  466. package/packages/registry/r-planned-backup/store-button.json +14 -0
  467. package/packages/registry/r-planned-backup/tags.json +14 -0
  468. package/packages/registry/r-planned-backup/team-page.json +14 -0
  469. package/packages/registry/r-planned-backup/team-section.json +14 -0
  470. package/packages/registry/r-planned-backup/testimonial-section.json +14 -0
  471. package/packages/registry/r-planned-backup/toggle.json +14 -0
  472. package/packages/registry/r-planned-backup/tree-view.json +14 -0
  473. package/packages/registry/r-planned-backup/verification-code.json +14 -0
  474. package/packages/registry/r-planned-backup/verification-page.json +14 -0
  475. package/packages/registry/r-planned-backup/video-player.json +14 -0
  476. package/packages/registry/registry.json +1997 -0
  477. package/packages/registry/search-index.json +3942 -0
  478. package/packages/testing/package.json +9 -0
  479. package/packages/testing/src/index.mjs +10 -0
  480. package/packages/ui/package.json +26 -0
  481. package/packages/ui/src/about-page.tsx +19 -0
  482. package/packages/ui/src/alert.tsx +67 -0
  483. package/packages/ui/src/app-frame.tsx +63 -0
  484. package/packages/ui/src/avatar.tsx +19 -0
  485. package/packages/ui/src/badge-group.tsx +19 -0
  486. package/packages/ui/src/badge.tsx +35 -0
  487. package/packages/ui/src/banner.tsx +19 -0
  488. package/packages/ui/src/bidi.tsx +80 -0
  489. package/packages/ui/src/blog-index-page.tsx +19 -0
  490. package/packages/ui/src/blog-post-page.tsx +19 -0
  491. package/packages/ui/src/blog-section.tsx +19 -0
  492. package/packages/ui/src/bottom-navigation.tsx +60 -0
  493. package/packages/ui/src/button-group.tsx +19 -0
  494. package/packages/ui/src/button.browser.test.tsx +38 -0
  495. package/packages/ui/src/button.tsx +81 -0
  496. package/packages/ui/src/calendar-system.test.ts +103 -0
  497. package/packages/ui/src/calendar-system.ts +120 -0
  498. package/packages/ui/src/calendar.browser.test.tsx +52 -0
  499. package/packages/ui/src/calendar.tsx +339 -0
  500. package/packages/ui/src/card.tsx +63 -0
  501. package/packages/ui/src/careers-section.tsx +19 -0
  502. package/packages/ui/src/carousel.tsx +19 -0
  503. package/packages/ui/src/checkbox.tsx +17 -0
  504. package/packages/ui/src/cinematic/cinematic.css +2020 -0
  505. package/packages/ui/src/cinematic/ecosystem-motion-showcase.tsx +265 -0
  506. package/packages/ui/src/cinematic/ecosystem-sphere.tsx +627 -0
  507. package/packages/ui/src/cinematic/index.ts +5 -0
  508. package/packages/ui/src/cinematic/kinetic-experience.tsx +207 -0
  509. package/packages/ui/src/cinematic/portfolio.ts +132 -0
  510. package/packages/ui/src/cinematic/system-anatomy.tsx +173 -0
  511. package/packages/ui/src/code.tsx +119 -0
  512. package/packages/ui/src/color-picker.tsx +22 -0
  513. package/packages/ui/src/command-menu.tsx +19 -0
  514. package/packages/ui/src/contact-page.tsx +19 -0
  515. package/packages/ui/src/contact-section.tsx +19 -0
  516. package/packages/ui/src/content-divider.tsx +19 -0
  517. package/packages/ui/src/content-section.tsx +19 -0
  518. package/packages/ui/src/context-menu.tsx +208 -0
  519. package/packages/ui/src/credit-card.tsx +19 -0
  520. package/packages/ui/src/cta-section.tsx +19 -0
  521. package/packages/ui/src/data-list.tsx +81 -0
  522. package/packages/ui/src/date-picker.browser.test.tsx +48 -0
  523. package/packages/ui/src/date-picker.tsx +248 -0
  524. package/packages/ui/src/dialog.browser.test.tsx +32 -0
  525. package/packages/ui/src/dialog.tsx +144 -0
  526. package/packages/ui/src/direction.tsx +46 -0
  527. package/packages/ui/src/drawer.tsx +179 -0
  528. package/packages/ui/src/dropdown.tsx +200 -0
  529. package/packages/ui/src/email-template.tsx +19 -0
  530. package/packages/ui/src/empty-state.tsx +43 -0
  531. package/packages/ui/src/error-state.tsx +44 -0
  532. package/packages/ui/src/fab.tsx +32 -0
  533. package/packages/ui/src/faq-page.tsx +19 -0
  534. package/packages/ui/src/faq-section.tsx +19 -0
  535. package/packages/ui/src/feature-section.tsx +19 -0
  536. package/packages/ui/src/featured-icon.tsx +63 -0
  537. package/packages/ui/src/field.browser.test.tsx +33 -0
  538. package/packages/ui/src/field.tsx +117 -0
  539. package/packages/ui/src/file-uploader.tsx +19 -0
  540. package/packages/ui/src/footer.tsx +19 -0
  541. package/packages/ui/src/forgot-password-page.tsx +19 -0
  542. package/packages/ui/src/gradient-picker.tsx +65 -0
  543. package/packages/ui/src/header-navigation.tsx +71 -0
  544. package/packages/ui/src/hero-header.tsx +57 -0
  545. package/packages/ui/src/illustration.tsx +19 -0
  546. package/packages/ui/src/image-picker.tsx +56 -0
  547. package/packages/ui/src/index.ts +110 -0
  548. package/packages/ui/src/informational-page-01.tsx +19 -0
  549. package/packages/ui/src/informational-page-02.tsx +19 -0
  550. package/packages/ui/src/inline-cta.tsx +29 -0
  551. package/packages/ui/src/input.tsx +44 -0
  552. package/packages/ui/src/landing-page.tsx +56 -0
  553. package/packages/ui/src/legal-page.tsx +19 -0
  554. package/packages/ui/src/lib/cn.ts +6 -0
  555. package/packages/ui/src/lib/i18n-messages.ts +40 -0
  556. package/packages/ui/src/login-page.tsx +78 -0
  557. package/packages/ui/src/marketing-404-page.tsx +19 -0
  558. package/packages/ui/src/marketing-header.tsx +53 -0
  559. package/packages/ui/src/menu.tsx +220 -0
  560. package/packages/ui/src/messaging.tsx +62 -0
  561. package/packages/ui/src/metrics-section.tsx +19 -0
  562. package/packages/ui/src/mobile-screen.tsx +37 -0
  563. package/packages/ui/src/multi-select.tsx +16 -0
  564. package/packages/ui/src/newsletter.tsx +19 -0
  565. package/packages/ui/src/not-found.tsx +60 -0
  566. package/packages/ui/src/notification.tsx +19 -0
  567. package/packages/ui/src/page-header.tsx +80 -0
  568. package/packages/ui/src/pricing-page.tsx +19 -0
  569. package/packages/ui/src/pricing-section.tsx +19 -0
  570. package/packages/ui/src/progress-indicator.tsx +19 -0
  571. package/packages/ui/src/progress-steps.tsx +85 -0
  572. package/packages/ui/src/qr-code.tsx +19 -0
  573. package/packages/ui/src/radio-group.tsx +26 -0
  574. package/packages/ui/src/rating.tsx +19 -0
  575. package/packages/ui/src/rich-text-editor.tsx +18 -0
  576. package/packages/ui/src/section-footer.tsx +19 -0
  577. package/packages/ui/src/section-header.tsx +37 -0
  578. package/packages/ui/src/select.tsx +27 -0
  579. package/packages/ui/src/settings-01.tsx +49 -0
  580. package/packages/ui/src/settings-02.tsx +58 -0
  581. package/packages/ui/src/settings-page.tsx +62 -0
  582. package/packages/ui/src/sidebar-navigation.tsx +77 -0
  583. package/packages/ui/src/sign-in-form.tsx +60 -0
  584. package/packages/ui/src/sign-up-page.tsx +19 -0
  585. package/packages/ui/src/skeleton.tsx +14 -0
  586. package/packages/ui/src/slider.tsx +13 -0
  587. package/packages/ui/src/social-button.tsx +19 -0
  588. package/packages/ui/src/social-proof.tsx +19 -0
  589. package/packages/ui/src/spinner.tsx +26 -0
  590. package/packages/ui/src/store-button.tsx +19 -0
  591. package/packages/ui/src/tabs.browser.test.tsx +33 -0
  592. package/packages/ui/src/tabs.tsx +175 -0
  593. package/packages/ui/src/tags.tsx +11 -0
  594. package/packages/ui/src/team-page.tsx +19 -0
  595. package/packages/ui/src/team-section.tsx +19 -0
  596. package/packages/ui/src/testimonial-section.tsx +19 -0
  597. package/packages/ui/src/textarea.tsx +45 -0
  598. package/packages/ui/src/theme-provider.browser.test.tsx +90 -0
  599. package/packages/ui/src/theme-provider.tsx +417 -0
  600. package/packages/ui/src/theme-toggle.tsx +107 -0
  601. package/packages/ui/src/toggle.tsx +34 -0
  602. package/packages/ui/src/tooltip.tsx +50 -0
  603. package/packages/ui/src/tree-view.tsx +19 -0
  604. package/packages/ui/src/utility-button.tsx +33 -0
  605. package/packages/ui/src/utils.ts +13 -0
  606. package/packages/ui/src/verification-code.tsx +27 -0
  607. package/packages/ui/src/verification-page.tsx +19 -0
  608. package/packages/ui/src/video-player.tsx +19 -0
  609. package/packages/workflow-ui/package.json +15 -0
  610. package/packages/workflow-ui/src/index.ts +2 -0
  611. package/packages/workflow-ui/src/workflow-canvas.tsx +51 -0
  612. package/packages/workflow-ui/src/workflow-node.tsx +61 -0
  613. package/playwright.config.ts +58 -0
  614. package/pnpm-workspace.yaml +5 -0
  615. package/registry.json +216 -0
  616. package/scripts/build-static.mjs +68 -0
  617. package/scripts/capture-visuals.py +106 -0
  618. package/scripts/capture-visuals.sh +10 -0
  619. package/scripts/create-visual-index.mjs +16 -0
  620. package/scripts/enrich-registry-payloads.mjs +83 -0
  621. package/scripts/fix-noe-imports.mjs +134 -0
  622. package/scripts/fix-registry-closure.mjs +110 -0
  623. package/scripts/fix-registry-deps-cleanup.mjs +149 -0
  624. package/scripts/fix-relative-for-registry.mjs +103 -0
  625. package/scripts/generate-design-tokens.mjs +134 -0
  626. package/scripts/generate-inventory.mjs +62 -0
  627. package/scripts/generate-manifest.mjs +1149 -0
  628. package/scripts/generate-phase4.mjs +875 -0
  629. package/scripts/validate-manifest.mjs +477 -0
  630. package/scripts/validate-pngs.mjs +31 -0
  631. package/scripts/verify-registry-consumer.mjs +319 -0
  632. package/scripts/verify-registry-dependencies.mjs +162 -0
  633. package/scripts/verify.mjs +316 -0
  634. package/tests/catalog-audit.test.mjs +156 -0
  635. package/tests/e2e/capture-visuals.mjs +34 -0
  636. package/tests/e2e/catalog-typography.spec.ts +110 -0
  637. package/tests/e2e/catalog.spec.ts +68 -0
  638. package/tests/e2e/direction.spec.ts +60 -0
  639. package/tests/e2e/responsive.spec.ts +30 -0
  640. package/tests/e2e/surfaces.spec.ts +51 -0
  641. package/tests/i18n.test.mjs +36 -0
  642. package/tests/icons.test.mjs +21 -0
  643. package/tests/registry-publication.test.mjs +88 -0
  644. package/tests/registry.test.mjs +51 -0
  645. package/tests/rtl.test.mjs +21 -0
  646. package/tests/static-app.test.mjs +49 -0
  647. package/tests/tokens.test.mjs +24 -0
  648. package/tests/workspace.test.mjs +25 -0
  649. package/tsconfig.base.json +69 -0
  650. package/tsconfig.json +27 -0
  651. package/tsconfig.verify.json +19 -0
  652. package/types/offline-react.d.ts +73 -0
  653. package/vitest.config.ts +91 -0
@@ -0,0 +1,153 @@
1
+ {
2
+ "generatedAt": "2026-08-28T09:16:24.286Z",
3
+ "available": 67,
4
+ "verified": 134,
5
+ "failed": 0,
6
+ "skipped": 61,
7
+ "skippedIds": [
8
+ "avatar",
9
+ "badge-group",
10
+ "button-group",
11
+ "checkbox",
12
+ "radio-group",
13
+ "toggle",
14
+ "select",
15
+ "multi-select",
16
+ "slider",
17
+ "tags",
18
+ "verification-code",
19
+ "color-picker",
20
+ "file-uploader",
21
+ "rich-text-editor",
22
+ "command-menu",
23
+ "tree-view",
24
+ "carousel",
25
+ "content-divider",
26
+ "section-footer",
27
+ "notification",
28
+ "activity-gauge",
29
+ "pie-chart",
30
+ "radar-chart",
31
+ "credit-card",
32
+ "qr-code",
33
+ "rating",
34
+ "video-player",
35
+ "illustration",
36
+ "store-button",
37
+ "social-button",
38
+ "progress-indicator",
39
+ "sign-up-page",
40
+ "verification-page",
41
+ "forgot-password-page",
42
+ "email-template",
43
+ "informational-page-01",
44
+ "informational-page-02",
45
+ "banner",
46
+ "blog-section",
47
+ "careers-section",
48
+ "contact-section",
49
+ "content-section",
50
+ "cta-section",
51
+ "faq-section",
52
+ "feature-section",
53
+ "footer",
54
+ "metrics-section",
55
+ "newsletter",
56
+ "pricing-section",
57
+ "social-proof",
58
+ "team-section",
59
+ "testimonial-section",
60
+ "about-page",
61
+ "blog-post-page",
62
+ "blog-index-page",
63
+ "contact-page",
64
+ "faq-page",
65
+ "legal-page",
66
+ "pricing-page",
67
+ "team-page",
68
+ "marketing-404-page"
69
+ ],
70
+ "installable": [
71
+ "bidi-text",
72
+ "direction-provider",
73
+ "code-block",
74
+ "icon-system",
75
+ "button",
76
+ "input",
77
+ "textarea",
78
+ "card",
79
+ "alert",
80
+ "badge",
81
+ "skeleton",
82
+ "spinner",
83
+ "empty-state",
84
+ "error-state",
85
+ "dialog",
86
+ "drawer",
87
+ "menu",
88
+ "tooltip",
89
+ "tabs",
90
+ "data-table",
91
+ "metric-card",
92
+ "chart-frame",
93
+ "agent-composer",
94
+ "agent-message",
95
+ "agent-plan",
96
+ "run-inspector",
97
+ "tool-call",
98
+ "approval-request",
99
+ "workflow-canvas",
100
+ "workflow-node",
101
+ "page-header",
102
+ "sidebar-navigation",
103
+ "agent-workspace",
104
+ "section-header",
105
+ "filter-bar",
106
+ "pagination",
107
+ "activity-feed",
108
+ "sign-in-form",
109
+ "header-navigation",
110
+ "app-frame",
111
+ "bottom-navigation",
112
+ "dashboard-shell",
113
+ "settings-page",
114
+ "data-list",
115
+ "fab",
116
+ "mobile-screen",
117
+ "featured-icon",
118
+ "utility-button",
119
+ "context-menu",
120
+ "dropdown",
121
+ "login-page",
122
+ "not-found",
123
+ "chart",
124
+ "messaging",
125
+ "progress-steps",
126
+ "dashboard-01",
127
+ "dashboard-02",
128
+ "settings-01",
129
+ "settings-02",
130
+ "hero-header",
131
+ "marketing-header",
132
+ "landing-page",
133
+ "calendar",
134
+ "date-picker",
135
+ "gradient-picker",
136
+ "image-picker",
137
+ "inline-cta"
138
+ ],
139
+ "results": [
140
+ {
141
+ "name": "vite",
142
+ "verified": 67,
143
+ "failed": 0,
144
+ "failures": []
145
+ },
146
+ {
147
+ "name": "next",
148
+ "verified": 67,
149
+ "failed": 0,
150
+ "failures": []
151
+ }
152
+ ]
153
+ }
package/biome.json ADDED
@@ -0,0 +1,170 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/2.5.10/schema.json",
3
+ "vcs": {
4
+ "enabled": true,
5
+ "clientKind": "git",
6
+ "useIgnoreFile": true
7
+ },
8
+ "files": {
9
+ "includes": [
10
+ "**",
11
+ "!!artifacts",
12
+ "!!coverage",
13
+ "!!dist",
14
+ "!!node_modules",
15
+ "!!playwright-report",
16
+ "!!test-results",
17
+ "!!apps/storybook/storybook-static",
18
+ "!!types/offline-react.d.ts",
19
+ "!!packages/design-tokens/src/tokens.css",
20
+ "!!packages/design-tokens/src/tokens.mjs"
21
+ ]
22
+ },
23
+ "formatter": {
24
+ "enabled": true,
25
+ "indentStyle": "space",
26
+ "indentWidth": 2,
27
+ "lineWidth": 100
28
+ },
29
+ "linter": {
30
+ "enabled": true,
31
+ "domains": {
32
+ "react": "all",
33
+ "test": "all",
34
+ "project": "all"
35
+ },
36
+ "rules": {
37
+ "preset": "recommended",
38
+ "a11y": {
39
+ "noAmbiguousAnchorText": "error"
40
+ },
41
+ "correctness": {
42
+ "noUnresolvedImports": "off",
43
+ "useImportExtensions": "off"
44
+ },
45
+ "performance": {
46
+ "noJsxPropsBind": "off"
47
+ }
48
+ }
49
+ },
50
+ "javascript": {
51
+ "formatter": {
52
+ "quoteStyle": "single",
53
+ "trailingCommas": "all"
54
+ }
55
+ },
56
+ "css": {
57
+ "parser": {
58
+ "tailwindDirectives": true
59
+ }
60
+ },
61
+ "assist": {
62
+ "enabled": true,
63
+ "actions": {
64
+ "source": {
65
+ "organizeImports": "on"
66
+ }
67
+ }
68
+ },
69
+ "overrides": [
70
+ {
71
+ "includes": ["packages/**/*.tsx"],
72
+ "linter": {
73
+ "rules": {
74
+ "style": {
75
+ "useComponentExportOnlyModules": "off"
76
+ }
77
+ }
78
+ }
79
+ },
80
+ {
81
+ "includes": ["apps/storybook/stories/**"],
82
+ "linter": {
83
+ "rules": {
84
+ "style": {
85
+ "useComponentExportOnlyModules": "off"
86
+ }
87
+ }
88
+ }
89
+ },
90
+ {
91
+ "includes": ["packages/ui/src/cinematic/**"],
92
+ "linter": {
93
+ "rules": {
94
+ "complexity": {
95
+ "noImportantStyles": "off"
96
+ },
97
+ "style": {
98
+ "noDescendingSpecificity": "off",
99
+ "useTemplate": "off",
100
+ "noNonNullAssertion": "off"
101
+ },
102
+ "correctness": {
103
+ "useUniqueElementIds": "off",
104
+ "useExhaustiveDependencies": "off"
105
+ },
106
+ "suspicious": {
107
+ "useIterableCallbackReturn": "off",
108
+ "noArrayIndexKey": "off",
109
+ "noDocumentCookie": "off"
110
+ },
111
+ "a11y": {
112
+ "useAriaPropsSupportedByRole": "off"
113
+ }
114
+ }
115
+ }
116
+ },
117
+ {
118
+ "includes": [
119
+ "packages/ui/src/theme-provider.tsx",
120
+ "apps/showcase/src/catalog/catalog-shell.tsx"
121
+ ],
122
+ "linter": {
123
+ "rules": {
124
+ "suspicious": {
125
+ "noDocumentCookie": "off"
126
+ }
127
+ }
128
+ }
129
+ },
130
+ {
131
+ "includes": ["apps/showcase/src/catalog/catalog-index.tsx"],
132
+ "linter": {
133
+ "rules": {
134
+ "a11y": {
135
+ "useAriaPropsSupportedByRole": "off"
136
+ },
137
+ "correctness": {
138
+ "useUniqueElementIds": "off"
139
+ },
140
+ "suspicious": {
141
+ "noArrayIndexKey": "off"
142
+ },
143
+ "style": {
144
+ "noNonNullAssertion": "off"
145
+ }
146
+ }
147
+ }
148
+ },
149
+ {
150
+ "includes": ["apps/showcase/index.html"],
151
+ "linter": {
152
+ "rules": {
153
+ "style": {
154
+ "useTemplate": "off"
155
+ }
156
+ }
157
+ }
158
+ },
159
+ {
160
+ "includes": ["packages/ui/src/verification-code.tsx", "packages/ui/src/calendar.tsx"],
161
+ "linter": {
162
+ "rules": {
163
+ "suspicious": {
164
+ "noArrayIndexKey": "off"
165
+ }
166
+ }
167
+ }
168
+ }
169
+ ]
170
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "https://ui.shadcn.com/schema.json",
3
+ "style": "new-york",
4
+ "rsc": false,
5
+ "tsx": true,
6
+ "tailwind": {
7
+ "config": "",
8
+ "css": "packages/design-tokens/src/tailwind.css",
9
+ "baseColor": "neutral",
10
+ "cssVariables": true,
11
+ "prefix": ""
12
+ },
13
+ "aliases": {
14
+ "components": "@noe/ui",
15
+ "utils": "@noe/ui/utils",
16
+ "ui": "@noe/ui",
17
+ "lib": "@noe/ui",
18
+ "hooks": "@noe/ui/hooks"
19
+ },
20
+ "registries": {
21
+ "@noe": "https://noecosystem.com/design-system/r/{name}.json"
22
+ }
23
+ }
@@ -0,0 +1,5 @@
1
+ # ADR 0001: First-party semantic foundation
2
+
3
+ Status: Accepted
4
+
5
+ NOE owns semantic tokens and component composition. External primitive and capability libraries remain implementation details behind `@noe/*`. This prevents visual drift and supports replacement without product-wide API churn.
@@ -0,0 +1,5 @@
1
+ # ADR 0002: Centralized locale and direction capability
2
+
3
+ Status: Accepted
4
+
5
+ One package owns locale metadata, message catalogs, formatting, pseudo-locales and direction resolution. Document direction is established before rendering; components use logical properties and explicit portal propagation.
@@ -0,0 +1,5 @@
1
+ # ADR 0003: shadcn-compatible registry and official MCP
2
+
3
+ Status: Accepted
4
+
5
+ Use a namespaced first-party shadcn registry and the official shadcn MCP server. Do not build a custom MCP server until a measured discovery gap exists.
@@ -0,0 +1,5 @@
1
+ # ADR 0004: Layered testing and evidence
2
+
3
+ Status: Accepted
4
+
5
+ Dependency-free tests and a deterministic static reference provide a minimum executable layer. Connected CI adds framework compilation, component, Storybook, accessibility, E2E, visual and security suites. Every reported status must map to observable output.
@@ -0,0 +1,9 @@
1
+ # ADR 0005: NOE package namespace
2
+
3
+ Status: Accepted
4
+
5
+ External architecture proposals and diagrams have used the placeholder namespace `@project/*`. The workspace packages, `components.json` aliases, and documentation already use `@noe/*`.
6
+
7
+ Decision: `@noe/*` is the single package namespace: `@noe/design-tokens`, `@noe/i18n`, `@noe/ui`, `@noe/data-ui`, `@noe/ai-ui`, `@noe/workflow-ui`, `@noe/icons`, `@noe/registry`. Registry item identifiers, import aliases, diagrams, and agent-facing instructions must use this namespace. Placeholder namespaces such as `@project/*` must not appear in normative documents.
8
+
9
+ Consequences: candidate diagrams and documents from external sources must be translated to `@noe/*` before adoption; adding a package to this namespace requires its own decision record.
@@ -0,0 +1,9 @@
1
+ # ADR 0006: Icons8 icon policy
2
+
3
+ Status: Accepted
4
+
5
+ Earlier proposals locked Lucide as the product icon family. The repository has since adopted Icons8 as the icon source (`packages/icons/src/index.tsx`, `icons8Source`, commit "feat: adopt Icons8 logical chevrons"), with `NoeMark` registered as a separate NOE brand asset.
6
+
7
+ Decision: the product uses exactly one icon family, Icons8, plus NOE brand marks. Directional icons use logical directions (`forward`/`backward`) and mirror only through the scoped `.noe-logical-icon` class under `iconDirectionPolicy`; brand marks never mirror. Lucide is not adopted and icon families must not be mixed.
8
+
9
+ Consequences: every added third-party icon records provider and source metadata in the style of `icons8Source`; `NoeMark` is a NOE brand asset, not an Icons8 icon, and carries no such source record; Icons8 licensing terms are part of adoption review; icon-related documentation and stories must reflect the mirroring policy rather than physical left/right semantics.
@@ -0,0 +1,9 @@
1
+ # ADR 0007: Registry publication contract
2
+
3
+ Status: Accepted
4
+
5
+ ADR 0003 selected a first-party shadcn-compatible registry served through the official shadcn MCP server. Local metadata exists (`packages/registry/registry.json`, `packages/registry/r/*.json`, `components.json` declaring `https://noecosystem.com/design-system/r/{name}.json`), but no published endpoint, verified `components.json` install, or end-to-end installation evidence exists yet. The registry README explicitly defers deployment claims until observable evidence is produced.
6
+
7
+ Decision: `@noe/registry` may be described as agent-installable only when all of the following hold: (1) both `https://noecosystem.com/design-system/r/registry.json` (the registry index) and the item template `https://noecosystem.com/design-system/r/{name}.json` are served; note that `components.json` declares only the item template, so the index URL is an additional publication requirement; (2) installing a representative item through the official shadcn MCP against a consumer `components.json` succeeds; (3) the installation evidence is recorded under the ADR 0004 evidence rules. Registry publication and package release remain separate operational gates. Items derived from third-party sources, including 21st.dev marketplace content, are republished only after a recorded license check permits redistribution.
8
+
9
+ Consequences: until the gates pass, documentation must describe the registry as local install metadata, not as an agent-installable source; any document claiming working agent installation before this evidence exists is incorrect and must be corrected rather than promoted.
@@ -0,0 +1,16 @@
1
+ # ADR 0008: Capability library adapter boundaries
2
+
3
+ Status: Accepted
4
+
5
+ Product screens consume `@noe/*` components only. Capability libraries supply behavior, runtime, or composition reference; their raw output must not become product visual language. Earlier proposals treated coss as direct visual authority and assistant-ui as merely headless-ish; both conflict with the existing architecture.
6
+
7
+ Decision:
8
+
9
+ - coss is an approved composition reference and adoption matrix (`coss-adoption.json`), never a styling authority; NOE tokens and `@noe/*` are the only public API and appearance of the product.
10
+ - Base UI provides primitive behavior behind `@noe/ui` adapters.
11
+ - TanStack Table v9 provides headless table logic behind `@noe/data-ui`; Recharts remains an engine behind NOE chart wrappers; React Flow powers canvases under `@noe/workflow-ui` with NOE node and edge types as the only public surface.
12
+ - assistant-ui is a runtime, tool, and MCP bridge behind `@noe/ai-ui`, which owns markup, style, RTL behavior, and approval states. Exposing MCP Apps requires an authenticated route, rate limiting, a tool allowlist, and message validation.
13
+ - Motion is used as the free core only; durations come exclusively from tokens (120/200/320ms) with reduced-motion support.
14
+ - 21st.dev is discovery-only: candidates enter a worktree/sandbox, provenance, license, author, and assets are recorded, then candidates are rewritten on NOE tokens and primitives. Direct marketplace installs into production and automatic republication into the public registry are prohibited.
15
+
16
+ Consequences: raw output of any listed library appearing in product screens is a review failure; visual authority rests solely with NOE tokens and `@noe/*` components.
@@ -0,0 +1,29 @@
1
+ # ADR 0009 — Calendar System: Gregorian + Jalali (Persian) with Extension Point
2
+
3
+ **Date:** 2026-08-27
4
+ **Status:** Accepted
5
+ **Context:** `DatePicker`/`Calendar` need to support both Gregorian and Jalali (Persian) calendars. Spec requires separating calendar-system logic from locale formatting and not assuming Jalali without confirmed requirement. User now confirms Jalali is required and points to `injast-core` as reference.
6
+
7
+ **Decision:**
8
+
9
+ * Introduce `CalendarSystem` type `'gregory' | 'persian'` in `packages/ui/src/calendar-system.ts`, adapted from `injast-core/src/utils/dateHelpers.ts` and `WheelDatePicker.tsx` (Jalali leap year, `getDaysInJalaliMonth`, `getPersianYMD` via `Intl en-US-u-ca-persian`, `jalaliToDateUTC` binary search). No `jalaali-js` dep; uses `Intl` `ca-persian`/`ca-gregory`.
10
+ * Separate concerns:
11
+ * **Calendar system** (`calendar` prop) determines year/month/day arithmetic.
12
+ * **Locale** (`locale` prop, e.g., `fa`, `en`) determines `Intl.DateTimeFormat` month names, weekday labels, and `Intl.NumberFormat` digits.
13
+ * `DatePicker` infers `calendar` from `locale` if not explicit (`fa` → `persian`, else `gregory`), but caller can override (e.g., `locale="en"` with `calendar="persian"`).
14
+ * **Extension point:** `CalendarSystem` is union; adding `'islamic'`, `'hebrew'`, etc., requires only new `getDaysInMonth`/`toCalendarDate` branches. ADR leaves decision open for future calendars.
15
+ * **Reference implementation:** `WheelDatePicker`/`MobileDatePicker` from `injast-core` were inspected for Jalali month names, leap logic, and `jalaliToDateUTC`. Not copied verbatim; adapted to NOE tokens, `Drawer`/`Dialog` removed, MUI removed, logical CSS, keyboard, and `focus-visible` added.
16
+ * **Accessibility/RTL:** `role=grid`, `aria-selected`/`aria-current`, keyboard via `Tab` and `Enter`, `dir` propagation, `bdi` for numbers, `tabular-nums`.
17
+
18
+ **Consequences:**
19
+
20
+ * `Calendar` and `DatePicker` now support Jalali without assuming it for all `fa` users; product can choose per instance.
21
+ * No extra dependency (`jalaali-js`, `persian-number`, `react-date-object` not added); keeps bundle small, tree-shakable.
22
+ * Future calendar systems can be added without breaking existing `gregory`/`persian` consumers.
23
+
24
+ **Alternatives considered:**
25
+
26
+ * Direct copy of `WheelDatePicker` (MUI, `persian-number`, `jalaali-js`) — rejected due to heavy deps, MUI coupling, and `Base UI` mismatch.
27
+ * `react-date-object` with `persian` calendar — rejected for bundle and `Base UI` mismatch.
28
+
29
+ **Provenance:** `injast-core/src/utils/dateHelpers.ts` (Gregorian↔Jalali, `getPersianYMD`, `jalaliToDateUTC`) and `src/components/WheelDatePicker.tsx` (Jalali months, leap, `FlatWheelColumn` not reused) — inspected 2026-08-27, MIT-licensed internal prototype, not published.
@@ -0,0 +1,29 @@
1
+ # ADR 0010: Canonical Manifest Ownership
2
+
3
+ Status: Accepted
4
+ Date: 2026-08-28
5
+
6
+ ## Context
7
+
8
+ Component status, registry, audit, catalog, search, and documentation were previously derived from multiple sources (component-audit.json, registry.json, catalog-index, manual docs). Status changes in one source did not propagate, leading to drift and false “available” claims.
9
+
10
+ ## Decision
11
+
12
+ `packages/registry/manifest.json` is the single canonical source of truth.
13
+
14
+ - All derived artifacts are generated from the manifest: `component-audit.json` (legacy shape), `registry.json` (enriched), `search-index.json`, `catalog-index.json`, `docs-index.json`, `inventory.md`, and `components.md` counts.
15
+ - No generator may overwrite `status`, `registryItem`, or `storyId` from audit data. Audit data is derived after manifest generation.
16
+ - The legacy root `registry.json` is deprecated and marked as “legacy — canonical is packages/registry/registry.json and manifest.json”. A migration note is retained in the file’s `_status` field.
17
+ - `pnpm gen:manifest` is the only writer to `manifest.json`; `pnpm validate:manifest` enforces uniqueness, schema, and closure.
18
+
19
+ ## Consequences
20
+
21
+ - Catalog, audit, docs, and agent search stay consistent.
22
+ - CI fails if any generator is run out of order or if manual edits bypass the manifest.
23
+ - Documentation counts (66 available / 61 planned / 2 partial / 5 experimental) are derived and must not be hand-edited.
24
+
25
+ ## Verification
26
+
27
+ - `pnpm gen:manifest && pnpm validate:manifest` must pass.
28
+ - `node scripts/verify-registry-dependencies.mjs` checks closure.
29
+ - `pnpm test:registry:consumer` verifies installability against the manifest.
@@ -0,0 +1,27 @@
1
+ # ADR 0011: Graphite Palette Governance and Future Registration
2
+
3
+ Status: Accepted
4
+ Date: 2026-08-28
5
+
6
+ ## Context
7
+
8
+ The design system previously hard-coded `value === "graphite"` checks in `ThemeProvider`, the init script, CSS, and tests. Adding a second palette would require shotgun refactoring, and the default palette was not enforced on invalid storage.
9
+
10
+ ## Decision
11
+
12
+ - **Single source:** `packages/design-tokens/src/palette.ts` is the registry. It exports `PALETTES`, `Palette` type, `DEFAULT_PALETTE = "graphite"`, `isPalette`, and storage keys.
13
+ - **ThemeProvider:** Imports the registry, uses `isPalette` for validation, honors `defaultPalette` and `paletteStorageKey` props for initialization, persistence, cross-tab sync (`storage` event), and cleanup. Invalid or missing stored values resolve to Graphite.
14
+ - **Init script:** `themeInitScript` is generated from `PALETTES` via `JSON.stringify(PALETTES)` and `isPalette` derived from the registry, not hard-coded strings. Default document state is `data-noe-palette="graphite"`.
15
+ - **CSS:** `packages/design-tokens/src/base.css` and `tokens.css` expose `[data-noe-palette="graphite"]` as the approved palette hook. Future palettes add overrides for `--noe-color-*` tokens there, but the UI must not expose a selector until a second palette is approved and registered.
16
+ - **Selector policy:** No palette selector is rendered until a second approved palette exists.
17
+
18
+ ## Consequences
19
+
20
+ - Adding a palette requires only updating the token registry and CSS overrides; `setPalette` remains type-safe (`Palette` union) and `ThemeProvider` requires no refactoring.
21
+ - Storage/cookie fallback and init-script behavior stay consistent.
22
+ - Tests validate default Graphite, valid restoration, invalid fallback, custom storage key, init-script before hydration, and palette/theme independence.
23
+
24
+ ## Verification
25
+
26
+ - Browser tests: default Graphite with no preference, valid stored restoration, invalid storage+cookie fallback, custom `paletteStorageKey`, init-script before hydration, palette/theme independence in light/dark.
27
+ - `pnpm lint` enforces no hard-coded duplication.
@@ -0,0 +1,25 @@
1
+ # ADR 0012: Persian Font-Gating Behavior
2
+
3
+ Status: Accepted
4
+ Date: 2026-08-28
5
+
6
+ ## Context
7
+
8
+ Persian UI must use `IRANYekanX` exclusively. Rendering Persian with system fallbacks (Tahoma, Arial) breaks metrics and brand. RTL direction must not implicitly change font family.
9
+
10
+ ## Decision
11
+
12
+ - **Gating:** `CatalogShell` only promotes `effectiveLocale` to `"fa"` after `document.fonts.check('16px IRANYekanX')` succeeds. It attempts `document.fonts.load` with a 3000 ms timeout.
13
+ - **Failure modes:** On timeout, `load` rejection, `check` failure, or unsupported Font Loading API, `effectiveLocale` remains `"en"` (English). The document `lang` stays `"en"` and `dir` stays `"ltr"` until the font is confirmed, ensuring no Persian glyphs render with fallback fonts.
14
+ - **Direction isolation:** CSS scopes Persian font stacks to `[lang="fa"]` and `:lang(fa)` only. `dir="rtl"` alone does not change `font-family`. English and technical content inside RTL surfaces use `dir="ltr"` and `var(--font-sf-pro)` or `font-mono`.
15
+ - **i18n:** Catalog uses `@noe/i18n` APIs only (`getMessages`, `pseudoLocalize`, `applyDocumentLocale`). No direct `en.json`/`fa.json` imports in Showcase. Reusable copy lives in the message layer; Persian literals are forbidden outside `fa.json` except test fixtures explicitly marked.
16
+
17
+ ## Consequences
18
+
19
+ - First paint is English until the font is ready; no flash of fallback Persian.
20
+ - Tests assert: Persian element with `lang="fa"` has computed `IRANYekanX`, English inside RTL uses Latin stack, timeout/failure paths keep English, and no Persian literals exist outside approved catalogs.
21
+
22
+ ## Verification
23
+
24
+ - Playwright: `catalog-typography.spec.ts` — Persian font, English-in-RTL Latin, failure/timeout, literal scan, planned spec state, available/partial previews.
25
+ - Unit: `packages/design-tokens/src/index.test.ts` asserts `base.css` language scopes.
@@ -0,0 +1,32 @@
1
+ # ADR 0013: Cinematic / Raw-Color Token Exceptions
2
+
3
+ Status: Accepted
4
+ Date: 2026-08-28
5
+
6
+ ## Context
7
+
8
+ Product UI must use primitive → semantic → component tokens only. Raw hex values were found in `packages/ui/src/color-picker.tsx`, `gradient-picker.tsx`, `cinematic/*`, and duplicated categorical palettes in `packages/design-tokens/src/base.css`. Browser `theme-color` fallbacks were hard-coded in `ThemeProvider`.
9
+
10
+ ## Decision
11
+
12
+ - **Base.css:** Raw categorical definitions (`#c43f3c`, etc.) replaced with `var(--noe-primitive-color-*)` references. The palette now derives from tokens; `base.css` no longer duplicates hex.
13
+ - **ColorPicker / GradientPicker:** Default example hex values remain as `type="color"` requires hex, but are documented as derived from `primitive.color.mint-500 (#0b6f6b)` and `mint-100 (#98e8cf)` with sync note to `tokens.json`. UI chrome uses `var(--noe-color-accent)` etc.
14
+ - **Cinematic:** Canvas 2D `fillStyle` and timeline `--timeline-accent` require opaque hex. These files carry a narrow exception header:
15
+ - Owner: `@noe/design-tokens`
16
+ - Reason: Canvas 2D context cannot consume CSS vars; values track primitive palette (mint-100, mint-300, ink-950 variants) and are isolated to the cinematic stage.
17
+ - Expiry/review: 2027-08-28
18
+ - Affected: `packages/ui/src/cinematic/ecosystem-sphere.tsx`, `kinetic-experience.tsx`, etc.
19
+ - Tests: visual regression for cinematic stage.
20
+ - **Theme-color:** `ThemeProvider` fallbacks now read from `tokens.primitive.color.paper['100']` (`#f3f0ea`) and `ink['950']` (`#252423`) via the token module, with `data-theme-light`/`data-theme-dark` meta overrides. `theme-color` updates on `palette`/`theme` changes consistently.
21
+
22
+ ## Consequences
23
+
24
+ - `packages/ui/src` contains no product UI raw colors outside the documented cinematic exception.
25
+ - `pnpm lint` and `node scripts/verify-registry-dependencies.mjs` enforce closure; `pnpm verify` checks token parity.
26
+ - Future raw-color needs require an ADR-level exception with owner, reason, files, review date, and tests.
27
+
28
+ ## Verification
29
+
30
+ - `grep -R "#[0-9a-fA-F]{6}" packages/ui/src --exclude-dir=cinematic` shows only documented defaults or token fallbacks.
31
+ - Playwright visual regression for cinematic stage.
32
+ - `pnpm lint --max-diagnostics=200` and `pnpm typecheck` pass.
@@ -0,0 +1,16 @@
1
+ # NOE Design System documentation
2
+
3
+ The documentation describes the implementation in this repository and marks externally blocked work explicitly. It does not treat a file, workflow definition, or intended deployment as proof that the corresponding system ran.
4
+
5
+ ## Navigation
6
+
7
+ - `noe-brand-audit.md`: observed public language and derived visual principles.
8
+ - `architecture.md`: boundaries, dependencies and source-of-truth rules.
9
+ - `foundations.md`, `tokens.md`, `motion.md`: visual contracts.
10
+ - `components.md`, `agentic-ui.md`: component and state contracts.
11
+ - `i18n.md`, `rtl.md`: locale, direction and bidi architecture.
12
+ - `accessibility.md`: WCAG-oriented requirements.
13
+ - `testing.md`, `visual-qa.md`: test and evidence strategy.
14
+ - `registry.md`, `mcp.md`, `agent-guide.md`: coding-agent discovery.
15
+ - `ci-cd.md`, `security.md`: automation and governance.
16
+ - `contributing.md`: change workflow.