@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.
Files changed (450) hide show
  1. package/README.md +191 -0
  2. package/bin/create-trimble-app.js +9 -0
  3. package/package.json +67 -0
  4. package/src/cli.js +134 -0
  5. package/src/frameworks.js +28 -0
  6. package/src/scaffold.js +209 -0
  7. package/src/utils/file.js +47 -0
  8. package/src/utils/git.js +140 -0
  9. package/src/utils/install.js +25 -0
  10. package/src/utils/logger.js +124 -0
  11. package/templates/angular/.cursor/commands/remove-dev-content.md +394 -0
  12. package/templates/angular/.cursor/mcp.json +13 -0
  13. package/templates/angular/.cursor/rules/modus-angular-20.mdc +82 -0
  14. package/templates/angular/.cursor/rules/modus-angular-accordion-state-management-short.mdc +45 -0
  15. package/templates/angular/.cursor/rules/modus-angular-accordion-state-management.mdc +322 -0
  16. package/templates/angular/.cursor/rules/modus-angular-best-practices.mdc +472 -0
  17. package/templates/angular/.cursor/rules/modus-angular-border-usage-short.mdc +48 -0
  18. package/templates/angular/.cursor/rules/modus-angular-border-usage.mdc +286 -0
  19. package/templates/angular/.cursor/rules/modus-angular-button-group-usage-short.mdc +47 -0
  20. package/templates/angular/.cursor/rules/modus-angular-button-group-usage.mdc +263 -0
  21. package/templates/angular/.cursor/rules/modus-angular-checkbox-value-inversion-short.mdc +36 -0
  22. package/templates/angular/.cursor/rules/modus-angular-checkbox-value-inversion.mdc +92 -0
  23. package/templates/angular/.cursor/rules/modus-angular-chrome-devtools-testing-short.mdc +34 -0
  24. package/templates/angular/.cursor/rules/modus-angular-chrome-devtools-testing.mdc +185 -0
  25. package/templates/angular/.cursor/rules/modus-angular-color-usage-short.mdc +56 -0
  26. package/templates/angular/.cursor/rules/modus-angular-color-usage.mdc +208 -0
  27. package/templates/angular/.cursor/rules/modus-angular-components-reference.mdc +114 -0
  28. package/templates/angular/.cursor/rules/modus-angular-design-system.mdc +273 -0
  29. package/templates/angular/.cursor/rules/modus-angular-development-workflow-short.mdc +43 -0
  30. package/templates/angular/.cursor/rules/modus-angular-development-workflow.mdc +145 -0
  31. package/templates/angular/.cursor/rules/modus-angular-essentials.mdc +272 -0
  32. package/templates/angular/.cursor/rules/modus-angular-forms-validation-short.mdc +56 -0
  33. package/templates/angular/.cursor/rules/modus-angular-forms-validation.mdc +124 -0
  34. package/templates/angular/.cursor/rules/modus-angular-icon-names.mdc +70 -0
  35. package/templates/angular/.cursor/rules/modus-angular-icons-short.mdc +40 -0
  36. package/templates/angular/.cursor/rules/modus-angular-icons.mdc +137 -0
  37. package/templates/angular/.cursor/rules/modus-angular-implementation-guides-short.mdc +36 -0
  38. package/templates/angular/.cursor/rules/modus-angular-implementation-guides.mdc +301 -0
  39. package/templates/angular/.cursor/rules/modus-angular-integration-short.mdc +60 -0
  40. package/templates/angular/.cursor/rules/modus-angular-integration.mdc +1096 -0
  41. package/templates/angular/.cursor/rules/modus-angular-master.mdc +164 -0
  42. package/templates/angular/.cursor/rules/modus-angular-modal-usage-short.mdc +51 -0
  43. package/templates/angular/.cursor/rules/modus-angular-modal-usage.mdc +115 -0
  44. package/templates/angular/.cursor/rules/modus-angular-navbar-usage-short.mdc +49 -0
  45. package/templates/angular/.cursor/rules/modus-angular-navbar-usage.mdc +146 -0
  46. package/templates/angular/.cursor/rules/modus-angular-no-emojis.mdc +66 -0
  47. package/templates/angular/.cursor/rules/modus-angular-opacity-utilities-short.mdc +43 -0
  48. package/templates/angular/.cursor/rules/modus-angular-opacity-utilities.mdc +160 -0
  49. package/templates/angular/.cursor/rules/modus-angular-select-vs-dropdown-menu-short.mdc +51 -0
  50. package/templates/angular/.cursor/rules/modus-angular-select-vs-dropdown-menu.mdc +83 -0
  51. package/templates/angular/.cursor/rules/modus-angular-semantic-html-short.mdc +36 -0
  52. package/templates/angular/.cursor/rules/modus-angular-semantic-html.mdc +81 -0
  53. package/templates/angular/.cursor/rules/modus-angular-side-navigation-usage-short.mdc +50 -0
  54. package/templates/angular/.cursor/rules/modus-angular-side-navigation-usage.mdc +136 -0
  55. package/templates/angular/.cursor/rules/modus-angular-table-usage-short.mdc +52 -0
  56. package/templates/angular/.cursor/rules/modus-angular-table-usage.mdc +151 -0
  57. package/templates/angular/.cursor/rules/modus-angular-tailwind-usage-short.mdc +44 -0
  58. package/templates/angular/.cursor/rules/modus-angular-tailwind-usage.mdc +242 -0
  59. package/templates/angular/.cursor/rules/modus-angular-themes-short.mdc +54 -0
  60. package/templates/angular/.cursor/rules/modus-angular-themes.mdc +222 -0
  61. package/templates/angular/.cursor/rules/modus-angular-utility-panel-usage-short.mdc +52 -0
  62. package/templates/angular/.cursor/rules/modus-angular-utility-panel-usage.mdc +130 -0
  63. package/templates/angular/.cursor/rules/ux/gestalt-laws-detailed.mdc +514 -0
  64. package/templates/angular/.cursor/rules/ux/ux-ui-foundations.mdc +235 -0
  65. package/templates/angular/.cursor/skills/run-lint-checks/SKILL.md +169 -0
  66. package/templates/angular/.editorconfig +17 -0
  67. package/templates/angular/.github/dependabot.yml +19 -0
  68. package/templates/angular/.github/workflows/a11y-check.yml +135 -0
  69. package/templates/angular/.github/workflows/ci.yml +44 -0
  70. package/templates/angular/.husky/pre-commit +32 -0
  71. package/templates/angular/.postcssrc.json +5 -0
  72. package/templates/angular/.vscode/extensions.json +4 -0
  73. package/templates/angular/.vscode/launch.json +20 -0
  74. package/templates/angular/.vscode/tasks.json +42 -0
  75. package/templates/angular/CLAUDE.md +148 -0
  76. package/templates/angular/README.md +92 -0
  77. package/templates/angular/amplify.yml +25 -0
  78. package/templates/angular/angular.json +106 -0
  79. package/templates/angular/data/modusIcons.ts +861 -0
  80. package/templates/angular/package-lock.json +11030 -0
  81. package/templates/angular/package.json +66 -0
  82. package/templates/angular/public/angular-icon.svg +12 -0
  83. package/templates/angular/public/favicon.ico +0 -0
  84. package/templates/angular/public/modus-icons.css +49 -0
  85. package/templates/angular/public/vite.svg +1 -0
  86. package/templates/angular/scripts/README.md +410 -0
  87. package/templates/angular/scripts/check-border-violations.js +352 -0
  88. package/templates/angular/scripts/check-icon-names.js +402 -0
  89. package/templates/angular/scripts/check-inline-styles.js +292 -0
  90. package/templates/angular/scripts/check-modus-colors.js +282 -0
  91. package/templates/angular/scripts/check-modus-icons.js +263 -0
  92. package/templates/angular/scripts/check-opacity-utilities.js +426 -0
  93. package/templates/angular/scripts/check-semantic-html.js +452 -0
  94. package/templates/angular/scripts/check-typescript.js +109 -0
  95. package/templates/angular/src/app/app.config.ts +29 -0
  96. package/templates/angular/src/app/app.css +0 -0
  97. package/templates/angular/src/app/app.html +4 -0
  98. package/templates/angular/src/app/app.routes.ts +351 -0
  99. package/templates/angular/src/app/app.spec.ts +27 -0
  100. package/templates/angular/src/app/app.ts +47 -0
  101. package/templates/angular/src/app/components/README.md +77 -0
  102. package/templates/angular/src/app/components/index.ts +53 -0
  103. package/templates/angular/src/app/components/modus-accordion.component.ts +50 -0
  104. package/templates/angular/src/app/components/modus-alert.component.ts +133 -0
  105. package/templates/angular/src/app/components/modus-autocomplete.component.ts +262 -0
  106. package/templates/angular/src/app/components/modus-avatar.component.ts +75 -0
  107. package/templates/angular/src/app/components/modus-badge.component.ts +84 -0
  108. package/templates/angular/src/app/components/modus-breadcrumbs.component.ts +65 -0
  109. package/templates/angular/src/app/components/modus-button-group.component.ts +82 -0
  110. package/templates/angular/src/app/components/modus-button.component.ts +292 -0
  111. package/templates/angular/src/app/components/modus-card.component.ts +73 -0
  112. package/templates/angular/src/app/components/modus-checkbox.component.ts +117 -0
  113. package/templates/angular/src/app/components/modus-chip.component.ts +97 -0
  114. package/templates/angular/src/app/components/modus-collapse.component.ts +118 -0
  115. package/templates/angular/src/app/components/modus-date.component.ts +165 -0
  116. package/templates/angular/src/app/components/modus-dropdown-menu.component.ts +108 -0
  117. package/templates/angular/src/app/components/modus-file-dropzone.component.ts +121 -0
  118. package/templates/angular/src/app/components/modus-handle.component.ts +96 -0
  119. package/templates/angular/src/app/components/modus-icon.component.ts +81 -0
  120. package/templates/angular/src/app/components/modus-input-feedback.component.ts +54 -0
  121. package/templates/angular/src/app/components/modus-input-label.component.ts +62 -0
  122. package/templates/angular/src/app/components/modus-loader.component.ts +48 -0
  123. package/templates/angular/src/app/components/modus-logo.component.ts +115 -0
  124. package/templates/angular/src/app/components/modus-menu-item.component.ts +116 -0
  125. package/templates/angular/src/app/components/modus-menu.component.ts +58 -0
  126. package/templates/angular/src/app/components/modus-modal.component.ts +70 -0
  127. package/templates/angular/src/app/components/modus-navbar.component.ts +303 -0
  128. package/templates/angular/src/app/components/modus-number-input.component.ts +174 -0
  129. package/templates/angular/src/app/components/modus-pagination.component.ts +74 -0
  130. package/templates/angular/src/app/components/modus-panel.component.ts +61 -0
  131. package/templates/angular/src/app/components/modus-progress.component.ts +62 -0
  132. package/templates/angular/src/app/components/modus-radio.component.ts +102 -0
  133. package/templates/angular/src/app/components/modus-rating.component.ts +80 -0
  134. package/templates/angular/src/app/components/modus-select.component.ts +131 -0
  135. package/templates/angular/src/app/components/modus-side-navigation.component.ts +90 -0
  136. package/templates/angular/src/app/components/modus-skeleton.component.ts +54 -0
  137. package/templates/angular/src/app/components/modus-slider.component.ts +132 -0
  138. package/templates/angular/src/app/components/modus-stepper.component.ts +65 -0
  139. package/templates/angular/src/app/components/modus-switch.component.ts +118 -0
  140. package/templates/angular/src/app/components/modus-table.component.ts +204 -0
  141. package/templates/angular/src/app/components/modus-tabs.component.ts +82 -0
  142. package/templates/angular/src/app/components/modus-text-input.component.ts +221 -0
  143. package/templates/angular/src/app/components/modus-textarea.component.ts +168 -0
  144. package/templates/angular/src/app/components/modus-theme-switcher.component.ts +45 -0
  145. package/templates/angular/src/app/components/modus-time-input.component.ts +172 -0
  146. package/templates/angular/src/app/components/modus-toast.component.ts +63 -0
  147. package/templates/angular/src/app/components/modus-toolbar.component.ts +43 -0
  148. package/templates/angular/src/app/components/modus-tooltip.component.ts +83 -0
  149. package/templates/angular/src/app/components/modus-typography.component.ts +79 -0
  150. package/templates/angular/src/app/components/modus-utility-panel.component.ts +275 -0
  151. package/templates/angular/src/app/components/theme-demo.component.ts +1242 -0
  152. package/templates/angular/src/app/data/component-demos.ts +360 -0
  153. package/templates/angular/src/app/data/modus-icons.ts +806 -0
  154. package/templates/angular/src/app/demos/accordion/accordion-demo.component.ts +212 -0
  155. package/templates/angular/src/app/demos/alert/alert-demo.component.ts +108 -0
  156. package/templates/angular/src/app/demos/autocomplete/autocomplete-demo.component.ts +174 -0
  157. package/templates/angular/src/app/demos/avatar/avatar-demo.component.ts +149 -0
  158. package/templates/angular/src/app/demos/badge/badge-demo.component.ts +148 -0
  159. package/templates/angular/src/app/demos/breadcrumbs/breadcrumbs-demo.component.ts +96 -0
  160. package/templates/angular/src/app/demos/button/button-demo.component.ts +256 -0
  161. package/templates/angular/src/app/demos/button-group/button-group-demo.component.ts +215 -0
  162. package/templates/angular/src/app/demos/card/card-demo.component.ts +180 -0
  163. package/templates/angular/src/app/demos/checkbox/checkbox-demo.component.ts +71 -0
  164. package/templates/angular/src/app/demos/chip/chip-demo.component.ts +183 -0
  165. package/templates/angular/src/app/demos/date/date-demo.component.ts +193 -0
  166. package/templates/angular/src/app/demos/dropdown/dropdown-demo.component.ts +196 -0
  167. package/templates/angular/src/app/demos/file-dropzone/file-dropzone-demo.component.ts +176 -0
  168. package/templates/angular/src/app/demos/handle/handle-demo.component.ts +265 -0
  169. package/templates/angular/src/app/demos/icon/icon-demo.component.ts +65 -0
  170. package/templates/angular/src/app/demos/input-feedback/input-feedback-demo.component.ts +189 -0
  171. package/templates/angular/src/app/demos/input-label/input-label-demo.component.ts +330 -0
  172. package/templates/angular/src/app/demos/loader/loader-demo.component.ts +143 -0
  173. package/templates/angular/src/app/demos/logo/logo-demo.component.ts +191 -0
  174. package/templates/angular/src/app/demos/menu/menu-demo.component.ts +72 -0
  175. package/templates/angular/src/app/demos/modal/modal-demo.component.ts +278 -0
  176. package/templates/angular/src/app/demos/navbar/navbar-demo.component.ts +135 -0
  177. package/templates/angular/src/app/demos/number-input/number-input-demo.component.ts +175 -0
  178. package/templates/angular/src/app/demos/pagination/pagination-demo.component.ts +134 -0
  179. package/templates/angular/src/app/demos/panel/panel-demo.component.ts +235 -0
  180. package/templates/angular/src/app/demos/progress/progress-demo.component.ts +169 -0
  181. package/templates/angular/src/app/demos/radio/radio-demo.component.ts +161 -0
  182. package/templates/angular/src/app/demos/rating/rating-demo.component.ts +97 -0
  183. package/templates/angular/src/app/demos/select/select-demo.component.ts +107 -0
  184. package/templates/angular/src/app/demos/shared/demo-example-clean.component.ts +41 -0
  185. package/templates/angular/src/app/demos/shared/demo-example.component.ts +42 -0
  186. package/templates/angular/src/app/demos/shared/demo-page.component.ts +97 -0
  187. package/templates/angular/src/app/demos/shared/index.ts +3 -0
  188. package/templates/angular/src/app/demos/side-navigation/side-navigation-demo.component.ts +524 -0
  189. package/templates/angular/src/app/demos/skeleton/skeleton-demo.component.ts +112 -0
  190. package/templates/angular/src/app/demos/slider/slider-demo.component.ts +76 -0
  191. package/templates/angular/src/app/demos/stepper/stepper-demo.component.ts +79 -0
  192. package/templates/angular/src/app/demos/switch/switch-demo.component.ts +113 -0
  193. package/templates/angular/src/app/demos/table/table-demo.component.ts +405 -0
  194. package/templates/angular/src/app/demos/tabs/tabs-demo.component.ts +318 -0
  195. package/templates/angular/src/app/demos/text-input/text-input-demo.component.ts +160 -0
  196. package/templates/angular/src/app/demos/textarea/textarea-demo.component.ts +95 -0
  197. package/templates/angular/src/app/demos/theme-switcher/theme-switcher-demo.component.ts +38 -0
  198. package/templates/angular/src/app/demos/time-input/time-input-demo.component.ts +130 -0
  199. package/templates/angular/src/app/demos/toast/toast-demo.component.ts +258 -0
  200. package/templates/angular/src/app/demos/toolbar/toolbar-demo.component.ts +54 -0
  201. package/templates/angular/src/app/demos/tooltip/tooltip-demo.component.ts +163 -0
  202. package/templates/angular/src/app/demos/utility-panel/utility-panel-demo.component.ts +197 -0
  203. package/templates/angular/src/app/dev/dev-config.ts +119 -0
  204. package/templates/angular/src/app/dev/dev-panel/dev-panel.component.ts +215 -0
  205. package/templates/angular/src/app/dev/dev-panel.service.ts +63 -0
  206. package/templates/angular/src/app/dev/index.ts +8 -0
  207. package/templates/angular/src/app/dev/theme-switcher-dropdown/theme-switcher-dropdown.component.ts +134 -0
  208. package/templates/angular/src/app/dev-pages/color-palette/color-palette.component.ts +229 -0
  209. package/templates/angular/src/app/dev-pages/components-gallery/components-gallery.component.ts +486 -0
  210. package/templates/angular/src/app/dev-pages/icons/icons.component.ts +149 -0
  211. package/templates/angular/src/app/pages/home/home.component.ts +251 -0
  212. package/templates/angular/src/app/services/README.md +57 -0
  213. package/templates/angular/src/app/services/theme.service.ts +163 -0
  214. package/templates/angular/src/environments/environment.development.ts +8 -0
  215. package/templates/angular/src/environments/environment.ts +8 -0
  216. package/templates/angular/src/index.html +14 -0
  217. package/templates/angular/src/main.ts +6 -0
  218. package/templates/angular/src/styles.css +1328 -0
  219. package/templates/angular/tsconfig.app.json +15 -0
  220. package/templates/angular/tsconfig.json +35 -0
  221. package/templates/angular/tsconfig.spec.json +14 -0
  222. package/templates/config.json +23 -0
  223. package/templates/react/.cursor/commands/remove-dev-content.md +311 -0
  224. package/templates/react/.cursor/mcp.json +13 -0
  225. package/templates/react/.cursor/rules/README.md +240 -0
  226. package/templates/react/.cursor/rules/border-usage-guidelines-short.mdc +22 -0
  227. package/templates/react/.cursor/rules/border-usage-guidelines.mdc +380 -0
  228. package/templates/react/.cursor/rules/chrome-devtools-testing-react-short.mdc +23 -0
  229. package/templates/react/.cursor/rules/development-workflow-react-short.mdc +23 -0
  230. package/templates/react/.cursor/rules/development-workflow-react.mdc +292 -0
  231. package/templates/react/.cursor/rules/implementation-guides-react-short.mdc +23 -0
  232. package/templates/react/.cursor/rules/implementation-guides-react.mdc +446 -0
  233. package/templates/react/.cursor/rules/modus-accordion-state-management-react-short.mdc +23 -0
  234. package/templates/react/.cursor/rules/modus-accordion-state-management-react.mdc +445 -0
  235. package/templates/react/.cursor/rules/modus-button-group-usage-react-short.mdc +23 -0
  236. package/templates/react/.cursor/rules/modus-button-group-usage-react.mdc +117 -0
  237. package/templates/react/.cursor/rules/modus-checkbox-value-inversion-react-short.mdc +23 -0
  238. package/templates/react/.cursor/rules/modus-checkbox-value-inversion-react.mdc +492 -0
  239. package/templates/react/.cursor/rules/modus-color-usage-react-short.mdc +23 -0
  240. package/templates/react/.cursor/rules/modus-color-usage-react.mdc +420 -0
  241. package/templates/react/.cursor/rules/modus-components-reference.mdc +366 -0
  242. package/templates/react/.cursor/rules/modus-icon-names.mdc +63 -0
  243. package/templates/react/.cursor/rules/modus-icons-react-short.mdc +24 -0
  244. package/templates/react/.cursor/rules/modus-icons-react.mdc +402 -0
  245. package/templates/react/.cursor/rules/modus-modal-implementation-react-short.mdc +23 -0
  246. package/templates/react/.cursor/rules/modus-modal-implementation-react.mdc +831 -0
  247. package/templates/react/.cursor/rules/modus-navbar-side-navigation-react-short.mdc +23 -0
  248. package/templates/react/.cursor/rules/modus-navbar-side-navigation-react.mdc +247 -0
  249. package/templates/react/.cursor/rules/modus-no-emojis-react-short.mdc +23 -0
  250. package/templates/react/.cursor/rules/modus-opacity-utilities-react-short.mdc +70 -0
  251. package/templates/react/.cursor/rules/modus-opacity-utilities-react.mdc +208 -0
  252. package/templates/react/.cursor/rules/modus-react-best-practices-short.mdc +23 -0
  253. package/templates/react/.cursor/rules/modus-react-best-practices.mdc +508 -0
  254. package/templates/react/.cursor/rules/modus-react-essentials.mdc +209 -0
  255. package/templates/react/.cursor/rules/modus-react-integration-short.mdc +23 -0
  256. package/templates/react/.cursor/rules/modus-react-integration.mdc +509 -0
  257. package/templates/react/.cursor/rules/modus-react-key-warnings-short.mdc +23 -0
  258. package/templates/react/.cursor/rules/modus-react-key-warnings.mdc +805 -0
  259. package/templates/react/.cursor/rules/modus-react-master.mdc +160 -0
  260. package/templates/react/.cursor/rules/modus-select-vs-dropdown-menu-react-short.mdc +23 -0
  261. package/templates/react/.cursor/rules/modus-select-vs-dropdown-menu-react.mdc +442 -0
  262. package/templates/react/.cursor/rules/modus-semantic-html-react-short.mdc +23 -0
  263. package/templates/react/.cursor/rules/modus-semantic-html-react.mdc +427 -0
  264. package/templates/react/.cursor/rules/modus-tailwind-usage-react-short.mdc +23 -0
  265. package/templates/react/.cursor/rules/modus-tailwind-usage-react.mdc +642 -0
  266. package/templates/react/.cursor/rules/modus-themes-react-short.mdc +23 -0
  267. package/templates/react/.cursor/rules/modus-themes-react.mdc +506 -0
  268. package/templates/react/.cursor/rules/ux/gestalt-laws-detailed.mdc +456 -0
  269. package/templates/react/.cursor/rules/ux/ux-ui-foundations.mdc +211 -0
  270. package/templates/react/.cursor/skills/create-modus-form-component/SKILL.md +518 -0
  271. package/templates/react/.cursor/skills/create-modus-wrapper-component/SKILL.md +252 -0
  272. package/templates/react/.cursor/skills/fix-modus-component-event-issues/SKILL.md +345 -0
  273. package/templates/react/.cursor/skills/handle-modus-checkbox-value-bug/SKILL.md +202 -0
  274. package/templates/react/.cursor/skills/implement-modus-modal-with-refs/SKILL.md +386 -0
  275. package/templates/react/.cursor/skills/integrate-modus-icons/SKILL.md +300 -0
  276. package/templates/react/.cursor/skills/run-lint-checks/SKILL.md +235 -0
  277. package/templates/react/.cursor/skills/set-up-modus-event-listeners/SKILL.md +284 -0
  278. package/templates/react/.cursor/skills/style-modus-components-with-tailwind/SKILL.md +382 -0
  279. package/templates/react/.env.development +3 -0
  280. package/templates/react/.env.production +3 -0
  281. package/templates/react/.github/CODEOWNERS +28 -0
  282. package/templates/react/.github/ISSUE_TEMPLATE/bug_report.yml +176 -0
  283. package/templates/react/.github/ISSUE_TEMPLATE/config.yml +20 -0
  284. package/templates/react/.github/ISSUE_TEMPLATE/documentation.yml +115 -0
  285. package/templates/react/.github/ISSUE_TEMPLATE/feature_request.yml +171 -0
  286. package/templates/react/.github/ISSUE_TEMPLATE/question.yml +139 -0
  287. package/templates/react/.github/copilot-instructions.md +80 -0
  288. package/templates/react/.github/instructions/components.instructions.md +82 -0
  289. package/templates/react/.github/instructions/demos.instructions.md +82 -0
  290. package/templates/react/.github/instructions/pages.instructions.md +76 -0
  291. package/templates/react/.github/instructions/styles.instructions.md +77 -0
  292. package/templates/react/.github/instructions/typescript.instructions.md +101 -0
  293. package/templates/react/.github/pull_request_template.md +188 -0
  294. package/templates/react/.github/workflows/ci.yml +43 -0
  295. package/templates/react/.github/workflows/claude-code-review.yml +44 -0
  296. package/templates/react/.github/workflows/claude.yml +50 -0
  297. package/templates/react/.husky/pre-commit +28 -0
  298. package/templates/react/.vscode/extensions.json +8 -0
  299. package/templates/react/CLAUDE.md +119 -0
  300. package/templates/react/CODE_OF_CONDUCT.md +79 -0
  301. package/templates/react/CONTRIBUTING.md +65 -0
  302. package/templates/react/LICENSE +21 -0
  303. package/templates/react/README.md +728 -0
  304. package/templates/react/SECURITY.md +50 -0
  305. package/templates/react/eslint.config.js +23 -0
  306. package/templates/react/index.html +13 -0
  307. package/templates/react/package-lock.json +5209 -0
  308. package/templates/react/package.json +49 -0
  309. package/templates/react/postcss.config.js +6 -0
  310. package/templates/react/public/react.svg +1 -0
  311. package/templates/react/public/vite.svg +1 -0
  312. package/templates/react/readme_assets/getting_started_header.png +0 -0
  313. package/templates/react/readme_assets/hero.png +0 -0
  314. package/templates/react/readme_assets/modus_comp.png +0 -0
  315. package/templates/react/readme_assets/modus_figma_mcp.png +0 -0
  316. package/templates/react/readme_assets/teaser_comp.gif +0 -0
  317. package/templates/react/scripts/README.md +343 -0
  318. package/templates/react/scripts/check-border-violations.js +483 -0
  319. package/templates/react/scripts/check-icon-names.js +486 -0
  320. package/templates/react/scripts/check-inline-styles.js +364 -0
  321. package/templates/react/scripts/check-modus-colors.js +247 -0
  322. package/templates/react/scripts/check-modus-icons.js +256 -0
  323. package/templates/react/scripts/check-opacity-utilities.js +481 -0
  324. package/templates/react/scripts/check-semantic-html.js +476 -0
  325. package/templates/react/scripts/check-typescript.js +109 -0
  326. package/templates/react/src/App.css +42 -0
  327. package/templates/react/src/App.tsx +54 -0
  328. package/templates/react/src/assets/react.svg +1 -0
  329. package/templates/react/src/components/DemoExample.tsx +61 -0
  330. package/templates/react/src/components/DemoPage.tsx +81 -0
  331. package/templates/react/src/components/ModusAccordion.tsx +89 -0
  332. package/templates/react/src/components/ModusAlert.tsx +85 -0
  333. package/templates/react/src/components/ModusAutocomplete.tsx +207 -0
  334. package/templates/react/src/components/ModusAvatar.tsx +50 -0
  335. package/templates/react/src/components/ModusBadge.tsx +82 -0
  336. package/templates/react/src/components/ModusBreadcrumbs.tsx +75 -0
  337. package/templates/react/src/components/ModusButton.tsx +244 -0
  338. package/templates/react/src/components/ModusButtonGroup.tsx +91 -0
  339. package/templates/react/src/components/ModusCard.tsx +70 -0
  340. package/templates/react/src/components/ModusCheckbox.tsx +168 -0
  341. package/templates/react/src/components/ModusChip.tsx +93 -0
  342. package/templates/react/src/components/ModusDate.tsx +154 -0
  343. package/templates/react/src/components/ModusDropdownMenu.tsx +148 -0
  344. package/templates/react/src/components/ModusFileDropzone.tsx +140 -0
  345. package/templates/react/src/components/ModusHandle.tsx +101 -0
  346. package/templates/react/src/components/ModusIcon.tsx +49 -0
  347. package/templates/react/src/components/ModusInputFeedback.tsx +52 -0
  348. package/templates/react/src/components/ModusInputLabel.tsx +50 -0
  349. package/templates/react/src/components/ModusLoader.tsx +42 -0
  350. package/templates/react/src/components/ModusLogo.tsx +102 -0
  351. package/templates/react/src/components/ModusMenu.tsx +119 -0
  352. package/templates/react/src/components/ModusMenuItem.tsx +86 -0
  353. package/templates/react/src/components/ModusModal.tsx +145 -0
  354. package/templates/react/src/components/ModusNavbar.tsx +504 -0
  355. package/templates/react/src/components/ModusNumberInput.tsx +230 -0
  356. package/templates/react/src/components/ModusPagination.tsx +94 -0
  357. package/templates/react/src/components/ModusPanel.tsx +92 -0
  358. package/templates/react/src/components/ModusProgress.tsx +70 -0
  359. package/templates/react/src/components/ModusProvider.tsx +18 -0
  360. package/templates/react/src/components/ModusRadio.tsx +114 -0
  361. package/templates/react/src/components/ModusRating.tsx +108 -0
  362. package/templates/react/src/components/ModusSelect.tsx +171 -0
  363. package/templates/react/src/components/ModusSideNavigation.tsx +149 -0
  364. package/templates/react/src/components/ModusSkeleton.tsx +42 -0
  365. package/templates/react/src/components/ModusSlider.tsx +128 -0
  366. package/templates/react/src/components/ModusStepper.tsx +85 -0
  367. package/templates/react/src/components/ModusSwitch.tsx +130 -0
  368. package/templates/react/src/components/ModusTable.tsx +309 -0
  369. package/templates/react/src/components/ModusTabs.tsx +114 -0
  370. package/templates/react/src/components/ModusTextInput.tsx +179 -0
  371. package/templates/react/src/components/ModusTextarea.tsx +164 -0
  372. package/templates/react/src/components/ModusThemeSwitcher.tsx +58 -0
  373. package/templates/react/src/components/ModusTimeInput.tsx +176 -0
  374. package/templates/react/src/components/ModusToast.tsx +207 -0
  375. package/templates/react/src/components/ModusToolbar.tsx +70 -0
  376. package/templates/react/src/components/ModusTooltip.tsx +97 -0
  377. package/templates/react/src/components/ModusUtilityPanel.tsx +198 -0
  378. package/templates/react/src/components/ThemeSwitcherDropdown.tsx +117 -0
  379. package/templates/react/src/components/ThemeToggleSimple.tsx +157 -0
  380. package/templates/react/src/config/routes.ts +196 -0
  381. package/templates/react/src/contexts/ThemeContext.tsx +81 -0
  382. package/templates/react/src/contexts/ThemeContextData.tsx +89 -0
  383. package/templates/react/src/data/modusIcons.ts +865 -0
  384. package/templates/react/src/demos/accordion-demo/page.tsx +236 -0
  385. package/templates/react/src/demos/alert-demo/page.tsx +94 -0
  386. package/templates/react/src/demos/autocomplete-demo/page.tsx +166 -0
  387. package/templates/react/src/demos/avatar-demo/page.tsx +135 -0
  388. package/templates/react/src/demos/badge-demo/page.tsx +174 -0
  389. package/templates/react/src/demos/breadcrumbs-demo/page.tsx +88 -0
  390. package/templates/react/src/demos/button-demo/page.tsx +261 -0
  391. package/templates/react/src/demos/button-group-demo/page.tsx +231 -0
  392. package/templates/react/src/demos/card-demo/page.tsx +241 -0
  393. package/templates/react/src/demos/checkbox-demo/page.tsx +79 -0
  394. package/templates/react/src/demos/chip-demo/page.tsx +197 -0
  395. package/templates/react/src/demos/date-demo/page.tsx +179 -0
  396. package/templates/react/src/demos/dropdown-demo/page.tsx +150 -0
  397. package/templates/react/src/demos/file-dropzone-demo/page.tsx +186 -0
  398. package/templates/react/src/demos/handle-demo/page.tsx +313 -0
  399. package/templates/react/src/demos/icon-demo/page.tsx +72 -0
  400. package/templates/react/src/demos/input-feedback-demo/page.tsx +202 -0
  401. package/templates/react/src/demos/input-label-demo/page.tsx +392 -0
  402. package/templates/react/src/demos/loader-demo/page.tsx +138 -0
  403. package/templates/react/src/demos/logo-demo/page.tsx +292 -0
  404. package/templates/react/src/demos/menu-demo/page.tsx +70 -0
  405. package/templates/react/src/demos/modal-demo/page.tsx +332 -0
  406. package/templates/react/src/demos/navbar-demo/page.tsx +141 -0
  407. package/templates/react/src/demos/number-input-demo/page.tsx +180 -0
  408. package/templates/react/src/demos/pagination-demo/page.tsx +147 -0
  409. package/templates/react/src/demos/panel-demo/page.tsx +376 -0
  410. package/templates/react/src/demos/progress-demo/page.tsx +185 -0
  411. package/templates/react/src/demos/radio-demo/page.tsx +242 -0
  412. package/templates/react/src/demos/rating-demo/page.tsx +97 -0
  413. package/templates/react/src/demos/select-demo/page.tsx +111 -0
  414. package/templates/react/src/demos/side-navigation-demo/page.tsx +775 -0
  415. package/templates/react/src/demos/skeleton-demo/page.tsx +107 -0
  416. package/templates/react/src/demos/slider-demo/page.tsx +78 -0
  417. package/templates/react/src/demos/stepper-demo/page.tsx +86 -0
  418. package/templates/react/src/demos/switch-demo/page.tsx +146 -0
  419. package/templates/react/src/demos/table-demo/page.tsx +489 -0
  420. package/templates/react/src/demos/tabs-demo/page.tsx +187 -0
  421. package/templates/react/src/demos/text-input-demo/page.tsx +151 -0
  422. package/templates/react/src/demos/textarea-demo/page.tsx +73 -0
  423. package/templates/react/src/demos/theme-switcher-demo/page.tsx +26 -0
  424. package/templates/react/src/demos/time-input-demo/page.tsx +148 -0
  425. package/templates/react/src/demos/toast-demo/page.tsx +302 -0
  426. package/templates/react/src/demos/toolbar-demo/page.tsx +49 -0
  427. package/templates/react/src/demos/tooltip-demo/page.tsx +209 -0
  428. package/templates/react/src/demos/typography-test/page.tsx +28 -0
  429. package/templates/react/src/demos/utility-panel-demo/page.tsx +197 -0
  430. package/templates/react/src/dev/DevPanel.tsx +219 -0
  431. package/templates/react/src/dev/DevPanelContext.ts +14 -0
  432. package/templates/react/src/dev/DevPanelProvider.tsx +63 -0
  433. package/templates/react/src/dev/DevRoutes.tsx +98 -0
  434. package/templates/react/src/dev/config.ts +127 -0
  435. package/templates/react/src/dev/index.ts +8 -0
  436. package/templates/react/src/dev/useDevPanel.ts +17 -0
  437. package/templates/react/src/dev-pages/ColorPalettePage.tsx +347 -0
  438. package/templates/react/src/dev-pages/ComponentsGalleryPage.tsx +489 -0
  439. package/templates/react/src/dev-pages/IconsPage.tsx +137 -0
  440. package/templates/react/src/dev-pages/index.ts +3 -0
  441. package/templates/react/src/hooks/useTheme.ts +15 -0
  442. package/templates/react/src/index.css +635 -0
  443. package/templates/react/src/main.tsx +14 -0
  444. package/templates/react/src/pages/HomePage.tsx +283 -0
  445. package/templates/react/src/vite-env.d.ts +9 -0
  446. package/templates/react/tailwind.config.js +58 -0
  447. package/templates/react/tsconfig.app.json +27 -0
  448. package/templates/react/tsconfig.json +7 -0
  449. package/templates/react/tsconfig.node.json +25 -0
  450. 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
+ }