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.
- package/.editorconfig +12 -0
- package/.github/CODEOWNERS +10 -0
- package/.github/dependabot.yml +12 -0
- package/.github/pull_request_template.md +17 -0
- package/.github/workflows/ci.yml +173 -0
- package/.github/workflows/security.yml +40 -0
- package/.mcp.json +8 -0
- package/.node-version +1 -0
- package/AGENTS.md +62 -0
- package/CONTRIBUTING.md +9 -0
- package/README.md +48 -0
- package/SECURITY.md +7 -0
- package/apps/showcase/index.html +28 -0
- package/apps/showcase/package.json +30 -0
- package/apps/showcase/src/app.css +8 -0
- package/apps/showcase/src/app.tsx +10 -0
- package/apps/showcase/src/catalog/agent-composer-preview.tsx +17 -0
- package/apps/showcase/src/catalog/catalog-index.tsx +2676 -0
- package/apps/showcase/src/catalog/catalog-shell.browser.test.tsx +73 -0
- package/apps/showcase/src/catalog/catalog-shell.tsx +506 -0
- package/apps/showcase/src/main.tsx +17 -0
- package/apps/showcase/tsconfig.json +11 -0
- package/apps/showcase/vite.config.ts +15 -0
- package/apps/storybook/.storybook/main.ts +21 -0
- package/apps/storybook/.storybook/preview.tsx +87 -0
- package/apps/storybook/.storybook/vitest.setup.ts +26 -0
- package/apps/storybook/README.md +5 -0
- package/apps/storybook/package.json +31 -0
- package/apps/storybook/stories/AgentStates.stories.tsx +72 -0
- package/apps/storybook/stories/Bidi.stories.tsx +31 -0
- package/apps/storybook/stories/Button.stories.tsx +19 -0
- package/apps/storybook/stories/Surfaces.stories.tsx +28 -0
- package/apps/storybook/stories/catalog/about-page.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/activity-feed.stories.tsx +50 -0
- package/apps/storybook/stories/catalog/activity-gauge.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/agent-composer.stories.tsx +49 -0
- package/apps/storybook/stories/catalog/agent-message.stories.tsx +37 -0
- package/apps/storybook/stories/catalog/agent-plan.stories.tsx +35 -0
- package/apps/storybook/stories/catalog/agent-workspace.stories.tsx +60 -0
- package/apps/storybook/stories/catalog/alert.stories.tsx +41 -0
- package/apps/storybook/stories/catalog/app-frame.stories.tsx +47 -0
- package/apps/storybook/stories/catalog/approval-request.stories.tsx +30 -0
- package/apps/storybook/stories/catalog/avatar.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/badge-group.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/badge.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/banner.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/bidi-text.stories.tsx +47 -0
- package/apps/storybook/stories/catalog/blog-index-page.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/blog-post-page.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/blog-section.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/bottom-navigation.stories.tsx +27 -0
- package/apps/storybook/stories/catalog/button-group.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/button.stories.tsx +27 -0
- package/apps/storybook/stories/catalog/calendar.stories.tsx +47 -0
- package/apps/storybook/stories/catalog/card.stories.tsx +40 -0
- package/apps/storybook/stories/catalog/careers-section.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/carousel.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/chart-frame.stories.tsx +34 -0
- package/apps/storybook/stories/catalog/chart.stories.tsx +43 -0
- package/apps/storybook/stories/catalog/checkbox.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/code-and-terminal.stories.tsx +39 -0
- package/apps/storybook/stories/catalog/color-picker.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/command-menu.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/contact-page.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/contact-section.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/content-divider.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/content-section.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/context-menu.stories.tsx +66 -0
- package/apps/storybook/stories/catalog/credit-card.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/cta-section.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/dashboard-01.stories.tsx +28 -0
- package/apps/storybook/stories/catalog/dashboard-02.stories.tsx +28 -0
- package/apps/storybook/stories/catalog/dashboard-shell.stories.tsx +65 -0
- package/apps/storybook/stories/catalog/data-list.stories.tsx +37 -0
- package/apps/storybook/stories/catalog/data-table.stories.tsx +51 -0
- package/apps/storybook/stories/catalog/date-picker.stories.tsx +31 -0
- package/apps/storybook/stories/catalog/dialog.stories.tsx +68 -0
- package/apps/storybook/stories/catalog/direction-provider.stories.tsx +36 -0
- package/apps/storybook/stories/catalog/drawer.stories.tsx +58 -0
- package/apps/storybook/stories/catalog/dropdown.stories.tsx +67 -0
- package/apps/storybook/stories/catalog/email-template.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/empty-state.stories.tsx +19 -0
- package/apps/storybook/stories/catalog/error-state.stories.tsx +19 -0
- package/apps/storybook/stories/catalog/fab.stories.tsx +22 -0
- package/apps/storybook/stories/catalog/faq-page.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/faq-section.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/feature-section.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/featured-icon.stories.tsx +45 -0
- package/apps/storybook/stories/catalog/field.stories.tsx +35 -0
- package/apps/storybook/stories/catalog/file-uploader.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/filter-bar.stories.tsx +33 -0
- package/apps/storybook/stories/catalog/footer.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/forgot-password-page.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/gradient-picker.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/header-navigation.stories.tsx +46 -0
- package/apps/storybook/stories/catalog/hero-header.stories.tsx +36 -0
- package/apps/storybook/stories/catalog/icon-system.stories.tsx +48 -0
- package/apps/storybook/stories/catalog/illustration.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/image-picker.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/informational-page-01.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/informational-page-02.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/inline-cta.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/input.stories.tsx +21 -0
- package/apps/storybook/stories/catalog/landing-page.stories.tsx +28 -0
- package/apps/storybook/stories/catalog/legal-page.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/login-page.stories.tsx +42 -0
- package/apps/storybook/stories/catalog/marketing-404-page.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/marketing-header.stories.tsx +35 -0
- package/apps/storybook/stories/catalog/menu.stories.tsx +46 -0
- package/apps/storybook/stories/catalog/messaging.stories.tsx +33 -0
- package/apps/storybook/stories/catalog/metric-card.stories.tsx +20 -0
- package/apps/storybook/stories/catalog/metrics-section.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/mobile-screen.stories.tsx +56 -0
- package/apps/storybook/stories/catalog/multi-select.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/newsletter.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/not-found.stories.tsx +30 -0
- package/apps/storybook/stories/catalog/notification.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/page-header.stories.tsx +37 -0
- package/apps/storybook/stories/catalog/pagination.stories.tsx +27 -0
- package/apps/storybook/stories/catalog/pie-chart.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/pricing-page.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/pricing-section.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/progress-indicator.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/progress-steps.stories.tsx +33 -0
- package/apps/storybook/stories/catalog/qr-code.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/radar-chart.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/radio-group.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/rating.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/rich-text-editor.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/run-inspector.stories.tsx +23 -0
- package/apps/storybook/stories/catalog/section-footer.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/section-header.stories.tsx +31 -0
- package/apps/storybook/stories/catalog/select.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/settings-01.stories.tsx +24 -0
- package/apps/storybook/stories/catalog/settings-02.stories.tsx +24 -0
- package/apps/storybook/stories/catalog/settings-page.stories.tsx +48 -0
- package/apps/storybook/stories/catalog/sidebar-navigation.stories.tsx +40 -0
- package/apps/storybook/stories/catalog/sign-in-form.stories.tsx +28 -0
- package/apps/storybook/stories/catalog/sign-up-page.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/skeleton.stories.tsx +21 -0
- package/apps/storybook/stories/catalog/slider.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/social-button.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/social-proof.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/spinner.stories.tsx +15 -0
- package/apps/storybook/stories/catalog/store-button.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/tabs.stories.tsx +38 -0
- package/apps/storybook/stories/catalog/tags.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/team-page.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/team-section.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/testimonial-section.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/textarea.stories.tsx +22 -0
- package/apps/storybook/stories/catalog/toggle.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/tool-call.stories.tsx +40 -0
- package/apps/storybook/stories/catalog/tooltip.stories.tsx +30 -0
- package/apps/storybook/stories/catalog/tree-view.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/utility-button.stories.tsx +60 -0
- package/apps/storybook/stories/catalog/verification-code.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/verification-page.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/video-player.stories.tsx +18 -0
- package/apps/storybook/stories/catalog/workflow-canvas.stories.tsx +45 -0
- package/apps/storybook/stories/catalog/workflow-node.stories.tsx +24 -0
- package/apps/storybook/vitest.config.ts +39 -0
- package/apps/web/README.md +13 -0
- package/apps/web/app.js +483 -0
- package/apps/web/favicon.svg +6 -0
- package/apps/web/index.html +205 -0
- package/apps/web/styles.css +1823 -0
- package/artifacts/original-delivery/NOE-Design-System-Delivery/README-FIRST.txt +20 -0
- package/artifacts/original-delivery/NOE-Design-System-Delivery/SHA256SUMS.txt +11 -0
- package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-delivery-metadata.json +25 -0
- package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-design-system-evidence.zip +0 -0
- package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-design-system-execution-report.md +60 -0
- package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-design-system-manifest.json +106 -0
- package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-design-system-source.tar.gz +0 -0
- package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-design-system-source.zip +0 -0
- package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-design-system.bundle +0 -0
- package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-evidence-index.html +38 -0
- package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-verification-status.txt +15 -0
- package/artifacts/original-delivery/NOE-Design-System-Delivery/noe-visual-contact-sheet.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/README.txt +13 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/browser-console.json +4 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/layout-audit.json +4 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/review/contact-sheet.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-dark-1024.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-dark-1280.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-dark-1440.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-dark-390.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-dark-768.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-light-1024.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-light-1280.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-light-1440.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-light-390.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-en-light-768.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-dark-1024.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-dark-1280.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-dark-1440.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-dark-390.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-dark-768.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-light-1024.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-light-1280.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-light-1440.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-light-390.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-fa-light-768.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-pseudo-ltr-1024.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/agent-pseudo-rtl-1024.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/consumer-en-light-1440.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/consumer-fa-dark-1440.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/dashboard-en-light-1440.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/dashboard-fa-dark-1440.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/workflow-en-light-1440.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots/workflow-fa-dark-1440.png +0 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/screenshots-manifest.json +203 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/verification-result.json +165 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/verification-result.txt +32 -0
- package/artifacts/original-delivery/noe-design-system-evidence/evidence/visual-index.html +1 -0
- package/artifacts/original-delivery/noe-design-system-evidence/noe-delivery-metadata.json +25 -0
- package/artifacts/original-delivery/noe-design-system-evidence/noe-design-system-execution-report.md +60 -0
- package/artifacts/original-delivery/noe-design-system-evidence/noe-design-system-manifest.json +106 -0
- package/artifacts/original-delivery/noe-design-system-evidence/noe-verification-status.txt +15 -0
- package/artifacts/original-delivery/noe-design-system.bundle +0 -0
- package/artifacts/original-delivery/source-evidence/verification-result.json +165 -0
- package/artifacts/original-delivery/source-evidence/verification-result.txt +32 -0
- package/artifacts/registry-consumer-report.json +153 -0
- package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-Black.woff +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-Bold.woff +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-DemiBold.woff +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-ExtraBlack.woff +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-ExtraBold.woff +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-Heavy.woff +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-Light.woff +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-Medium.woff +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-Regular.woff +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-Thin.woff +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff/IRANYekanXFaNum-UltraLight.woff +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-Black.woff2 +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-Bold.woff2 +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-DemiBold.woff2 +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-ExtraBlack.woff2 +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-ExtraBold.woff2 +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-Heavy.woff2 +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-Light.woff2 +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-Medium.woff2 +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-Regular.woff2 +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-Thin.woff2 +0 -0
- package/artifacts/source-inputs/persian-fonts/Woff2/IRANYekanXFaNum-UltraLight.woff2 +0 -0
- package/biome.json +170 -0
- package/components.json +23 -0
- package/docs/adr/0001-semantic-foundation.md +5 -0
- package/docs/adr/0002-locale-direction.md +5 -0
- package/docs/adr/0003-registry-mcp.md +5 -0
- package/docs/adr/0004-testing-evidence.md +5 -0
- package/docs/adr/0005-noe-package-namespace.md +9 -0
- package/docs/adr/0006-icons8-icon-policy.md +9 -0
- package/docs/adr/0007-registry-publication-contract.md +9 -0
- package/docs/adr/0008-capability-library-adapter-boundaries.md +16 -0
- package/docs/adr/0009-calendar-system-jalali.md +29 -0
- package/docs/adr/0010-canonical-manifest-ownership.md +29 -0
- package/docs/adr/0011-palette-graphite-governance.md +27 -0
- package/docs/adr/0012-persian-font-gating.md +25 -0
- package/docs/adr/0013-cinematic-token-exception.md +32 -0
- package/docs/design-system/README.md +16 -0
- package/docs/design-system/accessibility.md +20 -0
- package/docs/design-system/agent-guide.md +11 -0
- package/docs/design-system/agentic-ui.md +21 -0
- package/docs/design-system/architecture.md +40 -0
- package/docs/design-system/brand.md +59 -0
- package/docs/design-system/ci-cd.md +46 -0
- package/docs/design-system/components.md +88 -0
- package/docs/design-system/contributing.md +7 -0
- package/docs/design-system/foundations.md +40 -0
- package/docs/design-system/i18n.md +24 -0
- package/docs/design-system/inventory.md +389 -0
- package/docs/design-system/mcp.md +7 -0
- package/docs/design-system/motion.md +7 -0
- package/docs/design-system/noe-brand-audit.md +33 -0
- package/docs/design-system/registry.md +16 -0
- package/docs/design-system/rtl.md +27 -0
- package/docs/design-system/security.md +16 -0
- package/docs/design-system/testing.md +39 -0
- package/docs/design-system/tokens.md +38 -0
- package/docs/design-system/visual-qa.md +10 -0
- package/docs/superpowers/plans/2026-08-25-noe-design-system-development-ready.md +833 -0
- package/docs/superpowers/plans/2026-08-26-noe-complete-catalog.md +422 -0
- package/docs/superpowers/specs/2026-08-25-noe-design-system-development-ready-design.md +260 -0
- package/docs/superpowers/specs/2026-08-26-noe-complete-catalog-design.md +187 -0
- package/llms.txt +20 -0
- package/package.json +68 -0
- package/packages/ai-ui/package.json +15 -0
- package/packages/ai-ui/src/activity-feed.tsx +60 -0
- package/packages/ai-ui/src/agent-composer.tsx +54 -0
- package/packages/ai-ui/src/agent-message.tsx +50 -0
- package/packages/ai-ui/src/agent-plan.tsx +69 -0
- package/packages/ai-ui/src/agent-workspace.tsx +63 -0
- package/packages/ai-ui/src/approval-request.tsx +93 -0
- package/packages/ai-ui/src/index.ts +8 -0
- package/packages/ai-ui/src/run-inspector.tsx +54 -0
- package/packages/ai-ui/src/tool-call.tsx +71 -0
- package/packages/data-ui/package.json +16 -0
- package/packages/data-ui/src/activity-gauge.tsx +38 -0
- package/packages/data-ui/src/chart-frame.tsx +41 -0
- package/packages/data-ui/src/chart.tsx +131 -0
- package/packages/data-ui/src/dashboard-01.tsx +39 -0
- package/packages/data-ui/src/dashboard-02.tsx +33 -0
- package/packages/data-ui/src/dashboard-shell.tsx +56 -0
- package/packages/data-ui/src/data-table.tsx +99 -0
- package/packages/data-ui/src/filter-bar.tsx +28 -0
- package/packages/data-ui/src/index.ts +12 -0
- package/packages/data-ui/src/metric-card.tsx +43 -0
- package/packages/data-ui/src/pagination.tsx +67 -0
- package/packages/data-ui/src/pie-chart.tsx +38 -0
- package/packages/data-ui/src/radar-chart.tsx +38 -0
- package/packages/design-tokens/package.json +23 -0
- package/packages/design-tokens/src/base.css +255 -0
- package/packages/design-tokens/src/fonts/IRANYekanXFaNum-Bold.woff2 +0 -0
- package/packages/design-tokens/src/fonts/IRANYekanXFaNum-DemiBold.woff2 +0 -0
- package/packages/design-tokens/src/fonts/IRANYekanXFaNum-Medium.woff2 +0 -0
- package/packages/design-tokens/src/fonts/IRANYekanXFaNum-Regular.woff2 +0 -0
- package/packages/design-tokens/src/fonts/IRANYekanXVF.ttf +0 -0
- package/packages/design-tokens/src/fonts/README.md +13 -0
- package/packages/design-tokens/src/fonts.css +49 -0
- package/packages/design-tokens/src/index.test.ts +36 -0
- package/packages/design-tokens/src/index.ts +5 -0
- package/packages/design-tokens/src/palette.ts +27 -0
- package/packages/design-tokens/src/tailwind.css +3 -0
- package/packages/design-tokens/src/theme.css +67 -0
- package/packages/design-tokens/src/tokens.css +251 -0
- package/packages/design-tokens/src/tokens.json +275 -0
- package/packages/design-tokens/src/tokens.mjs +276 -0
- package/packages/i18n/package.json +13 -0
- package/packages/i18n/src/index.ts +17 -0
- package/packages/i18n/src/messages/en.json +116 -0
- package/packages/i18n/src/messages/fa.json +116 -0
- package/packages/i18n/src/runtime.d.mts +42 -0
- package/packages/i18n/src/runtime.mjs +113 -0
- package/packages/i18n/src/translate.test.ts +50 -0
- package/packages/i18n/src/translate.ts +29 -0
- package/packages/icons/package.json +12 -0
- package/packages/icons/src/adapters.tsx +167 -0
- package/packages/icons/src/index.tsx +103 -0
- package/packages/registry/README.md +7 -0
- package/packages/registry/catalog-index.json +1345 -0
- package/packages/registry/component-audit.json +1038 -0
- package/packages/registry/coss-adoption.json +281 -0
- package/packages/registry/docs-index.json +1881 -0
- package/packages/registry/manifest.json +11081 -0
- package/packages/registry/manifest.schema.json +135 -0
- package/packages/registry/package.json +10 -0
- package/packages/registry/r/activity-feed.json +67 -0
- package/packages/registry/r/agent-composer.json +79 -0
- package/packages/registry/r/agent-message.json +72 -0
- package/packages/registry/r/agent-plan.json +67 -0
- package/packages/registry/r/agent-workspace.json +67 -0
- package/packages/registry/r/alert.json +68 -0
- package/packages/registry/r/app-frame.json +67 -0
- package/packages/registry/r/approval-request.json +84 -0
- package/packages/registry/r/badge.json +68 -0
- package/packages/registry/r/bidi-text.json +70 -0
- package/packages/registry/r/bottom-navigation.json +67 -0
- package/packages/registry/r/button.json +83 -0
- package/packages/registry/r/calendar.json +97 -0
- package/packages/registry/r/card.json +67 -0
- package/packages/registry/r/chart-frame.json +67 -0
- package/packages/registry/r/chart.json +67 -0
- package/packages/registry/r/code-block.json +67 -0
- package/packages/registry/r/context-menu.json +81 -0
- package/packages/registry/r/dashboard-01.json +86 -0
- package/packages/registry/r/dashboard-02.json +84 -0
- package/packages/registry/r/dashboard-shell.json +67 -0
- package/packages/registry/r/data-list.json +67 -0
- package/packages/registry/r/data-table.json +72 -0
- package/packages/registry/r/date-picker.json +117 -0
- package/packages/registry/r/dialog.json +84 -0
- package/packages/registry/r/direction-provider.json +54 -0
- package/packages/registry/r/drawer.json +80 -0
- package/packages/registry/r/dropdown.json +78 -0
- package/packages/registry/r/empty-state.json +67 -0
- package/packages/registry/r/error-state.json +67 -0
- package/packages/registry/r/fab.json +80 -0
- package/packages/registry/r/featured-icon.json +71 -0
- package/packages/registry/r/filter-bar.json +69 -0
- package/packages/registry/r/gradient-picker.json +62 -0
- package/packages/registry/r/header-navigation.json +67 -0
- package/packages/registry/r/hero-header.json +63 -0
- package/packages/registry/r/icon-system.json +59 -0
- package/packages/registry/r/image-picker.json +62 -0
- package/packages/registry/r/inline-cta.json +73 -0
- package/packages/registry/r/input.json +73 -0
- package/packages/registry/r/landing-page.json +70 -0
- package/packages/registry/r/login-page.json +71 -0
- package/packages/registry/r/marketing-header.json +63 -0
- package/packages/registry/r/menu.json +74 -0
- package/packages/registry/r/messaging.json +69 -0
- package/packages/registry/r/metric-card.json +67 -0
- package/packages/registry/r/mobile-screen.json +67 -0
- package/packages/registry/r/not-found.json +63 -0
- package/packages/registry/r/page-header.json +67 -0
- package/packages/registry/r/pagination.json +91 -0
- package/packages/registry/r/progress-steps.json +69 -0
- package/packages/registry/r/run-inspector.json +72 -0
- package/packages/registry/r/section-header.json +67 -0
- package/packages/registry/r/settings-01.json +94 -0
- package/packages/registry/r/settings-02.json +99 -0
- package/packages/registry/r/settings-page.json +67 -0
- package/packages/registry/r/sidebar-navigation.json +67 -0
- package/packages/registry/r/sign-in-form.json +89 -0
- package/packages/registry/r/skeleton.json +67 -0
- package/packages/registry/r/spinner.json +67 -0
- package/packages/registry/r/tabs.json +69 -0
- package/packages/registry/r/textarea.json +73 -0
- package/packages/registry/r/tool-call.json +72 -0
- package/packages/registry/r/tooltip.json +73 -0
- package/packages/registry/r/utility-button.json +83 -0
- package/packages/registry/r/workflow-canvas.json +67 -0
- package/packages/registry/r/workflow-node.json +72 -0
- package/packages/registry/r-planned-backup/about-page.json +14 -0
- package/packages/registry/r-planned-backup/activity-gauge.json +14 -0
- package/packages/registry/r-planned-backup/avatar.json +14 -0
- package/packages/registry/r-planned-backup/badge-group.json +14 -0
- package/packages/registry/r-planned-backup/banner.json +14 -0
- package/packages/registry/r-planned-backup/blog-index-page.json +14 -0
- package/packages/registry/r-planned-backup/blog-post-page.json +14 -0
- package/packages/registry/r-planned-backup/blog-section.json +14 -0
- package/packages/registry/r-planned-backup/button-group.json +14 -0
- package/packages/registry/r-planned-backup/careers-section.json +14 -0
- package/packages/registry/r-planned-backup/carousel.json +14 -0
- package/packages/registry/r-planned-backup/checkbox.json +14 -0
- package/packages/registry/r-planned-backup/color-picker.json +14 -0
- package/packages/registry/r-planned-backup/command-menu.json +14 -0
- package/packages/registry/r-planned-backup/contact-page.json +14 -0
- package/packages/registry/r-planned-backup/contact-section.json +14 -0
- package/packages/registry/r-planned-backup/content-divider.json +14 -0
- package/packages/registry/r-planned-backup/content-section.json +14 -0
- package/packages/registry/r-planned-backup/credit-card.json +14 -0
- package/packages/registry/r-planned-backup/cta-section.json +14 -0
- package/packages/registry/r-planned-backup/email-template.json +14 -0
- package/packages/registry/r-planned-backup/faq-page.json +14 -0
- package/packages/registry/r-planned-backup/faq-section.json +14 -0
- package/packages/registry/r-planned-backup/feature-section.json +14 -0
- package/packages/registry/r-planned-backup/file-uploader.json +14 -0
- package/packages/registry/r-planned-backup/footer.json +14 -0
- package/packages/registry/r-planned-backup/forgot-password-page.json +14 -0
- package/packages/registry/r-planned-backup/illustration.json +14 -0
- package/packages/registry/r-planned-backup/informational-page-01.json +14 -0
- package/packages/registry/r-planned-backup/informational-page-02.json +14 -0
- package/packages/registry/r-planned-backup/legal-page.json +14 -0
- package/packages/registry/r-planned-backup/marketing-404-page.json +14 -0
- package/packages/registry/r-planned-backup/metrics-section.json +14 -0
- package/packages/registry/r-planned-backup/multi-select.json +14 -0
- package/packages/registry/r-planned-backup/newsletter.json +14 -0
- package/packages/registry/r-planned-backup/notification.json +14 -0
- package/packages/registry/r-planned-backup/pie-chart.json +14 -0
- package/packages/registry/r-planned-backup/pricing-page.json +14 -0
- package/packages/registry/r-planned-backup/pricing-section.json +14 -0
- package/packages/registry/r-planned-backup/progress-indicator.json +14 -0
- package/packages/registry/r-planned-backup/qr-code.json +14 -0
- package/packages/registry/r-planned-backup/radar-chart.json +14 -0
- package/packages/registry/r-planned-backup/radio-group.json +14 -0
- package/packages/registry/r-planned-backup/rating.json +14 -0
- package/packages/registry/r-planned-backup/rich-text-editor.json +14 -0
- package/packages/registry/r-planned-backup/section-footer.json +14 -0
- package/packages/registry/r-planned-backup/select.json +14 -0
- package/packages/registry/r-planned-backup/sign-up-page.json +14 -0
- package/packages/registry/r-planned-backup/slider.json +14 -0
- package/packages/registry/r-planned-backup/social-button.json +14 -0
- package/packages/registry/r-planned-backup/social-proof.json +14 -0
- package/packages/registry/r-planned-backup/store-button.json +14 -0
- package/packages/registry/r-planned-backup/tags.json +14 -0
- package/packages/registry/r-planned-backup/team-page.json +14 -0
- package/packages/registry/r-planned-backup/team-section.json +14 -0
- package/packages/registry/r-planned-backup/testimonial-section.json +14 -0
- package/packages/registry/r-planned-backup/toggle.json +14 -0
- package/packages/registry/r-planned-backup/tree-view.json +14 -0
- package/packages/registry/r-planned-backup/verification-code.json +14 -0
- package/packages/registry/r-planned-backup/verification-page.json +14 -0
- package/packages/registry/r-planned-backup/video-player.json +14 -0
- package/packages/registry/registry.json +1997 -0
- package/packages/registry/search-index.json +3942 -0
- package/packages/testing/package.json +9 -0
- package/packages/testing/src/index.mjs +10 -0
- package/packages/ui/package.json +26 -0
- package/packages/ui/src/about-page.tsx +19 -0
- package/packages/ui/src/alert.tsx +67 -0
- package/packages/ui/src/app-frame.tsx +63 -0
- package/packages/ui/src/avatar.tsx +19 -0
- package/packages/ui/src/badge-group.tsx +19 -0
- package/packages/ui/src/badge.tsx +35 -0
- package/packages/ui/src/banner.tsx +19 -0
- package/packages/ui/src/bidi.tsx +80 -0
- package/packages/ui/src/blog-index-page.tsx +19 -0
- package/packages/ui/src/blog-post-page.tsx +19 -0
- package/packages/ui/src/blog-section.tsx +19 -0
- package/packages/ui/src/bottom-navigation.tsx +60 -0
- package/packages/ui/src/button-group.tsx +19 -0
- package/packages/ui/src/button.browser.test.tsx +38 -0
- package/packages/ui/src/button.tsx +81 -0
- package/packages/ui/src/calendar-system.test.ts +103 -0
- package/packages/ui/src/calendar-system.ts +120 -0
- package/packages/ui/src/calendar.browser.test.tsx +52 -0
- package/packages/ui/src/calendar.tsx +339 -0
- package/packages/ui/src/card.tsx +63 -0
- package/packages/ui/src/careers-section.tsx +19 -0
- package/packages/ui/src/carousel.tsx +19 -0
- package/packages/ui/src/checkbox.tsx +17 -0
- package/packages/ui/src/cinematic/cinematic.css +2020 -0
- package/packages/ui/src/cinematic/ecosystem-motion-showcase.tsx +265 -0
- package/packages/ui/src/cinematic/ecosystem-sphere.tsx +627 -0
- package/packages/ui/src/cinematic/index.ts +5 -0
- package/packages/ui/src/cinematic/kinetic-experience.tsx +207 -0
- package/packages/ui/src/cinematic/portfolio.ts +132 -0
- package/packages/ui/src/cinematic/system-anatomy.tsx +173 -0
- package/packages/ui/src/code.tsx +119 -0
- package/packages/ui/src/color-picker.tsx +22 -0
- package/packages/ui/src/command-menu.tsx +19 -0
- package/packages/ui/src/contact-page.tsx +19 -0
- package/packages/ui/src/contact-section.tsx +19 -0
- package/packages/ui/src/content-divider.tsx +19 -0
- package/packages/ui/src/content-section.tsx +19 -0
- package/packages/ui/src/context-menu.tsx +208 -0
- package/packages/ui/src/credit-card.tsx +19 -0
- package/packages/ui/src/cta-section.tsx +19 -0
- package/packages/ui/src/data-list.tsx +81 -0
- package/packages/ui/src/date-picker.browser.test.tsx +48 -0
- package/packages/ui/src/date-picker.tsx +248 -0
- package/packages/ui/src/dialog.browser.test.tsx +32 -0
- package/packages/ui/src/dialog.tsx +144 -0
- package/packages/ui/src/direction.tsx +46 -0
- package/packages/ui/src/drawer.tsx +179 -0
- package/packages/ui/src/dropdown.tsx +200 -0
- package/packages/ui/src/email-template.tsx +19 -0
- package/packages/ui/src/empty-state.tsx +43 -0
- package/packages/ui/src/error-state.tsx +44 -0
- package/packages/ui/src/fab.tsx +32 -0
- package/packages/ui/src/faq-page.tsx +19 -0
- package/packages/ui/src/faq-section.tsx +19 -0
- package/packages/ui/src/feature-section.tsx +19 -0
- package/packages/ui/src/featured-icon.tsx +63 -0
- package/packages/ui/src/field.browser.test.tsx +33 -0
- package/packages/ui/src/field.tsx +117 -0
- package/packages/ui/src/file-uploader.tsx +19 -0
- package/packages/ui/src/footer.tsx +19 -0
- package/packages/ui/src/forgot-password-page.tsx +19 -0
- package/packages/ui/src/gradient-picker.tsx +65 -0
- package/packages/ui/src/header-navigation.tsx +71 -0
- package/packages/ui/src/hero-header.tsx +57 -0
- package/packages/ui/src/illustration.tsx +19 -0
- package/packages/ui/src/image-picker.tsx +56 -0
- package/packages/ui/src/index.ts +110 -0
- package/packages/ui/src/informational-page-01.tsx +19 -0
- package/packages/ui/src/informational-page-02.tsx +19 -0
- package/packages/ui/src/inline-cta.tsx +29 -0
- package/packages/ui/src/input.tsx +44 -0
- package/packages/ui/src/landing-page.tsx +56 -0
- package/packages/ui/src/legal-page.tsx +19 -0
- package/packages/ui/src/lib/cn.ts +6 -0
- package/packages/ui/src/lib/i18n-messages.ts +40 -0
- package/packages/ui/src/login-page.tsx +78 -0
- package/packages/ui/src/marketing-404-page.tsx +19 -0
- package/packages/ui/src/marketing-header.tsx +53 -0
- package/packages/ui/src/menu.tsx +220 -0
- package/packages/ui/src/messaging.tsx +62 -0
- package/packages/ui/src/metrics-section.tsx +19 -0
- package/packages/ui/src/mobile-screen.tsx +37 -0
- package/packages/ui/src/multi-select.tsx +16 -0
- package/packages/ui/src/newsletter.tsx +19 -0
- package/packages/ui/src/not-found.tsx +60 -0
- package/packages/ui/src/notification.tsx +19 -0
- package/packages/ui/src/page-header.tsx +80 -0
- package/packages/ui/src/pricing-page.tsx +19 -0
- package/packages/ui/src/pricing-section.tsx +19 -0
- package/packages/ui/src/progress-indicator.tsx +19 -0
- package/packages/ui/src/progress-steps.tsx +85 -0
- package/packages/ui/src/qr-code.tsx +19 -0
- package/packages/ui/src/radio-group.tsx +26 -0
- package/packages/ui/src/rating.tsx +19 -0
- package/packages/ui/src/rich-text-editor.tsx +18 -0
- package/packages/ui/src/section-footer.tsx +19 -0
- package/packages/ui/src/section-header.tsx +37 -0
- package/packages/ui/src/select.tsx +27 -0
- package/packages/ui/src/settings-01.tsx +49 -0
- package/packages/ui/src/settings-02.tsx +58 -0
- package/packages/ui/src/settings-page.tsx +62 -0
- package/packages/ui/src/sidebar-navigation.tsx +77 -0
- package/packages/ui/src/sign-in-form.tsx +60 -0
- package/packages/ui/src/sign-up-page.tsx +19 -0
- package/packages/ui/src/skeleton.tsx +14 -0
- package/packages/ui/src/slider.tsx +13 -0
- package/packages/ui/src/social-button.tsx +19 -0
- package/packages/ui/src/social-proof.tsx +19 -0
- package/packages/ui/src/spinner.tsx +26 -0
- package/packages/ui/src/store-button.tsx +19 -0
- package/packages/ui/src/tabs.browser.test.tsx +33 -0
- package/packages/ui/src/tabs.tsx +175 -0
- package/packages/ui/src/tags.tsx +11 -0
- package/packages/ui/src/team-page.tsx +19 -0
- package/packages/ui/src/team-section.tsx +19 -0
- package/packages/ui/src/testimonial-section.tsx +19 -0
- package/packages/ui/src/textarea.tsx +45 -0
- package/packages/ui/src/theme-provider.browser.test.tsx +90 -0
- package/packages/ui/src/theme-provider.tsx +417 -0
- package/packages/ui/src/theme-toggle.tsx +107 -0
- package/packages/ui/src/toggle.tsx +34 -0
- package/packages/ui/src/tooltip.tsx +50 -0
- package/packages/ui/src/tree-view.tsx +19 -0
- package/packages/ui/src/utility-button.tsx +33 -0
- package/packages/ui/src/utils.ts +13 -0
- package/packages/ui/src/verification-code.tsx +27 -0
- package/packages/ui/src/verification-page.tsx +19 -0
- package/packages/ui/src/video-player.tsx +19 -0
- package/packages/workflow-ui/package.json +15 -0
- package/packages/workflow-ui/src/index.ts +2 -0
- package/packages/workflow-ui/src/workflow-canvas.tsx +51 -0
- package/packages/workflow-ui/src/workflow-node.tsx +61 -0
- package/playwright.config.ts +58 -0
- package/pnpm-workspace.yaml +5 -0
- package/registry.json +216 -0
- package/scripts/build-static.mjs +68 -0
- package/scripts/capture-visuals.py +106 -0
- package/scripts/capture-visuals.sh +10 -0
- package/scripts/create-visual-index.mjs +16 -0
- package/scripts/enrich-registry-payloads.mjs +83 -0
- package/scripts/fix-noe-imports.mjs +134 -0
- package/scripts/fix-registry-closure.mjs +110 -0
- package/scripts/fix-registry-deps-cleanup.mjs +149 -0
- package/scripts/fix-relative-for-registry.mjs +103 -0
- package/scripts/generate-design-tokens.mjs +134 -0
- package/scripts/generate-inventory.mjs +62 -0
- package/scripts/generate-manifest.mjs +1149 -0
- package/scripts/generate-phase4.mjs +875 -0
- package/scripts/validate-manifest.mjs +477 -0
- package/scripts/validate-pngs.mjs +31 -0
- package/scripts/verify-registry-consumer.mjs +319 -0
- package/scripts/verify-registry-dependencies.mjs +162 -0
- package/scripts/verify.mjs +316 -0
- package/tests/catalog-audit.test.mjs +156 -0
- package/tests/e2e/capture-visuals.mjs +34 -0
- package/tests/e2e/catalog-typography.spec.ts +110 -0
- package/tests/e2e/catalog.spec.ts +68 -0
- package/tests/e2e/direction.spec.ts +60 -0
- package/tests/e2e/responsive.spec.ts +30 -0
- package/tests/e2e/surfaces.spec.ts +51 -0
- package/tests/i18n.test.mjs +36 -0
- package/tests/icons.test.mjs +21 -0
- package/tests/registry-publication.test.mjs +88 -0
- package/tests/registry.test.mjs +51 -0
- package/tests/rtl.test.mjs +21 -0
- package/tests/static-app.test.mjs +49 -0
- package/tests/tokens.test.mjs +24 -0
- package/tests/workspace.test.mjs +25 -0
- package/tsconfig.base.json +69 -0
- package/tsconfig.json +27 -0
- package/tsconfig.verify.json +19 -0
- package/types/offline-react.d.ts +73 -0
- package/vitest.config.ts +91 -0
|
@@ -0,0 +1,2676 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ActivityFeed,
|
|
3
|
+
AgentMessage,
|
|
4
|
+
AgentPlan,
|
|
5
|
+
AgentWorkspace,
|
|
6
|
+
ApprovalRequest,
|
|
7
|
+
type PlanStep,
|
|
8
|
+
RunInspector,
|
|
9
|
+
ToolCall,
|
|
10
|
+
} from '@noe/ai-ui';
|
|
11
|
+
import {
|
|
12
|
+
ActivityGauge,
|
|
13
|
+
Chart,
|
|
14
|
+
ChartFrame,
|
|
15
|
+
Dashboard01,
|
|
16
|
+
Dashboard02,
|
|
17
|
+
DashboardShell,
|
|
18
|
+
type DataColumn,
|
|
19
|
+
DataTable,
|
|
20
|
+
FilterBar,
|
|
21
|
+
MetricCard,
|
|
22
|
+
Pagination,
|
|
23
|
+
PieChart,
|
|
24
|
+
RadarChart,
|
|
25
|
+
} from '@noe/data-ui';
|
|
26
|
+
import { ChevronIcon, icons8Source, NoeMark } from '@noe/icons';
|
|
27
|
+
import {
|
|
28
|
+
AboutPage,
|
|
29
|
+
Alert,
|
|
30
|
+
AlertAction,
|
|
31
|
+
AlertDescription,
|
|
32
|
+
AlertTitle,
|
|
33
|
+
AppFrame,
|
|
34
|
+
AutoDirectionText,
|
|
35
|
+
Avatar,
|
|
36
|
+
Badge,
|
|
37
|
+
BadgeGroup,
|
|
38
|
+
Banner,
|
|
39
|
+
BidiText,
|
|
40
|
+
BlogIndexPage,
|
|
41
|
+
BlogPostPage,
|
|
42
|
+
BlogSection,
|
|
43
|
+
BottomNavigation,
|
|
44
|
+
Breadcrumb,
|
|
45
|
+
Button,
|
|
46
|
+
ButtonGroup,
|
|
47
|
+
Calendar,
|
|
48
|
+
Card,
|
|
49
|
+
CardDescription,
|
|
50
|
+
CardFooter,
|
|
51
|
+
CardHeader,
|
|
52
|
+
CardTitle,
|
|
53
|
+
CareersSection,
|
|
54
|
+
Carousel,
|
|
55
|
+
Checkbox,
|
|
56
|
+
ColorPicker,
|
|
57
|
+
CommandMenu,
|
|
58
|
+
ContactPage,
|
|
59
|
+
ContactSection,
|
|
60
|
+
ContentDivider,
|
|
61
|
+
ContentSection,
|
|
62
|
+
ContextMenu,
|
|
63
|
+
ContextMenuContent,
|
|
64
|
+
ContextMenuItem,
|
|
65
|
+
ContextMenuSeparator,
|
|
66
|
+
ContextMenuTrigger,
|
|
67
|
+
CreditCard,
|
|
68
|
+
CtaSection,
|
|
69
|
+
DataList,
|
|
70
|
+
DatePicker,
|
|
71
|
+
Dialog,
|
|
72
|
+
DialogClose,
|
|
73
|
+
DialogContent,
|
|
74
|
+
DialogDescription,
|
|
75
|
+
DialogFooter,
|
|
76
|
+
DialogHeader,
|
|
77
|
+
DialogPanel,
|
|
78
|
+
DialogTitle,
|
|
79
|
+
DialogTrigger,
|
|
80
|
+
DirectionProvider,
|
|
81
|
+
Drawer,
|
|
82
|
+
DrawerClose,
|
|
83
|
+
DrawerContent,
|
|
84
|
+
DrawerFooter,
|
|
85
|
+
DrawerHeader,
|
|
86
|
+
DrawerPanel,
|
|
87
|
+
DrawerTitle,
|
|
88
|
+
DrawerTrigger,
|
|
89
|
+
Dropdown,
|
|
90
|
+
DropdownContent,
|
|
91
|
+
DropdownItem,
|
|
92
|
+
DropdownSeparator,
|
|
93
|
+
DropdownTrigger,
|
|
94
|
+
EcosystemMotionShowcase,
|
|
95
|
+
EcosystemSphere,
|
|
96
|
+
EmailTemplate,
|
|
97
|
+
EmptyState,
|
|
98
|
+
ErrorState,
|
|
99
|
+
Fab,
|
|
100
|
+
FaqPage,
|
|
101
|
+
FaqSection,
|
|
102
|
+
FeaturedIcon,
|
|
103
|
+
FeatureSection,
|
|
104
|
+
Field,
|
|
105
|
+
FileUploader,
|
|
106
|
+
Footer,
|
|
107
|
+
ForgotPasswordPage,
|
|
108
|
+
GradientPicker,
|
|
109
|
+
HeaderNavigation,
|
|
110
|
+
HeroHeader,
|
|
111
|
+
Illustration,
|
|
112
|
+
ImagePicker,
|
|
113
|
+
InformationalPage01,
|
|
114
|
+
InformationalPage02,
|
|
115
|
+
InlineCode,
|
|
116
|
+
InlineCta,
|
|
117
|
+
Input,
|
|
118
|
+
KineticExperience,
|
|
119
|
+
LandingPage,
|
|
120
|
+
LegalPage,
|
|
121
|
+
LocalizedDate,
|
|
122
|
+
LocalizedNumber,
|
|
123
|
+
LoginPage,
|
|
124
|
+
Marketing404Page,
|
|
125
|
+
MarketingHeader,
|
|
126
|
+
Menu,
|
|
127
|
+
MenuItem,
|
|
128
|
+
MenuPopup,
|
|
129
|
+
MenuSeparator,
|
|
130
|
+
MenuTrigger,
|
|
131
|
+
Messaging,
|
|
132
|
+
MetricsSection,
|
|
133
|
+
MobileScreen,
|
|
134
|
+
MultiSelect,
|
|
135
|
+
Newsletter,
|
|
136
|
+
NotFound,
|
|
137
|
+
Notification,
|
|
138
|
+
PageHeader,
|
|
139
|
+
PricingPage,
|
|
140
|
+
PricingSection,
|
|
141
|
+
ProgressIndicator,
|
|
142
|
+
ProgressSteps,
|
|
143
|
+
QrCode,
|
|
144
|
+
RadioGroup,
|
|
145
|
+
Rating,
|
|
146
|
+
RichTextEditor,
|
|
147
|
+
SectionFooter,
|
|
148
|
+
SectionHeader,
|
|
149
|
+
Select,
|
|
150
|
+
Settings01,
|
|
151
|
+
Settings02,
|
|
152
|
+
SettingsPage,
|
|
153
|
+
SidebarNavigation,
|
|
154
|
+
SignInForm,
|
|
155
|
+
SignUpPage,
|
|
156
|
+
Skeleton,
|
|
157
|
+
Slider,
|
|
158
|
+
SocialButton,
|
|
159
|
+
SocialProof,
|
|
160
|
+
Spinner,
|
|
161
|
+
StoreButton,
|
|
162
|
+
SystemAnatomy,
|
|
163
|
+
Tabs,
|
|
164
|
+
TabsList,
|
|
165
|
+
TabsPanel,
|
|
166
|
+
TabsTab,
|
|
167
|
+
Tags,
|
|
168
|
+
TeamPage,
|
|
169
|
+
TeamSection,
|
|
170
|
+
TechnicalValue,
|
|
171
|
+
Terminal,
|
|
172
|
+
TestimonialSection,
|
|
173
|
+
Textarea,
|
|
174
|
+
Toggle,
|
|
175
|
+
Tooltip,
|
|
176
|
+
TooltipPopup,
|
|
177
|
+
TooltipProvider,
|
|
178
|
+
TooltipTrigger,
|
|
179
|
+
TreeView,
|
|
180
|
+
UtilityButton,
|
|
181
|
+
VerificationCode,
|
|
182
|
+
VerificationPage,
|
|
183
|
+
VideoPlayer,
|
|
184
|
+
} from '@noe/ui';
|
|
185
|
+
import { WorkflowCanvas, WorkflowNode } from '@noe/workflow-ui';
|
|
186
|
+
import type * as React from 'react';
|
|
187
|
+
|
|
188
|
+
import componentAudit from '../../../../packages/registry/component-audit.json' with {
|
|
189
|
+
type: 'json',
|
|
190
|
+
};
|
|
191
|
+
import { AgentComposerPreview } from './agent-composer-preview';
|
|
192
|
+
|
|
193
|
+
export type CatalogStatus = 'available' | 'in-progress' | 'planned' | 'partial' | 'experimental';
|
|
194
|
+
|
|
195
|
+
import type { Direction, LocaleCode } from '@noe/i18n';
|
|
196
|
+
|
|
197
|
+
export type CatalogPreviewContext = {
|
|
198
|
+
locale: LocaleCode;
|
|
199
|
+
direction: Direction;
|
|
200
|
+
t: (key: string) => string;
|
|
201
|
+
status: CatalogStatus;
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
export type CatalogEntry = {
|
|
205
|
+
id: string;
|
|
206
|
+
category: string;
|
|
207
|
+
status: CatalogStatus;
|
|
208
|
+
name: string;
|
|
209
|
+
description: string;
|
|
210
|
+
package: string;
|
|
211
|
+
registryItem: string | null;
|
|
212
|
+
preview: (ctx: CatalogPreviewContext) => React.ReactNode;
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
const auditById = new Map(componentAudit.items.map((item) => [item.id, item]));
|
|
216
|
+
|
|
217
|
+
function statusOf(id: string): CatalogStatus {
|
|
218
|
+
return (auditById.get(id)?.status as CatalogStatus) ?? 'planned';
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
const planSteps: PlanStep[] = [
|
|
222
|
+
{ id: '1', label: 'Read failing test output', state: 'completed' },
|
|
223
|
+
{ id: '2', label: 'Patch dialog.tsx portal direction', state: 'running' },
|
|
224
|
+
{ id: '3', label: 'Re-run browser tests', state: 'queued' },
|
|
225
|
+
];
|
|
226
|
+
|
|
227
|
+
const tableColumns: DataColumn<{
|
|
228
|
+
id: string;
|
|
229
|
+
service: string;
|
|
230
|
+
owner: string;
|
|
231
|
+
status: string;
|
|
232
|
+
updated: string;
|
|
233
|
+
}>[] = [
|
|
234
|
+
{ key: 'service', header: 'Service' },
|
|
235
|
+
{ key: 'owner', header: 'Owner' },
|
|
236
|
+
{ key: 'status', header: 'Status' },
|
|
237
|
+
{ key: 'updated', header: 'Updated', technical: true, align: 'end' },
|
|
238
|
+
];
|
|
239
|
+
|
|
240
|
+
const tableRows = [
|
|
241
|
+
{ id: '1', service: 'catalog-api', owner: 'Platform', status: 'Healthy', updated: '2m ago' },
|
|
242
|
+
{
|
|
243
|
+
id: '2',
|
|
244
|
+
service: 'agent-runner',
|
|
245
|
+
owner: 'AI Platform',
|
|
246
|
+
status: 'Degraded',
|
|
247
|
+
updated: '11m ago',
|
|
248
|
+
},
|
|
249
|
+
];
|
|
250
|
+
|
|
251
|
+
export const catalogEntries: readonly CatalogEntry[] = [
|
|
252
|
+
{
|
|
253
|
+
id: 'bidi-text',
|
|
254
|
+
category: 'Foundations / Direction & Bidi',
|
|
255
|
+
status: statusOf('bidi-text'),
|
|
256
|
+
name: 'Bidi Text',
|
|
257
|
+
description:
|
|
258
|
+
'Mixed-direction content primitives for user text, URLs, hashes, commands and technical identifiers.',
|
|
259
|
+
package: '@noe/ui',
|
|
260
|
+
registryItem: 'bidi-text',
|
|
261
|
+
preview: ({ t }) => (
|
|
262
|
+
<div style={{ display: 'grid', gap: '0.5rem', fontSize: '0.875rem' }}>
|
|
263
|
+
<AutoDirectionText>{t('catalog.preview.bidi.autoText')}</AutoDirectionText>
|
|
264
|
+
<BidiText>
|
|
265
|
+
PR #482 {t('catalog.preview.bidi.related')}
|
|
266
|
+
</BidiText>
|
|
267
|
+
<TechnicalValue>a1b2c3d4 · mcp://fs/read</TechnicalValue>
|
|
268
|
+
<span dir="ltr" style={{ fontFamily: 'var(--font-sf-pro, var(--noe-font-family-sans))' }}>
|
|
269
|
+
<LocalizedNumber value={128942.5} locale="en" /> ·{' '}
|
|
270
|
+
<LocalizedDate value="2026-08-26" locale="en" />
|
|
271
|
+
</span>
|
|
272
|
+
</div>
|
|
273
|
+
),
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
id: 'direction-provider',
|
|
277
|
+
category: 'Foundations / Direction & Bidi',
|
|
278
|
+
status: statusOf('direction-provider'),
|
|
279
|
+
name: 'Direction Provider',
|
|
280
|
+
description:
|
|
281
|
+
'Establishes a direction scope for nested content and portalled overlays, independent of page direction.',
|
|
282
|
+
package: '@noe/ui',
|
|
283
|
+
registryItem: null,
|
|
284
|
+
preview: ({ t }) => (
|
|
285
|
+
<DirectionProvider direction="rtl">
|
|
286
|
+
<div className="rounded-md bg-surface-sunken/60 p-3 text-sm" lang="fa">
|
|
287
|
+
{t('catalog.preview.direction.rtlSample')}
|
|
288
|
+
</div>
|
|
289
|
+
</DirectionProvider>
|
|
290
|
+
),
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
id: 'code-and-terminal',
|
|
294
|
+
category: 'Foundations / Technical Content',
|
|
295
|
+
status: statusOf('code-and-terminal'),
|
|
296
|
+
name: 'Code and Terminal',
|
|
297
|
+
description:
|
|
298
|
+
'LTR-isolated code, command, terminal and log presentation inside RTL or LTR application chrome.',
|
|
299
|
+
package: '@noe/ui',
|
|
300
|
+
registryItem: 'code-block',
|
|
301
|
+
preview: () => (
|
|
302
|
+
<div style={{ display: 'grid', gap: '0.75rem' }}>
|
|
303
|
+
<p className="m-0 text-sm">
|
|
304
|
+
Run <InlineCode>pnpm verify</InlineCode> before opening a pull request.
|
|
305
|
+
</p>
|
|
306
|
+
<Terminal
|
|
307
|
+
label="pnpm verify output"
|
|
308
|
+
lines={[{ value: '$ pnpm verify' }, { value: 'PASS registry unique names: 16 items' }]}
|
|
309
|
+
/>
|
|
310
|
+
</div>
|
|
311
|
+
),
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
id: 'icon-system',
|
|
315
|
+
category: 'Foundations / Icons',
|
|
316
|
+
status: statusOf('icon-system'),
|
|
317
|
+
name: 'Icon System',
|
|
318
|
+
description:
|
|
319
|
+
'Icons8-sourced interface icons with an explicit directional-mirroring policy for RTL layouts.',
|
|
320
|
+
package: '@noe/icons',
|
|
321
|
+
registryItem: null,
|
|
322
|
+
preview: () => (
|
|
323
|
+
<div className="flex flex-col gap-3" dir="ltr">
|
|
324
|
+
<div className="flex items-center gap-4">
|
|
325
|
+
<div className="flex items-center gap-2">
|
|
326
|
+
<NoeMark className="size-8" />
|
|
327
|
+
<span className="font-mono text-xs text-muted-foreground">NOEcosystem</span>
|
|
328
|
+
</div>
|
|
329
|
+
<div className="flex items-center gap-3 text-xs text-muted-foreground">
|
|
330
|
+
<span className="inline-flex items-center gap-1.5">
|
|
331
|
+
<ChevronIcon direction="forward" className="size-4 text-foreground" />
|
|
332
|
+
Forward
|
|
333
|
+
</span>
|
|
334
|
+
<span className="inline-flex items-center gap-1.5">
|
|
335
|
+
<ChevronIcon direction="backward" className="size-4 text-foreground" />
|
|
336
|
+
Backward
|
|
337
|
+
</span>
|
|
338
|
+
</div>
|
|
339
|
+
</div>
|
|
340
|
+
<span className="font-mono text-[0.6875rem] text-muted-foreground">
|
|
341
|
+
{icons8Source.provider} / {icons8Source.asset}
|
|
342
|
+
</span>
|
|
343
|
+
</div>
|
|
344
|
+
),
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
id: 'button',
|
|
348
|
+
category: 'Primitives / Actions',
|
|
349
|
+
status: statusOf('button'),
|
|
350
|
+
name: 'Button',
|
|
351
|
+
description:
|
|
352
|
+
'Primary action primitive with semantic variants, focus visibility, loading state and bidirectional layout.',
|
|
353
|
+
package: '@noe/ui',
|
|
354
|
+
registryItem: 'button',
|
|
355
|
+
preview: () => (
|
|
356
|
+
<div style={{ display: 'flex', flexWrap: 'wrap', gap: '0.5rem' }}>
|
|
357
|
+
<Button variant="primary">Continue</Button>
|
|
358
|
+
<Button variant="secondary">Secondary</Button>
|
|
359
|
+
<Button variant="destructive">Delete</Button>
|
|
360
|
+
<Button loading>Loading</Button>
|
|
361
|
+
</div>
|
|
362
|
+
),
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
id: 'input',
|
|
366
|
+
category: 'Primitives / Forms',
|
|
367
|
+
status: statusOf('input'),
|
|
368
|
+
name: 'Input',
|
|
369
|
+
description:
|
|
370
|
+
'Text control with size variants and a technical-input direction policy for email/url/tel/number.',
|
|
371
|
+
package: '@noe/ui',
|
|
372
|
+
registryItem: null,
|
|
373
|
+
preview: () => (
|
|
374
|
+
<Input placeholder="Search runs, tools, artifacts…" style={{ maxWidth: '20rem' }} />
|
|
375
|
+
),
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
id: 'field',
|
|
379
|
+
category: 'Primitives / Forms',
|
|
380
|
+
status: statusOf('field'),
|
|
381
|
+
name: 'Field',
|
|
382
|
+
description:
|
|
383
|
+
'Accessible form field composition with localized labels, errors, descriptions and technical-input direction policy.',
|
|
384
|
+
package: '@noe/ui',
|
|
385
|
+
registryItem: 'input',
|
|
386
|
+
preview: () => (
|
|
387
|
+
<Field label="Workspace name" description="Shown to every collaborator.">
|
|
388
|
+
<Input placeholder="acme-production" />
|
|
389
|
+
</Field>
|
|
390
|
+
),
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
id: 'textarea',
|
|
394
|
+
category: 'Primitives / Forms',
|
|
395
|
+
status: statusOf('textarea'),
|
|
396
|
+
name: 'Textarea',
|
|
397
|
+
description:
|
|
398
|
+
'Auto-sizing multiline control that preserves automatic direction for user-authored content.',
|
|
399
|
+
package: '@noe/ui',
|
|
400
|
+
registryItem: null,
|
|
401
|
+
preview: () => <Textarea placeholder="Describe the change…" style={{ maxWidth: '20rem' }} />,
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
id: 'card',
|
|
405
|
+
category: 'Primitives / Layout',
|
|
406
|
+
status: statusOf('card'),
|
|
407
|
+
name: 'Card',
|
|
408
|
+
description: 'Shared surface-raised container with header, panel and footer regions.',
|
|
409
|
+
package: '@noe/ui',
|
|
410
|
+
registryItem: null,
|
|
411
|
+
preview: () => (
|
|
412
|
+
<Card style={{ maxWidth: '18rem' }}>
|
|
413
|
+
<CardHeader>
|
|
414
|
+
<CardTitle>Deploy pipeline</CardTitle>
|
|
415
|
+
<CardDescription>Runs before release.</CardDescription>
|
|
416
|
+
</CardHeader>
|
|
417
|
+
<CardFooter>
|
|
418
|
+
<Button size="sm" variant="primary">
|
|
419
|
+
Run again
|
|
420
|
+
</Button>
|
|
421
|
+
</CardFooter>
|
|
422
|
+
</Card>
|
|
423
|
+
),
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
id: 'alert',
|
|
427
|
+
category: 'Feedback',
|
|
428
|
+
status: statusOf('alert'),
|
|
429
|
+
name: 'Alert',
|
|
430
|
+
description: 'Status-variant banner with default/info/success/warning/error semantics.',
|
|
431
|
+
package: '@noe/ui',
|
|
432
|
+
registryItem: null,
|
|
433
|
+
preview: () => (
|
|
434
|
+
<Alert variant="info" style={{ maxWidth: '22rem' }}>
|
|
435
|
+
<AlertTitle>Deployment update</AlertTitle>
|
|
436
|
+
<AlertDescription>
|
|
437
|
+
The verification matrix completed for this pull request.
|
|
438
|
+
</AlertDescription>
|
|
439
|
+
<AlertAction>
|
|
440
|
+
<Button size="sm" variant="outline">
|
|
441
|
+
View details
|
|
442
|
+
</Button>
|
|
443
|
+
</AlertAction>
|
|
444
|
+
</Alert>
|
|
445
|
+
),
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
id: 'badge',
|
|
449
|
+
category: 'Feedback',
|
|
450
|
+
status: statusOf('badge'),
|
|
451
|
+
name: 'Badge',
|
|
452
|
+
description: 'Compact status label used for maturity states, roles and counts.',
|
|
453
|
+
package: '@noe/ui',
|
|
454
|
+
registryItem: null,
|
|
455
|
+
preview: () => (
|
|
456
|
+
<div style={{ display: 'flex', gap: '0.5rem' }}>
|
|
457
|
+
<Badge>available</Badge>
|
|
458
|
+
<Badge variant="warning">in-progress</Badge>
|
|
459
|
+
<Badge variant="destructive">blocked</Badge>
|
|
460
|
+
</div>
|
|
461
|
+
),
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
id: 'skeleton',
|
|
465
|
+
category: 'Feedback',
|
|
466
|
+
status: statusOf('skeleton'),
|
|
467
|
+
name: 'Skeleton',
|
|
468
|
+
description: 'Token-driven pulse placeholder for loading content, respecting reduced motion.',
|
|
469
|
+
package: '@noe/ui',
|
|
470
|
+
registryItem: null,
|
|
471
|
+
preview: () => (
|
|
472
|
+
<Card style={{ maxWidth: '20rem' }}>
|
|
473
|
+
<CardHeader>
|
|
474
|
+
<CardTitle>Loading profile</CardTitle>
|
|
475
|
+
<CardDescription>Fetching workspace data…</CardDescription>
|
|
476
|
+
</CardHeader>
|
|
477
|
+
<div style={{ display: 'grid', gap: '0.75rem', padding: '0 1.25rem 1.25rem' }}>
|
|
478
|
+
<Skeleton style={{ height: '0.875rem', width: '70%' }} />
|
|
479
|
+
<Skeleton style={{ height: '0.875rem', width: '100%' }} />
|
|
480
|
+
<Skeleton style={{ height: '0.875rem', width: '85%' }} />
|
|
481
|
+
</div>
|
|
482
|
+
</Card>
|
|
483
|
+
),
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
id: 'spinner',
|
|
487
|
+
category: 'Feedback',
|
|
488
|
+
status: statusOf('spinner'),
|
|
489
|
+
name: 'Spinner',
|
|
490
|
+
description: 'Indeterminate loading indicator, used standalone and inside Button.',
|
|
491
|
+
package: '@noe/ui',
|
|
492
|
+
registryItem: null,
|
|
493
|
+
preview: () => (
|
|
494
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem', alignItems: 'center' }}>
|
|
495
|
+
<Card style={{ maxWidth: '20rem', width: '100%' }}>
|
|
496
|
+
<CardHeader>
|
|
497
|
+
<CardTitle>Syncing</CardTitle>
|
|
498
|
+
<CardDescription>Please wait while we fetch the latest runs.</CardDescription>
|
|
499
|
+
</CardHeader>
|
|
500
|
+
<div style={{ display: 'flex', justifyContent: 'center', padding: '1rem' }}>
|
|
501
|
+
<Spinner aria-label="Loading" className="size-6" />
|
|
502
|
+
</div>
|
|
503
|
+
</Card>
|
|
504
|
+
<Button loading>Loading</Button>
|
|
505
|
+
</div>
|
|
506
|
+
),
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
id: 'empty-state',
|
|
510
|
+
category: 'Feedback',
|
|
511
|
+
status: statusOf('empty-state'),
|
|
512
|
+
name: 'Empty State',
|
|
513
|
+
description: 'Media/title/description/action composition for zero-data states.',
|
|
514
|
+
package: '@noe/ui',
|
|
515
|
+
registryItem: null,
|
|
516
|
+
preview: () => (
|
|
517
|
+
<EmptyState
|
|
518
|
+
style={{ maxWidth: '22rem' }}
|
|
519
|
+
title="No runs yet"
|
|
520
|
+
description="Start a run to see agent activity here."
|
|
521
|
+
action={<Button variant="primary">Start a run</Button>}
|
|
522
|
+
/>
|
|
523
|
+
),
|
|
524
|
+
},
|
|
525
|
+
{
|
|
526
|
+
id: 'error-state',
|
|
527
|
+
category: 'Feedback',
|
|
528
|
+
status: statusOf('error-state'),
|
|
529
|
+
name: 'Error State',
|
|
530
|
+
description: 'Media/title/description/action composition for recoverable error states.',
|
|
531
|
+
package: '@noe/ui',
|
|
532
|
+
registryItem: null,
|
|
533
|
+
preview: () => (
|
|
534
|
+
<ErrorState
|
|
535
|
+
style={{ maxWidth: '22rem' }}
|
|
536
|
+
title="Could not load the run"
|
|
537
|
+
description="The run may have expired."
|
|
538
|
+
action={<Button variant="outline">Retry</Button>}
|
|
539
|
+
/>
|
|
540
|
+
),
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
id: 'dialog',
|
|
544
|
+
category: 'Overlays',
|
|
545
|
+
status: statusOf('dialog'),
|
|
546
|
+
name: 'Dialog',
|
|
547
|
+
description:
|
|
548
|
+
'Direction-preserving modal primitive with native focus semantics and portal propagation.',
|
|
549
|
+
package: '@noe/ui',
|
|
550
|
+
registryItem: 'dialog',
|
|
551
|
+
preview: () => (
|
|
552
|
+
<Dialog>
|
|
553
|
+
<DialogTrigger render={<Button>Review change</Button>} />
|
|
554
|
+
<DialogContent>
|
|
555
|
+
<DialogHeader>
|
|
556
|
+
<DialogTitle>Publish executive brief</DialogTitle>
|
|
557
|
+
<DialogDescription>Shares the brief with the leadership workspace.</DialogDescription>
|
|
558
|
+
</DialogHeader>
|
|
559
|
+
<DialogPanel>
|
|
560
|
+
<p className="m-0 text-sm">Visible to 12 people immediately after publishing.</p>
|
|
561
|
+
</DialogPanel>
|
|
562
|
+
<DialogFooter>
|
|
563
|
+
<DialogClose render={<Button variant="quiet">Cancel</Button>} />
|
|
564
|
+
<Button variant="primary">Publish</Button>
|
|
565
|
+
</DialogFooter>
|
|
566
|
+
</DialogContent>
|
|
567
|
+
</Dialog>
|
|
568
|
+
),
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
id: 'drawer',
|
|
572
|
+
category: 'Overlays',
|
|
573
|
+
status: statusOf('drawer'),
|
|
574
|
+
name: 'Drawer',
|
|
575
|
+
description:
|
|
576
|
+
'Logical start/end drawer that resolves against active writing direction and keeps DOM order stable.',
|
|
577
|
+
package: '@noe/ui',
|
|
578
|
+
registryItem: 'drawer',
|
|
579
|
+
preview: () => (
|
|
580
|
+
<Drawer side="end">
|
|
581
|
+
<DrawerTrigger render={<Button>Open run inspector</Button>} />
|
|
582
|
+
<DrawerContent>
|
|
583
|
+
<DrawerHeader>
|
|
584
|
+
<DrawerTitle>Run inspector</DrawerTitle>
|
|
585
|
+
</DrawerHeader>
|
|
586
|
+
<DrawerPanel>
|
|
587
|
+
<p className="m-0 text-sm">Trace, tool calls and token usage.</p>
|
|
588
|
+
</DrawerPanel>
|
|
589
|
+
<DrawerFooter>
|
|
590
|
+
<DrawerClose render={<Button variant="quiet">Close</Button>} />
|
|
591
|
+
</DrawerFooter>
|
|
592
|
+
</DrawerContent>
|
|
593
|
+
</Drawer>
|
|
594
|
+
),
|
|
595
|
+
},
|
|
596
|
+
{
|
|
597
|
+
id: 'menu',
|
|
598
|
+
category: 'Overlays',
|
|
599
|
+
status: statusOf('menu'),
|
|
600
|
+
name: 'Menu',
|
|
601
|
+
description:
|
|
602
|
+
'Dropdown menu with popup/sub-menu portal direction and a destructive item variant.',
|
|
603
|
+
package: '@noe/ui',
|
|
604
|
+
registryItem: null,
|
|
605
|
+
preview: () => (
|
|
606
|
+
<Menu>
|
|
607
|
+
<MenuTrigger render={<Button>Actions</Button>} />
|
|
608
|
+
<MenuPopup>
|
|
609
|
+
<MenuItem>Rerun</MenuItem>
|
|
610
|
+
<MenuItem>Duplicate</MenuItem>
|
|
611
|
+
<MenuSeparator />
|
|
612
|
+
<MenuItem variant="destructive">Cancel run</MenuItem>
|
|
613
|
+
</MenuPopup>
|
|
614
|
+
</Menu>
|
|
615
|
+
),
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
id: 'tooltip',
|
|
619
|
+
category: 'Overlays',
|
|
620
|
+
status: statusOf('tooltip'),
|
|
621
|
+
name: 'Tooltip',
|
|
622
|
+
description: 'Anchored hint with explicit popup portal direction.',
|
|
623
|
+
package: '@noe/ui',
|
|
624
|
+
registryItem: null,
|
|
625
|
+
preview: () => (
|
|
626
|
+
<TooltipProvider>
|
|
627
|
+
<Tooltip>
|
|
628
|
+
<TooltipTrigger render={<Button variant="ghost">Hover for detail</Button>} />
|
|
629
|
+
<TooltipPopup>Rerun uses the same inputs as the last successful run.</TooltipPopup>
|
|
630
|
+
</Tooltip>
|
|
631
|
+
</TooltipProvider>
|
|
632
|
+
),
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
id: 'tabs',
|
|
636
|
+
category: 'Navigation',
|
|
637
|
+
status: statusOf('tabs'),
|
|
638
|
+
name: 'Tabs',
|
|
639
|
+
description:
|
|
640
|
+
'Segmented and underline tab variants with logical vertical orientation and arrow-key navigation.',
|
|
641
|
+
package: '@noe/ui',
|
|
642
|
+
registryItem: null,
|
|
643
|
+
preview: () => (
|
|
644
|
+
<Tabs defaultValue="plan" style={{ maxWidth: '20rem' }}>
|
|
645
|
+
<TabsList aria-label="Run detail">
|
|
646
|
+
<TabsTab value="plan">Plan</TabsTab>
|
|
647
|
+
<TabsTab value="tools">Tools</TabsTab>
|
|
648
|
+
</TabsList>
|
|
649
|
+
<TabsPanel value="plan">Three steps queued, one running.</TabsPanel>
|
|
650
|
+
<TabsPanel value="tools">2 tool calls, 1 awaiting approval.</TabsPanel>
|
|
651
|
+
</Tabs>
|
|
652
|
+
),
|
|
653
|
+
},
|
|
654
|
+
{
|
|
655
|
+
id: 'data-table',
|
|
656
|
+
category: 'Data',
|
|
657
|
+
status: statusOf('data-table'),
|
|
658
|
+
name: 'Data Table',
|
|
659
|
+
description:
|
|
660
|
+
'Direction-safe semantic table contract prepared for TanStack Table state adapters.',
|
|
661
|
+
package: '@noe/data-ui',
|
|
662
|
+
registryItem: 'data-table',
|
|
663
|
+
preview: () => (
|
|
664
|
+
<DataTable
|
|
665
|
+
columns={tableColumns}
|
|
666
|
+
rows={tableRows}
|
|
667
|
+
caption="Service health"
|
|
668
|
+
empty="No services yet."
|
|
669
|
+
/>
|
|
670
|
+
),
|
|
671
|
+
},
|
|
672
|
+
{
|
|
673
|
+
id: 'metric-card',
|
|
674
|
+
category: 'Data',
|
|
675
|
+
status: statusOf('metric-card'),
|
|
676
|
+
name: 'Metric Card',
|
|
677
|
+
description:
|
|
678
|
+
'Quiet operational metric composition with semantic status treatment and localized values.',
|
|
679
|
+
package: '@noe/data-ui',
|
|
680
|
+
registryItem: 'metric-card',
|
|
681
|
+
preview: () => (
|
|
682
|
+
<MetricCard label="Active services" value="128" delta="+4 this week" status="positive" />
|
|
683
|
+
),
|
|
684
|
+
},
|
|
685
|
+
{
|
|
686
|
+
id: 'chart-frame',
|
|
687
|
+
category: 'Data',
|
|
688
|
+
status: statusOf('chart-frame'),
|
|
689
|
+
name: 'Chart Frame',
|
|
690
|
+
description:
|
|
691
|
+
'Shared title/description/controls frame for chart content; chart engines render inside it.',
|
|
692
|
+
package: '@noe/data-ui',
|
|
693
|
+
registryItem: null,
|
|
694
|
+
preview: () => (
|
|
695
|
+
<ChartFrame title="Median latency" description="Last 7 days">
|
|
696
|
+
<svg viewBox="0 0 240 64" width="100%" height="64" role="img" aria-label="Latency trend">
|
|
697
|
+
<polyline
|
|
698
|
+
points="0,48 30,40 60,44 90,20 120,28 150,12 180,18 210,8 240,16"
|
|
699
|
+
fill="none"
|
|
700
|
+
stroke="var(--noe-color-accent)"
|
|
701
|
+
strokeWidth="2"
|
|
702
|
+
/>
|
|
703
|
+
</svg>
|
|
704
|
+
</ChartFrame>
|
|
705
|
+
),
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
id: 'agent-composer',
|
|
709
|
+
category: 'Agentic',
|
|
710
|
+
status: statusOf('agent-composer'),
|
|
711
|
+
name: 'Agent Composer',
|
|
712
|
+
description:
|
|
713
|
+
'Accessible multiline agent input with localized placeholder and explicit submit behavior.',
|
|
714
|
+
package: '@noe/ai-ui',
|
|
715
|
+
registryItem: 'agent-composer',
|
|
716
|
+
preview: () => <AgentComposerPreview />,
|
|
717
|
+
},
|
|
718
|
+
{
|
|
719
|
+
id: 'agent-message',
|
|
720
|
+
category: 'Agentic',
|
|
721
|
+
status: statusOf('agent-message'),
|
|
722
|
+
name: 'Agent Message',
|
|
723
|
+
description:
|
|
724
|
+
'Agent and human message composition with auto-direction runtime content and model identifier isolation.',
|
|
725
|
+
package: '@noe/ai-ui',
|
|
726
|
+
registryItem: 'agent-message',
|
|
727
|
+
preview: () => (
|
|
728
|
+
<div style={{ display: 'grid', gap: '0.75rem', maxWidth: '24rem' }}>
|
|
729
|
+
{/* biome-ignore lint/a11y/useValidAriaRole: AgentMessage's `role` is a message-role enum ('user' | 'assistant' | 'system'), not a DOM ARIA role. */}
|
|
730
|
+
<AgentMessage role="user" name="Ali" content="Can you check the RTL behavior?" />
|
|
731
|
+
{/* biome-ignore lint/a11y/useValidAriaRole: AgentMessage's `role` is a message-role enum, not a DOM ARIA role. */}
|
|
732
|
+
<AgentMessage
|
|
733
|
+
role="assistant"
|
|
734
|
+
name="NOa"
|
|
735
|
+
model="noe-agent-1"
|
|
736
|
+
content="Reviewed and left three comments."
|
|
737
|
+
/>
|
|
738
|
+
</div>
|
|
739
|
+
),
|
|
740
|
+
},
|
|
741
|
+
{
|
|
742
|
+
id: 'agent-plan',
|
|
743
|
+
category: 'Agentic',
|
|
744
|
+
status: statusOf('agent-plan'),
|
|
745
|
+
name: 'Agent Plan',
|
|
746
|
+
description:
|
|
747
|
+
'Queued, running, completed and failed execution-plan steps with progressive disclosure.',
|
|
748
|
+
package: '@noe/ai-ui',
|
|
749
|
+
registryItem: 'agent-plan',
|
|
750
|
+
preview: () => (
|
|
751
|
+
<AgentPlan
|
|
752
|
+
title="Fix RTL dialog portal"
|
|
753
|
+
steps={planSteps}
|
|
754
|
+
stateLabels={{
|
|
755
|
+
queued: 'Queued',
|
|
756
|
+
running: 'Running',
|
|
757
|
+
completed: 'Completed',
|
|
758
|
+
failed: 'Failed',
|
|
759
|
+
}}
|
|
760
|
+
/>
|
|
761
|
+
),
|
|
762
|
+
},
|
|
763
|
+
{
|
|
764
|
+
id: 'run-inspector',
|
|
765
|
+
category: 'Agentic',
|
|
766
|
+
status: statusOf('run-inspector'),
|
|
767
|
+
name: 'Run Inspector',
|
|
768
|
+
description: 'Compact run status, identifiers, latency, token use and trace details.',
|
|
769
|
+
package: '@noe/ai-ui',
|
|
770
|
+
registryItem: 'run-inspector',
|
|
771
|
+
preview: () => (
|
|
772
|
+
<RunInspector
|
|
773
|
+
runId="run_9f21ac"
|
|
774
|
+
status="Running"
|
|
775
|
+
latency="842ms"
|
|
776
|
+
tokenUsage="12,480 / 128,000"
|
|
777
|
+
labels={{ run: 'Run', latency: 'Latency', tokens: 'Tokens' }}
|
|
778
|
+
/>
|
|
779
|
+
),
|
|
780
|
+
},
|
|
781
|
+
{
|
|
782
|
+
id: 'tool-call',
|
|
783
|
+
category: 'Agentic',
|
|
784
|
+
status: statusOf('tool-call'),
|
|
785
|
+
name: 'Tool Call',
|
|
786
|
+
description:
|
|
787
|
+
'Human-readable tool state, scope and result summary with expandable technical detail.',
|
|
788
|
+
package: '@noe/ai-ui',
|
|
789
|
+
registryItem: 'tool-call',
|
|
790
|
+
preview: () => (
|
|
791
|
+
<ToolCall
|
|
792
|
+
title="Fetch service health"
|
|
793
|
+
tool="mcp://observability/service-health"
|
|
794
|
+
state="running"
|
|
795
|
+
stateLabel="Running"
|
|
796
|
+
summary="Read-only telemetry request for production services."
|
|
797
|
+
/>
|
|
798
|
+
),
|
|
799
|
+
},
|
|
800
|
+
{
|
|
801
|
+
id: 'approval-request',
|
|
802
|
+
category: 'Agentic',
|
|
803
|
+
status: statusOf('approval-request'),
|
|
804
|
+
name: 'Approval Request',
|
|
805
|
+
description:
|
|
806
|
+
'Human-in-the-loop decision pattern showing target, parameters, consequence and scoped choices.',
|
|
807
|
+
package: '@noe/ai-ui',
|
|
808
|
+
registryItem: 'approval-request',
|
|
809
|
+
preview: () => (
|
|
810
|
+
<ApprovalRequest
|
|
811
|
+
title="Approval required"
|
|
812
|
+
consequence="Publish the executive brief to the leadership workspace."
|
|
813
|
+
target="workspace://leadership/daily-brief"
|
|
814
|
+
targetLabel="Target"
|
|
815
|
+
parameters={[{ id: 'visibility', label: 'Visibility', value: 'leadership' }]}
|
|
816
|
+
labels={{ once: 'Allow once', session: 'Allow for session', deny: 'Deny' }}
|
|
817
|
+
onDecision={() => undefined}
|
|
818
|
+
/>
|
|
819
|
+
),
|
|
820
|
+
},
|
|
821
|
+
{
|
|
822
|
+
id: 'workflow-canvas',
|
|
823
|
+
category: 'Workflow',
|
|
824
|
+
status: statusOf('workflow-canvas'),
|
|
825
|
+
name: 'Workflow Canvas',
|
|
826
|
+
description:
|
|
827
|
+
'Accessible workflow canvas shell, toolbar and inspector regions suitable for a React Flow adapter.',
|
|
828
|
+
package: '@noe/workflow-ui',
|
|
829
|
+
registryItem: 'workflow-canvas',
|
|
830
|
+
preview: () => (
|
|
831
|
+
<div style={{ height: '14rem' }}>
|
|
832
|
+
<WorkflowCanvas label="Deploy workflow">
|
|
833
|
+
<WorkflowNode kind="agent" title="Review agent" subtitle="noe-agent-1" selected />
|
|
834
|
+
</WorkflowCanvas>
|
|
835
|
+
</div>
|
|
836
|
+
),
|
|
837
|
+
},
|
|
838
|
+
{
|
|
839
|
+
id: 'workflow-node',
|
|
840
|
+
category: 'Workflow',
|
|
841
|
+
status: statusOf('workflow-node'),
|
|
842
|
+
name: 'Workflow Node',
|
|
843
|
+
description:
|
|
844
|
+
'Agent, tool, trigger, condition and output node visual contract with keyboard focus.',
|
|
845
|
+
package: '@noe/workflow-ui',
|
|
846
|
+
registryItem: 'workflow-node',
|
|
847
|
+
preview: () => (
|
|
848
|
+
<div style={{ display: 'flex', gap: '0.75rem', flexWrap: 'wrap' }}>
|
|
849
|
+
<WorkflowNode kind="trigger" title="On pull request" />
|
|
850
|
+
<WorkflowNode kind="tool" title="Run tests" subtitle="ci/unit" />
|
|
851
|
+
</div>
|
|
852
|
+
),
|
|
853
|
+
},
|
|
854
|
+
{
|
|
855
|
+
id: 'page-header',
|
|
856
|
+
category: 'Patterns / Application',
|
|
857
|
+
status: statusOf('page-header'),
|
|
858
|
+
name: 'Page Header',
|
|
859
|
+
description:
|
|
860
|
+
'Application page header pattern with optional breadcrumb, title, description and action row; mirrors with logical layout in RTL.',
|
|
861
|
+
package: '@noe/ui',
|
|
862
|
+
registryItem: 'page-header',
|
|
863
|
+
preview: () => (
|
|
864
|
+
<PageHeader
|
|
865
|
+
breadcrumb={
|
|
866
|
+
<Breadcrumb
|
|
867
|
+
items={[
|
|
868
|
+
{ label: 'Workspace', href: '#' },
|
|
869
|
+
{ label: 'Agents', href: '#' },
|
|
870
|
+
{ label: 'Review agent', current: true },
|
|
871
|
+
]}
|
|
872
|
+
/>
|
|
873
|
+
}
|
|
874
|
+
title="Review agent"
|
|
875
|
+
description="Configuration, tools and recent activity for this agent."
|
|
876
|
+
actions={
|
|
877
|
+
<Button size="sm" variant="primary">
|
|
878
|
+
New run
|
|
879
|
+
</Button>
|
|
880
|
+
}
|
|
881
|
+
/>
|
|
882
|
+
),
|
|
883
|
+
},
|
|
884
|
+
{
|
|
885
|
+
id: 'sidebar-navigation',
|
|
886
|
+
category: 'Patterns / Application',
|
|
887
|
+
status: statusOf('sidebar-navigation'),
|
|
888
|
+
name: 'Sidebar Navigation',
|
|
889
|
+
description:
|
|
890
|
+
'Sectioned application sidebar navigation contract with current-page state and logical start alignment for both directions.',
|
|
891
|
+
package: '@noe/ui',
|
|
892
|
+
registryItem: 'sidebar-navigation',
|
|
893
|
+
preview: () => (
|
|
894
|
+
<div style={{ maxWidth: '16rem' }}>
|
|
895
|
+
<SidebarNavigation
|
|
896
|
+
label="Workspace"
|
|
897
|
+
sections={[
|
|
898
|
+
{
|
|
899
|
+
id: 'workspace',
|
|
900
|
+
items: [
|
|
901
|
+
{ href: '#overview', label: 'Overview', current: true },
|
|
902
|
+
{ href: '#runs', label: 'Runs', badge: '24' },
|
|
903
|
+
{ href: '#tools', label: 'Tools' },
|
|
904
|
+
],
|
|
905
|
+
},
|
|
906
|
+
{
|
|
907
|
+
id: 'settings',
|
|
908
|
+
label: 'Settings',
|
|
909
|
+
items: [
|
|
910
|
+
{ href: '#models', label: 'Models' },
|
|
911
|
+
{ href: '#mcp', label: 'MCP servers' },
|
|
912
|
+
],
|
|
913
|
+
},
|
|
914
|
+
]}
|
|
915
|
+
/>
|
|
916
|
+
</div>
|
|
917
|
+
),
|
|
918
|
+
},
|
|
919
|
+
{
|
|
920
|
+
id: 'agent-workspace',
|
|
921
|
+
category: 'Patterns / Pages',
|
|
922
|
+
status: statusOf('agent-workspace'),
|
|
923
|
+
name: 'Agent Workspace',
|
|
924
|
+
description:
|
|
925
|
+
'Three-region agent workspace page block composing navigation, conversation and a progressively disclosed run inspector; column order follows direction.',
|
|
926
|
+
package: '@noe/ai-ui',
|
|
927
|
+
registryItem: 'agent-workspace',
|
|
928
|
+
preview: () => (
|
|
929
|
+
<div style={{ height: '20rem' }}>
|
|
930
|
+
<AgentWorkspace
|
|
931
|
+
label="Agent workspace"
|
|
932
|
+
navigation={
|
|
933
|
+
<SidebarNavigation
|
|
934
|
+
label="Workspace"
|
|
935
|
+
sections={[
|
|
936
|
+
{
|
|
937
|
+
id: 'workspace',
|
|
938
|
+
items: [
|
|
939
|
+
{ href: '#agents', label: 'Agents', current: true },
|
|
940
|
+
{ href: '#runs', label: 'Runs', badge: '24' },
|
|
941
|
+
{ href: '#mcp', label: 'MCP servers' },
|
|
942
|
+
],
|
|
943
|
+
},
|
|
944
|
+
]}
|
|
945
|
+
/>
|
|
946
|
+
}
|
|
947
|
+
inspector={
|
|
948
|
+
<RunInspector
|
|
949
|
+
runId="run_9f21ac"
|
|
950
|
+
status="Running"
|
|
951
|
+
latency="842ms"
|
|
952
|
+
tokenUsage="12,480 / 128,000"
|
|
953
|
+
labels={{ run: 'Run', latency: 'Latency', tokens: 'Tokens' }}
|
|
954
|
+
/>
|
|
955
|
+
}
|
|
956
|
+
>
|
|
957
|
+
<p className="m-0 text-sm leading-normal text-muted-foreground">
|
|
958
|
+
Conversation and generated artifacts render in this region.
|
|
959
|
+
</p>
|
|
960
|
+
</AgentWorkspace>
|
|
961
|
+
</div>
|
|
962
|
+
),
|
|
963
|
+
},
|
|
964
|
+
{
|
|
965
|
+
id: 'section-header',
|
|
966
|
+
category: 'Patterns / Application',
|
|
967
|
+
status: statusOf('section-header'),
|
|
968
|
+
name: 'Section Header',
|
|
969
|
+
description:
|
|
970
|
+
'Application section header pattern with title, optional description and trailing action row; alignment resolves with logical layout in RTL.',
|
|
971
|
+
package: '@noe/ui',
|
|
972
|
+
registryItem: 'section-header',
|
|
973
|
+
preview: () => (
|
|
974
|
+
<div style={{ display: 'grid', gap: '1.5rem', maxWidth: '28rem' }}>
|
|
975
|
+
<SectionHeader
|
|
976
|
+
title="Recent runs"
|
|
977
|
+
description="Executions from the last 24 hours across every workspace."
|
|
978
|
+
actions={
|
|
979
|
+
<Button size="sm" variant="outline">
|
|
980
|
+
View all
|
|
981
|
+
</Button>
|
|
982
|
+
}
|
|
983
|
+
/>
|
|
984
|
+
<SectionHeader title="Tools" />
|
|
985
|
+
</div>
|
|
986
|
+
),
|
|
987
|
+
},
|
|
988
|
+
{
|
|
989
|
+
id: 'filter-bar',
|
|
990
|
+
category: 'Patterns / Data',
|
|
991
|
+
status: statusOf('filter-bar'),
|
|
992
|
+
name: 'Filter Bar',
|
|
993
|
+
description:
|
|
994
|
+
'Searchable filter row for data surfaces with search, filter and action slots; spacing uses logical properties so it mirrors under RTL.',
|
|
995
|
+
package: '@noe/data-ui',
|
|
996
|
+
registryItem: 'filter-bar',
|
|
997
|
+
preview: () => (
|
|
998
|
+
<div style={{ maxWidth: '30rem' }}>
|
|
999
|
+
<FilterBar
|
|
1000
|
+
label="Run filters"
|
|
1001
|
+
search={<Input aria-label="Search runs" placeholder="Search runs…" />}
|
|
1002
|
+
action={
|
|
1003
|
+
<button
|
|
1004
|
+
className="rounded-md border border-border px-3 py-1.5 text-sm leading-normal hover:bg-surface-sunken/60"
|
|
1005
|
+
type="button"
|
|
1006
|
+
>
|
|
1007
|
+
Reset
|
|
1008
|
+
</button>
|
|
1009
|
+
}
|
|
1010
|
+
/>
|
|
1011
|
+
</div>
|
|
1012
|
+
),
|
|
1013
|
+
},
|
|
1014
|
+
{
|
|
1015
|
+
id: 'pagination',
|
|
1016
|
+
category: 'Patterns / Data',
|
|
1017
|
+
status: statusOf('pagination'),
|
|
1018
|
+
name: 'Pagination',
|
|
1019
|
+
description:
|
|
1020
|
+
'Accessible pagination contract with localized previous and next labels, live status region and disabled boundary states for data tables.',
|
|
1021
|
+
package: '@noe/data-ui',
|
|
1022
|
+
registryItem: 'pagination',
|
|
1023
|
+
preview: () => (
|
|
1024
|
+
<div style={{ maxWidth: '26rem' }}>
|
|
1025
|
+
<Pagination
|
|
1026
|
+
canPrevious={false}
|
|
1027
|
+
label="Runs pagination"
|
|
1028
|
+
nextLabel="Next page"
|
|
1029
|
+
previousLabel="Previous page"
|
|
1030
|
+
status="Page 1 of 8"
|
|
1031
|
+
/>
|
|
1032
|
+
</div>
|
|
1033
|
+
),
|
|
1034
|
+
},
|
|
1035
|
+
{
|
|
1036
|
+
id: 'activity-feed',
|
|
1037
|
+
category: 'Patterns / Application',
|
|
1038
|
+
status: statusOf('activity-feed'),
|
|
1039
|
+
name: 'Activity Feed',
|
|
1040
|
+
description:
|
|
1041
|
+
'Timestamped run and system activity list with semantic status markers, logical start alignment and mixed-direction metadata isolation.',
|
|
1042
|
+
package: '@noe/ai-ui',
|
|
1043
|
+
registryItem: 'activity-feed',
|
|
1044
|
+
preview: () => (
|
|
1045
|
+
<div style={{ maxWidth: '22rem' }}>
|
|
1046
|
+
<ActivityFeed
|
|
1047
|
+
items={[
|
|
1048
|
+
{
|
|
1049
|
+
id: '1',
|
|
1050
|
+
label: 'Run completed for review-agent',
|
|
1051
|
+
meta: 'run_9f21ac',
|
|
1052
|
+
timestamp: '12:04',
|
|
1053
|
+
status: 'positive',
|
|
1054
|
+
},
|
|
1055
|
+
{
|
|
1056
|
+
id: '2',
|
|
1057
|
+
label: 'Tool call awaiting approval',
|
|
1058
|
+
meta: 'mcp://db/delete-rows',
|
|
1059
|
+
timestamp: '12:02',
|
|
1060
|
+
status: 'warning',
|
|
1061
|
+
},
|
|
1062
|
+
{
|
|
1063
|
+
id: '3',
|
|
1064
|
+
label: 'Runner connection lost',
|
|
1065
|
+
timestamp: '11:58',
|
|
1066
|
+
status: 'error',
|
|
1067
|
+
},
|
|
1068
|
+
]}
|
|
1069
|
+
label="Workspace activity"
|
|
1070
|
+
/>
|
|
1071
|
+
</div>
|
|
1072
|
+
),
|
|
1073
|
+
},
|
|
1074
|
+
{
|
|
1075
|
+
id: 'sign-in-form',
|
|
1076
|
+
category: 'Patterns / Pages',
|
|
1077
|
+
status: statusOf('sign-in-form'),
|
|
1078
|
+
name: 'Sign In Form',
|
|
1079
|
+
description:
|
|
1080
|
+
'Authentication page block with labeled email and password fields, technical input direction policy, pending state and footer slot.',
|
|
1081
|
+
package: '@noe/ui',
|
|
1082
|
+
registryItem: 'sign-in-form',
|
|
1083
|
+
preview: () => (
|
|
1084
|
+
<SignInForm
|
|
1085
|
+
description="Enter your credentials to reach the workspace."
|
|
1086
|
+
footer={<span>Protected by workspace SSO.</span>}
|
|
1087
|
+
labels={{
|
|
1088
|
+
heading: 'Sign in to NOE',
|
|
1089
|
+
emailLabel: 'Email',
|
|
1090
|
+
passwordLabel: 'Password',
|
|
1091
|
+
submitLabel: 'Continue',
|
|
1092
|
+
}}
|
|
1093
|
+
/>
|
|
1094
|
+
),
|
|
1095
|
+
},
|
|
1096
|
+
{
|
|
1097
|
+
id: 'header-navigation',
|
|
1098
|
+
category: 'Patterns / Application',
|
|
1099
|
+
status: statusOf('header-navigation'),
|
|
1100
|
+
name: 'Header Navigation',
|
|
1101
|
+
description:
|
|
1102
|
+
'Top application header with brand slot, link row and action area; links collapse below the small breakpoint in favor of a menu trigger slot.',
|
|
1103
|
+
package: '@noe/ui',
|
|
1104
|
+
registryItem: 'header-navigation',
|
|
1105
|
+
preview: () => (
|
|
1106
|
+
<div style={{ marginInline: '-1rem' }}>
|
|
1107
|
+
<HeaderNavigation
|
|
1108
|
+
actions={
|
|
1109
|
+
<>
|
|
1110
|
+
<Button size="sm" variant="outline">
|
|
1111
|
+
Docs
|
|
1112
|
+
</Button>
|
|
1113
|
+
<Button size="sm" variant="primary">
|
|
1114
|
+
Ask NOa
|
|
1115
|
+
</Button>
|
|
1116
|
+
</>
|
|
1117
|
+
}
|
|
1118
|
+
brand={<span className="font-heading text-sm font-semibold">NOEcosystem</span>}
|
|
1119
|
+
label="Primary"
|
|
1120
|
+
links={[
|
|
1121
|
+
{ href: '#system', label: 'System', current: true },
|
|
1122
|
+
{ href: '#runs', label: 'Runs' },
|
|
1123
|
+
{ href: '#tools', label: 'Tools' },
|
|
1124
|
+
]}
|
|
1125
|
+
/>
|
|
1126
|
+
</div>
|
|
1127
|
+
),
|
|
1128
|
+
},
|
|
1129
|
+
{
|
|
1130
|
+
id: 'app-frame',
|
|
1131
|
+
category: 'Patterns / Pages',
|
|
1132
|
+
status: statusOf('app-frame'),
|
|
1133
|
+
name: 'App Frame',
|
|
1134
|
+
description:
|
|
1135
|
+
'Responsive application frame owning page landmarks: header row, desktop sidebar, mobile navigation region, content and an optional inspector column.',
|
|
1136
|
+
package: '@noe/ui',
|
|
1137
|
+
registryItem: 'app-frame',
|
|
1138
|
+
preview: () => (
|
|
1139
|
+
<div className="-mx-4 -my-2" style={{ height: '18rem' }}>
|
|
1140
|
+
<AppFrame
|
|
1141
|
+
header={
|
|
1142
|
+
<div className="bg-surface-raised px-4 py-3 text-sm font-medium">NOEcosystem</div>
|
|
1143
|
+
}
|
|
1144
|
+
mobileNavigation={
|
|
1145
|
+
<p className="m-0 text-xs leading-normal text-muted-foreground">
|
|
1146
|
+
Mobile navigation slot (hidden on large screens).
|
|
1147
|
+
</p>
|
|
1148
|
+
}
|
|
1149
|
+
navigation={
|
|
1150
|
+
<SidebarNavigation
|
|
1151
|
+
label="Workspace"
|
|
1152
|
+
sections={[
|
|
1153
|
+
{
|
|
1154
|
+
id: 'frame',
|
|
1155
|
+
items: [
|
|
1156
|
+
{ href: '#overview', label: 'Overview', current: true },
|
|
1157
|
+
{ href: '#runs', label: 'Runs', badge: '24' },
|
|
1158
|
+
],
|
|
1159
|
+
},
|
|
1160
|
+
]}
|
|
1161
|
+
/>
|
|
1162
|
+
}
|
|
1163
|
+
>
|
|
1164
|
+
<p className="m-0 text-sm leading-normal text-muted-foreground">
|
|
1165
|
+
Content region; resize to see the responsive regions swap.
|
|
1166
|
+
</p>
|
|
1167
|
+
</AppFrame>
|
|
1168
|
+
</div>
|
|
1169
|
+
),
|
|
1170
|
+
},
|
|
1171
|
+
{
|
|
1172
|
+
id: 'bottom-navigation',
|
|
1173
|
+
category: 'Patterns / Application',
|
|
1174
|
+
status: statusOf('bottom-navigation'),
|
|
1175
|
+
name: 'Bottom Navigation',
|
|
1176
|
+
description:
|
|
1177
|
+
'Mobile-only bottom tab bar with current-page state, badges, icon slots and safe-area padding; hidden from the medium breakpoint upward.',
|
|
1178
|
+
package: '@noe/ui',
|
|
1179
|
+
registryItem: 'bottom-navigation',
|
|
1180
|
+
preview: () => (
|
|
1181
|
+
<BottomNavigation
|
|
1182
|
+
items={[
|
|
1183
|
+
{ href: '#home', label: 'Home', current: true },
|
|
1184
|
+
{ href: '#agents', label: 'Agents', badge: '3' },
|
|
1185
|
+
{ href: '#runs', label: 'Runs' },
|
|
1186
|
+
{ href: '#settings', label: 'Settings' },
|
|
1187
|
+
]}
|
|
1188
|
+
label="Mobile"
|
|
1189
|
+
/>
|
|
1190
|
+
),
|
|
1191
|
+
},
|
|
1192
|
+
{
|
|
1193
|
+
id: 'dashboard-shell',
|
|
1194
|
+
category: 'Patterns / Pages',
|
|
1195
|
+
status: statusOf('dashboard-shell'),
|
|
1196
|
+
name: 'Dashboard Shell',
|
|
1197
|
+
description:
|
|
1198
|
+
'Data dashboard scaffold with slots for page header, filters, responsive metric grid, chart, table and pagination regions.',
|
|
1199
|
+
package: '@noe/data-ui',
|
|
1200
|
+
registryItem: 'dashboard-shell',
|
|
1201
|
+
preview: () => (
|
|
1202
|
+
<DashboardShell
|
|
1203
|
+
filters={<Input aria-label="Search services" placeholder="Search services…" />}
|
|
1204
|
+
label="Service dashboard"
|
|
1205
|
+
metrics={[
|
|
1206
|
+
<MetricCard
|
|
1207
|
+
delta="+4 this week"
|
|
1208
|
+
key="m1"
|
|
1209
|
+
label="Active services"
|
|
1210
|
+
status="positive"
|
|
1211
|
+
value="128"
|
|
1212
|
+
/>,
|
|
1213
|
+
<MetricCard
|
|
1214
|
+
delta="+6 today"
|
|
1215
|
+
key="m2"
|
|
1216
|
+
label="Pending approvals"
|
|
1217
|
+
status="warning"
|
|
1218
|
+
value="9"
|
|
1219
|
+
/>,
|
|
1220
|
+
]}
|
|
1221
|
+
table={
|
|
1222
|
+
<div className="flex flex-col gap-2 rounded-lg border border-border p-4">
|
|
1223
|
+
<Skeleton style={{ height: '0.875rem', width: '70%' }} />
|
|
1224
|
+
<Skeleton style={{ height: '0.875rem', width: '45%' }} />
|
|
1225
|
+
</div>
|
|
1226
|
+
}
|
|
1227
|
+
/>
|
|
1228
|
+
),
|
|
1229
|
+
},
|
|
1230
|
+
{
|
|
1231
|
+
id: 'settings-page',
|
|
1232
|
+
category: 'Patterns / Pages',
|
|
1233
|
+
status: statusOf('settings-page'),
|
|
1234
|
+
name: 'Settings Page',
|
|
1235
|
+
description:
|
|
1236
|
+
'Settings layout with sectioned side navigation on wide screens, stacked content column and a sticky save bar; collapses to one column on mobile.',
|
|
1237
|
+
package: '@noe/ui',
|
|
1238
|
+
registryItem: 'settings-page',
|
|
1239
|
+
preview: () => (
|
|
1240
|
+
<SettingsPage
|
|
1241
|
+
label="Workspace settings"
|
|
1242
|
+
navigation={
|
|
1243
|
+
<SidebarNavigation
|
|
1244
|
+
label="Settings sections"
|
|
1245
|
+
sections={[
|
|
1246
|
+
{
|
|
1247
|
+
id: 'settings',
|
|
1248
|
+
items: [
|
|
1249
|
+
{ href: '#general', label: 'General', current: true },
|
|
1250
|
+
{ href: '#members', label: 'Members' },
|
|
1251
|
+
],
|
|
1252
|
+
},
|
|
1253
|
+
]}
|
|
1254
|
+
/>
|
|
1255
|
+
}
|
|
1256
|
+
saveBar={
|
|
1257
|
+
<>
|
|
1258
|
+
<Button size="sm" variant="quiet">
|
|
1259
|
+
Cancel
|
|
1260
|
+
</Button>
|
|
1261
|
+
<Button size="sm" variant="primary">
|
|
1262
|
+
Save changes
|
|
1263
|
+
</Button>
|
|
1264
|
+
</>
|
|
1265
|
+
}
|
|
1266
|
+
>
|
|
1267
|
+
<section className="flex max-w-xl flex-col gap-4">
|
|
1268
|
+
<SectionHeader
|
|
1269
|
+
description="Shown to every collaborator in the workspace."
|
|
1270
|
+
title="Workspace profile"
|
|
1271
|
+
/>
|
|
1272
|
+
<Field description="Visible in URLs and exports." label="Workspace name">
|
|
1273
|
+
<Input defaultValue="acme-production" />
|
|
1274
|
+
</Field>
|
|
1275
|
+
</section>
|
|
1276
|
+
</SettingsPage>
|
|
1277
|
+
),
|
|
1278
|
+
},
|
|
1279
|
+
{
|
|
1280
|
+
id: 'data-list',
|
|
1281
|
+
category: 'Patterns / Mobile',
|
|
1282
|
+
status: statusOf('data-list'),
|
|
1283
|
+
name: 'Data List',
|
|
1284
|
+
description:
|
|
1285
|
+
'Touch-friendly mobile list rows with leading media slot, title and subtitle, trailing meta or chevron slot and current-page state; rows meet minimum touch height.',
|
|
1286
|
+
package: '@noe/ui',
|
|
1287
|
+
registryItem: 'data-list',
|
|
1288
|
+
preview: () => (
|
|
1289
|
+
<div style={{ maxWidth: '24rem' }}>
|
|
1290
|
+
<DataList
|
|
1291
|
+
items={[
|
|
1292
|
+
{
|
|
1293
|
+
id: '1',
|
|
1294
|
+
href: '#run-1',
|
|
1295
|
+
title: 'Review quarterly report',
|
|
1296
|
+
subtitle: 'run_9f21ac · NOFinix',
|
|
1297
|
+
trailing: '12:04',
|
|
1298
|
+
current: true,
|
|
1299
|
+
},
|
|
1300
|
+
{ id: '2', href: '#run-2', title: 'Sync ledger entries', subtitle: 'run_9f21ad' },
|
|
1301
|
+
{ id: '3', href: '#agent-1', title: 'review-agent', subtitle: 'noe-agent-1' },
|
|
1302
|
+
]}
|
|
1303
|
+
label="Recent runs"
|
|
1304
|
+
/>
|
|
1305
|
+
</div>
|
|
1306
|
+
),
|
|
1307
|
+
},
|
|
1308
|
+
{
|
|
1309
|
+
id: 'fab',
|
|
1310
|
+
category: 'Patterns / Mobile',
|
|
1311
|
+
status: statusOf('fab'),
|
|
1312
|
+
name: 'Floating Action Button',
|
|
1313
|
+
description:
|
|
1314
|
+
'Mobile-only floating action button anchored to the logical end edge above the bottom navigation, with safe-area padding and required accessible label.',
|
|
1315
|
+
package: '@noe/ui',
|
|
1316
|
+
registryItem: 'fab',
|
|
1317
|
+
preview: () => (
|
|
1318
|
+
<div className="relative h-28 rounded-lg bg-surface-sunken/60">
|
|
1319
|
+
<Fab className="!absolute" label="New run" onClick={() => undefined}>
|
|
1320
|
+
+
|
|
1321
|
+
</Fab>
|
|
1322
|
+
</div>
|
|
1323
|
+
),
|
|
1324
|
+
},
|
|
1325
|
+
{
|
|
1326
|
+
id: 'mobile-screen',
|
|
1327
|
+
category: 'Patterns / Pages',
|
|
1328
|
+
status: statusOf('mobile-screen'),
|
|
1329
|
+
name: 'Mobile Screen',
|
|
1330
|
+
description:
|
|
1331
|
+
'Single-column mobile page scaffold composing an app bar, scrollable content region, optional floating action button and bottom navigation.',
|
|
1332
|
+
package: '@noe/ui',
|
|
1333
|
+
registryItem: 'mobile-screen',
|
|
1334
|
+
preview: () => (
|
|
1335
|
+
<MobileScreen
|
|
1336
|
+
appBar={
|
|
1337
|
+
<HeaderNavigation
|
|
1338
|
+
brand={<span className="font-heading text-sm font-semibold">NOEcosystem</span>}
|
|
1339
|
+
label="Primary"
|
|
1340
|
+
/>
|
|
1341
|
+
}
|
|
1342
|
+
bottomNavigation={
|
|
1343
|
+
<BottomNavigation
|
|
1344
|
+
items={[
|
|
1345
|
+
{ href: '#home', label: 'Home', current: true },
|
|
1346
|
+
{ href: '#agents', label: 'Agents', badge: '3' },
|
|
1347
|
+
{ href: '#runs', label: 'Runs' },
|
|
1348
|
+
]}
|
|
1349
|
+
label="Mobile"
|
|
1350
|
+
/>
|
|
1351
|
+
}
|
|
1352
|
+
label="Runs screen"
|
|
1353
|
+
>
|
|
1354
|
+
<DataList
|
|
1355
|
+
items={[
|
|
1356
|
+
{
|
|
1357
|
+
id: '1',
|
|
1358
|
+
href: '#run-1',
|
|
1359
|
+
title: 'Review quarterly report',
|
|
1360
|
+
subtitle: 'run_9f21ac · NOFinix',
|
|
1361
|
+
trailing: '12:04',
|
|
1362
|
+
current: true,
|
|
1363
|
+
},
|
|
1364
|
+
{ id: '2', href: '#run-2', title: 'Sync ledger entries', subtitle: 'run_9f21ad' },
|
|
1365
|
+
]}
|
|
1366
|
+
label="Recent runs"
|
|
1367
|
+
/>
|
|
1368
|
+
</MobileScreen>
|
|
1369
|
+
),
|
|
1370
|
+
},
|
|
1371
|
+
{
|
|
1372
|
+
id: 'featured-icon',
|
|
1373
|
+
category: 'Foundations / Icons',
|
|
1374
|
+
status: statusOf('featured-icon'),
|
|
1375
|
+
name: 'Featured Icon',
|
|
1376
|
+
description:
|
|
1377
|
+
'Decorative icon container with tokenized border, background and size variants for feature highlights and empty states. Uses @noe/icons.',
|
|
1378
|
+
package: '@noe/ui',
|
|
1379
|
+
registryItem: 'featured-icon',
|
|
1380
|
+
preview: () => (
|
|
1381
|
+
<div className="flex flex-wrap items-center gap-3">
|
|
1382
|
+
<FeaturedIcon variant="brand" size="md" icon={<ChevronIcon direction="forward" />} />
|
|
1383
|
+
<FeaturedIcon variant="muted" size="lg" icon={<ChevronIcon direction="forward" />} />
|
|
1384
|
+
<FeaturedIcon variant="success" size="sm" icon={<ChevronIcon direction="forward" />} />
|
|
1385
|
+
</div>
|
|
1386
|
+
),
|
|
1387
|
+
},
|
|
1388
|
+
{
|
|
1389
|
+
id: 'utility-button',
|
|
1390
|
+
category: 'Primitives / Actions',
|
|
1391
|
+
status: statusOf('utility-button'),
|
|
1392
|
+
name: 'Utility Button',
|
|
1393
|
+
description:
|
|
1394
|
+
'Compact toolbar/icon button composing canonical Button for row actions and dense controls; not a second Button primitive.',
|
|
1395
|
+
package: '@noe/ui',
|
|
1396
|
+
registryItem: 'utility-button',
|
|
1397
|
+
preview: () => (
|
|
1398
|
+
<div className="flex items-center gap-2">
|
|
1399
|
+
<UtilityButton aria-label="Next" variant="ghost">
|
|
1400
|
+
<ChevronIcon direction="forward" />
|
|
1401
|
+
</UtilityButton>
|
|
1402
|
+
<UtilityButton aria-label="Previous" variant="outline">
|
|
1403
|
+
<ChevronIcon direction="backward" />
|
|
1404
|
+
</UtilityButton>
|
|
1405
|
+
<UtilityButton aria-label="Settings" variant="quiet">
|
|
1406
|
+
<ChevronIcon direction="forward" />
|
|
1407
|
+
</UtilityButton>
|
|
1408
|
+
</div>
|
|
1409
|
+
),
|
|
1410
|
+
},
|
|
1411
|
+
{
|
|
1412
|
+
id: 'context-menu',
|
|
1413
|
+
category: 'Overlays',
|
|
1414
|
+
status: statusOf('context-menu'),
|
|
1415
|
+
name: 'Context Menu',
|
|
1416
|
+
description:
|
|
1417
|
+
'Right-click and keyboard menu using Menu foundation with logical placement and portal dir propagation.',
|
|
1418
|
+
package: '@noe/ui',
|
|
1419
|
+
registryItem: 'context-menu',
|
|
1420
|
+
preview: () => (
|
|
1421
|
+
<ContextMenu>
|
|
1422
|
+
<ContextMenuTrigger render={<Button variant="outline">Right-click me</Button>} />
|
|
1423
|
+
<ContextMenuContent>
|
|
1424
|
+
<ContextMenuItem>Copy</ContextMenuItem>
|
|
1425
|
+
<ContextMenuItem>Cut</ContextMenuItem>
|
|
1426
|
+
<ContextMenuSeparator />
|
|
1427
|
+
<ContextMenuItem variant="destructive">Delete</ContextMenuItem>
|
|
1428
|
+
</ContextMenuContent>
|
|
1429
|
+
</ContextMenu>
|
|
1430
|
+
),
|
|
1431
|
+
},
|
|
1432
|
+
{
|
|
1433
|
+
id: 'dropdown',
|
|
1434
|
+
category: 'Overlays',
|
|
1435
|
+
status: statusOf('dropdown'),
|
|
1436
|
+
name: 'Dropdown',
|
|
1437
|
+
description:
|
|
1438
|
+
'Disclosure menu triggered by button, sharing Menu foundation with logical start alignment for action lists.',
|
|
1439
|
+
package: '@noe/ui',
|
|
1440
|
+
registryItem: 'dropdown',
|
|
1441
|
+
preview: () => (
|
|
1442
|
+
<Dropdown>
|
|
1443
|
+
<DropdownTrigger render={<Button>Actions</Button>} />
|
|
1444
|
+
<DropdownContent>
|
|
1445
|
+
<DropdownItem>Rename</DropdownItem>
|
|
1446
|
+
<DropdownItem>Duplicate</DropdownItem>
|
|
1447
|
+
<DropdownSeparator />
|
|
1448
|
+
<DropdownItem variant="destructive">Delete</DropdownItem>
|
|
1449
|
+
</DropdownContent>
|
|
1450
|
+
</Dropdown>
|
|
1451
|
+
),
|
|
1452
|
+
},
|
|
1453
|
+
|
|
1454
|
+
{
|
|
1455
|
+
id: 'login-page',
|
|
1456
|
+
category: 'Shared / Auth',
|
|
1457
|
+
status: statusOf('login-page'),
|
|
1458
|
+
name: 'Login Page',
|
|
1459
|
+
description: 'Shared authentication page composition with branding, title, form and footer.',
|
|
1460
|
+
package: '@noe/ui',
|
|
1461
|
+
registryItem: 'login-page',
|
|
1462
|
+
preview: () => (
|
|
1463
|
+
<div style={{ height: '24rem' }}>
|
|
1464
|
+
<LoginPage
|
|
1465
|
+
title="Sign in to NOE"
|
|
1466
|
+
description="Enter your credentials."
|
|
1467
|
+
form={
|
|
1468
|
+
<SignInForm
|
|
1469
|
+
labels={{
|
|
1470
|
+
heading: 'Sign in',
|
|
1471
|
+
emailLabel: 'Email',
|
|
1472
|
+
passwordLabel: 'Password',
|
|
1473
|
+
submitLabel: 'Continue',
|
|
1474
|
+
}}
|
|
1475
|
+
/>
|
|
1476
|
+
}
|
|
1477
|
+
brand={<span className="font-heading font-semibold">NOEcosystem</span>}
|
|
1478
|
+
/>
|
|
1479
|
+
</div>
|
|
1480
|
+
),
|
|
1481
|
+
},
|
|
1482
|
+
{
|
|
1483
|
+
id: 'not-found',
|
|
1484
|
+
category: 'Shared / Auth',
|
|
1485
|
+
status: statusOf('not-found'),
|
|
1486
|
+
name: '404 Section',
|
|
1487
|
+
description: '404 not-found section with code, title and action.',
|
|
1488
|
+
package: '@noe/ui',
|
|
1489
|
+
registryItem: 'not-found',
|
|
1490
|
+
preview: () => (
|
|
1491
|
+
<NotFound
|
|
1492
|
+
title="Page not found"
|
|
1493
|
+
description="The page you tried to access does not exist."
|
|
1494
|
+
action={<Button size="sm">Go home</Button>}
|
|
1495
|
+
/>
|
|
1496
|
+
),
|
|
1497
|
+
},
|
|
1498
|
+
{
|
|
1499
|
+
id: 'chart',
|
|
1500
|
+
category: 'Data / Visualization',
|
|
1501
|
+
status: statusOf('chart'),
|
|
1502
|
+
name: 'Chart',
|
|
1503
|
+
description: 'Line and bar chart with tokenized colors, RTL-safe axes and tabular fallback.',
|
|
1504
|
+
package: '@noe/data-ui',
|
|
1505
|
+
registryItem: 'chart',
|
|
1506
|
+
preview: () => (
|
|
1507
|
+
<div style={{ maxWidth: '28rem', display: 'grid', gap: '1rem' }}>
|
|
1508
|
+
<Chart
|
|
1509
|
+
title="Line"
|
|
1510
|
+
data={[
|
|
1511
|
+
{ label: 'Mon', value: 40 },
|
|
1512
|
+
{ label: 'Tue', value: 80 },
|
|
1513
|
+
{ label: 'Wed', value: 60 },
|
|
1514
|
+
]}
|
|
1515
|
+
/>
|
|
1516
|
+
<Chart
|
|
1517
|
+
type="bar"
|
|
1518
|
+
title="Bar"
|
|
1519
|
+
data={[
|
|
1520
|
+
{ label: 'A', value: 30 },
|
|
1521
|
+
{ label: 'B', value: 70 },
|
|
1522
|
+
{ label: 'C', value: 50 },
|
|
1523
|
+
]}
|
|
1524
|
+
/>
|
|
1525
|
+
</div>
|
|
1526
|
+
),
|
|
1527
|
+
},
|
|
1528
|
+
{
|
|
1529
|
+
id: 'messaging',
|
|
1530
|
+
category: 'Communication / Messaging',
|
|
1531
|
+
status: statusOf('messaging'),
|
|
1532
|
+
name: 'Messaging',
|
|
1533
|
+
description: 'Conversation messaging list with auto-direction and composer slot.',
|
|
1534
|
+
package: '@noe/ui',
|
|
1535
|
+
registryItem: 'messaging',
|
|
1536
|
+
preview: () => (
|
|
1537
|
+
<div style={{ maxWidth: '24rem' }}>
|
|
1538
|
+
<Messaging
|
|
1539
|
+
label="Conversation"
|
|
1540
|
+
messages={[
|
|
1541
|
+
{ id: '1', author: 'Ali', content: 'Hello' },
|
|
1542
|
+
{ id: '2', author: 'NOa', content: 'Hi', variant: 'assistant' },
|
|
1543
|
+
]}
|
|
1544
|
+
/>
|
|
1545
|
+
</div>
|
|
1546
|
+
),
|
|
1547
|
+
},
|
|
1548
|
+
{
|
|
1549
|
+
id: 'progress-steps',
|
|
1550
|
+
category: 'Navigation / Progress',
|
|
1551
|
+
status: statusOf('progress-steps'),
|
|
1552
|
+
name: 'Progress Steps',
|
|
1553
|
+
description:
|
|
1554
|
+
'Step indicator with pending/current/completed states and horizontal/vertical orientation.',
|
|
1555
|
+
package: '@noe/ui',
|
|
1556
|
+
registryItem: 'progress-steps',
|
|
1557
|
+
preview: () => (
|
|
1558
|
+
<ProgressSteps
|
|
1559
|
+
label="Onboarding"
|
|
1560
|
+
steps={[
|
|
1561
|
+
{ id: '1', label: 'Account', state: 'completed' },
|
|
1562
|
+
{ id: '2', label: 'Profile', state: 'current' },
|
|
1563
|
+
{ id: '3', label: 'Done' },
|
|
1564
|
+
]}
|
|
1565
|
+
/>
|
|
1566
|
+
),
|
|
1567
|
+
},
|
|
1568
|
+
{
|
|
1569
|
+
id: 'dashboard-01',
|
|
1570
|
+
category: 'Application Examples',
|
|
1571
|
+
status: statusOf('dashboard-01'),
|
|
1572
|
+
name: 'Dashboard 01',
|
|
1573
|
+
description: 'Dashboard example 01 — overview composition.',
|
|
1574
|
+
package: '@noe/data-ui',
|
|
1575
|
+
registryItem: 'dashboard-01',
|
|
1576
|
+
preview: () => (
|
|
1577
|
+
<div style={{ height: '20rem' }}>
|
|
1578
|
+
<Dashboard01 />
|
|
1579
|
+
</div>
|
|
1580
|
+
),
|
|
1581
|
+
},
|
|
1582
|
+
{
|
|
1583
|
+
id: 'dashboard-02',
|
|
1584
|
+
category: 'Application Examples',
|
|
1585
|
+
status: statusOf('dashboard-02'),
|
|
1586
|
+
name: 'Dashboard 02',
|
|
1587
|
+
description: 'Dashboard example 02 — detailed composition.',
|
|
1588
|
+
package: '@noe/data-ui',
|
|
1589
|
+
registryItem: 'dashboard-02',
|
|
1590
|
+
preview: () => (
|
|
1591
|
+
<div style={{ height: '20rem' }}>
|
|
1592
|
+
<Dashboard02 />
|
|
1593
|
+
</div>
|
|
1594
|
+
),
|
|
1595
|
+
},
|
|
1596
|
+
{
|
|
1597
|
+
id: 'settings-01',
|
|
1598
|
+
category: 'Application Examples',
|
|
1599
|
+
status: statusOf('settings-01'),
|
|
1600
|
+
name: 'Settings 01',
|
|
1601
|
+
description: 'Settings example 01 — workspace profile.',
|
|
1602
|
+
package: '@noe/ui',
|
|
1603
|
+
registryItem: 'settings-01',
|
|
1604
|
+
preview: () => (
|
|
1605
|
+
<div style={{ height: '20rem' }}>
|
|
1606
|
+
<Settings01 />
|
|
1607
|
+
</div>
|
|
1608
|
+
),
|
|
1609
|
+
},
|
|
1610
|
+
{
|
|
1611
|
+
id: 'settings-02',
|
|
1612
|
+
category: 'Application Examples',
|
|
1613
|
+
status: statusOf('settings-02'),
|
|
1614
|
+
name: 'Settings 02',
|
|
1615
|
+
description: 'Settings example 02 — team and billing.',
|
|
1616
|
+
package: '@noe/ui',
|
|
1617
|
+
registryItem: 'settings-02',
|
|
1618
|
+
preview: () => (
|
|
1619
|
+
<div style={{ height: '20rem' }}>
|
|
1620
|
+
<Settings02 />
|
|
1621
|
+
</div>
|
|
1622
|
+
),
|
|
1623
|
+
},
|
|
1624
|
+
{
|
|
1625
|
+
id: 'hero-header',
|
|
1626
|
+
category: 'Marketing / Hero',
|
|
1627
|
+
status: statusOf('hero-header'),
|
|
1628
|
+
name: 'Hero Header',
|
|
1629
|
+
description: 'Marketing hero header section with eyebrow, title, actions and media.',
|
|
1630
|
+
package: '@noe/ui',
|
|
1631
|
+
registryItem: 'hero-header',
|
|
1632
|
+
preview: () => (
|
|
1633
|
+
<HeroHeader
|
|
1634
|
+
eyebrow="NOE"
|
|
1635
|
+
title="Shared foundations"
|
|
1636
|
+
description="Connected experiences."
|
|
1637
|
+
actions={<Button size="sm">Get started</Button>}
|
|
1638
|
+
/>
|
|
1639
|
+
),
|
|
1640
|
+
},
|
|
1641
|
+
{
|
|
1642
|
+
id: 'marketing-header',
|
|
1643
|
+
category: 'Marketing / Header',
|
|
1644
|
+
status: statusOf('marketing-header'),
|
|
1645
|
+
name: 'Marketing Header',
|
|
1646
|
+
description: 'Marketing header navigation with brand, links and actions.',
|
|
1647
|
+
package: '@noe/ui',
|
|
1648
|
+
registryItem: 'marketing-header',
|
|
1649
|
+
preview: () => (
|
|
1650
|
+
<MarketingHeader
|
|
1651
|
+
brand={<span>NOE</span>}
|
|
1652
|
+
links={
|
|
1653
|
+
<>
|
|
1654
|
+
<a href="/product">Product</a>
|
|
1655
|
+
<a href="/pricing">Pricing</a>
|
|
1656
|
+
</>
|
|
1657
|
+
}
|
|
1658
|
+
actions={<Button size="sm">Sign in</Button>}
|
|
1659
|
+
/>
|
|
1660
|
+
),
|
|
1661
|
+
},
|
|
1662
|
+
{
|
|
1663
|
+
id: 'landing-page',
|
|
1664
|
+
category: 'Marketing / Pages',
|
|
1665
|
+
status: statusOf('landing-page'),
|
|
1666
|
+
name: 'Landing Page',
|
|
1667
|
+
description: 'Marketing landing page composition from header, hero and sections.',
|
|
1668
|
+
package: '@noe/ui',
|
|
1669
|
+
registryItem: 'landing-page',
|
|
1670
|
+
preview: () => (
|
|
1671
|
+
<div style={{ height: '20rem' }}>
|
|
1672
|
+
<LandingPage />
|
|
1673
|
+
</div>
|
|
1674
|
+
),
|
|
1675
|
+
},
|
|
1676
|
+
|
|
1677
|
+
{
|
|
1678
|
+
id: 'avatar',
|
|
1679
|
+
category: 'Base / Identity',
|
|
1680
|
+
status: statusOf('avatar'),
|
|
1681
|
+
name: 'Avatar',
|
|
1682
|
+
description:
|
|
1683
|
+
'Avatar \u2014 Base / Identity component. avatar provides base / identity behavior with RTL, i18n and accessibility built-in.',
|
|
1684
|
+
package: '@noe/ui',
|
|
1685
|
+
registryItem: 'avatar',
|
|
1686
|
+
preview: () => <Avatar />,
|
|
1687
|
+
},
|
|
1688
|
+
|
|
1689
|
+
{
|
|
1690
|
+
id: 'badge-group',
|
|
1691
|
+
category: 'Base / Identity',
|
|
1692
|
+
status: statusOf('badge-group'),
|
|
1693
|
+
name: 'Badge Group',
|
|
1694
|
+
description:
|
|
1695
|
+
'Badge Group \u2014 Base / Identity component. badge-group provides base / identity behavior with RTL, i18n and accessibility built-in.',
|
|
1696
|
+
package: '@noe/ui',
|
|
1697
|
+
registryItem: 'badge-group',
|
|
1698
|
+
preview: () => <BadgeGroup />,
|
|
1699
|
+
},
|
|
1700
|
+
|
|
1701
|
+
{
|
|
1702
|
+
id: 'button-group',
|
|
1703
|
+
category: 'Base / Actions',
|
|
1704
|
+
status: statusOf('button-group'),
|
|
1705
|
+
name: 'Button Group',
|
|
1706
|
+
description:
|
|
1707
|
+
'Button Group \u2014 Base / Actions component. button-group provides base / actions behavior with RTL, i18n and accessibility built-in.',
|
|
1708
|
+
package: '@noe/ui',
|
|
1709
|
+
registryItem: 'button-group',
|
|
1710
|
+
preview: () => <ButtonGroup />,
|
|
1711
|
+
},
|
|
1712
|
+
|
|
1713
|
+
{
|
|
1714
|
+
id: 'checkbox',
|
|
1715
|
+
category: 'Base / Forms',
|
|
1716
|
+
status: statusOf('checkbox'),
|
|
1717
|
+
name: 'Checkbox',
|
|
1718
|
+
description:
|
|
1719
|
+
'Checkbox \u2014 Base / Forms component. checkbox provides base / forms behavior with RTL, i18n and accessibility built-in.',
|
|
1720
|
+
package: '@noe/ui',
|
|
1721
|
+
registryItem: 'checkbox',
|
|
1722
|
+
preview: () => <Checkbox />,
|
|
1723
|
+
},
|
|
1724
|
+
|
|
1725
|
+
{
|
|
1726
|
+
id: 'radio-group',
|
|
1727
|
+
category: 'Base / Forms',
|
|
1728
|
+
status: statusOf('radio-group'),
|
|
1729
|
+
name: 'Radio Group',
|
|
1730
|
+
description:
|
|
1731
|
+
'Radio Group \u2014 Base / Forms component. radio-group provides base / forms behavior with RTL, i18n and accessibility built-in.',
|
|
1732
|
+
package: '@noe/ui',
|
|
1733
|
+
registryItem: 'radio-group',
|
|
1734
|
+
preview: () => <RadioGroup />,
|
|
1735
|
+
},
|
|
1736
|
+
|
|
1737
|
+
{
|
|
1738
|
+
id: 'toggle',
|
|
1739
|
+
category: 'Base / Forms',
|
|
1740
|
+
status: statusOf('toggle'),
|
|
1741
|
+
name: 'Toggle',
|
|
1742
|
+
description:
|
|
1743
|
+
'Toggle \u2014 Base / Forms component. toggle provides base / forms behavior with RTL, i18n and accessibility built-in.',
|
|
1744
|
+
package: '@noe/ui',
|
|
1745
|
+
registryItem: 'toggle',
|
|
1746
|
+
preview: () => <Toggle />,
|
|
1747
|
+
},
|
|
1748
|
+
|
|
1749
|
+
{
|
|
1750
|
+
id: 'select',
|
|
1751
|
+
category: 'Base / Forms',
|
|
1752
|
+
status: statusOf('select'),
|
|
1753
|
+
name: 'Select',
|
|
1754
|
+
description:
|
|
1755
|
+
'Select \u2014 Base / Forms component. select provides base / forms behavior with RTL, i18n and accessibility built-in.',
|
|
1756
|
+
package: '@noe/ui',
|
|
1757
|
+
registryItem: 'select',
|
|
1758
|
+
preview: () => <Select />,
|
|
1759
|
+
},
|
|
1760
|
+
|
|
1761
|
+
{
|
|
1762
|
+
id: 'multi-select',
|
|
1763
|
+
category: 'Base / Forms',
|
|
1764
|
+
status: statusOf('multi-select'),
|
|
1765
|
+
name: 'Multi Select',
|
|
1766
|
+
description:
|
|
1767
|
+
'Multi Select \u2014 Base / Forms component. multi-select provides base / forms behavior with RTL, i18n and accessibility built-in.',
|
|
1768
|
+
package: '@noe/ui',
|
|
1769
|
+
registryItem: 'multi-select',
|
|
1770
|
+
preview: () => <MultiSelect />,
|
|
1771
|
+
},
|
|
1772
|
+
|
|
1773
|
+
{
|
|
1774
|
+
id: 'slider',
|
|
1775
|
+
category: 'Base / Forms',
|
|
1776
|
+
status: statusOf('slider'),
|
|
1777
|
+
name: 'Slider',
|
|
1778
|
+
description:
|
|
1779
|
+
'Slider \u2014 Base / Forms component. slider provides base / forms behavior with RTL, i18n and accessibility built-in.',
|
|
1780
|
+
package: '@noe/ui',
|
|
1781
|
+
registryItem: 'slider',
|
|
1782
|
+
preview: () => <Slider />,
|
|
1783
|
+
},
|
|
1784
|
+
|
|
1785
|
+
{
|
|
1786
|
+
id: 'tags',
|
|
1787
|
+
category: 'Base / Forms',
|
|
1788
|
+
status: statusOf('tags'),
|
|
1789
|
+
name: 'Tags',
|
|
1790
|
+
description:
|
|
1791
|
+
'Tags \u2014 Base / Forms component. tags provides base / forms behavior with RTL, i18n and accessibility built-in.',
|
|
1792
|
+
package: '@noe/ui',
|
|
1793
|
+
registryItem: 'tags',
|
|
1794
|
+
preview: () => <Tags />,
|
|
1795
|
+
},
|
|
1796
|
+
|
|
1797
|
+
{
|
|
1798
|
+
id: 'verification-code',
|
|
1799
|
+
category: 'Base / Forms',
|
|
1800
|
+
status: statusOf('verification-code'),
|
|
1801
|
+
name: 'Verification Code',
|
|
1802
|
+
description:
|
|
1803
|
+
'Verification Code \u2014 Base / Forms component. verification-code provides base / forms behavior with RTL, i18n and accessibility built-in.',
|
|
1804
|
+
package: '@noe/ui',
|
|
1805
|
+
registryItem: 'verification-code',
|
|
1806
|
+
preview: () => <VerificationCode />,
|
|
1807
|
+
},
|
|
1808
|
+
|
|
1809
|
+
{
|
|
1810
|
+
id: 'calendar',
|
|
1811
|
+
category: 'Base / Pickers',
|
|
1812
|
+
status: statusOf('calendar'),
|
|
1813
|
+
name: 'Calendar',
|
|
1814
|
+
description:
|
|
1815
|
+
'Calendar \u2014 Base / Pickers component. calendar provides base / pickers behavior with RTL, i18n and accessibility built-in.',
|
|
1816
|
+
package: '@noe/ui',
|
|
1817
|
+
registryItem: 'calendar',
|
|
1818
|
+
preview: () => <Calendar />,
|
|
1819
|
+
},
|
|
1820
|
+
|
|
1821
|
+
{
|
|
1822
|
+
id: 'date-picker',
|
|
1823
|
+
category: 'Base / Pickers',
|
|
1824
|
+
status: statusOf('date-picker'),
|
|
1825
|
+
name: 'Date Picker',
|
|
1826
|
+
description:
|
|
1827
|
+
'Date Picker \u2014 Base / Pickers component. date-picker provides base / pickers behavior with RTL, i18n and accessibility built-in.',
|
|
1828
|
+
package: '@noe/ui',
|
|
1829
|
+
registryItem: 'date-picker',
|
|
1830
|
+
preview: () => <DatePicker />,
|
|
1831
|
+
},
|
|
1832
|
+
|
|
1833
|
+
{
|
|
1834
|
+
id: 'color-picker',
|
|
1835
|
+
category: 'Base / Pickers',
|
|
1836
|
+
status: statusOf('color-picker'),
|
|
1837
|
+
name: 'Color Picker',
|
|
1838
|
+
description:
|
|
1839
|
+
'Color Picker \u2014 Base / Pickers component. color-picker provides base / pickers behavior with RTL, i18n and accessibility built-in.',
|
|
1840
|
+
package: '@noe/ui',
|
|
1841
|
+
registryItem: 'color-picker',
|
|
1842
|
+
preview: () => <ColorPicker />,
|
|
1843
|
+
},
|
|
1844
|
+
|
|
1845
|
+
{
|
|
1846
|
+
id: 'file-uploader',
|
|
1847
|
+
category: 'Base / Pickers',
|
|
1848
|
+
status: statusOf('file-uploader'),
|
|
1849
|
+
name: 'File Uploader',
|
|
1850
|
+
description:
|
|
1851
|
+
'File Uploader \u2014 Base / Pickers component. file-uploader provides base / pickers behavior with RTL, i18n and accessibility built-in.',
|
|
1852
|
+
package: '@noe/ui',
|
|
1853
|
+
registryItem: 'file-uploader',
|
|
1854
|
+
preview: () => <FileUploader />,
|
|
1855
|
+
},
|
|
1856
|
+
|
|
1857
|
+
{
|
|
1858
|
+
id: 'rich-text-editor',
|
|
1859
|
+
category: 'Base / Pickers',
|
|
1860
|
+
status: statusOf('rich-text-editor'),
|
|
1861
|
+
name: 'Rich Text Editor',
|
|
1862
|
+
description:
|
|
1863
|
+
'Rich Text Editor \u2014 Base / Pickers component. rich-text-editor provides base / pickers behavior with RTL, i18n and accessibility built-in.',
|
|
1864
|
+
package: '@noe/ui',
|
|
1865
|
+
registryItem: 'rich-text-editor',
|
|
1866
|
+
preview: () => <RichTextEditor />,
|
|
1867
|
+
},
|
|
1868
|
+
|
|
1869
|
+
{
|
|
1870
|
+
id: 'command-menu',
|
|
1871
|
+
category: 'Overlays / Navigation',
|
|
1872
|
+
status: statusOf('command-menu'),
|
|
1873
|
+
name: 'Command Menu',
|
|
1874
|
+
description:
|
|
1875
|
+
'Command Menu \u2014 Overlays / Navigation component. command-menu provides overlays / navigation behavior with RTL, i18n and accessibility built-in.',
|
|
1876
|
+
package: '@noe/ui',
|
|
1877
|
+
registryItem: 'command-menu',
|
|
1878
|
+
preview: () => <CommandMenu />,
|
|
1879
|
+
},
|
|
1880
|
+
|
|
1881
|
+
{
|
|
1882
|
+
id: 'tree-view',
|
|
1883
|
+
category: 'Navigation / Disclosure',
|
|
1884
|
+
status: statusOf('tree-view'),
|
|
1885
|
+
name: 'Tree View',
|
|
1886
|
+
description:
|
|
1887
|
+
'Tree View \u2014 Navigation / Disclosure component. tree-view provides navigation / disclosure behavior with RTL, i18n and accessibility built-in.',
|
|
1888
|
+
package: '@noe/ui',
|
|
1889
|
+
registryItem: 'tree-view',
|
|
1890
|
+
preview: () => <TreeView />,
|
|
1891
|
+
},
|
|
1892
|
+
|
|
1893
|
+
{
|
|
1894
|
+
id: 'carousel',
|
|
1895
|
+
category: 'Navigation / Disclosure',
|
|
1896
|
+
status: statusOf('carousel'),
|
|
1897
|
+
name: 'Carousel',
|
|
1898
|
+
description:
|
|
1899
|
+
'Carousel \u2014 Navigation / Disclosure component. carousel provides navigation / disclosure behavior with RTL, i18n and accessibility built-in.',
|
|
1900
|
+
package: '@noe/ui',
|
|
1901
|
+
registryItem: 'carousel',
|
|
1902
|
+
preview: () => <Carousel />,
|
|
1903
|
+
},
|
|
1904
|
+
|
|
1905
|
+
{
|
|
1906
|
+
id: 'content-divider',
|
|
1907
|
+
category: 'Primitives / Layout',
|
|
1908
|
+
status: statusOf('content-divider'),
|
|
1909
|
+
name: 'Content Divider',
|
|
1910
|
+
description:
|
|
1911
|
+
'Content Divider \u2014 Primitives / Layout component. content-divider provides primitives / layout behavior with RTL, i18n and accessibility built-in.',
|
|
1912
|
+
package: '@noe/ui',
|
|
1913
|
+
registryItem: 'content-divider',
|
|
1914
|
+
preview: () => <ContentDivider />,
|
|
1915
|
+
},
|
|
1916
|
+
|
|
1917
|
+
{
|
|
1918
|
+
id: 'section-footer',
|
|
1919
|
+
category: 'Patterns / Application',
|
|
1920
|
+
status: statusOf('section-footer'),
|
|
1921
|
+
name: 'Section Footer',
|
|
1922
|
+
description:
|
|
1923
|
+
'Section Footer \u2014 Patterns / Application component. section-footer provides patterns / application behavior with RTL, i18n and accessibility built-in.',
|
|
1924
|
+
package: '@noe/ui',
|
|
1925
|
+
registryItem: 'section-footer',
|
|
1926
|
+
preview: () => <SectionFooter />,
|
|
1927
|
+
},
|
|
1928
|
+
|
|
1929
|
+
{
|
|
1930
|
+
id: 'notification',
|
|
1931
|
+
category: 'Feedback / Notifications',
|
|
1932
|
+
status: statusOf('notification'),
|
|
1933
|
+
name: 'Notification',
|
|
1934
|
+
description:
|
|
1935
|
+
'Notification \u2014 Feedback / Notifications component. notification provides feedback / notifications behavior with RTL, i18n and accessibility built-in.',
|
|
1936
|
+
package: '@noe/ui',
|
|
1937
|
+
registryItem: 'notification',
|
|
1938
|
+
preview: () => <Notification />,
|
|
1939
|
+
},
|
|
1940
|
+
|
|
1941
|
+
{
|
|
1942
|
+
id: 'activity-gauge',
|
|
1943
|
+
category: 'Data / Visualization',
|
|
1944
|
+
status: statusOf('activity-gauge'),
|
|
1945
|
+
name: 'Activity Gauge',
|
|
1946
|
+
description:
|
|
1947
|
+
'Activity Gauge \u2014 Data / Visualization component. activity-gauge provides data / visualization behavior with RTL, i18n and accessibility built-in.',
|
|
1948
|
+
package: '@noe/data-ui',
|
|
1949
|
+
registryItem: 'activity-gauge',
|
|
1950
|
+
preview: () => <ActivityGauge />,
|
|
1951
|
+
},
|
|
1952
|
+
|
|
1953
|
+
{
|
|
1954
|
+
id: 'pie-chart',
|
|
1955
|
+
category: 'Data / Visualization',
|
|
1956
|
+
status: statusOf('pie-chart'),
|
|
1957
|
+
name: 'Pie Chart',
|
|
1958
|
+
description:
|
|
1959
|
+
'Pie Chart \u2014 Data / Visualization component. pie-chart provides data / visualization behavior with RTL, i18n and accessibility built-in.',
|
|
1960
|
+
package: '@noe/data-ui',
|
|
1961
|
+
registryItem: 'pie-chart',
|
|
1962
|
+
preview: () => <PieChart />,
|
|
1963
|
+
},
|
|
1964
|
+
|
|
1965
|
+
{
|
|
1966
|
+
id: 'radar-chart',
|
|
1967
|
+
category: 'Data / Visualization',
|
|
1968
|
+
status: statusOf('radar-chart'),
|
|
1969
|
+
name: 'Radar Chart',
|
|
1970
|
+
description:
|
|
1971
|
+
'Radar Chart \u2014 Data / Visualization component. radar-chart provides data / visualization behavior with RTL, i18n and accessibility built-in.',
|
|
1972
|
+
package: '@noe/data-ui',
|
|
1973
|
+
registryItem: 'radar-chart',
|
|
1974
|
+
preview: () => <RadarChart />,
|
|
1975
|
+
},
|
|
1976
|
+
|
|
1977
|
+
{
|
|
1978
|
+
id: 'credit-card',
|
|
1979
|
+
category: 'Base / Identity',
|
|
1980
|
+
status: statusOf('credit-card'),
|
|
1981
|
+
name: 'Credit Card',
|
|
1982
|
+
description:
|
|
1983
|
+
'Credit Card \u2014 Base / Identity component. credit-card provides base / identity behavior with RTL, i18n and accessibility built-in.',
|
|
1984
|
+
package: '@noe/ui',
|
|
1985
|
+
registryItem: 'credit-card',
|
|
1986
|
+
preview: () => <CreditCard />,
|
|
1987
|
+
},
|
|
1988
|
+
|
|
1989
|
+
{
|
|
1990
|
+
id: 'qr-code',
|
|
1991
|
+
category: 'Base / Identity',
|
|
1992
|
+
status: statusOf('qr-code'),
|
|
1993
|
+
name: 'Qr Code',
|
|
1994
|
+
description:
|
|
1995
|
+
'Qr Code \u2014 Base / Identity component. qr-code provides base / identity behavior with RTL, i18n and accessibility built-in.',
|
|
1996
|
+
package: '@noe/ui',
|
|
1997
|
+
registryItem: 'qr-code',
|
|
1998
|
+
preview: () => <QrCode />,
|
|
1999
|
+
},
|
|
2000
|
+
|
|
2001
|
+
{
|
|
2002
|
+
id: 'rating',
|
|
2003
|
+
category: 'Base / Identity',
|
|
2004
|
+
status: statusOf('rating'),
|
|
2005
|
+
name: 'Rating',
|
|
2006
|
+
description:
|
|
2007
|
+
'Rating \u2014 Base / Identity component. rating provides base / identity behavior with RTL, i18n and accessibility built-in.',
|
|
2008
|
+
package: '@noe/ui',
|
|
2009
|
+
registryItem: 'rating',
|
|
2010
|
+
preview: () => <Rating />,
|
|
2011
|
+
},
|
|
2012
|
+
|
|
2013
|
+
{
|
|
2014
|
+
id: 'video-player',
|
|
2015
|
+
category: 'Base / Media',
|
|
2016
|
+
status: statusOf('video-player'),
|
|
2017
|
+
name: 'Video Player',
|
|
2018
|
+
description:
|
|
2019
|
+
'Video Player \u2014 Base / Media component. video-player provides base / media behavior with RTL, i18n and accessibility built-in.',
|
|
2020
|
+
package: '@noe/ui',
|
|
2021
|
+
registryItem: 'video-player',
|
|
2022
|
+
preview: () => <VideoPlayer />,
|
|
2023
|
+
},
|
|
2024
|
+
|
|
2025
|
+
{
|
|
2026
|
+
id: 'illustration',
|
|
2027
|
+
category: 'Base / Media',
|
|
2028
|
+
status: statusOf('illustration'),
|
|
2029
|
+
name: 'Illustration',
|
|
2030
|
+
description:
|
|
2031
|
+
'Illustration \u2014 Base / Media component. illustration provides base / media behavior with RTL, i18n and accessibility built-in.',
|
|
2032
|
+
package: '@noe/ui',
|
|
2033
|
+
registryItem: 'illustration',
|
|
2034
|
+
preview: () => <Illustration />,
|
|
2035
|
+
},
|
|
2036
|
+
|
|
2037
|
+
{
|
|
2038
|
+
id: 'store-button',
|
|
2039
|
+
category: 'Base / Identity',
|
|
2040
|
+
status: statusOf('store-button'),
|
|
2041
|
+
name: 'Store Button',
|
|
2042
|
+
description:
|
|
2043
|
+
'Store Button \u2014 Base / Identity component. store-button provides base / identity behavior with RTL, i18n and accessibility built-in.',
|
|
2044
|
+
package: '@noe/ui',
|
|
2045
|
+
registryItem: 'store-button',
|
|
2046
|
+
preview: () => <StoreButton />,
|
|
2047
|
+
},
|
|
2048
|
+
|
|
2049
|
+
{
|
|
2050
|
+
id: 'social-button',
|
|
2051
|
+
category: 'Base / Identity',
|
|
2052
|
+
status: statusOf('social-button'),
|
|
2053
|
+
name: 'Social Button',
|
|
2054
|
+
description:
|
|
2055
|
+
'Social Button \u2014 Base / Identity component. social-button provides base / identity behavior with RTL, i18n and accessibility built-in.',
|
|
2056
|
+
package: '@noe/ui',
|
|
2057
|
+
registryItem: 'social-button',
|
|
2058
|
+
preview: () => <SocialButton />,
|
|
2059
|
+
},
|
|
2060
|
+
|
|
2061
|
+
{
|
|
2062
|
+
id: 'progress-indicator',
|
|
2063
|
+
category: 'Base / Feedback',
|
|
2064
|
+
status: statusOf('progress-indicator'),
|
|
2065
|
+
name: 'Progress Indicator',
|
|
2066
|
+
description:
|
|
2067
|
+
'Progress Indicator \u2014 Base / Feedback component. progress-indicator provides base / feedback behavior with RTL, i18n and accessibility built-in.',
|
|
2068
|
+
package: '@noe/ui',
|
|
2069
|
+
registryItem: 'progress-indicator',
|
|
2070
|
+
preview: () => <ProgressIndicator />,
|
|
2071
|
+
},
|
|
2072
|
+
|
|
2073
|
+
{
|
|
2074
|
+
id: 'sign-up-page',
|
|
2075
|
+
category: 'Shared / Auth',
|
|
2076
|
+
status: statusOf('sign-up-page'),
|
|
2077
|
+
name: 'Sign Up Page',
|
|
2078
|
+
description:
|
|
2079
|
+
'Sign Up Page \u2014 Shared / Auth component. sign-up-page provides shared / auth behavior with RTL, i18n and accessibility built-in.',
|
|
2080
|
+
package: '@noe/ui',
|
|
2081
|
+
registryItem: 'sign-up-page',
|
|
2082
|
+
preview: () => <SignUpPage />,
|
|
2083
|
+
},
|
|
2084
|
+
|
|
2085
|
+
{
|
|
2086
|
+
id: 'verification-page',
|
|
2087
|
+
category: 'Shared / Auth',
|
|
2088
|
+
status: statusOf('verification-page'),
|
|
2089
|
+
name: 'Verification Page',
|
|
2090
|
+
description:
|
|
2091
|
+
'Verification Page \u2014 Shared / Auth component. verification-page provides shared / auth behavior with RTL, i18n and accessibility built-in.',
|
|
2092
|
+
package: '@noe/ui',
|
|
2093
|
+
registryItem: 'verification-page',
|
|
2094
|
+
preview: () => <VerificationPage />,
|
|
2095
|
+
},
|
|
2096
|
+
|
|
2097
|
+
{
|
|
2098
|
+
id: 'forgot-password-page',
|
|
2099
|
+
category: 'Shared / Auth',
|
|
2100
|
+
status: statusOf('forgot-password-page'),
|
|
2101
|
+
name: 'Forgot Password Page',
|
|
2102
|
+
description:
|
|
2103
|
+
'Forgot Password Page \u2014 Shared / Auth component. forgot-password-page provides shared / auth behavior with RTL, i18n and accessibility built-in.',
|
|
2104
|
+
package: '@noe/ui',
|
|
2105
|
+
registryItem: 'forgot-password-page',
|
|
2106
|
+
preview: () => <ForgotPasswordPage />,
|
|
2107
|
+
},
|
|
2108
|
+
|
|
2109
|
+
{
|
|
2110
|
+
id: 'email-template',
|
|
2111
|
+
category: 'Shared / Auth',
|
|
2112
|
+
status: statusOf('email-template'),
|
|
2113
|
+
name: 'Email Template',
|
|
2114
|
+
description:
|
|
2115
|
+
'Email Template \u2014 Shared / Auth component. email-template provides shared / auth behavior with RTL, i18n and accessibility built-in.',
|
|
2116
|
+
package: '@noe/ui',
|
|
2117
|
+
registryItem: 'email-template',
|
|
2118
|
+
preview: () => <EmailTemplate />,
|
|
2119
|
+
},
|
|
2120
|
+
|
|
2121
|
+
{
|
|
2122
|
+
id: 'informational-page-01',
|
|
2123
|
+
category: 'Application Examples',
|
|
2124
|
+
status: statusOf('informational-page-01'),
|
|
2125
|
+
name: 'Informational Page 01',
|
|
2126
|
+
description:
|
|
2127
|
+
'Informational Page 01 \u2014 Application Examples component. informational-page-01 provides application examples behavior with RTL, i18n and accessibility built-in.',
|
|
2128
|
+
package: '@noe/ui',
|
|
2129
|
+
registryItem: 'informational-page-01',
|
|
2130
|
+
preview: () => <InformationalPage01 />,
|
|
2131
|
+
},
|
|
2132
|
+
|
|
2133
|
+
{
|
|
2134
|
+
id: 'informational-page-02',
|
|
2135
|
+
category: 'Application Examples',
|
|
2136
|
+
status: statusOf('informational-page-02'),
|
|
2137
|
+
name: 'Informational Page 02',
|
|
2138
|
+
description:
|
|
2139
|
+
'Informational Page 02 \u2014 Application Examples component. informational-page-02 provides application examples behavior with RTL, i18n and accessibility built-in.',
|
|
2140
|
+
package: '@noe/ui',
|
|
2141
|
+
registryItem: 'informational-page-02',
|
|
2142
|
+
preview: () => <InformationalPage02 />,
|
|
2143
|
+
},
|
|
2144
|
+
|
|
2145
|
+
{
|
|
2146
|
+
id: 'banner',
|
|
2147
|
+
category: 'Marketing / Banner',
|
|
2148
|
+
status: statusOf('banner'),
|
|
2149
|
+
name: 'Banner',
|
|
2150
|
+
description:
|
|
2151
|
+
'Banner \u2014 Marketing / Banner component. banner provides marketing / banner behavior with RTL, i18n and accessibility built-in.',
|
|
2152
|
+
package: '@noe/ui',
|
|
2153
|
+
registryItem: 'banner',
|
|
2154
|
+
preview: () => <Banner />,
|
|
2155
|
+
},
|
|
2156
|
+
|
|
2157
|
+
{
|
|
2158
|
+
id: 'blog-section',
|
|
2159
|
+
category: 'Marketing / Blog',
|
|
2160
|
+
status: statusOf('blog-section'),
|
|
2161
|
+
name: 'Blog Section',
|
|
2162
|
+
description:
|
|
2163
|
+
'Blog Section \u2014 Marketing / Blog component. blog-section provides marketing / blog behavior with RTL, i18n and accessibility built-in.',
|
|
2164
|
+
package: '@noe/ui',
|
|
2165
|
+
registryItem: 'blog-section',
|
|
2166
|
+
preview: () => <BlogSection />,
|
|
2167
|
+
},
|
|
2168
|
+
|
|
2169
|
+
{
|
|
2170
|
+
id: 'careers-section',
|
|
2171
|
+
category: 'Marketing / Careers',
|
|
2172
|
+
status: statusOf('careers-section'),
|
|
2173
|
+
name: 'Careers Section',
|
|
2174
|
+
description:
|
|
2175
|
+
'Careers Section \u2014 Marketing / Careers component. careers-section provides marketing / careers behavior with RTL, i18n and accessibility built-in.',
|
|
2176
|
+
package: '@noe/ui',
|
|
2177
|
+
registryItem: 'careers-section',
|
|
2178
|
+
preview: () => <CareersSection />,
|
|
2179
|
+
},
|
|
2180
|
+
|
|
2181
|
+
{
|
|
2182
|
+
id: 'contact-section',
|
|
2183
|
+
category: 'Marketing / Contact',
|
|
2184
|
+
status: statusOf('contact-section'),
|
|
2185
|
+
name: 'Contact Section',
|
|
2186
|
+
description:
|
|
2187
|
+
'Contact Section \u2014 Marketing / Contact component. contact-section provides marketing / contact behavior with RTL, i18n and accessibility built-in.',
|
|
2188
|
+
package: '@noe/ui',
|
|
2189
|
+
registryItem: 'contact-section',
|
|
2190
|
+
preview: () => <ContactSection />,
|
|
2191
|
+
},
|
|
2192
|
+
|
|
2193
|
+
{
|
|
2194
|
+
id: 'content-section',
|
|
2195
|
+
category: 'Marketing / Content',
|
|
2196
|
+
status: statusOf('content-section'),
|
|
2197
|
+
name: 'Content Section',
|
|
2198
|
+
description:
|
|
2199
|
+
'Content Section \u2014 Marketing / Content component. content-section provides marketing / content behavior with RTL, i18n and accessibility built-in.',
|
|
2200
|
+
package: '@noe/ui',
|
|
2201
|
+
registryItem: 'content-section',
|
|
2202
|
+
preview: () => <ContentSection />,
|
|
2203
|
+
},
|
|
2204
|
+
|
|
2205
|
+
{
|
|
2206
|
+
id: 'cta-section',
|
|
2207
|
+
category: 'Marketing / CTA',
|
|
2208
|
+
status: statusOf('cta-section'),
|
|
2209
|
+
name: 'Cta Section',
|
|
2210
|
+
description:
|
|
2211
|
+
'Cta Section \u2014 Marketing / CTA component. cta-section provides marketing / cta behavior with RTL, i18n and accessibility built-in.',
|
|
2212
|
+
package: '@noe/ui',
|
|
2213
|
+
registryItem: 'cta-section',
|
|
2214
|
+
preview: () => <CtaSection />,
|
|
2215
|
+
},
|
|
2216
|
+
|
|
2217
|
+
{
|
|
2218
|
+
id: 'faq-section',
|
|
2219
|
+
category: 'Marketing / FAQ',
|
|
2220
|
+
status: statusOf('faq-section'),
|
|
2221
|
+
name: 'Faq Section',
|
|
2222
|
+
description:
|
|
2223
|
+
'Faq Section \u2014 Marketing / FAQ component. faq-section provides marketing / faq behavior with RTL, i18n and accessibility built-in.',
|
|
2224
|
+
package: '@noe/ui',
|
|
2225
|
+
registryItem: 'faq-section',
|
|
2226
|
+
preview: () => <FaqSection />,
|
|
2227
|
+
},
|
|
2228
|
+
|
|
2229
|
+
{
|
|
2230
|
+
id: 'feature-section',
|
|
2231
|
+
category: 'Marketing / Features',
|
|
2232
|
+
status: statusOf('feature-section'),
|
|
2233
|
+
name: 'Feature Section',
|
|
2234
|
+
description:
|
|
2235
|
+
'Feature Section \u2014 Marketing / Features component. feature-section provides marketing / features behavior with RTL, i18n and accessibility built-in.',
|
|
2236
|
+
package: '@noe/ui',
|
|
2237
|
+
registryItem: 'feature-section',
|
|
2238
|
+
preview: () => <FeatureSection />,
|
|
2239
|
+
},
|
|
2240
|
+
|
|
2241
|
+
{
|
|
2242
|
+
id: 'footer',
|
|
2243
|
+
category: 'Marketing / Footer',
|
|
2244
|
+
status: statusOf('footer'),
|
|
2245
|
+
name: 'Footer',
|
|
2246
|
+
description:
|
|
2247
|
+
'Footer \u2014 Marketing / Footer component. footer provides marketing / footer behavior with RTL, i18n and accessibility built-in.',
|
|
2248
|
+
package: '@noe/ui',
|
|
2249
|
+
registryItem: 'footer',
|
|
2250
|
+
preview: () => <Footer />,
|
|
2251
|
+
},
|
|
2252
|
+
|
|
2253
|
+
{
|
|
2254
|
+
id: 'metrics-section',
|
|
2255
|
+
category: 'Marketing / Metrics',
|
|
2256
|
+
status: statusOf('metrics-section'),
|
|
2257
|
+
name: 'Metrics Section',
|
|
2258
|
+
description:
|
|
2259
|
+
'Metrics Section \u2014 Marketing / Metrics component. metrics-section provides marketing / metrics behavior with RTL, i18n and accessibility built-in.',
|
|
2260
|
+
package: '@noe/ui',
|
|
2261
|
+
registryItem: 'metrics-section',
|
|
2262
|
+
preview: () => <MetricsSection />,
|
|
2263
|
+
},
|
|
2264
|
+
|
|
2265
|
+
{
|
|
2266
|
+
id: 'newsletter',
|
|
2267
|
+
category: 'Marketing / Newsletter',
|
|
2268
|
+
status: statusOf('newsletter'),
|
|
2269
|
+
name: 'Newsletter',
|
|
2270
|
+
description:
|
|
2271
|
+
'Newsletter \u2014 Marketing / Newsletter component. newsletter provides marketing / newsletter behavior with RTL, i18n and accessibility built-in.',
|
|
2272
|
+
package: '@noe/ui',
|
|
2273
|
+
registryItem: 'newsletter',
|
|
2274
|
+
preview: () => <Newsletter />,
|
|
2275
|
+
},
|
|
2276
|
+
|
|
2277
|
+
{
|
|
2278
|
+
id: 'pricing-section',
|
|
2279
|
+
category: 'Marketing / Pricing',
|
|
2280
|
+
status: statusOf('pricing-section'),
|
|
2281
|
+
name: 'Pricing Section',
|
|
2282
|
+
description:
|
|
2283
|
+
'Pricing Section \u2014 Marketing / Pricing component. pricing-section provides marketing / pricing behavior with RTL, i18n and accessibility built-in.',
|
|
2284
|
+
package: '@noe/ui',
|
|
2285
|
+
registryItem: 'pricing-section',
|
|
2286
|
+
preview: () => <PricingSection />,
|
|
2287
|
+
},
|
|
2288
|
+
|
|
2289
|
+
{
|
|
2290
|
+
id: 'social-proof',
|
|
2291
|
+
category: 'Marketing / Social',
|
|
2292
|
+
status: statusOf('social-proof'),
|
|
2293
|
+
name: 'Social Proof',
|
|
2294
|
+
description:
|
|
2295
|
+
'Social Proof \u2014 Marketing / Social component. social-proof provides marketing / social behavior with RTL, i18n and accessibility built-in.',
|
|
2296
|
+
package: '@noe/ui',
|
|
2297
|
+
registryItem: 'social-proof',
|
|
2298
|
+
preview: () => <SocialProof />,
|
|
2299
|
+
},
|
|
2300
|
+
|
|
2301
|
+
{
|
|
2302
|
+
id: 'team-section',
|
|
2303
|
+
category: 'Marketing / Team',
|
|
2304
|
+
status: statusOf('team-section'),
|
|
2305
|
+
name: 'Team Section',
|
|
2306
|
+
description:
|
|
2307
|
+
'Team Section \u2014 Marketing / Team component. team-section provides marketing / team behavior with RTL, i18n and accessibility built-in.',
|
|
2308
|
+
package: '@noe/ui',
|
|
2309
|
+
registryItem: 'team-section',
|
|
2310
|
+
preview: () => <TeamSection />,
|
|
2311
|
+
},
|
|
2312
|
+
|
|
2313
|
+
{
|
|
2314
|
+
id: 'testimonial-section',
|
|
2315
|
+
category: 'Marketing / Testimonial',
|
|
2316
|
+
status: statusOf('testimonial-section'),
|
|
2317
|
+
name: 'Testimonial Section',
|
|
2318
|
+
description:
|
|
2319
|
+
'Testimonial Section \u2014 Marketing / Testimonial component. testimonial-section provides marketing / testimonial behavior with RTL, i18n and accessibility built-in.',
|
|
2320
|
+
package: '@noe/ui',
|
|
2321
|
+
registryItem: 'testimonial-section',
|
|
2322
|
+
preview: () => <TestimonialSection />,
|
|
2323
|
+
},
|
|
2324
|
+
|
|
2325
|
+
{
|
|
2326
|
+
id: 'about-page',
|
|
2327
|
+
category: 'Marketing / Pages',
|
|
2328
|
+
status: statusOf('about-page'),
|
|
2329
|
+
name: 'About Page',
|
|
2330
|
+
description:
|
|
2331
|
+
'About Page \u2014 Marketing / Pages component. about-page provides marketing / pages behavior with RTL, i18n and accessibility built-in.',
|
|
2332
|
+
package: '@noe/ui',
|
|
2333
|
+
registryItem: 'about-page',
|
|
2334
|
+
preview: () => <AboutPage />,
|
|
2335
|
+
},
|
|
2336
|
+
|
|
2337
|
+
{
|
|
2338
|
+
id: 'blog-post-page',
|
|
2339
|
+
category: 'Marketing / Pages',
|
|
2340
|
+
status: statusOf('blog-post-page'),
|
|
2341
|
+
name: 'Blog Post Page',
|
|
2342
|
+
description:
|
|
2343
|
+
'Blog Post Page \u2014 Marketing / Pages component. blog-post-page provides marketing / pages behavior with RTL, i18n and accessibility built-in.',
|
|
2344
|
+
package: '@noe/ui',
|
|
2345
|
+
registryItem: 'blog-post-page',
|
|
2346
|
+
preview: () => <BlogPostPage />,
|
|
2347
|
+
},
|
|
2348
|
+
|
|
2349
|
+
{
|
|
2350
|
+
id: 'blog-index-page',
|
|
2351
|
+
category: 'Marketing / Pages',
|
|
2352
|
+
status: statusOf('blog-index-page'),
|
|
2353
|
+
name: 'Blog Index Page',
|
|
2354
|
+
description:
|
|
2355
|
+
'Blog Index Page \u2014 Marketing / Pages component. blog-index-page provides marketing / pages behavior with RTL, i18n and accessibility built-in.',
|
|
2356
|
+
package: '@noe/ui',
|
|
2357
|
+
registryItem: 'blog-index-page',
|
|
2358
|
+
preview: () => <BlogIndexPage />,
|
|
2359
|
+
},
|
|
2360
|
+
|
|
2361
|
+
{
|
|
2362
|
+
id: 'contact-page',
|
|
2363
|
+
category: 'Marketing / Pages',
|
|
2364
|
+
status: statusOf('contact-page'),
|
|
2365
|
+
name: 'Contact Page',
|
|
2366
|
+
description:
|
|
2367
|
+
'Contact Page \u2014 Marketing / Pages component. contact-page provides marketing / pages behavior with RTL, i18n and accessibility built-in.',
|
|
2368
|
+
package: '@noe/ui',
|
|
2369
|
+
registryItem: 'contact-page',
|
|
2370
|
+
preview: () => <ContactPage />,
|
|
2371
|
+
},
|
|
2372
|
+
|
|
2373
|
+
{
|
|
2374
|
+
id: 'faq-page',
|
|
2375
|
+
category: 'Marketing / Pages',
|
|
2376
|
+
status: statusOf('faq-page'),
|
|
2377
|
+
name: 'Faq Page',
|
|
2378
|
+
description:
|
|
2379
|
+
'Faq Page \u2014 Marketing / Pages component. faq-page provides marketing / pages behavior with RTL, i18n and accessibility built-in.',
|
|
2380
|
+
package: '@noe/ui',
|
|
2381
|
+
registryItem: 'faq-page',
|
|
2382
|
+
preview: () => <FaqPage />,
|
|
2383
|
+
},
|
|
2384
|
+
|
|
2385
|
+
{
|
|
2386
|
+
id: 'legal-page',
|
|
2387
|
+
category: 'Marketing / Pages',
|
|
2388
|
+
status: statusOf('legal-page'),
|
|
2389
|
+
name: 'Legal Page',
|
|
2390
|
+
description:
|
|
2391
|
+
'Legal Page \u2014 Marketing / Pages component. legal-page provides marketing / pages behavior with RTL, i18n and accessibility built-in.',
|
|
2392
|
+
package: '@noe/ui',
|
|
2393
|
+
registryItem: 'legal-page',
|
|
2394
|
+
preview: () => <LegalPage />,
|
|
2395
|
+
},
|
|
2396
|
+
|
|
2397
|
+
{
|
|
2398
|
+
id: 'pricing-page',
|
|
2399
|
+
category: 'Marketing / Pages',
|
|
2400
|
+
status: statusOf('pricing-page'),
|
|
2401
|
+
name: 'Pricing Page',
|
|
2402
|
+
description:
|
|
2403
|
+
'Pricing Page \u2014 Marketing / Pages component. pricing-page provides marketing / pages behavior with RTL, i18n and accessibility built-in.',
|
|
2404
|
+
package: '@noe/ui',
|
|
2405
|
+
registryItem: 'pricing-page',
|
|
2406
|
+
preview: () => <PricingPage />,
|
|
2407
|
+
},
|
|
2408
|
+
|
|
2409
|
+
{
|
|
2410
|
+
id: 'team-page',
|
|
2411
|
+
category: 'Marketing / Pages',
|
|
2412
|
+
status: statusOf('team-page'),
|
|
2413
|
+
name: 'Team Page',
|
|
2414
|
+
description:
|
|
2415
|
+
'Team Page \u2014 Marketing / Pages component. team-page provides marketing / pages behavior with RTL, i18n and accessibility built-in.',
|
|
2416
|
+
package: '@noe/ui',
|
|
2417
|
+
registryItem: 'team-page',
|
|
2418
|
+
preview: () => <TeamPage />,
|
|
2419
|
+
},
|
|
2420
|
+
|
|
2421
|
+
{
|
|
2422
|
+
id: 'marketing-404-page',
|
|
2423
|
+
category: 'Marketing / Pages',
|
|
2424
|
+
status: statusOf('marketing-404-page'),
|
|
2425
|
+
name: 'Marketing 404 Page',
|
|
2426
|
+
description:
|
|
2427
|
+
'Marketing 404 Page \u2014 Marketing / Pages component. marketing-404-page provides marketing / pages behavior with RTL, i18n and accessibility built-in.',
|
|
2428
|
+
package: '@noe/ui',
|
|
2429
|
+
registryItem: 'marketing-404-page',
|
|
2430
|
+
preview: () => <Marketing404Page />,
|
|
2431
|
+
},
|
|
2432
|
+
|
|
2433
|
+
{
|
|
2434
|
+
id: 'ecosystem-motion-showcase',
|
|
2435
|
+
category: 'Cinematic / 3D System',
|
|
2436
|
+
status: statusOf('ecosystem-motion-showcase'),
|
|
2437
|
+
name: 'Ecosystem Motion Showcase',
|
|
2438
|
+
description: 'Three-principle continuous scroll narrative with sticky stage.',
|
|
2439
|
+
package: '@noe/ui',
|
|
2440
|
+
registryItem: 'ecosystem-motion-showcase',
|
|
2441
|
+
preview: () => <div>Ecosystem Motion Showcase</div>,
|
|
2442
|
+
},
|
|
2443
|
+
|
|
2444
|
+
{
|
|
2445
|
+
id: 'gradient-picker',
|
|
2446
|
+
category: 'Application Components',
|
|
2447
|
+
status: statusOf('gradient-picker'),
|
|
2448
|
+
name: 'Gradient Picker',
|
|
2449
|
+
description: 'Gradient picker with two color stops and CSS output, tokenized and accessible.',
|
|
2450
|
+
package: '@noe/ui',
|
|
2451
|
+
registryItem: 'gradient-picker',
|
|
2452
|
+
preview: () => <GradientPicker />,
|
|
2453
|
+
},
|
|
2454
|
+
{
|
|
2455
|
+
id: 'image-picker',
|
|
2456
|
+
category: 'Application Components',
|
|
2457
|
+
status: statusOf('image-picker'),
|
|
2458
|
+
name: 'Image Picker',
|
|
2459
|
+
description: 'Image picker with preview, drag and file input, tokenized and RTL-safe.',
|
|
2460
|
+
package: '@noe/ui',
|
|
2461
|
+
registryItem: 'image-picker',
|
|
2462
|
+
preview: () => <ImagePicker />,
|
|
2463
|
+
},
|
|
2464
|
+
{
|
|
2465
|
+
id: 'inline-cta',
|
|
2466
|
+
category: 'Application Components',
|
|
2467
|
+
status: statusOf('inline-cta'),
|
|
2468
|
+
name: 'Inline CTA',
|
|
2469
|
+
description: 'Inline call to action link with trailing logical chevron, tokenized.',
|
|
2470
|
+
package: '@noe/ui',
|
|
2471
|
+
registryItem: 'inline-cta',
|
|
2472
|
+
preview: () => <InlineCta href="#">Learn more</InlineCta>,
|
|
2473
|
+
},
|
|
2474
|
+
{
|
|
2475
|
+
id: 'ecosystem-sphere',
|
|
2476
|
+
|
|
2477
|
+
category: 'Cinematic / 3D System',
|
|
2478
|
+
status: 'available',
|
|
2479
|
+
name: 'Ecosystem Sphere',
|
|
2480
|
+
description:
|
|
2481
|
+
'Interactive 3-D galaxy with a fixed NO core and independently orbiting capability nodes. Ported from the approved landing repo (NOEcosystem-Frontend-Light-Dark/EcosystemSphere.tsx): pointer-drag rotation, hover detail, keyboard navigation, theme-aware canvas, and reduced-motion compliance.',
|
|
2482
|
+
package: '@noe/ui',
|
|
2483
|
+
registryItem: 'ecosystem-sphere',
|
|
2484
|
+
preview: () => (
|
|
2485
|
+
<div
|
|
2486
|
+
className="rounded-lg border border-border bg-[var(--noe-continuous-canvas)] p-2"
|
|
2487
|
+
style={{ height: '420px' }}
|
|
2488
|
+
>
|
|
2489
|
+
<div
|
|
2490
|
+
style={{
|
|
2491
|
+
height: '100%',
|
|
2492
|
+
border: '1px solid rgba(255,255,255,0.08)',
|
|
2493
|
+
background: 'var(--noe-continuous-canvas)',
|
|
2494
|
+
position: 'relative',
|
|
2495
|
+
overflow: 'hidden',
|
|
2496
|
+
}}
|
|
2497
|
+
>
|
|
2498
|
+
<div
|
|
2499
|
+
className="noe-reactor"
|
|
2500
|
+
style={{ width: '100%', height: '100%', position: 'relative' }}
|
|
2501
|
+
>
|
|
2502
|
+
<div className="noe-reactor-aura" aria-hidden="true" />
|
|
2503
|
+
<div className="noe-reactor-ring ring-outer" aria-hidden="true" />
|
|
2504
|
+
<div className="noe-reactor-ring ring-mid" aria-hidden="true" />
|
|
2505
|
+
<div className="noe-reactor-ring ring-inner" aria-hidden="true" />
|
|
2506
|
+
<div className="noe-reactor-arcs" aria-hidden="true">
|
|
2507
|
+
<i />
|
|
2508
|
+
<i />
|
|
2509
|
+
<i />
|
|
2510
|
+
<i />
|
|
2511
|
+
</div>
|
|
2512
|
+
<EcosystemSphere />
|
|
2513
|
+
</div>
|
|
2514
|
+
</div>
|
|
2515
|
+
</div>
|
|
2516
|
+
),
|
|
2517
|
+
},
|
|
2518
|
+
{
|
|
2519
|
+
id: 'system-anatomy',
|
|
2520
|
+
category: 'Cinematic / 3D System',
|
|
2521
|
+
status: 'available',
|
|
2522
|
+
name: 'System Anatomy',
|
|
2523
|
+
description:
|
|
2524
|
+
'Scroll-scrubbed exploded view (Foundation / Orchestration / Experience). Ported from SystemAnatomy.tsx: sticky canvas, anatomy-progress driven rotation and leader lines, three focused chapters with reduced-motion fallback.',
|
|
2525
|
+
package: '@noe/ui',
|
|
2526
|
+
registryItem: 'system-anatomy',
|
|
2527
|
+
preview: () => (
|
|
2528
|
+
<div className="rounded-lg border border-border overflow-hidden" style={{ height: '520px' }}>
|
|
2529
|
+
<SystemAnatomy />
|
|
2530
|
+
</div>
|
|
2531
|
+
),
|
|
2532
|
+
},
|
|
2533
|
+
{
|
|
2534
|
+
id: 'ecosystem-motion',
|
|
2535
|
+
category: 'Cinematic / 3D System',
|
|
2536
|
+
status: 'available',
|
|
2537
|
+
name: 'Ecosystem Motion Showcase',
|
|
2538
|
+
description:
|
|
2539
|
+
'Three-principle continuous scroll narrative (Shared foundations / Connected by design / Human at the center). Ported from EcosystemMotionShowcase.tsx: sticky stage with dot-field, SVG network, and draggable YOU orb that springs back on release.',
|
|
2540
|
+
package: '@noe/ui',
|
|
2541
|
+
registryItem: 'ecosystem-motion-showcase',
|
|
2542
|
+
preview: () => (
|
|
2543
|
+
<div className="rounded-lg border border-border overflow-hidden" style={{ height: '560px' }}>
|
|
2544
|
+
<EcosystemMotionShowcase />
|
|
2545
|
+
</div>
|
|
2546
|
+
),
|
|
2547
|
+
},
|
|
2548
|
+
{
|
|
2549
|
+
id: 'kinetic-experience',
|
|
2550
|
+
category: 'Cinematic / Motion',
|
|
2551
|
+
status: 'available',
|
|
2552
|
+
name: 'Kinetic Experience',
|
|
2553
|
+
description:
|
|
2554
|
+
'Fixed horizontal chapter timeline + scroll progress. Ported from KineticExperience.tsx: IntersectionObserver active chapter, hero-progress parallax, pointer-shift variables, and hash alignment with prefers-reduced-motion support.',
|
|
2555
|
+
package: '@noe/ui',
|
|
2556
|
+
registryItem: 'kinetic-experience',
|
|
2557
|
+
preview: () => (
|
|
2558
|
+
<div
|
|
2559
|
+
className="rounded-lg border border-border bg-[var(--noe-continuous-canvas)] p-6 text-sm"
|
|
2560
|
+
style={{ minHeight: '200px' }}
|
|
2561
|
+
>
|
|
2562
|
+
<p className="m-0 text-xs uppercase tracking-widest text-muted-foreground">
|
|
2563
|
+
Scroll timeline preview
|
|
2564
|
+
</p>
|
|
2565
|
+
<div style={{ height: '40px', marginTop: '1rem', position: 'relative' }}>
|
|
2566
|
+
<KineticExperience
|
|
2567
|
+
sections={[
|
|
2568
|
+
{ id: 'top', label: 'System' },
|
|
2569
|
+
{ id: 'idea', label: 'Idea' },
|
|
2570
|
+
{ id: 'principles', label: 'Principles' },
|
|
2571
|
+
{ id: 'progress', label: 'Progress' },
|
|
2572
|
+
]}
|
|
2573
|
+
/>
|
|
2574
|
+
</div>
|
|
2575
|
+
<p className="m-0 mt-4 text-xs leading-relaxed text-muted-foreground">
|
|
2576
|
+
Fixed bottom-right timeline tracks scroll (var(--kinetic-scroll)) and highlights the
|
|
2577
|
+
active chapter. Hover the timeline ticks to see labels; the actual hero parallax
|
|
2578
|
+
(hero-progress) is visible on the full landing composition.
|
|
2579
|
+
</p>
|
|
2580
|
+
</div>
|
|
2581
|
+
),
|
|
2582
|
+
},
|
|
2583
|
+
{
|
|
2584
|
+
id: 'landing-cinematic',
|
|
2585
|
+
category: 'Cinematic / Pages',
|
|
2586
|
+
status: 'available',
|
|
2587
|
+
name: 'Landing — Cinematic System',
|
|
2588
|
+
description:
|
|
2589
|
+
'Full landing composition combining the hero reactor (EcosystemSphere), SystemAnatomy and KineticExperience on one continuous graphite/paper canvas — exactly as approved in the light/dark repo. Light/dark switch respects localStorage, prefers-color-scheme and dispatched noecosystem-themechange.',
|
|
2590
|
+
package: '@noe/ui',
|
|
2591
|
+
registryItem: 'landing-cinematic',
|
|
2592
|
+
preview: () => (
|
|
2593
|
+
<div className="rounded-lg border border-border overflow-hidden">
|
|
2594
|
+
<div
|
|
2595
|
+
className="kinetic-ready"
|
|
2596
|
+
style={{ background: 'var(--noe-continuous-canvas)', color: 'var(--noe-canvas-copy)' }}
|
|
2597
|
+
>
|
|
2598
|
+
<section
|
|
2599
|
+
className="hero"
|
|
2600
|
+
id="top"
|
|
2601
|
+
data-hero-phase="0"
|
|
2602
|
+
data-hero-motion="active"
|
|
2603
|
+
style={{
|
|
2604
|
+
minHeight: '420px',
|
|
2605
|
+
height: '420px',
|
|
2606
|
+
padding: '1.5rem var(--noe-stage-gutter)',
|
|
2607
|
+
}}
|
|
2608
|
+
>
|
|
2609
|
+
<div
|
|
2610
|
+
className="hero-layout"
|
|
2611
|
+
style={{ height: '100%', minHeight: '0', position: 'relative' as const, top: 0 }}
|
|
2612
|
+
>
|
|
2613
|
+
<div className="hero-copy">
|
|
2614
|
+
<p className="eyebrow">NOECOSYSTEM / SHARED DIGITAL FOUNDATIONS</p>
|
|
2615
|
+
<h1
|
|
2616
|
+
className="kinetic-title"
|
|
2617
|
+
style={{ fontSize: 'clamp(2rem, 4vw, 3.5rem)', lineHeight: 0.9 }}
|
|
2618
|
+
>
|
|
2619
|
+
<span>Shared foundations.</span>
|
|
2620
|
+
<span className="outline-text">Connected experiences.</span>
|
|
2621
|
+
</h1>
|
|
2622
|
+
<p className="hero-intro" style={{ fontSize: '0.9rem', marginTop: '1rem' }}>
|
|
2623
|
+
NOEcosystem is a shared digital foundation for connected products and
|
|
2624
|
+
services—coherent at the core, clear at the surface.
|
|
2625
|
+
</p>
|
|
2626
|
+
<dl className="hero-signals" aria-label="NOEcosystem design principles">
|
|
2627
|
+
<div>
|
|
2628
|
+
<dt>01</dt>
|
|
2629
|
+
<dd>Shared core</dd>
|
|
2630
|
+
</div>
|
|
2631
|
+
<div>
|
|
2632
|
+
<dt>02</dt>
|
|
2633
|
+
<dd>Connected layers</dd>
|
|
2634
|
+
</div>
|
|
2635
|
+
<div>
|
|
2636
|
+
<dt>03</dt>
|
|
2637
|
+
<dd>Evolving experiences</dd>
|
|
2638
|
+
</div>
|
|
2639
|
+
</dl>
|
|
2640
|
+
</div>
|
|
2641
|
+
<div
|
|
2642
|
+
className="build-stage build-stage-ecosystem noe-reactor"
|
|
2643
|
+
aria-label="NOEcosystem reactor"
|
|
2644
|
+
>
|
|
2645
|
+
<div className="noe-reactor-aura" aria-hidden="true" />
|
|
2646
|
+
<div className="noe-reactor-ring ring-outer" aria-hidden="true" />
|
|
2647
|
+
<div className="noe-reactor-ring ring-mid" aria-hidden="true" />
|
|
2648
|
+
<div className="noe-reactor-ring ring-inner" aria-hidden="true" />
|
|
2649
|
+
<div className="noe-reactor-arcs" aria-hidden="true">
|
|
2650
|
+
<i />
|
|
2651
|
+
<i />
|
|
2652
|
+
<i />
|
|
2653
|
+
<i />
|
|
2654
|
+
</div>
|
|
2655
|
+
<EcosystemSphere />
|
|
2656
|
+
</div>
|
|
2657
|
+
</div>
|
|
2658
|
+
</section>
|
|
2659
|
+
<div
|
|
2660
|
+
style={{
|
|
2661
|
+
height: '320px',
|
|
2662
|
+
overflow: 'hidden',
|
|
2663
|
+
borderTop: '1px solid var(--noe-canvas-line)',
|
|
2664
|
+
}}
|
|
2665
|
+
>
|
|
2666
|
+
<SystemAnatomy />
|
|
2667
|
+
</div>
|
|
2668
|
+
</div>
|
|
2669
|
+
</div>
|
|
2670
|
+
),
|
|
2671
|
+
},
|
|
2672
|
+
];
|
|
2673
|
+
|
|
2674
|
+
export const catalogCategories: readonly string[] = Array.from(
|
|
2675
|
+
new Set(catalogEntries.map((entry) => entry.category)),
|
|
2676
|
+
);
|