@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,151 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusTextInput from "../../components/ModusTextInput";
|
|
6
|
+
|
|
7
|
+
export default function TextInputDemoPage() {
|
|
8
|
+
return (
|
|
9
|
+
<DemoPage
|
|
10
|
+
title="Modus Text Input"
|
|
11
|
+
description="Text input components provide a way for users to enter text data. Use text inputs for names, emails, passwords, and any other text-based form data."
|
|
12
|
+
>
|
|
13
|
+
<DemoExample
|
|
14
|
+
title="Input Types"
|
|
15
|
+
description="Text inputs with different input types."
|
|
16
|
+
>
|
|
17
|
+
<div className="flex flex-col gap-6">
|
|
18
|
+
<div className="flex flex-col gap-2">
|
|
19
|
+
<ModusTextInput
|
|
20
|
+
inputId="text-type-input"
|
|
21
|
+
label="Text"
|
|
22
|
+
type="text"
|
|
23
|
+
placeholder="Enter text"
|
|
24
|
+
/>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<div className="flex flex-col gap-2">
|
|
28
|
+
<ModusTextInput
|
|
29
|
+
inputId="email-type-input"
|
|
30
|
+
label="Email"
|
|
31
|
+
type="email"
|
|
32
|
+
placeholder="user@example.com"
|
|
33
|
+
/>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<div className="flex flex-col gap-2">
|
|
37
|
+
<ModusTextInput
|
|
38
|
+
inputId="password-type-input"
|
|
39
|
+
label="Password"
|
|
40
|
+
type="password"
|
|
41
|
+
placeholder="Enter password"
|
|
42
|
+
/>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
<div className="flex flex-col gap-2">
|
|
46
|
+
<ModusTextInput
|
|
47
|
+
inputId="url-type-input"
|
|
48
|
+
label="URL"
|
|
49
|
+
type="url"
|
|
50
|
+
placeholder="https://example.com"
|
|
51
|
+
/>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<div className="flex flex-col gap-2">
|
|
55
|
+
<ModusTextInput
|
|
56
|
+
inputId="tel-type-input"
|
|
57
|
+
label="Phone"
|
|
58
|
+
type="tel"
|
|
59
|
+
placeholder="+1 (555) 123-4567"
|
|
60
|
+
/>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
</DemoExample>
|
|
64
|
+
|
|
65
|
+
<DemoExample
|
|
66
|
+
title="Text Input Sizes"
|
|
67
|
+
description="Text inputs in different sizes."
|
|
68
|
+
>
|
|
69
|
+
<div className="flex flex-col gap-6">
|
|
70
|
+
<div className="flex flex-col gap-2">
|
|
71
|
+
<ModusTextInput
|
|
72
|
+
inputId="small-text-input"
|
|
73
|
+
label="Small"
|
|
74
|
+
placeholder="Enter text"
|
|
75
|
+
size="sm"
|
|
76
|
+
/>
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<div className="flex flex-col gap-2">
|
|
80
|
+
<ModusTextInput
|
|
81
|
+
inputId="medium-text-input"
|
|
82
|
+
label="Medium"
|
|
83
|
+
placeholder="Enter text"
|
|
84
|
+
size="md"
|
|
85
|
+
/>
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<div className="flex flex-col gap-2">
|
|
89
|
+
<ModusTextInput
|
|
90
|
+
inputId="large-text-input"
|
|
91
|
+
label="Large"
|
|
92
|
+
placeholder="Enter text"
|
|
93
|
+
size="lg"
|
|
94
|
+
/>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
</DemoExample>
|
|
98
|
+
|
|
99
|
+
<DemoExample
|
|
100
|
+
title="Text Input with Icons"
|
|
101
|
+
description="Text inputs with clear button or search icon."
|
|
102
|
+
>
|
|
103
|
+
<div className="flex flex-col gap-6">
|
|
104
|
+
<div className="flex flex-col gap-2">
|
|
105
|
+
<ModusTextInput
|
|
106
|
+
inputId="clear-input"
|
|
107
|
+
label="With Clear"
|
|
108
|
+
placeholder="Type to search..."
|
|
109
|
+
includeClear={true}
|
|
110
|
+
/>
|
|
111
|
+
</div>
|
|
112
|
+
|
|
113
|
+
<div className="flex flex-col gap-2">
|
|
114
|
+
<ModusTextInput
|
|
115
|
+
inputId="search-input"
|
|
116
|
+
label="Search"
|
|
117
|
+
placeholder="Search..."
|
|
118
|
+
includeSearch={true}
|
|
119
|
+
/>
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
</DemoExample>
|
|
123
|
+
|
|
124
|
+
<DemoExample
|
|
125
|
+
title="Required and Disabled States"
|
|
126
|
+
description="Text inputs in required and disabled states."
|
|
127
|
+
>
|
|
128
|
+
<div className="flex flex-col gap-6">
|
|
129
|
+
<div className="flex flex-col gap-2">
|
|
130
|
+
<ModusTextInput
|
|
131
|
+
inputId="required-input"
|
|
132
|
+
label="Required"
|
|
133
|
+
placeholder="This field is required"
|
|
134
|
+
required={true}
|
|
135
|
+
/>
|
|
136
|
+
</div>
|
|
137
|
+
|
|
138
|
+
<div className="flex flex-col gap-2">
|
|
139
|
+
<ModusTextInput
|
|
140
|
+
inputId="disabled-input"
|
|
141
|
+
label="Disabled"
|
|
142
|
+
placeholder="Cannot edit"
|
|
143
|
+
disabled={true}
|
|
144
|
+
value="Disabled value"
|
|
145
|
+
/>
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
</DemoExample>
|
|
149
|
+
</DemoPage>
|
|
150
|
+
);
|
|
151
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusTextarea from "../../components/ModusTextarea";
|
|
6
|
+
|
|
7
|
+
export default function TextareaDemoPage() {
|
|
8
|
+
return (
|
|
9
|
+
<DemoPage
|
|
10
|
+
title="Modus Textarea"
|
|
11
|
+
description="Textareas support longer responses or feedback. Offer guidance on what to include and set an appropriate height."
|
|
12
|
+
>
|
|
13
|
+
<DemoExample
|
|
14
|
+
title="Customer feedback"
|
|
15
|
+
description="Use the default size for two to three sentence responses."
|
|
16
|
+
>
|
|
17
|
+
<ModusTextarea
|
|
18
|
+
label="Share feedback"
|
|
19
|
+
placeholder="Tell us what worked well and what can improve."
|
|
20
|
+
rows={4}
|
|
21
|
+
/>
|
|
22
|
+
</DemoExample>
|
|
23
|
+
<DemoExample
|
|
24
|
+
title="Detailed notes"
|
|
25
|
+
description="Increase the height when expecting longer entries."
|
|
26
|
+
>
|
|
27
|
+
<ModusTextarea
|
|
28
|
+
label="Site visit notes"
|
|
29
|
+
rows={6}
|
|
30
|
+
feedback={{
|
|
31
|
+
level: "info",
|
|
32
|
+
message: "Include location details and follow-up actions.",
|
|
33
|
+
}}
|
|
34
|
+
/>
|
|
35
|
+
</DemoExample>
|
|
36
|
+
<DemoExample
|
|
37
|
+
title="Feedback States"
|
|
38
|
+
description="Display validation feedback with info, success, and error states."
|
|
39
|
+
>
|
|
40
|
+
<div className="flex flex-col gap-6">
|
|
41
|
+
<ModusTextarea
|
|
42
|
+
label="Info feedback"
|
|
43
|
+
placeholder="Enter details..."
|
|
44
|
+
rows={3}
|
|
45
|
+
feedback={{
|
|
46
|
+
level: "info",
|
|
47
|
+
message: "This is helpful information about the field.",
|
|
48
|
+
}}
|
|
49
|
+
/>
|
|
50
|
+
<ModusTextarea
|
|
51
|
+
label="Success feedback"
|
|
52
|
+
placeholder="Enter details..."
|
|
53
|
+
rows={3}
|
|
54
|
+
value="Valid input provided."
|
|
55
|
+
feedback={{
|
|
56
|
+
level: "success",
|
|
57
|
+
message: "Great! Your input looks good.",
|
|
58
|
+
}}
|
|
59
|
+
/>
|
|
60
|
+
<ModusTextarea
|
|
61
|
+
label="Error feedback"
|
|
62
|
+
placeholder="Enter details..."
|
|
63
|
+
rows={3}
|
|
64
|
+
feedback={{
|
|
65
|
+
level: "error",
|
|
66
|
+
message: "This field is required. Please enter a value.",
|
|
67
|
+
}}
|
|
68
|
+
/>
|
|
69
|
+
</div>
|
|
70
|
+
</DemoExample>
|
|
71
|
+
</DemoPage>
|
|
72
|
+
);
|
|
73
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusThemeSwitcher from "../../components/ModusThemeSwitcher";
|
|
6
|
+
|
|
7
|
+
export default function ThemeSwitcherDemoPage() {
|
|
8
|
+
return (
|
|
9
|
+
<DemoPage
|
|
10
|
+
title="Modus Theme Switcher"
|
|
11
|
+
description="The theme switcher toggles between Modus light and dark modes. Place it in the header or settings where users expect personalization controls."
|
|
12
|
+
>
|
|
13
|
+
<DemoExample
|
|
14
|
+
title="Theme toggle"
|
|
15
|
+
description="Use the default configuration to respect system preferences and allow quick switching."
|
|
16
|
+
>
|
|
17
|
+
<div className="flex items-center gap-4">
|
|
18
|
+
<ModusThemeSwitcher ariaLabel="Switch theme" />
|
|
19
|
+
<div className="text-sm text-foreground opacity-80">
|
|
20
|
+
Toggle between light and dark experiences.
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
</DemoExample>
|
|
24
|
+
</DemoPage>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusTimeInput from "../../components/ModusTimeInput";
|
|
6
|
+
|
|
7
|
+
export default function TimeInputDemoPage() {
|
|
8
|
+
return (
|
|
9
|
+
<DemoPage
|
|
10
|
+
title="Modus Time Input"
|
|
11
|
+
description="Time input components allow users to enter or select a time value. Use time inputs for scheduling, appointments, or any scenario requiring time selection."
|
|
12
|
+
>
|
|
13
|
+
<DemoExample
|
|
14
|
+
title="Basic Time Input"
|
|
15
|
+
description="Simple time input with label."
|
|
16
|
+
>
|
|
17
|
+
<div className="flex flex-col gap-6">
|
|
18
|
+
<div className="flex flex-col gap-2">
|
|
19
|
+
<ModusTimeInput
|
|
20
|
+
inputId="start-time-input"
|
|
21
|
+
label="Start time"
|
|
22
|
+
value="09:00"
|
|
23
|
+
/>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<div className="flex flex-col gap-2">
|
|
27
|
+
<ModusTimeInput
|
|
28
|
+
inputId="end-time-input"
|
|
29
|
+
label="End time"
|
|
30
|
+
value="17:00"
|
|
31
|
+
/>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
</DemoExample>
|
|
35
|
+
|
|
36
|
+
<DemoExample
|
|
37
|
+
title="Time Input Sizes"
|
|
38
|
+
description="Time inputs in different sizes."
|
|
39
|
+
>
|
|
40
|
+
<div className="flex flex-col gap-6">
|
|
41
|
+
<div className="flex flex-col gap-2">
|
|
42
|
+
<ModusTimeInput
|
|
43
|
+
inputId="small-time-input"
|
|
44
|
+
label="Small"
|
|
45
|
+
value="09:00"
|
|
46
|
+
size="sm"
|
|
47
|
+
/>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<div className="flex flex-col gap-2">
|
|
51
|
+
<ModusTimeInput
|
|
52
|
+
inputId="medium-time-input"
|
|
53
|
+
label="Medium"
|
|
54
|
+
value="09:00"
|
|
55
|
+
size="md"
|
|
56
|
+
/>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<div className="flex flex-col gap-2">
|
|
60
|
+
<ModusTimeInput
|
|
61
|
+
inputId="large-time-input"
|
|
62
|
+
label="Large"
|
|
63
|
+
value="09:00"
|
|
64
|
+
size="lg"
|
|
65
|
+
/>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
</DemoExample>
|
|
69
|
+
|
|
70
|
+
<DemoExample
|
|
71
|
+
title="Time Input with Seconds"
|
|
72
|
+
description="Time inputs displaying seconds."
|
|
73
|
+
>
|
|
74
|
+
<div className="flex flex-col gap-6">
|
|
75
|
+
<div className="flex flex-col gap-2">
|
|
76
|
+
<ModusTimeInput
|
|
77
|
+
inputId="seconds-time-input"
|
|
78
|
+
label="Time with Seconds"
|
|
79
|
+
value="09:30:45"
|
|
80
|
+
showSeconds={true}
|
|
81
|
+
/>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
<div className="flex flex-col gap-2">
|
|
85
|
+
<ModusTimeInput
|
|
86
|
+
inputId="seconds-default-time-input"
|
|
87
|
+
label="Default Format"
|
|
88
|
+
value="09:30"
|
|
89
|
+
showSeconds={false}
|
|
90
|
+
/>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
</DemoExample>
|
|
94
|
+
|
|
95
|
+
<DemoExample
|
|
96
|
+
title="Time Input with Constraints"
|
|
97
|
+
description="Time inputs with min and max values."
|
|
98
|
+
>
|
|
99
|
+
<div className="flex flex-col gap-6">
|
|
100
|
+
<div className="flex flex-col gap-2">
|
|
101
|
+
<ModusTimeInput
|
|
102
|
+
inputId="min-max-time-input"
|
|
103
|
+
label="Business Hours"
|
|
104
|
+
value="09:00"
|
|
105
|
+
min="09:00"
|
|
106
|
+
max="17:00"
|
|
107
|
+
/>
|
|
108
|
+
</div>
|
|
109
|
+
|
|
110
|
+
<div className="flex flex-col gap-2">
|
|
111
|
+
<ModusTimeInput
|
|
112
|
+
inputId="afternoon-time-input"
|
|
113
|
+
label="Afternoon Hours"
|
|
114
|
+
value="14:00"
|
|
115
|
+
min="12:00"
|
|
116
|
+
max="18:00"
|
|
117
|
+
/>
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
</DemoExample>
|
|
121
|
+
|
|
122
|
+
<DemoExample
|
|
123
|
+
title="Required and Disabled States"
|
|
124
|
+
description="Time inputs in required and disabled states."
|
|
125
|
+
>
|
|
126
|
+
<div className="flex flex-col gap-6">
|
|
127
|
+
<div className="flex flex-col gap-2">
|
|
128
|
+
<ModusTimeInput
|
|
129
|
+
inputId="required-time-input"
|
|
130
|
+
label="Required"
|
|
131
|
+
value="09:00"
|
|
132
|
+
required={true}
|
|
133
|
+
/>
|
|
134
|
+
</div>
|
|
135
|
+
|
|
136
|
+
<div className="flex flex-col gap-2">
|
|
137
|
+
<ModusTimeInput
|
|
138
|
+
inputId="disabled-time-input"
|
|
139
|
+
label="Disabled"
|
|
140
|
+
value="09:00"
|
|
141
|
+
disabled={true}
|
|
142
|
+
/>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
</DemoExample>
|
|
146
|
+
</DemoPage>
|
|
147
|
+
);
|
|
148
|
+
}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import DemoExample from "../../components/DemoExample";
|
|
5
|
+
import DemoPage from "../../components/DemoPage";
|
|
6
|
+
import ModusToast from "../../components/ModusToast";
|
|
7
|
+
import { ModusWcButton } from "@trimble-oss/moduswebcomponents-react";
|
|
8
|
+
import type {
|
|
9
|
+
ModusToastItem,
|
|
10
|
+
ToastPosition,
|
|
11
|
+
ToastVariant,
|
|
12
|
+
} from "../../components/ModusToast";
|
|
13
|
+
|
|
14
|
+
export default function ToastDemoPage() {
|
|
15
|
+
const [toasts, setToasts] = useState<ModusToastItem[]>([]);
|
|
16
|
+
|
|
17
|
+
const addToast = (
|
|
18
|
+
variant: ToastVariant,
|
|
19
|
+
position: ToastPosition = "top-end",
|
|
20
|
+
title: string,
|
|
21
|
+
description: string,
|
|
22
|
+
) => {
|
|
23
|
+
const id = `toast-${variant}-${Date.now()}`;
|
|
24
|
+
const newToast: ModusToastItem = {
|
|
25
|
+
id,
|
|
26
|
+
title,
|
|
27
|
+
description,
|
|
28
|
+
variant,
|
|
29
|
+
dismissible: true,
|
|
30
|
+
position,
|
|
31
|
+
delay: variant === "warning" ? null : 4000,
|
|
32
|
+
};
|
|
33
|
+
setToasts((prev) => [...prev, newToast]);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const removeToast = (toastId: string) => {
|
|
37
|
+
setToasts((prev) => prev.filter((toast) => toast.id !== toastId));
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const clearAllToasts = () => {
|
|
41
|
+
setToasts([]);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<DemoPage
|
|
46
|
+
title="Modus Toast"
|
|
47
|
+
description="Toasts deliver lightweight confirmations or alerts without disrupting workflow. Keep the message brief and allow dismissal."
|
|
48
|
+
>
|
|
49
|
+
<DemoExample
|
|
50
|
+
title="Interactive toast triggers"
|
|
51
|
+
description="Click the buttons below to trigger different toasts in various positions and variants."
|
|
52
|
+
>
|
|
53
|
+
<div className="space-y-6">
|
|
54
|
+
{/* Toast Variants */}
|
|
55
|
+
<div>
|
|
56
|
+
<div className="text-lg font-semibold text-foreground mb-4">
|
|
57
|
+
Toast Variants
|
|
58
|
+
</div>
|
|
59
|
+
<div className="flex flex-wrap gap-3">
|
|
60
|
+
<ModusWcButton
|
|
61
|
+
color="primary"
|
|
62
|
+
variant="filled"
|
|
63
|
+
onButtonClick={() =>
|
|
64
|
+
addToast(
|
|
65
|
+
"success",
|
|
66
|
+
"top-end",
|
|
67
|
+
"Success!",
|
|
68
|
+
"Your action completed successfully.",
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
>
|
|
72
|
+
Success Toast
|
|
73
|
+
</ModusWcButton>
|
|
74
|
+
<ModusWcButton
|
|
75
|
+
color="warning"
|
|
76
|
+
variant="filled"
|
|
77
|
+
onButtonClick={() =>
|
|
78
|
+
addToast(
|
|
79
|
+
"warning",
|
|
80
|
+
"top-end",
|
|
81
|
+
"Warning!",
|
|
82
|
+
"Please review your input.",
|
|
83
|
+
)
|
|
84
|
+
}
|
|
85
|
+
>
|
|
86
|
+
Warning Toast
|
|
87
|
+
</ModusWcButton>
|
|
88
|
+
<ModusWcButton
|
|
89
|
+
color="danger"
|
|
90
|
+
variant="filled"
|
|
91
|
+
onButtonClick={() =>
|
|
92
|
+
addToast(
|
|
93
|
+
"error",
|
|
94
|
+
"top-end",
|
|
95
|
+
"Error!",
|
|
96
|
+
"Something went wrong.",
|
|
97
|
+
)
|
|
98
|
+
}
|
|
99
|
+
>
|
|
100
|
+
Error Toast
|
|
101
|
+
</ModusWcButton>
|
|
102
|
+
<ModusWcButton
|
|
103
|
+
color="secondary"
|
|
104
|
+
variant="filled"
|
|
105
|
+
onButtonClick={() =>
|
|
106
|
+
addToast(
|
|
107
|
+
"info",
|
|
108
|
+
"top-end",
|
|
109
|
+
"Info",
|
|
110
|
+
"Here's some helpful information.",
|
|
111
|
+
)
|
|
112
|
+
}
|
|
113
|
+
>
|
|
114
|
+
Info Toast
|
|
115
|
+
</ModusWcButton>
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
|
|
119
|
+
{/* Toast Positions */}
|
|
120
|
+
<div>
|
|
121
|
+
<div className="text-lg font-semibold text-foreground mb-4">
|
|
122
|
+
Toast Positions
|
|
123
|
+
</div>
|
|
124
|
+
<div className="space-y-4">
|
|
125
|
+
{/* Top Positions */}
|
|
126
|
+
<div className="bg-card border border-border rounded-lg p-4">
|
|
127
|
+
<div className="text-sm font-medium text-muted-foreground mb-3">
|
|
128
|
+
Top
|
|
129
|
+
</div>
|
|
130
|
+
<div className="flex flex-wrap gap-3">
|
|
131
|
+
<ModusWcButton
|
|
132
|
+
color="secondary"
|
|
133
|
+
variant="outlined"
|
|
134
|
+
onButtonClick={() =>
|
|
135
|
+
addToast(
|
|
136
|
+
"info",
|
|
137
|
+
"top-start",
|
|
138
|
+
"Top Start",
|
|
139
|
+
"Toast in top-left corner",
|
|
140
|
+
)
|
|
141
|
+
}
|
|
142
|
+
>
|
|
143
|
+
Top Start
|
|
144
|
+
</ModusWcButton>
|
|
145
|
+
<ModusWcButton
|
|
146
|
+
color="secondary"
|
|
147
|
+
variant="outlined"
|
|
148
|
+
onButtonClick={() =>
|
|
149
|
+
addToast(
|
|
150
|
+
"info",
|
|
151
|
+
"top-center",
|
|
152
|
+
"Top Center",
|
|
153
|
+
"Toast in top-center",
|
|
154
|
+
)
|
|
155
|
+
}
|
|
156
|
+
>
|
|
157
|
+
Top Center
|
|
158
|
+
</ModusWcButton>
|
|
159
|
+
<ModusWcButton
|
|
160
|
+
color="secondary"
|
|
161
|
+
variant="outlined"
|
|
162
|
+
onButtonClick={() =>
|
|
163
|
+
addToast(
|
|
164
|
+
"info",
|
|
165
|
+
"top-end",
|
|
166
|
+
"Top End",
|
|
167
|
+
"Toast in top-right corner",
|
|
168
|
+
)
|
|
169
|
+
}
|
|
170
|
+
>
|
|
171
|
+
Top End
|
|
172
|
+
</ModusWcButton>
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
175
|
+
|
|
176
|
+
{/* Middle Positions */}
|
|
177
|
+
<div className="bg-card border border-border rounded-lg p-4">
|
|
178
|
+
<div className="text-sm font-medium text-muted-foreground mb-3">
|
|
179
|
+
Middle
|
|
180
|
+
</div>
|
|
181
|
+
<div className="flex flex-wrap gap-3">
|
|
182
|
+
<ModusWcButton
|
|
183
|
+
color="secondary"
|
|
184
|
+
variant="outlined"
|
|
185
|
+
onButtonClick={() =>
|
|
186
|
+
addToast(
|
|
187
|
+
"success",
|
|
188
|
+
"middle-start",
|
|
189
|
+
"Middle Start",
|
|
190
|
+
"Toast in middle-left",
|
|
191
|
+
)
|
|
192
|
+
}
|
|
193
|
+
>
|
|
194
|
+
Middle Start
|
|
195
|
+
</ModusWcButton>
|
|
196
|
+
<ModusWcButton
|
|
197
|
+
color="secondary"
|
|
198
|
+
variant="outlined"
|
|
199
|
+
onButtonClick={() =>
|
|
200
|
+
addToast(
|
|
201
|
+
"success",
|
|
202
|
+
"middle-center",
|
|
203
|
+
"Middle Center",
|
|
204
|
+
"Toast in center",
|
|
205
|
+
)
|
|
206
|
+
}
|
|
207
|
+
>
|
|
208
|
+
Middle Center
|
|
209
|
+
</ModusWcButton>
|
|
210
|
+
<ModusWcButton
|
|
211
|
+
color="secondary"
|
|
212
|
+
variant="outlined"
|
|
213
|
+
onButtonClick={() =>
|
|
214
|
+
addToast(
|
|
215
|
+
"success",
|
|
216
|
+
"middle-end",
|
|
217
|
+
"Middle End",
|
|
218
|
+
"Toast in middle-right",
|
|
219
|
+
)
|
|
220
|
+
}
|
|
221
|
+
>
|
|
222
|
+
Middle End
|
|
223
|
+
</ModusWcButton>
|
|
224
|
+
</div>
|
|
225
|
+
</div>
|
|
226
|
+
|
|
227
|
+
{/* Bottom Positions */}
|
|
228
|
+
<div className="bg-card border border-border rounded-lg p-4">
|
|
229
|
+
<div className="text-sm font-medium text-muted-foreground mb-3">
|
|
230
|
+
Bottom
|
|
231
|
+
</div>
|
|
232
|
+
<div className="flex flex-wrap gap-3">
|
|
233
|
+
<ModusWcButton
|
|
234
|
+
color="secondary"
|
|
235
|
+
variant="outlined"
|
|
236
|
+
onButtonClick={() =>
|
|
237
|
+
addToast(
|
|
238
|
+
"warning",
|
|
239
|
+
"bottom-start",
|
|
240
|
+
"Bottom Start",
|
|
241
|
+
"Toast in bottom-left",
|
|
242
|
+
)
|
|
243
|
+
}
|
|
244
|
+
>
|
|
245
|
+
Bottom Start
|
|
246
|
+
</ModusWcButton>
|
|
247
|
+
<ModusWcButton
|
|
248
|
+
color="secondary"
|
|
249
|
+
variant="outlined"
|
|
250
|
+
onButtonClick={() =>
|
|
251
|
+
addToast(
|
|
252
|
+
"warning",
|
|
253
|
+
"bottom-center",
|
|
254
|
+
"Bottom Center",
|
|
255
|
+
"Toast in bottom-center",
|
|
256
|
+
)
|
|
257
|
+
}
|
|
258
|
+
>
|
|
259
|
+
Bottom Center
|
|
260
|
+
</ModusWcButton>
|
|
261
|
+
<ModusWcButton
|
|
262
|
+
color="secondary"
|
|
263
|
+
variant="outlined"
|
|
264
|
+
onButtonClick={() =>
|
|
265
|
+
addToast(
|
|
266
|
+
"warning",
|
|
267
|
+
"bottom-end",
|
|
268
|
+
"Bottom End",
|
|
269
|
+
"Toast in bottom-right",
|
|
270
|
+
)
|
|
271
|
+
}
|
|
272
|
+
>
|
|
273
|
+
Bottom End
|
|
274
|
+
</ModusWcButton>
|
|
275
|
+
</div>
|
|
276
|
+
</div>
|
|
277
|
+
</div>
|
|
278
|
+
</div>
|
|
279
|
+
|
|
280
|
+
{/* Special Features */}
|
|
281
|
+
<div>
|
|
282
|
+
<div className="text-lg font-semibold text-foreground mb-4">
|
|
283
|
+
Special Features
|
|
284
|
+
</div>
|
|
285
|
+
<div className="flex flex-wrap gap-3">
|
|
286
|
+
<ModusWcButton
|
|
287
|
+
color="danger"
|
|
288
|
+
variant="outlined"
|
|
289
|
+
onButtonClick={clearAllToasts}
|
|
290
|
+
>
|
|
291
|
+
Clear All Toasts
|
|
292
|
+
</ModusWcButton>
|
|
293
|
+
</div>
|
|
294
|
+
</div>
|
|
295
|
+
|
|
296
|
+
{/* Toast Display */}
|
|
297
|
+
<ModusToast toasts={toasts} onDismiss={removeToast} />
|
|
298
|
+
</div>
|
|
299
|
+
</DemoExample>
|
|
300
|
+
</DemoPage>
|
|
301
|
+
);
|
|
302
|
+
}
|