@pyric/ui 0.1.0-alpha.10

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 (603) hide show
  1. package/LICENSE +216 -0
  2. package/README.md +79 -0
  3. package/dist/agents/ContextWindowUsage.d.ts +67 -0
  4. package/dist/agents/ContextWindowUsage.d.ts.map +1 -0
  5. package/dist/agents/ContextWindowUsage.js +115 -0
  6. package/dist/agents/ContextWindowUsage.js.map +1 -0
  7. package/dist/agents/EmptyState.d.ts +18 -0
  8. package/dist/agents/EmptyState.d.ts.map +1 -0
  9. package/dist/agents/EmptyState.js +11 -0
  10. package/dist/agents/EmptyState.js.map +1 -0
  11. package/dist/agents/Fold.d.ts +37 -0
  12. package/dist/agents/Fold.d.ts.map +1 -0
  13. package/dist/agents/Fold.js +18 -0
  14. package/dist/agents/Fold.js.map +1 -0
  15. package/dist/agents/Modal.d.ts +25 -0
  16. package/dist/agents/Modal.d.ts.map +1 -0
  17. package/dist/agents/Modal.js +28 -0
  18. package/dist/agents/Modal.js.map +1 -0
  19. package/dist/agents/PulsingDot.d.ts +21 -0
  20. package/dist/agents/PulsingDot.d.ts.map +1 -0
  21. package/dist/agents/PulsingDot.js +18 -0
  22. package/dist/agents/PulsingDot.js.map +1 -0
  23. package/dist/agents/index.d.ts +15 -0
  24. package/dist/agents/index.d.ts.map +1 -0
  25. package/dist/agents/index.js +15 -0
  26. package/dist/agents/index.js.map +1 -0
  27. package/dist/auth/authApi.d.ts +32 -0
  28. package/dist/auth/authApi.d.ts.map +1 -0
  29. package/dist/auth/authApi.js +27 -0
  30. package/dist/auth/authApi.js.map +1 -0
  31. package/dist/auth/claims.d.ts +27 -0
  32. package/dist/auth/claims.d.ts.map +1 -0
  33. package/dist/auth/claims.js +58 -0
  34. package/dist/auth/claims.js.map +1 -0
  35. package/dist/auth/components/AuthProviderToggles.d.ts +31 -0
  36. package/dist/auth/components/AuthProviderToggles.d.ts.map +1 -0
  37. package/dist/auth/components/AuthProviderToggles.js +48 -0
  38. package/dist/auth/components/AuthProviderToggles.js.map +1 -0
  39. package/dist/auth/components/AuthSignInHelper.d.ts +57 -0
  40. package/dist/auth/components/AuthSignInHelper.d.ts.map +1 -0
  41. package/dist/auth/components/AuthSignInHelper.js +69 -0
  42. package/dist/auth/components/AuthSignInHelper.js.map +1 -0
  43. package/dist/auth/components/AuthUserForm.d.ts +84 -0
  44. package/dist/auth/components/AuthUserForm.d.ts.map +1 -0
  45. package/dist/auth/components/AuthUserForm.js +89 -0
  46. package/dist/auth/components/AuthUserForm.js.map +1 -0
  47. package/dist/auth/components/AuthUserList.d.ts +62 -0
  48. package/dist/auth/components/AuthUserList.d.ts.map +1 -0
  49. package/dist/auth/components/AuthUserList.js +46 -0
  50. package/dist/auth/components/AuthUserList.js.map +1 -0
  51. package/dist/auth/components/ClaimsField.d.ts +22 -0
  52. package/dist/auth/components/ClaimsField.d.ts.map +1 -0
  53. package/dist/auth/components/ClaimsField.js +11 -0
  54. package/dist/auth/components/ClaimsField.js.map +1 -0
  55. package/dist/auth/components/confirmActions.d.ts +40 -0
  56. package/dist/auth/components/confirmActions.d.ts.map +1 -0
  57. package/dist/auth/components/confirmActions.js +49 -0
  58. package/dist/auth/components/confirmActions.js.map +1 -0
  59. package/dist/auth/controller.d.ts +73 -0
  60. package/dist/auth/controller.d.ts.map +1 -0
  61. package/dist/auth/controller.js +139 -0
  62. package/dist/auth/controller.js.map +1 -0
  63. package/dist/auth/hooks/index.d.ts +7 -0
  64. package/dist/auth/hooks/index.d.ts.map +1 -0
  65. package/dist/auth/hooks/index.js +7 -0
  66. package/dist/auth/hooks/index.js.map +1 -0
  67. package/dist/auth/hooks/useAuthFlowHelper.d.ts +30 -0
  68. package/dist/auth/hooks/useAuthFlowHelper.d.ts.map +1 -0
  69. package/dist/auth/hooks/useAuthFlowHelper.js +30 -0
  70. package/dist/auth/hooks/useAuthFlowHelper.js.map +1 -0
  71. package/dist/auth/hooks/useAuthProviderConfig.d.ts +37 -0
  72. package/dist/auth/hooks/useAuthProviderConfig.d.ts.map +1 -0
  73. package/dist/auth/hooks/useAuthProviderConfig.js +98 -0
  74. package/dist/auth/hooks/useAuthProviderConfig.js.map +1 -0
  75. package/dist/auth/hooks/useAuthUserEditor.d.ts +30 -0
  76. package/dist/auth/hooks/useAuthUserEditor.d.ts.map +1 -0
  77. package/dist/auth/hooks/useAuthUserEditor.js +27 -0
  78. package/dist/auth/hooks/useAuthUserEditor.js.map +1 -0
  79. package/dist/auth/hooks/useAuthUsers.d.ts +38 -0
  80. package/dist/auth/hooks/useAuthUsers.d.ts.map +1 -0
  81. package/dist/auth/hooks/useAuthUsers.js +111 -0
  82. package/dist/auth/hooks/useAuthUsers.js.map +1 -0
  83. package/dist/auth/index.d.ts +11 -0
  84. package/dist/auth/index.d.ts.map +1 -0
  85. package/dist/auth/index.js +13 -0
  86. package/dist/auth/index.js.map +1 -0
  87. package/dist/auth/providers.d.ts +11 -0
  88. package/dist/auth/providers.d.ts.map +1 -0
  89. package/dist/auth/providers.js +28 -0
  90. package/dist/auth/providers.js.map +1 -0
  91. package/dist/auth/reducers/userEditor.d.ts +55 -0
  92. package/dist/auth/reducers/userEditor.d.ts.map +1 -0
  93. package/dist/auth/reducers/userEditor.js +136 -0
  94. package/dist/auth/reducers/userEditor.js.map +1 -0
  95. package/dist/events/components/ActivityActionItems.d.ts +45 -0
  96. package/dist/events/components/ActivityActionItems.d.ts.map +1 -0
  97. package/dist/events/components/ActivityActionItems.js +68 -0
  98. package/dist/events/components/ActivityActionItems.js.map +1 -0
  99. package/dist/events/components/ActivityGrid.d.ts +65 -0
  100. package/dist/events/components/ActivityGrid.d.ts.map +1 -0
  101. package/dist/events/components/ActivityGrid.js +61 -0
  102. package/dist/events/components/ActivityGrid.js.map +1 -0
  103. package/dist/events/components/ActivityGridRow.d.ts +31 -0
  104. package/dist/events/components/ActivityGridRow.d.ts.map +1 -0
  105. package/dist/events/components/ActivityGridRow.js +23 -0
  106. package/dist/events/components/ActivityGridRow.js.map +1 -0
  107. package/dist/events/components/ProposedChangeDiff.d.ts +46 -0
  108. package/dist/events/components/ProposedChangeDiff.d.ts.map +1 -0
  109. package/dist/events/components/ProposedChangeDiff.js +60 -0
  110. package/dist/events/components/ProposedChangeDiff.js.map +1 -0
  111. package/dist/events/components/format.d.ts +11 -0
  112. package/dist/events/components/format.d.ts.map +1 -0
  113. package/dist/events/components/format.js +26 -0
  114. package/dist/events/components/format.js.map +1 -0
  115. package/dist/events/components/index.d.ts +6 -0
  116. package/dist/events/components/index.d.ts.map +1 -0
  117. package/dist/events/components/index.js +6 -0
  118. package/dist/events/components/index.js.map +1 -0
  119. package/dist/events/digest.d.ts +167 -0
  120. package/dist/events/digest.d.ts.map +1 -0
  121. package/dist/events/digest.js +426 -0
  122. package/dist/events/digest.js.map +1 -0
  123. package/dist/events/hooks/index.d.ts +3 -0
  124. package/dist/events/hooks/index.d.ts.map +1 -0
  125. package/dist/events/hooks/index.js +3 -0
  126. package/dist/events/hooks/index.js.map +1 -0
  127. package/dist/events/hooks/useActivityDigest.d.ts +27 -0
  128. package/dist/events/hooks/useActivityDigest.d.ts.map +1 -0
  129. package/dist/events/hooks/useActivityDigest.js +18 -0
  130. package/dist/events/hooks/useActivityDigest.js.map +1 -0
  131. package/dist/events/hooks/useActivityStream.d.ts +44 -0
  132. package/dist/events/hooks/useActivityStream.d.ts.map +1 -0
  133. package/dist/events/hooks/useActivityStream.js +38 -0
  134. package/dist/events/hooks/useActivityStream.js.map +1 -0
  135. package/dist/events/index.d.ts +15 -0
  136. package/dist/events/index.d.ts.map +1 -0
  137. package/dist/events/index.js +14 -0
  138. package/dist/events/index.js.map +1 -0
  139. package/dist/events/types.d.ts +160 -0
  140. package/dist/events/types.d.ts.map +1 -0
  141. package/dist/events/types.js +21 -0
  142. package/dist/events/types.js.map +1 -0
  143. package/dist/firestore/components/CollectionList.d.ts +22 -0
  144. package/dist/firestore/components/CollectionList.d.ts.map +1 -0
  145. package/dist/firestore/components/CollectionList.js +21 -0
  146. package/dist/firestore/components/CollectionList.js.map +1 -0
  147. package/dist/firestore/components/DeleteWithConfirm.d.ts +38 -0
  148. package/dist/firestore/components/DeleteWithConfirm.d.ts.map +1 -0
  149. package/dist/firestore/components/DeleteWithConfirm.js +33 -0
  150. package/dist/firestore/components/DeleteWithConfirm.js.map +1 -0
  151. package/dist/firestore/components/DocumentEditor.d.ts +47 -0
  152. package/dist/firestore/components/DocumentEditor.d.ts.map +1 -0
  153. package/dist/firestore/components/DocumentEditor.js +176 -0
  154. package/dist/firestore/components/DocumentEditor.js.map +1 -0
  155. package/dist/firestore/components/DocumentList.d.ts +63 -0
  156. package/dist/firestore/components/DocumentList.d.ts.map +1 -0
  157. package/dist/firestore/components/DocumentList.js +53 -0
  158. package/dist/firestore/components/DocumentList.js.map +1 -0
  159. package/dist/firestore/components/DocumentPreview.d.ts +68 -0
  160. package/dist/firestore/components/DocumentPreview.d.ts.map +1 -0
  161. package/dist/firestore/components/DocumentPreview.js +76 -0
  162. package/dist/firestore/components/DocumentPreview.js.map +1 -0
  163. package/dist/firestore/components/FieldRenderer.d.ts +17 -0
  164. package/dist/firestore/components/FieldRenderer.d.ts.map +1 -0
  165. package/dist/firestore/components/FieldRenderer.js +16 -0
  166. package/dist/firestore/components/FieldRenderer.js.map +1 -0
  167. package/dist/firestore/components/QueryBuilder.d.ts +25 -0
  168. package/dist/firestore/components/QueryBuilder.d.ts.map +1 -0
  169. package/dist/firestore/components/QueryBuilder.js +78 -0
  170. package/dist/firestore/components/QueryBuilder.js.map +1 -0
  171. package/dist/firestore/components/ReferencePicker.d.ts +33 -0
  172. package/dist/firestore/components/ReferencePicker.d.ts.map +1 -0
  173. package/dist/firestore/components/ReferencePicker.js +42 -0
  174. package/dist/firestore/components/ReferencePicker.js.map +1 -0
  175. package/dist/firestore/components/TreeEntry.d.ts +15 -0
  176. package/dist/firestore/components/TreeEntry.d.ts.map +1 -0
  177. package/dist/firestore/components/TreeEntry.js +23 -0
  178. package/dist/firestore/components/TreeEntry.js.map +1 -0
  179. package/dist/firestore/components/context.d.ts +18 -0
  180. package/dist/firestore/components/context.d.ts.map +1 -0
  181. package/dist/firestore/components/context.js +7 -0
  182. package/dist/firestore/components/context.js.map +1 -0
  183. package/dist/firestore/fieldEditors/array.d.ts +3 -0
  184. package/dist/firestore/fieldEditors/array.d.ts.map +1 -0
  185. package/dist/firestore/fieldEditors/array.js +16 -0
  186. package/dist/firestore/fieldEditors/array.js.map +1 -0
  187. package/dist/firestore/fieldEditors/boolean.d.ts +3 -0
  188. package/dist/firestore/fieldEditors/boolean.d.ts.map +1 -0
  189. package/dist/firestore/fieldEditors/boolean.js +13 -0
  190. package/dist/firestore/fieldEditors/boolean.js.map +1 -0
  191. package/dist/firestore/fieldEditors/bytes.d.ts +4 -0
  192. package/dist/firestore/fieldEditors/bytes.d.ts.map +1 -0
  193. package/dist/firestore/fieldEditors/bytes.js +31 -0
  194. package/dist/firestore/fieldEditors/bytes.js.map +1 -0
  195. package/dist/firestore/fieldEditors/geopoint.d.ts +4 -0
  196. package/dist/firestore/fieldEditors/geopoint.d.ts.map +1 -0
  197. package/dist/firestore/fieldEditors/geopoint.js +32 -0
  198. package/dist/firestore/fieldEditors/geopoint.js.map +1 -0
  199. package/dist/firestore/fieldEditors/map.d.ts +3 -0
  200. package/dist/firestore/fieldEditors/map.d.ts.map +1 -0
  201. package/dist/firestore/fieldEditors/map.js +19 -0
  202. package/dist/firestore/fieldEditors/map.js.map +1 -0
  203. package/dist/firestore/fieldEditors/null.d.ts +3 -0
  204. package/dist/firestore/fieldEditors/null.d.ts.map +1 -0
  205. package/dist/firestore/fieldEditors/null.js +17 -0
  206. package/dist/firestore/fieldEditors/null.js.map +1 -0
  207. package/dist/firestore/fieldEditors/number.d.ts +3 -0
  208. package/dist/firestore/fieldEditors/number.d.ts.map +1 -0
  209. package/dist/firestore/fieldEditors/number.js +24 -0
  210. package/dist/firestore/fieldEditors/number.js.map +1 -0
  211. package/dist/firestore/fieldEditors/reference.d.ts +4 -0
  212. package/dist/firestore/fieldEditors/reference.d.ts.map +1 -0
  213. package/dist/firestore/fieldEditors/reference.js +49 -0
  214. package/dist/firestore/fieldEditors/reference.js.map +1 -0
  215. package/dist/firestore/fieldEditors/registry.d.ts +16 -0
  216. package/dist/firestore/fieldEditors/registry.d.ts.map +1 -0
  217. package/dist/firestore/fieldEditors/registry.js +42 -0
  218. package/dist/firestore/fieldEditors/registry.js.map +1 -0
  219. package/dist/firestore/fieldEditors/string.d.ts +3 -0
  220. package/dist/firestore/fieldEditors/string.d.ts.map +1 -0
  221. package/dist/firestore/fieldEditors/string.js +13 -0
  222. package/dist/firestore/fieldEditors/string.js.map +1 -0
  223. package/dist/firestore/fieldEditors/timestamp.d.ts +4 -0
  224. package/dist/firestore/fieldEditors/timestamp.d.ts.map +1 -0
  225. package/dist/firestore/fieldEditors/timestamp.js +52 -0
  226. package/dist/firestore/fieldEditors/timestamp.js.map +1 -0
  227. package/dist/firestore/fieldEditors/types.d.ts +64 -0
  228. package/dist/firestore/fieldEditors/types.d.ts.map +1 -0
  229. package/dist/firestore/fieldEditors/types.js +2 -0
  230. package/dist/firestore/fieldEditors/types.js.map +1 -0
  231. package/dist/firestore/fieldEditors/vector.d.ts +29 -0
  232. package/dist/firestore/fieldEditors/vector.d.ts.map +1 -0
  233. package/dist/firestore/fieldEditors/vector.js +93 -0
  234. package/dist/firestore/fieldEditors/vector.js.map +1 -0
  235. package/dist/firestore/firestoreApi.d.ts +35 -0
  236. package/dist/firestore/firestoreApi.d.ts.map +1 -0
  237. package/dist/firestore/firestoreApi.js +29 -0
  238. package/dist/firestore/firestoreApi.js.map +1 -0
  239. package/dist/firestore/hooks/coerceError.d.ts +17 -0
  240. package/dist/firestore/hooks/coerceError.d.ts.map +1 -0
  241. package/dist/firestore/hooks/coerceError.js +41 -0
  242. package/dist/firestore/hooks/coerceError.js.map +1 -0
  243. package/dist/firestore/hooks/index.d.ts +10 -0
  244. package/dist/firestore/hooks/index.d.ts.map +1 -0
  245. package/dist/firestore/hooks/index.js +10 -0
  246. package/dist/firestore/hooks/index.js.map +1 -0
  247. package/dist/firestore/hooks/useCollectionList.d.ts +37 -0
  248. package/dist/firestore/hooks/useCollectionList.d.ts.map +1 -0
  249. package/dist/firestore/hooks/useCollectionList.js +51 -0
  250. package/dist/firestore/hooks/useCollectionList.js.map +1 -0
  251. package/dist/firestore/hooks/useDocumentEditor.d.ts +61 -0
  252. package/dist/firestore/hooks/useDocumentEditor.d.ts.map +1 -0
  253. package/dist/firestore/hooks/useDocumentEditor.js +71 -0
  254. package/dist/firestore/hooks/useDocumentEditor.js.map +1 -0
  255. package/dist/firestore/hooks/useDocumentList.d.ts +50 -0
  256. package/dist/firestore/hooks/useDocumentList.d.ts.map +1 -0
  257. package/dist/firestore/hooks/useDocumentList.js +162 -0
  258. package/dist/firestore/hooks/useDocumentList.js.map +1 -0
  259. package/dist/firestore/hooks/useDocumentSubcollections.d.ts +29 -0
  260. package/dist/firestore/hooks/useDocumentSubcollections.d.ts.map +1 -0
  261. package/dist/firestore/hooks/useDocumentSubcollections.js +48 -0
  262. package/dist/firestore/hooks/useDocumentSubcollections.js.map +1 -0
  263. package/dist/firestore/hooks/useFirestoreCollection.d.ts +14 -0
  264. package/dist/firestore/hooks/useFirestoreCollection.d.ts.map +1 -0
  265. package/dist/firestore/hooks/useFirestoreCollection.js +36 -0
  266. package/dist/firestore/hooks/useFirestoreCollection.js.map +1 -0
  267. package/dist/firestore/hooks/useFirestoreDoc.d.ts +17 -0
  268. package/dist/firestore/hooks/useFirestoreDoc.d.ts.map +1 -0
  269. package/dist/firestore/hooks/useFirestoreDoc.js +35 -0
  270. package/dist/firestore/hooks/useFirestoreDoc.js.map +1 -0
  271. package/dist/firestore/hooks/useQueryBuilder.d.ts +51 -0
  272. package/dist/firestore/hooks/useQueryBuilder.d.ts.map +1 -0
  273. package/dist/firestore/hooks/useQueryBuilder.js +110 -0
  274. package/dist/firestore/hooks/useQueryBuilder.js.map +1 -0
  275. package/dist/firestore/hooks/useRecursiveDelete.d.ts +40 -0
  276. package/dist/firestore/hooks/useRecursiveDelete.d.ts.map +1 -0
  277. package/dist/firestore/hooks/useRecursiveDelete.js +44 -0
  278. package/dist/firestore/hooks/useRecursiveDelete.js.map +1 -0
  279. package/dist/firestore/hooks/useReferencePicker.d.ts +70 -0
  280. package/dist/firestore/hooks/useReferencePicker.d.ts.map +1 -0
  281. package/dist/firestore/hooks/useReferencePicker.js +140 -0
  282. package/dist/firestore/hooks/useReferencePicker.js.map +1 -0
  283. package/dist/firestore/import/parseImport.d.ts +55 -0
  284. package/dist/firestore/import/parseImport.d.ts.map +1 -0
  285. package/dist/firestore/import/parseImport.js +101 -0
  286. package/dist/firestore/import/parseImport.js.map +1 -0
  287. package/dist/firestore/index.d.ts +21 -0
  288. package/dist/firestore/index.d.ts.map +1 -0
  289. package/dist/firestore/index.js +29 -0
  290. package/dist/firestore/index.js.map +1 -0
  291. package/dist/firestore/reducers/defaults.d.ts +10 -0
  292. package/dist/firestore/reducers/defaults.d.ts.map +1 -0
  293. package/dist/firestore/reducers/defaults.js +37 -0
  294. package/dist/firestore/reducers/defaults.js.map +1 -0
  295. package/dist/firestore/reducers/documentEditor.d.ts +23 -0
  296. package/dist/firestore/reducers/documentEditor.d.ts.map +1 -0
  297. package/dist/firestore/reducers/documentEditor.js +201 -0
  298. package/dist/firestore/reducers/documentEditor.js.map +1 -0
  299. package/dist/firestore/reducers/tree.d.ts +28 -0
  300. package/dist/firestore/reducers/tree.d.ts.map +1 -0
  301. package/dist/firestore/reducers/tree.js +129 -0
  302. package/dist/firestore/reducers/tree.js.map +1 -0
  303. package/dist/firestore/reducers/types.d.ts +115 -0
  304. package/dist/firestore/reducers/types.d.ts.map +1 -0
  305. package/dist/firestore/reducers/types.js +2 -0
  306. package/dist/firestore/reducers/types.js.map +1 -0
  307. package/dist/firestore/reducers/validation.d.ts +25 -0
  308. package/dist/firestore/reducers/validation.d.ts.map +1 -0
  309. package/dist/firestore/reducers/validation.js +121 -0
  310. package/dist/firestore/reducers/validation.js.map +1 -0
  311. package/dist/firestore/types.d.ts +77 -0
  312. package/dist/firestore/types.d.ts.map +1 -0
  313. package/dist/firestore/types.js +196 -0
  314. package/dist/firestore/types.js.map +1 -0
  315. package/dist/firestore/validation/ids.d.ts +23 -0
  316. package/dist/firestore/validation/ids.d.ts.map +1 -0
  317. package/dist/firestore/validation/ids.js +46 -0
  318. package/dist/firestore/validation/ids.js.map +1 -0
  319. package/dist/firestore/valueEquality.d.ts +4 -0
  320. package/dist/firestore/valueEquality.d.ts.map +1 -0
  321. package/dist/firestore/valueEquality.js +44 -0
  322. package/dist/firestore/valueEquality.js.map +1 -0
  323. package/dist/index.d.ts +2 -0
  324. package/dist/index.d.ts.map +1 -0
  325. package/dist/index.js +2 -0
  326. package/dist/index.js.map +1 -0
  327. package/dist/primitives/Badge.d.ts +28 -0
  328. package/dist/primitives/Badge.d.ts.map +1 -0
  329. package/dist/primitives/Badge.js +11 -0
  330. package/dist/primitives/Badge.js.map +1 -0
  331. package/dist/primitives/ConfirmDialog.d.ts +42 -0
  332. package/dist/primitives/ConfirmDialog.d.ts.map +1 -0
  333. package/dist/primitives/ConfirmDialog.js +61 -0
  334. package/dist/primitives/ConfirmDialog.js.map +1 -0
  335. package/dist/primitives/CopyButton.d.ts +28 -0
  336. package/dist/primitives/CopyButton.d.ts.map +1 -0
  337. package/dist/primitives/CopyButton.js +27 -0
  338. package/dist/primitives/CopyButton.js.map +1 -0
  339. package/dist/primitives/JsonView.d.ts +29 -0
  340. package/dist/primitives/JsonView.d.ts.map +1 -0
  341. package/dist/primitives/JsonView.js +56 -0
  342. package/dist/primitives/JsonView.js.map +1 -0
  343. package/dist/primitives/SegmentedControl.d.ts +37 -0
  344. package/dist/primitives/SegmentedControl.d.ts.map +1 -0
  345. package/dist/primitives/SegmentedControl.js +18 -0
  346. package/dist/primitives/SegmentedControl.js.map +1 -0
  347. package/dist/primitives/Toast.d.ts +48 -0
  348. package/dist/primitives/Toast.d.ts.map +1 -0
  349. package/dist/primitives/Toast.js +60 -0
  350. package/dist/primitives/Toast.js.map +1 -0
  351. package/dist/primitives/VirtualList.d.ts +37 -0
  352. package/dist/primitives/VirtualList.d.ts.map +1 -0
  353. package/dist/primitives/VirtualList.js +47 -0
  354. package/dist/primitives/VirtualList.js.map +1 -0
  355. package/dist/primitives/hooks/useContainerSize.d.ts +29 -0
  356. package/dist/primitives/hooks/useContainerSize.d.ts.map +1 -0
  357. package/dist/primitives/hooks/useContainerSize.js +45 -0
  358. package/dist/primitives/hooks/useContainerSize.js.map +1 -0
  359. package/dist/primitives/hooks/useUpdateHighlights.d.ts +18 -0
  360. package/dist/primitives/hooks/useUpdateHighlights.d.ts.map +1 -0
  361. package/dist/primitives/hooks/useUpdateHighlights.js +84 -0
  362. package/dist/primitives/hooks/useUpdateHighlights.js.map +1 -0
  363. package/dist/primitives/index.d.ts +11 -0
  364. package/dist/primitives/index.d.ts.map +1 -0
  365. package/dist/primitives/index.js +11 -0
  366. package/dist/primitives/index.js.map +1 -0
  367. package/dist/primitives/useConfirm.d.ts +34 -0
  368. package/dist/primitives/useConfirm.d.ts.map +1 -0
  369. package/dist/primitives/useConfirm.js +63 -0
  370. package/dist/primitives/useConfirm.js.map +1 -0
  371. package/dist/rtdb/components/RtdbPathBar.d.ts +31 -0
  372. package/dist/rtdb/components/RtdbPathBar.d.ts.map +1 -0
  373. package/dist/rtdb/components/RtdbPathBar.js +47 -0
  374. package/dist/rtdb/components/RtdbPathBar.js.map +1 -0
  375. package/dist/rtdb/components/RtdbTree.d.ts +38 -0
  376. package/dist/rtdb/components/RtdbTree.d.ts.map +1 -0
  377. package/dist/rtdb/components/RtdbTree.js +104 -0
  378. package/dist/rtdb/components/RtdbTree.js.map +1 -0
  379. package/dist/rtdb/editor.d.ts +25 -0
  380. package/dist/rtdb/editor.d.ts.map +1 -0
  381. package/dist/rtdb/editor.js +79 -0
  382. package/dist/rtdb/editor.js.map +1 -0
  383. package/dist/rtdb/hooks/useRtdbTree.d.ts +33 -0
  384. package/dist/rtdb/hooks/useRtdbTree.d.ts.map +1 -0
  385. package/dist/rtdb/hooks/useRtdbTree.js +67 -0
  386. package/dist/rtdb/hooks/useRtdbTree.js.map +1 -0
  387. package/dist/rtdb/index.d.ts +17 -0
  388. package/dist/rtdb/index.d.ts.map +1 -0
  389. package/dist/rtdb/index.js +21 -0
  390. package/dist/rtdb/index.js.map +1 -0
  391. package/dist/rtdb/pathInput.d.ts +28 -0
  392. package/dist/rtdb/pathInput.d.ts.map +1 -0
  393. package/dist/rtdb/pathInput.js +40 -0
  394. package/dist/rtdb/pathInput.js.map +1 -0
  395. package/dist/rtdb/reducers/tree.d.ts +86 -0
  396. package/dist/rtdb/reducers/tree.d.ts.map +1 -0
  397. package/dist/rtdb/reducers/tree.js +131 -0
  398. package/dist/rtdb/reducers/tree.js.map +1 -0
  399. package/dist/rtdb/rtdbApi.d.ts +20 -0
  400. package/dist/rtdb/rtdbApi.d.ts.map +1 -0
  401. package/dist/rtdb/rtdbApi.js +2 -0
  402. package/dist/rtdb/rtdbApi.js.map +1 -0
  403. package/dist/rtdb/values.d.ts +50 -0
  404. package/dist/rtdb/values.d.ts.map +1 -0
  405. package/dist/rtdb/values.js +186 -0
  406. package/dist/rtdb/values.js.map +1 -0
  407. package/dist/rules/components/DenialInspector.d.ts +18 -0
  408. package/dist/rules/components/DenialInspector.d.ts.map +1 -0
  409. package/dist/rules/components/DenialInspector.js +58 -0
  410. package/dist/rules/components/DenialInspector.js.map +1 -0
  411. package/dist/rules/components/format.d.ts +56 -0
  412. package/dist/rules/components/format.d.ts.map +1 -0
  413. package/dist/rules/components/format.js +137 -0
  414. package/dist/rules/components/format.js.map +1 -0
  415. package/dist/rules/components/index.d.ts +4 -0
  416. package/dist/rules/components/index.d.ts.map +1 -0
  417. package/dist/rules/components/index.js +4 -0
  418. package/dist/rules/components/index.js.map +1 -0
  419. package/dist/rules/components/scope.d.ts +10 -0
  420. package/dist/rules/components/scope.d.ts.map +1 -0
  421. package/dist/rules/components/scope.js +72 -0
  422. package/dist/rules/components/scope.js.map +1 -0
  423. package/dist/rules/hooks/index.d.ts +2 -0
  424. package/dist/rules/hooks/index.d.ts.map +1 -0
  425. package/dist/rules/hooks/index.js +2 -0
  426. package/dist/rules/hooks/index.js.map +1 -0
  427. package/dist/rules/hooks/useDenialTrace.d.ts +51 -0
  428. package/dist/rules/hooks/useDenialTrace.d.ts.map +1 -0
  429. package/dist/rules/hooks/useDenialTrace.js +58 -0
  430. package/dist/rules/hooks/useDenialTrace.js.map +1 -0
  431. package/dist/rules/index.d.ts +14 -0
  432. package/dist/rules/index.d.ts.map +1 -0
  433. package/dist/rules/index.js +13 -0
  434. package/dist/rules/index.js.map +1 -0
  435. package/dist/rules/types.d.ts +75 -0
  436. package/dist/rules/types.d.ts.map +1 -0
  437. package/dist/rules/types.js +2 -0
  438. package/dist/rules/types.js.map +1 -0
  439. package/dist/storage/collisionRename.d.ts +73 -0
  440. package/dist/storage/collisionRename.d.ts.map +1 -0
  441. package/dist/storage/collisionRename.js +113 -0
  442. package/dist/storage/collisionRename.js.map +1 -0
  443. package/dist/storage/components/DeleteSelectionWithConfirm.d.ts +66 -0
  444. package/dist/storage/components/DeleteSelectionWithConfirm.d.ts.map +1 -0
  445. package/dist/storage/components/DeleteSelectionWithConfirm.js +82 -0
  446. package/dist/storage/components/DeleteSelectionWithConfirm.js.map +1 -0
  447. package/dist/storage/components/ObjectBrowser.d.ts +78 -0
  448. package/dist/storage/components/ObjectBrowser.d.ts.map +1 -0
  449. package/dist/storage/components/ObjectBrowser.js +60 -0
  450. package/dist/storage/components/ObjectBrowser.js.map +1 -0
  451. package/dist/storage/components/ObjectInspector.d.ts +43 -0
  452. package/dist/storage/components/ObjectInspector.d.ts.map +1 -0
  453. package/dist/storage/components/ObjectInspector.js +92 -0
  454. package/dist/storage/components/ObjectInspector.js.map +1 -0
  455. package/dist/storage/components/PathBreadcrumb.d.ts +30 -0
  456. package/dist/storage/components/PathBreadcrumb.d.ts.map +1 -0
  457. package/dist/storage/components/PathBreadcrumb.js +26 -0
  458. package/dist/storage/components/PathBreadcrumb.js.map +1 -0
  459. package/dist/storage/components/UploadDropzone.d.ts +50 -0
  460. package/dist/storage/components/UploadDropzone.d.ts.map +1 -0
  461. package/dist/storage/components/UploadDropzone.js +109 -0
  462. package/dist/storage/components/UploadDropzone.js.map +1 -0
  463. package/dist/storage/folderPlaceholder.d.ts +20 -0
  464. package/dist/storage/folderPlaceholder.d.ts.map +1 -0
  465. package/dist/storage/folderPlaceholder.js +34 -0
  466. package/dist/storage/folderPlaceholder.js.map +1 -0
  467. package/dist/storage/hooks/index.d.ts +9 -0
  468. package/dist/storage/hooks/index.d.ts.map +1 -0
  469. package/dist/storage/hooks/index.js +9 -0
  470. package/dist/storage/hooks/index.js.map +1 -0
  471. package/dist/storage/hooks/useMetadataEditor.d.ts +114 -0
  472. package/dist/storage/hooks/useMetadataEditor.d.ts.map +1 -0
  473. package/dist/storage/hooks/useMetadataEditor.js +193 -0
  474. package/dist/storage/hooks/useMetadataEditor.js.map +1 -0
  475. package/dist/storage/hooks/useObjectUpload.d.ts +105 -0
  476. package/dist/storage/hooks/useObjectUpload.d.ts.map +1 -0
  477. package/dist/storage/hooks/useObjectUpload.js +134 -0
  478. package/dist/storage/hooks/useObjectUpload.js.map +1 -0
  479. package/dist/storage/hooks/usePathState.d.ts +43 -0
  480. package/dist/storage/hooks/usePathState.d.ts.map +1 -0
  481. package/dist/storage/hooks/usePathState.js +42 -0
  482. package/dist/storage/hooks/usePathState.js.map +1 -0
  483. package/dist/storage/hooks/useStorageDelete.d.ts +74 -0
  484. package/dist/storage/hooks/useStorageDelete.d.ts.map +1 -0
  485. package/dist/storage/hooks/useStorageDelete.js +120 -0
  486. package/dist/storage/hooks/useStorageDelete.js.map +1 -0
  487. package/dist/storage/hooks/useStorageList.d.ts +72 -0
  488. package/dist/storage/hooks/useStorageList.d.ts.map +1 -0
  489. package/dist/storage/hooks/useStorageList.js +164 -0
  490. package/dist/storage/hooks/useStorageList.js.map +1 -0
  491. package/dist/storage/hooks/useStorageObject.d.ts +33 -0
  492. package/dist/storage/hooks/useStorageObject.d.ts.map +1 -0
  493. package/dist/storage/hooks/useStorageObject.js +114 -0
  494. package/dist/storage/hooks/useStorageObject.js.map +1 -0
  495. package/dist/storage/hooks/useStorageRulesGate.d.ts +116 -0
  496. package/dist/storage/hooks/useStorageRulesGate.d.ts.map +1 -0
  497. package/dist/storage/hooks/useStorageRulesGate.js +150 -0
  498. package/dist/storage/hooks/useStorageRulesGate.js.map +1 -0
  499. package/dist/storage/hooks/useStorageSelection.d.ts +32 -0
  500. package/dist/storage/hooks/useStorageSelection.d.ts.map +1 -0
  501. package/dist/storage/hooks/useStorageSelection.js +55 -0
  502. package/dist/storage/hooks/useStorageSelection.js.map +1 -0
  503. package/dist/storage/index.d.ts +11 -0
  504. package/dist/storage/index.d.ts.map +1 -0
  505. package/dist/storage/index.js +17 -0
  506. package/dist/storage/index.js.map +1 -0
  507. package/dist/storage/pendingPrefixes.d.ts +77 -0
  508. package/dist/storage/pendingPrefixes.d.ts.map +1 -0
  509. package/dist/storage/pendingPrefixes.js +104 -0
  510. package/dist/storage/pendingPrefixes.js.map +1 -0
  511. package/dist/storage/previews.d.ts +51 -0
  512. package/dist/storage/previews.d.ts.map +1 -0
  513. package/dist/storage/previews.js +73 -0
  514. package/dist/storage/previews.js.map +1 -0
  515. package/dist/storage/storageApi.d.ts +30 -0
  516. package/dist/storage/storageApi.d.ts.map +1 -0
  517. package/dist/storage/storageApi.js +20 -0
  518. package/dist/storage/storageApi.js.map +1 -0
  519. package/dist/traffic/components/RuleHeatmap.d.ts +34 -0
  520. package/dist/traffic/components/RuleHeatmap.d.ts.map +1 -0
  521. package/dist/traffic/components/RuleHeatmap.js +40 -0
  522. package/dist/traffic/components/RuleHeatmap.js.map +1 -0
  523. package/dist/traffic/components/TrafficDetail.d.ts +33 -0
  524. package/dist/traffic/components/TrafficDetail.d.ts.map +1 -0
  525. package/dist/traffic/components/TrafficDetail.js +28 -0
  526. package/dist/traffic/components/TrafficDetail.js.map +1 -0
  527. package/dist/traffic/components/TrafficGroupRow.d.ts +28 -0
  528. package/dist/traffic/components/TrafficGroupRow.d.ts.map +1 -0
  529. package/dist/traffic/components/TrafficGroupRow.js +25 -0
  530. package/dist/traffic/components/TrafficGroupRow.js.map +1 -0
  531. package/dist/traffic/components/TrafficLineChart.d.ts +37 -0
  532. package/dist/traffic/components/TrafficLineChart.d.ts.map +1 -0
  533. package/dist/traffic/components/TrafficLineChart.js +49 -0
  534. package/dist/traffic/components/TrafficLineChart.js.map +1 -0
  535. package/dist/traffic/components/TrafficLog.d.ts +52 -0
  536. package/dist/traffic/components/TrafficLog.d.ts.map +1 -0
  537. package/dist/traffic/components/TrafficLog.js +34 -0
  538. package/dist/traffic/components/TrafficLog.js.map +1 -0
  539. package/dist/traffic/components/TrafficMetricCards.d.ts +26 -0
  540. package/dist/traffic/components/TrafficMetricCards.d.ts.map +1 -0
  541. package/dist/traffic/components/TrafficMetricCards.js +24 -0
  542. package/dist/traffic/components/TrafficMetricCards.js.map +1 -0
  543. package/dist/traffic/components/TrafficRow.d.ts +40 -0
  544. package/dist/traffic/components/TrafficRow.d.ts.map +1 -0
  545. package/dist/traffic/components/TrafficRow.js +27 -0
  546. package/dist/traffic/components/TrafficRow.js.map +1 -0
  547. package/dist/traffic/components/TrafficStats.d.ts +18 -0
  548. package/dist/traffic/components/TrafficStats.d.ts.map +1 -0
  549. package/dist/traffic/components/TrafficStats.js +19 -0
  550. package/dist/traffic/components/TrafficStats.js.map +1 -0
  551. package/dist/traffic/components/TrafficTimeline.d.ts +88 -0
  552. package/dist/traffic/components/TrafficTimeline.d.ts.map +1 -0
  553. package/dist/traffic/components/TrafficTimeline.js +86 -0
  554. package/dist/traffic/components/TrafficTimeline.js.map +1 -0
  555. package/dist/traffic/components/format.d.ts +13 -0
  556. package/dist/traffic/components/format.d.ts.map +1 -0
  557. package/dist/traffic/components/format.js +24 -0
  558. package/dist/traffic/components/format.js.map +1 -0
  559. package/dist/traffic/components/index.d.ts +11 -0
  560. package/dist/traffic/components/index.d.ts.map +1 -0
  561. package/dist/traffic/components/index.js +11 -0
  562. package/dist/traffic/components/index.js.map +1 -0
  563. package/dist/traffic/hooks/index.d.ts +8 -0
  564. package/dist/traffic/hooks/index.d.ts.map +1 -0
  565. package/dist/traffic/hooks/index.js +8 -0
  566. package/dist/traffic/hooks/index.js.map +1 -0
  567. package/dist/traffic/hooks/useRuleHeatmap.d.ts +33 -0
  568. package/dist/traffic/hooks/useRuleHeatmap.d.ts.map +1 -0
  569. package/dist/traffic/hooks/useRuleHeatmap.js +54 -0
  570. package/dist/traffic/hooks/useRuleHeatmap.js.map +1 -0
  571. package/dist/traffic/hooks/useTrafficBuckets.d.ts +71 -0
  572. package/dist/traffic/hooks/useTrafficBuckets.d.ts.map +1 -0
  573. package/dist/traffic/hooks/useTrafficBuckets.js +74 -0
  574. package/dist/traffic/hooks/useTrafficBuckets.js.map +1 -0
  575. package/dist/traffic/hooks/useTrafficFilter.d.ts +40 -0
  576. package/dist/traffic/hooks/useTrafficFilter.d.ts.map +1 -0
  577. package/dist/traffic/hooks/useTrafficFilter.js +33 -0
  578. package/dist/traffic/hooks/useTrafficFilter.js.map +1 -0
  579. package/dist/traffic/hooks/useTrafficGroups.d.ts +47 -0
  580. package/dist/traffic/hooks/useTrafficGroups.d.ts.map +1 -0
  581. package/dist/traffic/hooks/useTrafficGroups.js +73 -0
  582. package/dist/traffic/hooks/useTrafficGroups.js.map +1 -0
  583. package/dist/traffic/hooks/useTrafficMetrics.d.ts +66 -0
  584. package/dist/traffic/hooks/useTrafficMetrics.d.ts.map +1 -0
  585. package/dist/traffic/hooks/useTrafficMetrics.js +156 -0
  586. package/dist/traffic/hooks/useTrafficMetrics.js.map +1 -0
  587. package/dist/traffic/hooks/useTrafficMonitor.d.ts +56 -0
  588. package/dist/traffic/hooks/useTrafficMonitor.d.ts.map +1 -0
  589. package/dist/traffic/hooks/useTrafficMonitor.js +58 -0
  590. package/dist/traffic/hooks/useTrafficMonitor.js.map +1 -0
  591. package/dist/traffic/hooks/useTrafficStats.d.ts +32 -0
  592. package/dist/traffic/hooks/useTrafficStats.d.ts.map +1 -0
  593. package/dist/traffic/hooks/useTrafficStats.js +45 -0
  594. package/dist/traffic/hooks/useTrafficStats.js.map +1 -0
  595. package/dist/traffic/index.d.ts +4 -0
  596. package/dist/traffic/index.d.ts.map +1 -0
  597. package/dist/traffic/index.js +3 -0
  598. package/dist/traffic/index.js.map +1 -0
  599. package/dist/traffic/types.d.ts +72 -0
  600. package/dist/traffic/types.d.ts.map +1 -0
  601. package/dist/traffic/types.js +10 -0
  602. package/dist/traffic/types.js.map +1 -0
  603. package/package.json +127 -0
