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,422 @@
1
+ # Complete NOE Catalog Implementation Plan
2
+
3
+ > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
4
+
5
+ **Goal:** Deliver a complete, running NOE component audit catalog with explicit Persian/English typography contracts and verified Coss/Base UI adoption evidence.
6
+
7
+ **Architecture:** The existing NOE public packages remain the only component API. A registry-owned audit manifest drives a Vite catalog and Storybook coverage checks; the catalog renders public exports rather than separate copies. Base UI remains the installed behaviour foundation, and Coss is represented by a versioned adoption matrix until a specific Coss composition has been locally normalized into NOE.
8
+
9
+ **Tech Stack:** React 19, TypeScript 7, Vite 8, Storybook 10, Base UI 1.6, Tailwind CSS 4, Vitest 4, Playwright 1.62, Biome 2.
10
+
11
+ **Spec:** `docs/superpowers/specs/2026-08-26-noe-complete-catalog-design.md`
12
+
13
+ ## Global Constraints
14
+
15
+ - Use existing semantic NOE tokens only; do not invent visual values.
16
+ - English uses SF Pro Text/SF Pro Display; Persian and Arabic use local IRANYekanXFaNum through explicit language scopes.
17
+ - Product consumers import only `@noe/*` public APIs; raw Base UI and Coss APIs stay behind NOE packages.
18
+ - Do not copy Coss, Base UI, or supplied visual references; use their verified interaction/composition patterns only.
19
+ - Use logical properties, explicit portal direction, `dir="auto"`, and `bdi`/LTR isolation where appropriate.
20
+ - Every available public component needs a catalog entry, a live public-API preview, and executable Storybook audit coverage.
21
+ - Do not label planned or deferred components as available.
22
+ - Run the task tests before widening verification; finish with `pnpm check`, `pnpm test:storybook`, `pnpm test:e2e`, and `make check`.
23
+
24
+ ---
25
+
26
+ ## File Structure
27
+
28
+ | File | Responsibility |
29
+ | --- | --- |
30
+ | `packages/registry/component-audit.json` | Canonical available/in-progress/planned NOE catalog inventory and story IDs. |
31
+ | `packages/registry/coss-adoption.json` | Coss primitive adoption state and rationale; never implies an external component is shipped. |
32
+ | `packages/registry/registry.json` | Existing installable item source, enriched only where generated audit references require it. |
33
+ | `packages/design-tokens/src/base.css` | Language-aware semantic typography variable overrides. |
34
+ | `packages/design-tokens/src/index.test.ts` | Token-level contract tests for Latin/Persian/Arabic font scopes. |
35
+ | `apps/showcase/src/catalog/catalog-index.tsx` | Typed catalog inventory, categories, preview renderers, and audit state. |
36
+ | `apps/showcase/src/catalog/catalog-shell.tsx` | Search, category filters, locale/theme controls, and component detail surface. |
37
+ | `apps/showcase/src/catalog/catalog-shell.test.tsx` | Browser tests for filtering, state labels, and locale/direction updates. |
38
+ | `apps/showcase/src/app.tsx` | Showcase entry point that renders the catalog instead of the non-functional landing screen. |
39
+ | `apps/showcase/src/app.css` | Token-only catalog layout and responsive rules. |
40
+ | `apps/storybook/.storybook/preview.tsx` | Shared direction/theme/locale decorator and audit toolbar. |
41
+ | `apps/storybook/stories/catalog/*.stories.tsx` | Complete stories grouped by NOE package and public component category. |
42
+ | `tests/catalog-audit.test.mjs` | Registry/public export/catalog/story parity verification. |
43
+ | `tests/e2e/catalog.spec.ts` | Browser audit flow: deep links, controls, search, RTL, responsive layout, and live controls. |
44
+ | `scripts/verify.mjs` | Reports component-audit and Coss-adoption matrix evidence. |
45
+
46
+ ## Task 1: Establish the auditable component and Coss adoption inventories
47
+
48
+ **Files:**
49
+ - Create: `packages/registry/component-audit.json`
50
+ - Create: `packages/registry/coss-adoption.json`
51
+ - Create: `tests/catalog-audit.test.mjs`
52
+ - Modify: `scripts/verify.mjs`
53
+ - Modify: `package.json`
54
+
55
+ **Interfaces:**
56
+ - Consumes: package public indexes under `packages/*/src/index.ts` and installable items in `packages/registry/registry.json`.
57
+ - Produces: `CatalogAuditItem` records with `id`, `package`, `category`, `status`, `storyId`, and `registryItem`; `CossAdoptionItem` records with `primitive`, `status`, and `rationale`.
58
+
59
+ - [ ] **Step 1: Write the failing inventory contract test**
60
+
61
+ ```js
62
+ test('every available audit item has a unique story and maps to a public NOE package', async () => {
63
+ const available = audit.items.filter((item) => item.status === 'available');
64
+ assert.equal(new Set(available.map((item) => item.storyId)).size, available.length);
65
+ for (const item of available) assert.ok(publicPackages.has(item.package));
66
+ });
67
+ ```
68
+
69
+ - [ ] **Step 2: Run the test to prove the inventory is missing**
70
+
71
+ Run: `node --test tests/catalog-audit.test.mjs`
72
+
73
+ Expected: FAIL because `component-audit.json` does not exist.
74
+
75
+ - [ ] **Step 3: Add the canonical audit and adoption JSON files**
76
+
77
+ ```json
78
+ {
79
+ "items": [
80
+ {
81
+ "id": "button",
82
+ "package": "@noe/ui",
83
+ "category": "Primitives / Actions",
84
+ "status": "available",
85
+ "storyId": "primitives-actions-button--default",
86
+ "registryItem": "button"
87
+ }
88
+ ]
89
+ }
90
+ ```
91
+
92
+ ```json
93
+ {
94
+ "items": [
95
+ {
96
+ "primitive": "Dialog",
97
+ "status": "adopted",
98
+ "rationale": "NOE Dialog is a tokenized Base UI composition with explicit portal direction."
99
+ }
100
+ ]
101
+ }
102
+ ```
103
+
104
+ Populate the audit file for every currently exported NOE component and pattern. Populate the Coss matrix for every Coss primitive named in its official component catalog; use `deferred` or `blocked` where NOE has no public equivalent.
105
+
106
+ - [ ] **Step 4: Wire parity checks and the verify report**
107
+
108
+ ```js
109
+ record(
110
+ 'catalog audit inventory',
111
+ audit.items.filter((item) => item.status === 'available').every((item) => item.storyId),
112
+ `${audit.items.length} entries`,
113
+ );
114
+ ```
115
+
116
+ Add `tests/catalog-audit.test.mjs` to `pnpm test` and verify registry references only when `registryItem` is present.
117
+
118
+ - [ ] **Step 5: Verify and commit the inventory unit**
119
+
120
+ Run: `node --test tests/catalog-audit.test.mjs && pnpm verify`
121
+
122
+ Expected: PASS and the verify output reports both matrices.
123
+
124
+ ```bash
125
+ git add packages/registry/component-audit.json packages/registry/coss-adoption.json tests/catalog-audit.test.mjs scripts/verify.mjs package.json
126
+ git commit -m "feat: add component audit inventory"
127
+ ```
128
+
129
+ ## Task 2: Make the font contract explicit and testable
130
+
131
+ **Files:**
132
+ - Modify: `packages/design-tokens/src/base.css`
133
+ - Modify: `packages/design-tokens/src/index.test.ts`
134
+ - Modify: `docs/design-system/foundations.md`
135
+
136
+ **Interfaces:**
137
+ - Consumes: `--noe-font-family-sans`, `--noe-font-family-heading`, and local `IRANYekanXFaNum` faces.
138
+ - Produces: language-scope overrides for Persian and Arabic without changing Latin or technical typography.
139
+
140
+ - [ ] **Step 1: Add failing language-scope assertions**
141
+
142
+ ```ts
143
+ it('explicitly selects IRANYekan for Persian and Arabic language scopes', async () => {
144
+ const baseCss = await readFile(new URL('./base.css', import.meta.url), 'utf8');
145
+ expect(baseCss).toMatch(/html\[lang="fa"\].*--noe-font-family-sans/s);
146
+ expect(baseCss).toMatch(/"IRANYekanXFaNum"/);
147
+ });
148
+ ```
149
+
150
+ - [ ] **Step 2: Run the focused token test**
151
+
152
+ Run: `pnpm exec vitest run packages/design-tokens/src/index.test.ts`
153
+
154
+ Expected: FAIL because `base.css` lacks language-scope font overrides.
155
+
156
+ - [ ] **Step 3: Add semantic scoped overrides**
157
+
158
+ ```css
159
+ :where(html[lang="fa"], html[lang="ar"], [lang="fa"], [lang="ar"]) {
160
+ --noe-font-family-sans: "IRANYekanXFaNum", sans-serif;
161
+ --noe-font-family-heading: "IRANYekanXFaNum", sans-serif;
162
+ }
163
+ ```
164
+
165
+ Keep `--noe-font-family-mono` unchanged and preserve the Latin SF Pro token values.
166
+
167
+ - [ ] **Step 4: Document the runtime boundary**
168
+
169
+ State that SF Pro is a system font, IRANYekan is self-hosted, and nested language scopes are supported.
170
+
171
+ - [ ] **Step 5: Verify and commit the typography unit**
172
+
173
+ Run: `pnpm exec vitest run packages/design-tokens/src/index.test.ts && pnpm lint`
174
+
175
+ Expected: PASS.
176
+
177
+ ```bash
178
+ git add packages/design-tokens/src/base.css packages/design-tokens/src/index.test.ts docs/design-system/foundations.md
179
+ git commit -m "fix: enforce language-aware NOE fonts"
180
+ ```
181
+
182
+ ## Task 3: Build the catalog shell from the public NOE API
183
+
184
+ **Files:**
185
+ - Create: `apps/showcase/src/catalog/catalog-index.tsx`
186
+ - Create: `apps/showcase/src/catalog/catalog-shell.tsx`
187
+ - Create: `apps/showcase/src/catalog/catalog-shell.test.tsx`
188
+ - Modify: `apps/showcase/src/app.tsx`
189
+ - Modify: `apps/showcase/src/app.css`
190
+
191
+ **Interfaces:**
192
+ - Consumes: `component-audit.json`, `@noe/ui`, `@noe/data-ui`, `@noe/ai-ui`, `@noe/workflow-ui`, and `applyDocumentLocale`.
193
+ - Produces: `<CatalogShell />`, with `CatalogEntry` `{ id, category, status, name, description, preview }` and URL-backed `component`, `category`, `locale`, and `theme` state.
194
+
195
+ - [ ] **Step 1: Write browser tests for audit discovery and filtering**
196
+
197
+ ```tsx
198
+ it('filters the available component inventory and exposes the selected audit state', async () => {
199
+ render(<CatalogShell initialEntries={entries} />);
200
+ await userEvent.type(screen.getByRole('searchbox', { name: /search components/i }), 'dialog');
201
+ expect(screen.getByRole('heading', { name: 'Dialog' })).toBeVisible();
202
+ expect(screen.queryByRole('heading', { name: 'Button' })).not.toBeInTheDocument();
203
+ });
204
+ ```
205
+
206
+ - [ ] **Step 2: Run the focused browser test**
207
+
208
+ Run: `pnpm exec vitest run --project browser apps/showcase/src/catalog/catalog-shell.test.tsx`
209
+
210
+ Expected: FAIL because `CatalogShell` does not exist.
211
+
212
+ - [ ] **Step 3: Implement typed public-API previews**
213
+
214
+ ```tsx
215
+ export type CatalogEntry = {
216
+ id: string;
217
+ category: string;
218
+ status: 'available' | 'in-progress' | 'planned';
219
+ name: string;
220
+ description: string;
221
+ preview: () => React.ReactNode;
222
+ };
223
+
224
+ export const catalogEntries: readonly CatalogEntry[] = [
225
+ {
226
+ id: 'button',
227
+ category: 'Primitives / Actions',
228
+ status: 'available',
229
+ name: 'Button',
230
+ description: 'Primary actions with loading, disabled, and destructive states.',
231
+ preview: () => <Button variant="primary">Continue</Button>,
232
+ },
233
+ ];
234
+ ```
235
+
236
+ Create entries for every `available` audit record. Previews import only from package public indexes. Complex patterns use deterministic fixture data and preserve all visible user copy in story-local fixture messages.
237
+
238
+ - [ ] **Step 4: Implement the responsive audit shell**
239
+
240
+ Include landmark navigation, category filters, a labelled search input, theme/locale controls, an audit-status legend, keyboard-focusable cards, direct component deep links, and a component inspector. Use token utilities and logical CSS only; card layout must collapse from multi-column desktop to a single-column 390px viewport.
241
+
242
+ - [ ] **Step 5: Verify and commit the catalog shell**
243
+
244
+ Run: `pnpm test:components && pnpm typecheck && pnpm build`
245
+
246
+ Expected: PASS and `pnpm dev` opens the catalog rather than a non-functional call-to-action.
247
+
248
+ ```bash
249
+ git add apps/showcase/src/catalog apps/showcase/src/app.tsx apps/showcase/src/app.css
250
+ git commit -m "feat: add NOE component audit catalog"
251
+ ```
252
+
253
+ ## Task 4: Make Storybook the executable audit surface
254
+
255
+ **Files:**
256
+ - Modify: `apps/storybook/.storybook/preview.tsx`
257
+ - Create: `apps/storybook/stories/catalog/primitives.stories.tsx`
258
+ - Create: `apps/storybook/stories/catalog/feedback-and-layout.stories.tsx`
259
+ - Create: `apps/storybook/stories/catalog/data-patterns.stories.tsx`
260
+ - Create: `apps/storybook/stories/catalog/agent-patterns.stories.tsx`
261
+ - Create: `apps/storybook/stories/catalog/workflow-patterns.stories.tsx`
262
+ - Modify: `apps/storybook/stories/Button.stories.tsx`
263
+ - Modify: `apps/storybook/stories/AgentStates.stories.tsx`
264
+ - Modify: `apps/storybook/stories/Bidi.stories.tsx`
265
+
266
+ **Interfaces:**
267
+ - Consumes: the same public exports and `CatalogAuditItem.storyId` values from Task 1.
268
+ - Produces: a stable Storybook ID for every available catalog item and global locale/theme/direction controls.
269
+
270
+ - [ ] **Step 1: Write a failing story-coverage test**
271
+
272
+ ```js
273
+ test('every available audit entry has a declared Storybook story ID', async () => {
274
+ const source = await readFile(storyIndexPath, 'utf8');
275
+ for (const item of availableItems) assert.match(source, new RegExp(item.storyId));
276
+ });
277
+ ```
278
+
279
+ - [ ] **Step 2: Run the coverage test**
280
+
281
+ Run: `node --test tests/catalog-audit.test.mjs`
282
+
283
+ Expected: FAIL because current Storybook has four broad story files and no full audit map.
284
+
285
+ - [ ] **Step 3: Add grouped public-API stories**
286
+
287
+ ```tsx
288
+ export const DialogAudit: Story = {
289
+ name: 'Dialog — audit',
290
+ render: () => (
291
+ <Dialog>
292
+ <DialogTrigger render={<Button>Open dialog</Button>} />
293
+ <DialogContent><DialogTitle>Review change</DialogTitle></DialogContent>
294
+ </Dialog>
295
+ ),
296
+ play: async ({ canvas }) => await userEvent.click(canvas.getByRole('button', { name: /open dialog/i })),
297
+ };
298
+ ```
299
+
300
+ Use interaction plays for overlays, menus, tabs, inputs, approval actions, and workflow selection. Use locale globals for Persian, pseudo-LTR, and pseudo-RTL stories rather than manually reversing layout.
301
+
302
+ - [ ] **Step 4: Strengthen the global audit decorator**
303
+
304
+ Apply document `lang`, `dir`, data theme, `DirectionProvider`, and the semantic base stylesheet. Add all required reviewer viewport sizes: 390, 768, 1024, 1280, and 1440 pixels.
305
+
306
+ - [ ] **Step 5: Verify and commit Storybook coverage**
307
+
308
+ Run: `pnpm test:storybook && pnpm build:storybook && node --test tests/catalog-audit.test.mjs`
309
+
310
+ Expected: PASS with all available audit entries represented by executable stories.
311
+
312
+ ```bash
313
+ git add apps/storybook tests/catalog-audit.test.mjs
314
+ git commit -m "feat: document complete NOE component audit stories"
315
+ ```
316
+
317
+ ## Task 5: Record Coss/Base UI adoption without duplicating public primitives
318
+
319
+ **Files:**
320
+ - Modify: `packages/registry/coss-adoption.json`
321
+ - Create: `docs/design-system/coss-adoption.md`
322
+ - Modify: `packages/ui/src/dialog.tsx`
323
+ - Modify: `packages/ui/src/drawer.tsx`
324
+ - Modify: `packages/ui/src/menu.tsx`
325
+ - Modify: `packages/ui/src/tooltip.tsx`
326
+ - Test: `packages/ui/src/dialog.browser.test.tsx`
327
+ - Test: `packages/ui/src/drawer.browser.test.tsx`
328
+ - Test: `packages/ui/src/menu.browser.test.tsx`
329
+
330
+ **Interfaces:**
331
+ - Consumes: Base UI 1.6 public component APIs and Coss composition documentation for the relevant primitive.
332
+ - Produces: one NOE public primitive per interaction, with verified portal direction and Coss adoption status updated only after tests pass.
333
+
334
+ - [ ] **Step 1: Write failing portal direction and keyboard tests**
335
+
336
+ ```tsx
337
+ it('keeps a Persian dialog portal in RTL direction', async () => {
338
+ render(<PersianDialog />);
339
+ await userEvent.click(screen.getByRole('button', { name: /باز کردن/i }));
340
+ expect(screen.getByRole('dialog')).toHaveAttribute('dir', 'rtl');
341
+ });
342
+ ```
343
+
344
+ - [ ] **Step 2: Run each focused primitive test before changing its adapter**
345
+
346
+ Run: `pnpm exec vitest run --project browser packages/ui/src/dialog.browser.test.tsx packages/ui/src/drawer.browser.test.tsx packages/ui/src/menu.browser.test.tsx`
347
+
348
+ Expected: FAIL for missing explicit portal-direction assertions.
349
+
350
+ - [ ] **Step 3: Normalize one primitive at a time**
351
+
352
+ For each primitive, consult its Coss and Base UI documentation before editing. Preserve the existing NOE component name and props. Pass direction through the existing `DirectionPortal` contract instead of introducing raw portal code or a second dialog/menu/drawer component.
353
+
354
+ - [ ] **Step 4: Update the adoption matrix and guidance only after behaviour passes**
355
+
356
+ ```json
357
+ {
358
+ "primitive": "Menu",
359
+ "status": "adopted",
360
+ "rationale": "NOE Menu uses Base UI semantics, Coss composition guidance, token styling, and explicit portal direction."
361
+ }
362
+ ```
363
+
364
+ - [ ] **Step 5: Verify and commit the foundation unit**
365
+
366
+ Run: `pnpm test:components && pnpm lint && pnpm typecheck`
367
+
368
+ Expected: PASS with no raw Base UI/Coss API exposed from product packages.
369
+
370
+ ```bash
371
+ git add packages/ui packages/registry/coss-adoption.json docs/design-system/coss-adoption.md
372
+ git commit -m "feat: document verified Coss primitive adoption"
373
+ ```
374
+
375
+ ## Task 6: Add end-to-end audit evidence and update completion documentation
376
+
377
+ **Files:**
378
+ - Create: `tests/e2e/catalog.spec.ts`
379
+ - Modify: `tests/e2e/responsive.spec.ts`
380
+ - Modify: `docs/design-system/testing.md`
381
+ - Modify: `docs/design-system/components.md`
382
+ - Modify: `README.md`
383
+
384
+ **Interfaces:**
385
+ - Consumes: catalog controls from Task 3, story coverage from Task 4, and matrix data from Task 1.
386
+ - Produces: repeatable catalog audit evidence and reviewer instructions.
387
+
388
+ - [ ] **Step 1: Write failing browser audit cases**
389
+
390
+ ```ts
391
+ test('a reviewer can filter to Dialog, open it, and inspect RTL typography', async ({ page }) => {
392
+ await page.goto('/?locale=fa&component=dialog');
393
+ await expect(page.getByRole('heading', { name: 'Dialog' })).toBeVisible();
394
+ await page.getByRole('button', { name: /باز کردن/i }).click();
395
+ await expect(page.getByRole('dialog')).toHaveAttribute('dir', 'rtl');
396
+ });
397
+ ```
398
+
399
+ - [ ] **Step 2: Run the focused E2E test**
400
+
401
+ Run: `pnpm exec playwright test tests/e2e/catalog.spec.ts`
402
+
403
+ Expected: FAIL because catalog routes and controls are not yet covered.
404
+
405
+ - [ ] **Step 3: Add coverage for every audit mode**
406
+
407
+ Cover deep links, search, status filters, keyboard navigation, English/Persian/pseudo locales, theme switching, direction, 390/768/1024/1280/1440 layouts, no horizontal overflow, and a representative overlay interaction.
408
+
409
+ - [ ] **Step 4: Document the reviewer workflow**
410
+
411
+ Document `pnpm dev` for the catalog and `pnpm storybook` for exhaustive component inspection. Link the catalog inventory and explain the distinction between available, in-progress, and planned entries.
412
+
413
+ - [ ] **Step 5: Run the completion matrix and commit**
414
+
415
+ Run: `pnpm check && pnpm test:storybook && pnpm test:e2e && make check`
416
+
417
+ Expected: PASS. If a command cannot run, preserve its exact error and do not claim that portion is complete.
418
+
419
+ ```bash
420
+ git add tests/e2e docs/design-system README.md
421
+ git commit -m "test: add NOE catalog audit coverage"
422
+ ```
@@ -0,0 +1,260 @@
1
+ # NOE Design System Development-Ready Rebuild
2
+
3
+ **Date:** 2026-08-25
4
+ **Status:** Approved for implementation
5
+ **Scope root:** `/Users/ali/Documents/NoEcosystem/design-system`
6
+
7
+ ## Objective
8
+
9
+ Promote the delivered NOE design-system source into the workspace root and turn the current offline verification baseline into a real, maintainable React design-system workspace. Preserve the original delivery and evidence, retain the existing NOE semantic and bidirectional contracts, and establish an executable development workflow with pinned dependencies, Storybook, a showcase application, automated tests, CI, and visual QA.
10
+
11
+ This milestone creates a strong development foundation. It does not claim hosted GitHub Actions, deployment, package publication, or production validation unless those operations are actually executed.
12
+
13
+ ## Current State
14
+
15
+ The delivered source currently lives under `noe-design-system/`. The sibling delivery directory, evidence directory, and Git bundle contain the original execution report and verification artifacts.
16
+
17
+ The source has useful semantic tokens, i18n and bidi utilities, representative React components, registry metadata, Storybook source, a dependency-free static showcase, and offline verification. It is not yet a normal development workspace:
18
+
19
+ - no pnpm workspace or lockfile exists;
20
+ - runtime and tooling dependencies are incomplete or expressed as broad ranges;
21
+ - Storybook has not been installed and production-built;
22
+ - several packages omit internal or runtime dependencies;
23
+ - many components are minimal custom wrappers rather than verified Base UI/COSS compositions;
24
+ - the showcase is static HTML/JavaScript rather than a React development application;
25
+ - lint, formatting, browser component tests, Playwright, and package builds are not integrated as one developer workflow.
26
+
27
+ ## Repository Layout
28
+
29
+ The source contents move to the current project root. Original artifacts remain immutable under one clearly named archive location.
30
+
31
+ ```text
32
+ design-system/
33
+ apps/
34
+ showcase/ React + Vite development and visual-QA application
35
+ storybook/ Storybook documentation and interaction environment
36
+ packages/
37
+ design-tokens/ Semantic tokens and generated CSS/TypeScript outputs
38
+ ui/ Accessible NOE primitives and bidi-safe utilities
39
+ i18n/ Locale metadata, messages, formatters, pseudo-locales
40
+ icons/ Icon policy and direction-aware wrappers
41
+ ai-ui/ Agent, tool, approval, plan, and run patterns
42
+ data-ui/ Table, metric, filter, and chart composition
43
+ workflow-ui/ Workflow canvas, node, edge, and inspector patterns
44
+ registry/ shadcn-compatible @noe registry
45
+ testing/ Shared render, locale, direction, and a11y test helpers
46
+ docs/
47
+ tests/
48
+ e2e/
49
+ artifacts/
50
+ original-delivery/
51
+ package.json
52
+ pnpm-workspace.yaml
53
+ pnpm-lock.yaml
54
+ tsconfig.json
55
+ ```
56
+
57
+ The old nested `noe-design-system/` directory is removed only after every source file is promoted. `NOE-Design-System-Delivery/`, `noe-design-system-evidence/`, and `noe-design-system.bundle` move into `artifacts/original-delivery/`. Checksums and reports remain unchanged so their provenance is preserved.
58
+
59
+ The project remains part of the existing parent Git repository. No nested `.git` directory is created.
60
+
61
+ ## Workspace and Toolchain
62
+
63
+ - pnpm is the only package manager.
64
+ - The workspace uses the Node version required by the canonical NOE architecture and records it for local tooling.
65
+ - Exact dependency versions are resolved into `pnpm-lock.yaml`; package manifests use deliberate compatible ranges only where library publication semantics require them.
66
+ - TypeScript uses strict shared configuration and package-level project boundaries.
67
+ - Biome 2 covers deterministic formatting plus TypeScript, React, accessibility-sensitive, and import-quality linting without introducing parser peer conflicts with the canonical TypeScript 7 toolchain.
68
+ - Vite powers the showcase and Storybook builder.
69
+ - Vitest and Testing Library cover unit and component behavior.
70
+ - Playwright covers critical browser flows, locale/direction matrices, and deterministic screenshots.
71
+
72
+ Root scripts provide one predictable interface:
73
+
74
+ ```text
75
+ pnpm dev
76
+ pnpm storybook
77
+ pnpm format:check
78
+ pnpm lint
79
+ pnpm typecheck
80
+ pnpm test
81
+ pnpm test:components
82
+ pnpm test:e2e
83
+ pnpm build
84
+ pnpm build:storybook
85
+ pnpm verify
86
+ pnpm check
87
+ ```
88
+
89
+ `pnpm check` is the local completion gate. The repository-level `make check` is also run because the project lives inside the NOE architecture repository.
90
+
91
+ ## Component Architecture
92
+
93
+ The public dependency direction is:
94
+
95
+ ```text
96
+ Base UI behavior
97
+ -> selected COSS composition knowledge/source
98
+ -> NOE normalization
99
+ -> @noe/ui
100
+ -> @noe/data-ui | @noe/ai-ui | @noe/workflow-ui
101
+ -> showcase and product consumers
102
+ ```
103
+
104
+ Base UI supplies accessible state machines and interaction behavior. COSS is used as a verified component and composition foundation through its registry/source model. Selected COSS code is normalized into NOE-owned components; products do not depend on default COSS styling or raw COSS APIs.
105
+
106
+ Every public component has:
107
+
108
+ - a named props interface;
109
+ - `forwardRef` where consumers need DOM access;
110
+ - stable `data-slot` hooks;
111
+ - semantic token styling;
112
+ - explicit controlled/uncontrolled behavior where relevant;
113
+ - localized labels supplied by the consumer or i18n layer;
114
+ - correct keyboard and focus behavior;
115
+ - LTR, RTL, light, dark, long-content, disabled, loading, and error coverage as applicable;
116
+ - Storybook documentation and executable tests;
117
+ - registry metadata when distributable.
118
+
119
+ Compound components are used for structures such as Dialog, Drawer, Tabs, Field, Menu, Select, ToolCall, and ApprovalRequest when a single monolithic props object would hide composition or accessibility semantics. Small components remain small; abstraction is added only when it protects a real contract.
120
+
121
+ ## Initial Component Scope
122
+
123
+ The milestone prioritizes a coherent vertical slice instead of claiming hundreds of complete components.
124
+
125
+ Core UI:
126
+
127
+ - Button
128
+ - Input and Textarea
129
+ - Field
130
+ - Dialog
131
+ - Drawer
132
+ - Tabs
133
+ - Badge and Alert
134
+ - Card
135
+ - Tooltip
136
+ - Menu or Select where required by the showcase
137
+ - Spinner, Skeleton, EmptyState, and ErrorState
138
+ - BidiText, AutoDirectionText, TechnicalValue, CodeBlock, and Terminal
139
+
140
+ Product patterns:
141
+
142
+ - DataTable shell and MetricCard
143
+ - AgentMessage, AgentComposer, AgentPlan, ToolCall, ApprovalRequest, and RunInspector
144
+ - WorkflowCanvas and WorkflowNode
145
+
146
+ Existing public names are preserved where reasonable. Breaking changes are documented, migrated across all in-repository consumers, and reflected in registry metadata.
147
+
148
+ ## Visual System
149
+
150
+ NOE semantic tokens remain the only source of visual values. Token output supports TypeScript, CSS custom properties, and Tailwind consumption without duplicating values.
151
+
152
+ The visual direction is calm, precise, connected, technical, human-centered, premium, quiet, and fast. It avoids generic shadcn/COSS appearance, excessive rounded cards, decorative gradients, arbitrary shadows, and generic AI purple/glow treatments.
153
+
154
+ The rebuild strengthens:
155
+
156
+ - typographic hierarchy for English and Persian;
157
+ - compact but touch-safe control sizing;
158
+ - semantic surfaces and restrained elevation;
159
+ - independently designed light and dark themes;
160
+ - consistent focus rings and interaction states;
161
+ - logical spacing and directional motion;
162
+ - responsive composition at 390, 768, 1024, 1280, and 1440 pixels.
163
+
164
+ The existing static visual reference is a comparison input, not a constraint. The new React showcase becomes the development and visual-QA source.
165
+
166
+ ## Internationalization and Direction
167
+
168
+ English/LTR, Persian/RTL, pseudo-LTR, and pseudo-RTL remain first-class test configurations.
169
+
170
+ - Document `lang` and `dir` are set before the rendered application becomes interactive.
171
+ - Locale metadata, direction, numbering system, and formatting policy remain centralized.
172
+ - Reusable components contain no hardcoded localizable text.
173
+ - Logical CSS properties are preferred; physical directions require semantic justification.
174
+ - Portalled content receives direction explicitly.
175
+ - Technical identifiers, code, URLs, hashes, and commands preserve LTR semantics inside RTL interfaces.
176
+ - Unpredictable user and agent content uses `dir="auto"` or bidi isolation as appropriate.
177
+
178
+ ## Showcase and Storybook
179
+
180
+ The showcase provides four representative routes or switchable surfaces:
181
+
182
+ - consumer interaction;
183
+ - professional dashboard;
184
+ - agent workspace;
185
+ - workflow builder.
186
+
187
+ It supports locale, direction, theme, and responsive QA controls without embedding test-only behavior in public packages.
188
+
189
+ Storybook provides global theme, locale, and direction controls. Stories use package public imports instead of reaching into internal source files. Critical stories include interaction and accessibility assertions. Stable components fail CI on automated accessibility violations rather than downgrading them to warnings.
190
+
191
+ ## Testing Strategy
192
+
193
+ Unit tests cover tokens, locale and direction resolution, formatters, pseudo-localization, class composition, and state mapping.
194
+
195
+ Browser component tests cover focus, keyboard interaction, controlled state, disabled/loading/error behavior, portals, LTR/RTL, and accessible names.
196
+
197
+ Playwright covers representative showcase flows with:
198
+
199
+ - Chromium critical-path coverage for English, Persian, pseudo-LTR, and pseudo-RTL;
200
+ - meaningful Firefox and WebKit coverage;
201
+ - viewports 390, 768, 1024, 1280, and 1440 where layout transitions matter;
202
+ - deterministic visual snapshots for core surfaces;
203
+ - console-error, overflow, document direction, and clipped-content assertions.
204
+
205
+ Tests do not use `continue-on-error`, `|| true`, or zero-test success paths. Existing offline verification remains available as a secondary integrity check while real dependency-backed checks become authoritative for development readiness.
206
+
207
+ ## CI and Security
208
+
209
+ GitHub Actions run formatting, lint, typecheck, unit/component tests, package and showcase builds, Storybook build, registry verification, critical Playwright, and security checks. Jobs use minimal permissions, concurrency cancellation for stale pull-request runs, deterministic installs with `--frozen-lockfile`, and useful failure artifacts.
210
+
211
+ Third-party actions are pinned to immutable commit SHAs when adopted. No secrets or deployment credentials are introduced. Hosted checks and deployment are reported as blocked until an authenticated remote and authorized target exist.
212
+
213
+ ## Error Handling and Developer Experience
214
+
215
+ - Public components fail predictably and expose errors through accessible content rather than console-only signals.
216
+ - Required provider misuse produces actionable development errors.
217
+ - Registry validation reports the exact invalid item and field.
218
+ - Root commands fail with non-zero status and preserve useful diagnostics.
219
+ - README and `llms.txt` provide a short start path; detailed architecture remains in focused documents.
220
+ - Examples import public package exports and therefore exercise the same API available to product teams.
221
+
222
+ ## Migration Sequence
223
+
224
+ 1. Create the root archive location and preserve original delivery artifacts.
225
+ 2. Promote source files from `noe-design-system/` to the project root.
226
+ 3. Establish pnpm workspace, pinned toolchain, dependency graph, and baseline checks.
227
+ 4. Convert the static reference into the React/Vite showcase.
228
+ 5. Normalize design tokens and shared styling.
229
+ 6. Rebuild core components on verified Base UI/COSS patterns.
230
+ 7. Migrate data, agentic, and workflow patterns to public component contracts.
231
+ 8. Repair Storybook and add executable interaction/a11y coverage.
232
+ 9. Add component, E2E, visual, registry, and CI checks.
233
+ 10. Update documentation, run the full verification matrix, and record actual evidence.
234
+
235
+ Each step keeps the repository buildable. Existing behavior is migrated before obsolete source is removed.
236
+
237
+ ## Completion Evidence
238
+
239
+ This milestone is complete only with concrete results for:
240
+
241
+ - dependency installation from the lockfile;
242
+ - format, lint, and strict typecheck;
243
+ - unit and browser component tests;
244
+ - package and showcase production builds;
245
+ - Storybook production build;
246
+ - registry and i18n/RTL verification;
247
+ - Playwright critical flows and visual snapshots;
248
+ - repository-level `make check`;
249
+ - final browser inspection in English/Persian, LTR/RTL, light/dark, and responsive viewports.
250
+
251
+ Any unavailable hosted or production operation is listed as a remaining gap and is never inferred from local success.
252
+
253
+ ## Explicit Non-Goals for This Milestone
254
+
255
+ - creating or mutating a remote GitHub repository without an authenticated write-capable integration;
256
+ - publishing packages or the registry;
257
+ - deploying Storybook or the showcase;
258
+ - claiming every component named in the original program brief is production-complete;
259
+ - introducing a custom MCP server while official shadcn registry discovery is sufficient;
260
+ - changing production infrastructure, credentials, DNS, billing, or release approval.