@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,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "angular-vite",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"ng": "ng",
|
|
7
|
+
"start": "ng serve",
|
|
8
|
+
"build": "ng build",
|
|
9
|
+
"watch": "ng build --watch --configuration development",
|
|
10
|
+
"test": "ng test",
|
|
11
|
+
"type-check": "node scripts/check-typescript.js",
|
|
12
|
+
"lint:colors": "node scripts/check-modus-colors.js",
|
|
13
|
+
"lint:styles": "node scripts/check-inline-styles.js",
|
|
14
|
+
"lint:borders": "node scripts/check-border-violations.js",
|
|
15
|
+
"lint:opacity": "node scripts/check-opacity-utilities.js",
|
|
16
|
+
"lint:icons": "node scripts/check-modus-icons.js",
|
|
17
|
+
"lint:icon-names": "node scripts/check-icon-names.js",
|
|
18
|
+
"lint:all": "npm run type-check && npm run lint:colors && npm run lint:styles && npm run lint:borders && npm run lint:opacity && npm run lint:icons && npm run lint:icon-names",
|
|
19
|
+
"prepare": "husky"
|
|
20
|
+
},
|
|
21
|
+
"prettier": {
|
|
22
|
+
"printWidth": 100,
|
|
23
|
+
"singleQuote": true,
|
|
24
|
+
"overrides": [
|
|
25
|
+
{
|
|
26
|
+
"files": "*.html",
|
|
27
|
+
"options": {
|
|
28
|
+
"parser": "angular"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
"private": true,
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@angular/common": "^20.3.0",
|
|
36
|
+
"@angular/compiler": "^20.3.0",
|
|
37
|
+
"@angular/core": "^20.3.0",
|
|
38
|
+
"@angular/forms": "^20.3.0",
|
|
39
|
+
"@angular/platform-browser": "^20.3.0",
|
|
40
|
+
"@angular/router": "^20.3.0",
|
|
41
|
+
"@tailwindcss/postcss": "^4.1.16",
|
|
42
|
+
"@trimble-oss/modus-icons": "^1.18.0",
|
|
43
|
+
"@trimble-oss/moduswebcomponents": "^1.0.6",
|
|
44
|
+
"@trimble-oss/moduswebcomponents-angular": "^1.0.6-ng19",
|
|
45
|
+
"postcss": "^8.5.6",
|
|
46
|
+
"rxjs": "~7.8.0",
|
|
47
|
+
"tailwindcss": "^4.1.16",
|
|
48
|
+
"tslib": "^2.3.0",
|
|
49
|
+
"zone.js": "~0.15.0"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@angular/build": "^20.3.8",
|
|
53
|
+
"@angular/cli": "^20.3.8",
|
|
54
|
+
"@angular/compiler-cli": "^20.3.0",
|
|
55
|
+
"@types/jasmine": "~5.1.0",
|
|
56
|
+
"glob": "^11.0.0",
|
|
57
|
+
"husky": "^9.1.7",
|
|
58
|
+
"jasmine-core": "~5.9.0",
|
|
59
|
+
"karma": "~6.4.0",
|
|
60
|
+
"karma-chrome-launcher": "~3.2.0",
|
|
61
|
+
"karma-coverage": "~2.2.0",
|
|
62
|
+
"karma-jasmine": "~5.1.0",
|
|
63
|
+
"karma-jasmine-html-reporter": "~2.1.0",
|
|
64
|
+
"typescript": "~5.9.2"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
|
3
|
+
<svg width="800px" height="800px" viewBox="-8 0 272 272" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
|
|
4
|
+
<g>
|
|
5
|
+
<path d="M0.0996108949,45.522179 L125.908171,0.697276265 L255.103502,44.7252918 L234.185214,211.175097 L125.908171,271.140856 L19.3245136,211.971984 L0.0996108949,45.522179 Z" fill="#E23237">
|
|
6
|
+
|
|
7
|
+
<path d="M255.103502,44.7252918 L125.908171,0.697276265 L125.908171,271.140856 L234.185214,211.274708 L255.103502,44.7252918 L255.103502,44.7252918 Z" fill="#B52E31">
|
|
8
|
+
|
|
9
|
+
<path d="M126.107393,32.27393 L126.107393,32.27393 L47.7136187,206.692607 L76.9992218,206.194553 L92.7377432,166.848249 L126.207004,166.848249 L126.306615,166.848249 L163.063035,166.848249 L180.29572,206.692607 L208.286381,207.190661 L126.107393,32.27393 L126.107393,32.27393 Z M126.306615,88.155642 L152.803113,143.5393 L127.402335,143.5393 L126.107393,143.5393 L102.997665,143.5393 L126.306615,88.155642 L126.306615,88.155642 Z" fill="#FFFFFF">
|
|
10
|
+
|
|
11
|
+
</g>
|
|
12
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Modus Icons - Field Systems
|
|
3
|
+
* Custom configuration for Modus Web Components compatibility
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
@font-face {
|
|
7
|
+
font-family: 'modus-icons';
|
|
8
|
+
src: url('https://cdn.jsdelivr.net/npm/@trimble-oss/modus-icons@1.19.0/dist/field-systems/fonts/modus-icons.woff2')
|
|
9
|
+
format('woff2');
|
|
10
|
+
font-style: normal;
|
|
11
|
+
font-weight: normal;
|
|
12
|
+
font-display: swap;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@font-face {
|
|
16
|
+
font-family: 'modus-icons-outlined';
|
|
17
|
+
src: url('https://cdn.jsdelivr.net/npm/@trimble-oss/modus-icons@1.19.0/dist/field-systems/fonts/modus-icons.woff2')
|
|
18
|
+
format('woff2');
|
|
19
|
+
font-style: normal;
|
|
20
|
+
font-weight: normal;
|
|
21
|
+
font-display: swap;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@font-face {
|
|
25
|
+
font-family: 'modus-icons-solid';
|
|
26
|
+
src: url('https://cdn.jsdelivr.net/npm/@trimble-oss/modus-icons@1.19.0/dist/field-systems/fonts/modus-icons.woff2')
|
|
27
|
+
format('woff2');
|
|
28
|
+
font-style: normal;
|
|
29
|
+
font-weight: normal;
|
|
30
|
+
font-display: swap;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.modus-icons-outlined {
|
|
34
|
+
font-family: 'modus-icons-outlined';
|
|
35
|
+
font-style: normal;
|
|
36
|
+
font-weight: normal;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.modus-icons-solid {
|
|
40
|
+
font-family: 'modus-icons-solid';
|
|
41
|
+
font-style: normal;
|
|
42
|
+
font-weight: normal;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.modus-icons {
|
|
46
|
+
font-family: 'modus-icons';
|
|
47
|
+
font-style: normal;
|
|
48
|
+
font-weight: normal;
|
|
49
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
# Modus Design System Linting Scripts for Angular + Tailwind v4
|
|
2
|
+
|
|
3
|
+
This directory contains comprehensive linting scripts for enforcing Modus Design System compliance in the Angular + Tailwind v4 codebase. These scripts ensure consistent styling, proper component usage, and adherence to design system standards.
|
|
4
|
+
|
|
5
|
+
## Available Linting Scripts
|
|
6
|
+
|
|
7
|
+
### 1. TypeScript Type Checking (`check-typescript.js`)
|
|
8
|
+
|
|
9
|
+
**Purpose**: Enhanced TypeScript type checking with improved developer experience and clear error reporting.
|
|
10
|
+
|
|
11
|
+
**What it provides:**
|
|
12
|
+
|
|
13
|
+
- Clear success/failure messages with emojis
|
|
14
|
+
- Grouped error reporting by file
|
|
15
|
+
- Helpful error resolution tips
|
|
16
|
+
- Consistent UX with other linting scripts
|
|
17
|
+
- Pre-commit integration for type safety
|
|
18
|
+
|
|
19
|
+
**Usage:**
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm run type-check
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Success Output:**
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
🔍 TypeScript Type Check for Angular App
|
|
29
|
+
|
|
30
|
+
🔍 Running TypeScript type checking...
|
|
31
|
+
|
|
32
|
+
✅ All TypeScript files are type-safe!
|
|
33
|
+
🎯 No type errors found in the codebase.
|
|
34
|
+
|
|
35
|
+
🎉 Type checking completed successfully!
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Error Output:**
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
❌ Found 3 TypeScript errors:
|
|
42
|
+
|
|
43
|
+
📄 app/components/my.component.ts:
|
|
44
|
+
15:8 - TS2322: Type 'string' is not assignable to type 'number'
|
|
45
|
+
22:12 - TS2345: Argument of type 'undefined' is not assignable to parameter of type 'string'
|
|
46
|
+
|
|
47
|
+
💡 TypeScript Error Resolution Tips:
|
|
48
|
+
• Check for missing type annotations
|
|
49
|
+
• Verify import/export statements
|
|
50
|
+
• Ensure proper interface definitions
|
|
51
|
+
• Check for null/undefined handling
|
|
52
|
+
• Verify component prop types
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 2. Color Compliance (`check-modus-colors.js`)
|
|
56
|
+
|
|
57
|
+
**Purpose**: Ensures only approved Modus colors are used throughout the codebase.
|
|
58
|
+
|
|
59
|
+
**What it detects:**
|
|
60
|
+
|
|
61
|
+
- Tailwind color classes (`red-400`, `blue-500`, etc.)
|
|
62
|
+
- Hardcoded hex colors (`#ff0000`, `#ffffff`, etc.)
|
|
63
|
+
- RGB/RGBA values
|
|
64
|
+
- Background, text, and border color violations
|
|
65
|
+
- Raw Modus CSS variables (should use design system colors)
|
|
66
|
+
|
|
67
|
+
**What it suggests:**
|
|
68
|
+
|
|
69
|
+
- Proper design system Tailwind classes (`bg-background`, `text-foreground`, etc.)
|
|
70
|
+
- Design system compliant alternatives
|
|
71
|
+
- Links to official documentation
|
|
72
|
+
|
|
73
|
+
**Usage:**
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npm run lint:colors
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 3. Inline Styles Compliance (`check-inline-styles.js`)
|
|
80
|
+
|
|
81
|
+
**Purpose**: Detects inline styles that should be replaced with Tailwind classes for better maintainability and design system consistency.
|
|
82
|
+
|
|
83
|
+
**What it detects:**
|
|
84
|
+
|
|
85
|
+
- Angular style attribute binding (`[style.*]`)
|
|
86
|
+
- Regular style attributes (`style=""`)
|
|
87
|
+
- Background colors (`backgroundColor`, `background`)
|
|
88
|
+
- Text colors (`color`)
|
|
89
|
+
- Spacing (`margin`, `padding`)
|
|
90
|
+
- Typography (`fontSize`, `fontWeight`, `lineHeight`, `textAlign`)
|
|
91
|
+
- Layout properties (`display`, `flexDirection`, `justifyContent`, `alignItems`)
|
|
92
|
+
- Positioning (`position`, `top`, `left`, `right`, `bottom`)
|
|
93
|
+
- Sizing (`width`, `height`, `maxWidth`, `minHeight`)
|
|
94
|
+
|
|
95
|
+
**What it suggests:**
|
|
96
|
+
|
|
97
|
+
- Equivalent Tailwind utility classes
|
|
98
|
+
- Design system compliant alternatives
|
|
99
|
+
- Performance and maintainability improvements
|
|
100
|
+
|
|
101
|
+
**Usage:**
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
npm run lint:styles
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Exceptions:**
|
|
108
|
+
|
|
109
|
+
- Border-related styles are allowed due to Tailwind v4 + Modus conflicts
|
|
110
|
+
- Dynamic values (template expressions) are allowed
|
|
111
|
+
|
|
112
|
+
### 4. Icon Usage Compliance (`check-modus-icons.js`)
|
|
113
|
+
|
|
114
|
+
**Purpose**: Ensures only Modus Icons are used, preventing non-design-system icon libraries.
|
|
115
|
+
|
|
116
|
+
**What it detects:**
|
|
117
|
+
|
|
118
|
+
- Font Awesome icons (`fa-*`, `fas-*`, `far-*`, etc.)
|
|
119
|
+
- Material Icons (`material-icons`, `material-symbols`)
|
|
120
|
+
- Heroicons (`heroicons`)
|
|
121
|
+
- Lucide icons (`lucide`, `lucide-react`)
|
|
122
|
+
- React Icons imports (`react-icons`, `@heroicons`, `lucide-react`)
|
|
123
|
+
- Other icon libraries (`@ant-design/icons`, `@mui/icons-material`, `@tabler/icons`, `@phosphor-icons`)
|
|
124
|
+
- Custom SVG icons (non-Modus)
|
|
125
|
+
- Generic icon components (`<Icon>`, `<Icons>`, `<IconButton>`)
|
|
126
|
+
|
|
127
|
+
**What it suggests:**
|
|
128
|
+
|
|
129
|
+
- Modus Icons alternatives
|
|
130
|
+
- Proper Modus Icons usage patterns
|
|
131
|
+
- Design system compliance
|
|
132
|
+
|
|
133
|
+
**Usage:**
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
npm run lint:icons
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 5. Border Violations Compliance (`check-border-violations.js`)
|
|
140
|
+
|
|
141
|
+
**Purpose**: Detects incorrect border patterns that violate Tailwind v4 + Modus design system rules.
|
|
142
|
+
|
|
143
|
+
**What it detects:**
|
|
144
|
+
|
|
145
|
+
- Border classes with Tailwind color classes (`border-red-500`, `border-gray-300`, etc.)
|
|
146
|
+
- Border classes with hardcoded hex colors
|
|
147
|
+
- Directional borders with Tailwind colors (`border-t-red-500`, etc.)
|
|
148
|
+
- Inline border styles that should use utility classes
|
|
149
|
+
|
|
150
|
+
**What it suggests:**
|
|
151
|
+
|
|
152
|
+
- Border utility classes: `border-default`, `border-thick`, `border-dashed`
|
|
153
|
+
- Design system colors: `border-primary`, `border-success`, `border-warning`, `border-error`
|
|
154
|
+
- Specific side borders: `border-top-default`, `border-bottom-default`, `border-left-default`, `border-right-default`
|
|
155
|
+
|
|
156
|
+
**Usage:**
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
npm run lint:borders
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### 6. Opacity Utilities (`check-opacity-utilities.js`)
|
|
163
|
+
|
|
164
|
+
**Purpose**: Validates opacity usage with design system colors to ensure custom opacity utilities are used instead of Tailwind's `/80` syntax.
|
|
165
|
+
|
|
166
|
+
**What it checks:**
|
|
167
|
+
|
|
168
|
+
- Tailwind opacity syntax with design system colors (e.g., `text-foreground/80`)
|
|
169
|
+
- Suggests custom opacity utilities (e.g., `text-foreground-80`)
|
|
170
|
+
- Validates all opacity levels: 20, 40, 60, 80
|
|
171
|
+
- Checks text, background, and border opacity usage
|
|
172
|
+
|
|
173
|
+
**Usage:**
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
npm run lint:opacity
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
**Success Output:**
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
🔍 Checking for Tailwind opacity syntax violations...
|
|
183
|
+
|
|
184
|
+
✅ No Tailwind opacity syntax violations found!
|
|
185
|
+
All design system colors are using custom opacity utilities.
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**Error Output:**
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
❌ Found 3 Tailwind opacity syntax violations:
|
|
192
|
+
|
|
193
|
+
📁 src/app/components/my.component.html
|
|
194
|
+
src/app/components/my.component.html:43:38
|
|
195
|
+
Found Tailwind opacity syntax: text-foreground/80
|
|
196
|
+
Use custom opacity utility: text-foreground-80
|
|
197
|
+
Tailwind /80 syntax doesn't work with CSS variables. Use our custom opacity utilities instead.
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**Key Features:**
|
|
201
|
+
|
|
202
|
+
- Detects Tailwind opacity syntax with design system colors
|
|
203
|
+
- Provides specific suggestions for each violation
|
|
204
|
+
- Supports all design system color combinations
|
|
205
|
+
- Explains why the syntax doesn't work
|
|
206
|
+
- Integrates with existing lint suite
|
|
207
|
+
|
|
208
|
+
### 7. Icon Names Validation (`check-icon-names.js`)
|
|
209
|
+
|
|
210
|
+
**Purpose**: Validates that all Modus icon names used in the codebase are correct and exist in the official Modus Icons list.
|
|
211
|
+
|
|
212
|
+
**What it checks:**
|
|
213
|
+
|
|
214
|
+
- `<modus-icon>` component usage with invalid icon names
|
|
215
|
+
- Direct icon class usage with invalid names
|
|
216
|
+
- Icon names in string literals and template literals
|
|
217
|
+
- Provides suggestions for similar/partial matches
|
|
218
|
+
- Validates against complete official icon list (700+ icons)
|
|
219
|
+
|
|
220
|
+
**Usage:**
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
npm run lint:icon-names
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Success Output:**
|
|
227
|
+
|
|
228
|
+
```
|
|
229
|
+
🔍 Validating Modus icon names...
|
|
230
|
+
|
|
231
|
+
✅ All Modus icon names are valid!
|
|
232
|
+
Found 710 valid Modus icons across 25 categories.
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
**Error Output:**
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
❌ Found 3 invalid Modus icon names:
|
|
239
|
+
|
|
240
|
+
📁 src/app/components/my.component.html
|
|
241
|
+
src/app/components/my.component.html:15:19
|
|
242
|
+
Invalid Modus icon name: visibility
|
|
243
|
+
Did you mean: visibility_off, visibility_on, visibility_part_outline
|
|
244
|
+
The icon "visibility" is not found in the official Modus Icons list.
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
**Key Features:**
|
|
248
|
+
|
|
249
|
+
- Validates against complete official Modus Icons list
|
|
250
|
+
- Provides intelligent suggestions using Levenshtein distance
|
|
251
|
+
- Supports multiple icon usage patterns (Angular components, direct class usage)
|
|
252
|
+
- Shows icon categories and counts
|
|
253
|
+
- Integrates with existing lint suite
|
|
254
|
+
- Helps prevent typos and invalid icon names
|
|
255
|
+
|
|
256
|
+
## Comprehensive Linting
|
|
257
|
+
|
|
258
|
+
Run all linting checks at once:
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
# Run all design system compliance checks
|
|
262
|
+
npm run lint:all
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
## Pre-commit Integration
|
|
266
|
+
|
|
267
|
+
All scripts run automatically before each commit via pre-commit hooks to ensure design system consistency:
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
# Automatic check on commit (pre-commit hook)
|
|
271
|
+
git commit -m "your changes"
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
The pre-commit hooks will:
|
|
275
|
+
|
|
276
|
+
1. ✅ Run TypeScript type checking for type safety
|
|
277
|
+
2. ✅ Check for inline styles that should use Tailwind classes
|
|
278
|
+
3. ✅ Verify only approved Modus colors are used
|
|
279
|
+
4. ✅ Ensure only Modus Icons are used
|
|
280
|
+
5. ✅ Detect border violations (Tailwind color classes in borders)
|
|
281
|
+
6. ✅ Validate opacity utilities usage
|
|
282
|
+
7. ✅ Validate Modus icon names are correct
|
|
283
|
+
|
|
284
|
+
## Modus Color System (9 Colors Only)
|
|
285
|
+
|
|
286
|
+
### Base Colors (5 total):
|
|
287
|
+
|
|
288
|
+
1. **Background**: `bg-background` → `var(--modus-wc-color-base-page)` - #fff (light) / #000 (dark)
|
|
289
|
+
2. **Card**: `bg-card` → `var(--modus-wc-color-base-100)` - #f1f1f6 (light) / #252a2e (dark)
|
|
290
|
+
3. **Muted**: `bg-muted` → `var(--modus-wc-color-base-200)` - #cbcdd6 (light) / #464b52 (dark)
|
|
291
|
+
4. **Secondary**: `bg-secondary` → `var(--modus-wc-color-base-300)` - #b7b9c3 (light) / #353a40 (dark)
|
|
292
|
+
5. **Foreground**: `text-foreground` → `var(--modus-wc-color-base-content)` - #171c1e (light) / #cbcdd6 (dark)
|
|
293
|
+
|
|
294
|
+
### Status Colors (4 total - same in both themes):
|
|
295
|
+
|
|
296
|
+
6. **Primary/Info**: `bg-primary` → `var(--modus-wc-color-info)` - #0063a3
|
|
297
|
+
7. **Success**: `bg-success` → `var(--modus-wc-color-success)` - #1e8a44
|
|
298
|
+
8. **Error**: `bg-error` → `var(--modus-wc-color-error)` - #da212c
|
|
299
|
+
9. **Warning**: `bg-warning` → `var(--modus-wc-color-warning)` - #fbad26
|
|
300
|
+
|
|
301
|
+
### Component Props:
|
|
302
|
+
|
|
303
|
+
- **Buttons**: `color="primary"`, `color="secondary"`, `color="warning"`, `color="danger"`
|
|
304
|
+
- **Alerts**: `type="info"`, `type="success"`, `type="warning"`, `type="error"`
|
|
305
|
+
|
|
306
|
+
**Note**: All colors are defined locally in `src/styles.css` for LLM context awareness. Use Tailwind classes (`bg-background`, `text-foreground`, etc.) instead of raw Modus CSS variables.
|
|
307
|
+
|
|
308
|
+
## Angular-Specific Patterns
|
|
309
|
+
|
|
310
|
+
### Template Syntax
|
|
311
|
+
|
|
312
|
+
- Use `class=""` instead of `className=""` (React pattern)
|
|
313
|
+
- Use `[style.*]` for dynamic styles (only if truly dynamic)
|
|
314
|
+
- Use Tailwind classes for static styles
|
|
315
|
+
- Use `<modus-icon>` Angular component or `<i class="modus-icons">`
|
|
316
|
+
|
|
317
|
+
### File Patterns
|
|
318
|
+
|
|
319
|
+
- Component files: `src/app/**/*.ts`
|
|
320
|
+
- Template files: `src/app/**/*.html`
|
|
321
|
+
- Styles: `src/**/*.css`, `src/**/*.scss`
|
|
322
|
+
|
|
323
|
+
### Icon Usage
|
|
324
|
+
|
|
325
|
+
```html
|
|
326
|
+
<!-- ✅ CORRECT: Angular modus-icon component -->
|
|
327
|
+
<modus-icon name="add" size="md" [decorative]="true" />
|
|
328
|
+
|
|
329
|
+
<!-- ✅ CORRECT: Direct icon class -->
|
|
330
|
+
<i class="modus-icons text-lg" aria-hidden="true">add</i>
|
|
331
|
+
|
|
332
|
+
<!-- ❌ WRONG: React syntax -->
|
|
333
|
+
<ModusIcon name="add" size="md" decorative />
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## 🪝 Pre-commit Hooks
|
|
339
|
+
|
|
340
|
+
This project uses **Husky** to automatically run all linting scripts before commits:
|
|
341
|
+
|
|
342
|
+
### Setup
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
# Install dependencies (includes Husky)
|
|
346
|
+
npm install
|
|
347
|
+
|
|
348
|
+
# Husky is automatically initialized via the "prepare" script
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
### What Runs on Pre-commit
|
|
352
|
+
|
|
353
|
+
The pre-commit hook (`.husky/pre-commit`) runs each linting script individually with clear step messages:
|
|
354
|
+
|
|
355
|
+
1. **📝 TypeScript Type Check** - `npm run type-check`
|
|
356
|
+
2. **🎨 Design System Colors** - `npm run lint:colors`
|
|
357
|
+
3. **💅 Inline Styles** - `npm run lint:styles`
|
|
358
|
+
4. **🔲 Border Patterns** - `npm run lint:borders`
|
|
359
|
+
5. **🌈 Opacity Utilities** - `npm run lint:opacity`
|
|
360
|
+
6. **🎨 Modus Icons Usage** - `npm run lint:icons`
|
|
361
|
+
7. **🏷️ Icon Names Validation** - `npm run lint:icon-names`
|
|
362
|
+
|
|
363
|
+
### Behavior
|
|
364
|
+
|
|
365
|
+
- ✅ **Commit allowed** if all checks pass
|
|
366
|
+
- ❌ **Commit blocked** if any check fails
|
|
367
|
+
- 📋 **Clear error messages** guide you to fix issues
|
|
368
|
+
|
|
369
|
+
### Manual Testing
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
# Test the pre-commit hook manually
|
|
373
|
+
./.husky/pre-commit
|
|
374
|
+
|
|
375
|
+
# Run individual checks
|
|
376
|
+
npm run lint:colors
|
|
377
|
+
npm run lint:icons
|
|
378
|
+
npm run type-check
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
## 🚀 GitHub Actions CI
|
|
382
|
+
|
|
383
|
+
The project includes a comprehensive CI workflow (`.github/workflows/ci.yml`) that runs on:
|
|
384
|
+
- **Push to main branch**
|
|
385
|
+
- **Pull requests to main branch**
|
|
386
|
+
|
|
387
|
+
### CI Pipeline Steps
|
|
388
|
+
|
|
389
|
+
1. **🔧 Setup** - Checkout code, setup Node.js 20, install dependencies
|
|
390
|
+
2. **📝 Type Checking** - Run TypeScript type validation
|
|
391
|
+
3. **🎨 Modus Linting Suite** - Run all design system compliance checks:
|
|
392
|
+
- Color compliance
|
|
393
|
+
- Inline styles validation
|
|
394
|
+
- Border patterns check
|
|
395
|
+
- Opacity utilities validation
|
|
396
|
+
- Modus icons usage validation
|
|
397
|
+
- Icon names validation
|
|
398
|
+
4. **🏗️ Build** - Compile the Angular application
|
|
399
|
+
5. **🧪 Tests** - Run unit tests (if available)
|
|
400
|
+
|
|
401
|
+
### Workflow Features
|
|
402
|
+
|
|
403
|
+
- **✅ Parallel execution** where possible for faster CI
|
|
404
|
+
- **🛡️ Quality gates** - Build fails if any check fails
|
|
405
|
+
- **📊 Clear reporting** - Each step shows detailed results
|
|
406
|
+
- **🔄 Automatic triggers** - Runs on every push and PR
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
**All scripts are updated for Angular + Tailwind v4 and work with the design system defined in `src/styles.css`.**
|