@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,161 @@
|
|
|
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 { ModusRadioComponent } from '../../components/modus-radio.component';
|
|
6
|
+
import { ModusInputLabelComponent } from '../../components/modus-input-label.component';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Demo page showcasing the Modus Radio component.
|
|
10
|
+
*
|
|
11
|
+
* Demonstrates radio button features including:
|
|
12
|
+
* - Basic radio groups
|
|
13
|
+
* - Sizes
|
|
14
|
+
* - Disabled state
|
|
15
|
+
* - Required fields
|
|
16
|
+
* - With labels
|
|
17
|
+
*/
|
|
18
|
+
@Component({
|
|
19
|
+
selector: 'app-radio-demo-page',
|
|
20
|
+
standalone: true,
|
|
21
|
+
imports: [
|
|
22
|
+
CommonModule,
|
|
23
|
+
DemoPageComponent,
|
|
24
|
+
DemoExampleComponent,
|
|
25
|
+
ModusRadioComponent,
|
|
26
|
+
ModusInputLabelComponent,
|
|
27
|
+
],
|
|
28
|
+
template: `
|
|
29
|
+
<demo-page
|
|
30
|
+
title="Modus Radio"
|
|
31
|
+
description="Radio buttons allow users to select a single option from a group. Use radio buttons when only one option can be selected at a time."
|
|
32
|
+
>
|
|
33
|
+
<demo-example
|
|
34
|
+
title="Basic Radio Group"
|
|
35
|
+
description="Simple radio button group with multiple options."
|
|
36
|
+
>
|
|
37
|
+
<div class="flex flex-col gap-6">
|
|
38
|
+
<div class="flex flex-col gap-2">
|
|
39
|
+
<modus-input-label forId="option-a" labelText="Select Option" />
|
|
40
|
+
<div class="flex flex-col gap-2">
|
|
41
|
+
<modus-radio inputId="option-a" label="Option A" name="basic-group" [value]="true" />
|
|
42
|
+
<modus-radio inputId="option-b" label="Option B" name="basic-group" [value]="false" />
|
|
43
|
+
<modus-radio inputId="option-c" label="Option C" name="basic-group" [value]="false" />
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</demo-example>
|
|
48
|
+
|
|
49
|
+
<demo-example
|
|
50
|
+
title="Radio Button Sizes"
|
|
51
|
+
description="Radio buttons in different sizes."
|
|
52
|
+
>
|
|
53
|
+
<div class="flex flex-col gap-6">
|
|
54
|
+
<div class="flex flex-col gap-2">
|
|
55
|
+
<modus-input-label forId="small-radio" labelText="Small" />
|
|
56
|
+
<div class="flex flex-col gap-2">
|
|
57
|
+
<modus-radio inputId="small-radio" label="Small Option" name="small-group" size="sm" [value]="true" />
|
|
58
|
+
<modus-radio inputId="small-radio-b" label="Another Small Option" name="small-group" size="sm" [value]="false" />
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<div class="flex flex-col gap-2">
|
|
63
|
+
<modus-input-label forId="medium-radio" labelText="Medium (Default)" />
|
|
64
|
+
<div class="flex flex-col gap-2">
|
|
65
|
+
<modus-radio inputId="medium-radio" label="Medium Option" name="medium-group" size="md" [value]="true" />
|
|
66
|
+
<modus-radio inputId="medium-radio-b" label="Another Medium Option" name="medium-group" size="md" [value]="false" />
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
|
|
70
|
+
<div class="flex flex-col gap-2">
|
|
71
|
+
<modus-input-label forId="large-radio" labelText="Large" />
|
|
72
|
+
<div class="flex flex-col gap-2">
|
|
73
|
+
<modus-radio inputId="large-radio" label="Large Option" name="large-group" size="lg" [value]="true" />
|
|
74
|
+
<modus-radio inputId="large-radio-b" label="Another Large Option" name="large-group" size="lg" [value]="false" />
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
</demo-example>
|
|
79
|
+
|
|
80
|
+
<demo-example
|
|
81
|
+
title="Required Radio Group"
|
|
82
|
+
description="Radio buttons marked as required."
|
|
83
|
+
>
|
|
84
|
+
<div class="flex flex-col gap-6">
|
|
85
|
+
<div class="flex flex-col gap-2">
|
|
86
|
+
<modus-input-label forId="required-a" labelText="Required Selection" [required]="true" />
|
|
87
|
+
<div class="flex flex-col gap-2">
|
|
88
|
+
<modus-radio inputId="required-a" label="Yes" name="required-group" [required]="true" [value]="true" />
|
|
89
|
+
<modus-radio inputId="required-b" label="No" name="required-group" [required]="true" [value]="false" />
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
</demo-example>
|
|
94
|
+
|
|
95
|
+
<demo-example
|
|
96
|
+
title="Disabled Radio Buttons"
|
|
97
|
+
description="Radio buttons in disabled state."
|
|
98
|
+
>
|
|
99
|
+
<div class="flex flex-col gap-6">
|
|
100
|
+
<div class="flex flex-col gap-2">
|
|
101
|
+
<modus-input-label forId="disabled-a" labelText="Disabled Options" />
|
|
102
|
+
<div class="flex flex-col gap-2">
|
|
103
|
+
<modus-radio inputId="disabled-a" label="Disabled Option 1" name="disabled-group" [disabled]="true" [value]="true" />
|
|
104
|
+
<modus-radio inputId="disabled-b" label="Disabled Option 2" name="disabled-group" [disabled]="true" [value]="false" />
|
|
105
|
+
<modus-radio inputId="disabled-c" label="Enabled Option" name="disabled-group" [disabled]="false" [value]="false" />
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
</demo-example>
|
|
110
|
+
|
|
111
|
+
<demo-example
|
|
112
|
+
title="Interactive Example"
|
|
113
|
+
description="Radio buttons with two-way binding and event handling."
|
|
114
|
+
>
|
|
115
|
+
<div class="flex flex-col gap-6">
|
|
116
|
+
<div class="flex flex-col gap-2">
|
|
117
|
+
<modus-input-label forId="interactive-a" labelText="Choose Your Plan" />
|
|
118
|
+
<div class="flex flex-col gap-2">
|
|
119
|
+
<modus-radio
|
|
120
|
+
inputId="interactive-a"
|
|
121
|
+
label="Free Plan"
|
|
122
|
+
name="interactive-group"
|
|
123
|
+
[value]="selectedOption() === 'free'"
|
|
124
|
+
(inputChange)="handleRadioChange('free')"
|
|
125
|
+
/>
|
|
126
|
+
<modus-radio
|
|
127
|
+
inputId="interactive-b"
|
|
128
|
+
label="Pro Plan"
|
|
129
|
+
name="interactive-group"
|
|
130
|
+
[value]="selectedOption() === 'pro'"
|
|
131
|
+
(inputChange)="handleRadioChange('pro')"
|
|
132
|
+
/>
|
|
133
|
+
<modus-radio
|
|
134
|
+
inputId="interactive-c"
|
|
135
|
+
label="Enterprise Plan"
|
|
136
|
+
name="interactive-group"
|
|
137
|
+
[value]="selectedOption() === 'enterprise'"
|
|
138
|
+
(inputChange)="handleRadioChange('enterprise')"
|
|
139
|
+
/>
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
@if (selectedOption()) {
|
|
143
|
+
<div class="p-4 rounded-lg bg-card border-default">
|
|
144
|
+
<p class="text-sm text-foreground">
|
|
145
|
+
<strong>Selected Option:</strong> {{ selectedOption() }}
|
|
146
|
+
</p>
|
|
147
|
+
</div>
|
|
148
|
+
}
|
|
149
|
+
</div>
|
|
150
|
+
</demo-example>
|
|
151
|
+
</demo-page>
|
|
152
|
+
`,
|
|
153
|
+
})
|
|
154
|
+
export class RadioDemoPageComponent {
|
|
155
|
+
readonly selectedOption = signal<string | null>(null);
|
|
156
|
+
|
|
157
|
+
handleRadioChange(value: string): void {
|
|
158
|
+
this.selectedOption.set(value);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
@@ -0,0 +1,97 @@
|
|
|
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 { ModusRatingComponent } from '../../components/modus-rating.component';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Demo page showcasing the Modus Rating component.
|
|
9
|
+
*
|
|
10
|
+
* Demonstrates rating features including:
|
|
11
|
+
* - Star ratings
|
|
12
|
+
* - Smiley ratings
|
|
13
|
+
* - Half ratings
|
|
14
|
+
* - Different sizes
|
|
15
|
+
* - Interactive ratings
|
|
16
|
+
*/
|
|
17
|
+
@Component({
|
|
18
|
+
selector: 'app-rating-demo-page',
|
|
19
|
+
standalone: true,
|
|
20
|
+
imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusRatingComponent],
|
|
21
|
+
template: `
|
|
22
|
+
<demo-page
|
|
23
|
+
title="Modus Rating"
|
|
24
|
+
description="Rating components allow users to provide feedback through visual ratings. Use ratings for reviews, surveys, or any scenario requiring user opinion."
|
|
25
|
+
>
|
|
26
|
+
<demo-example title="Star Rating" description="Star-based rating system.">
|
|
27
|
+
<div class="flex flex-col gap-6">
|
|
28
|
+
<modus-rating variant="star" [value]="0" [count]="5" />
|
|
29
|
+
<modus-rating variant="star" [value]="2.5" [count]="5" />
|
|
30
|
+
<modus-rating variant="star" [value]="5" [count]="5" />
|
|
31
|
+
</div>
|
|
32
|
+
</demo-example>
|
|
33
|
+
|
|
34
|
+
<demo-example
|
|
35
|
+
title="Star Rating with Half Steps"
|
|
36
|
+
description="Star ratings that allow half-step increments."
|
|
37
|
+
>
|
|
38
|
+
<div class="flex flex-col gap-6">
|
|
39
|
+
<modus-rating variant="star" [value]="2.5" [count]="5" [allowHalf]="true" />
|
|
40
|
+
<modus-rating variant="star" [value]="3.5" [count]="5" [allowHalf]="true" />
|
|
41
|
+
<modus-rating variant="star" [value]="4.5" [count]="5" [allowHalf]="true" />
|
|
42
|
+
</div>
|
|
43
|
+
</demo-example>
|
|
44
|
+
|
|
45
|
+
<demo-example title="Smiley Rating" description="Smiley face-based rating system.">
|
|
46
|
+
<div class="flex flex-col gap-6">
|
|
47
|
+
<modus-rating variant="smiley" [value]="1" [count]="5" />
|
|
48
|
+
<modus-rating variant="smiley" [value]="3" [count]="5" />
|
|
49
|
+
<modus-rating variant="smiley" [value]="5" [count]="5" />
|
|
50
|
+
</div>
|
|
51
|
+
</demo-example>
|
|
52
|
+
|
|
53
|
+
<demo-example title="Rating Sizes" description="Ratings in different sizes.">
|
|
54
|
+
<div class="flex flex-col gap-6">
|
|
55
|
+
<div class="flex flex-col gap-2">
|
|
56
|
+
<p class="text-sm text-muted-foreground">Small</p>
|
|
57
|
+
<modus-rating variant="star" [value]="3" [count]="5" size="sm" />
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<div class="flex flex-col gap-2">
|
|
61
|
+
<p class="text-sm text-muted-foreground">Medium (Default)</p>
|
|
62
|
+
<modus-rating variant="star" [value]="3" [count]="5" size="md" />
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
<div class="flex flex-col gap-2">
|
|
66
|
+
<p class="text-sm text-muted-foreground">Large</p>
|
|
67
|
+
<modus-rating variant="star" [value]="3" [count]="5" size="lg" />
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</demo-example>
|
|
71
|
+
|
|
72
|
+
<demo-example title="Custom Rating Count" description="Ratings with custom number of items.">
|
|
73
|
+
<div class="flex flex-col gap-6">
|
|
74
|
+
<div class="flex flex-col gap-2">
|
|
75
|
+
<p class="text-sm text-muted-foreground">3 Stars</p>
|
|
76
|
+
<modus-rating variant="star" [value]="2" [count]="3" />
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<div class="flex flex-col gap-2">
|
|
80
|
+
<p class="text-sm text-muted-foreground">10 Stars</p>
|
|
81
|
+
<modus-rating variant="star" [value]="7" [count]="10" />
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
</demo-example>
|
|
85
|
+
|
|
86
|
+
<demo-example title="Disabled Rating" description="Read-only rating display.">
|
|
87
|
+
<div class="flex flex-col gap-6">
|
|
88
|
+
<modus-rating variant="star" [value]="4" [count]="5" [disabled]="true" />
|
|
89
|
+
<p class="text-sm text-muted-foreground">
|
|
90
|
+
Disabled ratings are useful for displaying read-only ratings.
|
|
91
|
+
</p>
|
|
92
|
+
</div>
|
|
93
|
+
</demo-example>
|
|
94
|
+
</demo-page>
|
|
95
|
+
`,
|
|
96
|
+
})
|
|
97
|
+
export class RatingDemoPageComponent {}
|
|
@@ -0,0 +1,107 @@
|
|
|
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 { ModusSelectComponent } from '../../components/modus-select.component';
|
|
6
|
+
import type { ISelectOption } from '@trimble-oss/moduswebcomponents';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Demo page showcasing the Modus Select component.
|
|
10
|
+
*
|
|
11
|
+
* Demonstrates select features including:
|
|
12
|
+
* - Basic select
|
|
13
|
+
* - Sizes
|
|
14
|
+
* - Required fields
|
|
15
|
+
* - With labels
|
|
16
|
+
* - Interactive examples
|
|
17
|
+
*/
|
|
18
|
+
@Component({
|
|
19
|
+
selector: 'app-select-demo-page',
|
|
20
|
+
standalone: true,
|
|
21
|
+
imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusSelectComponent],
|
|
22
|
+
template: `
|
|
23
|
+
<demo-page
|
|
24
|
+
title="Modus Select"
|
|
25
|
+
description="Select components provide a dropdown menu for choosing from a list of options. Use selects when you have multiple options and want to save space compared to radio buttons."
|
|
26
|
+
>
|
|
27
|
+
<demo-example title="Basic Select" description="Simple select dropdown with options.">
|
|
28
|
+
<div class="flex flex-col gap-6">
|
|
29
|
+
<div class="flex flex-col gap-2">
|
|
30
|
+
<modus-select
|
|
31
|
+
inputId="country-select"
|
|
32
|
+
label="Choose a country"
|
|
33
|
+
[options]="countryOptions"
|
|
34
|
+
/>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<div class="flex flex-col gap-2">
|
|
38
|
+
<modus-select
|
|
39
|
+
inputId="language-select"
|
|
40
|
+
label="Select Language"
|
|
41
|
+
[options]="languageOptions"
|
|
42
|
+
/>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
</demo-example>
|
|
46
|
+
|
|
47
|
+
<demo-example title="Select Sizes" description="Select dropdowns in different sizes.">
|
|
48
|
+
<div class="flex flex-col gap-6">
|
|
49
|
+
<div class="flex flex-col gap-2">
|
|
50
|
+
<modus-select inputId="small-select" label="Small" [options]="sizeOptions" size="sm" />
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<div class="flex flex-col gap-2">
|
|
54
|
+
<modus-select
|
|
55
|
+
inputId="medium-select"
|
|
56
|
+
label="Medium"
|
|
57
|
+
[options]="sizeOptions"
|
|
58
|
+
size="md"
|
|
59
|
+
/>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<div class="flex flex-col gap-2">
|
|
63
|
+
<modus-select inputId="large-select" label="Large" [options]="sizeOptions" size="lg" />
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
</demo-example>
|
|
67
|
+
|
|
68
|
+
<demo-example title="Disabled Select" description="Select dropdowns in disabled state.">
|
|
69
|
+
<div class="flex flex-col gap-6">
|
|
70
|
+
<div class="flex flex-col gap-2">
|
|
71
|
+
<modus-select
|
|
72
|
+
inputId="disabled-select"
|
|
73
|
+
label="Disabled"
|
|
74
|
+
[options]="countryOptions"
|
|
75
|
+
[disabled]="true"
|
|
76
|
+
/>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
</demo-example>
|
|
80
|
+
</demo-page>
|
|
81
|
+
`,
|
|
82
|
+
})
|
|
83
|
+
export class SelectDemoPageComponent {
|
|
84
|
+
readonly countryOptions: ISelectOption[] = [
|
|
85
|
+
{ label: 'United States', value: 'us' },
|
|
86
|
+
{ label: 'Canada', value: 'ca' },
|
|
87
|
+
{ label: 'Mexico', value: 'mx' },
|
|
88
|
+
{ label: 'United Kingdom', value: 'uk' },
|
|
89
|
+
{ label: 'Germany', value: 'de' },
|
|
90
|
+
{ label: 'France', value: 'fr' },
|
|
91
|
+
{ label: 'Japan', value: 'jp' },
|
|
92
|
+
];
|
|
93
|
+
|
|
94
|
+
readonly languageOptions: ISelectOption[] = [
|
|
95
|
+
{ label: 'English', value: 'en' },
|
|
96
|
+
{ label: 'Spanish', value: 'es' },
|
|
97
|
+
{ label: 'French', value: 'fr' },
|
|
98
|
+
{ label: 'German', value: 'de' },
|
|
99
|
+
{ label: 'Japanese', value: 'ja' },
|
|
100
|
+
];
|
|
101
|
+
|
|
102
|
+
readonly sizeOptions: ISelectOption[] = [
|
|
103
|
+
{ label: 'Option 1', value: '1' },
|
|
104
|
+
{ label: 'Option 2', value: '2' },
|
|
105
|
+
{ label: 'Option 3', value: '3' },
|
|
106
|
+
];
|
|
107
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Renders a clean, unstyled container for a demo example.
|
|
6
|
+
*
|
|
7
|
+
* Similar to DemoExampleComponent but with a cleaner background style
|
|
8
|
+
* using dashed borders instead of solid card background.
|
|
9
|
+
* Used primarily on the landing page for feature cards.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```html
|
|
13
|
+
* <demo-example-clean title="Modern Stack" description="Built with Angular 20">
|
|
14
|
+
* <div>Feature content here</div>
|
|
15
|
+
* </demo-example-clean>
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
@Component({
|
|
19
|
+
selector: 'demo-example-clean',
|
|
20
|
+
standalone: true,
|
|
21
|
+
imports: [CommonModule],
|
|
22
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
23
|
+
template: `
|
|
24
|
+
<div class="flex flex-col gap-4 rounded-lg bg-background p-6 border-dashed">
|
|
25
|
+
<div class="flex flex-col gap-1">
|
|
26
|
+
<div class="text-lg font-medium text-foreground">{{ title() }}</div>
|
|
27
|
+
<div class="text-sm text-foreground opacity-80">{{ description() }}</div>
|
|
28
|
+
</div>
|
|
29
|
+
<div class="flex flex-col gap-4">
|
|
30
|
+
<ng-content />
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
`,
|
|
34
|
+
})
|
|
35
|
+
export class DemoExampleCleanComponent {
|
|
36
|
+
/** The title of the demo example */
|
|
37
|
+
readonly title = input.required<string>();
|
|
38
|
+
|
|
39
|
+
/** A description of the demo example */
|
|
40
|
+
readonly description = input<string>('');
|
|
41
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Renders a styled container for a demo example.
|
|
6
|
+
*
|
|
7
|
+
* Provides a card-based container with:
|
|
8
|
+
* - Title and description
|
|
9
|
+
* - Content projection for example content
|
|
10
|
+
* - Consistent styling using design system colors
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```html
|
|
14
|
+
* <demo-example title="Button Variants" description="Different button styles">
|
|
15
|
+
* <modus-button>Primary</modus-button>
|
|
16
|
+
* </demo-example>
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
@Component({
|
|
20
|
+
selector: 'demo-example',
|
|
21
|
+
standalone: true,
|
|
22
|
+
imports: [CommonModule],
|
|
23
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
24
|
+
template: `
|
|
25
|
+
<div class="flex flex-col gap-4 rounded-lg p-6 bg-background border-default">
|
|
26
|
+
<div class="flex flex-col gap-1">
|
|
27
|
+
<div class="text-lg font-medium text-foreground">{{ title() }}</div>
|
|
28
|
+
<div class="text-sm text-foreground-80">{{ description() }}</div>
|
|
29
|
+
</div>
|
|
30
|
+
<div class="flex flex-col gap-4">
|
|
31
|
+
<ng-content />
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
`,
|
|
35
|
+
})
|
|
36
|
+
export class DemoExampleComponent {
|
|
37
|
+
/** The title of the demo example */
|
|
38
|
+
readonly title = input.required<string>();
|
|
39
|
+
|
|
40
|
+
/** A description of the demo example */
|
|
41
|
+
readonly description = input<string>('');
|
|
42
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { Router } from '@angular/router';
|
|
4
|
+
import { ModusButtonComponent } from '../../components/modus-button.component';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Renders a standard layout for a demo page.
|
|
8
|
+
*
|
|
9
|
+
* Provides a consistent page structure with:
|
|
10
|
+
* - Optional back button navigation
|
|
11
|
+
* - Page title and description
|
|
12
|
+
* - Content projection for demo examples
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```html
|
|
16
|
+
* <demo-page title="Button Demo" description="Demonstrates button component features">
|
|
17
|
+
* <demo-example title="Variants">...</demo-example>
|
|
18
|
+
* </demo-page>
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
@Component({
|
|
22
|
+
selector: 'demo-page',
|
|
23
|
+
standalone: true,
|
|
24
|
+
imports: [CommonModule, ModusButtonComponent],
|
|
25
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
26
|
+
template: `
|
|
27
|
+
<div class="max-w-6xl mx-auto p-8 bg-background">
|
|
28
|
+
@if (showBackButton()) {
|
|
29
|
+
<div class="flex items-center gap-4 mb-6">
|
|
30
|
+
<modus-button
|
|
31
|
+
variant="filled"
|
|
32
|
+
color="tertiary"
|
|
33
|
+
size="md"
|
|
34
|
+
icon="arrow_left"
|
|
35
|
+
iconPosition="left"
|
|
36
|
+
(buttonClick)="handleBackClick()"
|
|
37
|
+
>
|
|
38
|
+
Component List
|
|
39
|
+
</modus-button>
|
|
40
|
+
</div>
|
|
41
|
+
}
|
|
42
|
+
<div class="text-center mb-12">
|
|
43
|
+
<div class="text-4xl font-semibold mb-4 text-foreground">{{ title() }}</div>
|
|
44
|
+
<div class="text-lg leading-relaxed text-foreground text-center">{{ description() }}</div>
|
|
45
|
+
</div>
|
|
46
|
+
<div class="flex flex-col gap-6">
|
|
47
|
+
<ng-content />
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<!-- Footer -->
|
|
51
|
+
<div class="text-center pt-8 box-content">
|
|
52
|
+
<div class="flex items-center justify-center gap-3 mb-3">
|
|
53
|
+
<img
|
|
54
|
+
src="/angular-icon.svg"
|
|
55
|
+
alt="Angular"
|
|
56
|
+
class="h-6 w-6"
|
|
57
|
+
aria-hidden="true"
|
|
58
|
+
/>
|
|
59
|
+
<div class="text-foreground-40">+</div>
|
|
60
|
+
<img
|
|
61
|
+
src="/vite.svg"
|
|
62
|
+
alt="Vite"
|
|
63
|
+
class="h-6 w-6"
|
|
64
|
+
aria-hidden="true"
|
|
65
|
+
/>
|
|
66
|
+
</div>
|
|
67
|
+
<div class="text-sm font-mono text-foreground-40">
|
|
68
|
+
2026 Modus Angular App v1.0.0 + Angular 20 + Vite + Tailwind CSS -
|
|
69
|
+
Created by Julian Oczkowski
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
`,
|
|
74
|
+
})
|
|
75
|
+
export class DemoPageComponent {
|
|
76
|
+
private router = inject(Router);
|
|
77
|
+
|
|
78
|
+
/** The title of the demo page */
|
|
79
|
+
readonly title = input.required<string>();
|
|
80
|
+
|
|
81
|
+
/** A description of the demo page */
|
|
82
|
+
readonly description = input.required<string>();
|
|
83
|
+
|
|
84
|
+
/** Whether to show the back button (default: true) */
|
|
85
|
+
readonly showBackButton = input<boolean>(true);
|
|
86
|
+
|
|
87
|
+
/** Optional URL to navigate to when back button is clicked (defaults to /dev/components) */
|
|
88
|
+
readonly backUrl = input<string>('/dev/components');
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Handles the click event for the "Component List" button, navigating to the components gallery.
|
|
92
|
+
* Always navigates to /dev/components instead of using browser history.
|
|
93
|
+
*/
|
|
94
|
+
handleBackClick(): void {
|
|
95
|
+
this.router.navigate(['/dev/components']);
|
|
96
|
+
}
|
|
97
|
+
}
|