@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,300 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: integrate-modus-icons
|
|
3
|
+
description: Help with correct Modus icon usage patterns including naming conventions, sizing, and accessibility
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Integrate Modus Icons
|
|
7
|
+
|
|
8
|
+
Help with correct Modus icon usage patterns including naming conventions, sizing, and accessibility.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
Use this skill when:
|
|
13
|
+
- Adding icons to components or buttons
|
|
14
|
+
- Choosing the right icon name
|
|
15
|
+
- Sizing icons correctly
|
|
16
|
+
- Ensuring proper accessibility
|
|
17
|
+
- Integrating icons with Modus components
|
|
18
|
+
|
|
19
|
+
## Icon Naming Convention
|
|
20
|
+
|
|
21
|
+
**CRITICAL**: Modus icons use **UNDERSCORES (_)**, not hyphens (-)
|
|
22
|
+
|
|
23
|
+
### Correct Icon Names
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
// ✅ CORRECT: Use underscores
|
|
27
|
+
<i className="modus-icons">save_disk</i>
|
|
28
|
+
<i className="modus-icons">arrow_left</i>
|
|
29
|
+
<i className="modus-icons">add_circle</i>
|
|
30
|
+
<i className="modus-icons">user_permissions</i>
|
|
31
|
+
|
|
32
|
+
// ❌ WRONG: Don't use hyphens
|
|
33
|
+
<i className="modus-icons">save-disk</i>
|
|
34
|
+
<i className="modus-icons">arrow-left</i>
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Usage Patterns
|
|
38
|
+
|
|
39
|
+
### Pattern 1: Using ModusIcon Component
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
import ModusIcon from "./components/ModusIcon";
|
|
43
|
+
|
|
44
|
+
// Informational icon (announced by screen reader)
|
|
45
|
+
<ModusIcon
|
|
46
|
+
name="user_add"
|
|
47
|
+
size="lg"
|
|
48
|
+
decorative={false}
|
|
49
|
+
ariaLabel="Add user"
|
|
50
|
+
/>
|
|
51
|
+
|
|
52
|
+
// Decorative icon (not announced)
|
|
53
|
+
<ModusIcon
|
|
54
|
+
name="chevron_right"
|
|
55
|
+
size="md"
|
|
56
|
+
decorative={true}
|
|
57
|
+
/>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Reference: `src/components/ModusIcon.tsx`
|
|
61
|
+
|
|
62
|
+
### Pattern 2: Using Bare `<i>` Element
|
|
63
|
+
|
|
64
|
+
```tsx
|
|
65
|
+
// Decorative icon
|
|
66
|
+
<i className="modus-icons text-lg" aria-hidden="true">
|
|
67
|
+
user_add
|
|
68
|
+
</i>
|
|
69
|
+
|
|
70
|
+
// Informational icon
|
|
71
|
+
<i
|
|
72
|
+
className="modus-icons text-md"
|
|
73
|
+
role="img"
|
|
74
|
+
aria-label="Settings"
|
|
75
|
+
>
|
|
76
|
+
settings
|
|
77
|
+
</i>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Pattern 3: Icons in Buttons
|
|
81
|
+
|
|
82
|
+
```tsx
|
|
83
|
+
import ModusButton from "./components/ModusButton";
|
|
84
|
+
|
|
85
|
+
// Icon with text (left position)
|
|
86
|
+
<ModusButton
|
|
87
|
+
icon="save_disk"
|
|
88
|
+
iconPosition="left"
|
|
89
|
+
>
|
|
90
|
+
Save File
|
|
91
|
+
</ModusButton>
|
|
92
|
+
|
|
93
|
+
// Icon with text (right position)
|
|
94
|
+
<ModusButton
|
|
95
|
+
icon="download"
|
|
96
|
+
iconPosition="right"
|
|
97
|
+
>
|
|
98
|
+
Download
|
|
99
|
+
</ModusButton>
|
|
100
|
+
|
|
101
|
+
// Icon only (requires aria-label)
|
|
102
|
+
<ModusButton
|
|
103
|
+
icon="settings"
|
|
104
|
+
iconPosition="only"
|
|
105
|
+
ariaLabel="Open settings"
|
|
106
|
+
/>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Reference: `src/components/ModusButton.tsx:149-206` for icon rendering logic
|
|
110
|
+
|
|
111
|
+
## Icon Sizing
|
|
112
|
+
|
|
113
|
+
### Tailwind Text Classes
|
|
114
|
+
|
|
115
|
+
Use Tailwind text utilities for sizing:
|
|
116
|
+
|
|
117
|
+
```tsx
|
|
118
|
+
// Small icon
|
|
119
|
+
<i className="modus-icons text-sm">info</i>
|
|
120
|
+
|
|
121
|
+
// Base icon (Modus default 14px)
|
|
122
|
+
<i className="modus-icons text-base">warning</i>
|
|
123
|
+
|
|
124
|
+
// Large icon (16px)
|
|
125
|
+
<i className="modus-icons text-lg">error</i>
|
|
126
|
+
|
|
127
|
+
// Extra large icon (18px)
|
|
128
|
+
<i className="modus-icons text-xl">success</i>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Modus Font Size Scale
|
|
132
|
+
|
|
133
|
+
| Tailwind Class | Size | Usage |
|
|
134
|
+
|----------------|------|-------|
|
|
135
|
+
| `text-2xs` | 8px | Micro icons, badges |
|
|
136
|
+
| `text-xs` | 10px | Small labels, captions |
|
|
137
|
+
| `text-sm` | 12px | Secondary icons |
|
|
138
|
+
| `text-base` | 14px | **Modus default size** |
|
|
139
|
+
| `text-lg` | 16px | Body text icons |
|
|
140
|
+
| `text-xl` | 18px | Large icons |
|
|
141
|
+
| `text-2xl` | 20px | Prominent icons |
|
|
142
|
+
| `text-3xl` | 24px | Display icons |
|
|
143
|
+
|
|
144
|
+
### Button Icon Sizing
|
|
145
|
+
|
|
146
|
+
Icons in buttons automatically scale based on button size:
|
|
147
|
+
|
|
148
|
+
```tsx
|
|
149
|
+
// Icons scale with button size
|
|
150
|
+
<ModusButton size="xs" icon="star" iconPosition="left">Extra Small</ModusButton>
|
|
151
|
+
<ModusButton size="sm" icon="star" iconPosition="left">Small</ModusButton>
|
|
152
|
+
<ModusButton size="md" icon="star" iconPosition="left">Medium</ModusButton>
|
|
153
|
+
<ModusButton size="lg" icon="star" iconPosition="left">Large</ModusButton>
|
|
154
|
+
|
|
155
|
+
// Icon-only buttons use larger icons
|
|
156
|
+
<ModusButton size="md" icon="settings" iconPosition="only" ariaLabel="Settings" />
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Automatic sizing rules:
|
|
160
|
+
- **Icons with text**: Scale with button size (`text-xs` for xs, `text-lg` for md)
|
|
161
|
+
- **Icon-only buttons**: Get larger icons (`text-sm` for xs, `text-xl` for md)
|
|
162
|
+
|
|
163
|
+
Reference: `src/components/ModusButton.tsx:98-134`
|
|
164
|
+
|
|
165
|
+
## Icon Colors
|
|
166
|
+
|
|
167
|
+
Use design system colors:
|
|
168
|
+
|
|
169
|
+
```tsx
|
|
170
|
+
// Primary color
|
|
171
|
+
<i className="modus-icons text-primary">info</i>
|
|
172
|
+
|
|
173
|
+
// Success color
|
|
174
|
+
<i className="modus-icons text-success">check_circle</i>
|
|
175
|
+
|
|
176
|
+
// Warning color
|
|
177
|
+
<i className="modus-icons text-warning">warning</i>
|
|
178
|
+
|
|
179
|
+
// Error color
|
|
180
|
+
<i className="modus-icons text-error">error</i>
|
|
181
|
+
|
|
182
|
+
// Muted text
|
|
183
|
+
<i className="modus-icons text-muted-foreground">help</i>
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Accessibility
|
|
187
|
+
|
|
188
|
+
### Decorative Icons
|
|
189
|
+
|
|
190
|
+
For purely decorative icons, use `aria-hidden="true"`:
|
|
191
|
+
|
|
192
|
+
```tsx
|
|
193
|
+
<button>
|
|
194
|
+
<i className="modus-icons mr-2" aria-hidden="true">save_disk</i>
|
|
195
|
+
Save Document
|
|
196
|
+
</button>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Informational Icons
|
|
200
|
+
|
|
201
|
+
For icons that convey meaning, provide proper labels:
|
|
202
|
+
|
|
203
|
+
```tsx
|
|
204
|
+
// Using role="img" and aria-label
|
|
205
|
+
<i className="modus-icons" role="img" aria-label="Warning">
|
|
206
|
+
warning
|
|
207
|
+
</i>
|
|
208
|
+
|
|
209
|
+
// Using aria-label on parent element
|
|
210
|
+
<button aria-label="Delete item">
|
|
211
|
+
<i className="modus-icons" aria-hidden="true">delete</i>
|
|
212
|
+
</button>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Icon-Only Buttons
|
|
216
|
+
|
|
217
|
+
Always provide accessible labels:
|
|
218
|
+
|
|
219
|
+
```tsx
|
|
220
|
+
<ModusButton
|
|
221
|
+
icon="settings"
|
|
222
|
+
iconPosition="only"
|
|
223
|
+
ariaLabel="Open settings menu"
|
|
224
|
+
/>
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## Common Icon Names
|
|
228
|
+
|
|
229
|
+
### Navigation & UI
|
|
230
|
+
|
|
231
|
+
- `arrow_left`, `arrow_right`, `arrow_up`, `arrow_down`
|
|
232
|
+
- `chevron_left`, `chevron_right`
|
|
233
|
+
- `menu`, `close`, `home`, `settings`, `search`
|
|
234
|
+
|
|
235
|
+
### Actions & Operations
|
|
236
|
+
|
|
237
|
+
- `add`, `remove`, `edit_combination`, `delete`
|
|
238
|
+
- `save_disk`, `download`, `upload`, `copy_content`
|
|
239
|
+
|
|
240
|
+
### Status & Feedback
|
|
241
|
+
|
|
242
|
+
- `check`, `check_circle`, `error`, `warning`, `alert`, `info`, `help`
|
|
243
|
+
|
|
244
|
+
### Files & Documents
|
|
245
|
+
|
|
246
|
+
- `file`, `file_upload`, `file_download`
|
|
247
|
+
- `folder_open`, `folder_closed`, `document`, `image`, `video`
|
|
248
|
+
|
|
249
|
+
### User & Account
|
|
250
|
+
|
|
251
|
+
- `person`, `people_group`, `user_account`, `user_add`
|
|
252
|
+
- `key`, `lock`, `lock_open`
|
|
253
|
+
|
|
254
|
+
## Validating Icon Names
|
|
255
|
+
|
|
256
|
+
Check icon names against the complete list in:
|
|
257
|
+
- `.cursor/rules/modus-icon-names.mdc` - Complete list of 700+ valid icon names
|
|
258
|
+
|
|
259
|
+
Common mistakes:
|
|
260
|
+
- Using hyphens instead of underscores
|
|
261
|
+
- Wrong capitalization (all lowercase)
|
|
262
|
+
- Typos in icon names
|
|
263
|
+
|
|
264
|
+
## Testing Icons
|
|
265
|
+
|
|
266
|
+
### Visual Verification
|
|
267
|
+
|
|
268
|
+
Icons should display as glyphs, not text. If you see text like "save_disk" instead of an icon:
|
|
269
|
+
|
|
270
|
+
1. Check font CSS is loaded in `index.html`
|
|
271
|
+
2. Verify icon name uses underscores
|
|
272
|
+
3. Confirm `modus-icons` class is applied
|
|
273
|
+
4. Check network tab for font file download
|
|
274
|
+
|
|
275
|
+
### Browser DevTools Check
|
|
276
|
+
|
|
277
|
+
```javascript
|
|
278
|
+
// Check if font is loaded
|
|
279
|
+
const testElement = document.createElement('span');
|
|
280
|
+
testElement.className = 'modus-icons';
|
|
281
|
+
document.body.appendChild(testElement);
|
|
282
|
+
const fontFamily = window.getComputedStyle(testElement).fontFamily;
|
|
283
|
+
console.log('Font loaded:', fontFamily.includes('modus-icons'));
|
|
284
|
+
document.body.removeChild(testElement);
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## Common Mistakes
|
|
288
|
+
|
|
289
|
+
1. **Wrong naming**: Using hyphens instead of underscores
|
|
290
|
+
2. **Wrong sizing**: Using pixel values instead of Tailwind classes
|
|
291
|
+
3. **Missing accessibility**: Not providing aria-label for informational icons
|
|
292
|
+
4. **Wrong icon name**: Not checking against valid icon list
|
|
293
|
+
5. **Font not loaded**: Missing CSS import for Modus icons
|
|
294
|
+
|
|
295
|
+
## Related Files
|
|
296
|
+
|
|
297
|
+
- `src/components/ModusIcon.tsx` - Icon component wrapper
|
|
298
|
+
- `src/components/ModusButton.tsx` - Button icon integration
|
|
299
|
+
- `.cursor/rules/modus-icon-names.mdc` - Complete icon name list
|
|
300
|
+
- `.cursor/rules/modus-icons-react.mdc` - Detailed icon documentation
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: run-lint-checks
|
|
3
|
+
description: Run comprehensive lint checks for React + Vite project to ensure design system compliance, type safety, and code quality. Use when making code changes, before completing tasks, or when the user requests lint checks.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Run Lint Checks
|
|
7
|
+
|
|
8
|
+
Automatically run all linting and quality checks for the React + Vite project to ensure design system compliance, type safety, and code quality.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
|
|
12
|
+
- **Before completing any task** - Always run lint checks before marking tasks as complete
|
|
13
|
+
- **After making code changes** - Run checks after modifying TypeScript, TSX, or CSS files
|
|
14
|
+
- **Before committing code** - Ensure all quality gates pass before committing
|
|
15
|
+
- **When user requests** - Run checks when explicitly requested by the user
|
|
16
|
+
- **During code review** - Verify code quality and design system compliance
|
|
17
|
+
|
|
18
|
+
## Instructions
|
|
19
|
+
|
|
20
|
+
### Mandatory Pre-Completion Checklist
|
|
21
|
+
|
|
22
|
+
**CRITICAL**: Before marking any development task as complete, you MUST:
|
|
23
|
+
|
|
24
|
+
1. Run all lint checks using `npm run lint:all`
|
|
25
|
+
2. Fix any violations found
|
|
26
|
+
3. Verify TypeScript type checking passes
|
|
27
|
+
4. Ensure all design system compliance checks pass
|
|
28
|
+
|
|
29
|
+
### Running Lint Checks
|
|
30
|
+
|
|
31
|
+
Execute the comprehensive lint check command:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm run lint:all
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
This command runs all checks in sequence:
|
|
38
|
+
- TypeScript type checking (`npm run type-check`)
|
|
39
|
+
- Modus icons validation (`npm run lint:icons`)
|
|
40
|
+
- Semantic HTML compliance (`npm run lint:semantic`)
|
|
41
|
+
- Color compliance (`npm run lint:colors`)
|
|
42
|
+
- Inline styles validation (`npm run lint:styles`)
|
|
43
|
+
- Border violations (`npm run lint:borders`)
|
|
44
|
+
- Opacity utilities (`npm run lint:opacity`)
|
|
45
|
+
- Icon name validation (`npm run lint:icon-names`)
|
|
46
|
+
|
|
47
|
+
### Individual Lint Commands
|
|
48
|
+
|
|
49
|
+
If you need to run checks individually:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# ESLint (React/TypeScript)
|
|
53
|
+
npm run lint
|
|
54
|
+
|
|
55
|
+
# TypeScript type checking
|
|
56
|
+
npm run type-check
|
|
57
|
+
|
|
58
|
+
# Modus icons library validation
|
|
59
|
+
npm run lint:icons
|
|
60
|
+
|
|
61
|
+
# Semantic HTML compliance
|
|
62
|
+
npm run lint:semantic
|
|
63
|
+
|
|
64
|
+
# Design system color compliance
|
|
65
|
+
npm run lint:colors
|
|
66
|
+
|
|
67
|
+
# Inline styles validation
|
|
68
|
+
npm run lint:styles
|
|
69
|
+
|
|
70
|
+
# Border pattern violations
|
|
71
|
+
npm run lint:borders
|
|
72
|
+
|
|
73
|
+
# Opacity utilities validation
|
|
74
|
+
npm run lint:opacity
|
|
75
|
+
|
|
76
|
+
# Icon name validation
|
|
77
|
+
npm run lint:icon-names
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Handling Violations
|
|
81
|
+
|
|
82
|
+
When violations are found:
|
|
83
|
+
|
|
84
|
+
1. **Read the error messages carefully** - Each lint script provides specific file locations and violation details
|
|
85
|
+
2. **Fix violations immediately** - Don't proceed until all violations are resolved
|
|
86
|
+
3. **Re-run checks** - After fixing, run `npm run lint:all` again to verify
|
|
87
|
+
4. **Document fixes** - If a fix requires architectural changes, explain the reasoning
|
|
88
|
+
|
|
89
|
+
### Common Violations to Fix
|
|
90
|
+
|
|
91
|
+
#### Inline Styles
|
|
92
|
+
```tsx
|
|
93
|
+
// ❌ VIOLATION
|
|
94
|
+
<div style={{ backgroundColor: 'var(--modus-wc-color-base-page)' }}>
|
|
95
|
+
<div style={{ marginRight: '8px' }}>
|
|
96
|
+
|
|
97
|
+
// ✅ CORRECT
|
|
98
|
+
<div className="bg-background mr-2 text-foreground">
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
#### Color Usage
|
|
102
|
+
```tsx
|
|
103
|
+
// ❌ VIOLATION
|
|
104
|
+
<div style={{ backgroundColor: '#ffffff' }}>
|
|
105
|
+
<div className="bg-blue-500 text-red-400">
|
|
106
|
+
|
|
107
|
+
// ✅ CORRECT
|
|
108
|
+
<div className="bg-background text-foreground">
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
#### Icon Usage
|
|
112
|
+
```tsx
|
|
113
|
+
// ❌ VIOLATION
|
|
114
|
+
<i className="fa fa-home"></i>
|
|
115
|
+
<i className="material-icons">home</i>
|
|
116
|
+
|
|
117
|
+
// ✅ CORRECT
|
|
118
|
+
<i className="modus-icons">home</i>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
#### Semantic HTML
|
|
122
|
+
```tsx
|
|
123
|
+
// ❌ VIOLATION
|
|
124
|
+
<h1>Title</h1>
|
|
125
|
+
<p>Content</p>
|
|
126
|
+
<section>Section</section>
|
|
127
|
+
|
|
128
|
+
// ✅ CORRECT (use div elements only)
|
|
129
|
+
<div className="text-4xl font-bold">Title</div>
|
|
130
|
+
<div className="text-base">Content</div>
|
|
131
|
+
<div className="bg-card">Section</div>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
#### Border Violations
|
|
135
|
+
```tsx
|
|
136
|
+
// ❌ VIOLATION
|
|
137
|
+
<div className="border border-red-500">Error message</div>
|
|
138
|
+
|
|
139
|
+
// ✅ CORRECT
|
|
140
|
+
<div className="border-destructive">Error message</div>
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
#### Opacity Violations
|
|
144
|
+
```tsx
|
|
145
|
+
// ❌ VIOLATION
|
|
146
|
+
<div className="text-foreground/80">Text with opacity</div>
|
|
147
|
+
|
|
148
|
+
// ✅ CORRECT
|
|
149
|
+
<div className="text-foreground-80">Text with opacity</div>
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Quality Gates
|
|
153
|
+
|
|
154
|
+
All of these must pass before code is considered complete:
|
|
155
|
+
|
|
156
|
+
- [ ] `npm run lint` - 0 ESLint errors
|
|
157
|
+
- [ ] `npm run type-check` - 0 TypeScript errors
|
|
158
|
+
- [ ] `npm run lint:icons` - 0 icon violations
|
|
159
|
+
- [ ] `npm run lint:semantic` - 0 semantic HTML violations
|
|
160
|
+
- [ ] `npm run lint:colors` - 0 color violations
|
|
161
|
+
- [ ] `npm run lint:styles` - 0 inline style violations
|
|
162
|
+
- [ ] `npm run lint:borders` - 0 border violations
|
|
163
|
+
- [ ] `npm run lint:opacity` - 0 opacity violations
|
|
164
|
+
- [ ] `npm run lint:icon-names` - 0 invalid icon names
|
|
165
|
+
|
|
166
|
+
## Integration with Development Workflow
|
|
167
|
+
|
|
168
|
+
This skill integrates with the project's development workflow:
|
|
169
|
+
|
|
170
|
+
1. **During Development**: Run checks periodically to catch issues early
|
|
171
|
+
2. **Before Completion**: Always run `npm run lint:all` before marking tasks complete
|
|
172
|
+
3. **Pre-Commit**: All checks must pass before committing code
|
|
173
|
+
4. **CI/CD**: These same checks run in CI/CD pipelines
|
|
174
|
+
|
|
175
|
+
## Error Handling
|
|
176
|
+
|
|
177
|
+
If lint checks fail:
|
|
178
|
+
|
|
179
|
+
1. **Don't skip or ignore violations** - All violations must be fixed
|
|
180
|
+
2. **Provide clear error messages** - Show the user exactly what failed and where
|
|
181
|
+
3. **Suggest fixes** - When possible, provide specific guidance on how to fix violations
|
|
182
|
+
4. **Re-run after fixes** - Always verify fixes by running checks again
|
|
183
|
+
|
|
184
|
+
## React-Specific Patterns
|
|
185
|
+
|
|
186
|
+
### Component Patterns
|
|
187
|
+
- Use wrapper components from `src/components/` not web components directly
|
|
188
|
+
- Use `useRef` + `useEffect` for event listeners with proper cleanup
|
|
189
|
+
- Let Modus components manage their own state (don't control from React state)
|
|
190
|
+
|
|
191
|
+
### Event Handling
|
|
192
|
+
```tsx
|
|
193
|
+
// ✅ CORRECT: Event listener pattern
|
|
194
|
+
useEffect(() => {
|
|
195
|
+
const component = componentRef.current;
|
|
196
|
+
if (!component) return;
|
|
197
|
+
|
|
198
|
+
const handleEvent = (event: Event) => {
|
|
199
|
+
onEvent?.(event as CustomEvent<EventDetailType>);
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
if (onEvent) {
|
|
203
|
+
component.addEventListener('eventName', handleEvent);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
return () => {
|
|
207
|
+
if (onEvent) {
|
|
208
|
+
component.removeEventListener('eventName', handleEvent);
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
}, [onEvent]);
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Conditional Props
|
|
215
|
+
```tsx
|
|
216
|
+
// ✅ CORRECT: Conditional spreading
|
|
217
|
+
<ModusWcComponent
|
|
218
|
+
{...(color && { color })}
|
|
219
|
+
{...(variant && { variant })}
|
|
220
|
+
/>
|
|
221
|
+
|
|
222
|
+
// ❌ WRONG: Passing undefined
|
|
223
|
+
<ModusWcComponent
|
|
224
|
+
color={color} // May be undefined
|
|
225
|
+
/>
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## Notes
|
|
229
|
+
|
|
230
|
+
- Lint checks are fast and should be run frequently during development
|
|
231
|
+
- Some violations may require architectural changes - discuss these with the user if needed
|
|
232
|
+
- The `lint:all` command stops on first failure - fix issues sequentially
|
|
233
|
+
- All lint scripts are located in `scripts/` directory
|
|
234
|
+
- These checks enforce the Modus Design System compliance requirements
|
|
235
|
+
- React-specific patterns (hooks, event handling) are validated through ESLint
|