@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,215 @@
|
|
|
1
|
+
import { Component, signal } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { DemoPageComponent } from '../shared/demo-page.component';
|
|
4
|
+
import { DemoExampleComponent } from '../shared/demo-example.component';
|
|
5
|
+
import { ModusButtonGroupComponent } from '../../components/modus-button-group.component';
|
|
6
|
+
import { ModusButtonComponent } from '../../components/modus-button.component';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Demo page showcasing the Modus Button Group component.
|
|
10
|
+
*/
|
|
11
|
+
@Component({
|
|
12
|
+
selector: 'app-button-group-demo-page',
|
|
13
|
+
standalone: true,
|
|
14
|
+
imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusButtonGroupComponent, ModusButtonComponent],
|
|
15
|
+
template: `
|
|
16
|
+
<demo-page
|
|
17
|
+
title="Modus Button Group"
|
|
18
|
+
description="Button groups organize multiple buttons together with support for single or multiple selection modes. Use them for toolbar actions, segmented controls, and toggle groups."
|
|
19
|
+
>
|
|
20
|
+
<demo-example title="Button Variants" description="Different visual styles for button groups.">
|
|
21
|
+
<div class="flex flex-col gap-4">
|
|
22
|
+
<div class="flex flex-col gap-2">
|
|
23
|
+
<div class="text-sm text-muted-foreground">Outlined (default)</div>
|
|
24
|
+
<modus-button-group variant="outlined" color="primary">
|
|
25
|
+
<modus-button variant="outlined" color="primary">Button 1</modus-button>
|
|
26
|
+
<modus-button variant="outlined" color="primary">Button 2</modus-button>
|
|
27
|
+
<modus-button variant="outlined" color="primary">Button 3</modus-button>
|
|
28
|
+
</modus-button-group>
|
|
29
|
+
</div>
|
|
30
|
+
<div class="flex flex-col gap-2">
|
|
31
|
+
<div class="text-sm text-muted-foreground">Filled</div>
|
|
32
|
+
<modus-button-group variant="filled" color="primary">
|
|
33
|
+
<modus-button variant="filled" color="primary">Button 1</modus-button>
|
|
34
|
+
<modus-button variant="filled" color="primary">Button 2</modus-button>
|
|
35
|
+
<modus-button variant="filled" color="primary">Button 3</modus-button>
|
|
36
|
+
</modus-button-group>
|
|
37
|
+
</div>
|
|
38
|
+
<div class="flex flex-col gap-2">
|
|
39
|
+
<div class="text-sm text-muted-foreground">Borderless</div>
|
|
40
|
+
<modus-button-group variant="borderless" color="primary">
|
|
41
|
+
<modus-button variant="borderless" color="primary">Button 1</modus-button>
|
|
42
|
+
<modus-button variant="borderless" color="primary">Button 2</modus-button>
|
|
43
|
+
<modus-button variant="borderless" color="primary">Button 3</modus-button>
|
|
44
|
+
</modus-button-group>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</demo-example>
|
|
48
|
+
|
|
49
|
+
<demo-example title="Button Colors" description="Apply consistent colors across all buttons in the group.">
|
|
50
|
+
<div class="flex flex-wrap gap-4">
|
|
51
|
+
<modus-button-group variant="outlined" color="primary">
|
|
52
|
+
<modus-button variant="outlined" color="primary">Primary</modus-button>
|
|
53
|
+
<modus-button variant="outlined" color="primary">Buttons</modus-button>
|
|
54
|
+
</modus-button-group>
|
|
55
|
+
<modus-button-group variant="outlined" color="secondary">
|
|
56
|
+
<modus-button variant="outlined" color="secondary">Secondary</modus-button>
|
|
57
|
+
<modus-button variant="outlined" color="secondary">Buttons</modus-button>
|
|
58
|
+
</modus-button-group>
|
|
59
|
+
<modus-button-group variant="outlined" color="tertiary">
|
|
60
|
+
<modus-button variant="outlined" color="tertiary">Tertiary</modus-button>
|
|
61
|
+
<modus-button variant="outlined" color="tertiary">Buttons</modus-button>
|
|
62
|
+
</modus-button-group>
|
|
63
|
+
<modus-button-group variant="outlined" color="warning">
|
|
64
|
+
<modus-button variant="outlined" color="warning">Warning</modus-button>
|
|
65
|
+
<modus-button variant="outlined" color="warning">Buttons</modus-button>
|
|
66
|
+
</modus-button-group>
|
|
67
|
+
<modus-button-group variant="outlined" color="danger">
|
|
68
|
+
<modus-button variant="outlined" color="danger">Danger</modus-button>
|
|
69
|
+
<modus-button variant="outlined" color="danger">Buttons</modus-button>
|
|
70
|
+
</modus-button-group>
|
|
71
|
+
</div>
|
|
72
|
+
</demo-example>
|
|
73
|
+
|
|
74
|
+
<demo-example title="Orientation" description="Button groups can be arranged horizontally or vertically.">
|
|
75
|
+
<div class="flex flex-wrap gap-8">
|
|
76
|
+
<div class="flex flex-col gap-2">
|
|
77
|
+
<div class="text-sm text-muted-foreground">Horizontal (default)</div>
|
|
78
|
+
<modus-button-group orientation="horizontal" variant="outlined">
|
|
79
|
+
<modus-button variant="outlined">Option 1</modus-button>
|
|
80
|
+
<modus-button variant="outlined">Option 2</modus-button>
|
|
81
|
+
<modus-button variant="outlined">Option 3</modus-button>
|
|
82
|
+
</modus-button-group>
|
|
83
|
+
</div>
|
|
84
|
+
<div class="flex flex-col gap-2">
|
|
85
|
+
<div class="text-sm text-muted-foreground">Vertical</div>
|
|
86
|
+
<modus-button-group orientation="vertical" variant="outlined">
|
|
87
|
+
<modus-button variant="outlined">Option 1</modus-button>
|
|
88
|
+
<modus-button variant="outlined">Option 2</modus-button>
|
|
89
|
+
<modus-button variant="outlined">Option 3</modus-button>
|
|
90
|
+
</modus-button-group>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
</demo-example>
|
|
94
|
+
|
|
95
|
+
<demo-example title="Single Selection (Radio-like)" description="Only one button can be selected at a time.">
|
|
96
|
+
<modus-button-group selectionType="single" variant="outlined" color="primary">
|
|
97
|
+
<modus-button variant="outlined" color="primary" [pressed]="true">Option A</modus-button>
|
|
98
|
+
<modus-button variant="outlined" color="primary">Option B</modus-button>
|
|
99
|
+
<modus-button variant="outlined" color="primary">Option C</modus-button>
|
|
100
|
+
</modus-button-group>
|
|
101
|
+
</demo-example>
|
|
102
|
+
|
|
103
|
+
<demo-example
|
|
104
|
+
title="Multiple Selection (Checkbox-like)"
|
|
105
|
+
description="Multiple buttons can be selected simultaneously."
|
|
106
|
+
>
|
|
107
|
+
<div class="flex flex-col gap-4">
|
|
108
|
+
<modus-button-group
|
|
109
|
+
selectionType="multiple"
|
|
110
|
+
variant="outlined"
|
|
111
|
+
color="primary"
|
|
112
|
+
(buttonSelectionChange)="handleSelectionChange($event)"
|
|
113
|
+
>
|
|
114
|
+
<modus-button variant="outlined" color="primary" [pressed]="true">Bold</modus-button>
|
|
115
|
+
<modus-button variant="outlined" color="primary">Italic</modus-button>
|
|
116
|
+
<modus-button variant="outlined" color="primary" [pressed]="true">Underline</modus-button>
|
|
117
|
+
</modus-button-group>
|
|
118
|
+
<div class="text-sm text-muted-foreground">
|
|
119
|
+
Selected: {{ selectedButtons().length > 0 ? selectedButtons().join(', ') : 'None' }}
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
</demo-example>
|
|
123
|
+
|
|
124
|
+
<demo-example title="Icon-Only Buttons" description="Compact toolbar actions with icon-only buttons.">
|
|
125
|
+
<div class="flex flex-col gap-4">
|
|
126
|
+
<div class="flex flex-col gap-2">
|
|
127
|
+
<div class="text-sm text-muted-foreground">Text Alignment</div>
|
|
128
|
+
<modus-button-group selectionType="single" variant="outlined" color="primary">
|
|
129
|
+
<modus-button
|
|
130
|
+
icon="align_left"
|
|
131
|
+
iconPosition="only"
|
|
132
|
+
ariaLabel="Align left"
|
|
133
|
+
variant="outlined"
|
|
134
|
+
color="primary"
|
|
135
|
+
[pressed]="true"
|
|
136
|
+
/>
|
|
137
|
+
<modus-button
|
|
138
|
+
icon="text_centered"
|
|
139
|
+
iconPosition="only"
|
|
140
|
+
ariaLabel="Align center"
|
|
141
|
+
variant="outlined"
|
|
142
|
+
color="primary"
|
|
143
|
+
/>
|
|
144
|
+
<modus-button
|
|
145
|
+
icon="align_right"
|
|
146
|
+
iconPosition="only"
|
|
147
|
+
ariaLabel="Align right"
|
|
148
|
+
variant="outlined"
|
|
149
|
+
color="primary"
|
|
150
|
+
/>
|
|
151
|
+
</modus-button-group>
|
|
152
|
+
</div>
|
|
153
|
+
<div class="flex flex-col gap-2">
|
|
154
|
+
<div class="text-sm text-muted-foreground">Text Formatting</div>
|
|
155
|
+
<modus-button-group selectionType="multiple" variant="outlined" color="secondary">
|
|
156
|
+
<modus-button
|
|
157
|
+
icon="text_bold"
|
|
158
|
+
iconPosition="only"
|
|
159
|
+
ariaLabel="Bold"
|
|
160
|
+
variant="outlined"
|
|
161
|
+
color="secondary"
|
|
162
|
+
/>
|
|
163
|
+
<modus-button
|
|
164
|
+
icon="text_italic"
|
|
165
|
+
iconPosition="only"
|
|
166
|
+
ariaLabel="Italic"
|
|
167
|
+
variant="outlined"
|
|
168
|
+
color="secondary"
|
|
169
|
+
/>
|
|
170
|
+
<modus-button
|
|
171
|
+
icon="text_underlined"
|
|
172
|
+
iconPosition="only"
|
|
173
|
+
ariaLabel="Underline"
|
|
174
|
+
variant="outlined"
|
|
175
|
+
color="secondary"
|
|
176
|
+
/>
|
|
177
|
+
</modus-button-group>
|
|
178
|
+
</div>
|
|
179
|
+
</div>
|
|
180
|
+
</demo-example>
|
|
181
|
+
|
|
182
|
+
<demo-example title="Disabled State" description="Disable all buttons in the group at once.">
|
|
183
|
+
<modus-button-group variant="outlined" color="primary" [disabled]="true">
|
|
184
|
+
<modus-button variant="outlined" color="primary">Disabled</modus-button>
|
|
185
|
+
<modus-button variant="outlined" color="primary">Button</modus-button>
|
|
186
|
+
<modus-button variant="outlined" color="primary">Group</modus-button>
|
|
187
|
+
</modus-button-group>
|
|
188
|
+
</demo-example>
|
|
189
|
+
|
|
190
|
+
<demo-example title="Mixed Content" description="Button groups can contain buttons with text and icons.">
|
|
191
|
+
<modus-button-group variant="outlined" color="primary">
|
|
192
|
+
<modus-button icon="save_disk" iconPosition="left" variant="outlined" color="primary">
|
|
193
|
+
Save
|
|
194
|
+
</modus-button>
|
|
195
|
+
<modus-button icon="download" iconPosition="left" variant="outlined" color="primary">
|
|
196
|
+
Download
|
|
197
|
+
</modus-button>
|
|
198
|
+
<modus-button icon="share" iconPosition="left" variant="outlined" color="primary">
|
|
199
|
+
Share
|
|
200
|
+
</modus-button>
|
|
201
|
+
</modus-button-group>
|
|
202
|
+
</demo-example>
|
|
203
|
+
</demo-page>
|
|
204
|
+
`,
|
|
205
|
+
})
|
|
206
|
+
export class ButtonGroupDemoPageComponent {
|
|
207
|
+
readonly selectedButtons = signal<string[]>([]);
|
|
208
|
+
|
|
209
|
+
handleSelectionChange(event: { selectedButtons: HTMLElement[] }): void {
|
|
210
|
+
const values = event.selectedButtons
|
|
211
|
+
.map((button) => button.textContent?.trim())
|
|
212
|
+
.filter((value): value is string => Boolean(value));
|
|
213
|
+
this.selectedButtons.set(values);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { DemoPageComponent } from '../shared/demo-page.component';
|
|
4
|
+
import { DemoExampleComponent } from '../shared/demo-example.component';
|
|
5
|
+
import { ModusCardComponent } from '../../components/modus-card.component';
|
|
6
|
+
import { ModusButtonComponent } from '../../components/modus-button.component';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Demo page showcasing the Modus Card component.
|
|
10
|
+
*
|
|
11
|
+
* Demonstrates card features including:
|
|
12
|
+
* - Vertical and horizontal layouts
|
|
13
|
+
* - Cards with header images
|
|
14
|
+
* - Background figure cards with overlaid text
|
|
15
|
+
* - Cards with footer slots
|
|
16
|
+
* - Compact padding for dense layouts
|
|
17
|
+
*/
|
|
18
|
+
@Component({
|
|
19
|
+
selector: 'app-card-demo-page',
|
|
20
|
+
standalone: true,
|
|
21
|
+
imports: [
|
|
22
|
+
CommonModule,
|
|
23
|
+
DemoPageComponent,
|
|
24
|
+
DemoExampleComponent,
|
|
25
|
+
ModusCardComponent,
|
|
26
|
+
ModusButtonComponent,
|
|
27
|
+
],
|
|
28
|
+
template: `
|
|
29
|
+
<demo-page
|
|
30
|
+
title="Modus Card"
|
|
31
|
+
description="Cards group related information into a contained surface. Keep each card focused on a single concept and align supporting actions to the bottom."
|
|
32
|
+
>
|
|
33
|
+
<demo-example
|
|
34
|
+
title="Project summary"
|
|
35
|
+
description="Vertical cards are ideal for key metrics or spotlighting a single project."
|
|
36
|
+
>
|
|
37
|
+
<modus-card>
|
|
38
|
+
<div slot="title" class="text-xl font-semibold text-foreground">Atlas Renewal</div>
|
|
39
|
+
<div slot="subtitle" class="text-sm text-foreground-80">Updated 2 hours ago</div>
|
|
40
|
+
<div slot="actions" class="flex gap-2">
|
|
41
|
+
<modus-button color="primary" size="sm">Open project</modus-button>
|
|
42
|
+
<modus-button color="tertiary" size="sm">Share</modus-button>
|
|
43
|
+
</div>
|
|
44
|
+
<div class="flex flex-col gap-3 text-sm text-foreground-80">
|
|
45
|
+
<div>Next milestone: Validate customer insights</div>
|
|
46
|
+
<div>Owner: Priya Malhotra</div>
|
|
47
|
+
<div>Team: Research, Field Ops</div>
|
|
48
|
+
</div>
|
|
49
|
+
</modus-card>
|
|
50
|
+
</demo-example>
|
|
51
|
+
|
|
52
|
+
<demo-example
|
|
53
|
+
title="Horizontal layout"
|
|
54
|
+
description="Use horizontal cards when imagery or a quick status pairs with copy."
|
|
55
|
+
>
|
|
56
|
+
<modus-card [layout]="'horizontal'" [padding]="'compact'" [bordered]="true">
|
|
57
|
+
<div slot="title" class="text-lg font-medium text-foreground">Field kit</div>
|
|
58
|
+
<div slot="subtitle" class="text-sm text-foreground-80">
|
|
59
|
+
Inventory: 18 units available
|
|
60
|
+
</div>
|
|
61
|
+
<div slot="actions">
|
|
62
|
+
<modus-button color="primary" size="sm">Reserve</modus-button>
|
|
63
|
+
</div>
|
|
64
|
+
<div class="text-sm text-foreground-80">
|
|
65
|
+
Includes GPS, survey equipment, and safety checklist. Recommended for teams working on
|
|
66
|
+
remote installs.
|
|
67
|
+
</div>
|
|
68
|
+
</modus-card>
|
|
69
|
+
</demo-example>
|
|
70
|
+
|
|
71
|
+
<demo-example
|
|
72
|
+
title="Card with Header Image"
|
|
73
|
+
description="Add an image or figure in the header slot to provide visual context."
|
|
74
|
+
>
|
|
75
|
+
<modus-card [layout]="'horizontal'" [bordered]="true">
|
|
76
|
+
<figure slot="header" class="w-full md:w-48 h-48 overflow-hidden">
|
|
77
|
+
<img
|
|
78
|
+
src="https://i.pravatar.cc/300?img=12"
|
|
79
|
+
alt="User avatar"
|
|
80
|
+
class="w-full h-full object-cover"
|
|
81
|
+
/>
|
|
82
|
+
</figure>
|
|
83
|
+
<div slot="title" class="text-lg font-medium text-foreground">Team Member</div>
|
|
84
|
+
<div slot="subtitle" class="text-sm text-foreground-80">Senior Developer</div>
|
|
85
|
+
<div slot="actions">
|
|
86
|
+
<modus-button color="primary" size="sm">Contact</modus-button>
|
|
87
|
+
</div>
|
|
88
|
+
<div class="text-sm text-foreground-80">
|
|
89
|
+
Specializes in frontend architecture and design systems. Available for new projects
|
|
90
|
+
starting next quarter.
|
|
91
|
+
</div>
|
|
92
|
+
</modus-card>
|
|
93
|
+
</demo-example>
|
|
94
|
+
|
|
95
|
+
<demo-example
|
|
96
|
+
title="Background Figure Card"
|
|
97
|
+
description="Use background-figure to stretch header images across the entire card with overlaid text."
|
|
98
|
+
>
|
|
99
|
+
<modus-card [backgroundFigure]="true">
|
|
100
|
+
<figure slot="header" class="w-full h-64 overflow-hidden">
|
|
101
|
+
<img
|
|
102
|
+
src="https://picsum.photos/id/1045/600/400"
|
|
103
|
+
alt="Scenic view"
|
|
104
|
+
class="w-full h-full object-cover"
|
|
105
|
+
/>
|
|
106
|
+
</figure>
|
|
107
|
+
<div
|
|
108
|
+
slot="title"
|
|
109
|
+
class="text-2xl font-semibold text-white [text-shadow:1px_1px_2px_rgba(0,0,0,0.8)]"
|
|
110
|
+
>
|
|
111
|
+
Featured Project
|
|
112
|
+
</div>
|
|
113
|
+
<div
|
|
114
|
+
slot="subtitle"
|
|
115
|
+
class="text-base text-white/80 [text-shadow:1px_1px_2px_rgba(0,0,0,0.8)]"
|
|
116
|
+
>
|
|
117
|
+
Launching Q2 2024
|
|
118
|
+
</div>
|
|
119
|
+
<div slot="actions">
|
|
120
|
+
<modus-button color="primary" size="sm">Learn More</modus-button>
|
|
121
|
+
</div>
|
|
122
|
+
<div
|
|
123
|
+
class="text-base text-white/80 [text-shadow:1px_1px_2px_rgba(0,0,0,0.8)]"
|
|
124
|
+
>
|
|
125
|
+
This project showcases innovative design patterns and modern user experiences. Join us
|
|
126
|
+
for the launch event.
|
|
127
|
+
</div>
|
|
128
|
+
</modus-card>
|
|
129
|
+
</demo-example>
|
|
130
|
+
|
|
131
|
+
<demo-example
|
|
132
|
+
title="Card with Footer"
|
|
133
|
+
description="Use the footer slot for metadata, tags, or additional information outside the main content area."
|
|
134
|
+
>
|
|
135
|
+
<modus-card [bordered]="true">
|
|
136
|
+
<div slot="title" class="text-xl font-semibold text-foreground">Document Review</div>
|
|
137
|
+
<div slot="subtitle" class="text-sm text-foreground-80">Last updated: 3 days ago</div>
|
|
138
|
+
<div slot="actions">
|
|
139
|
+
<modus-button color="tertiary" size="sm">Edit</modus-button>
|
|
140
|
+
</div>
|
|
141
|
+
<div class="text-sm text-foreground-80">
|
|
142
|
+
This document contains important project specifications and requirements. Please review
|
|
143
|
+
and provide feedback by end of week.
|
|
144
|
+
</div>
|
|
145
|
+
<div slot="footer" class="flex items-center justify-between pt-4 border-t border-border">
|
|
146
|
+
<div class="flex gap-2">
|
|
147
|
+
<span class="px-2 py-1 text-xs rounded bg-muted text-muted-foreground">Draft</span>
|
|
148
|
+
<span class="px-2 py-1 text-xs rounded bg-muted text-muted-foreground">Review</span>
|
|
149
|
+
</div>
|
|
150
|
+
<div class="text-xs text-muted-foreground">3 reviewers</div>
|
|
151
|
+
</div>
|
|
152
|
+
</modus-card>
|
|
153
|
+
</demo-example>
|
|
154
|
+
|
|
155
|
+
<demo-example
|
|
156
|
+
title="Compact Padding"
|
|
157
|
+
description="Use compact padding for dense dashboards or when space is limited."
|
|
158
|
+
>
|
|
159
|
+
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
|
|
160
|
+
<modus-card [padding]="'compact'" [bordered]="true">
|
|
161
|
+
<div slot="title" class="text-base font-medium text-foreground">Active Users</div>
|
|
162
|
+
<div class="text-2xl font-bold text-foreground">1,234</div>
|
|
163
|
+
<div class="text-xs text-muted-foreground">+12% from last month</div>
|
|
164
|
+
</modus-card>
|
|
165
|
+
<modus-card [padding]="'compact'" [bordered]="true">
|
|
166
|
+
<div slot="title" class="text-base font-medium text-foreground">Revenue</div>
|
|
167
|
+
<div class="text-2xl font-bold text-foreground">$45.6K</div>
|
|
168
|
+
<div class="text-xs text-muted-foreground">+8% from last month</div>
|
|
169
|
+
</modus-card>
|
|
170
|
+
<modus-card [padding]="'compact'" [bordered]="true">
|
|
171
|
+
<div slot="title" class="text-base font-medium text-foreground">Tasks</div>
|
|
172
|
+
<div class="text-2xl font-bold text-foreground">89</div>
|
|
173
|
+
<div class="text-xs text-muted-foreground">12 pending review</div>
|
|
174
|
+
</modus-card>
|
|
175
|
+
</div>
|
|
176
|
+
</demo-example>
|
|
177
|
+
</demo-page>
|
|
178
|
+
`,
|
|
179
|
+
})
|
|
180
|
+
export class CardDemoPageComponent {}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { DemoPageComponent } from '../shared/demo-page.component';
|
|
4
|
+
import { DemoExampleComponent } from '../shared/demo-example.component';
|
|
5
|
+
import { ModusCheckboxComponent } from '../../components/modus-checkbox.component';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Demo page showcasing the Modus Checkbox component.
|
|
9
|
+
*
|
|
10
|
+
* Demonstrates checkbox features including:
|
|
11
|
+
* - Checked and unchecked states
|
|
12
|
+
* - Indeterminate state
|
|
13
|
+
* - Different sizes (sm, md, lg)
|
|
14
|
+
* - Disabled state
|
|
15
|
+
* - Required checkbox
|
|
16
|
+
*/
|
|
17
|
+
@Component({
|
|
18
|
+
selector: 'app-checkbox-demo-page',
|
|
19
|
+
standalone: true,
|
|
20
|
+
imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusCheckboxComponent],
|
|
21
|
+
template: `
|
|
22
|
+
<demo-page
|
|
23
|
+
title="Modus Checkbox"
|
|
24
|
+
description="Checkboxes allow users to select one or more options from a list. Use checkboxes for multiple selections and when users need to toggle individual options."
|
|
25
|
+
>
|
|
26
|
+
<demo-example
|
|
27
|
+
title="Checkbox States"
|
|
28
|
+
description="Different checkbox states: unchecked, checked, and indeterminate."
|
|
29
|
+
>
|
|
30
|
+
<div class="flex flex-col gap-4">
|
|
31
|
+
<modus-checkbox label="Unchecked" [value]="false" />
|
|
32
|
+
<modus-checkbox label="Checked" [value]="true" />
|
|
33
|
+
<modus-checkbox label="Indeterminate" [indeterminate]="true" />
|
|
34
|
+
</div>
|
|
35
|
+
</demo-example>
|
|
36
|
+
|
|
37
|
+
<demo-example
|
|
38
|
+
title="Checkbox Sizes"
|
|
39
|
+
description="Different sizes for various contexts and visual hierarchy."
|
|
40
|
+
>
|
|
41
|
+
<div class="flex flex-col gap-4">
|
|
42
|
+
<modus-checkbox label="Small checkbox" size="sm" [value]="true" />
|
|
43
|
+
<modus-checkbox label="Medium checkbox (default)" size="md" [value]="true" />
|
|
44
|
+
<modus-checkbox label="Large checkbox" size="lg" [value]="true" />
|
|
45
|
+
</div>
|
|
46
|
+
</demo-example>
|
|
47
|
+
|
|
48
|
+
<demo-example
|
|
49
|
+
title="Disabled State"
|
|
50
|
+
description="Checkboxes in disabled state for unavailable options."
|
|
51
|
+
>
|
|
52
|
+
<div class="flex flex-col gap-4">
|
|
53
|
+
<modus-checkbox label="Disabled unchecked" [disabled]="true" [value]="false" />
|
|
54
|
+
<modus-checkbox label="Disabled checked" [disabled]="true" [value]="true" />
|
|
55
|
+
<modus-checkbox label="Disabled indeterminate" [disabled]="true" [indeterminate]="true" />
|
|
56
|
+
</div>
|
|
57
|
+
</demo-example>
|
|
58
|
+
|
|
59
|
+
<demo-example
|
|
60
|
+
title="Required Checkbox"
|
|
61
|
+
description="Mark checkboxes as required for form validation."
|
|
62
|
+
>
|
|
63
|
+
<div class="flex flex-col gap-4">
|
|
64
|
+
<modus-checkbox label="I agree to the terms (required)" [required]="true" />
|
|
65
|
+
<modus-checkbox label="Confirm email subscription (required)" [required]="true" />
|
|
66
|
+
</div>
|
|
67
|
+
</demo-example>
|
|
68
|
+
</demo-page>
|
|
69
|
+
`,
|
|
70
|
+
})
|
|
71
|
+
export class CheckboxDemoPageComponent {}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { Component, signal } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { DemoPageComponent } from '../shared/demo-page.component';
|
|
4
|
+
import { DemoExampleComponent } from '../shared/demo-example.component';
|
|
5
|
+
import { ModusChipComponent } from '../../components/modus-chip.component';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Demo page showcasing the Modus Chip component.
|
|
9
|
+
*
|
|
10
|
+
* Demonstrates chip features including:
|
|
11
|
+
* - Basic chips with labels
|
|
12
|
+
* - Chip variants (filled, outline)
|
|
13
|
+
* - Different sizes (sm, md, lg)
|
|
14
|
+
* - Active state for selections
|
|
15
|
+
* - Disabled state
|
|
16
|
+
* - Chips with remove button
|
|
17
|
+
* - Error state for validation
|
|
18
|
+
* - Interactive toggle/filter patterns
|
|
19
|
+
* - Deletable tag patterns
|
|
20
|
+
*/
|
|
21
|
+
@Component({
|
|
22
|
+
selector: 'app-chip-demo-page',
|
|
23
|
+
standalone: true,
|
|
24
|
+
imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusChipComponent],
|
|
25
|
+
template: `
|
|
26
|
+
<demo-page
|
|
27
|
+
title="Modus Chip"
|
|
28
|
+
description="Compact visual elements for tags, selections, or status pills. Chips support filled/outline variants, three sizes, active/error/disabled states, and optional remove buttons."
|
|
29
|
+
>
|
|
30
|
+
<demo-example
|
|
31
|
+
title="Removable Tags"
|
|
32
|
+
description="Chips with remove buttons for deletable items like tags, filters, or selections."
|
|
33
|
+
>
|
|
34
|
+
<div class="p-6 rounded-lg bg-card border-default">
|
|
35
|
+
<div class="text-base font-semibold mb-2 text-foreground">Applied Tags</div>
|
|
36
|
+
<div class="text-sm text-muted-foreground mb-4">Click the X to remove tags</div>
|
|
37
|
+
@if (activeTags().length > 0) {
|
|
38
|
+
<div class="flex flex-wrap gap-3">
|
|
39
|
+
@for (tag of activeTags(); track tag.id) {
|
|
40
|
+
<modus-chip
|
|
41
|
+
[label]="tag.label"
|
|
42
|
+
[showRemove]="true"
|
|
43
|
+
(chipRemove)="removeTag(tag.id)"
|
|
44
|
+
/>
|
|
45
|
+
}
|
|
46
|
+
</div>
|
|
47
|
+
} @else {
|
|
48
|
+
<div class="text-sm text-muted-foreground italic">No tags applied</div>
|
|
49
|
+
}
|
|
50
|
+
@if (removedTags().length > 0) {
|
|
51
|
+
<div class="mt-4 pt-4 border-top-default flex items-center gap-3">
|
|
52
|
+
<div class="text-sm text-muted-foreground">Removed:</div>
|
|
53
|
+
@for (tag of removedTags(); track tag.id) {
|
|
54
|
+
<modus-chip [label]="tag.label" [disabled]="true" size="sm" />
|
|
55
|
+
}
|
|
56
|
+
<button class="text-sm text-primary hover:underline ml-2" (click)="restoreTags()">
|
|
57
|
+
Restore all
|
|
58
|
+
</button>
|
|
59
|
+
</div>
|
|
60
|
+
}
|
|
61
|
+
</div>
|
|
62
|
+
</demo-example>
|
|
63
|
+
|
|
64
|
+
<demo-example
|
|
65
|
+
title="Chip Variants"
|
|
66
|
+
description="Two visual styles: filled (solid background) and outline (transparent with border)."
|
|
67
|
+
>
|
|
68
|
+
<div class="flex flex-col gap-6">
|
|
69
|
+
<div>
|
|
70
|
+
<div class="text-sm font-medium mb-3 text-muted-foreground">Filled (Default)</div>
|
|
71
|
+
<div class="flex flex-wrap gap-3">
|
|
72
|
+
<modus-chip label="Default" variant="filled" />
|
|
73
|
+
<modus-chip label="Active" variant="filled" [active]="true" />
|
|
74
|
+
<modus-chip label="Removable" variant="filled" [showRemove]="true" />
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
<div>
|
|
78
|
+
<div class="text-sm font-medium mb-3 text-muted-foreground">Outline</div>
|
|
79
|
+
<div class="flex flex-wrap gap-3">
|
|
80
|
+
<modus-chip label="Default" variant="outline" />
|
|
81
|
+
<modus-chip label="Active" variant="outline" [active]="true" />
|
|
82
|
+
<modus-chip label="Removable" variant="outline" [showRemove]="true" />
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
</demo-example>
|
|
87
|
+
|
|
88
|
+
<demo-example
|
|
89
|
+
title="Chip Sizes"
|
|
90
|
+
description="Three size options: sm (20px), md (24px), and lg (28px) for different contexts."
|
|
91
|
+
>
|
|
92
|
+
<div class="flex flex-wrap items-center gap-4">
|
|
93
|
+
<modus-chip label="Small" size="sm" />
|
|
94
|
+
<modus-chip label="Medium" size="md" />
|
|
95
|
+
<modus-chip label="Large" size="lg" />
|
|
96
|
+
</div>
|
|
97
|
+
<div class="flex flex-wrap items-center gap-4 mt-4">
|
|
98
|
+
<modus-chip label="Small" size="sm" variant="outline" [active]="true" />
|
|
99
|
+
<modus-chip label="Medium" size="md" variant="outline" [active]="true" />
|
|
100
|
+
<modus-chip label="Large" size="lg" variant="outline" [active]="true" />
|
|
101
|
+
</div>
|
|
102
|
+
</demo-example>
|
|
103
|
+
|
|
104
|
+
<demo-example
|
|
105
|
+
title="States"
|
|
106
|
+
description="Active state for selections, disabled state for unavailable options, and error state for validation."
|
|
107
|
+
>
|
|
108
|
+
<div class="flex flex-col gap-6">
|
|
109
|
+
<div>
|
|
110
|
+
<div class="text-sm font-medium mb-3 text-muted-foreground">Active State</div>
|
|
111
|
+
<div class="flex flex-wrap gap-3">
|
|
112
|
+
<modus-chip label="Selected" [active]="true" />
|
|
113
|
+
<modus-chip label="Pressed" [active]="true" variant="outline" />
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
<div>
|
|
117
|
+
<div class="text-sm font-medium mb-3 text-muted-foreground">Disabled State</div>
|
|
118
|
+
<div class="flex flex-wrap gap-3">
|
|
119
|
+
<modus-chip label="Disabled" [disabled]="true" />
|
|
120
|
+
<modus-chip label="Disabled Outline" [disabled]="true" variant="outline" />
|
|
121
|
+
<modus-chip label="Disabled Active" [disabled]="true" [active]="true" />
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
<div>
|
|
125
|
+
<div class="text-sm font-medium mb-3 text-muted-foreground">Error State</div>
|
|
126
|
+
<div class="flex flex-wrap gap-3">
|
|
127
|
+
<modus-chip label="Invalid" [hasError]="true" />
|
|
128
|
+
<modus-chip label="Error" [hasError]="true" variant="outline" />
|
|
129
|
+
<modus-chip label="Remove Error" [hasError]="true" [showRemove]="true" />
|
|
130
|
+
</div>
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
</demo-example>
|
|
134
|
+
|
|
135
|
+
<demo-example
|
|
136
|
+
title="Status Pills"
|
|
137
|
+
description="Use chips as status indicators with appropriate styling."
|
|
138
|
+
>
|
|
139
|
+
<div class="flex flex-col gap-4">
|
|
140
|
+
<div class="flex items-center gap-4">
|
|
141
|
+
<div class="w-24 text-sm text-muted-foreground">Order Status:</div>
|
|
142
|
+
<modus-chip label="Pending" variant="outline" />
|
|
143
|
+
</div>
|
|
144
|
+
<div class="flex items-center gap-4">
|
|
145
|
+
<div class="w-24 text-sm text-muted-foreground">Active:</div>
|
|
146
|
+
<modus-chip label="In Progress" [active]="true" />
|
|
147
|
+
</div>
|
|
148
|
+
<div class="flex items-center gap-4">
|
|
149
|
+
<div class="w-24 text-sm text-muted-foreground">Completed:</div>
|
|
150
|
+
<modus-chip label="Done" variant="filled" />
|
|
151
|
+
</div>
|
|
152
|
+
<div class="flex items-center gap-4">
|
|
153
|
+
<div class="w-24 text-sm text-muted-foreground">Error:</div>
|
|
154
|
+
<modus-chip label="Failed" [hasError]="true" />
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
</demo-example>
|
|
158
|
+
</demo-page>
|
|
159
|
+
`,
|
|
160
|
+
})
|
|
161
|
+
export class ChipDemoPageComponent {
|
|
162
|
+
// Removable tags demo
|
|
163
|
+
readonly activeTags = signal([
|
|
164
|
+
{ id: 'urgent', label: 'Urgent' },
|
|
165
|
+
{ id: 'review', label: 'Needs Review' },
|
|
166
|
+
{ id: 'approved', label: 'Approved' },
|
|
167
|
+
{ id: 'archived', label: 'Archived' },
|
|
168
|
+
]);
|
|
169
|
+
readonly removedTags = signal<Array<{ id: string; label: string }>>([]);
|
|
170
|
+
|
|
171
|
+
removeTag(tagId: string): void {
|
|
172
|
+
const tag = this.activeTags().find((t) => t.id === tagId);
|
|
173
|
+
if (tag) {
|
|
174
|
+
this.activeTags.update((tags) => tags.filter((t) => t.id !== tagId));
|
|
175
|
+
this.removedTags.update((tags) => [...tags, tag]);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
restoreTags(): void {
|
|
180
|
+
this.activeTags.update((tags) => [...tags, ...this.removedTags()]);
|
|
181
|
+
this.removedTags.set([]);
|
|
182
|
+
}
|
|
183
|
+
}
|