@adminiumjs/ui 0.1.0-rc.1

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 (598) hide show
  1. package/LICENSE +661 -0
  2. package/dist/components/alert/Alert.d.ts +27 -0
  3. package/dist/components/alert/Alert.d.ts.map +1 -0
  4. package/dist/components/alert/Alert.js +25 -0
  5. package/dist/components/alert/Alert.js.map +1 -0
  6. package/dist/components/alert/index.d.ts +3 -0
  7. package/dist/components/alert/index.d.ts.map +1 -0
  8. package/dist/components/alert/index.js +2 -0
  9. package/dist/components/alert/index.js.map +1 -0
  10. package/dist/components/auth-layout/AuthLayout.d.ts +54 -0
  11. package/dist/components/auth-layout/AuthLayout.d.ts.map +1 -0
  12. package/dist/components/auth-layout/AuthLayout.js +30 -0
  13. package/dist/components/auth-layout/AuthLayout.js.map +1 -0
  14. package/dist/components/auth-layout/index.d.ts +3 -0
  15. package/dist/components/auth-layout/index.d.ts.map +1 -0
  16. package/dist/components/auth-layout/index.js +2 -0
  17. package/dist/components/auth-layout/index.js.map +1 -0
  18. package/dist/components/auth-screens/ForgotPasswordForm.d.ts +80 -0
  19. package/dist/components/auth-screens/ForgotPasswordForm.d.ts.map +1 -0
  20. package/dist/components/auth-screens/ForgotPasswordForm.js +50 -0
  21. package/dist/components/auth-screens/ForgotPasswordForm.js.map +1 -0
  22. package/dist/components/auth-screens/ResetPasswordForm.d.ts +55 -0
  23. package/dist/components/auth-screens/ResetPasswordForm.d.ts.map +1 -0
  24. package/dist/components/auth-screens/ResetPasswordForm.js +45 -0
  25. package/dist/components/auth-screens/ResetPasswordForm.js.map +1 -0
  26. package/dist/components/auth-screens/SignInForm.d.ts +67 -0
  27. package/dist/components/auth-screens/SignInForm.d.ts.map +1 -0
  28. package/dist/components/auth-screens/SignInForm.js +47 -0
  29. package/dist/components/auth-screens/SignInForm.js.map +1 -0
  30. package/dist/components/auth-screens/TwoFactorForm.d.ts +54 -0
  31. package/dist/components/auth-screens/TwoFactorForm.d.ts.map +1 -0
  32. package/dist/components/auth-screens/TwoFactorForm.js +47 -0
  33. package/dist/components/auth-screens/TwoFactorForm.js.map +1 -0
  34. package/dist/components/auth-screens/index.d.ts +9 -0
  35. package/dist/components/auth-screens/index.d.ts.map +1 -0
  36. package/dist/components/auth-screens/index.js +5 -0
  37. package/dist/components/auth-screens/index.js.map +1 -0
  38. package/dist/components/autosave-indicator/AutosaveIndicator.d.ts +28 -0
  39. package/dist/components/autosave-indicator/AutosaveIndicator.d.ts.map +1 -0
  40. package/dist/components/autosave-indicator/AutosaveIndicator.js +14 -0
  41. package/dist/components/autosave-indicator/AutosaveIndicator.js.map +1 -0
  42. package/dist/components/autosave-indicator/index.d.ts +3 -0
  43. package/dist/components/autosave-indicator/index.d.ts.map +1 -0
  44. package/dist/components/autosave-indicator/index.js +2 -0
  45. package/dist/components/autosave-indicator/index.js.map +1 -0
  46. package/dist/components/avatar/Avatar.d.ts +48 -0
  47. package/dist/components/avatar/Avatar.d.ts.map +1 -0
  48. package/dist/components/avatar/Avatar.js +104 -0
  49. package/dist/components/avatar/Avatar.js.map +1 -0
  50. package/dist/components/avatar/index.d.ts +3 -0
  51. package/dist/components/avatar/index.d.ts.map +1 -0
  52. package/dist/components/avatar/index.js +2 -0
  53. package/dist/components/avatar/index.js.map +1 -0
  54. package/dist/components/avatar-stack/AvatarStack.d.ts +21 -0
  55. package/dist/components/avatar-stack/AvatarStack.d.ts.map +1 -0
  56. package/dist/components/avatar-stack/AvatarStack.js +16 -0
  57. package/dist/components/avatar-stack/AvatarStack.js.map +1 -0
  58. package/dist/components/avatar-stack/index.d.ts +3 -0
  59. package/dist/components/avatar-stack/index.d.ts.map +1 -0
  60. package/dist/components/avatar-stack/index.js +2 -0
  61. package/dist/components/avatar-stack/index.js.map +1 -0
  62. package/dist/components/badge/Badge.d.ts +22 -0
  63. package/dist/components/badge/Badge.d.ts.map +1 -0
  64. package/dist/components/badge/Badge.js +21 -0
  65. package/dist/components/badge/Badge.js.map +1 -0
  66. package/dist/components/badge/index.d.ts +3 -0
  67. package/dist/components/badge/index.d.ts.map +1 -0
  68. package/dist/components/badge/index.js +6 -0
  69. package/dist/components/badge/index.js.map +1 -0
  70. package/dist/components/banner/Banner.d.ts +21 -0
  71. package/dist/components/banner/Banner.d.ts.map +1 -0
  72. package/dist/components/banner/Banner.js +24 -0
  73. package/dist/components/banner/Banner.js.map +1 -0
  74. package/dist/components/banner/index.d.ts +3 -0
  75. package/dist/components/banner/index.d.ts.map +1 -0
  76. package/dist/components/banner/index.js +2 -0
  77. package/dist/components/banner/index.js.map +1 -0
  78. package/dist/components/breadcrumbs/Breadcrumbs.d.ts +22 -0
  79. package/dist/components/breadcrumbs/Breadcrumbs.d.ts.map +1 -0
  80. package/dist/components/breadcrumbs/Breadcrumbs.js +24 -0
  81. package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -0
  82. package/dist/components/breadcrumbs/index.d.ts +3 -0
  83. package/dist/components/breadcrumbs/index.d.ts.map +1 -0
  84. package/dist/components/breadcrumbs/index.js +2 -0
  85. package/dist/components/breadcrumbs/index.js.map +1 -0
  86. package/dist/components/bulk-action-bar/BulkActionBar.d.ts +35 -0
  87. package/dist/components/bulk-action-bar/BulkActionBar.d.ts.map +1 -0
  88. package/dist/components/bulk-action-bar/BulkActionBar.js +17 -0
  89. package/dist/components/bulk-action-bar/BulkActionBar.js.map +1 -0
  90. package/dist/components/bulk-action-bar/index.d.ts +3 -0
  91. package/dist/components/bulk-action-bar/index.d.ts.map +1 -0
  92. package/dist/components/bulk-action-bar/index.js +2 -0
  93. package/dist/components/bulk-action-bar/index.js.map +1 -0
  94. package/dist/components/button/Button.d.ts +27 -0
  95. package/dist/components/button/Button.d.ts.map +1 -0
  96. package/dist/components/button/Button.js +43 -0
  97. package/dist/components/button/Button.js.map +1 -0
  98. package/dist/components/button/index.d.ts +3 -0
  99. package/dist/components/button/index.d.ts.map +1 -0
  100. package/dist/components/button/index.js +2 -0
  101. package/dist/components/button/index.js.map +1 -0
  102. package/dist/components/card/Card.d.ts +27 -0
  103. package/dist/components/card/Card.d.ts.map +1 -0
  104. package/dist/components/card/Card.js +41 -0
  105. package/dist/components/card/Card.js.map +1 -0
  106. package/dist/components/card/index.d.ts +3 -0
  107. package/dist/components/card/index.d.ts.map +1 -0
  108. package/dist/components/card/index.js +2 -0
  109. package/dist/components/card/index.js.map +1 -0
  110. package/dist/components/checkbox/Checkbox.d.ts +13 -0
  111. package/dist/components/checkbox/Checkbox.d.ts.map +1 -0
  112. package/dist/components/checkbox/Checkbox.js +16 -0
  113. package/dist/components/checkbox/Checkbox.js.map +1 -0
  114. package/dist/components/checkbox/index.d.ts +3 -0
  115. package/dist/components/checkbox/index.d.ts.map +1 -0
  116. package/dist/components/checkbox/index.js +2 -0
  117. package/dist/components/checkbox/index.js.map +1 -0
  118. package/dist/components/chip-input/ChipInput.d.ts +29 -0
  119. package/dist/components/chip-input/ChipInput.d.ts.map +1 -0
  120. package/dist/components/chip-input/ChipInput.js +96 -0
  121. package/dist/components/chip-input/ChipInput.js.map +1 -0
  122. package/dist/components/chip-input/index.d.ts +3 -0
  123. package/dist/components/chip-input/index.d.ts.map +1 -0
  124. package/dist/components/chip-input/index.js +2 -0
  125. package/dist/components/chip-input/index.js.map +1 -0
  126. package/dist/components/choice-chips/ChoiceChips.d.ts +40 -0
  127. package/dist/components/choice-chips/ChoiceChips.d.ts.map +1 -0
  128. package/dist/components/choice-chips/ChoiceChips.js +76 -0
  129. package/dist/components/choice-chips/ChoiceChips.js.map +1 -0
  130. package/dist/components/choice-chips/index.d.ts +3 -0
  131. package/dist/components/choice-chips/index.d.ts.map +1 -0
  132. package/dist/components/choice-chips/index.js +2 -0
  133. package/dist/components/choice-chips/index.js.map +1 -0
  134. package/dist/components/combobox/Combobox.d.ts +54 -0
  135. package/dist/components/combobox/Combobox.d.ts.map +1 -0
  136. package/dist/components/combobox/Combobox.js +127 -0
  137. package/dist/components/combobox/Combobox.js.map +1 -0
  138. package/dist/components/combobox/index.d.ts +3 -0
  139. package/dist/components/combobox/index.d.ts.map +1 -0
  140. package/dist/components/combobox/index.js +2 -0
  141. package/dist/components/combobox/index.js.map +1 -0
  142. package/dist/components/command-palette/CommandPalette.d.ts +62 -0
  143. package/dist/components/command-palette/CommandPalette.d.ts.map +1 -0
  144. package/dist/components/command-palette/CommandPalette.js +91 -0
  145. package/dist/components/command-palette/CommandPalette.js.map +1 -0
  146. package/dist/components/command-palette/index.d.ts +4 -0
  147. package/dist/components/command-palette/index.d.ts.map +1 -0
  148. package/dist/components/command-palette/index.js +3 -0
  149. package/dist/components/command-palette/index.js.map +1 -0
  150. package/dist/components/command-palette/useCommandK.d.ts +9 -0
  151. package/dist/components/command-palette/useCommandK.d.ts.map +1 -0
  152. package/dist/components/command-palette/useCommandK.js +24 -0
  153. package/dist/components/command-palette/useCommandK.js.map +1 -0
  154. package/dist/components/confirm-modal/ConfirmModal.d.ts +38 -0
  155. package/dist/components/confirm-modal/ConfirmModal.d.ts.map +1 -0
  156. package/dist/components/confirm-modal/ConfirmModal.js +40 -0
  157. package/dist/components/confirm-modal/ConfirmModal.js.map +1 -0
  158. package/dist/components/confirm-modal/index.d.ts +3 -0
  159. package/dist/components/confirm-modal/index.d.ts.map +1 -0
  160. package/dist/components/confirm-modal/index.js +2 -0
  161. package/dist/components/confirm-modal/index.js.map +1 -0
  162. package/dist/components/count-badge/CountBadge.d.ts +13 -0
  163. package/dist/components/count-badge/CountBadge.d.ts.map +1 -0
  164. package/dist/components/count-badge/CountBadge.js +20 -0
  165. package/dist/components/count-badge/CountBadge.js.map +1 -0
  166. package/dist/components/count-badge/index.d.ts +3 -0
  167. package/dist/components/count-badge/index.d.ts.map +1 -0
  168. package/dist/components/count-badge/index.js +2 -0
  169. package/dist/components/count-badge/index.js.map +1 -0
  170. package/dist/components/date-input/DateInput.d.ts +53 -0
  171. package/dist/components/date-input/DateInput.d.ts.map +1 -0
  172. package/dist/components/date-input/DateInput.js +38 -0
  173. package/dist/components/date-input/DateInput.js.map +1 -0
  174. package/dist/components/date-input/index.d.ts +3 -0
  175. package/dist/components/date-input/index.d.ts.map +1 -0
  176. package/dist/components/date-input/index.js +2 -0
  177. package/dist/components/date-input/index.js.map +1 -0
  178. package/dist/components/delta-pill/DeltaPill.d.ts +25 -0
  179. package/dist/components/delta-pill/DeltaPill.d.ts.map +1 -0
  180. package/dist/components/delta-pill/DeltaPill.js +36 -0
  181. package/dist/components/delta-pill/DeltaPill.js.map +1 -0
  182. package/dist/components/delta-pill/index.d.ts +3 -0
  183. package/dist/components/delta-pill/index.d.ts.map +1 -0
  184. package/dist/components/delta-pill/index.js +2 -0
  185. package/dist/components/delta-pill/index.js.map +1 -0
  186. package/dist/components/divider/Divider.d.ts +15 -0
  187. package/dist/components/divider/Divider.d.ts.map +1 -0
  188. package/dist/components/divider/Divider.js +23 -0
  189. package/dist/components/divider/Divider.js.map +1 -0
  190. package/dist/components/divider/index.d.ts +3 -0
  191. package/dist/components/divider/index.d.ts.map +1 -0
  192. package/dist/components/divider/index.js +2 -0
  193. package/dist/components/divider/index.js.map +1 -0
  194. package/dist/components/drawer/Drawer.d.ts +44 -0
  195. package/dist/components/drawer/Drawer.d.ts.map +1 -0
  196. package/dist/components/drawer/Drawer.js +45 -0
  197. package/dist/components/drawer/Drawer.js.map +1 -0
  198. package/dist/components/drawer/index.d.ts +3 -0
  199. package/dist/components/drawer/index.d.ts.map +1 -0
  200. package/dist/components/drawer/index.js +2 -0
  201. package/dist/components/drawer/index.js.map +1 -0
  202. package/dist/components/dropdown-menu/DropdownMenu.d.ts +35 -0
  203. package/dist/components/dropdown-menu/DropdownMenu.d.ts.map +1 -0
  204. package/dist/components/dropdown-menu/DropdownMenu.js +38 -0
  205. package/dist/components/dropdown-menu/DropdownMenu.js.map +1 -0
  206. package/dist/components/dropdown-menu/index.d.ts +3 -0
  207. package/dist/components/dropdown-menu/index.d.ts.map +1 -0
  208. package/dist/components/dropdown-menu/index.js +2 -0
  209. package/dist/components/dropdown-menu/index.js.map +1 -0
  210. package/dist/components/empty-state/EmptyState.d.ts +26 -0
  211. package/dist/components/empty-state/EmptyState.d.ts.map +1 -0
  212. package/dist/components/empty-state/EmptyState.js +24 -0
  213. package/dist/components/empty-state/EmptyState.js.map +1 -0
  214. package/dist/components/empty-state/index.d.ts +3 -0
  215. package/dist/components/empty-state/index.d.ts.map +1 -0
  216. package/dist/components/empty-state/index.js +2 -0
  217. package/dist/components/empty-state/index.js.map +1 -0
  218. package/dist/components/filter-chip/FilterChip.d.ts +26 -0
  219. package/dist/components/filter-chip/FilterChip.d.ts.map +1 -0
  220. package/dist/components/filter-chip/FilterChip.js +17 -0
  221. package/dist/components/filter-chip/FilterChip.js.map +1 -0
  222. package/dist/components/filter-chip/index.d.ts +3 -0
  223. package/dist/components/filter-chip/index.d.ts.map +1 -0
  224. package/dist/components/filter-chip/index.js +2 -0
  225. package/dist/components/filter-chip/index.js.map +1 -0
  226. package/dist/components/form-field/FormField.d.ts +50 -0
  227. package/dist/components/form-field/FormField.d.ts.map +1 -0
  228. package/dist/components/form-field/FormField.js +31 -0
  229. package/dist/components/form-field/FormField.js.map +1 -0
  230. package/dist/components/form-field/index.d.ts +3 -0
  231. package/dist/components/form-field/index.d.ts.map +1 -0
  232. package/dist/components/form-field/index.js +2 -0
  233. package/dist/components/form-field/index.js.map +1 -0
  234. package/dist/components/icon/Icon.d.ts +36 -0
  235. package/dist/components/icon/Icon.d.ts.map +1 -0
  236. package/dist/components/icon/Icon.js +24 -0
  237. package/dist/components/icon/Icon.js.map +1 -0
  238. package/dist/components/icon/index.d.ts +3 -0
  239. package/dist/components/icon/index.d.ts.map +1 -0
  240. package/dist/components/icon/index.js +2 -0
  241. package/dist/components/icon/index.js.map +1 -0
  242. package/dist/components/icon-button/IconButton.d.ts +19 -0
  243. package/dist/components/icon-button/IconButton.d.ts.map +1 -0
  244. package/dist/components/icon-button/IconButton.js +31 -0
  245. package/dist/components/icon-button/IconButton.js.map +1 -0
  246. package/dist/components/icon-button/index.d.ts +3 -0
  247. package/dist/components/icon-button/index.d.ts.map +1 -0
  248. package/dist/components/icon-button/index.js +2 -0
  249. package/dist/components/icon-button/index.js.map +1 -0
  250. package/dist/components/icon-tile/IconTile.d.ts +24 -0
  251. package/dist/components/icon-tile/IconTile.d.ts.map +1 -0
  252. package/dist/components/icon-tile/IconTile.js +32 -0
  253. package/dist/components/icon-tile/IconTile.js.map +1 -0
  254. package/dist/components/icon-tile/index.d.ts +3 -0
  255. package/dist/components/icon-tile/index.d.ts.map +1 -0
  256. package/dist/components/icon-tile/index.js +2 -0
  257. package/dist/components/icon-tile/index.js.map +1 -0
  258. package/dist/components/input/Input.d.ts +28 -0
  259. package/dist/components/input/Input.d.ts.map +1 -0
  260. package/dist/components/input/Input.js +34 -0
  261. package/dist/components/input/Input.js.map +1 -0
  262. package/dist/components/input/index.d.ts +3 -0
  263. package/dist/components/input/index.d.ts.map +1 -0
  264. package/dist/components/input/index.js +2 -0
  265. package/dist/components/input/index.js.map +1 -0
  266. package/dist/components/input-group/InputGroup.d.ts +34 -0
  267. package/dist/components/input-group/InputGroup.d.ts.map +1 -0
  268. package/dist/components/input-group/InputGroup.js +23 -0
  269. package/dist/components/input-group/InputGroup.js.map +1 -0
  270. package/dist/components/input-group/index.d.ts +3 -0
  271. package/dist/components/input-group/index.d.ts.map +1 -0
  272. package/dist/components/input-group/index.js +2 -0
  273. package/dist/components/input-group/index.js.map +1 -0
  274. package/dist/components/kbd/Kbd.d.ts +8 -0
  275. package/dist/components/kbd/Kbd.d.ts.map +1 -0
  276. package/dist/components/kbd/Kbd.js +10 -0
  277. package/dist/components/kbd/Kbd.js.map +1 -0
  278. package/dist/components/kbd/index.d.ts +3 -0
  279. package/dist/components/kbd/index.d.ts.map +1 -0
  280. package/dist/components/kbd/index.js +2 -0
  281. package/dist/components/kbd/index.js.map +1 -0
  282. package/dist/components/key-value-list/KeyValueList.d.ts +27 -0
  283. package/dist/components/key-value-list/KeyValueList.d.ts.map +1 -0
  284. package/dist/components/key-value-list/KeyValueList.js +16 -0
  285. package/dist/components/key-value-list/KeyValueList.js.map +1 -0
  286. package/dist/components/key-value-list/index.d.ts +3 -0
  287. package/dist/components/key-value-list/index.d.ts.map +1 -0
  288. package/dist/components/key-value-list/index.js +2 -0
  289. package/dist/components/key-value-list/index.js.map +1 -0
  290. package/dist/components/label/Label.d.ts +14 -0
  291. package/dist/components/label/Label.d.ts.map +1 -0
  292. package/dist/components/label/Label.js +17 -0
  293. package/dist/components/label/Label.js.map +1 -0
  294. package/dist/components/label/index.d.ts +3 -0
  295. package/dist/components/label/index.d.ts.map +1 -0
  296. package/dist/components/label/index.js +2 -0
  297. package/dist/components/label/index.js.map +1 -0
  298. package/dist/components/modal/Modal.d.ts +48 -0
  299. package/dist/components/modal/Modal.d.ts.map +1 -0
  300. package/dist/components/modal/Modal.js +48 -0
  301. package/dist/components/modal/Modal.js.map +1 -0
  302. package/dist/components/modal/index.d.ts +3 -0
  303. package/dist/components/modal/index.d.ts.map +1 -0
  304. package/dist/components/modal/index.js +2 -0
  305. package/dist/components/modal/index.js.map +1 -0
  306. package/dist/components/mono-text/MonoText.d.ts +13 -0
  307. package/dist/components/mono-text/MonoText.d.ts.map +1 -0
  308. package/dist/components/mono-text/MonoText.js +14 -0
  309. package/dist/components/mono-text/MonoText.js.map +1 -0
  310. package/dist/components/mono-text/index.d.ts +3 -0
  311. package/dist/components/mono-text/index.d.ts.map +1 -0
  312. package/dist/components/mono-text/index.js +2 -0
  313. package/dist/components/mono-text/index.js.map +1 -0
  314. package/dist/components/number-stepper/NumberStepper.d.ts +29 -0
  315. package/dist/components/number-stepper/NumberStepper.d.ts.map +1 -0
  316. package/dist/components/number-stepper/NumberStepper.js +50 -0
  317. package/dist/components/number-stepper/NumberStepper.js.map +1 -0
  318. package/dist/components/number-stepper/index.d.ts +3 -0
  319. package/dist/components/number-stepper/index.d.ts.map +1 -0
  320. package/dist/components/number-stepper/index.js +2 -0
  321. package/dist/components/number-stepper/index.js.map +1 -0
  322. package/dist/components/otp-input/OtpInput.d.ts +30 -0
  323. package/dist/components/otp-input/OtpInput.d.ts.map +1 -0
  324. package/dist/components/otp-input/OtpInput.js +35 -0
  325. package/dist/components/otp-input/OtpInput.js.map +1 -0
  326. package/dist/components/otp-input/index.d.ts +3 -0
  327. package/dist/components/otp-input/index.d.ts.map +1 -0
  328. package/dist/components/otp-input/index.js +2 -0
  329. package/dist/components/otp-input/index.js.map +1 -0
  330. package/dist/components/pagination/Pagination.d.ts +26 -0
  331. package/dist/components/pagination/Pagination.d.ts.map +1 -0
  332. package/dist/components/pagination/Pagination.js +34 -0
  333. package/dist/components/pagination/Pagination.js.map +1 -0
  334. package/dist/components/pagination/index.d.ts +3 -0
  335. package/dist/components/pagination/index.d.ts.map +1 -0
  336. package/dist/components/pagination/index.js +2 -0
  337. package/dist/components/pagination/index.js.map +1 -0
  338. package/dist/components/password-strength/PasswordStrength.d.ts +29 -0
  339. package/dist/components/password-strength/PasswordStrength.d.ts.map +1 -0
  340. package/dist/components/password-strength/PasswordStrength.js +43 -0
  341. package/dist/components/password-strength/PasswordStrength.js.map +1 -0
  342. package/dist/components/password-strength/index.d.ts +3 -0
  343. package/dist/components/password-strength/index.d.ts.map +1 -0
  344. package/dist/components/password-strength/index.js +2 -0
  345. package/dist/components/password-strength/index.js.map +1 -0
  346. package/dist/components/permission-matrix/PermissionMatrix.d.ts +90 -0
  347. package/dist/components/permission-matrix/PermissionMatrix.d.ts.map +1 -0
  348. package/dist/components/permission-matrix/PermissionMatrix.js +62 -0
  349. package/dist/components/permission-matrix/PermissionMatrix.js.map +1 -0
  350. package/dist/components/permission-matrix/index.d.ts +3 -0
  351. package/dist/components/permission-matrix/index.d.ts.map +1 -0
  352. package/dist/components/permission-matrix/index.js +2 -0
  353. package/dist/components/permission-matrix/index.js.map +1 -0
  354. package/dist/components/popover/Popover.d.ts +19 -0
  355. package/dist/components/popover/Popover.d.ts.map +1 -0
  356. package/dist/components/popover/Popover.js +21 -0
  357. package/dist/components/popover/Popover.js.map +1 -0
  358. package/dist/components/popover/index.d.ts +3 -0
  359. package/dist/components/popover/index.d.ts.map +1 -0
  360. package/dist/components/popover/index.js +2 -0
  361. package/dist/components/popover/index.js.map +1 -0
  362. package/dist/components/progress-bar/ProgressBar.d.ts +24 -0
  363. package/dist/components/progress-bar/ProgressBar.d.ts.map +1 -0
  364. package/dist/components/progress-bar/ProgressBar.js +35 -0
  365. package/dist/components/progress-bar/ProgressBar.js.map +1 -0
  366. package/dist/components/progress-bar/index.d.ts +3 -0
  367. package/dist/components/progress-bar/index.d.ts.map +1 -0
  368. package/dist/components/progress-bar/index.js +2 -0
  369. package/dist/components/progress-bar/index.js.map +1 -0
  370. package/dist/components/radio/Radio.d.ts +25 -0
  371. package/dist/components/radio/Radio.d.ts.map +1 -0
  372. package/dist/components/radio/Radio.js +28 -0
  373. package/dist/components/radio/Radio.js.map +1 -0
  374. package/dist/components/radio/index.d.ts +3 -0
  375. package/dist/components/radio/index.d.ts.map +1 -0
  376. package/dist/components/radio/index.js +2 -0
  377. package/dist/components/radio/index.js.map +1 -0
  378. package/dist/components/radio-card/RadioCard.d.ts +22 -0
  379. package/dist/components/radio-card/RadioCard.d.ts.map +1 -0
  380. package/dist/components/radio-card/RadioCard.js +16 -0
  381. package/dist/components/radio-card/RadioCard.js.map +1 -0
  382. package/dist/components/radio-card/index.d.ts +3 -0
  383. package/dist/components/radio-card/index.d.ts.map +1 -0
  384. package/dist/components/radio-card/index.js +2 -0
  385. package/dist/components/radio-card/index.js.map +1 -0
  386. package/dist/components/runtime-chip/RuntimeChip.d.ts +54 -0
  387. package/dist/components/runtime-chip/RuntimeChip.d.ts.map +1 -0
  388. package/dist/components/runtime-chip/RuntimeChip.js +46 -0
  389. package/dist/components/runtime-chip/RuntimeChip.js.map +1 -0
  390. package/dist/components/runtime-chip/index.d.ts +3 -0
  391. package/dist/components/runtime-chip/index.d.ts.map +1 -0
  392. package/dist/components/runtime-chip/index.js +2 -0
  393. package/dist/components/runtime-chip/index.js.map +1 -0
  394. package/dist/components/search-input/SearchInput.d.ts +27 -0
  395. package/dist/components/search-input/SearchInput.d.ts.map +1 -0
  396. package/dist/components/search-input/SearchInput.js +36 -0
  397. package/dist/components/search-input/SearchInput.js.map +1 -0
  398. package/dist/components/search-input/index.d.ts +3 -0
  399. package/dist/components/search-input/index.d.ts.map +1 -0
  400. package/dist/components/search-input/index.js +2 -0
  401. package/dist/components/search-input/index.js.map +1 -0
  402. package/dist/components/secret-input/SecretInput.d.ts +27 -0
  403. package/dist/components/secret-input/SecretInput.d.ts.map +1 -0
  404. package/dist/components/secret-input/SecretInput.js +49 -0
  405. package/dist/components/secret-input/SecretInput.js.map +1 -0
  406. package/dist/components/secret-input/index.d.ts +3 -0
  407. package/dist/components/secret-input/index.d.ts.map +1 -0
  408. package/dist/components/secret-input/index.js +2 -0
  409. package/dist/components/secret-input/index.js.map +1 -0
  410. package/dist/components/segmented-control/SegmentedControl.d.ts +35 -0
  411. package/dist/components/segmented-control/SegmentedControl.d.ts.map +1 -0
  412. package/dist/components/segmented-control/SegmentedControl.js +67 -0
  413. package/dist/components/segmented-control/SegmentedControl.js.map +1 -0
  414. package/dist/components/segmented-control/index.d.ts +3 -0
  415. package/dist/components/segmented-control/index.d.ts.map +1 -0
  416. package/dist/components/segmented-control/index.js +2 -0
  417. package/dist/components/segmented-control/index.js.map +1 -0
  418. package/dist/components/select/Select.d.ts +17 -0
  419. package/dist/components/select/Select.d.ts.map +1 -0
  420. package/dist/components/select/Select.js +14 -0
  421. package/dist/components/select/Select.js.map +1 -0
  422. package/dist/components/select/index.d.ts +3 -0
  423. package/dist/components/select/index.d.ts.map +1 -0
  424. package/dist/components/select/index.js +2 -0
  425. package/dist/components/select/index.js.map +1 -0
  426. package/dist/components/skeleton/Skeleton.d.ts +18 -0
  427. package/dist/components/skeleton/Skeleton.d.ts.map +1 -0
  428. package/dist/components/skeleton/Skeleton.js +30 -0
  429. package/dist/components/skeleton/Skeleton.js.map +1 -0
  430. package/dist/components/skeleton/index.d.ts +3 -0
  431. package/dist/components/skeleton/index.d.ts.map +1 -0
  432. package/dist/components/skeleton/index.js +2 -0
  433. package/dist/components/skeleton/index.js.map +1 -0
  434. package/dist/components/slider/Slider.d.ts +17 -0
  435. package/dist/components/slider/Slider.d.ts.map +1 -0
  436. package/dist/components/slider/Slider.js +14 -0
  437. package/dist/components/slider/Slider.js.map +1 -0
  438. package/dist/components/slider/index.d.ts +3 -0
  439. package/dist/components/slider/index.d.ts.map +1 -0
  440. package/dist/components/slider/index.js +2 -0
  441. package/dist/components/slider/index.js.map +1 -0
  442. package/dist/components/snackbar/Snackbar.d.ts +21 -0
  443. package/dist/components/snackbar/Snackbar.d.ts.map +1 -0
  444. package/dist/components/snackbar/Snackbar.js +12 -0
  445. package/dist/components/snackbar/Snackbar.js.map +1 -0
  446. package/dist/components/snackbar/index.d.ts +3 -0
  447. package/dist/components/snackbar/index.d.ts.map +1 -0
  448. package/dist/components/snackbar/index.js +2 -0
  449. package/dist/components/snackbar/index.js.map +1 -0
  450. package/dist/components/spinner/Spinner.d.ts +22 -0
  451. package/dist/components/spinner/Spinner.d.ts.map +1 -0
  452. package/dist/components/spinner/Spinner.js +28 -0
  453. package/dist/components/spinner/Spinner.js.map +1 -0
  454. package/dist/components/spinner/index.d.ts +3 -0
  455. package/dist/components/spinner/index.d.ts.map +1 -0
  456. package/dist/components/spinner/index.js +2 -0
  457. package/dist/components/spinner/index.js.map +1 -0
  458. package/dist/components/status-pill/StatusPill.d.ts +19 -0
  459. package/dist/components/status-pill/StatusPill.d.ts.map +1 -0
  460. package/dist/components/status-pill/StatusPill.js +16 -0
  461. package/dist/components/status-pill/StatusPill.js.map +1 -0
  462. package/dist/components/status-pill/index.d.ts +3 -0
  463. package/dist/components/status-pill/index.d.ts.map +1 -0
  464. package/dist/components/status-pill/index.js +2 -0
  465. package/dist/components/status-pill/index.js.map +1 -0
  466. package/dist/components/stepper/Stepper.d.ts +31 -0
  467. package/dist/components/stepper/Stepper.d.ts.map +1 -0
  468. package/dist/components/stepper/Stepper.js +49 -0
  469. package/dist/components/stepper/Stepper.js.map +1 -0
  470. package/dist/components/stepper/index.d.ts +3 -0
  471. package/dist/components/stepper/index.d.ts.map +1 -0
  472. package/dist/components/stepper/index.js +2 -0
  473. package/dist/components/stepper/index.js.map +1 -0
  474. package/dist/components/success-state/SuccessState.d.ts +27 -0
  475. package/dist/components/success-state/SuccessState.d.ts.map +1 -0
  476. package/dist/components/success-state/SuccessState.js +14 -0
  477. package/dist/components/success-state/SuccessState.js.map +1 -0
  478. package/dist/components/success-state/index.d.ts +3 -0
  479. package/dist/components/success-state/index.d.ts.map +1 -0
  480. package/dist/components/success-state/index.js +2 -0
  481. package/dist/components/success-state/index.js.map +1 -0
  482. package/dist/components/switch/Switch.d.ts +11 -0
  483. package/dist/components/switch/Switch.d.ts.map +1 -0
  484. package/dist/components/switch/Switch.js +13 -0
  485. package/dist/components/switch/Switch.js.map +1 -0
  486. package/dist/components/switch/index.d.ts +3 -0
  487. package/dist/components/switch/index.d.ts.map +1 -0
  488. package/dist/components/switch/index.js +2 -0
  489. package/dist/components/switch/index.js.map +1 -0
  490. package/dist/components/tabs/Tabs.d.ts +32 -0
  491. package/dist/components/tabs/Tabs.d.ts.map +1 -0
  492. package/dist/components/tabs/Tabs.js +43 -0
  493. package/dist/components/tabs/Tabs.js.map +1 -0
  494. package/dist/components/tabs/index.d.ts +3 -0
  495. package/dist/components/tabs/index.d.ts.map +1 -0
  496. package/dist/components/tabs/index.js +2 -0
  497. package/dist/components/tabs/index.js.map +1 -0
  498. package/dist/components/tag/Tag.d.ts +30 -0
  499. package/dist/components/tag/Tag.d.ts.map +1 -0
  500. package/dist/components/tag/Tag.js +35 -0
  501. package/dist/components/tag/Tag.js.map +1 -0
  502. package/dist/components/tag/index.d.ts +3 -0
  503. package/dist/components/tag/index.d.ts.map +1 -0
  504. package/dist/components/tag/index.js +2 -0
  505. package/dist/components/tag/index.js.map +1 -0
  506. package/dist/components/textarea/Textarea.d.ts +19 -0
  507. package/dist/components/textarea/Textarea.d.ts.map +1 -0
  508. package/dist/components/textarea/Textarea.js +11 -0
  509. package/dist/components/textarea/Textarea.js.map +1 -0
  510. package/dist/components/textarea/index.d.ts +3 -0
  511. package/dist/components/textarea/index.d.ts.map +1 -0
  512. package/dist/components/textarea/index.js +2 -0
  513. package/dist/components/textarea/index.js.map +1 -0
  514. package/dist/components/toast/Toast.d.ts +67 -0
  515. package/dist/components/toast/Toast.d.ts.map +1 -0
  516. package/dist/components/toast/Toast.js +63 -0
  517. package/dist/components/toast/Toast.js.map +1 -0
  518. package/dist/components/toast/index.d.ts +5 -0
  519. package/dist/components/toast/index.d.ts.map +1 -0
  520. package/dist/components/toast/index.js +3 -0
  521. package/dist/components/toast/index.js.map +1 -0
  522. package/dist/components/toast/useToastQueue.d.ts +73 -0
  523. package/dist/components/toast/useToastQueue.d.ts.map +1 -0
  524. package/dist/components/toast/useToastQueue.js +191 -0
  525. package/dist/components/toast/useToastQueue.js.map +1 -0
  526. package/dist/components/toggle-matrix/ToggleMatrix.d.ts +58 -0
  527. package/dist/components/toggle-matrix/ToggleMatrix.d.ts.map +1 -0
  528. package/dist/components/toggle-matrix/ToggleMatrix.js +95 -0
  529. package/dist/components/toggle-matrix/ToggleMatrix.js.map +1 -0
  530. package/dist/components/toggle-matrix/index.d.ts +3 -0
  531. package/dist/components/toggle-matrix/index.d.ts.map +1 -0
  532. package/dist/components/toggle-matrix/index.js +2 -0
  533. package/dist/components/toggle-matrix/index.js.map +1 -0
  534. package/dist/components/tooltip/Tooltip.d.ts +33 -0
  535. package/dist/components/tooltip/Tooltip.d.ts.map +1 -0
  536. package/dist/components/tooltip/Tooltip.js +19 -0
  537. package/dist/components/tooltip/Tooltip.js.map +1 -0
  538. package/dist/components/tooltip/index.d.ts +3 -0
  539. package/dist/components/tooltip/index.d.ts.map +1 -0
  540. package/dist/components/tooltip/index.js +2 -0
  541. package/dist/components/tooltip/index.js.map +1 -0
  542. package/dist/components/two-phase-modal/TwoPhaseModal.d.ts +45 -0
  543. package/dist/components/two-phase-modal/TwoPhaseModal.d.ts.map +1 -0
  544. package/dist/components/two-phase-modal/TwoPhaseModal.js +50 -0
  545. package/dist/components/two-phase-modal/TwoPhaseModal.js.map +1 -0
  546. package/dist/components/two-phase-modal/index.d.ts +3 -0
  547. package/dist/components/two-phase-modal/index.d.ts.map +1 -0
  548. package/dist/components/two-phase-modal/index.js +2 -0
  549. package/dist/components/two-phase-modal/index.js.map +1 -0
  550. package/dist/hooks/index.d.ts +3 -0
  551. package/dist/hooks/index.d.ts.map +1 -0
  552. package/dist/hooks/index.js +2 -0
  553. package/dist/hooks/index.js.map +1 -0
  554. package/dist/hooks/useUndoableAction.d.ts +62 -0
  555. package/dist/hooks/useUndoableAction.d.ts.map +1 -0
  556. package/dist/hooks/useUndoableAction.js +85 -0
  557. package/dist/hooks/useUndoableAction.js.map +1 -0
  558. package/dist/index.d.ts +69 -0
  559. package/dist/index.d.ts.map +1 -0
  560. package/dist/index.js +72 -0
  561. package/dist/index.js.map +1 -0
  562. package/dist/lib/cn.d.ts +33 -0
  563. package/dist/lib/cn.d.ts.map +1 -0
  564. package/dist/lib/cn.js +59 -0
  565. package/dist/lib/cn.js.map +1 -0
  566. package/dist/lib/index.d.ts +3 -0
  567. package/dist/lib/index.d.ts.map +1 -0
  568. package/dist/lib/index.js +2 -0
  569. package/dist/lib/index.js.map +1 -0
  570. package/dist/lib/tones.d.ts +40 -0
  571. package/dist/lib/tones.d.ts.map +1 -0
  572. package/dist/lib/tones.js +91 -0
  573. package/dist/lib/tones.js.map +1 -0
  574. package/dist/theme/ThemeProvider.d.ts +15 -0
  575. package/dist/theme/ThemeProvider.d.ts.map +1 -0
  576. package/dist/theme/ThemeProvider.js +186 -0
  577. package/dist/theme/ThemeProvider.js.map +1 -0
  578. package/dist/theme/context.d.ts +21 -0
  579. package/dist/theme/context.d.ts.map +1 -0
  580. package/dist/theme/context.js +7 -0
  581. package/dist/theme/context.js.map +1 -0
  582. package/dist/theme/index.d.ts +9 -0
  583. package/dist/theme/index.d.ts.map +1 -0
  584. package/dist/theme/index.js +5 -0
  585. package/dist/theme/index.js.map +1 -0
  586. package/dist/theme/subscribe.d.ts +12 -0
  587. package/dist/theme/subscribe.d.ts.map +1 -0
  588. package/dist/theme/subscribe.js +14 -0
  589. package/dist/theme/subscribe.js.map +1 -0
  590. package/dist/theme/types.d.ts +32 -0
  591. package/dist/theme/types.d.ts.map +1 -0
  592. package/dist/theme/types.js +23 -0
  593. package/dist/theme/types.js.map +1 -0
  594. package/dist/theme/useTheme.d.ts +14 -0
  595. package/dist/theme/useTheme.d.ts.map +1 -0
  596. package/dist/theme/useTheme.js +27 -0
  597. package/dist/theme/useTheme.js.map +1 -0
  598. package/package.json +48 -0
