@byline/ui 0.9.3

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 (368) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +17 -0
  3. package/dist/admin/components/admin-account/change-password.d.ts +9 -0
  4. package/dist/admin/components/admin-account/change-password.d.ts.map +1 -0
  5. package/dist/admin/components/admin-account/change-password.js +192 -0
  6. package/dist/admin/components/admin-account/change-password.module.js +8 -0
  7. package/dist/admin/components/admin-account/change-password_module.css +27 -0
  8. package/dist/admin/components/admin-account/container.d.ts +30 -0
  9. package/dist/admin/components/admin-account/container.d.ts.map +1 -0
  10. package/dist/admin/components/admin-account/container.js +299 -0
  11. package/dist/admin/components/admin-account/container.module.js +28 -0
  12. package/dist/admin/components/admin-account/container_module.css +106 -0
  13. package/dist/admin/components/admin-account/update.d.ts +9 -0
  14. package/dist/admin/components/admin-account/update.d.ts.map +1 -0
  15. package/dist/admin/components/admin-account/update.js +207 -0
  16. package/dist/admin/components/admin-account/update.module.js +8 -0
  17. package/dist/admin/components/admin-account/update_module.css +27 -0
  18. package/dist/admin/components/admin-permissions/inspector.d.ts +5 -0
  19. package/dist/admin/components/admin-permissions/inspector.d.ts.map +1 -0
  20. package/dist/admin/components/admin-permissions/inspector.js +284 -0
  21. package/dist/admin/components/admin-permissions/inspector.module.js +56 -0
  22. package/dist/admin/components/admin-permissions/inspector_module.css +238 -0
  23. package/dist/admin/components/admin-roles/create.d.ts +8 -0
  24. package/dist/admin/components/admin-roles/create.d.ts.map +1 -0
  25. package/dist/admin/components/admin-roles/create.js +177 -0
  26. package/dist/admin/components/admin-roles/create.module.js +8 -0
  27. package/dist/admin/components/admin-roles/create_module.css +27 -0
  28. package/dist/admin/components/admin-roles/permissions.d.ts +11 -0
  29. package/dist/admin/components/admin-roles/permissions.d.ts.map +1 -0
  30. package/dist/admin/components/admin-roles/permissions.js +303 -0
  31. package/dist/admin/components/admin-roles/permissions.module.js +44 -0
  32. package/dist/admin/components/admin-roles/permissions_module.css +192 -0
  33. package/dist/admin/components/admin-roles/update.d.ts +9 -0
  34. package/dist/admin/components/admin-roles/update.d.ts.map +1 -0
  35. package/dist/admin/components/admin-roles/update.js +166 -0
  36. package/dist/admin/components/admin-roles/update.module.js +8 -0
  37. package/dist/admin/components/admin-roles/update_module.css +27 -0
  38. package/dist/admin/components/admin-users/create.d.ts +9 -0
  39. package/dist/admin/components/admin-users/create.d.ts.map +1 -0
  40. package/dist/admin/components/admin-users/create.js +268 -0
  41. package/dist/admin/components/admin-users/create.module.js +10 -0
  42. package/dist/admin/components/admin-users/create_module.css +45 -0
  43. package/dist/admin/components/admin-users/roles.d.ts +12 -0
  44. package/dist/admin/components/admin-users/roles.d.ts.map +1 -0
  45. package/dist/admin/components/admin-users/roles.js +148 -0
  46. package/dist/admin/components/admin-users/roles.module.js +18 -0
  47. package/dist/admin/components/admin-users/roles_module.css +75 -0
  48. package/dist/admin/components/admin-users/set-password.d.ts +9 -0
  49. package/dist/admin/components/admin-users/set-password.d.ts.map +1 -0
  50. package/dist/admin/components/admin-users/set-password.js +170 -0
  51. package/dist/admin/components/admin-users/set-password.module.js +9 -0
  52. package/dist/admin/components/admin-users/set-password_module.css +31 -0
  53. package/dist/admin/components/admin-users/update.d.ts +9 -0
  54. package/dist/admin/components/admin-users/update.d.ts.map +1 -0
  55. package/dist/admin/components/admin-users/update.js +254 -0
  56. package/dist/admin/components/admin-users/update.module.js +9 -0
  57. package/dist/admin/components/admin-users/update_module.css +34 -0
  58. package/dist/admin/components/auth/sign-in-form.d.ts +14 -0
  59. package/dist/admin/components/auth/sign-in-form.d.ts.map +1 -0
  60. package/dist/admin/components/auth/sign-in-form.js +107 -0
  61. package/dist/admin/components/auth/sign-in-form.module.js +10 -0
  62. package/dist/admin/components/auth/sign-in-form_module.css +35 -0
  63. package/dist/admin/components/collections/diff-modal.d.ts +23 -0
  64. package/dist/admin/components/collections/diff-modal.d.ts.map +1 -0
  65. package/dist/admin/components/collections/diff-modal.js +147 -0
  66. package/dist/admin/components/collections/diff-modal.module.js +14 -0
  67. package/dist/admin/components/collections/diff-modal_module.css +56 -0
  68. package/dist/admin/components/collections/status-badge.d.ts +26 -0
  69. package/dist/admin/components/collections/status-badge.d.ts.map +1 -0
  70. package/dist/admin/components/collections/status-badge.js +35 -0
  71. package/dist/admin/components/collections/status-badge.module.js +7 -0
  72. package/dist/admin/components/collections/status-badge_module.css +20 -0
  73. package/dist/admin/group.d.ts +28 -0
  74. package/dist/admin/group.d.ts.map +1 -0
  75. package/dist/admin/group.js +14 -0
  76. package/dist/admin/group.module.js +6 -0
  77. package/dist/admin/group_module.css +19 -0
  78. package/dist/admin/row.d.ts +26 -0
  79. package/dist/admin/row.d.ts.map +1 -0
  80. package/dist/admin/row.js +8 -0
  81. package/dist/admin/row.module.js +5 -0
  82. package/dist/admin/row_module.css +18 -0
  83. package/dist/admin/tabs.d.ts +33 -0
  84. package/dist/admin/tabs.d.ts.map +1 -0
  85. package/dist/admin/tabs.js +34 -0
  86. package/dist/admin/tabs.module.js +10 -0
  87. package/dist/admin/tabs_module.css +68 -0
  88. package/dist/dnd/draggable-sortable/demo/draggable-list-demo.js +105 -0
  89. package/dist/dnd/draggable-sortable/demo/draggable-list-demo.module.js +12 -0
  90. package/dist/dnd/draggable-sortable/demo/draggable-list-demo_module.css +39 -0
  91. package/dist/dnd/draggable-sortable/draggable-sortable-item/index.d.ts +19 -0
  92. package/dist/dnd/draggable-sortable/draggable-sortable-item/index.d.ts.map +1 -0
  93. package/dist/dnd/draggable-sortable/draggable-sortable-item/index.js +27 -0
  94. package/dist/dnd/draggable-sortable/draggable-sortable-item/types.d.ts +25 -0
  95. package/dist/dnd/draggable-sortable/draggable-sortable-item/types.d.ts.map +1 -0
  96. package/dist/dnd/draggable-sortable/draggable-sortable-item/types.js +1 -0
  97. package/dist/dnd/draggable-sortable/draggable-sortable.d.ts +17 -0
  98. package/dist/dnd/draggable-sortable/draggable-sortable.d.ts.map +1 -0
  99. package/dist/dnd/draggable-sortable/draggable-sortable.js +46 -0
  100. package/dist/dnd/draggable-sortable/index.d.ts +5 -0
  101. package/dist/dnd/draggable-sortable/index.d.ts.map +1 -0
  102. package/dist/dnd/draggable-sortable/index.js +4 -0
  103. package/dist/dnd/draggable-sortable/types.d.ts +26 -0
  104. package/dist/dnd/draggable-sortable/types.d.ts.map +1 -0
  105. package/dist/dnd/draggable-sortable/types.js +1 -0
  106. package/dist/dnd/draggable-sortable/use-draggable-sortable/index.d.ts +16 -0
  107. package/dist/dnd/draggable-sortable/use-draggable-sortable/index.d.ts.map +1 -0
  108. package/dist/dnd/draggable-sortable/use-draggable-sortable/index.js +28 -0
  109. package/dist/dnd/draggable-sortable/use-draggable-sortable/types.d.ts +23 -0
  110. package/dist/dnd/draggable-sortable/use-draggable-sortable/types.d.ts.map +1 -0
  111. package/dist/dnd/draggable-sortable/use-draggable-sortable/types.js +1 -0
  112. package/dist/dnd/draggable-sortable/utils.d.ts +14 -0
  113. package/dist/dnd/draggable-sortable/utils.d.ts.map +1 -0
  114. package/dist/dnd/draggable-sortable/utils.js +10 -0
  115. package/dist/fields/array/array-field.d.ts +15 -0
  116. package/dist/fields/array/array-field.d.ts.map +1 -0
  117. package/dist/fields/array/array-field.js +176 -0
  118. package/dist/fields/array/array-field.module.js +11 -0
  119. package/dist/fields/array/array-field_module.css +32 -0
  120. package/dist/fields/blocks/blocks-field.d.ts +14 -0
  121. package/dist/fields/blocks/blocks-field.d.ts.map +1 -0
  122. package/dist/fields/blocks/blocks-field.js +244 -0
  123. package/dist/fields/blocks/blocks-field.module.js +26 -0
  124. package/dist/fields/blocks/blocks-field_module.css +107 -0
  125. package/dist/fields/checkbox/checkbox-field.d.ts +17 -0
  126. package/dist/fields/checkbox/checkbox-field.d.ts.map +1 -0
  127. package/dist/fields/checkbox/checkbox-field.js +27 -0
  128. package/dist/fields/column-formatter.d.ts +21 -0
  129. package/dist/fields/column-formatter.d.ts.map +1 -0
  130. package/dist/fields/column-formatter.js +15 -0
  131. package/dist/fields/date-time-formatter.d.ts +17 -0
  132. package/dist/fields/date-time-formatter.d.ts.map +1 -0
  133. package/dist/fields/date-time-formatter.js +8 -0
  134. package/dist/fields/datetime/datetime-field.d.ts +17 -0
  135. package/dist/fields/datetime/datetime-field.d.ts.map +1 -0
  136. package/dist/fields/datetime/datetime-field.js +37 -0
  137. package/dist/fields/datetime/datetime-field.module.js +5 -0
  138. package/dist/fields/datetime/datetime-field_module.css +4 -0
  139. package/dist/fields/draggable-context-menu.d.ts +7 -0
  140. package/dist/fields/draggable-context-menu.d.ts.map +1 -0
  141. package/dist/fields/draggable-context-menu.js +83 -0
  142. package/dist/fields/draggable-context-menu.module.js +15 -0
  143. package/dist/fields/draggable-context-menu_module.css +91 -0
  144. package/dist/fields/field-helpers.d.ts +27 -0
  145. package/dist/fields/field-helpers.d.ts.map +1 -0
  146. package/dist/fields/field-helpers.js +48 -0
  147. package/dist/fields/field-renderer.d.ts +31 -0
  148. package/dist/fields/field-renderer.d.ts.map +1 -0
  149. package/dist/fields/field-renderer.js +189 -0
  150. package/dist/fields/field-renderer.module.js +8 -0
  151. package/dist/fields/field-renderer_module.css +11 -0
  152. package/dist/fields/file/file-field.d.ts +18 -0
  153. package/dist/fields/file/file-field.d.ts.map +1 -0
  154. package/dist/fields/file/file-field.js +125 -0
  155. package/dist/fields/file/file-field.module.js +13 -0
  156. package/dist/fields/file/file-field_module.css +64 -0
  157. package/dist/fields/group/group-field.d.ts +16 -0
  158. package/dist/fields/group/group-field.d.ts.map +1 -0
  159. package/dist/fields/group/group-field.js +59 -0
  160. package/dist/fields/group/group-field.module.js +9 -0
  161. package/dist/fields/group/group-field_module.css +27 -0
  162. package/dist/fields/image/image-field.d.ts +20 -0
  163. package/dist/fields/image/image-field.d.ts.map +1 -0
  164. package/dist/fields/image/image-field.js +198 -0
  165. package/dist/fields/image/image-field.module.js +21 -0
  166. package/dist/fields/image/image-field_module.css +96 -0
  167. package/dist/fields/image/image-upload-field.d.ts +22 -0
  168. package/dist/fields/image/image-upload-field.d.ts.map +1 -0
  169. package/dist/fields/image/image-upload-field.js +187 -0
  170. package/dist/fields/image/image-upload-field.module.js +19 -0
  171. package/dist/fields/image/image-upload-field_module.css +92 -0
  172. package/dist/fields/local-date-time.d.ts +28 -0
  173. package/dist/fields/local-date-time.d.ts.map +1 -0
  174. package/dist/fields/local-date-time.js +49 -0
  175. package/dist/fields/locale-badge.d.ts +19 -0
  176. package/dist/fields/locale-badge.d.ts.map +1 -0
  177. package/dist/fields/locale-badge.js +10 -0
  178. package/dist/fields/locale-badge.module.js +5 -0
  179. package/dist/fields/locale-badge_module.css +27 -0
  180. package/dist/fields/numerical/numerical-field.d.ts +19 -0
  181. package/dist/fields/numerical/numerical-field.d.ts.map +1 -0
  182. package/dist/fields/numerical/numerical-field.js +73 -0
  183. package/dist/fields/relation/relation-display.d.ts +41 -0
  184. package/dist/fields/relation/relation-display.d.ts.map +1 -0
  185. package/dist/fields/relation/relation-display.js +58 -0
  186. package/dist/fields/relation/relation-display.module.js +9 -0
  187. package/dist/fields/relation/relation-display_module.css +21 -0
  188. package/dist/fields/relation/relation-field.d.ts +19 -0
  189. package/dist/fields/relation/relation-field.d.ts.map +1 -0
  190. package/dist/fields/relation/relation-field.js +133 -0
  191. package/dist/fields/relation/relation-field.module.js +13 -0
  192. package/dist/fields/relation/relation-field_module.css +62 -0
  193. package/dist/fields/relation/relation-picker.d.ts +50 -0
  194. package/dist/fields/relation/relation-picker.d.ts.map +1 -0
  195. package/dist/fields/relation/relation-picker.js +233 -0
  196. package/dist/fields/relation/relation-picker.module.js +26 -0
  197. package/dist/fields/relation/relation-picker_module.css +124 -0
  198. package/dist/fields/relation/relation-summary.d.ts +32 -0
  199. package/dist/fields/relation/relation-summary.d.ts.map +1 -0
  200. package/dist/fields/relation/relation-summary.js +50 -0
  201. package/dist/fields/relation/relation-summary.module.js +11 -0
  202. package/dist/fields/relation/relation-summary_module.css +37 -0
  203. package/dist/fields/select/select-field.d.ts +17 -0
  204. package/dist/fields/select/select-field.d.ts.map +1 -0
  205. package/dist/fields/select/select-field.js +42 -0
  206. package/dist/fields/select/select-field.module.js +5 -0
  207. package/dist/fields/select/select-field_module.css +4 -0
  208. package/dist/fields/sortable-item.d.ts +16 -0
  209. package/dist/fields/sortable-item.d.ts.map +1 -0
  210. package/dist/fields/sortable-item.js +80 -0
  211. package/dist/fields/sortable-item.module.js +22 -0
  212. package/dist/fields/sortable-item_module.css +124 -0
  213. package/dist/fields/text/text-field.d.ts +21 -0
  214. package/dist/fields/text/text-field.d.ts.map +1 -0
  215. package/dist/fields/text/text-field.js +104 -0
  216. package/dist/fields/text/text-field.module.js +6 -0
  217. package/dist/fields/text/text-field_module.css +5 -0
  218. package/dist/fields/text-area/text-area-field.d.ts +21 -0
  219. package/dist/fields/text-area/text-area-field.d.ts.map +1 -0
  220. package/dist/fields/text-area/text-area-field.js +105 -0
  221. package/dist/fields/text-area/text-area-field.module.js +6 -0
  222. package/dist/fields/text-area/text-area-field_module.css +5 -0
  223. package/dist/fields/use-field-change-handler.d.ts +24 -0
  224. package/dist/fields/use-field-change-handler.d.ts.map +1 -0
  225. package/dist/fields/use-field-change-handler.js +52 -0
  226. package/dist/forms/document-actions.d.ts +14 -0
  227. package/dist/forms/document-actions.d.ts.map +1 -0
  228. package/dist/forms/document-actions.js +153 -0
  229. package/dist/forms/document-actions.module.js +18 -0
  230. package/dist/forms/document-actions_module.css +66 -0
  231. package/dist/forms/form-context.d.ts +78 -0
  232. package/dist/forms/form-context.d.ts.map +1 -0
  233. package/dist/forms/form-context.js +420 -0
  234. package/dist/forms/form-renderer.d.ts +66 -0
  235. package/dist/forms/form-renderer.d.ts.map +1 -0
  236. package/dist/forms/form-renderer.js +555 -0
  237. package/dist/forms/form-renderer.module.js +46 -0
  238. package/dist/forms/form-renderer_module.css +242 -0
  239. package/dist/forms/navigation-guard.d.ts +55 -0
  240. package/dist/forms/navigation-guard.d.ts.map +1 -0
  241. package/dist/forms/navigation-guard.js +22 -0
  242. package/dist/forms/path-widget.d.ts +33 -0
  243. package/dist/forms/path-widget.d.ts.map +1 -0
  244. package/dist/forms/path-widget.js +101 -0
  245. package/dist/forms/path-widget.module.js +8 -0
  246. package/dist/forms/path-widget_module.css +29 -0
  247. package/dist/forms/upload-executor.d.ts +58 -0
  248. package/dist/forms/upload-executor.d.ts.map +1 -0
  249. package/dist/forms/upload-executor.js +92 -0
  250. package/dist/react.d.ts +55 -0
  251. package/dist/react.d.ts.map +1 -0
  252. package/dist/react.js +48 -0
  253. package/dist/services/admin-services-context.d.ts +17 -0
  254. package/dist/services/admin-services-context.d.ts.map +1 -0
  255. package/dist/services/admin-services-context.js +13 -0
  256. package/dist/services/admin-services-types.d.ts +130 -0
  257. package/dist/services/admin-services-types.d.ts.map +1 -0
  258. package/dist/services/admin-services-types.js +1 -0
  259. package/dist/services/field-services-context.d.ts +17 -0
  260. package/dist/services/field-services-context.d.ts.map +1 -0
  261. package/dist/services/field-services-context.js +13 -0
  262. package/dist/services/field-services-types.d.ts +64 -0
  263. package/dist/services/field-services-types.d.ts.map +1 -0
  264. package/dist/services/field-services-types.js +1 -0
  265. package/package.json +133 -0
  266. package/src/admin/components/admin-account/change-password.module.css +40 -0
  267. package/src/admin/components/admin-account/change-password.tsx +232 -0
  268. package/src/admin/components/admin-account/container.module.css +158 -0
  269. package/src/admin/components/admin-account/container.tsx +230 -0
  270. package/src/admin/components/admin-account/update.module.css +40 -0
  271. package/src/admin/components/admin-account/update.tsx +263 -0
  272. package/src/admin/components/admin-permissions/inspector.module.css +326 -0
  273. package/src/admin/components/admin-permissions/inspector.tsx +298 -0
  274. package/src/admin/components/admin-roles/create.module.css +40 -0
  275. package/src/admin/components/admin-roles/create.tsx +218 -0
  276. package/src/admin/components/admin-roles/permissions.module.css +279 -0
  277. package/src/admin/components/admin-roles/permissions.tsx +396 -0
  278. package/src/admin/components/admin-roles/update.module.css +40 -0
  279. package/src/admin/components/admin-roles/update.tsx +218 -0
  280. package/src/admin/components/admin-users/create.module.css +63 -0
  281. package/src/admin/components/admin-users/create.tsx +323 -0
  282. package/src/admin/components/admin-users/roles.module.css +119 -0
  283. package/src/admin/components/admin-users/roles.tsx +172 -0
  284. package/src/admin/components/admin-users/set-password.module.css +46 -0
  285. package/src/admin/components/admin-users/set-password.tsx +199 -0
  286. package/src/admin/components/admin-users/update.module.css +49 -0
  287. package/src/admin/components/admin-users/update.tsx +328 -0
  288. package/src/admin/components/auth/sign-in-form.module.css +53 -0
  289. package/src/admin/components/auth/sign-in-form.tsx +118 -0
  290. package/src/admin/components/collections/diff-modal.module.css +79 -0
  291. package/src/admin/components/collections/diff-modal.tsx +171 -0
  292. package/src/admin/components/collections/status-badge.module.css +31 -0
  293. package/src/admin/components/collections/status-badge.tsx +69 -0
  294. package/src/admin/group.module.css +41 -0
  295. package/src/admin/group.tsx +40 -0
  296. package/src/admin/row.module.css +32 -0
  297. package/src/admin/row.tsx +33 -0
  298. package/src/admin/tabs.module.css +107 -0
  299. package/src/admin/tabs.tsx +74 -0
  300. package/src/declarations.d.ts +4 -0
  301. package/src/dnd/draggable-sortable/demo/draggable-list-demo.module.css +65 -0
  302. package/src/dnd/draggable-sortable/demo/draggable-list-demo.tsx +117 -0
  303. package/src/dnd/draggable-sortable/draggable-sortable-item/index.tsx +54 -0
  304. package/src/dnd/draggable-sortable/draggable-sortable-item/types.ts +30 -0
  305. package/src/dnd/draggable-sortable/draggable-sortable.tsx +86 -0
  306. package/src/dnd/draggable-sortable/index.ts +5 -0
  307. package/src/dnd/draggable-sortable/types.ts +24 -0
  308. package/src/dnd/draggable-sortable/use-draggable-sortable/index.tsx +50 -0
  309. package/src/dnd/draggable-sortable/use-draggable-sortable/types.ts +25 -0
  310. package/src/dnd/draggable-sortable/utils.ts +29 -0
  311. package/src/fields/array/array-field.module.css +48 -0
  312. package/src/fields/array/array-field.tsx +266 -0
  313. package/src/fields/blocks/blocks-field.module.css +148 -0
  314. package/src/fields/blocks/blocks-field.tsx +312 -0
  315. package/src/fields/checkbox/checkbox-field.tsx +53 -0
  316. package/src/fields/column-formatter.tsx +31 -0
  317. package/src/fields/date-time-formatter.tsx +22 -0
  318. package/src/fields/datetime/datetime-field.module.css +13 -0
  319. package/src/fields/datetime/datetime-field.tsx +54 -0
  320. package/src/fields/draggable-context-menu.module.css +127 -0
  321. package/src/fields/draggable-context-menu.tsx +85 -0
  322. package/src/fields/field-helpers.ts +66 -0
  323. package/src/fields/field-renderer.module.css +22 -0
  324. package/src/fields/field-renderer.tsx +255 -0
  325. package/src/fields/file/file-field.module.css +88 -0
  326. package/src/fields/file/file-field.tsx +107 -0
  327. package/src/fields/group/group-field.module.css +43 -0
  328. package/src/fields/group/group-field.tsx +84 -0
  329. package/src/fields/image/image-field.module.css +129 -0
  330. package/src/fields/image/image-field.tsx +212 -0
  331. package/src/fields/image/image-upload-field.module.css +123 -0
  332. package/src/fields/image/image-upload-field.tsx +270 -0
  333. package/src/fields/local-date-time.tsx +88 -0
  334. package/src/fields/locale-badge.module.css +37 -0
  335. package/src/fields/locale-badge.tsx +32 -0
  336. package/src/fields/numerical/numerical-field.tsx +112 -0
  337. package/src/fields/relation/relation-display.module.css +36 -0
  338. package/src/fields/relation/relation-display.tsx +130 -0
  339. package/src/fields/relation/relation-field.module.css +83 -0
  340. package/src/fields/relation/relation-field.tsx +202 -0
  341. package/src/fields/relation/relation-picker.module.css +168 -0
  342. package/src/fields/relation/relation-picker.tsx +325 -0
  343. package/src/fields/relation/relation-summary.module.css +55 -0
  344. package/src/fields/relation/relation-summary.tsx +123 -0
  345. package/src/fields/select/select-field.module.css +13 -0
  346. package/src/fields/select/select-field.tsx +56 -0
  347. package/src/fields/sortable-item.module.css +167 -0
  348. package/src/fields/sortable-item.tsx +101 -0
  349. package/src/fields/text/text-field.module.css +13 -0
  350. package/src/fields/text/text-field.tsx +146 -0
  351. package/src/fields/text-area/text-area-field.module.css +13 -0
  352. package/src/fields/text-area/text-area-field.tsx +147 -0
  353. package/src/fields/use-field-change-handler.ts +112 -0
  354. package/src/forms/document-actions.module.css +94 -0
  355. package/src/forms/document-actions.tsx +149 -0
  356. package/src/forms/form-context.tsx +620 -0
  357. package/src/forms/form-renderer.module.css +318 -0
  358. package/src/forms/form-renderer.tsx +786 -0
  359. package/src/forms/navigation-guard.tsx +98 -0
  360. package/src/forms/path-widget.module.css +41 -0
  361. package/src/forms/path-widget.test.tsx +217 -0
  362. package/src/forms/path-widget.tsx +141 -0
  363. package/src/forms/upload-executor.ts +190 -0
  364. package/src/react.ts +79 -0
  365. package/src/services/admin-services-context.tsx +35 -0
  366. package/src/services/admin-services-types.ts +177 -0
  367. package/src/services/field-services-context.tsx +35 -0
  368. package/src/services/field-services-types.ts +68 -0
