@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,130 @@
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 { ModusTimeInputComponent } from '../../components/modus-time-input.component';
6
+
7
+ /**
8
+ * Demo page showcasing the Modus Time Input component.
9
+ *
10
+ * Demonstrates time input features including:
11
+ * - Basic time input
12
+ * - Sizes
13
+ * - With seconds
14
+ * - Min/max constraints
15
+ * - Interactive examples
16
+ */
17
+ @Component({
18
+ selector: 'app-time-input-demo-page',
19
+ standalone: true,
20
+ imports: [CommonModule, DemoPageComponent, DemoExampleComponent, ModusTimeInputComponent],
21
+ template: `
22
+ <demo-page
23
+ title="Modus Time Input"
24
+ description="Time input components allow users to enter or select a time value. Use time inputs for scheduling, appointments, or any scenario requiring time selection."
25
+ >
26
+ <demo-example title="Basic Time Input" description="Simple time input with label.">
27
+ <div class="flex flex-col gap-6">
28
+ <div class="flex flex-col gap-2">
29
+ <modus-time-input inputId="start-time-input" label="Start time" value="09:00" />
30
+ </div>
31
+
32
+ <div class="flex flex-col gap-2">
33
+ <modus-time-input inputId="end-time-input" label="End time" value="17:00" />
34
+ </div>
35
+ </div>
36
+ </demo-example>
37
+
38
+ <demo-example title="Time Input Sizes" description="Time inputs in different sizes.">
39
+ <div class="flex flex-col gap-6">
40
+ <div class="flex flex-col gap-2">
41
+ <modus-time-input inputId="small-time-input" label="Small" value="09:00" size="sm" />
42
+ </div>
43
+
44
+ <div class="flex flex-col gap-2">
45
+ <modus-time-input inputId="medium-time-input" label="Medium" value="09:00" size="md" />
46
+ </div>
47
+
48
+ <div class="flex flex-col gap-2">
49
+ <modus-time-input inputId="large-time-input" label="Large" value="09:00" size="lg" />
50
+ </div>
51
+ </div>
52
+ </demo-example>
53
+
54
+ <demo-example title="Time Input with Seconds" description="Time inputs displaying seconds.">
55
+ <div class="flex flex-col gap-6">
56
+ <div class="flex flex-col gap-2">
57
+ <modus-time-input
58
+ inputId="seconds-time-input"
59
+ label="Time with Seconds"
60
+ value="09:30:45"
61
+ [showSeconds]="true"
62
+ />
63
+ </div>
64
+
65
+ <div class="flex flex-col gap-2">
66
+ <modus-time-input
67
+ inputId="seconds-default-time-input"
68
+ label="Default Format"
69
+ value="09:30"
70
+ [showSeconds]="false"
71
+ />
72
+ </div>
73
+ </div>
74
+ </demo-example>
75
+
76
+ <demo-example
77
+ title="Time Input with Constraints"
78
+ description="Time inputs with min and max values."
79
+ >
80
+ <div class="flex flex-col gap-6">
81
+ <div class="flex flex-col gap-2">
82
+ <modus-time-input
83
+ inputId="min-max-time-input"
84
+ label="Business Hours"
85
+ value="09:00"
86
+ min="09:00"
87
+ max="17:00"
88
+ />
89
+ </div>
90
+
91
+ <div class="flex flex-col gap-2">
92
+ <modus-time-input
93
+ inputId="afternoon-time-input"
94
+ label="Afternoon Hours"
95
+ value="14:00"
96
+ min="12:00"
97
+ max="18:00"
98
+ />
99
+ </div>
100
+ </div>
101
+ </demo-example>
102
+
103
+ <demo-example
104
+ title="Required and Disabled States"
105
+ description="Time inputs in required and disabled states."
106
+ >
107
+ <div class="flex flex-col gap-6">
108
+ <div class="flex flex-col gap-2">
109
+ <modus-time-input
110
+ inputId="required-time-input"
111
+ label="Required"
112
+ value="09:00"
113
+ [required]="true"
114
+ />
115
+ </div>
116
+
117
+ <div class="flex flex-col gap-2">
118
+ <modus-time-input
119
+ inputId="disabled-time-input"
120
+ label="Disabled"
121
+ value="09:00"
122
+ [disabled]="true"
123
+ />
124
+ </div>
125
+ </div>
126
+ </demo-example>
127
+ </demo-page>
128
+ `,
129
+ })
130
+ export class TimeInputDemoPageComponent {}
@@ -0,0 +1,258 @@
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 { ModusToastComponent, type ToastPosition } from '../../components/modus-toast.component';
6
+ import { ModusButtonComponent } from '../../components/modus-button.component';
7
+ import { ModusAlertComponent } from '../../components/modus-alert.component';
8
+
9
+ /**
10
+ * Toast variant types for styling.
11
+ */
12
+ export type ToastVariant = 'success' | 'warning' | 'error' | 'info';
13
+
14
+ /**
15
+ * Interface for a toast item in the toasts array.
16
+ */
17
+ export interface ToastItem {
18
+ id: string;
19
+ title: string;
20
+ description: string;
21
+ variant: ToastVariant;
22
+ dismissible: boolean;
23
+ position: ToastPosition;
24
+ delay: number | null;
25
+ }
26
+
27
+ /**
28
+ * Demo page showcasing the Modus Toast component.
29
+ *
30
+ * Demonstrates toast features including:
31
+ * - Toast variants (success, warning, error, info)
32
+ * - Toast positions (9 positions grouped by vertical position)
33
+ * - Special features (clear all)
34
+ * - Interactive examples
35
+ */
36
+ @Component({
37
+ selector: 'app-toast-demo-page',
38
+ standalone: true,
39
+ imports: [
40
+ CommonModule,
41
+ DemoPageComponent,
42
+ DemoExampleComponent,
43
+ ModusToastComponent,
44
+ ModusButtonComponent,
45
+ ModusAlertComponent,
46
+ ],
47
+ template: `
48
+ <demo-page
49
+ title="Modus Toast"
50
+ description="Toasts deliver lightweight confirmations or alerts without disrupting workflow. Keep the message brief and allow dismissal."
51
+ >
52
+ <demo-example
53
+ title="Interactive Toast Triggers"
54
+ description="Click the buttons below to trigger different toasts in various positions and variants."
55
+ >
56
+ <div class="space-y-6">
57
+ <!-- Toast Variants -->
58
+ <div>
59
+ <div class="text-lg font-semibold text-foreground mb-4">Toast Variants</div>
60
+ <div class="flex flex-wrap gap-3">
61
+ <modus-button
62
+ color="primary"
63
+ variant="filled"
64
+ (buttonClick)="
65
+ addToast('success', 'top-end', 'Success!', 'Your action completed successfully.')
66
+ "
67
+ >
68
+ Success Toast
69
+ </modus-button>
70
+ <modus-button
71
+ color="warning"
72
+ variant="filled"
73
+ (buttonClick)="
74
+ addToast('warning', 'top-end', 'Warning!', 'Please review your input.')
75
+ "
76
+ >
77
+ Warning Toast
78
+ </modus-button>
79
+ <modus-button
80
+ color="danger"
81
+ variant="filled"
82
+ (buttonClick)="addToast('error', 'top-end', 'Error!', 'Something went wrong.')"
83
+ >
84
+ Error Toast
85
+ </modus-button>
86
+ <modus-button
87
+ color="secondary"
88
+ variant="filled"
89
+ (buttonClick)="
90
+ addToast('info', 'top-end', 'Info', 'Here\\'s some helpful information.')
91
+ "
92
+ >
93
+ Info Toast
94
+ </modus-button>
95
+ </div>
96
+ </div>
97
+
98
+ <!-- Toast Positions -->
99
+ <div>
100
+ <div class="text-lg font-semibold text-foreground mb-4">Toast Positions</div>
101
+ <div class="space-y-4">
102
+ <!-- Top Positions -->
103
+ <div class="bg-card border-default rounded-lg p-4">
104
+ <div class="text-sm font-medium text-muted-foreground mb-3">Top</div>
105
+ <div class="flex flex-wrap gap-3">
106
+ <modus-button
107
+ color="secondary"
108
+ variant="outlined"
109
+ (buttonClick)="
110
+ addToast('info', 'top-start', 'Top Start', 'Toast in top-left corner')
111
+ "
112
+ >
113
+ Top Start
114
+ </modus-button>
115
+ <modus-button
116
+ color="secondary"
117
+ variant="outlined"
118
+ (buttonClick)="addToast('info', 'top-center', 'Top Center', 'Toast in top-center')"
119
+ >
120
+ Top Center
121
+ </modus-button>
122
+ <modus-button
123
+ color="secondary"
124
+ variant="outlined"
125
+ (buttonClick)="addToast('info', 'top-end', 'Top End', 'Toast in top-right corner')"
126
+ >
127
+ Top End
128
+ </modus-button>
129
+ </div>
130
+ </div>
131
+
132
+ <!-- Middle Positions -->
133
+ <div class="bg-card border-default rounded-lg p-4">
134
+ <div class="text-sm font-medium text-muted-foreground mb-3">Middle</div>
135
+ <div class="flex flex-wrap gap-3">
136
+ <modus-button
137
+ color="secondary"
138
+ variant="outlined"
139
+ (buttonClick)="
140
+ addToast('success', 'middle-start', 'Middle Start', 'Toast in middle-left')
141
+ "
142
+ >
143
+ Middle Start
144
+ </modus-button>
145
+ <modus-button
146
+ color="secondary"
147
+ variant="outlined"
148
+ (buttonClick)="
149
+ addToast('success', 'middle-center', 'Middle Center', 'Toast in center')
150
+ "
151
+ >
152
+ Middle Center
153
+ </modus-button>
154
+ <modus-button
155
+ color="secondary"
156
+ variant="outlined"
157
+ (buttonClick)="
158
+ addToast('success', 'middle-end', 'Middle End', 'Toast in middle-right')
159
+ "
160
+ >
161
+ Middle End
162
+ </modus-button>
163
+ </div>
164
+ </div>
165
+
166
+ <!-- Bottom Positions -->
167
+ <div class="bg-card border-default rounded-lg p-4">
168
+ <div class="text-sm font-medium text-muted-foreground mb-3">Bottom</div>
169
+ <div class="flex flex-wrap gap-3">
170
+ <modus-button
171
+ color="secondary"
172
+ variant="outlined"
173
+ (buttonClick)="
174
+ addToast('warning', 'bottom-start', 'Bottom Start', 'Toast in bottom-left')
175
+ "
176
+ >
177
+ Bottom Start
178
+ </modus-button>
179
+ <modus-button
180
+ color="secondary"
181
+ variant="outlined"
182
+ (buttonClick)="
183
+ addToast('warning', 'bottom-center', 'Bottom Center', 'Toast in bottom-center')
184
+ "
185
+ >
186
+ Bottom Center
187
+ </modus-button>
188
+ <modus-button
189
+ color="secondary"
190
+ variant="outlined"
191
+ (buttonClick)="
192
+ addToast('warning', 'bottom-end', 'Bottom End', 'Toast in bottom-right')
193
+ "
194
+ >
195
+ Bottom End
196
+ </modus-button>
197
+ </div>
198
+ </div>
199
+ </div>
200
+ </div>
201
+
202
+ <!-- Special Features -->
203
+ <div>
204
+ <div class="text-lg font-semibold text-foreground mb-4">Special Features</div>
205
+ <div class="flex flex-wrap gap-3">
206
+ <modus-button color="danger" variant="outlined" (buttonClick)="clearAllToasts()">
207
+ Clear All Toasts
208
+ </modus-button>
209
+ </div>
210
+ </div>
211
+
212
+ <!-- Toast Display -->
213
+ @for (toast of toasts(); track toast.id) {
214
+ <modus-toast [position]="toast.position" [delay]="toast.delay ?? undefined">
215
+ <modus-alert
216
+ [alertTitle]="toast.title"
217
+ [alertDescription]="toast.description"
218
+ [variant]="toast.variant"
219
+ [dismissible]="toast.dismissible"
220
+ (dismiss)="removeToast(toast.id)"
221
+ />
222
+ </modus-toast>
223
+ }
224
+ </div>
225
+ </demo-example>
226
+ </demo-page>
227
+ `,
228
+ })
229
+ export class ToastDemoPageComponent {
230
+ readonly toasts = signal<ToastItem[]>([]);
231
+
232
+ addToast(
233
+ variant: ToastVariant,
234
+ position: ToastPosition = 'top-end',
235
+ title: string,
236
+ description: string,
237
+ ): void {
238
+ const id = `toast-${variant}-${Date.now()}`;
239
+ const newToast: ToastItem = {
240
+ id,
241
+ title,
242
+ description,
243
+ variant,
244
+ dismissible: true,
245
+ position,
246
+ delay: variant === 'warning' ? null : 4000,
247
+ };
248
+ this.toasts.update((prev) => [...prev, newToast]);
249
+ }
250
+
251
+ removeToast(toastId: string): void {
252
+ this.toasts.update((prev) => prev.filter((toast) => toast.id !== toastId));
253
+ }
254
+
255
+ clearAllToasts(): void {
256
+ this.toasts.set([]);
257
+ }
258
+ }
@@ -0,0 +1,54 @@
1
+ import { ChangeDetectionStrategy, 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 { ModusToolbarComponent } from '../../components/modus-toolbar.component';
6
+ import { ModusButtonComponent } from '../../components/modus-button.component';
7
+
8
+ /**
9
+ * Demo page showcasing the Modus Toolbar component.
10
+ *
11
+ * Demonstrates toolbar features including:
12
+ * - Document toolbar with start, center, and end slots
13
+ * - Icon buttons with text labels
14
+ * - Different button variants and sizes
15
+ */
16
+ @Component({
17
+ selector: 'app-toolbar-demo-page',
18
+ standalone: true,
19
+ imports: [
20
+ CommonModule,
21
+ DemoPageComponent,
22
+ DemoExampleComponent,
23
+ ModusToolbarComponent,
24
+ ModusButtonComponent,
25
+ ],
26
+ changeDetection: ChangeDetectionStrategy.OnPush,
27
+ template: `
28
+ <demo-page
29
+ title="Modus Toolbar"
30
+ description="Toolbars organize actions for a focused context. Keep primary commands on the left, secondary options on the right, and maintain consistent spacing."
31
+ >
32
+ <demo-example
33
+ title="Document Toolbar"
34
+ description="Pair icon buttons with text labels when space allows."
35
+ >
36
+ <modus-toolbar>
37
+ <div slot="start" class="flex items-center gap-3 text-sm text-foreground">
38
+ <i class="modus-icons text-primary">pencil</i>
39
+ <div class="font-medium">Proposal draft</div>
40
+ </div>
41
+ <div slot="center" class="flex gap-2">
42
+ <modus-button size="sm" icon="undo" iconPosition="left">Undo</modus-button>
43
+ <modus-button size="sm" icon="redo" iconPosition="left">Redo</modus-button>
44
+ </div>
45
+ <div slot="end" class="flex gap-2">
46
+ <modus-button size="sm" variant="borderless">Share</modus-button>
47
+ <modus-button size="sm" color="primary">Publish</modus-button>
48
+ </div>
49
+ </modus-toolbar>
50
+ </demo-example>
51
+ </demo-page>
52
+ `,
53
+ })
54
+ export class ToolbarDemoPageComponent {}
@@ -0,0 +1,163 @@
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 { ModusTooltipComponent } from '../../components/modus-tooltip.component';
6
+ import { ModusButtonComponent } from '../../components/modus-button.component';
7
+ import { ModusIconComponent } from '../../components/modus-icon.component';
8
+
9
+ /**
10
+ * Demo page showcasing the Modus Tooltip component.
11
+ *
12
+ * Demonstrates tooltip features including:
13
+ * - Basic tooltip
14
+ * - Different positions
15
+ * - With buttons
16
+ * - With icons
17
+ * - Force open state
18
+ */
19
+ @Component({
20
+ selector: 'app-tooltip-demo-page',
21
+ standalone: true,
22
+ imports: [
23
+ CommonModule,
24
+ DemoPageComponent,
25
+ DemoExampleComponent,
26
+ ModusTooltipComponent,
27
+ ModusButtonComponent,
28
+ ModusIconComponent,
29
+ ],
30
+ template: `
31
+ <demo-page
32
+ title="Modus Tooltip"
33
+ description="Tooltip components provide contextual information when users hover over or focus on elements. Use tooltips to provide helpful hints, additional context, or brief explanations."
34
+ >
35
+ <demo-example
36
+ title="Basic Tooltip"
37
+ description="Simple tooltip with text content."
38
+ >
39
+ <div class="flex flex-wrap gap-4">
40
+ <modus-tooltip content="This is a helpful tooltip">
41
+ <modus-button color="primary">Hover me</modus-button>
42
+ </modus-tooltip>
43
+
44
+ <modus-tooltip content="Click to save your changes">
45
+ <modus-button color="secondary" icon="save_disk" iconPosition="left">Save</modus-button>
46
+ </modus-tooltip>
47
+ </div>
48
+ </demo-example>
49
+
50
+ <demo-example
51
+ title="Tooltip Positions"
52
+ description="Tooltips in different positions relative to the element."
53
+ >
54
+ <div class="flex flex-wrap gap-4">
55
+ <modus-tooltip content="Tooltip on top" position="top">
56
+ <modus-button color="primary">Top</modus-button>
57
+ </modus-tooltip>
58
+
59
+ <modus-tooltip content="Tooltip on right" position="right">
60
+ <modus-button color="primary">Right</modus-button>
61
+ </modus-tooltip>
62
+
63
+ <modus-tooltip content="Tooltip on bottom" position="bottom">
64
+ <modus-button color="primary">Bottom</modus-button>
65
+ </modus-tooltip>
66
+
67
+ <modus-tooltip content="Tooltip on left" position="left">
68
+ <modus-button color="primary">Left</modus-button>
69
+ </modus-tooltip>
70
+ </div>
71
+ </demo-example>
72
+
73
+ <demo-example
74
+ title="Tooltip with Icons"
75
+ description="Tooltips on icon buttons and icon-only elements."
76
+ >
77
+ <div class="flex flex-wrap gap-4">
78
+ <modus-tooltip content="Settings menu">
79
+ <modus-button color="tertiary" icon="settings" iconPosition="only" ariaLabel="Settings" />
80
+ </modus-tooltip>
81
+
82
+ <modus-tooltip content="Edit item">
83
+ <modus-button color="tertiary" icon="file_edit" iconPosition="only" ariaLabel="Edit" />
84
+ </modus-tooltip>
85
+
86
+ <modus-tooltip content="Delete item">
87
+ <modus-button color="danger" icon="delete" iconPosition="only" ariaLabel="Delete" />
88
+ </modus-tooltip>
89
+
90
+ <modus-tooltip content="Information icon">
91
+ <modus-icon name="info" variant="outlined" size="lg" [decorative]="false" ariaLabel="Information" />
92
+ </modus-tooltip>
93
+
94
+ <modus-tooltip content="Help and support">
95
+ <modus-icon name="help" variant="outlined" size="lg" [decorative]="false" ariaLabel="Help" />
96
+ </modus-tooltip>
97
+ </div>
98
+ </demo-example>
99
+
100
+ <demo-example
101
+ title="Tooltip with Text Content"
102
+ description="Tooltips on text and other content elements."
103
+ >
104
+ <div class="flex flex-col gap-4">
105
+ <div class="flex items-center gap-2">
106
+ <span class="text-sm text-foreground">Hover over the</span>
107
+ <modus-tooltip content="This term provides additional context when hovered">
108
+ <span class="text-sm text-primary underline cursor-help">highlighted term</span>
109
+ </modus-tooltip>
110
+ <span class="text-sm text-foreground">for more information.</span>
111
+ </div>
112
+
113
+ <div class="flex items-center gap-2">
114
+ <modus-tooltip content="This is a required field that must be completed">
115
+ <span class="text-sm text-foreground flex items-center gap-1">
116
+ Required Field
117
+ <i class="modus-icons text-xs text-destructive" aria-hidden="true">alert</i>
118
+ </span>
119
+ </modus-tooltip>
120
+ </div>
121
+ </div>
122
+ </demo-example>
123
+
124
+ <demo-example
125
+ title="Auto Position Tooltip"
126
+ description="Tooltip with automatic position detection."
127
+ >
128
+ <div class="flex flex-wrap gap-4">
129
+ <modus-tooltip content="Auto position adjusts based on available space" position="auto">
130
+ <modus-button color="primary">Auto Position</modus-button>
131
+ </modus-tooltip>
132
+ </div>
133
+ </demo-example>
134
+
135
+ <demo-example
136
+ title="Real-World Example"
137
+ description="Tooltips in a typical UI context."
138
+ >
139
+ <div class="flex flex-col gap-6 p-6 rounded-lg bg-card border-default">
140
+ <div class="flex items-center justify-between">
141
+ <div class="flex items-center gap-2">
142
+ <span class="text-base font-medium text-foreground">Document Editor</span>
143
+ <modus-tooltip content="Save your document (Ctrl+S)">
144
+ <modus-button color="tertiary" icon="save_disk" iconPosition="only" ariaLabel="Save" size="sm" />
145
+ </modus-tooltip>
146
+ <modus-tooltip content="Print document (Ctrl+P)">
147
+ <modus-button color="tertiary" icon="printer" iconPosition="only" ariaLabel="Print" size="sm" />
148
+ </modus-tooltip>
149
+ <modus-tooltip content="Share document">
150
+ <modus-button color="tertiary" icon="share" iconPosition="only" ariaLabel="Share" size="sm" />
151
+ </modus-tooltip>
152
+ </div>
153
+ <modus-tooltip content="Open settings menu">
154
+ <modus-button color="tertiary" icon="settings" iconPosition="only" ariaLabel="Settings" size="sm" />
155
+ </modus-tooltip>
156
+ </div>
157
+ </div>
158
+ </demo-example>
159
+ </demo-page>
160
+ `,
161
+ })
162
+ export class TooltipDemoPageComponent {}
163
+