@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,303 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcNavbar } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Text replacements for the navbar.
|
|
8
|
+
*/
|
|
9
|
+
export interface INavbarTextOverrides {
|
|
10
|
+
/** Replaces the text for "Apps" in the condensed menu. */
|
|
11
|
+
apps?: string;
|
|
12
|
+
/** Replaces the text for "Help" in the condensed menu. */
|
|
13
|
+
help?: string;
|
|
14
|
+
/** Replaces the text for "Notifications" in the condensed menu. */
|
|
15
|
+
notifications?: string;
|
|
16
|
+
/** Replaces the text for "Search" in the condensed menu. */
|
|
17
|
+
search?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Controls the visibility of individual navbar buttons.
|
|
22
|
+
*/
|
|
23
|
+
export interface INavbarVisibility {
|
|
24
|
+
/** Controls the visibility of the AI button. */
|
|
25
|
+
ai?: boolean;
|
|
26
|
+
/** Controls visibility of the apps button. */
|
|
27
|
+
apps?: boolean;
|
|
28
|
+
/** Controls visibility of the help button. */
|
|
29
|
+
help?: boolean;
|
|
30
|
+
/** Controls visibility of the main menu button. */
|
|
31
|
+
mainMenu?: boolean;
|
|
32
|
+
/** Controls visibility of the notifications button. */
|
|
33
|
+
notifications?: boolean;
|
|
34
|
+
/** Controls visibility of the search button. */
|
|
35
|
+
search?: boolean;
|
|
36
|
+
/** Controls visibility of the search input. */
|
|
37
|
+
searchInput?: boolean;
|
|
38
|
+
/** Controls visibility of the user button. */
|
|
39
|
+
user?: boolean;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* User information used to render the user card.
|
|
44
|
+
*/
|
|
45
|
+
export interface INavbarUserCard {
|
|
46
|
+
/** The alt value to set on the avatar. */
|
|
47
|
+
avatarAlt?: string;
|
|
48
|
+
/** The avatar image source value. */
|
|
49
|
+
avatarSrc?: string;
|
|
50
|
+
/** The email address of the user. */
|
|
51
|
+
email: string;
|
|
52
|
+
/** Text override for the Access MyTrimble button. */
|
|
53
|
+
myTrimbleButton?: string;
|
|
54
|
+
/** The name of the user. */
|
|
55
|
+
name: string;
|
|
56
|
+
/** Text override for the Sign out button. */
|
|
57
|
+
signOutButton?: string;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Props supported by the {@link ModusNavbarComponent}.
|
|
62
|
+
*/
|
|
63
|
+
export interface ModusNavbarProps {
|
|
64
|
+
/** The open state of the apps menu. */
|
|
65
|
+
appsMenuOpen?: Components.ModusWcNavbar['appsMenuOpen'];
|
|
66
|
+
/** Applies condensed layout and styling. */
|
|
67
|
+
condensed?: Components.ModusWcNavbar['condensed'];
|
|
68
|
+
/** The open state of the condensed menu. */
|
|
69
|
+
condensedMenuOpen?: Components.ModusWcNavbar['condensedMenuOpen'];
|
|
70
|
+
/** Custom CSS class applied to the host element. */
|
|
71
|
+
className?: Components.ModusWcNavbar['customClass'];
|
|
72
|
+
/** The open state of the main menu. */
|
|
73
|
+
mainMenuOpen?: Components.ModusWcNavbar['mainMenuOpen'];
|
|
74
|
+
/** The open state of the notifications menu. */
|
|
75
|
+
notificationsMenuOpen?: Components.ModusWcNavbar['notificationsMenuOpen'];
|
|
76
|
+
/** Debounce time in milliseconds for search input changes. */
|
|
77
|
+
searchDebounceMs?: Components.ModusWcNavbar['searchDebounceMs'];
|
|
78
|
+
/** The open state of the search input. */
|
|
79
|
+
searchInputOpen?: Components.ModusWcNavbar['searchInputOpen'];
|
|
80
|
+
/** Text replacements for the navbar. */
|
|
81
|
+
textOverrides?: INavbarTextOverrides;
|
|
82
|
+
/** User information used to render the user card. */
|
|
83
|
+
userCard: INavbarUserCard;
|
|
84
|
+
/** The open state of the user menu. */
|
|
85
|
+
userMenuOpen?: Components.ModusWcNavbar['userMenuOpen'];
|
|
86
|
+
/** The visibility of individual navbar buttons. */
|
|
87
|
+
visibility?: INavbarVisibility;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Angular wrapper for the Modus navbar web component.
|
|
92
|
+
*
|
|
93
|
+
* The navbar component supports projecting custom content into several slots:
|
|
94
|
+
* - `main-menu` slot: For custom main menu content
|
|
95
|
+
* - `notifications` slot: For custom notifications menu content
|
|
96
|
+
* - `apps` slot: For custom apps menu content
|
|
97
|
+
* - `start` slot: For custom content at the start of the navbar
|
|
98
|
+
* - `center` slot: For custom content at the center of the navbar
|
|
99
|
+
* - `end` slot: For custom content at the end of the navbar
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```html
|
|
103
|
+
* <modus-navbar
|
|
104
|
+
* [userCard]="userInfo"
|
|
105
|
+
* [visibility]="{ user: true, search: true }"
|
|
106
|
+
* (userMenuOpenChange)="handleUserMenuChange($event)"
|
|
107
|
+
* />
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
@Component({
|
|
111
|
+
selector: 'modus-navbar',
|
|
112
|
+
imports: [CommonModule, ModusWcNavbar],
|
|
113
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
114
|
+
template: `
|
|
115
|
+
<modus-wc-navbar
|
|
116
|
+
[appsMenuOpen]="appsMenuOpen()"
|
|
117
|
+
[condensed]="condensed()"
|
|
118
|
+
[condensedMenuOpen]="condensedMenuOpen()"
|
|
119
|
+
[customClass]="className()"
|
|
120
|
+
[mainMenuOpen]="mainMenuOpen()"
|
|
121
|
+
[notificationsMenuOpen]="notificationsMenuOpen()"
|
|
122
|
+
[searchDebounceMs]="searchDebounceMs()"
|
|
123
|
+
[searchInputOpen]="searchInputOpen()"
|
|
124
|
+
[textOverrides]="textOverrides()"
|
|
125
|
+
[userCard]="userCard()"
|
|
126
|
+
[userMenuOpen]="userMenuOpen()"
|
|
127
|
+
[visibility]="visibility()"
|
|
128
|
+
(aiClick)="handleAiClick($event)"
|
|
129
|
+
(appsClick)="handleAppsClick($event)"
|
|
130
|
+
(appsMenuOpenChange)="handleAppsMenuOpenChange($event)"
|
|
131
|
+
(condensedMenuOpenChange)="handleCondensedMenuOpenChange($event)"
|
|
132
|
+
(helpClick)="handleHelpClick($event)"
|
|
133
|
+
(mainMenuOpenChange)="handleMainMenuOpenChange($event)"
|
|
134
|
+
(myTrimbleClick)="handleMyTrimbleClick($event)"
|
|
135
|
+
(notificationsClick)="handleNotificationsClick($event)"
|
|
136
|
+
(notificationsMenuOpenChange)="handleNotificationsMenuOpenChange($event)"
|
|
137
|
+
(searchChange)="handleSearchChange($event)"
|
|
138
|
+
(searchClick)="handleSearchClick($event)"
|
|
139
|
+
(searchInputOpenChange)="handleSearchInputOpenChange($event)"
|
|
140
|
+
(signOutClick)="handleSignOutClick($event)"
|
|
141
|
+
(trimbleLogoClick)="handleTrimbleLogoClick($event)"
|
|
142
|
+
(userMenuOpenChange)="handleUserMenuOpenChange($event)"
|
|
143
|
+
>
|
|
144
|
+
<ng-content select="[slot='main-menu']" slot="main-menu" />
|
|
145
|
+
<ng-content select="[slot='notifications']" slot="notifications" />
|
|
146
|
+
<ng-content select="[slot='apps']" slot="apps" />
|
|
147
|
+
<ng-content select="[slot='start']" slot="start" />
|
|
148
|
+
<ng-content select="[slot='center']" slot="center" />
|
|
149
|
+
<ng-content select="[slot='end']" slot="end" />
|
|
150
|
+
</modus-wc-navbar>
|
|
151
|
+
`,
|
|
152
|
+
})
|
|
153
|
+
export class ModusNavbarComponent {
|
|
154
|
+
/** The open state of the apps menu. */
|
|
155
|
+
readonly appsMenuOpen = input<boolean | undefined>(false);
|
|
156
|
+
|
|
157
|
+
/** Applies condensed layout and styling. */
|
|
158
|
+
readonly condensed = input<boolean | undefined>(false);
|
|
159
|
+
|
|
160
|
+
/** The open state of the condensed menu. */
|
|
161
|
+
readonly condensedMenuOpen = input<boolean | undefined>(false);
|
|
162
|
+
|
|
163
|
+
/** Custom CSS class applied to the host element. */
|
|
164
|
+
readonly className = input<string | undefined>();
|
|
165
|
+
|
|
166
|
+
/** The open state of the main menu. */
|
|
167
|
+
readonly mainMenuOpen = input<boolean | undefined>(false);
|
|
168
|
+
|
|
169
|
+
/** The open state of the notifications menu. */
|
|
170
|
+
readonly notificationsMenuOpen = input<boolean | undefined>(false);
|
|
171
|
+
|
|
172
|
+
/** Debounce time in milliseconds for search input changes. */
|
|
173
|
+
readonly searchDebounceMs = input<number | undefined>(300);
|
|
174
|
+
|
|
175
|
+
/** The open state of the search input. */
|
|
176
|
+
readonly searchInputOpen = input<boolean | undefined>(false);
|
|
177
|
+
|
|
178
|
+
/** Text replacements for the navbar. */
|
|
179
|
+
readonly textOverrides = input<INavbarTextOverrides | undefined>();
|
|
180
|
+
|
|
181
|
+
/** User information used to render the user card. */
|
|
182
|
+
readonly userCard = input.required<INavbarUserCard>();
|
|
183
|
+
|
|
184
|
+
/** The open state of the user menu. */
|
|
185
|
+
readonly userMenuOpen = input<boolean | undefined>(false);
|
|
186
|
+
|
|
187
|
+
/** The visibility of individual navbar buttons. */
|
|
188
|
+
readonly visibility = input<INavbarVisibility | undefined>({
|
|
189
|
+
ai: false,
|
|
190
|
+
apps: false,
|
|
191
|
+
help: false,
|
|
192
|
+
mainMenu: false,
|
|
193
|
+
notifications: false,
|
|
194
|
+
search: false,
|
|
195
|
+
searchInput: false,
|
|
196
|
+
user: true,
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
/** Emits when the AI button is clicked or activated via keyboard. */
|
|
200
|
+
readonly aiClick = output<MouseEvent | KeyboardEvent>();
|
|
201
|
+
|
|
202
|
+
/** Emits when the apps button is clicked or activated via keyboard. */
|
|
203
|
+
readonly appsClick = output<MouseEvent | KeyboardEvent>();
|
|
204
|
+
|
|
205
|
+
/** Emits when the apps menu open state changes. */
|
|
206
|
+
readonly appsMenuOpenChange = output<boolean>();
|
|
207
|
+
|
|
208
|
+
/** Emits when the condensed menu open state changes. */
|
|
209
|
+
readonly condensedMenuOpenChange = output<boolean>();
|
|
210
|
+
|
|
211
|
+
/** Emits when the help button is clicked or activated via keyboard. */
|
|
212
|
+
readonly helpClick = output<MouseEvent | KeyboardEvent>();
|
|
213
|
+
|
|
214
|
+
/** Emits when the main menu open state changes. */
|
|
215
|
+
readonly mainMenuOpenChange = output<boolean>();
|
|
216
|
+
|
|
217
|
+
/** Emits when the user profile Access MyTrimble button is clicked. */
|
|
218
|
+
readonly myTrimbleClick = output<MouseEvent | KeyboardEvent>();
|
|
219
|
+
|
|
220
|
+
/** Emits when the notifications button is clicked or activated via keyboard. */
|
|
221
|
+
readonly notificationsClick = output<MouseEvent | KeyboardEvent>();
|
|
222
|
+
|
|
223
|
+
/** Emits when the notifications menu open state changes. */
|
|
224
|
+
readonly notificationsMenuOpenChange = output<boolean>();
|
|
225
|
+
|
|
226
|
+
/** Emits when the search input value is changed. */
|
|
227
|
+
readonly searchChange = output<{ value: string }>();
|
|
228
|
+
|
|
229
|
+
/** Emits when the search button is clicked or activated via keyboard. */
|
|
230
|
+
readonly searchClick = output<MouseEvent | KeyboardEvent>();
|
|
231
|
+
|
|
232
|
+
/** Emits when the search input open state changes. */
|
|
233
|
+
readonly searchInputOpenChange = output<boolean>();
|
|
234
|
+
|
|
235
|
+
/** Emits when the user profile sign out button is clicked. */
|
|
236
|
+
readonly signOutClick = output<MouseEvent | KeyboardEvent>();
|
|
237
|
+
|
|
238
|
+
/** Emits when the Trimble logo is clicked or activated via keyboard. */
|
|
239
|
+
readonly trimbleLogoClick = output<MouseEvent | KeyboardEvent>();
|
|
240
|
+
|
|
241
|
+
/** Emits when the user menu open state changes. */
|
|
242
|
+
readonly userMenuOpenChange = output<boolean>();
|
|
243
|
+
|
|
244
|
+
handleAiClick(event: CustomEvent<MouseEvent | KeyboardEvent>): void {
|
|
245
|
+
this.aiClick.emit(event.detail);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
handleAppsClick(event: CustomEvent<MouseEvent | KeyboardEvent>): void {
|
|
249
|
+
this.appsClick.emit(event.detail);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
handleAppsMenuOpenChange(event: CustomEvent<boolean>): void {
|
|
253
|
+
this.appsMenuOpenChange.emit(event.detail);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
handleCondensedMenuOpenChange(event: CustomEvent<boolean>): void {
|
|
257
|
+
this.condensedMenuOpenChange.emit(event.detail);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
handleHelpClick(event: CustomEvent<MouseEvent | KeyboardEvent>): void {
|
|
261
|
+
this.helpClick.emit(event.detail);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
handleMainMenuOpenChange(event: CustomEvent<boolean>): void {
|
|
265
|
+
this.mainMenuOpenChange.emit(event.detail);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
handleMyTrimbleClick(event: CustomEvent<MouseEvent | KeyboardEvent>): void {
|
|
269
|
+
this.myTrimbleClick.emit(event.detail);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
handleNotificationsClick(event: CustomEvent<MouseEvent | KeyboardEvent>): void {
|
|
273
|
+
this.notificationsClick.emit(event.detail);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
handleNotificationsMenuOpenChange(event: CustomEvent<boolean>): void {
|
|
277
|
+
this.notificationsMenuOpenChange.emit(event.detail);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
handleSearchChange(event: CustomEvent<{ value: string }>): void {
|
|
281
|
+
this.searchChange.emit(event.detail);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
handleSearchClick(event: CustomEvent<MouseEvent | KeyboardEvent>): void {
|
|
285
|
+
this.searchClick.emit(event.detail);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
handleSearchInputOpenChange(event: CustomEvent<boolean>): void {
|
|
289
|
+
this.searchInputOpenChange.emit(event.detail);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
handleSignOutClick(event: CustomEvent<MouseEvent | KeyboardEvent>): void {
|
|
293
|
+
this.signOutClick.emit(event.detail);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
handleTrimbleLogoClick(event: CustomEvent<MouseEvent | KeyboardEvent>): void {
|
|
297
|
+
this.trimbleLogoClick.emit(event.detail);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
handleUserMenuOpenChange(event: CustomEvent<boolean>): void {
|
|
301
|
+
this.userMenuOpenChange.emit(event.detail);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcNumberInput } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type {
|
|
5
|
+
Components,
|
|
6
|
+
IInputFeedbackProp,
|
|
7
|
+
ModusSize,
|
|
8
|
+
} from '@trimble-oss/moduswebcomponents';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Props supported by the {@link ModusNumberInputComponent}.
|
|
12
|
+
*/
|
|
13
|
+
export interface ModusNumberInputProps {
|
|
14
|
+
/** HTML autocomplete hint for the control. */
|
|
15
|
+
autoComplete?: Components.ModusWcNumberInput['autoComplete'];
|
|
16
|
+
/** Indicates that the input should render its border. */
|
|
17
|
+
bordered?: Components.ModusWcNumberInput['bordered'];
|
|
18
|
+
/** Currency symbol displayed before the input value. */
|
|
19
|
+
currencySymbol?: Components.ModusWcNumberInput['currencySymbol'];
|
|
20
|
+
/** Custom CSS class applied to the input. */
|
|
21
|
+
className?: Components.ModusWcNumberInput['customClass'];
|
|
22
|
+
/** Disables the input. */
|
|
23
|
+
disabled?: Components.ModusWcNumberInput['disabled'];
|
|
24
|
+
/** Feedback configuration rendered below the input. */
|
|
25
|
+
feedback?: IInputFeedbackProp;
|
|
26
|
+
/** Identifier applied to the underlying input element. */
|
|
27
|
+
inputId?: Components.ModusWcNumberInput['inputId'];
|
|
28
|
+
/** Tab index applied to the input. */
|
|
29
|
+
inputTabIndex?: Components.ModusWcNumberInput['inputTabIndex'];
|
|
30
|
+
/** Label text displayed above the input. */
|
|
31
|
+
label?: Components.ModusWcNumberInput['label'];
|
|
32
|
+
/** Maximum value accepted. */
|
|
33
|
+
max?: Components.ModusWcNumberInput['max'];
|
|
34
|
+
/** Minimum value accepted. */
|
|
35
|
+
min?: Components.ModusWcNumberInput['min'];
|
|
36
|
+
/** Name attribute submitted in forms. */
|
|
37
|
+
name?: Components.ModusWcNumberInput['name'];
|
|
38
|
+
/** Hint for mobile keyboard type. */
|
|
39
|
+
inputMode?: 'decimal' | 'numeric' | 'none';
|
|
40
|
+
/** Placeholder text displayed when empty. */
|
|
41
|
+
placeholder?: Components.ModusWcNumberInput['placeholder'];
|
|
42
|
+
/** Prevents editing when true. */
|
|
43
|
+
readOnly?: Components.ModusWcNumberInput['readOnly'];
|
|
44
|
+
/** Marks the field as required. */
|
|
45
|
+
required?: Components.ModusWcNumberInput['required'];
|
|
46
|
+
/** Control size token. */
|
|
47
|
+
size?: ModusSize;
|
|
48
|
+
/** Step interval for the input value. */
|
|
49
|
+
step?: Components.ModusWcNumberInput['step'];
|
|
50
|
+
/** Input type variant. */
|
|
51
|
+
type?: Components.ModusWcNumberInput['type'];
|
|
52
|
+
/** Current input value. */
|
|
53
|
+
value?: Components.ModusWcNumberInput['value'];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Angular wrapper for the Modus number input web component.
|
|
58
|
+
*/
|
|
59
|
+
@Component({
|
|
60
|
+
selector: 'modus-number-input',
|
|
61
|
+
imports: [CommonModule, ModusWcNumberInput],
|
|
62
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
63
|
+
template: `
|
|
64
|
+
<modus-wc-number-input
|
|
65
|
+
[autoComplete]="autoComplete()"
|
|
66
|
+
[bordered]="bordered()"
|
|
67
|
+
[currencySymbol]="currencySymbol()"
|
|
68
|
+
[customClass]="className()"
|
|
69
|
+
[disabled]="disabled()"
|
|
70
|
+
[feedback]="feedback()"
|
|
71
|
+
[inputId]="inputId()"
|
|
72
|
+
[inputTabIndex]="inputTabIndex()"
|
|
73
|
+
[label]="label()"
|
|
74
|
+
[max]="max()"
|
|
75
|
+
[min]="min()"
|
|
76
|
+
[name]="name()"
|
|
77
|
+
[attr.inputmode]="inputMode()"
|
|
78
|
+
[placeholder]="placeholder()"
|
|
79
|
+
[readOnly]="readOnly()"
|
|
80
|
+
[required]="required()"
|
|
81
|
+
[size]="size()"
|
|
82
|
+
[step]="step()"
|
|
83
|
+
[type]="type()"
|
|
84
|
+
[value]="value()"
|
|
85
|
+
(inputBlur)="handleBlur($event)"
|
|
86
|
+
(inputChange)="handleChange($event)"
|
|
87
|
+
(inputFocus)="handleFocus($event)"
|
|
88
|
+
>
|
|
89
|
+
<ng-content />
|
|
90
|
+
</modus-wc-number-input>
|
|
91
|
+
`,
|
|
92
|
+
})
|
|
93
|
+
export class ModusNumberInputComponent {
|
|
94
|
+
/** HTML autocomplete hint for the control. */
|
|
95
|
+
readonly autoComplete = input<'on' | 'off' | undefined>();
|
|
96
|
+
|
|
97
|
+
/** Indicates that the input should render its border. */
|
|
98
|
+
readonly bordered = input<boolean | undefined>(true);
|
|
99
|
+
|
|
100
|
+
/** Currency symbol displayed before the input value. */
|
|
101
|
+
readonly currencySymbol = input<string | undefined>('');
|
|
102
|
+
|
|
103
|
+
/** Custom CSS class applied to the input. */
|
|
104
|
+
readonly className = input<string | undefined>();
|
|
105
|
+
|
|
106
|
+
/** Disables the input. */
|
|
107
|
+
readonly disabled = input<boolean | undefined>(false);
|
|
108
|
+
|
|
109
|
+
/** Feedback configuration rendered below the input. */
|
|
110
|
+
readonly feedback = input<IInputFeedbackProp | undefined>();
|
|
111
|
+
|
|
112
|
+
/** Identifier applied to the underlying input element. */
|
|
113
|
+
readonly inputId = input<string | undefined>();
|
|
114
|
+
|
|
115
|
+
/** Tab index applied to the input. */
|
|
116
|
+
readonly inputTabIndex = input<number | undefined>();
|
|
117
|
+
|
|
118
|
+
/** Label text displayed above the input. */
|
|
119
|
+
readonly label = input<string | undefined>();
|
|
120
|
+
|
|
121
|
+
/** Maximum value accepted. */
|
|
122
|
+
readonly max = input<number | undefined>();
|
|
123
|
+
|
|
124
|
+
/** Minimum value accepted. */
|
|
125
|
+
readonly min = input<number | undefined>();
|
|
126
|
+
|
|
127
|
+
/** Name attribute submitted in forms. */
|
|
128
|
+
readonly name = input<string | undefined>();
|
|
129
|
+
|
|
130
|
+
/** Hint for mobile keyboard type. */
|
|
131
|
+
readonly inputMode = input<'decimal' | 'numeric' | 'none' | undefined>('numeric');
|
|
132
|
+
|
|
133
|
+
/** Placeholder text displayed when empty. */
|
|
134
|
+
readonly placeholder = input<string | undefined>('');
|
|
135
|
+
|
|
136
|
+
/** Prevents editing when true. */
|
|
137
|
+
readonly readOnly = input<boolean | undefined>(false);
|
|
138
|
+
|
|
139
|
+
/** Marks the field as required. */
|
|
140
|
+
readonly required = input<boolean | undefined>(false);
|
|
141
|
+
|
|
142
|
+
/** Control size token. */
|
|
143
|
+
readonly size = input<ModusSize | undefined>('md');
|
|
144
|
+
|
|
145
|
+
/** Step interval for the input value. */
|
|
146
|
+
readonly step = input<number | undefined>();
|
|
147
|
+
|
|
148
|
+
/** Input type variant. */
|
|
149
|
+
readonly type = input<'number' | 'range' | undefined>('number');
|
|
150
|
+
|
|
151
|
+
/** Current input value. */
|
|
152
|
+
readonly value = input<string | undefined>('');
|
|
153
|
+
|
|
154
|
+
/** Emits when the input loses focus. */
|
|
155
|
+
readonly inputBlur = output<FocusEvent>();
|
|
156
|
+
|
|
157
|
+
/** Emits when the value changes. */
|
|
158
|
+
readonly inputChange = output<InputEvent>();
|
|
159
|
+
|
|
160
|
+
/** Emits when the input gains focus. */
|
|
161
|
+
readonly inputFocus = output<FocusEvent>();
|
|
162
|
+
|
|
163
|
+
handleBlur(event: CustomEvent<FocusEvent>): void {
|
|
164
|
+
this.inputBlur.emit(event.detail);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
handleChange(event: CustomEvent<InputEvent>): void {
|
|
168
|
+
this.inputChange.emit(event.detail);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
handleFocus(event: CustomEvent<FocusEvent>): void {
|
|
172
|
+
this.inputFocus.emit(event.detail);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcPagination } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components, IAriaLabelValues, IPageChange, ModusSize } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusPaginationComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusPaginationProps {
|
|
10
|
+
/** ARIA label values for navigation controls. */
|
|
11
|
+
ariaLabelValues?: IAriaLabelValues;
|
|
12
|
+
/** Total number of pages. */
|
|
13
|
+
count: Components.ModusWcPagination['count'];
|
|
14
|
+
/** Custom CSS class applied to the root element. */
|
|
15
|
+
className?: Components.ModusWcPagination['customClass'];
|
|
16
|
+
/** Text label for the next button. */
|
|
17
|
+
nextButtonText?: Components.ModusWcPagination['nextButtonText'];
|
|
18
|
+
/** Current active page number. */
|
|
19
|
+
page: Components.ModusWcPagination['page'];
|
|
20
|
+
/** Text label for the previous button. */
|
|
21
|
+
prevButtonText?: Components.ModusWcPagination['prevButtonText'];
|
|
22
|
+
/** Pagination size token. */
|
|
23
|
+
size?: ModusSize;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Angular wrapper for the Modus pagination web component.
|
|
28
|
+
*/
|
|
29
|
+
@Component({
|
|
30
|
+
selector: 'modus-pagination',
|
|
31
|
+
imports: [CommonModule, ModusWcPagination],
|
|
32
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
33
|
+
template: `
|
|
34
|
+
<modus-wc-pagination
|
|
35
|
+
[ariaLabelValues]="ariaLabelValues()"
|
|
36
|
+
[count]="count()"
|
|
37
|
+
[customClass]="className()"
|
|
38
|
+
[nextButtonText]="nextButtonText()"
|
|
39
|
+
[page]="page()"
|
|
40
|
+
[prevButtonText]="prevButtonText()"
|
|
41
|
+
[size]="size()"
|
|
42
|
+
(pageChange)="handlePageChange($event)"
|
|
43
|
+
/>
|
|
44
|
+
`,
|
|
45
|
+
})
|
|
46
|
+
export class ModusPaginationComponent {
|
|
47
|
+
/** ARIA label values for navigation controls. */
|
|
48
|
+
readonly ariaLabelValues = input<IAriaLabelValues | undefined>();
|
|
49
|
+
|
|
50
|
+
/** Total number of pages. */
|
|
51
|
+
readonly count = input.required<number>();
|
|
52
|
+
|
|
53
|
+
/** Custom CSS class applied to the root element. */
|
|
54
|
+
readonly className = input<string | undefined>();
|
|
55
|
+
|
|
56
|
+
/** Text label for the next button. */
|
|
57
|
+
readonly nextButtonText = input<string | undefined>();
|
|
58
|
+
|
|
59
|
+
/** Current active page number. */
|
|
60
|
+
readonly page = input.required<number>();
|
|
61
|
+
|
|
62
|
+
/** Text label for the previous button. */
|
|
63
|
+
readonly prevButtonText = input<string | undefined>();
|
|
64
|
+
|
|
65
|
+
/** Pagination size token. */
|
|
66
|
+
readonly size = input<ModusSize | undefined>('md');
|
|
67
|
+
|
|
68
|
+
/** Emits when the page changes. */
|
|
69
|
+
readonly pageChange = output<IPageChange>();
|
|
70
|
+
|
|
71
|
+
handlePageChange(event: CustomEvent<IPageChange>): void {
|
|
72
|
+
this.pageChange.emit(event.detail);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcPanel } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusPanelComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusPanelProps {
|
|
10
|
+
/** Custom CSS class applied to the panel. */
|
|
11
|
+
className?: Components.ModusWcPanel['customClass'];
|
|
12
|
+
/** Panel width (any valid CSS width value). */
|
|
13
|
+
width?: Components.ModusWcPanel['width'];
|
|
14
|
+
/** Panel height (any valid CSS height value). */
|
|
15
|
+
height?: Components.ModusWcPanel['height'];
|
|
16
|
+
/** Enable floating mode with elevated shadow. */
|
|
17
|
+
floating?: Components.ModusWcPanel['floating'];
|
|
18
|
+
/** Accessible label for the panel. */
|
|
19
|
+
ariaLabel?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Angular wrapper for the Modus panel web component.
|
|
24
|
+
*/
|
|
25
|
+
@Component({
|
|
26
|
+
selector: 'modus-panel',
|
|
27
|
+
imports: [CommonModule, ModusWcPanel],
|
|
28
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
29
|
+
template: `
|
|
30
|
+
<modus-wc-panel
|
|
31
|
+
[customClass]="className()"
|
|
32
|
+
[width]="width()"
|
|
33
|
+
[height]="height()"
|
|
34
|
+
[floating]="floating()"
|
|
35
|
+
[attr.aria-label]="ariaLabel()"
|
|
36
|
+
>
|
|
37
|
+
<ng-content select="[slot='header']" slot="header" />
|
|
38
|
+
<div slot="body" class="w-full">
|
|
39
|
+
<ng-content select="[slot='body']" />
|
|
40
|
+
<ng-content />
|
|
41
|
+
</div>
|
|
42
|
+
<ng-content select="[slot='footer']" slot="footer" />
|
|
43
|
+
</modus-wc-panel>
|
|
44
|
+
`,
|
|
45
|
+
})
|
|
46
|
+
export class ModusPanelComponent {
|
|
47
|
+
/** Custom CSS class applied to the panel. */
|
|
48
|
+
readonly className = input<string | undefined>();
|
|
49
|
+
|
|
50
|
+
/** Panel width (any valid CSS width value). */
|
|
51
|
+
readonly width = input<Components.ModusWcPanel['width'] | undefined>('350px');
|
|
52
|
+
|
|
53
|
+
/** Panel height (any valid CSS height value). */
|
|
54
|
+
readonly height = input<Components.ModusWcPanel['height'] | undefined>('700px');
|
|
55
|
+
|
|
56
|
+
/** Enable floating mode with elevated shadow. */
|
|
57
|
+
readonly floating = input<Components.ModusWcPanel['floating'] | undefined>(false);
|
|
58
|
+
|
|
59
|
+
/** Accessible label for the panel. */
|
|
60
|
+
readonly ariaLabel = input<string | undefined>();
|
|
61
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcProgress } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusProgressComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusProgressProps {
|
|
10
|
+
/** Optional CSS class applied to the progress element. */
|
|
11
|
+
className?: Components.ModusWcProgress['customClass'];
|
|
12
|
+
/** Displays the indeterminate animation when true. */
|
|
13
|
+
indeterminate?: Components.ModusWcProgress['indeterminate'];
|
|
14
|
+
/** Label displayed within the progress track. */
|
|
15
|
+
label?: Components.ModusWcProgress['label'];
|
|
16
|
+
/** Maximum value of the progress component. */
|
|
17
|
+
max?: Components.ModusWcProgress['max'];
|
|
18
|
+
/** Current progress value. */
|
|
19
|
+
value?: Components.ModusWcProgress['value'];
|
|
20
|
+
/** Visual variant (default or radial). */
|
|
21
|
+
variant?: Components.ModusWcProgress['variant'];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Angular wrapper for the Modus progress web component.
|
|
26
|
+
*/
|
|
27
|
+
@Component({
|
|
28
|
+
selector: 'modus-progress',
|
|
29
|
+
imports: [CommonModule, ModusWcProgress],
|
|
30
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
31
|
+
template: `
|
|
32
|
+
<modus-wc-progress
|
|
33
|
+
[customClass]="className()"
|
|
34
|
+
[indeterminate]="indeterminate()"
|
|
35
|
+
[label]="label()"
|
|
36
|
+
[max]="max()"
|
|
37
|
+
[value]="value()"
|
|
38
|
+
[variant]="variant()"
|
|
39
|
+
>
|
|
40
|
+
<ng-content />
|
|
41
|
+
</modus-wc-progress>
|
|
42
|
+
`,
|
|
43
|
+
})
|
|
44
|
+
export class ModusProgressComponent {
|
|
45
|
+
/** Optional CSS class applied to the progress element. */
|
|
46
|
+
readonly className = input<string | undefined>();
|
|
47
|
+
|
|
48
|
+
/** Displays the indeterminate animation when true. */
|
|
49
|
+
readonly indeterminate = input<boolean | undefined>(false);
|
|
50
|
+
|
|
51
|
+
/** Label displayed within the progress track. */
|
|
52
|
+
readonly label = input<string | undefined>();
|
|
53
|
+
|
|
54
|
+
/** Maximum value of the progress component. */
|
|
55
|
+
readonly max = input<number | undefined>(100);
|
|
56
|
+
|
|
57
|
+
/** Current progress value. */
|
|
58
|
+
readonly value = input<number | undefined>(0);
|
|
59
|
+
|
|
60
|
+
/** Visual variant (default or radial). */
|
|
61
|
+
readonly variant = input<'default' | 'radial' | undefined>('default');
|
|
62
|
+
}
|