@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,164 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Master rule providing overview and references to all Modus Angular rules
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Modus Angular Rules - Master Reference
|
|
8
|
+
|
|
9
|
+
This master rule provides an overview of all available rules and serves as an entry point for understanding the Modus Angular development patterns.
|
|
10
|
+
|
|
11
|
+
## Rule Structure
|
|
12
|
+
|
|
13
|
+
This project uses a **short/full rule pattern**:
|
|
14
|
+
|
|
15
|
+
- **Short Rules** (`*-short.mdc`): Always applied, concise summaries
|
|
16
|
+
- **Full Rules** (`*.mdc`): Apply intelligently, detailed patterns
|
|
17
|
+
|
|
18
|
+
## Essential Rules (Always Applied)
|
|
19
|
+
|
|
20
|
+
These short rules are always included in chat context:
|
|
21
|
+
|
|
22
|
+
### Design System
|
|
23
|
+
|
|
24
|
+
- `modus-angular-design-system.mdc` - 9-color design system with Tailwind v4
|
|
25
|
+
- `modus-angular-color-usage-short.mdc` - Color system usage
|
|
26
|
+
- `modus-angular-icons-short.mdc` - Icon usage patterns
|
|
27
|
+
- `modus-angular-semantic-html-short.mdc` - HTML element usage (div-only)
|
|
28
|
+
- `modus-angular-border-usage-short.mdc` - Border utilities
|
|
29
|
+
- `modus-angular-opacity-utilities-short.mdc` - Opacity utilities
|
|
30
|
+
- `modus-angular-tailwind-usage-short.mdc` - Tailwind v4 integration
|
|
31
|
+
- `modus-angular-themes-short.mdc` - Theme implementation
|
|
32
|
+
|
|
33
|
+
### Component Patterns
|
|
34
|
+
|
|
35
|
+
- `modus-angular-button-group-usage-short.mdc` - Button group patterns
|
|
36
|
+
- `modus-angular-checkbox-value-inversion-short.mdc` - Checkbox bug handling
|
|
37
|
+
- `modus-angular-modal-usage-short.mdc` - Modal patterns
|
|
38
|
+
- `modus-angular-accordion-state-management-short.mdc` - Accordion state
|
|
39
|
+
- `modus-angular-select-vs-dropdown-menu-short.mdc` - Dropdown patterns
|
|
40
|
+
- `modus-angular-navbar-usage-short.mdc` - Navbar integration
|
|
41
|
+
- `modus-angular-side-navigation-usage-short.mdc` - Side navigation patterns
|
|
42
|
+
- `modus-angular-table-usage-short.mdc` - Table patterns
|
|
43
|
+
- `modus-angular-utility-panel-usage-short.mdc` - Utility panel patterns
|
|
44
|
+
|
|
45
|
+
### Angular Integration
|
|
46
|
+
|
|
47
|
+
- `modus-angular-integration-short.mdc` - Angular + Modus integration
|
|
48
|
+
- `modus-angular-essentials.mdc` - Comprehensive essentials
|
|
49
|
+
- `modus-angular-best-practices.mdc` - Best practices
|
|
50
|
+
- `modus-angular-forms-validation-short.mdc` - Forms and validation
|
|
51
|
+
|
|
52
|
+
### Workflow
|
|
53
|
+
|
|
54
|
+
- `modus-angular-development-workflow-short.mdc` - Linting and quality checks
|
|
55
|
+
- `modus-angular-chrome-devtools-testing-short.mdc` - Browser testing
|
|
56
|
+
- `modus-angular-implementation-guides-short.mdc` - Feature development guides
|
|
57
|
+
|
|
58
|
+
## Detailed Rules (Apply Intelligently)
|
|
59
|
+
|
|
60
|
+
For detailed patterns, examples, and advanced techniques, reference these full rules:
|
|
61
|
+
|
|
62
|
+
### Component-Specific Details
|
|
63
|
+
|
|
64
|
+
- `modus-angular-button-group-usage.mdc` - Complete button group patterns
|
|
65
|
+
- `modus-angular-checkbox-value-inversion.mdc` - Checkbox bug details
|
|
66
|
+
- `modus-angular-modal-usage.mdc` - Complete modal implementation
|
|
67
|
+
- `modus-angular-accordion-state-management.mdc` - Accordion state management
|
|
68
|
+
- `modus-angular-select-vs-dropdown-menu.mdc` - Dropdown comparison
|
|
69
|
+
- `modus-angular-navbar-usage.mdc` - Navbar integration details
|
|
70
|
+
- `modus-angular-side-navigation-usage.mdc` - Side navigation details
|
|
71
|
+
- `modus-angular-table-usage.mdc` - Table implementation
|
|
72
|
+
- `modus-angular-utility-panel-usage.mdc` - Utility panel details
|
|
73
|
+
- `modus-angular-divider-usage.mdc` - Divider patterns
|
|
74
|
+
|
|
75
|
+
### Design System Details
|
|
76
|
+
|
|
77
|
+
- `modus-angular-color-usage.mdc` - Complete color system guide
|
|
78
|
+
- `modus-angular-icons.mdc` - Complete icon usage guide
|
|
79
|
+
- `modus-angular-semantic-html.mdc` - HTML patterns guide
|
|
80
|
+
- `modus-angular-border-usage.mdc` - Complete border utilities guide
|
|
81
|
+
- `modus-angular-opacity-utilities.mdc` - Complete opacity utilities guide
|
|
82
|
+
- `modus-angular-tailwind-usage.mdc` - Complete Tailwind integration guide
|
|
83
|
+
- `modus-angular-themes.mdc` - Complete theme implementation guide
|
|
84
|
+
|
|
85
|
+
### Workflow & Testing
|
|
86
|
+
|
|
87
|
+
- `modus-angular-development-workflow.mdc` - Complete workflow guide
|
|
88
|
+
- `modus-angular-chrome-devtools-testing.mdc` - Complete testing guide
|
|
89
|
+
- `modus-angular-implementation-guides.mdc` - Complete implementation guide structure
|
|
90
|
+
|
|
91
|
+
### UX Foundations
|
|
92
|
+
|
|
93
|
+
- `ux/ux-ui-foundations.mdc` - UI/UX foundations with Modus 2 + Tailwind
|
|
94
|
+
- `ux/gestalt-laws-detailed.mdc` - Gestalt Laws implementation guide
|
|
95
|
+
|
|
96
|
+
## Quick Start Guide
|
|
97
|
+
|
|
98
|
+
### Working with Components
|
|
99
|
+
|
|
100
|
+
1. Check component-specific short rule (always applied)
|
|
101
|
+
2. For details, reference full rule: `@modus-angular-[component]`
|
|
102
|
+
3. Use wrapper components, not web components directly
|
|
103
|
+
|
|
104
|
+
### Working with Design System
|
|
105
|
+
|
|
106
|
+
1. Short rules provide essential patterns (always applied)
|
|
107
|
+
2. For details, reference full rule: `@modus-angular-[topic]`
|
|
108
|
+
3. For icon names: `@modus-angular-icons`
|
|
109
|
+
|
|
110
|
+
### Common Patterns
|
|
111
|
+
|
|
112
|
+
**Colors**: Always use design system colors (`bg-background`, `text-foreground`, etc.)
|
|
113
|
+
|
|
114
|
+
**Icons**: Use Modus icons exclusively (`<i class="modus-icons">icon_name</i>`)
|
|
115
|
+
- Icon names use underscores: `save_disk`, `arrow_left`
|
|
116
|
+
|
|
117
|
+
**Components**: Use wrapper components (`<modus-button>` not `<modus-wc-button>`)
|
|
118
|
+
|
|
119
|
+
**State Management**: Let Modus components manage their own state where appropriate
|
|
120
|
+
|
|
121
|
+
**Angular Patterns**:
|
|
122
|
+
- Use `input()`, `output()`, `signal()`, `computed()`
|
|
123
|
+
- Use `inject()` for dependency injection
|
|
124
|
+
- Use `ChangeDetectionStrategy.OnPush`
|
|
125
|
+
- Use `@if`, `@for`, `@switch` control flow
|
|
126
|
+
|
|
127
|
+
## Rule Application
|
|
128
|
+
|
|
129
|
+
Rules are applied automatically based on:
|
|
130
|
+
|
|
131
|
+
1. **Always Apply**: Short rules with `alwaysApply: true`
|
|
132
|
+
2. **File Patterns**: Rules activate when working with matching files (`globs`)
|
|
133
|
+
3. **Context Matching**: Agent applies rules based on description relevance
|
|
134
|
+
4. **Manual Reference**: Use `@rule-name` to explicitly reference a rule
|
|
135
|
+
|
|
136
|
+
## Best Practices
|
|
137
|
+
|
|
138
|
+
When working with Modus Angular:
|
|
139
|
+
|
|
140
|
+
1. **Follow Short Rules**: Essential patterns are always available
|
|
141
|
+
2. **Reference Full Rules**: Use `@rule-name` for detailed guidance
|
|
142
|
+
3. **Run Linting**: Use `npm run lint:all` before committing
|
|
143
|
+
4. **Test All Themes**: Verify components work in all 6 themes
|
|
144
|
+
5. **Use DevTools**: Test implementations in browser
|
|
145
|
+
|
|
146
|
+
## Getting Help
|
|
147
|
+
|
|
148
|
+
- **Rule Documentation**: See rules in `.cursor/rules/` directory
|
|
149
|
+
- **Project Guide**: See `CLAUDE.md` in project root
|
|
150
|
+
- **Component Reference**: See `modus-angular-essentials.mdc`
|
|
151
|
+
|
|
152
|
+
## Rule Maintenance
|
|
153
|
+
|
|
154
|
+
When adding or updating rules:
|
|
155
|
+
|
|
156
|
+
1. Create/update short rule with `alwaysApply: true`
|
|
157
|
+
2. Create/update full rule with `alwaysApply: false`
|
|
158
|
+
3. Ensure descriptions match between short and full
|
|
159
|
+
4. Add appropriate `globs:` patterns
|
|
160
|
+
5. Use consistent naming: `modus-angular-[topic].mdc`
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
**Note**: This master rule is always applied to provide rule overview. For specific guidance, reference the appropriate detailed rule using `@rule-name` syntax.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Comprehensive rules for opening and closing Modus modals in Angular
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Modus Modal Usage - Short
|
|
8
|
+
|
|
9
|
+
Critical implementation patterns for Modus modals in Angular.
|
|
10
|
+
|
|
11
|
+
## Key Rules
|
|
12
|
+
|
|
13
|
+
- **Use document.getElementById for modal access** - Get the dialog element by ID
|
|
14
|
+
- **Type-safe access** - Cast to `HTMLDialogElement | null`
|
|
15
|
+
- **Check method existence** - `typeof dialog.showModal === 'function'`
|
|
16
|
+
- **Use native dialog API** - `dialog.showModal()` and `dialog.close()`
|
|
17
|
+
- **Never use querySelector with web component selectors**
|
|
18
|
+
- **Use descriptive, kebab-case modal IDs**
|
|
19
|
+
|
|
20
|
+
## Correct Pattern
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
openModal(): void {
|
|
24
|
+
const dialog = document.getElementById('modal-id') as HTMLDialogElement | null;
|
|
25
|
+
if (dialog && typeof dialog.showModal === 'function') {
|
|
26
|
+
dialog.showModal();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
closeModal(): void {
|
|
31
|
+
const dialog = document.getElementById('modal-id') as HTMLDialogElement | null;
|
|
32
|
+
if (dialog && typeof dialog.close === 'function') {
|
|
33
|
+
dialog.close();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```html
|
|
39
|
+
<modus-button (buttonClick)="openModal()">Open</modus-button>
|
|
40
|
+
<modus-modal modalId="modal-id" [showClose]="true">
|
|
41
|
+
<h3 slot="header">Title</h3>
|
|
42
|
+
<div slot="content">Content</div>
|
|
43
|
+
<div slot="footer">
|
|
44
|
+
<modus-button (buttonClick)="closeModal()">Close</modus-button>
|
|
45
|
+
</div>
|
|
46
|
+
</modus-modal>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Reference
|
|
50
|
+
|
|
51
|
+
For detailed modal patterns and advanced usage, fetch the full rule: `modus-angular-modal-usage`
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Comprehensive rules for opening and closing Modus modals in Angular
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Modal Usage Rules
|
|
8
|
+
|
|
9
|
+
Comprehensive rules for opening and closing Modus modals in Angular applications.
|
|
10
|
+
|
|
11
|
+
## CORRECT: How to Open/Close Modals
|
|
12
|
+
|
|
13
|
+
### Pattern: Use `document.getElementById()` with HTMLDialogElement
|
|
14
|
+
|
|
15
|
+
**The Modus modal component creates an HTML `<dialog>` element with the `modalId` as its `id` attribute. Always use the native HTMLDialogElement API to open/close modals.**
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
openModal(): void {
|
|
19
|
+
const dialog = document.getElementById('modal-id') as HTMLDialogElement | null;
|
|
20
|
+
if (dialog && typeof dialog.showModal === 'function') {
|
|
21
|
+
dialog.showModal();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
closeModal(): void {
|
|
26
|
+
const dialog = document.getElementById('modal-id') as HTMLDialogElement | null;
|
|
27
|
+
if (dialog && typeof dialog.close === 'function') {
|
|
28
|
+
dialog.close();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Template Usage
|
|
34
|
+
|
|
35
|
+
```html
|
|
36
|
+
<modus-button color="primary" (buttonClick)="openModal()">Open Modal</modus-button>
|
|
37
|
+
<modus-modal modalId="modal-id" [showClose]="true">
|
|
38
|
+
<h3 slot="header">Modal Title</h3>
|
|
39
|
+
<div slot="content">
|
|
40
|
+
<p>Modal content here</p>
|
|
41
|
+
</div>
|
|
42
|
+
<div slot="footer">
|
|
43
|
+
<modus-button color="secondary" (buttonClick)="closeModal()">Close</modus-button>
|
|
44
|
+
</div>
|
|
45
|
+
</modus-modal>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## WRONG: Common Mistakes
|
|
49
|
+
|
|
50
|
+
### DON'T Use `querySelector` with Web Component Selector
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
// WRONG: This doesn't work
|
|
54
|
+
openModal(): void {
|
|
55
|
+
const modal = document.querySelector('modus-wc-modal[modal-id="modal-id"]') as any;
|
|
56
|
+
if (modal) {
|
|
57
|
+
modal.open(); // Web component doesn't have an open() method
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### DON'T Use Template References on Wrapper Component
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
// WRONG: Can't directly call methods on Angular wrapper
|
|
66
|
+
@ViewChild(ModusModalComponent) modal!: ModusModalComponent;
|
|
67
|
+
|
|
68
|
+
openModal(): void {
|
|
69
|
+
this.modal.open(); // Method doesn't exist
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Best Practices
|
|
74
|
+
|
|
75
|
+
### 1. Always Use `getElementById` with ModalId
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
openModal(modalId: string): void {
|
|
79
|
+
const dialog = document.getElementById(modalId) as HTMLDialogElement | null;
|
|
80
|
+
if (dialog && typeof dialog.showModal === 'function') {
|
|
81
|
+
dialog.showModal();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 2. Always Check for Method Existence
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
const dialog = document.getElementById('modal-id') as HTMLDialogElement | null;
|
|
90
|
+
if (dialog && typeof dialog.showModal === 'function') {
|
|
91
|
+
dialog.showModal();
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 3. Use Consistent ModalId Naming
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
<modus-modal modalId="basic-modal" />
|
|
99
|
+
<modus-modal modalId="confirmation-modal" />
|
|
100
|
+
<modus-modal modalId="fullscreen-modal" />
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Key Rules Summary
|
|
104
|
+
|
|
105
|
+
1. **ALWAYS use `document.getElementById(modalId)`** - The modalId is used as the dialog element's id
|
|
106
|
+
2. **ALWAYS cast to `HTMLDialogElement | null`** - Type-safe casting
|
|
107
|
+
3. **ALWAYS check for method existence** - `typeof dialog.showModal === 'function'`
|
|
108
|
+
4. **ALWAYS use `dialog.showModal()`** - Native HTMLDialogElement API
|
|
109
|
+
5. **ALWAYS use `dialog.close()`** - Native HTMLDialogElement API
|
|
110
|
+
6. **NEVER use `querySelector` with web component selectors**
|
|
111
|
+
7. **NEVER try to call `open()` on the web component**
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
**Remember**: Modals use the native HTML `<dialog>` element API. Always use `document.getElementById(modalId)` to find the dialog element, then call `showModal()` or `close()` on it.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Comprehensive guide for using the Modus Navbar component in Angular
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Modus Navbar Usage - Short
|
|
8
|
+
|
|
9
|
+
Critical patterns for Modus Navbar component in Angular.
|
|
10
|
+
|
|
11
|
+
## Key Rules
|
|
12
|
+
|
|
13
|
+
- **Set both `search` and `searchInput` in visibility** - Required for search expansion
|
|
14
|
+
- **Use signals for navbar state** - Track searchInputOpen, menuOpen states
|
|
15
|
+
- **Two-way bind search and menu states** - Bind property and handle event
|
|
16
|
+
- **Explicitly set button visibility** - Buttons default to hidden except user
|
|
17
|
+
- **Always provide userCard** - Required input for navbar
|
|
18
|
+
- **Handle correct event types** - Clicks = `MouseEvent | KeyboardEvent`, state changes = `boolean`
|
|
19
|
+
|
|
20
|
+
## Search Expansion Pattern
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
<modus-navbar
|
|
24
|
+
[userCard]="userCard"
|
|
25
|
+
[visibility]="{ user: true, search: true, searchInput: true }"
|
|
26
|
+
[searchInputOpen]="searchInputOpen()"
|
|
27
|
+
(searchClick)="searchInputOpen.set(!searchInputOpen())"
|
|
28
|
+
(searchInputOpenChange)="searchInputOpen.set($event)"
|
|
29
|
+
/>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## State Management
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
readonly searchInputOpen = signal<boolean>(false);
|
|
36
|
+
readonly mainMenuOpen = signal<boolean>(false);
|
|
37
|
+
|
|
38
|
+
handleSearchClick(event: MouseEvent | KeyboardEvent): void {
|
|
39
|
+
this.searchInputOpen.set(!this.searchInputOpen());
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
handleMainMenuOpenChange(event: boolean): void {
|
|
43
|
+
this.mainMenuOpen.set(event);
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Reference
|
|
48
|
+
|
|
49
|
+
For detailed patterns and event handling, fetch the full rule: `modus-angular-navbar-usage`
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Comprehensive guide for using the Modus Navbar component in Angular
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Navbar Usage Rules
|
|
8
|
+
|
|
9
|
+
Comprehensive guide for using the Modus Navbar component in Angular, covering search expansion, button visibility, event handling, and state management.
|
|
10
|
+
|
|
11
|
+
## CRITICAL: Search Input Expansion
|
|
12
|
+
|
|
13
|
+
### DO: Set Both `search` and `searchInput` in Visibility
|
|
14
|
+
|
|
15
|
+
**For search to expand, you MUST set both visibility flags:**
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
<modus-navbar
|
|
19
|
+
[userCard]="userCard"
|
|
20
|
+
[visibility]="{ user: true, search: true, searchInput: true }"
|
|
21
|
+
[searchInputOpen]="searchInputOpen()"
|
|
22
|
+
(searchClick)="handleSearchClick($event)"
|
|
23
|
+
(searchInputOpenChange)="handleSearchInputOpenChange($event)"
|
|
24
|
+
/>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### DO: Two-Way Bind Search State
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
readonly searchInputOpen = signal<boolean>(false);
|
|
31
|
+
|
|
32
|
+
handleSearchClick(event: MouseEvent | KeyboardEvent): void {
|
|
33
|
+
this.searchInputOpen.set(!this.searchInputOpen());
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
handleSearchInputOpenChange(event: boolean): void {
|
|
37
|
+
if (this.searchInputOpen() !== event) {
|
|
38
|
+
this.searchInputOpen.set(event);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Button Visibility Patterns
|
|
44
|
+
|
|
45
|
+
### DO: Set Visibility for Each Button
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
<modus-navbar
|
|
49
|
+
[userCard]="userCard"
|
|
50
|
+
[visibility]="{
|
|
51
|
+
user: true,
|
|
52
|
+
search: true,
|
|
53
|
+
searchInput: true,
|
|
54
|
+
help: true,
|
|
55
|
+
apps: true,
|
|
56
|
+
notifications: true,
|
|
57
|
+
mainMenu: true
|
|
58
|
+
}"
|
|
59
|
+
/>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Default visibility settings:**
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
readonly visibility = input<INavbarVisibility | undefined>({
|
|
66
|
+
ai: false,
|
|
67
|
+
apps: false,
|
|
68
|
+
help: false,
|
|
69
|
+
mainMenu: false,
|
|
70
|
+
notifications: false,
|
|
71
|
+
search: false,
|
|
72
|
+
searchInput: false,
|
|
73
|
+
user: true,
|
|
74
|
+
});
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Event Handling Patterns
|
|
78
|
+
|
|
79
|
+
### DO: Handle Events with Correct Types
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
handleSearchClick(event: MouseEvent | KeyboardEvent): void {
|
|
83
|
+
this.searchInputOpen.set(!this.searchInputOpen());
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
handleMainMenuOpenChange(event: boolean): void {
|
|
87
|
+
this.mainMenuOpen.set(event);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
handleSearchChange(event: { value: string }): void {
|
|
91
|
+
this.lastSearch.set(event.value);
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## State Management Patterns
|
|
96
|
+
|
|
97
|
+
### DO: Use Signals for Navbar State
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
export class NavbarComponent {
|
|
101
|
+
readonly searchInputOpen = signal<boolean>(false);
|
|
102
|
+
readonly lastSearch = signal<string>('');
|
|
103
|
+
readonly mainMenuOpen = signal<boolean>(false);
|
|
104
|
+
readonly notificationsMenuOpen = signal<boolean>(false);
|
|
105
|
+
readonly appsMenuOpen = signal<boolean>(false);
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### DO: Two-Way Bind Menu States
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
<modus-navbar
|
|
113
|
+
[mainMenuOpen]="mainMenuOpen()"
|
|
114
|
+
[notificationsMenuOpen]="notificationsMenuOpen()"
|
|
115
|
+
[appsMenuOpen]="appsMenuOpen()"
|
|
116
|
+
(mainMenuOpenChange)="handleMainMenuOpenChange($event)"
|
|
117
|
+
(notificationsMenuOpenChange)="handleNotificationsMenuOpenChange($event)"
|
|
118
|
+
(appsMenuOpenChange)="handleAppsMenuOpenChange($event)"
|
|
119
|
+
/>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## User Card Requirements
|
|
123
|
+
|
|
124
|
+
### DO: Always Provide User Card
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
readonly userCard: INavbarUserCard = {
|
|
128
|
+
name: 'John Doe',
|
|
129
|
+
email: 'john.doe@example.com',
|
|
130
|
+
avatarSrc: 'https://via.placeholder.com/64',
|
|
131
|
+
avatarAlt: 'User avatar',
|
|
132
|
+
};
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Key Takeaways
|
|
136
|
+
|
|
137
|
+
1. **Search Expansion**: Requires both `search: true` AND `searchInput: true` in visibility
|
|
138
|
+
2. **State Management**: Always use signals for navbar state
|
|
139
|
+
3. **Two-Way Binding**: Bind both property and event for search and menu states
|
|
140
|
+
4. **Button Visibility**: Explicitly set all buttons you want visible in `visibility` object
|
|
141
|
+
5. **Event Types**: Button clicks = `MouseEvent | KeyboardEvent`, state changes = `boolean`
|
|
142
|
+
6. **User Card**: Always required - provide `userCard` input
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
**Remember**: The navbar component requires explicit configuration for all features. Nothing works by default except the user button!
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Strict prohibition of emojis in Angular + Vite application
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Modus No Emojis - Angular
|
|
8
|
+
|
|
9
|
+
Strict prohibition of emojis in Angular + Vite application.
|
|
10
|
+
|
|
11
|
+
## Key Rules
|
|
12
|
+
|
|
13
|
+
- **Never use emojis in code** - No emoji characters in any TypeScript, HTML, or CSS files
|
|
14
|
+
- **Never use emojis in components** - No emoji in templates, content, or UI elements
|
|
15
|
+
- **Never use emojis in content** - No emoji in text, descriptions, or user-facing content
|
|
16
|
+
- **Use Modus icons instead** - Replace emojis with appropriate Modus icons
|
|
17
|
+
- **Use Unicode characters for symbols** - Use proper Unicode symbols when needed
|
|
18
|
+
- **Check all content** - Verify no emojis in comments, strings, or documentation
|
|
19
|
+
- **Use linting to catch violations** - Automated checks for emoji usage
|
|
20
|
+
|
|
21
|
+
## Correct Alternatives
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<!-- WRONG: Emoji usage -->
|
|
25
|
+
<div class="text-foreground">Hello World! [wave emoji]</div>
|
|
26
|
+
<div class="text-success">Success! [checkmark emoji]</div>
|
|
27
|
+
<div class="text-warning">Warning! [warning emoji]</div>
|
|
28
|
+
|
|
29
|
+
<!-- CORRECT: Use Modus icons -->
|
|
30
|
+
<div class="text-foreground">
|
|
31
|
+
Hello World! <i class="modus-icons">hand</i>
|
|
32
|
+
</div>
|
|
33
|
+
<div class="text-success">
|
|
34
|
+
Success! <i class="modus-icons">check_circle</i>
|
|
35
|
+
</div>
|
|
36
|
+
<div class="text-warning">
|
|
37
|
+
Warning! <i class="modus-icons">warning</i>
|
|
38
|
+
</div>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Icon Alternatives for Common Emojis
|
|
42
|
+
|
|
43
|
+
| Emoji | Modus Icon Alternative |
|
|
44
|
+
|-------|----------------------|
|
|
45
|
+
| checkmark | `check_circle` |
|
|
46
|
+
| x mark | `cancel_circle` |
|
|
47
|
+
| warning | `warning` |
|
|
48
|
+
| info | `info` |
|
|
49
|
+
| person | `person` |
|
|
50
|
+
| email | `email` |
|
|
51
|
+
| phone | `phone_mobile` |
|
|
52
|
+
| search | `search` |
|
|
53
|
+
| settings | `settings` |
|
|
54
|
+
| home | `home` |
|
|
55
|
+
| folder | `folder_closed` |
|
|
56
|
+
| file | `file` |
|
|
57
|
+
| save | `save_disk` |
|
|
58
|
+
| delete | `delete` |
|
|
59
|
+
|
|
60
|
+
## Validation
|
|
61
|
+
|
|
62
|
+
Run linting to catch emoji violations:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
npm run lint:all
|
|
66
|
+
```
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Essential opacity utilities for Modus Design System colors in Angular + Vite
|
|
3
|
+
globs: ["**/*.ts", "**/*.html", "**/*.scss", "**/*.css"]
|
|
4
|
+
alwaysApply: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Modus Opacity Utilities - Short
|
|
8
|
+
|
|
9
|
+
Essential opacity utilities for Modus Design System colors in Angular + Vite.
|
|
10
|
+
|
|
11
|
+
## Key Rules
|
|
12
|
+
|
|
13
|
+
- **Use custom opacity utilities, not Tailwind /80 syntax** - `text-foreground-80` not `text-foreground/80`
|
|
14
|
+
- **CSS variables don't work with Tailwind opacity modifiers** - Tailwind needs actual color values
|
|
15
|
+
- **Use color-mix() for opacity variants** - Modern CSS function for proper opacity calculation
|
|
16
|
+
- **All utilities defined in styles.css** - No Tailwind config changes needed
|
|
17
|
+
- **Respects theme switching** - Works in all 6 Modus themes
|
|
18
|
+
- **Use semantic color names** - `foreground`, `primary`, `destructive`, etc.
|
|
19
|
+
|
|
20
|
+
## Available Utilities
|
|
21
|
+
|
|
22
|
+
### Opacity Levels
|
|
23
|
+
|
|
24
|
+
- **80%** - `text-foreground-80`, `bg-primary-80`, `border-destructive-80`
|
|
25
|
+
- **60%** - `text-foreground-60`, `bg-primary-60`, `border-destructive-60`
|
|
26
|
+
- **40%** - `text-foreground-40`, `bg-primary-40`, `border-destructive-40`
|
|
27
|
+
- **20%** - `text-foreground-20`, `bg-primary-20`, `border-destructive-20`
|
|
28
|
+
|
|
29
|
+
## Usage Examples
|
|
30
|
+
|
|
31
|
+
```html
|
|
32
|
+
<!-- WRONG: Tailwind syntax doesn't work -->
|
|
33
|
+
<div class="text-foreground/80">Text with 80% opacity</div>
|
|
34
|
+
|
|
35
|
+
<!-- CORRECT: Use custom opacity utilities -->
|
|
36
|
+
<div class="text-foreground-80">Text with 80% opacity</div>
|
|
37
|
+
<div class="bg-primary-60">Primary background with 60% opacity</div>
|
|
38
|
+
<div class="border border-destructive-40">Destructive border with 40% opacity</div>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Reference
|
|
42
|
+
|
|
43
|
+
For detailed implementation patterns and advanced techniques, fetch the full rule: `modus-angular-opacity-utilities`
|