@alfadocs/ui-kit-debug 1.117.0 → 1.119.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/dist/_chunks/{address-autocomplete-Bnc9ieKO.js → address-autocomplete-zLygkxFc.js} +2 -2
  2. package/dist/_chunks/{address-autocomplete-Bnc9ieKO.js.map → address-autocomplete-zLygkxFc.js.map} +1 -1
  3. package/dist/_chunks/{address-fields-RIaGnpnm.js → address-fields-Dl1ALKhP.js} +2 -2
  4. package/dist/_chunks/{address-fields-RIaGnpnm.js.map → address-fields-Dl1ALKhP.js.map} +1 -1
  5. package/dist/_chunks/bill-line-table-DUMEHnQ4.js +1754 -0
  6. package/dist/_chunks/bill-line-table-DUMEHnQ4.js.map +1 -0
  7. package/dist/_chunks/{calendar-appointment-editor-dialog-BEmBcb61.js → calendar-appointment-editor-dialog-rw02sXGw.js} +4 -4
  8. package/dist/_chunks/{calendar-appointment-editor-dialog-BEmBcb61.js.map → calendar-appointment-editor-dialog-rw02sXGw.js.map} +1 -1
  9. package/dist/_chunks/{compact-editor-fields-6sTWRLtf.js → compact-editor-fields-cP6yh7xv.js} +3 -3
  10. package/dist/_chunks/{compact-editor-fields-6sTWRLtf.js.map → compact-editor-fields-cP6yh7xv.js.map} +1 -1
  11. package/dist/_chunks/counts-BXtzNv_G.js +92 -0
  12. package/dist/_chunks/counts-BXtzNv_G.js.map +1 -0
  13. package/dist/_chunks/{data-grid-DiBSbN2Y.js → data-grid-Bbf8t4z3.js} +2 -2
  14. package/dist/_chunks/{data-grid-DiBSbN2Y.js.map → data-grid-Bbf8t4z3.js.map} +1 -1
  15. package/dist/_chunks/{default-tabs-CD285u0C.js → default-tabs-Cxkw1Ws0.js} +332 -368
  16. package/dist/_chunks/default-tabs-Cxkw1Ws0.js.map +1 -0
  17. package/dist/_chunks/{document-scanner-5p-Uu8dy.js → document-scanner-CETscDea.js} +2 -2
  18. package/dist/_chunks/{document-scanner-5p-Uu8dy.js.map → document-scanner-CETscDea.js.map} +1 -1
  19. package/dist/_chunks/file-code-Cf-_gSzd.js +23 -0
  20. package/dist/_chunks/file-code-Cf-_gSzd.js.map +1 -0
  21. package/dist/_chunks/{file-manager-CV1_GtjC.js → file-manager-DNq-sEsy.js} +2 -2
  22. package/dist/_chunks/{file-manager-CV1_GtjC.js.map → file-manager-DNq-sEsy.js.map} +1 -1
  23. package/dist/_chunks/{file-upload-CxjCs7TX.js → file-upload-DQc0LsBM.js} +385 -311
  24. package/dist/_chunks/file-upload-DQc0LsBM.js.map +1 -0
  25. package/dist/_chunks/invoice-upload-list-CsFsRgbt.js +952 -0
  26. package/dist/_chunks/invoice-upload-list-CsFsRgbt.js.map +1 -0
  27. package/dist/_chunks/map-view-CHeGd94F.js +1443 -0
  28. package/dist/_chunks/map-view-CHeGd94F.js.map +1 -0
  29. package/dist/_chunks/maps-MpMxTBov.js +63 -0
  30. package/dist/_chunks/maps-MpMxTBov.js.map +1 -0
  31. package/dist/_chunks/{maps-core-gate-Dgs7jXxy.js → maps-core-gate-C4dyo1ic.js} +5 -5
  32. package/dist/_chunks/{maps-core-gate-Dgs7jXxy.js.map → maps-core-gate-C4dyo1ic.js.map} +1 -1
  33. package/dist/_chunks/{notes-panel-CHR-Jv6N.js → notes-panel-BOwlTz2-.js} +2 -2
  34. package/dist/_chunks/{notes-panel-CHR-Jv6N.js.map → notes-panel-BOwlTz2-.js.map} +1 -1
  35. package/dist/_chunks/package-plus-CTecQK3x.js +25 -0
  36. package/dist/_chunks/package-plus-CTecQK3x.js.map +1 -0
  37. package/dist/_chunks/{practice-results-CzHWprX4.js → practice-results-b3uchdBn.js} +40 -39
  38. package/dist/_chunks/practice-results-b3uchdBn.js.map +1 -0
  39. package/dist/_chunks/{public-footer-CB7ruuLI.js → public-footer-C8UIzqLJ.js} +326 -243
  40. package/dist/_chunks/public-footer-C8UIzqLJ.js.map +1 -0
  41. package/dist/_chunks/{radiograph-panel.agent-9jwXlOXB.js → radiograph-panel.agent-Dcv16n7u.js} +2 -2
  42. package/dist/_chunks/{radiograph-panel.agent-9jwXlOXB.js.map → radiograph-panel.agent-Dcv16n7u.js.map} +1 -1
  43. package/dist/_chunks/{reserved.agent-TaZfI3yj.js → reserved.agent-V2Eqoabh.js} +2 -2
  44. package/dist/_chunks/{reserved.agent-TaZfI3yj.js.map → reserved.agent-V2Eqoabh.js.map} +1 -1
  45. package/dist/_chunks/{rich-text-editor-CMPA5Wgy.js → rich-text-editor-BLEdXJ0l.js} +2 -2
  46. package/dist/_chunks/{rich-text-editor-CMPA5Wgy.js.map → rich-text-editor-BLEdXJ0l.js.map} +1 -1
  47. package/dist/_chunks/{signed-out-frame-bh7fn_Px.js → signed-out-frame-fUf7tqs3.js} +2 -2
  48. package/dist/_chunks/{signed-out-frame-bh7fn_Px.js.map → signed-out-frame-fUf7tqs3.js.map} +1 -1
  49. package/dist/_chunks/{task-editor-WdDCqbIL.js → task-editor-Czcx9B-3.js} +2 -2
  50. package/dist/_chunks/{task-editor-WdDCqbIL.js.map → task-editor-Czcx9B-3.js.map} +1 -1
  51. package/dist/_chunks/{toolbar-z8vXnpXz.js → toolbar-DoKcoE2q.js} +2 -2
  52. package/dist/_chunks/{toolbar-z8vXnpXz.js.map → toolbar-DoKcoE2q.js.map} +1 -1
  53. package/dist/_chunks/types-BrJRsnSG.js +291 -0
  54. package/dist/_chunks/types-BrJRsnSG.js.map +1 -0
  55. package/dist/_chunks/warehouse-load-summary-D88M4Ii7.js +255 -0
  56. package/dist/_chunks/warehouse-load-summary-D88M4Ii7.js.map +1 -0
  57. package/dist/agent-catalog.json +360 -14
  58. package/dist/agent-i18n/en.json +31 -2
  59. package/dist/browser-support.js +1 -1
  60. package/dist/components/_shared/warehouse-load/counts.d.ts +82 -0
  61. package/dist/components/_shared/warehouse-load/counts.d.ts.map +1 -0
  62. package/dist/components/_shared/warehouse-load/index.d.ts +4 -0
  63. package/dist/components/_shared/warehouse-load/index.d.ts.map +1 -0
  64. package/dist/components/_shared/warehouse-load/maps.d.ts +67 -0
  65. package/dist/components/_shared/warehouse-load/maps.d.ts.map +1 -0
  66. package/dist/components/_shared/warehouse-load/types.d.ts +18 -0
  67. package/dist/components/_shared/warehouse-load/types.d.ts.map +1 -0
  68. package/dist/components/address-autocomplete/index.js +1 -1
  69. package/dist/components/address-fields/index.js +1 -1
  70. package/dist/components/bill-line-table/bill-line-table.columns.d.ts +2 -0
  71. package/dist/components/bill-line-table/bill-line-table.columns.d.ts.map +1 -1
  72. package/dist/components/bill-line-table/bill-line-table.d.ts.map +1 -1
  73. package/dist/components/bill-line-table/bill-line-table.header.d.ts +7 -0
  74. package/dist/components/bill-line-table/bill-line-table.header.d.ts.map +1 -0
  75. package/dist/components/bill-line-table/bill-line-table.model.d.ts +10 -1
  76. package/dist/components/bill-line-table/bill-line-table.model.d.ts.map +1 -1
  77. package/dist/components/bill-line-table/bill-line-table.types.d.ts +66 -1
  78. package/dist/components/bill-line-table/bill-line-table.types.d.ts.map +1 -1
  79. package/dist/components/bill-line-table/bill-line-table.variants.d.ts +12 -0
  80. package/dist/components/bill-line-table/bill-line-table.variants.d.ts.map +1 -1
  81. package/dist/components/bill-line-table/index.d.ts +2 -2
  82. package/dist/components/bill-line-table/index.d.ts.map +1 -1
  83. package/dist/components/bill-line-table/index.js +10 -8
  84. package/dist/components/bill-table/index.js +1 -1
  85. package/dist/components/booking/index.js +1 -1
  86. package/dist/components/data-grid/data-grid.variants.d.ts +1 -1
  87. package/dist/components/data-grid/index.js +2 -2
  88. package/dist/components/document-scanner/index.js +1 -1
  89. package/dist/components/file-manager/index.js +1 -1
  90. package/dist/components/file-upload/file-upload.d.ts +30 -1
  91. package/dist/components/file-upload/file-upload.d.ts.map +1 -1
  92. package/dist/components/file-upload/index.js +1 -1
  93. package/dist/components/flag/flag-view.d.ts +1 -1
  94. package/dist/components/index.d.ts +3 -0
  95. package/dist/components/index.d.ts.map +1 -1
  96. package/dist/components/invoice-upload/index.d.ts +5 -0
  97. package/dist/components/invoice-upload/index.d.ts.map +1 -0
  98. package/dist/components/invoice-upload/index.js +7 -0
  99. package/dist/components/invoice-upload/index.js.map +1 -0
  100. package/dist/components/invoice-upload/invoice-upload.agent.d.ts +4 -0
  101. package/dist/components/invoice-upload/invoice-upload.agent.d.ts.map +1 -0
  102. package/dist/components/invoice-upload/invoice-upload.d.ts +3 -0
  103. package/dist/components/invoice-upload/invoice-upload.d.ts.map +1 -0
  104. package/dist/components/invoice-upload/types.d.ts +72 -0
  105. package/dist/components/invoice-upload/types.d.ts.map +1 -0
  106. package/dist/components/invoice-upload-list/cells.d.ts +36 -0
  107. package/dist/components/invoice-upload-list/cells.d.ts.map +1 -0
  108. package/dist/components/invoice-upload-list/columns.d.ts +14 -0
  109. package/dist/components/invoice-upload-list/columns.d.ts.map +1 -0
  110. package/dist/components/invoice-upload-list/handle.d.ts +18 -0
  111. package/dist/components/invoice-upload-list/handle.d.ts.map +1 -0
  112. package/dist/components/invoice-upload-list/index.d.ts +5 -0
  113. package/dist/components/invoice-upload-list/index.d.ts.map +1 -0
  114. package/dist/components/invoice-upload-list/index.js +10 -0
  115. package/dist/components/invoice-upload-list/index.js.map +1 -0
  116. package/dist/components/invoice-upload-list/invoice-upload-list.agent.d.ts +4 -0
  117. package/dist/components/invoice-upload-list/invoice-upload-list.agent.d.ts.map +1 -0
  118. package/dist/components/invoice-upload-list/invoice-upload-list.d.ts +10 -0
  119. package/dist/components/invoice-upload-list/invoice-upload-list.d.ts.map +1 -0
  120. package/dist/components/invoice-upload-list/invoice-upload-list.variants.d.ts +28 -0
  121. package/dist/components/invoice-upload-list/invoice-upload-list.variants.d.ts.map +1 -0
  122. package/dist/components/invoice-upload-list/model.d.ts +40 -0
  123. package/dist/components/invoice-upload-list/model.d.ts.map +1 -0
  124. package/dist/components/invoice-upload-list/types.d.ts +154 -0
  125. package/dist/components/invoice-upload-list/types.d.ts.map +1 -0
  126. package/dist/components/map-view/index.js +1 -1
  127. package/dist/components/map-view/map-view-cluster.d.ts +42 -0
  128. package/dist/components/map-view/map-view-cluster.d.ts.map +1 -0
  129. package/dist/components/map-view/map-view.d.ts +39 -0
  130. package/dist/components/map-view/map-view.d.ts.map +1 -1
  131. package/dist/components/notes-panel/index.js +1 -1
  132. package/dist/components/practice-results/index.js +1 -1
  133. package/dist/components/practice-results/practice-results.d.ts.map +1 -1
  134. package/dist/components/public-footer/index.js +1 -1
  135. package/dist/components/public-footer/public-footer.d.ts +24 -0
  136. package/dist/components/public-footer/public-footer.d.ts.map +1 -1
  137. package/dist/components/public-header/public-header.d.ts +1 -1
  138. package/dist/components/radiograph-panel/index.js +1 -1
  139. package/dist/components/rich-text-editor/index.js +1 -1
  140. package/dist/components/task-editor/index.js +1 -1
  141. package/dist/components/warehouse-load-summary/index.d.ts +4 -0
  142. package/dist/components/warehouse-load-summary/index.d.ts.map +1 -0
  143. package/dist/components/warehouse-load-summary/index.js +6 -0
  144. package/dist/components/warehouse-load-summary/index.js.map +1 -0
  145. package/dist/components/warehouse-load-summary/model.d.ts +8 -0
  146. package/dist/components/warehouse-load-summary/model.d.ts.map +1 -0
  147. package/dist/components/warehouse-load-summary/types.d.ts +50 -0
  148. package/dist/components/warehouse-load-summary/types.d.ts.map +1 -0
  149. package/dist/components/warehouse-load-summary/warehouse-load-summary.agent.d.ts +4 -0
  150. package/dist/components/warehouse-load-summary/warehouse-load-summary.agent.d.ts.map +1 -0
  151. package/dist/components/warehouse-load-summary/warehouse-load-summary.d.ts +7 -0
  152. package/dist/components/warehouse-load-summary/warehouse-load-summary.d.ts.map +1 -0
  153. package/dist/core.css +1 -1
  154. package/dist/i18n/locales/ar.d.ts +210 -0
  155. package/dist/i18n/locales/ar.d.ts.map +1 -1
  156. package/dist/i18n/locales/ar.js +204 -4
  157. package/dist/i18n/locales/ar.js.map +1 -1
  158. package/dist/i18n/locales/de.d.ts +210 -0
  159. package/dist/i18n/locales/de.d.ts.map +1 -1
  160. package/dist/i18n/locales/de.js +208 -4
  161. package/dist/i18n/locales/de.js.map +1 -1
  162. package/dist/i18n/locales/el.d.ts +210 -0
  163. package/dist/i18n/locales/el.d.ts.map +1 -1
  164. package/dist/i18n/locales/el.js +208 -4
  165. package/dist/i18n/locales/el.js.map +1 -1
  166. package/dist/i18n/locales/en.d.ts +210 -0
  167. package/dist/i18n/locales/en.d.ts.map +1 -1
  168. package/dist/i18n/locales/en.js +210 -0
  169. package/dist/i18n/locales/en.js.map +1 -1
  170. package/dist/i18n/locales/es.d.ts +210 -0
  171. package/dist/i18n/locales/es.d.ts.map +1 -1
  172. package/dist/i18n/locales/es.js +206 -4
  173. package/dist/i18n/locales/es.js.map +1 -1
  174. package/dist/i18n/locales/fr.d.ts +210 -0
  175. package/dist/i18n/locales/fr.d.ts.map +1 -1
  176. package/dist/i18n/locales/fr.js +206 -4
  177. package/dist/i18n/locales/fr.js.map +1 -1
  178. package/dist/i18n/locales/hi.d.ts +210 -0
  179. package/dist/i18n/locales/hi.d.ts.map +1 -1
  180. package/dist/i18n/locales/hi.js +204 -4
  181. package/dist/i18n/locales/hi.js.map +1 -1
  182. package/dist/i18n/locales/it.d.ts +210 -0
  183. package/dist/i18n/locales/it.d.ts.map +1 -1
  184. package/dist/i18n/locales/it.js +204 -4
  185. package/dist/i18n/locales/it.js.map +1 -1
  186. package/dist/i18n/locales/ja.d.ts +210 -0
  187. package/dist/i18n/locales/ja.d.ts.map +1 -1
  188. package/dist/i18n/locales/ja.js +204 -4
  189. package/dist/i18n/locales/ja.js.map +1 -1
  190. package/dist/i18n/locales/nl.d.ts +210 -0
  191. package/dist/i18n/locales/nl.d.ts.map +1 -1
  192. package/dist/i18n/locales/nl.js +204 -4
  193. package/dist/i18n/locales/nl.js.map +1 -1
  194. package/dist/i18n/locales/pl.d.ts +210 -0
  195. package/dist/i18n/locales/pl.d.ts.map +1 -1
  196. package/dist/i18n/locales/pl.js +204 -4
  197. package/dist/i18n/locales/pl.js.map +1 -1
  198. package/dist/i18n/locales/pt.d.ts +210 -0
  199. package/dist/i18n/locales/pt.d.ts.map +1 -1
  200. package/dist/i18n/locales/pt.js +206 -4
  201. package/dist/i18n/locales/pt.js.map +1 -1
  202. package/dist/i18n/locales/ro.d.ts +210 -0
  203. package/dist/i18n/locales/ro.d.ts.map +1 -1
  204. package/dist/i18n/locales/ro.js +204 -4
  205. package/dist/i18n/locales/ro.js.map +1 -1
  206. package/dist/i18n/locales/ru.d.ts +210 -0
  207. package/dist/i18n/locales/ru.d.ts.map +1 -1
  208. package/dist/i18n/locales/ru.js +204 -4
  209. package/dist/i18n/locales/ru.js.map +1 -1
  210. package/dist/i18n/locales/sq.d.ts +210 -0
  211. package/dist/i18n/locales/sq.d.ts.map +1 -1
  212. package/dist/i18n/locales/sq.js +206 -4
  213. package/dist/i18n/locales/sq.js.map +1 -1
  214. package/dist/i18n/locales/sv.d.ts +210 -0
  215. package/dist/i18n/locales/sv.d.ts.map +1 -1
  216. package/dist/i18n/locales/sv.js +204 -4
  217. package/dist/i18n/locales/sv.js.map +1 -1
  218. package/dist/i18n/locales/tr.d.ts +210 -0
  219. package/dist/i18n/locales/tr.d.ts.map +1 -1
  220. package/dist/i18n/locales/tr.js +204 -4
  221. package/dist/i18n/locales/tr.js.map +1 -1
  222. package/dist/i18n/locales/zh.d.ts +210 -0
  223. package/dist/i18n/locales/zh.d.ts.map +1 -1
  224. package/dist/i18n/locales/zh.js +204 -4
  225. package/dist/i18n/locales/zh.js.map +1 -1
  226. package/dist/index.js +1190 -1174
  227. package/dist/index.js.map +1 -1
  228. package/dist/locales/ar.json +214 -4
  229. package/dist/locales/de.json +214 -4
  230. package/dist/locales/el.json +214 -4
  231. package/dist/locales/en.json +210 -0
  232. package/dist/locales/es.json +214 -4
  233. package/dist/locales/fr.json +214 -4
  234. package/dist/locales/hi.json +214 -4
  235. package/dist/locales/it.json +214 -4
  236. package/dist/locales/ja.json +214 -4
  237. package/dist/locales/nl.json +214 -4
  238. package/dist/locales/pl.json +214 -4
  239. package/dist/locales/pt.json +214 -4
  240. package/dist/locales/ro.json +214 -4
  241. package/dist/locales/ru.json +214 -4
  242. package/dist/locales/sq.json +214 -4
  243. package/dist/locales/sv.json +214 -4
  244. package/dist/locales/tr.json +214 -4
  245. package/dist/locales/zh.json +214 -4
  246. package/dist/patterns/calendar/index.js +1 -1
  247. package/dist/patterns/signed-out-frame/index.js +1 -1
  248. package/dist/tokens.css +1 -1
  249. package/package.json +13 -1
  250. package/dist/_chunks/bill-line-table-vCnVo7_a.js +0 -1565
  251. package/dist/_chunks/bill-line-table-vCnVo7_a.js.map +0 -1
  252. package/dist/_chunks/default-tabs-CD285u0C.js.map +0 -1
  253. package/dist/_chunks/file-upload-CxjCs7TX.js.map +0 -1
  254. package/dist/_chunks/map-view-Frj8vE7n.js +0 -1105
  255. package/dist/_chunks/map-view-Frj8vE7n.js.map +0 -1
  256. package/dist/_chunks/practice-results-CzHWprX4.js.map +0 -1
  257. package/dist/_chunks/public-footer-CB7ruuLI.js.map +0 -1
