@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,134 @@
|
|
|
1
|
+
import { Component, signal } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { DemoPageComponent } from '../shared/demo-page.component';
|
|
4
|
+
import { DemoExampleComponent } from '../shared/demo-example.component';
|
|
5
|
+
import { ModusPaginationComponent } from '../../components/modus-pagination.component';
|
|
6
|
+
import type { IPageChange } from '@trimble-oss/moduswebcomponents';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Demo page showcasing the Modus Pagination component.
|
|
10
|
+
*
|
|
11
|
+
* Demonstrates pagination features including:
|
|
12
|
+
* - Basic pagination
|
|
13
|
+
* - Different sizes
|
|
14
|
+
* - Custom button text
|
|
15
|
+
* - Interactive pagination
|
|
16
|
+
*/
|
|
17
|
+
@Component({
|
|
18
|
+
selector: 'app-pagination-demo-page',
|
|
19
|
+
standalone: true,
|
|
20
|
+
imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusPaginationComponent],
|
|
21
|
+
template: `
|
|
22
|
+
<demo-page
|
|
23
|
+
title="Modus Pagination"
|
|
24
|
+
description="Pagination components enable users to navigate through multiple pages of content. Use pagination for tables, lists, or any paginated content."
|
|
25
|
+
>
|
|
26
|
+
<demo-example
|
|
27
|
+
title="Basic Pagination"
|
|
28
|
+
description="Simple pagination with page count and current page."
|
|
29
|
+
>
|
|
30
|
+
<div class="flex flex-col gap-6">
|
|
31
|
+
<modus-pagination [count]="8" [page]="1" />
|
|
32
|
+
<modus-pagination [count]="5" [page]="3" />
|
|
33
|
+
<modus-pagination [count]="10" [page]="5" />
|
|
34
|
+
</div>
|
|
35
|
+
</demo-example>
|
|
36
|
+
|
|
37
|
+
<demo-example
|
|
38
|
+
title="Pagination Sizes"
|
|
39
|
+
description="Pagination in different sizes."
|
|
40
|
+
>
|
|
41
|
+
<div class="flex flex-col gap-6">
|
|
42
|
+
<div class="flex flex-col gap-2">
|
|
43
|
+
<p class="text-sm text-muted-foreground">Small</p>
|
|
44
|
+
<modus-pagination [count]="5" [page]="2" size="sm" />
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<div class="flex flex-col gap-2">
|
|
48
|
+
<p class="text-sm text-muted-foreground">Medium (Default)</p>
|
|
49
|
+
<modus-pagination [count]="5" [page]="2" size="md" />
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<div class="flex flex-col gap-2">
|
|
53
|
+
<p class="text-sm text-muted-foreground">Large</p>
|
|
54
|
+
<modus-pagination [count]="5" [page]="2" size="lg" />
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
</demo-example>
|
|
58
|
+
|
|
59
|
+
<demo-example
|
|
60
|
+
title="Custom Button Text"
|
|
61
|
+
description="Pagination with custom previous and next button text."
|
|
62
|
+
>
|
|
63
|
+
<div class="flex flex-col gap-6">
|
|
64
|
+
<modus-pagination
|
|
65
|
+
[count]="5"
|
|
66
|
+
[page]="2"
|
|
67
|
+
prevButtonText="Previous"
|
|
68
|
+
nextButtonText="Next"
|
|
69
|
+
/>
|
|
70
|
+
<modus-pagination
|
|
71
|
+
[count]="5"
|
|
72
|
+
[page]="3"
|
|
73
|
+
prevButtonText="←"
|
|
74
|
+
nextButtonText="→"
|
|
75
|
+
/>
|
|
76
|
+
</div>
|
|
77
|
+
</demo-example>
|
|
78
|
+
|
|
79
|
+
<demo-example
|
|
80
|
+
title="Interactive Pagination"
|
|
81
|
+
description="Pagination with two-way binding and event handling."
|
|
82
|
+
>
|
|
83
|
+
<div class="flex flex-col gap-6">
|
|
84
|
+
<modus-pagination
|
|
85
|
+
[count]="paginationState().count"
|
|
86
|
+
[page]="paginationState().page"
|
|
87
|
+
(pageChange)="handlePageChange($event)"
|
|
88
|
+
/>
|
|
89
|
+
<div class="p-4 rounded-lg bg-card border-default">
|
|
90
|
+
<p class="text-sm text-foreground">
|
|
91
|
+
<strong>Current Page:</strong> {{ paginationState().page }} / {{ paginationState().count }}
|
|
92
|
+
</p>
|
|
93
|
+
<p class="text-sm text-muted-foreground mt-2">
|
|
94
|
+
Click the pagination controls above to navigate between pages.
|
|
95
|
+
</p>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
</demo-example>
|
|
99
|
+
|
|
100
|
+
<demo-example
|
|
101
|
+
title="Real-World Example"
|
|
102
|
+
description="Pagination integrated with content display."
|
|
103
|
+
>
|
|
104
|
+
<div class="flex flex-col gap-6">
|
|
105
|
+
<div class="p-4 rounded-lg bg-card border-default">
|
|
106
|
+
<p class="text-sm text-foreground mb-2">
|
|
107
|
+
Showing page {{ paginationState().page }} of {{ paginationState().count }}
|
|
108
|
+
</p>
|
|
109
|
+
<p class="text-sm text-muted-foreground">
|
|
110
|
+
Items {{ (paginationState().page - 1) * 10 + 1 }}-{{ paginationState().page * 10 }} of
|
|
111
|
+
{{ paginationState().count * 10 }}
|
|
112
|
+
</p>
|
|
113
|
+
</div>
|
|
114
|
+
<modus-pagination
|
|
115
|
+
[count]="paginationState().count"
|
|
116
|
+
[page]="paginationState().page"
|
|
117
|
+
(pageChange)="handlePageChange($event)"
|
|
118
|
+
/>
|
|
119
|
+
</div>
|
|
120
|
+
</demo-example>
|
|
121
|
+
</demo-page>
|
|
122
|
+
`,
|
|
123
|
+
})
|
|
124
|
+
export class PaginationDemoPageComponent {
|
|
125
|
+
readonly paginationState = signal<{ page: number; count: number }>({ page: 2, count: 8 });
|
|
126
|
+
|
|
127
|
+
handlePageChange(change: IPageChange): void {
|
|
128
|
+
this.paginationState.update((state) => ({
|
|
129
|
+
...state,
|
|
130
|
+
page: change.newPage,
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { DemoPageComponent } from '../shared/demo-page.component';
|
|
4
|
+
import { DemoExampleComponent } from '../shared/demo-example.component';
|
|
5
|
+
import { ModusPanelComponent } from '../../components/modus-panel.component';
|
|
6
|
+
import { ModusButtonComponent } from '../../components/modus-button.component';
|
|
7
|
+
import { ModusMenuComponent } from '../../components/modus-menu.component';
|
|
8
|
+
import { ModusMenuItemComponent } from '../../components/modus-menu-item.component';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Demo page showcasing the Modus Panel component.
|
|
12
|
+
*/
|
|
13
|
+
@Component({
|
|
14
|
+
selector: 'app-panel-demo-page',
|
|
15
|
+
standalone: true,
|
|
16
|
+
imports: [
|
|
17
|
+
CommonModule,
|
|
18
|
+
DemoPageComponent,
|
|
19
|
+
DemoExampleComponent,
|
|
20
|
+
ModusPanelComponent,
|
|
21
|
+
ModusButtonComponent,
|
|
22
|
+
ModusMenuComponent,
|
|
23
|
+
ModusMenuItemComponent,
|
|
24
|
+
],
|
|
25
|
+
template: `
|
|
26
|
+
<demo-page
|
|
27
|
+
title="Modus Panel"
|
|
28
|
+
description="Panel is a layout component for organizing content with header, body, and footer sections. Ideal for side navigation, structured forms, and sectioned content areas."
|
|
29
|
+
>
|
|
30
|
+
<demo-example title="Basic Panel" description="A panel with header, body, and footer slots.">
|
|
31
|
+
<modus-panel width="280px" height="400px">
|
|
32
|
+
<div slot="header" class="p-4 border-bottom-default">
|
|
33
|
+
<div class="text-lg font-medium text-foreground">Panel Header</div>
|
|
34
|
+
</div>
|
|
35
|
+
<div slot="body" class="p-4">
|
|
36
|
+
<div class="text-sm text-foreground">
|
|
37
|
+
This is the body content of the panel. You can add any content here.
|
|
38
|
+
</div>
|
|
39
|
+
<div class="mt-4 text-sm text-muted-foreground">
|
|
40
|
+
Panels are great for organizing related content into distinct sections.
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
<div slot="footer" class="p-4 border-top-default flex gap-2">
|
|
44
|
+
<modus-button variant="outlined" color="secondary" size="sm">Cancel</modus-button>
|
|
45
|
+
<modus-button variant="filled" color="primary" size="sm">Save</modus-button>
|
|
46
|
+
</div>
|
|
47
|
+
</modus-panel>
|
|
48
|
+
</demo-example>
|
|
49
|
+
|
|
50
|
+
<demo-example
|
|
51
|
+
title="Floating Panel"
|
|
52
|
+
description="A floating panel with elevated shadow for overlay appearance."
|
|
53
|
+
>
|
|
54
|
+
<div class="p-8 bg-muted rounded-lg">
|
|
55
|
+
<modus-panel width="300px" height="auto" [floating]="true">
|
|
56
|
+
<div slot="header" class="p-4 border-bottom-default">
|
|
57
|
+
<div class="text-lg font-medium text-foreground">Quick Actions</div>
|
|
58
|
+
</div>
|
|
59
|
+
<div slot="body" class="p-4 flex flex-col gap-2">
|
|
60
|
+
<modus-button variant="outlined" color="primary" [fullWidth]="true" icon="add" iconPosition="left">
|
|
61
|
+
New Document
|
|
62
|
+
</modus-button>
|
|
63
|
+
<modus-button
|
|
64
|
+
variant="outlined"
|
|
65
|
+
color="primary"
|
|
66
|
+
[fullWidth]="true"
|
|
67
|
+
icon="upload"
|
|
68
|
+
iconPosition="left"
|
|
69
|
+
>
|
|
70
|
+
Upload File
|
|
71
|
+
</modus-button>
|
|
72
|
+
<modus-button
|
|
73
|
+
variant="outlined"
|
|
74
|
+
color="primary"
|
|
75
|
+
[fullWidth]="true"
|
|
76
|
+
icon="folder_new"
|
|
77
|
+
iconPosition="left"
|
|
78
|
+
>
|
|
79
|
+
Create Folder
|
|
80
|
+
</modus-button>
|
|
81
|
+
</div>
|
|
82
|
+
</modus-panel>
|
|
83
|
+
</div>
|
|
84
|
+
</demo-example>
|
|
85
|
+
|
|
86
|
+
<demo-example title="Navigation Panel" description="A panel configured as a side navigation.">
|
|
87
|
+
<modus-panel width="260px" height="450px">
|
|
88
|
+
<div slot="header" class="p-3 border-bottom-default flex items-center gap-2">
|
|
89
|
+
<i class="modus-icons text-lg text-foreground" aria-hidden="true">apps</i>
|
|
90
|
+
<div class="text-sm font-medium text-foreground">Application</div>
|
|
91
|
+
</div>
|
|
92
|
+
<div slot="body">
|
|
93
|
+
<modus-menu size="lg">
|
|
94
|
+
<modus-menu-item label="Dashboard" value="dashboard" startIcon="dashboard" />
|
|
95
|
+
<modus-menu-item label="Projects" value="projects" startIcon="folder_open" />
|
|
96
|
+
<modus-menu-item label="Team" value="team" startIcon="people_group" />
|
|
97
|
+
<modus-menu-item label="Calendar" value="calendar" startIcon="calendar" />
|
|
98
|
+
<modus-menu-item label="Documents" value="documents" startIcon="description" />
|
|
99
|
+
<modus-menu-item label="Reports" value="reports" startIcon="bar_graph" />
|
|
100
|
+
</modus-menu>
|
|
101
|
+
</div>
|
|
102
|
+
<div slot="footer" class="border-top-default">
|
|
103
|
+
<modus-menu>
|
|
104
|
+
<modus-menu-item label="Settings" value="settings" startIcon="settings" />
|
|
105
|
+
<modus-menu-item label="Help" value="help" startIcon="help" />
|
|
106
|
+
</modus-menu>
|
|
107
|
+
</div>
|
|
108
|
+
</modus-panel>
|
|
109
|
+
</demo-example>
|
|
110
|
+
|
|
111
|
+
<demo-example title="Body-Only Panel" description="A panel with only body content.">
|
|
112
|
+
<modus-panel width="250px" height="auto">
|
|
113
|
+
<modus-menu size="lg">
|
|
114
|
+
<modus-menu-item label="Dashboard" value="dashboard" />
|
|
115
|
+
<modus-menu-item label="Projects" value="projects" />
|
|
116
|
+
<modus-menu-item label="Team" value="team" />
|
|
117
|
+
<modus-menu-item label="Calendar" value="calendar" />
|
|
118
|
+
</modus-menu>
|
|
119
|
+
</modus-panel>
|
|
120
|
+
</demo-example>
|
|
121
|
+
|
|
122
|
+
<demo-example title="Panel Dimensions" description="Panels can have custom width and height values.">
|
|
123
|
+
<div class="flex flex-wrap gap-4">
|
|
124
|
+
<modus-panel width="200px" height="200px">
|
|
125
|
+
<div slot="header" class="p-3 border-bottom-default text-sm font-medium text-foreground">
|
|
126
|
+
200x200
|
|
127
|
+
</div>
|
|
128
|
+
<div slot="body" class="p-3 text-xs text-muted-foreground">Small square panel</div>
|
|
129
|
+
</modus-panel>
|
|
130
|
+
<modus-panel width="300px" height="200px">
|
|
131
|
+
<div slot="header" class="p-3 border-bottom-default text-sm font-medium text-foreground">
|
|
132
|
+
300x200
|
|
133
|
+
</div>
|
|
134
|
+
<div slot="body" class="p-3 text-xs text-muted-foreground">Wide panel</div>
|
|
135
|
+
</modus-panel>
|
|
136
|
+
<modus-panel width="200px" height="300px">
|
|
137
|
+
<div slot="header" class="p-3 border-bottom-default text-sm font-medium text-foreground">
|
|
138
|
+
200x300
|
|
139
|
+
</div>
|
|
140
|
+
<div slot="body" class="p-3 text-xs text-muted-foreground">Tall panel</div>
|
|
141
|
+
</modus-panel>
|
|
142
|
+
</div>
|
|
143
|
+
</demo-example>
|
|
144
|
+
|
|
145
|
+
<demo-example title="Auto Height Panel" description="Panel with automatic height based on content.">
|
|
146
|
+
<modus-panel width="300px" height="auto">
|
|
147
|
+
<div slot="header" class="p-4 border-bottom-default">
|
|
148
|
+
<div class="text-lg font-medium text-foreground">Auto Height</div>
|
|
149
|
+
</div>
|
|
150
|
+
<div slot="body" class="p-4">
|
|
151
|
+
<div class="text-sm text-foreground mb-4">This panel grows to fit its content.</div>
|
|
152
|
+
<div class="text-sm text-muted-foreground space-y-2">
|
|
153
|
+
<div>Item 1 - First item in the list</div>
|
|
154
|
+
<div>Item 2 - Second item in the list</div>
|
|
155
|
+
<div>Item 3 - Third item in the list</div>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
<div slot="footer" class="p-4 border-top-default">
|
|
159
|
+
<modus-button variant="filled" color="primary" [fullWidth]="true">Submit</modus-button>
|
|
160
|
+
</div>
|
|
161
|
+
</modus-panel>
|
|
162
|
+
</demo-example>
|
|
163
|
+
|
|
164
|
+
<demo-example title="Custom Content Panel" description="Panel with rich custom content in all slots.">
|
|
165
|
+
<modus-panel width="320px" height="auto">
|
|
166
|
+
<div slot="header" class="p-4 bg-primary">
|
|
167
|
+
<div class="text-lg font-semibold text-primary-foreground">Featured Content</div>
|
|
168
|
+
<div class="text-sm text-primary-foreground">Latest updates</div>
|
|
169
|
+
</div>
|
|
170
|
+
<div slot="body" class="p-4">
|
|
171
|
+
<div class="aspect-video bg-muted rounded-lg mb-4 flex items-center justify-center">
|
|
172
|
+
<i class="modus-icons text-4xl text-muted-foreground" aria-hidden="true">image</i>
|
|
173
|
+
</div>
|
|
174
|
+
<div class="text-base font-medium text-foreground mb-2">Article Title</div>
|
|
175
|
+
<div class="text-sm text-muted-foreground mb-4">
|
|
176
|
+
This is a brief description of the article content that gives readers an idea of what to
|
|
177
|
+
expect.
|
|
178
|
+
</div>
|
|
179
|
+
<div class="flex gap-2">
|
|
180
|
+
<div class="px-2 py-1 bg-muted rounded text-xs text-muted-foreground">Tag 1</div>
|
|
181
|
+
<div class="px-2 py-1 bg-muted rounded text-xs text-muted-foreground">Tag 2</div>
|
|
182
|
+
</div>
|
|
183
|
+
</div>
|
|
184
|
+
<div slot="footer" class="p-4 border-top-default flex justify-between items-center">
|
|
185
|
+
<div class="text-xs text-muted-foreground">5 min read</div>
|
|
186
|
+
<modus-button variant="borderless" color="primary" size="sm">Read More</modus-button>
|
|
187
|
+
</div>
|
|
188
|
+
</modus-panel>
|
|
189
|
+
</demo-example>
|
|
190
|
+
|
|
191
|
+
<demo-example title="Full Width Panel" description="Panel that spans the full width of its container.">
|
|
192
|
+
<modus-panel width="100%" height="auto">
|
|
193
|
+
<div slot="header" class="p-4 border-bottom-default flex justify-between items-center">
|
|
194
|
+
<div class="text-lg font-medium text-foreground">Full Width Panel</div>
|
|
195
|
+
<modus-button
|
|
196
|
+
variant="outlined"
|
|
197
|
+
color="secondary"
|
|
198
|
+
size="sm"
|
|
199
|
+
icon="close"
|
|
200
|
+
iconPosition="only"
|
|
201
|
+
ariaLabel="Close"
|
|
202
|
+
/>
|
|
203
|
+
</div>
|
|
204
|
+
<div slot="body" class="p-4">
|
|
205
|
+
<div class="text-sm text-foreground">
|
|
206
|
+
This panel uses 100% width to span its container. Useful for responsive layouts where the
|
|
207
|
+
panel should adapt to its parent element.
|
|
208
|
+
</div>
|
|
209
|
+
</div>
|
|
210
|
+
</modus-panel>
|
|
211
|
+
</demo-example>
|
|
212
|
+
|
|
213
|
+
<demo-example
|
|
214
|
+
title="Floating vs Non-Floating"
|
|
215
|
+
description="Comparison of floating and non-floating panel styles."
|
|
216
|
+
>
|
|
217
|
+
<div class="flex flex-wrap gap-6 p-6 bg-muted rounded-lg">
|
|
218
|
+
<div class="flex flex-col gap-2">
|
|
219
|
+
<div class="text-sm text-muted-foreground">Non-Floating</div>
|
|
220
|
+
<modus-panel width="200px" height="150px">
|
|
221
|
+
<div slot="body" class="p-4 text-sm text-foreground">Standard panel without shadow</div>
|
|
222
|
+
</modus-panel>
|
|
223
|
+
</div>
|
|
224
|
+
<div class="flex flex-col gap-2">
|
|
225
|
+
<div class="text-sm text-muted-foreground">Floating</div>
|
|
226
|
+
<modus-panel width="200px" height="150px" [floating]="true">
|
|
227
|
+
<div slot="body" class="p-4 text-sm text-foreground">Elevated panel with shadow</div>
|
|
228
|
+
</modus-panel>
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
</demo-example>
|
|
232
|
+
</demo-page>
|
|
233
|
+
`,
|
|
234
|
+
})
|
|
235
|
+
export class PanelDemoPageComponent {}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { Component, signal } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { DemoPageComponent } from '../shared/demo-page.component';
|
|
4
|
+
import { DemoExampleComponent } from '../shared/demo-example.component';
|
|
5
|
+
import { ModusProgressComponent } from '../../components/modus-progress.component';
|
|
6
|
+
import { ModusButtonComponent } from '../../components/modus-button.component';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Demo page showcasing the Modus Progress component.
|
|
10
|
+
*
|
|
11
|
+
* Demonstrates progress features including:
|
|
12
|
+
* - Basic progress bars
|
|
13
|
+
* - Different values
|
|
14
|
+
* - Radial progress
|
|
15
|
+
* - Indeterminate progress
|
|
16
|
+
* - With labels
|
|
17
|
+
*/
|
|
18
|
+
@Component({
|
|
19
|
+
selector: 'app-progress-demo-page',
|
|
20
|
+
standalone: true,
|
|
21
|
+
imports: [
|
|
22
|
+
CommonModule,
|
|
23
|
+
DemoPageComponent,
|
|
24
|
+
DemoExampleComponent,
|
|
25
|
+
ModusProgressComponent,
|
|
26
|
+
ModusButtonComponent,
|
|
27
|
+
],
|
|
28
|
+
template: `
|
|
29
|
+
<demo-page
|
|
30
|
+
title="Modus Progress"
|
|
31
|
+
description="Progress components indicate the completion status of a task or process. Use progress bars for file uploads, form completion, or any process with measurable progress."
|
|
32
|
+
>
|
|
33
|
+
<demo-example
|
|
34
|
+
title="Basic Progress Bar"
|
|
35
|
+
description="Simple progress bars with different values."
|
|
36
|
+
>
|
|
37
|
+
<div class="flex flex-col gap-6">
|
|
38
|
+
<div class="flex flex-col gap-2">
|
|
39
|
+
<p class="text-sm text-muted-foreground">0%</p>
|
|
40
|
+
<modus-progress [value]="0" />
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
<div class="flex flex-col gap-2">
|
|
44
|
+
<p class="text-sm text-muted-foreground">25%</p>
|
|
45
|
+
<modus-progress [value]="25" />
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
<div class="flex flex-col gap-2">
|
|
49
|
+
<p class="text-sm text-muted-foreground">50%</p>
|
|
50
|
+
<modus-progress [value]="50" />
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<div class="flex flex-col gap-2">
|
|
54
|
+
<p class="text-sm text-muted-foreground">75%</p>
|
|
55
|
+
<modus-progress [value]="75" />
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<div class="flex flex-col gap-2">
|
|
59
|
+
<p class="text-sm text-muted-foreground">100%</p>
|
|
60
|
+
<modus-progress [value]="100" />
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
</demo-example>
|
|
64
|
+
|
|
65
|
+
<demo-example title="Progress with Labels" description="Progress bars with custom labels.">
|
|
66
|
+
<div class="flex flex-col gap-6">
|
|
67
|
+
<modus-progress [value]="45" [label]="'45% complete'" />
|
|
68
|
+
<modus-progress [value]="72" [label]="'72%'" />
|
|
69
|
+
<modus-progress [value]="90" [label]="'Almost done'" />
|
|
70
|
+
</div>
|
|
71
|
+
</demo-example>
|
|
72
|
+
|
|
73
|
+
<demo-example
|
|
74
|
+
title="Radial Progress"
|
|
75
|
+
description="Radial progress indicators for compact spaces."
|
|
76
|
+
>
|
|
77
|
+
<div class="flex flex-wrap gap-6">
|
|
78
|
+
<div class="flex flex-col gap-2">
|
|
79
|
+
<p class="text-sm text-muted-foreground">25%</p>
|
|
80
|
+
<modus-progress variant="radial" [value]="25" [label]="'25%'" />
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
<div class="flex flex-col gap-2">
|
|
84
|
+
<p class="text-sm text-muted-foreground">50%</p>
|
|
85
|
+
<modus-progress variant="radial" [value]="50" [label]="'50%'" />
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<div class="flex flex-col gap-2">
|
|
89
|
+
<p class="text-sm text-muted-foreground">75%</p>
|
|
90
|
+
<modus-progress variant="radial" [value]="75" [label]="'75%'" />
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
<div class="flex flex-col gap-2">
|
|
94
|
+
<p class="text-sm text-muted-foreground">100%</p>
|
|
95
|
+
<modus-progress variant="radial" [value]="100" [label]="'100%'" />
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
</demo-example>
|
|
99
|
+
|
|
100
|
+
<demo-example
|
|
101
|
+
title="Indeterminate Progress"
|
|
102
|
+
description="Progress bars for tasks with unknown duration."
|
|
103
|
+
>
|
|
104
|
+
<div class="flex flex-col gap-6">
|
|
105
|
+
<modus-progress [indeterminate]="true" />
|
|
106
|
+
<p class="text-sm text-muted-foreground">
|
|
107
|
+
Use indeterminate progress when the duration of a task is unknown.
|
|
108
|
+
</p>
|
|
109
|
+
</div>
|
|
110
|
+
</demo-example>
|
|
111
|
+
|
|
112
|
+
<demo-example
|
|
113
|
+
title="Interactive Example"
|
|
114
|
+
description="Dynamic progress bar that updates over time."
|
|
115
|
+
>
|
|
116
|
+
<div class="flex flex-col gap-6">
|
|
117
|
+
<modus-progress [value]="progressValue()" [label]="progressLabel()" />
|
|
118
|
+
<div class="flex gap-2">
|
|
119
|
+
<modus-button color="primary" size="sm" (buttonClick)="startProgress()">
|
|
120
|
+
Start Progress
|
|
121
|
+
</modus-button>
|
|
122
|
+
<modus-button color="secondary" size="sm" (buttonClick)="resetProgress()">
|
|
123
|
+
Reset
|
|
124
|
+
</modus-button>
|
|
125
|
+
</div>
|
|
126
|
+
<div class="p-4 rounded-lg bg-card border-default">
|
|
127
|
+
<p class="text-sm text-foreground">
|
|
128
|
+
<strong>Current Value:</strong> {{ progressValue() }}%
|
|
129
|
+
</p>
|
|
130
|
+
</div>
|
|
131
|
+
</div>
|
|
132
|
+
</demo-example>
|
|
133
|
+
</demo-page>
|
|
134
|
+
`,
|
|
135
|
+
})
|
|
136
|
+
export class ProgressDemoPageComponent {
|
|
137
|
+
readonly progressValue = signal<number>(0);
|
|
138
|
+
private progressInterval: ReturnType<typeof setInterval> | null = null;
|
|
139
|
+
|
|
140
|
+
readonly progressLabel = signal<string>('0%');
|
|
141
|
+
|
|
142
|
+
startProgress(): void {
|
|
143
|
+
if (this.progressInterval) {
|
|
144
|
+
clearInterval(this.progressInterval);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
this.progressValue.set(0);
|
|
148
|
+
this.progressInterval = setInterval(() => {
|
|
149
|
+
this.progressValue.update((value) => {
|
|
150
|
+
const newValue = Math.min(value + 5, 100);
|
|
151
|
+
this.progressLabel.set(`${newValue}%`);
|
|
152
|
+
if (newValue >= 100 && this.progressInterval) {
|
|
153
|
+
clearInterval(this.progressInterval);
|
|
154
|
+
this.progressInterval = null;
|
|
155
|
+
}
|
|
156
|
+
return newValue;
|
|
157
|
+
});
|
|
158
|
+
}, 200);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
resetProgress(): void {
|
|
162
|
+
if (this.progressInterval) {
|
|
163
|
+
clearInterval(this.progressInterval);
|
|
164
|
+
this.progressInterval = null;
|
|
165
|
+
}
|
|
166
|
+
this.progressValue.set(0);
|
|
167
|
+
this.progressLabel.set('0%');
|
|
168
|
+
}
|
|
169
|
+
}
|