@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,168 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcTextarea } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components, IInputFeedbackProp, ModusSize } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusTextareaComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusTextareaProps {
|
|
10
|
+
/** Controls automatic correction in inputted text. */
|
|
11
|
+
autoCorrect?: Components.ModusWcTextarea['autoCorrect'];
|
|
12
|
+
/** Indicates that the input should have a border. */
|
|
13
|
+
bordered?: Components.ModusWcTextarea['bordered'];
|
|
14
|
+
/** Custom CSS class applied to the textarea. */
|
|
15
|
+
className?: Components.ModusWcTextarea['customClass'];
|
|
16
|
+
/** Disables the textarea. */
|
|
17
|
+
disabled?: Components.ModusWcTextarea['disabled'];
|
|
18
|
+
/** A hint to the browser for which enter key to display. */
|
|
19
|
+
enterkeyhint?: Components.ModusWcTextarea['enterkeyhint'];
|
|
20
|
+
/** Feedback configuration rendered below the textarea. */
|
|
21
|
+
feedback?: IInputFeedbackProp;
|
|
22
|
+
/** Identifier applied to the textarea element. */
|
|
23
|
+
inputId?: Components.ModusWcTextarea['inputId'];
|
|
24
|
+
/** Tab index applied to the textarea. */
|
|
25
|
+
inputTabIndex?: Components.ModusWcTextarea['inputTabIndex'];
|
|
26
|
+
/** Label text displayed above the textarea. */
|
|
27
|
+
label?: Components.ModusWcTextarea['label'];
|
|
28
|
+
/** Maximum number of characters allowed. */
|
|
29
|
+
maxLength?: Components.ModusWcTextarea['maxLength'];
|
|
30
|
+
/** Minimum number of characters required. */
|
|
31
|
+
minLength?: Components.ModusWcTextarea['minLength'];
|
|
32
|
+
/** Name attribute submitted in forms. */
|
|
33
|
+
name?: Components.ModusWcTextarea['name'];
|
|
34
|
+
/** Placeholder text displayed when empty. */
|
|
35
|
+
placeholder?: Components.ModusWcTextarea['placeholder'];
|
|
36
|
+
/** Prevents editing when true. */
|
|
37
|
+
readonly?: Components.ModusWcTextarea['readonly'];
|
|
38
|
+
/** Marks the field as required. */
|
|
39
|
+
required?: Components.ModusWcTextarea['required'];
|
|
40
|
+
/** Number of visible text lines. */
|
|
41
|
+
rows?: Components.ModusWcTextarea['rows'];
|
|
42
|
+
/** Control size token. */
|
|
43
|
+
size?: ModusSize;
|
|
44
|
+
/** Current textarea value. */
|
|
45
|
+
value?: Components.ModusWcTextarea['value'];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Angular wrapper for the Modus textarea web component.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```html
|
|
53
|
+
* <modus-textarea
|
|
54
|
+
* label="Comments"
|
|
55
|
+
* [rows]="4"
|
|
56
|
+
* [value]="comments()"
|
|
57
|
+
* (inputChange)="comments.set($event.target.value)"
|
|
58
|
+
* />
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
@Component({
|
|
62
|
+
selector: 'modus-textarea',
|
|
63
|
+
imports: [CommonModule, ModusWcTextarea],
|
|
64
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
65
|
+
template: `
|
|
66
|
+
<modus-wc-textarea
|
|
67
|
+
[autoCorrect]="autoCorrect()"
|
|
68
|
+
[bordered]="bordered()"
|
|
69
|
+
[customClass]="className()"
|
|
70
|
+
[disabled]="disabled()"
|
|
71
|
+
[enterkeyhint]="enterkeyhint()"
|
|
72
|
+
[feedback]="feedback()"
|
|
73
|
+
[inputId]="inputId()"
|
|
74
|
+
[inputTabIndex]="inputTabIndex()"
|
|
75
|
+
[label]="label()"
|
|
76
|
+
[maxLength]="maxLength()"
|
|
77
|
+
[minLength]="minLength()"
|
|
78
|
+
[name]="name()"
|
|
79
|
+
[placeholder]="placeholder()"
|
|
80
|
+
[readonly]="readonly()"
|
|
81
|
+
[required]="required()"
|
|
82
|
+
[rows]="rows()"
|
|
83
|
+
[size]="size()"
|
|
84
|
+
[value]="value()"
|
|
85
|
+
(inputBlur)="handleBlur($event)"
|
|
86
|
+
(inputChange)="handleChange($event)"
|
|
87
|
+
(inputFocus)="handleFocus($event)"
|
|
88
|
+
/>
|
|
89
|
+
`,
|
|
90
|
+
})
|
|
91
|
+
export class ModusTextareaComponent {
|
|
92
|
+
/** Controls automatic correction in inputted text. */
|
|
93
|
+
readonly autoCorrect = input<'on' | 'off' | undefined>();
|
|
94
|
+
|
|
95
|
+
/** Indicates that the input should have a border. */
|
|
96
|
+
readonly bordered = input<boolean | undefined>(true);
|
|
97
|
+
|
|
98
|
+
/** Custom CSS class applied to the textarea. */
|
|
99
|
+
readonly className = input<string | undefined>();
|
|
100
|
+
|
|
101
|
+
/** Disables the textarea. */
|
|
102
|
+
readonly disabled = input<boolean | undefined>(false);
|
|
103
|
+
|
|
104
|
+
/** A hint to the browser for which enter key to display. */
|
|
105
|
+
readonly enterkeyhint = input<
|
|
106
|
+
'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send' | undefined
|
|
107
|
+
>();
|
|
108
|
+
|
|
109
|
+
/** Feedback configuration rendered below the textarea. */
|
|
110
|
+
readonly feedback = input<IInputFeedbackProp | undefined>();
|
|
111
|
+
|
|
112
|
+
/** Identifier applied to the textarea element. */
|
|
113
|
+
readonly inputId = input<string | undefined>();
|
|
114
|
+
|
|
115
|
+
/** Tab index applied to the textarea. */
|
|
116
|
+
readonly inputTabIndex = input<number | undefined>();
|
|
117
|
+
|
|
118
|
+
/** Label text displayed above the textarea. */
|
|
119
|
+
readonly label = input<string | undefined>();
|
|
120
|
+
|
|
121
|
+
/** Maximum number of characters allowed. */
|
|
122
|
+
readonly maxLength = input<number | undefined>();
|
|
123
|
+
|
|
124
|
+
/** Minimum number of characters required. */
|
|
125
|
+
readonly minLength = input<number | undefined>();
|
|
126
|
+
|
|
127
|
+
/** Name attribute submitted in forms. */
|
|
128
|
+
readonly name = input<string | undefined>();
|
|
129
|
+
|
|
130
|
+
/** Placeholder text displayed when empty. */
|
|
131
|
+
readonly placeholder = input<string>('');
|
|
132
|
+
|
|
133
|
+
/** Prevents editing when true. */
|
|
134
|
+
readonly readonly = input<boolean | undefined>(false);
|
|
135
|
+
|
|
136
|
+
/** Marks the field as required. */
|
|
137
|
+
readonly required = input<boolean | undefined>(false);
|
|
138
|
+
|
|
139
|
+
/** Number of visible text lines. */
|
|
140
|
+
readonly rows = input<number | undefined>();
|
|
141
|
+
|
|
142
|
+
/** Control size token. */
|
|
143
|
+
readonly size = input<ModusSize | undefined>('md');
|
|
144
|
+
|
|
145
|
+
/** Current textarea value. */
|
|
146
|
+
readonly value = input<string>('');
|
|
147
|
+
|
|
148
|
+
/** Emits when the textarea loses focus. */
|
|
149
|
+
readonly inputBlur = output<FocusEvent>();
|
|
150
|
+
|
|
151
|
+
/** Emits when the value changes. */
|
|
152
|
+
readonly inputChange = output<InputEvent>();
|
|
153
|
+
|
|
154
|
+
/** Emits when the textarea gains focus. */
|
|
155
|
+
readonly inputFocus = output<FocusEvent>();
|
|
156
|
+
|
|
157
|
+
handleBlur(event: CustomEvent<FocusEvent>): void {
|
|
158
|
+
this.inputBlur.emit(event.detail);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
handleChange(event: CustomEvent<InputEvent>): void {
|
|
162
|
+
this.inputChange.emit(event.detail);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
handleFocus(event: CustomEvent<FocusEvent>): void {
|
|
166
|
+
this.inputFocus.emit(event.detail);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcThemeSwitcher } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import { ThemeMode, ThemeName, ThemeConfig } from '../services/theme.service';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Angular wrapper component for Modus Theme Switcher.
|
|
8
|
+
*
|
|
9
|
+
* A component that allows users to toggle between light and dark themes.
|
|
10
|
+
*/
|
|
11
|
+
@Component({
|
|
12
|
+
selector: 'modus-theme-switcher',
|
|
13
|
+
standalone: true,
|
|
14
|
+
imports: [CommonModule, ModusWcThemeSwitcher],
|
|
15
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
16
|
+
template: `
|
|
17
|
+
<modus-wc-theme-switcher
|
|
18
|
+
[customClass]="className()"
|
|
19
|
+
[attr.aria-label]="ariaLabel()"
|
|
20
|
+
(themeChange)="onThemeChange($event)"
|
|
21
|
+
></modus-wc-theme-switcher>
|
|
22
|
+
`,
|
|
23
|
+
})
|
|
24
|
+
export class ModusThemeSwitcherComponent {
|
|
25
|
+
/** Custom CSS class applied to the theme switcher element. */
|
|
26
|
+
readonly className = input<string | undefined>();
|
|
27
|
+
|
|
28
|
+
/** Accessible label for the theme switcher */
|
|
29
|
+
readonly ariaLabel = input<string | undefined>('Toggle theme');
|
|
30
|
+
|
|
31
|
+
/** Event emitted when theme is changed */
|
|
32
|
+
readonly themeChange = output<ThemeConfig>();
|
|
33
|
+
|
|
34
|
+
onThemeChange(event: Event): void {
|
|
35
|
+
const customEvent = event as CustomEvent<{ theme: string; mode: string }>;
|
|
36
|
+
if (customEvent && customEvent.detail) {
|
|
37
|
+
// The event detail contains { theme, mode }
|
|
38
|
+
const config: ThemeConfig = {
|
|
39
|
+
theme: customEvent.detail.theme as ThemeName,
|
|
40
|
+
mode: customEvent.detail.mode as ThemeMode,
|
|
41
|
+
};
|
|
42
|
+
this.themeChange.emit(config);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcTimeInput } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components, IInputFeedbackProp, ModusSize } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusTimeInputComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusTimeInputProps {
|
|
10
|
+
/** Hint for form autofill feature. */
|
|
11
|
+
autoComplete?: Components.ModusWcTimeInput['autoComplete'];
|
|
12
|
+
/** Indicates that the input should have a border. */
|
|
13
|
+
bordered?: Components.ModusWcTimeInput['bordered'];
|
|
14
|
+
/** Custom CSS class applied to the input. */
|
|
15
|
+
className?: Components.ModusWcTimeInput['customClass'];
|
|
16
|
+
/** The options to display in the time input dropdown. */
|
|
17
|
+
datalistOptions?: Components.ModusWcTimeInput['datalistOptions'];
|
|
18
|
+
/** Whether the form control is disabled. */
|
|
19
|
+
disabled?: Components.ModusWcTimeInput['disabled'];
|
|
20
|
+
/** Feedback configuration rendered below the input. */
|
|
21
|
+
feedback?: IInputFeedbackProp;
|
|
22
|
+
/** The ID of the input element. */
|
|
23
|
+
inputId?: Components.ModusWcTimeInput['inputId'];
|
|
24
|
+
/** Tab index applied to the input. */
|
|
25
|
+
inputTabIndex?: Components.ModusWcTimeInput['inputTabIndex'];
|
|
26
|
+
/** ID of a `<datalist>` element that contains pre-defined time options. */
|
|
27
|
+
datalistId?: Components.ModusWcTimeInput['datalistId'];
|
|
28
|
+
/** Label text displayed above the input. */
|
|
29
|
+
label?: Components.ModusWcTimeInput['label'];
|
|
30
|
+
/** Maximum value. Format: `HH:mm`, `HH:mm:ss`. */
|
|
31
|
+
max?: Components.ModusWcTimeInput['max'];
|
|
32
|
+
/** Minimum value. Format: `HH:mm`, `HH:mm:ss`. */
|
|
33
|
+
min?: Components.ModusWcTimeInput['min'];
|
|
34
|
+
/** Name attribute submitted in forms. */
|
|
35
|
+
name?: Components.ModusWcTimeInput['name'];
|
|
36
|
+
/** Prevents editing when true. */
|
|
37
|
+
readOnly?: Components.ModusWcTimeInput['readOnly'];
|
|
38
|
+
/** Marks the field as required. */
|
|
39
|
+
required?: Components.ModusWcTimeInput['required'];
|
|
40
|
+
/** Displays the time input format as `HH:mm:ss` if `true`. */
|
|
41
|
+
showSeconds?: Components.ModusWcTimeInput['showSeconds'];
|
|
42
|
+
/** Control size token. */
|
|
43
|
+
size?: ModusSize;
|
|
44
|
+
/** Specifies the granularity that the `value` must adhere to. */
|
|
45
|
+
step?: Components.ModusWcTimeInput['step'];
|
|
46
|
+
/** Current time value. Format: `HH:mm` or `HH:mm:ss`. */
|
|
47
|
+
value?: Components.ModusWcTimeInput['value'];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Angular wrapper for the Modus time input web component.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```html
|
|
55
|
+
* <modus-time-input
|
|
56
|
+
* label="Start time"
|
|
57
|
+
* [value]="startTime()"
|
|
58
|
+
* (inputChange)="startTime.set($event.target.value)"
|
|
59
|
+
* />
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
@Component({
|
|
63
|
+
selector: 'modus-time-input',
|
|
64
|
+
imports: [CommonModule, ModusWcTimeInput],
|
|
65
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
66
|
+
template: `
|
|
67
|
+
<modus-wc-time-input
|
|
68
|
+
[autoComplete]="autoComplete()"
|
|
69
|
+
[bordered]="bordered()"
|
|
70
|
+
[customClass]="className()"
|
|
71
|
+
[datalistOptions]="datalistOptions()"
|
|
72
|
+
[disabled]="disabled()"
|
|
73
|
+
[feedback]="feedback()"
|
|
74
|
+
[inputId]="inputId()"
|
|
75
|
+
[inputTabIndex]="inputTabIndex()"
|
|
76
|
+
[datalistId]="datalistId()"
|
|
77
|
+
[label]="label()"
|
|
78
|
+
[max]="max()"
|
|
79
|
+
[min]="min()"
|
|
80
|
+
[name]="name()"
|
|
81
|
+
[readOnly]="readOnly()"
|
|
82
|
+
[required]="required()"
|
|
83
|
+
[showSeconds]="showSeconds()"
|
|
84
|
+
[size]="size()"
|
|
85
|
+
[step]="step()"
|
|
86
|
+
[value]="value()"
|
|
87
|
+
(inputBlur)="handleBlur($event)"
|
|
88
|
+
(inputChange)="handleChange($event)"
|
|
89
|
+
(inputFocus)="handleFocus($event)"
|
|
90
|
+
/>
|
|
91
|
+
`,
|
|
92
|
+
})
|
|
93
|
+
export class ModusTimeInputComponent {
|
|
94
|
+
/** Hint for form autofill feature. */
|
|
95
|
+
readonly autoComplete = input<'on' | 'off' | undefined>();
|
|
96
|
+
|
|
97
|
+
/** Indicates that the input should have a border. */
|
|
98
|
+
readonly bordered = input<boolean | undefined>(true);
|
|
99
|
+
|
|
100
|
+
/** Custom CSS class applied to the input. */
|
|
101
|
+
readonly className = input<string | undefined>();
|
|
102
|
+
|
|
103
|
+
/** The options to display in the time input dropdown. */
|
|
104
|
+
readonly datalistOptions = input<string[]>([]);
|
|
105
|
+
|
|
106
|
+
/** Whether the form control is disabled. */
|
|
107
|
+
readonly disabled = input<boolean | undefined>(false);
|
|
108
|
+
|
|
109
|
+
/** Feedback configuration rendered below the input. */
|
|
110
|
+
readonly feedback = input<IInputFeedbackProp | undefined>();
|
|
111
|
+
|
|
112
|
+
/** The ID of the input element. */
|
|
113
|
+
readonly inputId = input<string | undefined>();
|
|
114
|
+
|
|
115
|
+
/** Tab index applied to the input. */
|
|
116
|
+
readonly inputTabIndex = input<number | undefined>();
|
|
117
|
+
|
|
118
|
+
/** ID of a `<datalist>` element that contains pre-defined time options. */
|
|
119
|
+
readonly datalistId = input<string | undefined>();
|
|
120
|
+
|
|
121
|
+
/** Label text displayed above the input. */
|
|
122
|
+
readonly label = input<string | undefined>();
|
|
123
|
+
|
|
124
|
+
/** Maximum value. Format: `HH:mm`, `HH:mm:ss`. */
|
|
125
|
+
readonly max = input<string | undefined>();
|
|
126
|
+
|
|
127
|
+
/** Minimum value. Format: `HH:mm`, `HH:mm:ss`. */
|
|
128
|
+
readonly min = input<string | undefined>();
|
|
129
|
+
|
|
130
|
+
/** Name attribute submitted in forms. */
|
|
131
|
+
readonly name = input<string | undefined>();
|
|
132
|
+
|
|
133
|
+
/** Prevents editing when true. */
|
|
134
|
+
readonly readOnly = input<boolean | undefined>(false);
|
|
135
|
+
|
|
136
|
+
/** Marks the field as required. */
|
|
137
|
+
readonly required = input<boolean | undefined>(false);
|
|
138
|
+
|
|
139
|
+
/** Displays the time input format as `HH:mm:ss` if `true`. */
|
|
140
|
+
readonly showSeconds = input<boolean | undefined>(false);
|
|
141
|
+
|
|
142
|
+
/** Control size token. */
|
|
143
|
+
readonly size = input<ModusSize | undefined>('md');
|
|
144
|
+
|
|
145
|
+
/** Specifies the granularity that the `value` must adhere to. */
|
|
146
|
+
readonly step = input<number | undefined>();
|
|
147
|
+
|
|
148
|
+
/** Current time value. Format: `HH:mm` or `HH:mm:ss`. */
|
|
149
|
+
readonly value = input<string>('');
|
|
150
|
+
|
|
151
|
+
/** Emits when the input loses focus. */
|
|
152
|
+
readonly inputBlur = output<FocusEvent>();
|
|
153
|
+
|
|
154
|
+
/** Emits when the value changes. */
|
|
155
|
+
readonly inputChange = output<Event>();
|
|
156
|
+
|
|
157
|
+
/** Emits when the input gains focus. */
|
|
158
|
+
readonly inputFocus = output<FocusEvent>();
|
|
159
|
+
|
|
160
|
+
handleBlur(event: CustomEvent<FocusEvent>): void {
|
|
161
|
+
this.inputBlur.emit(event.detail);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
handleChange(event: CustomEvent<Event>): void {
|
|
165
|
+
this.inputChange.emit(event.detail);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
handleFocus(event: CustomEvent<FocusEvent>): void {
|
|
169
|
+
this.inputFocus.emit(event.detail);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcToast } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Toast position in the parent container.
|
|
8
|
+
*/
|
|
9
|
+
export type ToastPosition =
|
|
10
|
+
| 'top-start'
|
|
11
|
+
| 'top-center'
|
|
12
|
+
| 'top-end'
|
|
13
|
+
| 'middle-start'
|
|
14
|
+
| 'middle-center'
|
|
15
|
+
| 'middle-end'
|
|
16
|
+
| 'bottom-start'
|
|
17
|
+
| 'bottom-center'
|
|
18
|
+
| 'bottom-end';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Props supported by the {@link ModusToastComponent}.
|
|
22
|
+
*/
|
|
23
|
+
export interface ModusToastProps {
|
|
24
|
+
/** Custom CSS class applied to the toast element. */
|
|
25
|
+
className?: Components.ModusWcToast['customClass'];
|
|
26
|
+
/** Time taken to dismiss the toast in milliseconds. */
|
|
27
|
+
delay?: Components.ModusWcToast['delay'];
|
|
28
|
+
/** The position of the toast in the parent container. */
|
|
29
|
+
position?: ToastPosition;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Angular wrapper for the Modus toast web component.
|
|
34
|
+
*
|
|
35
|
+
* The toast component supports projecting arbitrary content inside the toast slot.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```html
|
|
39
|
+
* <modus-toast position="top-end" [delay]="5000">
|
|
40
|
+
* <div>Toast message content</div>
|
|
41
|
+
* </modus-toast>
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
@Component({
|
|
45
|
+
selector: 'modus-toast',
|
|
46
|
+
imports: [CommonModule, ModusWcToast],
|
|
47
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
48
|
+
template: `
|
|
49
|
+
<modus-wc-toast [customClass]="className()" [delay]="delay()" [position]="position()">
|
|
50
|
+
<ng-content />
|
|
51
|
+
</modus-wc-toast>
|
|
52
|
+
`,
|
|
53
|
+
})
|
|
54
|
+
export class ModusToastComponent {
|
|
55
|
+
/** Custom CSS class applied to the toast element. */
|
|
56
|
+
readonly className = input<string | undefined>();
|
|
57
|
+
|
|
58
|
+
/** Time taken to dismiss the toast in milliseconds. */
|
|
59
|
+
readonly delay = input<number | undefined>();
|
|
60
|
+
|
|
61
|
+
/** The position of the toast in the parent container. */
|
|
62
|
+
readonly position = input<ToastPosition | undefined>('top-end');
|
|
63
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcToolbar } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusToolbarComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusToolbarProps {
|
|
10
|
+
/** Custom CSS class applied to the toolbar element. */
|
|
11
|
+
className?: Components.ModusWcToolbar['customClass'];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Angular wrapper for the Modus toolbar web component.
|
|
16
|
+
*
|
|
17
|
+
* Used to organize content across the entire page with start, center, and end slots.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```html
|
|
21
|
+
* <modus-toolbar>
|
|
22
|
+
* <button slot="start">Start</button>
|
|
23
|
+
* <div slot="center">Center Content</div>
|
|
24
|
+
* <button slot="end">End</button>
|
|
25
|
+
* </modus-toolbar>
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
@Component({
|
|
29
|
+
selector: 'modus-toolbar',
|
|
30
|
+
imports: [CommonModule, ModusWcToolbar],
|
|
31
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
32
|
+
template: `
|
|
33
|
+
<modus-wc-toolbar [customClass]="className()">
|
|
34
|
+
<ng-content select="[slot='start']" slot="start" />
|
|
35
|
+
<ng-content select="[slot='center']" slot="center" />
|
|
36
|
+
<ng-content select="[slot='end']" slot="end" />
|
|
37
|
+
</modus-wc-toolbar>
|
|
38
|
+
`,
|
|
39
|
+
})
|
|
40
|
+
export class ModusToolbarComponent {
|
|
41
|
+
/** Custom CSS class applied to the toolbar element. */
|
|
42
|
+
readonly className = input<string | undefined>();
|
|
43
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcTooltip } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props supported by the {@link ModusTooltipComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export interface ModusTooltipProps {
|
|
10
|
+
/** The text content of the tooltip. */
|
|
11
|
+
content?: Components.ModusWcTooltip['content'];
|
|
12
|
+
/** Custom CSS class applied to the tooltip element. */
|
|
13
|
+
className?: Components.ModusWcTooltip['customClass'];
|
|
14
|
+
/** Disables displaying the tooltip on hover. */
|
|
15
|
+
disabled?: Components.ModusWcTooltip['disabled'];
|
|
16
|
+
/** Use this attribute to force the tooltip to remain open. */
|
|
17
|
+
forceOpen?: Components.ModusWcTooltip['forceOpen'];
|
|
18
|
+
/** The ID of the tooltip element. */
|
|
19
|
+
tooltipId?: Components.ModusWcTooltip['tooltipId'];
|
|
20
|
+
/** The position that the tooltip will render in relation to the element. */
|
|
21
|
+
position?: Components.ModusWcTooltip['position'];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Angular wrapper for the Modus tooltip web component.
|
|
26
|
+
*
|
|
27
|
+
* The tooltip can be dismissed by pressing the Escape key when hovering over it.
|
|
28
|
+
* When forceOpen is enabled, the tooltip will remain open and can only be closed
|
|
29
|
+
* by setting forceOpen to false.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```html
|
|
33
|
+
* <modus-tooltip content="This is a tooltip" position="top">
|
|
34
|
+
* <button>Hover me</button>
|
|
35
|
+
* </modus-tooltip>
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
@Component({
|
|
39
|
+
selector: 'modus-tooltip',
|
|
40
|
+
imports: [CommonModule, ModusWcTooltip],
|
|
41
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
42
|
+
template: `
|
|
43
|
+
<modus-wc-tooltip
|
|
44
|
+
[content]="content()"
|
|
45
|
+
[customClass]="className()"
|
|
46
|
+
[disabled]="disabled()"
|
|
47
|
+
[forceOpen]="forceOpen()"
|
|
48
|
+
[tooltipId]="tooltipId()"
|
|
49
|
+
[position]="position()"
|
|
50
|
+
(dismissEscape)="handleDismissEscape()"
|
|
51
|
+
>
|
|
52
|
+
<ng-content />
|
|
53
|
+
</modus-wc-tooltip>
|
|
54
|
+
`,
|
|
55
|
+
})
|
|
56
|
+
export class ModusTooltipComponent {
|
|
57
|
+
/** The text content of the tooltip. */
|
|
58
|
+
readonly content = input<string>('');
|
|
59
|
+
|
|
60
|
+
/** Custom CSS class applied to the tooltip element. */
|
|
61
|
+
readonly className = input<string | undefined>();
|
|
62
|
+
|
|
63
|
+
/** Disables displaying the tooltip on hover. */
|
|
64
|
+
readonly disabled = input<boolean | undefined>(false);
|
|
65
|
+
|
|
66
|
+
/** Use this attribute to force the tooltip to remain open. */
|
|
67
|
+
readonly forceOpen = input<boolean | undefined>();
|
|
68
|
+
|
|
69
|
+
/** The ID of the tooltip element. */
|
|
70
|
+
readonly tooltipId = input<string | undefined>();
|
|
71
|
+
|
|
72
|
+
/** The position that the tooltip will render in relation to the element. */
|
|
73
|
+
readonly position = input<'auto' | 'top' | 'right' | 'bottom' | 'left' | undefined>('auto');
|
|
74
|
+
|
|
75
|
+
/** Emits when the tooltip is dismissed via Escape key. */
|
|
76
|
+
readonly dismissEscape = output<void>();
|
|
77
|
+
|
|
78
|
+
/** Handles tooltip dismissal via Escape key. */
|
|
79
|
+
handleDismissEscape(): void {
|
|
80
|
+
this.dismissEscape.emit();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ModusWcTypography } from '@trimble-oss/moduswebcomponents-angular';
|
|
4
|
+
import type { Components } from '@trimble-oss/moduswebcomponents';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Typography hierarchy options.
|
|
8
|
+
*/
|
|
9
|
+
export type TypographyHierarchy = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Typography size options.
|
|
13
|
+
*/
|
|
14
|
+
export type TypographySize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Typography weight options.
|
|
18
|
+
*/
|
|
19
|
+
export type TypographyWeight = 'light' | 'normal' | 'semibold' | 'bold';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Props supported by the {@link ModusTypographyComponent}.
|
|
23
|
+
*/
|
|
24
|
+
export interface ModusTypographyProps {
|
|
25
|
+
/** Custom CSS class applied to the typography element. */
|
|
26
|
+
className?: Components.ModusWcTypography['customClass'];
|
|
27
|
+
/** The hierarchy of the typography component. */
|
|
28
|
+
hierarchy?: TypographyHierarchy;
|
|
29
|
+
/** The size of the font. */
|
|
30
|
+
size?: TypographySize;
|
|
31
|
+
/** The weight of the text. */
|
|
32
|
+
weight?: TypographyWeight;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Angular wrapper for the Modus typography web component.
|
|
37
|
+
*
|
|
38
|
+
* Used to render text with different sizes, hierarchy, and weights.
|
|
39
|
+
*
|
|
40
|
+
* Note: When using heading elements (h1-h6), the default heading CSS styling can be accessed
|
|
41
|
+
* without modifying the default size (size="md") and weight (weight="normal") properties.
|
|
42
|
+
* Default styling can be overridden by providing your own custom values for the size or weight
|
|
43
|
+
* properties from the available options.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```html
|
|
47
|
+
* <modus-typography hierarchy="h1" size="xl" weight="bold">
|
|
48
|
+
* Heading Text
|
|
49
|
+
* </modus-typography>
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
@Component({
|
|
53
|
+
selector: 'modus-typography',
|
|
54
|
+
imports: [CommonModule, ModusWcTypography],
|
|
55
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
56
|
+
template: `
|
|
57
|
+
<modus-wc-typography
|
|
58
|
+
[customClass]="className()"
|
|
59
|
+
[hierarchy]="hierarchy()"
|
|
60
|
+
[size]="size()"
|
|
61
|
+
[weight]="weight()"
|
|
62
|
+
>
|
|
63
|
+
<ng-content />
|
|
64
|
+
</modus-wc-typography>
|
|
65
|
+
`,
|
|
66
|
+
})
|
|
67
|
+
export class ModusTypographyComponent {
|
|
68
|
+
/** Custom CSS class applied to the typography element. */
|
|
69
|
+
readonly className = input<string | undefined>();
|
|
70
|
+
|
|
71
|
+
/** The hierarchy of the typography component. */
|
|
72
|
+
readonly hierarchy = input<TypographyHierarchy>('p');
|
|
73
|
+
|
|
74
|
+
/** The size of the font. */
|
|
75
|
+
readonly size = input<TypographySize | undefined>('md');
|
|
76
|
+
|
|
77
|
+
/** The weight of the text. */
|
|
78
|
+
readonly weight = input<TypographyWeight | undefined>('normal');
|
|
79
|
+
}
|