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,389 @@
1
+ # NOE Inventory
2
+
3
+ Generated by `pnpm gen:inventory` from `component-audit.json` and
4
+ `registry.json`. Do not edit this file by hand; run the generator after
5
+ catalog changes.
6
+
7
+ Total catalog entries: **129** · registry items: **67**
8
+
9
+ ## Agentic
10
+
11
+ | Entry | Package | Status | Registry item | Layer |
12
+ |---|---|---|---|---|
13
+ | agent-composer | @noe/ai-ui | available | agent-composer | primitive |
14
+ | agent-message | @noe/ai-ui | available | agent-message | primitive |
15
+ | agent-plan | @noe/ai-ui | available | agent-plan | primitive |
16
+ | run-inspector | @noe/ai-ui | available | run-inspector | primitive |
17
+ | tool-call | @noe/ai-ui | available | tool-call | primitive |
18
+ | approval-request | @noe/ai-ui | available | approval-request | primitive |
19
+
20
+ ## Application Components
21
+
22
+ | Entry | Package | Status | Registry item | Layer |
23
+ |---|---|---|---|---|
24
+ | gradient-picker | @noe/ui | available | gradient-picker | primitive |
25
+ | image-picker | @noe/ui | available | image-picker | primitive |
26
+ | inline-cta | @noe/ui | available | inline-cta | primitive |
27
+
28
+ ## Application Examples
29
+
30
+ | Entry | Package | Status | Registry item | Layer |
31
+ |---|---|---|---|---|
32
+ | dashboard-01 | @noe/data-ui | available | dashboard-01 | pattern/page block |
33
+ | dashboard-02 | @noe/data-ui | available | dashboard-02 | pattern/page block |
34
+ | settings-01 | @noe/ui | available | settings-01 | pattern/page block |
35
+ | settings-02 | @noe/ui | available | settings-02 | pattern/page block |
36
+ | informational-page-01 | @noe/ui | planned | — | — |
37
+ | informational-page-02 | @noe/ui | planned | — | — |
38
+
39
+ ## Base / Actions
40
+
41
+ | Entry | Package | Status | Registry item | Layer |
42
+ |---|---|---|---|---|
43
+ | button-group | @noe/ui | planned | — | — |
44
+
45
+ ## Base / Feedback
46
+
47
+ | Entry | Package | Status | Registry item | Layer |
48
+ |---|---|---|---|---|
49
+ | progress-indicator | @noe/ui | planned | — | — |
50
+
51
+ ## Base / Forms
52
+
53
+ | Entry | Package | Status | Registry item | Layer |
54
+ |---|---|---|---|---|
55
+ | checkbox | @noe/ui | planned | — | — |
56
+ | radio-group | @noe/ui | planned | — | — |
57
+ | toggle | @noe/ui | planned | — | — |
58
+ | select | @noe/ui | planned | — | — |
59
+ | multi-select | @noe/ui | planned | — | — |
60
+ | slider | @noe/ui | planned | — | — |
61
+ | tags | @noe/ui | planned | — | — |
62
+ | verification-code | @noe/ui | planned | — | — |
63
+
64
+ ## Base / Identity
65
+
66
+ | Entry | Package | Status | Registry item | Layer |
67
+ |---|---|---|---|---|
68
+ | avatar | @noe/ui | planned | — | — |
69
+ | badge-group | @noe/ui | planned | — | — |
70
+ | credit-card | @noe/ui | planned | — | — |
71
+ | qr-code | @noe/ui | planned | — | — |
72
+ | rating | @noe/ui | planned | — | — |
73
+ | store-button | @noe/ui | planned | — | — |
74
+ | social-button | @noe/ui | planned | — | — |
75
+
76
+ ## Base / Media
77
+
78
+ | Entry | Package | Status | Registry item | Layer |
79
+ |---|---|---|---|---|
80
+ | video-player | @noe/ui | planned | — | — |
81
+ | illustration | @noe/ui | planned | — | — |
82
+
83
+ ## Base / Pickers
84
+
85
+ | Entry | Package | Status | Registry item | Layer |
86
+ |---|---|---|---|---|
87
+ | calendar | @noe/ui | partial | calendar | primitive |
88
+ | date-picker | @noe/ui | partial | date-picker | primitive |
89
+ | color-picker | @noe/ui | planned | — | — |
90
+ | file-uploader | @noe/ui | planned | — | — |
91
+ | rich-text-editor | @noe/ui | planned | — | — |
92
+
93
+ ## Communication / Messaging
94
+
95
+ | Entry | Package | Status | Registry item | Layer |
96
+ |---|---|---|---|---|
97
+ | messaging | @noe/ui | available | messaging | primitive |
98
+
99
+ ## Data / Visualization
100
+
101
+ | Entry | Package | Status | Registry item | Layer |
102
+ |---|---|---|---|---|
103
+ | chart | @noe/data-ui | available | chart | primitive |
104
+ | activity-gauge | @noe/data-ui | planned | — | — |
105
+ | pie-chart | @noe/data-ui | planned | — | — |
106
+ | radar-chart | @noe/data-ui | planned | — | — |
107
+
108
+ ## Data
109
+
110
+ | Entry | Package | Status | Registry item | Layer |
111
+ |---|---|---|---|---|
112
+ | data-table | @noe/data-ui | available | data-table | primitive |
113
+ | metric-card | @noe/data-ui | available | metric-card | primitive |
114
+ | chart-frame | @noe/data-ui | available | chart-frame | primitive |
115
+
116
+ ## Feedback / Notifications
117
+
118
+ | Entry | Package | Status | Registry item | Layer |
119
+ |---|---|---|---|---|
120
+ | notification | @noe/ui | planned | — | — |
121
+
122
+ ## Feedback
123
+
124
+ | Entry | Package | Status | Registry item | Layer |
125
+ |---|---|---|---|---|
126
+ | alert | @noe/ui | available | alert | primitive |
127
+ | badge | @noe/ui | available | badge | primitive |
128
+ | skeleton | @noe/ui | available | skeleton | primitive |
129
+ | spinner | @noe/ui | available | spinner | primitive |
130
+ | empty-state | @noe/ui | available | empty-state | primitive |
131
+ | error-state | @noe/ui | available | error-state | primitive |
132
+
133
+ ## Foundations / Direction & Bidi
134
+
135
+ | Entry | Package | Status | Registry item | Layer |
136
+ |---|---|---|---|---|
137
+ | bidi-text | @noe/ui | available | bidi-text | primitive |
138
+ | direction-provider | @noe/ui | available | direction-provider | primitive |
139
+
140
+ ## Foundations / Icons
141
+
142
+ | Entry | Package | Status | Registry item | Layer |
143
+ |---|---|---|---|---|
144
+ | icon-system | @noe/icons | available | icon-system | primitive |
145
+ | featured-icon | @noe/ui | available | featured-icon | primitive |
146
+
147
+ ## Foundations / Technical Content
148
+
149
+ | Entry | Package | Status | Registry item | Layer |
150
+ |---|---|---|---|---|
151
+ | code-and-terminal | @noe/ui | available | code-block | primitive |
152
+
153
+ ## Marketing / Banner
154
+
155
+ | Entry | Package | Status | Registry item | Layer |
156
+ |---|---|---|---|---|
157
+ | banner | @noe/ui | planned | — | — |
158
+
159
+ ## Marketing / Blog
160
+
161
+ | Entry | Package | Status | Registry item | Layer |
162
+ |---|---|---|---|---|
163
+ | blog-section | @noe/ui | planned | — | — |
164
+
165
+ ## Marketing / CTA
166
+
167
+ | Entry | Package | Status | Registry item | Layer |
168
+ |---|---|---|---|---|
169
+ | cta-section | @noe/ui | planned | — | — |
170
+
171
+ ## Marketing / Careers
172
+
173
+ | Entry | Package | Status | Registry item | Layer |
174
+ |---|---|---|---|---|
175
+ | careers-section | @noe/ui | planned | — | — |
176
+
177
+ ## Marketing / Contact
178
+
179
+ | Entry | Package | Status | Registry item | Layer |
180
+ |---|---|---|---|---|
181
+ | contact-section | @noe/ui | planned | — | — |
182
+
183
+ ## Marketing / Content
184
+
185
+ | Entry | Package | Status | Registry item | Layer |
186
+ |---|---|---|---|---|
187
+ | content-section | @noe/ui | planned | — | — |
188
+
189
+ ## Marketing / FAQ
190
+
191
+ | Entry | Package | Status | Registry item | Layer |
192
+ |---|---|---|---|---|
193
+ | faq-section | @noe/ui | planned | — | — |
194
+
195
+ ## Marketing / Features
196
+
197
+ | Entry | Package | Status | Registry item | Layer |
198
+ |---|---|---|---|---|
199
+ | feature-section | @noe/ui | planned | — | — |
200
+
201
+ ## Marketing / Footer
202
+
203
+ | Entry | Package | Status | Registry item | Layer |
204
+ |---|---|---|---|---|
205
+ | footer | @noe/ui | planned | — | — |
206
+
207
+ ## Marketing / Header
208
+
209
+ | Entry | Package | Status | Registry item | Layer |
210
+ |---|---|---|---|---|
211
+ | marketing-header | @noe/ui | available | marketing-header | pattern/page block |
212
+
213
+ ## Marketing / Hero
214
+
215
+ | Entry | Package | Status | Registry item | Layer |
216
+ |---|---|---|---|---|
217
+ | hero-header | @noe/ui | available | hero-header | pattern/page block |
218
+
219
+ ## Marketing / Metrics
220
+
221
+ | Entry | Package | Status | Registry item | Layer |
222
+ |---|---|---|---|---|
223
+ | metrics-section | @noe/ui | planned | — | — |
224
+
225
+ ## Marketing / Newsletter
226
+
227
+ | Entry | Package | Status | Registry item | Layer |
228
+ |---|---|---|---|---|
229
+ | newsletter | @noe/ui | planned | — | — |
230
+
231
+ ## Marketing / Pages
232
+
233
+ | Entry | Package | Status | Registry item | Layer |
234
+ |---|---|---|---|---|
235
+ | landing-page | @noe/ui | available | landing-page | pattern/page block |
236
+ | about-page | @noe/ui | planned | — | — |
237
+ | blog-post-page | @noe/ui | planned | — | — |
238
+ | blog-index-page | @noe/ui | planned | — | — |
239
+ | contact-page | @noe/ui | planned | — | — |
240
+ | faq-page | @noe/ui | planned | — | — |
241
+ | legal-page | @noe/ui | planned | — | — |
242
+ | pricing-page | @noe/ui | planned | — | — |
243
+ | team-page | @noe/ui | planned | — | — |
244
+ | marketing-404-page | @noe/ui | planned | — | — |
245
+
246
+ ## Marketing / Pricing
247
+
248
+ | Entry | Package | Status | Registry item | Layer |
249
+ |---|---|---|---|---|
250
+ | pricing-section | @noe/ui | planned | — | — |
251
+
252
+ ## Marketing / Social
253
+
254
+ | Entry | Package | Status | Registry item | Layer |
255
+ |---|---|---|---|---|
256
+ | social-proof | @noe/ui | planned | — | — |
257
+
258
+ ## Marketing / Team
259
+
260
+ | Entry | Package | Status | Registry item | Layer |
261
+ |---|---|---|---|---|
262
+ | team-section | @noe/ui | planned | — | — |
263
+
264
+ ## Marketing / Testimonial
265
+
266
+ | Entry | Package | Status | Registry item | Layer |
267
+ |---|---|---|---|---|
268
+ | testimonial-section | @noe/ui | planned | — | — |
269
+
270
+ ## Navigation / Disclosure
271
+
272
+ | Entry | Package | Status | Registry item | Layer |
273
+ |---|---|---|---|---|
274
+ | tree-view | @noe/ui | planned | — | — |
275
+ | carousel | @noe/ui | planned | — | — |
276
+
277
+ ## Navigation / Progress
278
+
279
+ | Entry | Package | Status | Registry item | Layer |
280
+ |---|---|---|---|---|
281
+ | progress-steps | @noe/ui | available | progress-steps | primitive |
282
+
283
+ ## Navigation
284
+
285
+ | Entry | Package | Status | Registry item | Layer |
286
+ |---|---|---|---|---|
287
+ | tabs | @noe/ui | available | tabs | primitive |
288
+
289
+ ## Overlays / Navigation
290
+
291
+ | Entry | Package | Status | Registry item | Layer |
292
+ |---|---|---|---|---|
293
+ | command-menu | @noe/ui | planned | — | — |
294
+
295
+ ## Overlays
296
+
297
+ | Entry | Package | Status | Registry item | Layer |
298
+ |---|---|---|---|---|
299
+ | dialog | @noe/ui | available | dialog | primitive |
300
+ | drawer | @noe/ui | available | drawer | primitive |
301
+ | menu | @noe/ui | available | menu | primitive |
302
+ | tooltip | @noe/ui | available | tooltip | primitive |
303
+ | context-menu | @noe/ui | available | context-menu | primitive |
304
+ | dropdown | @noe/ui | available | dropdown | primitive |
305
+
306
+ ## Patterns / Application
307
+
308
+ | Entry | Package | Status | Registry item | Layer |
309
+ |---|---|---|---|---|
310
+ | page-header | @noe/ui | available | page-header | pattern/page block |
311
+ | sidebar-navigation | @noe/ui | available | sidebar-navigation | pattern/page block |
312
+ | section-header | @noe/ui | available | section-header | pattern/page block |
313
+ | activity-feed | @noe/ai-ui | available | activity-feed | pattern/page block |
314
+ | header-navigation | @noe/ui | available | header-navigation | pattern/page block |
315
+ | bottom-navigation | @noe/ui | available | bottom-navigation | pattern/page block |
316
+ | section-footer | @noe/ui | planned | — | — |
317
+
318
+ ## Patterns / Data
319
+
320
+ | Entry | Package | Status | Registry item | Layer |
321
+ |---|---|---|---|---|
322
+ | filter-bar | @noe/data-ui | available | filter-bar | pattern/page block |
323
+ | pagination | @noe/data-ui | available | pagination | pattern/page block |
324
+
325
+ ## Patterns / Mobile
326
+
327
+ | Entry | Package | Status | Registry item | Layer |
328
+ |---|---|---|---|---|
329
+ | data-list | @noe/ui | available | data-list | pattern/page block |
330
+ | fab | @noe/ui | available | fab | pattern/page block |
331
+
332
+ ## Patterns / Pages
333
+
334
+ | Entry | Package | Status | Registry item | Layer |
335
+ |---|---|---|---|---|
336
+ | agent-workspace | @noe/ai-ui | available | agent-workspace | pattern/page block |
337
+ | sign-in-form | @noe/ui | available | sign-in-form | pattern/page block |
338
+ | app-frame | @noe/ui | available | app-frame | pattern/page block |
339
+ | dashboard-shell | @noe/data-ui | available | dashboard-shell | pattern/page block |
340
+ | settings-page | @noe/ui | available | settings-page | pattern/page block |
341
+ | mobile-screen | @noe/ui | available | mobile-screen | pattern/page block |
342
+
343
+ ## Primitives / Actions
344
+
345
+ | Entry | Package | Status | Registry item | Layer |
346
+ |---|---|---|---|---|
347
+ | button | @noe/ui | available | button | primitive |
348
+ | utility-button | @noe/ui | available | utility-button | primitive |
349
+
350
+ ## Primitives / Forms
351
+
352
+ | Entry | Package | Status | Registry item | Layer |
353
+ |---|---|---|---|---|
354
+ | input | @noe/ui | available | input | primitive |
355
+ | field | @noe/ui | available | input | primitive |
356
+ | textarea | @noe/ui | available | textarea | primitive |
357
+
358
+ ## Primitives / Layout
359
+
360
+ | Entry | Package | Status | Registry item | Layer |
361
+ |---|---|---|---|---|
362
+ | card | @noe/ui | available | card | primitive |
363
+ | content-divider | @noe/ui | planned | — | — |
364
+
365
+ ## Shared / Auth
366
+
367
+ | Entry | Package | Status | Registry item | Layer |
368
+ |---|---|---|---|---|
369
+ | login-page | @noe/ui | available | login-page | pattern/page block |
370
+ | not-found | @noe/ui | available | not-found | pattern/page block |
371
+ | sign-up-page | @noe/ui | planned | — | — |
372
+ | verification-page | @noe/ui | planned | — | — |
373
+ | forgot-password-page | @noe/ui | planned | — | — |
374
+ | email-template | @noe/ui | planned | — | — |
375
+
376
+ ## Workflow
377
+
378
+ | Entry | Package | Status | Registry item | Layer |
379
+ |---|---|---|---|---|
380
+ | workflow-canvas | @noe/workflow-ui | available | workflow-canvas | pattern/page block |
381
+ | workflow-node | @noe/workflow-ui | available | workflow-node | primitive |
382
+
383
+ ## Mobile coverage
384
+
385
+ - `data-list`: Touch-friendly mobile list rows with leading media slot, title and subtitle, trailing meta or chevron slot and current-page state; rows meet minimum touch height.
386
+ - `fab`: Mobile-only floating action button anchored to the logical end edge above the bottom navigation, with safe-area padding and required accessible label.
387
+ - `mobile-screen`: Single-column mobile page scaffold composing an app bar, scrollable content region, optional floating action button and bottom navigation.
388
+ - `bottom-navigation`: Mobile-only bottom tab bar with current-page state, badges, icon slots and safe-area padding; hidden from the medium breakpoint upward.
389
+
@@ -0,0 +1,7 @@
1
+ # MCP
2
+
3
+ The repository uses the official shadcn MCP process rather than creating a duplicate server. `.mcp.json` starts `shadcn@latest mcp`; `components.json` declares the `@noe` namespace.
4
+
5
+ Agent lookup order is encoded in `AGENTS.md`. A custom MCP server is justified only when production evidence shows a concrete gap such as full-text Storybook search, token rule queries or policy retrieval that the official registry interface cannot provide.
6
+
7
+ 21st.dev is a discovery source. Every candidate requires provenance/license review, comparison with `@noe`, normalization, accessibility, RTL/LTR, stories, tests and registry metadata before adoption.
@@ -0,0 +1,7 @@
1
+ # Motion
2
+
3
+ Motion communicates state and spatial relation; it is not decoration.
4
+
5
+ Durations are semantic: fast for control feedback, normal for local state transitions, slow for overlays and major workspace changes. Directional transitions accept logical `start`, `end`, `forward` and `backward`, resolved at runtime.
6
+
7
+ Reduced-motion mode collapses non-essential animation to near-zero duration while preserving state changes. Loading indicators may continue when necessary to communicate ongoing work.
@@ -0,0 +1,33 @@
1
+ # NOE public brand audit
2
+
3
+ Source inspected: `https://noecosystem.com/` on 2026-08-25 through a live text crawl. The restricted execution environment did not expose browser computed-style inspection, so exact production CSS values are not presented as observed facts.
4
+
5
+ ## OBSERVED
6
+
7
+ - The primary proposition is “Shared foundations. Connected experiences.”
8
+ - The public site describes a shared core, connected layers, evolving experiences, deliberate orchestration, clear surfaces, and a human-centered control model.
9
+ - Repeated language includes shared core, connected with intent, clear at the surface, reusable building field, live signal, control centered, coral signal, and evolving without fragmentation.
10
+ - Content structure uses numbered systems, technical labels, short declarative headings, capability maps, and deliberate system diagrams.
11
+ - The brand relationship is ecosystem-first: individual capabilities remain distinct while sharing foundations and orchestration.
12
+
13
+ ## DERIVED
14
+
15
+ - Visual hierarchy should feel architectural rather than decorative.
16
+ - Layout should use lines, fields, node relationships, measured whitespace, and disciplined labels.
17
+ - Coral is a live signal and decision accent, not a page-wide gradient.
18
+ - Product surfaces should expose complexity progressively and preserve calm defaults.
19
+ - Geometry should be precise and moderately rounded; large pill and glass treatments would weaken the system language.
20
+ - Technical identifiers may be visible, but they should be subordinate and deliberately isolated.
21
+
22
+ ## DESIGN-SYSTEM DECISION
23
+
24
+ - Warm neutral background and surface tokens, with independently designed dark surfaces.
25
+ - Coral semantic accent for active signal, primary action, focus and selected workflow state.
26
+ - Hairline borders and restrained elevation instead of stacked cards.
27
+ - Compact uppercase eyebrows and technical metadata paired with human-readable headings.
28
+ - Connected-system diagrams, workflow nodes and status signals use the same token family.
29
+ - Responsive layouts preserve composition and DOM order rather than reversing entire trees for RTL.
30
+
31
+ ## Validation boundary
32
+
33
+ A future unrestricted audit should capture computed typography, color, spacing, radius, shadow and motion values at 390, 768, 1024, 1280, 1440 and wide desktop widths. That work remains a validation input, not a precondition for using the implemented semantic system.
@@ -0,0 +1,16 @@
1
+ # First-party registry
2
+
3
+ `packages/registry/registry.json` and `packages/registry/r/*.json` form the source for the `@noe` shadcn-compatible registry.
4
+
5
+ `pnpm build:static` publishes this source into the deployable static layout and embeds each declared source file in its installable item payload:
6
+
7
+ - `dist/r/registry.json`
8
+ - `dist/r/{name}.json`
9
+
10
+ When this output is mounted under the NOE site, its public paths are `https://noecosystem.com/design-system/r/registry.json` and `https://noecosystem.com/design-system/r/{name}.json`. The local publication test starts a static HTTP server against this output and verifies every declared URL. This proves the build layout, not the external deployment.
11
+
12
+ Run `pnpm test:registry:consumer` to install `@noe/button` into a temporary consumer with the official shadcn CLI against the locally served registry. This is a pre-deployment protocol check; ADR 0007 still requires the same flow through the official MCP against the deployed domain before the registry can be described as agent-installable.
13
+
14
+ Descriptions tell coding agents when to use an item and encode direction, accessibility and progressive-disclosure expectations. CI validates unique names, required metadata, valid referenced files and JSON parsing.
15
+
16
+ The publication URL in `components.json` is an intended target. Publication is complete only when a deployment produces observable HTTP artifacts and a consumer installation test succeeds through the official shadcn MCP process.
@@ -0,0 +1,27 @@
1
+ # RTL and bidi
2
+
3
+ ## Document direction
4
+
5
+ Persian pages render with `<html lang="fa" dir="rtl">`; English pages use `<html lang="en" dir="ltr">`. Direction is a writing-system capability, not an inline `locale === "fa"` branch.
6
+
7
+ ## Layout
8
+
9
+ Use logical margin, padding, inset, border and text alignment. Maintain semantic DOM order. Do not apply global `row-reverse` fixes.
10
+
11
+ ## Portals
12
+
13
+ `DirectionPortal` wraps portalled content with the active direction. Dialog, drawer, popover, tooltip, select, dropdown and toast adapters must use the same contract.
14
+
15
+ ## Icons
16
+
17
+ Forward/backward, next/previous, chevron, indent/outdent and panel-opening icons may mirror. Brand, play, pause, upload, download, search, settings, check, close, charts, code and service logos do not mirror automatically.
18
+
19
+ The shared `ChevronIcon` uses `icons8Source` and opts into this policy through the scoped `.noe-logical-icon` class. `NoeMark` remains a NOE brand asset and never mirrors.
20
+
21
+ ## Mixed content
22
+
23
+ Use `dir=auto` for unpredictable prose, `bdi` for isolated runtime spans, and `dir=ltr` for URLs, emails, UUIDs, hashes, IP addresses, paths, package names, commands, code and model identifiers.
24
+
25
+ ## Tables and charts
26
+
27
+ Do not reverse datasets. Table chrome respects interface direction while semantic column order follows product meaning. Chart labels and controls localize; axes follow the meaning of the data rather than page direction by default.
@@ -0,0 +1,16 @@
1
+ # Security
2
+
3
+ ## Assets and boundaries
4
+
5
+ Assets include registry source, release packages, component consumers, CI credentials, deployment identities and agent/tool approval semantics. Trust boundaries exist at pull requests, package installation, MCP registry access, runtime tool calls and publication.
6
+
7
+ ## Key threats and controls
8
+
9
+ - Supply-chain substitution: first-party namespace, review, lockfiles, dependency review and pinned Actions.
10
+ - Malicious pull-request execution: no privileged `pull_request_target` checkout and least-privilege tokens.
11
+ - Secret exposure: no credentials in repository or logs; environment-scoped secrets and OIDC.
12
+ - Unsafe agent action: visible consequence, bounded permission, explicit approval and audit-friendly target/parameters.
13
+ - XSS from runtime content: React escaping by default and no raw HTML rendering in primitives.
14
+ - Bidi spoofing: semantic isolation for technical values and no injected Unicode controls in application data.
15
+
16
+ Production deployment, security-control reduction, IAM changes and irreversible data operations require explicit scoped approval.
@@ -0,0 +1,39 @@
1
+ # Testing
2
+
3
+ ## Layers
4
+
5
+ | Layer | Tool | Scope |
6
+ | -------------------- | --------------------------- | ------------------------------------------------------------ |
7
+ | Static audits | `scripts/verify.mjs` | Registry integrity, i18n parity, physical-CSS scan, secrets |
8
+ | Offline unit | `node --test tests/*.mjs` | Locale resolution, pseudo-locales, formatters, direction |
9
+ | Unit | Vitest (`unit` project) | Token contracts and pure behavior in Node |
10
+ | Component | Vitest browser project | Real Chromium: rendering, focus, disabled/loading, portals |
11
+ | Storybook | addon-vitest + a11y | Every story renders; axe violations fail the run |
12
+ | E2E | Playwright | Surfaces × locales × themes × viewports across 3 browsers |
13
+
14
+ ## Commands
15
+
16
+ ```bash
17
+ pnpm test # offline audits + unit
18
+ pnpm test:components # browser component tests
19
+ pnpm test:storybook # story interaction + accessibility
20
+ pnpm test:e2e # full Playwright matrix
21
+ ```
22
+
23
+ ## E2E matrix
24
+
25
+ - Projects: `chromium-en-ltr`, `chromium-fa-rtl`, `chromium-pseudo`,
26
+ `firefox-en-smoke`, `webkit-en-smoke`.
27
+ - Coverage: all four product surfaces render their landmarks; theme toggling;
28
+ skip-link focus; Persian document `lang`/`dir`; pseudo-LTR/pseudo-RTL string
29
+ expansion; LTR-isolated technical values inside RTL dashboards; keyboard
30
+ scroll regions; no horizontal overflow at 390/768/1024/1280/1440.
31
+ - State is URL-driven (`?surface=&locale=&theme=`), keeping scenarios
32
+ deterministic and parallel-safe.
33
+
34
+ ## Policy
35
+
36
+ Failures are never hidden with `continue-on-error` or shell fallbacks. Retries
37
+ diagnose infrastructure instability; they do not normalize flaky tests. New
38
+ user-facing components require component tests plus at least one story with
39
+ a11y verification before merge.
@@ -0,0 +1,38 @@
1
+ # Tokens
2
+
3
+ `packages/design-tokens/src/tokens.json` is the only editable source of truth.
4
+ `tokens.css` and `tokens.mjs` are generated artifacts and must be updated with
5
+ `pnpm --filter @noe/design-tokens build`.
6
+
7
+ ## Architecture
8
+
9
+ Tokens follow three layers: raw primitives, purpose-based semantic aliases, and
10
+ component customization seams. Product code consumes semantic utilities such as
11
+ `bg-background` and `text-muted-foreground`; it does not consume primitive palette
12
+ names.
13
+
14
+ ## Naming
15
+
16
+ Application semantics use `background`, `surface`, `surface-raised`, `surface-sunken`, `foreground`, `muted-foreground`, `border`, `border-strong`, `accent`, `signal`, `success`, `warning`, `destructive`, `info`, and `focus-ring`.
17
+
18
+ Raw scale names such as `gray-300` and `blue-500` are prohibited in product semantics.
19
+
20
+ ## Themes
21
+
22
+ Light and dark modes have separately chosen surface relationships, borders, foregrounds, accents and elevation. Dark mode is not an inversion filter.
23
+
24
+ ## Typography
25
+
26
+ English interface text uses the operating system's SF Pro Text and SF Pro Display
27
+ families with platform fallbacks. Persian interface text uses the self-hosted
28
+ IRANYekanXFaNum WOFF2 subset in weights 400, 500, 600, and 700. Unicode ranges keep
29
+ the Persian download conditional while allowing mixed-script text to select the
30
+ correct face automatically.
31
+
32
+ The supplied IRANYekan archive did not include a license file. Its license must be
33
+ confirmed and added before the package is published outside the authorized NOE
34
+ development environment.
35
+
36
+ ## Extension rule
37
+
38
+ A new token requires a repeated semantic need, contrast validation in both themes, RTL neutrality where applicable, documentation, and a migration path. One-off values stay local only when their meaning is truly non-reusable and documented.
@@ -0,0 +1,10 @@
1
+ # Visual QA
2
+
3
+ The capture script generates deterministic PNG evidence for:
4
+
5
+ - Agent workspace at 390, 768, 1024, 1280 and 1440 widths.
6
+ - English/light, English/dark, Persian/light and Persian/dark.
7
+ - Consumer, dashboard, agent and workflow surfaces at representative desktop conditions.
8
+ - Pseudo-LTR and pseudo-RTL stress views.
9
+
10
+ Review checks include overflow, clipped Persian, bidi corruption, arrow direction, sidebar collapse, technical-value isolation, table scrolling, excessive cards, random shadows, coral overuse, mirrored brand marks, focus order and mobile composition.