@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,138 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusLoader from "../../components/ModusLoader";
|
|
6
|
+
|
|
7
|
+
export default function LoaderDemoPage() {
|
|
8
|
+
return (
|
|
9
|
+
<DemoPage
|
|
10
|
+
title="Modus Loader"
|
|
11
|
+
description="Loaders communicate that content is on the way. Select a variant that fits the space and avoid pairing multiple animations together."
|
|
12
|
+
>
|
|
13
|
+
<DemoExample
|
|
14
|
+
title="All Variants"
|
|
15
|
+
description="Six different animation styles to choose from based on your use case."
|
|
16
|
+
>
|
|
17
|
+
<div className="grid grid-cols-2 md:grid-cols-3 gap-6">
|
|
18
|
+
<div className="flex flex-col items-center gap-2">
|
|
19
|
+
<ModusLoader variant="spinner" size="md" />
|
|
20
|
+
<div className="text-sm text-foreground opacity-80">Spinner</div>
|
|
21
|
+
</div>
|
|
22
|
+
<div className="flex flex-col items-center gap-2">
|
|
23
|
+
<ModusLoader variant="ball" size="md" />
|
|
24
|
+
<div className="text-sm text-foreground opacity-80">Ball</div>
|
|
25
|
+
</div>
|
|
26
|
+
<div className="flex flex-col items-center gap-2">
|
|
27
|
+
<ModusLoader variant="bars" size="md" />
|
|
28
|
+
<div className="text-sm text-foreground opacity-80">Bars</div>
|
|
29
|
+
</div>
|
|
30
|
+
<div className="flex flex-col items-center gap-2">
|
|
31
|
+
<ModusLoader variant="dots" size="md" />
|
|
32
|
+
<div className="text-sm text-foreground opacity-80">Dots</div>
|
|
33
|
+
</div>
|
|
34
|
+
<div className="flex flex-col items-center gap-2">
|
|
35
|
+
<ModusLoader variant="infinity" size="md" />
|
|
36
|
+
<div className="text-sm text-foreground opacity-80">Infinity</div>
|
|
37
|
+
</div>
|
|
38
|
+
<div className="flex flex-col items-center gap-2">
|
|
39
|
+
<ModusLoader variant="ring" size="md" />
|
|
40
|
+
<div className="text-sm text-foreground opacity-80">Ring</div>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</DemoExample>
|
|
44
|
+
|
|
45
|
+
<DemoExample
|
|
46
|
+
title="Color Options"
|
|
47
|
+
description="Theme-aware colors that automatically adapt to light and dark themes."
|
|
48
|
+
>
|
|
49
|
+
<div className="grid grid-cols-2 md:grid-cols-4 gap-6">
|
|
50
|
+
<div className="flex flex-col items-center gap-2">
|
|
51
|
+
<ModusLoader variant="spinner" color="primary" size="md" />
|
|
52
|
+
<div className="text-sm text-foreground opacity-80">Primary</div>
|
|
53
|
+
</div>
|
|
54
|
+
<div className="flex flex-col items-center gap-2">
|
|
55
|
+
<ModusLoader variant="spinner" color="secondary" size="md" />
|
|
56
|
+
<div className="text-sm text-foreground opacity-80">Secondary</div>
|
|
57
|
+
</div>
|
|
58
|
+
<div className="flex flex-col items-center gap-2">
|
|
59
|
+
<ModusLoader variant="spinner" color="accent" size="md" />
|
|
60
|
+
<div className="text-sm text-foreground opacity-80">Accent</div>
|
|
61
|
+
</div>
|
|
62
|
+
<div className="flex flex-col items-center gap-2">
|
|
63
|
+
<ModusLoader variant="spinner" color="success" size="md" />
|
|
64
|
+
<div className="text-sm text-foreground opacity-80">Success</div>
|
|
65
|
+
</div>
|
|
66
|
+
<div className="flex flex-col items-center gap-2">
|
|
67
|
+
<ModusLoader variant="spinner" color="warning" size="md" />
|
|
68
|
+
<div className="text-sm text-foreground opacity-80">Warning</div>
|
|
69
|
+
</div>
|
|
70
|
+
<div className="flex flex-col items-center gap-2">
|
|
71
|
+
<ModusLoader variant="spinner" color="error" size="md" />
|
|
72
|
+
<div className="text-sm text-foreground opacity-80">Error</div>
|
|
73
|
+
</div>
|
|
74
|
+
<div className="flex flex-col items-center gap-2">
|
|
75
|
+
<ModusLoader variant="spinner" color="info" size="md" />
|
|
76
|
+
<div className="text-sm text-foreground opacity-80">Info</div>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
</DemoExample>
|
|
80
|
+
|
|
81
|
+
<DemoExample
|
|
82
|
+
title="Size Options"
|
|
83
|
+
description="Four size tokens from extra small to large for different contexts."
|
|
84
|
+
>
|
|
85
|
+
<div className="flex items-center justify-center gap-8">
|
|
86
|
+
<div className="flex flex-col items-center gap-2">
|
|
87
|
+
<ModusLoader variant="spinner" size="xs" />
|
|
88
|
+
<div className="text-sm text-foreground opacity-80">XS (16px)</div>
|
|
89
|
+
</div>
|
|
90
|
+
<div className="flex flex-col items-center gap-2">
|
|
91
|
+
<ModusLoader variant="spinner" size="sm" />
|
|
92
|
+
<div className="text-sm text-foreground opacity-80">SM (20px)</div>
|
|
93
|
+
</div>
|
|
94
|
+
<div className="flex flex-col items-center gap-2">
|
|
95
|
+
<ModusLoader variant="spinner" size="md" />
|
|
96
|
+
<div className="text-sm text-foreground opacity-80">MD (24px)</div>
|
|
97
|
+
</div>
|
|
98
|
+
<div className="flex flex-col items-center gap-2">
|
|
99
|
+
<ModusLoader variant="spinner" size="lg" />
|
|
100
|
+
<div className="text-sm text-foreground opacity-80">LG (32px)</div>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
</DemoExample>
|
|
104
|
+
|
|
105
|
+
<DemoExample
|
|
106
|
+
title="Usage Examples"
|
|
107
|
+
description="Common patterns for using loaders in real applications."
|
|
108
|
+
>
|
|
109
|
+
<div className="space-y-6">
|
|
110
|
+
<div className="flex items-center gap-3">
|
|
111
|
+
<ModusLoader variant="spinner" size="md" />
|
|
112
|
+
<div className="text-sm text-foreground opacity-80">
|
|
113
|
+
Syncing records…
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
<div className="flex items-center gap-2">
|
|
117
|
+
<ModusLoader variant="dots" size="sm" color="secondary" />
|
|
118
|
+
<div className="text-sm text-foreground opacity-80">
|
|
119
|
+
Preparing report
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
<div className="flex items-center gap-3">
|
|
123
|
+
<ModusLoader variant="bars" size="sm" color="success" />
|
|
124
|
+
<div className="text-sm text-foreground opacity-80">
|
|
125
|
+
Upload complete
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
<div className="flex items-center gap-3">
|
|
129
|
+
<ModusLoader variant="ring" size="lg" color="warning" />
|
|
130
|
+
<div className="text-lg text-foreground">
|
|
131
|
+
Processing large dataset…
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
</DemoExample>
|
|
136
|
+
</DemoPage>
|
|
137
|
+
);
|
|
138
|
+
}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import DemoExample from "../../components/DemoExample";
|
|
2
|
+
import DemoPage from "../../components/DemoPage";
|
|
3
|
+
import ModusLogo, { type LogoName } from "../../components/ModusLogo";
|
|
4
|
+
|
|
5
|
+
// Trimble Products (19 logos)
|
|
6
|
+
const trimbleLogos: { name: LogoName; displayName: string }[] = [
|
|
7
|
+
{ name: "trimble", displayName: "Trimble" },
|
|
8
|
+
{ name: "siteworks", displayName: "Trimble Siteworks" },
|
|
9
|
+
{ name: "earthworks", displayName: "Trimble Earthworks" },
|
|
10
|
+
{ name: "financials", displayName: "Trimble Financials" },
|
|
11
|
+
{ name: "worksmanager", displayName: "Trimble WorksManager" },
|
|
12
|
+
{ name: "connect", displayName: "Trimble Connect" },
|
|
13
|
+
{ name: "unity_construct", displayName: "Trimble Unity Construct" },
|
|
14
|
+
{ name: "trade_servicelive", displayName: "Trade ServiceLive" },
|
|
15
|
+
{ name: "buildable", displayName: "Buildable" },
|
|
16
|
+
{ name: "livecount", displayName: "LiveCount" },
|
|
17
|
+
{ name: "supplier_xchange", displayName: "Supplier Xchange" },
|
|
18
|
+
{ name: "app_xchange", displayName: "App Xchange" },
|
|
19
|
+
{ name: "trimble_unity", displayName: "Trimble Unity" },
|
|
20
|
+
{ name: "sketchup", displayName: "SketchUp" },
|
|
21
|
+
{ name: "pc_miler", displayName: "PC Miler" },
|
|
22
|
+
{ name: "copilot", displayName: "CoPilot" },
|
|
23
|
+
{ name: "trimble_pay", displayName: "Trimble Pay" },
|
|
24
|
+
{ name: "projectsight", displayName: "ProjectSight" },
|
|
25
|
+
{ name: "demand_planning", displayName: "Demand Planning" },
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
// Viewpoint Products (17 logos)
|
|
29
|
+
const viewpointLogos: { name: LogoName; displayName: string }[] = [
|
|
30
|
+
{ name: "viewpoint", displayName: "Viewpoint" },
|
|
31
|
+
{ name: "viewpoint_analytics", displayName: "Viewpoint Analytics" },
|
|
32
|
+
{ name: "viewpoint_epayments", displayName: "Viewpoint ePayments" },
|
|
33
|
+
{ name: "viewpoint_estimating", displayName: "Viewpoint Estimating" },
|
|
34
|
+
{
|
|
35
|
+
name: "viewpoint_field_management",
|
|
36
|
+
displayName: "Viewpoint Field Management",
|
|
37
|
+
},
|
|
38
|
+
{ name: "viewpoint_field_time", displayName: "Viewpoint Field Time" },
|
|
39
|
+
{
|
|
40
|
+
name: "viewpoint_financial_controls",
|
|
41
|
+
displayName: "Viewpoint Financial Controls",
|
|
42
|
+
},
|
|
43
|
+
{ name: "viewpoint_hr_management", displayName: "Viewpoint HR Management" },
|
|
44
|
+
{ name: "viewpoint_jobpac_connect", displayName: "Viewpoint Jobpac Connect" },
|
|
45
|
+
{ name: "viewpoint_procontractor", displayName: "Viewpoint ProContractor" },
|
|
46
|
+
{ name: "viewpoint_spectrum", displayName: "Viewpoint Spectrum" },
|
|
47
|
+
{ name: "viewpoint_team", displayName: "Viewpoint Team" },
|
|
48
|
+
{ name: "viewpoint_vista", displayName: "Viewpoint Vista" },
|
|
49
|
+
{
|
|
50
|
+
name: "viewpoint_spectrum_service_tech",
|
|
51
|
+
displayName: "Viewpoint Spectrum Service Tech",
|
|
52
|
+
},
|
|
53
|
+
{ name: "viewpoint_for_projects", displayName: "Viewpoint For Projects" },
|
|
54
|
+
{
|
|
55
|
+
name: "viewpoint_vista_field_service",
|
|
56
|
+
displayName: "Viewpoint Vista Field Service",
|
|
57
|
+
},
|
|
58
|
+
{ name: "viewpoint_field_view", displayName: "Viewpoint Field View" },
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
// Sample logos for emblems and sizes
|
|
62
|
+
const sampleLogos: LogoName[] = ["trimble", "connect", "viewpoint", "sketchup"];
|
|
63
|
+
|
|
64
|
+
export default function LogoDemoPage() {
|
|
65
|
+
return (
|
|
66
|
+
<DemoPage
|
|
67
|
+
title="Modus Logo"
|
|
68
|
+
description="Logo component displays Trimble and Viewpoint product logos with automatic theme-aware light/dark switching. Use the component for consistent branding across applications."
|
|
69
|
+
>
|
|
70
|
+
<DemoExample
|
|
71
|
+
title="Trimble Product Logos (19)"
|
|
72
|
+
description="All available Trimble product logos."
|
|
73
|
+
>
|
|
74
|
+
<div className="grid grid-cols-2 gap-8">
|
|
75
|
+
{trimbleLogos.map((logo) => (
|
|
76
|
+
<div
|
|
77
|
+
key={logo.name}
|
|
78
|
+
className="flex flex-col items-center gap-4 p-6 bg-muted rounded-lg"
|
|
79
|
+
>
|
|
80
|
+
<div className="h-20 flex items-center justify-center">
|
|
81
|
+
<ModusLogo name={logo.name} customClass="max-h-20 max-w-64" />
|
|
82
|
+
</div>
|
|
83
|
+
<div className="text-sm text-muted-foreground text-center">
|
|
84
|
+
{logo.displayName}
|
|
85
|
+
</div>
|
|
86
|
+
<code className="text-xs bg-background px-2 py-1 rounded">
|
|
87
|
+
{logo.name}
|
|
88
|
+
</code>
|
|
89
|
+
</div>
|
|
90
|
+
))}
|
|
91
|
+
</div>
|
|
92
|
+
</DemoExample>
|
|
93
|
+
|
|
94
|
+
<DemoExample
|
|
95
|
+
title="Viewpoint Product Logos (17)"
|
|
96
|
+
description="All available Viewpoint product logos."
|
|
97
|
+
>
|
|
98
|
+
<div className="grid grid-cols-2 gap-8">
|
|
99
|
+
{viewpointLogos.map((logo) => (
|
|
100
|
+
<div
|
|
101
|
+
key={logo.name}
|
|
102
|
+
className="flex flex-col items-center gap-4 p-6 bg-muted rounded-lg"
|
|
103
|
+
>
|
|
104
|
+
<div className="h-20 flex items-center justify-center">
|
|
105
|
+
<ModusLogo name={logo.name} customClass="max-h-20 max-w-64" />
|
|
106
|
+
</div>
|
|
107
|
+
<div className="text-sm text-muted-foreground text-center">
|
|
108
|
+
{logo.displayName}
|
|
109
|
+
</div>
|
|
110
|
+
<code className="text-xs bg-background px-2 py-1 rounded">
|
|
111
|
+
{logo.name}
|
|
112
|
+
</code>
|
|
113
|
+
</div>
|
|
114
|
+
))}
|
|
115
|
+
</div>
|
|
116
|
+
</DemoExample>
|
|
117
|
+
|
|
118
|
+
<DemoExample
|
|
119
|
+
title="Emblem Variants (Icon-Only)"
|
|
120
|
+
description="Compact emblem versions of logos for use in limited space."
|
|
121
|
+
>
|
|
122
|
+
<div className="flex flex-wrap gap-8 items-end">
|
|
123
|
+
{sampleLogos.map((logoName) => (
|
|
124
|
+
<div
|
|
125
|
+
key={`emblem-${logoName}`}
|
|
126
|
+
className="flex flex-col items-center gap-2"
|
|
127
|
+
>
|
|
128
|
+
<div className="h-16 w-16 flex items-center justify-center bg-muted rounded-lg p-2">
|
|
129
|
+
<ModusLogo name={logoName} emblem />
|
|
130
|
+
</div>
|
|
131
|
+
<code className="text-xs text-muted-foreground">{logoName}</code>
|
|
132
|
+
</div>
|
|
133
|
+
))}
|
|
134
|
+
</div>
|
|
135
|
+
</DemoExample>
|
|
136
|
+
|
|
137
|
+
<DemoExample
|
|
138
|
+
title="Logo Sizes"
|
|
139
|
+
description="Control logo size using custom CSS classes."
|
|
140
|
+
>
|
|
141
|
+
<div className="flex flex-col gap-8">
|
|
142
|
+
<div className="flex flex-col gap-2">
|
|
143
|
+
<div className="text-sm text-muted-foreground">Small (w-20)</div>
|
|
144
|
+
<div className="flex flex-wrap gap-4 items-center">
|
|
145
|
+
<ModusLogo name="trimble" customClass="w-20" />
|
|
146
|
+
<ModusLogo name="connect" customClass="w-20" />
|
|
147
|
+
<ModusLogo name="viewpoint" customClass="w-20" />
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
<div className="flex flex-col gap-2">
|
|
151
|
+
<div className="text-sm text-muted-foreground">Medium (w-32)</div>
|
|
152
|
+
<div className="flex flex-wrap gap-4 items-center">
|
|
153
|
+
<ModusLogo name="trimble" customClass="w-32" />
|
|
154
|
+
<ModusLogo name="connect" customClass="w-32" />
|
|
155
|
+
<ModusLogo name="viewpoint" customClass="w-32" />
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
<div className="flex flex-col gap-2">
|
|
159
|
+
<div className="text-sm text-muted-foreground">Large (w-48)</div>
|
|
160
|
+
<div className="flex flex-wrap gap-4 items-center">
|
|
161
|
+
<ModusLogo name="trimble" customClass="w-48" />
|
|
162
|
+
<ModusLogo name="connect" customClass="w-48" />
|
|
163
|
+
<ModusLogo name="viewpoint" customClass="w-48" />
|
|
164
|
+
</div>
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
</DemoExample>
|
|
168
|
+
|
|
169
|
+
<DemoExample
|
|
170
|
+
title="Emblem Sizes"
|
|
171
|
+
description="Sized emblem variants for different use cases."
|
|
172
|
+
>
|
|
173
|
+
<div className="flex flex-wrap gap-8 items-end">
|
|
174
|
+
<div className="flex flex-col items-center gap-2">
|
|
175
|
+
<div className="h-8 w-8 flex items-center justify-center bg-muted rounded p-1">
|
|
176
|
+
<ModusLogo name="trimble" emblem customClass="w-6 h-6" />
|
|
177
|
+
</div>
|
|
178
|
+
<div className="text-xs text-muted-foreground">Small</div>
|
|
179
|
+
</div>
|
|
180
|
+
<div className="flex flex-col items-center gap-2">
|
|
181
|
+
<div className="h-12 w-12 flex items-center justify-center bg-muted rounded-lg p-2">
|
|
182
|
+
<ModusLogo name="trimble" emblem customClass="w-8 h-8" />
|
|
183
|
+
</div>
|
|
184
|
+
<div className="text-xs text-muted-foreground">Medium</div>
|
|
185
|
+
</div>
|
|
186
|
+
<div className="flex flex-col items-center gap-2">
|
|
187
|
+
<div className="h-16 w-16 flex items-center justify-center bg-muted rounded-lg p-2">
|
|
188
|
+
<ModusLogo name="trimble" emblem customClass="w-12 h-12" />
|
|
189
|
+
</div>
|
|
190
|
+
<div className="text-xs text-muted-foreground">Large</div>
|
|
191
|
+
</div>
|
|
192
|
+
<div className="flex flex-col items-center gap-2">
|
|
193
|
+
<div className="h-24 w-24 flex items-center justify-center bg-muted rounded-lg p-2">
|
|
194
|
+
<ModusLogo name="trimble" emblem customClass="w-20 h-20" />
|
|
195
|
+
</div>
|
|
196
|
+
<div className="text-xs text-muted-foreground">Extra Large</div>
|
|
197
|
+
</div>
|
|
198
|
+
</div>
|
|
199
|
+
</DemoExample>
|
|
200
|
+
|
|
201
|
+
<DemoExample
|
|
202
|
+
title="Custom Alt Text"
|
|
203
|
+
description="Provide custom alt text for better accessibility."
|
|
204
|
+
>
|
|
205
|
+
<div className="flex flex-wrap gap-6">
|
|
206
|
+
<div className="flex flex-col items-center gap-2">
|
|
207
|
+
<ModusLogo
|
|
208
|
+
name="connect"
|
|
209
|
+
alt="Trimble Connect - Cloud-based collaboration platform"
|
|
210
|
+
customClass="w-32"
|
|
211
|
+
/>
|
|
212
|
+
<div className="text-xs text-muted-foreground">Custom alt text</div>
|
|
213
|
+
</div>
|
|
214
|
+
<div className="flex flex-col items-center gap-2">
|
|
215
|
+
<ModusLogo name="viewpoint_vista" customClass="w-32" />
|
|
216
|
+
<div className="text-xs text-muted-foreground">
|
|
217
|
+
Default alt (logo name)
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
</div>
|
|
221
|
+
</DemoExample>
|
|
222
|
+
|
|
223
|
+
<DemoExample
|
|
224
|
+
title="Theme Awareness"
|
|
225
|
+
description="Logos automatically switch between light and dark variants based on the current theme."
|
|
226
|
+
>
|
|
227
|
+
<div className="p-6 bg-muted rounded-lg">
|
|
228
|
+
<div className="text-sm text-foreground mb-4">
|
|
229
|
+
The logo component observes the{" "}
|
|
230
|
+
<code className="bg-background px-2 py-1 rounded">data-theme</code>{" "}
|
|
231
|
+
attribute on the{" "}
|
|
232
|
+
<code className="bg-background px-2 py-1 rounded">
|
|
233
|
+
<html>
|
|
234
|
+
</code>{" "}
|
|
235
|
+
element and automatically updates when the theme changes. Try
|
|
236
|
+
switching themes using the theme toggle in the header.
|
|
237
|
+
</div>
|
|
238
|
+
<div className="flex flex-wrap gap-6">
|
|
239
|
+
<ModusLogo name="trimble" customClass="w-32" />
|
|
240
|
+
<ModusLogo name="viewpoint" customClass="w-32" />
|
|
241
|
+
<ModusLogo name="sketchup" customClass="w-32" />
|
|
242
|
+
</div>
|
|
243
|
+
</div>
|
|
244
|
+
</DemoExample>
|
|
245
|
+
|
|
246
|
+
<DemoExample
|
|
247
|
+
title="Full Logo vs Emblem Comparison"
|
|
248
|
+
description="Side-by-side comparison of full logos and their emblem variants."
|
|
249
|
+
>
|
|
250
|
+
<div className="overflow-x-auto">
|
|
251
|
+
<table className="w-full text-sm">
|
|
252
|
+
<thead>
|
|
253
|
+
<tr className="border-b border-border">
|
|
254
|
+
<th className="text-left py-3 px-4 font-medium text-foreground">
|
|
255
|
+
Product
|
|
256
|
+
</th>
|
|
257
|
+
<th className="text-center py-3 px-4 font-medium text-foreground">
|
|
258
|
+
Full Logo
|
|
259
|
+
</th>
|
|
260
|
+
<th className="text-center py-3 px-4 font-medium text-foreground">
|
|
261
|
+
Emblem
|
|
262
|
+
</th>
|
|
263
|
+
</tr>
|
|
264
|
+
</thead>
|
|
265
|
+
<tbody>
|
|
266
|
+
{sampleLogos.map((logoName) => (
|
|
267
|
+
<tr
|
|
268
|
+
key={`compare-${logoName}`}
|
|
269
|
+
className="border-b border-border"
|
|
270
|
+
>
|
|
271
|
+
<td className="py-4 px-4 text-muted-foreground capitalize">
|
|
272
|
+
{logoName.replace(/_/g, " ")}
|
|
273
|
+
</td>
|
|
274
|
+
<td className="py-4 px-4 text-center">
|
|
275
|
+
<div className="flex justify-center">
|
|
276
|
+
<ModusLogo name={logoName} customClass="h-8" />
|
|
277
|
+
</div>
|
|
278
|
+
</td>
|
|
279
|
+
<td className="py-4 px-4 text-center">
|
|
280
|
+
<div className="flex justify-center">
|
|
281
|
+
<ModusLogo name={logoName} emblem customClass="h-8 w-8" />
|
|
282
|
+
</div>
|
|
283
|
+
</td>
|
|
284
|
+
</tr>
|
|
285
|
+
))}
|
|
286
|
+
</tbody>
|
|
287
|
+
</table>
|
|
288
|
+
</div>
|
|
289
|
+
</DemoExample>
|
|
290
|
+
</DemoPage>
|
|
291
|
+
);
|
|
292
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import DemoExample from "../../components/DemoExample";
|
|
5
|
+
import DemoPage from "../../components/DemoPage";
|
|
6
|
+
import ModusMenu from "../../components/ModusMenu";
|
|
7
|
+
|
|
8
|
+
export default function MenuDemoPage() {
|
|
9
|
+
const [selectedMenu, setSelectedMenu] = useState<string>("all");
|
|
10
|
+
|
|
11
|
+
// Vertical Menu items
|
|
12
|
+
const verticalMenuItems = [
|
|
13
|
+
{ label: "Dashboard", value: "dashboard", selected: true },
|
|
14
|
+
{ label: "Projects", value: "projects" },
|
|
15
|
+
{ label: "Reports", value: "reports" },
|
|
16
|
+
{ label: "Settings", value: "settings" },
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
// Horizontal Menu items
|
|
20
|
+
const horizontalMenuItems = [
|
|
21
|
+
{ label: "Home", value: "home" },
|
|
22
|
+
{ label: "Products", value: "products" },
|
|
23
|
+
{ label: "About", value: "about" },
|
|
24
|
+
{ label: "Contact", value: "contact" },
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
// Selected Menu Items
|
|
28
|
+
const selectedMenuItems = [
|
|
29
|
+
{ label: "All Projects", value: "all", selected: selectedMenu === "all" },
|
|
30
|
+
{ label: "Active", value: "active", selected: selectedMenu === "active" },
|
|
31
|
+
{ label: "Archived", value: "archived", selected: selectedMenu === "archived" },
|
|
32
|
+
{ label: "Deleted", value: "deleted", selected: selectedMenu === "deleted" },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const handleSelectedMenuChange = (item: { label: string; value: string }) => {
|
|
36
|
+
setSelectedMenu(item.value);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<DemoPage
|
|
41
|
+
title="Modus Menu"
|
|
42
|
+
description="Menus provide navigation and action lists. Use menus to organize related actions or navigation items in a consistent, accessible way."
|
|
43
|
+
>
|
|
44
|
+
<DemoExample
|
|
45
|
+
title="Vertical Menu"
|
|
46
|
+
description="Default vertical menu orientation for navigation lists."
|
|
47
|
+
>
|
|
48
|
+
<ModusMenu items={verticalMenuItems} bordered />
|
|
49
|
+
</DemoExample>
|
|
50
|
+
|
|
51
|
+
<DemoExample
|
|
52
|
+
title="Horizontal Menu"
|
|
53
|
+
description="Horizontal menu orientation for top navigation."
|
|
54
|
+
>
|
|
55
|
+
<ModusMenu items={horizontalMenuItems} orientation="horizontal" />
|
|
56
|
+
</DemoExample>
|
|
57
|
+
|
|
58
|
+
<DemoExample
|
|
59
|
+
title="Selected Menu Items"
|
|
60
|
+
description="Menu with selected items to indicate current state."
|
|
61
|
+
>
|
|
62
|
+
<ModusMenu
|
|
63
|
+
items={selectedMenuItems}
|
|
64
|
+
bordered
|
|
65
|
+
onItemSelect={handleSelectedMenuChange}
|
|
66
|
+
/>
|
|
67
|
+
</DemoExample>
|
|
68
|
+
</DemoPage>
|
|
69
|
+
);
|
|
70
|
+
}
|