@julianoczkowski/create-trimble-app 2.0.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/README.md +191 -0
- package/bin/create-trimble-app.js +9 -0
- package/package.json +67 -0
- package/src/cli.js +134 -0
- package/src/frameworks.js +28 -0
- package/src/scaffold.js +209 -0
- package/src/utils/file.js +47 -0
- package/src/utils/git.js +140 -0
- package/src/utils/install.js +25 -0
- package/src/utils/logger.js +124 -0
- package/templates/angular/.cursor/commands/remove-dev-content.md +394 -0
- package/templates/angular/.cursor/mcp.json +13 -0
- package/templates/angular/.cursor/rules/modus-angular-20.mdc +82 -0
- package/templates/angular/.cursor/rules/modus-angular-accordion-state-management-short.mdc +45 -0
- package/templates/angular/.cursor/rules/modus-angular-accordion-state-management.mdc +322 -0
- package/templates/angular/.cursor/rules/modus-angular-best-practices.mdc +472 -0
- package/templates/angular/.cursor/rules/modus-angular-border-usage-short.mdc +48 -0
- package/templates/angular/.cursor/rules/modus-angular-border-usage.mdc +286 -0
- package/templates/angular/.cursor/rules/modus-angular-button-group-usage-short.mdc +47 -0
- package/templates/angular/.cursor/rules/modus-angular-button-group-usage.mdc +263 -0
- package/templates/angular/.cursor/rules/modus-angular-checkbox-value-inversion-short.mdc +36 -0
- package/templates/angular/.cursor/rules/modus-angular-checkbox-value-inversion.mdc +92 -0
- package/templates/angular/.cursor/rules/modus-angular-chrome-devtools-testing-short.mdc +34 -0
- package/templates/angular/.cursor/rules/modus-angular-chrome-devtools-testing.mdc +185 -0
- package/templates/angular/.cursor/rules/modus-angular-color-usage-short.mdc +56 -0
- package/templates/angular/.cursor/rules/modus-angular-color-usage.mdc +208 -0
- package/templates/angular/.cursor/rules/modus-angular-components-reference.mdc +114 -0
- package/templates/angular/.cursor/rules/modus-angular-design-system.mdc +273 -0
- package/templates/angular/.cursor/rules/modus-angular-development-workflow-short.mdc +43 -0
- package/templates/angular/.cursor/rules/modus-angular-development-workflow.mdc +145 -0
- package/templates/angular/.cursor/rules/modus-angular-essentials.mdc +272 -0
- package/templates/angular/.cursor/rules/modus-angular-forms-validation-short.mdc +56 -0
- package/templates/angular/.cursor/rules/modus-angular-forms-validation.mdc +124 -0
- package/templates/angular/.cursor/rules/modus-angular-icon-names.mdc +70 -0
- package/templates/angular/.cursor/rules/modus-angular-icons-short.mdc +40 -0
- package/templates/angular/.cursor/rules/modus-angular-icons.mdc +137 -0
- package/templates/angular/.cursor/rules/modus-angular-implementation-guides-short.mdc +36 -0
- package/templates/angular/.cursor/rules/modus-angular-implementation-guides.mdc +301 -0
- package/templates/angular/.cursor/rules/modus-angular-integration-short.mdc +60 -0
- package/templates/angular/.cursor/rules/modus-angular-integration.mdc +1096 -0
- package/templates/angular/.cursor/rules/modus-angular-master.mdc +164 -0
- package/templates/angular/.cursor/rules/modus-angular-modal-usage-short.mdc +51 -0
- package/templates/angular/.cursor/rules/modus-angular-modal-usage.mdc +115 -0
- package/templates/angular/.cursor/rules/modus-angular-navbar-usage-short.mdc +49 -0
- package/templates/angular/.cursor/rules/modus-angular-navbar-usage.mdc +146 -0
- package/templates/angular/.cursor/rules/modus-angular-no-emojis.mdc +66 -0
- package/templates/angular/.cursor/rules/modus-angular-opacity-utilities-short.mdc +43 -0
- package/templates/angular/.cursor/rules/modus-angular-opacity-utilities.mdc +160 -0
- package/templates/angular/.cursor/rules/modus-angular-select-vs-dropdown-menu-short.mdc +51 -0
- package/templates/angular/.cursor/rules/modus-angular-select-vs-dropdown-menu.mdc +83 -0
- package/templates/angular/.cursor/rules/modus-angular-semantic-html-short.mdc +36 -0
- package/templates/angular/.cursor/rules/modus-angular-semantic-html.mdc +81 -0
- package/templates/angular/.cursor/rules/modus-angular-side-navigation-usage-short.mdc +50 -0
- package/templates/angular/.cursor/rules/modus-angular-side-navigation-usage.mdc +136 -0
- package/templates/angular/.cursor/rules/modus-angular-table-usage-short.mdc +52 -0
- package/templates/angular/.cursor/rules/modus-angular-table-usage.mdc +151 -0
- package/templates/angular/.cursor/rules/modus-angular-tailwind-usage-short.mdc +44 -0
- package/templates/angular/.cursor/rules/modus-angular-tailwind-usage.mdc +242 -0
- package/templates/angular/.cursor/rules/modus-angular-themes-short.mdc +54 -0
- package/templates/angular/.cursor/rules/modus-angular-themes.mdc +222 -0
- package/templates/angular/.cursor/rules/modus-angular-utility-panel-usage-short.mdc +52 -0
- package/templates/angular/.cursor/rules/modus-angular-utility-panel-usage.mdc +130 -0
- package/templates/angular/.cursor/rules/ux/gestalt-laws-detailed.mdc +514 -0
- package/templates/angular/.cursor/rules/ux/ux-ui-foundations.mdc +235 -0
- package/templates/angular/.cursor/skills/run-lint-checks/SKILL.md +169 -0
- package/templates/angular/.editorconfig +17 -0
- package/templates/angular/.github/dependabot.yml +19 -0
- package/templates/angular/.github/workflows/a11y-check.yml +135 -0
- package/templates/angular/.github/workflows/ci.yml +44 -0
- package/templates/angular/.husky/pre-commit +32 -0
- package/templates/angular/.postcssrc.json +5 -0
- package/templates/angular/.vscode/extensions.json +4 -0
- package/templates/angular/.vscode/launch.json +20 -0
- package/templates/angular/.vscode/tasks.json +42 -0
- package/templates/angular/CLAUDE.md +148 -0
- package/templates/angular/README.md +92 -0
- package/templates/angular/amplify.yml +25 -0
- package/templates/angular/angular.json +106 -0
- package/templates/angular/data/modusIcons.ts +861 -0
- package/templates/angular/package-lock.json +11030 -0
- package/templates/angular/package.json +66 -0
- package/templates/angular/public/angular-icon.svg +12 -0
- package/templates/angular/public/favicon.ico +0 -0
- package/templates/angular/public/modus-icons.css +49 -0
- package/templates/angular/public/vite.svg +1 -0
- package/templates/angular/scripts/README.md +410 -0
- package/templates/angular/scripts/check-border-violations.js +352 -0
- package/templates/angular/scripts/check-icon-names.js +402 -0
- package/templates/angular/scripts/check-inline-styles.js +292 -0
- package/templates/angular/scripts/check-modus-colors.js +282 -0
- package/templates/angular/scripts/check-modus-icons.js +263 -0
- package/templates/angular/scripts/check-opacity-utilities.js +426 -0
- package/templates/angular/scripts/check-semantic-html.js +452 -0
- package/templates/angular/scripts/check-typescript.js +109 -0
- package/templates/angular/src/app/app.config.ts +29 -0
- package/templates/angular/src/app/app.css +0 -0
- package/templates/angular/src/app/app.html +4 -0
- package/templates/angular/src/app/app.routes.ts +351 -0
- package/templates/angular/src/app/app.spec.ts +27 -0
- package/templates/angular/src/app/app.ts +47 -0
- package/templates/angular/src/app/components/README.md +77 -0
- package/templates/angular/src/app/components/index.ts +53 -0
- package/templates/angular/src/app/components/modus-accordion.component.ts +50 -0
- package/templates/angular/src/app/components/modus-alert.component.ts +133 -0
- package/templates/angular/src/app/components/modus-autocomplete.component.ts +262 -0
- package/templates/angular/src/app/components/modus-avatar.component.ts +75 -0
- package/templates/angular/src/app/components/modus-badge.component.ts +84 -0
- package/templates/angular/src/app/components/modus-breadcrumbs.component.ts +65 -0
- package/templates/angular/src/app/components/modus-button-group.component.ts +82 -0
- package/templates/angular/src/app/components/modus-button.component.ts +292 -0
- package/templates/angular/src/app/components/modus-card.component.ts +73 -0
- package/templates/angular/src/app/components/modus-checkbox.component.ts +117 -0
- package/templates/angular/src/app/components/modus-chip.component.ts +97 -0
- package/templates/angular/src/app/components/modus-collapse.component.ts +118 -0
- package/templates/angular/src/app/components/modus-date.component.ts +165 -0
- package/templates/angular/src/app/components/modus-dropdown-menu.component.ts +108 -0
- package/templates/angular/src/app/components/modus-file-dropzone.component.ts +121 -0
- package/templates/angular/src/app/components/modus-handle.component.ts +96 -0
- package/templates/angular/src/app/components/modus-icon.component.ts +81 -0
- package/templates/angular/src/app/components/modus-input-feedback.component.ts +54 -0
- package/templates/angular/src/app/components/modus-input-label.component.ts +62 -0
- package/templates/angular/src/app/components/modus-loader.component.ts +48 -0
- package/templates/angular/src/app/components/modus-logo.component.ts +115 -0
- package/templates/angular/src/app/components/modus-menu-item.component.ts +116 -0
- package/templates/angular/src/app/components/modus-menu.component.ts +58 -0
- package/templates/angular/src/app/components/modus-modal.component.ts +70 -0
- package/templates/angular/src/app/components/modus-navbar.component.ts +303 -0
- package/templates/angular/src/app/components/modus-number-input.component.ts +174 -0
- package/templates/angular/src/app/components/modus-pagination.component.ts +74 -0
- package/templates/angular/src/app/components/modus-panel.component.ts +61 -0
- package/templates/angular/src/app/components/modus-progress.component.ts +62 -0
- package/templates/angular/src/app/components/modus-radio.component.ts +102 -0
- package/templates/angular/src/app/components/modus-rating.component.ts +80 -0
- package/templates/angular/src/app/components/modus-select.component.ts +131 -0
- package/templates/angular/src/app/components/modus-side-navigation.component.ts +90 -0
- package/templates/angular/src/app/components/modus-skeleton.component.ts +54 -0
- package/templates/angular/src/app/components/modus-slider.component.ts +132 -0
- package/templates/angular/src/app/components/modus-stepper.component.ts +65 -0
- package/templates/angular/src/app/components/modus-switch.component.ts +118 -0
- package/templates/angular/src/app/components/modus-table.component.ts +204 -0
- package/templates/angular/src/app/components/modus-tabs.component.ts +82 -0
- package/templates/angular/src/app/components/modus-text-input.component.ts +221 -0
- package/templates/angular/src/app/components/modus-textarea.component.ts +168 -0
- package/templates/angular/src/app/components/modus-theme-switcher.component.ts +45 -0
- package/templates/angular/src/app/components/modus-time-input.component.ts +172 -0
- package/templates/angular/src/app/components/modus-toast.component.ts +63 -0
- package/templates/angular/src/app/components/modus-toolbar.component.ts +43 -0
- package/templates/angular/src/app/components/modus-tooltip.component.ts +83 -0
- package/templates/angular/src/app/components/modus-typography.component.ts +79 -0
- package/templates/angular/src/app/components/modus-utility-panel.component.ts +275 -0
- package/templates/angular/src/app/components/theme-demo.component.ts +1242 -0
- package/templates/angular/src/app/data/component-demos.ts +360 -0
- package/templates/angular/src/app/data/modus-icons.ts +806 -0
- package/templates/angular/src/app/demos/accordion/accordion-demo.component.ts +212 -0
- package/templates/angular/src/app/demos/alert/alert-demo.component.ts +108 -0
- package/templates/angular/src/app/demos/autocomplete/autocomplete-demo.component.ts +174 -0
- package/templates/angular/src/app/demos/avatar/avatar-demo.component.ts +149 -0
- package/templates/angular/src/app/demos/badge/badge-demo.component.ts +148 -0
- package/templates/angular/src/app/demos/breadcrumbs/breadcrumbs-demo.component.ts +96 -0
- package/templates/angular/src/app/demos/button/button-demo.component.ts +256 -0
- package/templates/angular/src/app/demos/button-group/button-group-demo.component.ts +215 -0
- package/templates/angular/src/app/demos/card/card-demo.component.ts +180 -0
- package/templates/angular/src/app/demos/checkbox/checkbox-demo.component.ts +71 -0
- package/templates/angular/src/app/demos/chip/chip-demo.component.ts +183 -0
- package/templates/angular/src/app/demos/date/date-demo.component.ts +193 -0
- package/templates/angular/src/app/demos/dropdown/dropdown-demo.component.ts +196 -0
- package/templates/angular/src/app/demos/file-dropzone/file-dropzone-demo.component.ts +176 -0
- package/templates/angular/src/app/demos/handle/handle-demo.component.ts +265 -0
- package/templates/angular/src/app/demos/icon/icon-demo.component.ts +65 -0
- package/templates/angular/src/app/demos/input-feedback/input-feedback-demo.component.ts +189 -0
- package/templates/angular/src/app/demos/input-label/input-label-demo.component.ts +330 -0
- package/templates/angular/src/app/demos/loader/loader-demo.component.ts +143 -0
- package/templates/angular/src/app/demos/logo/logo-demo.component.ts +191 -0
- package/templates/angular/src/app/demos/menu/menu-demo.component.ts +72 -0
- package/templates/angular/src/app/demos/modal/modal-demo.component.ts +278 -0
- package/templates/angular/src/app/demos/navbar/navbar-demo.component.ts +135 -0
- package/templates/angular/src/app/demos/number-input/number-input-demo.component.ts +175 -0
- package/templates/angular/src/app/demos/pagination/pagination-demo.component.ts +134 -0
- package/templates/angular/src/app/demos/panel/panel-demo.component.ts +235 -0
- package/templates/angular/src/app/demos/progress/progress-demo.component.ts +169 -0
- package/templates/angular/src/app/demos/radio/radio-demo.component.ts +161 -0
- package/templates/angular/src/app/demos/rating/rating-demo.component.ts +97 -0
- package/templates/angular/src/app/demos/select/select-demo.component.ts +107 -0
- package/templates/angular/src/app/demos/shared/demo-example-clean.component.ts +41 -0
- package/templates/angular/src/app/demos/shared/demo-example.component.ts +42 -0
- package/templates/angular/src/app/demos/shared/demo-page.component.ts +97 -0
- package/templates/angular/src/app/demos/shared/index.ts +3 -0
- package/templates/angular/src/app/demos/side-navigation/side-navigation-demo.component.ts +524 -0
- package/templates/angular/src/app/demos/skeleton/skeleton-demo.component.ts +112 -0
- package/templates/angular/src/app/demos/slider/slider-demo.component.ts +76 -0
- package/templates/angular/src/app/demos/stepper/stepper-demo.component.ts +79 -0
- package/templates/angular/src/app/demos/switch/switch-demo.component.ts +113 -0
- package/templates/angular/src/app/demos/table/table-demo.component.ts +405 -0
- package/templates/angular/src/app/demos/tabs/tabs-demo.component.ts +318 -0
- package/templates/angular/src/app/demos/text-input/text-input-demo.component.ts +160 -0
- package/templates/angular/src/app/demos/textarea/textarea-demo.component.ts +95 -0
- package/templates/angular/src/app/demos/theme-switcher/theme-switcher-demo.component.ts +38 -0
- package/templates/angular/src/app/demos/time-input/time-input-demo.component.ts +130 -0
- package/templates/angular/src/app/demos/toast/toast-demo.component.ts +258 -0
- package/templates/angular/src/app/demos/toolbar/toolbar-demo.component.ts +54 -0
- package/templates/angular/src/app/demos/tooltip/tooltip-demo.component.ts +163 -0
- package/templates/angular/src/app/demos/utility-panel/utility-panel-demo.component.ts +197 -0
- package/templates/angular/src/app/dev/dev-config.ts +119 -0
- package/templates/angular/src/app/dev/dev-panel/dev-panel.component.ts +215 -0
- package/templates/angular/src/app/dev/dev-panel.service.ts +63 -0
- package/templates/angular/src/app/dev/index.ts +8 -0
- package/templates/angular/src/app/dev/theme-switcher-dropdown/theme-switcher-dropdown.component.ts +134 -0
- package/templates/angular/src/app/dev-pages/color-palette/color-palette.component.ts +229 -0
- package/templates/angular/src/app/dev-pages/components-gallery/components-gallery.component.ts +486 -0
- package/templates/angular/src/app/dev-pages/icons/icons.component.ts +149 -0
- package/templates/angular/src/app/pages/home/home.component.ts +251 -0
- package/templates/angular/src/app/services/README.md +57 -0
- package/templates/angular/src/app/services/theme.service.ts +163 -0
- package/templates/angular/src/environments/environment.development.ts +8 -0
- package/templates/angular/src/environments/environment.ts +8 -0
- package/templates/angular/src/index.html +14 -0
- package/templates/angular/src/main.ts +6 -0
- package/templates/angular/src/styles.css +1328 -0
- package/templates/angular/tsconfig.app.json +15 -0
- package/templates/angular/tsconfig.json +35 -0
- package/templates/angular/tsconfig.spec.json +14 -0
- package/templates/config.json +23 -0
- package/templates/react/.cursor/commands/remove-dev-content.md +311 -0
- package/templates/react/.cursor/mcp.json +13 -0
- package/templates/react/.cursor/rules/README.md +240 -0
- package/templates/react/.cursor/rules/border-usage-guidelines-short.mdc +22 -0
- package/templates/react/.cursor/rules/border-usage-guidelines.mdc +380 -0
- package/templates/react/.cursor/rules/chrome-devtools-testing-react-short.mdc +23 -0
- package/templates/react/.cursor/rules/development-workflow-react-short.mdc +23 -0
- package/templates/react/.cursor/rules/development-workflow-react.mdc +292 -0
- package/templates/react/.cursor/rules/implementation-guides-react-short.mdc +23 -0
- package/templates/react/.cursor/rules/implementation-guides-react.mdc +446 -0
- package/templates/react/.cursor/rules/modus-accordion-state-management-react-short.mdc +23 -0
- package/templates/react/.cursor/rules/modus-accordion-state-management-react.mdc +445 -0
- package/templates/react/.cursor/rules/modus-button-group-usage-react-short.mdc +23 -0
- package/templates/react/.cursor/rules/modus-button-group-usage-react.mdc +117 -0
- package/templates/react/.cursor/rules/modus-checkbox-value-inversion-react-short.mdc +23 -0
- package/templates/react/.cursor/rules/modus-checkbox-value-inversion-react.mdc +492 -0
- package/templates/react/.cursor/rules/modus-color-usage-react-short.mdc +23 -0
- package/templates/react/.cursor/rules/modus-color-usage-react.mdc +420 -0
- package/templates/react/.cursor/rules/modus-components-reference.mdc +366 -0
- package/templates/react/.cursor/rules/modus-icon-names.mdc +63 -0
- package/templates/react/.cursor/rules/modus-icons-react-short.mdc +24 -0
- package/templates/react/.cursor/rules/modus-icons-react.mdc +402 -0
- package/templates/react/.cursor/rules/modus-modal-implementation-react-short.mdc +23 -0
- package/templates/react/.cursor/rules/modus-modal-implementation-react.mdc +831 -0
- package/templates/react/.cursor/rules/modus-navbar-side-navigation-react-short.mdc +23 -0
- package/templates/react/.cursor/rules/modus-navbar-side-navigation-react.mdc +247 -0
- package/templates/react/.cursor/rules/modus-no-emojis-react-short.mdc +23 -0
- package/templates/react/.cursor/rules/modus-opacity-utilities-react-short.mdc +70 -0
- package/templates/react/.cursor/rules/modus-opacity-utilities-react.mdc +208 -0
- package/templates/react/.cursor/rules/modus-react-best-practices-short.mdc +23 -0
- package/templates/react/.cursor/rules/modus-react-best-practices.mdc +508 -0
- package/templates/react/.cursor/rules/modus-react-essentials.mdc +209 -0
- package/templates/react/.cursor/rules/modus-react-integration-short.mdc +23 -0
- package/templates/react/.cursor/rules/modus-react-integration.mdc +509 -0
- package/templates/react/.cursor/rules/modus-react-key-warnings-short.mdc +23 -0
- package/templates/react/.cursor/rules/modus-react-key-warnings.mdc +805 -0
- package/templates/react/.cursor/rules/modus-react-master.mdc +160 -0
- package/templates/react/.cursor/rules/modus-select-vs-dropdown-menu-react-short.mdc +23 -0
- package/templates/react/.cursor/rules/modus-select-vs-dropdown-menu-react.mdc +442 -0
- package/templates/react/.cursor/rules/modus-semantic-html-react-short.mdc +23 -0
- package/templates/react/.cursor/rules/modus-semantic-html-react.mdc +427 -0
- package/templates/react/.cursor/rules/modus-tailwind-usage-react-short.mdc +23 -0
- package/templates/react/.cursor/rules/modus-tailwind-usage-react.mdc +642 -0
- package/templates/react/.cursor/rules/modus-themes-react-short.mdc +23 -0
- package/templates/react/.cursor/rules/modus-themes-react.mdc +506 -0
- package/templates/react/.cursor/rules/ux/gestalt-laws-detailed.mdc +456 -0
- package/templates/react/.cursor/rules/ux/ux-ui-foundations.mdc +211 -0
- package/templates/react/.cursor/skills/create-modus-form-component/SKILL.md +518 -0
- package/templates/react/.cursor/skills/create-modus-wrapper-component/SKILL.md +252 -0
- package/templates/react/.cursor/skills/fix-modus-component-event-issues/SKILL.md +345 -0
- package/templates/react/.cursor/skills/handle-modus-checkbox-value-bug/SKILL.md +202 -0
- package/templates/react/.cursor/skills/implement-modus-modal-with-refs/SKILL.md +386 -0
- package/templates/react/.cursor/skills/integrate-modus-icons/SKILL.md +300 -0
- package/templates/react/.cursor/skills/run-lint-checks/SKILL.md +235 -0
- package/templates/react/.cursor/skills/set-up-modus-event-listeners/SKILL.md +284 -0
- package/templates/react/.cursor/skills/style-modus-components-with-tailwind/SKILL.md +382 -0
- package/templates/react/.env.development +3 -0
- package/templates/react/.env.production +3 -0
- package/templates/react/.github/CODEOWNERS +28 -0
- package/templates/react/.github/ISSUE_TEMPLATE/bug_report.yml +176 -0
- package/templates/react/.github/ISSUE_TEMPLATE/config.yml +20 -0
- package/templates/react/.github/ISSUE_TEMPLATE/documentation.yml +115 -0
- package/templates/react/.github/ISSUE_TEMPLATE/feature_request.yml +171 -0
- package/templates/react/.github/ISSUE_TEMPLATE/question.yml +139 -0
- package/templates/react/.github/copilot-instructions.md +80 -0
- package/templates/react/.github/instructions/components.instructions.md +82 -0
- package/templates/react/.github/instructions/demos.instructions.md +82 -0
- package/templates/react/.github/instructions/pages.instructions.md +76 -0
- package/templates/react/.github/instructions/styles.instructions.md +77 -0
- package/templates/react/.github/instructions/typescript.instructions.md +101 -0
- package/templates/react/.github/pull_request_template.md +188 -0
- package/templates/react/.github/workflows/ci.yml +43 -0
- package/templates/react/.github/workflows/claude-code-review.yml +44 -0
- package/templates/react/.github/workflows/claude.yml +50 -0
- package/templates/react/.husky/pre-commit +28 -0
- package/templates/react/.vscode/extensions.json +8 -0
- package/templates/react/CLAUDE.md +119 -0
- package/templates/react/CODE_OF_CONDUCT.md +79 -0
- package/templates/react/CONTRIBUTING.md +65 -0
- package/templates/react/LICENSE +21 -0
- package/templates/react/README.md +728 -0
- package/templates/react/SECURITY.md +50 -0
- package/templates/react/eslint.config.js +23 -0
- package/templates/react/index.html +13 -0
- package/templates/react/package-lock.json +5209 -0
- package/templates/react/package.json +49 -0
- package/templates/react/postcss.config.js +6 -0
- package/templates/react/public/react.svg +1 -0
- package/templates/react/public/vite.svg +1 -0
- package/templates/react/readme_assets/getting_started_header.png +0 -0
- package/templates/react/readme_assets/hero.png +0 -0
- package/templates/react/readme_assets/modus_comp.png +0 -0
- package/templates/react/readme_assets/modus_figma_mcp.png +0 -0
- package/templates/react/readme_assets/teaser_comp.gif +0 -0
- package/templates/react/scripts/README.md +343 -0
- package/templates/react/scripts/check-border-violations.js +483 -0
- package/templates/react/scripts/check-icon-names.js +486 -0
- package/templates/react/scripts/check-inline-styles.js +364 -0
- package/templates/react/scripts/check-modus-colors.js +247 -0
- package/templates/react/scripts/check-modus-icons.js +256 -0
- package/templates/react/scripts/check-opacity-utilities.js +481 -0
- package/templates/react/scripts/check-semantic-html.js +476 -0
- package/templates/react/scripts/check-typescript.js +109 -0
- package/templates/react/src/App.css +42 -0
- package/templates/react/src/App.tsx +54 -0
- package/templates/react/src/assets/react.svg +1 -0
- package/templates/react/src/components/DemoExample.tsx +61 -0
- package/templates/react/src/components/DemoPage.tsx +81 -0
- package/templates/react/src/components/ModusAccordion.tsx +89 -0
- package/templates/react/src/components/ModusAlert.tsx +85 -0
- package/templates/react/src/components/ModusAutocomplete.tsx +207 -0
- package/templates/react/src/components/ModusAvatar.tsx +50 -0
- package/templates/react/src/components/ModusBadge.tsx +82 -0
- package/templates/react/src/components/ModusBreadcrumbs.tsx +75 -0
- package/templates/react/src/components/ModusButton.tsx +244 -0
- package/templates/react/src/components/ModusButtonGroup.tsx +91 -0
- package/templates/react/src/components/ModusCard.tsx +70 -0
- package/templates/react/src/components/ModusCheckbox.tsx +168 -0
- package/templates/react/src/components/ModusChip.tsx +93 -0
- package/templates/react/src/components/ModusDate.tsx +154 -0
- package/templates/react/src/components/ModusDropdownMenu.tsx +148 -0
- package/templates/react/src/components/ModusFileDropzone.tsx +140 -0
- package/templates/react/src/components/ModusHandle.tsx +101 -0
- package/templates/react/src/components/ModusIcon.tsx +49 -0
- package/templates/react/src/components/ModusInputFeedback.tsx +52 -0
- package/templates/react/src/components/ModusInputLabel.tsx +50 -0
- package/templates/react/src/components/ModusLoader.tsx +42 -0
- package/templates/react/src/components/ModusLogo.tsx +102 -0
- package/templates/react/src/components/ModusMenu.tsx +119 -0
- package/templates/react/src/components/ModusMenuItem.tsx +86 -0
- package/templates/react/src/components/ModusModal.tsx +145 -0
- package/templates/react/src/components/ModusNavbar.tsx +504 -0
- package/templates/react/src/components/ModusNumberInput.tsx +230 -0
- package/templates/react/src/components/ModusPagination.tsx +94 -0
- package/templates/react/src/components/ModusPanel.tsx +92 -0
- package/templates/react/src/components/ModusProgress.tsx +70 -0
- package/templates/react/src/components/ModusProvider.tsx +18 -0
- package/templates/react/src/components/ModusRadio.tsx +114 -0
- package/templates/react/src/components/ModusRating.tsx +108 -0
- package/templates/react/src/components/ModusSelect.tsx +171 -0
- package/templates/react/src/components/ModusSideNavigation.tsx +149 -0
- package/templates/react/src/components/ModusSkeleton.tsx +42 -0
- package/templates/react/src/components/ModusSlider.tsx +128 -0
- package/templates/react/src/components/ModusStepper.tsx +85 -0
- package/templates/react/src/components/ModusSwitch.tsx +130 -0
- package/templates/react/src/components/ModusTable.tsx +309 -0
- package/templates/react/src/components/ModusTabs.tsx +114 -0
- package/templates/react/src/components/ModusTextInput.tsx +179 -0
- package/templates/react/src/components/ModusTextarea.tsx +164 -0
- package/templates/react/src/components/ModusThemeSwitcher.tsx +58 -0
- package/templates/react/src/components/ModusTimeInput.tsx +176 -0
- package/templates/react/src/components/ModusToast.tsx +207 -0
- package/templates/react/src/components/ModusToolbar.tsx +70 -0
- package/templates/react/src/components/ModusTooltip.tsx +97 -0
- package/templates/react/src/components/ModusUtilityPanel.tsx +198 -0
- package/templates/react/src/components/ThemeSwitcherDropdown.tsx +117 -0
- package/templates/react/src/components/ThemeToggleSimple.tsx +157 -0
- package/templates/react/src/config/routes.ts +196 -0
- package/templates/react/src/contexts/ThemeContext.tsx +81 -0
- package/templates/react/src/contexts/ThemeContextData.tsx +89 -0
- package/templates/react/src/data/modusIcons.ts +865 -0
- package/templates/react/src/demos/accordion-demo/page.tsx +236 -0
- package/templates/react/src/demos/alert-demo/page.tsx +94 -0
- package/templates/react/src/demos/autocomplete-demo/page.tsx +166 -0
- package/templates/react/src/demos/avatar-demo/page.tsx +135 -0
- package/templates/react/src/demos/badge-demo/page.tsx +174 -0
- package/templates/react/src/demos/breadcrumbs-demo/page.tsx +88 -0
- package/templates/react/src/demos/button-demo/page.tsx +261 -0
- package/templates/react/src/demos/button-group-demo/page.tsx +231 -0
- package/templates/react/src/demos/card-demo/page.tsx +241 -0
- package/templates/react/src/demos/checkbox-demo/page.tsx +79 -0
- package/templates/react/src/demos/chip-demo/page.tsx +197 -0
- package/templates/react/src/demos/date-demo/page.tsx +179 -0
- package/templates/react/src/demos/dropdown-demo/page.tsx +150 -0
- package/templates/react/src/demos/file-dropzone-demo/page.tsx +186 -0
- package/templates/react/src/demos/handle-demo/page.tsx +313 -0
- package/templates/react/src/demos/icon-demo/page.tsx +72 -0
- package/templates/react/src/demos/input-feedback-demo/page.tsx +202 -0
- package/templates/react/src/demos/input-label-demo/page.tsx +392 -0
- package/templates/react/src/demos/loader-demo/page.tsx +138 -0
- package/templates/react/src/demos/logo-demo/page.tsx +292 -0
- package/templates/react/src/demos/menu-demo/page.tsx +70 -0
- package/templates/react/src/demos/modal-demo/page.tsx +332 -0
- package/templates/react/src/demos/navbar-demo/page.tsx +141 -0
- package/templates/react/src/demos/number-input-demo/page.tsx +180 -0
- package/templates/react/src/demos/pagination-demo/page.tsx +147 -0
- package/templates/react/src/demos/panel-demo/page.tsx +376 -0
- package/templates/react/src/demos/progress-demo/page.tsx +185 -0
- package/templates/react/src/demos/radio-demo/page.tsx +242 -0
- package/templates/react/src/demos/rating-demo/page.tsx +97 -0
- package/templates/react/src/demos/select-demo/page.tsx +111 -0
- package/templates/react/src/demos/side-navigation-demo/page.tsx +775 -0
- package/templates/react/src/demos/skeleton-demo/page.tsx +107 -0
- package/templates/react/src/demos/slider-demo/page.tsx +78 -0
- package/templates/react/src/demos/stepper-demo/page.tsx +86 -0
- package/templates/react/src/demos/switch-demo/page.tsx +146 -0
- package/templates/react/src/demos/table-demo/page.tsx +489 -0
- package/templates/react/src/demos/tabs-demo/page.tsx +187 -0
- package/templates/react/src/demos/text-input-demo/page.tsx +151 -0
- package/templates/react/src/demos/textarea-demo/page.tsx +73 -0
- package/templates/react/src/demos/theme-switcher-demo/page.tsx +26 -0
- package/templates/react/src/demos/time-input-demo/page.tsx +148 -0
- package/templates/react/src/demos/toast-demo/page.tsx +302 -0
- package/templates/react/src/demos/toolbar-demo/page.tsx +49 -0
- package/templates/react/src/demos/tooltip-demo/page.tsx +209 -0
- package/templates/react/src/demos/typography-test/page.tsx +28 -0
- package/templates/react/src/demos/utility-panel-demo/page.tsx +197 -0
- package/templates/react/src/dev/DevPanel.tsx +219 -0
- package/templates/react/src/dev/DevPanelContext.ts +14 -0
- package/templates/react/src/dev/DevPanelProvider.tsx +63 -0
- package/templates/react/src/dev/DevRoutes.tsx +98 -0
- package/templates/react/src/dev/config.ts +127 -0
- package/templates/react/src/dev/index.ts +8 -0
- package/templates/react/src/dev/useDevPanel.ts +17 -0
- package/templates/react/src/dev-pages/ColorPalettePage.tsx +347 -0
- package/templates/react/src/dev-pages/ComponentsGalleryPage.tsx +489 -0
- package/templates/react/src/dev-pages/IconsPage.tsx +137 -0
- package/templates/react/src/dev-pages/index.ts +3 -0
- package/templates/react/src/hooks/useTheme.ts +15 -0
- package/templates/react/src/index.css +635 -0
- package/templates/react/src/main.tsx +14 -0
- package/templates/react/src/pages/HomePage.tsx +283 -0
- package/templates/react/src/vite-env.d.ts +9 -0
- package/templates/react/tailwind.config.js +58 -0
- package/templates/react/tsconfig.app.json +27 -0
- package/templates/react/tsconfig.json +7 -0
- package/templates/react/tsconfig.node.json +25 -0
- package/templates/react/vite.config.ts +18 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusAccordion from "../../components/ModusAccordion";
|
|
6
|
+
|
|
7
|
+
const basicItems = [
|
|
8
|
+
{
|
|
9
|
+
id: "getting-started",
|
|
10
|
+
options: {
|
|
11
|
+
title: "Getting Started",
|
|
12
|
+
description: "Learn the basics",
|
|
13
|
+
},
|
|
14
|
+
content: (
|
|
15
|
+
<div className="p-4 text-foreground">
|
|
16
|
+
This is the content for the getting started section. You can include any content here.
|
|
17
|
+
</div>
|
|
18
|
+
),
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: "components",
|
|
22
|
+
options: {
|
|
23
|
+
title: "Components",
|
|
24
|
+
description: "Explore available components",
|
|
25
|
+
},
|
|
26
|
+
content: (
|
|
27
|
+
<div className="p-4 text-foreground">
|
|
28
|
+
Discover all the available components in the Modus design system.
|
|
29
|
+
</div>
|
|
30
|
+
),
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
id: "styling",
|
|
34
|
+
options: {
|
|
35
|
+
title: "Styling",
|
|
36
|
+
description: "Customize your design",
|
|
37
|
+
},
|
|
38
|
+
content: (
|
|
39
|
+
<div className="p-4 text-foreground">
|
|
40
|
+
Learn how to style and customize components to match your brand.
|
|
41
|
+
</div>
|
|
42
|
+
),
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
const sizeItemsXs = [
|
|
47
|
+
{
|
|
48
|
+
id: "xs-panel",
|
|
49
|
+
options: {
|
|
50
|
+
title: "Extra Small Panel",
|
|
51
|
+
description: "Compact size for tight spaces",
|
|
52
|
+
size: "xs" as const,
|
|
53
|
+
},
|
|
54
|
+
content: (
|
|
55
|
+
<div className="p-4 text-foreground">Extra small accordion content.</div>
|
|
56
|
+
),
|
|
57
|
+
},
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
const sizeItemsSm = [
|
|
61
|
+
{
|
|
62
|
+
id: "sm-panel",
|
|
63
|
+
options: {
|
|
64
|
+
title: "Small Panel",
|
|
65
|
+
description: "Standard small size",
|
|
66
|
+
size: "sm" as const,
|
|
67
|
+
},
|
|
68
|
+
content: (
|
|
69
|
+
<div className="p-4 text-foreground">Small accordion content.</div>
|
|
70
|
+
),
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
const sizeItemsMd = [
|
|
75
|
+
{
|
|
76
|
+
id: "md-panel",
|
|
77
|
+
options: {
|
|
78
|
+
title: "Medium Panel",
|
|
79
|
+
description: "Default medium size",
|
|
80
|
+
size: "md" as const,
|
|
81
|
+
},
|
|
82
|
+
content: (
|
|
83
|
+
<div className="p-4 text-foreground">Medium accordion content.</div>
|
|
84
|
+
),
|
|
85
|
+
},
|
|
86
|
+
];
|
|
87
|
+
|
|
88
|
+
const sizeItemsLg = [
|
|
89
|
+
{
|
|
90
|
+
id: "lg-panel",
|
|
91
|
+
options: {
|
|
92
|
+
title: "Large Panel",
|
|
93
|
+
description: "Prominent large size",
|
|
94
|
+
size: "lg" as const,
|
|
95
|
+
},
|
|
96
|
+
content: (
|
|
97
|
+
<div className="p-4 text-foreground">Large accordion content.</div>
|
|
98
|
+
),
|
|
99
|
+
},
|
|
100
|
+
];
|
|
101
|
+
|
|
102
|
+
const iconItems = [
|
|
103
|
+
{
|
|
104
|
+
id: "settings",
|
|
105
|
+
options: {
|
|
106
|
+
title: "Settings",
|
|
107
|
+
description: "Configure your preferences",
|
|
108
|
+
icon: "settings",
|
|
109
|
+
iconAriaLabel: "Settings icon",
|
|
110
|
+
},
|
|
111
|
+
content: (
|
|
112
|
+
<div className="p-4 text-foreground">
|
|
113
|
+
Settings panel with icon in the header.
|
|
114
|
+
</div>
|
|
115
|
+
),
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
id: "notifications",
|
|
119
|
+
options: {
|
|
120
|
+
title: "Notifications",
|
|
121
|
+
description: "Manage your notifications",
|
|
122
|
+
icon: "notifications",
|
|
123
|
+
iconAriaLabel: "Notifications icon",
|
|
124
|
+
},
|
|
125
|
+
content: (
|
|
126
|
+
<div className="p-4 text-foreground">
|
|
127
|
+
Notifications panel with icon in the header.
|
|
128
|
+
</div>
|
|
129
|
+
),
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
id: "security",
|
|
133
|
+
options: {
|
|
134
|
+
title: "Security",
|
|
135
|
+
description: "Security and privacy settings",
|
|
136
|
+
icon: "lock",
|
|
137
|
+
iconAriaLabel: "Security icon",
|
|
138
|
+
},
|
|
139
|
+
content: (
|
|
140
|
+
<div className="p-4 text-foreground">
|
|
141
|
+
Security panel with icon in the header.
|
|
142
|
+
</div>
|
|
143
|
+
),
|
|
144
|
+
},
|
|
145
|
+
];
|
|
146
|
+
|
|
147
|
+
const expandedStateItems = [
|
|
148
|
+
{
|
|
149
|
+
id: "expanded-default",
|
|
150
|
+
options: {
|
|
151
|
+
title: "Expanded by Default",
|
|
152
|
+
description: "This panel starts expanded",
|
|
153
|
+
},
|
|
154
|
+
expanded: true,
|
|
155
|
+
content: (
|
|
156
|
+
<div className="p-4 text-foreground">
|
|
157
|
+
This panel is expanded by default when the page loads.
|
|
158
|
+
</div>
|
|
159
|
+
),
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
id: "collapsed-default",
|
|
163
|
+
options: {
|
|
164
|
+
title: "Collapsed by Default",
|
|
165
|
+
description: "This panel starts collapsed",
|
|
166
|
+
},
|
|
167
|
+
expanded: false,
|
|
168
|
+
content: (
|
|
169
|
+
<div className="p-4 text-foreground">
|
|
170
|
+
This panel is collapsed by default when the page loads.
|
|
171
|
+
</div>
|
|
172
|
+
),
|
|
173
|
+
},
|
|
174
|
+
];
|
|
175
|
+
|
|
176
|
+
export default function AccordionDemoPage() {
|
|
177
|
+
return (
|
|
178
|
+
<DemoPage
|
|
179
|
+
title="Modus Accordion"
|
|
180
|
+
description="Accordions organize and display collapsible content in a compact space. Use accordions to group related information and allow users to expand or collapse sections as needed."
|
|
181
|
+
>
|
|
182
|
+
<DemoExample
|
|
183
|
+
title="Basic Accordion"
|
|
184
|
+
description="Simple accordion with multiple collapsible panels."
|
|
185
|
+
>
|
|
186
|
+
<ModusAccordion items={basicItems} />
|
|
187
|
+
</DemoExample>
|
|
188
|
+
|
|
189
|
+
<DemoExample
|
|
190
|
+
title="Accordion Sizes"
|
|
191
|
+
description="Different sizes for various contexts and spacing needs."
|
|
192
|
+
>
|
|
193
|
+
<div className="flex flex-col gap-6">
|
|
194
|
+
<div>
|
|
195
|
+
<div className="text-base font-semibold mb-3 text-foreground">
|
|
196
|
+
Extra Small (xs)
|
|
197
|
+
</div>
|
|
198
|
+
<ModusAccordion items={sizeItemsXs} />
|
|
199
|
+
</div>
|
|
200
|
+
<div>
|
|
201
|
+
<div className="text-base font-semibold mb-3 text-foreground">
|
|
202
|
+
Small (sm)
|
|
203
|
+
</div>
|
|
204
|
+
<ModusAccordion items={sizeItemsSm} />
|
|
205
|
+
</div>
|
|
206
|
+
<div>
|
|
207
|
+
<div className="text-base font-semibold mb-3 text-foreground">
|
|
208
|
+
Medium (md)
|
|
209
|
+
</div>
|
|
210
|
+
<ModusAccordion items={sizeItemsMd} />
|
|
211
|
+
</div>
|
|
212
|
+
<div>
|
|
213
|
+
<div className="text-base font-semibold mb-3 text-foreground">
|
|
214
|
+
Large (lg)
|
|
215
|
+
</div>
|
|
216
|
+
<ModusAccordion items={sizeItemsLg} />
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
|
+
</DemoExample>
|
|
220
|
+
|
|
221
|
+
<DemoExample
|
|
222
|
+
title="Icons in Headers"
|
|
223
|
+
description="Enhance accordion headers with icons for better visual communication."
|
|
224
|
+
>
|
|
225
|
+
<ModusAccordion items={iconItems} />
|
|
226
|
+
</DemoExample>
|
|
227
|
+
|
|
228
|
+
<DemoExample
|
|
229
|
+
title="Default Expanded State"
|
|
230
|
+
description="Start with specific panels expanded by default."
|
|
231
|
+
>
|
|
232
|
+
<ModusAccordion items={expandedStateItems} />
|
|
233
|
+
</DemoExample>
|
|
234
|
+
</DemoPage>
|
|
235
|
+
);
|
|
236
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusAlert from "../../components/ModusAlert";
|
|
6
|
+
|
|
7
|
+
export default function AlertDemoPage() {
|
|
8
|
+
return (
|
|
9
|
+
<DemoPage
|
|
10
|
+
title="Modus Alert"
|
|
11
|
+
description="Alerts communicate important messages to users. Use alerts to notify users about success, warnings, errors, or informational messages."
|
|
12
|
+
>
|
|
13
|
+
<DemoExample
|
|
14
|
+
title="Alert Variants"
|
|
15
|
+
description="Different alert variants for various message types and contexts."
|
|
16
|
+
>
|
|
17
|
+
<div className="flex flex-col gap-4">
|
|
18
|
+
<ModusAlert
|
|
19
|
+
alertTitle="Info Alert"
|
|
20
|
+
alertDescription="This is an informational message."
|
|
21
|
+
variant="info"
|
|
22
|
+
/>
|
|
23
|
+
<ModusAlert
|
|
24
|
+
alertTitle="Success Alert"
|
|
25
|
+
alertDescription="Your action was completed successfully."
|
|
26
|
+
variant="success"
|
|
27
|
+
/>
|
|
28
|
+
<ModusAlert
|
|
29
|
+
alertTitle="Warning Alert"
|
|
30
|
+
alertDescription="Please review this important warning."
|
|
31
|
+
variant="warning"
|
|
32
|
+
/>
|
|
33
|
+
<ModusAlert
|
|
34
|
+
alertTitle="Error Alert"
|
|
35
|
+
alertDescription="An error occurred. Please try again."
|
|
36
|
+
variant="error"
|
|
37
|
+
/>
|
|
38
|
+
</div>
|
|
39
|
+
</DemoExample>
|
|
40
|
+
|
|
41
|
+
<DemoExample
|
|
42
|
+
title="Dismissible Alerts"
|
|
43
|
+
description="Alerts that can be dismissed by users with a close button."
|
|
44
|
+
>
|
|
45
|
+
<div className="flex flex-col gap-4">
|
|
46
|
+
<ModusAlert
|
|
47
|
+
alertTitle="Dismissible Info Alert"
|
|
48
|
+
alertDescription="You can close this alert."
|
|
49
|
+
variant="info"
|
|
50
|
+
dismissible
|
|
51
|
+
/>
|
|
52
|
+
<ModusAlert
|
|
53
|
+
alertTitle="Dismissible Success Alert"
|
|
54
|
+
alertDescription="This alert can be dismissed."
|
|
55
|
+
variant="success"
|
|
56
|
+
dismissible
|
|
57
|
+
/>
|
|
58
|
+
<ModusAlert
|
|
59
|
+
alertTitle="Dismissible Warning Alert"
|
|
60
|
+
alertDescription="Close this alert when you're done."
|
|
61
|
+
variant="warning"
|
|
62
|
+
dismissible
|
|
63
|
+
/>
|
|
64
|
+
<ModusAlert
|
|
65
|
+
alertTitle="Dismissible Error Alert"
|
|
66
|
+
alertDescription="Dismiss this error alert after reviewing."
|
|
67
|
+
variant="error"
|
|
68
|
+
dismissible
|
|
69
|
+
/>
|
|
70
|
+
</div>
|
|
71
|
+
</DemoExample>
|
|
72
|
+
|
|
73
|
+
<DemoExample
|
|
74
|
+
title="Alerts with Custom Icons"
|
|
75
|
+
description="Enhance alerts with custom icons for better visual communication."
|
|
76
|
+
>
|
|
77
|
+
<div className="flex flex-col gap-4">
|
|
78
|
+
<ModusAlert
|
|
79
|
+
alertTitle="Notification"
|
|
80
|
+
alertDescription="You have new messages."
|
|
81
|
+
variant="info"
|
|
82
|
+
icon="notifications"
|
|
83
|
+
/>
|
|
84
|
+
<ModusAlert
|
|
85
|
+
alertTitle="File Uploaded"
|
|
86
|
+
alertDescription="Your file has been uploaded successfully."
|
|
87
|
+
variant="success"
|
|
88
|
+
icon="upload"
|
|
89
|
+
/>
|
|
90
|
+
</div>
|
|
91
|
+
</DemoExample>
|
|
92
|
+
</DemoPage>
|
|
93
|
+
);
|
|
94
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState, useEffect } from "react";
|
|
4
|
+
import DemoExample from "../../components/DemoExample";
|
|
5
|
+
import DemoPage from "../../components/DemoPage";
|
|
6
|
+
import ModusAutocomplete from "../../components/ModusAutocomplete";
|
|
7
|
+
import type { AutocompleteItem } from "../../components/ModusAutocomplete";
|
|
8
|
+
|
|
9
|
+
const countryItems: AutocompleteItem[] = [
|
|
10
|
+
{ label: "United States", value: "us", visibleInMenu: true },
|
|
11
|
+
{ label: "Canada", value: "ca", visibleInMenu: true },
|
|
12
|
+
{ label: "United Kingdom", value: "uk", visibleInMenu: true },
|
|
13
|
+
{ label: "Australia", value: "au", visibleInMenu: true },
|
|
14
|
+
{ label: "Germany", value: "de", visibleInMenu: true },
|
|
15
|
+
{ label: "France", value: "fr", visibleInMenu: true },
|
|
16
|
+
{ label: "Japan", value: "jp", visibleInMenu: true },
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
const skillItems: AutocompleteItem[] = [
|
|
20
|
+
{ label: "Angular", value: "angular", visibleInMenu: true },
|
|
21
|
+
{ label: "React", value: "react", visibleInMenu: true },
|
|
22
|
+
{ label: "Vue.js", value: "vue", visibleInMenu: true },
|
|
23
|
+
{ label: "TypeScript", value: "typescript", visibleInMenu: true },
|
|
24
|
+
{ label: "JavaScript", value: "javascript", visibleInMenu: true },
|
|
25
|
+
{ label: "Node.js", value: "nodejs", visibleInMenu: true },
|
|
26
|
+
{ label: "Python", value: "python", visibleInMenu: true },
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
const sizeItems: AutocompleteItem[] = [
|
|
30
|
+
{ label: "Option 1", value: "1", visibleInMenu: true },
|
|
31
|
+
{ label: "Option 2", value: "2", visibleInMenu: true },
|
|
32
|
+
{ label: "Option 3", value: "3", visibleInMenu: true },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const stateItems: AutocompleteItem[] = [
|
|
36
|
+
{ label: "Option A", value: "a", visibleInMenu: true },
|
|
37
|
+
{ label: "Option B", value: "b", visibleInMenu: true },
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
const loadingItems: AutocompleteItem[] = [
|
|
41
|
+
{ label: "Result 1", value: "1", visibleInMenu: true },
|
|
42
|
+
{ label: "Result 2", value: "2", visibleInMenu: true },
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
export default function AutocompleteDemoPage() {
|
|
46
|
+
const [selectedCountry, setSelectedCountry] = useState<string>("");
|
|
47
|
+
const [selectedSkills, setSelectedSkills] = useState<string[]>([]);
|
|
48
|
+
|
|
49
|
+
const handleCountrySelect = (event: CustomEvent<AutocompleteItem>) => {
|
|
50
|
+
setSelectedCountry(event.detail.value);
|
|
51
|
+
console.log("Selected country:", event.detail);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const handleSkillSelect = (event: CustomEvent<AutocompleteItem>) => {
|
|
55
|
+
const value = event.detail.value;
|
|
56
|
+
setSelectedSkills((current) => {
|
|
57
|
+
if (current.includes(value)) {
|
|
58
|
+
return current.filter((v) => v !== value);
|
|
59
|
+
} else {
|
|
60
|
+
return [...current, value];
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
console.log("Selected skills:", selectedSkills);
|
|
67
|
+
}, [selectedSkills]);
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<DemoPage
|
|
71
|
+
title="Modus Autocomplete"
|
|
72
|
+
description="Autocomplete provides input suggestions as users type. Use autocomplete to help users find and select from a list of options quickly and efficiently."
|
|
73
|
+
>
|
|
74
|
+
<DemoExample
|
|
75
|
+
title="Basic Autocomplete"
|
|
76
|
+
description="Simple single-select autocomplete with a list of options."
|
|
77
|
+
>
|
|
78
|
+
<ModusAutocomplete
|
|
79
|
+
label="Search Countries"
|
|
80
|
+
placeholder="Type to search..."
|
|
81
|
+
items={countryItems}
|
|
82
|
+
value={selectedCountry}
|
|
83
|
+
onItemSelect={handleCountrySelect}
|
|
84
|
+
/>
|
|
85
|
+
</DemoExample>
|
|
86
|
+
|
|
87
|
+
<DemoExample
|
|
88
|
+
title="Multi-Select Autocomplete"
|
|
89
|
+
description="Allow users to select multiple items with chips displayed for selected values."
|
|
90
|
+
>
|
|
91
|
+
<ModusAutocomplete
|
|
92
|
+
label="Select Skills"
|
|
93
|
+
placeholder="Type to search skills..."
|
|
94
|
+
items={skillItems}
|
|
95
|
+
multiSelect
|
|
96
|
+
onItemSelect={handleSkillSelect}
|
|
97
|
+
/>
|
|
98
|
+
{selectedSkills.length > 0 && (
|
|
99
|
+
<div className="mt-4 p-4 rounded-lg bg-muted text-muted-foreground">
|
|
100
|
+
<div className="font-semibold mb-2">Selected Skills:</div>
|
|
101
|
+
<div className="text-sm">{selectedSkills.join(", ")}</div>
|
|
102
|
+
</div>
|
|
103
|
+
)}
|
|
104
|
+
</DemoExample>
|
|
105
|
+
|
|
106
|
+
<DemoExample
|
|
107
|
+
title="Autocomplete Sizes"
|
|
108
|
+
description="Different sizes for various contexts and visual hierarchy."
|
|
109
|
+
>
|
|
110
|
+
<div className="flex flex-col gap-4">
|
|
111
|
+
<ModusAutocomplete
|
|
112
|
+
label="Small Autocomplete"
|
|
113
|
+
placeholder="Small size..."
|
|
114
|
+
items={sizeItems}
|
|
115
|
+
size="sm"
|
|
116
|
+
/>
|
|
117
|
+
<ModusAutocomplete
|
|
118
|
+
label="Medium Autocomplete"
|
|
119
|
+
placeholder="Medium size..."
|
|
120
|
+
items={sizeItems}
|
|
121
|
+
size="md"
|
|
122
|
+
/>
|
|
123
|
+
<ModusAutocomplete
|
|
124
|
+
label="Large Autocomplete"
|
|
125
|
+
placeholder="Large size..."
|
|
126
|
+
items={sizeItems}
|
|
127
|
+
size="lg"
|
|
128
|
+
/>
|
|
129
|
+
</div>
|
|
130
|
+
</DemoExample>
|
|
131
|
+
|
|
132
|
+
<DemoExample
|
|
133
|
+
title="Disabled and Read-Only States"
|
|
134
|
+
description="Autocomplete in disabled and read-only states."
|
|
135
|
+
>
|
|
136
|
+
<div className="flex flex-col gap-4">
|
|
137
|
+
<ModusAutocomplete
|
|
138
|
+
label="Disabled Autocomplete"
|
|
139
|
+
placeholder="This is disabled"
|
|
140
|
+
items={stateItems}
|
|
141
|
+
disabled
|
|
142
|
+
/>
|
|
143
|
+
<ModusAutocomplete
|
|
144
|
+
label="Read-Only Autocomplete"
|
|
145
|
+
placeholder="This is read-only"
|
|
146
|
+
items={stateItems}
|
|
147
|
+
value="Read-only value"
|
|
148
|
+
readOnly
|
|
149
|
+
/>
|
|
150
|
+
</div>
|
|
151
|
+
</DemoExample>
|
|
152
|
+
|
|
153
|
+
<DemoExample
|
|
154
|
+
title="Loading State"
|
|
155
|
+
description="Show a spinner while fetching or processing autocomplete results."
|
|
156
|
+
>
|
|
157
|
+
<ModusAutocomplete
|
|
158
|
+
label="Search with Loading"
|
|
159
|
+
placeholder="Type to search..."
|
|
160
|
+
items={loadingItems}
|
|
161
|
+
showSpinner
|
|
162
|
+
/>
|
|
163
|
+
</DemoExample>
|
|
164
|
+
</DemoPage>
|
|
165
|
+
);
|
|
166
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusAvatar from "../../components/ModusAvatar";
|
|
6
|
+
|
|
7
|
+
export default function AvatarDemoPage() {
|
|
8
|
+
return (
|
|
9
|
+
<DemoPage
|
|
10
|
+
title="Modus Avatar"
|
|
11
|
+
description="Avatars represent users or entities in the interface. Use avatars to personalize user experiences and provide visual identity."
|
|
12
|
+
>
|
|
13
|
+
<DemoExample
|
|
14
|
+
title="Avatar Sizes"
|
|
15
|
+
description="Different sizes for various contexts and display needs."
|
|
16
|
+
>
|
|
17
|
+
<div className="flex flex-wrap items-center gap-6">
|
|
18
|
+
<div className="flex flex-col items-center gap-2">
|
|
19
|
+
<ModusAvatar alt="Extra Small Avatar" size="xs" initials="X S" />
|
|
20
|
+
<div className="text-xs text-muted-foreground">Extra Small (xs)</div>
|
|
21
|
+
</div>
|
|
22
|
+
<div className="flex flex-col items-center gap-2">
|
|
23
|
+
<ModusAvatar alt="Small Avatar" size="sm" initials="SM" />
|
|
24
|
+
<div className="text-xs text-muted-foreground">Small (sm)</div>
|
|
25
|
+
</div>
|
|
26
|
+
<div className="flex flex-col items-center gap-2">
|
|
27
|
+
<ModusAvatar alt="Medium Avatar" size="md" initials="MD" />
|
|
28
|
+
<div className="text-xs text-muted-foreground">Medium (md)</div>
|
|
29
|
+
</div>
|
|
30
|
+
<div className="flex flex-col items-center gap-2">
|
|
31
|
+
<ModusAvatar alt="Large Avatar" size="lg" initials="LG" />
|
|
32
|
+
<div className="text-xs text-muted-foreground">Large (lg)</div>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
</DemoExample>
|
|
36
|
+
|
|
37
|
+
<DemoExample
|
|
38
|
+
title="Avatar Shapes"
|
|
39
|
+
description="Circle and square shapes for different design styles."
|
|
40
|
+
>
|
|
41
|
+
<div className="flex flex-wrap items-center gap-6">
|
|
42
|
+
<div className="flex flex-col items-center gap-2">
|
|
43
|
+
<ModusAvatar alt="Circle Avatar" shape="circle" initials="C" size="md" />
|
|
44
|
+
<div className="text-xs text-muted-foreground">Circle</div>
|
|
45
|
+
</div>
|
|
46
|
+
<div className="flex flex-col items-center gap-2">
|
|
47
|
+
<ModusAvatar alt="Square Avatar" shape="square" initials="S" size="md" />
|
|
48
|
+
<div className="text-xs text-muted-foreground">Square</div>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
</DemoExample>
|
|
52
|
+
|
|
53
|
+
<DemoExample
|
|
54
|
+
title="Avatars with Images"
|
|
55
|
+
description="Avatars displaying user profile images."
|
|
56
|
+
>
|
|
57
|
+
<div className="flex flex-wrap items-center gap-6">
|
|
58
|
+
<ModusAvatar
|
|
59
|
+
alt="User Avatar"
|
|
60
|
+
imgSrc="https://i.pravatar.cc/150?img=1"
|
|
61
|
+
size="md"
|
|
62
|
+
shape="circle"
|
|
63
|
+
/>
|
|
64
|
+
<ModusAvatar
|
|
65
|
+
alt="User Avatar"
|
|
66
|
+
imgSrc="https://i.pravatar.cc/150?img=2"
|
|
67
|
+
size="md"
|
|
68
|
+
shape="circle"
|
|
69
|
+
/>
|
|
70
|
+
<ModusAvatar
|
|
71
|
+
alt="User Avatar"
|
|
72
|
+
imgSrc="https://i.pravatar.cc/150?img=3"
|
|
73
|
+
size="md"
|
|
74
|
+
shape="circle"
|
|
75
|
+
/>
|
|
76
|
+
</div>
|
|
77
|
+
</DemoExample>
|
|
78
|
+
|
|
79
|
+
<DemoExample
|
|
80
|
+
title="Avatars with Initials"
|
|
81
|
+
description="Avatars displaying user initials when no image is available."
|
|
82
|
+
>
|
|
83
|
+
<div className="flex flex-wrap items-center gap-6">
|
|
84
|
+
<ModusAvatar alt="John Doe" initials="J D" size="md" shape="circle" />
|
|
85
|
+
<ModusAvatar alt="Jane Smith" initials="J S" size="md" shape="circle" />
|
|
86
|
+
<ModusAvatar alt="Bob Johnson" initials="B J" size="md" shape="circle" />
|
|
87
|
+
<ModusAvatar alt="Alice Brown" initials="A B" size="md" shape="circle" />
|
|
88
|
+
</div>
|
|
89
|
+
</DemoExample>
|
|
90
|
+
|
|
91
|
+
<DemoExample
|
|
92
|
+
title="Fallback Behavior"
|
|
93
|
+
description="Avatars automatically fall back to initials when image fails to load."
|
|
94
|
+
>
|
|
95
|
+
<div className="flex flex-wrap items-center gap-6">
|
|
96
|
+
<ModusAvatar
|
|
97
|
+
alt="User Avatar"
|
|
98
|
+
imgSrc="https://invalid-url.com/image.jpg"
|
|
99
|
+
initials="F B"
|
|
100
|
+
size="md"
|
|
101
|
+
shape="circle"
|
|
102
|
+
/>
|
|
103
|
+
<div className="text-sm text-muted-foreground">
|
|
104
|
+
<div className="font-semibold mb-1">Fallback to Initials</div>
|
|
105
|
+
<div>When an image fails to load, the avatar automatically displays initials.</div>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
</DemoExample>
|
|
109
|
+
|
|
110
|
+
<DemoExample
|
|
111
|
+
title="Size Comparison"
|
|
112
|
+
description="Visual comparison of all avatar sizes side by side."
|
|
113
|
+
>
|
|
114
|
+
<div className="flex flex-wrap items-end gap-8">
|
|
115
|
+
<div className="flex flex-col items-center gap-2">
|
|
116
|
+
<ModusAvatar alt="XS Avatar" size="xs" initials="XS" shape="circle" />
|
|
117
|
+
<div className="text-xs text-muted-foreground">xs</div>
|
|
118
|
+
</div>
|
|
119
|
+
<div className="flex flex-col items-center gap-2">
|
|
120
|
+
<ModusAvatar alt="SM Avatar" size="sm" initials="SM" shape="circle" />
|
|
121
|
+
<div className="text-xs text-muted-foreground">sm</div>
|
|
122
|
+
</div>
|
|
123
|
+
<div className="flex flex-col items-center gap-2">
|
|
124
|
+
<ModusAvatar alt="MD Avatar" size="md" initials="MD" shape="circle" />
|
|
125
|
+
<div className="text-xs text-muted-foreground">md</div>
|
|
126
|
+
</div>
|
|
127
|
+
<div className="flex flex-col items-center gap-2">
|
|
128
|
+
<ModusAvatar alt="LG Avatar" size="lg" initials="LG" shape="circle" />
|
|
129
|
+
<div className="text-xs text-muted-foreground">lg</div>
|
|
130
|
+
</div>
|
|
131
|
+
</div>
|
|
132
|
+
</DemoExample>
|
|
133
|
+
</DemoPage>
|
|
134
|
+
);
|
|
135
|
+
}
|