@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,197 @@
1
+ "use client";
2
+
3
+ import { useState } from "react";
4
+ import DemoExample from "../../components/DemoExample";
5
+ import DemoPage from "../../components/DemoPage";
6
+ import ModusChip from "../../components/ModusChip";
7
+ import ModusButton from "../../components/ModusButton";
8
+
9
+ interface Tag {
10
+ id: string;
11
+ label: string;
12
+ }
13
+
14
+ export default function ChipDemoPage() {
15
+ // Removable tags demo state
16
+ const [activeTags, setActiveTags] = useState<Tag[]>([
17
+ { id: "urgent", label: "Urgent" },
18
+ { id: "review", label: "Needs Review" },
19
+ { id: "approved", label: "Approved" },
20
+ { id: "archived", label: "Archived" },
21
+ ]);
22
+ const [removedTags, setRemovedTags] = useState<Tag[]>([]);
23
+
24
+ const removeTag = (tagId: string) => {
25
+ const tag = activeTags.find((t) => t.id === tagId);
26
+ if (tag) {
27
+ setActiveTags((tags) => tags.filter((t) => t.id !== tagId));
28
+ setRemovedTags((tags) => [...tags, tag]);
29
+ }
30
+ };
31
+
32
+ const restoreTags = () => {
33
+ setActiveTags((tags) => [...tags, ...removedTags]);
34
+ setRemovedTags([]);
35
+ };
36
+
37
+ return (
38
+ <DemoPage
39
+ title="Modus Chip"
40
+ description="Compact visual elements for tags, selections, or status pills. Chips support filled/outline variants, three sizes, active/error/disabled states, and optional remove buttons."
41
+ >
42
+ <DemoExample
43
+ title="Removable Tags"
44
+ description="Chips with remove buttons for deletable items like tags, filters, or selections."
45
+ >
46
+ <div className="p-6 rounded-lg bg-card border-default">
47
+ <div className="text-base font-semibold mb-2 text-foreground">
48
+ Applied Tags
49
+ </div>
50
+ <div className="text-sm text-muted-foreground mb-4">
51
+ Click the X to remove tags
52
+ </div>
53
+ {activeTags.length > 0 ? (
54
+ <div className="flex flex-wrap gap-3">
55
+ {activeTags.map((tag) => (
56
+ <ModusChip
57
+ key={tag.id}
58
+ label={tag.label}
59
+ showRemove
60
+ onChipRemove={() => removeTag(tag.id)}
61
+ />
62
+ ))}
63
+ </div>
64
+ ) : (
65
+ <div className="text-sm text-muted-foreground italic">
66
+ No tags applied
67
+ </div>
68
+ )}
69
+ {removedTags.length > 0 && (
70
+ <div className="mt-4 pt-4 border-t border-default flex items-center gap-3">
71
+ <div className="text-sm text-muted-foreground">Removed:</div>
72
+ {removedTags.map((tag) => (
73
+ <ModusChip key={tag.id} label={tag.label} disabled size="sm" />
74
+ ))}
75
+ <ModusButton
76
+ color="primary"
77
+ variant="borderless"
78
+ size="sm"
79
+ onButtonClick={restoreTags}
80
+ className="ml-2"
81
+ >
82
+ Restore all
83
+ </ModusButton>
84
+ </div>
85
+ )}
86
+ </div>
87
+ </DemoExample>
88
+
89
+ <DemoExample
90
+ title="Chip Variants"
91
+ description="Two visual styles: filled (solid background) and outline (transparent with border)."
92
+ >
93
+ <div className="flex flex-col gap-6">
94
+ <div>
95
+ <div className="text-sm font-medium mb-3 text-muted-foreground">
96
+ Filled (Default)
97
+ </div>
98
+ <div className="flex flex-wrap gap-3">
99
+ <ModusChip label="Default" variant="filled" />
100
+ <ModusChip label="Active" variant="filled" active />
101
+ <ModusChip label="Removable" variant="filled" showRemove />
102
+ </div>
103
+ </div>
104
+ <div>
105
+ <div className="text-sm font-medium mb-3 text-muted-foreground">
106
+ Outline
107
+ </div>
108
+ <div className="flex flex-wrap gap-3">
109
+ <ModusChip label="Default" variant="outline" />
110
+ <ModusChip label="Active" variant="outline" active />
111
+ <ModusChip label="Removable" variant="outline" showRemove />
112
+ </div>
113
+ </div>
114
+ </div>
115
+ </DemoExample>
116
+
117
+ <DemoExample
118
+ title="Chip Sizes"
119
+ description="Three size options: sm (20px), md (24px), and lg (28px) for different contexts."
120
+ >
121
+ <div className="flex flex-wrap items-center gap-4">
122
+ <ModusChip label="Small" size="sm" />
123
+ <ModusChip label="Medium" size="md" />
124
+ <ModusChip label="Large" size="lg" />
125
+ </div>
126
+ <div className="flex flex-wrap items-center gap-4 mt-4">
127
+ <ModusChip label="Small" size="sm" variant="outline" active />
128
+ <ModusChip label="Medium" size="md" variant="outline" active />
129
+ <ModusChip label="Large" size="lg" variant="outline" active />
130
+ </div>
131
+ </DemoExample>
132
+
133
+ <DemoExample
134
+ title="States"
135
+ description="Active state for selections, disabled state for unavailable options, and error state for validation."
136
+ >
137
+ <div className="flex flex-col gap-6">
138
+ <div>
139
+ <div className="text-sm font-medium mb-3 text-muted-foreground">
140
+ Active State
141
+ </div>
142
+ <div className="flex flex-wrap gap-3">
143
+ <ModusChip label="Selected" active />
144
+ <ModusChip label="Pressed" active variant="outline" />
145
+ </div>
146
+ </div>
147
+ <div>
148
+ <div className="text-sm font-medium mb-3 text-muted-foreground">
149
+ Disabled State
150
+ </div>
151
+ <div className="flex flex-wrap gap-3">
152
+ <ModusChip label="Disabled" disabled />
153
+ <ModusChip label="Disabled Outline" disabled variant="outline" />
154
+ <ModusChip label="Disabled Active" disabled active />
155
+ </div>
156
+ </div>
157
+ <div>
158
+ <div className="text-sm font-medium mb-3 text-muted-foreground">
159
+ Error State
160
+ </div>
161
+ <div className="flex flex-wrap gap-3">
162
+ <ModusChip label="Invalid" hasError />
163
+ <ModusChip label="Error" hasError variant="outline" />
164
+ <ModusChip label="Remove Error" hasError showRemove />
165
+ </div>
166
+ </div>
167
+ </div>
168
+ </DemoExample>
169
+
170
+ <DemoExample
171
+ title="Status Pills"
172
+ description="Use chips as status indicators with appropriate styling."
173
+ >
174
+ <div className="flex flex-col gap-4">
175
+ <div className="flex items-center gap-4">
176
+ <div className="w-24 text-sm text-muted-foreground">
177
+ Order Status:
178
+ </div>
179
+ <ModusChip label="Pending" variant="outline" />
180
+ </div>
181
+ <div className="flex items-center gap-4">
182
+ <div className="w-24 text-sm text-muted-foreground">Active:</div>
183
+ <ModusChip label="In Progress" active />
184
+ </div>
185
+ <div className="flex items-center gap-4">
186
+ <div className="w-24 text-sm text-muted-foreground">Completed:</div>
187
+ <ModusChip label="Done" variant="filled" />
188
+ </div>
189
+ <div className="flex items-center gap-4">
190
+ <div className="w-24 text-sm text-muted-foreground">Error:</div>
191
+ <ModusChip label="Failed" hasError />
192
+ </div>
193
+ </div>
194
+ </DemoExample>
195
+ </DemoPage>
196
+ );
197
+ }
@@ -0,0 +1,179 @@
1
+ "use client";
2
+
3
+ import { useState, useMemo } from "react";
4
+ import DemoExample from "../../components/DemoExample";
5
+ import DemoPage from "../../components/DemoPage";
6
+ import ModusDate from "../../components/ModusDate";
7
+
8
+ export default function DateDemoPage() {
9
+ // Basic date input state
10
+ const [selectedDate, setSelectedDate] = useState<string>("");
11
+
12
+ // Date constraints state
13
+ const [startDate, setStartDate] = useState<string>("");
14
+ const [endDate, setEndDate] = useState<string>("");
15
+
16
+ // Calculate min and max dates
17
+ const minDate = useMemo(() => {
18
+ const today = new Date();
19
+ return today.toISOString().split("T")[0];
20
+ }, []);
21
+
22
+ const maxDate = useMemo(() => {
23
+ const oneYearFromNow = new Date();
24
+ oneYearFromNow.setFullYear(oneYearFromNow.getFullYear() + 1);
25
+ return oneYearFromNow.toISOString().split("T")[0];
26
+ }, []);
27
+
28
+ const handleDateChange = (event: CustomEvent<InputEvent>) => {
29
+ const target = event.detail.target as HTMLInputElement;
30
+ setSelectedDate(target.value);
31
+ };
32
+
33
+ const handleStartDateChange = (event: CustomEvent<InputEvent>) => {
34
+ const target = event.detail.target as HTMLInputElement;
35
+ setStartDate(target.value);
36
+ };
37
+
38
+ const handleEndDateChange = (event: CustomEvent<InputEvent>) => {
39
+ const target = event.detail.target as HTMLInputElement;
40
+ setEndDate(target.value);
41
+ };
42
+
43
+ return (
44
+ <DemoPage
45
+ title="Modus Date"
46
+ description="Date inputs allow users to select dates from a calendar picker or enter dates manually. Use date inputs for birth dates, appointment scheduling, date ranges, and any scenario requiring date selection."
47
+ >
48
+ <DemoExample
49
+ title="Basic Date Input"
50
+ description="Simple date input with label for date selection."
51
+ >
52
+ <div className="flex flex-col gap-4">
53
+ <ModusDate
54
+ label="Select Date"
55
+ value={selectedDate}
56
+ onInputChange={handleDateChange}
57
+ />
58
+ {selectedDate && (
59
+ <div className="mt-4 p-4 rounded-lg bg-muted text-muted-foreground">
60
+ <div className="font-semibold mb-2">Selected Date:</div>
61
+ <div className="text-sm">{selectedDate}</div>
62
+ </div>
63
+ )}
64
+ </div>
65
+ </DemoExample>
66
+
67
+ <DemoExample
68
+ title="Date Sizes"
69
+ description="Different sizes for various contexts and visual hierarchy."
70
+ >
71
+ <div className="flex flex-col gap-4">
72
+ <ModusDate label="Small Date Input" size="sm" />
73
+ <ModusDate label="Medium Date Input (Default)" size="md" />
74
+ <ModusDate label="Large Date Input" size="lg" />
75
+ </div>
76
+ </DemoExample>
77
+
78
+ <DemoExample
79
+ title="Date Formats"
80
+ description="Different date format options for various locales and preferences."
81
+ >
82
+ <div className="flex flex-col gap-4">
83
+ <ModusDate label="YYYY-MM-DD Format" format="yyyy-mm-dd" />
84
+ <ModusDate label="DD-MM-YYYY Format" format="dd-mm-yyyy" />
85
+ <ModusDate label="YYYY/MM/DD Format" format="yyyy/mm/dd" />
86
+ <ModusDate label="DD/MM/YYYY Format" format="dd/mm/yyyy" />
87
+ <ModusDate label="MMM DD, YYYY Format" format="MMM DD, YYYY" />
88
+ </div>
89
+ </DemoExample>
90
+
91
+ <DemoExample
92
+ title="Date Constraints"
93
+ description="Set minimum and maximum dates to restrict date selection."
94
+ >
95
+ <div className="flex flex-col gap-4">
96
+ <ModusDate
97
+ label="Start Date (Min: Today)"
98
+ min={minDate}
99
+ value={startDate}
100
+ onInputChange={handleStartDateChange}
101
+ />
102
+ <ModusDate
103
+ label="End Date (Max: 1 Year from Start)"
104
+ min={startDate || minDate}
105
+ max={maxDate}
106
+ value={endDate}
107
+ onInputChange={handleEndDateChange}
108
+ />
109
+ </div>
110
+ </DemoExample>
111
+
112
+ <DemoExample
113
+ title="Feedback Messages"
114
+ description="Display validation feedback with different severity levels."
115
+ >
116
+ <div className="flex flex-col gap-4">
117
+ <ModusDate
118
+ label="Date with Success Feedback"
119
+ feedback={{
120
+ level: "success",
121
+ message: "Date is valid",
122
+ }}
123
+ />
124
+ <ModusDate
125
+ label="Date with Warning Feedback"
126
+ feedback={{
127
+ level: "warning",
128
+ message: "Please verify the date",
129
+ }}
130
+ />
131
+ <ModusDate
132
+ label="Date with Error Feedback"
133
+ feedback={{
134
+ level: "error",
135
+ message: "Invalid date format",
136
+ }}
137
+ />
138
+ <ModusDate
139
+ label="Date with Info Feedback"
140
+ feedback={{
141
+ level: "info",
142
+ message: "Select a date within the next 30 days",
143
+ }}
144
+ />
145
+ </div>
146
+ </DemoExample>
147
+
148
+ <DemoExample
149
+ title="Disabled and Read-Only States"
150
+ description="Date inputs in disabled and read-only states."
151
+ >
152
+ <div className="flex flex-col gap-4">
153
+ <ModusDate label="Disabled Date Input" disabled value="2024-01-15" />
154
+ <ModusDate label="Read-Only Date Input" readOnly value="2024-06-20" />
155
+ </div>
156
+ </DemoExample>
157
+
158
+ <DemoExample
159
+ title="Required Field"
160
+ description="Mark date inputs as required for form validation."
161
+ >
162
+ <div className="flex flex-col gap-4">
163
+ <ModusDate label="Birth Date (Required)" required />
164
+ <ModusDate label="Appointment Date (Required)" required />
165
+ </div>
166
+ </DemoExample>
167
+
168
+ <DemoExample
169
+ title="Bordered and Borderless"
170
+ description="Date inputs with and without borders."
171
+ >
172
+ <div className="flex flex-col gap-4">
173
+ <ModusDate label="Bordered Date Input (Default)" bordered />
174
+ <ModusDate label="Borderless Date Input" bordered={false} />
175
+ </div>
176
+ </DemoExample>
177
+ </DemoPage>
178
+ );
179
+ }
@@ -0,0 +1,150 @@
1
+ "use client";
2
+
3
+ import DemoExample from "../../components/DemoExample";
4
+ import DemoPage from "../../components/DemoPage";
5
+ import ModusDropdownMenu from "../../components/ModusDropdownMenu";
6
+ import type { MenuItem } from "../../components/ModusMenu";
7
+
8
+ // Menu items for basic examples
9
+ const basicMenuItems: MenuItem[] = [
10
+ { label: "Option 1", value: "option1" },
11
+ { label: "Option 2", value: "option2" },
12
+ ];
13
+
14
+ const actionMenuItems: MenuItem[] = [
15
+ { label: "Action 1", value: "action1" },
16
+ { label: "Action 2", value: "action2" },
17
+ ];
18
+
19
+ const itemMenuItems: MenuItem[] = [
20
+ { label: "Item 1", value: "item1" },
21
+ { label: "Item 2", value: "item2" },
22
+ ];
23
+
24
+ export default function DropdownDemoPage() {
25
+ return (
26
+ <DemoPage
27
+ title="Modus Dropdown Menu"
28
+ description="Dropdown menus provide a compact way to display multiple actions or options in a menu that opens on demand."
29
+ >
30
+ {/* Button Colors */}
31
+ <DemoExample
32
+ title="Button Colors"
33
+ description="Dropdown menus with different button colors."
34
+ >
35
+ <div className="flex flex-wrap gap-4">
36
+ <ModusDropdownMenu
37
+ buttonColor="primary"
38
+ menuItems={basicMenuItems}
39
+ buttonContent={<div>Primary</div>}
40
+ />
41
+ <ModusDropdownMenu
42
+ buttonColor="secondary"
43
+ menuItems={basicMenuItems}
44
+ buttonContent={<div>Secondary</div>}
45
+ />
46
+ <ModusDropdownMenu
47
+ buttonColor="tertiary"
48
+ menuItems={basicMenuItems}
49
+ buttonContent={<div>Tertiary</div>}
50
+ />
51
+ </div>
52
+ </DemoExample>
53
+
54
+ {/* Button Variants */}
55
+ <DemoExample
56
+ title="Button Variants"
57
+ description="Dropdown menus with different button visual styles."
58
+ >
59
+ <div className="flex flex-wrap gap-4">
60
+ <ModusDropdownMenu
61
+ buttonVariant="filled"
62
+ menuItems={actionMenuItems}
63
+ buttonContent={<div>Filled</div>}
64
+ />
65
+ <ModusDropdownMenu
66
+ buttonVariant="outlined"
67
+ menuItems={actionMenuItems}
68
+ buttonContent={<div>Outlined</div>}
69
+ />
70
+ <ModusDropdownMenu
71
+ buttonVariant="borderless"
72
+ menuItems={actionMenuItems}
73
+ buttonContent={<div>Borderless</div>}
74
+ />
75
+ </div>
76
+ </DemoExample>
77
+
78
+ {/* Custom Button Content */}
79
+ <DemoExample
80
+ title="Custom Button Content"
81
+ description="Dropdown menus with custom button content including icons."
82
+ >
83
+ <div className="flex flex-wrap gap-4">
84
+ <ModusDropdownMenu
85
+ menuItems={[
86
+ { label: "Preferences", value: "prefs" },
87
+ { label: "Account", value: "account" },
88
+ ]}
89
+ buttonContent={
90
+ <div className="flex items-center gap-2">
91
+ <i className="modus-icons text-lg">settings</i>
92
+ <div>Settings</div>
93
+ </div>
94
+ }
95
+ />
96
+ <ModusDropdownMenu
97
+ menuItems={[
98
+ { label: "Profile", value: "profile" },
99
+ { label: "Settings", value: "settings" },
100
+ { label: "Log out", value: "logout" },
101
+ ]}
102
+ buttonContent={
103
+ <div className="flex items-center gap-2">
104
+ <i className="modus-icons text-lg">user_account</i>
105
+ <div>User Menu</div>
106
+ <i className="modus-icons text-sm">expand_more</i>
107
+ </div>
108
+ }
109
+ />
110
+ </div>
111
+ </DemoExample>
112
+
113
+ {/* Menu Placement */}
114
+ <DemoExample
115
+ title="Menu Placement"
116
+ description="Different menu placement options relative to the button."
117
+ >
118
+ <div className="flex flex-wrap gap-4">
119
+ <ModusDropdownMenu
120
+ menuPlacement="bottom-start"
121
+ menuItems={itemMenuItems}
122
+ buttonContent={<div>Bottom Start</div>}
123
+ />
124
+ <ModusDropdownMenu
125
+ menuPlacement="bottom-end"
126
+ menuItems={itemMenuItems}
127
+ buttonContent={<div>Bottom End</div>}
128
+ />
129
+ <ModusDropdownMenu
130
+ menuPlacement="top-start"
131
+ menuItems={itemMenuItems}
132
+ buttonContent={<div>Top Start</div>}
133
+ />
134
+ </div>
135
+ </DemoExample>
136
+
137
+ {/* Disabled State */}
138
+ <DemoExample
139
+ title="Disabled State"
140
+ description="Dropdown menu in disabled state."
141
+ >
142
+ <ModusDropdownMenu
143
+ disabled={true}
144
+ menuItems={itemMenuItems}
145
+ buttonContent={<div>Disabled Menu</div>}
146
+ />
147
+ </DemoExample>
148
+ </DemoPage>
149
+ );
150
+ }