@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,231 @@
|
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
import DemoExample from "../../components/DemoExample";
|
|
3
|
+
import DemoPage from "../../components/DemoPage";
|
|
4
|
+
import ModusButtonGroup from "../../components/ModusButtonGroup";
|
|
5
|
+
import ModusButton from "../../components/ModusButton";
|
|
6
|
+
|
|
7
|
+
export default function ButtonGroupDemoPage() {
|
|
8
|
+
const [selectedButtons, setSelectedButtons] = useState<string[]>([]);
|
|
9
|
+
|
|
10
|
+
return (
|
|
11
|
+
<DemoPage
|
|
12
|
+
title="Modus Button Group"
|
|
13
|
+
description="Button groups organize multiple buttons together with support for single or multiple selection modes. Use them for toolbar actions, segmented controls, and toggle groups."
|
|
14
|
+
>
|
|
15
|
+
<DemoExample
|
|
16
|
+
title="Button Variants"
|
|
17
|
+
description="Different visual styles for button groups."
|
|
18
|
+
>
|
|
19
|
+
<div className="flex flex-col gap-4">
|
|
20
|
+
<div className="flex flex-col gap-2">
|
|
21
|
+
<div className="text-sm text-muted-foreground">
|
|
22
|
+
Outlined (default)
|
|
23
|
+
</div>
|
|
24
|
+
<ModusButtonGroup variant="outlined" color="primary">
|
|
25
|
+
<ModusButton>Button 1</ModusButton>
|
|
26
|
+
<ModusButton>Button 2</ModusButton>
|
|
27
|
+
<ModusButton>Button 3</ModusButton>
|
|
28
|
+
</ModusButtonGroup>
|
|
29
|
+
</div>
|
|
30
|
+
<div className="flex flex-col gap-2">
|
|
31
|
+
<div className="text-sm text-muted-foreground">Filled</div>
|
|
32
|
+
<ModusButtonGroup variant="filled" color="primary">
|
|
33
|
+
<ModusButton>Button 1</ModusButton>
|
|
34
|
+
<ModusButton>Button 2</ModusButton>
|
|
35
|
+
<ModusButton>Button 3</ModusButton>
|
|
36
|
+
</ModusButtonGroup>
|
|
37
|
+
</div>
|
|
38
|
+
<div className="flex flex-col gap-2">
|
|
39
|
+
<div className="text-sm text-muted-foreground">Borderless</div>
|
|
40
|
+
<ModusButtonGroup variant="borderless" color="primary">
|
|
41
|
+
<ModusButton>Button 1</ModusButton>
|
|
42
|
+
<ModusButton>Button 2</ModusButton>
|
|
43
|
+
<ModusButton>Button 3</ModusButton>
|
|
44
|
+
</ModusButtonGroup>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</DemoExample>
|
|
48
|
+
|
|
49
|
+
<DemoExample
|
|
50
|
+
title="Button Colors"
|
|
51
|
+
description="Apply consistent colors across all buttons in the group."
|
|
52
|
+
>
|
|
53
|
+
<div className="flex flex-wrap gap-4">
|
|
54
|
+
<ModusButtonGroup variant="outlined" color="primary">
|
|
55
|
+
<ModusButton>Primary</ModusButton>
|
|
56
|
+
<ModusButton>Buttons</ModusButton>
|
|
57
|
+
</ModusButtonGroup>
|
|
58
|
+
<ModusButtonGroup variant="outlined" color="secondary">
|
|
59
|
+
<ModusButton>Secondary</ModusButton>
|
|
60
|
+
<ModusButton>Buttons</ModusButton>
|
|
61
|
+
</ModusButtonGroup>
|
|
62
|
+
<ModusButtonGroup variant="outlined" color="tertiary">
|
|
63
|
+
<ModusButton>Tertiary</ModusButton>
|
|
64
|
+
<ModusButton>Buttons</ModusButton>
|
|
65
|
+
</ModusButtonGroup>
|
|
66
|
+
<ModusButtonGroup variant="outlined" color="warning">
|
|
67
|
+
<ModusButton>Warning</ModusButton>
|
|
68
|
+
<ModusButton>Buttons</ModusButton>
|
|
69
|
+
</ModusButtonGroup>
|
|
70
|
+
<ModusButtonGroup variant="outlined" color="danger">
|
|
71
|
+
<ModusButton>Danger</ModusButton>
|
|
72
|
+
<ModusButton>Buttons</ModusButton>
|
|
73
|
+
</ModusButtonGroup>
|
|
74
|
+
</div>
|
|
75
|
+
</DemoExample>
|
|
76
|
+
|
|
77
|
+
<DemoExample
|
|
78
|
+
title="Orientation"
|
|
79
|
+
description="Button groups can be arranged horizontally or vertically."
|
|
80
|
+
>
|
|
81
|
+
<div className="flex flex-wrap gap-8">
|
|
82
|
+
<div className="flex flex-col gap-2">
|
|
83
|
+
<div className="text-sm text-muted-foreground">
|
|
84
|
+
Horizontal (default)
|
|
85
|
+
</div>
|
|
86
|
+
<ModusButtonGroup orientation="horizontal" variant="outlined">
|
|
87
|
+
<ModusButton>Option 1</ModusButton>
|
|
88
|
+
<ModusButton>Option 2</ModusButton>
|
|
89
|
+
<ModusButton>Option 3</ModusButton>
|
|
90
|
+
</ModusButtonGroup>
|
|
91
|
+
</div>
|
|
92
|
+
<div className="flex flex-col gap-2">
|
|
93
|
+
<div className="text-sm text-muted-foreground">Vertical</div>
|
|
94
|
+
<ModusButtonGroup orientation="vertical" variant="outlined">
|
|
95
|
+
<ModusButton>Option 1</ModusButton>
|
|
96
|
+
<ModusButton>Option 2</ModusButton>
|
|
97
|
+
<ModusButton>Option 3</ModusButton>
|
|
98
|
+
</ModusButtonGroup>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
</DemoExample>
|
|
102
|
+
|
|
103
|
+
<DemoExample
|
|
104
|
+
title="Single Selection (Radio-like)"
|
|
105
|
+
description="Only one button can be selected at a time, similar to radio buttons."
|
|
106
|
+
>
|
|
107
|
+
<ModusButtonGroup
|
|
108
|
+
selectionType="single"
|
|
109
|
+
variant="outlined"
|
|
110
|
+
color="primary"
|
|
111
|
+
>
|
|
112
|
+
<ModusButton pressed>Option A</ModusButton>
|
|
113
|
+
<ModusButton>Option B</ModusButton>
|
|
114
|
+
<ModusButton>Option C</ModusButton>
|
|
115
|
+
</ModusButtonGroup>
|
|
116
|
+
</DemoExample>
|
|
117
|
+
|
|
118
|
+
<DemoExample
|
|
119
|
+
title="Multiple Selection (Checkbox-like)"
|
|
120
|
+
description="Multiple buttons can be selected simultaneously, similar to checkboxes."
|
|
121
|
+
>
|
|
122
|
+
<div className="flex flex-col gap-4">
|
|
123
|
+
<ModusButtonGroup
|
|
124
|
+
selectionType="multiple"
|
|
125
|
+
variant="outlined"
|
|
126
|
+
color="primary"
|
|
127
|
+
onButtonSelectionChange={(e) => {
|
|
128
|
+
const buttons = e.detail.selectedButtons;
|
|
129
|
+
setSelectedButtons(
|
|
130
|
+
buttons.map((btn) => btn.textContent?.trim() || ""),
|
|
131
|
+
);
|
|
132
|
+
}}
|
|
133
|
+
>
|
|
134
|
+
<ModusButton pressed>Bold</ModusButton>
|
|
135
|
+
<ModusButton>Italic</ModusButton>
|
|
136
|
+
<ModusButton pressed>Underline</ModusButton>
|
|
137
|
+
</ModusButtonGroup>
|
|
138
|
+
<div className="text-sm text-muted-foreground">
|
|
139
|
+
Selected:{" "}
|
|
140
|
+
{selectedButtons.length > 0 ? selectedButtons.join(", ") : "None"}
|
|
141
|
+
</div>
|
|
142
|
+
</div>
|
|
143
|
+
</DemoExample>
|
|
144
|
+
|
|
145
|
+
<DemoExample
|
|
146
|
+
title="Icon-Only Buttons"
|
|
147
|
+
description="Button groups with icon-only buttons for compact toolbar actions."
|
|
148
|
+
>
|
|
149
|
+
<div className="flex flex-col gap-4">
|
|
150
|
+
<div className="flex flex-col gap-2">
|
|
151
|
+
<div className="text-sm text-muted-foreground">Text Alignment</div>
|
|
152
|
+
<ModusButtonGroup
|
|
153
|
+
selectionType="single"
|
|
154
|
+
variant="outlined"
|
|
155
|
+
color="primary"
|
|
156
|
+
>
|
|
157
|
+
<ModusButton
|
|
158
|
+
icon="align_left"
|
|
159
|
+
iconPosition="only"
|
|
160
|
+
ariaLabel="Align left"
|
|
161
|
+
pressed
|
|
162
|
+
/>
|
|
163
|
+
<ModusButton
|
|
164
|
+
icon="text_centered"
|
|
165
|
+
iconPosition="only"
|
|
166
|
+
ariaLabel="Align center"
|
|
167
|
+
/>
|
|
168
|
+
<ModusButton
|
|
169
|
+
icon="align_right"
|
|
170
|
+
iconPosition="only"
|
|
171
|
+
ariaLabel="Align right"
|
|
172
|
+
/>
|
|
173
|
+
</ModusButtonGroup>
|
|
174
|
+
</div>
|
|
175
|
+
<div className="flex flex-col gap-2">
|
|
176
|
+
<div className="text-sm text-muted-foreground">Text Formatting</div>
|
|
177
|
+
<ModusButtonGroup
|
|
178
|
+
selectionType="multiple"
|
|
179
|
+
variant="outlined"
|
|
180
|
+
color="secondary"
|
|
181
|
+
>
|
|
182
|
+
<ModusButton
|
|
183
|
+
icon="text_bold"
|
|
184
|
+
iconPosition="only"
|
|
185
|
+
ariaLabel="Bold"
|
|
186
|
+
/>
|
|
187
|
+
<ModusButton
|
|
188
|
+
icon="text_italic"
|
|
189
|
+
iconPosition="only"
|
|
190
|
+
ariaLabel="Italic"
|
|
191
|
+
/>
|
|
192
|
+
<ModusButton
|
|
193
|
+
icon="text_underlined"
|
|
194
|
+
iconPosition="only"
|
|
195
|
+
ariaLabel="Underline"
|
|
196
|
+
/>
|
|
197
|
+
</ModusButtonGroup>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
</DemoExample>
|
|
201
|
+
|
|
202
|
+
<DemoExample
|
|
203
|
+
title="Disabled State"
|
|
204
|
+
description="Disable all buttons in the group at once."
|
|
205
|
+
>
|
|
206
|
+
<ModusButtonGroup variant="outlined" color="primary" disabled>
|
|
207
|
+
<ModusButton>Disabled</ModusButton>
|
|
208
|
+
<ModusButton>Button</ModusButton>
|
|
209
|
+
<ModusButton>Group</ModusButton>
|
|
210
|
+
</ModusButtonGroup>
|
|
211
|
+
</DemoExample>
|
|
212
|
+
|
|
213
|
+
<DemoExample
|
|
214
|
+
title="Mixed Content"
|
|
215
|
+
description="Button groups can contain buttons with both text and icons."
|
|
216
|
+
>
|
|
217
|
+
<ModusButtonGroup variant="outlined" color="primary">
|
|
218
|
+
<ModusButton icon="save_disk" iconPosition="left">
|
|
219
|
+
Save
|
|
220
|
+
</ModusButton>
|
|
221
|
+
<ModusButton icon="download" iconPosition="left">
|
|
222
|
+
Download
|
|
223
|
+
</ModusButton>
|
|
224
|
+
<ModusButton icon="share" iconPosition="left">
|
|
225
|
+
Share
|
|
226
|
+
</ModusButton>
|
|
227
|
+
</ModusButtonGroup>
|
|
228
|
+
</DemoExample>
|
|
229
|
+
</DemoPage>
|
|
230
|
+
);
|
|
231
|
+
}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusButton from "../../components/ModusButton";
|
|
6
|
+
import ModusCard from "../../components/ModusCard";
|
|
7
|
+
|
|
8
|
+
export default function CardDemoPage() {
|
|
9
|
+
return (
|
|
10
|
+
<DemoPage
|
|
11
|
+
title="Modus Card"
|
|
12
|
+
description="Cards group related information into a contained surface. Keep each card focused on a single concept and align supporting actions to the bottom."
|
|
13
|
+
>
|
|
14
|
+
<DemoExample
|
|
15
|
+
title="Project summary"
|
|
16
|
+
description="Vertical cards are ideal for key metrics or spotlighting a single project."
|
|
17
|
+
>
|
|
18
|
+
<ModusCard
|
|
19
|
+
title={
|
|
20
|
+
<div className="text-xl font-semibold text-foreground">
|
|
21
|
+
Atlas Renewal
|
|
22
|
+
</div>
|
|
23
|
+
}
|
|
24
|
+
subtitle={
|
|
25
|
+
<div className="text-sm text-foreground-80">
|
|
26
|
+
Updated 2 hours ago
|
|
27
|
+
</div>
|
|
28
|
+
}
|
|
29
|
+
actions={
|
|
30
|
+
<div className="flex gap-2">
|
|
31
|
+
<ModusButton color="primary" size="sm">
|
|
32
|
+
Open project
|
|
33
|
+
</ModusButton>
|
|
34
|
+
<ModusButton variant="outlined" size="sm">
|
|
35
|
+
Share
|
|
36
|
+
</ModusButton>
|
|
37
|
+
</div>
|
|
38
|
+
}
|
|
39
|
+
>
|
|
40
|
+
<div className="flex flex-col gap-3 text-sm text-foreground-80">
|
|
41
|
+
<div>Next milestone: Validate customer insights</div>
|
|
42
|
+
<div>Owner: Priya Malhotra</div>
|
|
43
|
+
<div>Team: Research, Field Ops</div>
|
|
44
|
+
</div>
|
|
45
|
+
</ModusCard>
|
|
46
|
+
</DemoExample>
|
|
47
|
+
|
|
48
|
+
<DemoExample
|
|
49
|
+
title="Horizontal layout"
|
|
50
|
+
description="Use horizontal cards when imagery or a quick status pairs with copy."
|
|
51
|
+
>
|
|
52
|
+
<ModusCard
|
|
53
|
+
layout="horizontal"
|
|
54
|
+
padding="compact"
|
|
55
|
+
bordered
|
|
56
|
+
title={
|
|
57
|
+
<div className="text-lg font-medium text-foreground">Field kit</div>
|
|
58
|
+
}
|
|
59
|
+
subtitle={
|
|
60
|
+
<div className="text-sm text-foreground-80">
|
|
61
|
+
Inventory: 18 units available
|
|
62
|
+
</div>
|
|
63
|
+
}
|
|
64
|
+
actions={
|
|
65
|
+
<ModusButton color="primary" size="sm">
|
|
66
|
+
Reserve
|
|
67
|
+
</ModusButton>
|
|
68
|
+
}
|
|
69
|
+
>
|
|
70
|
+
<div className="text-sm text-foreground-80">
|
|
71
|
+
Includes GPS, survey equipment, and safety checklist. Recommended
|
|
72
|
+
for teams working on remote installs.
|
|
73
|
+
</div>
|
|
74
|
+
</ModusCard>
|
|
75
|
+
</DemoExample>
|
|
76
|
+
|
|
77
|
+
<DemoExample
|
|
78
|
+
title="Card with Header Image"
|
|
79
|
+
description="Add an image or figure in the header slot to provide visual context."
|
|
80
|
+
>
|
|
81
|
+
<ModusCard
|
|
82
|
+
layout="horizontal"
|
|
83
|
+
bordered
|
|
84
|
+
header={
|
|
85
|
+
<div className="w-full md:w-48 h-48 overflow-hidden">
|
|
86
|
+
<img
|
|
87
|
+
src="https://i.pravatar.cc/300?img=12"
|
|
88
|
+
alt="User avatar"
|
|
89
|
+
className="w-full h-full object-cover"
|
|
90
|
+
/>
|
|
91
|
+
</div>
|
|
92
|
+
}
|
|
93
|
+
title={
|
|
94
|
+
<div className="text-lg font-medium text-foreground">
|
|
95
|
+
Team Member
|
|
96
|
+
</div>
|
|
97
|
+
}
|
|
98
|
+
subtitle={
|
|
99
|
+
<div className="text-sm text-foreground-80">Senior Developer</div>
|
|
100
|
+
}
|
|
101
|
+
actions={
|
|
102
|
+
<ModusButton color="primary" size="sm">
|
|
103
|
+
Contact
|
|
104
|
+
</ModusButton>
|
|
105
|
+
}
|
|
106
|
+
>
|
|
107
|
+
<div className="text-sm text-foreground-80">
|
|
108
|
+
Specializes in frontend architecture and design systems. Available for
|
|
109
|
+
new projects starting next quarter.
|
|
110
|
+
</div>
|
|
111
|
+
</ModusCard>
|
|
112
|
+
</DemoExample>
|
|
113
|
+
|
|
114
|
+
<DemoExample
|
|
115
|
+
title="Background Figure Card"
|
|
116
|
+
description="Use background-figure to stretch header images across the entire card with overlaid text."
|
|
117
|
+
>
|
|
118
|
+
<ModusCard
|
|
119
|
+
backgroundFigure
|
|
120
|
+
header={
|
|
121
|
+
<div className="w-full h-64 overflow-hidden">
|
|
122
|
+
<img
|
|
123
|
+
src="https://picsum.photos/id/1045/600/400"
|
|
124
|
+
alt="Scenic view"
|
|
125
|
+
className="w-full h-full object-cover"
|
|
126
|
+
/>
|
|
127
|
+
</div>
|
|
128
|
+
}
|
|
129
|
+
title={
|
|
130
|
+
<div className="text-2xl font-semibold text-white [text-shadow:1px_1px_2px_rgba(0,0,0,0.8)]">
|
|
131
|
+
Featured Project
|
|
132
|
+
</div>
|
|
133
|
+
}
|
|
134
|
+
subtitle={
|
|
135
|
+
<div className="text-base text-white/80 [text-shadow:1px_1px_2px_rgba(0,0,0,0.8)]">
|
|
136
|
+
Launching Q2 2024
|
|
137
|
+
</div>
|
|
138
|
+
}
|
|
139
|
+
actions={
|
|
140
|
+
<ModusButton color="primary" size="sm">
|
|
141
|
+
Learn More
|
|
142
|
+
</ModusButton>
|
|
143
|
+
}
|
|
144
|
+
>
|
|
145
|
+
<div className="text-base text-white/80 [text-shadow:1px_1px_2px_rgba(0,0,0,0.8)]">
|
|
146
|
+
This project showcases innovative design patterns and modern user
|
|
147
|
+
experiences. Join us for the launch event.
|
|
148
|
+
</div>
|
|
149
|
+
</ModusCard>
|
|
150
|
+
</DemoExample>
|
|
151
|
+
|
|
152
|
+
<DemoExample
|
|
153
|
+
title="Card with Footer"
|
|
154
|
+
description="Use the footer slot for metadata, tags, or additional information outside the main content area."
|
|
155
|
+
>
|
|
156
|
+
<ModusCard
|
|
157
|
+
bordered
|
|
158
|
+
title={
|
|
159
|
+
<div className="text-xl font-semibold text-foreground">
|
|
160
|
+
Document Review
|
|
161
|
+
</div>
|
|
162
|
+
}
|
|
163
|
+
subtitle={
|
|
164
|
+
<div className="text-sm text-foreground-80">
|
|
165
|
+
Last updated: 3 days ago
|
|
166
|
+
</div>
|
|
167
|
+
}
|
|
168
|
+
actions={
|
|
169
|
+
<ModusButton variant="outlined" size="sm">
|
|
170
|
+
Edit
|
|
171
|
+
</ModusButton>
|
|
172
|
+
}
|
|
173
|
+
footer={
|
|
174
|
+
<div className="flex items-center justify-between pt-4 border-t border-border">
|
|
175
|
+
<div className="flex gap-2">
|
|
176
|
+
<div className="px-2 py-1 text-xs rounded bg-muted text-muted-foreground">
|
|
177
|
+
Draft
|
|
178
|
+
</div>
|
|
179
|
+
<div className="px-2 py-1 text-xs rounded bg-muted text-muted-foreground">
|
|
180
|
+
Review
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
<div className="text-xs text-muted-foreground">3 reviewers</div>
|
|
184
|
+
</div>
|
|
185
|
+
}
|
|
186
|
+
>
|
|
187
|
+
<div className="text-sm text-foreground-80">
|
|
188
|
+
This document contains important project specifications and
|
|
189
|
+
requirements. Please review and provide feedback by end of week.
|
|
190
|
+
</div>
|
|
191
|
+
</ModusCard>
|
|
192
|
+
</DemoExample>
|
|
193
|
+
|
|
194
|
+
<DemoExample
|
|
195
|
+
title="Compact Padding"
|
|
196
|
+
description="Use compact padding for dense dashboards or when space is limited."
|
|
197
|
+
>
|
|
198
|
+
<div className="grid grid-cols-1 md:grid-cols-3 gap-4">
|
|
199
|
+
<ModusCard
|
|
200
|
+
padding="compact"
|
|
201
|
+
bordered
|
|
202
|
+
title={
|
|
203
|
+
<div className="text-base font-medium text-foreground">
|
|
204
|
+
Active Users
|
|
205
|
+
</div>
|
|
206
|
+
}
|
|
207
|
+
>
|
|
208
|
+
<div className="text-2xl font-bold text-foreground">1,234</div>
|
|
209
|
+
<div className="text-xs text-muted-foreground">
|
|
210
|
+
+12% from last month
|
|
211
|
+
</div>
|
|
212
|
+
</ModusCard>
|
|
213
|
+
<ModusCard
|
|
214
|
+
padding="compact"
|
|
215
|
+
bordered
|
|
216
|
+
title={
|
|
217
|
+
<div className="text-base font-medium text-foreground">
|
|
218
|
+
Revenue
|
|
219
|
+
</div>
|
|
220
|
+
}
|
|
221
|
+
>
|
|
222
|
+
<div className="text-2xl font-bold text-foreground">$45.6K</div>
|
|
223
|
+
<div className="text-xs text-muted-foreground">
|
|
224
|
+
+8% from last month
|
|
225
|
+
</div>
|
|
226
|
+
</ModusCard>
|
|
227
|
+
<ModusCard
|
|
228
|
+
padding="compact"
|
|
229
|
+
bordered
|
|
230
|
+
title={
|
|
231
|
+
<div className="text-base font-medium text-foreground">Tasks</div>
|
|
232
|
+
}
|
|
233
|
+
>
|
|
234
|
+
<div className="text-2xl font-bold text-foreground">89</div>
|
|
235
|
+
<div className="text-xs text-muted-foreground">12 pending review</div>
|
|
236
|
+
</ModusCard>
|
|
237
|
+
</div>
|
|
238
|
+
</DemoExample>
|
|
239
|
+
</DemoPage>
|
|
240
|
+
);
|
|
241
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusCheckbox from "../../components/ModusCheckbox";
|
|
6
|
+
|
|
7
|
+
export default function CheckboxDemoPage() {
|
|
8
|
+
return (
|
|
9
|
+
<DemoPage
|
|
10
|
+
title="Modus Checkbox"
|
|
11
|
+
description="Checkboxes allow users to select one or more options from a list. Use checkboxes for multiple selections and when users need to toggle individual options."
|
|
12
|
+
>
|
|
13
|
+
<DemoExample
|
|
14
|
+
title="Checkbox States"
|
|
15
|
+
description="Different checkbox states: unchecked, checked, and indeterminate."
|
|
16
|
+
>
|
|
17
|
+
<div className="flex flex-col gap-4">
|
|
18
|
+
<ModusCheckbox label="Unchecked" value={false} />
|
|
19
|
+
<ModusCheckbox label="Checked" value={true} />
|
|
20
|
+
<ModusCheckbox label="Indeterminate" indeterminate={true} />
|
|
21
|
+
</div>
|
|
22
|
+
</DemoExample>
|
|
23
|
+
|
|
24
|
+
<DemoExample
|
|
25
|
+
title="Checkbox Sizes"
|
|
26
|
+
description="Different sizes for various contexts and visual hierarchy."
|
|
27
|
+
>
|
|
28
|
+
<div className="flex flex-col gap-4">
|
|
29
|
+
<ModusCheckbox label="Small checkbox" size="sm" value={true} />
|
|
30
|
+
<ModusCheckbox
|
|
31
|
+
label="Medium checkbox (default)"
|
|
32
|
+
size="md"
|
|
33
|
+
value={true}
|
|
34
|
+
/>
|
|
35
|
+
<ModusCheckbox label="Large checkbox" size="lg" value={true} />
|
|
36
|
+
</div>
|
|
37
|
+
</DemoExample>
|
|
38
|
+
|
|
39
|
+
<DemoExample
|
|
40
|
+
title="Disabled State"
|
|
41
|
+
description="Checkboxes in disabled state for unavailable options."
|
|
42
|
+
>
|
|
43
|
+
<div className="flex flex-col gap-4">
|
|
44
|
+
<ModusCheckbox
|
|
45
|
+
label="Disabled unchecked"
|
|
46
|
+
disabled={true}
|
|
47
|
+
value={false}
|
|
48
|
+
/>
|
|
49
|
+
<ModusCheckbox
|
|
50
|
+
label="Disabled checked"
|
|
51
|
+
disabled={true}
|
|
52
|
+
value={true}
|
|
53
|
+
/>
|
|
54
|
+
<ModusCheckbox
|
|
55
|
+
label="Disabled indeterminate"
|
|
56
|
+
disabled={true}
|
|
57
|
+
indeterminate={true}
|
|
58
|
+
/>
|
|
59
|
+
</div>
|
|
60
|
+
</DemoExample>
|
|
61
|
+
|
|
62
|
+
<DemoExample
|
|
63
|
+
title="Required Checkbox"
|
|
64
|
+
description="Mark checkboxes as required for form validation."
|
|
65
|
+
>
|
|
66
|
+
<div className="flex flex-col gap-4">
|
|
67
|
+
<ModusCheckbox
|
|
68
|
+
label="I agree to the terms (required)"
|
|
69
|
+
required={true}
|
|
70
|
+
/>
|
|
71
|
+
<ModusCheckbox
|
|
72
|
+
label="Confirm email subscription (required)"
|
|
73
|
+
required={true}
|
|
74
|
+
/>
|
|
75
|
+
</div>
|
|
76
|
+
</DemoExample>
|
|
77
|
+
</DemoPage>
|
|
78
|
+
);
|
|
79
|
+
}
|