@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,102 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcRadio } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components, ModusSize } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusRadioComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusRadioProps {
|
|
10
|
+
/** Custom CSS class applied to the radio input. */
|
|
11
|
+
className?: Components.ModusWcRadio['customClass'];
|
|
12
|
+
/** Disables the radio control. */
|
|
13
|
+
disabled?: Components.ModusWcRadio['disabled'];
|
|
14
|
+
/** Identifier applied to the input element. */
|
|
15
|
+
inputId?: Components.ModusWcRadio['inputId'];
|
|
16
|
+
/** Tab index applied to the input. */
|
|
17
|
+
inputTabIndex?: Components.ModusWcRadio['inputTabIndex'];
|
|
18
|
+
/** Label displayed alongside the radio. */
|
|
19
|
+
label?: Components.ModusWcRadio['label'];
|
|
20
|
+
/** Name attribute submitted in forms. */
|
|
21
|
+
name?: Components.ModusWcRadio['name'];
|
|
22
|
+
/** Marks the control as required. */
|
|
23
|
+
required?: Components.ModusWcRadio['required'];
|
|
24
|
+
/** Radio size token. */
|
|
25
|
+
size?: ModusSize;
|
|
26
|
+
/** Boolean value representing the checked state. */
|
|
27
|
+
value?: Components.ModusWcRadio['value'];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Angular wrapper for the Modus radio web component.
|
|
32
|
+
*/
|
|
33
|
+
@Component({
|
|
34
|
+
selector: 'modus-radio',
|
|
35
|
+
imports: [CommonModule, ModusWcRadio],
|
|
36
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
37
|
+
template: `
|
|
38
|
+
<modus-wc-radio
|
|
39
|
+
[customClass]="className()"
|
|
40
|
+
[disabled]="disabled()"
|
|
41
|
+
[inputId]="inputId()"
|
|
42
|
+
[inputTabIndex]="inputTabIndex()"
|
|
43
|
+
[label]="label()"
|
|
44
|
+
[name]="name()"
|
|
45
|
+
[required]="required()"
|
|
46
|
+
[size]="size()"
|
|
47
|
+
[value]="value()"
|
|
48
|
+
(inputBlur)="handleBlur($event)"
|
|
49
|
+
(inputChange)="handleChange($event)"
|
|
50
|
+
(inputFocus)="handleFocus($event)"
|
|
51
|
+
/>
|
|
52
|
+
`,
|
|
53
|
+
})
|
|
54
|
+
export class ModusRadioComponent {
|
|
55
|
+
/** Custom CSS class applied to the radio input. */
|
|
56
|
+
readonly className = input<string | undefined>();
|
|
57
|
+
|
|
58
|
+
/** Disables the radio control. */
|
|
59
|
+
readonly disabled = input<boolean | undefined>(false);
|
|
60
|
+
|
|
61
|
+
/** Identifier applied to the input element. */
|
|
62
|
+
readonly inputId = input<string | undefined>();
|
|
63
|
+
|
|
64
|
+
/** Tab index applied to the input. */
|
|
65
|
+
readonly inputTabIndex = input<number | undefined>();
|
|
66
|
+
|
|
67
|
+
/** Label displayed alongside the radio. */
|
|
68
|
+
readonly label = input<string | undefined>();
|
|
69
|
+
|
|
70
|
+
/** Name attribute submitted in forms. */
|
|
71
|
+
readonly name = input<string | undefined>('');
|
|
72
|
+
|
|
73
|
+
/** Marks the control as required. */
|
|
74
|
+
readonly required = input<boolean | undefined>(false);
|
|
75
|
+
|
|
76
|
+
/** Radio size token. */
|
|
77
|
+
readonly size = input<ModusSize | undefined>('md');
|
|
78
|
+
|
|
79
|
+
/** Boolean value representing the checked state. */
|
|
80
|
+
readonly value = input<boolean | undefined>(false);
|
|
81
|
+
|
|
82
|
+
/** Emits when the input loses focus. */
|
|
83
|
+
readonly inputBlur = output<FocusEvent>();
|
|
84
|
+
|
|
85
|
+
/** Emits when the value changes. */
|
|
86
|
+
readonly inputChange = output<InputEvent>();
|
|
87
|
+
|
|
88
|
+
/** Emits when the input gains focus. */
|
|
89
|
+
readonly inputFocus = output<FocusEvent>();
|
|
90
|
+
|
|
91
|
+
handleBlur(event: CustomEvent<FocusEvent>): void {
|
|
92
|
+
this.inputBlur.emit(event.detail);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
handleChange(event: CustomEvent<InputEvent>): void {
|
|
96
|
+
this.inputChange.emit(event.detail);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
handleFocus(event: CustomEvent<FocusEvent>): void {
|
|
100
|
+
this.inputFocus.emit(event.detail);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcRating } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components, IRatingChange, ModusSize, ModusWcRatingVariant } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusRatingComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusRatingProps {
|
|
10
|
+
/** Enables half step ratings for supported variants. */
|
|
11
|
+
allowHalf?: Components.ModusWcRating['allowHalf'];
|
|
12
|
+
/** Number of rating items displayed. */
|
|
13
|
+
count?: Components.ModusWcRating['count'];
|
|
14
|
+
/** Optional CSS class applied to the rating container. */
|
|
15
|
+
className?: Components.ModusWcRating['customClass'];
|
|
16
|
+
/** Disables user interaction. */
|
|
17
|
+
disabled?: Components.ModusWcRating['disabled'];
|
|
18
|
+
/** Function providing accessible labels for each rating value. */
|
|
19
|
+
getAriaLabelText?: Components.ModusWcRating['getAriaLabelText'];
|
|
20
|
+
/** Control size token. */
|
|
21
|
+
size?: ModusSize;
|
|
22
|
+
/** Current rating value. */
|
|
23
|
+
value?: Components.ModusWcRating['value'];
|
|
24
|
+
/** Rating visualization variant. */
|
|
25
|
+
variant?: ModusWcRatingVariant;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Angular wrapper for the Modus rating web component.
|
|
30
|
+
*/
|
|
31
|
+
@Component({
|
|
32
|
+
selector: 'modus-rating',
|
|
33
|
+
imports: [CommonModule, ModusWcRating],
|
|
34
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
35
|
+
template: `
|
|
36
|
+
<modus-wc-rating
|
|
37
|
+
[allowHalf]="allowHalf()"
|
|
38
|
+
[count]="count()"
|
|
39
|
+
[customClass]="className()"
|
|
40
|
+
[disabled]="disabled()"
|
|
41
|
+
[getAriaLabelText]="getAriaLabelText()"
|
|
42
|
+
[size]="size()"
|
|
43
|
+
[value]="value()"
|
|
44
|
+
[variant]="variant()"
|
|
45
|
+
(ratingChange)="handleRatingChange($event)"
|
|
46
|
+
/>
|
|
47
|
+
`,
|
|
48
|
+
})
|
|
49
|
+
export class ModusRatingComponent {
|
|
50
|
+
/** Enables half step ratings for supported variants. */
|
|
51
|
+
readonly allowHalf = input<boolean | undefined>(false);
|
|
52
|
+
|
|
53
|
+
/** Number of rating items displayed. */
|
|
54
|
+
readonly count = input<number | undefined>(5);
|
|
55
|
+
|
|
56
|
+
/** Optional CSS class applied to the rating container. */
|
|
57
|
+
readonly className = input<string | undefined>();
|
|
58
|
+
|
|
59
|
+
/** Disables user interaction. */
|
|
60
|
+
readonly disabled = input<boolean | undefined>(false);
|
|
61
|
+
|
|
62
|
+
/** Function providing accessible labels for each rating value. */
|
|
63
|
+
readonly getAriaLabelText = input<((ratingValue: number) => string) | undefined>();
|
|
64
|
+
|
|
65
|
+
/** Control size token. */
|
|
66
|
+
readonly size = input<ModusSize | undefined>('md');
|
|
67
|
+
|
|
68
|
+
/** Current rating value. */
|
|
69
|
+
readonly value = input<number | undefined>(0);
|
|
70
|
+
|
|
71
|
+
/** Rating visualization variant. */
|
|
72
|
+
readonly variant = input<ModusWcRatingVariant | undefined>('smiley');
|
|
73
|
+
|
|
74
|
+
/** Emits when the rating changes. */
|
|
75
|
+
readonly ratingChange = output<IRatingChange>();
|
|
76
|
+
|
|
77
|
+
handleRatingChange(event: CustomEvent<IRatingChange>): void {
|
|
78
|
+
this.ratingChange.emit(event.detail);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcSelect } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components, IInputFeedbackProp, ISelectOption, ModusSize } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusSelectComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusSelectProps {
|
|
10
|
+
/** Indicates that the input should have a border. */
|
|
11
|
+
bordered?: Components.ModusWcSelect['bordered'];
|
|
12
|
+
/** Custom CSS class applied to the select element. */
|
|
13
|
+
className?: Components.ModusWcSelect['customClass'];
|
|
14
|
+
/** Disables the select. */
|
|
15
|
+
disabled?: Components.ModusWcSelect['disabled'];
|
|
16
|
+
/** Feedback configuration rendered below the select. */
|
|
17
|
+
feedback?: IInputFeedbackProp;
|
|
18
|
+
/** Identifier applied to the select element. */
|
|
19
|
+
inputId?: Components.ModusWcSelect['inputId'];
|
|
20
|
+
/** Tab index applied to the select. */
|
|
21
|
+
inputTabIndex?: Components.ModusWcSelect['inputTabIndex'];
|
|
22
|
+
/** Label text displayed above the select. */
|
|
23
|
+
label?: Components.ModusWcSelect['label'];
|
|
24
|
+
/** Name attribute submitted in forms. */
|
|
25
|
+
name?: Components.ModusWcSelect['name'];
|
|
26
|
+
/** Options displayed in the select dropdown. */
|
|
27
|
+
options: ISelectOption[];
|
|
28
|
+
/** Marks the select as required. */
|
|
29
|
+
required?: Components.ModusWcSelect['required'];
|
|
30
|
+
/** Control size token. */
|
|
31
|
+
size?: ModusSize;
|
|
32
|
+
/** Current selected value. */
|
|
33
|
+
value?: Components.ModusWcSelect['value'];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Angular wrapper for the Modus select web component.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```html
|
|
41
|
+
* <modus-select
|
|
42
|
+
* label="Choose an option"
|
|
43
|
+
* [options]="selectOptions"
|
|
44
|
+
* [value]="selectedValue()"
|
|
45
|
+
* (inputChange)="handleChange($event)"
|
|
46
|
+
* />
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
@Component({
|
|
50
|
+
selector: 'modus-select',
|
|
51
|
+
imports: [CommonModule, ModusWcSelect],
|
|
52
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
53
|
+
template: `
|
|
54
|
+
<modus-wc-select
|
|
55
|
+
[bordered]="bordered()"
|
|
56
|
+
[customClass]="className()"
|
|
57
|
+
[disabled]="disabled()"
|
|
58
|
+
[feedback]="feedback()"
|
|
59
|
+
[inputId]="inputId()"
|
|
60
|
+
[inputTabIndex]="inputTabIndex()"
|
|
61
|
+
[label]="label()"
|
|
62
|
+
[name]="name()"
|
|
63
|
+
[options]="options()"
|
|
64
|
+
[required]="required()"
|
|
65
|
+
[size]="size()"
|
|
66
|
+
[value]="value()"
|
|
67
|
+
(inputBlur)="handleBlur($event)"
|
|
68
|
+
(inputChange)="handleChange($event)"
|
|
69
|
+
(inputFocus)="handleFocus($event)"
|
|
70
|
+
/>
|
|
71
|
+
`,
|
|
72
|
+
})
|
|
73
|
+
export class ModusSelectComponent {
|
|
74
|
+
/** Indicates that the input should have a border. */
|
|
75
|
+
readonly bordered = input<boolean | undefined>(true);
|
|
76
|
+
|
|
77
|
+
/** Custom CSS class applied to the select element. */
|
|
78
|
+
readonly className = input<string | undefined>();
|
|
79
|
+
|
|
80
|
+
/** Disables the select. */
|
|
81
|
+
readonly disabled = input<boolean | undefined>(false);
|
|
82
|
+
|
|
83
|
+
/** Feedback configuration rendered below the select. */
|
|
84
|
+
readonly feedback = input<IInputFeedbackProp | undefined>();
|
|
85
|
+
|
|
86
|
+
/** Identifier applied to the select element. */
|
|
87
|
+
readonly inputId = input<string | undefined>();
|
|
88
|
+
|
|
89
|
+
/** Tab index applied to the select. */
|
|
90
|
+
readonly inputTabIndex = input<number | undefined>();
|
|
91
|
+
|
|
92
|
+
/** Label text displayed above the select. */
|
|
93
|
+
readonly label = input<string | undefined>();
|
|
94
|
+
|
|
95
|
+
/** Name attribute submitted in forms. */
|
|
96
|
+
readonly name = input<string | undefined>();
|
|
97
|
+
|
|
98
|
+
/** Options displayed in the select dropdown. */
|
|
99
|
+
readonly options = input.required<ISelectOption[]>();
|
|
100
|
+
|
|
101
|
+
/** Marks the select as required. */
|
|
102
|
+
readonly required = input<boolean | undefined>(false);
|
|
103
|
+
|
|
104
|
+
/** Control size token. */
|
|
105
|
+
readonly size = input<ModusSize | undefined>('md');
|
|
106
|
+
|
|
107
|
+
/** Current selected value. */
|
|
108
|
+
readonly value = input<string>('');
|
|
109
|
+
|
|
110
|
+
/** Emits when the select loses focus. */
|
|
111
|
+
readonly inputBlur = output<FocusEvent>();
|
|
112
|
+
|
|
113
|
+
/** Emits when the value changes. */
|
|
114
|
+
readonly inputChange = output<InputEvent>();
|
|
115
|
+
|
|
116
|
+
/** Emits when the select gains focus. */
|
|
117
|
+
readonly inputFocus = output<FocusEvent>();
|
|
118
|
+
|
|
119
|
+
handleBlur(event: CustomEvent<FocusEvent>): void {
|
|
120
|
+
this.inputBlur.emit(event.detail);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
handleChange(event: CustomEvent<InputEvent>): void {
|
|
124
|
+
this.inputChange.emit(event.detail);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
handleFocus(event: CustomEvent<FocusEvent>): void {
|
|
128
|
+
this.inputFocus.emit(event.detail);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcSideNavigation } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusSideNavigationComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusSideNavigationProps {
|
|
10
|
+
/** Whether the side navigation should collapse when clicking outside of it. */
|
|
11
|
+
collapseOnClickOutside?: Components.ModusWcSideNavigation['collapseOnClickOutside'];
|
|
12
|
+
/** Custom CSS class applied to the side navigation element. */
|
|
13
|
+
className?: Components.ModusWcSideNavigation['customClass'];
|
|
14
|
+
/** Whether the side navigation is expanded. */
|
|
15
|
+
expanded?: Components.ModusWcSideNavigation['expanded'];
|
|
16
|
+
/** Maximum width of the side navigation panel in an expanded state. */
|
|
17
|
+
maxWidth?: Components.ModusWcSideNavigation['maxWidth'];
|
|
18
|
+
/** Mode to make side navigation either overlay or push the content. */
|
|
19
|
+
mode?: Components.ModusWcSideNavigation['mode'];
|
|
20
|
+
/** Specify the selector for the page's content for which paddings and margins will be set. */
|
|
21
|
+
targetContent?: Components.ModusWcSideNavigation['targetContent'];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Angular wrapper for the Modus side navigation web component.
|
|
26
|
+
*
|
|
27
|
+
* Used for organizing primary navigation and content areas in an application.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```html
|
|
31
|
+
* <modus-side-navigation
|
|
32
|
+
* [expanded]="navExpanded()"
|
|
33
|
+
* mode="push"
|
|
34
|
+
* targetContent="#main-content"
|
|
35
|
+
* (expandedChange)="handleExpandedChange($event)"
|
|
36
|
+
* >
|
|
37
|
+
* <nav-menu-items></nav-menu-items>
|
|
38
|
+
* </modus-side-navigation>
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
@Component({
|
|
42
|
+
selector: 'modus-side-navigation',
|
|
43
|
+
imports: [CommonModule, ModusWcSideNavigation],
|
|
44
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
45
|
+
template: `
|
|
46
|
+
<modus-wc-side-navigation
|
|
47
|
+
[collapseOnClickOutside]="collapseOnClickOutside()"
|
|
48
|
+
[attr.collapse-on-click-outside]="collapseOnClickOutside() ? '' : null"
|
|
49
|
+
[customClass]="className()"
|
|
50
|
+
[expanded]="expanded()"
|
|
51
|
+
[attr.expanded]="expanded() ? '' : null"
|
|
52
|
+
[maxWidth]="maxWidth()"
|
|
53
|
+
[attr.max-width]="maxWidth()"
|
|
54
|
+
[mode]="mode()"
|
|
55
|
+
[attr.mode]="mode()"
|
|
56
|
+
[targetContent]="targetContent()"
|
|
57
|
+
[attr.target-content]="targetContent()"
|
|
58
|
+
(expandedChange)="handleExpandedChange($event)"
|
|
59
|
+
>
|
|
60
|
+
<ng-content />
|
|
61
|
+
</modus-wc-side-navigation>
|
|
62
|
+
`,
|
|
63
|
+
})
|
|
64
|
+
export class ModusSideNavigationComponent {
|
|
65
|
+
/** Whether the side navigation should collapse when clicking outside of it. */
|
|
66
|
+
readonly collapseOnClickOutside = input<boolean>(true);
|
|
67
|
+
|
|
68
|
+
/** Custom CSS class applied to the side navigation element. */
|
|
69
|
+
readonly className = input<string | undefined>();
|
|
70
|
+
|
|
71
|
+
/** Whether the side navigation is expanded. */
|
|
72
|
+
readonly expanded = input<boolean>(false);
|
|
73
|
+
|
|
74
|
+
/** Maximum width of the side navigation panel in an expanded state. */
|
|
75
|
+
readonly maxWidth = input<string>('256px');
|
|
76
|
+
|
|
77
|
+
/** Mode to make side navigation either overlay or push the content. */
|
|
78
|
+
readonly mode = input<'overlay' | 'push' | undefined>('overlay');
|
|
79
|
+
|
|
80
|
+
/** Specify the selector for the page's content for which paddings and margins will be set. */
|
|
81
|
+
readonly targetContent = input<string>('');
|
|
82
|
+
|
|
83
|
+
/** Emits when the expanded state changes (expanded/collapsed). */
|
|
84
|
+
readonly expandedChange = output<boolean>();
|
|
85
|
+
|
|
86
|
+
/** Handles expanded change events from the Modus Side Navigation Web Component. */
|
|
87
|
+
handleExpandedChange(event: CustomEvent<boolean>): void {
|
|
88
|
+
this.expandedChange.emit(event.detail);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcSkeleton } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusSkeletonComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusSkeletonProps {
|
|
10
|
+
/** Custom CSS class applied to the skeleton element. */
|
|
11
|
+
className?: Components.ModusWcSkeleton['customClass'];
|
|
12
|
+
/** The height of the skeleton. */
|
|
13
|
+
height?: Components.ModusWcSkeleton['height'];
|
|
14
|
+
/** The shape of the skeleton. */
|
|
15
|
+
shape?: Components.ModusWcSkeleton['shape'];
|
|
16
|
+
/** The width of the skeleton. */
|
|
17
|
+
width?: Components.ModusWcSkeleton['width'];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Angular wrapper for the Modus skeleton web component.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```html
|
|
25
|
+
* <modus-skeleton shape="rectangle" width="200px" height="20px" />
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
@Component({
|
|
29
|
+
selector: 'modus-skeleton',
|
|
30
|
+
imports: [CommonModule, ModusWcSkeleton],
|
|
31
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
32
|
+
template: `
|
|
33
|
+
<modus-wc-skeleton
|
|
34
|
+
[customClass]="className()"
|
|
35
|
+
[height]="height()"
|
|
36
|
+
[shape]="shape()"
|
|
37
|
+
[width]="width()"
|
|
38
|
+
/>
|
|
39
|
+
`,
|
|
40
|
+
})
|
|
41
|
+
export class ModusSkeletonComponent {
|
|
42
|
+
/** Custom CSS class applied to the skeleton element. */
|
|
43
|
+
readonly className = input<string | undefined>();
|
|
44
|
+
|
|
45
|
+
/** The height of the skeleton. */
|
|
46
|
+
readonly height = input<string>('var(--modus-wc-line-height-md)');
|
|
47
|
+
|
|
48
|
+
/** The shape of the skeleton. */
|
|
49
|
+
readonly shape = input<'circle' | 'rectangle' | undefined>('rectangle');
|
|
50
|
+
|
|
51
|
+
/** The width of the skeleton. */
|
|
52
|
+
readonly width = input<string>('100%');
|
|
53
|
+
}
|
|
54
|
+
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcSlider } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components, ModusSize } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusSliderComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusSliderProps {
|
|
10
|
+
/** Custom CSS class applied to the slider element. */
|
|
11
|
+
className?: Components.ModusWcSlider['customClass'];
|
|
12
|
+
/** Disables the slider. */
|
|
13
|
+
disabled?: Components.ModusWcSlider['disabled'];
|
|
14
|
+
/** Identifier applied to the slider input element. */
|
|
15
|
+
inputId?: Components.ModusWcSlider['inputId'];
|
|
16
|
+
/** Tab index applied to the slider input. */
|
|
17
|
+
inputTabIndex?: Components.ModusWcSlider['inputTabIndex'];
|
|
18
|
+
/** Label text displayed above the slider. */
|
|
19
|
+
label?: Components.ModusWcSlider['label'];
|
|
20
|
+
/** Maximum slider value. */
|
|
21
|
+
max?: Components.ModusWcSlider['max'];
|
|
22
|
+
/** Minimum slider value. */
|
|
23
|
+
min?: Components.ModusWcSlider['min'];
|
|
24
|
+
/** Name attribute submitted in forms. */
|
|
25
|
+
name?: Components.ModusWcSlider['name'];
|
|
26
|
+
/** Marks the slider as required. */
|
|
27
|
+
required?: Components.ModusWcSlider['required'];
|
|
28
|
+
/** Control size token. */
|
|
29
|
+
size?: ModusSize;
|
|
30
|
+
/** The increment of the slider. */
|
|
31
|
+
step?: Components.ModusWcSlider['step'];
|
|
32
|
+
/** Current slider value. */
|
|
33
|
+
value?: Components.ModusWcSlider['value'];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Angular wrapper for the Modus slider web component.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```html
|
|
41
|
+
* <modus-slider
|
|
42
|
+
* label="Volume"
|
|
43
|
+
* [min]="0"
|
|
44
|
+
* [max]="100"
|
|
45
|
+
* [value]="volume()"
|
|
46
|
+
* (inputChange)="volume.set($event.target.value)"
|
|
47
|
+
* />
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
@Component({
|
|
51
|
+
selector: 'modus-slider',
|
|
52
|
+
imports: [CommonModule, ModusWcSlider],
|
|
53
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
54
|
+
template: `
|
|
55
|
+
<modus-wc-slider
|
|
56
|
+
[customClass]="className()"
|
|
57
|
+
[disabled]="disabled()"
|
|
58
|
+
[inputId]="inputId()"
|
|
59
|
+
[inputTabIndex]="inputTabIndex()"
|
|
60
|
+
[label]="label()"
|
|
61
|
+
[max]="max()"
|
|
62
|
+
[min]="min()"
|
|
63
|
+
[name]="name()"
|
|
64
|
+
[required]="required()"
|
|
65
|
+
[size]="size()"
|
|
66
|
+
[step]="step()"
|
|
67
|
+
[value]="value()"
|
|
68
|
+
(inputBlur)="handleBlur($event)"
|
|
69
|
+
(inputChange)="handleChange($event)"
|
|
70
|
+
(inputFocus)="handleFocus($event)"
|
|
71
|
+
/>
|
|
72
|
+
`,
|
|
73
|
+
})
|
|
74
|
+
export class ModusSliderComponent {
|
|
75
|
+
/** Custom CSS class applied to the slider element. */
|
|
76
|
+
readonly className = input<string | undefined>();
|
|
77
|
+
|
|
78
|
+
/** Disables the slider. */
|
|
79
|
+
readonly disabled = input<boolean | undefined>(false);
|
|
80
|
+
|
|
81
|
+
/** Identifier applied to the slider input element. */
|
|
82
|
+
readonly inputId = input<string | undefined>();
|
|
83
|
+
|
|
84
|
+
/** Tab index applied to the slider input. */
|
|
85
|
+
readonly inputTabIndex = input<number | undefined>();
|
|
86
|
+
|
|
87
|
+
/** Label text displayed above the slider. */
|
|
88
|
+
readonly label = input<string | undefined>();
|
|
89
|
+
|
|
90
|
+
/** Maximum slider value. */
|
|
91
|
+
readonly max = input<number | undefined>();
|
|
92
|
+
|
|
93
|
+
/** Minimum slider value. */
|
|
94
|
+
readonly min = input<number | undefined>();
|
|
95
|
+
|
|
96
|
+
/** Name attribute submitted in forms. */
|
|
97
|
+
readonly name = input<string>('');
|
|
98
|
+
|
|
99
|
+
/** Marks the slider as required. */
|
|
100
|
+
readonly required = input<boolean | undefined>(false);
|
|
101
|
+
|
|
102
|
+
/** Control size token. */
|
|
103
|
+
readonly size = input<ModusSize | undefined>('md');
|
|
104
|
+
|
|
105
|
+
/** The increment of the slider. */
|
|
106
|
+
readonly step = input<number | undefined>();
|
|
107
|
+
|
|
108
|
+
/** Current slider value. */
|
|
109
|
+
readonly value = input<number>(0);
|
|
110
|
+
|
|
111
|
+
/** Emits when the slider loses focus. */
|
|
112
|
+
readonly inputBlur = output<FocusEvent>();
|
|
113
|
+
|
|
114
|
+
/** Emits when the value changes. */
|
|
115
|
+
readonly inputChange = output<InputEvent>();
|
|
116
|
+
|
|
117
|
+
/** Emits when the slider gains focus. */
|
|
118
|
+
readonly inputFocus = output<FocusEvent>();
|
|
119
|
+
|
|
120
|
+
handleBlur(event: CustomEvent<FocusEvent>): void {
|
|
121
|
+
this.inputBlur.emit(event.detail);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
handleChange(event: CustomEvent<InputEvent>): void {
|
|
125
|
+
this.inputChange.emit(event.detail);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
handleFocus(event: CustomEvent<FocusEvent>): void {
|
|
129
|
+
this.inputFocus.emit(event.detail);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcStepper } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components, Orientation } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props for a step item in the stepper component.
|
|
8
|
+
*/
|
|
9
|
+
export interface IStepperItem {
|
|
10
|
+
/** The color theme of the step. */
|
|
11
|
+
color?: 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error' | 'neutral';
|
|
12
|
+
/** Custom content to display in the step indicator. */
|
|
13
|
+
content?: string;
|
|
14
|
+
/** Custom CSS class to apply to the step. */
|
|
15
|
+
customClass?: string;
|
|
16
|
+
/** Text label for the step. */
|
|
17
|
+
label?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Props supported by the {@link ModusStepperComponent}.
|
|
22
|
+
*/
|
|
23
|
+
export interface ModusStepperProps {
|
|
24
|
+
/** Custom CSS class applied to the stepper element. */
|
|
25
|
+
className?: Components.ModusWcStepper['customClass'];
|
|
26
|
+
/** The orientation of the steps. */
|
|
27
|
+
orientation?: Orientation;
|
|
28
|
+
/** The steps to display. */
|
|
29
|
+
steps: IStepperItem[];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Angular wrapper for the Modus stepper web component.
|
|
34
|
+
*
|
|
35
|
+
* Used to show a list of steps in a process.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```html
|
|
39
|
+
* <modus-stepper
|
|
40
|
+
* [steps]="[
|
|
41
|
+
* { label: 'Step 1', color: 'primary' },
|
|
42
|
+
* { label: 'Step 2', color: 'info' },
|
|
43
|
+
* { label: 'Step 3' }
|
|
44
|
+
* ]"
|
|
45
|
+
* />
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
@Component({
|
|
49
|
+
selector: 'modus-stepper',
|
|
50
|
+
imports: [CommonModule, ModusWcStepper],
|
|
51
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
52
|
+
template: `
|
|
53
|
+
<modus-wc-stepper [customClass]="className()" [orientation]="orientation()" [steps]="steps()" />
|
|
54
|
+
`,
|
|
55
|
+
})
|
|
56
|
+
export class ModusStepperComponent {
|
|
57
|
+
/** Custom CSS class applied to the stepper element. */
|
|
58
|
+
readonly className = input<string | undefined>();
|
|
59
|
+
|
|
60
|
+
/** The orientation of the steps. */
|
|
61
|
+
readonly orientation = input<Orientation | undefined>();
|
|
62
|
+
|
|
63
|
+
/** The steps to display. */
|
|
64
|
+
readonly steps = input.required<IStepperItem[]>();
|
|
65
|
+
}
|