@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,185 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState, useEffect } from "react";
|
|
4
|
+
import DemoExample from "../../components/DemoExample";
|
|
5
|
+
import DemoPage from "../../components/DemoPage";
|
|
6
|
+
import ModusProgress from "../../components/ModusProgress";
|
|
7
|
+
import ModusButton from "../../components/ModusButton";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Demo page showcasing the Modus Progress component.
|
|
11
|
+
*
|
|
12
|
+
* Demonstrates progress features including:
|
|
13
|
+
* - Basic progress bars
|
|
14
|
+
* - Different values
|
|
15
|
+
* - Radial progress
|
|
16
|
+
* - Indeterminate progress
|
|
17
|
+
* - With labels
|
|
18
|
+
*/
|
|
19
|
+
export default function ProgressDemoPage() {
|
|
20
|
+
const [progressValue, setProgressValue] = useState(0);
|
|
21
|
+
const [progressLabel, setProgressLabel] = useState("0%");
|
|
22
|
+
const [progressInterval, setProgressInterval] = useState<ReturnType<
|
|
23
|
+
typeof setInterval
|
|
24
|
+
> | null>(null);
|
|
25
|
+
|
|
26
|
+
const startProgress = () => {
|
|
27
|
+
if (progressInterval) {
|
|
28
|
+
clearInterval(progressInterval);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
setProgressValue(0);
|
|
32
|
+
setProgressLabel("0%");
|
|
33
|
+
|
|
34
|
+
const interval = setInterval(() => {
|
|
35
|
+
setProgressValue((value) => {
|
|
36
|
+
const newValue = Math.min(value + 5, 100);
|
|
37
|
+
setProgressLabel(`${newValue}%`);
|
|
38
|
+
if (newValue >= 100 && interval) {
|
|
39
|
+
clearInterval(interval);
|
|
40
|
+
setProgressInterval(null);
|
|
41
|
+
}
|
|
42
|
+
return newValue;
|
|
43
|
+
});
|
|
44
|
+
}, 200);
|
|
45
|
+
|
|
46
|
+
setProgressInterval(interval);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const resetProgress = () => {
|
|
50
|
+
if (progressInterval) {
|
|
51
|
+
clearInterval(progressInterval);
|
|
52
|
+
setProgressInterval(null);
|
|
53
|
+
}
|
|
54
|
+
setProgressValue(0);
|
|
55
|
+
setProgressLabel("0%");
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// Cleanup interval on unmount
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
return () => {
|
|
61
|
+
if (progressInterval) {
|
|
62
|
+
clearInterval(progressInterval);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}, [progressInterval]);
|
|
66
|
+
|
|
67
|
+
return (
|
|
68
|
+
<DemoPage
|
|
69
|
+
title="Modus Progress"
|
|
70
|
+
description="Progress components indicate the completion status of a task or process. Use progress bars for file uploads, form completion, or any process with measurable progress."
|
|
71
|
+
>
|
|
72
|
+
<DemoExample
|
|
73
|
+
title="Basic Progress Bar"
|
|
74
|
+
description="Simple progress bars with different values."
|
|
75
|
+
>
|
|
76
|
+
<div className="flex flex-col gap-6">
|
|
77
|
+
<div className="flex flex-col gap-2">
|
|
78
|
+
<div className="text-sm text-muted-foreground">0%</div>
|
|
79
|
+
<ModusProgress value={0} />
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<div className="flex flex-col gap-2">
|
|
83
|
+
<div className="text-sm text-muted-foreground">25%</div>
|
|
84
|
+
<ModusProgress value={25} />
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
<div className="flex flex-col gap-2">
|
|
88
|
+
<div className="text-sm text-muted-foreground">50%</div>
|
|
89
|
+
<ModusProgress value={50} />
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<div className="flex flex-col gap-2">
|
|
93
|
+
<div className="text-sm text-muted-foreground">75%</div>
|
|
94
|
+
<ModusProgress value={75} />
|
|
95
|
+
</div>
|
|
96
|
+
|
|
97
|
+
<div className="flex flex-col gap-2">
|
|
98
|
+
<div className="text-sm text-muted-foreground">100%</div>
|
|
99
|
+
<ModusProgress value={100} />
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
</DemoExample>
|
|
103
|
+
|
|
104
|
+
<DemoExample
|
|
105
|
+
title="Progress with Labels"
|
|
106
|
+
description="Progress bars with custom labels."
|
|
107
|
+
>
|
|
108
|
+
<div className="flex flex-col gap-6">
|
|
109
|
+
<ModusProgress value={45} label="45% complete" />
|
|
110
|
+
<ModusProgress value={72} label="72%" />
|
|
111
|
+
<ModusProgress value={90} label="Almost done" />
|
|
112
|
+
</div>
|
|
113
|
+
</DemoExample>
|
|
114
|
+
|
|
115
|
+
<DemoExample
|
|
116
|
+
title="Radial Progress"
|
|
117
|
+
description="Radial progress indicators for compact spaces."
|
|
118
|
+
>
|
|
119
|
+
<div className="flex flex-wrap gap-6">
|
|
120
|
+
<div className="flex flex-col gap-2">
|
|
121
|
+
<div className="text-sm text-muted-foreground">25%</div>
|
|
122
|
+
<ModusProgress variant="radial" value={25} label="25%" />
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
<div className="flex flex-col gap-2">
|
|
126
|
+
<div className="text-sm text-muted-foreground">50%</div>
|
|
127
|
+
<ModusProgress variant="radial" value={50} label="50%" />
|
|
128
|
+
</div>
|
|
129
|
+
|
|
130
|
+
<div className="flex flex-col gap-2">
|
|
131
|
+
<div className="text-sm text-muted-foreground">75%</div>
|
|
132
|
+
<ModusProgress variant="radial" value={75} label="75%" />
|
|
133
|
+
</div>
|
|
134
|
+
|
|
135
|
+
<div className="flex flex-col gap-2">
|
|
136
|
+
<div className="text-sm text-muted-foreground">100%</div>
|
|
137
|
+
<ModusProgress variant="radial" value={100} label="100%" />
|
|
138
|
+
</div>
|
|
139
|
+
</div>
|
|
140
|
+
</DemoExample>
|
|
141
|
+
|
|
142
|
+
<DemoExample
|
|
143
|
+
title="Indeterminate Progress"
|
|
144
|
+
description="Progress bars for tasks with unknown duration."
|
|
145
|
+
>
|
|
146
|
+
<div className="flex flex-col gap-6">
|
|
147
|
+
<ModusProgress indeterminate />
|
|
148
|
+
<div className="text-sm text-muted-foreground">
|
|
149
|
+
Use indeterminate progress when the duration of a task is unknown.
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
</DemoExample>
|
|
153
|
+
|
|
154
|
+
<DemoExample
|
|
155
|
+
title="Interactive Example"
|
|
156
|
+
description="Dynamic progress bar that updates over time."
|
|
157
|
+
>
|
|
158
|
+
<div className="flex flex-col gap-6">
|
|
159
|
+
<ModusProgress value={progressValue} label={progressLabel} />
|
|
160
|
+
<div className="flex gap-2">
|
|
161
|
+
<ModusButton
|
|
162
|
+
color="primary"
|
|
163
|
+
size="sm"
|
|
164
|
+
onButtonClick={startProgress}
|
|
165
|
+
>
|
|
166
|
+
Start Progress
|
|
167
|
+
</ModusButton>
|
|
168
|
+
<ModusButton
|
|
169
|
+
color="secondary"
|
|
170
|
+
size="sm"
|
|
171
|
+
onButtonClick={resetProgress}
|
|
172
|
+
>
|
|
173
|
+
Reset
|
|
174
|
+
</ModusButton>
|
|
175
|
+
</div>
|
|
176
|
+
<div className="p-4 rounded-lg bg-card border-default">
|
|
177
|
+
<div className="text-sm text-foreground">
|
|
178
|
+
<strong>Current Value:</strong> {progressValue}%
|
|
179
|
+
</div>
|
|
180
|
+
</div>
|
|
181
|
+
</div>
|
|
182
|
+
</DemoExample>
|
|
183
|
+
</DemoPage>
|
|
184
|
+
);
|
|
185
|
+
}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import DemoExample from "../../components/DemoExample";
|
|
5
|
+
import DemoPage from "../../components/DemoPage";
|
|
6
|
+
import ModusRadio from "../../components/ModusRadio";
|
|
7
|
+
import ModusInputLabel from "../../components/ModusInputLabel";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Demo page showcasing the Modus Radio component.
|
|
11
|
+
*
|
|
12
|
+
* Demonstrates radio button features including:
|
|
13
|
+
* - Basic radio groups
|
|
14
|
+
* - Sizes
|
|
15
|
+
* - Disabled state
|
|
16
|
+
* - Required fields
|
|
17
|
+
* - With labels
|
|
18
|
+
*/
|
|
19
|
+
export default function RadioDemoPage() {
|
|
20
|
+
const [selectedOption, setSelectedOption] = useState<string | null>(null);
|
|
21
|
+
|
|
22
|
+
const handleRadioChange = (value: string) => {
|
|
23
|
+
setSelectedOption(value);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<DemoPage
|
|
28
|
+
title="Modus Radio"
|
|
29
|
+
description="Radio buttons allow users to select a single option from a group. Use radio buttons when only one option can be selected at a time."
|
|
30
|
+
>
|
|
31
|
+
<DemoExample
|
|
32
|
+
title="Basic Radio Group"
|
|
33
|
+
description="Simple radio button group with multiple options."
|
|
34
|
+
>
|
|
35
|
+
<div className="flex flex-col gap-6">
|
|
36
|
+
<div className="flex flex-col gap-2">
|
|
37
|
+
<ModusInputLabel forId="option-a" labelText="Select Option" />
|
|
38
|
+
<div className="flex flex-col gap-2">
|
|
39
|
+
<ModusRadio
|
|
40
|
+
inputId="option-a"
|
|
41
|
+
label="Option A"
|
|
42
|
+
name="basic-group"
|
|
43
|
+
value={true}
|
|
44
|
+
/>
|
|
45
|
+
<ModusRadio
|
|
46
|
+
inputId="option-b"
|
|
47
|
+
label="Option B"
|
|
48
|
+
name="basic-group"
|
|
49
|
+
value={false}
|
|
50
|
+
/>
|
|
51
|
+
<ModusRadio
|
|
52
|
+
inputId="option-c"
|
|
53
|
+
label="Option C"
|
|
54
|
+
name="basic-group"
|
|
55
|
+
value={false}
|
|
56
|
+
/>
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
</DemoExample>
|
|
61
|
+
|
|
62
|
+
<DemoExample
|
|
63
|
+
title="Radio Button Sizes"
|
|
64
|
+
description="Radio buttons in different sizes."
|
|
65
|
+
>
|
|
66
|
+
<div className="flex flex-col gap-6">
|
|
67
|
+
<div className="flex flex-col gap-2">
|
|
68
|
+
<ModusInputLabel forId="small-radio" labelText="Small" />
|
|
69
|
+
<div className="flex flex-col gap-2">
|
|
70
|
+
<ModusRadio
|
|
71
|
+
inputId="small-radio"
|
|
72
|
+
label="Small Option"
|
|
73
|
+
name="small-group"
|
|
74
|
+
size="sm"
|
|
75
|
+
value={true}
|
|
76
|
+
/>
|
|
77
|
+
<ModusRadio
|
|
78
|
+
inputId="small-radio-b"
|
|
79
|
+
label="Another Small Option"
|
|
80
|
+
name="small-group"
|
|
81
|
+
size="sm"
|
|
82
|
+
value={false}
|
|
83
|
+
/>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
<div className="flex flex-col gap-2">
|
|
88
|
+
<ModusInputLabel
|
|
89
|
+
forId="medium-radio"
|
|
90
|
+
labelText="Medium (Default)"
|
|
91
|
+
/>
|
|
92
|
+
<div className="flex flex-col gap-2">
|
|
93
|
+
<ModusRadio
|
|
94
|
+
inputId="medium-radio"
|
|
95
|
+
label="Medium Option"
|
|
96
|
+
name="medium-group"
|
|
97
|
+
size="md"
|
|
98
|
+
value={true}
|
|
99
|
+
/>
|
|
100
|
+
<ModusRadio
|
|
101
|
+
inputId="medium-radio-b"
|
|
102
|
+
label="Another Medium Option"
|
|
103
|
+
name="medium-group"
|
|
104
|
+
size="md"
|
|
105
|
+
value={false}
|
|
106
|
+
/>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
|
|
110
|
+
<div className="flex flex-col gap-2">
|
|
111
|
+
<ModusInputLabel forId="large-radio" labelText="Large" />
|
|
112
|
+
<div className="flex flex-col gap-2">
|
|
113
|
+
<ModusRadio
|
|
114
|
+
inputId="large-radio"
|
|
115
|
+
label="Large Option"
|
|
116
|
+
name="large-group"
|
|
117
|
+
size="lg"
|
|
118
|
+
value={true}
|
|
119
|
+
/>
|
|
120
|
+
<ModusRadio
|
|
121
|
+
inputId="large-radio-b"
|
|
122
|
+
label="Another Large Option"
|
|
123
|
+
name="large-group"
|
|
124
|
+
size="lg"
|
|
125
|
+
value={false}
|
|
126
|
+
/>
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
</DemoExample>
|
|
131
|
+
|
|
132
|
+
<DemoExample
|
|
133
|
+
title="Required Radio Group"
|
|
134
|
+
description="Radio buttons marked as required."
|
|
135
|
+
>
|
|
136
|
+
<div className="flex flex-col gap-6">
|
|
137
|
+
<div className="flex flex-col gap-2">
|
|
138
|
+
<ModusInputLabel
|
|
139
|
+
forId="required-a"
|
|
140
|
+
labelText="Required Selection"
|
|
141
|
+
required={true}
|
|
142
|
+
/>
|
|
143
|
+
<div className="flex flex-col gap-2">
|
|
144
|
+
<ModusRadio
|
|
145
|
+
inputId="required-a"
|
|
146
|
+
label="Yes"
|
|
147
|
+
name="required-group"
|
|
148
|
+
required={true}
|
|
149
|
+
value={true}
|
|
150
|
+
/>
|
|
151
|
+
<ModusRadio
|
|
152
|
+
inputId="required-b"
|
|
153
|
+
label="No"
|
|
154
|
+
name="required-group"
|
|
155
|
+
required={true}
|
|
156
|
+
value={false}
|
|
157
|
+
/>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
</DemoExample>
|
|
162
|
+
|
|
163
|
+
<DemoExample
|
|
164
|
+
title="Disabled Radio Buttons"
|
|
165
|
+
description="Radio buttons in disabled state."
|
|
166
|
+
>
|
|
167
|
+
<div className="flex flex-col gap-6">
|
|
168
|
+
<div className="flex flex-col gap-2">
|
|
169
|
+
<ModusInputLabel forId="disabled-a" labelText="Disabled Options" />
|
|
170
|
+
<div className="flex flex-col gap-2">
|
|
171
|
+
<ModusRadio
|
|
172
|
+
inputId="disabled-a"
|
|
173
|
+
label="Disabled Option 1"
|
|
174
|
+
name="disabled-group"
|
|
175
|
+
disabled={true}
|
|
176
|
+
value={true}
|
|
177
|
+
/>
|
|
178
|
+
<ModusRadio
|
|
179
|
+
inputId="disabled-b"
|
|
180
|
+
label="Disabled Option 2"
|
|
181
|
+
name="disabled-group"
|
|
182
|
+
disabled={true}
|
|
183
|
+
value={false}
|
|
184
|
+
/>
|
|
185
|
+
<ModusRadio
|
|
186
|
+
inputId="disabled-c"
|
|
187
|
+
label="Enabled Option"
|
|
188
|
+
name="disabled-group"
|
|
189
|
+
disabled={false}
|
|
190
|
+
value={false}
|
|
191
|
+
/>
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
</div>
|
|
195
|
+
</DemoExample>
|
|
196
|
+
|
|
197
|
+
<DemoExample
|
|
198
|
+
title="Interactive Example"
|
|
199
|
+
description="Radio buttons with two-way binding and event handling."
|
|
200
|
+
>
|
|
201
|
+
<div className="flex flex-col gap-6">
|
|
202
|
+
<div className="flex flex-col gap-2">
|
|
203
|
+
<ModusInputLabel
|
|
204
|
+
forId="interactive-a"
|
|
205
|
+
labelText="Choose Your Plan"
|
|
206
|
+
/>
|
|
207
|
+
<div className="flex flex-col gap-2">
|
|
208
|
+
<ModusRadio
|
|
209
|
+
inputId="interactive-a"
|
|
210
|
+
label="Free Plan"
|
|
211
|
+
name="interactive-group"
|
|
212
|
+
value={selectedOption === "free"}
|
|
213
|
+
onInputChange={() => handleRadioChange("free")}
|
|
214
|
+
/>
|
|
215
|
+
<ModusRadio
|
|
216
|
+
inputId="interactive-b"
|
|
217
|
+
label="Pro Plan"
|
|
218
|
+
name="interactive-group"
|
|
219
|
+
value={selectedOption === "pro"}
|
|
220
|
+
onInputChange={() => handleRadioChange("pro")}
|
|
221
|
+
/>
|
|
222
|
+
<ModusRadio
|
|
223
|
+
inputId="interactive-c"
|
|
224
|
+
label="Enterprise Plan"
|
|
225
|
+
name="interactive-group"
|
|
226
|
+
value={selectedOption === "enterprise"}
|
|
227
|
+
onInputChange={() => handleRadioChange("enterprise")}
|
|
228
|
+
/>
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
{selectedOption && (
|
|
232
|
+
<div className="p-4 rounded-lg bg-card border-default">
|
|
233
|
+
<div className="text-sm text-foreground">
|
|
234
|
+
<strong>Selected Option:</strong> {selectedOption}
|
|
235
|
+
</div>
|
|
236
|
+
</div>
|
|
237
|
+
)}
|
|
238
|
+
</div>
|
|
239
|
+
</DemoExample>
|
|
240
|
+
</DemoPage>
|
|
241
|
+
);
|
|
242
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusRating from "../../components/ModusRating";
|
|
6
|
+
|
|
7
|
+
export default function RatingDemoPage() {
|
|
8
|
+
return (
|
|
9
|
+
<DemoPage
|
|
10
|
+
title="Modus Rating"
|
|
11
|
+
description="Rating components allow users to provide feedback through visual ratings. Use ratings for reviews, surveys, or any scenario requiring user opinion."
|
|
12
|
+
>
|
|
13
|
+
<DemoExample title="Star Rating" description="Star-based rating system.">
|
|
14
|
+
<div className="flex flex-col gap-6">
|
|
15
|
+
<ModusRating variant="star" value={0} count={5} />
|
|
16
|
+
<ModusRating variant="star" value={2.5} count={5} />
|
|
17
|
+
<ModusRating variant="star" value={5} count={5} />
|
|
18
|
+
</div>
|
|
19
|
+
</DemoExample>
|
|
20
|
+
|
|
21
|
+
<DemoExample
|
|
22
|
+
title="Star Rating with Half Steps"
|
|
23
|
+
description="Star ratings that allow half-step increments."
|
|
24
|
+
>
|
|
25
|
+
<div className="flex flex-col gap-6">
|
|
26
|
+
<ModusRating variant="star" value={2.5} count={5} allowHalf />
|
|
27
|
+
<ModusRating variant="star" value={3.5} count={5} allowHalf />
|
|
28
|
+
<ModusRating variant="star" value={4.5} count={5} allowHalf />
|
|
29
|
+
</div>
|
|
30
|
+
</DemoExample>
|
|
31
|
+
|
|
32
|
+
<DemoExample
|
|
33
|
+
title="Smiley Rating"
|
|
34
|
+
description="Smiley face-based rating system."
|
|
35
|
+
>
|
|
36
|
+
<div className="flex flex-col gap-6">
|
|
37
|
+
<ModusRating variant="smiley" value={1} count={5} />
|
|
38
|
+
<ModusRating variant="smiley" value={3} count={5} />
|
|
39
|
+
<ModusRating variant="smiley" value={5} count={5} />
|
|
40
|
+
</div>
|
|
41
|
+
</DemoExample>
|
|
42
|
+
|
|
43
|
+
<DemoExample
|
|
44
|
+
title="Rating Sizes"
|
|
45
|
+
description="Ratings in different sizes."
|
|
46
|
+
>
|
|
47
|
+
<div className="flex flex-col gap-6">
|
|
48
|
+
<div className="flex flex-col gap-2">
|
|
49
|
+
<div className="text-sm text-muted-foreground">Small</div>
|
|
50
|
+
<ModusRating variant="star" value={3} count={5} size="sm" />
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<div className="flex flex-col gap-2">
|
|
54
|
+
<div className="text-sm text-muted-foreground">
|
|
55
|
+
Medium (Default)
|
|
56
|
+
</div>
|
|
57
|
+
<ModusRating variant="star" value={3} count={5} size="md" />
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<div className="flex flex-col gap-2">
|
|
61
|
+
<div className="text-sm text-muted-foreground">Large</div>
|
|
62
|
+
<ModusRating variant="star" value={3} count={5} size="lg" />
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
</DemoExample>
|
|
66
|
+
|
|
67
|
+
<DemoExample
|
|
68
|
+
title="Custom Rating Count"
|
|
69
|
+
description="Ratings with custom number of items."
|
|
70
|
+
>
|
|
71
|
+
<div className="flex flex-col gap-6">
|
|
72
|
+
<div className="flex flex-col gap-2">
|
|
73
|
+
<div className="text-sm text-muted-foreground">3 Stars</div>
|
|
74
|
+
<ModusRating variant="star" value={2} count={3} />
|
|
75
|
+
</div>
|
|
76
|
+
|
|
77
|
+
<div className="flex flex-col gap-2">
|
|
78
|
+
<div className="text-sm text-muted-foreground">10 Stars</div>
|
|
79
|
+
<ModusRating variant="star" value={7} count={10} />
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
</DemoExample>
|
|
83
|
+
|
|
84
|
+
<DemoExample
|
|
85
|
+
title="Disabled Rating"
|
|
86
|
+
description="Read-only rating display."
|
|
87
|
+
>
|
|
88
|
+
<div className="flex flex-col gap-6">
|
|
89
|
+
<ModusRating variant="star" value={4} count={5} disabled />
|
|
90
|
+
<div className="text-sm text-muted-foreground">
|
|
91
|
+
Disabled ratings are useful for displaying read-only ratings.
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
</DemoExample>
|
|
95
|
+
</DemoPage>
|
|
96
|
+
);
|
|
97
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusSelect from "../../components/ModusSelect";
|
|
6
|
+
|
|
7
|
+
const countryOptions = [
|
|
8
|
+
{ label: "United States", value: "us" },
|
|
9
|
+
{ label: "Canada", value: "ca" },
|
|
10
|
+
{ label: "Mexico", value: "mx" },
|
|
11
|
+
{ label: "United Kingdom", value: "uk" },
|
|
12
|
+
{ label: "Germany", value: "de" },
|
|
13
|
+
{ label: "France", value: "fr" },
|
|
14
|
+
{ label: "Japan", value: "jp" },
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
const languageOptions = [
|
|
18
|
+
{ label: "English", value: "en" },
|
|
19
|
+
{ label: "Spanish", value: "es" },
|
|
20
|
+
{ label: "French", value: "fr" },
|
|
21
|
+
{ label: "German", value: "de" },
|
|
22
|
+
{ label: "Japanese", value: "ja" },
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
const sizeOptions = [
|
|
26
|
+
{ label: "Option 1", value: "1" },
|
|
27
|
+
{ label: "Option 2", value: "2" },
|
|
28
|
+
{ label: "Option 3", value: "3" },
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
export default function SelectDemoPage() {
|
|
32
|
+
return (
|
|
33
|
+
<DemoPage
|
|
34
|
+
title="Modus Select"
|
|
35
|
+
description="Select components provide a dropdown menu for choosing from a list of options. Use selects when you have multiple options and want to save space compared to radio buttons."
|
|
36
|
+
>
|
|
37
|
+
<DemoExample
|
|
38
|
+
title="Basic Select"
|
|
39
|
+
description="Simple select dropdown with options."
|
|
40
|
+
>
|
|
41
|
+
<div className="flex flex-col gap-6">
|
|
42
|
+
<div className="flex flex-col gap-2">
|
|
43
|
+
<ModusSelect
|
|
44
|
+
inputId="country-select"
|
|
45
|
+
label="Choose a country"
|
|
46
|
+
options={countryOptions}
|
|
47
|
+
/>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<div className="flex flex-col gap-2">
|
|
51
|
+
<ModusSelect
|
|
52
|
+
inputId="language-select"
|
|
53
|
+
label="Select Language"
|
|
54
|
+
options={languageOptions}
|
|
55
|
+
/>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
</DemoExample>
|
|
59
|
+
|
|
60
|
+
<DemoExample
|
|
61
|
+
title="Select Sizes"
|
|
62
|
+
description="Select dropdowns in different sizes."
|
|
63
|
+
>
|
|
64
|
+
<div className="flex flex-col gap-6">
|
|
65
|
+
<div className="flex flex-col gap-2">
|
|
66
|
+
<ModusSelect
|
|
67
|
+
inputId="small-select"
|
|
68
|
+
label="Small"
|
|
69
|
+
options={sizeOptions}
|
|
70
|
+
size="sm"
|
|
71
|
+
/>
|
|
72
|
+
</div>
|
|
73
|
+
|
|
74
|
+
<div className="flex flex-col gap-2">
|
|
75
|
+
<ModusSelect
|
|
76
|
+
inputId="medium-select"
|
|
77
|
+
label="Medium"
|
|
78
|
+
options={sizeOptions}
|
|
79
|
+
size="md"
|
|
80
|
+
/>
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
<div className="flex flex-col gap-2">
|
|
84
|
+
<ModusSelect
|
|
85
|
+
inputId="large-select"
|
|
86
|
+
label="Large"
|
|
87
|
+
options={sizeOptions}
|
|
88
|
+
size="lg"
|
|
89
|
+
/>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
</DemoExample>
|
|
93
|
+
|
|
94
|
+
<DemoExample
|
|
95
|
+
title="Disabled Select"
|
|
96
|
+
description="Select dropdowns in disabled state."
|
|
97
|
+
>
|
|
98
|
+
<div className="flex flex-col gap-6">
|
|
99
|
+
<div className="flex flex-col gap-2">
|
|
100
|
+
<ModusSelect
|
|
101
|
+
inputId="disabled-select"
|
|
102
|
+
label="Disabled"
|
|
103
|
+
options={countryOptions}
|
|
104
|
+
disabled
|
|
105
|
+
/>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
</DemoExample>
|
|
109
|
+
</DemoPage>
|
|
110
|
+
);
|
|
111
|
+
}
|