@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,49 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusButton from "../../components/ModusButton";
|
|
6
|
+
import ModusToolbar from "../../components/ModusToolbar";
|
|
7
|
+
|
|
8
|
+
export default function ToolbarDemoPage() {
|
|
9
|
+
return (
|
|
10
|
+
<DemoPage
|
|
11
|
+
title="Modus Toolbar"
|
|
12
|
+
description="Toolbars organize actions for a focused context. Keep primary commands on the left, secondary options on the right, and maintain consistent spacing."
|
|
13
|
+
>
|
|
14
|
+
<DemoExample
|
|
15
|
+
title="Document toolbar"
|
|
16
|
+
description="Pair icon buttons with text labels when space allows."
|
|
17
|
+
>
|
|
18
|
+
<ModusToolbar
|
|
19
|
+
startContent={
|
|
20
|
+
<div className="flex items-center gap-3 text-sm text-foreground">
|
|
21
|
+
<i className="modus-icons text-primary">pencil</i>
|
|
22
|
+
<div className="font-medium">Proposal draft</div>
|
|
23
|
+
</div>
|
|
24
|
+
}
|
|
25
|
+
centerContent={
|
|
26
|
+
<div className="flex gap-2">
|
|
27
|
+
<ModusButton size="sm" icon="undo" iconPosition="left">
|
|
28
|
+
Undo
|
|
29
|
+
</ModusButton>
|
|
30
|
+
<ModusButton size="sm" icon="redo" iconPosition="left">
|
|
31
|
+
Redo
|
|
32
|
+
</ModusButton>
|
|
33
|
+
</div>
|
|
34
|
+
}
|
|
35
|
+
endContent={
|
|
36
|
+
<div className="flex gap-2">
|
|
37
|
+
<ModusButton size="sm" variant="borderless">
|
|
38
|
+
Share
|
|
39
|
+
</ModusButton>
|
|
40
|
+
<ModusButton size="sm" color="primary">
|
|
41
|
+
Publish
|
|
42
|
+
</ModusButton>
|
|
43
|
+
</div>
|
|
44
|
+
}
|
|
45
|
+
/>
|
|
46
|
+
</DemoExample>
|
|
47
|
+
</DemoPage>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusTooltip from "../../components/ModusTooltip";
|
|
6
|
+
import ModusButton from "../../components/ModusButton";
|
|
7
|
+
|
|
8
|
+
export default function TooltipDemoPage() {
|
|
9
|
+
return (
|
|
10
|
+
<DemoPage
|
|
11
|
+
title="Modus Tooltip"
|
|
12
|
+
description="Tooltip components provide contextual information when users hover over or focus on elements. Use tooltips to provide helpful hints, additional context, or brief explanations."
|
|
13
|
+
>
|
|
14
|
+
<DemoExample
|
|
15
|
+
title="Basic Tooltip"
|
|
16
|
+
description="Simple tooltip with text content."
|
|
17
|
+
>
|
|
18
|
+
<div className="flex flex-wrap gap-4">
|
|
19
|
+
<ModusTooltip content="This is a helpful tooltip">
|
|
20
|
+
<ModusButton color="primary">Hover me</ModusButton>
|
|
21
|
+
</ModusTooltip>
|
|
22
|
+
|
|
23
|
+
<ModusTooltip content="Click to save your changes">
|
|
24
|
+
<ModusButton
|
|
25
|
+
color="secondary"
|
|
26
|
+
icon="save_disk"
|
|
27
|
+
iconPosition="left"
|
|
28
|
+
>
|
|
29
|
+
Save
|
|
30
|
+
</ModusButton>
|
|
31
|
+
</ModusTooltip>
|
|
32
|
+
</div>
|
|
33
|
+
</DemoExample>
|
|
34
|
+
|
|
35
|
+
<DemoExample
|
|
36
|
+
title="Tooltip Positions"
|
|
37
|
+
description="Tooltips in different positions relative to the element."
|
|
38
|
+
>
|
|
39
|
+
<div className="flex flex-wrap gap-4">
|
|
40
|
+
<ModusTooltip content="Tooltip on top" position="top">
|
|
41
|
+
<ModusButton color="primary">Top</ModusButton>
|
|
42
|
+
</ModusTooltip>
|
|
43
|
+
|
|
44
|
+
<ModusTooltip content="Tooltip on right" position="right">
|
|
45
|
+
<ModusButton color="primary">Right</ModusButton>
|
|
46
|
+
</ModusTooltip>
|
|
47
|
+
|
|
48
|
+
<ModusTooltip content="Tooltip on bottom" position="bottom">
|
|
49
|
+
<ModusButton color="primary">Bottom</ModusButton>
|
|
50
|
+
</ModusTooltip>
|
|
51
|
+
|
|
52
|
+
<ModusTooltip content="Tooltip on left" position="left">
|
|
53
|
+
<ModusButton color="primary">Left</ModusButton>
|
|
54
|
+
</ModusTooltip>
|
|
55
|
+
</div>
|
|
56
|
+
</DemoExample>
|
|
57
|
+
|
|
58
|
+
<DemoExample
|
|
59
|
+
title="Tooltip with Icons"
|
|
60
|
+
description="Tooltips on icon buttons and icon-only elements."
|
|
61
|
+
>
|
|
62
|
+
<div className="flex flex-wrap gap-4">
|
|
63
|
+
<ModusTooltip content="Settings menu">
|
|
64
|
+
<ModusButton
|
|
65
|
+
color="tertiary"
|
|
66
|
+
icon="settings"
|
|
67
|
+
iconPosition="only"
|
|
68
|
+
ariaLabel="Settings"
|
|
69
|
+
/>
|
|
70
|
+
</ModusTooltip>
|
|
71
|
+
|
|
72
|
+
<ModusTooltip content="Edit item">
|
|
73
|
+
<ModusButton
|
|
74
|
+
color="tertiary"
|
|
75
|
+
icon="file_edit"
|
|
76
|
+
iconPosition="only"
|
|
77
|
+
ariaLabel="Edit"
|
|
78
|
+
/>
|
|
79
|
+
</ModusTooltip>
|
|
80
|
+
|
|
81
|
+
<ModusTooltip content="Delete item">
|
|
82
|
+
<ModusButton
|
|
83
|
+
color="danger"
|
|
84
|
+
icon="delete"
|
|
85
|
+
iconPosition="only"
|
|
86
|
+
ariaLabel="Delete"
|
|
87
|
+
/>
|
|
88
|
+
</ModusTooltip>
|
|
89
|
+
|
|
90
|
+
<ModusTooltip content="Information icon">
|
|
91
|
+
<i
|
|
92
|
+
className="modus-icons text-lg text-primary"
|
|
93
|
+
role="img"
|
|
94
|
+
aria-label="Information"
|
|
95
|
+
>
|
|
96
|
+
info
|
|
97
|
+
</i>
|
|
98
|
+
</ModusTooltip>
|
|
99
|
+
|
|
100
|
+
<ModusTooltip content="Help and support">
|
|
101
|
+
<i
|
|
102
|
+
className="modus-icons text-lg text-primary"
|
|
103
|
+
role="img"
|
|
104
|
+
aria-label="Help"
|
|
105
|
+
>
|
|
106
|
+
help
|
|
107
|
+
</i>
|
|
108
|
+
</ModusTooltip>
|
|
109
|
+
</div>
|
|
110
|
+
</DemoExample>
|
|
111
|
+
|
|
112
|
+
<DemoExample
|
|
113
|
+
title="Tooltip with Text Content"
|
|
114
|
+
description="Tooltips on text and other content elements."
|
|
115
|
+
>
|
|
116
|
+
<div className="flex flex-col gap-4">
|
|
117
|
+
<div className="flex items-center gap-2">
|
|
118
|
+
<div className="text-sm text-foreground">Hover over the</div>
|
|
119
|
+
<ModusTooltip content="This term provides additional context when hovered">
|
|
120
|
+
<div className="text-sm text-primary underline cursor-help">
|
|
121
|
+
highlighted term
|
|
122
|
+
</div>
|
|
123
|
+
</ModusTooltip>
|
|
124
|
+
<div className="text-sm text-foreground">for more information.</div>
|
|
125
|
+
</div>
|
|
126
|
+
|
|
127
|
+
<div className="flex items-center gap-2">
|
|
128
|
+
<ModusTooltip content="This is a required field that must be completed">
|
|
129
|
+
<div className="text-sm text-foreground flex items-center gap-1">
|
|
130
|
+
Required Field
|
|
131
|
+
<i
|
|
132
|
+
className="modus-icons text-xs text-destructive"
|
|
133
|
+
aria-hidden="true"
|
|
134
|
+
>
|
|
135
|
+
alert
|
|
136
|
+
</i>
|
|
137
|
+
</div>
|
|
138
|
+
</ModusTooltip>
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
</DemoExample>
|
|
142
|
+
|
|
143
|
+
<DemoExample
|
|
144
|
+
title="Auto Position Tooltip"
|
|
145
|
+
description="Tooltip with automatic position detection."
|
|
146
|
+
>
|
|
147
|
+
<div className="flex flex-wrap gap-4">
|
|
148
|
+
<ModusTooltip
|
|
149
|
+
content="Auto position adjusts based on available space"
|
|
150
|
+
position="auto"
|
|
151
|
+
>
|
|
152
|
+
<ModusButton color="primary">Auto Position</ModusButton>
|
|
153
|
+
</ModusTooltip>
|
|
154
|
+
</div>
|
|
155
|
+
</DemoExample>
|
|
156
|
+
|
|
157
|
+
<DemoExample
|
|
158
|
+
title="Real-World Example"
|
|
159
|
+
description="Tooltips in a typical UI context."
|
|
160
|
+
>
|
|
161
|
+
<div className="flex flex-col gap-6 p-6 rounded-lg bg-card border-default">
|
|
162
|
+
<div className="flex items-center justify-between">
|
|
163
|
+
<div className="flex items-center gap-2">
|
|
164
|
+
<div className="text-base font-medium text-foreground">
|
|
165
|
+
Document Editor
|
|
166
|
+
</div>
|
|
167
|
+
<ModusTooltip content="Save your document (Ctrl+S)">
|
|
168
|
+
<ModusButton
|
|
169
|
+
color="tertiary"
|
|
170
|
+
icon="save_disk"
|
|
171
|
+
iconPosition="only"
|
|
172
|
+
ariaLabel="Save"
|
|
173
|
+
size="sm"
|
|
174
|
+
/>
|
|
175
|
+
</ModusTooltip>
|
|
176
|
+
<ModusTooltip content="Print document (Ctrl+P)">
|
|
177
|
+
<ModusButton
|
|
178
|
+
color="tertiary"
|
|
179
|
+
icon="printer"
|
|
180
|
+
iconPosition="only"
|
|
181
|
+
ariaLabel="Print"
|
|
182
|
+
size="sm"
|
|
183
|
+
/>
|
|
184
|
+
</ModusTooltip>
|
|
185
|
+
<ModusTooltip content="Share document">
|
|
186
|
+
<ModusButton
|
|
187
|
+
color="tertiary"
|
|
188
|
+
icon="share"
|
|
189
|
+
iconPosition="only"
|
|
190
|
+
ariaLabel="Share"
|
|
191
|
+
size="sm"
|
|
192
|
+
/>
|
|
193
|
+
</ModusTooltip>
|
|
194
|
+
</div>
|
|
195
|
+
<ModusTooltip content="Open settings menu">
|
|
196
|
+
<ModusButton
|
|
197
|
+
color="tertiary"
|
|
198
|
+
icon="settings"
|
|
199
|
+
iconPosition="only"
|
|
200
|
+
ariaLabel="Settings"
|
|
201
|
+
size="sm"
|
|
202
|
+
/>
|
|
203
|
+
</ModusTooltip>
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
</DemoExample>
|
|
207
|
+
</DemoPage>
|
|
208
|
+
);
|
|
209
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export default function TypographyTest() {
|
|
2
|
+
return (
|
|
3
|
+
<div className="max-w-4xl mx-auto p-8 bg-background text-foreground">
|
|
4
|
+
<div className="mb-8">
|
|
5
|
+
<div className="text-2xl font-semibold mb-6 text-foreground">
|
|
6
|
+
Typography Scale Test
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
<div className="space-y-4">
|
|
10
|
+
<div className="text-xs text-foreground">text-xs - 10px</div>
|
|
11
|
+
<div className="text-sm text-foreground">text-sm - 12px</div>
|
|
12
|
+
<div className="text-md text-foreground">text-md - 14px</div>
|
|
13
|
+
<div className="text-base text-foreground">text-base - 14px</div>
|
|
14
|
+
<div className="text-lg text-foreground">text-lg - 16px</div>
|
|
15
|
+
<div className="text-xl text-foreground">text-xl - 18px</div>
|
|
16
|
+
<div className="text-2xl text-foreground">text-2xl - 20px</div>
|
|
17
|
+
<div className="text-3xl text-foreground">text-3xl - 24px</div>
|
|
18
|
+
<div className="text-4xl text-foreground">text-4xl - 36px</div>
|
|
19
|
+
<div className="text-5xl text-foreground">text-5xl - 48px</div>
|
|
20
|
+
<div className="text-6xl text-foreground">text-6xl - 60px</div>
|
|
21
|
+
<div className="text-7xl text-foreground">text-7xl - 72px</div>
|
|
22
|
+
<div className="text-8xl text-foreground">text-8xl - 96px</div>
|
|
23
|
+
<div className="text-9xl text-foreground">text-9xl - 128px</div>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
);
|
|
28
|
+
}
|
|
@@ -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 ModusButton from "../../components/ModusButton";
|
|
7
|
+
import ModusTextInput from "../../components/ModusTextInput";
|
|
8
|
+
import ModusSwitch from "../../components/ModusSwitch";
|
|
9
|
+
import ModusUtilityPanel from "../../components/ModusUtilityPanel";
|
|
10
|
+
|
|
11
|
+
export default function UtilityPanelDemoPage() {
|
|
12
|
+
const [expanded, setExpanded] = useState(false);
|
|
13
|
+
const [formData, setFormData] = useState({
|
|
14
|
+
projectName: "",
|
|
15
|
+
email: "",
|
|
16
|
+
notifications: true,
|
|
17
|
+
autoSave: false,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
const handleToggle = (collapsed: boolean) => {
|
|
21
|
+
setExpanded(!collapsed);
|
|
22
|
+
console.log("Panel toggled:", collapsed ? "collapsed" : "expanded");
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const handleInputChange =
|
|
26
|
+
(field: string) => (event: CustomEvent<InputEvent>) => {
|
|
27
|
+
const target = event.target as HTMLInputElement;
|
|
28
|
+
setFormData((prev) => ({
|
|
29
|
+
...prev,
|
|
30
|
+
[field]: target.value,
|
|
31
|
+
}));
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const handleSwitchChange =
|
|
35
|
+
(field: string) => (event: CustomEvent<InputEvent>) => {
|
|
36
|
+
const target = event.target as HTMLInputElement;
|
|
37
|
+
setFormData((prev) => ({
|
|
38
|
+
...prev,
|
|
39
|
+
[field]: target.checked,
|
|
40
|
+
}));
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const handleSave = () => {
|
|
44
|
+
console.log("Saving form data:", formData);
|
|
45
|
+
alert("Form data saved! Check console for details.");
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<DemoPage
|
|
50
|
+
title="Modus Utility Panel"
|
|
51
|
+
description="Utility panels slide in contextual information or controls without leaving the page. Keep content focused and provide clear actions."
|
|
52
|
+
>
|
|
53
|
+
<DemoExample
|
|
54
|
+
title="Settings Panel with Form Controls"
|
|
55
|
+
description="A utility panel containing form inputs and controls. The panel can be toggled to show/hide additional settings without leaving the main workspace."
|
|
56
|
+
>
|
|
57
|
+
<div className="space-y-6">
|
|
58
|
+
{/* Controls */}
|
|
59
|
+
<div className="flex gap-4 items-center">
|
|
60
|
+
<ModusButton
|
|
61
|
+
color="primary"
|
|
62
|
+
size="sm"
|
|
63
|
+
onButtonClick={() => setExpanded(!expanded)}
|
|
64
|
+
>
|
|
65
|
+
{expanded ? "Close" : "Open"} Settings Panel
|
|
66
|
+
</ModusButton>
|
|
67
|
+
<div className="text-sm text-muted-foreground">
|
|
68
|
+
Panel state: {expanded ? "Open" : "Closed"}
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
{/* Main content with utility panel */}
|
|
73
|
+
<div className="flex gap-4 items-start">
|
|
74
|
+
<div
|
|
75
|
+
className="flex-1 p-6 bg-card rounded-lg"
|
|
76
|
+
style={{
|
|
77
|
+
border: "1px solid var(--border)",
|
|
78
|
+
marginRight: expanded ? "312px" : "0px",
|
|
79
|
+
transition: "margin-right 0.2s ease-out",
|
|
80
|
+
}}
|
|
81
|
+
>
|
|
82
|
+
<div className="text-xl font-semibold text-foreground mb-3">
|
|
83
|
+
Main Workspace
|
|
84
|
+
</div>
|
|
85
|
+
<div className="text-muted-foreground mb-4">
|
|
86
|
+
This is the primary content area. The utility panel slides in
|
|
87
|
+
from the right to provide additional controls and settings
|
|
88
|
+
without leaving this workspace.
|
|
89
|
+
</div>
|
|
90
|
+
<div className="space-y-2 text-sm">
|
|
91
|
+
<div>
|
|
92
|
+
<strong>Panel Position:</strong> Right side (default)
|
|
93
|
+
</div>
|
|
94
|
+
<div>
|
|
95
|
+
<strong>Panel Width:</strong> 312px (default)
|
|
96
|
+
</div>
|
|
97
|
+
<div>
|
|
98
|
+
<strong>Content Push:</strong> {expanded ? "Yes" : "No"}
|
|
99
|
+
</div>
|
|
100
|
+
<div>
|
|
101
|
+
<strong>Current Form Data:</strong>{" "}
|
|
102
|
+
{JSON.stringify(formData, null, 2)}
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
|
|
107
|
+
<div className="flex-shrink-0">
|
|
108
|
+
<ModusUtilityPanel
|
|
109
|
+
expanded={expanded}
|
|
110
|
+
headerSlot={
|
|
111
|
+
<div className="flex items-center justify-between w-full min-w-full max-w-full">
|
|
112
|
+
<div className="text-xl font-bold text-foreground">
|
|
113
|
+
Project Settings
|
|
114
|
+
</div>
|
|
115
|
+
<ModusButton
|
|
116
|
+
size="sm"
|
|
117
|
+
color="secondary"
|
|
118
|
+
variant="borderless"
|
|
119
|
+
shape="circle"
|
|
120
|
+
icon="close"
|
|
121
|
+
iconPosition="only"
|
|
122
|
+
ariaLabel="Close panel"
|
|
123
|
+
onButtonClick={() => setExpanded(false)}
|
|
124
|
+
/>
|
|
125
|
+
</div>
|
|
126
|
+
}
|
|
127
|
+
position="right"
|
|
128
|
+
panelWidth="312px"
|
|
129
|
+
pushContent={true}
|
|
130
|
+
onToggle={handleToggle}
|
|
131
|
+
footerSlot={
|
|
132
|
+
<div className="flex gap-2 justify-end">
|
|
133
|
+
<ModusButton
|
|
134
|
+
size="md"
|
|
135
|
+
color="secondary"
|
|
136
|
+
onButtonClick={() => setExpanded(false)}
|
|
137
|
+
>
|
|
138
|
+
Close
|
|
139
|
+
</ModusButton>
|
|
140
|
+
<ModusButton
|
|
141
|
+
size="md"
|
|
142
|
+
color="primary"
|
|
143
|
+
onButtonClick={handleSave}
|
|
144
|
+
>
|
|
145
|
+
Save Settings
|
|
146
|
+
</ModusButton>
|
|
147
|
+
</div>
|
|
148
|
+
}
|
|
149
|
+
>
|
|
150
|
+
<div className="space-y-4">
|
|
151
|
+
<div>
|
|
152
|
+
<ModusTextInput
|
|
153
|
+
label="Project Name"
|
|
154
|
+
value={formData.projectName}
|
|
155
|
+
placeholder="Enter project name"
|
|
156
|
+
onInputChange={handleInputChange("projectName")}
|
|
157
|
+
/>
|
|
158
|
+
</div>
|
|
159
|
+
|
|
160
|
+
<div>
|
|
161
|
+
<ModusTextInput
|
|
162
|
+
label="Email"
|
|
163
|
+
type="email"
|
|
164
|
+
value={formData.email}
|
|
165
|
+
placeholder="Enter email address"
|
|
166
|
+
onInputChange={handleInputChange("email")}
|
|
167
|
+
/>
|
|
168
|
+
</div>
|
|
169
|
+
|
|
170
|
+
<div className="space-y-3">
|
|
171
|
+
<ModusSwitch
|
|
172
|
+
label="Enable Notifications"
|
|
173
|
+
value={formData.notifications}
|
|
174
|
+
onInputChange={handleSwitchChange("notifications")}
|
|
175
|
+
/>
|
|
176
|
+
|
|
177
|
+
<ModusSwitch
|
|
178
|
+
label="Auto-save Changes"
|
|
179
|
+
value={formData.autoSave}
|
|
180
|
+
onInputChange={handleSwitchChange("autoSave")}
|
|
181
|
+
/>
|
|
182
|
+
</div>
|
|
183
|
+
|
|
184
|
+
<div className="pt-2 text-xs text-muted-foreground">
|
|
185
|
+
<div>• Panel slides over main content</div>
|
|
186
|
+
<div>• Form state is preserved when toggling</div>
|
|
187
|
+
<div>• Settings are applied immediately</div>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
</ModusUtilityPanel>
|
|
191
|
+
</div>
|
|
192
|
+
</div>
|
|
193
|
+
</div>
|
|
194
|
+
</DemoExample>
|
|
195
|
+
</DemoPage>
|
|
196
|
+
);
|
|
197
|
+
}
|