@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,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Modus Table component usage patterns for Angular
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Modus Table Usage Rules
|
|
8
|
+
|
|
9
|
+
Comprehensive guide for using the Modus Table component in Angular applications.
|
|
10
|
+
|
|
11
|
+
## Basic Usage
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { ModusTableComponent } from '../modus-table.component';
|
|
15
|
+
import type { ITableColumn } from '@trimble-oss/moduswebcomponents';
|
|
16
|
+
|
|
17
|
+
const columns: ITableColumn[] = [
|
|
18
|
+
{ id: 'name', header: 'Name', accessor: 'name', width: '40%' },
|
|
19
|
+
{ id: 'role', header: 'Role', accessor: 'role' },
|
|
20
|
+
{ id: 'status', header: 'Status', accessor: 'status' },
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
const data = [
|
|
24
|
+
{ id: '1', name: 'Alex Rivera', role: 'Lead', status: 'Active' },
|
|
25
|
+
{ id: '2', name: 'Chris Patel', role: 'Developer', status: 'Active' },
|
|
26
|
+
];
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```html
|
|
30
|
+
<modus-table
|
|
31
|
+
[columns]="columns"
|
|
32
|
+
[data]="data"
|
|
33
|
+
density="comfortable"
|
|
34
|
+
[zebra]="true"
|
|
35
|
+
[hover]="true"
|
|
36
|
+
/>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## CRITICAL: Editable Tables with Custom Editors
|
|
40
|
+
|
|
41
|
+
For editable tables, you MUST use `editor: 'custom'` with `customEditorRenderer` functions.
|
|
42
|
+
|
|
43
|
+
### DO: Use Custom Editor Renderer Functions
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
function createTextEditor(value: unknown, onCommit: (value: unknown) => void): HTMLElement {
|
|
47
|
+
const input = document.createElement('input');
|
|
48
|
+
input.type = 'text';
|
|
49
|
+
input.value = String(value || '');
|
|
50
|
+
input.style.width = '100%';
|
|
51
|
+
input.style.border = '1px solid var(--border)';
|
|
52
|
+
input.style.padding = '4px 8px';
|
|
53
|
+
input.style.borderRadius = '4px';
|
|
54
|
+
input.style.fontSize = '14px';
|
|
55
|
+
input.style.backgroundColor = 'var(--background)';
|
|
56
|
+
input.style.color = 'var(--foreground)';
|
|
57
|
+
|
|
58
|
+
setTimeout(() => {
|
|
59
|
+
input.focus();
|
|
60
|
+
input.select();
|
|
61
|
+
}, 0);
|
|
62
|
+
|
|
63
|
+
const commitValue = () => onCommit(input.value);
|
|
64
|
+
|
|
65
|
+
input.addEventListener('keydown', (e) => {
|
|
66
|
+
if (e.key === 'Enter') {
|
|
67
|
+
e.preventDefault();
|
|
68
|
+
commitValue();
|
|
69
|
+
}
|
|
70
|
+
if (e.key === 'Escape') {
|
|
71
|
+
e.preventDefault();
|
|
72
|
+
onCommit(value);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
input.addEventListener('blur', commitValue);
|
|
76
|
+
|
|
77
|
+
return input;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const taskColumns: ITableColumn[] = [
|
|
81
|
+
{ id: 'id', header: 'ID', accessor: 'id', width: '60px' },
|
|
82
|
+
{
|
|
83
|
+
id: 'task',
|
|
84
|
+
header: 'Task',
|
|
85
|
+
accessor: 'task',
|
|
86
|
+
editor: 'custom',
|
|
87
|
+
customEditorRenderer: (value, onCommit) => createTextEditor(value, onCommit),
|
|
88
|
+
},
|
|
89
|
+
];
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Event Handling
|
|
93
|
+
|
|
94
|
+
### Cell Edit Events
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
readonly taskData = signal<Record<string, unknown>[]>([...initialTaskData]);
|
|
98
|
+
|
|
99
|
+
handleCellEditCommit(event: {
|
|
100
|
+
rowIndex: number;
|
|
101
|
+
colId: string;
|
|
102
|
+
newValue: unknown;
|
|
103
|
+
updatedRow: Record<string, unknown>;
|
|
104
|
+
}): void {
|
|
105
|
+
this.taskData.update((prevData) => {
|
|
106
|
+
const newData = [...prevData];
|
|
107
|
+
newData[event.rowIndex] = { ...newData[event.rowIndex], [event.colId]: event.newValue };
|
|
108
|
+
return newData;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
```html
|
|
114
|
+
<modus-table
|
|
115
|
+
[columns]="taskColumns"
|
|
116
|
+
[data]="taskData()"
|
|
117
|
+
[editable]="true"
|
|
118
|
+
(cellEditCommit)="handleCellEditCommit($event)"
|
|
119
|
+
/>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Selection Events
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
readonly selectedIds = signal<string[]>([]);
|
|
126
|
+
|
|
127
|
+
handleRowSelectionChange(event: {
|
|
128
|
+
selectedRows: Record<string, unknown>[];
|
|
129
|
+
selectedRowIds: string[];
|
|
130
|
+
}): void {
|
|
131
|
+
this.selectedIds.set(event.selectedRowIds);
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
```html
|
|
136
|
+
<modus-table
|
|
137
|
+
[columns]="columns"
|
|
138
|
+
[data]="data"
|
|
139
|
+
selectable="multi"
|
|
140
|
+
[selectedRowIds]="selectedIds()"
|
|
141
|
+
(rowSelectionChange)="handleRowSelectionChange($event)"
|
|
142
|
+
/>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Key Takeaways
|
|
146
|
+
|
|
147
|
+
1. **Custom editors are required** for reliable cell editing
|
|
148
|
+
2. **Use design system CSS variables** in custom editors (`--border`, `--background`, `--foreground`)
|
|
149
|
+
3. **Handle keyboard events** (Enter to commit, Escape to cancel)
|
|
150
|
+
4. **Use immutable updates** with signals for change detection
|
|
151
|
+
5. **Import types** from `@trimble-oss/moduswebcomponents`
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Tailwind CSS v4 with Modus Design System integration in Angular + Vite
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Modus Tailwind Usage - Short
|
|
8
|
+
|
|
9
|
+
Tailwind CSS v4 with Modus Design System integration.
|
|
10
|
+
|
|
11
|
+
## Key Rules
|
|
12
|
+
|
|
13
|
+
- **Tailwind v4 with design system** - Uses CSS imports, reads variables from `src/styles.css`
|
|
14
|
+
- **No generic Tailwind colors** - Never use `bg-blue-500`, `text-gray-600`, etc.
|
|
15
|
+
- **Use design system colors** - `bg-background`, `text-foreground`, `bg-primary`, etc.
|
|
16
|
+
- **Custom utilities for borders** - Use `border-default`, `border-success`, `border-warning`, etc.
|
|
17
|
+
- **Custom utilities for opacity** - Use `text-foreground-80`, not `text-foreground/80`
|
|
18
|
+
- **Test in all themes** - Ensure Tailwind classes work in all 6 themes
|
|
19
|
+
|
|
20
|
+
## Correct Usage
|
|
21
|
+
|
|
22
|
+
```html
|
|
23
|
+
<!-- CORRECT: Design system colors -->
|
|
24
|
+
<div class="bg-background text-foreground"></div>
|
|
25
|
+
<div class="bg-card text-card-foreground border-default"></div>
|
|
26
|
+
<div class="bg-primary text-primary-foreground"></div>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Forbidden Patterns
|
|
30
|
+
|
|
31
|
+
```html
|
|
32
|
+
<!-- WRONG: Generic Tailwind colors -->
|
|
33
|
+
<div class="bg-blue-500 text-white border-gray-300"></div>
|
|
34
|
+
|
|
35
|
+
<!-- WRONG: Hardcoded colors -->
|
|
36
|
+
<div class="bg-[#ffffff] text-[#000000]"></div>
|
|
37
|
+
|
|
38
|
+
<!-- WRONG: Raw Modus variables -->
|
|
39
|
+
<div class="bg-[var(--modus-wc-color-base-page)]"></div>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Reference
|
|
43
|
+
|
|
44
|
+
For detailed Tailwind patterns and styling examples, fetch the full rule: `modus-angular-tailwind-usage`
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Tailwind CSS v4 with Modus Design System integration in Angular + Vite
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Tailwind CSS Usage in Angular + Vite
|
|
8
|
+
|
|
9
|
+
## Tailwind v4 Integration
|
|
10
|
+
|
|
11
|
+
This Angular + Vite application uses **Tailwind CSS v4** with Modus Design System integration.
|
|
12
|
+
|
|
13
|
+
**Configuration**: Tailwind v4 reads CSS variables directly from `src/styles.css`. No separate `tailwind.config.js` is required for basic color mapping.
|
|
14
|
+
|
|
15
|
+
## FORBIDDEN: Generic Tailwind Colors
|
|
16
|
+
|
|
17
|
+
### Never Use Generic Tailwind Color Classes
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<!-- WRONG: Generic Tailwind color classes -->
|
|
21
|
+
<div class="bg-blue-500 text-white border-gray-300"></div>
|
|
22
|
+
<div class="bg-red-400 text-yellow-200 border-green-500"></div>
|
|
23
|
+
<div class="bg-gray-100 text-black border-purple-300"></div>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Never Use Hardcoded Colors
|
|
27
|
+
|
|
28
|
+
```html
|
|
29
|
+
<!-- WRONG: Hardcoded colors -->
|
|
30
|
+
<div class="bg-[#ffffff] text-[#000000] border-[#e5e5e5]"></div>
|
|
31
|
+
<div [style.background-color]="'#ffffff'"></div>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Never Use Raw Modus Variables
|
|
35
|
+
|
|
36
|
+
```html
|
|
37
|
+
<!-- WRONG: Raw Modus CSS variables -->
|
|
38
|
+
<div class="bg-[var(--modus-wc-color-base-page)]"></div>
|
|
39
|
+
<div [style.background-color]="'var(--modus-wc-color-base-page)'"></div>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## CORRECT: Design System Colors
|
|
43
|
+
|
|
44
|
+
### Use Design System Tailwind Classes
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<!-- CORRECT: Design system colors -->
|
|
48
|
+
<div class="bg-background text-foreground"></div>
|
|
49
|
+
<div class="bg-card text-card-foreground border-default"></div>
|
|
50
|
+
<div class="bg-primary text-primary-foreground"></div>
|
|
51
|
+
<div class="bg-secondary text-secondary-foreground"></div>
|
|
52
|
+
<div class="bg-muted text-muted-foreground"></div>
|
|
53
|
+
<div class="bg-destructive text-destructive-foreground"></div>
|
|
54
|
+
<div class="bg-warning text-warning-foreground"></div>
|
|
55
|
+
<div class="bg-success text-success-foreground"></div>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Available Design System Colors
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
// Background colors
|
|
62
|
+
bg-background, bg-card, bg-muted, bg-secondary
|
|
63
|
+
|
|
64
|
+
// Text colors
|
|
65
|
+
text-foreground, text-card-foreground, text-muted-foreground
|
|
66
|
+
|
|
67
|
+
// Primary colors
|
|
68
|
+
bg-primary, text-primary-foreground
|
|
69
|
+
|
|
70
|
+
// Status colors
|
|
71
|
+
bg-destructive, text-destructive-foreground
|
|
72
|
+
bg-warning, text-warning-foreground
|
|
73
|
+
bg-success, text-success-foreground
|
|
74
|
+
|
|
75
|
+
// Border colors
|
|
76
|
+
border-border, border-default, border-primary, border-success, border-warning, border-destructive
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Component Styling Patterns
|
|
80
|
+
|
|
81
|
+
### Card Components
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
@Component({
|
|
85
|
+
template: `
|
|
86
|
+
<div class="bg-card text-card-foreground border-default rounded-lg p-6">
|
|
87
|
+
<div class="text-2xl font-semibold mb-2">{{ title() }}</div>
|
|
88
|
+
<div class="text-muted-foreground">{{ content() }}</div>
|
|
89
|
+
</div>
|
|
90
|
+
`,
|
|
91
|
+
})
|
|
92
|
+
export class CardComponent {
|
|
93
|
+
readonly title = input.required<string>();
|
|
94
|
+
readonly content = input<string>('');
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Form Components
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
@Component({
|
|
102
|
+
template: `
|
|
103
|
+
<div class="space-y-4">
|
|
104
|
+
<div class="flex flex-col gap-2">
|
|
105
|
+
<div class="text-sm font-medium text-foreground">{{ label() }}</div>
|
|
106
|
+
<modus-text-input
|
|
107
|
+
[value]="value()"
|
|
108
|
+
(inputChange)="handleChange($event)"
|
|
109
|
+
/>
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
`,
|
|
113
|
+
})
|
|
114
|
+
export class FormFieldComponent {
|
|
115
|
+
readonly label = input.required<string>();
|
|
116
|
+
readonly value = input<string>('');
|
|
117
|
+
readonly valueChange = output<string>();
|
|
118
|
+
|
|
119
|
+
handleChange(event: string): void {
|
|
120
|
+
this.valueChange.emit(event);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Status Indicators
|
|
126
|
+
|
|
127
|
+
```typescript
|
|
128
|
+
@Component({
|
|
129
|
+
template: `
|
|
130
|
+
<div [class]="statusClasses()">
|
|
131
|
+
{{ status() }}
|
|
132
|
+
</div>
|
|
133
|
+
`,
|
|
134
|
+
})
|
|
135
|
+
export class StatusIndicatorComponent {
|
|
136
|
+
readonly status = input<'success' | 'warning' | 'error' | 'info'>('info');
|
|
137
|
+
|
|
138
|
+
readonly statusClasses = computed(() => {
|
|
139
|
+
const base = 'px-3 py-1 rounded border';
|
|
140
|
+
const variants = {
|
|
141
|
+
success: 'bg-success text-success-foreground border-success',
|
|
142
|
+
warning: 'bg-warning text-warning-foreground border-warning',
|
|
143
|
+
error: 'bg-destructive text-destructive-foreground border-destructive',
|
|
144
|
+
info: 'bg-primary text-primary-foreground border-primary',
|
|
145
|
+
};
|
|
146
|
+
return `${base} ${variants[this.status()]}`;
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Typography Patterns
|
|
152
|
+
|
|
153
|
+
### Typography with Design System Colors
|
|
154
|
+
|
|
155
|
+
```html
|
|
156
|
+
<div class="space-y-4">
|
|
157
|
+
<div class="text-4xl font-bold text-foreground">Heading 1</div>
|
|
158
|
+
<div class="text-3xl font-semibold text-foreground">Heading 2</div>
|
|
159
|
+
<div class="text-2xl font-medium text-foreground">Heading 3</div>
|
|
160
|
+
<div class="text-xl font-medium text-foreground">Heading 4</div>
|
|
161
|
+
<div class="text-lg font-medium text-foreground">Heading 5</div>
|
|
162
|
+
<div class="text-base font-medium text-foreground">Heading 6</div>
|
|
163
|
+
|
|
164
|
+
<div class="text-base text-foreground">Regular paragraph text</div>
|
|
165
|
+
<div class="text-sm text-muted-foreground">Small text</div>
|
|
166
|
+
<div class="text-xs text-muted-foreground">Extra small text</div>
|
|
167
|
+
</div>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Custom Utilities
|
|
171
|
+
|
|
172
|
+
### Border Utilities
|
|
173
|
+
|
|
174
|
+
```html
|
|
175
|
+
<!-- Default borders -->
|
|
176
|
+
<div class="border-default">Default border</div>
|
|
177
|
+
<div class="border-thick">Thick border</div>
|
|
178
|
+
<div class="border-dashed">Dashed border</div>
|
|
179
|
+
|
|
180
|
+
<!-- Semantic borders -->
|
|
181
|
+
<div class="border-success">Success border</div>
|
|
182
|
+
<div class="border-warning">Warning border</div>
|
|
183
|
+
<div class="border-destructive">Destructive border</div>
|
|
184
|
+
<div class="border-primary">Primary border</div>
|
|
185
|
+
|
|
186
|
+
<!-- Directional borders -->
|
|
187
|
+
<div class="border-top-default">Top border</div>
|
|
188
|
+
<div class="border-bottom-default">Bottom border</div>
|
|
189
|
+
<div class="border-left-default">Left border</div>
|
|
190
|
+
<div class="border-right-default">Right border</div>
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Elevation Utilities
|
|
194
|
+
|
|
195
|
+
```html
|
|
196
|
+
<div class="shadow-sm">Small elevation</div>
|
|
197
|
+
<div class="shadow-md">Medium elevation</div>
|
|
198
|
+
<div class="shadow-lg">Large elevation</div>
|
|
199
|
+
<div class="shadow-xl">Extra large elevation</div>
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Common Anti-Patterns
|
|
203
|
+
|
|
204
|
+
### Don't Mix Color Systems
|
|
205
|
+
|
|
206
|
+
```html
|
|
207
|
+
<!-- WRONG: Mixing design system and generic colors -->
|
|
208
|
+
<div class="bg-background text-blue-500 border-red-300">
|
|
209
|
+
Mixed color systems
|
|
210
|
+
</div>
|
|
211
|
+
|
|
212
|
+
<!-- CORRECT: Consistent design system -->
|
|
213
|
+
<div class="bg-background text-foreground border-default">
|
|
214
|
+
Consistent design system
|
|
215
|
+
</div>
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## Validation
|
|
219
|
+
|
|
220
|
+
### Linting Commands
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
# Check for color violations
|
|
224
|
+
npm run lint:colors
|
|
225
|
+
|
|
226
|
+
# Check for inline styles
|
|
227
|
+
npm run lint:styles
|
|
228
|
+
|
|
229
|
+
# Check for border violations
|
|
230
|
+
npm run lint:borders
|
|
231
|
+
|
|
232
|
+
# Check for opacity violations
|
|
233
|
+
npm run lint:opacity
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Key Takeaways
|
|
237
|
+
|
|
238
|
+
1. **Use Design System Colors**: Always use design system Tailwind classes
|
|
239
|
+
2. **Never Use Generic Colors**: No generic Tailwind color classes
|
|
240
|
+
3. **Never Use Hardcoded Colors**: No hex, RGB, or hardcoded values
|
|
241
|
+
4. **Use Custom Utilities**: Leverage custom border and opacity utilities from `src/styles.css`
|
|
242
|
+
5. **Tailwind v4**: Uses CSS imports, reads variables directly from `src/styles.css`
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 6 Modus themes with proper switching and persistence in Angular + Vite
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Modus Themes - Short
|
|
8
|
+
|
|
9
|
+
6 Modus themes with proper switching and persistence.
|
|
10
|
+
|
|
11
|
+
## Key Rules
|
|
12
|
+
|
|
13
|
+
- **6 Modus themes supported** - Classic Light/Dark, Modern Light/Dark, Connect Light/Dark
|
|
14
|
+
- **Use ThemeService with inject()** - Proper Angular service pattern
|
|
15
|
+
- **Theme persistence** - Save to localStorage and restore on page load
|
|
16
|
+
- **Official data-theme attribute** - Use `data-theme` for theme switching
|
|
17
|
+
- **Theme-aware components** - Use computed signals for conditional styling
|
|
18
|
+
- **Test all themes** - Verify components work in all 6 themes
|
|
19
|
+
|
|
20
|
+
## Available Themes
|
|
21
|
+
|
|
22
|
+
- `modus-classic-light` / `modus-classic-dark`
|
|
23
|
+
- `modus-modern-light` / `modus-modern-dark`
|
|
24
|
+
- `connect-light` / `connect-dark`
|
|
25
|
+
|
|
26
|
+
## Usage Pattern
|
|
27
|
+
|
|
28
|
+
```typescript
|
|
29
|
+
@Component({
|
|
30
|
+
template: `
|
|
31
|
+
<div class="bg-background text-foreground">
|
|
32
|
+
Theme: {{ themeService.currentTheme() }}
|
|
33
|
+
Mode: {{ themeService.isDark() ? 'Dark' : 'Light' }}
|
|
34
|
+
</div>
|
|
35
|
+
`,
|
|
36
|
+
})
|
|
37
|
+
export class ThemedComponent {
|
|
38
|
+
readonly themeService = inject(ThemeService);
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Theme Switching
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
// Set theme via service
|
|
46
|
+
this.themeService.setTheme('modus-modern-dark');
|
|
47
|
+
|
|
48
|
+
// Document attribute is set automatically
|
|
49
|
+
// document.documentElement.setAttribute('data-theme', theme);
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Reference
|
|
53
|
+
|
|
54
|
+
For detailed theme implementation and service patterns, fetch the full rule: `modus-angular-themes`
|