@pyric/ui 0.1.0-alpha.7

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 (594) hide show
  1. package/README.md +79 -0
  2. package/dist/agents/ContextWindowUsage.d.ts +67 -0
  3. package/dist/agents/ContextWindowUsage.d.ts.map +1 -0
  4. package/dist/agents/ContextWindowUsage.js +115 -0
  5. package/dist/agents/ContextWindowUsage.js.map +1 -0
  6. package/dist/agents/EmptyState.d.ts +18 -0
  7. package/dist/agents/EmptyState.d.ts.map +1 -0
  8. package/dist/agents/EmptyState.js +11 -0
  9. package/dist/agents/EmptyState.js.map +1 -0
  10. package/dist/agents/Fold.d.ts +37 -0
  11. package/dist/agents/Fold.d.ts.map +1 -0
  12. package/dist/agents/Fold.js +18 -0
  13. package/dist/agents/Fold.js.map +1 -0
  14. package/dist/agents/Modal.d.ts +25 -0
  15. package/dist/agents/Modal.d.ts.map +1 -0
  16. package/dist/agents/Modal.js +28 -0
  17. package/dist/agents/Modal.js.map +1 -0
  18. package/dist/agents/PulsingDot.d.ts +21 -0
  19. package/dist/agents/PulsingDot.d.ts.map +1 -0
  20. package/dist/agents/PulsingDot.js +18 -0
  21. package/dist/agents/PulsingDot.js.map +1 -0
  22. package/dist/agents/index.d.ts +15 -0
  23. package/dist/agents/index.d.ts.map +1 -0
  24. package/dist/agents/index.js +15 -0
  25. package/dist/agents/index.js.map +1 -0
  26. package/dist/auth/authApi.d.ts +32 -0
  27. package/dist/auth/authApi.d.ts.map +1 -0
  28. package/dist/auth/authApi.js +27 -0
  29. package/dist/auth/authApi.js.map +1 -0
  30. package/dist/auth/claims.d.ts +27 -0
  31. package/dist/auth/claims.d.ts.map +1 -0
  32. package/dist/auth/claims.js +58 -0
  33. package/dist/auth/claims.js.map +1 -0
  34. package/dist/auth/components/AuthProviderToggles.d.ts +31 -0
  35. package/dist/auth/components/AuthProviderToggles.d.ts.map +1 -0
  36. package/dist/auth/components/AuthProviderToggles.js +48 -0
  37. package/dist/auth/components/AuthProviderToggles.js.map +1 -0
  38. package/dist/auth/components/AuthSignInHelper.d.ts +57 -0
  39. package/dist/auth/components/AuthSignInHelper.d.ts.map +1 -0
  40. package/dist/auth/components/AuthSignInHelper.js +69 -0
  41. package/dist/auth/components/AuthSignInHelper.js.map +1 -0
  42. package/dist/auth/components/AuthUserForm.d.ts +84 -0
  43. package/dist/auth/components/AuthUserForm.d.ts.map +1 -0
  44. package/dist/auth/components/AuthUserForm.js +89 -0
  45. package/dist/auth/components/AuthUserForm.js.map +1 -0
  46. package/dist/auth/components/AuthUserList.d.ts +51 -0
  47. package/dist/auth/components/AuthUserList.d.ts.map +1 -0
  48. package/dist/auth/components/AuthUserList.js +46 -0
  49. package/dist/auth/components/AuthUserList.js.map +1 -0
  50. package/dist/auth/components/ClaimsField.d.ts +22 -0
  51. package/dist/auth/components/ClaimsField.d.ts.map +1 -0
  52. package/dist/auth/components/ClaimsField.js +11 -0
  53. package/dist/auth/components/ClaimsField.js.map +1 -0
  54. package/dist/auth/components/confirmActions.d.ts +40 -0
  55. package/dist/auth/components/confirmActions.d.ts.map +1 -0
  56. package/dist/auth/components/confirmActions.js +49 -0
  57. package/dist/auth/components/confirmActions.js.map +1 -0
  58. package/dist/auth/controller.d.ts +73 -0
  59. package/dist/auth/controller.d.ts.map +1 -0
  60. package/dist/auth/controller.js +139 -0
  61. package/dist/auth/controller.js.map +1 -0
  62. package/dist/auth/hooks/index.d.ts +7 -0
  63. package/dist/auth/hooks/index.d.ts.map +1 -0
  64. package/dist/auth/hooks/index.js +7 -0
  65. package/dist/auth/hooks/index.js.map +1 -0
  66. package/dist/auth/hooks/useAuthFlowHelper.d.ts +30 -0
  67. package/dist/auth/hooks/useAuthFlowHelper.d.ts.map +1 -0
  68. package/dist/auth/hooks/useAuthFlowHelper.js +30 -0
  69. package/dist/auth/hooks/useAuthFlowHelper.js.map +1 -0
  70. package/dist/auth/hooks/useAuthProviderConfig.d.ts +37 -0
  71. package/dist/auth/hooks/useAuthProviderConfig.d.ts.map +1 -0
  72. package/dist/auth/hooks/useAuthProviderConfig.js +98 -0
  73. package/dist/auth/hooks/useAuthProviderConfig.js.map +1 -0
  74. package/dist/auth/hooks/useAuthUserEditor.d.ts +30 -0
  75. package/dist/auth/hooks/useAuthUserEditor.d.ts.map +1 -0
  76. package/dist/auth/hooks/useAuthUserEditor.js +27 -0
  77. package/dist/auth/hooks/useAuthUserEditor.js.map +1 -0
  78. package/dist/auth/hooks/useAuthUsers.d.ts +38 -0
  79. package/dist/auth/hooks/useAuthUsers.d.ts.map +1 -0
  80. package/dist/auth/hooks/useAuthUsers.js +111 -0
  81. package/dist/auth/hooks/useAuthUsers.js.map +1 -0
  82. package/dist/auth/index.d.ts +11 -0
  83. package/dist/auth/index.d.ts.map +1 -0
  84. package/dist/auth/index.js +13 -0
  85. package/dist/auth/index.js.map +1 -0
  86. package/dist/auth/providers.d.ts +11 -0
  87. package/dist/auth/providers.d.ts.map +1 -0
  88. package/dist/auth/providers.js +28 -0
  89. package/dist/auth/providers.js.map +1 -0
  90. package/dist/auth/reducers/userEditor.d.ts +55 -0
  91. package/dist/auth/reducers/userEditor.d.ts.map +1 -0
  92. package/dist/auth/reducers/userEditor.js +136 -0
  93. package/dist/auth/reducers/userEditor.js.map +1 -0
  94. package/dist/events/components/ActivityActionItems.d.ts +45 -0
  95. package/dist/events/components/ActivityActionItems.d.ts.map +1 -0
  96. package/dist/events/components/ActivityActionItems.js +68 -0
  97. package/dist/events/components/ActivityActionItems.js.map +1 -0
  98. package/dist/events/components/ActivityGrid.d.ts +65 -0
  99. package/dist/events/components/ActivityGrid.d.ts.map +1 -0
  100. package/dist/events/components/ActivityGrid.js +61 -0
  101. package/dist/events/components/ActivityGrid.js.map +1 -0
  102. package/dist/events/components/ActivityGridRow.d.ts +31 -0
  103. package/dist/events/components/ActivityGridRow.d.ts.map +1 -0
  104. package/dist/events/components/ActivityGridRow.js +23 -0
  105. package/dist/events/components/ActivityGridRow.js.map +1 -0
  106. package/dist/events/components/ProposedChangeDiff.d.ts +46 -0
  107. package/dist/events/components/ProposedChangeDiff.d.ts.map +1 -0
  108. package/dist/events/components/ProposedChangeDiff.js +60 -0
  109. package/dist/events/components/ProposedChangeDiff.js.map +1 -0
  110. package/dist/events/components/format.d.ts +11 -0
  111. package/dist/events/components/format.d.ts.map +1 -0
  112. package/dist/events/components/format.js +26 -0
  113. package/dist/events/components/format.js.map +1 -0
  114. package/dist/events/components/index.d.ts +6 -0
  115. package/dist/events/components/index.d.ts.map +1 -0
  116. package/dist/events/components/index.js +6 -0
  117. package/dist/events/components/index.js.map +1 -0
  118. package/dist/events/digest.d.ts +167 -0
  119. package/dist/events/digest.d.ts.map +1 -0
  120. package/dist/events/digest.js +426 -0
  121. package/dist/events/digest.js.map +1 -0
  122. package/dist/events/hooks/index.d.ts +3 -0
  123. package/dist/events/hooks/index.d.ts.map +1 -0
  124. package/dist/events/hooks/index.js +3 -0
  125. package/dist/events/hooks/index.js.map +1 -0
  126. package/dist/events/hooks/useActivityDigest.d.ts +27 -0
  127. package/dist/events/hooks/useActivityDigest.d.ts.map +1 -0
  128. package/dist/events/hooks/useActivityDigest.js +18 -0
  129. package/dist/events/hooks/useActivityDigest.js.map +1 -0
  130. package/dist/events/hooks/useActivityStream.d.ts +44 -0
  131. package/dist/events/hooks/useActivityStream.d.ts.map +1 -0
  132. package/dist/events/hooks/useActivityStream.js +38 -0
  133. package/dist/events/hooks/useActivityStream.js.map +1 -0
  134. package/dist/events/index.d.ts +15 -0
  135. package/dist/events/index.d.ts.map +1 -0
  136. package/dist/events/index.js +14 -0
  137. package/dist/events/index.js.map +1 -0
  138. package/dist/events/types.d.ts +160 -0
  139. package/dist/events/types.d.ts.map +1 -0
  140. package/dist/events/types.js +21 -0
  141. package/dist/events/types.js.map +1 -0
  142. package/dist/firestore/components/CollectionList.d.ts +22 -0
  143. package/dist/firestore/components/CollectionList.d.ts.map +1 -0
  144. package/dist/firestore/components/CollectionList.js +21 -0
  145. package/dist/firestore/components/CollectionList.js.map +1 -0
  146. package/dist/firestore/components/DeleteWithConfirm.d.ts +38 -0
  147. package/dist/firestore/components/DeleteWithConfirm.d.ts.map +1 -0
  148. package/dist/firestore/components/DeleteWithConfirm.js +33 -0
  149. package/dist/firestore/components/DeleteWithConfirm.js.map +1 -0
  150. package/dist/firestore/components/DocumentEditor.d.ts +47 -0
  151. package/dist/firestore/components/DocumentEditor.d.ts.map +1 -0
  152. package/dist/firestore/components/DocumentEditor.js +176 -0
  153. package/dist/firestore/components/DocumentEditor.js.map +1 -0
  154. package/dist/firestore/components/DocumentList.d.ts +60 -0
  155. package/dist/firestore/components/DocumentList.d.ts.map +1 -0
  156. package/dist/firestore/components/DocumentList.js +39 -0
  157. package/dist/firestore/components/DocumentList.js.map +1 -0
  158. package/dist/firestore/components/DocumentPreview.d.ts +68 -0
  159. package/dist/firestore/components/DocumentPreview.d.ts.map +1 -0
  160. package/dist/firestore/components/DocumentPreview.js +76 -0
  161. package/dist/firestore/components/DocumentPreview.js.map +1 -0
  162. package/dist/firestore/components/FieldRenderer.d.ts +17 -0
  163. package/dist/firestore/components/FieldRenderer.d.ts.map +1 -0
  164. package/dist/firestore/components/FieldRenderer.js +16 -0
  165. package/dist/firestore/components/FieldRenderer.js.map +1 -0
  166. package/dist/firestore/components/QueryBuilder.d.ts +25 -0
  167. package/dist/firestore/components/QueryBuilder.d.ts.map +1 -0
  168. package/dist/firestore/components/QueryBuilder.js +78 -0
  169. package/dist/firestore/components/QueryBuilder.js.map +1 -0
  170. package/dist/firestore/components/ReferencePicker.d.ts +33 -0
  171. package/dist/firestore/components/ReferencePicker.d.ts.map +1 -0
  172. package/dist/firestore/components/ReferencePicker.js +42 -0
  173. package/dist/firestore/components/ReferencePicker.js.map +1 -0
  174. package/dist/firestore/components/TreeEntry.d.ts +15 -0
  175. package/dist/firestore/components/TreeEntry.d.ts.map +1 -0
  176. package/dist/firestore/components/TreeEntry.js +23 -0
  177. package/dist/firestore/components/TreeEntry.js.map +1 -0
  178. package/dist/firestore/components/context.d.ts +18 -0
  179. package/dist/firestore/components/context.d.ts.map +1 -0
  180. package/dist/firestore/components/context.js +7 -0
  181. package/dist/firestore/components/context.js.map +1 -0
  182. package/dist/firestore/fieldEditors/array.d.ts +3 -0
  183. package/dist/firestore/fieldEditors/array.d.ts.map +1 -0
  184. package/dist/firestore/fieldEditors/array.js +16 -0
  185. package/dist/firestore/fieldEditors/array.js.map +1 -0
  186. package/dist/firestore/fieldEditors/boolean.d.ts +3 -0
  187. package/dist/firestore/fieldEditors/boolean.d.ts.map +1 -0
  188. package/dist/firestore/fieldEditors/boolean.js +13 -0
  189. package/dist/firestore/fieldEditors/boolean.js.map +1 -0
  190. package/dist/firestore/fieldEditors/bytes.d.ts +4 -0
  191. package/dist/firestore/fieldEditors/bytes.d.ts.map +1 -0
  192. package/dist/firestore/fieldEditors/bytes.js +31 -0
  193. package/dist/firestore/fieldEditors/bytes.js.map +1 -0
  194. package/dist/firestore/fieldEditors/geopoint.d.ts +4 -0
  195. package/dist/firestore/fieldEditors/geopoint.d.ts.map +1 -0
  196. package/dist/firestore/fieldEditors/geopoint.js +32 -0
  197. package/dist/firestore/fieldEditors/geopoint.js.map +1 -0
  198. package/dist/firestore/fieldEditors/map.d.ts +3 -0
  199. package/dist/firestore/fieldEditors/map.d.ts.map +1 -0
  200. package/dist/firestore/fieldEditors/map.js +19 -0
  201. package/dist/firestore/fieldEditors/map.js.map +1 -0
  202. package/dist/firestore/fieldEditors/null.d.ts +3 -0
  203. package/dist/firestore/fieldEditors/null.d.ts.map +1 -0
  204. package/dist/firestore/fieldEditors/null.js +17 -0
  205. package/dist/firestore/fieldEditors/null.js.map +1 -0
  206. package/dist/firestore/fieldEditors/number.d.ts +3 -0
  207. package/dist/firestore/fieldEditors/number.d.ts.map +1 -0
  208. package/dist/firestore/fieldEditors/number.js +24 -0
  209. package/dist/firestore/fieldEditors/number.js.map +1 -0
  210. package/dist/firestore/fieldEditors/reference.d.ts +4 -0
  211. package/dist/firestore/fieldEditors/reference.d.ts.map +1 -0
  212. package/dist/firestore/fieldEditors/reference.js +49 -0
  213. package/dist/firestore/fieldEditors/reference.js.map +1 -0
  214. package/dist/firestore/fieldEditors/registry.d.ts +16 -0
  215. package/dist/firestore/fieldEditors/registry.d.ts.map +1 -0
  216. package/dist/firestore/fieldEditors/registry.js +42 -0
  217. package/dist/firestore/fieldEditors/registry.js.map +1 -0
  218. package/dist/firestore/fieldEditors/string.d.ts +3 -0
  219. package/dist/firestore/fieldEditors/string.d.ts.map +1 -0
  220. package/dist/firestore/fieldEditors/string.js +13 -0
  221. package/dist/firestore/fieldEditors/string.js.map +1 -0
  222. package/dist/firestore/fieldEditors/timestamp.d.ts +4 -0
  223. package/dist/firestore/fieldEditors/timestamp.d.ts.map +1 -0
  224. package/dist/firestore/fieldEditors/timestamp.js +52 -0
  225. package/dist/firestore/fieldEditors/timestamp.js.map +1 -0
  226. package/dist/firestore/fieldEditors/types.d.ts +64 -0
  227. package/dist/firestore/fieldEditors/types.d.ts.map +1 -0
  228. package/dist/firestore/fieldEditors/types.js +2 -0
  229. package/dist/firestore/fieldEditors/types.js.map +1 -0
  230. package/dist/firestore/fieldEditors/vector.d.ts +29 -0
  231. package/dist/firestore/fieldEditors/vector.d.ts.map +1 -0
  232. package/dist/firestore/fieldEditors/vector.js +93 -0
  233. package/dist/firestore/fieldEditors/vector.js.map +1 -0
  234. package/dist/firestore/firestoreApi.d.ts +35 -0
  235. package/dist/firestore/firestoreApi.d.ts.map +1 -0
  236. package/dist/firestore/firestoreApi.js +28 -0
  237. package/dist/firestore/firestoreApi.js.map +1 -0
  238. package/dist/firestore/hooks/coerceError.d.ts +17 -0
  239. package/dist/firestore/hooks/coerceError.d.ts.map +1 -0
  240. package/dist/firestore/hooks/coerceError.js +41 -0
  241. package/dist/firestore/hooks/coerceError.js.map +1 -0
  242. package/dist/firestore/hooks/index.d.ts +10 -0
  243. package/dist/firestore/hooks/index.d.ts.map +1 -0
  244. package/dist/firestore/hooks/index.js +10 -0
  245. package/dist/firestore/hooks/index.js.map +1 -0
  246. package/dist/firestore/hooks/useCollectionList.d.ts +37 -0
  247. package/dist/firestore/hooks/useCollectionList.d.ts.map +1 -0
  248. package/dist/firestore/hooks/useCollectionList.js +51 -0
  249. package/dist/firestore/hooks/useCollectionList.js.map +1 -0
  250. package/dist/firestore/hooks/useDocumentEditor.d.ts +58 -0
  251. package/dist/firestore/hooks/useDocumentEditor.d.ts.map +1 -0
  252. package/dist/firestore/hooks/useDocumentEditor.js +68 -0
  253. package/dist/firestore/hooks/useDocumentEditor.js.map +1 -0
  254. package/dist/firestore/hooks/useDocumentList.d.ts +45 -0
  255. package/dist/firestore/hooks/useDocumentList.d.ts.map +1 -0
  256. package/dist/firestore/hooks/useDocumentList.js +112 -0
  257. package/dist/firestore/hooks/useDocumentList.js.map +1 -0
  258. package/dist/firestore/hooks/useDocumentSubcollections.d.ts +29 -0
  259. package/dist/firestore/hooks/useDocumentSubcollections.d.ts.map +1 -0
  260. package/dist/firestore/hooks/useDocumentSubcollections.js +48 -0
  261. package/dist/firestore/hooks/useDocumentSubcollections.js.map +1 -0
  262. package/dist/firestore/hooks/useFirestoreCollection.d.ts +14 -0
  263. package/dist/firestore/hooks/useFirestoreCollection.d.ts.map +1 -0
  264. package/dist/firestore/hooks/useFirestoreCollection.js +35 -0
  265. package/dist/firestore/hooks/useFirestoreCollection.js.map +1 -0
  266. package/dist/firestore/hooks/useFirestoreDoc.d.ts +17 -0
  267. package/dist/firestore/hooks/useFirestoreDoc.d.ts.map +1 -0
  268. package/dist/firestore/hooks/useFirestoreDoc.js +34 -0
  269. package/dist/firestore/hooks/useFirestoreDoc.js.map +1 -0
  270. package/dist/firestore/hooks/useQueryBuilder.d.ts +51 -0
  271. package/dist/firestore/hooks/useQueryBuilder.d.ts.map +1 -0
  272. package/dist/firestore/hooks/useQueryBuilder.js +110 -0
  273. package/dist/firestore/hooks/useQueryBuilder.js.map +1 -0
  274. package/dist/firestore/hooks/useRecursiveDelete.d.ts +40 -0
  275. package/dist/firestore/hooks/useRecursiveDelete.d.ts.map +1 -0
  276. package/dist/firestore/hooks/useRecursiveDelete.js +44 -0
  277. package/dist/firestore/hooks/useRecursiveDelete.js.map +1 -0
  278. package/dist/firestore/hooks/useReferencePicker.d.ts +70 -0
  279. package/dist/firestore/hooks/useReferencePicker.d.ts.map +1 -0
  280. package/dist/firestore/hooks/useReferencePicker.js +140 -0
  281. package/dist/firestore/hooks/useReferencePicker.js.map +1 -0
  282. package/dist/firestore/import/parseImport.d.ts +55 -0
  283. package/dist/firestore/import/parseImport.d.ts.map +1 -0
  284. package/dist/firestore/import/parseImport.js +101 -0
  285. package/dist/firestore/import/parseImport.js.map +1 -0
  286. package/dist/firestore/index.d.ts +20 -0
  287. package/dist/firestore/index.d.ts.map +1 -0
  288. package/dist/firestore/index.js +28 -0
  289. package/dist/firestore/index.js.map +1 -0
  290. package/dist/firestore/reducers/defaults.d.ts +10 -0
  291. package/dist/firestore/reducers/defaults.d.ts.map +1 -0
  292. package/dist/firestore/reducers/defaults.js +37 -0
  293. package/dist/firestore/reducers/defaults.js.map +1 -0
  294. package/dist/firestore/reducers/documentEditor.d.ts +23 -0
  295. package/dist/firestore/reducers/documentEditor.d.ts.map +1 -0
  296. package/dist/firestore/reducers/documentEditor.js +199 -0
  297. package/dist/firestore/reducers/documentEditor.js.map +1 -0
  298. package/dist/firestore/reducers/tree.d.ts +28 -0
  299. package/dist/firestore/reducers/tree.d.ts.map +1 -0
  300. package/dist/firestore/reducers/tree.js +129 -0
  301. package/dist/firestore/reducers/tree.js.map +1 -0
  302. package/dist/firestore/reducers/types.d.ts +112 -0
  303. package/dist/firestore/reducers/types.d.ts.map +1 -0
  304. package/dist/firestore/reducers/types.js +2 -0
  305. package/dist/firestore/reducers/types.js.map +1 -0
  306. package/dist/firestore/reducers/validation.d.ts +25 -0
  307. package/dist/firestore/reducers/validation.d.ts.map +1 -0
  308. package/dist/firestore/reducers/validation.js +121 -0
  309. package/dist/firestore/reducers/validation.js.map +1 -0
  310. package/dist/firestore/types.d.ts +77 -0
  311. package/dist/firestore/types.d.ts.map +1 -0
  312. package/dist/firestore/types.js +196 -0
  313. package/dist/firestore/types.js.map +1 -0
  314. package/dist/firestore/validation/ids.d.ts +23 -0
  315. package/dist/firestore/validation/ids.d.ts.map +1 -0
  316. package/dist/firestore/validation/ids.js +46 -0
  317. package/dist/firestore/validation/ids.js.map +1 -0
  318. package/dist/index.d.ts +2 -0
  319. package/dist/index.d.ts.map +1 -0
  320. package/dist/index.js +2 -0
  321. package/dist/index.js.map +1 -0
  322. package/dist/primitives/Badge.d.ts +28 -0
  323. package/dist/primitives/Badge.d.ts.map +1 -0
  324. package/dist/primitives/Badge.js +11 -0
  325. package/dist/primitives/Badge.js.map +1 -0
  326. package/dist/primitives/ConfirmDialog.d.ts +42 -0
  327. package/dist/primitives/ConfirmDialog.d.ts.map +1 -0
  328. package/dist/primitives/ConfirmDialog.js +61 -0
  329. package/dist/primitives/ConfirmDialog.js.map +1 -0
  330. package/dist/primitives/CopyButton.d.ts +28 -0
  331. package/dist/primitives/CopyButton.d.ts.map +1 -0
  332. package/dist/primitives/CopyButton.js +27 -0
  333. package/dist/primitives/CopyButton.js.map +1 -0
  334. package/dist/primitives/JsonView.d.ts +29 -0
  335. package/dist/primitives/JsonView.d.ts.map +1 -0
  336. package/dist/primitives/JsonView.js +56 -0
  337. package/dist/primitives/JsonView.js.map +1 -0
  338. package/dist/primitives/SegmentedControl.d.ts +37 -0
  339. package/dist/primitives/SegmentedControl.d.ts.map +1 -0
  340. package/dist/primitives/SegmentedControl.js +18 -0
  341. package/dist/primitives/SegmentedControl.js.map +1 -0
  342. package/dist/primitives/Toast.d.ts +48 -0
  343. package/dist/primitives/Toast.d.ts.map +1 -0
  344. package/dist/primitives/Toast.js +60 -0
  345. package/dist/primitives/Toast.js.map +1 -0
  346. package/dist/primitives/VirtualList.d.ts +37 -0
  347. package/dist/primitives/VirtualList.d.ts.map +1 -0
  348. package/dist/primitives/VirtualList.js +47 -0
  349. package/dist/primitives/VirtualList.js.map +1 -0
  350. package/dist/primitives/hooks/useContainerSize.d.ts +29 -0
  351. package/dist/primitives/hooks/useContainerSize.d.ts.map +1 -0
  352. package/dist/primitives/hooks/useContainerSize.js +45 -0
  353. package/dist/primitives/hooks/useContainerSize.js.map +1 -0
  354. package/dist/primitives/index.d.ts +10 -0
  355. package/dist/primitives/index.d.ts.map +1 -0
  356. package/dist/primitives/index.js +10 -0
  357. package/dist/primitives/index.js.map +1 -0
  358. package/dist/primitives/useConfirm.d.ts +34 -0
  359. package/dist/primitives/useConfirm.d.ts.map +1 -0
  360. package/dist/primitives/useConfirm.js +63 -0
  361. package/dist/primitives/useConfirm.js.map +1 -0
  362. package/dist/rtdb/components/RtdbPathBar.d.ts +31 -0
  363. package/dist/rtdb/components/RtdbPathBar.d.ts.map +1 -0
  364. package/dist/rtdb/components/RtdbPathBar.js +47 -0
  365. package/dist/rtdb/components/RtdbPathBar.js.map +1 -0
  366. package/dist/rtdb/components/RtdbTree.d.ts +38 -0
  367. package/dist/rtdb/components/RtdbTree.d.ts.map +1 -0
  368. package/dist/rtdb/components/RtdbTree.js +103 -0
  369. package/dist/rtdb/components/RtdbTree.js.map +1 -0
  370. package/dist/rtdb/editor.d.ts +25 -0
  371. package/dist/rtdb/editor.d.ts.map +1 -0
  372. package/dist/rtdb/editor.js +79 -0
  373. package/dist/rtdb/editor.js.map +1 -0
  374. package/dist/rtdb/hooks/useRtdbTree.d.ts +31 -0
  375. package/dist/rtdb/hooks/useRtdbTree.d.ts.map +1 -0
  376. package/dist/rtdb/hooks/useRtdbTree.js +49 -0
  377. package/dist/rtdb/hooks/useRtdbTree.js.map +1 -0
  378. package/dist/rtdb/index.d.ts +17 -0
  379. package/dist/rtdb/index.d.ts.map +1 -0
  380. package/dist/rtdb/index.js +21 -0
  381. package/dist/rtdb/index.js.map +1 -0
  382. package/dist/rtdb/pathInput.d.ts +28 -0
  383. package/dist/rtdb/pathInput.d.ts.map +1 -0
  384. package/dist/rtdb/pathInput.js +40 -0
  385. package/dist/rtdb/pathInput.js.map +1 -0
  386. package/dist/rtdb/reducers/tree.d.ts +86 -0
  387. package/dist/rtdb/reducers/tree.d.ts.map +1 -0
  388. package/dist/rtdb/reducers/tree.js +131 -0
  389. package/dist/rtdb/reducers/tree.js.map +1 -0
  390. package/dist/rtdb/rtdbApi.d.ts +20 -0
  391. package/dist/rtdb/rtdbApi.d.ts.map +1 -0
  392. package/dist/rtdb/rtdbApi.js +2 -0
  393. package/dist/rtdb/rtdbApi.js.map +1 -0
  394. package/dist/rtdb/values.d.ts +44 -0
  395. package/dist/rtdb/values.d.ts.map +1 -0
  396. package/dist/rtdb/values.js +143 -0
  397. package/dist/rtdb/values.js.map +1 -0
  398. package/dist/rules/components/DenialInspector.d.ts +18 -0
  399. package/dist/rules/components/DenialInspector.d.ts.map +1 -0
  400. package/dist/rules/components/DenialInspector.js +58 -0
  401. package/dist/rules/components/DenialInspector.js.map +1 -0
  402. package/dist/rules/components/format.d.ts +56 -0
  403. package/dist/rules/components/format.d.ts.map +1 -0
  404. package/dist/rules/components/format.js +137 -0
  405. package/dist/rules/components/format.js.map +1 -0
  406. package/dist/rules/components/index.d.ts +4 -0
  407. package/dist/rules/components/index.d.ts.map +1 -0
  408. package/dist/rules/components/index.js +4 -0
  409. package/dist/rules/components/index.js.map +1 -0
  410. package/dist/rules/components/scope.d.ts +10 -0
  411. package/dist/rules/components/scope.d.ts.map +1 -0
  412. package/dist/rules/components/scope.js +72 -0
  413. package/dist/rules/components/scope.js.map +1 -0
  414. package/dist/rules/hooks/index.d.ts +2 -0
  415. package/dist/rules/hooks/index.d.ts.map +1 -0
  416. package/dist/rules/hooks/index.js +2 -0
  417. package/dist/rules/hooks/index.js.map +1 -0
  418. package/dist/rules/hooks/useDenialTrace.d.ts +51 -0
  419. package/dist/rules/hooks/useDenialTrace.d.ts.map +1 -0
  420. package/dist/rules/hooks/useDenialTrace.js +58 -0
  421. package/dist/rules/hooks/useDenialTrace.js.map +1 -0
  422. package/dist/rules/index.d.ts +14 -0
  423. package/dist/rules/index.d.ts.map +1 -0
  424. package/dist/rules/index.js +13 -0
  425. package/dist/rules/index.js.map +1 -0
  426. package/dist/rules/types.d.ts +75 -0
  427. package/dist/rules/types.d.ts.map +1 -0
  428. package/dist/rules/types.js +2 -0
  429. package/dist/rules/types.js.map +1 -0
  430. package/dist/storage/collisionRename.d.ts +73 -0
  431. package/dist/storage/collisionRename.d.ts.map +1 -0
  432. package/dist/storage/collisionRename.js +113 -0
  433. package/dist/storage/collisionRename.js.map +1 -0
  434. package/dist/storage/components/DeleteSelectionWithConfirm.d.ts +68 -0
  435. package/dist/storage/components/DeleteSelectionWithConfirm.d.ts.map +1 -0
  436. package/dist/storage/components/DeleteSelectionWithConfirm.js +82 -0
  437. package/dist/storage/components/DeleteSelectionWithConfirm.js.map +1 -0
  438. package/dist/storage/components/ObjectBrowser.d.ts +75 -0
  439. package/dist/storage/components/ObjectBrowser.d.ts.map +1 -0
  440. package/dist/storage/components/ObjectBrowser.js +59 -0
  441. package/dist/storage/components/ObjectBrowser.js.map +1 -0
  442. package/dist/storage/components/ObjectInspector.d.ts +43 -0
  443. package/dist/storage/components/ObjectInspector.d.ts.map +1 -0
  444. package/dist/storage/components/ObjectInspector.js +92 -0
  445. package/dist/storage/components/ObjectInspector.js.map +1 -0
  446. package/dist/storage/components/PathBreadcrumb.d.ts +30 -0
  447. package/dist/storage/components/PathBreadcrumb.d.ts.map +1 -0
  448. package/dist/storage/components/PathBreadcrumb.js +26 -0
  449. package/dist/storage/components/PathBreadcrumb.js.map +1 -0
  450. package/dist/storage/components/UploadDropzone.d.ts +50 -0
  451. package/dist/storage/components/UploadDropzone.d.ts.map +1 -0
  452. package/dist/storage/components/UploadDropzone.js +109 -0
  453. package/dist/storage/components/UploadDropzone.js.map +1 -0
  454. package/dist/storage/folderPlaceholder.d.ts +14 -0
  455. package/dist/storage/folderPlaceholder.d.ts.map +1 -0
  456. package/dist/storage/folderPlaceholder.js +27 -0
  457. package/dist/storage/folderPlaceholder.js.map +1 -0
  458. package/dist/storage/hooks/index.d.ts +9 -0
  459. package/dist/storage/hooks/index.d.ts.map +1 -0
  460. package/dist/storage/hooks/index.js +9 -0
  461. package/dist/storage/hooks/index.js.map +1 -0
  462. package/dist/storage/hooks/useMetadataEditor.d.ts +114 -0
  463. package/dist/storage/hooks/useMetadataEditor.d.ts.map +1 -0
  464. package/dist/storage/hooks/useMetadataEditor.js +193 -0
  465. package/dist/storage/hooks/useMetadataEditor.js.map +1 -0
  466. package/dist/storage/hooks/useObjectUpload.d.ts +109 -0
  467. package/dist/storage/hooks/useObjectUpload.d.ts.map +1 -0
  468. package/dist/storage/hooks/useObjectUpload.js +134 -0
  469. package/dist/storage/hooks/useObjectUpload.js.map +1 -0
  470. package/dist/storage/hooks/usePathState.d.ts +43 -0
  471. package/dist/storage/hooks/usePathState.d.ts.map +1 -0
  472. package/dist/storage/hooks/usePathState.js +42 -0
  473. package/dist/storage/hooks/usePathState.js.map +1 -0
  474. package/dist/storage/hooks/useStorageDelete.d.ts +73 -0
  475. package/dist/storage/hooks/useStorageDelete.d.ts.map +1 -0
  476. package/dist/storage/hooks/useStorageDelete.js +114 -0
  477. package/dist/storage/hooks/useStorageDelete.js.map +1 -0
  478. package/dist/storage/hooks/useStorageList.d.ts +74 -0
  479. package/dist/storage/hooks/useStorageList.d.ts.map +1 -0
  480. package/dist/storage/hooks/useStorageList.js +167 -0
  481. package/dist/storage/hooks/useStorageList.js.map +1 -0
  482. package/dist/storage/hooks/useStorageObject.d.ts +34 -0
  483. package/dist/storage/hooks/useStorageObject.d.ts.map +1 -0
  484. package/dist/storage/hooks/useStorageObject.js +114 -0
  485. package/dist/storage/hooks/useStorageObject.js.map +1 -0
  486. package/dist/storage/hooks/useStorageRulesGate.d.ts +128 -0
  487. package/dist/storage/hooks/useStorageRulesGate.d.ts.map +1 -0
  488. package/dist/storage/hooks/useStorageRulesGate.js +158 -0
  489. package/dist/storage/hooks/useStorageRulesGate.js.map +1 -0
  490. package/dist/storage/hooks/useStorageSelection.d.ts +32 -0
  491. package/dist/storage/hooks/useStorageSelection.d.ts.map +1 -0
  492. package/dist/storage/hooks/useStorageSelection.js +55 -0
  493. package/dist/storage/hooks/useStorageSelection.js.map +1 -0
  494. package/dist/storage/index.d.ts +11 -0
  495. package/dist/storage/index.d.ts.map +1 -0
  496. package/dist/storage/index.js +17 -0
  497. package/dist/storage/index.js.map +1 -0
  498. package/dist/storage/pendingPrefixes.d.ts +73 -0
  499. package/dist/storage/pendingPrefixes.d.ts.map +1 -0
  500. package/dist/storage/pendingPrefixes.js +98 -0
  501. package/dist/storage/pendingPrefixes.js.map +1 -0
  502. package/dist/storage/previews.d.ts +51 -0
  503. package/dist/storage/previews.d.ts.map +1 -0
  504. package/dist/storage/previews.js +73 -0
  505. package/dist/storage/previews.js.map +1 -0
  506. package/dist/storage/storageApi.d.ts +30 -0
  507. package/dist/storage/storageApi.d.ts.map +1 -0
  508. package/dist/storage/storageApi.js +13 -0
  509. package/dist/storage/storageApi.js.map +1 -0
  510. package/dist/traffic/components/RuleHeatmap.d.ts +34 -0
  511. package/dist/traffic/components/RuleHeatmap.d.ts.map +1 -0
  512. package/dist/traffic/components/RuleHeatmap.js +40 -0
  513. package/dist/traffic/components/RuleHeatmap.js.map +1 -0
  514. package/dist/traffic/components/TrafficDetail.d.ts +33 -0
  515. package/dist/traffic/components/TrafficDetail.d.ts.map +1 -0
  516. package/dist/traffic/components/TrafficDetail.js +28 -0
  517. package/dist/traffic/components/TrafficDetail.js.map +1 -0
  518. package/dist/traffic/components/TrafficGroupRow.d.ts +28 -0
  519. package/dist/traffic/components/TrafficGroupRow.d.ts.map +1 -0
  520. package/dist/traffic/components/TrafficGroupRow.js +18 -0
  521. package/dist/traffic/components/TrafficGroupRow.js.map +1 -0
  522. package/dist/traffic/components/TrafficLineChart.d.ts +34 -0
  523. package/dist/traffic/components/TrafficLineChart.d.ts.map +1 -0
  524. package/dist/traffic/components/TrafficLineChart.js +49 -0
  525. package/dist/traffic/components/TrafficLineChart.js.map +1 -0
  526. package/dist/traffic/components/TrafficLog.d.ts +52 -0
  527. package/dist/traffic/components/TrafficLog.d.ts.map +1 -0
  528. package/dist/traffic/components/TrafficLog.js +34 -0
  529. package/dist/traffic/components/TrafficLog.js.map +1 -0
  530. package/dist/traffic/components/TrafficMetricCards.d.ts +26 -0
  531. package/dist/traffic/components/TrafficMetricCards.d.ts.map +1 -0
  532. package/dist/traffic/components/TrafficMetricCards.js +24 -0
  533. package/dist/traffic/components/TrafficMetricCards.js.map +1 -0
  534. package/dist/traffic/components/TrafficRow.d.ts +40 -0
  535. package/dist/traffic/components/TrafficRow.d.ts.map +1 -0
  536. package/dist/traffic/components/TrafficRow.js +27 -0
  537. package/dist/traffic/components/TrafficRow.js.map +1 -0
  538. package/dist/traffic/components/TrafficStats.d.ts +18 -0
  539. package/dist/traffic/components/TrafficStats.d.ts.map +1 -0
  540. package/dist/traffic/components/TrafficStats.js +19 -0
  541. package/dist/traffic/components/TrafficStats.js.map +1 -0
  542. package/dist/traffic/components/TrafficTimeline.d.ts +81 -0
  543. package/dist/traffic/components/TrafficTimeline.d.ts.map +1 -0
  544. package/dist/traffic/components/TrafficTimeline.js +72 -0
  545. package/dist/traffic/components/TrafficTimeline.js.map +1 -0
  546. package/dist/traffic/components/format.d.ts +13 -0
  547. package/dist/traffic/components/format.d.ts.map +1 -0
  548. package/dist/traffic/components/format.js +24 -0
  549. package/dist/traffic/components/format.js.map +1 -0
  550. package/dist/traffic/components/index.d.ts +11 -0
  551. package/dist/traffic/components/index.d.ts.map +1 -0
  552. package/dist/traffic/components/index.js +11 -0
  553. package/dist/traffic/components/index.js.map +1 -0
  554. package/dist/traffic/hooks/index.d.ts +8 -0
  555. package/dist/traffic/hooks/index.d.ts.map +1 -0
  556. package/dist/traffic/hooks/index.js +8 -0
  557. package/dist/traffic/hooks/index.js.map +1 -0
  558. package/dist/traffic/hooks/useRuleHeatmap.d.ts +33 -0
  559. package/dist/traffic/hooks/useRuleHeatmap.d.ts.map +1 -0
  560. package/dist/traffic/hooks/useRuleHeatmap.js +54 -0
  561. package/dist/traffic/hooks/useRuleHeatmap.js.map +1 -0
  562. package/dist/traffic/hooks/useTrafficBuckets.d.ts +71 -0
  563. package/dist/traffic/hooks/useTrafficBuckets.d.ts.map +1 -0
  564. package/dist/traffic/hooks/useTrafficBuckets.js +74 -0
  565. package/dist/traffic/hooks/useTrafficBuckets.js.map +1 -0
  566. package/dist/traffic/hooks/useTrafficFilter.d.ts +40 -0
  567. package/dist/traffic/hooks/useTrafficFilter.d.ts.map +1 -0
  568. package/dist/traffic/hooks/useTrafficFilter.js +33 -0
  569. package/dist/traffic/hooks/useTrafficFilter.js.map +1 -0
  570. package/dist/traffic/hooks/useTrafficGroups.d.ts +47 -0
  571. package/dist/traffic/hooks/useTrafficGroups.d.ts.map +1 -0
  572. package/dist/traffic/hooks/useTrafficGroups.js +73 -0
  573. package/dist/traffic/hooks/useTrafficGroups.js.map +1 -0
  574. package/dist/traffic/hooks/useTrafficMetrics.d.ts +66 -0
  575. package/dist/traffic/hooks/useTrafficMetrics.d.ts.map +1 -0
  576. package/dist/traffic/hooks/useTrafficMetrics.js +156 -0
  577. package/dist/traffic/hooks/useTrafficMetrics.js.map +1 -0
  578. package/dist/traffic/hooks/useTrafficMonitor.d.ts +56 -0
  579. package/dist/traffic/hooks/useTrafficMonitor.d.ts.map +1 -0
  580. package/dist/traffic/hooks/useTrafficMonitor.js +58 -0
  581. package/dist/traffic/hooks/useTrafficMonitor.js.map +1 -0
  582. package/dist/traffic/hooks/useTrafficStats.d.ts +32 -0
  583. package/dist/traffic/hooks/useTrafficStats.d.ts.map +1 -0
  584. package/dist/traffic/hooks/useTrafficStats.js +45 -0
  585. package/dist/traffic/hooks/useTrafficStats.js.map +1 -0
  586. package/dist/traffic/index.d.ts +4 -0
  587. package/dist/traffic/index.d.ts.map +1 -0
  588. package/dist/traffic/index.js +3 -0
  589. package/dist/traffic/index.js.map +1 -0
  590. package/dist/traffic/types.d.ts +72 -0
  591. package/dist/traffic/types.d.ts.map +1 -0
  592. package/dist/traffic/types.js +10 -0
  593. package/dist/traffic/types.js.map +1 -0
  594. package/package.json +116 -0
