@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,186 @@
|
|
|
1
|
+
import { useRef, useState } from "react";
|
|
2
|
+
import DemoExample from "../../components/DemoExample";
|
|
3
|
+
import DemoPage from "../../components/DemoPage";
|
|
4
|
+
import ModusFileDropzone, {
|
|
5
|
+
type ModusFileDropzoneHandle,
|
|
6
|
+
} from "../../components/ModusFileDropzone";
|
|
7
|
+
import ModusButton from "../../components/ModusButton";
|
|
8
|
+
import ModusProgress from "../../components/ModusProgress";
|
|
9
|
+
|
|
10
|
+
export default function FileDropzoneDemoPage() {
|
|
11
|
+
const dropzoneRef = useRef<ModusFileDropzoneHandle>(null);
|
|
12
|
+
const [selectedFiles, setSelectedFiles] = useState<string[]>([]);
|
|
13
|
+
const [uploadProgress, setUploadProgress] = useState(0);
|
|
14
|
+
|
|
15
|
+
const handleFileSelect = (event: CustomEvent<FileList>) => {
|
|
16
|
+
const files = event.detail;
|
|
17
|
+
const fileNames: string[] = [];
|
|
18
|
+
for (let i = 0; i < files.length; i++) {
|
|
19
|
+
fileNames.push(`${files[i].name} (${formatFileSize(files[i].size)})`);
|
|
20
|
+
}
|
|
21
|
+
setSelectedFiles(fileNames);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const formatFileSize = (bytes: number): string => {
|
|
25
|
+
if (bytes === 0) return "0 Bytes";
|
|
26
|
+
const k = 1024;
|
|
27
|
+
const sizes = ["Bytes", "KB", "MB", "GB"];
|
|
28
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
29
|
+
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const handleReset = async () => {
|
|
33
|
+
await dropzoneRef.current?.reset();
|
|
34
|
+
setSelectedFiles([]);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const simulateUpload = () => {
|
|
38
|
+
setUploadProgress(0);
|
|
39
|
+
const interval = setInterval(() => {
|
|
40
|
+
setUploadProgress((prev) => {
|
|
41
|
+
if (prev >= 100) {
|
|
42
|
+
clearInterval(interval);
|
|
43
|
+
return 100;
|
|
44
|
+
}
|
|
45
|
+
return prev + 10;
|
|
46
|
+
});
|
|
47
|
+
}, 300);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
return (
|
|
51
|
+
<DemoPage
|
|
52
|
+
title="Modus File Dropzone"
|
|
53
|
+
description="File dropzone allows users to drag and drop files for upload, with built-in validation for file types, sizes, counts, and filename lengths."
|
|
54
|
+
>
|
|
55
|
+
<DemoExample
|
|
56
|
+
title="Basic File Dropzone"
|
|
57
|
+
description="A simple file dropzone accepting document files."
|
|
58
|
+
>
|
|
59
|
+
<ModusFileDropzone
|
|
60
|
+
acceptFileTypes=".doc, .docx, .pdf"
|
|
61
|
+
instructions="Drag files here or browse to upload (.doc, .docx, .pdf)"
|
|
62
|
+
onFileSelect={handleFileSelect}
|
|
63
|
+
/>
|
|
64
|
+
{selectedFiles.length > 0 && (
|
|
65
|
+
<div className="mt-4 p-4 bg-muted rounded-lg">
|
|
66
|
+
<div className="text-sm font-medium text-foreground mb-2">
|
|
67
|
+
Selected Files:
|
|
68
|
+
</div>
|
|
69
|
+
<div className="text-sm text-muted-foreground space-y-1">
|
|
70
|
+
{selectedFiles.map((file, index) => (
|
|
71
|
+
<div key={`file-${index}`}>{file}</div>
|
|
72
|
+
))}
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
)}
|
|
76
|
+
</DemoExample>
|
|
77
|
+
|
|
78
|
+
<DemoExample
|
|
79
|
+
title="Multiple File Selection"
|
|
80
|
+
description="Allow users to select multiple files at once."
|
|
81
|
+
>
|
|
82
|
+
<ModusFileDropzone
|
|
83
|
+
acceptFileTypes="image/*"
|
|
84
|
+
multiple
|
|
85
|
+
instructions="Select multiple image files (drag or click)"
|
|
86
|
+
/>
|
|
87
|
+
</DemoExample>
|
|
88
|
+
|
|
89
|
+
<DemoExample
|
|
90
|
+
title="With Validation Constraints"
|
|
91
|
+
description="Set limits on file count, total size, and filename length."
|
|
92
|
+
>
|
|
93
|
+
<ModusFileDropzone
|
|
94
|
+
acceptFileTypes=".doc, .docx, .pdf"
|
|
95
|
+
multiple
|
|
96
|
+
maxFileCount={3}
|
|
97
|
+
maxFileNameLength={20}
|
|
98
|
+
maxTotalFileSizeBytes={10485760}
|
|
99
|
+
invalidFileTypeMessage="Invalid file format. Please upload .doc, .docx, or .pdf files."
|
|
100
|
+
instructions="Upload files (max 3 files, 10MB total, filename max 20 chars)"
|
|
101
|
+
/>
|
|
102
|
+
</DemoExample>
|
|
103
|
+
|
|
104
|
+
<DemoExample
|
|
105
|
+
title="Custom Messages"
|
|
106
|
+
description="Customize success, error, and drag-over messages."
|
|
107
|
+
>
|
|
108
|
+
<ModusFileDropzone
|
|
109
|
+
acceptFileTypes=".jpg, .jpeg, .png, .gif"
|
|
110
|
+
multiple
|
|
111
|
+
instructions="Upload your images here"
|
|
112
|
+
fileDraggedOverInstructions="Release to upload your images"
|
|
113
|
+
successMessage="Images uploaded successfully!"
|
|
114
|
+
invalidFileTypeMessage="Only image files (.jpg, .png, .gif) are allowed"
|
|
115
|
+
/>
|
|
116
|
+
</DemoExample>
|
|
117
|
+
|
|
118
|
+
<DemoExample
|
|
119
|
+
title="With Progress Indicator"
|
|
120
|
+
description="Add custom content like progress bars using the slot."
|
|
121
|
+
>
|
|
122
|
+
<div className="flex flex-col gap-4">
|
|
123
|
+
<ModusFileDropzone
|
|
124
|
+
acceptFileTypes=".pdf, .doc, .docx"
|
|
125
|
+
successMessage="Files ready for upload!"
|
|
126
|
+
instructions="Drag files here or browse to upload"
|
|
127
|
+
onFileSelect={simulateUpload}
|
|
128
|
+
>
|
|
129
|
+
{uploadProgress > 0 && uploadProgress < 100 && (
|
|
130
|
+
<div className="w-64 mt-4">
|
|
131
|
+
<ModusProgress
|
|
132
|
+
value={uploadProgress}
|
|
133
|
+
label={`${uploadProgress}% Uploaded`}
|
|
134
|
+
/>
|
|
135
|
+
</div>
|
|
136
|
+
)}
|
|
137
|
+
</ModusFileDropzone>
|
|
138
|
+
{uploadProgress === 100 && (
|
|
139
|
+
<div className="text-sm text-success">Upload complete!</div>
|
|
140
|
+
)}
|
|
141
|
+
</div>
|
|
142
|
+
</DemoExample>
|
|
143
|
+
|
|
144
|
+
<DemoExample
|
|
145
|
+
title="Without State Icon"
|
|
146
|
+
description="Hide the upload/success/error icons for a minimal appearance."
|
|
147
|
+
>
|
|
148
|
+
<ModusFileDropzone
|
|
149
|
+
acceptFileTypes=".csv, .xlsx"
|
|
150
|
+
includeStateIcon={false}
|
|
151
|
+
instructions="Drop spreadsheet files here (.csv, .xlsx)"
|
|
152
|
+
/>
|
|
153
|
+
</DemoExample>
|
|
154
|
+
|
|
155
|
+
<DemoExample
|
|
156
|
+
title="Disabled State"
|
|
157
|
+
description="Disable the dropzone when file upload is not available."
|
|
158
|
+
>
|
|
159
|
+
<ModusFileDropzone
|
|
160
|
+
disabled
|
|
161
|
+
instructions="File upload is currently disabled"
|
|
162
|
+
/>
|
|
163
|
+
</DemoExample>
|
|
164
|
+
|
|
165
|
+
<DemoExample
|
|
166
|
+
title="Programmatic Reset"
|
|
167
|
+
description="Reset the dropzone state using a ref."
|
|
168
|
+
>
|
|
169
|
+
<div className="flex flex-col gap-4">
|
|
170
|
+
<ModusFileDropzone
|
|
171
|
+
ref={dropzoneRef}
|
|
172
|
+
acceptFileTypes=".txt, .md"
|
|
173
|
+
instructions="Upload text files, then use the reset button"
|
|
174
|
+
/>
|
|
175
|
+
<ModusButton
|
|
176
|
+
variant="outlined"
|
|
177
|
+
color="secondary"
|
|
178
|
+
onButtonClick={handleReset}
|
|
179
|
+
>
|
|
180
|
+
Reset Dropzone
|
|
181
|
+
</ModusButton>
|
|
182
|
+
</div>
|
|
183
|
+
</DemoExample>
|
|
184
|
+
</DemoPage>
|
|
185
|
+
);
|
|
186
|
+
}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
import DemoExample from "../../components/DemoExample";
|
|
2
|
+
import DemoPage from "../../components/DemoPage";
|
|
3
|
+
import ModusHandle from "../../components/ModusHandle";
|
|
4
|
+
|
|
5
|
+
export default function HandleDemoPage() {
|
|
6
|
+
return (
|
|
7
|
+
<DemoPage
|
|
8
|
+
title="Modus Handle"
|
|
9
|
+
description="Handle is a draggable component for resizing adjacent elements. It supports both bar and button styles, horizontal and vertical orientations, and keyboard navigation."
|
|
10
|
+
>
|
|
11
|
+
<DemoExample
|
|
12
|
+
title="Horizontal Bar Handle"
|
|
13
|
+
description="Drag the handle to resize the left and right panels."
|
|
14
|
+
>
|
|
15
|
+
<div className="flex h-64 border border-border rounded-lg overflow-hidden">
|
|
16
|
+
<div id="h-left-panel-1" className="bg-card p-4 min-w-24 w-[200px]">
|
|
17
|
+
<div className="text-sm font-medium text-foreground">
|
|
18
|
+
Left Panel
|
|
19
|
+
</div>
|
|
20
|
+
<div className="text-xs text-muted-foreground mt-2">
|
|
21
|
+
Drag the handle to resize
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
<ModusHandle
|
|
25
|
+
orientation="horizontal"
|
|
26
|
+
leftTarget="#h-left-panel-1"
|
|
27
|
+
rightTarget="#h-right-panel-1"
|
|
28
|
+
/>
|
|
29
|
+
<div id="h-right-panel-1" className="bg-muted p-4 flex-1 min-w-24">
|
|
30
|
+
<div className="text-sm font-medium text-foreground">
|
|
31
|
+
Right Panel
|
|
32
|
+
</div>
|
|
33
|
+
<div className="text-xs text-muted-foreground mt-2">
|
|
34
|
+
This panel resizes automatically
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
</DemoExample>
|
|
39
|
+
|
|
40
|
+
<DemoExample
|
|
41
|
+
title="Vertical Bar Handle"
|
|
42
|
+
description="Resize panels vertically by dragging up or down."
|
|
43
|
+
>
|
|
44
|
+
<div className="flex flex-col h-80 border border-border rounded-lg overflow-hidden">
|
|
45
|
+
<div id="v-top-panel-1" className="bg-card p-4 min-h-16 h-[120px]">
|
|
46
|
+
<div className="text-sm font-medium text-foreground">Top Panel</div>
|
|
47
|
+
<div className="text-xs text-muted-foreground mt-2">
|
|
48
|
+
Drag the handle below to resize
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
<ModusHandle
|
|
52
|
+
orientation="vertical"
|
|
53
|
+
leftTarget="#v-top-panel-1"
|
|
54
|
+
rightTarget="#v-bottom-panel-1"
|
|
55
|
+
/>
|
|
56
|
+
<div id="v-bottom-panel-1" className="bg-muted p-4 flex-1 min-h-16">
|
|
57
|
+
<div className="text-sm font-medium text-foreground">
|
|
58
|
+
Bottom Panel
|
|
59
|
+
</div>
|
|
60
|
+
<div className="text-xs text-muted-foreground mt-2">
|
|
61
|
+
This panel resizes automatically
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
</DemoExample>
|
|
66
|
+
|
|
67
|
+
<DemoExample
|
|
68
|
+
title="Button Type Handle"
|
|
69
|
+
description="A button-style handle with a drag icon for better visibility."
|
|
70
|
+
>
|
|
71
|
+
<div className="flex h-64 border border-border rounded-lg overflow-hidden">
|
|
72
|
+
<div id="btn-left-panel" className="bg-card p-4 min-w-24 w-[200px]">
|
|
73
|
+
<div className="text-sm font-medium text-foreground">Panel A</div>
|
|
74
|
+
<div className="text-xs text-muted-foreground mt-2">
|
|
75
|
+
Button handle style
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
<ModusHandle
|
|
79
|
+
type="button"
|
|
80
|
+
orientation="horizontal"
|
|
81
|
+
buttonColor="primary"
|
|
82
|
+
buttonVariant="outlined"
|
|
83
|
+
leftTarget="#btn-left-panel"
|
|
84
|
+
rightTarget="#btn-right-panel"
|
|
85
|
+
/>
|
|
86
|
+
<div id="btn-right-panel" className="bg-muted p-4 flex-1 min-w-24">
|
|
87
|
+
<div className="text-sm font-medium text-foreground">Panel B</div>
|
|
88
|
+
<div className="text-xs text-muted-foreground mt-2">
|
|
89
|
+
Click and drag the button
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
</DemoExample>
|
|
94
|
+
|
|
95
|
+
<DemoExample
|
|
96
|
+
title="Button Handle Variants"
|
|
97
|
+
description="Different button colors and styles for the handle."
|
|
98
|
+
>
|
|
99
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
100
|
+
<div className="flex h-48 border border-border rounded-lg overflow-hidden">
|
|
101
|
+
<div id="btn-var-left-1" className="bg-card p-4 min-w-20 w-[120px]">
|
|
102
|
+
<div className="text-xs font-medium text-foreground">
|
|
103
|
+
Primary Filled
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
<ModusHandle
|
|
107
|
+
type="button"
|
|
108
|
+
orientation="horizontal"
|
|
109
|
+
buttonColor="primary"
|
|
110
|
+
buttonVariant="filled"
|
|
111
|
+
leftTarget="#btn-var-left-1"
|
|
112
|
+
rightTarget="#btn-var-right-1"
|
|
113
|
+
/>
|
|
114
|
+
<div id="btn-var-right-1" className="bg-muted p-4 flex-1 min-w-20">
|
|
115
|
+
<div className="text-xs text-muted-foreground">Resize me</div>
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
<div className="flex h-48 border border-border rounded-lg overflow-hidden">
|
|
119
|
+
<div id="btn-var-left-2" className="bg-card p-4 min-w-20 w-[120px]">
|
|
120
|
+
<div className="text-xs font-medium text-foreground">
|
|
121
|
+
Secondary Outlined
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
<ModusHandle
|
|
125
|
+
type="button"
|
|
126
|
+
orientation="horizontal"
|
|
127
|
+
buttonColor="secondary"
|
|
128
|
+
buttonVariant="outlined"
|
|
129
|
+
leftTarget="#btn-var-left-2"
|
|
130
|
+
rightTarget="#btn-var-right-2"
|
|
131
|
+
/>
|
|
132
|
+
<div id="btn-var-right-2" className="bg-muted p-4 flex-1 min-w-20">
|
|
133
|
+
<div className="text-xs text-muted-foreground">Resize me</div>
|
|
134
|
+
</div>
|
|
135
|
+
</div>
|
|
136
|
+
<div className="flex h-48 border border-border rounded-lg overflow-hidden">
|
|
137
|
+
<div id="btn-var-left-3" className="bg-card p-4 min-w-20 w-[120px]">
|
|
138
|
+
<div className="text-xs font-medium text-foreground">
|
|
139
|
+
Tertiary Borderless
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
<ModusHandle
|
|
143
|
+
type="button"
|
|
144
|
+
orientation="horizontal"
|
|
145
|
+
buttonColor="tertiary"
|
|
146
|
+
buttonVariant="borderless"
|
|
147
|
+
leftTarget="#btn-var-left-3"
|
|
148
|
+
rightTarget="#btn-var-right-3"
|
|
149
|
+
/>
|
|
150
|
+
<div id="btn-var-right-3" className="bg-muted p-4 flex-1 min-w-20">
|
|
151
|
+
<div className="text-xs text-muted-foreground">Resize me</div>
|
|
152
|
+
</div>
|
|
153
|
+
</div>
|
|
154
|
+
<div className="flex h-48 border border-border rounded-lg overflow-hidden">
|
|
155
|
+
<div id="btn-var-left-4" className="bg-card p-4 min-w-20 w-[120px]">
|
|
156
|
+
<div className="text-xs font-medium text-foreground">
|
|
157
|
+
Warning Filled
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
<ModusHandle
|
|
161
|
+
type="button"
|
|
162
|
+
orientation="horizontal"
|
|
163
|
+
buttonColor="warning"
|
|
164
|
+
buttonVariant="filled"
|
|
165
|
+
leftTarget="#btn-var-left-4"
|
|
166
|
+
rightTarget="#btn-var-right-4"
|
|
167
|
+
/>
|
|
168
|
+
<div id="btn-var-right-4" className="bg-muted p-4 flex-1 min-w-20">
|
|
169
|
+
<div className="text-xs text-muted-foreground">Resize me</div>
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
</div>
|
|
173
|
+
</DemoExample>
|
|
174
|
+
|
|
175
|
+
<DemoExample
|
|
176
|
+
title="Handle Sizes"
|
|
177
|
+
description="Different bar sizes for the handle component."
|
|
178
|
+
>
|
|
179
|
+
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
|
|
180
|
+
<div className="flex h-40 border border-border rounded-lg overflow-hidden">
|
|
181
|
+
<div id="size-left-1" className="bg-card p-4 min-w-20 w-[100px]">
|
|
182
|
+
<div className="text-xs font-medium text-foreground">Default</div>
|
|
183
|
+
</div>
|
|
184
|
+
<ModusHandle
|
|
185
|
+
size="default"
|
|
186
|
+
orientation="horizontal"
|
|
187
|
+
leftTarget="#size-left-1"
|
|
188
|
+
rightTarget="#size-right-1"
|
|
189
|
+
/>
|
|
190
|
+
<div id="size-right-1" className="bg-muted p-4 flex-1 min-w-20" />
|
|
191
|
+
</div>
|
|
192
|
+
<div className="flex h-40 border border-border rounded-lg overflow-hidden">
|
|
193
|
+
<div id="size-left-2" className="bg-card p-4 min-w-20 w-[100px]">
|
|
194
|
+
<div className="text-xs font-medium text-foreground">Large</div>
|
|
195
|
+
</div>
|
|
196
|
+
<ModusHandle
|
|
197
|
+
size="lg"
|
|
198
|
+
orientation="horizontal"
|
|
199
|
+
leftTarget="#size-left-2"
|
|
200
|
+
rightTarget="#size-right-2"
|
|
201
|
+
/>
|
|
202
|
+
<div id="size-right-2" className="bg-muted p-4 flex-1 min-w-20" />
|
|
203
|
+
</div>
|
|
204
|
+
<div className="flex h-40 border border-border rounded-lg overflow-hidden">
|
|
205
|
+
<div id="size-left-3" className="bg-card p-4 min-w-20 w-[100px]">
|
|
206
|
+
<div className="text-xs font-medium text-foreground">
|
|
207
|
+
Extra Large
|
|
208
|
+
</div>
|
|
209
|
+
</div>
|
|
210
|
+
<ModusHandle
|
|
211
|
+
size="xl"
|
|
212
|
+
orientation="horizontal"
|
|
213
|
+
leftTarget="#size-left-3"
|
|
214
|
+
rightTarget="#size-right-3"
|
|
215
|
+
/>
|
|
216
|
+
<div id="size-right-3" className="bg-muted p-4 flex-1 min-w-20" />
|
|
217
|
+
</div>
|
|
218
|
+
<div className="flex h-40 border border-border rounded-lg overflow-hidden">
|
|
219
|
+
<div id="size-left-4" className="bg-card p-4 min-w-20 w-[100px]">
|
|
220
|
+
<div className="text-xs font-medium text-foreground">
|
|
221
|
+
2X Large
|
|
222
|
+
</div>
|
|
223
|
+
</div>
|
|
224
|
+
<ModusHandle
|
|
225
|
+
size="2xl"
|
|
226
|
+
orientation="horizontal"
|
|
227
|
+
leftTarget="#size-left-4"
|
|
228
|
+
rightTarget="#size-right-4"
|
|
229
|
+
/>
|
|
230
|
+
<div id="size-right-4" className="bg-muted p-4 flex-1 min-w-20" />
|
|
231
|
+
</div>
|
|
232
|
+
</div>
|
|
233
|
+
</DemoExample>
|
|
234
|
+
|
|
235
|
+
<DemoExample
|
|
236
|
+
title="Custom Default Split"
|
|
237
|
+
description="Set the initial split percentage for panels."
|
|
238
|
+
>
|
|
239
|
+
<div className="flex flex-col gap-4">
|
|
240
|
+
<div className="text-sm text-muted-foreground">30/70 Split</div>
|
|
241
|
+
<div className="flex h-48 border border-border rounded-lg overflow-hidden">
|
|
242
|
+
<div id="split-left-1" className="bg-card p-4 min-w-20">
|
|
243
|
+
<div className="text-xs font-medium text-foreground">30%</div>
|
|
244
|
+
</div>
|
|
245
|
+
<ModusHandle
|
|
246
|
+
orientation="horizontal"
|
|
247
|
+
defaultSplit={30}
|
|
248
|
+
leftTarget="#split-left-1"
|
|
249
|
+
rightTarget="#split-right-1"
|
|
250
|
+
/>
|
|
251
|
+
<div id="split-right-1" className="bg-muted p-4 flex-1 min-w-20">
|
|
252
|
+
<div className="text-xs font-medium text-foreground">70%</div>
|
|
253
|
+
</div>
|
|
254
|
+
</div>
|
|
255
|
+
<div className="text-sm text-muted-foreground">70/30 Split</div>
|
|
256
|
+
<div className="flex h-48 border border-border rounded-lg overflow-hidden">
|
|
257
|
+
<div id="split-left-2" className="bg-card p-4 min-w-20">
|
|
258
|
+
<div className="text-xs font-medium text-foreground">70%</div>
|
|
259
|
+
</div>
|
|
260
|
+
<ModusHandle
|
|
261
|
+
orientation="horizontal"
|
|
262
|
+
defaultSplit={70}
|
|
263
|
+
leftTarget="#split-left-2"
|
|
264
|
+
rightTarget="#split-right-2"
|
|
265
|
+
/>
|
|
266
|
+
<div id="split-right-2" className="bg-muted p-4 flex-1 min-w-20">
|
|
267
|
+
<div className="text-xs font-medium text-foreground">30%</div>
|
|
268
|
+
</div>
|
|
269
|
+
</div>
|
|
270
|
+
</div>
|
|
271
|
+
</DemoExample>
|
|
272
|
+
|
|
273
|
+
<DemoExample
|
|
274
|
+
title="Keyboard Navigation"
|
|
275
|
+
description="The handle supports keyboard navigation for accessibility."
|
|
276
|
+
>
|
|
277
|
+
<div className="flex flex-col gap-4">
|
|
278
|
+
<div className="p-4 bg-muted rounded-lg">
|
|
279
|
+
<div className="text-sm font-medium text-foreground mb-2">
|
|
280
|
+
Keyboard Controls:
|
|
281
|
+
</div>
|
|
282
|
+
<div className="text-xs text-muted-foreground space-y-1">
|
|
283
|
+
<div>Arrow Keys: Move handle 5px per press</div>
|
|
284
|
+
<div>Shift + Arrow Keys: Move handle 15px per press</div>
|
|
285
|
+
<div>Tab: Focus the handle element</div>
|
|
286
|
+
</div>
|
|
287
|
+
</div>
|
|
288
|
+
<div className="flex h-48 border border-border rounded-lg overflow-hidden">
|
|
289
|
+
<div id="kb-left" className="bg-card p-4 min-w-24 w-[200px]">
|
|
290
|
+
<div className="text-sm font-medium text-foreground">
|
|
291
|
+
Focus Here
|
|
292
|
+
</div>
|
|
293
|
+
<div className="text-xs text-muted-foreground mt-2">
|
|
294
|
+
Tab to handle, use arrow keys
|
|
295
|
+
</div>
|
|
296
|
+
</div>
|
|
297
|
+
<ModusHandle
|
|
298
|
+
orientation="horizontal"
|
|
299
|
+
leftTarget="#kb-left"
|
|
300
|
+
rightTarget="#kb-right"
|
|
301
|
+
ariaLabel="Resize panels using arrow keys"
|
|
302
|
+
/>
|
|
303
|
+
<div id="kb-right" className="bg-muted p-4 flex-1 min-w-24">
|
|
304
|
+
<div className="text-sm font-medium text-foreground">
|
|
305
|
+
Right Panel
|
|
306
|
+
</div>
|
|
307
|
+
</div>
|
|
308
|
+
</div>
|
|
309
|
+
</div>
|
|
310
|
+
</DemoExample>
|
|
311
|
+
</DemoPage>
|
|
312
|
+
);
|
|
313
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import DemoExample from "../../components/DemoExample";
|
|
4
|
+
import DemoPage from "../../components/DemoPage";
|
|
5
|
+
import ModusIcon from "../../components/ModusIcon";
|
|
6
|
+
|
|
7
|
+
export default function IconDemoPage() {
|
|
8
|
+
return (
|
|
9
|
+
<DemoPage
|
|
10
|
+
title="Modus Icon"
|
|
11
|
+
description="Icons provide visual communication and enhance user understanding. Use icons consistently to reinforce meaning and improve usability."
|
|
12
|
+
>
|
|
13
|
+
<DemoExample
|
|
14
|
+
title="Icon Sizes"
|
|
15
|
+
description="Different icon sizes using the Modus font scale."
|
|
16
|
+
>
|
|
17
|
+
<div className="flex flex-wrap items-center gap-6">
|
|
18
|
+
<div className="flex flex-col items-center gap-2">
|
|
19
|
+
<ModusIcon name="star" size="sm" />
|
|
20
|
+
<div className="text-xs text-muted-foreground">Small (sm)</div>
|
|
21
|
+
</div>
|
|
22
|
+
<div className="flex flex-col items-center gap-2">
|
|
23
|
+
<ModusIcon name="star" size="md" />
|
|
24
|
+
<div className="text-xs text-muted-foreground">Medium (md)</div>
|
|
25
|
+
</div>
|
|
26
|
+
<div className="flex flex-col items-center gap-2">
|
|
27
|
+
<ModusIcon name="star" size="lg" />
|
|
28
|
+
<div className="text-xs text-muted-foreground">Large (lg)</div>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
</DemoExample>
|
|
32
|
+
|
|
33
|
+
<DemoExample
|
|
34
|
+
title="Status Icons"
|
|
35
|
+
description="Icons commonly used to indicate status or state."
|
|
36
|
+
>
|
|
37
|
+
<div className="flex flex-wrap items-center gap-6">
|
|
38
|
+
<div className="flex flex-col items-center gap-2">
|
|
39
|
+
<ModusIcon
|
|
40
|
+
name="check_circle"
|
|
41
|
+
size="lg"
|
|
42
|
+
decorative={false}
|
|
43
|
+
ariaLabel="Success"
|
|
44
|
+
customClass="text-success"
|
|
45
|
+
/>
|
|
46
|
+
<div className="text-xs text-muted-foreground">Success</div>
|
|
47
|
+
</div>
|
|
48
|
+
<div className="flex flex-col items-center gap-2">
|
|
49
|
+
<ModusIcon
|
|
50
|
+
name="info"
|
|
51
|
+
size="lg"
|
|
52
|
+
decorative={false}
|
|
53
|
+
ariaLabel="Info"
|
|
54
|
+
customClass="text-primary"
|
|
55
|
+
/>
|
|
56
|
+
<div className="text-xs text-muted-foreground">Info</div>
|
|
57
|
+
</div>
|
|
58
|
+
<div className="flex flex-col items-center gap-2">
|
|
59
|
+
<ModusIcon
|
|
60
|
+
name="warning"
|
|
61
|
+
size="lg"
|
|
62
|
+
decorative={false}
|
|
63
|
+
ariaLabel="Warning"
|
|
64
|
+
customClass="text-warning"
|
|
65
|
+
/>
|
|
66
|
+
<div className="text-xs text-muted-foreground">Warning</div>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</DemoExample>
|
|
70
|
+
</DemoPage>
|
|
71
|
+
);
|
|
72
|
+
}
|