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,18 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { VerificationPage } from '../../../../packages/ui/src/verification-page';
3
+
4
+ const meta = {
5
+ title: 'Catalog/Shared / Auth/Verification Page',
6
+ component: VerificationPage,
7
+ tags: ['autodocs'],
8
+ } satisfies Meta<typeof VerificationPage>;
9
+ export default meta;
10
+ type Story = StoryObj<typeof meta>;
11
+ export const Default: Story = {};
12
+ export const RTL: Story = {
13
+ render: () => (
14
+ <div dir="rtl">
15
+ <VerificationPage />
16
+ </div>
17
+ ),
18
+ };
@@ -0,0 +1,18 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { VideoPlayer } from '../../../../packages/ui/src/video-player';
3
+
4
+ const meta = {
5
+ title: 'Catalog/Base / Media/Video Player',
6
+ component: VideoPlayer,
7
+ tags: ['autodocs'],
8
+ } satisfies Meta<typeof VideoPlayer>;
9
+ export default meta;
10
+ type Story = StoryObj<typeof meta>;
11
+ export const Default: Story = {};
12
+ export const RTL: Story = {
13
+ render: () => (
14
+ <div dir="rtl">
15
+ <VideoPlayer />
16
+ </div>
17
+ ),
18
+ };
@@ -0,0 +1,45 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+
3
+ import { Button } from '../../../../packages/ui/src/button';
4
+ import { WorkflowCanvas } from '../../../../packages/workflow-ui/src/workflow-canvas';
5
+ import { WorkflowNode } from '../../../../packages/workflow-ui/src/workflow-node';
6
+
7
+ function WorkflowCanvasDemo() {
8
+ return (
9
+ <div style={{ height: '24rem' }}>
10
+ <WorkflowCanvas
11
+ label="Deploy workflow"
12
+ toolbar={
13
+ <>
14
+ <Button size="sm" variant="outline">
15
+ Zoom to fit
16
+ </Button>
17
+ <Button size="sm" variant="primary">
18
+ Run
19
+ </Button>
20
+ </>
21
+ }
22
+ inspector={
23
+ <div style={{ fontSize: '0.8125rem', color: 'var(--noe-color-muted-foreground)' }}>
24
+ Select a node to inspect its configuration.
25
+ </div>
26
+ }
27
+ >
28
+ <div style={{ display: 'flex', gap: '2rem' }}>
29
+ <WorkflowNode kind="trigger" title="On pull request" technicalId="trigger_1" />
30
+ <WorkflowNode kind="agent" title="Review agent" subtitle="noe-agent-1" selected />
31
+ </div>
32
+ </WorkflowCanvas>
33
+ </div>
34
+ );
35
+ }
36
+
37
+ const meta = {
38
+ title: 'Catalog/Workflow/Workflow Canvas',
39
+ component: WorkflowCanvasDemo,
40
+ tags: ['autodocs'],
41
+ } satisfies Meta<typeof WorkflowCanvasDemo>;
42
+ export default meta;
43
+ type Story = StoryObj<typeof meta>;
44
+
45
+ export const Default: Story = {};
@@ -0,0 +1,24 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+
3
+ import { WorkflowNode } from '../../../../packages/workflow-ui/src/workflow-node';
4
+
5
+ const meta = {
6
+ title: 'Catalog/Workflow/Workflow Node',
7
+ component: WorkflowNode,
8
+ tags: ['autodocs'],
9
+ argTypes: {
10
+ kind: { control: 'select', options: ['trigger', 'agent', 'tool', 'condition', 'output'] },
11
+ },
12
+ args: { kind: 'agent', title: 'Review agent', subtitle: 'noe-agent-1', technicalId: 'node_4f2a' },
13
+ } satisfies Meta<typeof WorkflowNode>;
14
+ export default meta;
15
+ type Story = StoryObj<typeof meta>;
16
+
17
+ export const Default: Story = {};
18
+ export const Selected: Story = { args: { selected: true } };
19
+ export const Trigger: Story = {
20
+ args: { kind: 'trigger', title: 'On pull request', subtitle: undefined },
21
+ };
22
+ export const Condition: Story = {
23
+ args: { kind: 'condition', title: 'Has tests?', subtitle: undefined },
24
+ };
@@ -0,0 +1,39 @@
1
+ import { dirname } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { storybookTest } from '@storybook/addon-vitest/vitest-plugin';
4
+ import { playwright } from '@vitest/browser-playwright';
5
+ import { defineConfig } from 'vitest/config';
6
+
7
+ const configDir = `${dirname(fileURLToPath(import.meta.url))}/.storybook`;
8
+ const monorepoRoot = dirname(dirname(dirname(fileURLToPath(import.meta.url))));
9
+
10
+ const storybookPlugins = await storybookTest({
11
+ configDir,
12
+ storybookUrl: 'http://localhost:6006',
13
+ tags: {
14
+ exclude: ['test-skip'],
15
+ },
16
+ });
17
+
18
+ export default defineConfig({
19
+ root: monorepoRoot,
20
+ resolve: {
21
+ dedupe: ['react', 'react-dom'],
22
+ },
23
+ plugins: storybookPlugins,
24
+ test: {
25
+ name: 'storybook',
26
+ dir: monorepoRoot,
27
+ // Serial execution: no parallel files, no concurrent tests within a file.
28
+ // Prevents port collision and browser connection closed seen with 133 files parallel.
29
+ fileParallelism: false,
30
+ sequence: { concurrent: false },
31
+ browser: {
32
+ enabled: true,
33
+ provider: playwright(),
34
+ headless: true,
35
+ instances: [{ browser: 'chromium' }],
36
+ },
37
+ setupFiles: ['./.storybook/vitest.setup.ts'],
38
+ },
39
+ });
@@ -0,0 +1,13 @@
1
+ # Static visual reference
2
+
3
+ This dependency-free application is the deterministic visual QA target. Query parameters select a surface, locale, and theme:
4
+
5
+ ```text
6
+ index.html?surface=agent&locale=fa&theme=dark
7
+ ```
8
+
9
+ Supported surfaces: `consumer`, `dashboard`, `agent`, `workflow`.
10
+ Supported locales: `en`, `fa`, `en-XA`, `ar-XB`.
11
+ Supported themes: `light`, `dark`.
12
+
13
+ The static app is not a replacement for Storybook or product integration. It provides reproducible evidence when package registry access is unavailable.
@@ -0,0 +1,483 @@
1
+ const localeMetadata = Object.freeze({
2
+ en: Object.freeze({ locale: 'en', direction: 'ltr' }),
3
+ fa: Object.freeze({ locale: 'fa', direction: 'rtl' }),
4
+ 'en-XA': Object.freeze({ locale: 'en-XA', direction: 'ltr', pseudo: 'ltr' }),
5
+ 'ar-XB': Object.freeze({ locale: 'ar-XB', direction: 'rtl', pseudo: 'rtl' }),
6
+ });
7
+ const messages = {
8
+ en: {
9
+ 'nav.system': 'System',
10
+ 'nav.principles': 'Principles',
11
+ 'nav.progress': 'Progress',
12
+ 'nav.ask': 'Ask NOa',
13
+ 'hero.eyebrow': 'NOECOSYSTEM / SHARED DIGITAL FOUNDATIONS',
14
+ 'hero.title': 'Shared foundations. Connected experiences.',
15
+ 'hero.body':
16
+ 'A shared digital foundation for connected products and services—coherent at the core, clear at the surface.',
17
+ 'hero.primary': 'Explore the system',
18
+ 'hero.secondary': 'View progress',
19
+ 'foundation.title': 'A shared core. Distinct experiences.',
20
+ 'foundation.shared': 'Shared by design.',
21
+ 'foundation.connected': 'Connected with intent.',
22
+ 'foundation.clear': 'Clear at the surface.',
23
+ 'common.search': 'Search',
24
+ 'common.filter': 'Filter',
25
+ 'common.retry': 'Retry',
26
+ 'common.cancel': 'Cancel',
27
+ 'common.close': 'Close',
28
+ 'common.more': 'More',
29
+ 'dashboard.title': 'Operating overview',
30
+ 'dashboard.subtitle': 'Signals, services, and delivery health across the ecosystem.',
31
+ 'metric.active': 'Active services',
32
+ 'metric.reliability': 'Reliability',
33
+ 'metric.latency': 'Median latency',
34
+ 'metric.approvals': 'Pending approvals',
35
+ 'table.service': 'Service',
36
+ 'table.owner': 'Owner',
37
+ 'table.status': 'Status',
38
+ 'table.updated': 'Updated',
39
+ 'table.actions': 'Actions',
40
+ 'status.healthy': 'Healthy',
41
+ 'status.degraded': 'Degraded',
42
+ 'status.pending': 'Pending',
43
+ 'status.running': 'Running',
44
+ 'status.completed': 'Completed',
45
+ 'status.failed': 'Failed',
46
+ 'agent.title': 'Agent workspace',
47
+ 'agent.subtitle':
48
+ 'Coordinate plans, tools, approvals, and artifacts without exposing implementation noise.',
49
+ 'agent.message.user': 'Review today’s orchestration health and prepare an executive summary.',
50
+ 'agent.message.assistant':
51
+ 'I found one degraded connector and two approvals that require attention. The executive summary is ready for review.',
52
+ 'agent.composer.placeholder': 'Ask NOa to investigate, plan, or execute…',
53
+ 'agent.plan': 'Execution plan',
54
+ 'agent.plan.step1': 'Inspect service health',
55
+ 'agent.plan.step2': 'Compare incidents and change history',
56
+ 'agent.plan.step3': 'Prepare the decision brief',
57
+ 'tool.title': 'Fetch service health',
58
+ 'tool.scope': 'Read-only access to service telemetry',
59
+ 'tool.success': 'Telemetry retrieved',
60
+ 'approval.title': 'Approval required',
61
+ 'approval.body': 'Publish the prepared executive brief to the leadership workspace.',
62
+ 'approval.once': 'Allow once',
63
+ 'approval.session': 'Allow for session',
64
+ 'approval.deny': 'Deny',
65
+ 'artifact.title': 'Executive brief',
66
+ 'artifact.updated': 'Updated just now',
67
+ 'workflow.title': 'Workflow builder',
68
+ 'workflow.subtitle':
69
+ 'Compose agents, tools, and conditions while preserving clear control boundaries.',
70
+ 'workflow.trigger': 'Incoming request',
71
+ 'workflow.agent': 'Planning agent',
72
+ 'workflow.tool': 'Health tool',
73
+ 'workflow.condition': 'Risk detected?',
74
+ 'workflow.output': 'Decision brief',
75
+ 'inspector.title': 'Inspector',
76
+ 'inspector.type': 'Node type',
77
+ 'inspector.permissions': 'Permissions',
78
+ 'inspector.timeout': 'Timeout',
79
+ 'empty.title': 'No results',
80
+ 'empty.body': 'Adjust filters or clear the current search.',
81
+ 'error.title': 'Unable to load',
82
+ 'error.body': 'The service did not respond. Retry without losing your current work.',
83
+ 'footer.note': 'One system. Built deliberately.',
84
+ 'skip.content': 'Skip to content',
85
+ 'brand.home': 'NOE home',
86
+ 'brand.controlCenter': 'CONTROL CENTER',
87
+ 'action.toggleTheme': 'Toggle theme',
88
+ 'action.accountMenu': 'Account menu',
89
+ 'action.more': 'More actions',
90
+ 'action.previousPage': 'Previous page',
91
+ 'action.nextPage': 'Next page',
92
+ 'action.back': 'Back',
93
+ 'action.attach': 'Attach',
94
+ 'action.search': 'Search',
95
+ 'action.collapse': 'Collapse',
96
+ 'control.surface': 'Surface',
97
+ 'control.locale': 'Locale',
98
+ 'control.theme': 'Theme',
99
+ 'nav.overview': 'Overview',
100
+ 'nav.services': 'Services',
101
+ 'nav.signals': 'Signals',
102
+ 'nav.approvals': 'Approvals',
103
+ 'nav.observability': 'Observability',
104
+ 'sidebar.platformOwner': 'Platform owner',
105
+ 'dashboard.eyebrow': 'OPERATIONS / LIVE',
106
+ 'dashboard.refresh': 'Refresh',
107
+ 'dashboard.createView': 'Create view',
108
+ 'panel.serviceHealth.title': 'Service health',
109
+ 'panel.serviceHealth.subtitle': 'Current status and responsibility across shared capabilities.',
110
+ 'metric.active.delta': '+3',
111
+ 'metric.active.period': 'this quarter',
112
+ 'metric.reliability.delta': '+0.04%',
113
+ 'metric.reliability.period': '30-day window',
114
+ 'metric.latency.delta': '−18 ms',
115
+ 'metric.latency.period': 'week over week',
116
+ 'metric.approvals.note': '1 high-impact',
117
+ 'metric.approvals.action': 'review required',
118
+ 'time.2m': '2m ago',
119
+ 'time.4m': '4m ago',
120
+ 'time.8m': '8m ago',
121
+ 'time.11m': '11m ago',
122
+ 'pagination.summary': '1–4 of 24',
123
+ 'agent.brand.small': 'AGENT FOUNDATION',
124
+ 'agent.newRun': 'New run',
125
+ 'agent.section.workspace': 'WORKSPACE',
126
+ 'agent.section.recent': 'RECENT',
127
+ 'nav.conversation': 'Conversation',
128
+ 'nav.artifacts': 'Artifacts',
129
+ 'nav.runs': 'Runs',
130
+ 'nav.workflows': 'Workflows',
131
+ 'agent.recent.orchestration': 'Orchestration review',
132
+ 'agent.recent.release': 'Release readiness',
133
+ 'agent.status.online': 'NOa / online',
134
+ 'artifact.section': 'ARTIFACT',
135
+ 'artifact.kicker': 'OPERATING ECOSYSTEM / DAILY BRIEF',
136
+ 'artifact.heading': 'Orchestration remains stable with one contained degradation.',
137
+ 'artifact.body':
138
+ 'Core service health is within objective. The degradation is isolated to a partner connector and has not affected critical customer paths.',
139
+ 'artifact.incidents': 'Active incidents',
140
+ 'artifact.decisionPoints': 'Decision points',
141
+ 'artifact.decision1': 'Approve connector failover before the next traffic window.',
142
+ 'artifact.decision2': 'Publish the prepared partner communication after legal review.',
143
+ 'artifact.technicalReference': 'Technical reference',
144
+ 'run.inspector': 'Run inspector',
145
+ 'run.elapsed': 'Elapsed',
146
+ 'run.tokens': 'Tokens',
147
+ 'askpanel.eyebrow': 'NOsist / AI FOUNDATION',
148
+ 'askpanel.title': 'Move from intent to coordinated action.',
149
+ 'askpanel.body':
150
+ 'Ask, inspect, approve, and receive a clear result. Technical detail remains available without dominating the experience.',
151
+ 'system.visual.label': 'Connected NOE system illustration',
152
+ 'reference.controls': 'Reference controls',
153
+ 'workflow.brand.small': 'WORKFLOW STUDIO',
154
+ 'workflow.testRun': 'Test run',
155
+ 'workflow.publish': 'Publish',
156
+ 'workflow.searchNodes': 'Search nodes',
157
+ 'workflow.section.triggers': 'TRIGGERS',
158
+ 'workflow.section.capabilities': 'CAPABILITIES',
159
+ 'workflow.node.request': 'Request',
160
+ 'workflow.node.request.desc': 'Starts from an incoming request',
161
+ 'workflow.node.schedule': 'Schedule',
162
+ 'workflow.node.schedule.desc': 'Starts on a time rule',
163
+ 'workflow.capability.agent': 'Agent',
164
+ 'workflow.capability.agent.desc': 'Plans and reasons',
165
+ 'workflow.capability.tool': 'Tool',
166
+ 'workflow.capability.tool.desc': 'Performs a bounded action',
167
+ 'workflow.capability.condition': 'Condition',
168
+ 'workflow.capability.condition.desc': 'Routes by evaluated state',
169
+ 'workflow.saved': 'Saved',
170
+ 'inspector.selectedNode': 'SELECTED NODE',
171
+ 'inspector.name': 'Name',
172
+ 'inspector.model': 'Model',
173
+ 'inspector.reasoning': 'Reasoning',
174
+ 'inspector.readTelemetry': 'Read telemetry',
175
+ 'inspector.readTelemetry.desc': 'Access service metrics and traces',
176
+ 'inspector.publishArtifact': 'Publish artifact',
177
+ 'inspector.publishArtifact.desc': 'Requires approval at runtime',
178
+ 'inspector.failurePath': 'Failure path',
179
+ 'inspector.routeHuman': 'Route to human review',
180
+ 'inspector.deleteNode': 'Delete node',
181
+ 'inspector.balanced': 'Balanced',
182
+ 'workflow.kind.trigger': 'TRIGGER',
183
+ 'workflow.kind.agent': 'AGENT',
184
+ 'workflow.kind.condition': 'CONDITION',
185
+ 'workflow.kind.tool': 'TOOL',
186
+ 'workflow.kind.output': 'OUTPUT',
187
+ 'workflow.output.format': 'Artifact / Markdown',
188
+ 'workflow.condition.rule': 'severity ≥ medium',
189
+ 'agent.run.title': 'Operational health review',
190
+ 'agent.you': 'You',
191
+ 'tool.scope.label': 'Scope',
192
+ 'tool.duration': 'Duration',
193
+ 'approval.target': 'Target',
194
+ 'approval.visibility': 'Visibility',
195
+ 'approval.consequence': 'Consequence',
196
+ 'approval.visibility.value': 'Leadership',
197
+ 'approval.consequence.value': 'Publishes a new shared artifact',
198
+ 'agent.plan.progress': '3 steps · 2 completed',
199
+ 'agent.send': 'Send',
200
+ },
201
+ fa: {
202
+ 'nav.system': 'سیستم',
203
+ 'nav.principles': 'اصول',
204
+ 'nav.progress': 'پیشرفت',
205
+ 'nav.ask': 'پرسش از NOa',
206
+ 'hero.eyebrow': 'NOECOSYSTEM / زیرساخت‌های دیجیتال مشترک',
207
+ 'hero.title': 'زیرساخت‌های مشترک. تجربه‌های متصل.',
208
+ 'hero.body':
209
+ 'یک زیرساخت دیجیتال مشترک برای محصولات و خدمات متصل؛ منسجم در هسته و روشن در سطح تجربه.',
210
+ 'hero.primary': 'مشاهده سیستم',
211
+ 'hero.secondary': 'نمایش پیشرفت',
212
+ 'foundation.title': 'یک هسته مشترک. تجربه‌های متمایز.',
213
+ 'foundation.shared': 'اشتراک‌پذیر از ابتدا.',
214
+ 'foundation.connected': 'اتصال هدفمند.',
215
+ 'foundation.clear': 'شفاف در سطح تجربه.',
216
+ 'common.search': 'جست‌وجو',
217
+ 'common.filter': 'فیلتر',
218
+ 'common.retry': 'تلاش دوباره',
219
+ 'common.cancel': 'لغو',
220
+ 'common.close': 'بستن',
221
+ 'common.more': 'بیشتر',
222
+ 'dashboard.title': 'نمای کلی عملیات',
223
+ 'dashboard.subtitle': 'سیگنال‌ها، سرویس‌ها و سلامت تحویل در سراسر اکوسیستم.',
224
+ 'metric.active': 'سرویس‌های فعال',
225
+ 'metric.reliability': 'پایداری',
226
+ 'metric.latency': 'میانه تأخیر',
227
+ 'metric.approvals': 'تأییدهای در انتظار',
228
+ 'table.service': 'سرویس',
229
+ 'table.owner': 'مالک',
230
+ 'table.status': 'وضعیت',
231
+ 'table.updated': 'به‌روزرسانی',
232
+ 'table.actions': 'عملیات',
233
+ 'status.healthy': 'سالم',
234
+ 'status.degraded': 'ناپایدار',
235
+ 'status.pending': 'در انتظار',
236
+ 'status.running': 'در حال اجرا',
237
+ 'status.completed': 'تکمیل‌شده',
238
+ 'status.failed': 'ناموفق',
239
+ 'agent.title': 'فضای کاری عامل',
240
+ 'agent.subtitle': 'مدیریت برنامه‌ها، ابزارها، تأییدها و خروجی‌ها بدون نمایش پیچیدگی پیاده‌سازی.',
241
+ 'agent.message.user': 'سلامت ارکستریشن امروز را بررسی کن و یک جمع‌بندی مدیریتی آماده کن.',
242
+ 'agent.message.assistant':
243
+ 'یک اتصال ناپایدار و دو تأیید نیازمند توجه پیدا شد. جمع‌بندی مدیریتی برای بازبینی آماده است.',
244
+ 'agent.composer.placeholder': 'از NOa بخواهید بررسی، برنامه‌ریزی یا اجرا کند…',
245
+ 'agent.plan': 'برنامه اجرا',
246
+ 'agent.plan.step1': 'بررسی سلامت سرویس‌ها',
247
+ 'agent.plan.step2': 'مقایسه رخدادها و تاریخچه تغییر',
248
+ 'agent.plan.step3': 'آماده‌سازی گزارش تصمیم',
249
+ 'tool.title': 'دریافت سلامت سرویس',
250
+ 'tool.scope': 'دسترسی فقط‌خواندنی به تله‌متری سرویس',
251
+ 'tool.success': 'تله‌متری دریافت شد',
252
+ 'approval.title': 'نیازمند تأیید',
253
+ 'approval.body': 'گزارش مدیریتی آماده‌شده در فضای کاری مدیریت منتشر شود.',
254
+ 'approval.once': 'فقط این بار',
255
+ 'approval.session': 'در این نشست',
256
+ 'approval.deny': 'رد کردن',
257
+ 'artifact.title': 'گزارش مدیریتی',
258
+ 'artifact.updated': 'همین حالا به‌روزرسانی شد',
259
+ 'workflow.title': 'سازنده گردش‌کار',
260
+ 'workflow.subtitle': 'ترکیب عامل‌ها، ابزارها و شرط‌ها با حفظ مرزهای کنترلی روشن.',
261
+ 'workflow.trigger': 'درخواست ورودی',
262
+ 'workflow.agent': 'عامل برنامه‌ریزی',
263
+ 'workflow.tool': 'ابزار سلامت',
264
+ 'workflow.condition': 'ریسک شناسایی شد؟',
265
+ 'workflow.output': 'گزارش تصمیم',
266
+ 'inspector.title': 'بازرس',
267
+ 'inspector.type': 'نوع گره',
268
+ 'inspector.permissions': 'مجوزها',
269
+ 'inspector.timeout': 'مهلت اجرا',
270
+ 'empty.title': 'نتیجه‌ای نیست',
271
+ 'empty.body': 'فیلترها را تغییر دهید یا جست‌وجوی فعلی را پاک کنید.',
272
+ 'error.title': 'بارگذاری انجام نشد',
273
+ 'error.body': 'سرویس پاسخ نداد. بدون از دست دادن کار فعلی دوباره تلاش کنید.',
274
+ 'footer.note': 'یک سیستم. ساخته‌شده با دقت.',
275
+ 'skip.content': 'پرش به محتوا',
276
+ 'brand.home': 'NOE — خانه',
277
+ 'brand.controlCenter': 'مرکز کنترل',
278
+ 'action.toggleTheme': 'تغییر پوسته',
279
+ 'action.accountMenu': 'منوی حساب',
280
+ 'action.more': 'عملیات بیشتر',
281
+ 'action.previousPage': 'صفحه پیشین',
282
+ 'action.nextPage': 'صفحه بعدی',
283
+ 'action.back': 'بازگشت',
284
+ 'action.attach': 'پیوست',
285
+ 'action.search': 'جست‌وجو',
286
+ 'action.collapse': 'جمع کردن',
287
+ 'control.surface': 'سطح',
288
+ 'control.locale': 'زبان',
289
+ 'control.theme': 'پوسته',
290
+ 'nav.overview': 'نمای کلی',
291
+ 'nav.services': 'سرویس‌ها',
292
+ 'nav.signals': 'سیگنال‌ها',
293
+ 'nav.approvals': 'تأییدها',
294
+ 'nav.observability': 'رصدپذیری',
295
+ 'sidebar.platformOwner': 'مالک پلتفرم',
296
+ 'dashboard.eyebrow': 'عملیات / زنده',
297
+ 'dashboard.refresh': 'بازخوانی',
298
+ 'dashboard.createView': 'ساخت نما',
299
+ 'panel.serviceHealth.title': 'سلامت سرویس',
300
+ 'panel.serviceHealth.subtitle': 'وضعیت فعلی و مسئولیت‌ها در سراسر قابلیت‌های مشترک.',
301
+ 'metric.active.delta': '+3',
302
+ 'metric.active.period': 'در این فصل',
303
+ 'metric.reliability.delta': '+0.04%',
304
+ 'metric.reliability.period': 'پنجره ۳۰ روزه',
305
+ 'metric.latency.delta': '−18 ms',
306
+ 'metric.latency.period': 'هفته به هفته',
307
+ 'metric.approvals.note': '۱ پرتأثیر',
308
+ 'metric.approvals.action': 'نیازمند بازبینی',
309
+ 'time.2m': '۲ دقیقه پیش',
310
+ 'time.4m': '۴ دقیقه پیش',
311
+ 'time.8m': '۸ دقیقه پیش',
312
+ 'time.11m': '۱۱ دقیقه پیش',
313
+ 'pagination.summary': '۱–۴ از ۲۴',
314
+ 'agent.brand.small': 'زیرساخت عامل',
315
+ 'agent.newRun': 'اجرای جدید',
316
+ 'agent.section.workspace': 'فضای کاری',
317
+ 'agent.section.recent': 'اخیر',
318
+ 'nav.conversation': 'گفت‌وگو',
319
+ 'nav.artifacts': 'خروجی‌ها',
320
+ 'nav.runs': 'اجراها',
321
+ 'nav.workflows': 'گردش‌کارها',
322
+ 'agent.recent.orchestration': 'بازبینی ارکستریشن',
323
+ 'agent.recent.release': 'آمادگی انتشار',
324
+ 'agent.status.online': 'NOa / برخط',
325
+ 'artifact.section': 'خروجی',
326
+ 'artifact.kicker': 'اکوسیستم عملیاتی / گزارش روزانه',
327
+ 'artifact.heading': 'ارکستریشن پایدار مانده و یک ناپایداری مهار شده است.',
328
+ 'artifact.body':
329
+ 'سلامت هسته سرویس‌ها در محدوده هدف است. ناپایداری تنها به یک اتصال همکار محدود است و مسیرهای حساس مشتری را تحت تأثیر قرار نداده است.',
330
+ 'artifact.incidents': 'رخدادهای فعال',
331
+ 'artifact.decisionPoints': 'نقاط تصمیم',
332
+ 'artifact.decision1': 'پیش از پنجره ترافیکی بعدی، اتصال جایگزین را تأیید کنید.',
333
+ 'artifact.decision2': 'ارتباط آماده‌شده با همکار را پس از بازبینی حقوقی منتشر کنید.',
334
+ 'artifact.technicalReference': 'مرجع فنی',
335
+ 'run.inspector': 'بازرس اجرا',
336
+ 'run.elapsed': 'زمان سپری‌شده',
337
+ 'run.tokens': 'توکن‌ها',
338
+ 'askpanel.eyebrow': 'NOsist / زیرساخت هوش مصنوعی',
339
+ 'askpanel.title': 'از هدف تا کنش هماهنگ.',
340
+ 'askpanel.body':
341
+ 'بپرسید، بررسی کنید، تأیید کنید و نتیجه‌ای روشن بگیرید. جزئیات فنی بدون غلبه بر تجربه در دسترس می‌مانند.',
342
+ 'system.visual.label': 'نمودار سیستم متصل NOE',
343
+ 'reference.controls': 'کنترل‌های مرجع',
344
+ 'workflow.brand.small': 'استودیو گردش‌کار',
345
+ 'workflow.testRun': 'اجرای آزمایشی',
346
+ 'workflow.publish': 'انتشار',
347
+ 'workflow.searchNodes': 'جست‌وجوی گره‌ها',
348
+ 'workflow.section.triggers': 'محرک‌ها',
349
+ 'workflow.section.capabilities': 'قابلیت‌ها',
350
+ 'workflow.node.request': 'درخواست',
351
+ 'workflow.node.request.desc': 'از یک درخواست ورودی آغاز می‌شود',
352
+ 'workflow.node.schedule': 'زمان‌بندی',
353
+ 'workflow.node.schedule.desc': 'بر اساس قانون زمانی آغاز می‌شود',
354
+ 'workflow.capability.agent': 'عامل',
355
+ 'workflow.capability.agent.desc': 'برنامه‌ریزی و استدلال می‌کند',
356
+ 'workflow.capability.tool': 'ابزار',
357
+ 'workflow.capability.tool.desc': 'کنشی محدود انجام می‌دهد',
358
+ 'workflow.capability.condition': 'شرط',
359
+ 'workflow.capability.condition.desc': 'بر اساس وضعیت ارزیابی‌شده مسیریابی می‌کند',
360
+ 'workflow.saved': 'ذخیره شد',
361
+ 'inspector.selectedNode': 'گره انتخاب‌شده',
362
+ 'inspector.name': 'نام',
363
+ 'inspector.model': 'مدل',
364
+ 'inspector.reasoning': 'استدلال',
365
+ 'inspector.readTelemetry': 'خواندن تله‌متری',
366
+ 'inspector.readTelemetry.desc': 'دسترسی به سنجه‌ها و ردپای سرویس‌ها',
367
+ 'inspector.publishArtifact': 'انتشار خروجی',
368
+ 'inspector.publishArtifact.desc': 'در زمان اجرا نیازمند تأیید است',
369
+ 'inspector.failurePath': 'مسیر شکست',
370
+ 'inspector.routeHuman': 'ارجاع به بازبینی انسانی',
371
+ 'inspector.deleteNode': 'حذف گره',
372
+ 'inspector.balanced': 'متعادل',
373
+ 'workflow.kind.trigger': 'محرک',
374
+ 'workflow.kind.agent': 'عامل',
375
+ 'workflow.kind.condition': 'شرط',
376
+ 'workflow.kind.tool': 'ابزار',
377
+ 'workflow.kind.output': 'خروجی',
378
+ 'workflow.output.format': 'خروجی / Markdown',
379
+ 'workflow.condition.rule': 'شدت ≥ متوسط',
380
+ 'agent.run.title': 'بازبینی سلامت عملیات',
381
+ 'agent.you': 'شما',
382
+ 'tool.scope.label': 'دامنه',
383
+ 'tool.duration': 'مدت',
384
+ 'approval.target': 'مقصد',
385
+ 'approval.visibility': 'سطح دسترسی',
386
+ 'approval.consequence': 'پیامد',
387
+ 'approval.visibility.value': 'مدیریت ارشد',
388
+ 'approval.consequence.value': 'یک خروجی مشترک جدید منتشر می‌شود',
389
+ 'agent.plan.progress': '۳ گام · ۲ تکمیل‌شده',
390
+ 'agent.send': 'ارسال',
391
+ },
392
+ };
393
+ const pseudoMap = Object.freeze({
394
+ a: 'à',
395
+ A: 'Å',
396
+ e: 'ë',
397
+ E: 'Ë',
398
+ i: 'ï',
399
+ I: 'Ï',
400
+ o: 'ø',
401
+ O: 'Ø',
402
+ u: 'ü',
403
+ U: 'Û',
404
+ c: 'ç',
405
+ C: 'Ç',
406
+ n: 'ñ',
407
+ N: 'Ñ',
408
+ });
409
+ function pseudoLocalize(value, mode = 'ltr') {
410
+ const expanded = String(value)
411
+ .replace(/[aAeEiIoOuUcCnN]/g, (char) => pseudoMap[char] ?? char)
412
+ .replace(/\b(\w{4,})\b/g, '$1~$1');
413
+ return mode === 'rtl' ? `⟦‮${expanded}‬⟧` : `⟦${expanded}⟧`;
414
+ }
415
+ function applyDocumentLocale(element, locale) {
416
+ const meta = localeMetadata[locale] ?? localeMetadata.en;
417
+ element.lang = meta.locale;
418
+ element.dir = meta.direction;
419
+ element.dataset.locale = meta.locale;
420
+ return meta;
421
+ }
422
+ const query = new URLSearchParams(location.search);
423
+ const injected = window.__NOE_CAPTURE__ || {};
424
+ const state = {
425
+ surface: injected.surface || query.get('surface') || 'consumer',
426
+ locale: injected.locale || query.get('locale') || 'en',
427
+ theme: injected.theme || query.get('theme') || 'light',
428
+ };
429
+ function sourceMessages(locale) {
430
+ return locale === 'fa' ? messages.fa : messages.en;
431
+ }
432
+ function translate(key) {
433
+ const value = sourceMessages(state.locale)[key] ?? messages.en[key] ?? key;
434
+ if (state.locale === 'en-XA') return pseudoLocalize(value, 'ltr');
435
+ if (state.locale === 'ar-XB') return pseudoLocalize(value, 'rtl');
436
+ return value;
437
+ }
438
+ function render() {
439
+ applyDocumentLocale(document.documentElement, state.locale);
440
+ document.documentElement.dataset.theme = state.theme;
441
+ document.body.dataset.surface = state.surface;
442
+ document.querySelectorAll('[data-surface]').forEach((element) => {
443
+ element.hidden = element.dataset.surface !== state.surface;
444
+ });
445
+ document.querySelectorAll('[data-i18n]').forEach((element) => {
446
+ element.textContent = translate(element.dataset.i18n);
447
+ });
448
+ document.querySelectorAll('[data-i18n-aria]').forEach((element) => {
449
+ element.setAttribute('aria-label', translate(element.dataset.i18nAria));
450
+ });
451
+ document.querySelectorAll('[data-i18n-placeholder]').forEach((element) => {
452
+ element.setAttribute('placeholder', translate(element.dataset.i18nPlaceholder));
453
+ });
454
+ document.querySelectorAll('[data-control]').forEach((control) => {
455
+ control.value = state[control.dataset.control];
456
+ });
457
+ const localeLabel = document.querySelector('[data-locale-label]');
458
+ if (localeLabel) localeLabel.textContent = state.locale === 'fa' ? 'EN' : 'FA';
459
+ document.title = `NOE Design System — ${state.surface}`;
460
+ }
461
+ function update(key, value) {
462
+ state[key] = value;
463
+ const next = new URL(location.href);
464
+ next.searchParams.set(key, value);
465
+ history.replaceState(null, '', next);
466
+ render();
467
+ }
468
+ document.addEventListener('DOMContentLoaded', () => {
469
+ document.addEventListener('change', (event) => {
470
+ const control = event.target.closest('[data-control]');
471
+ if (control) update(control.dataset.control, control.value);
472
+ });
473
+ document
474
+ .querySelector('[data-action="theme"]')
475
+ ?.addEventListener('click', () => update('theme', state.theme === 'dark' ? 'light' : 'dark'));
476
+ document
477
+ .querySelector('[data-action="locale"]')
478
+ ?.addEventListener('click', () => update('locale', state.locale === 'fa' ? 'en' : 'fa'));
479
+ document.querySelectorAll('[data-demo-composer]').forEach((form) => {
480
+ form.addEventListener('submit', (event) => event.preventDefault());
481
+ });
482
+ render();
483
+ });
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
2
+ <title>NOE</title>
3
+ <circle cx="16" cy="16" r="12" fill="none" stroke="currentColor" stroke-width="2"/>
4
+ <circle cx="16" cy="16" r="3" fill="currentColor"/>
5
+ <path d="M4 16h9M19 16h9M16 4v9M16 19v9" stroke="currentColor" stroke-width="2"/>
6
+ </svg>