@@ -0,0 +1,27 @@
1
+ import type { ComponentPropsWithRef, ReactNode } from 'react';
2
+ /** Alert tone vocabulary (info/pos/warn/danger callouts). */
3
+ export type AlertTone = 'info' | 'pos' | 'warn' | 'danger';
4
+ export interface AlertProps extends Omit<ComponentPropsWithRef<'div'>, 'title'> {
5
+ /** Semantic tone. Default `info`. */
6
+ tone?: AlertTone | undefined;
7
+ /** Override the leading icon (defaults per tone). */
8
+ icon?: ReactNode;
9
+ /** Bold first line. */
10
+ title: ReactNode;
11
+ /** Supporting copy (children also land here). */
12
+ body?: ReactNode;
13
+ /** Optional CTA (link/Button) rendered under the body. */
14
+ action?: ReactNode;
15
+ /**
16
+ * ARIA live semantics: pass `alert` when the callout appears dynamically
17
+ * for a failure, `status` for polite updates. Static page content omits it.
18
+ */
19
+ role?: 'alert' | 'status' | undefined;
20
+ }
21
+ /**
22
+ * Alert / Callout — tone-soft background + `color-mix` tone border, icon +
23
+ * title + body + optional CTA; tones info/pos/warn/danger
24
+ * (research/design-system.md §3 Tier 3).
25
+ */
26
+ export declare function Alert({ tone, icon, title, body, action, className, children, ...props }: AlertProps): import("react").JSX.Element;
27
+ //# sourceMappingURL=Alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../../src/components/alert/Alert.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAK9D,6DAA6D;AAC7D,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;AAgB3D,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAC7E,qCAAqC;IACrC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,qDAAqD;IACrD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,uBAAuB;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,iDAAiD;IACjD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;CACvC;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,EACpB,IAAa,EACb,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,MAAM,EACN,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,UAAU,+BAwBZ"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { AlertTriangle, CheckCircle2, Info, XCircle } from 'lucide-react';
3
+ import { cn } from '../../lib/cn.js';
4
+ import { toneMixBorderClasses } from '../../lib/tones.js';
5
+ const toneClasses = {
6
+ info: 'bg-info-soft [&_[data-part=alert-icon]]:text-info',
7
+ pos: 'bg-pos-soft [&_[data-part=alert-icon]]:text-pos',
8
+ warn: 'bg-warn-soft [&_[data-part=alert-icon]]:text-warn',
9
+ danger: 'bg-danger-soft [&_[data-part=alert-icon]]:text-danger',
10
+ };
11
+ const defaultIcons = {
12
+ info: _jsx(Info, {}),
13
+ pos: _jsx(CheckCircle2, {}),
14
+ warn: _jsx(AlertTriangle, {}),
15
+ danger: _jsx(XCircle, {}),
16
+ };
17
+ /**
18
+ * Alert / Callout — tone-soft background + `color-mix` tone border, icon +
19
+ * title + body + optional CTA; tones info/pos/warn/danger
20
+ * (research/design-system.md §3 Tier 3).
21
+ */
22
+ export function Alert({ tone = 'info', icon, title, body, action, className, children, ...props }) {
23
+ return (_jsxs("div", { "data-tone": tone, className: cn('flex items-start gap-3 rounded-lg border p-3.5', toneClasses[tone], toneMixBorderClasses[tone], className), ...props, children: [_jsx("span", { "data-part": "alert-icon", "aria-hidden": "true", className: "mt-px shrink-0 [&_svg]:size-4 [&_svg]:stroke-2", children: icon ?? defaultIcons[tone] }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: "text-body font-bold leading-snug text-fg", children: title }), body === undefined && children === undefined ? null : (_jsx("div", { className: "mt-0.5 text-body-sm text-fg-muted", children: body ?? children })), action === undefined || action === null ? null : _jsx("div", { className: "mt-2", children: action })] })] }));
24
+ }
25
+ //# sourceMappingURL=Alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.js","sourceRoot":"","sources":["../../../src/components/alert/Alert.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG1E,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAK1D,MAAM,WAAW,GAA8B;IAC7C,IAAI,EAAE,mDAAmD;IACzD,GAAG,EAAE,iDAAiD;IACtD,IAAI,EAAE,mDAAmD;IACzD,MAAM,EAAE,uDAAuD;CAChE,CAAC;AAEF,MAAM,YAAY,GAAiC;IACjD,IAAI,EAAE,KAAC,IAAI,KAAG;IACd,GAAG,EAAE,KAAC,YAAY,KAAG;IACrB,IAAI,EAAE,KAAC,aAAa,KAAG;IACvB,MAAM,EAAE,KAAC,OAAO,KAAG;CACpB,CAAC;AAoBF;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,EACpB,IAAI,GAAG,MAAM,EACb,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,MAAM,EACN,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACG;IACX,OAAO,CACL,4BACa,IAAI,EACf,SAAS,EAAE,EAAE,CACX,gDAAgD,EAChD,WAAW,CAAC,IAAI,CAAC,EACjB,oBAAoB,CAAC,IAAI,CAAC,EAC1B,SAAS,CACV,KACG,KAAK,aAET,4BAAgB,YAAY,iBAAa,MAAM,EAAC,SAAS,EAAC,gDAAgD,YACvG,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,GACtB,EACP,eAAK,SAAS,EAAC,gBAAgB,aAC7B,cAAK,SAAS,EAAC,0CAA0C,YAAE,KAAK,GAAO,EACtE,IAAI,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACrD,cAAK,SAAS,EAAC,mCAAmC,YAAE,IAAI,IAAI,QAAQ,GAAO,CAC5E,EACA,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,MAAM,YAAE,MAAM,GAAO,IAClF,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { Alert } from './Alert.js';
2
+ export type { AlertProps, AlertTone } from './Alert.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/alert/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Alert } from './Alert.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/alert/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,54 @@
1
+ import type { ComponentPropsWithRef, ReactNode } from 'react';
2
+ export interface AuthLayoutProps extends Omit<ComponentPropsWithRef<'div'>, 'style'> {
3
+ /**
4
+ * `split` (default) renders the 44% brand panel + form side per
5
+ * designs/Login.dc.html; `single` renders only the centered 380px form
6
+ * column (narrow contexts: modals, Electron sign-in, mobile web).
7
+ */
8
+ variant?: 'split' | 'single' | undefined;
9
+ /** Logo block pinned to the top of the brand panel (brand tile + wordmark). */
10
+ logo?: ReactNode;
11
+ /** Brand headline ("Turn any database into a dashboard."). */
12
+ headline?: ReactNode;
13
+ /** Supporting copy under the headline. */
14
+ description?: ReactNode;
15
+ /** Extra brand content under the description (feature checklist, …). */
16
+ brandContent?: ReactNode;
17
+ /** Testimonial card slot (see `AuthTestimonial`). */
18
+ testimonial?: ReactNode;
19
+ /** Trust badges slot pinned to the bottom ("SOC 2 Type II · GDPR · …"). */
20
+ trustBadges?: ReactNode;
21
+ /** Corner slot on the form side (theme toggle IconButton). */
22
+ corner?: ReactNode;
23
+ /** Centered caption under the form card ("Protected by …"). */
24
+ footer?: ReactNode;
25
+ /** The auth screen (SignInForm, TwoFactorForm, …) — capped at 380px. */
26
+ children: ReactNode;
27
+ }
28
+ /**
29
+ * AuthLayout — Tier-5 auth shell (research/design-system.md §3 Tier 5,
30
+ * designs/Login.dc.html + designs/Auth & Onboarding.dc.html): split
31
+ * brand panel with the accent gradient, logo block, testimonial + trust-badge
32
+ * slots, and a 380px form column. The brand panel is purely decorative
33
+ * marketing surface: it is `aria-hidden`, collapses away below `lg`, and the
34
+ * layout uses logical flow only, so RTL mirrors for free.
35
+ */
36
+ export declare function AuthLayout({ variant, logo, headline, description, brandContent, testimonial, trustBadges, corner, footer, className, children, ...props }: AuthLayoutProps): import("react").JSX.Element;
37
+ export interface AuthTestimonialProps extends Omit<ComponentPropsWithRef<'figure'>, 'style' | 'role'> {
38
+ /** Quote body (already-quoted copy per the comp). */
39
+ quote: ReactNode;
40
+ /** Attribution name ("Dana K"). */
41
+ name: ReactNode;
42
+ /** Attribution role/company ("Head of Eng, Northwind"). */
43
+ role?: ReactNode;
44
+ /** Leading avatar element (e.g. an `Avatar`). */
45
+ avatar?: ReactNode;
46
+ }
47
+ /**
48
+ * AuthTestimonial — the translucent testimonial card that lives on the
49
+ * AuthLayout brand panel (designs/Login.dc.html): white/10 card, quote,
50
+ * attribution line. Colors are fixed white alphas because the card always
51
+ * sits on the accent gradient.
52
+ */
53
+ export declare function AuthTestimonial({ quote, name, role, avatar, className, ...props }: AuthTestimonialProps): import("react").JSX.Element;
54
+ //# sourceMappingURL=AuthLayout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthLayout.d.ts","sourceRoot":"","sources":["../../../src/components/auth-layout/AuthLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAa9D,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAClF;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzC,+EAA+E;IAC/E,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,wEAAwE;IACxE,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,qDAAqD;IACrD,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,wEAAwE;IACxE,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,OAAiB,EACjB,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,WAAW,EACX,WAAW,EACX,MAAM,EACN,MAAM,EACN,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,eAAe,+BAqEjB;AAED,MAAM,WAAW,oBACf,SAAQ,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/D,qDAAqD;IACrD,KAAK,EAAE,SAAS,CAAC;IACjB,mCAAmC;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,iDAAiD;IACjD,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,SAAS,EACT,GAAG,KAAK,EACT,EAAE,oBAAoB,+BAoBtB"}
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { cn } from '../../lib/cn.js';
3
+ /**
4
+ * The brand-panel accent gradient from designs/Login.dc.html /
5
+ * designs/Auth & Onboarding.dc.html: `linear-gradient(155deg, accent,
6
+ * color-mix(accent 62%, black))`. A static class over token vars, so it
7
+ * follows every accent palette at runtime.
8
+ */
9
+ const brandGradientClass = 'bg-accent bg-[linear-gradient(155deg,var(--accent),color-mix(in_srgb,var(--accent)_62%,#000))]';
10
+ /**
11
+ * AuthLayout — Tier-5 auth shell (research/design-system.md §3 Tier 5,
12
+ * designs/Login.dc.html + designs/Auth & Onboarding.dc.html): split
13
+ * brand panel with the accent gradient, logo block, testimonial + trust-badge
14
+ * slots, and a 380px form column. The brand panel is purely decorative
15
+ * marketing surface: it is `aria-hidden`, collapses away below `lg`, and the
16
+ * layout uses logical flow only, so RTL mirrors for free.
17
+ */
18
+ export function AuthLayout({ variant = 'split', logo, headline, description, brandContent, testimonial, trustBadges, corner, footer, className, children, ...props }) {
19
+ return (_jsxs("div", { "data-part": "auth-layout", "data-variant": variant, className: cn('flex min-h-dvh w-full bg-bg text-fg', className), ...props, children: [variant === 'split' ? (_jsxs("div", { "data-part": "auth-brand-panel", "aria-hidden": "true", className: cn('hidden w-[44%] shrink-0 select-none flex-col justify-between gap-10 overflow-hidden p-11 text-white lg:flex', brandGradientClass), children: [_jsx("div", { "data-part": "auth-brand-logo", children: logo }), _jsxs("div", { className: "flex max-w-[440px] flex-col items-start", children: [headline === undefined ? null : (_jsx("div", { className: "text-[32px] font-extrabold leading-[1.15] tracking-[-0.03em]", children: headline })), description === undefined ? null : (_jsx("div", { className: "mt-4 max-w-[40ch] text-[15px] leading-relaxed text-white/80", children: description })), brandContent === undefined ? null : _jsx("div", { className: "mt-7 w-full", children: brandContent }), testimonial === undefined ? null : (_jsx("div", { "data-part": "auth-testimonial-slot", className: "mt-7 w-full", children: testimonial }))] }), trustBadges === undefined ? (_jsx("div", {})) : (_jsx("div", { "data-part": "auth-trust-badges", className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-[12px] text-white/60", children: trustBadges }))] })) : null, _jsxs("div", { className: "relative flex min-w-0 flex-1 flex-col items-center justify-center p-6 sm:p-10", children: [corner === undefined ? null : (_jsx("div", { "data-part": "auth-corner", className: "absolute end-6 top-6", children: corner })), _jsxs("main", { "data-part": "auth-form-column", className: "w-full max-w-[380px]", children: [children, footer === undefined ? null : (_jsx("div", { "data-part": "auth-footer", className: "mt-7 flex items-center justify-center gap-1.5 text-center text-caption text-fg-subtle [&_svg]:size-3.5", children: footer }))] })] })] }));
20
+ }
21
+ /**
22
+ * AuthTestimonial — the translucent testimonial card that lives on the
23
+ * AuthLayout brand panel (designs/Login.dc.html): white/10 card, quote,
24
+ * attribution line. Colors are fixed white alphas because the card always
25
+ * sits on the accent gradient.
26
+ */
27
+ export function AuthTestimonial({ quote, name, role, avatar, className, ...props }) {
28
+ return (_jsxs("figure", { "data-part": "auth-testimonial", className: cn('flex max-w-[40ch] items-center gap-3 rounded-lg border border-white/15 bg-white/10 p-4', className), ...props, children: [avatar === undefined ? null : _jsx("div", { className: "shrink-0", children: avatar }), _jsxs("div", { className: "min-w-0", children: [_jsx("blockquote", { className: "text-[12.5px] leading-normal text-white/90", children: quote }), _jsxs("figcaption", { className: "mt-1 text-caption text-white/60", children: [name, role === undefined ? null : _jsxs(_Fragment, { children: [" \u00B7 ", role] })] })] })] }));
29
+ }
30
+ //# sourceMappingURL=AuthLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthLayout.js","sourceRoot":"","sources":["../../../src/components/auth-layout/AuthLayout.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC;;;;;GAKG;AACH,MAAM,kBAAkB,GACtB,gGAAgG,CAAC;AA6BnG;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,GAAG,OAAO,EACjB,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,WAAW,EACX,WAAW,EACX,MAAM,EACN,MAAM,EACN,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACQ;IAChB,OAAO,CACL,4BACY,aAAa,kBACT,OAAO,EACrB,SAAS,EAAE,EAAE,CAAC,qCAAqC,EAAE,SAAS,CAAC,KAC3D,KAAK,aAER,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CACrB,4BACY,kBAAkB,iBAChB,MAAM,EAClB,SAAS,EAAE,EAAE,CACX,6GAA6G,EAC7G,kBAAkB,CACnB,aAED,2BAAe,iBAAiB,YAAE,IAAI,GAAO,EAC7C,eAAK,SAAS,EAAC,yCAAyC,aACrD,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC/B,cAAK,SAAS,EAAC,8DAA8D,YAC1E,QAAQ,GACL,CACP,EACA,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAClC,cAAK,SAAS,EAAC,6DAA6D,YACzE,WAAW,GACR,CACP,EACA,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,aAAa,YAAE,YAAY,GAAO,EACrF,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAClC,2BAAe,uBAAuB,EAAC,SAAS,EAAC,aAAa,YAC3D,WAAW,GACR,CACP,IACG,EACL,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,CAC3B,eAAO,CACR,CAAC,CAAC,CAAC,CACF,2BACY,mBAAmB,EAC7B,SAAS,EAAC,uEAAuE,YAEhF,WAAW,GACR,CACP,IACG,CACP,CAAC,CAAC,CAAC,IAAI,EAER,eAAK,SAAS,EAAC,+EAA+E,aAC3F,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC7B,2BAAe,aAAa,EAAC,SAAS,EAAC,sBAAsB,YAC1D,MAAM,GACH,CACP,EACD,6BAAgB,kBAAkB,EAAC,SAAS,EAAC,sBAAsB,aAChE,QAAQ,EACR,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC7B,2BACY,aAAa,EACvB,SAAS,EAAC,wGAAwG,YAEjH,MAAM,GACH,CACP,IACI,IACH,IACF,CACP,CAAC;AACJ,CAAC;AAcD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,SAAS,EACT,GAAG,KAAK,EACa;IACrB,OAAO,CACL,+BACY,kBAAkB,EAC5B,SAAS,EAAE,EAAE,CACX,wFAAwF,EACxF,SAAS,CACV,KACG,KAAK,aAER,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,UAAU,YAAE,MAAM,GAAO,EACvE,eAAK,SAAS,EAAC,SAAS,aACtB,qBAAY,SAAS,EAAC,4CAA4C,YAAE,KAAK,GAAc,EACvF,sBAAY,SAAS,EAAC,iCAAiC,aACpD,IAAI,EACJ,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAM,IAAI,IAAI,IAChC,IACT,IACC,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { AuthLayout, AuthTestimonial } from './AuthLayout.js';
2
+ export type { AuthLayoutProps, AuthTestimonialProps } from './AuthLayout.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/auth-layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { AuthLayout, AuthTestimonial } from './AuthLayout.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/auth-layout/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,80 @@
1
+ import type { ComponentPropsWithRef, ReactNode } from 'react';
2
+ /** Payload emitted by `ForgotPasswordForm.onSubmit`. */
3
+ export interface ForgotPasswordFormValues {
4
+ email: string;
5
+ }
6
+ /** All user-visible strings (required — i18n). */
7
+ export interface ForgotPasswordFormLabels {
8
+ /** Heading, e.g. "Reset your password". */
9
+ title: ReactNode;
10
+ /** Muted copy, e.g. "Enter your email and we'll send you a link…". */
11
+ subtitle?: ReactNode | undefined;
12
+ email: string;
13
+ emailPlaceholder?: string | undefined;
14
+ submit: string;
15
+ /** "Back to sign in" link. */
16
+ back?: string | undefined;
17
+ /** Field error for a missing/malformed email. */
18
+ emailInvalid: string;
19
+ }
20
+ export interface ForgotPasswordFormProps extends Omit<ComponentPropsWithRef<'form'>, 'style' | 'onSubmit' | 'onError' | 'title'> {
21
+ labels: ForgotPasswordFormLabels;
22
+ /** Fires with the validated email — the host app calls the API. */
23
+ onSubmit: (values: ForgotPasswordFormValues) => void;
24
+ /** "Back to sign in" handler; renders the back link when provided. */
25
+ onBack?: (() => void) | undefined;
26
+ /** Server-side failure banner (danger `Alert`, `role="alert"`). */
27
+ error?: ReactNode;
28
+ /** Request in flight. */
29
+ loading?: boolean | undefined;
30
+ /**
31
+ * The instance cannot send this mail at all — 11-electron.md §8.2's email row
32
+ * ("Enabled only when SMTP is configured in settings; otherwise buttons
33
+ * disabled"). Distinct from `loading`, which means "wait"; this means "not
34
+ * from here". Pair it with {@link ForgotPasswordFormProps.notice} — a disabled
35
+ * button with no explanation is the exact thing `designs/Empty States.dc.html`
36
+ * forbids.
37
+ */
38
+ disabled?: boolean | undefined;
39
+ /**
40
+ * Info `Alert` above the field: why the form is disabled, and what to do
41
+ * instead. Not `error` — an unconfigured relay is the operator's state of the
42
+ * world, not this visitor's mistake, and `role="alert"` would interrupt a
43
+ * screen reader to say so.
44
+ */
45
+ notice?: ReactNode;
46
+ defaultEmail?: string | undefined;
47
+ }
48
+ /**
49
+ * ForgotPasswordForm — request-a-reset-link screen per
50
+ * designs/Login.dc.html (FORGOT state). Controlled composition: zero
51
+ * fetching. On success the host swaps in `ForgotSentState`.
52
+ *
53
+ * Endpoint contract (apps/server/src/routes/auth):
54
+ * `POST /api/v1/auth/password/forgot` with `{ email }` → always
55
+ * `200 { data: { ok: true } }` (no user enumeration — show the sent state
56
+ * regardless); `429` (3/hour bucket) — pass a message via `error`.
57
+ */
58
+ export declare function ForgotPasswordForm({ labels, onSubmit, onBack, error, loading, disabled, notice, defaultEmail, className, ...props }: ForgotPasswordFormProps): import("react").JSX.Element;
59
+ export interface ForgotSentStateProps extends Omit<ComponentPropsWithRef<'div'>, 'style' | 'title'> {
60
+ /** Heading, e.g. "Check your email". */
61
+ title: ReactNode;
62
+ /** Copy echoing the address ("We sent a reset link to ava@… It expires in 15 minutes."). */
63
+ body?: ReactNode;
64
+ /** Primary button label ("Back to sign in"). */
65
+ doneLabel: string;
66
+ onDone?: (() => void) | undefined;
67
+ /** Resend link line ("Didn't get it?" + link). */
68
+ resendLabel?: string | undefined;
69
+ onResend?: (() => void) | undefined;
70
+ /** Muted prefix before the resend link ("Didn't get it?"). */
71
+ resendHint?: ReactNode;
72
+ }
73
+ /**
74
+ * ForgotSentState — the SENT confirmation from designs/Login.dc.html,
75
+ * reusing `SuccessState` (pos mail-check tile + heading + copy + Done) with a
76
+ * resend link line. Re-submitting hits the same
77
+ * `POST /api/v1/auth/password/forgot` endpoint (3/hour rate bucket).
78
+ */
79
+ export declare function ForgotSentState({ title, body, doneLabel, onDone, resendLabel, onResend, resendHint, className, ...props }: ForgotSentStateProps): import("react").JSX.Element;
80
+ //# sourceMappingURL=ForgotPasswordForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForgotPasswordForm.d.ts","sourceRoot":"","sources":["../../../src/components/auth-screens/ForgotPasswordForm.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAa,SAAS,EAAE,MAAM,OAAO,CAAC;AAUzE,wDAAwD;AACxD,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,kDAAkD;AAClD,MAAM,WAAW,wBAAwB;IACvC,2CAA2C;IAC3C,KAAK,EAAE,SAAS,CAAC;IACjB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBACf,SAAQ,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IACvF,MAAM,EAAE,wBAAwB,CAAC;IACjC,mEAAmE;IACnE,QAAQ,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACrD,sEAAsE;IACtE,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAClC,mEAAmE;IACnE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,yBAAyB;IACzB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAID;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,QAAQ,EACR,MAAM,EACN,KAAK,EACL,OAAe,EACf,QAAgB,EAChB,MAAM,EACN,YAAY,EACZ,SAAS,EACT,GAAG,KAAK,EACT,EAAE,uBAAuB,+BAsEzB;AAED,MAAM,WAAW,oBACf,SAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC7D,wCAAwC;IACxC,KAAK,EAAE,SAAS,CAAC;IACjB,4FAA4F;IAC5F,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAClC,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACpC,8DAA8D;IAC9D,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,IAAI,EACJ,SAAS,EACT,MAAM,EACN,WAAW,EACX,QAAQ,EACR,UAAU,EACV,SAAS,EACT,GAAG,KAAK,EACT,EAAE,oBAAoB,+BAqBtB"}
@@ -0,0 +1,50 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { ArrowLeft, KeyRound, Mail, MailCheck } from 'lucide-react';
3
+ import { useState } from 'react';
4
+ import { cn } from '../../lib/cn.js';
5
+ import { Alert } from '../alert/index.js';
6
+ import { Button } from '../button/index.js';
7
+ import { FormField } from '../form-field/index.js';
8
+ import { IconTile } from '../icon-tile/index.js';
9
+ import { InputGroup } from '../input-group/index.js';
10
+ import { SuccessState } from '../success-state/index.js';
11
+ const looksLikeEmail = (value) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
12
+ /**
13
+ * ForgotPasswordForm — request-a-reset-link screen per
14
+ * designs/Login.dc.html (FORGOT state). Controlled composition: zero
15
+ * fetching. On success the host swaps in `ForgotSentState`.
16
+ *
17
+ * Endpoint contract (apps/server/src/routes/auth):
18
+ * `POST /api/v1/auth/password/forgot` with `{ email }` → always
19
+ * `200 { data: { ok: true } }` (no user enumeration — show the sent state
20
+ * regardless); `429` (3/hour bucket) — pass a message via `error`.
21
+ */
22
+ export function ForgotPasswordForm({ labels, onSubmit, onBack, error, loading = false, disabled = false, notice, defaultEmail, className, ...props }) {
23
+ const [email, setEmail] = useState(defaultEmail ?? '');
24
+ const [fieldError, setFieldError] = useState(undefined);
25
+ const handleSubmit = (event) => {
26
+ event.preventDefault();
27
+ // Belt and braces: the button is disabled, but a form still submits on
28
+ // Enter in some browsers, and this must not raise a "check your email" for
29
+ // mail that has nowhere to go.
30
+ if (disabled)
31
+ return;
32
+ if (!looksLikeEmail(email.trim())) {
33
+ setFieldError(labels.emailInvalid);
34
+ return;
35
+ }
36
+ setFieldError(undefined);
37
+ onSubmit({ email: email.trim() });
38
+ };
39
+ return (_jsxs("form", { noValidate: true, "data-part": "forgot-password-form", className: cn('flex w-full flex-col', className), onSubmit: handleSubmit, ...props, children: [onBack === undefined || labels.back === undefined ? null : (_jsx(Button, { variant: "link", onClick: onBack, iconLeft: _jsx(ArrowLeft, { className: "size-3.5 rtl:rotate-180" }), className: "mb-5 self-start text-body-sm font-bold text-fg-muted hover:text-accent", children: labels.back })), _jsx(IconTile, { tone: "accent", size: "lg", icon: _jsx(KeyRound, {}) }), _jsx("h1", { className: "mt-4 text-[23px] font-extrabold tracking-[-0.02em] text-fg", children: labels.title }), labels.subtitle === undefined ? null : (_jsx("p", { className: "mt-1.5 text-[13.5px] leading-relaxed text-fg-muted", children: labels.subtitle })), error === undefined || error === null ? null : (_jsx(Alert, { tone: "danger", role: "alert", title: error, className: "mt-4" })), notice === undefined || notice === null ? null : (_jsx(Alert, { tone: "info", title: notice, className: "mt-4" })), _jsxs("div", { className: "mt-6 flex flex-col gap-4", children: [_jsx(FormField, { label: labels.email, error: fieldError, children: _jsx(InputGroup, { type: "email", name: "email", autoComplete: "email", iconLeading: _jsx(Mail, {}), placeholder: labels.emailPlaceholder, value: email, disabled: loading || disabled, onChange: (event) => setEmail(event.target.value) }) }), _jsx(Button, { type: "submit", loading: loading, disabled: disabled, className: "w-full", children: labels.submit })] })] }));
40
+ }
41
+ /**
42
+ * ForgotSentState — the SENT confirmation from designs/Login.dc.html,
43
+ * reusing `SuccessState` (pos mail-check tile + heading + copy + Done) with a
44
+ * resend link line. Re-submitting hits the same
45
+ * `POST /api/v1/auth/password/forgot` endpoint (3/hour rate bucket).
46
+ */
47
+ export function ForgotSentState({ title, body, doneLabel, onDone, resendLabel, onResend, resendHint, className, ...props }) {
48
+ return (_jsxs("div", { "data-part": "forgot-sent-state", className: cn('flex w-full flex-col', className), ...props, children: [_jsx(SuccessState, { title: title, body: body, doneLabel: doneLabel, onDone: onDone, icon: _jsx(MailCheck, {}), className: "px-0 py-0" }), resendLabel === undefined || onResend === undefined ? null : (_jsxs("p", { className: "mt-4 text-center text-body-sm text-fg-muted", children: [resendHint === undefined ? null : _jsxs(_Fragment, { children: [resendHint, " "] }), _jsx(Button, { variant: "link", className: "text-body-sm font-bold", onClick: onResend, children: resendLabel })] }))] }));
49
+ }
50
+ //# sourceMappingURL=ForgotPasswordForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForgotPasswordForm.js","sourceRoot":"","sources":["../../../src/components/auth-screens/ForgotPasswordForm.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { ComponentPropsWithRef, ReactNode } from 'react';
2
+ import type { PasswordScore } from '../password-strength/index.js';
3
+ /** Payload emitted by `ResetPasswordForm.onSubmit`. */
4
+ export interface ResetPasswordFormValues {
5
+ password: string;
6
+ }
7
+ /** All user-visible strings (required — i18n). */
8
+ export interface ResetPasswordFormLabels {
9
+ /** Heading, e.g. "Set a new password". */
10
+ title: ReactNode;
11
+ /** Muted copy, e.g. "Must be at least 8 characters." */
12
+ subtitle?: ReactNode | undefined;
13
+ password: string;
14
+ confirmPassword: string;
15
+ submit: string;
16
+ /** Field error when the password is under `minLength`. */
17
+ tooShort: string;
18
+ /** Field error when the confirmation does not match. */
19
+ mismatch: string;
20
+ /** Accessible name for the strength meter ("Password strength"). */
21
+ strength: string;
22
+ /** Strength labels for scores 1–4, e.g. ['Weak','Fair','Good','Strong']. */
23
+ strengthLabels: readonly [string, string, string, string];
24
+ /** Reveal-eye accessible names. */
25
+ showPassword: string;
26
+ hidePassword: string;
27
+ }
28
+ export interface ResetPasswordFormProps extends Omit<ComponentPropsWithRef<'form'>, 'style' | 'onSubmit' | 'onError' | 'title'> {
29
+ labels: ResetPasswordFormLabels;
30
+ /** Fires with the validated new password — the host app calls the API. */
31
+ onSubmit: (values: ResetPasswordFormValues) => void;
32
+ /** Server-side failure banner (expired/used token …). */
33
+ error?: ReactNode;
34
+ /** Request in flight. */
35
+ loading?: boolean | undefined;
36
+ /** Minimum password length. Default 8 (server policy). */
37
+ minLength?: number | undefined;
38
+ /** Injectable strength scorer, forwarded to `PasswordStrength`. */
39
+ score?: ((password: string) => PasswordScore) | undefined;
40
+ }
41
+ /**
42
+ * ResetPasswordForm — set-a-new-password screen per designs/Login.dc.html
43
+ * (RESET state): password + segmented strength meter + confirm field with
44
+ * mismatch validation. Controlled composition: zero fetching.
45
+ *
46
+ * Endpoint contract (apps/server/src/routes/auth):
47
+ * `POST /api/v1/auth/password/reset` with `{ token, newPassword }` — the
48
+ * single-use `token` comes from the emailed link (URL param) and is held by
49
+ * the host app; this component only emits the validated password →
50
+ * - `200 { data: { ok: true } }` — navigate to sign-in;
51
+ * - `400/401` (expired or already-used token, password under 8 chars) —
52
+ * pass a message via `error`.
53
+ */
54
+ export declare function ResetPasswordForm({ labels, onSubmit, error, loading, minLength, score, className, ...props }: ResetPasswordFormProps): import("react").JSX.Element;
55
+ //# sourceMappingURL=ResetPasswordForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResetPasswordForm.d.ts","sourceRoot":"","sources":["../../../src/components/auth-screens/ResetPasswordForm.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAa,SAAS,EAAE,MAAM,OAAO,CAAC;AAUzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,uDAAuD;AACvD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,kDAAkD;AAClD,MAAM,WAAW,uBAAuB;IACtC,0CAA0C;IAC1C,KAAK,EAAE,SAAS,CAAC;IACjB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,cAAc,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1D,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBACf,SAAQ,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IACvF,MAAM,EAAE,uBAAuB,CAAC;IAChC,0EAA0E;IAC1E,QAAQ,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACpD,yDAAyD;IACzD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,yBAAyB;IACzB,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,mEAAmE;IACnE,KAAK,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,aAAa,CAAC,GAAG,SAAS,CAAC;CAC3D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,QAAQ,EACR,KAAK,EACL,OAAe,EACf,SAAa,EACb,KAAK,EACL,SAAS,EACT,GAAG,KAAK,EACT,EAAE,sBAAsB,+BAsFxB"}
@@ -0,0 +1,45 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Eye, EyeOff, Lock, ShieldCheck } from 'lucide-react';
3
+ import { useState } from 'react';
4
+ import { cn } from '../../lib/cn.js';
5
+ import { Alert } from '../alert/index.js';
6
+ import { Button } from '../button/index.js';
7
+ import { FormField } from '../form-field/index.js';
8
+ import { IconButton } from '../icon-button/index.js';
9
+ import { IconTile } from '../icon-tile/index.js';
10
+ import { InputGroup } from '../input-group/index.js';
11
+ import { PasswordStrength } from '../password-strength/index.js';
12
+ /**
13
+ * ResetPasswordForm — set-a-new-password screen per designs/Login.dc.html
14
+ * (RESET state): password + segmented strength meter + confirm field with
15
+ * mismatch validation. Controlled composition: zero fetching.
16
+ *
17
+ * Endpoint contract (apps/server/src/routes/auth):
18
+ * `POST /api/v1/auth/password/reset` with `{ token, newPassword }` — the
19
+ * single-use `token` comes from the emailed link (URL param) and is held by
20
+ * the host app; this component only emits the validated password →
21
+ * - `200 { data: { ok: true } }` — navigate to sign-in;
22
+ * - `400/401` (expired or already-used token, password under 8 chars) —
23
+ * pass a message via `error`.
24
+ */
25
+ export function ResetPasswordForm({ labels, onSubmit, error, loading = false, minLength = 8, score, className, ...props }) {
26
+ const [password, setPassword] = useState('');
27
+ const [confirm, setConfirm] = useState('');
28
+ const [reveal, setReveal] = useState(false);
29
+ const [fieldErrors, setFieldErrors] = useState({});
30
+ const handleSubmit = (event) => {
31
+ event.preventDefault();
32
+ const nextErrors = {};
33
+ if (password.length < minLength)
34
+ nextErrors.password = labels.tooShort;
35
+ if (confirm !== password)
36
+ nextErrors.confirm = labels.mismatch;
37
+ setFieldErrors(nextErrors);
38
+ if (nextErrors.password !== undefined || nextErrors.confirm !== undefined)
39
+ return;
40
+ onSubmit({ password });
41
+ };
42
+ const revealToggle = (_jsx(IconButton, { size: "sm", label: reveal ? labels.hidePassword : labels.showPassword, "aria-pressed": reveal, onClick: () => setReveal((current) => !current), className: "text-fg-subtle [&_svg]:size-4", children: reveal ? _jsx(EyeOff, {}) : _jsx(Eye, {}) }));
43
+ return (_jsxs("form", { noValidate: true, "data-part": "reset-password-form", className: cn('flex w-full flex-col', className), onSubmit: handleSubmit, ...props, children: [_jsx(IconTile, { tone: "accent", size: "lg", icon: _jsx(ShieldCheck, {}) }), _jsx("h1", { className: "mt-4 text-[23px] font-extrabold tracking-[-0.02em] text-fg", children: labels.title }), labels.subtitle === undefined ? null : (_jsx("p", { className: "mt-1.5 text-[13.5px] text-fg-muted", children: labels.subtitle })), error === undefined || error === null ? null : (_jsx(Alert, { tone: "danger", role: "alert", title: error, className: "mt-4" })), _jsxs("div", { className: "mt-6 flex flex-col gap-4", children: [_jsxs("div", { className: "flex flex-col gap-1.5", children: [_jsx(FormField, { label: labels.password, error: fieldErrors.password, children: _jsx(InputGroup, { type: reveal ? 'text' : 'password', name: "new-password", autoComplete: "new-password", iconLeading: _jsx(Lock, {}), value: password, disabled: loading, onChange: (event) => setPassword(event.target.value), trailing: revealToggle }) }), _jsx(PasswordStrength, { value: password, label: labels.strength, labels: labels.strengthLabels, ...(score === undefined ? {} : { score }) })] }), _jsx(FormField, { label: labels.confirmPassword, error: fieldErrors.confirm, children: _jsx(InputGroup, { type: reveal ? 'text' : 'password', name: "confirm-password", autoComplete: "new-password", iconLeading: _jsx(Lock, {}), value: confirm, disabled: loading, onChange: (event) => setConfirm(event.target.value) }) }), _jsx(Button, { type: "submit", loading: loading, className: "w-full", children: labels.submit })] })] }));
44
+ }
45
+ //# sourceMappingURL=ResetPasswordForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResetPasswordForm.js","sourceRoot":"","sources":["../../../src/components/auth-screens/ResetPasswordForm.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { ComponentPropsWithRef, ReactNode } from 'react';
2
+ /** Payload emitted by `SignInForm.onSubmit`. */
3
+ export interface SignInFormValues {
4
+ email: string;
5
+ password: string;
6
+ /** "Keep me signed in" checkbox state (session length is a server concern). */
7
+ remember: boolean;
8
+ }
9
+ /** All user-visible strings (required — i18n). */
10
+ export interface SignInFormLabels {
11
+ /** Heading, e.g. "Welcome back". */
12
+ title: ReactNode;
13
+ /** Muted copy under the heading. */
14
+ subtitle?: ReactNode | undefined;
15
+ email: string;
16
+ password: string;
17
+ /** "Forgot?" link next to the password label. */
18
+ forgot: string;
19
+ /** "Keep me signed in". */
20
+ remember: string;
21
+ submit: string;
22
+ /** Field error for a missing/malformed email. */
23
+ emailInvalid: string;
24
+ /** Field error for an empty password. */
25
+ passwordRequired: string;
26
+ /** Reveal-eye accessible names. */
27
+ showPassword: string;
28
+ hidePassword: string;
29
+ /** Divider text between the SSO slot and the fields ("or"). */
30
+ dividerLabel?: string | undefined;
31
+ }
32
+ export interface SignInFormProps extends Omit<ComponentPropsWithRef<'form'>, 'style' | 'onSubmit' | 'onError' | 'title'> {
33
+ labels: SignInFormLabels;
34
+ /** Fires with the validated credentials — the host app calls the API. */
35
+ onSubmit: (values: SignInFormValues) => void;
36
+ /** "Forgot?" link handler (navigates to the forgot-password screen). */
37
+ onForgotPassword?: (() => void) | undefined;
38
+ /**
39
+ * Server-side failure banner slot (e.g. "Invalid email or password").
40
+ * Rendered as a danger `Alert` with `role="alert"`.
41
+ */
42
+ error?: ReactNode;
43
+ /** Request in flight: submit shows a spinner, all fields disable. */
44
+ loading?: boolean | undefined;
45
+ /** SSO buttons slot rendered above the fields with an `or` divider. */
46
+ sso?: ReactNode;
47
+ /** Slot under the submit button ("New to Adminium? Create an account"). */
48
+ footer?: ReactNode;
49
+ defaultEmail?: string | undefined;
50
+ /** Initial "Keep me signed in" state. Default false (unchecked). */
51
+ defaultRemember?: boolean | undefined;
52
+ }
53
+ /**
54
+ * SignInForm — email + password screen per designs/Login.dc.html. Controlled
55
+ * composition: zero fetching; the host app owns the request and feeds back
56
+ * `error`/`loading`.
57
+ *
58
+ * Endpoint contract (apps/server/src/routes/auth):
59
+ * `POST /api/v1/auth/login` with `{ email, password }` →
60
+ * - `200 { data: { user } }` — session cookie set, navigate into the app;
61
+ * - `202 { data: { twoFactorRequired: true, challengeToken } }` — render
62
+ * `TwoFactorForm` and present the token at `/api/v1/auth/2fa/verify`;
63
+ * - `401 INVALID_CREDENTIALS` / `429` (5/min bucket) — pass a message via
64
+ * `error`.
65
+ */
66
+ export declare function SignInForm({ labels, onSubmit, onForgotPassword, error, loading, sso, footer, defaultEmail, defaultRemember, className, ...props }: SignInFormProps): import("react").JSX.Element;
67
+ //# sourceMappingURL=SignInForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignInForm.d.ts","sourceRoot":"","sources":["../../../src/components/auth-screens/SignInForm.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAa,SAAS,EAAE,MAAM,OAAO,CAAC;AAWzE,gDAAgD;AAChD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,KAAK,EAAE,SAAS,CAAC;IACjB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,eACf,SAAQ,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IACvF,MAAM,EAAE,gBAAgB,CAAC;IACzB,yEAAyE;IACzE,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC7C,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IAC5C;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,qEAAqE;IACrE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,uEAAuE;IACvE,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,oEAAoE;IACpE,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACvC;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,KAAK,EACL,OAAe,EACf,GAAG,EACH,MAAM,EACN,YAAY,EACZ,eAAuB,EACvB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,eAAe,+BAgHjB"}
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Eye, EyeOff, Lock, Mail } from 'lucide-react';
3
+ import { useId, useState } from 'react';
4
+ import { cn } from '../../lib/cn.js';
5
+ import { Alert } from '../alert/index.js';
6
+ import { Button } from '../button/index.js';
7
+ import { Checkbox } from '../checkbox/index.js';
8
+ import { Divider } from '../divider/index.js';
9
+ import { FormField } from '../form-field/index.js';
10
+ import { IconButton } from '../icon-button/index.js';
11
+ import { InputGroup } from '../input-group/index.js';
12
+ const looksLikeEmail = (value) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
13
+ /**
14
+ * SignInForm — email + password screen per designs/Login.dc.html. Controlled
15
+ * composition: zero fetching; the host app owns the request and feeds back
16
+ * `error`/`loading`.
17
+ *
18
+ * Endpoint contract (apps/server/src/routes/auth):
19
+ * `POST /api/v1/auth/login` with `{ email, password }` →
20
+ * - `200 { data: { user } }` — session cookie set, navigate into the app;
21
+ * - `202 { data: { twoFactorRequired: true, challengeToken } }` — render
22
+ * `TwoFactorForm` and present the token at `/api/v1/auth/2fa/verify`;
23
+ * - `401 INVALID_CREDENTIALS` / `429` (5/min bucket) — pass a message via
24
+ * `error`.
25
+ */
26
+ export function SignInForm({ labels, onSubmit, onForgotPassword, error, loading = false, sso, footer, defaultEmail, defaultRemember = false, className, ...props }) {
27
+ const [email, setEmail] = useState(defaultEmail ?? '');
28
+ const [password, setPassword] = useState('');
29
+ const [remember, setRemember] = useState(defaultRemember);
30
+ const [reveal, setReveal] = useState(false);
31
+ const [fieldErrors, setFieldErrors] = useState({});
32
+ const rememberId = useId();
33
+ const handleSubmit = (event) => {
34
+ event.preventDefault();
35
+ const nextErrors = {};
36
+ if (!looksLikeEmail(email.trim()))
37
+ nextErrors.email = labels.emailInvalid;
38
+ if (password.length === 0)
39
+ nextErrors.password = labels.passwordRequired;
40
+ setFieldErrors(nextErrors);
41
+ if (nextErrors.email !== undefined || nextErrors.password !== undefined)
42
+ return;
43
+ onSubmit({ email: email.trim(), password, remember });
44
+ };
45
+ return (_jsxs("form", { noValidate: true, "data-part": "sign-in-form", className: cn('flex w-full flex-col', className), onSubmit: handleSubmit, ...props, children: [_jsx("h1", { className: "text-[23px] font-extrabold tracking-[-0.02em] text-fg", children: labels.title }), labels.subtitle === undefined ? null : (_jsx("p", { className: "mt-1.5 text-[13.5px] text-fg-muted", children: labels.subtitle })), sso === undefined ? null : (_jsxs(_Fragment, { children: [_jsx("div", { className: "mt-6 flex flex-col gap-2.5", children: sso }), _jsx(Divider, { label: labels.dividerLabel, className: "my-5" })] })), error === undefined || error === null ? null : (_jsx(Alert, { tone: "danger", role: "alert", title: error, className: sso === undefined ? 'mt-6' : '' })), _jsxs("div", { className: cn('flex flex-col gap-4', sso === undefined && (error === undefined || error === null) ? 'mt-6' : 'mt-4'), children: [_jsx(FormField, { label: labels.email, error: fieldErrors.email, children: _jsx(InputGroup, { type: "email", name: "email", autoComplete: "email", iconLeading: _jsx(Mail, {}), value: email, disabled: loading, onChange: (event) => setEmail(event.target.value) }) }), _jsx(FormField, { label: labels.password, error: fieldErrors.password, tag: onForgotPassword === undefined ? undefined : (_jsx(Button, { variant: "link", className: "text-[12px] font-bold", onClick: onForgotPassword, children: labels.forgot })), children: _jsx(InputGroup, { type: reveal ? 'text' : 'password', name: "password", autoComplete: "current-password", iconLeading: _jsx(Lock, {}), value: password, disabled: loading, onChange: (event) => setPassword(event.target.value), trailing: _jsx(IconButton, { size: "sm", label: reveal ? labels.hidePassword : labels.showPassword, "aria-pressed": reveal, onClick: () => setReveal((current) => !current), className: "text-fg-subtle [&_svg]:size-4", children: reveal ? _jsx(EyeOff, {}) : _jsx(Eye, {}) }) }) }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Checkbox, { id: rememberId, checked: remember, disabled: loading, onCheckedChange: (state) => setRemember(state === true) }), _jsx("label", { htmlFor: rememberId, className: "cursor-pointer text-body-sm text-fg-muted", children: labels.remember })] }), _jsx(Button, { type: "submit", loading: loading, className: "w-full", children: labels.submit })] }), footer === undefined ? null : (_jsx("div", { "data-part": "sign-in-footer", className: "mt-5 text-center text-body-sm text-fg-muted", children: footer }))] }));
46
+ }
47
+ //# sourceMappingURL=SignInForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignInForm.js","sourceRoot":"","sources":["../../../src/components/auth-screens/SignInForm.tsx"],"names":[],"mappings":"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"}