@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,427 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Use div elements exclusively to avoid Tailwind CSS conflicts
|
|
3
|
+
globs: ["**/*.tsx"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Semantic HTML Usage in React + Vite
|
|
8
|
+
|
|
9
|
+
## 🚨 **CRITICAL: Use Div Elements Only**
|
|
10
|
+
|
|
11
|
+
**MANDATORY**: This React + Vite application uses **div elements exclusively** for all content (except `<i>` for icons) to avoid conflicts with Tailwind CSS default browser styles.
|
|
12
|
+
|
|
13
|
+
**Rule**: Use `div` elements with Tailwind classes instead of semantic HTML elements.
|
|
14
|
+
|
|
15
|
+
## ❌ **FORBIDDEN: Semantic HTML Elements**
|
|
16
|
+
|
|
17
|
+
### ❌ **Never Use Semantic HTML Elements**
|
|
18
|
+
|
|
19
|
+
```tsx
|
|
20
|
+
// ❌ WRONG: Semantic HTML elements
|
|
21
|
+
<h1 className="text-4xl font-bold">Title</h1>
|
|
22
|
+
<h2 className="text-3xl font-semibold">Subtitle</h2>
|
|
23
|
+
<h3 className="text-2xl font-medium">Heading</h3>
|
|
24
|
+
<p className="text-base">Paragraph text</p>
|
|
25
|
+
<section className="mb-8 p-4">Content section</section>
|
|
26
|
+
<header className="bg-background">Header content</header>
|
|
27
|
+
<footer className="bg-muted">Footer content</footer>
|
|
28
|
+
<nav className="flex space-x-4">Navigation</nav>
|
|
29
|
+
<main className="flex-1">Main content</main>
|
|
30
|
+
<aside className="w-64">Sidebar</aside>
|
|
31
|
+
<article className="prose">Article content</article>
|
|
32
|
+
<span className="text-sm">Inline text</span>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### ❌ **Never Use Form Elements**
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
// ❌ WRONG: Form elements
|
|
39
|
+
<form className="space-y-4">
|
|
40
|
+
<label className="block">Label</label>
|
|
41
|
+
<input type="text" className="w-full" />
|
|
42
|
+
<button type="submit">Submit</button>
|
|
43
|
+
</form>
|
|
44
|
+
|
|
45
|
+
// ❌ WRONG: List elements
|
|
46
|
+
<ul className="space-y-2">
|
|
47
|
+
<li>List item 1</li>
|
|
48
|
+
<li>List item 2</li>
|
|
49
|
+
</ul>
|
|
50
|
+
|
|
51
|
+
<ol className="space-y-2">
|
|
52
|
+
<li>Ordered item 1</li>
|
|
53
|
+
<li>Ordered item 2</li>
|
|
54
|
+
</ol>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## ✅ **CORRECT: Div Elements with Tailwind**
|
|
58
|
+
|
|
59
|
+
### ✅ **Use Div Elements for All Content**
|
|
60
|
+
|
|
61
|
+
```tsx
|
|
62
|
+
// ✅ CORRECT: Div elements with Tailwind classes
|
|
63
|
+
<div className="text-4xl font-bold">Title</div>
|
|
64
|
+
<div className="text-3xl font-semibold">Subtitle</div>
|
|
65
|
+
<div className="text-2xl font-medium">Heading</div>
|
|
66
|
+
<div className="text-base">Paragraph text</div>
|
|
67
|
+
<div className="mb-8 p-4">Content section</div>
|
|
68
|
+
<div className="bg-background">Header content</div>
|
|
69
|
+
<div className="bg-muted">Footer content</div>
|
|
70
|
+
<div className="flex space-x-4">Navigation</div>
|
|
71
|
+
<div className="flex-1">Main content</div>
|
|
72
|
+
<div className="w-64">Sidebar</div>
|
|
73
|
+
<div className="prose">Article content</div>
|
|
74
|
+
<div className="text-sm">Inline text</div>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### ✅ **Form Elements as Divs**
|
|
78
|
+
|
|
79
|
+
```tsx
|
|
80
|
+
// ✅ CORRECT: Form elements as divs
|
|
81
|
+
<div className="space-y-4">
|
|
82
|
+
<div className="block">Label</div>
|
|
83
|
+
<input type="text" className="w-full" />
|
|
84
|
+
<button type="submit">Submit</button>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
// ✅ CORRECT: List elements as divs
|
|
88
|
+
<div className="space-y-2">
|
|
89
|
+
<div>List item 1</div>
|
|
90
|
+
<div>List item 2</div>
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
<div className="space-y-2">
|
|
94
|
+
<div>Ordered item 1</div>
|
|
95
|
+
<div>Ordered item 2</div>
|
|
96
|
+
</div>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## 🎯 **Component Patterns**
|
|
100
|
+
|
|
101
|
+
### ✅ **Page Layout with Divs**
|
|
102
|
+
|
|
103
|
+
```tsx
|
|
104
|
+
// ✅ CORRECT: Page layout using divs
|
|
105
|
+
function PageLayout({ children }: { children: ReactNode }) {
|
|
106
|
+
return (
|
|
107
|
+
<div className="min-h-screen flex flex-col">
|
|
108
|
+
<div className="bg-background border-b border-border">
|
|
109
|
+
<div className="container mx-auto px-4 py-4">
|
|
110
|
+
<div className="text-2xl font-bold text-foreground">App Title</div>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
<div className="flex-1">{children}</div>
|
|
115
|
+
|
|
116
|
+
<div className="bg-muted border-t border-border">
|
|
117
|
+
<div className="container mx-auto px-4 py-4">
|
|
118
|
+
<div className="text-sm text-muted-foreground">Footer content</div>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### ✅ **Card Component with Divs**
|
|
127
|
+
|
|
128
|
+
```tsx
|
|
129
|
+
// ✅ CORRECT: Card component using divs
|
|
130
|
+
function Card({ title, content, children }: CardProps) {
|
|
131
|
+
return (
|
|
132
|
+
<div className="bg-card text-card-foreground border border-border rounded-lg p-6">
|
|
133
|
+
<div className="text-xl font-semibold mb-4">{title}</div>
|
|
134
|
+
<div className="text-base mb-4">{content}</div>
|
|
135
|
+
{children}
|
|
136
|
+
</div>
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Usage
|
|
141
|
+
<Card title="Card Title" content="Card content">
|
|
142
|
+
<div className="text-sm text-muted-foreground">Additional content</div>
|
|
143
|
+
</Card>;
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### ✅ **Navigation with Divs**
|
|
147
|
+
|
|
148
|
+
```tsx
|
|
149
|
+
// ✅ CORRECT: Navigation using divs
|
|
150
|
+
function Navigation() {
|
|
151
|
+
const navItems = [
|
|
152
|
+
{ label: "Home", path: "/" },
|
|
153
|
+
{ label: "About", path: "/about" },
|
|
154
|
+
{ label: "Contact", path: "/contact" },
|
|
155
|
+
];
|
|
156
|
+
|
|
157
|
+
return (
|
|
158
|
+
<div className="bg-background border-b border-border">
|
|
159
|
+
<div className="container mx-auto px-4 py-4">
|
|
160
|
+
<div className="flex space-x-6">
|
|
161
|
+
{navItems.map((item) => (
|
|
162
|
+
<a
|
|
163
|
+
key={item.path}
|
|
164
|
+
href={item.path}
|
|
165
|
+
className="text-foreground hover:text-primary transition-colors"
|
|
166
|
+
>
|
|
167
|
+
{item.label}
|
|
168
|
+
</a>
|
|
169
|
+
))}
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
</div>
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### ✅ **Form with Divs**
|
|
178
|
+
|
|
179
|
+
```tsx
|
|
180
|
+
// ✅ CORRECT: Form using divs
|
|
181
|
+
function ContactForm() {
|
|
182
|
+
const [formData, setFormData] = useState({
|
|
183
|
+
name: "",
|
|
184
|
+
email: "",
|
|
185
|
+
message: "",
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
const handleSubmit = (e: React.FormEvent) => {
|
|
189
|
+
e.preventDefault();
|
|
190
|
+
console.log("Form data:", formData);
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
return (
|
|
194
|
+
<div className="max-w-md mx-auto p-6 bg-card border border-border rounded-lg">
|
|
195
|
+
<div className="text-2xl font-bold mb-6 text-card-foreground">
|
|
196
|
+
Contact Us
|
|
197
|
+
</div>
|
|
198
|
+
|
|
199
|
+
<div onSubmit={handleSubmit}>
|
|
200
|
+
<div className="mb-4">
|
|
201
|
+
<div className="block text-sm font-medium text-card-foreground mb-2">
|
|
202
|
+
Name
|
|
203
|
+
</div>
|
|
204
|
+
<input
|
|
205
|
+
type="text"
|
|
206
|
+
value={formData.name}
|
|
207
|
+
onChange={(e) =>
|
|
208
|
+
setFormData((prev) => ({ ...prev, name: e.target.value }))
|
|
209
|
+
}
|
|
210
|
+
className="w-full px-3 py-2 border border-input rounded bg-input text-foreground"
|
|
211
|
+
required
|
|
212
|
+
/>
|
|
213
|
+
</div>
|
|
214
|
+
|
|
215
|
+
<div className="mb-4">
|
|
216
|
+
<div className="block text-sm font-medium text-card-foreground mb-2">
|
|
217
|
+
Email
|
|
218
|
+
</div>
|
|
219
|
+
<input
|
|
220
|
+
type="email"
|
|
221
|
+
value={formData.email}
|
|
222
|
+
onChange={(e) =>
|
|
223
|
+
setFormData((prev) => ({ ...prev, email: e.target.value }))
|
|
224
|
+
}
|
|
225
|
+
className="w-full px-3 py-2 border border-input rounded bg-input text-foreground"
|
|
226
|
+
required
|
|
227
|
+
/>
|
|
228
|
+
</div>
|
|
229
|
+
|
|
230
|
+
<div className="mb-6">
|
|
231
|
+
<div className="block text-sm font-medium text-card-foreground mb-2">
|
|
232
|
+
Message
|
|
233
|
+
</div>
|
|
234
|
+
<textarea
|
|
235
|
+
value={formData.message}
|
|
236
|
+
onChange={(e) =>
|
|
237
|
+
setFormData((prev) => ({ ...prev, message: e.target.value }))
|
|
238
|
+
}
|
|
239
|
+
className="w-full px-3 py-2 border border-input rounded bg-input text-foreground h-32"
|
|
240
|
+
required
|
|
241
|
+
/>
|
|
242
|
+
</div>
|
|
243
|
+
|
|
244
|
+
<button
|
|
245
|
+
type="submit"
|
|
246
|
+
className="w-full bg-primary text-primary-foreground py-2 px-4 rounded hover:bg-primary/90"
|
|
247
|
+
>
|
|
248
|
+
Send Message
|
|
249
|
+
</button>
|
|
250
|
+
</div>
|
|
251
|
+
</div>
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## 🎨 **Advanced Patterns**
|
|
257
|
+
|
|
258
|
+
### ✅ **Typography with Divs**
|
|
259
|
+
|
|
260
|
+
```tsx
|
|
261
|
+
// ✅ CORRECT: Typography using divs
|
|
262
|
+
function Typography() {
|
|
263
|
+
return (
|
|
264
|
+
<div className="space-y-4">
|
|
265
|
+
<div className="text-4xl font-bold text-foreground">Heading 1</div>
|
|
266
|
+
<div className="text-3xl font-semibold text-foreground">Heading 2</div>
|
|
267
|
+
<div className="text-2xl font-medium text-foreground">Heading 3</div>
|
|
268
|
+
<div className="text-xl font-medium text-foreground">Heading 4</div>
|
|
269
|
+
<div className="text-lg font-medium text-foreground">Heading 5</div>
|
|
270
|
+
<div className="text-base font-medium text-foreground">Heading 6</div>
|
|
271
|
+
|
|
272
|
+
<div className="text-base text-foreground">Regular paragraph text</div>
|
|
273
|
+
<div className="text-sm text-muted-foreground">Small text</div>
|
|
274
|
+
<div className="text-xs text-muted-foreground">Extra small text</div>
|
|
275
|
+
</div>
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### ✅ **List with Divs**
|
|
281
|
+
|
|
282
|
+
```tsx
|
|
283
|
+
// ✅ CORRECT: List using divs
|
|
284
|
+
function ListComponent() {
|
|
285
|
+
const items = ["First item", "Second item", "Third item"];
|
|
286
|
+
|
|
287
|
+
return (
|
|
288
|
+
<div className="space-y-2">
|
|
289
|
+
{items.map((item, index) => (
|
|
290
|
+
<div key={index} className="flex items-center space-x-2">
|
|
291
|
+
<div className="w-2 h-2 bg-primary rounded-full"></div>
|
|
292
|
+
<div className="text-foreground">{item}</div>
|
|
293
|
+
</div>
|
|
294
|
+
))}
|
|
295
|
+
</div>
|
|
296
|
+
);
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### ✅ **Table with Divs**
|
|
301
|
+
|
|
302
|
+
```tsx
|
|
303
|
+
// ✅ CORRECT: Table using divs
|
|
304
|
+
function TableComponent() {
|
|
305
|
+
const data = [
|
|
306
|
+
{ name: "John", age: 30, city: "New York" },
|
|
307
|
+
{ name: "Jane", age: 25, city: "Los Angeles" },
|
|
308
|
+
{ name: "Bob", age: 35, city: "Chicago" },
|
|
309
|
+
];
|
|
310
|
+
|
|
311
|
+
return (
|
|
312
|
+
<div className="bg-card border border-border rounded-lg overflow-hidden">
|
|
313
|
+
<div className="bg-muted px-4 py-2 border-b border-border">
|
|
314
|
+
<div className="grid grid-cols-3 gap-4 font-medium text-foreground">
|
|
315
|
+
<div>Name</div>
|
|
316
|
+
<div>Age</div>
|
|
317
|
+
<div>City</div>
|
|
318
|
+
</div>
|
|
319
|
+
</div>
|
|
320
|
+
|
|
321
|
+
<div className="divide-y divide-border">
|
|
322
|
+
{data.map((row, index) => (
|
|
323
|
+
<div key={index} className="px-4 py-2">
|
|
324
|
+
<div className="grid grid-cols-3 gap-4 text-foreground">
|
|
325
|
+
<div>{row.name}</div>
|
|
326
|
+
<div>{row.age}</div>
|
|
327
|
+
<div>{row.city}</div>
|
|
328
|
+
</div>
|
|
329
|
+
</div>
|
|
330
|
+
))}
|
|
331
|
+
</div>
|
|
332
|
+
</div>
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
## 🚫 **Common Anti-Patterns**
|
|
338
|
+
|
|
339
|
+
### ❌ **Don't Mix Semantic and Div Elements**
|
|
340
|
+
|
|
341
|
+
```tsx
|
|
342
|
+
// ❌ WRONG: Mixing semantic and div elements
|
|
343
|
+
<div className="container">
|
|
344
|
+
<h1 className="text-2xl">Title</h1> {/* ❌ Semantic element */}
|
|
345
|
+
<div className="text-base">Content</div> {/* ✅ Div element */}
|
|
346
|
+
<p className="text-sm">Description</p> {/* ❌ Semantic element */}
|
|
347
|
+
</div>
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### ❌ **Don't Use Semantic Elements for Styling**
|
|
351
|
+
|
|
352
|
+
```tsx
|
|
353
|
+
// ❌ WRONG: Using semantic elements for styling
|
|
354
|
+
<h1 className="text-sm text-muted-foreground">Small text</h1> {/* ❌ Wrong element */}
|
|
355
|
+
<p className="text-4xl font-bold">Large title</p> {/* ❌ Wrong element */}
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### ❌ **Don't Use Form Elements**
|
|
359
|
+
|
|
360
|
+
```tsx
|
|
361
|
+
// ❌ WRONG: Using form elements
|
|
362
|
+
<form className="space-y-4">
|
|
363
|
+
<label className="block">Label</label> {/* ❌ Form element */}
|
|
364
|
+
<input type="text" /> {/* ❌ Form element */}
|
|
365
|
+
<button type="submit">Submit</button> {/* ❌ Form element */}
|
|
366
|
+
</form>
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## 🔧 **Validation**
|
|
370
|
+
|
|
371
|
+
### ✅ **Linting Commands**
|
|
372
|
+
|
|
373
|
+
```bash
|
|
374
|
+
# Check for semantic HTML violations
|
|
375
|
+
npm run lint:semantic
|
|
376
|
+
|
|
377
|
+
# Check for inline styles
|
|
378
|
+
npm run lint:styles
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### ✅ **Semantic HTML Test**
|
|
382
|
+
|
|
383
|
+
```tsx
|
|
384
|
+
// ✅ CORRECT: Test semantic HTML compliance
|
|
385
|
+
function SemanticHTMLTest() {
|
|
386
|
+
return (
|
|
387
|
+
<div className="space-y-4">
|
|
388
|
+
<div className="text-2xl font-bold text-foreground">Test Page</div>
|
|
389
|
+
|
|
390
|
+
<div className="bg-card p-4 border border-border rounded">
|
|
391
|
+
<div className="text-lg font-medium text-card-foreground mb-2">
|
|
392
|
+
Card Title
|
|
393
|
+
</div>
|
|
394
|
+
<div className="text-base text-card-foreground">Card content</div>
|
|
395
|
+
</div>
|
|
396
|
+
|
|
397
|
+
<div className="space-y-2">
|
|
398
|
+
<div className="text-sm font-medium text-foreground">List Items:</div>
|
|
399
|
+
<div className="text-base text-foreground">• Item 1</div>
|
|
400
|
+
<div className="text-base text-foreground">• Item 2</div>
|
|
401
|
+
<div className="text-base text-foreground">• Item 3</div>
|
|
402
|
+
</div>
|
|
403
|
+
</div>
|
|
404
|
+
);
|
|
405
|
+
}
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
## 🎯 **Key Takeaways**
|
|
409
|
+
|
|
410
|
+
1. **Use Div Elements Only**: Never use semantic HTML elements
|
|
411
|
+
2. **Tailwind for Styling**: Use Tailwind classes for all styling
|
|
412
|
+
3. **Consistent Structure**: Maintain consistent div-based structure
|
|
413
|
+
4. **Accessibility**: Ensure proper accessibility with div elements
|
|
414
|
+
5. **Form Handling**: Use div elements for form structure
|
|
415
|
+
|
|
416
|
+
## 🔍 **Semantic HTML Compliance Checklist**
|
|
417
|
+
|
|
418
|
+
- [ ] ✅ **No Semantic Elements**: No `h1`, `h2`, `p`, `section`, `header`, `footer`, `nav`, `main`, `aside`, `article`, `span`
|
|
419
|
+
- [ ] ✅ **Div Elements Only**: All content uses `div` elements
|
|
420
|
+
- [ ] ✅ **Icon Exception**: Only `<i>` elements allowed for icons
|
|
421
|
+
- [ ] ✅ **Tailwind Styling**: All styling through Tailwind classes
|
|
422
|
+
- [ ] ✅ **Consistent Structure**: Consistent div-based component structure
|
|
423
|
+
- [ ] ✅ **Accessibility**: Proper accessibility with div elements
|
|
424
|
+
|
|
425
|
+
---
|
|
426
|
+
|
|
427
|
+
**Remember: This React + Vite application uses div elements exclusively for all content (except `<i>` for icons) to avoid conflicts with Tailwind CSS default browser styles. Never use semantic HTML elements like `h1`, `p`, `section`, `header`, `footer`, `nav`, `main`, `aside`, `article`, or `span`.**
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Tailwind CSS v3 with Modus Design System integration
|
|
3
|
+
globs: ["**/*.tsx", "**/*.css"]
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Modus Tailwind Usage - Short
|
|
8
|
+
|
|
9
|
+
Tailwind CSS v3 with Modus Design System integration.
|
|
10
|
+
|
|
11
|
+
## Key Rules
|
|
12
|
+
|
|
13
|
+
- **Tailwind v3 with design system** - Use Tailwind v3 with Modus Design System integration
|
|
14
|
+
- **No generic Tailwind colors** - Never use `bg-blue-500`, `text-gray-600`, etc.
|
|
15
|
+
- **Use design system colors** - `bg-background`, `text-foreground`, `bg-primary`, etc.
|
|
16
|
+
- **Custom utilities for borders** - Use `border-default`, `border-success`, `border-warning`, etc.
|
|
17
|
+
- **Elevation utilities** - Use `elevation-1`, `elevation-2`, `elevation-3` for shadows
|
|
18
|
+
- **Proper CSS import order** - Modus CSS before Tailwind CSS
|
|
19
|
+
- **Test in all themes** - Ensure Tailwind classes work in all 6 themes
|
|
20
|
+
|
|
21
|
+
## Reference
|
|
22
|
+
|
|
23
|
+
For detailed Tailwind integration, custom utilities, and advanced styling patterns, fetch the full rule: `modus-tailwind-usage-react`
|