@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,489 @@
|
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
import { Link } from "react-router-dom";
|
|
3
|
+
import ModusButton from "../components/ModusButton";
|
|
4
|
+
import ModusBadge from "../components/ModusBadge";
|
|
5
|
+
|
|
6
|
+
interface ComponentDemo {
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
url: string;
|
|
10
|
+
category: string;
|
|
11
|
+
status: "ready" | "demo";
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const componentDemos: ComponentDemo[] = [
|
|
15
|
+
{
|
|
16
|
+
name: "Accordion",
|
|
17
|
+
description:
|
|
18
|
+
"Collapsible content sections with expand/collapse functionality",
|
|
19
|
+
url: "/dev/demos/accordion-demo",
|
|
20
|
+
category: "Layout",
|
|
21
|
+
status: "demo",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: "Alert",
|
|
25
|
+
description:
|
|
26
|
+
"Notifications and messages with different variants and dismissible options",
|
|
27
|
+
url: "/dev/demos/alert-demo",
|
|
28
|
+
category: "Feedback",
|
|
29
|
+
status: "demo",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: "Autocomplete",
|
|
33
|
+
description: "Input field with suggestions and multi-select capabilities",
|
|
34
|
+
url: "/dev/demos/autocomplete-demo",
|
|
35
|
+
category: "Forms",
|
|
36
|
+
status: "demo",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: "Avatar",
|
|
40
|
+
description: "User profile images with different sizes and shapes",
|
|
41
|
+
url: "/dev/demos/avatar-demo",
|
|
42
|
+
category: "Display",
|
|
43
|
+
status: "demo",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: "Badge",
|
|
47
|
+
description: "Labels and counters for status indicators and notifications",
|
|
48
|
+
url: "/dev/demos/badge-demo",
|
|
49
|
+
category: "Display",
|
|
50
|
+
status: "demo",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "Breadcrumbs",
|
|
54
|
+
description: "Navigation breadcrumb trails for hierarchical navigation",
|
|
55
|
+
url: "/dev/demos/breadcrumbs-demo",
|
|
56
|
+
category: "Navigation",
|
|
57
|
+
status: "demo",
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: "Button",
|
|
61
|
+
description: "Action buttons with various styles, sizes, and states",
|
|
62
|
+
url: "/dev/demos/button-demo",
|
|
63
|
+
category: "Forms",
|
|
64
|
+
status: "demo",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: "Button Group",
|
|
68
|
+
description:
|
|
69
|
+
"Groups multiple buttons with single or multiple selection modes for toolbars and segmented controls",
|
|
70
|
+
url: "/dev/demos/button-group-demo",
|
|
71
|
+
category: "Forms",
|
|
72
|
+
status: "demo",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: "Card",
|
|
76
|
+
description: "Content containers with headers, content, and action areas",
|
|
77
|
+
url: "/dev/demos/card-demo",
|
|
78
|
+
category: "Layout",
|
|
79
|
+
status: "demo",
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: "Checkbox",
|
|
83
|
+
description: "Form controls for multiple selections and boolean inputs",
|
|
84
|
+
url: "/dev/demos/checkbox-demo",
|
|
85
|
+
category: "Forms",
|
|
86
|
+
status: "demo",
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: "Chip",
|
|
90
|
+
description: "Compact elements for tags, filters, and removable items",
|
|
91
|
+
url: "/dev/demos/chip-demo",
|
|
92
|
+
category: "Display",
|
|
93
|
+
status: "demo",
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: "Date",
|
|
97
|
+
description: "Date input controls with validation and formatting",
|
|
98
|
+
url: "/dev/demos/date-demo",
|
|
99
|
+
category: "Forms",
|
|
100
|
+
status: "demo",
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: "Dropdown Menu",
|
|
104
|
+
description: "Contextual menus with various placement and sizing options",
|
|
105
|
+
url: "/dev/demos/dropdown-demo",
|
|
106
|
+
category: "Navigation",
|
|
107
|
+
status: "demo",
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: "File Dropzone",
|
|
111
|
+
description:
|
|
112
|
+
"Drag-and-drop file upload with validation for file types, sizes, and counts",
|
|
113
|
+
url: "/dev/demos/file-dropzone-demo",
|
|
114
|
+
category: "Forms",
|
|
115
|
+
status: "demo",
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: "Handle",
|
|
119
|
+
description:
|
|
120
|
+
"Draggable resize handle for panels with bar and button styles, supports keyboard navigation",
|
|
121
|
+
url: "/dev/demos/handle-demo",
|
|
122
|
+
category: "Layout",
|
|
123
|
+
status: "demo",
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
name: "Icon",
|
|
127
|
+
description:
|
|
128
|
+
"Icon component with various sizes, accessibility options, and styling",
|
|
129
|
+
url: "/dev/demos/icon-demo",
|
|
130
|
+
category: "Display",
|
|
131
|
+
status: "demo",
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
name: "Input Feedback",
|
|
135
|
+
description:
|
|
136
|
+
"Contextual feedback for form fields with error, success, warning, and info messages",
|
|
137
|
+
url: "/dev/demos/input-feedback-demo",
|
|
138
|
+
category: "Forms",
|
|
139
|
+
status: "demo",
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: "Input Label",
|
|
143
|
+
description:
|
|
144
|
+
"Labels for form controls with sub-labels, required indicators, and custom content",
|
|
145
|
+
url: "/dev/demos/input-label-demo",
|
|
146
|
+
category: "Forms",
|
|
147
|
+
status: "demo",
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
name: "Loader",
|
|
151
|
+
description:
|
|
152
|
+
"Visual loading indicators with 6 animation variants, 4 sizes, and 8 colors",
|
|
153
|
+
url: "/dev/demos/loader-demo",
|
|
154
|
+
category: "Feedback",
|
|
155
|
+
status: "demo",
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: "Logo",
|
|
159
|
+
description:
|
|
160
|
+
"Trimble and Viewpoint product logos with theme-aware light/dark switching and emblem variants",
|
|
161
|
+
url: "/dev/demos/logo-demo",
|
|
162
|
+
category: "Branding",
|
|
163
|
+
status: "demo",
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
name: "Menu",
|
|
167
|
+
description:
|
|
168
|
+
"Integrated menu system with container and menu items for navigation and toolbars",
|
|
169
|
+
url: "/dev/demos/menu-demo",
|
|
170
|
+
category: "Navigation",
|
|
171
|
+
status: "demo",
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
name: "Modal",
|
|
175
|
+
description:
|
|
176
|
+
"Blocking dialog overlays for forms, confirmations, and detailed content",
|
|
177
|
+
url: "/dev/demos/modal-demo",
|
|
178
|
+
category: "Overlays",
|
|
179
|
+
status: "demo",
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: "Navbar",
|
|
183
|
+
description:
|
|
184
|
+
"Full-width application bar with navigation menus, search, notifications, apps launcher, AI button and user profile controls",
|
|
185
|
+
url: "/dev/demos/navbar-demo",
|
|
186
|
+
category: "Navigation",
|
|
187
|
+
status: "demo",
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
name: "Number Input",
|
|
191
|
+
description:
|
|
192
|
+
"Numeric input controls with validation, currency support, range sliders, and comprehensive form integration",
|
|
193
|
+
url: "/dev/demos/number-input-demo",
|
|
194
|
+
category: "Forms",
|
|
195
|
+
status: "demo",
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
name: "Pagination",
|
|
199
|
+
description:
|
|
200
|
+
"Page navigation control with first, previous, number, next, and last actions plus accessibility customization",
|
|
201
|
+
url: "/dev/demos/pagination-demo",
|
|
202
|
+
category: "Navigation",
|
|
203
|
+
status: "demo",
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
name: "Panel",
|
|
207
|
+
description:
|
|
208
|
+
"Structured layout component with header, body, and footer slots for side navigation and content sections",
|
|
209
|
+
url: "/dev/demos/panel-demo",
|
|
210
|
+
category: "Layout",
|
|
211
|
+
status: "demo",
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: "Progress",
|
|
215
|
+
description:
|
|
216
|
+
"Linear and radial progress indicators for task completion and live updates",
|
|
217
|
+
url: "/dev/demos/progress-demo",
|
|
218
|
+
category: "Feedback",
|
|
219
|
+
status: "demo",
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
name: "Radio",
|
|
223
|
+
description:
|
|
224
|
+
"Exclusive choice control with multiple sizes, required state, and layout customization",
|
|
225
|
+
url: "/dev/demos/radio-demo",
|
|
226
|
+
category: "Forms",
|
|
227
|
+
status: "demo",
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
name: "Rating",
|
|
231
|
+
description:
|
|
232
|
+
"Star, smiley, heart, and thumb ratings with events, half-steps, and accessibility helpers",
|
|
233
|
+
url: "/dev/demos/rating-demo",
|
|
234
|
+
category: "Forms",
|
|
235
|
+
status: "demo",
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
name: "Select",
|
|
239
|
+
description:
|
|
240
|
+
"Single-select dropdown with dynamic options arrays, validation feedback, and async loading patterns",
|
|
241
|
+
url: "/dev/demos/select-demo",
|
|
242
|
+
category: "Forms",
|
|
243
|
+
status: "demo",
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
name: "Side Navigation",
|
|
247
|
+
description:
|
|
248
|
+
"Collapsible left navigation with controlled expansion and Modus navbar integration",
|
|
249
|
+
url: "/dev/demos/side-navigation-demo",
|
|
250
|
+
category: "Navigation",
|
|
251
|
+
status: "demo",
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
name: "Skeleton",
|
|
255
|
+
description:
|
|
256
|
+
"Animated loading placeholders for typography, cards, and dashboards",
|
|
257
|
+
url: "/dev/demos/skeleton-demo",
|
|
258
|
+
category: "Feedback",
|
|
259
|
+
status: "demo",
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
name: "Slider",
|
|
263
|
+
description:
|
|
264
|
+
"Interactive range input with min/max bounds, step control, and live feedback",
|
|
265
|
+
url: "/dev/demos/slider-demo",
|
|
266
|
+
category: "Forms",
|
|
267
|
+
status: "demo",
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
name: "Stepper",
|
|
271
|
+
description:
|
|
272
|
+
"Progress indicator for multi-step workflows with horizontal and vertical orientations",
|
|
273
|
+
url: "/dev/demos/stepper-demo",
|
|
274
|
+
category: "Navigation",
|
|
275
|
+
status: "demo",
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
name: "Switch",
|
|
279
|
+
description:
|
|
280
|
+
"Binary toggle control with required, disabled, and indeterminate states",
|
|
281
|
+
url: "/dev/demos/switch-demo",
|
|
282
|
+
category: "Forms",
|
|
283
|
+
status: "demo",
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
name: "Table",
|
|
287
|
+
description: "Data tables with sorting, pagination, and selection",
|
|
288
|
+
url: "/dev/demos/table-demo",
|
|
289
|
+
category: "Data",
|
|
290
|
+
status: "demo",
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
name: "Tabs",
|
|
294
|
+
description:
|
|
295
|
+
"Tab navigation with icons, disabled states, and multiple visual styles",
|
|
296
|
+
url: "/dev/demos/tabs-demo",
|
|
297
|
+
category: "Navigation",
|
|
298
|
+
status: "demo",
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
name: "Textarea",
|
|
302
|
+
description:
|
|
303
|
+
"Multi-line text field with helper messages, validation, and clearable controls",
|
|
304
|
+
url: "/dev/demos/textarea-demo",
|
|
305
|
+
category: "Forms",
|
|
306
|
+
status: "demo",
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
name: "Text Input",
|
|
310
|
+
description:
|
|
311
|
+
"Single-line text fields with various types, validation, and interactive features",
|
|
312
|
+
url: "/dev/demos/text-input-demo",
|
|
313
|
+
category: "Forms",
|
|
314
|
+
status: "demo",
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
name: "Theme Switcher",
|
|
318
|
+
description:
|
|
319
|
+
"Toggle between light and dark Modus themes with persisted preferences",
|
|
320
|
+
url: "/dev/demos/theme-switcher-demo",
|
|
321
|
+
category: "Appearance",
|
|
322
|
+
status: "demo",
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
name: "Time Input",
|
|
326
|
+
description:
|
|
327
|
+
"Single-field time picker with min/max limits, seconds support, and datalist suggestions",
|
|
328
|
+
url: "/dev/demos/time-input-demo",
|
|
329
|
+
category: "Forms",
|
|
330
|
+
status: "demo",
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
name: "Toast",
|
|
334
|
+
description:
|
|
335
|
+
"Transient notifications that stack by position and pair with alerts for content",
|
|
336
|
+
url: "/dev/demos/toast-demo",
|
|
337
|
+
category: "Feedback",
|
|
338
|
+
status: "demo",
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
name: "Toolbar",
|
|
342
|
+
description:
|
|
343
|
+
"Three-slot layout container for building application headers and action bars",
|
|
344
|
+
url: "/dev/demos/toolbar-demo",
|
|
345
|
+
category: "Layout",
|
|
346
|
+
status: "demo",
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
name: "Tooltip",
|
|
350
|
+
description:
|
|
351
|
+
"Contextual helper messages that appear on hover or focus around any trigger",
|
|
352
|
+
url: "/dev/demos/tooltip-demo",
|
|
353
|
+
category: "Feedback",
|
|
354
|
+
status: "demo",
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
name: "Utility Panel",
|
|
358
|
+
description:
|
|
359
|
+
"Collapsible side panel for contextual filters, tools, and secondary content with optional push layout",
|
|
360
|
+
url: "/dev/demos/utility-panel-demo",
|
|
361
|
+
category: "Layout",
|
|
362
|
+
status: "demo",
|
|
363
|
+
},
|
|
364
|
+
];
|
|
365
|
+
|
|
366
|
+
const categories = [
|
|
367
|
+
{ name: "All", value: "all" },
|
|
368
|
+
{ name: "Forms", value: "forms" },
|
|
369
|
+
{ name: "Layout", value: "layout" },
|
|
370
|
+
{ name: "Navigation", value: "navigation" },
|
|
371
|
+
{ name: "Display", value: "display" },
|
|
372
|
+
{ name: "Feedback", value: "feedback" },
|
|
373
|
+
{ name: "Overlays", value: "overlays" },
|
|
374
|
+
{ name: "Data", value: "data" },
|
|
375
|
+
{ name: "Branding", value: "branding" },
|
|
376
|
+
{ name: "Appearance", value: "appearance" },
|
|
377
|
+
];
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* Renders a gallery of component demos.
|
|
381
|
+
* @returns {JSX.Element} The rendered component gallery page.
|
|
382
|
+
*/
|
|
383
|
+
export default function ComponentsGalleryPage() {
|
|
384
|
+
const [selectedCategory, setSelectedCategory] = useState<string>("all");
|
|
385
|
+
|
|
386
|
+
const filteredComponents =
|
|
387
|
+
selectedCategory === "all"
|
|
388
|
+
? componentDemos
|
|
389
|
+
: componentDemos.filter(
|
|
390
|
+
(component) => component.category.toLowerCase() === selectedCategory,
|
|
391
|
+
);
|
|
392
|
+
|
|
393
|
+
return (
|
|
394
|
+
<div className="max-w-6xl mx-auto p-8">
|
|
395
|
+
<div className="text-center mb-12">
|
|
396
|
+
<div className="text-4xl font-semibold mb-4 text-foreground">
|
|
397
|
+
Modus Web Components
|
|
398
|
+
</div>
|
|
399
|
+
<div className="text-lg leading-relaxed text-foreground text-center">
|
|
400
|
+
Explore all available React Modus Web Components.
|
|
401
|
+
</div>
|
|
402
|
+
</div>
|
|
403
|
+
|
|
404
|
+
{/* Category Filter */}
|
|
405
|
+
<div className="mb-12 p-8 bg-card rounded-lg border-default">
|
|
406
|
+
<div className="text-2xl font-semibold mb-4 text-foreground">
|
|
407
|
+
Filter by Category
|
|
408
|
+
</div>
|
|
409
|
+
<div className="flex flex-wrap gap-2">
|
|
410
|
+
{categories.map((category) => (
|
|
411
|
+
<ModusButton
|
|
412
|
+
key={category.value}
|
|
413
|
+
color={
|
|
414
|
+
selectedCategory === category.value ? "secondary" : "secondary"
|
|
415
|
+
}
|
|
416
|
+
variant={
|
|
417
|
+
selectedCategory === category.value ? "filled" : "outlined"
|
|
418
|
+
}
|
|
419
|
+
size="md"
|
|
420
|
+
onButtonClick={() => setSelectedCategory(category.value)}
|
|
421
|
+
>
|
|
422
|
+
{category.name}
|
|
423
|
+
</ModusButton>
|
|
424
|
+
))}
|
|
425
|
+
</div>
|
|
426
|
+
</div>
|
|
427
|
+
|
|
428
|
+
{/* Components Grid */}
|
|
429
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
430
|
+
{filteredComponents.map((component) => (
|
|
431
|
+
<div
|
|
432
|
+
key={component.url}
|
|
433
|
+
className="bg-card rounded-lg p-6 hover:shadow-lg transition-all duration-200 border-default"
|
|
434
|
+
>
|
|
435
|
+
<div className="flex items-start justify-between mb-4">
|
|
436
|
+
<div>
|
|
437
|
+
<div className="text-xl font-semibold text-foreground mb-2">
|
|
438
|
+
{component.name}
|
|
439
|
+
</div>
|
|
440
|
+
<div className="text-sm text-muted-foreground mb-2">
|
|
441
|
+
{component.category}
|
|
442
|
+
</div>
|
|
443
|
+
</div>
|
|
444
|
+
<div className="flex items-center gap-2">
|
|
445
|
+
<ModusBadge
|
|
446
|
+
color={component.status === "ready" ? "success" : "warning"}
|
|
447
|
+
variant="filled"
|
|
448
|
+
size="md"
|
|
449
|
+
>
|
|
450
|
+
{component.status === "ready" ? "Ready" : "Demo"}
|
|
451
|
+
</ModusBadge>
|
|
452
|
+
</div>
|
|
453
|
+
</div>
|
|
454
|
+
|
|
455
|
+
<div className="text-foreground mb-4 text-sm leading-relaxed">
|
|
456
|
+
{component.description}
|
|
457
|
+
</div>
|
|
458
|
+
|
|
459
|
+
<div className="flex gap-2">
|
|
460
|
+
<Link to={component.url} className="flex-1">
|
|
461
|
+
<ModusButton
|
|
462
|
+
color="primary"
|
|
463
|
+
variant="filled"
|
|
464
|
+
size="md"
|
|
465
|
+
fullWidth
|
|
466
|
+
>
|
|
467
|
+
View Demo
|
|
468
|
+
</ModusButton>
|
|
469
|
+
</Link>
|
|
470
|
+
</div>
|
|
471
|
+
</div>
|
|
472
|
+
))}
|
|
473
|
+
</div>
|
|
474
|
+
|
|
475
|
+
{/* Footer */}
|
|
476
|
+
<div className="text-center pt-8 box-content">
|
|
477
|
+
<div className="flex items-center justify-center gap-3 mb-3">
|
|
478
|
+
<img src="/vite.svg" alt="Vite" className="h-6 w-6" />
|
|
479
|
+
<div className="text-foreground-40">+</div>
|
|
480
|
+
<img src="/react.svg" alt="React" className="h-6 w-6" />
|
|
481
|
+
</div>
|
|
482
|
+
<div className="text-sm font-mono text-foreground-40">
|
|
483
|
+
2026 Modus React App v1.0.0 + React 19 + Vite + Tailwind CSS -
|
|
484
|
+
Created by Julian Oczkowski
|
|
485
|
+
</div>
|
|
486
|
+
</div>
|
|
487
|
+
</div>
|
|
488
|
+
);
|
|
489
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
import DemoExample from "../components/DemoExample";
|
|
3
|
+
import ModusAlert from "../components/ModusAlert";
|
|
4
|
+
import { modusIcons, totalIconCount, categoryCount } from "../data/modusIcons";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Renders a comprehensive page that displays all available Modus icons.
|
|
8
|
+
*
|
|
9
|
+
* This page provides a complete showcase of the Modus icon library with
|
|
10
|
+
* interactive features for browsing, searching, and copying icon names.
|
|
11
|
+
* Icons are organized by category and displayed in a grid layout with
|
|
12
|
+
* hover effects and click-to-copy functionality.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* // The page automatically displays all icons from modusIcons data
|
|
16
|
+
* <IconsPage />
|
|
17
|
+
*
|
|
18
|
+
* @returns {JSX.Element} The rendered icons page with search and category filtering
|
|
19
|
+
* @see {@link modusIcons} - Source data for all available icons
|
|
20
|
+
* @see {@link totalIconCount} - Total number of icons displayed
|
|
21
|
+
* @see {@link categoryCount} - Number of icon categories
|
|
22
|
+
*/
|
|
23
|
+
export default function IconsPage() {
|
|
24
|
+
const [showAlert, setShowAlert] = useState(false);
|
|
25
|
+
|
|
26
|
+
const copyIconName = (iconName: string) => {
|
|
27
|
+
navigator.clipboard.writeText(iconName).then(
|
|
28
|
+
() => {
|
|
29
|
+
// Show alert notification
|
|
30
|
+
setShowAlert(true);
|
|
31
|
+
// Hide alert after delay
|
|
32
|
+
setTimeout(() => {
|
|
33
|
+
setShowAlert(false);
|
|
34
|
+
}, 2000);
|
|
35
|
+
},
|
|
36
|
+
(err) => {
|
|
37
|
+
console.error("Failed to copy:", err);
|
|
38
|
+
},
|
|
39
|
+
);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
43
|
+
const hideAlert = (_: CustomEvent<void>) => {
|
|
44
|
+
setShowAlert(false);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<div className="max-w-6xl mx-auto p-8">
|
|
49
|
+
<div className="text-center mb-12">
|
|
50
|
+
<div className="text-4xl font-semibold mb-4 text-foreground">
|
|
51
|
+
Modus Icons Gallery
|
|
52
|
+
</div>
|
|
53
|
+
<div className="text-lg leading-relaxed text-foreground text-center">
|
|
54
|
+
Complete showcase of all available Modus icons organized by category. Click on any icon to copy its name.
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<div className="flex flex-col gap-6">
|
|
59
|
+
<DemoExample
|
|
60
|
+
title="Icon Usage"
|
|
61
|
+
description="All icons use the modus-icons class with kebab-case names. Size with Tailwind classes and color with design system colors."
|
|
62
|
+
>
|
|
63
|
+
<div className="flex flex-col gap-4">
|
|
64
|
+
<div className="text-sm text-muted-foreground">
|
|
65
|
+
Total Icons:{" "}
|
|
66
|
+
<div className="font-semibold text-foreground inline">
|
|
67
|
+
{totalIconCount}
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
<div className="text-sm text-muted-foreground">
|
|
71
|
+
Categories:{" "}
|
|
72
|
+
<div className="font-semibold text-foreground inline">
|
|
73
|
+
{categoryCount}
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
<div className="text-xs text-muted-foreground mt-2">
|
|
77
|
+
Click on any icon below to copy its name to your clipboard.
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
</DemoExample>
|
|
81
|
+
|
|
82
|
+
{Object.entries(modusIcons).map(([categoryName, icons]) => (
|
|
83
|
+
<DemoExample
|
|
84
|
+
key={categoryName}
|
|
85
|
+
title={categoryName}
|
|
86
|
+
description={`${icons.length} icons in this category`}
|
|
87
|
+
>
|
|
88
|
+
<div className="grid grid-cols-5 gap-4">
|
|
89
|
+
{icons.map((iconName) => (
|
|
90
|
+
<div
|
|
91
|
+
key={iconName}
|
|
92
|
+
className="flex flex-col items-center gap-2 p-3 rounded-lg border border-border hover:border-primary hover:scale-105 hover:shadow-md transition-all cursor-pointer group"
|
|
93
|
+
onClick={() => copyIconName(iconName)}
|
|
94
|
+
title={`Click to copy: ${iconName}`}
|
|
95
|
+
>
|
|
96
|
+
<i
|
|
97
|
+
className={`modus-icons text-2xl text-foreground group-hover:text-primary transition-colors`}
|
|
98
|
+
>
|
|
99
|
+
{iconName}
|
|
100
|
+
</i>
|
|
101
|
+
<div className="text-xs text-muted-foreground group-hover:text-foreground text-center break-all leading-tight transition-colors">
|
|
102
|
+
{iconName}
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
))}
|
|
106
|
+
</div>
|
|
107
|
+
</DemoExample>
|
|
108
|
+
))}
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
{/* Footer */}
|
|
112
|
+
<div className="text-center pt-8 box-content">
|
|
113
|
+
<div className="flex items-center justify-center gap-3 mb-3">
|
|
114
|
+
<img src="/vite.svg" alt="Vite" className="h-6 w-6" />
|
|
115
|
+
<div className="text-foreground-40">+</div>
|
|
116
|
+
<img src="/react.svg" alt="React" className="h-6 w-6" />
|
|
117
|
+
</div>
|
|
118
|
+
<div className="text-sm font-mono text-foreground-40">
|
|
119
|
+
2026 Modus React App v1.0.0 + React 19 + Vite + Tailwind CSS -
|
|
120
|
+
Created by Julian Oczkowski
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
{/* Alert notification for copy feedback - fixed at bottom */}
|
|
125
|
+
{showAlert && (
|
|
126
|
+
<div className="fixed bottom-4 left-1/2 -translate-x-1/2 z-50">
|
|
127
|
+
<ModusAlert
|
|
128
|
+
alertTitle="Icon name copied!"
|
|
129
|
+
variant="success"
|
|
130
|
+
dismissible={true}
|
|
131
|
+
onDismissClick={hideAlert}
|
|
132
|
+
/>
|
|
133
|
+
</div>
|
|
134
|
+
)}
|
|
135
|
+
</div>
|
|
136
|
+
);
|
|
137
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useContext } from "react";
|
|
2
|
+
import { ThemeContext } from "../contexts/ThemeContextData";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A custom hook that provides access to the theme context.
|
|
6
|
+
* @returns {object} The theme context.
|
|
7
|
+
* @throws {Error} If used outside of a ThemeProvider.
|
|
8
|
+
*/
|
|
9
|
+
export function useTheme() {
|
|
10
|
+
const context = useContext(ThemeContext);
|
|
11
|
+
if (context === undefined) {
|
|
12
|
+
throw new Error('useTheme must be used within a ThemeProvider');
|
|
13
|
+
}
|
|
14
|
+
return context;
|
|
15
|
+
}
|