@@ -0,0 +1,84 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { AuthUserRecord, CreateUserRequest, UpdateUserRequest } from 'pyric/auth';
3
+ /** What `onSubmit` receives — discriminated on the form's mode. */
4
+ export type AuthUserFormSubmit = {
5
+ mode: 'create';
6
+ request: CreateUserRequest;
7
+ } | {
8
+ mode: 'edit';
9
+ uid: string;
10
+ request: UpdateUserRequest;
11
+ };
12
+ /** Field names the {@link AuthUserFormProps.renderField} slot receives,
13
+ * in render order. Claims is NOT a slot field — it stays the standalone
14
+ * `<ClaimsField>` (override it by composing `useAuthUserEditor`). */
15
+ export type AuthUserFormFieldName = 'email' | 'password' | 'display-name' | 'phone-number' | 'photo-url' | 'providers' | 'email-verified' | 'disabled';
16
+ /** What the {@link AuthUserFormProps.renderField} slot receives per field. */
17
+ export interface AuthUserFormField {
18
+ name: AuthUserFormFieldName;
19
+ /** The visible label text the default rendering uses. */
20
+ label: string;
21
+ /** The wired, controlled input element (carries `data-pyric-field`).
22
+ * Place it anywhere; state/validation stay connected. */
23
+ input: ReactNode;
24
+ /** Current validation message for this field, or null. */
25
+ error: string | null;
26
+ /** `'text' | 'checkbox' | 'group'` — lets one slot impl branch on
27
+ * layout (`group` = a multi-control block, e.g. the provider
28
+ * checklist; create mode only). */
29
+ kind: 'text' | 'checkbox' | 'group';
30
+ /** The default rendering (label wrapper + label text + input + error).
31
+ * Call it to keep the stock layout for fields you don't customize. */
32
+ defaultRender: () => ReactNode;
33
+ }
34
+ export interface AuthUserFormProps {
35
+ /** Existing record → edit mode (delta payloads); omit → create mode. */
36
+ initial?: AuthUserRecord;
37
+ /** Receives the validated payload. Wire `create` to
38
+ * `useAuthUsers().createUser` and `edit` to `updateUser`. */
39
+ onSubmit: (submit: AuthUserFormSubmit) => void;
40
+ onCancel?: () => void;
41
+ submitLabel?: string;
42
+ cancelLabel?: string;
43
+ /** Extra content rendered before the action row (e.g. an error from a
44
+ * failed `createUser` call). */
45
+ children?: ReactNode;
46
+ className?: string;
47
+ /** Per-field layout override. Called for each field (see
48
+ * {@link AuthUserFormFieldName} order); return your own markup around
49
+ * `field.input`, or `field.defaultRender()` to keep the stock label
50
+ * wrapper for that field. Omit the prop for the default layout. */
51
+ renderField?: (field: AuthUserFormField) => ReactNode;
52
+ }
53
+ /**
54
+ * Headless add/edit-user form over `useAuthUserEditor` — the emulator
55
+ * UI's user dialog fields (email, password, display name, phone, photo
56
+ * URL, verified/disabled toggles, custom claims) with its validation
57
+ * messages. Zero CSS; structure addressable via `data-pyric-*`:
58
+ *
59
+ * - root `form[data-pyric-ui="auth-user-form"]` with `data-pyric-mode`,
60
+ * `data-pyric-is-dirty`, `data-pyric-is-valid` state attrs
61
+ * - every field (text inputs AND checkboxes) is wrapped in a
62
+ * `label[data-pyric-field-label="<name>"]` carrying a visible
63
+ * `span[data-pyric-label-text]` — labeled grid layouts are pure CSS
64
+ * (`display: grid` on the wrappers); label-less designs hide
65
+ * `[data-pyric-label-text]` and lean on the placeholders
66
+ * - inputs `[data-pyric-field="email" | "password" | "display-name" |
67
+ * "phone-number" | "photo-url" | "email-verified" | "disabled"]`
68
+ * - CREATE mode only: a "Sign-in providers" group
69
+ * (`fieldset[data-pyric-field-label="providers"]` wrapping
70
+ * `[data-pyric-provider-checklist]`) — one checkbox per federated
71
+ * provider the sandbox supports (`FEDERATED_PROVIDER_IDS` from
72
+ * `pyric/auth`; multiple selectable, entries land on
73
+ * `CreateUserRequest.providerUserInfo`)
74
+ * - claims via the standalone `<ClaimsField>`
75
+ * - per-field messages `[data-pyric-field-error="email" | "password"]`
76
+ * render INSIDE the field's label wrapper, after the input
77
+ * - `button[data-pyric-cancel]` / `button[data-pyric-submit]` (submit is
78
+ * disabled while invalid, or pristine in edit mode)
79
+ *
80
+ * Submit emits payloads only — no sandbox calls — so the same form works
81
+ * for create and edit and the consumer owns error handling.
82
+ */
83
+ export declare function AuthUserForm({ initial, onSubmit, onCancel, submitLabel, cancelLabel, children, className, renderField, }: AuthUserFormProps): import("react").JSX.Element;
84
+ //# sourceMappingURL=AuthUserForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthUserForm.d.ts","sourceRoot":"","sources":["../../../src/auth/components/AuthUserForm.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,OAAO,CAAC;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAsCvF,mEAAmE;AACnE,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAE9D;;sEAEsE;AACtE,MAAM,MAAM,qBAAqB,GAC7B,OAAO,GACP,UAAU,GACV,cAAc,GACd,cAAc,GACd,WAAW,GACX,WAAW,GACX,gBAAgB,GAChB,UAAU,CAAC;AAEf,8EAA8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd;8DAC0D;IAC1D,KAAK,EAAE,SAAS,CAAC;IACjB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;wCAEoC;IACpC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IACpC;2EACuE;IACvE,aAAa,EAAE,MAAM,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,wEAAwE;IACxE,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB;kEAC8D;IAC9D,QAAQ,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;qCACiC;IACjC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;wEAGoE;IACpE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,SAAS,CAAC;CACvD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,WAAoB,EACpB,WAAsB,EACtB,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,EAAE,iBAAiB,+BA8LnB"}
@@ -0,0 +1,89 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Fragment } from 'react';
3
+ import { FEDERATED_PROVIDER_IDS } from 'pyric/auth';
4
+ import { useAuthUserEditor } from '../hooks/useAuthUserEditor.js';
5
+ import { providerLabel } from '../providers.js';
6
+ import { ClaimsField } from './ClaimsField.js';
7
+ /** Create-mode provider multi-select: one checkbox per federated provider
8
+ * id the sandbox supports (the canonical `FEDERATED_PROVIDER_IDS` set from
9
+ * `pyric/auth` — derived from the shipped provider classes, not a UI-side
10
+ * copy). A user can link one or several. Headless: style
11
+ * `[data-pyric-provider-checklist]` / `[data-pyric-provider-option]`. */
12
+ function ProviderChecklist({ selected, onChange, }) {
13
+ return (_jsx("div", { "data-pyric-provider-checklist": true, children: FEDERATED_PROVIDER_IDS.map((id) => (_jsxs("label", { "data-pyric-provider-option": id, children: [_jsx("input", { type: "checkbox", checked: selected.includes(id), onChange: (e) => onChange(e.target.checked ? [...selected, id] : selected.filter((p) => p !== id)) }), _jsx("span", { "data-pyric-provider-option-label": true, children: providerLabel(id) }), _jsx("span", { "data-pyric-provider-option-id": true, children: id })] }, id))) }));
14
+ }
15
+ /**
16
+ * Headless add/edit-user form over `useAuthUserEditor` — the emulator
17
+ * UI's user dialog fields (email, password, display name, phone, photo
18
+ * URL, verified/disabled toggles, custom claims) with its validation
19
+ * messages. Zero CSS; structure addressable via `data-pyric-*`:
20
+ *
21
+ * - root `form[data-pyric-ui="auth-user-form"]` with `data-pyric-mode`,
22
+ * `data-pyric-is-dirty`, `data-pyric-is-valid` state attrs
23
+ * - every field (text inputs AND checkboxes) is wrapped in a
24
+ * `label[data-pyric-field-label="<name>"]` carrying a visible
25
+ * `span[data-pyric-label-text]` — labeled grid layouts are pure CSS
26
+ * (`display: grid` on the wrappers); label-less designs hide
27
+ * `[data-pyric-label-text]` and lean on the placeholders
28
+ * - inputs `[data-pyric-field="email" | "password" | "display-name" |
29
+ * "phone-number" | "photo-url" | "email-verified" | "disabled"]`
30
+ * - CREATE mode only: a "Sign-in providers" group
31
+ * (`fieldset[data-pyric-field-label="providers"]` wrapping
32
+ * `[data-pyric-provider-checklist]`) — one checkbox per federated
33
+ * provider the sandbox supports (`FEDERATED_PROVIDER_IDS` from
34
+ * `pyric/auth`; multiple selectable, entries land on
35
+ * `CreateUserRequest.providerUserInfo`)
36
+ * - claims via the standalone `<ClaimsField>`
37
+ * - per-field messages `[data-pyric-field-error="email" | "password"]`
38
+ * render INSIDE the field's label wrapper, after the input
39
+ * - `button[data-pyric-cancel]` / `button[data-pyric-submit]` (submit is
40
+ * disabled while invalid, or pristine in edit mode)
41
+ *
42
+ * Submit emits payloads only — no sandbox calls — so the same form works
43
+ * for create and edit and the consumer owns error handling.
44
+ */
45
+ export function AuthUserForm({ initial, onSubmit, onCancel, submitLabel = 'Save', cancelLabel = 'Cancel', children, className, renderField, }) {
46
+ const editor = useAuthUserEditor({ initial });
47
+ const mode = initial ? 'edit' : 'create';
48
+ const submittable = editor.isValid && (mode === 'create' || editor.isDirty);
49
+ /** Build one field descriptor: the wired input + the stock label-wrapper
50
+ * rendering. `renderField` consumers place `input` themselves. */
51
+ const field = (name, label, kind, input, error = null) => ({
52
+ name,
53
+ label,
54
+ input,
55
+ error,
56
+ kind,
57
+ defaultRender: () => kind === 'checkbox' ? (_jsxs("label", { "data-pyric-field-label": name, children: [input, _jsx("span", { "data-pyric-label-text": true, children: label })] }, name)) : kind === 'group' ? (_jsxs("fieldset", { "data-pyric-field-label": name, children: [_jsx("legend", { "data-pyric-label-text": true, children: label }), input] }, name)) : (_jsxs("label", { "data-pyric-field-label": name, children: [_jsx("span", { "data-pyric-label-text": true, children: label }), input, error != null && (_jsx("p", { role: "alert", "data-pyric-field-error": name, children: error }))] }, name)),
58
+ });
59
+ const fields = [
60
+ field('email', 'Email', 'text', _jsx("input", { type: "email", "data-pyric-field": "email", placeholder: "email@example.com", value: editor.fields.email, onChange: (e) => editor.setField('email', e.target.value) }), editor.errors.email ?? null),
61
+ field('password', 'Password', 'text', _jsx("input", { type: "password", "data-pyric-field": "password", placeholder: mode === 'edit' ? 'New password (unchanged if empty)' : 'Password', value: editor.fields.password, onChange: (e) => editor.setField('password', e.target.value) }), editor.errors.password ?? null),
62
+ field('display-name', 'Display name', 'text', _jsx("input", { type: "text", "data-pyric-field": "display-name", placeholder: "Display name (optional)", value: editor.fields.displayName, onChange: (e) => editor.setField('displayName', e.target.value) })),
63
+ field('phone-number', 'Phone number', 'text', _jsx("input", { type: "tel", "data-pyric-field": "phone-number", placeholder: "+1 555 555 0100", value: editor.fields.phoneNumber, onChange: (e) => editor.setField('phoneNumber', e.target.value) })),
64
+ field('photo-url', 'Photo URL', 'text', _jsx("input", { type: "url", "data-pyric-field": "photo-url", placeholder: "https://example.com/avatar.png", value: editor.fields.photoUrl, onChange: (e) => editor.setField('photoUrl', e.target.value) })),
65
+ // Provider selection is CREATE-only: in edit mode linked providers are
66
+ // managed by the consumer's own affordance over `updateUser` (Studio's
67
+ // per-user ProvidersEditor), not the delta form.
68
+ ...(mode === 'create'
69
+ ? [
70
+ field('providers', 'Sign-in providers', 'group', _jsx(ProviderChecklist, { selected: editor.fields.providerIds, onChange: (ids) => editor.setField('providerIds', ids) })),
71
+ ]
72
+ : []),
73
+ field('email-verified', 'Verified email', 'checkbox', _jsx("input", { type: "checkbox", "data-pyric-field": "email-verified", checked: editor.fields.emailVerified, onChange: (e) => editor.setField('emailVerified', e.target.checked) })),
74
+ field('disabled', 'Disabled (sign-in attempts are rejected)', 'checkbox', _jsx("input", { type: "checkbox", "data-pyric-field": "disabled", checked: editor.fields.disabled, onChange: (e) => editor.setField('disabled', e.target.checked) })),
75
+ ];
76
+ const submit = (e) => {
77
+ e.preventDefault();
78
+ if (!submittable)
79
+ return;
80
+ if (mode === 'edit') {
81
+ onSubmit({ mode, uid: initial.uid, request: editor.toUpdateRequest() });
82
+ }
83
+ else {
84
+ onSubmit({ mode, request: editor.toCreateRequest() });
85
+ }
86
+ };
87
+ return (_jsxs("form", { className: className, "data-pyric-ui": "auth-user-form", "data-pyric-mode": mode, "data-pyric-is-dirty": editor.isDirty ? '' : undefined, "data-pyric-is-valid": editor.isValid ? '' : undefined, onSubmit: submit, children: [fields.map((f) => renderField ? (_jsx(Fragment, { children: renderField(f) }, f.name)) : (f.defaultRender())), _jsx(ClaimsField, { value: editor.fields.claimsText, onChange: (text) => editor.setField('claimsText', text), error: editor.errors.claims }), children, _jsxs("footer", { "data-pyric-form-actions": true, children: [onCancel ? (_jsx("button", { type: "button", "data-pyric-cancel": true, onClick: onCancel, children: cancelLabel })) : null, _jsx("button", { type: "submit", "data-pyric-submit": true, disabled: !submittable, children: submitLabel })] })] }));
88
+ }
89
+ //# sourceMappingURL=AuthUserForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthUserForm.js","sourceRoot":"","sources":["../../../src/auth/components/AuthUserForm.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { AuthUserRecord } from 'pyric/auth';
3
+ export interface AuthUserListProps {
4
+ /** Rows to render — usually `useAuthUsers().users`. */
5
+ users: AuthUserRecord[];
6
+ isLoading?: boolean;
7
+ error?: Error;
8
+ /** The active filter text. Distinguishes the "no users yet" zero state
9
+ * (empty filter) from "no results" (non-empty). */
10
+ filter?: string;
11
+ /** Fired when the identifier cell is clicked. When omitted, the
12
+ * identifier renders as plain text. */
13
+ onSelect?: (user: AuthUserRecord) => void;
14
+ /** Identifier-cell override. Default: email, else phone, else
15
+ * `anonymous`, else the uid. */
16
+ renderIdentifier?: (user: AuthUserRecord) => ReactNode;
17
+ /** Providers-cell override. Default: one `<span data-pyric-provider-id>`
18
+ * per linked provider with its text label (`anonymous` for anonymous
19
+ * users) — hook icons off the attribute. */
20
+ renderProviders?: (user: AuthUserRecord) => ReactNode;
21
+ /** Per-row selection control. Rendered in the leading cell so bulk
22
+ * selection stays visually separate from trailing row actions. */
23
+ renderSelection?: (user: AuthUserRecord) => ReactNode;
24
+ /** Optional content for the leading selection column header (for example,
25
+ * a select-all checkbox). Only rendered with `renderSelection`. */
26
+ renderSelectionHeader?: ReactNode;
27
+ /** Per-row action slot (edit / disable / delete menu). Rendered in a
28
+ * trailing cell; column header is added when this is provided. */
29
+ renderActions?: (user: AuthUserRecord) => ReactNode;
30
+ /** Optional content for the trailing actions column header (for example,
31
+ * a select-all checkbox). Only rendered with `renderActions`. */
32
+ renderActionsHeader?: ReactNode;
33
+ /** Timestamp formatter for Created. Default: locale date, em dash for null. */
34
+ formatCreatedAt?: (iso: string | null) => ReactNode;
35
+ /** Timestamp formatter for Signed In. Kept separate because a missing login
36
+ * means "never", while a missing/invalid creation time is malformed data. */
37
+ formatLastLoginAt?: (iso: string | null) => ReactNode;
38
+ /** Zero state when the project has no users at all. */
39
+ emptyState?: ReactNode;
40
+ /** Zero state when the filter matches nothing. */
41
+ noResultsState?: ReactNode;
42
+ className?: string;
43
+ /** Above this row count, rows render through `<VirtualList>`.
44
+ * Default 100. `Infinity` disables. */
45
+ virtualizeThreshold?: number;
46
+ /** Estimated row height when virtualizing. Default 44. */
47
+ rowHeight?: number | ((index: number) => number);
48
+ /** Scroll-container height when virtualized. Default `'60vh'`. */
49
+ virtualizedHeight?: number | string;
50
+ }
51
+ /**
52
+ * Headless users table — the emulator UI's columns (Identifier,
53
+ * Provider, Created, Signed In, User UID, actions) over the
54
+ * `data-pyric-*` styling contract, with role-based table semantics so
55
+ * rows can virtualize (a real `<table>` can't wrap a scroll container).
56
+ *
57
+ * The hook (`useAuthUsers`) owns data + filter state; this component
58
+ * just renders. Disabled accounts carry `data-pyric-user-disabled` for
59
+ * dimmed styling.
60
+ */
61
+ export declare function AuthUserList({ users, isLoading, error, filter, onSelect, renderIdentifier, renderProviders, renderSelection, renderSelectionHeader, renderActions, renderActionsHeader, formatCreatedAt, formatLastLoginAt, emptyState, noResultsState, className, virtualizeThreshold, rowHeight, virtualizedHeight, }: AuthUserListProps): import("react").JSX.Element;
62
+ //# sourceMappingURL=AuthUserList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthUserList.d.ts","sourceRoot":"","sources":["../../../src/auth/components/AuthUserList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd;wDACoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;4CACwC;IACxC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAC1C;qCACiC;IACjC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,SAAS,CAAC;IACvD;;iDAE6C;IAC7C,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,SAAS,CAAC;IACtD;uEACmE;IACnE,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,SAAS,CAAC;IACtD;wEACoE;IACpE,qBAAqB,CAAC,EAAE,SAAS,CAAC;IAClC;uEACmE;IACnE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,SAAS,CAAC;IACpD;sEACkE;IAClE,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,+EAA+E;IAC/E,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC;IACpD;kFAC8E;IAC9E,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC;IACtD,uDAAuD;IACvD,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,kDAAkD;IAClD,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;4CACwC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACjD,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACrC;AAuBD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,eAAmC,EACnC,iBAAqC,EACrC,UAAU,EACV,cAAc,EACd,SAAS,EACT,mBAAyB,EACzB,SAAc,EACd,iBAA0B,GAC3B,EAAE,iBAAiB,+BAiHnB"}
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { VirtualList } from '../../primitives/VirtualList.js';
3
+ import { providerLabel } from '../providers.js';
4
+ function defaultIdentifier(user) {
5
+ return user.email ?? user.phoneNumber ?? (user.isAnonymous ? 'anonymous' : user.uid);
6
+ }
7
+ function defaultProviders(user) {
8
+ if (user.isAnonymous && user.providerUserInfo.length === 0) {
9
+ return _jsx("span", { "data-pyric-provider-id": "anonymous", children: providerLabel('anonymous') });
10
+ }
11
+ return user.providerUserInfo.map((p) => (_jsx("span", { "data-pyric-provider-id": p.providerId, children: providerLabel(p.providerId) }, p.providerId)));
12
+ }
13
+ function defaultFormatDate(iso) {
14
+ if (!iso)
15
+ return '—';
16
+ const d = new Date(iso);
17
+ return Number.isNaN(d.getTime()) ? '—' : d.toLocaleDateString();
18
+ }
19
+ /**
20
+ * Headless users table — the emulator UI's columns (Identifier,
21
+ * Provider, Created, Signed In, User UID, actions) over the
22
+ * `data-pyric-*` styling contract, with role-based table semantics so
23
+ * rows can virtualize (a real `<table>` can't wrap a scroll container).
24
+ *
25
+ * The hook (`useAuthUsers`) owns data + filter state; this component
26
+ * just renders. Disabled accounts carry `data-pyric-user-disabled` for
27
+ * dimmed styling.
28
+ */
29
+ export function AuthUserList({ users, isLoading, error, filter, onSelect, renderIdentifier, renderProviders, renderSelection, renderSelectionHeader, renderActions, renderActionsHeader, formatCreatedAt = defaultFormatDate, formatLastLoginAt = defaultFormatDate, emptyState, noResultsState, className, virtualizeThreshold = 100, rowHeight = 44, virtualizedHeight = '60vh', }) {
30
+ if (error) {
31
+ return (_jsx("div", { className: className, "data-pyric-ui": "auth-user-list", "data-pyric-error": "", role: "alert", children: error.message }));
32
+ }
33
+ if (isLoading && users.length === 0) {
34
+ return _jsx("div", { className: className, "data-pyric-ui": "auth-user-list", "data-pyric-loading": "" });
35
+ }
36
+ if (users.length === 0) {
37
+ const filtered = Boolean(filter?.trim());
38
+ return (_jsx("div", { className: className, "data-pyric-ui": "auth-user-list", "data-pyric-empty": "", "data-pyric-no-results": filtered ? '' : undefined, children: filtered
39
+ ? (noResultsState ?? 'No results')
40
+ : (emptyState ?? 'No users for this project yet') }));
41
+ }
42
+ const virtualized = users.length > virtualizeThreshold;
43
+ const row = (user) => (_jsxs("div", { role: "row", "data-pyric-user-entry": true, "data-pyric-user-uid": user.uid, "data-pyric-user-disabled": user.disabled ? '' : undefined, children: [renderSelection ? (_jsx("span", { role: "cell", "data-pyric-user-cell": "selection", children: renderSelection(user) })) : null, _jsx("span", { role: "cell", "data-pyric-user-cell": "identifier", children: onSelect ? (_jsx("button", { type: "button", "data-pyric-user-select": true, onClick: () => onSelect(user), children: renderIdentifier ? renderIdentifier(user) : defaultIdentifier(user) })) : ((renderIdentifier ?? defaultIdentifier)(user)) }), _jsx("span", { role: "cell", "data-pyric-user-cell": "providers", children: (renderProviders ?? defaultProviders)(user) }), _jsx("span", { role: "cell", "data-pyric-user-cell": "created", children: formatCreatedAt(user.createdAt) }), _jsx("span", { role: "cell", "data-pyric-user-cell": "signed-in", children: formatLastLoginAt(user.lastLoginAt) }), _jsx("span", { role: "cell", "data-pyric-user-cell": "uid", children: user.uid }), renderActions ? (_jsx("span", { role: "cell", "data-pyric-user-cell": "actions", children: renderActions(user) })) : null] }, user.uid));
44
+ return (_jsxs("div", { className: className, role: "table", "aria-label": "Authentication users", "data-pyric-ui": "auth-user-list", "data-pyric-virtualized": virtualized ? '' : undefined, "data-pyric-selection": renderSelection ? '' : undefined, "data-pyric-actions": renderActions ? '' : undefined, children: [_jsxs("div", { role: "row", "data-pyric-user-header": true, children: [renderSelection ? (_jsx("span", { role: "columnheader", "data-pyric-user-cell": "selection", "aria-label": "Selection", children: renderSelectionHeader })) : null, _jsx("span", { role: "columnheader", "data-pyric-user-cell": "identifier", children: "Identifier" }), _jsx("span", { role: "columnheader", "data-pyric-user-cell": "providers", children: "Provider" }), _jsx("span", { role: "columnheader", "data-pyric-user-cell": "created", children: "Created" }), _jsx("span", { role: "columnheader", "data-pyric-user-cell": "signed-in", children: "Signed In" }), _jsx("span", { role: "columnheader", "data-pyric-user-cell": "uid", children: "User UID" }), renderActions ? (_jsx("span", { role: "columnheader", "data-pyric-user-cell": "actions", "aria-label": "Actions", children: renderActionsHeader })) : null] }), virtualized ? (_jsx(VirtualList, { items: users, estimateSize: rowHeight, height: virtualizedHeight, getItemKey: (user) => user.uid, renderItem: row })) : (_jsx("div", { role: "rowgroup", "data-pyric-user-rows": true, children: users.map(row) }))] }));
45
+ }
46
+ //# sourceMappingURL=AuthUserList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthUserList.js","sourceRoot":"","sources":["../../../src/auth/components/AuthUserList.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface ClaimsFieldProps {
3
+ /** Raw claims JSON text. */
4
+ value: string;
5
+ onChange: (text: string) => void;
6
+ /** Validation message (from `validateSerializedClaims` /
7
+ * `useAuthUserEditor().errors.claims`). Renders a `role="alert"`
8
+ * paragraph and marks the textarea invalid. */
9
+ error?: string;
10
+ /** Helper text under the field (rules-usage hint by default). */
11
+ hint?: ReactNode;
12
+ placeholder?: string;
13
+ className?: string;
14
+ }
15
+ /**
16
+ * Headless custom-claims textarea — the emulator UI's
17
+ * `customAttributes` control. Standalone so custom forms can reuse the
18
+ * exact field (the playground's sign-in helper and the user form both
19
+ * render one); validation itself lives in `validateSerializedClaims`.
20
+ */
21
+ export declare function ClaimsField({ value, onChange, error, hint, placeholder, className, }: ClaimsFieldProps): import("react").JSX.Element;
22
+ //# sourceMappingURL=ClaimsField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaimsField.d.ts","sourceRoot":"","sources":["../../../src/auth/components/ClaimsField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,gBAAgB;IAC/B,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC;;oDAEgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,WAAgC,EAChC,SAAS,GACV,EAAE,gBAAgB,+BAoBlB"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Headless custom-claims textarea — the emulator UI's
4
+ * `customAttributes` control. Standalone so custom forms can reuse the
5
+ * exact field (the playground's sign-in helper and the user form both
6
+ * render one); validation itself lives in `validateSerializedClaims`.
7
+ */
8
+ export function ClaimsField({ value, onChange, error, hint, placeholder = '{"role":"admin"}', className, }) {
9
+ return (_jsxs("div", { className: className, "data-pyric-ui": "claims-field", children: [_jsx("textarea", { "data-pyric-field": "claims", "data-pyric-claims-invalid": error != null ? '' : undefined, "aria-label": "Custom claims (optional)", "aria-invalid": error != null || undefined, placeholder: placeholder, value: value, onChange: (e) => onChange(e.target.value) }), error != null && (_jsx("p", { role: "alert", "data-pyric-claims-error": true, children: error })), hint != null && _jsx("p", { "data-pyric-claims-hint": true, children: hint })] }));
10
+ }
11
+ //# sourceMappingURL=ClaimsField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaimsField.js","sourceRoot":"","sources":["../../../src/auth/components/ClaimsField.tsx"],"names":[],"mappings":";AAgBA;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,WAAW,GAAG,kBAAkB,EAChC,SAAS,GACQ;IACjB,OAAO,CACL,eAAK,SAAS,EAAE,SAAS,mBAAgB,cAAc,aACrD,uCACmB,QAAQ,+BACE,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,gBAC9C,0BAA0B,kBACvB,KAAK,IAAI,IAAI,IAAI,SAAS,EACxC,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GACzC,EACD,KAAK,IAAI,IAAI,IAAI,CAChB,YAAG,IAAI,EAAC,OAAO,6CACZ,KAAK,GACJ,CACL,EACA,IAAI,IAAI,IAAI,IAAI,sDAA2B,IAAI,GAAK,IACjD,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { AuthUserRecord } from 'pyric/auth';
3
+ /** Shared trigger contract for the confirm-gated destructive actions. */
4
+ interface TriggerProps {
5
+ onClick: () => void;
6
+ }
7
+ export interface DeleteUserWithConfirmProps {
8
+ user: AuthUserRecord;
9
+ /** Runs after the user confirms. Wire to `useAuthUsers().deleteUser`. */
10
+ onDelete: (uid: string) => void;
11
+ title?: string;
12
+ body?: ReactNode;
13
+ confirmLabel?: string;
14
+ /** Trigger override; default is a plain destructive `<button>`. */
15
+ renderTrigger?: (props: TriggerProps) => ReactNode;
16
+ className?: string;
17
+ }
18
+ /**
19
+ * Confirm-gated single-user delete (the emulator UI's row-menu
20
+ * "Delete user"). Requires a `<ConfirmProvider>` ancestor.
21
+ */
22
+ export declare function DeleteUserWithConfirm({ user, onDelete, title, body, confirmLabel, renderTrigger, className, }: DeleteUserWithConfirmProps): import("react").JSX.Element;
23
+ export interface ClearUsersWithConfirmProps {
24
+ /** Runs after the user confirms. Wire to `useAuthUsers().clearUsers`. */
25
+ onClear: () => void;
26
+ /** Current user count, interpolated into the default body. */
27
+ count?: number;
28
+ title?: string;
29
+ body?: ReactNode;
30
+ confirmLabel?: string;
31
+ renderTrigger?: (props: TriggerProps) => ReactNode;
32
+ className?: string;
33
+ }
34
+ /**
35
+ * Confirm-gated clear-all (the emulator UI's "Clear all data").
36
+ * Requires a `<ConfirmProvider>` ancestor.
37
+ */
38
+ export declare function ClearUsersWithConfirm({ onClear, count, title, body, confirmLabel, renderTrigger, className, }: ClearUsersWithConfirmProps): import("react").JSX.Element;
39
+ export {};
40
+ //# sourceMappingURL=confirmActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmActions.d.ts","sourceRoot":"","sources":["../../../src/auth/components/confirmActions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,yEAAyE;AACzE,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,cAAc,CAAC;IACrB,yEAAyE;IACzE,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mEAAmE;IACnE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,QAAQ,EACR,KAAqB,EACrB,IAAI,EACJ,YAAuB,EACvB,aAAa,EACb,SAAS,GACV,EAAE,0BAA0B,+BAuB5B;AAED,MAAM,WAAW,0BAA0B;IACzC,yEAAyE;IACzE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,OAAO,EACP,KAAK,EACL,KAAyB,EACzB,IAAI,EACJ,YAAsB,EACtB,aAAa,EACb,SAAS,GACV,EAAE,0BAA0B,+BA2B5B"}
@@ -0,0 +1,49 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useConfirm } from '../../primitives/useConfirm.js';
3
+ function identifierOf(user) {
4
+ return user.email ?? user.phoneNumber ?? user.displayName ?? user.uid;
5
+ }
6
+ /**
7
+ * Confirm-gated single-user delete (the emulator UI's row-menu
8
+ * "Delete user"). Requires a `<ConfirmProvider>` ancestor.
9
+ */
10
+ export function DeleteUserWithConfirm({ user, onDelete, title = 'Delete user', body, confirmLabel = 'Delete', renderTrigger, className, }) {
11
+ const confirm = useConfirm();
12
+ const handleClick = async () => {
13
+ const ok = await confirm({
14
+ title,
15
+ body: body ?? `This will permanently delete ${identifierOf(user)}.`,
16
+ destructive: true,
17
+ confirmLabel,
18
+ });
19
+ if (ok)
20
+ onDelete(user.uid);
21
+ };
22
+ if (renderTrigger)
23
+ return _jsx(_Fragment, { children: renderTrigger({ onClick: handleClick }) });
24
+ return (_jsx("button", { type: "button", className: className, "data-pyric-ui": "delete-user", "data-pyric-destructive": true, onClick: handleClick, children: "Delete user" }));
25
+ }
26
+ /**
27
+ * Confirm-gated clear-all (the emulator UI's "Clear all data").
28
+ * Requires a `<ConfirmProvider>` ancestor.
29
+ */
30
+ export function ClearUsersWithConfirm({ onClear, count, title = 'Clear all users', body, confirmLabel = 'Clear', renderTrigger, className, }) {
31
+ const confirm = useConfirm();
32
+ const handleClick = async () => {
33
+ const ok = await confirm({
34
+ title,
35
+ body: body ??
36
+ (count != null
37
+ ? `This will permanently delete all ${count} users.`
38
+ : 'This will permanently delete every user.'),
39
+ destructive: true,
40
+ confirmLabel,
41
+ });
42
+ if (ok)
43
+ onClear();
44
+ };
45
+ if (renderTrigger)
46
+ return _jsx(_Fragment, { children: renderTrigger({ onClick: handleClick }) });
47
+ return (_jsx("button", { type: "button", className: className, "data-pyric-ui": "clear-users", "data-pyric-destructive": true, onClick: handleClick, children: "Clear all users" }));
48
+ }
49
+ //# sourceMappingURL=confirmActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirmActions.js","sourceRoot":"","sources":["../../../src/auth/components/confirmActions.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAmB5D,SAAS,YAAY,CAAC,IAAoB;IACxC,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,EACpC,IAAI,EACJ,QAAQ,EACR,KAAK,GAAG,aAAa,EACrB,IAAI,EACJ,YAAY,GAAG,QAAQ,EACvB,aAAa,EACb,SAAS,GACkB;IAC3B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC;YACvB,KAAK;YACL,IAAI,EAAE,IAAI,IAAI,gCAAgC,YAAY,CAAC,IAAI,CAAC,GAAG;YACnE,WAAW,EAAE,IAAI;YACjB,YAAY;SACb,CAAC,CAAC;QACH,IAAI,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC,CAAC;IACF,IAAI,aAAa;QAAE,OAAO,4BAAG,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,GAAI,CAAC;IACzE,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,SAAS,mBACN,aAAa,kCAE3B,OAAO,EAAE,WAAW,4BAGb,CACV,CAAC;AACJ,CAAC;AAcD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,EACpC,OAAO,EACP,KAAK,EACL,KAAK,GAAG,iBAAiB,EACzB,IAAI,EACJ,YAAY,GAAG,OAAO,EACtB,aAAa,EACb,SAAS,GACkB;IAC3B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC7B,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC;YACvB,KAAK;YACL,IAAI,EACF,IAAI;gBACJ,CAAC,KAAK,IAAI,IAAI;oBACZ,CAAC,CAAC,oCAAoC,KAAK,SAAS;oBACpD,CAAC,CAAC,0CAA0C,CAAC;YACjD,WAAW,EAAE,IAAI;YACjB,YAAY;SACb,CAAC,CAAC;QACH,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC;IACF,IAAI,aAAa;QAAE,OAAO,4BAAG,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,GAAI,CAAC;IACzE,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,SAAS,mBACN,aAAa,kCAE3B,OAAO,EAAE,WAAW,gCAGb,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Sign-in helper controller — the host side of `pyric/auth`'s
3
+ * `AuthFlowResolver` seam.
4
+ *
5
+ * `pyric/auth` stays UI-free: `signInWithPopup` / `signInWithRedirect`
6
+ * delegate to a resolver. This controller IS that resolver's host
7
+ * implementation — it parks the SDK's promise, drives a host UI (an
8
+ * account picker + add-account form, e.g. `<AuthSignInHelper>`), and
9
+ * settles the promise when the user picks an identity, adds one, or
10
+ * cancels. React components stay thin presentational shells over this;
11
+ * all the settle/seed logic lives here so it's testable without a DOM.
12
+ *
13
+ * Faithful to the Firebase emulator: "add account" mints a sandbox
14
+ * identity with optional custom claims (the emulator's
15
+ * `customAttributes`), so a rule gated on `request.auth.token.<claim>`
16
+ * works against live sandbox traffic. Credential + token synthesis is
17
+ * backend-owned (`sandbox.createSignInCredential`) — this controller
18
+ * only drives the UI flow and settles the parked promise.
19
+ */
20
+ import { sandbox as authSandbox, type Auth, type AuthFlowRequest, type AuthFlowResolver } from 'pyric/auth';
21
+ /** A field set for "add new account" — mirrors the emulator's add-user form. */
22
+ export interface NewIdentitySpec {
23
+ email: string;
24
+ displayName?: string;
25
+ /** Parsed custom claims (the emulator's `customAttributes`). */
26
+ customClaims?: Record<string, unknown>;
27
+ }
28
+ /** One pickable identity, as reported by `sandbox.listIdentities`. */
29
+ export type SandboxIdentity = ReturnType<typeof authSandbox.listIdentities>[number];
30
+ /** Snapshot the helper UI renders from. */
31
+ export interface HelperState {
32
+ /** The in-flight request, or null when the helper is closed. */
33
+ request: AuthFlowRequest | null;
34
+ /** Existing identities to pick from (seeded + previously created). */
35
+ identities: SandboxIdentity[];
36
+ }
37
+ export declare class AuthFlowController {
38
+ private readonly auth;
39
+ private pending;
40
+ private readonly listeners;
41
+ /** Memoized {@link snapshot} result, invalidated by {@link emit}.
42
+ * `useSyncExternalStore` compares consecutive `getSnapshot()` results
43
+ * with `Object.is` — an uncached object here re-renders forever. */
44
+ private cached;
45
+ constructor(auth: Auth);
46
+ /** Wire this controller's resolver into the auth handle. Paired with
47
+ * {@link uninstall} for use in a React effect (install in the body,
48
+ * uninstall in the cleanup) — StrictMode-safe. */
49
+ install(): void;
50
+ uninstall(): void;
51
+ /** The resolver to hand to `sandbox.setAuthFlowResolver`. Popup and
52
+ * redirect share one implementation (the sandbox has no navigation). */
53
+ resolver(): AuthFlowResolver;
54
+ subscribe(fn: () => void): () => void;
55
+ snapshot(): HelperState;
56
+ private emit;
57
+ /** Pick an existing identity (by uid). The backend mints the credential
58
+ * (and records the provider on the identity). */
59
+ pick(uid: string): void;
60
+ /** Add + sign in as a new identity. The backend creates the identity
61
+ * (so claims resolve in rules and it shows up in the picker next time)
62
+ * and mints the credential in one step.
63
+ *
64
+ * Credential creation happens BEFORE {@link take}'s emit: subscribers
65
+ * recompute the snapshot synchronously on emit, so creating after would
66
+ * publish a stale identity list (a `useSyncExternalStore` consumer
67
+ * would miss the new account until the next unrelated emit). */
68
+ add(spec: NewIdentitySpec): void;
69
+ /** Dismiss — rejects with the faithful `auth/popup-closed-by-user`. */
70
+ cancel(): void;
71
+ private take;
72
+ }
73
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/auth/controller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EACL,OAAO,IAAI,WAAW,EACtB,KAAK,IAAI,EACT,KAAK,eAAe,EACpB,KAAK,gBAAgB,EAEtB,MAAM,YAAY,CAAC;AAEpB,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,sEAAsE;AACtE,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpF,2CAA2C;AAC3C,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,sEAAsE;IACtE,UAAU,EAAE,eAAe,EAAE,CAAC;CAC/B;AAQD,qBAAa,kBAAkB;IAQjB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPjC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD;;yEAEqE;IACrE,OAAO,CAAC,MAAM,CAA4B;gBAEb,IAAI,EAAE,IAAI;IAEvC;;uDAEmD;IACnD,OAAO,IAAI,IAAI;IAIf,SAAS,IAAI,IAAI;IAIjB;6EACyE;IACzE,QAAQ,IAAI,gBAAgB;IAY5B,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAKrC,QAAQ,IAAI,WAAW;IAQvB,OAAO,CAAC,IAAI;IAMZ;sDACkD;IAClD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAgBvB;;;;;;;qEAOiE;IACjE,GAAG,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI;IAoBhC,uEAAuE;IACvE,MAAM,IAAI,IAAI;IAMd,OAAO,CAAC,IAAI;CAMb"}