@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,728 @@
|
|
|
1
|
+
<!--  -->
|
|
2
|
+
|
|
3
|
+
[](https://github.com/julianoczkowski/modus-react-app/actions/workflows/ci.yml)
|
|
4
|
+
[](https://nodejs.org/)
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
|
|
7
|
+
# Modus React + Vite Boilerplate
|
|
8
|
+
|
|
9
|
+
A production-ready React 19 + Vite boilerplate/starter template with Modus 2 Web Components integration, featuring TypeScript support, comprehensive component examples, and modern development practices. Perfect for quickly bootstrapping new applications with the Modus Design System.
|
|
10
|
+
|
|
11
|
+
## Built-in Development Rules
|
|
12
|
+
|
|
13
|
+
This boilerplate comes with comprehensive development rules and standards to ensure code quality and consistency:
|
|
14
|
+
|
|
15
|
+
### Always Applied Rules
|
|
16
|
+
|
|
17
|
+
- **Color Usage** - Enforces the 9 approved Modus colors and prevents hardcoded values
|
|
18
|
+
- **Modus Web Components** - Guidelines for proper component implementation with MCP documentation
|
|
19
|
+
- **React Component Creation** - Best practices for React 19 component architecture and CSS patterns
|
|
20
|
+
|
|
21
|
+
### Context-Specific Rules
|
|
22
|
+
|
|
23
|
+
- **Modus Icons** - Complete icon system with 500+ validated icon names
|
|
24
|
+
- **Chrome DevTools Testing** - Browser debugging integration via MCP for implementation testing
|
|
25
|
+
|
|
26
|
+
> **Location:** All rules are stored in `.cursor/rules/` and automatically guide your development workflow through AI assistants.
|
|
27
|
+
|
|
28
|
+
<!--  -->
|
|
29
|
+
|
|
30
|
+
## AI Development Enhanced
|
|
31
|
+
|
|
32
|
+
This boilerplate comes pre-configured with powerful AI development tools to supercharge your workflow:
|
|
33
|
+
|
|
34
|
+
### MCP Servers Included
|
|
35
|
+
|
|
36
|
+
- **Context7** - Advanced context management for AI assistants
|
|
37
|
+
- **Chrome DevTools** - Browser debugging integration via MCP
|
|
38
|
+
- **Modus Documentation** - Direct access to complete Modus Web Components documentation through AI
|
|
39
|
+
|
|
40
|
+
### AI Skills (8 Skills)
|
|
41
|
+
|
|
42
|
+
Pre-built skills in `.cursor/skills/` for common development tasks:
|
|
43
|
+
|
|
44
|
+
- **create-modus-wrapper-component** - Scaffold new Modus component wrappers
|
|
45
|
+
- **handle-modus-checkbox-value-bug** - Handle the checkbox value inversion bug
|
|
46
|
+
- **implement-modus-modal-with-refs** - Implement modals with forwardRef pattern
|
|
47
|
+
- **set-up-modus-event-listeners** - Set up proper useEffect event listeners
|
|
48
|
+
- **integrate-modus-icons** - Integrate Modus icons correctly
|
|
49
|
+
- **create-modus-form-component** - Create form components with validation
|
|
50
|
+
- **fix-modus-component-event-issues** - Debug event handling problems
|
|
51
|
+
- **style-modus-components-with-tailwind** - Apply custom border/opacity utilities
|
|
52
|
+
|
|
53
|
+
### Development Rules & Standards
|
|
54
|
+
|
|
55
|
+
- **Cursor Rules** - 40+ pre-configured development patterns and best practices
|
|
56
|
+
- **Code Quality** - Automated linting, formatting, and type checking
|
|
57
|
+
- **AI-Optimized Workflow** - Seamless integration with modern AI coding assistants
|
|
58
|
+
|
|
59
|
+
> **Note:** The `.cursor/` directory contains MCP server configurations, development rules, and AI skills that enhance your AI-assisted development experience.
|
|
60
|
+
|
|
61
|
+
### GitHub Copilot Integration
|
|
62
|
+
|
|
63
|
+
This boilerplate includes GitHub Copilot instructions for VS Code and GitHub.com users:
|
|
64
|
+
|
|
65
|
+
- **Repository Instructions** - Located in `.github/copilot-instructions.md` with condensed development guidelines
|
|
66
|
+
- **Path-Specific Instructions** - Five specialized instruction files in `.github/instructions/`:
|
|
67
|
+
- `components.instructions.md` - Wrapper component patterns, event handling
|
|
68
|
+
- `demos.instructions.md` - Demo page structure and examples
|
|
69
|
+
- `pages.instructions.md` - Application page patterns
|
|
70
|
+
- `styles.instructions.md` - Custom CSS utilities and design system
|
|
71
|
+
- `typescript.instructions.md` - TypeScript patterns and event types
|
|
72
|
+
- **Auto-Applied** - GitHub Copilot automatically reads these instructions to provide context-aware suggestions
|
|
73
|
+
|
|
74
|
+
> **Location:** All GitHub Copilot instructions are in `.github/copilot-instructions.md` and `.github/instructions/*.instructions.md`
|
|
75
|
+
|
|
76
|
+
## What's Included
|
|
77
|
+
|
|
78
|
+
This boilerplate provides a complete foundation for building React applications with Modus Web Components:
|
|
79
|
+
|
|
80
|
+
- **React 19 + Vite** - Modern framework with SWC for ultra-fast builds and full type safety
|
|
81
|
+
- **Modus 2 Web Components** - Complete integration with the latest Modus design system
|
|
82
|
+
- **49 Wrapper Components** - Pre-built React wrappers for all Modus components
|
|
83
|
+
- **48 Component Demos** - Built-in interactive demos for every component
|
|
84
|
+
- **Standard Icon Usage** - Official Modus icon implementation with CDN delivery (500+ icons)
|
|
85
|
+
- **Theme Switching** - Support for all 6 Modus themes (Classic/Modern, Light/Dark, Connect)
|
|
86
|
+
- **Accessibility** - WCAG 2.1 AA compliant with proper ARIA support
|
|
87
|
+
- **Performance Optimized** - Vite's lightning-fast HMR and optimized builds
|
|
88
|
+
- **Development Tools** - ESLint, TypeScript, comprehensive linting scripts
|
|
89
|
+
- **Production Ready** - Optimized build configuration and deployment setup
|
|
90
|
+
- **Dev Panel** - Floating development panel with theme switcher and demo navigation
|
|
91
|
+
- **Icon Gallery** - Complete icon showcase with click-to-copy functionality
|
|
92
|
+
- **Color Palette** - Visual reference for all 9 design system colors
|
|
93
|
+
- **AI Integration** - 40+ Cursor rules, 8 AI skills, and GitHub Copilot instructions
|
|
94
|
+
|
|
95
|
+
## Figma to Code Integration
|
|
96
|
+
|
|
97
|
+

|
|
98
|
+
|
|
99
|
+
If you're working with Figma designs and want AI-assisted coding that understands your design tokens and components, check out the official Modus Figma MCP integration. This powerful tool bridges the gap between design and development by providing direct access to your Figma designs through AI assistants.
|
|
100
|
+
|
|
101
|
+
**Learn more:** [Modus Figma MCP Integration Guide](https://trimble-oss.github.io/modus-wc-2.0/main/?path=/docs/documentation-modus-figma-mcp-integration-guide--docs)
|
|
102
|
+
|
|
103
|
+
> **Perfect for:** Design-to-code workflows, maintaining design system consistency, and accelerating development with AI-powered Figma integration.
|
|
104
|
+
|
|
105
|
+
## Getting Started
|
|
106
|
+
|
|
107
|
+

|
|
108
|
+
|
|
109
|
+
### Prerequisites
|
|
110
|
+
|
|
111
|
+
- Node.js 20+ (required for React 19 compatibility)
|
|
112
|
+
- npm or yarn
|
|
113
|
+
|
|
114
|
+
### Installation
|
|
115
|
+
|
|
116
|
+
1. **Clone or use this template:**
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# Clone the repository
|
|
120
|
+
git clone <your-repo-url> my-modus-app
|
|
121
|
+
cd my-modus-app
|
|
122
|
+
|
|
123
|
+
# Or use as a template on GitHub
|
|
124
|
+
# Click "Use this template" button
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
2. **Install dependencies:**
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
npm install
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
3. **Start the development server:**
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
npm run dev
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
4. **Open your browser:**
|
|
140
|
+
Navigate to your localhost usually it is [http://localhost:5173](http://localhost:5173)
|
|
141
|
+
|
|
142
|
+
### Build for Production
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
npm run build
|
|
146
|
+
npm run preview
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Project Structure
|
|
150
|
+
|
|
151
|
+
This boilerplate follows React + Vite best practices with a clean, scalable architecture:
|
|
152
|
+
|
|
153
|
+
```text
|
|
154
|
+
modus-react-app/
|
|
155
|
+
├── src/
|
|
156
|
+
│ ├── components/ # 49 Modus wrapper components
|
|
157
|
+
│ │ ├── ModusButton.tsx
|
|
158
|
+
│ │ ├── ModusModal.tsx
|
|
159
|
+
│ │ ├── ModusIcon.tsx
|
|
160
|
+
│ │ └── ...
|
|
161
|
+
│ ├── pages/ # Your application pages
|
|
162
|
+
│ │ └── HomePage.tsx # Start here for your app
|
|
163
|
+
│ ├── demos/ # 48 component demo pages (dev only)
|
|
164
|
+
│ │ ├── button-demo/
|
|
165
|
+
│ │ ├── modal-demo/
|
|
166
|
+
│ │ └── ...
|
|
167
|
+
│ ├── dev/ # Dev Panel infrastructure
|
|
168
|
+
│ │ ├── DevPanel.tsx
|
|
169
|
+
│ │ ├── DevPanelProvider.tsx
|
|
170
|
+
│ │ └── config.ts
|
|
171
|
+
│ ├── dev-pages/ # Reference pages (dev only)
|
|
172
|
+
│ │ ├── ColorPalettePage.tsx
|
|
173
|
+
│ │ ├── IconsPage.tsx
|
|
174
|
+
│ │ └── ComponentsGalleryPage.tsx
|
|
175
|
+
│ ├── contexts/ # React contexts
|
|
176
|
+
│ │ └── ThemeContext.tsx
|
|
177
|
+
│ ├── hooks/ # Custom React hooks
|
|
178
|
+
│ │ └── useTheme.ts
|
|
179
|
+
│ ├── config/ # Configuration files
|
|
180
|
+
│ │ └── routes.ts
|
|
181
|
+
│ ├── data/ # Static data
|
|
182
|
+
│ │ └── modusIcons.ts # 500+ icon definitions
|
|
183
|
+
│ ├── App.tsx # Main app component
|
|
184
|
+
│ ├── main.tsx # Application entry point
|
|
185
|
+
│ └── index.css # Global styles and design system
|
|
186
|
+
├── scripts/ # Linting and utility scripts
|
|
187
|
+
├── docs/ # Project documentation
|
|
188
|
+
├── .cursor/
|
|
189
|
+
│ ├── rules/ # 40+ development rules
|
|
190
|
+
│ └── skills/ # 8 AI development skills
|
|
191
|
+
├── .github/
|
|
192
|
+
│ ├── copilot-instructions.md # GitHub Copilot instructions
|
|
193
|
+
│ ├── instructions/ # Path-specific Copilot instructions
|
|
194
|
+
│ └── workflows/ # CI/CD workflows
|
|
195
|
+
└── public/ # Public assets
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
> **Dev Panel:** Toggle with `Ctrl+Shift+D` or the floating button. Only renders in development mode.
|
|
199
|
+
|
|
200
|
+
## Using This Boilerplate
|
|
201
|
+
|
|
202
|
+
### Customizing for Your Project
|
|
203
|
+
|
|
204
|
+
1. **Update project information:**
|
|
205
|
+
|
|
206
|
+
- Modify `package.json` with your project details
|
|
207
|
+
- Update the app title in `src/App.tsx`
|
|
208
|
+
- Replace demo content in `src/pages/HomePage.tsx` with your application content
|
|
209
|
+
|
|
210
|
+
2. **Add your components:**
|
|
211
|
+
|
|
212
|
+
- Create new components in `src/components/`
|
|
213
|
+
- Add new pages in `src/pages/`
|
|
214
|
+
- Use React Router for navigation
|
|
215
|
+
|
|
216
|
+
3. **Configure your build:**
|
|
217
|
+
- Modify `vite.config.ts` for your deployment needs
|
|
218
|
+
- Update environment variables as needed
|
|
219
|
+
- Configure additional build optimizations
|
|
220
|
+
|
|
221
|
+
### Built-in Demos
|
|
222
|
+
|
|
223
|
+

|
|
224
|
+
|
|
225
|
+
This boilerplate includes 48 comprehensive demo pages showcasing all Modus Web Components:
|
|
226
|
+
|
|
227
|
+
- **Interactive Component Demos** - Live examples of all 49 Modus components
|
|
228
|
+
- **Theme Showcases** - See components across all 6 supported themes
|
|
229
|
+
- **Code Examples** - Each demo shows proper usage patterns
|
|
230
|
+
|
|
231
|
+
Access demos via the Dev Panel or navigate to `/dev/demos/*` routes in development mode.
|
|
232
|
+
|
|
233
|
+
### Available Modus Components (49 Components)
|
|
234
|
+
|
|
235
|
+

|
|
236
|
+
|
|
237
|
+
This boilerplate includes 49 pre-built wrapper components ready to use:
|
|
238
|
+
|
|
239
|
+
#### **Form Components (15)**
|
|
240
|
+
|
|
241
|
+
- **ModusAutocomplete** - Input with suggestions and multi-select
|
|
242
|
+
- **ModusButton** - All variants, colors, sizes, and shapes
|
|
243
|
+
- **ModusButtonGroup** - Grouped button controls with shared styling
|
|
244
|
+
- **ModusCheckbox** - Multiple selection controls (note: value inversion bug)
|
|
245
|
+
- **ModusDate** - Date input with validation
|
|
246
|
+
- **ModusFileDropzone** - Drag-and-drop file upload area
|
|
247
|
+
- **ModusNumberInput** - Numeric input with currency support
|
|
248
|
+
- **ModusRadio** - Exclusive choice controls
|
|
249
|
+
- **ModusRating** - Star, smiley, heart, and thumb ratings
|
|
250
|
+
- **ModusSelect** - Single-select dropdown with dynamic options
|
|
251
|
+
- **ModusSlider** - Interactive range inputs
|
|
252
|
+
- **ModusSwitch** - Binary toggle controls
|
|
253
|
+
- **ModusTextarea** - Multi-line text fields with helper messages
|
|
254
|
+
- **ModusTextInput** - Single-line text fields with validation
|
|
255
|
+
- **ModusTimeInput** - Time picker with min/max limits
|
|
256
|
+
|
|
257
|
+
#### **Layout Components (7)**
|
|
258
|
+
|
|
259
|
+
- **ModusAccordion** - Collapsible content sections
|
|
260
|
+
- **ModusCard** - Content containers with headers and actions
|
|
261
|
+
- **ModusHandle** - Draggable handle for resizable elements
|
|
262
|
+
- **ModusPanel** - Content panel containers
|
|
263
|
+
- **ModusSkeleton** - Animated loading placeholders
|
|
264
|
+
- **ModusToolbar** - Three-slot layout containers
|
|
265
|
+
- **ModusUtilityPanel** - Collapsible side panels
|
|
266
|
+
|
|
267
|
+
#### **Navigation Components (9)**
|
|
268
|
+
|
|
269
|
+
- **ModusBreadcrumbs** - Hierarchical navigation trails
|
|
270
|
+
- **ModusDropdownMenu** - Contextual menus
|
|
271
|
+
- **ModusMenu** - Integrated menu systems
|
|
272
|
+
- **ModusMenuItem** - Individual menu item component
|
|
273
|
+
- **ModusNavbar** - Full-width application bars
|
|
274
|
+
- **ModusPagination** - Page navigation controls
|
|
275
|
+
- **ModusSideNavigation** - Collapsible left navigation
|
|
276
|
+
- **ModusStepper** - Multi-step workflow indicators
|
|
277
|
+
- **ModusTabs** - Tab navigation with icons
|
|
278
|
+
|
|
279
|
+
#### **Display Components (7)**
|
|
280
|
+
|
|
281
|
+
- **ModusAvatar** - User profile images
|
|
282
|
+
- **ModusBadge** - Status indicators and counters
|
|
283
|
+
- **ModusChip** - Compact tags and filters
|
|
284
|
+
- **ModusIcon** - Icon system with 500+ validated icons
|
|
285
|
+
- **ModusLogo** - Trimble and product logos
|
|
286
|
+
- **ModusProgress** - Linear and radial progress indicators
|
|
287
|
+
- **ModusTable** - Data tables with sorting and selection
|
|
288
|
+
|
|
289
|
+
#### **Feedback Components (6)**
|
|
290
|
+
|
|
291
|
+
- **ModusAlert** - Success, warning, error, and info messages
|
|
292
|
+
- **ModusInputFeedback** - Form field feedback
|
|
293
|
+
- **ModusInputLabel** - Form control labels
|
|
294
|
+
- **ModusLoader** - Visual loading indicators
|
|
295
|
+
- **ModusToast** - Transient notifications
|
|
296
|
+
- **ModusTooltip** - Contextual helper messages
|
|
297
|
+
|
|
298
|
+
#### **Overlay Components (1)**
|
|
299
|
+
|
|
300
|
+
- **ModusModal** - Blocking dialog overlays (use forwardRef pattern)
|
|
301
|
+
|
|
302
|
+
#### **Theme Components (4)**
|
|
303
|
+
|
|
304
|
+
- **ModusProvider** - Context provider for Modus components
|
|
305
|
+
- **ModusThemeSwitcher** - Theme toggle controls
|
|
306
|
+
- **ThemeSwitcherDropdown** - Dropdown theme selector
|
|
307
|
+
- **ThemeToggleSimple** - Simple light/dark toggle
|
|
308
|
+
|
|
309
|
+
## Modus Web Components Integration
|
|
310
|
+
|
|
311
|
+
### Basic Usage
|
|
312
|
+
|
|
313
|
+
Always use the wrapper components from `src/components/` instead of the web components directly:
|
|
314
|
+
|
|
315
|
+
```tsx
|
|
316
|
+
import { ModusButton, ModusIcon } from "@/components";
|
|
317
|
+
|
|
318
|
+
export default function MyComponent() {
|
|
319
|
+
const handleClick = () => {
|
|
320
|
+
console.log("Button clicked!");
|
|
321
|
+
};
|
|
322
|
+
|
|
323
|
+
return (
|
|
324
|
+
<div className="flex gap-4">
|
|
325
|
+
{/* Use wrapper components */}
|
|
326
|
+
<ModusButton color="primary" onClick={handleClick}>
|
|
327
|
+
<i className="modus-icons mr-2">save_disk</i>
|
|
328
|
+
Save Changes
|
|
329
|
+
</ModusButton>
|
|
330
|
+
|
|
331
|
+
{/* Icon wrapper with accessibility */}
|
|
332
|
+
<ModusIcon
|
|
333
|
+
name="settings"
|
|
334
|
+
size="lg"
|
|
335
|
+
decorative={false}
|
|
336
|
+
ariaLabel="Settings"
|
|
337
|
+
/>
|
|
338
|
+
</div>
|
|
339
|
+
);
|
|
340
|
+
}
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
> **Important:** Never use `ModusWc*` components directly. The wrapper components handle event listeners, TypeScript types, and common patterns correctly.
|
|
344
|
+
|
|
345
|
+
### Component Usage Examples
|
|
346
|
+
|
|
347
|
+
This boilerplate includes comprehensive examples of:
|
|
348
|
+
|
|
349
|
+
- **Buttons** - All variants, colors, sizes, and shapes
|
|
350
|
+
- **Icons** - Complete icon system with standard Modus implementation
|
|
351
|
+
- **Alerts** - Success, warning, error, and info messages
|
|
352
|
+
- **Theme Switching** - Dynamic theme changes
|
|
353
|
+
|
|
354
|
+
## Icon System
|
|
355
|
+
|
|
356
|
+
### Standard Modus Icons
|
|
357
|
+
|
|
358
|
+
Icons are loaded from the Modus CDN and use the standard `<i class="modus-icons">icon_name</i>` pattern:
|
|
359
|
+
|
|
360
|
+
```typescript
|
|
361
|
+
import "@trimble-oss/modus-icons/dist/field-systems/fonts/modus-icons.css";
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
### Usage Examples
|
|
365
|
+
|
|
366
|
+
```tsx
|
|
367
|
+
import ModusIcon from "./components/ModusIcon";
|
|
368
|
+
import type { ModusIconName } from "./types/modus";
|
|
369
|
+
|
|
370
|
+
export default function IconExamples() {
|
|
371
|
+
const iconName: ModusIconName = "settings";
|
|
372
|
+
|
|
373
|
+
return (
|
|
374
|
+
<div>
|
|
375
|
+
{/* Basic icon usage */}
|
|
376
|
+
<i className="modus-icons">settings</i>
|
|
377
|
+
|
|
378
|
+
{/* Icon with styling */}
|
|
379
|
+
<i className="modus-icons icon-lg icon-primary">{iconName}</i>
|
|
380
|
+
|
|
381
|
+
{/* Using the ModusIcon wrapper */}
|
|
382
|
+
<ModusIcon
|
|
383
|
+
name="settings"
|
|
384
|
+
size="lg"
|
|
385
|
+
decorative={false}
|
|
386
|
+
ariaLabel="Settings"
|
|
387
|
+
/>
|
|
388
|
+
</div>
|
|
389
|
+
);
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### Available Icon Categories
|
|
394
|
+
|
|
395
|
+
The application now includes the complete list of all official Modus icons with full TypeScript support:
|
|
396
|
+
|
|
397
|
+
- **Actions**: add, edit_combination, delete, save_disk, download, upload, copy_content, refresh, sync
|
|
398
|
+
- **Navigation**: arrow_left, arrow_right, arrow_up, arrow_down, chevron_left, chevron_right, home, dashboard, menu, close
|
|
399
|
+
- **Interface**: search, filter, settings, launch, more_horizontal, more_vertical, sort, view_grid, view_list
|
|
400
|
+
- **Status**: check, check_circle, warning, info, alert, help, cancel_circle
|
|
401
|
+
- **Content**: file, folder_open, folder_closed, document, image, video, camera
|
|
402
|
+
- **User**: person, people_group, user_account, sign_in, sign_out, lock, lock_open
|
|
403
|
+
- **Communication**: email, phone, chat, comment, notifications
|
|
404
|
+
- **UI**: palette, brightness, visibility_on, visibility_off, toggle_on, toggle_off
|
|
405
|
+
|
|
406
|
+
**Total Icons Available**: 500+ official Modus icons with complete TypeScript definitions
|
|
407
|
+
|
|
408
|
+
## Theme System
|
|
409
|
+
|
|
410
|
+
### Available Themes
|
|
411
|
+
|
|
412
|
+
This boilerplate supports **6 themes** total:
|
|
413
|
+
|
|
414
|
+
#### Standard Modus Themes (4 themes)
|
|
415
|
+
|
|
416
|
+
- `modus-classic-light` (default)
|
|
417
|
+
- `modus-classic-dark`
|
|
418
|
+
- `modus-modern-light`
|
|
419
|
+
- `modus-modern-dark`
|
|
420
|
+
|
|
421
|
+
#### Trimble Connect Themes (2 themes)
|
|
422
|
+
|
|
423
|
+
- `connect-light` - For Trimble Connect Web Applications
|
|
424
|
+
- `connect-dark` - For Trimble Connect Web Applications
|
|
425
|
+
|
|
426
|
+
> **Note:** Connect themes should only be used when building Trimble Connect Web Applications. For general applications, use the standard Modus themes.
|
|
427
|
+
|
|
428
|
+
### Theme Switching
|
|
429
|
+
|
|
430
|
+
```typescript
|
|
431
|
+
// Programmatic theme switching
|
|
432
|
+
const changeTheme = (theme: string) => {
|
|
433
|
+
document.documentElement.setAttribute("data-theme", theme);
|
|
434
|
+
localStorage.setItem("modus-theme", theme);
|
|
435
|
+
};
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
## TypeScript Support
|
|
439
|
+
|
|
440
|
+
Full TypeScript support with:
|
|
441
|
+
|
|
442
|
+
- **Component Props** - Type-safe Modus component properties
|
|
443
|
+
- **Event Handlers** - Proper CustomEvent typing with type casting
|
|
444
|
+
- **Icon Names** - Validated icon name types
|
|
445
|
+
- **Theme Values** - Type-safe theme switching
|
|
446
|
+
|
|
447
|
+
```typescript
|
|
448
|
+
import { ModusButton } from "@/components";
|
|
449
|
+
import type { HTMLModusWcButtonElement } from "@trimble-oss/moduswebcomponents-react";
|
|
450
|
+
|
|
451
|
+
// Event handling with proper types
|
|
452
|
+
const handleEvent = (event: Event) => {
|
|
453
|
+
const customEvent = event as CustomEvent<MouseEvent | KeyboardEvent>;
|
|
454
|
+
console.log("Button clicked!", customEvent.detail);
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
// Theme types
|
|
458
|
+
type ThemeName =
|
|
459
|
+
| "modus-classic-light"
|
|
460
|
+
| "modus-classic-dark"
|
|
461
|
+
| "modus-modern-light"
|
|
462
|
+
| "modus-modern-dark"
|
|
463
|
+
| "connect-light"
|
|
464
|
+
| "connect-dark";
|
|
465
|
+
|
|
466
|
+
// Usage with wrapper components
|
|
467
|
+
export default function MyComponent() {
|
|
468
|
+
return (
|
|
469
|
+
<ModusButton color="primary" variant="filled" onClick={handleEvent}>
|
|
470
|
+
Click me
|
|
471
|
+
</ModusButton>
|
|
472
|
+
);
|
|
473
|
+
}
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
## Performance Features
|
|
477
|
+
|
|
478
|
+
### Vite Optimization
|
|
479
|
+
|
|
480
|
+
- **Lightning-fast HMR** - Instant hot module replacement
|
|
481
|
+
- **Code splitting** - Automatic chunking for optimal loading
|
|
482
|
+
- **Tree shaking** - Unused code elimination
|
|
483
|
+
- **Asset optimization** - Images and fonts are optimized
|
|
484
|
+
- **Source maps** - Available for debugging
|
|
485
|
+
|
|
486
|
+
### Icon Optimization
|
|
487
|
+
|
|
488
|
+
- **Critical icon preloading** - Essential icons load immediately
|
|
489
|
+
- **Lazy loading** - Non-critical icons load on demand
|
|
490
|
+
- **Font display optimization** - `font-display: swap` for better performance
|
|
491
|
+
|
|
492
|
+
### Build Optimization
|
|
493
|
+
|
|
494
|
+
- **SWC compilation** - Ultra-fast TypeScript and JSX compilation
|
|
495
|
+
- **ESBuild** - Lightning-fast bundling
|
|
496
|
+
- **Rollup** - Optimized production builds
|
|
497
|
+
- **Source maps** - Available for debugging
|
|
498
|
+
|
|
499
|
+
## Browser Support
|
|
500
|
+
|
|
501
|
+
- **Modern browsers** - Chrome 90+, Firefox 88+, Safari 14+, Edge 90+
|
|
502
|
+
- **Mobile support** - iOS Safari 14+, Chrome Mobile 90+
|
|
503
|
+
- **Accessibility** - Screen readers and assistive technologies
|
|
504
|
+
- **High contrast** - Windows high contrast mode support
|
|
505
|
+
|
|
506
|
+
## Development Scripts
|
|
507
|
+
|
|
508
|
+
```bash
|
|
509
|
+
# Development server with Vite
|
|
510
|
+
npm run dev
|
|
511
|
+
|
|
512
|
+
# Type checking
|
|
513
|
+
npm run type-check
|
|
514
|
+
|
|
515
|
+
# Production build
|
|
516
|
+
npm run build
|
|
517
|
+
|
|
518
|
+
# Preview production build
|
|
519
|
+
npm run preview
|
|
520
|
+
|
|
521
|
+
# Check for non-Modus color usage
|
|
522
|
+
npm run lint:colors
|
|
523
|
+
|
|
524
|
+
# Check for border violations
|
|
525
|
+
npm run lint:borders
|
|
526
|
+
|
|
527
|
+
# Run all linting checks
|
|
528
|
+
npm run lint:all
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
## Dev Panel Features
|
|
532
|
+
|
|
533
|
+
The boilerplate includes a floating Dev Panel (development mode only) with:
|
|
534
|
+
|
|
535
|
+
- **Theme Switcher** - Switch between all 6 Modus themes
|
|
536
|
+
- **Icon Gallery** - Browse 500+ icons with click-to-copy (5 icons per row)
|
|
537
|
+
- **Color Palette** - View all 9 design system colors with values
|
|
538
|
+
- **Component Gallery** - Browse all 49 available components
|
|
539
|
+
- **Component Demos** - 48 interactive demos for all components
|
|
540
|
+
- **Logo Showcase** - View all Trimble and Viewpoint product logos
|
|
541
|
+
|
|
542
|
+
Toggle the Dev Panel with `Ctrl+Shift+D` or the floating button in the bottom-right corner.
|
|
543
|
+
|
|
544
|
+
> **Note:** The Dev Panel only renders when `VITE_DEV_PANEL=true` (development mode). It is automatically excluded from production builds.
|
|
545
|
+
|
|
546
|
+
## Code Quality & Linting
|
|
547
|
+
|
|
548
|
+
### Modus Color Enforcement
|
|
549
|
+
|
|
550
|
+
This boilerplate includes comprehensive linting that automatically checks for non-Modus color usage:
|
|
551
|
+
|
|
552
|
+
- **Detects Tailwind colors** - Flags usage of `red-400`, `blue-500`, etc.
|
|
553
|
+
- **Detects hardcoded colors** - Catches hex codes like `#ff0000`, RGB values, and Modus hex values
|
|
554
|
+
- **Suggests Modus alternatives** - Provides proper Modus CSS custom properties
|
|
555
|
+
- **Runs on commit** - Automatically validates staged files before commit
|
|
556
|
+
|
|
557
|
+
**Example violations caught:**
|
|
558
|
+
|
|
559
|
+
```css
|
|
560
|
+
/* WRONG - Will be flagged */
|
|
561
|
+
.button {
|
|
562
|
+
background-color: red-500; /* Tailwind color */
|
|
563
|
+
color: #f1f1f6; /* Hardcoded Modus hex */
|
|
564
|
+
}
|
|
565
|
+
.text {
|
|
566
|
+
color: rgb(23, 28, 30); /* RGB equivalent of Modus color */
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
/* CORRECT - Modus usage */
|
|
570
|
+
.button {
|
|
571
|
+
background-color: var(--modus-wc-color-error);
|
|
572
|
+
color: var(--modus-wc-color-base-100);
|
|
573
|
+
}
|
|
574
|
+
.text {
|
|
575
|
+
color: var(--modus-wc-color-base-content);
|
|
576
|
+
}
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
**Available Modus Color Variables (9 colors total):**
|
|
580
|
+
|
|
581
|
+
**Base Colors (5 total):**
|
|
582
|
+
|
|
583
|
+
- `var(--modus-wc-color-base-page)` - Background: #fff (light) / #000 (dark)
|
|
584
|
+
- `var(--modus-wc-color-base-100)` - Light gray: #f1f1f6 (light) / #252a2e (dark)
|
|
585
|
+
- `var(--modus-wc-color-base-200)` - Medium gray: #cbcdd6 (light) / #464b52 (dark)
|
|
586
|
+
- `var(--modus-wc-color-base-300)` - Dark gray: #b7b9c3 (light) / #353a40 (dark)
|
|
587
|
+
- `var(--modus-wc-color-base-content)` - Text: #171c1e (light) / #cbcdd6 (dark)
|
|
588
|
+
|
|
589
|
+
**Semantic Colors (4 total - same in both themes):**
|
|
590
|
+
|
|
591
|
+
- `var(--modus-wc-color-info)` - Blue: #0063a3
|
|
592
|
+
- `var(--modus-wc-color-success)` - Green: #1e8a44
|
|
593
|
+
- `var(--modus-wc-color-error)` - Red: #da212c
|
|
594
|
+
- `var(--modus-wc-color-warning)` - Orange: #fbad26
|
|
595
|
+
|
|
596
|
+
> **Note:** Component props like `primary`, `secondary`, `tertiary`, and `danger` map to these CSS variables internally.
|
|
597
|
+
|
|
598
|
+
## Deployment
|
|
599
|
+
|
|
600
|
+
This boilerplate is ready for deployment to various platforms:
|
|
601
|
+
|
|
602
|
+
### Static Hosting (Netlify, Vercel, GitHub Pages)
|
|
603
|
+
|
|
604
|
+
```bash
|
|
605
|
+
npm run build
|
|
606
|
+
# Deploy the dist/ folder
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
## Customization
|
|
610
|
+
|
|
611
|
+
### Adding New Components
|
|
612
|
+
|
|
613
|
+
1. **Install additional Modus components** if needed
|
|
614
|
+
2. **Add TypeScript definitions** in `src/types/modus.d.ts`
|
|
615
|
+
3. **Create wrapper components** in `src/components/`
|
|
616
|
+
4. **Add examples** in the demo pages or remove demo content for production
|
|
617
|
+
|
|
618
|
+
### Custom Styling
|
|
619
|
+
|
|
620
|
+
Use Modus CSS custom properties for consistent theming:
|
|
621
|
+
|
|
622
|
+
```css
|
|
623
|
+
.custom-component {
|
|
624
|
+
background-color: var(--modus-wc-color-base-100);
|
|
625
|
+
color: var(--modus-wc-color-base-content);
|
|
626
|
+
border: 1px solid var(--modus-wc-color-base-200);
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
/* Status-specific styling */
|
|
630
|
+
.success-message {
|
|
631
|
+
color: var(--modus-wc-color-success);
|
|
632
|
+
border-left: 3px solid var(--modus-wc-color-success);
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
.error-message {
|
|
636
|
+
color: var(--modus-wc-color-error);
|
|
637
|
+
border-left: 3px solid var(--modus-wc-color-error);
|
|
638
|
+
}
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
### Tailwind CSS Integration
|
|
642
|
+
|
|
643
|
+
This boilerplate includes Tailwind CSS 3 with design system integration:
|
|
644
|
+
|
|
645
|
+
```tsx
|
|
646
|
+
// Use Tailwind classes with design system colors
|
|
647
|
+
<div className="bg-card border-default rounded-lg p-6">
|
|
648
|
+
<div className="text-2xl font-semibold text-foreground">Title</div>
|
|
649
|
+
<div className="text-muted-foreground">Description</div>
|
|
650
|
+
</div>
|
|
651
|
+
|
|
652
|
+
// Use directional border utilities (not border-b border-default)
|
|
653
|
+
<div className="border-bottom-default">Bottom border only</div>
|
|
654
|
+
<div className="border-top-default">Top border only</div>
|
|
655
|
+
|
|
656
|
+
// Use custom opacity utilities (not text-foreground/80)
|
|
657
|
+
<div className="text-foreground-80">80% opacity text</div>
|
|
658
|
+
<div className="text-foreground-60">60% opacity text</div>
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
**Important:**
|
|
662
|
+
|
|
663
|
+
- Use directional border utilities (`border-bottom-default`, `border-top-default`) instead of `border-b border-default`
|
|
664
|
+
- Use opacity utilities (`text-foreground-80`) instead of Tailwind's `/80` syntax (CSS variables don't work with Tailwind opacity modifiers)
|
|
665
|
+
- Use `<div>` elements only (no `h1`, `p`, `section`) to avoid Tailwind CSS conflicts
|
|
666
|
+
|
|
667
|
+
## Troubleshooting
|
|
668
|
+
|
|
669
|
+
### Icons Not Displaying
|
|
670
|
+
|
|
671
|
+
1. **Check font loading** - Ensure Modus icons CSS is imported
|
|
672
|
+
2. **Verify icon names** - Use only valid Modus icon names
|
|
673
|
+
3. **Check network** - CDN may be blocked in some environments
|
|
674
|
+
|
|
675
|
+
### Components Not Rendering
|
|
676
|
+
|
|
677
|
+
1. **Verify imports** - Ensure Modus components are imported
|
|
678
|
+
2. **Check custom elements** - Vite should recognize `modus-wc-*` tags
|
|
679
|
+
3. **Browser support** - Ensure browser supports web components
|
|
680
|
+
|
|
681
|
+
### Theme Issues
|
|
682
|
+
|
|
683
|
+
1. **HTML attribute** - Ensure `data-theme` is set on `<html>`
|
|
684
|
+
2. **CSS loading order** - Modus styles should load before custom styles
|
|
685
|
+
3. **Local storage** - Theme preference should persist across sessions
|
|
686
|
+
|
|
687
|
+
## Contributing
|
|
688
|
+
|
|
689
|
+
When contributing to this boilerplate:
|
|
690
|
+
|
|
691
|
+
1. **Follow React 19 best practices**
|
|
692
|
+
2. **Maintain TypeScript strict mode**
|
|
693
|
+
3. **Use Modus design tokens**
|
|
694
|
+
4. **Test across all themes**
|
|
695
|
+
5. **Ensure accessibility compliance**
|
|
696
|
+
6. **Update documentation as needed**
|
|
697
|
+
|
|
698
|
+
## Support & Resources
|
|
699
|
+
|
|
700
|
+
- [Modus Web Components Documentation](https://trimble-oss.github.io/modus-wc-2.0/main/)
|
|
701
|
+
- [Vite Documentation](https://vitejs.dev/)
|
|
702
|
+
- [React 19 Documentation](https://react.dev/)
|
|
703
|
+
- [TypeScript Documentation](https://www.typescriptlang.org/)
|
|
704
|
+
- [Tailwind CSS Documentation](https://tailwindcss.com/docs)
|
|
705
|
+
|
|
706
|
+
## License
|
|
707
|
+
|
|
708
|
+
MIT License - see LICENSE file for details.
|
|
709
|
+
|
|
710
|
+
---
|
|
711
|
+
|
|
712
|
+
## Ready to Build
|
|
713
|
+
|
|
714
|
+
**Ready to build amazing applications with Modus Design System and React + Vite!**
|
|
715
|
+
|
|
716
|
+
This boilerplate provides everything you need to get started quickly while following best practices and maintaining high code quality.
|
|
717
|
+
|
|
718
|
+
---
|
|
719
|
+
|
|
720
|
+
## Creator
|
|
721
|
+
|
|
722
|
+
### Made by [Julian Oczkowski](https://github.com/julianoczkowski)
|
|
723
|
+
|
|
724
|
+
Lead Product Designer bridging UX & Code - Building AI-driven tools, design systems, and digital products
|
|
725
|
+
|
|
726
|
+
[YouTube](https://www.youtube.com/@julianoczkowski) | [LinkedIn](https://linkedin.com/in/julianoczkowski) | [Website](https://www.julianoczkowski.com)
|
|
727
|
+
|
|
728
|
+
Created for the Trimble community and developers worldwide
|