@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,352 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Border Violations Linting Script for Angular + Tailwind v4
|
|
5
|
+
*
|
|
6
|
+
* This script checks for usage of incorrect border patterns that violate
|
|
7
|
+
* Tailwind v4 + Modus design system rules.
|
|
8
|
+
*
|
|
9
|
+
* It flags Tailwind color classes in borders and suggests
|
|
10
|
+
* proper design system color alternatives.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import fs from 'fs';
|
|
14
|
+
import path from 'path';
|
|
15
|
+
import { createRequire } from 'module';
|
|
16
|
+
const require = createRequire(import.meta.url);
|
|
17
|
+
const { glob } = require('glob');
|
|
18
|
+
|
|
19
|
+
// Border violation patterns to detect (Angular template syntax: class="" not className="")
|
|
20
|
+
const BORDER_VIOLATION_PATTERNS = [
|
|
21
|
+
// Border with Tailwind color classes (should use design system colors)
|
|
22
|
+
{
|
|
23
|
+
pattern:
|
|
24
|
+
/class="[^"]*\bborder-(red|blue|green|yellow|purple|pink|indigo|gray|slate|zinc|neutral|stone|orange|amber|lime|emerald|teal|cyan|sky|violet|fuchsia|rose)-(\d{2,3}|50)\b[^"]*"/g,
|
|
25
|
+
type: 'tailwind-border-color',
|
|
26
|
+
description: 'Tailwind border with color classes (should use design system colors)',
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
// Border-t, border-b, border-l, border-r with Tailwind colors
|
|
30
|
+
{
|
|
31
|
+
pattern:
|
|
32
|
+
/class="[^"]*\bborder-[tblr]-(red|blue|green|yellow|purple|pink|indigo|gray|slate|zinc|neutral|stone|orange|amber|lime|emerald|teal|cyan|sky|violet|fuchsia|rose)-(\d{2,3}|50)\b[^"]*"/g,
|
|
33
|
+
type: 'tailwind-border-side-color',
|
|
34
|
+
description: 'Tailwind directional border with color classes (should use design system)',
|
|
35
|
+
exclude: /border-(?:top|bottom|left|right)-default/,
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
// Border with hardcoded colors
|
|
39
|
+
{
|
|
40
|
+
pattern: /class="[^"]*\bborder-[^"]*#[0-9a-fA-F]{3,6}[^"]*"/g,
|
|
41
|
+
type: 'hardcoded-border-color',
|
|
42
|
+
description: 'Border with hardcoded hex colors (should use design system)',
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
// Inline border styles that should use utility classes (Angular style syntax)
|
|
46
|
+
{
|
|
47
|
+
pattern: /style\s*=\s*["']border:\s*1px\s+solid\s+var\(--border\)["']/g,
|
|
48
|
+
type: 'inline-border-style',
|
|
49
|
+
description: 'Inline border style should use border-default utility class',
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
// Inline border styles with different widths
|
|
53
|
+
{
|
|
54
|
+
pattern: /style\s*=\s*["']border:\s*2px\s+solid\s+var\(--border\)["']/g,
|
|
55
|
+
type: 'inline-border-thick',
|
|
56
|
+
description: 'Inline thick border style should use border-thick utility class',
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
// Inline border styles with dashed
|
|
60
|
+
{
|
|
61
|
+
pattern: /style\s*=\s*["']border:\s*1px\s+dashed\s+var\(--border\)["']/g,
|
|
62
|
+
type: 'inline-border-dashed',
|
|
63
|
+
description: 'Inline dashed border style should use border-dashed utility class',
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
// Inline border styles with thick dashed
|
|
67
|
+
{
|
|
68
|
+
pattern: /style\s*=\s*["']border:\s*2px\s+dashed\s+var\(--border\)["']/g,
|
|
69
|
+
type: 'inline-border-thick-dashed',
|
|
70
|
+
description: 'Inline thick dashed border style should use border-thick-dashed utility class',
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
// Inline border styles for specific sides (Angular style attribute binding)
|
|
74
|
+
{
|
|
75
|
+
pattern: /\[style\.border-top\]\s*=\s*["']1px\s+solid\s+var\(--border\)["']/g,
|
|
76
|
+
type: 'inline-border-top',
|
|
77
|
+
description: 'Inline top border style should use border-top-default utility class',
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
{
|
|
81
|
+
pattern: /\[style\.border-bottom\]\s*=\s*["']1px\s+solid\s+var\(--border\)["']/g,
|
|
82
|
+
type: 'inline-border-bottom',
|
|
83
|
+
description: 'Inline bottom border style should use border-bottom-default utility class',
|
|
84
|
+
},
|
|
85
|
+
|
|
86
|
+
{
|
|
87
|
+
pattern: /\[style\.border-left\]\s*=\s*["']1px\s+solid\s+var\(--border\)["']/g,
|
|
88
|
+
type: 'inline-border-left',
|
|
89
|
+
description: 'Inline left border style should use border-left-default utility class',
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
{
|
|
93
|
+
pattern: /\[style\.border-right\]\s*=\s*["']1px\s+solid\s+var\(--border\)["']/g,
|
|
94
|
+
type: 'inline-border-right',
|
|
95
|
+
description: 'Inline right border style should use border-right-default utility class',
|
|
96
|
+
},
|
|
97
|
+
];
|
|
98
|
+
|
|
99
|
+
// Correct border patterns (for suggestions) - Using our utility classes!
|
|
100
|
+
const CORRECT_BORDER_PATTERNS = {
|
|
101
|
+
// Tailwind border violations → Our utility classes
|
|
102
|
+
'border border-border': 'class="border-default"',
|
|
103
|
+
'border-2 border-border': 'class="border-thick"',
|
|
104
|
+
'border-4 border-border': 'class="border-thick"',
|
|
105
|
+
border: 'class="border-default"',
|
|
106
|
+
'border-2': 'class="border-thick"',
|
|
107
|
+
'border-4': 'class="border-thick"',
|
|
108
|
+
'border-t border-border': 'class="border-top-default"',
|
|
109
|
+
'border-b border-border': 'class="border-bottom-default"',
|
|
110
|
+
'border-l border-border': 'class="border-left-default"',
|
|
111
|
+
'border-r border-border': 'class="border-right-default"',
|
|
112
|
+
'border-t': 'class="border-top-default"',
|
|
113
|
+
'border-b': 'class="border-bottom-default"',
|
|
114
|
+
'border-l': 'class="border-left-default"',
|
|
115
|
+
'border-r': 'class="border-right-default"',
|
|
116
|
+
|
|
117
|
+
// Tailwind color classes → Our design system colors
|
|
118
|
+
'border border-red-500': 'class="border-error"',
|
|
119
|
+
'border border-green-500': 'class="border-success"',
|
|
120
|
+
'border border-yellow-500': 'class="border-warning"',
|
|
121
|
+
'border border-blue-500': 'class="border-primary"',
|
|
122
|
+
'border-2 border-red-500': 'class="border-thick-error"',
|
|
123
|
+
'border-2 border-green-500': 'class="border-thick-success"',
|
|
124
|
+
'border-2 border-yellow-500': 'class="border-thick-warning"',
|
|
125
|
+
'border-2 border-blue-500': 'class="border-thick-primary"',
|
|
126
|
+
|
|
127
|
+
// Inline border styles → Our utility classes (Angular style syntax)
|
|
128
|
+
'style="border: 1px solid var(--border)"': 'class="border-default"',
|
|
129
|
+
'style="border: 2px solid var(--border)"': 'class="border-thick"',
|
|
130
|
+
'style="border: 1px dashed var(--border)"': 'class="border-dashed"',
|
|
131
|
+
'style="border: 2px dashed var(--border)"': 'class="border-thick-dashed"',
|
|
132
|
+
'[style.border-top]="1px solid var(--border)"': 'class="border-top-default"',
|
|
133
|
+
'[style.border-bottom]="1px solid var(--border)"': 'class="border-bottom-default"',
|
|
134
|
+
'[style.border-left]="1px solid var(--border)"': 'class="border-left-default"',
|
|
135
|
+
'[style.border-right]="1px solid var(--border)"': 'class="border-right-default"',
|
|
136
|
+
|
|
137
|
+
// Fallback for any other border patterns
|
|
138
|
+
default: 'class="border-default"',
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
// Files to check
|
|
142
|
+
const FILE_PATTERNS = ['src/**/*.ts', 'src/**/*.html'];
|
|
143
|
+
|
|
144
|
+
// Files to exclude
|
|
145
|
+
const EXCLUDE_PATTERNS = [
|
|
146
|
+
'**/node_modules/**',
|
|
147
|
+
'**/dist/**',
|
|
148
|
+
'**/build/**',
|
|
149
|
+
'**/*.d.ts',
|
|
150
|
+
'scripts/**',
|
|
151
|
+
];
|
|
152
|
+
|
|
153
|
+
async function findBorderViolations() {
|
|
154
|
+
console.log('🎨 Checking for border violations in Angular app...\n');
|
|
155
|
+
|
|
156
|
+
let totalViolations = 0;
|
|
157
|
+
const violations = [];
|
|
158
|
+
|
|
159
|
+
try {
|
|
160
|
+
// Get all files to check
|
|
161
|
+
const allFiles = [];
|
|
162
|
+
for (const pattern of FILE_PATTERNS) {
|
|
163
|
+
const files = glob.sync(pattern, { ignore: EXCLUDE_PATTERNS });
|
|
164
|
+
allFiles.push(...files);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Remove duplicates
|
|
168
|
+
const uniqueFiles = [...new Set(allFiles)];
|
|
169
|
+
|
|
170
|
+
console.log(`🔍 Scanning ${uniqueFiles.length} files for border violations...\n`);
|
|
171
|
+
|
|
172
|
+
for (const filePath of uniqueFiles) {
|
|
173
|
+
if (!fs.existsSync(filePath)) continue;
|
|
174
|
+
|
|
175
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
176
|
+
const fileViolations = [];
|
|
177
|
+
|
|
178
|
+
// Check for border violations
|
|
179
|
+
for (const violationRule of BORDER_VIOLATION_PATTERNS) {
|
|
180
|
+
const matches = content.match(violationRule.pattern);
|
|
181
|
+
if (matches) {
|
|
182
|
+
for (const match of matches) {
|
|
183
|
+
// Skip if this match should be excluded (our utility classes)
|
|
184
|
+
if (violationRule.exclude && violationRule.exclude.test(match)) {
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
const lines = content.substring(0, content.indexOf(match)).split('\n');
|
|
189
|
+
const lineNumber = lines.length;
|
|
190
|
+
const columnNumber = lines[lines.length - 1].length + 1;
|
|
191
|
+
|
|
192
|
+
fileViolations.push({
|
|
193
|
+
line: lineNumber,
|
|
194
|
+
column: columnNumber,
|
|
195
|
+
match: match,
|
|
196
|
+
type: violationRule.type,
|
|
197
|
+
description: violationRule.description,
|
|
198
|
+
suggestion: getSuggestion(match, violationRule.type),
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (fileViolations.length > 0) {
|
|
205
|
+
violations.push({
|
|
206
|
+
file: filePath,
|
|
207
|
+
violations: fileViolations,
|
|
208
|
+
});
|
|
209
|
+
totalViolations += fileViolations.length;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
if (totalViolations === 0) {
|
|
214
|
+
console.log('✅ All files are using correct border patterns!');
|
|
215
|
+
console.log('📝 Note: Border violations are avoided to ensure design system compliance');
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// Report violations
|
|
220
|
+
console.log(`❌ Found ${totalViolations} border violation(s):\n`);
|
|
221
|
+
|
|
222
|
+
for (const { file, violations: fileViolations } of violations) {
|
|
223
|
+
const relativePath = path.relative(process.cwd(), file);
|
|
224
|
+
console.log(`📄 ${relativePath}:`);
|
|
225
|
+
for (const violation of fileViolations) {
|
|
226
|
+
console.log(` ${violation.line}:${violation.column} - ${violation.description}`);
|
|
227
|
+
console.log(` ❌ Found: ${violation.match}`);
|
|
228
|
+
console.log(` ✅ Use instead: ${violation.suggestion}\n`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
console.log('🔧 Border Violation Resolution - Use Design System Colors:');
|
|
233
|
+
console.log(' ✅ RECOMMENDED: Use custom border utilities with design system colors');
|
|
234
|
+
console.log(' • border → class="border-default"');
|
|
235
|
+
console.log(' • border-2 → class="border-thick"');
|
|
236
|
+
console.log(' • border-t → class="border-top-default"');
|
|
237
|
+
console.log(' • border-b → class="border-bottom-default"');
|
|
238
|
+
console.log(' • For dashed borders → class="border-dashed" or "border-thick-dashed"');
|
|
239
|
+
console.log('');
|
|
240
|
+
console.log(' 🎨 Context-Specific Design System Colors:');
|
|
241
|
+
console.log(' • Success: border-success + border-thick-success');
|
|
242
|
+
console.log(' • Warning: border-warning + border-thick-warning');
|
|
243
|
+
console.log(' • Error: border-error + border-thick-error');
|
|
244
|
+
console.log(' • Primary: border-primary + border-thick-primary');
|
|
245
|
+
console.log(' • Default: border-default + border-thick');
|
|
246
|
+
console.log('');
|
|
247
|
+
console.log(' 💡 Benefits of our utility classes:');
|
|
248
|
+
console.log(' • Theme-aware (automatically adapts to light/dark themes)');
|
|
249
|
+
console.log(' • Uses design system colors (var(--border))');
|
|
250
|
+
console.log(' • Linting compliant');
|
|
251
|
+
console.log(' • No inline styles needed');
|
|
252
|
+
console.log(' • Consistent with project patterns');
|
|
253
|
+
console.log('');
|
|
254
|
+
console.log(' ⚠️ Why avoid Tailwind color classes:');
|
|
255
|
+
console.log(" • Tailwind color classes don't use our design system");
|
|
256
|
+
console.log(' • Our utilities are more maintainable and theme-consistent');
|
|
257
|
+
console.log(' • Ensures consistent branding across the application');
|
|
258
|
+
console.log('');
|
|
259
|
+
console.log(' 📖 Documentation: See src/styles.css for all available border utilities');
|
|
260
|
+
|
|
261
|
+
process.exit(1);
|
|
262
|
+
} catch (error) {
|
|
263
|
+
console.error('❌ Error checking border violations:', error.message);
|
|
264
|
+
process.exit(1);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
function getSuggestion(violation, violationType) {
|
|
269
|
+
// Check if it's an inline style violation first (Angular style syntax)
|
|
270
|
+
if (violation.includes('style=') || violation.includes('[style.')) {
|
|
271
|
+
// Map inline styles to utility classes
|
|
272
|
+
if (violation.includes('border: 1px solid var(--border)')) {
|
|
273
|
+
return CORRECT_BORDER_PATTERNS['style="border: 1px solid var(--border)"'];
|
|
274
|
+
}
|
|
275
|
+
if (violation.includes('border: 2px solid var(--border)')) {
|
|
276
|
+
return CORRECT_BORDER_PATTERNS['style="border: 2px solid var(--border)"'];
|
|
277
|
+
}
|
|
278
|
+
if (violation.includes('border: 1px dashed var(--border)')) {
|
|
279
|
+
return CORRECT_BORDER_PATTERNS['style="border: 1px dashed var(--border)"'];
|
|
280
|
+
}
|
|
281
|
+
if (violation.includes('border: 2px dashed var(--border)')) {
|
|
282
|
+
return CORRECT_BORDER_PATTERNS['style="border: 2px dashed var(--border)"'];
|
|
283
|
+
}
|
|
284
|
+
if (violation.includes('[style.border-top]')) {
|
|
285
|
+
return CORRECT_BORDER_PATTERNS['[style.border-top]="1px solid var(--border)"'];
|
|
286
|
+
}
|
|
287
|
+
if (violation.includes('[style.border-bottom]')) {
|
|
288
|
+
return CORRECT_BORDER_PATTERNS['[style.border-bottom]="1px solid var(--border)"'];
|
|
289
|
+
}
|
|
290
|
+
if (violation.includes('[style.border-left]')) {
|
|
291
|
+
return CORRECT_BORDER_PATTERNS['[style.border-left]="1px solid var(--border)"'];
|
|
292
|
+
}
|
|
293
|
+
if (violation.includes('[style.border-right]')) {
|
|
294
|
+
return CORRECT_BORDER_PATTERNS['[style.border-right]="1px solid var(--border)"'];
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// Extract the border classes from the class attribute
|
|
299
|
+
const classNameMatch = violation.match(/class="([^"]*)"/);
|
|
300
|
+
if (!classNameMatch) return CORRECT_BORDER_PATTERNS.default;
|
|
301
|
+
|
|
302
|
+
const classNames = classNameMatch[1];
|
|
303
|
+
|
|
304
|
+
// Map common patterns to our utility classes
|
|
305
|
+
if (classNames.includes('border border-border')) {
|
|
306
|
+
return CORRECT_BORDER_PATTERNS['border border-border'];
|
|
307
|
+
}
|
|
308
|
+
if (classNames.includes('border-2 border-border') || classNames.includes('border-2')) {
|
|
309
|
+
return CORRECT_BORDER_PATTERNS['border-2'];
|
|
310
|
+
}
|
|
311
|
+
if (classNames.includes('border-t border-border') || classNames.includes('border-t')) {
|
|
312
|
+
return CORRECT_BORDER_PATTERNS['border-t'];
|
|
313
|
+
}
|
|
314
|
+
if (classNames.includes('border-b border-border') || classNames.includes('border-b')) {
|
|
315
|
+
return CORRECT_BORDER_PATTERNS['border-b'];
|
|
316
|
+
}
|
|
317
|
+
if (classNames.includes('border-l border-border') || classNames.includes('border-l')) {
|
|
318
|
+
return CORRECT_BORDER_PATTERNS['border-l'];
|
|
319
|
+
}
|
|
320
|
+
if (classNames.includes('border-r border-border') || classNames.includes('border-r')) {
|
|
321
|
+
return CORRECT_BORDER_PATTERNS['border-r'];
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// Handle Tailwind color classes with our design system colors
|
|
325
|
+
if (classNames.includes('border border-red-500')) {
|
|
326
|
+
return CORRECT_BORDER_PATTERNS['border border-red-500'];
|
|
327
|
+
}
|
|
328
|
+
if (classNames.includes('border border-green-500')) {
|
|
329
|
+
return CORRECT_BORDER_PATTERNS['border border-green-500'];
|
|
330
|
+
}
|
|
331
|
+
if (classNames.includes('border border-yellow-500')) {
|
|
332
|
+
return CORRECT_BORDER_PATTERNS['border border-yellow-500'];
|
|
333
|
+
}
|
|
334
|
+
if (classNames.includes('border border-blue-500')) {
|
|
335
|
+
return CORRECT_BORDER_PATTERNS['border border-blue-500'];
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// Default suggestion based on violation type
|
|
339
|
+
switch (violationType) {
|
|
340
|
+
case 'tailwind-border-color':
|
|
341
|
+
return CORRECT_BORDER_PATTERNS['border'];
|
|
342
|
+
case 'inline-border-style':
|
|
343
|
+
return CORRECT_BORDER_PATTERNS['style="border: 1px solid var(--border)"'];
|
|
344
|
+
case 'inline-border-thick':
|
|
345
|
+
return CORRECT_BORDER_PATTERNS['style="border: 2px solid var(--border)"'];
|
|
346
|
+
default:
|
|
347
|
+
return CORRECT_BORDER_PATTERNS.default;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
// Run the check
|
|
352
|
+
findBorderViolations();
|