@@ -0,0 +1,242 @@
1
+ :is(.form-MVxxVb, .byline-form) {
2
+ flex-direction: column;
3
+ width: 100%;
4
+ display: flex;
5
+ }
6
+
7
+ :is(.heading-row-qw_UYh, .byline-form-heading-row) {
8
+ align-items: start;
9
+ gap: .25rem var(--spacing-16);
10
+ margin-bottom: var(--spacing-8);
11
+ grid-template-columns: 1fr;
12
+ display: grid;
13
+ }
14
+
15
+ @media (min-width: 40rem) {
16
+ :is(.heading-row-qw_UYh, .byline-form-heading-row) {
17
+ grid-template-columns: 1fr auto;
18
+ }
19
+ }
20
+
21
+ :is(.heading-wnLlb_, .byline-form-heading) {
22
+ margin-bottom: 0;
23
+ font-size: 1.75rem;
24
+ }
25
+
26
+ :is(.status-bar-kQCXLT, .byline-form-status-bar) {
27
+ z-index: 20;
28
+ align-items: start;
29
+ gap: .25rem var(--spacing-16);
30
+ padding: var(--spacing-8);
31
+ border: var(--border-width-thin) var(--border-style-solid) var(--gray-100);
32
+ border-radius: var(--border-radius-sm);
33
+ background-color: var(--canvas-25);
34
+ grid-template-columns: 1fr;
35
+ margin-bottom: .25rem;
36
+ display: grid;
37
+ position: sticky;
38
+ top: 45px;
39
+ }
40
+
41
+ @media (min-width: 40rem) {
42
+ :is(.status-bar-kQCXLT, .byline-form-status-bar) {
43
+ grid-template-columns: 1fr auto;
44
+ }
45
+ }
46
+
47
+ @media (min-width: 66rem) {
48
+ :is(.status-bar-kQCXLT, .byline-form-status-bar) {
49
+ margin-bottom: 0;
50
+ }
51
+ }
52
+
53
+ :is(.status-XbhkJR, .byline-form-status) {
54
+ flex-direction: column;
55
+ justify-content: center;
56
+ height: 100%;
57
+ display: flex;
58
+ }
59
+
60
+ :is(.status-meta-gppNXX, .byline-form-status-meta) {
61
+ flex-direction: column;
62
+ font-size: .8rem;
63
+ line-height: 1.25;
64
+ display: flex;
65
+ }
66
+
67
+ @media (min-width: 48rem) {
68
+ :is(.status-meta-gppNXX, .byline-form-status-meta) {
69
+ margin-bottom: .25rem;
70
+ line-height: .75rem;
71
+ }
72
+ }
73
+
74
+ @media (min-width: 66rem) {
75
+ :is(.status-meta-gppNXX, .byline-form-status-meta) {
76
+ flex-direction: row;
77
+ align-items: center;
78
+ }
79
+ }
80
+
81
+ @media (min-width: 40rem) {
82
+ :is(.status-meta-gppNXX, .byline-form-status-meta) {
83
+ gap: var(--spacing-8);
84
+ }
85
+ }
86
+
87
+ :is(.status-cell-Tr3QHl, .byline-form-status-cell) {
88
+ align-items: center;
89
+ gap: .25rem;
90
+ min-width: 0;
91
+ display: flex;
92
+ }
93
+
94
+ :is(.status-muted-vHn34O, .byline-form-status-muted) {
95
+ color: var(--gray-500);
96
+ flex-shrink: 0;
97
+ }
98
+
99
+ :is(.status-trunc-jGiHWf, .byline-form-status-trunc) {
100
+ text-overflow: ellipsis;
101
+ white-space: nowrap;
102
+ overflow: hidden;
103
+ }
104
+
105
+ :is(.status-published-hqosWb, .byline-form-status-published) {
106
+ font-size: .8rem;
107
+ line-height: 1rem;
108
+ display: inline;
109
+ }
110
+
111
+ @media (min-width: 48rem) {
112
+ :is(.status-published-hqosWb, .byline-form-status-published) {
113
+ line-height: .875rem;
114
+ }
115
+ }
116
+
117
+ :is(.status-unpublish-DiCNI0, .byline-form-status-unpublish) {
118
+ color: inherit;
119
+ cursor: pointer;
120
+ background: none;
121
+ border: none;
122
+ padding: 0;
123
+ font-size: .8rem;
124
+ text-decoration: underline;
125
+ }
126
+
127
+ :is(.actions-AZBIdR, .byline-form-actions) {
128
+ align-items: center;
129
+ gap: var(--spacing-8);
130
+ display: flex;
131
+ }
132
+
133
+ :is(.actions-button-VIwbST, .byline-form-actions-button) {
134
+ min-width: 70px;
135
+ min-height: 28px;
136
+ }
137
+
138
+ :is(.actions-status-wrap-hSvlps, .byline-form-actions-status-wrap) {
139
+ z-index: 10;
140
+ position: relative;
141
+ }
142
+
143
+ :is(.actions-combo-button-XvqHCC, .byline-form-actions-combo-button) {
144
+ min-width: 100px;
145
+ min-height: 28px;
146
+ }
147
+
148
+ :is(.actions-combo-trigger-bmXUzc, .byline-form-actions-combo-trigger) {
149
+ min-height: 28px;
150
+ }
151
+
152
+ :is(.layout-WTbLYr, .byline-form-layout) {
153
+ gap: var(--spacing-32);
154
+ padding-top: var(--spacing-32);
155
+ flex-direction: column;
156
+ display: flex;
157
+ }
158
+
159
+ @media (min-width: 60rem) {
160
+ :is(.layout-WTbLYr, .byline-form-layout) {
161
+ grid-column-gap: 36px;
162
+ grid-template-columns: minmax(0, 1fr) .4fr;
163
+ align-items: start;
164
+ display: grid;
165
+ }
166
+ }
167
+
168
+ :is(.content-_P5cdJ, .byline-form-content) {
169
+ gap: var(--spacing-20);
170
+ flex-direction: column;
171
+ max-width: 100%;
172
+ margin-bottom: 2.75rem;
173
+ display: flex;
174
+ }
175
+
176
+ @media (min-width: 60rem) {
177
+ :is(.content-_P5cdJ, .byline-form-content) {
178
+ margin-bottom: 3.75rem;
179
+ }
180
+ }
181
+
182
+ :is(.sidebar-WsxX88, .byline-form-sidebar) {
183
+ gap: var(--spacing-20);
184
+ padding-right: 12px;
185
+ padding-left: var(--spacing-16);
186
+ border-left: var(--border-width-thin) var(--border-style-solid) var(--gray-100);
187
+ background-color: oklch(from var(--canvas-50) l c h / .2);
188
+ flex-direction: column;
189
+ max-width: 100%;
190
+ margin-top: 0;
191
+ padding-top: .25rem;
192
+ display: flex;
193
+ }
194
+
195
+ @media (min-width: 60rem) {
196
+ :is(.sidebar-WsxX88, .byline-form-sidebar) {
197
+ position: sticky;
198
+ top: 95px;
199
+ }
200
+ }
201
+
202
+ :is(.tabset-xfaMkP, .byline-form-tabset) {
203
+ gap: var(--spacing-20);
204
+ flex-direction: column;
205
+ display: flex;
206
+ }
207
+
208
+ :is(.tabset-tabs-jZpqd_, .byline-form-tabset-tabs) {
209
+ margin-top: -1rem;
210
+ margin-bottom: 0;
211
+ }
212
+
213
+ :is(.tabset-fields-JJefdw, .byline-form-tabset-fields) {
214
+ gap: var(--spacing-20);
215
+ flex-direction: column;
216
+ display: flex;
217
+ }
218
+
219
+ :is(.guard-modal-head-r2TApi, .byline-form-guard-modal-head) {
220
+ margin-bottom: var(--spacing-8);
221
+ padding-top: 1rem;
222
+ }
223
+
224
+ :is(.guard-modal-title-p9dFJ9, .byline-form-guard-modal-title) {
225
+ margin: 0 0 var(--spacing-8) 0;
226
+ font-size: var(--font-size-2xl);
227
+ }
228
+
229
+ :is(.guard-modal-text-uW56HS, .byline-form-guard-modal-text) {
230
+ font-size: var(--font-size-sm);
231
+ }
232
+
233
+ :is(:is([data-theme="dark"], .dark) .status-bar-kQCXLT, :is([data-theme="dark"], .dark) .byline-form-status-bar) {
234
+ background-color: var(--canvas-800);
235
+ border: var(--border-width-thin) var(--border-style-solid) var(--gray-700);
236
+ }
237
+
238
+ :is(:is([data-theme="dark"], .dark) .sidebar-WsxX88, :is([data-theme="dark"], .dark) .byline-form-sidebar) {
239
+ border-left-color: var(--gray-800);
240
+ background-color: var(--canvas-900);
241
+ }
242
+
@@ -0,0 +1,55 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ /** The result returned by a `UseNavigationGuard` hook. */
9
+ export interface NavigationGuardResult {
10
+ /** Whether a navigation attempt is currently being blocked (show confirmation UI). */
11
+ isBlocked: boolean;
12
+ /** Cancel the pending navigation — stay on the current page. */
13
+ stay: () => void;
14
+ /** Confirm the pending navigation — leave the page. */
15
+ proceed: () => void;
16
+ }
17
+ /**
18
+ * A hook that blocks in-app navigation and (optionally) browser unload when
19
+ * `shouldBlock` is `true`.
20
+ *
21
+ * Each framework adapter implements this signature.
22
+ */
23
+ export type UseNavigationGuard = (shouldBlock: boolean) => NavigationGuardResult;
24
+ /**
25
+ * Fallback navigation guard that only handles the browser's native
26
+ * `beforeunload` event. In-app (client-side) route changes are **not**
27
+ * intercepted — `isBlocked` will never become `true`.
28
+ *
29
+ * This is used when no framework-specific adapter has been provided.
30
+ */
31
+ export declare const useBeforeUnloadGuard: UseNavigationGuard;
32
+ /**
33
+ * Provide a framework-specific `UseNavigationGuard` hook to all descendant
34
+ * `FormRenderer` instances.
35
+ *
36
+ * ```tsx
37
+ * import { NavigationGuardProvider } from './navigation-guard'
38
+ * import { useTanStackNavigationGuard } from './tanstack-navigation-guard'
39
+ *
40
+ * function App() {
41
+ * return (
42
+ * <NavigationGuardProvider value={useTanStackNavigationGuard}>
43
+ * <Outlet />
44
+ * </NavigationGuardProvider>
45
+ * )
46
+ * }
47
+ * ```
48
+ */
49
+ export declare const NavigationGuardProvider: import("react").Provider<UseNavigationGuard>;
50
+ /**
51
+ * Consume the current `UseNavigationGuard` hook from context.
52
+ * Falls back to `useBeforeUnloadGuard` when no provider is present.
53
+ */
54
+ export declare const useNavigationGuardAdapter: () => UseNavigationGuard;
55
+ //# sourceMappingURL=navigation-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-guard.d.ts","sourceRoot":"","sources":["../../src/forms/navigation-guard.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH,0DAA0D;AAC1D,MAAM,WAAW,qBAAqB;IACpC,sFAAsF;IACtF,SAAS,EAAE,OAAO,CAAA;IAClB,gEAAgE;IAChE,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,uDAAuD;IACvD,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,WAAW,EAAE,OAAO,KAAK,qBAAqB,CAAA;AAMhF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,kBAWlC,CAAA;AAQD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,uBAAuB,8CAAkC,CAAA;AAEtE;;;GAGG;AACH,eAAO,MAAM,yBAAyB,QAAO,kBAE5C,CAAA"}
@@ -0,0 +1,22 @@
1
+ import { createContext, useContext, useEffect } from "react";
2
+ const useBeforeUnloadGuard = (shouldBlock)=>{
3
+ useEffect(()=>{
4
+ if (!shouldBlock) return;
5
+ const handler = (e)=>{
6
+ e.preventDefault();
7
+ };
8
+ window.addEventListener('beforeunload', handler);
9
+ return ()=>window.removeEventListener('beforeunload', handler);
10
+ }, [
11
+ shouldBlock
12
+ ]);
13
+ return {
14
+ isBlocked: false,
15
+ stay: ()=>{},
16
+ proceed: ()=>{}
17
+ };
18
+ };
19
+ const NavigationGuardContext = /*#__PURE__*/ createContext(useBeforeUnloadGuard);
20
+ const NavigationGuardProvider = NavigationGuardContext.Provider;
21
+ const useNavigationGuardAdapter = ()=>useContext(NavigationGuardContext);
22
+ export { NavigationGuardProvider, useBeforeUnloadGuard, useNavigationGuardAdapter };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ export interface PathWidgetProps {
9
+ /** The collection's `useAsPath` source field name, when configured. */
10
+ useAsPath: string | undefined;
11
+ /** Collection path, forwarded to the slugifier as context. */
12
+ collectionPath: string;
13
+ /** Default content locale, forwarded to the slugifier as context. */
14
+ defaultLocale: string;
15
+ /** `'create'` shows the live derived preview as placeholder text. */
16
+ mode: 'create' | 'edit';
17
+ }
18
+ /**
19
+ * System-managed `documentVersions.path` widget.
20
+ *
21
+ * Displays the current persisted/overridden path as an editable input.
22
+ * In create mode, when the user hasn't supplied an override, the input
23
+ * shows the live-derived preview (slugified `useAsPath` source field) as
24
+ * a placeholder so the user sees what will be saved. The "Regenerate"
25
+ * action explicitly writes the current live preview into the override
26
+ * slot so the user can re-anchor a path against the source field after
27
+ * editing the title.
28
+ *
29
+ * Stable override handles: `.byline-form-path`, `.byline-form-path-header`,
30
+ * `.byline-form-path-regenerate`.
31
+ */
32
+ export declare const PathWidget: ({ useAsPath, collectionPath, defaultLocale, mode }: PathWidgetProps) => import("react").JSX.Element;
33
+ //# sourceMappingURL=path-widget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-widget.d.ts","sourceRoot":"","sources":["../../src/forms/path-widget.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAsBH,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,8DAA8D;IAC9D,cAAc,EAAE,MAAM,CAAA;IACtB,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAA;IACrB,qEAAqE;IACrE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAA;CACxB;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,GAAI,oDAAoD,eAAe,gCAuF7F,CAAA"}
@@ -0,0 +1,101 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useMemo } from "react";
3
+ import { slugify } from "@byline/core";
4
+ import { Input, Label } from "@infonomic/uikit/react";
5
+ import classnames from "classnames";
6
+ import { useFieldValue, useFormContext, useSystemPath } from "./form-context.js";
7
+ import path_widget_module from "./path-widget.module.js";
8
+ function coerceToString(value) {
9
+ if (null == value) return '';
10
+ if (value instanceof Date) return value.toISOString();
11
+ return String(value);
12
+ }
13
+ const PathWidget = ({ useAsPath, collectionPath, defaultLocale, mode })=>{
14
+ const { setSystemPath } = useFormContext();
15
+ const systemPath = useSystemPath();
16
+ const sourceValue = useFieldValue(useAsPath ?? '');
17
+ const livePreview = useMemo(()=>{
18
+ if (!useAsPath) return '';
19
+ const asString = coerceToString(sourceValue);
20
+ if (0 === asString.length) return '';
21
+ return slugify(asString, {
22
+ locale: defaultLocale,
23
+ collectionPath
24
+ });
25
+ }, [
26
+ useAsPath,
27
+ sourceValue,
28
+ defaultLocale,
29
+ collectionPath
30
+ ]);
31
+ const inputValue = systemPath ?? '';
32
+ const handleChange = useCallback((next)=>{
33
+ setSystemPath(0 === next.length ? null : next);
34
+ }, [
35
+ setSystemPath
36
+ ]);
37
+ const handleRegenerate = useCallback(()=>{
38
+ if (livePreview.length > 0) setSystemPath(livePreview);
39
+ }, [
40
+ livePreview,
41
+ setSystemPath
42
+ ]);
43
+ const formatted = useMemo(()=>{
44
+ if (0 === inputValue.length) return '';
45
+ return slugify(inputValue, {
46
+ locale: defaultLocale,
47
+ collectionPath
48
+ });
49
+ }, [
50
+ inputValue,
51
+ defaultLocale,
52
+ collectionPath
53
+ ]);
54
+ const hint = inputValue.length > 0 && formatted !== inputValue ? `Suggested: "${formatted}"` : void 0;
55
+ const placeholder = 'create' === mode && livePreview.length > 0 ? `Will be saved as "${livePreview}"` : void 0;
56
+ const srDescription = [
57
+ 'System-managed URL path for this document.',
58
+ placeholder,
59
+ hint
60
+ ].filter(Boolean).join(' ');
61
+ return /*#__PURE__*/ jsxs("div", {
62
+ className: "byline-form-path",
63
+ children: [
64
+ /*#__PURE__*/ jsxs("div", {
65
+ className: classnames('byline-form-path-header', path_widget_module.header),
66
+ children: [
67
+ /*#__PURE__*/ jsx(Label, {
68
+ id: "system-path-label",
69
+ htmlFor: "system-path",
70
+ label: "Path"
71
+ }),
72
+ useAsPath && livePreview.length > 0 && livePreview !== systemPath && /*#__PURE__*/ jsxs("button", {
73
+ type: "button",
74
+ onClick: handleRegenerate,
75
+ className: classnames('byline-form-path-regenerate', path_widget_module.regenerate),
76
+ "aria-label": `Regenerate path from ${useAsPath} field`,
77
+ children: [
78
+ "Regenerate from ",
79
+ useAsPath
80
+ ]
81
+ })
82
+ ]
83
+ }),
84
+ /*#__PURE__*/ jsx(Input, {
85
+ id: "system-path",
86
+ name: "__systemPath__",
87
+ value: inputValue,
88
+ placeholder: placeholder,
89
+ onChange: (e)=>handleChange(e.target.value),
90
+ helpText: hint,
91
+ "aria-describedby": "system-path-description"
92
+ }),
93
+ /*#__PURE__*/ jsx("span", {
94
+ id: "system-path-description",
95
+ className: classnames('byline-form-path-sr-only', path_widget_module["sr-only"]),
96
+ children: srDescription
97
+ })
98
+ ]
99
+ });
100
+ };
101
+ export { PathWidget };
@@ -0,0 +1,8 @@
1
+ import "./path-widget_module.css";
2
+ const path_widget_module = {
3
+ header: "header-mJ5Fde",
4
+ regenerate: "regenerate-P5Mdye",
5
+ "sr-only": "sr-only-feJgAM",
6
+ srOnly: "sr-only-feJgAM"
7
+ };
8
+ export default path_widget_module;
@@ -0,0 +1,29 @@
1
+ :is(.header-mJ5Fde, .byline-form-path-header) {
2
+ justify-content: space-between;
3
+ align-items: center;
4
+ gap: var(--spacing-8);
5
+ display: flex;
6
+ }
7
+
8
+ :is(.regenerate-P5Mdye, .byline-form-path-regenerate) {
9
+ color: inherit;
10
+ cursor: pointer;
11
+ background: none;
12
+ border: none;
13
+ padding: 0;
14
+ font-size: .8rem;
15
+ text-decoration: underline;
16
+ }
17
+
18
+ :is(.sr-only-feJgAM, .byline-form-path-sr-only) {
19
+ clip: rect(0, 0, 0, 0);
20
+ white-space: nowrap;
21
+ border: 0;
22
+ width: 1px;
23
+ height: 1px;
24
+ margin: -1px;
25
+ padding: 0;
26
+ position: absolute;
27
+ overflow: hidden;
28
+ }
29
+
@@ -0,0 +1,58 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ /**
9
+ * Upload Executor
10
+ *
11
+ * Handles batch execution of pending file uploads at form submission time.
12
+ * This enables "deferred uploads" — files are selected/previewed immediately
13
+ * but only uploaded when the user clicks Save.
14
+ */
15
+ import type { StoredFileValue } from '@byline/core';
16
+ import type { UploadFieldFn } from '../services/field-services-types';
17
+ import type { PendingUpload } from './form-context';
18
+ export interface UploadResult {
19
+ fieldPath: string;
20
+ success: boolean;
21
+ storedFile?: StoredFileValue;
22
+ error?: string;
23
+ }
24
+ export interface ExecuteUploadsResult {
25
+ /** All upload results (both successful and failed) */
26
+ results: UploadResult[];
27
+ /** Map of field path to StoredFileValue for successful uploads */
28
+ successful: Map<string, StoredFileValue>;
29
+ /** Map of field path to error message for failed uploads */
30
+ errors: Map<string, string>;
31
+ /** Whether all uploads succeeded */
32
+ allSucceeded: boolean;
33
+ }
34
+ /**
35
+ * Execute all pending uploads sequentially.
36
+ * Returns a result object with successful uploads and any errors.
37
+ *
38
+ * @param pendingUploads - Map of field path to PendingUpload
39
+ * @param uploadField - Host-provided upload transport (resolved via
40
+ * `useBylineFieldServices()` in the calling React tree)
41
+ * @returns Promise resolving to ExecuteUploadsResult
42
+ */
43
+ export declare function executeUploads(pendingUploads: Map<string, PendingUpload>, uploadField: UploadFieldFn): Promise<ExecuteUploadsResult>;
44
+ /**
45
+ * Progress callback type for upload execution with progress tracking.
46
+ */
47
+ export type UploadProgressCallback = (info: {
48
+ current: number;
49
+ total: number;
50
+ fieldPath: string;
51
+ status: 'uploading' | 'done' | 'error';
52
+ }) => void;
53
+ /**
54
+ * Execute uploads with progress callbacks.
55
+ * Useful for showing upload progress in the UI.
56
+ */
57
+ export declare function executeUploadsWithProgress(pendingUploads: Map<string, PendingUpload>, uploadField: UploadFieldFn, onProgress?: UploadProgressCallback): Promise<ExecuteUploadsResult>;
58
+ //# sourceMappingURL=upload-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-executor.d.ts","sourceRoot":"","sources":["../../src/forms/upload-executor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,kEAAkE;IAClE,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,4DAA4D;IAC5D,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3B,oCAAoC;IACpC,YAAY,EAAE,OAAO,CAAA;CACtB;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC1C,WAAW,EAAE,aAAa,GACzB,OAAO,CAAC,oBAAoB,CAAC,CA2C/B;AAeD;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,OAAO,CAAA;CACvC,KAAK,IAAI,CAAA;AAEV;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC1C,WAAW,EAAE,aAAa,EAC1B,UAAU,CAAC,EAAE,sBAAsB,GAClC,OAAO,CAAC,oBAAoB,CAAC,CA8D/B"}
@@ -0,0 +1,92 @@
1
+ async function executeUploads(pendingUploads, uploadField) {
2
+ const results = [];
3
+ const successful = new Map();
4
+ const errors = new Map();
5
+ for (const [fieldPath, upload] of pendingUploads.entries()){
6
+ const formData = new FormData();
7
+ formData.append('file', upload.file);
8
+ formData.append('field', uploadFieldName(fieldPath));
9
+ try {
10
+ const result = await uploadField(upload.collectionPath, formData, false);
11
+ results.push({
12
+ fieldPath,
13
+ success: true,
14
+ storedFile: result.storedFile
15
+ });
16
+ successful.set(fieldPath, result.storedFile);
17
+ } catch (err) {
18
+ const message = err instanceof Error ? err.message : 'Upload failed';
19
+ results.push({
20
+ fieldPath,
21
+ success: false,
22
+ error: message
23
+ });
24
+ errors.set(fieldPath, message);
25
+ }
26
+ }
27
+ return {
28
+ results,
29
+ successful,
30
+ errors,
31
+ allSucceeded: 0 === errors.size
32
+ };
33
+ }
34
+ function uploadFieldName(fieldPath) {
35
+ const dot = fieldPath.lastIndexOf('.');
36
+ return -1 === dot ? fieldPath : fieldPath.slice(dot + 1);
37
+ }
38
+ async function executeUploadsWithProgress(pendingUploads, uploadField, onProgress) {
39
+ const results = [];
40
+ const successful = new Map();
41
+ const errors = new Map();
42
+ const entries = Array.from(pendingUploads.entries());
43
+ const total = entries.length;
44
+ for(let i = 0; i < entries.length; i++){
45
+ const [fieldPath, upload] = entries[i];
46
+ onProgress?.({
47
+ current: i + 1,
48
+ total,
49
+ fieldPath,
50
+ status: 'uploading'
51
+ });
52
+ const formData = new FormData();
53
+ formData.append('file', upload.file);
54
+ formData.append('field', uploadFieldName(fieldPath));
55
+ try {
56
+ const result = await uploadField(upload.collectionPath, formData, false);
57
+ results.push({
58
+ fieldPath,
59
+ success: true,
60
+ storedFile: result.storedFile
61
+ });
62
+ successful.set(fieldPath, result.storedFile);
63
+ onProgress?.({
64
+ current: i + 1,
65
+ total,
66
+ fieldPath,
67
+ status: 'done'
68
+ });
69
+ } catch (err) {
70
+ const message = err instanceof Error ? err.message : 'Upload failed';
71
+ results.push({
72
+ fieldPath,
73
+ success: false,
74
+ error: message
75
+ });
76
+ errors.set(fieldPath, message);
77
+ onProgress?.({
78
+ current: i + 1,
79
+ total,
80
+ fieldPath,
81
+ status: 'error'
82
+ });
83
+ }
84
+ }
85
+ return {
86
+ results,
87
+ successful,
88
+ errors,
89
+ allSucceeded: 0 === errors.size
90
+ };
91
+ }
92
+ export { executeUploads, executeUploadsWithProgress };