@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,186 @@
1
+ import { useRef, useState } from "react";
2
+ import DemoExample from "../../components/DemoExample";
3
+ import DemoPage from "../../components/DemoPage";
4
+ import ModusFileDropzone, {
5
+ type ModusFileDropzoneHandle,
6
+ } from "../../components/ModusFileDropzone";
7
+ import ModusButton from "../../components/ModusButton";
8
+ import ModusProgress from "../../components/ModusProgress";
9
+
10
+ export default function FileDropzoneDemoPage() {
11
+ const dropzoneRef = useRef<ModusFileDropzoneHandle>(null);
12
+ const [selectedFiles, setSelectedFiles] = useState<string[]>([]);
13
+ const [uploadProgress, setUploadProgress] = useState(0);
14
+
15
+ const handleFileSelect = (event: CustomEvent<FileList>) => {
16
+ const files = event.detail;
17
+ const fileNames: string[] = [];
18
+ for (let i = 0; i < files.length; i++) {
19
+ fileNames.push(`${files[i].name} (${formatFileSize(files[i].size)})`);
20
+ }
21
+ setSelectedFiles(fileNames);
22
+ };
23
+
24
+ const formatFileSize = (bytes: number): string => {
25
+ if (bytes === 0) return "0 Bytes";
26
+ const k = 1024;
27
+ const sizes = ["Bytes", "KB", "MB", "GB"];
28
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
29
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
30
+ };
31
+
32
+ const handleReset = async () => {
33
+ await dropzoneRef.current?.reset();
34
+ setSelectedFiles([]);
35
+ };
36
+
37
+ const simulateUpload = () => {
38
+ setUploadProgress(0);
39
+ const interval = setInterval(() => {
40
+ setUploadProgress((prev) => {
41
+ if (prev >= 100) {
42
+ clearInterval(interval);
43
+ return 100;
44
+ }
45
+ return prev + 10;
46
+ });
47
+ }, 300);
48
+ };
49
+
50
+ return (
51
+ <DemoPage
52
+ title="Modus File Dropzone"
53
+ description="File dropzone allows users to drag and drop files for upload, with built-in validation for file types, sizes, counts, and filename lengths."
54
+ >
55
+ <DemoExample
56
+ title="Basic File Dropzone"
57
+ description="A simple file dropzone accepting document files."
58
+ >
59
+ <ModusFileDropzone
60
+ acceptFileTypes=".doc, .docx, .pdf"
61
+ instructions="Drag files here or browse to upload (.doc, .docx, .pdf)"
62
+ onFileSelect={handleFileSelect}
63
+ />
64
+ {selectedFiles.length > 0 && (
65
+ <div className="mt-4 p-4 bg-muted rounded-lg">
66
+ <div className="text-sm font-medium text-foreground mb-2">
67
+ Selected Files:
68
+ </div>
69
+ <div className="text-sm text-muted-foreground space-y-1">
70
+ {selectedFiles.map((file, index) => (
71
+ <div key={`file-${index}`}>{file}</div>
72
+ ))}
73
+ </div>
74
+ </div>
75
+ )}
76
+ </DemoExample>
77
+
78
+ <DemoExample
79
+ title="Multiple File Selection"
80
+ description="Allow users to select multiple files at once."
81
+ >
82
+ <ModusFileDropzone
83
+ acceptFileTypes="image/*"
84
+ multiple
85
+ instructions="Select multiple image files (drag or click)"
86
+ />
87
+ </DemoExample>
88
+
89
+ <DemoExample
90
+ title="With Validation Constraints"
91
+ description="Set limits on file count, total size, and filename length."
92
+ >
93
+ <ModusFileDropzone
94
+ acceptFileTypes=".doc, .docx, .pdf"
95
+ multiple
96
+ maxFileCount={3}
97
+ maxFileNameLength={20}
98
+ maxTotalFileSizeBytes={10485760}
99
+ invalidFileTypeMessage="Invalid file format. Please upload .doc, .docx, or .pdf files."
100
+ instructions="Upload files (max 3 files, 10MB total, filename max 20 chars)"
101
+ />
102
+ </DemoExample>
103
+
104
+ <DemoExample
105
+ title="Custom Messages"
106
+ description="Customize success, error, and drag-over messages."
107
+ >
108
+ <ModusFileDropzone
109
+ acceptFileTypes=".jpg, .jpeg, .png, .gif"
110
+ multiple
111
+ instructions="Upload your images here"
112
+ fileDraggedOverInstructions="Release to upload your images"
113
+ successMessage="Images uploaded successfully!"
114
+ invalidFileTypeMessage="Only image files (.jpg, .png, .gif) are allowed"
115
+ />
116
+ </DemoExample>
117
+
118
+ <DemoExample
119
+ title="With Progress Indicator"
120
+ description="Add custom content like progress bars using the slot."
121
+ >
122
+ <div className="flex flex-col gap-4">
123
+ <ModusFileDropzone
124
+ acceptFileTypes=".pdf, .doc, .docx"
125
+ successMessage="Files ready for upload!"
126
+ instructions="Drag files here or browse to upload"
127
+ onFileSelect={simulateUpload}
128
+ >
129
+ {uploadProgress > 0 && uploadProgress < 100 && (
130
+ <div className="w-64 mt-4">
131
+ <ModusProgress
132
+ value={uploadProgress}
133
+ label={`${uploadProgress}% Uploaded`}
134
+ />
135
+ </div>
136
+ )}
137
+ </ModusFileDropzone>
138
+ {uploadProgress === 100 && (
139
+ <div className="text-sm text-success">Upload complete!</div>
140
+ )}
141
+ </div>
142
+ </DemoExample>
143
+
144
+ <DemoExample
145
+ title="Without State Icon"
146
+ description="Hide the upload/success/error icons for a minimal appearance."
147
+ >
148
+ <ModusFileDropzone
149
+ acceptFileTypes=".csv, .xlsx"
150
+ includeStateIcon={false}
151
+ instructions="Drop spreadsheet files here (.csv, .xlsx)"
152
+ />
153
+ </DemoExample>
154
+
155
+ <DemoExample
156
+ title="Disabled State"
157
+ description="Disable the dropzone when file upload is not available."
158
+ >
159
+ <ModusFileDropzone
160
+ disabled
161
+ instructions="File upload is currently disabled"
162
+ />
163
+ </DemoExample>
164
+
165
+ <DemoExample
166
+ title="Programmatic Reset"
167
+ description="Reset the dropzone state using a ref."
168
+ >
169
+ <div className="flex flex-col gap-4">
170
+ <ModusFileDropzone
171
+ ref={dropzoneRef}
172
+ acceptFileTypes=".txt, .md"
173
+ instructions="Upload text files, then use the reset button"
174
+ />
175
+ <ModusButton
176
+ variant="outlined"
177
+ color="secondary"
178
+ onButtonClick={handleReset}
179
+ >
180
+ Reset Dropzone
181
+ </ModusButton>
182
+ </div>
183
+ </DemoExample>
184
+ </DemoPage>
185
+ );
186
+ }
@@ -0,0 +1,313 @@
1
+ import DemoExample from "../../components/DemoExample";
2
+ import DemoPage from "../../components/DemoPage";
3
+ import ModusHandle from "../../components/ModusHandle";
4
+
5
+ export default function HandleDemoPage() {
6
+ return (
7
+ <DemoPage
8
+ title="Modus Handle"
9
+ description="Handle is a draggable component for resizing adjacent elements. It supports both bar and button styles, horizontal and vertical orientations, and keyboard navigation."
10
+ >
11
+ <DemoExample
12
+ title="Horizontal Bar Handle"
13
+ description="Drag the handle to resize the left and right panels."
14
+ >
15
+ <div className="flex h-64 border border-border rounded-lg overflow-hidden">
16
+ <div id="h-left-panel-1" className="bg-card p-4 min-w-24 w-[200px]">
17
+ <div className="text-sm font-medium text-foreground">
18
+ Left Panel
19
+ </div>
20
+ <div className="text-xs text-muted-foreground mt-2">
21
+ Drag the handle to resize
22
+ </div>
23
+ </div>
24
+ <ModusHandle
25
+ orientation="horizontal"
26
+ leftTarget="#h-left-panel-1"
27
+ rightTarget="#h-right-panel-1"
28
+ />
29
+ <div id="h-right-panel-1" className="bg-muted p-4 flex-1 min-w-24">
30
+ <div className="text-sm font-medium text-foreground">
31
+ Right Panel
32
+ </div>
33
+ <div className="text-xs text-muted-foreground mt-2">
34
+ This panel resizes automatically
35
+ </div>
36
+ </div>
37
+ </div>
38
+ </DemoExample>
39
+
40
+ <DemoExample
41
+ title="Vertical Bar Handle"
42
+ description="Resize panels vertically by dragging up or down."
43
+ >
44
+ <div className="flex flex-col h-80 border border-border rounded-lg overflow-hidden">
45
+ <div id="v-top-panel-1" className="bg-card p-4 min-h-16 h-[120px]">
46
+ <div className="text-sm font-medium text-foreground">Top Panel</div>
47
+ <div className="text-xs text-muted-foreground mt-2">
48
+ Drag the handle below to resize
49
+ </div>
50
+ </div>
51
+ <ModusHandle
52
+ orientation="vertical"
53
+ leftTarget="#v-top-panel-1"
54
+ rightTarget="#v-bottom-panel-1"
55
+ />
56
+ <div id="v-bottom-panel-1" className="bg-muted p-4 flex-1 min-h-16">
57
+ <div className="text-sm font-medium text-foreground">
58
+ Bottom Panel
59
+ </div>
60
+ <div className="text-xs text-muted-foreground mt-2">
61
+ This panel resizes automatically
62
+ </div>
63
+ </div>
64
+ </div>
65
+ </DemoExample>
66
+
67
+ <DemoExample
68
+ title="Button Type Handle"
69
+ description="A button-style handle with a drag icon for better visibility."
70
+ >
71
+ <div className="flex h-64 border border-border rounded-lg overflow-hidden">
72
+ <div id="btn-left-panel" className="bg-card p-4 min-w-24 w-[200px]">
73
+ <div className="text-sm font-medium text-foreground">Panel A</div>
74
+ <div className="text-xs text-muted-foreground mt-2">
75
+ Button handle style
76
+ </div>
77
+ </div>
78
+ <ModusHandle
79
+ type="button"
80
+ orientation="horizontal"
81
+ buttonColor="primary"
82
+ buttonVariant="outlined"
83
+ leftTarget="#btn-left-panel"
84
+ rightTarget="#btn-right-panel"
85
+ />
86
+ <div id="btn-right-panel" className="bg-muted p-4 flex-1 min-w-24">
87
+ <div className="text-sm font-medium text-foreground">Panel B</div>
88
+ <div className="text-xs text-muted-foreground mt-2">
89
+ Click and drag the button
90
+ </div>
91
+ </div>
92
+ </div>
93
+ </DemoExample>
94
+
95
+ <DemoExample
96
+ title="Button Handle Variants"
97
+ description="Different button colors and styles for the handle."
98
+ >
99
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
100
+ <div className="flex h-48 border border-border rounded-lg overflow-hidden">
101
+ <div id="btn-var-left-1" className="bg-card p-4 min-w-20 w-[120px]">
102
+ <div className="text-xs font-medium text-foreground">
103
+ Primary Filled
104
+ </div>
105
+ </div>
106
+ <ModusHandle
107
+ type="button"
108
+ orientation="horizontal"
109
+ buttonColor="primary"
110
+ buttonVariant="filled"
111
+ leftTarget="#btn-var-left-1"
112
+ rightTarget="#btn-var-right-1"
113
+ />
114
+ <div id="btn-var-right-1" className="bg-muted p-4 flex-1 min-w-20">
115
+ <div className="text-xs text-muted-foreground">Resize me</div>
116
+ </div>
117
+ </div>
118
+ <div className="flex h-48 border border-border rounded-lg overflow-hidden">
119
+ <div id="btn-var-left-2" className="bg-card p-4 min-w-20 w-[120px]">
120
+ <div className="text-xs font-medium text-foreground">
121
+ Secondary Outlined
122
+ </div>
123
+ </div>
124
+ <ModusHandle
125
+ type="button"
126
+ orientation="horizontal"
127
+ buttonColor="secondary"
128
+ buttonVariant="outlined"
129
+ leftTarget="#btn-var-left-2"
130
+ rightTarget="#btn-var-right-2"
131
+ />
132
+ <div id="btn-var-right-2" className="bg-muted p-4 flex-1 min-w-20">
133
+ <div className="text-xs text-muted-foreground">Resize me</div>
134
+ </div>
135
+ </div>
136
+ <div className="flex h-48 border border-border rounded-lg overflow-hidden">
137
+ <div id="btn-var-left-3" className="bg-card p-4 min-w-20 w-[120px]">
138
+ <div className="text-xs font-medium text-foreground">
139
+ Tertiary Borderless
140
+ </div>
141
+ </div>
142
+ <ModusHandle
143
+ type="button"
144
+ orientation="horizontal"
145
+ buttonColor="tertiary"
146
+ buttonVariant="borderless"
147
+ leftTarget="#btn-var-left-3"
148
+ rightTarget="#btn-var-right-3"
149
+ />
150
+ <div id="btn-var-right-3" className="bg-muted p-4 flex-1 min-w-20">
151
+ <div className="text-xs text-muted-foreground">Resize me</div>
152
+ </div>
153
+ </div>
154
+ <div className="flex h-48 border border-border rounded-lg overflow-hidden">
155
+ <div id="btn-var-left-4" className="bg-card p-4 min-w-20 w-[120px]">
156
+ <div className="text-xs font-medium text-foreground">
157
+ Warning Filled
158
+ </div>
159
+ </div>
160
+ <ModusHandle
161
+ type="button"
162
+ orientation="horizontal"
163
+ buttonColor="warning"
164
+ buttonVariant="filled"
165
+ leftTarget="#btn-var-left-4"
166
+ rightTarget="#btn-var-right-4"
167
+ />
168
+ <div id="btn-var-right-4" className="bg-muted p-4 flex-1 min-w-20">
169
+ <div className="text-xs text-muted-foreground">Resize me</div>
170
+ </div>
171
+ </div>
172
+ </div>
173
+ </DemoExample>
174
+
175
+ <DemoExample
176
+ title="Handle Sizes"
177
+ description="Different bar sizes for the handle component."
178
+ >
179
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
180
+ <div className="flex h-40 border border-border rounded-lg overflow-hidden">
181
+ <div id="size-left-1" className="bg-card p-4 min-w-20 w-[100px]">
182
+ <div className="text-xs font-medium text-foreground">Default</div>
183
+ </div>
184
+ <ModusHandle
185
+ size="default"
186
+ orientation="horizontal"
187
+ leftTarget="#size-left-1"
188
+ rightTarget="#size-right-1"
189
+ />
190
+ <div id="size-right-1" className="bg-muted p-4 flex-1 min-w-20" />
191
+ </div>
192
+ <div className="flex h-40 border border-border rounded-lg overflow-hidden">
193
+ <div id="size-left-2" className="bg-card p-4 min-w-20 w-[100px]">
194
+ <div className="text-xs font-medium text-foreground">Large</div>
195
+ </div>
196
+ <ModusHandle
197
+ size="lg"
198
+ orientation="horizontal"
199
+ leftTarget="#size-left-2"
200
+ rightTarget="#size-right-2"
201
+ />
202
+ <div id="size-right-2" className="bg-muted p-4 flex-1 min-w-20" />
203
+ </div>
204
+ <div className="flex h-40 border border-border rounded-lg overflow-hidden">
205
+ <div id="size-left-3" className="bg-card p-4 min-w-20 w-[100px]">
206
+ <div className="text-xs font-medium text-foreground">
207
+ Extra Large
208
+ </div>
209
+ </div>
210
+ <ModusHandle
211
+ size="xl"
212
+ orientation="horizontal"
213
+ leftTarget="#size-left-3"
214
+ rightTarget="#size-right-3"
215
+ />
216
+ <div id="size-right-3" className="bg-muted p-4 flex-1 min-w-20" />
217
+ </div>
218
+ <div className="flex h-40 border border-border rounded-lg overflow-hidden">
219
+ <div id="size-left-4" className="bg-card p-4 min-w-20 w-[100px]">
220
+ <div className="text-xs font-medium text-foreground">
221
+ 2X Large
222
+ </div>
223
+ </div>
224
+ <ModusHandle
225
+ size="2xl"
226
+ orientation="horizontal"
227
+ leftTarget="#size-left-4"
228
+ rightTarget="#size-right-4"
229
+ />
230
+ <div id="size-right-4" className="bg-muted p-4 flex-1 min-w-20" />
231
+ </div>
232
+ </div>
233
+ </DemoExample>
234
+
235
+ <DemoExample
236
+ title="Custom Default Split"
237
+ description="Set the initial split percentage for panels."
238
+ >
239
+ <div className="flex flex-col gap-4">
240
+ <div className="text-sm text-muted-foreground">30/70 Split</div>
241
+ <div className="flex h-48 border border-border rounded-lg overflow-hidden">
242
+ <div id="split-left-1" className="bg-card p-4 min-w-20">
243
+ <div className="text-xs font-medium text-foreground">30%</div>
244
+ </div>
245
+ <ModusHandle
246
+ orientation="horizontal"
247
+ defaultSplit={30}
248
+ leftTarget="#split-left-1"
249
+ rightTarget="#split-right-1"
250
+ />
251
+ <div id="split-right-1" className="bg-muted p-4 flex-1 min-w-20">
252
+ <div className="text-xs font-medium text-foreground">70%</div>
253
+ </div>
254
+ </div>
255
+ <div className="text-sm text-muted-foreground">70/30 Split</div>
256
+ <div className="flex h-48 border border-border rounded-lg overflow-hidden">
257
+ <div id="split-left-2" className="bg-card p-4 min-w-20">
258
+ <div className="text-xs font-medium text-foreground">70%</div>
259
+ </div>
260
+ <ModusHandle
261
+ orientation="horizontal"
262
+ defaultSplit={70}
263
+ leftTarget="#split-left-2"
264
+ rightTarget="#split-right-2"
265
+ />
266
+ <div id="split-right-2" className="bg-muted p-4 flex-1 min-w-20">
267
+ <div className="text-xs font-medium text-foreground">30%</div>
268
+ </div>
269
+ </div>
270
+ </div>
271
+ </DemoExample>
272
+
273
+ <DemoExample
274
+ title="Keyboard Navigation"
275
+ description="The handle supports keyboard navigation for accessibility."
276
+ >
277
+ <div className="flex flex-col gap-4">
278
+ <div className="p-4 bg-muted rounded-lg">
279
+ <div className="text-sm font-medium text-foreground mb-2">
280
+ Keyboard Controls:
281
+ </div>
282
+ <div className="text-xs text-muted-foreground space-y-1">
283
+ <div>Arrow Keys: Move handle 5px per press</div>
284
+ <div>Shift + Arrow Keys: Move handle 15px per press</div>
285
+ <div>Tab: Focus the handle element</div>
286
+ </div>
287
+ </div>
288
+ <div className="flex h-48 border border-border rounded-lg overflow-hidden">
289
+ <div id="kb-left" className="bg-card p-4 min-w-24 w-[200px]">
290
+ <div className="text-sm font-medium text-foreground">
291
+ Focus Here
292
+ </div>
293
+ <div className="text-xs text-muted-foreground mt-2">
294
+ Tab to handle, use arrow keys
295
+ </div>
296
+ </div>
297
+ <ModusHandle
298
+ orientation="horizontal"
299
+ leftTarget="#kb-left"
300
+ rightTarget="#kb-right"
301
+ ariaLabel="Resize panels using arrow keys"
302
+ />
303
+ <div id="kb-right" className="bg-muted p-4 flex-1 min-w-24">
304
+ <div className="text-sm font-medium text-foreground">
305
+ Right Panel
306
+ </div>
307
+ </div>
308
+ </div>
309
+ </div>
310
+ </DemoExample>
311
+ </DemoPage>
312
+ );
313
+ }
@@ -0,0 +1,72 @@
1
+ "use client";
2
+
3
+ import DemoExample from "../../components/DemoExample";
4
+ import DemoPage from "../../components/DemoPage";
5
+ import ModusIcon from "../../components/ModusIcon";
6
+
7
+ export default function IconDemoPage() {
8
+ return (
9
+ <DemoPage
10
+ title="Modus Icon"
11
+ description="Icons provide visual communication and enhance user understanding. Use icons consistently to reinforce meaning and improve usability."
12
+ >
13
+ <DemoExample
14
+ title="Icon Sizes"
15
+ description="Different icon sizes using the Modus font scale."
16
+ >
17
+ <div className="flex flex-wrap items-center gap-6">
18
+ <div className="flex flex-col items-center gap-2">
19
+ <ModusIcon name="star" size="sm" />
20
+ <div className="text-xs text-muted-foreground">Small (sm)</div>
21
+ </div>
22
+ <div className="flex flex-col items-center gap-2">
23
+ <ModusIcon name="star" size="md" />
24
+ <div className="text-xs text-muted-foreground">Medium (md)</div>
25
+ </div>
26
+ <div className="flex flex-col items-center gap-2">
27
+ <ModusIcon name="star" size="lg" />
28
+ <div className="text-xs text-muted-foreground">Large (lg)</div>
29
+ </div>
30
+ </div>
31
+ </DemoExample>
32
+
33
+ <DemoExample
34
+ title="Status Icons"
35
+ description="Icons commonly used to indicate status or state."
36
+ >
37
+ <div className="flex flex-wrap items-center gap-6">
38
+ <div className="flex flex-col items-center gap-2">
39
+ <ModusIcon
40
+ name="check_circle"
41
+ size="lg"
42
+ decorative={false}
43
+ ariaLabel="Success"
44
+ customClass="text-success"
45
+ />
46
+ <div className="text-xs text-muted-foreground">Success</div>
47
+ </div>
48
+ <div className="flex flex-col items-center gap-2">
49
+ <ModusIcon
50
+ name="info"
51
+ size="lg"
52
+ decorative={false}
53
+ ariaLabel="Info"
54
+ customClass="text-primary"
55
+ />
56
+ <div className="text-xs text-muted-foreground">Info</div>
57
+ </div>
58
+ <div className="flex flex-col items-center gap-2">
59
+ <ModusIcon
60
+ name="warning"
61
+ size="lg"
62
+ decorative={false}
63
+ ariaLabel="Warning"
64
+ customClass="text-warning"
65
+ />
66
+ <div className="text-xs text-muted-foreground">Warning</div>
67
+ </div>
68
+ </div>
69
+ </DemoExample>
70
+ </DemoPage>
71
+ );
72
+ }