@@ -5,7 +5,7 @@ import { T as v, c as N, a as R } from "./parts-CcyRkB8t.js";
5
5
  import { e as k, s as P, w as A, a as B } from "./export-files-BByoK9Cg.js";
6
6
  import { i as O } from "./is-development-CLUAnsU7.js";
7
7
  import { d as j, g as Q, u as _ } from "./grid-context-jn9y8tNE.js";
8
- import { g as U } from "./data-grid-DiBSbN2Y.js";
8
+ import { g as U } from "./data-grid-Bbf8t4z3.js";
9
9
  function S() {
10
10
  var t;
11
11
  return ((t = _()) == null ? void 0 : t.toolbarSeam) ?? null;
@@ -156,4 +156,4 @@ export {
156
156
  Z as D,
157
157
  Y as a
158
158
  };
159
- //# sourceMappingURL=toolbar-z8vXnpXz.js.map
159
+ //# sourceMappingURL=toolbar-DoKcoE2q.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar-z8vXnpXz.js","sources":["../../src/components/data-grid/toolbar.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* DataGridToolbar: the shared table toolbar parts over DataGrid. */\n/* */\n/* The parts live in `_shared/table-toolbar/` and reach the grid only */\n/* through its `TableToolbarSeam` (`./toolbar-seam.ts`). Inside the */\n/* grid's `toolbar` slot they find it through `DataGridContext`; a */\n/* toolbar lifted into a page header uses `DataGridToolbarProvider`. */\n/* Callbacks get a `ToolbarActionContext` (ids and an export snapshot), */\n/* never an engine API. No AG Grid, no DataTable import. */\n/* -------------------------------------------------------------------- */\n\nimport { forwardRef, useCallback, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { TableToolbarProvider } from '../_shared/table-toolbar/context';\nimport {\n exportFileName,\n snapshotToTable,\n writeTablePdf,\n writeTableXlsx,\n} from '../_shared/table-toolbar/export-files';\nimport {\n actionContextOf,\n createTableToolbarParts,\n} from '../_shared/table-toolbar/parts';\nimport type { TableToolbarSeam } from '../_shared/table-toolbar/seam';\nimport { isDevelopment } from '../_shared/is-development';\nimport {\n dataGridMountSignal,\n getDataGridToolbarSeam,\n useDataGridContext,\n} from './grid-context';\nimport { dataGridSeamCaption } from './toolbar-seam';\nimport type {\n DataGridExportFormat,\n DataGridHandle,\n DataGridToolbarBulkActionProps,\n DataGridToolbarColumnToggleProps,\n DataGridToolbarExportMenuItemProps,\n DataGridToolbarExportMenuProps,\n DataGridToolbarFacetFilterProps,\n DataGridToolbarFilterChipsProps,\n DataGridToolbarPrintProps,\n DataGridToolbarProviderProps,\n DataGridToolbarQuickSearchProps,\n DataGridToolbarRefreshProps,\n DataGridToolbarRootProps,\n} from './types';\n\n/** The grid's own seam when the part sits in its `toolbar` slot. */\nfunction useSlotSeam(): TableToolbarSeam | null {\n return useDataGridContext()?.toolbarSeam ?? null;\n}\n\n/* ------------------------------------------------------------------ */\n/* Lifted toolbar: DataGridToolbarProvider */\n/* ------------------------------------------------------------------ */\n\n/** A seam with nothing behind it, for a lifted toolbar whose grid has not\n * mounted yet: reads are empty, writes do nothing, `isReady()` is false. */\nconst UNBOUND_SEAM: TableToolbarSeam = {\n features: {\n syncsFilterInputs: true,\n exportsAllRows: false,\n keyboardReorder: true,\n },\n isReady: () => false,\n subscribe: () => () => {},\n getColumns: () => [],\n setColumnVisible: () => {},\n moveColumn: () => {},\n getQuickFilter: () => '',\n setQuickFilter: () => {},\n getFilterModel: () => ({}),\n setColumnFilter: () => {},\n clearAllFilters: () => {},\n setFacet: () => {},\n getFacet: () => null,\n getSelectionCount: () => 0,\n getSelectedRowIds: () => [],\n getExportSnapshot: () => undefined,\n exportCsv: () => {},\n print: () => {},\n};\n\ninterface Bound {\n handle: DataGridHandle | null;\n seam: TableToolbarSeam | null;\n}\n\n/**\n * For a toolbar outside the grid (a page header). Binds to whatever\n * `getGrid()` returns, once after mount and again whenever any DataGrid\n * mounts or unmounts (`dataGridMountSignal`): no polling. Until a grid is\n * bound the parts are inert.\n */\nexport function DataGridToolbarProvider({\n getGrid,\n children,\n}: DataGridToolbarProviderProps) {\n const [bound, setBound] = useState<Bound>({ handle: null, seam: null });\n useEffect(() => {\n const resolve = () => {\n const handle = getGrid() ?? null;\n const seam = getDataGridToolbarSeam(handle);\n setBound((prev) =>\n prev.handle === handle && prev.seam === seam ? prev : { handle, seam },\n );\n };\n resolve();\n return dataGridMountSignal.subscribe(resolve);\n }, [getGrid]);\n return (\n <TableToolbarProvider seam={bound.seam ?? UNBOUND_SEAM}>\n {children}\n </TableToolbarProvider>\n );\n}\n\n/**\n * Builds the toolbar and its parts. One call, at module level, marked pure:\n * a bundler drops it (and every shared part, DropdownMenu, Tag and Kbd with\n * it) from an app that imports `DataGrid` without `DataGridToolbar`.\n */\nfunction createDataGridToolbar() {\n const parts = createTableToolbarParts({\n prefix: 'DataGrid.Toolbar',\n missingProvider: (caller) =>\n `${caller} must be rendered in a DataGrid's \\`toolbar\\` slot or inside <DataGridToolbarProvider>.`,\n useEngineSeam: useSlotSeam,\n });\n\n /* ---- Root ---- */\n\n const Root = forwardRef<HTMLDivElement, DataGridToolbarRootProps>(\n (props, ref) => {\n const slotSeam = useSlotSeam();\n const root = (\n <parts.Root ref={ref} data-component=\"data-grid-toolbar\" {...props} />\n );\n // In the grid's slot, the grid's own seam is the nearest one, even\n // under a lifted provider for another grid.\n return slotSeam ? (\n <TableToolbarProvider seam={slotSeam}>{root}</TableToolbarProvider>\n ) : (\n root\n );\n },\n );\n Root.displayName = 'DataGrid.Toolbar';\n\n /* ---- Parts with DataGrid-shaped props ---- */\n\n const QuickSearch = (props: DataGridToolbarQuickSearchProps) => (\n <parts.QuickSearch {...props} />\n );\n QuickSearch.displayName = 'DataGrid.Toolbar.QuickSearch';\n\n const FilterChips = (_props: DataGridToolbarFilterChipsProps) => (\n <parts.FilterChips />\n );\n FilterChips.displayName = 'DataGrid.Toolbar.FilterChips';\n\n /**\n * Pills for one `select` column (or, in server mode, a host key). Any other\n * field renders nothing and warns in development: v9 would evaluate a set\n * model with the column's own (wrong) filter fn.\n */\n const FacetFilter = ({\n field,\n options,\n label,\n }: DataGridToolbarFacetFilterProps) => {\n const seam = parts.useSeam('FacetFilter');\n const column = seam.getColumns().find((c) => c.id === field);\n // A DataGrid seam exports every row exactly in client mode, so a host key\n // (no column) is allowed when it does not.\n const allowed = !seam.isReady()\n ? true\n : column\n ? column.filterKind === 'select' && !column.masked\n : !seam.features.exportsAllRows;\n useEffect(() => {\n if (!allowed && isDevelopment()) {\n console.warn(\n `DataGridToolbar.FacetFilter: \"${field}\" is not a column with filter { kind: 'select' }` +\n ' (or a host key in server mode); the pills are not rendered.',\n );\n }\n }, [allowed, field]);\n if (!allowed) return null;\n return <parts.FacetFilter field={field} options={options} label={label} />;\n };\n FacetFilter.displayName = 'DataGrid.Toolbar.FacetFilter';\n\n const ColumnToggle = forwardRef<\n HTMLButtonElement,\n DataGridToolbarColumnToggleProps\n >((props, ref) => <parts.ColumnToggle ref={ref} {...props} />);\n ColumnToggle.displayName = 'DataGrid.Toolbar.ColumnToggle';\n\n const Print = forwardRef<HTMLButtonElement, DataGridToolbarPrintProps>(\n (props, ref) => <parts.Print ref={ref} {...props} />,\n );\n Print.displayName = 'DataGrid.Toolbar.Print';\n\n const Refresh = forwardRef<HTMLButtonElement, DataGridToolbarRefreshProps>(\n (props, ref) => <parts.Refresh ref={ref} {...props} />,\n );\n Refresh.displayName = 'DataGrid.Toolbar.Refresh';\n\n const BulkAction = forwardRef<\n HTMLButtonElement,\n DataGridToolbarBulkActionProps\n >((props, ref) => <parts.BulkAction ref={ref} {...props} />);\n BulkAction.displayName = 'DataGrid.Toolbar.BulkAction';\n\n const DEFAULT_EXPORT_ITEMS: Exclude<DataGridExportFormat, 'custom'>[] = [\n 'csv',\n 'xlsx',\n 'pdf',\n ];\n\n /**\n * One export item. Built-ins write every filtered row (client mode); in\n * server mode the grid holds one page, so they render disabled with the\n * reason. `custom` always runs and gets the action context.\n */\n const ExportMenuItem = (props: DataGridToolbarExportMenuItemProps) => {\n const { t } = useTranslation('ui');\n const seam = parts.useSeam('ExportMenu.Item');\n const builtIn = props.format !== 'custom';\n const disabled = builtIn && !seam.features.exportsAllRows;\n const handleSelect = useCallback(() => {\n if (props.format === 'custom') {\n props.onExport(actionContextOf(seam));\n return;\n }\n const snapshot = seam.getExportSnapshot();\n if (!snapshot) return;\n const fileName =\n props.fileName ??\n exportFileName(dataGridSeamCaption(seam), props.format);\n if (props.format === 'csv') {\n seam.exportCsv(fileName);\n return;\n }\n const table = snapshotToTable(snapshot);\n if (props.format === 'xlsx') void writeTableXlsx(table, { fileName });\n else void writeTablePdf(table, { fileName });\n }, [props, seam]);\n return (\n <parts.ExportMenuItemBase\n format={props.format}\n label={props.label}\n onSelect={handleSelect}\n disabled={disabled}\n description={\n disabled ? t('dataGrid.toolbar.exportPageOnly') : undefined\n }\n />\n );\n };\n ExportMenuItem.displayName = 'DataGrid.Toolbar.ExportMenu.Item';\n\n const ExportMenu = forwardRef<\n HTMLButtonElement,\n DataGridToolbarExportMenuProps\n >(({ children, ...rest }, ref) => (\n <parts.ExportMenu ref={ref} {...rest}>\n {children ??\n DEFAULT_EXPORT_ITEMS.map((f) => <ExportMenuItem key={f} format={f} />)}\n </parts.ExportMenu>\n ));\n ExportMenu.displayName = 'DataGrid.Toolbar.ExportMenu';\n\n // These leaves render a single DS <IconButton> trigger, so IconButtonGroup\n // accepts them as direct children (see its rendersIconButton DEV check).\n for (const leaf of [ColumnToggle, Print, Refresh, ExportMenu]) {\n (leaf as { rendersIconButton?: boolean }).rendersIconButton = true;\n }\n // Folded into a group's \"More\" menu, Print and Refresh render the shared\n // part's menu item (their action is not an onClick prop).\n Object.assign(Print, { overflowMenuItem: parts.Print.overflowMenuItem });\n Object.assign(Refresh, { overflowMenuItem: parts.Refresh.overflowMenuItem });\n\n const FilterBar = parts.FilterBar;\n const Actions = parts.Actions;\n\n return Object.assign(Root, {\n FilterBar,\n Actions,\n QuickSearch,\n FilterChips,\n FacetFilter,\n ColumnToggle,\n ExportMenu: Object.assign(ExportMenu, { Item: ExportMenuItem }),\n Print,\n Refresh,\n BulkAction,\n });\n}\n\n/**\n * The DataGrid toolbar. Put it in the grid's `toolbar` prop, or lift it into\n * a page header under `DataGridToolbarProvider`.\n */\nexport const DataGridToolbar = /* @__PURE__ */ createDataGridToolbar();\n"],"names":["useSlotSeam","_a","useDataGridContext","UNBOUND_SEAM","DataGridToolbarProvider","getGrid","children","bound","setBound","useState","useEffect","resolve","handle","seam","getDataGridToolbarSeam","prev","dataGridMountSignal","TableToolbarProvider","createDataGridToolbar","parts","createTableToolbarParts","caller","Root","forwardRef","props","ref","slotSeam","root","jsx","QuickSearch","FilterChips","_props","FacetFilter","field","options","label","column","c","allowed","isDevelopment","ColumnToggle","Print","Refresh","BulkAction","DEFAULT_EXPORT_ITEMS","ExportMenuItem","t","useTranslation","disabled","handleSelect","useCallback","actionContextOf","snapshot","fileName","exportFileName","dataGridSeamCaption","table","snapshotToTable","writeTableXlsx","writeTablePdf","ExportMenu","rest","f","leaf","FilterBar","Actions","DataGridToolbar"],"mappings":"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"}
1
+ {"version":3,"file":"toolbar-DoKcoE2q.js","sources":["../../src/components/data-grid/toolbar.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* DataGridToolbar: the shared table toolbar parts over DataGrid. */\n/* */\n/* The parts live in `_shared/table-toolbar/` and reach the grid only */\n/* through its `TableToolbarSeam` (`./toolbar-seam.ts`). Inside the */\n/* grid's `toolbar` slot they find it through `DataGridContext`; a */\n/* toolbar lifted into a page header uses `DataGridToolbarProvider`. */\n/* Callbacks get a `ToolbarActionContext` (ids and an export snapshot), */\n/* never an engine API. No AG Grid, no DataTable import. */\n/* -------------------------------------------------------------------- */\n\nimport { forwardRef, useCallback, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { TableToolbarProvider } from '../_shared/table-toolbar/context';\nimport {\n exportFileName,\n snapshotToTable,\n writeTablePdf,\n writeTableXlsx,\n} from '../_shared/table-toolbar/export-files';\nimport {\n actionContextOf,\n createTableToolbarParts,\n} from '../_shared/table-toolbar/parts';\nimport type { TableToolbarSeam } from '../_shared/table-toolbar/seam';\nimport { isDevelopment } from '../_shared/is-development';\nimport {\n dataGridMountSignal,\n getDataGridToolbarSeam,\n useDataGridContext,\n} from './grid-context';\nimport { dataGridSeamCaption } from './toolbar-seam';\nimport type {\n DataGridExportFormat,\n DataGridHandle,\n DataGridToolbarBulkActionProps,\n DataGridToolbarColumnToggleProps,\n DataGridToolbarExportMenuItemProps,\n DataGridToolbarExportMenuProps,\n DataGridToolbarFacetFilterProps,\n DataGridToolbarFilterChipsProps,\n DataGridToolbarPrintProps,\n DataGridToolbarProviderProps,\n DataGridToolbarQuickSearchProps,\n DataGridToolbarRefreshProps,\n DataGridToolbarRootProps,\n} from './types';\n\n/** The grid's own seam when the part sits in its `toolbar` slot. */\nfunction useSlotSeam(): TableToolbarSeam | null {\n return useDataGridContext()?.toolbarSeam ?? null;\n}\n\n/* ------------------------------------------------------------------ */\n/* Lifted toolbar: DataGridToolbarProvider */\n/* ------------------------------------------------------------------ */\n\n/** A seam with nothing behind it, for a lifted toolbar whose grid has not\n * mounted yet: reads are empty, writes do nothing, `isReady()` is false. */\nconst UNBOUND_SEAM: TableToolbarSeam = {\n features: {\n syncsFilterInputs: true,\n exportsAllRows: false,\n keyboardReorder: true,\n },\n isReady: () => false,\n subscribe: () => () => {},\n getColumns: () => [],\n setColumnVisible: () => {},\n moveColumn: () => {},\n getQuickFilter: () => '',\n setQuickFilter: () => {},\n getFilterModel: () => ({}),\n setColumnFilter: () => {},\n clearAllFilters: () => {},\n setFacet: () => {},\n getFacet: () => null,\n getSelectionCount: () => 0,\n getSelectedRowIds: () => [],\n getExportSnapshot: () => undefined,\n exportCsv: () => {},\n print: () => {},\n};\n\ninterface Bound {\n handle: DataGridHandle | null;\n seam: TableToolbarSeam | null;\n}\n\n/**\n * For a toolbar outside the grid (a page header). Binds to whatever\n * `getGrid()` returns, once after mount and again whenever any DataGrid\n * mounts or unmounts (`dataGridMountSignal`): no polling. Until a grid is\n * bound the parts are inert.\n */\nexport function DataGridToolbarProvider({\n getGrid,\n children,\n}: DataGridToolbarProviderProps) {\n const [bound, setBound] = useState<Bound>({ handle: null, seam: null });\n useEffect(() => {\n const resolve = () => {\n const handle = getGrid() ?? null;\n const seam = getDataGridToolbarSeam(handle);\n setBound((prev) =>\n prev.handle === handle && prev.seam === seam ? prev : { handle, seam },\n );\n };\n resolve();\n return dataGridMountSignal.subscribe(resolve);\n }, [getGrid]);\n return (\n <TableToolbarProvider seam={bound.seam ?? UNBOUND_SEAM}>\n {children}\n </TableToolbarProvider>\n );\n}\n\n/**\n * Builds the toolbar and its parts. One call, at module level, marked pure:\n * a bundler drops it (and every shared part, DropdownMenu, Tag and Kbd with\n * it) from an app that imports `DataGrid` without `DataGridToolbar`.\n */\nfunction createDataGridToolbar() {\n const parts = createTableToolbarParts({\n prefix: 'DataGrid.Toolbar',\n missingProvider: (caller) =>\n `${caller} must be rendered in a DataGrid's \\`toolbar\\` slot or inside <DataGridToolbarProvider>.`,\n useEngineSeam: useSlotSeam,\n });\n\n /* ---- Root ---- */\n\n const Root = forwardRef<HTMLDivElement, DataGridToolbarRootProps>(\n (props, ref) => {\n const slotSeam = useSlotSeam();\n const root = (\n <parts.Root ref={ref} data-component=\"data-grid-toolbar\" {...props} />\n );\n // In the grid's slot, the grid's own seam is the nearest one, even\n // under a lifted provider for another grid.\n return slotSeam ? (\n <TableToolbarProvider seam={slotSeam}>{root}</TableToolbarProvider>\n ) : (\n root\n );\n },\n );\n Root.displayName = 'DataGrid.Toolbar';\n\n /* ---- Parts with DataGrid-shaped props ---- */\n\n const QuickSearch = (props: DataGridToolbarQuickSearchProps) => (\n <parts.QuickSearch {...props} />\n );\n QuickSearch.displayName = 'DataGrid.Toolbar.QuickSearch';\n\n const FilterChips = (_props: DataGridToolbarFilterChipsProps) => (\n <parts.FilterChips />\n );\n FilterChips.displayName = 'DataGrid.Toolbar.FilterChips';\n\n /**\n * Pills for one `select` column (or, in server mode, a host key). Any other\n * field renders nothing and warns in development: v9 would evaluate a set\n * model with the column's own (wrong) filter fn.\n */\n const FacetFilter = ({\n field,\n options,\n label,\n }: DataGridToolbarFacetFilterProps) => {\n const seam = parts.useSeam('FacetFilter');\n const column = seam.getColumns().find((c) => c.id === field);\n // A DataGrid seam exports every row exactly in client mode, so a host key\n // (no column) is allowed when it does not.\n const allowed = !seam.isReady()\n ? true\n : column\n ? column.filterKind === 'select' && !column.masked\n : !seam.features.exportsAllRows;\n useEffect(() => {\n if (!allowed && isDevelopment()) {\n console.warn(\n `DataGridToolbar.FacetFilter: \"${field}\" is not a column with filter { kind: 'select' }` +\n ' (or a host key in server mode); the pills are not rendered.',\n );\n }\n }, [allowed, field]);\n if (!allowed) return null;\n return <parts.FacetFilter field={field} options={options} label={label} />;\n };\n FacetFilter.displayName = 'DataGrid.Toolbar.FacetFilter';\n\n const ColumnToggle = forwardRef<\n HTMLButtonElement,\n DataGridToolbarColumnToggleProps\n >((props, ref) => <parts.ColumnToggle ref={ref} {...props} />);\n ColumnToggle.displayName = 'DataGrid.Toolbar.ColumnToggle';\n\n const Print = forwardRef<HTMLButtonElement, DataGridToolbarPrintProps>(\n (props, ref) => <parts.Print ref={ref} {...props} />,\n );\n Print.displayName = 'DataGrid.Toolbar.Print';\n\n const Refresh = forwardRef<HTMLButtonElement, DataGridToolbarRefreshProps>(\n (props, ref) => <parts.Refresh ref={ref} {...props} />,\n );\n Refresh.displayName = 'DataGrid.Toolbar.Refresh';\n\n const BulkAction = forwardRef<\n HTMLButtonElement,\n DataGridToolbarBulkActionProps\n >((props, ref) => <parts.BulkAction ref={ref} {...props} />);\n BulkAction.displayName = 'DataGrid.Toolbar.BulkAction';\n\n const DEFAULT_EXPORT_ITEMS: Exclude<DataGridExportFormat, 'custom'>[] = [\n 'csv',\n 'xlsx',\n 'pdf',\n ];\n\n /**\n * One export item. Built-ins write every filtered row (client mode); in\n * server mode the grid holds one page, so they render disabled with the\n * reason. `custom` always runs and gets the action context.\n */\n const ExportMenuItem = (props: DataGridToolbarExportMenuItemProps) => {\n const { t } = useTranslation('ui');\n const seam = parts.useSeam('ExportMenu.Item');\n const builtIn = props.format !== 'custom';\n const disabled = builtIn && !seam.features.exportsAllRows;\n const handleSelect = useCallback(() => {\n if (props.format === 'custom') {\n props.onExport(actionContextOf(seam));\n return;\n }\n const snapshot = seam.getExportSnapshot();\n if (!snapshot) return;\n const fileName =\n props.fileName ??\n exportFileName(dataGridSeamCaption(seam), props.format);\n if (props.format === 'csv') {\n seam.exportCsv(fileName);\n return;\n }\n const table = snapshotToTable(snapshot);\n if (props.format === 'xlsx') void writeTableXlsx(table, { fileName });\n else void writeTablePdf(table, { fileName });\n }, [props, seam]);\n return (\n <parts.ExportMenuItemBase\n format={props.format}\n label={props.label}\n onSelect={handleSelect}\n disabled={disabled}\n description={\n disabled ? t('dataGrid.toolbar.exportPageOnly') : undefined\n }\n />\n );\n };\n ExportMenuItem.displayName = 'DataGrid.Toolbar.ExportMenu.Item';\n\n const ExportMenu = forwardRef<\n HTMLButtonElement,\n DataGridToolbarExportMenuProps\n >(({ children, ...rest }, ref) => (\n <parts.ExportMenu ref={ref} {...rest}>\n {children ??\n DEFAULT_EXPORT_ITEMS.map((f) => <ExportMenuItem key={f} format={f} />)}\n </parts.ExportMenu>\n ));\n ExportMenu.displayName = 'DataGrid.Toolbar.ExportMenu';\n\n // These leaves render a single DS <IconButton> trigger, so IconButtonGroup\n // accepts them as direct children (see its rendersIconButton DEV check).\n for (const leaf of [ColumnToggle, Print, Refresh, ExportMenu]) {\n (leaf as { rendersIconButton?: boolean }).rendersIconButton = true;\n }\n // Folded into a group's \"More\" menu, Print and Refresh render the shared\n // part's menu item (their action is not an onClick prop).\n Object.assign(Print, { overflowMenuItem: parts.Print.overflowMenuItem });\n Object.assign(Refresh, { overflowMenuItem: parts.Refresh.overflowMenuItem });\n\n const FilterBar = parts.FilterBar;\n const Actions = parts.Actions;\n\n return Object.assign(Root, {\n FilterBar,\n Actions,\n QuickSearch,\n FilterChips,\n FacetFilter,\n ColumnToggle,\n ExportMenu: Object.assign(ExportMenu, { Item: ExportMenuItem }),\n Print,\n Refresh,\n BulkAction,\n });\n}\n\n/**\n * The DataGrid toolbar. Put it in the grid's `toolbar` prop, or lift it into\n * a page header under `DataGridToolbarProvider`.\n */\nexport const DataGridToolbar = /* @__PURE__ */ createDataGridToolbar();\n"],"names":["useSlotSeam","_a","useDataGridContext","UNBOUND_SEAM","DataGridToolbarProvider","getGrid","children","bound","setBound","useState","useEffect","resolve","handle","seam","getDataGridToolbarSeam","prev","dataGridMountSignal","TableToolbarProvider","createDataGridToolbar","parts","createTableToolbarParts","caller","Root","forwardRef","props","ref","slotSeam","root","jsx","QuickSearch","FilterChips","_props","FacetFilter","field","options","label","column","c","allowed","isDevelopment","ColumnToggle","Print","Refresh","BulkAction","DEFAULT_EXPORT_ITEMS","ExportMenuItem","t","useTranslation","disabled","handleSelect","useCallback","actionContextOf","snapshot","fileName","exportFileName","dataGridSeamCaption","table","snapshotToTable","writeTableXlsx","writeTablePdf","ExportMenu","rest","f","leaf","FilterBar","Actions","DataGridToolbar"],"mappings":"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"}
@@ -0,0 +1,291 @@
1
+ import { jsxs as c, jsx as r, Fragment as G } from "react/jsx-runtime";
2
+ import { forwardRef as J, useId as W, useRef as g, useEffect as X, useMemo as y, useCallback as S, useImperativeHandle as Q } from "react";
3
+ import { useTranslation as Y } from "react-i18next";
4
+ import { u as Z } from "./registry-DvAUVLHh.js";
5
+ import { F as R, a as ee } from "./file-upload-DQc0LsBM.js";
6
+ import { B as te } from "./badge-BUk4RjTS.js";
7
+ import { I as ie } from "./icon-button-S8_weU3g.js";
8
+ import { a as F } from "./format-number-DdzqwMs1.js";
9
+ import { I as re } from "./info-CGn22peZ.js";
10
+ import { L as ae } from "./loader-circle-BECIU_8N.js";
11
+ import { C as ne } from "./check-DrFSN__t.js";
12
+ import { F as oe } from "./file-code-Cf-_gSzd.js";
13
+ import { X as se } from "./x-B5YnXwCz.js";
14
+ const de = {
15
+ id: "invoice-upload",
16
+ capabilities: ["dismiss"],
17
+ state: {
18
+ files: {
19
+ type: "Array<{ id, name, size, state: 'waiting' | 'reading' | 'read' | 'error' }>",
20
+ descriptionKey: "ui.agent.invoiceUpload.state.files",
21
+ description: "Files in the list. Identifiers and metadata only: never file content or error text.",
22
+ read: (a) => a.getFiles()
23
+ }
24
+ },
25
+ actions: {
26
+ remove_file: {
27
+ safety: "destructive",
28
+ argsType: "{ id: string }",
29
+ argsSchema: {
30
+ type: "object",
31
+ properties: {
32
+ id: {
33
+ type: "string",
34
+ description: "Id of the file to remove (data-file-id)."
35
+ }
36
+ },
37
+ required: ["id"]
38
+ },
39
+ idempotent: !0,
40
+ descriptionKey: "ui.agent.invoiceUpload.actions.removeFile",
41
+ description: "Remove the file with the given id from the list. The host is told through onRemove.",
42
+ examples: [{ args: { id: "file-1" }, note: "Remove the first file." }],
43
+ invoke: (a, d) => {
44
+ a.removeFile(d.id);
45
+ }
46
+ },
47
+ clear: {
48
+ safety: "destructive",
49
+ idempotent: !0,
50
+ descriptionKey: "ui.agent.invoiceUpload.actions.clear",
51
+ description: "Remove every file from the list.",
52
+ invoke: (a) => {
53
+ a.clear();
54
+ }
55
+ }
56
+ },
57
+ domHooks: {
58
+ root: { attr: "data-component", value: "invoice-upload" },
59
+ instanceId: {
60
+ attr: "data-component-id",
61
+ sourceProp: "id",
62
+ description: "Sourced from the id prop."
63
+ },
64
+ item: {
65
+ attr: "data-file-id",
66
+ description: "Each listed file emits its id as data-file-id."
67
+ }
68
+ }
69
+ }, ce = [".xml", ".p7m"], le = [];
70
+ function me(a) {
71
+ return { "*/*": a.map((d) => d.toLowerCase()) };
72
+ }
73
+ function pe() {
74
+ return typeof crypto < "u" && crypto.randomUUID ? crypto.randomUUID() : `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
75
+ }
76
+ const b = {
77
+ waiting: {
78
+ key: "invoiceUpload.state.waiting",
79
+ en: "Waiting",
80
+ variant: "neutral"
81
+ },
82
+ reading: {
83
+ key: "invoiceUpload.state.reading",
84
+ en: "Reading",
85
+ variant: "info"
86
+ },
87
+ read: { key: "invoiceUpload.state.read", en: "Read", variant: "success" },
88
+ error: { key: "invoiceUpload.state.error", en: "Error", variant: "error" }
89
+ }, ue = J(
90
+ ({
91
+ id: a,
92
+ mode: d = "single",
93
+ accept: w = ce,
94
+ maxFileSize: _,
95
+ maxFiles: $,
96
+ maxTotalSize: L,
97
+ files: i = le,
98
+ onFilesChosen: v,
99
+ onRemove: l,
100
+ onReject: f,
101
+ disabled: x = !1,
102
+ disabledReason: I,
103
+ upsell: A,
104
+ className: B
105
+ }, O) => {
106
+ const { t: n, i18n: m } = Y("ui"), U = W(), E = d === "multiple", h = g(i);
107
+ h.current = i;
108
+ const o = g(l);
109
+ o.current = l;
110
+ const N = g(/* @__PURE__ */ new Map()), T = g(null), z = g(null);
111
+ X(() => {
112
+ var s, p;
113
+ const e = z.current;
114
+ if (!e || i.some((u) => u.id === e.id)) return;
115
+ z.current = null;
116
+ const t = i[Math.min(e.index, i.length - 1)];
117
+ t ? (s = N.current.get(t.id)) == null || s.focus() : (p = T.current) == null || p.focus();
118
+ }, [i]);
119
+ const M = y(() => me(w), [w]), V = y(
120
+ () => i.filter((e) => e.state !== "error").map((e) => ({ size: e.size })),
121
+ [i]
122
+ ), K = S(
123
+ (e) => {
124
+ e.length !== 0 && (v == null || v(e.map((t) => ({ id: pe(), file: t }))));
125
+ },
126
+ [v]
127
+ ), P = S(
128
+ (e) => {
129
+ f == null || f(
130
+ e.map(
131
+ (t) => ({
132
+ name: t.file.name,
133
+ size: t.file.size,
134
+ reason: t.reason === "file-too-small" ? "file-invalid-type" : t.reason
135
+ })
136
+ )
137
+ );
138
+ },
139
+ [f]
140
+ ), k = y(
141
+ () => ({
142
+ getFiles: () => h.current.map((e) => ({
143
+ id: e.id,
144
+ name: e.name,
145
+ size: e.size,
146
+ state: e.state
147
+ })),
148
+ removeFile: (e) => {
149
+ var t;
150
+ h.current.some((s) => s.id === e) && ((t = o.current) == null || t.call(o, e));
151
+ },
152
+ clear: () => {
153
+ var e;
154
+ for (const t of h.current) (e = o.current) == null || e.call(o, t.id);
155
+ }
156
+ }),
157
+ []
158
+ );
159
+ Q(O, () => k, [k]), Z(de, k, a);
160
+ const H = y(() => {
161
+ if (i.length === 0) return "";
162
+ if (i.length === 1) {
163
+ const t = i[0];
164
+ return t.state === "error" && t.error ? t.error : n(b[t.state].key, b[t.state].en);
165
+ }
166
+ const e = i.filter(
167
+ (t) => t.state === "read" || t.state === "error"
168
+ ).length;
169
+ return n("invoiceUpload.progress", "{{done}} of {{total}} files done", {
170
+ done: F(e, m.language),
171
+ total: F(i.length, m.language)
172
+ });
173
+ }, [i, n, m.language]), C = `${U}-reason`, j = (e, t) => {
174
+ const s = `${U}-name-${t}`, p = `${U}-remove-${t}`, u = b[e.state], q = e.state === "reading" ? /* @__PURE__ */ r(ae, { className: "ds:animate-spin ds:motion-reduce:animate-none" }) : e.state === "read" ? /* @__PURE__ */ r(ne, {}) : void 0;
175
+ return /* @__PURE__ */ c(
176
+ "li",
177
+ {
178
+ "data-file-id": e.id,
179
+ "data-state": e.state,
180
+ className: "ds:flex ds:items-start ds:gap-[var(--spacing-md)] ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-background ds:p-[var(--spacing-md)]",
181
+ children: [
182
+ /* @__PURE__ */ r(
183
+ oe,
184
+ {
185
+ "aria-hidden": "true",
186
+ className: "ds:size-8 ds:shrink-0 ds:text-muted-foreground"
187
+ }
188
+ ),
189
+ /* @__PURE__ */ c("div", { className: "ds:min-w-0 ds:flex-1", children: [
190
+ /* @__PURE__ */ r("p", { id: s, className: "type-label ds:m-0 ds:truncate", children: e.name }),
191
+ /* @__PURE__ */ c("p", { className: "type-meta ds:m-0 ds:text-muted-foreground", children: [
192
+ ee(e.size, m.language, n),
193
+ e.state === "read" && e.invoiceCount !== void 0 && /* @__PURE__ */ r("span", { className: "ds:ms-[var(--spacing-sm)]", children: n("invoiceUpload.invoiceCount", {
194
+ count: e.invoiceCount,
195
+ countText: F(e.invoiceCount, m.language),
196
+ defaultValue: "{{countText}} invoices",
197
+ defaultValue_one: "{{countText}} invoice",
198
+ defaultValue_other: "{{countText}} invoices"
199
+ }) })
200
+ ] }),
201
+ e.state === "error" && e.error && /* @__PURE__ */ r("p", { className: "type-meta ds:m-0 ds:mt-[var(--spacing-xs)] ds:text-destructive", children: e.error })
202
+ ] }),
203
+ /* @__PURE__ */ r(te, { variant: u.variant, size: "md", leading: q, children: n(u.key, u.en) }),
204
+ /* @__PURE__ */ r(
205
+ ie,
206
+ {
207
+ ref: (D) => {
208
+ D ? N.current.set(e.id, D) : N.current.delete(e.id);
209
+ },
210
+ id: p,
211
+ intent: "ghost",
212
+ icon: /* @__PURE__ */ r(se, {}),
213
+ "aria-label": n("invoiceUpload.remove", "Remove"),
214
+ "aria-labelledby": `${p} ${s}`,
215
+ onClick: () => {
216
+ z.current = { id: e.id, index: t }, l == null || l(e.id);
217
+ }
218
+ }
219
+ )
220
+ ]
221
+ },
222
+ e.id
223
+ );
224
+ };
225
+ return /* @__PURE__ */ c(
226
+ "div",
227
+ {
228
+ "data-component": "invoice-upload",
229
+ "data-component-id": a,
230
+ "data-mode": d,
231
+ className: ["ds:flex ds:flex-col ds:gap-[var(--spacing-md)]", B].filter(Boolean).join(" "),
232
+ children: [
233
+ A ? /* @__PURE__ */ r("div", { "data-slot": "upsell", children: A }) : /* @__PURE__ */ c(G, { children: [
234
+ /* @__PURE__ */ r(
235
+ R,
236
+ {
237
+ ref: T,
238
+ variant: "dropzone",
239
+ multiple: E,
240
+ maxFiles: E ? $ ?? 1 / 0 : 1,
241
+ maxSize: _,
242
+ maxTotalSize: L,
243
+ accept: M,
244
+ strictAccept: !0,
245
+ showFileList: !1,
246
+ listedFiles: V,
247
+ disabled: x,
248
+ describedBy: x && I ? C : void 0,
249
+ onDrop: K,
250
+ onReject: P
251
+ }
252
+ ),
253
+ x && I && /* @__PURE__ */ c(
254
+ "p",
255
+ {
256
+ id: C,
257
+ className: "type-meta ds:m-0 ds:flex ds:items-center ds:gap-[var(--spacing-xs)] ds:text-muted-foreground",
258
+ children: [
259
+ /* @__PURE__ */ r(re, { "aria-hidden": "true", className: "ds:size-3.5 ds:shrink-0" }),
260
+ I
261
+ ]
262
+ }
263
+ )
264
+ ] }),
265
+ i.length > 0 && /* @__PURE__ */ r(
266
+ "ul",
267
+ {
268
+ "aria-label": n("invoiceUpload.listLabel", "Chosen invoice files"),
269
+ className: "ds:m-0 ds:flex ds:max-h-[32rem] ds:list-none ds:flex-col ds:gap-[var(--spacing-sm)] ds:overflow-y-auto ds:p-0",
270
+ children: i.map(j)
271
+ }
272
+ ),
273
+ /* @__PURE__ */ r("span", { role: "status", "aria-live": "polite", className: "ds:sr-only", children: H })
274
+ ]
275
+ }
276
+ );
277
+ }
278
+ );
279
+ ue.displayName = "InvoiceUpload";
280
+ const we = [
281
+ "file-invalid-type",
282
+ "file-too-large",
283
+ "too-many-files",
284
+ "total-too-large"
285
+ ];
286
+ export {
287
+ we as I,
288
+ ue as a,
289
+ de as i
290
+ };
291
+ //# sourceMappingURL=types-BrJRsnSG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-BrJRsnSG.js","sources":["../../src/components/invoice-upload/invoice-upload.agent.ts","../../src/components/invoice-upload/invoice-upload.tsx","../../src/components/invoice-upload/types.ts"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter: InvoiceUpload. */\n/* */\n/* Works against the curated InvoiceUploadHandle: ids, names, sizes and */\n/* states only, never file content or an error text. An agent cannot */\n/* open the native file picker, so it can list, remove and clear, not */\n/* add. Removing discards a staged file, so both actions are destructive. */\n/* See src/docs/26-agent-readiness.mdx. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { InvoiceUploadHandle } from './types';\n\nexport const invoiceUploadAgent: AgentAdapter<InvoiceUploadHandle> = {\n id: 'invoice-upload',\n capabilities: ['dismiss'],\n state: {\n files: {\n type: \"Array<{ id, name, size, state: 'waiting' | 'reading' | 'read' | 'error' }>\",\n descriptionKey: 'ui.agent.invoiceUpload.state.files',\n description:\n 'Files in the list. Identifiers and metadata only: never file content or error text.',\n read: (handle) => handle.getFiles(),\n },\n },\n actions: {\n remove_file: {\n safety: 'destructive',\n argsType: '{ id: string }',\n argsSchema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Id of the file to remove (data-file-id).',\n },\n },\n required: ['id'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.invoiceUpload.actions.removeFile',\n description:\n 'Remove the file with the given id from the list. The host is told through onRemove.',\n examples: [{ args: { id: 'file-1' }, note: 'Remove the first file.' }],\n invoke: (handle, args: { id: string }) => {\n handle.removeFile(args.id);\n },\n },\n clear: {\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.invoiceUpload.actions.clear',\n description: 'Remove every file from the list.',\n invoke: (handle) => {\n handle.clear();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'invoice-upload' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-file-id',\n description: 'Each listed file emits its id as data-file-id.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n type ReactNode,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FileCode, Info, LoaderCircle, X, Check } from 'lucide-react';\nimport { useAgentRegistration } from '../../agent';\nimport { FileUpload, type FileUploadRejection } from '../file-upload';\nimport { formatFileSize } from '../file-upload/file-upload';\nimport { Badge } from '../badge';\nimport { IconButton } from '../icon-button';\nimport { formatNumber } from '../_shared/format-number';\nimport { invoiceUploadAgent } from './invoice-upload.agent';\nimport type {\n InvoiceUploadFile,\n InvoiceUploadFileState,\n InvoiceUploadHandle,\n InvoiceUploadProps,\n InvoiceUploadRejection,\n} from './types';\n\nconst DEFAULT_ACCEPT: readonly string[] = ['.xml', '.p7m'];\nconst NO_FILES: readonly InvoiceUploadFile[] = [];\n\n/** `*` as the MIME key lets the extension decide: a signed `.p7m` arrives\n * with an empty or odd MIME type, and a `.xml` as `text/xml` or\n * `application/xml`. FileUpload's strict check then refuses the rest. */\nfunction toDropzoneAccept(\n extensions: readonly string[],\n): Record<string, string[]> {\n return { '*/*': extensions.map((ext) => ext.toLowerCase()) };\n}\n\nfunction newFileId(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n return `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n}\n\nconst STATE_BADGE: Record<\n InvoiceUploadFileState,\n { key: string; en: string; variant: 'neutral' | 'info' | 'success' | 'error' }\n> = {\n waiting: {\n key: 'invoiceUpload.state.waiting',\n en: 'Waiting',\n variant: 'neutral',\n },\n reading: {\n key: 'invoiceUpload.state.reading',\n en: 'Reading',\n variant: 'info',\n },\n read: { key: 'invoiceUpload.state.read', en: 'Read', variant: 'success' },\n error: { key: 'invoiceUpload.state.error', en: 'Error', variant: 'error' },\n};\n\nexport const InvoiceUpload = forwardRef<\n InvoiceUploadHandle,\n InvoiceUploadProps\n>(\n (\n {\n id,\n mode = 'single',\n accept = DEFAULT_ACCEPT,\n maxFileSize,\n maxFiles,\n maxTotalSize,\n files = NO_FILES,\n onFilesChosen,\n onRemove,\n onReject,\n disabled = false,\n disabledReason,\n upsell,\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation('ui');\n const uid = useId();\n const multiple = mode === 'multiple';\n\n const filesRef = useRef(files);\n filesRef.current = files;\n const onRemoveRef = useRef(onRemove);\n onRemoveRef.current = onRemove;\n\n // Removing a row drops its button from the DOM. Remember where it was so\n // focus can move to the next row (WCAG 2.4.3), or to the dropzone.\n const removeButtons = useRef(new Map<string, HTMLButtonElement>());\n const dropzoneRef = useRef<HTMLDivElement>(null);\n const pendingFocus = useRef<{ id: string; index: number } | null>(null);\n useEffect(() => {\n const pending = pendingFocus.current;\n if (!pending) return;\n if (files.some((f) => f.id === pending.id)) return;\n pendingFocus.current = null;\n const next = files[Math.min(pending.index, files.length - 1)];\n if (next) removeButtons.current.get(next.id)?.focus();\n else dropzoneRef.current?.focus();\n }, [files]);\n\n const dropzoneAccept = useMemo(() => toDropzoneAccept(accept), [accept]);\n\n // Files in error do not count against the limits: the host can retry or\n // remove them, and they hold nothing the platform keeps.\n const listedFiles = useMemo(\n () =>\n files.filter((f) => f.state !== 'error').map((f) => ({ size: f.size })),\n [files],\n );\n\n const handleDrop = useCallback(\n (accepted: File[]) => {\n if (accepted.length === 0) return;\n onFilesChosen?.(accepted.map((file) => ({ id: newFileId(), file })));\n },\n [onFilesChosen],\n );\n\n const handleReject = useCallback(\n (rejections: FileUploadRejection[]) => {\n onReject?.(\n rejections.map(\n (r): InvoiceUploadRejection => ({\n name: r.file.name,\n size: r.file.size,\n reason:\n r.reason === 'file-too-small' ? 'file-invalid-type' : r.reason,\n }),\n ),\n );\n },\n [onReject],\n );\n\n const handle = useMemo<InvoiceUploadHandle>(\n () => ({\n getFiles: () =>\n filesRef.current.map((f) => ({\n id: f.id,\n name: f.name,\n size: f.size,\n state: f.state,\n })),\n removeFile: (fileId) => {\n if (filesRef.current.some((f) => f.id === fileId)) {\n onRemoveRef.current?.(fileId);\n }\n },\n clear: () => {\n for (const f of filesRef.current) onRemoveRef.current?.(f.id);\n },\n }),\n [],\n );\n useImperativeHandle(ref, () => handle, [handle]);\n useAgentRegistration(invoiceUploadAgent, handle, id);\n\n // A polite summary for assistive technology: one file says its own\n // state, many say how far the reading has got.\n const announcement = useMemo(() => {\n if (files.length === 0) return '';\n if (files.length === 1) {\n const only = files[0];\n if (only.state === 'error' && only.error) return only.error;\n return t(STATE_BADGE[only.state].key, STATE_BADGE[only.state].en);\n }\n const done = files.filter(\n (f) => f.state === 'read' || f.state === 'error',\n ).length;\n return t('invoiceUpload.progress', '{{done}} of {{total}} files done', {\n done: formatNumber(done, i18n.language),\n total: formatNumber(files.length, i18n.language),\n });\n }, [files, t, i18n.language]);\n\n const reasonId = `${uid}-reason`;\n\n const renderRow = (f: InvoiceUploadFile, index: number): ReactNode => {\n const nameId = `${uid}-name-${index}`;\n const removeId = `${uid}-remove-${index}`;\n const badge = STATE_BADGE[f.state];\n const leading =\n f.state === 'reading' ? (\n <LoaderCircle className=\"ds:animate-spin ds:motion-reduce:animate-none\" />\n ) : f.state === 'read' ? (\n <Check />\n ) : undefined;\n return (\n <li\n key={f.id}\n data-file-id={f.id}\n data-state={f.state}\n className=\"ds:flex ds:items-start ds:gap-[var(--spacing-md)] ds:rounded-[var(--radius-md)] ds:border ds:border-border ds:bg-background ds:p-[var(--spacing-md)]\"\n >\n <FileCode\n aria-hidden=\"true\"\n className=\"ds:size-8 ds:shrink-0 ds:text-muted-foreground\"\n />\n <div className=\"ds:min-w-0 ds:flex-1\">\n <p id={nameId} className=\"type-label ds:m-0 ds:truncate\">\n {f.name}\n </p>\n <p className=\"type-meta ds:m-0 ds:text-muted-foreground\">\n {formatFileSize(f.size, i18n.language, t)}\n {f.state === 'read' && f.invoiceCount !== undefined && (\n <span className=\"ds:ms-[var(--spacing-sm)]\">\n {t('invoiceUpload.invoiceCount', {\n count: f.invoiceCount,\n countText: formatNumber(f.invoiceCount, i18n.language),\n defaultValue: '{{countText}} invoices',\n defaultValue_one: '{{countText}} invoice',\n defaultValue_other: '{{countText}} invoices',\n })}\n </span>\n )}\n </p>\n {f.state === 'error' && f.error && (\n <p className=\"type-meta ds:m-0 ds:mt-[var(--spacing-xs)] ds:text-destructive\">\n {f.error}\n </p>\n )}\n </div>\n <Badge variant={badge.variant} size=\"md\" leading={leading}>\n {t(badge.key, badge.en)}\n </Badge>\n <IconButton\n ref={(node) => {\n if (node) removeButtons.current.set(f.id, node);\n else removeButtons.current.delete(f.id);\n }}\n id={removeId}\n intent=\"ghost\"\n icon={<X />}\n aria-label={t('invoiceUpload.remove', 'Remove')}\n aria-labelledby={`${removeId} ${nameId}`}\n onClick={() => {\n pendingFocus.current = { id: f.id, index };\n onRemove?.(f.id);\n }}\n />\n </li>\n );\n };\n\n return (\n <div\n data-component=\"invoice-upload\"\n data-component-id={id}\n data-mode={mode}\n className={['ds:flex ds:flex-col ds:gap-[var(--spacing-md)]', className]\n .filter(Boolean)\n .join(' ')}\n >\n {upsell ? (\n <div data-slot=\"upsell\">{upsell}</div>\n ) : (\n <>\n <FileUpload\n ref={dropzoneRef}\n variant=\"dropzone\"\n multiple={multiple}\n maxFiles={multiple ? (maxFiles ?? Infinity) : 1}\n maxSize={maxFileSize}\n maxTotalSize={maxTotalSize}\n accept={dropzoneAccept}\n strictAccept\n showFileList={false}\n listedFiles={listedFiles}\n disabled={disabled}\n describedBy={disabled && disabledReason ? reasonId : undefined}\n onDrop={handleDrop}\n onReject={handleReject}\n />\n {disabled && disabledReason && (\n <p\n id={reasonId}\n className=\"type-meta ds:m-0 ds:flex ds:items-center ds:gap-[var(--spacing-xs)] ds:text-muted-foreground\"\n >\n <Info aria-hidden=\"true\" className=\"ds:size-3.5 ds:shrink-0\" />\n {disabledReason}\n </p>\n )}\n </>\n )}\n\n {files.length > 0 && (\n <ul\n aria-label={t('invoiceUpload.listLabel', 'Chosen invoice files')}\n className=\"ds:m-0 ds:flex ds:max-h-[32rem] ds:list-none ds:flex-col ds:gap-[var(--spacing-sm)] ds:overflow-y-auto ds:p-0\"\n >\n {files.map(renderRow)}\n </ul>\n )}\n\n <span role=\"status\" aria-live=\"polite\" className=\"ds:sr-only\">\n {announcement}\n </span>\n </div>\n );\n },\n);\n\nInvoiceUpload.displayName = 'InvoiceUpload';\n","import type { ReactNode } from 'react';\n\n/** Where one chosen file stands. The host owns it; InvoiceUpload only shows it. */\nexport type InvoiceUploadFileState = 'waiting' | 'reading' | 'read' | 'error';\n\n/** One row of the host-controlled file list. */\nexport interface InvoiceUploadFile {\n /** The id InvoiceUpload emitted for this file in `onFilesChosen`. */\n id: string;\n /** File name as chosen. Shown, never parsed. */\n name: string;\n /** Size in bytes. */\n size: number;\n state: InvoiceUploadFileState;\n /** The platform's translated message for state `error`. Host text: shown\n * as given, also in privacy mode. */\n error?: string;\n /** Invoices found in the file, once `read`. */\n invoiceCount?: number;\n}\n\nexport const INVOICE_UPLOAD_REJECTION_REASONS = [\n 'file-invalid-type',\n 'file-too-large',\n 'too-many-files',\n 'total-too-large',\n] as const;\n\nexport type InvoiceUploadRejectionReason =\n (typeof INVOICE_UPLOAD_REJECTION_REASONS)[number];\n\n/** A file the limits refused. Name and size only, never the file. */\nexport interface InvoiceUploadRejection {\n name: string;\n size: number;\n reason: InvoiceUploadRejectionReason;\n}\n\nexport type InvoiceUploadMode = 'single' | 'multiple';\n\nexport interface InvoiceUploadProps {\n /** Opaque instance id, emitted as `data-component-id` for the agent registry. */\n id?: string;\n /** `single` (default) replaces the old file; `multiple` appends. */\n mode?: InvoiceUploadMode;\n /** Accepted extensions. Default `['.xml', '.p7m']`. */\n accept?: readonly string[];\n /** Largest size of one file, in bytes. */\n maxFileSize?: number;\n /** Most files in the list (multiple mode; single mode is always 1). */\n maxFiles?: number;\n /** Largest total size of the listed files, in bytes. */\n maxTotalSize?: number;\n /** The controlled list. The host owns every state. */\n files?: readonly InvoiceUploadFile[];\n /** New files, each with a fresh id (unique even for same-name files).\n * The host reads them and updates `files`. */\n onFilesChosen?: (files: Array<{ id: string; file: File }>) => void;\n onRemove?: (id: string) => void;\n /** Files the limits refused. Over the file count or the total size, the\n * whole drop is refused; by type or size, only the offending files. */\n onReject?: (rejections: InvoiceUploadRejection[]) => void;\n disabled?: boolean;\n /** Why it is disabled; shown under the dropzone. */\n disabledReason?: string;\n /** The practice has no warehouse module: shown instead of the dropzone. */\n upsell?: ReactNode;\n className?: string;\n}\n\n/** Curated agent handle: ids and metadata, never file content. Agents\n * cannot open the native picker. */\nexport interface InvoiceUploadHandle {\n getFiles: () => Array<{\n id: string;\n name: string;\n size: number;\n state: InvoiceUploadFileState;\n }>;\n removeFile: (id: string) => void;\n clear: () => void;\n}\n"],"names":["invoiceUploadAgent","handle","args","DEFAULT_ACCEPT","NO_FILES","toDropzoneAccept","extensions","ext","newFileId","STATE_BADGE","InvoiceUpload","forwardRef","id","mode","accept","maxFileSize","maxFiles","maxTotalSize","files","onFilesChosen","onRemove","onReject","disabled","disabledReason","upsell","className","ref","t","i18n","useTranslation","uid","useId","multiple","filesRef","useRef","onRemoveRef","removeButtons","dropzoneRef","pendingFocus","useEffect","pending","f","next","_a","_b","dropzoneAccept","useMemo","listedFiles","handleDrop","useCallback","accepted","file","handleReject","rejections","r","fileId","useImperativeHandle","useAgentRegistration","announcement","only","done","formatNumber","reasonId","renderRow","index","nameId","removeId","badge","leading","LoaderCircle","jsx","Check","jsxs","FileCode","formatFileSize","Badge","IconButton","node","X","Fragment","FileUpload","Info","INVOICE_UPLOAD_REJECTION_REASONS"],"mappings":"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"}