@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,332 @@
1
+ "use client";
2
+
3
+ import { useRef } from "react";
4
+ import DemoExample from "../../components/DemoExample";
5
+ import DemoPage from "../../components/DemoPage";
6
+ import ModusButton from "../../components/ModusButton";
7
+ import ModusModal, { type ModusModalRef } from "../../components/ModusModal";
8
+
9
+ export default function ModalDemoPage() {
10
+ // Modal refs for controlling modals
11
+ const centeredModalRef = useRef<ModusModalRef>(null);
12
+ const topModalRef = useRef<ModusModalRef>(null);
13
+ const bottomModalRef = useRef<ModusModalRef>(null);
14
+ const fullscreenModalRef = useRef<ModusModalRef>(null);
15
+ const staticModalRef = useRef<ModusModalRef>(null);
16
+ const customModalRef = useRef<ModusModalRef>(null);
17
+
18
+ return (
19
+ <DemoPage
20
+ title="Modus Modal"
21
+ description="Modals focus attention on a short, interruptive task. Keep content concise and provide a clear primary action."
22
+ >
23
+ <DemoExample
24
+ title="Centered Dialog"
25
+ description="Default centered modal for quick confirmations or lightweight forms."
26
+ >
27
+ <div className="space-y-4">
28
+ <ModusButton
29
+ onButtonClick={() => {
30
+ centeredModalRef.current?.openModal();
31
+ }}
32
+ >
33
+ Open Centered Modal
34
+ </ModusButton>
35
+ <ModusModal
36
+ ref={centeredModalRef}
37
+ modalId="modal-centered"
38
+ ariaLabel="Archive project"
39
+ onClose={() => {}}
40
+ header={
41
+ <div className="text-xl font-semibold text-foreground">
42
+ Archive project
43
+ </div>
44
+ }
45
+ footer={
46
+ <div className="flex gap-2">
47
+ <ModusButton
48
+ variant="borderless"
49
+ onButtonClick={() => {
50
+ centeredModalRef.current?.closeModal();
51
+ }}
52
+ >
53
+ Cancel
54
+ </ModusButton>
55
+ <ModusButton
56
+ color="danger"
57
+ onButtonClick={() => {
58
+ centeredModalRef.current?.closeModal();
59
+ }}
60
+ >
61
+ Archive
62
+ </ModusButton>
63
+ </div>
64
+ }
65
+ >
66
+ <div className="text-sm text-foreground opacity-80">
67
+ Archived projects are hidden from your active workspace. You can
68
+ restore them later from the settings panel.
69
+ </div>
70
+ </ModusModal>
71
+ </div>
72
+ </DemoExample>
73
+
74
+ <DemoExample
75
+ title="Position Variants"
76
+ description="Different vertical positions for various use cases."
77
+ >
78
+ <div className="flex gap-4 flex-wrap">
79
+ <ModusButton
80
+ onButtonClick={() => {
81
+ topModalRef.current?.openModal();
82
+ }}
83
+ >
84
+ Top Position
85
+ </ModusButton>
86
+ <ModusButton
87
+ onButtonClick={() => {
88
+ bottomModalRef.current?.openModal();
89
+ }}
90
+ >
91
+ Bottom Position
92
+ </ModusButton>
93
+ </div>
94
+
95
+ <ModusModal
96
+ ref={topModalRef}
97
+ modalId="modal-top"
98
+ ariaLabel="Top positioned modal"
99
+ onClose={() => {}}
100
+ position="top"
101
+ header={
102
+ <div className="text-xl font-semibold text-foreground">
103
+ Top Modal
104
+ </div>
105
+ }
106
+ footer={
107
+ <div className="flex gap-2">
108
+ <ModusButton
109
+ variant="borderless"
110
+ onButtonClick={() => {
111
+ topModalRef.current?.closeModal();
112
+ }}
113
+ >
114
+ Cancel
115
+ </ModusButton>
116
+ <ModusButton
117
+ onButtonClick={() => {
118
+ topModalRef.current?.closeModal();
119
+ }}
120
+ >
121
+ Confirm
122
+ </ModusButton>
123
+ </div>
124
+ }
125
+ >
126
+ <div className="text-sm text-foreground opacity-80">
127
+ This modal appears at the top of the screen. Useful for
128
+ notifications or quick actions.
129
+ </div>
130
+ </ModusModal>
131
+
132
+ <ModusModal
133
+ ref={bottomModalRef}
134
+ modalId="modal-bottom"
135
+ ariaLabel="Bottom positioned modal"
136
+ onClose={() => {}}
137
+ position="bottom"
138
+ header={
139
+ <div className="text-xl font-semibold text-foreground">
140
+ Bottom Modal
141
+ </div>
142
+ }
143
+ footer={
144
+ <div className="flex gap-2">
145
+ <ModusButton
146
+ variant="borderless"
147
+ onButtonClick={() => {
148
+ bottomModalRef.current?.closeModal();
149
+ }}
150
+ >
151
+ Cancel
152
+ </ModusButton>
153
+ <ModusButton
154
+ onButtonClick={() => {
155
+ bottomModalRef.current?.closeModal();
156
+ }}
157
+ >
158
+ Confirm
159
+ </ModusButton>
160
+ </div>
161
+ }
162
+ >
163
+ <div className="text-sm text-foreground opacity-80">
164
+ This modal appears at the bottom of the screen. Great for mobile
165
+ interfaces.
166
+ </div>
167
+ </ModusModal>
168
+ </DemoExample>
169
+
170
+ <DemoExample
171
+ title="Fullscreen Modal"
172
+ description="Full-screen modals for complex workflows or detailed content."
173
+ >
174
+ <div className="space-y-4">
175
+ <ModusButton
176
+ onButtonClick={() => {
177
+ fullscreenModalRef.current?.openModal();
178
+ }}
179
+ >
180
+ Open Fullscreen Modal
181
+ </ModusButton>
182
+ <ModusModal
183
+ ref={fullscreenModalRef}
184
+ modalId="modal-fullscreen"
185
+ ariaLabel="Fullscreen modal"
186
+ onClose={() => {}}
187
+ fullscreen={true}
188
+ showFullscreenToggle={true}
189
+ header={
190
+ <div className="text-xl font-semibold text-foreground">
191
+ Fullscreen Modal
192
+ </div>
193
+ }
194
+ footer={
195
+ <div className="flex gap-2">
196
+ <ModusButton
197
+ variant="borderless"
198
+ onButtonClick={() => {
199
+ fullscreenModalRef.current?.closeModal();
200
+ }}
201
+ >
202
+ Cancel
203
+ </ModusButton>
204
+ <ModusButton
205
+ onButtonClick={() => {
206
+ fullscreenModalRef.current?.closeModal();
207
+ }}
208
+ >
209
+ Save Changes
210
+ </ModusButton>
211
+ </div>
212
+ }
213
+ >
214
+ <div className="space-y-4">
215
+ <div className="text-sm text-foreground opacity-80">
216
+ This is a fullscreen modal that covers the entire viewport.
217
+ Perfect for complex forms or detailed content.
218
+ </div>
219
+ <div className="text-sm text-foreground opacity-80">
220
+ You can toggle between fullscreen and normal size using the
221
+ button in the header.
222
+ </div>
223
+ </div>
224
+ </ModusModal>
225
+ </div>
226
+ </DemoExample>
227
+
228
+ <DemoExample
229
+ title="Static Backdrop"
230
+ description="Modal that doesn't close when clicking outside - user must use explicit actions."
231
+ >
232
+ <div className="space-y-4">
233
+ <ModusButton
234
+ onButtonClick={() => {
235
+ staticModalRef.current?.openModal();
236
+ }}
237
+ >
238
+ Open Static Modal
239
+ </ModusButton>
240
+ <ModusModal
241
+ ref={staticModalRef}
242
+ modalId="modal-static"
243
+ ariaLabel="Static backdrop modal"
244
+ onClose={() => {}}
245
+ backdrop="static"
246
+ header={
247
+ <div className="text-xl font-semibold text-foreground">
248
+ Important Action
249
+ </div>
250
+ }
251
+ footer={
252
+ <div className="flex gap-2">
253
+ <ModusButton
254
+ variant="borderless"
255
+ onButtonClick={() => {
256
+ staticModalRef.current?.closeModal();
257
+ }}
258
+ >
259
+ Cancel
260
+ </ModusButton>
261
+ <ModusButton
262
+ color="danger"
263
+ onButtonClick={() => {
264
+ staticModalRef.current?.closeModal();
265
+ }}
266
+ >
267
+ Delete Forever
268
+ </ModusButton>
269
+ </div>
270
+ }
271
+ >
272
+ <div className="text-sm text-foreground opacity-80">
273
+ This modal has a static backdrop. Clicking outside won&apos;t
274
+ close it - you must use the buttons or press Escape.
275
+ </div>
276
+ </ModusModal>
277
+ </div>
278
+ </DemoExample>
279
+
280
+ <DemoExample
281
+ title="Custom Styling"
282
+ description="Modal with custom dimensions and styling."
283
+ >
284
+ <div className="space-y-4">
285
+ <ModusButton
286
+ onButtonClick={() => {
287
+ customModalRef.current?.openModal();
288
+ }}
289
+ >
290
+ Open Custom Modal
291
+ </ModusButton>
292
+ <ModusModal
293
+ ref={customModalRef}
294
+ modalId="modal-custom"
295
+ ariaLabel="Custom styled modal"
296
+ onClose={() => {}}
297
+ customClass="expanded-modal"
298
+ header={
299
+ <div className="text-xl font-semibold text-foreground">
300
+ Custom Size Modal
301
+ </div>
302
+ }
303
+ footer={
304
+ <div className="flex gap-2">
305
+ <ModusButton
306
+ variant="borderless"
307
+ onButtonClick={() => {
308
+ customModalRef.current?.closeModal();
309
+ }}
310
+ >
311
+ Cancel
312
+ </ModusButton>
313
+ <ModusButton
314
+ onButtonClick={() => {
315
+ customModalRef.current?.closeModal();
316
+ }}
317
+ >
318
+ Save
319
+ </ModusButton>
320
+ </div>
321
+ }
322
+ >
323
+ <div className="text-sm text-foreground opacity-80">
324
+ This modal has custom dimensions applied via CSS classes. The
325
+ modal is wider and taller than the default.
326
+ </div>
327
+ </ModusModal>
328
+ </div>
329
+ </DemoExample>
330
+ </DemoPage>
331
+ );
332
+ }
@@ -0,0 +1,141 @@
1
+ "use client";
2
+
3
+ import DemoExample from "../../components/DemoExample";
4
+ import DemoPage from "../../components/DemoPage";
5
+ import ModusNavbar from "../../components/ModusNavbar";
6
+
7
+ const navbarUserCard = {
8
+ name: "John Doe",
9
+ email: "john.doe@example.com",
10
+ avatarSrc: "https://i.pravatar.cc/64?img=12",
11
+ };
12
+
13
+ export default function NavbarDemoPage() {
14
+ const handleHelpClick = () => {
15
+ console.log("Help button clicked");
16
+ };
17
+
18
+ const handleAppsClick = () => {
19
+ console.log("Apps button clicked");
20
+ };
21
+
22
+ const handleNotificationsClick = () => {
23
+ console.log("Notifications button clicked");
24
+ };
25
+
26
+ const handleMainMenuOpenChange = (open: boolean) => {
27
+ console.log(`Main menu ${open ? "opened" : "closed"}`);
28
+ };
29
+
30
+ return (
31
+ <DemoPage
32
+ title="Modus Navbar"
33
+ description="The navbar provides a consistent top-level navigation and user controls. Use the navbar for primary navigation, user profile access, search, and application-wide actions."
34
+ >
35
+ <DemoExample
36
+ title="Basic Navbar"
37
+ description="A basic navbar with user card and search functionality."
38
+ >
39
+ <div className="flex flex-col gap-4">
40
+ <ModusNavbar
41
+ userCard={navbarUserCard}
42
+ visibility={{ user: true, search: true, searchInput: true }}
43
+ />
44
+ </div>
45
+ </DemoExample>
46
+
47
+ <DemoExample
48
+ title="Navbar with Help Button"
49
+ description="Navbar with user card and help button for accessing documentation and support."
50
+ >
51
+ <div className="flex flex-col gap-4">
52
+ <ModusNavbar
53
+ userCard={navbarUserCard}
54
+ visibility={{ user: true, help: true }}
55
+ onHelpClick={handleHelpClick}
56
+ />
57
+ </div>
58
+ </DemoExample>
59
+
60
+ <DemoExample
61
+ title="Navbar with All Buttons"
62
+ description="Navbar showing all available buttons: user, search, help, apps, notifications, and main menu."
63
+ >
64
+ <div className="flex flex-col gap-4">
65
+ <ModusNavbar
66
+ userCard={navbarUserCard}
67
+ visibility={{
68
+ user: true,
69
+ search: true,
70
+ searchInput: true,
71
+ help: true,
72
+ apps: true,
73
+ notifications: true,
74
+ mainMenu: true,
75
+ }}
76
+ onHelpClick={handleHelpClick}
77
+ onAppsClick={handleAppsClick}
78
+ onNotificationsClick={handleNotificationsClick}
79
+ onMainMenuOpenChange={handleMainMenuOpenChange}
80
+ />
81
+ </div>
82
+ </DemoExample>
83
+
84
+ <DemoExample
85
+ title="Condensed Navbar"
86
+ description="A condensed version of the navbar suitable for tighter spaces."
87
+ >
88
+ <div className="flex flex-col gap-4">
89
+ <ModusNavbar
90
+ userCard={navbarUserCard}
91
+ visibility={{
92
+ user: true,
93
+ mainMenu: true,
94
+ notifications: true,
95
+ help: true,
96
+ }}
97
+ condensed={true}
98
+ />
99
+ </div>
100
+ </DemoExample>
101
+
102
+ <DemoExample
103
+ title="Navbar with Custom Slots"
104
+ description="Navbar with custom content in start, center, and end slots."
105
+ >
106
+ <div className="flex flex-col gap-4">
107
+ <ModusNavbar
108
+ userCard={navbarUserCard}
109
+ visibility={{
110
+ user: true,
111
+ search: true,
112
+ searchInput: true,
113
+ help: true,
114
+ }}
115
+ startContent={
116
+ <div className="flex items-center gap-2">
117
+ <div className="text-sm text-foreground">
118
+ Custom Start Content
119
+ </div>
120
+ </div>
121
+ }
122
+ centerContent={
123
+ <div className="flex items-center gap-2">
124
+ <div className="text-sm text-foreground">
125
+ Custom Center Content
126
+ </div>
127
+ </div>
128
+ }
129
+ endContent={
130
+ <div className="flex items-center gap-2">
131
+ <div className="text-sm text-foreground">
132
+ Custom End Content
133
+ </div>
134
+ </div>
135
+ }
136
+ />
137
+ </div>
138
+ </DemoExample>
139
+ </DemoPage>
140
+ );
141
+ }
@@ -0,0 +1,180 @@
1
+ "use client";
2
+
3
+ import { useState } from "react";
4
+ import DemoExample from "../../components/DemoExample";
5
+ import DemoPage from "../../components/DemoPage";
6
+ import ModusNumberInput from "../../components/ModusNumberInput";
7
+
8
+ export default function NumberInputDemoPage() {
9
+ const [numberValue, setNumberValue] = useState<string>("");
10
+
11
+ const handleNumberChange = (value: string) => {
12
+ setNumberValue(value);
13
+ };
14
+
15
+ const getDoubleValue = (): number => {
16
+ const num = parseFloat(numberValue);
17
+ return isNaN(num) ? 0 : num * 2;
18
+ };
19
+
20
+ return (
21
+ <DemoPage
22
+ title="Modus Number Input"
23
+ description="Number inputs provide a controlled way to enter numeric values. Use number inputs for quantities, amounts, ratings, or any numeric data entry."
24
+ >
25
+ <DemoExample
26
+ title="Basic Number Input"
27
+ description="Simple number input with label."
28
+ >
29
+ <div className="flex flex-col gap-6">
30
+ <div className="flex flex-col gap-2">
31
+ <ModusNumberInput
32
+ inputId="quantity-input"
33
+ label="Quantity"
34
+ placeholder="0"
35
+ step={1}
36
+ />
37
+ </div>
38
+
39
+ <div className="flex flex-col gap-2">
40
+ <ModusNumberInput
41
+ inputId="price-input"
42
+ label="Price"
43
+ placeholder="0.00"
44
+ step={0.01}
45
+ />
46
+ </div>
47
+ </div>
48
+ </DemoExample>
49
+
50
+ <DemoExample
51
+ title="Number Input Sizes"
52
+ description="Number inputs in different sizes."
53
+ >
54
+ <div className="flex flex-col gap-6">
55
+ <div className="flex flex-col gap-2">
56
+ <ModusNumberInput
57
+ inputId="small-number"
58
+ label="Small"
59
+ size="sm"
60
+ placeholder="0"
61
+ />
62
+ </div>
63
+
64
+ <div className="flex flex-col gap-2">
65
+ <ModusNumberInput
66
+ inputId="medium-number"
67
+ label="Medium"
68
+ size="md"
69
+ placeholder="0"
70
+ />
71
+ </div>
72
+
73
+ <div className="flex flex-col gap-2">
74
+ <ModusNumberInput
75
+ inputId="large-number"
76
+ label="Large"
77
+ size="lg"
78
+ placeholder="0"
79
+ />
80
+ </div>
81
+ </div>
82
+ </DemoExample>
83
+
84
+ <DemoExample
85
+ title="Number Input with Constraints"
86
+ description="Number inputs with min, max, and step values."
87
+ >
88
+ <div className="flex flex-col gap-6">
89
+ <div className="flex flex-col gap-2">
90
+ <ModusNumberInput
91
+ inputId="age-input"
92
+ label="Age"
93
+ placeholder="Enter age"
94
+ min={1}
95
+ max={120}
96
+ step={1}
97
+ />
98
+ </div>
99
+
100
+ <div className="flex flex-col gap-2">
101
+ <ModusNumberInput
102
+ inputId="percentage-input"
103
+ label="Percentage"
104
+ placeholder="0"
105
+ min={0}
106
+ max={100}
107
+ step={1}
108
+ />
109
+ </div>
110
+
111
+ <div className="flex flex-col gap-2">
112
+ <ModusNumberInput
113
+ inputId="decimal-input"
114
+ label="Decimal"
115
+ placeholder="0.0"
116
+ min={0}
117
+ max={10}
118
+ step={0.1}
119
+ />
120
+ </div>
121
+ </div>
122
+ </DemoExample>
123
+
124
+ <DemoExample
125
+ title="Currency Number Input"
126
+ description="Number input with currency symbol."
127
+ >
128
+ <div className="flex flex-col gap-6">
129
+ <div className="flex flex-col gap-2">
130
+ <ModusNumberInput
131
+ inputId="usd-input"
132
+ label="USD Amount"
133
+ placeholder="0.00"
134
+ currencySymbol="$"
135
+ step={0.01}
136
+ />
137
+ </div>
138
+
139
+ <div className="flex flex-col gap-2">
140
+ <ModusNumberInput
141
+ inputId="eur-input"
142
+ label="EUR Amount"
143
+ placeholder="0.00"
144
+ currencySymbol="€"
145
+ step={0.01}
146
+ />
147
+ </div>
148
+ </div>
149
+ </DemoExample>
150
+
151
+ <DemoExample
152
+ title="Interactive Example"
153
+ description="Number input with two-way binding and event handling."
154
+ >
155
+ <div className="flex flex-col gap-6">
156
+ <div className="flex flex-col gap-2">
157
+ <ModusNumberInput
158
+ inputId="interactive-number"
159
+ label="Enter a Number"
160
+ placeholder="0"
161
+ value={numberValue}
162
+ step={1}
163
+ onInputChange={handleNumberChange}
164
+ />
165
+ </div>
166
+ {numberValue !== null && numberValue !== "" && (
167
+ <div className="p-4 rounded-lg bg-card border border-border">
168
+ <div className="text-sm text-foreground mb-2">
169
+ <strong>Current Value:</strong> {numberValue}
170
+ </div>
171
+ <div className="text-sm text-foreground">
172
+ <strong>Double Value:</strong> {getDoubleValue()}
173
+ </div>
174
+ </div>
175
+ )}
176
+ </div>
177
+ </DemoExample>
178
+ </DemoPage>
179
+ );
180
+ }