@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
package/templates/angular/src/app/dev-pages/components-gallery/components-gallery.component.ts
ADDED
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
import { Component, signal, computed, inject } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { Router, RouterModule } from '@angular/router';
|
|
4
|
+
import { ModusButtonComponent } from '../../components/modus-button.component';
|
|
5
|
+
import { ModusBadgeComponent } from '../../components/modus-badge.component';
|
|
6
|
+
|
|
7
|
+
interface ComponentDemo {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
url: string;
|
|
11
|
+
category: string;
|
|
12
|
+
status: 'ready' | 'demo';
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface Category {
|
|
16
|
+
name: string;
|
|
17
|
+
value: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const componentDemos: ComponentDemo[] = [
|
|
21
|
+
{
|
|
22
|
+
name: 'Accordion',
|
|
23
|
+
description: 'Collapsible content sections with expand/collapse functionality',
|
|
24
|
+
url: '/dev/demos/accordion',
|
|
25
|
+
category: 'Layout',
|
|
26
|
+
status: 'demo',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'Alert',
|
|
30
|
+
description: 'Notifications and messages with different variants and dismissible options',
|
|
31
|
+
url: '/dev/demos/alert',
|
|
32
|
+
category: 'Feedback',
|
|
33
|
+
status: 'demo',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'Autocomplete',
|
|
37
|
+
description: 'Input field with suggestions and multi-select capabilities',
|
|
38
|
+
url: '/dev/demos/autocomplete',
|
|
39
|
+
category: 'Forms',
|
|
40
|
+
status: 'demo',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'Avatar',
|
|
44
|
+
description: 'User profile images with different sizes and shapes',
|
|
45
|
+
url: '/dev/demos/avatar',
|
|
46
|
+
category: 'Display',
|
|
47
|
+
status: 'demo',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: 'Badge',
|
|
51
|
+
description: 'Labels and counters for status indicators and notifications',
|
|
52
|
+
url: '/dev/demos/badge',
|
|
53
|
+
category: 'Display',
|
|
54
|
+
status: 'demo',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'Breadcrumbs',
|
|
58
|
+
description: 'Navigation breadcrumb trails for hierarchical navigation',
|
|
59
|
+
url: '/dev/demos/breadcrumbs',
|
|
60
|
+
category: 'Navigation',
|
|
61
|
+
status: 'demo',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'Button',
|
|
65
|
+
description: 'Action buttons with various styles, sizes, and states',
|
|
66
|
+
url: '/dev/demos/button',
|
|
67
|
+
category: 'Forms',
|
|
68
|
+
status: 'demo',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'Button Group',
|
|
72
|
+
description: 'Grouped buttons with shared styling and single or multiple selection modes',
|
|
73
|
+
url: '/dev/demos/button-group',
|
|
74
|
+
category: 'Forms',
|
|
75
|
+
status: 'demo',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: 'Card',
|
|
79
|
+
description: 'Content containers with headers, content, and action areas',
|
|
80
|
+
url: '/dev/demos/card',
|
|
81
|
+
category: 'Layout',
|
|
82
|
+
status: 'demo',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: 'Checkbox',
|
|
86
|
+
description: 'Form controls for multiple selections and boolean inputs',
|
|
87
|
+
url: '/dev/demos/checkbox',
|
|
88
|
+
category: 'Forms',
|
|
89
|
+
status: 'demo',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'Chip',
|
|
93
|
+
description: 'Compact elements for tags, filters, and removable items',
|
|
94
|
+
url: '/dev/demos/chip',
|
|
95
|
+
category: 'Display',
|
|
96
|
+
status: 'demo',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'Date',
|
|
100
|
+
description: 'Date input controls with validation and formatting',
|
|
101
|
+
url: '/dev/demos/date',
|
|
102
|
+
category: 'Forms',
|
|
103
|
+
status: 'demo',
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
name: 'Dropdown Menu',
|
|
107
|
+
description: 'Contextual menus with various placement and sizing options',
|
|
108
|
+
url: '/dev/demos/dropdown',
|
|
109
|
+
category: 'Navigation',
|
|
110
|
+
status: 'demo',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: 'File Dropzone',
|
|
114
|
+
description: 'Drag-and-drop file uploads with validation and custom messaging',
|
|
115
|
+
url: '/dev/demos/file-dropzone',
|
|
116
|
+
category: 'Forms',
|
|
117
|
+
status: 'demo',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: 'Handle',
|
|
121
|
+
description: 'Draggable resizer for adjacent panels with horizontal and vertical layouts',
|
|
122
|
+
url: '/dev/demos/handle',
|
|
123
|
+
category: 'Layout',
|
|
124
|
+
status: 'demo',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'Icon',
|
|
128
|
+
description: 'Icon component with various sizes, accessibility options, and styling',
|
|
129
|
+
url: '/dev/demos/icon',
|
|
130
|
+
category: 'Display',
|
|
131
|
+
status: 'demo',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: 'Input Feedback',
|
|
135
|
+
description:
|
|
136
|
+
'Contextual feedback for form fields with error, success, warning, and info messages',
|
|
137
|
+
url: '/dev/demos/input-feedback',
|
|
138
|
+
category: 'Forms',
|
|
139
|
+
status: 'demo',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: 'Input Label',
|
|
143
|
+
description:
|
|
144
|
+
'Labels for form controls with sub-labels, required indicators, and custom content',
|
|
145
|
+
url: '/dev/demos/input-label',
|
|
146
|
+
category: 'Forms',
|
|
147
|
+
status: 'demo',
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
name: 'Loader',
|
|
151
|
+
description: 'Visual loading indicators with 6 animation variants, 4 sizes, and 8 colors',
|
|
152
|
+
url: '/dev/demos/loader',
|
|
153
|
+
category: 'Feedback',
|
|
154
|
+
status: 'demo',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: 'Logo',
|
|
158
|
+
description: 'Trimble and Viewpoint product logos with full and emblem variants',
|
|
159
|
+
url: '/dev/demos/logo',
|
|
160
|
+
category: 'Display',
|
|
161
|
+
status: 'demo',
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
name: 'Menu',
|
|
165
|
+
description: 'Integrated menu system with container and menu items for navigation and toolbars',
|
|
166
|
+
url: '/dev/demos/menu',
|
|
167
|
+
category: 'Navigation',
|
|
168
|
+
status: 'demo',
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: 'Modal',
|
|
172
|
+
description: 'Blocking dialog overlays for forms, confirmations, and detailed content',
|
|
173
|
+
url: '/dev/demos/modal',
|
|
174
|
+
category: 'Overlays',
|
|
175
|
+
status: 'demo',
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
name: 'Navbar',
|
|
179
|
+
description:
|
|
180
|
+
'Full-width application bar with navigation menus, search, notifications, apps launcher, AI button and user profile controls',
|
|
181
|
+
url: '/dev/demos/navbar',
|
|
182
|
+
category: 'Navigation',
|
|
183
|
+
status: 'demo',
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
name: 'Number Input',
|
|
187
|
+
description:
|
|
188
|
+
'Numeric input controls with validation, currency support, range sliders, and comprehensive form integration',
|
|
189
|
+
url: '/dev/demos/number-input',
|
|
190
|
+
category: 'Forms',
|
|
191
|
+
status: 'demo',
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
name: 'Pagination',
|
|
195
|
+
description:
|
|
196
|
+
'Page navigation control with first, previous, number, next, and last actions plus accessibility customization',
|
|
197
|
+
url: '/dev/demos/pagination',
|
|
198
|
+
category: 'Navigation',
|
|
199
|
+
status: 'demo',
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
name: 'Panel',
|
|
203
|
+
description: 'Structured layout container with header, body, and footer slots',
|
|
204
|
+
url: '/dev/demos/panel',
|
|
205
|
+
category: 'Layout',
|
|
206
|
+
status: 'demo',
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
name: 'Progress',
|
|
210
|
+
description: 'Linear and radial progress indicators for task completion and live updates',
|
|
211
|
+
url: '/dev/demos/progress',
|
|
212
|
+
category: 'Feedback',
|
|
213
|
+
status: 'demo',
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
name: 'Radio',
|
|
217
|
+
description:
|
|
218
|
+
'Exclusive choice control with multiple sizes, required state, and layout customization',
|
|
219
|
+
url: '/dev/demos/radio',
|
|
220
|
+
category: 'Forms',
|
|
221
|
+
status: 'demo',
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
name: 'Rating',
|
|
225
|
+
description:
|
|
226
|
+
'Star, smiley, heart, and thumb ratings with events, half-steps, and accessibility helpers',
|
|
227
|
+
url: '/dev/demos/rating',
|
|
228
|
+
category: 'Forms',
|
|
229
|
+
status: 'demo',
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
name: 'Select',
|
|
233
|
+
description:
|
|
234
|
+
'Single-select dropdown with dynamic options arrays, validation feedback, and async loading patterns',
|
|
235
|
+
url: '/dev/demos/select',
|
|
236
|
+
category: 'Forms',
|
|
237
|
+
status: 'demo',
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
name: 'Side Navigation',
|
|
241
|
+
description:
|
|
242
|
+
'Collapsible left navigation with controlled expansion and Modus navbar integration',
|
|
243
|
+
url: '/dev/demos/side-navigation',
|
|
244
|
+
category: 'Navigation',
|
|
245
|
+
status: 'demo',
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
name: 'Skeleton',
|
|
249
|
+
description: 'Animated loading placeholders for typography, cards, and dashboards',
|
|
250
|
+
url: '/dev/demos/skeleton',
|
|
251
|
+
category: 'Feedback',
|
|
252
|
+
status: 'demo',
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
name: 'Slider',
|
|
256
|
+
description: 'Interactive range input with min/max bounds, step control, and live feedback',
|
|
257
|
+
url: '/dev/demos/slider',
|
|
258
|
+
category: 'Forms',
|
|
259
|
+
status: 'demo',
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
name: 'Stepper',
|
|
263
|
+
description:
|
|
264
|
+
'Progress indicator for multi-step workflows with horizontal and vertical orientations',
|
|
265
|
+
url: '/dev/demos/stepper',
|
|
266
|
+
category: 'Navigation',
|
|
267
|
+
status: 'demo',
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
name: 'Switch',
|
|
271
|
+
description: 'Binary toggle control with required, disabled, and indeterminate states',
|
|
272
|
+
url: '/dev/demos/switch',
|
|
273
|
+
category: 'Forms',
|
|
274
|
+
status: 'demo',
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
name: 'Table',
|
|
278
|
+
description: 'Data tables with sorting, pagination, selection, and inline editing',
|
|
279
|
+
url: '/dev/demos/table',
|
|
280
|
+
category: 'Data',
|
|
281
|
+
status: 'demo',
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
name: 'Tabs',
|
|
285
|
+
description:
|
|
286
|
+
'Organize content into logical sections with bordered, boxed, icon-only, and disabled tab variants',
|
|
287
|
+
url: '/dev/demos/tabs',
|
|
288
|
+
category: 'Navigation',
|
|
289
|
+
status: 'demo',
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
name: 'Textarea',
|
|
293
|
+
description: 'Multi-line text field with helper messages, validation, and clearable controls',
|
|
294
|
+
url: '/dev/demos/textarea',
|
|
295
|
+
category: 'Forms',
|
|
296
|
+
status: 'demo',
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
name: 'Text Input',
|
|
300
|
+
description: 'Single-line text fields with various types, validation, and interactive features',
|
|
301
|
+
url: '/dev/demos/text-input',
|
|
302
|
+
category: 'Forms',
|
|
303
|
+
status: 'demo',
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
name: 'Theme Switcher',
|
|
307
|
+
description: 'Toggle between light and dark themes with system preference detection',
|
|
308
|
+
url: '/dev/demos/theme-switcher',
|
|
309
|
+
category: 'Display',
|
|
310
|
+
status: 'demo',
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
name: 'Time Input',
|
|
314
|
+
description:
|
|
315
|
+
'Single-field time picker with min/max limits, seconds support, and datalist suggestions',
|
|
316
|
+
url: '/dev/demos/time-input',
|
|
317
|
+
category: 'Forms',
|
|
318
|
+
status: 'demo',
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
name: 'Toast',
|
|
322
|
+
description:
|
|
323
|
+
'Lightweight confirmations or alerts that appear briefly without disrupting workflow',
|
|
324
|
+
url: '/dev/demos/toast',
|
|
325
|
+
category: 'Feedback',
|
|
326
|
+
status: 'demo',
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
name: 'Toolbar',
|
|
330
|
+
description:
|
|
331
|
+
'Organize actions for a focused context with start, center, and end slots for commands',
|
|
332
|
+
url: '/dev/demos/toolbar',
|
|
333
|
+
category: 'Layout',
|
|
334
|
+
status: 'demo',
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
name: 'Tooltip',
|
|
338
|
+
description: 'Contextual helper messages that appear on hover or focus around any trigger',
|
|
339
|
+
url: '/dev/demos/tooltip',
|
|
340
|
+
category: 'Feedback',
|
|
341
|
+
status: 'demo',
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
name: 'Utility Panel',
|
|
345
|
+
description: 'Collapsible side panel for contextual tools and secondary content',
|
|
346
|
+
url: '/dev/demos/utility-panel',
|
|
347
|
+
category: 'Layout',
|
|
348
|
+
status: 'demo',
|
|
349
|
+
},
|
|
350
|
+
];
|
|
351
|
+
|
|
352
|
+
const categories: Category[] = [
|
|
353
|
+
{ name: 'All', value: 'all' },
|
|
354
|
+
{ name: 'Forms', value: 'forms' },
|
|
355
|
+
{ name: 'Layout', value: 'layout' },
|
|
356
|
+
{ name: 'Navigation', value: 'navigation' },
|
|
357
|
+
{ name: 'Display', value: 'display' },
|
|
358
|
+
{ name: 'Feedback', value: 'feedback' },
|
|
359
|
+
{ name: 'Overlays', value: 'overlays' },
|
|
360
|
+
{ name: 'Data', value: 'data' },
|
|
361
|
+
];
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Components gallery page.
|
|
365
|
+
*
|
|
366
|
+
* Provides a navigation hub listing all available Modus component demos
|
|
367
|
+
* organized by category with filtering and card grid layout.
|
|
368
|
+
*/
|
|
369
|
+
@Component({
|
|
370
|
+
selector: 'app-components-gallery',
|
|
371
|
+
standalone: true,
|
|
372
|
+
imports: [CommonModule, RouterModule, ModusButtonComponent, ModusBadgeComponent],
|
|
373
|
+
template: `
|
|
374
|
+
<div class="max-w-6xl mx-auto p-8">
|
|
375
|
+
<div class="text-center mb-12">
|
|
376
|
+
<div class="text-4xl font-semibold mb-4 text-foreground">Modus Web Components</div>
|
|
377
|
+
<div class="text-lg leading-relaxed text-foreground text-center">
|
|
378
|
+
Explore all available Angular Modus Web Components.
|
|
379
|
+
</div>
|
|
380
|
+
</div>
|
|
381
|
+
|
|
382
|
+
<!-- Category Filter -->
|
|
383
|
+
<div class="mb-12 p-8 bg-card rounded-lg border-default">
|
|
384
|
+
<div class="text-2xl font-semibold mb-4 text-foreground">Filter by Category</div>
|
|
385
|
+
<div class="flex flex-wrap gap-2">
|
|
386
|
+
@for (category of categories; track category.value) {
|
|
387
|
+
<modus-button
|
|
388
|
+
[color]="selectedCategory() === category.value ? 'secondary' : 'secondary'"
|
|
389
|
+
[variant]="selectedCategory() === category.value ? 'filled' : 'outlined'"
|
|
390
|
+
size="md"
|
|
391
|
+
(buttonClick)="setCategory(category.value)"
|
|
392
|
+
>
|
|
393
|
+
{{ category.name }}
|
|
394
|
+
</modus-button>
|
|
395
|
+
}
|
|
396
|
+
</div>
|
|
397
|
+
</div>
|
|
398
|
+
|
|
399
|
+
<!-- Components Grid -->
|
|
400
|
+
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
401
|
+
@for (component of filteredComponents(); track component.url) {
|
|
402
|
+
<div
|
|
403
|
+
class="bg-card rounded-lg p-6 hover:shadow-lg transition-all duration-200 border-default"
|
|
404
|
+
>
|
|
405
|
+
<div class="flex items-start justify-between mb-4">
|
|
406
|
+
<div>
|
|
407
|
+
<div class="text-xl font-semibold text-foreground mb-2">{{ component.name }}</div>
|
|
408
|
+
<div class="text-sm text-muted-foreground mb-2">{{ component.category }}</div>
|
|
409
|
+
</div>
|
|
410
|
+
<div class="flex items-center gap-2">
|
|
411
|
+
<modus-badge
|
|
412
|
+
[color]="component.status === 'ready' ? 'success' : 'warning'"
|
|
413
|
+
size="md"
|
|
414
|
+
variant="filled"
|
|
415
|
+
>
|
|
416
|
+
{{ component.status === 'ready' ? 'Ready' : 'Demo' }}
|
|
417
|
+
</modus-badge>
|
|
418
|
+
</div>
|
|
419
|
+
</div>
|
|
420
|
+
|
|
421
|
+
<div class="text-foreground mb-4 text-sm leading-relaxed">
|
|
422
|
+
{{ component.description }}
|
|
423
|
+
</div>
|
|
424
|
+
|
|
425
|
+
<div class="w-full">
|
|
426
|
+
<modus-button
|
|
427
|
+
color="primary"
|
|
428
|
+
variant="filled"
|
|
429
|
+
size="md"
|
|
430
|
+
[fullWidth]="true"
|
|
431
|
+
(buttonClick)="navigateTo(component.url)"
|
|
432
|
+
>
|
|
433
|
+
View Demo
|
|
434
|
+
</modus-button>
|
|
435
|
+
</div>
|
|
436
|
+
</div>
|
|
437
|
+
}
|
|
438
|
+
</div>
|
|
439
|
+
|
|
440
|
+
<!-- Footer -->
|
|
441
|
+
<div class="text-center pt-8 box-content">
|
|
442
|
+
<div class="flex items-center justify-center gap-3 mb-3">
|
|
443
|
+
<img
|
|
444
|
+
src="/angular-icon.svg"
|
|
445
|
+
alt="Angular"
|
|
446
|
+
class="h-6 w-6"
|
|
447
|
+
aria-hidden="true"
|
|
448
|
+
/>
|
|
449
|
+
<div class="text-foreground-40">+</div>
|
|
450
|
+
<img
|
|
451
|
+
src="/vite.svg"
|
|
452
|
+
alt="Vite"
|
|
453
|
+
class="h-6 w-6"
|
|
454
|
+
aria-hidden="true"
|
|
455
|
+
/>
|
|
456
|
+
</div>
|
|
457
|
+
<div class="text-sm font-mono text-foreground-40">
|
|
458
|
+
2026 Modus Angular App v1.0.0 + Angular 20 + Vite + Tailwind CSS -
|
|
459
|
+
Created by Julian Oczkowski
|
|
460
|
+
</div>
|
|
461
|
+
</div>
|
|
462
|
+
</div>
|
|
463
|
+
`,
|
|
464
|
+
})
|
|
465
|
+
export class ComponentsGalleryComponent {
|
|
466
|
+
private readonly router = inject(Router);
|
|
467
|
+
|
|
468
|
+
readonly categories = categories;
|
|
469
|
+
readonly selectedCategory = signal<string>('all');
|
|
470
|
+
|
|
471
|
+
readonly filteredComponents = computed(() => {
|
|
472
|
+
const category = this.selectedCategory();
|
|
473
|
+
if (category === 'all') {
|
|
474
|
+
return componentDemos;
|
|
475
|
+
}
|
|
476
|
+
return componentDemos.filter((component) => component.category.toLowerCase() === category);
|
|
477
|
+
});
|
|
478
|
+
|
|
479
|
+
setCategory(category: string): void {
|
|
480
|
+
this.selectedCategory.set(category);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
navigateTo(url: string): void {
|
|
484
|
+
this.router.navigate([url]);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { Component, signal, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { DemoExampleComponent } from '../../demos/shared/demo-example.component';
|
|
4
|
+
import { ModusAlertComponent } from '../../components/modus-alert.component';
|
|
5
|
+
import { modusIcons, totalIconCount, categoryCount } from '../../data/modus-icons';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Icons page component.
|
|
9
|
+
*
|
|
10
|
+
* Displays a comprehensive view of all available Modus icons organized by category.
|
|
11
|
+
* Includes click-to-copy functionality for easy icon usage.
|
|
12
|
+
*/
|
|
13
|
+
@Component({
|
|
14
|
+
selector: 'app-icons',
|
|
15
|
+
standalone: true,
|
|
16
|
+
imports: [CommonModule, DemoExampleComponent, ModusAlertComponent],
|
|
17
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
18
|
+
template: `
|
|
19
|
+
<div class="max-w-6xl mx-auto p-8">
|
|
20
|
+
<div class="text-center mb-12">
|
|
21
|
+
<div class="text-4xl font-semibold mb-4 text-foreground">
|
|
22
|
+
Modus Icons Gallery
|
|
23
|
+
</div>
|
|
24
|
+
<div class="text-lg leading-relaxed text-foreground text-center">
|
|
25
|
+
Complete showcase of all available Modus icons organized by category. Click on any icon to copy its name.
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<div class="flex flex-col gap-6">
|
|
30
|
+
<demo-example
|
|
31
|
+
title="Icon Usage"
|
|
32
|
+
description="All icons use the modus-icons class with underscore_case names. Size with Tailwind classes and color with design system colors."
|
|
33
|
+
>
|
|
34
|
+
<div class="flex flex-col gap-4">
|
|
35
|
+
<div class="text-sm text-muted-foreground">
|
|
36
|
+
Total Icons:
|
|
37
|
+
<div class="font-semibold text-foreground inline">{{ totalIconCount }}</div>
|
|
38
|
+
</div>
|
|
39
|
+
<div class="text-sm text-muted-foreground">
|
|
40
|
+
Categories:
|
|
41
|
+
<div class="font-semibold text-foreground inline">{{ categoryCount }}</div>
|
|
42
|
+
</div>
|
|
43
|
+
<div class="text-xs text-muted-foreground mt-2">
|
|
44
|
+
Click on any icon below to copy its name to your clipboard.
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</demo-example>
|
|
48
|
+
|
|
49
|
+
@for (category of iconCategories; track category) {
|
|
50
|
+
<demo-example
|
|
51
|
+
[title]="category"
|
|
52
|
+
[description]="getIconCount(category) + ' icons in this category'"
|
|
53
|
+
>
|
|
54
|
+
<div class="grid grid-cols-5 gap-4">
|
|
55
|
+
@for (iconName of getIcons(category); track iconName) {
|
|
56
|
+
<div
|
|
57
|
+
class="flex flex-col items-center gap-2 p-3 rounded-lg border-default hover:border-primary hover:scale-105 hover:shadow-md transition-all cursor-pointer group"
|
|
58
|
+
(click)="copyIconName(iconName)"
|
|
59
|
+
[title]="'Click to copy: ' + iconName"
|
|
60
|
+
>
|
|
61
|
+
<i
|
|
62
|
+
class="modus-icons text-2xl text-foreground group-hover:text-primary transition-colors"
|
|
63
|
+
>
|
|
64
|
+
{{ iconName }}
|
|
65
|
+
</i>
|
|
66
|
+
<div
|
|
67
|
+
class="text-xs text-muted-foreground group-hover:text-foreground text-center break-all leading-tight transition-colors"
|
|
68
|
+
>
|
|
69
|
+
{{ iconName }}
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
}
|
|
73
|
+
</div>
|
|
74
|
+
</demo-example>
|
|
75
|
+
}
|
|
76
|
+
</div>
|
|
77
|
+
|
|
78
|
+
<!-- Footer -->
|
|
79
|
+
<div class="text-center pt-8 box-content">
|
|
80
|
+
<div class="flex items-center justify-center gap-3 mb-3">
|
|
81
|
+
<img
|
|
82
|
+
src="/angular-icon.svg"
|
|
83
|
+
alt="Angular"
|
|
84
|
+
class="h-6 w-6"
|
|
85
|
+
aria-hidden="true"
|
|
86
|
+
/>
|
|
87
|
+
<div class="text-foreground-40">+</div>
|
|
88
|
+
<img
|
|
89
|
+
src="/vite.svg"
|
|
90
|
+
alt="Vite"
|
|
91
|
+
class="h-6 w-6"
|
|
92
|
+
aria-hidden="true"
|
|
93
|
+
/>
|
|
94
|
+
</div>
|
|
95
|
+
<div class="text-sm font-mono text-foreground-40">
|
|
96
|
+
2026 Modus Angular App v1.0.0 + Angular 20 + Vite + Tailwind CSS -
|
|
97
|
+
Created by Julian Oczkowski
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
|
|
102
|
+
<!-- Alert notification for copy feedback - fixed at bottom -->
|
|
103
|
+
@if (showAlert()) {
|
|
104
|
+
<div class="fixed bottom-4 left-1/2 -translate-x-1/2 z-50">
|
|
105
|
+
<modus-alert
|
|
106
|
+
alertTitle="Icon name copied!"
|
|
107
|
+
variant="success"
|
|
108
|
+
[dismissible]="true"
|
|
109
|
+
[delay]="2000"
|
|
110
|
+
(dismiss)="hideAlert()"
|
|
111
|
+
/>
|
|
112
|
+
</div>
|
|
113
|
+
}
|
|
114
|
+
`,
|
|
115
|
+
})
|
|
116
|
+
export class IconsComponent {
|
|
117
|
+
readonly totalIconCount = totalIconCount;
|
|
118
|
+
readonly categoryCount = categoryCount;
|
|
119
|
+
readonly iconCategories = Object.keys(modusIcons);
|
|
120
|
+
readonly showAlert = signal(false);
|
|
121
|
+
|
|
122
|
+
getIcons(category: string): string[] {
|
|
123
|
+
return modusIcons[category] || [];
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
getIconCount(category: string): number {
|
|
127
|
+
return this.getIcons(category).length;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
copyIconName(iconName: string): void {
|
|
131
|
+
navigator.clipboard.writeText(iconName).then(
|
|
132
|
+
() => {
|
|
133
|
+
// Show alert notification
|
|
134
|
+
this.showAlert.set(true);
|
|
135
|
+
// Hide alert after delay
|
|
136
|
+
setTimeout(() => {
|
|
137
|
+
this.showAlert.set(false);
|
|
138
|
+
}, 2000);
|
|
139
|
+
},
|
|
140
|
+
(err) => {
|
|
141
|
+
console.error('Failed to copy:', err);
|
|
142
|
+
},
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
hideAlert(): void {
|
|
147
|
+
this.showAlert.set(false);
|
|
148
|
+
}
|
|
149
|
+
}
|