@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,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Critical bug fix for ModusWcCheckbox value property inversion in Angular
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# ModusWcCheckbox Value Inversion Bug in Angular
|
|
8
|
+
|
|
9
|
+
## CRITICAL BUG: Checkbox Value Inversion
|
|
10
|
+
|
|
11
|
+
**Problem**: The `modus-wc-checkbox` component has an inverted `value` property that causes unexpected behavior in Angular applications.
|
|
12
|
+
|
|
13
|
+
**Bug Details**:
|
|
14
|
+
|
|
15
|
+
- When checkbox is **checked**: `target.value` returns `false`
|
|
16
|
+
- When checkbox is **unchecked**: `target.value` returns `true`
|
|
17
|
+
- This is the **opposite** of what developers expect
|
|
18
|
+
- The bug occurs in the `inputChange` event's `target.value` property
|
|
19
|
+
|
|
20
|
+
## Solution: Invert the Value
|
|
21
|
+
|
|
22
|
+
### Correct Pattern: Invert the Value
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
// CORRECT: Always invert the value
|
|
26
|
+
@Component({
|
|
27
|
+
template: `
|
|
28
|
+
<modus-checkbox
|
|
29
|
+
[value]="isChecked()"
|
|
30
|
+
(inputChange)="handleChange($event)"
|
|
31
|
+
>
|
|
32
|
+
Checkbox Label
|
|
33
|
+
</modus-checkbox>
|
|
34
|
+
`,
|
|
35
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
36
|
+
})
|
|
37
|
+
export class CheckboxComponent {
|
|
38
|
+
readonly isChecked = signal(false);
|
|
39
|
+
|
|
40
|
+
handleChange(event: CustomEvent<InputEvent>): void {
|
|
41
|
+
const value = (event.target as HTMLModusWcCheckboxElement).value;
|
|
42
|
+
const actualChecked = !value; // CORRECT: Invert the value
|
|
43
|
+
this.isChecked.set(actualChecked);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Wrapper Component Pattern (Recommended)
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
// CORRECT: Create a wrapper component that handles the inversion
|
|
52
|
+
@Component({
|
|
53
|
+
selector: 'app-checkbox',
|
|
54
|
+
template: `
|
|
55
|
+
<modus-checkbox
|
|
56
|
+
[value]="value()"
|
|
57
|
+
[disabled]="disabled()"
|
|
58
|
+
[label]="label()"
|
|
59
|
+
(inputChange)="handleInputChange($event)"
|
|
60
|
+
>
|
|
61
|
+
<ng-content />
|
|
62
|
+
</modus-checkbox>
|
|
63
|
+
`,
|
|
64
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
65
|
+
})
|
|
66
|
+
export class AppCheckboxComponent {
|
|
67
|
+
readonly value = input<boolean>(false);
|
|
68
|
+
readonly disabled = input<boolean>(false);
|
|
69
|
+
readonly label = input<string>('');
|
|
70
|
+
readonly valueChange = output<boolean>();
|
|
71
|
+
|
|
72
|
+
handleInputChange(event: CustomEvent<InputEvent>): void {
|
|
73
|
+
// CRITICAL: Handle the value inversion bug
|
|
74
|
+
const rawValue = (event.target as HTMLModusWcCheckboxElement).value;
|
|
75
|
+
const actualValue = !rawValue; // CORRECT: Invert the value
|
|
76
|
+
|
|
77
|
+
this.valueChange.emit(actualValue);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Key Takeaways
|
|
83
|
+
|
|
84
|
+
1. **Always Invert the Value**: `const actualChecked = !value` where `value` comes from `event.target.value`
|
|
85
|
+
2. **Use Correct Event**: Listen to `inputChange` event on the modus-checkbox
|
|
86
|
+
3. **Access Target Value**: Use `(event.target as HTMLModusWcCheckboxElement).value`
|
|
87
|
+
4. **Create Wrapper Components**: Best practice is to handle inversion in a wrapper component
|
|
88
|
+
5. **Test the Inversion**: Always test checkbox behavior with state management
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
**Remember: This is a critical bug in the modus-wc-checkbox component. Always invert the value property to get the correct checked state.**
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Chrome DevTools MCP usage for comprehensive Angular + Vite testing
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Chrome DevTools Testing - Short
|
|
8
|
+
|
|
9
|
+
Mandatory Chrome DevTools MCP usage for comprehensive Angular + Vite testing.
|
|
10
|
+
|
|
11
|
+
## Key Rules
|
|
12
|
+
|
|
13
|
+
- **Always use Chrome DevTools MCP** - Never skip browser testing
|
|
14
|
+
- **Test before completion** - Validate all implementations in browser
|
|
15
|
+
- **Check console for errors** - Look for JavaScript errors and warnings
|
|
16
|
+
- **Inspect DOM structure** - Verify proper HTML structure and component rendering
|
|
17
|
+
- **Test interactive elements** - Verify Modus Web Components work correctly
|
|
18
|
+
- **Performance testing** - Use DevTools for performance analysis
|
|
19
|
+
- **Test all 6 themes** - Verify components work in all Modus themes
|
|
20
|
+
|
|
21
|
+
## Testing Checklist
|
|
22
|
+
|
|
23
|
+
- [ ] No console errors or warnings
|
|
24
|
+
- [ ] Components render correctly
|
|
25
|
+
- [ ] Events fire and handle properly
|
|
26
|
+
- [ ] Forms validate correctly
|
|
27
|
+
- [ ] Modals open/close with native dialog API
|
|
28
|
+
- [ ] All 6 themes display correctly
|
|
29
|
+
- [ ] Keyboard navigation works
|
|
30
|
+
- [ ] Accessibility attributes present
|
|
31
|
+
|
|
32
|
+
## Reference
|
|
33
|
+
|
|
34
|
+
For detailed testing workflows and checklists, fetch the full rule: `modus-angular-chrome-devtools-testing`
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Chrome DevTools MCP usage for comprehensive Angular + Vite testing
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Chrome DevTools Testing - Angular + Vite
|
|
8
|
+
|
|
9
|
+
Comprehensive Chrome DevTools usage for Angular + Vite application testing.
|
|
10
|
+
|
|
11
|
+
## Key Rules
|
|
12
|
+
|
|
13
|
+
- **Always use Chrome DevTools MCP** - Never skip browser testing
|
|
14
|
+
- **Test before completion** - Validate all implementations in browser
|
|
15
|
+
- **Check console for errors** - Look for JavaScript errors and warnings
|
|
16
|
+
- **Inspect DOM structure** - Verify proper HTML structure and component rendering
|
|
17
|
+
- **Test interactive elements** - Verify Modus Web Components work correctly
|
|
18
|
+
- **Performance testing** - Use DevTools for performance analysis
|
|
19
|
+
- **Cross-browser validation** - Test in Chrome, Firefox, Safari
|
|
20
|
+
|
|
21
|
+
## Testing Workflow
|
|
22
|
+
|
|
23
|
+
### 1. Pre-Development Check
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Start development server
|
|
27
|
+
npm start
|
|
28
|
+
|
|
29
|
+
# Open browser at http://localhost:4200
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. Console Error Checking
|
|
33
|
+
|
|
34
|
+
Look for:
|
|
35
|
+
- JavaScript/TypeScript errors
|
|
36
|
+
- Angular warnings
|
|
37
|
+
- Modus Web Component initialization errors
|
|
38
|
+
- Network request failures
|
|
39
|
+
- CSP violations
|
|
40
|
+
|
|
41
|
+
### 3. DOM Inspection
|
|
42
|
+
|
|
43
|
+
Verify:
|
|
44
|
+
- Modus components render correctly
|
|
45
|
+
- Wrapper components pass props correctly
|
|
46
|
+
- Event listeners are attached
|
|
47
|
+
- Styles are applied correctly
|
|
48
|
+
|
|
49
|
+
### 4. Network Tab
|
|
50
|
+
|
|
51
|
+
Check:
|
|
52
|
+
- API requests complete successfully
|
|
53
|
+
- Fonts and icons load correctly
|
|
54
|
+
- No 404 errors for assets
|
|
55
|
+
|
|
56
|
+
### 5. Performance Testing
|
|
57
|
+
|
|
58
|
+
Monitor:
|
|
59
|
+
- Component render times
|
|
60
|
+
- Memory usage
|
|
61
|
+
- Change detection cycles
|
|
62
|
+
- Bundle size impact
|
|
63
|
+
|
|
64
|
+
## Testing Checklist
|
|
65
|
+
|
|
66
|
+
### Component Testing
|
|
67
|
+
|
|
68
|
+
- [ ] Component renders without console errors
|
|
69
|
+
- [ ] Props/inputs are passed correctly to Modus components
|
|
70
|
+
- [ ] Events emit correctly
|
|
71
|
+
- [ ] Styles match design system
|
|
72
|
+
- [ ] Accessibility attributes present
|
|
73
|
+
|
|
74
|
+
### Form Testing
|
|
75
|
+
|
|
76
|
+
- [ ] Input values update correctly
|
|
77
|
+
- [ ] Validation errors display
|
|
78
|
+
- [ ] Form submission works
|
|
79
|
+
- [ ] Checkbox value inversion handled
|
|
80
|
+
|
|
81
|
+
### Navigation Testing
|
|
82
|
+
|
|
83
|
+
- [ ] Routes work correctly
|
|
84
|
+
- [ ] Side navigation expands/collapses
|
|
85
|
+
- [ ] Menu items are accessible
|
|
86
|
+
- [ ] Active states highlight correctly
|
|
87
|
+
|
|
88
|
+
### Theme Testing
|
|
89
|
+
|
|
90
|
+
- [ ] All 6 themes work correctly
|
|
91
|
+
- [ ] Theme switching persists
|
|
92
|
+
- [ ] Colors update appropriately
|
|
93
|
+
- [ ] No flash of unstyled content
|
|
94
|
+
|
|
95
|
+
### Modal Testing
|
|
96
|
+
|
|
97
|
+
- [ ] Modal opens with `showModal()`
|
|
98
|
+
- [ ] Modal closes with `close()`
|
|
99
|
+
- [ ] Focus trapping works
|
|
100
|
+
- [ ] ESC key closes modal
|
|
101
|
+
|
|
102
|
+
## Common Issues to Check
|
|
103
|
+
|
|
104
|
+
### Modus Component Issues
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
// Check for proper component initialization
|
|
108
|
+
const button = document.querySelector('modus-wc-button');
|
|
109
|
+
console.log('Button initialized:', button);
|
|
110
|
+
|
|
111
|
+
// Check for event binding
|
|
112
|
+
const checkbox = document.querySelector('modus-wc-checkbox');
|
|
113
|
+
console.log('Checkbox value:', checkbox?.value);
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Angular-Specific Issues
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
// Check for change detection issues
|
|
120
|
+
// Components should use OnPush
|
|
121
|
+
@Component({
|
|
122
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
// Check signal updates
|
|
126
|
+
console.log('Signal value:', this.mySignal());
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Event Handling Issues
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
// Verify CustomEvent.detail extraction
|
|
133
|
+
handleEvent(event: CustomEvent<{ value: string }>): void {
|
|
134
|
+
console.log('Event detail:', event.detail);
|
|
135
|
+
console.log('Value:', event.detail.value);
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Performance Metrics
|
|
140
|
+
|
|
141
|
+
### Target Metrics
|
|
142
|
+
|
|
143
|
+
- First Contentful Paint: < 1.5s
|
|
144
|
+
- Time to Interactive: < 3s
|
|
145
|
+
- Largest Contentful Paint: < 2.5s
|
|
146
|
+
- Cumulative Layout Shift: < 0.1
|
|
147
|
+
|
|
148
|
+
### Monitoring Tools
|
|
149
|
+
|
|
150
|
+
- Lighthouse audit
|
|
151
|
+
- Performance tab profiling
|
|
152
|
+
- Network throttling tests
|
|
153
|
+
- Memory leak detection
|
|
154
|
+
|
|
155
|
+
## Accessibility Testing
|
|
156
|
+
|
|
157
|
+
### Screen Reader Testing
|
|
158
|
+
|
|
159
|
+
- Labels are announced correctly
|
|
160
|
+
- Focus order is logical
|
|
161
|
+
- ARIA attributes are present
|
|
162
|
+
- Interactive elements are accessible
|
|
163
|
+
|
|
164
|
+
### Keyboard Navigation
|
|
165
|
+
|
|
166
|
+
- Tab order is correct
|
|
167
|
+
- Enter/Space activate buttons
|
|
168
|
+
- ESC closes modals/dropdowns
|
|
169
|
+
- Arrow keys navigate menus
|
|
170
|
+
|
|
171
|
+
## Theme Testing Protocol
|
|
172
|
+
|
|
173
|
+
1. Switch to each theme:
|
|
174
|
+
- `modus-classic-light`
|
|
175
|
+
- `modus-classic-dark`
|
|
176
|
+
- `modus-modern-light`
|
|
177
|
+
- `modus-modern-dark`
|
|
178
|
+
- `connect-light`
|
|
179
|
+
- `connect-dark`
|
|
180
|
+
|
|
181
|
+
2. Verify for each theme:
|
|
182
|
+
- Colors are correct
|
|
183
|
+
- Contrast is adequate
|
|
184
|
+
- No styling issues
|
|
185
|
+
- Icons are visible
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Essential color usage rules for Modus Design System integration in Angular + Vite
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Modus Color Usage - Short
|
|
8
|
+
|
|
9
|
+
Essential color usage rules for Modus Design System integration.
|
|
10
|
+
|
|
11
|
+
## Key Rules
|
|
12
|
+
|
|
13
|
+
- **Use design system colors only** - `bg-background`, `text-foreground`, `bg-primary`, etc.
|
|
14
|
+
- **Never use generic Tailwind colors** - No `bg-blue-500`, `text-gray-600`, etc.
|
|
15
|
+
- **Never use hardcoded values** - No hex colors, RGB values, or CSS variables directly
|
|
16
|
+
- **Use semantic color names** - `bg-destructive`, `text-warning`, `bg-success`
|
|
17
|
+
- **Follow color hierarchy** - Background > Card > Primary > Secondary > Muted
|
|
18
|
+
- **Test in all themes** - Ensure colors work in light and dark modes
|
|
19
|
+
|
|
20
|
+
## 9 Core Colors
|
|
21
|
+
|
|
22
|
+
- **background** - `bg-background` (page background)
|
|
23
|
+
- **foreground** - `text-foreground` (primary text)
|
|
24
|
+
- **card** - `bg-card` (card backgrounds)
|
|
25
|
+
- **muted** - `bg-muted` (subtle backgrounds)
|
|
26
|
+
- **secondary** - `bg-secondary` (secondary UI)
|
|
27
|
+
- **primary** - `bg-primary` (primary actions)
|
|
28
|
+
- **success** - `bg-success` (success states)
|
|
29
|
+
- **warning** - `bg-warning` (warning states)
|
|
30
|
+
- **destructive** - `bg-destructive` (error states)
|
|
31
|
+
|
|
32
|
+
## Correct Patterns
|
|
33
|
+
|
|
34
|
+
```html
|
|
35
|
+
<!-- CORRECT: Design system colors -->
|
|
36
|
+
<div class="bg-background text-foreground"></div>
|
|
37
|
+
<div class="bg-card text-card-foreground border-default"></div>
|
|
38
|
+
<div class="bg-primary text-primary-foreground"></div>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Forbidden Patterns
|
|
42
|
+
|
|
43
|
+
```html
|
|
44
|
+
<!-- WRONG: Generic Tailwind colors -->
|
|
45
|
+
<div class="bg-blue-500 text-white"></div>
|
|
46
|
+
|
|
47
|
+
<!-- WRONG: Hardcoded colors -->
|
|
48
|
+
<div [style.background-color]="'#ffffff'"></div>
|
|
49
|
+
|
|
50
|
+
<!-- WRONG: Raw Modus variables -->
|
|
51
|
+
<div class="bg-[var(--modus-wc-color-base-page)]"></div>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Reference
|
|
55
|
+
|
|
56
|
+
For detailed color system guide and patterns, fetch the full rule: `modus-angular-color-usage`
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Essential color usage rules for Modus Design System integration in Angular + Vite
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Modus Color Usage in Angular + Vite
|
|
8
|
+
|
|
9
|
+
## Design System Color Architecture
|
|
10
|
+
|
|
11
|
+
This Angular + Vite application uses a **9-color design system** that maps Figma variables to Modus's color system, available as Tailwind classes.
|
|
12
|
+
|
|
13
|
+
**Color System**: 9 Modus colors mapped to design system variables in `src/styles.css`
|
|
14
|
+
|
|
15
|
+
## FORBIDDEN: Raw Modus CSS Variables
|
|
16
|
+
|
|
17
|
+
### Never Use Raw Modus Variables
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<!-- WRONG: Raw Modus CSS variables -->
|
|
21
|
+
<div [style.background-color]="'var(--modus-wc-color-base-page)'"></div>
|
|
22
|
+
<div [style.color]="'var(--modus-wc-color-base-content)'"></div>
|
|
23
|
+
|
|
24
|
+
<!-- WRONG: Direct Modus variable usage in classes -->
|
|
25
|
+
<div class="bg-[var(--modus-wc-color-base-page)]"></div>
|
|
26
|
+
<div class="text-[var(--modus-wc-color-base-content)]"></div>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Never Use Hardcoded Colors
|
|
30
|
+
|
|
31
|
+
```html
|
|
32
|
+
<!-- WRONG: Hardcoded hex/RGB values -->
|
|
33
|
+
<div [style.background-color]="'#ffffff'"></div>
|
|
34
|
+
<div [style.color]="'#000000'"></div>
|
|
35
|
+
|
|
36
|
+
<!-- WRONG: Hardcoded colors in Tailwind -->
|
|
37
|
+
<div class="bg-[#ffffff]"></div>
|
|
38
|
+
<div class="text-[#000000]"></div>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Never Use Generic Tailwind Colors
|
|
42
|
+
|
|
43
|
+
```html
|
|
44
|
+
<!-- WRONG: Generic Tailwind color classes -->
|
|
45
|
+
<div class="bg-blue-500"></div>
|
|
46
|
+
<div class="text-red-400"></div>
|
|
47
|
+
<div class="border-green-300"></div>
|
|
48
|
+
<div class="bg-gray-100"></div>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## CORRECT: Design System Colors
|
|
52
|
+
|
|
53
|
+
### Use Design System Tailwind Classes
|
|
54
|
+
|
|
55
|
+
```html
|
|
56
|
+
<!-- CORRECT: Design system colors -->
|
|
57
|
+
<div class="bg-background text-foreground"></div>
|
|
58
|
+
<div class="bg-card text-card-foreground"></div>
|
|
59
|
+
<div class="bg-primary text-primary-foreground"></div>
|
|
60
|
+
<div class="bg-secondary text-secondary-foreground"></div>
|
|
61
|
+
<div class="bg-muted text-muted-foreground"></div>
|
|
62
|
+
<div class="bg-destructive text-destructive-foreground"></div>
|
|
63
|
+
<div class="bg-warning text-warning-foreground"></div>
|
|
64
|
+
<div class="bg-success text-success-foreground"></div>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 9 Core Colors
|
|
68
|
+
|
|
69
|
+
| Semantic Name | Modus Variable | Usage |
|
|
70
|
+
|---------------|----------------|-------|
|
|
71
|
+
| `background` | `--modus-wc-color-base-page` | Page background |
|
|
72
|
+
| `foreground` | `--modus-wc-color-base-content` | Primary text |
|
|
73
|
+
| `card` | `--modus-wc-color-base-100` | Card backgrounds |
|
|
74
|
+
| `muted` | `--modus-wc-color-base-200` | Subtle backgrounds, borders |
|
|
75
|
+
| `secondary` | `--modus-wc-color-base-300` | Secondary UI elements |
|
|
76
|
+
| `primary` | `--modus-wc-color-info` | Primary actions, info |
|
|
77
|
+
| `success` | `--modus-wc-color-success` | Success states |
|
|
78
|
+
| `warning` | `--modus-wc-color-warning` | Warning states |
|
|
79
|
+
| `destructive` | `--modus-wc-color-error` | Error/destructive states |
|
|
80
|
+
|
|
81
|
+
## Color Usage Patterns
|
|
82
|
+
|
|
83
|
+
### Component Color Patterns
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
@Component({
|
|
87
|
+
template: `
|
|
88
|
+
<div class="bg-card text-card-foreground border-default rounded-lg p-4">
|
|
89
|
+
<ng-content />
|
|
90
|
+
</div>
|
|
91
|
+
`,
|
|
92
|
+
})
|
|
93
|
+
export class CardComponent {}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Status Color Patterns
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
@Component({
|
|
100
|
+
template: `
|
|
101
|
+
<div [class]="statusClasses()">
|
|
102
|
+
{{ status() }}
|
|
103
|
+
</div>
|
|
104
|
+
`,
|
|
105
|
+
})
|
|
106
|
+
export class StatusIndicatorComponent {
|
|
107
|
+
readonly status = input<'success' | 'warning' | 'error'>('success');
|
|
108
|
+
|
|
109
|
+
readonly statusClasses = computed(() => {
|
|
110
|
+
const variants = {
|
|
111
|
+
success: 'bg-success text-success-foreground',
|
|
112
|
+
warning: 'bg-warning text-warning-foreground',
|
|
113
|
+
error: 'bg-destructive text-destructive-foreground',
|
|
114
|
+
};
|
|
115
|
+
return `px-3 py-1 rounded ${variants[this.status()]}`;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Alert Component
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
@Component({
|
|
124
|
+
template: `
|
|
125
|
+
<div [class]="alertClasses()">
|
|
126
|
+
<ng-content />
|
|
127
|
+
</div>
|
|
128
|
+
`,
|
|
129
|
+
})
|
|
130
|
+
export class AlertComponent {
|
|
131
|
+
readonly type = input<'success' | 'warning' | 'error' | 'info'>('info');
|
|
132
|
+
|
|
133
|
+
readonly alertClasses = computed(() => {
|
|
134
|
+
const variants = {
|
|
135
|
+
success: 'bg-success text-success-foreground border-success',
|
|
136
|
+
warning: 'bg-warning text-warning-foreground border-warning',
|
|
137
|
+
error: 'bg-destructive text-destructive-foreground border-destructive',
|
|
138
|
+
info: 'bg-primary text-primary-foreground border-primary',
|
|
139
|
+
};
|
|
140
|
+
return `p-4 rounded border ${variants[this.type()]}`;
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Theme-Aware Color Patterns
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
@Component({
|
|
149
|
+
template: `
|
|
150
|
+
<div class="bg-background text-foreground transition-colors duration-200">
|
|
151
|
+
<div class="text-foreground">Title</div>
|
|
152
|
+
<div class="text-muted-foreground">Description</div>
|
|
153
|
+
</div>
|
|
154
|
+
`,
|
|
155
|
+
})
|
|
156
|
+
export class ThemedComponent {
|
|
157
|
+
private themeService = inject(ThemeService);
|
|
158
|
+
readonly isDark = this.themeService.isDark;
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Common Anti-Patterns
|
|
163
|
+
|
|
164
|
+
### Don't Mix Color Systems
|
|
165
|
+
|
|
166
|
+
```html
|
|
167
|
+
<!-- WRONG: Mixing design system and generic colors -->
|
|
168
|
+
<div class="bg-background text-blue-500 border-red-300">
|
|
169
|
+
Mixed color systems
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
<!-- WRONG: Using both design system and hardcoded colors -->
|
|
173
|
+
<div class="bg-card" [style.color]="'#ff0000'">
|
|
174
|
+
Mixed approaches
|
|
175
|
+
</div>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### Don't Override Design System Colors
|
|
179
|
+
|
|
180
|
+
```html
|
|
181
|
+
<!-- WRONG: Overriding design system colors -->
|
|
182
|
+
<div class="bg-background" [style.background-color]="'#custom-color'">
|
|
183
|
+
Overriding design system
|
|
184
|
+
</div>
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Validation
|
|
188
|
+
|
|
189
|
+
### Linting Commands
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
# Check for color violations
|
|
193
|
+
npm run lint:colors
|
|
194
|
+
|
|
195
|
+
# Check for inline styles
|
|
196
|
+
npm run lint:styles
|
|
197
|
+
|
|
198
|
+
# Check for border violations
|
|
199
|
+
npm run lint:borders
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Key Takeaways
|
|
203
|
+
|
|
204
|
+
1. **Use Design System Colors**: Always use `bg-background`, `text-foreground`, etc.
|
|
205
|
+
2. **Never Use Raw Variables**: Don't use `var(--modus-wc-color-*)` directly
|
|
206
|
+
3. **Never Use Hardcoded Colors**: No hex, RGB, or generic Tailwind colors
|
|
207
|
+
4. **Test Color Combinations**: Ensure proper contrast and accessibility
|
|
208
|
+
5. **Follow Color Patterns**: Use established patterns for consistency
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Comprehensive reference guide for Modus Web Components in Angular
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Modus Components Reference
|
|
8
|
+
|
|
9
|
+
Comprehensive reference guide for all Modus Design System components available in this Angular + Vite application.
|
|
10
|
+
|
|
11
|
+
## Component Categories
|
|
12
|
+
|
|
13
|
+
### Layout & Navigation Components
|
|
14
|
+
|
|
15
|
+
- **ModusAccordion** - Collapsible content sections
|
|
16
|
+
- **ModusBreadcrumbs** - Navigation breadcrumb trail
|
|
17
|
+
- **ModusNavbar** - Main application navigation bar
|
|
18
|
+
- **ModusSideNavigation** - Collapsible sidebar navigation
|
|
19
|
+
- **ModusTabs** - Tabbed interface for organizing content
|
|
20
|
+
- **ModusToolbar** - Toolbar container with content slots
|
|
21
|
+
- **ModusUtilityPanel** - Slide-out utility panel
|
|
22
|
+
|
|
23
|
+
### Form & Input Components
|
|
24
|
+
|
|
25
|
+
- **ModusAutocomplete** - Text input with dropdown suggestions
|
|
26
|
+
- **ModusCheckbox** - Checkbox input with value inversion bug handling
|
|
27
|
+
- **ModusDate** - Date input with calendar picker
|
|
28
|
+
- **ModusDropdownMenu** - Dropdown menu with button trigger
|
|
29
|
+
- **ModusNumberInput** - Number input with validation
|
|
30
|
+
- **ModusRadio** - Radio button input
|
|
31
|
+
- **ModusSelect** - Dropdown select input
|
|
32
|
+
- **ModusSlider** - Range slider input
|
|
33
|
+
- **ModusSwitch** - Toggle switch for boolean values
|
|
34
|
+
- **ModusTextarea** - Multi-line text input
|
|
35
|
+
- **ModusTextInput** - Single-line text input
|
|
36
|
+
- **ModusTimeInput** - Time input with time picker
|
|
37
|
+
|
|
38
|
+
### Display & Feedback Components
|
|
39
|
+
|
|
40
|
+
- **ModusAlert** - Alert messages with severity levels
|
|
41
|
+
- **ModusBadge** - Small status indicators
|
|
42
|
+
- **ModusCard** - Content container
|
|
43
|
+
- **ModusChip** - Small interactive elements for tags
|
|
44
|
+
- **ModusDivider** - Visual separator
|
|
45
|
+
- **ModusInputFeedback** - Feedback messages for form inputs
|
|
46
|
+
- **ModusInputLabel** - Label component for form inputs
|
|
47
|
+
- **ModusLoader** - Loading indicators
|
|
48
|
+
- **ModusProgress** - Progress bars
|
|
49
|
+
- **ModusSkeleton** - Placeholder content while loading
|
|
50
|
+
- **ModusToast** - Temporary notification messages
|
|
51
|
+
- **ModusTooltip** - Hover tooltips
|
|
52
|
+
|
|
53
|
+
### Data & Table Components
|
|
54
|
+
|
|
55
|
+
- **ModusTable** - Data table with sorting, pagination, editing
|
|
56
|
+
- **ModusPagination** - Page navigation
|
|
57
|
+
|
|
58
|
+
### Interactive Components
|
|
59
|
+
|
|
60
|
+
- **ModusButton** - Interactive button
|
|
61
|
+
- **ModusMenu** - Menu container with menu items
|
|
62
|
+
- **ModusMenuItem** - Individual menu item
|
|
63
|
+
- **ModusRating** - Star or emoji rating input
|
|
64
|
+
- **ModusStepper** - Step indicator for multi-step processes
|
|
65
|
+
|
|
66
|
+
### Media & Icon Components
|
|
67
|
+
|
|
68
|
+
- **ModusAvatar** - User profile image or initials
|
|
69
|
+
- **ModusIcon** - Icon display using Modus icon system
|
|
70
|
+
|
|
71
|
+
### System & Utility Components
|
|
72
|
+
|
|
73
|
+
- **ModusThemeSwitcher** - Theme switching control
|
|
74
|
+
|
|
75
|
+
## Component Usage Patterns
|
|
76
|
+
|
|
77
|
+
### Signal-Based API
|
|
78
|
+
|
|
79
|
+
All wrapper components use Angular's signal-based API:
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
readonly color = input<ButtonColor>('primary');
|
|
83
|
+
readonly disabled = input<boolean>(false);
|
|
84
|
+
readonly buttonClick = output<MouseEvent | KeyboardEvent>();
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Event Handling
|
|
88
|
+
|
|
89
|
+
Components properly extract `event.detail` from CustomEvents:
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
handleButtonClick(event: CustomEvent<MouseEvent | KeyboardEvent>): void {
|
|
93
|
+
if (!this.disabled()) {
|
|
94
|
+
this.buttonClick.emit(event.detail);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Import Pattern
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
import {
|
|
103
|
+
ModusButtonComponent,
|
|
104
|
+
ModusAlertComponent,
|
|
105
|
+
ModusIconComponent,
|
|
106
|
+
} from '@/app/components';
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Notes
|
|
110
|
+
|
|
111
|
+
- All components are TypeScript-enabled with proper type definitions
|
|
112
|
+
- Components follow Angular 20+ best practices with signals
|
|
113
|
+
- Integration with Modus Web Components is handled through wrapper components
|
|
114
|
+
- Always use wrapper selectors (`<modus-button>`) not web component selectors (`<modus-wc-button>`)
|