@@ -0,0 +1,27 @@
1
+ import { createContext, createElement, useContext } from 'react';
2
+ import { sandbox as authSandbox } from 'pyric/auth';
3
+ const inProcessAuthApi = {
4
+ listUsers: authSandbox.listUsers,
5
+ subscribeUsers: authSandbox.subscribeUsers,
6
+ createUser: authSandbox.createUser,
7
+ updateUser: authSandbox.updateUser,
8
+ deleteUser: authSandbox.deleteUser,
9
+ clearUsers: authSandbox.clearUsers,
10
+ getAuthProviderConfig: authSandbox.getAuthProviderConfig,
11
+ setAuthProviderConfig: authSandbox.setAuthProviderConfig,
12
+ subscribeAuthProviderConfig: authSandbox.subscribeAuthProviderConfig,
13
+ };
14
+ const AuthApiContext = createContext(inProcessAuthApi);
15
+ /** Read the active auth API bundle (defaults to in-process `pyric/auth`). */
16
+ export function useAuthApi() {
17
+ return useContext(AuthApiContext);
18
+ }
19
+ /**
20
+ * Provide an auth API bundle to the subtree. Pyric Studio supplies the
21
+ * in-process bundle for dev-seed review and the SharedWorker client bundle under
22
+ * `pyric dev --ui`.
23
+ */
24
+ export function AuthApiProvider({ value, children, }) {
25
+ return createElement(AuthApiContext.Provider, { value }, children);
26
+ }
27
+ //# sourceMappingURL=authApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authApi.js","sourceRoot":"","sources":["../../src/auth/authApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AAsCpD,MAAM,gBAAgB,GAAY;IAChC,SAAS,EAAE,WAAW,CAAC,SAAS;IAChC,cAAc,EAAE,WAAW,CAAC,cAAc;IAC1C,UAAU,EAAE,WAAW,CAAC,UAAU;IAClC,UAAU,EAAE,WAAW,CAAC,UAAU;IAClC,UAAU,EAAE,WAAW,CAAC,UAAU;IAClC,UAAU,EAAE,WAAW,CAAC,UAAU;IAClC,qBAAqB,EAAE,WAAW,CAAC,qBAAqB;IACxD,qBAAqB,EAAE,WAAW,CAAC,qBAAqB;IACxD,2BAA2B,EAAE,WAAW,CAAC,2BAA2B;CACrE,CAAC;AAEF,MAAM,cAAc,GAAG,aAAa,CAAU,gBAAgB,CAAC,CAAC;AAEhE,6EAA6E;AAC7E,MAAM,UAAU,UAAU;IACxB,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,GAIT;IACC,OAAO,aAAa,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Custom-claims validation for the add-account form — same checks and
3
+ * user-facing messages as the Firebase emulator UI (which reuses the
4
+ * Auth emulator's server validation: JSON-object shape, 1000-char cap,
5
+ * reserved-key deny list).
6
+ */
7
+ /** Reserved JWT/OIDC keys the Auth emulator rejects as custom claims.
8
+ * https://firebase.google.com/docs/auth/admin/create-custom-tokens */
9
+ export declare const FORBIDDEN_CUSTOM_CLAIMS: readonly string[];
10
+ /** Serialized-length cap, matching the emulator's `CUSTOM_ATTRIBUTES_MAX_LENGTH`. */
11
+ export declare const CUSTOM_CLAIMS_MAX_LENGTH = 1000;
12
+ export type ClaimsValidationResult =
13
+ /** `claims` is `undefined` when the input was empty/whitespace. */
14
+ {
15
+ ok: true;
16
+ claims: Record<string, unknown> | undefined;
17
+ } | {
18
+ ok: false;
19
+ message: string;
20
+ };
21
+ /**
22
+ * Validate the claims textarea's raw text. Empty input is valid (no
23
+ * claims). Messages match the emulator UI verbatim so users see the
24
+ * same wording in both tools.
25
+ */
26
+ export declare function validateSerializedClaims(text: string): ClaimsValidationResult;
27
+ //# sourceMappingURL=claims.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claims.d.ts","sourceRoot":"","sources":["../../src/auth/claims.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;uEACuE;AACvE,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAiBpD,CAAC;AAEF,qFAAqF;AACrF,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,MAAM,MAAM,sBAAsB;AAChC,mEAAmE;AACjE;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;CAAE,GACzD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAqB7E"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Custom-claims validation for the add-account form — same checks and
3
+ * user-facing messages as the Firebase emulator UI (which reuses the
4
+ * Auth emulator's server validation: JSON-object shape, 1000-char cap,
5
+ * reserved-key deny list).
6
+ */
7
+ /** Reserved JWT/OIDC keys the Auth emulator rejects as custom claims.
8
+ * https://firebase.google.com/docs/auth/admin/create-custom-tokens */
9
+ export const FORBIDDEN_CUSTOM_CLAIMS = [
10
+ 'iss',
11
+ 'aud',
12
+ 'sub',
13
+ 'iat',
14
+ 'exp',
15
+ 'nbf',
16
+ 'jti',
17
+ 'nonce',
18
+ 'azp',
19
+ 'acr',
20
+ 'amr',
21
+ 'cnf',
22
+ 'auth_time',
23
+ 'firebase',
24
+ 'at_hash',
25
+ 'c_hash',
26
+ ];
27
+ /** Serialized-length cap, matching the emulator's `CUSTOM_ATTRIBUTES_MAX_LENGTH`. */
28
+ export const CUSTOM_CLAIMS_MAX_LENGTH = 1000;
29
+ /**
30
+ * Validate the claims textarea's raw text. Empty input is valid (no
31
+ * claims). Messages match the emulator UI verbatim so users see the
32
+ * same wording in both tools.
33
+ */
34
+ export function validateSerializedClaims(text) {
35
+ const trimmed = text.trim();
36
+ if (!trimmed)
37
+ return { ok: true, claims: undefined };
38
+ if (trimmed.length > CUSTOM_CLAIMS_MAX_LENGTH) {
39
+ return { ok: false, message: 'Custom claims length must not exceed 1000 characters' };
40
+ }
41
+ let parsed;
42
+ try {
43
+ parsed = JSON.parse(trimmed);
44
+ }
45
+ catch {
46
+ return { ok: false, message: 'Custom claims must be a valid JSON object' };
47
+ }
48
+ if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
49
+ return { ok: false, message: 'Custom claims must be a valid JSON object' };
50
+ }
51
+ for (const key of FORBIDDEN_CUSTOM_CLAIMS) {
52
+ if (key in parsed) {
53
+ return { ok: false, message: `Custom claims must not have forbidden key: ${key}` };
54
+ }
55
+ }
56
+ return { ok: true, claims: parsed };
57
+ }
58
+ //# sourceMappingURL=claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claims.js","sourceRoot":"","sources":["../../src/auth/claims.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;uEACuE;AACvE,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,OAAO;IACP,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,WAAW;IACX,UAAU;IACV,SAAS;IACT,QAAQ;CACT,CAAC;AAEF,qFAAqF;AACrF,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAO7C;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACrD,IAAI,OAAO,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC;QAC9C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,sDAAsD,EAAE,CAAC;IACxF,CAAC;IACD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;IAC7E,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;IAC7E,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,uBAAuB,EAAE,CAAC;QAC1C,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;YAClB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,8CAA8C,GAAG,EAAE,EAAE,CAAC;QACrF,CAAC;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAiC,EAAE,CAAC;AACjE,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { AuthProviderConfigEntry } from '../hooks/useAuthProviderConfig.js';
2
+ /** Providers always shown as a toggle row, regardless of whether the
3
+ * backend has an explicit entry for them yet (an unconfigured provider
4
+ * simply reads as disabled — same default the sandbox backend applies). */
5
+ export declare const DEFAULT_KNOWN_PROVIDER_IDS: readonly ["password", "anonymous", "google.com", "github.com", "apple.com", "microsoft.com"];
6
+ export interface AuthProviderTogglesProps {
7
+ /** Current config — usually `useAuthProviderConfig(auth).config`. */
8
+ config: AuthProviderConfigEntry[];
9
+ /** Fired when a toggle (known or custom) flips. */
10
+ onToggle: (providerId: string, enabled: boolean) => void;
11
+ /** Always-shown rows, in this order. Default: {@link DEFAULT_KNOWN_PROVIDER_IDS}. */
12
+ knownProviderIds?: readonly string[];
13
+ isLoading?: boolean;
14
+ error?: Error;
15
+ className?: string;
16
+ }
17
+ /**
18
+ * Headless "Sign-in providers" toggle grid — the Authentication → Sign-in
19
+ * method surface. Known providers (password / anonymous / the built-in OAuth
20
+ * set) always render as a row; any OTHER provider already present in
21
+ * `config` (a custom OAuth id a host previously added) also gets a row. A
22
+ * free-text field lets a consumer enable an arbitrary OAuth provider id not
23
+ * in the known set — this is a SECTION, not a dialog: the add row lives
24
+ * inline, no modal.
25
+ *
26
+ * Fully headless: styling hangs off `data-pyric-*`, matching the rest of
27
+ * `@pyric/ui/auth` (`AuthUserList`, `AuthUserForm`, …). Data + mutation come
28
+ * from `useAuthProviderConfig`; this component only renders + fires events.
29
+ */
30
+ export declare function AuthProviderToggles({ config, onToggle, knownProviderIds, isLoading, error, className, }: AuthProviderTogglesProps): import("react").JSX.Element;
31
+ //# sourceMappingURL=AuthProviderToggles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthProviderToggles.d.ts","sourceRoot":"","sources":["../../../src/auth/components/AuthProviderToggles.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAEjF;;4EAE4E;AAC5E,eAAO,MAAM,0BAA0B,8FAO7B,CAAC;AAEX,MAAM,WAAW,wBAAwB;IACvC,qEAAqE;IACrE,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAClC,mDAAmD;IACnD,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACzD,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,QAAQ,EACR,gBAA6C,EAC7C,SAAS,EACT,KAAK,EACL,SAAS,GACV,EAAE,wBAAwB,+BA2D1B"}
@@ -0,0 +1,48 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { providerLabel } from '../providers.js';
4
+ /** Providers always shown as a toggle row, regardless of whether the
5
+ * backend has an explicit entry for them yet (an unconfigured provider
6
+ * simply reads as disabled — same default the sandbox backend applies). */
7
+ export const DEFAULT_KNOWN_PROVIDER_IDS = [
8
+ 'password',
9
+ 'anonymous',
10
+ 'google.com',
11
+ 'github.com',
12
+ 'apple.com',
13
+ 'microsoft.com',
14
+ ];
15
+ function isEnabled(config, providerId) {
16
+ return config.find((c) => c.providerId === providerId)?.enabled ?? false;
17
+ }
18
+ /**
19
+ * Headless "Sign-in providers" toggle grid — the Authentication → Sign-in
20
+ * method surface. Known providers (password / anonymous / the built-in OAuth
21
+ * set) always render as a row; any OTHER provider already present in
22
+ * `config` (a custom OAuth id a host previously added) also gets a row. A
23
+ * free-text field lets a consumer enable an arbitrary OAuth provider id not
24
+ * in the known set — this is a SECTION, not a dialog: the add row lives
25
+ * inline, no modal.
26
+ *
27
+ * Fully headless: styling hangs off `data-pyric-*`, matching the rest of
28
+ * `@pyric/ui/auth` (`AuthUserList`, `AuthUserForm`, …). Data + mutation come
29
+ * from `useAuthProviderConfig`; this component only renders + fires events.
30
+ */
31
+ export function AuthProviderToggles({ config, onToggle, knownProviderIds = DEFAULT_KNOWN_PROVIDER_IDS, isLoading, error, className, }) {
32
+ const [customId, setCustomId] = useState('');
33
+ const customEntries = config.filter((c) => !knownProviderIds.includes(c.providerId));
34
+ const handleAdd = (e) => {
35
+ e.preventDefault();
36
+ const id = customId.trim();
37
+ if (!id)
38
+ return;
39
+ onToggle(id, true);
40
+ setCustomId('');
41
+ };
42
+ return (_jsxs("div", { className: className, "data-pyric-ui": "auth-provider-toggles", children: [error ? (_jsx("p", { "data-pyric-provider-toggles-error": true, role: "alert", children: error.message })) : null, _jsxs("div", { role: "list", "aria-label": "Sign-in providers", "data-pyric-provider-toggle-list": true, "data-pyric-loading": isLoading ? '' : undefined, children: [knownProviderIds.map((providerId) => (_jsx(ProviderToggleRow, { providerId: providerId, enabled: isEnabled(config, providerId), onToggle: onToggle }, providerId))), customEntries.map((entry) => (_jsx(ProviderToggleRow, { providerId: entry.providerId, enabled: entry.enabled, onToggle: onToggle, custom: true }, entry.providerId)))] }), _jsxs("form", { "data-pyric-add-provider-form": true, onSubmit: handleAdd, children: [_jsxs("label", { "data-pyric-field-label": "custom-provider-id", children: [_jsx("span", { "data-pyric-label-text": true, children: "Add a custom OAuth provider" }), _jsx("input", { type: "text", "data-pyric-field": "custom-provider-id", placeholder: "e.g. yahoo.com", value: customId, onChange: (e) => setCustomId(e.target.value) })] }), _jsx("button", { type: "submit", "data-pyric-add-provider": true, disabled: !customId.trim(), children: "Add" })] })] }));
43
+ }
44
+ function ProviderToggleRow({ providerId, enabled, onToggle, custom, }) {
45
+ const inputId = `auth-provider-toggle-${providerId}`;
46
+ return (_jsx("div", { role: "listitem", "data-pyric-provider-toggle": true, "data-pyric-provider-id": providerId, "data-pyric-provider-enabled": enabled ? '' : undefined, "data-pyric-provider-custom": custom ? '' : undefined, children: _jsxs("label", { htmlFor: inputId, "data-pyric-provider-toggle-label": true, children: [_jsx("input", { id: inputId, type: "checkbox", "data-pyric-field": "enabled", checked: enabled, onChange: (e) => onToggle(providerId, e.target.checked) }), _jsx("span", { "data-pyric-provider-toggle-name": true, children: providerLabel(providerId) }), _jsx("span", { "data-pyric-provider-toggle-id": true, children: providerId })] }) }));
47
+ }
48
+ //# sourceMappingURL=AuthProviderToggles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthProviderToggles.js","sourceRoot":"","sources":["../../../src/auth/components/AuthProviderToggles.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD;;4EAE4E;AAC5E,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,UAAU;IACV,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,eAAe;CACP,CAAC;AAcX,SAAS,SAAS,CAAC,MAAiC,EAAE,UAAkB;IACtE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,EAAE,OAAO,IAAI,KAAK,CAAC;AAC3E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAClC,MAAM,EACN,QAAQ,EACR,gBAAgB,GAAG,0BAA0B,EAC7C,SAAS,EACT,KAAK,EACL,SAAS,GACgB;IACzB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAE7C,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAChD,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,CAAY,EAAE,EAAE;QACjC,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACnB,WAAW,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAE,SAAS,mBAAgB,uBAAuB,aAC7D,KAAK,CAAC,CAAC,CAAC,CACP,uDAAqC,IAAI,EAAC,OAAO,YAC9C,KAAK,CAAC,OAAO,GACZ,CACL,CAAC,CAAC,CAAC,IAAI,EACR,eAAK,IAAI,EAAC,MAAM,gBAAY,mBAAmB,iEAAqD,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,aAC3H,gBAAgB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CACpC,KAAC,iBAAiB,IAEhB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,EACtC,QAAQ,EAAE,QAAQ,IAHb,UAAU,CAIf,CACH,CAAC,EACD,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAC5B,KAAC,iBAAiB,IAEhB,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,QAAQ,EAAE,QAAQ,EAClB,MAAM,UAJD,KAAK,CAAC,UAAU,CAKrB,CACH,CAAC,IACE,EAEN,sDAAmC,QAAQ,EAAE,SAAS,aACpD,2CAA8B,oBAAoB,aAChD,wFAA8D,EAC9D,gBACE,IAAI,EAAC,MAAM,sBACM,oBAAoB,EACrC,WAAW,EAAC,gBAAgB,EAC5B,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAC5C,IACI,EACR,iBAAQ,IAAI,EAAC,QAAQ,mCAAyB,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,oBAE/D,IACJ,IACH,CACP,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,EACzB,UAAU,EACV,OAAO,EACP,QAAQ,EACR,MAAM,GAMP;IACC,MAAM,OAAO,GAAG,wBAAwB,UAAU,EAAE,CAAC;IACrD,OAAO,CACL,cACE,IAAI,EAAC,UAAU,gEAES,UAAU,iCACL,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,gCACzB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,YAEnD,iBAAO,OAAO,EAAE,OAAO,uDACrB,gBACE,EAAE,EAAE,OAAO,EACX,IAAI,EAAC,UAAU,sBACE,SAAS,EAC1B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GACvD,EACF,kEAAuC,aAAa,CAAC,UAAU,CAAC,GAAQ,EACxE,gEAAqC,UAAU,GAAQ,IACjD,GACJ,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { HelperState, NewIdentitySpec, SandboxIdentity } from '../controller.js';
3
+ export interface AuthSignInHelperProps {
4
+ /** Snapshot from `useAuthFlowHelper`. Renders nothing while
5
+ * `state.request` is null. */
6
+ state: HelperState;
7
+ /** Settle with an existing identity (wire to the hook's `pick`). */
8
+ onPick: (uid: string) => void;
9
+ /** Create + sign in as a new identity (wire to the hook's `add`). */
10
+ onAdd: (spec: NewIdentitySpec) => void;
11
+ /** Dismiss the flow (wire to the hook's `cancel`). Rejects the app's
12
+ * sign-in promise with `auth/popup-closed-by-user`. */
13
+ onCancel: () => void;
14
+ /**
15
+ * Optional renderer for an account row's content. Default renders
16
+ * the display name (or email, or uid) plus the email when both
17
+ * exist. The row button + data attributes stay owned by the
18
+ * component; this slot only fills the button's children.
19
+ */
20
+ renderAccount?: (identity: SandboxIdentity) => ReactNode;
21
+ /** Heading text. Default: `Sign in with <provider label>`. */
22
+ title?: ReactNode;
23
+ /** Optional helper text rendered under the title
24
+ * (`[data-pyric-helper-description]`). Default: none. */
25
+ description?: ReactNode;
26
+ /** Prefill for the add-account form (e.g. a host-suggested email).
27
+ * Read once on mount; `claims` is the raw textarea JSON text. */
28
+ initialValues?: {
29
+ email?: string;
30
+ displayName?: string;
31
+ claims?: string;
32
+ };
33
+ className?: string;
34
+ }
35
+ /**
36
+ * Headless emulator-style sign-in helper: an account picker over the
37
+ * sandbox's known identities plus an add-account form (email, display
38
+ * name, custom-claims JSON with emulator-grade validation messages).
39
+ *
40
+ * Ships zero styling. Structure is addressable via the
41
+ * `data-pyric-*` contract:
42
+ *
43
+ * - root: `[data-pyric-ui="auth-signin-helper"]`,
44
+ * `[data-pyric-provider-id]`, `[data-pyric-auth-type]`
45
+ * - picker: `[data-pyric-account-list]` > `[data-pyric-account-entry]`
46
+ * > `button[data-pyric-account-pick]`
47
+ * - form: `form[data-pyric-add-account-form]`, fields
48
+ * `[data-pyric-field="email" | "display-name" | "claims"]`,
49
+ * `[data-pyric-claims-error]` (role=alert),
50
+ * `button[data-pyric-cancel]`, `button[data-pyric-submit]`
51
+ *
52
+ * Positioning is the consumer's job — render it inside your own modal
53
+ * or panel (the flow is host-UI-agnostic; only `onCancel` carries the
54
+ * popup-closed semantics).
55
+ */
56
+ export declare function AuthSignInHelper({ state, onPick, onAdd, onCancel, renderAccount, title, description, initialValues, className, }: AuthSignInHelperProps): import("react").JSX.Element | null;
57
+ //# sourceMappingURL=AuthSignInHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthSignInHelper.d.ts","sourceRoot":"","sources":["../../../src/auth/components/AuthSignInHelper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAItF,MAAM,WAAW,qBAAqB;IACpC;mCAC+B;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,oEAAoE;IACpE,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,qEAAqE;IACrE,KAAK,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,CAAC;IACvC;4DACwD;IACxD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,SAAS,CAAC;IACzD,8DAA8D;IAC9D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;8DAC0D;IAC1D,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;sEACkE;IAClE,aAAa,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,MAAM,EACN,KAAK,EACL,QAAQ,EACR,aAAa,EACb,KAAK,EACL,WAAW,EACX,aAAa,EACb,SAAS,GACV,EAAE,qBAAqB,sCAmIvB"}
@@ -0,0 +1,69 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { validateSerializedClaims } from '../claims.js';
4
+ import { providerLabel } from '../providers.js';
5
+ /**
6
+ * Headless emulator-style sign-in helper: an account picker over the
7
+ * sandbox's known identities plus an add-account form (email, display
8
+ * name, custom-claims JSON with emulator-grade validation messages).
9
+ *
10
+ * Ships zero styling. Structure is addressable via the
11
+ * `data-pyric-*` contract:
12
+ *
13
+ * - root: `[data-pyric-ui="auth-signin-helper"]`,
14
+ * `[data-pyric-provider-id]`, `[data-pyric-auth-type]`
15
+ * - picker: `[data-pyric-account-list]` > `[data-pyric-account-entry]`
16
+ * > `button[data-pyric-account-pick]`
17
+ * - form: `form[data-pyric-add-account-form]`, fields
18
+ * `[data-pyric-field="email" | "display-name" | "claims"]`,
19
+ * `[data-pyric-claims-error]` (role=alert),
20
+ * `button[data-pyric-cancel]`, `button[data-pyric-submit]`
21
+ *
22
+ * Positioning is the consumer's job — render it inside your own modal
23
+ * or panel (the flow is host-UI-agnostic; only `onCancel` carries the
24
+ * popup-closed semantics).
25
+ */
26
+ export function AuthSignInHelper({ state, onPick, onAdd, onCancel, renderAccount, title, description, initialValues, className, }) {
27
+ const [email, setEmail] = useState(initialValues?.email ?? '');
28
+ const [displayName, setDisplayName] = useState(initialValues?.displayName ?? '');
29
+ const [claims, setClaims] = useState(initialValues?.claims ?? '');
30
+ const [claimsError, setClaimsError] = useState(null);
31
+ if (!state.request)
32
+ return null;
33
+ const { providerId, authType } = state.request;
34
+ const label = providerLabel(providerId);
35
+ const reset = () => {
36
+ setEmail('');
37
+ setDisplayName('');
38
+ setClaims('');
39
+ setClaimsError(null);
40
+ };
41
+ const cancel = () => {
42
+ onCancel();
43
+ reset();
44
+ };
45
+ const submit = (e) => {
46
+ e.preventDefault();
47
+ const result = validateSerializedClaims(claims);
48
+ if (!result.ok) {
49
+ setClaimsError(result.message);
50
+ return;
51
+ }
52
+ if (!email.trim())
53
+ return;
54
+ onAdd({
55
+ email: email.trim(),
56
+ displayName: displayName.trim() || undefined,
57
+ customClaims: result.claims,
58
+ });
59
+ reset();
60
+ };
61
+ return (_jsxs("section", { className: className, "data-pyric-ui": "auth-signin-helper", "data-pyric-provider-id": providerId, "data-pyric-auth-type": authType, "aria-label": `Sign in with ${label}`, children: [_jsxs("header", { "data-pyric-helper-header": true, children: [_jsx("h2", { "data-pyric-helper-title": true, children: title ?? `Sign in with ${label}` }), description != null && _jsx("p", { "data-pyric-helper-description": true, children: description })] }), state.identities.length > 0 && (_jsx("ul", { "data-pyric-account-list": true, children: state.identities.map((identity) => (_jsx("li", { "data-pyric-account-entry": true, "data-pyric-account-uid": identity.uid, "data-pyric-provider-id": identity.providerId, children: _jsx("button", { type: "button", "data-pyric-account-pick": true, onClick: () => {
62
+ onPick(identity.uid);
63
+ reset();
64
+ }, children: renderAccount ? (renderAccount(identity)) : (_jsxs(_Fragment, { children: [_jsx("span", { "data-pyric-account-name": true, children: identity.displayName || identity.email || identity.uid }), identity.email && identity.displayName ? (_jsx("span", { "data-pyric-account-email": true, children: identity.email })) : null] })) }) }, identity.uid))) })), _jsxs("form", { "data-pyric-add-account-form": true, onSubmit: submit, children: [_jsx("input", { type: "email", "data-pyric-field": "email", "aria-label": "Email", placeholder: "email@example.com", value: email, onChange: (e) => setEmail(e.target.value) }), _jsx("input", { type: "text", "data-pyric-field": "display-name", "aria-label": "Display name (optional)", placeholder: "Display name (optional)", value: displayName, onChange: (e) => setDisplayName(e.target.value) }), _jsx("textarea", { "data-pyric-field": "claims", "data-pyric-claims-invalid": claimsError != null ? '' : undefined, "aria-label": "Custom claims (optional)", "aria-invalid": claimsError != null || undefined, placeholder: 'Enter valid json, e.g. {"role":"admin"}', value: claims, onChange: (e) => {
65
+ setClaims(e.target.value);
66
+ setClaimsError(null);
67
+ } }), claimsError != null && (_jsx("p", { role: "alert", "data-pyric-claims-error": true, children: claimsError })), _jsxs("footer", { "data-pyric-helper-actions": true, children: [_jsx("button", { type: "button", "data-pyric-cancel": true, onClick: cancel, children: "Cancel" }), _jsx("button", { type: "submit", "data-pyric-submit": true, disabled: !email.trim(), children: "Sign in" })] })] })] }));
68
+ }
69
+ //# sourceMappingURL=AuthSignInHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthSignInHelper.js","sourceRoot":"","sources":["../../../src/auth/components/AuthSignInHelper.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAkC,MAAM,OAAO,CAAC;AAEjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA+BhD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,KAAK,EACL,MAAM,EACN,KAAK,EACL,QAAQ,EACR,aAAa,EACb,KAAK,EACL,WAAW,EACX,aAAa,EACb,SAAS,GACa;IACtB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,aAAa,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;IACjF,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAEpE,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IAC/C,MAAM,KAAK,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAExC,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,QAAQ,CAAC,EAAE,CAAC,CAAC;QACb,cAAc,CAAC,EAAE,CAAC,CAAC;QACnB,SAAS,CAAC,EAAE,CAAC,CAAC;QACd,cAAc,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,CAAC;IACV,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,CAAY,EAAE,EAAE;QAC9B,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,OAAO;QAC1B,KAAK,CAAC;YACJ,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;YACnB,WAAW,EAAE,WAAW,CAAC,IAAI,EAAE,IAAI,SAAS;YAC5C,YAAY,EAAE,MAAM,CAAC,MAAM;SAC5B,CAAC,CAAC;QACH,KAAK,EAAE,CAAC;IACV,CAAC,CAAC;IAEF,OAAO,CACL,mBACE,SAAS,EAAE,SAAS,mBACN,oBAAoB,4BACV,UAAU,0BACZ,QAAQ,gBAClB,gBAAgB,KAAK,EAAE,aAEnC,+DACE,wDAA6B,KAAK,IAAI,gBAAgB,KAAK,EAAE,GAAM,EAClE,WAAW,IAAI,IAAI,IAAI,6DAAkC,WAAW,GAAK,IACnE,EAER,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAC9B,wDACG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAClC,yEAG0B,QAAQ,CAAC,GAAG,4BACZ,QAAQ,CAAC,UAAU,YAE3C,iBACE,IAAI,EAAC,QAAQ,mCAEb,OAAO,EAAE,GAAG,EAAE;4BACZ,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;4BACrB,KAAK,EAAE,CAAC;wBACV,CAAC,YAEA,aAAa,CAAC,CAAC,CAAC,CACf,aAAa,CAAC,QAAQ,CAAC,CACxB,CAAC,CAAC,CAAC,CACF,8BACE,0DACG,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,GAAG,GAClD,EACN,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CACxC,2DAAgC,QAAQ,CAAC,KAAK,GAAQ,CACvD,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,GACM,IAzBJ,QAAQ,CAAC,GAAG,CA0Bd,CACN,CAAC,GACC,CACN,EAED,qDAAkC,QAAQ,EAAE,MAAM,aAChD,gBACE,IAAI,EAAC,OAAO,sBACK,OAAO,gBACb,OAAO,EAClB,WAAW,EAAC,mBAAmB,EAC/B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GACzC,EACF,gBACE,IAAI,EAAC,MAAM,sBACM,cAAc,gBACpB,yBAAyB,EACpC,WAAW,EAAC,yBAAyB,EACrC,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAC/C,EACF,uCACmB,QAAQ,+BACE,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,gBACpD,0BAA0B,kBACvB,WAAW,IAAI,IAAI,IAAI,SAAS,EAC9C,WAAW,EAAE,yCAAyC,EACtD,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;4BACd,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BAC1B,cAAc,CAAC,IAAI,CAAC,CAAC;wBACvB,CAAC,GACD,EACD,WAAW,IAAI,IAAI,IAAI,CACtB,YAAG,IAAI,EAAC,OAAO,6CACZ,WAAW,GACV,CACL,EACD,gEACE,iBAAQ,IAAI,EAAC,QAAQ,6BAAmB,OAAO,EAAE,MAAM,uBAE9C,EACT,iBAAQ,IAAI,EAAC,QAAQ,6BAAmB,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,wBAEtD,IACF,IACJ,IACC,CACX,CAAC;AACJ,CAAC"}
@@ -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,51 @@
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 action slot (edit / disable / delete menu). Rendered in a
22
+ * trailing cell; column header is added when this is provided. */
23
+ renderActions?: (user: AuthUserRecord) => ReactNode;
24
+ /** Timestamp formatter for Created / Signed In. Default: locale date,
25
+ * em dash for null. */
26
+ formatDate?: (iso: string | null) => ReactNode;
27
+ /** Zero state when the project has no users at all. */
28
+ emptyState?: ReactNode;
29
+ /** Zero state when the filter matches nothing. */
30
+ noResultsState?: ReactNode;
31
+ className?: string;
32
+ /** Above this row count, rows render through `<VirtualList>`.
33
+ * Default 100. `Infinity` disables. */
34
+ virtualizeThreshold?: number;
35
+ /** Estimated row height when virtualizing. Default 44. */
36
+ rowHeight?: number | ((index: number) => number);
37
+ /** Scroll-container height when virtualized. Default `'60vh'`. */
38
+ virtualizedHeight?: number | string;
39
+ }
40
+ /**
41
+ * Headless users table — the emulator UI's columns (Identifier,
42
+ * Provider, Created, Signed In, User UID, actions) over the
43
+ * `data-pyric-*` styling contract, with role-based table semantics so
44
+ * rows can virtualize (a real `<table>` can't wrap a scroll container).
45
+ *
46
+ * The hook (`useAuthUsers`) owns data + filter state; this component
47
+ * just renders. Disabled accounts carry `data-pyric-user-disabled` for
48
+ * dimmed styling.
49
+ */
50
+ export declare function AuthUserList({ users, isLoading, error, filter, onSelect, renderIdentifier, renderProviders, renderActions, formatDate, emptyState, noResultsState, className, virtualizeThreshold, rowHeight, virtualizedHeight, }: AuthUserListProps): import("react").JSX.Element;
51
+ //# 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,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,SAAS,CAAC;IACpD;4BACwB;IACxB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC;IAC/C,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,aAAa,EACb,UAA8B,EAC9B,UAAU,EACV,cAAc,EACd,SAAS,EACT,mBAAyB,EACzB,SAAc,EACd,iBAA0B,GAC3B,EAAE,iBAAiB,+BAmGnB"}