@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,54 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcInputFeedback } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components, IInputFeedbackLevel, ModusSize } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusInputFeedbackComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusInputFeedbackProps {
|
|
10
|
+
/** Custom CSS class applied to the container. */
|
|
11
|
+
className?: Components.ModusWcInputFeedback['customClass'];
|
|
12
|
+
/** Icon override rendered before the message. */
|
|
13
|
+
icon?: Components.ModusWcInputFeedback['icon'];
|
|
14
|
+
/** Feedback level controlling icon and color. */
|
|
15
|
+
level: IInputFeedbackLevel;
|
|
16
|
+
/** Feedback message text. */
|
|
17
|
+
message?: Components.ModusWcInputFeedback['message'];
|
|
18
|
+
/** Control size token. */
|
|
19
|
+
size?: ModusSize;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Angular wrapper for the Modus input feedback web component.
|
|
24
|
+
*/
|
|
25
|
+
@Component({
|
|
26
|
+
selector: 'modus-input-feedback',
|
|
27
|
+
imports: [CommonModule, ModusWcInputFeedback],
|
|
28
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
29
|
+
template: `
|
|
30
|
+
<modus-wc-input-feedback
|
|
31
|
+
[customClass]="className()"
|
|
32
|
+
[icon]="icon()"
|
|
33
|
+
[level]="level()"
|
|
34
|
+
[message]="message()"
|
|
35
|
+
[size]="size()"
|
|
36
|
+
/>
|
|
37
|
+
`,
|
|
38
|
+
})
|
|
39
|
+
export class ModusInputFeedbackComponent {
|
|
40
|
+
/** Custom CSS class applied to the container. */
|
|
41
|
+
readonly className = input<string | undefined>();
|
|
42
|
+
|
|
43
|
+
/** Icon override rendered before the message. */
|
|
44
|
+
readonly icon = input<string | undefined>();
|
|
45
|
+
|
|
46
|
+
/** Feedback level controlling icon and color. */
|
|
47
|
+
readonly level = input.required<IInputFeedbackLevel>();
|
|
48
|
+
|
|
49
|
+
/** Feedback message text. */
|
|
50
|
+
readonly message = input<string | undefined>();
|
|
51
|
+
|
|
52
|
+
/** Control size token. */
|
|
53
|
+
readonly size = input<ModusSize | undefined>('md');
|
|
54
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcInputLabel } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components, ModusSize } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusInputLabelComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusInputLabelProps {
|
|
10
|
+
/** Additional classes for custom styling. */
|
|
11
|
+
className?: Components.ModusWcInputLabel['customClass'];
|
|
12
|
+
/** The `for` attribute mapping to the associated input id. */
|
|
13
|
+
forId?: Components.ModusWcInputLabel['forId'];
|
|
14
|
+
/** The primary label text. */
|
|
15
|
+
labelText?: Components.ModusWcInputLabel['labelText'];
|
|
16
|
+
/** Indicates whether the label represents a required field. */
|
|
17
|
+
required?: Components.ModusWcInputLabel['required'];
|
|
18
|
+
/** Label size token. */
|
|
19
|
+
size?: ModusSize;
|
|
20
|
+
/** Optional secondary text displayed beneath the label. */
|
|
21
|
+
subLabelText?: Components.ModusWcInputLabel['subLabelText'];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Angular wrapper for the Modus input label web component.
|
|
26
|
+
*/
|
|
27
|
+
@Component({
|
|
28
|
+
selector: 'modus-input-label',
|
|
29
|
+
imports: [CommonModule, ModusWcInputLabel],
|
|
30
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
31
|
+
template: `
|
|
32
|
+
<modus-wc-input-label
|
|
33
|
+
[customClass]="className()"
|
|
34
|
+
[forId]="forId()"
|
|
35
|
+
[labelText]="labelText()"
|
|
36
|
+
[required]="required()"
|
|
37
|
+
[size]="size()"
|
|
38
|
+
[subLabelText]="subLabelText()"
|
|
39
|
+
>
|
|
40
|
+
<ng-content />
|
|
41
|
+
</modus-wc-input-label>
|
|
42
|
+
`,
|
|
43
|
+
})
|
|
44
|
+
export class ModusInputLabelComponent {
|
|
45
|
+
/** Additional classes for custom styling. */
|
|
46
|
+
readonly className = input<string | undefined>();
|
|
47
|
+
|
|
48
|
+
/** The `for` attribute mapping to the associated input id. */
|
|
49
|
+
readonly forId = input<string | undefined>();
|
|
50
|
+
|
|
51
|
+
/** The primary label text. */
|
|
52
|
+
readonly labelText = input<string | undefined>();
|
|
53
|
+
|
|
54
|
+
/** Indicates whether the label represents a required field. */
|
|
55
|
+
readonly required = input<boolean | undefined>(false);
|
|
56
|
+
|
|
57
|
+
/** Label size token. */
|
|
58
|
+
readonly size = input<ModusSize | undefined>('md');
|
|
59
|
+
|
|
60
|
+
/** Optional secondary text displayed beneath the label. */
|
|
61
|
+
readonly subLabelText = input<string | undefined>();
|
|
62
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcLoader } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components, DaisySize, LoaderColor, LoaderVariant } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusLoaderComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusLoaderProps {
|
|
10
|
+
/** Loader color token. */
|
|
11
|
+
color?: LoaderColor;
|
|
12
|
+
/** Optional CSS class applied to the loader element. */
|
|
13
|
+
className?: Components.ModusWcLoader['customClass'];
|
|
14
|
+
/** Loader size token. */
|
|
15
|
+
size?: DaisySize;
|
|
16
|
+
/** Loader variant (spinner style). */
|
|
17
|
+
variant?: LoaderVariant;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Angular wrapper for the Modus loader web component.
|
|
22
|
+
*/
|
|
23
|
+
@Component({
|
|
24
|
+
selector: 'modus-loader',
|
|
25
|
+
imports: [CommonModule, ModusWcLoader],
|
|
26
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
27
|
+
template: `
|
|
28
|
+
<modus-wc-loader
|
|
29
|
+
[color]="color()"
|
|
30
|
+
[customClass]="className()"
|
|
31
|
+
[size]="size()"
|
|
32
|
+
[variant]="variant()"
|
|
33
|
+
/>
|
|
34
|
+
`,
|
|
35
|
+
})
|
|
36
|
+
export class ModusLoaderComponent {
|
|
37
|
+
/** Loader color token. */
|
|
38
|
+
readonly color = input<LoaderColor | undefined>('primary');
|
|
39
|
+
|
|
40
|
+
/** Optional CSS class applied to the loader element. */
|
|
41
|
+
readonly className = input<string | undefined>();
|
|
42
|
+
|
|
43
|
+
/** Loader size token. */
|
|
44
|
+
readonly size = input<DaisySize | undefined>('md');
|
|
45
|
+
|
|
46
|
+
/** Loader variant (spinner style). */
|
|
47
|
+
readonly variant = input<LoaderVariant | undefined>('spinner');
|
|
48
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcLogo } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Available logo names for the ModusLogo component.
|
|
7
|
+
*
|
|
8
|
+
* Includes 19 Trimble product logos and 17 Viewpoint product logos.
|
|
9
|
+
*/
|
|
10
|
+
export type LogoName =
|
|
11
|
+
// Trimble Products (19)
|
|
12
|
+
| 'trimble'
|
|
13
|
+
| 'siteworks'
|
|
14
|
+
| 'earthworks'
|
|
15
|
+
| 'financials'
|
|
16
|
+
| 'worksmanager'
|
|
17
|
+
| 'connect'
|
|
18
|
+
| 'unity_construct'
|
|
19
|
+
| 'trade_servicelive'
|
|
20
|
+
| 'buildable'
|
|
21
|
+
| 'livecount'
|
|
22
|
+
| 'supplier_xchange'
|
|
23
|
+
| 'app_xchange'
|
|
24
|
+
| 'trimble_unity'
|
|
25
|
+
| 'sketchup'
|
|
26
|
+
| 'pc_miler'
|
|
27
|
+
| 'copilot'
|
|
28
|
+
| 'trimble_pay'
|
|
29
|
+
| 'projectsight'
|
|
30
|
+
| 'demand_planning'
|
|
31
|
+
// Viewpoint Products (17)
|
|
32
|
+
| 'viewpoint'
|
|
33
|
+
| 'viewpoint_analytics'
|
|
34
|
+
| 'viewpoint_epayments'
|
|
35
|
+
| 'viewpoint_estimating'
|
|
36
|
+
| 'viewpoint_field_management'
|
|
37
|
+
| 'viewpoint_field_time'
|
|
38
|
+
| 'viewpoint_financial_controls'
|
|
39
|
+
| 'viewpoint_hr_management'
|
|
40
|
+
| 'viewpoint_jobpac_connect'
|
|
41
|
+
| 'viewpoint_procontractor'
|
|
42
|
+
| 'viewpoint_spectrum'
|
|
43
|
+
| 'viewpoint_team'
|
|
44
|
+
| 'viewpoint_vista'
|
|
45
|
+
| 'viewpoint_spectrum_service_tech'
|
|
46
|
+
| 'viewpoint_for_projects'
|
|
47
|
+
| 'viewpoint_vista_field_service'
|
|
48
|
+
| 'viewpoint_field_view';
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Input properties for the ModusLogoComponent wrapper.
|
|
52
|
+
*/
|
|
53
|
+
export interface ModusLogoProps {
|
|
54
|
+
/** The name of the logo to display (required). */
|
|
55
|
+
name: LogoName;
|
|
56
|
+
/** Show emblem version (icon only) instead of full logo. */
|
|
57
|
+
emblem?: boolean;
|
|
58
|
+
/** Custom CSS class to apply to the logo container (useful for sizing). */
|
|
59
|
+
customClass?: string;
|
|
60
|
+
/** Alt text for accessibility. If not provided, defaults to the logo name. */
|
|
61
|
+
alt?: string;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Angular wrapper for the Modus logo web component.
|
|
66
|
+
*
|
|
67
|
+
* Renders Trimble and Viewpoint product logos with support for full logos
|
|
68
|
+
* and emblem (icon-only) variants. Automatically switches between light
|
|
69
|
+
* and dark theme variants based on the current data-theme attribute.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```html
|
|
73
|
+
* <!-- Basic Trimble logo -->
|
|
74
|
+
* <modus-logo name="trimble" />
|
|
75
|
+
*
|
|
76
|
+
* <!-- Emblem (icon-only) version -->
|
|
77
|
+
* <modus-logo name="trimble" [emblem]="true" />
|
|
78
|
+
*
|
|
79
|
+
* <!-- With custom alt text and sizing -->
|
|
80
|
+
* <modus-logo
|
|
81
|
+
* name="connect"
|
|
82
|
+
* alt="Trimble Connect Platform"
|
|
83
|
+
* customClass="w-32"
|
|
84
|
+
* />
|
|
85
|
+
*
|
|
86
|
+
* <!-- Viewpoint product logo -->
|
|
87
|
+
* <modus-logo name="viewpoint_vista" />
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
@Component({
|
|
91
|
+
selector: 'modus-logo',
|
|
92
|
+
imports: [CommonModule, ModusWcLogo],
|
|
93
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
94
|
+
template: `
|
|
95
|
+
<modus-wc-logo
|
|
96
|
+
[name]="name()"
|
|
97
|
+
[emblem]="emblem()"
|
|
98
|
+
[customClass]="customClass()"
|
|
99
|
+
[alt]="alt()"
|
|
100
|
+
/>
|
|
101
|
+
`,
|
|
102
|
+
})
|
|
103
|
+
export class ModusLogoComponent {
|
|
104
|
+
/** The name of the logo to display (required). */
|
|
105
|
+
readonly name = input.required<LogoName>();
|
|
106
|
+
|
|
107
|
+
/** Show emblem version (icon only) instead of full logo. */
|
|
108
|
+
readonly emblem = input<boolean>(false);
|
|
109
|
+
|
|
110
|
+
/** Custom CSS class to apply to the logo container (useful for sizing). */
|
|
111
|
+
readonly customClass = input<string | undefined>();
|
|
112
|
+
|
|
113
|
+
/** Alt text for accessibility. If not provided, defaults to the logo name. */
|
|
114
|
+
readonly alt = input<string | undefined>();
|
|
115
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcMenuItem } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components, ModusSize } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusMenuItemComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusMenuItemProps {
|
|
10
|
+
/** Adds a border to the menu item. */
|
|
11
|
+
bordered?: Components.ModusWcMenuItem['bordered'];
|
|
12
|
+
/** Displays a checkbox at the start of the menu item. */
|
|
13
|
+
checkbox?: Components.ModusWcMenuItem['checkbox'];
|
|
14
|
+
/** Custom CSS class applied to the menu item. */
|
|
15
|
+
className?: Components.ModusWcMenuItem['customClass'];
|
|
16
|
+
/** Disables the item. */
|
|
17
|
+
disabled?: Components.ModusWcMenuItem['disabled'];
|
|
18
|
+
/** Highlights the item as focused. */
|
|
19
|
+
focused?: Components.ModusWcMenuItem['focused'];
|
|
20
|
+
/** Text label rendered inside the item. */
|
|
21
|
+
label: Components.ModusWcMenuItem['label'];
|
|
22
|
+
/** Icon name displayed before the label. */
|
|
23
|
+
startIcon?: Components.ModusWcMenuItem['startIcon'];
|
|
24
|
+
/** Marks the item as selected. */
|
|
25
|
+
selected?: Components.ModusWcMenuItem['selected'];
|
|
26
|
+
/** Item size token. */
|
|
27
|
+
size?: ModusSize;
|
|
28
|
+
/** Sub-label text displayed beneath the label. */
|
|
29
|
+
subLabel?: Components.ModusWcMenuItem['subLabel'];
|
|
30
|
+
/** Tooltip content shown on hover. */
|
|
31
|
+
tooltipContent?: Components.ModusWcMenuItem['tooltipContent'];
|
|
32
|
+
/** Tooltip position relative to the item. */
|
|
33
|
+
tooltipPosition?: Components.ModusWcMenuItem['tooltipPosition'];
|
|
34
|
+
/** Unique value emitted when the item is selected. */
|
|
35
|
+
value: Components.ModusWcMenuItem['value'];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Angular wrapper for the Modus menu item web component.
|
|
40
|
+
*/
|
|
41
|
+
@Component({
|
|
42
|
+
selector: 'modus-menu-item',
|
|
43
|
+
imports: [CommonModule, ModusWcMenuItem],
|
|
44
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
45
|
+
template: `
|
|
46
|
+
<modus-wc-menu-item
|
|
47
|
+
[bordered]="bordered()"
|
|
48
|
+
[checkbox]="checkbox()"
|
|
49
|
+
[customClass]="className()"
|
|
50
|
+
[disabled]="disabled()"
|
|
51
|
+
[focused]="focused()"
|
|
52
|
+
[label]="label()"
|
|
53
|
+
[startIcon]="startIcon()"
|
|
54
|
+
[attr.start-icon]="startIcon()"
|
|
55
|
+
[selected]="selected()"
|
|
56
|
+
[attr.selected]="selected() ? '' : null"
|
|
57
|
+
[size]="size()"
|
|
58
|
+
[subLabel]="subLabel()"
|
|
59
|
+
[tooltipContent]="tooltipContent()"
|
|
60
|
+
[tooltipPosition]="tooltipPosition()"
|
|
61
|
+
[value]="value()"
|
|
62
|
+
(itemSelect)="handleItemSelect($event)"
|
|
63
|
+
>
|
|
64
|
+
<ng-content select="[slot='start-icon']" slot="start-icon" />
|
|
65
|
+
</modus-wc-menu-item>
|
|
66
|
+
`,
|
|
67
|
+
})
|
|
68
|
+
export class ModusMenuItemComponent {
|
|
69
|
+
/** Adds a border to the menu item. */
|
|
70
|
+
readonly bordered = input<boolean | undefined>(false);
|
|
71
|
+
|
|
72
|
+
/** Displays a checkbox at the start of the menu item. */
|
|
73
|
+
readonly checkbox = input<boolean | undefined>(false);
|
|
74
|
+
|
|
75
|
+
/** Custom CSS class applied to the menu item. */
|
|
76
|
+
readonly className = input<string | undefined>();
|
|
77
|
+
|
|
78
|
+
/** Disables the item. */
|
|
79
|
+
readonly disabled = input<boolean | undefined>(false);
|
|
80
|
+
|
|
81
|
+
/** Highlights the item as focused. */
|
|
82
|
+
readonly focused = input<boolean | undefined>(false);
|
|
83
|
+
|
|
84
|
+
/** Text label rendered inside the item. */
|
|
85
|
+
readonly label = input.required<string>();
|
|
86
|
+
|
|
87
|
+
/** Icon name displayed before the label. */
|
|
88
|
+
readonly startIcon = input<string | undefined>();
|
|
89
|
+
|
|
90
|
+
/** Marks the item as selected. */
|
|
91
|
+
readonly selected = input<boolean | undefined>(false);
|
|
92
|
+
|
|
93
|
+
/** Item size token. */
|
|
94
|
+
readonly size = input<ModusSize | undefined>('md');
|
|
95
|
+
|
|
96
|
+
/** Sub-label text displayed beneath the label. */
|
|
97
|
+
readonly subLabel = input<string | undefined>();
|
|
98
|
+
|
|
99
|
+
/** Tooltip content shown on hover. */
|
|
100
|
+
readonly tooltipContent = input<string | undefined>();
|
|
101
|
+
|
|
102
|
+
/** Tooltip position relative to the item. */
|
|
103
|
+
readonly tooltipPosition = input<'auto' | 'top' | 'right' | 'bottom' | 'left' | undefined>(
|
|
104
|
+
'auto'
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
/** Unique value emitted when the item is selected. */
|
|
108
|
+
readonly value = input.required<string>();
|
|
109
|
+
|
|
110
|
+
/** Emits when the item is selected. */
|
|
111
|
+
readonly itemSelect = output<{ value: string }>();
|
|
112
|
+
|
|
113
|
+
handleItemSelect(event: CustomEvent<{ value: string }>): void {
|
|
114
|
+
this.itemSelect.emit(event.detail);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcMenu } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components, ModusSize, Orientation } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusMenuComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusMenuProps {
|
|
10
|
+
/** Indicates that the menu should have a border. */
|
|
11
|
+
bordered?: Components.ModusWcMenu['bordered'];
|
|
12
|
+
/** Custom CSS class applied to the menu element. */
|
|
13
|
+
className?: Components.ModusWcMenu['customClass'];
|
|
14
|
+
/** Menu orientation. */
|
|
15
|
+
orientation?: Orientation;
|
|
16
|
+
/** Menu size token. */
|
|
17
|
+
size?: ModusSize;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Angular wrapper for the Modus menu web component.
|
|
22
|
+
*/
|
|
23
|
+
@Component({
|
|
24
|
+
selector: 'modus-menu',
|
|
25
|
+
imports: [CommonModule, ModusWcMenu],
|
|
26
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
27
|
+
template: `
|
|
28
|
+
<modus-wc-menu
|
|
29
|
+
[bordered]="bordered()"
|
|
30
|
+
[customClass]="className()"
|
|
31
|
+
[orientation]="orientation()"
|
|
32
|
+
[size]="size()"
|
|
33
|
+
(menuFocusout)="handleFocusOut($event)"
|
|
34
|
+
>
|
|
35
|
+
<ng-content />
|
|
36
|
+
</modus-wc-menu>
|
|
37
|
+
`,
|
|
38
|
+
})
|
|
39
|
+
export class ModusMenuComponent {
|
|
40
|
+
/** Indicates that the menu should have a border. */
|
|
41
|
+
readonly bordered = input<boolean | undefined>(false);
|
|
42
|
+
|
|
43
|
+
/** Custom CSS class applied to the menu element. */
|
|
44
|
+
readonly className = input<string | undefined>();
|
|
45
|
+
|
|
46
|
+
/** Menu orientation. */
|
|
47
|
+
readonly orientation = input<Orientation | undefined>('vertical');
|
|
48
|
+
|
|
49
|
+
/** Menu size token. */
|
|
50
|
+
readonly size = input<ModusSize | undefined>('md');
|
|
51
|
+
|
|
52
|
+
/** Emits when focus leaves the menu. */
|
|
53
|
+
readonly menuFocusout = output<FocusEvent>();
|
|
54
|
+
|
|
55
|
+
handleFocusOut(event: CustomEvent<FocusEvent>): void {
|
|
56
|
+
this.menuFocusout.emit(event.detail);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcModal } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusModalComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusModalProps {
|
|
10
|
+
/** Modal backdrop behavior. */
|
|
11
|
+
backdrop?: Components.ModusWcModal['backdrop'];
|
|
12
|
+
/** Custom CSS class applied to the modal container. */
|
|
13
|
+
className?: Components.ModusWcModal['customClass'];
|
|
14
|
+
/** Renders the modal fullscreen. */
|
|
15
|
+
fullscreen?: Components.ModusWcModal['fullscreen'];
|
|
16
|
+
/** Required identifier applied to the underlying dialog element. */
|
|
17
|
+
modalId: Components.ModusWcModal['modalId'];
|
|
18
|
+
/** Vertical positioning of the modal. */
|
|
19
|
+
position?: Components.ModusWcModal['position'];
|
|
20
|
+
/** Toggles the close button in the header. */
|
|
21
|
+
showClose?: Components.ModusWcModal['showClose'];
|
|
22
|
+
/** Toggles the fullscreen icon button. */
|
|
23
|
+
showFullscreenToggle?: Components.ModusWcModal['showFullscreenToggle'];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Angular wrapper for the Modus modal web component.
|
|
28
|
+
*/
|
|
29
|
+
@Component({
|
|
30
|
+
selector: 'modus-modal',
|
|
31
|
+
imports: [CommonModule, ModusWcModal],
|
|
32
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
33
|
+
template: `
|
|
34
|
+
<modus-wc-modal
|
|
35
|
+
[backdrop]="backdrop()"
|
|
36
|
+
[customClass]="className()"
|
|
37
|
+
[fullscreen]="fullscreen()"
|
|
38
|
+
[modalId]="modalId()"
|
|
39
|
+
[position]="position()"
|
|
40
|
+
[showClose]="showClose()"
|
|
41
|
+
[showFullscreenToggle]="showFullscreenToggle()"
|
|
42
|
+
>
|
|
43
|
+
<ng-content select="[slot='header']" slot="header" />
|
|
44
|
+
<ng-content select="[slot='content']" slot="content" />
|
|
45
|
+
<ng-content select="[slot='footer']" slot="footer" />
|
|
46
|
+
</modus-wc-modal>
|
|
47
|
+
`,
|
|
48
|
+
})
|
|
49
|
+
export class ModusModalComponent {
|
|
50
|
+
/** Modal backdrop behavior. */
|
|
51
|
+
readonly backdrop = input<'default' | 'static' | undefined>('default');
|
|
52
|
+
|
|
53
|
+
/** Custom CSS class applied to the modal container. */
|
|
54
|
+
readonly className = input<string | undefined>();
|
|
55
|
+
|
|
56
|
+
/** Renders the modal fullscreen. */
|
|
57
|
+
readonly fullscreen = input<boolean | undefined>(false);
|
|
58
|
+
|
|
59
|
+
/** Required identifier applied to the underlying dialog element. */
|
|
60
|
+
readonly modalId = input.required<string>();
|
|
61
|
+
|
|
62
|
+
/** Vertical positioning of the modal. */
|
|
63
|
+
readonly position = input<'bottom' | 'center' | 'top' | undefined>('center');
|
|
64
|
+
|
|
65
|
+
/** Toggles the close button in the header. */
|
|
66
|
+
readonly showClose = input<boolean | undefined>(true);
|
|
67
|
+
|
|
68
|
+
/** Toggles the fullscreen icon button. */
|
|
69
|
+
readonly showFullscreenToggle = input<boolean | undefined>(false);
|
|
70
|
+
}
|