@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,202 @@
1
+ "use client";
2
+
3
+ import DemoExample from "../../components/DemoExample";
4
+ import DemoPage from "../../components/DemoPage";
5
+ import ModusInputFeedback from "../../components/ModusInputFeedback";
6
+ import ModusTextInput from "../../components/ModusTextInput";
7
+ import ModusTextarea from "../../components/ModusTextarea";
8
+
9
+ export default function InputFeedbackDemoPage() {
10
+ return (
11
+ <DemoPage
12
+ title="Modus Input Feedback"
13
+ description="Input feedback provides validation messages and guidance to users for form inputs. Use feedback to communicate validation state and helpful information."
14
+ >
15
+ <DemoExample
16
+ title="Feedback Levels"
17
+ description="Different feedback levels to indicate validation state."
18
+ >
19
+ <div className="flex flex-col gap-6">
20
+ <div className="flex flex-col gap-2">
21
+ <ModusTextInput
22
+ label="Email"
23
+ type="email"
24
+ placeholder="user@example.com"
25
+ value="user@example.com"
26
+ />
27
+ <ModusInputFeedback
28
+ level="success"
29
+ message="Email address is valid."
30
+ />
31
+ </div>
32
+
33
+ <div className="flex flex-col gap-2">
34
+ <ModusTextInput
35
+ label="Password"
36
+ type="password"
37
+ placeholder="Enter password"
38
+ value=""
39
+ />
40
+ <ModusInputFeedback level="error" message="Password is required." />
41
+ </div>
42
+
43
+ <div className="flex flex-col gap-2">
44
+ <ModusTextInput
45
+ label="Username"
46
+ placeholder="Enter username"
47
+ value="test123"
48
+ />
49
+ <ModusInputFeedback
50
+ level="warning"
51
+ message="Username should be at least 8 characters."
52
+ />
53
+ </div>
54
+
55
+ <div className="flex flex-col gap-2">
56
+ <ModusTextInput
57
+ label="Website"
58
+ placeholder="https://example.com"
59
+ value=""
60
+ />
61
+ <ModusInputFeedback
62
+ level="info"
63
+ message="Enter the full URL including http:// or https://"
64
+ />
65
+ </div>
66
+ </div>
67
+ </DemoExample>
68
+
69
+ <DemoExample
70
+ title="Feedback with Textarea"
71
+ description="Input feedback can be used with textarea inputs."
72
+ >
73
+ <div className="flex flex-col gap-2">
74
+ <ModusTextarea
75
+ label="Comments"
76
+ placeholder="Enter your comments..."
77
+ rows={4}
78
+ value="This is a comment."
79
+ />
80
+ <ModusInputFeedback
81
+ level="success"
82
+ message="Comment saved successfully."
83
+ />
84
+ </div>
85
+ </DemoExample>
86
+
87
+ <DemoExample
88
+ title="Feedback Sizes"
89
+ description="Input feedback in different sizes."
90
+ >
91
+ <div className="flex flex-col gap-6">
92
+ <div className="flex flex-col gap-2">
93
+ <ModusTextInput label="Small Feedback" placeholder="Enter text" />
94
+ <ModusInputFeedback
95
+ level="info"
96
+ message="Small feedback message."
97
+ size="sm"
98
+ />
99
+ </div>
100
+
101
+ <div className="flex flex-col gap-2">
102
+ <ModusTextInput
103
+ label="Medium Feedback (Default)"
104
+ placeholder="Enter text"
105
+ />
106
+ <ModusInputFeedback
107
+ level="info"
108
+ message="Medium feedback message (default)."
109
+ size="md"
110
+ />
111
+ </div>
112
+
113
+ <div className="flex flex-col gap-2">
114
+ <ModusTextInput label="Large Feedback" placeholder="Enter text" />
115
+ <ModusInputFeedback
116
+ level="info"
117
+ message="Large feedback message."
118
+ size="lg"
119
+ />
120
+ </div>
121
+ </div>
122
+ </DemoExample>
123
+
124
+ <DemoExample
125
+ title="Custom Feedback Icons"
126
+ description="Feedback with custom icons."
127
+ >
128
+ <div className="flex flex-col gap-6">
129
+ <div className="flex flex-col gap-2">
130
+ <ModusTextInput
131
+ label="Custom Success Icon"
132
+ placeholder="Enter text"
133
+ />
134
+ <ModusInputFeedback
135
+ level="success"
136
+ message="Custom success message."
137
+ icon="check_circle"
138
+ />
139
+ </div>
140
+
141
+ <div className="flex flex-col gap-2">
142
+ <ModusTextInput
143
+ label="Custom Error Icon"
144
+ placeholder="Enter text"
145
+ />
146
+ <ModusInputFeedback
147
+ level="error"
148
+ message="Custom error message."
149
+ icon="alert"
150
+ />
151
+ </div>
152
+ </div>
153
+ </DemoExample>
154
+
155
+ <DemoExample
156
+ title="Real-World Examples"
157
+ description="Common validation scenarios in forms."
158
+ >
159
+ <div className="flex flex-col gap-6">
160
+ <div className="flex flex-col gap-2">
161
+ <ModusTextInput
162
+ label="Email Address"
163
+ type="email"
164
+ placeholder="user@example.com"
165
+ required={true}
166
+ />
167
+ <ModusInputFeedback
168
+ level="info"
169
+ message="We'll never share your email with anyone else."
170
+ />
171
+ </div>
172
+
173
+ <div className="flex flex-col gap-2">
174
+ <ModusTextInput
175
+ label="Password"
176
+ type="password"
177
+ placeholder="Enter password"
178
+ required={true}
179
+ />
180
+ <ModusInputFeedback
181
+ level="warning"
182
+ message="Password must be at least 8 characters long."
183
+ />
184
+ </div>
185
+
186
+ <div className="flex flex-col gap-2">
187
+ <ModusTextarea
188
+ label="Feedback"
189
+ placeholder="Enter your feedback..."
190
+ rows={4}
191
+ maxLength={200}
192
+ />
193
+ <ModusInputFeedback
194
+ level="info"
195
+ message="Maximum 200 characters allowed."
196
+ />
197
+ </div>
198
+ </div>
199
+ </DemoExample>
200
+ </DemoPage>
201
+ );
202
+ }
@@ -0,0 +1,392 @@
1
+ "use client";
2
+
3
+ import { useState, useCallback } from "react";
4
+ import DemoExample from "../../components/DemoExample";
5
+ import DemoPage from "../../components/DemoPage";
6
+ import ModusInputLabel from "../../components/ModusInputLabel";
7
+ import ModusTextInput from "../../components/ModusTextInput";
8
+ import ModusCheckbox from "../../components/ModusCheckbox";
9
+ import ModusRadio from "../../components/ModusRadio";
10
+ import ModusDate from "../../components/ModusDate";
11
+ import ModusNumberInput from "../../components/ModusNumberInput";
12
+ import ModusInputFeedback from "../../components/ModusInputFeedback";
13
+ import type { InputFeedbackProp } from "../../components/ModusInputFeedback";
14
+
15
+ interface FormState {
16
+ firstName: string;
17
+ lastName: string;
18
+ email: string;
19
+ agreement: boolean;
20
+ }
21
+
22
+ interface TouchedFields {
23
+ firstName: boolean;
24
+ lastName: boolean;
25
+ email: boolean;
26
+ agreement: boolean;
27
+ }
28
+
29
+ export default function InputLabelDemoPage() {
30
+ // Form state
31
+ const [formState, setFormState] = useState<FormState>({
32
+ firstName: "",
33
+ lastName: "",
34
+ email: "",
35
+ agreement: false,
36
+ });
37
+
38
+ // Track touched state for each field
39
+ const [touchedFields, setTouchedFields] = useState<TouchedFields>({
40
+ firstName: false,
41
+ lastName: false,
42
+ email: false,
43
+ agreement: false,
44
+ });
45
+
46
+ // Mark field as touched
47
+ const markFieldTouched = useCallback((fieldName: keyof TouchedFields) => {
48
+ setTouchedFields((prev) => ({ ...prev, [fieldName]: true }));
49
+ }, []);
50
+
51
+ // Validation functions
52
+ const validateFirstName = (): InputFeedbackProp | undefined => {
53
+ if (!touchedFields.firstName) return undefined;
54
+ if (!formState.firstName) {
55
+ return { level: "error", message: "First name is required." };
56
+ }
57
+ if (formState.firstName.length < 2) {
58
+ return {
59
+ level: "error",
60
+ message: "First name must be at least 2 characters.",
61
+ };
62
+ }
63
+ return undefined;
64
+ };
65
+
66
+ const validateLastName = (): InputFeedbackProp | undefined => {
67
+ if (!touchedFields.lastName) return undefined;
68
+ if (!formState.lastName) {
69
+ return { level: "error", message: "Last name is required." };
70
+ }
71
+ if (formState.lastName.length < 2) {
72
+ return {
73
+ level: "error",
74
+ message: "Last name must be at least 2 characters.",
75
+ };
76
+ }
77
+ return undefined;
78
+ };
79
+
80
+ const validateEmail = (): InputFeedbackProp | undefined => {
81
+ if (!touchedFields.email) return undefined;
82
+ if (!formState.email) {
83
+ return { level: "error", message: "Email address is required." };
84
+ }
85
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
86
+ if (!emailRegex.test(formState.email)) {
87
+ return { level: "error", message: "Please enter a valid email address." };
88
+ }
89
+ return undefined;
90
+ };
91
+
92
+ const validateAgreement = (): InputFeedbackProp | undefined => {
93
+ if (!touchedFields.agreement) return undefined;
94
+ if (!formState.agreement) {
95
+ return {
96
+ level: "error",
97
+ message: "You must agree to the terms and conditions.",
98
+ };
99
+ }
100
+ return undefined;
101
+ };
102
+
103
+ // Event handlers
104
+ const handleFirstNameChange = useCallback(
105
+ (event: CustomEvent<InputEvent>) => {
106
+ const target = event.target as HTMLInputElement;
107
+ setFormState((prev) => ({ ...prev, firstName: target.value }));
108
+ markFieldTouched("firstName");
109
+ },
110
+ [markFieldTouched],
111
+ );
112
+
113
+ const handleLastNameChange = useCallback(
114
+ (event: CustomEvent<InputEvent>) => {
115
+ const target = event.target as HTMLInputElement;
116
+ setFormState((prev) => ({ ...prev, lastName: target.value }));
117
+ markFieldTouched("lastName");
118
+ },
119
+ [markFieldTouched],
120
+ );
121
+
122
+ const handleEmailChange = useCallback(
123
+ (event: CustomEvent<InputEvent>) => {
124
+ const target = event.target as HTMLInputElement;
125
+ setFormState((prev) => ({ ...prev, email: target.value }));
126
+ markFieldTouched("email");
127
+ },
128
+ [markFieldTouched],
129
+ );
130
+
131
+ const handleAgreementChange = useCallback(
132
+ (event: CustomEvent<boolean>) => {
133
+ setFormState((prev) => ({ ...prev, agreement: event.detail }));
134
+ markFieldTouched("agreement");
135
+ },
136
+ [markFieldTouched],
137
+ );
138
+
139
+ const handleFirstNameBlur = useCallback(() => {
140
+ markFieldTouched("firstName");
141
+ }, [markFieldTouched]);
142
+
143
+ const handleLastNameBlur = useCallback(() => {
144
+ markFieldTouched("lastName");
145
+ }, [markFieldTouched]);
146
+
147
+ const handleEmailBlur = useCallback(() => {
148
+ markFieldTouched("email");
149
+ }, [markFieldTouched]);
150
+
151
+ const handleAgreementBlur = useCallback(() => {
152
+ markFieldTouched("agreement");
153
+ }, [markFieldTouched]);
154
+
155
+ // Get feedback for each field
156
+ const firstNameFeedback = validateFirstName();
157
+ const lastNameFeedback = validateLastName();
158
+ const emailFeedback = validateEmail();
159
+ const agreementFeedback = validateAgreement();
160
+
161
+ return (
162
+ <DemoPage
163
+ title="Modus Input Label"
164
+ description="Input labels provide clear identification for form controls. Always use labels to make forms accessible and user-friendly."
165
+ >
166
+ <DemoExample
167
+ title="Basic Label"
168
+ description="Simple label for form inputs."
169
+ >
170
+ <div className="flex flex-col gap-2">
171
+ <ModusInputLabel forId="basic-input" labelText="Email Address" />
172
+ <ModusTextInput
173
+ inputId="basic-input"
174
+ placeholder="user@example.com"
175
+ />
176
+ </div>
177
+ </DemoExample>
178
+
179
+ <DemoExample
180
+ title="Required Label"
181
+ description="Labels with required indicator for mandatory fields."
182
+ >
183
+ <div className="flex flex-col gap-6">
184
+ <div className="flex flex-col gap-2">
185
+ <ModusInputLabel
186
+ forId="required-input"
187
+ labelText="First Name"
188
+ required
189
+ />
190
+ <ModusTextInput
191
+ inputId="required-input"
192
+ placeholder="Enter first name"
193
+ required
194
+ />
195
+ </div>
196
+
197
+ <div className="flex flex-col gap-2">
198
+ <ModusInputLabel
199
+ forId="required-email"
200
+ labelText="Email"
201
+ required
202
+ />
203
+ <ModusTextInput
204
+ inputId="required-email"
205
+ type="email"
206
+ placeholder="user@example.com"
207
+ required
208
+ />
209
+ </div>
210
+ </div>
211
+ </DemoExample>
212
+
213
+ <DemoExample
214
+ title="Labels with Different Form Controls"
215
+ description="Input labels work with various form control types."
216
+ >
217
+ <div className="flex flex-col gap-6">
218
+ <div className="flex flex-col gap-2">
219
+ <ModusInputLabel
220
+ forId="checkbox-input"
221
+ labelText="Accept Terms"
222
+ required
223
+ />
224
+ <ModusCheckbox
225
+ inputId="checkbox-input"
226
+ label="I agree to the terms and conditions"
227
+ required
228
+ />
229
+ </div>
230
+
231
+ <div className="flex flex-col gap-2">
232
+ <ModusInputLabel forId="radio-input" labelText="Select Option" />
233
+ <div className="flex flex-col gap-2">
234
+ <ModusRadio
235
+ inputId="radio-input"
236
+ label="Option A"
237
+ name="radio-demo"
238
+ value={true}
239
+ />
240
+ <ModusRadio
241
+ inputId="radio-input-b"
242
+ label="Option B"
243
+ name="radio-demo"
244
+ value={false}
245
+ />
246
+ </div>
247
+ </div>
248
+
249
+ <div className="flex flex-col gap-2">
250
+ <ModusDate inputId="date-input" label="Pick a date" />
251
+ </div>
252
+
253
+ <div className="flex flex-col gap-2">
254
+ <ModusNumberInput
255
+ inputId="number-input"
256
+ label="Quantity"
257
+ placeholder="0"
258
+ step={1}
259
+ />
260
+ </div>
261
+ </div>
262
+ </DemoExample>
263
+
264
+ <DemoExample
265
+ title="Label Sizes"
266
+ description="Input labels in different sizes."
267
+ >
268
+ <div className="flex flex-col gap-6">
269
+ <div className="flex flex-col gap-2">
270
+ <ModusInputLabel
271
+ forId="small-label"
272
+ labelText="Small Label"
273
+ size="sm"
274
+ />
275
+ <ModusTextInput
276
+ inputId="small-label"
277
+ placeholder="Enter text"
278
+ size="sm"
279
+ />
280
+ </div>
281
+
282
+ <div className="flex flex-col gap-2">
283
+ <ModusInputLabel
284
+ forId="medium-label"
285
+ labelText="Medium Label (Default)"
286
+ size="md"
287
+ />
288
+ <ModusTextInput
289
+ inputId="medium-label"
290
+ placeholder="Enter text"
291
+ size="md"
292
+ />
293
+ </div>
294
+
295
+ <div className="flex flex-col gap-2">
296
+ <ModusInputLabel
297
+ forId="large-label"
298
+ labelText="Large Label"
299
+ size="lg"
300
+ />
301
+ <ModusTextInput
302
+ inputId="large-label"
303
+ placeholder="Enter text"
304
+ size="lg"
305
+ />
306
+ </div>
307
+ </div>
308
+ </DemoExample>
309
+
310
+ <DemoExample
311
+ title="Real-World Form Example"
312
+ description="Complete form example with proper labels and validation feedback."
313
+ >
314
+ <div className="flex flex-col gap-6 p-6 rounded-lg bg-card border-default">
315
+ <div className="flex flex-col gap-2">
316
+ <ModusInputLabel
317
+ forId="form-first-name"
318
+ labelText="First Name"
319
+ required
320
+ />
321
+ <ModusTextInput
322
+ inputId="form-first-name"
323
+ placeholder="Enter first name"
324
+ required
325
+ value={formState.firstName}
326
+ feedback={firstNameFeedback}
327
+ onInputChange={handleFirstNameChange}
328
+ onInputBlur={handleFirstNameBlur}
329
+ />
330
+ </div>
331
+
332
+ <div className="flex flex-col gap-2">
333
+ <ModusInputLabel
334
+ forId="form-last-name"
335
+ labelText="Last Name"
336
+ required
337
+ />
338
+ <ModusTextInput
339
+ inputId="form-last-name"
340
+ placeholder="Enter last name"
341
+ required
342
+ value={formState.lastName}
343
+ feedback={lastNameFeedback}
344
+ onInputChange={handleLastNameChange}
345
+ onInputBlur={handleLastNameBlur}
346
+ />
347
+ </div>
348
+
349
+ <div className="flex flex-col gap-2">
350
+ <ModusInputLabel
351
+ forId="form-email"
352
+ labelText="Email Address"
353
+ required
354
+ />
355
+ <ModusTextInput
356
+ inputId="form-email"
357
+ type="email"
358
+ placeholder="user@example.com"
359
+ required
360
+ value={formState.email}
361
+ feedback={emailFeedback}
362
+ onInputChange={handleEmailChange}
363
+ onInputBlur={handleEmailBlur}
364
+ />
365
+ </div>
366
+
367
+ <div className="flex flex-col gap-2">
368
+ <ModusInputLabel
369
+ forId="form-checkbox"
370
+ labelText="Agreement"
371
+ required
372
+ />
373
+ <ModusCheckbox
374
+ inputId="form-checkbox"
375
+ label="I agree to the terms and conditions"
376
+ required
377
+ value={formState.agreement}
378
+ onValueChange={handleAgreementChange}
379
+ onInputBlur={handleAgreementBlur}
380
+ />
381
+ {agreementFeedback && (
382
+ <ModusInputFeedback
383
+ level={agreementFeedback.level}
384
+ message={agreementFeedback.message}
385
+ />
386
+ )}
387
+ </div>
388
+ </div>
389
+ </DemoExample>
390
+ </DemoPage>
391
+ );
392
+ }