@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,212 @@
|
|
|
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 { ModusAccordionComponent } from '../../components/modus-accordion.component';
|
|
6
|
+
import { ModusCollapseComponent, type ICollapseOptions } from '../../components/modus-collapse.component';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Demo page showcasing the Modus Accordion component.
|
|
10
|
+
*
|
|
11
|
+
* Demonstrates accordion features including:
|
|
12
|
+
* - Basic accordion with multiple panels
|
|
13
|
+
* - Bordered vs non-bordered variants
|
|
14
|
+
* - Different sizes (xs, sm, md, lg)
|
|
15
|
+
* - Icons and descriptions in headers
|
|
16
|
+
* - Expanded/collapsed states
|
|
17
|
+
* - Event handling examples
|
|
18
|
+
*/
|
|
19
|
+
@Component({
|
|
20
|
+
selector: 'app-accordion-demo-page',
|
|
21
|
+
standalone: true,
|
|
22
|
+
imports: [
|
|
23
|
+
CommonModule,
|
|
24
|
+
DemoPageComponent,
|
|
25
|
+
DemoExampleComponent,
|
|
26
|
+
ModusAccordionComponent,
|
|
27
|
+
ModusCollapseComponent,
|
|
28
|
+
],
|
|
29
|
+
template: `
|
|
30
|
+
<demo-page
|
|
31
|
+
title="Modus Accordion"
|
|
32
|
+
description="Accordions organize and display collapsible content in a compact space. Use accordions to group related information and allow users to expand or collapse sections as needed."
|
|
33
|
+
>
|
|
34
|
+
<demo-example
|
|
35
|
+
title="Basic Accordion"
|
|
36
|
+
description="Simple accordion with multiple collapsible panels."
|
|
37
|
+
>
|
|
38
|
+
<modus-accordion>
|
|
39
|
+
<modus-collapse
|
|
40
|
+
[options]="{
|
|
41
|
+
title: 'Getting Started',
|
|
42
|
+
description: 'Learn the basics'
|
|
43
|
+
}"
|
|
44
|
+
>
|
|
45
|
+
<div slot="content" class="p-4 text-foreground">
|
|
46
|
+
This is the content for the getting started section. You can include any content here.
|
|
47
|
+
</div>
|
|
48
|
+
</modus-collapse>
|
|
49
|
+
<modus-collapse
|
|
50
|
+
[options]="{
|
|
51
|
+
title: 'Components',
|
|
52
|
+
description: 'Explore available components'
|
|
53
|
+
}"
|
|
54
|
+
>
|
|
55
|
+
<div slot="content" class="p-4 text-foreground">
|
|
56
|
+
Discover all the available components in the Modus design system.
|
|
57
|
+
</div>
|
|
58
|
+
</modus-collapse>
|
|
59
|
+
<modus-collapse
|
|
60
|
+
[options]="{
|
|
61
|
+
title: 'Styling',
|
|
62
|
+
description: 'Customize your design'
|
|
63
|
+
}"
|
|
64
|
+
>
|
|
65
|
+
<div slot="content" class="p-4 text-foreground">
|
|
66
|
+
Learn how to style and customize components to match your brand.
|
|
67
|
+
</div>
|
|
68
|
+
</modus-collapse>
|
|
69
|
+
</modus-accordion>
|
|
70
|
+
</demo-example>
|
|
71
|
+
|
|
72
|
+
<demo-example
|
|
73
|
+
title="Accordion Sizes"
|
|
74
|
+
description="Different sizes for various contexts and spacing needs."
|
|
75
|
+
>
|
|
76
|
+
<div class="flex flex-col gap-6">
|
|
77
|
+
<div>
|
|
78
|
+
<h4 class="text-base font-semibold mb-3 text-foreground">Extra Small (xs)</h4>
|
|
79
|
+
<modus-accordion>
|
|
80
|
+
<modus-collapse
|
|
81
|
+
[options]="{
|
|
82
|
+
title: 'Extra Small Panel',
|
|
83
|
+
description: 'Compact size for tight spaces',
|
|
84
|
+
size: 'xs'
|
|
85
|
+
}"
|
|
86
|
+
>
|
|
87
|
+
<div slot="content" class="p-4 text-foreground">Extra small accordion content.</div>
|
|
88
|
+
</modus-collapse>
|
|
89
|
+
</modus-accordion>
|
|
90
|
+
</div>
|
|
91
|
+
<div>
|
|
92
|
+
<h4 class="text-base font-semibold mb-3 text-foreground">Small (sm)</h4>
|
|
93
|
+
<modus-accordion>
|
|
94
|
+
<modus-collapse
|
|
95
|
+
[options]="{
|
|
96
|
+
title: 'Small Panel',
|
|
97
|
+
description: 'Standard small size',
|
|
98
|
+
size: 'sm'
|
|
99
|
+
}"
|
|
100
|
+
>
|
|
101
|
+
<div slot="content" class="p-4 text-foreground">Small accordion content.</div>
|
|
102
|
+
</modus-collapse>
|
|
103
|
+
</modus-accordion>
|
|
104
|
+
</div>
|
|
105
|
+
<div>
|
|
106
|
+
<h4 class="text-base font-semibold mb-3 text-foreground">Medium (md)</h4>
|
|
107
|
+
<modus-accordion>
|
|
108
|
+
<modus-collapse
|
|
109
|
+
[options]="{
|
|
110
|
+
title: 'Medium Panel',
|
|
111
|
+
description: 'Default medium size',
|
|
112
|
+
size: 'md'
|
|
113
|
+
}"
|
|
114
|
+
>
|
|
115
|
+
<div slot="content" class="p-4 text-foreground">Medium accordion content.</div>
|
|
116
|
+
</modus-collapse>
|
|
117
|
+
</modus-accordion>
|
|
118
|
+
</div>
|
|
119
|
+
<div>
|
|
120
|
+
<h4 class="text-base font-semibold mb-3 text-foreground">Large (lg)</h4>
|
|
121
|
+
<modus-accordion>
|
|
122
|
+
<modus-collapse
|
|
123
|
+
[options]="{
|
|
124
|
+
title: 'Large Panel',
|
|
125
|
+
description: 'Prominent large size',
|
|
126
|
+
size: 'lg'
|
|
127
|
+
}"
|
|
128
|
+
>
|
|
129
|
+
<div slot="content" class="p-4 text-foreground">Large accordion content.</div>
|
|
130
|
+
</modus-collapse>
|
|
131
|
+
</modus-accordion>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
</demo-example>
|
|
135
|
+
|
|
136
|
+
<demo-example
|
|
137
|
+
title="Icons in Headers"
|
|
138
|
+
description="Enhance accordion headers with icons for better visual communication."
|
|
139
|
+
>
|
|
140
|
+
<modus-accordion>
|
|
141
|
+
<modus-collapse
|
|
142
|
+
[options]="{
|
|
143
|
+
title: 'Settings',
|
|
144
|
+
description: 'Configure your preferences',
|
|
145
|
+
icon: 'settings',
|
|
146
|
+
iconAriaLabel: 'Settings icon'
|
|
147
|
+
}"
|
|
148
|
+
>
|
|
149
|
+
<div slot="content" class="p-4 text-foreground">
|
|
150
|
+
Settings panel with icon in the header.
|
|
151
|
+
</div>
|
|
152
|
+
</modus-collapse>
|
|
153
|
+
<modus-collapse
|
|
154
|
+
[options]="{
|
|
155
|
+
title: 'Notifications',
|
|
156
|
+
description: 'Manage your notifications',
|
|
157
|
+
icon: 'notifications',
|
|
158
|
+
iconAriaLabel: 'Notifications icon'
|
|
159
|
+
}"
|
|
160
|
+
>
|
|
161
|
+
<div slot="content" class="p-4 text-foreground">
|
|
162
|
+
Notifications panel with icon in the header.
|
|
163
|
+
</div>
|
|
164
|
+
</modus-collapse>
|
|
165
|
+
<modus-collapse
|
|
166
|
+
[options]="{
|
|
167
|
+
title: 'Security',
|
|
168
|
+
description: 'Security and privacy settings',
|
|
169
|
+
icon: 'lock',
|
|
170
|
+
iconAriaLabel: 'Security icon'
|
|
171
|
+
}"
|
|
172
|
+
>
|
|
173
|
+
<div slot="content" class="p-4 text-foreground">
|
|
174
|
+
Security panel with icon in the header.
|
|
175
|
+
</div>
|
|
176
|
+
</modus-collapse>
|
|
177
|
+
</modus-accordion>
|
|
178
|
+
</demo-example>
|
|
179
|
+
|
|
180
|
+
<demo-example
|
|
181
|
+
title="Default Expanded State"
|
|
182
|
+
description="Start with specific panels expanded by default."
|
|
183
|
+
>
|
|
184
|
+
<modus-accordion>
|
|
185
|
+
<modus-collapse
|
|
186
|
+
[expanded]="true"
|
|
187
|
+
[options]="{
|
|
188
|
+
title: 'Expanded by Default',
|
|
189
|
+
description: 'This panel starts expanded'
|
|
190
|
+
}"
|
|
191
|
+
>
|
|
192
|
+
<div slot="content" class="p-4 text-foreground">
|
|
193
|
+
This panel is expanded by default when the page loads.
|
|
194
|
+
</div>
|
|
195
|
+
</modus-collapse>
|
|
196
|
+
<modus-collapse
|
|
197
|
+
[expanded]="false"
|
|
198
|
+
[options]="{
|
|
199
|
+
title: 'Collapsed by Default',
|
|
200
|
+
description: 'This panel starts collapsed'
|
|
201
|
+
}"
|
|
202
|
+
>
|
|
203
|
+
<div slot="content" class="p-4 text-foreground">
|
|
204
|
+
This panel is collapsed by default when the page loads.
|
|
205
|
+
</div>
|
|
206
|
+
</modus-collapse>
|
|
207
|
+
</modus-accordion>
|
|
208
|
+
</demo-example>
|
|
209
|
+
</demo-page>
|
|
210
|
+
`,
|
|
211
|
+
})
|
|
212
|
+
export class AccordionDemoPageComponent {}
|
|
@@ -0,0 +1,108 @@
|
|
|
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 { ModusAlertComponent } from '../../components/modus-alert.component';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Demo page showcasing the Modus Alert component.
|
|
9
|
+
*
|
|
10
|
+
* Demonstrates alert features including:
|
|
11
|
+
* - Alert variants (info, success, warning, error)
|
|
12
|
+
* - Dismissible vs persistent alerts
|
|
13
|
+
* - With and without custom icons
|
|
14
|
+
* - Different roles (alert, status, etc.)
|
|
15
|
+
* - Interactive examples with dismiss handling
|
|
16
|
+
*/
|
|
17
|
+
@Component({
|
|
18
|
+
selector: 'app-alert-demo-page',
|
|
19
|
+
standalone: true,
|
|
20
|
+
imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusAlertComponent],
|
|
21
|
+
template: `
|
|
22
|
+
<demo-page
|
|
23
|
+
title="Modus Alert"
|
|
24
|
+
description="Alerts communicate important messages to users. Use alerts to notify users about success, warnings, errors, or informational messages."
|
|
25
|
+
>
|
|
26
|
+
<demo-example
|
|
27
|
+
title="Alert Variants"
|
|
28
|
+
description="Different alert variants for various message types and contexts."
|
|
29
|
+
>
|
|
30
|
+
<div class="flex flex-col gap-4">
|
|
31
|
+
<modus-alert
|
|
32
|
+
alertTitle="Info Alert"
|
|
33
|
+
alertDescription="This is an informational message."
|
|
34
|
+
variant="info"
|
|
35
|
+
/>
|
|
36
|
+
<modus-alert
|
|
37
|
+
alertTitle="Success Alert"
|
|
38
|
+
alertDescription="Your action was completed successfully."
|
|
39
|
+
variant="success"
|
|
40
|
+
/>
|
|
41
|
+
<modus-alert
|
|
42
|
+
alertTitle="Warning Alert"
|
|
43
|
+
alertDescription="Please review this important warning."
|
|
44
|
+
variant="warning"
|
|
45
|
+
/>
|
|
46
|
+
<modus-alert
|
|
47
|
+
alertTitle="Error Alert"
|
|
48
|
+
alertDescription="An error occurred. Please try again."
|
|
49
|
+
variant="error"
|
|
50
|
+
/>
|
|
51
|
+
</div>
|
|
52
|
+
</demo-example>
|
|
53
|
+
|
|
54
|
+
<demo-example
|
|
55
|
+
title="Dismissible Alerts"
|
|
56
|
+
description="Alerts that can be dismissed by users with a close button."
|
|
57
|
+
>
|
|
58
|
+
<div class="flex flex-col gap-4">
|
|
59
|
+
<modus-alert
|
|
60
|
+
alertTitle="Dismissible Info Alert"
|
|
61
|
+
alertDescription="You can close this alert."
|
|
62
|
+
variant="info"
|
|
63
|
+
[dismissible]="true"
|
|
64
|
+
/>
|
|
65
|
+
<modus-alert
|
|
66
|
+
alertTitle="Dismissible Success Alert"
|
|
67
|
+
alertDescription="This alert can be dismissed."
|
|
68
|
+
variant="success"
|
|
69
|
+
[dismissible]="true"
|
|
70
|
+
/>
|
|
71
|
+
<modus-alert
|
|
72
|
+
alertTitle="Dismissible Warning Alert"
|
|
73
|
+
alertDescription="Close this alert when you're done."
|
|
74
|
+
variant="warning"
|
|
75
|
+
[dismissible]="true"
|
|
76
|
+
/>
|
|
77
|
+
<modus-alert
|
|
78
|
+
alertTitle="Dismissible Error Alert"
|
|
79
|
+
alertDescription="Dismiss this error alert after reviewing."
|
|
80
|
+
variant="error"
|
|
81
|
+
[dismissible]="true"
|
|
82
|
+
/>
|
|
83
|
+
</div>
|
|
84
|
+
</demo-example>
|
|
85
|
+
|
|
86
|
+
<demo-example
|
|
87
|
+
title="Alerts with Custom Icons"
|
|
88
|
+
description="Enhance alerts with custom icons for better visual communication."
|
|
89
|
+
>
|
|
90
|
+
<div class="flex flex-col gap-4">
|
|
91
|
+
<modus-alert
|
|
92
|
+
alertTitle="Notification"
|
|
93
|
+
alertDescription="You have new messages."
|
|
94
|
+
variant="info"
|
|
95
|
+
icon="notifications"
|
|
96
|
+
/>
|
|
97
|
+
<modus-alert
|
|
98
|
+
alertTitle="File Uploaded"
|
|
99
|
+
alertDescription="Your file has been uploaded successfully."
|
|
100
|
+
variant="success"
|
|
101
|
+
icon="upload"
|
|
102
|
+
/>
|
|
103
|
+
</div>
|
|
104
|
+
</demo-example>
|
|
105
|
+
</demo-page>
|
|
106
|
+
`,
|
|
107
|
+
})
|
|
108
|
+
export class AlertDemoPageComponent {}
|
|
@@ -0,0 +1,174 @@
|
|
|
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 { ModusAutocompleteComponent } from '../../components/modus-autocomplete.component';
|
|
6
|
+
import type { IAutocompleteItem } from '@trimble-oss/moduswebcomponents';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Demo page showcasing the Modus Autocomplete component.
|
|
10
|
+
*
|
|
11
|
+
* Demonstrates autocomplete features including:
|
|
12
|
+
* - Basic single-select autocomplete
|
|
13
|
+
* - Multi-select with chips
|
|
14
|
+
* - Different sizes and states
|
|
15
|
+
* - Custom no-results content
|
|
16
|
+
* - Loading states with spinner
|
|
17
|
+
* - Debounce and minimum character examples
|
|
18
|
+
*/
|
|
19
|
+
@Component({
|
|
20
|
+
selector: 'app-autocomplete-demo-page',
|
|
21
|
+
standalone: true,
|
|
22
|
+
imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusAutocompleteComponent],
|
|
23
|
+
template: `
|
|
24
|
+
<demo-page
|
|
25
|
+
title="Modus Autocomplete"
|
|
26
|
+
description="Autocomplete provides input suggestions as users type. Use autocomplete to help users find and select from a list of options quickly and efficiently."
|
|
27
|
+
>
|
|
28
|
+
<demo-example
|
|
29
|
+
title="Basic Autocomplete"
|
|
30
|
+
description="Simple single-select autocomplete with a list of options."
|
|
31
|
+
>
|
|
32
|
+
<modus-autocomplete
|
|
33
|
+
label="Search Countries"
|
|
34
|
+
placeholder="Type to search..."
|
|
35
|
+
[items]="countryItems()"
|
|
36
|
+
[value]="selectedCountry()"
|
|
37
|
+
(itemSelect)="handleCountrySelect($event)"
|
|
38
|
+
/>
|
|
39
|
+
</demo-example>
|
|
40
|
+
|
|
41
|
+
<demo-example
|
|
42
|
+
title="Multi-Select Autocomplete"
|
|
43
|
+
description="Allow users to select multiple items with chips displayed for selected values."
|
|
44
|
+
>
|
|
45
|
+
<modus-autocomplete
|
|
46
|
+
label="Select Skills"
|
|
47
|
+
placeholder="Type to search skills..."
|
|
48
|
+
[items]="skillItems()"
|
|
49
|
+
[multiSelect]="true"
|
|
50
|
+
(itemSelect)="handleSkillSelect($event)"
|
|
51
|
+
/>
|
|
52
|
+
@if (selectedSkills().length > 0) {
|
|
53
|
+
<div class="mt-4 p-4 rounded-lg bg-muted text-muted-foreground">
|
|
54
|
+
<div class="font-semibold mb-2">Selected Skills:</div>
|
|
55
|
+
<div class="text-sm">{{ selectedSkills().join(', ') }}</div>
|
|
56
|
+
</div>
|
|
57
|
+
}
|
|
58
|
+
</demo-example>
|
|
59
|
+
|
|
60
|
+
<demo-example
|
|
61
|
+
title="Autocomplete Sizes"
|
|
62
|
+
description="Different sizes for various contexts and visual hierarchy."
|
|
63
|
+
>
|
|
64
|
+
<div class="flex flex-col gap-4">
|
|
65
|
+
<modus-autocomplete
|
|
66
|
+
label="Small Autocomplete"
|
|
67
|
+
placeholder="Small size..."
|
|
68
|
+
[items]="sizeItems()"
|
|
69
|
+
size="sm"
|
|
70
|
+
/>
|
|
71
|
+
<modus-autocomplete
|
|
72
|
+
label="Medium Autocomplete"
|
|
73
|
+
placeholder="Medium size..."
|
|
74
|
+
[items]="sizeItems()"
|
|
75
|
+
size="md"
|
|
76
|
+
/>
|
|
77
|
+
<modus-autocomplete
|
|
78
|
+
label="Large Autocomplete"
|
|
79
|
+
placeholder="Large size..."
|
|
80
|
+
[items]="sizeItems()"
|
|
81
|
+
size="lg"
|
|
82
|
+
/>
|
|
83
|
+
</div>
|
|
84
|
+
</demo-example>
|
|
85
|
+
|
|
86
|
+
<demo-example
|
|
87
|
+
title="Disabled and Read-Only States"
|
|
88
|
+
description="Autocomplete in disabled and read-only states."
|
|
89
|
+
>
|
|
90
|
+
<div class="flex flex-col gap-4">
|
|
91
|
+
<modus-autocomplete
|
|
92
|
+
label="Disabled Autocomplete"
|
|
93
|
+
placeholder="This is disabled"
|
|
94
|
+
[items]="stateItems()"
|
|
95
|
+
[disabled]="true"
|
|
96
|
+
/>
|
|
97
|
+
<modus-autocomplete
|
|
98
|
+
label="Read-Only Autocomplete"
|
|
99
|
+
placeholder="This is read-only"
|
|
100
|
+
[items]="stateItems()"
|
|
101
|
+
value="Read-only value"
|
|
102
|
+
[readOnly]="true"
|
|
103
|
+
/>
|
|
104
|
+
</div>
|
|
105
|
+
</demo-example>
|
|
106
|
+
|
|
107
|
+
<demo-example
|
|
108
|
+
title="Loading State"
|
|
109
|
+
description="Show a spinner while fetching or processing autocomplete results."
|
|
110
|
+
>
|
|
111
|
+
<modus-autocomplete
|
|
112
|
+
label="Search with Loading"
|
|
113
|
+
placeholder="Type to search..."
|
|
114
|
+
[items]="loadingItems()"
|
|
115
|
+
/>
|
|
116
|
+
</demo-example>
|
|
117
|
+
</demo-page>
|
|
118
|
+
`,
|
|
119
|
+
})
|
|
120
|
+
export class AutocompleteDemoPageComponent {
|
|
121
|
+
readonly selectedCountry = signal<string>('');
|
|
122
|
+
readonly selectedSkills = signal<string[]>([]);
|
|
123
|
+
|
|
124
|
+
readonly countryItems = signal<IAutocompleteItem[]>([
|
|
125
|
+
{ label: 'United States', value: 'us', visibleInMenu: true },
|
|
126
|
+
{ label: 'Canada', value: 'ca', visibleInMenu: true },
|
|
127
|
+
{ label: 'United Kingdom', value: 'uk', visibleInMenu: true },
|
|
128
|
+
{ label: 'Australia', value: 'au', visibleInMenu: true },
|
|
129
|
+
{ label: 'Germany', value: 'de', visibleInMenu: true },
|
|
130
|
+
{ label: 'France', value: 'fr', visibleInMenu: true },
|
|
131
|
+
{ label: 'Japan', value: 'jp', visibleInMenu: true },
|
|
132
|
+
]);
|
|
133
|
+
|
|
134
|
+
readonly skillItems = signal<IAutocompleteItem[]>([
|
|
135
|
+
{ label: 'Angular', value: 'angular', visibleInMenu: true },
|
|
136
|
+
{ label: 'React', value: 'react', visibleInMenu: true },
|
|
137
|
+
{ label: 'Vue.js', value: 'vue', visibleInMenu: true },
|
|
138
|
+
{ label: 'TypeScript', value: 'typescript', visibleInMenu: true },
|
|
139
|
+
{ label: 'JavaScript', value: 'javascript', visibleInMenu: true },
|
|
140
|
+
{ label: 'Node.js', value: 'nodejs', visibleInMenu: true },
|
|
141
|
+
{ label: 'Python', value: 'python', visibleInMenu: true },
|
|
142
|
+
]);
|
|
143
|
+
|
|
144
|
+
readonly sizeItems = signal<IAutocompleteItem[]>([
|
|
145
|
+
{ label: 'Option 1', value: '1', visibleInMenu: true },
|
|
146
|
+
{ label: 'Option 2', value: '2', visibleInMenu: true },
|
|
147
|
+
{ label: 'Option 3', value: '3', visibleInMenu: true },
|
|
148
|
+
]);
|
|
149
|
+
|
|
150
|
+
readonly stateItems = signal<IAutocompleteItem[]>([
|
|
151
|
+
{ label: 'Option A', value: 'a', visibleInMenu: true },
|
|
152
|
+
{ label: 'Option B', value: 'b', visibleInMenu: true },
|
|
153
|
+
]);
|
|
154
|
+
|
|
155
|
+
readonly loadingItems = signal<IAutocompleteItem[]>([
|
|
156
|
+
{ label: 'Result 1', value: '1', visibleInMenu: true },
|
|
157
|
+
{ label: 'Result 2', value: '2', visibleInMenu: true },
|
|
158
|
+
]);
|
|
159
|
+
|
|
160
|
+
handleCountrySelect(item: IAutocompleteItem): void {
|
|
161
|
+
this.selectedCountry.set(item.value);
|
|
162
|
+
console.log('Selected country:', item);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
handleSkillSelect(item: IAutocompleteItem): void {
|
|
166
|
+
const current = this.selectedSkills();
|
|
167
|
+
if (current.includes(item.value)) {
|
|
168
|
+
this.selectedSkills.set(current.filter((v) => v !== item.value));
|
|
169
|
+
} else {
|
|
170
|
+
this.selectedSkills.set([...current, item.value]);
|
|
171
|
+
}
|
|
172
|
+
console.log('Selected skills:', this.selectedSkills());
|
|
173
|
+
}
|
|
174
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
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 { ModusAvatarComponent } from '../../components/modus-avatar.component';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Demo page showcasing the Modus Avatar component.
|
|
9
|
+
*
|
|
10
|
+
* Demonstrates avatar features including:
|
|
11
|
+
* - Different sizes (xs, sm, md, lg)
|
|
12
|
+
* - Shapes (circle, square)
|
|
13
|
+
* - With and without image sources
|
|
14
|
+
* - Fallback behavior demonstration
|
|
15
|
+
* - Custom styling examples
|
|
16
|
+
*/
|
|
17
|
+
@Component({
|
|
18
|
+
selector: 'app-avatar-demo-page',
|
|
19
|
+
standalone: true,
|
|
20
|
+
imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusAvatarComponent],
|
|
21
|
+
template: `
|
|
22
|
+
<demo-page
|
|
23
|
+
title="Modus Avatar"
|
|
24
|
+
description="Avatars represent users or entities in the interface. Use avatars to personalize user experiences and provide visual identity."
|
|
25
|
+
>
|
|
26
|
+
<demo-example
|
|
27
|
+
title="Avatar Sizes"
|
|
28
|
+
description="Different sizes for various contexts and display needs."
|
|
29
|
+
>
|
|
30
|
+
<div class="flex flex-wrap items-center gap-6">
|
|
31
|
+
<div class="flex flex-col items-center gap-2">
|
|
32
|
+
<modus-avatar alt="Extra Small Avatar" size="xs" initials="X S" />
|
|
33
|
+
<span class="text-xs text-muted-foreground">Extra Small (xs)</span>
|
|
34
|
+
</div>
|
|
35
|
+
<div class="flex flex-col items-center gap-2">
|
|
36
|
+
<modus-avatar alt="Small Avatar" size="sm" initials="SM" />
|
|
37
|
+
<span class="text-xs text-muted-foreground">Small (sm)</span>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="flex flex-col items-center gap-2">
|
|
40
|
+
<modus-avatar alt="Medium Avatar" size="md" initials="MD" />
|
|
41
|
+
<span class="text-xs text-muted-foreground">Medium (md)</span>
|
|
42
|
+
</div>
|
|
43
|
+
<div class="flex flex-col items-center gap-2">
|
|
44
|
+
<modus-avatar alt="Large Avatar" size="lg" initials="LG" />
|
|
45
|
+
<span class="text-xs text-muted-foreground">Large (lg)</span>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</demo-example>
|
|
49
|
+
|
|
50
|
+
<demo-example
|
|
51
|
+
title="Avatar Shapes"
|
|
52
|
+
description="Circle and square shapes for different design styles."
|
|
53
|
+
>
|
|
54
|
+
<div class="flex flex-wrap items-center gap-6">
|
|
55
|
+
<div class="flex flex-col items-center gap-2">
|
|
56
|
+
<modus-avatar alt="Circle Avatar" shape="circle" initials="C" size="md" />
|
|
57
|
+
<span class="text-xs text-muted-foreground">Circle</span>
|
|
58
|
+
</div>
|
|
59
|
+
<div class="flex flex-col items-center gap-2">
|
|
60
|
+
<modus-avatar alt="Square Avatar" shape="square" initials="S" size="md" />
|
|
61
|
+
<span class="text-xs text-muted-foreground">Square</span>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
</demo-example>
|
|
65
|
+
|
|
66
|
+
<demo-example
|
|
67
|
+
title="Avatars with Images"
|
|
68
|
+
description="Avatars displaying user profile images."
|
|
69
|
+
>
|
|
70
|
+
<div class="flex flex-wrap items-center gap-6">
|
|
71
|
+
<modus-avatar
|
|
72
|
+
alt="User Avatar"
|
|
73
|
+
imgSrc="https://i.pravatar.cc/150?img=1"
|
|
74
|
+
size="md"
|
|
75
|
+
shape="circle"
|
|
76
|
+
/>
|
|
77
|
+
<modus-avatar
|
|
78
|
+
alt="User Avatar"
|
|
79
|
+
imgSrc="https://i.pravatar.cc/150?img=2"
|
|
80
|
+
size="md"
|
|
81
|
+
shape="circle"
|
|
82
|
+
/>
|
|
83
|
+
<modus-avatar
|
|
84
|
+
alt="User Avatar"
|
|
85
|
+
imgSrc="https://i.pravatar.cc/150?img=3"
|
|
86
|
+
size="md"
|
|
87
|
+
shape="circle"
|
|
88
|
+
/>
|
|
89
|
+
</div>
|
|
90
|
+
</demo-example>
|
|
91
|
+
|
|
92
|
+
<demo-example
|
|
93
|
+
title="Avatars with Initials"
|
|
94
|
+
description="Avatars displaying user initials when no image is available."
|
|
95
|
+
>
|
|
96
|
+
<div class="flex flex-wrap items-center gap-6">
|
|
97
|
+
<modus-avatar alt="John Doe" initials="J D" size="md" shape="circle" />
|
|
98
|
+
<modus-avatar alt="Jane Smith" initials="J S" size="md" shape="circle" />
|
|
99
|
+
<modus-avatar alt="Bob Johnson" initials="B J" size="md" shape="circle" />
|
|
100
|
+
<modus-avatar alt="Alice Brown" initials="A B" size="md" shape="circle" />
|
|
101
|
+
</div>
|
|
102
|
+
</demo-example>
|
|
103
|
+
|
|
104
|
+
<demo-example
|
|
105
|
+
title="Fallback Behavior"
|
|
106
|
+
description="Avatars automatically fall back to initials when image fails to load."
|
|
107
|
+
>
|
|
108
|
+
<div class="flex flex-wrap items-center gap-6">
|
|
109
|
+
<modus-avatar
|
|
110
|
+
alt="User Avatar"
|
|
111
|
+
imgSrc="https://invalid-url.com/image.jpg"
|
|
112
|
+
initials="F B"
|
|
113
|
+
size="md"
|
|
114
|
+
shape="circle"
|
|
115
|
+
/>
|
|
116
|
+
<div class="text-sm text-muted-foreground">
|
|
117
|
+
<div class="font-semibold mb-1">Fallback to Initials</div>
|
|
118
|
+
<div>When an image fails to load, the avatar automatically displays initials.</div>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
</demo-example>
|
|
122
|
+
|
|
123
|
+
<demo-example
|
|
124
|
+
title="Size Comparison"
|
|
125
|
+
description="Visual comparison of all avatar sizes side by side."
|
|
126
|
+
>
|
|
127
|
+
<div class="flex flex-wrap items-end gap-8">
|
|
128
|
+
<div class="flex flex-col items-center gap-2">
|
|
129
|
+
<modus-avatar alt="XS Avatar" size="xs" initials="XS" shape="circle" />
|
|
130
|
+
<span class="text-xs text-muted-foreground">xs</span>
|
|
131
|
+
</div>
|
|
132
|
+
<div class="flex flex-col items-center gap-2">
|
|
133
|
+
<modus-avatar alt="SM Avatar" size="sm" initials="SM" shape="circle" />
|
|
134
|
+
<span class="text-xs text-muted-foreground">sm</span>
|
|
135
|
+
</div>
|
|
136
|
+
<div class="flex flex-col items-center gap-2">
|
|
137
|
+
<modus-avatar alt="MD Avatar" size="md" initials="MD" shape="circle" />
|
|
138
|
+
<span class="text-xs text-muted-foreground">md</span>
|
|
139
|
+
</div>
|
|
140
|
+
<div class="flex flex-col items-center gap-2">
|
|
141
|
+
<modus-avatar alt="LG Avatar" size="lg" initials="LG" shape="circle" />
|
|
142
|
+
<span class="text-xs text-muted-foreground">lg</span>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
</demo-example>
|
|
146
|
+
</demo-page>
|
|
147
|
+
`,
|
|
148
|
+
})
|
|
149
|
+
export class AvatarDemoPageComponent {}
|