@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,197 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import DemoExample from "../../components/DemoExample";
|
|
5
|
+
import DemoPage from "../../components/DemoPage";
|
|
6
|
+
import ModusChip from "../../components/ModusChip";
|
|
7
|
+
import ModusButton from "../../components/ModusButton";
|
|
8
|
+
|
|
9
|
+
interface Tag {
|
|
10
|
+
id: string;
|
|
11
|
+
label: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export default function ChipDemoPage() {
|
|
15
|
+
// Removable tags demo state
|
|
16
|
+
const [activeTags, setActiveTags] = useState<Tag[]>([
|
|
17
|
+
{ id: "urgent", label: "Urgent" },
|
|
18
|
+
{ id: "review", label: "Needs Review" },
|
|
19
|
+
{ id: "approved", label: "Approved" },
|
|
20
|
+
{ id: "archived", label: "Archived" },
|
|
21
|
+
]);
|
|
22
|
+
const [removedTags, setRemovedTags] = useState<Tag[]>([]);
|
|
23
|
+
|
|
24
|
+
const removeTag = (tagId: string) => {
|
|
25
|
+
const tag = activeTags.find((t) => t.id === tagId);
|
|
26
|
+
if (tag) {
|
|
27
|
+
setActiveTags((tags) => tags.filter((t) => t.id !== tagId));
|
|
28
|
+
setRemovedTags((tags) => [...tags, tag]);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const restoreTags = () => {
|
|
33
|
+
setActiveTags((tags) => [...tags, ...removedTags]);
|
|
34
|
+
setRemovedTags([]);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<DemoPage
|
|
39
|
+
title="Modus Chip"
|
|
40
|
+
description="Compact visual elements for tags, selections, or status pills. Chips support filled/outline variants, three sizes, active/error/disabled states, and optional remove buttons."
|
|
41
|
+
>
|
|
42
|
+
<DemoExample
|
|
43
|
+
title="Removable Tags"
|
|
44
|
+
description="Chips with remove buttons for deletable items like tags, filters, or selections."
|
|
45
|
+
>
|
|
46
|
+
<div className="p-6 rounded-lg bg-card border-default">
|
|
47
|
+
<div className="text-base font-semibold mb-2 text-foreground">
|
|
48
|
+
Applied Tags
|
|
49
|
+
</div>
|
|
50
|
+
<div className="text-sm text-muted-foreground mb-4">
|
|
51
|
+
Click the X to remove tags
|
|
52
|
+
</div>
|
|
53
|
+
{activeTags.length > 0 ? (
|
|
54
|
+
<div className="flex flex-wrap gap-3">
|
|
55
|
+
{activeTags.map((tag) => (
|
|
56
|
+
<ModusChip
|
|
57
|
+
key={tag.id}
|
|
58
|
+
label={tag.label}
|
|
59
|
+
showRemove
|
|
60
|
+
onChipRemove={() => removeTag(tag.id)}
|
|
61
|
+
/>
|
|
62
|
+
))}
|
|
63
|
+
</div>
|
|
64
|
+
) : (
|
|
65
|
+
<div className="text-sm text-muted-foreground italic">
|
|
66
|
+
No tags applied
|
|
67
|
+
</div>
|
|
68
|
+
)}
|
|
69
|
+
{removedTags.length > 0 && (
|
|
70
|
+
<div className="mt-4 pt-4 border-t border-default flex items-center gap-3">
|
|
71
|
+
<div className="text-sm text-muted-foreground">Removed:</div>
|
|
72
|
+
{removedTags.map((tag) => (
|
|
73
|
+
<ModusChip key={tag.id} label={tag.label} disabled size="sm" />
|
|
74
|
+
))}
|
|
75
|
+
<ModusButton
|
|
76
|
+
color="primary"
|
|
77
|
+
variant="borderless"
|
|
78
|
+
size="sm"
|
|
79
|
+
onButtonClick={restoreTags}
|
|
80
|
+
className="ml-2"
|
|
81
|
+
>
|
|
82
|
+
Restore all
|
|
83
|
+
</ModusButton>
|
|
84
|
+
</div>
|
|
85
|
+
)}
|
|
86
|
+
</div>
|
|
87
|
+
</DemoExample>
|
|
88
|
+
|
|
89
|
+
<DemoExample
|
|
90
|
+
title="Chip Variants"
|
|
91
|
+
description="Two visual styles: filled (solid background) and outline (transparent with border)."
|
|
92
|
+
>
|
|
93
|
+
<div className="flex flex-col gap-6">
|
|
94
|
+
<div>
|
|
95
|
+
<div className="text-sm font-medium mb-3 text-muted-foreground">
|
|
96
|
+
Filled (Default)
|
|
97
|
+
</div>
|
|
98
|
+
<div className="flex flex-wrap gap-3">
|
|
99
|
+
<ModusChip label="Default" variant="filled" />
|
|
100
|
+
<ModusChip label="Active" variant="filled" active />
|
|
101
|
+
<ModusChip label="Removable" variant="filled" showRemove />
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
<div>
|
|
105
|
+
<div className="text-sm font-medium mb-3 text-muted-foreground">
|
|
106
|
+
Outline
|
|
107
|
+
</div>
|
|
108
|
+
<div className="flex flex-wrap gap-3">
|
|
109
|
+
<ModusChip label="Default" variant="outline" />
|
|
110
|
+
<ModusChip label="Active" variant="outline" active />
|
|
111
|
+
<ModusChip label="Removable" variant="outline" showRemove />
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
</DemoExample>
|
|
116
|
+
|
|
117
|
+
<DemoExample
|
|
118
|
+
title="Chip Sizes"
|
|
119
|
+
description="Three size options: sm (20px), md (24px), and lg (28px) for different contexts."
|
|
120
|
+
>
|
|
121
|
+
<div className="flex flex-wrap items-center gap-4">
|
|
122
|
+
<ModusChip label="Small" size="sm" />
|
|
123
|
+
<ModusChip label="Medium" size="md" />
|
|
124
|
+
<ModusChip label="Large" size="lg" />
|
|
125
|
+
</div>
|
|
126
|
+
<div className="flex flex-wrap items-center gap-4 mt-4">
|
|
127
|
+
<ModusChip label="Small" size="sm" variant="outline" active />
|
|
128
|
+
<ModusChip label="Medium" size="md" variant="outline" active />
|
|
129
|
+
<ModusChip label="Large" size="lg" variant="outline" active />
|
|
130
|
+
</div>
|
|
131
|
+
</DemoExample>
|
|
132
|
+
|
|
133
|
+
<DemoExample
|
|
134
|
+
title="States"
|
|
135
|
+
description="Active state for selections, disabled state for unavailable options, and error state for validation."
|
|
136
|
+
>
|
|
137
|
+
<div className="flex flex-col gap-6">
|
|
138
|
+
<div>
|
|
139
|
+
<div className="text-sm font-medium mb-3 text-muted-foreground">
|
|
140
|
+
Active State
|
|
141
|
+
</div>
|
|
142
|
+
<div className="flex flex-wrap gap-3">
|
|
143
|
+
<ModusChip label="Selected" active />
|
|
144
|
+
<ModusChip label="Pressed" active variant="outline" />
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
<div>
|
|
148
|
+
<div className="text-sm font-medium mb-3 text-muted-foreground">
|
|
149
|
+
Disabled State
|
|
150
|
+
</div>
|
|
151
|
+
<div className="flex flex-wrap gap-3">
|
|
152
|
+
<ModusChip label="Disabled" disabled />
|
|
153
|
+
<ModusChip label="Disabled Outline" disabled variant="outline" />
|
|
154
|
+
<ModusChip label="Disabled Active" disabled active />
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
<div>
|
|
158
|
+
<div className="text-sm font-medium mb-3 text-muted-foreground">
|
|
159
|
+
Error State
|
|
160
|
+
</div>
|
|
161
|
+
<div className="flex flex-wrap gap-3">
|
|
162
|
+
<ModusChip label="Invalid" hasError />
|
|
163
|
+
<ModusChip label="Error" hasError variant="outline" />
|
|
164
|
+
<ModusChip label="Remove Error" hasError showRemove />
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
</DemoExample>
|
|
169
|
+
|
|
170
|
+
<DemoExample
|
|
171
|
+
title="Status Pills"
|
|
172
|
+
description="Use chips as status indicators with appropriate styling."
|
|
173
|
+
>
|
|
174
|
+
<div className="flex flex-col gap-4">
|
|
175
|
+
<div className="flex items-center gap-4">
|
|
176
|
+
<div className="w-24 text-sm text-muted-foreground">
|
|
177
|
+
Order Status:
|
|
178
|
+
</div>
|
|
179
|
+
<ModusChip label="Pending" variant="outline" />
|
|
180
|
+
</div>
|
|
181
|
+
<div className="flex items-center gap-4">
|
|
182
|
+
<div className="w-24 text-sm text-muted-foreground">Active:</div>
|
|
183
|
+
<ModusChip label="In Progress" active />
|
|
184
|
+
</div>
|
|
185
|
+
<div className="flex items-center gap-4">
|
|
186
|
+
<div className="w-24 text-sm text-muted-foreground">Completed:</div>
|
|
187
|
+
<ModusChip label="Done" variant="filled" />
|
|
188
|
+
</div>
|
|
189
|
+
<div className="flex items-center gap-4">
|
|
190
|
+
<div className="w-24 text-sm text-muted-foreground">Error:</div>
|
|
191
|
+
<ModusChip label="Failed" hasError />
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
</DemoExample>
|
|
195
|
+
</DemoPage>
|
|
196
|
+
);
|
|
197
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState, useMemo } from "react";
|
|
4
|
+
import DemoExample from "../../components/DemoExample";
|
|
5
|
+
import DemoPage from "../../components/DemoPage";
|
|
6
|
+
import ModusDate from "../../components/ModusDate";
|
|
7
|
+
|
|
8
|
+
export default function DateDemoPage() {
|
|
9
|
+
// Basic date input state
|
|
10
|
+
const [selectedDate, setSelectedDate] = useState<string>("");
|
|
11
|
+
|
|
12
|
+
// Date constraints state
|
|
13
|
+
const [startDate, setStartDate] = useState<string>("");
|
|
14
|
+
const [endDate, setEndDate] = useState<string>("");
|
|
15
|
+
|
|
16
|
+
// Calculate min and max dates
|
|
17
|
+
const minDate = useMemo(() => {
|
|
18
|
+
const today = new Date();
|
|
19
|
+
return today.toISOString().split("T")[0];
|
|
20
|
+
}, []);
|
|
21
|
+
|
|
22
|
+
const maxDate = useMemo(() => {
|
|
23
|
+
const oneYearFromNow = new Date();
|
|
24
|
+
oneYearFromNow.setFullYear(oneYearFromNow.getFullYear() + 1);
|
|
25
|
+
return oneYearFromNow.toISOString().split("T")[0];
|
|
26
|
+
}, []);
|
|
27
|
+
|
|
28
|
+
const handleDateChange = (event: CustomEvent<InputEvent>) => {
|
|
29
|
+
const target = event.detail.target as HTMLInputElement;
|
|
30
|
+
setSelectedDate(target.value);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const handleStartDateChange = (event: CustomEvent<InputEvent>) => {
|
|
34
|
+
const target = event.detail.target as HTMLInputElement;
|
|
35
|
+
setStartDate(target.value);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const handleEndDateChange = (event: CustomEvent<InputEvent>) => {
|
|
39
|
+
const target = event.detail.target as HTMLInputElement;
|
|
40
|
+
setEndDate(target.value);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
return (
|
|
44
|
+
<DemoPage
|
|
45
|
+
title="Modus Date"
|
|
46
|
+
description="Date inputs allow users to select dates from a calendar picker or enter dates manually. Use date inputs for birth dates, appointment scheduling, date ranges, and any scenario requiring date selection."
|
|
47
|
+
>
|
|
48
|
+
<DemoExample
|
|
49
|
+
title="Basic Date Input"
|
|
50
|
+
description="Simple date input with label for date selection."
|
|
51
|
+
>
|
|
52
|
+
<div className="flex flex-col gap-4">
|
|
53
|
+
<ModusDate
|
|
54
|
+
label="Select Date"
|
|
55
|
+
value={selectedDate}
|
|
56
|
+
onInputChange={handleDateChange}
|
|
57
|
+
/>
|
|
58
|
+
{selectedDate && (
|
|
59
|
+
<div className="mt-4 p-4 rounded-lg bg-muted text-muted-foreground">
|
|
60
|
+
<div className="font-semibold mb-2">Selected Date:</div>
|
|
61
|
+
<div className="text-sm">{selectedDate}</div>
|
|
62
|
+
</div>
|
|
63
|
+
)}
|
|
64
|
+
</div>
|
|
65
|
+
</DemoExample>
|
|
66
|
+
|
|
67
|
+
<DemoExample
|
|
68
|
+
title="Date Sizes"
|
|
69
|
+
description="Different sizes for various contexts and visual hierarchy."
|
|
70
|
+
>
|
|
71
|
+
<div className="flex flex-col gap-4">
|
|
72
|
+
<ModusDate label="Small Date Input" size="sm" />
|
|
73
|
+
<ModusDate label="Medium Date Input (Default)" size="md" />
|
|
74
|
+
<ModusDate label="Large Date Input" size="lg" />
|
|
75
|
+
</div>
|
|
76
|
+
</DemoExample>
|
|
77
|
+
|
|
78
|
+
<DemoExample
|
|
79
|
+
title="Date Formats"
|
|
80
|
+
description="Different date format options for various locales and preferences."
|
|
81
|
+
>
|
|
82
|
+
<div className="flex flex-col gap-4">
|
|
83
|
+
<ModusDate label="YYYY-MM-DD Format" format="yyyy-mm-dd" />
|
|
84
|
+
<ModusDate label="DD-MM-YYYY Format" format="dd-mm-yyyy" />
|
|
85
|
+
<ModusDate label="YYYY/MM/DD Format" format="yyyy/mm/dd" />
|
|
86
|
+
<ModusDate label="DD/MM/YYYY Format" format="dd/mm/yyyy" />
|
|
87
|
+
<ModusDate label="MMM DD, YYYY Format" format="MMM DD, YYYY" />
|
|
88
|
+
</div>
|
|
89
|
+
</DemoExample>
|
|
90
|
+
|
|
91
|
+
<DemoExample
|
|
92
|
+
title="Date Constraints"
|
|
93
|
+
description="Set minimum and maximum dates to restrict date selection."
|
|
94
|
+
>
|
|
95
|
+
<div className="flex flex-col gap-4">
|
|
96
|
+
<ModusDate
|
|
97
|
+
label="Start Date (Min: Today)"
|
|
98
|
+
min={minDate}
|
|
99
|
+
value={startDate}
|
|
100
|
+
onInputChange={handleStartDateChange}
|
|
101
|
+
/>
|
|
102
|
+
<ModusDate
|
|
103
|
+
label="End Date (Max: 1 Year from Start)"
|
|
104
|
+
min={startDate || minDate}
|
|
105
|
+
max={maxDate}
|
|
106
|
+
value={endDate}
|
|
107
|
+
onInputChange={handleEndDateChange}
|
|
108
|
+
/>
|
|
109
|
+
</div>
|
|
110
|
+
</DemoExample>
|
|
111
|
+
|
|
112
|
+
<DemoExample
|
|
113
|
+
title="Feedback Messages"
|
|
114
|
+
description="Display validation feedback with different severity levels."
|
|
115
|
+
>
|
|
116
|
+
<div className="flex flex-col gap-4">
|
|
117
|
+
<ModusDate
|
|
118
|
+
label="Date with Success Feedback"
|
|
119
|
+
feedback={{
|
|
120
|
+
level: "success",
|
|
121
|
+
message: "Date is valid",
|
|
122
|
+
}}
|
|
123
|
+
/>
|
|
124
|
+
<ModusDate
|
|
125
|
+
label="Date with Warning Feedback"
|
|
126
|
+
feedback={{
|
|
127
|
+
level: "warning",
|
|
128
|
+
message: "Please verify the date",
|
|
129
|
+
}}
|
|
130
|
+
/>
|
|
131
|
+
<ModusDate
|
|
132
|
+
label="Date with Error Feedback"
|
|
133
|
+
feedback={{
|
|
134
|
+
level: "error",
|
|
135
|
+
message: "Invalid date format",
|
|
136
|
+
}}
|
|
137
|
+
/>
|
|
138
|
+
<ModusDate
|
|
139
|
+
label="Date with Info Feedback"
|
|
140
|
+
feedback={{
|
|
141
|
+
level: "info",
|
|
142
|
+
message: "Select a date within the next 30 days",
|
|
143
|
+
}}
|
|
144
|
+
/>
|
|
145
|
+
</div>
|
|
146
|
+
</DemoExample>
|
|
147
|
+
|
|
148
|
+
<DemoExample
|
|
149
|
+
title="Disabled and Read-Only States"
|
|
150
|
+
description="Date inputs in disabled and read-only states."
|
|
151
|
+
>
|
|
152
|
+
<div className="flex flex-col gap-4">
|
|
153
|
+
<ModusDate label="Disabled Date Input" disabled value="2024-01-15" />
|
|
154
|
+
<ModusDate label="Read-Only Date Input" readOnly value="2024-06-20" />
|
|
155
|
+
</div>
|
|
156
|
+
</DemoExample>
|
|
157
|
+
|
|
158
|
+
<DemoExample
|
|
159
|
+
title="Required Field"
|
|
160
|
+
description="Mark date inputs as required for form validation."
|
|
161
|
+
>
|
|
162
|
+
<div className="flex flex-col gap-4">
|
|
163
|
+
<ModusDate label="Birth Date (Required)" required />
|
|
164
|
+
<ModusDate label="Appointment Date (Required)" required />
|
|
165
|
+
</div>
|
|
166
|
+
</DemoExample>
|
|
167
|
+
|
|
168
|
+
<DemoExample
|
|
169
|
+
title="Bordered and Borderless"
|
|
170
|
+
description="Date inputs with and without borders."
|
|
171
|
+
>
|
|
172
|
+
<div className="flex flex-col gap-4">
|
|
173
|
+
<ModusDate label="Bordered Date Input (Default)" bordered />
|
|
174
|
+
<ModusDate label="Borderless Date Input" bordered={false} />
|
|
175
|
+
</div>
|
|
176
|
+
</DemoExample>
|
|
177
|
+
</DemoPage>
|
|
178
|
+
);
|
|
179
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusDropdownMenu from "../../components/ModusDropdownMenu";
|
|
6
|
+
import type { MenuItem } from "../../components/ModusMenu";
|
|
7
|
+
|
|
8
|
+
// Menu items for basic examples
|
|
9
|
+
const basicMenuItems: MenuItem[] = [
|
|
10
|
+
{ label: "Option 1", value: "option1" },
|
|
11
|
+
{ label: "Option 2", value: "option2" },
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
const actionMenuItems: MenuItem[] = [
|
|
15
|
+
{ label: "Action 1", value: "action1" },
|
|
16
|
+
{ label: "Action 2", value: "action2" },
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
const itemMenuItems: MenuItem[] = [
|
|
20
|
+
{ label: "Item 1", value: "item1" },
|
|
21
|
+
{ label: "Item 2", value: "item2" },
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
export default function DropdownDemoPage() {
|
|
25
|
+
return (
|
|
26
|
+
<DemoPage
|
|
27
|
+
title="Modus Dropdown Menu"
|
|
28
|
+
description="Dropdown menus provide a compact way to display multiple actions or options in a menu that opens on demand."
|
|
29
|
+
>
|
|
30
|
+
{/* Button Colors */}
|
|
31
|
+
<DemoExample
|
|
32
|
+
title="Button Colors"
|
|
33
|
+
description="Dropdown menus with different button colors."
|
|
34
|
+
>
|
|
35
|
+
<div className="flex flex-wrap gap-4">
|
|
36
|
+
<ModusDropdownMenu
|
|
37
|
+
buttonColor="primary"
|
|
38
|
+
menuItems={basicMenuItems}
|
|
39
|
+
buttonContent={<div>Primary</div>}
|
|
40
|
+
/>
|
|
41
|
+
<ModusDropdownMenu
|
|
42
|
+
buttonColor="secondary"
|
|
43
|
+
menuItems={basicMenuItems}
|
|
44
|
+
buttonContent={<div>Secondary</div>}
|
|
45
|
+
/>
|
|
46
|
+
<ModusDropdownMenu
|
|
47
|
+
buttonColor="tertiary"
|
|
48
|
+
menuItems={basicMenuItems}
|
|
49
|
+
buttonContent={<div>Tertiary</div>}
|
|
50
|
+
/>
|
|
51
|
+
</div>
|
|
52
|
+
</DemoExample>
|
|
53
|
+
|
|
54
|
+
{/* Button Variants */}
|
|
55
|
+
<DemoExample
|
|
56
|
+
title="Button Variants"
|
|
57
|
+
description="Dropdown menus with different button visual styles."
|
|
58
|
+
>
|
|
59
|
+
<div className="flex flex-wrap gap-4">
|
|
60
|
+
<ModusDropdownMenu
|
|
61
|
+
buttonVariant="filled"
|
|
62
|
+
menuItems={actionMenuItems}
|
|
63
|
+
buttonContent={<div>Filled</div>}
|
|
64
|
+
/>
|
|
65
|
+
<ModusDropdownMenu
|
|
66
|
+
buttonVariant="outlined"
|
|
67
|
+
menuItems={actionMenuItems}
|
|
68
|
+
buttonContent={<div>Outlined</div>}
|
|
69
|
+
/>
|
|
70
|
+
<ModusDropdownMenu
|
|
71
|
+
buttonVariant="borderless"
|
|
72
|
+
menuItems={actionMenuItems}
|
|
73
|
+
buttonContent={<div>Borderless</div>}
|
|
74
|
+
/>
|
|
75
|
+
</div>
|
|
76
|
+
</DemoExample>
|
|
77
|
+
|
|
78
|
+
{/* Custom Button Content */}
|
|
79
|
+
<DemoExample
|
|
80
|
+
title="Custom Button Content"
|
|
81
|
+
description="Dropdown menus with custom button content including icons."
|
|
82
|
+
>
|
|
83
|
+
<div className="flex flex-wrap gap-4">
|
|
84
|
+
<ModusDropdownMenu
|
|
85
|
+
menuItems={[
|
|
86
|
+
{ label: "Preferences", value: "prefs" },
|
|
87
|
+
{ label: "Account", value: "account" },
|
|
88
|
+
]}
|
|
89
|
+
buttonContent={
|
|
90
|
+
<div className="flex items-center gap-2">
|
|
91
|
+
<i className="modus-icons text-lg">settings</i>
|
|
92
|
+
<div>Settings</div>
|
|
93
|
+
</div>
|
|
94
|
+
}
|
|
95
|
+
/>
|
|
96
|
+
<ModusDropdownMenu
|
|
97
|
+
menuItems={[
|
|
98
|
+
{ label: "Profile", value: "profile" },
|
|
99
|
+
{ label: "Settings", value: "settings" },
|
|
100
|
+
{ label: "Log out", value: "logout" },
|
|
101
|
+
]}
|
|
102
|
+
buttonContent={
|
|
103
|
+
<div className="flex items-center gap-2">
|
|
104
|
+
<i className="modus-icons text-lg">user_account</i>
|
|
105
|
+
<div>User Menu</div>
|
|
106
|
+
<i className="modus-icons text-sm">expand_more</i>
|
|
107
|
+
</div>
|
|
108
|
+
}
|
|
109
|
+
/>
|
|
110
|
+
</div>
|
|
111
|
+
</DemoExample>
|
|
112
|
+
|
|
113
|
+
{/* Menu Placement */}
|
|
114
|
+
<DemoExample
|
|
115
|
+
title="Menu Placement"
|
|
116
|
+
description="Different menu placement options relative to the button."
|
|
117
|
+
>
|
|
118
|
+
<div className="flex flex-wrap gap-4">
|
|
119
|
+
<ModusDropdownMenu
|
|
120
|
+
menuPlacement="bottom-start"
|
|
121
|
+
menuItems={itemMenuItems}
|
|
122
|
+
buttonContent={<div>Bottom Start</div>}
|
|
123
|
+
/>
|
|
124
|
+
<ModusDropdownMenu
|
|
125
|
+
menuPlacement="bottom-end"
|
|
126
|
+
menuItems={itemMenuItems}
|
|
127
|
+
buttonContent={<div>Bottom End</div>}
|
|
128
|
+
/>
|
|
129
|
+
<ModusDropdownMenu
|
|
130
|
+
menuPlacement="top-start"
|
|
131
|
+
menuItems={itemMenuItems}
|
|
132
|
+
buttonContent={<div>Top Start</div>}
|
|
133
|
+
/>
|
|
134
|
+
</div>
|
|
135
|
+
</DemoExample>
|
|
136
|
+
|
|
137
|
+
{/* Disabled State */}
|
|
138
|
+
<DemoExample
|
|
139
|
+
title="Disabled State"
|
|
140
|
+
description="Dropdown menu in disabled state."
|
|
141
|
+
>
|
|
142
|
+
<ModusDropdownMenu
|
|
143
|
+
disabled={true}
|
|
144
|
+
menuItems={itemMenuItems}
|
|
145
|
+
buttonContent={<div>Disabled Menu</div>}
|
|
146
|
+
/>
|
|
147
|
+
</DemoExample>
|
|
148
|
+
</DemoPage>
|
|
149
|
+
);
|
|
150
|
+
}
|